summaryrefslogtreecommitdiff
path: root/engine/pokemon/bills_pc.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/pokemon/bills_pc.asm')
-rw-r--r--engine/pokemon/bills_pc.asm2618
1 files changed, 2618 insertions, 0 deletions
diff --git a/engine/pokemon/bills_pc.asm b/engine/pokemon/bills_pc.asm
new file mode 100644
index 000000000..96d6ac310
--- /dev/null
+++ b/engine/pokemon/bills_pc.asm
@@ -0,0 +1,2618 @@
+_DepositPKMN: ; e2391 (38:6391)
+ ld hl, wOptions
+ ld a, [hl]
+ push af
+ set 4, [hl]
+ ld a, [wVramState]
+ push af
+ xor a
+ ld [wVramState], a
+ ld a, [hInMenu]
+ push af
+ ld a, $1
+ ld [hInMenu], a
+ xor a
+ ld [hMapAnims], a
+ call BillsPC_InitRAM
+ xor a
+ ld [wBillsPC_LoadedBox], a
+ call DelayFrame
+.loop
+ call JoyTextDelay
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .done
+ call .RunJumptable
+ call DelayFrame
+ jr .loop
+.done
+ call ClearSprites
+ pop af
+ ld [hInMenu], a
+ pop af
+ ld [wVramState], a
+ pop af
+ ld [wOptions], a
+ ret
+
+.RunJumptable: ; e23d5 (38:63d5)
+ ld a, [wJumptableIndex]
+ ld hl, .Jumptable
+ call BillsPC_Jumptable
+ jp hl
+
+.Jumptable: ; e23df (38:63df)
+ dw .Init
+ dw .HandleJoypad
+ dw .WhatsUp
+ dw .Submenu
+ dw BillsPC_EndJumptableLoop
+
+.Init: ; e23e9 (38:63e9)
+ xor a
+ ld [hBGMapMode], a
+ call ClearSprites
+ call CopyBoxmonSpecies
+ call BillsPC_BoxName
+ ld de, PCString_ChooseaPKMN
+ call BillsPC_PlaceString
+ ld a, $5
+ ld [wBillsPC_NumMonsOnScreen], a
+ call BillsPC_RefreshTextboxes
+ call PCMonInfo
+ ld a, $ff
+ ld [wCurPartySpecies], a
+ ld a, SCGB_BILLS_PC
+ call BillsPC_ApplyPalettes
+ call WaitBGMap
+ call BillsPC_UpdateSelectionCursor
+ call BillsPC_IncrementJumptableIndex
+ ret
+
+.HandleJoypad: ; e241a (38:641a)
+ ld hl, hJoyPressed ; $ffa7
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .b_button
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .a_button
+ call Withdraw_UpDown
+ and a
+ ret z
+ call BillsPC_UpdateSelectionCursor
+ xor a
+ ld [hBGMapMode], a
+ call BillsPC_RefreshTextboxes
+ call PCMonInfo
+ ld a, $1
+ ld [hBGMapMode], a
+ call DelayFrame
+ call DelayFrame
+ ret
+
+.a_button
+ call BillsPC_GetSelectedPokemonSpecies
+ and a
+ ret z
+ cp -1
+ jr z, .b_button
+ ld a, $2
+ ld [wJumptableIndex], a
+ ret
+; e2452 (38:6452)
+
+.go_back
+ ld hl, wJumptableIndex
+ dec [hl]
+ ret
+
+.b_button
+ ld a, $4
+ ld [wJumptableIndex], a
+ ret
+
+.WhatsUp: ; e245d (38:645d)
+ xor a
+ ld [hBGMapMode], a
+ call ClearSprites
+ call BillsPC_GetSelectedPokemonSpecies
+ ld [wCurPartySpecies], a
+ ld a, SCGB_BILLS_PC
+ call BillsPC_ApplyPalettes
+ ld de, PCString_WhatsUp
+ call BillsPC_PlaceString
+ ld a, $1
+ ld [wMenuCursorY], a
+ call BillsPC_IncrementJumptableIndex
+ ret
+
+.Submenu: ; e247d (38:647d)
+ ld hl, BillsPCDepositMenuHeader
+ call CopyMenuHeader
+ ld a, [wMenuCursorY]
+ call StoreTo_wMenuCursorBuffer
+ call VerticalMenu
+ jp c, BillsPCDepositFuncCancel
+ ld a, [wMenuCursorY]
+ dec a
+ and %11
+ ld e, a
+ ld d, 0
+ ld hl, BillsPCDepositJumptable
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+
+BillsPCDepositJumptable: ; e24a1 (38:64a1)
+ dw BillsPCDepositFuncDeposit ; Deposit Pokemon
+ dw BillsPCDepositFuncStats ; Pokemon Stats
+ dw BillsPCDepositFuncRelease ; Release Pokemon
+ dw BillsPCDepositFuncCancel ; Cancel
+
+
+BillsPCDepositFuncDeposit: ; e24a9 (38:64a9)
+ call BillsPC_CheckMail_PreventBlackout
+ jp c, BillsPCDepositFuncCancel
+ call DepositPokemon
+ jr c, .box_full
+ ld a, $0
+ ld [wJumptableIndex], a
+ xor a
+ ld [wBillsPC_CursorPosition], a
+ ld [wBillsPC_ScrollPosition], a
+ ret
+
+.box_full
+ ld de, PCString_WhatsUp
+ call BillsPC_PlaceString
+ ret
+
+BillsPCDepositFuncStats: ; e24c8 (38:64c8)
+ call LoadStandardMenuHeader
+ call BillsPC_StatsScreen
+ call ExitMenu
+ call PCMonInfo
+ call BillsPC_GetSelectedPokemonSpecies
+ ld [wCurPartySpecies], a
+ ld a, SCGB_BILLS_PC
+ call BillsPC_ApplyPalettes
+ ret
+
+BillsPCDepositFuncRelease: ; e24e0 (38:64e0)
+ call BillsPC_CheckMail_PreventBlackout
+ jr c, BillsPCDepositFuncCancel
+ call BillsPC_IsMonAnEgg
+ jr c, BillsPCDepositFuncCancel
+ ld a, [wMenuCursorY]
+ push af
+ ld de, PCString_ReleasePKMN
+ call BillsPC_PlaceString
+ call LoadStandardMenuHeader
+ lb bc, 14, 11
+ call PlaceYesNoBox
+ ld a, [wMenuCursorY]
+ dec a
+ call ExitMenu
+ and a
+ jr nz, .failed_release
+ ld a, [wBillsPC_CursorPosition]
+ ld hl, wBillsPC_ScrollPosition
+ add [hl]
+ ld [wCurPartyMon], a
+ xor a ; REMOVE_PARTY
+ ld [wPokemonWithdrawDepositParameter], a
+ farcall RemoveMonFromPartyOrBox
+ call ReleasePKMN_ByePKMN
+ ld a, $0
+ ld [wJumptableIndex], a
+ xor a
+ ld [wBillsPC_CursorPosition], a
+ ld [wBillsPC_ScrollPosition], a
+ pop af
+ ret
+
+.failed_release
+ ld de, PCString_WhatsUp
+ call BillsPC_PlaceString
+ pop af
+ ld [wMenuCursorY], a
+ ret
+
+BillsPCDepositFuncCancel: ; e2537 (38:6537)
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+; e253d (38:653d)
+
+BillsPCDepositMenuHeader: ; 0xe253d (38:653d)
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 9, 4, SCREEN_WIDTH - 1, 13
+ dw .MenuData
+ db 1 ; default option
+; 0xe2545
+
+.MenuData: ; 0xe2545 (38:6545)
+ db STATICMENU_CURSOR ; flags
+ db 4 ; items
+ db "DEPOSIT@"
+ db "STATS@"
+ db "RELEASE@"
+ db "CANCEL@"
+; 0xe2564 (38:6564)
+
+Unreferenced_BillsPCClearThreeBoxes: ; e2564
+ hlcoord 0, 0
+ ld b, 4
+ ld c, 8
+ call ClearBox
+ hlcoord 0, 4
+ ld b, 10
+ ld c, 9
+ call ClearBox
+ hlcoord 0, 14
+ ld b, 2
+ ld c, 8
+ call ClearBox
+ ret
+; e2583
+
+_WithdrawPKMN: ; e2583 (38:6583)
+ ld hl, wOptions
+ ld a, [hl]
+ push af
+ set 4, [hl]
+ ld a, [wVramState]
+ push af
+ xor a
+ ld [wVramState], a
+ ld a, [hInMenu]
+ push af
+ ld a, $1
+ ld [hInMenu], a
+ xor a
+ ld [hMapAnims], a
+ call BillsPC_InitRAM
+ ld a, NUM_BOXES + 1
+ ld [wBillsPC_LoadedBox], a
+ call DelayFrame
+.loop
+ call JoyTextDelay
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .done
+ call .RunJumptable
+ call DelayFrame
+ jr .loop
+.done
+ call ClearSprites
+ pop af
+ ld [hInMenu], a
+ pop af
+ ld [wVramState], a
+ pop af
+ ld [wOptions], a
+ ret
+
+.RunJumptable: ; e25c8 (38:65c8)
+ ld a, [wJumptableIndex]
+ ld hl, .Jumptable
+ call BillsPC_Jumptable
+ jp hl
+
+.Jumptable: ; e25d2 (38:65d2)
+ dw .Init
+ dw .Joypad
+ dw .PrepSubmenu
+ dw BillsPC_Withdraw
+ dw BillsPC_EndJumptableLoop
+
+.Init: ; e25dc (38:65dc)
+ ld a, NUM_BOXES + 1
+ ld [wBillsPC_LoadedBox], a
+ xor a
+ ld [hBGMapMode], a
+ call ClearSprites
+ call CopyBoxmonSpecies
+ call BillsPC_BoxName
+ ld de, PCString_ChooseaPKMN
+ call BillsPC_PlaceString
+ ld a, $5
+ ld [wBillsPC_NumMonsOnScreen], a
+ call BillsPC_RefreshTextboxes
+ call PCMonInfo
+ ld a, $ff
+ ld [wCurPartySpecies], a
+ ld a, SCGB_BILLS_PC
+ call BillsPC_ApplyPalettes
+ call WaitBGMap
+ call BillsPC_UpdateSelectionCursor
+ call BillsPC_IncrementJumptableIndex
+ ret
+
+.Joypad: ; e2612 (38:6612)
+ ld hl, hJoyPressed ; $ffa7
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .b_button
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .a_button
+ call Withdraw_UpDown
+ and a
+ ret z
+ call BillsPC_UpdateSelectionCursor
+ xor a
+ ld [hBGMapMode], a
+ call BillsPC_RefreshTextboxes
+ call PCMonInfo
+ ld a, $1
+ ld [hBGMapMode], a
+ call DelayFrame
+ call DelayFrame
+ ret
+.a_button
+ call BillsPC_GetSelectedPokemonSpecies
+ and a
+ ret z
+ cp -1
+ jr z, .b_button
+ ld a, $2
+ ld [wJumptableIndex], a
+ ret ; e264a (38:664a)
+
+.unused
+ ld hl, wJumptableIndex
+ dec [hl]
+ ret
+
+.b_button
+ ld a, $4
+ ld [wJumptableIndex], a
+ ret
+; e2655
+
+.PrepSubmenu: ; e2655 (38:6655)
+ xor a
+ ld [hBGMapMode], a
+ call ClearSprites
+ call BillsPC_GetSelectedPokemonSpecies
+ ld [wCurPartySpecies], a
+ ld a, SCGB_BILLS_PC
+ call BillsPC_ApplyPalettes
+ ld de, PCString_WhatsUp
+ call BillsPC_PlaceString
+ ld a, $1
+ ld [wMenuCursorY], a
+ call BillsPC_IncrementJumptableIndex
+ ret
+
+BillsPC_Withdraw: ; e2675 (38:6675)
+ ld hl, .MenuHeader
+ call CopyMenuHeader
+ ld a, [wMenuCursorY]
+ call StoreTo_wMenuCursorBuffer
+ call VerticalMenu
+ jp c, .cancel
+ ld a, [wMenuCursorY]
+ dec a
+ and %11
+ ld e, a
+ ld d, 0
+ ld hl, .dw
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+
+.dw ; e2699 (38:6699) #mark
+ dw .withdraw ; Withdraw
+ dw .stats ; Stats
+ dw .release ; Release
+ dw .cancel ; Cancel
+
+
+.withdraw ; e26a1 (38:66a1)
+ call BillsPC_CheckMail_PreventBlackout
+ jp c, .cancel
+ call TryWithdrawPokemon
+ jr c, .FailedWithdraw
+ ld a, $0
+ ld [wJumptableIndex], a
+ xor a
+ ld [wBillsPC_CursorPosition], a
+ ld [wBillsPC_ScrollPosition], a
+ ret
+.FailedWithdraw:
+ ld de, PCString_WhatsUp
+ call BillsPC_PlaceString
+ ret
+
+.stats ; e26c0 (38:66c0)
+ call LoadStandardMenuHeader
+ call BillsPC_StatsScreen
+ call ExitMenu
+ call PCMonInfo
+ call BillsPC_GetSelectedPokemonSpecies
+ ld [wCurPartySpecies], a
+ ld a, SCGB_BILLS_PC
+ call BillsPC_ApplyPalettes
+ ret
+
+.release ; e26d8 (38:66d8)
+ ld a, [wMenuCursorY]
+ push af
+ call BillsPC_IsMonAnEgg
+ jr c, .FailedRelease
+ ld de, PCString_ReleasePKMN
+ call BillsPC_PlaceString
+ call LoadStandardMenuHeader
+ lb bc, 14, 11
+ call PlaceYesNoBox
+ ld a, [wMenuCursorY]
+ dec a
+ call ExitMenu
+ and a
+ jr nz, .FailedRelease
+ ld a, [wBillsPC_CursorPosition]
+ ld hl, wBillsPC_ScrollPosition
+ add [hl]
+ ld [wCurPartyMon], a
+ ld a, REMOVE_BOX
+ ld [wPokemonWithdrawDepositParameter], a
+ farcall RemoveMonFromPartyOrBox
+ call ReleasePKMN_ByePKMN
+ ld a, $0
+ ld [wJumptableIndex], a
+ xor a
+ ld [wBillsPC_CursorPosition], a
+ ld [wBillsPC_ScrollPosition], a
+ pop af
+ ret
+.FailedRelease:
+ ld de, PCString_WhatsUp
+ call BillsPC_PlaceString
+ pop af
+ ld [wMenuCursorY], a
+ ret
+
+.cancel ; e272b (38:672b)
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+; e2731 (38:6731)
+
+.MenuHeader: ; 0xe2731
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 9, 4, SCREEN_WIDTH - 1, 13
+ dw .MenuData
+ db 1 ; default option
+; 0xe2739
+
+.MenuData: ; 0xe2739
+ db STATICMENU_CURSOR ; flags
+ db 4 ; items
+ db "WITHDRAW@"
+ db "STATS@"
+ db "RELEASE@"
+ db "CANCEL@"
+; 0xe2759
+
+_MovePKMNWithoutMail: ; e2759
+ ld hl, wOptions
+ ld a, [hl]
+ push af
+ set 4, [hl]
+ ld a, [wVramState]
+ push af
+ xor a
+ ld [wVramState], a
+ ld a, [hInMenu]
+ push af
+ ld a, $1
+ ld [hInMenu], a
+ xor a
+ ld [hMapAnims], a
+ call BillsPC_InitRAM
+ ld a, [wCurBox]
+ and $f
+ inc a
+ ld [wBillsPC_LoadedBox], a
+ call DelayFrame
+.asm_e2781
+ call JoyTextDelay
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .asm_e2793
+ call .RunJumptable
+ call DelayFrame
+ jr .asm_e2781
+
+.asm_e2793
+ call ClearSprites
+ pop af
+ ld [hInMenu], a
+ pop af
+ ld [wVramState], a
+ pop af
+ ld [wOptions], a
+ ret
+; e27a2
+
+.RunJumptable: ; e27a2
+ ld a, [wJumptableIndex]
+ ld hl, .Jumptable
+ call BillsPC_Jumptable
+ jp hl
+; e27ac
+
+.Jumptable: ; e27ac
+ dw .Init
+ dw .Joypad
+ dw .PrepSubmenu
+ dw .MoveMonWOMailSubmenu
+ dw .PrepInsertCursor
+ dw .Joypad2
+ dw BillsPC_EndJumptableLoop
+; e27ba
+
+.Init: ; e27ba
+ xor a
+ ld [hBGMapMode], a
+ call ClearSprites
+ call CopyBoxmonSpecies
+ ld de, PCString_ChooseaPKMN
+ call BillsPC_PlaceString
+ ld a, 5
+ ld [wBillsPC_NumMonsOnScreen], a
+ call BillsPC_RefreshTextboxes
+ call BillsPC_MoveMonWOMail_BoxNameAndArrows
+ call PCMonInfo
+ ld a, $ff
+ ld [wCurPartySpecies], a
+ ld a, SCGB_BILLS_PC
+ call BillsPC_ApplyPalettes
+ call WaitBGMap
+ call BillsPC_UpdateSelectionCursor
+ call BillsPC_IncrementJumptableIndex
+ ret
+; e27eb
+
+.Joypad: ; e27eb
+ ld hl, hJoyPressed
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .b_button
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .a_button
+ call MoveMonWithoutMail_DPad
+ jr c, .d_pad
+ and a
+ ret z
+ call BillsPC_UpdateSelectionCursor
+ xor a
+ ld [hBGMapMode], a
+ call BillsPC_RefreshTextboxes
+ call PCMonInfo
+ ld a, $1
+ ld [hBGMapMode], a
+ call DelayFrame
+ call DelayFrame
+ ret
+
+.d_pad
+ xor a
+ ld [wBillsPC_CursorPosition], a
+ ld [wBillsPC_ScrollPosition], a
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+
+.a_button
+ call BillsPC_GetSelectedPokemonSpecies
+ and a
+ ret z
+ cp -1
+ jr z, .b_button
+ ld a, $2
+ ld [wJumptableIndex], a
+ ret
+
+.unused
+ ld hl, wJumptableIndex
+ dec [hl]
+ ret
+
+.b_button
+ ld a, $6
+ ld [wJumptableIndex], a
+ ret
+; e283d
+
+.PrepSubmenu: ; e283d
+ xor a
+ ld [hBGMapMode], a
+ call ClearSprites
+ call BillsPC_GetSelectedPokemonSpecies
+ ld [wCurPartySpecies], a
+ ld a, SCGB_BILLS_PC
+ call BillsPC_ApplyPalettes
+ ld de, PCString_WhatsUp
+ call BillsPC_PlaceString
+ ld a, $1
+ ld [wMenuCursorY], a
+ call BillsPC_IncrementJumptableIndex
+ ret
+; e285d
+
+.MoveMonWOMailSubmenu: ; e285d
+ ld hl, .MenuHeader
+ call CopyMenuHeader
+ ld a, [wMenuCursorY]
+ call StoreTo_wMenuCursorBuffer
+ call VerticalMenu
+ jp c, .Cancel
+ ld a, [wMenuCursorY]
+ dec a
+ and %11
+ ld e, a
+ ld d, 0
+ ld hl, .Jumptable2
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+; e2881
+
+.Jumptable2: ; e2881
+ dw .Move
+ dw .Stats
+ dw .Cancel
+; e2887
+
+.Move: ; e2887
+ call BillsPC_CheckMail_PreventBlackout
+ jp c, .Cancel
+ ld a, [wBillsPC_ScrollPosition]
+ ld [wBillsPC_BackupScrollPosition], a
+ ld a, [wBillsPC_CursorPosition]
+ ld [wBillsPC_BackupCursorPosition], a
+ ld a, [wBillsPC_LoadedBox]
+ ld [wBillsPC_BackupLoadedBox], a
+ ld a, $4
+ ld [wJumptableIndex], a
+ ret
+; e28a5
+
+.Stats: ; e28a5
+ call LoadStandardMenuHeader
+ call BillsPC_StatsScreen
+ call ExitMenu
+ call PCMonInfo
+ call BillsPC_GetSelectedPokemonSpecies
+ ld [wCurPartySpecies], a
+ ld a, SCGB_BILLS_PC
+ call BillsPC_ApplyPalettes
+ ret
+; e28bd
+
+.Cancel: ; e28bd
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+; e28c3
+
+.MenuHeader: ; 0xe28c3
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 9, 4, SCREEN_WIDTH - 1, 13
+ dw .MenuData
+ db 1 ; default option
+; 0xe28cb
+
+.MenuData: ; 0xe28cb
+ db STATICMENU_CURSOR ; flags
+ db 3 ; items
+ db "MOVE@"
+ db "STATS@"
+ db "CANCEL@"
+; 0xe28df
+
+.PrepInsertCursor: ; e28df
+ xor a
+ ld [hBGMapMode], a
+ call CopyBoxmonSpecies
+ ld de, PCString_MoveToWhere
+ call BillsPC_PlaceString
+ ld a, $5
+ ld [wBillsPC_NumMonsOnScreen], a
+ call BillsPC_RefreshTextboxes
+ call BillsPC_MoveMonWOMail_BoxNameAndArrows
+ call ClearSprites
+ call BillsPC_UpdateInsertCursor
+ call WaitBGMap
+ call BillsPC_IncrementJumptableIndex
+ ret
+; e2903
+
+.Joypad2: ; e2903
+ ld hl, hJoyPressed
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .b_button_2
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .a_button_2
+ call MoveMonWithoutMail_DPad_2
+ jr c, .dpad_2
+ and a
+ ret z
+ call BillsPC_UpdateInsertCursor
+ xor a
+ ld [hBGMapMode], a
+ call BillsPC_RefreshTextboxes
+ ld a, $1
+ ld [hBGMapMode], a
+ call DelayFrame
+ call DelayFrame
+ ret
+
+.dpad_2
+ xor a
+ ld [wBillsPC_CursorPosition], a
+ ld [wBillsPC_ScrollPosition], a
+ ld a, $4
+ ld [wJumptableIndex], a
+ ret
+
+.a_button_2
+ call BillsPC_CheckSpaceInDestination
+ jr c, .no_space
+ call MovePKMNWitoutMail_InsertMon
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+
+.no_space
+ ld hl, wJumptableIndex
+ dec [hl]
+ ret
+
+.b_button_2
+ ld a, [wBillsPC_BackupScrollPosition]
+ ld [wBillsPC_ScrollPosition], a
+ ld a, [wBillsPC_BackupCursorPosition]
+ ld [wBillsPC_CursorPosition], a
+ ld a, [wBillsPC_BackupLoadedBox]
+ ld [wBillsPC_LoadedBox], a
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+; e2963
+
+BillsPC_InitRAM: ; e2963 (38:6963)
+ call ClearBGPalettes
+ call ClearSprites
+ call ClearTileMap
+ call BillsPC_InitGFX
+ ld hl, wBillsPCPokemonList
+ ld bc, $338
+ xor a
+ call ByteFill
+ xor a
+ ld [wJumptableIndex], a
+ ld [wcf64], a
+ ld [wcf65], a
+ ld [wcf66], a
+ ld [wBillsPC_CursorPosition], a
+ ld [wBillsPC_ScrollPosition], a
+ ret
+
+BillsPC_IncrementJumptableIndex: ; e298d (38:698d)
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+BillsPC_EndJumptableLoop: ; e2992 (38:6992)
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+_StatsScreenDPad: ; e2998 (38:6998)
+ ld a, [wBillsPC_NumMonsOnScreen]
+ ld d, a
+ ld a, [wBillsPC_NumMonsInBox]
+ and a
+ jr z, .empty
+ dec a
+ cp $1
+ jr z, .empty
+ ld e, a
+ ld a, [hl]
+ and D_UP
+ jr nz, BillsPC_PressUp
+ ld a, [hl]
+ and D_DOWN
+ jr nz, BillsPC_PressDown
+.empty
+ jp BillsPC_JoypadDidNothing
+
+Withdraw_UpDown: ; e29b5 (38:69b5)
+ ld hl, hJoyLast
+ ld a, [wBillsPC_NumMonsOnScreen]
+ ld d, a
+ ld a, [wBillsPC_NumMonsInBox]
+ ld e, a
+ and a
+ jr z, .empty
+ ld a, [hl]
+ and D_UP
+ jr nz, BillsPC_PressUp
+ ld a, [hl]
+ and D_DOWN
+ jr nz, BillsPC_PressDown
+.empty
+ jp BillsPC_JoypadDidNothing
+; e29d0 (38:69d0)
+
+MoveMonWithoutMail_DPad: ; e29d0
+ ld hl, hJoyLast
+ ld a, [wBillsPC_NumMonsOnScreen]
+ ld d, a
+ ld a, [wBillsPC_NumMonsInBox]
+ ld e, a
+ and a
+ jr z, .check_left_right
+ ld a, [hl]
+ and D_UP
+ jr nz, BillsPC_PressUp
+ ld a, [hl]
+ and D_DOWN
+ jr nz, BillsPC_PressDown
+
+.check_left_right
+ ld a, [hl]
+ and D_LEFT
+ jr nz, BillsPC_PressLeft
+ ld a, [hl]
+ and D_RIGHT
+ jr nz, BillsPC_PressRight
+ jr BillsPC_JoypadDidNothing
+
+MoveMonWithoutMail_DPad_2: ; e29f4
+ ld hl, hJoyLast
+ ld a, [wBillsPC_NumMonsOnScreen]
+ ld d, a
+ ld a, [wBillsPC_NumMonsInBox]
+ ld e, a
+ and a
+ jr z, .check_left_right
+
+ ld a, [hl]
+ and D_UP
+ jr nz, BillsPC_PressUp
+ ld a, [hl]
+ and D_DOWN
+ jr nz, BillsPC_PressDown
+
+.check_left_right
+ ld a, [hl]
+ and D_LEFT
+ jr nz, BillsPC_PressLeft
+ ld a, [hl]
+ and D_RIGHT
+ jr nz, BillsPC_PressRight
+ jr BillsPC_JoypadDidNothing
+
+BillsPC_PressUp: ; e2a18 (38:6a18)
+ ld hl, wBillsPC_CursorPosition
+ ld a, [hl]
+ and a
+ jr z, .top
+ dec [hl]
+ jr BillsPC_UpDownDidSomething
+
+.top
+ ld hl, wBillsPC_ScrollPosition
+ ld a, [hl]
+ and a
+ jr z, BillsPC_JoypadDidNothing
+ dec [hl]
+ jr BillsPC_UpDownDidSomething
+
+BillsPC_PressDown: ; e2a2c (38:6a2c)
+ ld a, [wBillsPC_CursorPosition]
+ ld hl, wBillsPC_ScrollPosition
+ add [hl]
+ inc a
+ cp e
+ jr nc, BillsPC_JoypadDidNothing
+
+ ld hl, wBillsPC_CursorPosition
+ ld a, [hl]
+ inc a
+ cp d
+ jr nc, .not_bottom
+ inc [hl]
+ jr BillsPC_UpDownDidSomething
+
+.not_bottom
+ ld hl, wBillsPC_ScrollPosition
+ inc [hl]
+ jr BillsPC_UpDownDidSomething
+; e2a48 (38:6a48)
+
+BillsPC_PressLeft: ; e2a48
+ ld hl, wBillsPC_LoadedBox
+ ld a, [hl]
+ and a
+ jr z, .wrap_around
+ dec [hl]
+ jr BillsPC_LeftRightDidSomething
+
+.wrap_around
+ ld [hl], NUM_BOXES
+ jr BillsPC_LeftRightDidSomething
+
+BillsPC_PressRight: ; e2a56
+ ld hl, wBillsPC_LoadedBox
+ ld a, [hl]
+ cp NUM_BOXES
+ jr z, .wrap_around
+ inc [hl]
+ jr BillsPC_LeftRightDidSomething
+
+.wrap_around
+ ld [hl], 0
+ jr BillsPC_LeftRightDidSomething
+
+BillsPC_JoypadDidNothing: ; e2a65 (38:6a65)
+ xor a
+ and a
+ ret
+
+BillsPC_UpDownDidSomething: ; e2a68 (38:6a68)
+ ld a, TRUE
+ and a
+ ret
+; e2a6c (38:6a6c)
+
+BillsPC_LeftRightDidSomething: ; e2a6c
+ scf
+ ret
+; e2a6e
+
+BillsPC_PlaceString: ; e2a6e (38:6a6e)
+ push de
+ hlcoord 0, 15
+ lb bc, 1, 18
+ call TextBox
+ pop de
+ hlcoord 1, 16
+ call PlaceString
+ ret
+; e2a80 (38:6a80)
+
+BillsPC_MoveMonWOMail_BoxNameAndArrows: ; e2a80
+ call BillsPC_BoxName
+ hlcoord 8, 1
+ ld [hl], $5f
+ hlcoord 19, 1
+ ld [hl], $5e
+ ret
+; e2a8e
+
+BillsPC_BoxName: ; e2a8e (38:6a8e)
+ hlcoord 8, 0
+ lb bc, 1, 10
+ call TextBox
+
+ ld a, [wBillsPC_LoadedBox]
+ and a
+ jr z, .party
+
+ cp NUM_BOXES + 1
+ jr nz, .gotbox
+
+ ld a, [wCurBox]
+ inc a
+.gotbox
+ dec a
+ ld hl, wBoxNames
+ ld bc, BOX_NAME_LENGTH
+ call AddNTimes
+ ld e, l
+ ld d, h
+ jr .print
+
+.party
+ ld de, .PartyPKMN
+.print
+ hlcoord 10, 1
+ call PlaceString
+ ret
+; e2abd (38:6abd)
+
+.PartyPKMN:
+ db "PARTY <PK><MN>@"
+; e2ac6
+
+PCMonInfo: ; e2ac6 (38:6ac6)
+; Display a monster's pic and
+; attributes when highlighting
+; it in a PC menu.
+
+; Includes the neat cascading
+; effect when showing the pic.
+
+; Example: Species, level, gender,
+; whether it's holding an item.
+
+ hlcoord 0, 0
+ lb bc, 15, 8
+ call ClearBox
+
+ hlcoord 8, 14
+ lb bc, 1, 3
+ call ClearBox
+
+ call BillsPC_GetSelectedPokemonSpecies
+ and a
+ ret z
+ cp -1
+ ret z
+
+ ld [wd265], a
+ hlcoord 1, 4
+ xor a
+ ld b, 7
+.row
+ ld c, 7
+ push af
+ push hl
+.col
+ ld [hli], a
+ add 7
+ dec c
+ jr nz, .col
+ pop hl
+ ld de, SCREEN_WIDTH
+ add hl, de
+ pop af
+ inc a
+ dec b
+ jr nz, .row
+
+ call BillsPC_LoadMonStats
+ ld a, [wd265]
+ ld [wCurPartySpecies], a
+ ld [wCurSpecies], a
+ ld hl, wTempMonDVs
+ predef GetUnownLetter
+ call GetBaseData
+ ld de, vTiles2 tile $00
+ predef GetMonFrontpic
+ xor a
+ ld [wBillsPC_MonHasMail], a
+ ld a, [wCurPartySpecies]
+ ld [wd265], a
+ cp EGG
+ ret z
+
+ call GetBasePokemonName
+ hlcoord 1, 14
+ call PlaceString
+
+ hlcoord 1, 12
+ call PrintLevel
+
+ ld a, $3
+ ld [wMonType], a
+ farcall GetGender
+ jr c, .skip_gender
+ ld a, "♂"
+ jr nz, .printgender
+ ld a, "♀"
+.printgender
+ hlcoord 5, 12
+ ld [hl], a
+.skip_gender
+
+ ld a, [wTempMonItem]
+ and a
+ ret z
+
+ ld d, a
+ callfar ItemIsMail
+ jr c, .mail
+ ld a, $5d ; item icon
+ jr .printitem
+.mail
+ ld a, $1
+ ld [wBillsPC_MonHasMail], a
+ ld a, $5c ; mail icon
+.printitem
+ hlcoord 7, 12
+ ld [hl], a
+ ret
+
+BillsPC_LoadMonStats: ; e2b6d (38:6b6d)
+ ld a, [wBillsPC_CursorPosition]
+ ld hl, wBillsPC_ScrollPosition
+ add [hl]
+ ld e, a
+ ld d, $0
+ ld hl, wBillsPCPokemonList + 1 ; box number
+ add hl, de
+ add hl, de
+ add hl, de
+ ld a, [hl]
+ and a
+ jr z, .party
+ cp NUM_BOXES + 1
+ jr z, .sBox
+ ld b, a
+ call GetBoxPointer
+ ld a, b
+ call GetSRAMBank
+ push hl
+ ld bc, sBoxMon1Level - sBox
+ add hl, bc
+ ld bc, BOXMON_STRUCT_LENGTH
+ ld a, e
+ call AddNTimes
+ ld a, [hl]
+ ld [wTempMonLevel], a
+ pop hl
+ push hl
+ ld bc, sBoxMon1Item - sBox
+ add hl, bc
+ ld bc, BOXMON_STRUCT_LENGTH
+ ld a, e
+ call AddNTimes
+ ld a, [hl]
+ ld [wTempMonItem], a
+ pop hl
+ ld bc, sBoxMon1DVs - sBox
+ add hl, bc
+ ld bc, BOXMON_STRUCT_LENGTH
+ ld a, e
+ call AddNTimes
+ ld de, wTempMonDVs
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ call CloseSRAM
+ ret
+
+.party
+ ld hl, wPartyMon1Level
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld a, e
+ call AddNTimes
+ ld a, [hl]
+ ld [wTempMonLevel], a
+ ld hl, wPartyMon1Item
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld a, e
+ call AddNTimes
+ ld a, [hl]
+ ld [wTempMonItem], a
+ ld hl, wPartyMon1DVs
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld a, e
+ call AddNTimes
+ ld de, wTempMonDVs
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ ret
+
+.sBox
+ ld a, BANK(sBox)
+ call GetSRAMBank
+ ld hl, sBoxMon1Level
+ ld bc, BOXMON_STRUCT_LENGTH
+ ld a, e
+ call AddNTimes
+ ld a, [hl]
+ ld [wTempMonLevel], a
+
+ ld hl, sBoxMon1Item
+ ld bc, BOXMON_STRUCT_LENGTH
+ ld a, e
+ call AddNTimes
+ ld a, [hl]
+ ld [wTempMonItem], a
+
+ ld hl, sBoxMon1DVs
+ ld bc, BOXMON_STRUCT_LENGTH
+ ld a, e
+ call AddNTimes
+ ld de, wTempMonDVs
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+
+ call CloseSRAM
+ ret
+
+BillsPC_RefreshTextboxes: ; e2c2c (38:6c2c)
+ hlcoord 8, 2
+ lb bc, 10, 10
+ call TextBox
+
+ hlcoord 8, 2
+ ld [hl], "└"
+ hlcoord 19, 2
+ ld [hl], "┘"
+
+ ld a, [wBillsPC_ScrollPosition]
+ ld e, a
+ ld d, 0
+ ld hl, wBillsPCPokemonList
+ add hl, de
+ add hl, de
+ add hl, de
+ ld e, l
+ ld d, h
+ hlcoord 9, 4
+ ld a, [wBillsPC_NumMonsOnScreen]
+.loop
+ push af
+ push de
+ push hl
+ call .PlaceNickname
+ pop hl
+ ld de, 2 * SCREEN_WIDTH
+ add hl, de
+ pop de
+ inc de
+ inc de
+ inc de
+ pop af
+ dec a
+ jr nz, .loop
+ ret
+; e2c67 (38:6c67)
+
+.CancelString:
+ db "CANCEL@"
+; e2c6e
+
+.PlaceNickname: ; e2c6e (38:6c6e)
+ ld a, [de]
+ and a
+ ret z
+ cp -1
+ jr nz, .get_nickname
+ ld de, .CancelString
+ call PlaceString
+ ret
+
+.get_nickname
+ inc de
+ ld a, [de]
+ ld b, a
+ inc de
+ ld a, [de]
+ ld e, a
+ ld a, b
+ and a
+ jr z, .party
+ cp NUM_BOXES + 1
+ jr z, .sBox
+ push hl
+ call GetBoxPointer
+ ld a, b
+ call GetSRAMBank
+ push hl
+ ld bc, sBoxMons - sBox
+ add hl, bc
+ ld bc, BOXMON_STRUCT_LENGTH
+ ld a, e
+ call AddNTimes
+ ld a, [hl]
+ pop hl
+ and a
+ jr z, .boxfail
+ ld bc, sBoxMonNicknames - sBox
+ add hl, bc
+ ld bc, MON_NAME_LENGTH
+ ld a, e
+ call AddNTimes
+ ld de, wStringBuffer1
+ ld bc, MON_NAME_LENGTH
+ call CopyBytes
+ call CloseSRAM
+ pop hl
+ ld de, wStringBuffer1
+ call PlaceString
+ ret
+
+.boxfail
+ call CloseSRAM
+ pop hl
+ jr .placeholder_string
+
+.party
+ push hl
+ ld hl, wPartySpecies
+ ld d, $0
+ add hl, de
+ ld a, [hl]
+ and a
+ jr z, .partyfail
+ ld hl, wPartyMonNicknames
+ ld bc, MON_NAME_LENGTH
+ ld a, e
+ call AddNTimes
+ ld de, wStringBuffer1
+ ld bc, MON_NAME_LENGTH
+ call CopyBytes
+ pop hl
+ ld de, wStringBuffer1
+ call PlaceString
+ ret
+
+.partyfail
+ pop hl
+ jr .placeholder_string
+
+.sBox
+ push hl
+ ld a, BANK(sBox)
+ call GetSRAMBank
+ ld hl, sBoxSpecies
+ ld d, $0
+ add hl, de
+ ld a, [hl]
+ and a
+ jr z, .sBoxFail
+ ld hl, sBoxMonNicknames
+ ld bc, MON_NAME_LENGTH
+ ld a, e
+ call AddNTimes
+ ld de, wStringBuffer1
+ ld bc, MON_NAME_LENGTH
+ call CopyBytes
+ call CloseSRAM
+ pop hl
+ ld de, wStringBuffer1
+ call PlaceString
+ ret
+
+.sBoxFail
+ call CloseSRAM
+ pop hl
+.placeholder_string
+ ld de, .Placeholder
+ call PlaceString
+ ret
+; e2d2a (38:6d2a)
+
+.Placeholder:
+ db "-----@"
+; e2d30
+
+copy_box_data: MACRO
+.loop\@
+ ld a, [hl]
+ cp -1
+ jr z, .done\@
+ and a
+ jr z, .done\@
+ ld [de], a
+ inc de
+ ld a, [wBillsPC_LoadedBox]
+ ld [de], a
+ inc de
+ ld a, [wd003]
+ ld [de], a
+ inc a
+ ld [wd003], a
+ inc de
+ inc hl
+ ld a, [wd004]
+ inc a
+ ld [wd004], a
+ jr .loop\@
+
+.done\@
+if \1
+ call CloseSRAM
+endc
+ ld a, -1
+ ld [de], a
+ ld a, [wd004]
+ inc a
+ ld [wBillsPC_NumMonsInBox], a
+ENDM
+
+CopyBoxmonSpecies: ; e2d30 (38:6d30)
+ xor a
+ ld hl, wBillsPCPokemonList
+ ld bc, 3 * 30
+ call ByteFill
+ ld de, wBillsPCPokemonList
+ xor a
+ ld [wd003], a
+ ld [wd004], a
+ ld a, [wBillsPC_LoadedBox]
+ and a
+ jr z, .party
+ cp NUM_BOXES + 1
+ jr z, .sBox
+ ld b, a
+ call GetBoxPointer
+ ld a, b
+ call GetSRAMBank
+ inc hl
+ copy_box_data 1
+ ret
+
+.party
+ ld hl, wPartySpecies
+ copy_box_data 0
+ ret
+
+.sBox
+ ld a, BANK(sBox)
+ call GetSRAMBank
+ ld hl, sBoxSpecies
+ copy_box_data 1
+ ret
+
+BillsPC_GetSelectedPokemonSpecies: ; e2def (38:6def)
+ ld a, [wBillsPC_CursorPosition]
+ ld hl, wBillsPC_ScrollPosition
+ add [hl]
+ ld e, a
+ ld d, $0
+ ld hl, wBillsPCPokemonList
+ add hl, de
+ add hl, de
+ add hl, de
+ ld a, [hl]
+ ret
+
+BillsPC_UpdateSelectionCursor: ; e2e01 (38:6e01)
+ ld a, [wBillsPC_NumMonsInBox]
+ and a
+ jr nz, .place_cursor
+ call ClearSprites
+ ret
+
+.place_cursor
+ ld hl, .OAM
+ ld de, wVirtualOAMSprite00
+.loop
+ ld a, [hl]
+ cp -1
+ ret z
+ ld a, [wBillsPC_CursorPosition]
+ and $7
+ swap a
+ add [hl]
+ inc hl
+ ld [de], a ; y
+ inc de
+rept SPRITEOAMSTRUCT_LENGTH + -1
+ ld a, [hli]
+ ld [de], a
+ inc de
+endr
+ jr .loop
+; e2e2b (38:6e2b)
+
+.OAM: ; e2e2b
+ dsprite 4, 6, 10, 0, $00, 0
+ dsprite 4, 6, 11, 0, $00, 0
+ dsprite 4, 6, 12, 0, $00, 0
+ dsprite 4, 6, 13, 0, $00, 0
+ dsprite 4, 6, 14, 0, $00, 0
+ dsprite 4, 6, 15, 0, $00, 0
+ dsprite 4, 6, 16, 0, $00, 0
+ dsprite 4, 6, 17, 0, $00, 0
+ dsprite 4, 6, 18, 0, $00, 0
+ dsprite 4, 6, 18, 7, $00, 0
+ dsprite 7, 1, 10, 0, $00, 0 | Y_FLIP
+ dsprite 7, 1, 11, 0, $00, 0 | Y_FLIP
+ dsprite 7, 1, 12, 0, $00, 0 | Y_FLIP
+ dsprite 7, 1, 13, 0, $00, 0 | Y_FLIP
+ dsprite 7, 1, 14, 0, $00, 0 | Y_FLIP
+ dsprite 7, 1, 15, 0, $00, 0 | Y_FLIP
+ dsprite 7, 1, 16, 0, $00, 0 | Y_FLIP
+ dsprite 7, 1, 17, 0, $00, 0 | Y_FLIP
+ dsprite 7, 1, 18, 0, $00, 0 | Y_FLIP
+ dsprite 7, 1, 18, 7, $00, 0 | Y_FLIP
+ dsprite 5, 6, 9, 6, $01, 0
+ dsprite 6, 1, 9, 6, $01, 0 | Y_FLIP
+ dsprite 5, 6, 19, 1, $01, 0 | X_FLIP
+ dsprite 6, 1, 19, 1, $01, 0 | X_FLIP | Y_FLIP
+ db -1
+; e2e8c
+
+BillsPC_UpdateInsertCursor: ; e2e8c
+ ld hl, .OAM
+ ld de, wVirtualOAMSprite00
+.loop
+ ld a, [hl]
+ cp -1
+ ret z
+ ld a, [wBillsPC_CursorPosition]
+ and $7
+ swap a
+ add [hl]
+ inc hl
+ ld [de], a ; y
+ inc de
+rept SPRITEOAMSTRUCT_LENGTH + -1
+ ld a, [hli]
+ ld [de], a
+ inc de
+endr
+ jr .loop
+; e2eac
+
+.OAM: ; e2eac
+ dsprite 4, 7, 10, 0, $06, 0
+ dsprite 5, 3, 11, 0, $00, 0 | Y_FLIP
+ dsprite 5, 3, 12, 0, $00, 0 | Y_FLIP
+ dsprite 5, 3, 13, 0, $00, 0 | Y_FLIP
+ dsprite 5, 3, 14, 0, $00, 0 | Y_FLIP
+ dsprite 5, 3, 15, 0, $00, 0 | Y_FLIP
+ dsprite 5, 3, 16, 0, $00, 0 | Y_FLIP
+ dsprite 5, 3, 17, 0, $00, 0 | Y_FLIP
+ dsprite 5, 3, 18, 0, $00, 0 | Y_FLIP
+ dsprite 4, 7, 19, 0, $07, 0
+ db -1
+; e2ed5
+
+Unreferenced_BillsPC_FillBox: ; e2ed5
+.row
+ push bc
+ push hl
+.col
+ ld [hli], a
+ dec c
+ jr nz, .col
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .row
+ ret
+; e2ee5
+
+BillsPC_CheckSpaceInDestination: ; e2ee5
+; If moving within a box, no need to be here.
+ ld hl, wBillsPC_LoadedBox
+ ld a, [wBillsPC_BackupLoadedBox]
+ cp [hl]
+ jr z, .same_box
+
+; Exceeding box or party capacity is a big no-no.
+ ld a, [wBillsPC_LoadedBox]
+ and a
+ jr z, .party
+ ld e, MONS_PER_BOX + 1
+ jr .compare
+
+.party
+ ld e, PARTY_LENGTH + 1
+.compare
+ ld a, [wBillsPC_NumMonsInBox]
+ cp e
+ jr nc, .no_room
+.same_box
+ and a
+ ret
+
+.no_room
+ ld de, PCString_TheresNoRoom
+ call BillsPC_PlaceString
+ ld de, SFX_WRONG
+ call WaitPlaySFX
+ call WaitSFX
+ ld c, 50
+ call DelayFrames
+ scf
+ ret
+; e2f18
+
+BillsPC_CheckMail_PreventBlackout: ; e2f18 (38:6f18)
+ ld a, [wBillsPC_LoadedBox]
+ and a
+ jr nz, .Okay
+ ld a, [wBillsPC_NumMonsInBox]
+ cp $3
+ jr c, .ItsYourLastPokemon
+ ld a, [wBillsPC_CursorPosition]
+ ld hl, wBillsPC_ScrollPosition
+ add [hl]
+ ld [wCurPartyMon], a
+ farcall CheckCurPartyMonFainted
+ jr c, .AllOthersFainted
+ ld a, [wBillsPC_MonHasMail]
+ and a
+ jr nz, .HasMail
+.Okay:
+ and a
+ ret
+
+.HasMail:
+ ld de, PCString_RemoveMail
+ jr .NotOkay
+
+.AllOthersFainted:
+ ld de, PCString_NoMoreUsablePKMN
+ jr .NotOkay
+
+.ItsYourLastPokemon:
+ ld de, PCString_ItsYourLastPKMN
+.NotOkay:
+ call BillsPC_PlaceString
+ ld de, SFX_WRONG
+ call WaitPlaySFX
+ call WaitSFX
+ ld c, 50
+ call DelayFrames
+ scf
+ ret
+
+BillsPC_IsMonAnEgg: ; e2f5f (38:6f5f)
+ ld a, [wCurPartySpecies]
+ cp EGG
+ jr z, .egg
+ and a
+ ret
+
+.egg
+ ld de, PCString_NoReleasingEGGS
+ call BillsPC_PlaceString
+ ld de, SFX_WRONG
+ call WaitPlaySFX
+ call WaitSFX
+ ld c, 50
+ call DelayFrames
+ scf
+ ret
+
+BillsPC_StatsScreen: ; e2f7e (38:6f7e)
+ call LowVolume
+ call BillsPC_CopyMon
+ ld a, $3
+ ld [wMonType], a
+ predef StatsScreenInit
+ call BillsPC_InitGFX
+ call MaxVolume
+ ret
+
+StatsScreenDPad: ; e2f95 (38:6f95)
+ ld hl, hJoyPressed ; $ffa7
+ ld a, [hl]
+ and A_BUTTON | B_BUTTON | D_RIGHT | D_LEFT
+ ld [wMenuJoypad], a
+ jr nz, .pressed_a_b_right_left
+ ld a, [hl]
+ and D_DOWN | D_UP
+ ld [wMenuJoypad], a
+ jr nz, .pressed_down_up
+ jr .pressed_a_b_right_left
+
+.pressed_down_up
+ call _StatsScreenDPad
+ and a
+ jr z, .did_nothing
+ call BillsPC_GetSelectedPokemonSpecies
+ ld [wd265], a
+ call BillsPC_LoadMonStats
+ ld a, [wd265]
+ ld [wCurPartySpecies], a
+ ld [wCurSpecies], a
+ ld hl, wTempMonDVs
+ predef GetUnownLetter
+ call GetBaseData
+ call BillsPC_CopyMon
+.pressed_a_b_right_left
+ ret
+
+.did_nothing
+ xor a
+ ld [wMenuJoypad], a
+ ret
+
+BillsPC_CopyMon: ; e2fd6 (38:6fd6)
+ ld a, [wBillsPC_CursorPosition]
+ ld hl, wBillsPC_ScrollPosition
+ add [hl]
+ ld [wCurPartyMon], a
+ ld a, [wBillsPC_LoadedBox]
+ and a
+ jr z, .party
+ cp NUM_BOXES + 1
+ jr nz, .box
+ ld a, BANK(sBox)
+ call GetSRAMBank
+ ld hl, sBoxSpecies
+ call CopySpeciesToTemp
+ ld hl, sBoxMonNicknames
+ call CopyNicknameToTemp
+ ld hl, sBoxMonOT
+ call CopyOTNameToTemp
+ ld hl, sBoxMons
+ ld bc, BOXMON_STRUCT_LENGTH
+ ld a, [wCurPartyMon]
+ call AddNTimes
+ ld de, wBufferMon
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call CopyBytes
+ call CloseSRAM
+ farcall CalcBufferMonStats
+ ret
+
+.party
+ ld hl, wPartySpecies
+ call CopySpeciesToTemp
+ ld hl, wPartyMonNicknames
+ call CopyNicknameToTemp
+ ld hl, wPartyMonOT
+ call CopyOTNameToTemp
+ ld hl, wPartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld a, [wCurPartyMon]
+ call AddNTimes
+ ld de, wBufferMon
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call CopyBytes
+ ret
+
+.box
+ ld b, a
+ call GetBoxPointer
+ ld a, b
+ call GetSRAMBank
+ push hl
+ inc hl
+ call CopySpeciesToTemp
+ pop hl
+ push hl
+ ld bc, sBoxMonNicknames - sBox
+ add hl, bc
+ call CopyNicknameToTemp
+ pop hl
+ push hl
+ ld bc, sBoxMonOT - sBox
+ add hl, bc
+ call CopyOTNameToTemp
+ pop hl
+ ld bc, sBoxMons - sBox
+ add hl, bc
+ ld bc, BOXMON_STRUCT_LENGTH
+ call CopyMonToTemp
+ call CloseSRAM
+ farcall CalcBufferMonStats
+ ret
+
+DepositPokemon: ; e307c (38:707c)
+ ld a, [wBillsPC_CursorPosition]
+ ld hl, wBillsPC_ScrollPosition
+ add [hl]
+ ld [wCurPartyMon], a
+ ld hl, wPartyMonNicknames
+ ld a, [wCurPartyMon]
+ call GetNick
+ ld a, PC_DEPOSIT
+ ld [wPokemonWithdrawDepositParameter], a
+ predef SendGetMonIntoFromBox
+ jr c, .asm_boxisfull
+ xor a ; REMOVE_PARTY
+ ld [wPokemonWithdrawDepositParameter], a
+ farcall RemoveMonFromPartyOrBox
+ ld a, [wCurPartySpecies]
+ call PlayMonCry
+ hlcoord 0, 0
+ lb bc, 15, 8
+ call ClearBox
+ hlcoord 8, 14
+ lb bc, 1, 3
+ call ClearBox
+ hlcoord 0, 15
+ lb bc, 1, 18
+ call TextBox
+ call WaitBGMap
+ hlcoord 1, 16
+ ld de, PCString_Stored
+ call PlaceString
+ ld l, c
+ ld h, b
+ ld de, wStringBuffer1
+ call PlaceString
+ ld a, "!"
+ ld [bc], a
+ ld c, 50
+ call DelayFrames
+ and a
+ ret
+
+.asm_boxisfull
+ ld de, PCString_BoxFull
+ call BillsPC_PlaceString
+ ld de, SFX_WRONG
+ call WaitPlaySFX
+ call WaitSFX
+ ld c, 50
+ call DelayFrames
+ scf
+ ret
+
+TryWithdrawPokemon: ; e30fa (38:70fa)
+ ld a, [wBillsPC_CursorPosition]
+ ld hl, wBillsPC_ScrollPosition
+ add [hl]
+ ld [wCurPartyMon], a
+ ld a, BANK(sBoxMonNicknames)
+ call GetSRAMBank
+ ld a, [wCurPartyMon]
+ ld hl, sBoxMonNicknames
+ call GetNick
+ call CloseSRAM
+ xor a
+ ld [wPokemonWithdrawDepositParameter], a
+ predef SendGetMonIntoFromBox
+ jr c, .PartyFull
+ ld a, REMOVE_BOX
+ ld [wPokemonWithdrawDepositParameter], a
+ farcall RemoveMonFromPartyOrBox
+ ld a, [wCurPartySpecies]
+ call PlayMonCry
+ hlcoord 0, 0
+ lb bc, 15, 8
+ call ClearBox
+ hlcoord 8, 14
+ lb bc, 1, 3
+ call ClearBox
+ hlcoord 0, 15
+ lb bc, 1, 18
+ call TextBox
+ call WaitBGMap
+ hlcoord 1, 16
+ ld de, PCString_Got
+ call PlaceString
+ ld l, c
+ ld h, b
+ ld de, wStringBuffer1
+ call PlaceString
+ ld a, $e7
+ ld [bc], a
+ ld c, 50
+ call DelayFrames
+ and a
+ ret
+
+.PartyFull:
+ ld de, PCString_PartyFull
+ call BillsPC_PlaceString
+ ld de, SFX_WRONG
+ call WaitPlaySFX
+ call WaitSFX
+ ld c, 50
+ call DelayFrames
+ scf
+ ret
+
+
+ReleasePKMN_ByePKMN: ; e3180 (38:7180)
+ hlcoord 0, 0
+ lb bc, 15, 8
+ call ClearBox
+ hlcoord 8, 14
+ lb bc, 1, 3
+ call ClearBox
+ hlcoord 0, 15
+ lb bc, 1, 18
+ call TextBox
+
+ call WaitBGMap
+ ld a, [wCurPartySpecies]
+ call GetCryIndex
+ jr c, .skip_cry
+ ld e, c
+ ld d, b
+ call PlayCry
+.skip_cry
+
+ ld a, [wCurPartySpecies]
+ ld [wd265], a
+ call GetPokemonName
+ hlcoord 1, 16
+ ld de, PCString_ReleasedPKMN
+ call PlaceString
+ ld c, 80
+ call DelayFrames
+ hlcoord 0, 15
+ lb bc, 1, 18
+ call TextBox
+ hlcoord 1, 16
+ ld de, PCString_Bye
+ call PlaceString
+ ld l, c
+ ld h, b
+ inc hl
+ ld de, wStringBuffer1
+ call PlaceString
+ ld l, c
+ ld h, b
+ ld [hl], $e7
+ ld c, 50
+ call DelayFrames
+ ret
+; e31e7 (38:71e7)
+
+MovePKMNWitoutMail_InsertMon: ; e31e7
+ push hl
+ push de
+ push bc
+ push af
+ hlcoord 0, 15
+ lb bc, 1, 18
+ call TextBox
+ hlcoord 1, 16
+ ld de, .Saving_LeaveOn
+ call PlaceString
+ ld c, 20
+ call DelayFrames
+ pop af
+ pop bc
+ pop de
+ pop hl
+ ld a, [wCurBox]
+ push af
+ ld bc, 0
+ ld a, [wBillsPC_BackupLoadedBox]
+ and a
+ jr nz, .moving_from_box
+ set 0, c
+
+.moving_from_box
+ ld a, [wBillsPC_LoadedBox]
+ and a
+ jr nz, .moving_to_box
+ set 1, c
+
+.moving_to_box
+ ld hl, .Jumptable
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, .dw_return
+ push de
+ jp hl
+; e322a
+
+.dw_return ; e322a
+ pop af
+ ld e, a
+ farcall MoveMonWOMail_InsertMon_SaveGame
+ ret
+; e3233
+
+.Saving_LeaveOn:
+ db "Saving… Leave ON!@"
+; e3245
+
+.Jumptable: ; e3245
+ dw .BoxToBox
+ dw .PartyToBox
+ dw .BoxToParty
+ dw .PartyToParty
+; e324d
+
+.BoxToBox: ; e324d
+ ld hl, wBillsPC_BackupLoadedBox
+ ld a, [wBillsPC_LoadedBox]
+ cp [hl]
+ jr z, .same_box
+ call .CopyFromBox
+ call .CopyToBox
+ ret
+
+.same_box
+ call .CopyFromBox
+ call .CheckTrivialMove
+ call .CopyToBox
+ ret
+; e3267
+
+.PartyToBox: ; e3267
+ call .CopyFromParty
+ ld a, $1
+ ld [wGameLogicPaused], a
+ farcall SaveGameData
+ xor a
+ ld [wGameLogicPaused], a
+ call .CopyToBox
+ ret
+; e327d
+
+.BoxToParty: ; e327d
+ call .CopyFromBox
+ call .CopyToParty
+ ret
+; e3284
+
+.PartyToParty: ; e3284
+ call .CopyFromParty
+ call .CheckTrivialMove
+ call .CopyToParty
+ ret
+; e328e
+
+.CheckTrivialMove: ; e328e
+ ld a, [wBillsPC_CursorPosition]
+ ld hl, wBillsPC_ScrollPosition
+ add [hl]
+ ld e, a
+ ld a, [wBillsPC_BackupCursorPosition]
+ ld hl, wBillsPC_BackupScrollPosition
+ add [hl]
+ cp e
+ ret nc
+ ld hl, wBillsPC_CursorPosition
+ ld a, [hl]
+ and a
+ jr z, .top_of_screen
+ dec [hl]
+ ret
+
+.top_of_screen
+ ld hl, wBillsPC_ScrollPosition
+ ld a, [hl]
+ and a
+ ret z
+ dec [hl]
+ ret
+; e32b0
+
+.CopyFromBox: ; e32b0
+ ld a, [wBillsPC_BackupLoadedBox]
+ dec a
+ ld e, a
+ farcall MoveMonWOMail_SaveGame
+ ld a, [wBillsPC_BackupCursorPosition]
+ ld hl, wBillsPC_BackupScrollPosition
+ add [hl]
+ ld [wCurPartyMon], a
+ ld a, BANK(sBox)
+ call GetSRAMBank
+ ld hl, sBoxSpecies
+ call CopySpeciesToTemp
+ ld hl, sBoxMonNicknames
+ call CopyNicknameToTemp
+ ld hl, sBoxMonOT
+ call CopyOTNameToTemp
+ ld hl, sBoxMons
+ ld bc, BOXMON_STRUCT_LENGTH
+ call CopyMonToTemp
+ call CloseSRAM
+ farcall CalcBufferMonStats
+ ld a, REMOVE_BOX
+ ld [wPokemonWithdrawDepositParameter], a
+ farcall RemoveMonFromPartyOrBox
+ ret
+; e32fa
+
+.CopyToBox: ; e32fa
+ ld a, [wBillsPC_LoadedBox]
+ dec a
+ ld e, a
+ farcall MoveMonWOMail_SaveGame
+ ld a, [wBillsPC_CursorPosition]
+ ld hl, wBillsPC_ScrollPosition
+ add [hl]
+ ld [wCurPartyMon], a
+ farcall InsertPokemonIntoBox
+ ret
+; e3316
+
+.CopyFromParty: ; e3316
+ ld a, [wBillsPC_BackupCursorPosition]
+ ld hl, wBillsPC_BackupScrollPosition
+ add [hl]
+ ld [wCurPartyMon], a
+ ld hl, wPartySpecies
+ call CopySpeciesToTemp
+ ld hl, wPartyMonNicknames
+ call CopyNicknameToTemp
+ ld hl, wPartyMonOT
+ call CopyOTNameToTemp
+ ld hl, wPartyMon1Species
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call CopyMonToTemp
+ xor a ; REMOVE_PARTY
+ ld [wPokemonWithdrawDepositParameter], a
+ farcall RemoveMonFromPartyOrBox
+ ret
+; e3346
+
+.CopyToParty: ; e3346
+ ld a, [wBillsPC_CursorPosition]
+ ld hl, wBillsPC_ScrollPosition
+ add [hl]
+ ld [wCurPartyMon], a
+ farcall InsertPokemonIntoParty
+ ret
+; e3357
+
+CopySpeciesToTemp: ; e3357 (38:7357)
+ ld a, [wCurPartyMon]
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ ld [wCurPartySpecies], a
+ ret
+
+CopyNicknameToTemp: ; e3363 (38:7363)
+ ld bc, MON_NAME_LENGTH
+ ld a, [wCurPartyMon]
+ call AddNTimes
+ ld de, wBufferMonNick
+ ld bc, MON_NAME_LENGTH
+ call CopyBytes
+ ret
+
+CopyOTNameToTemp: ; e3376 (38:7376)
+ ld bc, NAME_LENGTH
+ ld a, [wCurPartyMon]
+ call AddNTimes
+ ld de, wBufferMonOT
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ret
+
+CopyMonToTemp: ; e3389 (38:7389)
+ ld a, [wCurPartyMon]
+ call AddNTimes
+ ld de, wBufferMon
+ call CopyBytes
+ ret
+
+GetBoxPointer: ; e3396 (38:7396)
+ dec b
+ ld c, b
+ ld b, 0
+ ld hl, .boxes
+ add hl, bc
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+; e33a6 (38:73a6)
+
+.boxes ; e33a6
+ ; bank, address
+ dba sBox1
+ dba sBox2
+ dba sBox3
+ dba sBox4
+ dba sBox5
+ dba sBox6
+ dba sBox7
+ dba sBox8
+ dba sBox9
+ dba sBox10
+ dba sBox11
+ dba sBox12
+ dba sBox13
+ dba sBox14
+; e33d0
+
+BillsPC_ApplyPalettes: ; e33d0 (38:73d0)
+ ld b, a
+ call GetSGBLayout
+ ld a, %11100100
+ call DmgToCgbBGPals
+ ld a, %11111100
+ call DmgToCgbObjPal0
+ ret
+
+BillsPC_Jumptable: ; e33df (38:73df)
+ ld e, a
+ ld d, $0
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+
+BillsPC_InitGFX: ; e33e8 (38:73e8)
+ call DisableLCD
+ ld hl, vTiles2 tile $00
+ ld bc, $31 tiles
+ xor a
+ call ByteFill
+ call LoadStandardFont
+ call LoadFontsBattleExtra
+ ld hl, PCMailGFX
+ ld de, vTiles2 tile $5c
+ ld bc, 4 tiles
+ call CopyBytes
+ ld hl, PCSelectLZ
+ ld de, vTiles0 tile $00
+ call Decompress
+ ld a, 6
+ call SkipMusic
+ call EnableLCD
+ ret
+; e3419 (38:7419)
+
+PCSelectLZ: INCBIN "gfx/pc/pc.2bpp.lz"
+PCMailGFX: INCBIN "gfx/pc/pc_mail.2bpp"
+; e34dd
+
+PCString_ChooseaPKMN: db "Choose a <PK><MN>.@"
+PCString_WhatsUp: db "What's up?@"
+PCString_ReleasePKMN: db "Release <PK><MN>?@"
+PCString_MoveToWhere: db "Move to where?@"
+PCString_ItsYourLastPKMN: db "It's your last <PK><MN>!@"
+PCString_TheresNoRoom: db "There's no room!@"
+PCString_NoMoreUsablePKMN: db "No more usable <PK><MN>!@"
+PCString_RemoveMail: db "Remove MAIL.@"
+PCString_ReleasedPKMN: db "Released <PK><MN>.@"
+PCString_Bye: db "Bye,@"
+PCString_Stored: db "Stored @"
+PCString_Got: db "Got @"
+PCString_Non: db "Non.@"
+PCString_BoxFull: db "The BOX is full.@"
+PCString_PartyFull: db "The party's full!@"
+PCString_NoReleasingEGGS: db "No releasing EGGS!@"
+; e35aa
+
+
+_ChangeBox: ; e35aa (38:75aa)
+ call LoadStandardMenuHeader
+ call BillsPC_ClearTilemap
+.loop
+ xor a
+ ld [hBGMapMode], a
+ call BillsPC_PrintBoxName
+ call BillsPC_PlaceChooseABoxString
+ ld hl, _ChangeBox_MenuHeader
+ call CopyMenuHeader
+ xor a
+ ld [wMenuScrollPosition], a
+ hlcoord 0, 4
+ lb bc, 8, 9
+ call TextBox
+ call ScrollingMenu
+ ld a, [wMenuJoypad]
+ cp B_BUTTON
+ jr z, .done
+ call BillsPC_PlaceWhatsUpString
+ call BillsPC_ChangeBoxSubmenu
+ jr .loop
+.done
+ call CloseWindow
+ ret
+
+BillsPC_ClearTilemap: ; e35e2 (38:75e2)
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ ld a, " "
+ call ByteFill
+ ret
+; e35f1 (38:75f1)
+
+_ChangeBox_MenuHeader: ; 0xe35f1
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 1, 5, 9, 12
+ dw .MenuData
+ db 1 ; default option
+; 0xe35f9
+
+.MenuData ; 0xe35f9
+ db MENU_UNUSED_1 | MENU_UNUSED_3 ; flags
+ db 4, 0
+ db 1
+ dba .boxes
+ dba .boxnames
+ dba NULL
+ dba BillsPC_PrintBoxCountAndCapacity
+; e3609
+
+.boxes ; e3609
+ db NUM_BOXES
+x = 1
+rept NUM_BOXES
+ db x
+x = x + 1
+endr
+ db -1
+; e3619
+
+.boxnames ; e3619
+ push de
+ ld a, [wMenuSelection]
+ dec a
+ call GetBoxName
+ pop hl
+ call PlaceString
+ ret
+; e3626
+
+GetBoxName: ; e3626 (38:7626)
+ ld bc, BOX_NAME_LENGTH
+ ld hl, wBoxNames
+ call AddNTimes
+ ld d, h
+ ld e, l
+ ret
+; e3632 (38:7632)
+
+BillsPC_PrintBoxCountAndCapacity: ; e3632
+ hlcoord 11, 7
+ lb bc, 5, 7
+ call TextBox
+ ld a, [wMenuSelection]
+ cp -1
+ ret z
+ hlcoord 12, 9
+ ld de, .Pokemon
+ call PlaceString
+ call GetBoxCount
+ ld [wd265], a
+ hlcoord 13, 11
+ ld de, wd265
+ lb bc, 1, 2
+ call PrintNum
+ ld de, .out_of_20
+ call PlaceString
+ ret
+; e3663
+
+.Pokemon: ; e3663
+ db "#MON@"
+; e3668
+
+.out_of_20 ; e3668
+ ; db "/20@"
+ db "/"
+ db "0" + MONS_PER_BOX / 10 ; "2"
+ db "0" + MONS_PER_BOX % 10 ; "0"
+ db "@"
+; e366c
+
+GetBoxCount: ; e366c (38:766c)
+ ld a, [wCurBox]
+ ld c, a
+ ld a, [wMenuSelection]
+ dec a
+ cp c
+ jr z, .activebox
+ ld c, a
+ ld b, 0
+ ld hl, .boxbanks
+ add hl, bc
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld b, a
+ call GetSRAMBank
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [hl]
+ call CloseSRAM
+ ld c, a
+ ld a, [wSavedAtLeastOnce]
+ and a
+ jr z, .newfile
+ ld a, c
+ ret
+
+.newfile
+ xor a
+ ret
+
+.activebox
+ ld a, BANK(sBoxCount)
+ ld b, a
+ call GetSRAMBank
+ ld hl, sBoxCount
+ ld a, [hl]
+ call CloseSRAM
+ ret
+; e36a5 (38:76a5)
+
+.boxbanks ; e36a5
+ dba sBox1
+ dba sBox2
+ dba sBox3
+ dba sBox4
+ dba sBox5
+ dba sBox6
+ dba sBox7
+ dba sBox8
+ dba sBox9
+ dba sBox10
+ dba sBox11
+ dba sBox12
+ dba sBox13
+ dba sBox14
+; e36cf
+
+BillsPC_PrintBoxName: ; e36cf (38:76cf)
+ hlcoord 0, 0
+ ld b, 2
+ ld c, 18
+ call TextBox
+ hlcoord 1, 2
+ ld de, .Current
+ call PlaceString
+ ld a, [wCurBox]
+ and $f
+ call GetBoxName
+ hlcoord 11, 2
+ call PlaceString
+ ret
+; e36f1 (38:76f1)
+
+.Current: ; e36f1
+ db "CURRENT@"
+; e36f9
+
+BillsPC_ChangeBoxSubmenu: ; e36f9 (38:76f9)
+ ld hl, .MenuHeader
+ call LoadMenuHeader
+ call VerticalMenu
+ call ExitMenu
+ ret c
+ ld a, [wMenuCursorY]
+ cp $1
+ jr z, .Switch
+ cp $2
+ jr z, .Name
+ cp $3
+ jr z, .Print
+ and a
+ ret
+
+.Print:
+ call GetBoxCount
+ and a
+ jr z, .EmptyBox
+ ld e, l
+ ld d, h
+ ld a, [wMenuSelection]
+ dec a
+ ld c, a
+ farcall PrintPCBox
+ call BillsPC_ClearTilemap
+ and a
+ ret
+
+.EmptyBox:
+ call BillsPC_PlaceEmptyBoxString_SFX
+ and a
+ ret
+
+.Switch:
+ ld a, [wMenuSelection]
+ dec a
+ ld e, a
+ ld a, [wCurBox]
+ cp e
+ ret z
+ farcall ChangeBoxSaveGame
+ ret
+
+.Name:
+ ld b, $4 ; box
+ ld de, wd002
+ farcall NamingScreen
+ call ClearTileMap
+ call LoadStandardFont
+ call LoadFontsBattleExtra
+ ld a, [wMenuSelection]
+ dec a
+ call GetBoxName
+ ld e, l
+ ld d, h
+ ld hl, wd002
+ ld c, BOX_NAME_LENGTH - 1
+ call InitString
+ ld a, [wMenuSelection]
+ dec a
+ call GetBoxName
+ ld de, wd002
+ call CopyName2
+ ret
+; e3778 (38:7778)
+
+ hlcoord 11, 7 ; unused
+
+.MenuHeader: ; 0xe377b
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 11, 4, SCREEN_WIDTH - 1, 13
+ dw .MenuData
+ db 1 ; default option
+; 0xe3783
+
+.MenuData: ; 0xe3783
+ db STATICMENU_CURSOR ; flags
+ db 4 ; items
+ db "SWITCH@"
+ db "NAME@"
+ db "PRINT@"
+ db "QUIT@"
+; 0xe379c
+
+BillsPC_PlaceChooseABoxString: ; e379c (38:779c)
+ ld de, .ChooseABox
+ jr BillsPC_PlaceChangeBoxString
+; e37a1 (38:77a1)
+
+.ChooseABox: ; e37a1
+ db "Choose a BOX.@"
+; e37af
+
+BillsPC_PlaceWhatsUpString: ; e37af (38:77af)
+ ld de, .WhatsUp
+ jr BillsPC_PlaceChangeBoxString
+; e37b4 (38:77b4)
+
+.WhatsUp: ; e37b4
+ db "What's up?@"
+; e37be
+
+BillsPC_PlaceEmptyBoxString_SFX: ; e37be (38:77be)
+ ld de, .NoMonString
+ call BillsPC_PlaceChangeBoxString
+ ld de, SFX_WRONG
+ call WaitPlaySFX
+ call WaitSFX
+ ld c, 50
+ call DelayFrames
+ ret
+; e37d3 (38:77d3)
+
+.NoMonString: ; e37d3
+ db "There's no #MON.@"
+; e37e3
+
+BillsPC_PlaceChangeBoxString: ; e37e3 (38:77e3)
+ push de
+ hlcoord 0, 14
+ lb bc, 2, 18
+ call TextBox
+ pop de
+ hlcoord 1, 16
+ call PlaceString
+ ld a, $1
+ ld [hBGMapMode], a
+ ret