pokegold-spaceworld/engine/menu/start_menu.asm

2262 lines
41 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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