Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
https://www.youtube.com/watch?v=uFl0ax-GYk8
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.
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.
AVI dumping works as expected BTW. Couldn't make fps update while unpaused tho. Only updates if you press/hold frame advance.
New lua functions:
client.invisibleemulation()
client.seekframe()
Script for Sonic Advance:
Tested with the first level of this movie
sonicadvance_test.zip