cucco storm
This commit is contained in:
139
cuccostorm.asm
139
cuccostorm.asm
@@ -1,74 +1,75 @@
|
||||
;================================================================================
|
||||
StartCuccoStorm:
|
||||
;STA $FFFFFF
|
||||
PHA : PHX : PHY : PHP
|
||||
SEP #$30 ; set 8-bit accumulator & index registers
|
||||
LDA $1B : BNE .done ; skip if indoors
|
||||
!CUCCO_STORM = "$7F50C5"
|
||||
!IS_INDOORS = "$7E001B"
|
||||
!ENEMY_STATE_TABLE = "$7E0DD0"
|
||||
!ENEMY_TYPE_TABLE = "$7E0E20"
|
||||
!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
|
||||
LDA.b #$0B : JSL Sprite_SpawnDynamically_arbitrary : BMI .done ; spawn a chicken
|
||||
JSL Sprite_SetSpawnedCoords
|
||||
LDA.b #$24 : STA $0DA0, Y ; turn it into an attack chicken
|
||||
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
|
||||
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 #$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
|
||||
;================================================================================
|
||||
@@ -17,6 +17,7 @@ OnDrawHud:
|
||||
JSL.l DrawChallengeTimer ; this has to come before NewDrawHud because the timer overwrites the compass counter
|
||||
JSL.l NewDrawHud
|
||||
JSL.l SwapSpriteIfNecissary
|
||||
JSL.l CuccoStorm
|
||||
JSL.l PollService
|
||||
JML.l ReturnFromOnDrawHud
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user