Guest User

Untitled

a guest
Oct 17th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.22 KB | None | 0 0
  1. ;==========
  2. ;KooPhD's Vial
  3. ;Yellow Vial = 3 fireballs.
  4. ;Red Vial = Mushroom.
  5. ;Black Vial = Bomb explosion.
  6. ;Blue Vial = Blue shelless Koopa.
  7. ;Green Vial = Bomb explosion (only spawns when killed).
  8. ;==========
  9.  
  10. !MushSFX = $03 ; SFX produced when a Mushroom is generated.
  11. !MushPort = $1DFC
  12.  
  13. !FireSFX = $17
  14. !FirePort = $1DFC
  15.  
  16. Rand: ; This table gets a random value.
  17. db $01,$01,$02,$03 ; More 00s = More Mushrooms.
  18. db $01,$02,$02,$01 ; More 01s = More chances of bomb explosions.
  19. db $01,$00,$03,$02 ; More 02s = More chances of fireballs.
  20. db $03,$02,$03,$00 ; More 03s = More chances of shelless Koopa.
  21.  
  22. XPos: db $F0,$00,$10,$20 ; Some properties of the spawned fireballs.
  23. XSps: db $FA,$00,$05,$0A
  24. YSps: db $D0,$D2,$D1,$D0
  25.  
  26. IMG: db $00,$02,$08,$02 ; Tile numbers of the vial, if you want it to use one frame then just keep all values the same.
  27.  
  28. print "INIT ", pc
  29. JSR SUB_HORZ_POS
  30. TYA
  31. STA $157C,x
  32. LDA $13
  33. AND #$0F
  34. PHX
  35. TAX
  36. LDA Rand,x
  37. PLX
  38. STA $C2,x
  39. RTL
  40.  
  41. Return:
  42. RTS
  43.  
  44. print "MAIN ", pc
  45. PHB
  46. PHK
  47. PLB
  48. JSR Run
  49. LDA $1510,x
  50. STA $0EFB
  51. PLB
  52. RTL
  53.  
  54. Run:
  55. JSR GFX
  56. JSR SUB_OFF_SCREEN_X0
  57.  
  58. LDA $14C8,x ;If the sprite is dead..
  59. CMP #$08
  60. BNE Return ;..return
  61. LDA $9D
  62. BNE Return ;Also return if sprites are locked.
  63.  
  64. LDA $1588,x
  65. AND #$04
  66. BEQ .A
  67. JMP OnGround
  68. .A LDA $1588,x
  69. AND #$03
  70. BEQ .B
  71. JMP OnGround
  72. .B
  73. LDA $1510,x
  74. BEQ +
  75. JMP EndAim
  76.  
  77. ;===============;
  78. ;X SPEED AIMING ;
  79. ;===============;
  80. +
  81. LDA #$01
  82. STA $1510,x
  83. LDY $157C,x
  84. LDA naut,y
  85. STA $B6,x
  86. LDA #$C0
  87. STA $AA,x
  88. JSL $01802A
  89. RTS
  90.  
  91. naut: db $30,$D0
  92.  
  93.  
  94. REP #$20
  95. LDA $14E0,x
  96. XBA
  97. LDA $E4,x
  98. SEC
  99. SBC $94
  100. SEP #$20
  101. PHA
  102. JSR SUB_HORZ_POS
  103. PLA
  104. EOR DirFix,y
  105. LSR #4
  106. PHY
  107. TAY
  108. LDA XSPEEDS,y
  109. PHA
  110. LDA $157C,x
  111. BEQ .R
  112. PLA
  113. EOR #$FF
  114. INC A
  115. BRA ++
  116. .R
  117. PLA
  118. ++
  119. ;STA $B6,x
  120. PLY
  121. ;===============;
  122. ;Y SPEED AIMING ;
  123. ;===============;
  124.  
  125. REP #$20
  126. LDA $14D4,x
  127. XBA
  128. LDA $D8,x
  129. SEC
  130. SBC $96
  131. SEP #$20
  132. PHA
  133. JSR SUB_VERT_POS
  134. PLA
  135. EOR DirFix,y
  136. LSR #4
  137. PHY
  138. TAY
  139. LDA YSPEEDS,y
  140. STA $AA,x
  141. PLY
  142. EndAim:
  143. JSL $01802A
  144. RTS
  145.  
  146. XSPEEDS:
  147. db $05,$0B,$10,$17
  148. db $1D,$22,$29,$2F
  149. db $35,$3C,$43,$4A
  150. db $50,$58,$60,$67
  151.  
  152. YSPEEDS:
  153. db $E0,$D0,$C0,$C0
  154. db $BA,$B6,$AB,$A6
  155. db $A2,$A0,$97,$90
  156. db $8E,$8B,$D5,$D0
  157.  
  158. OnGround:
  159. LDA $7FAB10,x
  160. AND #$04
  161. BNE Green
  162. LDA $C2,x
  163. BEQ Mush
  164. CMP #$01
  165. BNE +
  166. JMP Bomb
  167. + CMP #$03
  168. BEQ Koopa
  169. CMP #$02
  170. BNE +
  171. JMP Yellow
  172. + RTS
  173.  
  174. DirFix: db $FF,$00
  175.  
  176. Green:
  177. LDA $1504,x
  178. BNE EndSpawnX
  179. LDA $186C,x
  180. BNE EndSpawnX
  181. JSL $02A9DE
  182. BMI EndSpawnX
  183. LDA #$08
  184. STA $14C8,y
  185. LDA #$0D
  186. STA $009E,y
  187. LDA $E4,x
  188. STA $00E4,y
  189. LDA $14E0,x
  190. STA $14E0,y
  191. LDA $D8,x
  192. STA $00D8,y
  193. LDA $14D4,x
  194. STA $14D4,y
  195. LDA #$01
  196. STA $1540,y
  197. LDA #$01
  198. STA $1534,y
  199. LDA #$1B
  200. STA $167A,y
  201. LDA #$09
  202. STA $1686,y
  203. PHX
  204. TYX
  205. JSL $07F7D2
  206. PLX
  207. LDA #$01
  208. STA $1504,x
  209. EndSpawnX:
  210. STZ $14C8,x
  211. RTS
  212.  
  213. Mush:
  214. LDA $186C,x
  215. BNE EndSpawn
  216. JSL $02A9DE
  217. BMI EndSpawn
  218. LDA #$08
  219. STA $14C8,y
  220. LDA #$74
  221. JMP SPAWNSPR
  222.  
  223. Koopa:
  224. LDA $186C,x
  225. BNE EndSpawn
  226. JSL $02A9DE
  227. BMI EndSpawn
  228. LDA #$08
  229. STA $14C8,y
  230. LDA #$02
  231. SPAWNSPR:
  232. STA $009E,y
  233. LDA $E4,x
  234. STA $00E4,y
  235. LDA $14E0,x
  236. STA $14E0,y
  237. LDA $D8,x
  238. STA $00D8,y
  239. LDA $14D4,x
  240. STA $14D4,y
  241. PHX
  242. TYX
  243. JSL $07F7D2
  244. PLX
  245. LDA #!MushSFX
  246. STA !MushPort
  247. EndSpawn:
  248. LDA $1626,x
  249. BNE +
  250. JSR Smoke
  251. INC $1626,x
  252. +
  253. STZ $14C8,x
  254. RTS
  255.  
  256. Bomb:
  257. LDA #$15
  258. STA $1887
  259. LDA #$0D
  260. STA $9E,x
  261. LDA #$08
  262. STA $14C8,x
  263. JSL $07F7D2
  264. LDA #$01
  265. STA $1534,x
  266. LDA #$40
  267. STA $1540,x
  268. LDA #$09
  269. STA $1DFC
  270. LDA #$1B
  271. STA $167A,x
  272. RTS
  273.  
  274. Yellow:
  275. LDA #!FireSFX
  276. STA !FirePort
  277. LDA $E4,x
  278. STA $00
  279. LDA $14E0,x
  280. STA $01
  281. LDA $D8,x
  282. STA $02
  283. LDA $14D4,x
  284. STA $03
  285. PHX
  286. JSR SWNSPR
  287. PLX
  288. STZ $14C8,x
  289. RTS
  290.  
  291. SWNSPR:
  292. LDX #$09
  293. LDY #$00
  294. Loop:
  295. CPY #$04
  296. BCS EndLoop
  297. LDA $170B,x
  298. BEQ EmptySlot
  299. DEX
  300. BPL Loop
  301. EndLoop:
  302. RTS
  303. EmptySlot:
  304. LDA #$0B
  305. STA $170B,x
  306. LDA $00
  307. CLC
  308. ADC XPos,y
  309. STA $171F,x ; X position low byte
  310. LDA $01
  311. ADC #$00
  312. STA $1733,x ; X position high byte
  313. LDA $02
  314. STA $1715,x ; Y position low byte
  315. LDA $03
  316. STA $1729,x ; Y position high byte
  317. LDA YSps,y
  318. STA $173D,x
  319. LDA XSps,y
  320. STA $1747,x
  321. LDA #$DC
  322. STA $176F,x
  323. INY
  324. DEX
  325. BRA Loop
  326.  
  327. ;This routine makes a puff smoke effect.
  328. Smoke:
  329. LDY #$03
  330. -
  331. LDA $17C0,y
  332. BEQ +
  333. DEY
  334. BPL -
  335. RTS
  336. +
  337. LDA #$01
  338. STA $17C0,y
  339. LDA #$1C
  340. STA $17CC,y
  341. LDA $D8,x
  342. STA $17C4,y
  343. LDA $E4,x
  344. STA $17C8,y
  345. RTS
  346.  
  347. Props:
  348. db $69,$29
  349. db $6D,$2D
  350. db $65,$25
  351. db $67,$27
  352. db $6B,$2B
  353.  
  354. ;Sprite Routines
  355.  
  356. GFX:
  357. JSR GET_DRAW_INFO
  358. LDA $C2,x
  359. STA $04
  360. LDA $157C,x
  361. STA $02
  362. LDA $00
  363. STA $0300,y
  364. LDA $01
  365. STA $0301,y
  366. LDA $14
  367. LSR
  368. AND #$03
  369. PHX
  370. TAX
  371. LDA IMG,x
  372. PLX
  373. STA $0302,y
  374.  
  375. LDA $7FAB10,x
  376. AND #$04
  377. BEQ +
  378. PHX
  379. LDA #$08
  380. CLC
  381. ADC $02
  382. TAX
  383. LDA Props,x
  384. BRA ++
  385. +
  386. LDA $04
  387. ASL A
  388. CLC
  389. ADC $02
  390. PHX
  391. TAX
  392. LDA Props,x
  393. ++
  394. ORA $64
  395. STA $0303,y
  396.  
  397. INY #4
  398. PLX
  399. LDY #$02
  400. LDA #$00
  401. JSL $01B7B3
  402. RTS
  403.  
  404. ;=================;
  405. ;SUB_HORZ_POS
  406. ;=================;
  407.  
  408. SUB_HORZ_POS:
  409. LDY #$00
  410. LDA $D1
  411. SEC
  412. SBC $E4,x
  413. STA $0F
  414. LDA $D2
  415. SBC $14E0,x
  416. BPL SPR_L16
  417. INY
  418. SPR_L16:
  419. RTS
  420.  
  421. ;=================;
  422. ;SUB_VERT_POS
  423. ;=================;
  424.  
  425. SUB_VERT_POS:
  426. LDY #$00
  427. LDA $D3
  428. SEC
  429. SBC $D8,x
  430. STA $0F
  431. LDA $D4
  432. SBC $14D4,x
  433. BPL SPR_L11
  434. INY
  435. SPR_L11:
  436. RTS
  437.  
  438. ;=================;
  439. ;SUB_OFF_SCREEN
  440. ;=================;
  441.  
  442. SPR_T12:
  443. db $40,$B0
  444. SPR_T13:
  445. db $01,$FF
  446. SPR_T14:
  447. db $30,$C0,$A0,$C0,$A0,$F0,$60,$90
  448. db $30,$C0,$A0,$80,$A0,$40,$60,$B0
  449. SPR_T15:
  450. db $01,$FF,$01,$FF,$01,$FF,$01,$FF
  451. db $01,$FF,$01,$FF,$01,$00,$01,$FF
  452.  
  453. SUB_OFF_SCREEN_X1:
  454. LDA #$02
  455. BRA STORE_03
  456. SUB_OFF_SCREEN_X2:
  457. LDA #$04
  458. BRA STORE_03
  459. SUB_OFF_SCREEN_X3:
  460. LDA #$06
  461. BRA STORE_03
  462. SUB_OFF_SCREEN_X4:
  463. LDA #$08
  464. BRA STORE_03
  465. SUB_OFF_SCREEN_X5:
  466. LDA #$0A
  467. BRA STORE_03
  468. SUB_OFF_SCREEN_X6:
  469. LDA #$0C
  470. BRA STORE_03
  471. SUB_OFF_SCREEN_X7:
  472. LDA #$0E
  473. STORE_03:
  474. STA $03
  475. BRA START_SUB
  476. SUB_OFF_SCREEN_X0:
  477. STZ $03
  478.  
  479. START_SUB:
  480. JSR SUB_IS_OFF_SCREEN
  481. BEQ RETURN_35
  482. LDA $5B
  483. AND #$01
  484. BNE VERTICAL_LEVEL
  485. LDA $D8,x
  486. CLC
  487. ADC #$50
  488. LDA $14D4,x
  489. ADC #$00
  490. CMP #$02
  491. BPL ERASE_SPRITE
  492. LDA $167A,x
  493. AND #$04
  494. BNE RETURN_35
  495. LDA $13
  496. AND #$01
  497. ORA $03
  498. STA $01
  499. TAY
  500. LDA $1A
  501. CLC
  502. ADC SPR_T14,y
  503. ROL $00
  504. CMP $E4,x
  505. PHP
  506. LDA $1B
  507. LSR $00
  508. ADC SPR_T15,y
  509. PLP
  510. SBC $14E0,x
  511. STA $00
  512. LSR $01
  513. BCC SPR_L31
  514. EOR #$80
  515. STA $00
  516. SPR_L31:
  517. LDA $00
  518. BPL RETURN_35
  519. ERASE_SPRITE:
  520. LDA $14C8,x
  521. CMP #$08
  522. BCC KILL_SPRITE
  523. LDY $161A,x
  524. CPY #$FF
  525. BEQ KILL_SPRITE
  526. LDA #$00
  527. STA $1938,y
  528. KILL_SPRITE:
  529. STZ $14C8,x
  530. RETURN_35:
  531. RTS
  532.  
  533. VERTICAL_LEVEL:
  534. LDA $167A,x
  535. AND #$04
  536. BNE RETURN_35
  537. LDA $13
  538. LSR A
  539. BCS RETURN_35
  540. LDA $E4,x
  541. CMP #$00
  542. LDA $14E0,x
  543. SBC #$00
  544. CMP #$02
  545. BCS ERASE_SPRITE
  546. LDA $13
  547. LSR A
  548. AND #$01
  549. STA $01
  550. TAY
  551. LDA $1C
  552. CLC
  553. ADC SPR_T12,y
  554. ROL $00
  555. CMP $D8,x
  556. PHP
  557. LDA $001D
  558. LSR $00
  559. ADC SPR_T13,y
  560. PLP
  561. SBC $14D4,x
  562. STA $00
  563. LDY $01
  564. BEQ SPR_L38
  565. EOR #$80
  566. STA $00
  567. SPR_L38:
  568. LDA $00
  569. BPL RETURN_35
  570. BMI ERASE_SPRITE
  571.  
  572. SUB_IS_OFF_SCREEN:
  573. LDA $15A0,x
  574. ORA $186C,x
  575. RTS
  576.  
  577. ;================;
  578. ;GET_DRAW_INFO
  579. ;================;
  580.  
  581. SPR_T1:
  582. db $0C,$1C
  583. SPR_T2:
  584. db $01,$02
  585.  
  586. GET_DRAW_INFO:
  587. STZ $186C,x
  588. STZ $15A0,x
  589. LDA $E4,x
  590. CMP $1A
  591. LDA $14E0,x
  592. SBC $1B
  593. BEQ ON_SCREEN_X
  594. INC $15A0,x
  595.  
  596. ON_SCREEN_X:
  597. LDA $14E0,x
  598. XBA
  599. LDA $E4,x
  600. REP #$20
  601. SEC
  602. SBC $1A
  603. CLC
  604. ADC.w #$0040
  605. CMP.w #$0180
  606. SEP #$20
  607. ROL A
  608. AND #$01
  609. STA $15C4,x
  610. BNE INVALID
  611.  
  612. LDY #$00
  613. LDA $1662,x
  614. AND #$20
  615. BEQ ON_SCREEN_LOOP
  616. INY
  617. ON_SCREEN_LOOP:
  618. LDA $D8,x
  619. CLC
  620. ADC SPR_T1,y
  621. PHP
  622. CMP $1C
  623. ROL $00
  624. PLP
  625. LDA $14D4,x
  626. ADC #$00
  627. LSR $00
  628. SBC $1D
  629. BEQ ON_SCREEN_Y
  630. LDA $186C,x
  631. ORA SPR_T2,y
  632. STA $186C,x
  633. ON_SCREEN_Y:
  634. DEY
  635. BPL ON_SCREEN_LOOP
  636. LDY $15EA,x
  637. LDA $E4,x
  638. SEC
  639. SBC $1A
  640. STA $00
  641. LDA $D8,x
  642. SEC
  643. SBC $1C
  644. STA $01
  645. RTS
  646.  
  647. INVALID:
  648. PLA
  649. PLA
  650. RTS
  651.  
  652. CODE_01BF6A: STA $01
  653. PHX ;\ preserve sprite indexes of Magikoopa and magic
  654. PHY ;/
  655. JSR CODE_01AD42 ; $0E = vertical distance to Mario
  656. STY $02 ; $02 = vertical direction to Mario
  657. LDA $0E ;\ $0C = vertical distance to Mario, positive
  658. BPL CODE_01BF7C ; |
  659. EOR #$FF ; |
  660. CLC ; |
  661. ADC #$01 ; |
  662. CODE_01BF7C: STA $0C ;/
  663. JSR SUB_HORZ_POS ; $0F = horizontal distance to Mario
  664. STY $03 ; $03 = horizontal direction to Mario
  665. LDA $0F ;\ $0D = horizontal distance to Mario, positive
  666. BPL CODE_01BF8C ; |
  667. EOR #$FF ; |
  668. CLC ; |
  669. ADC #$01 ; |
  670. CODE_01BF8C: STA $0D ;/
  671. LDY #$00
  672. LDA $0D ;\ if vertical distance less than horizontal distance,
  673. CMP $0C ; |
  674. BCS CODE_01BF9F ;/ branch
  675. INY ; set y register
  676. PHA ;\ switch $0C and $0D
  677. LDA $0C ; |
  678. STA $0D ; |
  679. PLA ; |
  680. STA $0C ;/
  681. CODE_01BF9F: LDA #$00 ;\ zero out $00 and $0B
  682. STA $0B ; | ...what's wrong with STZ?
  683. STA $00 ;/
  684. LDX $01 ;\ divide $0C by $0D?
  685. CODE_01BFA7: LDA $0B ; |\ if $0C + loop counter is less than $0D,
  686. CLC ; | |
  687. ADC $0C ; | |
  688. CMP $0D ; | |
  689. BCC CODE_01BFB4 ; |/ branch
  690. SBC $0D ; | else, subtract $0D
  691. INC $00 ; | and increase $00
  692. CODE_01BFB4: STA $0B ; |
  693. DEX ; |\ if still cycles left to run,
  694. BNE CODE_01BFA7 ;/ / go to start of loop
  695. TYA ;\ if $0C and $0D was not switched,
  696. BEQ CODE_01BFC6 ;/ branch
  697. LDA $00 ;\ else, switch $00 and $01
  698. PHA ; |
  699. LDA $01 ; |
  700. STA $00 ; |
  701. PLA ; |
  702. STA $01 ;/
  703. CODE_01BFC6: LDA $00 ;\ if horizontal distance was inverted,
  704. LDY $02 ; | invert $00
  705. BEQ CODE_01BFD3 ; |
  706. EOR #$FF ; |
  707. CLC ; |
  708. ADC #$01 ; |
  709. STA $00 ;/
  710. CODE_01BFD3: LDA $01 ;\ if vertical distance was inverted,
  711. LDY $03 ; | invert $01
  712. BEQ CODE_01BFE0 ; |
  713. EOR #$FF ; |
  714. CLC ; |
  715. ADC #$01 ; |
  716. STA $01 ;/
  717. CODE_01BFE0: PLY ;\ retrieve Magikoopa and magic sprite indexes
  718. PLX ;/
  719. RTS ; return
  720.  
  721. CODE_01AD42: LDY #$00
  722. LDA $D3
  723. SEC
  724. SBC $D8,x
  725. STA $0E
  726. LDA $D4
  727. SBC $14D4,x
  728. BPL Return01AD53
  729. INY
  730. Return01AD53: RTS ; return
Add Comment
Please, Sign In to add comment