This game has 13 stages; 1 Intro stage + 4 Worlds each with 3 stages. While it has a percent counter, along with items to collect, for some reason, said counter counts towards stage completion rather than items collected.
Lua code for positions and other things:
Language: lua
memory.usememorydomain("Combined WRAM")
--EWRAM
local player_ptr = 0x047E18
local speed_ptr = 0x047E20 --u32_le
local speedx = 0x040B7C --u32_le
local speedy = 0x040B80 --u32_le
local crush_timer = 0x040800
--Addresses; all IWRAM
local player_id = 0x0BB6 --Transform
local atoms = 0x1BA6 --Number of atoms collected
local health = 0x0BAC
function update(address)
local pointer = memory.read_u32_le(address)
if pointer > 0x2000000 and pointer < 0x3000000 then
return pointer-0x2000000 --Minus (0x2000000) since BizHawk memory domains
end
return nil
end
--For display things relevant everywhere else
function display_position_info(last_valid_address)
local l_playerx = 0
local l_playery = 0
local l_atoms = memory.readbyte(atoms,"IWRAM")
local l_player_id = memory.readbyte(player_id,"IWRAM")
local l_player_hp = memory.readbyte(health,"IWRAM")
local l_speedx = memory.read_s32_le(speedx)
local l_speedy = memory.read_s32_le(speedy)
local ptr = update(player_ptr)
if ptr ~= nill then
l_playerx = memory.read_u32_le(ptr+0x78)
l_playery = memory.read_u32_le(ptr+0x7C)
gui.drawText(0,30,"X"..string.format('%.6f',l_playerx/65536.0).." Y"..string.format('%.6f',l_playery/65536.0).."("..l_player_id..")",null,null,10,null,null)
end
gui.drawText(0,40,"Speedx: "..l_speedx.." Y:"..l_speedy,null,null,10,null,null)
gui.drawText(0,50,"Items"..l_atoms,null,null,10,null,null)
gui.drawText(0,60,"HP"..l_player_hp,null,null,10,null,null)
end
local last_ptr = nil --Since transitioning areas glitch ptr address for some reason
while true do
display_position_info()
emu.frameadvance()
end
Tricks include:
* Immediately stop: Transforming sets both your vertical and horizontal speed to 0. So if a spring makes you overjump, sometimes, it's faster to transform to another character
* Quick turning: There are multiple ways to quickly turn outside transforming.
** Landing: Right before you land, release the direction input. Upon landing, this makes you do the "land" animation while also setting speed to 0. You cannot enter doors during that animation however.
** Letting go: Outside icy floors, letting go of both left/right directions makes your speed drop by 1/2. The initial movement makes your speed +/- 256. So taking this account, let go for 2 frames, then move the opposite direction for 2 frames. Your speed would go like: 2048, 1024, 512, 256, 0.
Bumping into walls/objects: Bumping into certain things such as crates, doors, or walls instantly drops your speed to 0.
Transform:
There are 5 different transformations, with the human and mice being unlocked initially. You unlock the ability to become a fish, gorilla, and fly after beating worlds 1,2,3 respectively.
Some buttons can only be pushed by certain forms. The button with a hand symbol is human only; a square button with a dot in the middle is mouse only; underwater red buttons are fish only; the fly cannot attack, so it has no buttons.
Max Speeds:
2048 for Human, mouse, fly.
1536 for fish
1034 for gorilla
The only form which can attack while moving and in mid air is the human. It also has the lowest cooldown time, with the ability to rapid fire attacks by holding B for 2 frames, then let go for 2 frames.
The gorilla and mouse can attack once per ~28 frames. Fish attacks once per 36 frames. The fly cannot attack. The fish can move after the 36th frame if you pressed left/right, but not if you hold down; hence you should move diagonally for 1 frame at least.
For breaking the blue crates, it's better to shoot the creature as soon as possible, so as you can turn earlier.