Board menu: implement preliminary Party, Bag, Pokegear, and Exit submenus (#11)

This commit is contained in:
xCrystal
2023-09-22 23:12:05 +02:00
parent c11c53e0d7
commit ca919cdf98
19 changed files with 275 additions and 59 deletions

View File

@@ -1,3 +1,70 @@
BoardMenuScript::
opentext
.display_menu
callasm BoardMenu
ifequal BOARDMENUITEM_DIE, .Die
ifequal BOARDMENUITEM_PARTY, .Party
ifequal BOARDMENUITEM_PACK, .Pack
ifequal BOARDMENUITEM_POKEGEAR, .Pokegear
ifequal BOARDMENUITEM_EXIT, .Exit
closetext
end
.Die:
closetext
end
.Party:
callasm BoardMenu_Party
scall .SubmenuCallback
sjump .display_menu
.Pack:
callasm BoardMenu_Pack
scall .SubmenuCallback
sjump .display_menu
.Pokegear:
callasm BoardMenu_Pokegear
scall .SubmenuCallback
sjump .display_menu
.Exit:
writetext .EmptyText
callasm RestoreOverworldFontOverBoardMenuGFX
writetext .ConfirmExitText
yesorno
iftrue .exit
writetext .EmptyText
sjump .display_menu
.exit:
exitoverworld $00
.ConfirmExitText:
text "Abandon level and"
line "return to menu?"
done
.EmptyText:
text ""
done
.SubmenuCallback:
; if submenu has requested a callback through hMenuReturn,
; it has also taken care of queuing it into wQueuedScriptBank/wQueuedScriptAddr.
readmem hMenuReturn
ifequal HMENURETURN_SCRIPT, .CallbackScript
ifequal HMENURETURN_ASM, .CallbackAsm
end
.CallbackScript:
memjump wQueuedScriptBank
.CallbackAsm:
memcallasm wQueuedScriptBank
end
BoardMenu::
; returns the selected menu item (BOARDMENUITEM_*) in wScriptVar upon exit
ld a, [wBoardMenuLastCursorPosition]
@@ -56,10 +123,16 @@ ApplyBoardMenuSpritePalette:
ld a, [wBoardMenuCursorPosition]
ld bc, PALETTE_SIZE
call AddNTimes
; set wOBPals2 directly rather than wOBPals1 to avoid calling ApplyPals and overwriting other overworld pals
; write to wOBPals2 directly as well to avoid calling ApplyPals and overwriting other overworld pals
; writing to wOBPals1 is still necessary to make fading animations consistent
ld de, wOBPals1 palette PAL_OW_MISC
ld bc, PALETTE_SIZE
ld a, BANK(wOBPals1)
call FarCopyWRAM
ld hl, wOBPals1 palette PAL_OW_MISC
ld de, wOBPals2 palette PAL_OW_MISC
ld bc, PALETTE_SIZE
ld a, BANK(wOBPals2)
ld a, BANK(wOBPals1)
call FarCopyWRAM
ld a, TRUE
ldh [hCGBPalUpdate], a
@@ -107,5 +180,73 @@ GetBoardMenuSelection:
xor a
ret ; nc
BoardMenu_Party:
ld a, [wPartyCount]
and a
ret z
call BoardMenu_OpenSubmenu
farcall Party
jr nc, .quit
.return
; if cancelled or pressed B
call BoardMenu_CloseSubmenu
ret
.quit
; if quitted party menu after using field move
call BoardMenu_CloseSubmenu
ld a, HMENURETURN_SCRIPT
ldh [hMenuReturn], a
ret
BoardMenu_Pack:
call BoardMenu_OpenSubmenu
farcall Pack
call BoardMenu_CloseSubmenu
ld a, [wPackUsedItem]
and a
ret z
ld a, HMENURETURN_SCRIPT
ldh [hMenuReturn], a
ret
BoardMenu_Pokegear:
call BoardMenu_OpenSubmenu
farcall PokeGear
jp BoardMenu_CloseSubmenu
BoardMenu_OpenSubmenu:
xor a
ldh [hMenuReturn], a
ldh [hBGMapMode], a
call LoadStandardMenuHeader
farcall FadeOutPalettesToWhite
call DisableOverworldHUD
ld hl, wTextboxFlags
res TEXT_2BPP_F, [hl]
call LoadStandardFont
call LoadFrame
call ClearSprites
call DisableSpriteUpdates
ret
BoardMenu_CloseSubmenu:
call ClearBGPalettes
ld hl, wTextboxFlags
set TEXT_2BPP_F, [hl]
call EnableOverworldHUD
call ReloadTilesetAndPalettes
call UpdateSprites
call ExitMenu
call ClearTextbox
ld b, CGB_MAPPALS
call GetCGBLayout
call WaitBGMap2
farcall FadeInPalettesFromWhite
call EnableSpriteUpdates
ret
BoardMenuItemPals:
INCLUDE "gfx/board/menu.pal"

View File

@@ -1706,10 +1706,6 @@ Script_GetOnBike_Register:
special UpdatePlayerSprite
end
Overworld_DummyFunction: ; unreferenced
nop
ret
Script_GetOffBike:
reloadmappart
special UpdateTimePals

View File

@@ -15,8 +15,8 @@ INCBIN "gfx/board/menu.2bpp"
.BoardMenuOAMGFX:
table_width 3 * 3 * LEN_2BPP_TILE, .BoardMenuOAMGFX
INCBIN "gfx/board/menu_die.2bpp"
INCBIN "gfx/board/menu_pokemon.2bpp"
INCBIN "gfx/board/menu_bag.2bpp"
INCBIN "gfx/board/menu_party.2bpp"
INCBIN "gfx/board/menu_pack.2bpp"
INCBIN "gfx/board/menu_pokegear.2bpp"
INCBIN "gfx/board/menu_exit.2bpp"
assert_table_length NUM_BOARD_MENU_ITEMS

View File

@@ -1,36 +1,41 @@
_LoadOverworldFontAndFrame::
ld de, .OverworldFontGFX
ld de, OverworldFontGFX
ld hl, vTiles1
lb bc, BANK(.OverworldFontGFX), 64
lb bc, BANK(OverworldFontGFX), 64
call Get2bppViaHDMA
ld de, .OverworldFontGFX + 64 * LEN_2BPP_TILE
ld de, OverworldFontGFX + 64 * LEN_2BPP_TILE
ld hl, vTiles1 tile $40
lb bc, BANK(.OverworldFontGFX), 56
lb bc, BANK(OverworldFontGFX), 48
call Get2bppViaHDMA
ld de, .OverworldFontSpaceGFX
ld de, OverworldFontSpaceGFX
ld hl, vTiles2 tile " "
lb bc, BANK(.OverworldFontSpaceGFX), 1
lb bc, BANK(OverworldFontSpaceGFX), 1
call Get2bppViaHDMA
ld a, [wEnvironment]
maskbits NUM_ENVIRONMENTS
ld bc, OW_TEXTBOX_FRAME_TILES * LEN_2BPP_TILE
ld hl, .OverworldFrames
ld hl, OverworldFrames
call AddNTimes
ld d, h
ld e, l
ld hl, vTiles0 tile OVERWORLD_FRAME_FIRST_TILE ; $f0
lb bc, BANK(.OverworldFrames), OW_TEXTBOX_FRAME_TILES
call Get2bppViaHDMA
ret
lb bc, BANK(OverworldFrames), OW_TEXTBOX_FRAME_TILES
jp Get2bppViaHDMA
.OverworldFontGFX:
RestoreOverworldFontOverBoardMenuGFX::
ld de, OverworldFontGFX
ld hl, vTiles1
lb bc, BANK(OverworldFontGFX), 18 * 3
jp Get2bppViaHDMA
OverworldFontGFX:
INCBIN "gfx/font/overworld.2bpp"
.OverworldFontSpaceGFX:
OverworldFontSpaceGFX:
INCBIN "gfx/font/overworld_space.2bpp"
.OverworldFrames:
table_width OW_TEXTBOX_FRAME_TILES * LEN_2BPP_TILE, .OverworldFrames
OverworldFrames:
table_width OW_TEXTBOX_FRAME_TILES * LEN_2BPP_TILE, OverworldFrames
INCBIN "gfx/frames/ow1.2bpp"
INCBIN "gfx/frames/ow2.2bpp"
INCBIN "gfx/frames/ow3.2bpp"

View File

@@ -501,35 +501,8 @@ StartMenu_Pokemon:
jr z, .return
call FadeToMenu
.choosemenu
xor a
ld [wPartyMenuActionText], a ; Choose a POKéMON.
call ClearBGPalettes
.menu
farcall LoadPartyMenuGFX
farcall InitPartyMenuWithCancel
farcall InitPartyMenuGFX
.menunoreload
farcall WritePartyMenuTilemap
farcall PlacePartyMenuText
call WaitBGMap
call SetPalettes ; load regular palettes?
call DelayFrame
farcall PartyMenuSelect
jr c, .return ; if cancelled or pressed B
call PokemonActionSubmenu
cp 3
jr z, .menu
cp 0
jr z, .choosemenu
cp 1
jr z, .menunoreload
cp 2
jr z, .quit
farcall Party
jr nc, .quit
.return
call CloseSubmenu

View File

@@ -11,6 +11,9 @@ OverworldLoop::
cp MAPSTATUS_DONE
jr nz, .loop
.done
call DisableOverworldHUD
ld hl, wGameTimerPaused
res GAME_TIMER_PAUSED_F, [hl] ; stop game timer counter
ret
.Jumptable:
@@ -105,6 +108,8 @@ StartMap:
call ByteFill
farcall InitCallReceiveDelay
call ClearJoypad
ld a, BOARDEVENT_DISPLAY_MENU
ld [hCurBoardEvent], a
EnterMap:
xor a
ld [wXYComparePointer], a
@@ -238,6 +243,9 @@ PlayerEvents:
and a
ret nz
call CheckBoardEvent
jr c, .ok
call CheckTrainerBattle_GetPlayerEvent
jr c, .ok
@@ -269,6 +277,28 @@ PlayerEvents:
scf
ret
CheckBoardEvent:
jumptable .Jumptable, hCurBoardEvent
.Jumptable:
table_width 2, .Jumptable
dw .none
dw .menu
assert_table_length NUM_BOARD_EVENTS + 1
.none
xor a
ret
.menu
ld a, BANK(BoardMenuScript)
ld hl, BoardMenuScript
call CallScript
xor a
ld [hCurBoardEvent], a
scf
ret
CheckTrainerBattle_GetPlayerEvent:
call CheckTrainerBattle
jr nc, .nope

View File

@@ -234,6 +234,7 @@ ScriptCommandTable:
dw Script_getname ; a7
dw Script_wait ; a8
dw Script_checksave ; a9
dw Script_exitoverworld ; aa
assert_table_length NUM_EVENT_COMMANDS
StartScript:
@@ -2329,6 +2330,14 @@ ReturnFromCredits:
call StopScript
ret
Script_exitoverworld:
call GetScriptByte
call Script_endall
ld a, MAPSTATUS_DONE
call LoadMapStatus
call StopScript
ret
Script_wait:
push bc
call GetScriptByte

View File

@@ -104,6 +104,37 @@ CancelPokemonAction:
ld a, 1
ret
Party::
.choosemenu
xor a
ld [wPartyMenuActionText], a ; Choose a POKéMON.
call ClearBGPalettes
.menu
farcall LoadPartyMenuGFX
farcall InitPartyMenuWithCancel
farcall InitPartyMenuGFX
.menunoreload
farcall WritePartyMenuTilemap
farcall PlacePartyMenuText
call WaitBGMap
call SetPalettes ; load regular palettes?
call DelayFrame
farcall PartyMenuSelect
ret c ; if cancelled or pressed B
call PokemonActionSubmenu
and 3
cp 3
jr z, .menu
cp 0
jr z, .choosemenu
cp 1
jr z, .menunoreload
and a ; must be 2, which means quit after using field move
ret ; nc
PokemonActionSubmenu:
hlcoord 1, 15
lb bc, 2, 18