custom oracle menu

This commit is contained in:
Justin Scofield
2022-05-30 23:13:45 -04:00
parent 0d0290e5b0
commit de6e877065
5 changed files with 1570 additions and 0 deletions

65
Menu/lw_map_names.asm Normal file
View File

@@ -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

730
Menu/menu.asm Normal file
View File

@@ -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"

363
Menu/menu_draw_items.asm Normal file
View File

@@ -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

156
Menu/menu_gfx_table.asm Normal file
View File

@@ -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

256
Menu/menu_text.asm Normal file
View File

@@ -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