pokecrystal-board/engine/pokemon/bills_pc.asm
mid-kid d3cc861d33 Fix snake_case filenames
Renamed a bunch of files, most of them one-off functions, to better fit
the general snake_case naming scheme. Also renamed some awfully long filenames.
2018-04-04 22:26:07 +02:00

2619 lines
42 KiB
NASM

_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