cucco storm

This commit is contained in:
Kat
2021-05-14 14:17:11 -05:00
parent a7f8bc8d91
commit 47e52d3fb2
2 changed files with 71 additions and 69 deletions

View File

@@ -1,74 +1,75 @@
;================================================================================ ;================================================================================
StartCuccoStorm: !CUCCO_STORM = "$7F50C5"
;STA $FFFFFF !IS_INDOORS = "$7E001B"
PHA : PHX : PHY : PHP !ENEMY_STATE_TABLE = "$7E0DD0"
SEP #$30 ; set 8-bit accumulator & index registers !ENEMY_TYPE_TABLE = "$7E0E20"
LDA $1B : BNE .done ; skip if indoors !ENEMY_AUX1_TABLE = "$7E0DA0"
!ENEMY_AUX2_TABLE = "$7E0DB0"
!ENEMY_DIRECTION_TABLE = "$7E0EB0"
!CUCCO = "#$0B"
!INERT = "#$00"
!INIT = "#$08"
!ALIVE = "#$09"
!CUCCO_ENRAGED = "#$23"
!LINK_POS_Y_LOW = "$20"
!LINK_POS_Y_HIGH = "$21"
!LINK_POS_X_LOW = "$22"
!LINK_POS_X_HIGH = "$23"
!ENEMY_POS_Y_LOW = "$7E0D00"
!ENEMY_POS_X_LOW = "$7E0D10"
!ENEMY_POS_Y_HIGH = "$7E0D20"
!ENEMY_POS_X_HIGH = "$7E0D30"
CuccoStorm:
SEP #$30 ; set 8-bit accumulator index registers
LDA.l !CUCCO_STORM : BEQ + ; only if storm is on
LDA.b $10 : CMP.b #$09 : BNE + ; only if outdoors
LDA.l !LOOP_FRAMES_LOW : AND.b #$7F : BNE + ; check every 128 frames
-
;==== Find a Cucco
LDY.b #$0A LDY.b #$FF : PHY ; push "cucco not found"
LDA.b #$0B : JSL Sprite_SpawnDynamically_arbitrary : BMI .done ; spawn a chicken
JSL Sprite_SetSpawnedCoords LDX.b #$00 : -- : CPX.b #$10 : !BGE .ldone
LDA.b #$24 : STA $0DA0, Y ; turn it into an attack chicken LDA.w !ENEMY_STATE_TABLE, X : CMP.b !ALIVE : BEQ +++
LDA.b #$01 : STA $0DB0, Y ; enemy not found
CMP.b !INERT : BNE ++
; log inert enemy slot
PLA : PHX
BRA ++
+++
; found an enemy
LDA.l !ENEMY_TYPE_TABLE, X : CMP.b !CUCCO : BNE ++
; it's a cucco
TXY ; record where we found the living cucco in case we don't find any angry ones
LDA.w !ENEMY_AUX1_TABLE, X : CMP.b !CUCCO_ENRAGED : !BLT ++
PLA : BRA + ; we found an angry cucco, done
++ : INX : BRA -- : .ldone
.done ;==== Create a Cucco
PLP : PLY : PLX : PLA
RTL CPY.b #$FF : BNE ++
;================================================================================ ; we didn't find a cucco, so try to create one
SpawnAngryCucco: PLY
TXA : EOR $1A : AND.b #$0F : ORA $1B : BNE .spawn_delay CPY.b #$FF : BEQ + ; fail if no slots found
LDA.b !CUCCO : STA.w !ENEMY_TYPE_TABLE, Y
LDA.b #$0B LDA.b !INIT : STA.w !ENEMY_STATE_TABLE, Y
LDY.b #$0A LDA.b !LINK_POS_Y_LOW : STA.w !ENEMY_POS_Y_LOW, Y
LDA.b !LINK_POS_Y_HIGH : STA.w !ENEMY_POS_Y_HIGH, Y
JSL Sprite_SpawnDynamically_arbitrary : BMI .spawn_failed LDA.b !LINK_POS_X_LOW : STA.w !ENEMY_POS_X_LOW, Y
LDA.b !LINK_POS_X_HIGH : STA.w !ENEMY_POS_X_HIGH, Y
PHX BRA +++
++
TYX PLA
+++
LDA.b #$1E : JSL Sound_SetSfx3PanLong
;==== Enrage a Cucco
PLX
LDA.b !CUCCO_ENRAGED : STA.w !ENEMY_AUX1_TABLE, Y ; enrage the cucco
LDA.b #$01 : STA $0DB0, Y LDA.b #$00 : STA.w !ENEMY_AUX2_TABLE, Y : STA.w !ENEMY_DIRECTION_TABLE, Y
PHX ;====
+
JSL GetRandomInt : STA $0F : AND.b #$02 : BEQ .vertical_entry_point
LDA $0F : ADC $E2 : STA $0D10, Y
LDA $E3 : ADC.b #$00 : STA $0D30, Y
LDA $0F : AND.b #$01 : TAX
LDA $9F3C, X : ADC $E8 : STA $0D00, Y
LDA $E9 : ADC.b #$00 : STA $0D20, Y
BRA .set_velocity
.vertical_entry_point
LDA $0F : ADC $E8 : STA $0D00, Y
LDA $E9 : ADC.b #$00 : STA $0D20, Y
LDA $0F : AND.b #$01 : TAX
LDA $9F3C, X : ADC $E2 : STA $0D10, Y
LDA $E3 : ADC.b #$00 : STA $0D30, Y
.set_velocity
TYX
LDA.b #$20 : JSL Sprite_ApplySpeedTowardsPlayerLong
PLX
LDA.b #$30 : JSL Sound_SetSfx2PanLong
.spawn_failed
.spawn_delay
RTL RTL
;================================================================================ ;================================================================================

View File

@@ -17,6 +17,7 @@ OnDrawHud:
JSL.l DrawChallengeTimer ; this has to come before NewDrawHud because the timer overwrites the compass counter JSL.l DrawChallengeTimer ; this has to come before NewDrawHud because the timer overwrites the compass counter
JSL.l NewDrawHud JSL.l NewDrawHud
JSL.l SwapSpriteIfNecissary JSL.l SwapSpriteIfNecissary
JSL.l CuccoStorm
JSL.l PollService JSL.l PollService
JML.l ReturnFromOnDrawHud JML.l ReturnFromOnDrawHud
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------