for the camhack to work we have to save a state, hack memory, advance twice to see the changes, then load the state to prevent desync. since we can omit the framebuffer in savestates, loading them can happen without updating the screen, so the hacked camera remains visible.
advancing 2 frames automatically is done like tastudio does it when it seeks to a frame, only from lua now.
and the most questionable part is "invisible emulation", which is how Gens calls this IIRC, when everything that can distract or slow us down is skipped: sound, video, tools updates.
new lua functions:
- client.invisibleemulation()
- client.seekframe()
* for a test, mGBA core uses fake video and audio buffers and renders to them when we want to "skip" rendering. proper setup would involve actually skipping rendering those inside the core.
* allow disabling video and audio updates for gpgx too (proper approach, no fake buffers involved)
* add the script for Sonic Advance
Adds a small script which, when run, only allows input to P1's controller if both P1 and P2 holds down the specific button simultaneously. Also useful since it demonstrates joypad manipulation.
- use M64K Bus properly
- input display
- fceux font
- map and screen borders when camhack is on
- refactor out some functions
- manual lagtount tweaks
- use r24 alias instead of rl for reading addresses from RAM