1 2
6 7 8
Player (230)
Joined: 4/25/2012
Posts: 73
ars4326 wrote:
Ah, I see. In that case, is it also out of the question to possibly manipulate those three floating enemies into generating enough Hover drops and obtain enough fuel to clear the distance?
That was covered earlier in the thread. They can only drop Ps, not Hs.
ars4326
He/Him
Experienced player (778)
Joined: 12/8/2012
Posts: 706
Location: Missouri, USA
That was covered earlier in the thread. They can only drop Ps, not Hs.
Sorry bout that, I completely overlooked it. Again though, amazing work on the run. Best of luck on future progress!
"But as it is written, Eye hath not seen, nor ear heard, neither have entered into the heart of man, the things which God hath prepared for them that love him." - 1 Corinthians 2:9
Joined: 4/2/2008
Posts: 70
Crossposting this here just in case anybody missed it in the submission thread: Link to video Might save more time than the video above.
Joined: 4/2/2008
Posts: 70
Twisted Eye wrote:
Amusingly enough, after beating a boss and getting its prize, you are warped to the entrance of the dungeon you SHOULD have entered by. If I didn't already want to continue-warp, I would have been screwed--miles away from the tank, hahha.
Just so you know it's entirely possible to get back to the tank in a deathless route, I've done it a couple times live myself. I think it'll save about a minute off my realtime deathless run. Thanks for finding this. :)
Player (230)
Joined: 4/25/2012
Posts: 73
UraniumAnchor wrote:
Twisted Eye wrote:
Amusingly enough, after beating a boss and getting its prize, you are warped to the entrance of the dungeon you SHOULD have entered by. If I didn't already want to continue-warp, I would have been screwed--miles away from the tank, hahha.
Just so you know it's entirely possible to get back to the tank in a deathless route, I've done it a couple times live myself. I think it'll save about a minute off my realtime deathless run. Thanks for finding this. :)
On the note of tricks that could improve a realtime deathless run, I know it's pretty tricky to door glitch underwater but you could probably use a triple door glitch to reduce the time spent exiting Area 5: Link to video Obviously if you were actually setting up to do this, you'd leave the tank on the right side of the breakable blocks rather than the left, I just threw this together using my TAS as a base to demonstrate.
Joined: 4/2/2008
Posts: 70
BrotherMojo wrote:
Obviously if you were actually setting up to do this, you'd leave the tank on the right side of the breakable blocks rather than the left, I just threw this together using my TAS as a base to demonstrate.
I honestly have no idea how this didn't occur to me before. That's a pretty big time saver.
Joined: 4/2/2008
Posts: 70
So thanks to the improvements that you guys found, this happened Sunday afternoon: http://www.youtube.com/watch?v=Ew2BgIrVnc8 Wonder when/if any more neat stuff will be found. :)
BigBoct
He/Him
Editor, Former player
Joined: 8/9/2007
Posts: 1692
Location: Tiffin/Republic, OH
That was a great watch. Thanks for sharing!
Previous Name: boct1584
Joined: 4/2/2008
Posts: 70
This also happened a month ago, not sure why I didn't link it too: http://www.youtube.com/watch?v=kZRVCrzwDvQ
Jigwally
He/Him
Active player (427)
Joined: 3/11/2012
Posts: 119
https://www.youtube.com/watch?v=GR3Bajok_FM&feature=youtu.be Zero Noin and I figured out a new Area 7 skip that leads directly into the previously known one.
Player (230)
Joined: 4/25/2012
Posts: 73
Well I feel pretty silly for not thinking of that... though really, by the time I was paying a ton of attention to options like taking damage to prevent fatal falls, I was focusing more on finding skips elsewhere (e.g. area 5, area 3 -> area 8, etc.) than on Area 7. I mean, I'd already found the skip in Area 7, right? :p
Joined: 2/7/2016
Posts: 1
Been working more on the Area 7 skip and noticed a little something interesting that I thought I'd mention here because it seems TAS relevant. Normally in side-scrolling when you walk off a ledge and fall 4 blocks in height, you take 8 bars worth of damage for certain death. However, when your character is crawling, your position in the RAM is set 4 pixels lower; if you crawl into a fall of 4 blocks height you will only take 2 bars of damage instead of 8. In addition to the new skip, this seems relevant to 1 or more falls in the PAL TAS, as well as potential skips that could be found elsewhere.
Joined: 4/2/2008
Posts: 70
Haven't seen it mentioned in here yet, so here: http://zeronoin.com/bm/0002.html JP version has reset warping and less lag. Guess you get to do the run all over again, again. :p
Personman
Other
Joined: 4/20/2008
Posts: 465
So something potentially important happened during the AGDQ race - the area 2 boss just didn't appear in Skavenger's run, but the item was there, so the fight was skipped entirely. Boss despawning has previously been observed in area 5, but in that case, being unable to kill the boss meant the item never spawned, so it wasn't useful. Reproducing this, on the other hand, would a decent chunk of time.
A warb degombs the brangy. Your gitch zanks and leils the warb.
Editor, Player (69)
Joined: 6/22/2005
Posts: 1050
I played around a little with the Chou-Wakusei Senki - MetaFight (J).nes ROM (GoodNES 3.14) after seeing that happen and will summarize some info here. Hopefully this will serve as a starting point for figuring out the glitch. I used FCEUX 2.2.3 and only played as far as the second boss fight. After the scrolling ends when you enter a boss room, the following code is executed:
$971A:A5 14     LDA $0014
$971C:29 07     AND #$07
$971E:AA        TAX
$971F:BD 2B B6  LDA $B62B,X
$9722:60        RTS
$9627:2D FB 03  AND $03FB    <-- This is the important check
$962A:D0 0F     BNE $963B    <-- Branch taken if boss defeated
$962C:A9 C0     LDA #$C0
$962E:85 51     STA $0051
$9630:A9 08     LDA #$08
$9632:20 8C C1  JSR $C18C
$9635:20 CD 97  JSR $97CD
$9638:E6 46     INC $0046
$963A:60        RTS
$963B:20 1A 97  JSR $971A
$0014 is the value (current area - 1) at this point. At $B62B, you find a sequence of increasing powers of two, starting with 0x01. Per Data Crystal's RAM map, $03FB indicates which bosses have been defeated. So this checks if the boss of the current area has been defeated. If it has but the item has not been obtained, then the item is displayed. That seems to be what happened during the race. If the boss has not been defeated, then the room flashes, the boss loads (including its health), and you proceed with the fight. It appears that the health of the first two bosses is hard-coded into the ROM. For area 1, the pertinent code is:
$9C15:A9 80     LDA #$80
$9C17:85 53     STA $0053
For area 2, the pertinent code is:
$91FD:A9 40     LDA #$40
$91FF:85 53     STA $0053
The value from $0053 eventually ends up somewhere around $0470, but the exact RAM address varies. If you change the health to 0x00 before starting the fight (e.g., set execution breakpoint on $9C17, change A from 0x80 to 0x00, then continue emulation), the boss graphics load but immediately go into the death animation. This leads me to believe that whatever Skavenger did may have corrupted $03FB. There are likely other possibilities, but I will let someone with more time and experience take over. Actually, one other thing. This is the code that is executed when a boss is defeated:
$971A:A5 14     LDA $0014
$971C:29 07     AND #$07
$971E:AA        TAX
$971F:BD 2B B6  LDA $B62B,X
$9722:60        RTS
$97A7:0D FB 03  ORA $03FB
$97AA:8D FB 03  STA $03FB
Most if it should be familiar from that first block, but the last two lines update the value at $03FB rather than testing it.
Current Projects: TAS: Wizards & Warriors III.
Player (137)
Joined: 1/18/2016
Posts: 17
I haven't looked at Blaster Master before, but this glitch got me curious, so a few observations from looking at the code in case they give anyone any ideas. Note that these are all from the English ROM (the only version I have handy), so if the glitch turns out to be JP-only then none of this may be of much use... - The only stores to $03FB are the one Dacicus quoted which is done on boss kill, and a few that store literal 0 or 255 (and the 255 clearly can't be the case because the rest of the bosses showed up properly). The store after the area 1 boss kill in that run can't have set the wrong bit, because then the boss would immediately respawn when the room was reloaded after the boss death. - The only indexed stores that could reach $03FB are the stores to the PPU RAM write buffer at $0300. I played up to area 2 to check, but the buffer high water mark was $0340, and a cursory review of the code suggests it's pretty good at flushing the buffer before it overflows, so it seems unlikely to me that a buffer overflow is the cause. (Also, in order to have disabled only the second boss, the store value would have to have been $02 or $03, which seems unlikely for an arbitrary PPU data store; and if the buffer overflowed all the way up to $03FB then it would stomp on lots of other stuff in the $03xx range, which would probably cause more problems than just a missing boss.) On the other hand, Personman's example of a case when both a boss and its item were missing could indicate a buffer overflow that wrongly set bits in both $03FB and $03FC, so I dunno. - The boss-defeated store to $03FB has this stack trace (again, addresses are from the English ROM - bank 4 is mapped to $8000 here):
(0) A109: sta $03FB
(1) A58C: jsr $A07B
(2) C9D3: jmp ($007A) = $A58C
(3) C987: jsr $C9A4
(4) C3D8: jsr $C971
For $A07B to reach the store to $03FB, the following have to be true: - $0053 = 0 - The low bit of $0010 is clear - $03FD >= 127 It does look like this routine is called for other purposes as well, so conceivably there could be a case where all those preconditions are (incorrectly) met, which would trigger the glitch. Here's the relevant part of that routine:
A07B: A5 53     lda $53
A07D: F0 10     beq $A08F
A07F: AD FD 03  lda $03FD
A082: F0 7B     beq $A0FF
A084: CE FD 03  dec $03FD
A087: D0 76     bne $A0FF
A089: 20 18 A1  jsr $A118
A08C: 4C FC A0  jmp $A0FC
A08F: A5 10     lda $10
A091: 4A        lsr a
A092: B0 19     bcs $A0AD
A094: AD FD 03  lda $03FD
A097: D0 0A     bne $A0A3
A099: A9 0A     lda #$0A
A09B: 20 16 C2  jsr $C216
A09E: A9 0B     lda #$0B
A0A0: 20 16 C2  jsr $C216
A0A3: EE FD 03  inc $03FD
A0A6: AD FD 03  lda $03FD
A0A9: C9 80     cmp #$80
A0AB: B0 53     bcs $A100
(...)
A100: 20 0E C1  jsr $C10E  // Only reachable from branch at $A0AB
A103: 20 72 A0  jsr $A072  // Get bit for current area (encapsulates "lda $14" etc.)
A106: 0D FB 03  ora $03FB  // Set boss-killed flag for current area
A109: 8D FB 03  sta $03FB  // Store updated flag byte
A10C: A9 5A     lda #$5A
A10E: 85 46     sta $46
A110: A9 00     lda #$00
A112: 20 1A C1  jsr $C11A
A115: 68        pla
A116: 68        pla
A117: 60        rts
Jigwally
He/Him
Active player (427)
Joined: 3/11/2012
Posts: 119
This may not mean anything but do we know if his console was powered on directly before the race or just soft reset? The JP version of BM doesn't clear its RAM values when you soft reset, e.g. bosses stay beaten and items stay collected. If the game had been played at all since it was powered on, or possibly even if it had been reset from the title screen one or more times, it's possible that the game could have begun with a slightly different set of initial RAM values than if it was started directly from a power on.
Player (172)
Joined: 7/1/2016
Posts: 263
I agree with Jigwally. We also don't know if it was a real cart or flash-cart. You need $03FB=02 and that's it.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (3822)
Joined: 11/30/2014
Posts: 2832
Location: US
This is looking very similar to that Contra level end glitch from a while ago. It could just be a very fortuitous hardware error. Might want to keep this in mind before dumping too many hours into trying to reproduce it.
Player (137)
Joined: 1/18/2016
Posts: 17
FWIW, it sounds like it was definitely a power-off reset: https://www.youtube.com/watch?v=g5Hq2eASg74&t=29m19s I don't see how $03FB could get $02 in normal play anyway, since even on a soft reset, you'd have to have gone through the area 1 boss first. It could well be a cosmic ray-type event, but I have a vague recollection of seeing this glitch happen once or twice while playing it as a kid -- though to be fair, that could just be a false memory from watching the AGDQ run.
Player (172)
Joined: 7/1/2016
Posts: 263
You play one game from flash cart than starts blaster master. Would blaster master when loading make full reset of all important ram values in this situation? I don't known edit: and when they ask "you definitely turn of the power?" there is no straight answer. They said "he kill first boss". They just don't know that if $03FB=02 than only second boss counts as killed boss. edit2: maybe even if you open flash cart menu while playing blaster master it can writes something in nes ram. Who knows how that thing works?
Skavenger216
He/Him
Joined: 1/18/2017
Posts: 2
Thought id register for an account here and chime in with some details. I used an original JP cart with an official Nintendo made JP-US converter that came in a US cart of Hogan's Alley. I definitely did a hard power cycle before the race as well. The consoles used there were RGB modded frontloaders. If theres anything else i can answer to help trying to track down what caused this by all means please ask!! thanks everyone :)
Player (172)
Joined: 7/1/2016
Posts: 263
Skavenger216 wrote:
I used an original JP cart with an official Nintendo made JP-US converter that came in a US cart of Hogan's Alley. I definitely did a hard power cycle before the race as well. The consoles used there were RGB modded frontloaders.
Thank you! I just was trying to recreate this glitch. I was thinking maybe somehow after beating first boss you managed to change that value at 03FB. And by mashing buttons i managed to softlock the game. Is it known glitch? Seems like if you press start at certain frame after beating the boss - you can softlock the game, because congratulation music doesn't start playing. Same with dead. If you press start at certain frame after dying you can softlock the game. Also you can swim in the air. Link to video
Skavenger216
He/Him
Joined: 1/18/2017
Posts: 2
swimming in the air is known about..... me and Jamevil were actually trying to use that to come up with an area 5 skip a year or so ago. the pause softlocks are also something we have known about, moslty because a lot of us have lost runs to both of those softlocks at some point :D
Joined: 7/21/2017
Posts: 54
This pertains to the Boss 2 skip that occurred at AGDQ 2017 during the Baster Master rrace. At the beginning of the game when the memory is initialized, address $03FB is set to #$00. Perhpas a simple hack of the rom could have this value set to 2 and this would still allow the first boss to spawn and cause the second boss not to be present since $03FB would be at value 3. Since the starting value is 2, then the amount it will increment is based upon the value 2 to the power of $0014 value. Since area 1 boss is in $0014 value zero, then 2 to the power of zero is 1, and therefore the resulting value of $03FB after Boss one is 3. This of course is assuming that the rom was hacked.
STA $0300,X @ $03FB = #$00 ;Initializing memory, setting address to zero
Upon entering the Boss 1 room the following executes. Notable is that it loads the value of address $0014 to the A Register. When I used a Lua Script to change $0014 to a value of 1, the value of Boss 2 location, I was able to get the Boss 2 to spawn in the Boss 1 area. The value of $03FB is checked at this time. If the value is a 0, as it is supposed to be, then the Boss will spawn. If the value is 1, which it should be after the Boss fight, then the boss will not spawn. I also checked and even if this value was a 2 then the boss will still spawn. Basically here after the AND $03FB instruction it will Branch on Not Equal as seen BNE $963B.
$961F:F0 03     BEQ $9624                                    A:00 X:0A Y:00 S:FB P:nvUbdIZC 
    $9624:20 1A 97  JSR $971A                                    A:00 X:0A Y:00 S:FB P:nvUbdIZC 
      $971A:A5 14     LDA $0014 = #$00                             A:00 X:0A Y:00 S:F9 P:nvUbdIZC 
      $971C:29 07     AND #$07                                     A:00 X:0A Y:00 S:F9 P:nvUbdIZC 
      $971E:AA        TAX                                          A:00 X:0A Y:00 S:F9 P:nvUbdIZC 
      $971F:BD 2B B6  LDA $B62B,X @ $B62B = #$01                   A:00 X:00 Y:00 S:F9 P:nvUbdIZC 
      $9722:60        RTS (from $971A) --------------------------- A:01 X:00 Y:00 S:F9 P:nvUbdIzC 
    $9627:2D FB 03  AND $03FB = #$00                             A:01 X:00 Y:00 S:FB P:nvUbdIzC 
    $962A:D0 0F     BNE $963B                                    A:00 X:00 Y:00 S:FB P:nvUbdIZC 
    $962C:A9 C0     LDA #$C0                                     A:00 X:00 Y:00 S:FB P:nvUbdIZC 
    $962E:85 51     STA $0051 = #$00                             A:C0 X:00 Y:00 S:FB P:NvUbdIzC 
    $9630:A9 08     LDA #$08                                     A:C0 X:00 Y:00 S:FB P:NvUbdIzC 
    $9632:20 8C C1  JSR $C18C                                    A:08 X:00 Y:00 S:FB P:nvUbdIzC 
