Discussion

RAM Addresses

Snake Rattle 'n' Roll
System: Nintendo Entertainment System
Domain Address Data Type Signed Endian Description
RAM 103 Byte Unsigned Big Position in dimension 1
RAM 105 Byte Unsigned Big Position in dimension 2
RAM 107 Byte Unsigned Big Position in dimension 3 (the jumping and falling dimension)
RAM 1339 Byte Unsigned Big Sub position in dimension 1
RAM 1359 Byte Unsigned Big Sub position in dimension 2
RAM 1379 Byte Unsigned Big Sub position in dimension 3
RAM 1568 Byte Unsigned Big Health of final boss
RAM 1017 Byte Unsigned Big Eaten nibbly-pibbly color 1
RAM 1019 Byte Unsigned Big Eaten nibbly-pibbly color 2
RAM 1021 Byte Unsigned Big Eaten nibbly-pibbly color 3

Weight system

The color of the Nibly-pibbly you eat determines how how much weight you'll put on:
You need 4 points for each body piece you put on. The scale at the end of the levels doesn't count the exact number of points, though, to determine if you're heavy enough. It instead just counts the number of body pieces that you have (excluding the head). In the first and second levels you need 4 body pieces to ring the bell. In all levels between 3-9 that have scales you need 5 body pieces. In level 10 you need 6.

Facing the opposite direction that you're moving:

If you build up velocity in the certain direction and immediately push in the opposite direction you'll deaccelerate while still facing the same way. But if you have one frame of no input before pushing in the other direction, you'll face the way in which you're breaking.

Getting ejected up platforms and double jumping:

If you push yourself against a platform and jump up on it, it'll be enough if your position - in the jumping dimension - is less 6 pixels under the platform you're aiming for. Then you'll get ejected the last pixels. The most useful thing about this is a related bug that works in such a way that if you push the jump button at the frame when you're getting ejected, you'll immediately jump again.

Game map

Simple HUD script

dim1speed = 0
dim2speed = 0
xspeed    = 0
xsubspeed = 0
yspeed    = 0
ysubspeed = 0
function stuff()
	xspeed    = memory.readbyte(0x417)
	xsubspeed = memory.readbyte(0x419)
	if (xspeed == 255) then xspeed = -1 end
	
	yspeed    = memory.readbyte(0x41b)
	ysubspeed = memory.readbyte(0x41d)
	if (yspeed == 255) then yspeed = -1 end

	gui.text(1,9 ,"L:"..memory.readbyte(0x67) % 16) -- left axis
	gui.text(1,19,"R:"..memory.readbyte(0x69) % 16) -- right axis
	gui.text(1,29,"H:"..memory.readbyte(0x6b) % 16)	-- height axis
	gui.text(30,9, "LVel:"..(xspeed * 256) + xsubspeed + (yspeed * 256) + ysubspeed)
	gui.text(30,19,"RVel:"..(xspeed * 256) + xsubspeed - (yspeed * 256) - ysubspeed)
end
emu.registerafter(stuff);

GameResources/NES/SnakeRattleNRoll last edited by admin@tasvideos.org 25 days ago
Page History Latest diff List referrers View Source