From 9fc26e87104c57e8df21759e4b06e212e209b4d8 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 28 Jan 2026 18:40:33 -0600 Subject: [PATCH 1/5] Fixed palette issue with map checks when Link stands in grass/water --- owrando.asm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/owrando.asm b/owrando.asm index 3aac860..4a850ef 100644 --- a/owrando.asm +++ b/owrando.asm @@ -107,6 +107,9 @@ org $8aba6c ; < ? - Bank0a.asm:474 () jsl OWMapWorldCheck16 : nop ; Custom Overworld Map +org $8ABA52 +JSL OverworldMap_InitGfx_InitScrap + org $8ABA99 WorldMap_LoadDarkWorldMap: LDA.b GameMode : CMP.b #$14 ; attract module @@ -512,6 +515,12 @@ GetOWMapTilemapOffsetToCopy: dw $0400+$0210 ; bottom right } +OverworldMap_InitGfx_InitScrap: +{ + STZ.b ScrapBuffer72 ; clear tile swap flag + LDA.b #$11 : STA.b MAINDESQ ; what we wrote over + RTL +} LoadMapDarkOrCustom_long: { PHB : LDA.b #WorldMap_DarkWorldTilemap>>16 : PHA : PLB -- 2.43.0 From 41c520fe907c67b64ac72f87bce2a0b98420ebdd Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 28 Jan 2026 22:50:20 -0600 Subject: [PATCH 2/5] Fix Link sprite using vanilla coords on map check in Special OW --- menu/overworldmap.asm | 21 +++++++++++ owrando.asm | 86 +++++++++++++++++++++++++++++++------------ 2 files changed, 84 insertions(+), 23 deletions(-) diff --git a/menu/overworldmap.asm b/menu/overworldmap.asm index 187b924..ea5e5c4 100644 --- a/menu/overworldmap.asm +++ b/menu/overworldmap.asm @@ -508,6 +508,27 @@ org $8AC3B6 JMP WorldMap_CalculateOAMCoordinates_exit_successfully warnpc $8AC433 + +; most of this function is copied from the original, but rearranged +org $8ABF78 +WorldMap_HandleSprites: + LDA.l $7EC108 : PHA + LDA.l $7EC109 : PHA + LDA.l $7EC10A : PHA + LDA.l $7EC10B : PHA + JSL WorldMap_SkipHandleSprites ; override vanilla (LDA.b $1A : AND.b #$10) + BEQ .continue + JSR WorldMap_CalculateOAMCoordinates : BCC .continue + + LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E + LDA.b Scrap0F : SEC : SBC.b #$04 : STA.b Scrap0F + LDA.b #$00 : STA.b Scrap0D + LDA.b #$3E : STA.b Scrap0C + LDA.b #$02 : STA.b Scrap0B + LDX.b #$00 : JSR WorldMap_HandleSpriteBlink +.continue +warnpc $8ABFB6 + pullpc WorldMap_LoadChrHalfSlot: diff --git a/owrando.asm b/owrando.asm index 4a850ef..b422c27 100644 --- a/owrando.asm +++ b/owrando.asm @@ -124,15 +124,14 @@ BEQ .vanilla_light warnpc $8ABAB5 .vanilla_light ; $0ABAB5 +org $8ABD12 +JSL MoveZoomedInPositionY +org $8ABD2F +JSL MoveZoomedInPositionX + org $8ABB32 JSL LoadMapOppositeWorld -org $8ABF78 -JSL WorldMap_SkipHandleSprites - -org $8ABA22 -JSL MoveLinkMapSprite - org $8ABFF0 JSL MoveMirrorPortalMapSprite ; Could insert similar hooks at $8AB860 and $8AB8AC for flute spots @@ -551,24 +550,15 @@ LoadMapOppositeWorld: } WorldMap_SkipHandleSprites: { - LDA.l OWFlags : AND.b #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla + JSR MoveMapSprite : BEQ .vanilla LDA.b ScrapBuffer72 : BEQ .vanilla ; skip draw if no tile swap - PLA : PLA : PEA.w $C3AF ; exit without drawing sprites + PLA : PLA : PEA.w $C39B ; exit without drawing sprites RTL .vanilla LDA.b FrameCounter : AND.b #$10 ; what we wrote over RTL } -MoveLinkMapSprite: -{ - STA.l $7EC10A ; what we overwrote - SEP #$20 - JSR MoveMapSprite - REP #$20 - RTL -} - MoveMirrorPortalMapSprite: { STA.l $7EC109 ; what we overwrote @@ -576,9 +566,54 @@ MoveMirrorPortalMapSprite: RTL } +MoveZoomedInPositionY: +{ + LDA.l OWFlags : AND.w #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla + SEP #$20 + JSR MoveMapSprite_Setup + JSR MoveMapSprite_GetYCoordHighByte + PHA + REP #$20 + LDA.l $7EC108 : XBA + SEP #$20 + PLA : XBA + REP #$20 + RTL +.vanilla + LDA.l $7EC108 ; what we overwrote + RTL +} +MoveZoomedInPositionX: +{ + LDA.l OWFlags : AND.w #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla + SEP #$20 + JSR MoveMapSprite_Setup + JSR MoveMapSprite_GetXCoordHighByte + PHA + REP #$20 + LDA.l $7EC10A : XBA + SEP #$20 + PLA : XBA + REP #$20 + RTL +.vanilla + LDA.l $7EC10A ; what we overwrote + RTL +} + MoveMapSprite: { LDA.l OWFlags : AND.b #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .return + PHP + JSR MoveMapSprite_Setup + JSR MoveMapSprite_GetXCoordHighByte : STA.l $7EC10B + JSR MoveMapSprite_GetYCoordHighByte : STA.l $7EC109 + PLP + .return + RTS +} +MoveMapSprite_Setup: +{ LDA.l $7EC10B : AND.b #$0E : LSR STA.b Scrap00 LDA.l $7EC109 : AND.b #$0E : ASL : ASL @@ -597,12 +632,17 @@ MoveMapSprite: TAX AND.b #$07 : ASL STA.b Scrap00 - LDA.l $7EC10B : AND.b #$01 : ORA.b Scrap00 : STA.l $7EC10B - TXA - AND.b #$38 : LSR : LSR - STA.b Scrap00 - LDA.l $7EC109 : AND.b #$01 : ORA.b Scrap00 : STA.l $7EC109 - .return + RTS +} +MoveMapSprite_GetXCoordHighByte: +{ + LDA.l $7EC10B : AND.b #$01 : ORA.b Scrap00 + RTS +} +MoveMapSprite_GetYCoordHighByte: +{ + TXA : AND.b #$38 : LSR : LSR : STA.b Scrap00 + LDA.l $7EC109 : AND.b #$01 : ORA.b Scrap00 RTS } -- 2.43.0 From 17943f9904f227b4f689c62b1a0f854069607802 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 28 Jan 2026 22:50:20 -0600 Subject: [PATCH 3/5] Fix Link sprite using vanilla coords on map check in Special OW --- menu/overworldmap.asm | 39 ++++++++++++++++++ owrando.asm | 95 +++++++++++++++++++++++++++++++------------ 2 files changed, 108 insertions(+), 26 deletions(-) diff --git a/menu/overworldmap.asm b/menu/overworldmap.asm index 187b924..a8afa39 100644 --- a/menu/overworldmap.asm +++ b/menu/overworldmap.asm @@ -508,6 +508,45 @@ org $8AC3B6 JMP WorldMap_CalculateOAMCoordinates_exit_successfully warnpc $8AC433 + +; most of this function is copied from the original, but rearranged +org $8AB7F3 +FluteMenu_HandleSprites: + LDA.l $7EC108 : PHA + LDA.l $7EC109 : PHA + LDA.l $7EC10A : PHA + LDA.l $7EC10B : PHA + JSL FluteMenu_MoveLinkSprite ; override vanilla (LDA.b $1A : AND.b #$10) + BEQ .continue + JSR WorldMap_CalculateOAMCoordinates : BCC .continue + LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E + LDA.b Scrap0F : SEC : SBC.b #$04 : STA.b Scrap0F + LDA.b #$00 : STA.b Scrap0D + LDA.b #$3E : STA.b Scrap0C + JSL OWMapFluteCancelIcon ; override vanilla (LDA.b #$02 : STA.b Scrap0B) + LDX.b #$10 : JSR WorldMap_HandleSpriteBlink +.continue +warnpc $8AB831 + +; most of this function is copied from the original, but rearranged +org $8ABF78 +WorldMap_HandleSprites: + LDA.l $7EC108 : PHA + LDA.l $7EC109 : PHA + LDA.l $7EC10A : PHA + LDA.l $7EC10B : PHA + JSL WorldMap_SkipHandleSprites ; override vanilla (LDA.b $1A : AND.b #$10) + BEQ .continue + JSR WorldMap_CalculateOAMCoordinates : BCC .continue + LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E + LDA.b Scrap0F : SEC : SBC.b #$04 : STA.b Scrap0F + LDA.b #$00 : STA.b Scrap0D + LDA.b #$3E : STA.b Scrap0C + LDA.b #$02 : STA.b Scrap0B + LDX.b #$00 : JSR WorldMap_HandleSpriteBlink +.continue +warnpc $8ABFB6 + pullpc WorldMap_LoadChrHalfSlot: diff --git a/owrando.asm b/owrando.asm index 4a850ef..89e674c 100644 --- a/owrando.asm +++ b/owrando.asm @@ -78,8 +78,6 @@ org $8ab7af ;LDA $F2 : ORA $F0 : AND #$C0 jml OWFluteCancel2 : nop org $8ab90d ;JSL $02E99D jsl OWFluteCancel -org $8ab816 -JSL OWMapFluteCancelIcon ; allows Frog sprite to spawn in LW and also allows his friend to spawn in their house org $868a76 ; < 30a76 - sprite_prep.asm:785 (LDA $7EF3CA : AND.w #$40) @@ -124,15 +122,14 @@ BEQ .vanilla_light warnpc $8ABAB5 .vanilla_light ; $0ABAB5 +org $8ABD12 +JSL MoveZoomedInPositionY +org $8ABD2F +JSL MoveZoomedInPositionX + org $8ABB32 JSL LoadMapOppositeWorld -org $8ABF78 -JSL WorldMap_SkipHandleSprites - -org $8ABA22 -JSL MoveLinkMapSprite - org $8ABFF0 JSL MoveMirrorPortalMapSprite ; Could insert similar hooks at $8AB860 and $8AB8AC for flute spots @@ -356,7 +353,7 @@ OWFluteCancel2: } OWMapFluteCancelIcon: { - STA.b Scrap0B : LDX.b #$10 ; what we wrote over + LDA.b #$02 : STA.b Scrap0B ; what we wrote over LDA.l OWFlags+1 : AND.b #$01 : BEQ .return LDA.b GameSubMode : CMP.b #$0A : BNE .return LDA.b FrameCounter : AND.b #$10 : BNE .return @@ -549,26 +546,22 @@ LoadMapOppositeWorld: LDA.b Joy1B_New : AND.b #$70 ; what we wrote over RTL } +FluteMenu_MoveLinkSprite: +{ + JSR MoveMapSprite + BRA WorldMap_SkipHandleSprites_vanilla +} WorldMap_SkipHandleSprites: { - LDA.l OWFlags : AND.b #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla + JSR MoveMapSprite : BEQ .vanilla LDA.b ScrapBuffer72 : BEQ .vanilla ; skip draw if no tile swap - PLA : PLA : PEA.w $C3AF ; exit without drawing sprites + PLA : PLA : PEA.w $C39B ; exit without drawing sprites RTL .vanilla LDA.b FrameCounter : AND.b #$10 ; what we wrote over RTL } -MoveLinkMapSprite: -{ - STA.l $7EC10A ; what we overwrote - SEP #$20 - JSR MoveMapSprite - REP #$20 - RTL -} - MoveMirrorPortalMapSprite: { STA.l $7EC109 ; what we overwrote @@ -576,9 +569,54 @@ MoveMirrorPortalMapSprite: RTL } +MoveZoomedInPositionY: +{ + LDA.l OWFlags : AND.w #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla + SEP #$20 + JSR MoveMapSprite_Setup + JSR MoveMapSprite_GetYCoordHighByte + PHA + REP #$20 + LDA.l $7EC108 : XBA + SEP #$20 + PLA : XBA + REP #$20 + RTL +.vanilla + LDA.l $7EC108 ; what we overwrote + RTL +} +MoveZoomedInPositionX: +{ + LDA.l OWFlags : AND.w #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .vanilla + SEP #$20 + JSR MoveMapSprite_Setup + JSR MoveMapSprite_GetXCoordHighByte + PHA + REP #$20 + LDA.l $7EC10A : XBA + SEP #$20 + PLA : XBA + REP #$20 + RTL +.vanilla + LDA.l $7EC10A ; what we overwrote + RTL +} + MoveMapSprite: { LDA.l OWFlags : AND.b #!FLAG_OW_ADJUST_DYNAMIC_MAP_SPRITE_POSITION : BEQ .return + PHP + JSR MoveMapSprite_Setup + JSR MoveMapSprite_GetXCoordHighByte : STA.l $7EC10B + JSR MoveMapSprite_GetYCoordHighByte : STA.l $7EC109 + PLP + .return + RTS +} +MoveMapSprite_Setup: +{ LDA.l $7EC10B : AND.b #$0E : LSR STA.b Scrap00 LDA.l $7EC109 : AND.b #$0E : ASL : ASL @@ -597,12 +635,17 @@ MoveMapSprite: TAX AND.b #$07 : ASL STA.b Scrap00 - LDA.l $7EC10B : AND.b #$01 : ORA.b Scrap00 : STA.l $7EC10B - TXA - AND.b #$38 : LSR : LSR - STA.b Scrap00 - LDA.l $7EC109 : AND.b #$01 : ORA.b Scrap00 : STA.l $7EC109 - .return + RTS +} +MoveMapSprite_GetXCoordHighByte: +{ + LDA.l $7EC10B : AND.b #$01 : ORA.b Scrap00 + RTS +} +MoveMapSprite_GetYCoordHighByte: +{ + TXA : AND.b #$38 : LSR : LSR : STA.b Scrap00 + LDA.l $7EC109 : AND.b #$01 : ORA.b Scrap00 RTS } -- 2.43.0 From bf2bd1974d280178fdc2ca743f60c8559f4c1ce5 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Thu, 29 Jan 2026 21:26:19 -0600 Subject: [PATCH 4/5] Fix buffered sword issue when transitioning to water with sword out --- owrando.asm | 2 ++ ram.asm | 3 +++ 2 files changed, 5 insertions(+) diff --git a/owrando.asm b/owrando.asm index 89e674c..d7ac2de 100644 --- a/owrando.asm +++ b/owrando.asm @@ -1338,6 +1338,7 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water, STZ.w RandoOverworldForceTrans CMP.b #$02 : BNE + DEC : STA.w LinkDeepWater : STZ.w LinkSwimDirection + LDA.b FlagBY : AND.b #$7F : STA.b FlagBY LDA.b #$04 : BRA .set_state + CMP.b #$03 : BNE ++ @@ -1358,6 +1359,7 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water, LDA.b #$01 : STA.w LinkDeepWater LDA.l FlippersEquipment : BEQ .no_flippers ; check if flippers obtained LDA.b LinkState : CMP.b #$17 : BEQ .no_flippers ; check if bunny + LDA.b FlagBY : AND.b #$7F : STA.b FlagBY LDA.b #$04 : STA.b LinkState : STZ.w LinkSwimDirection : RTS .no_flippers PHX diff --git a/ram.asm b/ram.asm index 542eff2..825df1c 100644 --- a/ram.asm +++ b/ram.asm @@ -65,6 +65,8 @@ LinkSubPixelVelocty = $7E002A ; Word length LinkAnimationStep = $7E002E ; LinkDirection = $7E002F ; $00 = Up | $02 = Down | $04 = Left | $06 = Right ; +FlagBY = $7E003A ; Bitfield for B and Y buttons. + ; OAMOffsetY = $7E0044 ; OAMOffsetX = $7E0045 ; LinkIncapacitatedTimer = $7E0046 ; Countdown when Link takes damage, not same as I-frames @@ -761,6 +763,7 @@ endmacro %assertRAM(LinkRecoilZ, $7E0029) %assertRAM(LinkAnimationStep, $7E002E) %assertRAM(LinkDirection, $7E002F) +%assertRAM(FlagBY, $7E003A) %assertRAM(OAMOffsetY, $7E0044) %assertRAM(OAMOffsetX, $7E0045) %assertRAM(LinkIncapacitatedTimer, $7E0046) -- 2.43.0 From ed2746a27b1c1536c6d70878faf33ca756fb5b39 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Sat, 31 Jan 2026 13:01:14 -0600 Subject: [PATCH 5/5] Update map coordinates and fix red crystals showing junk --- menu/overworldmap.asm | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/menu/overworldmap.asm b/menu/overworldmap.asm index a8afa39..063ea36 100644 --- a/menu/overworldmap.asm +++ b/menu/overworldmap.asm @@ -49,27 +49,27 @@ WorldMapIcon_pos: .hc dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00 .ep -dw $0F30, $06E0, $FF00, $FF00, $0F30, $06E0 +dw $0F40, $0660, $FF00, $FF00, $0F40, $0660 .dp -dw $0170, $0E50, $FF00, $FF00, $0170, $0E50 +dw $0140, $0D00, $FF00, $FF00, $0140, $0D00 .at dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00 .sp -dw $8790, $0FD0, $FF00, $FF00, $8790, $0FD0 +dw $8778, $0F50, $FF00, $FF00, $8778, $0F50 .pod -dw $8F30, $06E0, $FF00, $FF00, $8F30, $06E0 +dw $8F40, $0660, $FF00, $FF00, $8F40, $0660 .mm -dw $8160, $0D80, $FF00, $FF00, $8160, $0D80 +dw $8148, $0D00, $FF00, $FF00, $8148, $0D00 .sw -dw $80F0, $0160, $FF00, $FF00, $80F0, $0160 +dw $80B0, $00C0, $FF00, $FF00, $80B0, $00C0 .ip -dw $8CB0, $0E80, $FF00, $FF00, $8CB0, $0E80 +dw $8CA0, $0E00, $FF00, $FF00, $8CA0, $0E00 .toh -dw $0900, $0130, $FF00, $FF00, $0900, $0130 +dw $0900, $0100, $FF00, $FF00, $0900, $0100 .tt -dw $8240, $0840, $FF00, $FF00, $8240, $0840 +dw $81F8, $0800, $FF00, $FF00, $81F8, $0800 .tr -dw $8F30, $01B0, $FF00, $FF00, $8F30, $01B0 +dw $8F20, $0100, $FF00, $FF00, $8F20, $0100 .gt dw $FF00, $FF00, $FF00, $FF00, $FF00, $FF00 @@ -262,8 +262,8 @@ DrawPrizesOverride: ; determine if draw and/or continue JSR WorldMap_ValidateCoords : BCS .advance - JSR WorldMap_DrawTileOverlay JSR WorldMap_DrawTile + JSR WorldMap_DrawTileOverlay .advance LDY.b Scrap05 : DEY #2 : BMI + : JMP .next_dungeon : + PLB @@ -321,18 +321,14 @@ RTS WorldMap_DrawTile: LDA.b Scrap00 : PHA - SEP #$20 - LDX.b Scrap0B : TXA : STA.b (OAMPtr+2) - INC.b OAMPtr+2 - REP #$20 LDA.l $7EC10A : BIT.w #$4000 : SEP #$20 : BNE .raw_coords ; use raw OAM coordinates - JSR WorldMap_CalculateOAMCoordinates - BCS .apply_offsets - REP #$20 - BRA .exit - .raw_coords - STA.b Scrap0E - LDA.l $7EC108 : STA.b Scrap0F + JSR WorldMap_CalculateOAMCoordinates + BCS .apply_offsets + REP #$20 + BRA .exit +.raw_coords + STA.b Scrap0E + LDA.l $7EC108 : STA.b Scrap0F .apply_offsets LDX.b Scrap0A : BNE .aligned ; prize number/overlay: no offset LDX.b Scrap0B : BEQ + @@ -345,6 +341,8 @@ WorldMap_DrawTile: LDA.b Scrap0E : SEC : SBC.b #$04 : STA.b Scrap0E LDA.b Scrap0F : SBC.b #$04 : STA.b Scrap0F .aligned + LDX.b Scrap0B : TXA : STA.b (OAMPtr+2) + INC.b OAMPtr+2 REP #$20 LDA.b Scrap0E : STA.b (OAMPtr) INC.b OAMPtr : INC.b OAMPtr -- 2.43.0