ref: 9e368eee1f2f14e0d7e13f0d41dc89292051ec56
dir: /engine/trainer_card.asm/
; TrainerCard.Jumptable indexes const_def const TRAINERCARDSTATE_PAGE1_LOADGFX ; 0 const TRAINERCARDSTATE_PAGE1_JOYPAD ; 1 const TRAINERCARDSTATE_PAGE2_LOADGFX ; 2 const TRAINERCARDSTATE_PAGE2_JOYPAD ; 3 const TRAINERCARDSTATE_PAGE3_LOADGFX ; 4 const TRAINERCARDSTATE_PAGE3_JOYPAD ; 5 const TRAINERCARDSTATE_QUIT ; 6 TrainerCard: ; 25105 ld a, [VramState] push af xor a ld [VramState], a ld hl, Options ld a, [hl] push af set NO_TEXT_SCROLL, [hl] call .InitRAM .loop call UpdateTime call JoyTextDelay ld a, [wJumptableIndex] bit 7, a jr nz, .quit ld a, [hJoyLast] and B_BUTTON jr nz, .quit call .RunJumptable call DelayFrame jr .loop .quit pop af ld [Options], a pop af ld [VramState], a ret .InitRAM: ; 2513b (9:513b) call ClearBGPalettes call ClearSprites call ClearTileMap call DisableLCD farcall GetCardPic ld hl, CardRightCornerGFX ld de, vTiles2 tile $1c ld bc, 1 tiles ld a, BANK(CardRightCornerGFX) call FarCopyBytes ld hl, CardStatusGFX ld de, vTiles2 tile $29 ld bc, 86 tiles ld a, BANK(CardStatusGFX) call FarCopyBytes call TrainerCard_PrintTopHalfOfCard hlcoord 0, 8 ld d, 6 call TrainerCard_InitBorder call EnableLCD call WaitBGMap ld b, SCGB_TRAINER_CARD call GetSGBLayout call SetPalettes call WaitBGMap ld hl, wJumptableIndex xor a ; TRAINERCARDSTATE_PAGE1_LOADGFX ld [hli], a ; wJumptableIndex ld [hli], a ; wTrainerCardBadgeFrameCounter ld [hli], a ; wTrainerCardBadgeTileID ld [hl], a ; wTrainerCardBadgeAttributes ret .RunJumptable: ; 2518e (9:518e) jumptable .Jumptable, wJumptableIndex .Jumptable: ; 2519d (9:519d) ; entries correspond to TRAINERCARDSTATE_* constants dw TrainerCard_Page1_LoadGFX dw TrainerCard_Page1_Joypad dw TrainerCard_Page2_LoadGFX dw TrainerCard_Page2_Joypad dw TrainerCard_Page3_LoadGFX dw TrainerCard_Page3_Joypad dw TrainerCard_Quit TrainerCard_IncrementJumptable: ; 251ab (9:51ab) ld hl, wJumptableIndex inc [hl] ret TrainerCard_Quit: ; 251b0 (9:51b0) ld hl, wJumptableIndex set 7, [hl] ret TrainerCard_Page1_LoadGFX: ; 251b6 (9:51b6) call ClearSprites hlcoord 0, 8 ld d, 6 call TrainerCard_InitBorder call WaitBGMap ld de, CardStatusGFX ld hl, vTiles2 tile $29 lb bc, BANK(CardStatusGFX), 86 call Request2bpp call TrainerCard_Page1_PrintDexCaught_GameTime call TrainerCard_IncrementJumptable ret TrainerCard_Page1_Joypad: ; 251d7 (9:51d7) call TrainerCard_Page1_PrintGameTime ld hl, hJoyLast ld a, [hl] and D_RIGHT | A_BUTTON jr nz, .pressed_right_a ret .pressed_right_a ld a, TRAINERCARDSTATE_PAGE2_LOADGFX ld [wJumptableIndex], a ret .Unreferenced_KantoCheck: ld a, [wKantoBadges] and a ret z ld a, TRAINERCARDSTATE_PAGE3_LOADGFX ld [wJumptableIndex], a ret ; 251f4 TrainerCard_Page2_LoadGFX: ; 251f4 (9:51f4) call ClearSprites hlcoord 0, 8 ld d, 6 call TrainerCard_InitBorder call WaitBGMap ld de, LeaderGFX ld hl, vTiles2 tile $29 lb bc, BANK(LeaderGFX), 86 call Request2bpp ld de, BadgeGFX ld hl, vTiles0 tile $00 lb bc, BANK(BadgeGFX), 44 call Request2bpp call TrainerCard_Page2_3_InitObjectsAndStrings call TrainerCard_IncrementJumptable ret TrainerCard_Page2_Joypad: ; 25221 (9:5221) ld hl, TrainerCard_JohtoBadgesOAM call TrainerCard_Page2_3_AnimateBadges ld hl, hJoyLast ld a, [hl] and A_BUTTON jr nz, .Quit ld a, [hl] and D_LEFT jr nz, .d_left ret .d_left ld a, TRAINERCARDSTATE_PAGE1_LOADGFX ld [wJumptableIndex], a ret .Unreferenced_KantoCheck: ld a, [wKantoBadges] and a ret z ld a, TRAINERCARDSTATE_PAGE3_LOADGFX ld [wJumptableIndex], a ret .Quit: ld a, TRAINERCARDSTATE_QUIT ld [wJumptableIndex], a ret TrainerCard_Page3_LoadGFX: ; 2524c (9:524c) call ClearSprites hlcoord 0, 8 ld d, 6 call TrainerCard_InitBorder call WaitBGMap ld de, LeaderGFX2 ld hl, vTiles2 tile $29 lb bc, BANK(LeaderGFX2), 86 call Request2bpp ld de, BadgeGFX2 ld hl, vTiles0 tile $00 lb bc, BANK(BadgeGFX2), 44 call Request2bpp call TrainerCard_Page2_3_InitObjectsAndStrings call TrainerCard_IncrementJumptable ret TrainerCard_Page3_Joypad: ; 25279 (9:5279) ld hl, TrainerCard_JohtoBadgesOAM call TrainerCard_Page2_3_AnimateBadges ld hl, hJoyLast ld a, [hl] and D_LEFT jr nz, .left ld a, [hl] and D_RIGHT jr nz, .right ret .left ld a, TRAINERCARDSTATE_PAGE2_LOADGFX ld [wJumptableIndex], a ret .right ld a, TRAINERCARDSTATE_PAGE1_LOADGFX ld [wJumptableIndex], a ret TrainerCard_PrintTopHalfOfCard: ; 25299 (9:5299) hlcoord 0, 0 ld d, 5 call TrainerCard_InitBorder hlcoord 2, 2 ld de, .Name_Money call PlaceString hlcoord 2, 4 ld de, .ID_No call TrainerCardSetup_PlaceTilemapString hlcoord 7, 2 ld de, PlayerName call PlaceString hlcoord 5, 4 ld de, PlayerID lb bc, PRINTNUM_LEADINGZEROS | 2, 5 call PrintNum hlcoord 7, 6 ld de, Money lb bc, PRINTNUM_MONEY | 3, 6 call PrintNum hlcoord 1, 3 ld de, .HorizontalDivider call TrainerCardSetup_PlaceTilemapString hlcoord 14, 1 lb bc, 5, 7 xor a ld [hGraphicStartTile], a predef PlaceGraphic ret ; 252ec (9:52ec) .Name_Money: ; 252ec db "NAME/" next "" next "MONEY@" .ID_No: ; 252f9 db $27, $28, -1 ; ID NO .HorizontalDivider: ; 252fc db $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $26, -1 ; ____________> ; 2530a TrainerCard_Page1_PrintDexCaught_GameTime: ; 2530a (9:530a) hlcoord 2, 10 ld de, .Dex_PlayTime call PlaceString hlcoord 10, 15 ld de, .Badges call PlaceString ld hl, PokedexCaught ld b, EndPokedexCaught - PokedexCaught call CountSetBits ld de, wd265 hlcoord 15, 10 lb bc, 1, 3 call PrintNum call TrainerCard_Page1_PrintGameTime hlcoord 2, 8 ld de, .StatusTilemap call TrainerCardSetup_PlaceTilemapString ld a, [wStatusFlags] bit STATUSFLAGS_POKEDEX_F, a ret nz hlcoord 1, 9 lb bc, 2, 17 call ClearBox ret .Dex_PlayTime: db "#DEX" next "PLAY TIME@@" .Badges: db " BADGES▶@" .StatusTilemap: ; 25366 db $29, $2a, $2b, $2c, $2d, -1 ; 2536c TrainerCard_Page2_3_InitObjectsAndStrings: ; 2536c (9:536c) hlcoord 2, 8 ld de, .BadgesTilemap call TrainerCardSetup_PlaceTilemapString hlcoord 2, 10 ld a, $29 ld c, 4 .loop call TrainerCard_Page2_3_PlaceLeadersFaces rept 4 inc hl endr dec c jr nz, .loop hlcoord 2, 13 ld a, $51 ld c, 4 .loop2 call TrainerCard_Page2_3_PlaceLeadersFaces rept 4 inc hl endr dec c jr nz, .loop2 xor a ld [wTrainerCardBadgeFrameCounter], a ld hl, TrainerCard_JohtoBadgesOAM call TrainerCard_Page2_3_OAMUpdate ret ; 253a2 (9:53a2) .BadgesTilemap: ; 253a2 db $79, $7a, $7b, $7c, $7d, -1 ; "BADGES" ; 253a8 TrainerCardSetup_PlaceTilemapString: ; 253a8 (9:53a8) .loop ld a, [de] cp -1 ret z ld [hli], a inc de jr .loop TrainerCard_InitBorder: ; 253b0 (9:53b0) ld e, SCREEN_WIDTH .loop1 ld a, $23 ld [hli], a dec e jr nz, .loop1 ld a, $23 ld [hli], a ld e, SCREEN_HEIGHT - 1 ld a, " " .loop2 ld [hli], a dec e jr nz, .loop2 ld a, $1c ld [hli], a ld a, $23 ld [hli], a .loop3 ld a, $23 ld [hli], a ld e, SCREEN_HEIGHT ld a, " " .loop4 ld [hli], a dec e jr nz, .loop4 ld a, $23 ld [hli], a dec d jr nz, .loop3 ld a, $23 ld [hli], a ld a, $24 ld [hli], a ld e, SCREEN_HEIGHT - 1 ld a, " " .loop5 ld [hli], a dec e jr nz, .loop5 ld a, $23 ld [hli], a ld e, SCREEN_WIDTH .loop6 ld a, $23 ld [hli], a dec e jr nz, .loop6 ret TrainerCard_Page2_3_PlaceLeadersFaces: ; 253f4 (9:53f4) push de push hl ld [hli], a inc a ld [hli], a inc a ld [hli], a inc a ld [hli], a inc a ld de, SCREEN_WIDTH - 3 add hl, de ld [hli], a inc a ld [hli], a inc a ld [hli], a inc a ld de, SCREEN_WIDTH - 3 add hl, de ld [hli], a inc a ld [hli], a inc a ld [hli], a inc a pop hl pop de ret TrainerCard_Page1_PrintGameTime: ; 25415 (9:5415) hlcoord 11, 12 ld de, GameTimeHours lb bc, 2, 4 call PrintNum inc hl ld de, GameTimeMinutes lb bc, PRINTNUM_LEADINGZEROS | 1, 2 call PrintNum ld a, [hVBlankCounter] and $1f ret nz hlcoord 15, 12 ld a, [hl] xor " " ^ $2e ; alternate between space and small colon ($2e) tiles ld [hl], a ret TrainerCard_Page2_3_AnimateBadges: ; 25438 (9:5438) ld a, [hVBlankCounter] and %111 ret nz ld a, [wTrainerCardBadgeFrameCounter] inc a and %111 ld [wTrainerCardBadgeFrameCounter], a jr TrainerCard_Page2_3_OAMUpdate TrainerCard_Page2_3_OAMUpdate: ; 25448 (9:5448) ; copy flag array pointer ld a, [hli] ld e, a ld a, [hli] ; get flag array ld d, a ld a, [de] ld c, a ld de, Sprite01 ld b, NUM_JOHTO_BADGES .loop srl c push bc jr nc, .skip_badge push hl ld a, [hli] ; y ld b, a ld a, [hli] ; x ld c, a ld a, [hli] ; pal ld [wTrainerCardBadgeAttributes], a ld a, [wTrainerCardBadgeFrameCounter] add l ld l, a ld a, 0 adc h ld h, a ld a, [hl] ld [wTrainerCardBadgeTileID], a call .PrepOAM pop hl .skip_badge ld bc, $b ; 3 + 2 * 4 add hl, bc pop bc dec b jr nz, .loop ret .PrepOAM: ; 2547b (9:547b) ld a, [wTrainerCardBadgeTileID] and 1 << 7 jr nz, .xflip ld hl, .facing1 jr .loop2 .xflip ld hl, .facing2 .loop2 ld a, [hli] cp -1 ret z add b ld [de], a ; y inc de ld a, [hli] add c ld [de], a ; x inc de ld a, [wTrainerCardBadgeTileID] and $ff ^ (1 << 7) add [hl] ld [de], a ; tile id inc hl inc de ld a, [wTrainerCardBadgeAttributes] add [hl] ld [de], a ; attributes inc hl inc de jr .loop2 ; 254a7 (9:54a7) .facing1 ; 254a7 dsprite 0, 0, 0, 0, $00, 0 dsprite 0, 0, 1, 0, $01, 0 dsprite 1, 0, 0, 0, $02, 0 dsprite 1, 0, 1, 0, $03, 0 db -1 .facing2 ; 254b8 dsprite 0, 0, 0, 0, $01, 0 | X_FLIP dsprite 0, 0, 1, 0, $00, 0 | X_FLIP dsprite 1, 0, 0, 0, $03, 0 | X_FLIP dsprite 1, 0, 1, 0, $02, 0 | X_FLIP db -1 TrainerCard_JohtoBadgesOAM: ; 254c9 ; Template OAM data for each badge on the trainer card. ; Format: ; y, x, palette ; cycle 1: face tile, in1 tile, in2 tile, in3 tile ; cycle 2: face tile, in1 tile, in2 tile, in3 tile dw wJohtoBadges ; Zephyrbadge db $68, $18, 0 db $00, $20, $24, $20 | (1 << 7) db $00, $20, $24, $20 | (1 << 7) ; Hivebadge db $68, $38, 0 db $04, $20, $24, $20 | (1 << 7) db $04, $20, $24, $20 | (1 << 7) ; Plainbadge db $68, $58, 0 db $08, $20, $24, $20 | (1 << 7) db $08, $20, $24, $20 | (1 << 7) ; Fogbadge db $68, $78, 0 db $0c, $20, $24, $20 | (1 << 7) db $0c, $20, $24, $20 | (1 << 7) ; Mineralbadge db $80, $38, 0 db $10, $20, $24, $20 | (1 << 7) db $10, $20, $24, $20 | (1 << 7) ; Stormbadge db $80, $18, 0 db $14, $20, $24, $20 | (1 << 7) db $14, $20, $24, $20 | (1 << 7) ; Glacierbadge db $80, $58, 0 db $18, $20, $24, $20 | (1 << 7) db $18, $20, $24, $20 | (1 << 7) ; Risingbadge ; X-flips on alternate cycles. db $80, $78, 0 db $1c, $20, $24, $20 | (1 << 7) db $1c | (1 << 7), $20, $24, $20 | (1 << 7) ; 25523 CardStatusGFX: INCBIN "gfx/trainer_card/card_status.2bpp" LeaderGFX: INCBIN "gfx/trainer_card/leaders.2bpp" LeaderGFX2: INCBIN "gfx/trainer_card/leaders.2bpp" BadgeGFX: INCBIN "gfx/trainer_card/badges.2bpp" BadgeGFX2: INCBIN "gfx/trainer_card/badges.2bpp" CardRightCornerGFX: INCBIN "gfx/trainer_card/card_right_corner.2bpp"