SMB1 Hacking

Discuss technical or other issues relating to programming the Nintendo Entertainment System, Famicom, or compatible systems. See the NESdev wiki for more information.

Moderator: Moderators

frantik
Posts: 377
Joined: Tue Mar 03, 2009 3:56 pm

Re: SMB1 - Starman Music vs. Flagpole Music Fix

Post by frantik »

SMB2J-2Q wrote: Sat Sep 24, 2022 7:34 am @frantik,

I tried the first one and it didn't quite work, going straight to the current area music upon getting on the pole. What I want to do is for it to not switch back to the area music when the Starman wears off, meaning once Mario reached the flagpole.

...

I saw your code where you included it within SMB Special 35th; however, there is one LDX instruction (before the "LDA Enemy_ID,x") and two STA instructions containing out-of-bounds addresses ($7fec, $7ff9, $7ffa, etc.) coming after the "STA StarInvincibleTimer" and before the "LDA FlagpoleSoundQueue"; may I ask you what this LDX and the two STAs are supposed to do?
Hmm I will have to double check in SMB Special to see if the music terminates correctly when you have a star and touch the flagpole, I'm pretty sure it's correct and plays the end level music. The rest of that code in Flagpole Slide has to do with modifying the flag object to be allowed in any sprite slot and also reinitializing the flag if for some reason it despawns

edit: it looks like I also set StarInvincibleTimer to 0 in FlagpoleCollision.. commenting out the code in FlagpoleSlide seems to have no effect. It might have been a previous unsuccessful attempt to fix the bug that I forgot to clean up

Code: Select all

;hack turn off starman if present
   lda StarInvincibleTimer	
   beq +
   lda #$00
   sta StarInvincibleTimer	
+
;endhack   
	ldx #$04                  ; Start at end of vertical coordinate data
	lda Player_Y_Position
	sta FlagpoleCollisionYPos ; Store player's vertical coordinate here to be used later

ChkFlagpoleYPosLoop:
looking at the code i don't even think you need to check if the timer is 0, just set it to 0
SMB2J-2Q
Posts: 152
Joined: Thu Jul 27, 2017 5:13 pm

Re: SMB1 - Starman Music vs. Flagpole Music Fix

Post by SMB2J-2Q »

frantik wrote: Sat Sep 24, 2022 6:18 pm
SMB2J-2Q wrote: Sat Sep 24, 2022 7:34 am @frantik,

I tried the first one and it didn't quite work, going straight to the current area music upon getting on the pole. What I want to do is for it to not switch back to the area music when the Starman wears off, meaning once Mario reached the flagpole.

...

I saw your code where you included it within SMB Special 35th; however, there is one LDX instruction (before the "LDA Enemy_ID,x") and two STA instructions containing out-of-bounds addresses ($7fec, $7ff9, $7ffa, etc.) coming after the "STA StarInvincibleTimer" and before the "LDA FlagpoleSoundQueue"; may I ask you what this LDX and the two STAs are supposed to do?
Hmm I will have to double check in SMB Special to see if the music terminates correctly when you have a star and touch the flagpole, I'm pretty sure it's correct and plays the end level music. The rest of that code in Flagpole Slide has to do with modifying the flag object to be allowed in any sprite slot and also reinitializing the flag if for some reason it despawns

edit: it looks like I also set StarInvincibleTimer to 0 in FlagpoleCollision.. commenting out the code in FlagpoleSlide seems to have no effect. It might have been a previous unsuccessful attempt to fix the bug that I forgot to clean up

Code: Select all

;hack turn off starman if present
   lda StarInvincibleTimer	
   beq +
   lda #$00
   sta StarInvincibleTimer	
+
;endhack   
	ldx #$04                  ; Start at end of vertical coordinate data
	lda Player_Y_Position
	sta FlagpoleCollisionYPos ; Store player's vertical coordinate here to be used later

ChkFlagpoleYPosLoop:
looking at the code i don't even think you need to check if the timer is 0, just set it to 0
@frantik,

It would seem that setting it to #$00 would do the trick better! Thank you! It's true that Mario's remaining Starman invincibility while on the flagpole is unnecessary and was a possible oversight that was carried over into SMAS (at least him flashing while on the flagpole was), and maybe Nintendo meant to have it be terminated outright the moment he touches the flagpole.

