Advertisement
Erik557

Untitled

Feb 5th, 2017
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.88 KB | None | 0 0
  1. ;~@sa1
  2. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3. ;; Mario Maker midway flag.
  4. ;; By LX5
  5. ;;
  6. ;; A dynamic sprite flag that works like a midway bar.
  7. ;;
  8. ;; Extra property byte 1:
  9. ;; - Used to determine which midpoint it will trigger.
  10. ;; - $00 = Original midpoint.
  11. ;; - $01~$FF = Midway point numbers from Kaijyuu's MMP patch.
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  13.  
  14. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  15. ;; RAM & ROM defines
  16. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  17.  
  18. ;incsrc subroutinedefs.asm
  19.  
  20. !sprite_x_lo = $322C
  21. !sprite_x_hi = $326E
  22. !sprite_y_lo = $3216
  23. !sprite_y_hi = $3258
  24.  
  25. !sprite_offscreen_x = $3376
  26. !sprite_offscreen_y = $7642
  27.  
  28. !sprite_timer = $32C6
  29. !sprite_flags = $74F4
  30. !sprite_misc = $3284
  31.  
  32. !sprite_num = $3200
  33. !sprite_state = $30D8
  34. !sprite_status = $3242
  35. !sprite_gfx = $33CE
  36. !sprite_pal = $33B8
  37.  
  38. !sprite_extra_bits = $6040
  39. !sprite_extra_prop_1 = $6057
  40. !sprite_extra_prop_2 = $606D
  41. !sprite_custom_num = $6083
  42.  
  43. !get_sprite_clip_a = $03B69F
  44. !get_sprite_clip_b = $03B6E5
  45. !get_mario_clip = $03B664
  46. !get_contact = $03B72B
  47. !finish_oam = $01B7B3
  48.  
  49. !RAM_Midway = $7FB4D9
  50.  
  51. !temp = $09
  52. !slot_pointer = $6F3A
  53. !slot_bank = $6F3C
  54. !slot_dest = $6F3D
  55. !slots_used = $66FE
  56. !dsx_buffer = $418000
  57. !max_slots = $04
  58.  
  59. tiles: db $00,$02,$20,$22
  60. slots: db $CC,$C8,$C4,$C0
  61. dynamic_frames: db $00,$01,$02,$03
  62. db $10,$11,$12,$13
  63. db $20,$21,$22,$23
  64.  
  65. x_pos: db $00,$10,$00,$10
  66. y_pos: db $00,$00,$10,$10
  67. props: db $30
  68.  
  69. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  70. ;; Sprite init code
  71. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  72.  
  73. print "INIT ",pc
  74. LDA !sprite_extra_prop_1,x
  75. STA $00
  76. BEQ .normal_midpoint
  77. LDX $73BF
  78. LDA !RAM_Midway,x
  79. CMP $00
  80. BCS .midpoint_crossed
  81. .midpoint_not_crossed
  82. LDX $75E9
  83. RTL
  84. .normal_midpoint
  85. LDX $73BF
  86. LDA $7EA2,x
  87. AND #$40
  88. ORA $73CE
  89. BEQ .midpoint_not_crossed
  90. .midpoint_crossed
  91. LDX $75E9
  92. LDA #$02
  93. STA !sprite_state,x
  94. RTL
  95.  
  96. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  97. ;; Sprite main code
  98. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  99.  
  100. print "MAIN ",pc
  101. PHB
  102. PHK
  103. PLB
  104. LDA $9D
  105. BNE end
  106. JSR flag_main
  107. end:
  108. JSR kek_SubOffscreenX0
  109. JSR graphics
  110. PLB
  111. RTL
  112.  
  113. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  114. ;; Main code
  115. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  116.  
  117. flag_main:
  118. LDA !sprite_state,x
  119. BNE .midpoint_get
  120. JSR .get_timer
  121. LDA.w .skull_images,y
  122. STA !sprite_gfx,x
  123. JMP interaction
  124. .midpoint_get
  125. DEC
  126. BEQ .get_flag
  127. JSR .get_timer
  128. TYA
  129. CLC
  130. ADC $6DD6
  131. TAY
  132. LDA.w .mario_luigi_images,y
  133. STA !sprite_gfx,x
  134. RTS
  135. .get_flag
  136. LDA !sprite_timer,x
  137. BEQ .change_image
  138. LSR #2
  139. AND #$03
  140. TAY
  141. LDA.w .transform_images,y
  142. STA !sprite_gfx,x
  143. RTS
  144. .change_image
  145. INC !sprite_state,x
  146. RTS
  147. .get_timer
  148. LDA $14
  149. AND #$07
  150. CMP #$07
  151. BNE .no_increase
  152. LDA !sprite_misc,x
  153. CMP #$02
  154. BEQ .reset
  155. INC !sprite_misc,x
  156. BRA .no_increase
  157. .reset
  158. STZ !sprite_misc,x
  159. .no_increase
  160. LDY !sprite_misc,x
  161. RTS
  162.  
  163. .skull_images
  164. db $00,$01,$02
  165. .transform_images
  166. db $03,$04,$05,$04
  167. .mario_luigi_images
  168. db $06,$07,$08,$00,$09,$0A,$0B
  169.  
  170. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  171. ;; Interaction routine
  172. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  173.  
  174. interaction:
  175. LDA !sprite_x_lo,x
  176. CLC
  177. ADC #$07
  178. STA $04
  179. LDA !sprite_x_hi,x
  180. ADC #$00
  181. STA $0A
  182. LDA !sprite_y_lo,x
  183. CLC
  184. ADC #$03
  185. STA $05
  186. LDA !sprite_y_hi,x
  187. ADC #$00
  188. STA $0B
  189. LDA #$16
  190. STA $06
  191. LDA #$1A
  192. STA $07
  193. JSL !get_mario_clip
  194. JSL !get_contact
  195. BCC .no_contact
  196. INC !sprite_state,x
  197. LDA #$1F
  198. STA !sprite_timer,x
  199.  
  200. LDA !sprite_extra_prop_1,x
  201. BEQ .normal_midpoint
  202. LDX $73BF
  203. STA !RAM_Midway,x
  204. .normal_midpoint
  205. LDX $75E9
  206.  
  207. LDA #$01
  208. STA $73CE
  209. LDA $19
  210. BNE .already_big
  211. LDA #$02
  212. STA $71
  213. LDA #$2F
  214. STA $7496
  215. STA $9D
  216. .already_big
  217. LDA #$05
  218. STA $7DF9
  219. .no_contact
  220. RTS
  221.  
  222. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  223. ;; Graphics routine
  224. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  225.  
  226. graphics:
  227. LDA !sprite_pal,x
  228. STA $04
  229.  
  230. LDA !sprite_gfx,x
  231. PHX
  232. TAX
  233. LDA.w dynamic_frames,x
  234. PLX
  235. JSR get_dynamic_slot
  236. BCC .end
  237. STA $02
  238.  
  239. JSR get_draw_info
  240.  
  241. PHX
  242. LDX #$00
  243. .loop
  244. LDA $00
  245. CLC
  246. ADC.w x_pos,x
  247. STA $6300,y
  248.  
  249. LDA $01
  250. CLC
  251. ADC.w y_pos,x
  252. STA $6301,y
  253.  
  254. LDA.w tiles,x
  255. CLC
  256. ADC $02
  257. STA $6302,y
  258.  
  259. LDA $04
  260. ORA $64
  261. STA $6303,y
  262.  
  263. INY #4
  264. INX
  265. CPX #$04
  266. BNE .loop
  267. PLX
  268. LDA #$03
  269. LDY #$02
  270. JSL !finish_oam
  271. .end
  272. RTS
  273.  
  274. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  275. ;; SubOffScreen x0
  276. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  277.  
  278. namespace "kek"
  279.  
  280. Table1: db $0C,$1C
  281. Table2: db $01,$02
  282. Table3: db $40,$B0
  283. Table6: db $01,$FF
  284. Table4: db $30,$C0,$A0,$C0,$A0,$F0,$60,$90,$30,$C0,$A0,$80,$A0,$40,$60,$B0
  285. Table5: db $01,$FF,$01,$FF,$01,$FF,$01,$FF,$01,$FF,$01,$FF,$01,$00,$01,$FF
  286.  
  287. SubOffscreenX0:
  288. LDA #$00
  289. ;BRA SubOffscreenMain
  290. ;SubOffscreenX1:
  291. ;LDA #$02
  292. ;BRA SubOffscreenMain
  293. ;SubOffscreenX2:
  294. ;LDA #$04
  295. ;BRA SubOffscreenMain
  296. ;SubOffscreenX3:
  297. ;LDA #$06
  298. ;BRA SubOffscreenMain
  299. ;SubOffscreenX4:
  300. ;LDA #$08
  301. ;BRA SubOffscreenMain
  302. ;SubOffscreenX5:
  303. ;LDA #$0A
  304. ;BRA SubOffscreenMain
  305. ;SubOffscreenX6:
  306. ;LDA #$0C
  307. ;BRA SubOffscreenMain
  308. ;SubOffscreenX7:
  309. ;LDA #$0E
  310.  
  311. SubOffscreenMain:
  312. STA $03
  313. JSR SubIsOffscreen
  314. BEQ Return2
  315. LDA $5B
  316. LSR
  317. BCS VerticalLevel
  318. LDA $3216,x
  319. CLC
  320. ADC #$50
  321. LDA $3258,x
  322. ADC #$00
  323. CMP #$02
  324. BPL EraseSprite
  325. LDA $7616,x
  326. AND #$04
  327. BNE Return2
  328. LDA $13
  329. AND #$01
  330. ORA $03
  331. STA $01
  332. TAY
  333. LDA $1A
  334. CLC
  335. ADC Table4,y
  336. ROL $00
  337. CMP $322C,x
  338. PHP
  339. LDA $1B
  340. LSR $00
  341. ADC Table5,y
  342. PLP
  343. SBC $326E,x
  344. STA $00
  345. LSR $01
  346. BCC Label20
  347. EOR #$80
  348. STA $00
  349. Label20:
  350. LDA $00
  351. BPL Return2
  352. EraseSprite:
  353. LDA $3242,x
  354. CMP #$08
  355. BCC KillSprite
  356. LDY $7578,x
  357. CPY #$FF
  358. BEQ KillSprite
  359. LDA #$00
  360. STA $7938,y
  361. KillSprite:
  362. STZ $3242,x
  363. Return2:
  364. RTS
  365. VerticalLevel:
  366. LDA $7616,x
  367. AND #$04
  368. BNE Return2
  369. LDA $13
  370. LSR
  371. BCS Return2
  372. AND #$01
  373. STA $01
  374. TAY
  375. LDA $1C
  376. CLC
  377. ADC Table3,y
  378. ROL $00
  379. CMP $3216,x
  380. PHP
  381. LDA $1D
  382. LSR $00
  383. ADC Table6,y
  384. PLP
  385. SBC $3258,x
  386. STA $00
  387. LDY $02
  388. BEQ Label22
  389. EOR #$80
  390. STA $00
  391. Label22:
  392. LDA $00
  393. BPL Return2
  394. BMI EraseSprite
  395. SubIsOffscreen:
  396. LDA $3376,x
  397. ORA $7642,x
  398. RTS
  399.  
  400. namespace off
  401.  
  402. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  403. ;; GetDrawInfo
  404. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  405.  
  406. get_draw_info:
  407. STZ $7642,x
  408. STZ $3376,x
  409. LDA $322C,x
  410. CMP $1A
  411. LDA $326E,x
  412. SBC $1B
  413. BEQ .OnscreenX
  414. INC $3376,x
  415. .OnscreenX
  416. LDA $326E,x
  417. XBA
  418. LDA $322C,x
  419. REP #$20
  420. SEC
  421. SBC $1A
  422. CLC
  423. ADC.w #$0040
  424. CMP #$0180
  425. SEP #$20
  426. ROL A
  427. AND #$01
  428. STA $7536,x
  429. BNE .Invalid
  430. LDY #$00
  431. LDA $75EA,x
  432. AND #$20
  433. BEQ .OnscreenLoop
  434. INY
  435. .OnscreenLoop
  436. LDA $3216,x
  437. CLC
  438. ADC .Table1,y
  439. PHP
  440. CMP $1C
  441. ROL $00
  442. PLP
  443. LDA $3258,x
  444. ADC #$00
  445. LSR $00
  446. SBC $1D
  447. BEQ .OnscreenY
  448. LDA $7642,x
  449. ORA .Table2,y
  450. STA $7642,x
  451. .OnscreenY
  452. DEY
  453. BPL .OnscreenLoop
  454. LDY $33A2,x
  455. LDA $322C,x
  456. SEC
  457. SBC $1A
  458. STA $00
  459. LDA $3216,x
  460. SEC
  461. SBC $1C
  462. STA $01
  463. RTS
  464. .Invalid
  465. PLA
  466. PLA
  467. RTS
  468.  
  469. .Table1 db $0C,$1C
  470. .Table2 db $01,$02
  471.  
  472. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  473. ;; Get Dynamic sprite slot
  474. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  475.  
  476. get_dynamic_slot:
  477. PHY
  478. LDY !slots_used
  479. CPY #!max_slots
  480. BEQ .no_free
  481. REP #$20
  482. AND #$00FF
  483. XBA
  484. LSR A
  485. STA !temp
  486. LDA.w #flag_gfx ;gfx_pointer
  487. CLC
  488. ADC !temp
  489. STA !slot_pointer
  490. SEP #$20
  491. PHB
  492. PLA
  493. STA !slot_bank
  494. LDY !slots_used
  495. LDA slots,y
  496. PHA
  497. SEC
  498. SBC #$C0
  499. REP #$20
  500. AND #$00FF
  501. ASL #5
  502. CLC
  503. ADC.w #!dsx_buffer
  504. STA !slot_dest
  505. JSR .dma_buffer
  506. SEP #$20
  507. INC !slots_used
  508. PLA
  509. PLY
  510. SEC
  511. RTS
  512. .no_free
  513. ;PLA
  514. PLY
  515. CLC
  516. RTS
  517.  
  518. .dma_buffer
  519. PHX
  520. LDA !slot_dest
  521. STA $2181
  522. LDY.b #!dsx_buffer>>16
  523. STY $2183
  524.  
  525. STZ $4300
  526. LDY #$80
  527. STY $4301
  528. LDX #$03
  529. LDA !slot_pointer
  530. .loop
  531. STA $4302
  532. LDY !slot_bank
  533. STY $4304
  534. LDA #$0080
  535. STA $4305
  536. LDY #$01
  537. STY $420B
  538.  
  539. DEX
  540. BMI .finish
  541.  
  542. LDA !slot_dest
  543. CLC
  544. ADC #$0200
  545. STA !slot_dest
  546. STA $2181
  547. LDA !slot_pointer
  548. CLC
  549. ADC #$0200
  550. STA !slot_pointer
  551. BRA .loop
  552. .finish
  553. PLX
  554. RTS
  555.  
  556. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  557. ;; Graphics
  558. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  559.  
  560. ;gfx_pointer:
  561. ; dw flag
  562. flag_gfx:
  563. incbin sprites/mid_flag.bin
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement