From 8d0585ec338cbc176e5a1cd2f182692d81c8bc41 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Fri, 12 May 2023 20:37:33 -0500 Subject: [PATCH 01/19] Fixed Hera boss music playing after boss defeated # Conflicts: # music.asm --- hooks.asm | 2 +- music.asm | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hooks.asm b/hooks.asm index d8c268c..9e1c1e1 100755 --- a/hooks.asm +++ b/hooks.asm @@ -2318,7 +2318,7 @@ JSL.l DrawHeartPieceGFX org $05F08A ; <- 2F08A - sprite_heart_upgrades.asm : 324 - (LDA $7EF36B : INC A : AND.b #$03 : STA $7EF36B : BNE .got_4_piecese) item determination JSL.l HeartPieceGet BCS $18 ; reinsert the near branch that appears midway through what we overrode -NOP #22 +BRA + : NOP #20 : + ;-------------------------------------------------------------------------------- org $06C0B0 ; <- 340B0 - sprite prep JSL.l HeartPieceSpritePrep diff --git a/music.asm b/music.asm index 68848b5..dcdd9df 100644 --- a/music.asm +++ b/music.asm @@ -306,6 +306,6 @@ Underworld_DoorDown_Entry: ;-------------------------------------------------------------------------------- ; Check if the boss in ToH has been defeated (16-bit accumulator) CheckHeraBossDefeated: - LDA RoomDataWRAM[$08].high : AND #$00FF - RTL -;-------------------------------------------------------------------------------- +LDA RoomDataWRAM[$07].high : AND.w #$00FF : BEQ + + SEC : RTL ++ CLC : RTL From 6980d36d27eff8dae2eac1fdb856573a36e94e22 Mon Sep 17 00:00:00 2001 From: Catobat <69204835+Catobat@users.noreply.github.com> Date: Sat, 26 Aug 2023 00:52:13 +0200 Subject: [PATCH 02/19] Fix issue with rooms $0124-$0127 at Tavern Back --- doorframefixes.asm | 15 ++++++++++++++- hooks.asm | 4 ++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/doorframefixes.asm b/doorframefixes.asm index c233c26..a5ecb3d 100644 --- a/doorframefixes.asm +++ b/doorframefixes.asm @@ -74,4 +74,17 @@ WalkUpOnOverworld: RTL .normal LDA #$0002 : STA $2F ; what we overwrote -RTL \ No newline at end of file +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 \ No newline at end of file diff --git a/hooks.asm b/hooks.asm index 9e1c1e1..7291a0a 100755 --- a/hooks.asm +++ b/hooks.asm @@ -2923,5 +2923,9 @@ org $02E297 ; LDA.w #$0002 : STA.b $2F JSL WalkUpOnOverworld NOP +org $02E36F +JSL CheckStairsAdjustment +NOP + org $02D7D2 ; BEQ .face_up NOP #2 ; this fixes Link's direction after mirroring and falling after entering through back of tavern \ No newline at end of file From 8e9b4c234bd0b27f7cc6ce33527520fb81890322 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 27 Sep 2023 16:09:45 -0500 Subject: [PATCH 03/19] Fix Old Man death putting you on Pyramid --- darkworldspawn.asm | 9 +++++++++ doorrando/dr_lobby.asm | 3 +++ hooks.asm | 3 +++ 3 files changed, 15 insertions(+) diff --git a/darkworldspawn.asm b/darkworldspawn.asm index bef527f..0316a21 100644 --- a/darkworldspawn.asm +++ b/darkworldspawn.asm @@ -110,6 +110,15 @@ FakeWorldFix: + RTL ;-------------------------------------------------------------------------------- +GetCurrentWorldForLoad: +LDA FollowerIndicator : CMP #$04 : BNE .default + LDA InvertedMode : BEQ + + LDA #$40 + + RTL +.default +LDA CurrentWorld +RTL +;-------------------------------------------------------------------------------- MasterSwordFollowerClear: LDA FollowerIndicator CMP #$0E : BNE .exit ; clear master sword follower diff --git a/doorrando/dr_lobby.asm b/doorrando/dr_lobby.asm index 7da3756..69411e1 100644 --- a/doorrando/dr_lobby.asm +++ b/doorrando/dr_lobby.asm @@ -13,6 +13,9 @@ PHP SetDefaultWorld: PHP : SEP #$20 +LDA.l FollowerIndicator : CMP #$04 : BNE .default + LDA.l OldManRetrievalWorld : BRA + +.default LDA.l InvertedMode : BEQ + LDA.b #$40 + STA CurrentWorld diff --git a/hooks.asm b/hooks.asm index 3a78b60..f436ddc 100755 --- a/hooks.asm +++ b/hooks.asm @@ -2139,6 +2139,9 @@ PHB : JSL.l DarkWorldSaveFix org $028046 ; <- 10046 - Bank02.asm : 217 (JSL EnableForceBlank) (Start of Module_LoadFile) JSL.l OnFileLoad ;-------------------------------------------------------------------------------- +org $0280A2 +JSL GetCurrentWorldForLoad +;-------------------------------------------------------------------------------- org $09F520 ; <- 4F520 - module_death.asm : 401 (LDA $7EF3C5 : CMP.b #$03 : BCS BRANCH_THETA) JSL.l OnPlayerDead JSL.l IncrementDeathCounter From 4c1433464e9368efa80d178d274b27788aa83e6b Mon Sep 17 00:00:00 2001 From: Catobat <69204835+Catobat@users.noreply.github.com> Date: Sat, 26 Aug 2023 00:52:13 +0200 Subject: [PATCH 04/19] Fix issue with rooms $0124-$0127 at Tavern Back --- doorframefixes.asm | 15 ++++++++++++++- hooks.asm | 4 ++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/doorframefixes.asm b/doorframefixes.asm index c233c26..a5ecb3d 100644 --- a/doorframefixes.asm +++ b/doorframefixes.asm @@ -74,4 +74,17 @@ WalkUpOnOverworld: RTL .normal LDA #$0002 : STA $2F ; what we overwrote -RTL \ No newline at end of file +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 \ No newline at end of file diff --git a/hooks.asm b/hooks.asm index f436ddc..5738c9c 100755 --- a/hooks.asm +++ b/hooks.asm @@ -2964,5 +2964,9 @@ org $02E297 ; LDA.w #$0002 : STA.b $2F JSL WalkUpOnOverworld NOP +org $02E36F +JSL CheckStairsAdjustment +NOP + org $02D7D2 ; BEQ .face_up NOP #2 ; this fixes Link's direction after mirroring and falling after entering through back of tavern From fdd8fedaefafb0e7d992842ebf9f5c464b4a94c8 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Thu, 28 Sep 2023 22:01:18 -0500 Subject: [PATCH 05/19] New solution for mirror portal disabling in Crossed OWR --- LTTP_RND_GeneralBugfixes.asm | 3 -- hooks.asm | 1 - owrando.asm | 81 +++++++++--------------------------- 3 files changed, 20 insertions(+), 65 deletions(-) diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 523a3e2..964897e 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -575,9 +575,6 @@ Overworld_CheckForSpecialOverworldTrigger_Direction: org $05A51D Sprite_SpawnFallingItem: -org $05AFF1 -Sprite_6C_MirrorPortal_dont_do_warp: - org $05DF6C ; 02DF6C - Bank05.asm : 2445 Sprite_DrawMultiple: diff --git a/hooks.asm b/hooks.asm index 5738c9c..0c72759 100755 --- a/hooks.asm +++ b/hooks.asm @@ -2440,7 +2440,6 @@ JML MirrorBonk MirrorBonk_NormalReturn: org $07A9D1 ; <- 3A9D1 - Bank07.asm:6649 (BRANCH_GAMMA:) MirrorBonk_BranchGamma: -JML OWMirrorSpriteBonk ;================================================================================ ;================================================================================ diff --git a/owrando.asm b/owrando.asm index d74718d..f30442d 100644 --- a/owrando.asm +++ b/owrando.asm @@ -56,16 +56,11 @@ Link_ResetSwimmingState: ; mirror hooks -org $02FBAB -JSL OWMirrorSpriteRestore : NOP org $05AF75 Sprite_6C_MirrorPortal: -jsl OWPreserveMirrorSprite : nop #2 ; LDA $7EF3CA : BNE $05AFDF +jsl OWMirrorSpriteDisable ; LDA $7EF3CA org $05AFDF Sprite_6C_MirrorPortal_missing_mirror: -JML OWMirrorSpriteDelete : NOP ; STZ $0DD0,X : BRA $05AFF1 -org $0ABFBF -JSL OWMirrorSpriteOnMap : BRA + : NOP #6 : + ; whirlpool shuffle cross world change org $02b3bd @@ -257,64 +252,28 @@ OWDestroyItemSprites: DEX : BPL .nextSprite PLX : RTL } -OWMirrorSpriteOnMap: +OWMirrorSpriteDisable: { - lda.w $1ac0,x : bit.b #$f0 : beq .continue - lda.b #$00 : rtl - .continue - ora.w $1ab0,x - ora.w $1ad0,x - ora.w $1ae0,x - rtl -} -OWPreserveMirrorSprite: -{ - 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 : beq .vanilla ; if performing mirror superbunny - rtl + LDA.b $10 : CMP.b #$0F : BEQ + ; avoid rare freeze during mirror superbunny + RTL + + PLA : PLA : PLA : JML Sprite_6C_MirrorPortal_missing_mirror + + lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .vanilla + stz.w $0FC6 ; enable drawing portal + lda.l InvertedMode : beq + + lda.l CurrentWorld : eor.b #$40 + bra ++ + + lda.l CurrentWorld : ++ beq .return + lda.b #$03 : sta.w $0FC6 ; skips drawing portal + stz.w $0DD0,x ; disables collision + + .return + lda.l InvertedMode : beq + + lda.b #$40 + + rtl .vanilla - lda.l InvertedMode : beq + - 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 + lda.l CurrentWorld ; what we wrote over rtl } OWLightWorldOrCrossed: From 47ce48a31a8b225a05f179f078ab57d8831a73c8 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 1 Oct 2023 06:11:27 -0500 Subject: [PATCH 06/19] Fixed mirror sprite shown on map check in Crossed OWR --- owrando.asm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/owrando.asm b/owrando.asm index f30442d..21aa23f 100644 --- a/owrando.asm +++ b/owrando.asm @@ -61,6 +61,8 @@ Sprite_6C_MirrorPortal: jsl OWMirrorSpriteDisable ; LDA $7EF3CA org $05AFDF Sprite_6C_MirrorPortal_missing_mirror: +org $0ABFB6 +jsl OWMirrorSpriteOnMap : NOP ; LDA.w $008A : CMP.b #$40 ; whirlpool shuffle cross world change org $02b3bd @@ -252,6 +254,13 @@ OWDestroyItemSprites: DEX : BPL .nextSprite PLX : RTL } + +OWMirrorSpriteOnMap: +{ + JSL OWWorldCheck + CMP.b #$40 ; part of what we wrote over + RTL +} OWMirrorSpriteDisable: { LDA.b $10 : CMP.b #$0F : BEQ + ; avoid rare freeze during mirror superbunny From edad66a5a8e5bb5081062ec91ed26972f8296b96 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 1 Oct 2023 06:12:18 -0500 Subject: [PATCH 07/19] New solution for mirror portal disabling in Crossed OWR --- owrando.asm | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/owrando.asm b/owrando.asm index 21aa23f..16c60ae 100644 --- a/owrando.asm +++ b/owrando.asm @@ -56,9 +56,13 @@ Link_ResetSwimmingState: ; mirror hooks +org $0283DC ; override world check when spawning mirror portal sprite in Crossed OWR +jsl.l OWLightWorldOrCrossed org $05AF75 Sprite_6C_MirrorPortal: jsl OWMirrorSpriteDisable ; LDA $7EF3CA +org $05AF88 +jsl OWMirrorSpriteSkipDraw : NOP ; LDA.w $0FC6 : CMP.b #$03 org $05AFDF Sprite_6C_MirrorPortal_missing_mirror: org $0ABFB6 @@ -97,10 +101,6 @@ jsl OWOldManSpeed ;org $09c957 ; <- 4c957 ;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) org $0aba6c ; < ? - Bank0a.asm:474 () jsl.l OWMapWorldCheck16 : nop @@ -263,20 +263,11 @@ OWMirrorSpriteOnMap: } OWMirrorSpriteDisable: { - LDA.b $10 : CMP.b #$0F : BEQ + ; avoid rare freeze during mirror superbunny - RTL - + PLA : PLA : PLA : JML Sprite_6C_MirrorPortal_missing_mirror + LDA.b $10 : CMP.b #$0F : BNE + ; avoid rare freeze during mirror superbunny + PLA : PLA : PLA : JML Sprite_6C_MirrorPortal_missing_mirror + + lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq .vanilla - stz.w $0FC6 ; enable drawing portal - lda.l InvertedMode : beq + - lda.l CurrentWorld : eor.b #$40 - bra ++ - + lda.l CurrentWorld : ++ beq .return - lda.b #$03 : sta.w $0FC6 ; skips drawing portal - stz.w $0DD0,x ; disables collision - - .return lda.l InvertedMode : beq + lda.b #$40 + rtl @@ -285,6 +276,20 @@ OWMirrorSpriteDisable: lda.l CurrentWorld ; what we wrote over 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: { lda.l OWMode+1 : and.b #!FLAG_OW_CROSSED : beq ++ From 70badade72dd571225dcc368dc3f1c1be42e86c6 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Tue, 10 Oct 2023 01:26:30 -0500 Subject: [PATCH 08/19] Fix for Hera boss music fadeout when falling --- hooks.asm | 3 +++ music.asm | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/hooks.asm b/hooks.asm index 0c72759..8279aca 100755 --- a/hooks.asm +++ b/hooks.asm @@ -1967,6 +1967,9 @@ NOP #8 org $028B8F ; <- 10B8F - Bank02.asm:2236 (LDA $7EF374 : LSR A) JSL CheckHeraBossDefeated : NOP ;================================================================================ +org $028D6E +JSL FallingMusicFadeOut : BRA + : NOP #2 : + +;================================================================================ org $029090 ; <- 11090 - Bank02.asm:3099 (LDA $7EF374 : LSR A) JSL CheckHeraBossDefeated : NOP ;================================================================================ diff --git a/music.asm b/music.asm index 71adc06..f53a848 100644 --- a/music.asm +++ b/music.asm @@ -213,3 +213,10 @@ CheckHeraBossDefeated: LDA RoomDataWRAM[$07].high : AND.w #$00FF : BEQ + SEC : RTL + CLC : RTL + +FallingMusicFadeOut: + CMP.w #$0017 ; what we wrote over + BNE .return + LDA.w $0130 : AND.w #$00FF : CMP.b #$15 ; if boss music is playing, then fade out +.return + RTL From 766cc67dcd9e98cd471e4a6e73c5eab5f2a7bc5c Mon Sep 17 00:00:00 2001 From: codemann8 Date: Tue, 10 Oct 2023 01:28:20 -0500 Subject: [PATCH 09/19] Fix heart piece dupe respawn issue --- heartpieces.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/heartpieces.asm b/heartpieces.asm index 5faae3a..9fab7f0 100644 --- a/heartpieces.asm +++ b/heartpieces.asm @@ -132,7 +132,7 @@ HeartUpgradeSpawnDecision: ; this should return #$00 to make the hp spawn RTL .bonk_prize_check 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 LDA.b #$00 RTL From 68af5f735ec50f56927c613a2d225d1fe3cfc12b Mon Sep 17 00:00:00 2001 From: codemann8 Date: Tue, 10 Oct 2023 01:29:50 -0500 Subject: [PATCH 10/19] Minor formatting and bug prevention --- heartpieces.asm | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/heartpieces.asm b/heartpieces.asm index 9fab7f0..840d375 100644 --- a/heartpieces.asm +++ b/heartpieces.asm @@ -125,10 +125,9 @@ RTL RTL ;-------------------------------------------------------------------------------- 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 #$00 + LDA.b #$00 : STA.l !FORCE_HEART_SPAWN RTL .bonk_prize_check PHX @@ -138,19 +137,21 @@ RTL RTL PLX .normal_behavior - LDA OverworldEventDataWRAM, X + LDA.l OverworldEventDataWRAM, X RTL ;-------------------------------------------------------------------------------- SaveHeartCollectedStatus: LDA !SKIP_HEART_SAVE : BEQ .save_flag - DEC : STA !SKIP_HEART_SAVE + LDA #$00 : STA !SKIP_HEART_SAVE RTL .save_flag LDA 4,S : TAY : LDA $0ED0,Y : BEQ .normal_behavior - PHA : LDA OverworldEventDataWRAM, X : ORA 1,S : STA OverworldEventDataWRAM, X - PLA : RTL + PHA + LDA OverworldEventDataWRAM, X : ORA 1,S : STA OverworldEventDataWRAM, X + PLA +RTL .normal_behavior LDA OverworldEventDataWRAM, X : ORA.b #$40 : STA OverworldEventDataWRAM, X From a6507eea6d3d49e51d9b2c74b3e3f39baed4f17b Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 22 Oct 2023 16:23:43 -0500 Subject: [PATCH 11/19] Fix for Hera boss music fadeout when falling --- music.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/music.asm b/music.asm index f53a848..3de2ba9 100644 --- a/music.asm +++ b/music.asm @@ -217,6 +217,6 @@ LDA RoomDataWRAM[$07].high : AND.w #$00FF : BEQ + FallingMusicFadeOut: CMP.w #$0017 ; what we wrote over BNE .return - LDA.w $0130 : AND.w #$00FF : CMP.b #$15 ; if boss music is playing, then fade out + LDA.w $0130 : AND.w #$00FF : CMP.w #$0015 ; if boss music is playing, then fade out .return RTL From 43552d1a646ec1f189e8082d5c3d467d8f012e66 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Tue, 24 Oct 2023 07:38:06 -0500 Subject: [PATCH 12/19] Fix Hera music to play correct dungeon track following a floor change --- msu.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msu.asm b/msu.asm index f6bfbe0..7626e8a 100644 --- a/msu.asm +++ b/msu.asm @@ -416,7 +416,7 @@ SpiralStairsPreCheck: SpiralStairsPostCheck: LDA.l DRMode : BEQ + ; if door rando enabled 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 + LDA $A0 CMP.w #$000C : BNE + From 84992d010ff291eb322ff8c449bccd6adfdd0e5e Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 5 Nov 2023 08:39:13 -0600 Subject: [PATCH 13/19] Fix for playing correct track after Agas and GT cutscene --- bugfixes.asm | 6 +++--- inverted.asm | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/bugfixes.asm b/bugfixes.asm index 32764e2..c8adb66 100644 --- a/bugfixes.asm +++ b/bugfixes.asm @@ -90,11 +90,11 @@ FixAga2Bunny: ++ JSL DecideIfBunny : BNE + JSR MakeBunny - LDA.b #$04 : STA.w $012C ; play bunny music - BRA .done + - LDA.b #$09 : STA.w $012C ; what we wrote over .done + PHX + JSL Overworld_DetermineMusic : STX !REG_MUSIC_CONTROL_REQUEST + PLX RTL ;-------------------------------------------------------------------------------- diff --git a/inverted.asm b/inverted.asm index e7b4019..dec7e99 100644 --- a/inverted.asm +++ b/inverted.asm @@ -151,7 +151,9 @@ GanonTowerAnimation: STZ $011B STZ $011C STZ $011D - LDA.b #$02 : STA $012C + PHX + JSL Overworld_DetermineMusic : STX !REG_MUSIC_CONTROL_REQUEST + PLX LDA.b #$09 : STA $012D RTL .done From 6de8dc606cf3899326ba7b994f1a7a5e58b350c2 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 5 Nov 2023 08:39:54 -0600 Subject: [PATCH 14/19] Fix issue with incorrect track playing on DDM --- msu.asm | 2 +- music.asm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/msu.asm b/msu.asm index 7626e8a..1b1dc8a 100644 --- a/msu.asm +++ b/msu.asm @@ -269,7 +269,7 @@ CheckMusicLoadRequest: LDA ProgressIndicator : CMP.b #03 : BNE .no_change ; aga1 killed BRA - .darkwoods - LDA.b #15 : PHA + PHA LDX $8A : LDA.l OWTileWorldAssoc,X : BEQ + PLA : BRA .darkworld + PLA : BRA .lightworld diff --git a/music.asm b/music.asm index 3de2ba9..c68e388 100644 --- a/music.asm +++ b/music.asm @@ -110,7 +110,7 @@ Overworld_DetermineMusic: LDX.b #$05 ; lost woods theme BRA .bunny - + LDA $8A : CMP.b #$40 : BNE + + + CMP.b #$40 : BNE .bunny LDX #$0F ; dark woods theme BRA .bunny From 3dfae76275d5a40aab7d372dcf69a2fa7e79ffa2 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 5 Nov 2023 08:44:19 -0600 Subject: [PATCH 15/19] Play GT2 track in DR if GTBK is collected --- msu.asm | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/msu.asm b/msu.asm index 1b1dc8a..0bf06a3 100644 --- a/msu.asm +++ b/msu.asm @@ -244,9 +244,10 @@ CheckMusicLoadRequest: CMP.b #16 : BEQ .castle CMP.b #17 : 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 BRA .check_fallback-3 .no_change @@ -277,7 +278,13 @@ CheckMusicLoadRequest: LDA $040C CMP.b #$08 : BNE .check_fallback ; Hyrule Castle 2 .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 LDX !REG_MUSIC_CONTROL_REQUEST From 3cbc1ab42edca8fa1211757ea00c397685f3c976 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 8 Nov 2023 13:50:03 -0600 Subject: [PATCH 16/19] Marking OW screens as visited --- owrando.asm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/owrando.asm b/owrando.asm index 16c60ae..485bab5 100644 --- a/owrando.asm +++ b/owrando.asm @@ -29,6 +29,9 @@ BCS OWDetectTransitionReturn org $02a999 jsl OWEdgeTransition : nop #4 ;LDA $02A4E3,X : ORA $7EF3CA +org $02aa07 +JSL OWMarkVisited : NOP + org $04e8ae JSL OWDetectSpecialTransition RTL : NOP @@ -340,6 +343,16 @@ OWOldManSpeed: lda #$0c : sta $5e ; what we wrote over 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: { From 62356f0159481dd90793d322f81a0a95b52d4bae Mon Sep 17 00:00:00 2001 From: Randall Rupper Date: Wed, 15 Nov 2023 14:30:44 -0700 Subject: [PATCH 17/19] fix: disable flute in rain state (except glitched modes) fix(msu): GTBK music in DR --- hooks.asm | 3 +++ inventory.asm | 14 ++++++++++++++ msu.asm | 8 +++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/hooks.asm b/hooks.asm index 7291a0a..62f7fef 100755 --- a/hooks.asm +++ b/hooks.asm @@ -1300,6 +1300,9 @@ org $08D395 ; <- 45395 - ancilla_bird_travel_intro.asm : 253 JSL.l UpgradeFlute NOP #2 ;-------------------------------------------------------------------------------- +org $07A408 ; LDA.l $7EF34C +JSL.l FluteCallForDuck +;-------------------------------------------------------------------------------- org $05E4D7 ; <- 2E4D7 - sprite_witch.asm : 213 JSL.l RemoveMushroom NOP #2 diff --git a/inventory.asm b/inventory.asm index a0fdd29..75991de 100644 --- a/inventory.asm +++ b/inventory.asm @@ -820,6 +820,20 @@ UpgradeFlute: LDA.b #$03 : STA FluteEquipment ; upgrade primary inventory RTL ;-------------------------------------------------------------------------------- +; FluteCallForDuck: +;-------------------------------------------------------------------------------- +; sets A to #$02 to ignore summoning the duck +FluteCallForDuck: + LDA.l WarningFlags : AND.b #$20 : BNE .vanilla ; glitched modes allowed flute in rain state + LDA.l ProgressIndicator : CMP.b #$02 : BCS .vanilla ; must rescue Zelda first + + .noDuck + LDA.b #$02 : RTL + + .vanilla + LDA.l FluteEquipment ; what we wrote over +RTL +;-------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------- ; CheckKeys: diff --git a/msu.asm b/msu.asm index 62322e1..9a37d76 100644 --- a/msu.asm +++ b/msu.asm @@ -271,7 +271,13 @@ CheckMusicLoadRequest: LDA $040C CMP.b #$08 : BNE .check_fallback ; Hyrule Castle 2 .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 LDX !REG_MUSIC_CONTROL_REQUEST From 81f0270ca460daabfbad1849823026b5f49abacb Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 31 Dec 2023 03:06:25 -0600 Subject: [PATCH 18/19] Consolidated Bonk Drop to use shared codebase --- heartpieces.asm | 52 +++++----- owrando.asm | 264 +++++++++++++++++++++--------------------------- 2 files changed, 139 insertions(+), 177 deletions(-) diff --git a/heartpieces.asm b/heartpieces.asm index 840d375..d714d77 100644 --- a/heartpieces.asm +++ b/heartpieces.asm @@ -273,7 +273,7 @@ LoadIndoorValue: %GetPossiblyEncryptedItem(HeartPiece_Graveyard_Warp, HeartPieceIndoorValues) JMP .done + CMP.w #288 : BNE + - LDA.l OWBonkPrizeTable[42].loot + LDA.l UWBonkPrizeData+3 JMP .done + CMP.w #294 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Mire_Warp, HeartPieceIndoorValues) @@ -369,36 +369,36 @@ LoadOutdoorValue: LDA.l OWBonkPrizeTable[$0F].loot JMP .done + CMP.w #$1B : BNE + - LDA.l OWBonkPrizeTable[$11].loot + LDA.l OWBonkPrizeTable[$10].loot JMP .done + CMP.w #$1D : BNE + - LDA.l OWBonkPrizeTable[$12].loot + LDA.l OWBonkPrizeTable[$11].loot JMP .done + CMP.w #$1E : BNE + - LDA.l OWBonkPrizeTable[$13].loot + LDA.l OWBonkPrizeTable[$12].loot JMP .done + CMP.w #$28 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Maze, HeartPieceOutdoorValues) JMP .done + CMP.w #$2A : BNE + LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++ - LDA.l OWBonkPrizeTable[$14].loot + LDA.l OWBonkPrizeTable[$13].loot JMP .done ++ CMP.w #$0008 : BNE ++ - LDA.l OWBonkPrizeTable[$15].loot + LDA.l OWBonkPrizeTable[$14].loot JMP .done ++ %GetPossiblyEncryptedItem(HauntedGroveItem, HeartPieceOutdoorValues) JMP .done + CMP.w #$2B : BNE + - LDA.l OWBonkPrizeTable[$16].loot + LDA.l OWBonkPrizeTable[$15].loot JMP .done + CMP.w #$2E : BNE + LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++ - LDA.l OWBonkPrizeTable[$17].loot + LDA.l OWBonkPrizeTable[$16].loot JMP .done ++ - LDA.l OWBonkPrizeTable[$18].loot + LDA.l OWBonkPrizeTable[$17].loot JMP .done + CMP.w #$30 : BNE + LDA $22 : CMP.w #512 : !BGE ++ @@ -409,10 +409,10 @@ LoadOutdoorValue: JMP .done + CMP.w #$32 : BNE + LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++ - LDA.l OWBonkPrizeTable[$19].loot + LDA.l OWBonkPrizeTable[$18].loot JMP .done ++ - LDA.l OWBonkPrizeTable[$1A].loot + LDA.l OWBonkPrizeTable[$19].loot JMP .done + CMP.w #$35 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Lake, HeartPieceOutdoorValues) @@ -422,7 +422,7 @@ LoadOutdoorValue: JMP .done + CMP.w #$42 : BNE + LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++ - LDA.l OWBonkPrizeTable[$1B].loot + LDA.l OWBonkPrizeTable[$1A].loot JMP .done ++ %GetPossiblyEncryptedItem(HeartPiece_Cliffside, HeartPieceOutdoorValues) @@ -432,56 +432,56 @@ LoadOutdoorValue: JMP .done + CMP.w #$51 : BNE + LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++ - LDA.l OWBonkPrizeTable[$1C].loot + LDA.l OWBonkPrizeTable[$1B].loot JMP .done ++ - LDA.l OWBonkPrizeTable[$1D].loot + LDA.l OWBonkPrizeTable[$1C].loot JMP .done + CMP.w #$54 : BNE + LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++ - LDA.l OWBonkPrizeTable[$1E].loot + LDA.l OWBonkPrizeTable[$1D].loot JMP .done ++ CMP.w #$0008 : BNE ++ - LDA.l OWBonkPrizeTable[$1F].loot + LDA.l OWBonkPrizeTable[$1E].loot JMP .done ++ - LDA.l OWBonkPrizeTable[$20].loot + LDA.l OWBonkPrizeTable[$1F].loot JMP .done + CMP.w #$55 : BNE + LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++ - LDA.l OWBonkPrizeTable[$21].loot + LDA.l OWBonkPrizeTable[$20].loot JMP .done ++ - LDA.l OWBonkPrizeTable[$22].loot + LDA.l OWBonkPrizeTable[$21].loot JMP .done + CMP.w #$56 : BNE + - LDA.l OWBonkPrizeTable[$23].loot + LDA.l OWBonkPrizeTable[$22].loot JMP .done + CMP.w #$5B : BNE + LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++ - LDA.l OWBonkPrizeTable[$24].loot + LDA.l OWBonkPrizeTable[$23].loot JMP .done ++ %GetPossiblyEncryptedItem(HeartPiece_Pyramid, HeartPieceOutdoorValues) JMP .done + CMP.w #$5E : BNE + - LDA.l OWBonkPrizeTable[$25].loot + LDA.l OWBonkPrizeTable[$24].loot JMP .done + CMP.w #$68 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Digging, HeartPieceOutdoorValues) JMP .done + CMP.w #$6E : BNE + LDA.w $0ED0,X : AND.w #$00FF : CMP.w #$0010 : BNE ++ - LDA.l OWBonkPrizeTable[$26].loot + LDA.l OWBonkPrizeTable[$25].loot JMP .done ++ CMP.w #$0008 : BNE ++ - LDA.l OWBonkPrizeTable[$27].loot + LDA.l OWBonkPrizeTable[$26].loot JMP .done ++ - LDA.l OWBonkPrizeTable[$28].loot + LDA.l OWBonkPrizeTable[$27].loot JMP .done + CMP.w #$74 : BNE + - LDA.l OWBonkPrizeTable[$29].loot + LDA.l OWBonkPrizeTable[$28].loot JMP .done + CMP.w #$81 : BNE + %GetPossiblyEncryptedItem(HeartPiece_Zora, HeartPieceOutdoorValues) diff --git a/owrando.asm b/owrando.asm index 485bab5..6cc3143 100644 --- a/owrando.asm +++ b/owrando.asm @@ -161,10 +161,10 @@ jsl.l OWWorldCheck16 : nop org $02b16e ; AND #$3F : ORA 7EF3CA and #$7f : eor #$40 : nop #2 -org $06AD4C -jsl.l OWBonkDrops : nop #4 +org $06AD49 +jsl.l OWBonkDropsOverworld : nop org $1EDE6F -jsl.l OWBonkGoodBeeDrop : bra + +jsl.l OWBonkDropsUnderworld : bra + GoldBee_SpawnSelf_SetProperties: phb : lda.b #$1E : pha : plb ; switch to bank 1E jsr GoldBee_SpawnSelf+12 @@ -408,7 +408,7 @@ LoadMapDarkOrMixed: dw $0400+$0210 ; bottom right } -OWBonkGoodBeeDrop: +OWBonkDropsUnderworld: { LDA.l OWFlags+1 : AND.b #!FLAG_OW_BONKDROP : BNE .shuffled .vanilla ; what we wrote over @@ -416,20 +416,63 @@ OWBonkGoodBeeDrop: LDA.l BottleContentsOne : ORA.l BottleContentsTwo ORA.l BottleContentsThree : ORA.l BottleContentsFour RTL + .shuffled LDA.w $0DD0,X : BNE + - JMP .return+1 + BRA .return+1 + PHY : TXY - LDA.l RoomDataWRAM[$0120].high : AND.b #$02 : PHA : BNE + ; check if collected - 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 - + + JSL OWBonkDrops - .determine_type ; S = Collected - LDA.l OWBonkPrizeTable[42].loot ; A = item id + .return + 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 + LDA.b #$79 : JMP .sprite_transform ; transform to bees + CMP.b #$42 : BNE + @@ -461,140 +504,12 @@ OWBonkGoodBeeDrop: 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 - 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 INX : INX : LDA.w OWBonkPrizeData,X ; X = row + 5 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 + LDA.b #$0B ; BRA .sprite_transform ; transform to chicken .sprite_transform JSL.l OWBonkSpritePrep @@ -602,16 +517,22 @@ OWBonkDrops: .mark_collected ; S = Collected, FlagBitmask, X (row + 2) PLA : BNE + ; S = FlagBitmask, X (row + 2) 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 + .increment_collection REP #$20 LDA.l TotalItemCounter : INC : STA.l TotalItemCounter SEP #$20 - + JMP .return + + BRA .return ; spawn itemget item - .spawn_item ; A = item id ; Y = tree sprite slot ; S = Collected, FlagBitmask, X (row + 2) - PLX : BEQ + : LDA.b #$00 : STA.w $0DD0,Y : JMP .return ; S = 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 : BRA .return ; S = FlagBitmask, X (row + 2) + PHA LDA.b #$01 : STA !FORCE_HEART_SPAWN @@ -633,18 +554,57 @@ OWBonkDrops: 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) ; determines the initial spawn point of item PLX : INX : INX : INX LDA.w $0D00,Y : SEC : SBC.w OWBonkPrizeData,X : STA.w $0D00,Y LDA.w $0D20,Y : SBC #$00 : STA.w $0D20,Y - - PLB : RTL + + BRA .return+2 .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 @@ -1717,7 +1677,7 @@ db $18, $a8, $10, $b2, $00, $20 db $18, $36, $08, $35, $00, $20 db $1a, $8a, $10, $42, $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 $1d, $6b, $10, $b1, $00, $20 db $1e, $72, $10, $b2, $00, $20 @@ -1728,6 +1688,7 @@ db $2e, $9c, $10, $b2, $00, $20 db $2e, $b4, $08, $b0, $00, $20 db $32, $29, $10, $42, $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 $51, $08, $10, $b2, $00, $04 db $51, $09, $08, $b2, $00, $04 @@ -1743,6 +1704,7 @@ db $6e, $8c, $10, $35, $00, $10 db $6e, $90, $08, $b0, $00, $10 db $6e, $a4, $04, $b1, $00, $10 db $74, $4e, $10, $b1, $00, $1c +UWBonkPrizeData: db $ff, $00, $02, $b5, $00, $08 ; temporary fix - murahdahla replaces one of the bonk tree prizes From 3b3a153ebe14d2f60037aae4acd94878cd64d43c Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 31 Dec 2023 03:11:25 -0600 Subject: [PATCH 19/19] Adding sparkles to Bonk Drop locations --- LTTP_RND_GeneralBugfixes.asm | 6 ++++ owrando.asm | 70 ++++++++++++++++++++++++++++++++++-- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index 964897e..6f1a630 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -572,6 +572,9 @@ Overworld_MemorizeMap16Change: org $04E879 Overworld_CheckForSpecialOverworldTrigger_Direction: +org $058008 +Sprite_SpawnSparkleGarnish: + org $05A51D Sprite_SpawnFallingItem: @@ -835,6 +838,9 @@ DiggingGameGuy_AttemptPrizeSpawn: org $1EDE28 Sprite_GetEmptyBottleIndex: ; this is totally in sprite_bees.asm +org $1EDE89 +GoldBee_Dormant_exit: + org $1EDE8A GoldBee_SpawnSelf: diff --git a/owrando.asm b/owrando.asm index 6cc3143..bb9856b 100644 --- a/owrando.asm +++ b/owrando.asm @@ -161,15 +161,22 @@ jsl.l OWWorldCheck16 : nop org $02b16e ; AND #$3F : ORA 7EF3CA and #$7f : eor #$40 : nop #2 +org $09C3C4 +jsl.l OWBonkDropPrepSprite : nop #2 +org $09C801 +jsl.l OWBonkDropPrepSprite : nop #2 +org $06D052 +jsl.l OWBonkDropSparkle org $06AD49 jsl.l OWBonkDropsOverworld : nop -org $1EDE6F +org $1EDE6A +jsl.l OWBonkDropSparkle : BNE GoldBee_Dormant_exit jsl.l OWBonkDropsUnderworld : bra + GoldBee_SpawnSelf_SetProperties: phb : lda.b #$1E : pha : plb ; switch to bank 1E jsr GoldBee_SpawnSelf+12 plb : rtl -nop #3 +nop #2 + ;Code @@ -408,6 +415,65 @@ LoadMapDarkOrMixed: dw $0400+$0210 ; bottom right } +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