From 581c8bd39a837f3da4105ddabdb7ef19e5a8d779 Mon Sep 17 00:00:00 2001 From: scawful Date: Wed, 29 May 2024 09:16:23 -0400 Subject: [PATCH] cleanup world map module --- Overworld/world_map.asm | 538 ++++++++++++++++++++-------------------- 1 file changed, 272 insertions(+), 266 deletions(-) diff --git a/Overworld/world_map.asm b/Overworld/world_map.asm index 3e5480e..4d51f2b 100644 --- a/Overworld/world_map.asm +++ b/Overworld/world_map.asm @@ -1,13 +1,276 @@ -; 0x0C4000 to 0x0C8000 for the map gfx so you patch a new rom with your map data/gfx and you create a new bin file out of these bytes -; OverworldMap.asm you can copy everything from start to line 214 i think +; ========================================================= +; World Map Module + +org $0AC589 + WorldMapIcon_AdjustCoordinate: + +org $0AC51C + WorldMap_HandleSpriteBlink: + +; Map icon +; 0x00 - Red X on castle | Save zelda +; 0x01 - Red X on Kakariko | Talk to villagers about elders +; 0x02 - Red X on Eastern | Talk to Sahasrahla +; 0x03 - Pendants and MS | Obtain the master sword +; 0x04 - Master sword on LW | Grab the master sword +; 0x05 - Skull on castle | Kill Agahnim +; 0x06 - Crystal on POD | Get the first crystal +; 0x07 - Crystals | Get all 7 crystals +; 0x08 - Skull on GT | Climb Ganon's Tower +MAPICON = $7EF3C7 + +; Removed mirror portal draw and pyramid open code +org $0ABF90 +MapIconDraw: +{ + ; .dont_draw_link + LDA.l $7EC108 + PHA + + LDA.l $7EC109 + PHA + + LDA.l $7EC10A + PHA + + LDA.l $7EC10B + PHA + + ;----------------------------------- + + .draw_prizes + LDA.b $8A : AND.b #$40 : BEQ .lwprizes + ; X position + LDA.b #$00 : STA.l $7EC10B + LDA.b #$89 : STA.l $7EC10A ; Upper nybble control Zoomed low X pos + ; Y position + LDA.b #$00 : STA.l $7EC109 + LDA.b #$E4 : STA.l $7EC108 ; Upper nybble control Zoomed low Y pos + ; Tile GFX + LDA.b #$66 : STA.b $0D + LDA.b #$34 : STA.b $0C + ; Tile Size + LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 + LDA.b #$0E : STA.l $7EC025 ; OAM Slot used + + JSR HandleMapDrawIcon + + JMP restore_coords_and_exit + + .lwprizes + + ; Draw Crystal 1 + LDA.l $7EF37A : AND #$02 : BNE .skip_draw_0 + ; X position + LDA.b #$00 : STA.l $7EC10B + LDA.b #$87 : STA.l $7EC10A + ; Y position + LDA.b #$04 : STA.l $7EC109 + LDA.b #$01 : STA.l $7EC108 + ; Tile GFX + LDA.b #$64 : STA.b $0D + LDA.b #$38 : STA.b $0C + ; Tile Size + LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 + LDA.b #$0E : STA.l $7EC025 ; OAM Slot used + JSR HandleMapDrawIcon + + .skip_draw_0 + + ; Draw Crystal 2 + LDA.l $7EF37A : AND #$10 : BNE .skip_draw_1 + ; X position (2) + LDA.b #$1E : STA.l $7EC10B + LDA.b #$A0 : STA.l $7EC10A + ; Y position (2) + LDA.b #$09 : STA.l $7EC109 + LDA.b #$74 : STA.l $7EC108 + + LDA.b #$64 : STA.b $0D + LDA.b #$34 : STA.b $0C ; Tile GFX + + LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 + LDA.b #$08 : STA.l $7EC025 + + JSR HandleMapDrawIcon + + .skip_draw_1 + + ; Draw Crystal 3 + LDA.l $7EF37A : AND #$40 : BNE .skip_draw_2 + ; X position + LDA.b #$08 : STA.l $7EC10B + LDA.b #$10 : STA.l $7EC10A + ; Y position + LDA.b #$04 : STA.l $7EC109 + LDA.b #$0E : STA.l $7EC108 + + LDA.b #$64 : STA.b $0D + LDA.b #$34 : STA.b $0C ; Tile GFX + + LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 + LDA.b #$0D : STA.l $7EC025 + + JSR HandleMapDrawIcon + + .skip_draw_2 + + + ; Draw Crystal 4 + LDA.l $7EF37A : AND #$01 : BNE .skip_draw_3 + ; X position + LDA.b #$0E : STA.l $7EC10B + LDA.b #$5E : STA.l $7EC10A + ; Y position + LDA.b #$06 : STA.l $7EC109 + LDA.b #$68 : STA.l $7EC108 + + LDA.b #$64 : STA.b $0D + LDA.b #$3C : STA.b $0C ; Tile GFX + + LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 + LDA.b #$0B : STA.l $7EC025 + + JSR HandleMapDrawIcon + + .skip_draw_3 + + ; Draw Crystal 5 + LDA.l $7EF37A : AND #$20 : BNE .skip_draw_4 + ; X position + LDA.b #$0C : STA.l $7EC10B + LDA.b #$34 : STA.l $7EC10A + ; Y position + LDA.b #$00 : STA.l $7EC109 + LDA.b #$0E : STA.l $7EC108 + + LDA.b #$64 : STA.b $0D + LDA.b #$34 : STA.b $0C ; Tile GFX + + LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 + LDA.b #$09 : STA.l $7EC025 + + JSR HandleMapDrawIcon + + .skip_draw_4 + + ; Draw Crystal 6 + LDA.l $7EF37A : AND #$04 : BNE .skip_draw_5 + ; X position (6) + LDA.b #$0D : STA.l $7EC10B + LDA.b #$05 : STA.l $7EC10A + ; Y position (6) + LDA.b #$0D : STA.l $7EC109 + LDA.b #$09 : STA.l $7EC108 + + LDA.b #$64 : STA.b $0D + LDA.b #$32 : STA.b $0C ; Tile GFX + + LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 + LDA.b #$0A : STA.l $7EC025 + + JSR HandleMapDrawIcon + .skip_draw_5 + + ; Draw Crystal 7 + LDA.l $7EF37A : AND #$08 : BNE .skip_draw_6 + ; X position + LDA.b #$00 : STA.l $7EC10B + LDA.b #$F4 : STA.l $7EC10A + ; Y position + LDA.b #$0D : STA.l $7EC109 + LDA.b #$0E : STA.l $7EC108 + + LDA.b #$64 : STA.b $0D + LDA.b #$32 : STA.b $0C ; Tile GFX + + LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 + LDA.b #$0C : STA.l $7EC025 + + JSR HandleMapDrawIcon + .skip_draw_6 + + ; ; Hall of Secrets X + ; LDA.l $7EF37A : AND #$20 : BNE .skip_draw_x + ; ; X position + ; LDA.b #$0D : STA.l $7EC10B + ; LDA.b #$00 : STA.l $7EC10A + ; ; Y position + ; LDA.b #$03 : STA.l $7EC109 + ; LDA.b #$54 : STA.l $7EC108 + + ; LDA.b #$68 : STA.b $0D + ; LDA.b #$34 : STA.b $0C ; Tile GFX + + ; LDA.b #$00 : STA.b $0B ; 02 = 16x16, 00 = 8x8 + ; LDA.b #$07 : STA.l $7EC025 + + ; JSR HandleMapDrawIcon_noflash + ; .skip_draw_x + + JMP restore_coords_and_exit +} + +HandleMapDrawIcon: +{ + LDA.b $1A + AND.b #$10 + BNE .skip_draw ; Timer to make it flash + .noflash ; ALTERNATE ENTRY POINT + + JSR WorldMapIcon_AdjustCoordinate + LDA.l $7EC025 : TAX + JSR WorldMap_CalculateOAMCoordinates + + BCC .skip_draw + LDA.l $7EC025 : TAX + LDA.b #$02 + JSR WorldMap_HandleSpriteBlink + + .skip_draw + + RTS +} + +FixMaskPaletteOnExit: +{ + JSL Palette_ArmorAndGloves + LDA.l $7EC229 + RTL +} + +org $0ABC76 + JSL FixMaskPaletteOnExit + +org $0AC589 + RTS + +org $0AC38A +restore_coords_and_exit: +{ + PLA : STA.l $7EC10B + PLA : STA.l $7EC10A + PLA : STA.l $7EC109 + PLA : STA.l $7EC108 + RTS +} + +WorldMap_CalculateOAMCoordinates: + +; ========================================================= +; Gfx Notes + +; 0x0C4000 to 0x0C8000 for the map gfx +; patch a new rom with your map data/gfx +; create a new bin file out of these bytes +; OverworldMap.asm you can copy everything from start to line 214 ; and 264 to 272 if you want palettes in asm too -; 0AC727 (pc: 054727) -; to 0AD726 (pc: 055726) -; it should be 0x1000 bytes big -; ============================================================================== +; 0AC727 (pc: 054727) to 0AD726 (pc: 055726) 0x1000 bytes + +; ========================================================= ; LW OVERWORLD MAP -; ============================================================================== +; ========================================================= org $008E54 ;STZ $2115 JSL DMAOwMap @@ -17,9 +280,9 @@ org $00E399 JSL DMAOwMapGfx RTL -; ============================================================================== +; ========================================================= ; DW OVERWORLD MAP -; ============================================================================== +; ========================================================= org $008FF3 RTS ; do not do anything during the DW update we'll handle it in the LW routine @@ -231,260 +494,3 @@ DMAOwMapGfx: org $0ADC27 DWPalettes: incbin world_map/dw_palette.bin - -org $0AC589 - WorldMapIcon_AdjustCoordinate: - -org $0AC51C - WorldMap_HandleSpriteBlink: - -org $0ABF90 -MapIconDraw: -{ - ; .dont_draw_link - LDA.l $7EC108 - PHA - - LDA.l $7EC109 - PHA - - LDA.l $7EC10A - PHA - - LDA.l $7EC10B - PHA - -;Removed mirror portal draw code - -;Removed pyramid open code? - -;----------------------------------- - - .draw_prizes - LDA.b $8A : AND.b #$40 : BEQ .lwprizes - ; X position - LDA.b #$00 : STA.l $7EC10B - LDA.b #$89 : STA.l $7EC10A ; Upper nybble control Zoomed low X pos - ; Y position - LDA.b #$00 : STA.l $7EC109 - LDA.b #$E4 : STA.l $7EC108 ; Upper nybble control Zoomed low Y pos - ; Tile GFX - LDA.b #$66 : STA.b $0D - LDA.b #$34 : STA.b $0C - ; Tile Size - LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 - LDA.b #$0E : STA.l $7EC025 ; OAM Slot used - - JSR HandleMapDrawIcon - - JMP restore_coords_and_exit - - .lwprizes - - ; Draw Crystal 1 - LDA.l $7EF37A : AND #$02 : BNE .skip_draw_0 - ; X position - LDA.b #$00 : STA.l $7EC10B - LDA.b #$87 : STA.l $7EC10A - ; Y position - LDA.b #$04 : STA.l $7EC109 - LDA.b #$01 : STA.l $7EC108 - ; Tile GFX - LDA.b #$64 : STA.b $0D - LDA.b #$38 : STA.b $0C - ; Tile Size - LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 - LDA.b #$0E : STA.l $7EC025 ; OAM Slot used - JSR HandleMapDrawIcon - - .skip_draw_0 - - ; Draw Crystal 2 - LDA.l $7EF37A : AND #$10 : BNE .skip_draw_1 - ; X position (2) - LDA.b #$1E : STA.l $7EC10B - LDA.b #$A0 : STA.l $7EC10A - ; Y position (2) - LDA.b #$09 : STA.l $7EC109 - LDA.b #$74 : STA.l $7EC108 - - LDA.b #$64 : STA.b $0D - LDA.b #$34 : STA.b $0C ; Tile GFX - - LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 - LDA.b #$08 : STA.l $7EC025 - - JSR HandleMapDrawIcon - - .skip_draw_1 - - ; Draw Crystal 3 - LDA.l $7EF37A : AND #$40 : BNE .skip_draw_2 - ; X position - LDA.b #$08 : STA.l $7EC10B - LDA.b #$10 : STA.l $7EC10A - ; Y position - LDA.b #$04 : STA.l $7EC109 - LDA.b #$0E : STA.l $7EC108 - - LDA.b #$64 : STA.b $0D - LDA.b #$34 : STA.b $0C ; Tile GFX - - LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 - LDA.b #$0D : STA.l $7EC025 - - JSR HandleMapDrawIcon - - .skip_draw_2 - - - ; Draw Crystal 4 - LDA.l $7EF37A : AND #$01 : BNE .skip_draw_3 - ; X position - LDA.b #$0E : STA.l $7EC10B - LDA.b #$5E : STA.l $7EC10A - ; Y position - LDA.b #$06 : STA.l $7EC109 - LDA.b #$68 : STA.l $7EC108 - - LDA.b #$64 : STA.b $0D - LDA.b #$3C : STA.b $0C ; Tile GFX - - LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 - LDA.b #$0B : STA.l $7EC025 - - JSR HandleMapDrawIcon - - .skip_draw_3 - - ; Draw Crystal 5 - LDA.l $7EF37A : AND #$20 : BNE .skip_draw_4 - ; X position - LDA.b #$0C : STA.l $7EC10B - LDA.b #$34 : STA.l $7EC10A - ; Y position - LDA.b #$00 : STA.l $7EC109 - LDA.b #$0E : STA.l $7EC108 - - LDA.b #$64 : STA.b $0D - LDA.b #$34 : STA.b $0C ; Tile GFX - - LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 - LDA.b #$09 : STA.l $7EC025 - - JSR HandleMapDrawIcon - - .skip_draw_4 - - ; Draw Crystal 6 - LDA.l $7EF37A : AND #$04 : BNE .skip_draw_5 - ; X position (6) - LDA.b #$0D : STA.l $7EC10B - LDA.b #$05 : STA.l $7EC10A - ; Y position (6) - LDA.b #$0D : STA.l $7EC109 - LDA.b #$09 : STA.l $7EC108 - - LDA.b #$64 : STA.b $0D - LDA.b #$32 : STA.b $0C ; Tile GFX - - LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 - LDA.b #$0A : STA.l $7EC025 - - JSR HandleMapDrawIcon - .skip_draw_5 - - ; Draw Crystal 7 - LDA.l $7EF37A : AND #$08 : BNE .skip_draw_6 - ; X position - LDA.b #$00 : STA.l $7EC10B - LDA.b #$F4 : STA.l $7EC10A - ; Y position - LDA.b #$0D : STA.l $7EC109 - LDA.b #$0E : STA.l $7EC108 - - LDA.b #$64 : STA.b $0D - LDA.b #$32 : STA.b $0C ; Tile GFX - - LDA.b #$02 : STA.b $0B ; 02 = 16x16, 00 = 8x8 - LDA.b #$0C : STA.l $7EC025 - - JSR HandleMapDrawIcon - .skip_draw_6 - - ; ; Hall of Secrets X - ; LDA.l $7EF37A : AND #$20 : BNE .skip_draw_x - ; ; X position - ; LDA.b #$0D : STA.l $7EC10B - ; LDA.b #$00 : STA.l $7EC10A - ; ; Y position - ; LDA.b #$03 : STA.l $7EC109 - ; LDA.b #$54 : STA.l $7EC108 - - ; LDA.b #$68 : STA.b $0D - ; LDA.b #$34 : STA.b $0C ; Tile GFX - - ; LDA.b #$00 : STA.b $0B ; 02 = 16x16, 00 = 8x8 - ; LDA.b #$07 : STA.l $7EC025 - - ; JSR HandleMapDrawIcon_noflash - ; .skip_draw_x - - JMP restore_coords_and_exit -} - -HandleMapDrawIcon: -{ - LDA.b $1A - AND.b #$10 - BNE .skip_draw ; Timer to make it flash - .noflash ; ALTERNATE ENTRY POINT - - JSR WorldMapIcon_AdjustCoordinate - LDA.l $7EC025 : TAX - JSR WorldMap_CalculateOAMCoordinates - - BCC .skip_draw - LDA.l $7EC025 : TAX - LDA.b #$02 - JSR WorldMap_HandleSpriteBlink - - .skip_draw - - RTS -} - -FixMaskPaletteOnExit: -{ - JSL Palette_ArmorAndGloves - LDA.l $7EC229 - RTL -} - -org $0ABC76 - JSL FixMaskPaletteOnExit - -; warnpc $0AC387 - -org $0AC589 - RTS - -org $0AC38A -{ - restore_coords_and_exit: - PLA - STA.l $7EC10B - - PLA - STA.l $7EC10A - - PLA - STA.l $7EC109 - - PLA - STA.l $7EC108 - - RTS -} - -WorldMap_CalculateOAMCoordinates: \ No newline at end of file