Merge branch 'master' into DRMain

This commit is contained in:
aerinon
2021-05-24 14:52:26 -06:00
6 changed files with 86 additions and 82 deletions

View File

@@ -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
;================================================================================

View File

@@ -4,7 +4,9 @@
;--------------------------------------------------------------------------------
LockAgahnimDoors:
LDA.l AgahnimDoorStyle : AND.w #$00FF
BEQ .exit ; don't need to load 0, because we'd have it if we reached here
BNE +
;#$0 = Never Locked
LDA.w #$0000 : RTL
+ : CMP.w #$0001 : BNE +
LDA $7EF3C5 : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip
JSR.w LockAgahnimDoorsCore : RTL
@@ -35,7 +37,7 @@ LockAgahnimDoors:
.unlock
LDA.w #$0000 ; fallback to never locked
.exit
RTL
;--------------------------------------------------------------------------------
LockAgahnimDoorsCore:
@@ -202,14 +204,14 @@ RTL
AnimatedEntranceFix: ;when an entrance animation tries to start
PHA
LDA.l InvertedMode : BEQ + ;If we are in inverted mode
PLA
BIT $8A : BVS ++ ; and in the light world
LDA $8A : AND.b #$40 : BNE + ;and in the light world
PLA
STZ $04C6 ; skip it.
LDA #$00
RTL
+
PLA
++ STA $02E4 ;what we wrote over
STA $02E4 ;what we wrote over
STA $0FC1 ;what we wrote over
STA $0710 ;what we wrote over
RTL

View File

@@ -18,6 +18,7 @@ OnDrawHud:
JSL.l DrHudOverride
JSL.l NewDrawHud
JSL.l SwapSpriteIfNecissary
JSL.l CuccoStorm
JSL.l PollService
JML.l ReturnFromOnDrawHud
;--------------------------------------------------------------------------------

View File

@@ -757,8 +757,8 @@ RTS
;--------------------------------------------------------------------------------
Link_ReceiveItem_HUDRefresh:
LDA $7EF343 : BNE + ; skip if we have bombs
LDA $7EF375 : BEQ + ; skip if we are filling no bombs
LDA $7EF370 : !ADD.l StartingMaxBombs : BEQ + ; skip if we can't have bombs
LDA $7EF375 : BEQ + ; skip if we are filling no bombs
DEC : STA $7EF375 ; decrease bomb fill count
LDA.b #$01 : STA $7EF343 ; increase actual bomb count
+

View File

@@ -271,10 +271,10 @@ DrawHUDDungeonItems:
.dungeon_positions
dw 0 ; Hyrule Castle
dw 2 ; Agahnims Tower
dw 6 ; Eastern
dw 8 ; Desert
dw 10 ; Hera
dw 2 ; Agahnims Tower
dw 14 ; PoD
dw 16 ; Swamp
dw 18 ; Skull Woods
@@ -286,10 +286,10 @@ DrawHUDDungeonItems:
.small_key_x_offset
dw $7EF37D-$7EF37D ; Hyrule Castle
dw $7EF380-$7EF37D ; Agahnims Tower
dw $7EF37E-$7EF37D ; Eastern
dw $7EF37F-$7EF37D ; Desert
dw $7EF386-$7EF37D ; Hera
dw $7EF380-$7EF37D ; Agahnims Tower
dw $7EF382-$7EF37D ; PoD
dw $7EF381-$7EF37D ; Swamp
dw $7EF384-$7EF37D ; Skull Woods
@@ -302,10 +302,10 @@ DrawHUDDungeonItems:
.dungeon_bitmasks
dw $4000 ; Hyrule Castle
dw $0800 ; Agahnims Tower
dw $2000 ; Eastern
dw $1000 ; Desert
dw $0020 ; Hera
dw $0800 ; Agahnims Tower
dw $0200 ; PoD
dw $0400 ; Swamp
dw $0080 ; Skull Woods
@@ -317,10 +317,10 @@ DrawHUDDungeonItems:
.boss_room_ids
dw $80*2 ; ; Hyrule Castle (BNC)
dw $20*2 ; ; Agahnim
dw $C8*2 ; ; Eastern
dw $33*2 ; ; Desert
dw $07*2 ; ; Hera
dw $20*2 ; ; Agahnim
dw $5A*2 ; ; PoD
dw $06*2 ; ; Swamp
dw $29*2 ; ; Skull Woods
@@ -362,7 +362,7 @@ DrawHUDDungeonItems:
-- STA.w $1686,X
STA.w $16C6,X
STA.w $1706,X
DEX : DEX : BPL --
@@ -445,7 +445,7 @@ DrawHUDDungeonItems:
LDA.w #$2826
LDX.w .dungeon_positions,Y
STA.w $1706,Y
STA.w $1706,X
..skip_boss_kill
INY : INY

View File

@@ -1507,7 +1507,7 @@ dw #9999 ; Rupee Limit
; $7F50C2 - Armor Modifier
; $7F50C3 - Magic Modifier
; $7F50C4 - Light Cone Modifier
; $7F50C5 - Unused
; $7F50C5 - Cucco Storm
; $7F50C6 - Old Man Dash Modifier
; $7F50C7 - Ice Physics Modifier
; $7F50C8 - Infinite Arrows Modifier