summaryrefslogtreecommitdiff
path: root/engine/menu/start_menu.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/menu/start_menu.asm')
-rw-r--r--engine/menu/start_menu.asm2262
1 files changed, 2262 insertions, 0 deletions
diff --git a/engine/menu/start_menu.asm b/engine/menu/start_menu.asm
new file mode 100644
index 0000000..852d558
--- /dev/null
+++ b/engine/menu/start_menu.asm
@@ -0,0 +1,2262 @@
+INCLUDE "constants.asm"
+
+SECTION "engine/menu/start_menu.asm", ROMX
+
+DisplayStartMenu: ; 04:5DBE
+ call RefreshScreen
+ ld de, $0003
+ call PlaySFX
+ ld hl, .StartMenuHeader
+ call LoadMenuHeader
+.RefreshStartDisplay
+ call UpdateTimePals
+ call UpdateSprites
+ call ClearJoypad
+ call GetStartMenuState
+ ld a, [wStartmenuCursor]
+ ld [wMenuCursorBuffer], a
+ call OpenMenu
+ jr c, .MainReturn
+ ld a, [wMenuCursorBuffer]
+ ld [wStartmenuCursor], a
+ call PlaceHollowCursor
+ ld a, [wMenuSelection]
+ ld hl, StartMenuJumpTable
+ call CallJumptable
+ ld hl, .StartMenuEntriesReturnTable
+ jp CallJumptable
+
+.StartMenuEntriesReturnTable: ; 04:5DFC
+ dw .RefreshStartDisplay
+ dw .MainReturn
+ dw .exit
+ dw .UpdateTime
+ dw .ExitAndHookFF
+
+.MainReturn
+ call .WaitForARelease
+ call LoadFontExtra
+.exit
+ call ExitMenu
+.UpdateTime
+ call Function1fea
+ call UpdateTimePals
+ ret
+
+.unused ; 04:5E16
+ call .WaitForARelease
+ call LoadFontExtra
+ call CloseWindow
+ jr .UpdateTime
+
+.WaitForARelease
+ call GetJoypad
+ ldh a, [hJoyDown]
+ bit A_BUTTON_F, a
+ jr nz, .WaitForARelease
+ ret
+
+.ExitAndHookFF: ; 04:5E2B
+ call ExitMenu
+ ld a, $FF
+ ldh [hStartmenuCloseAndSelectHookEnable], a
+ jr .UpdateTime
+
+.StartMenuHeader: ; 04:5E34
+ db MENU_BACKUP_TILES
+ menu_coords $0C, 00, $13, $11
+ dw .MenuData
+ db 1 ; default option
+
+.MenuData: ; 04:5E3C
+ db $A8
+ db 0 ; items
+ dw StartMenuItems
+ db $8A, $1F
+ dw .Strings
+
+.Strings: ; 04:5E44
+ db "ずかん@"
+ db "ポケモン@"
+ db "りュック@"
+ db "<PLAYER>@"
+ db "レポート@"
+ db "せってい@"
+ db "とじる@"
+ db "わくせん@"
+ db "りセット@"
+
+StartMenuJumpTable: ; 04:5E6C
+ dw StartMenu_Pokedex
+ dw StartMenu_Party
+ dw StartMenu_Backpack
+ dw StartMenu_TrainerCard
+ dw StartMenu_Save
+ dw StartMenu_Settings
+ dw StartMenu_Exit
+ dw StartMenu_Pokegear
+ dw StartMenu_Reset
+
+StartMenuItems: ; 04:5E7E
+ db 4
+ db START_SAVE
+ db START_OPTIONS
+ db START_TRAINERCARD
+ db START_EXIT
+ db -1
+
+ db 5
+ db START_PARTY
+ db START_TRAINERCARD
+ db START_SAVE
+ db START_OPTIONS
+ db START_EXIT
+ db -1
+
+ db 6
+ db START_POKEDEX
+ db START_PARTY
+ db START_TRAINERCARD
+ db START_SAVE
+ db START_OPTIONS
+ db START_EXIT
+ db -1
+
+ db 7
+ db START_POKEDEX
+ db START_PARTY
+ db START_BACKPACK
+ db START_TRAINERCARD
+ db START_SAVE
+ db START_OPTIONS
+ db START_EXIT
+ db -1
+
+ db 6
+ db START_POKEDEX
+ db START_PARTY
+ db START_BACKPACK
+ db START_TRAINERCARD
+ db START_OPTIONS
+ db START_EXIT
+ db -1
+
+GetStartMenuState: ; 04:5EA4
+; Stores one of four values to wActiveBackpackPocket
+; based on story flags and debug mode.
+; 4 = debug, 3 = starting, 2 = rival beat in lab
+; 1 = pokedex recieved, 0 = chose starter
+ ld b, 4
+ ld hl, wDebugFlags
+ bit DEBUG_FIELD_F, [hl]
+ jr z, .store
+ ld b, 0
+ ld hl, wd41b
+ bit 2, [hl]
+ jr z, .store
+ ld b, 1
+ ld hl, wd41c
+ bit 4, [hl]
+ jr z, .store
+ ld b, 2
+ ld hl, wd41d
+ bit 2, [hl]
+ jr z, .store
+ ld b, 3
+.store
+ ld a, b
+ ld [wActiveBackpackPocket], a
+ ret
+
+StartMenu_Exit: ; 04:5ECF
+; Exits the menu
+ ld a, 1
+ ret
+
+StartMenu_Pokegear: ; 04:5ED2
+ callab PokeGear
+ ld a, 0
+ ret
+
+StartMenu_Reset: ; 04:5EDD
+ ld hl, DisplayResetDialog
+ ld a, BANK(DisplayResetDialog)
+ call DisplayResetDialog ; should be farcall
+ ld a, 0
+ ret
+
+StartMenu_Save: ; 04:5EE8
+ predef Function143e0
+ call UpdateSprites
+ ld a, 0
+ ret
+
+StartMenu_Settings: ; 04:5EF3
+ call LoadStandardMenuHeader
+ xor a
+ ldh [hBGMapMode], a
+ call ClearTileMap
+ call UpdateSprites
+ callab MenuCallSettings
+ call ClearPalettes
+ call Call_ExitMenu
+ call LoadTilesetGFX
+ call LoadFontExtra
+ call UpdateSprites
+ call WaitBGMap
+ call UpdateTimePals
+ ld a, 0
+ ret
+
+StartMenu_TrainerCard ; 04:5F1F
+ call _TrainerCard
+ ld a, 0
+ ret
+
+_TrainerCard: ; 04:5F25
+ call LoadStandardMenuHeader
+ ldh a, [hMapAnims]
+ push af
+ xor a
+ ldh [hMapAnims], a
+ callab TrainerCardLoop
+ call ClearPalettes
+ call LoadFont
+ call ReloadFontAndTileset
+ call Call_ExitMenu
+ call GetMemSGBLayout
+ call WaitBGMap
+ call UpdateTimePals
+ pop af
+ ldh [hMapAnims], a
+ ret
+
+StartMenu_Pokedex: ; 04:5F4F
+ call LoadStandardMenuHeader
+ predef Function40000
+ call ClearPalettes
+ call Function360b
+ call ReloadFontAndTileset
+ call Call_ExitMenu
+ call GetMemSGBLayout
+ call WaitBGMap
+ call UpdateTimePals
+ ld a, 0
+ ret
+
+UnusedToolPocketData: ; 04:5F6F
+ dw ToolsPocketHeader
+ dw wRegularItemsCursor
+ dw wRegularItemsScrollPosition
+
+ToolsPocketHeader: ; 04:5F75
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 03, 03, $11, $0A
+ dw .ToolsPocketData
+ db 1
+
+.ToolsPocketData ; 04:5F7D
+ db $AD
+ db 4, 9, 2, 0
+ dw wNumBagItems
+
+ dbw BANK(Function2473b), Function2473b
+ dbw BANK(Function24783), Function24783
+ dbw BANK(Function241ef), Function241ef
+
+ dw KeyItemsPocketHeader
+ dw wBackpackAndKeyItemsCursor
+ dw wBackpackAndKeyItemsScrollPosition
+
+KeyItemsPocketHeader: ; 04:5F93
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 03, 03, $11, $0A
+ dw .KeyPocketData
+ db 1
+
+.KeyPocketData ; 04:5F9B
+ db $AD
+ db 4, 9, 1, 0
+ dw wNumKeyItems
+
+ dbw BANK(Function2473b), Function2473b
+ dbw BANK(Function24783), Function24783
+ dbw BANK(Function241ef), Function241ef
+
+BackpackMenuHeader: ; 04:5FAB
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 03, 03, $11, $0A
+ dw .BackpackData
+ db 01
+
+.BackpackData ; 04:5FB3
+ db $A1
+ db 4, 9, 2, 0
+ dw wNumBagItems
+
+ dbw BANK(Function2473b), Function2473b
+ dbw BANK(Function24783), Function24783
+ dbw BANK(Function241ef), Function241ef
+
+GetPocket2Status: ; 04:5FC3
+; puts 2 in wActiveBackpackPocket if pocket 2 has items
+; otherwise puts 1 in
+ ld a, 2
+ ld [wActiveBackpackPocket], a
+ ld a, [wNumBagItems]
+ and a
+ ret nz
+ ld a, 1
+ ld [wActiveBackpackPocket], a
+ ret
+
+FlipPocket2Status: ; 04:5FD3
+; stores 1 in wactivebackpocket if it's currently 2
+; and vice versa
+ ld a, [wActiveBackpackPocket]
+ cp 2
+ ld a, 1
+ jr z, .skip
+ ld a, 2
+.skip
+ ld [wActiveBackpackPocket], a
+ ret
+
+CheckItemsQuantity: ; 04:5FE2
+; sets clear flag if you have no items
+ ld a, [wNumBagItems]
+ and a
+ ret nz
+ ld a, [wNumKeyItems]
+ and a
+ ret nz
+ scf
+ ret
+
+DrawBackpack: ; 04:5FEE
+ ld hl, wVramState
+ res 0, [hl]
+ call ClearSprites
+ call ClearTileMap
+ callab LoadBackpackGraphics
+ hlcoord 2, 2
+ ld b, 08
+ ld c, $0F
+ call DrawTextBox
+ ret
+
+; 04:600C
+ ld hl, wVramState
+ set 0, [hl]
+ call ExitMenu
+ ret
+
+StartMenu_Backpack: ; 04:6015
+ call CheckItemsQuantity
+ jr c, .NoItems
+ call LoadStandardMenuHeader
+ ld hl, wVramState
+ res 0, [hl]
+ call DrawBackpack
+ xor a
+ ld [wSelectedSwapPosition], a
+ call GetPocket2Status
+.loop
+ call DebugBackpackLoop
+ jr c, .jump
+ call BackpackSelected
+ jr nc, .loop
+ jr .skip
+.jump
+ ld a, 0
+.skip
+ push af
+ ld hl, wVramState
+ set 0, [hl]
+ xor a
+ ld [wSelectedSwapPosition], a
+ call ClearPalettes
+ call CloseWindow
+ call LoadFontExtra
+ pop af
+ ret
+
+.NoItems
+ call DrawNoItemsText ; 6371
+ scf
+ ld a, 0
+ ret
+
+DebugBackpackLoop: ; 04:6056
+; checks the field debug flag, if set this runs
+; otherwise NondebugBackpackLoop runs
+; if wactivebackpackpocket is 1 (doesn't have key items) then jumps below
+ ld a, [wDebugFlags]
+ bit DEBUG_FIELD_F, a
+ jp z, NondebugBackpackLoop
+ ld a, [wActiveBackpackPocket]
+ cp 2
+ jr nz, .NoTools
+ ld hl, ToolsPocketHeader
+ call CopyMenuHeader
+ ld de, .ToolsPocketText
+ call DrawBackpackTitleRow
+ ld a, [wRegularItemsCursor]
+ ld [wMenuCursorBuffer], a
+ ld a, [wRegularItemsScrollPosition]
+ ld [wMenuScrollPosition], a
+ call ScrollingMenu
+
+ ld a, [wMenuScrollPosition]
+ ld [wRegularItemsScrollPosition], a
+ ld a, [wMenuCursorY]
+ ld [wRegularItemsCursor], a
+ jp HandleBackpackInput
+
+.ToolsPocketText ; 04:608F
+ db "      ふつうの どうぐ      @"
+
+.NoTools
+ ld hl, KeyItemsPocketHeader
+ call CopyMenuHeader
+ ld de, KeyItemsPocketText
+ call DrawBackpackTitleRow
+ ld a, [wBackpackAndKeyItemsCursor]
+ ld [wMenuCursorBuffer], a
+ ld a, [wBackpackAndKeyItemsScrollPosition]
+ ld [wMenuScrollPosition], a
+ call ScrollingMenu
+
+ ld a, [wMenuScrollPosition]
+ ld [wBackpackAndKeyItemsScrollPosition], a
+ ld a, [wMenuCursorY]
+ ld [wBackpackAndKeyItemsCursor], a
+ jr HandleBackpackInput
+
+KeyItemsPocketText: ; 04:60CD
+ db "      だいじな もの       @"
+
+NondebugBackpackLoop: ; 04:60E2
+ ld hl, BackpackMenuHeader
+ call CopyMenuHeader
+ ld de, BackpackHeaderText
+ call DrawBackpackTitleRow
+ ld a, [wBackpackAndKeyItemsCursor]
+ ld [wMenuCursorBuffer], a
+ ld a, [wBackpackAndKeyItemsScrollPosition]
+ ld [wMenuScrollPosition], a
+ call ScrollingMenu
+
+ ld a, [wMenuScrollPosition]
+ ld [wBackpackAndKeyItemsScrollPosition], a
+ ld a, [wMenuCursorY]
+ ld [wBackpackAndKeyItemsCursor], a
+ jr HandleBackpackInput
+
+BackpackHeaderText: ; 04:610B
+ db "      りュックの なか     @"
+
+HandleBackpackInput: ; 04:611F
+ ld a, [wMenuJoypad]
+ cp A_BUTTON
+ jp z, .BackpackA
+ cp B_BUTTON
+ jp z, .BackpackBack
+ cp D_LEFT
+ jp z, .BackpackSwapPocket
+ cp D_RIGHT
+ jp z, .BackpackSwapPocket
+ cp SELECT
+ jp z, .BackpackSelect
+ jp .exit
+
+.BackpackSwapPocket ; 04:613E
+ call FlipPocket2Status
+ xor a
+ ld [wSelectedSwapPosition], a
+ jp .exit
+
+.BackpackSelect ; 04:6148
+ callab Function245c5
+ jp .exit
+
+.exit ; 04:6153
+ jp DebugBackpackLoop
+
+.UnusedNoItems ; 04:6156
+ call DrawNoItemsText
+ scf
+ ret
+
+.BackpackBack ; 04:615B
+ scf
+ ret
+
+.BackpackA ; 04:615D
+ and a
+ ret
+
+BackpackSelected: ; 04:615F
+ callab Function243af
+ call PlaceHollowCursor
+ call LoadItemData
+ callab CheckItemMenu
+ ld a, [wItemAttributeParamBuffer]
+ ld hl, .BagSelectJumptable
+ jp CallJumptable
+
+.BagSelectJumptable: ; 04:617E
+ dw SelectItem
+ dw .UnknownSelection
+ dw BallPocketLoop
+ dw .SwapPocket
+ dw SelectItem
+ dw SelectItem
+ dw SelectItem
+
+.SwapPocket ; 04:618C
+ call FlipPocket2Status
+ xor a
+ ld [wSelectedSwapPosition], a
+ and a
+ ret
+
+.UnknownSelection ; 04:6195
+ call LoadStandardMenuHeader
+ callab Function2d2fc
+ call ExitMenu
+ call DrawBackpack
+ and a
+ ret
+
+BallPocketLoop: ; 04:61A8
+ call BallPocket
+ jr c, .exit
+ call SelectItem
+ ret c
+ jr BallPocketLoop
+.exit
+ and a
+ ret
+
+SelectItem: ; 04:61B5
+ call ItemUseMenu
+ jr c, .skip1
+ ld a, [wMenuCursorY]
+ cp 1
+ jp z, UseItemSelection
+ cp 2
+ jp z, TossItemSelection
+ cp 3
+ jp z, RegisterItemSelection
+.skip1
+ and a
+ ret
+
+ItemUseMenu: ; 04:61CE
+; loads SelectedItemMenu if not debug,
+; DebugSelectedItemMenu if debug
+ ld a, [wDebugFlags]
+ bit DEBUG_FIELD_F, a
+ jr nz, .jump
+ ld hl, SelectedItemMenu
+ call LoadMenuHeader
+ call VerticalMenu
+ call CloseWindow
+ ret
+.jump
+ ld hl, DebugSelectedItemMenu
+ call LoadMenuHeader
+ call VerticalMenu
+ call CloseWindow
+ ret
+
+DebugSelectedItemMenu: ; 04:61EF
+ db MENU_BACKUP_TILES
+ menu_coords $0D, $0A, $13, $10
+ dw .DebugSelectedItemMenuText
+ db 01
+
+.DebugSelectedItemMenuText
+ db $C0
+ db 3
+ db "つかう@" ; use
+ db "すてる@" ; toss
+ db "とうろく@" ; register
+
+SelectedItemMenu: ; 04:6206
+ db MENU_BACKUP_TILES
+ menu_coords $0E, $0A, $13, $0E
+ dw .SelectedItemMenuText
+ db 01
+
+.SelectedItemMenuText
+ db $C0
+ db 2
+ db "つかう@" ; use
+ db "すてる@" ; toss
+
+TossItemSelection: ; 04:6218
+ ld de, wNumBagItems
+ call TryTossItem
+ and a
+ ret
+
+RegisterItemSelection: ; 04:6220
+ call TryRegisterItem
+ and a
+ ret
+
+UseItemSelection: ; 04:6225
+ callab CheckItemMenu
+ ld a, [wItemAttributeParamBuffer]
+ ld hl, .UseItemJumptable
+ jp CallJumptable
+
+.UseItemJumptable: ; 04:6236 ; jumptable
+ dw .FailedMove
+ dw .unusable
+ dw .unusable
+ dw .unusable
+ dw .SimpleItem
+ dw .SpriteItem
+ dw .FieldMove
+
+.unusable ; 04:6244
+ call PrintCantUseText
+ and a
+ ret
+
+.SimpleItem: ; 04:6249
+ call UseItem
+ and a
+ ret
+
+.SpriteItem: ; 04:624E
+; might be a better name for this once
+; bank 5 gets sorted out
+ call UseItem
+ call ClearBGPalettes
+ call StartMenuLoadSprites
+ call DrawBackpack
+ and a
+ ret
+
+.FieldMove: ; 04:625C
+ call UseItem
+ ld a, [wFieldMoveSucceeded]
+ and a
+ jr z, .FailedMove
+ scf
+ ld a, 4
+ ret
+
+.FailedMove ; 04:6269
+ call PrintCantUseText
+ and a
+ ret
+
+TryTossItem: ; 04:626E
+ push de
+ call LoadItemData
+ callab _CheckTossableItem
+ ld a, [wItemAttributeParamBuffer]
+ and a
+ jr nz, .TossFail
+ ld hl, .TossedText
+ call MenuTextBox
+ callab Function24c60
+ push af
+ call CloseWindow
+ call ExitMenu
+ pop af
+ jr c, .TossReturn
+ ld hl, .TossVerifyText
+ call MenuTextBox
+ call YesNoBox
+ push af
+ call ExitMenu
+ pop af
+ jr c, .TossReturn
+ pop hl
+ ld a, [wItemIndex]
+ call TossItem
+ call LoadItemData
+ ld hl, .TossedTextCopy
+ call MenuTextBox
+ call ExitMenu
+ and a
+ ret
+
+.TossFail ; 04:62BD ;25
+ call CantDropItem
+.TossReturn
+ pop hl
+ scf
+ ret
+
+.TossedText: ; 04:62C3
+ db 1
+ dw wStringBuffer2
+ text "を "
+ line "いくつ すてますか?"
+ done
+
+.TossVerifyText: ; 04:62D5
+ db 1
+ dw wStringBuffer2
+ text "を @"
+ db 9
+ dw wItemQuantity
+ db $12
+ text "こ"
+ line "すててもよろしいですか?"
+ done
+
+.TossedTextCopy: ; 04:62F0
+ db 1
+ dw wStringBuffer1
+ text "を"
+ line "すてました!<PROMPT>"
+
+CantDropItem: ; 04:62FD
+ ld hl, .CantDropItemText
+ call MenuTextBoxBackup
+ ret
+
+.CantDropItemText: ; 04:6304
+ text "それは とても たいせつなモノです"
+ line "すてることは できません!<PROMPT>"
+
+PrintCantUseHM: ; 04:6325
+ ld hl, .CantUseHMText
+ call MenuTextBoxBackup
+ ret
+
+.CantUseHMText: ; 04:632C
+ text "かいはつちゅう です"
+ line "いまは つかえません<PROMPT>"
+
+PrintCantUseText: ; 04:6343
+ ld hl, .CantUseHereText
+ call MenuTextBoxBackup
+ ret
+
+.CantUseHereText: ; 04:634A
+ text "オーキドの ことば<⋯⋯>"
+ line "<PLAYER>よ! こういうものには"
+ cont "つかいどきが あるのじゃ!<PROMPT>"
+
+DrawNoItemsText: ; 04:6371
+ ld hl, .NoItemsText
+ call MenuTextBoxBackup
+ ret
+
+.NoItemsText: ; 04:6378
+ text "どうぐ をひとつも<NEXT>もっていません!<PROMPT>"
+
+BallPocket: ; 04:638C
+ xor a
+ ldh [hBGMapMode], a
+ ld hl, .BallPocketHeader
+ call CopyMenuHeader
+ ld de, .BallHolderText
+ call DrawBackpackTitleRow
+ hlcoord 2, 2
+ ld b, 8
+ ld c, $F
+ call DrawTextBox
+ call ScrollingMenu
+ ld a, [wMenuJoypad]
+ cp 1
+ jr z, .jmp1
+ cp 2
+ jr z, .jmp2
+ jr BallPocket
+.jmp1
+ and a
+ ret
+.jmp2
+ scf
+ ret
+
+.BallHolderText: ; 04:63B9
+ db "     ボール ホルダ      @"
+
+.BallPocketHeader: ; 04:63CC
+ db MENU_BACKUP_TILES
+ menu_coords 03, 03, $11, $0A
+ dw .MenuData
+ db 1
+
+.MenuData: ; 04:63D4
+ db SCROLLINGMENU_ENABLE_FUNCTION3 ; flags
+ db 4, 8 ; rows, columns
+ db $80 ; horizontal spacing?
+ dbw 0, wNumBallItems
+ dba Function24774
+ dba Function24783
+ dba Function241ef
+
+DrawBackpackTitleRow: ; 04:63E4
+ push de
+ hlcoord 0, 0
+ ld de, .BlankLine
+ call PlaceString
+ pop de
+ hlcoord 0, 1
+ call PlaceString
+ ret
+
+.BlankLine: ; 04:63F6
+ db "                    @"
+
+LoadItemData: ; 04:640B
+ ld a, [wCurItem]
+ ld [wce37], a
+ call GetItemName
+ call CopyStringToStringBuffer2
+ ret
+
+StartMenuLoadSprites: ; 04:6418
+ call DisableLCD
+ ld a, 6
+ call UpdateSoundNTimes
+ callab Function140d9
+ call LoadTilesetGFX
+ call LoadFontExtra
+ call ClearSprites
+ ld hl, wVramState
+ set 0, [hl]
+ call UpdateSprites
+ call EnableLCD
+ call GetMemSGBLayout
+ ret
+
+TryRegisterItem: ; 04:6440
+ callab CheckItemMenu
+ ld a, [wItemAttributeParamBuffer]
+ ld hl, .RegisterItemJumptable
+ jp CallJumptable
+
+.RegisterItemJumptable ; 04:6451
+ dw PrintCantRegisterToolText
+ dw PrintCantRegisterToolText
+ dw PrintCantRegisterToolText
+ dw PrintCantRegisterToolText
+ dw RegisterItem
+ dw RegisterItem
+ dw RegisterItem
+
+RegisterItem: ; 04:645F
+ ld a, [wItemIndex]
+ inc a
+ ld b, a
+ ld a, [wActiveBackpackPocket]
+ cp 2
+ jr z, .skip
+ set 7, b
+.skip
+ ld a, b
+ ld [wRegisteredItem], a
+ ld a, [wCurItem]
+ ld [wRegisteredItemQuantity], a
+ call LoadItemData
+ ld de, $0002
+ call WaitPlaySFX
+ ld hl, .RegisteredItemText
+ call MenuTextBoxBackup
+ ret
+
+.RegisteredItemText: ; 04:6487
+ db 1
+ dw wStringBuffer2
+ text "を "
+ line "べんりボタンに とうろくした!<PROMPT>"
+
+PrintCantRegisterToolText: ; 04:649E
+ ld hl, .CantRegisterToolText
+ call MenuTextBoxBackup
+ ret
+
+.CantRegisterToolText: ; 04:64A5
+ text "そのどうぐは "
+ line "とうろくできません!<PROMPT>"
+
+StartMenu_Party: ; 04:64B9
+ ld a, [wPartyCount]
+ and a
+ jr nz, .partynonzero
+ ld a, 0
+ ret
+.partynonzero
+ call LoadStandardMenuHeader
+ callab Function50756
+
+HandleSelectedPokemon: ; 04:64CD
+ xor a
+ ld [wcdb9], a
+ ld [wSelectedSwapPosition], a
+ predef Function50774
+ jr PartyPrompt.partypromptreturn
+
+PartyPrompt: ; 04:64DB
+ ld a, [wWhichPokemon]
+ inc a
+ ld [wSelectedSwapPosition], a
+ callab Function8f1f2
+ ld a, 4
+ ld [wcdb9], a
+ predef Function50774
+.partypromptreturn
+ jr c, .return
+ jp SelectedPokemonSubmenu
+.return
+ ld a, 0
+PartyPromptExit: ; 04:64FB
+ push af
+ call ClearBGPalettes
+ call StartMenuLoadSprites
+ nop
+ nop
+ nop
+ ld hl, 0000
+ call Call_ExitMenu
+ call WaitBGMap
+ call UpdateTimePals
+ pop af
+ ret
+
+SelectedPokemonSubmenu: ; 04:6513
+ hlcoord 1, 13
+ lb bc, 4, $12
+ call ClearBox
+ callab Function24955
+ call GetCurNick
+ ld a, [wMenuSelection]
+ ld hl, PartyJumpTable
+ ld de, $3
+ call FindItemInTable
+ jp nc, HandleSelectedPokemon
+ inc hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wd163]
+ jp hl
+
+PartyJumpTable: ; 04:653E
+ dbw 1, PartyTryCut
+ dbw 2, PartyTryFly
+ dbw 3, PartyTrySurf
+ dbw 4, PartyCantUseMove
+ dbw 5, PartyCantUseMove
+ dbw 6, PartyCantUseMove
+ dbw 7, PartyCantUseMove
+ dbw 8, PartyTryDig
+ dbw 9, PartyTryTeleport
+ dbw 10, PartyCalculateHealth
+ dbw 11, PartyPokemonSummary
+ dbw 12, PartyCheckLessThanTwo
+ dbw 13, PartyHeldItem
+ dbw 14, HandleSelectedPokemon
+ dbw 15, PartyPokemonSummary2
+ dbw 16, PartyMailMenu
+
+PartyCheckLessThanTwo: ; 04:656E
+; might have to do with switch?
+ ld a, [wPartyCount]
+ cp 2
+ jp c, HandleSelectedPokemon
+ jp PartyPrompt
+
+PartyHeldItem: ; 04:6579
+ callab Function_8f1cb
+ ld hl, .HoldItemMenu
+ call LoadMenuHeader
+ call VerticalMenu
+ jp c, .close
+ call GetCurNick
+ ld hl, wStringBuffer1
+ ld de, wcd11
+ ld bc, $0006
+ call CopyBytes
+ ld a, [wMenuCursorY]
+ cp 1
+ jr nz, .skip
+ call CloseWindow
+ call .PartyGiveHeldItem
+ jr .jump
+.skip
+ call .PartyTryRecieveItem
+ call CloseWindow
+ jr .jump
+.close; 04:65B3
+ call CloseWindow
+.jump
+ jp HandleSelectedPokemon
+
+.PartyGiveHeldItem ; 04:65B9
+ call LoadStandardMenuHeader
+ call ClearPalettes
+ call GetPocket2Status
+ call DrawBackpack
+ call DebugBackpackLoop
+ ld a, [wMenuJoypad]
+ cp 2
+ jp z, .ExitGiveItem
+ call SpeechTextBox
+ call LoadItemData
+ call CheckTossableItem
+ ld a, [wItemAttributeParamBuffer]
+ and a
+ jp nz, .CantGive
+ call GetPartyItemOffset
+ ld a, [hl]
+ and a
+ jr z, .NoItem
+ ld [wce37], a
+ call GetItemName
+ ld hl, ItemPrompt6753
+ call MenuTextBox
+ call YesNoBox
+ call ExitMenu
+ jp c, .ExitGiveItem
+ ld a, 1
+ ld [wItemQuantity], a
+ ld hl, wNumBagItems
+ call TossItem
+ ld a, [wce37]
+ ld b, a
+ ld a, [wCurItem]
+ ld [wce37], a
+ ld a, b
+ ld [wCurItem], a
+ call PartyRecieveItem
+ jp nc, .GiveItem
+ ld a, [wce37]
+ ld [wCurItem], a
+ ld hl, ItemWasEquippedText
+ call MenuTextBoxBackup
+ jr .CheckMail
+
+.NoItem
+ ld a, 1
+ ld [wItemQuantity], a
+ ld hl, wNumBagItems
+ call TossItem
+ ld hl, ItemPrompt66FA
+ call MenuTextBoxBackup
+.CheckMail
+ call GetPartyItemOffset
+ ld a, [wCurItem]
+ ld [hl], a
+ ld a, [wCurItem]
+ cp ITEM_MAIL
+ call z, PartyGiveMail
+ jr .ExitGiveItem
+
+.GiveItem ; 04:664B
+ ld a, [wce37]
+ ld [wCurItem], a
+ call PartyRecieveItem
+ ld hl, PartyItemRecieveBagFullText
+ call MenuTextBoxBackup
+ jr .ExitGiveItem
+
+.CantGive ; 04:665C
+ ld hl, .CantBeEquippedText
+ call MenuTextBoxBackup
+.ExitGiveItem ;04:6662
+ call ClearPalettes
+ call LoadFontsBattleExtra
+ call ExitMenu
+ ret
+
+.PartyTryRecieveItem ; 04:666C
+ call SpeechTextBox
+ call GetPartyItemOffset
+ ld a, [hl]
+ and a
+ jr z, .NoItemToRecieve
+ ld [wCurItem], a
+ call PartyRecieveItem
+ jr nc, .jump2
+ call GetPartyItemOffset
+ ld a, [hl]
+ ld [wce37], a
+ ld [hl], 0
+ call GetItemName
+ ld hl, ItemPrompt673D
+ call MenuTextBoxBackup
+ jr .escape
+.NoItemToRecieve
+ ld hl, PartyNoItemToRecieveText
+ call MenuTextBoxBackup
+ jr .escape
+.jump2
+ ld hl, PartyItemRecieveBagFullText
+ call MenuTextBoxBackup
+.escape
+ ret
+
+.HoldItemMenu ; 04:66A1 ; verticalmenu
+ db STATICMENU_NO_TOP_SPACING | STATICMENU_PLACE_TITLE
+ menu_coords 4, 4, $e, 9
+ dw .HoldItemMenuText
+ db 1
+
+.HoldItemMenuText ;04:66A9
+ db $80
+
+ db 2
+ db "そうびを する@"
+ db "そうびを はずす@"
+
+.CantBeEquippedText ; 04:66BC
+ db 1
+ dw wStringBuffer1
+ text "を そうびすることは"
+ line "できません<PROMPT>"
+
+ItemWasEquippedText ; 04:66D1
+ db 1
+ dw wcd11
+ text "は そうび していた"
+ line "@"
+
+.UnusedText1 ; 04:66E1
+ db 1
+ dw wStringBuffer1
+ text "を はずして"
+ para "@"
+
+.UnusedText2 ; 04:66ED
+ db 1
+ dw wStringBuffer2
+ text "を そうびした!<PROMPT>"
+
+ItemPrompt66FA: ; 04:66FA
+ db 1
+ dw wcd11
+ text "は @"
+
+.UnusedText3 ; 04:6701
+ db 1
+ dw wStringBuffer2
+ text "を"
+ line "そうびした!<PROMPT>"
+
+PartyNoItemToRecieveText: ; 04:670E
+ db 1
+ dw wcd11
+ text "は なにも"
+ line "そうび していません!<PROMPT>"
+
+PartyItemRecieveBagFullText: ; 04:6724
+ text "どうぐが いっぱいで"
+ line "そうびを はずせません!<PROMPT>"
+
+ItemPrompt673D: ; 04:673D
+ db 1
+ dw wcd11
+ text "から @"
+
+.UnusedText4 ; 04:6745
+ db 1
+ dw wStringBuffer1
+ text "を"
+ line "はずしました!<PROMPT>"
+
+ItemPrompt6753: ; 04:6753
+ db 1
+ dw wcd11
+ text "は @"
+
+.UnusedText5; 04:675A
+ db 1
+ dw wStringBuffer1
+ text "を"
+ line "すでに そうび しています"
+ para "そうびしている どうぐを"
+ line "とりかえますか?"
+ done
+
+GetPartyItemOffset: ; 04:6784
+ push af
+ ld a, 1
+ call GetPartyParamLocation
+ pop af
+ ret
+
+PartyRecieveItem: ; 04:678C
+ ld a, 1
+ ld [wItemQuantity], a
+ ld hl, wNumBagItems
+ call ReceiveItem
+ ret
+
+UnusedHandleItemJumptable; 04:6798
+ callab CheckItemMenu
+ ld a, [wItemAttributeParamBuffer]
+ ld hl, UnusedItemJumptable
+ jp CallJumptable
+
+UnusedItemJumptable: ; 04:67A9
+ dw EmptyFunction127b7
+ dw PartyGiveMail
+ dw PartyBallPocket
+ dw ChangeBackpackPocket
+ dw EmptyFunction127b7
+ dw EmptyFunction127b7
+ dw EmptyFunction127b7
+
+EmptyFunction127b7: ; 04:67B7
+ ret
+
+ChangeBackpackPocket: ; 04:67B8
+ call FlipPocket2Status
+ xor a
+ ld [wSelectedSwapPosition], a
+ ret
+
+PartyBallPocket: ; 04:67C0
+ call BallPocket
+ jr c, .exit
+ call SelectItem
+ ret c
+ jr PartyBallPocket
+.exit
+ ret
+
+PartyGiveMail: ; 04:67CC
+ call LoadStandardMenuHeader
+ ld de, wMovementBufferCount
+ callab ComposeMailMessage
+ xor a
+ ldh [hBGMapMode], a
+ call LoadFontsBattleExtra
+ call Call_ExitMenu
+ call WaitBGMap
+ ld a, [wWhichPokemon]
+ ld hl, $BA68
+ ld bc, $0028
+ call AddNTimes
+ ld d, h
+ ld e, l
+ ld hl, wMovementBufferCount
+ ld bc, $0028
+ ld a, 2
+ call OpenSRAM
+ call CopyBytes
+ call CloseSRAM
+ ret
+
+PartyMailMenu: ; 04:6806
+ ld hl, .MailMenu
+ call LoadMenuHeader
+ call VerticalMenu
+ call PlaceHollowCursor
+ jp c, .exit
+ ld a, [wMenuCursorY]
+ cp 3
+ jp z, .exit
+ cp 1
+ jr z, .GiveMail
+ ld hl, .MessageRemoveMail
+ call MenuTextBox
+ call YesNoBox
+ call CloseWindow
+ jp c, .exit
+ ld a, [wWhichPokemon]
+ ld hl, wPartyMon1 + MON_ITEM
+ ld bc, $0030
+ call AddNTimes
+ ld a, [hl]
+ ld [wCurItem], a
+ ld a, 1
+ ld [wItemQuantity], a
+ push hl
+ ld hl, wNumBagItems
+ call ReceiveItem
+ pop hl
+ jr nc, .MailFull
+ xor a
+ ld [hl], a
+ call GetCurNick
+ ld hl, .DrawNick
+ call MenuTextBoxBackup
+ jr .exit
+.GiveMail
+ ld a, [wWhichPokemon]
+ ld hl, $BA68
+ ld bc, $0028
+ call AddNTimes
+ ld bc, $0028
+ ld de, wMovementBufferCount
+ ld a, 2
+ call OpenSRAM
+ call CopyBytes
+ call CloseSRAM
+ hlcoord 0, 12
+ ld b, 4
+ ld c, $12
+ call DrawTextBox
+ ld de, wMovementBufferCount
+ hlcoord 1, 14
+ call PlaceString
+ ld c, 5
+ call DelayFrames
+ xor a
+ ldh [hJoyState], a
+ call TextboxWaitPressAorB_BlinkCursor
+.exit
+ call CloseWindow
+ jp HandleSelectedPokemon
+
+.MailFull ; 04:689D
+ ld hl, .MailFullText
+ call MenuTextBoxBackup
+ jr .exit
+
+.MailMenu ; 04:68A5
+ db MENU_BACKUP_TILES
+ menu_coords 04, 04, $0E, $0B
+ dw .MailMenuStrings
+ db 01
+
+.MailMenuStrings ; 04:68AD
+
+ db $80
+ db 3
+ db "メールを よむ@"
+ db "メールを はずす@"
+ db "やめる@"
+
+.MessageRemoveMail ; 04:68C4
+ text "メールを はずすと メッセージが"
+ line "きえてしまいますが いいですか?"
+ done
+
+.DrawNick ; 04:68E7
+ db 1
+ dw wStringBuffer1
+ text "から @"
+
+.DeleteMailText ; 04:68EF
+ text "メールを"
+ line "はずしました!<PROMPT>"
+
+.MailFullText ; 04:68FD
+ text "どうぐが いっぱいで"
+ line "メールを はずせません!<PROMPT>"
+
+PartyPokemonSummary: ; 04:6916
+ call LoadStandardMenuHeader
+ call ClearSprites
+ xor a
+ ld [wMonType], a
+ call LowVolume
+ predef Function502b5
+ call MaxVolume
+ call ReloadFontAndTileset
+ call Call_ExitMenu
+ jp HandleSelectedPokemon
+
+PartyTryCut: ; 04:6934
+ callab CutFunction
+ ld a, [wFieldMoveSucceeded]
+ cp $F
+ jp nz, HandleSelectedPokemon
+ ld a, 4
+ jp PartyPromptExit
+
+PartyTryFly: ; 04:6949
+ bit 2, a
+ jp z, PrintNeedNewBadgeText
+ callab FlyFunction
+ ld a, [wFieldMoveSucceeded]
+ cp $F
+ jp nz, HandleSelectedPokemon
+ ld a, 4
+ jp PartyPromptExit
+
+PartyCantUseMove: ; 04:6963
+ call PrintCantUseHM
+ jp HandleSelectedPokemon
+
+PartyTryTeleport: ; 04:6969
+ callab TeleportFunction
+ ld a, [wFieldMoveSucceeded]
+ and a
+ jp z, HandleSelectedPokemon
+ ld a, 4
+ jp PartyPromptExit
+
+PartyTrySurf: ; 04:697D
+ bit 4, a
+ jp z, PrintNeedNewBadgeText
+ callab SurfFunction
+ ld a, [wFieldMoveSucceeded]
+ and a
+ jp z, HandleSelectedPokemon
+ ld a, 4
+ jp PartyPromptExit
+
+PartyTryDig: ; 04:6996
+ callab DigFunction
+ ld a, [wFieldMoveSucceeded]
+ cp $F
+ jp nz, HandleSelectedPokemon
+ ld a, 4
+ jp PartyPromptExit
+
+PartyCalculateHealth: ; 04:69AB
+ ld a, MON_MAXHP ; might be wrong, was $24
+ call GetPartyParamLocation
+ ld a, [hli]
+ ldh [hDividend], a
+ ld a, [hl]
+ ldh [hQuotient], a
+ ld a, 5
+ ldh [hDivisor], a
+ ld b, 2
+ call Divide
+ ld a, MON_HP + 1 ; might be wrong, was $23
+ call GetPartyParamLocation
+ ldh a, [hQuotient + 2]
+ sub [hl]
+ dec hl
+ ldh a, [hQuotient + 1]
+ sbc a, [hl]
+ jp nc, PrintNotHealthyEnoughText
+ callab Functionf218
+ jp HandleSelectedPokemon
+
+PrintNotHealthyEnoughText: ; 04:69D9
+ ld hl, NotHealthyEnoughText
+ call PrintText
+ jp HandleSelectedPokemon
+
+NotHealthyEnoughText: ; 04:69E2
+ text "たいりょくが たりません!<PROMPT>"
+
+PrintNeedNewBadgeText: ; 04:69F1
+ ld hl, NeedNewBadgeText
+ call PrintText
+ jp HandleSelectedPokemon
+
+NeedNewBadgeText: ; 04:69FA
+ text "あたらしい バッジを てにするまで"
+ line "まだ つかえません!<PROMPT>"
+
+PartyPokemonSummary2: ; 04:6A18
+ ld hl, wce5f
+ ld a, [hl]
+ push af
+ set 4, [hl]
+ call PokeSummary
+ pop af
+ ld [wce5f], a
+ call ClearBGPalettes
+ jp HandleSelectedPokemon
+
+PokeSummary: ; 04:6A2C
+ call ClearBGPalettes
+ call ClearTileMap
+ call ClearSprites
+ xor a
+ ldh [hBGMapMode], a
+ callab LoadOnlyPokemonStatsGraphics
+ callab Function8f0cc
+ ld a, [wWhichPokemon]
+ ld e, a
+ ld d, 0
+ ld hl, wPartySpecies
+ add hl, de
+ ld a, [hl]
+ ld [wce37], a
+ ld hl, Function8f0e3
+ ld a, BANK(Function8f0e3)
+ ld e, 2
+ call FarCall_hl
+ hlcoord 0, 1
+ ld b, 8
+ ld c, $12
+ call DrawTextBox
+ hlcoord 1, 1
+ lb bc, 2, $12
+ call ClearBox
+ hlcoord 3, 1
+ predef Function508c4
+ ld hl, wccd1
+ call SetHPPal
+ ld b, $0E
+ call GetSGBLayout
+ hlcoord 11, 0
+ lb bc, 1, 9
+ call ClearBox
+ hlcoord 16, 0
+ ld a, [wWhichPokemon]
+ and a
+ jr z, .FirstPokeChosen
+ ld [hl], "」"
+.FirstPokeChosen
+ inc a
+ ld b, a
+ ld a, [wPartyCount]
+ cp b
+ jr z, .LastPokeChosen
+ inc hl
+ inc hl
+ ld [hl], "▶" ; right filled arrow
+.LastPokeChosen
+ ld de, PartyMenuAttributes
+ call SetMenuAttributes
+SummaryDrawPoke: ; 04:6AAC
+ xor a
+ ldh [hBGMapMode], a
+ ld [wSelectedSwapPosition], a
+ ld [wMonType], a
+ predef Function50000
+ ld hl, wcd81
+ ld de, wce2e
+ ld bc, $0004
+ call CopyBytes
+ ld a, $28
+ ld [wHPBarMaxHP], a
+ hlcoord 2, 3
+ predef Function50bfe
+ hlcoord 11, 3
+ predef Function506d4
+ call WaitBGMap
+ call SetPalettes
+ ld a, [wcd57]
+ inc a
+ ld [w2DMenuNumRows], a
+ hlcoord 0, 10
+ ld b, 6
+ ld c, $12
+ call DrawTextBox
+ ld hl, w2DMenuFlags
+ set 6, [hl]
+ jr PartySelectionInputs.PartySelectSkipInputs
+PartySelectionInputs: ; 04:6AF9
+ call Get2DMenuJoypad + 3
+ bit B_BUTTON_F, a
+ jp nz, PartySelectionBackOut
+ bit A_BUTTON_F, a
+ jp nz, .PartyPokeSelect
+ bit D_RIGHT_F, a
+ jp nz, .PartyPokeDetailsAdvancePage
+ bit D_LEFT_F, a
+ jp nz, .PartyPokeDetailsBackPage
+.PartySelectSkipInputs
+ ld hl, wPartyMon1 + MON_MOVES
+ lb bc, 0, $30
+ ld a, [wWhichPokemon]
+ call AddNTimes
+ ld a, [wMenuCursorY]
+ dec a
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld a, [hl]
+ ld [wCurSpecies], a
+ hlcoord 1, 11
+ lb bc, $06, $12
+ call ClearBox
+ hlcoord 1, 12
+ ld a, [wSelectedSwapPosition]
+ and a
+ jr nz, .DrawMovePokeText
+ ld de, PartyTypeText
+ call PlaceString
+ ld a, [wCurSpecies]
+ ld b, a
+ hlcoord 5, 12
+ predef Function500a0
+ ld a, [wCurSpecies]
+ dec a
+ ld hl, Data4a8b8
+ ld bc, $0007
+ call AddNTimes
+ ld a, BANK(Data4a8b8)
+ call GetFarByte
+ hlcoord 15, 12
+ cp 2
+ jr c, .NotAMove
+ ld [wce37], a
+ ld de, wce37
+ lb bc, 1, 3
+ call PrintNumber
+ jr .step
+.NotAMove
+ ld de, PartyPokeDivider
+ call PlaceString
+.step
+ hlcoord 1, 14
+ predef Function2d663
+ jp PartySelectionInputs
+
+.DrawMovePokeText ; 04:6B84
+ hlcoord 1, 11
+ lb bc, 6, $12
+ call ClearBox
+ hlcoord 1, 12
+ ld de, PartyMoveText
+ call PlaceString
+ jp PartySelectionInputs
+
+.PartyPokeDetailsAdvancePage ; 04:6B99
+ ld hl, wWhichPokemon
+ inc [hl]
+ ld a, [wPartyCount]
+ cp [hl]
+ jp nz, PokeSummary
+ dec [hl]
+ jp PartySelectionInputs
+
+.PartyPokeDetailsBackPage ; 04:6BA8
+ ld hl, wWhichPokemon
+ ld a, [hl]
+ and a
+ jp z, PartySelectionInputs
+ dec [hl]
+ jp PokeSummary
+
+.PartyPokeSelect ; 04:6BB4
+ ld a, [wSelectedSwapPosition]
+ and a
+ jr nz, .swap
+ ld a, [wMenuCursorY]
+ ld [wSelectedSwapPosition], a
+ call PlaceHollowCursor
+ jr .DrawMovePokeText
+.swap
+ ld hl, wPartyMon1 + MON_MOVES
+ ld bc, $0030
+ ld a, [wWhichPokemon]
+ call AddNTimes
+ push hl
+ call SwapEntries
+ pop hl
+ ld bc, $0015
+ add hl, bc
+ call SwapEntries
+ ld a, [wBattleMode]
+ jr z, .NotInBattle
+ ld hl, wca04
+ ld bc, $0020
+ ld a, [wWhichPokemon]
+ call AddNTimes
+ push hl
+ call SwapEntries
+ pop hl
+ ld bc, $0006
+ add hl, bc
+ call SwapEntries
+.NotInBattle
+ hlcoord 1, 2
+ lb bc, 8, $12
+ call ClearBox
+ jp SummaryDrawPoke
+
+SwapEntries: ; 04:6C06
+; values at (hl + [cursor place]-1)
+; and (hl + [wSelectedSwapPosition] -1) get swapped
+ push hl ; saves hl
+ ld a, [wMenuCursorY]
+ dec a
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld d, h
+ ld e, l
+ pop hl ; hl is same as start
+ ld a, [wSelectedSwapPosition]
+ dec a
+ ld c, a
+ ld b, 0
+ add hl, bc ; hl is now hl + bc
+ ld a, [de]
+ ld b, [hl]
+ ld [hl], a
+ ld a, b
+ ld [de], a
+ ret
+
+PartySelectionBackOut: ; 04:6C20
+ xor a
+ ld [wSelectedSwapPosition], a
+ ld hl, w2DMenuFlags
+ res 6, [hl]
+ call ClearSprites
+ call ClearTileMap
+ ret
+
+PartyMenuAttributes: ; 04:6C30
+; cursor y
+; cursor y
+; num rows
+; num cols
+; bit 6: animate sprites bit 5: wrap around
+; ?
+; distance between items (hi: y, lo: x)
+; allowed buttons (mask)
+ db 3, 1
+ db 3, 1
+ db $40, $00
+ dn 2, 0
+ db $F3
+
+PartyTypeText: ; 04:6C38
+ db "タイプ/     いりょく/@"
+
+PartyPokeDivider: ; 04:6C47
+ db "ーーー@"
+
+PartyMoveText: ; 04:6C4B
+ db "どこに いどうしますか?@"
+
+CheckRegisteredItem: ; 04:6C58
+ call .RegisteredItem
+ ret
+
+.RegisteredItem ; 04:6C5C
+ call GetRegisteredItemID
+ jr c, .NotRegistered
+ call UseRegisteredItem
+ ret
+
+.NotRegistered ; 04:6C65
+ call RefreshScreen
+ ld hl, .NothingRegisteredText
+ call MenuTextBoxBackup
+ call Function1fea
+ ret
+
+.NothingRegisteredText: ; 04:6C72
+ text "べんりボタンを おした!"
+ line "⋯しかしなにもおきない!<PROMPT>"
+
+GetRegisteredItemID: ; 04:6C8D
+; if you can use the registered item, sets the ID to a
+; otherwise sets 0 to a and sets the carry flag
+ ld a, [wRegisteredItem]
+ and a
+ jr z, .CantUse
+ bit 7, a
+ jr nz, .IsKey
+ dec a
+ ld hl, wNumBagItems
+ cp [hl]
+ jr nc, .CantUse
+ inc hl
+ ld [wItemIndex], a
+ ld e, a
+ ld d, 0
+ add hl, de
+ add hl, de
+ ld a, [wRegisteredItemQuantity]
+ cp [hl]
+ jr nz, .CantUse
+ ld a, [hl]
+ ld [wCurItem], a
+ and a
+ ret
+.IsKey
+ and $7F
+ dec a
+ ld hl, wNumKeyItems
+ cp [hl]
+ jr nc, .CantUse
+ ld [wItemIndex], a
+ ld e, a
+ ld d, 0
+ inc hl
+ add hl, de
+ ld a, [wRegisteredItemQuantity]
+ cp [hl]
+ jr nz, .CantUse
+ ld a, [hl]
+ ld [wCurItem], a
+ and a
+ ret
+.CantUse
+ xor a
+ ld [wRegisteredItem], a
+ ld [wRegisteredItemQuantity], a
+ scf
+ ret
+
+UseRegisteredItem: ; 04:6CD9
+ callab CheckItemMenu
+ ld a, [wItemAttributeParamBuffer]
+ ld hl, .RegisteredItemJumptable
+ jp CallJumptable
+
+.RegisteredItemJumptable ; 04:6CEA
+ dw .CantUse2
+ dw .CantUse
+ dw .CantUse
+ dw .CantUse
+ dw .overworld
+ dw .FieldMove
+
+.CantUse ; 04:6CF6
+ call RefreshScreen
+ call PrintCantUseText
+ call Function1fea
+ and a
+ ret
+
+.UnusedSimpleUse ; 04:6D01
+ call RefreshScreen
+ call UseItem
+ call Function1fea
+ and a
+ ret
+
+.overworld ; 04:6D0C
+ call RefreshScreen
+ ld hl, wVramState
+ res 0, [hl]
+ call UseItem
+ call ClearPalettes
+ call StartMenuLoadSprites
+ call UpdateTimePals
+ call Function1fea
+ and a
+ ret
+
+.FieldMove ; 04:6D25
+ call UseItem
+ ld a, [wFieldMoveSucceeded]
+ and a
+ jr z, .CantUse2
+ scf
+ ld a, -1
+ ldh [hStartmenuCloseAndSelectHookEnable], a
+ ld a, 4
+ ret
+
+.CantUse2
+ call RefreshScreen
+ call PrintCantUseText
+ call Function1fea
+ and a
+ ret
+
+TrainerCardLoop: ; 04:6D41
+ ld a, [wVramState]
+ push af
+ xor a
+ ld [wVramState], a
+ call ClearTrainerCardJumptable
+.loop
+ call UpdateTime
+ call HandleTrainerCardJumptable
+ jr c, .escape
+ call DelayFrame
+ jr .loop
+.escape
+ pop af
+ ld [wVramState], a
+ ret
+
+ClearTrainerCardJumptable; 04:6D5E
+; sets four bytes at wJumpTableIndex to 0
+ call ClearPalettes
+ ld hl, wJumptableIndex
+ xor a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ call ClearTileMap
+ call ClearSprites
+ ld b, $0D
+ call GetSGBLayout
+ ret
+
+HandleTrainerCardJumptable: ; 04:6D75
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, 0
+ ld hl, .TrainerCardJumptable
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+
+.TrainerCardJumptable: ; 04:6D84
+ dw TrainerCardMainPage
+ dw .IncreaseJumpTableIndex
+ dw .IncreaseJumpTableIndex
+ dw .SetPalAndIncJumpTable
+ dw TrainerCardMainInputs
+ dw TrainerCardScroll
+ dw .IncreaseJumpTableIndex
+ dw .IncreaseJumpTableIndex
+ dw TrainerCardClearTileMap
+ dw .IncreaseJumpTableIndex
+ dw .IncreaseJumpTableIndex
+ dw TrainerCardSetWindowY
+ dw TrainerCardBadgePage
+ dw .IncreaseJumpTableIndex
+ dw .IncreaseJumpTableIndex
+ dw .SetPalAndIncJumpTable
+ dw TrainerCardBadgeInput
+ dw TrainerCardSetClearFlag
+
+.SetPalAndIncJumpTable: ; 04:6DA8
+ call SetPalettes
+.IncreaseJumpTableIndex: ; 04:6DAB
+ ld a, [wJumptableIndex]
+ inc a
+ ld [wJumptableIndex], a
+ ret
+
+TrainerCardMainPage: ; 04:6DB3
+ call ClearPalettes
+ call ClearTileMap
+ call TrainerCardDrawProtag
+ call DisableLCD
+ call PlaceMiscTilesTrainerCard
+ ld hl, TrainerCardBorderGFX
+ ld de, vTileset
+ ld bc, $0240
+ ld a, BANK(TrainerCardBorderGFX)
+ call FarCopyData
+ call DrawTrainerCardMainPage
+ call EnableLCD
+ ld a, [wJumptableIndex]
+ inc a
+ ld [wJumptableIndex], a
+ xor a
+ ld [wFlyDestination], a
+ and a
+ ret
+
+TrainerCardMainInputs: ; 04:6DE3
+ call EmptyFunction12e37
+ call GetJoypad
+ ld hl, hJoyDown
+ ld a, [hl]
+ and D_LEFT
+ jr nz, .left
+ ld a, [hl]
+ and D_RIGHT
+ jr nz, .right
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .a
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .exit
+ and a
+ ret
+.a
+ ld a, [wFlyDestination]
+ and a
+ jr z, .exit
+ ld a, 5
+ ld [wJumptableIndex], a
+ and a
+ ret
+.exit
+ ld a, $11
+ ld [wJumptableIndex], a
+ and a
+ ret
+.left
+ hlcoord 4, 16
+ ld [hl], "▶"
+ hlcoord 11, 16
+ ld [hl], " "
+ xor a
+ ld [wFlyDestination], a
+ and a
+ ret
+.right
+ hlcoord 4, 16
+ ld [hl], " "
+ hlcoord 11, 16
+ ld [hl], "▶"
+ ld a, 1
+ ld [wFlyDestination], a
+ and a
+ ret
+
+EmptyFunction12e37: ; 04:6E37
+ ret
+
+TrainerCardScroll: ; 04:6E38
+ ld a, $90
+ ldh [hWY], a
+ ld a, $9C
+ ldh [hBGMapAddress +1], a
+ ld a, [wJumptableIndex]
+ inc a
+ ld [wJumptableIndex], a
+ and a
+ ret
+
+TrainerCardClearTileMap: ; 04:6E49
+ xor a
+ ldh [hWY], a
+ ld a, $98
+ ldh [hBGMapAddress +1], a
+ call ClearTileMap
+ ld a, [wJumptableIndex]
+ inc a
+ ld [wJumptableIndex], a
+ and a
+ ret
+
+TrainerCardSetWindowY: ; 04:6E5C
+ ldh a, [hWY]
+ cp $90
+ jr nc, TrainerCardClearPals
+ add a, 4
+ ldh [hWY], a
+ and a
+ ret
+
+TrainerCardClearPals: ; 04:6E68
+ call ClearPalettes
+ ld a, $90
+ ldh [hWY], a
+ ld a, [wJumptableIndex]
+ inc a
+ ld [wJumptableIndex], a
+ and a
+ ret
+
+TrainerCardBadgePage: ; 04:6E78
+ call ClearPalettes
+ call DisableLCD
+ ld hl, TrainerCardLeadersGFX
+ ld de, vTileset
+ ld bc, $07F0
+ ld a, BANK(TrainerCardLeadersGFX)
+ call FarCopyData
+ call ClearTileMap
+ call DrawTrainerCaseBadgePage
+ call EnableLCD
+ ld a, [wJumptableIndex]
+ inc a
+ ld [wJumptableIndex], a
+ and a
+ ret
+
+TrainerCardBadgeInput: ; 04:6E9E
+ call GetJoypad
+ ld hl, hJoyDown
+ ld a, [hl]
+ and 3
+ jr z, .skip
+ ld a, $11
+ ld [wJumptableIndex], a
+.skip
+ and a
+ ret
+
+TrainerCardSetClearFlag: ; 04:6EB0
+ scf
+ ret
+
+TrainerCardDrawProtag: ; 04:6EB2
+ ld de, ProtagonistPic
+ ld a, BANK(ProtagonistPic)
+ call UncompressSpriteFromDE
+ ld a, 0
+ call OpenSRAM
+ ld hl, sSpriteBuffer1
+ ld de, sSpriteBuffer0
+ ld bc, $0310
+ call CopyBytes
+ call CloseSRAM
+ ld de, vChars2 tile $30
+ call InterlaceMergeSpriteBuffers
+ ret
+
+PlaceMiscTilesTrainerCard: ; 04:6ED5
+ ld a, $30
+ ldh [hGraphicStartTile], a
+ hlcoord 13, 1
+ lb bc, 7, 7
+ predef PlaceGraphic
+ ret
+
+DrawTrainerCardMainPage: ; 04:6EE5
+ hlcoord 0, 0
+ ld d, 5
+ call PlaceTrainerCardBGTile
+ hlcoord 0, 8
+ ld d, 6
+ call PlaceTrainerCardBGTile
+ hlcoord 2, 2
+ ld de, TrainerCardText
+ call PlaceString
+ hlcoord 16, 10
+ ld de, TrainerCardDexEntriesText
+ call PlaceString
+ hlcoord 6, 2
+ ld de, wPlayerName
+ call PlaceString
+ hlcoord 5, 4
+ ld de, wce73
+ lb bc, 2, 5
+ call PrintNumber
+ hlcoord 7, 6
+ ld de, wd15d
+ lb bc, 3, 6
+ call PrintNumber
+ ld [hl], $F0
+ ld hl, wPokedexOwned
+ ld b, $1C
+ call CountSetBits
+ ld de, wce37
+ hlcoord 13, 10
+ lb bc, 1, 3
+ call PrintNumber
+ hlcoord 1, 0
+ ld de, TrainerCardNameTiles
+ call PlaceTrainerCardTiles
+ hlcoord 2, 4
+ ld de, TrainerCardIDNoTiles
+ call PlaceTrainerCardTiles
+ hlcoord 1, 3
+ ld de, TrainerCardNameUnderlineTiles
+ call PlaceTrainerCardTiles
+ hlcoord 1, 8
+ ld de, TrainerCardStatusTiles
+ call PlaceTrainerCardTiles
+ hlcoord 0, 13
+ ld de, TrainerCardBadgesOutlineTiles
+ call PlaceTrainerCardTiles
+ hlcoord 5, 16
+ ld de, TrainerCardBadgesTextTiles
+ call PlaceTrainerCardTiles
+ hlcoord 4, 16
+ ld [hl], "▶"
+ ret
+
+TrainerCardText: ; 04:6F7A
+ db "なまえ/<NEXT><NEXT>おこづかい<NEXT><NEXT>#ずかん@"
+
+TrainerCardDexEntriesText: ; 04:6F8C
+ db "ひき@"
+
+TrainerCardNameTiles: ; 04:6F8F
+ db $0A, $0C, $0D, $0E, $0F, $FF
+
+TrainerCardIDNoTiles: ; 04:6F95
+ db $22, $23, $FF
+
+TrainerCardNameUnderlineTiles: ; 04:6F98
+ db $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $0B, $FF
+
+TrainerCardStatusTiles: ; 04:6FA6
+ db $0A, $10, $11, $12, $13, $FF
+
+TrainerCardBadgesOutlineTiles: ; 04:6FAC
+ db $03, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $02, $7F, $14, $15, $16, $17, $18, $19, $1A, $1B, $1C, $1D, $7F, $7F, $7F, $FE, $BA, $7F, $7F, $7F, $05, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $FF
+
+TrainerCardBadgesTextTiles: ; 04:6FE9
+ db $1E, $1F, $20, $7F, $7F, $7F, $7F, $1B, $1C, $1D, $FF
+
+DrawTrainerCaseBadgePage: ; 04:6FF4
+ hlcoord 0, 0
+ ld d, $0E
+ call PlaceTrainerCardBGTile
+ hlcoord 5, 2
+ ld de, TrainerCardLeagueBadgesTextTiles
+ call PlaceString
+ hlcoord 1, 0
+ ld de, TrainerCardBadgesTiles
+ call PlaceTrainerCardTiles
+ hlcoord 0, 3
+ ld de, TrainerCardBadgeSilhouettesTiles
+ call PlaceTrainerCardTiles
+ ret
+
+TrainerCardLeagueBadgesTextTiles: ; 04:7018
+ db "#りーグバッジ@"
+
+TrainerCardBadgesTiles: ; 04:7020
+ db $0A, $0B, $0C, $0D, $0E, $FF
+
+TrainerCardBadgeSilhouettesTiles: ; 04:7026
+ db $07, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $07, $07, $02, $18, $58, $59, $5A, $19, $5B, $5C, $5D, $1A, $6B, $6C, $6D, $1B, $78, $79, $7A, $7F, $07, $07, $02, $7F, $20, $21, $22, $7F, $23, $24, $25, $7F, $26, $27, $28, $7F, $29, $2A, $2B, $7F, $07, $07, $02, $7F, $30, $31, $32, $7F, $33, $34, $35, $7F, $36, $37, $38, $7F, $39, $3A, $3B, $7F, $07, $07, $02, $7F, $40, $41, $42, $7F, $43, $44, $45, $7F, $46, $47, $48, $7F, $49, $4A, $4B, $7F, $07, $07, $05, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $04, $07, $07, $7F, $1C, $68, $69, $6A, $1D, $7E, $6F, $6F, $1E, $5E, $5F, $6E, $1F, $7B, $7C, $7D, $02, $07, $07, $7F, $7F, $2C, $2D, $2E, $7F, $2F, $50, $51, $7F, $52, $53, $54, $7F, $55, $56, $57, $02, $07, $07, $7F, $7F, $3C, $3D, $3E, $7F, $3F, $60, $61, $7F, $62, $63, $64, $7F, $65, $66, $67, $02, $07, $07, $7F, $7F, $4C, $4D, $4E, $7F, $4F, $70, $71, $7F, $72, $73, $74, $7F, $75, $76, $77, $02, $07, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $02, $07, $7F, $7F, $10, $7F, $11, $7F, $12, $7F, $13, $7F, $14, $7F, $15, $7F, $16, $7F, $17, $7F, $02, $07, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $06, $07, $FF
+
+PlaceTrainerCardTiles: ; 04:712B
+; takes the tiles from de and places them at hl until FF is found.
+ ld a, [de]
+ cp $FF
+ ret z
+ ld [hli], a
+ inc de
+ jr PlaceTrainerCardTiles
+
+PlaceTrainerCardBGTile: ; 04:7133
+; puts tile $07 (chequered background) at coord hl.
+; d controls how many times biggerloop loops.
+ ld e, $14
+.loop
+ ld a, $07
+ ld [hli], a
+ dec e
+ jr nz, .loop
+
+ ld a, $07
+ ld [hli], a
+ ld e, $11
+.ScanLoop
+ inc hl
+ dec e
+ jr nz, .ScanLoop
+
+ ld a, 9
+ ld [hli], a
+ ld a, 7
+ ld [hli], a
+.OuterLoop
+ ld a, 7
+ ld [hli], a
+ ld e, $12
+.InnerLoop
+ inc hl
+ dec e
+ jr nz, .InnerLoop
+
+ ld a, 7
+ ld [hli], a
+ dec d
+ jr nz, .OuterLoop
+
+ ld a, 7
+ ld [hli], a
+ ld a, 8
+ ld [hli], a
+ ld e, $11
+.ScanLoop2
+ inc hl
+ dec e
+ jr nz, .ScanLoop2
+
+ ld a, 7
+ ld [hli], a
+ ld e, $14
+.LastLoop
+ ld a, 7
+ ld [hli], a
+ dec e
+ jr nz, .LastLoop
+ ret
+
+; end of section \ No newline at end of file