Advertisement
Guest User

Sprite Status Bar

a guest
Sep 25th, 2012
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 41.94 KB | None | 0 0
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ; Sprite Status Bar v1.1.0
  3. ; coded by edit1754
  4. ;
  5. ; IMPORTANT NOTE: If you would like to use the sprite goal-point text feature,
  6. ; You must have No More Sprite Tile Limits patched.
  7. ; You do /not/ need to have sprite header setting 10 enabled,
  8. ; but this patch uses the routine from that patch.
  9. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  10. header
  11. lorom
  12.  
  13. !FREESPACE = $258000 ; <-- CHANGE THIS UNLESS YOU WANT TO CORRUPT SOMETHING!
  14.  
  15. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  16. ; values you don't necessarily need to change, and most of the time shouldn't
  17. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  18.  
  19. !RAMBuffer = $7F1344 ; change this if you're already using it for another ASM hack
  20. ; it uses 0x480 bytes right after the dynamic sprite buffer
  21.  
  22. !RAMBuffer2 = $7F17C4 ; uses 0x600 bytes. Default is right after the other buffer
  23. ; used for goalpoint fix
  24.  
  25. !TransparentTile = $2F*$20
  26. !CopyToRAM = $30*$20
  27. !CopyToRAM2 = $54*$20
  28. !SBGFXSize = $0480
  29. !GPGFXSize = $0600
  30. !MarioName = $00*$20
  31. !LuigiName = $10*$20
  32.  
  33. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  34. ; levelnum.ips (disassembly) - credit goes to BMF for this
  35. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  36.  
  37. ORG $05D8B9
  38. JSR LevelNumCode
  39.  
  40. ORG $05DC46
  41. LevelNumCode: LDA.b $0E ; Load level number, 1st part of hijacked code
  42. STA.w $010B ; Store it in free RAM
  43. ASL A ; 2nd part of hijacked code
  44. RTS
  45.  
  46. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  47. ; hijacks
  48. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  49.  
  50. org $05BEA0
  51. JSL LoadLevel
  52.  
  53. org $9F68
  54. JSL GameMode13
  55. NOP
  56. NOP
  57.  
  58. org $A2A1
  59. JSL GameMode14
  60.  
  61. org $8292
  62. JML IRQHack
  63. NOP
  64.  
  65. org $8DB1
  66. JML SBUploadHack ; $8DAC would be more ideal, but Stripe Image Uploader already uses it
  67. NOP
  68.  
  69. org $0299DF
  70. JML CoinBlockFix
  71.  
  72. org $2AD34
  73. JML ScoreSprFix
  74.  
  75. org $07F1DB
  76. JML BonusStarFix ; part of goalpoint fix code
  77.  
  78. org $AF2D
  79. BRA +
  80. NOP #2
  81. + JSL GoalTextFix
  82.  
  83. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  84. ; Main Code
  85. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  86.  
  87. macro OAMTile(dest,x,y,tile,prop,size)
  88. LDA.b #<x>
  89. STA.w $0200+<dest>+<dest>+<dest>+<dest>
  90. LDA.b #<y>
  91. STA.w $0201+<dest>+<dest>+<dest>+<dest>
  92. LDA.b #<tile>
  93. CLC : ADC.w LevelGFXLoc,x
  94. STA.w $0202+<dest>+<dest>+<dest>+<dest>
  95. LDA.b #<prop>
  96. ORA.w LevelSBProp,x
  97. STA.w $0203+<dest>+<dest>+<dest>+<dest>
  98. LDA.b #<size>
  99. STA.w $0420+<dest>
  100. endmacro
  101.  
  102. macro OAMTileYoshiCoin(num,xpos,dest)
  103. LDA.w $0EFF+<num>
  104. CMP.b #$FC
  105. BEQ ?NoShowCoin
  106. LDA.b #<xpos>
  107. STA.w $0200+<dest>+<dest>+<dest>+<dest>
  108. LDA.b #$0F
  109. STA.w $0201+<dest>+<dest>+<dest>+<dest>
  110. LDA.b #$14
  111. CLC : ADC.w LevelGFXLoc,x
  112. STA.w $0202+<dest>+<dest>+<dest>+<dest>
  113. LDA.b #%00110000
  114. ORA.w LevelSBProp,x
  115. STA.w $0203+<dest>+<dest>+<dest>+<dest>
  116. LDA.b #$00
  117. STA.w $0420+<dest>
  118. ?NoShowCoin:
  119. endmacro
  120.  
  121. macro OAMTileGP(dest,x,y,tile,prop,size)
  122. LDA.b #<x>
  123. STA.w $0300+<dest>+<dest>+<dest>+<dest>,y
  124. LDA.b #<y>
  125. STA.w $0301+<dest>+<dest>+<dest>+<dest>,y
  126. LDA.b #<tile>+$24
  127. ;CLC : ADC.b #$24
  128. CLC : ADC.w LevelGFXLoc,x
  129. STA.w $0302+<dest>+<dest>+<dest>+<dest>,y
  130. LDA.b #<prop>
  131. ORA.w LevelSBProp,x
  132. STA.w $0303+<dest>+<dest>+<dest>+<dest>,y
  133. PHY
  134. TYA
  135. LSR #2
  136. TAY
  137. LDA.b #<size>
  138. STA.w $0460+<dest>,y
  139. PLY
  140. endmacro
  141.  
  142. macro OAMTileGPc(dest,x,y,tile,prop,size)
  143. LDA.b #<x>
  144. STA.w $0300+<dest>+<dest>+<dest>+<dest>,y
  145. LDA.b #<y>
  146. STA.w $0301+<dest>+<dest>+<dest>+<dest>,y
  147. LDA.b #<tile>
  148. CLC : ADC.w LevelGFXLoc,x
  149. STA.w $0302+<dest>+<dest>+<dest>+<dest>,y
  150. LDA.b #<prop>
  151. ORA.w LevelSBProp,x
  152. STA.w $0303+<dest>+<dest>+<dest>+<dest>,y
  153. PHY
  154. TYA
  155. LSR #2
  156. TAY
  157. LDA.b #<size>
  158. STA.w $0460+<dest>,y
  159. PLY
  160. endmacro
  161.  
  162. macro number(ptr,dest,offset)
  163. LDA.w #!RAMBuffer+<dest>
  164. STA.w $2181
  165. LDY.b #!RAMBuffer>>16
  166. STY.w $2183
  167. STZ.w $4300
  168. LDY.b #$80
  169. STY.w $4301
  170. SEP #%00100000
  171. LDA.w <ptr>
  172. CMP.b #$FC
  173. REP #%00100000
  174. BNE ?NoTrans
  175. LDA.w #!TransparentTile
  176. BRA ?Proceed
  177. ?NoTrans: AND.w #$00FF
  178. CLC : ADC.w #<offset>
  179. ASL #5
  180. ?Proceed: CLC : ADC.w #Graphics
  181. STA.w $4302
  182. LDY.b #Graphics>>16
  183. STY.w $4304
  184. LDA.w #$0020
  185. STA.w $4305
  186. LDY.b #%00000001
  187. STY.w $420B
  188. endmacro
  189.  
  190. macro bonusstar(ptr,dest)
  191. LDA.w #!RAMBuffer+<dest>
  192. STA.w $2181
  193. LDY.b #!RAMBuffer>>16
  194. STY.w $2183
  195. STZ.w $4300
  196. LDY.b #$80
  197. STY.w $4301
  198. SEP #%00100000
  199. LDA.w <ptr>
  200. CMP.b #$FC
  201. REP #%00100000
  202. BNE ?NoTrans
  203. LDA.w #!TransparentTile
  204. BRA ?Proceed
  205. ?NoTrans: AND.w #$00FF
  206. SEC : SBC.w #$0097
  207. ASL #5
  208. ?Proceed: CLC : ADC.w #Graphics
  209. STA.w $4302
  210. LDY.b #Graphics>>16
  211. STY.w $4304
  212. LDA.w #$0020
  213. STA.w $4305
  214. LDY.b #%00000001
  215. STY.w $420B
  216. endmacro
  217.  
  218. macro numberGP(ptr,dest,offset)
  219. LDA.w #!RAMBuffer2+<dest>
  220. STA.w $2181
  221. LDY.b #!RAMBuffer2>>16
  222. STY.w $2183
  223. STZ.w $4300
  224. LDY.b #$80
  225. STY.w $4301
  226. LDA.w <ptr>
  227. AND.w #$00FF
  228. CLC : ADC.w #<offset>
  229. ASL #5
  230. CLC : ADC.w #Graphics
  231. STA.w $4302
  232. LDY.b #Graphics>>16
  233. STY.w $4304
  234. LDA.w #$0020
  235. STA.w $4305
  236. LDY.b #%00000001
  237. STY.w $420B
  238. endmacro
  239.  
  240. macro numberGPb(ptr,dest,offset)
  241. LDA.w #!RAMBuffer2+<dest>
  242. STA.w $2181
  243. LDY.b #!RAMBuffer2>>16
  244. STY.w $2183
  245. STZ.w $4300
  246. LDY.b #$80
  247. STY.w $4301
  248. LDA.b <ptr>
  249. AND.w #$00FF
  250. CLC : ADC.w #<offset>
  251. ASL #5
  252. CLC : ADC.w #Graphics
  253. STA.w $4302
  254. LDY.b #Graphics>>16
  255. STY.w $4304
  256. LDA.w #$0020
  257. STA.w $4305
  258. LDY.b #%00000001
  259. STY.w $420B
  260. endmacro
  261.  
  262. macro bonusstarGP(ptrx,dest)
  263. LDA.w #!RAMBuffer2+<dest>
  264. STA.w $2181
  265. LDY.b #!RAMBuffer2>>16
  266. STY.w $2183
  267. STZ.w $4300
  268. LDY.b #$80
  269. STY.w $4301
  270. SEP #%00100000
  271. LDA.l <ptrx>,x
  272. CMP.b #$FC
  273. REP #%00100000
  274. BNE ?NoTrans
  275. LDA.w #!TransparentTile
  276. BRA ?Proceed
  277. ?NoTrans: AND.w #$00FF
  278. SEC : SBC.w #$0097
  279. ASL #5
  280. ?Proceed: CLC : ADC.w #Graphics
  281. STA.w $4302
  282. LDY.b #Graphics>>16
  283. STY.w $4304
  284. LDA.w #$0020
  285. STA.w $4305
  286. LDY.b #%00000001
  287. STY.w $420B
  288. endmacro
  289.  
  290. macro transGP(dest)
  291. LDA.w #!RAMBuffer2+<dest>
  292. STA.w $2181
  293. LDY.b #!RAMBuffer2>>16
  294. STY.w $2183
  295. STZ.w $4300
  296. LDY.b #$80
  297. STY.w $4301
  298. LDA.w #!TransparentTile+Graphics
  299. STA.w $4302
  300. LDY.b #Graphics>>16
  301. STY.w $4304
  302. LDA.w #$0020
  303. STA.w $4305
  304. LDY.b #%00000001
  305. STY.w $420B
  306. endmacro
  307.  
  308. org !FREESPACE
  309. reset bytes
  310.  
  311. db "STAR"
  312. dw CodeEnd-CodeStart
  313. dw CodeEnd-CodeStart^#$FFFF
  314.  
  315. CodeStart:
  316.  
  317. GameMode13: ORA.w $0DB0 ; \ hijacked
  318. STA.w $2106 ; / code
  319. LDA.w $0100 ; \ if game mode
  320. CMP.b #$13 ; | != 13, then
  321. BNE ReturnRTL ; / return
  322. PHB : PHK : PLB ; back up B, K -> B
  323. REP #%00100000 ; 16-bit A
  324. BRA InLevel ; Jump to in-level code (second part of on-load code)
  325.  
  326. GameMode14: JSL $0586F1 ; hijacked code
  327. LDA.w $0100 ; \ if game mode
  328. CMP.b #$14 ; | != 14, then
  329. BNE ReturnRTL ; / return
  330. PHB : PHK : PLB ; back up B, K -> B
  331. REP #%00100000 ; 16-bit A
  332. BRA InLevel ; Jump to in-level code (second part of on-load code)
  333.  
  334. ReturnSEPXY: SEP #%00010000 ; 8-bit XY
  335. PLB ; restore B
  336. ReturnRTL: RTL
  337.  
  338. LoadLevel: STA.b $24 ; hijacked code (except for SEP #%00100000)
  339. REP #%00010000 ; 16-bit XY, A is already 8-bit
  340. SEP #%00100000 ; 8-bit A
  341. PHB : PHK : PLB ; back up B, K -> B
  342. LDX.w $0001 ; Level number -> X index
  343. LDA.w LevelEnabled,x ; get SSB-enabled status
  344. TAY ; index -> Y
  345. BEQ ReturnSEPXY ; if disabled, return
  346. SEP #%00010000 ; 8-bit XY
  347. REP #%00100000 ; 16-bit A
  348. LDA.w #!RAMBuffer ; \
  349. STA.w $2181 ; |
  350. LDY.b #!RAMBuffer>>16 ; |
  351. STY.w $2183 ; |
  352. STZ.w $4300 ; |
  353. LDY.b #$80 ; | copy main GFX
  354. STY.w $4301 ; | to RAM buffer
  355. LDA.w #!CopyToRAM+Graphics
  356. STA.w $4302 ; |
  357. LDY.b #Graphics>>16 ; |
  358. STY.w $4304 ; |
  359. LDA.w #!SBGFXSize ; |
  360. STA.w $4305 ; |
  361. LDY.b #%00000001 ; |
  362. STY.w $420B ; /
  363.  
  364. InLevel: REP #%00010000
  365. SEP #%00100000 ; 8-bit A
  366. LDX.w $010B ; Level number -> X index
  367. LDA.w LevelEnabled,x ; get SSB-enabled status
  368. BEQ ReturnSEPXY ; if disabled, return
  369. %OAMTile(0,$10,$0F,$00,%00110000,%10)
  370. %OAMTile(1,$20,$0F,$02,%00110000,%10)
  371. %OAMTile(2,$30,$0F,$04,%00110000,%00)
  372. %OAMTile(52,$70,$07,$07,%00110000,%10)
  373. %OAMTile(53,$80,$07,$07,%01110000,%10)
  374. %OAMTile(54,$70,$17,$07,%10110000,%10)
  375. %OAMTile(55,$80,$17,$07,%11110000,%10)
  376. %OAMTile(12,$60,$0F,$05,%00110000,%10)
  377. %OAMTile(13,$48,$17,$20,%00110000,%00)
  378. %OAMTile(14,$50,$17,$11,%00110000,%00)
  379. %OAMTile(42,$98,$0F,$09,%00110000,%10)
  380. %OAMTile(43,$A0,$0F,$0A,%00110000,%10)
  381. %OAMTile(15,$C8,$0F,$14,%00110000,%00)
  382. %OAMTile(33,$B8,$17,$21,%00110000,%00)
  383. %OAMTile(34,$C0,$17,$22,%00110000,%00)
  384. %OAMTile(35,$C8,$17,$23,%00110000,%00)
  385. %OAMTile(36,$D0,$0F,$0C,%00110000,%10)
  386. %OAMTile(37,$E0,$0F,$0E,%00110000,%10)
  387. %OAMTileYoshiCoin(0,$40,44)
  388. %OAMTileYoshiCoin(1,$48,45)
  389. %OAMTileYoshiCoin(2,$50,46)
  390. %OAMTileYoshiCoin(3,$58,47)
  391. LDA.b #$12 ; \
  392. STA.w $170B ; | fix a few
  393. STA.w $170C ; | extended sprite
  394. STA.w $1711 ; | glitches
  395. STA.w $1712 ; /
  396. SEP #%00010000 ; 8-bit XY
  397. REP #%00100000 ; 16-bit A
  398. LDA.w #!RAMBuffer ; \
  399. STA.w $2181 ; |
  400. LDY.b #!RAMBuffer>>16 ; |
  401. STY.w $2183 ; |
  402. STZ.w $4300 ; |
  403. LDY.b #$80 ; |
  404. STY.w $4301 ; |
  405. LDA.w #!MarioName ; | upload
  406. LDY.w $0DB3 ; | character
  407. BEQ NotLuigi ; | name
  408. LDA.w #!LuigiName ; |
  409. NotLuigi: CLC : ADC.w #Graphics ; |
  410. STA.w $4302 ; |
  411. LDY.b #Graphics>>16 ; |
  412. STY.w $4304 ; |
  413. LDA.w #$00A0 ; |
  414. STA.w $4305 ; |
  415. LDY.b #%00000001 ; |
  416. STY.w $420B ; /
  417. %number($0F13,$01C0,$05)
  418. %number($0F14,$01E0,$05)
  419. %number($0F16,$0240,$05)
  420. %number($0F17,$0260,$05)
  421. %number($0F25,$0320,$15)
  422. %number($0F26,$0340,$15)
  423. %number($0F27,$0360,$15)
  424. %number($0F29,$0420,$05)
  425. %number($0F2A,$0440,$05)
  426. %number($0F2B,$0460,$05)
  427. %number($0F2C,$0380,$05)
  428. %number($0F2D,$03A0,$05)
  429. %number($0F2E,$03C0,$05)
  430. %bonusstar($0F03,$00A0)
  431. %bonusstar($0F04,$00C0)
  432. %bonusstar($0F1E,$02A0)
  433. %bonusstar($0F1F,$02C0)
  434. SEP #%00100000
  435. PLB
  436. RTL
  437.  
  438. AllowedModes:
  439. db $00,$00,$00,$00,$00,$00,$00,$00
  440. db $00,$00,$00,$01,$00,$00,$00,$01
  441. db $00,$00,$01,$01,$01,$01,$00,$00
  442. db $00,$00,$00,$00,$00
  443.  
  444. IRQHack: PHB : PHK : PLB ; back up B, K -> B
  445. LDX.w $0100 ; \
  446. LDA.w AllowedModes,x ; | Check game mode
  447. BNE IRQCheckLevel ; /
  448. DefaultIRQ: REP.b #%00010000 ; 16-bit X/Y
  449. LDY.w $010B ; Level number -> Y index
  450. LDA.w LevelIRQ,y ; get IRQ start
  451. SEP.b #%00010000 ; 8-bit X/Y
  452. PLB ; restore B
  453. TAY ; IRQ start -> Y
  454. LDA.w $4211 ; dummy read
  455. JML $008297 ; JML to rest of default IRQ
  456.  
  457.  
  458. IRQCheckLevel: REP #%00010000 ; 16-bit A/XY
  459. SEP #%00010000 ; 8-bit XY
  460. LDX.w $010B ; Level number -> X Index
  461. LDA.w LevelEnabled,x ; get SSB-enabled status
  462. CMP.b #$00 ; \ if SSB disabled,
  463. BEQ DefaultIRQ ; / then no IRQ hack
  464. PLB ; restore B
  465. LDY.b #$E0 ; \ all 224
  466. LDA.w $4211 ; / scanlines
  467. STY.w $4209 ; \ Vertical IRQ
  468. STZ.w $420A ; / trigger counters
  469. LDA.w $0DAE ; \ brightness
  470. STA.w $2100 ; /
  471. LDA.w $0D9F ; \ HDMA
  472. STA.w $420C ; /
  473. JML $008394 ; JML to layer 3 scrolling, etc.
  474.  
  475. SBUploadHack: PHB : PHK : PLB ; back up B, K -> B
  476. REP #%00010000 ; 16-bit A/XY
  477. LDX.w $010B ; Level number -> X index
  478. LDA.w LevelEnabled,x ; \ if SSB disabled, then
  479. BNE + ; | upload regular SB tilemap
  480. JMP DrawSB ; /
  481. + LDA.w $0100 ; \ during level load,
  482. CMP.b #$12 ; | only the status bar
  483. BEQ SBDMA ; / is important
  484. LDA.b $14 ; \
  485. AND.b #%00000001 ; | alternate
  486. BNE GoalPtChk ; /
  487. SBDMA: LDA.w LevelSBProp,x ; \
  488. AND.b #%00000001 ; | which GFX page
  489. XBA ; /
  490. LDA.w LevelGFXLoc,x ; get starting tile of GFX
  491. SEP #%00010000 ; 8-bit XY
  492. REP #%00100000 ; 16-bit A
  493. LDY.b #%10000000 ; \ increment when high
  494. STY.w $2115 ; / byte is accessed
  495. ASL #4 ; x16 (#$10)
  496. CLC : ADC.w #$6000 ; +#$6000
  497. STA.w $2116 ; set as VRAM destination
  498. LDY.b #$01 ; \
  499. STY.w $4300 ; | rest of
  500. LDY.b #$18 ; | GFX buffer
  501. STY.w $4301 ; | transfer
  502. LDA.w #!RAMBuffer ; | to VRAM
  503. STA.w $4302 ; |
  504. LDY.b #!RAMBuffer>>16 ; |
  505. STY.w $4304 ; |
  506. LDA.w #!SBGFXSize ; |
  507. STA.w $4305 ; |
  508. LDY.b #%00000001 ; |
  509. STY.w $420B ; /
  510. SEP #%00100000 ; 8-bit A
  511. PLB ; restore B
  512. JML $008DE6 ; JML to end of DrawStatusBar routine
  513. GoalPtChk: SEP #%00010000 ; 8-bit XY
  514. LDY.w $1493 ; \ no goal text upload
  515. BEQ NoGoalPt ; / unless level is ending
  516. REP #%00010000 ; 16-bit A/XY
  517. SEP #%00100000 ; 8-bit A
  518. LDX.w $010B ; Level number -> X index
  519. LDA.w LevelSBProp,x ; \
  520. AND.b #%00000001 ; | which GFX page
  521. XBA ; /
  522. LDA.w LevelGFXLoc,x ; get starting tile of GFX
  523. CLC : ADC.b #$24 ; 24 tiles after. NOTE TO SELF: change this when making this changeable
  524. SEP #%00010000 ; 8-bit XY
  525. REP #%00100000 ; 16-bit A
  526. LDY.b #%10000000 ; \ increment when high
  527. STY.w $2115 ; / byte is accessed
  528. ASL #4 ; x16 (#$10)
  529. CLC : ADC.w #$6000 ; +#$6000
  530. STA.w $2116 ; set as VRAM destination
  531. LDY.b #$01 ; \
  532. STY.w $4300 ; | rest of
  533. LDY.b #$18 ; | GFX buffer
  534. STY.w $4301 ; | transfer
  535. LDA.w #!RAMBuffer2 ; | to VRAM
  536. STA.w $4302 ; |
  537. LDY.b #!RAMBuffer2>>16 ; |
  538. STY.w $4304 ; |
  539. LDA.w #!GPGFXSize ; |
  540. STA.w $4305 ; |
  541. LDY.b #%00000001 ; |
  542. STY.w $420B ; /
  543. NoGoalPt: SEP #%00100000 ; 8-bit A
  544. PLB ; restore B
  545. JML $008DE6 ; JML to end of DrawStatusBar routine
  546. DrawSB: SEP #%00010000 ; 8-bit XY
  547. PLB ; restore B
  548. LDA.b #$42 ; what A would be (doing this is easier than preserving A)
  549. STA.w $2116 ; \ hijacked
  550. LDA.b #$50 ; / code
  551. JML $008DB6 ; JML to next part of DrawStatusBar routine
  552.  
  553. CoinBlockFix: PHX ; backup X
  554. REP #%00010000 ; 16-bit A/XY
  555. SEP #%00100000 ; 8-bit A
  556. LDX.w $010B ; Level number -> X index
  557. PHB : PHK : PLB ; Back up B, K -> B
  558. LDA.w LevelEnabled,x ; get SSB-enabled status
  559. STA.b $00 ; store to scratch RAM
  560. PLB ; restore B
  561. SEP #%00010000 ; 8-bit XY
  562. PLX ; restore X
  563. LDA.b $00 ; load scratch RAM (SSB-enabled status)
  564. BEQ EndCBF ; no fix if not enabled
  565. DEX ; \ last 3 slots can't
  566. CPX.b #$02 ; | be used because
  567. BMI ReturnCBF ; / SSB uses them
  568. JML $0299D4 ; back
  569. EndCBF: DEX ; \ normal, non-SSB
  570. BMI ReturnCBF ; / level
  571. JML $0299D4 ; back
  572. ReturnCBF: JML $0299E8 ; a RTS in bank 02
  573.  
  574. ScoreSprFix: PHX ; backup X
  575. REP #%00010000 ; 16-bit A/XY
  576. LDX.w $010B ; Level number -> X index
  577. PHB : PHK : PLB ; Back up B, K -> B
  578. LDA.w LevelEnabled,x ; get SSB-enabled status
  579. STA.b $00 ; store to scratch RAM
  580. PLB ; restore B
  581. SEP #%00010000 ; 8-bit XY
  582. PLX ; restore X
  583. LDY.b #$05 ; normally we'd have 5 slots available
  584. LDA.b $00 ; \ but if SSB is enabled
  585. BEQ CODE_02AD36 ; | then we only have
  586. LDY.b #$03 ; / three available
  587. CODE_02AD36: LDA.w $16E1,y ; \
  588. BEQ Return02AD4B ; | SMW's code
  589. DEY ; |
  590. BPL CODE_02AD36 ; |
  591. DEC.w $18F7 ; |
  592. BPL CODE_02AD48 ; |
  593. LDA.b #$03 ; |
  594. STA.w $18F7 ; |
  595. CODE_02AD48: LDY.w $18F7 ; /
  596. Return02AD4B: RTL
  597.  
  598. BonusStarFix:
  599. STZ.w $1337
  600. PHA ; \ hijacked
  601. LSR #3 ; / code
  602. PHA ; backup A
  603. REP #%00010000 ; 16-bit A/XY
  604. LDX.w $010B ; Level number -> X index
  605. PHB : PHK : PLB ; Back up B, K -> B
  606. LDA.w LevelEnabled,x ; get SSB-enabled status
  607. PLB ; restore B
  608. SEP #%00010000 ; 8-bit XY
  609. CMP.b #$00 ; \ if not disabled,
  610. BNE AltBonusStarCode ; / use alternate bonus star code
  611. PLA ; restore A
  612. JML $07F1DF
  613.  
  614. AltBonusStarCode:
  615. LDA.b #$10
  616. STA.w $1692
  617. JSR GetOAMSlot
  618. PLA
  619. LSR
  620. TAX
  621. BEQ CODE_07F1ED
  622. LDA.l $07F1A0,x
  623. TAX
  624. JSR CODE_07F200
  625. CODE_07F1ED: PLA
  626. AND.b #$0F
  627. TAX
  628. LDA.l $07F1A0,x
  629. TAX
  630. LDA.b #$20
  631. STA.b $02
  632. JSR.w CODE_07F200
  633. RTL
  634.  
  635. CODE_07F200: LDA.l $07F0C8,x ; same as original SMW code,
  636. BMI CODE_07F24A ; but uses second half of OAM
  637. CLC
  638. ADC.b #$64
  639. CLC
  640. ADC.b $02
  641. STA.w $0300,y
  642. LDA.l $07F134,x
  643. CLC
  644. ADC.b #$40
  645. STA.w $0301,y
  646. LDA.b #$EF
  647. PHX
  648. LDX $04
  649. CPX.b #$10
  650. BCS CODE_07F22A
  651. TXA
  652. LSR #2
  653. TAX
  654. LDA.l $07F24E,x
  655. CODE_07F22A: STA.w $0302,y
  656. PLX
  657. LDA.b $13
  658. LSR
  659. AND.b #$0E
  660. ORA.b #$30
  661. STA.w $0303,y
  662. PHY
  663. TYA
  664. LSR #2
  665. TAY
  666. LDA.b #$00
  667. STA.w $0460,y
  668. PLY
  669. INY #4
  670. INX
  671. BRA CODE_07F200
  672. CODE_07F24A: LDX.w $15E9
  673. RTS
  674.  
  675. GoalTextFix: REP #%00010000 ; 16-bit A/XY
  676. LDX.w $010B ; Level number -> X index
  677. PHB : PHK : PLB ; Back up B, K -> B
  678. LDA.w LevelEnabled,x ; get SSB-enabled status
  679. PLB ; restore B
  680. SEP #%00010000 ; 8-bit XY
  681. CMP.b #$00 ; \ if not disabled,
  682. BNE AltGoalTextCode ; / use alternate goal text code
  683. JML $05CBFF ; routine for normal L3 text
  684.  
  685. AltGoalTextCode:
  686. JSR DisplayGPText
  687. LDA.w $13D9
  688. JSL $0086DF
  689.  
  690. dw CODE_05CC66
  691. dw CODE_05CD76
  692. dw CODE_05CECA
  693. dw Return05CFE9
  694.  
  695. CODE_05CC66: LDA.b #$10
  696. STA.w $1692
  697. LDY.b #$00
  698. LDX.w $0DB3
  699. LDA.w $0F48,x
  700. CODE_05CC6E: CMP.b #$0A
  701. BCC CODE_05CC77
  702. SBC.b #$0A
  703. INY
  704. BRA CODE_05CC6E
  705. CODE_05CC77: CPY.w $0F32
  706. BNE CODE_05CC84
  707. CPY.w $0F33
  708. BNE CODE_05CC84
  709. INC.w $18E4
  710. CODE_05CC84: LDA.b #$01
  711. STA.w $13D5
  712. REP #%00100000 ; 16-bit A
  713. LDA.w #!RAMBuffer2 ; \
  714. STA.w $2181 ; |
  715. LDY.b #!RAMBuffer2>>16 ; |
  716. STY.w $2183 ; |
  717. STZ.w $4300 ; |
  718. LDY.b #$80 ; | copy main GFX
  719. STY.w $4301 ; | to RAM buffer
  720. LDA.w #!CopyToRAM2+Graphics
  721. STA.w $4302 ; |
  722. LDY.b #Graphics>>16 ; |
  723. STY.w $4304 ; |
  724. LDA.w #!GPGFXSize ; |
  725. STA.w $4305 ; |
  726. LDY.b #%00000001 ; |
  727. STY.w $420B ; /
  728. SEP #%00100000 ; 8-bit A
  729. JSR CODE_05CE4C
  730. REP #%00100000 ; 16-bit A
  731. LDA $02
  732. STA.w $0F40
  733. JSR ScoreToDecimal
  734. JSR UpdateScoreCounter
  735. SEP #%00100000 ; 8-bit A
  736. LDA.w $0F31
  737. BNE TimeXXX
  738. JMP Time0XX
  739. TimeXXX: REP.b #%00100000
  740. %numberGP($0F31,$0400,$05)
  741. Time10s: %numberGP($0F32,$0420,$05)
  742. Time1s: %numberGP($0F33,$0440,$05)
  743. SEP.b #%00100000
  744. INC.w $13D9
  745. LDA.b #$28
  746. STA.w $1424
  747. RTL
  748. Time00X: REP.b #%00100000
  749. %transGP($0400)
  750. %transGP($0420)
  751. JMP Time1s
  752. Time0XX: LDA.w $0F32
  753. BEQ Time00X
  754. REP.b #%00100000
  755. %transGP($0400)
  756. JMP Time10s
  757.  
  758. CODE_05CD76: LDA.w $1900
  759. BNE +
  760. JMP +++
  761. + DEC.w $1424
  762. BPL Return05CDE8
  763. JSR UpdateBonusCounter
  764. +++ DEC.w $13D6
  765. BPL Return05CDE8
  766. LDA.w $1900
  767. STA.w $1424
  768. INC.w $13D9
  769. LDA.b #$11
  770. STA.w $1DFC
  771. Return05CDE8: RTL
  772.  
  773. CODE_05CE4C: REP #$20 ; Accum (16 bit)
  774. LDA.w $0F31
  775. ASL
  776. TAX
  777. LDA.l $05CE3A,x
  778. STA $00
  779. LDA.w $0F32
  780. TAX
  781. LDA.l $05CE42,x
  782. AND.w #$00FF
  783. CLC
  784. ADC $00
  785. STA $00
  786. LDA.w $0F33
  787. AND.w #$00FF
  788. CLC
  789. ADC $00
  790. STA $00
  791. SEP #$20 ; Accum (8 bit)
  792. LDA $00
  793. STA.w $4202 ; Multiplicand A
  794. LDA.b #$32
  795. STA.w $4203 ; Multplier B
  796. NOP #4
  797. LDA.w $4216 ; Product/Remainder Result (Low Byte)
  798. STA $02
  799. LDA.w $4217 ; Product/Remainder Result (High Byte)
  800. STA $03
  801. LDA $01
  802. STA.w $4202 ; Multiplicand A
  803. LDA.b #$32
  804. STA.w $4203 ; Multplier B
  805. NOP #4
  806. LDA.w $4216 ; Product/Remainder Result (Low Byte)
  807. CLC
  808. ADC $03
  809. STA $03
  810. RTS
  811.  
  812. ScoreToDecimal: LDX.b #$FF ; \ couldn't find original SMW code for this...
  813. LDA.w $0F40 ; | so I wrote my own version
  814. - STA.b $04 ; | this converts the coin score ($0F40)...
  815. INX ; | into decimal, with one byte per power of 10
  816. SEC ; v
  817. SBC.w #10000
  818. BCS -
  819. STX.b $00
  820. LDX.b #$FF
  821. LDA.b $04
  822. - STA.b $04
  823. INX
  824. SEC
  825. SBC.w #1000
  826. BCS -
  827. STX.b $01
  828. LDX.b #$FF
  829. LDA.b $04
  830. - STA.b $04
  831. INX
  832. SEC
  833. SBC.w #100
  834. BCS -
  835. STX.b $02
  836. LDX.b #$FF
  837. LDA.b $04
  838. - STA.b $04
  839. INX
  840. SEC
  841. SBC.w #10 ; ^
  842. BCS - ; |
  843. STX.b $03 ; /
  844. RTS
  845.  
  846. UpdateScoreCounter:
  847. LDY $00
  848. BNE Sc0
  849. JMP Score0XXXX
  850. Sc0: %numberGPb($00,$04E0,$05)
  851. Sc1: %numberGPb($01,$0500,$05)
  852. Sc2: %numberGPb($02,$0520,$05)
  853. Sc3: %numberGPb($03,$0540,$05)
  854. Sc4: %numberGPb($04,$0560,$05)
  855. RTS
  856. Score0XXXX: LDY $01
  857. BEQ Score00XXX
  858. %transGP($04E0)
  859. JMP Sc1
  860. Score00XXX: LDY $02
  861. BEQ Score000XX
  862. %transGP($04E0)
  863. %transGP($0500)
  864. JMP Sc2
  865. Score000XX: LDY $03
  866. BEQ Score0000X
  867. %transGP($04E0)
  868. %transGP($0500)
  869. %transGP($0520)
  870. JMP Sc3
  871. Score0000X: %transGP($04E0)
  872. %transGP($0500)
  873. %transGP($0520)
  874. %transGP($0540)
  875. JMP Sc4
  876.  
  877. CODE_05CECA: PHB : PHK : PLB
  878. REP #%00100000
  879. LDY.b #$00
  880. LDA.w $0DB3
  881. AND.w #$00FF
  882. BEQ CODE_05CEDB
  883. LDY.b #$03
  884. CODE_05CEDB: LDX.b #$02
  885. LDA.w $0F40
  886. BEQ CODE_05CF05
  887. CMP.w #$0063
  888. BCS CODE_05CEE9
  889. LDX.b #$00
  890. CODE_05CEE9: SEC : SBC.l $05CEC2,x
  891. STA.w $0F40
  892. STA $02
  893. LDA.l $05CEC6,x
  894. CLC : ADC.w $0F34,y
  895. STA.w $0F34,y
  896. LDA.w $0F36,y
  897. ADC.w #$0000
  898. STA.w $0F36,y
  899. CODE_05CF05: LDY.w $1900
  900. BEQ CODE_05CF36
  901. SEP #%00100000
  902. LDA.b $13
  903. AND.b #$03
  904. BNE CODE_05CF34
  905. LDY.w $0DB3
  906. LDA.w $0F48,y
  907. CLC : ADC.b #$01
  908. STA.w $0F48,y
  909. LDA.w $1900
  910. DEC A
  911. STA.w $1900
  912. AND.b #$0F
  913. CMP.b #$0F
  914. BNE CODE_05CF34
  915. LDA.w $1900
  916. SEC
  917. SBC.b #$06
  918. STA.w $1900
  919. CODE_05CF34: REP #%00100000
  920. CODE_05CF36: LDA.w $0F40
  921. BNE CODE_05CF4D
  922. LDX.w $1900
  923. BNE CODE_05CF4D
  924. LDY.b #$30
  925. STY.w $13D6
  926. INC.w $13D9
  927. LDY.b #$12
  928. STY.w $1DFC
  929. CODE_05CF4D: JSR ScoreToDecimal
  930. JSR UpdateScoreCounter
  931. LDA.w $1424
  932. BEQ CODE_05CFDC
  933. SEP #%00100000
  934. JSR UpdateBonusCounter
  935. CODE_05CFDC: PLB
  936. SEP #%00110000
  937. Return05CFE9: RTL
  938.  
  939. ReturnGPText: RTS
  940.  
  941. DisplayGPText:
  942. STZ.w $1337
  943. LDA.w $13D9 ; \ prevent the split-second glitch
  944. BEQ ReturnGPText ; / that shows up 50% of the time
  945. PHB : PHK : PLB ; Back up B, K -> B
  946. JSR GetOAMSlot ; get slot for sprites
  947. REP #%00110000 ; 16-bit A/XY
  948. LDX.w $010B ; Level number -> X index
  949. LDA.w #$0000 ; high byte MUST be zero or tile sizes will glitch
  950. SEP #%00100000 ; 8-bit A
  951. %OAMTileGPc(0,$68,$3F,$00,%00110000,%00)
  952. %OAMTileGPc(1,$70,$3F,$01,%00110000,%00)
  953. %OAMTileGPc(2,$78,$3F,$02,%00110000,%00)
  954. %OAMTileGPc(3,$80,$3F,$03,%00110000,%00)
  955. %OAMTileGPc(4,$88,$3F,$04,%00110000,%00)
  956. %OAMTileGP(5,$48,$4F,$00,%00110000,%10)
  957. %OAMTileGP(6,$58,$4F,$02,%00110000,%10)
  958. %OAMTileGP(7,$68,$4F,$04,%00110000,%10)
  959. %OAMTileGP(8,$80,$4F,$06,%00110000,%10)
  960. %OAMTileGP(9,$90,$4F,$08,%00110000,%10)
  961. %OAMTileGP(10,$A0,$4F,$0A,%00110000,%10)
  962. %OAMTileGP(11,$48,$67,$0F,%00110000,%00)
  963. %OAMTileGP(12,$50,$5F,$10,%00110000,%10)
  964. %OAMTileGP(13,$60,$5F,$12,%00110000,%10)
  965. %OAMTileGP(14,$70,$5F,$14,%00110000,%10)
  966. %OAMTileGP(15,$80,$5F,$16,%00110000,%10)
  967. %OAMTileGP(16,$90,$5F,$18,%00110000,%10)
  968. %OAMTileGP(17,$A0,$5F,$1A,%00110000,%10)
  969. LDA.w $13D9
  970. CMP #$01
  971. BEQ +
  972. CMP #$02
  973. BCS ++
  974. - JMP +++
  975. + LDA.w $1424
  976. BPL -
  977. ++ LDA.w $1424
  978. BEQ -
  979. %OAMTileGP(18,$50,$7F,$0C,%00110000,%00)
  980. %OAMTileGP(19,$58,$7F,$01,%00110000,%00)
  981. %OAMTileGP(20,$60,$7F,$0D,%00110000,%00)
  982. %OAMTileGP(21,$68,$7F,$02,%00110000,%00)
  983. %OAMTileGP(22,$70,$7F,$04,%00110000,%00)
  984. %OAMTileGP(23,$78,$7F,$0B,%00110000,%00)
  985. %OAMTileGP(24,$88,$77,$1C,%00110000,%10)
  986. %OAMTileGP(25,$98,$77,$1E,%00110000,%10)
  987. +++ SEP #%00010000
  988. PLB ; restore B
  989. RTS
  990.  
  991. UpdateBonusCounter:
  992. LDA.w $1900
  993. AND.b #$0F
  994. ASL
  995. TAX
  996. REP #%00100000
  997. %bonusstarGP($05CD62,$03E0)
  998. %bonusstarGP($05CD63,$05E0)
  999. SEP #%00100000
  1000. LDA.w $1900
  1001. AND.b #$F0
  1002. LSR #3
  1003. BNE ++
  1004. REP #%00100000
  1005. %transGP($03C0)
  1006. %transGP($05C0)
  1007. SEP #%00100000
  1008. RTS
  1009. ++ TAX
  1010. REP #%00100000
  1011. %bonusstarGP($05CD62,$03C0)
  1012. %bonusstarGP($05CD63,$05C0)
  1013. SEP #%00100000
  1014. RTS
  1015.  
  1016. GetOAMSlot: PHX ; a dirty way of doing it, but it works. I may clean it up a bit in the future
  1017. LDX #$00
  1018. LDA $15EA
  1019. PHA
  1020. LDA $14C8
  1021. PHA
  1022. LDA $9E
  1023. PHA
  1024. LDA $02
  1025. PHA
  1026. LDA #$01
  1027. STA $14C8
  1028. STZ $9E
  1029. LDA #$5C
  1030. STA $00
  1031. LDA $0180E2
  1032. STA $01
  1033. LDA $0180E3
  1034. STA $02
  1035. LDA $0180E4
  1036. STA $03
  1037. JSL $7E0000
  1038. LDY $15EA
  1039. PLA
  1040. STA $02
  1041. PLA
  1042. STA $14C8
  1043. PLA
  1044. STA $9E
  1045. PLA
  1046. STA $15EA
  1047. PLX
  1048. RTS
  1049.  
  1050. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1051. ; Level Tables - Enable / GFX Offset / Properties / IRQ
  1052. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1053.  
  1054. LevelEnabled: db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 00-07
  1055. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 08-0F
  1056. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 10-17
  1057. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 18-1F
  1058. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 20-27
  1059. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 28-2F
  1060. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 30-37
  1061. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 38-3F
  1062. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 40-47
  1063. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 48-4F
  1064. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 50-57
  1065. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 58-5F
  1066. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 60-67
  1067. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 68-6F
  1068. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 70-77
  1069. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 78-7F
  1070. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 80-87
  1071. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 88-8F
  1072. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 90-97
  1073. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 98-9F
  1074. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels A0-A7
  1075. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels A8-AF
  1076. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels B0-B7
  1077. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels B8-BF
  1078. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels C0-C7
  1079. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels C8-CF
  1080. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels D0-D7
  1081. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels D8-DF
  1082. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels E0-E7
  1083. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels E8-EF
  1084. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels F0-F7
  1085. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels F8-FF
  1086. db $00,$00,$00,$00,$00,$01,$00,$00 ;Levels 100-107
  1087. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 108-10F
  1088. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 110-117
  1089. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 118-11F
  1090. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 120-127
  1091. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 128-12F
  1092. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 130-137
  1093. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 138-13F
  1094. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 140-147
  1095. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 148-14F
  1096. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 150-157
  1097. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 158-15F
  1098. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 160-167
  1099. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 168-16F
  1100. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 170-177
  1101. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 178-17F
  1102. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 180-187
  1103. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 188-18F
  1104. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 190-197
  1105. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 198-19F
  1106. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 1A0-1A7
  1107. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 1A8-1AF
  1108. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 1B0-1B7
  1109. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 1B8-1BF
  1110. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 1C0-1C7
  1111. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 1C8-1CF
  1112. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 1D0-1D7
  1113. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 1D8-1DF
  1114. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 1E0-1E7
  1115. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 1E8-1EF
  1116. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 1F0-1F7
  1117. db $00,$00,$00,$00,$00,$00,$00,$00 ;Levels 1F8-1FF
  1118.  
  1119. LevelGFXLoc: db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 00-07
  1120. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 08-0F
  1121. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 10-17
  1122. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 18-1F
  1123. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 20-27
  1124. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 28-2F
  1125. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 30-37
  1126. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 38-3F
  1127. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 40-47
  1128. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 48-4F
  1129. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 50-57
  1130. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 58-5F
  1131. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 60-67
  1132. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 68-6F
  1133. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 70-77
  1134. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 78-7F
  1135. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 80-87
  1136. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 88-8F
  1137. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 90-97
  1138. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 98-9F
  1139. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels A0-A7
  1140. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels A8-AF
  1141. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels B0-B7
  1142. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels B8-BF
  1143. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels C0-C7
  1144. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels C8-CF
  1145. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels D0-D7
  1146. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels D8-DF
  1147. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels E0-E7
  1148. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels E8-EF
  1149. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels F0-F7
  1150. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels F8-FF
  1151. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 100-107
  1152. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 108-10F
  1153. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 110-117
  1154. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 118-11F
  1155. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 120-127
  1156. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 128-12F
  1157. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 130-137
  1158. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 138-13F
  1159. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 140-147
  1160. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 148-14F
  1161. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 150-157
  1162. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 158-15F
  1163. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 160-167
  1164. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 168-16F
  1165. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 170-177
  1166. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 178-17F
  1167. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 180-187
  1168. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 188-18F
  1169. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 190-197
  1170. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 198-19F
  1171. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 1A0-1A7
  1172. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 1A8-1AF
  1173. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 1B0-1B7
  1174. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 1B8-1BF
  1175. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 1C0-1C7
  1176. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 1C8-1CF
  1177. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 1D0-1D7
  1178. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 1D8-1DF
  1179. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 1E0-1E7
  1180. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 1E8-1EF
  1181. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 1F0-1F7
  1182. db $80,$80,$80,$80,$80,$80,$80,$80 ;Levels 1F8-1FF
  1183.  
  1184. LevelSBProp: db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 00-07
  1185. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 08-0F
  1186. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 10-17
  1187. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 18-1F
  1188. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 20-27
  1189. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 28-2F
  1190. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 30-37
  1191. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 38-3F
  1192. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 40-47
  1193. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 48-4F
  1194. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 50-57
  1195. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 58-5F
  1196. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 60-67
  1197. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 68-6F
  1198. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 70-77
  1199. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 78-7F
  1200. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 80-87
  1201. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 88-8F
  1202. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 90-97
  1203. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 98-9F
  1204. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels A0-A7
  1205. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels A8-AF
  1206. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels B0-B7
  1207. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels B8-BF
  1208. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels C0-C7
  1209. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels C8-CF
  1210. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels D0-D7
  1211. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels D8-DF
  1212. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels E0-E7
  1213. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels E8-EF
  1214. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels F0-F7
  1215. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels F8-FF
  1216. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 100-107
  1217. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 108-10F
  1218. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 110-117
  1219. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 118-11F
  1220. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 120-127
  1221. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 128-12F
  1222. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 130-137
  1223. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 138-13F
  1224. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 140-147
  1225. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 148-14F
  1226. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 150-157
  1227. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 158-15F
  1228. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 160-167
  1229. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 168-16F
  1230. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 170-177
  1231. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 178-17F
  1232. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 180-187
  1233. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 188-18F
  1234. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 190-197
  1235. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 198-19F
  1236. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 1A0-1A7
  1237. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 1A8-1AF
  1238. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 1B0-1B7
  1239. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 1B8-1BF
  1240. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 1C0-1C7
  1241. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 1C8-1CF
  1242. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 1D0-1D7
  1243. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 1D8-1DF
  1244. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 1E0-1E7
  1245. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 1E8-1EF
  1246. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 1F0-1F7
  1247. db %00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111,%00001111 ;Levels 1F8-1FF
  1248.  
  1249. LevelIRQ: db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 00-07
  1250. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 08-0F
  1251. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 10-17
  1252. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 18-1F
  1253. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 20-27
  1254. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 28-2F
  1255. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 30-37
  1256. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 38-3F
  1257. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 40-47
  1258. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 48-4F
  1259. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 50-57
  1260. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 58-5F
  1261. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 60-67
  1262. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 68-6F
  1263. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 70-77
  1264. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 78-7F
  1265. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 80-87
  1266. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 88-8F
  1267. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 90-97
  1268. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 98-9F
  1269. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels A0-A7
  1270. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels A8-AF
  1271. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels B0-B7
  1272. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels B8-BF
  1273. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels C0-C7
  1274. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels C8-CF
  1275. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels D0-D7
  1276. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels D8-DF
  1277. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels E0-E7
  1278. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels E8-EF
  1279. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels F0-F7
  1280. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels F8-FF
  1281. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 100-107
  1282. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 108-10F
  1283. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 110-117
  1284. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 118-11F
  1285. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 120-127
  1286. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 128-12F
  1287. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 130-137
  1288. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 138-13F
  1289. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 140-147
  1290. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 148-14F
  1291. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 150-157
  1292. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 158-15F
  1293. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 160-167
  1294. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 168-16F
  1295. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 170-177
  1296. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 178-17F
  1297. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 180-187
  1298. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 188-18F
  1299. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 190-197
  1300. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 198-19F
  1301. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 1A0-1A7
  1302. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 1A8-1AF
  1303. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 1B0-1B7
  1304. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 1B8-1BF
  1305. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 1C0-1C7
  1306. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 1C8-1CF
  1307. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 1D0-1D7
  1308. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 1D8-1DF
  1309. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 1E0-1E7
  1310. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 1E8-1EF
  1311. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 1F0-1F7
  1312. db $24,$24,$24,$24,$24,$24,$24,$24 ;Levels 1F8-1FF
  1313.  
  1314. Graphics:
  1315. INCBIN ssb.bin
  1316.  
  1317. CodeEnd:
  1318. print bytes
  1319.  
  1320.  
  1321. ; from garble.asm that comes with dsx.asm
  1322. org $00A08A
  1323. JML GarbleMain
  1324.  
  1325. org $04F270 ; Nine bytes of freespace in bank 04
  1326. GarbleMain: JSR $DD40 ; re-decompress the OW tiles
  1327. LDA $1B9C
  1328. BEQ DoTheBranch
  1329. JML $00A08F
  1330. DoTheBranch: JML $00A093
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement