Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- !BossPhase = $C2
- !Hitpoints = $1528
- !Status = $14C8
- !PhaseTimer = $1540
- !ThrowBlockCntr = $1534
- !ThrowBlkAt = $03 ;after how many boss phases a throw block should fall
- !MaxHP = $05 ;How many HP this boss has (6 or 5 i didn't bother counting()
- !SpriteFire = $BB ;Fireball custom sprite number.
- print "INIT ",pc
- LDA #!MaxHP
- STA !Hitpoints,x
- STZ !BossPhase,x
- STZ $1594,x
- RTL
- print "MAIN ",pc
- PHB
- PHK
- PLB
- JSR MainRoutine
- PLB
- RTL
- Phases: dw SimplyWait ;$00 - Simply wait till Mario actually approaches the boss (like boom-boom)
- dw SpinOnFloor ;$01 - Spin on floor like the flashing shell
- dw BreatheFireThrice ;$02 - Simply breathe few fireballs (ignore label name)
- dw BreatheTripleFire ;$03 - Breathe 3 fireballs at once, creating a 16x(16*3) wall of fire
- dw Dummy
- dw Dummy
- dw Dummy
- dw Dummy
- dw GotHit ;$08 - Attack when he gets hit
- GFXPhases: dw GFXWait
- dw GFXSpin
- dw GFXBreatheFire
- dw GFXTripleFire
- dw GFXSpin
- dw GFXJump
- dw GFXJump
- dw GFXDie
- dw GFXSpin
- MainRoutine:
- Attacks: JSR Graphics
- LDA $9D
- BNE .return
- JSR SPRITE_INTERACT
- LDA $14C8,x
- CMP #$02
- BNE .normal
- LDA $1594,x
- RTS ; return
- .normal LDA !BossPhase,x
- .Gotophase ASL A
- TAX
- JSR (Phases,x)
- .return RTS
- XMax: db $30,$30^$FF-$01
- XAccel: db $02,$01^$FF
- SimplyWait: ;Wait till mario approaches the boss
- !MaxLeft = $0060
- !MaxRight = $0060
- LDX $15E9
- LDA $14E0,x
- XBA
- LDA $E4,x
- REP #$20
- SBC $94
- ADC.w #!MaxLeft
- CMP.w #!MaxLeft+!MaxRight
- SEP #$20
- BCS NotCloseEnough
- STZ $7B
- LDA $77
- AND #$04
- BEQ NotCloseEnough
- LDA #$FF ;hurf durf spin around
- STA !PhaseTimer,x
- INC !BossPhase,x
- ;LDA #$05
- ;STA $1DFB
- NotCloseEnough: RTS
- SpinOnFloor: LDX $15E9
- .clipping
- JSL $03B664
- JSR GetSpriteClipping
- JSL $03B72B
- BCC ++
- LDA $7D
- BMI +
- LDA $140D
- ORA $187A
- BEQ +
- LDA #$02
- STA $1DF9
- JSL $01AA33
- JSL $01AB99
- BRA ++
- + JSL $00F5B7
- RTS
- ++ LDA !PhaseTimer,x
- CMP #$F0
- BCS .return ;dont move for a bit
- LDA !PhaseTimer,x
- BEQ .Gotoright
- JSR SUB_HORZ_POS
- LDA $B6,x
- CMP XMax,y
- BEQ .gravity
- CLC
- ADC XAccel,y
- STA $B6,x
- .gravity JSL $01802A
- LDA $1588,x
- BIT #$02
- BNE .leftblock
- BIT #$01
- BNE .rightblock
- RTS
- .rightblock LDA.b #$12^$FF
- STA $B6,x
- JSR GenerateDirt
- LDA #$20
- STA $1887
- LDA #$25
- STA $1DFC
- .return RTS
- .leftblock LDA #$12
- STA $B6,x
- JSR GenerateDirt
- LDA #$20
- STA $1887
- LDA #$25
- STA $1DFC
- RTS
- .Gotoright
- LDA $14E0,x
- XBA
- LDA $E4,x
- REP #$20
- SEC
- SBC $1A
- CLC
- ADC #$0032
- CMP #$0100
- SEP #$20
- BCS .stop
- LDA #$25
- STA $B6,x
- BRL .gravity
- .stop STZ $B6,x
- .NextPhase JSR GoToRandomPhase
- BRL .gravity
- BreatheFireThrice:
- LDX $15E9
- .clipping
- JSL $03B664
- JSR GetSpriteClipping
- JSL $03B72B
- BCC ++
- LDA $7D
- BMI +
- LDA $140D
- ORA $187A
- BEQ +
- LDA #$02
- STA $1DF9
- JSL $01AA33
- JSL $01AB99
- BRA ++
- + JSL $00F5B7
- RTS
- ++ LDA !PhaseTimer,x
- CMP #$E0
- BEQ .GenFire
- CMP #$B0
- BEQ .GenFire
- CMP #$50
- BEQ .GenFire
- CMP #$40
- BEQ .GenFire
- LDX $15E9
- LDA !PhaseTimer,x
- BNE +
- JSR .GenFire
- JSR GoToRandomPhase
- + RTS
- .GenFire TXY
- LDX #$0B
- .GLoop LDA $14C8,X
- BEQ .Cont
- DEX
- BPL .GLoop
- RTS
- .Cont LDA #$08 ;set to main
- STA $14C8,x ;status
- LDA #!SpriteFire ;sprite to generate
- STA $7FAB9E,x ;custom sprite
- PHY
- JSL $07F7D2 ;clear
- JSL $0187A7
- PLY
- LDA #$88
- STA $7FAB10,x
- LDA $00E4,y
- STA $E4,x
- LDA $14E0,y
- STA $14E0,x
- LDA $00D8,y
- CLC
- ADC #$10
- STA $D8,x
- LDA $14D4,y
- ADC #$00
- STA $14D4,x
- LDA #$17
- STA $1DFC
- PHY
- JSR CALCFULLFRAME ;y is unchanged
- TAY
- LDA XSPEEDS,y
- STA $B6,x
- LDA YSPEEDS,y
- CLC
- ADC #$07
- STA $AA,x
- PLX
- RTS
- BreatheTripleFire:
- LDX $15E9
- JSL $03B664
- JSR GetSpriteClipping
- JSL $03B72B
- BCC ++
- LDA $7D
- BMI +
- LDA $140D
- ORA $187A
- BEQ +
- LDA #$02
- STA $1DF9
- JSL $01AA33
- JSL $01AB99
- BRA ++
- + JSL $00F5B7
- RTS
- ++ LDA !PhaseTimer,x
- BEQ .NextPhase
- CMP #$D0
- BCS .return
- CMP #$20
- BCC .return
- LDA $14
- AND #$1F
- BNE .return
- JSR .GenFire
- BRA .return
- .NextPhase JSR GoToRandomPhase
- .return RTS
- .GenFire TXY
- LDX #$0B
- .GLoop LDA $14C8,X
- BEQ .Cont
- DEX
- BPL .GLoop
- RTS
- .Cont LDA #$08 ;set to main
- STA $14C8,x ;status
- LDA #!SpriteFire ;sprite to generate
- STA $7FAB9E,x ;custom sprite
- PHY
- JSL $07F7D2 ;clear
- JSL $0187A7
- PLY
- LDA #$88
- STA $7FAB10,x
- LDA $00E4,y
- STA $E4,x
- LDA $14E0,y
- STA $14E0,x
- LDA $00D8,y
- CLC
- ADC #$10
- STA $D8,x
- LDA $14D4,y
- ADC #$00
- STA $14D4,x
- LDA #$17
- STA $1DFC
- PHY
- JSL $01ACF9
- LDA $148D
- AND #$03
- TAY
- LDA FireSpeedTableX,y
- STA $B6,x ;xspeed
- JSL $01ACF9
- LDA $148D
- AND #$03
- TAY
- LDA FireSpeedTableY,y
- STA $AA,x ;yspeed
- PLX
- RTS
- FireSpeedTableX: db $24^$FF,$28^$FF,$2B^$FF,$2F^$FF
- FireSpeedTableY: db $00^$FF,$01^$FF,$02^$FF,$04^$FF
- ShellFireAttack:
- FieryJump:
- MeteorJump:
- Dummy: LDX $15E9
- RTS
- GotHit: LDX $15E9
- JSL $03B664
- JSR GetSpriteClipping
- JSL $03B72B
- BCC ++
- LDA $7D
- BMI +
- LDA $140D
- ORA $187A
- BEQ +
- LDA #$02
- STA $1DF9
- JSL $01AA33
- JSL $01AB99
- BRA ++
- + JSL $00F5B7
- RTS
- ++ LDA $14E0,x
- XBA
- LDA $E4,x
- REP #$20
- SEC
- SBC $1A
- CLC
- ADC #$0040
- CMP #$0100
- SEP #$20
- BCS .stop
- LDA #$25
- STA $B6,x
- BRL SpinOnFloor_gravity
- .stop LDA !PhaseTimer,x
- CMP #$10
- BNE +
- JSR .genfire
- RTS
- + CMP #$0B
- BNE +
- JSR .genfire
- RTS
- + CMP #$08
- BNE +
- JSR .genfire
- RTS
- + CMP #$00
- BNE +
- JSR GoToRandomPhase
- + RTS
- .genfire TXY
- STA $00
- LDX #$0B
- .GLoop LDA $14C8,X
- BEQ .Cont
- DEX
- BPL .GLoop
- RTS
- .Cont LDA #$08 ;set to main
- STA $14C8,x ;status
- LDA #!SpriteFire ;sprite to generate
- STA $7FAB9E,x ;custom sprite
- PHY
- JSL $07F7D2 ;clear
- JSL $0187A7
- PLY
- LDA #$88
- STA $7FAB10,x
- LDA $00E4,y
- STA $E4,x
- LDA $14E0,y
- STA $14E0,x
- LDA $00D8,y
- CLC
- ADC #$10
- STA $D8,x
- LDA $14D4,y
- ADC #$00
- STA $14D4,x
- LDA #$17
- STA $1DFC
- PHY
- JSR CALCFULLFRAME ;y is unchanged
- TAY
- LDA XSPEEDS,y
- STA $B6,x
- LDA YSPEEDS,y
- CLC
- ADC #$07
- STA $AA,x
- PLX
- RTS
- Graphics: JSL GET_DRAW_INFO
- LDA !BossPhase,x
- ASL A
- TAX
- JSR (GFXPhases,x)
- RTS
- GFXBreatheFire: LDX $15E9
- LDA $00
- STA $0300,y
- LDA $01
- STA $0301,y
- LDA #$04
- STA $0302,y
- LDA $64
- ORA $15F6,x
- STA $0303,y
- LDA $00
- CLC
- ADC #$10
- STA $0300+4,y
- LDA $01
- STA $0301+4,y
- LDA #$06
- STA $0302+4,y
- LDA $64
- ORA $15F6,x
- STA $0303+4,y
- LDA $00
- STA $0300+8,y
- LDA $01
- CLC
- ADC #$10
- STA $0301+8,y
- LDA #$24
- STA $0302+8,y
- LDA $64
- ORA $15F6,x
- STA $0303+8,y
- LDA $00
- CLC
- ADC #$10
- STA $0300+12,y
- LDA $01
- CLC
- ADC #$10
- STA $0301+12,y
- LDA #$26
- STA $0302+12,y
- LDA $64
- ORA $15F6,x
- STA $0303+12,y
- LDY #$02 ;16x16
- LDA #$04 ;tile #s
- JSL $01B7B3
- RTS
- GFXWait: LDX $15E9
- LDA $00
- STA $0300,y
- LDA $01
- STA $0301,y
- LDA #$08
- STA $0302,y
- LDA $64
- ORA $15F6,x
- STA $0303,y
- LDA $00
- CLC
- ADC #$10
- STA $0300+4,y
- LDA $01
- STA $0301+4,y
- LDA #$0A
- STA $0302+4,y
- LDA $64
- ORA $15F6,x
- STA $0303+4,y
- LDA $00
- STA $0300+8,y
- LDA $01
- CLC
- ADC #$10
- STA $0301+8,y
- LDA #$28
- STA $0302+8,y
- LDA $64
- ORA $15F6,x
- STA $0303+8,y
- LDA $00
- CLC
- ADC #$10
- STA $0300+12,y
- LDA $01
- CLC
- ADC #$10
- STA $0301+12,y
- LDA #$2A
- STA $0302+12,y
- LDA $64
- ORA $15F6,x
- STA $0303+12,y
- LDY #$02 ;16x16
- LDA #$03 ;tile #s
- JSL $01B7B3
- RTS
- SpinTable: db $08,$0C,$40,$0C
- db $0A,$0E,$42,$0E
- db $28,$2C,$60,$2C
- db $2A,$2E,$62,$2E
- GFXTripleFire:
- GFXSpin: LDX $15E9
- PHX
- LDA $14
- AND #$0F
- LSR A
- LSR A
- TAX
- LDA SpinTable,x
- STA $0302+0,y
- LDA SpinTable+4,x
- STA $0302+4,y
- LDA SpinTable+8,x
- STA $0302+8,y
- LDA SpinTable+12,x
- STA $0302+12,y
- PLX
- LDA $00
- STA $0300,y
- LDA $01
- STA $0301,y
- LDA $64
- ORA $15F6,x
- STA $0303,y
- LDA $00
- CLC
- ADC #$10
- STA $0300+4,y
- LDA $01
- STA $0301+4,y
- LDA $64
- ORA $15F6,x
- STA $0303+4,y
- LDA $00
- STA $0300+8,y
- LDA $01
- CLC
- ADC #$10
- STA $0301+8,y
- LDA $64
- ORA $15F6,x
- STA $0303+8,y
- LDA $00
- CLC
- ADC #$10
- STA $0300+12,y
- LDA $01
- CLC
- ADC #$10
- STA $0301+12,y
- LDA $64
- ORA $15F6,x
- STA $0303+12,y
- LDY #$02 ;16x16
- LDA #$03 ;tile #s
- JSL $01B7B3
- RTS
- GFXJump:
- GFXDie:
- GFXHit:
- LDX $15E9
- RTS
- ; ==========================================================
- ; LIBRARY ROUTINES
- ; ==========================================================
- ;#####################GET DRAW INFO######################
- GET_DRAW_INFO: STZ $186C,x
- STZ $15A0,x
- LDA $E4,x
- CMP $1A
- LDA $14E0,x
- SBC $1B
- BEQ ON_SCREEN_X
- INC $15A0,x
- ON_SCREEN_X: LDA $14E0,x
- XBA
- LDA $E4,x
- REP #$20
- SEC
- SBC $1A
- CLC
- ADC #$0040
- CMP #$0180
- SEP #$20
- ROL A
- AND #$01
- STA $15C4,x
- BNE INVALID
- PHB
- PHK
- PLB
- LDY #$00
- LDA $1662,x
- AND #$20
- BEQ ON_SCREEN_LOOP
- INY
- ON_SCREEN_LOOP: LDA $D8,x
- CLC
- ADC SPR_T1,y
- PHP
- CMP $1C
- ROL $00
- PLP
- LDA $14D4,x
- ADC #$00
- LSR $00
- SBC $1D
- BEQ ON_SCREEN_Y
- LDA $186C,x
- ORA SPR_T2,y
- STA $186C,x
- ON_SCREEN_Y: DEY
- BPL ON_SCREEN_LOOP
- LDY $15EA,x
- LDA $E4,x
- SEC
- SBC $1A
- STA $00
- LDA $D8,x
- SEC
- SBC $1C
- STA $01
- PLB
- RTL
- INVALID: REP #$20
- PLA
- PLY
- PLA
- PHY
- PHA
- SEP #$20
- RTL
- SPR_T1: db $0C,$1C
- SPR_T2: db $01,$02
- ;--------------------------;
- ; Sprite Clipping Routine ;
- ; Mostly borrowed from SMW ;
- ;--------------------------;
- GetSpriteClipping:
- LDA $E4,x
- CLC
- ADC #$03
- STA $04
- LDA $14E0,x
- ADC #$00
- STA $0A
- LDA.b #$1F-$03 ; Width of sprite clipping
- STA $06
- LDA $D8,x
- CLC
- ADC #$06
- STA $05
- LDA $14D4,x
- ADC #$00
- STA $0B
- LDA #$19 ; Height of sprite clipping
- STA $07
- RTS
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; SUB_HORZ_POS
- ; This routine determines which side of the sprite Mario is on. It sets the Y register
- ; to the direction such that the sprite would face Mario
- ; It is ripped from $03B817
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- SUB_HORZ_POS: LDY #$00
- LDA $94
- SEC
- SBC $E4,x
- STA $0F
- LDA $95
- SBC $14E0,x
- BPL SPR_L16
- INY
- SPR_L16: RTS
- ;;;;;;;;;generates dirt
- GenerateDirt: LDY #$0B
- - LDA $17F0,y
- BEQ +
- DEY
- BPL -
- BRA ++
- + LDA #$01
- STA $17F0,y
- JSL $01ACF9
- AND #$8F
- STA $1808,y
- LDA $80
- STA $17FC,y
- LDA $81
- STA $1814,y
- JSL $01ACF9
- AND #$01
- STA $182C,y
- LDA #$00
- STA $1820,y
- ++ RTS
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- !FC_TEMP1 = $00 ; will use 2 bytes
- !FC_TEMP2 = $02 ; will use 2 bytes
- !FC_TEMP3 = $04 ; will use 2 bytes
- !FC_TEMP4 = $06 ; will use 2 bytes
- CALCFULLFRAME: JSR CALCFRAME
- JSR CALCQUADFLIP
- RTS
- CALCQUADFLIP: PHA
- JSR SUB_VERT_POS
- PLA
- CPY #$00
- BNE CHKHORZ
- EOR #$FF
- CLC
- ADC #$1F
- CHKHORZ: PHA
- JSR SUB_HORZ_POS
- PLA
- CPY #$00
- BEQ ENDQUADCHK
- EOR #$FF
- CLC
- ADC #$3E
- ENDQUADCHK: RTS
- CALCFRAME: LDA $D8,x
- SEC
- SBC $96
- STA !FC_TEMP2
- LDA $14D4,x
- SBC $97
- STA !FC_TEMP2+1
- BNE HORZDIST
- LDA !FC_TEMP2
- BNE HORZDIST
- BRA SETHORZ
- HORZDIST: LDA $E4,x
- SEC
- SBC $94
- STA !FC_TEMP1
- LDA $14E0,x
- SBC $95
- STA !FC_TEMP1+1
- BNE BEGINMATH
- LDA !FC_TEMP1
- BNE BEGINMATH
- BRA SETVERT
- BEGINMATH: PHP
- REP #$20
- LDA !FC_TEMP2
- BPL CHKXDIST
- EOR #$FFFF
- INC A
- STA !FC_TEMP2
- CHKXDIST: LDA !FC_TEMP1
- BPL MULT
- EOR #$FFFF
- INC A
- STA !FC_TEMP1
- MULT: ASL A
- ASL A
- ASL A
- ASL A
- STA !FC_TEMP3
- LDA !FC_TEMP1
- CLC
- ADC !FC_TEMP2
- STA !FC_TEMP4
- LDY #$00
- LDA !FC_TEMP4
- DEC A
- DIVLOOP: CMP !FC_TEMP3
- BCS END_DIVIDE
- INY
- CLC
- ADC !FC_TEMP4
- BRA DIVLOOP
- END_DIVIDE: TYA
- PLP
- RTS
- SETHORZ: LDA #$0F
- RTS
- SETVERT: LDA #$00
- RTS
- ;; PROJECTILE SPEEDS FOR EACH ANGLE
- ;; you can make your own speeds with, using http://smwedit.awardspace.com/_TEMP2.php as an aid,
- ;; but that tool won't do all the calculations for you (it'll only calculate the second half of X and Y)
- ;; Default settings:
- ;; Degrees: 180 (don't change)
- ;; Frames: 30 (don't change)
- ;; Radius: 64 (CHANGE THIS, THIS IS THE BASE SPEED)
- ;; Bytes: 1 (don't change)
- ;; #'s/line: 4 (don't change)
- ;; Add end frame: YES
- XSPEEDS: db $00,$07,$0D,$14
- db $1A,$20,$26,$2B
- db $30,$34,$37,$3A
- db $3D,$3F,$40,$40
- db $40,$3F,$3D,$3A
- db $37,$34,$30,$2B
- db $26,$20,$1A,$14
- db $0D,$07,$00
- db $00,$F9,$F3,$EC
- db $E6,$E0,$DA,$D5
- db $D0,$CC,$C9,$C6
- db $C3,$C1,$C0,$C0
- db $C0,$C1,$C3,$C6
- db $C9,$CC,$D0,$D5
- db $DA,$E0,$E6,$EC
- db $F3,$F9,$00
- YSPEEDS: db $C0,$C0,$C1,$C3
- db $C6,$C9,$CC,$D0
- db $D5,$DA,$E0,$E6
- db $EC,$F3,$F9,$00
- db $07,$0D,$14,$1A
- db $20,$26,$2B,$30
- db $34,$37,$3A,$3D
- db $3F,$40,$40
- db $40,$40,$3F,$3D
- db $3A,$37,$34,$30
- db $2B,$26,$20,$1A
- db $14,$0D,$07,$00
- db $F9,$F3,$EC,$E6
- db $E0,$DA,$D5,$D0
- db $CC,$C9,$C6,$C3
- db $C1,$C0,$C0
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; SUB_VERT_POS
- ; This routine determines if Mario is above or below the sprite. It sets the Y register
- ; to the direction such that the sprite would face Mario
- ; It is ripped from $03B829
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- SUB_VERT_POS: LDY #$00
- LDA $96
- SEC
- SBC $D8,x
- STA $0F
- LDA $97
- SBC $14D4,x
- BPL SPR_L11
- INY
- SPR_L11: RTS
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- PhaseDurationTable: db $69,$FF,$FF,$FF,$69,$69,$69,$69,$69
- GoToRandomPhase: JSL $01ACF9
- LDA $148D
- AND #$07
- STA $00
- JSL $01ACF9
- LDA $148D
- AND #$01
- CLC
- ADC $00
- STA !BossPhase,x
- TAY
- LDA PhaseDurationTable,y
- CMP #$69
- BEQ GoToRandomPhase ;try again until you fetch a valid count
- STA !PhaseTimer,x
- INC !ThrowBlockCntr,x
- LDA !ThrowBlockCntr,x
- CMP #!ThrowBlkAt
- BNE +
- STZ !ThrowBlockCntr,x
- JSR GenerateThrowBlockAtTop
- + RTS
- ;====================================
- GenerateThrowBlockAtTop:
- .GenFire TXY
- LDX #$0B
- .GLoop LDA $14C8,X
- BEQ .Cont
- DEX
- BPL .GLoop
- RTS
- .Cont PHY
- LDA #$09 ;set to main
- STA $14C8,x ;status
- LDA #$53 ;sprite to generate
- STA $9E,x ;custom sprite
- PHY
- JSL $07F7D2 ;clear
- PLY
- LDA #$78
- STA $E4,x
- LDA $95
- STA $14E0,x
- LDA #$FF
- STA $1540,x
- LDA #$00
- STA $D8,x
- LDA #$00
- STA $14D4,x
- STZ $B6,x
- STZ $AA,x
- PLX
- RTS
- ; ===============================================
- KILLED_X_SPEED: db $F0,$10
- SPRITE_INTERACT: LDY #$0B ; sprite is being kicked
- INTERACT_LOOP: LDA $14C8,y ; \ if the sprite status is..
- CMP #$09 ; | ...shell-like
- BCS PROCESS_SPRITE ; /
- NEXT_SPRITE: DEY
- BPL INTERACT_LOOP
- RTS
- PROCESS_SPRITE: PHX
- TYX
- JSL $03B6E5 ; get sprite clipping B routine
- PLX
- JSR GetSpriteClipping ; get sprite clipping A routine
- JSL $03B72B ; check for contact routine
- BCC NEXT_SPRITE
- PHX
- TYX
- JSL $01AB72 ; show sprite contact gfx routine
- LDA #$02 ; \ Kill thrown sprite
- STA $14C8,x ; /
- LDA #$D0 ; \ Set killed Y speed
- STA $AA,x ; /
- LDY #$00 ; Set killed X speed
- LDA $B6,x
- BPL SET_SPEED
- INY
- SET_SPEED: LDA KILLED_X_SPEED,y
- STA $B6,x
- NO_KILL: PLX
- HANDLE_HIT: LDA #$28 ; \ Play sound effect
- STA $1DFC ; /
- LDA #$47 ; \ Play sound effect
- STA $1DFC ; /
- LDA #$01 ; \ Set stunned state
- STA $C2,x ; /
- LDA #$20 ; \ Set stunned timer
- STA $1564,x ; /
- DEC !Hitpoints,x ; Increase hit counter and...
- LDA !Hitpoints,x ; \ Check if the sprite has been hit 3 times
- BNE JustHit
- LDA #$02 ; \ Kill sprite
- STA $14C8,x ;
- LDA #$D0
- STA $AA,x
- LDA #$10
- STA $B6,x
- RTS
- JustHit: LDA #$FF
- STA !PhaseTimer,x
- LDA #$08
- STA !BossPhase,x
- LDA #$28
- STA $1DFC
- RTS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement