75 lines
2.1 KiB
NASM
75 lines
2.1 KiB
NASM
;================================================================================
|
|
!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 CuccoStormModifier : BEQ + ; only if storm is on
|
|
LDA.b $10 : CMP.b #$09 : BNE + ; only if outdoors
|
|
LDA.l LoopFrames : 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
|
|
;================================================================================
|