Advertisement
Guest User

cbb3.asm

a guest
Apr 16th, 2016
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.28 KB | None | 0 0
  1. !falling_speed = $30
  2. !tile1 = $80 ;first frame, walking
  3. !tile2 = $82 ;second frame, walking
  4. !tile3 = $84 ;first frame, in shell
  5. !tile4 = $86 ;second frame, in shell
  6. !tile5 = $88 ;third frame, in shell
  7. !yxppccct = $0D
  8.  
  9. print "INIT ",pc
  10. phb : phk : plb
  11. jsr SUB_HORZ_POS
  12. tya
  13. sta $157C,x
  14. stz $1510,x
  15. plb : rtl
  16. print "MAIN ",pc
  17. phb : phk : plb
  18. jsr Code
  19. plb : rtl
  20. skip: stz $AA,x
  21. stz $B6,x
  22. jmp Code_updatesp
  23. Code: jsr SUB_OFF_SCREEN_X0
  24. lda $9D
  25. bne skip
  26. lda $1588,x
  27. and #$04
  28. beq +
  29. jsr SpawnBuzzy
  30. + : jsl $01A7DC
  31. bcc +
  32. rep #$20
  33. lda $14D4,x
  34. and #$00FF
  35. xba
  36. ora $D8,x
  37. cmp $96
  38. sep #$20
  39. bcc .hurtmario
  40. lda #$13 : sta $1DF9
  41. lda $D8,x
  42. clc
  43. adc #$08
  44. sta $D8,x
  45. lda $14D4,x
  46. adc #$00
  47. sta $14D4,x
  48. jsr SpawnBuzzy
  49. + : lda $1588,x
  50. and #$03
  51. beq .flipsk
  52. lda $157C,x
  53. eor #$01
  54. sta $157C,x
  55. .flipsk : jsr CheckProximity
  56. beq .notnear
  57. lda #$01 : sta $1510,x
  58. .notnear : lda $1510,x ;fall flag
  59. beq +
  60. lda #!falling_speed
  61. sta $AA,x
  62. stz $B6,x
  63. bra .updatesp
  64. + : ldy $157C,x
  65. lda .xspeed,y
  66. sta $B6,x
  67. stz $AA,x
  68. .updatesp : jsl $01801A
  69. jsl $018022
  70. jsl $019138
  71. jsl $018032
  72. jsr Graphics
  73. rts
  74. .hurtmario :
  75. jsl $00F5B7
  76. bra .flipsk
  77. .xspeed : db $08 : db $08^$FF+1
  78. Graphics: jsl $0190B2
  79. lda $7f1234
  80. ldy $15EA,x
  81. lda $157C,x
  82. eor #$01
  83. clc
  84. ror A : ror A : ror A
  85. ora.b #!yxppccct|$80
  86. sta $0303,y
  87. lda $1510,x
  88. asl #2
  89. sta $02
  90. lda $14
  91. lsr #3
  92. and #$03
  93. clc : adc $02
  94. phx
  95. tax
  96. lda .tiles,x
  97. plx
  98. sta $0302,y
  99. rts
  100. .tiles
  101. db !tile1,!tile2,!tile1,!tile2
  102. db !tile3,!tile4,!tile5,!tile4
  103. SpawnBuzzy:
  104. lda #$11
  105. sta $9E,x
  106. lda #$08
  107. sta $14C8,x
  108. jsl $07F7D2
  109. rts
  110.  
  111.  
  112. CheckProximity:
  113. Proximity: ; If sprite is TOO close to Mario, return.
  114. LDA $14E0,x
  115. XBA
  116. LDA $E4,x
  117. REP #$20 ; Get sprite's X position.
  118. SEC
  119. SBC $94 ; Subtract Mario's to get the difference range.
  120. SEP #$20
  121. PHA
  122. JSR SUB_HORZ_POS ; Determine sprite range.
  123. PLA
  124. EOR InvertAbility,y ; Apply inversion based on direction.
  125. CMP #$09 ; Range.
  126. BCS OutofRange
  127. LDA #$01
  128. RTS
  129. OutofRange:
  130. LDA $E4,x
  131. CMP $94
  132. BNE RangeOut
  133. LDA #$01
  134. RTS
  135. RangeOut:
  136. LDA #$00
  137. RTS
  138. InvertAbility:
  139. db $FF,$00
  140. SUB_HORZ_POS: LDY #$00 ;A:25D0 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1020 VC:097 00 FL:31642
  141. LDA $94 ;A:25D0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:envMXdiZCHC:1036 VC:097 00 FL:31642
  142. SEC ;A:25F0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1060 VC:097 00 FL:31642
  143. SBC $E4,x ;A:25F0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1074 VC:097 00 FL:31642
  144. STA $0F ;A:25F4 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1104 VC:097 00 FL:31642
  145. LDA $95 ;A:25F4 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1128 VC:097 00 FL:31642
  146. SBC $14E0,x ;A:2500 X:0006 Y:0000 D:0000 DB:03 S:01ED P:envMXdiZcHC:1152 VC:097 00 FL:31642
  147. BPL LABEL16 ;A:25FF X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1184 VC:097 00 FL:31642
  148. INY ;A:25FF X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1200 VC:097 00 FL:31642
  149. LABEL16: RTS
  150. SUB_OFF_SCREEN_X0: STZ $03 ; /
  151.  
  152. START_SUB: JSR SUB_IS_OFF_SCREEN ; \ if sprite is not off screen, return
  153. BEQ RETURN_35 ; /
  154. LDA $5B ; \ goto VERTICAL_LEVEL if vertical level
  155. AND #$01 ; |
  156. BNE VERTICAL_LEVEL ; /
  157. LDA $D8,x ; \
  158. CLC ; |
  159. ADC #$50 ; | if the sprite has gone off the bottom of the level...
  160. LDA $14D4,x ; | (if adding 0x50 to the sprite y position would make the high byte >= 2)
  161. ADC #$00 ; |
  162. CMP #$02 ; |
  163. BPL ERASE_SPRITE ; / ...erase the sprite
  164. LDA $167A,x ; \ if "process offscreen" flag is set, return
  165. AND #$04 ; |
  166. BNE RETURN_35 ; /
  167. LDA $13 ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0756 VC:176 00 FL:205
  168. AND #$01 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0780 VC:176 00 FL:205
  169. ORA $03 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0796 VC:176 00 FL:205
  170. STA $01 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0820 VC:176 00 FL:205
  171. TAY ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0844 VC:176 00 FL:205
  172. LDA $1A ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0858 VC:176 00 FL:205
  173. CLC ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0882 VC:176 00 FL:205
  174. ADC SPR_T14,y ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0896 VC:176 00 FL:205
  175. ROL $00 ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizcHC:0928 VC:176 00 FL:205
  176. CMP $E4,x ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:0966 VC:176 00 FL:205
  177. PHP ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:0996 VC:176 00 FL:205
  178. LDA $1B ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdizCHC:1018 VC:176 00 FL:205
  179. LSR $00 ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdiZCHC:1042 VC:176 00 FL:205
  180. ADC SPR_T15,y ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdizcHC:1080 VC:176 00 FL:205
  181. PLP ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F0 P:eNvMXdizcHC:1112 VC:176 00 FL:205
  182. SBC $14E0,x ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1140 VC:176 00 FL:205
  183. STA $00 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:1172 VC:176 00 FL:205
  184. LSR $01 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:1196 VC:176 00 FL:205
  185. BCC SPR_L31 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZCHC:1234 VC:176 00 FL:205
  186. EOR #$80 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZCHC:1250 VC:176 00 FL:205
  187. STA $00 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1266 VC:176 00 FL:205
  188. SPR_L31: LDA $00 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1290 VC:176 00 FL:205
  189. BPL RETURN_35 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1314 VC:176 00 FL:205
  190. ERASE_SPRITE: LDA $14C8,x ; \ if sprite status < 8, permanently erase sprite
  191. CMP #$08 ; |
  192. BCC KILL_SPRITE ; /
  193. LDY $161A,x ;A:FF08 X:0007 Y:0001 D:0000 DB:01 S:01F3 P:envMXdiZCHC:1108 VC:059 00 FL:2878
  194. CPY #$FF ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdiZCHC:1140 VC:059 00 FL:2878
  195. BEQ KILL_SPRITE ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdizcHC:1156 VC:059 00 FL:2878
  196. LDA #$00 ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdizcHC:1172 VC:059 00 FL:2878
  197. STA $1938,y ;A:FF00 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdiZcHC:1188 VC:059 00 FL:2878
  198. KILL_SPRITE: STZ $14C8,x ; erase sprite
  199. RETURN_35: RTS ; return
  200.  
  201. VERTICAL_LEVEL: LDA $167A,x ; \ if "process offscreen" flag is set, return
  202. AND #$04 ; |
  203. BNE RETURN_35 ; /
  204. LDA $13 ; \
  205. LSR A ; |
  206. BCS RETURN_35 ; /
  207. LDA $E4,x ; \
  208. CMP #$00 ; | if the sprite has gone off the side of the level...
  209. LDA $14E0,x ; |
  210. SBC #$00 ; |
  211. CMP #$02 ; |
  212. BCS ERASE_SPRITE ; / ...erase the sprite
  213. LDA $13 ;A:0000 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:1218 VC:250 00 FL:5379
  214. LSR A ;A:0016 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1242 VC:250 00 FL:5379
  215. AND #$01 ;A:000B X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1256 VC:250 00 FL:5379
  216. STA $01 ;A:0001 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1272 VC:250 00 FL:5379
  217. TAY ;A:0001 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1296 VC:250 00 FL:5379
  218. LDA $1C ;A:001A X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0052 VC:251 00 FL:5379
  219. CLC ;A:00BD X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0076 VC:251 00 FL:5379
  220. ADC SPR_T12,y ;A:00BD X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0090 VC:251 00 FL:5379
  221. ROL $00 ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:enVMXdizCHC:0122 VC:251 00 FL:5379
  222. CMP $D8,x ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0160 VC:251 00 FL:5379
  223. PHP ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0190 VC:251 00 FL:5379
  224. LDA $001D ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F2 P:eNVMXdizcHC:0212 VC:251 00 FL:5379
  225. LSR $00 ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:enVMXdiZcHC:0244 VC:251 00 FL:5379
  226. ADC SPR_T13,y ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:enVMXdizCHC:0282 VC:251 00 FL:5379
  227. PLP ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:envMXdiZCHC:0314 VC:251 00 FL:5379
  228. SBC $14D4,x ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0342 VC:251 00 FL:5379
  229. STA $00 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0374 VC:251 00 FL:5379
  230. LDY $01 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0398 VC:251 00 FL:5379
  231. BEQ SPR_L38 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0422 VC:251 00 FL:5379
  232. EOR #$80 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0438 VC:251 00 FL:5379
  233. STA $00 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0454 VC:251 00 FL:5379
  234. SPR_L38: LDA $00 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0478 VC:251 00 FL:5379
  235. BPL RETURN_35 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0502 VC:251 00 FL:5379
  236. BMI ERASE_SPRITE ;A:8AFF X:0002 Y:0000 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0704 VC:184 00 FL:5490
  237.  
  238. SUB_IS_OFF_SCREEN: LDA $15A0,x ; \ if sprite is on screen, accumulator = 0
  239. ORA $186C,x ; |
  240. RTS ; / return
  241. SPR_T12: db $40,$B0
  242. SPR_T13: db $01,$FF
  243. SPR_T14: db $30,$C0,$A0,$C0,$A0,$F0,$60,$90 ;bank 1 sizes
  244. db $30,$C0,$A0,$80,$A0,$40,$60,$B0 ;bank 3 sizes
  245. SPR_T15: db $01,$FF,$01,$FF,$01,$FF,$01,$FF ;bank 1 sizes
  246. db $01,$FF,$01,$FF,$01,$00,$01,$FF ;bank 3 sizes
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement