1 2
7 8
Reviewer, Experienced player (925)
Joined: 11/18/2011
Posts: 305
Location: Morocco
Second WIP! Finished up to Turbo Man... Made many major time saves alone in this stage, but the time save will be spent for a revisit in Shade to get Proto Shield... To add to what PJ and FractalFusion said about it, yes it is potentially 3 seconds faster to do a revisit than dying and continuing the stage in one visit. Also, I improved first WIP by about 75 frames due to better Rush Search RNG. It took a bit of frames to do resyncing however (cause RNG changes every frame, so potential are coming your way!).
I still learn more about English. https://www.youtube.com/user/McBobX100
I wrote:
Working is the best way to achieve goals in speedruning. Hardworking is a pain.
Reviewer, Experienced player (925)
Joined: 11/18/2011
Posts: 305
Location: Morocco
So I have been doing some quick calculations on how the revisit saves time considering that it may look slower. I have broke down the benefits of the revisit, and I concluded that the revisit saves around 1096 frames (18.26 seconds). Here are the details:
  • Normally, if you want to get Proto Shield, you have to encounter Proto Man in Cloud Man and Turbo Man BEFORE fighting him in Shade Man stage. Based on that, the route was made around visiting Shade Man stage just once, while also fighting Proto Man.
  • But, due to the fact that Shade Man's weapon is very useful for OHKO both Turbo Man and Spring Man, there was a chance that doing Shade first to get his weapon then revisiting can be optimal. This is because, Turbo buster only fight and Spring fight are very slow. Moreover, Slash fight can be faster if you use Turbo Man's weapon (freezing animation is longer than burning animation)
  • Doing the revisit route is only longer in Shade Man's stage, Pumpkin mini boss fight and Shade Man's fight.
  • Doing non revisit route is longer in Truck (Turbo Man stage mini boss), Turbo, Slash and Spring fights. These are actually longer than what they look like.
