├── .gitignore ├── Makefile ├── SM2CHAR1.chr ├── SM2CHAR2.chr ├── fdswrap.asm ├── layout ├── readme.txt ├── sm2data2.asm ├── sm2data3.asm ├── sm2data4.asm └── sm2main.asm /.gitignore: -------------------------------------------------------------------------------- 1 | *.o.bin 2 | *.o 3 | *.dbg 4 | *.fds 5 | *.deb 6 | *.dep 7 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | AS = ca65 2 | CC = cc65 3 | LD = ld65 4 | 5 | .PHONY: clean 6 | build: main.fds 7 | 8 | integritycheck: main.fds 9 | radiff2 -x main.fds original.fds | head -n 100 10 | 11 | %.o: %.asm 12 | $(AS) --create-dep "$@.dep" -g --debug-info $< -o $@ 13 | 14 | main.fds: layout fdswrap.o 15 | $(LD) --dbgfile $@.dbg -C layout fdswrap.o -o $@ 16 | 17 | clean: 18 | rm -f main*.fds *.o *.o.bin 19 | 20 | include $(wildcard ./*.dep) 21 | -------------------------------------------------------------------------------- /SM2CHAR1.chr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/threecreepio/smb2j-disassembly/9c40114626ecd07f13e16d5e67e217b98482d7af/SM2CHAR1.chr -------------------------------------------------------------------------------- /SM2CHAR2.chr: -------------------------------------------------------------------------------- 1 | ==?bD7?;;? x =9s== -------------------------------------------------------------------------------- /fdswrap.asm: -------------------------------------------------------------------------------- 1 | ;This file takes the assembled binaries of the program files and puts 2 | ;them into an FDS file along with the character files that are needed. 3 | ;In order for this to work, the program files need to already be assembled 4 | ;and the character files from the disk or disk image are also needed. 5 | 6 | DiskInfoBlock = 1 7 | FileAmountBlock = 2 8 | FileHeaderBlock = 3 9 | FileDataBlock = 4 10 | PRG = 0 11 | CHR = 1 12 | VRAM = 2 13 | 14 | ;FWNES header 15 | ;.byte "FDS",$1a,1,0,0,0,0,0,0,0,0,0,0,0 16 | 17 | .byte DiskInfoBlock 18 | .byte "*NINTENDO-HVC*" 19 | .byte $01,"SMB ",0,0,0,0,0,$0f 20 | .byte $ff,$ff,$ff,$ff,$ff 21 | .byte $61,$07,$23 22 | .byte $49,$61,$00,$00,$02,$00,$1b,$00,$97,$00 23 | .byte $61,$07,$23 24 | .byte $ff,$ff,$ff,$ff,$ff,$00,$00,$00,$00 25 | 26 | .byte FileAmountBlock 27 | .byte 8 28 | 29 | .byte FileHeaderBlock 30 | .byte $00,$00 31 | .byte "KYODAKU-" 32 | .word $2800 33 | .word KyodakuEnd-KyodakuStart 34 | .byte VRAM 35 | 36 | .byte FileDataBlock 37 | KyodakuStart: 38 | .byte $24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$17,$12,$17,$1d,$0e 39 | .byte $17,$0d,$18,$24,$28,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24 40 | .byte $24,$24,$24,$24,$24,$24,$24,$0f,$0a,$16,$12,$15,$22,$24,$0c,$18 41 | .byte $16,$19,$1e,$1d,$0e,$1b,$24,$1d,$16,$24,$24,$24,$24,$24,$24,$24 42 | .byte $24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24 43 | .byte $24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24 44 | .byte $24,$24,$1d,$11,$12,$1c,$24,$19,$1b,$18,$0d,$1e,$0c,$1d,$24,$12 45 | .byte $1c,$24,$16,$0a,$17,$1e,$0f,$0a,$0c,$1d,$1e,$1b,$0e,$0d,$24,$24 46 | .byte $24,$24,$0a,$17,$0d,$24,$1c,$18,$15,$0d,$24,$0b,$22,$24,$17,$12 47 | .byte $17,$1d,$0e,$17,$0d,$18,$24,$0c,$18,$27,$15,$1d,$0d,$26,$24,$24 48 | .byte $24,$24,$18,$1b,$24,$0b,$22,$24,$18,$1d,$11,$0e,$1b,$24,$0c,$18 49 | .byte $16,$19,$0a,$17,$22,$24,$1e,$17,$0d,$0e,$1b,$24,$24,$24,$24,$24 50 | .byte $24,$24,$15,$12,$0c,$0e,$17,$1c,$0e,$24,$18,$0f,$24,$17,$12,$17 51 | .byte $1d,$0e,$17,$0d,$18,$24,$0c,$18,$27,$15,$1d,$0d,$26,$26,$24,$24 52 | KyodakuEnd: 53 | 54 | .byte FileHeaderBlock 55 | .byte $01,$01 56 | .byte "SM2CHAR1" 57 | .word $0000 58 | .word Char1End-Char1Start 59 | .byte CHR,FileDataBlock 60 | Char1Start: 61 | .incbin "SM2CHAR1.CHR" 62 | Char1End: 63 | 64 | .byte FileHeaderBlock 65 | .byte $02,$10 66 | .byte "SM2CHAR2" 67 | .word $0760 68 | .word Char2End-Char2Start 69 | .byte CHR,FileDataBlock 70 | Char2Start: 71 | .incbin "SM2CHAR2.CHR" 72 | Char2End: 73 | 74 | .byte FileHeaderBlock,$03,$05 75 | .byte "SM2MAIN " 76 | .word $6000, MainEnd-MainStart 77 | .byte PRG, FileDataBlock 78 | MainStart: 79 | .scope FILE_SM2MAIN 80 | .org $6000 81 | .include "sm2main.asm" 82 | .reloc 83 | .endscope 84 | MainEnd: 85 | 86 | .byte FileHeaderBlock 87 | .byte $04,$20 88 | .byte "SM2DATA2" 89 | .word $c470 90 | .word Data2End-Data2Start 91 | .byte PRG,FileDataBlock 92 | Data2Start: 93 | .scope FILE_SM2DATA2 94 | .org $C470 95 | .include "sm2data2.asm" 96 | .reloc 97 | .endscope 98 | Data2End: 99 | 100 | .byte FileHeaderBlock 101 | .byte $05,$30 102 | .byte "SM2DATA3" 103 | .word $c5d0 104 | .word Data3End-Data3Start 105 | .byte PRG,FileDataBlock 106 | Data3Start: 107 | .scope FILE_SM2DATA3 108 | .org $C5D0 109 | .include "sm2data3.asm" 110 | .reloc 111 | .endscope 112 | Data3End: 113 | 114 | .byte FileHeaderBlock 115 | .byte $06,$40 116 | .byte "SM2DATA4" 117 | .word $c2b4 118 | .word Data4End-Data4Start 119 | .byte PRG,FileDataBlock 120 | Data4Start: 121 | .scope FILE_SM2DATA4 122 | .org $C2B4 123 | .include "sm2data4.asm" 124 | .reloc 125 | .endscope 126 | Data4End: 127 | 128 | .byte FileHeaderBlock 129 | .byte $07,$0f 130 | .byte "SM2SAVE " 131 | .word $d29f, 1 132 | .byte PRG,FileDataBlock 133 | .byte 0 134 | -------------------------------------------------------------------------------- /layout: -------------------------------------------------------------------------------- 1 | MEMORY 2 | { 3 | CODE: start = $0, size = $FFDC, fill=yes, fillval=$00; 4 | } 5 | 6 | SEGMENTS 7 | { 8 | CODE: load = CODE, type = ro; 9 | } 10 | -------------------------------------------------------------------------------- /readme.txt: -------------------------------------------------------------------------------- 1 | This is a small change of Doppelgangers disassembly to make it work with CC65. 2 | Original asm6 is available here: https://www.romhacking.net/documents/653/ 3 | 4 | 5 | Original readme: 6 | 7 | SMB2J DISASSEMBLY - A COMPREHENSIVE SUPER MARIO BROS. 2 JAPAN DISASSEMBLY 8 | by doppelganger (doppelheathen@gmail.com) 9 | 10 | This is a disassembly of the program files that are part of Super Mario Bros 2 from Japan (not 11 | to be confused with Super Mario Bros 2 USA, or Doki Doki Panic). The source files are provided 12 | for your use as-is. 13 | 14 | Acknowledgements 15 | ---------------- 16 | 17 | There are so many people I have to thank for this, and I don't really remember them all. 18 | First, I need to thank Beneficii for getting the ball rolling on a SMB2j reverse-engineering 19 | project and for providing the disassembly which I compared notes with (but did not copy from 20 | once again, I started working on this because he doesn't seem to have touched it in 3 years), 21 | the peeps in the nesdev scene who helped me understand not only the 6502 and the NES, but 22 | also the Famicom Disk System and its nuances, as well as the authors of x816, asm6, and the 23 | reverse-engineers who did the original Super Mario Bros. Hacking project, which helped 24 | me greatly in reverse-engineering Super Mario Bros. 1, which has an almost identical game engine 25 | to this game. I want to thank Nintendo for creating this game, the NES and the FDS, without 26 | which this disassembly would only be theory, and all my fellow peeps in the #nesdev channel 27 | who inspired me to work on this by hacking SMB2j and discussing it and other projects with me 28 | themselves, as well as keeping me busy and engaged with conversation so I wouldn't get bored. 29 | 30 | Instructions 31 | ------------ 32 | 33 | It consists of the following files: 34 | 35 | sm2main.asm - assembles sm2main file (worlds 1-4, main engine) 36 | sm2data2.asm - assembles sm2data2 file (worlds 5-8, some additional logic) 37 | sm2data3.asm - assembles sm2data3 file (ending, world 9, additional music) 38 | sm2data4.asm - assembles sm2data4 file (worlds A-D, some logic that's also in sm2data2) 39 | fdswrap.asm - assembles an fds file out of the binaries of the previous files 40 | 41 | The files all assemble with asm6. The first four files can be assembled independently of the 42 | others. In order to assemble fdswrap.asm you must assemble the first four files, and provide 43 | the necessary character ROM files from the original disk or an FDS disk image yourself. Do *not* 44 | e-mail me asking for the assembled binaries or the character ROM files, or any other ROMs. 45 | 46 | If you wish, you can automate the process by pasting the following to a batch file and running it, 47 | replacing the blank field on the last line with the name of the final file. 48 | 49 | ----------- paste start 50 | @echo off 51 | asm6 sm2main.asm 52 | asm6 sm2data2.asm 53 | asm6 sm2data3.asm 54 | asm6 sm2data4.asm 55 | asm6 fdswrap.asm .fds 56 | ----------- paste end 57 | 58 | Outro 59 | ----- 60 | Anyway, that's the disassembly of SMB2j. I hope somebody finds this as educational and illuminating 61 | as I have, I had a lot of fun reverse-engineering it and SMB1. See ya around. 62 | 63 | -doppelganger 64 | -------------------------------------------------------------------------------- /sm2data2.asm: -------------------------------------------------------------------------------- 1 | ;SMB2J DISASSEMBLY (SM2DATA2 portion) 2 | 3 | ;------------------------------------------------------------------------------------- 4 | ;DEFINES 5 | 6 | FrameCounter = $09 7 | Enemy_State = $1e 8 | Enemy_Y_Position = $cf 9 | PiranhaPlantUpYPos = $0417 10 | PiranhaPlantDownYPos = $0434 11 | PiranhaPlant_Y_Speed = $58 12 | PiranhaPlant_MoveFlag = $a0 13 | 14 | Player_X_Scroll = $06ff 15 | 16 | Player_PageLoc = $6d 17 | Player_X_Position = $86 18 | 19 | AreaObjectLength = $0730 20 | WindFlag = $07f9 21 | AreaType = $074e 22 | 23 | TimerControl = $0747 24 | EnemyFrameTimer = $078a 25 | 26 | Sprite_Y_Position = $0200 27 | Sprite_Tilenumber = $0201 28 | Sprite_Attributes = $0202 29 | Sprite_X_Position = $0203 30 | 31 | Alt_SprDataOffset = $06ec 32 | 33 | NoiseSoundQueue = $fd 34 | 35 | MetatileBuffer = $06a1 36 | 37 | ; import from other files 38 | .import GetPipeHeight 39 | .import FindEmptyEnemySlot 40 | .import SetupPiranhaPlant 41 | .import VerticalPipeData 42 | .import RenderUnderPart 43 | ; export to other files 44 | .export E_CastleArea5 45 | .export E_CastleArea6 46 | .export E_CastleArea7 47 | .export E_CastleArea8 48 | .export E_GroundArea12 49 | .export E_GroundArea13 50 | .export E_GroundArea14 51 | .export E_GroundArea15 52 | .export E_GroundArea16 53 | .export E_GroundArea17 54 | .export E_GroundArea18 55 | .export E_GroundArea19 56 | .export E_GroundArea22 57 | .export E_GroundArea23 58 | .export E_GroundArea24 59 | .export E_GroundArea29 60 | .export E_UndergroundArea4 61 | .export E_UndergroundArea5 62 | .export E_WaterArea2 63 | .export E_WaterArea4 64 | .export E_WaterArea5 65 | .export L_CastleArea5 66 | .export L_CastleArea6 67 | .export L_CastleArea7 68 | .export L_CastleArea8 69 | .export L_GroundArea12 70 | .export L_GroundArea13 71 | .export L_GroundArea14 72 | .export L_GroundArea15 73 | .export L_GroundArea16 74 | .export L_GroundArea17 75 | .export L_GroundArea18 76 | .export L_GroundArea19 77 | .export L_GroundArea22 78 | .export L_GroundArea23 79 | .export L_GroundArea24 80 | .export L_GroundArea29 81 | .export L_UndergroundArea4 82 | .export L_UndergroundArea5 83 | .export L_WaterArea2 84 | .export L_WaterArea4 85 | .export L_WaterArea5 86 | 87 | ;------------------------------------------------------------------------------------------------- 88 | ;$06 - used to store vertical length of pipe 89 | ;$07 - starts with adder from area parser, used to store row offset 90 | 91 | UpsideDownPipe_High: 92 | lda #$01 ;start at second row 93 | pha 94 | bne UDP 95 | UpsideDownPipe_Low: 96 | lda #$04 ;start at fifth row 97 | pha 98 | UDP: jsr GetPipeHeight ;get pipe height from object byte 99 | pla 100 | sta $07 ;save buffer offset temporarily 101 | tya 102 | pha ;save pipe height temporarily 103 | ldy AreaObjectLength,x ;if on second column of pipe, skip this 104 | beq NoUDP 105 | jsr FindEmptyEnemySlot ;otherwise try to insert upside-down 106 | bcs NoUDP ;piranha plant, if no empty slots, skip this 107 | lda #$04 108 | jsr SetupPiranhaPlant ;set up upside-down piranha plant 109 | lda $06 110 | asl 111 | asl ;multiply height of pipe by 16 112 | asl ;and add enemy Y position previously set up 113 | asl ;then subtract 10 pixels, save as new Y position 114 | clc 115 | adc Enemy_Y_Position,x 116 | sec 117 | sbc #$0a 118 | sta Enemy_Y_Position,x 119 | sta PiranhaPlantDownYPos,x ;set as "down" position 120 | clc ;add 24 pixels, save as "up" position 121 | adc #$18 ;note up and down here are reversed 122 | sta PiranhaPlantUpYPos,x 123 | inc PiranhaPlant_MoveFlag,x ;set movement flag 124 | NoUDP: pla 125 | tay ;return tile offset 126 | pha 127 | ldx $07 128 | lda VerticalPipeData+2,y 129 | ldy $06 ;render the pipe shaft 130 | dey 131 | jsr RenderUnderPart 132 | pla 133 | tay 134 | lda VerticalPipeData,y ;and render the pipe end 135 | sta MetatileBuffer,x 136 | rts 137 | 138 | rts ;unused, nothing jumps here 139 | 140 | MoveUpsideDownPiranhaP: 141 | lda Enemy_State,x ;check enemy state 142 | bne ExMoveUDPP ;if set at all, branch to leave 143 | lda EnemyFrameTimer,x ;check enemy's timer here 144 | bne ExMoveUDPP ;branch to end if not yet expired 145 | lda PiranhaPlant_MoveFlag,x ;check movement flag 146 | bne SetupToMovePPlant ;if moving, skip to part ahead 147 | lda PiranhaPlant_Y_Speed,x ;get vertical speed 148 | eor #$ff 149 | clc ;change to two's compliment 150 | adc #$01 151 | sta PiranhaPlant_Y_Speed,x ;save as new vertical speed 152 | inc PiranhaPlant_MoveFlag,x ;increment to set movement flag 153 | 154 | SetupToMovePPlant: 155 | lda PiranhaPlantUpYPos,x ;get original vertical coordinate (lowest point) 156 | ldy PiranhaPlant_Y_Speed,x ;get vertical speed 157 | bpl RiseFallPiranhaPlant ;branch if moving downwards 158 | lda PiranhaPlantDownYPos,x ;otherwise get other vertical coordinate (highest point) 159 | 160 | RiseFallPiranhaPlant: 161 | sta $00 ;save vertical coordinate here 162 | lda TimerControl ;get master timer control 163 | bne ExMoveUDPP ;branch to leave if set (likely not necessary) 164 | lda Enemy_Y_Position,x ;get current vertical coordinate 165 | clc 166 | adc PiranhaPlant_Y_Speed,x ;add vertical speed to move up or down 167 | sta Enemy_Y_Position,x ;save as new vertical coordinate 168 | cmp $00 ;compare against low or high coordinate 169 | bne ExMoveUDPP ;branch to leave if not yet reached 170 | lda #$00 171 | sta PiranhaPlant_MoveFlag,x ;otherwise clear movement flag 172 | lda #$20 173 | sta EnemyFrameTimer,x ;set timer to delay piranha plant movement 174 | ExMoveUDPP: 175 | rts 176 | 177 | ;------------------------------------------------------------------------------------- 178 | 179 | BlowPlayerAround: 180 | lda WindFlag ;if wind is turned off, just exit 181 | beq ExBlow 182 | lda AreaType ;don't blow the player around unless 183 | cmp #$01 ;the area is ground type 184 | bne ExBlow 185 | ldy #$01 186 | lda FrameCounter ;branch to set d0 if on an odd frame 187 | asl 188 | bcs BThr ;otherwise wind will only blow 189 | ldy #$03 ;one out of every four frames 190 | BThr: sty $00 191 | lda FrameCounter ;throttle wind blowing by using the frame counter 192 | and $00 ;to mask out certain frames 193 | bne ExBlow 194 | lda Player_X_Position ;move player slightly to the right 195 | clc ;to simulate the wind moving the player 196 | adc #$01 197 | sta Player_X_Position 198 | lda Player_PageLoc 199 | adc #$00 200 | sta Player_PageLoc 201 | inc Player_X_Scroll ;add one to movement speed for scroll 202 | ExBlow: rts 203 | 204 | ;note the position data values are overwritten in RAM 205 | LeavesYPos: 206 | .byte $30, $70, $b8, $50, $98, $30 207 | .byte $70, $b8, $50, $98, $30, $70 208 | 209 | LeavesXPos: 210 | .byte $30, $30, $30, $60, $60, $a0 211 | .byte $a0, $a0, $d0, $d0, $d0, $60 212 | 213 | LeavesTile: 214 | .byte $7b, $7b, $7b, $7b, $7a, $7a 215 | .byte $7b, $7b, $7b, $7a, $7b, $7a 216 | 217 | SimulateWind: 218 | lda WindFlag ;if no wind, branch to leave 219 | beq ExSimW 220 | lda #$04 ;play wind sfx 221 | sta NoiseSoundQueue 222 | jsr ModifyLeavesPos ;modify X and Y position data of leaves 223 | ldx #$00 ;use mostly unused sprite data offset 224 | ldy Alt_SprDataOffset-1 ;for first six leaves 225 | DrawLeaf: lda LeavesYPos,x 226 | sta Sprite_Y_Position,y ;set up sprite data in OAM memory 227 | lda LeavesTile,x 228 | sta Sprite_Tilenumber,y 229 | lda #$41 230 | sta Sprite_Attributes,y 231 | lda LeavesXPos,x 232 | sta Sprite_X_Position,y 233 | iny 234 | iny 235 | iny 236 | iny 237 | inx ;if still on first six leaves, continue 238 | cpx #$06 ;using the first sprite data offset 239 | bne DLLoop ;otherwise use the next one instead 240 | ldy Alt_SprDataOffset ;note the next one is also used by blocks 241 | DLLoop: cpx #$0c ;continue until done putting all leaves on the screen 242 | bne DrawLeaf 243 | ExSimW: rts 244 | 245 | LeavesPosAdder: 246 | .byte $57, $57, $56, $56, $58, $58, $56, $56, $57, $58, $57, $58 247 | .byte $59, $59, $58, $58, $5a, $5a, $58, $58, $59, $5a, $59, $5a 248 | 249 | ModifyLeavesPos: 250 | ldx #$0b 251 | MLPLoop: lda LeavesXPos,x ;add each adder to each X position twice 252 | clc ;and to each Y position once 253 | adc LeavesPosAdder,x 254 | adc LeavesPosAdder,x 255 | sta LeavesXPos,x 256 | lda LeavesYPos,x 257 | clc 258 | adc LeavesPosAdder,x 259 | sta LeavesYPos,x 260 | dex 261 | bpl MLPLoop 262 | rts 263 | 264 | WindOn: 265 | lda #$01 ;branch to turn the wind on 266 | bne WOn 267 | WindOff: 268 | lda #$00 ;turn the wind off 269 | WOn: sta WindFlag 270 | rts 271 | 272 | ;some unused bytes 273 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 274 | 275 | ;------------------------------------------------------------------------------------- 276 | 277 | ;level 5-4 278 | E_CastleArea5: 279 | .byte $2a, $a9, $6b, $0c, $cb, $0c, $15, $9c, $89, $1c, $cc, $1d, $09, $9d, $f5, $1c 280 | .byte $6b, $a9, $ab, $0c, $db, $29, $48, $9d, $9b, $0c, $5b, $8c, $a5, $1c, $49, $9d 281 | .byte $79, $1d, $09, $9d, $6b, $0c, $c9, $1f, $3b, $8c, $88, $95, $b9, $1c, $19, $9d 282 | .byte $30, $cc, $78, $2d, $a6, $28, $90, $b5, $ff 283 | 284 | ;level 6-4 285 | E_CastleArea6: 286 | .byte $0f, $02, $09, $1f, $8b, $85, $2b, $8c, $e9, $1b, $25, $9d, $0f, $07, $09, $1d 287 | .byte $6d, $28, $99, $1b, $b5, $2c, $4b, $8c, $09, $9f, $fb, $15, $9d, $a8, $0f, $0c 288 | .byte $2b, $0c, $78, $2d, $90, $b5, $ff 289 | 290 | ;level 7-4 291 | E_CastleArea7: 292 | .byte $05, $9d, $0d, $a8, $dd, $1d, $07, $ac, $54, $2c, $a2, $2c, $f4, $2c, $42, $ac 293 | .byte $26, $9d, $d4, $03, $24, $83, $64, $03, $2b, $82, $4b, $02, $7b, $02, $9b, $02 294 | .byte $5b, $82, $7b, $02, $0b, $82, $2b, $02, $c6, $1b, $28, $82, $48, $02, $a6, $1b 295 | .byte $7b, $95, $85, $0c, $9d, $9b, $0f, $0e, $78, $2d, $7a, $1d, $90, $b5, $ff 296 | 297 | ;level 8-4 298 | E_CastleArea8: 299 | .byte $19, $9b, $99, $1b, $2c, $8c, $59, $1b, $c5, $0f, $0e, $83, $e0, $0f, $06, $2e 300 | .byte $67, $e7, $0f, $08, $9b, $07, $0e, $83, $e0, $39, $0e, $87, $10, $bd, $28, $59 301 | .byte $9f, $0f, $0f, $34, $0f, $77, $10, $9e, $67, $f1, $0f, $12, $0e, $67, $e3, $78 302 | .byte $2d, $0f, $15, $3b, $29, $57, $82, $0f, $18, $55, $1d, $78, $2d, $90, $b5, $ff 303 | 304 | ;level 5-1 305 | E_GroundArea12: 306 | .byte $1b, $82, $4b, $02, $7b, $02, $ab, $02, $0f, $03, $f9, $0e, $d0, $be, $8e, $c4 307 | .byte $86, $f8, $0e, $c0, $ba, $0f, $0d, $3a, $0e, $bb, $02, $30, $b7, $80, $bc, $c0 308 | .byte $bc, $0f, $12, $24, $0f, $54, $0f, $ce, $3c, $80, $d3, $0f, $cb, $8e, $f9, $0e 309 | .byte $ff 310 | 311 | ;level 5-3 312 | E_GroundArea13: 313 | .byte $0a, $aa, $15, $8f, $44, $0f, $4e, $44, $80, $d8, $07, $57, $90, $0f, $06, $67 314 | .byte $24, $8b, $17, $b9, $24, $ab, $97, $16, $87, $2a, $28, $84, $0f, $57, $a9, $a5 315 | .byte $29, $f5, $29, $a7, $a4, $0a, $a4, $ff 316 | 317 | ;level 6-1 318 | E_GroundArea14: 319 | .byte $07, $82, $67, $0e, $40, $bd, $e0, $38, $d0, $bc, $6e, $84, $a0, $9b, $05, $0f 320 | .byte $06, $bb, $05, $0f, $08, $0b, $0e, $4b, $0e, $0f, $0a, $05, $29, $85, $29, $0f 321 | .byte $0c, $dd, $28, $ff 322 | 323 | ;level 6-3 324 | E_GroundArea15: 325 | .byte $0f, $02, $28, $10, $e6, $03, $d8, $90, $0f, $05, $85, $0f, $78, $83, $c8, $10 326 | .byte $18, $83, $58, $83, $f7, $90, $0f, $0c, $43, $0f, $73, $8f, $ff 327 | 328 | ;level 7-1 329 | E_GroundArea16: 330 | .byte $a7, $83, $d7, $03, $0f, $03, $6b, $00, $0f, $06, $e3, $0f, $14, $8f, $3e, $44 331 | .byte $c3, $0b, $80, $87, $05, $ab, $05, $db, $83, $0f, $0b, $07, $05, $13, $0e, $2b 332 | .byte $02, $4b, $02, $0f, $10, $0b, $0e, $b0, $37, $90, $bc, $80, $bc, $ae, $44, $c0 333 | .byte $ff 334 | 335 | ;level 7-2 336 | E_GroundArea17: 337 | .byte $0a, $aa, $d5, $8f, $03, $8f, $3e, $44, $c6, $d8, $83, $0f, $06, $a6, $11, $b9 338 | .byte $0e, $39, $9d, $79, $1b, $a6, $11, $e8, $03, $87, $83, $16, $90, $a6, $11, $b9 339 | .byte $1d, $05, $8f, $38, $29, $89, $29, $26, $8f, $46, $29, $ff 340 | 341 | ;level 7-3 342 | E_GroundArea18: 343 | .byte $0f, $04, $a3, $10, $0f, $09, $e3, $29, $0f, $0d, $55, $24, $a9, $24, $0f, $11 344 | .byte $59, $1d, $a9, $1b, $23, $8f, $15, $9b, $ff 345 | 346 | ;level 8-1 347 | E_GroundArea19: 348 | .byte $0f, $01, $db, $02, $30, $b7, $80, $3b, $1b, $8e, $4a, $0e, $eb, $03, $3b, $82 349 | .byte $5b, $02, $e5, $0f, $14, $8f, $44, $0f, $5b, $82, $0c, $85, $35, $8f, $06, $85 350 | .byte $e3, $05, $db, $83, $3e, $84, $e0, $ff 351 | 352 | ;level 8-2 353 | E_GroundArea22: 354 | .byte $0f, $02, $0a, $29, $f7, $02, $80, $bc, $6b, $82, $7b, $02, $9b, $02, $ab, $02 355 | .byte $39, $8e, $0f, $07, $ce, $35, $ec, $f5, $0f, $fb, $85, $fb, $85, $3e, $c4, $e3 356 | .byte $a7, $02, $ff 357 | 358 | ;level 8-3 359 | E_GroundArea23: 360 | .byte $09, $a9, $86, $11, $d5, $10, $a3, $8f, $d5, $29, $86, $91, $2b, $83, $58, $03 361 | .byte $5b, $85, $eb, $05, $3e, $bc, $e0, $0f, $09, $43, $0f, $74, $0f, $6b, $85, $db 362 | .byte $05, $c6, $a4, $19, $a4, $12, $8f 363 | ;another unused area 364 | E_GroundArea24: 365 | .byte $ff 366 | 367 | ;cloud level used with level 5-1 368 | E_GroundArea29: 369 | .byte $0a, $aa, $2e, $2b, $98, $2e, $36, $e7, $ff 370 | 371 | ;level 5-2 372 | E_UndergroundArea4: 373 | .byte $0b, $83, $b7, $03, $d7, $03, $0f, $05, $67, $03, $7b, $02, $9b, $02, $80, $b9 374 | .byte $3b, $83, $4e, $b4, $80, $86, $2b, $c9, $2c, $16, $ac, $67, $b4, $de, $3b, $81 375 | .byte $ff 376 | 377 | ;underground bonus rooms used with worlds 5-8 378 | E_UndergroundArea5: 379 | .byte $1e, $af, $ca, $1e, $2c, $85, $0f, $04, $1e, $2d, $a7, $1e, $2f, $ce, $1e, $35 380 | .byte $e5, $0f, $07, $1e, $2b, $87, $1e, $30, $c5, $ff 381 | 382 | ;level 6-2 383 | E_WaterArea2: 384 | .byte $0f, $01, $2e, $3b, $a1, $5b, $07, $ab, $07, $69, $87, $ba, $07, $fb, $87, $65 385 | .byte $a7, $6a, $27, $a6, $a7, $ac, $27, $1b, $87, $88, $07, $2b, $83, $7b, $07, $a7 386 | .byte $90, $e5, $83, $14, $a7, $19, $27, $77, $07, $f8, $07, $47, $8f, $b9, $07, $ff 387 | 388 | ;water area used in level 8-4 389 | E_WaterArea4: 390 | .byte $07, $9b, $0a, $07, $b9, $1b, $66, $9b, $78, $07, $ae, $67, $e5, $ff 391 | 392 | ;water area used in level 6-1 393 | E_WaterArea5: 394 | .byte $97, $87, $cb, $00, $ee, $2b, $f8, $fe, $2d, $ad, $75, $87, $d3, $27, $d9, $27 395 | .byte $0f, $04, $56, $0f, $ff 396 | 397 | ;level 5-4 398 | L_CastleArea5: 399 | .byte $9b, $07, $05, $32, $06, $33, $07, $33, $3e, $03, $4c, $50, $4e, $07, $57, $31 400 | .byte $6e, $03, $7c, $52, $9e, $07, $fe, $0a, $7e, $89, $9e, $0a, $ee, $09, $fe, $0b 401 | .byte $13, $8e, $1e, $09, $3e, $0a, $6e, $09, $87, $0e, $9e, $02, $c6, $07, $ca, $0e 402 | .byte $f7, $62, $07, $8e, $08, $61, $17, $62, $1e, $0a, $4e, $06, $5e, $0a, $7e, $06 403 | .byte $8e, $0a, $ae, $06, $be, $07, $f3, $0e, $1e, $86, $2e, $0a, $84, $37, $93, $36 404 | .byte $a2, $45, $1e, $89, $46, $0e, $6e, $0a, $a7, $31, $db, $60, $f7, $60, $1b, $e0 405 | .byte $37, $31, $7e, $09, $8e, $0b, $a3, $0e, $fe, $04, $17, $bb, $47, $0e, $77, $0e 406 | .byte $be, $02, $ce, $0a, $07, $8e, $17, $31, $63, $31, $a7, $34, $c7, $0e, $13, $b1 407 | .byte $4e, $09, $1e, $8a, $7e, $02, $97, $34, $b7, $0e, $ce, $0a, $de, $02, $d8, $61 408 | .byte $f7, $62, $fe, $03, $07, $b4, $17, $0e, $47, $62, $4e, $0a, $5e, $03, $51, $61 409 | .byte $67, $62, $77, $34, $b7, $62, $c1, $61, $da, $60, $e9, $61, $f8, $62, $fe, $0a 410 | .byte $0d, $c4, $01, $52, $11, $52, $21, $52, $31, $52, $41, $52, $51, $52, $61, $52 411 | .byte $cd, $43, $ce, $09, $de, $0b, $dd, $42, $fe, $02, $5d, $c7, $fd 412 | 413 | ;level 6-4 414 | L_CastleArea6: 415 | .byte $5b, $09, $05, $32, $06, $33, $4e, $0a, $87, $31, $fe, $02, $88, $f2, $c7, $33 416 | .byte $0d, $02, $07, $0e, $17, $34, $6e, $0a, $8e, $02, $bf, $67, $ed, $4b, $b7, $b6 417 | .byte $c3, $35, $1e, $8a, $2e, $02, $33, $3f, $37, $3f, $88, $f2, $c7, $33, $ed, $4b 418 | .byte $0d, $06, $03, $33, $0f, $74, $47, $73, $67, $73, $7e, $09, $9e, $0a, $ed, $4b 419 | .byte $f7, $32, $07, $8e, $97, $0e, $ae, $00, $de, $02, $e3, $35, $e7, $35, $3e, $8a 420 | .byte $4e, $02, $53, $3e, $57, $3e, $07, $8e, $a7, $34, $bf, $63, $ed, $4b, $2e, $8a 421 | .byte $fe, $06, $2e, $88, $34, $33, $35, $33, $6e, $06, $8e, $0c, $be, $06, $fe, $0a 422 | .byte $01, $d2, $0d, $44, $11, $52, $21, $52, $31, $52, $41, $52, $42, $0b, $51, $52 423 | .byte $61, $52, $cd, $43, $ce, $09, $dd, $42, $de, $0b, $fe, $02, $5d, $c7, $fd 424 | 425 | ;level 7-4 426 | L_CastleArea7: 427 | .byte $58, $07, $05, $35, $06, $3d, $07, $3d, $be, $06, $de, $0c, $f3, $3d, $03, $8e 428 | .byte $6e, $43, $ce, $0a, $e1, $67, $f1, $67, $01, $e7, $11, $67, $1e, $05, $28, $39 429 | .byte $6e, $40, $be, $01, $c7, $06, $db, $0e, $de, $00, $1f, $80, $6f, $00, $bf, $00 430 | .byte $0f, $80, $5f, $00, $7e, $05, $a8, $37, $fe, $02, $24, $8e, $34, $30, $3e, $0c 431 | .byte $4e, $43, $ae, $0a, $be, $0c, $ee, $0a, $fe, $0c, $2e, $8a, $3e, $0c, $7e, $02 432 | .byte $8e, $0e, $98, $36, $b9, $34, $08, $bf, $09, $3f, $0e, $82, $2e, $86, $4e, $0c 433 | .byte $9e, $09, $c1, $62, $c4, $0e, $ee, $0c, $0e, $86, $5e, $0c, $7e, $09, $a1, $62 434 | .byte $a4, $0e, $ce, $0c, $fe, $0a, $28, $b4, $a6, $31, $e8, $34, $8b, $b2, $9b, $0e 435 | .byte $fe, $07, $fe, $8a, $0d, $c4, $cd, $43, $ce, $09, $dd, $42, $de, $0b, $fe, $02 436 | .byte $5d, $c7, $fd 437 | 438 | ;level 8-4 439 | L_CastleArea8: 440 | .byte $5b, $03, $05, $34, $06, $35, $07, $36, $6e, $0a, $ee, $02, $fe, $05, $0d, $01 441 | .byte $17, $0e, $97, $0e, $9e, $02, $c6, $05, $fa, $30, $fe, $0a, $4e, $82, $57, $0e 442 | .byte $58, $62, $68, $62, $79, $61, $8a, $60, $8e, $0a, $f5, $31, $f9, $7b, $39, $f3 443 | .byte $97, $33, $b5, $71, $39, $f3, $4d, $48, $9e, $02, $ae, $05, $cd, $4a, $ed, $4b 444 | .byte $0e, $81, $17, $06, $39, $73, $5c, $02, $85, $65, $95, $32, $a9, $7b, $cc, $03 445 | .byte $5e, $8f, $6d, $47, $fe, $02, $0d, $07, $39, $73, $4e, $0a, $ae, $02, $ec, $71 446 | .byte $07, $81, $17, $02, $39, $73, $e6, $05, $39, $fb, $4e, $0a, $c4, $31, $eb, $61 447 | .byte $fe, $02, $07, $b0, $1e, $0a, $4e, $06, $57, $0e, $be, $02, $c9, $61, $da, $60 448 | .byte $ed, $4b, $0e, $85, $0d, $0e, $fe, $0a, $78, $e4, $8e, $06, $b3, $06, $bf, $47 449 | .byte $ee, $0f, $6d, $c7, $0e, $82, $39, $73, $9a, $60, $a9, $61, $ae, $06, $de, $0a 450 | .byte $e7, $03, $eb, $79, $f7, $03, $fe, $06, $0d, $14, $fe, $0a, $5e, $82, $7f, $66 451 | .byte $9e, $0a, $f8, $64, $fe, $0b, $9e, $84, $be, $05, $be, $82, $da, $60, $e9, $61 452 | .byte $f8, $62, $fe, $0a, $0d, $c4, $11, $64, $51, $62, $cd, $43, $ce, $09, $dd, $42 453 | .byte $de, $0b, $fe, $02, $5d, $c7, $fd 454 | 455 | ;level 5-1 456 | L_GroundArea12: 457 | .byte $52, $b1, $0f, $20, $6e, $75, $cc, $73, $a3, $b3, $bf, $74, $0c, $84, $83, $3f 458 | .byte $9f, $74, $ef, $71, $ec, $01, $2f, $f1, $2c, $01, $6f, $71, $6c, $01, $a8, $91 459 | .byte $aa, $10, $77, $fb, $56, $f4, $39, $f1, $bf, $37, $33, $e7, $43, $04, $47, $03 460 | .byte $6c, $05, $c3, $67, $d3, $67, $e3, $67, $ed, $4c, $fc, $07, $73, $e7, $83, $67 461 | .byte $93, $67, $a3, $67, $bc, $08, $43, $e7, $53, $67, $dc, $02, $59, $91, $c3, $33 462 | .byte $d9, $71, $df, $72, $2d, $cd, $5b, $71, $9b, $71, $3b, $f1, $a7, $c2, $db, $71 463 | .byte $0d, $10, $9b, $71, $0a, $b0, $1c, $04, $67, $63, $76, $64, $85, $65, $94, $66 464 | .byte $a3, $67, $b3, $67, $cc, $09, $73, $a3, $87, $22, $b3, $09, $d6, $83, $e3, $03 465 | .byte $fe, $3f, $0d, $15, $de, $31, $ec, $01, $03, $f7, $9d, $41, $df, $26, $0d, $18 466 | .byte $39, $71, $7f, $37, $f2, $68, $01, $e9, $11, $39, $68, $7a, $de, $3f, $6d, $c5 467 | .byte $fd 468 | 469 | ;level 5-3 470 | L_GroundArea13: 471 | .byte $50, $11, $0f, $26, $df, $32, $fe, $10, $0d, $01, $98, $74, $c8, $13, $52, $e1 472 | .byte $63, $31, $61, $79, $c6, $61, $06, $e1, $8b, $71, $ab, $71, $e4, $19, $eb, $19 473 | .byte $60, $86, $c8, $13, $cd, $4b, $39, $f3, $98, $13, $17, $f5, $7c, $15, $7f, $13 474 | .byte $cf, $15, $d4, $40, $0b, $9a, $23, $16, $32, $44, $a3, $95, $b2, $43, $0d, $0a 475 | .byte $27, $14, $3d, $4a, $a4, $40, $bc, $16, $bf, $13, $c4, $40, $04, $c0, $1f, $16 476 | .byte $24, $40, $43, $31, $ce, $11, $dd, $41, $0e, $d2, $3f, $20, $3d, $c7, $fd 477 | 478 | ;level 6-1 479 | L_GroundArea14: 480 | .byte $52, $a1, $0f, $20, $6e, $40, $d6, $61, $e7, $07, $f7, $21, $16, $e1, $34, $63 481 | .byte $47, $21, $54, $04, $67, $0a, $74, $63, $dc, $01, $06, $e1, $17, $26, $86, $61 482 | .byte $66, $c2, $58, $c1, $f7, $03, $04, $f6, $8a, $10, $9c, $04, $e8, $62, $f9, $61 483 | .byte $0a, $e0, $53, $31, $5f, $73, $7b, $71, $77, $25, $fc, $e2, $17, $aa, $23, $00 484 | .byte $3c, $67, $b3, $01, $cc, $63, $db, $71, $df, $73, $fc, $00, $4f, $b7, $ca, $7a 485 | .byte $c5, $31, $ec, $54, $3c, $dc, $5d, $4c, $0f, $b3, $47, $63, $6b, $f1, $8c, $0a 486 | .byte $39, $f1, $ec, $03, $f0, $33, $0f, $e2, $29, $73, $49, $61, $58, $62, $67, $73 487 | .byte $85, $65, $94, $66, $a3, $77, $ad, $4d, $4d, $c1, $6f, $26, $5d, $c7, $fd 488 | 489 | ;level 6-3 490 | L_GroundArea15: 491 | .byte $50, $11, $0f, $26, $af, $32, $d8, $62, $de, $10, $08, $e4, $5a, $62, $6c, $4c 492 | .byte $86, $43, $ad, $48, $3a, $e2, $53, $42, $88, $64, $9c, $36, $08, $e4, $4a, $62 493 | .byte $5c, $4d, $3a, $e2, $9c, $32, $fc, $41, $3c, $b1, $83, $00, $ac, $42, $2a, $e2 494 | .byte $3c, $46, $aa, $62, $bc, $4e, $c6, $43, $46, $c3, $aa, $62, $bd, $48, $0b, $96 495 | .byte $47, $07, $c7, $12, $3c, $c2, $9c, $41, $cd, $48, $dc, $32, $4c, $c2, $bc, $32 496 | .byte $1c, $b1, $5a, $62, $6c, $44, $76, $43, $ba, $62, $dc, $32, $5d, $ca, $73, $12 497 | .byte $e3, $12, $8e, $91, $9d, $41, $be, $42, $ef, $20, $cd, $c7, $fd 498 | 499 | ;level 7-1 500 | L_GroundArea16: 501 | .byte $52, $b1, $0f, $20, $6e, $76, $03, $b1, $09, $71, $0f, $71, $6f, $33, $a7, $63 502 | .byte $b7, $34, $bc, $0e, $4d, $cc, $03, $a6, $08, $72, $3f, $72, $6d, $4c, $73, $07 503 | .byte $77, $73, $83, $27, $ac, $00, $bf, $73, $3c, $80, $9a, $30, $ac, $5b, $c6, $3c 504 | .byte $6a, $b0, $75, $10, $96, $74, $b6, $0a, $da, $30, $e3, $28, $ec, $5b, $ed, $48 505 | .byte $aa, $b0, $33, $b4, $51, $79, $ad, $4a, $dd, $4d, $e3, $2c, $0c, $fa, $73, $07 506 | .byte $b3, $04, $cb, $71, $ec, $07, $0d, $0a, $39, $71, $df, $33, $ca, $b0, $d6, $10 507 | .byte $d7, $30, $dc, $0c, $03, $b1, $ad, $41, $ef, $26, $ed, $c7, $39, $f1, $0d, $10 508 | .byte $7d, $4c, $0d, $13, $a8, $11, $aa, $10, $1c, $83, $d7, $7b, $f3, $67, $5d, $cd 509 | .byte $6d, $47, $fd 510 | 511 | ;level 7-2 512 | L_GroundArea17: 513 | .byte $56, $11, $0f, $26, $df, $32, $fe, $11, $0d, $01, $0c, $5f, $03, $80, $0c, $52 514 | .byte $29, $15, $7c, $5b, $23, $b2, $29, $1f, $31, $79, $1c, $de, $48, $3b, $ed, $4b 515 | .byte $39, $f1, $cf, $b3, $fe, $10, $37, $8e, $77, $0e, $9e, $11, $a8, $34, $a9, $34 516 | .byte $aa, $34, $f8, $62, $fe, $10, $37, $b6, $de, $11, $e7, $63, $f8, $62, $09, $e1 517 | .byte $0e, $10, $47, $36, $b7, $0e, $be, $91, $ca, $32, $ee, $10, $1d, $ca, $7e, $11 518 | .byte $83, $77, $9e, $10, $1e, $91, $2d, $41, $4f, $26, $4d, $c7, $fd 519 | 520 | ;level 7-3 521 | L_GroundArea18: 522 | .byte $57, $11, $0f, $26, $fe, $10, $4b, $92, $59, $0f, $ad, $4c, $d3, $93, $0b, $94 523 | .byte $29, $0f, $7b, $93, $99, $0f, $0d, $06, $27, $12, $35, $0f, $23, $b1, $57, $75 524 | .byte $a3, $31, $ab, $71, $f7, $75, $23, $b1, $87, $13, $95, $0f, $0d, $0a, $23, $35 525 | .byte $38, $13, $55, $00, $9b, $16, $0b, $96, $c7, $75, $3b, $92, $49, $0f, $ad, $4c 526 | .byte $29, $92, $52, $40, $6c, $15, $6f, $11, $72, $40, $bf, $15, $03, $93, $0a, $13 527 | .byte $12, $41, $8b, $12, $99, $0f, $0d, $10, $47, $16, $46, $45, $b3, $32, $13, $b1 528 | .byte $57, $0e, $a7, $0e, $d3, $31, $53, $b1, $a6, $31, $03, $b2, $13, $0e, $8d, $4d 529 | .byte $ae, $11, $bd, $41, $ee, $52, $0f, $a0, $dd, $47, $fd 530 | 531 | ;level 8-1 532 | L_GroundArea19: 533 | .byte $52, $a1, $0f, $20, $6e, $65, $57, $f3, $60, $21, $6f, $62, $ac, $75, $07, $80 534 | .byte $1c, $76, $87, $01, $9c, $70, $b0, $33, $cf, $66, $57, $e3, $6c, $04, $cd, $4c 535 | .byte $9a, $b0, $ac, $0c, $83, $b1, $8f, $74, $bd, $4d, $f8, $11, $fa, $10, $83, $87 536 | .byte $93, $22, $9f, $74, $59, $f1, $89, $61, $a9, $61, $bc, $0c, $67, $a0, $eb, $71 537 | .byte $77, $87, $7a, $10, $86, $51, $95, $52, $a4, $53, $b6, $04, $b3, $24, $26, $85 538 | .byte $4a, $10, $53, $23, $5c, $00, $6f, $73, $93, $08, $07, $fb, $2c, $04, $33, $30 539 | .byte $74, $76, $eb, $71, $57, $8b, $6c, $02, $96, $74, $e3, $30, $0c, $86, $7d, $41 540 | .byte $bf, $26, $bd, $c7, $fd 541 | 542 | ;level 8-2 543 | L_GroundArea22: 544 | .byte $50, $61, $0f, $26, $bb, $f1, $dc, $06, $23, $87, $b5, $71, $b7, $31, $d7, $28 545 | .byte $06, $c5, $67, $08, $0d, $05, $39, $71, $7c, $00, $9e, $62, $b6, $0b, $e6, $08 546 | .byte $4e, $e0, $5d, $4c, $59, $0f, $6c, $02, $93, $67, $ac, $56, $ad, $4c, $1f, $b1 547 | .byte $3c, $01, $98, $0a, $9e, $20, $a8, $21, $f3, $09, $0e, $a1, $27, $20, $3e, $62 548 | .byte $56, $08, $7d, $4d, $c6, $08, $3e, $e0, $9e, $62, $b6, $08, $1e, $e0, $4c, $00 549 | .byte $6c, $00, $a7, $7b, $de, $2f, $6d, $c7, $fe, $10, $0b, $93, $5b, $15, $b7, $12 550 | .byte $03, $91, $ab, $1f, $bd, $41, $ef, $26, $ad, $c7, $fd 551 | 552 | ;level 8-3 553 | L_GroundArea23: 554 | .byte $50, $50, $0f, $26, $0b, $1f, $57, $92, $8b, $12, $d2, $14, $4b, $92, $59, $0f 555 | .byte $0b, $95, $bb, $1f, $be, $52, $58, $e2, $9e, $50, $97, $08, $bb, $1f, $ae, $d2 556 | .byte $b6, $08, $bb, $1f, $dd, $4a, $f6, $07, $26, $89, $8e, $50, $98, $62, $eb, $11 557 | .byte $07, $f3, $0b, $1d, $2e, $52, $47, $0a, $ce, $50, $eb, $1f, $ee, $52, $5e, $d0 558 | .byte $d9, $0f, $ab, $9f, $be, $52, $8e, $d0, $ab, $1d, $ae, $52, $36, $8b, $56, $08 559 | .byte $5e, $50, $dc, $15, $df, $12, $2f, $95, $c3, $31, $5b, $9f, $6d, $41, $8e, $52 560 | .byte $af, $20, $ad, $c7 561 | ;another unused area 562 | L_GroundArea24: 563 | .byte $fd 564 | 565 | ;cloud level used with level 5-1 566 | L_GroundArea29: 567 | .byte $00, $c1, $4c, $00, $f3, $4f, $fa, $c6, $68, $a0, $69, $20, $6a, $20, $7a, $47 568 | .byte $f8, $20, $f9, $20, $fa, $20, $0a, $cf, $b4, $49, $55, $a0, $56, $20, $73, $47 569 | .byte $f5, $20, $f6, $20, $22, $a1, $41, $48, $52, $20, $72, $20, $92, $20, $b2, $20 570 | .byte $fe, $00, $9b, $c2, $ad, $c7, $fd 571 | 572 | ;level 5-2 573 | L_UndergroundArea4: 574 | .byte $48, $0f, $1e, $01, $27, $06, $5e, $02, $8f, $63, $8c, $01, $ef, $67, $1c, $81 575 | .byte $2e, $09, $3c, $63, $73, $01, $8c, $60, $fe, $02, $1e, $8e, $3e, $02, $44, $07 576 | .byte $45, $52, $4e, $0e, $8e, $02, $99, $71, $b5, $24, $b6, $24, $b7, $24, $fe, $02 577 | .byte $07, $87, $17, $22, $37, $52, $37, $0b, $47, $52, $4e, $0a, $57, $52, $5e, $02 578 | .byte $67, $52, $77, $52, $7e, $0a, $87, $52, $8e, $02, $96, $46, $97, $52, $a7, $52 579 | .byte $b7, $52, $c7, $52, $d7, $52, $e7, $52, $f7, $52, $fe, $04, $07, $a3, $47, $08 580 | .byte $57, $26, $c7, $0a, $e9, $71, $17, $a7, $97, $08, $9e, $01, $a0, $24, $c6, $74 581 | .byte $f0, $0c, $fe, $04, $0c, $80, $6f, $32, $98, $62, $a8, $62, $bc, $00, $c7, $73 582 | .byte $e7, $73, $fe, $02, $7f, $e7, $8e, $01, $9e, $00, $de, $02, $f7, $0b, $fe, $0e 583 | .byte $4e, $82, $54, $52, $64, $51, $6e, $00, $74, $09, $9f, $00, $df, $00, $2f, $80 584 | .byte $4e, $02, $59, $47, $ce, $0a, $07, $f5, $68, $54, $7f, $64, $88, $54, $a8, $54 585 | .byte $ae, $01, $b8, $52, $bf, $47, $c8, $52, $d8, $52, $e8, $52, $ee, $0f, $4d, $c7 586 | .byte $0d, $0d, $0e, $02, $68, $7a, $be, $01, $ee, $0f, $6d, $c5, $fd 587 | 588 | ;underground bonus rooms used with worlds 5-8 589 | L_UndergroundArea5: 590 | .byte $08, $0f, $0e, $01, $2e, $05, $38, $2c, $3a, $4f, $08, $ac, $c7, $0b, $ce, $01 591 | .byte $df, $4a, $6d, $c7, $0e, $81, $00, $5a, $2e, $02, $b8, $4f, $cf, $65, $0f, $e5 592 | .byte $4f, $65, $8f, $65, $df, $4a, $6d, $c7, $0e, $81, $00, $5a, $30, $07, $34, $52 593 | .byte $3e, $02, $42, $47, $44, $47, $46, $27, $c0, $0b, $c4, $52, $df, $4a, $6d, $c7 594 | .byte $fd 595 | 596 | ;level 6-2 597 | L_WaterArea2: 598 | .byte $41, $01, $27, $d3, $79, $51, $c4, $56, $00, $e2, $03, $53, $0c, $0f, $12, $3b 599 | .byte $1a, $42, $43, $54, $6d, $49, $83, $53, $99, $53, $c3, $54, $da, $52, $0c, $84 600 | .byte $09, $53, $53, $64, $63, $31, $67, $34, $86, $41, $8c, $01, $a3, $30, $b3, $64 601 | .byte $cc, $03, $d9, $42, $5c, $84, $a0, $62, $a8, $62, $b0, $62, $b8, $62, $c0, $62 602 | .byte $c8, $62, $d0, $62, $d8, $62, $e0, $62, $e8, $62, $16, $c2, $58, $52, $8c, $04 603 | .byte $a7, $55, $d0, $63, $d7, $65, $e2, $61, $e7, $65, $f2, $61, $f7, $65, $13, $b8 604 | .byte $17, $38, $8c, $03, $1d, $c9, $50, $62, $5c, $0b, $62, $3e, $63, $52, $8a, $52 605 | .byte $93, $54, $aa, $42, $d3, $51, $ea, $41, $03, $d3, $1c, $04, $1a, $52, $33, $55 606 | .byte $73, $44, $77, $44, $16, $d2, $19, $31, $1a, $32, $5c, $0f, $9a, $47, $95, $64 607 | .byte $a5, $64, $b5, $64, $c5, $64, $d5, $64, $e5, $64, $f5, $64, $05, $e4, $40, $61 608 | .byte $42, $35, $56, $34, $5c, $09, $a2, $61, $a6, $61, $b3, $34, $b7, $34, $fc, $08 609 | .byte $0c, $87, $28, $54, $59, $53, $9a, $30, $a9, $61, $b8, $62, $be, $0b, $d4, $60 610 | .byte $d5, $0d, $de, $0f, $0d, $ca, $7d, $47, $fd 611 | 612 | ;water area used in level 8-4 613 | L_WaterArea4: 614 | .byte $07, $0f, $0e, $02, $39, $73, $05, $8e, $2e, $0b, $b7, $0e, $64, $8e, $6e, $02 615 | .byte $ce, $06, $de, $0f, $e6, $0d, $7d, $c7, $fd 616 | 617 | ;water area used in level 6-1 618 | L_WaterArea5: 619 | .byte $01, $01, $77, $39, $a3, $43, $00, $bf, $29, $51, $39, $48, $61, $55, $d6, $54 620 | .byte $d2, $44, $0c, $82, $2e, $02, $31, $66, $44, $47, $47, $32, $4a, $47, $97, $32 621 | .byte $c1, $66, $ce, $01, $dc, $02, $fe, $0e, $0c, $8f, $08, $4f, $fe, $01, $27, $d3 622 | .byte $5c, $02, $9a, $60, $a9, $61, $b8, $62, $c7, $63, $ce, $0f, $d5, $0d, $7d, $c7 623 | .byte $fd 624 | 625 | ;unused bytes 626 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 627 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff -------------------------------------------------------------------------------- /sm2data3.asm: -------------------------------------------------------------------------------- 1 | ;SMB2J DISASSEMBLY (SM2DATA3 portion) 2 | 3 | ;------------------------------------------------------------------------------------- 4 | ;DEFINES 5 | 6 | OperMode = $0770 7 | OperMode_Task = $0772 8 | ScreenRoutineTask = $073c 9 | DiskIOTask = $07fc 10 | 11 | VRAM_Buffer1 = $0301 12 | VRAM_Buffer_AddrCtrl = $0773 13 | DisableScreenFlag = $0774 14 | SelectTimer = $0780 15 | ScreenTimer = $07a0 16 | WorldEndTimer = $07a1 17 | FantasyW9MsgFlag = $07f5 18 | 19 | IRQUpdateFlag = $0722 20 | IRQAckFlag = $077b 21 | 22 | FDSBIOS_DELAY = $e149 23 | FDSBIOS_LOADFILES = $e1f8 24 | FDSBIOS_WRITEFILE = $e239 25 | NameTableSelect = $077a 26 | CompletedWorlds = $07fa 27 | HardWorldFlag = $07fb 28 | FileListNumber = $07f7 29 | 30 | GamePauseStatus = $0776 31 | 32 | ObjectOffset = $08 33 | Enemy_ID = $16 34 | Enemy_Y_Position = $cf 35 | Enemy_Rel_XPos = $03ae 36 | Enemy_SprDataOffset = $06e5 37 | 38 | SelectedPlayer = $0753 39 | NumberofLives = $075a 40 | DigitModifier = $0134 41 | WorldNumber = $075f 42 | 43 | ;sound related defines 44 | Squ2_NoteLenBuffer = $0610 45 | Squ2_NoteLenCounter = $0611 46 | Squ2_EnvelopeDataCtrl = $0612 47 | Squ1_NoteLenCounter = $0613 48 | Squ1_EnvelopeDataCtrl = $0614 49 | Tri_NoteLenBuffer = $0615 50 | Tri_NoteLenCounter = $0616 51 | Noise_BeatLenCounter = $0617 52 | FDSSND_LenBuffer = $05f2 53 | FDSSND_LenCounter = $05f1 54 | FDSSND_MasterEnvTimer = $05f3 55 | FDSSND_ModTableNumber = $05f6 56 | FDSSND_MasterEnvSet = $05f7 57 | FDSSND_VolumeEnvTimer = $05f8 58 | FDSSND_VolumeEnvOffset = $05f9 59 | FDSSND_SweepModTimer = $05fa 60 | FDSSND_SweepModOffset = $05fb 61 | 62 | PauseSoundQueue = $fa 63 | Square1SoundQueue = $ff 64 | Square2SoundQueue = $fe 65 | NoiseSoundQueue = $fd 66 | AreaMusicQueue = $fb 67 | EventMusicQueue = $fc 68 | 69 | Square1SoundBuffer = $f1 70 | Square2SoundBuffer = $f2 71 | NoiseSoundBuffer = $f3 72 | AreaMusicBuffer = $f4 73 | EventMusicBuffer = $07b1 74 | PauseSoundBuffer = $07b2 75 | AltMusicBuffer = $0608 76 | 77 | PatternNumber = $061d 78 | 79 | MusicData = $66 80 | MusicDataLow = $66 81 | MusicDataHigh = $67 82 | WaveformData = $68 83 | FDSSND_VolumeEnvData = $6a 84 | FDSSND_SweepModData = $6c 85 | MusicOffset_Square2 = $060a 86 | MusicOffset_Square1 = $060b 87 | MusicOffset_Triangle = $060c 88 | MusicOffset_Noise = $060d 89 | MusicOffset_FDSSND = $061f 90 | 91 | NoteLenLookupTblOfs = $f0 92 | DAC_Counter = $07c0 93 | NoiseDataLoopbackOfs = $061b 94 | NoteLengthTblAdder = $0609 95 | AreaMusicBuffer_Alt = $07c5 96 | PauseModeFlag = $07c6 97 | GroundMusicHeaderOfs = $07c7 98 | AltRegContentFlag = $07ca 99 | 100 | WaveformID = $060e 101 | 102 | MsgCounter = $0719 103 | MsgFractional = $0749 104 | 105 | EndControlCntr = $0761 106 | BlueColorOfs = $0762 107 | BlueDelayFlag = $0763 108 | MushroomRetDelay = $0764 109 | MRetainerOffset = $0762 110 | CurrentFlashMRet = $0763 111 | 112 | MHD = MusicHeaderOffsetData 113 | 114 | GameOverMode = 3 115 | 116 | SND_REGISTER = $4000 117 | SND_SQUARE1_REG = $4000 118 | SND_SQUARE2_REG = $4004 119 | SND_TRIANGLE_REG = $4008 120 | SND_NOISE_REG = $400c 121 | SND_DELTA_REG = $4010 122 | SND_MASTERCTRL_REG = $4015 123 | 124 | SPR_DMA = $4014 125 | JOYPAD_PORT = $4016 126 | JOYPAD_PORT1 = $4016 127 | JOYPAD_PORT2 = $4017 128 | 129 | FDS_IRQTIMER_LOW = $4020 130 | FDS_IRQTIMER_HIGH = $4021 131 | FDS_IRQTIMER_CTRL = $4022 132 | FDS_CTRL_REG = $4025 133 | FDS_STATUS = $4030 134 | FDS_DRIVE_STATUS = $4032 135 | 136 | FDSSND_VOLUMECTRL = $4080 137 | FDSSND_FREQLOW = $4082 138 | FDSSND_FREQHIGH = $4083 139 | FDSSND_SWEEPCTRL = $4084 140 | FDSSND_SWEEPBIAS = $4085 141 | FDSSND_MODFREQLOW = $4086 142 | FDSSND_MODFREQHIGH = $4087 143 | FDSSND_MODTBLAPPEND = $4088 144 | FDSSND_WAVEENABLEWR = $4089 145 | FDSSND_WAVERAM = $4040 146 | 147 | Sfx_ExtraLife = %01000000 148 | Sfx_CoinGrab = %00000001 149 | VictoryMusic = %00000100 150 | 151 | ; imports from other files 152 | .import MoveSpritesOffscreen 153 | .import FreqRegLookupTbl 154 | .import NextWorld 155 | .import WriteTopStatusLine 156 | .import WriteBottomStatusLine 157 | .import GetAreaPalette 158 | .import GetBackgroundColor 159 | .import EndAreaPoints 160 | .import JumpEngine 161 | .import Square2SfxHandler 162 | .import PrintStatusBarNumbers 163 | .import DiskIDString 164 | .import EnemyGfxHandler 165 | .import SoundEngine 166 | .import DiskScreen 167 | .import WaitForEject 168 | .import WaitForReinsert 169 | .import ResetDiskVars 170 | .import DiskErrorHandler 171 | .import AttractModeSubs 172 | .import SoundEngineJSRCode 173 | .import InitScreenPalette 174 | 175 | ; exports to other files 176 | .export EraseLivesLines 177 | .export RunMushroomRetainers 178 | .export EndingDiskRoutines 179 | .export AwardExtraLives 180 | .export PrintVictoryMsgsForWorld8 181 | .export FadeToBlue 182 | .export ScreenSubsForFinalRoom 183 | .export WriteNameToVictoryMsg 184 | .export UnusedAttribData 185 | .export FinalRoomPalette 186 | .export ThankYouMessageFinal 187 | .export PeaceIsPavedMsg 188 | .export WithKingdomSavedMsg 189 | .export HurrahMsg 190 | .export OurOnlyHeroMsg 191 | .export ThisEndsYourTripMsg 192 | .export OfALongFriendshipMsg 193 | .export PointsAddedMsg 194 | .export ForEachPlayerLeftMsg 195 | .export PrincessPeachsRoom 196 | .export FantasyWorld9Msg 197 | .export SuperPlayerMsg 198 | .export E_CastleArea9 199 | .export E_CastleArea10 200 | .export E_GroundArea25 201 | .export E_GroundArea26 202 | .export E_GroundArea27 203 | .export E_WaterArea6 204 | .export E_WaterArea7 205 | .export E_WaterArea8 206 | .export L_CastleArea9 207 | .export L_CastleArea10 208 | .export L_GroundArea25 209 | .export L_GroundArea26 210 | .export L_GroundArea27 211 | .export L_WaterArea6 212 | .export L_WaterArea7 213 | .export L_WaterArea8 214 | 215 | ;------------------------------------------------------------------------------------- 216 | 217 | PrintWorld9Msgs: 218 | lda OperMode ;if in game over mode, branch 219 | cmp #GameOverMode ;note this routine only runs after world 8 and replaces 220 | beq W9GameOver ;the routine DemoReset in memory 221 | lda FantasyW9MsgFlag ;if world 9 flag was set earlier, skip this part 222 | bne NoFW9 223 | lda #$1d ;otherwise set VRAM pointer to print 224 | sta VRAM_Buffer_AddrCtrl ;the hidden fantasy "9 world" message 225 | lda #$10 226 | sta ScreenTimer 227 | inc FantasyW9MsgFlag ;and set flag to keep it from getting printed again 228 | NoFW9: lda #$00 229 | sta DisableScreenFlag ;turn screen back on, move on to next screen sub 230 | jmp NextScreenTask 231 | 232 | W9GameOver: 233 | lda #$20 234 | sta ScreenTimer 235 | lda #$1e ;set VRAM pointer to print world 9 goodbye message 236 | sta VRAM_Buffer_AddrCtrl 237 | jmp NextOperTask ;move on to next task 238 | 239 | ScreenSubsForFinalRoom: 240 | lda ScreenRoutineTask 241 | jsr JumpEngine 242 | 243 | .word InitScreenPalette 244 | .word WriteTopStatusLine 245 | .word WriteBottomStatusLine 246 | .word DrawFinalRoom 247 | .word GetAreaPalette 248 | .word GetBackgroundColor 249 | .word RevealPrincess 250 | 251 | DrawFinalRoom: 252 | lda #$1b ;draw the princess's room 253 | sta VRAM_Buffer_AddrCtrl 254 | sta IRQUpdateFlag 255 | NextScreenTask: 256 | inc ScreenRoutineTask 257 | rts 258 | 259 | RevealPrincess: 260 | lda #$a2 ;print game timer 261 | jsr PrintStatusBarNumbers 262 | lda #>AlternateSoundEngine 263 | sta SoundEngineJSRCode+2 ;change sound engine address 264 | lda #SoundEngine ;reset sound engine vector 430 | sta SoundEngineJSRCode+2 ;to run the original one 431 | lda #VictoryM_P1AData, $3e, $14, $b0, $24, $01 1248 | VictoryPart1BHdr: .byte $00, VictoryM_P1BData, $50, $21, $61, $31, $02 1249 | VictoryPart2AHdr: .byte $00, VictoryM_P2AData, $43, $1c, $b5, $29, $01 1250 | VictoryPart2CHdr: .byte $00, VictoryM_P2CData, $50, $20, $61, $31, $02 1251 | VictoryPart2DHdr: .byte $08, VictoryM_P2DData, $09, $04, $1e, $06, $01 1252 | VictoryPart2BHdr: .byte $08, VictoryM_P2BData, $3a, $10, $9e, $28, $01 1253 | 1254 | ;residual data, probably from an old header 1255 | .byte $00, $4b, $d0 1256 | 1257 | ;music data format here is the same as in sm2main file 1258 | ;with a few exceptions: the value $00 does nothing special 1259 | ;for square 1, and noise data format plays only one kind of 1260 | ;beat for d5-d1 = nonzero, or rest for d5-d1 = 0 1261 | 1262 | VictoryM_P1AData: 1263 | ;square 2 1264 | .byte $84, $12, $86, $0c, $84, $62, $10, $86 1265 | .byte $12, $84, $1c, $22, $1e, $22, $26, $18 1266 | .byte $1e, $04, $1c, $00 1267 | ;square 1 1268 | .byte $e2, $e0, $e2, $9d, $1f, $21, $a3, $2d 1269 | .byte $74, $f4, $31, $35, $37, $2b, $b1, $2d 1270 | ;FDS sound 1271 | .byte $83, $16, $14, $16, $86, $10, $84, $12 1272 | .byte $14, $86, $16, $84, $20, $81, $28, $83 1273 | .byte $28, $84, $24, $28, $2a, $1e, $86, $24 1274 | .byte $84, $20 1275 | ;triangle 1276 | .byte $84, $12, $14, $04, $18, $1a, $1c, $14 1277 | .byte $26, $22, $1e, $1c, $18, $1e, $22, $0c 1278 | .byte $14 1279 | 1280 | VictoryM_P1BData: 1281 | ;square 2 1282 | .byte $81, $22, $83, $22, $86, $24, $85, $18 1283 | .byte $82, $1e, $80, $1e, $83, $1c, $83, $18 1284 | .byte $84, $1c, $81, $26, $83, $26, $86, $26 1285 | .byte $85, $1e, $82, $24, $86, $22, $84, $1e 1286 | .byte $00 1287 | ;square 1 1288 | .byte $74, $f4, $b5, $6b, $b0, $30, $ec, $ea 1289 | .byte $2d, $76, $f6, $b7, $6d, $b0, $b5, $31 1290 | ;FDS sound 1291 | .byte $81, $10, $83, $10, $86, $10, $85, $08 1292 | .byte $82, $0c, $80, $0c, $83, $0a, $08, $84 1293 | .byte $0a, $81, $12, $83, $12, $86, $12, $85 1294 | .byte $0a, $82, $0c, $86, $10, $84, $0c 1295 | ;triangle 1296 | .byte $84, $12, $1c, $20, $24, $2a, $26, $24 1297 | .byte $26, $22, $1e, $22, $24, $1e, $22, $0c 1298 | .byte $1e 1299 | ;noise (also used by part 1A) 1300 | .byte $11, $11, $d0, $d0, $d0, $11, $00 1301 | 1302 | VictoryM_P2AData: 1303 | ;square 2 1304 | .byte $83, $2c, $2a, $2c, $86, $26, $84, $28 1305 | .byte $2a, $86, $2c, $84, $36, $81, $40, $83 1306 | .byte $40, $84, $3a, $40, $3e, $34, $00 1307 | 1308 | VictoryM_P2BData: 1309 | ;square 2 1310 | .byte $86, $3a, $84, $36, $00 1311 | ;square 1 of part 2A 1312 | .byte $1d, $95, $19, $1b, $9d, $27, $2d, $29 1313 | .byte $2d, $31, $23 1314 | ;square 1 of part 2B 1315 | .byte $a9, $27 1316 | ;FDS sound of part 2A 1317 | .byte $83, $20, $1e, $20, $86, $1a, $84, $1c 1318 | .byte $1e, $86, $20, $84, $2a, $81, $32, $83 1319 | .byte $32, $84, $2e, $32, $34, $28 1320 | ;FDS sound of part 2B 1321 | .byte $86, $2e, $84, $2a 1322 | ;triangle of part 2A 1323 | .byte $84, $1c, $1e, $04, $22, $24, $26, $1e 1324 | .byte $30, $2c, $28, $26, $22, $28 1325 | ;triangle of part 2B 1326 | .byte $2c, $14, $1e 1327 | 1328 | VictoryM_P2CData: 1329 | ;square 2 1330 | .byte $81, $40, $83, $40, $86, $40, $85, $34 1331 | .byte $82, $3a, $80, $3a, $83, $36, $34, $84 1332 | .byte $36, $81, $3e, $83, $3e, $86, $3e, $85 1333 | .byte $36, $82, $3a, $86, $40, $84, $3a, $00 1334 | ;square 1 1335 | .byte $6c, $ec, $af, $63, $a8, $29, $c4, $e6 1336 | .byte $e2, $27, $70, $f0, $b1, $69, $ae, $ad 1337 | .byte $29 1338 | ;FDS sound 1339 | .byte $81, $1a, $83, $1a, $86, $1a, $85, $10 1340 | .byte $82, $16, $80, $16, $83, $12, $10, $84 1341 | .byte $12, $81, $1c, $83, $1c, $86, $1c, $85 1342 | .byte $12, $82, $16, $86, $1a, $84, $16 1343 | ;triangle 1344 | .byte $84, $1c, $26, $2a, $2e, $34, $30, $2e 1345 | .byte $30, $2c, $28, $2c, $2e, $28, $2c, $14 1346 | .byte $28 1347 | ;noise of part 2A, 2B and 2C 1348 | .byte $11, $11, $d0, $d0, $d0, $11, $00 1349 | 1350 | VictoryM_P2DData: 1351 | ;square 2 1352 | .byte $87, $3a, $36, $00 1353 | ;square 1 1354 | .byte $e9, $e7 1355 | ;FDS sound 1356 | .byte $87, $2e, $2a 1357 | ;triangle 1358 | .byte $83, $16, $1c, $22, $28, $2e, $34, $84 1359 | .byte $3a, $83, $34, $22, $34, $84, $36, $83 1360 | .byte $1e, $1e, $1e, $86, $1e 1361 | ;noise of part 2D 1362 | .byte $11, $11, $d0, $d0, $d0, $11, $00 1363 | 1364 | WaveformData2: 1365 | .byte $10, $2c, $2e, $27, $29, $2b, $2a, $28 1366 | .byte $25, $29, $2f, $2d, $2c, $2a, $22, $24 1367 | .byte $34, $3f, $31, $2d, $3a, $3b, $27, $12 1368 | .byte $0a, $1f, $2c, $27, $23, $28, $22, $1e 1369 | 1370 | VolEnvData2: 1371 | .byte $a0, $04, $18, $60 1372 | VolEnvData1: 1373 | .byte $94, $02, $44, $30, $0a, $50, $a0, $02 1374 | .byte $36, $35, $80, $34 1375 | 1376 | FDSFreqLookupTbl: 1377 | .byte $01, $44, $01, $58, $01, $99, $02, $22 1378 | .byte $02, $42, $02, $65, $02, $b0, $02, $d9 1379 | .byte $03, $04, $03, $32, $03, $63, $03, $96 1380 | .byte $03, $cd, $04, $07, $04, $44, $04, $85 1381 | .byte $04, $ca, $05, $13, $05, $60, $05, $b2 1382 | .byte $06, $08, $06, $64, $06, $c6, $07, $2d 1383 | .byte $07, $9a, $08, $0e, $08, $88, $09, $95 1384 | .byte $0a, $26, $00, $00 1385 | 1386 | VictoryMusEnvData: 1387 | .byte $97, $98, $9a, $9b, $9b, $9a, $9a, $99 1388 | .byte $99, $98, $98, $97, $97, $96, $96, $95 1389 | 1390 | ;header format here is as follows: 1391 | ;2 bytes - waveform data address 1392 | ;1 byte - master envelope timing (used with both volume envelope and sweep/modulation) 1393 | ;2 bytes - volume envelope data address 1394 | ;2 bytes - sweep envelope/mod frequency data address 1395 | ;1 byte - modulation table data offset * 2 1396 | 1397 | WaveformHeaderOffsets: 1398 | .byte Wave1Hdr-WaveformHeaderOffsets, Wave2Hdr-WaveformHeaderOffsets 1399 | 1400 | WaveformHeaderData: 1401 | Wave1Hdr: .byte WaveformData1, $44, VolEnvData1, SweepModData1, (ModTable2-ModTableData) * 2 1403 | Wave2Hdr: .byte WaveformData2, $60, VolEnvData2, SweepModData2, (ModTable1-ModTableData) * 2 1405 | .byte $00 1406 | 1407 | WaveformData1: 1408 | .byte $01, $02, $03, $04, $06, $07, $09, $0b 1409 | .byte $0e, $10, $13, $18, $20, $2b, $34, $3c 1410 | .byte $3f, $3f, $3e, $3d, $3a, $36, $32, $2f 1411 | .byte $2c, $29, $26, $24, $21, $1e, $18, $19 1412 | 1413 | SweepModData1: 1414 | .byte $80, $1b, $81, $0a, $00, $04, $82, $10, $00, $60 1415 | SweepModData2: 1416 | .byte $80, $02, $80, $00, $00, $60 1417 | 1418 | MusicLengthLookupTbl: 1419 | .byte $24, $12, $0d, $09, $1b, $28, $36, $12 1420 | .byte $24, $12, $0d, $09, $1b, $28, $36, $6c -------------------------------------------------------------------------------- /sm2data4.asm: -------------------------------------------------------------------------------- 1 | ;SMB2J DISASSEMBLY (SM2DATA4 portion) 2 | 3 | ;------------------------------------------------------------------------------------- 4 | ;DEFINES 5 | 6 | AreaData = $e7 7 | AreaDataLow = $e7 8 | AreaDataHigh = $e8 9 | EnemyData = $e9 10 | EnemyDataLow = $e9 11 | EnemyDataHigh = $ea 12 | 13 | FrameCounter = $09 14 | Enemy_State = $1e 15 | Enemy_Y_Position = $cf 16 | PiranhaPlantUpYPos = $0417 17 | PiranhaPlantDownYPos = $0434 18 | PiranhaPlant_Y_Speed = $58 19 | PiranhaPlant_MoveFlag = $a0 20 | 21 | Player_X_Scroll = $06ff 22 | 23 | Player_PageLoc = $6d 24 | Player_X_Position = $86 25 | 26 | AreaObjectLength = $0730 27 | WindFlag = $07f9 28 | 29 | TimerControl = $0747 30 | EnemyFrameTimer = $078a 31 | 32 | Sprite_Y_Position = $0200 33 | Sprite_Tilenumber = $0201 34 | Sprite_Attributes = $0202 35 | Sprite_X_Position = $0203 36 | 37 | Alt_SprDataOffset = $06ec 38 | 39 | NoiseSoundQueue = $fd 40 | 41 | TerrainControl = $0727 42 | AreaStyle = $0733 43 | ForegroundScenery = $0741 44 | BackgroundScenery = $0742 45 | CloudTypeOverride = $0743 46 | BackgroundColorCtrl = $0744 47 | AreaType = $074e 48 | AreaAddrsLOffset = $074f 49 | AreaPointer = $0750 50 | 51 | PlayerEntranceCtrl = $0710 52 | GameTimerSetting = $0715 53 | AltEntranceControl = $0752 54 | EntrancePage = $0751 55 | 56 | WorldNumber = $075f 57 | AreaNumber = $0760 ;internal number used to find areas 58 | 59 | ; imports from other files 60 | .import HalfwayPageNybbles 61 | .import GetPipeHeight 62 | .import FindEmptyEnemySlot 63 | .import SetupPiranhaPlant 64 | .import VerticalPipeData 65 | .import RenderUnderPart 66 | .import MetatileBuffer 67 | .import GetAreaType 68 | .import E_GroundArea21 69 | .import E_GroundArea28 70 | .import L_GroundArea10 71 | .import L_GroundArea28 72 | 73 | ; exports to other files 74 | .export UpsideDownPipe_High 75 | .export UpsideDownPipe_Low 76 | .export WindOn 77 | .export WindOff 78 | .export SimulateWind 79 | .export BlowPlayerAround 80 | .export MoveUpsideDownPiranhaP 81 | .export ChangeHalfwayPages 82 | 83 | ;------------------------------------------------------------------------------------------------- 84 | 85 | FindAreaPointer: 86 | ldy WorldNumber ;load offset from world variable 87 | lda WorldAddrOffsets,y 88 | clc ;add area number used to find data 89 | adc AreaNumber 90 | tay 91 | lda AreaAddrOffsets,y ;from there we have our area pointer 92 | rts 93 | 94 | GetAreaDataAddrs: 95 | lda AreaPointer ;use 2 MSB for Y 96 | jsr GetAreaType 97 | tay 98 | lda AreaPointer ;mask out all but 5 LSB 99 | and #%00011111 100 | sta AreaAddrsLOffset ;save as low offset 101 | lda EnemyAddrHOffsets,y ;load base value with 2 altered MSB, 102 | clc ;then add base value to 5 LSB, result 103 | adc AreaAddrsLOffset ;becomes offset for level data 104 | asl 105 | tay 106 | lda EnemyDataAddrs+1,y ;use offset to load pointer 107 | sta EnemyDataHigh 108 | lda EnemyDataAddrs,y 109 | sta EnemyDataLow 110 | ldy AreaType ;use area type as offset 111 | lda AreaDataHOffsets,y ;do the same thing but with different base value 112 | clc 113 | adc AreaAddrsLOffset 114 | asl 115 | tay 116 | lda AreaDataAddrs+1,y ;use this offset to load another pointer 117 | sta AreaDataHigh 118 | lda AreaDataAddrs,y 119 | sta AreaDataLow 120 | ldy #$00 ;load first byte of header 121 | lda (AreaData),y 122 | pha ;save it to the stack for now 123 | and #%00000111 ;save 3 LSB for foreground scenery or bg color control 124 | cmp #$04 125 | bcc StoreFore 126 | sta BackgroundColorCtrl ;if 4 or greater, save value here as bg color control 127 | lda #$00 128 | StoreFore: sta ForegroundScenery ;if less, save value here as foreground scenery 129 | pla ;pull byte from stack and push it back 130 | pha 131 | and #%00111000 ;save player entrance control bits 132 | lsr ;shift bits over to LSBs 133 | lsr 134 | lsr 135 | sta PlayerEntranceCtrl ;save value here as player entrance control 136 | pla ;pull byte again but do not push it back 137 | and #%11000000 ;save 2 MSB for game timer setting 138 | clc 139 | rol ;rotate bits over to LSBs 140 | rol 141 | rol 142 | sta GameTimerSetting ;save value here as game timer setting 143 | iny 144 | lda (AreaData),y ;load second byte of header 145 | pha ;save to stack 146 | and #%00001111 ;mask out all but lower nybble 147 | sta TerrainControl 148 | pla ;pull and push byte to copy it to A 149 | pha 150 | and #%00110000 ;save 2 MSB for background scenery type 151 | lsr 152 | lsr ;shift bits to LSBs 153 | lsr 154 | lsr 155 | sta BackgroundScenery ;save as background scenery 156 | pla 157 | and #%11000000 158 | clc 159 | rol ;rotate bits over to LSBs 160 | rol 161 | rol 162 | cmp #%00000011 ;if set to 3, store here 163 | bne StoreStyle ;and nullify other value 164 | sta CloudTypeOverride ;otherwise store value in other place 165 | lda #$00 166 | StoreStyle: sta AreaStyle 167 | lda AreaDataLow ;increment area data address by 2 bytes 168 | clc 169 | adc #$02 170 | sta AreaDataLow 171 | lda AreaDataHigh 172 | adc #$00 173 | sta AreaDataHigh 174 | rts 175 | 176 | WorldAddrOffsets: 177 | .byte WorldAAreas-AreaAddrOffsets, WorldBAreas-AreaAddrOffsets 178 | .byte WorldCAreas-AreaAddrOffsets, WorldDAreas-AreaAddrOffsets 179 | .byte 0,0,0,0,0 180 | 181 | AreaAddrOffsets: 182 | WorldAAreas: .byte $20, $2c, $40, $21, $60 183 | WorldBAreas: .byte $22, $2c, $00, $23, $61 184 | WorldCAreas: .byte $24, $25, $26, $62 185 | WorldDAreas: .byte $27, $28, $29, $63 186 | 187 | EnemyAddrHOffsets: 188 | .byte $14, $04, $12, $00 189 | 190 | EnemyDataAddrs: 191 | .word E_CastleArea11, E_CastleArea12, E_CastleArea13, E_CastleArea14, E_GroundArea30, E_GroundArea31 192 | .word E_GroundArea32, E_GroundArea33, E_GroundArea34, E_GroundArea35, E_GroundArea36, E_GroundArea37 193 | .word E_GroundArea38, E_GroundArea39, E_GroundArea40, E_GroundArea41, E_GroundArea21, E_GroundArea28 194 | .word E_UndergroundArea6, E_UndergroundArea7, E_WaterArea9 195 | 196 | AreaDataHOffsets: 197 | .byte $14, $04, $12, $00 198 | 199 | AreaDataAddrs: 200 | .word L_CastleArea11, L_CastleArea12, L_CastleArea13, L_CastleArea14, L_GroundArea30, L_GroundArea31 201 | .word L_GroundArea32, L_GroundArea33, L_GroundArea34, L_GroundArea35, L_GroundArea36, L_GroundArea37 202 | .word L_GroundArea38, L_GroundArea39, L_GroundArea40, L_GroundArea41, L_GroundArea10, L_GroundArea28 203 | .word L_UndergroundArea6, L_UndergroundArea7, L_WaterArea9 204 | 205 | AtoDHalfwayPages: 206 | .byte $76, $50 207 | .byte $65, $50 208 | .byte $75, $b0 209 | .byte $00, $00 210 | 211 | ChangeHalfwayPages: 212 | ldy #$07 213 | CHalfL: lda AtoDHalfwayPages,y ;load new halfway nybbles over the old ones 214 | sta HalfwayPageNybbles,y 215 | dey 216 | bpl CHalfL 217 | rts 218 | 219 | ; unused space 220 | .byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff 221 | .byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff 222 | .byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff 223 | .byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff 224 | .byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff 225 | .byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff 226 | .byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff 227 | .byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff 228 | .byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff 229 | 230 | ;------------------------------------------------------------------------------------------------- 231 | ;$06 - used to store vertical length of pipe 232 | ;$07 - starts with adder from area parser, used to store row offset 233 | 234 | UpsideDownPipe_High: 235 | lda #$01 ;start at second row 236 | pha 237 | bne UDP 238 | UpsideDownPipe_Low: 239 | lda #$04 ;start at fifth row 240 | pha 241 | UDP: jsr GetPipeHeight ;get pipe height from object byte 242 | pla 243 | sta $07 ;save buffer offset temporarily 244 | tya 245 | pha ;save pipe height temporarily 246 | ldy AreaObjectLength,x ;if on second column of pipe, skip this 247 | beq NoUDP 248 | jsr FindEmptyEnemySlot ;otherwise try to insert upside-down 249 | bcs NoUDP ;piranha plant, if no empty slots, skip this 250 | lda #$04 251 | jsr SetupPiranhaPlant ;set up upside-down piranha plant 252 | lda $06 253 | asl 254 | asl ;multiply height of pipe by 16 255 | asl ;and add enemy Y position previously set up 256 | asl ;then subtract 10 pixels, save as new Y position 257 | clc 258 | adc Enemy_Y_Position,x 259 | sec 260 | sbc #$0a 261 | sta Enemy_Y_Position,x 262 | sta PiranhaPlantDownYPos,x ;set as "down" position, which in this case is up 263 | clc ;add 24 pixels, save as "up" position 264 | adc #$18 ;note up and down here are reversed 265 | sta PiranhaPlantUpYPos,x 266 | inc PiranhaPlant_MoveFlag,x ;set movement flag 267 | NoUDP: pla 268 | tay ;return tile offset 269 | pha 270 | ldx $07 271 | lda VerticalPipeData+2,y 272 | ldy $06 ;render the pipe shaft 273 | dey 274 | jsr RenderUnderPart 275 | pla 276 | tay 277 | lda VerticalPipeData,y ;and render the pipe end 278 | sta MetatileBuffer,x 279 | rts 280 | 281 | rts ;unused, nothing jumps here 282 | 283 | MoveUpsideDownPiranhaP: 284 | lda Enemy_State,x ;check enemy state 285 | bne ExMoveUDPP ;if set at all, branch to leave 286 | lda EnemyFrameTimer,x ;check enemy's timer here 287 | bne ExMoveUDPP ;branch to end if not yet expired 288 | lda PiranhaPlant_MoveFlag,x ;check movement flag 289 | bne SetupToMovePPlant ;if moving, skip to part ahead 290 | lda PiranhaPlant_Y_Speed,x ;get vertical speed 291 | eor #$ff 292 | clc ;change to two's compliment 293 | adc #$01 294 | sta PiranhaPlant_Y_Speed,x ;save as new vertical speed 295 | inc PiranhaPlant_MoveFlag,x ;increment to set movement flag 296 | 297 | SetupToMovePPlant: 298 | lda PiranhaPlantUpYPos,x ;get original vertical coordinate (lowest point) 299 | ldy PiranhaPlant_Y_Speed,x ;get vertical speed 300 | bpl RiseFallPiranhaPlant ;branch if moving downwards 301 | lda PiranhaPlantDownYPos,x ;otherwise get other vertical coordinate (highest point) 302 | 303 | RiseFallPiranhaPlant: 304 | sta $00 ;save vertical coordinate here 305 | lda TimerControl ;get master timer control 306 | bne ExMoveUDPP ;branch to leave if set (likely not necessary) 307 | lda Enemy_Y_Position,x ;get current vertical coordinate 308 | clc 309 | adc PiranhaPlant_Y_Speed,x ;add vertical speed to move up or down 310 | sta Enemy_Y_Position,x ;save as new vertical coordinate 311 | cmp $00 ;compare against low or high coordinate 312 | bne ExMoveUDPP ;branch to leave if not yet reached 313 | lda #$00 314 | sta PiranhaPlant_MoveFlag,x ;otherwise clear movement flag 315 | lda #$20 316 | sta EnemyFrameTimer,x ;set timer to delay piranha plant movement 317 | ExMoveUDPP: 318 | rts 319 | 320 | ;------------------------------------------------------------------------------------- 321 | 322 | BlowPlayerAround: 323 | lda WindFlag ;if wind is turned off, just exit 324 | beq ExBlow 325 | lda AreaType ;don't blow the player around unless 326 | cmp #$01 ;the area is ground type 327 | bne ExBlow 328 | ldy #$01 329 | lda FrameCounter 330 | asl 331 | bcs BThr 332 | ldy #$03 333 | BThr: sty $00 334 | lda FrameCounter 335 | and $00 336 | bne ExBlow 337 | lda Player_X_Position ;move player slightly to the right 338 | clc ;to simulate the wind moving the player 339 | adc #$01 340 | sta Player_X_Position 341 | lda Player_PageLoc 342 | adc #$00 343 | sta Player_PageLoc 344 | inc Player_X_Scroll ;add one to movement speed for scroll 345 | ExBlow: rts 346 | 347 | ;note the position data values are overwritten in RAM 348 | LeavesYPos: 349 | .byte $30, $70, $b8, $50, $98, $30 350 | .byte $70, $b8, $50, $98, $30, $70 351 | 352 | LeavesXPos: 353 | .byte $30, $30, $30, $60, $60, $a0 354 | .byte $a0, $a0, $d0, $d0, $d0, $60 355 | 356 | LeavesTile: 357 | .byte $7b, $7b, $7b, $7b, $7a, $7a 358 | .byte $7b, $7b, $7b, $7a, $7b, $7a 359 | 360 | SimulateWind: 361 | lda WindFlag ;if no wind, branch to leave 362 | beq ExSimW 363 | lda #$04 ;play wind sfx 364 | sta NoiseSoundQueue 365 | jsr ModifyLeavesPos ;modify X and Y position data of leaves 366 | ldx #$00 367 | ldy Alt_SprDataOffset-1 ;use first sprite data offset for first six leaves 368 | DrawLeaf: lda LeavesYPos,x 369 | sta Sprite_Y_Position,y ;set up sprite data in OAM memory 370 | lda LeavesTile,x 371 | sta Sprite_Tilenumber,y 372 | lda #$41 373 | sta Sprite_Attributes,y 374 | lda LeavesXPos,x 375 | sta Sprite_X_Position,y 376 | iny 377 | iny 378 | iny 379 | iny 380 | inx 381 | cpx #$06 ;if still on first six leaves, continue 382 | bne DLLoop ;using the first sprite data offset 383 | ldy Alt_SprDataOffset ;otherwise use the second one instead 384 | DLLoop: cpx #$0c ;continue until done putting twelve leaves on the screen 385 | bne DrawLeaf 386 | ExSimW: rts 387 | 388 | LeavesPosAdder: 389 | .byte $57, $57, $56, $56, $58, $58, $56, $56, $57, $58, $57, $58 390 | .byte $59, $59, $58, $58, $5a, $5a, $58, $58, $59, $5a, $59, $5a 391 | 392 | ModifyLeavesPos: 393 | ldx #$0b 394 | MLPLoop: lda LeavesXPos,x ;add each adder to each X position twice 395 | clc ;and to each Y position once 396 | adc LeavesPosAdder,x 397 | adc LeavesPosAdder,x 398 | sta LeavesXPos,x 399 | lda LeavesYPos,x 400 | clc 401 | adc LeavesPosAdder,x 402 | sta LeavesYPos,x 403 | dex 404 | bpl MLPLoop 405 | rts 406 | 407 | WindOn: 408 | lda #$01 ;branch to turn the wind on 409 | bne WOn 410 | WindOff: 411 | lda #$00 ;turn the wind off 412 | WOn: sta WindFlag 413 | rts 414 | 415 | ;some unused bytes 416 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 417 | 418 | ;-------------------------------------------------- 419 | 420 | ;level A-4 421 | E_CastleArea11: 422 | .byte $2a, $9e, $6b, $0c, $8d, $1c, $ea, $1f, $1b, $8c, $e6, $1c, $8c, $9c, $bb, $0c 423 | .byte $f3, $83, $9b, $8c, $db, $0c, $1b, $8c, $6b, $0c, $bb, $0c, $0f, $09, $40, $15 424 | .byte $78, $ad, $90, $b5, $ff 425 | 426 | ;level B-4 427 | E_CastleArea12: 428 | .byte $0f, $02, $38, $1d, $d9, $1b, $6e, $e1, $21, $3a, $a8, $18, $9d, $0f, $07, $18 429 | .byte $1d, $0f, $09, $18, $1d, $0f, $0b, $18, $1d, $7b, $15, $8e, $21, $2e, $b9, $9d 430 | .byte $0f, $0e, $78, $2d, $90, $b5, $ff 431 | 432 | ;level C-4 433 | E_CastleArea13: 434 | .byte $05, $9d, $65, $1d, $0d, $a8, $dd, $1d, $07, $ac, $54, $2c, $a2, $2c, $f4, $2c 435 | .byte $42, $ac, $26, $9d, $d4, $03, $24, $83, $64, $03, $2b, $82, $4b, $02, $7b, $02 436 | .byte $9b, $02, $5b, $82, $7b, $02, $0b, $82, $2b, $02, $c6, $1b, $28, $82, $48, $02 437 | .byte $a6, $1b, $7b, $95, $85, $0c, $9d, $9b, $0f, $0e, $78, $2d, $7a, $1d, $90, $b5 438 | .byte $ff 439 | 440 | ;level D-4 441 | E_CastleArea14: 442 | .byte $19, $9f, $99, $1b, $2c, $8c, $59, $1b, $c5, $0f, $0f, $04, $09, $29, $bd, $1d 443 | .byte $0f, $06, $6e, $2a, $61, $0f, $09, $48, $2d, $46, $87, $79, $07, $8e, $63, $60 444 | .byte $a5, $07, $b8, $85, $57, $a5, $8c, $8c, $76, $9d, $78, $2d, $90, $b5, $ff 445 | 446 | ;level A-1 447 | E_GroundArea30: 448 | .byte $07, $83, $37, $03, $6b, $0e, $e0, $3d, $20, $be, $6e, $2b, $00, $a7, $85, $d3 449 | .byte $05, $e7, $83, $24, $83, $27, $03, $49, $00, $59, $00, $10, $bb, $b0, $3b, $6e 450 | .byte $c1, $00, $17, $85, $53, $05, $36, $8e, $76, $0e, $b6, $0e, $e7, $83, $63, $83 451 | .byte $68, $03, $29, $83, $57, $03, $85, $03, $b5, $29, $ff 452 | 453 | ;level A-3 454 | E_GroundArea31: 455 | .byte $0f, $04, $66, $07, $0f, $06, $86, $10, $0f, $08, $55, $0f, $e5, $8f, $ff 456 | 457 | ;level B-1 458 | E_GroundArea32: 459 | .byte $70, $b7, $ca, $00, $66, $80, $0f, $04, $79, $0e, $ab, $0e, $ee, $2b, $20, $eb 460 | .byte $80, $40, $bb, $fb, $00, $40, $b7, $cb, $0e, $0f, $09, $4b, $00, $76, $00, $d8 461 | .byte $00, $6b, $8e, $73, $06, $83, $06, $c7, $0e, $36, $90, $c5, $06, $ff 462 | 463 | ;level B-3 464 | E_GroundArea33: 465 | .byte $84, $8f, $a7, $24, $d3, $0f, $ea, $24, $45, $a9, $d5, $28, $45, $a9, $84, $25 466 | .byte $b4, $8f, $09, $90, $b5, $a8, $5b, $97, $cd, $28, $b5, $a4, $09, $a4, $65, $28 467 | .byte $92, $90, $e3, $83, $ff 468 | 469 | ;level C-1 470 | E_GroundArea34: 471 | .byte $3a, $8e, $5b, $0e, $c3, $8e, $ca, $8e, $0b, $8e, $4a, $0e, $de, $c1, $44, $0f 472 | .byte $08, $49, $0e, $eb, $0e, $8a, $90, $ab, $85, $0f, $0c, $03, $0f, $2e, $2b, $40 473 | .byte $67, $86, $ff 474 | 475 | ;level C-2 476 | E_GroundArea35: 477 | .byte $15, $8f, $54, $07, $aa, $83, $f8, $07, $0f, $04, $14, $07, $96, $10, $0f, $07 478 | .byte $95, $0f, $9d, $a8, $0b, $97, $09, $a9, $55, $24, $a9, $24, $bb, $17, $ff 479 | 480 | ;level C-3 481 | E_GroundArea36: 482 | .byte $0f, $03, $a6, $11, $a3, $90, $a6, $91, $0f, $08, $a6, $11, $e3, $a9, $0f, $0d 483 | .byte $55, $24, $a9, $24, $0f, $11, $59, $1d, $a9, $1b, $23, $8f, $15, $9b, $ff 484 | 485 | ;level D-1 486 | E_GroundArea37: 487 | .byte $87, $85, $9b, $05, $18, $90, $a4, $8f, $6e, $c1, $60, $9b, $02, $d0, $3b, $80 488 | .byte $b8, $03, $8e, $1b, $02, $3b, $02, $0f, $08, $03, $10, $f7, $05, $6b, $85, $ff 489 | 490 | ;level D-2 491 | E_GroundArea38: 492 | .byte $db, $82, $f3, $03, $10, $b7, $80, $37, $1a, $8e, $4b, $0e, $7a, $0e, $ab, $0e 493 | .byte $0f, $05, $f9, $0e, $d0, $be, $2e, $c1, $62, $d4, $8f, $64, $8f, $7e, $2b, $60 494 | .byte $ff 495 | 496 | ;level D-3 497 | E_GroundArea39: 498 | .byte $0f, $03, $ab, $05, $1b, $85, $a3, $85, $d7, $05, $0f, $08, $33, $03, $0b, $85 499 | .byte $fb, $85, $8b, $85, $3a, $8e, $ff 500 | 501 | ;ground level area used with level D-4 502 | E_GroundArea40: 503 | .byte $0f, $02, $09, $05, $3e, $41, $64, $2b, $8e, $58, $0e, $ca, $07, $34, $87, $ff 504 | 505 | ;cloud level used with levels A-1, B-1 and D-2 506 | E_GroundArea41: 507 | .byte $0a, $aa, $1e, $20, $03, $1e, $22, $27, $2e, $24, $48, $2e, $28, $67, $ff 508 | 509 | ;level A-2 510 | E_UndergroundArea6: 511 | .byte $bb, $a9, $1b, $a9, $69, $29, $b8, $29, $59, $a9, $8d, $a8, $0f, $07, $15, $29 512 | .byte $55, $ac, $6b, $85, $0e, $ad, $01, $67, $34, $ff 513 | 514 | ;underground bonus rooms used with worlds A-D 515 | E_UndergroundArea7: 516 | .byte $1e, $a0, $09, $1e, $27, $67, $0f, $03, $1e, $28, $68, $0f, $05, $1e, $24, $48 517 | .byte $1e, $63, $68, $ff 518 | 519 | ;level B-2 520 | E_WaterArea9: 521 | .byte $ee, $ad, $21, $26, $87, $f3, $0e, $66, $87, $cb, $00, $65, $87, $0f, $06, $06 522 | .byte $0e, $97, $07, $cb, $00, $75, $87, $d3, $27, $d9, $27, $0f, $09, $77, $1f, $46 523 | .byte $87, $b1, $0f, $ff 524 | 525 | ;level A-4 526 | L_CastleArea11: 527 | .byte $9b, $87, $05, $32, $06, $33, $07, $34, $ee, $0a, $0e, $86, $28, $0e, $3e, $0a 528 | .byte $6e, $02, $8b, $0e, $97, $00, $9e, $0a, $ce, $06, $e8, $0e, $fe, $0a, $2e, $86 529 | .byte $6e, $0a, $8e, $08, $e4, $0e, $1e, $82, $8a, $0e, $8e, $0a, $fe, $02, $1a, $e0 530 | .byte $29, $61, $2e, $06, $3e, $09, $56, $60, $65, $61, $6e, $0c, $83, $60, $7e, $8a 531 | .byte $bb, $61, $f9, $63, $27, $e5, $88, $64, $eb, $61, $fe, $05, $68, $90, $0a, $90 532 | .byte $fe, $02, $3a, $90, $3e, $0a, $ae, $02, $da, $60, $e9, $61, $f8, $62, $fe, $0a 533 | .byte $0d, $c4, $a1, $62, $b1, $62, $cd, $43, $ce, $09, $de, $0b, $dd, $42, $fe, $02 534 | .byte $5d, $c7, $fd 535 | 536 | ;level B-4 537 | L_CastleArea12: 538 | .byte $9b, $07, $05, $32, $06, $33, $07, $33, $3e, $0a, $41, $3b, $42, $3b, $58, $64 539 | .byte $7a, $62, $c8, $31, $18, $e4, $39, $73, $5e, $09, $66, $3c, $0e, $82, $28, $07 540 | .byte $36, $0e, $3e, $0a, $ae, $02, $d7, $0e, $fe, $0c, $fe, $8a, $11, $e5, $21, $65 541 | .byte $31, $65, $4e, $0c, $fe, $02, $16, $8e, $2e, $0e, $fe, $02, $18, $fa, $3e, $0e 542 | .byte $fe, $02, $16, $8e, $2e, $0e, $fe, $02, $18, $fa, $3e, $0e, $fe, $02, $16, $8e 543 | .byte $2e, $0e, $fe, $02, $18, $fa, $3e, $0e, $fe, $02, $16, $8e, $2e, $0e, $fe, $02 544 | .byte $18, $fa, $5e, $0a, $6e, $02, $7e, $0a, $b7, $0e, $ee, $07, $fe, $8a, $0d, $c4 545 | .byte $cd, $43, $ce, $09, $dd, $42, $de, $0b, $fe, $02, $5d, $c7, $fd 546 | 547 | ;level C-4 548 | L_CastleArea13: 549 | .byte $98, $07, $05, $35, $06, $3d, $07, $3d, $be, $06, $de, $0c, $f3, $3d, $03, $8e 550 | .byte $63, $0e, $6e, $43, $ce, $0a, $e1, $67, $f1, $67, $01, $e7, $11, $67, $1e, $05 551 | .byte $28, $39, $6e, $40, $be, $01, $c7, $06, $db, $0e, $de, $00, $1f, $80, $6f, $00 552 | .byte $bf, $00, $0f, $80, $5f, $00, $7e, $05, $a8, $37, $fe, $02, $24, $8e, $34, $30 553 | .byte $3e, $0c, $4e, $43, $ae, $0a, $be, $0c, $ee, $0a, $fe, $0c, $2e, $8a, $3e, $0c 554 | .byte $7e, $02, $8e, $0e, $98, $36, $b9, $34, $08, $bf, $09, $3f, $0e, $82, $2e, $86 555 | .byte $4e, $0c, $9e, $09, $a6, $60, $c1, $62, $c4, $0e, $ee, $0c, $0e, $86, $5e, $0c 556 | .byte $7e, $09, $86, $60, $a1, $62, $a4, $0e, $c6, $60, $ce, $0c, $fe, $0a, $28, $b4 557 | .byte $a6, $31, $e8, $34, $8b, $b2, $9b, $0e, $fe, $07, $fe, $8a, $0d, $c4, $cd, $43 558 | .byte $ce, $09, $dd, $42, $de, $0b, $fe, $02, $5d, $c7, $fd 559 | 560 | ;level D-4 561 | L_CastleArea14: 562 | .byte $5b, $03, $05, $34, $06, $35, $39, $71, $6e, $02, $ae, $0a, $fe, $05, $17, $8e 563 | .byte $97, $0e, $9e, $02, $a6, $06, $fa, $30, $fe, $0a, $4e, $82, $57, $0e, $58, $62 564 | .byte $68, $62, $79, $61, $8a, $60, $8e, $0a, $f5, $31, $f9, $73, $39, $f3, $b5, $71 565 | .byte $b7, $31, $4d, $c8, $8a, $62, $9a, $62, $ae, $05, $bb, $0e, $cd, $4a, $fe, $82 566 | .byte $77, $fb, $de, $0f, $4e, $82, $6d, $47, $39, $f3, $0c, $ea, $08, $3f, $b3, $00 567 | .byte $cc, $63, $f9, $30, $69, $f9, $ea, $60, $f9, $61, $fe, $07, $de, $84, $e4, $62 568 | .byte $e9, $61, $f4, $62, $fa, $60, $04, $e2, $14, $62, $24, $62, $34, $62, $3e, $0a 569 | .byte $7e, $0c, $7e, $8a, $8e, $08, $94, $36, $fe, $0a, $0d, $c4, $61, $64, $71, $64 570 | .byte $81, $64, $cd, $43, $ce, $09, $dd, $42, $de, $0b, $fe, $02, $5d, $c7, $fd 571 | 572 | ;level A-1 573 | L_GroundArea30: 574 | .byte $52, $71, $0f, $20, $6e, $70, $e3, $64, $fc, $61, $fc, $71, $13, $86, $2c, $61 575 | .byte $2c, $71, $43, $64, $b2, $22, $b5, $62, $c7, $28, $22, $a2, $52, $09, $56, $61 576 | .byte $6c, $03, $db, $71, $fc, $03, $f3, $20, $03, $a4, $0f, $71, $40, $0c, $8c, $74 577 | .byte $9c, $66, $d7, $01, $ec, $71, $89, $e1, $b6, $61, $b9, $2a, $c7, $26, $f4, $23 578 | .byte $67, $e2, $e8, $f2, $78, $82, $88, $01, $98, $02, $a8, $02, $b8, $02, $03, $a6 579 | .byte $07, $26, $21, $79, $4b, $71, $cf, $33, $06, $e4, $16, $2a, $39, $71, $58, $45 580 | .byte $5a, $45, $c6, $07, $dc, $04, $3f, $e7, $3b, $71, $8c, $71, $ac, $01, $e7, $63 581 | .byte $39, $8f, $63, $20, $65, $0b, $68, $62, $8c, $00, $0c, $81, $29, $63, $3c, $01 582 | .byte $57, $65, $6c, $01, $85, $67, $9c, $04, $1d, $c1, $5f, $26, $3d, $c7, $fd 583 | 584 | ;level A-3 585 | L_GroundArea31: 586 | .byte $50, $50, $0b, $1f, $0f, $26, $19, $96, $84, $43, $b7, $1f, $5d, $cc, $6d, $48 587 | .byte $e0, $42, $e3, $12, $39, $9c, $56, $43, $47, $9b, $a4, $12, $c1, $06, $ed, $4d 588 | .byte $f4, $42, $1b, $98, $b7, $13, $02, $c2, $03, $12, $47, $1f, $ad, $48, $63, $9c 589 | .byte $82, $48, $76, $93, $08, $94, $8e, $11, $b0, $03, $c9, $0f, $1d, $c1, $2d, $4a 590 | .byte $4e, $42, $6f, $20, $0d, $0e, $0e, $40, $39, $71, $7f, $37, $f2, $68, $01, $e9 591 | .byte $11, $39, $68, $7a, $de, $1f, $6d, $c5, $fd 592 | 593 | ;level B-1 594 | L_GroundArea32: 595 | .byte $52, $21, $0f, $20, $6e, $60, $6c, $f6, $ca, $30, $dc, $02, $08, $f2, $37, $04 596 | .byte $56, $74, $7c, $00, $dc, $01, $e7, $25, $47, $8b, $49, $20, $6c, $02, $96, $74 597 | .byte $06, $82, $36, $02, $66, $00, $a7, $22, $dc, $02, $0a, $e0, $63, $22, $78, $72 598 | .byte $93, $09, $97, $03, $a3, $25, $a7, $03, $b6, $24, $03, $a2, $5c, $75, $65, $71 599 | .byte $7c, $00, $9c, $00, $63, $a2, $67, $20, $77, $03, $87, $20, $93, $0a, $97, $03 600 | .byte $a3, $22, $a7, $20, $b7, $03, $bc, $00, $c7, $20, $dc, $00, $fc, $01, $19, $8f 601 | .byte $1e, $20, $46, $22, $4c, $61, $63, $00, $8e, $21, $d7, $73, $46, $a6, $4c, $62 602 | .byte $68, $62, $73, $01, $8c, $62, $d8, $62, $43, $a9, $c7, $73, $ec, $06, $57, $f3 603 | .byte $7c, $00, $b5, $65, $c5, $65, $dc, $00, $e3, $67, $7d, $c1, $bf, $26, $ad, $c7 604 | .byte $fd 605 | 606 | ;level B-3 607 | L_GroundArea33: 608 | .byte $90, $10, $0b, $1b, $0f, $26, $07, $94, $bc, $14, $bf, $13, $c7, $40, $ff, $16 609 | .byte $d1, $80, $c3, $94, $cb, $17, $c2, $44, $29, $8f, $77, $31, $0b, $96, $76, $32 610 | .byte $c7, $75, $13, $f7, $1b, $61, $2b, $61, $4b, $12, $59, $0f, $3b, $b0, $3a, $40 611 | .byte $43, $12, $7a, $40, $7b, $30, $b5, $41, $b6, $20, $c6, $07, $f3, $13, $03, $92 612 | .byte $6b, $12, $79, $0f, $cc, $15, $cf, $11, $1f, $95, $c3, $14, $b3, $95, $a3, $95 613 | .byte $4d, $ca, $6b, $61, $7e, $11, $8d, $41, $be, $42, $df, $20, $bd, $c7, $fd 614 | 615 | ;level C-1 616 | L_GroundArea34: 617 | .byte $52, $31, $0f, $20, $6e, $74, $0d, $02, $03, $33, $1f, $72, $39, $71, $65, $04 618 | .byte $6c, $70, $77, $01, $84, $72, $8c, $72, $b3, $34, $ec, $01, $ef, $72, $0d, $04 619 | .byte $ac, $67, $cc, $01, $cf, $71, $e7, $22, $17, $88, $23, $00, $27, $23, $3c, $62 620 | .byte $65, $71, $67, $33, $8c, $61, $dc, $01, $08, $fa, $45, $75, $63, $0a, $73, $23 621 | .byte $7c, $02, $8f, $72, $73, $a9, $9f, $74, $bf, $74, $ef, $73, $39, $f1, $fc, $0a 622 | .byte $0d, $0b, $13, $25, $4c, $01, $4f, $72, $73, $0b, $77, $03, $dc, $08, $23, $a2 623 | .byte $53, $09, $56, $03, $63, $24, $8c, $02, $3f, $b3, $77, $63, $96, $74, $b3, $77 624 | .byte $5d, $c1, $8f, $26, $7d, $c7, $fd 625 | 626 | ;level C-2 627 | L_GroundArea35: 628 | .byte $54, $11, $0f, $26, $cf, $32, $f8, $62, $fe, $10, $3c, $b2, $bd, $48, $ea, $62 629 | .byte $fc, $4d, $fc, $4d, $17, $c9, $da, $62, $0b, $97, $b7, $12, $2c, $b1, $33, $43 630 | .byte $6c, $31, $ac, $41, $0b, $98, $ad, $4a, $db, $30, $27, $b0, $b7, $14, $c6, $42 631 | .byte $c7, $96, $d6, $44, $2b, $92, $39, $0f, $72, $41, $a7, $00, $1b, $95, $97, $13 632 | .byte $6c, $95, $6f, $11, $a2, $40, $bf, $15, $c2, $40, $0b, $9a, $62, $42, $63, $12 633 | .byte $ad, $4a, $0e, $91, $1d, $41, $4f, $26, $4d, $c7, $fd 634 | 635 | ;level C-3 636 | L_GroundArea36: 637 | .byte $57, $11, $0f, $26, $fe, $10, $4b, $92, $59, $0f, $ad, $4c, $d3, $93, $0b, $94 638 | .byte $29, $0f, $7b, $93, $99, $0f, $0d, $06, $27, $12, $35, $0f, $23, $b1, $57, $75 639 | .byte $a3, $31, $ab, $71, $f7, $75, $23, $b1, $87, $13, $95, $0f, $0d, $0a, $23, $35 640 | .byte $38, $13, $55, $00, $9b, $16, $0b, $96, $c7, $75, $dd, $4a, $3b, $92, $49, $0f 641 | .byte $ad, $4c, $29, $92, $52, $40, $6c, $15, $6f, $11, $72, $40, $bf, $15, $03, $93 642 | .byte $0a, $13, $12, $41, $8b, $12, $99, $0f, $0d, $10, $47, $16, $46, $45, $b3, $32 643 | .byte $13, $b1, $57, $0e, $a7, $0e, $d3, $31, $53, $b1, $a6, $31, $03, $b2, $13, $0e 644 | .byte $8d, $4d, $ae, $11, $bd, $41, $ee, $52, $0f, $a0, $dd, $47, $fd 645 | 646 | ;level D-1 647 | L_GroundArea37: 648 | .byte $52, $a1, $0f, $20, $6e, $65, $04, $a0, $14, $07, $24, $2d, $57, $25, $bc, $09 649 | .byte $4c, $80, $6f, $33, $a5, $11, $a7, $63, $b7, $63, $e7, $20, $35, $a0, $59, $11 650 | .byte $b4, $08, $c0, $04, $05, $82, $15, $02, $25, $02, $3a, $10, $4c, $01, $6c, $79 651 | .byte $95, $79, $73, $a7, $8f, $74, $f3, $0a, $03, $a0, $93, $08, $97, $73, $e3, $20 652 | .byte $39, $f1, $94, $07, $aa, $30, $bc, $5c, $c7, $30, $24, $f2, $27, $31, $8f, $33 653 | .byte $c6, $10, $c7, $63, $d7, $63, $e7, $63, $f7, $63, $03, $a5, $07, $25, $aa, $10 654 | .byte $03, $bf, $4f, $74, $6c, $00, $df, $74, $fc, $00, $5c, $81, $77, $73, $9d, $4c 655 | .byte $c5, $30, $e3, $30, $7d, $c1, $bd, $4d, $bf, $26, $ad, $c7, $fd 656 | 657 | ;level D-2 658 | L_GroundArea38: 659 | .byte $55, $a1, $0f, $26, $9c, $01, $4f, $b6, $b3, $34, $c9, $3f, $13, $ba, $a3, $b3 660 | .byte $bf, $74, $0c, $84, $83, $3f, $9f, $74, $ef, $72, $ec, $01, $2f, $f2, $2c, $01 661 | .byte $6f, $72, $6c, $01, $a8, $91, $aa, $10, $03, $b7, $61, $79, $6f, $75, $39, $f1 662 | .byte $db, $71, $03, $a2, $17, $22, $33, $09, $43, $20, $5b, $71, $48, $8f, $4a, $30 663 | .byte $5c, $5c, $a3, $30, $2d, $c1, $5f, $26, $3d, $c7, $fd 664 | 665 | ;level D-3 666 | L_GroundArea39: 667 | .byte $55, $a1, $0f, $26, $39, $91, $68, $12, $a7, $12, $aa, $10, $c7, $07, $e8, $12 668 | .byte $19, $91, $6c, $00, $78, $74, $0e, $c2, $76, $a8, $fe, $40, $29, $91, $73, $29 669 | .byte $77, $53, $8c, $77, $59, $91, $87, $13, $b6, $14, $ba, $10, $e8, $12, $38, $92 670 | .byte $19, $8f, $2c, $00, $33, $67, $4e, $42, $68, $0b, $2e, $c0, $38, $72, $a8, $11 671 | .byte $aa, $10, $49, $91, $6e, $42, $de, $40, $e7, $22, $0e, $c2, $4e, $c0, $6c, $00 672 | .byte $79, $11, $8c, $01, $a7, $13, $bc, $01, $d5, $15, $ec, $01, $03, $97, $0e, $00 673 | .byte $6e, $01, $9d, $41, $ce, $42, $ff, $20, $9d, $c7, $fd 674 | 675 | ;ground level area used with level D-4 676 | L_GroundArea40: 677 | .byte $10, $21, $39, $f1, $09, $f1, $ad, $4c, $7c, $83, $96, $30, $5b, $f1, $c8, $05 678 | .byte $1f, $b7, $93, $67, $a3, $67, $b3, $67, $bd, $4d, $cc, $08, $54, $fe, $6e, $2f 679 | .byte $6d, $c7, $fd 680 | 681 | ;cloud level used with levels A-1, B-1 and D-2 682 | L_GroundArea41: 683 | .byte $00, $c1, $4c, $00, $02, $c9, $ba, $49, $62, $c9, $a4, $20, $a5, $20, $1a, $c9 684 | .byte $a3, $2c, $b2, $49, $56, $c2, $6e, $00, $95, $41, $ad, $c7, $fd 685 | 686 | ;level A-2 687 | L_UndergroundArea6: 688 | .byte $48, $8f, $1e, $01, $4e, $02, $00, $8c, $09, $0f, $6e, $0a, $ee, $82, $2e, $80 689 | .byte $30, $20, $7e, $01, $87, $27, $07, $87, $17, $23, $3e, $00, $9e, $05, $5b, $f1 690 | .byte $8b, $71, $bb, $71, $eb, $71, $3e, $82, $7f, $38, $fe, $0a, $3e, $84, $47, $29 691 | .byte $48, $2e, $af, $71, $cb, $71, $e7, $0a, $f7, $23, $2b, $f1, $37, $51, $3e, $00 692 | .byte $6f, $00, $8e, $04, $df, $32, $9c, $82, $ca, $12, $dc, $00, $e8, $14, $fc, $00 693 | .byte $fe, $08, $4e, $8a, $88, $74, $9e, $01, $a8, $52, $bf, $47, $b8, $52, $c8, $52 694 | .byte $d8, $52, $e8, $52, $ee, $0f, $4d, $c7, $0d, $0d, $0e, $02, $68, $7a, $be, $01 695 | .byte $ee, $0f, $6d, $c5, $fd 696 | 697 | ;underground bonus rooms used with worlds A-D 698 | L_UndergroundArea7: 699 | .byte $08, $0f, $0e, $01, $2e, $05, $38, $20, $3e, $04, $48, $07, $55, $45, $57, $45 700 | .byte $58, $25, $b8, $08, $be, $05, $c8, $20, $ce, $01, $df, $4a, $6d, $c7, $0e, $81 701 | .byte $00, $5a, $2e, $02, $34, $42, $36, $42, $37, $22, $73, $54, $83, $0b, $87, $20 702 | .byte $93, $54, $90, $07, $b4, $41, $b6, $41, $b7, $21, $df, $4a, $6d, $c7, $0e, $81 703 | .byte $00, $5a, $14, $56, $24, $56, $2e, $0c, $33, $43, $6e, $09, $8e, $0b, $96, $48 704 | .byte $1e, $84, $3e, $05, $4a, $48, $47, $0b, $ce, $01, $df, $4a, $6d, $c7, $fd 705 | 706 | ;level B-2 707 | L_WaterArea9: 708 | .byte $41, $01, $da, $60, $e9, $61, $f8, $62, $fe, $0b, $fe, $81, $47, $d3, $8a, $60 709 | .byte $99, $61, $a8, $62, $b7, $63, $c6, $64, $d5, $65, $e4, $66, $ed, $49, $f3, $67 710 | .byte $1a, $cb, $e3, $67, $f3, $67, $fe, $02, $31, $d6, $3c, $02, $77, $53, $ac, $02 711 | .byte $b1, $56, $e7, $53, $fe, $01, $77, $b9, $a3, $43, $00, $bf, $29, $51, $39, $48 712 | .byte $61, $55, $d2, $44, $d6, $54, $0c, $82, $2e, $02, $31, $66, $44, $47, $47, $32 713 | .byte $4a, $47, $97, $32, $c1, $66, $ce, $01, $dc, $02, $fe, $0e, $0c, $8f, $08, $4f 714 | .byte $fe, $02, $75, $e0, $fe, $01, $0c, $87, $9a, $60, $a9, $61, $b8, $62, $c7, $63 715 | .byte $ce, $0f, $d5, $0d, $6d, $ca, $7d, $47, $fd 716 | 717 | ;a bunch of unused space tacked on for no apparent reason 718 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 719 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 720 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 721 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 722 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 723 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 724 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 725 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 726 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 727 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 728 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 729 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 730 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 731 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 732 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 733 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 734 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 735 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 736 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 737 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 738 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 739 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 740 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 741 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 742 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 743 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff 744 | .byte $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff --------------------------------------------------------------------------------