So, well-timed pausing/un-pausing during the transition from the end-level elevator screen to the elevator/score-tally screen can keep the game in the proper state to increment the room variable more than it's supposed to. That much was mostly obvious, I guess.
I wasn't able to get it to skip more than 5 rooms (same as shown in WhiteHat's youtube clip linked above) in either FCEUX and BizHawk 1.13.0. Frame-by-frame inputs, per-poll inputs with Lua*, and just trying to mash Start with a controller at any emulation speed all saw the same results.
Freezing address $62A when it's 0x40 during the screen transition does keep it skipping along all the way to the ending spaceship screen ($16 = 0x4D), so hopefully there is way to do the same with pausing.
In lieu of trying to articulate my half-assed debugging, I'll just paste this here:
$0005#TransitionRelevant#b0 set during NMI after room loaded, reset after room++
$0016#Room#
$00BD#someFlag#branch out of polling-purgatory if non-zero
$00FB#Input#
$04BC#FrameCounter#
$0523#Difficulty#
$05FB#Music_setting#
$06AB#ElevatorThingy#No more skips if >= 0x41
$072A#StartPressed#
$072B#Paused#
$0734#AlsoInput#
*this dumb game is constantly polling input, sometimes as much as 70 times per frame, and It seemed like being able to have distinct start presses on adjacent frames would be helpful at one point.
--------------------------------------------------------------------------------------------------------------------------------------------
Edit: Got more skips, but only with poll-based input. Could not reproduce with frame-based input.
Just when I was convinced that a pause and an un-pause had to have an NMI routine between them for a skip to happen, putting a pair on the same frame (3397 here) worked out—and with fewer total start presses too.
This script works with
#4971: Randil & Alyosha's NES Cybernoid: The Fighting Machine in 04:35.78
Language: Lua
poll=0;i=1;frame=emu.framecount()
pauses={ 3390,1
,3396,2
,3397,1
,3397,3
,3406,1
,3418,1
,3435,1
,3444,1
,3451,1
,3452,1
}
function pollAdvance()
poll=poll+1
if (frame ~= emu.framecount()) then poll=1 end
frame=emu.framecount()
if (frame == pauses[i]) and (poll == pauses[i+1]) then
memory.writebyte(0xFB,0x10)
i=i+2
if (i >= #pauses) then i=1 end
end
--print(poll,frame)
end
memory.registerexec(0x830C,1,pollAdvance)
--------------------------------------------------------------------------------------------------------------------------------------------
Another Edit: Floatious told me that simply pressing start every 7 frames got it to skip pretty far, so I started with that, adjusted for when it failed, and
got it to skip to the end of the game. This is probably still fairly sub-optimal.