Here are the differences between both routes based on FractalFusion's WIP and sparky's TAS listed in a table (excluding cutscenes)
SegmentNo RevisitRevisitDifference (No Revisit - Revisit)
Shade20122292-280
Turbo384021541686
Protoman33374931-1594
Spring265015401110
Slash28822708174
Total14721136251096
I still learn more about English. https://www.youtube.com/user/McBobX100
I wrote:
Working is the best way to achieve goals in speedruning. Hardworking is a pain.
Editor, Expert player (2045)
Joined: 6/15/2005
Posts: 3275
I was thinking the "No Revisit" route is supposed to be Turbo -> Shade -> Slash -> Spring rather than Turbo -> Slash -> Spring -> Shade. IIRC, Revisit still saves time, just not as much as what it seems based on the calculations above.
Reviewer, Experienced player (925)
Joined: 11/18/2011
Posts: 305
Location: Morocco
FractalFusion wrote:
I was thinking the "No Revisit" route is supposed to be Turbo -> Shade -> Slash -> Spring rather than Turbo -> Slash -> Spring -> Shade.
The later is the one used by sparky, it is supposed to be weakness route, but the first one is more optimal since it will have Spring quick kill, but in both cases, it is now no longer optimal to do no revisit because we have cutscene skips which can soft lock the game in second Proto cutscene after the fight for example.
FractalFusion wrote:
IIRC, Revisit still saves time, just not as much as what it seems based on the calculations above.
I was surprised too, but I redone calculation multiple times. I hope I wasn't using wrong numbers then! The way I tried to get those numbers was just comparing stuff that benefit a lot from the route, which are mainly boss fights, There are minor sections where having Noise Crush early saves time during a stage, like killing first dino in Slash stage quicker or reducing lag from Junk Shield in Turbo Man stage. Other than that, there aren't any benefits. I tried to carefully exclude cutscenes from comparisons due to version differences, and also including the revisit stage which is around 2 minutes I'll calculate and see if I get same numbers once again :) EDIT: I just noticed that sparky didn't use Scorch Wheel against Slash while he had it, so that is something I should exclude, though, I don't think it will change numbers significantly. EDIT2: I have redone my calculations once again, and I excluded Slash Man's fight as I explained. Result was that revisit route saves around 937 frames or 15.62 seconds. EDIT3: I guess FractalFusion was comparing the optimal no revisit route (Turbo -> Shade -> Slash -> Spring). Doing some quick comparison, the no revisit is still faster in this case by around 173 frames, which makes it better. However, thanks to Rush Search glitch, if we account the cutscene interruption, the revisit route saves around 413 frames (disregarding Japanese vs English differences), which is still significant.
I still learn more about English. https://www.youtube.com/user/McBobX100
I wrote:
Working is the best way to achieve goals in speedruning. Hardworking is a pain.
Reviewer, Experienced player (925)
Joined: 11/18/2011
Posts: 305
Location: Morocco
Third WIP! Entering Wily Stages... We're officially more than 10 seconds ahead of sparky! (time save is a lot more, but at least the run will look faster when submitting xD) EDIT: I compared cutscene times left in the run, and potentially, US version is faster on that regard by around 6 seconds... So any time gain from here will be directly reflected on the run. The next and final Rush Search trick will be against first Wily fight, which saves around 16 seconds... Overall, the run will show a real time improvement of around 32 seconds (give or take some frames).
I still learn more about English. https://www.youtube.com/user/McBobX100
I wrote:
Working is the best way to achieve goals in speedruning. Hardworking is a pain.
Editor, Expert player (2045)
Joined: 6/15/2005
Posts: 3275
In order not to forget things like RNG addresses (which I forget easily since I apparently did not document this on a fixed page anywhere), I have created a very basic Lua script that monitors RNG in any Mega Man game that uses "MMX RNG", including MMX-X6, MM7 and R&F. You can download the script here: https://tasvideos.org/UserFiles/Info/638585240848962683 . Although this script does not display everything related to Rush Search, it should be useful for getting the RNG value to line up, especially the "R-2F" value displayed there as well. * I'll add a few other things about MM7 and how Rush Search works (at least so I don't forget in the future). The RNG address is at 0xFA. The RNG subroutine in ROM is at 0xC1023D. There are two calls to RNG per frame which are not used (at ROM addresses 0xC00CD2 and 0xC10CB4). They occur before other RNG calls. When Rush Search is summoned, just before the tail wag animation, there is a call to the RNG at 0xC14B85:
c14b85:  jsl  $c1023d   [c1023d]   A:6280 X:0074 Y:0002 S:012e D:0c80 DB:80 NvMXdizc V:260 H:210
...
c14b89:  and  #$03                 A:754e X:0074 Y:0002 S:012e D:0c80 DB:80 NvMXdizc V:260 H:305
c14b8b:  clc                       A:7502 X:0074 Y:0002 S:012e D:0c80 DB:80 nvMXdizc V:260 H:308
c14b8c:  adc  #$03                 A:7502 X:0074 Y:0002 S:012e D:0c80 DB:80 nvMXdizc V:260 H:311
c14b8e:  sta  $3a       [000cba]   A:7505 X:0074 Y:0002 S:012e D:0c80 DB:80 nvMXdizc V:260 H:314
c14b90:  rts                       A:7505 X:0074 Y:0002 S:012e D:0c80 DB:80 nvMXdizc V:260 H:320
This call takes the RNG value mod 4, and adds 3 to it, to get the number of Rush tail wags (from 3 to 6). Then after the tail wag animation has finished, the next frame gives two more RNG calls. One is for the item obtained:
c14d38:  jsl  $c1023d   [c1023d]   A:ffff X:0003 Y:001e S:012c D:0c80 DB:80 NvMXdizc V:254 H:152
...
c14d3c:  cmp  #$ff                 A:5d65 X:0003 Y:001e S:012c D:0c80 DB:80 NvMXdizc V:254 H:246
c14d3e:  bne  $4d41     [c14d41]   A:5d65 X:0003 Y:001e S:012c D:0c80 DB:80 nvMXdizc V:254 H:249
c14d41:  ldx  #$00                 A:5d65 X:0003 Y:001e S:012c D:0c80 DB:80 nvMXdizc V:254 H:254
c14d43:  cmp  $a3e2,x   [80a3e2]   A:5d65 X:0000 Y:001e S:012c D:0c80 DB:80 nvMXdiZc V:254 H:257
c14d46:  bcc  $4d4b     [c14d4b]   A:5d65 X:0000 Y:001e S:012c D:0c80 DB:80 nvMXdizC V:254 H:263
c14d48:  inx                       A:5d65 X:0000 Y:001e S:012c D:0c80 DB:80 nvMXdizC V:254 H:266
c14d49:  bra  $4d43     [c14d43]   A:5d65 X:0001 Y:001e S:012c D:0c80 DB:80 nvMXdizC V:254 H:269
c14d43:  cmp  $a3e2,x   [80a3e3]   A:5d65 X:0001 Y:001e S:012c D:0c80 DB:80 nvMXdizC V:254 H:273
c14d46:  bcc  $4d4b     [c14d4b]   A:5d65 X:0001 Y:001e S:012c D:0c80 DB:80 nvMXdizC V:254 H:279
c14d48:  inx                       A:5d65 X:0001 Y:001e S:012c D:0c80 DB:80 nvMXdizC V:254 H:282
c14d49:  bra  $4d43     [c14d43]   A:5d65 X:0002 Y:001e S:012c D:0c80 DB:80 nvMXdizC V:254 H:285
...
c14d43:  cmp  $a3e2,x   [80a3e8]   A:5d65 X:0006 Y:001e S:012c D:0c80 DB:80 nvMXdizC V:255 H: 15
c14d46:  bcc  $4d4b     [c14d4b]   A:5d65 X:0006 Y:001e S:012c D:0c80 DB:80 NvMXdizc V:255 H: 21
c14d4b:  stx  $3b       [000cbb]   A:5d65 X:0006 Y:001e S:012c D:0c80 DB:80 NvMXdizc V:255 H: 25
c14d4d:  rts                       A:5d65 X:0006 Y:001e S:012c D:0c80 DB:80 NvMXdizc V:255 H: 32
c14ba4:  ldx  $3b       [000cbb]   A:5d65 X:0006 Y:001e S:012e D:0c80 DB:80 NvMXdizc V:255 H: 42
c14ba6:  lda  $a3fc,x   [80a402]   A:5d65 X:0006 Y:001e S:012e D:0c80 DB:80 nvMXdizc V:255 H: 48
c14ba9:  and  #$bf                 A:5d84 X:0006 Y:001e S:012e D:0c80 DB:80 NvMXdizc V:255 H: 56
c14bab:  sta  $3d       [000cbd]   A:5d84 X:0006 Y:001e S:012e D:0c80 DB:80 NvMXdizc V:255 H: 59
The above code compares (RNG value mod 256) by going through a table to determine the item. The following site gives the resulting probabilities: https://www.thesupersnes.tv/compendium/mm7/rush-search/ . In particular, small life energy needs a value of 0x00 to 0x17, large life energy 0x18-0x1F, small weapon energy 0x20-0x37 and large weapon energy 0x38-0x3F. Finally, the other RNG call is for how many times to repeat Rush's dig animation:
c14bba:  jsl  $c1023d   [c1023d]   A:6180 X:0074 Y:0002 S:012e D:0c80 DB:80 NvMXdizc V:255 H:299
...
c14bbe:  and  #$03                 A:2f38 X:0074 Y:0002 S:012e D:0c80 DB:80 NvMXdizc V:256 H: 53
c14bc0:  clc                       A:2f00 X:0074 Y:0002 S:012e D:0c80 DB:80 nvMXdiZc V:256 H: 56
c14bc1:  adc  $3d       [000cbd]   A:2f00 X:0074 Y:0002 S:012e D:0c80 DB:80 nvMXdiZc V:256 H: 59
c14bc3:  and  #$7f                 A:2f84 X:0074 Y:0002 S:012e D:0c80 DB:80 NvMXdizc V:256 H: 65
c14bc5:  sta  $3a       [000cba]   A:2f04 X:0074 Y:0002 S:012e D:0c80 DB:80 nvMXdizc V:256 H: 68
c14bc7:  rts                       A:2f04 X:0074 Y:0002 S:012e D:0c80 DB:80 nvMXdizc V:256 H: 75
Take RNG value mod 4, and add it to a fixed number depending on the item obtained to get the number of loops in the dig animation. For small life and weapon energy, add 2 (from 2 to 5). For large life and weapon energy, add 8 (from 8 to 11). Note on RAM addresses: 0xCBA = # of tail wags / digging loops, 0xCBB = X value of item obtained, from 0 to 25. (0 = small life energy, 1 = large life energy, 2 = small weapon energy, 3 = large weapon energy) 0xCBD = # of fixed dig loops to add to Rush's digging animation. If bit 7 is set, Rush does a second digging animation of 5 faster digs (only for certain items).
1 2
7 8