-- GBA Rayman: Hoodlums' Revenge
--
-- Macros for the actions used while punch hopping.
-- Hold J, K or L and your desired direction and press the frame advance key.
-- Can work around all lag except on the first frame (wait one frame first in those cases).
--
-- J: Hop and punch next frame (gives speed and height)
-- K: Just punch (best for speed but loses height)
-- L: Hop, wait, and then punch (loses speed, but allows for sharp turning)
--
-- Author: DaJaWi
-- 11th Jan 2015
local function punchhop(hop, wait)
client.unpause()
-- Get current direction
local inp = input.get()
local pad = {Left = inp.Left, Right = inp.Right, Up = inp.Up, Down = inp.Down}
-- Keep track of lag frames
memory.usememorydomain("EWRAM")
local startframe = memory.read_u32_le(0x000770)
local framecount = 0
-- Hop (if J or L)
if hop then
pad["A"] = true
repeat
joypad.set(pad)
emu.frameadvance()
local currentframe = memory.read_u32_le(0x000770)
until currentframe >= startframe + 1 or currentframe < startframe
pad["A"] = false
framecount = framecount + 1
end
-- Wait (if L)
if wait then
repeat
joypad.set(pad)
emu.frameadvance()
local currentframe = memory.read_u32_le(0x000770)
until currentframe >= startframe + framecount + wait or currentframe < startframe
framecount = framecount + wait
end
-- Punch
pad["B"] = true
repeat
joypad.set(pad)
emu.frameadvance()
local currentframe = memory.read_u32_le(0x000770)
until currentframe >= startframe + framecount + 1 or currentframe < startframe
pad["B"] = false
framecount = framecount + 1
-- Continue until next critical frame
repeat
joypad.set(pad)
emu.frameadvance()
local currentframe = memory.read_u32_le(0x000770)
until currentframe >= startframe + framecount + 16 or currentframe < startframe
client.pause()
end
local function checkinput()
local inp = input.get()
if inp.J then
-- Hop and punch next frame (gives speed and height)
punchhop(true)
end
if inp.K then
-- Just punch (best for speed but loses height)
punchhop(false)
end
if inp.L then
-- Hop, wait, and then punch (loses speed, but allows for sharp turning)
punchhop(true, 10)
end
end
while true do
checkinput()
emu.frameadvance()
end