Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 175.28 KB | None | 0 0
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;; Chumlee's Adventure, for the Nintendo Entertainment System ;;
  3. ;; Programmed by Kevin Hanley, www.khangames.com ;;
  4. ;; Programmed in 6502 Assmebly Language, nesasm3.exe ;;
  5. ;; Graphics by Peek-a-Brews ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  9. ;EMULATOR ;;COMMENT OUT FOR REAL HARDWARE ;;
  10. ;DEMO ;;COMMENT OUT FOR RETAIL RELEASE ;;
  11. ;MOUSE ;;COMMENT OUT IF NOT USING MOUSE ;;
  12. ;GTROM ;;COMMENT OUT IF NOT USING GTROM ;;
  13. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  14.  
  15. ;; Header Information ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  16. .inesprg 4 ; 16x 16KB PRG code ;;
  17. .ineschr 0 ; 1x 8KB CHR data ;;
  18. .inesmap 2 ; mapper 2 = UNROM ;;
  19. .inesmir 1 ; background mirroring ;;
  20. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  21.  
  22. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  23. SPRITE_BANKV .EQU $0604 ;;
  24. SPRITE_BANK .EQU $0607 ;;
  25. PLAYERV .EQU $0630 ;;
  26. PLAYER .EQU $0633 ;;
  27. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  28.  
  29. ;; Zero Page Variables ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  30. .rsset $0000 ;;
  31. .include "zeropage.asm" ;;
  32. .rsset $0400 ;;
  33. EnemyAnimateTimer: .rs 20 ;;
  34. .rsset $0420 ;;
  35. EnemyMovePart: .rs 48 ;;
  36. EndPart: .rs 32 ;;
  37. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  38.  
  39. .bank 0
  40. .org $8000
  41.  
  42. .include "Music/PawnStars.asm"
  43. .include "Music/sfx.asm"
  44.  
  45. CheckForPause:
  46. LDA ButtonsP1
  47. AND #%00010000
  48. BEQ .End
  49. LDA StartHeld
  50. CMP #$01
  51. BEQ .End
  52. LDA #$01
  53. STA StartHeld
  54. LDA PausedFlag
  55. CMP #$01
  56. BEQ .Reset
  57. LDA #$01
  58. STA PausedFlag
  59. LDA #$03
  60. STA SoundEffect
  61. LDA #$01
  62. STA PlaySound
  63. LDA #$05
  64. JSR FamiToneMusicPlay
  65. ; JSR FamiToneMusicPause
  66. .End:
  67. RTS
  68. .Reset:
  69. LDA #$00
  70. STA PausedFlag
  71. LDA #$04
  72. STA SoundEffect
  73. LDA #$01
  74. STA PlaySound
  75. LDA BossPlacedFlag
  76. CMP #$01
  77. BEQ .Boss
  78. LDA #$01
  79. JSR FamiToneMusicPlay
  80. ; JSR FamiToneMusicPause
  81. RTS
  82. .Boss:
  83. LDA #$02
  84. JSR FamiToneMusicPlay
  85. RTS
  86.  
  87. CoreyAttackCollision:
  88. LDX #$00
  89. LDY #$00
  90. .StartAgain:
  91. LDA JumpFlag
  92. CMP #$00
  93. BEQ .NotJumping
  94. JMP .JumpAttack
  95. .NotJumping:
  96. LDA DuckFlag
  97. CMP #$00
  98. BEQ .NotDuck
  99. JMP .DuckAttack
  100. .NotDuck:
  101. ;regular attack
  102. LDA $061D
  103. CMP #$19
  104. BNE .HitRight
  105.  
  106. LDA $0604
  107. CLC
  108. ADC #$28
  109. CMP $0644
  110. BCC .HitRight
  111.  
  112. ;0640, 0644
  113. ;0648, 064c, 0650
  114. ;0654, 0658, 065c, 0660
  115. ;0664, 0668, 066c, 0670
  116. ;0674, 0678, 067c, 0680
  117.  
  118. .HitLeft:
  119. LDA $0663
  120. CLC
  121. ADC #$07
  122. CMP $0607
  123. BCC .HitRight
  124.  
  125. LDA $0607
  126. CLC
  127. ADC #$04
  128. CMP $0663
  129. BCC .HitRight
  130.  
  131. JSR AttackLanded
  132. .End:
  133. RTS
  134. .HitRight:
  135. ;0640, 0644
  136. ;0648, 064c, 0650
  137. ;0654, 0658, 065c, 0660
  138. ;0664, 0668, 066c, 0670
  139. ;0674, 0678, 067c, 0680
  140.  
  141. LDA $0607
  142. CLC
  143. ADC #$08
  144. CMP $0663
  145. BCC .End
  146.  
  147. LDA $0663
  148. CLC
  149. ADC #$04
  150. CMP $0607
  151. BCC .End
  152.  
  153. JSR AttackLanded
  154. JMP .End
  155. .JumpAttack:
  156. LDA $061D
  157. CMP #$34
  158. BNE .End
  159.  
  160. LDA $0604
  161. CLC
  162. ADC #$28
  163. CMP $0644,x
  164. BCC .End
  165.  
  166. .JumpHitLeft:
  167. LDA $0663
  168. CLC
  169. ADC #$0E
  170. CMP $0607
  171. BCC .JumpHitRight
  172.  
  173. LDA $0607
  174. CLC
  175. ADC #$04
  176. CMP $0663
  177. BCC .JumpHitRight
  178.  
  179. JSR AttackLanded
  180. JMP .End
  181. .JumpHitRight:
  182. LDA $0607
  183. CLC
  184. ADC #$0E
  185. CMP $0663
  186. BCC .End
  187.  
  188. LDA $0663
  189. CLC
  190. ADC #$04
  191. CMP $0607
  192. BCS .Here
  193. JMP .End
  194. .Here:
  195. JSR AttackLanded
  196. .End2:
  197. JMP .End
  198. .DuckAttack:
  199. LDA $061D
  200. CMP #$34
  201. BNE .End2
  202.  
  203. .DuckHitLeft:
  204. LDA $0663
  205. CLC
  206. ADC #$0E
  207. CMP $0607
  208. BCC .DuckHitRight
  209.  
  210. LDA $0607
  211. CLC
  212. ADC #$04
  213. CMP $0663
  214. BCC .DuckHitRight
  215.  
  216. JSR AttackLanded
  217. JMP .End
  218. .DuckHitRight:
  219. LDA $0607
  220. CLC
  221. ADC #$0E
  222. CMP $0663
  223. BCC .End2
  224.  
  225. LDA $0663
  226. CLC
  227. ADC #$04
  228. CMP $0607
  229. BCC .End2
  230. JSR AttackLanded
  231. JMP .End
  232.  
  233. DarkChumAttackCollision:
  234. LDX #$00
  235. LDY #$00
  236. .StartAgain:
  237. LDA JumpFlag
  238. CMP #$00
  239. BEQ .NotJumping
  240. JMP .JumpAttack
  241. .NotJumping:
  242. LDA DuckFlag
  243. CMP #$00
  244. BEQ .NotDuck
  245. JMP .DuckAttack
  246. .NotDuck:
  247. ;regular attack
  248. LDA $061D
  249. CMP #$19
  250. BNE .HitRight
  251.  
  252. LDA $0604
  253. CLC
  254. ADC #$28
  255. CMP $0644
  256. BCC .HitRight
  257.  
  258. ;0640, 0644
  259. ;0648, 064c, 0650
  260. ;0654, 0658, 065c, 0660
  261. ;0664, 0668, 066c, 0670
  262. ;0674, 0678, 067c, 0680
  263.  
  264. .HitLeft:
  265. LDA $0663
  266. CLC
  267. ADC #$10
  268. CMP $0607
  269. BCC .HitRight
  270.  
  271. LDA $0607
  272. CLC
  273. ADC #$04
  274. CMP $0663
  275. BCC .HitRight
  276.  
  277. JSR AttackLanded
  278. .End:
  279. RTS
  280. .HitRight:
  281. ;0640, 0644
  282. ;0648, 064c, 0650
  283. ;0654, 0658, 065c, 0660
  284. ;0664, 0668, 066c, 0670
  285. ;0674, 0678, 067c, 0680
  286.  
  287. LDA $0607
  288. CLC
  289. ADC #$10
  290. CMP $0663
  291. BCC .End
  292.  
  293. LDA $0663
  294. CLC
  295. ADC #$04
  296. CMP $0607
  297. BCC .End
  298.  
  299. JSR AttackLanded
  300. JMP .End
  301. .JumpAttack:
  302. LDA $061D
  303. CMP #$34
  304. BNE .End
  305.  
  306. LDA $0604
  307. CLC
  308. ADC #$28
  309. CMP $0644,x
  310. BCC .End
  311.  
  312. .JumpHitLeft:
  313. LDA $0663
  314. CLC
  315. ADC #$0E
  316. CMP $0607
  317. BCC .JumpHitRight
  318.  
  319. LDA $0607
  320. CLC
  321. ADC #$04
  322. CMP $0663
  323. BCC .JumpHitRight
  324.  
  325. JSR AttackLanded
  326. JMP .End
  327. .JumpHitRight:
  328. LDA $0607
  329. CLC
  330. ADC #$0E
  331. CMP $0663
  332. BCC .End
  333.  
  334. LDA $0663
  335. CLC
  336. ADC #$04
  337. CMP $0607
  338. BCS .Here
  339. JMP .End
  340. .Here:
  341. JSR AttackLanded
  342. .End2:
  343. JMP .End
  344. .DuckAttack:
  345. LDA $061D
  346. CMP #$34
  347. BNE .End2
  348.  
  349. .DuckHitLeft:
  350. LDA $0663
  351. CLC
  352. ADC #$0E
  353. CMP $0607
  354. BCC .DuckHitRight
  355.  
  356. LDA $0607
  357. CLC
  358. ADC #$04
  359. CMP $0663
  360. BCC .DuckHitRight
  361.  
  362. JSR AttackLanded
  363. JMP .End
  364. .DuckHitRight:
  365. LDA $0607
  366. CLC
  367. ADC #$0E
  368. CMP $0663
  369. BCC .End2
  370.  
  371. LDA $0663
  372. CLC
  373. ADC #$04
  374. CMP $0607
  375. BCC .End2
  376. JSR AttackLanded
  377. JMP .End
  378.  
  379. RickAttackCollision:
  380. LDX #$00
  381. LDY #$00
  382. .StartAgain:
  383. LDA JumpFlag
  384. CMP #$00
  385. BEQ .NotJumping
  386. JMP .JumpAttack
  387. .NotJumping:
  388. LDA DuckFlag
  389. CMP #$00
  390. BEQ .NotDuck
  391. JMP .DuckAttack
  392. .NotDuck:
  393. ;regular attack
  394. LDA $061D
  395. CMP #$19
  396. BNE .HitRight
  397.  
  398. LDA $0604
  399. CLC
  400. ADC #$28
  401. CMP $0644
  402. BCC .HitRight
  403.  
  404. ;0640, 0644
  405. ;0648, 064c, 0650
  406. ;0654, 0658, 065c, 0660
  407. ;0664, 0668, 066c, 0670
  408. ;0674, 0678, 067c, 0680
  409.  
  410. .HitLeft:
  411. LDA $0663
  412. CLC
  413. ADC #$12
  414. CMP $0607
  415. BCC .HitRight
  416.  
  417. LDA $0607
  418. CLC
  419. ADC #$04
  420. CMP $0663
  421. BCC .HitRight
  422.  
  423. JSR AttackLanded
  424. .End:
  425. RTS
  426. .HitRight:
  427. ;0640, 0644
  428. ;0648, 064c, 0650
  429. ;0654, 0658, 065c, 0660
  430. ;0664, 0668, 066c, 0670
  431. ;0674, 0678, 067c, 0680
  432.  
  433. LDA $0607
  434. CLC
  435. ADC #$12
  436. CMP $0663
  437. BCC .End
  438.  
  439. LDA $0663
  440. CLC
  441. ADC #$04
  442. CMP $0607
  443. BCC .End
  444.  
  445. JSR AttackLanded
  446. JMP .End
  447. .JumpAttack:
  448. LDA $061D
  449. CMP #$34
  450. BNE .End
  451.  
  452. LDA $0604
  453. CLC
  454. ADC #$28
  455. CMP $0644,x
  456. BCC .End
  457.  
  458. .JumpHitLeft:
  459. LDA $0663
  460. CLC
  461. ADC #$0E
  462. CMP $0607
  463. BCC .JumpHitRight
  464.  
  465. LDA $0607
  466. CLC
  467. ADC #$04
  468. CMP $0663
  469. BCC .JumpHitRight
  470.  
  471. JSR AttackLanded
  472. JMP .End
  473. .JumpHitRight:
  474. LDA $0607
  475. CLC
  476. ADC #$0E
  477. CMP $0663
  478. BCC .End
  479.  
  480. LDA $0663
  481. CLC
  482. ADC #$04
  483. CMP $0607
  484. BCS .Here
  485. JMP .End
  486. .Here:
  487. JSR AttackLanded
  488. .End2:
  489. JMP .End
  490. .DuckAttack:
  491. LDA $061D
  492. CMP #$34
  493. BNE .End2
  494.  
  495. .DuckHitLeft:
  496. LDA $0663
  497. CLC
  498. ADC #$0E
  499. CMP $0607
  500. BCC .DuckHitRight
  501.  
  502. LDA $0607
  503. CLC
  504. ADC #$04
  505. CMP $0663
  506. BCC .DuckHitRight
  507.  
  508. JSR AttackLanded
  509. JMP .End
  510. .DuckHitRight:
  511. LDA $0607
  512. CLC
  513. ADC #$0E
  514. CMP $0663
  515. BCC .End2
  516.  
  517. LDA $0663
  518. CLC
  519. ADC #$04
  520. CMP $0607
  521. BCC .End2
  522. JSR AttackLanded
  523. JMP .End
  524.  
  525. AntoineAttackCollision:
  526. LDX #$00
  527. LDY #$00
  528. .StartAgain:
  529. LDA JumpFlag
  530. CMP #$00
  531. BEQ .NotJumping
  532. JMP .JumpAttack
  533. .NotJumping:
  534. LDA DuckFlag
  535. CMP #$00
  536. BEQ .NotDuck
  537. JMP .DuckAttack
  538. .NotDuck:
  539. ;regular attack
  540. LDA $061D
  541. CMP #$19
  542. BNE .HitRight
  543.  
  544. LDA $0604
  545. CLC
  546. ADC #$28
  547. CMP $0644
  548. BCC .HitRight
  549.  
  550. .HitLeft:
  551. LDA $0663
  552. CLC
  553. ADC #$15
  554. CMP $0607
  555. BCC .HitRight
  556.  
  557. LDA $0607
  558. CLC
  559. ADC #$04
  560. CMP $0663
  561. BCC .HitRight
  562.  
  563. JSR AttackLanded
  564. .End:
  565. RTS
  566. .HitRight:
  567. ;0640, 0644
  568. ;0648, 064c, 0650
  569. ;0654, 0658, 065c, 0660
  570. ;0664, 0668, 066c, 0670
  571. ;0674, 0678, 067c, 0680
  572.  
  573. LDA $0607 ;EE ;E3 too far back
  574. CLC
  575. ADC #$15
  576. CMP #$03
  577. BCC .Landed
  578. CMP $0663 ;F9
  579. BCC .End
  580.  
  581. LDA $0663
  582. CLC
  583. ADC #$02
  584. CMP $0607
  585. BCC .End
  586. .Landed:
  587. JSR AttackLanded
  588. JMP .End
  589. .JumpAttack:
  590. LDA $061D
  591. CMP #$34
  592. BNE .End
  593.  
  594. LDA $0604
  595. CLC
  596. ADC #$28
  597. CMP $0644,x
  598. BCC .End
  599.  
  600. .JumpHitLeft:
  601. LDA $0663
  602. CLC
  603. ADC #$0E
  604. CMP $0607
  605. BCC .JumpHitRight
  606.  
  607. LDA $0607
  608. CLC
  609. ADC #$04
  610. CMP $0663
  611. BCC .JumpHitRight
  612.  
  613. JSR AttackLanded
  614. JMP .End
  615. .JumpHitRight:
  616. LDA $0607
  617. CLC
  618. ADC #$0E
  619. CMP $0663
  620. BCC .End
  621.  
  622. LDA $0663
  623. CLC
  624. ADC #$04
  625. CMP $0607
  626. BCS .Here
  627. JMP .End
  628. .Here:
  629. JSR AttackLanded
  630. .End2:
  631. JMP .End
  632. .DuckAttack:
  633. LDA $061D
  634. CMP #$34
  635. BNE .End2
  636.  
  637. .DuckHitLeft:
  638. LDA $0663
  639. CLC
  640. ADC #$0E
  641. CMP $0607
  642. BCC .DuckHitRight
  643.  
  644. LDA $0607
  645. CLC
  646. ADC #$04
  647. CMP $0663
  648. BCC .DuckHitRight
  649.  
  650. JSR AttackLanded
  651. JMP .End
  652. .DuckHitRight:
  653. LDA $0607
  654. CLC
  655. ADC #$0E
  656. CMP $0663
  657. BCC .End2
  658.  
  659. LDA $0663
  660. CLC
  661. ADC #$04
  662. CMP $0607
  663. BCC .End2
  664. JSR AttackLanded
  665. JMP .End
  666.  
  667. ;;;;;;;;;;;
  668.  
  669. .bank 1
  670. .org $A000
  671.  
  672. TitleNam:
  673. .incbin "Nametables/title.nam"
  674.  
  675. PlayingNam:
  676. .incbin "Nametables/floor.nam"
  677.  
  678. EndingNam:
  679. .incbin "Nametables/ending.nam"
  680.  
  681. CreditsNam:
  682. .incbin "Nametables/credits.nam"
  683.  
  684. TitleATTR:
  685. .incbin "Nametables/title.atr"
  686.  
  687. PlayingATTR:
  688. .incbin "Nametables/floor.atr"
  689.  
  690. CreditsATTR:
  691. .incbin "Nametables/credits.atr"
  692.  
  693. EndingATTR:
  694. .incbin "Nametables/ending.atr"
  695.  
  696. InterludeNam:
  697. .incbin "Nametables/interlude.nam"
  698.  
  699. ;;;;;;;;;;;
  700.  
  701. .bank 2
  702. .org $8000
  703.  
  704. TitleSelect:
  705. LDA ButtonsP1
  706. AND #%00100000
  707. BEQ .End
  708. LDA SelectHeld
  709. CMP #$01
  710. BEQ .End
  711. LDA #$01
  712. STA SelectHeld
  713.  
  714. ; LDA #$00
  715. ; STA SoundEffect
  716. ; LDA #$01
  717. ; STA PlaySound
  718.  
  719. LDX #00
  720. .Loop:
  721. LDA $0600,x
  722. CLC
  723. ADC #$10
  724. STA $0600,x
  725. INX
  726. INX
  727. INX
  728. INX
  729. CPX #$10
  730. BNE .Loop
  731.  
  732. LDA $0600
  733. CMP #$C2
  734. BNE .End
  735. LDA #$82
  736. STA $0600
  737. STA $0604
  738. LDA #$8A
  739. STA $0608
  740. STA $060C
  741. .End:
  742. RTS
  743.  
  744. RunBoss:
  745. LDA BossDead
  746. CMP #$00
  747. BNE .End
  748. JSR RunAntoine
  749. JSR RunCorey
  750. JSR RunRick
  751. JSR RunDarkChum
  752. .End:
  753. RTS
  754.  
  755. RunAntoine:
  756. LDA CurrentFloor
  757. CMP #$00
  758. BNE .End
  759. LDA BossPlacedFlag
  760. CMP #$01
  761. BNE .End
  762. JSR MoveAntoine
  763. INC BossTimer
  764. LDA BossTimer
  765. CMP #$20
  766. BEQ .1
  767. CMP #$40
  768. BEQ .2
  769. .End:
  770. RTS
  771. .1:
  772. JSR PlaceWorkGraphic
  773. LDA #$67
  774. STA $0641
  775. LDA #$68
  776. STA $0645
  777. LDA #$6C
  778. STA $064D
  779. LDA #$6D
  780. STA $0651
  781. LDA #$73
  782. STA $0659
  783. LDA #$74
  784. STA $065D
  785. LDA CurrentFloor
  786. CMP #$00
  787. BNE .End
  788. LDA #$01
  789. STA BossPhase
  790. RTS
  791. .2:
  792. JSR KillWorkGraphic
  793. LDX #$00
  794. LDY #$00
  795. .Loop:
  796. LDA AntoineFat,x
  797. STA $0641,y
  798. INX
  799. TYA
  800. CLC
  801. ADC #$04
  802. TAY
  803. CPX #$13
  804. BNE .Loop
  805. LDA CurrentFloor
  806. CMP #$00
  807. BNE .End
  808. LDA #$02
  809. STA BossPhase
  810. RTS
  811.  
  812. KillWorkGraphic:
  813. LDX #$00
  814. .Loop:
  815. LDA #$FE
  816. STA $06C0,x
  817. INX
  818. INX
  819. INX
  820. INX
  821. CPX #$10
  822. BNE .Loop
  823. RTS
  824.  
  825. MoveAntoine:
  826. LDA BossPhase
  827. CMP #$02
  828. BNE .End
  829. LDA $0642
  830. CMP #$02
  831. BEQ .Left
  832. LDX #$00
  833. .Loop:
  834. LDA $0643,x
  835. CLC
  836. ADC #$04
  837. STA $0643,x
  838. INX
  839. INX
  840. INX
  841. INX
  842. CPX #$4C
  843. BNE .Loop
  844. LDA $0643
  845. CMP #$F8
  846. BCS .Stop
  847. .End:
  848. RTS
  849. .Stop:
  850. JSR SetAntoineSprite
  851. LDA #$03
  852. STA BossPhase
  853. JSR RotateAntoineSprites
  854. RTS
  855. .Left:
  856. LDX #$00
  857. .Loop2:
  858. LDA $0643,x
  859. SEC
  860. SBC #$04
  861. STA $0643,x
  862. INX
  863. INX
  864. INX
  865. INX
  866. CPX #$4C
  867. BNE .Loop2
  868. LDA $0643
  869. CMP #$05
  870. BCC .Stop
  871. RTS
  872.  
  873. ActuallyPlaceAntoine:
  874. LDA #$8C
  875. STA $0640
  876. STA $0644
  877. STA $0648
  878. CLC
  879. ADC #$08
  880. STA $064C
  881. STA $0650
  882. STA $0654
  883. CLC
  884. ADC #$08
  885. STA $0658
  886. STA $065C
  887. STA $0660
  888. CLC
  889. ADC #$08
  890. STA $0664
  891. STA $0668
  892. STA $066C
  893. CLC
  894. ADC #$08
  895. STA $0670
  896. STA $0674
  897. STA $0678
  898. CLC
  899. ADC #$08
  900. STA $067C
  901. STA $0680
  902. STA $0684
  903.  
  904. LDA #$11
  905. STA $0643
  906. STA $064F
  907. STA $065B
  908. STA $0667
  909. STA $0673
  910. STA $067F
  911. SEC
  912. SBC #$08
  913. STA $0647
  914. STA $0653
  915. STA $065F
  916. STA $066B
  917. STA $0677
  918. STA $0683
  919. SEC
  920. SBC #$08
  921. STA $064B
  922. STA $0657
  923. STA $0663
  924. STA $066F
  925. STA $067B
  926. STA $0687
  927.  
  928. LDA #%01000010
  929. STA $0642
  930. STA $0646
  931. STA $064A
  932. STA $064E
  933. STA $0652
  934. STA $0656
  935. STA $065A
  936. STA $065E
  937. STA $0662
  938. STA $0666
  939. STA $066A
  940. STA $066E
  941. STA $0672
  942. STA $0676
  943. STA $067A
  944. STA $067E
  945. STA $0682
  946. STA $0686
  947. JSR SetAntoineSprite
  948. RTS
  949.  
  950. SetAntoineSprite:
  951. LDX #$00
  952. LDY #$00
  953.  
  954. .Loop:
  955. LDA AntoineStanding,x
  956. STA $0641,y
  957. INX
  958. TYA
  959. CLC
  960. ADC #$04
  961. TAY
  962. CPX #$12
  963. BNE .Loop
  964. LDA #$01
  965. STA BossPlacedFlag
  966. RTS
  967.  
  968. AntoineStanding:
  969. .db $69,$6A,$00
  970. .db $6E,$6F,$00
  971. .db $75,$76,$77
  972. .db $7B,$7C,$7D
  973. .db $81,$82,$83
  974. .db $89,$8A,$00
  975.  
  976. MurderEnemies:
  977. LDA SetToDie
  978. CMP #$01
  979. BEQ .Skip
  980. LDA $0640
  981. CMP #$FE
  982. BEQ .Skip1
  983. LDA #$01
  984. STA EnemyDead
  985. .Skip1:
  986. LDA $0660
  987. CMP #$FE
  988. BEQ .Skip2
  989. LDA #$01
  990. STA EnemyDead+1
  991. .Skip2:
  992. LDA $0680
  993. CMP #$FE
  994. BEQ .Skip3
  995. LDA #$01
  996. STA EnemyDead+2
  997. .Skip3:
  998. LDA $06A0
  999. CMP #$FE
  1000. BEQ .Skip4
  1001. LDA #$01
  1002. STA EnemyDead+3
  1003. .Skip4:
  1004. LDA #$01
  1005. STA SetToDie
  1006. .End:
  1007. RTS
  1008. .Skip:
  1009. LDX #$00
  1010. .Loop:
  1011. LDA EnemyDead,x
  1012. CMP #$00
  1013. BNE .End
  1014. INX
  1015. CPX #$04
  1016. BNE .Loop
  1017. LDA #$01
  1018. STA ReadytoSpawn
  1019. RTS
  1020.  
  1021. RotateAntoineSprites:
  1022. LDA BossPhase
  1023. CMP #$03
  1024. BNE .End
  1025. LDA $0642
  1026. CMP #$02
  1027. BEQ .Right
  1028.  
  1029. LDX #$00
  1030. .Loop:
  1031. LDA $064B,x
  1032. STA $0643,x
  1033. CLC
  1034. ADC #$10
  1035. STA $064B,x
  1036. LDA #$02
  1037. STA $0642,x
  1038. STA $0646,x
  1039. STA $064A,x
  1040. TXA
  1041. CLC
  1042. ADC #$0C
  1043. TAX
  1044. CPX #$48
  1045. BNE .Loop
  1046. LDA #$00
  1047. STA BossPhase
  1048. ; STA BossTimer
  1049. .End:
  1050. RTS
  1051. .Right:
  1052. LDX #$00
  1053. .Loop2:
  1054. LDA $0643,x
  1055. STA $064B,x
  1056. CLC
  1057. ADC #$10
  1058. STA $0643,x
  1059. LDA #%01000010
  1060. STA $0642,x
  1061. STA $0646,x
  1062. STA $064A,x
  1063. TXA
  1064. CLC
  1065. ADC #$0C
  1066. TAX
  1067. CPX #$48
  1068. BNE .Loop2
  1069. LDA #$00
  1070. STA BossPhase
  1071. ; STA BossTimer
  1072. RTS
  1073.  
  1074. AntoineFat:
  1075. .db $00,$6B,$00
  1076. .db $70,$71,$72
  1077. .db $78,$79,$7A
  1078. .db $7E,$7F,$80
  1079. .db $84,$85,$86
  1080. .db $00,$8B,$8C
  1081.  
  1082. ActuallyPlaceCorey:
  1083. LDA BossMoveDir
  1084. CMP #$01
  1085. BEQ .LeftSide
  1086. JMP .RightSide
  1087. .LeftSide:
  1088. LDA #$94
  1089. STA $0640
  1090. STA $0644
  1091. CLC
  1092. ADC #$08
  1093. STA $0648
  1094. STA $064C
  1095. STA $0650
  1096. CLC
  1097. ADC #$08
  1098. STA $0654
  1099. STA $0658
  1100. STA $065C
  1101. STA $0660
  1102. CLC
  1103. ADC #$08
  1104. STA $0664
  1105. STA $0668
  1106. STA $066C
  1107. STA $0670
  1108. CLC
  1109. ADC #$08
  1110. STA $0674
  1111. STA $0678
  1112. STA $067C
  1113. STA $0680
  1114.  
  1115. ;0640, 0644
  1116. ;0648, 064c, 0650
  1117. ;0654, 0658, 065c, 0660
  1118. ;0664, 0668, 066c, 0670
  1119. ;0674, 0678, 067c, 0680
  1120.  
  1121. LDA #$18
  1122. STA $0663
  1123. STA $0673
  1124. STA $0683
  1125. SEC
  1126. SBC #$08
  1127. STA $0653
  1128. STA $065F
  1129. STA $066F
  1130. STA $067F
  1131. SEC
  1132. SBC #$08
  1133. STA $0647
  1134. STA $064F
  1135. STA $065B
  1136. STA $066B
  1137. STA $067B
  1138. SEC
  1139. SBC #$08
  1140. STA $0643
  1141. STA $064B
  1142. STA $0657
  1143. STA $0667
  1144. STA $0677
  1145.  
  1146. LDA #$02
  1147. STA $0642
  1148. STA $0646
  1149. STA $064A
  1150. STA $064E
  1151. STA $0652
  1152. STA $0656
  1153. STA $065A
  1154. STA $065E
  1155. STA $0662
  1156. STA $0666
  1157. STA $066A
  1158. STA $066E
  1159. STA $0672
  1160. STA $0676
  1161. STA $067A
  1162. STA $067E
  1163. STA $0682
  1164. LDA #$00
  1165. STA BossPhase
  1166. STA BossTimer
  1167. JSR SetCoreySprite
  1168. RTS
  1169. .RightSide:
  1170. LDA #$94
  1171. STA $0640
  1172. STA $0644
  1173. CLC
  1174. ADC #$08
  1175. STA $0648
  1176. STA $064C
  1177. STA $0650
  1178. CLC
  1179. ADC #$08
  1180. STA $0654
  1181. STA $0658
  1182. STA $065C
  1183. STA $0660
  1184. CLC
  1185. ADC #$08
  1186. STA $0664
  1187. STA $0668
  1188. STA $066C
  1189. STA $0670
  1190. CLC
  1191. ADC #$08
  1192. STA $0674
  1193. STA $0678
  1194. STA $067C
  1195. STA $0680
  1196.  
  1197. ;0640, 0644
  1198. ;0648, 064c, 0650
  1199. ;0654, 0658, 065c, 0660
  1200. ;0664, 0668, 066c, 0670
  1201. ;0674, 0678, 067c, 0680
  1202.  
  1203. LDA #$E1
  1204. STA $0663
  1205. STA $0673
  1206. STA $0683
  1207. CLC
  1208. ADC #$08
  1209. STA $0653
  1210. STA $065F
  1211. STA $066F
  1212. STA $067F
  1213. CLC
  1214. ADC #$08
  1215. STA $0647
  1216. STA $064F
  1217. STA $065B
  1218. STA $066B
  1219. STA $067B
  1220. CLC
  1221. ADC #$08
  1222. STA $0643
  1223. STA $064B
  1224. STA $0657
  1225. STA $0667
  1226. STA $0677
  1227.  
  1228. LDA #%01000010
  1229. STA $0642
  1230. STA $0646
  1231. STA $064A
  1232. STA $064E
  1233. STA $0652
  1234. STA $0656
  1235. STA $065A
  1236. STA $065E
  1237. STA $0662
  1238. STA $0666
  1239. STA $066A
  1240. STA $066E
  1241. STA $0672
  1242. STA $0676
  1243. STA $067A
  1244. STA $067E
  1245. STA $0682
  1246. LDA #$00
  1247. STA BossTimer
  1248. JSR SetCoreySprite
  1249. RTS
  1250.  
  1251. SetCoreySprite:
  1252. LDX #$00
  1253. LDY #$00
  1254.  
  1255. .Loop:
  1256. LDA CoreyStanding,x
  1257. STA $0641,y
  1258. INX
  1259. TYA
  1260. CLC
  1261. ADC #$04
  1262. TAY
  1263. CPX #$11
  1264. BNE .Loop
  1265. LDA #$01
  1266. STA BossPlacedFlag
  1267. RTS
  1268.  
  1269. CoreyStanding:
  1270. .db $87,$88
  1271. .db $8D,$8E,$8F
  1272. .db $90,$91,$92,$93
  1273. .db $97,$98,$99,$9A
  1274. .db $9F,$A0,$A1,$A2
  1275.  
  1276. RunCorey:
  1277. LDA CurrentFloor
  1278. CMP #$01
  1279. BNE .End
  1280. LDA BossPlacedFlag
  1281. CMP #$01
  1282. BNE .End
  1283. JSR RespawnCorey
  1284. JSR ShakeCorey
  1285. JSR AnimateFume
  1286. JSR MoveOffScreen
  1287. JSR CheckForNextPhase
  1288. .End:
  1289. RTS
  1290.  
  1291. RespawnCorey:
  1292. LDA BossPhase
  1293. CMP #$02
  1294. BNE .End
  1295. JSR ActuallyPlaceCorey
  1296. LDA #$00
  1297. STA BossPhase
  1298. .End:
  1299. RTS
  1300.  
  1301. CheckForNextPhase:
  1302. LDX #$00
  1303. .Loop:
  1304. LDA $0640,x
  1305. CMP #$FF
  1306. BNE .End
  1307. LDA $0643,x
  1308. CMP #$FF
  1309. BNE .End
  1310. INX
  1311. INX
  1312. INX
  1313. INX
  1314. CPX #$44
  1315. BNE .Loop
  1316. INC BossTimer
  1317. LDA BossTimer
  1318. CMP #$20
  1319. BNE .End
  1320. LDA BossPhase
  1321. CMP #$01
  1322. BNE .TryNext
  1323. LDA #$02
  1324. STA BossPhase
  1325. RTS
  1326. .TryNext:
  1327. .End:
  1328. RTS
  1329.  
  1330. MoveOffScreen:
  1331. LDA EnemyLifeAmt
  1332. CMP #$18
  1333. BCS .End
  1334. LDA BossPhase
  1335. CMP #$01
  1336. BNE .End
  1337. JSR KillWorkGraphic
  1338. LDA BossMoveDir
  1339. CMP #$00
  1340. BEQ .Left
  1341. LDX #$00
  1342. .RightLoop:
  1343. LDA $0643,x
  1344. CLC
  1345. ADC #$02
  1346. STA $0643,x
  1347. LDA $0643,x
  1348. CMP #$02
  1349. BCS .Skip
  1350. LDA #$FF
  1351. STA $0640,x
  1352. STA $0643,x
  1353. .Skip:
  1354. INX
  1355. INX
  1356. INX
  1357. INX
  1358. CPX #$44
  1359. BNE .RightLoop
  1360. .End:
  1361. RTS
  1362. .Left:
  1363. LDX #$00
  1364. .LeftLoop:
  1365. LDA $0643,x
  1366. SEC
  1367. SBC #$02
  1368. STA $0643,x
  1369. LDA $0643,x
  1370. CMP #$FC
  1371. BCC .Skip2
  1372. LDA #$FF
  1373. STA $0640,x
  1374. STA $0643,x
  1375. .Skip2:
  1376. INX
  1377. INX
  1378. INX
  1379. INX
  1380. CPX #$44
  1381. BNE .LeftLoop
  1382. RTS
  1383.  
  1384. AnimateFume:
  1385. LDA BossPhase
  1386. CMP #$00
  1387. BNE .End
  1388. INC BossTimer
  1389. LDA BossTimer
  1390. CMP #$20
  1391. BNE .2
  1392. .1:
  1393. JSR PlaceWorkGraphic
  1394. LDA #$02
  1395. STA SoundEffect
  1396. LDA #$01
  1397. STA PlaySound
  1398. LDA #$A3
  1399. STA $0685
  1400. LDA #$B4
  1401. STA $0684
  1402. LDA $0643
  1403. CMP $0653
  1404. BCC .Left1
  1405. LDA #%01000001
  1406. STA $0686
  1407. LDA #$D9
  1408. STA $0687
  1409. RTS
  1410. .Left1:
  1411. LDA #$01
  1412. STA $0686
  1413. LDA #$20
  1414. STA $0687
  1415. RTS
  1416. .2:
  1417. LDA BossTimer
  1418. CMP #$28
  1419. BNE .3
  1420. LDA #$A4
  1421. STA $0685
  1422. LDA $0643
  1423. CMP $0653
  1424. BCC .Left2
  1425. LDA #$C9
  1426. STA $0687
  1427. RTS
  1428. .Left2:
  1429. LDA #$30
  1430. STA $0687
  1431. .End:
  1432. RTS
  1433. .3:
  1434. LDA BossTimer
  1435. CMP #$30
  1436. BNE .4
  1437. LDA #$9B
  1438. STA $0685
  1439. LDA #$A5
  1440. STA $0689
  1441. LDA #$AC
  1442. STA $0684
  1443. LDA #$B4
  1444. STA $0688
  1445. LDA $0643
  1446. CMP $0653
  1447. BCC .Left3
  1448. LDA #%01000001
  1449. STA $068A
  1450. LDA #$B9
  1451. STA $0687
  1452. STA $068B
  1453. RTS
  1454. .Left3:
  1455. LDA #$01
  1456. STA $068A
  1457. LDA #$40
  1458. STA $0687
  1459. STA $068B
  1460. RTS
  1461. .4:
  1462. LDA BossTimer
  1463. CMP #$38
  1464. BNE .5
  1465. LDA #$94
  1466. STA $0685
  1467. LDA #$9C
  1468. STA $0689
  1469. LDA #$A6
  1470. STA $068D
  1471. LDA #$A4
  1472. STA $0684
  1473. LDA #$AC
  1474. STA $0688
  1475. LDA #$B4
  1476. STA $068C
  1477. LDA $0643
  1478. CMP $0653
  1479. BCC .Left4
  1480. LDA #%01000001
  1481. STA $068E
  1482. LDA #$A9
  1483. STA $0687
  1484. STA $068B
  1485. STA $068F
  1486. RTS
  1487. .Left4:
  1488. LDA #$01
  1489. STA $068E
  1490. LDA #$50
  1491. STA $0687
  1492. STA $068B
  1493. STA $068F
  1494. RTS
  1495. .5:
  1496. LDA BossTimer
  1497. CMP #$40
  1498. BNE .6
  1499. LDA #$95
  1500. STA $0685
  1501. LDA #$9D
  1502. STA $0689
  1503. LDA #$A7
  1504. STA $068D
  1505. LDA $0643
  1506. CMP $0653
  1507. BCC .Left5
  1508. LDA #$99
  1509. STA $0687
  1510. STA $068B
  1511. STA $068F
  1512. RTS
  1513. .Left5:
  1514. LDA #$60
  1515. STA $0687
  1516. STA $068B
  1517. STA $068F
  1518. RTS
  1519. .6:
  1520. LDA BossTimer
  1521. CMP #$48
  1522. BNE .7
  1523. LDA #$96
  1524. STA $0685
  1525. LDA #$9E
  1526. STA $0689
  1527. LDA #$A8
  1528. STA $068D
  1529. LDA $0643
  1530. CMP $0653
  1531. BCC .Left6
  1532. LDA #$89
  1533. STA $0687
  1534. STA $068B
  1535. STA $068F
  1536. RTS
  1537. .Left6:
  1538. LDA #$70
  1539. STA $0687
  1540. STA $068B
  1541. STA $068F
  1542. RTS
  1543. .7:
  1544. LDA BossTimer
  1545. CMP #$50
  1546. BCC .End2
  1547. LDA #$FE
  1548. STA $0684
  1549. STA $0688
  1550. STA $068C
  1551. LDA #$00
  1552. STA BossTimer
  1553. INC SmokeCount
  1554. LDA SmokeCount
  1555. CMP #$04
  1556. BNE .End2
  1557. LDA #$00
  1558. STA SmokeCount
  1559. LDA #$01
  1560. STA BossPhase
  1561. LDA #$01
  1562. STA BossMoveDir
  1563. LDA $0643
  1564. CMP $0653
  1565. BCS .End2
  1566. LDA #$00
  1567. STA BossMoveDir
  1568. .End2:
  1569. RTS
  1570.  
  1571. ActuallyPlaceRick:
  1572. LDA #$94
  1573. STA $0640
  1574. STA $0644
  1575. STA $0648
  1576. CLC
  1577. ADC #$08
  1578. STA $064C
  1579. STA $0650
  1580. STA $0654
  1581. CLC
  1582. ADC #$08
  1583. STA $0658
  1584. STA $065C
  1585. STA $0660
  1586. CLC
  1587. ADC #$08
  1588. STA $0664
  1589. STA $0668
  1590. STA $066C
  1591. CLC
  1592. ADC #$08
  1593. STA $0670
  1594. STA $0674
  1595. STA $0678
  1596.  
  1597. LDA #$11
  1598. STA $0643
  1599. STA $064F
  1600. STA $065B
  1601. STA $0667
  1602. STA $0673
  1603. SEC
  1604. SBC #$08
  1605. STA $0647
  1606. STA $0653
  1607. STA $065F
  1608. STA $066B
  1609. STA $0677
  1610. SEC
  1611. SBC #$08
  1612. STA $064B
  1613. STA $0657
  1614. STA $0663
  1615. STA $066F
  1616. STA $067B
  1617.  
  1618. LDA #%01000011
  1619. STA $0642
  1620. STA $0646
  1621. STA $064A
  1622. STA $064E
  1623. STA $0652
  1624. STA $0656
  1625. STA $065A
  1626. STA $065E
  1627. STA $0662
  1628. STA $0666
  1629. STA $066A
  1630. STA $066E
  1631. STA $0672
  1632. STA $0676
  1633. STA $067A
  1634. JSR SetRickSprite
  1635. RTS
  1636.  
  1637. SetRickSprite:
  1638. LDX #$00
  1639. LDY #$00
  1640.  
  1641. .Loop:
  1642. LDA RickStanding,x
  1643. STA $0641,y
  1644. INX
  1645. TYA
  1646. CLC
  1647. ADC #$04
  1648. TAY
  1649. CPX #$0F
  1650. BNE .Loop
  1651. LDA #$01
  1652. STA BossPlacedFlag
  1653. RTS
  1654.  
  1655. RickStanding:
  1656. .db $C2,$C3,$00
  1657. .db $AB,$AC,$AE
  1658. .db $C4,$B6,$B7
  1659. .db $BC,$BD,$BE
  1660. .db $89,$C1,$00
  1661.  
  1662. RunRick:
  1663. LDA CurrentFloor
  1664. CMP #$02
  1665. BNE .End
  1666. LDA BossPlacedFlag
  1667. CMP #$01
  1668. BNE .End
  1669. JSR AnimateRick
  1670. JSR ThrowBowlingBall
  1671. .End:
  1672. RTS
  1673.  
  1674. AnimateRick:
  1675. LDA BossPhase
  1676. CMP #$01
  1677. BEQ .End
  1678.  
  1679. INC ShakeTimer
  1680. LDA ShakeTimer
  1681. CMP #$20
  1682. BEQ .1
  1683. CMP #$30
  1684. BEQ .2
  1685. RTS
  1686. .1:
  1687. JSR PlaceWorkGraphic
  1688. LDX #$00
  1689. LDY #$00
  1690. .Loop:
  1691. LDA RickSprite1,x
  1692. STA $0641,y
  1693. INX
  1694. TYA
  1695. CLC
  1696. ADC #$04
  1697. TAY
  1698. CPX #$0F
  1699. BNE .Loop
  1700. JSR ChangeEyebrows
  1701. RTS
  1702. .2:
  1703. LDX #$00
  1704. LDY #$00
  1705. .Loop2:
  1706. LDA RickSprite2,x
  1707. STA $0641,y
  1708. INX
  1709. TYA
  1710. CLC
  1711. ADC #$04
  1712. TAY
  1713. CPX #$0F
  1714. BNE .Loop2
  1715.  
  1716. LDA #$B1
  1717. STA $0681
  1718.  
  1719. LDA #$A6
  1720. STA $0680
  1721. LDA #%01000011
  1722. STA $0682
  1723. LDA #$1C
  1724. STA $0683
  1725.  
  1726. LDA #$01
  1727. STA BossPhase
  1728. .End:
  1729. RTS
  1730.  
  1731. AnimateBall:
  1732. LDA $0682
  1733. CMP #$03
  1734. BEQ .1
  1735. CMP #%10000011
  1736. BEQ .2
  1737. CMP #%11000011
  1738. BEQ .3
  1739. CMP #%01000011
  1740. BEQ .4
  1741. RTS
  1742. .1:
  1743. LDA #%10000011
  1744. STA $0682
  1745. RTS
  1746. .2:
  1747. LDA #%11000011
  1748. STA $0682
  1749. RTS
  1750. .3:
  1751. LDA #%01000011
  1752. STA $0682
  1753. RTS
  1754. .4:
  1755. LDA #$03
  1756. STA $0682
  1757. RTS
  1758.  
  1759. ThrowBowlingBall:
  1760. LDA BossPhase
  1761. CMP #$01
  1762. BNE .End
  1763. JSR RevertEyebrows
  1764. JSR KillWorkGraphic
  1765. LDA $0683
  1766. CMP #$06
  1767. BCC .Stop
  1768. JSR AnimateBall
  1769. LDA $0683
  1770. CLC
  1771. ADC #$05
  1772. STA $0683
  1773. LDA BallDirection
  1774. CMP #$01
  1775. BNE .Try2
  1776. LDA $0680
  1777. CMP #$B4
  1778. BCS .End
  1779. LDA $0680
  1780. CLC
  1781. ADC #$01
  1782. STA $0680
  1783. RTS
  1784. .Try2:
  1785. LDA BallDirection
  1786. CMP #$02
  1787. BNE .End
  1788. LDA BallYAxis
  1789. CMP #$01
  1790. BEQ .Fall
  1791. LDA $0680
  1792. CMP #$80
  1793. BCC .Set
  1794. LDA $0680
  1795. SEC
  1796. SBC #$10
  1797. STA $0680
  1798. RTS
  1799. .Set:
  1800. LDA #$01
  1801. STA BallYAxis
  1802. RTS
  1803. .Fall:
  1804. LDA $0680
  1805. CMP #$B4
  1806. BCS .End
  1807. LDA $0680
  1808. CLC
  1809. ADC #$05
  1810. STA $0680
  1811. .End:
  1812. RTS
  1813. .Stop:
  1814. LDA #$FE
  1815. STA $0680
  1816. STA $0683
  1817. JSR SetRickSprite
  1818. LDA #$00
  1819. STA BossPhase
  1820. STA BallYAxis
  1821. STA ShakeTimer
  1822. INC BallDirection
  1823. LDA BallDirection
  1824. CMP #$03
  1825. BNE .End
  1826. LDA #$00
  1827. STA BallDirection
  1828. RTS
  1829.  
  1830. RickSprite1:
  1831. .db $C2,$C3,$00
  1832. .db $AB,$AF,$B0
  1833. .db $B5,$B8,$B9
  1834. .db $BC,$BB,$BF
  1835. .db $89,$C0,$00
  1836.  
  1837. RickSprite2:
  1838. .db $C2,$C3,$00
  1839. .db $AB,$AC,$AD
  1840. .db $B2,$B3,$B4
  1841. .db $BA,$BB,$00
  1842. .db $89,$C0,$00
  1843.  
  1844. ChangeEyebrows:
  1845. LDA #$A9
  1846. STA $0641
  1847. LDA #$AA
  1848. STA $0645
  1849. RTS
  1850.  
  1851. RevertEyebrows:
  1852. LDA #$C2
  1853. STA $0641
  1854. LDA #$C3
  1855. STA $0645
  1856. RTS
  1857.  
  1858. ShakeCorey:
  1859. INC ShakeTimer
  1860. LDA ShakeTimer
  1861. CMP #$02
  1862. BEQ .Up
  1863. CMP #$04
  1864. BEQ .Down
  1865. LDA ShakeTimer
  1866. CMP #$05
  1867. BNE .End
  1868. LDA #$00
  1869. STA ShakeTimer
  1870. RTS
  1871. .Up:
  1872. LDX #$00
  1873. .UpLoop:
  1874. LDA $0640,x
  1875. SEC
  1876. SBC #$01
  1877. STA $0640,x
  1878. INX
  1879. INX
  1880. INX
  1881. INX
  1882. CPX #$44
  1883. BNE .UpLoop
  1884. .End:
  1885. RTS
  1886. .Down:
  1887. LDX #$00
  1888. .DownLoop:
  1889. LDA $0640,x
  1890. CLC
  1891. ADC #$01
  1892. STA $0640,x
  1893. INX
  1894. INX
  1895. INX
  1896. INX
  1897. CPX #$44
  1898. BNE .DownLoop
  1899. RTS
  1900.  
  1901. RunDarkChum:
  1902. LDA CurrentFloor
  1903. CMP #$03
  1904. BNE .End
  1905. LDA BossPlacedFlag
  1906. CMP #$01
  1907. BNE .End
  1908. JSR PickFanStop
  1909. JSR BossFanCollision
  1910. JSR DarkChumJump
  1911. JSR DarkChumActuallyJump
  1912. JSR DarkJump
  1913. JSR DarkChumDuck
  1914. JSR DarkMoveLeft
  1915. JSR DarkMoveRight
  1916. JSR DarkChumAttack
  1917. JSR DarkStandStill
  1918. JSR ResetDarkDuck
  1919. .End:
  1920. RTS
  1921.  
  1922. BossFanCollision:
  1923. LDA InvincTimer
  1924. CMP #$00
  1925. BEQ .Begin
  1926. JMP .CheckBoss
  1927. .Begin:
  1928. LDA $06C0
  1929. CLC
  1930. ADC #$06
  1931. CMP $0604
  1932. BCC .CheckHit2
  1933. LDA $0604
  1934. CLC
  1935. ADC #$20
  1936. CMP $06C0
  1937. BCC .CheckHit2
  1938. LDA $0607
  1939. CLC
  1940. ADC #$04
  1941. CMP $06C3
  1942. BCC .CheckHit2
  1943. LDA $06E3
  1944. CLC
  1945. ADC #$04
  1946. CMP $0607
  1947. BCC .CheckHit2
  1948. LDA #$02
  1949. STA ChumHit
  1950. INC LifeAmt
  1951. INC LifeAmt
  1952. LDA #$0F
  1953. STA ChumTempX
  1954. LDA #STATEHIT
  1955. STA gamestate
  1956. RTS
  1957. .CheckHit2:
  1958. LDA $067C
  1959. CLC
  1960. ADC #$06
  1961. CMP $0604
  1962. BCC .CheckBoss
  1963. LDA $0604
  1964. CLC
  1965. ADC #$20
  1966. CMP $067C
  1967. BCC .CheckBoss
  1968. LDA $068F
  1969. CLC
  1970. ADC #$04
  1971. CMP $0607
  1972. BCC .CheckBoss
  1973. LDA $0607
  1974. CLC
  1975. ADC #$04
  1976. CMP $067F
  1977. BCC .CheckBoss
  1978. LDA #$02
  1979. STA ChumHit
  1980. INC LifeAmt
  1981. INC LifeAmt
  1982. LDA #$0F
  1983. STA ChumTempX
  1984. LDA #STATEHIT
  1985. STA gamestate
  1986. RTS
  1987. .CheckBoss:
  1988. LDA BossHit
  1989. CMP #$01
  1990. BEQ .End
  1991. LDA $0640
  1992. CLC
  1993. ADC #$20
  1994. CMP $06C0
  1995. BCC .CheckBoss2
  1996. LDA $06C0
  1997. CLC
  1998. ADC #$06
  1999. CMP $0640
  2000. BCC .CheckBoss2
  2001. LDA $0643
  2002. CLC
  2003. ADC #$04
  2004. CMP $06C3
  2005. BCC .CheckBoss2
  2006. LDA $06E3
  2007. CLC
  2008. ADC #$04
  2009. CMP $0643
  2010. BCC .CheckBoss2
  2011. INC EnemyLifeAmt
  2012. INC EnemyLifeAmt
  2013. INC EnemyLifeAmt
  2014. INC EnemyLifeAmt
  2015. LDA #$01
  2016. STA BossHit
  2017. STA FlashBossHit
  2018. STA EnemyHitFlag
  2019. STA SoundEffect
  2020. STA PlaySound
  2021. .End:
  2022. RTS
  2023. .CheckBoss2:
  2024. LDA $067C
  2025. CLC
  2026. ADC #$06
  2027. CMP $0640
  2028. BCC .End
  2029. LDA $0640
  2030. CLC
  2031. ADC #$20
  2032. CMP $068C
  2033. BCC .End
  2034. LDA $068F
  2035. CLC
  2036. ADC #$04
  2037. CMP $0643
  2038. BCC .End
  2039. LDA $0643
  2040. CLC
  2041. ADC #$04
  2042. CMP $067F
  2043. BCC .End
  2044. INC EnemyLifeAmt
  2045. INC EnemyLifeAmt
  2046. INC EnemyLifeAmt
  2047. INC EnemyLifeAmt
  2048. LDA #$01
  2049. STA BossHit
  2050. STA FlashBossHit
  2051. STA EnemyHitFlag
  2052. STA SoundEffect
  2053. STA PlaySound
  2054. RTS
  2055.  
  2056. PickFanStop:
  2057. LDA BossFan
  2058. CMP #$00
  2059. BNE .SecondTimer
  2060. INC BossFanTimer
  2061. LDA BossFanTimer
  2062. BNE .End
  2063. LDA $0643
  2064. CMP #$54
  2065. BCC .1
  2066. CMP #$A8
  2067. BCC .2
  2068. LDA #$03
  2069. STA BossFan
  2070. RTS
  2071. .1:
  2072. LDA #$01
  2073. STA BossFan
  2074. RTS
  2075. .2:
  2076. LDA #$02
  2077. STA BossFan
  2078. .End:
  2079. RTS
  2080. .SecondTimer:
  2081. JSR SpawnBossFans
  2082. JSR DropBossFans
  2083. RTS
  2084. INC BossFanTimer
  2085. LDA BossFanTimer
  2086. CMP #$80
  2087. BNE .End
  2088. LDA #$00
  2089. STA BossFanTimer
  2090. STA BossFan
  2091. RTS
  2092.  
  2093. SpawnBossFans:
  2094. LDA BossPhase
  2095. CMP #$02
  2096. BEQ .End
  2097. LDA BossFan
  2098. CMP #$01
  2099. BNE .Try2
  2100. JSR SpawnBossFan2
  2101. JSR SpawnBossFan3
  2102. RTS
  2103. .Try2:
  2104. LDA BossFan
  2105. CMP #$02
  2106. BNE .Try3
  2107. JSR SpawnBossFan1
  2108. JSR SpawnBossFan3
  2109. RTS
  2110. .Try3:
  2111. LDA BossFan
  2112. CMP #$03
  2113. BNE .End
  2114. JSR SpawnBossFan1
  2115. JSR SpawnBossFan2
  2116. RTS
  2117. .End:
  2118. RTS
  2119.  
  2120. DarkMoveLeft:
  2121. LDA ButtonsP1
  2122. AND #%00000001
  2123. BNE .Start
  2124. JMP .End
  2125. .Start:
  2126. LDA JumpFlag
  2127. CMP #$00
  2128. BNE .End
  2129. JSR AnimateDarkChum
  2130. LDA RightHeld
  2131. CMP #$01
  2132. BEQ .SkipTurn
  2133. .Turn:
  2134. LDX #$00
  2135. .Loop:
  2136. LDA #$03
  2137. STA $0642,x
  2138. INX
  2139. INX
  2140. INX
  2141. INX
  2142. CPX #$3C
  2143. BNE .Loop
  2144.  
  2145. JSR SwapDarkLeft
  2146. .SkipTurn:
  2147. LDA $0642
  2148. CMP #$03
  2149. BNE .Turn
  2150.  
  2151. ; LDA DuckFlag
  2152. ; CMP #$01
  2153. ; BNE .NotDuck
  2154. ; JSR ResetDuck
  2155. ;.NotDuck:
  2156.  
  2157. LDA BossPlacedFlag
  2158. CMP #$01
  2159. BEQ .MoveInstead
  2160. .End:
  2161. RTS
  2162. .MoveInstead:
  2163. LDA $0643
  2164. CMP #$09
  2165. BCC .End
  2166.  
  2167. LDX #$00
  2168. .MoveLoop:
  2169. LDA $0643,x
  2170. SEC
  2171. SBC #$01
  2172. STA $0643,x
  2173. INX
  2174. INX
  2175. INX
  2176. INX
  2177. CPX #$3C
  2178. BNE .MoveLoop
  2179. RTS
  2180.  
  2181. DarkMoveRight:
  2182. LDA ButtonsP1
  2183. AND #%00000010
  2184. BNE .Start
  2185. JMP .End
  2186. .Start:
  2187. LDA JumpFlag
  2188. CMP #$00
  2189. BNE .End
  2190. JSR AnimateDarkChum
  2191. LDA LeftHeld
  2192. CMP #$01
  2193. BEQ .SkipTurn
  2194. .Turn:
  2195. LDX #$00
  2196. .Loop:
  2197. LDA #%01000011
  2198. STA $0642,x
  2199. INX
  2200. INX
  2201. INX
  2202. INX
  2203. CPX #$3C
  2204. BNE .Loop
  2205.  
  2206. JSR SwapDarkRight
  2207. .SkipTurn:
  2208. LDA $0642
  2209. CMP #%01000011
  2210. BNE .Turn
  2211.  
  2212. ; LDA DuckFlag
  2213. ; CMP #$01
  2214. ; BNE .NotDuck
  2215. ; JSR ResetDuck
  2216. ;.NotDuck:
  2217.  
  2218. LDA BossPlacedFlag
  2219. CMP #$01
  2220. BEQ .MoveInstead
  2221. .End:
  2222. RTS
  2223. .MoveInstead:
  2224. LDA $0643
  2225. CMP #$F0
  2226. BCS .End
  2227.  
  2228. LDX #$00
  2229. .MoveLoop:
  2230. LDA $0643,x
  2231. CLC
  2232. ADC #$01
  2233. STA $0643,x
  2234. INX
  2235. INX
  2236. INX
  2237. INX
  2238. CPX #$3C
  2239. BNE .MoveLoop
  2240. RTS
  2241.  
  2242. DarkChumJump:
  2243. LDA DuckFlag
  2244. CMP #$01
  2245. BEQ .NoFix
  2246. RTS
  2247. .NoFix:
  2248. LDA DarkJumpFlag
  2249. CMP #$00
  2250. BNE .End
  2251. LDA #$01
  2252. STA DarkJumpFlag
  2253. .End:
  2254. RTS
  2255.  
  2256. DarkChumActuallyJump:
  2257. LDA DarkJumpFlag
  2258. CMP #$00
  2259. BEQ .End
  2260. CMP #$02
  2261. BEQ .Next
  2262. ; RTS
  2263. JMP DarkActuallyJumpDown
  2264. .Next:
  2265. JSR DarkJumpSprite
  2266. LDA $0640
  2267. CMP DarkJumpPos+2
  2268. BCC .Stop
  2269. CMP DarkJumpPos+3
  2270. BCC .JumpSlow
  2271. CMP DarkJumpPos+4
  2272. BCC .JumpFast
  2273. RTS
  2274. .JumpFast:
  2275. LDX #$00
  2276. LDY #$00
  2277. .Loop:
  2278. LDA $0640,y
  2279. SEC
  2280. SBC #$04
  2281. STA $0640,y
  2282. INX
  2283. INY
  2284. INY
  2285. INY
  2286. INY
  2287. CPX #$0F
  2288. BNE .Loop
  2289. JSR DarkAdjust3
  2290. JSR DarkAdjust2
  2291. RTS
  2292. .JumpSlow:
  2293. LDX #$00
  2294. LDY #$00
  2295. .Loop2:
  2296. LDA $0640,y
  2297. SEC
  2298. SBC #$01
  2299. STA $0640,y
  2300. INX
  2301. INY
  2302. INY
  2303. INY
  2304. INY
  2305. CPX #$0F
  2306. BNE .Loop2
  2307. JSR DarkAdjust3
  2308. JSR DarkAdjust2
  2309. RTS
  2310. .Stop:
  2311. JSR DarkAdjust3
  2312. JSR DarkAdjust2
  2313. INC StopCounter
  2314. LDA StopCounter
  2315. CMP #$06
  2316. BNE .End
  2317. LDA #$00
  2318. STA StopCounter
  2319. LDA #$03
  2320. STA DarkJumpFlag
  2321. .End:
  2322. RTS
  2323.  
  2324. DarkChumDuck:
  2325. LDA JumpFlag
  2326. CMP #$00
  2327. BEQ .End
  2328. LDA DarkJumpFlag
  2329. CMP #$00
  2330. BNE .End
  2331. JSR DarkAdjustDucking
  2332. JSR DarkActuallyDuck
  2333. .End:
  2334. RTS
  2335.  
  2336. DarkChumAttack:
  2337. LDA ChumAttacking
  2338. CMP #$01
  2339. BNE .End
  2340. JSR PickDarkAttackSprite
  2341. LDA AttackTimer
  2342. CMP #$0A
  2343. BCC .End
  2344.  
  2345. LDA DarkJumpFlag
  2346. CMP #$00
  2347. BEQ .End
  2348. JMP .Reset
  2349. .End:
  2350. RTS
  2351. .Reset:
  2352. LDA #$01
  2353. STA DarkJumpAttackResetFlag
  2354. RTS
  2355.  
  2356. PickDarkAttackSprite:
  2357. LDX #$00
  2358. LDY #$00
  2359. LDA DarkJumpFlag
  2360. CMP #$00
  2361. BNE .JumpAttack
  2362. LDA DarkDuckFlag
  2363. CMP #$01
  2364. BEQ .DuckAttack
  2365. LDA ButtonsP1
  2366. AND #%00000100
  2367. BNE .DuckAttack
  2368. .Loop:
  2369. LDA DarkKick,x
  2370. STA $0641,y
  2371. INX
  2372. TYA
  2373. CLC
  2374. ADC #$04
  2375. TAY
  2376. CPX #$0F
  2377. BNE .Loop
  2378. RTS
  2379. .DuckAttack:
  2380. LDA DarkDuckFlag
  2381. CMP #$01
  2382. BNE .Loop
  2383. LDX #$00
  2384. LDY #$00
  2385. .Loopy:
  2386. LDA DarkDuckAttackSprites,x
  2387. STA $0641,y
  2388. INX
  2389. TYA
  2390. CLC
  2391. ADC #$04
  2392. TAY
  2393. CPX #$0F
  2394. BNE .Loopy
  2395. RTS
  2396. .JumpAttack:
  2397. LDX #$00
  2398. LDY #$00
  2399. .Loopy2:
  2400. LDA DarkJumpAttackSprites,x
  2401. STA $0641,y
  2402. INX
  2403. TYA
  2404. CLC
  2405. ADC #$04
  2406. TAY
  2407. CPX #$0F
  2408. BNE .Loopy2
  2409. JSR DarkPixelAdjust
  2410. RTS
  2411.  
  2412. AnimateDarkChum:
  2413. LDA DarkJumpFlag
  2414. CMP #$00
  2415. BNE .End
  2416. INC DarkAnimTimer
  2417. LDA DarkAnimTimer
  2418. CMP #$08
  2419. BCC .1
  2420. CMP #$10
  2421. BCC .2
  2422. CMP #$18
  2423. BCC .3
  2424. CMP #$20
  2425. BCC .2
  2426. CMP #$20
  2427. BNE .End
  2428. LDA #$00
  2429. STA DarkAnimTimer
  2430. .End:
  2431. RTS
  2432. .1:
  2433. LDX #$00
  2434. LDY #$00
  2435. .Loop1:
  2436. LDA DarkWalk1,x
  2437. STA $0641,y
  2438. INX
  2439. TYA
  2440. CLC
  2441. ADC #$04
  2442. TAY
  2443. CPX #$0F
  2444. BNE .Loop1
  2445. RTS
  2446. .2:
  2447. LDX #$00
  2448. LDY #$00
  2449. .Loop2:
  2450. LDA DarkWalk2,x
  2451. STA $0641,y
  2452. INX
  2453. TYA
  2454. CLC
  2455. ADC #$04
  2456. TAY
  2457. CPX #$0F
  2458. BNE .Loop2
  2459. RTS
  2460. .3:
  2461. LDX #$00
  2462. LDY #$00
  2463. .Loop3:
  2464. LDA DarkWalk3,x
  2465. STA $0641,y
  2466. INX
  2467. TYA
  2468. CLC
  2469. ADC #$04
  2470. TAY
  2471. CPX #$0F
  2472. BNE .Loop3
  2473. RTS
  2474.  
  2475. SwapDarkRight:
  2476. LDA $064B
  2477. CMP $0643
  2478. BCC .End
  2479.  
  2480. ;0640 0644 0648
  2481. ;064C 0650 0654
  2482. ;0658 065C 0660
  2483. ;0664 0668 066C
  2484. ;0670 0674 0678
  2485.  
  2486. LDA $0643
  2487. STA $064B
  2488. STA $0657
  2489. STA $0663
  2490. STA $066F
  2491. STA $067B
  2492. CLC
  2493. ADC #$08
  2494. STA $0647
  2495. STA $0653
  2496. STA $065F
  2497. STA $066B
  2498. STA $0677
  2499. CLC
  2500. ADC #$08
  2501. STA $0643
  2502. STA $064F
  2503. STA $065B
  2504. STA $0667
  2505. STA $0673
  2506. .End:
  2507. RTS
  2508.  
  2509. SwapDarkLeft:
  2510. LDA $0643
  2511. CMP $064B
  2512. BCC .End
  2513. LDA $0643
  2514. STA $064B
  2515. STA $0657
  2516. STA $0663
  2517. STA $066F
  2518. STA $067B
  2519. SEC
  2520. SBC #$08
  2521. STA $0647
  2522. STA $0653
  2523. STA $065F
  2524. STA $066B
  2525. STA $0677
  2526. SEC
  2527. SBC #$08
  2528. STA $0643
  2529. STA $064F
  2530. STA $065B
  2531. STA $0667
  2532. STA $0673
  2533. .End:
  2534. RTS
  2535.  
  2536. DarkPixelAdjust:
  2537. LDA DarkJumpFlag
  2538. CMP #$00
  2539. BEQ .NotJumping
  2540. LDA DarkJumpAttackFlag
  2541. CMP #$01
  2542. BEQ .End
  2543. LDA #$01
  2544. STA DarkJumpAttackFlag
  2545. .NotJumping:
  2546. LDA $0642
  2547. CMP #$03
  2548. BEQ .Left
  2549. LDX #$00
  2550. .Loop:
  2551. LDA $0643,x
  2552. CLC
  2553. ADC #$08
  2554. STA $0643,x
  2555. INX
  2556. INX
  2557. INX
  2558. INX
  2559. CPX #$3C
  2560. BNE .Loop
  2561. .End:
  2562. RTS
  2563. .Left:
  2564. LDX #$00
  2565. .Loop2:
  2566. LDA $0643,x
  2567. SEC
  2568. SBC #$08
  2569. STA $0643,x
  2570. INX
  2571. INX
  2572. INX
  2573. INX
  2574. CPX #$3C
  2575. BNE .Loop2
  2576. RTS
  2577.  
  2578. DarkAdjustDucking:
  2579. LDA DarkJumpFlag
  2580. CMP #$00
  2581. BNE .End
  2582. LDA DarkDuckFlag
  2583. CMP #$01
  2584. BEQ .End
  2585. LDA #$01
  2586. STA DarkDuckFlag
  2587. LDA $0643
  2588. CMP $064B
  2589. BCC .Left
  2590. LDA #$01
  2591. STA DarkDuckFacing
  2592. JMP .Connect
  2593. .Left:
  2594. LDA #$00
  2595. STA DarkDuckFacing
  2596. .Connect:
  2597. JSR DarkPixelAdjust
  2598. .End:
  2599. RTS
  2600.  
  2601. DarkActuallyDuck:
  2602. LDX #$00
  2603. LDY #$00
  2604. .Loop:
  2605. LDA DarkDuckSprites,x
  2606. STA $0641,y
  2607. INX
  2608. TYA
  2609. CLC
  2610. ADC #$04
  2611. TAY
  2612. CPX #$0F
  2613. BNE .Loop
  2614. .End:
  2615. RTS
  2616.  
  2617. ResetDarkDuck:
  2618. LDA DarkDuckFlag
  2619. CMP #$01
  2620. BEQ .Reset
  2621. RTS
  2622. .Reset:
  2623. LDA JumpFlag
  2624. CMP #$00
  2625. BNE .End
  2626. ; LDA DarkDuckFacing
  2627. ; CMP DirFacing
  2628. ; BNE .Regular
  2629. LDA DarkDuckFacing
  2630. CMP #$01
  2631. BEQ .Left
  2632. LDX #$00
  2633. JMP .Loop
  2634. .Regular:
  2635. ; LDA DirFacing
  2636. ; CMP #$01
  2637. ; BEQ .Left
  2638. LDX #$00
  2639. .Loop:
  2640. LDA $0643,x
  2641. CLC
  2642. ADC #$08
  2643. STA $0643,x
  2644. INX
  2645. INX
  2646. INX
  2647. INX
  2648. CPX #$3C
  2649. BNE .Loop
  2650. LDA #$00
  2651. STA DarkDuckFlag
  2652. .End:
  2653. RTS
  2654. .Left:
  2655. LDX #$00
  2656. .Loop3:
  2657. LDA $0643,x
  2658. SEC
  2659. SBC #$08
  2660. STA $0643,x
  2661. INX
  2662. INX
  2663. INX
  2664. INX
  2665. CPX #$3C
  2666. BNE .Loop3
  2667. LDA #$00
  2668. STA DarkDuckFlag
  2669. RTS
  2670.  
  2671. DarkJumpSprite:
  2672. LDA ChumAttacking
  2673. CMP #$01
  2674. BEQ .End
  2675. LDX #$00
  2676. LDY #$00
  2677. .Loop:
  2678. LDA DarkJumpSprites,x
  2679. STA $0641,y
  2680. INX
  2681. TYA
  2682. CLC
  2683. ADC #$04
  2684. TAY
  2685. CPX #$0F
  2686. BNE .Loop
  2687. .End:
  2688. RTS
  2689.  
  2690. DarkAdjust2:
  2691. LDA DarkJumpAttackResetFlag
  2692. CMP #$01
  2693. BNE .End
  2694. LDA #$02
  2695. STA DarkJumpAttackResetFlag
  2696. .End:
  2697. RTS
  2698.  
  2699. DarkAdjust3:
  2700. LDA DarkJumpAttackResetFlag
  2701. CMP #$02
  2702. BNE .End
  2703. LDA DarkJumpFlag
  2704. CMP #$03
  2705. BNE .Skip
  2706. LDA ExtraFlag
  2707. CMP #$04
  2708. BEQ .Skip
  2709. INC ExtraFlag
  2710. RTS
  2711. .Skip:
  2712. LDA $0642
  2713. CMP #$00
  2714. BEQ .Left
  2715. LDX #$00
  2716. .Loop:
  2717. LDA $0643,x
  2718. CLC
  2719. ADC #$08
  2720. STA $0643,x
  2721. INX
  2722. INX
  2723. INX
  2724. INX
  2725. CPX #$3C
  2726. BNE .Loop
  2727. LDA #$00
  2728. STA DarkJumpAttackFlag
  2729. STA ExtraFlag
  2730. STA DarkJumpAttackResetFlag
  2731. RTS
  2732. .Left:
  2733. LDX #$00
  2734. .Loop3:
  2735. LDA $0643,x
  2736. SEC
  2737. SBC #$08
  2738. STA $0643,x
  2739. INX
  2740. INX
  2741. INX
  2742. INX
  2743. CPX #$3C
  2744. BNE .Loop3
  2745. LDA #$00
  2746. STA DarkJumpAttackFlag
  2747. STA ExtraFlag
  2748. STA DarkJumpAttackResetFlag
  2749. .End:
  2750. RTS
  2751.  
  2752. DarkActuallyJumpDown:
  2753. LDA DarkJumpFlag
  2754. CMP #$03
  2755. BNE .End
  2756. .Next:
  2757. LDA ChumHit
  2758. CMP #$00
  2759. BNE .Skip
  2760. JSR DarkJumpSprite
  2761. JSR DarkAdjust3
  2762. JSR DarkAdjust2
  2763. .Skip:
  2764. LDA $0640
  2765. CMP DarkJumpPos
  2766. BCS .Stop
  2767. CMP DarkJumpPos+1
  2768. BCS .JumpFast
  2769. RTS
  2770. .JumpFast:
  2771. LDX #$00
  2772. LDY #$00
  2773. .Loop:
  2774. LDA $0640,y
  2775. CLC
  2776. ADC #$03
  2777. STA $0640,y
  2778. INX
  2779. INY
  2780. INY
  2781. INY
  2782. INY
  2783. CPX #$0F
  2784. BNE .Loop
  2785. JSR DarkAdjust3
  2786. RTS
  2787. .Stop:
  2788. LDA #$00
  2789. STA DarkJumpFlag
  2790. STA DarkJumpAttackFlag
  2791. ; JSR StandStill
  2792. .End:
  2793. RTS
  2794.  
  2795. DarkJump:
  2796. LDA DarkJumpFlag
  2797. CMP #$01
  2798. BNE .End
  2799.  
  2800. LDA $0640
  2801. SEC
  2802. SBC #$01
  2803. STA DarkJumpPos
  2804. LDA DarkJumpPos
  2805. SEC
  2806. SBC #$3F
  2807. STA DarkJumpPos+1
  2808. CLC
  2809. ADC #$05
  2810. STA DarkJumpPos+2
  2811. CLC
  2812. ADC #$08
  2813. STA DarkJumpPos+3
  2814. CLC
  2815. ADC #$34
  2816. STA DarkJumpPos+4
  2817. LDA #$02
  2818. STA DarkJumpFlag
  2819. JSR DarkJumpSprite
  2820. .End:
  2821. RTS
  2822.  
  2823. ActuallyPlaceDarkChum:
  2824. LDA #$94
  2825. STA $0640
  2826. STA $0644
  2827. STA $0648
  2828. CLC
  2829. ADC #$08
  2830. STA $064C
  2831. STA $0650
  2832. STA $0654
  2833. CLC
  2834. ADC #$08
  2835. STA $0658
  2836. STA $065C
  2837. STA $0660
  2838. CLC
  2839. ADC #$08
  2840. STA $0664
  2841. STA $0668
  2842. STA $066C
  2843. CLC
  2844. ADC #$08
  2845. STA $0670
  2846. STA $0674
  2847. STA $0678
  2848.  
  2849. LDA #$EF
  2850. STA $0643
  2851. STA $064F
  2852. STA $065B
  2853. STA $0667
  2854. STA $0673
  2855. CLC
  2856. ADC #$08
  2857. STA $0647
  2858. STA $0653
  2859. STA $065F
  2860. STA $066B
  2861. STA $0677
  2862. CLC
  2863. ADC #$08
  2864. STA $064B
  2865. STA $0657
  2866. STA $0663
  2867. STA $066F
  2868. STA $067B
  2869.  
  2870. LDA #$03
  2871. STA $0642
  2872. STA $0646
  2873. STA $064A
  2874. STA $064E
  2875. STA $0652
  2876. STA $0656
  2877. STA $065A
  2878. STA $065E
  2879. STA $0662
  2880. STA $0666
  2881. STA $066A
  2882. STA $066E
  2883. STA $0672
  2884. STA $0676
  2885. STA $067A
  2886. JSR SetDarkChumSprite
  2887. RTS
  2888.  
  2889. ;;;;;;;;;;;
  2890.  
  2891. .bank 3
  2892. .org $A000
  2893.  
  2894. GameTiles:
  2895. .incbin "Graphics/mario.chr" ;includes 8KB graphics file from SMB1
  2896.  
  2897. ;;;;;;;;;;;;;;
  2898.  
  2899. .bank 4
  2900. .org $8000
  2901.  
  2902. UpdateText2:
  2903. LDA #low(InterludeText)
  2904. STA TextLow
  2905. LDA #high(InterludeText)
  2906. STA TextHigh
  2907.  
  2908. LDX #$00
  2909. LDA CurrentLetterRow
  2910. CMP #$33
  2911. BCS .End
  2912. .Cont:
  2913. LDX #$00
  2914. .Skip:
  2915. LDY CurrentLetterRow
  2916. .Loop:
  2917. LDA $2002
  2918. TXA
  2919. CLC
  2920. ADC #$20
  2921. STA $2006
  2922. LDA TextCoordinates,y
  2923. CLC
  2924. ADC #$60
  2925. STA $2006
  2926. LDA [TextLow],y
  2927. CLC
  2928. ADC #$9F
  2929. STA $2007
  2930. .End:
  2931. RTS
  2932.  
  2933. InterludeText:
  2934. .db "CHUMLEE",$5C,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60
  2935. .db "CHUMLEE",$5F,$60,"WHERE",$60,"ARE",$60,"YOU",$5E,$60,$60,$60
  2936.  
  2937. IncrementLetter2:
  2938. LDA CutsceneTextTimer
  2939. CMP #$08
  2940. BEQ .Increment
  2941. INC CutsceneTextTimer
  2942. RTS
  2943. .Increment:
  2944. LDA CurrentLetterRow
  2945. CMP #$33
  2946. BEQ .AllowButtons
  2947. INC CurrentLetterRow
  2948. LDA #$00
  2949. STA CutsceneTextTimer
  2950. RTS
  2951. .AllowButtons:
  2952. INC FadeOutTimer
  2953. LDA FadeOutTimer
  2954. CMP #$80
  2955. BCC .End
  2956. LDA #$00
  2957. STA FadeOutTimer
  2958. JSR KillSprites
  2959. JSR ResetLevelValues
  2960. LDA #STATELOADPLAYING
  2961. STA gamestate
  2962. .End:
  2963. RTS
  2964.  
  2965. UpdateText:
  2966. LDA #low(ChumEndingText)
  2967. STA TextLow
  2968. LDA #high(ChumEndingText)
  2969. STA TextHigh
  2970.  
  2971. LDX #$00
  2972. LDA CurrentLetterRow
  2973. CMP #$6F
  2974. BCS .End
  2975. .Cont:
  2976. LDX #$00
  2977. .Skip:
  2978. LDY CurrentLetterRow
  2979. .Loop:
  2980. LDA $2002
  2981. TXA
  2982. CLC
  2983. ADC #$20
  2984. STA $2006
  2985. LDA TextCoordinates,y
  2986. CLC
  2987. ADC #$20
  2988. STA $2006
  2989. LDA [TextLow],y
  2990. CLC
  2991. ADC #$9F
  2992. STA $2007
  2993. ; INC CurrentLetterRow
  2994. .End:
  2995. RTS
  2996.  
  2997. ChumEndingText:
  2998. .db "PINKY",$5F,$60,"I",$60,"AM",$60,"HERE",$5C,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60
  2999. .db "THIS",$60,"IS",$60,"SO",$60,"MUCH",$60,"BETTER",$60,"THAN",$60
  3000. .db "WORKING",$60,"FOR",$60,"RICK",$5B,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60
  3001. .db "I",$60,"HOPE",$60,"I",$60,"AM",$60,"OFF",$60,"TOMORROW",$5B,$5B,$5B
  3002.  
  3003. TextCoordinates:
  3004. .db $42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F
  3005. .db $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D
  3006. .db $62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,$6F
  3007. .db $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D
  3008. .db $82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F
  3009. .db $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D
  3010. .db $A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF
  3011. .db $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD
  3012.  
  3013. CheckEndFadeOut:
  3014. LDA FadeOutFlag
  3015. CMP #$01
  3016. BNE .End
  3017. LDA CurrentPalette
  3018. CMP #$00
  3019. BEQ .EndCredits
  3020. LDA PaletteTimer
  3021. CMP #$80
  3022. BEQ .Increment
  3023. INC PaletteTimer
  3024. .End:
  3025. RTS
  3026. .Increment:
  3027. LDA #$00
  3028. STA PaletteTimer
  3029. DEC CurrentPalette
  3030. RTS
  3031. .EndCredits:
  3032. LDA CurrentPlayer
  3033. CMP #$01
  3034. BNE .2p
  3035. LDA #$00
  3036. STA CurrentFloor
  3037. STA CurrentFloorP1
  3038. STA InterludeShownP1
  3039. INC LoopP1
  3040. JMP .Connect
  3041. .2p:
  3042. LDA #$00
  3043. STA CurrentFloor
  3044. STA CurrentFloorP2
  3045. STA InterludeShownP2
  3046. INC LoopP2
  3047. .Connect:
  3048. LDA #$00
  3049. STA FadeOutFlag
  3050. STA FadeOutTimer
  3051. STA CurrentLetterRow
  3052. STA CutsceneTextTimer
  3053. JSR KillSprites
  3054. JSR ResetLevelValues
  3055. LDA #STATELOADPLAYING
  3056. STA gamestate
  3057. RTS
  3058.  
  3059. IncrementLetter:
  3060. LDA CutsceneTextTimer
  3061. CMP #$08
  3062. BEQ .Increment
  3063. INC CutsceneTextTimer
  3064. RTS
  3065. .Increment:
  3066. LDA CurrentLetterRow
  3067. CMP #$6F
  3068. BEQ .AllowButtons
  3069. INC CurrentLetterRow
  3070. LDA #$00
  3071. STA CutsceneTextTimer
  3072. RTS
  3073. .AllowButtons:
  3074. INC FadeOutTimer
  3075. LDA FadeOutTimer
  3076. CMP #$80
  3077. BCC .End
  3078. LDA #$00
  3079. STA FadeOutTimer
  3080. LDA #$01
  3081. STA FadeOutFlag
  3082. .End:
  3083. RTS
  3084.  
  3085. ScrollLamps:
  3086. LDX #$00
  3087. LDY #$00
  3088. .Loop:
  3089. LDA EndPart,y
  3090. CLC
  3091. ADC #$C0
  3092. STA EndPart,y
  3093. LDA $0653,x
  3094. ADC #$00
  3095. STA $0653,x
  3096. INY
  3097. INX
  3098. INX
  3099. INX
  3100. INX
  3101. CPX #$80
  3102. BNE .Loop
  3103. RTS
  3104.  
  3105. KillAllButPinky:
  3106. LDX #$00
  3107. .Loop:
  3108. LDA #$FE
  3109. STA $0604,x
  3110. STA $0607,x
  3111. STA $0650,x
  3112. STA $0653,x
  3113. INX
  3114. INX
  3115. INX
  3116. INX
  3117. CPX #$3C
  3118. BNE .Loop
  3119. LDX #$00
  3120. .Loop2:
  3121. LDA #$FE
  3122. STA $068C,x
  3123. STA $068F,x
  3124. INX
  3125. INX
  3126. INX
  3127. INX
  3128. CPX #$44
  3129. BNE .Loop2
  3130. RTS
  3131.  
  3132. AnimatePinky:
  3133. INC DogAnimTimer
  3134. LDA DogAnimTimer
  3135. CMP #$08
  3136. BEQ .1
  3137. CMP #$10
  3138. BEQ .2
  3139. RTS
  3140. .1:
  3141. LDA #$F6
  3142. STA $0641
  3143. LDA #$F7
  3144. STA $0645
  3145. LDA #$F4
  3146. STA $0649
  3147. LDA #$F5
  3148. STA $064D
  3149. RTS
  3150. .2:
  3151. LDA #$F2
  3152. STA $0641
  3153. LDA #$F3
  3154. STA $0645
  3155. LDA #$F0
  3156. STA $0649
  3157. LDA #$F1
  3158. STA $064D
  3159. LDA #$00
  3160. STA DogAnimTimer
  3161. RTS
  3162.  
  3163. TitleStart:
  3164. LDA ButtonsP1
  3165. AND #%00010000
  3166. BEQ .End
  3167. LDA StartHeld
  3168. CMP #$01
  3169. BEQ .End
  3170. LDA #$01
  3171. STA StartHeld
  3172. LDA #$02
  3173. STA PlayerLife
  3174. LDA #$00
  3175. STA CurrentFloor
  3176. STA CurrentFloorP1
  3177. STA CurrentFloorP2
  3178. LDA #$00
  3179. STA InterludeShownP1
  3180. STA InterludeShownP2
  3181. STA PlaceFlag
  3182. STA P1Score
  3183. STA P1Score+1
  3184. STA P1Score+2
  3185. STA P1Score+3
  3186. STA P1Score+4
  3187. STA P1Score+5
  3188. STA LoopP1
  3189. STA LoopP2
  3190. LDA #$08
  3191. STA NametableCount
  3192. LDA $0600
  3193. CMP #$82
  3194. BNE .TryP2
  3195. LDA #$00
  3196. STA Game2p
  3197. LDA #$01
  3198. STA CurrentPlayer
  3199. JSR ResetLevelValues
  3200. LDA #STATELOADPLAYING
  3201. STA gamestate
  3202. .End:
  3203. RTS
  3204. .TryP2:
  3205. CMP #$92
  3206. BNE .TryMemorium
  3207. LDA #$01
  3208. STA CurrentPlayer
  3209. STA Game2p
  3210. LDA #$00
  3211. STA P2Score
  3212. STA P2Score+1
  3213. STA P2Score+2
  3214. STA P2Score+3
  3215. STA P2Score+4
  3216. STA P2Score+5
  3217. LDA #$02
  3218. STA PlayerLife
  3219. STA PlayerLifeP2
  3220. LDA #STATELOADPLAYING
  3221. STA gamestate
  3222. RTS
  3223. .TryMemorium:
  3224. CMP #$A2
  3225. BNE .TryCredits
  3226. RTS
  3227. .TryCredits:
  3228. CMP #$B2
  3229. BNE .End
  3230. LDA #STATELOADCREDITS
  3231. STA gamestate
  3232. RTS
  3233.  
  3234. StandStill:
  3235. LDA gamestate
  3236. CMP #STATEPLAYING
  3237. BCC .End
  3238. CMP #$08
  3239. BCS .End
  3240. LDX #$00
  3241. LDY #$00
  3242. .Loop2:
  3243. LDA Walk2,x
  3244. STA $0605,y
  3245. INX
  3246. TYA
  3247. CLC
  3248. ADC #$04
  3249. TAY
  3250. CPX #$0F
  3251. BNE .Loop2
  3252.  
  3253. LDA #$00
  3254. STA AnimTimer
  3255. JSR ResetDuck
  3256. .End:
  3257. RTS
  3258.  
  3259. Walk1:
  3260. .db $01,$02,$00
  3261. .db $06,$07,$08
  3262. .db $10,$11,$12
  3263. .db $1C,$1D,$1E
  3264. .db $27,$28,$29
  3265.  
  3266. Walk2:
  3267. .db $03,$04,$00
  3268. .db $09,$0A,$0B
  3269. .db $13,$14,$15
  3270. .db $1F,$20,$00
  3271. .db $00,$2A,$00
  3272.  
  3273. Walk3:
  3274. .db $01,$02,$00
  3275. .db $06,$0C,$08
  3276. .db $16,$17,$18
  3277. .db $21,$22,$23
  3278. .db $2B,$2C,$2D
  3279.  
  3280. Kick:
  3281. .db $05,$02,$00
  3282. .db $0D,$0E,$0F
  3283. .db $19,$1A,$1B
  3284. .db $24,$25,$26
  3285. .db $00,$2E,$2F
  3286.  
  3287. JumpSprites:
  3288. .db $00,$00,$00
  3289. .db $03,$04,$00
  3290. .db $38,$0A,$00
  3291. .db $42,$43,$00
  3292. .db $4B,$4C,$00
  3293.  
  3294. DuckSprites:
  3295. .db $00,$00,$00
  3296. .db $00,$03,$04
  3297. .db $00,$37,$0A
  3298. .db $00,$40,$41
  3299. .db $00,$48,$4A
  3300.  
  3301. DuckAttackSprites:
  3302. .db $00,$00,$00
  3303. .db $00,$05,$02
  3304. .db $34,$35,$36
  3305. .db $3D,$3E,$3F
  3306. .db $00,$48,$49
  3307.  
  3308. JumpAttackSprites:
  3309. .db $00,$00,$00
  3310. .db $00,$05,$02
  3311. .db $34,$54,$36
  3312. .db $5B,$5C,$3F
  3313. .db $61,$62,$49
  3314.  
  3315. GrandmaSprites:
  3316. .db $30,$31
  3317. .db $39,$3A
  3318. .db $44,$45
  3319. .db $4D,$4E
  3320.  
  3321. GrandmaSprites2:
  3322. .db $32,$33
  3323. .db $3B,$3C
  3324. .db $46,$47
  3325. .db $4F,$50
  3326.  
  3327. KidSprites:
  3328. .db $59,$5A
  3329. .db $5F,$60
  3330. .db $65,$66
  3331. .db $00,$00
  3332.  
  3333. KidSprites2:
  3334. .db $57,$58
  3335. .db $5D,$5E
  3336. .db $63,$64
  3337. .db $00,$00
  3338.  
  3339. NerdSprites:
  3340. .db $C5,$C6
  3341. .db $CA,$CB
  3342. .db $DA,$DB
  3343. .db $EA,$EB
  3344.  
  3345. NerdSprites2:
  3346. .db $C7,$C8
  3347. .db $CC,$CD
  3348. .db $DC,$DD
  3349. .db $EC,$ED
  3350.  
  3351. Bird1:
  3352. .db $D6,$D7,$D8
  3353. .db $E6,$E7,$00,$00,$00
  3354.  
  3355. Bird2:
  3356. .db $D9,$E0,$E2
  3357. .db $E9,$E1,$00,$00,$00
  3358.  
  3359. PlaceBird:
  3360. LDX #$00
  3361. LDY #$00
  3362. LDA PlaceFlag
  3363. CMP #$07
  3364. BCC .End
  3365. CMP #$09
  3366. BCS .End
  3367. .PlaceBegin:
  3368. LDA $0640,x
  3369. CMP #$FE
  3370. BEQ .Place
  3371. TXA
  3372. CLC
  3373. ADC #$20
  3374. TAX
  3375. INY
  3376. CPX #$80
  3377. BNE .PlaceBegin
  3378. .End:
  3379. RTS
  3380. .Place:
  3381. LDA #$74
  3382. STA $0640,x
  3383. STA $0644,x
  3384. STA $0648,x
  3385. CLC
  3386. ADC #$08
  3387. STA $064C,x
  3388. STA $0650,x
  3389. LDA #$20
  3390. STA $0654,x
  3391. STA $0658,x
  3392. STA $065C,x
  3393. LDA PlaceFlag
  3394. CMP #$07
  3395. BNE .PlaceRight
  3396. .PlaceLeft:
  3397. LDA #$01
  3398. STA EnemyMoveDirection,y
  3399. LDA #$20
  3400. STA $0657,x
  3401. STA $065B,x
  3402. STA $065F,x
  3403. LDA #$10
  3404. STA $0643,x
  3405. STA $064F,x
  3406. SEC
  3407. SBC #$08
  3408. STA $0647,x
  3409. STA $0653,x
  3410. SEC
  3411. SBC #$08
  3412. STA $064B,x
  3413. LDA #%01000011
  3414. STA $0642,x
  3415. STA $0646,x
  3416. STA $064A,x
  3417. STA $064E,x
  3418. STA $0652,x
  3419. JSR SetBirdSprite
  3420. RTS
  3421. .PlaceRight:
  3422. LDA #$02
  3423. STA EnemyMoveDirection,y
  3424. LDA #$E7
  3425. STA $0643,x
  3426. STA $064F,x
  3427. CLC
  3428. ADC #$08
  3429. STA $0647,x
  3430. STA $0653,x
  3431. CLC
  3432. ADC #$08
  3433. STA $064B,x
  3434. LDA #$03
  3435. STA $0642,x
  3436. STA $0646,x
  3437. STA $064A,x
  3438. STA $064E,x
  3439. STA $0652,x
  3440. JSR SetBirdSprite
  3441. RTS
  3442.  
  3443. SetBirdSprite:
  3444. LDY #$00
  3445. .Loop:
  3446. LDA Bird1,y
  3447. STA $0641,x
  3448. INY
  3449. TXA
  3450. CLC
  3451. ADC #$04
  3452. TAX
  3453. CPY #$08
  3454. BNE .Loop
  3455. LDA #$00
  3456. STA PlaceFlag
  3457. RTS
  3458.  
  3459. MoveBird:
  3460. LDX #$00
  3461. LDY #$00
  3462. .Reset:
  3463. LDA #$00
  3464. STA LoopVar
  3465. .Loop:
  3466. CPX #$00
  3467. BNE .Try2
  3468. LDA EnemyDead
  3469. CMP #$00
  3470. BEQ .StartMove
  3471. JMP .Cycle
  3472. .Try2:
  3473. CPX #$20
  3474. BNE .Try3
  3475. LDA EnemyDead+1
  3476. CMP #$00
  3477. BEQ .StartMove
  3478. JMP .Cycle
  3479. .Try3:
  3480. CPX #$40
  3481. BNE .Try4
  3482. LDA EnemyDead+2
  3483. CMP #$00
  3484. BEQ .StartMove
  3485. JMP .Cycle
  3486. .Try4:
  3487. CPX #$60
  3488. BNE .Cycle
  3489. LDA EnemyDead+3
  3490. CMP #$00
  3491. BEQ .StartMove
  3492. JMP .Cycle
  3493. .StartMove:
  3494. LDA $0640,x
  3495. CMP #$FE
  3496. BEQ .Cycle
  3497. LDA $0641,x
  3498. CMP #$D6
  3499. BEQ .BeginMove
  3500. CMP #$D9
  3501. BEQ .BeginMove
  3502. .Cycle:
  3503. TXA
  3504. CLC
  3505. ADC #$20
  3506. TAX
  3507. INY
  3508. CPX #$A0
  3509. BNE .Loop
  3510. .End:
  3511. RTS
  3512. .BeginMove:
  3513. TXA
  3514. STA XTemp ;Enemy offset
  3515. LSR A ;/2
  3516. LSR A ;/2
  3517. STA YTemp ;Partial movement offset
  3518. LDX XTemp
  3519.  
  3520. LDA EnemyMoveDirection,y
  3521. CMP #$02
  3522. BEQ .BeginMoveLeft
  3523. JMP .BeginMoveRight
  3524. .BeginMoveLeft:
  3525. TYA
  3526. STA YTemp2
  3527. .MoveLeft:
  3528. LDA $0643,x
  3529. CMP #$03
  3530. BCS .Skip3
  3531. JSR KillBird
  3532. JMP .Cycle
  3533. .Skip3:
  3534. LDY YTemp
  3535.  
  3536. LDA NoScroll
  3537. CMP #$01
  3538. BEQ .NoButtons
  3539.  
  3540. LDA ButtonsP1
  3541. AND #%00000001
  3542. BNE .LeftRight
  3543. LDA ButtonsP1
  3544. AND #%00000010
  3545. BNE .LeftLeft
  3546. .NoButtons:
  3547. LDA EnemyMovePart,y
  3548. SEC
  3549. SBC #$C0
  3550. STA EnemyMovePart,y
  3551. LDA $0643,x
  3552. SBC #$02
  3553. STA $0643,x
  3554. JMP .Connect2
  3555. .LeftRight:
  3556. LDA EnemyMovePart,y
  3557. SEC
  3558. SBC #$80
  3559. STA EnemyMovePart,y
  3560. LDA $0643,x
  3561. SBC #$03
  3562. STA $0643,x
  3563. JMP .Connect2
  3564. .LeftLeft:
  3565. LDA EnemyMovePart,y
  3566. SEC
  3567. SBC #$20
  3568. STA EnemyMovePart,y
  3569. LDA $0643,x
  3570. SBC #$02
  3571. STA $0643,x
  3572. .Connect2:
  3573. INC LoopVar
  3574. INY
  3575. INC YTemp
  3576. INX
  3577. INX
  3578. INX
  3579. INX
  3580. LDA LoopVar
  3581. CMP #$08
  3582. BNE .Skip3
  3583. TXA
  3584. STA XTemp
  3585. JSR AnimateBird
  3586. LDX XTemp
  3587. INC YTemp2
  3588. LDY YTemp2
  3589. JMP .Reset
  3590. .BeginMoveRight:
  3591. TYA
  3592. STA YTemp2
  3593. .MoveRight:
  3594. LDA $0643,x
  3595. CMP #$FC
  3596. BCC .Skip2
  3597. JSR KillBird
  3598. JMP .Cycle
  3599. .Skip2:
  3600. LDY YTemp
  3601.  
  3602. LDA NoScroll
  3603. CMP #$01
  3604. BEQ .NoButtons2
  3605.  
  3606. LDA ButtonsP1
  3607. AND #%00000001
  3608. BNE .RightRight
  3609. LDA ButtonsP1
  3610. AND #%00000010
  3611. BNE .RightLeft
  3612. .NoButtons2:
  3613. LDA EnemyMovePart,y
  3614. CLC
  3615. ADC #$C0
  3616. STA EnemyMovePart,y
  3617. LDA $0643,x
  3618. ADC #$02
  3619. STA $0643,x
  3620. JMP .Connect
  3621. .RightLeft:
  3622. LDA EnemyMovePart,y
  3623. CLC
  3624. ADC #$80
  3625. STA EnemyMovePart,y
  3626. LDA $0643,x
  3627. ADC #$03
  3628. STA $0643,x
  3629. JMP .Connect
  3630. .RightRight:
  3631. LDA EnemyMovePart,y
  3632. CLC
  3633. ADC #$20
  3634. STA EnemyMovePart,y
  3635. LDA $0643,x
  3636. ADC #$02
  3637. STA $0643,x
  3638. .Connect:
  3639. INC LoopVar
  3640. INC YTemp
  3641. INY
  3642. INX
  3643. INX
  3644. INX
  3645. INX
  3646. LDA LoopVar
  3647. CMP #$08
  3648. BNE .Skip2
  3649. TXA
  3650. STA XTemp
  3651. JSR AnimateBird
  3652. LDX XTemp
  3653. INC YTemp2
  3654. LDY YTemp2
  3655. JMP .Reset
  3656.  
  3657. AnimateBird:
  3658. LDX #$00
  3659. LDY #$00
  3660. .Loop:
  3661. LDA $0641,x
  3662. CMP #$D6
  3663. BEQ .Move
  3664. CMP #$D9
  3665. BEQ .Move
  3666. JMP .End
  3667. .Move:
  3668. ; LDA $0653,x
  3669. ; STA $0643,x
  3670. LDA EnemyAnimateTimer,y
  3671. CMP #$08
  3672. BEQ .Walk1
  3673. CMP #$10
  3674. BEQ .Walk2
  3675. RTS
  3676. .Walk1:
  3677. LDA Bird1
  3678. STA $0641,x
  3679. LDA Bird1+1
  3680. STA $0645,x
  3681. LDA Bird1+2
  3682. STA $0649,x
  3683. LDA Bird1+3
  3684. STA $064D,x
  3685. LDA Bird1+4
  3686. STA $0651,x
  3687. TXA
  3688. CLC
  3689. ADC #$20
  3690. TAX
  3691. JMP .Mid
  3692. ; RTS
  3693. .Walk2:
  3694. LDA Bird2
  3695. STA $0641,x
  3696. LDA Bird2+1
  3697. STA $0645,x
  3698. LDA Bird2+2
  3699. STA $0649,x
  3700. LDA Bird2+3
  3701. STA $064D,x
  3702. LDA Bird2+4
  3703. STA $0651,x
  3704. TXA
  3705. CLC
  3706. ADC #$20
  3707. TAX
  3708. JMP .Mid
  3709. .EndPre:
  3710. INY
  3711. .End:
  3712. ; INY
  3713. TXA
  3714. CLC
  3715. ADC #$20
  3716. TAX
  3717. .Mid:
  3718. CPX #$80
  3719. BEQ .Finish
  3720. JMP .Loop
  3721. .Finish:
  3722. RTS
  3723.  
  3724. AnimateChum:
  3725. LDA JumpFlag
  3726. CMP #$00
  3727. BNE .End
  3728. INC AnimTimer
  3729. LDA AnimTimer
  3730. CMP #$08
  3731. BCC .1
  3732. CMP #$10
  3733. BCC .2
  3734. CMP #$18
  3735. BCC .3
  3736. CMP #$20
  3737. BCC .2
  3738. CMP #$20
  3739. BNE .End
  3740. LDA #$00
  3741. STA AnimTimer
  3742. .End:
  3743. RTS
  3744. .1:
  3745. LDX #$00
  3746. LDY #$00
  3747. .Loop1:
  3748. LDA Walk1,x
  3749. STA $0605,y
  3750. INX
  3751. TYA
  3752. CLC
  3753. ADC #$04
  3754. TAY
  3755. CPX #$0F
  3756. BNE .Loop1
  3757. RTS
  3758. .2:
  3759. LDX #$00
  3760. LDY #$00
  3761. .Loop2:
  3762. LDA Walk2,x
  3763. STA $0605,y
  3764. INX
  3765. TYA
  3766. CLC
  3767. ADC #$04
  3768. TAY
  3769. CPX #$0F
  3770. BNE .Loop2
  3771. RTS
  3772. .3:
  3773. LDX #$00
  3774. LDY #$00
  3775. .Loop3:
  3776. LDA Walk3,x
  3777. STA $0605,y
  3778. INX
  3779. TYA
  3780. CLC
  3781. ADC #$04
  3782. TAY
  3783. CPX #$0F
  3784. BNE .Loop3
  3785. RTS
  3786.  
  3787. ActuallyDuck:
  3788. LDX #$00
  3789. LDY #$00
  3790. .Loop:
  3791. LDA DuckSprites,x
  3792. STA $0605,y
  3793. INX
  3794. TYA
  3795. CLC
  3796. ADC #$04
  3797. TAY
  3798. CPX #$0F
  3799. BNE .Loop
  3800. .End:
  3801. RTS
  3802.  
  3803. MoveRight:
  3804. LDA BossDead
  3805. CMP #$00
  3806. BEQ .Start2
  3807. JMP .End
  3808. .Start2:
  3809. LDA ButtonsP1
  3810. AND #%00000001
  3811. BNE .Start
  3812. JMP .End
  3813. .Start:
  3814. LDA DuckFlag
  3815. CMP #$01
  3816. BNE .SkipJump
  3817. LDA JumpFlag
  3818. CMP #$00
  3819. BNE .SkipJump
  3820. LDA ButtonsP1
  3821. AND #%00000100
  3822. BNE .End
  3823. .SkipJump:
  3824. JSR AnimateChum
  3825. LDA RightHeld
  3826. CMP #$01
  3827. BEQ .SkipTurn
  3828. LDA #$01
  3829. STA RightHeld
  3830. STA DirFacing
  3831. .Turn:
  3832. LDX #$00
  3833. .Loop:
  3834. LDA #%01000000
  3835. STA $0606,x
  3836. INX
  3837. INX
  3838. INX
  3839. INX
  3840. CPX #$3C
  3841. BNE .Loop
  3842.  
  3843. JSR SwapRight
  3844. .SkipTurn:
  3845. LDA $0606
  3846. CMP #$00
  3847. BEQ .Turn
  3848.  
  3849. LDA DuckFlag
  3850. CMP #$01
  3851. BNE .NotDuck
  3852. JSR ResetDuck
  3853. .NotDuck:
  3854. LDA BossPlacedFlag
  3855. CMP #$01
  3856. BEQ .MoveInstead
  3857.  
  3858. LDA NametableCount
  3859. CMP #$08
  3860. BEQ .MoveInstead
  3861.  
  3862. LDA $0607
  3863. CMP #$88
  3864. BCC .MoveInstead
  3865.  
  3866. JSR ScrollFanR
  3867.  
  3868. LDA Xscroll
  3869. CLC
  3870. ADC #$01
  3871. STA Xscroll
  3872.  
  3873. LDA #$00
  3874. STA NoScroll
  3875.  
  3876. LDA Xscroll ; check if the scroll just wrapped from 255 to 0
  3877. BNE .End
  3878.  
  3879. INC NametableCount
  3880. JSR ResetFanStuff
  3881. .SkipInc:
  3882. LDA nametable ; load current nametable number (0 or 1)
  3883. EOR #$01 ; exclusive OR of bit 0 will flip that bit
  3884. STA nametable ; so if nametable was 0, now 1
  3885. ; if nametable was 1, now 0
  3886. .End:
  3887. RTS
  3888. .MoveInstead:
  3889. LDA $0607
  3890. CMP #$F0
  3891. BCS .End
  3892.  
  3893. LDX #$00
  3894. .MoveLoop:
  3895. LDA $0607,x
  3896. CLC
  3897. ADC #$01
  3898. STA $0607,x
  3899. INX
  3900. INX
  3901. INX
  3902. INX
  3903. CPX #$3C
  3904. BNE .MoveLoop
  3905.  
  3906. LDA #$01
  3907. STA NoScroll
  3908. RTS
  3909.  
  3910. SwapRight:
  3911. LDA $060F
  3912. CMP $0607
  3913. BCC .End
  3914. LDA $0607
  3915. STA $060F
  3916. STA $061B
  3917. STA $0627
  3918. STA $0633
  3919. STA $063F
  3920. CLC
  3921. ADC #$08
  3922. STA $060B
  3923. STA $0617
  3924. STA $0623
  3925. STA $062F
  3926. STA $063B
  3927. CLC
  3928. ADC #$08
  3929. STA $0607
  3930. STA $0613
  3931. STA $061F
  3932. STA $062B
  3933. STA $0637
  3934. .End:
  3935. RTS
  3936.  
  3937. SwapLeft:
  3938. LDA $0607
  3939. CMP $060F
  3940. BCC .End
  3941. LDA $0607
  3942. STA $060F
  3943. STA $061B
  3944. STA $0627
  3945. STA $0633
  3946. STA $063F
  3947. SEC
  3948. SBC #$08
  3949. STA $060B
  3950. STA $0617
  3951. STA $0623
  3952. STA $062F
  3953. STA $063B
  3954. SEC
  3955. SBC #$08
  3956. STA $0607
  3957. STA $0613
  3958. STA $061F
  3959. STA $062B
  3960. STA $0637
  3961. .End:
  3962. RTS
  3963.  
  3964. UpdateOtherPoints:
  3965. LDA Game2p
  3966. CMP #$01
  3967. BNE .End
  3968. LDX #$00
  3969. LDA CurrentPlayer
  3970. CMP #$01
  3971. BEQ .Second
  3972. LDA #$20
  3973. STA $2006
  3974. LDA #$44
  3975. STA $2006
  3976. .Loop:
  3977. LDA P1Score,x
  3978. CLC
  3979. ADC #$D0
  3980. STA $2007
  3981. INX
  3982. CPX #$06
  3983. BNE .Loop
  3984. RTS
  3985. .Second:
  3986. LDA #$20
  3987. STA $2006
  3988. LDA #$58
  3989. STA $2006
  3990. .Loop2:
  3991. LDA P2Score,x
  3992. CLC
  3993. ADC #$D0
  3994. STA $2007
  3995. INX
  3996. CPX #$06
  3997. BNE .Loop2
  3998. .End:
  3999. RTS
  4000.  
  4001. LoadBlankNametable:
  4002. LDA $2002
  4003. LDA #$20
  4004. STA $2006
  4005. LDA #$00
  4006. STA $2006
  4007.  
  4008. LDX #$04
  4009. LDY #$00
  4010. .TitleLoop:
  4011. LDA #$00 ;load nametable
  4012. STA $2007 ;draw tile
  4013. INY ;X is 0, so move on to get new counter number
  4014. BNE .TitleLoop
  4015. ;;Outer Loop
  4016. INC AddrHigh
  4017. DEX
  4018. BNE .TitleLoop
  4019. RTS
  4020.  
  4021. LoadBlankAttribute:
  4022. LDA $2002
  4023. LDA #$23
  4024. STA $2006
  4025. LDA #$C0
  4026. STA $2006
  4027.  
  4028. LDY #$00
  4029. .Loop:
  4030. LDA #$00
  4031. STA $2007
  4032. INY
  4033. CPY #$40
  4034. BNE .Loop
  4035. RTS
  4036.  
  4037. LoadGameOverText:
  4038. LDA #$21
  4039. STA $2006
  4040. LDA #$EB
  4041. STA $2006
  4042.  
  4043. LDX #$00
  4044. .Loop:
  4045. LDA GameOverText,x
  4046. STA $2007
  4047. INX
  4048. CPX #$0A
  4049. BNE .Loop
  4050. RTS
  4051.  
  4052. GameOverText:
  4053. .db $E6,$E0,$EC,$E4,$00,$00,$EE,$F5,$E4,$F1
  4054.  
  4055. UpdateHiScore:
  4056. LDX #$00
  4057. .P1Loop:
  4058. LDA Game2p
  4059. CMP #$01
  4060. BNE .Regular
  4061. LDA CurrentPlayer
  4062. CMP #$01
  4063. BEQ .Regular
  4064. JMP .2ndCompare
  4065. .Regular:
  4066.  
  4067. LDA P1Score,x
  4068. CMP HiScore,x
  4069. BCC .End
  4070. LDA HiScore,x
  4071. CMP P1Score,x
  4072. BCC .NewHighP1
  4073. INX
  4074. CPX #$06
  4075. BNE .P1Loop
  4076. .NewHighP1:
  4077. LDX #$00
  4078. .EqualLoop:
  4079. LDA P1Score,x
  4080. CMP HiScore,x
  4081. BNE .NotEqual
  4082. INX
  4083. CPX #$06
  4084. BNE .EqualLoop
  4085. RTS
  4086. .NotEqual:
  4087. LDX #$00
  4088. .HiLoop:
  4089. LDA P1Score,x
  4090. STA HiScore,x
  4091. STA $0550,x
  4092. INX
  4093. CPX #$06
  4094. BNE .HiLoop
  4095. LDA #$01
  4096. STA AwardHiScoreFlag
  4097. .End:
  4098. RTS
  4099. .2ndCompare:
  4100. LDA P2Score,x
  4101. CMP HiScore,x
  4102. BCC .End
  4103. LDA HiScore,x
  4104. CMP P2Score,x
  4105. BCC .NewHighP2
  4106. INX
  4107. CPX #$06
  4108. BNE .2ndCompare
  4109. .NewHighP2:
  4110. LDX #$00
  4111. .EqualLoop2:
  4112. LDA P2Score,x
  4113. CMP HiScore,x
  4114. BNE .NotEqual2
  4115. INX
  4116. CPX #$06
  4117. BNE .EqualLoop2
  4118. RTS
  4119. .NotEqual2:
  4120. LDX #$00
  4121. .HiLoop2:
  4122. LDA P2Score,x
  4123. STA HiScore,x
  4124. STA $0550,x
  4125. INX
  4126. CPX #$06
  4127. BNE .HiLoop2
  4128. LDA #$01
  4129. STA AwardHiScoreFlag
  4130. RTS
  4131.  
  4132. AnimateVerticalWater:
  4133. JSR AnimateVertical
  4134. JSR AnimateVertical2
  4135. RTS
  4136.  
  4137. AnimateVertical:
  4138. LDX #$00
  4139. LDY #$00
  4140.  
  4141. LDA BossTimer
  4142. CMP #$07
  4143. BEQ .1
  4144. CMP #$0F
  4145. BEQ .2
  4146. CMP #$17
  4147. BEQ .3
  4148. RTS
  4149. .1:
  4150. LDA Stream1Coords,x
  4151. STA $2006
  4152. LDA Stream1Coords+1,x
  4153. STA $2006
  4154. LDA Stream1,y
  4155. STA $2007
  4156. LDA Stream2Coords,x
  4157. STA $2006
  4158. LDA Stream2Coords+1,x
  4159. STA $2006
  4160. LDA Stream1,y
  4161. STA $2007
  4162. INX
  4163. INX
  4164. INY
  4165. CPY #$04
  4166. BNE .1
  4167. RTS
  4168. .2:
  4169. LDA Stream1Coords,x
  4170. STA $2006
  4171. LDA Stream1Coords+1,x
  4172. STA $2006
  4173. LDA Stream2,y
  4174. STA $2007
  4175. LDA Stream2Coords,x
  4176. STA $2006
  4177. LDA Stream2Coords+1,x
  4178. STA $2006
  4179. LDA Stream2,y
  4180. STA $2007
  4181. INX
  4182. INX
  4183. INY
  4184. CPY #$04
  4185. BNE .2
  4186. RTS
  4187. .3:
  4188. LDA Stream1Coords,x
  4189. STA $2006
  4190. LDA Stream1Coords+1,x
  4191. STA $2006
  4192. LDA Stream3,y
  4193. STA $2007
  4194. LDA Stream2Coords,x
  4195. STA $2006
  4196. LDA Stream2Coords+1,x
  4197. STA $2006
  4198. LDA Stream3,y
  4199. STA $2007
  4200. INX
  4201. INX
  4202. INY
  4203. CPY #$04
  4204. BNE .3
  4205. RTS
  4206.  
  4207. AnimateVertical2:
  4208. LDX #$00
  4209. LDY #$00
  4210.  
  4211. LDA BossTimer
  4212. CMP #$06
  4213. BEQ .1
  4214. CMP #$0E
  4215. BEQ .2
  4216. CMP #$16
  4217. BEQ .3
  4218. RTS
  4219. .1:
  4220. LDA Stream3Coords,x
  4221. STA $2006
  4222. LDA Stream3Coords+1,x
  4223. STA $2006
  4224. LDA Stream1,y
  4225. STA $2007
  4226. LDA Stream4Coords,x
  4227. STA $2006
  4228. LDA Stream4Coords+1,x
  4229. STA $2006
  4230. LDA Stream1,y
  4231. STA $2007
  4232. INX
  4233. INX
  4234. INY
  4235. CPY #$02
  4236. BNE .1
  4237. RTS
  4238. .2:
  4239. LDA Stream3Coords,x
  4240. STA $2006
  4241. LDA Stream3Coords+1,x
  4242. STA $2006
  4243. LDA Stream2,y
  4244. STA $2007
  4245. LDA Stream4Coords,x
  4246. STA $2006
  4247. LDA Stream4Coords+1,x
  4248. STA $2006
  4249. LDA Stream2,y
  4250. STA $2007
  4251. INX
  4252. INX
  4253. INY
  4254. CPY #$02
  4255. BNE .2
  4256. RTS
  4257. .3:
  4258. LDA Stream3Coords,x
  4259. STA $2006
  4260. LDA Stream3Coords+1,x
  4261. STA $2006
  4262. LDA Stream3,y
  4263. STA $2007
  4264. LDA Stream4Coords,x
  4265. STA $2006
  4266. LDA Stream4Coords+1,x
  4267. STA $2006
  4268. LDA Stream3,y
  4269. STA $2007
  4270. INX
  4271. INX
  4272. INY
  4273. CPY #$02
  4274. BNE .3
  4275. RTS
  4276.  
  4277. Stream3Coords:
  4278. .db $21,$A7,$21,$C7
  4279.  
  4280. Stream4Coords:
  4281. .db $21,$B8,$21,$D8
  4282.  
  4283. Stream1Coords:
  4284. .db $21,$69,$21,$89,$21,$A9,$21,$C9
  4285.  
  4286. Stream2Coords:
  4287. .db $21,$76,$21,$96,$21,$B6,$21,$D6
  4288.  
  4289. Stream1:
  4290. .db $C1,$C2,$C3,$C4
  4291.  
  4292. Stream2:
  4293. .db $C5,$C6,$C7,$C8
  4294.  
  4295. Stream3:
  4296. .db $C9,$CA,$CB,$CC
  4297.  
  4298. MoveLeft:
  4299. LDA BossDead
  4300. CMP #$00
  4301. BEQ .Start2
  4302. JMP .End
  4303. .Start2:
  4304. LDA ButtonsP1
  4305. AND #%00000010
  4306. BNE .Start
  4307. JMP .End
  4308. .Start:
  4309. LDA DuckFlag
  4310. CMP #$01
  4311. BNE .SkipJump
  4312. LDA JumpFlag
  4313. CMP #$00
  4314. BNE .SkipJump
  4315. LDA ButtonsP1
  4316. AND #%00000100
  4317. BNE .End
  4318. .SkipJump:
  4319. JSR AnimateChum
  4320. LDA LeftHeld
  4321. CMP #$01
  4322. BEQ .SkipTurn
  4323. LDA #$01
  4324. STA LeftHeld
  4325. LDA #$00
  4326. STA DirFacing
  4327. .Turn:
  4328. LDX #$00
  4329. .Loop:
  4330. LDA #%00
  4331. STA $0606,x
  4332. INX
  4333. INX
  4334. INX
  4335. INX
  4336. CPX #$3C
  4337. BNE .Loop
  4338.  
  4339. JSR SwapLeft
  4340. .SkipTurn:
  4341. LDA $0606
  4342. CMP #$00
  4343. BNE .Turn
  4344.  
  4345. LDA DuckFlag
  4346. CMP #$01
  4347. BNE .NotDuck
  4348. JSR ResetDuck
  4349. .NotDuck:
  4350.  
  4351. LDA BossPlacedFlag
  4352. CMP #$01
  4353. BEQ .MoveInstead
  4354.  
  4355. LDA NametableCount
  4356. CMP #$00
  4357. BNE .Scroll
  4358. LDA Xscroll
  4359. CMP #$00
  4360. BNE .Scroll
  4361. JMP .MoveInstead
  4362. .Scroll:
  4363. LDA $0607
  4364. CMP #$78
  4365. BCS .MoveInstead
  4366.  
  4367. JSR ScrollFanL
  4368.  
  4369. LDA Xscroll
  4370. SEC
  4371. SBC #$01
  4372. STA Xscroll
  4373.  
  4374. LDA #$00
  4375. STA NoScroll
  4376.  
  4377. LDA Xscroll ; check if the scroll just wrapped from 255 to 0
  4378. CMP #$FF
  4379. BNE .End
  4380.  
  4381. DEC NametableCount
  4382. JSR ResetFanStuff
  4383.  
  4384. LDA nametable ; load current nametable number (0 or 1)
  4385. EOR #$01 ; exclusive OR of bit 0 will flip that bit
  4386. STA nametable ; so if nametable was 0, now 1
  4387. ; if nametable was 1, now 0
  4388. .End:
  4389. RTS
  4390. .MoveInstead:
  4391. LDA $0607
  4392. CMP #$09
  4393. BCC .End
  4394.  
  4395. LDX #$00
  4396. .MoveLoop:
  4397. LDA $0607,x
  4398. SEC
  4399. SBC #$01
  4400. STA $0607,x
  4401. INX
  4402. INX
  4403. INX
  4404. INX
  4405. CPX #$3C
  4406. BNE .MoveLoop
  4407.  
  4408. LDA #$01
  4409. STA NoScroll
  4410. RTS
  4411.  
  4412. MoveDown:
  4413. RTS
  4414.  
  4415. RunAttackDelay:
  4416. LDA AttackDelay
  4417. CMP #$00
  4418. BEQ .End
  4419. INC AttackDelay
  4420. LDA AttackDelay
  4421. CMP #$10
  4422. BCC .End
  4423. LDA #$00
  4424. STA AttackDelay
  4425. STA AttackPrevent
  4426. .End:
  4427. RTS
  4428.  
  4429. PixelAdjust:
  4430. LDA JumpFlag
  4431. CMP #$00
  4432. BEQ .NotJumping
  4433. LDA JumpAttackFlag
  4434. CMP #$01
  4435. BEQ .End
  4436. LDA #$01
  4437. STA JumpAttackFlag
  4438. .NotJumping:
  4439. LDA $0606
  4440. CMP #$00
  4441. BEQ .Left
  4442. LDX #$00
  4443. .Loop:
  4444. LDA $0607,x
  4445. CLC
  4446. ADC #$08
  4447. STA $0607,x
  4448. INX
  4449. INX
  4450. INX
  4451. INX
  4452. CPX #$3C
  4453. BNE .Loop
  4454. .End:
  4455. RTS
  4456. .Left:
  4457. LDX #$00
  4458. .Loop2:
  4459. LDA $0607,x
  4460. SEC
  4461. SBC #$08
  4462. STA $0607,x
  4463. INX
  4464. INX
  4465. INX
  4466. INX
  4467. CPX #$3C
  4468. BNE .Loop2
  4469. RTS
  4470.  
  4471. AdjustDucking:
  4472. LDA ChumAttacking
  4473. CMP #$01
  4474. BEQ .End
  4475. LDA DuckFlag
  4476. CMP #$01
  4477. BEQ .End
  4478. LDA #$01
  4479. STA DuckFlag
  4480. LDA $0607
  4481. CMP $060F
  4482. BCC .Left
  4483. LDA #$01
  4484. STA DuckFacing
  4485. JMP .Connect
  4486. .Left:
  4487. LDA #$00
  4488. STA DuckFacing
  4489. .Connect:
  4490. JSR PixelAdjust
  4491. .End:
  4492. RTS
  4493.  
  4494. ChumJump:
  4495. LDA ButtonsP1
  4496. AND #%00000100
  4497. BNE .End
  4498. LDA ButtonsP1
  4499. AND #%10000000
  4500. BEQ .End
  4501. LDA BossDead
  4502. CMP #$00
  4503. BNE .End
  4504. LDA AttackPrevent
  4505. CMP #$01
  4506. BEQ .End
  4507. LDA AHeld
  4508. CMP #$01
  4509. BEQ .End
  4510. LDA DuckFlag
  4511. CMP #$01
  4512. BNE .NoFix
  4513. JSR ResetDuck
  4514. .NoFix:
  4515. LDA #$01
  4516. STA AHeld
  4517. STA JumpFlag
  4518. .End:
  4519. RTS
  4520.  
  4521. ChumDuck:
  4522. LDA ButtonsP1
  4523. AND #%00000011
  4524. BNE .End
  4525. LDA ButtonsP1
  4526. AND #%00000100
  4527. BEQ .End
  4528. LDA JumpFlag
  4529. CMP #$00
  4530. BNE .End
  4531. JSR AdjustDucking
  4532. JSR ActuallyDuck
  4533. .End:
  4534. RTS
  4535.  
  4536. EraseFan:
  4537. LDA FanPlaced
  4538. CMP #$01
  4539. BNE .End
  4540. LDA FanErased
  4541. CMP #$00
  4542. BNE .End
  4543. LDA #$25
  4544. STA $0560
  4545. LDA #$58
  4546. STA $0561
  4547.  
  4548. LDX #$00
  4549. .Loop:
  4550. LDA #$07
  4551. STA $0562,x
  4552. INX
  4553. CPX #$06
  4554. BNE .Loop
  4555. LDA #$01
  4556. STA FanErased
  4557. .End:
  4558. RTS
  4559.  
  4560. ScrollFanR:
  4561. LDX #$00
  4562. .Loop:
  4563. LDA $06C3,x
  4564. SEC
  4565. SBC #$01
  4566. STA $06C3,x
  4567. INX
  4568. INX
  4569. INX
  4570. INX
  4571. CPX #$10
  4572. BNE .Loop
  4573. DEC $06E3
  4574. RTS
  4575.  
  4576. ScrollFanL:
  4577. LDX #$00
  4578. .Loop:
  4579. LDA $06C3,x
  4580. CLC
  4581. ADC #$01
  4582. STA $06C3,x
  4583. INX
  4584. INX
  4585. INX
  4586. INX
  4587. CPX #$10
  4588. BNE .Loop
  4589. INC $06E3
  4590. RTS
  4591.  
  4592. DropFan:
  4593. JSR FanCollision
  4594. LDA FanErased
  4595. CMP #$02
  4596. BNE .End
  4597.  
  4598. LDA FanFallDir
  4599. CMP #$00
  4600. BEQ .Down
  4601. CMP #$01
  4602. BEQ .Up
  4603. CMP #$02
  4604. BEQ .Down
  4605. RTS
  4606. .Down:
  4607. LDA $06C0
  4608. CMP #$B7
  4609. BCS .Set
  4610.  
  4611. LDX #$00
  4612. .Loop:
  4613. LDA $06C0,x
  4614. CLC
  4615. ADC #$02
  4616. CLC
  4617. ADC FanVelocity
  4618. STA $06C0,x
  4619. INX
  4620. INX
  4621. INX
  4622. INX
  4623. CPX #$10
  4624. BNE .Loop
  4625. LDA $06E0
  4626. CLC
  4627. ADC #$02
  4628. CLC
  4629. ADC FanVelocity
  4630. STA $06E0
  4631. LDA FanVelocityPart
  4632. CLC
  4633. ADC #$10
  4634. STA FanVelocityPart
  4635. LDA FanVelocity
  4636. ADC #$00
  4637. STA FanVelocity
  4638. .End:
  4639. RTS
  4640. .Set:
  4641. LDA FanFallDir
  4642. CMP #$01
  4643. BEQ .2
  4644. CMP #$02
  4645. BEQ .End2
  4646. LDA #$01
  4647. STA FanFallDir
  4648. LDA #%01000000
  4649. STA $06C2
  4650. STA $06C6
  4651. STA $06CA
  4652. STA $06CE
  4653. STA $06E2
  4654. RTS
  4655. .Up:
  4656. LDX #$00
  4657. .Loop2:
  4658. LDA $06C0
  4659. CMP #$AF
  4660. BCC .Set
  4661. LDA $06C0,x
  4662. SEC
  4663. SBC #$02
  4664. STA $06C0,x
  4665. INX
  4666. INX
  4667. INX
  4668. INX
  4669. CPX #$10
  4670. BNE .Loop2
  4671. LDA $06E0
  4672. SEC
  4673. SBC #$02
  4674. STA $06E0
  4675. RTS
  4676. .2:
  4677. LDA #$02
  4678. STA FanFallDir
  4679. LDA #$00
  4680. STA FanVelocity
  4681. RTS
  4682. .End2:
  4683. INC FanDelayTimer
  4684. LDA FanDelayTimer
  4685. CMP #$10
  4686. BNE .End3
  4687. LDA #$FE
  4688. STA $06C0
  4689. STA $06C4
  4690. STA $06C8
  4691. STA $06CC
  4692. STA $06E0
  4693. STA $06C3
  4694. STA $06C7
  4695. STA $06CB
  4696. STA $06CF
  4697. STA $06E3
  4698. .End3:
  4699. RTS
  4700.  
  4701. PlaceGrandma:
  4702. LDX #$00
  4703. LDY #$00
  4704. LDA PlaceFlag
  4705. CMP #$00
  4706. BEQ .End
  4707. CMP #$03
  4708. BCS .End
  4709. .PlaceBegin:
  4710. LDA $0640,x
  4711. CMP #$FE
  4712. BEQ .Place
  4713. TXA
  4714. CLC
  4715. ADC #$20
  4716. TAX
  4717. INY
  4718. CPX #$80
  4719. BNE .PlaceBegin
  4720. .End:
  4721. RTS
  4722. .Place:
  4723. LDA #$9C
  4724. STA $0640,x
  4725. STA $0644,x
  4726. CLC
  4727. ADC #$08
  4728. STA $0648,x
  4729. STA $064C,x
  4730. CLC
  4731. ADC #$08
  4732. STA $0650,x
  4733. STA $0654,x
  4734. CLC
  4735. ADC #$08
  4736. STA $0658,x
  4737. STA $065C,x
  4738. LDA PlaceFlag
  4739. CMP #$01
  4740. BNE .PlaceRight
  4741. .PlaceLeft:
  4742. LDA #$01
  4743. STA EnemyMoveDirection,y
  4744. LDA #$09
  4745. STA $0643,x
  4746. STA $064B,x
  4747. STA $0653,x
  4748. STA $065B,x
  4749. SEC
  4750. SBC #$08
  4751. STA $0647,x
  4752. STA $064F,x
  4753. STA $0657,x
  4754. STA $065F,x
  4755. LDA #%01000001
  4756. STA $0642,x
  4757. STA $0646,x
  4758. STA $064A,x
  4759. STA $064E,x
  4760. STA $0652,x
  4761. STA $0656,x
  4762. STA $065A,x
  4763. STA $065E,x
  4764. JSR SetGrandmaSprite
  4765. RTS
  4766. .PlaceRight:
  4767. LDA #$02
  4768. STA EnemyMoveDirection,y
  4769. LDA #$E7
  4770. STA $0643,x
  4771. STA $064B,x
  4772. STA $0653,x
  4773. STA $065B,x
  4774. CLC
  4775. ADC #$08
  4776. STA $0647,x
  4777. STA $064F,x
  4778. STA $0657,x
  4779. STA $065F,x
  4780. LDA #$01
  4781. STA $0642,x
  4782. STA $0646,x
  4783. STA $064A,x
  4784. STA $064E,x
  4785. STA $0652,x
  4786. STA $0656,x
  4787. STA $065A,x
  4788. STA $065E,x
  4789. JSR SetGrandmaSprite
  4790. RTS
  4791.  
  4792. SetGrandmaSprite:
  4793. LDY #$00
  4794. .Loop:
  4795. LDA GrandmaSprites,y
  4796. STA $0641,x
  4797. INY
  4798. TXA
  4799. CLC
  4800. ADC #$04
  4801. TAX
  4802. CPY #$08
  4803. BNE .Loop
  4804. LDA #$00
  4805. STA PlaceFlag
  4806. RTS
  4807.  
  4808. MoveGrandma:
  4809. LDX #$00
  4810. LDY #$00
  4811. .Reset:
  4812. LDA #$00
  4813. STA LoopVar
  4814. .Loop:
  4815. CPX #$00
  4816. BNE .Try2
  4817. LDA EnemyDead
  4818. CMP #$00
  4819. BEQ .StartMove
  4820. JMP .Cycle
  4821. .Try2:
  4822. CPX #$20
  4823. BNE .Try3
  4824. LDA EnemyDead+1
  4825. CMP #$00
  4826. BEQ .StartMove
  4827. JMP .Cycle
  4828. .Try3:
  4829. CPX #$40
  4830. BNE .Try4
  4831. LDA EnemyDead+2
  4832. CMP #$00
  4833. BEQ .StartMove
  4834. JMP .Cycle
  4835. .Try4:
  4836. CPX #$60
  4837. BNE .StartMove
  4838. LDA EnemyDead+3
  4839. CMP #$00
  4840. BEQ .StartMove
  4841. JMP .Cycle
  4842. .StartMove:
  4843. LDA $0640,x
  4844. CMP #$FE
  4845. BEQ .Cycle
  4846. LDA $0641,x
  4847. CMP #$30
  4848. BEQ .BeginMove
  4849. CMP #$32
  4850. BEQ .BeginMove
  4851. .Cycle:
  4852. TXA
  4853. CLC
  4854. ADC #$20
  4855. TAX
  4856. INY
  4857. CPX #$A0
  4858. BNE .Loop
  4859. RTS
  4860. .BeginMove:
  4861. TXA
  4862. STA XTemp ;Enemy offset
  4863. LSR A ;/2
  4864. LSR A ;/2
  4865. STA YTemp ;Partial movement offset
  4866. LDX XTemp
  4867.  
  4868. LDA EnemyMoveDirection,y
  4869. CMP #$02
  4870. BEQ .BeginMoveLeft
  4871. JMP .BeginMoveRight
  4872. .BeginMoveLeft:
  4873. TYA
  4874. STA YTemp2
  4875. .MoveLeft:
  4876. LDA $0643,x
  4877. CMP #$3C
  4878. BCC .Skip2
  4879. CMP #$40
  4880. BCS .Skip2
  4881. JSR RotateGrandmaRight
  4882. .Skip2:
  4883. LDY YTemp
  4884.  
  4885. LDA NoScroll
  4886. CMP #$01
  4887. BEQ .NoButtons
  4888.  
  4889. LDA ButtonsP1
  4890. AND #%00000001
  4891. BNE .LeftRight
  4892. LDA ButtonsP1
  4893. AND #%00000010
  4894. BNE .LeftLeft
  4895. .NoButtons:
  4896. LDA EnemyMovePart,y
  4897. SEC
  4898. SBC #$C0
  4899. STA EnemyMovePart,y
  4900. LDA $0643,x
  4901. SBC #$00
  4902. STA $0643,x
  4903. JMP .Connect2
  4904. .LeftRight:
  4905. LDA EnemyMovePart,y
  4906. SEC
  4907. SBC #$80
  4908. STA EnemyMovePart,y
  4909. LDA $0643,x
  4910. SBC #$01
  4911. STA $0643,x
  4912. JMP .Connect2
  4913. .LeftLeft:
  4914. LDA EnemyMovePart,y
  4915. SEC
  4916. SBC #$20
  4917. STA EnemyMovePart,y
  4918. LDA $0643,x
  4919. SBC #$00
  4920. STA $0643,x
  4921. .Connect2:
  4922. INC LoopVar
  4923. INY
  4924. INC YTemp
  4925. INX
  4926. INX
  4927. INX
  4928. INX
  4929. LDA LoopVar
  4930. CMP #$08
  4931. BNE .Skip2
  4932. TXA
  4933. STA XTemp
  4934. JSR AnimateGrandma
  4935. LDX XTemp
  4936. INC YTemp2
  4937. LDY YTemp2
  4938. JMP .Reset
  4939. .BeginMoveRight:
  4940. TYA
  4941. STA YTemp2
  4942. .MoveRight:
  4943. LDA $0643,x
  4944. CMP #$C0
  4945. BCC .Skip
  4946. CMP #$C4
  4947. BCS .Skip
  4948. JSR RotateGrandmaLeft
  4949. .Skip:
  4950. LDY YTemp
  4951.  
  4952. LDA NoScroll
  4953. CMP #$01
  4954. BEQ .NoButtons2
  4955.  
  4956. LDA ButtonsP1
  4957. AND #%00000001
  4958. BNE .RightRight
  4959. LDA ButtonsP1
  4960. AND #%00000010
  4961. BNE .RightLeft
  4962. .NoButtons2:
  4963. LDA EnemyMovePart,y
  4964. CLC
  4965. ADC #$C0
  4966. STA EnemyMovePart,y
  4967. LDA $0643,x
  4968. ADC #$00
  4969. STA $0643,x
  4970. JMP .Connect
  4971. .RightLeft:
  4972. LDA EnemyMovePart,y
  4973. CLC
  4974. ADC #$80
  4975. STA EnemyMovePart,y
  4976. LDA $0643,x
  4977. ADC #$01
  4978. STA $0643,x
  4979. JMP .Connect
  4980. .RightRight:
  4981. LDA EnemyMovePart,y
  4982. CLC
  4983. ADC #$20
  4984. STA EnemyMovePart,y
  4985. LDA $0643,x
  4986. ADC #$00
  4987. STA $0643,x
  4988. .Connect:
  4989. INC LoopVar
  4990. INC YTemp
  4991. INY
  4992. INX
  4993. INX
  4994. INX
  4995. INX
  4996. LDA LoopVar
  4997. CMP #$08
  4998. BNE .Skip
  4999. TXA
  5000. STA XTemp
  5001. JSR AnimateGrandma
  5002. LDX XTemp
  5003. INC YTemp2
  5004. LDY YTemp2
  5005. JMP .Reset
  5006.  
  5007. RotateGrandmaLeft:
  5008. LDA #$B7
  5009. STA $0643,x
  5010. STA $064B,x
  5011. STA $0653,x
  5012. STA $065B,x
  5013. LDA #$BF
  5014. STA $0647,x
  5015. STA $064F,x
  5016. STA $0657,x
  5017. STA $065F,x
  5018. LDA #$01
  5019. STA $0642,x
  5020. STA $0646,x
  5021. STA $064A,x
  5022. STA $064E,x
  5023. STA $0652,x
  5024. STA $0656,x
  5025. STA $065A,x
  5026. STA $065E,x
  5027. LDA #$02
  5028. STA EnemyMoveDirection,y
  5029. RTS
  5030.  
  5031. RotateGrandmaRight:
  5032. LDA #$49
  5033. STA $0643,x
  5034. STA $064B,x
  5035. STA $0653,x
  5036. STA $065B,x
  5037. LDA #$41
  5038. STA $0647,x
  5039. STA $064F,x
  5040. STA $0657,x
  5041. STA $065F,x
  5042. LDA #%01000001
  5043. STA $0642,x
  5044. STA $0646,x
  5045. STA $064A,x
  5046. STA $064E,x
  5047. STA $0652,x
  5048. STA $0656,x
  5049. STA $065A,x
  5050. STA $065E,x
  5051. LDA #$01
  5052. STA EnemyMoveDirection,y
  5053. RTS
  5054.  
  5055. AnimateGrandma:
  5056. LDX #$00
  5057. LDY #$00
  5058. .Loop:
  5059. CPX #$00
  5060. BNE .Try2
  5061. LDA EnemyDead
  5062. CMP #$00
  5063. BEQ .StartMove
  5064. JMP .End
  5065. .Try2:
  5066. CPX #$20
  5067. BNE .Try3
  5068. LDA EnemyDead+1
  5069. CMP #$00
  5070. BEQ .StartMove
  5071. JMP .End
  5072. .Try3:
  5073. CPX #$40
  5074. BNE .Try4
  5075. LDA EnemyDead+2
  5076. CMP #$00
  5077. BEQ .StartMove
  5078. JMP .End
  5079. .Try4:
  5080. CPX #$60
  5081. BNE .StartMove
  5082. LDA EnemyDead+3
  5083. CMP #$00
  5084. BEQ .StartMove
  5085. JMP .End
  5086. .StartMove:
  5087. LDA $0641,x
  5088. CMP #$30
  5089. BEQ .Move
  5090. CMP #$32
  5091. BEQ .Move
  5092. JMP .End
  5093. .Move:
  5094. LDA $0653,x
  5095. STA $0643,x
  5096. LDA EnemyAnimateTimer,y
  5097. CMP #$08
  5098. BEQ .Walk1
  5099. CMP #$10
  5100. BEQ .Walk2
  5101. RTS
  5102. .Walk1:
  5103. LDA GrandmaSprites
  5104. STA $0641,x
  5105. LDA GrandmaSprites+1
  5106. STA $0645,x
  5107. LDA GrandmaSprites+2
  5108. STA $0649,x
  5109. LDA GrandmaSprites+3
  5110. STA $064D,x
  5111. LDA GrandmaSprites+4
  5112. STA $0651,x
  5113. LDA GrandmaSprites+5
  5114. STA $0655,x
  5115. LDA GrandmaSprites+6
  5116. STA $0659,x
  5117. LDA GrandmaSprites+7
  5118. STA $065D,x
  5119. TXA
  5120. CLC
  5121. ADC #$20
  5122. TAX
  5123. JMP .Mid
  5124. ; RTS
  5125. .Walk2:
  5126. LDA GrandmaSprites2
  5127. STA $0641,x
  5128. LDA GrandmaSprites2+1
  5129. STA $0645,x
  5130. LDA GrandmaSprites2+2
  5131. STA $0649,x
  5132. LDA GrandmaSprites2+3
  5133. STA $064D,x
  5134. LDA GrandmaSprites2+4
  5135. STA $0651,x
  5136. LDA GrandmaSprites2+5
  5137. STA $0655,x
  5138. LDA GrandmaSprites2+6
  5139. STA $0659,x
  5140. LDA GrandmaSprites2+7
  5141. STA $065D,x
  5142. TXA
  5143. CLC
  5144. ADC #$20
  5145. TAX
  5146. JMP .Mid
  5147. .EndPre:
  5148. INY
  5149. .End:
  5150. ; INY
  5151. TXA
  5152. CLC
  5153. ADC #$20
  5154. TAX
  5155. .Mid:
  5156. CPX #$80
  5157. BEQ .Finish
  5158. JMP .Loop
  5159. .Finish:
  5160. RTS
  5161.  
  5162. PlaceKid:
  5163. LDX #$00
  5164. LDY #$00
  5165. LDA PlaceFlag
  5166. CMP #$03
  5167. BCC .End
  5168. CMP #$05
  5169. BCS .End
  5170. .PlaceBegin:
  5171. LDA $0640,x
  5172. CMP #$FE
  5173. BEQ .Place
  5174. TXA
  5175. CLC
  5176. ADC #$20
  5177. TAX
  5178. INY
  5179. CPX #$80
  5180. BNE .PlaceBegin
  5181. .End:
  5182. RTS
  5183. .Place:
  5184. LDA #$A4
  5185. STA $0640,x
  5186. STA $0644,x
  5187. CLC
  5188. ADC #$08
  5189. STA $0648,x
  5190. STA $064C,x
  5191. CLC
  5192. ADC #$08
  5193. STA $0650,x
  5194. STA $0654,x
  5195. CLC
  5196. ADC #$08
  5197. STA $0658,x
  5198. STA $065C,x
  5199. LDA PlaceFlag
  5200. CMP #$03
  5201. BNE .PlaceRight
  5202. .PlaceLeft:
  5203. LDA #$01
  5204. STA EnemyMoveDirection,y
  5205. LDA #$09
  5206. STA $0643,x
  5207. STA $064B,x
  5208. STA $0653,x
  5209. STA $065B,x
  5210. SEC
  5211. SBC #$08
  5212. STA $0647,x
  5213. STA $064F,x
  5214. STA $0657,x
  5215. STA $065F,x
  5216. LDA #%01000010
  5217. STA $0642,x
  5218. STA $0646,x
  5219. STA $064A,x
  5220. STA $064E,x
  5221. STA $0652,x
  5222. STA $0656,x
  5223. STA $065A,x
  5224. STA $065E,x
  5225. JSR SetKidSprite
  5226. RTS
  5227. .PlaceRight:
  5228. LDA #$02
  5229. STA EnemyMoveDirection,y
  5230. LDA #$E7
  5231. STA $0643,x
  5232. STA $064B,x
  5233. STA $0653,x
  5234. STA $065B,x
  5235. CLC
  5236. ADC #$08
  5237. STA $0647,x
  5238. STA $064F,x
  5239. STA $0657,x
  5240. STA $065F,x
  5241. LDA #$02
  5242. STA $0642,x
  5243. STA $0646,x
  5244. STA $064A,x
  5245. STA $064E,x
  5246. STA $0652,x
  5247. STA $0656,x
  5248. STA $065A,x
  5249. STA $065E,x
  5250. JSR SetKidSprite
  5251. RTS
  5252.  
  5253. SetKidSprite:
  5254. LDY #$00
  5255. .Loop:
  5256. LDA KidSprites,y
  5257. STA $0641,x
  5258. INY
  5259. TXA
  5260. CLC
  5261. ADC #$04
  5262. TAX
  5263. CPY #$08
  5264. BNE .Loop
  5265. LDA #$00
  5266. STA PlaceFlag
  5267. RTS
  5268.  
  5269. MoveKid:
  5270. LDX #$00
  5271. LDY #$00
  5272. .Reset:
  5273. LDA #$00
  5274. STA LoopVar
  5275. .Loop:
  5276. CPX #$00
  5277. BNE .Try2
  5278. LDA EnemyDead
  5279. CMP #$00
  5280. BEQ .StartMove
  5281. JMP .Cycle
  5282. .Try2:
  5283. CPX #$20
  5284. BNE .Try3
  5285. LDA EnemyDead+1
  5286. CMP #$00
  5287. BEQ .StartMove
  5288. JMP .Cycle
  5289. .Try3:
  5290. CPX #$40
  5291. BNE .Try4
  5292. LDA EnemyDead+2
  5293. CMP #$00
  5294. BEQ .StartMove
  5295. JMP .Cycle
  5296. .Try4:
  5297. CPX #$60
  5298. BNE .StartMove
  5299. LDA EnemyDead+3
  5300. CMP #$00
  5301. BEQ .StartMove
  5302. JMP .Cycle
  5303. .StartMove:
  5304. LDA $0640,x
  5305. CMP #$FE
  5306. BEQ .Cycle
  5307. LDA $0641,x
  5308. CMP #$59
  5309. BEQ .BeginMove
  5310. CMP #$57
  5311. BEQ .BeginMove
  5312. .Cycle:
  5313. TXA
  5314. CLC
  5315. ADC #$20
  5316. TAX
  5317. INY
  5318. CPX #$A0
  5319. BNE .Loop
  5320. RTS
  5321. .BeginMove:
  5322. TXA
  5323. STA XTemp ;Enemy offset
  5324. LSR A ;/2
  5325. LSR A ;/2
  5326. STA YTemp ;Partial movement offset
  5327. LDX XTemp
  5328.  
  5329. LDA EnemyMoveDirection,y
  5330. CMP #$02
  5331. BEQ .BeginMoveLeft
  5332. JMP .BeginMoveRight
  5333. .BeginMoveLeft:
  5334. TYA
  5335. STA YTemp2
  5336. .MoveLeft:
  5337. LDA $0643,x
  5338. CMP #$03
  5339. BCS .Skip3
  5340. JSR KillKid
  5341. RTS
  5342. .Skip3:
  5343. LDY YTemp
  5344.  
  5345. LDA NoScroll
  5346. CMP #$01
  5347. BEQ .NoButtons
  5348.  
  5349. LDA ButtonsP1
  5350. AND #%00000001
  5351. BNE .LeftRight
  5352. LDA ButtonsP1
  5353. AND #%00000010
  5354. BNE .LeftLeft
  5355. .NoButtons:
  5356. LDA EnemyMovePart,y
  5357. SEC
  5358. SBC #$C0
  5359. STA EnemyMovePart,y
  5360. LDA $0643,x
  5361. SBC #$02
  5362. STA $0643,x
  5363. JMP .Connect2
  5364. .LeftRight:
  5365. LDA EnemyMovePart,y
  5366. SEC
  5367. SBC #$80
  5368. STA EnemyMovePart,y
  5369. LDA $0643,x
  5370. SBC #$03
  5371. STA $0643,x
  5372. JMP .Connect2
  5373. .LeftLeft:
  5374. LDA EnemyMovePart,y
  5375. SEC
  5376. SBC #$20
  5377. STA EnemyMovePart,y
  5378. LDA $0643,x
  5379. SBC #$02
  5380. STA $0643,x
  5381. .Connect2:
  5382. INC LoopVar
  5383. INY
  5384. INC YTemp
  5385. INX
  5386. INX
  5387. INX
  5388. INX
  5389. LDA LoopVar
  5390. CMP #$08
  5391. BNE .Skip3
  5392. TXA
  5393. STA XTemp
  5394. JSR AnimateKid
  5395. LDX XTemp
  5396. INC YTemp2
  5397. LDY YTemp2
  5398. JMP .Reset
  5399. .BeginMoveRight:
  5400. TYA
  5401. STA YTemp2
  5402. .MoveRight:
  5403. LDA $0643,x
  5404. CMP #$FC
  5405. BCC .Skip2
  5406. JSR KillKid
  5407. RTS
  5408. .Skip2:
  5409. LDY YTemp
  5410.  
  5411. LDA NoScroll
  5412. CMP #$01
  5413. BEQ .NoButtons2
  5414.  
  5415. LDA ButtonsP1
  5416. AND #%00000001
  5417. BNE .RightRight
  5418. LDA ButtonsP1
  5419. AND #%00000010
  5420. BNE .RightLeft
  5421. .NoButtons2:
  5422. LDA EnemyMovePart,y
  5423. CLC
  5424. ADC #$C0
  5425. STA EnemyMovePart,y
  5426. LDA $0643,x
  5427. ADC #$02
  5428. STA $0643,x
  5429. JMP .Connect
  5430. .RightLeft:
  5431. LDA EnemyMovePart,y
  5432. CLC
  5433. ADC #$80
  5434. STA EnemyMovePart,y
  5435. LDA $0643,x
  5436. ADC #$03
  5437. STA $0643,x
  5438. JMP .Connect
  5439. .RightRight:
  5440. LDA EnemyMovePart,y
  5441. CLC
  5442. ADC #$20
  5443. STA EnemyMovePart,y
  5444. LDA $0643,x
  5445. ADC #$02
  5446. STA $0643,x
  5447. .Connect:
  5448. INC LoopVar
  5449. INC YTemp
  5450. INY
  5451. INX
  5452. INX
  5453. INX
  5454. INX
  5455. LDA LoopVar
  5456. CMP #$08
  5457. BNE .Skip2
  5458. TXA
  5459. STA XTemp
  5460. JSR AnimateKid
  5461. LDX XTemp
  5462. INC YTemp2
  5463. LDY YTemp2
  5464. JMP .Reset
  5465.  
  5466. KillKid:
  5467. LDA #$FE
  5468. STA $0640,x
  5469. STA $0643,x
  5470. STA $0644,x
  5471. STA $0647,x
  5472. STA $0648,x
  5473. STA $064B,x
  5474. STA $064C,x
  5475. STA $064F,x
  5476. STA $0650,x
  5477. STA $0653,x
  5478. STA $0654,x
  5479. STA $0657,x
  5480. STA $0658,x
  5481. STA $065B,x
  5482. STA $065C,x
  5483. STA $065F,x
  5484. RTS
  5485.  
  5486. RotateKidLeft:
  5487. LDA #$B7
  5488. STA $0643,x
  5489. STA $064B,x
  5490. STA $0653,x
  5491. STA $065B,x
  5492. LDA #$BF
  5493. STA $0647,x
  5494. STA $064F,x
  5495. STA $0657,x
  5496. STA $065F,x
  5497. LDA #$02
  5498. STA $0642,x
  5499. STA $0646,x
  5500. STA $064A,x
  5501. STA $064E,x
  5502. STA $0652,x
  5503. STA $0656,x
  5504. STA $065A,x
  5505. STA $065E,x
  5506. LDA #$02
  5507. STA EnemyMoveDirection,y
  5508. RTS
  5509.  
  5510. RotateKidRight:
  5511. LDA #$49
  5512. STA $0643,x
  5513. STA $064B,x
  5514. STA $0653,x
  5515. STA $065B,x
  5516. LDA #$41
  5517. STA $0647,x
  5518. STA $064F,x
  5519. STA $0657,x
  5520. STA $065F,x
  5521. LDA #%01000010
  5522. STA $0642,x
  5523. STA $0646,x
  5524. STA $064A,x
  5525. STA $064E,x
  5526. STA $0652,x
  5527. STA $0656,x
  5528. STA $065A,x
  5529. STA $065E,x
  5530. LDA #$01
  5531. STA EnemyMoveDirection,y
  5532. RTS
  5533.  
  5534. AnimateKid:
  5535. LDX #$00
  5536. LDY #$00
  5537. .Loop:
  5538. LDA $0641,x
  5539. CMP #$59
  5540. BEQ .Move
  5541. CMP #$57
  5542. BEQ .Move
  5543. JMP .End
  5544. .Move:
  5545. LDA $0653,x
  5546. STA $0643,x
  5547. LDA EnemyAnimateTimer,y
  5548. CMP #$08
  5549. BEQ .Walk1
  5550. CMP #$10
  5551. BEQ .Walk2
  5552. RTS
  5553. .Walk1:
  5554. LDA KidSprites
  5555. STA $0641,x
  5556. LDA KidSprites+1
  5557. STA $0645,x
  5558. LDA KidSprites+2
  5559. STA $0649,x
  5560. LDA KidSprites+3
  5561. STA $064D,x
  5562. LDA KidSprites+4
  5563. STA $0651,x
  5564. LDA KidSprites+5
  5565. STA $0655,x
  5566. LDA KidSprites+6
  5567. STA $0659,x
  5568. LDA KidSprites+7
  5569. STA $065D,x
  5570. TXA
  5571. CLC
  5572. ADC #$20
  5573. TAX
  5574. JMP .Mid
  5575. ; RTS
  5576. .Walk2:
  5577. LDA KidSprites2
  5578. STA $0641,x
  5579. LDA KidSprites2+1
  5580. STA $0645,x
  5581. LDA KidSprites2+2
  5582. STA $0649,x
  5583. LDA KidSprites2+3
  5584. STA $064D,x
  5585. LDA KidSprites2+4
  5586. STA $0651,x
  5587. LDA KidSprites2+5
  5588. STA $0655,x
  5589. LDA KidSprites2+6
  5590. STA $0659,x
  5591. LDA KidSprites2+7
  5592. STA $065D,x
  5593. TXA
  5594. CLC
  5595. ADC #$20
  5596. TAX
  5597. JMP .Mid
  5598. .EndPre:
  5599. INY
  5600. .End:
  5601. ; INY
  5602. TXA
  5603. CLC
  5604. ADC #$20
  5605. TAX
  5606. .Mid:
  5607. CPX #$80
  5608. BEQ .Finish
  5609. JMP .Loop
  5610. .Finish:
  5611. RTS
  5612.  
  5613. PlaceNerd:
  5614. LDX #$00
  5615. LDY #$00
  5616. LDA PlaceFlag
  5617. CMP #$05
  5618. BCC .End
  5619. CMP #$07
  5620. BCS .End
  5621. .PlaceBegin:
  5622. LDA $0640,x
  5623. CMP #$FE
  5624. BEQ .Place
  5625. TXA
  5626. CLC
  5627. ADC #$20
  5628. TAX
  5629. INY
  5630. CPX #$80
  5631. BNE .PlaceBegin
  5632. .End:
  5633. RTS
  5634. .Place:
  5635. LDA #$9C
  5636. STA $0640,x
  5637. STA $0644,x
  5638. CLC
  5639. ADC #$08
  5640. STA $0648,x
  5641. STA $064C,x
  5642. CLC
  5643. ADC #$08
  5644. STA $0650,x
  5645. STA $0654,x
  5646. CLC
  5647. ADC #$08
  5648. STA $0658,x
  5649. STA $065C,x
  5650. LDA PlaceFlag
  5651. CMP #$05
  5652. BNE .PlaceRight
  5653. .PlaceLeft:
  5654. LDA #$01
  5655. STA EnemyMoveDirection,y
  5656. LDA #$09
  5657. STA $0643,x
  5658. STA $064B,x
  5659. STA $0653,x
  5660. STA $065B,x
  5661. SEC
  5662. SBC #$08
  5663. STA $0647,x
  5664. STA $064F,x
  5665. STA $0657,x
  5666. STA $065F,x
  5667. LDA #%01000011
  5668. STA $0642,x
  5669. STA $0646,x
  5670. STA $064A,x
  5671. STA $064E,x
  5672. STA $0652,x
  5673. STA $0656,x
  5674. STA $065A,x
  5675. STA $065E,x
  5676. JSR SetNerdSprite
  5677. RTS
  5678. .PlaceRight:
  5679. LDA #$02
  5680. STA EnemyMoveDirection,y
  5681. LDA #$E7
  5682. STA $0643,x
  5683. STA $064B,x
  5684. STA $0653,x
  5685. STA $065B,x
  5686. CLC
  5687. ADC #$08
  5688. STA $0647,x
  5689. STA $064F,x
  5690. STA $0657,x
  5691. STA $065F,x
  5692. LDA #$03
  5693. STA $0642,x
  5694. STA $0646,x
  5695. STA $064A,x
  5696. STA $064E,x
  5697. STA $0652,x
  5698. STA $0656,x
  5699. STA $065A,x
  5700. STA $065E,x
  5701. JSR SetNerdSprite
  5702. RTS
  5703.  
  5704. SetNerdSprite:
  5705. LDY #$00
  5706. .Loop:
  5707. LDA NerdSprites,y
  5708. STA $0641,x
  5709. INY
  5710. TXA
  5711. CLC
  5712. ADC #$04
  5713. TAX
  5714. CPY #$08
  5715. BNE .Loop
  5716. LDA #$00
  5717. STA PlaceFlag
  5718. RTS
  5719.  
  5720. MoveNerd:
  5721. LDX #$00
  5722. LDY #$00
  5723. .Reset:
  5724. LDA #$00
  5725. STA LoopVar
  5726. .Loop:
  5727. CPX #$00
  5728. BNE .Try2
  5729. LDA EnemyDead
  5730. CMP #$00
  5731. BEQ .StartMove
  5732. JMP .Cycle
  5733. .Try2:
  5734. CPX #$20
  5735. BNE .Try3
  5736. LDA EnemyDead+1
  5737. CMP #$00
  5738. BEQ .StartMove
  5739. JMP .Cycle
  5740. .Try3:
  5741. CPX #$40
  5742. BNE .Try4
  5743. LDA EnemyDead+2
  5744. CMP #$00
  5745. BEQ .StartMove
  5746. JMP .Cycle
  5747. .Try4:
  5748. CPX #$60
  5749. BNE .StartMove
  5750. LDA EnemyDead+3
  5751. CMP #$00
  5752. BEQ .StartMove
  5753. JMP .Cycle
  5754. .StartMove:
  5755. LDA $0640,x
  5756. CMP #$FE
  5757. BEQ .Cycle
  5758. LDA $0641,x
  5759. CMP #$C5
  5760. BEQ .BeginMove
  5761. CMP #$C7
  5762. BEQ .BeginMove
  5763. .Cycle:
  5764. TXA
  5765. CLC
  5766. ADC #$20
  5767. TAX
  5768. INY
  5769. CPX #$A0
  5770. BNE .Loop
  5771. RTS
  5772. .BeginMove:
  5773. TXA
  5774. STA XTemp ;Enemy offset
  5775. LSR A ;/2
  5776. LSR A ;/2
  5777. STA YTemp ;Partial movement offset
  5778. LDX XTemp
  5779.  
  5780. LDA EnemyMoveDirection,y
  5781. CMP #$02
  5782. BEQ .BeginMoveLeft
  5783. JMP .BeginMoveRight
  5784. .BeginMoveLeft:
  5785. TYA
  5786. STA YTemp2
  5787. .MoveLeft:
  5788. LDA $0643,x
  5789. CMP #$0C
  5790. BCC .Skip2
  5791. CMP #$10
  5792. BCS .Skip2
  5793. JSR RotateNerdRight
  5794. .Skip2:
  5795. LDY YTemp
  5796.  
  5797. LDA NoScroll
  5798. CMP #$01
  5799. BEQ .NoButtons
  5800.  
  5801. LDA ButtonsP1
  5802. AND #%00000001
  5803. BNE .LeftRight
  5804. LDA ButtonsP1
  5805. AND #%00000010
  5806. BNE .LeftLeft
  5807. .NoButtons:
  5808. LDA EnemyMovePart,y
  5809. SEC
  5810. SBC #$40
  5811. STA EnemyMovePart,y
  5812. LDA $0643,x
  5813. SBC #$01
  5814. STA $0643,x
  5815. JMP .Connect2
  5816. .LeftRight:
  5817. LDA EnemyMovePart,y
  5818. SEC
  5819. SBC #$00
  5820. STA EnemyMovePart,y
  5821. LDA $0643,x
  5822. SBC #$02
  5823. STA $0643,x
  5824. JMP .Connect2
  5825. .LeftLeft:
  5826. LDA EnemyMovePart,y
  5827. SEC
  5828. SBC #$A0
  5829. STA EnemyMovePart,y
  5830. LDA $0643,x
  5831. SBC #$00
  5832. STA $0643,x
  5833. .Connect2:
  5834. INC LoopVar
  5835. INY
  5836. INC YTemp
  5837. INX
  5838. INX
  5839. INX
  5840. INX
  5841. LDA LoopVar
  5842. CMP #$08
  5843. BNE .Skip2
  5844. TXA
  5845. STA XTemp
  5846. JSR AnimateNerd
  5847. LDX XTemp
  5848. INC YTemp2
  5849. LDY YTemp2
  5850. JMP .Reset
  5851. .BeginMoveRight:
  5852. TYA
  5853. STA YTemp2
  5854. .MoveRight:
  5855. LDA $0643,x
  5856. CMP #$F0
  5857. BCC .Skip
  5858. CMP #$F4
  5859. BCS .Skip
  5860. JSR RotateNerdLeft
  5861. .Skip:
  5862. LDY YTemp
  5863.  
  5864. LDA NoScroll
  5865. CMP #$01
  5866. BEQ .NoButtons2
  5867.  
  5868. LDA ButtonsP1
  5869. AND #%00000001
  5870. BNE .RightRight
  5871. LDA ButtonsP1
  5872. AND #%00000010
  5873. BNE .RightLeft
  5874. .NoButtons2:
  5875. LDA EnemyMovePart,y
  5876. CLC
  5877. ADC #$40
  5878. STA EnemyMovePart,y
  5879. LDA $0643,x
  5880. ADC #$01
  5881. STA $0643,x
  5882. JMP .Connect
  5883. .RightLeft:
  5884. LDA EnemyMovePart,y
  5885. CLC
  5886. ADC #$00
  5887. STA EnemyMovePart,y
  5888. LDA $0643,x
  5889. ADC #$02
  5890. STA $0643,x
  5891. JMP .Connect
  5892. .RightRight:
  5893. LDA EnemyMovePart,y
  5894. CLC
  5895. ADC #$A0
  5896. STA EnemyMovePart,y
  5897. LDA $0643,x
  5898. ADC #$00
  5899. STA $0643,x
  5900. .Connect:
  5901. INC LoopVar
  5902. INC YTemp
  5903. INY
  5904. INX
  5905. INX
  5906. INX
  5907. INX
  5908. LDA LoopVar
  5909. CMP #$08
  5910. BNE .Skip
  5911. TXA
  5912. STA XTemp
  5913. JSR AnimateNerd
  5914. LDX XTemp
  5915. INC YTemp2
  5916. LDY YTemp2
  5917. JMP .Reset
  5918.  
  5919. KillNerd:
  5920. LDA #$FE
  5921. STA $0640,x
  5922. STA $0643,x
  5923. STA $0644,x
  5924. STA $0647,x
  5925. STA $0648,x
  5926. STA $064B,x
  5927. STA $064C,x
  5928. STA $064F,x
  5929. STA $0650,x
  5930. STA $0653,x
  5931. STA $0654,x
  5932. STA $0657,x
  5933. STA $0658,x
  5934. STA $065B,x
  5935. STA $065C,x
  5936. STA $065F,x
  5937. RTS
  5938.  
  5939. RotateNerdLeft:
  5940. LDA #$E7
  5941. STA $0643,x
  5942. STA $064B,x
  5943. STA $0653,x
  5944. STA $065B,x
  5945. LDA #$EF
  5946. STA $0647,x
  5947. STA $064F,x
  5948. STA $0657,x
  5949. STA $065F,x
  5950. LDA #$03
  5951. STA $0642,x
  5952. STA $0646,x
  5953. STA $064A,x
  5954. STA $064E,x
  5955. STA $0652,x
  5956. STA $0656,x
  5957. STA $065A,x
  5958. STA $065E,x
  5959. LDA #$02
  5960. STA EnemyMoveDirection,y
  5961. RTS
  5962.  
  5963. RotateNerdRight:
  5964. LDA #$19
  5965. STA $0643,x
  5966. STA $064B,x
  5967. STA $0653,x
  5968. STA $065B,x
  5969. LDA #$11
  5970. STA $0647,x
  5971. STA $064F,x
  5972. STA $0657,x
  5973. STA $065F,x
  5974. LDA #%01000011
  5975. STA $0642,x
  5976. STA $0646,x
  5977. STA $064A,x
  5978. STA $064E,x
  5979. STA $0652,x
  5980. STA $0656,x
  5981. STA $065A,x
  5982. STA $065E,x
  5983. LDA #$01
  5984. STA EnemyMoveDirection,y
  5985. RTS
  5986.  
  5987. AnimateNerd:
  5988. LDX #$00
  5989. LDY #$00
  5990. .Loop:
  5991. LDA $0641,x
  5992. CMP #$C5
  5993. BEQ .Move
  5994. CMP #$C7
  5995. BEQ .Move
  5996. JMP .End
  5997. .Move:
  5998. LDA $0653,x
  5999. STA $0643,x
  6000. LDA EnemyAnimateTimer,y
  6001. CMP #$08
  6002. BEQ .Walk1
  6003. CMP #$10
  6004. BEQ .Walk2
  6005. RTS
  6006. .Walk1:
  6007. LDA NerdSprites
  6008. STA $0641,x
  6009. LDA NerdSprites+1
  6010. STA $0645,x
  6011. LDA NerdSprites+2
  6012. STA $0649,x
  6013. LDA NerdSprites+3
  6014. STA $064D,x
  6015. LDA NerdSprites+4
  6016. STA $0651,x
  6017. LDA NerdSprites+5
  6018. STA $0655,x
  6019. LDA NerdSprites+6
  6020. STA $0659,x
  6021. LDA NerdSprites+7
  6022. STA $065D,x
  6023. TXA
  6024. CLC
  6025. ADC #$20
  6026. TAX
  6027. JMP .Mid
  6028. ; RTS
  6029. .Walk2:
  6030. LDA NerdSprites2
  6031. STA $0641,x
  6032. LDA NerdSprites2+1
  6033. STA $0645,x
  6034. LDA NerdSprites2+2
  6035. STA $0649,x
  6036. LDA NerdSprites2+3
  6037. STA $064D,x
  6038. LDA NerdSprites2+4
  6039. STA $0651,x
  6040. LDA NerdSprites2+5
  6041. STA $0655,x
  6042. LDA NerdSprites2+6
  6043. STA $0659,x
  6044. LDA NerdSprites2+7
  6045. STA $065D,x
  6046. TXA
  6047. CLC
  6048. ADC #$20
  6049. TAX
  6050. JMP .Mid
  6051. .EndPre:
  6052. INY
  6053. .End:
  6054. ; INY
  6055. TXA
  6056. CLC
  6057. ADC #$20
  6058. TAX
  6059. .Mid:
  6060. CPX #$80
  6061. BEQ .Finish
  6062. JMP .Loop
  6063. .Finish:
  6064. RTS
  6065.  
  6066. ;;;;;;;;;;;;;;
  6067.  
  6068. .bank 5
  6069. .org $A000
  6070.  
  6071. AnimateHorizontalWater:
  6072. LDX #$00
  6073. LDA #$21
  6074. STA $2006
  6075. LDA #$E7
  6076. STA $2006
  6077. LDA BossTimer
  6078. CMP #$08
  6079. BEQ .2
  6080. CMP #$10
  6081. BEQ .3
  6082. CMP #$18
  6083. BEQ .1
  6084. CMP #$1A
  6085. BEQ .Reset
  6086. INC BossTimer
  6087. RTS
  6088. .1:
  6089. LDA #$BE
  6090. STA $2007
  6091. INX
  6092. CPX #$12
  6093. BNE .1
  6094. INC BossTimer
  6095. RTS
  6096. .2:
  6097. LDA #$BF
  6098. STA $2007
  6099. INX
  6100. CPX #$12
  6101. BNE .2
  6102. INC BossTimer
  6103. RTS
  6104. .3:
  6105. LDA #$C0
  6106. STA $2007
  6107. INX
  6108. CPX #$12
  6109. BNE .3
  6110. INC BossTimer
  6111. RTS
  6112. .Reset:
  6113. LDA #$00
  6114. STA BossTimer
  6115. RTS
  6116.  
  6117. JumpSprite:
  6118. LDA ChumAttacking
  6119. CMP #$01
  6120. BEQ .End
  6121. LDX #$00
  6122. LDY #$00
  6123. .Loop:
  6124. LDA JumpSprites,x
  6125. STA $0605,y
  6126. INX
  6127. TYA
  6128. CLC
  6129. ADC #$04
  6130. TAY
  6131. CPX #$0F
  6132. BNE .Loop
  6133. LDA #$00
  6134. STA AnimTimer
  6135. .End:
  6136. RTS
  6137.  
  6138. ChumActuallyAttack:
  6139. LDA ChumAttacking
  6140. CMP #$01
  6141. BNE .End
  6142. JSR PickAttackSprite
  6143. LDA #$00
  6144. STA AnimTimer
  6145. INC AttackTimer
  6146. LDA AttackTimer
  6147. CMP #$0B
  6148. BCC .End
  6149. LDA #$00
  6150. STA AttackTimer
  6151. ; STA ChumAttacking
  6152. LDA JumpFlag
  6153. CMP #$00
  6154. BEQ .End
  6155. JMP .Reset
  6156. .End:
  6157. RTS
  6158. .Reset:
  6159. LDA #$01
  6160. STA JumpAttackResetFlag
  6161. RTS
  6162.  
  6163. PickAttackSprite:
  6164. LDX #$00
  6165. LDY #$00
  6166. LDA JumpFlag
  6167. CMP #$00
  6168. BNE .JumpAttack
  6169. LDA DuckFlag
  6170. CMP #$01
  6171. BEQ .DuckAttack
  6172. LDA ButtonsP1
  6173. AND #%00000100
  6174. BNE .DuckAttack
  6175. .Loop:
  6176. LDA Kick,x
  6177. STA $0605,y
  6178. INX
  6179. TYA
  6180. CLC
  6181. ADC #$04
  6182. TAY
  6183. CPX #$0F
  6184. BNE .Loop
  6185. RTS
  6186. .DuckAttack:
  6187. LDA DuckFlag
  6188. CMP #$01
  6189. BNE .Loop
  6190. LDX #$00
  6191. LDY #$00
  6192. .Loopy:
  6193. LDA DuckAttackSprites,x
  6194. STA $0605,y
  6195. INX
  6196. TYA
  6197. CLC
  6198. ADC #$04
  6199. TAY
  6200. CPX #$0F
  6201. BNE .Loopy
  6202. RTS
  6203. .JumpAttack:
  6204. LDX #$00
  6205. LDY #$00
  6206. .Loopy2:
  6207. LDA JumpAttackSprites,x
  6208. STA $0605,y
  6209. INX
  6210. TYA
  6211. CLC
  6212. ADC #$04
  6213. TAY
  6214. CPX #$0F
  6215. BNE .Loopy2
  6216. JSR PixelAdjust
  6217. RTS
  6218.  
  6219. Jump:
  6220. LDA JumpFlag
  6221. CMP #$01
  6222. BNE .End
  6223.  
  6224. LDA SPRITE_BANKV
  6225. SEC
  6226. SBC #$01
  6227. STA JumpPos
  6228. LDA JumpPos
  6229. SEC
  6230. SBC #$3F
  6231. STA JumpPos+1
  6232. CLC
  6233. ADC #$05
  6234. STA JumpPos+2
  6235. CLC
  6236. ADC #$08
  6237. STA JumpPos+3
  6238. CLC
  6239. ADC #$34
  6240. STA JumpPos+4
  6241. LDA #$02
  6242. STA JumpFlag
  6243. JSR JumpSprite
  6244. .End:
  6245. RTS
  6246.  
  6247. ClearEnemies:
  6248. LDX #$00
  6249. .Loop:
  6250. LDA #$FE
  6251. STA $0640,x
  6252. STA $0643,x
  6253. INX
  6254. INX
  6255. INX
  6256. INX
  6257. CPX #$A0
  6258. BNE .Loop
  6259. LDA #$00
  6260. STA EnemyMoveDirection
  6261. STA EnemyMoveDirection+1
  6262. STA EnemyMoveDirection+2
  6263. STA EnemyMoveDirection+3
  6264. RTS
  6265.  
  6266. ChumInitialLocation:
  6267. LDA CurrentFloor
  6268. CMP #$00
  6269. BEQ .Right
  6270. CMP #$02
  6271. BEQ .Right
  6272.  
  6273. LDX #$00
  6274. .LoopL:
  6275. LDA ChumInitLeft,x
  6276. STA $0604,x
  6277. INX
  6278. CPX #$3C
  6279. BNE .LoopL
  6280. LDA #$01
  6281. STA DirFacing
  6282. RTS
  6283. .Right:
  6284. LDX #$00
  6285. .Loop:
  6286. LDA ChumInitRight,x
  6287. STA $0604,x
  6288. INX
  6289. CPX #$3C
  6290. BNE .Loop
  6291. RTS
  6292.  
  6293. ChumInitLeft:
  6294. .db $94,$03,%01000000,$38 ;chum
  6295. .db $94,$04,%01000000,$30
  6296. .db $94,$00,%01000000,$28
  6297. .db $9C,$09,%01000000,$38
  6298. .db $9C,$0A,%01000000,$30
  6299. .db $9C,$0B,%01000000,$28
  6300. .db $A4,$13,%01000000,$38
  6301. .db $A4,$14,%01000000,$30
  6302. .db $A4,$15,%01000000,$28
  6303. .db $AC,$1F,%01000000,$38
  6304. .db $AC,$20,%01000000,$30
  6305. .db $AC,$00,%01000000,$28
  6306. .db $B4,$00,%01000000,$38
  6307. .db $B4,$2A,%01000000,$30
  6308. .db $B4,$00,%01000000,$28
  6309.  
  6310. ChumInitRight:
  6311. .db $94,$03,$00,$B8 ;chum
  6312. .db $94,$04,$00,$C0
  6313. .db $94,$00,$00,$C8
  6314. .db $9C,$09,$00,$B8
  6315. .db $9C,$0A,$00,$C0
  6316. .db $9C,$0B,$00,$C8
  6317. .db $A4,$13,$00,$B8
  6318. .db $A4,$14,$00,$C0
  6319. .db $A4,$15,$00,$C8
  6320. .db $AC,$1F,$00,$B8
  6321. .db $AC,$20,$00,$C0
  6322. .db $AC,$00,$00,$C8
  6323. .db $B4,$00,$00,$B8
  6324. .db $B4,$2A,$00,$C0
  6325. .db $B4,$00,$00,$C8
  6326.  
  6327. ResetLevelValues:
  6328. LDA #$02
  6329. STA LevelTimer
  6330. LDA #$00
  6331. STA BossDead
  6332. STA DelayTimer
  6333. STA BossPalUpdate
  6334. STA BossPlacedFlag
  6335. STA ShakeTimer
  6336. STA SkipBossMusic
  6337. STA LevelTimer+1
  6338. STA LevelTimer+2
  6339. STA LevelTimer+3
  6340. STA EndPointsTimer
  6341. STA EndTimer
  6342. STA EndTimer+1
  6343. STA SpawnPlace
  6344. STA BossPhase
  6345. STA Fan1Stage
  6346. STA IntroPhase
  6347. STA IntroTimer
  6348. STA BossMusicPlayed
  6349. STA SetToDie
  6350. STA ReadytoSpawn
  6351.  
  6352. LDA #$01
  6353. STA Fan2Stage
  6354. STA AwardPointsFlag
  6355.  
  6356. LDA #$02
  6357. STA Fan3Stage
  6358.  
  6359. LDA #$00
  6360. STA LifeAmt
  6361. STA EnemyLifeAmt
  6362.  
  6363. LDA #$01
  6364. STA LevelStarting
  6365.  
  6366. JSR LoadPortraitSprites
  6367.  
  6368. LDA gamestate
  6369. CMP #STATEINTERLUDE
  6370. BNE .Cont
  6371. RTS
  6372. .Cont:
  6373. LDA Game2p
  6374. CMP #$01
  6375. BNE .Single
  6376.  
  6377. LDA StageBeat
  6378. CMP #$01
  6379. BEQ .NotSwapped
  6380. LDA CurrentPlayer
  6381. CMP #$01
  6382. BEQ .TwoP2
  6383. LDA CurrentFloorP1
  6384. JMP .Connect
  6385. .TwoP2:
  6386. LDA CurrentFloorP2
  6387. JMP .Connect
  6388. .NotSwapped:
  6389. LDA #$00
  6390. STA StageBeat
  6391. LDA CurrentPlayer
  6392. CMP #$02
  6393. BEQ .TwoP1
  6394. LDA CurrentFloorP1
  6395. JMP .Connect
  6396. .TwoP1:
  6397. LDA CurrentFloorP2
  6398. JMP .Connect
  6399. .Single:
  6400. LDA CurrentFloor
  6401. .Connect:
  6402.  
  6403. CMP #$00
  6404. BEQ .Right
  6405. CMP #$02
  6406. BEQ .Right
  6407. LDA #$00
  6408. STA NametableCount
  6409. RTS
  6410. .Right:
  6411. LDA #$08
  6412. STA NametableCount
  6413. RTS
  6414.  
  6415. FinishPoints:
  6416. LDA BossDead
  6417. CMP #$03
  6418. BNE .End
  6419. INC EndPointsTimer
  6420. LDA LifeAmt
  6421. CMP #$18
  6422. BEQ .TimeLeft
  6423. LDA EndPointsTimer
  6424. CMP #$04
  6425. BNE .End
  6426. LDA #$00
  6427. STA SoundEffect
  6428. LDA #$01
  6429. STA PlaySound
  6430. INC LifeAmt
  6431.  
  6432. LDA Game2p
  6433. CMP #$01
  6434. BNE .P1
  6435. LDA CurrentPlayer
  6436. CMP #$01
  6437. BEQ .P1
  6438. INC P2Score+3
  6439. JSR FixMath2
  6440. JMP .Connect3
  6441. .P1:
  6442. INC P1Score+3
  6443. JSR FixMath
  6444. .Connect3:
  6445. LDA #$01
  6446. STA AwardPointsFlag
  6447. LDA #$00
  6448. STA EndPointsTimer
  6449. .End:
  6450. RTS
  6451. .TimeLeft:
  6452. LDA LevelTimer
  6453. CMP #$00
  6454. BNE .Cont
  6455. LDA LevelTimer+1
  6456. CMP #$00
  6457. BNE .Cont
  6458. LDA LevelTimer+2
  6459. CMP #$00
  6460. BNE .Cont
  6461. LDA LevelTimer+3
  6462. CMP #$00
  6463. BNE .Cont
  6464. .FinishLevel:
  6465. LDA EndPointsTimer
  6466. CMP #$90
  6467. BNE .End
  6468. LDA #$00
  6469. STA LevelTimer
  6470.  
  6471. LDA Game2p
  6472. CMP #$01
  6473. BNE .Skip
  6474. LDA CurrentPlayer
  6475. CMP #$01
  6476. BEQ .Skip
  6477. INC CurrentFloor
  6478. INC CurrentFloorP2
  6479. JMP .Connect
  6480. .Skip:
  6481. LDA Game2p
  6482. CMP #$01
  6483. BNE .Skip2
  6484. INC CurrentFloor
  6485. INC CurrentFloorP1
  6486. JMP .Connect
  6487. .Skip2:
  6488. INC CurrentFloor
  6489. .Connect:
  6490. LDA CurrentFloor
  6491. CMP #$04
  6492. BNE .NotBeat
  6493. LDA #STATELOADENDING
  6494. STA gamestate
  6495. RTS
  6496. .NotBeat:
  6497. JSR ResetLevelValues
  6498. JSR CheckForInterlude
  6499. RTS
  6500. .Cont:
  6501. LDA EndPointsTimer
  6502. CMP #$02
  6503. BNE .End2
  6504.  
  6505. LDA Game2p
  6506. CMP #$01
  6507. BNE .OnePlayer
  6508. LDA CurrentPlayer
  6509. CMP #$01
  6510. BEQ .OnePlayer
  6511. INC P2Score+4
  6512. INC P2Score+4
  6513. INC P2Score+4
  6514. INC P2Score+4
  6515. JSR FixMath2
  6516. JMP .Connect2
  6517. .End2:
  6518. RTS
  6519. .OnePlayer:
  6520. INC P1Score+4
  6521. INC P1Score+4
  6522. INC P1Score+4
  6523. INC P1Score+4
  6524. JSR FixMath
  6525. .Connect2:
  6526.  
  6527. LDA #$00
  6528. STA SoundEffect
  6529. LDA #$01
  6530. STA PlaySound
  6531. JSR FixMath
  6532. LDA #$00
  6533. STA EndPointsTimer
  6534. LDA #$01
  6535. STA AwardPointsFlag
  6536. LDA #$01
  6537. STA AddTimerFlag
  6538. JSR .FixTimer
  6539. RTS
  6540. .FixTimer:
  6541. DEC LevelTimer+3
  6542. DEC LevelTimer+3
  6543. DEC LevelTimer+3
  6544. DEC LevelTimer+3
  6545. LDA LevelTimer+3
  6546. CMP #$F0
  6547. BCS .ResetOnes
  6548. LDA #$01
  6549. STA AddTimerFlag
  6550. RTS
  6551. .ResetOnes:
  6552. LDA LevelTimer+3
  6553. CLC
  6554. ADC #$0A
  6555. STA LevelTimer+3
  6556. DEC LevelTimer+2
  6557. LDA LevelTimer+2
  6558. CMP #$FF
  6559. BEQ .ResetTens
  6560. LDA #$01
  6561. STA AddTimerFlag
  6562. RTS
  6563. .ResetTens:
  6564. LDA #$09
  6565. STA LevelTimer+2
  6566. DEC LevelTimer+1
  6567. LDA LevelTimer+1
  6568. CMP #$FF
  6569. BEQ .ResetHundreds
  6570. LDA #$01
  6571. STA AddTimerFlag
  6572. RTS
  6573. .ResetHundreds:
  6574. LDA #$09
  6575. STA LevelTimer+1
  6576. DEC LevelTimer
  6577. LDA LevelTimer
  6578. CMP #$FF
  6579. BEQ .GameOver
  6580. LDA #$01
  6581. STA AddTimerFlag
  6582. RTS
  6583. .GameOver:
  6584. LDA #$00
  6585. STA LevelTimer
  6586. STA LevelTimer+1
  6587. STA LevelTimer+2
  6588. STA LevelTimer+3
  6589. RTS
  6590.  
  6591. CheckForInterlude:
  6592. LDA CurrentFloor
  6593. CMP #$02
  6594. BNE .SkipInterlude
  6595.  
  6596. LDA Game2p
  6597. CMP #$01
  6598. BNE .Regular
  6599. LDA CurrentPlayer
  6600. CMP #$02
  6601. BNE .Regular
  6602.  
  6603. LDA InterludeShownP2
  6604. CMP #$01
  6605. BEQ .SkipInterlude
  6606. LDA #$01
  6607. STA InterludeShownP2
  6608. JMP .Connect
  6609. .Regular:
  6610. LDA InterludeShownP1
  6611. CMP #$01
  6612. BEQ .SkipInterlude
  6613. LDA #$01
  6614. STA InterludeShownP1
  6615. .Connect:
  6616. LDA #$00
  6617. STA CurrentPalette
  6618. STA PaletteTimer
  6619. LDA #STATELOADINTERLUDE
  6620. STA gamestate
  6621. RTS
  6622. .SkipInterlude:
  6623. LDA #STATELOADPLAYING
  6624. STA gamestate
  6625. RTS
  6626.  
  6627. EraseBossExtras:
  6628. LDA CurrentFloor
  6629. CMP #$00
  6630. BNE .Boss2
  6631. .Boss1:
  6632. LDX #$00
  6633. .Loop:
  6634. LDA #$FE
  6635. STA $06C0,x
  6636. STA $06C3,x
  6637. INX
  6638. INX
  6639. INX
  6640. INX
  6641. CPX #$10
  6642. BNE .Loop
  6643. RTS
  6644. .Boss2:
  6645. LDA CurrentFloor
  6646. CMP #$01
  6647. BNE .Boss3
  6648. LDX #$00
  6649. .Loop2:
  6650. LDA #$FE
  6651. STA $0684,x
  6652. STA $0687,x
  6653. INX
  6654. INX
  6655. INX
  6656. INX
  6657. CPX #$4C
  6658. BNE .Loop2
  6659. RTS
  6660. .Boss3:
  6661. LDA CurrentFloor
  6662. CMP #$02
  6663. BNE .Boss4
  6664. LDA #$FE
  6665. STA $0680
  6666. JSR .Boss1
  6667. .Boss4:
  6668. RTS
  6669.  
  6670. SetBossLoopTotal:
  6671. LDA CurrentFloor
  6672. TAY
  6673. LDA FloorLoopValues,y
  6674. STA LoopTotal
  6675. RTS
  6676.  
  6677. FloorLoopValues:
  6678. .db $48,$44,$40,$40
  6679.  
  6680. KillPlayer:
  6681. LDA LifeAmt
  6682. CMP #$18
  6683. BCS .Start
  6684. RTS
  6685. .Start:
  6686. LDX #$00
  6687. LDY #$00
  6688. .Connect:
  6689. LDA PlayerDeadPhase
  6690. CMP #$00
  6691. BEQ .Up
  6692. JMP .Down
  6693. .Up:
  6694. LDA $0604
  6695. CMP #$70
  6696. BCC .DownFlag
  6697. .UpLoop:
  6698. LDA $0604,x
  6699. SEC
  6700. SBC #$04
  6701. STA $0604,x
  6702. INX
  6703. INX
  6704. INX
  6705. INX
  6706. CPX #$3C
  6707. BNE .UpLoop
  6708. LDA #$01
  6709. STA PlayerDeadFlag
  6710. .SkipSample:
  6711. RTS
  6712. .DownFlag:
  6713. LDA #$01
  6714. STA PlayerDeadPhase
  6715. .Down:
  6716. LDA $0604
  6717. CMP #$DE
  6718. BCS .Finish
  6719. .DownLoop:
  6720. LDA $0604,x
  6721. CLC
  6722. ADC #$08
  6723. STA $0604,x
  6724. INX
  6725. INX
  6726. INX
  6727. INX
  6728. CPX #$3C
  6729. BNE .DownLoop
  6730. RTS
  6731. .Finish:
  6732. LDX #$00
  6733. .DeadLoop:
  6734. LDA #$FE
  6735. STA $0604,x
  6736. STA $0607,x
  6737. INX
  6738. INX
  6739. INX
  6740. INX
  6741. CPX #$3C
  6742. BNE .DeadLoop
  6743. .End:
  6744. RTS
  6745.  
  6746. KillEnemies:
  6747. JSR KillEnemy1
  6748. JSR KillEnemy2
  6749. JSR KillEnemy3
  6750. JSR KillEnemy4
  6751. RTS
  6752.  
  6753. KillEnemy1:
  6754. LDA EnemyDead
  6755. CMP #$00
  6756. BNE .Start
  6757. RTS
  6758. .Start:
  6759. LDX #$00
  6760. LDY #$00
  6761. .Connect:
  6762. LDA EnemyDeadPhase
  6763. CMP #$00
  6764. BEQ .Up
  6765. JMP .Down
  6766. .Up:
  6767. LDA $0640
  6768. CMP EnemyTop
  6769. BCC .DownFlag
  6770. .UpLoop:
  6771. LDA $0640,x
  6772. SEC
  6773. SBC #$04
  6774. STA $0640,x
  6775. INX
  6776. INX
  6777. INX
  6778. INX
  6779. CPX #$20
  6780. BNE .UpLoop
  6781. RTS
  6782. .DownFlag:
  6783. LDA #$01
  6784. STA EnemyDeadPhase
  6785. .Down:
  6786. LDA $0640,x
  6787. CMP #$DE
  6788. BCS .Finish
  6789. .DownLoop:
  6790. LDA $0640,x
  6791. CLC
  6792. ADC #$08
  6793. STA $0640,x
  6794. INX
  6795. INX
  6796. INX
  6797. INX
  6798. CPX #$20
  6799. BNE .DownLoop
  6800. RTS
  6801. .Finish:
  6802. LDA #$00
  6803. STA EnemyDeadPhase
  6804. STA EnemyDead
  6805. LDA #$FE
  6806. STA $0640,x
  6807. STA $0643,x
  6808. STA $0644,x
  6809. STA $0647,x
  6810. STA $0648,x
  6811. STA $064B,x
  6812. STA $064C,x
  6813. STA $064F,x
  6814. STA $0650,x
  6815. STA $0653,x
  6816. STA $0654,x
  6817. STA $0657,x
  6818. STA $0658,x
  6819. STA $065B,x
  6820. STA $065C,x
  6821. STA $065F,x
  6822. .End:
  6823. RTS
  6824.  
  6825. KillEnemy2:
  6826. LDA EnemyDead+1
  6827. CMP #$00
  6828. BNE .Start
  6829. RTS
  6830. .Start:
  6831. LDX #$20
  6832. LDY #$00
  6833. .Connect:
  6834. LDA EnemyDeadPhase+1
  6835. CMP #$00
  6836. BEQ .Up
  6837. JMP .Down
  6838. .Up:
  6839. LDA $0660
  6840. CMP EnemyTop
  6841. BCC .DownFlag
  6842. .UpLoop:
  6843. LDA $0640,x
  6844. SEC
  6845. SBC #$04
  6846. STA $0640,x
  6847. INX
  6848. INX
  6849. INX
  6850. INX
  6851. CPX #$40
  6852. BNE .UpLoop
  6853. RTS
  6854. .DownFlag:
  6855. LDA #$01
  6856. STA EnemyDeadPhase+1
  6857. .Down:
  6858. LDA $0640,x
  6859. CMP #$DE
  6860. BCS .Finish
  6861. .DownLoop:
  6862. LDA $0640,x
  6863. CLC
  6864. ADC #$08
  6865. STA $0640,x
  6866. INX
  6867. INX
  6868. INX
  6869. INX
  6870. CPX #$40
  6871. BNE .DownLoop
  6872. RTS
  6873. .Finish:
  6874. LDA #$00
  6875. STA EnemyDeadPhase+1
  6876. STA EnemyDead+1
  6877. LDA #$FE
  6878. STA $0640,x
  6879. STA $0643,x
  6880. STA $0644,x
  6881. STA $0647,x
  6882. STA $0648,x
  6883. STA $064B,x
  6884. STA $064C,x
  6885. STA $064F,x
  6886. STA $0650,x
  6887. STA $0653,x
  6888. STA $0654,x
  6889. STA $0657,x
  6890. STA $0658,x
  6891. STA $065B,x
  6892. STA $065C,x
  6893. STA $065F,x
  6894. .End:
  6895. RTS
  6896.  
  6897. KillEnemy3:
  6898. LDA EnemyDead+2
  6899. CMP #$00
  6900. BNE .Start
  6901. RTS
  6902. .Start:
  6903. LDX #$40
  6904. LDY #$00
  6905. .Connect:
  6906. LDA EnemyDeadPhase+2
  6907. CMP #$00
  6908. BEQ .Up
  6909. JMP .Down
  6910. .Up:
  6911. LDA $0680
  6912. CMP EnemyTop
  6913. BCC .DownFlag
  6914. .UpLoop:
  6915. LDA $0640,x
  6916. SEC
  6917. SBC #$04
  6918. STA $0640,x
  6919. INX
  6920. INX
  6921. INX
  6922. INX
  6923. CPX #$60
  6924. BNE .UpLoop
  6925. RTS
  6926. .DownFlag:
  6927. LDA #$01
  6928. STA EnemyDeadPhase+2
  6929. .Down:
  6930. LDA $0640,x
  6931. CMP #$DE
  6932. BCS .Finish
  6933. .DownLoop:
  6934. LDA $0640,x
  6935. CLC
  6936. ADC #$08
  6937. STA $0640,x
  6938. INX
  6939. INX
  6940. INX
  6941. INX
  6942. CPX #$60
  6943. BNE .DownLoop
  6944. RTS
  6945. .Finish:
  6946. LDA #$00
  6947. STA EnemyDeadPhase+2
  6948. STA EnemyDead+2
  6949. LDA #$FE
  6950. STA $0640,x
  6951. STA $0643,x
  6952. STA $0644,x
  6953. STA $0647,x
  6954. STA $0648,x
  6955. STA $064B,x
  6956. STA $064C,x
  6957. STA $064F,x
  6958. STA $0650,x
  6959. STA $0653,x
  6960. STA $0654,x
  6961. STA $0657,x
  6962. STA $0658,x
  6963. STA $065B,x
  6964. STA $065C,x
  6965. STA $065F,x
  6966. .End:
  6967. RTS
  6968.  
  6969. KillEnemy4:
  6970. LDA EnemyDead+3
  6971. CMP #$00
  6972. BNE .Start
  6973. RTS
  6974. .Start:
  6975. LDX #$60
  6976. LDY #$00
  6977. .Connect:
  6978. LDA EnemyDeadPhase+3
  6979. CMP #$00
  6980. BEQ .Up
  6981. JMP .Down
  6982. .Up:
  6983. LDA $06A0
  6984. CMP EnemyTop
  6985. BCC .DownFlag
  6986. .UpLoop:
  6987. LDA $0640,x
  6988. SEC
  6989. SBC #$04
  6990. STA $0640,x
  6991. INX
  6992. INX
  6993. INX
  6994. INX
  6995. CPX #$80
  6996. BNE .UpLoop
  6997. RTS
  6998. .DownFlag:
  6999. LDA #$01
  7000. STA EnemyDeadPhase+3
  7001. .Down:
  7002. LDA $0640,x
  7003. CMP #$DE
  7004. BCS .Finish
  7005. .DownLoop:
  7006. LDA $0640,x
  7007. CLC
  7008. ADC #$08
  7009. STA $0640,x
  7010. INX
  7011. INX
  7012. INX
  7013. INX
  7014. CPX #$80
  7015. BNE .DownLoop
  7016. RTS
  7017. .Finish:
  7018. LDA #$00
  7019. STA EnemyDeadPhase+3
  7020. STA EnemyDead+3
  7021. LDA #$FE
  7022. STA $0640,x
  7023. STA $0643,x
  7024. STA $0644,x
  7025. STA $0647,x
  7026. STA $0648,x
  7027. STA $064B,x
  7028. STA $064C,x
  7029. STA $064F,x
  7030. STA $0650,x
  7031. STA $0653,x
  7032. STA $0654,x
  7033. STA $0657,x
  7034. STA $0658,x
  7035. STA $065B,x
  7036. STA $065C,x
  7037. STA $065F,x
  7038. .End:
  7039. RTS
  7040.  
  7041. ChumCollision:
  7042. LDA InvincTimer
  7043. CMP #$00
  7044. BEQ .Start
  7045. JMP .Finish
  7046. .Start:
  7047. LDX #$00
  7048. LDY #$00
  7049. .StartAgain:
  7050. CPX #$00
  7051. BNE .Try2
  7052. LDA EnemyDead
  7053. CMP #$00
  7054. BEQ .StartCollision
  7055. JMP .End
  7056. .Try2:
  7057. CPX #$20
  7058. BNE .Try3
  7059. LDA EnemyDead+1
  7060. CMP #$00
  7061. BEQ .StartCollision
  7062. JMP .End
  7063. .Try3:
  7064. CPX #$40
  7065. BNE .Try4
  7066. LDA EnemyDead+2
  7067. CMP #$00
  7068. BEQ .StartCollision
  7069. JMP .End
  7070. .Try4:
  7071. CPX #$60
  7072. BNE .StartCollision
  7073. LDA EnemyDead+3
  7074. CMP #$00
  7075. BEQ .StartCollision
  7076. JMP .End
  7077. .StartCollision:
  7078. LDA BossPlacedFlag
  7079. CMP #$01
  7080. BNE .NoBoss
  7081. JSR BossCollision
  7082. RTS
  7083. .NoBoss:
  7084. LDA $0641,x
  7085. CMP #$D6
  7086. BEQ .Bird
  7087. CMP #$D9
  7088. BEQ .Bird
  7089.  
  7090. LDA $0604
  7091. CLC
  7092. ADC #$2C
  7093. CMP $0640,x
  7094. BCC .End
  7095.  
  7096. LDA DirFacing
  7097. CMP #$00
  7098. BNE .CollisionFromRight
  7099. JMP .CollisionFromLeft
  7100. .Bird:
  7101. LDA $0640,x
  7102. CLC
  7103. ADC #$04
  7104. CMP $0604
  7105. BCC .End
  7106. LDA DirFacing
  7107. CMP #$00
  7108. BNE .CollisionFromRight
  7109. JMP .CollisionFromLeft
  7110. RTS
  7111. .CollisionFromRight: ;chum facing right
  7112. ;chum left (behind him) compared to enemy right (in front of them)
  7113. LDA $0643,x
  7114. CLC
  7115. ADC #$03
  7116. CMP $060F
  7117. BCC .End
  7118. ;chum right (in front of him) compared to enemy left ()
  7119. LDA $0607
  7120. CLC
  7121. ; ADC #$05
  7122. ADC #$09
  7123. CMP $0647,x
  7124. BCC .End
  7125. .Hit:
  7126. LDA ChumHit
  7127. CMP #$00
  7128. BNE .Finish
  7129. INC LifeAmt
  7130. INC LifeAmt
  7131. .SkipDeduct:
  7132. LDA $0607
  7133. CMP $0647,x
  7134. BCC .KnockLeft
  7135. ;;Knock Right
  7136. LDA #$01
  7137. STA ChumHit
  7138. .Connect:
  7139. LDA #$0F
  7140. STA ChumTempX
  7141. LDA #STATEHIT
  7142. STA gamestate
  7143. .End:
  7144. TXA
  7145. CLC
  7146. ADC #$20
  7147. TAX
  7148. CPX #$80
  7149. BEQ .Finish
  7150. JMP .StartAgain
  7151. .Finish:
  7152. RTS
  7153. .KnockLeft:
  7154. LDA ChumHit
  7155. CMP #$00
  7156. BNE .Finish
  7157. ; INC LifeAmt
  7158. .SkipDeduct2:
  7159. LDA #$02
  7160. STA ChumHit
  7161. JMP .Connect
  7162. .CollisionFromLeft: ;chum facing left
  7163. ;chum left (in front of him) compared to enemy right (in front of them)
  7164. LDA $0643,x
  7165. CLC
  7166. ADC #$03
  7167. CMP $0607
  7168. BCC .End
  7169. ;chum right (behind him) compared to enemy left
  7170. LDA $060F
  7171. CLC
  7172. ADC #$09
  7173. CMP $0647,x
  7174. BCC .End
  7175. JMP .Hit
  7176.  
  7177. BossCollision:
  7178. LDA CurrentFloor
  7179. CMP #$00
  7180. BEQ .Boss1
  7181. JMP Boss2
  7182. .Boss1:
  7183. LDA $0604
  7184. CLC
  7185. ADC #$10
  7186. CMP $0640
  7187. BCC .End4
  7188.  
  7189. LDA DirFacing
  7190. CMP #$00
  7191. BNE .CollisionFromRight
  7192. JMP .CollisionFromLeft
  7193. .CollisionFromRight: ;Chum Facing Right/Antoine Facing Right
  7194. LDA $0643
  7195. CMP $064B
  7196. BCC .TryRightLeft
  7197. ;chum left (behind him) compared to enemy right (in front of them)
  7198. LDA $0643
  7199. SEC
  7200. SBC #$04
  7201. CMP $060F
  7202. BCC .TryRightLeft
  7203. ;chum right (in front of him) compared to enemy left ()
  7204. LDA $0607
  7205. SEC
  7206. SBC #$02
  7207. CMP $064B
  7208. BCC .TryRightLeft
  7209. JMP .Hit
  7210. .End4:
  7211. RTS
  7212. .TryRightLeft: ;Chum Facing Right/Antoine Facing Left
  7213. LDA #$00
  7214. STA AttackOffset
  7215. LDA DuckFlag
  7216. CMP #$01
  7217. BNE .Standing2
  7218. LDA #$08
  7219. STA AttackOffset
  7220. .Standing2:
  7221. LDA $0643
  7222. SEC
  7223. SBC #$04
  7224. CMP $060F
  7225. BCC .End
  7226. ;chum right (in front of him) compared to enemy left ()
  7227. LDA $0607
  7228. CLC
  7229. ADC #$0C
  7230. SEC
  7231. SBC AttackOffset
  7232. CMP $064B
  7233. BCC .End
  7234. .Hit:
  7235. LDA ChumHit
  7236. CMP #$00
  7237. BNE .End
  7238. INC LifeAmt
  7239. INC LifeAmt
  7240. INC LifeAmt
  7241. INC LifeAmt
  7242. .SkipDeduct:
  7243. LDA $0607
  7244. CMP $064B
  7245. BCC .KnockLeft
  7246. ;;Knock Right
  7247. LDA #$01
  7248. STA ChumHit
  7249. .Connect:
  7250. LDA #$0F
  7251. STA ChumTempX
  7252. LDA #STATEHIT
  7253. STA gamestate
  7254. .End:
  7255. RTS
  7256. .KnockLeft:
  7257. LDA ChumHit
  7258. CMP #$00
  7259. BNE .End
  7260. ; INC LifeAmt
  7261. .SkipDeduct2:
  7262. LDA #$02
  7263. STA ChumHit
  7264. JMP .Connect
  7265. .CollisionFromLeft: ;chum facing left
  7266. LDA $0643
  7267. CMP $064B
  7268. BCC .TryLeftLeft
  7269. ;chum left (in front of him) compared to enemy right (in front of them)
  7270. LDA #$00
  7271. STA AttackOffset
  7272. LDA DuckFlag
  7273. CMP #$01
  7274. BNE .Standing
  7275. LDA #$08
  7276. STA AttackOffset
  7277. .Standing:
  7278. LDA $064B
  7279. CLC
  7280. ADC #$10
  7281. SEC
  7282. SBC AttackOffset
  7283. CMP $0607
  7284. BCC .End
  7285. ;chum right (behind him) compared to enemy left
  7286. LDA $060F
  7287. CLC
  7288. ADC #$0C
  7289. CMP $064B
  7290. BCC .End
  7291. JMP .Hit
  7292. .TryLeftLeft: ;Chum Facing Left/Antoine Facing Left
  7293. ;chum left (in front of him) compared to enemy right (in front of them)
  7294. LDA $0643
  7295. CLC
  7296. ADC #$02
  7297. CMP $060F
  7298. BCS .End
  7299. ;chum right (behind him) compared to enemy left
  7300. LDA $0607
  7301. SEC
  7302. SBC #$08
  7303. CMP $0643
  7304. BCS .End
  7305. JMP .Hit
  7306. Boss2:
  7307. LDA CurrentFloor
  7308. CMP #$01
  7309. BEQ .Boss2
  7310. JMP Boss3
  7311. .Boss2:
  7312. JSR FumeCollision
  7313.  
  7314. LDA $0604
  7315. CLC
  7316. ADC #$10
  7317. CMP $0640
  7318. BCC .End
  7319.  
  7320. LDA DirFacing
  7321. CMP #$00
  7322. BNE .CollisionFromRight
  7323. JMP .CollisionFromLeft
  7324. .CollisionFromRight: ;Chum Facing Right/Corey Motorcycle on Right
  7325. LDA $0643
  7326. CMP $0653
  7327. BCC .RightLeft
  7328.  
  7329. LDA #$00
  7330. STA AttackOffset
  7331. LDA DuckFlag
  7332. CMP #$01
  7333. BNE .Standing2
  7334. LDA #$08
  7335. STA AttackOffset
  7336. .Standing2:
  7337.  
  7338. LDA $0607
  7339. CLC
  7340. ADC #$08
  7341. SEC
  7342. SBC AttackOffset
  7343. CMP $0653
  7344. BCC .End
  7345. JMP .Hit
  7346. .RightLeft: ;Chum Facing Right/Corey Motorcycle on Left
  7347.  
  7348. LDA $0663
  7349. CLC
  7350. ADC #$01
  7351. CMP $060F
  7352. BCC .End
  7353. .Hit:
  7354. LDA ChumHit
  7355. CMP #$00
  7356. BNE .End
  7357. INC LifeAmt
  7358. INC LifeAmt
  7359. INC LifeAmt
  7360. INC LifeAmt
  7361. .SkipDeduct:
  7362. LDA $0607
  7363. CMP $064B
  7364. BCC .KnockLeft
  7365. ;;Knock Right
  7366. LDA #$01
  7367. STA ChumHit
  7368. .Connect:
  7369. LDA #$0F
  7370. STA ChumTempX
  7371. LDA #STATEHIT
  7372. STA gamestate
  7373. .End:
  7374. RTS
  7375. .KnockLeft:
  7376. LDA ChumHit
  7377. CMP #$00
  7378. BNE .End
  7379. ; INC LifeAmt
  7380. .SkipDeduct2:
  7381. LDA #$02
  7382. STA ChumHit
  7383. JMP .Connect
  7384. .CollisionFromLeft: ;chum facing left
  7385. LDA $0643
  7386. CMP $0653
  7387. BCS .LeftRight
  7388.  
  7389. LDA #$00
  7390. STA AttackOffset
  7391. LDA DuckFlag
  7392. CMP #$01
  7393. BNE .Standing
  7394. LDA #$08
  7395. STA AttackOffset
  7396. .Standing:
  7397. LDA $0663
  7398. CLC
  7399. ADC #$01
  7400. SEC
  7401. SBC AttackOffset
  7402. CMP $0607
  7403. BCC .End
  7404. JMP .Hit
  7405. .LeftRight:
  7406. LDA $060F
  7407. CLC
  7408. ADC #$08
  7409. CMP $0653
  7410. BCC .End
  7411. JMP .Hit
  7412. Boss3:
  7413. LDA CurrentFloor
  7414. CMP #$02
  7415. BEQ .Boss3
  7416. JMP Boss4
  7417. .Boss3:
  7418. JSR BallCollision
  7419. LDA $0604
  7420. CLC
  7421. ADC #$30
  7422. CMP $0640
  7423. BCC .End
  7424.  
  7425. LDA DirFacing
  7426. CMP #$00
  7427. BNE .CollisionFromRight
  7428. JMP .CollisionFromLeft
  7429. .CollisionFromRight: ;Chum Facing Right
  7430. LDA $060F
  7431. CMP #$0D
  7432. BCC .Hit
  7433. RTS
  7434. .Hit:
  7435. LDA ChumHit
  7436. CMP #$00
  7437. BNE .End
  7438. INC LifeAmt
  7439. INC LifeAmt
  7440. INC LifeAmt
  7441. INC LifeAmt
  7442. .SkipDeduct:
  7443. LDA $0607
  7444. CMP $064B
  7445. BCC .KnockLeft
  7446. ;;Knock Right
  7447. LDA #$01
  7448. STA ChumHit
  7449. .Connect:
  7450. LDA #$0F
  7451. STA ChumTempX
  7452. LDA #STATEHIT
  7453. STA gamestate
  7454. .End:
  7455. RTS
  7456. .KnockLeft:
  7457. LDA ChumHit
  7458. CMP #$00
  7459. BNE .End
  7460. ; INC LifeAmt
  7461. .SkipDeduct2:
  7462. LDA #$02
  7463. STA ChumHit
  7464. JMP .Connect
  7465. .CollisionFromLeft: ;chum facing left
  7466. LDA DuckFlag
  7467. CMP #$01
  7468. BNE .Standing
  7469. LDA $060F
  7470. CMP #$08
  7471. BCC .Hit
  7472. RTS
  7473. .Standing:
  7474. LDA $0607
  7475. CMP #$10
  7476. BCC .Hit
  7477. RTS
  7478. Boss4:
  7479. LDA $0604
  7480. CLC
  7481. ADC #$18
  7482. CMP $0640
  7483. BCC .End
  7484.  
  7485. LDA $0640
  7486. CLC
  7487. ADC #$18
  7488. CMP $0604
  7489. BCC .End
  7490. LDA DirFacing
  7491. CMP #$00
  7492. BNE .CollisionFromRight
  7493. JMP .CollisionFromLeft
  7494. RTS
  7495. .CollisionFromRight: ;chum facing right
  7496. ;chum left (behind him) compared to enemy right (in front of them)
  7497. LDA JumpFlag
  7498. CMP #$00
  7499. BEQ .NotJumpRight
  7500. JMP .DarkCollisionRight
  7501. .NotJumpRight:
  7502. LDA $0643
  7503. CLC
  7504. ADC #$03
  7505. CMP $060F
  7506. BCC .End
  7507. ;chum right (in front of him) compared to enemy left ()
  7508. LDA $0607
  7509. CLC
  7510. ADC #$07
  7511. CMP $0647
  7512. BCC .End
  7513. .Hit:
  7514. LDA ChumHit
  7515. CMP #$00
  7516. BNE .End
  7517. INC LifeAmt
  7518. INC LifeAmt
  7519. .SkipDeduct:
  7520. LDA $0607
  7521. CMP $0647
  7522. BCC .KnockLeft
  7523. ;;Knock Right
  7524. LDA #$01
  7525. STA ChumHit
  7526. .Connect:
  7527. LDA #$0F
  7528. STA ChumTempX
  7529. LDA #STATEHIT
  7530. STA gamestate
  7531. .End:
  7532. RTS
  7533. .KnockLeft:
  7534. LDA ChumHit
  7535. CMP #$00
  7536. BNE .End
  7537. ; INC LifeAmt
  7538. .SkipDeduct2:
  7539. LDA #$02
  7540. STA ChumHit
  7541. JMP .Connect
  7542. .CollisionFromLeft: ;chum facing left
  7543. ;chum left (in front of him) compared to enemy right (in front of them)
  7544. LDA JumpFlag
  7545. CMP #$00
  7546. BEQ .NotJumpLeft
  7547. JMP .DarkCollisionLeft
  7548. .NotJumpLeft:
  7549. LDA $0643
  7550. CLC
  7551. ADC #$03
  7552. CMP $0607
  7553. BCC .End
  7554. ;chum right (behind him) compared to enemy left
  7555. LDA $060F
  7556. CLC
  7557. ADC #$03
  7558. CMP $0647
  7559. BCC .End
  7560. JMP .Hit
  7561. .End2:
  7562. RTS
  7563. .DarkCollisionRight:
  7564. LDA $0643
  7565. CLC
  7566. ADC #$03
  7567. CMP $060F
  7568. BCC .End2
  7569.  
  7570. LDA $0607
  7571. SEC
  7572. SBC #$01
  7573. CMP $0647
  7574. BCC .End2
  7575. JMP .Hit
  7576. .DarkCollisionLeft:
  7577. LDA $0643
  7578. SEC
  7579. SBC #$05
  7580. CMP $0607
  7581. BCC .End2
  7582. ;chum right (behind him) compared to enemy left
  7583. LDA $060F
  7584. SEC
  7585. SBC #$01
  7586. CMP $0647
  7587. BCC .End2
  7588. JMP .Hit
  7589.  
  7590. BallCollision:
  7591. LDA $0604
  7592. CLC
  7593. ADC #$30
  7594. CMP $0680
  7595. BCC .End
  7596.  
  7597. LDA $0680
  7598. CLC
  7599. ADC #$08
  7600. CMP $0604
  7601. BCC .End
  7602.  
  7603. LDA DirFacing
  7604. CMP #$00
  7605. BNE .CollisionFromRight
  7606. JMP .CollisionFromLeft
  7607. .CollisionFromRight: ;Chum Facing Right/smoke to the Right
  7608. LDA $0607
  7609. CMP $0683
  7610. BCS .RightLeft
  7611. LDA $0607
  7612. CLC
  7613. ADC #$08
  7614. CMP $0683
  7615. BCC .End
  7616. JMP .Hit
  7617. .RightLeft: ;Chum Facing Right/smoke to the Left
  7618. LDA $0683
  7619. CLC
  7620. ADC #$05
  7621. CMP $060F
  7622. BCC .End
  7623. .Hit:
  7624. LDA ChumHit
  7625. CMP #$00
  7626. BNE .End
  7627. INC LifeAmt
  7628. INC LifeAmt
  7629. INC LifeAmt
  7630. INC LifeAmt
  7631.  
  7632. LDA LifeAmt
  7633. CMP #$18
  7634. BCC .SkipDeduct
  7635. LDA BallDirection
  7636. CMP #$02
  7637. BNE .SkipDeduct
  7638. LDA #$01
  7639. STA PlayerDeadFlag
  7640. .SkipDeduct:
  7641. LDA $0607
  7642. CMP $0643
  7643. BCC .KnockLeft
  7644. ;;Knock Right
  7645. LDA #$01
  7646. STA ChumHit
  7647. .Connect:
  7648. LDA #$0F
  7649. STA ChumTempX
  7650. LDA #STATEHIT
  7651. STA gamestate
  7652. .End:
  7653. RTS
  7654. .KnockLeft:
  7655. LDA ChumHit
  7656. CMP #$00
  7657. BNE .End
  7658. ; INC LifeAmt
  7659. .SkipDeduct2:
  7660. LDA #$02
  7661. STA ChumHit
  7662. JMP .Connect
  7663. .CollisionFromLeft: ;Chum Facing Left/smoke to the Right
  7664. LDA $0607
  7665. CMP $0683
  7666. BCS .LeftRight
  7667. LDA $0607
  7668. CLC
  7669. ADC #$10
  7670. CMP $0683
  7671. BCC .End
  7672. JMP .Hit
  7673. .LeftRight: ;Chum Facing Left/smoke to the Left
  7674. LDA $0683
  7675. CLC
  7676. ADC #$01
  7677. CMP $0607
  7678. BCC .End
  7679. JMP .Hit
  7680.  
  7681. LoadPortraitSprites:
  7682. LDA #$29
  7683. STA $06EC
  7684. STA $06F0
  7685. STA $06D0
  7686. STA $06D4
  7687. LDA #$31
  7688. STA $06F4
  7689. STA $06F8
  7690. STA $06D8
  7691. STA $06DC
  7692. LDA #$7E
  7693. STA $06EF
  7694. STA $06F7
  7695. LDA #$86
  7696. STA $06F3
  7697. STA $06FB
  7698. LDA #$00
  7699. STA $06EE
  7700. STA $06F2
  7701. LDA #$01
  7702. STA $06D2
  7703. STA $06D6
  7704. LDA #$20
  7705. STA $06F6
  7706. STA $06FA
  7707. LDA #$21
  7708. STA $06DA
  7709. STA $06DE
  7710. LDA #$03
  7711. STA $06ED
  7712. LDA #$04
  7713. STA $06F1
  7714. LDA #$09
  7715. STA $06F5
  7716. LDA #$0A
  7717. STA $06F9
  7718.  
  7719. LDA #$F2
  7720. STA $06D1
  7721. LDA #$F3
  7722. STA $06D5
  7723. LDA #$F0
  7724. STA $06D9
  7725. LDA #$F1
  7726. STA $06DD
  7727.  
  7728. LDA #$A6
  7729. STA $06D3
  7730. STA $06DB
  7731. LDA #$AE
  7732. STA $06D7
  7733. STA $06DF
  7734. RTS
  7735.  
  7736. ;;;;;;;;;;;
  7737.  
  7738. .bank 6
  7739. .org $C000
  7740.  
  7741. .incbin "Music/pawnstars.dmc"
  7742.  
  7743. FumeCollision:
  7744. LDA BossDead
  7745. CMP #$00
  7746. BNE .End
  7747. LDA $0604
  7748. CLC
  7749. ADC #$20
  7750. CMP $0684
  7751. BCC .End
  7752.  
  7753. LDA DirFacing
  7754. CMP #$00
  7755. BNE .CollisionFromRight
  7756. JMP .CollisionFromLeft
  7757. .CollisionFromRight: ;Chum Facing Right/smoke to the Right
  7758. LDA $0684
  7759. CMP #$FE
  7760. BEQ .End
  7761.  
  7762. LDA $0687
  7763. CLC
  7764. ADC #$03
  7765. CMP $060F
  7766. BCC .End
  7767. ;chum right (in front of him) compared to enemy left ()
  7768. LDA $060F
  7769. CLC
  7770. ADC #$10
  7771. CMP $0687
  7772. BCC .End
  7773.  
  7774. JMP .Hit
  7775. .RightLeft: ;Chum Facing Right/smoke to the Left
  7776. LDA $0687
  7777. CLC
  7778. ADC #$05
  7779. CMP $060F
  7780. BCC .End
  7781. RTS
  7782. .Hit:
  7783. LDA ChumHit
  7784. CMP #$00
  7785. BNE .End
  7786. INC LifeAmt
  7787. INC LifeAmt
  7788. INC LifeAmt
  7789. INC LifeAmt
  7790. .SkipDeduct:
  7791. LDA $0607
  7792. CMP $064B
  7793. BCC .KnockLeft
  7794. ;;Knock Right
  7795. LDA #$01
  7796. STA ChumHit
  7797. .Connect:
  7798. LDA #$0F
  7799. STA ChumTempX
  7800. LDA #STATEHIT
  7801. STA gamestate
  7802. .End:
  7803. RTS
  7804. .KnockLeft:
  7805. LDA ChumHit
  7806. CMP #$00
  7807. BNE .End
  7808. ; INC LifeAmt
  7809. .SkipDeduct2:
  7810. LDA #$02
  7811. STA ChumHit
  7812. JMP .Connect
  7813. .CollisionFromLeft: ;Chum Facing Left/smoke to the Right
  7814. LDA $0684
  7815. CMP #$FE
  7816. BEQ .End
  7817.  
  7818. LDA $0687
  7819. CLC
  7820. ADC #$02
  7821. CMP $0607
  7822. BCC .End
  7823. ;chum right (behind him) compared to enemy left
  7824. LDA $060F
  7825. CLC
  7826. ADC #$02
  7827. CMP $0687
  7828. BCC .End
  7829. JMP .Hit
  7830. .LeftRight: ;Chum Facing Left/smoke to the Left
  7831. LDA $0687
  7832. CLC
  7833. ADC #$05
  7834. CMP $0607
  7835. BCC .End
  7836. JMP .Hit
  7837.  
  7838. ReadController:
  7839. LDA #$01
  7840. STA $4016
  7841. LDA #$00
  7842. STA $4016
  7843.  
  7844. LDX #$08
  7845. .Loop:
  7846. LDA $4016
  7847. LSR A ; bit0 -> Carry
  7848. ROL ButtonsP1 ; bit0 <- Carry
  7849. DEX
  7850. BNE .Loop
  7851.  
  7852. LDA #$01
  7853. STA $4016
  7854. LDA #$00
  7855. STA $4016
  7856. .Begin:
  7857. LDX #$08
  7858. .Loop2:
  7859. LDA $4016
  7860. LSR A ; bit0 -> Carry
  7861. ROL ButtonsP1Old ; bit0 <- Carry
  7862. DEX
  7863. BNE .Loop2
  7864.  
  7865. LDA ButtonsP1
  7866. CMP ButtonsP1Old
  7867. BNE ReadController
  7868. .Skip:
  7869. RTS
  7870.  
  7871.  
  7872. bkgd_pointer_table:
  7873. .dw TitleNam, PlayingNam, PlayingNam, CreditsNam, EndingNam, EndingNam, InterludeNam, InterludeNam
  7874.  
  7875. sprites_pointer_table:
  7876. .dw TitleSP, PlayingSP, EndingSP
  7877.  
  7878. TitleSP:
  7879. .db $82,$03,$00,$4C
  7880. .db $82,$04,$00,$54
  7881. .db $8A,$09,$00,$4C
  7882. .db $8A,$0A,$00,$54
  7883. .db $FE
  7884.  
  7885. PlayingSP:
  7886. .db $37,$D5,$01,$F9 ;sprite 0
  7887. .db $FE
  7888.  
  7889. EndingSP:
  7890. .db $7D,$D5,$00,$F8 ;sprite 0
  7891. .db $72,$03,$00,$80 ;chum
  7892. .db $72,$04,$00,$88
  7893. .db $72,$00,$00,$90
  7894. .db $7A,$09,$00,$80
  7895. .db $7A,$0A,$00,$88
  7896. .db $7A,$0B,$00,$90
  7897. .db $82,$13,$00,$80
  7898. .db $82,$14,$00,$88
  7899. .db $82,$15,$00,$90
  7900. .db $8A,$1F,$00,$80
  7901. .db $8A,$20,$00,$88
  7902. .db $8A,$00,$00,$90
  7903. .db $92,$00,$00,$80
  7904. .db $92,$2A,$00,$88
  7905. .db $92,$00,$00,$90
  7906.  
  7907. .db $8A,$F2,$01,$70 ;dawg
  7908. .db $8A,$F3,$01,$78
  7909. .db $92,$F0,$01,$70
  7910. .db $92,$F1,$01,$78
  7911.  
  7912. .db $4F,$CE,$02,$48 ;lightpole 1
  7913. .db $4F,$CF,$02,$50
  7914. .db $57,$DE,$02,$48
  7915. .db $57,$DF,$02,$50
  7916. .db $5F,$EF,$02,$50
  7917. .db $67,$EE,$02,$50
  7918. .db $6F,$E3,$02,$50
  7919. .db $77,$E4,$02,$50
  7920. .db $4F,$CE,%01000010,$60 ;lightpole 1 reversed
  7921. .db $4F,$CF,%01000010,$58
  7922. .db $57,$DE,%01000010,$60
  7923. .db $57,$DF,%01000010,$58
  7924. .db $5F,$EF,%01000010,$58
  7925. .db $67,$EE,%01000010,$58
  7926. .db $6F,$E3,%01000010,$58
  7927. .db $77,$E4,%01000010,$58
  7928.  
  7929. .db $4F,$CE,$02,$C8 ;lightpole 1
  7930. .db $4F,$CF,$02,$D0
  7931. .db $57,$DE,$02,$C8
  7932. .db $57,$DF,$02,$D0
  7933. .db $5F,$EF,$02,$D0
  7934. .db $67,$EE,$02,$D0
  7935. .db $6F,$E3,$02,$D0
  7936. .db $77,$E4,$02,$D0
  7937. .db $4F,$CE,%01000010,$E0 ;lightpole 1 reversed
  7938. .db $4F,$CF,%01000010,$D8
  7939. .db $57,$DE,%01000010,$E0
  7940. .db $57,$DF,%01000010,$D8
  7941. .db $5F,$EF,%01000010,$D8
  7942. .db $67,$EE,%01000010,$D8
  7943. .db $6F,$E3,%01000010,$D8
  7944. .db $77,$E4,%01000010,$D8
  7945. .db $FE
  7946.  
  7947. palette_pointer_table:
  7948. .dw TitlePAL, PlayingPAL, EndingPAL
  7949.  
  7950. LevelAttrAddress:
  7951. .dw TitleATTR, PlayingATTR, CreditsATTR, EndingATTR
  7952.  
  7953. TitlePAL:
  7954. .db $0F,$00,$31,$20, $0F,$17,$27,$37, $0F,$06,$16,$26, $0F,$00,$22,$20 ;;background palette
  7955. .db $0F,$0F,$37,$17, $0F,$02,$38,$3C, $0F,$1C,$15,$14, $0F,$02,$38,$3C ;;sprite palette
  7956.  
  7957. PlayingPAL:
  7958. .db $0F,$00,$31,$20, $0F,$17,$27,$37, $0F,$06,$16,$26, $0F,$27,$37,$20 ;;background palette
  7959. .db $0F,$0F,$37,$17, $0F,$30,$27,$17, $0F,$21,$37,$15, $0F,$0F,$37,$21 ;;sprite palette
  7960.  
  7961. EndingPAL:
  7962. .db $0F,$00,$31,$20, $0F,$17,$27,$37, $0F,$06,$16,$26, $0F,$27,$37,$20 ;;background palette
  7963. .db $0F,$0F,$37,$17, $0F,$30,$27,$17, $0F,$00,$0F,$30, $0F,$0F,$37,$21 ;;sprite palette
  7964.  
  7965. RespawnPlayer:
  7966. LDA PlayerDeadFlag
  7967. CMP #$01
  7968. BNE .End
  7969. LDA DeadSFXCount
  7970. CMP #$05
  7971. BEQ .Respawn
  7972. INC DeadSFXTimer
  7973. LDA DeadSFXTimer
  7974. CMP #$01
  7975. BEQ .Play
  7976. LDA DeadSFXTimer
  7977. CMP #$08
  7978. BNE .End
  7979. INC DeadSFXCount
  7980. LDA #$00
  7981. STA DeadSFXTimer
  7982. RTS
  7983. .Play:
  7984. LDA #$00
  7985. JSR Bankswitch
  7986. LDA #$1B
  7987. JSR FamiToneSamplePlay
  7988. .End:
  7989. RTS
  7990. .Respawn:
  7991. INC DeadSFXTimer
  7992. LDA DeadSFXTimer
  7993. CMP #$60
  7994. BNE .End
  7995. LDA #$00
  7996. STA DeadSFXTimer
  7997. STA DeadSFXCount
  7998. LDA CurrentFloor
  7999. CMP #$01
  8000. BEQ .8
  8001. CMP #$03
  8002. BEQ .8
  8003. LDA #$08
  8004. STA NametableCount
  8005. JMP .Connect
  8006. .8:
  8007. LDA #$00
  8008. STA NametableCount
  8009. .Connect:
  8010. LDA #$00
  8011. STA LifeAmt
  8012. STA PlayerDeadPhase
  8013. STA PlayerDeadFlag
  8014. STA Xscroll
  8015. LDA #$02
  8016. JSR Bankswitch
  8017. JSR ResetLevelValues
  8018. JSR ClearEnemies
  8019.  
  8020. LDA Game2p
  8021. CMP #$01
  8022. BNE .Regular
  8023. LDA CurrentPlayer
  8024. CMP #$02
  8025. BNE .Regular
  8026. DEC PlayerLifeP2
  8027. LDA PlayerLifeP2
  8028. CMP #$FF
  8029. BEQ .GameOver
  8030. LDA #$01
  8031. STA CurrentPlayer
  8032. LDA #STATELOADPLAYING
  8033. STA gamestate
  8034. RTS
  8035. .Regular:
  8036. DEC PlayerLife
  8037. LDA PlayerLife
  8038. CMP #$FF
  8039. BEQ .GameOver
  8040. LDA Game2p
  8041. CMP #$01
  8042. BNE .Cont
  8043. LDA #$02
  8044. STA CurrentPlayer
  8045. .Cont:
  8046. LDA #STATELOADPLAYING
  8047. STA gamestate
  8048. RTS
  8049. .GameOver:
  8050. JSR KillSprites
  8051. LDA #STATELOADGAMEOVER
  8052. STA gamestate
  8053. RTS
  8054.  
  8055. ActuallyJump:
  8056. LDA JumpFlag
  8057. CMP #$01
  8058. BEQ .End
  8059. CMP #$02
  8060. BEQ .Next
  8061. ; RTS
  8062. JMP ActuallyJumpDown
  8063. .Next:
  8064. JSR JumpSprite
  8065. LDA $0604
  8066. CMP JumpPos+2
  8067. BCC .Stop
  8068. CMP JumpPos+3
  8069. BCC .JumpSlow
  8070. CMP JumpPos+4
  8071. BCC .JumpFast
  8072. RTS
  8073. .JumpFast:
  8074. LDX #$00
  8075. LDY #$00
  8076. .Loop:
  8077. LDA $0604,y
  8078. SEC
  8079. SBC #$04
  8080. STA $0604,y
  8081. INX
  8082. INY
  8083. INY
  8084. INY
  8085. INY
  8086. CPX #$0F
  8087. BNE .Loop
  8088. JSR Adjust3
  8089. JSR Adjust2
  8090. RTS
  8091. .JumpSlow:
  8092. LDX #$00
  8093. LDY #$00
  8094. .Loop2:
  8095. LDA $0604,y
  8096. SEC
  8097. SBC #$01
  8098. STA $0604,y
  8099. INX
  8100. INY
  8101. INY
  8102. INY
  8103. INY
  8104. CPX #$0F
  8105. BNE .Loop2
  8106. JSR Adjust3
  8107. JSR Adjust2
  8108. RTS
  8109. .Stop:
  8110. JSR Adjust3
  8111. JSR Adjust2
  8112. INC StopCounter
  8113. LDA StopCounter
  8114. CMP #$06
  8115. BNE .End
  8116. LDA #$00
  8117. STA StopCounter
  8118. LDA #$03
  8119. STA JumpFlag
  8120. .End:
  8121. RTS
  8122.  
  8123. Adjust2:
  8124. LDA JumpAttackResetFlag
  8125. CMP #$01
  8126. BNE .End
  8127. LDA #$02
  8128. STA JumpAttackResetFlag
  8129. .End:
  8130. RTS
  8131.  
  8132. Adjust3:
  8133. LDA JumpAttackResetFlag
  8134. CMP #$02
  8135. BNE .End
  8136. LDA JumpFlag
  8137. CMP #$03
  8138. BNE .Skip
  8139. LDA ExtraFlag
  8140. CMP #$04
  8141. BEQ .Skip
  8142. INC ExtraFlag
  8143. RTS
  8144. .Skip:
  8145. LDA $0606
  8146. CMP #$00
  8147. BNE .Left
  8148. LDX #$00
  8149. .Loop:
  8150. LDA $0607,x
  8151. CLC
  8152. ADC #$08
  8153. STA $0607,x
  8154. INX
  8155. INX
  8156. INX
  8157. INX
  8158. CPX #$3C
  8159. BNE .Loop
  8160. LDA #$00
  8161. STA JumpAttackFlag
  8162. STA ExtraFlag
  8163. STA JumpAttackResetFlag
  8164. RTS
  8165. .Left:
  8166. LDX #$00
  8167. .Loop3:
  8168. LDA $0607,x
  8169. SEC
  8170. SBC #$08
  8171. STA $0607,x
  8172. INX
  8173. INX
  8174. INX
  8175. INX
  8176. CPX #$3C
  8177. BNE .Loop3
  8178. LDA #$00
  8179. STA JumpAttackFlag
  8180. STA ExtraFlag
  8181. STA JumpAttackResetFlag
  8182. .End:
  8183. RTS
  8184.  
  8185. ActuallyJumpDown:
  8186. LDA JumpFlag
  8187. CMP #$03
  8188. BNE .End
  8189. .Next:
  8190. LDA ChumHit
  8191. CMP #$00
  8192. BNE .Skip
  8193. JSR JumpSprite
  8194. JSR Adjust3
  8195. JSR Adjust2
  8196. .Skip:
  8197. LDA $0604
  8198. CMP JumpPos
  8199. BCS .Stop
  8200. CMP JumpPos+1
  8201. BCS .JumpFast
  8202. RTS
  8203. .JumpFast:
  8204. LDX #$00
  8205. LDY #$00
  8206. .Loop:
  8207. LDA $0604,y
  8208. CLC
  8209. ADC #$03
  8210. STA $0604,y
  8211. INX
  8212. INY
  8213. INY
  8214. INY
  8215. INY
  8216. CPX #$0F
  8217. BNE .Loop
  8218. JSR Adjust3
  8219. RTS
  8220. .Stop:
  8221. LDA #$00
  8222. STA JumpFlag
  8223. STA UpHeld
  8224. JSR StandStill
  8225. .End:
  8226. RTS
  8227.  
  8228. ResetFanStuff:
  8229. LDA FanPlaced
  8230. CMP #$00
  8231. BEQ .End
  8232. LDA #$00
  8233. STA FanPlaced
  8234. STA FanErased
  8235. STA FanVelocity
  8236. STA FanVelocityPart
  8237. STA FanFallDir
  8238. STA FanDelayTimer
  8239. .End:
  8240. RTS
  8241.  
  8242. LookForFan:
  8243. LDA CurrentFloor
  8244. CMP #$03
  8245. BNE .End
  8246. LDA NametableCount
  8247. CMP #$01
  8248. BEQ .LookForScroll
  8249. CMP #$03
  8250. BEQ .LookForScroll
  8251. CMP #$05
  8252. BEQ .LookForScroll
  8253. CMP #$07
  8254. BEQ .LookForScroll
  8255. RTS
  8256. .LookForScroll
  8257. LDA Xscroll
  8258. CMP #$20
  8259. BNE .End
  8260. LDA FanPlaced
  8261. CMP #$00
  8262. BNE .End
  8263. JSR PlaceFan
  8264. LDA #$01
  8265. STA FanPlaced
  8266. .End:
  8267. RTS
  8268.  
  8269. FanCollision:
  8270. LDA FanPlaced
  8271. CMP #$00
  8272. BEQ .End
  8273. LDA InvincTimer
  8274. CMP #$00
  8275. BNE .End
  8276. LDA FanFallDir
  8277. CMP #$00
  8278. BNE .End
  8279. LDA $06C0
  8280. CLC
  8281. ADC #$06
  8282. CMP $0604
  8283. BCC .End
  8284. LDA $0607
  8285. CLC
  8286. ADC #$04
  8287. CMP $06C3
  8288. BCC .End
  8289. LDA #$02
  8290. STA ChumHit
  8291. INC LifeAmt
  8292. INC LifeAmt
  8293. LDA #$0F
  8294. STA ChumTempX
  8295. LDA #STATEHIT
  8296. STA gamestate
  8297. .End:
  8298. RTS
  8299.  
  8300. LoadNametable:
  8301. LDA $2002
  8302. LDA #$20
  8303. STA $2006
  8304. LDA #$00
  8305. STA $2006
  8306. SetNametable:
  8307. LDA BG_ptr
  8308. ASL A
  8309. TAY
  8310. LDA bkgd_pointer_table, y
  8311. STA AddrLow
  8312. LDA bkgd_pointer_table+1, y
  8313. STA AddrHigh
  8314.  
  8315. LDX #$04
  8316. LDY #$00
  8317. .TitleLoop:
  8318. LDA [AddrLow], y ;load nametable
  8319. STA $2007 ;draw tile
  8320. INY ;X is 0, so move on to get new counter number
  8321. BNE .TitleLoop
  8322. ;;Outer Loop
  8323. INC AddrHigh
  8324. DEX
  8325. BNE .TitleLoop
  8326.  
  8327. INC BG_ptr
  8328.  
  8329. LDA $2002
  8330. LDA #$24
  8331. STA $2006
  8332. LDA #$00
  8333. STA $2006
  8334. .Nametable2:
  8335. LDA BG_ptr
  8336. ASL A
  8337. TAY
  8338. LDA bkgd_pointer_table, y
  8339. STA AddrLow
  8340. LDA bkgd_pointer_table+1, y
  8341. STA AddrHigh
  8342.  
  8343. LDX #$04
  8344. LDY #$00
  8345. .TitleLoop2:
  8346. LDA [AddrLow], y ;load nametable
  8347. STA $2007 ;draw tile
  8348. INY ;X is 0, so move on to get new counter number
  8349. BNE .TitleLoop2
  8350. ;;Outer Loop
  8351. INC AddrHigh
  8352. DEX
  8353. BNE .TitleLoop2
  8354. RTS
  8355.  
  8356. LoadAttribute:
  8357. LDA $2002
  8358. LDA #$23
  8359. STA $2006
  8360. LDA #$C0
  8361. STA $2006
  8362.  
  8363. LDA ATTR_ptr
  8364. ASL A
  8365. TAY
  8366. LDA LevelAttrAddress, y
  8367. STA AddrLow
  8368. LDA LevelAttrAddress+1, y
  8369. STA AddrHigh
  8370.  
  8371. LDY #$00
  8372. .Loop:
  8373. LDA [AddrLow], y
  8374. STA $2007
  8375. INY
  8376. CPY #$40
  8377. BNE .Loop
  8378.  
  8379. LDA $2002
  8380. LDA #$27
  8381. STA $2006
  8382. LDA #$C0
  8383. STA $2006
  8384.  
  8385. LDA ATTR_ptr
  8386. ASL A
  8387. TAY
  8388. LDA LevelAttrAddress, y
  8389. STA AddrLow
  8390. LDA LevelAttrAddress+1, y
  8391. STA AddrHigh
  8392.  
  8393. LDY #$00
  8394. .Loop2:
  8395. LDA [AddrLow], y
  8396. STA $2007
  8397. INY
  8398. CPY #$40
  8399. BNE .Loop2
  8400. .End:
  8401. RTS
  8402.  
  8403. CopyCHRData:
  8404. LDA #$00
  8405. STA $2006
  8406. STA $2006
  8407. CopyCHRDataSprite:
  8408. ; lda #$80
  8409. ; sta LoadingMusic
  8410. ; sta $2000
  8411.  
  8412. LDY #$00
  8413. LDX #$20
  8414. .Loop:
  8415. LDA [AddrLow], y
  8416. STA $2007
  8417. INY
  8418. BNE .Loop
  8419. INC AddrHigh
  8420. DEX
  8421. BNE .Loop
  8422. ; lda #0
  8423. ; sta $2000
  8424. ; sta LoadingMusic
  8425. RTS
  8426.  
  8427. LoadSprites:
  8428. LDA SPRITES_ptr
  8429. ASL A
  8430. TAY
  8431. LDA sprites_pointer_table,y
  8432. STA AddrLow
  8433. LDA sprites_pointer_table+1,y
  8434. STA AddrHigh
  8435.  
  8436. LDY #$00
  8437. LoadBonusSpritesLoop:
  8438. LDA [AddrLow], y
  8439. CMP #$FE
  8440. BEQ .End
  8441. STA $0600, y
  8442. INY
  8443. CPY #$FF
  8444. BNE LoadBonusSpritesLoop
  8445. .End:
  8446. RTS
  8447.  
  8448. RegionDetect:
  8449. JSR is_pal_nes
  8450. STA Region
  8451. BNE RegionPAL
  8452. LDA #$01
  8453. STA Region
  8454. RTS
  8455. RegionPAL:
  8456. LDA #$00
  8457. STA Region
  8458. RTS
  8459.  
  8460. RunPaletteTimer:
  8461. LDA FadeOutFlag
  8462. CMP #$01
  8463. BEQ .End
  8464. LDA CurrentPalette
  8465. CMP #$03
  8466. BEQ .Goto4
  8467. CMP #$04
  8468. BEQ .End
  8469. LDA PaletteTimer
  8470. CMP #$04
  8471. BEQ .Increment
  8472. .Connect:
  8473. INC PaletteTimer
  8474. .End:
  8475. RTS
  8476. .Increment:
  8477. LDA #$00
  8478. STA PaletteTimer
  8479. STA PaletteDone
  8480. INC CurrentPalette
  8481. RTS
  8482. .Goto4:
  8483. INC PaletteTimer
  8484. LDA PaletteTimer
  8485. CMP #$10
  8486. BNE .End
  8487. LDA #$04
  8488. STA CurrentPalette
  8489. LDA #$00
  8490. STA PaletteDone
  8491. RTS
  8492.  
  8493. UpdatePalette:
  8494. LDA CurrentPalette
  8495. CMP #$04
  8496. BEQ .End
  8497.  
  8498. LDA $2002
  8499. LDA #$3F ;load palette address
  8500. STA $2006
  8501. LDA #$00
  8502. STA $2006
  8503.  
  8504. LDA PAL_ptr
  8505. ASL A
  8506. TAY
  8507.  
  8508. LDA palette_pointer_table, y
  8509. STA AddrLow
  8510. LDA palette_pointer_table+1, y
  8511. STA AddrHigh
  8512.  
  8513. LDY #$00
  8514.  
  8515. LDA CurrentPalette ;palette variable has four stages
  8516. CMP #$00 ;variable = 0 is a black screen
  8517. BEQ .Black ;variable = 1 is fade in
  8518. CMP #$01 ;variable = 2 is next step
  8519. BEQ .2 ;variable = 3 is full palette
  8520. CMP #$02
  8521. BEQ .3
  8522. JSR LoadPalettes ;value is 3. just jump to normal LoadPalette routine.
  8523. .End:
  8524. RTS
  8525. .Black: ;variable is 0. black screen.
  8526. LDA #$FF ;value #$FF for all colors.
  8527. STA $2007
  8528. INY
  8529. CPY #$20
  8530. BNE .Black
  8531. RTS
  8532. .2: ;value is 1. fade in one step.
  8533. LDA [AddrLow], Y
  8534. SEC
  8535. SBC #$20 ;take the value of the color in the palette and subtract $20
  8536. CMP #$11
  8537. BCC .Cont ;if it's between $00-$11, we're good! skip ahead.
  8538. CLC
  8539. ADC #$10 ;add another $10 to see if we're in between $00-$11 this time.
  8540. CMP #$11 ;if we are, skip ahead!
  8541. BCC .Cont
  8542. CLC
  8543. ADC #$10 ;if it hasn't gotten to between $00-$11 by now, it's obvious that this one
  8544. .Cont: ;will be within that value, since $30 is the highest color value.
  8545. STA $2007
  8546. INY
  8547. CPY #$20
  8548. BNE .2
  8549. RTS
  8550. .3: ;value is 2. fade in for second step.
  8551. LDA [AddrLow], Y
  8552. SEC ;since the first step was between $00-$11, we only need to subtract a single time
  8553. SBC #$10 ;for step 2. this might wind up being the same value as step one, but that's okay.
  8554. CMP #$11 ;if not, it's between $10-$21, which is perfect.
  8555. BCC .Cont2
  8556. CLC
  8557. ADC #$10
  8558. .Cont2:
  8559. STA $2007
  8560. INY
  8561. CPY #$20
  8562. BNE .3
  8563. RTS
  8564.  
  8565. ; Deteremines whether code is running on an NTSC or PAL NES
  8566. ; For NTSC, A = 0. For PAL, A != 0. Z flag also set.
  8567. ; Chanes APU frame sequencer mode and $4015 enables.
  8568. ; Takes about 1/60 second to complete.
  8569. ; Preserved: X, Y
  8570. is_pal_nes:
  8571. LDA #$00 ; RESET DATA FOR RESET
  8572. STA $4000
  8573. ; Start tone
  8574. LDA #$40 ; reset frame sequencer, IRQ off
  8575. STA $4017
  8576. LDA #$01 ; enable square 0
  8577. STA $4015
  8578. LDA #$00 ; pitch = 0 (silent)
  8579. STA $4002
  8580. LDA #$18 ; load length with $02
  8581. STA $4003
  8582.  
  8583. ; Count time until tone stops
  8584. LDA #5 ; makes NTSC and PAL be equal
  8585. SEC ; distances from $80 after loop
  8586. is_pal_nes_loop:
  8587. ADC #0 ; iter counter
  8588. PHA
  8589.  
  8590. LDA #$D0 ; internal delay loop
  8591. is_pal_nes_delay:
  8592. ADC #1
  8593. BNE is_pal_nes_delay
  8594.  
  8595. LDA $4015 ; C set if tone is running
  8596. LSR a
  8597.  
  8598. PLA ; doesn't modify C, but does set N flag
  8599. BCS is_pal_nes_loop
  8600.  
  8601. ; A=$79 for NTSC
  8602. ; A=$86 for PAL
  8603. bmi is_pal ; PAL if count >= $80
  8604. LDA #0 ; clear to 0 if NTSC
  8605. is_pal:
  8606. RTS
  8607.  
  8608. Random:
  8609. ; See "linear-congruential random number generator" for more.
  8610. ; rand = (rand * 5 + 0x3611) & 0xffff;
  8611. ; return (rand >> 8) & 0xff;
  8612. LDA randSeedHigh
  8613. STA randTemp
  8614. LDA randSeedLow
  8615. ASL a ; rand = rand * 4 + rand
  8616. ROL randTemp
  8617. ASL a
  8618. ROL randTemp
  8619. CLC
  8620. ADC randSeedLow
  8621. PHA
  8622. LDA randTemp
  8623. ADC randSeedHigh
  8624. STA randSeedHigh
  8625. PLA ; rand = rand + 0x3611
  8626. CLC
  8627. ADC #$11
  8628. STA randSeedLow
  8629. LDA randSeedHigh
  8630. ADC #$36
  8631. STA randSeedHigh
  8632. RTS
  8633.  
  8634. BankTable:
  8635. .db $00,$01,$02,$03,$04,$05,$06,$07
  8636.  
  8637. Bankswitch:
  8638. TAX
  8639. STA BankTable,x
  8640. RTS
  8641.  
  8642. KillBoss:
  8643. LDA BossDead
  8644. CMP #$00
  8645. BNE .End
  8646. LDA EnemyLifeAmt
  8647. CMP #$18
  8648. BCS .Start
  8649. RTS
  8650. .Start:
  8651. LDA #$02
  8652. JSR Bankswitch
  8653. JSR EraseBossExtras
  8654. JSR SetBossLoopTotal
  8655. LDX #$00
  8656. LDY #$00
  8657. .Connect:
  8658. LDA EnemyDeadPhase
  8659. CMP #$00
  8660. BEQ .Up
  8661. JMP .Down
  8662. .Up:
  8663. LDA $0640
  8664. CMP #$70
  8665. BCC .DownFlag
  8666.  
  8667. LDA BossMusicPlayed
  8668. CMP #$01
  8669. BEQ .SkipMusic
  8670. LDA #$00
  8671. JSR Bankswitch
  8672. LDA #$03
  8673. STA SongNum
  8674. LDA SongNum
  8675. JSR FamiToneMusicPlay
  8676. LDA #$01
  8677. STA BossMusicPlayed
  8678. .SkipMusic:
  8679. .UpLoop:
  8680. LDA $0640,x
  8681. SEC
  8682. SBC #$04
  8683. STA $0640,x
  8684. INX
  8685. INX
  8686. INX
  8687. INX
  8688. CPX LoopTotal
  8689. BNE .UpLoop
  8690. RTS
  8691. .DownFlag:
  8692. LDA #$01
  8693. STA EnemyDeadPhase
  8694. .Down:
  8695. LDA $0640
  8696. CMP #$DE
  8697. BCS .Finish
  8698. .DownLoop:
  8699. LDA $0640,x
  8700. CLC
  8701. ADC #$08
  8702. STA $0640,x
  8703. INX
  8704. INX
  8705. INX
  8706. INX
  8707. CPX LoopTotal
  8708. BNE .DownLoop
  8709. .End:
  8710. RTS
  8711. .Finish:
  8712. LDA #$00
  8713. STA EnemyDeadPhase
  8714. STA EnemyDead
  8715. LDX #$00
  8716. .DeadLoop:
  8717. LDA #$FE
  8718. STA $0640,x
  8719. STA $0643,x
  8720. INX
  8721. INX
  8722. INX
  8723. INX
  8724. CPX LoopTotal
  8725. BNE .DeadLoop
  8726. LDA #$01
  8727. STA BossDead
  8728. STA StageBeat
  8729. RTS
  8730.  
  8731. LevelFinished:
  8732. LDA BossDead
  8733. CMP #$01
  8734. BEQ .Start
  8735. CMP #$02
  8736. BEQ .Move
  8737. RTS
  8738. .Start:
  8739. LDA DelayTimer
  8740. CMP #$40
  8741. BNE .Inc
  8742. LDA SkipBossMusic
  8743. CMP #$01
  8744. BEQ .SkipMusic
  8745. LDA #$00
  8746. JSR Bankswitch
  8747. LDA #$04
  8748. STA SongNum
  8749. LDA SongNum
  8750. JSR FamiToneMusicPlay
  8751. LDA #$01
  8752. STA SkipBossMusic
  8753. .SkipMusic:
  8754. LDA EndTimer+1
  8755. CMP #$01
  8756. BEQ .Second
  8757. INC EndTimer
  8758. LDA EndTimer
  8759. BNE .End
  8760. INC EndTimer+1
  8761. .Second:
  8762. INC EndTimer
  8763. LDA EndTimer
  8764. CMP #$A0
  8765. BNE .End
  8766. LDA #$00
  8767. JSR Bankswitch
  8768. JSR FamiToneMusicStop
  8769. LDA #$02
  8770. STA BossDead
  8771. RTS
  8772. .Inc:
  8773. INC DelayTimer
  8774. RTS
  8775. .Move:
  8776. LDA CurrentFloor
  8777. CMP #$00
  8778. BEQ .Left
  8779. CMP #$02
  8780. BEQ .Left
  8781. LDA $0607
  8782. CMP #$FD
  8783. BCS .SpawnPoints
  8784. LDX #$00
  8785. .Loop3:
  8786. LDA $0607,x
  8787. CLC
  8788. ADC #$01
  8789. STA $0607,x
  8790. LDA #%01000000
  8791. STA $0606,x
  8792. INX
  8793. INX
  8794. INX
  8795. INX
  8796. CPX #$3C
  8797. BNE .Loop3
  8798. LDA #$02
  8799. JSR Bankswitch
  8800. JSR SwapRight
  8801. JSR AnimateChum
  8802. RTS
  8803. .Left:
  8804. LDA $0607
  8805. CMP #$02
  8806. BCC .SpawnPoints
  8807. LDX #$00
  8808. .Loop:
  8809. LDA $0607,x
  8810. SEC
  8811. SBC #$01
  8812. STA $0607,x
  8813. LDA #$00
  8814. STA $0606,x
  8815. INX
  8816. INX
  8817. INX
  8818. INX
  8819. CPX #$3C
  8820. BNE .Loop
  8821. LDA #$02
  8822. JSR Bankswitch
  8823. JSR SwapLeft
  8824. JSR AnimateChum
  8825. .End:
  8826. RTS
  8827. .SpawnPoints:
  8828. LDX #$00
  8829. .Loop2:
  8830. LDA #$01
  8831. STA $0607,x
  8832. LDA #$FF
  8833. STA $0604,x
  8834. INX
  8835. INX
  8836. INX
  8837. INX
  8838. CPX #$3C
  8839. BNE .Loop2
  8840. LDA #$03
  8841. STA BossDead
  8842. RTS
  8843.  
  8844. SetDarkChumSprite:
  8845. LDX #$00
  8846. LDY #$00
  8847.  
  8848. .Loop:
  8849. LDA DarkWalk2,x
  8850. STA $0641,y
  8851. INX
  8852. TYA
  8853. CLC
  8854. ADC #$04
  8855. TAY
  8856. CPX #$0F
  8857. BNE .Loop
  8858. LDA #$01
  8859. STA BossPlacedFlag
  8860. RTS
  8861.  
  8862. DarkStandStill:
  8863. LDA DarkJumpFlag
  8864. CMP #$00
  8865. BNE .End
  8866. LDA DarkDuckFlag
  8867. CMP #$01
  8868. BEQ .End
  8869. LDA ChumAttacking
  8870. CMP #$01
  8871. BEQ .End
  8872. LDA ButtonsP1
  8873. AND #%00000011
  8874. BNE .End
  8875.  
  8876. LDX #$00
  8877. LDY #$00
  8878. .Loop2:
  8879. LDA DarkWalk2,x
  8880. STA $0641,y
  8881. INX
  8882. TYA
  8883. CLC
  8884. ADC #$04
  8885. TAY
  8886. CPX #$0F
  8887. BNE .Loop2
  8888. .End:
  8889. RTS
  8890.  
  8891. PlaceWorkGraphic:
  8892. LDA #$00
  8893. JSR Bankswitch
  8894. LDA #$1C
  8895. JSR FamiToneSamplePlay
  8896. LDA #$01
  8897. JSR Bankswitch
  8898. LDA $0643
  8899. CMP #$81
  8900. BCS .Cont
  8901. JMP .Left
  8902. .Cont:
  8903. LDA #$F8
  8904. STA $06C1
  8905. LDA #$F9
  8906. STA $06C5
  8907. LDA #$FA
  8908. STA $06C9
  8909. LDA #$FB
  8910. STA $06CD
  8911. LDA #$8F
  8912. STA $06C0
  8913. STA $06C4
  8914. STA $06C8
  8915. CLC
  8916. ADC #$08
  8917. STA $06CC
  8918. LDA #$D3
  8919. STA $06C3
  8920. CLC
  8921. ADC #$08
  8922. STA $06C7
  8923. CLC
  8924. ADC #$08
  8925. STA $06CB
  8926. STA $06CF
  8927. LDA #$01
  8928. STA $06C2
  8929. STA $06C6
  8930. STA $06CA
  8931. LDA #%01000001
  8932. STA $06CE
  8933. RTS
  8934. .Left:
  8935. LDA #$F8
  8936. STA $06C1
  8937. LDA #$F9
  8938. STA $06C5
  8939. LDA #$FA
  8940. STA $06C9
  8941. LDA #$FB
  8942. STA $06CD
  8943. LDA #$8F
  8944. STA $06C0
  8945. STA $06C4
  8946. STA $06C8
  8947. CLC
  8948. ADC #$08
  8949. STA $06CC
  8950. LDA #$15
  8951. STA $06C3
  8952. STA $06CF
  8953. CLC
  8954. ADC #$08
  8955. STA $06C7
  8956. CLC
  8957. ADC #$08
  8958. STA $06CB
  8959. LDA #$01
  8960. STA $06C2
  8961. STA $06C6
  8962. STA $06CA
  8963. STA $06CE
  8964. RTS
  8965.  
  8966. PlaceCorey:
  8967. LDA CurrentFloor
  8968. CMP #$01
  8969. BNE .End
  8970. LDA NametableCount
  8971. CMP #$08
  8972. BNE .End
  8973. LDA BossPlacedFlag
  8974. CMP #$01
  8975. BEQ .End
  8976. JSR MurderEnemies
  8977. LDA ReadytoSpawn
  8978. CMP #$01
  8979. BNE .End
  8980.  
  8981. LDA #$01
  8982. JSR Bankswitch
  8983. JSR ActuallyPlaceCorey
  8984. LDA #$00
  8985. STA BossTimer
  8986. LDA #$02
  8987. STA SongNum
  8988. LDA #$00
  8989. JSR Bankswitch
  8990. LDA SongNum
  8991. JSR FamiToneMusicPlay
  8992. .End:
  8993. RTS
  8994.  
  8995. PlaceRick:
  8996. LDA CurrentFloor
  8997. CMP #$02
  8998. BNE .End
  8999. LDA NametableCount
  9000. CMP #$00
  9001. BNE .End
  9002. LDA BossPlacedFlag
  9003. CMP #$01
  9004. BEQ .End
  9005. LDA #$01
  9006. JSR Bankswitch
  9007. JSR MurderEnemies
  9008. LDA ReadytoSpawn
  9009. CMP #$01
  9010. BNE .End
  9011. JSR ActuallyPlaceRick
  9012. LDA #$02
  9013. STA SongNum
  9014. LDA #$00
  9015. JSR Bankswitch
  9016. LDA SongNum
  9017. JSR FamiToneMusicPlay
  9018. .End:
  9019. RTS
  9020.  
  9021. PlaceAntoine:
  9022. LDA CurrentFloor
  9023. CMP #$00
  9024. BNE .End
  9025. LDA NametableCount
  9026. CMP #$00
  9027. BNE .End
  9028. LDA BossPlacedFlag
  9029. CMP #$01
  9030. BEQ .End
  9031. LDA #$01
  9032. JSR Bankswitch
  9033. JSR MurderEnemies
  9034. LDA ReadytoSpawn
  9035. CMP #$01
  9036. BNE .End
  9037. JSR ActuallyPlaceAntoine
  9038. LDA #$02
  9039. STA SongNum
  9040. LDA #$00
  9041. JSR Bankswitch
  9042. LDA SongNum
  9043. JSR FamiToneMusicPlay
  9044. .End:
  9045. RTS
  9046.  
  9047. PlaceDarkChum:
  9048. LDA CurrentFloor
  9049. CMP #$03
  9050. BNE .End
  9051. LDA NametableCount
  9052. CMP #$08
  9053. BNE .End
  9054. LDA BossPlacedFlag
  9055. CMP #$01
  9056. BEQ .End
  9057. LDA #$01
  9058. JSR Bankswitch
  9059. JSR MurderEnemies
  9060. LDA ReadytoSpawn
  9061. CMP #$01
  9062. BNE .End
  9063. JSR ActuallyPlaceDarkChum
  9064. LDA #$02
  9065. STA SongNum
  9066. LDA #$00
  9067. JSR Bankswitch
  9068. LDA SongNum
  9069. JSR FamiToneMusicPlay
  9070. .End:
  9071. RTS
  9072.  
  9073. .include "Music/famitone2.asm"
  9074.  
  9075. .bank 7
  9076. .org $E000
  9077.  
  9078. RESET:
  9079. SEI ; disable IRQs
  9080. CLD ; disable decimal mode
  9081. LDX #$40
  9082. STX $4017 ; disable APU frame IRQ
  9083. LDX #$FF
  9084. TXS ; Set up stack
  9085. INX ; now X = 0
  9086. STX $2000 ; disable NMI
  9087. STX $2001 ; disable rendering
  9088. STX $4010 ; disable DMC IRQs
  9089.  
  9090. JSR vblankwait
  9091.  
  9092. clrmem:
  9093. LDA #$00
  9094. STA $0000, x
  9095. STA $0100, x
  9096. STA $0200, x
  9097. STA $0400, x
  9098. STA $0500, x
  9099. STA $0700, x
  9100. LDA #$FE
  9101. STA $0300, x
  9102. STA $0600, x
  9103. INX
  9104. BNE clrmem
  9105.  
  9106. ;;;initializing stuff ;;;
  9107.  
  9108. lda #1
  9109. sta $4016
  9110. lda $4016
  9111. lda $4017
  9112. lda #0
  9113. sta $4016
  9114.  
  9115. LDA #%00011110
  9116. STA soft2001
  9117.  
  9118. LDX #$00
  9119. .Loop:
  9120. LDA #$FF
  9121. STA $0400,x
  9122. INX
  9123. CPX #$20
  9124. BNE .Loop
  9125.  
  9126. JSR RegionDetect
  9127.  
  9128. LDA #$00
  9129. JSR Bankswitch
  9130.  
  9131. LDA Region
  9132. LDX #low(PawnStars_music_data)
  9133. LDY #high(PawnStars_music_data)
  9134. JSR FamiToneInit
  9135.  
  9136. LDX #LOW(sounds)
  9137. LDY #HIGH(sounds)
  9138. JSR FamiToneSfxInit
  9139.  
  9140. ; JSR LoadFlashtoScores
  9141. ; JSR LoadFlashAchievements
  9142.  
  9143. LDA #$02
  9144. STA LevelTimer
  9145. LDA #$00
  9146. STA LevelTimer+1
  9147. STA LevelTimer+2
  9148. STA LevelTimer+3
  9149. STA Fan1Stage
  9150. LDA #$02
  9151. STA PlayerLife
  9152. STA PlayerLifeP2
  9153.  
  9154. LDA #$01
  9155. STA Fan2Stage
  9156.  
  9157. LDA #$02
  9158. STA Fan3Stage
  9159.  
  9160. LDA #$00
  9161. STA LifeAmt
  9162. STA EnemyLifeAmt
  9163.  
  9164. LDA #$08
  9165. STA NametableCount
  9166.  
  9167. ;;starting state;;
  9168. LDA #STATELOADTITLE
  9169. ; LDA #STATELOADINTERLUDE
  9170. STA gamestate
  9171.  
  9172. ;;;;;;;;;;;;;;;;;;;;;;;;;
  9173.  
  9174. LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
  9175. STA $2000
  9176.  
  9177. LDA #%00011110 ; enable sprites, enable background, no clipping on left side
  9178. STA soft2001
  9179.  
  9180. Forever:
  9181. JMP Forever ;jump back to Forever, infinite loop, waiting for NMI
  9182.  
  9183. NMI:
  9184. pha
  9185. txa
  9186. pha
  9187. tya
  9188. pha
  9189.  
  9190. ; lda LoadingMusic
  9191. ; beq .NoMusic
  9192. ; JMP GameEngineDone
  9193. ;.NoMusic:
  9194.  
  9195. LDA #$00
  9196. STA $2003 ; set the low byte (00) of the RAM address
  9197. LDA #$03
  9198. STA $4014 ; set the high byte (03) of the RAM address, start the transfer
  9199.  
  9200. JSR RunPaletteTimer
  9201. JSR UpdatePalette
  9202.  
  9203. LDA gamestate
  9204. ASL A
  9205. TAY
  9206.  
  9207. LDA NMIPointer,y
  9208. STA AddrLow
  9209. LDA NMIPointer+1,y
  9210. STA AddrHigh
  9211.  
  9212. JMP [AddrLow]
  9213. NMIDone:
  9214.  
  9215. JSR ResetController
  9216.  
  9217. ;;This is the PPU clean up section, so rendering the next frame starts properly.
  9218.  
  9219. LDA #$00
  9220. STA $2006 ; clean up PPU address registers
  9221. STA $2006
  9222.  
  9223. LDA #$00 ; start with no scroll for status bar
  9224. STA $2005
  9225. STA $2005
  9226.  
  9227. LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
  9228. STA $2000 ; start with nametable = 0 for status bar
  9229.  
  9230. LDA soft2001 ; enable sprites, enable background, no clipping on left side
  9231. STA $2001
  9232.  
  9233. LDA gamestate
  9234. CMP #STATEPLAYING
  9235. BCC SkipSprite0
  9236. CMP #STATEENDING
  9237. BEQ WaitNotSprite0
  9238. CMP #STATEINTERLUDE
  9239. BEQ WaitNotSprite0
  9240. CMP #STATELOADCREDITS
  9241. BCS SkipSprite0
  9242.  
  9243. WaitNotSprite0:
  9244. lda $2002
  9245. and #%01000000
  9246. bne WaitNotSprite0 ; wait until sprite 0 not hit
  9247.  
  9248. WaitSprite0:
  9249. lda $2002
  9250. and #%01000000
  9251. beq WaitSprite0 ; wait until sprite 0 is hit
  9252.  
  9253. ldx #$10
  9254. WaitScanline:
  9255. dex
  9256. bne WaitScanline
  9257.  
  9258. LDA Xscroll
  9259. STA $2005 ; write the horizontal scroll count register
  9260. LDA #$00 ; no vertical scrolling
  9261. STA $2005
  9262.  
  9263. LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
  9264. ora nametable
  9265. STA $2000 ; start with nametable = 0 for status bar
  9266.  
  9267. LDA soft2001 ; enable sprites, enable background, no clipping on left side
  9268. STA $2001
  9269.  
  9270. SkipSprite0:
  9271.  
  9272. LDA BossDead
  9273. CMP #$00
  9274. BNE GameEngine
  9275.  
  9276. JSR ReadController ;;get the current button data for player 1
  9277.  
  9278. GameEngine:
  9279. LDA gamestate
  9280. ASL A
  9281. TAY
  9282.  
  9283. LDA GameEnginePointer,y
  9284. STA AddrLow
  9285. LDA GameEnginePointer+1,y
  9286. STA AddrHigh
  9287.  
  9288. JMP [AddrLow]
  9289. GameEngineDone:
  9290.  
  9291. JSR CopySprites
  9292.  
  9293. LDA #$00
  9294. JSR Bankswitch
  9295. JSR FamiToneUpdate
  9296.  
  9297. pla
  9298. tay
  9299. pla
  9300. tax
  9301. pla
  9302.  
  9303. RTI ; return from interrupt
  9304.  
  9305. ;;;;;;;;;
  9306.  
  9307. GameEnginePointer:
  9308. .dw EngineLoadTitle, EngineTitle, EngineLoadPlaying, EnginePlaying, EngineHit, EngineLoadCredits, EngineCredits
  9309. .dw EngineLoadGameOver, EngineGameOver, EngineLoadEnding, EngineEnding, EngineLoadInterlude, EngineInterlude
  9310.  
  9311. NMIPointer:
  9312. .dw BlankNMI, TitleNMI, BlankNMI, PlayingNMI, HitNMI, BlankNMI, BlankNMI, BlankNMI, BlankNMI, BlankNMI, EndingNMI
  9313. .dw BlankNMI, InterludeNMI
  9314.  
  9315. BlankNMI:
  9316. JMP NMIDone
  9317.  
  9318. TitleNMI:
  9319. JMP NMIDone
  9320.  
  9321. PlayingNMI:
  9322. LDA PausedFlag
  9323. CMP #$01
  9324. BEQ .Paused
  9325. LDA LevelStarting
  9326. CMP #$01
  9327. BEQ .Skip
  9328. LDA BossDead
  9329. CMP #$03
  9330. BEQ .Finish
  9331. JSR FlashInvincibility
  9332. JSR UpdateBossPalette
  9333. JSR RunBuffer
  9334. JSR KillBossFan
  9335. JSR AnimateFans
  9336. JMP NMIDone
  9337. .Skip:
  9338. JSR AnimateFans
  9339. JSR DrawPlayerReadyText
  9340. JMP NMIDone
  9341. .Finish:
  9342. JSR RunBuffer
  9343. JSR UpdateLife
  9344. JSR AnimateFans
  9345. .Paused:
  9346. JMP NMIDone
  9347.  
  9348. HitNMI:
  9349. JSR UpdateLife
  9350. JSR DrawFloorTimer
  9351. JMP NMIDone
  9352.  
  9353. EndingNMI:
  9354. LDA CurrentPalette
  9355. CMP #$04
  9356. BCC .End
  9357. LDA #$02
  9358. JSR Bankswitch
  9359. JSR AnimateHorizontalWater
  9360. JSR AnimateVerticalWater
  9361. JSR UpdateText
  9362. JSR IncrementLetter
  9363. .End:
  9364. JMP NMIDone
  9365.  
  9366. InterludeNMI:
  9367. LDA CurrentPalette
  9368. CMP #$04
  9369. BCC .End
  9370. LDA #$02
  9371. JSR Bankswitch
  9372. JSR UpdateText2
  9373. JSR IncrementLetter2
  9374. .End:
  9375. JMP NMIDone
  9376.  
  9377. KillBossFan:
  9378. LDA CurrentFloor
  9379. CMP #$03
  9380. BNE .End
  9381. LDA BossPlacedFlag
  9382. CMP #$01
  9383. BNE .End
  9384. LDA BossFan
  9385. CMP #$01
  9386. BNE .2
  9387. JSR KillFan2
  9388. JSR KillFan3
  9389. RTS
  9390. .2:
  9391. LDA BossFan
  9392. CMP #$02
  9393. BNE .3
  9394. JSR KillFan1
  9395. JSR KillFan3
  9396. RTS
  9397. .3:
  9398. LDA BossFan
  9399. CMP #$03
  9400. BNE .End
  9401. JSR KillFan1
  9402. JSR KillFan2
  9403. .End:
  9404. RTS
  9405.  
  9406. KillFan1:
  9407. LDX #$00
  9408.  
  9409. LDA #$21
  9410. STA $2006
  9411. LDA #$42
  9412. STA $2006
  9413. .Loop:
  9414. LDA #$07
  9415. STA $2007
  9416. INX
  9417. CPX #$05
  9418. BNE .Loop
  9419. RTS
  9420.  
  9421. KillFan2:
  9422. LDX #$00
  9423.  
  9424. LDA #$21
  9425. STA $2006
  9426. LDA #$4D
  9427. STA $2006
  9428. .Loop:
  9429. LDA #$07
  9430. STA $2007
  9431. INX
  9432. CPX #$05
  9433. BNE .Loop
  9434. RTS
  9435.  
  9436. KillFan3:
  9437. LDX #$00
  9438.  
  9439. LDA #$21
  9440. STA $2006
  9441. LDA #$58
  9442. STA $2006
  9443. .Loop:
  9444. LDA #$07
  9445. STA $2007
  9446. INX
  9447. CPX #$05
  9448. BNE .Loop
  9449. RTS
  9450.  
  9451. AnimateFans:
  9452. LDA BossDead
  9453. CMP #$00
  9454. BNE .Skipto
  9455. LDA EnemyHitFlag
  9456. CMP #$01
  9457. BEQ .End
  9458. LDA FloorFlashFlag
  9459. CMP #$01
  9460. BEQ .End
  9461. LDA AwardPointsFlag
  9462. CMP #$01
  9463. BEQ .End
  9464. LDA AwardHiScoreFlag
  9465. CMP #$01
  9466. BEQ .End
  9467. LDA AddTimerFlag
  9468. CMP #$01
  9469. BEQ .End
  9470. .Skipto:
  9471. INC FanTimer
  9472. LDA FanTimer
  9473. CMP #$01
  9474. BEQ .1
  9475. CMP #$02
  9476. BEQ .2
  9477. CMP #$03
  9478. BEQ .3
  9479. CMP #$04
  9480. BEQ .4
  9481. CMP #$05
  9482. BEQ .5
  9483. CMP #$06
  9484. BEQ .6
  9485. CMP #$07
  9486. BEQ .Reset
  9487. .End:
  9488. RTS
  9489. .1:
  9490. JSR AnimateFan1
  9491. RTS
  9492. .2:
  9493. JSR AnimateFan2
  9494. RTS
  9495. .3:
  9496. JSR AnimateFan3
  9497. RTS
  9498. .4:
  9499. JSR AnimateFan4
  9500. RTS
  9501. .5:
  9502. JSR AnimateFan5
  9503. RTS
  9504. .6:
  9505. JSR AnimateFan6
  9506. RTS
  9507. .Reset:
  9508. LDA #$00
  9509. STA FanTimer
  9510. RTS
  9511.  
  9512. AnimateFan1:
  9513. LDA CurrentFloor
  9514. CMP #$03
  9515. BNE .Regular
  9516. LDA BossPlacedFlag
  9517. CMP #$01
  9518. BNE .Regular
  9519. LDA BossDead
  9520. CMP #$01
  9521. BEQ .Regular
  9522. LDA BossFan
  9523. CMP #$00
  9524. BEQ .Regular
  9525. CMP #$01
  9526. BEQ .Regular
  9527. RTS
  9528. .Regular:
  9529. LDA Fan1Stage
  9530. ASL A
  9531. TAY
  9532. LDA FanPointer,y
  9533. STA AddrLow
  9534. LDA FanPointer+1,y
  9535. STA AddrHigh
  9536. LDX #$00
  9537. LDY #$00
  9538.  
  9539. LDA #$21
  9540. STA $2006
  9541. LDA #$42
  9542. STA $2006
  9543.  
  9544. LDA [AddrLow],y
  9545. STA $2007
  9546. INY
  9547. LDA [AddrLow],y
  9548. STA $2007
  9549. INY
  9550. LDA [AddrLow],y
  9551. STA $2007
  9552. INY
  9553. LDA [AddrLow],y
  9554. STA $2007
  9555. INY
  9556. LDA [AddrLow],y
  9557. STA $2007
  9558. INC Fan1Stage
  9559. LDA Fan1Stage
  9560. CMP #$04
  9561. BNE .End
  9562. LDA #$00
  9563. STA Fan1Stage
  9564. .End:
  9565. RTS
  9566.  
  9567. AnimateFan4:
  9568. LDA Fan4Stage
  9569. ASL A
  9570. TAY
  9571. LDA FanPointer,y
  9572. STA AddrLow
  9573. LDA FanPointer+1,y
  9574. STA AddrHigh
  9575. LDX #$00
  9576. LDY #$00
  9577.  
  9578. LDA #$25
  9579. STA $2006
  9580. LDA #$42
  9581. STA $2006
  9582.  
  9583. LDA [AddrLow],y
  9584. STA $2007
  9585. INY
  9586. LDA [AddrLow],y
  9587. STA $2007
  9588. INY
  9589. LDA [AddrLow],y
  9590. STA $2007
  9591. INY
  9592. LDA [AddrLow],y
  9593. STA $2007
  9594. INY
  9595. LDA [AddrLow],y
  9596. STA $2007
  9597.  
  9598. INC Fan4Stage
  9599. LDA Fan4Stage
  9600. CMP #$04
  9601. BNE .End
  9602. LDA #$00
  9603. STA Fan4Stage
  9604. .End:
  9605. RTS
  9606.  
  9607. AnimateFan2:
  9608. LDA CurrentFloor
  9609. CMP #$03
  9610. BNE .Regular
  9611. LDA BossPlacedFlag
  9612. CMP #$01
  9613. BNE .Regular
  9614. LDA BossDead
  9615. CMP #$01
  9616. BEQ .Regular
  9617. LDA BossFan
  9618. CMP #$00
  9619. BEQ .Regular
  9620. CMP #$02
  9621. BEQ .Regular
  9622. RTS
  9623. .Regular:
  9624. LDA Fan2Stage
  9625. ASL A
  9626. TAY
  9627. LDA FanPointer,y
  9628. STA AddrLow
  9629. LDA FanPointer+1,y
  9630. STA AddrHigh
  9631. LDX #$00
  9632. LDY #$00
  9633.  
  9634. LDA #$21
  9635. STA $2006
  9636. LDA #$4D
  9637. STA $2006
  9638.  
  9639. LDA [AddrLow],y
  9640. STA $2007
  9641. INY
  9642. LDA [AddrLow],y
  9643. STA $2007
  9644. INY
  9645. LDA [AddrLow],y
  9646. STA $2007
  9647. INY
  9648. LDA [AddrLow],y
  9649. STA $2007
  9650. INY
  9651. LDA [AddrLow],y
  9652. STA $2007
  9653.  
  9654. INC Fan2Stage
  9655. LDA Fan2Stage
  9656. CMP #$04
  9657. BNE .End
  9658. LDA #$00
  9659. STA Fan2Stage
  9660. .End:
  9661. RTS
  9662.  
  9663. AnimateFan5:
  9664. LDA Fan5Stage
  9665. ASL A
  9666. TAY
  9667. LDA FanPointer,y
  9668. STA AddrLow
  9669. LDA FanPointer+1,y
  9670. STA AddrHigh
  9671. LDX #$00
  9672. LDY #$00
  9673.  
  9674. LDA #$25
  9675. STA $2006
  9676. LDA #$4D
  9677. STA $2006
  9678.  
  9679. LDA [AddrLow],y
  9680. STA $2007
  9681. INY
  9682. LDA [AddrLow],y
  9683. STA $2007
  9684. INY
  9685. LDA [AddrLow],y
  9686. STA $2007
  9687. INY
  9688. LDA [AddrLow],y
  9689. STA $2007
  9690. INY
  9691. LDA [AddrLow],y
  9692. STA $2007
  9693.  
  9694. INC Fan5Stage
  9695. LDA Fan5Stage
  9696. CMP #$04
  9697. BNE .End
  9698. LDA #$00
  9699. STA Fan5Stage
  9700. .End:
  9701. RTS
  9702.  
  9703. AnimateFan3:
  9704. LDA CurrentFloor
  9705. CMP #$03
  9706. BNE .Regular
  9707. LDA BossPlacedFlag
  9708. CMP #$01
  9709. BNE .Regular
  9710. LDA BossDead
  9711. CMP #$01
  9712. BEQ .Regular
  9713. LDA BossFan
  9714. CMP #$00
  9715. BEQ .Regular
  9716. CMP #$03
  9717. BEQ .Regular
  9718. RTS
  9719. .Regular:
  9720. LDA Fan3Stage
  9721. ASL A
  9722. TAY
  9723. LDA FanPointer,y
  9724. STA AddrLow
  9725. LDA FanPointer+1,y
  9726. STA AddrHigh
  9727. LDX #$00
  9728. LDY #$00
  9729.  
  9730. LDA #$21
  9731. STA $2006
  9732. LDA #$58
  9733. STA $2006
  9734.  
  9735. LDA [AddrLow],y
  9736. STA $2007
  9737. INY
  9738. LDA [AddrLow],y
  9739. STA $2007
  9740. INY
  9741. LDA [AddrLow],y
  9742. STA $2007
  9743. INY
  9744. LDA [AddrLow],y
  9745. STA $2007
  9746. INY
  9747. LDA [AddrLow],y
  9748. STA $2007
  9749.  
  9750. INC Fan3Stage
  9751. LDA Fan3Stage
  9752. CMP #$04
  9753. BNE .End
  9754. LDA #$00
  9755. STA Fan3Stage
  9756. .End:
  9757. RTS
  9758.  
  9759. AnimateFan6:
  9760. LDA FanPlaced
  9761. CMP #$00
  9762. BNE .End
  9763. LDA Fan6Stage
  9764. ASL A
  9765. TAY
  9766. LDA FanPointer,y
  9767. STA AddrLow
  9768. LDA FanPointer+1,y
  9769. STA AddrHigh
  9770. LDX #$00
  9771. LDY #$00
  9772.  
  9773. LDA #$25
  9774. STA $2006
  9775. LDA #$58
  9776. STA $2006
  9777.  
  9778. LDA [AddrLow],y
  9779. STA $2007
  9780. INY
  9781. LDA [AddrLow],y
  9782. STA $2007
  9783. INY
  9784. LDA [AddrLow],y
  9785. STA $2007
  9786. INY
  9787. LDA [AddrLow],y
  9788. STA $2007
  9789. INY
  9790. LDA [AddrLow],y
  9791. STA $2007
  9792.  
  9793. INC Fan6Stage
  9794. LDA Fan6Stage
  9795. CMP #$04
  9796. BNE .End
  9797. LDA #$00
  9798. STA Fan6Stage
  9799. .End:
  9800. RTS
  9801.  
  9802. FanPointer:
  9803. .dw Fan1, Fan2, Fan3, Fan2
  9804.  
  9805. Fan1:
  9806. .db $81,$82,$83,$84,$85
  9807.  
  9808. Fan2:
  9809. .db $07,$07,$86,$07,$07
  9810.  
  9811. Fan3:
  9812. .db $87,$88,$83,$89,$8A
  9813.  
  9814. UpdateLife:
  9815. LDA LifeAmt
  9816. CMP #$18
  9817. BCC .Cont
  9818. LDA #$18
  9819. STA LifeAmt
  9820. .Cont:
  9821. LDY #$00
  9822. LDA LifeAmt
  9823. ASL A
  9824. ASL A
  9825. ASL A
  9826. TAX
  9827. .Loop:
  9828. LDA $2002
  9829. LDA #$20
  9830. STA $2006
  9831. LDA #$88
  9832. STA $2006
  9833. LDA HealthAmt,x
  9834. STA $2007
  9835. LDA HealthAmt+1,x
  9836. STA $2007
  9837. LDA HealthAmt+2,x
  9838. STA $2007
  9839. LDA HealthAmt+3,x
  9840. STA $2007
  9841. LDA HealthAmt+4,x
  9842. STA $2007
  9843. LDA HealthAmt+5,x
  9844. STA $2007
  9845. RTS
  9846.  
  9847. UpdateEnemyLife:
  9848. LDY #$00
  9849. LDA EnemyLifeAmt
  9850. ASL A
  9851. ASL A
  9852. ASL A
  9853. TAX
  9854. .Loop:
  9855. LDA #$20
  9856. STA $0530
  9857. LDA #$C8
  9858. STA $0531
  9859. LDA HealthAmt,x
  9860. STA $0532
  9861. LDA HealthAmt+1,x
  9862. STA $0533
  9863. LDA HealthAmt+2,x
  9864. STA $0534
  9865. LDA HealthAmt+3,x
  9866. STA $0535
  9867. LDA HealthAmt+4,x
  9868. STA $0536
  9869. LDA HealthAmt+5,x
  9870. STA $0537
  9871. RTS
  9872.  
  9873. HealthAmt:
  9874. .db $DA,$DA,$DA,$DA,$DA,$DA,$00,$00
  9875. .db $DA,$DA,$DA,$DA,$DA,$DB,$00,$00
  9876. .db $DA,$DA,$DA,$DA,$DA,$DC,$00,$00
  9877. .db $DA,$DA,$DA,$DA,$DA,$DD,$00,$00
  9878.  
  9879. .db $DA,$DA,$DA,$DA,$DA,$00,$00,$00
  9880. .db $DA,$DA,$DA,$DA,$DB,$00,$00,$00
  9881. .db $DA,$DA,$DA,$DA,$DC,$00,$00,$00
  9882. .db $DA,$DA,$DA,$DA,$DD,$00,$00,$00
  9883.  
  9884. .db $DA,$DA,$DA,$DA,$00,$00,$00,$00
  9885. .db $DA,$DA,$DA,$DB,$00,$00,$00,$00
  9886. .db $DA,$DA,$DA,$DC,$00,$00,$00,$00
  9887. .db $DA,$DA,$DA,$DD,$00,$00,$00,$00
  9888.  
  9889. .db $DA,$DA,$DA,$00,$00,$00,$00,$00
  9890. .db $DA,$DA,$DB,$00,$00,$00,$00,$00
  9891. .db $DA,$DA,$DC,$00,$00,$00,$00,$00
  9892. .db $DA,$DA,$DD,$00,$00,$00,$00,$00
  9893.  
  9894. .db $DA,$DA,$00,$00,$00,$00,$00,$00
  9895. .db $DA,$DB,$00,$00,$00,$00,$00,$00
  9896. .db $DA,$DC,$00,$00,$00,$00,$00,$00
  9897. .db $DA,$DD,$00,$00,$00,$00,$00,$00
  9898.  
  9899. .db $DA,$00,$00,$00,$00,$00,$00,$00
  9900. .db $DB,$00,$00,$00,$00,$00,$00,$00
  9901. .db $DC,$00,$00,$00,$00,$00,$00,$00
  9902. .db $DD,$00,$00,$00,$00,$00,$00,$00
  9903.  
  9904. .db $00,$00,$00,$00,$00,$00,$00,$00
  9905.  
  9906. FlashFloor:
  9907. INC FloorSquareTimer
  9908. LDA FloorSquareTimer
  9909. CMP #$20
  9910. BEQ .Reset
  9911. LDA #$00
  9912. STA $0520
  9913. STA $0521
  9914. STA $0522
  9915. RTS
  9916. .Reset:
  9917. LDA CurrentFloor
  9918. ASL A
  9919. TAY
  9920. LDA FloorOffset
  9921. CMP #$00
  9922. BEQ .Setto1
  9923. LDA #$00
  9924. STA FloorOffset
  9925. JMP .Skip
  9926. .Setto1:
  9927. LDA #$01
  9928. STA FloorOffset
  9929. .Skip:
  9930. LDX #$00
  9931. LDA #$00
  9932. STA FloorSquareTimer
  9933. .Loop:
  9934. LDA #$20
  9935. STA $0520
  9936. TYA
  9937. CLC
  9938. ADC #$90
  9939. STA $0521
  9940. LDA #$01
  9941. CLC
  9942. ADC FloorOffset
  9943. STA $0522
  9944. LDA #$01
  9945. STA FloorFlashFlag
  9946. RTS
  9947.  
  9948. DrawFloorTimer:
  9949. LDA AddTimerFlag
  9950. CMP #$01
  9951. BNE .Erase
  9952. LDX #$00
  9953. LDY #$00
  9954.  
  9955. LDA #$20
  9956. STA $0510,x
  9957. INX
  9958. LDA #$BA
  9959. STA $0510,x
  9960. INX
  9961. .Loop:
  9962. LDA LevelTimer,y
  9963. STA $0510,x
  9964. INX
  9965. INY
  9966. CPY #$05
  9967. BNE .Loop
  9968. RTS
  9969. .Erase:
  9970. LDX #$00
  9971. .EraseLoop:
  9972. LDA #$00
  9973. STA $0510,x
  9974. INX
  9975. CPX #$06
  9976. BNE .EraseLoop
  9977. RTS
  9978.  
  9979. RunFloorTimer:
  9980. LDA BossDead
  9981. CMP #$00
  9982. BNE .End
  9983. INC TimerTimer
  9984. LDA TimerTimer
  9985. CMP #$04
  9986. BEQ .Run
  9987. .End:
  9988. RTS
  9989. .Run:
  9990. LDA #$01
  9991. STA AddTimerFlag
  9992. LDA #$00
  9993. STA TimerTimer
  9994. DEC LevelTimer+3
  9995. LDA LevelTimer+3
  9996. CMP #$FF
  9997. BEQ .ResetOnes
  9998. RTS
  9999. .ResetOnes:
  10000. LDA #$09
  10001. STA LevelTimer+3
  10002. DEC LevelTimer+2
  10003. LDA LevelTimer+2
  10004. CMP #$FF
  10005. BEQ .ResetTens
  10006. RTS
  10007. .ResetTens:
  10008. LDA #$09
  10009. STA LevelTimer+2
  10010. DEC LevelTimer+1
  10011. LDA LevelTimer+1
  10012. CMP #$FF
  10013. BEQ .ResetHundreds
  10014. RTS
  10015. .ResetHundreds:
  10016. LDA #$09
  10017. STA LevelTimer+1
  10018. DEC LevelTimer
  10019. LDA LevelTimer
  10020. CMP #$FF
  10021. BEQ .GameOver
  10022. RTS
  10023. .GameOver:
  10024. LDA #$00
  10025. STA LevelTimer
  10026. STA LevelTimer+1
  10027. STA LevelTimer+2
  10028. STA LevelTimer+3
  10029. LDA #$18
  10030. STA LifeAmt
  10031. LDA #$01
  10032. STA PlayerDeadFlag
  10033. RTS
  10034.  
  10035. EngineLoadTitle:
  10036. LDA #$00
  10037. sta $2000
  10038. sta $2001 ;;turn screen off
  10039.  
  10040. ;;bank setup;;
  10041.  
  10042. LDA #$01
  10043. JSR Bankswitch
  10044. LDA #low(GameTiles)
  10045. STA AddrLow
  10046. LDA #high(GameTiles)
  10047. STA AddrHigh
  10048.  
  10049. JSR CopyCHRData
  10050.  
  10051. ;;bank setup end;;
  10052.  
  10053. LDA #$00
  10054. STA SPRITES_ptr
  10055.  
  10056. JSR LoadSprites
  10057.  
  10058. LDA #$00
  10059. STA BG_ptr
  10060. STA ATTR_ptr
  10061. STA PAL_ptr
  10062. STA LevelStarting
  10063.  
  10064. LDA #$00
  10065. JSR Bankswitch
  10066.  
  10067. JSR LoadNametable
  10068. JSR LoadAttribute
  10069.  
  10070. LDA #$00
  10071. STA PaletteDone
  10072. STA CurrentPalette
  10073. STA PaletteTimer
  10074.  
  10075. JSR vblankwait
  10076.  
  10077. LDA #STATETITLE
  10078. STA gamestate
  10079.  
  10080. LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
  10081. STA $2000
  10082.  
  10083. LDA #%00011110 ; enable sprites, enable background, no clipping on left side
  10084. STA soft2001
  10085. JMP GameEngineDone
  10086.  
  10087. ;;;;;;;;;
  10088.  
  10089. EngineTitle:
  10090. LDA #$00
  10091. JSR Bankswitch
  10092. JSR PlaySoundEffect
  10093. LDA #$01
  10094. JSR Bankswitch
  10095. JSR TitleSelect
  10096. LDA #$02
  10097. JSR Bankswitch
  10098. JSR TitleStart
  10099. JMP GameEngineDone
  10100.  
  10101. ;;;;;;;;;;;;;;
  10102.  
  10103. EngineLoadPlaying:
  10104. LDA #$00
  10105. sta $2000
  10106. sta $2001 ;;turn screen off
  10107.  
  10108. LDA Game2p
  10109. CMP #$01
  10110. BNE .Connect
  10111. LDA CurrentPlayer
  10112. CMP #$01
  10113. BNE .2nd
  10114. LDA CurrentFloorP1
  10115. STA CurrentFloor
  10116. JMP .Connect
  10117. .2nd:
  10118. LDA CurrentFloorP2
  10119. STA CurrentFloor
  10120. .Connect:
  10121.  
  10122. LDA #$01
  10123. STA SPRITES_ptr
  10124.  
  10125. LDA #$00
  10126. JSR Bankswitch
  10127.  
  10128. LDA #$00
  10129. STA SongNum
  10130. LDA SongNum
  10131. JSR FamiToneMusicPlay
  10132.  
  10133. LDA #$01
  10134. JSR Bankswitch
  10135.  
  10136. JSR LoadSprites
  10137.  
  10138. LDA #$01
  10139. STA BG_ptr
  10140. STA ATTR_ptr
  10141. STA PAL_ptr
  10142.  
  10143. LDA #$00
  10144. JSR Bankswitch
  10145.  
  10146. JSR LoadNametable
  10147. JSR LoadAttribute
  10148.  
  10149. LDA Game2p
  10150. CMP #$01
  10151. BEQ .SkipTemp
  10152. LDA #$44
  10153. STA TempNumber
  10154. .SkipTemp:
  10155.  
  10156. JSR DrawPlayerFloorBkgd
  10157. JSR RunBuffer
  10158.  
  10159. LDA #$00
  10160. STA PaletteDone
  10161. STA CurrentPalette
  10162. STA PaletteTimer
  10163. STA nametable
  10164. STA JumpFlag
  10165. STA CurrentLetterRow
  10166.  
  10167. LDA #$01
  10168. STA LevelStarting
  10169. STA AwardPointsFlag
  10170. STA AwardHiScoreFlag
  10171. STA NoScroll
  10172.  
  10173. JSR UpdatePoints
  10174. JSR RunBuffer
  10175.  
  10176. LDA #$02
  10177. JSR Bankswitch
  10178.  
  10179. JSR UpdateHiScore
  10180. JSR RunBuffer
  10181.  
  10182. JSR ChumInitialLocation
  10183. JSR LoadPortraitSprites
  10184.  
  10185. LDA #$20
  10186. STA $2006
  10187. LDA #$D3
  10188. STA $2006
  10189.  
  10190. LDA CurrentPlayer
  10191. CMP #$02
  10192. BNE .Regular
  10193. LDA PlayerLifeP2
  10194. CLC
  10195. ADC #$D0
  10196. STA $2007
  10197. JMP .SkipLife
  10198. .Regular:
  10199. LDA PlayerLife
  10200. CLC
  10201. ADC #$D0
  10202. STA $2007
  10203. .SkipLife:
  10204.  
  10205. LDA #$20
  10206. STA $2006
  10207. LDA #$D8
  10208. STA $2006
  10209.  
  10210. LDA CurrentPlayer
  10211. CMP #$02
  10212. BNE .Regular2
  10213. LDA LoopP2
  10214. CLC
  10215. ADC #$D0
  10216. STA $2007
  10217. JMP .SkipLife2
  10218. .Regular2:
  10219. LDA LoopP1
  10220. CLC
  10221. ADC #$D0
  10222. STA $2007
  10223. .SkipLife2:
  10224.  
  10225. JSR UpdateOtherPoints
  10226.  
  10227. LDA #$00
  10228. STA Xscroll
  10229. STA PlaceFlag
  10230.  
  10231. JSR vblankwait
  10232.  
  10233. LDA #STATEPLAYING
  10234. STA gamestate
  10235.  
  10236. LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
  10237. STA $2000
  10238.  
  10239. LDA #%00011110 ; enable sprites, enable background, no clipping on left side
  10240. STA soft2001
  10241. JMP GameEngineDone
  10242.  
  10243. ;;;;;;;;;;;;;;;;
  10244.  
  10245. EnginePlaying:
  10246. LDA LifeAmt
  10247. CMP #$18
  10248. BCC .Playing
  10249. JSR RespawnPlayer
  10250. LDA BossDead
  10251. CMP #$03
  10252. BEQ .Playing
  10253. LDA #$02
  10254. JSR Bankswitch
  10255. JSR KillPlayer
  10256. JMP GameEngineDone
  10257. .Playing:
  10258. LDA LevelStarting
  10259. CMP #$01
  10260. BEQ .InitialSet
  10261. LDA PausedFlag
  10262. CMP #$01
  10263. BEQ .Paused
  10264. JMP .PlayingRoutines
  10265. .InitialSet:
  10266. JSR MoveChumIntoPlace
  10267. JMP GameEngineDone
  10268. .Paused:
  10269. LDA #$00
  10270. JSR Bankswitch
  10271. JSR PlaySoundEffect
  10272. JSR CheckForPause
  10273. JMP GameEngineDone
  10274. .PlayingRoutines:
  10275. LDA #$00
  10276. JSR Bankswitch
  10277. JSR PlaySoundEffect
  10278. LDA #$02
  10279. JSR Bankswitch
  10280. JSR ChumJump
  10281. JSR ChumDuck
  10282. JSR MoveLeft
  10283. JSR MoveRight
  10284. JSR ChumAttack
  10285. LDA #$02
  10286. JSR Bankswitch
  10287. JSR RunAttackDelay
  10288. JSR PlaceGrandma
  10289. JSR MoveGrandma
  10290. JSR PlaceKid
  10291. JSR MoveKid
  10292. JSR PlaceNerd
  10293. JSR MoveNerd
  10294. JSR PlaceBird
  10295. JSR MoveBird
  10296. LDA #$01
  10297. JSR Bankswitch
  10298. JSR PlaceBoss
  10299. LDA #$01
  10300. JSR Bankswitch
  10301. JSR RunBoss
  10302. LDA #$02
  10303. JSR Bankswitch
  10304. JSR ChumActuallyAttack
  10305. JSR RunAnimationTimers
  10306. JSR ChumCollision
  10307. JSR AttackCollision
  10308. JSR KillEnemies
  10309. JSR RunFloorTimer
  10310. JSR SpawnEnemies
  10311. JSR KillBoss
  10312. LDA #$02
  10313. JSR Bankswitch
  10314. JSR LevelFinished
  10315. LDA #$02
  10316. JSR Bankswitch
  10317. JSR FinishPoints
  10318. LDA #$02
  10319. JSR Bankswitch
  10320. JSR Jump
  10321. JSR ActuallyJump
  10322. JSR ActuallyJumpDown
  10323. JSR UpdateHiScore
  10324. LDA #$00
  10325. JSR Bankswitch
  10326. JSR CheckForPause
  10327. LDA #$01
  10328. JSR Bankswitch
  10329. JSR LookForFan
  10330. LDA #$02
  10331. JSR Bankswitch
  10332. JSR EraseFan
  10333. JSR DropFan
  10334.  
  10335. JSR UpdatePoints
  10336. JSR DrawFloorTimer
  10337. JSR FlashFloor
  10338. JSR UpdateEnemyLife
  10339. JMP GameEngineDone
  10340.  
  10341. ;;;;;;;;;;;;;;;;
  10342.  
  10343. EngineLoadCredits:
  10344. LDA #$00
  10345. sta $2000
  10346. sta $2001 ;;turn screen off
  10347.  
  10348. LDA #$03
  10349. STA BG_ptr
  10350.  
  10351. LDA #$02
  10352. STA ATTR_ptr
  10353.  
  10354. LDA #$00
  10355. JSR Bankswitch
  10356.  
  10357. JSR LoadNametable
  10358. JSR LoadAttribute
  10359.  
  10360. LDA #$00
  10361. STA PaletteDone
  10362. STA CurrentPalette
  10363. STA PaletteTimer
  10364.  
  10365. LDA #$FE
  10366. STA $0600
  10367. STA $0604
  10368. STA $0608
  10369. STA $060C
  10370.  
  10371. JSR vblankwait
  10372.  
  10373. LDA #STATECREDITS
  10374. STA gamestate
  10375.  
  10376. LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
  10377. STA $2000
  10378.  
  10379. LDA #%00011110 ; enable sprites, enable background, no clipping on left side
  10380. STA soft2001
  10381. JMP GameEngineDone
  10382.  
  10383. ;;;;;;;;;;;;;;;;
  10384.  
  10385. EngineCredits:
  10386. LDA ButtonsP1
  10387. AND #%00010000
  10388. BEQ .Skip
  10389. LDA StartHeld
  10390. CMP #$01
  10391. BEQ .Skip
  10392. LDA #$01
  10393. STA StartHeld
  10394. LDA #STATELOADTITLE
  10395. STA gamestate
  10396. .Skip:
  10397. JMP GameEngineDone
  10398.  
  10399. ;;;;;;;;;;;;;;;;
  10400.  
  10401. EngineLoadGameOver:
  10402. LDA #$00
  10403. sta $2000
  10404. sta $2001 ;;turn screen off
  10405.  
  10406. LDA #$02
  10407. JSR Bankswitch
  10408. JSR LoadBlankNametable
  10409. JSR LoadGameOverText
  10410. JSR LoadBlankAttribute
  10411.  
  10412. LDA #$00
  10413. STA PaletteDone
  10414. STA CurrentPalette
  10415. STA PaletteTimer
  10416.  
  10417. LDA #$00
  10418. JSR Bankswitch
  10419. JSR FamiToneMusicStop
  10420.  
  10421. JSR vblankwait
  10422.  
  10423. LDA #STATEGAMEOVER
  10424. STA gamestate
  10425.  
  10426. LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
  10427. STA $2000
  10428.  
  10429. LDA #%00011110 ; enable sprites, enable background, no clipping on left side
  10430. STA soft2001
  10431. JMP GameEngineDone
  10432.  
  10433. ;;;;;;;;;;;;;;;;
  10434.  
  10435. EngineLoadEnding:
  10436. LDA #$00
  10437. sta $2000
  10438. sta $2001 ;;turn screen off
  10439.  
  10440. LDA #$04
  10441. STA BG_ptr
  10442. LDA #$03
  10443. STA ATTR_ptr
  10444. LDA #$02
  10445. STA PAL_ptr
  10446. STA SPRITES_ptr
  10447.  
  10448. LDA #$00
  10449. JSR Bankswitch
  10450.  
  10451. JSR KillSprites
  10452.  
  10453. JSR LoadNametable
  10454. JSR LoadAttribute
  10455. JSR LoadSprites
  10456.  
  10457. LDA #$00
  10458. STA PaletteDone
  10459. STA CurrentPalette
  10460. STA PaletteTimer
  10461. STA CurrentLetterRow
  10462.  
  10463. JSR vblankwait
  10464.  
  10465. LDA #STATEENDING
  10466. STA gamestate
  10467.  
  10468. LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
  10469. STA $2000
  10470.  
  10471. LDA #%00011110 ; enable sprites, enable background, no clipping on left side
  10472. STA soft2001
  10473. JMP GameEngineDone
  10474.  
  10475. ;;;;;;;;;;;;;;;;
  10476.  
  10477. EngineEnding:
  10478. LDA #$02
  10479. JSR Bankswitch
  10480. JSR AnimateChum
  10481. JSR AnimatePinky
  10482. JSR CheckEndFadeOut
  10483. LDA EndPart
  10484. STA XscrollPart
  10485. LDA XscrollPart
  10486. SEC
  10487. SBC #$C0
  10488. STA XscrollPart
  10489. LDA Xscroll
  10490. SBC #$00
  10491. STA Xscroll
  10492. JSR ScrollLamps
  10493. JMP GameEngineDone
  10494.  
  10495. ;;;;;;;;;;;;;;;;
  10496.  
  10497. EngineLoadInterlude:
  10498. LDA #$00
  10499. sta $2000
  10500. sta $2001 ;;turn screen off
  10501.  
  10502. LDA #$06
  10503. STA BG_ptr
  10504. LDA #$03
  10505. STA ATTR_ptr
  10506. LDA #$02
  10507. STA PAL_ptr
  10508. STA SPRITES_ptr
  10509.  
  10510. LDA #$00
  10511. JSR Bankswitch
  10512.  
  10513. JSR KillSprites
  10514.  
  10515. JSR LoadNametable
  10516. JSR LoadAttribute
  10517. JSR LoadSprites
  10518.  
  10519. LDA #$00
  10520. STA PaletteDone
  10521. STA CurrentPalette
  10522. STA PaletteTimer
  10523.  
  10524. LDA #$89
  10525. STA $0600
  10526.  
  10527. JSR vblankwait
  10528.  
  10529. LDA #STATEINTERLUDE
  10530. STA gamestate
  10531.  
  10532. LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
  10533. STA $2000
  10534.  
  10535. LDA #%00011110 ; enable sprites, enable background, no clipping on left side
  10536. STA soft2001
  10537. JMP GameEngineDone
  10538.  
  10539. ;;;;;;;;;;;;;;;;
  10540.  
  10541. EngineInterlude:
  10542. LDA #$02
  10543. JSR Bankswitch
  10544. JSR AnimatePinky
  10545. JSR KillAllButPinky
  10546. LDA XscrollPart
  10547. SEC
  10548. SBC #$C0
  10549. STA XscrollPart
  10550. LDA Xscroll
  10551. SBC #$00
  10552. STA Xscroll
  10553. JMP GameEngineDone
  10554.  
  10555. ;;;;;;;;;;;;;;;;
  10556.  
  10557. EngineGameOver:
  10558. LDA Game2p
  10559. CMP #$01
  10560. BNE .End
  10561. LDA PlayerLifeP2
  10562. CMP #$FF
  10563. BEQ .End
  10564. INC FinalTimer
  10565. LDA FinalTimer
  10566. CMP #$80
  10567. BNE .Skip
  10568. LDA #$02
  10569. STA CurrentPlayer
  10570. LDA #STATELOADPLAYING
  10571. STA gamestate
  10572. JMP GameEngineDone
  10573. .End:
  10574. LDA ButtonsP1
  10575. AND #%00010000
  10576. BEQ .Skip
  10577. LDA StartHeld
  10578. CMP #$01
  10579. BEQ .Skip
  10580. LDA #$01
  10581. STA StartHeld
  10582. LDA #STATELOADTITLE
  10583. STA gamestate
  10584. .Skip:
  10585. JMP GameEngineDone
  10586.  
  10587. ;;;;;;;;;;;;;;;;
  10588.  
  10589. EngineHit:
  10590. LDA #$02
  10591. JSR Bankswitch
  10592. JSR PlaceGrandma
  10593. JSR MoveGrandma
  10594. JSR PlaceKid
  10595. JSR MoveKid
  10596. JSR PlaceNerd
  10597. JSR MoveNerd
  10598. JSR PlaceBird
  10599. JSR MoveBird
  10600. ; JSR RunBoss
  10601. JSR RunAnimationTimers
  10602. JSR RunFloorTimer
  10603. JSR CollisionStuff
  10604. JMP GameEngineDone
  10605.  
  10606. CollisionStuff:
  10607. LDA ChumHit
  10608. CMP #$02
  10609. BEQ .Left
  10610. JMP .Right
  10611. .Left:
  10612. ; LDA BossPlacedFlag
  10613. ; CMP #$01
  10614. ; BNE .NotBossLeft
  10615. ; JSR BossCollisionLeft
  10616. ; RTS
  10617. ;.NotBossLeft: ;Chum getting knocked left
  10618. LDA ChumTempX
  10619. CMP #$00
  10620. BEQ .Finish
  10621.  
  10622. LDA DirFacing
  10623. CMP #$01
  10624. BEQ .DirRight
  10625. LDA $0607
  10626. JMP .DirConnect
  10627. .DirRight:
  10628. LDA $060F
  10629. .DirConnect:
  10630. CMP #$79
  10631. BCC .Set
  10632.  
  10633. .RegularL:
  10634. LDX #$00
  10635. .MoveChumLeft:
  10636. LDA $0607,x
  10637. SEC
  10638. SBC #$03
  10639. STA $0607,x
  10640. TXA
  10641. CLC
  10642. ADC #$04
  10643. TAX
  10644. CPX #$3C
  10645. BNE .MoveChumLeft
  10646.  
  10647. LDA ChumTempX
  10648. SEC
  10649. SBC #$03
  10650. STA ChumTempX
  10651. RTS
  10652. .Set:
  10653. LDA BossPlacedFlag
  10654. CMP #$01
  10655. BEQ .RegularL
  10656.  
  10657. LDA Xscroll
  10658. SEC
  10659. SBC #$03
  10660. STA Xscroll
  10661.  
  10662. LDA ChumTempX
  10663. SEC
  10664. SBC #$03
  10665. STA ChumTempX
  10666.  
  10667. LDX #$00
  10668. .Loop:
  10669. LDA $0643,x
  10670. CMP #$FE
  10671. BEQ .Skip
  10672. CLC
  10673. ADC #$03
  10674. STA $0643,x
  10675. .Skip:
  10676. INX
  10677. INX
  10678. INX
  10679. INX
  10680. CPX #$80
  10681. BNE .Loop
  10682. RTS
  10683. .Finish:
  10684. LDA #$00
  10685. JSR Bankswitch
  10686. LDA #$1A
  10687. JSR FamiToneSamplePlay
  10688. LDA #STATEPLAYING
  10689. STA gamestate
  10690. RTS
  10691. .Right:
  10692. ; LDA BossPlacedFlag
  10693. ; CMP #$01
  10694. ; BNE .NotBossRight
  10695. ; JSR BossCollisionRight
  10696. ; RTS
  10697. ;.NotBossRight: ;Chum getting knocked left
  10698. LDA ChumTempX
  10699. CMP #$00
  10700. BEQ .Finish
  10701.  
  10702. LDA NametableCount
  10703. CMP #$08
  10704. BNE .Set2
  10705. .RegularR:
  10706. LDX #$00
  10707. .MoveChumRight:
  10708. LDA $0607,x
  10709. CLC
  10710. ADC #$03
  10711. STA $0607,x
  10712. TXA
  10713. CLC
  10714. ADC #$04
  10715. TAX
  10716. CPX #$3C
  10717. BNE .MoveChumRight
  10718.  
  10719. LDA ChumTempX
  10720. SEC
  10721. SBC #$03
  10722. STA ChumTempX
  10723. RTS
  10724. .Set2:
  10725. LDA BossPlacedFlag
  10726. CMP #$01
  10727. BEQ .RegularR
  10728.  
  10729. LDA Xscroll
  10730. CLC
  10731. ADC #$03
  10732. STA Xscroll
  10733.  
  10734. LDA ChumTempX
  10735. SEC
  10736. SBC #$03
  10737. STA ChumTempX
  10738.  
  10739. LDX #$00
  10740. .Loop2:
  10741. LDA $0643,x
  10742. CMP #$FE
  10743. BEQ .Skip2
  10744. SEC
  10745. SBC #$03
  10746. STA $0643,x
  10747. .Skip2:
  10748. INX
  10749. INX
  10750. INX
  10751. INX
  10752. CPX #$80
  10753. BNE .Loop2
  10754. RTS
  10755.  
  10756. RedrawBaddies:
  10757. LDX #$00
  10758. LDY #$00
  10759. .LoopStart:
  10760. LDA EnemyMoveDirection,y
  10761. CMP #$01
  10762. BEQ .RightLoop
  10763. .LeftLoop:
  10764. LDA $0643,x
  10765. STA $064B,x
  10766. STA $0653,x
  10767. STA $065B,x
  10768. CLC
  10769. ADC #$08
  10770. STA $0647,x
  10771. STA $064F,x
  10772. STA $0657,x
  10773. STA $065F,x
  10774. TXA
  10775. CLC
  10776. ADC #$20
  10777. TAX
  10778. INY
  10779. CPX #$A0
  10780. BNE .LoopStart
  10781. JSR FixFlip
  10782. RTS
  10783. .RightLoop:
  10784. LDA $0643,x
  10785. STA $064B,x
  10786. STA $0653,x
  10787. STA $065B,x
  10788. SEC
  10789. SBC #$08
  10790. STA $0647,x
  10791. STA $064F,x
  10792. STA $0657,x
  10793. STA $065F,x
  10794. TXA
  10795. CLC
  10796. ADC #$20
  10797. TAX
  10798. INY
  10799. CPX #$A0
  10800. BNE .LoopStart
  10801. JSR FixFlip
  10802. RTS
  10803.  
  10804. PlaceBoss:
  10805. JSR PlaceAntoine
  10806. JSR PlaceCorey
  10807. JSR PlaceRick
  10808. JSR PlaceDarkChum
  10809. RTS
  10810.  
  10811. FixFlip:
  10812. LDX #$00
  10813. LDY #$00
  10814. .LoopStart:
  10815. LDA EnemyMoveDirection,y
  10816. CMP #$01
  10817. BEQ .RightLoop
  10818. .LeftLoop:
  10819. LDA #$01
  10820. LDA $0642,x
  10821. STA $064A,x
  10822. STA $0652,x
  10823. STA $065A,x
  10824. STA $0646,x
  10825. STA $064E,x
  10826. STA $0656,x
  10827. STA $065E,x
  10828. TXA
  10829. CLC
  10830. ADC #$20
  10831. TAX
  10832. INY
  10833. CPX #$A0
  10834. BNE .LoopStart
  10835. RTS
  10836. .RightLoop:
  10837. LDA #%01000001
  10838. LDA $0642,x
  10839. STA $064A,x
  10840. STA $0652,x
  10841. STA $065A,x
  10842. STA $0646,x
  10843. STA $064E,x
  10844. STA $0656,x
  10845. STA $065E,x
  10846. TXA
  10847. CLC
  10848. ADC #$20
  10849. TAX
  10850. INY
  10851. CPX #$A0
  10852. BNE .LoopStart
  10853. RTS
  10854.  
  10855. SpawnEnemies:
  10856. LDA BossPlacedFlag
  10857. CMP #$01
  10858. BEQ .End
  10859.  
  10860. LDA CurrentFloor
  10861. TAY
  10862. LDA FloorStop,y
  10863. CMP NametableCount
  10864. BEQ .End
  10865.  
  10866. INC SpawnTimer
  10867. LDA SpawnTimer
  10868. CMP #$40
  10869. BEQ .Spawn
  10870. BCS .ResetTimer
  10871. .End:
  10872. RTS
  10873. .ResetTimer:
  10874. LDA #$00
  10875. STA SpawnTimer
  10876. RTS
  10877. .Spawn:
  10878. ; LDA SpawnPlace
  10879. ; CMP #$01
  10880. ; BEQ .End
  10881. LDA SpawnPlace
  10882. CMP #$32
  10883. BEQ .Reset
  10884.  
  10885. LDA CurrentFloor
  10886. ASL A
  10887. TAY
  10888. LDA SpawnFloors,y
  10889. STA AddrLow
  10890. LDA SpawnFloors+1,y
  10891. STA AddrHigh
  10892.  
  10893. LDY SpawnPlace
  10894. LDA #$00
  10895. STA SpawnTimer
  10896. LDA [AddrLow],y
  10897. STA PlaceFlag
  10898. INC SpawnPlace
  10899. RTS
  10900. .Reset:
  10901. LDA #$00
  10902. STA SpawnPlace
  10903. RTS
  10904.  
  10905. FloorStop:
  10906. .db $00,$08,$00,$08,$00
  10907.  
  10908. SpawnFloors:
  10909. .dw Floor1, Floor2, Floor3, Floor4
  10910.  
  10911. Floor1:
  10912. .db $01,$01,$01,$00,$00
  10913. .db $01,$01,$01,$00,$00
  10914. .db $01,$02,$01,$00,$00
  10915. .db $01,$02,$01,$00,$00
  10916. .db $01,$03,$02,$00,$00
  10917. .db $01,$01,$01,$00,$00
  10918. .db $02,$02,$02,$00,$00
  10919. .db $02,$02,$02,$00,$00
  10920. .db $02,$02,$04,$00,$00
  10921. .db $02,$02,$02,$00,$00
  10922.  
  10923. Floor2:
  10924. .db $03,$03,$03,$00,$00
  10925. .db $04,$04,$04,$00,$00
  10926. .db $05,$06,$05,$00,$00
  10927. .db $06,$05,$06,$00,$00
  10928. .db $01,$03,$02,$00,$00
  10929. .db $04,$02,$04,$04,$04
  10930. .db $03,$01,$02,$00,$00
  10931. .db $04,$01,$06,$00,$00
  10932. .db $01,$02,$04,$03,$03
  10933. .db $04,$06,$06,$06,$00
  10934.  
  10935. Floor3:
  10936. .db $06,$06,$05,$02,$00
  10937. .db $01,$06,$04,$01,$03
  10938. .db $05,$02,$05,$02,$04
  10939. .db $02,$02,$02,$01,$03
  10940. .db $04,$02,$05,$02,$06
  10941. .db $04,$04,$02,$02,$01
  10942. .db $03,$06,$02,$00,$00
  10943. .db $01,$07,$03,$03,$05
  10944. .db $05,$06,$06,$04,$04
  10945. .db $02,$02,$00,$00,$05
  10946.  
  10947. Floor4:
  10948. .db $04,$04,$06,$04,$00
  10949. .db $07,$07,$07,$04,$00
  10950. .db $02,$01,$07,$08,$00
  10951. .db $01,$02,$03,$04,$00
  10952. .db $07,$07,$08,$08,$00
  10953. .db $05,$06,$08,$08,$08
  10954. .db $08,$02,$01,$04,$03
  10955. .db $05,$07,$08,$06,$04
  10956. .db $08,$07,$08,$08,$07
  10957. .db $02,$04,$06,$01,$01
  10958.  
  10959. DrawPlayerFloorBkgd:
  10960. LDY #$00
  10961. .OuterLoop:
  10962. LDA $2002
  10963. TYA
  10964. CLC
  10965. ADC #$21
  10966. STA $2006
  10967. LDA #$E7
  10968. STA $2006
  10969.  
  10970. LDX #$00
  10971. .Loop:
  10972. LDA PlayerFloorText,x
  10973. STA $2007
  10974. INX
  10975. CPX #$12
  10976. BNE .Loop
  10977.  
  10978. TYA
  10979. CLC
  10980. ADC #$21
  10981. STA $2006
  10982. LDA #$F1
  10983. STA $2006
  10984. LDA #$D1
  10985. CLC
  10986. ADC CurrentFloor
  10987. STA $2007
  10988. TYA
  10989. CLC
  10990. ADC #$04
  10991. TAY
  10992. CPY #$08
  10993. BNE .OuterLoop
  10994.  
  10995. LDA #$21
  10996. STA $2006
  10997. LDA #$E8
  10998. STA $2006
  10999. LDA CurrentPlayer
  11000. CLC
  11001. ADC #$D0
  11002. STA $2007
  11003. LDA #$25
  11004. STA $2006
  11005. LDA #$E8
  11006. STA $2006
  11007. LDA CurrentPlayer
  11008. CLC
  11009. ADC #$D0
  11010. STA $2007
  11011. RTS
  11012.  
  11013. RunAnimationTimers:
  11014. INC EnemyAnimateTimer
  11015. INC EnemyAnimateTimer+1
  11016. INC EnemyAnimateTimer+2
  11017. INC EnemyAnimateTimer+3
  11018. INC EnemyAnimateTimer+4
  11019. INC EnemyAnimateTimer+5
  11020.  
  11021. LDA EnemyAnimateTimer
  11022. CMP #$11
  11023. BNE .End
  11024. LDA #$00
  11025. STA EnemyAnimateTimer
  11026. STA EnemyAnimateTimer+1
  11027. STA EnemyAnimateTimer+2
  11028. STA EnemyAnimateTimer+3
  11029. STA EnemyAnimateTimer+4
  11030. STA EnemyAnimateTimer+5
  11031. .End:
  11032. RTS
  11033.  
  11034. BossAttackCollision:
  11035. LDA CurrentFloor
  11036. CMP #$00
  11037. BNE .TryCorey
  11038. LDA #$00
  11039. JSR Bankswitch
  11040. JSR AntoineAttackCollision
  11041. LDA #$02
  11042. JSR Bankswitch
  11043. RTS
  11044. .TryCorey:
  11045. LDA CurrentFloor
  11046. CMP #$01
  11047. BNE .TryRick
  11048. LDA #$00
  11049. JSR Bankswitch
  11050. JSR CoreyAttackCollision
  11051. LDA #$02
  11052. JSR Bankswitch
  11053. RTS
  11054. .TryRick:
  11055. LDA CurrentFloor
  11056. CMP #$02
  11057. BNE .TryDarkChum
  11058. LDA #$00
  11059. JSR Bankswitch
  11060. JSR RickAttackCollision
  11061. LDA #$02
  11062. JSR Bankswitch
  11063. RTS
  11064. .TryDarkChum:
  11065. LDA #$00
  11066. JSR Bankswitch
  11067. JSR DarkChumAttackCollision
  11068. LDA #$02
  11069. JSR Bankswitch
  11070. RTS
  11071.  
  11072. AttackCollision:
  11073. LDA EnemyLifeAmt
  11074. CMP #$18
  11075. BEQ .Finish
  11076. LDA ChumAttacking
  11077. CMP #$01
  11078. BNE .Finish
  11079. LDA BossPlacedFlag
  11080. CMP #$01
  11081. BNE .Regular
  11082. JSR BossAttackCollision
  11083. RTS
  11084. .Regular:
  11085. LDX #$00
  11086. LDY #$00
  11087. .StartAgain:
  11088. LDA $0641,x
  11089. CMP EnemyTileList,y
  11090. BEQ .Cont
  11091. INY
  11092. CPY #$0B
  11093. BNE .StartAgain
  11094. JMP .End
  11095. .Cont:
  11096. LDA JumpFlag
  11097. CMP #$00
  11098. BEQ .NotJumping
  11099. JMP .JumpAttack
  11100. .NotJumping:
  11101. LDA DuckFlag
  11102. CMP #$00
  11103. BEQ .NotDuck
  11104. JMP .DuckAttack
  11105. .NotDuck:
  11106. ;regular attack
  11107. LDA $061D
  11108. CMP #$19
  11109. BNE .HitRight
  11110.  
  11111. LDA $0641,x
  11112. CMP #$D6
  11113. BEQ .End
  11114. CMP #$D9
  11115. BEQ .End
  11116. JMP .SkipBird
  11117. .Finish:
  11118. RTS
  11119. .SkipBird:
  11120. LDA $0604
  11121. CLC
  11122. ADC #$28
  11123. CMP $0644,x
  11124. BCC .HitRight
  11125.  
  11126. .HitLeft:
  11127. LDA $0647,x
  11128. CLC
  11129. ADC #$10
  11130. CMP $0607
  11131. BCC .HitRight
  11132.  
  11133. LDA $0607
  11134. CLC
  11135. ADC #$04
  11136. CMP $0647,x
  11137. BCC .HitRight
  11138.  
  11139. JSR AttackLanded
  11140. .End:
  11141. TXA
  11142. CLC
  11143. ADC #$20
  11144. TAX
  11145. CPX #$A0
  11146. BEQ .Finish
  11147. LDY #$00
  11148. JMP .StartAgain
  11149. .HitRight:
  11150. LDA $0607
  11151. CLC
  11152. ADC #$10
  11153. CMP $0647,x
  11154. BCC .End
  11155.  
  11156. LDA $0647,x
  11157. CLC
  11158. ADC #$04
  11159. CMP $0607
  11160. BCC .End
  11161.  
  11162. JSR AttackLanded
  11163. JMP .End
  11164. .JumpAttack:
  11165. LDA $061D
  11166. CMP #$34
  11167. BNE .End
  11168.  
  11169. LDA $0641,x
  11170. CMP #$D6
  11171. BEQ .JumpBird
  11172. CMP #$D9
  11173. BEQ .JumpBird
  11174. JMP .SkipJumpBird
  11175. .JumpBird:
  11176. LDA $0640,x
  11177. CLC
  11178. ADC #$04
  11179. CMP $0604
  11180. BCC .End
  11181. .SkipJumpBird:
  11182.  
  11183. LDA $0604
  11184. CLC
  11185. ADC #$28
  11186. CMP $0644,x
  11187. BCC .End
  11188.  
  11189. .JumpHitLeft:
  11190. LDA $0647,x
  11191. CLC
  11192. ADC #$0E
  11193. CMP $0607
  11194. BCC .JumpHitRight
  11195.  
  11196. LDA $0607
  11197. CLC
  11198. ADC #$04
  11199. CMP $0647,x
  11200. BCC .JumpHitRight
  11201.  
  11202. JSR AttackLanded
  11203. JMP .End
  11204. .JumpHitRight:
  11205. LDA $0607
  11206. CLC
  11207. ADC #$0E
  11208. CMP $0647,x
  11209. BCC .End
  11210.  
  11211. LDA $0647,x
  11212. CLC
  11213. ADC #$04
  11214. CMP $0607
  11215. BCS .Here
  11216. JMP .End
  11217. .Here:
  11218. JSR AttackLanded
  11219. .End2:
  11220. JMP .End
  11221. .DuckAttack:
  11222. LDA $061D
  11223. CMP #$34
  11224. BNE .End2
  11225.  
  11226. LDA $0641,x
  11227. CMP #$D6
  11228. BEQ .End2
  11229. CMP #$D9
  11230. BEQ .End2
  11231. .DuckHitLeft:
  11232. LDA $0647,x
  11233. CLC
  11234. ADC #$0E
  11235. CMP $0607
  11236. BCC .DuckHitRight
  11237.  
  11238. LDA $0607
  11239. CLC
  11240. ADC #$04
  11241. CMP $0647,x
  11242. BCC .DuckHitRight
  11243.  
  11244. JSR AttackLanded
  11245. JMP .End
  11246. .DuckHitRight:
  11247. LDA $0607
  11248. CLC
  11249. ADC #$0E
  11250. CMP $0647,x
  11251. BCC .End2
  11252.  
  11253. LDA $0647,x
  11254. CLC
  11255. ADC #$04
  11256. CMP $0607
  11257. BCC .End2
  11258. JSR AttackLanded
  11259. JMP .End
  11260.  
  11261. AttackLanded:
  11262. LDA BossPlacedFlag
  11263. CMP #$01
  11264. BEQ .EnemyAttack
  11265. CPX #$00
  11266. BNE .2
  11267. LDA EnemyDead
  11268. CMP #$01
  11269. BEQ .End
  11270. LDA #$01
  11271. STA SoundEffect
  11272. STA PlaySound
  11273. STA EnemyDead
  11274. LDA #$80
  11275. STA EnemyTop
  11276. JSR GivePoints
  11277. RTS
  11278. .2:
  11279. CPX #$20
  11280. BNE .3
  11281. LDA EnemyDead+1
  11282. CMP #$01
  11283. BEQ .End
  11284. LDA #$01
  11285. STA SoundEffect
  11286. STA PlaySound
  11287. STA EnemyDead+1
  11288. LDA #$80
  11289. STA EnemyTop
  11290. JSR GivePoints
  11291. RTS
  11292. .3:
  11293. CPX #$40
  11294. BNE .4
  11295. LDA EnemyDead+2
  11296. CMP #$01
  11297. BEQ .End
  11298. LDA #$01
  11299. STA SoundEffect
  11300. STA PlaySound
  11301. STA EnemyDead+2
  11302. LDA #$80
  11303. STA EnemyTop
  11304. JSR GivePoints
  11305. RTS
  11306. .4:
  11307. CPX #$60
  11308. BNE .End
  11309. LDA EnemyDead+3
  11310. CMP #$01
  11311. BEQ .End
  11312. LDA #$01
  11313. STA SoundEffect
  11314. STA PlaySound
  11315. STA EnemyDead+3
  11316. LDA #$80
  11317. STA EnemyTop
  11318. JSR GivePoints
  11319. .End:
  11320. RTS
  11321. .EnemyAttack:
  11322. LDA BossConnect
  11323. CMP #$01
  11324. BEQ .End
  11325. INC EnemyLifeAmt
  11326. LDA #$01
  11327. STA BossConnect
  11328. LDA #$01
  11329. STA SoundEffect
  11330. STA PlaySound
  11331. STA EnemyHitFlag
  11332. RTS
  11333.  
  11334. GivePoints:
  11335. LDA $0641,x
  11336. CMP #$30
  11337. BEQ .Grandma
  11338. CMP #$32
  11339. BEQ .Grandma
  11340. CMP #$57
  11341. BEQ .Kid
  11342. CMP #$59
  11343. BEQ .Kid
  11344. CMP #$C5
  11345. BEQ .Nerd
  11346. CMP #$C7
  11347. BEQ .Nerd
  11348. RTS
  11349. .Grandma:
  11350. LDA Game2p
  11351. CMP #$01
  11352. BNE .P1Gma
  11353. LDA CurrentPlayer
  11354. CMP #$01
  11355. BEQ .P1Gma
  11356. LDA P2Score+3
  11357. CLC
  11358. ADC #$02
  11359. STA P2Score+3
  11360. JSR FixMath2
  11361. JMP .ConnectGma
  11362. .P1Gma:
  11363. LDA P1Score+3
  11364. CLC
  11365. ADC #$02
  11366. STA P1Score+3
  11367. JSR FixMath
  11368. .ConnectGma:
  11369. LDA #$01
  11370. STA AwardPointsFlag
  11371. RTS
  11372. .Kid:
  11373. LDA Game2p
  11374. CMP #$01
  11375. BNE .P1Kid
  11376. LDA CurrentPlayer
  11377. CMP #$01
  11378. BEQ .P1Kid
  11379. LDA P2Score+3
  11380. CLC
  11381. ADC #$04
  11382. STA P2Score+3
  11383. JSR FixMath2
  11384. JMP .ConnectKid
  11385. .P1Kid:
  11386. LDA P1Score+3
  11387. CLC
  11388. ADC #$04
  11389. STA P1Score+3
  11390. JSR FixMath
  11391. .ConnectKid:
  11392. LDA #$01
  11393. STA AwardPointsFlag
  11394. RTS
  11395. .Nerd:
  11396. LDA Game2p
  11397. CMP #$01
  11398. BNE .P1Nerd
  11399. LDA CurrentPlayer
  11400. CMP #$01
  11401. BEQ .P1Nerd
  11402. LDA P2Score+3
  11403. CLC
  11404. ADC #$05
  11405. STA P2Score+3
  11406. JSR FixMath2
  11407. JMP .ConnectNerd
  11408. .P1Nerd:
  11409. LDA P1Score+3
  11410. CLC
  11411. ADC #$05
  11412. STA P1Score+3
  11413. JSR FixMath
  11414. .ConnectNerd:
  11415. LDA #$01
  11416. STA AwardPointsFlag
  11417. RTS
  11418.  
  11419. FixMath:
  11420. LDA P1Score+4
  11421. CMP #$0A
  11422. BCC .Hund
  11423. INC P1Score+3
  11424. LDA P1Score+4
  11425. SEC
  11426. SBC #$0A
  11427. STA P1Score+4
  11428. .Hund:
  11429. LDA P1Score+3
  11430. CMP #$0A
  11431. BCC .Thous
  11432. INC P1Score+2
  11433. LDA P1Score+3
  11434. SEC
  11435. SBC #$0A
  11436. STA P1Score+3
  11437. .Thous:
  11438. LDA P1Score+2
  11439. CMP #$0A
  11440. BCC .TenThous
  11441. INC P1Score+1
  11442. LDA P1Score+2
  11443. SEC
  11444. SBC #$0A
  11445. STA P1Score+2
  11446. .TenThous:
  11447. LDA P1Score+1
  11448. CMP #$0A
  11449. BCC .HunThous
  11450. INC P1Score
  11451. LDA P1Score+1
  11452. SEC
  11453. SBC #$0A
  11454. STA P1Score+1
  11455. .HunThous:
  11456. RTS
  11457.  
  11458. FixMath2:
  11459. LDA P2Score+4
  11460. CMP #$0A
  11461. BCC .Hund
  11462. INC P2Score+3
  11463. LDA P2Score+4
  11464. SEC
  11465. SBC #$0A
  11466. STA P2Score+4
  11467. .Hund:
  11468. LDA P2Score+3
  11469. CMP #$0A
  11470. BCC .Thous
  11471. INC P2Score+2
  11472. LDA P2Score+3
  11473. SEC
  11474. SBC #$0A
  11475. STA P2Score+3
  11476. .Thous:
  11477. LDA P2Score+2
  11478. CMP #$0A
  11479. BCC .TenThous
  11480. INC P2Score+1
  11481. LDA P2Score+2
  11482. SEC
  11483. SBC #$0A
  11484. STA P2Score+2
  11485. .TenThous:
  11486. LDA P2Score+1
  11487. CMP #$0A
  11488. BCC .HunThous
  11489. INC P2Score
  11490. LDA P2Score+1
  11491. SEC
  11492. SBC #$0A
  11493. STA P2Score+1
  11494. .HunThous:
  11495. RTS
  11496.  
  11497. RunBuffer:
  11498. LDA FanErased
  11499. CMP #$01
  11500. BNE .NotFan
  11501.  
  11502. LDA $0560
  11503. STA $2006
  11504. LDA $0561
  11505. STA $2006
  11506. LDA $0562
  11507. STA $2007
  11508. LDA $0562
  11509. STA $2007
  11510. LDA $0562
  11511. STA $2007
  11512. LDA $0562
  11513. STA $2007
  11514. LDA $0562
  11515. STA $2007
  11516.  
  11517. LDA #$02
  11518. STA FanErased
  11519. .NotFan:
  11520. LDA AwardPointsFlag
  11521. CMP #$01
  11522. BEQ .P1Points
  11523. LDA AwardHiScoreFlag
  11524. CMP #$01
  11525. BNE .P1Points
  11526. ;;Hi Score
  11527. LDX #$00
  11528. LDY #$00
  11529.  
  11530. LDA #$20
  11531. STA $2006
  11532. LDA #$4F
  11533. STA $2006
  11534. .HiLoop:
  11535. LDA $0550,x
  11536. CLC
  11537. ADC #$D0
  11538. STA $2007
  11539. INX
  11540. INY
  11541. CPY #$06
  11542. BNE .HiLoop
  11543. LDA #$00
  11544. STA AwardHiScoreFlag
  11545.  
  11546. .P1Points:
  11547. LDA AwardPointsFlag
  11548. CMP #$01
  11549. BNE .Timer
  11550.  
  11551. LDA Game2p
  11552. CMP #$01
  11553. BNE .Not2p
  11554. LDA CurrentPlayer
  11555. CMP #$01
  11556. BNE .Second
  11557. LDA #$44
  11558. STA TempNumber
  11559. JMP .Not2p
  11560. .Second:
  11561. LDA #$58
  11562. STA TempNumber
  11563. .Not2p:
  11564. ;;Points
  11565. LDX #$00
  11566. LDY #$00
  11567.  
  11568. LDA #$20
  11569. STA $2006
  11570. INX
  11571. LDA TempNumber
  11572. STA $2006
  11573. INX
  11574. .Loop:
  11575. LDA $0500,x
  11576. CLC
  11577. ADC #$D0
  11578. STA $2007
  11579. INX
  11580. INY
  11581. CPY #$06
  11582. BNE .Loop
  11583. LDA #$00
  11584. STA AwardPointsFlag
  11585. .Timer:
  11586. LDA AddTimerFlag
  11587. CMP #$01
  11588. BNE .FloorFlash
  11589.  
  11590. LDX #$00
  11591. LDY #$00
  11592.  
  11593. LDA #$20
  11594. STA $2006
  11595. INX
  11596. LDA #$BA
  11597. STA $2006
  11598. INX
  11599. .Loop2:
  11600. LDA $0510,x
  11601. CLC
  11602. ADC #$D0
  11603. STA $2007
  11604. INX
  11605. INY
  11606. CPY #$04
  11607. BNE .Loop2
  11608. LDA #$00
  11609. STA AddTimerFlag
  11610. .FloorFlash:
  11611. LDA FloorFlashFlag
  11612. CMP #$01
  11613. BNE .EnemyLife
  11614. LDA $0520
  11615. STA $2006
  11616. LDA $0521
  11617. STA $2006
  11618. LDA $0522
  11619. STA $2007
  11620. LDA #$00
  11621. STA FloorFlashFlag
  11622. .EnemyLife:
  11623. LDA EnemyHitFlag
  11624. CMP #$01
  11625. BNE .End
  11626. LDA $0530
  11627. STA $2006
  11628. LDA $0531
  11629. STA $2006
  11630. LDX #$00
  11631. .EnemyLoop:
  11632. LDA $0532,x
  11633. STA $2007
  11634. INX
  11635. CPX #$07
  11636. BNE .EnemyLoop
  11637. LDA #$00
  11638. STA EnemyHitFlag
  11639. .End:
  11640. RTS
  11641.  
  11642. UpdatePoints:
  11643. LDA AwardPointsFlag
  11644. CMP #$01
  11645. BNE .Erase
  11646. LDX #$00
  11647. LDY #$00
  11648.  
  11649. ;;NEW STUFF
  11650. LDA Game2p
  11651. CMP #$01
  11652. BNE .Skip2
  11653. LDA CurrentPlayer
  11654. CMP #$01
  11655. BEQ .Skip2
  11656. LDA #$20
  11657. STA $0500,y
  11658. INY
  11659. LDA #$58
  11660. STA $0500,y
  11661. INY
  11662. JMP .Loop
  11663. .Skip2:
  11664. LDA #$20
  11665. STA $0500,y
  11666. INY
  11667. LDA #$44
  11668. STA $0500,y
  11669. INY
  11670. .Loop:
  11671. LDA Game2p
  11672. CMP #$01
  11673. BNE .Skip
  11674. LDA CurrentPlayer
  11675. CMP #$01
  11676. BEQ .Skip
  11677. LDA P2Score,x
  11678. JMP .Connect
  11679. .Skip:
  11680. LDA P1Score,x
  11681. .Connect:
  11682. ;;NEW STUFF
  11683.  
  11684. STA $0500,y
  11685. INY
  11686. INX
  11687. CPX #$06
  11688. BNE .Loop
  11689. .End:
  11690. RTS
  11691. .Erase:
  11692. LDX #$00
  11693. .EraseLoop:
  11694. LDA #$00
  11695. STA $0500,x
  11696. INX
  11697. CPX #$09
  11698. BNE .EraseLoop
  11699. RTS
  11700.  
  11701. EnemyTileList:
  11702. .db $30,$32,$57,$59,$67,$69,$C5,$C7
  11703. .db $C2,$D6,$D9
  11704.  
  11705. CheckForFanHit:
  11706. LDA FlashBossHit
  11707. CMP #$01
  11708. BNE .End
  11709. INC FlashBossHitTmr
  11710. LDA FlashBossHitTmr
  11711. CMP #$08
  11712. BEQ .1
  11713. CMP #$10
  11714. BEQ .2
  11715. CMP #$18
  11716. BEQ .1
  11717. CMP #$20
  11718. BEQ .2
  11719. CMP #$28
  11720. BEQ .1
  11721. CMP #$30
  11722. BEQ .2
  11723. CMP #$38
  11724. BEQ .1
  11725. CMP #$40
  11726. BEQ .2
  11727. CMP #$48
  11728. BEQ .Reset
  11729. RTS
  11730. .1:
  11731. LDA #$3F
  11732. STA $2006
  11733. LDA #$1F
  11734. STA $2006
  11735. LDA #$10
  11736. STA $2007
  11737. RTS
  11738. .2:
  11739. LDA #$3F
  11740. STA $2006
  11741. LDA #$1F
  11742. STA $2006
  11743. LDA #$03
  11744. STA $2007
  11745. RTS
  11746. .Reset:
  11747. LDA #$00
  11748. STA FlashBossHit
  11749. STA FlashBossHitTmr
  11750. .End:
  11751. RTS
  11752.  
  11753. UpdateBossPalette:
  11754. LDA CurrentFloor
  11755. CMP #$03
  11756. BCS .3
  11757. LDA BossPlacedFlag
  11758. CMP #$01
  11759. BNE .End
  11760. LDA BossPalUpdate
  11761. CMP #$01
  11762. BEQ .End
  11763. LDA #$3F
  11764. STA $2006
  11765. LDA #$19
  11766. STA $2006
  11767. LDA #$0F
  11768. STA $2007
  11769. LDA #$37
  11770. STA $2007
  11771. LDA #$17
  11772. STA $2007
  11773. LDA #$01
  11774. STA BossPalUpdate
  11775. .End:
  11776. RTS
  11777. .3:
  11778. LDA BossPlacedFlag
  11779. CMP #$01
  11780. BNE .End
  11781. JSR CheckForFanHit
  11782. LDA BossPalUpdate
  11783. CMP #$01
  11784. BEQ .End
  11785. LDA #$3F
  11786. STA $2006
  11787. LDA #$1D
  11788. STA $2006
  11789. LDA #$0F
  11790. STA $2007
  11791. LDA #$13
  11792. STA $2007
  11793. LDA #$03
  11794. STA $2007
  11795. LDA #$01
  11796. STA BossPalUpdate
  11797. RTS
  11798.  
  11799. FlashInvincibility:
  11800. LDA gamestate
  11801. CMP #STATEHIT
  11802. BEQ .End
  11803. LDA ChumHit
  11804. CMP #$00
  11805. BEQ .End
  11806. INC InvincTimer
  11807. LDA InvincTimer
  11808. CMP #$04
  11809. BEQ .1
  11810. CMP #$08
  11811. BEQ .2
  11812. CMP #$0C
  11813. BEQ .1
  11814. CMP #$10
  11815. BEQ .2
  11816. CMP #$14
  11817. BEQ .1
  11818. CMP #$18
  11819. BEQ .2
  11820. CMP #$1C
  11821. BEQ .1
  11822. CMP #$20
  11823. BEQ .2
  11824. CMP #$24
  11825. BEQ .1
  11826. CMP #$28
  11827. BEQ .2
  11828. CMP #$2C
  11829. BEQ .1
  11830. CMP #$30
  11831. BEQ .2
  11832. CMP #$31
  11833. BNE .End
  11834. LDA #$00
  11835. STA ChumHit
  11836. STA InvincTimer
  11837. .End:
  11838. RTS
  11839. .1:
  11840. LDA #$3F
  11841. STA $2006
  11842. LDA #$13
  11843. STA $2006
  11844. LDA #$30
  11845. STA $2007
  11846. RTS
  11847. .2:
  11848. LDA #$3F
  11849. STA $2006
  11850. LDA #$13
  11851. STA $2006
  11852. LDA #$17
  11853. STA $2007
  11854. RTS
  11855.  
  11856. DrawPlayerReadyText:
  11857. LDA IntroPhase
  11858. CMP #$02
  11859. BNE .End
  11860. LDA IntroTimer
  11861. CMP #$00
  11862. BNE .TryErase
  11863. LDY #$00
  11864. LDA $2002
  11865. .OuterLoop:
  11866. TYA
  11867. CLC
  11868. ADC #$22
  11869. STA $2006
  11870. LDA #$0C
  11871. STA $2006
  11872.  
  11873. LDX #$00
  11874. .Loop:
  11875. LDA PlayerReadyText,x
  11876. STA $2007
  11877. INX
  11878. CPX #$07
  11879. BNE .Loop
  11880.  
  11881. TYA
  11882. CLC
  11883. ADC #$04
  11884. TAY
  11885. CPY #$08
  11886. BNE .OuterLoop
  11887. .End:
  11888. RTS
  11889. .TryErase:
  11890. LDA IntroTimer
  11891. CMP #$3F
  11892. BNE .End
  11893. LDY #$00
  11894. .OuterLoop2
  11895. TYA
  11896. CLC
  11897. ADC #$21
  11898. STA $2006
  11899. LDA #$E7
  11900. STA $2006
  11901.  
  11902. LDX #$00
  11903. .EraseLoop:
  11904. LDA FloorEraseText,x
  11905. STA $2007
  11906. INX
  11907. CPX #$12
  11908. BNE .EraseLoop
  11909.  
  11910. TYA
  11911. CLC
  11912. ADC #$22
  11913. STA $2006
  11914. LDA #$0C
  11915. STA $2006
  11916.  
  11917. LDX #$00
  11918. .EraseLoop2:
  11919. LDA ReadyEraseText,x
  11920. STA $2007
  11921. INX
  11922. CPX #$07
  11923. BNE .EraseLoop2
  11924. TYA
  11925. CLC
  11926. ADC #$04
  11927. TAY
  11928. CPY #$08
  11929. BNE .OuterLoop2
  11930. RTS
  11931.  
  11932. PlayerFloorText:
  11933. .db $00,$D1,$FC,$EF,$EB,$E0,$F8,$E4,$F1,$00,$D1,$FC,$E5,$EB,$EE,$EE,$F1,$00
  11934.  
  11935. PlayerReadyText:
  11936. .db $00,$F1,$E4,$E0,$E3,$F8,$00
  11937.  
  11938. FloorEraseText:
  11939. .db $5E,$60,$33,$01,$01,$17,$17,$17,$17,$17,$17,$17,$17,$01,$01,$32,$74,$66
  11940.  
  11941. ReadyEraseText:
  11942. .db $18,$19,$1A,$1B,$1C,$1D,$1E
  11943.  
  11944. MoveChumIntoPlace:
  11945. LDA IntroPhase
  11946. CMP #$00
  11947. BEQ .Inc1
  11948. CMP #$01
  11949. BEQ .Move
  11950. CMP #$02
  11951. BEQ .Inc2
  11952. RTS
  11953. .Inc1:
  11954. INC IntroTimer
  11955. LDA IntroTimer
  11956. CMP #$C0
  11957. BNE .End
  11958. LDA #$00
  11959. STA IntroTimer
  11960. LDA #$01
  11961. STA IntroPhase
  11962. RTS
  11963. .Inc2:
  11964. LDA #$02
  11965. JSR Bankswitch
  11966. JSR StandStill
  11967. INC IntroTimer
  11968. LDA IntroTimer
  11969. CMP #$40
  11970. BNE .End
  11971. LDA #$00
  11972. STA LevelStarting
  11973. STA IntroPhase
  11974. STA IntroTimer
  11975. LDA #$01
  11976. STA SongNum
  11977. LDA #$00
  11978. JSR Bankswitch
  11979. LDA SongNum
  11980. JSR FamiToneMusicPlay
  11981. RTS
  11982. .Move:
  11983. JSR MoveChumInitDir
  11984. LDA #$02
  11985. JSR Bankswitch
  11986. JSR AnimateChum
  11987. .End:
  11988. RTS
  11989.  
  11990. MoveChumInitDir:
  11991. LDA CurrentFloor
  11992. CMP #$00
  11993. BEQ .Right
  11994. CMP #$02
  11995. BEQ .Right
  11996. ;Left
  11997. LDA $060F
  11998. CMP #$78
  11999. BEQ .IncPhase
  12000. LDX #$00
  12001. LDY #$00
  12002. .LoopL:
  12003. LDA $0607,x
  12004. CLC
  12005. ADC #$01
  12006. STA $0607,x
  12007. INX
  12008. INX
  12009. INX
  12010. INX
  12011. CPX #$3C
  12012. BNE .LoopL
  12013. RTS
  12014. .IncPhase:
  12015. LDA #$02
  12016. STA IntroPhase
  12017. RTS
  12018. .Right:
  12019. LDA $0607
  12020. CMP #$78
  12021. BEQ .IncPhase
  12022. LDX #$00
  12023. LDY #$00
  12024. .Loop:
  12025. LDA $0607,x
  12026. SEC
  12027. SBC #$01
  12028. STA $0607,x
  12029. INX
  12030. INX
  12031. INX
  12032. INX
  12033. CPX #$3C
  12034. BNE .Loop
  12035. RTS
  12036.  
  12037. KillBird:
  12038. ; TXA
  12039. ; STA XTemp
  12040. ; AND #%00011111
  12041. ; TAX
  12042. ; LDA $0643,x
  12043. ; CMP #$FC
  12044. ; BCC .End
  12045. LDA #$FE
  12046. STA $0640,x
  12047. STA $0643,x
  12048. STA $0644,x
  12049. STA $0647,x
  12050. STA $0648,x
  12051. STA $064B,x
  12052. STA $064C,x
  12053. STA $064F,x
  12054. STA $0650,x
  12055. STA $0653,x
  12056. ; LDX XTemp
  12057. .End:
  12058. RTS
  12059.  
  12060. CopySprites: ;;display robot sprite (this seems to work fine)
  12061. LDX #$00
  12062. LDY #$00
  12063. .Sprite0Loop:
  12064. LDA $0600,x
  12065. STA $0300,x
  12066. LDA $0601,x
  12067. STA $0301,x
  12068. LDA $0602,x
  12069. STA $0302,x
  12070. LDA $0603,x
  12071. STA $0303,x
  12072. .PlayerLoop:
  12073. LDA gamestate
  12074. CMP #STATELOADENDING
  12075. BCS RenderForward
  12076.  
  12077. LDA ShuffledVar
  12078. CMP #$01
  12079. BEQ RenderForward
  12080. JMP RenderReverse
  12081. RenderForward:
  12082. LDX #$04 ;;display blocks (there are 6)
  12083. LDY #$04
  12084. .Loop:
  12085. LDA $0600,x
  12086. STA $0300,y
  12087. INY
  12088. LDA $0601,x
  12089. STA $0300,y
  12090. INY
  12091. LDA $0602,x
  12092. STA $0300,y
  12093. INY
  12094. LDA $0603,x
  12095. STA $0300,y
  12096. INY
  12097. LDA $0604,x
  12098. STA $0300,y
  12099. INY
  12100. LDA $0605,x
  12101. STA $0300,y
  12102. INY
  12103. LDA $0606,x
  12104. STA $0300,y
  12105. INY
  12106. LDA $0607,x
  12107. STA $0300,y
  12108. INY
  12109. LDA $0608,x
  12110. STA $0300,y
  12111. INY
  12112. LDA $0609,x
  12113. STA $0300,y
  12114. INY
  12115. LDA $060A,x
  12116. STA $0300,y
  12117. INY
  12118. LDA $060B,x
  12119. STA $0300,y
  12120. INY
  12121. LDA $060C,x
  12122. STA $0300,y
  12123. INY
  12124. LDA $060D,x
  12125. STA $0300,y
  12126. INY
  12127. LDA $060E,x
  12128. STA $0300,y
  12129. INY
  12130. LDA $060F,x
  12131. STA $0300,y
  12132. INY ;increment 4x per block.
  12133. TXA
  12134. CLC
  12135. ADC #$10
  12136. TAX
  12137. CPX #$F4 ;4x6 = 24
  12138. BNE .Loop
  12139. LDX #$00
  12140. .Loop2:
  12141. LDA $06F0,x
  12142. STA $03F0,x
  12143. INX
  12144. CPX #$10
  12145. BNE .Loop2
  12146. LDA #$00
  12147. STA ShuffledVar
  12148. RTS
  12149. RenderReverse:
  12150. LDX #$04 ;;display blocks (there are 6)
  12151. LDY #$E4
  12152. JMP .Skip
  12153. .Loop:
  12154. TYA
  12155. SEC
  12156. SBC #$20
  12157. TAY
  12158. .Skip:
  12159. LDA $0600,x
  12160. STA $0300,y
  12161. INY
  12162. LDA $0601,x
  12163. STA $0300,y
  12164. INY
  12165. LDA $0602,x
  12166. STA $0300,y
  12167. INY
  12168. LDA $0603,x
  12169. STA $0300,y
  12170. INY
  12171. LDA $0604,x
  12172. STA $0300,y
  12173. INY
  12174. LDA $0605,x
  12175. STA $0300,y
  12176. INY
  12177. LDA $0606,x
  12178. STA $0300,y
  12179. INY
  12180. LDA $0607,x
  12181. STA $0300,y
  12182. INY
  12183. LDA $0608,x
  12184. STA $0300,y
  12185. INY
  12186. LDA $0609,x
  12187. STA $0300,y
  12188. INY
  12189. LDA $060A,x
  12190. STA $0300,y
  12191. INY
  12192. LDA $060B,x
  12193. STA $0300,y
  12194. INY
  12195. LDA $060C,x
  12196. STA $0300,y
  12197. INY
  12198. LDA $060D,x
  12199. STA $0300,y
  12200. INY
  12201. LDA $060E,x
  12202. STA $0300,y
  12203. INY
  12204. LDA $060F,x
  12205. STA $0300,y
  12206. INY ;increment 4x per block.
  12207. TXA
  12208. CLC
  12209. ADC #$10
  12210. TAX
  12211. CPX #$F4 ;4x6 = 24
  12212. BNE .Loop
  12213. LDA #$01
  12214. STA ShuffledVar
  12215. RTS
  12216.  
  12217. KillSprites:
  12218. LDX #$00
  12219. .Loop:
  12220. LDA #$FE
  12221. STA $0600,x
  12222. STA $0603,x
  12223. TXA
  12224. CLC
  12225. ADC #$04
  12226. TAX
  12227. CPX #$FC
  12228. BNE .Loop
  12229. RTS
  12230.  
  12231. vblankwait: ; First wait for vblank to make sure PPU is ready
  12232. BIT $2002
  12233. BPL vblankwait
  12234. RTS
  12235.  
  12236. ResetController:
  12237. LDA LevelStarting
  12238. CMP #$01
  12239. BEQ .End
  12240. JSR ResetAttack
  12241. JSR ResetJump
  12242. LDA ButtonsP1
  12243. AND #%01000000
  12244. CMP #$00
  12245. BNE .SkipA
  12246. LDA #$00
  12247. STA BHeld
  12248. .SkipA:
  12249. LDA ButtonsP1
  12250. CMP #%00000000
  12251. BNE .End
  12252. LDA #$00
  12253. STA SelectHeld
  12254. STA StartHeld
  12255. STA UpHeld
  12256. STA DownHeld
  12257. STA LeftHeld
  12258. STA RightHeld
  12259. LDA ChumAttacking
  12260. CMP #$01
  12261. BEQ .End
  12262. LDA BossDead
  12263. CMP #$02
  12264. BEQ .End
  12265. LDA PausedFlag
  12266. CMP #$01
  12267. BEQ .End
  12268. LDA #$02
  12269. JSR Bankswitch
  12270. JSR StandStill
  12271. .End:
  12272. RTS
  12273.  
  12274. LoadPalettes:
  12275. LDA PaletteDone
  12276. CMP #$01
  12277. BEQ .End
  12278. LDA $2002 ; read PPU status to reset the high/low latch
  12279. LDA #$3F
  12280. STA $2006 ; write the high byte of $3F00 address
  12281. LDA #$00
  12282. STA $2006 ; write the low byte of $3F00 address
  12283.  
  12284. LDA PAL_ptr
  12285. ASL A
  12286. TAY
  12287.  
  12288. LDA palette_pointer_table, y
  12289. STA AddrLow
  12290. LDA palette_pointer_table+1, y
  12291. STA AddrHigh
  12292.  
  12293. LDY #$00 ; start out at 0
  12294. .Loop:
  12295. LDA [AddrLow], y ; load data from address (palette + the value in x)
  12296. ; 1st time through loop it will load palette+0
  12297. ; 2nd time through loop it will load palette+1
  12298. ; 3rd time through loop it will load palette+2
  12299. ; etc
  12300. STA $2007 ; write to PPU
  12301. INY ; X = X + 1
  12302. CPY #$20 ; Compare X to hex $10, decimal 16 - copying 16 bytes = 4 sprites
  12303. BNE .Loop ; Branch to LoadPalettesLoop if compare was Not Equal to zero
  12304. ; if compare was equal to 32, keep going down
  12305. LDA #$01
  12306. STA PaletteDone
  12307. .End:
  12308. RTS
  12309.  
  12310. ResetDuck:
  12311. LDA DuckFlag
  12312. CMP #$01
  12313. BEQ .Reset
  12314. RTS
  12315. .Reset:
  12316. LDA DuckFacing
  12317. CMP DirFacing
  12318. BEQ .Regular
  12319. LDA DirFacing
  12320. CMP #$00
  12321. BEQ .Left
  12322. LDX #$00
  12323. JMP .Loop
  12324. .Regular:
  12325. LDA DirFacing
  12326. CMP #$01
  12327. BEQ .Left
  12328. LDX #$00
  12329. .Loop:
  12330. LDA $0607,x
  12331. CLC
  12332. ADC #$08
  12333. STA $0607,x
  12334. INX
  12335. INX
  12336. INX
  12337. INX
  12338. CPX #$3C
  12339. BNE .Loop
  12340. LDA #$00
  12341. STA DuckFlag
  12342. .End:
  12343. RTS
  12344. .Left:
  12345. LDX #$00
  12346. .Loop3:
  12347. LDA $0607,x
  12348. SEC
  12349. SBC #$08
  12350. STA $0607,x
  12351. INX
  12352. INX
  12353. INX
  12354. INX
  12355. CPX #$3C
  12356. BNE .Loop3
  12357. LDA #$00
  12358. STA DuckFlag
  12359. RTS
  12360.  
  12361. PlaceFan:
  12362. LDA #$4F
  12363. STA $06C0
  12364. STA $06C4
  12365. STA $06C8
  12366. STA $06CC
  12367. STA $06E0
  12368. LDA #$A0
  12369. STA $06C3
  12370. CLC
  12371. ADC #$08
  12372. STA $06C7
  12373. CLC
  12374. ADC #$08
  12375. STA $06CB
  12376. CLC
  12377. ADC #$08
  12378. STA $06CF
  12379. CLC
  12380. ADC #$08
  12381. STA $06E3
  12382.  
  12383. LDX #$00
  12384. LDY #$00
  12385. .Loop:
  12386. LDA FanSprites,x
  12387. STA $06C1,y
  12388. LDA #$00
  12389. STA $06C2,y
  12390. INX
  12391. TYA
  12392. CLC
  12393. ADC #$04
  12394. TAY
  12395. CPX #$04
  12396. BNE .Loop
  12397. LDA FanSprites,x
  12398. STA $06E1
  12399. LDA #$00
  12400. STA $06E2
  12401. LDA #$05
  12402. STA SoundEffect
  12403. LDA #$01
  12404. STA PlaySound
  12405. RTS
  12406.  
  12407. FanSprites:
  12408. .db $D0,$D1,$D2,$D3,$D4
  12409.  
  12410. ResetAttack:
  12411. LDA gamestate
  12412. CMP #$08
  12413. BCS .End
  12414. LDA ChumAttacking
  12415. CMP #$01
  12416. BNE .End
  12417. LDA AttackTimer
  12418. CMP #$00
  12419. BNE .End
  12420. LDA #$00
  12421. ; STA AHeld
  12422. STA BossConnect
  12423. STA ChumAttacking
  12424. ; LDA #$02
  12425. ; JSR Bankswitch
  12426. ; JSR StandStill
  12427. .End:
  12428. RTS
  12429.  
  12430. ResetJump:
  12431. LDA gamestate
  12432. CMP #$08
  12433. BCS .End
  12434. LDA JumpFlag
  12435. CMP #$00
  12436. BNE .End
  12437. LDA ButtonsP1
  12438. AND #%10000000
  12439. BNE .Temp
  12440. LDA #$00
  12441. STA AHeld
  12442. .End:
  12443. RTS
  12444. .Temp:
  12445. LDA ButtonsP1
  12446. AND #%01111111
  12447. STA ButtonsP1
  12448. RTS
  12449.  
  12450. PlaySoundEffect:
  12451. LDA PlaySound
  12452. CMP #$01
  12453. BNE .End
  12454.  
  12455. LDA SoundEffect
  12456. LDX #FT_SFX_CH0
  12457. JSR FamiToneSfxPlay
  12458. LDA #$00
  12459. STA PlaySound
  12460. .End:
  12461. RTS
  12462.  
  12463. ChumAttack:
  12464. LDA JumpFlag
  12465. CMP #$03
  12466. BEQ .End
  12467. LDA ButtonsP1
  12468. AND #%01000000
  12469. BEQ .End
  12470. LDA AttackPrevent
  12471. CMP #$01
  12472. BEQ .End
  12473. LDA BossDead
  12474. CMP #$00
  12475. BNE .End
  12476. LDA BHeld
  12477. CMP #$01
  12478. BEQ .End
  12479. LDA ChumAttacking
  12480. CMP #$01
  12481. BEQ .End
  12482. INC AttackDelay
  12483. LDA #$01
  12484. STA AttackPrevent
  12485. STA BHeld
  12486. STA ChumAttacking
  12487. LDA #$00
  12488. JSR Bankswitch
  12489. LDA #$19
  12490. JSR FamiToneSamplePlay
  12491. .End:
  12492. RTS
  12493.  
  12494. SpawnBossFan1:
  12495. LDA #$4F
  12496. STA $06C0
  12497. STA $06C4
  12498. STA $06C8
  12499. STA $06CC
  12500. STA $06E0
  12501. LDA #$10
  12502. STA $06C3
  12503. CLC
  12504. ADC #$08
  12505. STA $06C7
  12506. CLC
  12507. ADC #$08
  12508. STA $06CB
  12509. CLC
  12510. ADC #$08
  12511. STA $06CF
  12512. CLC
  12513. ADC #$08
  12514. STA $06E3
  12515.  
  12516. LDX #$00
  12517. LDY #$00
  12518. .Loop:
  12519. LDA FanSprites,x
  12520. STA $06C1,y
  12521. LDA #$00
  12522. STA $06C2,y
  12523. INX
  12524. TYA
  12525. CLC
  12526. ADC #$04
  12527. TAY
  12528. CPX #$04
  12529. BNE .Loop
  12530. LDA FanSprites,x
  12531. STA $06E1
  12532. LDA #$00
  12533. STA $06E2
  12534. LDA #$02
  12535. STA BossPhase
  12536. RTS
  12537.  
  12538. SpawnBossFan2:
  12539. LDA BossFan
  12540. CMP #$03
  12541. BEQ .Left
  12542. CMP #$01
  12543. LDA #$4F
  12544. STA $06C0
  12545. STA $06C4
  12546. STA $06C8
  12547. STA $06CC
  12548. STA $06E0
  12549. LDA #$68
  12550. STA $06C3
  12551. CLC
  12552. ADC #$08
  12553. STA $06C7
  12554. CLC
  12555. ADC #$08
  12556. STA $06CB
  12557. CLC
  12558. ADC #$08
  12559. STA $06CF
  12560. CLC
  12561. ADC #$08
  12562. STA $06E3
  12563.  
  12564. LDX #$00
  12565. LDY #$00
  12566. .Loop:
  12567. LDA FanSprites,x
  12568. STA $06C1,y
  12569. LDA #$00
  12570. STA $06C2,y
  12571. INX
  12572. TYA
  12573. CLC
  12574. ADC #$04
  12575. TAY
  12576. CPX #$04
  12577. BNE .Loop
  12578. LDA FanSprites,x
  12579. STA $06E1
  12580. LDA #$00
  12581. STA $06E2
  12582. LDA #$02
  12583. STA BossPhase
  12584. RTS
  12585. .Left:
  12586. LDA #$4F
  12587. STA $067C
  12588. STA $0680
  12589. STA $0684
  12590. STA $0688
  12591. STA $068C
  12592. LDA #$68
  12593. STA $067F
  12594. CLC
  12595. ADC #$08
  12596. STA $0683
  12597. CLC
  12598. ADC #$08
  12599. STA $0687
  12600. CLC
  12601. ADC #$08
  12602. STA $068B
  12603. CLC
  12604. ADC #$08
  12605. STA $068F
  12606.  
  12607. LDX #$00
  12608. LDY #$00
  12609. .Loop2:
  12610. LDA FanSprites,x
  12611. STA $067D,y
  12612. LDA #$00
  12613. STA $067E,y
  12614. INX
  12615. TYA
  12616. CLC
  12617. ADC #$04
  12618. TAY
  12619. CPX #$05
  12620. BNE .Loop2
  12621. LDA #$02
  12622. STA BossPhase
  12623. RTS
  12624.  
  12625. SpawnBossFan3:
  12626. LDA #$4F
  12627. STA $067C
  12628. STA $0680
  12629. STA $0684
  12630. STA $0688
  12631. STA $068C
  12632. LDA #$C0
  12633. STA $067F
  12634. CLC
  12635. ADC #$08
  12636. STA $0683
  12637. CLC
  12638. ADC #$08
  12639. STA $0687
  12640. CLC
  12641. ADC #$08
  12642. STA $068B
  12643. CLC
  12644. ADC #$08
  12645. STA $068F
  12646.  
  12647. LDX #$00
  12648. LDY #$00
  12649. .Loop:
  12650. LDA FanSprites,x
  12651. STA $067D,y
  12652. LDA #$00
  12653. STA $067E,y
  12654. INX
  12655. TYA
  12656. CLC
  12657. ADC #$04
  12658. TAY
  12659. CPX #$05
  12660. BNE .Loop
  12661. LDA #$02
  12662. STA BossPhase
  12663. RTS
  12664.  
  12665. DropBossFans:
  12666. LDA $067C
  12667. CMP #$F0
  12668. BCC .Drop
  12669. LDX #$00
  12670. LDY #$00
  12671. .Loop2:
  12672. LDA #$FE
  12673. STA $067C,x
  12674. STA $067F,x
  12675. INX
  12676. INX
  12677. INX
  12678. INX
  12679. INY
  12680. CPY #$05
  12681. BNE .Loop2
  12682.  
  12683. LDX #$00
  12684. LDY #$00
  12685. .Loop4:
  12686. LDA #$FE
  12687. STA $06C0,x
  12688. STA $06C3,x
  12689. INX
  12690. INX
  12691. INX
  12692. INX
  12693. INY
  12694. CPY #$04
  12695. BNE .Loop4
  12696. LDA #$FE
  12697. STA $06E0
  12698. STA $06E3
  12699. LDA #$00
  12700. STA FanVelocity
  12701. STA FanVelocity2
  12702. STA DropDelay
  12703. STA BossPhase
  12704. STA BossFan
  12705. STA BossHit
  12706. STA BossFanTimer
  12707. RTS
  12708. .Drop:
  12709. LDA DropDelay
  12710. CMP #$80
  12711. BCC .Inc
  12712.  
  12713. LDX #$00
  12714. LDY #$00
  12715. .Loop:
  12716. LDA FanVelocityPart
  12717. CLC
  12718. ADC #$E0
  12719. STA FanVelocityPart
  12720. LDA $067C,x
  12721. ADC FanVelocity
  12722. STA $067C,x
  12723. INY
  12724. INX
  12725. INX
  12726. INX
  12727. INX
  12728. CPY #$05
  12729. BNE .Loop
  12730.  
  12731. LDX #$00
  12732. LDY #$00
  12733. .Loop3:
  12734. LDA FanVelocityPart
  12735. CLC
  12736. ADC #$E0
  12737. STA FanVelocityPart
  12738. LDA $06C0,x
  12739. ADC FanVelocity
  12740. STA $06C0,x
  12741. INY
  12742. INX
  12743. INX
  12744. INX
  12745. INX
  12746. CPY #$04
  12747. BNE .Loop3
  12748. LDA FanVelocity2Part
  12749. CLC
  12750. ADC #$E0
  12751. STA FanVelocity2Part
  12752. LDA $06E0
  12753. ADC FanVelocity2
  12754. STA $06E0
  12755. LDA $06C0
  12756. AND #%00001111
  12757. BNE .Skip
  12758. INC FanVelocity
  12759. INC FanVelocity2
  12760. RTS
  12761. .Inc:
  12762. INC DropDelay
  12763. LDA DropDelay
  12764. CMP #$7F
  12765. BNE .Skip
  12766. LDA #$05
  12767. STA SoundEffect
  12768. LDA #$01
  12769. STA PlaySound
  12770. .Skip:
  12771. RTS
  12772.  
  12773. DarkWalk1:
  12774. .db $01,$02,$00
  12775. .db $06,$07,$08
  12776. .db $10,$11,$12
  12777. .db $1C,$1D,$1E
  12778. .db $27,$28,$29
  12779.  
  12780. DarkWalk2:
  12781. .db $03,$04,$00
  12782. .db $09,$0A,$0B
  12783. .db $13,$14,$15
  12784. .db $1F,$20,$00
  12785. .db $00,$2A,$00
  12786.  
  12787. DarkWalk3:
  12788. .db $01,$02,$00
  12789. .db $06,$0C,$08
  12790. .db $16,$17,$18
  12791. .db $21,$22,$23
  12792. .db $2B,$2C,$2D
  12793.  
  12794. DarkKick:
  12795. .db $05,$02,$00
  12796. .db $0D,$0E,$0F
  12797. .db $19,$1A,$1B
  12798. .db $24,$25,$26
  12799. .db $00,$2E,$2F
  12800.  
  12801. DarkJumpSprites:
  12802. .db $00,$00,$00
  12803. .db $03,$04,$00
  12804. .db $38,$0A,$00
  12805. .db $42,$43,$00
  12806. .db $4B,$4C,$00
  12807.  
  12808. DarkDuckSprites:
  12809. .db $00,$00,$00
  12810. .db $00,$03,$04
  12811. .db $00,$37,$0A
  12812. .db $00,$40,$41
  12813. .db $00,$48,$4A
  12814.  
  12815. DarkDuckAttackSprites:
  12816. .db $00,$00,$00
  12817. .db $00,$05,$02
  12818. .db $34,$35,$36
  12819. .db $3D,$3E,$3F
  12820. .db $00,$48,$49
  12821.  
  12822. DarkJumpAttackSprites:
  12823. .db $00,$00,$00
  12824. .db $00,$05,$02
  12825. .db $34,$54,$36
  12826. .db $5B,$5C,$3F
  12827. .db $61,$62,$49
  12828.  
  12829. ;;;;;;;;;;;;;;;;
  12830.  
  12831. .org $FFFA ;first of the three vectors starts here
  12832. .dw NMI ;when an NMI happens (once per frame if enabled) the
  12833. ;processor will jump to the label NMI
  12834. .dw RESET ;when the processor first turns on or is reset, it will jump
  12835. ;to the label RESET:
  12836. .dw 0 ;external interrupt IRQ is not used in this tutorial
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement