pokecrystal-board/engine/menus/start_menu.asm

1848 lines
27 KiB
NASM
Raw Normal View History

; StartMenu.Items indexes
const_def
const STARTMENUITEM_POKEDEX ; 0
const STARTMENUITEM_POKEMON ; 1
const STARTMENUITEM_PACK ; 2
const STARTMENUITEM_STATUS ; 3
const STARTMENUITEM_SAVE ; 4
const STARTMENUITEM_OPTION ; 5
const STARTMENUITEM_EXIT ; 6
const STARTMENUITEM_POKEGEAR ; 7
const STARTMENUITEM_QUIT ; 8
2018-06-24 07:09:41 -07:00
StartMenu::
call ClearWindowData
2015-11-11 13:11:08 -08:00
ld de, SFX_MENU
call PlaySFX
2017-12-24 09:47:30 -08:00
farcall ReanchorBGMap_NoOAMUpdate
2015-11-11 13:11:08 -08:00
ld hl, wStatusFlags2
2018-01-22 12:40:43 -08:00
bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
ld hl, .MenuHeader
2015-11-11 13:11:08 -08:00
jr z, .GotMenuData
ld hl, .ContestMenuHeader
2015-11-11 13:11:08 -08:00
2018-06-25 09:24:18 -07:00
.GotMenuData:
call LoadMenuHeader
2015-11-11 13:11:08 -08:00
call .SetUpMenuItems
2017-12-09 16:41:03 -08:00
ld a, [wBattleMenuCursorBuffer]
2015-11-11 13:11:08 -08:00
ld [wMenuCursorBuffer], a
call .DrawMenuAccount_
call DrawVariableLengthMenuBox
2015-11-11 13:11:08 -08:00
call .DrawBugContestStatusBox
call SafeUpdateSprites
2016-05-04 19:34:09 -07:00
call _OpenAndCloseMenu_HDMATransferTileMapAndAttrMap
2017-12-24 09:47:30 -08:00
farcall LoadFonts_NoOAMUpdate
2015-11-11 13:11:08 -08:00
call .DrawBugContestStatus
call UpdateTimePals
jr .Select
.Reopen:
2015-11-11 13:11:08 -08:00
call UpdateSprites
call UpdateTimePals
call .SetUpMenuItems
2017-12-09 16:41:03 -08:00
ld a, [wBattleMenuCursorBuffer]
2015-11-11 13:11:08 -08:00
ld [wMenuCursorBuffer], a
.Select:
2015-11-11 13:11:08 -08:00
call .GetInput
jr c, .Exit
call .DrawMenuAccount
ld a, [wMenuCursorBuffer]
2017-12-09 16:41:03 -08:00
ld [wBattleMenuCursorBuffer], a
2015-11-11 13:11:08 -08:00
call PlayClickSFX
2015-12-17 19:31:16 -08:00
call PlaceHollowCursor
2015-11-11 13:11:08 -08:00
call .OpenMenu
; Menu items have different return functions.
; For example, saving exits the menu.
ld hl, .MenuReturns
ld e, a
ld d, 0
add hl, de
2015-12-26 18:59:03 -08:00
add hl, de
2015-11-11 13:11:08 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2015-11-11 13:11:08 -08:00
.MenuReturns:
2015-11-11 13:11:08 -08:00
dw .Reopen
dw .Exit
2015-11-25 07:16:29 -08:00
dw .ExitMenuCallFuncCloseText
dw .ExitMenuRunScriptCloseText
2015-11-11 13:11:08 -08:00
dw .ExitMenuRunScript
dw .ReturnEnd
dw .ReturnRedraw
.Exit:
2015-11-11 13:11:08 -08:00
ld a, [hOAMUpdate]
push af
ld a, 1
ld [hOAMUpdate], a
call LoadFontsExtra
pop af
ld [hOAMUpdate], a
.ReturnEnd:
2015-11-11 13:11:08 -08:00
call ExitMenu
.ReturnEnd2:
2015-11-25 07:16:29 -08:00
call CloseText
2015-11-11 13:11:08 -08:00
call UpdateTimePals
ret
.GetInput:
2015-11-11 13:11:08 -08:00
; Return carry on exit, and no-carry on selection.
xor a
ld [hBGMapMode], a
call .DrawMenuAccount
call SetUpMenu
ld a, $ff
2018-01-23 14:39:09 -08:00
ld [wMenuSelection], a
2015-11-11 13:11:08 -08:00
.loop
call .PrintMenuAccount
2016-03-01 19:31:21 -08:00
call GetScrollingMenuJoypad
2015-12-15 15:59:49 -08:00
ld a, [wMenuJoypad]
2015-11-11 13:11:08 -08:00
cp B_BUTTON
jr z, .b
cp A_BUTTON
jr z, .a
jr .loop
.a
call PlayClickSFX
and a
ret
.b
scf
ret
2018-06-24 07:09:41 -07:00
.ExitMenuRunScript:
2015-11-11 13:11:08 -08:00
call ExitMenu
ld a, HMENURETURN_SCRIPT
ld [hMenuReturn], a
ret
2018-06-24 07:09:41 -07:00
.ExitMenuRunScriptCloseText:
2015-11-11 13:11:08 -08:00
call ExitMenu
ld a, HMENURETURN_SCRIPT
ld [hMenuReturn], a
jr .ReturnEnd2
2018-06-24 07:09:41 -07:00
.ExitMenuCallFuncCloseText:
2015-11-11 13:11:08 -08:00
call ExitMenu
ld hl, wQueuedScriptAddr
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wQueuedScriptBank]
rst FarCall
jr .ReturnEnd2
2018-06-24 07:09:41 -07:00
.ReturnRedraw:
2015-11-11 13:11:08 -08:00
call .Clear
jp .Reopen
2018-06-24 07:09:41 -07:00
.Clear:
2015-11-11 20:38:57 -08:00
call ClearBGPalettes
2015-11-11 13:11:08 -08:00
call Call_ExitMenu
2015-12-18 17:07:09 -08:00
call ReloadTilesetAndPalettes
2015-11-11 13:11:08 -08:00
call .DrawMenuAccount_
call DrawVariableLengthMenuBox
2015-11-11 13:11:08 -08:00
call .DrawBugContestStatus
call UpdateSprites
2015-12-09 08:38:40 -08:00
call ret_d90
2016-01-06 04:44:50 -08:00
call FinishExitMenu
2015-11-11 13:11:08 -08:00
ret
.MenuHeader:
db MENU_BACKUP_TILES ; flags
menu_coords 10, 0, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
2015-11-11 13:11:08 -08:00
dw .MenuData
db 1 ; default selection
.ContestMenuHeader:
db MENU_BACKUP_TILES ; flags
menu_coords 10, 2, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
2015-11-11 13:11:08 -08:00
dw .MenuData
db 1 ; default selection
.MenuData:
db STATICMENU_CURSOR | STATICMENU_WRAP | STATICMENU_ENABLE_START ; flags
2015-11-11 13:11:08 -08:00
dn 0, 0 ; rows, columns
2018-01-23 14:39:09 -08:00
dw wMenuItemsList
2015-11-11 13:11:08 -08:00
dw .MenuString
dw .Items
.Items:
; entries correspond to STARTMENUITEM_* constants
2015-11-11 13:11:08 -08:00
dw StartMenu_Pokedex, .PokedexString, .PokedexDesc
dw StartMenu_Pokemon, .PartyString, .PartyDesc
dw StartMenu_Pack, .PackString, .PackDesc
dw StartMenu_Status, .StatusString, .StatusDesc
dw StartMenu_Save, .SaveString, .SaveDesc
dw StartMenu_Option, .OptionString, .OptionDesc
dw StartMenu_Exit, .ExitString, .ExitDesc
dw StartMenu_Pokegear, .PokegearString, .PokegearDesc
dw StartMenu_Quit, .QuitString, .QuitDesc
.PokedexString: db "#DEX@"
.PartyString: db "#MON@"
.PackString: db "PACK@"
.StatusString: db "<PLAYER>@"
.SaveString: db "SAVE@"
.OptionString: db "OPTION@"
.ExitString: db "EXIT@"
.PokegearString: db "<POKE>GEAR@"
.QuitString: db "QUIT@"
.PokedexDesc:
db "#MON"
2016-06-07 05:13:08 -07:00
next "database@"
2015-11-11 13:11:08 -08:00
.PartyDesc:
db "Party <PKMN>"
2016-06-07 05:13:08 -07:00
next "status@"
2015-11-11 13:11:08 -08:00
.PackDesc:
db "Contains"
2016-06-07 05:13:08 -07:00
next "items@"
2015-11-11 13:11:08 -08:00
.PokegearDesc:
db "Trainer's"
2016-06-07 05:13:08 -07:00
next "key device@"
2015-11-11 13:11:08 -08:00
.StatusDesc:
db "Your own"
2016-06-07 05:13:08 -07:00
next "status@"
2015-11-11 13:11:08 -08:00
.SaveDesc:
db "Save your"
2016-06-07 05:13:08 -07:00
next "progress@"
2015-11-11 13:11:08 -08:00
.OptionDesc:
db "Change"
2016-06-07 05:13:08 -07:00
next "settings@"
2015-11-11 13:11:08 -08:00
.ExitDesc:
db "Close this"
2016-06-07 05:13:08 -07:00
next "menu@"
2015-11-11 13:11:08 -08:00
.QuitDesc:
db "Quit and"
2016-06-07 05:13:08 -07:00
next "be judged.@"
2015-11-11 13:11:08 -08:00
2018-06-24 07:09:41 -07:00
.OpenMenu:
2018-01-23 14:39:09 -08:00
ld a, [wMenuSelection]
2015-11-11 13:11:08 -08:00
call .GetMenuAccountTextPointer
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2015-11-11 13:11:08 -08:00
2018-06-24 07:09:41 -07:00
.MenuString:
2015-11-11 13:11:08 -08:00
push de
2018-01-23 14:39:09 -08:00
ld a, [wMenuSelection]
2015-11-11 13:11:08 -08:00
call .GetMenuAccountTextPointer
inc hl
2015-12-26 18:59:03 -08:00
inc hl
2015-11-11 13:11:08 -08:00
ld a, [hli]
ld d, [hl]
ld e, a
pop hl
call PlaceString
ret
2018-06-24 07:09:41 -07:00
.MenuDesc:
2015-11-11 13:11:08 -08:00
push de
2018-01-23 14:39:09 -08:00
ld a, [wMenuSelection]
2015-11-11 13:11:08 -08:00
cp $ff
jr z, .none
call .GetMenuAccountTextPointer
rept 4
inc hl
endr
ld a, [hli]
ld d, [hl]
ld e, a
pop hl
call PlaceString
ret
.none
pop de
ret
2018-06-24 07:09:41 -07:00
.GetMenuAccountTextPointer:
2015-11-11 13:11:08 -08:00
ld e, a
ld d, 0
ld hl, wMenuDataPointerTableAddr
2015-11-11 13:11:08 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
rept 6
add hl, de
endr
ret
2018-06-24 07:09:41 -07:00
.SetUpMenuItems:
2015-11-11 13:11:08 -08:00
xor a
2015-12-18 17:07:09 -08:00
ld [wWhichIndexSet], a
2015-11-11 13:11:08 -08:00
call .FillMenuList
ld hl, wStatusFlags
2018-01-22 12:40:43 -08:00
bit STATUSFLAGS_POKEDEX_F, [hl]
2015-11-11 13:11:08 -08:00
jr z, .no_pokedex
ld a, STARTMENUITEM_POKEDEX
2015-11-11 13:11:08 -08:00
call .AppendMenuList
.no_pokedex
2018-01-23 14:39:09 -08:00
ld a, [wPartyCount]
2015-11-11 13:11:08 -08:00
and a
jr z, .no_pokemon
ld a, STARTMENUITEM_POKEMON
2015-11-11 13:11:08 -08:00
call .AppendMenuList
.no_pokemon
ld a, [wLinkMode]
and a
jr nz, .no_pack
ld hl, wStatusFlags2
2018-01-22 12:40:43 -08:00
bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
2015-11-11 13:11:08 -08:00
jr nz, .no_pack
ld a, STARTMENUITEM_PACK
2015-11-11 13:11:08 -08:00
call .AppendMenuList
.no_pack
ld hl, wPokegearFlags
bit POKEGEAR_OBTAINED_F, [hl]
2015-11-11 13:11:08 -08:00
jr z, .no_pokegear
ld a, STARTMENUITEM_POKEGEAR
2015-11-11 13:11:08 -08:00
call .AppendMenuList
.no_pokegear
2018-01-22 12:40:43 -08:00
ld a, STARTMENUITEM_STATUS
2015-11-11 13:11:08 -08:00
call .AppendMenuList
ld a, [wLinkMode]
and a
jr nz, .no_save
ld hl, wStatusFlags2
2018-01-22 12:40:43 -08:00
bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
ld a, STARTMENUITEM_QUIT
2015-11-11 13:11:08 -08:00
jr nz, .write
ld a, STARTMENUITEM_SAVE
2015-11-11 13:11:08 -08:00
.write
call .AppendMenuList
.no_save
ld a, STARTMENUITEM_OPTION
2015-11-11 13:11:08 -08:00
call .AppendMenuList
ld a, STARTMENUITEM_EXIT
2015-11-11 13:11:08 -08:00
call .AppendMenuList
ld a, c
2018-01-23 14:39:09 -08:00
ld [wMenuItemsList], a
2015-11-11 13:11:08 -08:00
ret
2018-06-24 07:09:41 -07:00
.FillMenuList:
2015-11-11 13:11:08 -08:00
xor a
2018-01-23 14:39:09 -08:00
ld hl, wMenuItemsList
2015-11-11 13:11:08 -08:00
ld [hli], a
ld a, -1
2018-01-23 14:39:09 -08:00
ld bc, wMenuItemsListEnd - (wMenuItemsList + 1)
2015-11-11 13:11:08 -08:00
call ByteFill
2018-01-23 14:39:09 -08:00
ld de, wMenuItemsList + 1
2015-11-11 13:11:08 -08:00
ld c, 0
ret
2018-06-24 07:09:41 -07:00
.AppendMenuList:
2015-11-11 13:11:08 -08:00
ld [de], a
inc de
inc c
ret
2018-06-24 07:09:41 -07:00
.DrawMenuAccount_:
2015-11-11 13:11:08 -08:00
jp .DrawMenuAccount
2018-06-24 07:09:41 -07:00
.PrintMenuAccount:
2015-11-11 13:11:08 -08:00
call .IsMenuAccountOn
ret z
call .DrawMenuAccount
decoord 0, 14
jp .MenuDesc
2018-06-24 07:09:41 -07:00
.DrawMenuAccount:
2015-11-11 13:11:08 -08:00
call .IsMenuAccountOn
ret z
hlcoord 0, 13
lb bc, 5, 10
call ClearBox
hlcoord 0, 13
ld b, 3
ld c, 8
jp TextBoxPalette
2018-06-24 07:09:41 -07:00
.IsMenuAccountOn:
2018-01-23 14:39:09 -08:00
ld a, [wOptions2]
and 1 << MENU_ACCOUNT
2015-11-11 13:11:08 -08:00
ret
2018-06-24 07:09:41 -07:00
.DrawBugContestStatusBox:
ld hl, wStatusFlags2
2018-01-22 12:40:43 -08:00
bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
2015-11-11 13:11:08 -08:00
ret z
2017-12-24 09:47:30 -08:00
farcall StartMenu_DrawBugContestStatusBox
2015-11-11 13:11:08 -08:00
ret
2018-06-24 07:09:41 -07:00
.DrawBugContestStatus:
ld hl, wStatusFlags2
2018-01-22 12:40:43 -08:00
bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, [hl]
2015-11-11 13:11:08 -08:00
jr nz, .contest
ret
.contest
2017-12-24 09:47:30 -08:00
farcall StartMenu_PrintBugContestStatus
2015-11-11 13:11:08 -08:00
ret
2018-06-24 07:09:41 -07:00
StartMenu_Exit:
2015-11-11 13:11:08 -08:00
; Exit the menu.
ld a, 1
ret
2018-06-24 07:09:41 -07:00
StartMenu_Quit:
2015-11-11 13:11:08 -08:00
; Retire from the bug catching contest.
ld hl, .EndTheContestText
2015-11-17 14:56:49 -08:00
call StartMenuYesNo
2015-11-11 13:11:08 -08:00
jr c, .DontEndContest
ld a, BANK(BugCatchingContestReturnToGateScript)
ld hl, BugCatchingContestReturnToGateScript
call FarQueueScript
ld a, 4
ret
.DontEndContest:
2015-11-11 13:11:08 -08:00
ld a, 0
ret
.EndTheContestText:
2015-11-11 13:11:08 -08:00
text_jump UnknownText_0x1c1a6c
db "@"
2018-06-24 07:09:41 -07:00
StartMenu_Save:
2015-11-11 13:11:08 -08:00
; Save the game.
call BufferScreen
2017-12-24 09:47:30 -08:00
farcall SaveMenu
2015-11-11 13:11:08 -08:00
jr nc, .asm_12919
ld a, 0
ret
.asm_12919
ld a, 1
ret
2018-06-24 07:09:41 -07:00
StartMenu_Option:
2015-11-11 13:11:08 -08:00
; Game options.
call FadeToMenu
2017-12-24 09:47:30 -08:00
farcall OptionsMenu
2015-11-11 13:11:08 -08:00
ld a, 6
ret
2018-06-24 07:09:41 -07:00
StartMenu_Status:
2015-11-11 13:11:08 -08:00
; Player status.
call FadeToMenu
2017-12-24 09:47:30 -08:00
farcall TrainerCard
call CloseSubmenu
2015-11-11 13:11:08 -08:00
ld a, 0
ret
2018-06-24 07:09:41 -07:00
StartMenu_Pokedex:
2018-01-23 14:39:09 -08:00
ld a, [wPartyCount]
2015-11-11 13:11:08 -08:00
and a
jr z, .asm_12949
call FadeToMenu
2017-12-24 09:47:30 -08:00
farcall Pokedex
call CloseSubmenu
2015-11-11 13:11:08 -08:00
.asm_12949
ld a, 0
ret
2018-06-24 07:09:41 -07:00
StartMenu_Pokegear:
2015-11-11 13:11:08 -08:00
call FadeToMenu
2017-12-24 09:47:30 -08:00
farcall PokeGear
call CloseSubmenu
2015-11-11 13:11:08 -08:00
ld a, 0
ret
2018-06-24 07:09:41 -07:00
StartMenu_Pack:
2015-11-11 13:11:08 -08:00
call FadeToMenu
2017-12-24 09:47:30 -08:00
farcall Pack
2018-01-11 12:36:11 -08:00
ld a, [wPackUsedItem]
2015-11-11 13:11:08 -08:00
and a
2015-11-17 14:56:49 -08:00
jr nz, .used_item
call CloseSubmenu
2015-11-11 13:11:08 -08:00
ld a, 0
ret
2015-11-17 14:56:49 -08:00
.used_item
call ExitAllMenus
2015-11-11 13:11:08 -08:00
ld a, 4
ret
2018-06-24 07:09:41 -07:00
StartMenu_Pokemon:
2018-01-23 14:39:09 -08:00
ld a, [wPartyCount]
2015-11-11 13:11:08 -08:00
and a
jr z, .return
call FadeToMenu
.choosemenu
xor a
2018-01-23 14:39:09 -08:00
ld [wPartyMenuActionText], a ; Choose a POKéMON.
2015-11-11 20:38:57 -08:00
call ClearBGPalettes
2015-11-11 13:11:08 -08:00
.menu
2017-12-24 09:47:30 -08:00
farcall LoadPartyMenuGFX
farcall InitPartyMenuWithCancel
farcall InitPartyMenuGFX
2015-11-11 13:11:08 -08:00
.menunoreload
2017-12-24 09:47:30 -08:00
farcall WritePartyMenuTilemap
farcall PrintPartyMenuText
2015-11-11 13:11:08 -08:00
call WaitBGMap
call SetPalettes ; load regular palettes?
call DelayFrame
2017-12-24 09:47:30 -08:00
farcall PartyMenuSelect
2015-11-11 13:11:08 -08:00
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
.return
call CloseSubmenu
2015-11-11 13:11:08 -08:00
ld a, 0
ret
.quit
ld a, b
push af
2015-11-17 14:56:49 -08:00
call ExitAllMenus
2015-11-11 13:11:08 -08:00
pop af
ret
2018-06-24 07:09:41 -07:00
HasNoItems:
2018-01-23 14:39:09 -08:00
ld a, [wNumItems]
2015-11-11 13:11:08 -08:00
and a
ret nz
2018-01-23 14:39:09 -08:00
ld a, [wNumKeyItems]
2015-11-11 13:11:08 -08:00
and a
ret nz
2018-01-23 14:39:09 -08:00
ld a, [wNumBalls]
2015-11-11 13:11:08 -08:00
and a
ret nz
2018-01-23 14:39:09 -08:00
ld hl, wTMsHMs
2015-11-11 13:11:08 -08:00
ld b, NUM_TMS + NUM_HMS
2015-11-17 14:56:49 -08:00
.loop
2015-11-11 13:11:08 -08:00
ld a, [hli]
and a
2015-11-17 14:56:49 -08:00
jr nz, .done
2015-11-11 13:11:08 -08:00
dec b
2015-11-17 14:56:49 -08:00
jr nz, .loop
2015-11-11 13:11:08 -08:00
scf
ret
2015-11-17 14:56:49 -08:00
.done
2015-11-11 13:11:08 -08:00
and a
ret
2018-06-24 07:09:41 -07:00
TossItemFromPC:
2015-11-11 13:11:08 -08:00
push de
call PartyMonItemName
2017-12-24 09:47:30 -08:00
farcall _CheckTossableItem
2015-11-11 13:11:08 -08:00
ld a, [wItemAttributeParamBuffer]
and a
2016-03-01 19:31:21 -08:00
jr nz, .key_item
ld hl, .TossHowMany
2015-11-11 13:11:08 -08:00
call MenuTextBox
2017-12-24 09:47:30 -08:00
farcall SelectQuantityToToss
2015-11-11 13:11:08 -08:00
push af
call CloseWindow
2015-11-11 13:11:08 -08:00
call ExitMenu
pop af
2016-03-01 19:31:21 -08:00
jr c, .quit
ld hl, .ConfirmToss
2015-11-11 13:11:08 -08:00
call MenuTextBox
call YesNoBox
push af
call ExitMenu
pop af
2016-03-01 19:31:21 -08:00
jr c, .quit
2015-11-11 13:11:08 -08:00
pop hl
2018-01-23 14:39:09 -08:00
ld a, [wCurItemQuantity]
2015-11-11 13:11:08 -08:00
call TossItem
call PartyMonItemName
2016-03-01 19:31:21 -08:00
ld hl, .TossedThisMany
2015-11-11 13:11:08 -08:00
call MenuTextBox
call ExitMenu
and a
ret
2016-03-01 19:31:21 -08:00
.key_item
call .CantToss
.quit
2015-11-11 13:11:08 -08:00
pop hl
scf
ret
.TossHowMany:
2015-11-11 13:11:08 -08:00
; Toss out how many @ (S)?
text_jump UnknownText_0x1c1a90
db "@"
.ConfirmToss:
2015-11-11 13:11:08 -08:00
; Throw away @ @ (S)?
text_jump UnknownText_0x1c1aad
db "@"
.TossedThisMany:
2015-11-11 13:11:08 -08:00
; Discarded @ (S).
text_jump UnknownText_0x1c1aca
db "@"
.CantToss:
2016-03-01 19:31:21 -08:00
ld hl, .TooImportantToToss
2015-11-11 13:11:08 -08:00
call MenuTextBoxBackup
ret
.TooImportantToToss:
2015-11-11 13:11:08 -08:00
; That's too impor- tant to toss out!
text_jump UnknownText_0x1c1adf
db "@"
2018-06-24 07:09:41 -07:00
CantUseItem:
2015-11-11 13:11:08 -08:00
ld hl, CantUseItemText
call MenuTextBoxWaitButton
2015-11-11 13:11:08 -08:00
ret
2018-06-24 07:09:41 -07:00
CantUseItemText:
2015-11-11 13:11:08 -08:00
text_jump UnknownText_0x1c1b03
db "@"
2018-06-24 07:09:41 -07:00
PartyMonItemName:
2018-01-23 14:39:09 -08:00
ld a, [wCurItem]
2015-11-11 13:11:08 -08:00
ld [wd265], a
call GetItemName
call CopyName1
ret
2018-06-24 07:09:41 -07:00
CancelPokemonAction:
2017-12-24 09:47:30 -08:00
farcall InitPartyMenuWithCancel
farcall UnfreezeMonIcons
2015-11-11 13:11:08 -08:00
ld a, 1
ret
2018-06-24 07:09:41 -07:00
PokemonActionSubmenu:
2015-11-11 13:11:08 -08:00
hlcoord 1, 15
lb bc, 2, 18
call ClearBox
2017-12-24 09:47:30 -08:00
farcall MonSubmenu
2015-11-11 13:11:08 -08:00
call GetCurNick
2018-01-23 14:39:09 -08:00
ld a, [wMenuSelection]
2015-11-11 13:11:08 -08:00
ld hl, .Actions
ld de, 3
call IsInArray
jr nc, .nothing
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2015-11-11 13:11:08 -08:00
.nothing
ld a, 0
ret
.Actions:
2018-01-23 07:46:26 -08:00
dbw MONMENUITEM_CUT, MonMenu_Cut
dbw MONMENUITEM_FLY, MonMenu_Fly
dbw MONMENUITEM_SURF, MonMenu_Surf
dbw MONMENUITEM_STRENGTH, MonMenu_Strength
dbw MONMENUITEM_FLASH, MonMenu_Flash
dbw MONMENUITEM_WHIRLPOOL, MonMenu_Whirlpool
dbw MONMENUITEM_DIG, MonMenu_Dig
dbw MONMENUITEM_TELEPORT, MonMenu_Teleport
dbw MONMENUITEM_SOFTBOILED, MonMenu_Softboiled_MilkDrink
dbw MONMENUITEM_MILKDRINK, MonMenu_Softboiled_MilkDrink
dbw MONMENUITEM_HEADBUTT, MonMenu_Headbutt
dbw MONMENUITEM_WATERFALL, MonMenu_Waterfall
dbw MONMENUITEM_ROCKSMASH, MonMenu_RockSmash
dbw MONMENUITEM_SWEETSCENT, MonMenu_SweetScent
dbw MONMENUITEM_STATS, OpenPartyStats
dbw MONMENUITEM_SWITCH, SwitchPartyMons
dbw MONMENUITEM_ITEM, GiveTakePartyMonItem
dbw MONMENUITEM_CANCEL, CancelPokemonAction
dbw MONMENUITEM_MOVE, ManagePokemonMoves
dbw MONMENUITEM_MAIL, MonMailAction
2015-11-11 13:11:08 -08:00
2018-06-24 07:09:41 -07:00
SwitchPartyMons:
2015-11-11 13:11:08 -08:00
; Don't try if there's nothing to switch!
2018-01-23 14:39:09 -08:00
ld a, [wPartyCount]
2015-11-11 13:11:08 -08:00
cp 2
jr c, .DontSwitch
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
inc a
2015-11-18 20:16:25 -08:00
ld [wSwitchMon], a
2015-11-11 13:11:08 -08:00
2017-12-24 09:47:30 -08:00
farcall HoldSwitchmonIcon
farcall InitPartyMenuNoCancel
2015-11-11 13:11:08 -08:00
ld a, PARTYMENUACTION_MOVE
2018-01-23 14:39:09 -08:00
ld [wPartyMenuActionText], a
2017-12-24 09:47:30 -08:00
farcall WritePartyMenuTilemap
farcall PrintPartyMenuText
2015-11-11 13:11:08 -08:00
hlcoord 0, 1
ld bc, SCREEN_WIDTH * 2
2015-11-18 20:16:25 -08:00
ld a, [wSwitchMon]
2015-11-11 13:11:08 -08:00
dec a
call AddNTimes
ld [hl], "▷"
call WaitBGMap
call SetPalettes
call DelayFrame
2017-12-24 09:47:30 -08:00
farcall PartyMenuSelect
2015-11-11 13:11:08 -08:00
bit 1, b
jr c, .DontSwitch
2017-12-24 09:47:30 -08:00
farcall _SwitchPartyMons
2015-11-11 13:11:08 -08:00
xor a
2018-01-23 14:39:09 -08:00
ld [wPartyMenuActionText], a
2015-11-11 13:11:08 -08:00
2017-12-24 09:47:30 -08:00
farcall LoadPartyMenuGFX
farcall InitPartyMenuWithCancel
farcall InitPartyMenuGFX
2015-11-11 13:11:08 -08:00
ld a, 1
ret
.DontSwitch:
2015-11-11 13:11:08 -08:00
xor a
2018-01-23 14:39:09 -08:00
ld [wPartyMenuActionText], a
2015-11-11 13:11:08 -08:00
call CancelPokemonAction
ret
2018-06-24 07:09:41 -07:00
GiveTakePartyMonItem:
2015-11-11 13:11:08 -08:00
; Eggs can't hold items!
2018-01-23 14:39:09 -08:00
ld a, [wCurPartySpecies]
2015-11-11 13:11:08 -08:00
cp EGG
2015-12-13 11:15:16 -08:00
jr z, .cancel
2015-11-11 13:11:08 -08:00
ld hl, GiveTakeItemMenuData
call LoadMenuHeader
2015-12-15 15:59:49 -08:00
call VerticalMenu
2015-11-11 13:11:08 -08:00
call ExitMenu
2015-12-13 11:15:16 -08:00
jr c, .cancel
2015-11-11 13:11:08 -08:00
call GetCurNick
2018-01-23 14:39:09 -08:00
ld hl, wStringBuffer1
2015-12-18 17:07:09 -08:00
ld de, wMonOrItemNameBuffer
2018-01-20 09:25:55 -08:00
ld bc, MON_NAME_LENGTH
2015-11-11 13:11:08 -08:00
call CopyBytes
2015-12-15 15:59:49 -08:00
ld a, [wMenuCursorY]
2015-11-11 13:11:08 -08:00
cp 1
2015-12-13 11:15:16 -08:00
jr nz, .take
2015-11-11 13:11:08 -08:00
call LoadStandardMenuHeader
2015-11-11 13:11:08 -08:00
call ClearPalettes
2015-12-13 11:15:16 -08:00
call .GiveItem
2015-11-11 13:11:08 -08:00
call ClearPalettes
call LoadFontsBattleExtra
call ExitMenu
ld a, 0
ret
2015-12-13 11:15:16 -08:00
.take
2015-11-11 13:11:08 -08:00
call TakePartyItem
ld a, 3
ret
2015-12-13 11:15:16 -08:00
.cancel
2015-11-11 13:11:08 -08:00
ld a, 3
ret
.GiveItem:
2017-12-24 09:47:30 -08:00
farcall DepositSellInitPackBuffers
2015-11-11 13:11:08 -08:00
.loop
2017-12-24 09:47:30 -08:00
farcall DepositSellPack
2015-11-11 13:11:08 -08:00
ld a, [wcf66]
and a
jr z, .quit
ld a, [wcf65]
cp 2
jr z, .next
call CheckTossableItem
ld a, [wItemAttributeParamBuffer]
and a
jr nz, .next
2015-12-13 11:15:16 -08:00
call TryGiveItemToPartymon
2015-11-11 13:11:08 -08:00
jr .quit
.next
ld hl, CantBeHeldText
call MenuTextBoxBackup
jr .loop
.quit
ret
2018-06-24 07:09:41 -07:00
TryGiveItemToPartymon:
2015-11-11 13:11:08 -08:00
call SpeechTextBox
call PartyMonItemName
2015-11-11 13:11:08 -08:00
call GetPartyItemLocation
ld a, [hl]
and a
2015-12-13 11:15:16 -08:00
jr z, .give_item_to_mon
2015-11-11 13:11:08 -08:00
push hl
ld d, a
2017-12-24 09:47:30 -08:00
farcall ItemIsMail
2015-11-11 13:11:08 -08:00
pop hl
2015-12-13 11:15:16 -08:00
jr c, .please_remove_mail
2015-11-11 13:11:08 -08:00
ld a, [hl]
2015-12-13 11:15:16 -08:00
jr .already_holding_item
2015-11-11 13:11:08 -08:00
2015-12-13 11:15:16 -08:00
.give_item_to_mon
2015-11-17 14:56:49 -08:00
call GiveItemToPokemon
2015-11-11 13:11:08 -08:00
ld hl, MadeHoldText
call MenuTextBoxBackup
call GivePartyItem
ret
2015-12-13 11:15:16 -08:00
.please_remove_mail
2015-11-11 13:11:08 -08:00
ld hl, PleaseRemoveMailText
call MenuTextBoxBackup
ret
2015-12-13 11:15:16 -08:00
.already_holding_item
2015-11-11 13:11:08 -08:00
ld [wd265], a
call GetItemName
ld hl, SwitchAlreadyHoldingText
2015-11-17 14:56:49 -08:00
call StartMenuYesNo
2015-12-13 11:15:16 -08:00
jr c, .abort
2015-11-11 13:11:08 -08:00
2015-11-17 14:56:49 -08:00
call GiveItemToPokemon
2015-11-11 13:11:08 -08:00
ld a, [wd265]
push af
2018-01-23 14:39:09 -08:00
ld a, [wCurItem]
2015-11-11 13:11:08 -08:00
ld [wd265], a
pop af
2018-01-23 14:39:09 -08:00
ld [wCurItem], a
2015-11-17 14:56:49 -08:00
call ReceiveItemFromPokemon
2015-12-13 11:15:16 -08:00
jr nc, .bag_full
2015-11-11 13:11:08 -08:00
ld hl, TookAndMadeHoldText
call MenuTextBoxBackup
ld a, [wd265]
2018-01-23 14:39:09 -08:00
ld [wCurItem], a
2015-11-11 13:11:08 -08:00
call GivePartyItem
ret
2015-12-13 11:15:16 -08:00
.bag_full
2015-11-11 13:11:08 -08:00
ld a, [wd265]
2018-01-23 14:39:09 -08:00
ld [wCurItem], a
2015-11-17 14:56:49 -08:00
call ReceiveItemFromPokemon
2015-11-11 13:11:08 -08:00
ld hl, ItemStorageIsFullText
call MenuTextBoxBackup
2015-12-13 11:15:16 -08:00
.abort
2015-11-11 13:11:08 -08:00
ret
2018-06-24 07:09:41 -07:00
GivePartyItem:
2015-11-11 13:11:08 -08:00
call GetPartyItemLocation
2018-01-23 14:39:09 -08:00
ld a, [wCurItem]
2015-11-11 13:11:08 -08:00
ld [hl], a
ld d, a
2017-12-24 09:47:30 -08:00
farcall ItemIsMail
2015-11-18 10:29:30 -08:00
jr nc, .done
call ComposeMailMessage
2015-11-11 13:11:08 -08:00
2015-11-18 10:29:30 -08:00
.done
2015-11-11 13:11:08 -08:00
ret
2018-06-24 07:09:41 -07:00
TakePartyItem:
2015-11-11 13:11:08 -08:00
call SpeechTextBox
call GetPartyItemLocation
ld a, [hl]
and a
jr z, .asm_12c8c
2018-01-23 14:39:09 -08:00
ld [wCurItem], a
2015-11-17 14:56:49 -08:00
call ReceiveItemFromPokemon
2015-11-11 13:11:08 -08:00
jr nc, .asm_12c94
2017-12-24 09:47:30 -08:00
farcall ItemIsMail
2015-11-11 13:11:08 -08:00
call GetPartyItemLocation
ld a, [hl]
ld [wd265], a
ld [hl], NO_ITEM
call GetItemName
ld hl, TookFromText
call MenuTextBoxBackup
jr .asm_12c9a
.asm_12c8c
ld hl, IsntHoldingAnythingText
call MenuTextBoxBackup
jr .asm_12c9a
.asm_12c94
ld hl, ItemStorageIsFullText
call MenuTextBoxBackup
.asm_12c9a
ret
2018-06-24 07:09:41 -07:00
GiveTakeItemMenuData:
db MENU_SPRITE_ANIMS | MENU_BACKUP_TILES ; flags
menu_coords 12, 12, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
2015-11-11 13:11:08 -08:00
dw .Items
db 1 ; default option
.Items:
db STATICMENU_CURSOR ; flags
2015-11-11 13:11:08 -08:00
db 2 ; # items
db "GIVE@"
db "TAKE@"
2018-06-24 07:09:41 -07:00
TookAndMadeHoldText:
2015-11-11 13:11:08 -08:00
text_jump UnknownText_0x1c1b2c
db "@"
2018-06-24 07:09:41 -07:00
MadeHoldText:
2015-11-11 13:11:08 -08:00
text_jump UnknownText_0x1c1b57
db "@"
2018-06-24 07:09:41 -07:00
PleaseRemoveMailText:
2015-11-11 13:11:08 -08:00
text_jump UnknownText_0x1c1b6f
db "@"
2018-06-24 07:09:41 -07:00
IsntHoldingAnythingText:
2015-11-11 13:11:08 -08:00
text_jump UnknownText_0x1c1b8e
db "@"
2018-06-24 07:09:41 -07:00
ItemStorageIsFullText:
2015-11-11 13:11:08 -08:00
text_jump UnknownText_0x1c1baa
db "@"
2018-06-24 07:09:41 -07:00
TookFromText:
2015-11-11 13:11:08 -08:00
text_jump UnknownText_0x1c1bc4
db "@"
2018-06-24 07:09:41 -07:00
SwitchAlreadyHoldingText:
2015-11-11 13:11:08 -08:00
text_jump UnknownText_0x1c1bdc
db "@"
2018-06-24 07:09:41 -07:00
CantBeHeldText:
2015-11-11 13:11:08 -08:00
text_jump UnknownText_0x1c1c09
db "@"
2018-06-24 07:09:41 -07:00
GetPartyItemLocation:
2015-11-11 13:11:08 -08:00
push af
ld a, MON_ITEM
call GetPartyParamLocation
pop af
ret
2018-06-24 07:09:41 -07:00
ReceiveItemFromPokemon:
ld a, 1
2015-11-11 13:11:08 -08:00
ld [wItemQuantityChangeBuffer], a
2018-01-23 14:39:09 -08:00
ld hl, wNumItems
2015-11-11 13:11:08 -08:00
jp ReceiveItem
2018-06-24 07:09:41 -07:00
GiveItemToPokemon:
ld a, 1
2015-11-11 13:11:08 -08:00
ld [wItemQuantityChangeBuffer], a
2018-01-23 14:39:09 -08:00
ld hl, wNumItems
2015-11-11 13:11:08 -08:00
jp TossItem
2018-06-24 07:09:41 -07:00
StartMenuYesNo:
2015-11-11 13:11:08 -08:00
call MenuTextBox
call YesNoBox
jp ExitMenu
2018-06-24 07:09:41 -07:00
ComposeMailMessage:
2015-11-18 10:29:30 -08:00
ld de, wTempMailMessage
2017-12-24 09:47:30 -08:00
farcall _ComposeMailMessage
2018-01-23 14:39:09 -08:00
ld hl, wPlayerName
2015-11-18 10:29:30 -08:00
ld de, wTempMailAuthor
2015-11-17 14:56:49 -08:00
ld bc, NAME_LENGTH - 1
2015-11-11 13:11:08 -08:00
call CopyBytes
2018-01-23 14:39:09 -08:00
ld hl, wPlayerID
2015-11-18 10:29:30 -08:00
ld bc, 2
2015-11-11 13:11:08 -08:00
call CopyBytes
2018-01-23 14:39:09 -08:00
ld a, [wCurPartySpecies]
2015-11-11 13:11:08 -08:00
ld [de], a
inc de
2018-01-23 14:39:09 -08:00
ld a, [wCurItem]
2015-11-11 13:11:08 -08:00
ld [de], a
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-17 14:56:49 -08:00
ld hl, sPartyMail
ld bc, MAIL_STRUCT_LENGTH
2015-11-11 13:11:08 -08:00
call AddNTimes
ld d, h
ld e, l
2015-11-18 10:29:30 -08:00
ld hl, wTempMail
2015-11-17 14:56:49 -08:00
ld bc, MAIL_STRUCT_LENGTH
ld a, BANK(sPartyMail)
2015-11-11 13:11:08 -08:00
call GetSRAMBank
call CopyBytes
call CloseSRAM
ret
2018-06-24 07:09:41 -07:00
MonMailAction:
2015-11-11 13:11:08 -08:00
; If in the time capsule or trade center,
; selecting the mail only allows you to
; read the mail.
ld a, [wLinkMode]
cp LINK_TIMECAPSULE
jr z, .read
cp LINK_TRADECENTER
jr z, .read
; Show the READ/TAKE/QUIT menu.
ld hl, .MenuHeader
call LoadMenuHeader
2015-12-15 15:59:49 -08:00
call VerticalMenu
2015-11-11 13:11:08 -08:00
call ExitMenu
; Interpret the menu.
jp c, .done
2015-12-15 15:59:49 -08:00
ld a, [wMenuCursorY]
2015-11-11 13:11:08 -08:00
cp $1
jr z, .read
cp $2
jr z, .take
jp .done
.read
2017-12-24 09:47:30 -08:00
farcall ReadPartyMonMail
2015-11-11 13:11:08 -08:00
ld a, $0
ret
.take
ld hl, .sendmailtopctext
2015-11-17 14:56:49 -08:00
call StartMenuYesNo
2015-11-11 13:11:08 -08:00
jr c, .RemoveMailToBag
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
ld b, a
2017-12-24 09:47:30 -08:00
farcall SendMailToPC
2015-11-11 13:11:08 -08:00
jr c, .MailboxFull
ld hl, .sentmailtopctext
call MenuTextBoxBackup
jr .done
.MailboxFull:
2015-11-11 13:11:08 -08:00
ld hl, .mailboxfulltext
call MenuTextBoxBackup
jr .done
.RemoveMailToBag:
2015-11-11 13:11:08 -08:00
ld hl, .mailwilllosemessagetext
2015-11-17 14:56:49 -08:00
call StartMenuYesNo
2015-11-11 13:11:08 -08:00
jr c, .done
call GetPartyItemLocation
ld a, [hl]
2018-01-23 14:39:09 -08:00
ld [wCurItem], a
2015-11-17 14:56:49 -08:00
call ReceiveItemFromPokemon
2015-11-11 13:11:08 -08:00
jr nc, .BagIsFull
call GetPartyItemLocation
ld [hl], $0
call GetCurNick
ld hl, .tookmailfrommontext
call MenuTextBoxBackup
jr .done
.BagIsFull:
2015-11-11 13:11:08 -08:00
ld hl, .bagfulltext
call MenuTextBoxBackup
jr .done
.done
ld a, $3
ret
.MenuHeader:
db MENU_BACKUP_TILES ; flags
menu_coords 12, 10, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
dw .MenuData
2015-11-11 13:11:08 -08:00
db 1 ; default option
.MenuData:
db STATICMENU_CURSOR ; flags
2015-11-11 13:11:08 -08:00
db 3 ; items
db "READ@"
db "TAKE@"
db "QUIT@"
2016-03-01 19:31:21 -08:00
.mailwilllosemessagetext
2015-11-11 13:11:08 -08:00
; The MAIL will lose its message. OK?
text_jump UnknownText_0x1c1c22
db "@"
2016-03-01 19:31:21 -08:00
.tookmailfrommontext
2015-11-11 13:11:08 -08:00
; MAIL detached from <POKEMON>.
text_jump UnknownText_0x1c1c47
db "@"
2016-03-01 19:31:21 -08:00
.bagfulltext
2015-11-11 13:11:08 -08:00
; There's no space for removing MAIL.
text_jump UnknownText_0x1c1c62
db "@"
2016-03-01 19:31:21 -08:00
.sendmailtopctext
2015-11-11 13:11:08 -08:00
; Send the removed MAIL to your PC?
text_jump UnknownText_0x1c1c86
db "@"
2016-03-01 19:31:21 -08:00
.mailboxfulltext
2015-11-11 13:11:08 -08:00
; Your PC's MAILBOX is full.
text_jump UnknownText_0x1c1ca9
db "@"
2016-03-01 19:31:21 -08:00
.sentmailtopctext
2015-11-11 13:11:08 -08:00
; The MAIL was sent to your PC.
text_jump UnknownText_0x1c1cc4
db "@"
2018-06-24 07:09:41 -07:00
OpenPartyStats:
call LoadStandardMenuHeader
2015-11-11 13:11:08 -08:00
call ClearSprites
; PartyMon
xor a
2018-01-23 14:39:09 -08:00
ld [wMonType], a
2015-11-11 13:11:08 -08:00
call LowVolume
predef StatsScreenInit
2015-11-11 13:11:08 -08:00
call MaxVolume
call Call_ExitMenu
ld a, 0
ret
2018-06-24 07:09:41 -07:00
MonMenu_Cut:
2017-12-24 09:47:30 -08:00
farcall CutFunction
ld a, [wFieldMoveSucceeded]
2015-11-11 13:11:08 -08:00
cp $1
jr nz, .Fail
2015-11-11 13:11:08 -08:00
ld b, $4
ld a, $2
ret
.Fail:
2015-11-11 13:11:08 -08:00
ld a, $3
ret
2018-06-24 07:09:41 -07:00
MonMenu_Fly:
2017-12-24 09:47:30 -08:00
farcall FlyFunction
ld a, [wFieldMoveSucceeded]
2015-11-11 13:11:08 -08:00
cp $2
jr z, .Fail
2015-11-11 13:11:08 -08:00
cp $0
jr z, .Error
farcall StubbedTrainerRankings_Fly
2015-11-11 13:11:08 -08:00
ld b, $4
ld a, $2
ret
.Fail:
2015-11-11 13:11:08 -08:00
ld a, $3
ret
.Error:
2015-11-11 13:11:08 -08:00
ld a, $0
ret
.Unreferenced:
2015-11-11 13:11:08 -08:00
ld a, $1
ret
2018-06-24 07:09:41 -07:00
MonMenu_Flash:
2017-12-24 09:47:30 -08:00
farcall OWFlash
ld a, [wFieldMoveSucceeded]
2015-11-11 13:11:08 -08:00
cp $1
jr nz, .Fail
2015-11-11 13:11:08 -08:00
ld b, $4
ld a, $2
ret
.Fail:
2015-11-11 13:11:08 -08:00
ld a, $3
ret
2018-06-24 07:09:41 -07:00
MonMenu_Strength:
2017-12-24 09:47:30 -08:00
farcall StrengthFunction
ld a, [wFieldMoveSucceeded]
2015-11-11 13:11:08 -08:00
cp $1
jr nz, .Fail
2015-11-11 13:11:08 -08:00
ld b, $4
ld a, $2
ret
.Fail:
2015-11-11 13:11:08 -08:00
ld a, $3
ret
2018-06-24 07:09:41 -07:00
MonMenu_Whirlpool:
2017-12-24 09:47:30 -08:00
farcall WhirlpoolFunction
ld a, [wFieldMoveSucceeded]
2015-11-11 13:11:08 -08:00
cp $1
jr nz, .Fail
2015-11-11 13:11:08 -08:00
ld b, $4
ld a, $2
ret
.Fail:
2015-11-11 13:11:08 -08:00
ld a, $3
ret
2018-06-24 07:09:41 -07:00
MonMenu_Waterfall:
2017-12-24 09:47:30 -08:00
farcall WaterfallFunction
ld a, [wFieldMoveSucceeded]
2015-11-11 13:11:08 -08:00
cp $1
jr nz, .Fail
2015-11-11 13:11:08 -08:00
ld b, $4
ld a, $2
ret
.Fail:
2015-11-11 13:11:08 -08:00
ld a, $3
ret
2018-06-24 07:09:41 -07:00
MonMenu_Teleport:
2017-12-24 09:47:30 -08:00
farcall TeleportFunction
ld a, [wFieldMoveSucceeded]
2015-11-11 13:11:08 -08:00
and a
jr z, .Fail
2015-11-11 13:11:08 -08:00
ld b, $4
ld a, $2
ret
.Fail:
2015-11-11 13:11:08 -08:00
ld a, $3
ret
2018-06-24 07:09:41 -07:00
MonMenu_Surf:
2017-12-24 09:47:30 -08:00
farcall SurfFunction
ld a, [wFieldMoveSucceeded]
2015-11-11 13:11:08 -08:00
and a
jr z, .Fail
2015-11-11 13:11:08 -08:00
ld b, $4
ld a, $2
ret
.Fail:
2015-11-11 13:11:08 -08:00
ld a, $3
ret
2018-06-24 07:09:41 -07:00
MonMenu_Dig:
2017-12-24 09:47:30 -08:00
farcall DigFunction
ld a, [wFieldMoveSucceeded]
2015-11-11 13:11:08 -08:00
cp $1
jr nz, .Fail
2015-11-11 13:11:08 -08:00
ld b, $4
ld a, $2
ret
.Fail:
2015-11-11 13:11:08 -08:00
ld a, $3
ret
2018-06-24 07:09:41 -07:00
MonMenu_Softboiled_MilkDrink:
call .CheckMonHasEnoughHP
jr nc, .NotEnoughHP
2017-12-24 09:47:30 -08:00
farcall Softboiled_MilkDrinkFunction
jr .finish
2015-11-11 13:11:08 -08:00
.NotEnoughHP:
ld hl, .Text_NotEnoughHP
2015-11-11 13:11:08 -08:00
call PrintText
.finish
2015-11-11 13:11:08 -08:00
xor a
2018-01-23 14:39:09 -08:00
ld [wPartyMenuActionText], a
2015-11-11 13:11:08 -08:00
ld a, $3
ret
.Text_NotEnoughHP:
2015-11-11 13:11:08 -08:00
; Not enough HP!
text_jump UnknownText_0x1c1ce3
db "@"
.CheckMonHasEnoughHP:
; Need to have at least (MaxHP / 5) HP left.
2015-11-11 13:11:08 -08:00
ld a, MON_MAXHP
call GetPartyParamLocation
ld a, [hli]
ld [hDividend + 0], a
ld a, [hl]
ld [hDividend + 1], a
ld a, 5
2015-11-11 13:11:08 -08:00
ld [hDivisor], a
ld b, 2
2015-11-11 13:11:08 -08:00
call Divide
ld a, MON_HP + 1
call GetPartyParamLocation
ld a, [hQuotient + 2]
sub [hl]
dec hl
ld a, [hQuotient + 1]
sbc [hl]
ret
2018-06-24 07:09:41 -07:00
MonMenu_Headbutt:
2017-12-24 09:47:30 -08:00
farcall HeadbuttFunction
ld a, [wFieldMoveSucceeded]
2015-11-11 13:11:08 -08:00
cp $1
jr nz, .Fail
2015-11-11 13:11:08 -08:00
ld b, $4
ld a, $2
ret
.Fail:
2015-11-11 13:11:08 -08:00
ld a, $3
ret
2018-06-24 07:09:41 -07:00
MonMenu_RockSmash:
2017-12-24 09:47:30 -08:00
farcall RockSmashFunction
ld a, [wFieldMoveSucceeded]
2015-11-11 13:11:08 -08:00
cp $1
jr nz, .Fail
2015-11-11 13:11:08 -08:00
ld b, $4
ld a, $2
ret
.Fail:
2015-11-11 13:11:08 -08:00
ld a, $3
ret
2018-06-24 07:09:41 -07:00
MonMenu_SweetScent:
2017-12-24 09:47:30 -08:00
farcall SweetScentFromMenu
2015-11-11 13:11:08 -08:00
ld b, $4
ld a, $2
ret
2018-06-24 07:09:41 -07:00
ChooseMoveToDelete:
2018-01-23 14:39:09 -08:00
ld hl, wOptions
2015-11-11 13:11:08 -08:00
ld a, [hl]
push af
set NO_TEXT_SCROLL, [hl]
call LoadFontsBattleExtra
2016-05-15 18:50:31 -07:00
call .ChooseMoveToDelete
2015-11-11 13:11:08 -08:00
pop bc
ld a, b
2018-01-23 14:39:09 -08:00
ld [wOptions], a
2015-11-11 13:11:08 -08:00
push af
2015-11-11 20:38:57 -08:00
call ClearBGPalettes
2015-11-11 13:11:08 -08:00
pop af
ret
2016-05-15 18:50:31 -07:00
.ChooseMoveToDelete
2015-11-11 13:11:08 -08:00
call SetUpMoveScreenBG
2015-12-23 11:00:29 -08:00
ld de, DeleteMoveScreenAttrs
call SetMenuAttributes
2015-12-04 05:46:11 -08:00
call SetUpMoveList
ld hl, w2DMenuFlags1
2015-11-11 13:11:08 -08:00
set 6, [hl]
2016-05-15 18:50:31 -07:00
jr .enter_loop
2015-11-11 13:11:08 -08:00
2016-05-15 18:50:31 -07:00
.loop
2015-12-15 15:59:49 -08:00
call ScrollingMenuJoypad
2016-05-15 18:50:31 -07:00
bit B_BUTTON_F, a
jp nz, .b_button
bit A_BUTTON_F, a
jp nz, .a_button
2015-11-11 13:11:08 -08:00
2016-05-15 18:50:31 -07:00
.enter_loop
2015-11-11 13:11:08 -08:00
call PrepareToPlaceMoveData
call PlaceMoveData
2016-05-15 18:50:31 -07:00
jp .loop
2015-11-11 13:11:08 -08:00
2016-05-15 18:50:31 -07:00
.a_button
2015-11-11 13:11:08 -08:00
and a
2016-05-15 18:50:31 -07:00
jr .finish
2015-11-11 13:11:08 -08:00
2016-05-15 18:50:31 -07:00
.b_button
2015-11-11 13:11:08 -08:00
scf
2016-05-15 18:50:31 -07:00
.finish
2015-11-11 13:11:08 -08:00
push af
xor a
2015-11-18 20:16:25 -08:00
ld [wSwitchMon], a
ld hl, w2DMenuFlags1
2015-11-11 13:11:08 -08:00
res 6, [hl]
call ClearSprites
call ClearTileMap
pop af
ret
2018-06-24 07:09:41 -07:00
DeleteMoveScreenAttrs:
2015-12-23 11:00:29 -08:00
db 3, 1
db 3, 1
db $40, $00
dn 2, 0
db D_UP | D_DOWN | A_BUTTON | B_BUTTON
2015-11-11 13:11:08 -08:00
2018-06-24 07:09:41 -07:00
ManagePokemonMoves:
2018-01-23 14:39:09 -08:00
ld a, [wCurPartySpecies]
2015-11-11 13:11:08 -08:00
cp EGG
jr z, .egg
2018-01-23 14:39:09 -08:00
ld hl, wOptions
2015-11-11 13:11:08 -08:00
ld a, [hl]
push af
set NO_TEXT_SCROLL, [hl]
call MoveScreenLoop
pop af
2018-01-23 14:39:09 -08:00
ld [wOptions], a
2015-11-11 20:38:57 -08:00
call ClearBGPalettes
2015-11-11 13:11:08 -08:00
.egg
ld a, $0
ret
2018-06-24 07:09:41 -07:00
MoveScreenLoop:
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
inc a
2015-12-23 11:00:29 -08:00
ld [wPartyMenuCursor], a
2015-11-11 13:11:08 -08:00
call SetUpMoveScreenBG
call Function132d3
2015-12-23 11:00:29 -08:00
ld de, MoveScreenAttributes
call SetMenuAttributes
2015-11-11 13:11:08 -08:00
.loop
2015-12-04 05:46:11 -08:00
call SetUpMoveList
ld hl, w2DMenuFlags1
2015-11-11 13:11:08 -08:00
set 6, [hl]
jr .skip_joy
.joy_loop
2015-12-15 15:59:49 -08:00
call ScrollingMenuJoypad
2015-11-11 13:11:08 -08:00
bit 1, a
jp nz, .b_button
bit 0, a
jp nz, .a_button
bit 4, a
jp nz, .d_right
bit 5, a
jp nz, .d_left
.skip_joy
call PrepareToPlaceMoveData
ld a, [wMoveSwapBuffer]
and a
jr nz, .moving_move
call PlaceMoveData
jp .joy_loop
.moving_move
ld a, " "
hlcoord 1, 11
ld bc, 5
call ByteFill
hlcoord 1, 12
lb bc, 5, SCREEN_WIDTH - 2
call ClearBox
hlcoord 1, 12
2018-03-02 16:39:16 -08:00
ld de, String_MoveWhere
2015-11-11 13:11:08 -08:00
call PlaceString
jp .joy_loop
2016-03-01 19:31:21 -08:00
.b_button
2015-11-11 13:11:08 -08:00
call PlayClickSFX
call WaitSFX
ld a, [wMoveSwapBuffer]
and a
jp z, .exit
ld a, [wMoveSwapBuffer]
2015-12-15 15:59:49 -08:00
ld [wMenuCursorY], a
2015-11-11 13:11:08 -08:00
xor a
ld [wMoveSwapBuffer], a
hlcoord 1, 2
lb bc, 8, SCREEN_WIDTH - 2
call ClearBox
jp .loop
2016-03-01 19:31:21 -08:00
.d_right
2015-11-11 13:11:08 -08:00
ld a, [wMoveSwapBuffer]
and a
jp nz, .joy_loop
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
ld b, a
push bc
call .cycle_right
pop bc
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
cp b
jp z, .joy_loop
jp MoveScreenLoop
2016-03-01 19:31:21 -08:00
.d_left
2015-11-11 13:11:08 -08:00
ld a, [wMoveSwapBuffer]
and a
jp nz, .joy_loop
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
ld b, a
push bc
call .cycle_left
pop bc
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
cp b
jp z, .joy_loop
jp MoveScreenLoop
.cycle_right
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
inc a
2018-01-23 14:39:09 -08:00
ld [wCurPartyMon], a
2015-11-11 13:11:08 -08:00
ld c, a
ld b, 0
2018-01-23 14:39:09 -08:00
ld hl, wPartySpecies
2015-11-11 13:11:08 -08:00
add hl, bc
ld a, [hl]
cp -1
jr z, .cycle_left
cp EGG
ret nz
jr .cycle_right
.cycle_left
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
and a
ret z
.cycle_left_loop
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
dec a
2018-01-23 14:39:09 -08:00
ld [wCurPartyMon], a
2015-11-11 13:11:08 -08:00
ld c, a
ld b, 0
2018-01-23 14:39:09 -08:00
ld hl, wPartySpecies
2015-11-11 13:11:08 -08:00
add hl, bc
ld a, [hl]
cp EGG
ret nz
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
and a
jr z, .cycle_right
jr .cycle_left_loop
2016-03-01 19:31:21 -08:00
.a_button
2015-11-11 13:11:08 -08:00
call PlayClickSFX
call WaitSFX
ld a, [wMoveSwapBuffer]
and a
jr nz, .place_move
2015-12-15 15:59:49 -08:00
ld a, [wMenuCursorY]
2015-11-11 13:11:08 -08:00
ld [wMoveSwapBuffer], a
2015-12-17 19:31:16 -08:00
call PlaceHollowCursor
2015-11-11 13:11:08 -08:00
jp .moving_move
.place_move
2018-01-23 14:39:09 -08:00
ld hl, wPartyMon1Moves
2015-11-11 13:11:08 -08:00
ld bc, PARTYMON_STRUCT_LENGTH
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
call AddNTimes
push hl
call .copy_move
pop hl
ld bc, $15
add hl, bc
call .copy_move
ld a, [wBattleMode]
jr z, .swap_moves
2018-01-23 14:39:09 -08:00
ld hl, wBattleMonMoves
2015-11-11 13:11:08 -08:00
ld bc, $20
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
call AddNTimes
push hl
call .copy_move
pop hl
ld bc, 6
add hl, bc
call .copy_move
.swap_moves
ld de, SFX_SWITCH_POKEMON
call PlaySFX
call WaitSFX
ld de, SFX_SWITCH_POKEMON
call PlaySFX
call WaitSFX
hlcoord 1, 2
lb bc, 8, 18
call ClearBox
hlcoord 10, 10
lb bc, 1, 9
call ClearBox
jp .loop
2016-03-01 19:31:21 -08:00
.copy_move
2015-11-11 13:11:08 -08:00
push hl
2015-12-15 15:59:49 -08:00
ld a, [wMenuCursorY]
2015-11-11 13:11:08 -08:00
dec a
ld c, a
ld b, $0
add hl, bc
ld d, h
ld e, l
pop hl
ld a, [wMoveSwapBuffer]
dec a
ld c, a
ld b, $0
add hl, bc
ld a, [de]
ld b, [hl]
ld [hl], a
ld a, b
ld [de], a
ret
2016-03-01 19:31:21 -08:00
.exit
2015-11-11 13:11:08 -08:00
xor a
ld [wMoveSwapBuffer], a
ld hl, w2DMenuFlags1
2015-11-11 13:11:08 -08:00
res 6, [hl]
call ClearSprites
jp ClearTileMap
2018-06-24 07:09:41 -07:00
MoveScreenAttributes:
2015-12-23 11:00:29 -08:00
db 3, 1
db 3, 1
db $40, $00
dn 2, 0
db D_UP | D_DOWN | D_LEFT | D_RIGHT | A_BUTTON | B_BUTTON
2015-11-11 13:11:08 -08:00
2018-06-24 07:09:41 -07:00
String_MoveWhere:
2015-11-11 13:11:08 -08:00
db "Where?@"
2018-06-24 07:09:41 -07:00
SetUpMoveScreenBG:
2015-11-11 20:38:57 -08:00
call ClearBGPalettes
2015-11-11 13:11:08 -08:00
call ClearTileMap
call ClearSprites
xor a
ld [hBGMapMode], a
2017-12-24 09:47:30 -08:00
farcall LoadStatsScreenPageTilesGFX
farcall ClearSpriteAnims2
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
ld e, a
ld d, $0
2018-01-23 14:39:09 -08:00
ld hl, wPartySpecies
2015-11-11 13:11:08 -08:00
add hl, de
ld a, [hl]
ld [wd265], a
ld e, $2
2017-12-24 09:47:30 -08:00
farcall LoadMenuMonIcon
2015-11-11 13:11:08 -08:00
hlcoord 0, 1
ld b, 9
ld c, 18
call TextBox
hlcoord 0, 11
ld b, 5
ld c, 18
call TextBox
hlcoord 2, 0
lb bc, 2, 3
call ClearBox
xor a
2018-01-23 14:39:09 -08:00
ld [wMonType], a
ld hl, wPartyMonNicknames
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
call GetNick
hlcoord 5, 1
call PlaceString
push bc
farcall CopyMonToTempMon
2015-11-11 13:11:08 -08:00
pop hl
call PrintLevel
2018-01-23 14:39:09 -08:00
ld hl, wPlayerHPPal
2015-11-11 13:11:08 -08:00
call SetHPPal
2016-06-06 15:23:00 -07:00
ld b, SCGB_MOVE_LIST
2015-11-11 13:11:08 -08:00
call GetSGBLayout
hlcoord 16, 0
lb bc, 1, 3
jp ClearBox
2018-06-24 07:09:41 -07:00
SetUpMoveList:
2015-11-11 13:11:08 -08:00
xor a
ld [hBGMapMode], a
ld [wMoveSwapBuffer], a
2018-01-23 14:39:09 -08:00
ld [wMonType], a
predef CopyMonToTempMon
2018-01-23 14:39:09 -08:00
ld hl, wTempMonMoves
2015-11-11 13:11:08 -08:00
ld de, wListMoves_MoveIndicesBuffer
ld bc, NUM_MOVES
call CopyBytes
ld a, SCREEN_WIDTH * 2
2018-01-23 14:39:09 -08:00
ld [wBuffer1], a
2015-11-11 13:11:08 -08:00
hlcoord 2, 3
predef ListMoves
2015-11-11 13:11:08 -08:00
hlcoord 10, 4
predef ListMovePP
2015-11-11 13:11:08 -08:00
call WaitBGMap
call SetPalettes
2015-12-04 05:46:11 -08:00
ld a, [wNumMoves]
2015-11-11 13:11:08 -08:00
inc a
ld [w2DMenuNumRows], a
2015-11-11 13:11:08 -08:00
hlcoord 0, 11
ld b, 5
ld c, 18
jp TextBox
2018-06-24 07:09:41 -07:00
PrepareToPlaceMoveData:
2018-01-23 14:39:09 -08:00
ld hl, wPartyMon1Moves
2015-11-11 13:11:08 -08:00
ld bc, PARTYMON_STRUCT_LENGTH
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
call AddNTimes
2015-12-15 15:59:49 -08:00
ld a, [wMenuCursorY]
2015-11-11 13:11:08 -08:00
dec a
ld c, a
ld b, $0
add hl, bc
ld a, [hl]
2018-01-23 14:39:09 -08:00
ld [wCurMove], a
2015-11-11 13:11:08 -08:00
hlcoord 1, 12
lb bc, 5, 18
jp ClearBox
2018-06-24 07:09:41 -07:00
PlaceMoveData:
2015-11-11 13:11:08 -08:00
xor a
ld [hBGMapMode], a
hlcoord 0, 10
2018-03-02 16:39:16 -08:00
ld de, String_MoveType_Top
2015-11-11 13:11:08 -08:00
call PlaceString
hlcoord 0, 11
2018-03-02 16:39:16 -08:00
ld de, String_MoveType_Bottom
2015-11-11 13:11:08 -08:00
call PlaceString
hlcoord 12, 12
2018-03-02 16:39:16 -08:00
ld de, String_MoveAtk
2015-11-11 13:11:08 -08:00
call PlaceString
2018-01-23 14:39:09 -08:00
ld a, [wCurMove]
2015-11-11 13:11:08 -08:00
ld b, a
hlcoord 2, 12
predef PrintMoveType
2018-01-23 14:39:09 -08:00
ld a, [wCurMove]
2015-11-11 13:11:08 -08:00
dec a
ld hl, Moves + MOVE_POWER
ld bc, MOVE_LENGTH
call AddNTimes
ld a, BANK(Moves)
call GetFarByte
hlcoord 16, 12
cp 2
jr c, .no_power
ld [wd265], a
ld de, wd265
lb bc, 1, 3
call PrintNum
jr .description
.no_power
2018-03-02 16:39:16 -08:00
ld de, String_MoveNoPower
2015-11-11 13:11:08 -08:00
call PlaceString
.description
hlcoord 1, 14
predef PrintMoveDesc
2015-11-11 13:11:08 -08:00
ld a, $1
ld [hBGMapMode], a
ret
2018-06-24 07:09:41 -07:00
String_MoveType_Top:
2015-11-11 13:11:08 -08:00
db "┌─────┐@"
2018-06-24 07:09:41 -07:00
String_MoveType_Bottom:
2015-11-11 13:11:08 -08:00
db "│TYPE/└@"
2018-06-24 07:09:41 -07:00
String_MoveAtk:
2015-11-11 13:11:08 -08:00
db "ATK/@"
2018-06-24 07:09:41 -07:00
String_MoveNoPower:
2015-11-11 13:11:08 -08:00
db "---@"
2018-06-24 07:09:41 -07:00
Function132d3:
2015-11-11 13:11:08 -08:00
call Function132da
call Function132fe
ret
2018-06-24 07:09:41 -07:00
Function132da:
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
and a
ret z
ld c, a
ld e, a
ld d, 0
2018-01-23 14:39:09 -08:00
ld hl, wPartyCount
2015-11-11 13:11:08 -08:00
add hl, de
.loop
ld a, [hl]
and a
jr z, .prev
cp EGG
jr z, .prev
cp NUM_POKEMON + 1
jr c, .legal
.prev
dec hl
dec c
jr nz, .loop
ret
.legal
hlcoord 16, 0
ld [hl], "◀"
ret
2018-06-24 07:09:41 -07:00
Function132fe:
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyMon]
2015-11-11 13:11:08 -08:00
inc a
ld c, a
2018-01-23 14:39:09 -08:00
ld a, [wPartyCount]
2015-11-11 13:11:08 -08:00
cp c
ret z
ld e, c
ld d, 0
2018-01-23 14:39:09 -08:00
ld hl, wPartySpecies
2015-11-11 13:11:08 -08:00
add hl, de
.loop
ld a, [hl]
cp -1
ret z
and a
jr z, .next
cp EGG
jr z, .next
cp NUM_POKEMON + 1
jr c, .legal
.next
inc hl
jr .loop
.legal
hlcoord 18, 0
ld [hl], "▶"
ret