~Ben
SMB2J-2Q
Posts: 152
Joined: Thu Jul 27, 2017 5:13 pm

Re: SMB1 Hacking

Post by SMB2J-2Q »

I just fixed the HandleAxeMetatile routine to behave more like Super Mario All-Stars. Credit to ShaneM for the two instructions which correct the Small & Fiery and Thank You Dead Mario! glitches. I also changed the scroll stops in all castle levels from $5d to $4d per the area object data tables, which ShaneM says was also found in SMAS. In addition, SMAS silences the BGM while Mario uses the Axe to cut the bridge (and hence Bowser falling to his death, if he hasn't been fireballed), so I added that in the routine.

Code: Select all

HandleAxeMetatile:
    lda #$00        ;ORIGINAL CODE
    sta OperMode_Task  ;ORIGINAL CODE: reset secondary mode
    lda #$02        ;ORIGINAL CODE
    sta OperMode    ;ORIGINAL CODE: set primary mode to auto control mode
    lsr                    ;SHANEM fix
    sta InjuryTimer  ;SHANEM fix: fixes the "Small & Fiery Mario" and "Thank You Dead Mario!" glitches
    lda #Silence      ;SMAS addition
    sta EventMusicQueue  ;SMAS addition: silence music when Mario touches the axe, if Bowser not defeated yet
    lda #$18  ;ORIGINAL CODE continues from here
    [...]
~Ben
SMB2J-2Q
Posts: 152
Joined: Thu Jul 27, 2017 5:13 pm

Re: SMB1 - Starman Music vs. Flagpole Music Fix

Post by SMB2J-2Q »

frantik wrote: Sat Sep 24, 2022 6:18 pm
SMB2J-2Q wrote: Sat Sep 24, 2022 7:34 am @frantik,

I tried the first one and it didn't quite work, going straight to the current area music upon getting on the pole. What I want to do is for it to not switch back to the area music when the Starman wears off, meaning once Mario reached the flagpole.

...

I saw your code where you included it within SMB Special 35th; however, there is one LDX instruction (before the "LDA Enemy_ID,x") and two STA instructions containing out-of-bounds addresses ($7fec, $7ff9, $7ffa, etc.) coming after the "STA StarInvincibleTimer" and before the "LDA FlagpoleSoundQueue"; may I ask you what this LDX and the two STAs are supposed to do?
Hmm I will have to double check in SMB Special to see if the music terminates correctly when you have a star and touch the flagpole, I'm pretty sure it's correct and plays the end level music. The rest of that code in Flagpole Slide has to do with modifying the flag object to be allowed in any sprite slot and also reinitializing the flag if for some reason it despawns

edit: it looks like I also set StarInvincibleTimer to 0 in FlagpoleCollision.. commenting out the code in FlagpoleSlide seems to have no effect. It might have been a previous unsuccessful attempt to fix the bug that I forgot to clean up

Code: Select all

;hack turn off starman if present
   lda StarInvincibleTimer	
   beq +
   lda #$00
   sta StarInvincibleTimer	
+
;endhack   
	ldx #$04                  ; Start at end of vertical coordinate data
	lda Player_Y_Position
	sta FlagpoleCollisionYPos ; Store player's vertical coordinate here to be used later

ChkFlagpoleYPosLoop:
looking at the code i don't even think you need to check if the timer is 0, just set it to 0
@frantik,

I found one more possible routine where you may be able to apply a fix to prevent the area music from reloading after your Starman power wears off, while on the flagpole. Please try to check this one out for your SMB Special 35th Anniversary hack.

It would also help to track down (using FCEUX's debugger window) what RAM address(es) are affected as Mario slides down the flagpole while still invincible.

Code: Select all

PlayerEndLevel:
    lda #$01
    jsr AutoControlPlayer
    lda Player_Y_Position
    cmp #$ae
    bcc ChkStop
    lda ScrollLock
    beq ChkStop
    lda #EndOfLevelMusic
    sta EventMusicQueue
    lda #$00
    sta ScrollLock
    [...]
~Ben
SMB2J-2Q
Posts: 152
Joined: Thu Jul 27, 2017 5:13 pm

Re: SMB1 - Add Time Bonus for Castle?

Post by SMB2J-2Q »

SMB2J-2Q wrote: Thu Sep 22, 2022 3:07 pm I wonder if the designers of Super Mario Bros. had intended for each of the x-4 (castle) levels to have a time bonus award as well, but that due to the program's 32K ROM size, it was cut out?

Here's the specific data I found for the x-4 time bonus award for Super Mario Bros. 2 (FDS), which comes after the PrintVictoryMessages routine:

Code: Select all

EndCastleAward:
  lda WorldEndTimer
  cmp #$06
  bcs ExEWA
  jsr AwardTimerCastle
  lda GameTimerDisplay
  ora GameTimerDisplay+1
  ora GameTimerDisplay+2
  bne ExEWA
  lda #$30
  sta SelectTimer        ;set select timer (used for World 8's ending only)
  lda #$06
  sta WorldEndTimer
  inc OperMode_Task
ExEWA:
  rts
Under AwardGameTimerPoints, a label for AwardTimerCastle is placed before the "lda FrameCounter" instruction:

Code: Select all

AwardGameTimerPoints:
  lda GameTimerDisplay
  ora GameTimerDisplay+1
  ora GameTimerDisplay+2
  beq IncrementSFTask1
AwardTimerCastle:
  lda FrameCounter
  and #%00000100
  beq NoTTick
  lda #SFX_TimerTick
  sta Square2SoundQueue
NoTTick:
  ldy #$17
  lda #$ff
  sta DigitModifier+5
  jsr DigitsMathRoutine
  lda #$05
  sta DigitModifier+5
I wonder if these modifications alone might make it work for the NES SMB1?

~Ben
Need to follow up on this: the reason this failed on me the first time was because I forgot to do this:

Code: Select all

VictoryModeSubroutines:
    lda OperMode_Task
    jsr JumpEngine
    
    .dw BridgeCollapse
    .dw SetupVictoryMode
    .dw PlayerVictoryWalk
    .dw PrintVictoryMessages
    .dw EndCastleAward
    .dw PlayerEndWorld
Once finished, the EndCastleAward routine finally worked. Here are the results for both World 1-4 and 8-4:
Image
Image

~Ben
SMB2J-2Q
Posts: 152
Joined: Thu Jul 27, 2017 5:13 pm

SMB1 - Turtle Tipping Bounce Fix?

Post by SMB2J-2Q »

I am wondering if there is a fix for the turtle tipping for the NES SMB1, similar to what we witness in both Super Mario All-Stars and Super Mario Bros. Deluxe, where Mario actually makes a perfect bounce on the Koopa Troopa for points and 1-UPs every time without interruption?

Here's a sample video of the turtle tipping trick in SMAS:
https://www.youtube.com/watch?v=82x-FmayDDk&t=61s

And, here's the code for the stomped shell routine:

Code: Select all

HandleStompedShellE:
       lda #$04                   ;set defeated state for enemy
       sta Enemy_State,x
       inc StompChainCounter      ;increment the stomp counter
       lda StompChainCounter      ;add whatever is in the stomp counter
       clc                        ;to whatever is in the stomp timer
       adc StompTimer
       jsr SetupFloateyNumber     ;award points accordingly
       inc StompTimer             ;increment stomp timer of some sort
       ldy PrimaryHardMode        ;check primary hard mode flag
       lda RevivalRateData,y      ;load timer setting according to flag
       sta EnemyIntervalTimer,x   ;set as enemy timer to revive stomped enemy
SBnce: lda #$fc                   ;set player's vertical speed for bounce
       sta Player_Y_Speed         ;and then leave!!!
       rts
UPDATE: According to doppelganger's SMB2J disassembly, the bounce routine has been extended to include a check for if Mario stomped on any of the flying Paratroopas, and the bouncing speed for all other enemies Mario/Luigi had stomped on has been increased:

Code: Select all

SBnce: ldy #$fa                   ;set a regular bounce rate for all other enemies
       lda Enemy_ID,x
       cmp #RedParatroopa         ;set a higher bounce rate for red paratroopas
       beq BnceH                  ;and green paratroopas that fly
       cmp #GreenParatroopaFly
       bne BnceL
BnceH: ldy #$f8                   ;set player's vertical speed for bounce
BnceL: sty Player_Y_Speed         ;and then leave!
       rts
After having modified the original SMB1 routine to include these checks, I am now able to stay bouncing on the Green Paratroopas when on a stairstep for extra lives without falling off.

UPDATE 2 (10-13-2022): When I checked out the equivalent code in SMAS, the original bounce routine from the NTSC NES version remained, but the value for the bounce speed was changed from $fc to $fb. I then modified the NES ROM to reflect this, tried it out in 3-1 and other levels where this was possible (also shown are 4-2, 6-2 and 7-1), and as expected Mario is again able to continuously bounce on Koopas or Buzzy Beetles on stairsteps without interruption. Yes, folks, you can also use a single Game Genie code for this fix: UNYIXO.
Image
Image
Image
Image

~Ben
Last edited by SMB2J-2Q on Thu Oct 13, 2022 2:12 pm, edited 5 times in total.
SMB2J-2Q
Posts: 152
Joined: Thu Jul 27, 2017 5:13 pm

Re: SMB1 Hacking

Post by SMB2J-2Q »

I think I might have solved the problem of the disappearing springboards in SMB1 and SMB2J.

When I looked at the equivalent code for Super Mario All-Stars, the FindEmptyEnemySlot routine is no longer listed by itself, and thus those routines that had included it in the NES version no longer have the specific JSR for it, but instead include the check within each of these routines, separately.

For the NES SMB1, I changed the cpx instruction under EmptyChkLoop from #$05 to #$07 to increase the number of available enemy slots for the springboard routine, since the cpx instruction in SMAS was #$07.

Code: Select all

FindEmptyEnemySlot:
              ldx #$00          ;start at first enemy slot
EmptyChkLoop: clc               ;clear carry flag by default
              lda Enemy_Flag,x  ;check enemy buffer for nonzero
              beq ExitEmptyChk  ;if zero, leave
              inx
              cpx #$07          ;SNES fix: if nonzero, check next value
              bne EmptyChkLoop
ExitEmptyChk: rts               ;if all values nonzero, carry flag is set
I re-added the NoJs (no springboard) instruction for if no space is currently available, though I don't know if the bcs instruction is necessary after I'd increased the number of slots in EmptyChkLoop from six (#$05) to eight (#$07).

Code: Select all

Jumpspring:
      jsr GetLrgObjAttrib
      jsr FindEmptyEnemySlot      ;find empty space in enemy object buffer
      bcs NoJs                    ;if not available, too many enemies, thus skip
      jsr GetAreaObjXPosition     ;get horizontal coordinate for jumpspring
      sta Enemy_X_Position,x      ;and store
      lda CurrentPageLoc          ;store page location of jumpspring
      sta Enemy_PageLoc,x
      jsr GetAreaObjYPosition     ;get vertical coordinate for jumpspring
      sta Enemy_Y_Position,x      ;and store
      sta Jumpspring_FixedYPos,x  ;store as permanent coordinate here
      lda #JumpspringObject
      sta Enemy_ID,x              ;write jumpspring object to enemy object buffer
      ldy #$01
      sty Enemy_Y_HighPos,x       ;store vertical high byte
      lda #$01                    ;SNES fix
      sta Enemy_Flag,x            ;SNES fix: set flag for enemy object buffer
      ldx $07
      lda #$67                    ;draw metatiles in two rows where jumpspring is
      sta MetatileBuffer,x
      lda #$68
      sta MetatileBuffer+1,x
NoJs: rts
Please review these changes to see if they also work for you.

~Ben
SMB2J-2Q
Posts: 152
Joined: Thu Jul 27, 2017 5:13 pm

8000 Points for Bowser in Worlds 6-8?

Post by SMB2J-2Q »

While I know that Bowser is worth 5000 points whenever he's destroyed with five fireballs, I believe on the harder levels where he also throws hammers at you (worlds 6-4, 7-4 and 8-4), I think for all those who've made it that far, he should be worth 8000 points because of this increased difficulty (according to the original NES game's instructions, the number of points given for tackling him is only "???").

Hence, may I ask how I would extend the points award routine for having fireballed Bowser, so that doing so gives the player 8000 points for worlds 6-8? Here's the code for the original routine in question from doppelganger's SMB1 disassembly:

Code: Select all

SetDBSte: sta Enemy_State,x     ; set defeated enemy state
          lda #SFX_BowserFall
          sta Square2SoundQueue ; load Bowser defeat sound
          ldx $01               ; get enemy offset
          lda #$09              ; award 5000 points to player for defeating Bowser
          bne EnemySmackScore   ; unconditional branch to award points
UPDATE: I got this to work correctly, by adding these lines of code within SetDBSte:

Code: Select all

SetDBSte: [...]
          lda #$09              ; ORIGINAL CODE: award 5000 points to player for defeating Bowser
          ldy WorldNumber       ; NEW CODE: check world number
          cpy #World6           ; NEW CODE: are we on world 6?
          bcc EnemySmackScore   ; NEW CODE: if not, world 1 thru 5, so branch
          lda #$0a              ; NEW CODE: if so, award 8000 points instead
          bne EnemySmackScore   ; ORIGINAL CODE: unconditional branch to award points
And here's a screenshot of the proof:
Image

~Ben
Last edited by SMB2J-2Q on Tue Oct 18, 2022 10:10 pm, edited 1 time in total.
Oziphantom
Posts: 1565
Joined: Tue Feb 07, 2017 2:03 am

Re: SMB1 Hacking

Post by Oziphantom »

find the flag that makes him chuck hammers, then you will need to add the 8,000 score into the engine. Then check for the flag when you award the points and give 8,000 when it is set.
SMB2J-2Q
Posts: 152
Joined: Thu Jul 27, 2017 5:13 pm

Re: SMB1 Hacking

Post by SMB2J-2Q »

Oziphantom wrote: Tue Oct 18, 2022 9:35 pm find the flag that makes him chuck hammers, then you will need to add the 8,000 score into the engine. Then check for the flag when you award the points and give 8,000 when it is set.
Already done (see the edit to my last reply)... and it works perfectly!

~Ben
SMB2J-2Q
Posts: 152
Joined: Thu Jul 27, 2017 5:13 pm

KillPlayer Routine

Post by SMB2J-2Q »

Does anybody know how I can modify the KillPlayer routine in SMB1 to behave like the SNES version?

Original NES version's code:

Code: Select all

KillPlayer:
    stx Player_X_Speed ; halt player's horizontal movement by initializing speed
    inx
    stx EventMusicQueue ; set event music queue to death music
    lda #$fc
    sta Player_Y_Speed ; set new vertical speed
    lda #$0b ; set subroutine to run on next frame
    bne SetKRout ; branch to set player's state and other things
As is written in Super Mario All-Stars:

Code: Select all

KillPlayer:
    stx Player_X_Speed ; halt player's horizontal movement by initializing speed
    phx 
    lda #$01
    sta PlayerSize
    jsl GetPlayerColors_049A88
    plx
    inx
    lda #DeathMusic
    sta Square1SoundQueue
    lda #DeathMusic
    sta Square1SoundQueue ; this is called twice for some reason
    sta $0e67 ($7e0e67) ; what is the specific label of this RAM address, please?
    sta ScrollLock
    lda #$fc
    sta Player_Y_Speed
    lda #$0b
    bne SetKRout
The 65816 also makes use of the PHX/PHY and PLX/PLY opcodes, but these are not present in the original 6502. May I ask how you would do this in 6502-speak, with regards to preserving A and also the X register in the stacks? My proposal would be this:

Code: Select all

stx Player_X_Speed
txa
pha
lda #$01
sta PlayerSize
jsr GetPlayerColors
lsr a
pla
tax
inx
stx EventMusicQueue
stx ScrollLock
[...]
UPDATE 11-29-2023: New code below fixed. The LSR A is what clears A before the stack is restored, to allow X to be incremented without changing the event music type in the queue.

However, Shane M. also did this coding under "TimeUpOn" to fix this issue:

Code: Select all

TimeUpOn:
    sta PlayerStatus         ;init player status (note A will always be zero here)
    sta StarInvincibleTimer  ;SM clear star invincibility timer if active 
    jsr GetPlayerColors      ;SM get appropriate colors for small mario
    jsr ForceInjury          ;do sub to kill the player (note player is small here)
    inc GameTimerExpiredFlag ;set game timer expiration flag
Thank you,



Ben
Last edited by SMB2J-2Q on Wed Nov 29, 2023 10:35 pm, edited 7 times in total.
User avatar
Dwedit
Posts: 4922
Joined: Fri Nov 19, 2004 7:35 pm
Contact:

Re: SMB1 Hacking

Post by Dwedit »

PHX / PHY / PLX/ PLY can be simulated by using A as an intermediate register (see TXA TYA TAX TAY), but what exactly is supposed to be the benefit of porting over the SNES version's code here?
Here come the fortune cookies! Here come the fortune cookies! They're wearing paper hats!
SMB2J-2Q
Posts: 152
Joined: Thu Jul 27, 2017 5:13 pm

Re: SMB1 Hacking

Post by SMB2J-2Q »

Dwedit wrote: Thu Oct 20, 2022 6:15 pm PHX / PHY / PLX/ PLY can be simulated by using A as an intermediate register (see TXA TYA TAX TAY), but what exactly is supposed to be the benefit of porting over the SNES version's code here?
Some of these specific fixes are bug fixes, others are improvements. More about that here:
https://www.mariowiki.com/Super_Mario_A ... nd_changes

I found this page about register preservation when working with 65816-exclusive opcodes:
http://6502.org/tutorials/register_preservation.html

~Ben
SMB2J-2Q
Posts: 152
Joined: Thu Jul 27, 2017 5:13 pm

Re: SMB1 Hacking

Post by SMB2J-2Q »

In checking out the PAL version's code for canceling the vertical speed when underwater, I decided to jazz it up a bit by modifying it this way:

Code: Select all

NYSpd:  ldy #$01           ; ORIGINAL CODE: set player's vertical speed to nullify 
        lda AreaType       ; PAL diff (ORIGINAL CODE): set vertical speed to 0 in water stages
        cmp #$00           ; NEW CODE: are we in a water stage?
        bcc NYSpd2         ; NEW CODE: skip this check if we're not in this level type
        dey                ; ORIGINAL CODE: if we are, decrement Y by 1
NYSpd2: sty Player_Y_Speed ; ORIGINAL CODE: store value as 0 or 1, depending on terrain type
What I did here was add a CMP after the LDA to further determine if the level we're on is underwater ($00), and then use BCC to skip over if we aren't. If we are (that is, both the LDA and CMP values match up), then DEY is used to subtract from the present value of #$01 in LDY to match with the underwater level, which is then stored in Y for the occasion.

UPDATE, 10-21-2022: The reason I made this tweak was because the originally written routine, which had only BNE after the LDA, I tried that out in the Easy 6502 page, using the debugger console and clicking on Step, it read through every single line, rather than skip over DEY to STY.

Please let me know if this change works for you.

~Ben
SMB2J-2Q
Posts: 152
Joined: Thu Jul 27, 2017 5:13 pm

Re: SMB1 Hacking

Post by SMB2J-2Q »

In the NES SMB1, when completing either world 6-1 or 8-3, when Mario enters the castle, the flagpole flag sprite will disappear due to the way the coordinates were set up in these two levels. In Super Mario All-Stars, this was fixed by moving the castle sprite closer to the flagpole.

Snippet of the level data for World 6-1, NES version:

Code: Select all

L_GroundArea15:
[...]
.db $8d, $4a ; stop continuation
.db $ad, $41 ; flagpole
.db $0f, $a6 ; small castle
.db $cd, $47 ; scroll stop (All Night Nippon Super Mario Bros. only)
.db $fd      ; end of level data 
Snippet of the level data for World 8-3, NES version:

Code: Select all

L_GroundArea2:
[...]
.db $6d, $c1 ; flagpole
.db $be, $42 ; castle scenery (background: wall)
.db $ef, $20 ; large castle
.db $8d, $c7 ; scroll stop (All Night Nippon Super Mario Bros. only)
.db $fd      ; end of level data
However, for the NES version, when I try to move the castles one block toward the flagpole (to $ff, $26 for 6-1 and $df, $20 for 8-3), it then causes these two levels to be extended one page. I know World 6-1 does have a stop continuation coordinate ($8d, $4a) right before the flagpole coordinate, but not so for World 8-3. Therefore, how would I fix this?

To compare, here's the same level data for SMB1 in Super Mario All-Stars:

World 6-1, Super Mario All-Stars:

Code: Select all

L_GroundArea15:
[...]
.db $8d, $4a      ; stop continuation
.db $ad, $41      ; flagpole
.db $ef, $f6, $20 ; small castle
.db $bd, $c7      ; scroll stop
.db $fd           ; end of level data
World 8-3, Super Mario All-Stars:

Code: Select all

L_GroundArea2:
[...]
.db $6d, $c1      ; flagpole
.db $8f, $f0, $20 ; large castle
.db $8d, $c7      ; scroll stop
.db $fd           ; end of level data
Thank you,


~Ben
Post Reply