From 47e52d3fb26a3a3492669f948a2fd81481eca361 Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 14 May 2021 14:17:11 -0500 Subject: [PATCH] cucco storm --- cuccostorm.asm | 139 +++++++++++++++++++++++++------------------------ events.asm | 1 + 2 files changed, 71 insertions(+), 69 deletions(-) diff --git a/cuccostorm.asm b/cuccostorm.asm index f21ec1c..b301748 100644 --- a/cuccostorm.asm +++ b/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: + + 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 - 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 + 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 - .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 - + ;==== 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 ;================================================================================ \ No newline at end of file diff --git a/events.asm b/events.asm index 7713938..bf17db1 100644 --- a/events.asm +++ b/events.asm @@ -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 ;--------------------------------------------------------------------------------