Merge branch 'OWMain' into overworld_kara
This commit is contained in:
@@ -586,12 +586,12 @@ Overworld_MemorizeMap16Change:
|
|||||||
org $04E879
|
org $04E879
|
||||||
Overworld_CheckForSpecialOverworldTrigger_Direction:
|
Overworld_CheckForSpecialOverworldTrigger_Direction:
|
||||||
|
|
||||||
|
org $058008
|
||||||
|
Sprite_SpawnSparkleGarnish:
|
||||||
|
|
||||||
org $05A51D
|
org $05A51D
|
||||||
Sprite_SpawnFallingItem:
|
Sprite_SpawnFallingItem:
|
||||||
|
|
||||||
org $05AFF1
|
|
||||||
Sprite_6C_MirrorPortal_dont_do_warp:
|
|
||||||
|
|
||||||
org $05DF6C ; 02DF6C - Bank05.asm : 2445
|
org $05DF6C ; 02DF6C - Bank05.asm : 2445
|
||||||
Sprite_DrawMultiple:
|
Sprite_DrawMultiple:
|
||||||
|
|
||||||
@@ -858,6 +858,9 @@ DiggingGameGuy_AttemptPrizeSpawn:
|
|||||||
org $1EDE28
|
org $1EDE28
|
||||||
Sprite_GetEmptyBottleIndex: ; this is totally in sprite_bees.asm
|
Sprite_GetEmptyBottleIndex: ; this is totally in sprite_bees.asm
|
||||||
|
|
||||||
|
org $1EDE89
|
||||||
|
GoldBee_Dormant_exit:
|
||||||
|
|
||||||
org $1EDE8A
|
org $1EDE8A
|
||||||
GoldBee_SpawnSelf:
|
GoldBee_SpawnSelf:
|
||||||
|
|
||||||
|
|||||||
@@ -90,11 +90,11 @@ FixAga2Bunny:
|
|||||||
++
|
++
|
||||||
JSL DecideIfBunny : BNE +
|
JSL DecideIfBunny : BNE +
|
||||||
JSR MakeBunny
|
JSR MakeBunny
|
||||||
LDA.b #$04 : STA.w $012C ; play bunny music
|
|
||||||
BRA .done
|
|
||||||
+
|
+
|
||||||
LDA.b #$09 : STA.w $012C ; what we wrote over
|
|
||||||
.done
|
.done
|
||||||
|
PHX
|
||||||
|
JSL Overworld_DetermineMusic : STX !REG_MUSIC_CONTROL_REQUEST
|
||||||
|
PLX
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -110,6 +110,15 @@ FakeWorldFix:
|
|||||||
+
|
+
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
GetCurrentWorldForLoad:
|
||||||
|
LDA FollowerIndicator : CMP #$04 : BNE .default
|
||||||
|
LDA InvertedMode : BEQ +
|
||||||
|
LDA #$40
|
||||||
|
+ RTL
|
||||||
|
.default
|
||||||
|
LDA CurrentWorld
|
||||||
|
RTL
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
MasterSwordFollowerClear:
|
MasterSwordFollowerClear:
|
||||||
LDA FollowerIndicator
|
LDA FollowerIndicator
|
||||||
CMP #$0E : BNE .exit ; clear master sword follower
|
CMP #$0E : BNE .exit ; clear master sword follower
|
||||||
|
|||||||
@@ -75,3 +75,16 @@ WalkUpOnOverworld:
|
|||||||
.normal
|
.normal
|
||||||
LDA #$0002 : STA $2F ; what we overwrote
|
LDA #$0002 : STA $2F ; what we overwrote
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
; CheckStairsAdjustment
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
CheckStairsAdjustment:
|
||||||
|
LDA.b $A0
|
||||||
|
CMP.w #$0124 ; vanilla check, rooms $0124 to $0127 have a lower exit position (currently ER ignores the entrance location)
|
||||||
|
BCC .done
|
||||||
|
LDA.w #$FFFF-1
|
||||||
|
CMP.w $0696 ; tavern back ($0696 == #$FFFF) should always have carry cleared
|
||||||
|
.done
|
||||||
|
RTL
|
||||||
|
; if carry cleared, shift position up
|
||||||
@@ -13,6 +13,9 @@ PHP
|
|||||||
|
|
||||||
SetDefaultWorld:
|
SetDefaultWorld:
|
||||||
PHP : SEP #$20
|
PHP : SEP #$20
|
||||||
|
LDA.l FollowerIndicator : CMP #$04 : BNE .default
|
||||||
|
LDA.l OldManRetrievalWorld : BRA +
|
||||||
|
.default
|
||||||
LDA.l InvertedMode : BEQ +
|
LDA.l InvertedMode : BEQ +
|
||||||
LDA.b #$40
|
LDA.b #$40
|
||||||
+ STA CurrentWorld
|
+ STA CurrentWorld
|
||||||
|
|||||||
@@ -125,32 +125,33 @@ RTL
|
|||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
HeartUpgradeSpawnDecision: ; this should return #$00 to make the hp spawn
|
HeartUpgradeSpawnDecision: ; this should return #$00 to make the hp spawn
|
||||||
LDA !FORCE_HEART_SPAWN : BEQ .bonk_prize_check
|
LDA.l !FORCE_HEART_SPAWN : BEQ .bonk_prize_check
|
||||||
|
|
||||||
DEC : STA !FORCE_HEART_SPAWN
|
LDA.b #$00 : STA.l !FORCE_HEART_SPAWN
|
||||||
LDA #$00
|
|
||||||
RTL
|
RTL
|
||||||
.bonk_prize_check
|
.bonk_prize_check
|
||||||
PHX
|
PHX
|
||||||
LDA 2,S : TAX : LDA.w $0ED0, X : BEQ .normal_behavior-1
|
LDA.b 5,S : TAX : LDA.w $0ED0, X : BEQ .normal_behavior-1
|
||||||
PLX
|
PLX
|
||||||
LDA.b #$00
|
LDA.b #$00
|
||||||
RTL
|
RTL
|
||||||
PLX
|
PLX
|
||||||
.normal_behavior
|
.normal_behavior
|
||||||
LDA OverworldEventDataWRAM, X
|
LDA.l OverworldEventDataWRAM, X
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
SaveHeartCollectedStatus:
|
SaveHeartCollectedStatus:
|
||||||
LDA !SKIP_HEART_SAVE : BEQ .save_flag
|
LDA !SKIP_HEART_SAVE : BEQ .save_flag
|
||||||
|
|
||||||
DEC : STA !SKIP_HEART_SAVE
|
LDA #$00 : STA !SKIP_HEART_SAVE
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
.save_flag
|
.save_flag
|
||||||
LDA 4,S : TAY : LDA $0ED0,Y : BEQ .normal_behavior
|
LDA 4,S : TAY : LDA $0ED0,Y : BEQ .normal_behavior
|
||||||
PHA : LDA OverworldEventDataWRAM, X : ORA 1,S : STA OverworldEventDataWRAM, X
|
PHA
|
||||||
PLA : RTL
|
LDA OverworldEventDataWRAM, X : ORA 1,S : STA OverworldEventDataWRAM, X
|
||||||
|
PLA
|
||||||
|
RTL
|
||||||
|
|
||||||
.normal_behavior
|
.normal_behavior
|
||||||
LDA OverworldEventDataWRAM, X : ORA.b #$40 : STA OverworldEventDataWRAM, X
|
LDA OverworldEventDataWRAM, X : ORA.b #$40 : STA OverworldEventDataWRAM, X
|
||||||
@@ -272,7 +273,7 @@ LoadIndoorValue:
|
|||||||
%GetPossiblyEncryptedItem(HeartPiece_Graveyard_Warp, HeartPieceIndoorValues)
|
%GetPossiblyEncryptedItem(HeartPiece_Graveyard_Warp, HeartPieceIndoorValues)
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #288 : BNE +
|
+ CMP.w #288 : BNE +
|
||||||
LDA.l OWBonkPrizeTable[42].loot
|
LDA.l UWBonkPrizeData+3
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #294 : BNE +
|
+ CMP.w #294 : BNE +
|
||||||
%GetPossiblyEncryptedItem(HeartPiece_Mire_Warp, HeartPieceIndoorValues)
|
%GetPossiblyEncryptedItem(HeartPiece_Mire_Warp, HeartPieceIndoorValues)
|
||||||
@@ -368,36 +369,36 @@ LoadOutdoorValue:
|
|||||||
LDA.l OWBonkPrizeTable[$0F].loot
|
LDA.l OWBonkPrizeTable[$0F].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$1B : BNE +
|
+ CMP.w #$1B : BNE +
|
||||||
LDA.l OWBonkPrizeTable[$11].loot
|
LDA.l OWBonkPrizeTable[$10].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$1D : BNE +
|
+ CMP.w #$1D : BNE +
|
||||||
LDA.l OWBonkPrizeTable[$12].loot
|
LDA.l OWBonkPrizeTable[$11].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$1E : BNE +
|
+ CMP.w #$1E : BNE +
|
||||||
LDA.l OWBonkPrizeTable[$13].loot
|
LDA.l OWBonkPrizeTable[$12].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$28 : BNE +
|
+ CMP.w #$28 : BNE +
|
||||||
%GetPossiblyEncryptedItem(HeartPiece_Maze, HeartPieceOutdoorValues)
|
%GetPossiblyEncryptedItem(HeartPiece_Maze, HeartPieceOutdoorValues)
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$2A : BNE +
|
+ CMP.w #$2A : BNE +
|
||||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||||
LDA.l OWBonkPrizeTable[$14].loot
|
LDA.l OWBonkPrizeTable[$13].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
++ CMP.w #$0008 : BNE ++
|
++ CMP.w #$0008 : BNE ++
|
||||||
LDA.l OWBonkPrizeTable[$15].loot
|
LDA.l OWBonkPrizeTable[$14].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
++
|
++
|
||||||
%GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues)
|
%GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues)
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$2B : BNE +
|
+ CMP.w #$2B : BNE +
|
||||||
LDA.l OWBonkPrizeTable[$16].loot
|
LDA.l OWBonkPrizeTable[$15].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$2E : BNE +
|
+ CMP.w #$2E : BNE +
|
||||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||||
LDA.l OWBonkPrizeTable[$17].loot
|
LDA.l OWBonkPrizeTable[$16].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
++
|
++
|
||||||
LDA.l OWBonkPrizeTable[$18].loot
|
LDA.l OWBonkPrizeTable[$17].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$30 : BNE +
|
+ CMP.w #$30 : BNE +
|
||||||
LDA $22 : CMP.w #512 : !BGE ++
|
LDA $22 : CMP.w #512 : !BGE ++
|
||||||
@@ -408,10 +409,10 @@ LoadOutdoorValue:
|
|||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$32 : BNE +
|
+ CMP.w #$32 : BNE +
|
||||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||||
LDA.l OWBonkPrizeTable[$19].loot
|
LDA.l OWBonkPrizeTable[$18].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
++
|
++
|
||||||
LDA.l OWBonkPrizeTable[$1A].loot
|
LDA.l OWBonkPrizeTable[$19].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$35 : BNE +
|
+ CMP.w #$35 : BNE +
|
||||||
%GetPossiblyEncryptedItem(HeartPiece_Lake, HeartPieceOutdoorValues)
|
%GetPossiblyEncryptedItem(HeartPiece_Lake, HeartPieceOutdoorValues)
|
||||||
@@ -421,7 +422,7 @@ LoadOutdoorValue:
|
|||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$42 : BNE +
|
+ CMP.w #$42 : BNE +
|
||||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||||
LDA.l OWBonkPrizeTable[$1B].loot
|
LDA.l OWBonkPrizeTable[$1A].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
++
|
++
|
||||||
%GetPossiblyEncryptedItem(HeartPiece_Cliffside, HeartPieceOutdoorValues)
|
%GetPossiblyEncryptedItem(HeartPiece_Cliffside, HeartPieceOutdoorValues)
|
||||||
@@ -431,56 +432,56 @@ LoadOutdoorValue:
|
|||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$51 : BNE +
|
+ CMP.w #$51 : BNE +
|
||||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||||
LDA.l OWBonkPrizeTable[$1C].loot
|
LDA.l OWBonkPrizeTable[$1B].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
++
|
++
|
||||||
LDA.l OWBonkPrizeTable[$1D].loot
|
LDA.l OWBonkPrizeTable[$1C].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$54 : BNE +
|
+ CMP.w #$54 : BNE +
|
||||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||||
LDA.l OWBonkPrizeTable[$1E].loot
|
LDA.l OWBonkPrizeTable[$1D].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
++ CMP.w #$0008 : BNE ++
|
++ CMP.w #$0008 : BNE ++
|
||||||
LDA.l OWBonkPrizeTable[$1F].loot
|
LDA.l OWBonkPrizeTable[$1E].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
++
|
++
|
||||||
LDA.l OWBonkPrizeTable[$20].loot
|
LDA.l OWBonkPrizeTable[$1F].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$55 : BNE +
|
+ CMP.w #$55 : BNE +
|
||||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||||
LDA.l OWBonkPrizeTable[$21].loot
|
LDA.l OWBonkPrizeTable[$20].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
++
|
++
|
||||||
LDA.l OWBonkPrizeTable[$22].loot
|
LDA.l OWBonkPrizeTable[$21].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$56 : BNE +
|
+ CMP.w #$56 : BNE +
|
||||||
LDA.l OWBonkPrizeTable[$23].loot
|
LDA.l OWBonkPrizeTable[$22].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$5B : BNE +
|
+ CMP.w #$5B : BNE +
|
||||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||||
LDA.l OWBonkPrizeTable[$24].loot
|
LDA.l OWBonkPrizeTable[$23].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
++
|
++
|
||||||
%GetPossiblyEncryptedItem(HeartPiece_Pyramid, HeartPieceOutdoorValues)
|
%GetPossiblyEncryptedItem(HeartPiece_Pyramid, HeartPieceOutdoorValues)
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$5E : BNE +
|
+ CMP.w #$5E : BNE +
|
||||||
LDA.l OWBonkPrizeTable[$25].loot
|
LDA.l OWBonkPrizeTable[$24].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$68 : BNE +
|
+ CMP.w #$68 : BNE +
|
||||||
%GetPossiblyEncryptedItem(HeartPiece_Digging, HeartPieceOutdoorValues)
|
%GetPossiblyEncryptedItem(HeartPiece_Digging, HeartPieceOutdoorValues)
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$6E : BNE +
|
+ CMP.w #$6E : BNE +
|
||||||
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++
|
||||||
LDA.l OWBonkPrizeTable[$26].loot
|
LDA.l OWBonkPrizeTable[$25].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
++ CMP.w #$0008 : BNE ++
|
++ CMP.w #$0008 : BNE ++
|
||||||
LDA.l OWBonkPrizeTable[$27].loot
|
LDA.l OWBonkPrizeTable[$26].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
++
|
++
|
||||||
LDA.l OWBonkPrizeTable[$28].loot
|
LDA.l OWBonkPrizeTable[$27].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$74 : BNE +
|
+ CMP.w #$74 : BNE +
|
||||||
LDA.l OWBonkPrizeTable[$29].loot
|
LDA.l OWBonkPrizeTable[$28].loot
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CMP.w #$81 : BNE +
|
+ CMP.w #$81 : BNE +
|
||||||
%GetPossiblyEncryptedItem(HeartPiece_Zora, HeartPieceOutdoorValues)
|
%GetPossiblyEncryptedItem(HeartPiece_Zora, HeartPieceOutdoorValues)
|
||||||
|
|||||||
11
hooks.asm
11
hooks.asm
@@ -1964,6 +1964,9 @@ NOP #8
|
|||||||
org $028B8F ; <- 10B8F - Bank02.asm:2236 (LDA $7EF374 : LSR A)
|
org $028B8F ; <- 10B8F - Bank02.asm:2236 (LDA $7EF374 : LSR A)
|
||||||
JSL CheckHeraBossDefeated : NOP
|
JSL CheckHeraBossDefeated : NOP
|
||||||
;================================================================================
|
;================================================================================
|
||||||
|
org $028D6E
|
||||||
|
JSL FallingMusicFadeOut : BRA + : NOP #2 : +
|
||||||
|
;================================================================================
|
||||||
org $029090 ; <- 11090 - Bank02.asm:3099 (LDA $7EF374 : LSR A)
|
org $029090 ; <- 11090 - Bank02.asm:3099 (LDA $7EF374 : LSR A)
|
||||||
JSL CheckHeraBossDefeated : NOP
|
JSL CheckHeraBossDefeated : NOP
|
||||||
;================================================================================
|
;================================================================================
|
||||||
@@ -2136,6 +2139,9 @@ PHB : JSL.l DarkWorldSaveFix
|
|||||||
org $028046 ; <- 10046 - Bank02.asm : 217 (JSL EnableForceBlank) (Start of Module_LoadFile)
|
org $028046 ; <- 10046 - Bank02.asm : 217 (JSL EnableForceBlank) (Start of Module_LoadFile)
|
||||||
JSL.l OnFileLoad
|
JSL.l OnFileLoad
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
org $0280A2
|
||||||
|
JSL GetCurrentWorldForLoad
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
org $09F520 ; <- 4F520 - module_death.asm : 401 (LDA $7EF3C5 : CMP.b #$03 : BCS BRANCH_THETA)
|
org $09F520 ; <- 4F520 - module_death.asm : 401 (LDA $7EF3C5 : CMP.b #$03 : BCS BRANCH_THETA)
|
||||||
JSL.l OnPlayerDead
|
JSL.l OnPlayerDead
|
||||||
JSL.l IncrementDeathCounter
|
JSL.l IncrementDeathCounter
|
||||||
@@ -2434,7 +2440,6 @@ JML MirrorBonk
|
|||||||
MirrorBonk_NormalReturn:
|
MirrorBonk_NormalReturn:
|
||||||
org $07A9D1 ; <- 3A9D1 - Bank07.asm:6649 (BRANCH_GAMMA:)
|
org $07A9D1 ; <- 3A9D1 - Bank07.asm:6649 (BRANCH_GAMMA:)
|
||||||
MirrorBonk_BranchGamma:
|
MirrorBonk_BranchGamma:
|
||||||
JML OWMirrorSpriteBonk
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
|
|
||||||
;================================================================================
|
;================================================================================
|
||||||
@@ -3121,5 +3126,9 @@ org $02E297 ; LDA.w #$0002 : STA.b $2F
|
|||||||
JSL WalkUpOnOverworld
|
JSL WalkUpOnOverworld
|
||||||
NOP
|
NOP
|
||||||
|
|
||||||
|
org $02E36F
|
||||||
|
JSL CheckStairsAdjustment
|
||||||
|
NOP
|
||||||
|
|
||||||
org $02D7D2 ; BEQ .face_up
|
org $02D7D2 ; BEQ .face_up
|
||||||
NOP #2 ; this fixes Link's direction after mirroring and falling after entering through back of tavern
|
NOP #2 ; this fixes Link's direction after mirroring and falling after entering through back of tavern
|
||||||
|
|||||||
@@ -151,7 +151,9 @@ GanonTowerAnimation:
|
|||||||
STZ $011B
|
STZ $011B
|
||||||
STZ $011C
|
STZ $011C
|
||||||
STZ $011D
|
STZ $011D
|
||||||
LDA.b #$02 : STA $012C
|
PHX
|
||||||
|
JSL Overworld_DetermineMusic : STX !REG_MUSIC_CONTROL_REQUEST
|
||||||
|
PLX
|
||||||
LDA.b #$09 : STA $012D
|
LDA.b #$09 : STA $012D
|
||||||
RTL
|
RTL
|
||||||
.done
|
.done
|
||||||
|
|||||||
17
msu.asm
17
msu.asm
@@ -244,9 +244,10 @@ CheckMusicLoadRequest:
|
|||||||
CMP.b #16 : BEQ .castle
|
CMP.b #16 : BEQ .castle
|
||||||
CMP.b #17 : BEQ .dungeon
|
CMP.b #17 : BEQ .dungeon
|
||||||
CMP.b #22 : BEQ .dungeon
|
CMP.b #22 : BEQ .dungeon
|
||||||
CMP.b #21 : BNE .check_fallback
|
CMP.b #21 : BEQ .boss
|
||||||
|
JMP .check_fallback
|
||||||
|
|
||||||
;.boss
|
.boss
|
||||||
LDA $040C : LSR : !ADD.b #45
|
LDA $040C : LSR : !ADD.b #45
|
||||||
BRA .check_fallback-3
|
BRA .check_fallback-3
|
||||||
.no_change
|
.no_change
|
||||||
@@ -269,7 +270,7 @@ CheckMusicLoadRequest:
|
|||||||
LDA ProgressIndicator : CMP.b #03 : BNE .no_change ; aga1 killed
|
LDA ProgressIndicator : CMP.b #03 : BNE .no_change ; aga1 killed
|
||||||
BRA -
|
BRA -
|
||||||
.darkwoods
|
.darkwoods
|
||||||
LDA.b #15 : PHA
|
PHA
|
||||||
LDX $8A : LDA.l OWTileWorldAssoc,X : BEQ +
|
LDX $8A : LDA.l OWTileWorldAssoc,X : BEQ +
|
||||||
PLA : BRA .darkworld
|
PLA : BRA .darkworld
|
||||||
+ PLA : BRA .lightworld
|
+ PLA : BRA .lightworld
|
||||||
@@ -277,7 +278,13 @@ CheckMusicLoadRequest:
|
|||||||
LDA $040C
|
LDA $040C
|
||||||
CMP.b #$08 : BNE .check_fallback ; Hyrule Castle 2
|
CMP.b #$08 : BNE .check_fallback ; Hyrule Castle 2
|
||||||
.dungeon
|
.dungeon
|
||||||
LDA $040C : LSR : !ADD.b #33 : STA !REG_MUSIC_CONTROL_REQUEST
|
LDA $040C : CMP.b #$1A : BNE +
|
||||||
|
PHA : LDA.l DRMode : BEQ ++
|
||||||
|
LDA.w BigKeyField : AND.b #$04 : BEQ ++
|
||||||
|
; if door rando and entering GT with BK
|
||||||
|
PLA : LDA.b #59 : BRA .check_fallback-3
|
||||||
|
++ PLA
|
||||||
|
+ LSR : !ADD.b #33 : STA !REG_MUSIC_CONTROL_REQUEST
|
||||||
|
|
||||||
.check_fallback
|
.check_fallback
|
||||||
LDX !REG_MUSIC_CONTROL_REQUEST
|
LDX !REG_MUSIC_CONTROL_REQUEST
|
||||||
@@ -416,7 +423,7 @@ SpiralStairsPreCheck:
|
|||||||
SpiralStairsPostCheck:
|
SpiralStairsPostCheck:
|
||||||
LDA.l DRMode : BEQ + ; if door rando enabled
|
LDA.l DRMode : BEQ + ; if door rando enabled
|
||||||
LDA.b $A2 : CMP.w #$0007 : BNE .done
|
LDA.b $A2 : CMP.w #$0007 : BNE .done
|
||||||
LDX.b #$16 : STX !REG_MUSIC_CONTROL_REQUEST
|
LDA.l Music_Hera : TAX : STX !REG_MUSIC_CONTROL_REQUEST
|
||||||
BRA .done
|
BRA .done
|
||||||
+ LDA $A0
|
+ LDA $A0
|
||||||
CMP.w #$000C : BNE +
|
CMP.w #$000C : BNE +
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ Overworld_DetermineMusic:
|
|||||||
LDX.b #$05 ; lost woods theme
|
LDX.b #$05 ; lost woods theme
|
||||||
BRA .bunny
|
BRA .bunny
|
||||||
|
|
||||||
+ LDA $8A : CMP.b #$40 : BNE +
|
+ CMP.b #$40 : BNE .bunny
|
||||||
LDX #$0F ; dark woods theme
|
LDX #$0F ; dark woods theme
|
||||||
BRA .bunny
|
BRA .bunny
|
||||||
|
|
||||||
@@ -213,3 +213,10 @@ CheckHeraBossDefeated:
|
|||||||
LDA RoomDataWRAM[$07].high : AND.w #$00FF : BEQ +
|
LDA RoomDataWRAM[$07].high : AND.w #$00FF : BEQ +
|
||||||
SEC : RTL
|
SEC : RTL
|
||||||
+ CLC : RTL
|
+ CLC : RTL
|
||||||
|
|
||||||
|
FallingMusicFadeOut:
|
||||||
|
CMP.w #$0017 ; what we wrote over
|
||||||
|
BNE .return
|
||||||
|
LDA.w $0130 : AND.w #$00FF : CMP.w #$0015 ; if boss music is playing, then fade out
|
||||||
|
.return
|
||||||
|
RTL
|
||||||
|
|||||||
442
owrando.asm
442
owrando.asm
@@ -29,6 +29,9 @@ BCS OWDetectTransitionReturn
|
|||||||
org $02a999
|
org $02a999
|
||||||
jsl OWEdgeTransition : nop #4 ;LDA $02A4E3,X : ORA $7EF3CA
|
jsl OWEdgeTransition : nop #4 ;LDA $02A4E3,X : ORA $7EF3CA
|
||||||
|
|
||||||
|
org $02aa07
|
||||||
|
JSL OWMarkVisited : NOP
|
||||||
|
|
||||||
org $04e8ae
|
org $04e8ae
|
||||||
JSL OWDetectSpecialTransition
|
JSL OWDetectSpecialTransition
|
||||||
RTL : NOP
|
RTL : NOP
|
||||||
@@ -56,16 +59,17 @@ Link_ResetSwimmingState:
|
|||||||
|
|
||||||
|
|
||||||
; mirror hooks
|
; mirror hooks
|
||||||
org $02FBAB
|
org $0283DC ; override world check when spawning mirror portal sprite in Crossed OWR
|
||||||
JSL OWMirrorSpriteRestore : NOP
|
jsl.l OWLightWorldOrCrossed
|
||||||
org $05AF75
|
org $05AF75
|
||||||
Sprite_6C_MirrorPortal:
|
Sprite_6C_MirrorPortal:
|
||||||
jsl OWPreserveMirrorSprite : nop #2 ; LDA $7EF3CA : BNE $05AFDF
|
jsl OWMirrorSpriteDisable ; LDA $7EF3CA
|
||||||
|
org $05AF88
|
||||||
|
jsl OWMirrorSpriteSkipDraw : NOP ; LDA.w $0FC6 : CMP.b #$03
|
||||||
org $05AFDF
|
org $05AFDF
|
||||||
Sprite_6C_MirrorPortal_missing_mirror:
|
Sprite_6C_MirrorPortal_missing_mirror:
|
||||||
JML OWMirrorSpriteDelete : NOP ; STZ $0DD0,X : BRA $05AFF1
|
org $0ABFB6
|
||||||
org $0ABFBF
|
jsl OWMirrorSpriteOnMap : NOP ; LDA.w $008A : CMP.b #$40
|
||||||
JSL OWMirrorSpriteOnMap : BRA + : NOP #6 : +
|
|
||||||
|
|
||||||
; whirlpool shuffle cross world change
|
; whirlpool shuffle cross world change
|
||||||
org $02b3bd
|
org $02b3bd
|
||||||
@@ -100,10 +104,6 @@ jsl OWOldManSpeed
|
|||||||
;org $09c957 ; <- 4c957
|
;org $09c957 ; <- 4c957
|
||||||
;dw #$cb5f ; matches value on Central Bonk Rocks screen
|
;dw #$cb5f ; matches value on Central Bonk Rocks screen
|
||||||
|
|
||||||
; override world check when spawning mirror portal sprite in Crossed OWR
|
|
||||||
org $0283dc
|
|
||||||
jsl.l OWLightWorldOrCrossed
|
|
||||||
|
|
||||||
; override world check when viewing overworld (incl. title screen portion)
|
; override world check when viewing overworld (incl. title screen portion)
|
||||||
org $0aba6c ; < ? - Bank0a.asm:474 ()
|
org $0aba6c ; < ? - Bank0a.asm:474 ()
|
||||||
jsl.l OWMapWorldCheck16 : nop
|
jsl.l OWMapWorldCheck16 : nop
|
||||||
@@ -161,15 +161,22 @@ jsl.l OWWorldCheck16 : nop
|
|||||||
org $02b16e ; AND #$3F : ORA 7EF3CA
|
org $02b16e ; AND #$3F : ORA 7EF3CA
|
||||||
and #$7f : eor #$40 : nop #2
|
and #$7f : eor #$40 : nop #2
|
||||||
|
|
||||||
org $06AD4C
|
org $09C3C4
|
||||||
jsl.l OWBonkDrops : nop #4
|
jsl.l OWBonkDropPrepSprite : nop #2
|
||||||
org $1EDE6F
|
org $09C801
|
||||||
jsl.l OWBonkGoodBeeDrop : bra +
|
jsl.l OWBonkDropPrepSprite : nop #2
|
||||||
|
org $06D052
|
||||||
|
jsl.l OWBonkDropSparkle
|
||||||
|
org $06AD49
|
||||||
|
jsl.l OWBonkDropsOverworld : nop
|
||||||
|
org $1EDE6A
|
||||||
|
jsl.l OWBonkDropSparkle : BNE GoldBee_Dormant_exit
|
||||||
|
jsl.l OWBonkDropsUnderworld : bra +
|
||||||
GoldBee_SpawnSelf_SetProperties:
|
GoldBee_SpawnSelf_SetProperties:
|
||||||
phb : lda.b #$1E : pha : plb ; switch to bank 1E
|
phb : lda.b #$1E : pha : plb ; switch to bank 1E
|
||||||
jsr GoldBee_SpawnSelf+12
|
jsr GoldBee_SpawnSelf+12
|
||||||
plb : rtl
|
plb : rtl
|
||||||
nop #3
|
nop #2
|
||||||
+
|
+
|
||||||
|
|
||||||
;Code
|
;Code
|
||||||
@@ -257,66 +264,42 @@ OWDestroyItemSprites:
|
|||||||
DEX : BPL .nextSprite
|
DEX : BPL .nextSprite
|
||||||
PLX : RTL
|
PLX : RTL
|
||||||
}
|
}
|
||||||
|
|
||||||
OWMirrorSpriteOnMap:
|
OWMirrorSpriteOnMap:
|
||||||
{
|
{
|
||||||
lda.w $1ac0,x : bit.b #$f0 : beq .continue
|
JSL OWWorldCheck
|
||||||
lda.b #$00 : rtl
|
CMP.b #$40 ; part of what we wrote over
|
||||||
.continue
|
RTL
|
||||||
ora.w $1ab0,x
|
|
||||||
ora.w $1ad0,x
|
|
||||||
ora.w $1ae0,x
|
|
||||||
rtl
|
|
||||||
}
|
}
|
||||||
OWPreserveMirrorSprite:
|
OWMirrorSpriteDisable:
|
||||||
{
|
{
|
||||||
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .vanilla ; if OW Crossed, skip world check and continue
|
LDA.b $10 : CMP.b #$0F : BNE + ; avoid rare freeze during mirror superbunny
|
||||||
lda.b $10 : cmp.b #$0f : beq .vanilla ; if performing mirror superbunny
|
PLA : PLA : PLA : JML Sprite_6C_MirrorPortal_missing_mirror
|
||||||
rtl
|
+
|
||||||
|
|
||||||
|
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .vanilla
|
||||||
|
lda.l InvertedMode : beq +
|
||||||
|
lda.b #$40
|
||||||
|
+ rtl
|
||||||
|
|
||||||
.vanilla
|
.vanilla
|
||||||
lda.l InvertedMode : beq +
|
lda.l CurrentWorld ; what we wrote over
|
||||||
lda.l CurrentWorld : beq .deleteMirror
|
|
||||||
rtl
|
|
||||||
+ lda.l CurrentWorld : bne .deleteMirror
|
|
||||||
rtl
|
|
||||||
|
|
||||||
.deleteMirror
|
|
||||||
lda.b $10 : cmp.b #$0f : bne +
|
|
||||||
jsr.w OWMirrorSpriteMove ; if performing mirror superbunny
|
|
||||||
+ pla : pla : pla : jml Sprite_6C_MirrorPortal_missing_mirror
|
|
||||||
}
|
|
||||||
OWMirrorSpriteMove:
|
|
||||||
{
|
|
||||||
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq +
|
|
||||||
lda.w $1acf : ora.b #$40 : sta.w $1acf
|
|
||||||
+ rts
|
|
||||||
}
|
|
||||||
OWMirrorSpriteBonk:
|
|
||||||
{
|
|
||||||
jsr.w OWMirrorSpriteMove
|
|
||||||
lda.b #$2c : jml SetGameModeLikeMirror ; what we wrote over
|
|
||||||
}
|
|
||||||
OWMirrorSpriteDelete:
|
|
||||||
{
|
|
||||||
stz.w $0dd0,x ; what we wrote over
|
|
||||||
jsr.w OWMirrorSpriteMove
|
|
||||||
jml Sprite_6C_MirrorPortal_dont_do_warp
|
|
||||||
}
|
|
||||||
OWMirrorSpriteRestore:
|
|
||||||
{
|
|
||||||
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .return
|
|
||||||
lda.l InvertedMode : beq +
|
|
||||||
lda.l CurrentWorld : beq .return
|
|
||||||
bra .restorePortal
|
|
||||||
+ lda.l CurrentWorld : bne .return
|
|
||||||
|
|
||||||
.restorePortal
|
|
||||||
lda.w $1acf : and.b #$0f : sta.w $1acf
|
|
||||||
|
|
||||||
.return
|
|
||||||
rep #$30 : lda.w $04AC ; what we wrote over
|
|
||||||
rtl
|
rtl
|
||||||
}
|
}
|
||||||
|
OWMirrorSpriteSkipDraw:
|
||||||
|
{
|
||||||
|
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .vanilla
|
||||||
|
lda.l InvertedMode : beq +
|
||||||
|
lda.l CurrentWorld : eor.b #$40
|
||||||
|
bra ++
|
||||||
|
+ lda.l CurrentWorld : ++ beq .vanilla
|
||||||
|
stz.w $0D90,x ; disables collision
|
||||||
|
sec : rtl
|
||||||
|
|
||||||
|
.vanilla
|
||||||
|
LDA.w $0FC6 : CMP.b #$03 ; what we wrote over
|
||||||
|
RTL
|
||||||
|
}
|
||||||
OWLightWorldOrCrossed:
|
OWLightWorldOrCrossed:
|
||||||
{
|
{
|
||||||
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq ++
|
lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq ++
|
||||||
@@ -367,6 +350,16 @@ OWOldManSpeed:
|
|||||||
lda #$0c : sta $5e ; what we wrote over
|
lda #$0c : sta $5e ; what we wrote over
|
||||||
rtl
|
rtl
|
||||||
}
|
}
|
||||||
|
OWMarkVisited:
|
||||||
|
{
|
||||||
|
LDX.b $8A : STZ.w $0412 ; what we wrote over
|
||||||
|
LDA.b $10 : CMP.b #$14 : BCS .return
|
||||||
|
LDA.l OverworldEventDataWRAM,X
|
||||||
|
ORA.b #$80 : STA.l OverworldEventDataWRAM,X
|
||||||
|
|
||||||
|
.return
|
||||||
|
RTL
|
||||||
|
}
|
||||||
|
|
||||||
LoadMapDarkOrMixed:
|
LoadMapDarkOrMixed:
|
||||||
{
|
{
|
||||||
@@ -422,7 +415,66 @@ LoadMapDarkOrMixed:
|
|||||||
dw $0400+$0210 ; bottom right
|
dw $0400+$0210 ; bottom right
|
||||||
}
|
}
|
||||||
|
|
||||||
OWBonkGoodBeeDrop:
|
OWBonkDropPrepSprite:
|
||||||
|
{
|
||||||
|
LDA.b $1B : BEQ +
|
||||||
|
LDA.w $0FB5 ; what we wrote over
|
||||||
|
PHA
|
||||||
|
BRA .continue
|
||||||
|
+
|
||||||
|
STZ.w $0F20,X : STZ.w $0E30,X ; what we wrote over
|
||||||
|
PHA
|
||||||
|
|
||||||
|
.continue
|
||||||
|
LDA.l OWFlags+1 : AND.b #!FLAG_OW_BONKDROP : BEQ .return
|
||||||
|
+ LDA.w $0E20,X : CMP.b #$D9 : BNE +
|
||||||
|
LDA.b #$03 : STA.w $0F20,X
|
||||||
|
BRA .prep
|
||||||
|
+ CMP.b #$B2 : BEQ .prep
|
||||||
|
PLA : RTL
|
||||||
|
|
||||||
|
.prep
|
||||||
|
STZ.w !SPRITE_REDRAW,X
|
||||||
|
PHB : PHK : PLB : PHY
|
||||||
|
TXY : JSR OWBonkDropLookup : BCC .done
|
||||||
|
; found match ; X = rec + 1
|
||||||
|
INX : LDA.w OWBonkPrizeData,X : PHA
|
||||||
|
JSR OWBonkDropCollected : PLA : BCC .done
|
||||||
|
TYX : LDA.b #$01 : STA.w !SPRITE_REDRAW,X
|
||||||
|
.done
|
||||||
|
TYX : PLY : PLB
|
||||||
|
|
||||||
|
.return
|
||||||
|
PLA : RTL
|
||||||
|
}
|
||||||
|
|
||||||
|
OWBonkDropSparkle:
|
||||||
|
{
|
||||||
|
LDA.l OWFlags+1 : AND.b #!FLAG_OW_BONKDROP : BEQ .nosparkle
|
||||||
|
LDA.w $0E90,X : BEQ .nosparkle
|
||||||
|
LDA.w !SPRITE_REDRAW,X : BNE .nosparkle
|
||||||
|
JSL Sprite_SpawnSparkleGarnish
|
||||||
|
; move sparkle down 1 tile
|
||||||
|
PHX : TYX : PLY
|
||||||
|
LDA.l $7FF81E,X : CLC : ADC.b #$10 : STA.l $7FF81E,X
|
||||||
|
LDA.l $7FF85A,X : ADC.b #$00 : STA.l $7FF85A,X
|
||||||
|
PHY : TXY : PLX
|
||||||
|
|
||||||
|
.nosparkle
|
||||||
|
LDA $0E20,X : CMP.b #$D9 : BEQ .greenrupee
|
||||||
|
CMP.b #$B2 : BEQ .goodbee
|
||||||
|
RTL
|
||||||
|
|
||||||
|
.goodbee
|
||||||
|
LDA $0E90,X ; what we wrote over
|
||||||
|
RTL
|
||||||
|
|
||||||
|
.greenrupee
|
||||||
|
JSL Sprite_DrawRippleIfInWater ; what we wrote over
|
||||||
|
RTL
|
||||||
|
}
|
||||||
|
|
||||||
|
OWBonkDropsUnderworld:
|
||||||
{
|
{
|
||||||
LDA.l OWFlags+1 : AND.b #!FLAG_OW_BONKDROP : BNE .shuffled
|
LDA.l OWFlags+1 : AND.b #!FLAG_OW_BONKDROP : BNE .shuffled
|
||||||
.vanilla ; what we wrote over
|
.vanilla ; what we wrote over
|
||||||
@@ -430,20 +482,63 @@ OWBonkGoodBeeDrop:
|
|||||||
LDA.l BottleContentsOne : ORA.l BottleContentsTwo
|
LDA.l BottleContentsOne : ORA.l BottleContentsTwo
|
||||||
ORA.l BottleContentsThree : ORA.l BottleContentsFour
|
ORA.l BottleContentsThree : ORA.l BottleContentsFour
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
.shuffled
|
.shuffled
|
||||||
LDA.w $0DD0,X : BNE +
|
LDA.w $0DD0,X : BNE +
|
||||||
JMP .return+1
|
BRA .return+1
|
||||||
+ PHY : TXY
|
+ PHY : TXY
|
||||||
LDA.l RoomDataWRAM[$0120].high : AND.b #$02 : PHA : BNE + ; check if collected
|
JSL OWBonkDrops
|
||||||
LDA.b #$1B : STA $12F ; JSL Sound_SetSfx3PanLong ; seems that when you bonk, there is a pending bonk sfx, so we clear that out and replace with reveal secret sfx
|
|
||||||
+
|
|
||||||
LDA.l OWBonkPrizeTable[42].mw_player : BEQ + ; multiworld item
|
|
||||||
LDA.l OWBonkPrizeTable[42].loot
|
|
||||||
JMP .spawn_item
|
|
||||||
+
|
|
||||||
|
|
||||||
.determine_type ; S = Collected
|
.return
|
||||||
LDA.l OWBonkPrizeTable[42].loot ; A = item id
|
PLY
|
||||||
|
LDA #$08 ; makes original good bee not spawn
|
||||||
|
RTL
|
||||||
|
}
|
||||||
|
|
||||||
|
OWBonkDropsOverworld:
|
||||||
|
{
|
||||||
|
LDA.l OWFlags+1 : AND.b #!FLAG_OW_BONKDROP : BNE .shuffled
|
||||||
|
BRA .vanilla
|
||||||
|
|
||||||
|
.shuffled
|
||||||
|
LDA.w $0DD0,Y : BNE +
|
||||||
|
BRA .vanilla
|
||||||
|
+ LDA.w $0E20,Y : CMP.b #$D9 : BEQ +
|
||||||
|
BRA .vanilla+3
|
||||||
|
+
|
||||||
|
LDA.b #$00 : STA.w $0F20,Y ; restore proper layer
|
||||||
|
JSL OWBonkDrops
|
||||||
|
|
||||||
|
.vanilla
|
||||||
|
LDA.w $0E20,Y : CMP.b #$D8 ; what we wrote over
|
||||||
|
RTL
|
||||||
|
}
|
||||||
|
|
||||||
|
OWBonkDrops:
|
||||||
|
{
|
||||||
|
PHB : PHK : PLB
|
||||||
|
LDA.b $1B : BEQ +
|
||||||
|
LDX.b #((UWBonkPrizeData-OWBonkPrizeData)+1)
|
||||||
|
BRA .found_match
|
||||||
|
+
|
||||||
|
JSR OWBonkDropLookup : BCS .found_match
|
||||||
|
JMP .return+2
|
||||||
|
|
||||||
|
.found_match
|
||||||
|
INX : LDA.w OWBonkPrizeData,X : PHX : PHA ; S = FlagBitmask, X (row + 2)
|
||||||
|
JSR OWBonkDropCollected : PHA : BCS .load_item_and_mw ; S = Collected, FlagBitmask, X (row + 2)
|
||||||
|
LDA.b #$1B : STA $12F ; JSL Sound_SetSfx3PanLong ; seems that when you bonk, there is a pending bonk sfx, so we clear that out and replace with reveal secret sfx
|
||||||
|
; JSLSpriteSFX_QueueSFX3WithPan
|
||||||
|
|
||||||
|
.load_item_and_mw
|
||||||
|
LDA 3,S : TAX : INX : LDA.w OWBonkPrizeData,X
|
||||||
|
PHA : INX : LDA.w OWBonkPrizeData,X : BEQ +
|
||||||
|
; multiworld item
|
||||||
|
DEX : PLA ; A = item id; X = row + 3
|
||||||
|
JMP .spawn_item
|
||||||
|
+ DEX : PLA ; A = item id; X = row + 3
|
||||||
|
|
||||||
|
.determine_type ; A = item id; X = row + 3; S = Collected, FlagBitmask, X (row + 2)
|
||||||
CMP.b #$B0 : BNE +
|
CMP.b #$B0 : BNE +
|
||||||
LDA.b #$79 : JMP .sprite_transform ; transform to bees
|
LDA.b #$79 : JMP .sprite_transform ; transform to bees
|
||||||
+ CMP.b #$42 : BNE +
|
+ CMP.b #$42 : BNE +
|
||||||
@@ -475,140 +570,12 @@ OWBonkGoodBeeDrop:
|
|||||||
LDA.b #$AC : BRA .sprite_transform ; transform to apples
|
LDA.b #$AC : BRA .sprite_transform ; transform to apples
|
||||||
+ CMP.b #$B2 : BNE +
|
+ CMP.b #$B2 : BNE +
|
||||||
LDA.b #$E3 : BRA .sprite_transform ; transform to fairy
|
LDA.b #$E3 : BRA .sprite_transform ; transform to fairy
|
||||||
+ CMP.b #$B3 : BNE .spawn_item
|
|
||||||
INX : INX : LDA.l OWBonkPrizeTable[42].vert_offset
|
|
||||||
CLC : ADC.b #$08 : PHA
|
|
||||||
LDA.w $0D00,Y : SEC : SBC.b 1,S : STA.w $0D00,Y
|
|
||||||
LDA.w $0D20,Y : SBC.b #$00 : STA.w $0D20,Y : PLX
|
|
||||||
LDA.b #$0B : SEC ; BRA .sprite_transform ; transform to chicken
|
|
||||||
|
|
||||||
.sprite_transform
|
|
||||||
JSL.l OWBonkSpritePrep
|
|
||||||
|
|
||||||
.mark_collected ; S = Collected
|
|
||||||
PLA : BNE +
|
|
||||||
LDA.l RoomDataWRAM[$0120].high : ORA.b #$02 : STA.l RoomDataWRAM[$0120].high
|
|
||||||
|
|
||||||
REP #$20
|
|
||||||
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter
|
|
||||||
SEP #$20
|
|
||||||
+ BRA .return
|
|
||||||
|
|
||||||
; spawn itemget item
|
|
||||||
.spawn_item ; A = item id ; Y = bonk sprite slot ; S = Collected
|
|
||||||
PLX : BEQ + : LDA.b #$00 : STA.w $0DD0,Y : BRA .return
|
|
||||||
+ PHA
|
|
||||||
|
|
||||||
LDA.b #$01 : STA !FORCE_HEART_SPAWN
|
|
||||||
|
|
||||||
LDA.b #$EB : STA.l $7FFE00
|
|
||||||
JSL Sprite_SpawnDynamically+15 ; +15 to skip finding a new slot, use existing sprite
|
|
||||||
|
|
||||||
LDA.b #$01 : STA.w !SPRITE_REDRAW,Y
|
|
||||||
|
|
||||||
PLA : STA.w $0E80,Y
|
|
||||||
|
|
||||||
; affects the rate the item moves in the Y/X direction
|
|
||||||
LDA.b #$00 : STA.w $0D40,Y
|
|
||||||
LDA.b #$0A : STA.w $0D50,Y
|
|
||||||
|
|
||||||
LDA.b #$1A : STA.w $0F80,Y ; amount of force (gives height to the arch)
|
|
||||||
LDA.b #$FF : STA.w $0B58,Y ; stun timer
|
|
||||||
LDA.b #$30 : STA.w $0F10,Y ; aux delay timer 4 ?? dunno what that means
|
|
||||||
|
|
||||||
LDA.b #$00 : STA.w $0F20,Y ; layer the sprite is on
|
|
||||||
|
|
||||||
; sets the tile type that is underneath the sprite, water
|
|
||||||
TYX : LDA.b #$09 : STA.l $7FF9C2,X ; TODO: Figure out how to get the game to set this
|
|
||||||
|
|
||||||
; sets OW event bitmask flag, uses free RAM
|
|
||||||
LDA.l OWBonkPrizeTable[42].flag : STA.w $0ED0,Y
|
|
||||||
|
|
||||||
; determines the initial spawn point of item
|
|
||||||
LDA.w $0D00,Y : SEC : SBC.l OWBonkPrizeTable[42].vert_offset : STA.w $0D00,Y
|
|
||||||
LDA.w $0D20,Y : SBC #$00 : STA.w $0D20,Y
|
|
||||||
|
|
||||||
.return
|
|
||||||
PLY
|
|
||||||
LDA #$08 ; makes original good bee not spawn
|
|
||||||
RTL
|
|
||||||
}
|
|
||||||
|
|
||||||
; Y = sprite slot index of bonk sprite
|
|
||||||
OWBonkDrops:
|
|
||||||
{
|
|
||||||
CMP.b #$D8 : BEQ +
|
|
||||||
RTL
|
|
||||||
+ LDA.l OWFlags+1 : AND.b #!FLAG_OW_BONKDROP : BNE +
|
|
||||||
JSL.l Sprite_TransmuteToBomb : RTL
|
|
||||||
+ LDA.w $0DD0,Y : BNE +
|
|
||||||
RTL
|
|
||||||
+
|
|
||||||
|
|
||||||
; loop thru rando bonk table to find match
|
|
||||||
PHB : PHK : PLB
|
|
||||||
LDA.b $8A
|
|
||||||
LDX.b #(41*6) ; 41 bonk items, 6 bytes each
|
|
||||||
- CMP.w OWBonkPrizeData,X : BNE +
|
|
||||||
INX
|
|
||||||
LDA.w $0D10,Y : LSR A : LSR A : LSR A : LSR A
|
|
||||||
EOR.w $0D00,Y : CMP.w OWBonkPrizeData,X : BNE ++ ; X = row + 1
|
|
||||||
BRA .found_match
|
|
||||||
++ DEX : LDA.b $8A
|
|
||||||
+ CPX.b #$00 : BNE +
|
|
||||||
PLB : RTL
|
|
||||||
+ DEX : DEX : DEX : DEX : DEX : DEX : BRA -
|
|
||||||
|
|
||||||
.found_match
|
|
||||||
INX : LDA.w OWBonkPrizeData,X : PHX : PHA ; S = FlagBitmask, X (row + 2)
|
|
||||||
LDX.b $8A : LDA.l OverworldEventDataWRAM,X : AND 1,S : PHA : BNE + ; S = Collected, FlagBitmask, X (row + 2)
|
|
||||||
LDA.b #$1B : STA $12F ; JSL Sound_SetSfx3PanLong ; seems that when you bonk, there is a pending bonk sfx, so we clear that out and replace with reveal secret sfx
|
|
||||||
+
|
|
||||||
LDA 3,S : TAX : INX : LDA.w OWBonkPrizeData,X
|
|
||||||
PHA : INX : LDA.w OWBonkPrizeData,X : BEQ +
|
|
||||||
; multiworld item
|
|
||||||
DEX : PLA ; X = row + 3
|
|
||||||
JMP .spawn_item
|
|
||||||
+ DEX : PLA ; X = row + 3
|
|
||||||
|
|
||||||
.determine_type ; A = item id ; S = Collected, FlagBitmask, X (row + 2)
|
|
||||||
CMP.b #$B0 : BNE +
|
|
||||||
LDA.b #$79 : JMP .sprite_transform ; transform to bees
|
|
||||||
+ CMP.b #$42 : BNE +
|
|
||||||
JSL.l Sprite_TransmuteToBomb ; transform a heart to bomb, vanilla behavior
|
|
||||||
JMP .mark_collected
|
|
||||||
+ CMP.b #$34 : BNE +
|
|
||||||
LDA.b #$D9 : CLC : JMP .sprite_transform ; transform to single rupee
|
|
||||||
+ CMP.b #$35 : BNE +
|
|
||||||
LDA.b #$DA : CLC : JMP .sprite_transform ; transform to blue rupee
|
|
||||||
+ CMP.b #$36 : BNE +
|
|
||||||
LDA.b #$DB : CLC : BRA .sprite_transform ; transform to red rupee
|
|
||||||
+ CMP.b #$27 : BNE +
|
|
||||||
LDA.b #$DC : CLC : BRA .sprite_transform ; transform to 1 bomb
|
|
||||||
+ CMP.b #$28 : BNE +
|
|
||||||
LDA.b #$DD : CLC : BRA .sprite_transform ; transform to 4 bombs
|
|
||||||
+ CMP.b #$31 : BNE +
|
|
||||||
LDA.b #$DE : CLC : BRA .sprite_transform ; transform to 8 bombs
|
|
||||||
+ CMP.b #$45 : BNE +
|
|
||||||
LDA.b #$DF : CLC : BRA .sprite_transform ; transform to small magic
|
|
||||||
+ CMP.b #$B4 : BNE +
|
|
||||||
LDA.b #$E0 : CLC : BRA .sprite_transform ; transform to big magic
|
|
||||||
+ CMP.b #$B5 : BNE +
|
|
||||||
LDA.b #$79 : JSL.l OWBonkSpritePrep
|
|
||||||
JSL.l GoldBee_SpawnSelf_SetProperties ; transform to good bee
|
|
||||||
BRA .mark_collected
|
|
||||||
+ CMP.b #$44 : BNE +
|
|
||||||
LDA.b #$E2 : CLC : BRA .sprite_transform ; transform to 10 arrows
|
|
||||||
+ CMP.b #$B1 : BNE +
|
|
||||||
LDA.b #$AC : BRA .sprite_transform ; transform to apples
|
|
||||||
+ CMP.b #$B2 : BNE +
|
|
||||||
LDA.b #$E3 : BRA .sprite_transform ; transform to fairy
|
|
||||||
+ CMP.b #$B3 : BNE .spawn_item
|
+ CMP.b #$B3 : BNE .spawn_item
|
||||||
INX : INX : LDA.w OWBonkPrizeData,X ; X = row + 5
|
INX : INX : LDA.w OWBonkPrizeData,X ; X = row + 5
|
||||||
CLC : ADC.b #$08 : PHA
|
CLC : ADC.b #$08 : PHA
|
||||||
LDA.w $0D00,Y : SEC : SBC.b 1,S : STA.w $0D00,Y
|
LDA.w $0D00,Y : SEC : SBC.b 1,S : STA.w $0D00,Y
|
||||||
LDA.w $0D20,Y : SBC.b #$00 : STA.w $0D20,Y : PLX
|
LDA.w $0D20,Y : SBC.b #$00 : STA.w $0D20,Y : PLX
|
||||||
LDA.b #$0B : SEC ; BRA .sprite_transform ; transform to chicken
|
LDA.b #$0B ; BRA .sprite_transform ; transform to chicken
|
||||||
|
|
||||||
.sprite_transform
|
.sprite_transform
|
||||||
JSL.l OWBonkSpritePrep
|
JSL.l OWBonkSpritePrep
|
||||||
@@ -616,16 +583,22 @@ OWBonkDrops:
|
|||||||
.mark_collected ; S = Collected, FlagBitmask, X (row + 2)
|
.mark_collected ; S = Collected, FlagBitmask, X (row + 2)
|
||||||
PLA : BNE + ; S = FlagBitmask, X (row + 2)
|
PLA : BNE + ; S = FlagBitmask, X (row + 2)
|
||||||
TYX : JSL Sprite_IsOnscreen : BCC +
|
TYX : JSL Sprite_IsOnscreen : BCC +
|
||||||
|
LDA.b $1B : BEQ ++
|
||||||
|
LDA.l RoomDataWRAM[$0120].high : ORA 1,S : STA.l RoomDataWRAM[$0120].high
|
||||||
|
LDA.w $0400 : ORA 1,S : STA.w $0400
|
||||||
|
BRA .increment_collection
|
||||||
|
++
|
||||||
LDX.b $8A : LDA.l OverworldEventDataWRAM,X : ORA 1,S : STA.l OverworldEventDataWRAM,X
|
LDX.b $8A : LDA.l OverworldEventDataWRAM,X : ORA 1,S : STA.l OverworldEventDataWRAM,X
|
||||||
|
|
||||||
|
.increment_collection
|
||||||
REP #$20
|
REP #$20
|
||||||
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter
|
LDA.l TotalItemCounter : INC : STA.l TotalItemCounter
|
||||||
SEP #$20
|
SEP #$20
|
||||||
+ JMP .return
|
+ BRA .return
|
||||||
|
|
||||||
; spawn itemget item
|
; spawn itemget item
|
||||||
.spawn_item ; A = item id ; Y = tree sprite slot ; S = Collected, FlagBitmask, X (row + 2)
|
.spawn_item ; A = item id ; Y = bonk sprite slot ; S = Collected, FlagBitmask, X (row + 2)
|
||||||
PLX : BEQ + : LDA.b #$00 : STA.w $0DD0,Y : JMP .return ; S = FlagBitmask, X (row + 2)
|
PLX : BEQ + : LDA.b #$00 : STA.w $0DD0,Y : BRA .return ; S = FlagBitmask, X (row + 2)
|
||||||
+ PHA
|
+ PHA
|
||||||
|
|
||||||
LDA.b #$01 : STA !FORCE_HEART_SPAWN
|
LDA.b #$01 : STA !FORCE_HEART_SPAWN
|
||||||
@@ -647,7 +620,12 @@ OWBonkDrops:
|
|||||||
|
|
||||||
LDA.b #$00 : STA.w $0F20,Y ; layer the sprite is on
|
LDA.b #$00 : STA.w $0F20,Y ; layer the sprite is on
|
||||||
|
|
||||||
; sets OW event bitmask flag, uses free RAM
|
LDA.b $1B : BEQ +
|
||||||
|
; sets the tile type that is underneath the sprite, water
|
||||||
|
TYX : LDA.b #$09 : STA.l $7FF9C2,X ; TODO: Figure out how to get the game to set this
|
||||||
|
+
|
||||||
|
|
||||||
|
; sets bitmask flag, uses free RAM
|
||||||
PLA : STA.w $0ED0,Y ; S = X (row + 2)
|
PLA : STA.w $0ED0,Y ; S = X (row + 2)
|
||||||
|
|
||||||
; determines the initial spawn point of item
|
; determines the initial spawn point of item
|
||||||
@@ -655,10 +633,44 @@ OWBonkDrops:
|
|||||||
LDA.w $0D00,Y : SEC : SBC.w OWBonkPrizeData,X : STA.w $0D00,Y
|
LDA.w $0D00,Y : SEC : SBC.w OWBonkPrizeData,X : STA.w $0D00,Y
|
||||||
LDA.w $0D20,Y : SBC #$00 : STA.w $0D20,Y
|
LDA.w $0D20,Y : SBC #$00 : STA.w $0D20,Y
|
||||||
|
|
||||||
PLB : RTL
|
BRA .return+2
|
||||||
|
|
||||||
.return
|
.return
|
||||||
PLA : PLA : PLB : RTL
|
PLA : PLA : PLB
|
||||||
|
RTL
|
||||||
|
}
|
||||||
|
|
||||||
|
; Y = sprite slot; returns X = row + 1
|
||||||
|
OWBonkDropLookup:
|
||||||
|
{
|
||||||
|
; loop thru rando bonk table to find match
|
||||||
|
LDA.b $8A
|
||||||
|
LDX.b #((UWBonkPrizeData-OWBonkPrizeData)-sizeof(OWBonkPrizeTable)) ; 41 bonk items, 6 bytes each
|
||||||
|
- CMP.w OWBonkPrizeData,X : BNE +
|
||||||
|
INX
|
||||||
|
LDA.w $0D10,Y : LSR A : LSR A : LSR A : LSR A
|
||||||
|
EOR.w $0D00,Y : CMP.w OWBonkPrizeData,X : BNE ++ ; X = row + 1
|
||||||
|
SEC : RTS
|
||||||
|
++ DEX : LDA.b $8A
|
||||||
|
+ CPX.b #$00 : BNE +
|
||||||
|
CLC : RTS
|
||||||
|
+ DEX : DEX : DEX : DEX : DEX : DEX : BRA -
|
||||||
|
}
|
||||||
|
|
||||||
|
; S = FlagBitmask ; returns SEC if collected
|
||||||
|
OWBonkDropCollected:
|
||||||
|
{
|
||||||
|
; check if collected
|
||||||
|
CLC
|
||||||
|
LDA.b $1B : BEQ +
|
||||||
|
LDA.l RoomDataWRAM[$0120].high : AND.b 3,S : BEQ .return ; S = Collected, FlagBitmask, X (row + 2)
|
||||||
|
SEC : RTS
|
||||||
|
+
|
||||||
|
LDX.b $8A : LDA.l OverworldEventDataWRAM,X : AND 3,S : BEQ .return ; S = Collected, FlagBitmask, X (row + 2)
|
||||||
|
SEC : RTS
|
||||||
|
|
||||||
|
.return
|
||||||
|
RTS
|
||||||
}
|
}
|
||||||
|
|
||||||
; A = SpriteID, Y = Sprite Slot Index, X = free/overwritten
|
; A = SpriteID, Y = Sprite Slot Index, X = free/overwritten
|
||||||
@@ -1731,7 +1743,7 @@ db $18, $a8, $10, $b2, $00, $20
|
|||||||
db $18, $36, $08, $35, $00, $20
|
db $18, $36, $08, $35, $00, $20
|
||||||
db $1a, $8a, $10, $42, $00, $20
|
db $1a, $8a, $10, $42, $00, $20
|
||||||
db $1a, $1d, $08, $b2, $00, $20
|
db $1a, $1d, $08, $b2, $00, $20
|
||||||
db $ff, $77, $04, $35, $00, $20 ; pre aga ONLY ; hijacked murahdahla bonk tree
|
;db $1a, $77, $04, $35, $00, $20 ; pre aga ONLY ; hijacked murahdahla bonk tree
|
||||||
db $1b, $46, $10, $b1, $00, $10
|
db $1b, $46, $10, $b1, $00, $10
|
||||||
db $1d, $6b, $10, $b1, $00, $20
|
db $1d, $6b, $10, $b1, $00, $20
|
||||||
db $1e, $72, $10, $b2, $00, $20
|
db $1e, $72, $10, $b2, $00, $20
|
||||||
@@ -1742,6 +1754,7 @@ db $2e, $9c, $10, $b2, $00, $20
|
|||||||
db $2e, $b4, $08, $b0, $00, $20
|
db $2e, $b4, $08, $b0, $00, $20
|
||||||
db $32, $29, $10, $42, $00, $20
|
db $32, $29, $10, $42, $00, $20
|
||||||
db $32, $9a, $08, $b2, $00, $20
|
db $32, $9a, $08, $b2, $00, $20
|
||||||
|
;db $34, $xx, $10, $xx, $00, $1c ; pre aga ONLY
|
||||||
db $42, $66, $10, $b2, $00, $20
|
db $42, $66, $10, $b2, $00, $20
|
||||||
db $51, $08, $10, $b2, $00, $04
|
db $51, $08, $10, $b2, $00, $04
|
||||||
db $51, $09, $08, $b2, $00, $04
|
db $51, $09, $08, $b2, $00, $04
|
||||||
@@ -1757,6 +1770,7 @@ db $6e, $8c, $10, $35, $00, $10
|
|||||||
db $6e, $90, $08, $b0, $00, $10
|
db $6e, $90, $08, $b0, $00, $10
|
||||||
db $6e, $a4, $04, $b1, $00, $10
|
db $6e, $a4, $04, $b1, $00, $10
|
||||||
db $74, $4e, $10, $b1, $00, $1c
|
db $74, $4e, $10, $b1, $00, $1c
|
||||||
|
UWBonkPrizeData:
|
||||||
db $ff, $00, $02, $b5, $00, $08
|
db $ff, $00, $02, $b5, $00, $08
|
||||||
|
|
||||||
; temporary fix - murahdahla replaces one of the bonk tree prizes
|
; temporary fix - murahdahla replaces one of the bonk tree prizes
|
||||||
|
|||||||
Reference in New Issue
Block a user