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:
LDY.b #$0A SEP #$30 ; set 8-bit accumulator index registers
LDA.b #$0B : JSL Sprite_SpawnDynamically_arbitrary : BMI .done ; spawn a chicken LDA.l !CUCCO_STORM : BEQ + ; only if storm is on
JSL Sprite_SetSpawnedCoords LDA.b $10 : CMP.b #$09 : BNE + ; only if outdoors
LDA.b #$24 : STA $0DA0, Y ; turn it into an attack chicken LDA.l !LOOP_FRAMES_LOW : AND.b #$7F : BNE + ; check every 128 frames
LDA.b #$01 : STA $0DB0, Y
.done
PLP : PLY : PLX : PLA
RTL
;================================================================================
SpawnAngryCucco:
TXA : EOR $1A : AND.b #$0F : ORA $1B : BNE .spawn_delay
LDA.b #$0B
LDY.b #$0A
JSL Sprite_SpawnDynamically_arbitrary : BMI .spawn_failed
PHX
TYX
LDA.b #$1E : JSL Sound_SetSfx3PanLong
PLX
LDA.b #$01 : STA $0DB0, 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
-
;==== Find a Cucco
LDY.b #$FF : PHY ; push "cucco not found"
LDX.b #$00 : -- : CPX.b #$10 : !BGE .ldone
LDA.w !ENEMY_STATE_TABLE, X : CMP.b !ALIVE : BEQ +++
; 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
;==== Create a Cucco
CPY.b #$FF : BNE ++
; we didn't find a cucco, so try to create one
PLY
CPY.b #$FF : BEQ + ; fail if no slots found
LDA.b !CUCCO : STA.w !ENEMY_TYPE_TABLE, Y
LDA.b !INIT : STA.w !ENEMY_STATE_TABLE, Y
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
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
BRA +++
++
PLA
+++
;==== Enrage a Cucco
LDA.b !CUCCO_ENRAGED : STA.w !ENEMY_AUX1_TABLE, Y ; enrage the cucco
LDA.b #$00 : STA.w !ENEMY_AUX2_TABLE, Y : STA.w !ENEMY_DIRECTION_TABLE, Y
;====
+
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
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------