Merge branch 'DRMain' into OWMain
This commit is contained in:
139
cuccostorm.asm
139
cuccostorm.asm
@@ -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
|
||||||
;================================================================================
|
;================================================================================
|
||||||
@@ -669,6 +669,10 @@ db $07,$07,$02,$02,$02,$02,$07,$07,$07,$20,$20,$07,$20,$20,$20,$07
|
|||||||
;27f300
|
;27f300
|
||||||
|
|
||||||
;
|
;
|
||||||
org $27ff00
|
;org $27ff00
|
||||||
SancDarkWorldFlag:
|
|
||||||
db 0
|
org $27fff0
|
||||||
|
LinksHouseDarkWorld:
|
||||||
|
dw $ffff
|
||||||
|
SanctuaryDarkWorld:
|
||||||
|
dw $ffff
|
||||||
15
dr_lobby.asm
15
dr_lobby.asm
@@ -1,10 +1,9 @@
|
|||||||
CheckDarkWorldSanc:
|
CheckDarkWorldSpawn:
|
||||||
STA $A0 : STA $048E ; what we wrote over
|
STA $A0 : STA $048E ; what we wrote over
|
||||||
LDA.l InvertedMode : AND #$00FF : BNE +
|
LDA.l DRFlags : AND #$0200 : BEQ + ; skip if the flag isn't set
|
||||||
LDA.l SancDarkWorldFlag : AND #$00FF : BEQ +
|
LDA.l $7EF357 : AND #$00FF : BNE + ; moon pearl?
|
||||||
SEP #$30
|
LDA.l LinksHouseDarkWorld : CMP $A0 : BEQ ++
|
||||||
LDA $A0 : CMP #$12 : BNE ++
|
LDA.l SanctuaryDarkWorld : CMP $A0 : BNE +
|
||||||
LDA.l $7EF357 : BNE ++ ; moon pearl?
|
++ SEP #$30 : LDA #$17 : STA $5D
|
||||||
LDA #$17 : STA $5D : INC $02E0 : LDA.b #$40 : STA !DARK_WORLD
|
INC $02E0 : LDA.b #$40 : STA !DARK_WORLD : REP #$30
|
||||||
++ REP #$30
|
|
||||||
+ RTL
|
+ RTL
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ org $08c450 ; <- ancilla_receive_item.asm : 146-148 (STY $5D : STZ $02D8)
|
|||||||
JSL RetrieveBunnyState : NOP
|
JSL RetrieveBunnyState : NOP
|
||||||
|
|
||||||
org $02d9ce ; <- Bank02.asm : Dungeon_LoadEntrance 10829 (STA $A0 : STA $048E)
|
org $02d9ce ; <- Bank02.asm : Dungeon_LoadEntrance 10829 (STA $A0 : STA $048E)
|
||||||
JSL CheckDarkWorldSanc : NOP
|
JSL CheckDarkWorldSpawn : NOP
|
||||||
|
|
||||||
org $01891e ; <- Bank 01.asm : 991 Dungeon_LoadType2Object (LDA $00 : XBA : AND.w #$00FF)
|
org $01891e ; <- Bank 01.asm : 991 Dungeon_LoadType2Object (LDA $00 : XBA : AND.w #$00FF)
|
||||||
JSL RainPrevention : NOP #2
|
JSL RainPrevention : NOP #2
|
||||||
|
|||||||
@@ -4,7 +4,9 @@
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
LockAgahnimDoors:
|
LockAgahnimDoors:
|
||||||
LDA.l AgahnimDoorStyle : AND.w #$00FF
|
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 +
|
+ : CMP.w #$0001 : BNE +
|
||||||
LDA $7EF3C5 : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip
|
LDA $7EF3C5 : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip
|
||||||
JSR.w LockAgahnimDoorsCore : RTL
|
JSR.w LockAgahnimDoorsCore : RTL
|
||||||
@@ -35,7 +37,7 @@ LockAgahnimDoors:
|
|||||||
.unlock
|
.unlock
|
||||||
|
|
||||||
LDA.w #$0000 ; fallback to never locked
|
LDA.w #$0000 ; fallback to never locked
|
||||||
.exit
|
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
LockAgahnimDoorsCore:
|
LockAgahnimDoorsCore:
|
||||||
@@ -202,14 +204,14 @@ RTL
|
|||||||
AnimatedEntranceFix: ;when an entrance animation tries to start
|
AnimatedEntranceFix: ;when an entrance animation tries to start
|
||||||
PHA
|
PHA
|
||||||
LDA.l InvertedMode : BEQ + ;If we are in inverted mode
|
LDA.l InvertedMode : BEQ + ;If we are in inverted mode
|
||||||
|
LDA $8A : AND.b #$40 : BNE + ;and in the light world
|
||||||
PLA
|
PLA
|
||||||
BIT $8A : BVS ++ ; and in the light world
|
|
||||||
STZ $04C6 ; skip it.
|
STZ $04C6 ; skip it.
|
||||||
LDA #$00
|
LDA #$00
|
||||||
RTL
|
RTL
|
||||||
+
|
+
|
||||||
PLA
|
PLA
|
||||||
++ STA $02E4 ;what we wrote over
|
STA $02E4 ;what we wrote over
|
||||||
STA $0FC1 ;what we wrote over
|
STA $0FC1 ;what we wrote over
|
||||||
STA $0710 ;what we wrote over
|
STA $0710 ;what we wrote over
|
||||||
RTL
|
RTL
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ OnDrawHud:
|
|||||||
JSL.l DrHudOverride
|
JSL.l DrHudOverride
|
||||||
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
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ DrHudOverride:
|
|||||||
HudAdditions:
|
HudAdditions:
|
||||||
{
|
{
|
||||||
lda.l DRFlags : and #$0008 : beq ++
|
lda.l DRFlags : and #$0008 : beq ++
|
||||||
LDA.w #$28A4 : STA !GOAL_DRAW_ADDRESS
|
; LDA.w #$28A4 : STA !GOAL_DRAW_ADDRESS
|
||||||
lda $7EF423
|
lda $7EF423
|
||||||
jsr HudHexToDec4DigitCopy
|
jsr HudHexToDec4DigitCopy
|
||||||
LDX.b $05 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+2 ; draw 100's digit
|
LDX.b $05 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+2 ; draw 100's digit
|
||||||
|
|||||||
@@ -757,8 +757,8 @@ RTS
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
Link_ReceiveItem_HUDRefresh:
|
Link_ReceiveItem_HUDRefresh:
|
||||||
LDA $7EF343 : BNE + ; skip if we have bombs
|
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 $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
|
DEC : STA $7EF375 ; decrease bomb fill count
|
||||||
LDA.b #$01 : STA $7EF343 ; increase actual bomb count
|
LDA.b #$01 : STA $7EF343 ; increase actual bomb count
|
||||||
+
|
+
|
||||||
|
|||||||
@@ -271,10 +271,10 @@ DrawHUDDungeonItems:
|
|||||||
|
|
||||||
.dungeon_positions
|
.dungeon_positions
|
||||||
dw 0 ; Hyrule Castle
|
dw 0 ; Hyrule Castle
|
||||||
dw 2 ; Agahnims Tower
|
|
||||||
dw 6 ; Eastern
|
dw 6 ; Eastern
|
||||||
dw 8 ; Desert
|
dw 8 ; Desert
|
||||||
dw 10 ; Hera
|
dw 10 ; Hera
|
||||||
|
dw 2 ; Agahnims Tower
|
||||||
dw 14 ; PoD
|
dw 14 ; PoD
|
||||||
dw 16 ; Swamp
|
dw 16 ; Swamp
|
||||||
dw 18 ; Skull Woods
|
dw 18 ; Skull Woods
|
||||||
@@ -286,10 +286,10 @@ DrawHUDDungeonItems:
|
|||||||
|
|
||||||
.small_key_x_offset
|
.small_key_x_offset
|
||||||
dw $7EF37D-$7EF37D ; Hyrule Castle
|
dw $7EF37D-$7EF37D ; Hyrule Castle
|
||||||
dw $7EF380-$7EF37D ; Agahnims Tower
|
|
||||||
dw $7EF37E-$7EF37D ; Eastern
|
dw $7EF37E-$7EF37D ; Eastern
|
||||||
dw $7EF37F-$7EF37D ; Desert
|
dw $7EF37F-$7EF37D ; Desert
|
||||||
dw $7EF386-$7EF37D ; Hera
|
dw $7EF386-$7EF37D ; Hera
|
||||||
|
dw $7EF380-$7EF37D ; Agahnims Tower
|
||||||
dw $7EF382-$7EF37D ; PoD
|
dw $7EF382-$7EF37D ; PoD
|
||||||
dw $7EF381-$7EF37D ; Swamp
|
dw $7EF381-$7EF37D ; Swamp
|
||||||
dw $7EF384-$7EF37D ; Skull Woods
|
dw $7EF384-$7EF37D ; Skull Woods
|
||||||
@@ -302,10 +302,10 @@ DrawHUDDungeonItems:
|
|||||||
|
|
||||||
.dungeon_bitmasks
|
.dungeon_bitmasks
|
||||||
dw $4000 ; Hyrule Castle
|
dw $4000 ; Hyrule Castle
|
||||||
dw $0800 ; Agahnims Tower
|
|
||||||
dw $2000 ; Eastern
|
dw $2000 ; Eastern
|
||||||
dw $1000 ; Desert
|
dw $1000 ; Desert
|
||||||
dw $0020 ; Hera
|
dw $0020 ; Hera
|
||||||
|
dw $0800 ; Agahnims Tower
|
||||||
dw $0200 ; PoD
|
dw $0200 ; PoD
|
||||||
dw $0400 ; Swamp
|
dw $0400 ; Swamp
|
||||||
dw $0080 ; Skull Woods
|
dw $0080 ; Skull Woods
|
||||||
@@ -317,10 +317,10 @@ DrawHUDDungeonItems:
|
|||||||
|
|
||||||
.boss_room_ids
|
.boss_room_ids
|
||||||
dw $80*2 ; ; Hyrule Castle (BNC)
|
dw $80*2 ; ; Hyrule Castle (BNC)
|
||||||
dw $20*2 ; ; Agahnim
|
|
||||||
dw $C8*2 ; ; Eastern
|
dw $C8*2 ; ; Eastern
|
||||||
dw $33*2 ; ; Desert
|
dw $33*2 ; ; Desert
|
||||||
dw $07*2 ; ; Hera
|
dw $07*2 ; ; Hera
|
||||||
|
dw $20*2 ; ; Agahnim
|
||||||
dw $5A*2 ; ; PoD
|
dw $5A*2 ; ; PoD
|
||||||
dw $06*2 ; ; Swamp
|
dw $06*2 ; ; Swamp
|
||||||
dw $29*2 ; ; Skull Woods
|
dw $29*2 ; ; Skull Woods
|
||||||
@@ -445,7 +445,7 @@ DrawHUDDungeonItems:
|
|||||||
|
|
||||||
LDA.w #$2826
|
LDA.w #$2826
|
||||||
LDX.w .dungeon_positions,Y
|
LDX.w .dungeon_positions,Y
|
||||||
STA.w $1706,Y
|
STA.w $1706,X
|
||||||
|
|
||||||
..skip_boss_kill
|
..skip_boss_kill
|
||||||
INY : INY
|
INY : INY
|
||||||
|
|||||||
@@ -1507,7 +1507,7 @@ dw #9999 ; Rupee Limit
|
|||||||
; $7F50C2 - Armor Modifier
|
; $7F50C2 - Armor Modifier
|
||||||
; $7F50C3 - Magic Modifier
|
; $7F50C3 - Magic Modifier
|
||||||
; $7F50C4 - Light Cone Modifier
|
; $7F50C4 - Light Cone Modifier
|
||||||
; $7F50C5 - Unused
|
; $7F50C5 - Cucco Storm
|
||||||
; $7F50C6 - Old Man Dash Modifier
|
; $7F50C6 - Old Man Dash Modifier
|
||||||
; $7F50C7 - Ice Physics Modifier
|
; $7F50C7 - Ice Physics Modifier
|
||||||
; $7F50C8 - Infinite Arrows Modifier
|
; $7F50C8 - Infinite Arrows Modifier
|
||||||
|
|||||||
Reference in New Issue
Block a user