Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Chumlee's Adventure, for the Nintendo Entertainment System ;;
- ;; Programmed by Kevin Hanley, www.khangames.com ;;
- ;; Programmed in 6502 Assmebly Language, nesasm3.exe ;;
- ;; Graphics by Peek-a-Brews ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;EMULATOR ;;COMMENT OUT FOR REAL HARDWARE ;;
- ;DEMO ;;COMMENT OUT FOR RETAIL RELEASE ;;
- ;MOUSE ;;COMMENT OUT IF NOT USING MOUSE ;;
- ;GTROM ;;COMMENT OUT IF NOT USING GTROM ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Header Information ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- .inesprg 4 ; 16x 16KB PRG code ;;
- .ineschr 0 ; 1x 8KB CHR data ;;
- .inesmap 2 ; mapper 2 = UNROM ;;
- .inesmir 1 ; background mirroring ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- SPRITE_BANKV .EQU $0604 ;;
- SPRITE_BANK .EQU $0607 ;;
- PLAYERV .EQU $0630 ;;
- PLAYER .EQU $0633 ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; Zero Page Variables ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- .rsset $0000 ;;
- .include "zeropage.asm" ;;
- .rsset $0400 ;;
- EnemyAnimateTimer: .rs 20 ;;
- .rsset $0420 ;;
- EnemyMovePart: .rs 48 ;;
- EndPart: .rs 32 ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- .bank 0
- .org $8000
- .include "Music/PawnStars.asm"
- .include "Music/sfx.asm"
- CheckForPause:
- LDA ButtonsP1
- AND #%00010000
- BEQ .End
- LDA StartHeld
- CMP #$01
- BEQ .End
- LDA #$01
- STA StartHeld
- LDA PausedFlag
- CMP #$01
- BEQ .Reset
- LDA #$01
- STA PausedFlag
- LDA #$03
- STA SoundEffect
- LDA #$01
- STA PlaySound
- LDA #$05
- JSR FamiToneMusicPlay
- ; JSR FamiToneMusicPause
- .End:
- RTS
- .Reset:
- LDA #$00
- STA PausedFlag
- LDA #$04
- STA SoundEffect
- LDA #$01
- STA PlaySound
- LDA BossPlacedFlag
- CMP #$01
- BEQ .Boss
- LDA #$01
- JSR FamiToneMusicPlay
- ; JSR FamiToneMusicPause
- RTS
- .Boss:
- LDA #$02
- JSR FamiToneMusicPlay
- RTS
- CoreyAttackCollision:
- LDX #$00
- LDY #$00
- .StartAgain:
- LDA JumpFlag
- CMP #$00
- BEQ .NotJumping
- JMP .JumpAttack
- .NotJumping:
- LDA DuckFlag
- CMP #$00
- BEQ .NotDuck
- JMP .DuckAttack
- .NotDuck:
- ;regular attack
- LDA $061D
- CMP #$19
- BNE .HitRight
- LDA $0604
- CLC
- ADC #$28
- CMP $0644
- BCC .HitRight
- ;0640, 0644
- ;0648, 064c, 0650
- ;0654, 0658, 065c, 0660
- ;0664, 0668, 066c, 0670
- ;0674, 0678, 067c, 0680
- .HitLeft:
- LDA $0663
- CLC
- ADC #$07
- CMP $0607
- BCC .HitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0663
- BCC .HitRight
- JSR AttackLanded
- .End:
- RTS
- .HitRight:
- ;0640, 0644
- ;0648, 064c, 0650
- ;0654, 0658, 065c, 0660
- ;0664, 0668, 066c, 0670
- ;0674, 0678, 067c, 0680
- LDA $0607
- CLC
- ADC #$08
- CMP $0663
- BCC .End
- LDA $0663
- CLC
- ADC #$04
- CMP $0607
- BCC .End
- JSR AttackLanded
- JMP .End
- .JumpAttack:
- LDA $061D
- CMP #$34
- BNE .End
- LDA $0604
- CLC
- ADC #$28
- CMP $0644,x
- BCC .End
- .JumpHitLeft:
- LDA $0663
- CLC
- ADC #$0E
- CMP $0607
- BCC .JumpHitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0663
- BCC .JumpHitRight
- JSR AttackLanded
- JMP .End
- .JumpHitRight:
- LDA $0607
- CLC
- ADC #$0E
- CMP $0663
- BCC .End
- LDA $0663
- CLC
- ADC #$04
- CMP $0607
- BCS .Here
- JMP .End
- .Here:
- JSR AttackLanded
- .End2:
- JMP .End
- .DuckAttack:
- LDA $061D
- CMP #$34
- BNE .End2
- .DuckHitLeft:
- LDA $0663
- CLC
- ADC #$0E
- CMP $0607
- BCC .DuckHitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0663
- BCC .DuckHitRight
- JSR AttackLanded
- JMP .End
- .DuckHitRight:
- LDA $0607
- CLC
- ADC #$0E
- CMP $0663
- BCC .End2
- LDA $0663
- CLC
- ADC #$04
- CMP $0607
- BCC .End2
- JSR AttackLanded
- JMP .End
- DarkChumAttackCollision:
- LDX #$00
- LDY #$00
- .StartAgain:
- LDA JumpFlag
- CMP #$00
- BEQ .NotJumping
- JMP .JumpAttack
- .NotJumping:
- LDA DuckFlag
- CMP #$00
- BEQ .NotDuck
- JMP .DuckAttack
- .NotDuck:
- ;regular attack
- LDA $061D
- CMP #$19
- BNE .HitRight
- LDA $0604
- CLC
- ADC #$28
- CMP $0644
- BCC .HitRight
- ;0640, 0644
- ;0648, 064c, 0650
- ;0654, 0658, 065c, 0660
- ;0664, 0668, 066c, 0670
- ;0674, 0678, 067c, 0680
- .HitLeft:
- LDA $0663
- CLC
- ADC #$10
- CMP $0607
- BCC .HitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0663
- BCC .HitRight
- JSR AttackLanded
- .End:
- RTS
- .HitRight:
- ;0640, 0644
- ;0648, 064c, 0650
- ;0654, 0658, 065c, 0660
- ;0664, 0668, 066c, 0670
- ;0674, 0678, 067c, 0680
- LDA $0607
- CLC
- ADC #$10
- CMP $0663
- BCC .End
- LDA $0663
- CLC
- ADC #$04
- CMP $0607
- BCC .End
- JSR AttackLanded
- JMP .End
- .JumpAttack:
- LDA $061D
- CMP #$34
- BNE .End
- LDA $0604
- CLC
- ADC #$28
- CMP $0644,x
- BCC .End
- .JumpHitLeft:
- LDA $0663
- CLC
- ADC #$0E
- CMP $0607
- BCC .JumpHitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0663
- BCC .JumpHitRight
- JSR AttackLanded
- JMP .End
- .JumpHitRight:
- LDA $0607
- CLC
- ADC #$0E
- CMP $0663
- BCC .End
- LDA $0663
- CLC
- ADC #$04
- CMP $0607
- BCS .Here
- JMP .End
- .Here:
- JSR AttackLanded
- .End2:
- JMP .End
- .DuckAttack:
- LDA $061D
- CMP #$34
- BNE .End2
- .DuckHitLeft:
- LDA $0663
- CLC
- ADC #$0E
- CMP $0607
- BCC .DuckHitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0663
- BCC .DuckHitRight
- JSR AttackLanded
- JMP .End
- .DuckHitRight:
- LDA $0607
- CLC
- ADC #$0E
- CMP $0663
- BCC .End2
- LDA $0663
- CLC
- ADC #$04
- CMP $0607
- BCC .End2
- JSR AttackLanded
- JMP .End
- RickAttackCollision:
- LDX #$00
- LDY #$00
- .StartAgain:
- LDA JumpFlag
- CMP #$00
- BEQ .NotJumping
- JMP .JumpAttack
- .NotJumping:
- LDA DuckFlag
- CMP #$00
- BEQ .NotDuck
- JMP .DuckAttack
- .NotDuck:
- ;regular attack
- LDA $061D
- CMP #$19
- BNE .HitRight
- LDA $0604
- CLC
- ADC #$28
- CMP $0644
- BCC .HitRight
- ;0640, 0644
- ;0648, 064c, 0650
- ;0654, 0658, 065c, 0660
- ;0664, 0668, 066c, 0670
- ;0674, 0678, 067c, 0680
- .HitLeft:
- LDA $0663
- CLC
- ADC #$12
- CMP $0607
- BCC .HitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0663
- BCC .HitRight
- JSR AttackLanded
- .End:
- RTS
- .HitRight:
- ;0640, 0644
- ;0648, 064c, 0650
- ;0654, 0658, 065c, 0660
- ;0664, 0668, 066c, 0670
- ;0674, 0678, 067c, 0680
- LDA $0607
- CLC
- ADC #$12
- CMP $0663
- BCC .End
- LDA $0663
- CLC
- ADC #$04
- CMP $0607
- BCC .End
- JSR AttackLanded
- JMP .End
- .JumpAttack:
- LDA $061D
- CMP #$34
- BNE .End
- LDA $0604
- CLC
- ADC #$28
- CMP $0644,x
- BCC .End
- .JumpHitLeft:
- LDA $0663
- CLC
- ADC #$0E
- CMP $0607
- BCC .JumpHitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0663
- BCC .JumpHitRight
- JSR AttackLanded
- JMP .End
- .JumpHitRight:
- LDA $0607
- CLC
- ADC #$0E
- CMP $0663
- BCC .End
- LDA $0663
- CLC
- ADC #$04
- CMP $0607
- BCS .Here
- JMP .End
- .Here:
- JSR AttackLanded
- .End2:
- JMP .End
- .DuckAttack:
- LDA $061D
- CMP #$34
- BNE .End2
- .DuckHitLeft:
- LDA $0663
- CLC
- ADC #$0E
- CMP $0607
- BCC .DuckHitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0663
- BCC .DuckHitRight
- JSR AttackLanded
- JMP .End
- .DuckHitRight:
- LDA $0607
- CLC
- ADC #$0E
- CMP $0663
- BCC .End2
- LDA $0663
- CLC
- ADC #$04
- CMP $0607
- BCC .End2
- JSR AttackLanded
- JMP .End
- AntoineAttackCollision:
- LDX #$00
- LDY #$00
- .StartAgain:
- LDA JumpFlag
- CMP #$00
- BEQ .NotJumping
- JMP .JumpAttack
- .NotJumping:
- LDA DuckFlag
- CMP #$00
- BEQ .NotDuck
- JMP .DuckAttack
- .NotDuck:
- ;regular attack
- LDA $061D
- CMP #$19
- BNE .HitRight
- LDA $0604
- CLC
- ADC #$28
- CMP $0644
- BCC .HitRight
- .HitLeft:
- LDA $0663
- CLC
- ADC #$15
- CMP $0607
- BCC .HitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0663
- BCC .HitRight
- JSR AttackLanded
- .End:
- RTS
- .HitRight:
- ;0640, 0644
- ;0648, 064c, 0650
- ;0654, 0658, 065c, 0660
- ;0664, 0668, 066c, 0670
- ;0674, 0678, 067c, 0680
- LDA $0607 ;EE ;E3 too far back
- CLC
- ADC #$15
- CMP #$03
- BCC .Landed
- CMP $0663 ;F9
- BCC .End
- LDA $0663
- CLC
- ADC #$02
- CMP $0607
- BCC .End
- .Landed:
- JSR AttackLanded
- JMP .End
- .JumpAttack:
- LDA $061D
- CMP #$34
- BNE .End
- LDA $0604
- CLC
- ADC #$28
- CMP $0644,x
- BCC .End
- .JumpHitLeft:
- LDA $0663
- CLC
- ADC #$0E
- CMP $0607
- BCC .JumpHitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0663
- BCC .JumpHitRight
- JSR AttackLanded
- JMP .End
- .JumpHitRight:
- LDA $0607
- CLC
- ADC #$0E
- CMP $0663
- BCC .End
- LDA $0663
- CLC
- ADC #$04
- CMP $0607
- BCS .Here
- JMP .End
- .Here:
- JSR AttackLanded
- .End2:
- JMP .End
- .DuckAttack:
- LDA $061D
- CMP #$34
- BNE .End2
- .DuckHitLeft:
- LDA $0663
- CLC
- ADC #$0E
- CMP $0607
- BCC .DuckHitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0663
- BCC .DuckHitRight
- JSR AttackLanded
- JMP .End
- .DuckHitRight:
- LDA $0607
- CLC
- ADC #$0E
- CMP $0663
- BCC .End2
- LDA $0663
- CLC
- ADC #$04
- CMP $0607
- BCC .End2
- JSR AttackLanded
- JMP .End
- ;;;;;;;;;;;
- .bank 1
- .org $A000
- TitleNam:
- .incbin "Nametables/title.nam"
- PlayingNam:
- .incbin "Nametables/floor.nam"
- EndingNam:
- .incbin "Nametables/ending.nam"
- CreditsNam:
- .incbin "Nametables/credits.nam"
- TitleATTR:
- .incbin "Nametables/title.atr"
- PlayingATTR:
- .incbin "Nametables/floor.atr"
- CreditsATTR:
- .incbin "Nametables/credits.atr"
- EndingATTR:
- .incbin "Nametables/ending.atr"
- InterludeNam:
- .incbin "Nametables/interlude.nam"
- ;;;;;;;;;;;
- .bank 2
- .org $8000
- TitleSelect:
- LDA ButtonsP1
- AND #%00100000
- BEQ .End
- LDA SelectHeld
- CMP #$01
- BEQ .End
- LDA #$01
- STA SelectHeld
- ; LDA #$00
- ; STA SoundEffect
- ; LDA #$01
- ; STA PlaySound
- LDX #00
- .Loop:
- LDA $0600,x
- CLC
- ADC #$10
- STA $0600,x
- INX
- INX
- INX
- INX
- CPX #$10
- BNE .Loop
- LDA $0600
- CMP #$C2
- BNE .End
- LDA #$82
- STA $0600
- STA $0604
- LDA #$8A
- STA $0608
- STA $060C
- .End:
- RTS
- RunBoss:
- LDA BossDead
- CMP #$00
- BNE .End
- JSR RunAntoine
- JSR RunCorey
- JSR RunRick
- JSR RunDarkChum
- .End:
- RTS
- RunAntoine:
- LDA CurrentFloor
- CMP #$00
- BNE .End
- LDA BossPlacedFlag
- CMP #$01
- BNE .End
- JSR MoveAntoine
- INC BossTimer
- LDA BossTimer
- CMP #$20
- BEQ .1
- CMP #$40
- BEQ .2
- .End:
- RTS
- .1:
- JSR PlaceWorkGraphic
- LDA #$67
- STA $0641
- LDA #$68
- STA $0645
- LDA #$6C
- STA $064D
- LDA #$6D
- STA $0651
- LDA #$73
- STA $0659
- LDA #$74
- STA $065D
- LDA CurrentFloor
- CMP #$00
- BNE .End
- LDA #$01
- STA BossPhase
- RTS
- .2:
- JSR KillWorkGraphic
- LDX #$00
- LDY #$00
- .Loop:
- LDA AntoineFat,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$13
- BNE .Loop
- LDA CurrentFloor
- CMP #$00
- BNE .End
- LDA #$02
- STA BossPhase
- RTS
- KillWorkGraphic:
- LDX #$00
- .Loop:
- LDA #$FE
- STA $06C0,x
- INX
- INX
- INX
- INX
- CPX #$10
- BNE .Loop
- RTS
- MoveAntoine:
- LDA BossPhase
- CMP #$02
- BNE .End
- LDA $0642
- CMP #$02
- BEQ .Left
- LDX #$00
- .Loop:
- LDA $0643,x
- CLC
- ADC #$04
- STA $0643,x
- INX
- INX
- INX
- INX
- CPX #$4C
- BNE .Loop
- LDA $0643
- CMP #$F8
- BCS .Stop
- .End:
- RTS
- .Stop:
- JSR SetAntoineSprite
- LDA #$03
- STA BossPhase
- JSR RotateAntoineSprites
- RTS
- .Left:
- LDX #$00
- .Loop2:
- LDA $0643,x
- SEC
- SBC #$04
- STA $0643,x
- INX
- INX
- INX
- INX
- CPX #$4C
- BNE .Loop2
- LDA $0643
- CMP #$05
- BCC .Stop
- RTS
- ActuallyPlaceAntoine:
- LDA #$8C
- STA $0640
- STA $0644
- STA $0648
- CLC
- ADC #$08
- STA $064C
- STA $0650
- STA $0654
- CLC
- ADC #$08
- STA $0658
- STA $065C
- STA $0660
- CLC
- ADC #$08
- STA $0664
- STA $0668
- STA $066C
- CLC
- ADC #$08
- STA $0670
- STA $0674
- STA $0678
- CLC
- ADC #$08
- STA $067C
- STA $0680
- STA $0684
- LDA #$11
- STA $0643
- STA $064F
- STA $065B
- STA $0667
- STA $0673
- STA $067F
- SEC
- SBC #$08
- STA $0647
- STA $0653
- STA $065F
- STA $066B
- STA $0677
- STA $0683
- SEC
- SBC #$08
- STA $064B
- STA $0657
- STA $0663
- STA $066F
- STA $067B
- STA $0687
- LDA #%01000010
- STA $0642
- STA $0646
- STA $064A
- STA $064E
- STA $0652
- STA $0656
- STA $065A
- STA $065E
- STA $0662
- STA $0666
- STA $066A
- STA $066E
- STA $0672
- STA $0676
- STA $067A
- STA $067E
- STA $0682
- STA $0686
- JSR SetAntoineSprite
- RTS
- SetAntoineSprite:
- LDX #$00
- LDY #$00
- .Loop:
- LDA AntoineStanding,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$12
- BNE .Loop
- LDA #$01
- STA BossPlacedFlag
- RTS
- AntoineStanding:
- .db $69,$6A,$00
- .db $6E,$6F,$00
- .db $75,$76,$77
- .db $7B,$7C,$7D
- .db $81,$82,$83
- .db $89,$8A,$00
- MurderEnemies:
- LDA SetToDie
- CMP #$01
- BEQ .Skip
- LDA $0640
- CMP #$FE
- BEQ .Skip1
- LDA #$01
- STA EnemyDead
- .Skip1:
- LDA $0660
- CMP #$FE
- BEQ .Skip2
- LDA #$01
- STA EnemyDead+1
- .Skip2:
- LDA $0680
- CMP #$FE
- BEQ .Skip3
- LDA #$01
- STA EnemyDead+2
- .Skip3:
- LDA $06A0
- CMP #$FE
- BEQ .Skip4
- LDA #$01
- STA EnemyDead+3
- .Skip4:
- LDA #$01
- STA SetToDie
- .End:
- RTS
- .Skip:
- LDX #$00
- .Loop:
- LDA EnemyDead,x
- CMP #$00
- BNE .End
- INX
- CPX #$04
- BNE .Loop
- LDA #$01
- STA ReadytoSpawn
- RTS
- RotateAntoineSprites:
- LDA BossPhase
- CMP #$03
- BNE .End
- LDA $0642
- CMP #$02
- BEQ .Right
- LDX #$00
- .Loop:
- LDA $064B,x
- STA $0643,x
- CLC
- ADC #$10
- STA $064B,x
- LDA #$02
- STA $0642,x
- STA $0646,x
- STA $064A,x
- TXA
- CLC
- ADC #$0C
- TAX
- CPX #$48
- BNE .Loop
- LDA #$00
- STA BossPhase
- ; STA BossTimer
- .End:
- RTS
- .Right:
- LDX #$00
- .Loop2:
- LDA $0643,x
- STA $064B,x
- CLC
- ADC #$10
- STA $0643,x
- LDA #%01000010
- STA $0642,x
- STA $0646,x
- STA $064A,x
- TXA
- CLC
- ADC #$0C
- TAX
- CPX #$48
- BNE .Loop2
- LDA #$00
- STA BossPhase
- ; STA BossTimer
- RTS
- AntoineFat:
- .db $00,$6B,$00
- .db $70,$71,$72
- .db $78,$79,$7A
- .db $7E,$7F,$80
- .db $84,$85,$86
- .db $00,$8B,$8C
- ActuallyPlaceCorey:
- LDA BossMoveDir
- CMP #$01
- BEQ .LeftSide
- JMP .RightSide
- .LeftSide:
- LDA #$94
- STA $0640
- STA $0644
- CLC
- ADC #$08
- STA $0648
- STA $064C
- STA $0650
- CLC
- ADC #$08
- STA $0654
- STA $0658
- STA $065C
- STA $0660
- CLC
- ADC #$08
- STA $0664
- STA $0668
- STA $066C
- STA $0670
- CLC
- ADC #$08
- STA $0674
- STA $0678
- STA $067C
- STA $0680
- ;0640, 0644
- ;0648, 064c, 0650
- ;0654, 0658, 065c, 0660
- ;0664, 0668, 066c, 0670
- ;0674, 0678, 067c, 0680
- LDA #$18
- STA $0663
- STA $0673
- STA $0683
- SEC
- SBC #$08
- STA $0653
- STA $065F
- STA $066F
- STA $067F
- SEC
- SBC #$08
- STA $0647
- STA $064F
- STA $065B
- STA $066B
- STA $067B
- SEC
- SBC #$08
- STA $0643
- STA $064B
- STA $0657
- STA $0667
- STA $0677
- LDA #$02
- STA $0642
- STA $0646
- STA $064A
- STA $064E
- STA $0652
- STA $0656
- STA $065A
- STA $065E
- STA $0662
- STA $0666
- STA $066A
- STA $066E
- STA $0672
- STA $0676
- STA $067A
- STA $067E
- STA $0682
- LDA #$00
- STA BossPhase
- STA BossTimer
- JSR SetCoreySprite
- RTS
- .RightSide:
- LDA #$94
- STA $0640
- STA $0644
- CLC
- ADC #$08
- STA $0648
- STA $064C
- STA $0650
- CLC
- ADC #$08
- STA $0654
- STA $0658
- STA $065C
- STA $0660
- CLC
- ADC #$08
- STA $0664
- STA $0668
- STA $066C
- STA $0670
- CLC
- ADC #$08
- STA $0674
- STA $0678
- STA $067C
- STA $0680
- ;0640, 0644
- ;0648, 064c, 0650
- ;0654, 0658, 065c, 0660
- ;0664, 0668, 066c, 0670
- ;0674, 0678, 067c, 0680
- LDA #$E1
- STA $0663
- STA $0673
- STA $0683
- CLC
- ADC #$08
- STA $0653
- STA $065F
- STA $066F
- STA $067F
- CLC
- ADC #$08
- STA $0647
- STA $064F
- STA $065B
- STA $066B
- STA $067B
- CLC
- ADC #$08
- STA $0643
- STA $064B
- STA $0657
- STA $0667
- STA $0677
- LDA #%01000010
- STA $0642
- STA $0646
- STA $064A
- STA $064E
- STA $0652
- STA $0656
- STA $065A
- STA $065E
- STA $0662
- STA $0666
- STA $066A
- STA $066E
- STA $0672
- STA $0676
- STA $067A
- STA $067E
- STA $0682
- LDA #$00
- STA BossTimer
- JSR SetCoreySprite
- RTS
- SetCoreySprite:
- LDX #$00
- LDY #$00
- .Loop:
- LDA CoreyStanding,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$11
- BNE .Loop
- LDA #$01
- STA BossPlacedFlag
- RTS
- CoreyStanding:
- .db $87,$88
- .db $8D,$8E,$8F
- .db $90,$91,$92,$93
- .db $97,$98,$99,$9A
- .db $9F,$A0,$A1,$A2
- RunCorey:
- LDA CurrentFloor
- CMP #$01
- BNE .End
- LDA BossPlacedFlag
- CMP #$01
- BNE .End
- JSR RespawnCorey
- JSR ShakeCorey
- JSR AnimateFume
- JSR MoveOffScreen
- JSR CheckForNextPhase
- .End:
- RTS
- RespawnCorey:
- LDA BossPhase
- CMP #$02
- BNE .End
- JSR ActuallyPlaceCorey
- LDA #$00
- STA BossPhase
- .End:
- RTS
- CheckForNextPhase:
- LDX #$00
- .Loop:
- LDA $0640,x
- CMP #$FF
- BNE .End
- LDA $0643,x
- CMP #$FF
- BNE .End
- INX
- INX
- INX
- INX
- CPX #$44
- BNE .Loop
- INC BossTimer
- LDA BossTimer
- CMP #$20
- BNE .End
- LDA BossPhase
- CMP #$01
- BNE .TryNext
- LDA #$02
- STA BossPhase
- RTS
- .TryNext:
- .End:
- RTS
- MoveOffScreen:
- LDA EnemyLifeAmt
- CMP #$18
- BCS .End
- LDA BossPhase
- CMP #$01
- BNE .End
- JSR KillWorkGraphic
- LDA BossMoveDir
- CMP #$00
- BEQ .Left
- LDX #$00
- .RightLoop:
- LDA $0643,x
- CLC
- ADC #$02
- STA $0643,x
- LDA $0643,x
- CMP #$02
- BCS .Skip
- LDA #$FF
- STA $0640,x
- STA $0643,x
- .Skip:
- INX
- INX
- INX
- INX
- CPX #$44
- BNE .RightLoop
- .End:
- RTS
- .Left:
- LDX #$00
- .LeftLoop:
- LDA $0643,x
- SEC
- SBC #$02
- STA $0643,x
- LDA $0643,x
- CMP #$FC
- BCC .Skip2
- LDA #$FF
- STA $0640,x
- STA $0643,x
- .Skip2:
- INX
- INX
- INX
- INX
- CPX #$44
- BNE .LeftLoop
- RTS
- AnimateFume:
- LDA BossPhase
- CMP #$00
- BNE .End
- INC BossTimer
- LDA BossTimer
- CMP #$20
- BNE .2
- .1:
- JSR PlaceWorkGraphic
- LDA #$02
- STA SoundEffect
- LDA #$01
- STA PlaySound
- LDA #$A3
- STA $0685
- LDA #$B4
- STA $0684
- LDA $0643
- CMP $0653
- BCC .Left1
- LDA #%01000001
- STA $0686
- LDA #$D9
- STA $0687
- RTS
- .Left1:
- LDA #$01
- STA $0686
- LDA #$20
- STA $0687
- RTS
- .2:
- LDA BossTimer
- CMP #$28
- BNE .3
- LDA #$A4
- STA $0685
- LDA $0643
- CMP $0653
- BCC .Left2
- LDA #$C9
- STA $0687
- RTS
- .Left2:
- LDA #$30
- STA $0687
- .End:
- RTS
- .3:
- LDA BossTimer
- CMP #$30
- BNE .4
- LDA #$9B
- STA $0685
- LDA #$A5
- STA $0689
- LDA #$AC
- STA $0684
- LDA #$B4
- STA $0688
- LDA $0643
- CMP $0653
- BCC .Left3
- LDA #%01000001
- STA $068A
- LDA #$B9
- STA $0687
- STA $068B
- RTS
- .Left3:
- LDA #$01
- STA $068A
- LDA #$40
- STA $0687
- STA $068B
- RTS
- .4:
- LDA BossTimer
- CMP #$38
- BNE .5
- LDA #$94
- STA $0685
- LDA #$9C
- STA $0689
- LDA #$A6
- STA $068D
- LDA #$A4
- STA $0684
- LDA #$AC
- STA $0688
- LDA #$B4
- STA $068C
- LDA $0643
- CMP $0653
- BCC .Left4
- LDA #%01000001
- STA $068E
- LDA #$A9
- STA $0687
- STA $068B
- STA $068F
- RTS
- .Left4:
- LDA #$01
- STA $068E
- LDA #$50
- STA $0687
- STA $068B
- STA $068F
- RTS
- .5:
- LDA BossTimer
- CMP #$40
- BNE .6
- LDA #$95
- STA $0685
- LDA #$9D
- STA $0689
- LDA #$A7
- STA $068D
- LDA $0643
- CMP $0653
- BCC .Left5
- LDA #$99
- STA $0687
- STA $068B
- STA $068F
- RTS
- .Left5:
- LDA #$60
- STA $0687
- STA $068B
- STA $068F
- RTS
- .6:
- LDA BossTimer
- CMP #$48
- BNE .7
- LDA #$96
- STA $0685
- LDA #$9E
- STA $0689
- LDA #$A8
- STA $068D
- LDA $0643
- CMP $0653
- BCC .Left6
- LDA #$89
- STA $0687
- STA $068B
- STA $068F
- RTS
- .Left6:
- LDA #$70
- STA $0687
- STA $068B
- STA $068F
- RTS
- .7:
- LDA BossTimer
- CMP #$50
- BCC .End2
- LDA #$FE
- STA $0684
- STA $0688
- STA $068C
- LDA #$00
- STA BossTimer
- INC SmokeCount
- LDA SmokeCount
- CMP #$04
- BNE .End2
- LDA #$00
- STA SmokeCount
- LDA #$01
- STA BossPhase
- LDA #$01
- STA BossMoveDir
- LDA $0643
- CMP $0653
- BCS .End2
- LDA #$00
- STA BossMoveDir
- .End2:
- RTS
- ActuallyPlaceRick:
- LDA #$94
- STA $0640
- STA $0644
- STA $0648
- CLC
- ADC #$08
- STA $064C
- STA $0650
- STA $0654
- CLC
- ADC #$08
- STA $0658
- STA $065C
- STA $0660
- CLC
- ADC #$08
- STA $0664
- STA $0668
- STA $066C
- CLC
- ADC #$08
- STA $0670
- STA $0674
- STA $0678
- LDA #$11
- STA $0643
- STA $064F
- STA $065B
- STA $0667
- STA $0673
- SEC
- SBC #$08
- STA $0647
- STA $0653
- STA $065F
- STA $066B
- STA $0677
- SEC
- SBC #$08
- STA $064B
- STA $0657
- STA $0663
- STA $066F
- STA $067B
- LDA #%01000011
- STA $0642
- STA $0646
- STA $064A
- STA $064E
- STA $0652
- STA $0656
- STA $065A
- STA $065E
- STA $0662
- STA $0666
- STA $066A
- STA $066E
- STA $0672
- STA $0676
- STA $067A
- JSR SetRickSprite
- RTS
- SetRickSprite:
- LDX #$00
- LDY #$00
- .Loop:
- LDA RickStanding,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop
- LDA #$01
- STA BossPlacedFlag
- RTS
- RickStanding:
- .db $C2,$C3,$00
- .db $AB,$AC,$AE
- .db $C4,$B6,$B7
- .db $BC,$BD,$BE
- .db $89,$C1,$00
- RunRick:
- LDA CurrentFloor
- CMP #$02
- BNE .End
- LDA BossPlacedFlag
- CMP #$01
- BNE .End
- JSR AnimateRick
- JSR ThrowBowlingBall
- .End:
- RTS
- AnimateRick:
- LDA BossPhase
- CMP #$01
- BEQ .End
- INC ShakeTimer
- LDA ShakeTimer
- CMP #$20
- BEQ .1
- CMP #$30
- BEQ .2
- RTS
- .1:
- JSR PlaceWorkGraphic
- LDX #$00
- LDY #$00
- .Loop:
- LDA RickSprite1,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop
- JSR ChangeEyebrows
- RTS
- .2:
- LDX #$00
- LDY #$00
- .Loop2:
- LDA RickSprite2,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop2
- LDA #$B1
- STA $0681
- LDA #$A6
- STA $0680
- LDA #%01000011
- STA $0682
- LDA #$1C
- STA $0683
- LDA #$01
- STA BossPhase
- .End:
- RTS
- AnimateBall:
- LDA $0682
- CMP #$03
- BEQ .1
- CMP #%10000011
- BEQ .2
- CMP #%11000011
- BEQ .3
- CMP #%01000011
- BEQ .4
- RTS
- .1:
- LDA #%10000011
- STA $0682
- RTS
- .2:
- LDA #%11000011
- STA $0682
- RTS
- .3:
- LDA #%01000011
- STA $0682
- RTS
- .4:
- LDA #$03
- STA $0682
- RTS
- ThrowBowlingBall:
- LDA BossPhase
- CMP #$01
- BNE .End
- JSR RevertEyebrows
- JSR KillWorkGraphic
- LDA $0683
- CMP #$06
- BCC .Stop
- JSR AnimateBall
- LDA $0683
- CLC
- ADC #$05
- STA $0683
- LDA BallDirection
- CMP #$01
- BNE .Try2
- LDA $0680
- CMP #$B4
- BCS .End
- LDA $0680
- CLC
- ADC #$01
- STA $0680
- RTS
- .Try2:
- LDA BallDirection
- CMP #$02
- BNE .End
- LDA BallYAxis
- CMP #$01
- BEQ .Fall
- LDA $0680
- CMP #$80
- BCC .Set
- LDA $0680
- SEC
- SBC #$10
- STA $0680
- RTS
- .Set:
- LDA #$01
- STA BallYAxis
- RTS
- .Fall:
- LDA $0680
- CMP #$B4
- BCS .End
- LDA $0680
- CLC
- ADC #$05
- STA $0680
- .End:
- RTS
- .Stop:
- LDA #$FE
- STA $0680
- STA $0683
- JSR SetRickSprite
- LDA #$00
- STA BossPhase
- STA BallYAxis
- STA ShakeTimer
- INC BallDirection
- LDA BallDirection
- CMP #$03
- BNE .End
- LDA #$00
- STA BallDirection
- RTS
- RickSprite1:
- .db $C2,$C3,$00
- .db $AB,$AF,$B0
- .db $B5,$B8,$B9
- .db $BC,$BB,$BF
- .db $89,$C0,$00
- RickSprite2:
- .db $C2,$C3,$00
- .db $AB,$AC,$AD
- .db $B2,$B3,$B4
- .db $BA,$BB,$00
- .db $89,$C0,$00
- ChangeEyebrows:
- LDA #$A9
- STA $0641
- LDA #$AA
- STA $0645
- RTS
- RevertEyebrows:
- LDA #$C2
- STA $0641
- LDA #$C3
- STA $0645
- RTS
- ShakeCorey:
- INC ShakeTimer
- LDA ShakeTimer
- CMP #$02
- BEQ .Up
- CMP #$04
- BEQ .Down
- LDA ShakeTimer
- CMP #$05
- BNE .End
- LDA #$00
- STA ShakeTimer
- RTS
- .Up:
- LDX #$00
- .UpLoop:
- LDA $0640,x
- SEC
- SBC #$01
- STA $0640,x
- INX
- INX
- INX
- INX
- CPX #$44
- BNE .UpLoop
- .End:
- RTS
- .Down:
- LDX #$00
- .DownLoop:
- LDA $0640,x
- CLC
- ADC #$01
- STA $0640,x
- INX
- INX
- INX
- INX
- CPX #$44
- BNE .DownLoop
- RTS
- RunDarkChum:
- LDA CurrentFloor
- CMP #$03
- BNE .End
- LDA BossPlacedFlag
- CMP #$01
- BNE .End
- JSR PickFanStop
- JSR BossFanCollision
- JSR DarkChumJump
- JSR DarkChumActuallyJump
- JSR DarkJump
- JSR DarkChumDuck
- JSR DarkMoveLeft
- JSR DarkMoveRight
- JSR DarkChumAttack
- JSR DarkStandStill
- JSR ResetDarkDuck
- .End:
- RTS
- BossFanCollision:
- LDA InvincTimer
- CMP #$00
- BEQ .Begin
- JMP .CheckBoss
- .Begin:
- LDA $06C0
- CLC
- ADC #$06
- CMP $0604
- BCC .CheckHit2
- LDA $0604
- CLC
- ADC #$20
- CMP $06C0
- BCC .CheckHit2
- LDA $0607
- CLC
- ADC #$04
- CMP $06C3
- BCC .CheckHit2
- LDA $06E3
- CLC
- ADC #$04
- CMP $0607
- BCC .CheckHit2
- LDA #$02
- STA ChumHit
- INC LifeAmt
- INC LifeAmt
- LDA #$0F
- STA ChumTempX
- LDA #STATEHIT
- STA gamestate
- RTS
- .CheckHit2:
- LDA $067C
- CLC
- ADC #$06
- CMP $0604
- BCC .CheckBoss
- LDA $0604
- CLC
- ADC #$20
- CMP $067C
- BCC .CheckBoss
- LDA $068F
- CLC
- ADC #$04
- CMP $0607
- BCC .CheckBoss
- LDA $0607
- CLC
- ADC #$04
- CMP $067F
- BCC .CheckBoss
- LDA #$02
- STA ChumHit
- INC LifeAmt
- INC LifeAmt
- LDA #$0F
- STA ChumTempX
- LDA #STATEHIT
- STA gamestate
- RTS
- .CheckBoss:
- LDA BossHit
- CMP #$01
- BEQ .End
- LDA $0640
- CLC
- ADC #$20
- CMP $06C0
- BCC .CheckBoss2
- LDA $06C0
- CLC
- ADC #$06
- CMP $0640
- BCC .CheckBoss2
- LDA $0643
- CLC
- ADC #$04
- CMP $06C3
- BCC .CheckBoss2
- LDA $06E3
- CLC
- ADC #$04
- CMP $0643
- BCC .CheckBoss2
- INC EnemyLifeAmt
- INC EnemyLifeAmt
- INC EnemyLifeAmt
- INC EnemyLifeAmt
- LDA #$01
- STA BossHit
- STA FlashBossHit
- STA EnemyHitFlag
- STA SoundEffect
- STA PlaySound
- .End:
- RTS
- .CheckBoss2:
- LDA $067C
- CLC
- ADC #$06
- CMP $0640
- BCC .End
- LDA $0640
- CLC
- ADC #$20
- CMP $068C
- BCC .End
- LDA $068F
- CLC
- ADC #$04
- CMP $0643
- BCC .End
- LDA $0643
- CLC
- ADC #$04
- CMP $067F
- BCC .End
- INC EnemyLifeAmt
- INC EnemyLifeAmt
- INC EnemyLifeAmt
- INC EnemyLifeAmt
- LDA #$01
- STA BossHit
- STA FlashBossHit
- STA EnemyHitFlag
- STA SoundEffect
- STA PlaySound
- RTS
- PickFanStop:
- LDA BossFan
- CMP #$00
- BNE .SecondTimer
- INC BossFanTimer
- LDA BossFanTimer
- BNE .End
- LDA $0643
- CMP #$54
- BCC .1
- CMP #$A8
- BCC .2
- LDA #$03
- STA BossFan
- RTS
- .1:
- LDA #$01
- STA BossFan
- RTS
- .2:
- LDA #$02
- STA BossFan
- .End:
- RTS
- .SecondTimer:
- JSR SpawnBossFans
- JSR DropBossFans
- RTS
- INC BossFanTimer
- LDA BossFanTimer
- CMP #$80
- BNE .End
- LDA #$00
- STA BossFanTimer
- STA BossFan
- RTS
- SpawnBossFans:
- LDA BossPhase
- CMP #$02
- BEQ .End
- LDA BossFan
- CMP #$01
- BNE .Try2
- JSR SpawnBossFan2
- JSR SpawnBossFan3
- RTS
- .Try2:
- LDA BossFan
- CMP #$02
- BNE .Try3
- JSR SpawnBossFan1
- JSR SpawnBossFan3
- RTS
- .Try3:
- LDA BossFan
- CMP #$03
- BNE .End
- JSR SpawnBossFan1
- JSR SpawnBossFan2
- RTS
- .End:
- RTS
- DarkMoveLeft:
- LDA ButtonsP1
- AND #%00000001
- BNE .Start
- JMP .End
- .Start:
- LDA JumpFlag
- CMP #$00
- BNE .End
- JSR AnimateDarkChum
- LDA RightHeld
- CMP #$01
- BEQ .SkipTurn
- .Turn:
- LDX #$00
- .Loop:
- LDA #$03
- STA $0642,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop
- JSR SwapDarkLeft
- .SkipTurn:
- LDA $0642
- CMP #$03
- BNE .Turn
- ; LDA DuckFlag
- ; CMP #$01
- ; BNE .NotDuck
- ; JSR ResetDuck
- ;.NotDuck:
- LDA BossPlacedFlag
- CMP #$01
- BEQ .MoveInstead
- .End:
- RTS
- .MoveInstead:
- LDA $0643
- CMP #$09
- BCC .End
- LDX #$00
- .MoveLoop:
- LDA $0643,x
- SEC
- SBC #$01
- STA $0643,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .MoveLoop
- RTS
- DarkMoveRight:
- LDA ButtonsP1
- AND #%00000010
- BNE .Start
- JMP .End
- .Start:
- LDA JumpFlag
- CMP #$00
- BNE .End
- JSR AnimateDarkChum
- LDA LeftHeld
- CMP #$01
- BEQ .SkipTurn
- .Turn:
- LDX #$00
- .Loop:
- LDA #%01000011
- STA $0642,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop
- JSR SwapDarkRight
- .SkipTurn:
- LDA $0642
- CMP #%01000011
- BNE .Turn
- ; LDA DuckFlag
- ; CMP #$01
- ; BNE .NotDuck
- ; JSR ResetDuck
- ;.NotDuck:
- LDA BossPlacedFlag
- CMP #$01
- BEQ .MoveInstead
- .End:
- RTS
- .MoveInstead:
- LDA $0643
- CMP #$F0
- BCS .End
- LDX #$00
- .MoveLoop:
- LDA $0643,x
- CLC
- ADC #$01
- STA $0643,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .MoveLoop
- RTS
- DarkChumJump:
- LDA DuckFlag
- CMP #$01
- BEQ .NoFix
- RTS
- .NoFix:
- LDA DarkJumpFlag
- CMP #$00
- BNE .End
- LDA #$01
- STA DarkJumpFlag
- .End:
- RTS
- DarkChumActuallyJump:
- LDA DarkJumpFlag
- CMP #$00
- BEQ .End
- CMP #$02
- BEQ .Next
- ; RTS
- JMP DarkActuallyJumpDown
- .Next:
- JSR DarkJumpSprite
- LDA $0640
- CMP DarkJumpPos+2
- BCC .Stop
- CMP DarkJumpPos+3
- BCC .JumpSlow
- CMP DarkJumpPos+4
- BCC .JumpFast
- RTS
- .JumpFast:
- LDX #$00
- LDY #$00
- .Loop:
- LDA $0640,y
- SEC
- SBC #$04
- STA $0640,y
- INX
- INY
- INY
- INY
- INY
- CPX #$0F
- BNE .Loop
- JSR DarkAdjust3
- JSR DarkAdjust2
- RTS
- .JumpSlow:
- LDX #$00
- LDY #$00
- .Loop2:
- LDA $0640,y
- SEC
- SBC #$01
- STA $0640,y
- INX
- INY
- INY
- INY
- INY
- CPX #$0F
- BNE .Loop2
- JSR DarkAdjust3
- JSR DarkAdjust2
- RTS
- .Stop:
- JSR DarkAdjust3
- JSR DarkAdjust2
- INC StopCounter
- LDA StopCounter
- CMP #$06
- BNE .End
- LDA #$00
- STA StopCounter
- LDA #$03
- STA DarkJumpFlag
- .End:
- RTS
- DarkChumDuck:
- LDA JumpFlag
- CMP #$00
- BEQ .End
- LDA DarkJumpFlag
- CMP #$00
- BNE .End
- JSR DarkAdjustDucking
- JSR DarkActuallyDuck
- .End:
- RTS
- DarkChumAttack:
- LDA ChumAttacking
- CMP #$01
- BNE .End
- JSR PickDarkAttackSprite
- LDA AttackTimer
- CMP #$0A
- BCC .End
- LDA DarkJumpFlag
- CMP #$00
- BEQ .End
- JMP .Reset
- .End:
- RTS
- .Reset:
- LDA #$01
- STA DarkJumpAttackResetFlag
- RTS
- PickDarkAttackSprite:
- LDX #$00
- LDY #$00
- LDA DarkJumpFlag
- CMP #$00
- BNE .JumpAttack
- LDA DarkDuckFlag
- CMP #$01
- BEQ .DuckAttack
- LDA ButtonsP1
- AND #%00000100
- BNE .DuckAttack
- .Loop:
- LDA DarkKick,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop
- RTS
- .DuckAttack:
- LDA DarkDuckFlag
- CMP #$01
- BNE .Loop
- LDX #$00
- LDY #$00
- .Loopy:
- LDA DarkDuckAttackSprites,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loopy
- RTS
- .JumpAttack:
- LDX #$00
- LDY #$00
- .Loopy2:
- LDA DarkJumpAttackSprites,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loopy2
- JSR DarkPixelAdjust
- RTS
- AnimateDarkChum:
- LDA DarkJumpFlag
- CMP #$00
- BNE .End
- INC DarkAnimTimer
- LDA DarkAnimTimer
- CMP #$08
- BCC .1
- CMP #$10
- BCC .2
- CMP #$18
- BCC .3
- CMP #$20
- BCC .2
- CMP #$20
- BNE .End
- LDA #$00
- STA DarkAnimTimer
- .End:
- RTS
- .1:
- LDX #$00
- LDY #$00
- .Loop1:
- LDA DarkWalk1,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop1
- RTS
- .2:
- LDX #$00
- LDY #$00
- .Loop2:
- LDA DarkWalk2,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop2
- RTS
- .3:
- LDX #$00
- LDY #$00
- .Loop3:
- LDA DarkWalk3,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop3
- RTS
- SwapDarkRight:
- LDA $064B
- CMP $0643
- BCC .End
- ;0640 0644 0648
- ;064C 0650 0654
- ;0658 065C 0660
- ;0664 0668 066C
- ;0670 0674 0678
- LDA $0643
- STA $064B
- STA $0657
- STA $0663
- STA $066F
- STA $067B
- CLC
- ADC #$08
- STA $0647
- STA $0653
- STA $065F
- STA $066B
- STA $0677
- CLC
- ADC #$08
- STA $0643
- STA $064F
- STA $065B
- STA $0667
- STA $0673
- .End:
- RTS
- SwapDarkLeft:
- LDA $0643
- CMP $064B
- BCC .End
- LDA $0643
- STA $064B
- STA $0657
- STA $0663
- STA $066F
- STA $067B
- SEC
- SBC #$08
- STA $0647
- STA $0653
- STA $065F
- STA $066B
- STA $0677
- SEC
- SBC #$08
- STA $0643
- STA $064F
- STA $065B
- STA $0667
- STA $0673
- .End:
- RTS
- DarkPixelAdjust:
- LDA DarkJumpFlag
- CMP #$00
- BEQ .NotJumping
- LDA DarkJumpAttackFlag
- CMP #$01
- BEQ .End
- LDA #$01
- STA DarkJumpAttackFlag
- .NotJumping:
- LDA $0642
- CMP #$03
- BEQ .Left
- LDX #$00
- .Loop:
- LDA $0643,x
- CLC
- ADC #$08
- STA $0643,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop
- .End:
- RTS
- .Left:
- LDX #$00
- .Loop2:
- LDA $0643,x
- SEC
- SBC #$08
- STA $0643,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop2
- RTS
- DarkAdjustDucking:
- LDA DarkJumpFlag
- CMP #$00
- BNE .End
- LDA DarkDuckFlag
- CMP #$01
- BEQ .End
- LDA #$01
- STA DarkDuckFlag
- LDA $0643
- CMP $064B
- BCC .Left
- LDA #$01
- STA DarkDuckFacing
- JMP .Connect
- .Left:
- LDA #$00
- STA DarkDuckFacing
- .Connect:
- JSR DarkPixelAdjust
- .End:
- RTS
- DarkActuallyDuck:
- LDX #$00
- LDY #$00
- .Loop:
- LDA DarkDuckSprites,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop
- .End:
- RTS
- ResetDarkDuck:
- LDA DarkDuckFlag
- CMP #$01
- BEQ .Reset
- RTS
- .Reset:
- LDA JumpFlag
- CMP #$00
- BNE .End
- ; LDA DarkDuckFacing
- ; CMP DirFacing
- ; BNE .Regular
- LDA DarkDuckFacing
- CMP #$01
- BEQ .Left
- LDX #$00
- JMP .Loop
- .Regular:
- ; LDA DirFacing
- ; CMP #$01
- ; BEQ .Left
- LDX #$00
- .Loop:
- LDA $0643,x
- CLC
- ADC #$08
- STA $0643,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop
- LDA #$00
- STA DarkDuckFlag
- .End:
- RTS
- .Left:
- LDX #$00
- .Loop3:
- LDA $0643,x
- SEC
- SBC #$08
- STA $0643,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop3
- LDA #$00
- STA DarkDuckFlag
- RTS
- DarkJumpSprite:
- LDA ChumAttacking
- CMP #$01
- BEQ .End
- LDX #$00
- LDY #$00
- .Loop:
- LDA DarkJumpSprites,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop
- .End:
- RTS
- DarkAdjust2:
- LDA DarkJumpAttackResetFlag
- CMP #$01
- BNE .End
- LDA #$02
- STA DarkJumpAttackResetFlag
- .End:
- RTS
- DarkAdjust3:
- LDA DarkJumpAttackResetFlag
- CMP #$02
- BNE .End
- LDA DarkJumpFlag
- CMP #$03
- BNE .Skip
- LDA ExtraFlag
- CMP #$04
- BEQ .Skip
- INC ExtraFlag
- RTS
- .Skip:
- LDA $0642
- CMP #$00
- BEQ .Left
- LDX #$00
- .Loop:
- LDA $0643,x
- CLC
- ADC #$08
- STA $0643,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop
- LDA #$00
- STA DarkJumpAttackFlag
- STA ExtraFlag
- STA DarkJumpAttackResetFlag
- RTS
- .Left:
- LDX #$00
- .Loop3:
- LDA $0643,x
- SEC
- SBC #$08
- STA $0643,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop3
- LDA #$00
- STA DarkJumpAttackFlag
- STA ExtraFlag
- STA DarkJumpAttackResetFlag
- .End:
- RTS
- DarkActuallyJumpDown:
- LDA DarkJumpFlag
- CMP #$03
- BNE .End
- .Next:
- LDA ChumHit
- CMP #$00
- BNE .Skip
- JSR DarkJumpSprite
- JSR DarkAdjust3
- JSR DarkAdjust2
- .Skip:
- LDA $0640
- CMP DarkJumpPos
- BCS .Stop
- CMP DarkJumpPos+1
- BCS .JumpFast
- RTS
- .JumpFast:
- LDX #$00
- LDY #$00
- .Loop:
- LDA $0640,y
- CLC
- ADC #$03
- STA $0640,y
- INX
- INY
- INY
- INY
- INY
- CPX #$0F
- BNE .Loop
- JSR DarkAdjust3
- RTS
- .Stop:
- LDA #$00
- STA DarkJumpFlag
- STA DarkJumpAttackFlag
- ; JSR StandStill
- .End:
- RTS
- DarkJump:
- LDA DarkJumpFlag
- CMP #$01
- BNE .End
- LDA $0640
- SEC
- SBC #$01
- STA DarkJumpPos
- LDA DarkJumpPos
- SEC
- SBC #$3F
- STA DarkJumpPos+1
- CLC
- ADC #$05
- STA DarkJumpPos+2
- CLC
- ADC #$08
- STA DarkJumpPos+3
- CLC
- ADC #$34
- STA DarkJumpPos+4
- LDA #$02
- STA DarkJumpFlag
- JSR DarkJumpSprite
- .End:
- RTS
- ActuallyPlaceDarkChum:
- LDA #$94
- STA $0640
- STA $0644
- STA $0648
- CLC
- ADC #$08
- STA $064C
- STA $0650
- STA $0654
- CLC
- ADC #$08
- STA $0658
- STA $065C
- STA $0660
- CLC
- ADC #$08
- STA $0664
- STA $0668
- STA $066C
- CLC
- ADC #$08
- STA $0670
- STA $0674
- STA $0678
- LDA #$EF
- STA $0643
- STA $064F
- STA $065B
- STA $0667
- STA $0673
- CLC
- ADC #$08
- STA $0647
- STA $0653
- STA $065F
- STA $066B
- STA $0677
- CLC
- ADC #$08
- STA $064B
- STA $0657
- STA $0663
- STA $066F
- STA $067B
- LDA #$03
- STA $0642
- STA $0646
- STA $064A
- STA $064E
- STA $0652
- STA $0656
- STA $065A
- STA $065E
- STA $0662
- STA $0666
- STA $066A
- STA $066E
- STA $0672
- STA $0676
- STA $067A
- JSR SetDarkChumSprite
- RTS
- ;;;;;;;;;;;
- .bank 3
- .org $A000
- GameTiles:
- .incbin "Graphics/mario.chr" ;includes 8KB graphics file from SMB1
- ;;;;;;;;;;;;;;
- .bank 4
- .org $8000
- UpdateText2:
- LDA #low(InterludeText)
- STA TextLow
- LDA #high(InterludeText)
- STA TextHigh
- LDX #$00
- LDA CurrentLetterRow
- CMP #$33
- BCS .End
- .Cont:
- LDX #$00
- .Skip:
- LDY CurrentLetterRow
- .Loop:
- LDA $2002
- TXA
- CLC
- ADC #$20
- STA $2006
- LDA TextCoordinates,y
- CLC
- ADC #$60
- STA $2006
- LDA [TextLow],y
- CLC
- ADC #$9F
- STA $2007
- .End:
- RTS
- InterludeText:
- .db "CHUMLEE",$5C,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60
- .db "CHUMLEE",$5F,$60,"WHERE",$60,"ARE",$60,"YOU",$5E,$60,$60,$60
- IncrementLetter2:
- LDA CutsceneTextTimer
- CMP #$08
- BEQ .Increment
- INC CutsceneTextTimer
- RTS
- .Increment:
- LDA CurrentLetterRow
- CMP #$33
- BEQ .AllowButtons
- INC CurrentLetterRow
- LDA #$00
- STA CutsceneTextTimer
- RTS
- .AllowButtons:
- INC FadeOutTimer
- LDA FadeOutTimer
- CMP #$80
- BCC .End
- LDA #$00
- STA FadeOutTimer
- JSR KillSprites
- JSR ResetLevelValues
- LDA #STATELOADPLAYING
- STA gamestate
- .End:
- RTS
- UpdateText:
- LDA #low(ChumEndingText)
- STA TextLow
- LDA #high(ChumEndingText)
- STA TextHigh
- LDX #$00
- LDA CurrentLetterRow
- CMP #$6F
- BCS .End
- .Cont:
- LDX #$00
- .Skip:
- LDY CurrentLetterRow
- .Loop:
- LDA $2002
- TXA
- CLC
- ADC #$20
- STA $2006
- LDA TextCoordinates,y
- CLC
- ADC #$20
- STA $2006
- LDA [TextLow],y
- CLC
- ADC #$9F
- STA $2007
- ; INC CurrentLetterRow
- .End:
- RTS
- ChumEndingText:
- .db "PINKY",$5F,$60,"I",$60,"AM",$60,"HERE",$5C,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60
- .db "THIS",$60,"IS",$60,"SO",$60,"MUCH",$60,"BETTER",$60,"THAN",$60
- .db "WORKING",$60,"FOR",$60,"RICK",$5B,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60,$60
- .db "I",$60,"HOPE",$60,"I",$60,"AM",$60,"OFF",$60,"TOMORROW",$5B,$5B,$5B
- TextCoordinates:
- .db $42,$43,$44,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E,$4F
- .db $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5A,$5B,$5C,$5D
- .db $62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C,$6D,$6E,$6F
- .db $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D
- .db $82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F
- .db $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9A,$9B,$9C,$9D
- .db $A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF
- .db $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$BA,$BB,$BC,$BD
- CheckEndFadeOut:
- LDA FadeOutFlag
- CMP #$01
- BNE .End
- LDA CurrentPalette
- CMP #$00
- BEQ .EndCredits
- LDA PaletteTimer
- CMP #$80
- BEQ .Increment
- INC PaletteTimer
- .End:
- RTS
- .Increment:
- LDA #$00
- STA PaletteTimer
- DEC CurrentPalette
- RTS
- .EndCredits:
- LDA CurrentPlayer
- CMP #$01
- BNE .2p
- LDA #$00
- STA CurrentFloor
- STA CurrentFloorP1
- STA InterludeShownP1
- INC LoopP1
- JMP .Connect
- .2p:
- LDA #$00
- STA CurrentFloor
- STA CurrentFloorP2
- STA InterludeShownP2
- INC LoopP2
- .Connect:
- LDA #$00
- STA FadeOutFlag
- STA FadeOutTimer
- STA CurrentLetterRow
- STA CutsceneTextTimer
- JSR KillSprites
- JSR ResetLevelValues
- LDA #STATELOADPLAYING
- STA gamestate
- RTS
- IncrementLetter:
- LDA CutsceneTextTimer
- CMP #$08
- BEQ .Increment
- INC CutsceneTextTimer
- RTS
- .Increment:
- LDA CurrentLetterRow
- CMP #$6F
- BEQ .AllowButtons
- INC CurrentLetterRow
- LDA #$00
- STA CutsceneTextTimer
- RTS
- .AllowButtons:
- INC FadeOutTimer
- LDA FadeOutTimer
- CMP #$80
- BCC .End
- LDA #$00
- STA FadeOutTimer
- LDA #$01
- STA FadeOutFlag
- .End:
- RTS
- ScrollLamps:
- LDX #$00
- LDY #$00
- .Loop:
- LDA EndPart,y
- CLC
- ADC #$C0
- STA EndPart,y
- LDA $0653,x
- ADC #$00
- STA $0653,x
- INY
- INX
- INX
- INX
- INX
- CPX #$80
- BNE .Loop
- RTS
- KillAllButPinky:
- LDX #$00
- .Loop:
- LDA #$FE
- STA $0604,x
- STA $0607,x
- STA $0650,x
- STA $0653,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop
- LDX #$00
- .Loop2:
- LDA #$FE
- STA $068C,x
- STA $068F,x
- INX
- INX
- INX
- INX
- CPX #$44
- BNE .Loop2
- RTS
- AnimatePinky:
- INC DogAnimTimer
- LDA DogAnimTimer
- CMP #$08
- BEQ .1
- CMP #$10
- BEQ .2
- RTS
- .1:
- LDA #$F6
- STA $0641
- LDA #$F7
- STA $0645
- LDA #$F4
- STA $0649
- LDA #$F5
- STA $064D
- RTS
- .2:
- LDA #$F2
- STA $0641
- LDA #$F3
- STA $0645
- LDA #$F0
- STA $0649
- LDA #$F1
- STA $064D
- LDA #$00
- STA DogAnimTimer
- RTS
- TitleStart:
- LDA ButtonsP1
- AND #%00010000
- BEQ .End
- LDA StartHeld
- CMP #$01
- BEQ .End
- LDA #$01
- STA StartHeld
- LDA #$02
- STA PlayerLife
- LDA #$00
- STA CurrentFloor
- STA CurrentFloorP1
- STA CurrentFloorP2
- LDA #$00
- STA InterludeShownP1
- STA InterludeShownP2
- STA PlaceFlag
- STA P1Score
- STA P1Score+1
- STA P1Score+2
- STA P1Score+3
- STA P1Score+4
- STA P1Score+5
- STA LoopP1
- STA LoopP2
- LDA #$08
- STA NametableCount
- LDA $0600
- CMP #$82
- BNE .TryP2
- LDA #$00
- STA Game2p
- LDA #$01
- STA CurrentPlayer
- JSR ResetLevelValues
- LDA #STATELOADPLAYING
- STA gamestate
- .End:
- RTS
- .TryP2:
- CMP #$92
- BNE .TryMemorium
- LDA #$01
- STA CurrentPlayer
- STA Game2p
- LDA #$00
- STA P2Score
- STA P2Score+1
- STA P2Score+2
- STA P2Score+3
- STA P2Score+4
- STA P2Score+5
- LDA #$02
- STA PlayerLife
- STA PlayerLifeP2
- LDA #STATELOADPLAYING
- STA gamestate
- RTS
- .TryMemorium:
- CMP #$A2
- BNE .TryCredits
- RTS
- .TryCredits:
- CMP #$B2
- BNE .End
- LDA #STATELOADCREDITS
- STA gamestate
- RTS
- StandStill:
- LDA gamestate
- CMP #STATEPLAYING
- BCC .End
- CMP #$08
- BCS .End
- LDX #$00
- LDY #$00
- .Loop2:
- LDA Walk2,x
- STA $0605,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop2
- LDA #$00
- STA AnimTimer
- JSR ResetDuck
- .End:
- RTS
- Walk1:
- .db $01,$02,$00
- .db $06,$07,$08
- .db $10,$11,$12
- .db $1C,$1D,$1E
- .db $27,$28,$29
- Walk2:
- .db $03,$04,$00
- .db $09,$0A,$0B
- .db $13,$14,$15
- .db $1F,$20,$00
- .db $00,$2A,$00
- Walk3:
- .db $01,$02,$00
- .db $06,$0C,$08
- .db $16,$17,$18
- .db $21,$22,$23
- .db $2B,$2C,$2D
- Kick:
- .db $05,$02,$00
- .db $0D,$0E,$0F
- .db $19,$1A,$1B
- .db $24,$25,$26
- .db $00,$2E,$2F
- JumpSprites:
- .db $00,$00,$00
- .db $03,$04,$00
- .db $38,$0A,$00
- .db $42,$43,$00
- .db $4B,$4C,$00
- DuckSprites:
- .db $00,$00,$00
- .db $00,$03,$04
- .db $00,$37,$0A
- .db $00,$40,$41
- .db $00,$48,$4A
- DuckAttackSprites:
- .db $00,$00,$00
- .db $00,$05,$02
- .db $34,$35,$36
- .db $3D,$3E,$3F
- .db $00,$48,$49
- JumpAttackSprites:
- .db $00,$00,$00
- .db $00,$05,$02
- .db $34,$54,$36
- .db $5B,$5C,$3F
- .db $61,$62,$49
- GrandmaSprites:
- .db $30,$31
- .db $39,$3A
- .db $44,$45
- .db $4D,$4E
- GrandmaSprites2:
- .db $32,$33
- .db $3B,$3C
- .db $46,$47
- .db $4F,$50
- KidSprites:
- .db $59,$5A
- .db $5F,$60
- .db $65,$66
- .db $00,$00
- KidSprites2:
- .db $57,$58
- .db $5D,$5E
- .db $63,$64
- .db $00,$00
- NerdSprites:
- .db $C5,$C6
- .db $CA,$CB
- .db $DA,$DB
- .db $EA,$EB
- NerdSprites2:
- .db $C7,$C8
- .db $CC,$CD
- .db $DC,$DD
- .db $EC,$ED
- Bird1:
- .db $D6,$D7,$D8
- .db $E6,$E7,$00,$00,$00
- Bird2:
- .db $D9,$E0,$E2
- .db $E9,$E1,$00,$00,$00
- PlaceBird:
- LDX #$00
- LDY #$00
- LDA PlaceFlag
- CMP #$07
- BCC .End
- CMP #$09
- BCS .End
- .PlaceBegin:
- LDA $0640,x
- CMP #$FE
- BEQ .Place
- TXA
- CLC
- ADC #$20
- TAX
- INY
- CPX #$80
- BNE .PlaceBegin
- .End:
- RTS
- .Place:
- LDA #$74
- STA $0640,x
- STA $0644,x
- STA $0648,x
- CLC
- ADC #$08
- STA $064C,x
- STA $0650,x
- LDA #$20
- STA $0654,x
- STA $0658,x
- STA $065C,x
- LDA PlaceFlag
- CMP #$07
- BNE .PlaceRight
- .PlaceLeft:
- LDA #$01
- STA EnemyMoveDirection,y
- LDA #$20
- STA $0657,x
- STA $065B,x
- STA $065F,x
- LDA #$10
- STA $0643,x
- STA $064F,x
- SEC
- SBC #$08
- STA $0647,x
- STA $0653,x
- SEC
- SBC #$08
- STA $064B,x
- LDA #%01000011
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- JSR SetBirdSprite
- RTS
- .PlaceRight:
- LDA #$02
- STA EnemyMoveDirection,y
- LDA #$E7
- STA $0643,x
- STA $064F,x
- CLC
- ADC #$08
- STA $0647,x
- STA $0653,x
- CLC
- ADC #$08
- STA $064B,x
- LDA #$03
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- JSR SetBirdSprite
- RTS
- SetBirdSprite:
- LDY #$00
- .Loop:
- LDA Bird1,y
- STA $0641,x
- INY
- TXA
- CLC
- ADC #$04
- TAX
- CPY #$08
- BNE .Loop
- LDA #$00
- STA PlaceFlag
- RTS
- MoveBird:
- LDX #$00
- LDY #$00
- .Reset:
- LDA #$00
- STA LoopVar
- .Loop:
- CPX #$00
- BNE .Try2
- LDA EnemyDead
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .Try2:
- CPX #$20
- BNE .Try3
- LDA EnemyDead+1
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .Try3:
- CPX #$40
- BNE .Try4
- LDA EnemyDead+2
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .Try4:
- CPX #$60
- BNE .Cycle
- LDA EnemyDead+3
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .StartMove:
- LDA $0640,x
- CMP #$FE
- BEQ .Cycle
- LDA $0641,x
- CMP #$D6
- BEQ .BeginMove
- CMP #$D9
- BEQ .BeginMove
- .Cycle:
- TXA
- CLC
- ADC #$20
- TAX
- INY
- CPX #$A0
- BNE .Loop
- .End:
- RTS
- .BeginMove:
- TXA
- STA XTemp ;Enemy offset
- LSR A ;/2
- LSR A ;/2
- STA YTemp ;Partial movement offset
- LDX XTemp
- LDA EnemyMoveDirection,y
- CMP #$02
- BEQ .BeginMoveLeft
- JMP .BeginMoveRight
- .BeginMoveLeft:
- TYA
- STA YTemp2
- .MoveLeft:
- LDA $0643,x
- CMP #$03
- BCS .Skip3
- JSR KillBird
- JMP .Cycle
- .Skip3:
- LDY YTemp
- LDA NoScroll
- CMP #$01
- BEQ .NoButtons
- LDA ButtonsP1
- AND #%00000001
- BNE .LeftRight
- LDA ButtonsP1
- AND #%00000010
- BNE .LeftLeft
- .NoButtons:
- LDA EnemyMovePart,y
- SEC
- SBC #$C0
- STA EnemyMovePart,y
- LDA $0643,x
- SBC #$02
- STA $0643,x
- JMP .Connect2
- .LeftRight:
- LDA EnemyMovePart,y
- SEC
- SBC #$80
- STA EnemyMovePart,y
- LDA $0643,x
- SBC #$03
- STA $0643,x
- JMP .Connect2
- .LeftLeft:
- LDA EnemyMovePart,y
- SEC
- SBC #$20
- STA EnemyMovePart,y
- LDA $0643,x
- SBC #$02
- STA $0643,x
- .Connect2:
- INC LoopVar
- INY
- INC YTemp
- INX
- INX
- INX
- INX
- LDA LoopVar
- CMP #$08
- BNE .Skip3
- TXA
- STA XTemp
- JSR AnimateBird
- LDX XTemp
- INC YTemp2
- LDY YTemp2
- JMP .Reset
- .BeginMoveRight:
- TYA
- STA YTemp2
- .MoveRight:
- LDA $0643,x
- CMP #$FC
- BCC .Skip2
- JSR KillBird
- JMP .Cycle
- .Skip2:
- LDY YTemp
- LDA NoScroll
- CMP #$01
- BEQ .NoButtons2
- LDA ButtonsP1
- AND #%00000001
- BNE .RightRight
- LDA ButtonsP1
- AND #%00000010
- BNE .RightLeft
- .NoButtons2:
- LDA EnemyMovePart,y
- CLC
- ADC #$C0
- STA EnemyMovePart,y
- LDA $0643,x
- ADC #$02
- STA $0643,x
- JMP .Connect
- .RightLeft:
- LDA EnemyMovePart,y
- CLC
- ADC #$80
- STA EnemyMovePart,y
- LDA $0643,x
- ADC #$03
- STA $0643,x
- JMP .Connect
- .RightRight:
- LDA EnemyMovePart,y
- CLC
- ADC #$20
- STA EnemyMovePart,y
- LDA $0643,x
- ADC #$02
- STA $0643,x
- .Connect:
- INC LoopVar
- INC YTemp
- INY
- INX
- INX
- INX
- INX
- LDA LoopVar
- CMP #$08
- BNE .Skip2
- TXA
- STA XTemp
- JSR AnimateBird
- LDX XTemp
- INC YTemp2
- LDY YTemp2
- JMP .Reset
- AnimateBird:
- LDX #$00
- LDY #$00
- .Loop:
- LDA $0641,x
- CMP #$D6
- BEQ .Move
- CMP #$D9
- BEQ .Move
- JMP .End
- .Move:
- ; LDA $0653,x
- ; STA $0643,x
- LDA EnemyAnimateTimer,y
- CMP #$08
- BEQ .Walk1
- CMP #$10
- BEQ .Walk2
- RTS
- .Walk1:
- LDA Bird1
- STA $0641,x
- LDA Bird1+1
- STA $0645,x
- LDA Bird1+2
- STA $0649,x
- LDA Bird1+3
- STA $064D,x
- LDA Bird1+4
- STA $0651,x
- TXA
- CLC
- ADC #$20
- TAX
- JMP .Mid
- ; RTS
- .Walk2:
- LDA Bird2
- STA $0641,x
- LDA Bird2+1
- STA $0645,x
- LDA Bird2+2
- STA $0649,x
- LDA Bird2+3
- STA $064D,x
- LDA Bird2+4
- STA $0651,x
- TXA
- CLC
- ADC #$20
- TAX
- JMP .Mid
- .EndPre:
- INY
- .End:
- ; INY
- TXA
- CLC
- ADC #$20
- TAX
- .Mid:
- CPX #$80
- BEQ .Finish
- JMP .Loop
- .Finish:
- RTS
- AnimateChum:
- LDA JumpFlag
- CMP #$00
- BNE .End
- INC AnimTimer
- LDA AnimTimer
- CMP #$08
- BCC .1
- CMP #$10
- BCC .2
- CMP #$18
- BCC .3
- CMP #$20
- BCC .2
- CMP #$20
- BNE .End
- LDA #$00
- STA AnimTimer
- .End:
- RTS
- .1:
- LDX #$00
- LDY #$00
- .Loop1:
- LDA Walk1,x
- STA $0605,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop1
- RTS
- .2:
- LDX #$00
- LDY #$00
- .Loop2:
- LDA Walk2,x
- STA $0605,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop2
- RTS
- .3:
- LDX #$00
- LDY #$00
- .Loop3:
- LDA Walk3,x
- STA $0605,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop3
- RTS
- ActuallyDuck:
- LDX #$00
- LDY #$00
- .Loop:
- LDA DuckSprites,x
- STA $0605,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop
- .End:
- RTS
- MoveRight:
- LDA BossDead
- CMP #$00
- BEQ .Start2
- JMP .End
- .Start2:
- LDA ButtonsP1
- AND #%00000001
- BNE .Start
- JMP .End
- .Start:
- LDA DuckFlag
- CMP #$01
- BNE .SkipJump
- LDA JumpFlag
- CMP #$00
- BNE .SkipJump
- LDA ButtonsP1
- AND #%00000100
- BNE .End
- .SkipJump:
- JSR AnimateChum
- LDA RightHeld
- CMP #$01
- BEQ .SkipTurn
- LDA #$01
- STA RightHeld
- STA DirFacing
- .Turn:
- LDX #$00
- .Loop:
- LDA #%01000000
- STA $0606,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop
- JSR SwapRight
- .SkipTurn:
- LDA $0606
- CMP #$00
- BEQ .Turn
- LDA DuckFlag
- CMP #$01
- BNE .NotDuck
- JSR ResetDuck
- .NotDuck:
- LDA BossPlacedFlag
- CMP #$01
- BEQ .MoveInstead
- LDA NametableCount
- CMP #$08
- BEQ .MoveInstead
- LDA $0607
- CMP #$88
- BCC .MoveInstead
- JSR ScrollFanR
- LDA Xscroll
- CLC
- ADC #$01
- STA Xscroll
- LDA #$00
- STA NoScroll
- LDA Xscroll ; check if the scroll just wrapped from 255 to 0
- BNE .End
- INC NametableCount
- JSR ResetFanStuff
- .SkipInc:
- LDA nametable ; load current nametable number (0 or 1)
- EOR #$01 ; exclusive OR of bit 0 will flip that bit
- STA nametable ; so if nametable was 0, now 1
- ; if nametable was 1, now 0
- .End:
- RTS
- .MoveInstead:
- LDA $0607
- CMP #$F0
- BCS .End
- LDX #$00
- .MoveLoop:
- LDA $0607,x
- CLC
- ADC #$01
- STA $0607,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .MoveLoop
- LDA #$01
- STA NoScroll
- RTS
- SwapRight:
- LDA $060F
- CMP $0607
- BCC .End
- LDA $0607
- STA $060F
- STA $061B
- STA $0627
- STA $0633
- STA $063F
- CLC
- ADC #$08
- STA $060B
- STA $0617
- STA $0623
- STA $062F
- STA $063B
- CLC
- ADC #$08
- STA $0607
- STA $0613
- STA $061F
- STA $062B
- STA $0637
- .End:
- RTS
- SwapLeft:
- LDA $0607
- CMP $060F
- BCC .End
- LDA $0607
- STA $060F
- STA $061B
- STA $0627
- STA $0633
- STA $063F
- SEC
- SBC #$08
- STA $060B
- STA $0617
- STA $0623
- STA $062F
- STA $063B
- SEC
- SBC #$08
- STA $0607
- STA $0613
- STA $061F
- STA $062B
- STA $0637
- .End:
- RTS
- UpdateOtherPoints:
- LDA Game2p
- CMP #$01
- BNE .End
- LDX #$00
- LDA CurrentPlayer
- CMP #$01
- BEQ .Second
- LDA #$20
- STA $2006
- LDA #$44
- STA $2006
- .Loop:
- LDA P1Score,x
- CLC
- ADC #$D0
- STA $2007
- INX
- CPX #$06
- BNE .Loop
- RTS
- .Second:
- LDA #$20
- STA $2006
- LDA #$58
- STA $2006
- .Loop2:
- LDA P2Score,x
- CLC
- ADC #$D0
- STA $2007
- INX
- CPX #$06
- BNE .Loop2
- .End:
- RTS
- LoadBlankNametable:
- LDA $2002
- LDA #$20
- STA $2006
- LDA #$00
- STA $2006
- LDX #$04
- LDY #$00
- .TitleLoop:
- LDA #$00 ;load nametable
- STA $2007 ;draw tile
- INY ;X is 0, so move on to get new counter number
- BNE .TitleLoop
- ;;Outer Loop
- INC AddrHigh
- DEX
- BNE .TitleLoop
- RTS
- LoadBlankAttribute:
- LDA $2002
- LDA #$23
- STA $2006
- LDA #$C0
- STA $2006
- LDY #$00
- .Loop:
- LDA #$00
- STA $2007
- INY
- CPY #$40
- BNE .Loop
- RTS
- LoadGameOverText:
- LDA #$21
- STA $2006
- LDA #$EB
- STA $2006
- LDX #$00
- .Loop:
- LDA GameOverText,x
- STA $2007
- INX
- CPX #$0A
- BNE .Loop
- RTS
- GameOverText:
- .db $E6,$E0,$EC,$E4,$00,$00,$EE,$F5,$E4,$F1
- UpdateHiScore:
- LDX #$00
- .P1Loop:
- LDA Game2p
- CMP #$01
- BNE .Regular
- LDA CurrentPlayer
- CMP #$01
- BEQ .Regular
- JMP .2ndCompare
- .Regular:
- LDA P1Score,x
- CMP HiScore,x
- BCC .End
- LDA HiScore,x
- CMP P1Score,x
- BCC .NewHighP1
- INX
- CPX #$06
- BNE .P1Loop
- .NewHighP1:
- LDX #$00
- .EqualLoop:
- LDA P1Score,x
- CMP HiScore,x
- BNE .NotEqual
- INX
- CPX #$06
- BNE .EqualLoop
- RTS
- .NotEqual:
- LDX #$00
- .HiLoop:
- LDA P1Score,x
- STA HiScore,x
- STA $0550,x
- INX
- CPX #$06
- BNE .HiLoop
- LDA #$01
- STA AwardHiScoreFlag
- .End:
- RTS
- .2ndCompare:
- LDA P2Score,x
- CMP HiScore,x
- BCC .End
- LDA HiScore,x
- CMP P2Score,x
- BCC .NewHighP2
- INX
- CPX #$06
- BNE .2ndCompare
- .NewHighP2:
- LDX #$00
- .EqualLoop2:
- LDA P2Score,x
- CMP HiScore,x
- BNE .NotEqual2
- INX
- CPX #$06
- BNE .EqualLoop2
- RTS
- .NotEqual2:
- LDX #$00
- .HiLoop2:
- LDA P2Score,x
- STA HiScore,x
- STA $0550,x
- INX
- CPX #$06
- BNE .HiLoop2
- LDA #$01
- STA AwardHiScoreFlag
- RTS
- AnimateVerticalWater:
- JSR AnimateVertical
- JSR AnimateVertical2
- RTS
- AnimateVertical:
- LDX #$00
- LDY #$00
- LDA BossTimer
- CMP #$07
- BEQ .1
- CMP #$0F
- BEQ .2
- CMP #$17
- BEQ .3
- RTS
- .1:
- LDA Stream1Coords,x
- STA $2006
- LDA Stream1Coords+1,x
- STA $2006
- LDA Stream1,y
- STA $2007
- LDA Stream2Coords,x
- STA $2006
- LDA Stream2Coords+1,x
- STA $2006
- LDA Stream1,y
- STA $2007
- INX
- INX
- INY
- CPY #$04
- BNE .1
- RTS
- .2:
- LDA Stream1Coords,x
- STA $2006
- LDA Stream1Coords+1,x
- STA $2006
- LDA Stream2,y
- STA $2007
- LDA Stream2Coords,x
- STA $2006
- LDA Stream2Coords+1,x
- STA $2006
- LDA Stream2,y
- STA $2007
- INX
- INX
- INY
- CPY #$04
- BNE .2
- RTS
- .3:
- LDA Stream1Coords,x
- STA $2006
- LDA Stream1Coords+1,x
- STA $2006
- LDA Stream3,y
- STA $2007
- LDA Stream2Coords,x
- STA $2006
- LDA Stream2Coords+1,x
- STA $2006
- LDA Stream3,y
- STA $2007
- INX
- INX
- INY
- CPY #$04
- BNE .3
- RTS
- AnimateVertical2:
- LDX #$00
- LDY #$00
- LDA BossTimer
- CMP #$06
- BEQ .1
- CMP #$0E
- BEQ .2
- CMP #$16
- BEQ .3
- RTS
- .1:
- LDA Stream3Coords,x
- STA $2006
- LDA Stream3Coords+1,x
- STA $2006
- LDA Stream1,y
- STA $2007
- LDA Stream4Coords,x
- STA $2006
- LDA Stream4Coords+1,x
- STA $2006
- LDA Stream1,y
- STA $2007
- INX
- INX
- INY
- CPY #$02
- BNE .1
- RTS
- .2:
- LDA Stream3Coords,x
- STA $2006
- LDA Stream3Coords+1,x
- STA $2006
- LDA Stream2,y
- STA $2007
- LDA Stream4Coords,x
- STA $2006
- LDA Stream4Coords+1,x
- STA $2006
- LDA Stream2,y
- STA $2007
- INX
- INX
- INY
- CPY #$02
- BNE .2
- RTS
- .3:
- LDA Stream3Coords,x
- STA $2006
- LDA Stream3Coords+1,x
- STA $2006
- LDA Stream3,y
- STA $2007
- LDA Stream4Coords,x
- STA $2006
- LDA Stream4Coords+1,x
- STA $2006
- LDA Stream3,y
- STA $2007
- INX
- INX
- INY
- CPY #$02
- BNE .3
- RTS
- Stream3Coords:
- .db $21,$A7,$21,$C7
- Stream4Coords:
- .db $21,$B8,$21,$D8
- Stream1Coords:
- .db $21,$69,$21,$89,$21,$A9,$21,$C9
- Stream2Coords:
- .db $21,$76,$21,$96,$21,$B6,$21,$D6
- Stream1:
- .db $C1,$C2,$C3,$C4
- Stream2:
- .db $C5,$C6,$C7,$C8
- Stream3:
- .db $C9,$CA,$CB,$CC
- MoveLeft:
- LDA BossDead
- CMP #$00
- BEQ .Start2
- JMP .End
- .Start2:
- LDA ButtonsP1
- AND #%00000010
- BNE .Start
- JMP .End
- .Start:
- LDA DuckFlag
- CMP #$01
- BNE .SkipJump
- LDA JumpFlag
- CMP #$00
- BNE .SkipJump
- LDA ButtonsP1
- AND #%00000100
- BNE .End
- .SkipJump:
- JSR AnimateChum
- LDA LeftHeld
- CMP #$01
- BEQ .SkipTurn
- LDA #$01
- STA LeftHeld
- LDA #$00
- STA DirFacing
- .Turn:
- LDX #$00
- .Loop:
- LDA #%00
- STA $0606,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop
- JSR SwapLeft
- .SkipTurn:
- LDA $0606
- CMP #$00
- BNE .Turn
- LDA DuckFlag
- CMP #$01
- BNE .NotDuck
- JSR ResetDuck
- .NotDuck:
- LDA BossPlacedFlag
- CMP #$01
- BEQ .MoveInstead
- LDA NametableCount
- CMP #$00
- BNE .Scroll
- LDA Xscroll
- CMP #$00
- BNE .Scroll
- JMP .MoveInstead
- .Scroll:
- LDA $0607
- CMP #$78
- BCS .MoveInstead
- JSR ScrollFanL
- LDA Xscroll
- SEC
- SBC #$01
- STA Xscroll
- LDA #$00
- STA NoScroll
- LDA Xscroll ; check if the scroll just wrapped from 255 to 0
- CMP #$FF
- BNE .End
- DEC NametableCount
- JSR ResetFanStuff
- LDA nametable ; load current nametable number (0 or 1)
- EOR #$01 ; exclusive OR of bit 0 will flip that bit
- STA nametable ; so if nametable was 0, now 1
- ; if nametable was 1, now 0
- .End:
- RTS
- .MoveInstead:
- LDA $0607
- CMP #$09
- BCC .End
- LDX #$00
- .MoveLoop:
- LDA $0607,x
- SEC
- SBC #$01
- STA $0607,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .MoveLoop
- LDA #$01
- STA NoScroll
- RTS
- MoveDown:
- RTS
- RunAttackDelay:
- LDA AttackDelay
- CMP #$00
- BEQ .End
- INC AttackDelay
- LDA AttackDelay
- CMP #$10
- BCC .End
- LDA #$00
- STA AttackDelay
- STA AttackPrevent
- .End:
- RTS
- PixelAdjust:
- LDA JumpFlag
- CMP #$00
- BEQ .NotJumping
- LDA JumpAttackFlag
- CMP #$01
- BEQ .End
- LDA #$01
- STA JumpAttackFlag
- .NotJumping:
- LDA $0606
- CMP #$00
- BEQ .Left
- LDX #$00
- .Loop:
- LDA $0607,x
- CLC
- ADC #$08
- STA $0607,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop
- .End:
- RTS
- .Left:
- LDX #$00
- .Loop2:
- LDA $0607,x
- SEC
- SBC #$08
- STA $0607,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop2
- RTS
- AdjustDucking:
- LDA ChumAttacking
- CMP #$01
- BEQ .End
- LDA DuckFlag
- CMP #$01
- BEQ .End
- LDA #$01
- STA DuckFlag
- LDA $0607
- CMP $060F
- BCC .Left
- LDA #$01
- STA DuckFacing
- JMP .Connect
- .Left:
- LDA #$00
- STA DuckFacing
- .Connect:
- JSR PixelAdjust
- .End:
- RTS
- ChumJump:
- LDA ButtonsP1
- AND #%00000100
- BNE .End
- LDA ButtonsP1
- AND #%10000000
- BEQ .End
- LDA BossDead
- CMP #$00
- BNE .End
- LDA AttackPrevent
- CMP #$01
- BEQ .End
- LDA AHeld
- CMP #$01
- BEQ .End
- LDA DuckFlag
- CMP #$01
- BNE .NoFix
- JSR ResetDuck
- .NoFix:
- LDA #$01
- STA AHeld
- STA JumpFlag
- .End:
- RTS
- ChumDuck:
- LDA ButtonsP1
- AND #%00000011
- BNE .End
- LDA ButtonsP1
- AND #%00000100
- BEQ .End
- LDA JumpFlag
- CMP #$00
- BNE .End
- JSR AdjustDucking
- JSR ActuallyDuck
- .End:
- RTS
- EraseFan:
- LDA FanPlaced
- CMP #$01
- BNE .End
- LDA FanErased
- CMP #$00
- BNE .End
- LDA #$25
- STA $0560
- LDA #$58
- STA $0561
- LDX #$00
- .Loop:
- LDA #$07
- STA $0562,x
- INX
- CPX #$06
- BNE .Loop
- LDA #$01
- STA FanErased
- .End:
- RTS
- ScrollFanR:
- LDX #$00
- .Loop:
- LDA $06C3,x
- SEC
- SBC #$01
- STA $06C3,x
- INX
- INX
- INX
- INX
- CPX #$10
- BNE .Loop
- DEC $06E3
- RTS
- ScrollFanL:
- LDX #$00
- .Loop:
- LDA $06C3,x
- CLC
- ADC #$01
- STA $06C3,x
- INX
- INX
- INX
- INX
- CPX #$10
- BNE .Loop
- INC $06E3
- RTS
- DropFan:
- JSR FanCollision
- LDA FanErased
- CMP #$02
- BNE .End
- LDA FanFallDir
- CMP #$00
- BEQ .Down
- CMP #$01
- BEQ .Up
- CMP #$02
- BEQ .Down
- RTS
- .Down:
- LDA $06C0
- CMP #$B7
- BCS .Set
- LDX #$00
- .Loop:
- LDA $06C0,x
- CLC
- ADC #$02
- CLC
- ADC FanVelocity
- STA $06C0,x
- INX
- INX
- INX
- INX
- CPX #$10
- BNE .Loop
- LDA $06E0
- CLC
- ADC #$02
- CLC
- ADC FanVelocity
- STA $06E0
- LDA FanVelocityPart
- CLC
- ADC #$10
- STA FanVelocityPart
- LDA FanVelocity
- ADC #$00
- STA FanVelocity
- .End:
- RTS
- .Set:
- LDA FanFallDir
- CMP #$01
- BEQ .2
- CMP #$02
- BEQ .End2
- LDA #$01
- STA FanFallDir
- LDA #%01000000
- STA $06C2
- STA $06C6
- STA $06CA
- STA $06CE
- STA $06E2
- RTS
- .Up:
- LDX #$00
- .Loop2:
- LDA $06C0
- CMP #$AF
- BCC .Set
- LDA $06C0,x
- SEC
- SBC #$02
- STA $06C0,x
- INX
- INX
- INX
- INX
- CPX #$10
- BNE .Loop2
- LDA $06E0
- SEC
- SBC #$02
- STA $06E0
- RTS
- .2:
- LDA #$02
- STA FanFallDir
- LDA #$00
- STA FanVelocity
- RTS
- .End2:
- INC FanDelayTimer
- LDA FanDelayTimer
- CMP #$10
- BNE .End3
- LDA #$FE
- STA $06C0
- STA $06C4
- STA $06C8
- STA $06CC
- STA $06E0
- STA $06C3
- STA $06C7
- STA $06CB
- STA $06CF
- STA $06E3
- .End3:
- RTS
- PlaceGrandma:
- LDX #$00
- LDY #$00
- LDA PlaceFlag
- CMP #$00
- BEQ .End
- CMP #$03
- BCS .End
- .PlaceBegin:
- LDA $0640,x
- CMP #$FE
- BEQ .Place
- TXA
- CLC
- ADC #$20
- TAX
- INY
- CPX #$80
- BNE .PlaceBegin
- .End:
- RTS
- .Place:
- LDA #$9C
- STA $0640,x
- STA $0644,x
- CLC
- ADC #$08
- STA $0648,x
- STA $064C,x
- CLC
- ADC #$08
- STA $0650,x
- STA $0654,x
- CLC
- ADC #$08
- STA $0658,x
- STA $065C,x
- LDA PlaceFlag
- CMP #$01
- BNE .PlaceRight
- .PlaceLeft:
- LDA #$01
- STA EnemyMoveDirection,y
- LDA #$09
- STA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- SEC
- SBC #$08
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- LDA #%01000001
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- STA $0656,x
- STA $065A,x
- STA $065E,x
- JSR SetGrandmaSprite
- RTS
- .PlaceRight:
- LDA #$02
- STA EnemyMoveDirection,y
- LDA #$E7
- STA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- CLC
- ADC #$08
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- LDA #$01
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- STA $0656,x
- STA $065A,x
- STA $065E,x
- JSR SetGrandmaSprite
- RTS
- SetGrandmaSprite:
- LDY #$00
- .Loop:
- LDA GrandmaSprites,y
- STA $0641,x
- INY
- TXA
- CLC
- ADC #$04
- TAX
- CPY #$08
- BNE .Loop
- LDA #$00
- STA PlaceFlag
- RTS
- MoveGrandma:
- LDX #$00
- LDY #$00
- .Reset:
- LDA #$00
- STA LoopVar
- .Loop:
- CPX #$00
- BNE .Try2
- LDA EnemyDead
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .Try2:
- CPX #$20
- BNE .Try3
- LDA EnemyDead+1
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .Try3:
- CPX #$40
- BNE .Try4
- LDA EnemyDead+2
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .Try4:
- CPX #$60
- BNE .StartMove
- LDA EnemyDead+3
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .StartMove:
- LDA $0640,x
- CMP #$FE
- BEQ .Cycle
- LDA $0641,x
- CMP #$30
- BEQ .BeginMove
- CMP #$32
- BEQ .BeginMove
- .Cycle:
- TXA
- CLC
- ADC #$20
- TAX
- INY
- CPX #$A0
- BNE .Loop
- RTS
- .BeginMove:
- TXA
- STA XTemp ;Enemy offset
- LSR A ;/2
- LSR A ;/2
- STA YTemp ;Partial movement offset
- LDX XTemp
- LDA EnemyMoveDirection,y
- CMP #$02
- BEQ .BeginMoveLeft
- JMP .BeginMoveRight
- .BeginMoveLeft:
- TYA
- STA YTemp2
- .MoveLeft:
- LDA $0643,x
- CMP #$3C
- BCC .Skip2
- CMP #$40
- BCS .Skip2
- JSR RotateGrandmaRight
- .Skip2:
- LDY YTemp
- LDA NoScroll
- CMP #$01
- BEQ .NoButtons
- LDA ButtonsP1
- AND #%00000001
- BNE .LeftRight
- LDA ButtonsP1
- AND #%00000010
- BNE .LeftLeft
- .NoButtons:
- LDA EnemyMovePart,y
- SEC
- SBC #$C0
- STA EnemyMovePart,y
- LDA $0643,x
- SBC #$00
- STA $0643,x
- JMP .Connect2
- .LeftRight:
- LDA EnemyMovePart,y
- SEC
- SBC #$80
- STA EnemyMovePart,y
- LDA $0643,x
- SBC #$01
- STA $0643,x
- JMP .Connect2
- .LeftLeft:
- LDA EnemyMovePart,y
- SEC
- SBC #$20
- STA EnemyMovePart,y
- LDA $0643,x
- SBC #$00
- STA $0643,x
- .Connect2:
- INC LoopVar
- INY
- INC YTemp
- INX
- INX
- INX
- INX
- LDA LoopVar
- CMP #$08
- BNE .Skip2
- TXA
- STA XTemp
- JSR AnimateGrandma
- LDX XTemp
- INC YTemp2
- LDY YTemp2
- JMP .Reset
- .BeginMoveRight:
- TYA
- STA YTemp2
- .MoveRight:
- LDA $0643,x
- CMP #$C0
- BCC .Skip
- CMP #$C4
- BCS .Skip
- JSR RotateGrandmaLeft
- .Skip:
- LDY YTemp
- LDA NoScroll
- CMP #$01
- BEQ .NoButtons2
- LDA ButtonsP1
- AND #%00000001
- BNE .RightRight
- LDA ButtonsP1
- AND #%00000010
- BNE .RightLeft
- .NoButtons2:
- LDA EnemyMovePart,y
- CLC
- ADC #$C0
- STA EnemyMovePart,y
- LDA $0643,x
- ADC #$00
- STA $0643,x
- JMP .Connect
- .RightLeft:
- LDA EnemyMovePart,y
- CLC
- ADC #$80
- STA EnemyMovePart,y
- LDA $0643,x
- ADC #$01
- STA $0643,x
- JMP .Connect
- .RightRight:
- LDA EnemyMovePart,y
- CLC
- ADC #$20
- STA EnemyMovePart,y
- LDA $0643,x
- ADC #$00
- STA $0643,x
- .Connect:
- INC LoopVar
- INC YTemp
- INY
- INX
- INX
- INX
- INX
- LDA LoopVar
- CMP #$08
- BNE .Skip
- TXA
- STA XTemp
- JSR AnimateGrandma
- LDX XTemp
- INC YTemp2
- LDY YTemp2
- JMP .Reset
- RotateGrandmaLeft:
- LDA #$B7
- STA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- LDA #$BF
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- LDA #$01
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- STA $0656,x
- STA $065A,x
- STA $065E,x
- LDA #$02
- STA EnemyMoveDirection,y
- RTS
- RotateGrandmaRight:
- LDA #$49
- STA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- LDA #$41
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- LDA #%01000001
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- STA $0656,x
- STA $065A,x
- STA $065E,x
- LDA #$01
- STA EnemyMoveDirection,y
- RTS
- AnimateGrandma:
- LDX #$00
- LDY #$00
- .Loop:
- CPX #$00
- BNE .Try2
- LDA EnemyDead
- CMP #$00
- BEQ .StartMove
- JMP .End
- .Try2:
- CPX #$20
- BNE .Try3
- LDA EnemyDead+1
- CMP #$00
- BEQ .StartMove
- JMP .End
- .Try3:
- CPX #$40
- BNE .Try4
- LDA EnemyDead+2
- CMP #$00
- BEQ .StartMove
- JMP .End
- .Try4:
- CPX #$60
- BNE .StartMove
- LDA EnemyDead+3
- CMP #$00
- BEQ .StartMove
- JMP .End
- .StartMove:
- LDA $0641,x
- CMP #$30
- BEQ .Move
- CMP #$32
- BEQ .Move
- JMP .End
- .Move:
- LDA $0653,x
- STA $0643,x
- LDA EnemyAnimateTimer,y
- CMP #$08
- BEQ .Walk1
- CMP #$10
- BEQ .Walk2
- RTS
- .Walk1:
- LDA GrandmaSprites
- STA $0641,x
- LDA GrandmaSprites+1
- STA $0645,x
- LDA GrandmaSprites+2
- STA $0649,x
- LDA GrandmaSprites+3
- STA $064D,x
- LDA GrandmaSprites+4
- STA $0651,x
- LDA GrandmaSprites+5
- STA $0655,x
- LDA GrandmaSprites+6
- STA $0659,x
- LDA GrandmaSprites+7
- STA $065D,x
- TXA
- CLC
- ADC #$20
- TAX
- JMP .Mid
- ; RTS
- .Walk2:
- LDA GrandmaSprites2
- STA $0641,x
- LDA GrandmaSprites2+1
- STA $0645,x
- LDA GrandmaSprites2+2
- STA $0649,x
- LDA GrandmaSprites2+3
- STA $064D,x
- LDA GrandmaSprites2+4
- STA $0651,x
- LDA GrandmaSprites2+5
- STA $0655,x
- LDA GrandmaSprites2+6
- STA $0659,x
- LDA GrandmaSprites2+7
- STA $065D,x
- TXA
- CLC
- ADC #$20
- TAX
- JMP .Mid
- .EndPre:
- INY
- .End:
- ; INY
- TXA
- CLC
- ADC #$20
- TAX
- .Mid:
- CPX #$80
- BEQ .Finish
- JMP .Loop
- .Finish:
- RTS
- PlaceKid:
- LDX #$00
- LDY #$00
- LDA PlaceFlag
- CMP #$03
- BCC .End
- CMP #$05
- BCS .End
- .PlaceBegin:
- LDA $0640,x
- CMP #$FE
- BEQ .Place
- TXA
- CLC
- ADC #$20
- TAX
- INY
- CPX #$80
- BNE .PlaceBegin
- .End:
- RTS
- .Place:
- LDA #$A4
- STA $0640,x
- STA $0644,x
- CLC
- ADC #$08
- STA $0648,x
- STA $064C,x
- CLC
- ADC #$08
- STA $0650,x
- STA $0654,x
- CLC
- ADC #$08
- STA $0658,x
- STA $065C,x
- LDA PlaceFlag
- CMP #$03
- BNE .PlaceRight
- .PlaceLeft:
- LDA #$01
- STA EnemyMoveDirection,y
- LDA #$09
- STA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- SEC
- SBC #$08
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- LDA #%01000010
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- STA $0656,x
- STA $065A,x
- STA $065E,x
- JSR SetKidSprite
- RTS
- .PlaceRight:
- LDA #$02
- STA EnemyMoveDirection,y
- LDA #$E7
- STA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- CLC
- ADC #$08
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- LDA #$02
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- STA $0656,x
- STA $065A,x
- STA $065E,x
- JSR SetKidSprite
- RTS
- SetKidSprite:
- LDY #$00
- .Loop:
- LDA KidSprites,y
- STA $0641,x
- INY
- TXA
- CLC
- ADC #$04
- TAX
- CPY #$08
- BNE .Loop
- LDA #$00
- STA PlaceFlag
- RTS
- MoveKid:
- LDX #$00
- LDY #$00
- .Reset:
- LDA #$00
- STA LoopVar
- .Loop:
- CPX #$00
- BNE .Try2
- LDA EnemyDead
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .Try2:
- CPX #$20
- BNE .Try3
- LDA EnemyDead+1
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .Try3:
- CPX #$40
- BNE .Try4
- LDA EnemyDead+2
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .Try4:
- CPX #$60
- BNE .StartMove
- LDA EnemyDead+3
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .StartMove:
- LDA $0640,x
- CMP #$FE
- BEQ .Cycle
- LDA $0641,x
- CMP #$59
- BEQ .BeginMove
- CMP #$57
- BEQ .BeginMove
- .Cycle:
- TXA
- CLC
- ADC #$20
- TAX
- INY
- CPX #$A0
- BNE .Loop
- RTS
- .BeginMove:
- TXA
- STA XTemp ;Enemy offset
- LSR A ;/2
- LSR A ;/2
- STA YTemp ;Partial movement offset
- LDX XTemp
- LDA EnemyMoveDirection,y
- CMP #$02
- BEQ .BeginMoveLeft
- JMP .BeginMoveRight
- .BeginMoveLeft:
- TYA
- STA YTemp2
- .MoveLeft:
- LDA $0643,x
- CMP #$03
- BCS .Skip3
- JSR KillKid
- RTS
- .Skip3:
- LDY YTemp
- LDA NoScroll
- CMP #$01
- BEQ .NoButtons
- LDA ButtonsP1
- AND #%00000001
- BNE .LeftRight
- LDA ButtonsP1
- AND #%00000010
- BNE .LeftLeft
- .NoButtons:
- LDA EnemyMovePart,y
- SEC
- SBC #$C0
- STA EnemyMovePart,y
- LDA $0643,x
- SBC #$02
- STA $0643,x
- JMP .Connect2
- .LeftRight:
- LDA EnemyMovePart,y
- SEC
- SBC #$80
- STA EnemyMovePart,y
- LDA $0643,x
- SBC #$03
- STA $0643,x
- JMP .Connect2
- .LeftLeft:
- LDA EnemyMovePart,y
- SEC
- SBC #$20
- STA EnemyMovePart,y
- LDA $0643,x
- SBC #$02
- STA $0643,x
- .Connect2:
- INC LoopVar
- INY
- INC YTemp
- INX
- INX
- INX
- INX
- LDA LoopVar
- CMP #$08
- BNE .Skip3
- TXA
- STA XTemp
- JSR AnimateKid
- LDX XTemp
- INC YTemp2
- LDY YTemp2
- JMP .Reset
- .BeginMoveRight:
- TYA
- STA YTemp2
- .MoveRight:
- LDA $0643,x
- CMP #$FC
- BCC .Skip2
- JSR KillKid
- RTS
- .Skip2:
- LDY YTemp
- LDA NoScroll
- CMP #$01
- BEQ .NoButtons2
- LDA ButtonsP1
- AND #%00000001
- BNE .RightRight
- LDA ButtonsP1
- AND #%00000010
- BNE .RightLeft
- .NoButtons2:
- LDA EnemyMovePart,y
- CLC
- ADC #$C0
- STA EnemyMovePart,y
- LDA $0643,x
- ADC #$02
- STA $0643,x
- JMP .Connect
- .RightLeft:
- LDA EnemyMovePart,y
- CLC
- ADC #$80
- STA EnemyMovePart,y
- LDA $0643,x
- ADC #$03
- STA $0643,x
- JMP .Connect
- .RightRight:
- LDA EnemyMovePart,y
- CLC
- ADC #$20
- STA EnemyMovePart,y
- LDA $0643,x
- ADC #$02
- STA $0643,x
- .Connect:
- INC LoopVar
- INC YTemp
- INY
- INX
- INX
- INX
- INX
- LDA LoopVar
- CMP #$08
- BNE .Skip2
- TXA
- STA XTemp
- JSR AnimateKid
- LDX XTemp
- INC YTemp2
- LDY YTemp2
- JMP .Reset
- KillKid:
- LDA #$FE
- STA $0640,x
- STA $0643,x
- STA $0644,x
- STA $0647,x
- STA $0648,x
- STA $064B,x
- STA $064C,x
- STA $064F,x
- STA $0650,x
- STA $0653,x
- STA $0654,x
- STA $0657,x
- STA $0658,x
- STA $065B,x
- STA $065C,x
- STA $065F,x
- RTS
- RotateKidLeft:
- LDA #$B7
- STA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- LDA #$BF
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- LDA #$02
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- STA $0656,x
- STA $065A,x
- STA $065E,x
- LDA #$02
- STA EnemyMoveDirection,y
- RTS
- RotateKidRight:
- LDA #$49
- STA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- LDA #$41
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- LDA #%01000010
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- STA $0656,x
- STA $065A,x
- STA $065E,x
- LDA #$01
- STA EnemyMoveDirection,y
- RTS
- AnimateKid:
- LDX #$00
- LDY #$00
- .Loop:
- LDA $0641,x
- CMP #$59
- BEQ .Move
- CMP #$57
- BEQ .Move
- JMP .End
- .Move:
- LDA $0653,x
- STA $0643,x
- LDA EnemyAnimateTimer,y
- CMP #$08
- BEQ .Walk1
- CMP #$10
- BEQ .Walk2
- RTS
- .Walk1:
- LDA KidSprites
- STA $0641,x
- LDA KidSprites+1
- STA $0645,x
- LDA KidSprites+2
- STA $0649,x
- LDA KidSprites+3
- STA $064D,x
- LDA KidSprites+4
- STA $0651,x
- LDA KidSprites+5
- STA $0655,x
- LDA KidSprites+6
- STA $0659,x
- LDA KidSprites+7
- STA $065D,x
- TXA
- CLC
- ADC #$20
- TAX
- JMP .Mid
- ; RTS
- .Walk2:
- LDA KidSprites2
- STA $0641,x
- LDA KidSprites2+1
- STA $0645,x
- LDA KidSprites2+2
- STA $0649,x
- LDA KidSprites2+3
- STA $064D,x
- LDA KidSprites2+4
- STA $0651,x
- LDA KidSprites2+5
- STA $0655,x
- LDA KidSprites2+6
- STA $0659,x
- LDA KidSprites2+7
- STA $065D,x
- TXA
- CLC
- ADC #$20
- TAX
- JMP .Mid
- .EndPre:
- INY
- .End:
- ; INY
- TXA
- CLC
- ADC #$20
- TAX
- .Mid:
- CPX #$80
- BEQ .Finish
- JMP .Loop
- .Finish:
- RTS
- PlaceNerd:
- LDX #$00
- LDY #$00
- LDA PlaceFlag
- CMP #$05
- BCC .End
- CMP #$07
- BCS .End
- .PlaceBegin:
- LDA $0640,x
- CMP #$FE
- BEQ .Place
- TXA
- CLC
- ADC #$20
- TAX
- INY
- CPX #$80
- BNE .PlaceBegin
- .End:
- RTS
- .Place:
- LDA #$9C
- STA $0640,x
- STA $0644,x
- CLC
- ADC #$08
- STA $0648,x
- STA $064C,x
- CLC
- ADC #$08
- STA $0650,x
- STA $0654,x
- CLC
- ADC #$08
- STA $0658,x
- STA $065C,x
- LDA PlaceFlag
- CMP #$05
- BNE .PlaceRight
- .PlaceLeft:
- LDA #$01
- STA EnemyMoveDirection,y
- LDA #$09
- STA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- SEC
- SBC #$08
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- LDA #%01000011
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- STA $0656,x
- STA $065A,x
- STA $065E,x
- JSR SetNerdSprite
- RTS
- .PlaceRight:
- LDA #$02
- STA EnemyMoveDirection,y
- LDA #$E7
- STA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- CLC
- ADC #$08
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- LDA #$03
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- STA $0656,x
- STA $065A,x
- STA $065E,x
- JSR SetNerdSprite
- RTS
- SetNerdSprite:
- LDY #$00
- .Loop:
- LDA NerdSprites,y
- STA $0641,x
- INY
- TXA
- CLC
- ADC #$04
- TAX
- CPY #$08
- BNE .Loop
- LDA #$00
- STA PlaceFlag
- RTS
- MoveNerd:
- LDX #$00
- LDY #$00
- .Reset:
- LDA #$00
- STA LoopVar
- .Loop:
- CPX #$00
- BNE .Try2
- LDA EnemyDead
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .Try2:
- CPX #$20
- BNE .Try3
- LDA EnemyDead+1
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .Try3:
- CPX #$40
- BNE .Try4
- LDA EnemyDead+2
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .Try4:
- CPX #$60
- BNE .StartMove
- LDA EnemyDead+3
- CMP #$00
- BEQ .StartMove
- JMP .Cycle
- .StartMove:
- LDA $0640,x
- CMP #$FE
- BEQ .Cycle
- LDA $0641,x
- CMP #$C5
- BEQ .BeginMove
- CMP #$C7
- BEQ .BeginMove
- .Cycle:
- TXA
- CLC
- ADC #$20
- TAX
- INY
- CPX #$A0
- BNE .Loop
- RTS
- .BeginMove:
- TXA
- STA XTemp ;Enemy offset
- LSR A ;/2
- LSR A ;/2
- STA YTemp ;Partial movement offset
- LDX XTemp
- LDA EnemyMoveDirection,y
- CMP #$02
- BEQ .BeginMoveLeft
- JMP .BeginMoveRight
- .BeginMoveLeft:
- TYA
- STA YTemp2
- .MoveLeft:
- LDA $0643,x
- CMP #$0C
- BCC .Skip2
- CMP #$10
- BCS .Skip2
- JSR RotateNerdRight
- .Skip2:
- LDY YTemp
- LDA NoScroll
- CMP #$01
- BEQ .NoButtons
- LDA ButtonsP1
- AND #%00000001
- BNE .LeftRight
- LDA ButtonsP1
- AND #%00000010
- BNE .LeftLeft
- .NoButtons:
- LDA EnemyMovePart,y
- SEC
- SBC #$40
- STA EnemyMovePart,y
- LDA $0643,x
- SBC #$01
- STA $0643,x
- JMP .Connect2
- .LeftRight:
- LDA EnemyMovePart,y
- SEC
- SBC #$00
- STA EnemyMovePart,y
- LDA $0643,x
- SBC #$02
- STA $0643,x
- JMP .Connect2
- .LeftLeft:
- LDA EnemyMovePart,y
- SEC
- SBC #$A0
- STA EnemyMovePart,y
- LDA $0643,x
- SBC #$00
- STA $0643,x
- .Connect2:
- INC LoopVar
- INY
- INC YTemp
- INX
- INX
- INX
- INX
- LDA LoopVar
- CMP #$08
- BNE .Skip2
- TXA
- STA XTemp
- JSR AnimateNerd
- LDX XTemp
- INC YTemp2
- LDY YTemp2
- JMP .Reset
- .BeginMoveRight:
- TYA
- STA YTemp2
- .MoveRight:
- LDA $0643,x
- CMP #$F0
- BCC .Skip
- CMP #$F4
- BCS .Skip
- JSR RotateNerdLeft
- .Skip:
- LDY YTemp
- LDA NoScroll
- CMP #$01
- BEQ .NoButtons2
- LDA ButtonsP1
- AND #%00000001
- BNE .RightRight
- LDA ButtonsP1
- AND #%00000010
- BNE .RightLeft
- .NoButtons2:
- LDA EnemyMovePart,y
- CLC
- ADC #$40
- STA EnemyMovePart,y
- LDA $0643,x
- ADC #$01
- STA $0643,x
- JMP .Connect
- .RightLeft:
- LDA EnemyMovePart,y
- CLC
- ADC #$00
- STA EnemyMovePart,y
- LDA $0643,x
- ADC #$02
- STA $0643,x
- JMP .Connect
- .RightRight:
- LDA EnemyMovePart,y
- CLC
- ADC #$A0
- STA EnemyMovePart,y
- LDA $0643,x
- ADC #$00
- STA $0643,x
- .Connect:
- INC LoopVar
- INC YTemp
- INY
- INX
- INX
- INX
- INX
- LDA LoopVar
- CMP #$08
- BNE .Skip
- TXA
- STA XTemp
- JSR AnimateNerd
- LDX XTemp
- INC YTemp2
- LDY YTemp2
- JMP .Reset
- KillNerd:
- LDA #$FE
- STA $0640,x
- STA $0643,x
- STA $0644,x
- STA $0647,x
- STA $0648,x
- STA $064B,x
- STA $064C,x
- STA $064F,x
- STA $0650,x
- STA $0653,x
- STA $0654,x
- STA $0657,x
- STA $0658,x
- STA $065B,x
- STA $065C,x
- STA $065F,x
- RTS
- RotateNerdLeft:
- LDA #$E7
- STA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- LDA #$EF
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- LDA #$03
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- STA $0656,x
- STA $065A,x
- STA $065E,x
- LDA #$02
- STA EnemyMoveDirection,y
- RTS
- RotateNerdRight:
- LDA #$19
- STA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- LDA #$11
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- LDA #%01000011
- STA $0642,x
- STA $0646,x
- STA $064A,x
- STA $064E,x
- STA $0652,x
- STA $0656,x
- STA $065A,x
- STA $065E,x
- LDA #$01
- STA EnemyMoveDirection,y
- RTS
- AnimateNerd:
- LDX #$00
- LDY #$00
- .Loop:
- LDA $0641,x
- CMP #$C5
- BEQ .Move
- CMP #$C7
- BEQ .Move
- JMP .End
- .Move:
- LDA $0653,x
- STA $0643,x
- LDA EnemyAnimateTimer,y
- CMP #$08
- BEQ .Walk1
- CMP #$10
- BEQ .Walk2
- RTS
- .Walk1:
- LDA NerdSprites
- STA $0641,x
- LDA NerdSprites+1
- STA $0645,x
- LDA NerdSprites+2
- STA $0649,x
- LDA NerdSprites+3
- STA $064D,x
- LDA NerdSprites+4
- STA $0651,x
- LDA NerdSprites+5
- STA $0655,x
- LDA NerdSprites+6
- STA $0659,x
- LDA NerdSprites+7
- STA $065D,x
- TXA
- CLC
- ADC #$20
- TAX
- JMP .Mid
- ; RTS
- .Walk2:
- LDA NerdSprites2
- STA $0641,x
- LDA NerdSprites2+1
- STA $0645,x
- LDA NerdSprites2+2
- STA $0649,x
- LDA NerdSprites2+3
- STA $064D,x
- LDA NerdSprites2+4
- STA $0651,x
- LDA NerdSprites2+5
- STA $0655,x
- LDA NerdSprites2+6
- STA $0659,x
- LDA NerdSprites2+7
- STA $065D,x
- TXA
- CLC
- ADC #$20
- TAX
- JMP .Mid
- .EndPre:
- INY
- .End:
- ; INY
- TXA
- CLC
- ADC #$20
- TAX
- .Mid:
- CPX #$80
- BEQ .Finish
- JMP .Loop
- .Finish:
- RTS
- ;;;;;;;;;;;;;;
- .bank 5
- .org $A000
- AnimateHorizontalWater:
- LDX #$00
- LDA #$21
- STA $2006
- LDA #$E7
- STA $2006
- LDA BossTimer
- CMP #$08
- BEQ .2
- CMP #$10
- BEQ .3
- CMP #$18
- BEQ .1
- CMP #$1A
- BEQ .Reset
- INC BossTimer
- RTS
- .1:
- LDA #$BE
- STA $2007
- INX
- CPX #$12
- BNE .1
- INC BossTimer
- RTS
- .2:
- LDA #$BF
- STA $2007
- INX
- CPX #$12
- BNE .2
- INC BossTimer
- RTS
- .3:
- LDA #$C0
- STA $2007
- INX
- CPX #$12
- BNE .3
- INC BossTimer
- RTS
- .Reset:
- LDA #$00
- STA BossTimer
- RTS
- JumpSprite:
- LDA ChumAttacking
- CMP #$01
- BEQ .End
- LDX #$00
- LDY #$00
- .Loop:
- LDA JumpSprites,x
- STA $0605,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop
- LDA #$00
- STA AnimTimer
- .End:
- RTS
- ChumActuallyAttack:
- LDA ChumAttacking
- CMP #$01
- BNE .End
- JSR PickAttackSprite
- LDA #$00
- STA AnimTimer
- INC AttackTimer
- LDA AttackTimer
- CMP #$0B
- BCC .End
- LDA #$00
- STA AttackTimer
- ; STA ChumAttacking
- LDA JumpFlag
- CMP #$00
- BEQ .End
- JMP .Reset
- .End:
- RTS
- .Reset:
- LDA #$01
- STA JumpAttackResetFlag
- RTS
- PickAttackSprite:
- LDX #$00
- LDY #$00
- LDA JumpFlag
- CMP #$00
- BNE .JumpAttack
- LDA DuckFlag
- CMP #$01
- BEQ .DuckAttack
- LDA ButtonsP1
- AND #%00000100
- BNE .DuckAttack
- .Loop:
- LDA Kick,x
- STA $0605,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop
- RTS
- .DuckAttack:
- LDA DuckFlag
- CMP #$01
- BNE .Loop
- LDX #$00
- LDY #$00
- .Loopy:
- LDA DuckAttackSprites,x
- STA $0605,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loopy
- RTS
- .JumpAttack:
- LDX #$00
- LDY #$00
- .Loopy2:
- LDA JumpAttackSprites,x
- STA $0605,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loopy2
- JSR PixelAdjust
- RTS
- Jump:
- LDA JumpFlag
- CMP #$01
- BNE .End
- LDA SPRITE_BANKV
- SEC
- SBC #$01
- STA JumpPos
- LDA JumpPos
- SEC
- SBC #$3F
- STA JumpPos+1
- CLC
- ADC #$05
- STA JumpPos+2
- CLC
- ADC #$08
- STA JumpPos+3
- CLC
- ADC #$34
- STA JumpPos+4
- LDA #$02
- STA JumpFlag
- JSR JumpSprite
- .End:
- RTS
- ClearEnemies:
- LDX #$00
- .Loop:
- LDA #$FE
- STA $0640,x
- STA $0643,x
- INX
- INX
- INX
- INX
- CPX #$A0
- BNE .Loop
- LDA #$00
- STA EnemyMoveDirection
- STA EnemyMoveDirection+1
- STA EnemyMoveDirection+2
- STA EnemyMoveDirection+3
- RTS
- ChumInitialLocation:
- LDA CurrentFloor
- CMP #$00
- BEQ .Right
- CMP #$02
- BEQ .Right
- LDX #$00
- .LoopL:
- LDA ChumInitLeft,x
- STA $0604,x
- INX
- CPX #$3C
- BNE .LoopL
- LDA #$01
- STA DirFacing
- RTS
- .Right:
- LDX #$00
- .Loop:
- LDA ChumInitRight,x
- STA $0604,x
- INX
- CPX #$3C
- BNE .Loop
- RTS
- ChumInitLeft:
- .db $94,$03,%01000000,$38 ;chum
- .db $94,$04,%01000000,$30
- .db $94,$00,%01000000,$28
- .db $9C,$09,%01000000,$38
- .db $9C,$0A,%01000000,$30
- .db $9C,$0B,%01000000,$28
- .db $A4,$13,%01000000,$38
- .db $A4,$14,%01000000,$30
- .db $A4,$15,%01000000,$28
- .db $AC,$1F,%01000000,$38
- .db $AC,$20,%01000000,$30
- .db $AC,$00,%01000000,$28
- .db $B4,$00,%01000000,$38
- .db $B4,$2A,%01000000,$30
- .db $B4,$00,%01000000,$28
- ChumInitRight:
- .db $94,$03,$00,$B8 ;chum
- .db $94,$04,$00,$C0
- .db $94,$00,$00,$C8
- .db $9C,$09,$00,$B8
- .db $9C,$0A,$00,$C0
- .db $9C,$0B,$00,$C8
- .db $A4,$13,$00,$B8
- .db $A4,$14,$00,$C0
- .db $A4,$15,$00,$C8
- .db $AC,$1F,$00,$B8
- .db $AC,$20,$00,$C0
- .db $AC,$00,$00,$C8
- .db $B4,$00,$00,$B8
- .db $B4,$2A,$00,$C0
- .db $B4,$00,$00,$C8
- ResetLevelValues:
- LDA #$02
- STA LevelTimer
- LDA #$00
- STA BossDead
- STA DelayTimer
- STA BossPalUpdate
- STA BossPlacedFlag
- STA ShakeTimer
- STA SkipBossMusic
- STA LevelTimer+1
- STA LevelTimer+2
- STA LevelTimer+3
- STA EndPointsTimer
- STA EndTimer
- STA EndTimer+1
- STA SpawnPlace
- STA BossPhase
- STA Fan1Stage
- STA IntroPhase
- STA IntroTimer
- STA BossMusicPlayed
- STA SetToDie
- STA ReadytoSpawn
- LDA #$01
- STA Fan2Stage
- STA AwardPointsFlag
- LDA #$02
- STA Fan3Stage
- LDA #$00
- STA LifeAmt
- STA EnemyLifeAmt
- LDA #$01
- STA LevelStarting
- JSR LoadPortraitSprites
- LDA gamestate
- CMP #STATEINTERLUDE
- BNE .Cont
- RTS
- .Cont:
- LDA Game2p
- CMP #$01
- BNE .Single
- LDA StageBeat
- CMP #$01
- BEQ .NotSwapped
- LDA CurrentPlayer
- CMP #$01
- BEQ .TwoP2
- LDA CurrentFloorP1
- JMP .Connect
- .TwoP2:
- LDA CurrentFloorP2
- JMP .Connect
- .NotSwapped:
- LDA #$00
- STA StageBeat
- LDA CurrentPlayer
- CMP #$02
- BEQ .TwoP1
- LDA CurrentFloorP1
- JMP .Connect
- .TwoP1:
- LDA CurrentFloorP2
- JMP .Connect
- .Single:
- LDA CurrentFloor
- .Connect:
- CMP #$00
- BEQ .Right
- CMP #$02
- BEQ .Right
- LDA #$00
- STA NametableCount
- RTS
- .Right:
- LDA #$08
- STA NametableCount
- RTS
- FinishPoints:
- LDA BossDead
- CMP #$03
- BNE .End
- INC EndPointsTimer
- LDA LifeAmt
- CMP #$18
- BEQ .TimeLeft
- LDA EndPointsTimer
- CMP #$04
- BNE .End
- LDA #$00
- STA SoundEffect
- LDA #$01
- STA PlaySound
- INC LifeAmt
- LDA Game2p
- CMP #$01
- BNE .P1
- LDA CurrentPlayer
- CMP #$01
- BEQ .P1
- INC P2Score+3
- JSR FixMath2
- JMP .Connect3
- .P1:
- INC P1Score+3
- JSR FixMath
- .Connect3:
- LDA #$01
- STA AwardPointsFlag
- LDA #$00
- STA EndPointsTimer
- .End:
- RTS
- .TimeLeft:
- LDA LevelTimer
- CMP #$00
- BNE .Cont
- LDA LevelTimer+1
- CMP #$00
- BNE .Cont
- LDA LevelTimer+2
- CMP #$00
- BNE .Cont
- LDA LevelTimer+3
- CMP #$00
- BNE .Cont
- .FinishLevel:
- LDA EndPointsTimer
- CMP #$90
- BNE .End
- LDA #$00
- STA LevelTimer
- LDA Game2p
- CMP #$01
- BNE .Skip
- LDA CurrentPlayer
- CMP #$01
- BEQ .Skip
- INC CurrentFloor
- INC CurrentFloorP2
- JMP .Connect
- .Skip:
- LDA Game2p
- CMP #$01
- BNE .Skip2
- INC CurrentFloor
- INC CurrentFloorP1
- JMP .Connect
- .Skip2:
- INC CurrentFloor
- .Connect:
- LDA CurrentFloor
- CMP #$04
- BNE .NotBeat
- LDA #STATELOADENDING
- STA gamestate
- RTS
- .NotBeat:
- JSR ResetLevelValues
- JSR CheckForInterlude
- RTS
- .Cont:
- LDA EndPointsTimer
- CMP #$02
- BNE .End2
- LDA Game2p
- CMP #$01
- BNE .OnePlayer
- LDA CurrentPlayer
- CMP #$01
- BEQ .OnePlayer
- INC P2Score+4
- INC P2Score+4
- INC P2Score+4
- INC P2Score+4
- JSR FixMath2
- JMP .Connect2
- .End2:
- RTS
- .OnePlayer:
- INC P1Score+4
- INC P1Score+4
- INC P1Score+4
- INC P1Score+4
- JSR FixMath
- .Connect2:
- LDA #$00
- STA SoundEffect
- LDA #$01
- STA PlaySound
- JSR FixMath
- LDA #$00
- STA EndPointsTimer
- LDA #$01
- STA AwardPointsFlag
- LDA #$01
- STA AddTimerFlag
- JSR .FixTimer
- RTS
- .FixTimer:
- DEC LevelTimer+3
- DEC LevelTimer+3
- DEC LevelTimer+3
- DEC LevelTimer+3
- LDA LevelTimer+3
- CMP #$F0
- BCS .ResetOnes
- LDA #$01
- STA AddTimerFlag
- RTS
- .ResetOnes:
- LDA LevelTimer+3
- CLC
- ADC #$0A
- STA LevelTimer+3
- DEC LevelTimer+2
- LDA LevelTimer+2
- CMP #$FF
- BEQ .ResetTens
- LDA #$01
- STA AddTimerFlag
- RTS
- .ResetTens:
- LDA #$09
- STA LevelTimer+2
- DEC LevelTimer+1
- LDA LevelTimer+1
- CMP #$FF
- BEQ .ResetHundreds
- LDA #$01
- STA AddTimerFlag
- RTS
- .ResetHundreds:
- LDA #$09
- STA LevelTimer+1
- DEC LevelTimer
- LDA LevelTimer
- CMP #$FF
- BEQ .GameOver
- LDA #$01
- STA AddTimerFlag
- RTS
- .GameOver:
- LDA #$00
- STA LevelTimer
- STA LevelTimer+1
- STA LevelTimer+2
- STA LevelTimer+3
- RTS
- CheckForInterlude:
- LDA CurrentFloor
- CMP #$02
- BNE .SkipInterlude
- LDA Game2p
- CMP #$01
- BNE .Regular
- LDA CurrentPlayer
- CMP #$02
- BNE .Regular
- LDA InterludeShownP2
- CMP #$01
- BEQ .SkipInterlude
- LDA #$01
- STA InterludeShownP2
- JMP .Connect
- .Regular:
- LDA InterludeShownP1
- CMP #$01
- BEQ .SkipInterlude
- LDA #$01
- STA InterludeShownP1
- .Connect:
- LDA #$00
- STA CurrentPalette
- STA PaletteTimer
- LDA #STATELOADINTERLUDE
- STA gamestate
- RTS
- .SkipInterlude:
- LDA #STATELOADPLAYING
- STA gamestate
- RTS
- EraseBossExtras:
- LDA CurrentFloor
- CMP #$00
- BNE .Boss2
- .Boss1:
- LDX #$00
- .Loop:
- LDA #$FE
- STA $06C0,x
- STA $06C3,x
- INX
- INX
- INX
- INX
- CPX #$10
- BNE .Loop
- RTS
- .Boss2:
- LDA CurrentFloor
- CMP #$01
- BNE .Boss3
- LDX #$00
- .Loop2:
- LDA #$FE
- STA $0684,x
- STA $0687,x
- INX
- INX
- INX
- INX
- CPX #$4C
- BNE .Loop2
- RTS
- .Boss3:
- LDA CurrentFloor
- CMP #$02
- BNE .Boss4
- LDA #$FE
- STA $0680
- JSR .Boss1
- .Boss4:
- RTS
- SetBossLoopTotal:
- LDA CurrentFloor
- TAY
- LDA FloorLoopValues,y
- STA LoopTotal
- RTS
- FloorLoopValues:
- .db $48,$44,$40,$40
- KillPlayer:
- LDA LifeAmt
- CMP #$18
- BCS .Start
- RTS
- .Start:
- LDX #$00
- LDY #$00
- .Connect:
- LDA PlayerDeadPhase
- CMP #$00
- BEQ .Up
- JMP .Down
- .Up:
- LDA $0604
- CMP #$70
- BCC .DownFlag
- .UpLoop:
- LDA $0604,x
- SEC
- SBC #$04
- STA $0604,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .UpLoop
- LDA #$01
- STA PlayerDeadFlag
- .SkipSample:
- RTS
- .DownFlag:
- LDA #$01
- STA PlayerDeadPhase
- .Down:
- LDA $0604
- CMP #$DE
- BCS .Finish
- .DownLoop:
- LDA $0604,x
- CLC
- ADC #$08
- STA $0604,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .DownLoop
- RTS
- .Finish:
- LDX #$00
- .DeadLoop:
- LDA #$FE
- STA $0604,x
- STA $0607,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .DeadLoop
- .End:
- RTS
- KillEnemies:
- JSR KillEnemy1
- JSR KillEnemy2
- JSR KillEnemy3
- JSR KillEnemy4
- RTS
- KillEnemy1:
- LDA EnemyDead
- CMP #$00
- BNE .Start
- RTS
- .Start:
- LDX #$00
- LDY #$00
- .Connect:
- LDA EnemyDeadPhase
- CMP #$00
- BEQ .Up
- JMP .Down
- .Up:
- LDA $0640
- CMP EnemyTop
- BCC .DownFlag
- .UpLoop:
- LDA $0640,x
- SEC
- SBC #$04
- STA $0640,x
- INX
- INX
- INX
- INX
- CPX #$20
- BNE .UpLoop
- RTS
- .DownFlag:
- LDA #$01
- STA EnemyDeadPhase
- .Down:
- LDA $0640,x
- CMP #$DE
- BCS .Finish
- .DownLoop:
- LDA $0640,x
- CLC
- ADC #$08
- STA $0640,x
- INX
- INX
- INX
- INX
- CPX #$20
- BNE .DownLoop
- RTS
- .Finish:
- LDA #$00
- STA EnemyDeadPhase
- STA EnemyDead
- LDA #$FE
- STA $0640,x
- STA $0643,x
- STA $0644,x
- STA $0647,x
- STA $0648,x
- STA $064B,x
- STA $064C,x
- STA $064F,x
- STA $0650,x
- STA $0653,x
- STA $0654,x
- STA $0657,x
- STA $0658,x
- STA $065B,x
- STA $065C,x
- STA $065F,x
- .End:
- RTS
- KillEnemy2:
- LDA EnemyDead+1
- CMP #$00
- BNE .Start
- RTS
- .Start:
- LDX #$20
- LDY #$00
- .Connect:
- LDA EnemyDeadPhase+1
- CMP #$00
- BEQ .Up
- JMP .Down
- .Up:
- LDA $0660
- CMP EnemyTop
- BCC .DownFlag
- .UpLoop:
- LDA $0640,x
- SEC
- SBC #$04
- STA $0640,x
- INX
- INX
- INX
- INX
- CPX #$40
- BNE .UpLoop
- RTS
- .DownFlag:
- LDA #$01
- STA EnemyDeadPhase+1
- .Down:
- LDA $0640,x
- CMP #$DE
- BCS .Finish
- .DownLoop:
- LDA $0640,x
- CLC
- ADC #$08
- STA $0640,x
- INX
- INX
- INX
- INX
- CPX #$40
- BNE .DownLoop
- RTS
- .Finish:
- LDA #$00
- STA EnemyDeadPhase+1
- STA EnemyDead+1
- LDA #$FE
- STA $0640,x
- STA $0643,x
- STA $0644,x
- STA $0647,x
- STA $0648,x
- STA $064B,x
- STA $064C,x
- STA $064F,x
- STA $0650,x
- STA $0653,x
- STA $0654,x
- STA $0657,x
- STA $0658,x
- STA $065B,x
- STA $065C,x
- STA $065F,x
- .End:
- RTS
- KillEnemy3:
- LDA EnemyDead+2
- CMP #$00
- BNE .Start
- RTS
- .Start:
- LDX #$40
- LDY #$00
- .Connect:
- LDA EnemyDeadPhase+2
- CMP #$00
- BEQ .Up
- JMP .Down
- .Up:
- LDA $0680
- CMP EnemyTop
- BCC .DownFlag
- .UpLoop:
- LDA $0640,x
- SEC
- SBC #$04
- STA $0640,x
- INX
- INX
- INX
- INX
- CPX #$60
- BNE .UpLoop
- RTS
- .DownFlag:
- LDA #$01
- STA EnemyDeadPhase+2
- .Down:
- LDA $0640,x
- CMP #$DE
- BCS .Finish
- .DownLoop:
- LDA $0640,x
- CLC
- ADC #$08
- STA $0640,x
- INX
- INX
- INX
- INX
- CPX #$60
- BNE .DownLoop
- RTS
- .Finish:
- LDA #$00
- STA EnemyDeadPhase+2
- STA EnemyDead+2
- LDA #$FE
- STA $0640,x
- STA $0643,x
- STA $0644,x
- STA $0647,x
- STA $0648,x
- STA $064B,x
- STA $064C,x
- STA $064F,x
- STA $0650,x
- STA $0653,x
- STA $0654,x
- STA $0657,x
- STA $0658,x
- STA $065B,x
- STA $065C,x
- STA $065F,x
- .End:
- RTS
- KillEnemy4:
- LDA EnemyDead+3
- CMP #$00
- BNE .Start
- RTS
- .Start:
- LDX #$60
- LDY #$00
- .Connect:
- LDA EnemyDeadPhase+3
- CMP #$00
- BEQ .Up
- JMP .Down
- .Up:
- LDA $06A0
- CMP EnemyTop
- BCC .DownFlag
- .UpLoop:
- LDA $0640,x
- SEC
- SBC #$04
- STA $0640,x
- INX
- INX
- INX
- INX
- CPX #$80
- BNE .UpLoop
- RTS
- .DownFlag:
- LDA #$01
- STA EnemyDeadPhase+3
- .Down:
- LDA $0640,x
- CMP #$DE
- BCS .Finish
- .DownLoop:
- LDA $0640,x
- CLC
- ADC #$08
- STA $0640,x
- INX
- INX
- INX
- INX
- CPX #$80
- BNE .DownLoop
- RTS
- .Finish:
- LDA #$00
- STA EnemyDeadPhase+3
- STA EnemyDead+3
- LDA #$FE
- STA $0640,x
- STA $0643,x
- STA $0644,x
- STA $0647,x
- STA $0648,x
- STA $064B,x
- STA $064C,x
- STA $064F,x
- STA $0650,x
- STA $0653,x
- STA $0654,x
- STA $0657,x
- STA $0658,x
- STA $065B,x
- STA $065C,x
- STA $065F,x
- .End:
- RTS
- ChumCollision:
- LDA InvincTimer
- CMP #$00
- BEQ .Start
- JMP .Finish
- .Start:
- LDX #$00
- LDY #$00
- .StartAgain:
- CPX #$00
- BNE .Try2
- LDA EnemyDead
- CMP #$00
- BEQ .StartCollision
- JMP .End
- .Try2:
- CPX #$20
- BNE .Try3
- LDA EnemyDead+1
- CMP #$00
- BEQ .StartCollision
- JMP .End
- .Try3:
- CPX #$40
- BNE .Try4
- LDA EnemyDead+2
- CMP #$00
- BEQ .StartCollision
- JMP .End
- .Try4:
- CPX #$60
- BNE .StartCollision
- LDA EnemyDead+3
- CMP #$00
- BEQ .StartCollision
- JMP .End
- .StartCollision:
- LDA BossPlacedFlag
- CMP #$01
- BNE .NoBoss
- JSR BossCollision
- RTS
- .NoBoss:
- LDA $0641,x
- CMP #$D6
- BEQ .Bird
- CMP #$D9
- BEQ .Bird
- LDA $0604
- CLC
- ADC #$2C
- CMP $0640,x
- BCC .End
- LDA DirFacing
- CMP #$00
- BNE .CollisionFromRight
- JMP .CollisionFromLeft
- .Bird:
- LDA $0640,x
- CLC
- ADC #$04
- CMP $0604
- BCC .End
- LDA DirFacing
- CMP #$00
- BNE .CollisionFromRight
- JMP .CollisionFromLeft
- RTS
- .CollisionFromRight: ;chum facing right
- ;chum left (behind him) compared to enemy right (in front of them)
- LDA $0643,x
- CLC
- ADC #$03
- CMP $060F
- BCC .End
- ;chum right (in front of him) compared to enemy left ()
- LDA $0607
- CLC
- ; ADC #$05
- ADC #$09
- CMP $0647,x
- BCC .End
- .Hit:
- LDA ChumHit
- CMP #$00
- BNE .Finish
- INC LifeAmt
- INC LifeAmt
- .SkipDeduct:
- LDA $0607
- CMP $0647,x
- BCC .KnockLeft
- ;;Knock Right
- LDA #$01
- STA ChumHit
- .Connect:
- LDA #$0F
- STA ChumTempX
- LDA #STATEHIT
- STA gamestate
- .End:
- TXA
- CLC
- ADC #$20
- TAX
- CPX #$80
- BEQ .Finish
- JMP .StartAgain
- .Finish:
- RTS
- .KnockLeft:
- LDA ChumHit
- CMP #$00
- BNE .Finish
- ; INC LifeAmt
- .SkipDeduct2:
- LDA #$02
- STA ChumHit
- JMP .Connect
- .CollisionFromLeft: ;chum facing left
- ;chum left (in front of him) compared to enemy right (in front of them)
- LDA $0643,x
- CLC
- ADC #$03
- CMP $0607
- BCC .End
- ;chum right (behind him) compared to enemy left
- LDA $060F
- CLC
- ADC #$09
- CMP $0647,x
- BCC .End
- JMP .Hit
- BossCollision:
- LDA CurrentFloor
- CMP #$00
- BEQ .Boss1
- JMP Boss2
- .Boss1:
- LDA $0604
- CLC
- ADC #$10
- CMP $0640
- BCC .End4
- LDA DirFacing
- CMP #$00
- BNE .CollisionFromRight
- JMP .CollisionFromLeft
- .CollisionFromRight: ;Chum Facing Right/Antoine Facing Right
- LDA $0643
- CMP $064B
- BCC .TryRightLeft
- ;chum left (behind him) compared to enemy right (in front of them)
- LDA $0643
- SEC
- SBC #$04
- CMP $060F
- BCC .TryRightLeft
- ;chum right (in front of him) compared to enemy left ()
- LDA $0607
- SEC
- SBC #$02
- CMP $064B
- BCC .TryRightLeft
- JMP .Hit
- .End4:
- RTS
- .TryRightLeft: ;Chum Facing Right/Antoine Facing Left
- LDA #$00
- STA AttackOffset
- LDA DuckFlag
- CMP #$01
- BNE .Standing2
- LDA #$08
- STA AttackOffset
- .Standing2:
- LDA $0643
- SEC
- SBC #$04
- CMP $060F
- BCC .End
- ;chum right (in front of him) compared to enemy left ()
- LDA $0607
- CLC
- ADC #$0C
- SEC
- SBC AttackOffset
- CMP $064B
- BCC .End
- .Hit:
- LDA ChumHit
- CMP #$00
- BNE .End
- INC LifeAmt
- INC LifeAmt
- INC LifeAmt
- INC LifeAmt
- .SkipDeduct:
- LDA $0607
- CMP $064B
- BCC .KnockLeft
- ;;Knock Right
- LDA #$01
- STA ChumHit
- .Connect:
- LDA #$0F
- STA ChumTempX
- LDA #STATEHIT
- STA gamestate
- .End:
- RTS
- .KnockLeft:
- LDA ChumHit
- CMP #$00
- BNE .End
- ; INC LifeAmt
- .SkipDeduct2:
- LDA #$02
- STA ChumHit
- JMP .Connect
- .CollisionFromLeft: ;chum facing left
- LDA $0643
- CMP $064B
- BCC .TryLeftLeft
- ;chum left (in front of him) compared to enemy right (in front of them)
- LDA #$00
- STA AttackOffset
- LDA DuckFlag
- CMP #$01
- BNE .Standing
- LDA #$08
- STA AttackOffset
- .Standing:
- LDA $064B
- CLC
- ADC #$10
- SEC
- SBC AttackOffset
- CMP $0607
- BCC .End
- ;chum right (behind him) compared to enemy left
- LDA $060F
- CLC
- ADC #$0C
- CMP $064B
- BCC .End
- JMP .Hit
- .TryLeftLeft: ;Chum Facing Left/Antoine Facing Left
- ;chum left (in front of him) compared to enemy right (in front of them)
- LDA $0643
- CLC
- ADC #$02
- CMP $060F
- BCS .End
- ;chum right (behind him) compared to enemy left
- LDA $0607
- SEC
- SBC #$08
- CMP $0643
- BCS .End
- JMP .Hit
- Boss2:
- LDA CurrentFloor
- CMP #$01
- BEQ .Boss2
- JMP Boss3
- .Boss2:
- JSR FumeCollision
- LDA $0604
- CLC
- ADC #$10
- CMP $0640
- BCC .End
- LDA DirFacing
- CMP #$00
- BNE .CollisionFromRight
- JMP .CollisionFromLeft
- .CollisionFromRight: ;Chum Facing Right/Corey Motorcycle on Right
- LDA $0643
- CMP $0653
- BCC .RightLeft
- LDA #$00
- STA AttackOffset
- LDA DuckFlag
- CMP #$01
- BNE .Standing2
- LDA #$08
- STA AttackOffset
- .Standing2:
- LDA $0607
- CLC
- ADC #$08
- SEC
- SBC AttackOffset
- CMP $0653
- BCC .End
- JMP .Hit
- .RightLeft: ;Chum Facing Right/Corey Motorcycle on Left
- LDA $0663
- CLC
- ADC #$01
- CMP $060F
- BCC .End
- .Hit:
- LDA ChumHit
- CMP #$00
- BNE .End
- INC LifeAmt
- INC LifeAmt
- INC LifeAmt
- INC LifeAmt
- .SkipDeduct:
- LDA $0607
- CMP $064B
- BCC .KnockLeft
- ;;Knock Right
- LDA #$01
- STA ChumHit
- .Connect:
- LDA #$0F
- STA ChumTempX
- LDA #STATEHIT
- STA gamestate
- .End:
- RTS
- .KnockLeft:
- LDA ChumHit
- CMP #$00
- BNE .End
- ; INC LifeAmt
- .SkipDeduct2:
- LDA #$02
- STA ChumHit
- JMP .Connect
- .CollisionFromLeft: ;chum facing left
- LDA $0643
- CMP $0653
- BCS .LeftRight
- LDA #$00
- STA AttackOffset
- LDA DuckFlag
- CMP #$01
- BNE .Standing
- LDA #$08
- STA AttackOffset
- .Standing:
- LDA $0663
- CLC
- ADC #$01
- SEC
- SBC AttackOffset
- CMP $0607
- BCC .End
- JMP .Hit
- .LeftRight:
- LDA $060F
- CLC
- ADC #$08
- CMP $0653
- BCC .End
- JMP .Hit
- Boss3:
- LDA CurrentFloor
- CMP #$02
- BEQ .Boss3
- JMP Boss4
- .Boss3:
- JSR BallCollision
- LDA $0604
- CLC
- ADC #$30
- CMP $0640
- BCC .End
- LDA DirFacing
- CMP #$00
- BNE .CollisionFromRight
- JMP .CollisionFromLeft
- .CollisionFromRight: ;Chum Facing Right
- LDA $060F
- CMP #$0D
- BCC .Hit
- RTS
- .Hit:
- LDA ChumHit
- CMP #$00
- BNE .End
- INC LifeAmt
- INC LifeAmt
- INC LifeAmt
- INC LifeAmt
- .SkipDeduct:
- LDA $0607
- CMP $064B
- BCC .KnockLeft
- ;;Knock Right
- LDA #$01
- STA ChumHit
- .Connect:
- LDA #$0F
- STA ChumTempX
- LDA #STATEHIT
- STA gamestate
- .End:
- RTS
- .KnockLeft:
- LDA ChumHit
- CMP #$00
- BNE .End
- ; INC LifeAmt
- .SkipDeduct2:
- LDA #$02
- STA ChumHit
- JMP .Connect
- .CollisionFromLeft: ;chum facing left
- LDA DuckFlag
- CMP #$01
- BNE .Standing
- LDA $060F
- CMP #$08
- BCC .Hit
- RTS
- .Standing:
- LDA $0607
- CMP #$10
- BCC .Hit
- RTS
- Boss4:
- LDA $0604
- CLC
- ADC #$18
- CMP $0640
- BCC .End
- LDA $0640
- CLC
- ADC #$18
- CMP $0604
- BCC .End
- LDA DirFacing
- CMP #$00
- BNE .CollisionFromRight
- JMP .CollisionFromLeft
- RTS
- .CollisionFromRight: ;chum facing right
- ;chum left (behind him) compared to enemy right (in front of them)
- LDA JumpFlag
- CMP #$00
- BEQ .NotJumpRight
- JMP .DarkCollisionRight
- .NotJumpRight:
- LDA $0643
- CLC
- ADC #$03
- CMP $060F
- BCC .End
- ;chum right (in front of him) compared to enemy left ()
- LDA $0607
- CLC
- ADC #$07
- CMP $0647
- BCC .End
- .Hit:
- LDA ChumHit
- CMP #$00
- BNE .End
- INC LifeAmt
- INC LifeAmt
- .SkipDeduct:
- LDA $0607
- CMP $0647
- BCC .KnockLeft
- ;;Knock Right
- LDA #$01
- STA ChumHit
- .Connect:
- LDA #$0F
- STA ChumTempX
- LDA #STATEHIT
- STA gamestate
- .End:
- RTS
- .KnockLeft:
- LDA ChumHit
- CMP #$00
- BNE .End
- ; INC LifeAmt
- .SkipDeduct2:
- LDA #$02
- STA ChumHit
- JMP .Connect
- .CollisionFromLeft: ;chum facing left
- ;chum left (in front of him) compared to enemy right (in front of them)
- LDA JumpFlag
- CMP #$00
- BEQ .NotJumpLeft
- JMP .DarkCollisionLeft
- .NotJumpLeft:
- LDA $0643
- CLC
- ADC #$03
- CMP $0607
- BCC .End
- ;chum right (behind him) compared to enemy left
- LDA $060F
- CLC
- ADC #$03
- CMP $0647
- BCC .End
- JMP .Hit
- .End2:
- RTS
- .DarkCollisionRight:
- LDA $0643
- CLC
- ADC #$03
- CMP $060F
- BCC .End2
- LDA $0607
- SEC
- SBC #$01
- CMP $0647
- BCC .End2
- JMP .Hit
- .DarkCollisionLeft:
- LDA $0643
- SEC
- SBC #$05
- CMP $0607
- BCC .End2
- ;chum right (behind him) compared to enemy left
- LDA $060F
- SEC
- SBC #$01
- CMP $0647
- BCC .End2
- JMP .Hit
- BallCollision:
- LDA $0604
- CLC
- ADC #$30
- CMP $0680
- BCC .End
- LDA $0680
- CLC
- ADC #$08
- CMP $0604
- BCC .End
- LDA DirFacing
- CMP #$00
- BNE .CollisionFromRight
- JMP .CollisionFromLeft
- .CollisionFromRight: ;Chum Facing Right/smoke to the Right
- LDA $0607
- CMP $0683
- BCS .RightLeft
- LDA $0607
- CLC
- ADC #$08
- CMP $0683
- BCC .End
- JMP .Hit
- .RightLeft: ;Chum Facing Right/smoke to the Left
- LDA $0683
- CLC
- ADC #$05
- CMP $060F
- BCC .End
- .Hit:
- LDA ChumHit
- CMP #$00
- BNE .End
- INC LifeAmt
- INC LifeAmt
- INC LifeAmt
- INC LifeAmt
- LDA LifeAmt
- CMP #$18
- BCC .SkipDeduct
- LDA BallDirection
- CMP #$02
- BNE .SkipDeduct
- LDA #$01
- STA PlayerDeadFlag
- .SkipDeduct:
- LDA $0607
- CMP $0643
- BCC .KnockLeft
- ;;Knock Right
- LDA #$01
- STA ChumHit
- .Connect:
- LDA #$0F
- STA ChumTempX
- LDA #STATEHIT
- STA gamestate
- .End:
- RTS
- .KnockLeft:
- LDA ChumHit
- CMP #$00
- BNE .End
- ; INC LifeAmt
- .SkipDeduct2:
- LDA #$02
- STA ChumHit
- JMP .Connect
- .CollisionFromLeft: ;Chum Facing Left/smoke to the Right
- LDA $0607
- CMP $0683
- BCS .LeftRight
- LDA $0607
- CLC
- ADC #$10
- CMP $0683
- BCC .End
- JMP .Hit
- .LeftRight: ;Chum Facing Left/smoke to the Left
- LDA $0683
- CLC
- ADC #$01
- CMP $0607
- BCC .End
- JMP .Hit
- LoadPortraitSprites:
- LDA #$29
- STA $06EC
- STA $06F0
- STA $06D0
- STA $06D4
- LDA #$31
- STA $06F4
- STA $06F8
- STA $06D8
- STA $06DC
- LDA #$7E
- STA $06EF
- STA $06F7
- LDA #$86
- STA $06F3
- STA $06FB
- LDA #$00
- STA $06EE
- STA $06F2
- LDA #$01
- STA $06D2
- STA $06D6
- LDA #$20
- STA $06F6
- STA $06FA
- LDA #$21
- STA $06DA
- STA $06DE
- LDA #$03
- STA $06ED
- LDA #$04
- STA $06F1
- LDA #$09
- STA $06F5
- LDA #$0A
- STA $06F9
- LDA #$F2
- STA $06D1
- LDA #$F3
- STA $06D5
- LDA #$F0
- STA $06D9
- LDA #$F1
- STA $06DD
- LDA #$A6
- STA $06D3
- STA $06DB
- LDA #$AE
- STA $06D7
- STA $06DF
- RTS
- ;;;;;;;;;;;
- .bank 6
- .org $C000
- .incbin "Music/pawnstars.dmc"
- FumeCollision:
- LDA BossDead
- CMP #$00
- BNE .End
- LDA $0604
- CLC
- ADC #$20
- CMP $0684
- BCC .End
- LDA DirFacing
- CMP #$00
- BNE .CollisionFromRight
- JMP .CollisionFromLeft
- .CollisionFromRight: ;Chum Facing Right/smoke to the Right
- LDA $0684
- CMP #$FE
- BEQ .End
- LDA $0687
- CLC
- ADC #$03
- CMP $060F
- BCC .End
- ;chum right (in front of him) compared to enemy left ()
- LDA $060F
- CLC
- ADC #$10
- CMP $0687
- BCC .End
- JMP .Hit
- .RightLeft: ;Chum Facing Right/smoke to the Left
- LDA $0687
- CLC
- ADC #$05
- CMP $060F
- BCC .End
- RTS
- .Hit:
- LDA ChumHit
- CMP #$00
- BNE .End
- INC LifeAmt
- INC LifeAmt
- INC LifeAmt
- INC LifeAmt
- .SkipDeduct:
- LDA $0607
- CMP $064B
- BCC .KnockLeft
- ;;Knock Right
- LDA #$01
- STA ChumHit
- .Connect:
- LDA #$0F
- STA ChumTempX
- LDA #STATEHIT
- STA gamestate
- .End:
- RTS
- .KnockLeft:
- LDA ChumHit
- CMP #$00
- BNE .End
- ; INC LifeAmt
- .SkipDeduct2:
- LDA #$02
- STA ChumHit
- JMP .Connect
- .CollisionFromLeft: ;Chum Facing Left/smoke to the Right
- LDA $0684
- CMP #$FE
- BEQ .End
- LDA $0687
- CLC
- ADC #$02
- CMP $0607
- BCC .End
- ;chum right (behind him) compared to enemy left
- LDA $060F
- CLC
- ADC #$02
- CMP $0687
- BCC .End
- JMP .Hit
- .LeftRight: ;Chum Facing Left/smoke to the Left
- LDA $0687
- CLC
- ADC #$05
- CMP $0607
- BCC .End
- JMP .Hit
- ReadController:
- LDA #$01
- STA $4016
- LDA #$00
- STA $4016
- LDX #$08
- .Loop:
- LDA $4016
- LSR A ; bit0 -> Carry
- ROL ButtonsP1 ; bit0 <- Carry
- DEX
- BNE .Loop
- LDA #$01
- STA $4016
- LDA #$00
- STA $4016
- .Begin:
- LDX #$08
- .Loop2:
- LDA $4016
- LSR A ; bit0 -> Carry
- ROL ButtonsP1Old ; bit0 <- Carry
- DEX
- BNE .Loop2
- LDA ButtonsP1
- CMP ButtonsP1Old
- BNE ReadController
- .Skip:
- RTS
- bkgd_pointer_table:
- .dw TitleNam, PlayingNam, PlayingNam, CreditsNam, EndingNam, EndingNam, InterludeNam, InterludeNam
- sprites_pointer_table:
- .dw TitleSP, PlayingSP, EndingSP
- TitleSP:
- .db $82,$03,$00,$4C
- .db $82,$04,$00,$54
- .db $8A,$09,$00,$4C
- .db $8A,$0A,$00,$54
- .db $FE
- PlayingSP:
- .db $37,$D5,$01,$F9 ;sprite 0
- .db $FE
- EndingSP:
- .db $7D,$D5,$00,$F8 ;sprite 0
- .db $72,$03,$00,$80 ;chum
- .db $72,$04,$00,$88
- .db $72,$00,$00,$90
- .db $7A,$09,$00,$80
- .db $7A,$0A,$00,$88
- .db $7A,$0B,$00,$90
- .db $82,$13,$00,$80
- .db $82,$14,$00,$88
- .db $82,$15,$00,$90
- .db $8A,$1F,$00,$80
- .db $8A,$20,$00,$88
- .db $8A,$00,$00,$90
- .db $92,$00,$00,$80
- .db $92,$2A,$00,$88
- .db $92,$00,$00,$90
- .db $8A,$F2,$01,$70 ;dawg
- .db $8A,$F3,$01,$78
- .db $92,$F0,$01,$70
- .db $92,$F1,$01,$78
- .db $4F,$CE,$02,$48 ;lightpole 1
- .db $4F,$CF,$02,$50
- .db $57,$DE,$02,$48
- .db $57,$DF,$02,$50
- .db $5F,$EF,$02,$50
- .db $67,$EE,$02,$50
- .db $6F,$E3,$02,$50
- .db $77,$E4,$02,$50
- .db $4F,$CE,%01000010,$60 ;lightpole 1 reversed
- .db $4F,$CF,%01000010,$58
- .db $57,$DE,%01000010,$60
- .db $57,$DF,%01000010,$58
- .db $5F,$EF,%01000010,$58
- .db $67,$EE,%01000010,$58
- .db $6F,$E3,%01000010,$58
- .db $77,$E4,%01000010,$58
- .db $4F,$CE,$02,$C8 ;lightpole 1
- .db $4F,$CF,$02,$D0
- .db $57,$DE,$02,$C8
- .db $57,$DF,$02,$D0
- .db $5F,$EF,$02,$D0
- .db $67,$EE,$02,$D0
- .db $6F,$E3,$02,$D0
- .db $77,$E4,$02,$D0
- .db $4F,$CE,%01000010,$E0 ;lightpole 1 reversed
- .db $4F,$CF,%01000010,$D8
- .db $57,$DE,%01000010,$E0
- .db $57,$DF,%01000010,$D8
- .db $5F,$EF,%01000010,$D8
- .db $67,$EE,%01000010,$D8
- .db $6F,$E3,%01000010,$D8
- .db $77,$E4,%01000010,$D8
- .db $FE
- palette_pointer_table:
- .dw TitlePAL, PlayingPAL, EndingPAL
- LevelAttrAddress:
- .dw TitleATTR, PlayingATTR, CreditsATTR, EndingATTR
- TitlePAL:
- .db $0F,$00,$31,$20, $0F,$17,$27,$37, $0F,$06,$16,$26, $0F,$00,$22,$20 ;;background palette
- .db $0F,$0F,$37,$17, $0F,$02,$38,$3C, $0F,$1C,$15,$14, $0F,$02,$38,$3C ;;sprite palette
- PlayingPAL:
- .db $0F,$00,$31,$20, $0F,$17,$27,$37, $0F,$06,$16,$26, $0F,$27,$37,$20 ;;background palette
- .db $0F,$0F,$37,$17, $0F,$30,$27,$17, $0F,$21,$37,$15, $0F,$0F,$37,$21 ;;sprite palette
- EndingPAL:
- .db $0F,$00,$31,$20, $0F,$17,$27,$37, $0F,$06,$16,$26, $0F,$27,$37,$20 ;;background palette
- .db $0F,$0F,$37,$17, $0F,$30,$27,$17, $0F,$00,$0F,$30, $0F,$0F,$37,$21 ;;sprite palette
- RespawnPlayer:
- LDA PlayerDeadFlag
- CMP #$01
- BNE .End
- LDA DeadSFXCount
- CMP #$05
- BEQ .Respawn
- INC DeadSFXTimer
- LDA DeadSFXTimer
- CMP #$01
- BEQ .Play
- LDA DeadSFXTimer
- CMP #$08
- BNE .End
- INC DeadSFXCount
- LDA #$00
- STA DeadSFXTimer
- RTS
- .Play:
- LDA #$00
- JSR Bankswitch
- LDA #$1B
- JSR FamiToneSamplePlay
- .End:
- RTS
- .Respawn:
- INC DeadSFXTimer
- LDA DeadSFXTimer
- CMP #$60
- BNE .End
- LDA #$00
- STA DeadSFXTimer
- STA DeadSFXCount
- LDA CurrentFloor
- CMP #$01
- BEQ .8
- CMP #$03
- BEQ .8
- LDA #$08
- STA NametableCount
- JMP .Connect
- .8:
- LDA #$00
- STA NametableCount
- .Connect:
- LDA #$00
- STA LifeAmt
- STA PlayerDeadPhase
- STA PlayerDeadFlag
- STA Xscroll
- LDA #$02
- JSR Bankswitch
- JSR ResetLevelValues
- JSR ClearEnemies
- LDA Game2p
- CMP #$01
- BNE .Regular
- LDA CurrentPlayer
- CMP #$02
- BNE .Regular
- DEC PlayerLifeP2
- LDA PlayerLifeP2
- CMP #$FF
- BEQ .GameOver
- LDA #$01
- STA CurrentPlayer
- LDA #STATELOADPLAYING
- STA gamestate
- RTS
- .Regular:
- DEC PlayerLife
- LDA PlayerLife
- CMP #$FF
- BEQ .GameOver
- LDA Game2p
- CMP #$01
- BNE .Cont
- LDA #$02
- STA CurrentPlayer
- .Cont:
- LDA #STATELOADPLAYING
- STA gamestate
- RTS
- .GameOver:
- JSR KillSprites
- LDA #STATELOADGAMEOVER
- STA gamestate
- RTS
- ActuallyJump:
- LDA JumpFlag
- CMP #$01
- BEQ .End
- CMP #$02
- BEQ .Next
- ; RTS
- JMP ActuallyJumpDown
- .Next:
- JSR JumpSprite
- LDA $0604
- CMP JumpPos+2
- BCC .Stop
- CMP JumpPos+3
- BCC .JumpSlow
- CMP JumpPos+4
- BCC .JumpFast
- RTS
- .JumpFast:
- LDX #$00
- LDY #$00
- .Loop:
- LDA $0604,y
- SEC
- SBC #$04
- STA $0604,y
- INX
- INY
- INY
- INY
- INY
- CPX #$0F
- BNE .Loop
- JSR Adjust3
- JSR Adjust2
- RTS
- .JumpSlow:
- LDX #$00
- LDY #$00
- .Loop2:
- LDA $0604,y
- SEC
- SBC #$01
- STA $0604,y
- INX
- INY
- INY
- INY
- INY
- CPX #$0F
- BNE .Loop2
- JSR Adjust3
- JSR Adjust2
- RTS
- .Stop:
- JSR Adjust3
- JSR Adjust2
- INC StopCounter
- LDA StopCounter
- CMP #$06
- BNE .End
- LDA #$00
- STA StopCounter
- LDA #$03
- STA JumpFlag
- .End:
- RTS
- Adjust2:
- LDA JumpAttackResetFlag
- CMP #$01
- BNE .End
- LDA #$02
- STA JumpAttackResetFlag
- .End:
- RTS
- Adjust3:
- LDA JumpAttackResetFlag
- CMP #$02
- BNE .End
- LDA JumpFlag
- CMP #$03
- BNE .Skip
- LDA ExtraFlag
- CMP #$04
- BEQ .Skip
- INC ExtraFlag
- RTS
- .Skip:
- LDA $0606
- CMP #$00
- BNE .Left
- LDX #$00
- .Loop:
- LDA $0607,x
- CLC
- ADC #$08
- STA $0607,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop
- LDA #$00
- STA JumpAttackFlag
- STA ExtraFlag
- STA JumpAttackResetFlag
- RTS
- .Left:
- LDX #$00
- .Loop3:
- LDA $0607,x
- SEC
- SBC #$08
- STA $0607,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop3
- LDA #$00
- STA JumpAttackFlag
- STA ExtraFlag
- STA JumpAttackResetFlag
- .End:
- RTS
- ActuallyJumpDown:
- LDA JumpFlag
- CMP #$03
- BNE .End
- .Next:
- LDA ChumHit
- CMP #$00
- BNE .Skip
- JSR JumpSprite
- JSR Adjust3
- JSR Adjust2
- .Skip:
- LDA $0604
- CMP JumpPos
- BCS .Stop
- CMP JumpPos+1
- BCS .JumpFast
- RTS
- .JumpFast:
- LDX #$00
- LDY #$00
- .Loop:
- LDA $0604,y
- CLC
- ADC #$03
- STA $0604,y
- INX
- INY
- INY
- INY
- INY
- CPX #$0F
- BNE .Loop
- JSR Adjust3
- RTS
- .Stop:
- LDA #$00
- STA JumpFlag
- STA UpHeld
- JSR StandStill
- .End:
- RTS
- ResetFanStuff:
- LDA FanPlaced
- CMP #$00
- BEQ .End
- LDA #$00
- STA FanPlaced
- STA FanErased
- STA FanVelocity
- STA FanVelocityPart
- STA FanFallDir
- STA FanDelayTimer
- .End:
- RTS
- LookForFan:
- LDA CurrentFloor
- CMP #$03
- BNE .End
- LDA NametableCount
- CMP #$01
- BEQ .LookForScroll
- CMP #$03
- BEQ .LookForScroll
- CMP #$05
- BEQ .LookForScroll
- CMP #$07
- BEQ .LookForScroll
- RTS
- .LookForScroll
- LDA Xscroll
- CMP #$20
- BNE .End
- LDA FanPlaced
- CMP #$00
- BNE .End
- JSR PlaceFan
- LDA #$01
- STA FanPlaced
- .End:
- RTS
- FanCollision:
- LDA FanPlaced
- CMP #$00
- BEQ .End
- LDA InvincTimer
- CMP #$00
- BNE .End
- LDA FanFallDir
- CMP #$00
- BNE .End
- LDA $06C0
- CLC
- ADC #$06
- CMP $0604
- BCC .End
- LDA $0607
- CLC
- ADC #$04
- CMP $06C3
- BCC .End
- LDA #$02
- STA ChumHit
- INC LifeAmt
- INC LifeAmt
- LDA #$0F
- STA ChumTempX
- LDA #STATEHIT
- STA gamestate
- .End:
- RTS
- LoadNametable:
- LDA $2002
- LDA #$20
- STA $2006
- LDA #$00
- STA $2006
- SetNametable:
- LDA BG_ptr
- ASL A
- TAY
- LDA bkgd_pointer_table, y
- STA AddrLow
- LDA bkgd_pointer_table+1, y
- STA AddrHigh
- LDX #$04
- LDY #$00
- .TitleLoop:
- LDA [AddrLow], y ;load nametable
- STA $2007 ;draw tile
- INY ;X is 0, so move on to get new counter number
- BNE .TitleLoop
- ;;Outer Loop
- INC AddrHigh
- DEX
- BNE .TitleLoop
- INC BG_ptr
- LDA $2002
- LDA #$24
- STA $2006
- LDA #$00
- STA $2006
- .Nametable2:
- LDA BG_ptr
- ASL A
- TAY
- LDA bkgd_pointer_table, y
- STA AddrLow
- LDA bkgd_pointer_table+1, y
- STA AddrHigh
- LDX #$04
- LDY #$00
- .TitleLoop2:
- LDA [AddrLow], y ;load nametable
- STA $2007 ;draw tile
- INY ;X is 0, so move on to get new counter number
- BNE .TitleLoop2
- ;;Outer Loop
- INC AddrHigh
- DEX
- BNE .TitleLoop2
- RTS
- LoadAttribute:
- LDA $2002
- LDA #$23
- STA $2006
- LDA #$C0
- STA $2006
- LDA ATTR_ptr
- ASL A
- TAY
- LDA LevelAttrAddress, y
- STA AddrLow
- LDA LevelAttrAddress+1, y
- STA AddrHigh
- LDY #$00
- .Loop:
- LDA [AddrLow], y
- STA $2007
- INY
- CPY #$40
- BNE .Loop
- LDA $2002
- LDA #$27
- STA $2006
- LDA #$C0
- STA $2006
- LDA ATTR_ptr
- ASL A
- TAY
- LDA LevelAttrAddress, y
- STA AddrLow
- LDA LevelAttrAddress+1, y
- STA AddrHigh
- LDY #$00
- .Loop2:
- LDA [AddrLow], y
- STA $2007
- INY
- CPY #$40
- BNE .Loop2
- .End:
- RTS
- CopyCHRData:
- LDA #$00
- STA $2006
- STA $2006
- CopyCHRDataSprite:
- ; lda #$80
- ; sta LoadingMusic
- ; sta $2000
- LDY #$00
- LDX #$20
- .Loop:
- LDA [AddrLow], y
- STA $2007
- INY
- BNE .Loop
- INC AddrHigh
- DEX
- BNE .Loop
- ; lda #0
- ; sta $2000
- ; sta LoadingMusic
- RTS
- LoadSprites:
- LDA SPRITES_ptr
- ASL A
- TAY
- LDA sprites_pointer_table,y
- STA AddrLow
- LDA sprites_pointer_table+1,y
- STA AddrHigh
- LDY #$00
- LoadBonusSpritesLoop:
- LDA [AddrLow], y
- CMP #$FE
- BEQ .End
- STA $0600, y
- INY
- CPY #$FF
- BNE LoadBonusSpritesLoop
- .End:
- RTS
- RegionDetect:
- JSR is_pal_nes
- STA Region
- BNE RegionPAL
- LDA #$01
- STA Region
- RTS
- RegionPAL:
- LDA #$00
- STA Region
- RTS
- RunPaletteTimer:
- LDA FadeOutFlag
- CMP #$01
- BEQ .End
- LDA CurrentPalette
- CMP #$03
- BEQ .Goto4
- CMP #$04
- BEQ .End
- LDA PaletteTimer
- CMP #$04
- BEQ .Increment
- .Connect:
- INC PaletteTimer
- .End:
- RTS
- .Increment:
- LDA #$00
- STA PaletteTimer
- STA PaletteDone
- INC CurrentPalette
- RTS
- .Goto4:
- INC PaletteTimer
- LDA PaletteTimer
- CMP #$10
- BNE .End
- LDA #$04
- STA CurrentPalette
- LDA #$00
- STA PaletteDone
- RTS
- UpdatePalette:
- LDA CurrentPalette
- CMP #$04
- BEQ .End
- LDA $2002
- LDA #$3F ;load palette address
- STA $2006
- LDA #$00
- STA $2006
- LDA PAL_ptr
- ASL A
- TAY
- LDA palette_pointer_table, y
- STA AddrLow
- LDA palette_pointer_table+1, y
- STA AddrHigh
- LDY #$00
- LDA CurrentPalette ;palette variable has four stages
- CMP #$00 ;variable = 0 is a black screen
- BEQ .Black ;variable = 1 is fade in
- CMP #$01 ;variable = 2 is next step
- BEQ .2 ;variable = 3 is full palette
- CMP #$02
- BEQ .3
- JSR LoadPalettes ;value is 3. just jump to normal LoadPalette routine.
- .End:
- RTS
- .Black: ;variable is 0. black screen.
- LDA #$FF ;value #$FF for all colors.
- STA $2007
- INY
- CPY #$20
- BNE .Black
- RTS
- .2: ;value is 1. fade in one step.
- LDA [AddrLow], Y
- SEC
- SBC #$20 ;take the value of the color in the palette and subtract $20
- CMP #$11
- BCC .Cont ;if it's between $00-$11, we're good! skip ahead.
- CLC
- ADC #$10 ;add another $10 to see if we're in between $00-$11 this time.
- CMP #$11 ;if we are, skip ahead!
- BCC .Cont
- CLC
- ADC #$10 ;if it hasn't gotten to between $00-$11 by now, it's obvious that this one
- .Cont: ;will be within that value, since $30 is the highest color value.
- STA $2007
- INY
- CPY #$20
- BNE .2
- RTS
- .3: ;value is 2. fade in for second step.
- LDA [AddrLow], Y
- SEC ;since the first step was between $00-$11, we only need to subtract a single time
- SBC #$10 ;for step 2. this might wind up being the same value as step one, but that's okay.
- CMP #$11 ;if not, it's between $10-$21, which is perfect.
- BCC .Cont2
- CLC
- ADC #$10
- .Cont2:
- STA $2007
- INY
- CPY #$20
- BNE .3
- RTS
- ; Deteremines whether code is running on an NTSC or PAL NES
- ; For NTSC, A = 0. For PAL, A != 0. Z flag also set.
- ; Chanes APU frame sequencer mode and $4015 enables.
- ; Takes about 1/60 second to complete.
- ; Preserved: X, Y
- is_pal_nes:
- LDA #$00 ; RESET DATA FOR RESET
- STA $4000
- ; Start tone
- LDA #$40 ; reset frame sequencer, IRQ off
- STA $4017
- LDA #$01 ; enable square 0
- STA $4015
- LDA #$00 ; pitch = 0 (silent)
- STA $4002
- LDA #$18 ; load length with $02
- STA $4003
- ; Count time until tone stops
- LDA #5 ; makes NTSC and PAL be equal
- SEC ; distances from $80 after loop
- is_pal_nes_loop:
- ADC #0 ; iter counter
- PHA
- LDA #$D0 ; internal delay loop
- is_pal_nes_delay:
- ADC #1
- BNE is_pal_nes_delay
- LDA $4015 ; C set if tone is running
- LSR a
- PLA ; doesn't modify C, but does set N flag
- BCS is_pal_nes_loop
- ; A=$79 for NTSC
- ; A=$86 for PAL
- bmi is_pal ; PAL if count >= $80
- LDA #0 ; clear to 0 if NTSC
- is_pal:
- RTS
- Random:
- ; See "linear-congruential random number generator" for more.
- ; rand = (rand * 5 + 0x3611) & 0xffff;
- ; return (rand >> 8) & 0xff;
- LDA randSeedHigh
- STA randTemp
- LDA randSeedLow
- ASL a ; rand = rand * 4 + rand
- ROL randTemp
- ASL a
- ROL randTemp
- CLC
- ADC randSeedLow
- PHA
- LDA randTemp
- ADC randSeedHigh
- STA randSeedHigh
- PLA ; rand = rand + 0x3611
- CLC
- ADC #$11
- STA randSeedLow
- LDA randSeedHigh
- ADC #$36
- STA randSeedHigh
- RTS
- BankTable:
- .db $00,$01,$02,$03,$04,$05,$06,$07
- Bankswitch:
- TAX
- STA BankTable,x
- RTS
- KillBoss:
- LDA BossDead
- CMP #$00
- BNE .End
- LDA EnemyLifeAmt
- CMP #$18
- BCS .Start
- RTS
- .Start:
- LDA #$02
- JSR Bankswitch
- JSR EraseBossExtras
- JSR SetBossLoopTotal
- LDX #$00
- LDY #$00
- .Connect:
- LDA EnemyDeadPhase
- CMP #$00
- BEQ .Up
- JMP .Down
- .Up:
- LDA $0640
- CMP #$70
- BCC .DownFlag
- LDA BossMusicPlayed
- CMP #$01
- BEQ .SkipMusic
- LDA #$00
- JSR Bankswitch
- LDA #$03
- STA SongNum
- LDA SongNum
- JSR FamiToneMusicPlay
- LDA #$01
- STA BossMusicPlayed
- .SkipMusic:
- .UpLoop:
- LDA $0640,x
- SEC
- SBC #$04
- STA $0640,x
- INX
- INX
- INX
- INX
- CPX LoopTotal
- BNE .UpLoop
- RTS
- .DownFlag:
- LDA #$01
- STA EnemyDeadPhase
- .Down:
- LDA $0640
- CMP #$DE
- BCS .Finish
- .DownLoop:
- LDA $0640,x
- CLC
- ADC #$08
- STA $0640,x
- INX
- INX
- INX
- INX
- CPX LoopTotal
- BNE .DownLoop
- .End:
- RTS
- .Finish:
- LDA #$00
- STA EnemyDeadPhase
- STA EnemyDead
- LDX #$00
- .DeadLoop:
- LDA #$FE
- STA $0640,x
- STA $0643,x
- INX
- INX
- INX
- INX
- CPX LoopTotal
- BNE .DeadLoop
- LDA #$01
- STA BossDead
- STA StageBeat
- RTS
- LevelFinished:
- LDA BossDead
- CMP #$01
- BEQ .Start
- CMP #$02
- BEQ .Move
- RTS
- .Start:
- LDA DelayTimer
- CMP #$40
- BNE .Inc
- LDA SkipBossMusic
- CMP #$01
- BEQ .SkipMusic
- LDA #$00
- JSR Bankswitch
- LDA #$04
- STA SongNum
- LDA SongNum
- JSR FamiToneMusicPlay
- LDA #$01
- STA SkipBossMusic
- .SkipMusic:
- LDA EndTimer+1
- CMP #$01
- BEQ .Second
- INC EndTimer
- LDA EndTimer
- BNE .End
- INC EndTimer+1
- .Second:
- INC EndTimer
- LDA EndTimer
- CMP #$A0
- BNE .End
- LDA #$00
- JSR Bankswitch
- JSR FamiToneMusicStop
- LDA #$02
- STA BossDead
- RTS
- .Inc:
- INC DelayTimer
- RTS
- .Move:
- LDA CurrentFloor
- CMP #$00
- BEQ .Left
- CMP #$02
- BEQ .Left
- LDA $0607
- CMP #$FD
- BCS .SpawnPoints
- LDX #$00
- .Loop3:
- LDA $0607,x
- CLC
- ADC #$01
- STA $0607,x
- LDA #%01000000
- STA $0606,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop3
- LDA #$02
- JSR Bankswitch
- JSR SwapRight
- JSR AnimateChum
- RTS
- .Left:
- LDA $0607
- CMP #$02
- BCC .SpawnPoints
- LDX #$00
- .Loop:
- LDA $0607,x
- SEC
- SBC #$01
- STA $0607,x
- LDA #$00
- STA $0606,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop
- LDA #$02
- JSR Bankswitch
- JSR SwapLeft
- JSR AnimateChum
- .End:
- RTS
- .SpawnPoints:
- LDX #$00
- .Loop2:
- LDA #$01
- STA $0607,x
- LDA #$FF
- STA $0604,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop2
- LDA #$03
- STA BossDead
- RTS
- SetDarkChumSprite:
- LDX #$00
- LDY #$00
- .Loop:
- LDA DarkWalk2,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop
- LDA #$01
- STA BossPlacedFlag
- RTS
- DarkStandStill:
- LDA DarkJumpFlag
- CMP #$00
- BNE .End
- LDA DarkDuckFlag
- CMP #$01
- BEQ .End
- LDA ChumAttacking
- CMP #$01
- BEQ .End
- LDA ButtonsP1
- AND #%00000011
- BNE .End
- LDX #$00
- LDY #$00
- .Loop2:
- LDA DarkWalk2,x
- STA $0641,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$0F
- BNE .Loop2
- .End:
- RTS
- PlaceWorkGraphic:
- LDA #$00
- JSR Bankswitch
- LDA #$1C
- JSR FamiToneSamplePlay
- LDA #$01
- JSR Bankswitch
- LDA $0643
- CMP #$81
- BCS .Cont
- JMP .Left
- .Cont:
- LDA #$F8
- STA $06C1
- LDA #$F9
- STA $06C5
- LDA #$FA
- STA $06C9
- LDA #$FB
- STA $06CD
- LDA #$8F
- STA $06C0
- STA $06C4
- STA $06C8
- CLC
- ADC #$08
- STA $06CC
- LDA #$D3
- STA $06C3
- CLC
- ADC #$08
- STA $06C7
- CLC
- ADC #$08
- STA $06CB
- STA $06CF
- LDA #$01
- STA $06C2
- STA $06C6
- STA $06CA
- LDA #%01000001
- STA $06CE
- RTS
- .Left:
- LDA #$F8
- STA $06C1
- LDA #$F9
- STA $06C5
- LDA #$FA
- STA $06C9
- LDA #$FB
- STA $06CD
- LDA #$8F
- STA $06C0
- STA $06C4
- STA $06C8
- CLC
- ADC #$08
- STA $06CC
- LDA #$15
- STA $06C3
- STA $06CF
- CLC
- ADC #$08
- STA $06C7
- CLC
- ADC #$08
- STA $06CB
- LDA #$01
- STA $06C2
- STA $06C6
- STA $06CA
- STA $06CE
- RTS
- PlaceCorey:
- LDA CurrentFloor
- CMP #$01
- BNE .End
- LDA NametableCount
- CMP #$08
- BNE .End
- LDA BossPlacedFlag
- CMP #$01
- BEQ .End
- JSR MurderEnemies
- LDA ReadytoSpawn
- CMP #$01
- BNE .End
- LDA #$01
- JSR Bankswitch
- JSR ActuallyPlaceCorey
- LDA #$00
- STA BossTimer
- LDA #$02
- STA SongNum
- LDA #$00
- JSR Bankswitch
- LDA SongNum
- JSR FamiToneMusicPlay
- .End:
- RTS
- PlaceRick:
- LDA CurrentFloor
- CMP #$02
- BNE .End
- LDA NametableCount
- CMP #$00
- BNE .End
- LDA BossPlacedFlag
- CMP #$01
- BEQ .End
- LDA #$01
- JSR Bankswitch
- JSR MurderEnemies
- LDA ReadytoSpawn
- CMP #$01
- BNE .End
- JSR ActuallyPlaceRick
- LDA #$02
- STA SongNum
- LDA #$00
- JSR Bankswitch
- LDA SongNum
- JSR FamiToneMusicPlay
- .End:
- RTS
- PlaceAntoine:
- LDA CurrentFloor
- CMP #$00
- BNE .End
- LDA NametableCount
- CMP #$00
- BNE .End
- LDA BossPlacedFlag
- CMP #$01
- BEQ .End
- LDA #$01
- JSR Bankswitch
- JSR MurderEnemies
- LDA ReadytoSpawn
- CMP #$01
- BNE .End
- JSR ActuallyPlaceAntoine
- LDA #$02
- STA SongNum
- LDA #$00
- JSR Bankswitch
- LDA SongNum
- JSR FamiToneMusicPlay
- .End:
- RTS
- PlaceDarkChum:
- LDA CurrentFloor
- CMP #$03
- BNE .End
- LDA NametableCount
- CMP #$08
- BNE .End
- LDA BossPlacedFlag
- CMP #$01
- BEQ .End
- LDA #$01
- JSR Bankswitch
- JSR MurderEnemies
- LDA ReadytoSpawn
- CMP #$01
- BNE .End
- JSR ActuallyPlaceDarkChum
- LDA #$02
- STA SongNum
- LDA #$00
- JSR Bankswitch
- LDA SongNum
- JSR FamiToneMusicPlay
- .End:
- RTS
- .include "Music/famitone2.asm"
- .bank 7
- .org $E000
- RESET:
- SEI ; disable IRQs
- CLD ; disable decimal mode
- LDX #$40
- STX $4017 ; disable APU frame IRQ
- LDX #$FF
- TXS ; Set up stack
- INX ; now X = 0
- STX $2000 ; disable NMI
- STX $2001 ; disable rendering
- STX $4010 ; disable DMC IRQs
- JSR vblankwait
- clrmem:
- LDA #$00
- STA $0000, x
- STA $0100, x
- STA $0200, x
- STA $0400, x
- STA $0500, x
- STA $0700, x
- LDA #$FE
- STA $0300, x
- STA $0600, x
- INX
- BNE clrmem
- ;;;initializing stuff ;;;
- lda #1
- sta $4016
- lda $4016
- lda $4017
- lda #0
- sta $4016
- LDA #%00011110
- STA soft2001
- LDX #$00
- .Loop:
- LDA #$FF
- STA $0400,x
- INX
- CPX #$20
- BNE .Loop
- JSR RegionDetect
- LDA #$00
- JSR Bankswitch
- LDA Region
- LDX #low(PawnStars_music_data)
- LDY #high(PawnStars_music_data)
- JSR FamiToneInit
- LDX #LOW(sounds)
- LDY #HIGH(sounds)
- JSR FamiToneSfxInit
- ; JSR LoadFlashtoScores
- ; JSR LoadFlashAchievements
- LDA #$02
- STA LevelTimer
- LDA #$00
- STA LevelTimer+1
- STA LevelTimer+2
- STA LevelTimer+3
- STA Fan1Stage
- LDA #$02
- STA PlayerLife
- STA PlayerLifeP2
- LDA #$01
- STA Fan2Stage
- LDA #$02
- STA Fan3Stage
- LDA #$00
- STA LifeAmt
- STA EnemyLifeAmt
- LDA #$08
- STA NametableCount
- ;;starting state;;
- LDA #STATELOADTITLE
- ; LDA #STATELOADINTERLUDE
- STA gamestate
- ;;;;;;;;;;;;;;;;;;;;;;;;;
- LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
- STA $2000
- LDA #%00011110 ; enable sprites, enable background, no clipping on left side
- STA soft2001
- Forever:
- JMP Forever ;jump back to Forever, infinite loop, waiting for NMI
- NMI:
- pha
- txa
- pha
- tya
- pha
- ; lda LoadingMusic
- ; beq .NoMusic
- ; JMP GameEngineDone
- ;.NoMusic:
- LDA #$00
- STA $2003 ; set the low byte (00) of the RAM address
- LDA #$03
- STA $4014 ; set the high byte (03) of the RAM address, start the transfer
- JSR RunPaletteTimer
- JSR UpdatePalette
- LDA gamestate
- ASL A
- TAY
- LDA NMIPointer,y
- STA AddrLow
- LDA NMIPointer+1,y
- STA AddrHigh
- JMP [AddrLow]
- NMIDone:
- JSR ResetController
- ;;This is the PPU clean up section, so rendering the next frame starts properly.
- LDA #$00
- STA $2006 ; clean up PPU address registers
- STA $2006
- LDA #$00 ; start with no scroll for status bar
- STA $2005
- STA $2005
- LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
- STA $2000 ; start with nametable = 0 for status bar
- LDA soft2001 ; enable sprites, enable background, no clipping on left side
- STA $2001
- LDA gamestate
- CMP #STATEPLAYING
- BCC SkipSprite0
- CMP #STATEENDING
- BEQ WaitNotSprite0
- CMP #STATEINTERLUDE
- BEQ WaitNotSprite0
- CMP #STATELOADCREDITS
- BCS SkipSprite0
- WaitNotSprite0:
- lda $2002
- and #%01000000
- bne WaitNotSprite0 ; wait until sprite 0 not hit
- WaitSprite0:
- lda $2002
- and #%01000000
- beq WaitSprite0 ; wait until sprite 0 is hit
- ldx #$10
- WaitScanline:
- dex
- bne WaitScanline
- LDA Xscroll
- STA $2005 ; write the horizontal scroll count register
- LDA #$00 ; no vertical scrolling
- STA $2005
- LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
- ora nametable
- STA $2000 ; start with nametable = 0 for status bar
- LDA soft2001 ; enable sprites, enable background, no clipping on left side
- STA $2001
- SkipSprite0:
- LDA BossDead
- CMP #$00
- BNE GameEngine
- JSR ReadController ;;get the current button data for player 1
- GameEngine:
- LDA gamestate
- ASL A
- TAY
- LDA GameEnginePointer,y
- STA AddrLow
- LDA GameEnginePointer+1,y
- STA AddrHigh
- JMP [AddrLow]
- GameEngineDone:
- JSR CopySprites
- LDA #$00
- JSR Bankswitch
- JSR FamiToneUpdate
- pla
- tay
- pla
- tax
- pla
- RTI ; return from interrupt
- ;;;;;;;;;
- GameEnginePointer:
- .dw EngineLoadTitle, EngineTitle, EngineLoadPlaying, EnginePlaying, EngineHit, EngineLoadCredits, EngineCredits
- .dw EngineLoadGameOver, EngineGameOver, EngineLoadEnding, EngineEnding, EngineLoadInterlude, EngineInterlude
- NMIPointer:
- .dw BlankNMI, TitleNMI, BlankNMI, PlayingNMI, HitNMI, BlankNMI, BlankNMI, BlankNMI, BlankNMI, BlankNMI, EndingNMI
- .dw BlankNMI, InterludeNMI
- BlankNMI:
- JMP NMIDone
- TitleNMI:
- JMP NMIDone
- PlayingNMI:
- LDA PausedFlag
- CMP #$01
- BEQ .Paused
- LDA LevelStarting
- CMP #$01
- BEQ .Skip
- LDA BossDead
- CMP #$03
- BEQ .Finish
- JSR FlashInvincibility
- JSR UpdateBossPalette
- JSR RunBuffer
- JSR KillBossFan
- JSR AnimateFans
- JMP NMIDone
- .Skip:
- JSR AnimateFans
- JSR DrawPlayerReadyText
- JMP NMIDone
- .Finish:
- JSR RunBuffer
- JSR UpdateLife
- JSR AnimateFans
- .Paused:
- JMP NMIDone
- HitNMI:
- JSR UpdateLife
- JSR DrawFloorTimer
- JMP NMIDone
- EndingNMI:
- LDA CurrentPalette
- CMP #$04
- BCC .End
- LDA #$02
- JSR Bankswitch
- JSR AnimateHorizontalWater
- JSR AnimateVerticalWater
- JSR UpdateText
- JSR IncrementLetter
- .End:
- JMP NMIDone
- InterludeNMI:
- LDA CurrentPalette
- CMP #$04
- BCC .End
- LDA #$02
- JSR Bankswitch
- JSR UpdateText2
- JSR IncrementLetter2
- .End:
- JMP NMIDone
- KillBossFan:
- LDA CurrentFloor
- CMP #$03
- BNE .End
- LDA BossPlacedFlag
- CMP #$01
- BNE .End
- LDA BossFan
- CMP #$01
- BNE .2
- JSR KillFan2
- JSR KillFan3
- RTS
- .2:
- LDA BossFan
- CMP #$02
- BNE .3
- JSR KillFan1
- JSR KillFan3
- RTS
- .3:
- LDA BossFan
- CMP #$03
- BNE .End
- JSR KillFan1
- JSR KillFan2
- .End:
- RTS
- KillFan1:
- LDX #$00
- LDA #$21
- STA $2006
- LDA #$42
- STA $2006
- .Loop:
- LDA #$07
- STA $2007
- INX
- CPX #$05
- BNE .Loop
- RTS
- KillFan2:
- LDX #$00
- LDA #$21
- STA $2006
- LDA #$4D
- STA $2006
- .Loop:
- LDA #$07
- STA $2007
- INX
- CPX #$05
- BNE .Loop
- RTS
- KillFan3:
- LDX #$00
- LDA #$21
- STA $2006
- LDA #$58
- STA $2006
- .Loop:
- LDA #$07
- STA $2007
- INX
- CPX #$05
- BNE .Loop
- RTS
- AnimateFans:
- LDA BossDead
- CMP #$00
- BNE .Skipto
- LDA EnemyHitFlag
- CMP #$01
- BEQ .End
- LDA FloorFlashFlag
- CMP #$01
- BEQ .End
- LDA AwardPointsFlag
- CMP #$01
- BEQ .End
- LDA AwardHiScoreFlag
- CMP #$01
- BEQ .End
- LDA AddTimerFlag
- CMP #$01
- BEQ .End
- .Skipto:
- INC FanTimer
- LDA FanTimer
- CMP #$01
- BEQ .1
- CMP #$02
- BEQ .2
- CMP #$03
- BEQ .3
- CMP #$04
- BEQ .4
- CMP #$05
- BEQ .5
- CMP #$06
- BEQ .6
- CMP #$07
- BEQ .Reset
- .End:
- RTS
- .1:
- JSR AnimateFan1
- RTS
- .2:
- JSR AnimateFan2
- RTS
- .3:
- JSR AnimateFan3
- RTS
- .4:
- JSR AnimateFan4
- RTS
- .5:
- JSR AnimateFan5
- RTS
- .6:
- JSR AnimateFan6
- RTS
- .Reset:
- LDA #$00
- STA FanTimer
- RTS
- AnimateFan1:
- LDA CurrentFloor
- CMP #$03
- BNE .Regular
- LDA BossPlacedFlag
- CMP #$01
- BNE .Regular
- LDA BossDead
- CMP #$01
- BEQ .Regular
- LDA BossFan
- CMP #$00
- BEQ .Regular
- CMP #$01
- BEQ .Regular
- RTS
- .Regular:
- LDA Fan1Stage
- ASL A
- TAY
- LDA FanPointer,y
- STA AddrLow
- LDA FanPointer+1,y
- STA AddrHigh
- LDX #$00
- LDY #$00
- LDA #$21
- STA $2006
- LDA #$42
- STA $2006
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INC Fan1Stage
- LDA Fan1Stage
- CMP #$04
- BNE .End
- LDA #$00
- STA Fan1Stage
- .End:
- RTS
- AnimateFan4:
- LDA Fan4Stage
- ASL A
- TAY
- LDA FanPointer,y
- STA AddrLow
- LDA FanPointer+1,y
- STA AddrHigh
- LDX #$00
- LDY #$00
- LDA #$25
- STA $2006
- LDA #$42
- STA $2006
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INC Fan4Stage
- LDA Fan4Stage
- CMP #$04
- BNE .End
- LDA #$00
- STA Fan4Stage
- .End:
- RTS
- AnimateFan2:
- LDA CurrentFloor
- CMP #$03
- BNE .Regular
- LDA BossPlacedFlag
- CMP #$01
- BNE .Regular
- LDA BossDead
- CMP #$01
- BEQ .Regular
- LDA BossFan
- CMP #$00
- BEQ .Regular
- CMP #$02
- BEQ .Regular
- RTS
- .Regular:
- LDA Fan2Stage
- ASL A
- TAY
- LDA FanPointer,y
- STA AddrLow
- LDA FanPointer+1,y
- STA AddrHigh
- LDX #$00
- LDY #$00
- LDA #$21
- STA $2006
- LDA #$4D
- STA $2006
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INC Fan2Stage
- LDA Fan2Stage
- CMP #$04
- BNE .End
- LDA #$00
- STA Fan2Stage
- .End:
- RTS
- AnimateFan5:
- LDA Fan5Stage
- ASL A
- TAY
- LDA FanPointer,y
- STA AddrLow
- LDA FanPointer+1,y
- STA AddrHigh
- LDX #$00
- LDY #$00
- LDA #$25
- STA $2006
- LDA #$4D
- STA $2006
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INC Fan5Stage
- LDA Fan5Stage
- CMP #$04
- BNE .End
- LDA #$00
- STA Fan5Stage
- .End:
- RTS
- AnimateFan3:
- LDA CurrentFloor
- CMP #$03
- BNE .Regular
- LDA BossPlacedFlag
- CMP #$01
- BNE .Regular
- LDA BossDead
- CMP #$01
- BEQ .Regular
- LDA BossFan
- CMP #$00
- BEQ .Regular
- CMP #$03
- BEQ .Regular
- RTS
- .Regular:
- LDA Fan3Stage
- ASL A
- TAY
- LDA FanPointer,y
- STA AddrLow
- LDA FanPointer+1,y
- STA AddrHigh
- LDX #$00
- LDY #$00
- LDA #$21
- STA $2006
- LDA #$58
- STA $2006
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INC Fan3Stage
- LDA Fan3Stage
- CMP #$04
- BNE .End
- LDA #$00
- STA Fan3Stage
- .End:
- RTS
- AnimateFan6:
- LDA FanPlaced
- CMP #$00
- BNE .End
- LDA Fan6Stage
- ASL A
- TAY
- LDA FanPointer,y
- STA AddrLow
- LDA FanPointer+1,y
- STA AddrHigh
- LDX #$00
- LDY #$00
- LDA #$25
- STA $2006
- LDA #$58
- STA $2006
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INY
- LDA [AddrLow],y
- STA $2007
- INC Fan6Stage
- LDA Fan6Stage
- CMP #$04
- BNE .End
- LDA #$00
- STA Fan6Stage
- .End:
- RTS
- FanPointer:
- .dw Fan1, Fan2, Fan3, Fan2
- Fan1:
- .db $81,$82,$83,$84,$85
- Fan2:
- .db $07,$07,$86,$07,$07
- Fan3:
- .db $87,$88,$83,$89,$8A
- UpdateLife:
- LDA LifeAmt
- CMP #$18
- BCC .Cont
- LDA #$18
- STA LifeAmt
- .Cont:
- LDY #$00
- LDA LifeAmt
- ASL A
- ASL A
- ASL A
- TAX
- .Loop:
- LDA $2002
- LDA #$20
- STA $2006
- LDA #$88
- STA $2006
- LDA HealthAmt,x
- STA $2007
- LDA HealthAmt+1,x
- STA $2007
- LDA HealthAmt+2,x
- STA $2007
- LDA HealthAmt+3,x
- STA $2007
- LDA HealthAmt+4,x
- STA $2007
- LDA HealthAmt+5,x
- STA $2007
- RTS
- UpdateEnemyLife:
- LDY #$00
- LDA EnemyLifeAmt
- ASL A
- ASL A
- ASL A
- TAX
- .Loop:
- LDA #$20
- STA $0530
- LDA #$C8
- STA $0531
- LDA HealthAmt,x
- STA $0532
- LDA HealthAmt+1,x
- STA $0533
- LDA HealthAmt+2,x
- STA $0534
- LDA HealthAmt+3,x
- STA $0535
- LDA HealthAmt+4,x
- STA $0536
- LDA HealthAmt+5,x
- STA $0537
- RTS
- HealthAmt:
- .db $DA,$DA,$DA,$DA,$DA,$DA,$00,$00
- .db $DA,$DA,$DA,$DA,$DA,$DB,$00,$00
- .db $DA,$DA,$DA,$DA,$DA,$DC,$00,$00
- .db $DA,$DA,$DA,$DA,$DA,$DD,$00,$00
- .db $DA,$DA,$DA,$DA,$DA,$00,$00,$00
- .db $DA,$DA,$DA,$DA,$DB,$00,$00,$00
- .db $DA,$DA,$DA,$DA,$DC,$00,$00,$00
- .db $DA,$DA,$DA,$DA,$DD,$00,$00,$00
- .db $DA,$DA,$DA,$DA,$00,$00,$00,$00
- .db $DA,$DA,$DA,$DB,$00,$00,$00,$00
- .db $DA,$DA,$DA,$DC,$00,$00,$00,$00
- .db $DA,$DA,$DA,$DD,$00,$00,$00,$00
- .db $DA,$DA,$DA,$00,$00,$00,$00,$00
- .db $DA,$DA,$DB,$00,$00,$00,$00,$00
- .db $DA,$DA,$DC,$00,$00,$00,$00,$00
- .db $DA,$DA,$DD,$00,$00,$00,$00,$00
- .db $DA,$DA,$00,$00,$00,$00,$00,$00
- .db $DA,$DB,$00,$00,$00,$00,$00,$00
- .db $DA,$DC,$00,$00,$00,$00,$00,$00
- .db $DA,$DD,$00,$00,$00,$00,$00,$00
- .db $DA,$00,$00,$00,$00,$00,$00,$00
- .db $DB,$00,$00,$00,$00,$00,$00,$00
- .db $DC,$00,$00,$00,$00,$00,$00,$00
- .db $DD,$00,$00,$00,$00,$00,$00,$00
- .db $00,$00,$00,$00,$00,$00,$00,$00
- FlashFloor:
- INC FloorSquareTimer
- LDA FloorSquareTimer
- CMP #$20
- BEQ .Reset
- LDA #$00
- STA $0520
- STA $0521
- STA $0522
- RTS
- .Reset:
- LDA CurrentFloor
- ASL A
- TAY
- LDA FloorOffset
- CMP #$00
- BEQ .Setto1
- LDA #$00
- STA FloorOffset
- JMP .Skip
- .Setto1:
- LDA #$01
- STA FloorOffset
- .Skip:
- LDX #$00
- LDA #$00
- STA FloorSquareTimer
- .Loop:
- LDA #$20
- STA $0520
- TYA
- CLC
- ADC #$90
- STA $0521
- LDA #$01
- CLC
- ADC FloorOffset
- STA $0522
- LDA #$01
- STA FloorFlashFlag
- RTS
- DrawFloorTimer:
- LDA AddTimerFlag
- CMP #$01
- BNE .Erase
- LDX #$00
- LDY #$00
- LDA #$20
- STA $0510,x
- INX
- LDA #$BA
- STA $0510,x
- INX
- .Loop:
- LDA LevelTimer,y
- STA $0510,x
- INX
- INY
- CPY #$05
- BNE .Loop
- RTS
- .Erase:
- LDX #$00
- .EraseLoop:
- LDA #$00
- STA $0510,x
- INX
- CPX #$06
- BNE .EraseLoop
- RTS
- RunFloorTimer:
- LDA BossDead
- CMP #$00
- BNE .End
- INC TimerTimer
- LDA TimerTimer
- CMP #$04
- BEQ .Run
- .End:
- RTS
- .Run:
- LDA #$01
- STA AddTimerFlag
- LDA #$00
- STA TimerTimer
- DEC LevelTimer+3
- LDA LevelTimer+3
- CMP #$FF
- BEQ .ResetOnes
- RTS
- .ResetOnes:
- LDA #$09
- STA LevelTimer+3
- DEC LevelTimer+2
- LDA LevelTimer+2
- CMP #$FF
- BEQ .ResetTens
- RTS
- .ResetTens:
- LDA #$09
- STA LevelTimer+2
- DEC LevelTimer+1
- LDA LevelTimer+1
- CMP #$FF
- BEQ .ResetHundreds
- RTS
- .ResetHundreds:
- LDA #$09
- STA LevelTimer+1
- DEC LevelTimer
- LDA LevelTimer
- CMP #$FF
- BEQ .GameOver
- RTS
- .GameOver:
- LDA #$00
- STA LevelTimer
- STA LevelTimer+1
- STA LevelTimer+2
- STA LevelTimer+3
- LDA #$18
- STA LifeAmt
- LDA #$01
- STA PlayerDeadFlag
- RTS
- EngineLoadTitle:
- LDA #$00
- sta $2000
- sta $2001 ;;turn screen off
- ;;bank setup;;
- LDA #$01
- JSR Bankswitch
- LDA #low(GameTiles)
- STA AddrLow
- LDA #high(GameTiles)
- STA AddrHigh
- JSR CopyCHRData
- ;;bank setup end;;
- LDA #$00
- STA SPRITES_ptr
- JSR LoadSprites
- LDA #$00
- STA BG_ptr
- STA ATTR_ptr
- STA PAL_ptr
- STA LevelStarting
- LDA #$00
- JSR Bankswitch
- JSR LoadNametable
- JSR LoadAttribute
- LDA #$00
- STA PaletteDone
- STA CurrentPalette
- STA PaletteTimer
- JSR vblankwait
- LDA #STATETITLE
- STA gamestate
- LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
- STA $2000
- LDA #%00011110 ; enable sprites, enable background, no clipping on left side
- STA soft2001
- JMP GameEngineDone
- ;;;;;;;;;
- EngineTitle:
- LDA #$00
- JSR Bankswitch
- JSR PlaySoundEffect
- LDA #$01
- JSR Bankswitch
- JSR TitleSelect
- LDA #$02
- JSR Bankswitch
- JSR TitleStart
- JMP GameEngineDone
- ;;;;;;;;;;;;;;
- EngineLoadPlaying:
- LDA #$00
- sta $2000
- sta $2001 ;;turn screen off
- LDA Game2p
- CMP #$01
- BNE .Connect
- LDA CurrentPlayer
- CMP #$01
- BNE .2nd
- LDA CurrentFloorP1
- STA CurrentFloor
- JMP .Connect
- .2nd:
- LDA CurrentFloorP2
- STA CurrentFloor
- .Connect:
- LDA #$01
- STA SPRITES_ptr
- LDA #$00
- JSR Bankswitch
- LDA #$00
- STA SongNum
- LDA SongNum
- JSR FamiToneMusicPlay
- LDA #$01
- JSR Bankswitch
- JSR LoadSprites
- LDA #$01
- STA BG_ptr
- STA ATTR_ptr
- STA PAL_ptr
- LDA #$00
- JSR Bankswitch
- JSR LoadNametable
- JSR LoadAttribute
- LDA Game2p
- CMP #$01
- BEQ .SkipTemp
- LDA #$44
- STA TempNumber
- .SkipTemp:
- JSR DrawPlayerFloorBkgd
- JSR RunBuffer
- LDA #$00
- STA PaletteDone
- STA CurrentPalette
- STA PaletteTimer
- STA nametable
- STA JumpFlag
- STA CurrentLetterRow
- LDA #$01
- STA LevelStarting
- STA AwardPointsFlag
- STA AwardHiScoreFlag
- STA NoScroll
- JSR UpdatePoints
- JSR RunBuffer
- LDA #$02
- JSR Bankswitch
- JSR UpdateHiScore
- JSR RunBuffer
- JSR ChumInitialLocation
- JSR LoadPortraitSprites
- LDA #$20
- STA $2006
- LDA #$D3
- STA $2006
- LDA CurrentPlayer
- CMP #$02
- BNE .Regular
- LDA PlayerLifeP2
- CLC
- ADC #$D0
- STA $2007
- JMP .SkipLife
- .Regular:
- LDA PlayerLife
- CLC
- ADC #$D0
- STA $2007
- .SkipLife:
- LDA #$20
- STA $2006
- LDA #$D8
- STA $2006
- LDA CurrentPlayer
- CMP #$02
- BNE .Regular2
- LDA LoopP2
- CLC
- ADC #$D0
- STA $2007
- JMP .SkipLife2
- .Regular2:
- LDA LoopP1
- CLC
- ADC #$D0
- STA $2007
- .SkipLife2:
- JSR UpdateOtherPoints
- LDA #$00
- STA Xscroll
- STA PlaceFlag
- JSR vblankwait
- LDA #STATEPLAYING
- STA gamestate
- LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
- STA $2000
- LDA #%00011110 ; enable sprites, enable background, no clipping on left side
- STA soft2001
- JMP GameEngineDone
- ;;;;;;;;;;;;;;;;
- EnginePlaying:
- LDA LifeAmt
- CMP #$18
- BCC .Playing
- JSR RespawnPlayer
- LDA BossDead
- CMP #$03
- BEQ .Playing
- LDA #$02
- JSR Bankswitch
- JSR KillPlayer
- JMP GameEngineDone
- .Playing:
- LDA LevelStarting
- CMP #$01
- BEQ .InitialSet
- LDA PausedFlag
- CMP #$01
- BEQ .Paused
- JMP .PlayingRoutines
- .InitialSet:
- JSR MoveChumIntoPlace
- JMP GameEngineDone
- .Paused:
- LDA #$00
- JSR Bankswitch
- JSR PlaySoundEffect
- JSR CheckForPause
- JMP GameEngineDone
- .PlayingRoutines:
- LDA #$00
- JSR Bankswitch
- JSR PlaySoundEffect
- LDA #$02
- JSR Bankswitch
- JSR ChumJump
- JSR ChumDuck
- JSR MoveLeft
- JSR MoveRight
- JSR ChumAttack
- LDA #$02
- JSR Bankswitch
- JSR RunAttackDelay
- JSR PlaceGrandma
- JSR MoveGrandma
- JSR PlaceKid
- JSR MoveKid
- JSR PlaceNerd
- JSR MoveNerd
- JSR PlaceBird
- JSR MoveBird
- LDA #$01
- JSR Bankswitch
- JSR PlaceBoss
- LDA #$01
- JSR Bankswitch
- JSR RunBoss
- LDA #$02
- JSR Bankswitch
- JSR ChumActuallyAttack
- JSR RunAnimationTimers
- JSR ChumCollision
- JSR AttackCollision
- JSR KillEnemies
- JSR RunFloorTimer
- JSR SpawnEnemies
- JSR KillBoss
- LDA #$02
- JSR Bankswitch
- JSR LevelFinished
- LDA #$02
- JSR Bankswitch
- JSR FinishPoints
- LDA #$02
- JSR Bankswitch
- JSR Jump
- JSR ActuallyJump
- JSR ActuallyJumpDown
- JSR UpdateHiScore
- LDA #$00
- JSR Bankswitch
- JSR CheckForPause
- LDA #$01
- JSR Bankswitch
- JSR LookForFan
- LDA #$02
- JSR Bankswitch
- JSR EraseFan
- JSR DropFan
- JSR UpdatePoints
- JSR DrawFloorTimer
- JSR FlashFloor
- JSR UpdateEnemyLife
- JMP GameEngineDone
- ;;;;;;;;;;;;;;;;
- EngineLoadCredits:
- LDA #$00
- sta $2000
- sta $2001 ;;turn screen off
- LDA #$03
- STA BG_ptr
- LDA #$02
- STA ATTR_ptr
- LDA #$00
- JSR Bankswitch
- JSR LoadNametable
- JSR LoadAttribute
- LDA #$00
- STA PaletteDone
- STA CurrentPalette
- STA PaletteTimer
- LDA #$FE
- STA $0600
- STA $0604
- STA $0608
- STA $060C
- JSR vblankwait
- LDA #STATECREDITS
- STA gamestate
- LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
- STA $2000
- LDA #%00011110 ; enable sprites, enable background, no clipping on left side
- STA soft2001
- JMP GameEngineDone
- ;;;;;;;;;;;;;;;;
- EngineCredits:
- LDA ButtonsP1
- AND #%00010000
- BEQ .Skip
- LDA StartHeld
- CMP #$01
- BEQ .Skip
- LDA #$01
- STA StartHeld
- LDA #STATELOADTITLE
- STA gamestate
- .Skip:
- JMP GameEngineDone
- ;;;;;;;;;;;;;;;;
- EngineLoadGameOver:
- LDA #$00
- sta $2000
- sta $2001 ;;turn screen off
- LDA #$02
- JSR Bankswitch
- JSR LoadBlankNametable
- JSR LoadGameOverText
- JSR LoadBlankAttribute
- LDA #$00
- STA PaletteDone
- STA CurrentPalette
- STA PaletteTimer
- LDA #$00
- JSR Bankswitch
- JSR FamiToneMusicStop
- JSR vblankwait
- LDA #STATEGAMEOVER
- STA gamestate
- LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
- STA $2000
- LDA #%00011110 ; enable sprites, enable background, no clipping on left side
- STA soft2001
- JMP GameEngineDone
- ;;;;;;;;;;;;;;;;
- EngineLoadEnding:
- LDA #$00
- sta $2000
- sta $2001 ;;turn screen off
- LDA #$04
- STA BG_ptr
- LDA #$03
- STA ATTR_ptr
- LDA #$02
- STA PAL_ptr
- STA SPRITES_ptr
- LDA #$00
- JSR Bankswitch
- JSR KillSprites
- JSR LoadNametable
- JSR LoadAttribute
- JSR LoadSprites
- LDA #$00
- STA PaletteDone
- STA CurrentPalette
- STA PaletteTimer
- STA CurrentLetterRow
- JSR vblankwait
- LDA #STATEENDING
- STA gamestate
- LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
- STA $2000
- LDA #%00011110 ; enable sprites, enable background, no clipping on left side
- STA soft2001
- JMP GameEngineDone
- ;;;;;;;;;;;;;;;;
- EngineEnding:
- LDA #$02
- JSR Bankswitch
- JSR AnimateChum
- JSR AnimatePinky
- JSR CheckEndFadeOut
- LDA EndPart
- STA XscrollPart
- LDA XscrollPart
- SEC
- SBC #$C0
- STA XscrollPart
- LDA Xscroll
- SBC #$00
- STA Xscroll
- JSR ScrollLamps
- JMP GameEngineDone
- ;;;;;;;;;;;;;;;;
- EngineLoadInterlude:
- LDA #$00
- sta $2000
- sta $2001 ;;turn screen off
- LDA #$06
- STA BG_ptr
- LDA #$03
- STA ATTR_ptr
- LDA #$02
- STA PAL_ptr
- STA SPRITES_ptr
- LDA #$00
- JSR Bankswitch
- JSR KillSprites
- JSR LoadNametable
- JSR LoadAttribute
- JSR LoadSprites
- LDA #$00
- STA PaletteDone
- STA CurrentPalette
- STA PaletteTimer
- LDA #$89
- STA $0600
- JSR vblankwait
- LDA #STATEINTERLUDE
- STA gamestate
- LDA #%10010000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
- STA $2000
- LDA #%00011110 ; enable sprites, enable background, no clipping on left side
- STA soft2001
- JMP GameEngineDone
- ;;;;;;;;;;;;;;;;
- EngineInterlude:
- LDA #$02
- JSR Bankswitch
- JSR AnimatePinky
- JSR KillAllButPinky
- LDA XscrollPart
- SEC
- SBC #$C0
- STA XscrollPart
- LDA Xscroll
- SBC #$00
- STA Xscroll
- JMP GameEngineDone
- ;;;;;;;;;;;;;;;;
- EngineGameOver:
- LDA Game2p
- CMP #$01
- BNE .End
- LDA PlayerLifeP2
- CMP #$FF
- BEQ .End
- INC FinalTimer
- LDA FinalTimer
- CMP #$80
- BNE .Skip
- LDA #$02
- STA CurrentPlayer
- LDA #STATELOADPLAYING
- STA gamestate
- JMP GameEngineDone
- .End:
- LDA ButtonsP1
- AND #%00010000
- BEQ .Skip
- LDA StartHeld
- CMP #$01
- BEQ .Skip
- LDA #$01
- STA StartHeld
- LDA #STATELOADTITLE
- STA gamestate
- .Skip:
- JMP GameEngineDone
- ;;;;;;;;;;;;;;;;
- EngineHit:
- LDA #$02
- JSR Bankswitch
- JSR PlaceGrandma
- JSR MoveGrandma
- JSR PlaceKid
- JSR MoveKid
- JSR PlaceNerd
- JSR MoveNerd
- JSR PlaceBird
- JSR MoveBird
- ; JSR RunBoss
- JSR RunAnimationTimers
- JSR RunFloorTimer
- JSR CollisionStuff
- JMP GameEngineDone
- CollisionStuff:
- LDA ChumHit
- CMP #$02
- BEQ .Left
- JMP .Right
- .Left:
- ; LDA BossPlacedFlag
- ; CMP #$01
- ; BNE .NotBossLeft
- ; JSR BossCollisionLeft
- ; RTS
- ;.NotBossLeft: ;Chum getting knocked left
- LDA ChumTempX
- CMP #$00
- BEQ .Finish
- LDA DirFacing
- CMP #$01
- BEQ .DirRight
- LDA $0607
- JMP .DirConnect
- .DirRight:
- LDA $060F
- .DirConnect:
- CMP #$79
- BCC .Set
- .RegularL:
- LDX #$00
- .MoveChumLeft:
- LDA $0607,x
- SEC
- SBC #$03
- STA $0607,x
- TXA
- CLC
- ADC #$04
- TAX
- CPX #$3C
- BNE .MoveChumLeft
- LDA ChumTempX
- SEC
- SBC #$03
- STA ChumTempX
- RTS
- .Set:
- LDA BossPlacedFlag
- CMP #$01
- BEQ .RegularL
- LDA Xscroll
- SEC
- SBC #$03
- STA Xscroll
- LDA ChumTempX
- SEC
- SBC #$03
- STA ChumTempX
- LDX #$00
- .Loop:
- LDA $0643,x
- CMP #$FE
- BEQ .Skip
- CLC
- ADC #$03
- STA $0643,x
- .Skip:
- INX
- INX
- INX
- INX
- CPX #$80
- BNE .Loop
- RTS
- .Finish:
- LDA #$00
- JSR Bankswitch
- LDA #$1A
- JSR FamiToneSamplePlay
- LDA #STATEPLAYING
- STA gamestate
- RTS
- .Right:
- ; LDA BossPlacedFlag
- ; CMP #$01
- ; BNE .NotBossRight
- ; JSR BossCollisionRight
- ; RTS
- ;.NotBossRight: ;Chum getting knocked left
- LDA ChumTempX
- CMP #$00
- BEQ .Finish
- LDA NametableCount
- CMP #$08
- BNE .Set2
- .RegularR:
- LDX #$00
- .MoveChumRight:
- LDA $0607,x
- CLC
- ADC #$03
- STA $0607,x
- TXA
- CLC
- ADC #$04
- TAX
- CPX #$3C
- BNE .MoveChumRight
- LDA ChumTempX
- SEC
- SBC #$03
- STA ChumTempX
- RTS
- .Set2:
- LDA BossPlacedFlag
- CMP #$01
- BEQ .RegularR
- LDA Xscroll
- CLC
- ADC #$03
- STA Xscroll
- LDA ChumTempX
- SEC
- SBC #$03
- STA ChumTempX
- LDX #$00
- .Loop2:
- LDA $0643,x
- CMP #$FE
- BEQ .Skip2
- SEC
- SBC #$03
- STA $0643,x
- .Skip2:
- INX
- INX
- INX
- INX
- CPX #$80
- BNE .Loop2
- RTS
- RedrawBaddies:
- LDX #$00
- LDY #$00
- .LoopStart:
- LDA EnemyMoveDirection,y
- CMP #$01
- BEQ .RightLoop
- .LeftLoop:
- LDA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- CLC
- ADC #$08
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- TXA
- CLC
- ADC #$20
- TAX
- INY
- CPX #$A0
- BNE .LoopStart
- JSR FixFlip
- RTS
- .RightLoop:
- LDA $0643,x
- STA $064B,x
- STA $0653,x
- STA $065B,x
- SEC
- SBC #$08
- STA $0647,x
- STA $064F,x
- STA $0657,x
- STA $065F,x
- TXA
- CLC
- ADC #$20
- TAX
- INY
- CPX #$A0
- BNE .LoopStart
- JSR FixFlip
- RTS
- PlaceBoss:
- JSR PlaceAntoine
- JSR PlaceCorey
- JSR PlaceRick
- JSR PlaceDarkChum
- RTS
- FixFlip:
- LDX #$00
- LDY #$00
- .LoopStart:
- LDA EnemyMoveDirection,y
- CMP #$01
- BEQ .RightLoop
- .LeftLoop:
- LDA #$01
- LDA $0642,x
- STA $064A,x
- STA $0652,x
- STA $065A,x
- STA $0646,x
- STA $064E,x
- STA $0656,x
- STA $065E,x
- TXA
- CLC
- ADC #$20
- TAX
- INY
- CPX #$A0
- BNE .LoopStart
- RTS
- .RightLoop:
- LDA #%01000001
- LDA $0642,x
- STA $064A,x
- STA $0652,x
- STA $065A,x
- STA $0646,x
- STA $064E,x
- STA $0656,x
- STA $065E,x
- TXA
- CLC
- ADC #$20
- TAX
- INY
- CPX #$A0
- BNE .LoopStart
- RTS
- SpawnEnemies:
- LDA BossPlacedFlag
- CMP #$01
- BEQ .End
- LDA CurrentFloor
- TAY
- LDA FloorStop,y
- CMP NametableCount
- BEQ .End
- INC SpawnTimer
- LDA SpawnTimer
- CMP #$40
- BEQ .Spawn
- BCS .ResetTimer
- .End:
- RTS
- .ResetTimer:
- LDA #$00
- STA SpawnTimer
- RTS
- .Spawn:
- ; LDA SpawnPlace
- ; CMP #$01
- ; BEQ .End
- LDA SpawnPlace
- CMP #$32
- BEQ .Reset
- LDA CurrentFloor
- ASL A
- TAY
- LDA SpawnFloors,y
- STA AddrLow
- LDA SpawnFloors+1,y
- STA AddrHigh
- LDY SpawnPlace
- LDA #$00
- STA SpawnTimer
- LDA [AddrLow],y
- STA PlaceFlag
- INC SpawnPlace
- RTS
- .Reset:
- LDA #$00
- STA SpawnPlace
- RTS
- FloorStop:
- .db $00,$08,$00,$08,$00
- SpawnFloors:
- .dw Floor1, Floor2, Floor3, Floor4
- Floor1:
- .db $01,$01,$01,$00,$00
- .db $01,$01,$01,$00,$00
- .db $01,$02,$01,$00,$00
- .db $01,$02,$01,$00,$00
- .db $01,$03,$02,$00,$00
- .db $01,$01,$01,$00,$00
- .db $02,$02,$02,$00,$00
- .db $02,$02,$02,$00,$00
- .db $02,$02,$04,$00,$00
- .db $02,$02,$02,$00,$00
- Floor2:
- .db $03,$03,$03,$00,$00
- .db $04,$04,$04,$00,$00
- .db $05,$06,$05,$00,$00
- .db $06,$05,$06,$00,$00
- .db $01,$03,$02,$00,$00
- .db $04,$02,$04,$04,$04
- .db $03,$01,$02,$00,$00
- .db $04,$01,$06,$00,$00
- .db $01,$02,$04,$03,$03
- .db $04,$06,$06,$06,$00
- Floor3:
- .db $06,$06,$05,$02,$00
- .db $01,$06,$04,$01,$03
- .db $05,$02,$05,$02,$04
- .db $02,$02,$02,$01,$03
- .db $04,$02,$05,$02,$06
- .db $04,$04,$02,$02,$01
- .db $03,$06,$02,$00,$00
- .db $01,$07,$03,$03,$05
- .db $05,$06,$06,$04,$04
- .db $02,$02,$00,$00,$05
- Floor4:
- .db $04,$04,$06,$04,$00
- .db $07,$07,$07,$04,$00
- .db $02,$01,$07,$08,$00
- .db $01,$02,$03,$04,$00
- .db $07,$07,$08,$08,$00
- .db $05,$06,$08,$08,$08
- .db $08,$02,$01,$04,$03
- .db $05,$07,$08,$06,$04
- .db $08,$07,$08,$08,$07
- .db $02,$04,$06,$01,$01
- DrawPlayerFloorBkgd:
- LDY #$00
- .OuterLoop:
- LDA $2002
- TYA
- CLC
- ADC #$21
- STA $2006
- LDA #$E7
- STA $2006
- LDX #$00
- .Loop:
- LDA PlayerFloorText,x
- STA $2007
- INX
- CPX #$12
- BNE .Loop
- TYA
- CLC
- ADC #$21
- STA $2006
- LDA #$F1
- STA $2006
- LDA #$D1
- CLC
- ADC CurrentFloor
- STA $2007
- TYA
- CLC
- ADC #$04
- TAY
- CPY #$08
- BNE .OuterLoop
- LDA #$21
- STA $2006
- LDA #$E8
- STA $2006
- LDA CurrentPlayer
- CLC
- ADC #$D0
- STA $2007
- LDA #$25
- STA $2006
- LDA #$E8
- STA $2006
- LDA CurrentPlayer
- CLC
- ADC #$D0
- STA $2007
- RTS
- RunAnimationTimers:
- INC EnemyAnimateTimer
- INC EnemyAnimateTimer+1
- INC EnemyAnimateTimer+2
- INC EnemyAnimateTimer+3
- INC EnemyAnimateTimer+4
- INC EnemyAnimateTimer+5
- LDA EnemyAnimateTimer
- CMP #$11
- BNE .End
- LDA #$00
- STA EnemyAnimateTimer
- STA EnemyAnimateTimer+1
- STA EnemyAnimateTimer+2
- STA EnemyAnimateTimer+3
- STA EnemyAnimateTimer+4
- STA EnemyAnimateTimer+5
- .End:
- RTS
- BossAttackCollision:
- LDA CurrentFloor
- CMP #$00
- BNE .TryCorey
- LDA #$00
- JSR Bankswitch
- JSR AntoineAttackCollision
- LDA #$02
- JSR Bankswitch
- RTS
- .TryCorey:
- LDA CurrentFloor
- CMP #$01
- BNE .TryRick
- LDA #$00
- JSR Bankswitch
- JSR CoreyAttackCollision
- LDA #$02
- JSR Bankswitch
- RTS
- .TryRick:
- LDA CurrentFloor
- CMP #$02
- BNE .TryDarkChum
- LDA #$00
- JSR Bankswitch
- JSR RickAttackCollision
- LDA #$02
- JSR Bankswitch
- RTS
- .TryDarkChum:
- LDA #$00
- JSR Bankswitch
- JSR DarkChumAttackCollision
- LDA #$02
- JSR Bankswitch
- RTS
- AttackCollision:
- LDA EnemyLifeAmt
- CMP #$18
- BEQ .Finish
- LDA ChumAttacking
- CMP #$01
- BNE .Finish
- LDA BossPlacedFlag
- CMP #$01
- BNE .Regular
- JSR BossAttackCollision
- RTS
- .Regular:
- LDX #$00
- LDY #$00
- .StartAgain:
- LDA $0641,x
- CMP EnemyTileList,y
- BEQ .Cont
- INY
- CPY #$0B
- BNE .StartAgain
- JMP .End
- .Cont:
- LDA JumpFlag
- CMP #$00
- BEQ .NotJumping
- JMP .JumpAttack
- .NotJumping:
- LDA DuckFlag
- CMP #$00
- BEQ .NotDuck
- JMP .DuckAttack
- .NotDuck:
- ;regular attack
- LDA $061D
- CMP #$19
- BNE .HitRight
- LDA $0641,x
- CMP #$D6
- BEQ .End
- CMP #$D9
- BEQ .End
- JMP .SkipBird
- .Finish:
- RTS
- .SkipBird:
- LDA $0604
- CLC
- ADC #$28
- CMP $0644,x
- BCC .HitRight
- .HitLeft:
- LDA $0647,x
- CLC
- ADC #$10
- CMP $0607
- BCC .HitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0647,x
- BCC .HitRight
- JSR AttackLanded
- .End:
- TXA
- CLC
- ADC #$20
- TAX
- CPX #$A0
- BEQ .Finish
- LDY #$00
- JMP .StartAgain
- .HitRight:
- LDA $0607
- CLC
- ADC #$10
- CMP $0647,x
- BCC .End
- LDA $0647,x
- CLC
- ADC #$04
- CMP $0607
- BCC .End
- JSR AttackLanded
- JMP .End
- .JumpAttack:
- LDA $061D
- CMP #$34
- BNE .End
- LDA $0641,x
- CMP #$D6
- BEQ .JumpBird
- CMP #$D9
- BEQ .JumpBird
- JMP .SkipJumpBird
- .JumpBird:
- LDA $0640,x
- CLC
- ADC #$04
- CMP $0604
- BCC .End
- .SkipJumpBird:
- LDA $0604
- CLC
- ADC #$28
- CMP $0644,x
- BCC .End
- .JumpHitLeft:
- LDA $0647,x
- CLC
- ADC #$0E
- CMP $0607
- BCC .JumpHitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0647,x
- BCC .JumpHitRight
- JSR AttackLanded
- JMP .End
- .JumpHitRight:
- LDA $0607
- CLC
- ADC #$0E
- CMP $0647,x
- BCC .End
- LDA $0647,x
- CLC
- ADC #$04
- CMP $0607
- BCS .Here
- JMP .End
- .Here:
- JSR AttackLanded
- .End2:
- JMP .End
- .DuckAttack:
- LDA $061D
- CMP #$34
- BNE .End2
- LDA $0641,x
- CMP #$D6
- BEQ .End2
- CMP #$D9
- BEQ .End2
- .DuckHitLeft:
- LDA $0647,x
- CLC
- ADC #$0E
- CMP $0607
- BCC .DuckHitRight
- LDA $0607
- CLC
- ADC #$04
- CMP $0647,x
- BCC .DuckHitRight
- JSR AttackLanded
- JMP .End
- .DuckHitRight:
- LDA $0607
- CLC
- ADC #$0E
- CMP $0647,x
- BCC .End2
- LDA $0647,x
- CLC
- ADC #$04
- CMP $0607
- BCC .End2
- JSR AttackLanded
- JMP .End
- AttackLanded:
- LDA BossPlacedFlag
- CMP #$01
- BEQ .EnemyAttack
- CPX #$00
- BNE .2
- LDA EnemyDead
- CMP #$01
- BEQ .End
- LDA #$01
- STA SoundEffect
- STA PlaySound
- STA EnemyDead
- LDA #$80
- STA EnemyTop
- JSR GivePoints
- RTS
- .2:
- CPX #$20
- BNE .3
- LDA EnemyDead+1
- CMP #$01
- BEQ .End
- LDA #$01
- STA SoundEffect
- STA PlaySound
- STA EnemyDead+1
- LDA #$80
- STA EnemyTop
- JSR GivePoints
- RTS
- .3:
- CPX #$40
- BNE .4
- LDA EnemyDead+2
- CMP #$01
- BEQ .End
- LDA #$01
- STA SoundEffect
- STA PlaySound
- STA EnemyDead+2
- LDA #$80
- STA EnemyTop
- JSR GivePoints
- RTS
- .4:
- CPX #$60
- BNE .End
- LDA EnemyDead+3
- CMP #$01
- BEQ .End
- LDA #$01
- STA SoundEffect
- STA PlaySound
- STA EnemyDead+3
- LDA #$80
- STA EnemyTop
- JSR GivePoints
- .End:
- RTS
- .EnemyAttack:
- LDA BossConnect
- CMP #$01
- BEQ .End
- INC EnemyLifeAmt
- LDA #$01
- STA BossConnect
- LDA #$01
- STA SoundEffect
- STA PlaySound
- STA EnemyHitFlag
- RTS
- GivePoints:
- LDA $0641,x
- CMP #$30
- BEQ .Grandma
- CMP #$32
- BEQ .Grandma
- CMP #$57
- BEQ .Kid
- CMP #$59
- BEQ .Kid
- CMP #$C5
- BEQ .Nerd
- CMP #$C7
- BEQ .Nerd
- RTS
- .Grandma:
- LDA Game2p
- CMP #$01
- BNE .P1Gma
- LDA CurrentPlayer
- CMP #$01
- BEQ .P1Gma
- LDA P2Score+3
- CLC
- ADC #$02
- STA P2Score+3
- JSR FixMath2
- JMP .ConnectGma
- .P1Gma:
- LDA P1Score+3
- CLC
- ADC #$02
- STA P1Score+3
- JSR FixMath
- .ConnectGma:
- LDA #$01
- STA AwardPointsFlag
- RTS
- .Kid:
- LDA Game2p
- CMP #$01
- BNE .P1Kid
- LDA CurrentPlayer
- CMP #$01
- BEQ .P1Kid
- LDA P2Score+3
- CLC
- ADC #$04
- STA P2Score+3
- JSR FixMath2
- JMP .ConnectKid
- .P1Kid:
- LDA P1Score+3
- CLC
- ADC #$04
- STA P1Score+3
- JSR FixMath
- .ConnectKid:
- LDA #$01
- STA AwardPointsFlag
- RTS
- .Nerd:
- LDA Game2p
- CMP #$01
- BNE .P1Nerd
- LDA CurrentPlayer
- CMP #$01
- BEQ .P1Nerd
- LDA P2Score+3
- CLC
- ADC #$05
- STA P2Score+3
- JSR FixMath2
- JMP .ConnectNerd
- .P1Nerd:
- LDA P1Score+3
- CLC
- ADC #$05
- STA P1Score+3
- JSR FixMath
- .ConnectNerd:
- LDA #$01
- STA AwardPointsFlag
- RTS
- FixMath:
- LDA P1Score+4
- CMP #$0A
- BCC .Hund
- INC P1Score+3
- LDA P1Score+4
- SEC
- SBC #$0A
- STA P1Score+4
- .Hund:
- LDA P1Score+3
- CMP #$0A
- BCC .Thous
- INC P1Score+2
- LDA P1Score+3
- SEC
- SBC #$0A
- STA P1Score+3
- .Thous:
- LDA P1Score+2
- CMP #$0A
- BCC .TenThous
- INC P1Score+1
- LDA P1Score+2
- SEC
- SBC #$0A
- STA P1Score+2
- .TenThous:
- LDA P1Score+1
- CMP #$0A
- BCC .HunThous
- INC P1Score
- LDA P1Score+1
- SEC
- SBC #$0A
- STA P1Score+1
- .HunThous:
- RTS
- FixMath2:
- LDA P2Score+4
- CMP #$0A
- BCC .Hund
- INC P2Score+3
- LDA P2Score+4
- SEC
- SBC #$0A
- STA P2Score+4
- .Hund:
- LDA P2Score+3
- CMP #$0A
- BCC .Thous
- INC P2Score+2
- LDA P2Score+3
- SEC
- SBC #$0A
- STA P2Score+3
- .Thous:
- LDA P2Score+2
- CMP #$0A
- BCC .TenThous
- INC P2Score+1
- LDA P2Score+2
- SEC
- SBC #$0A
- STA P2Score+2
- .TenThous:
- LDA P2Score+1
- CMP #$0A
- BCC .HunThous
- INC P2Score
- LDA P2Score+1
- SEC
- SBC #$0A
- STA P2Score+1
- .HunThous:
- RTS
- RunBuffer:
- LDA FanErased
- CMP #$01
- BNE .NotFan
- LDA $0560
- STA $2006
- LDA $0561
- STA $2006
- LDA $0562
- STA $2007
- LDA $0562
- STA $2007
- LDA $0562
- STA $2007
- LDA $0562
- STA $2007
- LDA $0562
- STA $2007
- LDA #$02
- STA FanErased
- .NotFan:
- LDA AwardPointsFlag
- CMP #$01
- BEQ .P1Points
- LDA AwardHiScoreFlag
- CMP #$01
- BNE .P1Points
- ;;Hi Score
- LDX #$00
- LDY #$00
- LDA #$20
- STA $2006
- LDA #$4F
- STA $2006
- .HiLoop:
- LDA $0550,x
- CLC
- ADC #$D0
- STA $2007
- INX
- INY
- CPY #$06
- BNE .HiLoop
- LDA #$00
- STA AwardHiScoreFlag
- .P1Points:
- LDA AwardPointsFlag
- CMP #$01
- BNE .Timer
- LDA Game2p
- CMP #$01
- BNE .Not2p
- LDA CurrentPlayer
- CMP #$01
- BNE .Second
- LDA #$44
- STA TempNumber
- JMP .Not2p
- .Second:
- LDA #$58
- STA TempNumber
- .Not2p:
- ;;Points
- LDX #$00
- LDY #$00
- LDA #$20
- STA $2006
- INX
- LDA TempNumber
- STA $2006
- INX
- .Loop:
- LDA $0500,x
- CLC
- ADC #$D0
- STA $2007
- INX
- INY
- CPY #$06
- BNE .Loop
- LDA #$00
- STA AwardPointsFlag
- .Timer:
- LDA AddTimerFlag
- CMP #$01
- BNE .FloorFlash
- LDX #$00
- LDY #$00
- LDA #$20
- STA $2006
- INX
- LDA #$BA
- STA $2006
- INX
- .Loop2:
- LDA $0510,x
- CLC
- ADC #$D0
- STA $2007
- INX
- INY
- CPY #$04
- BNE .Loop2
- LDA #$00
- STA AddTimerFlag
- .FloorFlash:
- LDA FloorFlashFlag
- CMP #$01
- BNE .EnemyLife
- LDA $0520
- STA $2006
- LDA $0521
- STA $2006
- LDA $0522
- STA $2007
- LDA #$00
- STA FloorFlashFlag
- .EnemyLife:
- LDA EnemyHitFlag
- CMP #$01
- BNE .End
- LDA $0530
- STA $2006
- LDA $0531
- STA $2006
- LDX #$00
- .EnemyLoop:
- LDA $0532,x
- STA $2007
- INX
- CPX #$07
- BNE .EnemyLoop
- LDA #$00
- STA EnemyHitFlag
- .End:
- RTS
- UpdatePoints:
- LDA AwardPointsFlag
- CMP #$01
- BNE .Erase
- LDX #$00
- LDY #$00
- ;;NEW STUFF
- LDA Game2p
- CMP #$01
- BNE .Skip2
- LDA CurrentPlayer
- CMP #$01
- BEQ .Skip2
- LDA #$20
- STA $0500,y
- INY
- LDA #$58
- STA $0500,y
- INY
- JMP .Loop
- .Skip2:
- LDA #$20
- STA $0500,y
- INY
- LDA #$44
- STA $0500,y
- INY
- .Loop:
- LDA Game2p
- CMP #$01
- BNE .Skip
- LDA CurrentPlayer
- CMP #$01
- BEQ .Skip
- LDA P2Score,x
- JMP .Connect
- .Skip:
- LDA P1Score,x
- .Connect:
- ;;NEW STUFF
- STA $0500,y
- INY
- INX
- CPX #$06
- BNE .Loop
- .End:
- RTS
- .Erase:
- LDX #$00
- .EraseLoop:
- LDA #$00
- STA $0500,x
- INX
- CPX #$09
- BNE .EraseLoop
- RTS
- EnemyTileList:
- .db $30,$32,$57,$59,$67,$69,$C5,$C7
- .db $C2,$D6,$D9
- CheckForFanHit:
- LDA FlashBossHit
- CMP #$01
- BNE .End
- INC FlashBossHitTmr
- LDA FlashBossHitTmr
- CMP #$08
- BEQ .1
- CMP #$10
- BEQ .2
- CMP #$18
- BEQ .1
- CMP #$20
- BEQ .2
- CMP #$28
- BEQ .1
- CMP #$30
- BEQ .2
- CMP #$38
- BEQ .1
- CMP #$40
- BEQ .2
- CMP #$48
- BEQ .Reset
- RTS
- .1:
- LDA #$3F
- STA $2006
- LDA #$1F
- STA $2006
- LDA #$10
- STA $2007
- RTS
- .2:
- LDA #$3F
- STA $2006
- LDA #$1F
- STA $2006
- LDA #$03
- STA $2007
- RTS
- .Reset:
- LDA #$00
- STA FlashBossHit
- STA FlashBossHitTmr
- .End:
- RTS
- UpdateBossPalette:
- LDA CurrentFloor
- CMP #$03
- BCS .3
- LDA BossPlacedFlag
- CMP #$01
- BNE .End
- LDA BossPalUpdate
- CMP #$01
- BEQ .End
- LDA #$3F
- STA $2006
- LDA #$19
- STA $2006
- LDA #$0F
- STA $2007
- LDA #$37
- STA $2007
- LDA #$17
- STA $2007
- LDA #$01
- STA BossPalUpdate
- .End:
- RTS
- .3:
- LDA BossPlacedFlag
- CMP #$01
- BNE .End
- JSR CheckForFanHit
- LDA BossPalUpdate
- CMP #$01
- BEQ .End
- LDA #$3F
- STA $2006
- LDA #$1D
- STA $2006
- LDA #$0F
- STA $2007
- LDA #$13
- STA $2007
- LDA #$03
- STA $2007
- LDA #$01
- STA BossPalUpdate
- RTS
- FlashInvincibility:
- LDA gamestate
- CMP #STATEHIT
- BEQ .End
- LDA ChumHit
- CMP #$00
- BEQ .End
- INC InvincTimer
- LDA InvincTimer
- CMP #$04
- BEQ .1
- CMP #$08
- BEQ .2
- CMP #$0C
- BEQ .1
- CMP #$10
- BEQ .2
- CMP #$14
- BEQ .1
- CMP #$18
- BEQ .2
- CMP #$1C
- BEQ .1
- CMP #$20
- BEQ .2
- CMP #$24
- BEQ .1
- CMP #$28
- BEQ .2
- CMP #$2C
- BEQ .1
- CMP #$30
- BEQ .2
- CMP #$31
- BNE .End
- LDA #$00
- STA ChumHit
- STA InvincTimer
- .End:
- RTS
- .1:
- LDA #$3F
- STA $2006
- LDA #$13
- STA $2006
- LDA #$30
- STA $2007
- RTS
- .2:
- LDA #$3F
- STA $2006
- LDA #$13
- STA $2006
- LDA #$17
- STA $2007
- RTS
- DrawPlayerReadyText:
- LDA IntroPhase
- CMP #$02
- BNE .End
- LDA IntroTimer
- CMP #$00
- BNE .TryErase
- LDY #$00
- LDA $2002
- .OuterLoop:
- TYA
- CLC
- ADC #$22
- STA $2006
- LDA #$0C
- STA $2006
- LDX #$00
- .Loop:
- LDA PlayerReadyText,x
- STA $2007
- INX
- CPX #$07
- BNE .Loop
- TYA
- CLC
- ADC #$04
- TAY
- CPY #$08
- BNE .OuterLoop
- .End:
- RTS
- .TryErase:
- LDA IntroTimer
- CMP #$3F
- BNE .End
- LDY #$00
- .OuterLoop2
- TYA
- CLC
- ADC #$21
- STA $2006
- LDA #$E7
- STA $2006
- LDX #$00
- .EraseLoop:
- LDA FloorEraseText,x
- STA $2007
- INX
- CPX #$12
- BNE .EraseLoop
- TYA
- CLC
- ADC #$22
- STA $2006
- LDA #$0C
- STA $2006
- LDX #$00
- .EraseLoop2:
- LDA ReadyEraseText,x
- STA $2007
- INX
- CPX #$07
- BNE .EraseLoop2
- TYA
- CLC
- ADC #$04
- TAY
- CPY #$08
- BNE .OuterLoop2
- RTS
- PlayerFloorText:
- .db $00,$D1,$FC,$EF,$EB,$E0,$F8,$E4,$F1,$00,$D1,$FC,$E5,$EB,$EE,$EE,$F1,$00
- PlayerReadyText:
- .db $00,$F1,$E4,$E0,$E3,$F8,$00
- FloorEraseText:
- .db $5E,$60,$33,$01,$01,$17,$17,$17,$17,$17,$17,$17,$17,$01,$01,$32,$74,$66
- ReadyEraseText:
- .db $18,$19,$1A,$1B,$1C,$1D,$1E
- MoveChumIntoPlace:
- LDA IntroPhase
- CMP #$00
- BEQ .Inc1
- CMP #$01
- BEQ .Move
- CMP #$02
- BEQ .Inc2
- RTS
- .Inc1:
- INC IntroTimer
- LDA IntroTimer
- CMP #$C0
- BNE .End
- LDA #$00
- STA IntroTimer
- LDA #$01
- STA IntroPhase
- RTS
- .Inc2:
- LDA #$02
- JSR Bankswitch
- JSR StandStill
- INC IntroTimer
- LDA IntroTimer
- CMP #$40
- BNE .End
- LDA #$00
- STA LevelStarting
- STA IntroPhase
- STA IntroTimer
- LDA #$01
- STA SongNum
- LDA #$00
- JSR Bankswitch
- LDA SongNum
- JSR FamiToneMusicPlay
- RTS
- .Move:
- JSR MoveChumInitDir
- LDA #$02
- JSR Bankswitch
- JSR AnimateChum
- .End:
- RTS
- MoveChumInitDir:
- LDA CurrentFloor
- CMP #$00
- BEQ .Right
- CMP #$02
- BEQ .Right
- ;Left
- LDA $060F
- CMP #$78
- BEQ .IncPhase
- LDX #$00
- LDY #$00
- .LoopL:
- LDA $0607,x
- CLC
- ADC #$01
- STA $0607,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .LoopL
- RTS
- .IncPhase:
- LDA #$02
- STA IntroPhase
- RTS
- .Right:
- LDA $0607
- CMP #$78
- BEQ .IncPhase
- LDX #$00
- LDY #$00
- .Loop:
- LDA $0607,x
- SEC
- SBC #$01
- STA $0607,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop
- RTS
- KillBird:
- ; TXA
- ; STA XTemp
- ; AND #%00011111
- ; TAX
- ; LDA $0643,x
- ; CMP #$FC
- ; BCC .End
- LDA #$FE
- STA $0640,x
- STA $0643,x
- STA $0644,x
- STA $0647,x
- STA $0648,x
- STA $064B,x
- STA $064C,x
- STA $064F,x
- STA $0650,x
- STA $0653,x
- ; LDX XTemp
- .End:
- RTS
- CopySprites: ;;display robot sprite (this seems to work fine)
- LDX #$00
- LDY #$00
- .Sprite0Loop:
- LDA $0600,x
- STA $0300,x
- LDA $0601,x
- STA $0301,x
- LDA $0602,x
- STA $0302,x
- LDA $0603,x
- STA $0303,x
- .PlayerLoop:
- LDA gamestate
- CMP #STATELOADENDING
- BCS RenderForward
- LDA ShuffledVar
- CMP #$01
- BEQ RenderForward
- JMP RenderReverse
- RenderForward:
- LDX #$04 ;;display blocks (there are 6)
- LDY #$04
- .Loop:
- LDA $0600,x
- STA $0300,y
- INY
- LDA $0601,x
- STA $0300,y
- INY
- LDA $0602,x
- STA $0300,y
- INY
- LDA $0603,x
- STA $0300,y
- INY
- LDA $0604,x
- STA $0300,y
- INY
- LDA $0605,x
- STA $0300,y
- INY
- LDA $0606,x
- STA $0300,y
- INY
- LDA $0607,x
- STA $0300,y
- INY
- LDA $0608,x
- STA $0300,y
- INY
- LDA $0609,x
- STA $0300,y
- INY
- LDA $060A,x
- STA $0300,y
- INY
- LDA $060B,x
- STA $0300,y
- INY
- LDA $060C,x
- STA $0300,y
- INY
- LDA $060D,x
- STA $0300,y
- INY
- LDA $060E,x
- STA $0300,y
- INY
- LDA $060F,x
- STA $0300,y
- INY ;increment 4x per block.
- TXA
- CLC
- ADC #$10
- TAX
- CPX #$F4 ;4x6 = 24
- BNE .Loop
- LDX #$00
- .Loop2:
- LDA $06F0,x
- STA $03F0,x
- INX
- CPX #$10
- BNE .Loop2
- LDA #$00
- STA ShuffledVar
- RTS
- RenderReverse:
- LDX #$04 ;;display blocks (there are 6)
- LDY #$E4
- JMP .Skip
- .Loop:
- TYA
- SEC
- SBC #$20
- TAY
- .Skip:
- LDA $0600,x
- STA $0300,y
- INY
- LDA $0601,x
- STA $0300,y
- INY
- LDA $0602,x
- STA $0300,y
- INY
- LDA $0603,x
- STA $0300,y
- INY
- LDA $0604,x
- STA $0300,y
- INY
- LDA $0605,x
- STA $0300,y
- INY
- LDA $0606,x
- STA $0300,y
- INY
- LDA $0607,x
- STA $0300,y
- INY
- LDA $0608,x
- STA $0300,y
- INY
- LDA $0609,x
- STA $0300,y
- INY
- LDA $060A,x
- STA $0300,y
- INY
- LDA $060B,x
- STA $0300,y
- INY
- LDA $060C,x
- STA $0300,y
- INY
- LDA $060D,x
- STA $0300,y
- INY
- LDA $060E,x
- STA $0300,y
- INY
- LDA $060F,x
- STA $0300,y
- INY ;increment 4x per block.
- TXA
- CLC
- ADC #$10
- TAX
- CPX #$F4 ;4x6 = 24
- BNE .Loop
- LDA #$01
- STA ShuffledVar
- RTS
- KillSprites:
- LDX #$00
- .Loop:
- LDA #$FE
- STA $0600,x
- STA $0603,x
- TXA
- CLC
- ADC #$04
- TAX
- CPX #$FC
- BNE .Loop
- RTS
- vblankwait: ; First wait for vblank to make sure PPU is ready
- BIT $2002
- BPL vblankwait
- RTS
- ResetController:
- LDA LevelStarting
- CMP #$01
- BEQ .End
- JSR ResetAttack
- JSR ResetJump
- LDA ButtonsP1
- AND #%01000000
- CMP #$00
- BNE .SkipA
- LDA #$00
- STA BHeld
- .SkipA:
- LDA ButtonsP1
- CMP #%00000000
- BNE .End
- LDA #$00
- STA SelectHeld
- STA StartHeld
- STA UpHeld
- STA DownHeld
- STA LeftHeld
- STA RightHeld
- LDA ChumAttacking
- CMP #$01
- BEQ .End
- LDA BossDead
- CMP #$02
- BEQ .End
- LDA PausedFlag
- CMP #$01
- BEQ .End
- LDA #$02
- JSR Bankswitch
- JSR StandStill
- .End:
- RTS
- LoadPalettes:
- LDA PaletteDone
- CMP #$01
- BEQ .End
- LDA $2002 ; read PPU status to reset the high/low latch
- LDA #$3F
- STA $2006 ; write the high byte of $3F00 address
- LDA #$00
- STA $2006 ; write the low byte of $3F00 address
- LDA PAL_ptr
- ASL A
- TAY
- LDA palette_pointer_table, y
- STA AddrLow
- LDA palette_pointer_table+1, y
- STA AddrHigh
- LDY #$00 ; start out at 0
- .Loop:
- LDA [AddrLow], y ; load data from address (palette + the value in x)
- ; 1st time through loop it will load palette+0
- ; 2nd time through loop it will load palette+1
- ; 3rd time through loop it will load palette+2
- ; etc
- STA $2007 ; write to PPU
- INY ; X = X + 1
- CPY #$20 ; Compare X to hex $10, decimal 16 - copying 16 bytes = 4 sprites
- BNE .Loop ; Branch to LoadPalettesLoop if compare was Not Equal to zero
- ; if compare was equal to 32, keep going down
- LDA #$01
- STA PaletteDone
- .End:
- RTS
- ResetDuck:
- LDA DuckFlag
- CMP #$01
- BEQ .Reset
- RTS
- .Reset:
- LDA DuckFacing
- CMP DirFacing
- BEQ .Regular
- LDA DirFacing
- CMP #$00
- BEQ .Left
- LDX #$00
- JMP .Loop
- .Regular:
- LDA DirFacing
- CMP #$01
- BEQ .Left
- LDX #$00
- .Loop:
- LDA $0607,x
- CLC
- ADC #$08
- STA $0607,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop
- LDA #$00
- STA DuckFlag
- .End:
- RTS
- .Left:
- LDX #$00
- .Loop3:
- LDA $0607,x
- SEC
- SBC #$08
- STA $0607,x
- INX
- INX
- INX
- INX
- CPX #$3C
- BNE .Loop3
- LDA #$00
- STA DuckFlag
- RTS
- PlaceFan:
- LDA #$4F
- STA $06C0
- STA $06C4
- STA $06C8
- STA $06CC
- STA $06E0
- LDA #$A0
- STA $06C3
- CLC
- ADC #$08
- STA $06C7
- CLC
- ADC #$08
- STA $06CB
- CLC
- ADC #$08
- STA $06CF
- CLC
- ADC #$08
- STA $06E3
- LDX #$00
- LDY #$00
- .Loop:
- LDA FanSprites,x
- STA $06C1,y
- LDA #$00
- STA $06C2,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$04
- BNE .Loop
- LDA FanSprites,x
- STA $06E1
- LDA #$00
- STA $06E2
- LDA #$05
- STA SoundEffect
- LDA #$01
- STA PlaySound
- RTS
- FanSprites:
- .db $D0,$D1,$D2,$D3,$D4
- ResetAttack:
- LDA gamestate
- CMP #$08
- BCS .End
- LDA ChumAttacking
- CMP #$01
- BNE .End
- LDA AttackTimer
- CMP #$00
- BNE .End
- LDA #$00
- ; STA AHeld
- STA BossConnect
- STA ChumAttacking
- ; LDA #$02
- ; JSR Bankswitch
- ; JSR StandStill
- .End:
- RTS
- ResetJump:
- LDA gamestate
- CMP #$08
- BCS .End
- LDA JumpFlag
- CMP #$00
- BNE .End
- LDA ButtonsP1
- AND #%10000000
- BNE .Temp
- LDA #$00
- STA AHeld
- .End:
- RTS
- .Temp:
- LDA ButtonsP1
- AND #%01111111
- STA ButtonsP1
- RTS
- PlaySoundEffect:
- LDA PlaySound
- CMP #$01
- BNE .End
- LDA SoundEffect
- LDX #FT_SFX_CH0
- JSR FamiToneSfxPlay
- LDA #$00
- STA PlaySound
- .End:
- RTS
- ChumAttack:
- LDA JumpFlag
- CMP #$03
- BEQ .End
- LDA ButtonsP1
- AND #%01000000
- BEQ .End
- LDA AttackPrevent
- CMP #$01
- BEQ .End
- LDA BossDead
- CMP #$00
- BNE .End
- LDA BHeld
- CMP #$01
- BEQ .End
- LDA ChumAttacking
- CMP #$01
- BEQ .End
- INC AttackDelay
- LDA #$01
- STA AttackPrevent
- STA BHeld
- STA ChumAttacking
- LDA #$00
- JSR Bankswitch
- LDA #$19
- JSR FamiToneSamplePlay
- .End:
- RTS
- SpawnBossFan1:
- LDA #$4F
- STA $06C0
- STA $06C4
- STA $06C8
- STA $06CC
- STA $06E0
- LDA #$10
- STA $06C3
- CLC
- ADC #$08
- STA $06C7
- CLC
- ADC #$08
- STA $06CB
- CLC
- ADC #$08
- STA $06CF
- CLC
- ADC #$08
- STA $06E3
- LDX #$00
- LDY #$00
- .Loop:
- LDA FanSprites,x
- STA $06C1,y
- LDA #$00
- STA $06C2,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$04
- BNE .Loop
- LDA FanSprites,x
- STA $06E1
- LDA #$00
- STA $06E2
- LDA #$02
- STA BossPhase
- RTS
- SpawnBossFan2:
- LDA BossFan
- CMP #$03
- BEQ .Left
- CMP #$01
- LDA #$4F
- STA $06C0
- STA $06C4
- STA $06C8
- STA $06CC
- STA $06E0
- LDA #$68
- STA $06C3
- CLC
- ADC #$08
- STA $06C7
- CLC
- ADC #$08
- STA $06CB
- CLC
- ADC #$08
- STA $06CF
- CLC
- ADC #$08
- STA $06E3
- LDX #$00
- LDY #$00
- .Loop:
- LDA FanSprites,x
- STA $06C1,y
- LDA #$00
- STA $06C2,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$04
- BNE .Loop
- LDA FanSprites,x
- STA $06E1
- LDA #$00
- STA $06E2
- LDA #$02
- STA BossPhase
- RTS
- .Left:
- LDA #$4F
- STA $067C
- STA $0680
- STA $0684
- STA $0688
- STA $068C
- LDA #$68
- STA $067F
- CLC
- ADC #$08
- STA $0683
- CLC
- ADC #$08
- STA $0687
- CLC
- ADC #$08
- STA $068B
- CLC
- ADC #$08
- STA $068F
- LDX #$00
- LDY #$00
- .Loop2:
- LDA FanSprites,x
- STA $067D,y
- LDA #$00
- STA $067E,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$05
- BNE .Loop2
- LDA #$02
- STA BossPhase
- RTS
- SpawnBossFan3:
- LDA #$4F
- STA $067C
- STA $0680
- STA $0684
- STA $0688
- STA $068C
- LDA #$C0
- STA $067F
- CLC
- ADC #$08
- STA $0683
- CLC
- ADC #$08
- STA $0687
- CLC
- ADC #$08
- STA $068B
- CLC
- ADC #$08
- STA $068F
- LDX #$00
- LDY #$00
- .Loop:
- LDA FanSprites,x
- STA $067D,y
- LDA #$00
- STA $067E,y
- INX
- TYA
- CLC
- ADC #$04
- TAY
- CPX #$05
- BNE .Loop
- LDA #$02
- STA BossPhase
- RTS
- DropBossFans:
- LDA $067C
- CMP #$F0
- BCC .Drop
- LDX #$00
- LDY #$00
- .Loop2:
- LDA #$FE
- STA $067C,x
- STA $067F,x
- INX
- INX
- INX
- INX
- INY
- CPY #$05
- BNE .Loop2
- LDX #$00
- LDY #$00
- .Loop4:
- LDA #$FE
- STA $06C0,x
- STA $06C3,x
- INX
- INX
- INX
- INX
- INY
- CPY #$04
- BNE .Loop4
- LDA #$FE
- STA $06E0
- STA $06E3
- LDA #$00
- STA FanVelocity
- STA FanVelocity2
- STA DropDelay
- STA BossPhase
- STA BossFan
- STA BossHit
- STA BossFanTimer
- RTS
- .Drop:
- LDA DropDelay
- CMP #$80
- BCC .Inc
- LDX #$00
- LDY #$00
- .Loop:
- LDA FanVelocityPart
- CLC
- ADC #$E0
- STA FanVelocityPart
- LDA $067C,x
- ADC FanVelocity
- STA $067C,x
- INY
- INX
- INX
- INX
- INX
- CPY #$05
- BNE .Loop
- LDX #$00
- LDY #$00
- .Loop3:
- LDA FanVelocityPart
- CLC
- ADC #$E0
- STA FanVelocityPart
- LDA $06C0,x
- ADC FanVelocity
- STA $06C0,x
- INY
- INX
- INX
- INX
- INX
- CPY #$04
- BNE .Loop3
- LDA FanVelocity2Part
- CLC
- ADC #$E0
- STA FanVelocity2Part
- LDA $06E0
- ADC FanVelocity2
- STA $06E0
- LDA $06C0
- AND #%00001111
- BNE .Skip
- INC FanVelocity
- INC FanVelocity2
- RTS
- .Inc:
- INC DropDelay
- LDA DropDelay
- CMP #$7F
- BNE .Skip
- LDA #$05
- STA SoundEffect
- LDA #$01
- STA PlaySound
- .Skip:
- RTS
- DarkWalk1:
- .db $01,$02,$00
- .db $06,$07,$08
- .db $10,$11,$12
- .db $1C,$1D,$1E
- .db $27,$28,$29
- DarkWalk2:
- .db $03,$04,$00
- .db $09,$0A,$0B
- .db $13,$14,$15
- .db $1F,$20,$00
- .db $00,$2A,$00
- DarkWalk3:
- .db $01,$02,$00
- .db $06,$0C,$08
- .db $16,$17,$18
- .db $21,$22,$23
- .db $2B,$2C,$2D
- DarkKick:
- .db $05,$02,$00
- .db $0D,$0E,$0F
- .db $19,$1A,$1B
- .db $24,$25,$26
- .db $00,$2E,$2F
- DarkJumpSprites:
- .db $00,$00,$00
- .db $03,$04,$00
- .db $38,$0A,$00
- .db $42,$43,$00
- .db $4B,$4C,$00
- DarkDuckSprites:
- .db $00,$00,$00
- .db $00,$03,$04
- .db $00,$37,$0A
- .db $00,$40,$41
- .db $00,$48,$4A
- DarkDuckAttackSprites:
- .db $00,$00,$00
- .db $00,$05,$02
- .db $34,$35,$36
- .db $3D,$3E,$3F
- .db $00,$48,$49
- DarkJumpAttackSprites:
- .db $00,$00,$00
- .db $00,$05,$02
- .db $34,$54,$36
- .db $5B,$5C,$3F
- .db $61,$62,$49
- ;;;;;;;;;;;;;;;;
- .org $FFFA ;first of the three vectors starts here
- .dw NMI ;when an NMI happens (once per frame if enabled) the
- ;processor will jump to the label NMI
- .dw RESET ;when the processor first turns on or is reset, it will jump
- ;to the label RESET:
- .dw 0 ;external interrupt IRQ is not used in this tutorial
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement