Add menu journal with main quest and side quest hints and progression tracking
This commit is contained in:
@@ -476,8 +476,28 @@ FOLLOWERING = $7EF3D3
|
||||
UNUSED_7EF3D4 = $7EF3D4
|
||||
UNUSED_7EF3D5 = $7EF3D5
|
||||
UNUSED_7EF3D6 = $7EF3D6
|
||||
UNUSED_7EF3D7 = $7EF3D7
|
||||
UNUSED_7EF3D8 = $7EF3D8
|
||||
|
||||
; Side Quest Progress Flags
|
||||
; .dgo mwcn
|
||||
; n - Met Mask Salesman (shown "need Ocarina" dialogue)
|
||||
; c - Found cursed Cucco at ranch (shown first dialogue)
|
||||
; w - Found withering Deku Scrub (shown first dialogue)
|
||||
; m - Got Mushroom from Toadstool Woods
|
||||
; o - Old Man Mountain quest active
|
||||
; g - Goron quest active (collecting rock meat)
|
||||
; d - (reserved)
|
||||
SideQuestProg = $7EF3D7
|
||||
|
||||
; Side Quest Progress Flags 2
|
||||
; .bts pfmr
|
||||
; r - Ranch Girl transformed back (dialogue shown)
|
||||
; m - Mask Salesman taught Song of Healing
|
||||
; f - Fortune teller visited (any fortune)
|
||||
; p - Potion shop visited with mushroom
|
||||
; s - Deku Scrub soul freed (before mask given)
|
||||
; t - Tingle met (any map purchased)
|
||||
; b - Bean beanstalk grown (final stage)
|
||||
SideQuestProg2 = $7EF3D8
|
||||
|
||||
; Player name
|
||||
NAME1L = $7EF3D9
|
||||
|
||||
@@ -233,6 +233,8 @@ Menu_CheckForSpecialMenus:
|
||||
LDA.b $F6 : BIT.b #$80 : BEQ ++
|
||||
LDA.b #!MENU_STATE_JOURNAL : STA.w $0200
|
||||
JSR Menu_DeleteCursor
|
||||
REP #$20
|
||||
LDA.w #$0000 : STA.l JournalState ; Reset to first page
|
||||
JSL Menu_DrawJournal
|
||||
SEP #$30
|
||||
SEC : RTS ; Return Carry Set
|
||||
@@ -327,6 +329,21 @@ incsrc "menu_scroll.asm"
|
||||
Menu_StatsScreen:
|
||||
{
|
||||
JSR Menu_CheckHScroll
|
||||
|
||||
; Check X button to open Journal
|
||||
LDA.b $F6 : BIT.b #$40 : BEQ .no_journal
|
||||
LDA.b #!MENU_STATE_JOURNAL : STA.w $0200
|
||||
REP #$20
|
||||
LDA.w #$0000 : STA.l JournalState ; Reset to first page
|
||||
JSL Menu_DrawJournal
|
||||
SEP #$30
|
||||
; Set VRAM upload for right side (quest screen)
|
||||
LDA.b #$23 : STA.w $0116
|
||||
LDA.b #$01 : STA.b $17
|
||||
; Play menu open sound
|
||||
LDA.b #$11 : STA.w $012F
|
||||
.no_journal
|
||||
|
||||
; JSR Menu_StatsScreen_Input ; Selection disabled per user request
|
||||
RTS
|
||||
}
|
||||
@@ -462,7 +479,7 @@ Menu_RefreshInventoryScreen:
|
||||
JSR Menu_DrawSelect
|
||||
JSR Menu_DrawRingPrompt
|
||||
JSR Menu_DrawItemName
|
||||
|
||||
|
||||
; Palette restore if needed (mimicking Menu_UploadLeft)
|
||||
REP #$30
|
||||
LDX.w #$3E
|
||||
@@ -472,7 +489,7 @@ Menu_RefreshInventoryScreen:
|
||||
DEX : DEX
|
||||
BPL .loop
|
||||
SEP #$30
|
||||
|
||||
|
||||
RTS
|
||||
}
|
||||
|
||||
@@ -639,7 +656,7 @@ MagicBag_ConsumeItem:
|
||||
{
|
||||
; Check for A button press
|
||||
LDA.b $F6 : BIT.b #$80 : BEQ .exit
|
||||
|
||||
|
||||
REP #$30
|
||||
; Calculate SRAM address for current item (4 bytes per entry)
|
||||
LDA.w $020B : ASL #2 : TAX
|
||||
@@ -650,15 +667,15 @@ MagicBag_ConsumeItem:
|
||||
; Handle Consumption
|
||||
PHB : LDA $02 : PHA : PLB
|
||||
LDA ($00) : BEQ .error_dbr
|
||||
|
||||
|
||||
; Call Handler
|
||||
JSL Link_ConsumeMagicBagItem
|
||||
BCC .failed_use_dbr
|
||||
|
||||
|
||||
; Success -> Decrement
|
||||
LDA ($00) : DEC A : STA ($00)
|
||||
PLB
|
||||
|
||||
|
||||
; Sound
|
||||
LDA.b #$35 : STA.w $012F
|
||||
BRA .exit
|
||||
@@ -882,9 +899,39 @@ Menu_Journal:
|
||||
{
|
||||
JSL Journal_Handler
|
||||
|
||||
JSR Submenu_Return
|
||||
; Check if we should return (A or Start pressed)
|
||||
LDA.b $F6 : BIT.b #$80 : BNE .return_pressed
|
||||
LDA.b $F4 : BIT.b #$10 : BNE .close_menu
|
||||
BRA .continue
|
||||
|
||||
LDA.b #$22 : STA.w $0116
|
||||
.close_menu
|
||||
LDA.b #$12 : STA.w $012F ; Play menu close sound
|
||||
LDA.b #!MENU_STATE_SCROLL_UP : STA.w $0200
|
||||
BRA .continue
|
||||
|
||||
.return_pressed
|
||||
LDA.b #$12 : STA.w $012F ; Play menu close sound
|
||||
; Check which side we came from using $E5 (high byte of $E4)
|
||||
; $E4 = $0000 for left, $0100 for right (quest screen)
|
||||
LDA.b $E5 : BNE .return_to_quest
|
||||
; Return to inventory (left side)
|
||||
LDA.b #!MENU_STATE_SUBMENU_RETURN : STA.w $0200
|
||||
BRA .continue
|
||||
.return_to_quest
|
||||
; Return to quest screen (right side)
|
||||
JSR Menu_RefreshQuestScreen
|
||||
LDA.b #!MENU_STATE_STATS_SCREEN : STA.w $0200
|
||||
|
||||
.continue
|
||||
; Set VRAM upload address based on which side we're on
|
||||
; $E4 is 16-bit: $0000 = left, $0100 = right (quest screen)
|
||||
; Check high byte $E5 to detect quest screen
|
||||
LDA.b $E5 : BNE .quest_side
|
||||
LDA.b #$22 : BRA .set_vram ; Left side (inventory)
|
||||
.quest_side
|
||||
LDA.b #$23 ; Right side (quest)
|
||||
.set_vram
|
||||
STA.w $0116
|
||||
LDA.b #$01 : STA.b $17
|
||||
RTS
|
||||
}
|
||||
@@ -920,4 +967,4 @@ incsrc "menu_map_names.asm"
|
||||
incsrc "menu_hud.asm"
|
||||
%log_end("Menu/menu_hud.asm", !LOG_MENU)
|
||||
incsrc "menu_journal.asm"
|
||||
%log_end("Menu/menu_journal.asm", !LOG_MENU)
|
||||
%log_end("Menu/menu_journal.asm", !LOG_MENU)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
Journal_Handler:
|
||||
{
|
||||
PHB : PHK : PLB
|
||||
SEP #$30 ; Ensure 8-bit A and X/Y for input handling
|
||||
|
||||
; Check timer
|
||||
LDA.w $0207 : BEQ .process_input
|
||||
@@ -20,9 +21,10 @@ Journal_Handler:
|
||||
JSR Journal_PrevPage
|
||||
JSL Menu_DrawJournal
|
||||
SEP #$30
|
||||
LDA.b #$0A : STA.w $0207 ; Set delay
|
||||
LDA.b #$20 : STA.w $012F ; Play page scroll sound
|
||||
LDA.b #$0A : STA.w $0207 ; Set delay
|
||||
JMP .exit
|
||||
|
||||
|
||||
.check_right
|
||||
; Check for R button press
|
||||
LDA.b $F2 : BIT.b #$10 : BEQ .exit
|
||||
@@ -30,7 +32,8 @@ Journal_Handler:
|
||||
JSR Journal_NextPage
|
||||
JSL Menu_DrawJournal
|
||||
SEP #$30
|
||||
LDA.b #$0A : STA.w $0207 ; Set delay
|
||||
LDA.b #$20 : STA.w $012F ; Play page scroll sound
|
||||
LDA.b #$0A : STA.w $0207 ; Set delay
|
||||
|
||||
.exit
|
||||
SEP #$30
|
||||
@@ -44,12 +47,12 @@ Journal_Handler:
|
||||
|
||||
Journal_PrevPage:
|
||||
{
|
||||
LDA.l JournalState
|
||||
LDA.l JournalState
|
||||
AND.w #$00FF : BEQ .wrap_to_last
|
||||
DEC A
|
||||
STA.l JournalState
|
||||
RTS
|
||||
|
||||
|
||||
.wrap_to_last
|
||||
; Find total count to wrap to last
|
||||
JSR Journal_CountUnlocked
|
||||
@@ -60,9 +63,9 @@ Journal_PrevPage:
|
||||
|
||||
Journal_NextPage:
|
||||
{
|
||||
LDA.l JournalState
|
||||
LDA.l JournalState
|
||||
AND.w #$00FF : INC A : STA.b $00
|
||||
|
||||
|
||||
; Check if next page exists
|
||||
LDA.b $00
|
||||
JSR Journal_GetNthEntry
|
||||
@@ -70,7 +73,7 @@ Journal_NextPage:
|
||||
LDA.b $00
|
||||
STA.l JournalState
|
||||
RTS
|
||||
|
||||
|
||||
.wrap_to_first
|
||||
LDA.w #$0000
|
||||
STA.l JournalState
|
||||
@@ -87,19 +90,19 @@ Journal_GetNthEntry:
|
||||
{
|
||||
PHA
|
||||
LDY.w #$0000 ; Master List Index
|
||||
|
||||
|
||||
.loop
|
||||
; Check if we reached end of list
|
||||
LDA.w Journal_MasterList, Y : BEQ .end_of_list
|
||||
|
||||
|
||||
; Check Flag
|
||||
; Format: dd dd dd mm (Address Long, Mask)
|
||||
; But we can't indirect long easily without setup.
|
||||
; Let's read address to $00.
|
||||
|
||||
|
||||
LDA.w Journal_MasterList, Y : STA.b $02
|
||||
LDA.w Journal_MasterList+2, Y : STA.b $04 ; Get mask in low byte of $04
|
||||
|
||||
|
||||
SEP #$20
|
||||
; $04 = Bank, $05 = Mask (from 16-bit read above)
|
||||
|
||||
@@ -114,23 +117,23 @@ Journal_GetNthEntry:
|
||||
; $04 = Bank
|
||||
; $05 = Mask
|
||||
; The AND above reads from ROM directly.
|
||||
|
||||
|
||||
BEQ .locked
|
||||
; Unlocked
|
||||
PLA : DEC A : PHA ; Decrement target index
|
||||
BMI .found
|
||||
|
||||
|
||||
.locked
|
||||
REP #$20
|
||||
TYA : CLC : ADC.w #$0006 : TAY ; Next Entry (4 bytes header + 2 bytes ptr = 6)
|
||||
BRA .loop
|
||||
|
||||
|
||||
.found
|
||||
REP #$20
|
||||
PLA ; Clean stack
|
||||
LDA.w Journal_MasterList+4, Y : TAX
|
||||
RTS
|
||||
|
||||
|
||||
.end_of_list
|
||||
REP #$20
|
||||
PLA ; Clean stack
|
||||
@@ -142,14 +145,14 @@ Journal_CountUnlocked:
|
||||
{
|
||||
LDY.w #$0000 ; Master List Index
|
||||
LDA.w #$0000 : STA.b $06 ; Counter
|
||||
|
||||
|
||||
.loop
|
||||
LDA.w Journal_MasterList, Y : BEQ .done
|
||||
|
||||
|
||||
; Check Flag
|
||||
LDA.w Journal_MasterList, Y : STA.b $02
|
||||
LDA.w Journal_MasterList+2, Y : STA.b $04
|
||||
|
||||
|
||||
SEP #$20
|
||||
PHB ; Save current data bank
|
||||
LDA.b $04 : PHA : PLB ; Set DB to address bank
|
||||
@@ -164,7 +167,7 @@ Journal_CountUnlocked:
|
||||
REP #$20
|
||||
TYA : CLC : ADC.w #$0006 : TAY
|
||||
BRA .loop
|
||||
|
||||
|
||||
.done
|
||||
LDA.b $06
|
||||
RTS
|
||||
@@ -180,7 +183,7 @@ Journal_DrawEntry:
|
||||
LDA.l JournalState : AND.w #$00FF
|
||||
JSR Journal_GetNthEntry
|
||||
STX.b $00 ; Store Text Pointer
|
||||
|
||||
|
||||
CPX.w #$0000 : BNE .valid
|
||||
; Draw "Empty" if no entry found (shouldn't happen with correct logic)
|
||||
RTS
|
||||
@@ -188,39 +191,51 @@ Journal_DrawEntry:
|
||||
|
||||
LDX.w #$0000 ; Text Offset
|
||||
LDY.w #$0000 ; VRAM Offset
|
||||
|
||||
|
||||
.loop
|
||||
PHY ; Save VRAM offset
|
||||
TXY ; Y = Text Offset
|
||||
LDA ($00), Y ; Read word from text
|
||||
PLY ; Restore VRAM offset
|
||||
|
||||
|
||||
CMP.w #$FFFF : BEQ .done ; Check for terminator
|
||||
|
||||
|
||||
STA.w $1292, Y ; Write to VRAM buffer (Row 1)
|
||||
|
||||
|
||||
INY #2 ; Next VRAM word
|
||||
INX #2 ; Next Text word
|
||||
|
||||
; Wrap logic for multiple lines
|
||||
; Line 1 ends at $1292 + $20 (32 bytes) = $12B2?
|
||||
; Let's just assume the text includes padding or we handle newlines?
|
||||
; Simplified: The text data is pre-formatted to 16 chars per line.
|
||||
; We just copy linear data to linear VRAM.
|
||||
; But VRAM is linear in rows? Yes, usually.
|
||||
; However, to jump to next line in tilemap we need to add stride.
|
||||
; Row Width = $40 bytes (32 tiles * 2 bytes).
|
||||
; If we write 16 chars (32 bytes), we need to skip 32 bytes to reach next line.
|
||||
|
||||
|
||||
; Wrap logic for multiple lines (up to 9 lines supported)
|
||||
; Row Width = $40 bytes (32 tiles * 2 bytes)
|
||||
; Each line is 16 chars ($20 bytes), then skip $20 to next row
|
||||
|
||||
CPY.w #$0020 : BNE .check_line_2
|
||||
TYA : CLC : ADC.w #$0020 : TAY ; Skip to next line start
|
||||
TYA : CLC : ADC.w #$0020 : TAY
|
||||
.check_line_2
|
||||
CPY.w #$0060 : BNE .check_line_3 ; End of Line 2 ($20 + $40 = $60)
|
||||
CPY.w #$0060 : BNE .check_line_3
|
||||
TYA : CLC : ADC.w #$0020 : TAY
|
||||
.check_line_3
|
||||
|
||||
CPY.w #$00A0 : BNE .check_line_4
|
||||
TYA : CLC : ADC.w #$0020 : TAY
|
||||
.check_line_4
|
||||
CPY.w #$00E0 : BNE .check_line_5
|
||||
TYA : CLC : ADC.w #$0020 : TAY
|
||||
.check_line_5
|
||||
CPY.w #$0120 : BNE .check_line_6
|
||||
TYA : CLC : ADC.w #$0020 : TAY
|
||||
.check_line_6
|
||||
CPY.w #$0160 : BNE .check_line_7
|
||||
TYA : CLC : ADC.w #$0020 : TAY
|
||||
.check_line_7
|
||||
CPY.w #$01A0 : BNE .check_line_8
|
||||
TYA : CLC : ADC.w #$0020 : TAY
|
||||
.check_line_8
|
||||
CPY.w #$01E0 : BNE .check_line_9
|
||||
TYA : CLC : ADC.w #$0020 : TAY
|
||||
.check_line_9
|
||||
|
||||
BRA .loop
|
||||
|
||||
|
||||
.done
|
||||
SEP #$30
|
||||
RTS
|
||||
@@ -232,27 +247,335 @@ Journal_DrawEntry:
|
||||
|
||||
; Format: Address(3), Mask(1), TextPtr(2) = 6 bytes
|
||||
Journal_MasterList:
|
||||
dl $7EF3D6 : db $02 : dw Entry_QuestStart ; OOSPROG bit 1 (Quest Start)
|
||||
dl $7EF3D6 : db $10 : dw Entry_MetElder ; OOSPROG bit 4 (Met Elder)
|
||||
dl $7EF3C6 : db $04 : dw Entry_MakuTree ; OOSPROG2 bit 2 (Maku Tree)
|
||||
; === Chapter 0: A Hero is Born ===
|
||||
dl $7EF3C5 : db $02 : dw Entry_TheCall ; GameState = $02 (Farore intro)
|
||||
dl $7EF3C6 : db $04 : dw Entry_CastAway ; OOSPROG2 bit 2 (Kydrog intro)
|
||||
|
||||
; === Chapter 1: The Maku Tree ===
|
||||
dl $7EF3D4 : db $01 : dw Entry_MakuTree ; MakuTreeQuest = $01
|
||||
dl $7EF3C7 : db $01 : dw Entry_FirstEssence ; MapIcon = $01 (Mushroom Grotto)
|
||||
|
||||
; === Ocarina Quest Chain (HINT -> PROGRESS -> COMPLETE) ===
|
||||
dl $7EF3D7 : db $01 : dw Entry_MaskShop ; SideQuestProg bit 0 (met salesman)
|
||||
dl $7EF3D7 : db $02 : dw Entry_CursedGirl ; SideQuestProg bit 1 (found cucco)
|
||||
dl $7EF3D7 : db $08 : dw Entry_GotMushroom ; SideQuestProg bit 3 (got mushroom)
|
||||
dl $7EF344 : db $02 : dw Entry_GotPowder ; MagicPowder = $02
|
||||
dl $7EF3D8 : db $01 : dw Entry_CurseBroken ; SideQuestProg2 bit 0 (ranch girl)
|
||||
dl $7EF3D8 : db $04 : dw Entry_SongLearned ; SideQuestProg2 bit 2 (song taught)
|
||||
|
||||
; === Deku Mask Chain ===
|
||||
dl $7EF3D7 : db $04 : dw Entry_DyingDeku ; SideQuestProg bit 2 (found deku)
|
||||
dl $7EF3D8 : db $10 : dw Entry_DekuFreed ; SideQuestProg2 bit 4 (soul freed)
|
||||
dl $7EF349 : db $01 : dw Entry_DekuMask ; DekuMask obtained
|
||||
|
||||
; === Dungeon Completions ===
|
||||
dl $7EF398 : db $01 : dw Entry_D1Complete ; Scrolls bit 0 (Mushroom Grotto)
|
||||
dl $7EF398 : db $02 : dw Entry_D2Complete ; Scrolls bit 1 (Tail Palace)
|
||||
dl $7EF398 : db $04 : dw Entry_D3Complete ; Scrolls bit 2 (Kalyxo Castle)
|
||||
dl $7EF398 : db $08 : dw Entry_D4Complete ; Scrolls bit 3 (Zora Temple)
|
||||
dl $7EF398 : db $10 : dw Entry_D5Complete ; Scrolls bit 4 (Glacia Estate)
|
||||
dl $7EF398 : db $20 : dw Entry_D6Complete ; Scrolls bit 5 (Goron Mines)
|
||||
dl $7EF398 : db $40 : dw Entry_D7Complete ; Scrolls bit 6 (Dragon Ship)
|
||||
|
||||
; === Mask Collection ===
|
||||
dl $7EF347 : db $01 : dw Entry_ZoraMask ; ZoraMask obtained
|
||||
dl $7EF358 : db $01 : dw Entry_WolfMask ; WolfMask obtained
|
||||
dl $7EF348 : db $01 : dw Entry_BunnyHood ; BunnyHood obtained
|
||||
|
||||
; === Other Side Quests ===
|
||||
dl $7EF39B : db $01 : dw Entry_BeanPlanted ; MagicBeanProg bit 0 (planted)
|
||||
dl $7EF3D7 : db $10 : dw Entry_OldManQuest ; SideQuestProg bit 4 (old man)
|
||||
dl $7EF3D7 : db $20 : dw Entry_GoronQuest ; SideQuestProg bit 5 (goron)
|
||||
|
||||
dw $0000 ; Terminator
|
||||
|
||||
Entry_QuestStart:
|
||||
dw "Quest_Started___"
|
||||
dw "Find_the_3_gems_"
|
||||
dw "to_save_Hyrule__"
|
||||
; ---------------------------------------------------------
|
||||
; Chapter 0: A Hero is Born
|
||||
; ---------------------------------------------------------
|
||||
|
||||
Entry_TheCall:
|
||||
dw "THE_CALL________"
|
||||
dw "________________"
|
||||
dw "A_VOICE_CALLED__"
|
||||
dw "OUT_TO_ME..._IT_"
|
||||
dw "SAID_ACCEPT_THIS"
|
||||
dw "QUEST__HERO.____"
|
||||
dw $FFFF
|
||||
|
||||
Entry_MetElder:
|
||||
dw "Spoke_to_Elder__"
|
||||
dw "He_mentioned_a__"
|
||||
dw "missing_girl____"
|
||||
Entry_CastAway:
|
||||
dw "CAST_AWAY_______"
|
||||
dw "________________"
|
||||
dw "KYDROG_TOOK_____"
|
||||
dw "FARORE_AND_CAST_"
|
||||
dw "ME_TO_THE_ABYSS."
|
||||
dw "FIND_MAKU_TREE._"
|
||||
dw $FFFF
|
||||
|
||||
; ---------------------------------------------------------
|
||||
; Chapter 1: The Maku Tree
|
||||
; ---------------------------------------------------------
|
||||
|
||||
Entry_MakuTree:
|
||||
dw "Met_Maku_Tree___"
|
||||
dw "He_needs_his____"
|
||||
dw "memory_back_____"
|
||||
dw "THE_MAKU_TREE___"
|
||||
dw "________________"
|
||||
dw "I_FOUND_THE_____"
|
||||
dw "MAKU_TREE._IMPA_"
|
||||
dw "AWAITS_IN_THE___"
|
||||
dw "HALL_OF_SECRETS."
|
||||
dw $FFFF
|
||||
|
||||
Entry_FirstEssence:
|
||||
dw "FIRST_ESSENCE___"
|
||||
dw "________________"
|
||||
dw "DARKNESS_LURKS__"
|
||||
dw "IN_THE_MUSHROOM_"
|
||||
dw "GROTTO_TO_THE___"
|
||||
dw "WEST.___________"
|
||||
dw $FFFF
|
||||
|
||||
; ---------------------------------------------------------
|
||||
; Ocarina Quest Chain
|
||||
; ---------------------------------------------------------
|
||||
|
||||
Entry_MaskShop:
|
||||
dw "MASK_SHOP_______"
|
||||
dw "________________"
|
||||
dw "A_SALESMAN_EAST_"
|
||||
dw "OF_VILLAGE_SELLS"
|
||||
dw "MASKS._HE_NEEDS_"
|
||||
dw "ME_TO_HAVE_AN___"
|
||||
dw "OCARINA._A_GIRL_"
|
||||
dw "AT_TOTO_RANCH___"
|
||||
dw "MIGHT_HELP._____"
|
||||
dw $FFFF
|
||||
|
||||
Entry_CursedGirl:
|
||||
dw "CURSED_GIRL_____"
|
||||
dw "________________"
|
||||
dw "A_GIRL_AT_TOTO__"
|
||||
dw "RANCH_IS_CURSED!"
|
||||
dw "SHE_HAS_BEEN____"
|
||||
dw "TURNED_INTO_A___"
|
||||
dw "CUCCO._MAGIC____"
|
||||
dw "POWDER_MIGHT____"
|
||||
dw "BREAK_THE_SPELL."
|
||||
dw $FFFF
|
||||
|
||||
Entry_GotMushroom:
|
||||
dw "STRANGE_MUSHROOM"
|
||||
dw "________________"
|
||||
dw "FOUND_A_STRANGE_"
|
||||
dw "MUSHROOM_IN_THE_"
|
||||
dw "WOODS._THE______"
|
||||
dw "POTION_SHOP_____"
|
||||
dw "MIGHT_WANT_THIS."
|
||||
dw $FFFF
|
||||
|
||||
Entry_GotPowder:
|
||||
dw "MAGIC_POWDER____"
|
||||
dw "________________"
|
||||
dw "THE_WITCH_MADE__"
|
||||
dw "POWDER_FROM_THE_"
|
||||
dw "MUSHROOM._IT_HAS"
|
||||
dw "TRANSFORMATIVE__"
|
||||
dw "POWER.__________"
|
||||
dw $FFFF
|
||||
|
||||
Entry_CurseBroken:
|
||||
dw "CURSE_BROKEN____"
|
||||
dw "________________"
|
||||
dw "THE_POWDER______"
|
||||
dw "BROKE_THE_CURSE!"
|
||||
dw "THE_RANCH_GIRL__"
|
||||
dw "GAVE_ME_HER_____"
|
||||
dw "OCARINA_AND_____"
|
||||
dw "TAUGHT_ME_THE___"
|
||||
dw "SONG_OF_STORMS._"
|
||||
dw $FFFF
|
||||
|
||||
Entry_SongLearned:
|
||||
dw "SONG_OF_HEALING_"
|
||||
dw "________________"
|
||||
dw "THE_MASK________"
|
||||
dw "SALESMAN_TAUGHT_"
|
||||
dw "ME_THE_SONG_OF__"
|
||||
dw "HEALING._IT_CAN_"
|
||||
dw "FREE_TROUBLED___"
|
||||
dw "SPIRITS_FROM____"
|
||||
dw "THEIR_PAIN._____"
|
||||
dw $FFFF
|
||||
|
||||
; ---------------------------------------------------------
|
||||
; Deku Mask Chain
|
||||
; ---------------------------------------------------------
|
||||
|
||||
Entry_DyingDeku:
|
||||
dw "DYING_DEKU______"
|
||||
dw "________________"
|
||||
dw "A_DEKU_SCRUB_IN_"
|
||||
dw "THE_WOODS_IS____"
|
||||
dw "WITHERING_AWAY._"
|
||||
dw "HIS_SPIRIT_SEEMS"
|
||||
dw "TROUBLED..._____"
|
||||
dw "PERHAPS_A_______"
|
||||
dw "HEALING_MELODY?_"
|
||||
dw $FFFF
|
||||
|
||||
Entry_DekuFreed:
|
||||
dw "DEKU_FREED______"
|
||||
dw "________________"
|
||||
dw "THE_SONG_FREED__"
|
||||
dw "THE_DEKUS_______"
|
||||
dw "TORTURED_SOUL.__"
|
||||
dw "HE_LEFT_BEHIND__"
|
||||
dw "A_MASK..._______"
|
||||
dw $FFFF
|
||||
|
||||
Entry_DekuMask:
|
||||
dw "DEKU_MASK_______"
|
||||
dw "________________"
|
||||
dw "WITH_THE_DEKU___"
|
||||
dw "MASK_I_CAN_TAKE_"
|
||||
dw "DEKU_FORM._THIS_"
|
||||
dw "WILL_HELP_ME____"
|
||||
dw "TRAVERSE_THE____"
|
||||
dw "SWAMPS_TO_______"
|
||||
dw "TAIL_PALACE.____"
|
||||
dw $FFFF
|
||||
|
||||
; ---------------------------------------------------------
|
||||
; Dungeon Completions
|
||||
; ---------------------------------------------------------
|
||||
|
||||
Entry_D1Complete:
|
||||
dw "GROTTO_CLEARED__"
|
||||
dw "________________"
|
||||
dw "THE_MUSHROOM____"
|
||||
dw "GROTTO_IS_FREE__"
|
||||
dw "OF_EVIL._I_FOUND"
|
||||
dw "THE_BOW_WITHIN._"
|
||||
dw $FFFF
|
||||
|
||||
Entry_D2Complete:
|
||||
dw "TAIL_PALACE_____"
|
||||
dw "________________"
|
||||
dw "MOLDORM_FALLS.__"
|
||||
dw "THE_ROCS_FEATHER"
|
||||
dw "GRANTS_ME_THE___"
|
||||
dw "GIFT_OF_FLIGHT._"
|
||||
dw $FFFF
|
||||
|
||||
Entry_D3Complete:
|
||||
dw "KALYXO_CASTLE___"
|
||||
dw "________________"
|
||||
dw "THE_CASTLE_IS___"
|
||||
dw "RECLAIMED._THE__"
|
||||
dw "MEADOW_BLADE____"
|
||||
dw "IS_MINE.________"
|
||||
dw $FFFF
|
||||
|
||||
Entry_D4Complete:
|
||||
dw "ZORA_TEMPLE_____"
|
||||
dw "________________"
|
||||
dw "THE_WATERS_ARE__"
|
||||
dw "PURIFIED._THE___"
|
||||
dw "HOOKSHOT_WILL___"
|
||||
dw "AID_MY_QUEST.___"
|
||||
dw $FFFF
|
||||
|
||||
Entry_D5Complete:
|
||||
dw "GLACIA_ESTATE___"
|
||||
dw "________________"
|
||||
dw "TWINROVA_IS_____"
|
||||
dw "DEFEATED._THE___"
|
||||
dw "FIRE_ROD_MELTS__"
|
||||
dw "ALL_OBSTACLES.__"
|
||||
dw $FFFF
|
||||
|
||||
Entry_D6Complete:
|
||||
dw "GORON_MINES_____"
|
||||
dw "________________"
|
||||
dw "THE_MINES_ARE___"
|
||||
dw "SAFE._THE_HAMMER"
|
||||
dw "BREAKS_THROUGH__"
|
||||
dw "ANY_BARRIER.____"
|
||||
dw $FFFF
|
||||
|
||||
Entry_D7Complete:
|
||||
dw "DRAGON_SHIP_____"
|
||||
dw "________________"
|
||||
dw "THE_ANCIENT_SHIP"
|
||||
dw "YIELDS_ITS______"
|
||||
dw "SECRET:_THE_____"
|
||||
dw "SOMARIA_ROD.____"
|
||||
dw $FFFF
|
||||
|
||||
; ---------------------------------------------------------
|
||||
; Mask Collection
|
||||
; ---------------------------------------------------------
|
||||
|
||||
Entry_ZoraMask:
|
||||
dw "ZORA_MASK_______"
|
||||
dw "________________"
|
||||
dw "THE_PRINCESS____"
|
||||
dw "GAVE_ME_A_MASK._"
|
||||
dw "I_CAN_BREATHE___"
|
||||
dw "UNDERWATER._____"
|
||||
dw $FFFF
|
||||
|
||||
Entry_WolfMask:
|
||||
dw "WOLF_MASK_______"
|
||||
dw "________________"
|
||||
dw "THE_WOLFOS______"
|
||||
dw "SPIRIT_IS_AT____"
|
||||
dw "PEACE._ITS_MASK_"
|
||||
dw "GRANTS_SPEED____"
|
||||
dw "AT_NIGHT._______"
|
||||
dw $FFFF
|
||||
|
||||
Entry_BunnyHood:
|
||||
dw "BUNNY_HOOD______"
|
||||
dw "________________"
|
||||
dw "THE_MASK________"
|
||||
dw "SALESMAN_SOLD___"
|
||||
dw "ME_A_BUNNY_HOOD."
|
||||
dw "I_CAN_RUN_______"
|
||||
dw "FASTER_NOW._____"
|
||||
dw $FFFF
|
||||
|
||||
; ---------------------------------------------------------
|
||||
; Other Side Quests
|
||||
; ---------------------------------------------------------
|
||||
|
||||
Entry_BeanPlanted:
|
||||
dw "MAGIC_BEAN______"
|
||||
dw "________________"
|
||||
dw "I_PLANTED_A_____"
|
||||
dw "MAGIC_BEAN._IT__"
|
||||
dw "NEEDS_WATER_AND_"
|
||||
dw "A_BEES_BLESSING."
|
||||
dw $FFFF
|
||||
|
||||
Entry_OldManQuest:
|
||||
dw "OLD_MAN_________"
|
||||
dw "________________"
|
||||
dw "AN_OLD_MAN_IS___"
|
||||
dw "LOST_IN_THE_____"
|
||||
dw "LAVA_LANDS._IF_I"
|
||||
dw "ESCORT_HIM_HOME_"
|
||||
dw "HE_MAY_REWARD___"
|
||||
dw "ME._____________"
|
||||
dw $FFFF
|
||||
|
||||
Entry_GoronQuest:
|
||||
dw "GORON_QUEST_____"
|
||||
dw "________________"
|
||||
dw "THE_GORON_NEEDS_"
|
||||
dw "5_ROCK_SIRLOINS_"
|
||||
dw "TO_OPEN_THE_____"
|
||||
dw "MINES._I_SHOULD_"
|
||||
dw "SEARCH_THE______"
|
||||
dw "MOUNTAINS.______"
|
||||
dw $FFFF
|
||||
|
||||
; ---------------------------------------------------------
|
||||
@@ -263,39 +586,30 @@ Menu_DrawJournal:
|
||||
{
|
||||
PHB : PHK : PLB
|
||||
REP #$30
|
||||
|
||||
; Logic to choose background based on page number?
|
||||
; For now just cycle them 1-2-3-1-2-3
|
||||
LDA.l JournalState : AND.w #$00FF
|
||||
CLC : ADC.b #$01 ; Make 1-based?
|
||||
; Modulo 3?
|
||||
; Simple:
|
||||
; 0 -> First
|
||||
; Last -> Last
|
||||
; Else -> Middle
|
||||
|
||||
; But we don't know which is last without counting.
|
||||
; Let's just use First for 0, Last for Last, Middle for others.
|
||||
|
||||
LDA.l JournalState : AND.w #$00FF : BEQ .first
|
||||
|
||||
|
||||
; Page selection logic:
|
||||
; 0 -> First page background
|
||||
; Last -> Last page background
|
||||
; Else -> Middle page background
|
||||
|
||||
LDA.l JournalState : AND.w #$00FF : BNE .not_first
|
||||
; JournalState == 0, draw first page
|
||||
JSR Journal_DrawFirstPage
|
||||
BRA .draw_entry
|
||||
.not_first
|
||||
|
||||
; Check if this is the last page
|
||||
PHA
|
||||
JSR Journal_CountUnlocked : DEC A : STA.b $02
|
||||
PLA
|
||||
CMP.b $02 : BEQ .last
|
||||
|
||||
BRA .middle
|
||||
|
||||
.first
|
||||
JSR Journal_DrawFirstPage
|
||||
BRA .exit
|
||||
.last
|
||||
CMP.b $02 : BNE .middle
|
||||
; This is the last page
|
||||
JSR Journal_DrawLastPage
|
||||
BRA .exit
|
||||
BRA .draw_entry
|
||||
.middle
|
||||
JSR Journal_DrawMiddlePage
|
||||
.exit
|
||||
|
||||
|
||||
.draw_entry
|
||||
JSR Journal_DrawEntry
|
||||
|
||||
SEP #$30
|
||||
@@ -393,4 +707,4 @@ Journal_DrawLastPage:
|
||||
|
||||
.last_page_tilemap
|
||||
incbin "tilemaps/journal_end.bin"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ Menu_ItemNames:
|
||||
dw "MIRROR_OF_TIME "
|
||||
dw "____BOTTLE____ "
|
||||
dw "___OCARINA____ "
|
||||
dw "TOME__L:REVEAL__"
|
||||
dw "BOOK__L:REVEAL "
|
||||
dw "___SOMARIA____ "
|
||||
dw "_FISHING_ROD__ "
|
||||
dw "_ROCS_FEATHER_ "
|
||||
|
||||
Reference in New Issue
Block a user