Despite failing to show the blue and red boxes in the Fatal Fury games, I decided to continue on and study the throw system. This led to an unexpected discovery.
Try running Garou with the debugger (mame garou -debug
) and enter this breakpoint in the console:
bp 028928, 1, {printf "char base=%x, throw base=%x, throw data=%016x", a4, a1, maincpu.rq@a1; g}
(That's all one line.) Now whenever a throw is attempted it'll print out the parameters, including the range. The fourth byte of the data is the frontal range and the fifth and sixth are vertical range, which is zero for ground throws. Command throws have multiple active frames and print more than one line.
In order for throwboxes to work in the script, it needs to know two things: is a throw being attempted right now, and what are the grab ranges. The same principle applies to any kind of box, but the others usually make their presence known continuously in RAM where the script can read all about 'em. However, throw attempts in this game leave no telltale sign in RAM, which is typical as I've found. Plus, the memory that the throw routine is reading from is volatile, so if you try to read from the same addresses at some other time you'll get unrelated values. So throwboxes could only be implemented if there were a way to set breakpoints with Lua. (memory.registerexec()
)
Recent Comments