diff --git a/Menu/lw_map_names.asm b/Menu/lw_map_names.asm new file mode 100644 index 0000000..63bfc53 --- /dev/null +++ b/Menu/lw_map_names.asm @@ -0,0 +1,65 @@ +OverworldLocationNames: + dw "RANCH___________" ; 00 + dw "RANCH___________" ; 01 + dw "PYRAMID_________" ; 02 + dw "LAND_OF_TREE____" ; 03 + dw "SNOW_MOUNTAIN___" ; 04 + dw "SNOW_MOUNTAIN___" ; 05 + dw "SNOW_MOUNTAIN___" ; 06 + dw "SNOW_MOUNTAIN___" ; 07 + dw "RANCH___________" ; 08 + dw "RANCH___________" ; 09 + dw "INN_____________" ; 0A + dw "KALYXO_CASTLE___" ; 0B + dw "KALYXO_CASTLE___" ; 0C + dw "POTION_SHOP_____" ; 0D + dw "HALL_OF_SECRETS_" ; 0E + dw "CEMETERY________" ; 0F + dw "TOADSTOOL_WOODS_" ; 10 + dw "RANCH_PATH______" ; 11 + dw "CROSSROADS______" ; 12 + dw "KALYXO_CASTLE___" ; 13 + dw "KALYXO_CASTLE___" ; 14 + dw "MOUNTAINSIDE____" ; 15 + dw "PATH_OF_SECRETS_" ; 16 + dw "ANCIENT_SHRINE__" ; 17 + dw "TOADSTOOL_WOODS_" ; 18 + dw "TOADSTOOL_WOODS_" ; 19 + dw "CROSSROADS______" ; 1A + dw "KALYXO_CASTLE___" ; 1B + dw "KALYXO_ROAD_____" ; 1C + dw "CROSSROADS______" ; 1D + dw "SUNKEN_CITY_____" ; 1E + dw "SUNKEN_CITY_____" ; 1F + dw "TOADSTOOL_WOODS_" ; 20 + dw "TOADSTOOL_WOODS_" ; 21 + dw "SWORDSMITHS_____" ; 22 + dw "WAYWARD_VILLAGE_" ; 23 + dw "WAYWARD_VILLAGE_" ; 24 + dw "VILLAGE_ROAD____" ; 25 + dw "SUNKEN_CITY_____" ; 26 + dw "SUNKEN_CITY_____" ; 27 + dw "TOADSTOOL_WOODS_" ; 28 + dw "TOADSTOOL_WOODS_" ; 29 + dw "VILLAGE_ROAD____" ; 2A + dw "WAYWARD_VILLAGE_" ; 2B + dw "WAYWARD_VILLAGE_" ; 2C + dw "VALLEY__________" ; 2D + dw "CITY_ROAD_______" ; 2E + dw "TAIL_PALACE_____" ; 2F + dw "PHANTOM_SHIP____" ; 30 + dw "PHANTOM_SHIP____" ; 31 + dw "SECRET_BEACH____" ; 32 + dw "LOOM_BEACH______" ; 33 + dw "LOOM_BEACH______" ; 34 + dw "BEACH_PATH______" ; 35 + dw "GARO_DESERT_____" ; 36 + dw "GARO_DESERT_____" ; 37 + dw "PHANTOM_SHIP____" ; 38 + dw "PHANTOM_SHIP____" ; 39 + dw "LOST_SEA________" ; 3A + dw "LOOM_BEACH______" ; 3B + dw "LOOM_BEACH______" ; 3C + dw "LOOM_WATERFALL__" ; 3D + dw "GARO_DESERT_____" ; 3E + dw "GARO_DESERT_____" ; 3F \ No newline at end of file diff --git a/Menu/menu.asm b/Menu/menu.asm new file mode 100644 index 0000000..7be9a50 --- /dev/null +++ b/Menu/menu.asm @@ -0,0 +1,730 @@ +;=========================================================== +; The Legend of Zelda: Oracle of Secrets +; ------------NEW Custom Menu ------------ +; +; Details: Complete overhaul of original LTTP menu +; Two Pane Oot/MM inspired design +; Original item layout and designs +; Detailed Quest Status screen +; Player name, location name, and death count +; +; Significant thanks to Kan for helping me craft this menu! +; +;=========================================================== + +pushpc +org $1BD662 ; update in game hud colors + dw hexto555($814f16), hexto555($552903) +org $1BD66A + dw hexto555($d51d00), hexto555($f9f9f9) +org $1DB672 + dw hexto555($d1a452), hexto555($f9f9f9) +org $1DB67A + dw hexto555($5987e0), hexto555($f9f9f9) +org $1DB682 + dw hexto555($7b7b83), hexto555($bbbbbb) +org $1DB68A + dw hexto555($a58100), hexto555($dfb93f) +org $0098AB : db $D8>>1 +org $00F877 : db Menu_Entry>>0 +org $00F883 : db Menu_Entry>>8 +org $00F88F : db Menu_Entry>>16 +org $808B6B : LDX.w #$6040 +org $8DDFB2 : LDA.l Menu_ItemIndex, X +pullpc + +org $248000 +Menu_Tilemap: + incbin "tilemaps/menu_frame.tilemap" + +Menu_QuestIcons: + incbin "tilemaps/quest_icons.tilemap" + +incsrc "menu_gfx_table.asm" +incsrc "menu_draw_items.asm" +incsrc "menu_text.asm" + +Menu_Palette: + ; 7EC502 + ; first tile blank bc kan said so + dw hexto555($814f16) + dw hexto555($552903) + dw hexto555($000000) + dw hexto555($000000) ; transparent + dw hexto555($d51d00) + dw hexto555($f9f9f9) + dw hexto555($000000) + dw hexto555($000000) ; transparent + dw hexto555($d1a452) + dw hexto555($f9f9f9) + dw hexto555($000000) + dw hexto555($000000) ; transparent + dw hexto555($5987e0) + dw hexto555($f9f9f9) + dw hexto555($000000) + dw hexto555($000000) ; transparent + dw hexto555($7b7b83) + dw hexto555($bbbbbb) + dw hexto555($000000) + dw hexto555($000000) ; transparent + dw hexto555($a58100) + dw hexto555($dfb93f) + dw hexto555($000000) + dw hexto555($000000) ; transparent + dw hexto555($814f16) + dw hexto555($013e6e) + dw hexto555($000000) + dw hexto555($000000) ; transparent + dw hexto555($15cd34) + dw hexto555($f9f9f9) + dw hexto555($000000) + +Menu_Entry: + PHB : PHK : PLB + LDA.w $0200 + ASL + TAX + + JSR (.vectors,X) + + SEP #$20 + PLB + RTL + +.vectors + dw Menu_InitGraphics ; 00 + dw Menu_UploadRight ; 01 + dw Menu_UploadLeft ; 02 + dw Menu_ScrollDown ; 03 + dw Menu_ItemScreen ; 04 + dw Menu_ScrollTo ; 05 + dw Menu_StatsScreen ; 06 + dw Menu_ScrollFrom ; 07 + dw Menu_ScrollUp ; 08 + dw Menu_Exit ; 09 + +; =================================================================================== +; 00 MENU INIT GRAPHICS + +Menu_InitGraphics: +{ + LDA.w $0780 : STA.w $00 + INC $0200 +} + +; =================================================================================== +; 01 MENU UPLOAD RIGHT + +Menu_UploadRight: +{ + JSR Menu_DrawBackground + JSR Menu_DrawQuestItems + JSR Menu_DrawCharacterName + JSR DrawQuestIcons + JSR DrawTriforceIcon + JSR DrawPendantIcons + JSR DrawDeathCounter + JSR DrawPlaytimeLabel + JSR DrawScrollsLabel + + ;; heart piece empty, move this later + LDX.w #$2484 : STX.w $149E ; draw empty top left + LDX.w #$6484 : STX.w $14A0 ; draw empty top right + LDX.w #$2485 : STX.w $14DE ; draw empty bottom left + LDX.w #$6485 : STX.w $14E0 ; draw empty bottom right + + JSR DrawHeartPieces + JSR DrawMusicNotes + JSR Menu_DrawQuestStatus + JSR Menu_DrawAreaNameTXT + JSR DrawLocationName + + SEP #$30 + LDA.b #$23 : STA.w $0116 + LDA.b #$01 : STA.b $17 + INC.w $0200 + RTS +} + +; =================================================================================== +; 02 MENU UPLOAD LEFT + +Menu_UploadLeft: +{ + JSR Menu_DrawBackground + JSR DrawYItems + JSR Menu_DrawSelect + JSR Menu_DrawItemName + ;;JSR Debug_Entry + + ; INSERT PALETTE ------- + LDX.w #$3E +.loop + LDA.w Menu_Palette, X + STA.l $7EC502, X + DEX : DEX + BPL .loop + + SEP #$30 + ;----------------------- + LDA.b #$22 : STA.w $0116 + LDA.b #$01 : STA.b $17 : STA.b $15 ; added for palette + INC.w $0200 + RTS +} + +; =================================================================================== +; dw 0, -5, -10, -15, -20, -25, -40, -60, -75, -90, -100, -125, -135, -150, -175, -180, -190, -200, -210, -215, -220, -225, -230, -232, -238 +; dw 0, -5, -10, -15, -20, -40, -60, -75, -90, -100, -125, -150, -175, -190, -200, -210, -220, -225, -230, -232, -250 +Menu_Scroll: + dw 0, -3, -5, -7, -10, -12, -15, -20, -28, -40, -50, -60, -75, -90, -100, -125, -150, -175, -190, -200, -210, -220, -225, -230, -232, -234, -238 + +; =================================================================================== +; 03 MENU SCROLL DOWN + +Menu_ScrollDown: +{ + LDA.b #$11 : STA.w $012F + SEP #$10 + REP #$20 + + LDX.w MenuScrollLevelV + INX : INX + LDA.w Menu_Scroll, X + STA.b $EA + CMP.w #$FF12 : BNE .loop + + JMP Menu_InitItemScreen + +.loop + STX.w MenuScrollLevelV + RTS +} + +; =================================================================================== +; 04 MENU ITEM SCREEN + +Menu_ItemIndex: + db $03 ; slingshot + db $02 ; boomerang + db $0E ; hookshot + db $01 ; bombs + db $11 ; deku mask + db $0B ; bottle1 + db $05 ; firerod (nimbus) + db $06 ; icerod + db $09 ; lamp + db $04 ; hammer + db $0F ; bombos / goron + db $4B ; bottle2 + db $12 ; somaria + db $0D ; byrna + db $0C ; book + db $07 ; feather + db $10 ; bunny hood + db $8B ; bottle3 + db $08 ; ocarina + db $14 ; mirror + db $0B ; shovel + db $0A ; powder + db $13 ; stone mask + db $CB ; bottle4 + +Menu_AddressIndex: + db $7EF340 ; bow + db $7EF341 ; boom + db $7EF342 ; hookshot + db $7EF343 ; bombs + db $7EF348 ; deku mask + db $7EF35C ; bottle1 + db $7EF345 ; firerod (nimbus) + db $7EF346 ; icerod + db $7EF34A ; lamp + db $7EF34B ; hammer + db $7EF347 ; bombos / goron + db $7EF35D ; bottle2 + db $7EF350 ; somaria + db $7EF351 ; byrna + db $7EF34E ; book + db $7EF34D ; feather + db $7EF349 ; bunny hood + db $7EF35E ; bottle3 + db $7EF34C ; ocarina + db $7EF353 ; mirror + db $7EF34F ; shovel + db $7EF344 ; powder + db $7EF352 ; stone mask + db $7EF35F ; bottle4 + +Menu_ItemCursorPositions: + dw menu_offset(6,1) ; bow + dw menu_offset(6,4) ; boom + dw menu_offset(6,7) ; hookshot + dw menu_offset(6,10) ; bombs + dw menu_offset(6,13) ; deku mask + dw menu_offset(6,16) ; bottle1 + dw menu_offset(9,1) ; firerod + dw menu_offset(9,4) ; icerod + dw menu_offset(9,7) ; lamp + dw menu_offset(9,10) ; hammer + dw menu_offset(9,13) ; goron + dw menu_offset(9,16) ; bottle2 + dw menu_offset(12,1) ; somaria + dw menu_offset(12,4) ; byrna + dw menu_offset(12,7) ; book + dw menu_offset(12,10) ; feather + dw menu_offset(12,13) ; bunny hood + dw menu_offset(12,16) ; bottle3 + dw menu_offset(15,1) ; flute + dw menu_offset(15,4) ; mirror + dw menu_offset(15,7) ; shovel + dw menu_offset(15,10) ; powder + dw menu_offset(15,13) ; stone mask + dw menu_offset(15,16) ; bottle + +; ---------------------- +Menu_FindNextItem: + LDY.w $0202 : INY + CPY.b #$19 : BCC .no_reset + LDY.b #$01 +.no_reset + STY.w $0202 + LDX.w Menu_AddressIndex-1, Y + LDA.l $7EF300, X + BEQ Menu_FindNextItem + RTS +; ---------------------- +Menu_FindPrevItem: + LDY.w $0202 : DEY : BNE .no_reset + LDY.b #$18 +.no_reset + STY.w $0202 + LDX.w Menu_AddressIndex-1, Y + LDA.l $7EF300, X + BEQ Menu_FindPrevItem + RTS +; ---------------------- +Menu_FindNextDownItem: + LDA.w $0202 : CLC : ADC.b #$06 + CMP.b #$19 : BCC .no_reset + SBC.b #$18 +.no_reset + TAY : STY.w $0202 + LDX.w Menu_AddressIndex-1, Y + LDA.l $7EF300, X + BEQ Menu_FindNextUpItem + RTS +; ---------------------- +Menu_FindNextUpItem: + LDA.w $0202 : SEC : SBC.b #$06 + BPL .no_reset : BNE .no_reset + CLC : ADC.b #$18 +.no_reset + TAY : STY.w $0202 + LDX.w Menu_AddressIndex-1, Y + LDA.l $7EF300, X + BEQ Menu_FindNextDownItem + RTS +; ---------------------- +Menu_DeleteCursor: + REP #$30 + LDX.w Menu_ItemCursorPositions-2, Y + + LDA.w #$20F5 + STA.w $1108, X + STA.w $1148, X + STA.w $114E, X + STA.w $110E, X + STA.w $11C8, X + STA.w $1188, X + STA.w $118E, X + STA.w $11CE, X + SEP #$30 + STZ $0207 + RTS +; ---------------------- +Menu_InitItemScreen: +{ + SEP #$30 + LDY.w $0202 : BNE .all_good + + .loop + INY : CPY.b #$25 : BCS .bad + LDX.w Menu_AddressIndex-1, Y + LDA.l $7EF300, X + BEQ .loop + + STY.w $0202 + BRA .all_good + + .bad + STZ.w $0202 + + .all_good + + STZ $0207 + LDA.b #$04 + STA.w $0200 + RTS +} +; ---------------------- +Menu_ItemScreen: +{ + JSR Menu_CheckHScroll + + INC $0207 + LDA.w $0202 : BEQ .no_inputs + + ASL : TAY + LDA.b $F4 + LSR : BCS .move_right + LSR : BCS .move_left + LSR : BCS .move_down + LSR : BCS .move_up + BRA .no_inputs + +.move_right + JSR Menu_DeleteCursor + JSR Menu_FindNextItem + BRA .draw_cursor + +.move_left + JSR Menu_DeleteCursor + JSR Menu_FindPrevItem + BRA .draw_cursor + +.move_down + JSR Menu_DeleteCursor + JSR Menu_FindNextDownItem + BRA .draw_cursor + +.move_up + JSR Menu_DeleteCursor + JSR Menu_FindNextUpItem + BRA .draw_cursor + +.draw_cursor + LDA.b #$20 : STA.w $012F ; cursor move sound effect +.no_inputs + + SEP #$30 + LDA.w $0202 + ASL : TAY + REP #$10 + LDX.w Menu_ItemCursorPositions-2, Y + + LDA.b #$20 : BIT.w $0207 + + REP #$20 + + BEQ .no_delete + + LDA.w #$20F5 + STA.w $1108, X + STA.w $1148, X + STA.w $114E, X + STA.w $110E, X + STA.w $11C8, X + STA.w $1188, X + STA.w $118E, X + STA.w $11CE, X + BRA .done + + +.no_delete + LDA.w #$3060 : STA.w $1108, X ; corner + LDA.w #$3070 : STA.w $1148, X + + LDA.w #$7060 : STA.w $110E, X ; corner + LDA.w #$7070 : STA.w $114E, X + + LDA.w #$3070 : STA.w $1188, X + LDA.w #$B060 : STA.w $11C8, X ; corner + + LDA.w #$7070 : STA.w $118E, X + LDA.w #$F060 : STA.w $11CE, X ; corner + +.done + JSR Menu_DrawItemName + SEP #$20 + LDA.b #$22 : STA.w $0116 + LDA.b #$01 : STA.b $17 + + RTS +} + +; =================================================================================== +; 05 MENU SCROLL TO + +Menu_ScrollTo: +{ + SEP #$20 + JSR Menu_ScrollHorizontal + BCC .not_done + + INC.w $0200 + +.not_done + RTS +} + +; =================================================================================== +; 06 MENU STATS SCREEN + +Menu_StatsScreen: +{ + JSR Menu_CheckHScroll + RTS +} + +; ===================================== + +Menu_CheckHScroll: +{ + LDA.b $F4 + BIT.b #$10 : BNE .leave_menu + LDA.b $F6 + BIT.b #$20 : BNE .left + BIT.b #$10 : BNE .right + + RTS + +.left + REP #$20 + LDA.w #$FFF8 + BRA .merge + +.right + REP #$20 + LDA.w #$0008 + +.merge + STA.w MenuScrollHDirection + + SEP #$30 + INC.w $0200 + LDA.b #$06 : STA.w $012F + RTS + +.leave_menu + LDA.b #$08 + STA.w $0200 + RTS +} + +; ===================================== + +Menu_ScrollHorizontal: +{ + REP #$21 ; set A to 16 bit, clear carry flag + + LDA.w $E4 ; BG3 Horizontal Scroll Value + ADC.w MenuScrollHDirection ; Direction set by Menu_CheckHScroll + AND.w #$01FF + STA.b $E4 + AND.w #$00FF + BNE .loop + + SEC + RTS + +.loop + CLC + RTS +} + +; =================================================================================== +; 07 MENU SCROLL FROM + +Menu_ScrollFrom: +{ + JSR Menu_ScrollHorizontal + BCC .not_done + + JMP Menu_InitItemScreen + +.not_done + RTS +} + +; =================================================================================== +; 08 MENU SCROLL UP + +Menu_ScrollUp: +{ + LDA.b #$12 : STA.w $012F ; play menu exit sound effect + SEP #$10 + REP #$20 + + LDX.w MenuScrollLevelV + LDA.w Menu_Scroll, X + STA.b $EA + BNE .loop + STZ.b $E4 + + INC.w $0200 + RTS + +.loop + DEX : DEX : STX.w MenuScrollLevelV + + JSL Menu_UpdateHudItem + RTS +} + +; =================================================================================== +; incomplete :( +Menu_CheckBottle: +{ + ;; 7F5021 7ED101 + STZ.w $7F5021 + LDA.w $0202 : CMP.b #$15 : BNE .not_shovel + LDA.b #$0001 : STA.w $7F5021 + +.not_shovel + + LDA.w $0202 : CMP.b #$19 : BNE .not_flute + LDA.w $7EF34C : JML $70A31D + +.not_flute + + RTS +} + +; =================================================================================== +; 09 MENU EXIT + +Menu_Exit: +{ + ;set $0303 by using $0202 to index table on exit + JSR Menu_CheckBottle + LDY.w $0202 : BEQ .no_item + DEY + LDA.w Menu_ItemIndex, Y + STA.w $0303 + +.no_item + REP #$20 + STZ $0200 + ;;STZ $11 + LDA.w $010C + STA.b $10 + + LDX.b #$3E + .loop + + LDA.l $7EC300, X : STA.l $7EC500, X + DEX : DEX + BPL .loop + + INC.b $15 + INC.b $16 + + RTS +} +; =================================================================================== +; XX MENU HIJACK HUD + +HudItems: + dw BowsGFX + dw BoomsGFX + dw HookGFX + dw BombsGFX + dw DekuMaskGFX + dw BottlesGFX + dw Fire_rodGFX + dw Ice_rodGFX + dw LampGFX + dw HammerGFX + dw GoronMaskGFX + dw BottlesGFX + dw SomariaGFX + dw ByrnaGFX + dw BookGFX + dw JumpFeatherGFX + dw BunnyHoodGFX + dw BottlesGFX + dw OcarinaGFX + dw MirrorGFX + dw ShovelGFX + dw PowderGFX + dw StoneMaskGFX + dw BottlesGFX + + ; LDA.w $0202 + ; ASL : TAX + ; LDY.w HudItems-2, X + +Menu_UpdateHudItem: +{ + PHB + PHK + PLB + ; print pc + ; SEP #$30 + ; LDA.b #$7E : STA.b $0C ; set the indirect bank + ; REP #$30 + + ; LDA.w $0202 + ; ASL : TAX + ; LDY.w HudItems-2, X + ; STY.b $00 + + ; LDY.w $0202 + ; LDX.w Menu_AddressIndex-1, Y + ; LDA.l $7EF300, X + ; STA.w $08 + + ; LDA.b [$08] + ; ADC.b $00 + ; TAY + + REP #$30 + LDA.w $0202 + ASL : TAX + LDY.w HudItems-2, X + + LDA.w $0000,Y : STA.l $7EC778 + LDA.w $0002,Y : STA.l $7EC77A + LDA.w $0004,Y : STA.l $7EC7B8 + LDA.w $0006,Y : STA.l $7EC7BA + SEP #$30 + + PLB + RTL +} + +; =================================================================================== + +Menu_DrawBackground: +{ + REP #$30 + LDX.w #$FE ; $1700-17FF + +.loop + LDA.w Menu_Tilemap, X + STA.w $1000, X + LDA.w Menu_Tilemap+$100, X + STA.w $1100, X + LDA.w Menu_Tilemap+$200, X + STA.w $1200, X + LDA.w Menu_Tilemap+$300, X + STA.w $1300, X + LDA.w Menu_Tilemap+$400, X + STA.w $1400, X + LDA.w Menu_Tilemap+$500, X + STA.w $1500, X + LDA.w Menu_Tilemap+$600, X + STA.w $1600, X + LDA.w Menu_Tilemap+$700, X + STA.w $1700, X + + DEX : DEX + BPL .loop + + RTS +} + +;=============================================================================== + +incsrc "lw_map_names.asm" \ No newline at end of file diff --git a/Menu/menu_draw_items.asm b/Menu/menu_draw_items.asm new file mode 100644 index 0000000..a3ae169 --- /dev/null +++ b/Menu/menu_draw_items.asm @@ -0,0 +1,363 @@ +;=============================================================================== + +DrawMenuItem: + STA.b $08 + STY.b $00 + + LDA.b [$08] + AND.w #$00FF + + BNE .not_zero + + LDY.w #NothingGFX + BRA .draw + +.not_zero + DEC + + ASL + ASL + ASL + ADC.b $00 + TAY + +.draw + LDA.w $0000,Y : STA.w $1108,X + LDA.w $0002,Y : STA.w $110A,X + LDA.w $0004,Y : STA.w $1148,X + LDA.w $0006,Y : STA.w $114A,X + + RTS + +;=============================================================================== + +DrawQuestIcons: + LDX.w #$10 + +.loop + LDA.w Menu_QuestIcons, X + STA.w $1364, X + LDA.w Menu_QuestIcons+$10, X + STA.w $13A4, X + LDA.w Menu_QuestIcons+$20, X + STA.w $13E4, X + LDA.w Menu_QuestIcons+$30, X + STA.w $1424, X + LDA.w Menu_QuestIcons+$40, X + STA.w $1464, X + LDA.w Menu_QuestIcons+$50, X + STA.w $14A4, X + LDA.w Menu_QuestIcons+$60, X + STA.w $14E4, X + DEX : DEX : BPL .loop + + LDA.w #$20F5 : STA.w $13B4 : STA.w $13F4 : STA.w $1474 : STA.w $14B4 + + RTS + +;=============================================================================== + +DrawTriforceIcon: + LDA.l $7EF37A + LDX.w #$3534 + LDY.w #$3544 + + LSR : BCC + + STX.w $1366 : INX : STX.w $1368 : DEX + STY.w $13A6 : INY : STY.w $13A8 : DEY + ++ LSR : BCC + + STX.w $136A : INX : STX.w $136C : DEX + STY.w $13AA : INY : STY.w $13AC : DEY + ++ LSR : BCC + + STX.w $136E : INX : STX.w $1370 : DEX + STY.w $13AE : INY : STY.w $13B0 : DEY + ++ LSR : BCC + + STX.w $13E4 : INX : STX.w $13E6 : DEX + STY.w $1424 : INY : STY.w $1426 : DEY + ++ LSR : BCC + + STX.w $13E8 : INX : STX.w $13EA : DEX + STY.w $1428 : INY : STY.w $142A : DEY + ++ LSR : BCC + + STX.w $13EC : INX : STX.w $13EE : DEX + STY.w $142C : INY : STY.w $142E : DEY + ++ LSR : BCC + + STX.w $13F0 : INX : STX.w $13F2 : DEX + STY.w $1430 : INY : STY.w $1432 : DEY + ++ + RTS + +;=============================================================================== + +DrawPendantIcons: + LDA.l $7EF374 + LSR : BCC + + LDX.w #$2502 : STX.w $14A4 : INX : STX.w $14A6 + LDX.w #$2512 : STX.w $14E4 : INX : STX.w $14E6 + ++ LSR : BCC + + LDX.w #$3D00 : STX.w $14AA : INX : STX.w $14AC + LDX.w #$3D10 : STX.w $14EA : INX : STX.w $14EC + ++ LSR : BCC + + LDX.w #$2D06 : STX.w $14B0 : INX : STX.w $14B2 + LDX.w #$2D16 : STX.w $14F0 : INX : STX.w $14F2 + ++ RTS + +;=============================================================================== + +; V H O P P P T T T T T T T T T T <- tile format +; V = Vertical Flip +; H = Horizontal Flip +; O = Priority +; P = Palette 0 to 7 +; T = Tile (which is normally called C for Character) 0 to 1023 +; E000 is T = 0 +; E100 would be T = 16 + +DrawHeartPieces: + LDA.l $7EF36B + AND.w #$00FF + CMP.w #3 : BEQ .top_right + CMP.w #1 : BEQ .top_left + BCS .bottom_left + RTS + +.top_right + LDX.w #$64AD : STX.w $14A0 +.bottom_left + LDX.w #$24AE : STX.w $14DE +.top_left + LDX.w #$24AD : STX.w $149E + RTS + +;=============================================================================== + +DrawMusicNotes: + LDA.w #$01 + STA.w MusicNoteValue + LDA.w #MusicNoteValue + LDX.w #menu_offset(17,8) + LDY.w #QuarterNoteGFX + JSR DrawMenuItem + + LDA.w #$02 + STA.w MusicNoteValue + LDA.w #MusicNoteValue + LDX.w #menu_offset(17,11) + LDY.w #QuarterNoteGFX + JSR DrawMenuItem + + LDA.w #$03 + STA.w MusicNoteValue + LDA.w #MusicNoteValue + LDX.w #menu_offset(17,14) + LDY.w #QuarterNoteGFX + JSR DrawMenuItem + + LDA.w #$04 + STA.w MusicNoteValue + LDA.w #MusicNoteValue + LDX.w #menu_offset(17,17) + LDY.w #QuarterNoteGFX + JSR DrawMenuItem + + RTS + +;=============================================================================== + +DrawYItems: + ; Set up the bank of our indirect address + SEP #$30 + LDA.b #$7E : STA.b $0A + + REP #$30 + + LDA.w #$7EF340 + LDX.w #menu_offset(7,2) + LDY.w #BowsGFX + JSR DrawMenuItem + + LDA.w #$7EF341 + LDX.w #menu_offset(7,5) + LDY.w #BoomsGFX + JSR DrawMenuItem + + LDA.w #$7EF342 + LDX.w #menu_offset(7,8) + LDY.w #HookGFX + JSR DrawMenuItem + + LDA.l $7EF343 + CMP.w #$00 : BEQ .no_bomb + LDA.w #$0001 + STA.w MenuItemValueSpoof + LDA.w #MenuItemValueSpoof + LDX.w #menu_offset(7,11) + LDY.w #BombsGFX + JSR DrawMenuItem +.no_bomb + + LDA.w #$7EF348 + LDX.w #menu_offset(7,14) + LDY.w #DekuMaskGFX + JSR DrawMenuItem + + LDA.w #$7EF35C + LDX.w #menu_offset(7,17) + LDY.w #BottlesGFX + JSR DrawMenuItem + + LDA.w #$7EF354 + LDX.w #menu_offset(10,20) + LDY.w #PowerGloveGFX + JSR DrawMenuItem + + LDA.w #$7EF345 + LDX.w #menu_offset(10,2) + LDY.w #Fire_rodGFX + JSR DrawMenuItem + + LDA.w #$7EF346 + LDX.w #menu_offset(10,5) + LDY.w #Ice_rodGFX + JSR DrawMenuItem + + LDA.l $7EF34A + CMP.w #$00 : BEQ .no_lamp + DEC + .no_lamp + STA.w MenuItemValueSpoof + LDA.w #MenuItemValueSpoof + LDX.w #menu_offset(10,8) + LDY.w #LampGFX + JSR DrawMenuItem + + LDA.w #$7EF34B + LDX.w #menu_offset(10,11) + LDY.w #HammerGFX + JSR DrawMenuItem + + LDA.w #$7EF347 + LDX.w #menu_offset(10,14) + LDY.w #GoronMaskGFX + JSR DrawMenuItem + + LDA.w #$7EF35D + LDX.w #menu_offset(10,17) + LDY.w #BottlesGFX + JSR DrawMenuItem + + LDA.w #$7EF355 + LDX.w #menu_offset(12,20) + LDY.w #PegasusBootsGFX + JSR DrawMenuItem + + LDA.w #$7EF350 + LDX.w #menu_offset(13,2) + LDY.w #SomariaGFX + JSR DrawMenuItem + + LDA.w #$7EF351 + LDX.w #menu_offset(13,5) + LDY.w #ByrnaGFX + JSR DrawMenuItem + + ; LDA.w #$7EF34C + ; LDX.w #menu_offset(13,8) + ; LDY.w #ShovelGFX + ; JSR DrawMenuItem + + LDA.w #$7EF34E + LDX.w #menu_offset(13,8) + LDY.w #BookGFX + JSR DrawMenuItem + + LDA.w #$7EF34D + LDX.w #menu_offset(13,11) + LDY.w #JumpFeatherGFX + JSR DrawMenuItem + + LDA.w #$7EF349 + LDX.w #menu_offset(13,14) + LDY.w #BunnyHoodGFX + JSR DrawMenuItem + + LDA.w #$7EF35E + LDX.w #menu_offset(13,17) + LDY.w #BottlesGFX + JSR DrawMenuItem + + LDA.w #$7EF356 + LDX.w #menu_offset(14,20) + LDY.w #FlippersGFX + JSR DrawMenuItem + + LDA.w #$7EF34C ; ocarina + LDX.w #menu_offset(16,2) + LDY.w #ShovelGFX + JSR DrawMenuItem + + LDA.w #$7EF353 + LDX.w #menu_offset(16,5) + LDY.w #MirrorGFX + JSR DrawMenuItem + + LDA.w #$7EF34F + LDX.w #menu_offset(16,8) + LDY.w #ShovelGFX + JSR DrawMenuItem + + LDA.w #$7EF344 + LDX.w #menu_offset(16,11) + LDY.w #PowderGFX + JSR DrawMenuItem + + LDA.w #$7EF352 + LDX.w #menu_offset(16,14) + LDY.w #StoneMaskGFX + JSR DrawMenuItem + + LDA.w #$7EF35F + LDX.w #menu_offset(16,17) + LDY.w #BottlesGFX + JSR DrawMenuItem + + LDA.w #$7EF357 + LDX.w #menu_offset(16,20) + LDY.w #MoonPearlGFX + JSR DrawMenuItem + + RTS + +Menu_DrawQuestItems: + SEP #$30 + LDA.b #$7E : STA.b $0A + REP #$30 + + LDA.w #$7EF359 + LDX.w #menu_offset(14,2) + LDY.w #SwordGFX + JSR DrawMenuItem + + LDA.w #$7EF35A + LDX.w #menu_offset(14,5) + LDY.w #ShieldGFX + JSR DrawMenuItem + + LDA.l $7EF35B + INC + STA.w MenuItemValueSpoof + LDA.w #MenuItemValueSpoof + LDX.w #menu_offset(14,8) + LDY.w #TunicGFX + JSR DrawMenuItem + + RTS \ No newline at end of file diff --git a/Menu/menu_gfx_table.asm b/Menu/menu_gfx_table.asm new file mode 100644 index 0000000..cf81aed --- /dev/null +++ b/Menu/menu_gfx_table.asm @@ -0,0 +1,156 @@ +;=============================================================================== +; Item graphics +; Lack of an item will be handled by the "NothingGFX" data +; Everything else will be used as follows: +; dw top left, top right, bottom left, bottom right ; val = 1 +; dw top left, top right, bottom left, bottom right ; val = 2 +; etc +;=============================================================================== + +NothingGFX: + dw $20F5, $20F5, $20F5, $20F5 ; Nothing + +BowsGFX: + dw $28BA, $28E9, $28E8, $28CB ; Empty bow + dw $297C, $297D, $2849, $284A ; NEW slingshot + dw $28BA, $284A, $2849, $28CB ; Bow and arrows + dw $28BA, $28E9, $28E8, $28CB ; Empty silvers bow + dw $28BA, $28BB, $24CA, $28CB ; Silver bow and arrows + +BoomsGFX: + dw $2CB8, $2CB9, $2CC9, $ACB9 ; NEW Blue boomerang + dw $24B8, $24B9, $24C9, $A4B9 ; NEW red boomerang + dw $3CB8, $3CB9, $3CC9, $BCB9 ; NEW green boomerang + +HookGFX: + dw $24F5, $24F6, $24C0, $24F5 ; Hookshot + dw $2C17, $3531, $2D40, $3541 ; Ball & Chain + +BombsGFX: + dw $2CB2, $2CB3, $2CC2, $6CC2 ; Bombs + +PowderGFX: + dw $2444, $2445, $2446, $2447 ; Mushroom + dw $283B, $283C, $283D, $283E ; NEW Powder + +Fire_rodGFX: + dw $24B0, $24B1, $24C0, $24C1 ; Fire rod + +Ice_rodGFX: + dw $2CB0, $2CBE, $2CC0, $2CC1 ; Ice rod + +; formerly Bombos +GoronMaskGFX: + dw $2867, $6867, $2877, $6877 ; Goron Mask + +; formerly Quake +DekuMaskGFX: + dw $2066, $6066, $2076, $6076 ; Deku Mask + +; formerly Ether +BunnyHoodGFX: + dw $3469, $7469, $3479, $7479 ; Bunny Hood + +LampGFX: + dw $24BC, $24BD, $24CC, $64CC ; New Lamp + +HammerGFX: + dw $24B6, $24B7, $20C6, $24C7 ; NEW Hammer + +ShovelGFX: + dw $30D0, $20D1, $30E0, $30E1 ; NEW Shovel + dw $2CD4, $2CD5, $2CE4, $2CE5 ; Flute + dw $2CD4, $2CD5, $2CE4, $2CE5 ; Flute (active) + +OcarinaGFX: + dw $2CD4, $2CD5, $2CE4, $2CE5 ; Flute + +; formerly fishing net +JumpFeatherGFX: + dw $2840, $2841, $3C42, $3C43 ; Roc's Feather + +BookGFX: + dw $3CA5, $3CA6, $3CD8, $3CD9 ; Book of Mudora + +BottlesGFX: + dw $2044, $2045, $2046, $2047 ; Mushroom + dw $2837, $2838, $2CC3, $2CD3 ; Empty bottle + dw $24D2, $64D2, $24E2, $24E3 ; Red potion + dw $3CD2, $7CD2, $3CE2, $3CE3 ; Green potion + dw $2CD2, $6CD2, $2CE2, $2CE3 ; Blue potion + dw $2855, $6855, $2C57, $2C5A ; Fairy + dw $2837, $2838, $2839, $283A ; Bee + dw $2837, $2838, $2839, $283A ; Good bee + +SomariaGFX: + dw $24DC, $24DD, $24EC, $24ED ; Cane of Somaria + +ByrnaGFX: + dw $2CDC, $2CDD, $2CEC, $2CED ; Cane of Byrna + +; formerly Magic Cape +StoneMaskGFX: + dw $30B4, $30B5, $30C4, $30C5 ; Stone Mask + +MirrorGFX: + dw $2C72, $2C73, $2C62, $2C63 ; Mirror + dw $2C62, $2C63, $2C72, $2C73 ; Mirror + +; Collectibles + +QuarterNoteGFX: + dw $30AA, $306B, $307A, $306A ; Gray Note + dw $2CAA, $2C6B, $2C7A, $2C6A ; Blue Note + dw $24AA, $246B, $247A, $246A ; Red Note + dw $3CAA, $3C6B, $3C7A, $3C6A ; Green Note + dw $34AA, $346B, $347A, $346A ; Gold Note + +TradeQuestGFX: + dw $3D36, $3D37, $3D46, $3D47 ; Yoshi Doll + dw $28DE, $28DF, $28EE, $28EF ; Tasty Meat + dw $346C, $346D, $347C, $347D ; This shit is Bananas! + dw $241E, $241F, $242E, $242F ; Pretty Bow + dw $3D7E, $3D7F, $356C, $756C ; Pineapple + +; Equipped Items + +PegasusBootsGFX: + dw $2429, $242A, $242B, $242C ; Pegasus Boots + +PowerGloveGFX: + dw $30DA, $30DB, $30EA, $30EB ; Worn-out Glove + dw $28DA, $28DB, $28EA, $28EB ; Power Glove + +FlippersGFX: + dw $2C9A, $2C9B, $2C9D, $2C9E + +MoonPearlGFX: + dw $2433, $2434, $2435, $2436 + +SwordGFX: + dw $2C64, $2CCE, $2C75, $EC64 ; level one + dw $2C64, $2C65, $2C74, $2D26 ; level two + dw $3464, $3465, $3475, $3429 ; level three + dw $3464, $3465, $3475, $3429 ; level four + +ShieldGFX: + dw $2CFD, $6CFD, $2CFE, $6CFE ; baby shield + dw $2CFF, $6CFF, $2C9F, $6C9F ; island shield + dw $2C80, $2C81, $2C8D, $2C8E ; mirror shield + +TunicGFX: + dw $3C68, $7C68, $3C78, $7C78 ; green tunic + dw $2C68, $6C68, $2C78, $6C78 ; blue tunic + dw $3468, $7468, $3478, $7478 ; gold tunic + +; still some more to go + +SelectItemTXT: + dw $2562, $2554, $255B, $2554, $2552, $2563, $2417, $2417, $2558, $2563, $2554, $255C ; Select Item + +QuestStatusTXT: + dw $2560, $2564, $2554, $2562, $2563, $2417, $2562, $2563, $2550, $2563, $2564, $2562 + +AreaNameTXT: + dw $243F, $2550, $2561, $2554, $2550, $2417, $255D, $2550, $255C, $2554, $241C, $2430, $2430, $2430, $2430, $2430, $2430, $2430, $2430, $2430 + ; 241D 241D 241D 241D 241D 241D 241D 241D \ No newline at end of file diff --git a/Menu/menu_text.asm b/Menu/menu_text.asm new file mode 100644 index 0000000..4d2e0ce --- /dev/null +++ b/Menu/menu_text.asm @@ -0,0 +1,256 @@ +;==================================== +; Text Routines +;==================================== + +; Alphabet manual writing function +'A' = $2550 +'B' = $2551 +'C' = $2552 +'D' = $2553 +'E' = $2554 +'F' = $2555 +'G' = $2556 +'H' = $2557 +'I' = $2558 +'J' = $2559 +'K' = $255A +'L' = $255B +'M' = $255C +'N' = $255D +'O' = $255E +'P' = $255F +'Q' = $2560 +'R' = $2561 +'S' = $2562 +'T' = $2563 +'U' = $2564 +'V' = $2565 +'W' = $2566 +'X' = $2567 +'Y' = $2568 +'Z' = $2569 +'.' = $256A +':' = $256B +'0' = $2570 +'1' = $2571 +'2' = $2572 +'3' = $2573 +'4' = $2574 +'5' = $2575 +'6' = $2576 +'7' = $2577 +'8' = $2578 +'9' = $2579 +'_' = $20F5 + +; =================================================================================== + +DeathLabel: + dw "DEATHS:_" + +DrawDeathCounter: + REP #$30 + LDX.w #$0E + +.draw2 + LDA.w DeathLabel, X + STA.w $13CC, X + DEX : DEX : BPL .draw2 + + RTS + +; =================================================================================== + +ScrollsLabel: + dw "SCROLLS:_" + +DrawScrollsLabel: + LDX.w #$10 + +.draw2 + LDA.w ScrollsLabel, X + STA.w $140C, X + DEX : DEX : BPL .draw2 + + RTS + +; =================================================================================== + +PlaytimeLabel: + dw "PLAYTIME:_" + +DrawPlaytimeLabel: + LDX.w #$10 + +.draw2 + LDA.w PlaytimeLabel, X + STA.w $1692, X + DEX : DEX : BPL .draw2 + + RTS + +; =================================================================================== + +Menu_ItemNames: + dw "__SLINGSHOT___ " + dw "__BOOMERANG___ " + dw "___HOOKSHOT___ " + dw "____BOMBS_____ " + dw "__DEKU_MASK___ " + dw "____BOTTLE____ " + dw "___FIRE_ROD___ " + dw "___ICE_ROD____ " + dw "_____LAMP_____ " + dw "____HAMMER____ " + dw "__GORON_MASK__ " + dw "____BOTTLE____ " + dw "___SOMARIA____ " + dw "____BYRNA_____ " + dw "_SECRET_TOME__ " + dw "_JUMP_FEATHER_ " + dw "__BUNNY_HOOD__ " + dw "____BOTTLE____ " + dw "___OCARINA____ " + dw "_MAGIC_MIRROR_ " + dw "____SHOVEL____ " + dw "_MAGIC_POWDER_ " + dw "__STONE_MASK__ " + dw "____BOTTLE____ " + +Menu_DrawItemName: + LDA.w $0202 : DEC + ASL : ASL : ASL : ASL : ASL + LDY.w #$000 + TAX +.loop + LDA.w Menu_ItemNames, X ; Load your text character + STA.w $1692, Y ; <- into the buffer + INX : INX + INY : INY : CPY #$001C : BCC .loop + RTS + +; =================================================================================== + +; ;LDX.w $7E00A0 ; load room number +;------------------------------------- +TestLocationName: + dw "YOUR_HOUSE__" +;------------------------------------- + +DrawLocationName: +{ + REP #$30 + LDA $1B ; check if indoors or outdoors + AND.w #$00FF ; isolate bit + CMP.w #$01 ; if 1, then indoors + BEQ .indoors + + LDA.b $8A + ASL : ASL : ASL : ASL : ASL + LDY.w #$000 + TAX +.loop + LDA.w OverworldLocationNames, X ; Load your text character + STA.w $12CC, Y ; <- into the buffer + INX : INX + INY : INY : CPY #$0020 : BCC .loop + RTS + +.indoors + LDX.w #$16 + + .loop2 + LDA.w TestLocationName, X + STA.w $12CC, X + + DEX : DEX + BPL .loop2 + + RTS +} + + +; =================================================================================== + +Menu_DrawSelect: + REP #$30 + LDX.w #$16 + +.loop + LDA.w SelectItemTXT, X + STA.w $1194, X + + DEX : DEX + BPL .loop + + RTS + +; =================================================================================== + +Menu_DrawQuestStatus: + REP #$30 + LDX.w #$16 + +.loop + LDA.w QuestStatusTXT, X + STA.w $1194, X + + DEX : DEX + BPL .loop + + RTS + +; =================================================================================== + +Menu_DrawAreaNameTXT: + REP #$30 + LDX.w #$26 + +.loop + LDA.w AreaNameTXT, X + STA.w $128C, X + + DEX : DEX + BPL .loop + + RTS + +; =================================================================================== + +; Player's Name +; $3D9-$3E4: See appendix for listing of character codes. Note each of the six letters is represented by a 16-bit number. +; 00-A 01-B 02-C 03-D 04-E 05-F 06=G 07-H 08-I^ 09-J 0A-K 0B-L 0C-M 0D-N OE-O OF-P +; 10-?? +; 20-Q 21-R 22-S 23-T 24-U 25-V 26-W 27-X 28-Y 29-Z 2A-a 2B-b-2C-c 2D-d 2E-e 2F-f +; 40-g 41-h 42-k 43-j 44-i 45-l 46-m 47-n 48-o 49-p 4A-q 4B-r 4C-s 4D-t 4E-u 4F-v + +; 60-w 61-x 62-y 63-z 64-0 65-1 66-2 67-3 68-4 69-5 6A-6 6B-7 6C-8 6D-9 6E-"?" 6F-"!" +; 80-"-" 81-"." 82-"," 85-"(" 86-")" + +;B1-blank^ + +; ^This code is not the canon encoding of this character. ex. AF is the proper "I". 08 is not. + +Menu_DrawCharacterName: + REP #$30 + + LDX.w #$C +.loop + LDA.l $7EF3D9, X + CMP.w #$AF : BEQ .fix_i + CMP.w #$10 : BCC .skip ; handle P -> Q gap + SBC.b #$10 + CLC + CMP.w #$2A : BCS .fix_lowercase +.skip + CLC : ADC #$2550 + STA.w $138C, X + DEX : DEX : BPL .loop + + RTS + +.fix_i + LDA.w #$08 : BRA .skip + +.fix_lowercase + LDA.w #$1D : BRA .skip \ No newline at end of file