At the beginning of the Boss 1 fight when the boss begins to load, address 03FD is set to the value 255 and then decrements to 0, at which time the boss begins to move. Upon the death of the boss address 03FD increments up to 128 from zero. Once 03FD reaches 128 (#$80)then we see the following execute when the Comparision is made. It is at this time that the addition to $03FB will be 2 to the power of the value of $0014, the area locator. If at any time that $0014 is changed via Lua Script then the game starts to glitch between where you are and where you are telling the game where you are. I have observed some funny things as a result of this. What this means is that I think that it is unlikely that the game was confused as to your location and therefore gave a different value in $03FB, because it thought that you were in a different $0014 location. If $0014 was anything but 0 during the boss 1 fight then you would see graphical distortions. Since the addition to $03FB only occurs after a boss is defeated it would be curious how it might occur at any other time, and if so, then how?
    $9C2D:20 23 97  JSR $9723                                    A:2D X:2A Y:00 S:FB P:nvUbdIzc 
      $9723:A5 53     LDA $0053 = #$00                             A:2D X:2A Y:00 S:F9 P:nvUbdIzc 
      $9725:F0 10     BEQ $9737                                    A:00 X:2A Y:00 S:F9 P:nvUbdIZc 
      $9737:A5 10     LDA $0010 = #$14                             A:00 X:2A Y:00 S:F9 P:nvUbdIZc 
      $9739:4A        LSR                                          A:14 X:2A Y:00 S:F9 P:nvUbdIzc 
      $973A:B0 19     BCS $9755                                    A:0A X:2A Y:00 S:F9 P:nvUbdIzc 
      $973C:AD FD 03  LDA $03FD = #$7F                             A:0A X:2A Y:00 S:F9 P:nvUbdIzc 
      $973F:D0 0A     BNE $974B                                    A:7F X:2A Y:00 S:F9 P:nvUbdIzc 
      $974B:EE FD 03  INC $03FD = #$7F                             A:7F X:2A Y:00 S:F9 P:nvUbdIzc 
      $974E:AD FD 03  LDA $03FD = #$80                             A:7F X:2A Y:00 S:F9 P:NvUbdIzc 
      $9751:C9 80     CMP #$80                                     A:80 X:2A Y:00 S:F9 P:NvUbdIzc 
      $9753:B0 4C     BCS $97A1                                    A:80 X:2A Y:00 S:F9 P:nvUbdIZC 
      $97A1:20 C9 C0  JSR $C0C9                                    A:80 X:2A Y:00 S:F9 P:nvUbdIZC 
        $C0C9:4C 5B D0  JMP $D05B                                    A:80 X:2A Y:00 S:F7 P:nvUbdIZC 
		(...)
        $D066:60        RTS (from $C0C9) --------------------------- A:0F X:FF Y:00 S:F7 P:NvUbdIzC 
      $97A4:20 1A 97  JSR $971A                                    A:0F X:FF Y:00 S:F9 P:NvUbdIzC 
        $971A:A5 14     LDA $0014 = #$00                             A:0F X:FF Y:00 S:F7 P:NvUbdIzC 
        $971C:29 07     AND #$07                                     A:00 X:FF Y:00 S:F7 P:nvUbdIZC 
        $971E:AA        TAX                                          A:00 X:FF Y:00 S:F7 P:nvUbdIZC 
        $971F:BD 2B B6  LDA $B62B,X @ $B62B = #$01                   A:00 X:00 Y:00 S:F7 P:nvUbdIZC 
        $9722:60        RTS (from $971A) --------------------------- A:01 X:00 Y:00 S:F7 P:nvUbdIzC 
      $97A7:0D FB 03  ORA $03FB = #$00                             A:01 X:00 Y:00 S:F9 P:nvUbdIzC 
      $97AA:8D FB 03  STA $03FB = #$00                             A:01 X:00 Y:00 S:F9 P:nvUbdIzC 
      $97AD:A9 5A     LDA #$5A                                     A:01 X:00 Y:00 S:F9 P:nvUbdIzC 
      $97AF:85 46     STA $0046 = #$63                             A:5A X:00 Y:00 S:F9 P:nvUbdIzC 
      $97B1:A9 00     LDA #$00                                     A:5A X:00 Y:00 S:F9 P:nvUbdIzC 
      $97B3:20 D5 C0  JSR $C0D5                                   A:00 X:00 Y:00 S:F9 P:nvUbdIZC 
Twenty nine frames after this addition to $03FB occurs the $971A sub routine runs again (twice). After the first sub routine it checks the $03FB address, and then it will branch if not equal BNE $963B, the same as when we entered the room. And the second routine is followed by a check to $03FC, seeing if you have already collected the item, and then a branch if not equal BNE $965C.
   $961F:F0 03     BEQ $9624                                    A:00 X:0A Y:00 S:FB P:nvUbdIZC 
    $9624:20 1A 97  JSR $971A                                    A:00 X:0A Y:00 S:FB P:nvUbdIZC 
      $971A:A5 14     LDA $0014 = #$00                             A:00 X:0A Y:00 S:F9 P:nvUbdIZC 
      $971C:29 07     AND #$07                                     A:00 X:0A Y:00 S:F9 P:nvUbdIZC 
      $971E:AA        TAX                                          A:00 X:0A Y:00 S:F9 P:nvUbdIZC 
      $971F:BD 2B B6  LDA $B62B,X @ $B62B = #$01                   A:00 X:00 Y:00 S:F9 P:nvUbdIZC 
      $9722:60        RTS (from $971A) --------------------------- A:01 X:00 Y:00 S:F9 P:nvUbdIzC 
    $9627:2D FB 03  AND $03FB = #$01                             A:01 X:00 Y:00 S:FB P:nvUbdIzC 
    $962A:D0 0F     BNE $963B                                    A:01 X:00 Y:00 S:FB P:nvUbdIzC 
    $963B:20 1A 97  JSR $971A                                    A:01 X:00 Y:00 S:FB P:nvUbdIzC 
      $971A:A5 14     LDA $0014 = #$00                             A:01 X:00 Y:00 S:F9 P:nvUbdIzC 
      $971C:29 07     AND #$07                                     A:00 X:00 Y:00 S:F9 P:nvUbdIZC 
      $971E:AA        TAX                                          A:00 X:00 Y:00 S:F9 P:nvUbdIZC 
      $971F:BD 2B B6  LDA $B62B,X @ $B62B = #$01                   A:00 X:00 Y:00 S:F9 P:nvUbdIZC 
      $9722:60        RTS (from $971A) --------------------------- A:01 X:00 Y:00 S:F9 P:nvUbdIzC 
    $963E:2D FC 03  AND $03FC = #$00                             A:01 X:00 Y:00 S:FB P:nvUbdIzC 
    $9641:D0 19     BNE $965C                                    A:00 X:00 Y:00 S:FB P:nvUbdIZC 
    $9643:A5 14     LDA $0014 = #$00                             A:00 X:00 Y:00 S:FB P:nvUbdIZC 
    $9645:C9 07     CMP #$07                                     A:00 X:00 Y:00 S:FB P:nvUbdIZC 
    $9647:D0 0E     BNE $9657                                    A:00 X:00 Y:00 S:FB P:NvUbdIzc 
    $9657:A9 6A     LDA #$6A                                     A:00 X:00 Y:00 S:FB P:NvUbdIzc 
    $9659:85 46     STA $0046 = #$5A                             A:6A X:00 Y:00 S:FB P:nvUbdIzc 
    $965B:60        RTS (from $C8EC) --------------------------- A:6A X:00 Y:00 S:FB P:nvUbdIzc
While there may not be anything revelatoty here beyond the previous posts concerning the matter, but it is where I am at with it at the moment.
Chambers_N
1 2
6 7 8