add big chuchu phase to manhandla boss

This commit is contained in:
scawful
2024-06-21 19:19:24 -04:00
parent 65c0ad2f70
commit 391fddd923

View File

@@ -40,7 +40,7 @@ Sprite_Manhandla_Long:
JSR Sprite_Manhandla_CheckForNextPhaseOrDeath
LDA.w SprMiscD, X : BEQ .phase1
LDA.w SprMiscD, X : CMP.b #$02 : BCC .phase1
JSR Sprite_BigChuchu_Draw
JMP .continue
.phase1
@@ -65,7 +65,7 @@ Sprite_Manhandla_Prep:
LDA.b #$04 : STA $36 ; Stores initial movement speeds
LDA.b #$06 : STA $0428 ; Allows BG1 to move
LDA.b #$80 : STA.w SprDefl, X
LDA.b #$20 : STA.w SprHealth, X
LDA.b #$80 : STA.w SprHealth, X
LDA.w SprSubtype, X : STA.w SprAction, X
PLB
@@ -76,35 +76,41 @@ Sprite_Manhandla_Prep:
; Then we transition to the chuchu phase.
Sprite_Manhandla_CheckForNextPhaseOrDeath:
{
; All three heads need to be dead before we become big chuchu
LDA Offspring1_Id : TAY
LDA.w SprState, Y : BEQ .offspring1_dead
JMP .not_dead
.offspring1_dead
LDA.b #$05 : STA.w $36
LDA Offspring2_Id : TAY
LDA.w SprState, Y : BEQ .offspring2_dead
JMP .not_dead
.offspring2_dead
LDA.b #$06 : STA.w $36
LDA Offspring3_Id : TAY
LDA.w SprState, Y : BEQ .offspring3_dead
JMP .not_dead
.offspring3_dead
LDA.b #$07 : STA.w $36
LDA.w SprMiscD, X : BNE .phase2
LDA.w SprHealth, X : CMP.b #$08 : BCS .not_dead
LDA.b #$01 : STA.w SprMiscD, X
LDA.b #$20 : STA.w SprHealth, X
LDA.b #$08 : STA.w SprNbrOAM, X
LDA.b #$01 : STA.w SprMiscD, X
LDA.b #$40 : STA.w SprTimerA, X
LDA.b #$20 : STA.w SprHealth, X ; Refill the health
LDA.b #$08 : STA.w SprNbrOAM, X ; Give more OAM
LDA.b #$07 : STA.w SprAction, X ; Chuchu Emerge
.not_dead
RTS
.phase2
LDA.w SprMiscD, X : CMP.b #$02 : BEQ +
LDA.w SprHealth, X : CMP.b #$08 : BCS .phase2_not_dead
LDA.b #$20 : STA.w SprTimerA, X
LDA.b #$05 : STA.w SprAction, X
LDA.w SprMiscD, X : CMP.b #$03 : BEQ +
LDA.w SprHealth, X : CMP.b #$04 : BCS .phase2_not_dead
LDA.b #$50 : STA.w SprTimerA, X
LDA.b #$09 : STA.w SprAction, X
LDA.b #$13 : STA $012C
LDA.b #$02 : STA.w SprMiscD, X
.phase2_not_dead
LDA.b #$04 : STA.w SprMiscD, X
.phase2_not_dead
+
RTS
@@ -136,17 +142,33 @@ macro SetRightHeadPos()
STA.w SprY, Y : XBA : STA.w SprYH, Y
endmacro
macro SetCenterHeadPos()
REP #$20
LDA SprCachedX
SEP #$20
STA.w SprX, Y : XBA : STA.w SprXH, Y
REP #$20
LDA SprCachedY
SEP #$20
STA.w SprY, Y : XBA : STA.w SprYH, Y
endmacro
Sprite_Manhandla_Main:
{
LDA.w SprAction, X
JSL UseImplicitRegIndexedLocalJumpTable
dw Manhandla_Intro
dw Manhandla_FrontHead
dw Manhandla_LeftHead
dw Manhandla_RightHead
dw BigChuchu_Main
dw BigChuChu_Dead
dw Manhandla_FrontHead ; 0x01
dw Manhandla_LeftHead ; 0x02
dw Manhandla_RightHead ; 0x03
dw BigChuchu_Main ; 0x04
dw Flower_Flicker ; 0x05
dw Manhandla_Body ; 0x06
dw BigChuchu_Emerge ; 0x07
dw BigChuchu_Flower ; 0x08
dw BigChuchu_Dead ; 0x09
Manhandla_Intro:
{
@@ -156,9 +178,12 @@ Sprite_Manhandla_Main:
JSR ApplyManhandlaPalette
JSR SpawnLeftManhandlaHead
JSR SpawnRightManhandlaHead
INC.w SprAction, X
JSR SpawnCenterMandhandlaHead
LDA.b #$06 : STA.w SprFrame, X
%GotoAction(6) ; Manhandla_Body
RTS
.not_main
LDA.w SprSubtype, X : STA.w SprAction, X
RTS
}
@@ -167,31 +192,12 @@ Sprite_Manhandla_Main:
{
%PlayAnimation(0,1,16)
JSL GetRandomInt : AND.b #$7F : BNE +
JSR Mothula_SpawnBeams
+
JSR Sprite_Manhandla_Move
JSL Sprite_Move
JSL Sprite_DamageFlash_Long
JSL Sprite_CheckDamageFromPlayerLong
%DoDamageToPlayerSameLayerOnContact()
PHX
LDY.w Offspring1_Id
LDA.w SprType, Y : CMP.b #$88 : BNE .not_head
LDA.w SprState, Y : BEQ .offspring1_dead
%SetLeftHeadPos()
.offspring1_dead
.not_head
LDY.w Offspring2_Id
LDA.w SprType, Y : CMP.b #$88 : BNE .not_head2
LDA.w SprState, Y : BEQ .offspring2_dead
%SetRightHeadPos()
.offspring2_dead
.not_head2
PLX
RTS
}
@@ -237,11 +243,19 @@ Sprite_Manhandla_Main:
%DoDamageToPlayerSameLayerOnContact()
PLX
LDY.w Offspring3_Id
LDA.w SprType, Y : CMP.b #$88 : BNE .not_head3
LDA.w SprState, Y : BEQ .offspring3_dead
%SetCenterHeadPos()
.offspring3_dead
.not_head3
RTS
}
BigChuChu_Dead:
Flower_Flicker:
{
%PlayAnimation(11, 12, 10)
LDA $1C : ORA.b #$01 : STA $1C ;turn on BG2 (Body)
; Flicker the body every other frame using the timer
LDA SprTimerA, X : AND.b #$01 : BEQ .flicker
@@ -252,12 +266,100 @@ Sprite_Manhandla_Main:
STZ.w $0422
STZ.w $0424
LDA $1C : AND.b #$FE : STA $1C ;turn off BG2 (Body)
LDA.b #$04 : STA.w SprState, X
STZ.w SprHealth, X
%GotoAction($04)
LDA.b #$8D : STA.w SprHitbox, X
LDA #$88
JSL Sprite_SpawnDynamically : BMI .return
TYA : STA Offspring3_Id
PHX
%SetCenterHeadPos()
LDA.b #$08 : STA.w SprSubtype, Y
STA.w SprAction, Y
LDA.b #$20 : STA.w SprHealth, Y
LDA.b #$07 : STA.w SprNbrOAM, Y
TYX
STZ.w SprYRound, X
STZ.w SprXRound, X
PLX
.return
.continue
RTS
}
Manhandla_Body:
{
%PlayAnimation(6,8,16)
PHX
JSR Sprite_Manhandla_Move
JSL Sprite_DamageFlash_Long
JSL GetRandomInt : AND.b #$7F : BNE +
JSL GetRandomInt : AND.b #$0F : BNE +
JSR Mothula_SpawnBeams
+
JSL Sprite_CheckDamageFromPlayerLong
%DoDamageToPlayerSameLayerOnContact()
LDY.w Offspring1_Id
LDA.w SprType, Y : CMP.b #$88 : BNE .not_head
LDA.w SprState, Y : BEQ .offspring1_dead
%SetLeftHeadPos()
.offspring1_dead
.not_head
LDY.w Offspring2_Id
LDA.w SprType, Y : CMP.b #$88 : BNE .not_head2
LDA.w SprState, Y : BEQ .offspring2_dead
%SetRightHeadPos()
.offspring2_dead
.not_head2
LDY.w Offspring3_Id
LDA.w SprType, Y : CMP.b #$88 : BNE .not_head3
LDA.w SprState, Y : BEQ .offspring3_dead
%SetCenterHeadPos()
.offspring3_dead
.not_head3
PLX
RTS
}
BigChuchu_Emerge:
{
%PlayAnimation(9, 12, 10)
LDA.w SprTimerA, X : BNE +
LDA.b #$02 : STA.w SprMiscD, X ; Set phase flag
LDA.b #$20 : STA.w SprTimerA, X
%GotoAction($05)
+
RTS
}
BigChuchu_Flower:
{
%PlayAnimation(12, 12, 1)
RTS
}
BigChuchu_Dead:
{
LDA.b #$04 : STA.w SprState, X
STZ.w SprHealth, X
RTS
}
}
Sprite_Manhandla_Move:
@@ -342,10 +444,10 @@ Manhandla_StopIfOutOfBounds:
{
; Set A to 00 if outside of certain bounds
REP #$20
LDA SprCachedX : CMP.w #$1528 : BCS .not_out_of_bounds_Left
LDA SprCachedX : CMP.w #$153A : BCS .not_out_of_bounds_Left
SEP #$20
LDA.w SprXSpeed : CMP.b #$7F : BCC .not_out_of_bounds_Left
LDA.b #-10 : STA.w SprXSpeed : STA SprXRound
LDA.b #-08 : STA.w SprXSpeed : STA SprXRound
.not_out_of_bounds_Left
SEP #$20
@@ -354,26 +456,26 @@ Manhandla_StopIfOutOfBounds:
LDA SprCachedX : CMP.w #$15C8 : BCC .not_out_of_bounds_Right
SEP #$20
LDA.w SprXSpeed : CMP.b #$80 : BCS .not_out_of_bounds_Right
LDA.b #$00 : STA.w SprXSpeed : STA SprXRound
LDA.b #$08 : STA.w SprXSpeed : STA SprXRound
.not_out_of_bounds_Right
SEP #$20
; Upper bound
REP #$20
LDA SprCachedY : CMP.w #$0B30 : BCS .not_out_of_bounds_Up
LDA SprCachedY : CMP.w #$0B3A : BCS .not_out_of_bounds_Up
SEP #$20
LDA.w SprYSpeed : CMP.b #$7F : BCC .not_out_of_bounds_Up
LDA.b #$00 : STA.w SprYSpeed : STA SprYRound
LDA.b #$08 : STA.w SprYSpeed : STA SprYRound
.not_out_of_bounds_Up
SEP #$20
REP #$20
LDA SprCachedY : CMP.w #$0BC0 : BCC .not_out_of_bounds_Down
LDA SprCachedY : CMP.w #$0BA6 : BCC .not_out_of_bounds_Down
SEP #$20
LDA.w SprYSpeed : CMP.b #$80 : BCS .not_out_of_bounds_Down
LDA.b #-10 : STA.w SprYSpeed : STA SprYRound ; Reverse the direction
LDA.b #-08 : STA.w SprYSpeed : STA SprYRound ; Reverse the direction
.not_out_of_bounds_Down
SEP #$20
@@ -443,9 +545,9 @@ Sprite_Manhandla_Draw:
; =========================================================
.start_index
db $00, $02, $04, $08, $0C, $10, $14, $17, $1A
db $00, $02, $04, $08, $0C, $10, $14, $17, $1A, $1D, $23, $29, $33
.nbr_of_tiles
db 1, 1, 3, 3, 3, 3, 2, 2, 2
db 1, 1, 3, 3, 3, 3, 2, 2, 2, 5, 5, 9, 7
.x_offsets
dw 0, 0
dw 0, 0
@@ -456,6 +558,11 @@ Sprite_Manhandla_Draw:
dw -12, -4, 12
dw -12, -4, 12
dw 12, 4, -12
dw -12, -4, -12, -4, 12, 12
dw -12, -4, -12, -4, 12, 12
dw -16, -8, -16, -8, 16, 8, 16, 8, -12, 12
dw -16, -8, -16, -8, 16, 8, 16, 8
.y_offsets
dw -8, 8
dw 0, 16
@@ -466,6 +573,11 @@ Sprite_Manhandla_Draw:
dw 0, 0, 0
dw 0, 0, 0
dw 0, 0, 0
dw -28, -28, -12, -12, -28, -12
dw -24, -24, -8, -8, -24, -8
dw -24, -24, -8, -8, -8, -8, -24, -24, -32, -32
dw -24, -24, -8, -8, -8, -8, -24, -24
.chr
db $00, $20
db $02, $22
@@ -476,6 +588,11 @@ Sprite_Manhandla_Draw:
db $40, $41, $40
db $43, $44, $46
db $43, $44, $46
db $4D, $4E, $6D, $6E, $4D, $6D
db $8D, $8E, $AD, $AE, $8D, $AD
db $CD, $CE, $ED, $EE, $ED, $EE, $CD, $CE, $AE, $AE
db $CD, $CE, $ED, $EE, $ED, $EE, $CD, $CE
.properties
db $33, $33
db $33, $33
@@ -486,6 +603,11 @@ Sprite_Manhandla_Draw:
db $33, $33, $73
db $33, $33, $73
db $73, $73, $33
db $33, $33, $33, $33, $73, $73
db $33, $33, $33, $33, $73, $73
db $33, $33, $33, $33, $73, $73, $73, $73, $32, $72
db $33, $33, $33, $33, $73, $73, $73, $73
.sizes
db $02, $02
db $02, $02
@@ -496,6 +618,11 @@ Sprite_Manhandla_Draw:
db $02, $02, $02
db $02, $02, $02
db $02, $02, $02
db $02, $02, $02, $02, $02, $02
db $02, $02, $02, $02, $02, $02
db $02, $02, $02, $02, $02, $02, $02, $02, $02, $02
db $02, $02, $02, $02, $02, $02, $02, $02
}
Sprite_BigChuchu_Draw:
@@ -639,14 +766,13 @@ SpawnLeftManhandlaHead:
TYA : STA Offspring1_Id
PHX
%SetLeftHeadPos()
; store the sub-type
LDA.b #$03 : STA.w $0E30, Y
STA.w SprSubtype, Y
LDA.b #$03 : STA.w SprSubtype, Y
STA.w SprAction, Y
LDA.b #$10 : STA.w SprHealth, Y
LDA.b #$90 : STA.w SprTileDie, Y
LDA.w SprGfxProps : ORA.b #$80 : STA.w SprGfxProps, Y
TYX
STZ.w SprYRound, X
@@ -657,7 +783,6 @@ SpawnLeftManhandlaHead:
RTS
}
SpawnRightManhandlaHead:
{
LDA #$88
@@ -667,10 +792,34 @@ SpawnRightManhandlaHead:
PHX
%SetRightHeadPos()
LDA.b #$02 : STA $0E30, Y
LDA.b #$02
STA.w SprSubtype, Y
LDA.b #$10 : STA.w SprHealth, Y
LDA.b #$90 : STA.w SprTileDie, Y
LDA.w SprGfxProps : AND.b #$80 : STA.w SprGfxProps, Y
TYX
STZ.w SprYRound, X
STZ.w SprXRound, X
PLX
.return
RTS
}
SpawnCenterMandhandlaHead:
{
LDA #$88
JSL Sprite_SpawnDynamically : BMI .return
TYA : STA Offspring3_Id
PHX
%SetCenterHeadPos()
LDA.b #$01
STA.w SprSubtype, Y
LDA.b #$10 : STA.w SprHealth, Y
LDA.b #$90 : STA.w SprTileDie, Y
LDA.w SprGfxProps : AND.b #$80 : STA.w SprGfxProps, Y
TYX
@@ -703,7 +852,6 @@ ApplyManhandlaPalette:
RTS
}
ApplyManhandlaGraphics:
{
PHX