mirror of
https://github.com/pret/pokepinball.git
synced 2026-03-21 17:55:03 -05:00
2416 lines
37 KiB
NASM
2416 lines
37 KiB
NASM
HandlePokedexScreen: ; 0x28000
|
|
ld a, [wScreenState]
|
|
rst JumpTable ; calls JumpToFuncInTable
|
|
PointerTable_28004: ; 0x28004
|
|
dw LoadPokedexScreen
|
|
dw MainPokedexScreen
|
|
dw MonInfoPokedexScreen
|
|
dw Func_282e9 ; not sure if this is used ever...
|
|
dw ExitPokedexScreen
|
|
|
|
LoadPokedexScreen: ; 0x2800e
|
|
ld a, $23
|
|
ldh [hLCDC], a
|
|
ld a, $e4
|
|
ld [wBGP], a
|
|
ld a, $93
|
|
ld [wOBP0], a
|
|
ld a, $e4
|
|
ld [wOBP1], a
|
|
xor a
|
|
ldh [hSCX], a
|
|
ld a, $8
|
|
ldh [hSCY], a
|
|
ld a, $7
|
|
ldh [hWX], a
|
|
ld a, $8c
|
|
ldh [hWY], a
|
|
ld a, $3b
|
|
ldh [hLYC], a
|
|
ldh [hLastLYC], a
|
|
ldh [hNextLYCSub], a
|
|
ldh [hLYCSub], a
|
|
ld hl, hSTAT
|
|
set 6, [hl]
|
|
ld hl, rIE
|
|
set 1, [hl]
|
|
ld a, $2
|
|
ldh [hStatIntrRoutine], a
|
|
ld hl, PointerTable_280a2
|
|
ldh a, [hGameBoyColorFlag]
|
|
call LoadVideoData
|
|
xor a
|
|
ld [wCurPokedexIndex], a
|
|
ld [wPokedexOffset], a
|
|
ld [wPokedexBlinkingCursorAndScrollBarCounter], a
|
|
ld [wd95c], a
|
|
ld [wPokedexStartButtonIsPressed], a
|
|
ld [wd961], a
|
|
ld [wd95e], a
|
|
ld a, $1
|
|
ld [wd862], a
|
|
call ClearSpriteBuffer
|
|
call DisplayPokedexScrollBarAndCursor
|
|
call DrawSummaryWindowMonName
|
|
call DrawSummaryWindowMonSpecies
|
|
call DrawSummaryWindowMonAttributes
|
|
call DrawPokedexMonNames
|
|
call Func_28a8a
|
|
call Func_28ad1
|
|
call DrawSummaryWindowMonImage
|
|
call CountNumSeenOwnedMons
|
|
call SetAllPalettesWhite
|
|
ld a, Bank(Music_Pokedex)
|
|
call SetSongBank
|
|
ld de, MUSIC_POKEDEX
|
|
call PlaySong
|
|
call EnableLCD
|
|
call FadeIn
|
|
ld hl, wScreenState
|
|
inc [hl]
|
|
ret
|
|
|
|
PointerTable_280a2: ; 0x280a2
|
|
dw Data_280a6
|
|
dw Data_280c4
|
|
|
|
Data_280a6: ; 0x280a6
|
|
dab PokedexInitialGfx
|
|
dw vTilesOB
|
|
dw $6000
|
|
dab PokedexTilemap2
|
|
dw $9800
|
|
dw $1000
|
|
dab PokedexTilemap
|
|
dw vBGWin
|
|
dw $800
|
|
dab PokedexTilemap
|
|
dw $9e00
|
|
dw $800
|
|
dw $FFFF ; terminators
|
|
|
|
Data_280c4: ; 0x280c4
|
|
dab PokedexInitialGfx
|
|
dw vTilesOB
|
|
dw $6000
|
|
dab PokedexTilemap2
|
|
dw $9800
|
|
dw $1000
|
|
dab PokedexBGAttributes2
|
|
dw $9800
|
|
dw $1002
|
|
dab PokedexTilemap
|
|
dw vBGWin
|
|
dw $800
|
|
dab PokedexTilemap
|
|
dw $9e00
|
|
dw $800
|
|
dab PokedexBGAttributes
|
|
dw vBGWin
|
|
dw $802
|
|
dab PokedexBGAttributes
|
|
dw $9e00
|
|
dw $802
|
|
dab PokedexPalettes
|
|
dw $0000
|
|
dw $101
|
|
dw $FFFF ; terminators
|
|
|
|
MainPokedexScreen: ; 0x280fe
|
|
call HandlePokedexDirectionalInput
|
|
ldh a, [hNewlyPressedButtons]
|
|
bit BIT_A_BUTTON, a
|
|
jr z, .checkIfBPressed
|
|
ld a, [wPokedexCursorWasMoved]
|
|
and a
|
|
jp nz, .done
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, wPokedexFlags
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
jp z, .done
|
|
push hl
|
|
ld a, [wCurPokedexIndex]
|
|
inc a
|
|
ld e, a
|
|
ld d, $0
|
|
call PlayCry
|
|
pop hl
|
|
bit BIT_POKEDEX_MON_CAUGHT, [hl]
|
|
jp z, .done
|
|
call LoadPokemonDescriptionIntoVRAM
|
|
call Func_2885c
|
|
call CleanSpriteBuffer
|
|
call ScrollPokemonDescriptionDown
|
|
call Func_2885c
|
|
ld hl, wScreenState
|
|
inc [hl]
|
|
ret
|
|
|
|
.checkIfBPressed
|
|
bit BIT_B_BUTTON, a
|
|
jr z, .checkIfGameboyColorAndIfStartIsPressed
|
|
call DisplayPokedexScrollBarAndCursor
|
|
ld a, $4
|
|
ld [wScreenState], a
|
|
ret
|
|
|
|
.checkIfGameboyColorAndIfStartIsPressed
|
|
ldh a, [hGameBoyColorFlag]
|
|
and a
|
|
jr z, .done
|
|
ldh a, [hJoypadState]
|
|
bit BIT_START, a
|
|
jr z, .asm_28168
|
|
ld a, [wPokedexStartButtonIsPressed]
|
|
and a
|
|
ld a, $ff
|
|
ld [wPokedexStartButtonIsPressed], a
|
|
call z, DrawSummaryWindowMonImage
|
|
jr .done
|
|
|
|
.asm_28168
|
|
ld a, [wPokedexStartButtonIsPressed]
|
|
and a
|
|
ld a, $0
|
|
ld [wPokedexStartButtonIsPressed], a
|
|
call nz, DrawSummaryWindowMonImage
|
|
.done
|
|
call DisplayPokedexScrollBarAndCursor
|
|
ret
|
|
|
|
MonInfoPokedexScreen: ; 0x28178
|
|
ld a, [wPokedexDescriptionPageFlag]
|
|
bit 0, a
|
|
jr z, .lastPokedexDescriptionPage
|
|
ldh a, [hNewlyPressedButtons]
|
|
bit BIT_A_BUTTON, a
|
|
jr z, .checkIfBPressed
|
|
call Func_28912
|
|
jr .displayMonImage
|
|
|
|
.checkIfBPressed
|
|
bit BIT_B_BUTTON, a
|
|
jr z, .displayMonImage
|
|
jr .exitMonInfoView
|
|
|
|
.lastPokedexDescriptionPage
|
|
ldh a, [hNewlyPressedButtons]
|
|
and A_BUTTON | B_BUTTON
|
|
jr z, .displayMonImage
|
|
.exitMonInfoView
|
|
call Func_288a2
|
|
call DisplayPokedexScrollBarAndCursor
|
|
ld a, $1
|
|
ld [wScreenState], a
|
|
ret
|
|
|
|
.displayMonImage
|
|
ldh a, [hGameBoyColorFlag]
|
|
and a
|
|
jr z, .asm_281c7
|
|
ldh a, [hJoypadState]
|
|
bit BIT_START, a
|
|
jr z, .asm_281bb
|
|
ld a, [wPokedexStartButtonIsPressed]
|
|
and a
|
|
ld a, $ff
|
|
ld [wPokedexStartButtonIsPressed], a
|
|
call z, DrawSummaryWindowMonImage
|
|
jr .asm_281c7
|
|
|
|
.asm_281bb
|
|
ld a, [wPokedexStartButtonIsPressed]
|
|
and a
|
|
ld a, $0
|
|
ld [wPokedexStartButtonIsPressed], a
|
|
call nz, DrawSummaryWindowMonImage
|
|
.asm_281c7
|
|
call Func_2885c
|
|
ret
|
|
|
|
UnusedFunc_281cb:
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
sla c
|
|
rl b
|
|
add c
|
|
ld c, a
|
|
jr nc, .asm_281da
|
|
inc b
|
|
.asm_281da
|
|
ld a, [wPokedexStartButtonIsPressed]
|
|
and a
|
|
jr nz, .asm_281fb
|
|
ld hl, MonBillboardPalettePointers
|
|
add hl, bc
|
|
ld a, BANK(MonBillboardPalettePointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld e, a
|
|
ld a, BANK(MonBillboardPalettePointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld d, a
|
|
ld a, BANK(MonBillboardPalettePointers)
|
|
call ReadByteFromBank
|
|
ldh [hPokedexBillboardPaletteBank], a
|
|
jr .asm_28214
|
|
|
|
.asm_281fb
|
|
ld hl, MonAnimatedPalettePointers
|
|
add hl, bc
|
|
ld a, BANK(MonAnimatedPalettePointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld e, a
|
|
ld a, BANK(MonAnimatedPalettePointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld d, a
|
|
ld a, BANK(MonAnimatedPalettePointers)
|
|
call ReadByteFromBank
|
|
ldh [hPokedexBillboardPaletteBank], a
|
|
.asm_28214
|
|
ld h, d
|
|
ld l, e
|
|
ld de, wda8a
|
|
ld b, $8
|
|
.asm_2821b
|
|
push bc
|
|
ldh a, [hPokedexBillboardPaletteBank]
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld c, a
|
|
ldh a, [hPokedexBillboardPaletteBank]
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld b, a
|
|
ld a, c
|
|
and $1f
|
|
ld [de], a
|
|
inc de
|
|
srl b
|
|
rr c
|
|
srl b
|
|
rr c
|
|
srl b
|
|
rr c
|
|
srl b
|
|
rr c
|
|
srl b
|
|
rr c
|
|
ld a, c
|
|
and $1f
|
|
ld [de], a
|
|
inc de
|
|
srl b
|
|
rr c
|
|
srl b
|
|
rr c
|
|
srl b
|
|
rr c
|
|
srl b
|
|
rr c
|
|
srl b
|
|
rr c
|
|
ld a, c
|
|
and $1f
|
|
ld [de], a
|
|
inc de
|
|
pop bc
|
|
dec b
|
|
jr nz, .asm_2821b
|
|
ld hl, VRAMAddresses_28289
|
|
ld de, wda8a
|
|
ld b, $18
|
|
.asm_2826d
|
|
push hl
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, [de]
|
|
inc de
|
|
push af
|
|
swap a
|
|
and $f
|
|
call PutTileInVRAM
|
|
inc hl
|
|
pop af
|
|
and $f
|
|
call PutTileInVRAM
|
|
pop hl
|
|
inc hl
|
|
inc hl
|
|
dec b
|
|
jr nz, .asm_2826d
|
|
ret
|
|
|
|
VRAMAddresses_28289:
|
|
dw vBGWin + $26
|
|
dw vBGWin + $2B
|
|
dw vBGWin + $30
|
|
dw vBGWin + $46
|
|
dw vBGWin + $4B
|
|
dw vBGWin + $50
|
|
dw vBGWin + $66
|
|
dw vBGWin + $6B
|
|
dw vBGWin + $70
|
|
dw vBGWin + $86
|
|
dw vBGWin + $8B
|
|
dw vBGWin + $90
|
|
dw vBGWin + $C6
|
|
dw vBGWin + $CB
|
|
dw vBGWin + $D0
|
|
dw vBGWin + $E6
|
|
dw vBGWin + $EB
|
|
dw vBGWin + $F0
|
|
dw vBGWin + $106
|
|
dw vBGWin + $10B
|
|
dw vBGWin + $110
|
|
dw vBGWin + $126
|
|
dw vBGWin + $12B
|
|
dw vBGWin + $130
|
|
|
|
SpriteOffsetsTable_282b9:
|
|
; y, x coordinates
|
|
db $40, $18
|
|
db $40, $40
|
|
db $40, $68
|
|
db $48, $18
|
|
db $48, $40
|
|
db $48, $68
|
|
db $50, $18
|
|
db $50, $40
|
|
db $50, $68
|
|
db $58, $18
|
|
db $58, $40
|
|
db $58, $68
|
|
db $68, $18
|
|
db $68, $40
|
|
db $68, $68
|
|
db $70, $18
|
|
db $70, $40
|
|
db $70, $68
|
|
db $78, $18
|
|
db $78, $40
|
|
db $78, $68
|
|
db $80, $18
|
|
db $80, $40
|
|
db $80, $68
|
|
|
|
Func_282e9: ; 0x282e9
|
|
ld a, [wPokedexStartButtonIsPressed]
|
|
and a
|
|
jr z, .asm_28318
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, MonAnimatedSpriteTypes
|
|
add hl, bc
|
|
ld a, Bank(MonAnimatedSpriteTypes)
|
|
call ReadByteFromBank
|
|
ld c, a
|
|
ldh a, [hFrameCounter]
|
|
swap a
|
|
and $7
|
|
cp $7
|
|
jr z, .asm_2830d
|
|
and $1
|
|
jr .asm_2830f
|
|
|
|
.asm_2830d
|
|
ld a, $2
|
|
.asm_2830f
|
|
add c
|
|
add SPRITE_POKEDEX_ANIMATED_MON
|
|
ld bc, $2030
|
|
call LoadSpriteData
|
|
.asm_28318
|
|
ld a, [wdaa2]
|
|
sla a
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, SpriteOffsetsTable_282b9
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld c, a
|
|
ld a, [hli]
|
|
ld b, a
|
|
ld a, SPRITE_DEX_ARROW
|
|
call LoadSpriteData
|
|
call Func_28368
|
|
ldh a, [hNewlyPressedButtons]
|
|
and $6
|
|
jr z, .asm_28367
|
|
ld a, BANK(PokedexTilemap)
|
|
ld hl, PokedexTilemap
|
|
ld de, vBGWin
|
|
ld bc, $0200
|
|
call LoadVRAMData
|
|
ld a, $1
|
|
ldh [rVBK], a
|
|
ld a, BANK(PokedexBGAttributes)
|
|
ld hl, PokedexBGAttributes
|
|
ld de, vBGWin
|
|
ld bc, $0200
|
|
call LoadVRAMData
|
|
xor a
|
|
ldh [rVBK], a
|
|
call DrawPokedexMonNames
|
|
call Func_28a8a
|
|
call Func_28ad1
|
|
ld a, $1
|
|
ld [wScreenState], a
|
|
.asm_28367
|
|
ret
|
|
|
|
Func_28368: ; 0x28368
|
|
ldh a, [hJoypadState]
|
|
bit BIT_A_BUTTON, a
|
|
jr nz, .asm_28371
|
|
jp Func_284bc
|
|
|
|
.asm_28371
|
|
ldh a, [hPressedButtons]
|
|
ld b, a
|
|
ld a, [wdaa2]
|
|
ld e, a
|
|
ld d, $0
|
|
ld hl, wda8a
|
|
add hl, de
|
|
ld a, [hl]
|
|
bit BIT_D_LEFT, b
|
|
jr z, .checkIfRightPressed
|
|
dec a
|
|
jr .asm_2838a
|
|
|
|
.checkIfRightPressed
|
|
bit BIT_D_RIGHT, b
|
|
ret z
|
|
inc a
|
|
.asm_2838a
|
|
and $1f
|
|
ld [hl], a
|
|
push af
|
|
sla e
|
|
rl d
|
|
ld hl, VRAMAddresses_28289
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
pop af
|
|
push af
|
|
swap a
|
|
and $f
|
|
call PutTileInVRAM
|
|
inc hl
|
|
pop af
|
|
and $f
|
|
call PutTileInVRAM
|
|
ld hl, Data_2842c
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, [hld]
|
|
ld c, a
|
|
ld b, $0
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
ld a, [hld]
|
|
or c
|
|
ld c, a
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
ld a, [hl]
|
|
or c
|
|
ld c, a
|
|
ld a, [wPokedexStartButtonIsPressed]
|
|
and a
|
|
jr nz, .asm_283ff
|
|
ld hl, BGPaletteIndices_2845c
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld hl, rBGPI
|
|
call PutTileInVRAM
|
|
ld hl, rBGPD
|
|
ld a, c
|
|
call PutTileInVRAM
|
|
ld a, b
|
|
call PutTileInVRAM
|
|
ret
|
|
|
|
.asm_283ff
|
|
ld hl, BGPaletteIndices_2845c
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld hl, rBGPI
|
|
call PutTileInVRAM
|
|
ld hl, rBGPD
|
|
ld a, c
|
|
call PutTileInVRAM
|
|
ld a, b
|
|
call PutTileInVRAM
|
|
ld hl, SpritePaletteIndices_2848c
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld hl, rOBPI
|
|
call PutTileInVRAM
|
|
ld hl, rOBPD
|
|
ld a, c
|
|
call PutTileInVRAM
|
|
ld a, b
|
|
call PutTileInVRAM
|
|
ret
|
|
|
|
Data_2842c:
|
|
dw wda8c
|
|
dw wda8c
|
|
dw wda8c
|
|
dw wda8f
|
|
dw wda8f
|
|
dw wda8f
|
|
dw wda92
|
|
dw wda92
|
|
dw wda92
|
|
dw wda95
|
|
dw wda95
|
|
dw wda95
|
|
dw wda98
|
|
dw wda98
|
|
dw wda98
|
|
dw wda9b
|
|
dw wda9b
|
|
dw wda9b
|
|
dw wda9e
|
|
dw wda9e
|
|
dw wda9e
|
|
dw wdaa1
|
|
dw wdaa1
|
|
dw wdaa1
|
|
|
|
BGPaletteIndices_2845c:
|
|
; second byte is unused
|
|
db $30 | $80, $00
|
|
db $30 | $80, $00
|
|
db $30 | $80, $00
|
|
db $32 | $80, $00
|
|
db $32 | $80, $00
|
|
db $32 | $80, $00
|
|
db $34 | $80, $00
|
|
db $34 | $80, $00
|
|
db $34 | $80, $00
|
|
db $36 | $80, $00
|
|
db $36 | $80, $00
|
|
db $36 | $80, $00
|
|
db $38 | $80, $00
|
|
db $38 | $80, $00
|
|
db $38 | $80, $00
|
|
db $3A | $80, $00
|
|
db $3A | $80, $00
|
|
db $3A | $80, $00
|
|
db $3C | $80, $00
|
|
db $3C | $80, $00
|
|
db $3C | $80, $00
|
|
db $3E | $80, $00
|
|
db $3E | $80, $00
|
|
db $3E | $80, $00
|
|
|
|
SpritePaletteIndices_2848c:
|
|
db $D8, $00
|
|
db $D8, $00
|
|
db $D8, $00
|
|
db $DA, $00
|
|
db $DA, $00
|
|
db $DA, $00
|
|
db $DC, $00
|
|
db $DC, $00
|
|
db $DC, $00
|
|
db $DE, $00
|
|
db $DE, $00
|
|
db $DE, $00
|
|
db $E8, $00
|
|
db $E8, $00
|
|
db $E8, $00
|
|
db $EA, $00
|
|
db $EA, $00
|
|
db $EA, $00
|
|
db $EC, $00
|
|
db $EC, $00
|
|
db $EC, $00
|
|
db $EE, $00
|
|
db $EE, $00
|
|
db $EE, $00
|
|
|
|
Func_284bc: ; 0x284bc
|
|
ldh a, [hPressedButtons]
|
|
ld b, a
|
|
ld a, [wdaa2]
|
|
bit BIT_D_LEFT, b
|
|
jr z, .checkIfRightPressed
|
|
dec a
|
|
bit 7, a
|
|
jr nz, .asm_284ef
|
|
jr .asm_284f5
|
|
|
|
.checkIfRightPressed
|
|
bit BIT_D_RIGHT, b
|
|
jr z, .checkIfUpPressed
|
|
inc a
|
|
cp $18
|
|
jr nc, .asm_284f3
|
|
jr .asm_284f5
|
|
|
|
.checkIfUpPressed
|
|
bit BIT_D_UP, b
|
|
jr z, .checkIfDownPressed
|
|
sub $3
|
|
bit 7, a
|
|
jr nz, .asm_284ef
|
|
jr .asm_284f5
|
|
|
|
.checkIfDownPressed
|
|
bit BIT_D_DOWN, b
|
|
ret z
|
|
add $3
|
|
cp $18
|
|
jr nc, .asm_284f3
|
|
jr .asm_284f5
|
|
|
|
.asm_284ef
|
|
add $18
|
|
jr .asm_284f5
|
|
|
|
.asm_284f3
|
|
sub $18
|
|
.asm_284f5
|
|
ld [wdaa2], a
|
|
ret
|
|
|
|
ExitPokedexScreen: ; 0x284f9
|
|
call FadeOut
|
|
call DisableLCD
|
|
ld hl, hSTAT
|
|
res 6, [hl]
|
|
ld hl, rIE
|
|
res 1, [hl]
|
|
ld a, SCREEN_TITLESCREEN
|
|
ld [wCurrentScreen], a
|
|
xor a
|
|
ld [wScreenState], a
|
|
ret
|
|
|
|
HandlePokedexDirectionalInput: ; 0x28513
|
|
ldh a, [hPressedButtons]
|
|
ld hl, wd95e ; some temp storage for joypad input
|
|
or [hl]
|
|
ld [hl], a ; load any combination of button presses
|
|
ld a, [wd95c]
|
|
and a
|
|
ret nz
|
|
ld a, [wd95e]
|
|
ld b, a
|
|
; if MEW has not been seen or caught, act as if the max pokedex number were 150 instead of 151
|
|
ld a, [wPokedexFlags + MEW - 1]
|
|
and a
|
|
ld a, NUM_POKEMON - 1
|
|
jr z, .gotMaximumPokedexIndex
|
|
ld a, NUM_POKEMON
|
|
.gotMaximumPokedexIndex
|
|
ld d, a
|
|
ld a, [wCurPokedexIndex]
|
|
bit BIT_D_UP, b
|
|
jr z, .checkIfDownPressed
|
|
and a
|
|
jr z, .done
|
|
dec a
|
|
ld [wCurPokedexIndex], a
|
|
ld a, $4
|
|
ld [wd95c], a
|
|
ld a, $1
|
|
ld [wPokedexCursorWasMoved], a
|
|
jr .done
|
|
|
|
.checkIfDownPressed
|
|
bit BIT_D_DOWN, b
|
|
jr z, .checkIfLeftPressed
|
|
inc a
|
|
cp d
|
|
jr z, .done ; jump if reached bottom of Pokedex
|
|
ld [wCurPokedexIndex], a
|
|
ld a, $4
|
|
ld [wd95c], a
|
|
ld a, $1
|
|
ld [wPokedexCursorWasMoved], a
|
|
jr .done
|
|
|
|
.checkIfLeftPressed
|
|
ld a, d
|
|
sub $9
|
|
ld d, a
|
|
ld a, [wPokedexOffset]
|
|
ld c, $5
|
|
bit BIT_D_LEFT, b
|
|
jr z, .checkIfRightPressed
|
|
cp $5 ; 5 is max number of pokedex entries displayed
|
|
jr nc, .getNewLowerPokedexOffset
|
|
ld c, a ; load the offset when [wPokedexOffset] is 0, 1, 2, 3, or 4
|
|
.getNewLowerPokedexOffset
|
|
sub c
|
|
ld [wPokedexOffset], a
|
|
ld a, [wCurPokedexIndex]
|
|
sub c
|
|
ld [wCurPokedexIndex], a
|
|
ld a, $1
|
|
ld [wPokedexCursorWasMoved], a
|
|
call Func_285ca ; TODO
|
|
jr .asm_285aa
|
|
|
|
.checkIfRightPressed
|
|
bit BIT_D_RIGHT, b
|
|
jr z, .asm_285ae
|
|
cp d
|
|
jr c, .getNewHigherPokedexOffset
|
|
; change how far the menu can scroll down when near the end of the Pokedex
|
|
push af
|
|
cpl
|
|
add d
|
|
add $5
|
|
ld c, a
|
|
pop af
|
|
.getNewHigherPokedexOffset
|
|
add c
|
|
ld [wPokedexOffset], a
|
|
ld a, [wCurPokedexIndex]
|
|
add c
|
|
ld [wCurPokedexIndex], a
|
|
ld a, $1
|
|
ld [wPokedexCursorWasMoved], a
|
|
call Func_285ca
|
|
jr .asm_285aa
|
|
|
|
.done
|
|
xor a
|
|
.asm_285aa
|
|
ld [wd95e], a
|
|
ret
|
|
|
|
.asm_285ae
|
|
ld a, [wPokedexCursorWasMoved]
|
|
and a
|
|
ret z
|
|
lb de, $00, $03
|
|
call PlaySoundEffect
|
|
call DrawSummaryWindowMonName
|
|
call DrawSummaryWindowMonSpecies
|
|
call DrawSummaryWindowMonAttributes
|
|
call DrawSummaryWindowMonImage
|
|
xor a
|
|
ld [wPokedexCursorWasMoved], a
|
|
ret
|
|
|
|
Func_285ca: ; 0x285ca
|
|
xor a
|
|
ld [wPressedButtonsPersistent], a
|
|
call DrawPokedexMonNames
|
|
call Func_28a8a
|
|
call Func_28ad1
|
|
ld a, [wPressedButtonsPersistent]
|
|
ret
|
|
|
|
DisplayPokedexScrollBarAndCursor: ; 0x285db
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, wPokedexFlags
|
|
add hl, bc
|
|
bit BIT_POKEDEX_MON_CAUGHT, [hl]
|
|
call nz, AnimateMonSpriteIfStartIsPressed
|
|
ld bc, $8c38
|
|
ld a, SPRITE_DEX_SCROLLBAR_TOPPER_0
|
|
call LoadSpriteData
|
|
ld bc, $8840
|
|
ld a, SPRITE_DEX_SCROLLBAR_TOPPER_1
|
|
call LoadSpriteData
|
|
ld bc, $8888
|
|
ld a, SPRITE_DEX_SCROLLBAR_TOPPER_2
|
|
call LoadSpriteData
|
|
call DrawCornerInfoPokedexScreen
|
|
; determine where to draw the right hand side scroll bar
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, DexScrollBarOffsets
|
|
add hl, bc
|
|
ld a, [hl]
|
|
add $49 ; y-coordinate shift of scroll bar
|
|
ld c, a
|
|
ld b, $90 ; x-coordinate shift of scroll bar
|
|
ld a, [wPokedexBlinkingCursorAndScrollBarCounter]
|
|
srl a
|
|
srl a
|
|
and $3 ; get a number between 0 - 3
|
|
ld e, a
|
|
ld d, $0
|
|
ld hl, DexScrollBarSpriteIds
|
|
add hl, de
|
|
ld a, [hl]
|
|
call LoadSpriteData
|
|
; check if moving the cursor up has caused the window to shift
|
|
ld a, [wCurPokedexIndex]
|
|
ld hl, wPokedexOffset
|
|
sub [hl]
|
|
jr nc, .windowDoesNotMoveUp
|
|
dec [hl]
|
|
ld a, 1
|
|
ld [wPokedexWindowWasShifted], a
|
|
xor a
|
|
jr .decideCursorSprite
|
|
|
|
.windowDoesNotMoveUp
|
|
cp 5
|
|
jr c, .decideCursorSprite
|
|
; if scrolling down moves the window
|
|
ld a, 1
|
|
ld [wPokedexWindowWasShifted], a
|
|
inc [hl]
|
|
ld a, $4
|
|
.decideCursorSprite
|
|
ld c, a
|
|
push bc
|
|
ldh a, [hJoypadState]
|
|
and a
|
|
ld a, [wPokedexBlinkingCursorAndScrollBarCounter]
|
|
jr z, .wasJoyHeld
|
|
xor a
|
|
.wasJoyHeld
|
|
inc a
|
|
ld [wPokedexBlinkingCursorAndScrollBarCounter], a
|
|
; Every 16th time reaching this loop, the sprite will change (blinking),
|
|
; unless a button is pressed. Hence why bit 3 is tested.
|
|
bit 3, a
|
|
jr nz, .asm_28667
|
|
swap c
|
|
ld a, c
|
|
add $40
|
|
ld c, a
|
|
ld b, $10
|
|
ld a, SPRITE_DEX_ARROW
|
|
call LoadSpriteData
|
|
.asm_28667
|
|
pop bc
|
|
ld a, [wd95c]
|
|
and a
|
|
ret z
|
|
dec a
|
|
ld [wd95c], a
|
|
sla a
|
|
ld e, a
|
|
ld d, $0
|
|
push hl
|
|
ld hl, PointerTable_2867f
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
jp hl
|
|
|
|
PointerTable_2867f: ; 0x2867f
|
|
dw Func_286dd
|
|
dw Func_28721
|
|
dw Func_286dd
|
|
dw Func_28765
|
|
|
|
DexScrollBarSpriteIds:
|
|
db SPRITE_DEX_SCROLLBAR_0
|
|
db SPRITE_DEX_SCROLLBAR_1
|
|
db SPRITE_DEX_SCROLLBAR_2
|
|
db SPRITE_DEX_SCROLLBAR_1
|
|
|
|
DrawCornerInfoPokedexScreen: ; 0x2868b
|
|
; If player is holding SELECT button, it draws the seen/own count in the top-right corner.
|
|
; Otherwise, it draws the word "POKeDEX".
|
|
ldh a, [hJoypadState]
|
|
bit BIT_SELECT, a
|
|
jr z, .asm_286c8
|
|
ld bc, $6d03
|
|
ld a, [wNumPokemonSeen + 1]
|
|
call LoadSeenOwnDigitSprite
|
|
ld a, [wNumPokemonSeen]
|
|
swap a
|
|
call LoadSeenOwnDigitSprite
|
|
ld a, [wNumPokemonSeen]
|
|
call LoadSeenOwnDigitSprite
|
|
ld bc, $8202
|
|
ld a, SPRITE_SLASH_CHARACTER
|
|
call LoadSpriteData ; draws the "/" between the seen/owned numbers
|
|
ld bc, $8703
|
|
ld a, [wNumPokemonOwned + 1]
|
|
call LoadSeenOwnDigitSprite
|
|
ld a, [wNumPokemonOwned]
|
|
swap a
|
|
call LoadSeenOwnDigitSprite
|
|
ld a, [wNumPokemonOwned]
|
|
call LoadSeenOwnDigitSprite
|
|
ret
|
|
|
|
.asm_286c8
|
|
ld bc, $6800
|
|
ld a, SPRITE_POKEDEX_TEXT
|
|
call LoadSpriteData
|
|
ret
|
|
|
|
LoadSeenOwnDigitSprite: ; 0x286d1
|
|
and $f
|
|
add SPRITE_DIGIT
|
|
call LoadSpriteData
|
|
ld a, b
|
|
add $7 ; adds 7 pixels to the next digit's x position on screen
|
|
ld b, a
|
|
ret
|
|
|
|
Func_286dd: ; 0x286dd
|
|
pop hl
|
|
ld a, [wd862]
|
|
and a
|
|
jr nz, .asm_286ff
|
|
push bc
|
|
push hl
|
|
ld a, [wd863]
|
|
ld e, a
|
|
ld a, [wd864]
|
|
ld d, a
|
|
ld hl, wPokedexFontBuffer
|
|
xor a
|
|
ld bc, $00a0
|
|
call LoadOrCopyVRAMData
|
|
ld a, $1
|
|
ld [wd862], a
|
|
pop hl
|
|
pop bc
|
|
.asm_286ff
|
|
ld a, [wPokedexWindowWasShifted]
|
|
and a
|
|
ret z
|
|
ld a, [wd95c]
|
|
and a
|
|
jr nz, .asm_2870d
|
|
ld [wPokedexWindowWasShifted], a
|
|
.asm_2870d
|
|
ld a, c
|
|
and a
|
|
jr nz, .asm_28719
|
|
ld hl, hNextFrameHBlankSCX
|
|
dec [hl]
|
|
dec [hl]
|
|
dec [hl]
|
|
dec [hl]
|
|
ret
|
|
|
|
.asm_28719
|
|
ld hl, hNextFrameHBlankSCX
|
|
inc [hl]
|
|
inc [hl]
|
|
inc [hl]
|
|
inc [hl]
|
|
ret
|
|
|
|
Func_28721: ; 0x28721
|
|
pop hl
|
|
ld a, [wPokedexWindowWasShifted]
|
|
and a
|
|
ret z
|
|
ld a, c
|
|
and a
|
|
jr nz, .asm_28747
|
|
ld a, [hl]
|
|
push af
|
|
sla a
|
|
and $1e
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, BGMapLocations_287c7
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
pop af
|
|
call Func_28aaa
|
|
ld hl, hNextFrameHBlankSCX
|
|
dec [hl]
|
|
dec [hl]
|
|
dec [hl]
|
|
dec [hl]
|
|
ret
|
|
|
|
.asm_28747
|
|
ld a, [hl]
|
|
add $5
|
|
push af
|
|
sla a
|
|
and $1e
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, BGMapLocations_287c7
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
pop af
|
|
call Func_28aaa
|
|
ld hl, hNextFrameHBlankSCX
|
|
inc [hl]
|
|
inc [hl]
|
|
inc [hl]
|
|
inc [hl]
|
|
ret
|
|
|
|
Func_28765: ; 0x28765
|
|
pop hl
|
|
ld a, [wPokedexWindowWasShifted]
|
|
and a
|
|
ret z
|
|
ld a, c
|
|
and a
|
|
jr nz, .asm_28791
|
|
push hl
|
|
ld a, [hl]
|
|
sla a
|
|
and $e
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, PokedexMonNamesTileLocations
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld e, a
|
|
ld a, [hli]
|
|
ld d, a
|
|
ld hl, hNextFrameHBlankSCX
|
|
dec [hl]
|
|
dec [hl]
|
|
dec [hl]
|
|
dec [hl]
|
|
pop hl
|
|
xor a
|
|
ld [wd862], a
|
|
ld a, [hl]
|
|
call DrawPokedexListMonName
|
|
ret
|
|
|
|
.asm_28791
|
|
push hl
|
|
ld a, [hl]
|
|
add $5
|
|
sla a
|
|
and $e
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, PokedexMonNamesTileLocations
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld e, a
|
|
ld a, [hli]
|
|
ld d, a
|
|
ld hl, hNextFrameHBlankSCX
|
|
inc [hl]
|
|
inc [hl]
|
|
inc [hl]
|
|
inc [hl]
|
|
pop hl
|
|
xor a
|
|
ld [wd862], a
|
|
ld a, [hl]
|
|
add $5
|
|
call DrawPokedexListMonName
|
|
ret
|
|
|
|
PokedexMonNamesTileLocations:
|
|
dw vTilesOB tile $0
|
|
dw vTilesOB tile $A
|
|
dw vTilesOB tile $14
|
|
dw vTilesOB tile $1E
|
|
dw vTilesOB tile $28
|
|
dw vTilesOB tile $32
|
|
dw vTilesOB tile $3C
|
|
dw vTilesOB tile $46
|
|
|
|
BGMapLocations_287c7:
|
|
dw vBGWin + $7
|
|
dw vBGWin + $47
|
|
dw vBGWin + $87
|
|
dw vBGWin + $C7
|
|
dw vBGWin + $107
|
|
dw vBGWin + $147
|
|
dw vBGWin + $187
|
|
dw vBGWin + $1C7
|
|
dw vBGWin + $207
|
|
dw vBGWin + $247
|
|
dw vBGWin + $287
|
|
dw vBGWin + $2C7
|
|
dw vBGWin + $307
|
|
dw vBGWin + $347
|
|
dw vBGWin + $387
|
|
dw vBGWin + $3C7
|
|
|
|
AnimateMonSpriteIfStartIsPressed: ; 0x287e7
|
|
ld a, [wPokedexStartButtonIsPressed]
|
|
and a
|
|
ret z
|
|
ld a, [wPokedexCursorWasMoved]
|
|
and a
|
|
ret nz
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, MonAnimatedSpriteTypes
|
|
add hl, bc
|
|
ld a, Bank(MonAnimatedSpriteTypes)
|
|
call ReadByteFromBank
|
|
bit 7, a
|
|
ret nz
|
|
ld [wCurrentAnimatedMonSpriteType], a
|
|
call Func_28815
|
|
ld a, [wCurrentAnimatedMonSpriteFrame]
|
|
add SPRITE_POKEDEX_ANIMATED_MON
|
|
ld bc, $2030
|
|
call LoadSpriteData
|
|
ret
|
|
|
|
Func_28815: ; 0x28815
|
|
ld a, [wLoopsUntilNextCatchSpriteAnimationChange]
|
|
dec a
|
|
ld [wLoopsUntilNextCatchSpriteAnimationChange], a
|
|
ret nz
|
|
ld a, [wBallHitWildMon]
|
|
inc a
|
|
and $7
|
|
ld [wBallHitWildMon], a
|
|
jr nz, .asm_28836
|
|
ld a, [wCurrentCatchMonHitFrameDuration]
|
|
ld [wLoopsUntilNextCatchSpriteAnimationChange], a
|
|
xor a
|
|
ld [wCatchModeMonUpdateTimer], a
|
|
ld c, $2
|
|
jr .asm_28854
|
|
|
|
.asm_28836
|
|
ld a, [wCurrentAnimatedMonSpriteType]
|
|
ld c, a
|
|
ld a, [wCurrentAnimatedMonSpriteFrame]
|
|
sub c
|
|
cp $1
|
|
ld c, $0
|
|
jr nc, .asm_28846
|
|
ld c, $1
|
|
.asm_28846
|
|
ld b, $0
|
|
ld hl, wCurrentCatchMonIdleFrame1Duration
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld [wLoopsUntilNextCatchSpriteAnimationChange], a
|
|
xor a
|
|
ld [wCatchModeMonUpdateTimer], a
|
|
.asm_28854
|
|
ld a, [wCurrentAnimatedMonSpriteType]
|
|
add c
|
|
ld [wCurrentAnimatedMonSpriteFrame], a
|
|
ret
|
|
|
|
Func_2885c: ; 0x2885c
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, wPokedexFlags
|
|
add hl, bc
|
|
bit BIT_POKEDEX_MON_CAUGHT, [hl]
|
|
call nz, AnimateMonSpriteIfStartIsPressed
|
|
ld bc, $8888
|
|
ld a, SPRITE_DEX_SCROLLBAR_TOPPER_2
|
|
call LoadSpriteData
|
|
ld bc, $6800
|
|
ld a, SPRITE_POKEDEX_TEXT
|
|
call LoadSpriteData
|
|
ret
|
|
|
|
ScrollPokemonDescriptionDown: ; 0x2887c
|
|
ld a, BANK(PokedexTilemap2)
|
|
ld hl, PokedexTilemap2 + $120
|
|
deCoord 0, 8, vBGMap
|
|
ld bc, $0100
|
|
call LoadVRAMData
|
|
ld a, $3f
|
|
ldh [hLYC], a
|
|
ld a, $47
|
|
ldh [hNextLYCSub], a
|
|
ld b, $33
|
|
.frame_loop
|
|
push bc
|
|
ld a, $7a
|
|
sub b
|
|
ldh [hNextLYCSub], a
|
|
rst AdvanceFrame
|
|
pop bc
|
|
dec b
|
|
dec b
|
|
dec b
|
|
jr nz, .frame_loop
|
|
ret
|
|
|
|
Func_288a2: ; 0x288a2
|
|
ld b, $33
|
|
.asm_288a4
|
|
push bc
|
|
ld a, $44
|
|
add b
|
|
ldh [hNextLYCSub], a
|
|
rst AdvanceFrame
|
|
pop bc
|
|
dec b
|
|
dec b
|
|
dec b
|
|
jr nz, .asm_288a4
|
|
ld a, $3b
|
|
ldh [hLYC], a
|
|
ldh [hNextLYCSub], a
|
|
ld a, BANK(PokedexTilemap2)
|
|
ld hl, PokedexTilemap2 + $100
|
|
deCoord 0, 8, vBGMap
|
|
ld bc, $0020
|
|
call LoadVRAMData
|
|
ret
|
|
|
|
LoadPokemonDescriptionIntoVRAM: ; 0x288c6
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, wPokedexFlags
|
|
add hl, bc
|
|
bit BIT_POKEDEX_MON_CAUGHT, [hl]
|
|
ld hl, BlankPokedexDescription
|
|
jr z, .loadDescription
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
sla c
|
|
rl b
|
|
ld hl, PokedexDescriptionPointers
|
|
add hl, bc
|
|
ld a, BANK(PokedexDescriptionPointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld c, a
|
|
ld a, BANK(PokedexDescriptionPointers)
|
|
call ReadByteFromBank
|
|
ld b, a
|
|
ld h, b
|
|
ld l, c
|
|
.loadDescription
|
|
xor a
|
|
ld [wd860], a
|
|
ld [wd861], a
|
|
ld bc, $906c ; $90 is the tile number for the first VWF character
|
|
ld de, vTilesSH tile $10
|
|
call LoadPokemonDescriptionVWFCharacterTiles
|
|
rl a
|
|
ld [wPokedexDescriptionPageFlag], a
|
|
ld a, l
|
|
ld [wd957], a
|
|
ld a, h
|
|
ld [wd958], a
|
|
ret
|
|
|
|
Func_28912: ; 0x28912
|
|
ld bc, $906c
|
|
ld de, vTilesSH tile $10
|
|
ld a, [wd957]
|
|
ld l, a
|
|
ld a, [wd958]
|
|
ld h, a
|
|
call LoadPokemonDescriptionVWFCharacterTiles
|
|
rl a
|
|
ld [wPokedexDescriptionPageFlag], a
|
|
ld a, l
|
|
ld [wd957], a
|
|
ld a, h
|
|
ld [wd958], a
|
|
ret
|
|
|
|
DrawSummaryWindowMonName: ; 0x28931
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, wPokedexFlags
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
ld hl, BlankDexName
|
|
jr z, .gotMonNameAddress
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
; compute 11 * bc (11 is length of name)
|
|
ld h, b
|
|
ld l, c
|
|
sla l
|
|
rl h
|
|
sla l
|
|
rl h
|
|
sla l
|
|
rl h
|
|
add hl, bc
|
|
add hl, bc
|
|
add hl, bc
|
|
ld bc, MonDexNames
|
|
add hl, bc
|
|
.gotMonNameAddress
|
|
ld a, $ff
|
|
ld [wd860], a
|
|
xor a
|
|
ld [wd861], a
|
|
ld bc, $500a ; not memory address
|
|
ld de, vTilesBG tile $50
|
|
call LoadPokemonNameVWFCharacterTiles
|
|
ret
|
|
|
|
BlankDexName:
|
|
db " @"
|
|
|
|
DrawPokedexMonNames: ; 0x28972
|
|
; c is used to determine where to draw the name in the Pokedex
|
|
ld a, [wPokedexOffset]
|
|
ld c, a
|
|
ld b, 6
|
|
.loop
|
|
push bc
|
|
ld a, c
|
|
sla a ; PokedexMonNamesTileLocations has 8 entries. These two lines are simply adjusting register a to index PokedexMonNamesTileLocations.
|
|
and $e
|
|
ld e, a
|
|
ld d, $0
|
|
ld hl, PokedexMonNamesTileLocations
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld e, a
|
|
ld a, [hl]
|
|
ld d, a
|
|
ld a, c
|
|
call DrawPokedexListMonName
|
|
pop bc
|
|
inc c
|
|
dec b
|
|
jr nz, .loop
|
|
ret
|
|
|
|
DrawPokedexListMonName: ; 0x28993
|
|
push hl
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, wPokedexFlags
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
ld hl, BlankDexName2
|
|
jr z, .gotMonNameAddress
|
|
; compute 11 * bc (11 is length of name)
|
|
ld h, b
|
|
ld l, c
|
|
sla l
|
|
rl h
|
|
sla l
|
|
rl h
|
|
sla l
|
|
rl h
|
|
add hl, bc
|
|
add hl, bc
|
|
add hl, bc
|
|
ld bc, MonDexNames
|
|
add hl, bc
|
|
.gotMonNameAddress
|
|
xor a
|
|
ld [wd860], a
|
|
ld [wd861], a
|
|
ld bc, $500a ; not a pointer
|
|
call LoadPokemonNameVWFCharacterTiles
|
|
pop hl
|
|
ret
|
|
|
|
BlankDexName2:
|
|
db " @"
|
|
|
|
DrawSummaryWindowMonSpecies: ; 0x289c8
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, wPokedexFlags
|
|
add hl, bc
|
|
bit BIT_POKEDEX_MON_CAUGHT, [hl]
|
|
ld hl, BlankSpeciesName
|
|
jr z, .pokemonNotOwned
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, MonSpecies
|
|
add hl, bc
|
|
ld c, [hl]
|
|
ld h, b
|
|
ld l, c
|
|
sla l
|
|
rl h
|
|
sla l
|
|
rl h
|
|
sla l
|
|
rl h
|
|
add hl, bc
|
|
add hl, bc
|
|
add hl, bc ; species * 11
|
|
sla l
|
|
rl h
|
|
add hl, bc ; species * 23
|
|
ld bc, MonSpeciesNames
|
|
add hl, bc
|
|
.pokemonNotOwned
|
|
ld a, $ff
|
|
ld [wd860], a
|
|
ld a, $4
|
|
ld [wd861], a
|
|
ld bc, $5816
|
|
ld de, vTilesBG tile $5a
|
|
call LoadPokemonNameVWFCharacterTiles
|
|
ret
|
|
|
|
BlankSpeciesName:
|
|
dw $4081 ; variable-width font character
|
|
db $00
|
|
|
|
DrawSummaryWindowMonAttributes: ; 0x28a15
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld h, b
|
|
ld l, c
|
|
sla l
|
|
rl h
|
|
add hl, bc
|
|
sla l
|
|
rl h
|
|
add hl, bc
|
|
sla l
|
|
rl h
|
|
add hl, bc
|
|
ld bc, PokedexMonAttributesTexts
|
|
add hl, bc
|
|
ld d, h
|
|
ld e, l
|
|
ld a, $0
|
|
ld [wd865], a
|
|
push de
|
|
hlCoord 4, 2, vBGMap
|
|
call Func_28d71
|
|
pop de
|
|
inc de
|
|
inc de
|
|
inc de
|
|
inc de
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, wPokedexFlags
|
|
add hl, bc
|
|
bit BIT_POKEDEX_MON_CAUGHT, [hl]
|
|
jr nz, .asm_28a54
|
|
ld de, BlankPokemonTileData_28a7f
|
|
.asm_28a54
|
|
push de
|
|
hlCoord 8, 6, vBGMap
|
|
call Func_28d71
|
|
pop de
|
|
inc de
|
|
inc de
|
|
inc de
|
|
inc de
|
|
inc de
|
|
push de
|
|
hlCoord 14, 6, vBGMap
|
|
call Func_28d71
|
|
pop de
|
|
inc de
|
|
inc de
|
|
inc de
|
|
inc de
|
|
inc de
|
|
hlCoord 16, 7, vBGMap
|
|
ldh a, [rLCDC]
|
|
bit 7, a
|
|
jr nz, .asm_28a7a
|
|
ld a, [de]
|
|
ld [hl], a
|
|
ret
|
|
|
|
.asm_28a7a
|
|
ld a, [de]
|
|
call PutTileInVRAM
|
|
ret
|
|
|
|
BlankPokemonTileData_28a7f:
|
|
db $FF, $FF, $72, $FF
|
|
db $00 ; terminator
|
|
|
|
db $FF, $FF, $FF, $FF
|
|
db $00 ; terminator
|
|
|
|
db $83 ; tile id
|
|
|
|
Func_28a8a: ; 0x28a8a
|
|
ld a, [wPokedexOffset]
|
|
ld c, a
|
|
ld b, $6
|
|
.asm_28a90
|
|
push bc
|
|
ld a, c
|
|
sla a
|
|
and $1e
|
|
ld e, a
|
|
ld d, $0
|
|
ld hl, BGMapLocations_287c7
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, c
|
|
call Func_28aaa
|
|
pop bc
|
|
inc c
|
|
dec b
|
|
jr nz, .asm_28a90
|
|
ret
|
|
|
|
Func_28aaa: ; 0x28aaa
|
|
push hl
|
|
ld c, a
|
|
ld b, $0
|
|
ld h, b
|
|
ld l, c
|
|
sla l
|
|
rl h
|
|
add hl, bc
|
|
sla l
|
|
rl h
|
|
add hl, bc
|
|
sla l
|
|
rl h
|
|
add hl, bc
|
|
ld bc, PokedexMonAttributesTexts
|
|
add hl, bc
|
|
ld d, h
|
|
ld e, l
|
|
ld a, $23
|
|
ld [wd865], a
|
|
pop hl
|
|
push hl
|
|
call Func_28d71
|
|
pop hl
|
|
ret
|
|
|
|
Func_28ad1: ; 0x28ad1
|
|
ld a, [wPokedexOffset]
|
|
swap a
|
|
and $f0
|
|
sub $3c
|
|
ldh [hNextFrameHBlankSCX], a
|
|
ret
|
|
|
|
DrawSummaryWindowMonImage: ; 0x28add
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, wPokedexFlags
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
jp z, LoadUncaughtPokemonBackgroundGfx
|
|
dec a
|
|
jp z, LoadSeenPokemonGfx
|
|
ld a, [wPokedexStartButtonIsPressed]
|
|
and a
|
|
jr z, .asm_28afc
|
|
call CheckIfMonHasAnimation
|
|
jp z, PlayMonPokedexCatchAnimation
|
|
.asm_28afc
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
sla c
|
|
rl b
|
|
add c
|
|
ld c, a
|
|
jr nc, .asm_28b0b
|
|
inc b
|
|
.asm_28b0b
|
|
push bc
|
|
ld hl, MonBillboardPicPointers
|
|
add hl, bc
|
|
ld a, Bank(MonBillboardPicPointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld c, a
|
|
ld a, Bank(MonBillboardPicPointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld b, a
|
|
ld a, Bank(MonBillboardPicPointers)
|
|
call ReadByteFromBank
|
|
ld h, b
|
|
ld l, c
|
|
ld de, vTilesBG tile $00
|
|
ld bc, $0180
|
|
call LoadOrCopyVRAMData
|
|
call Func_28cd4
|
|
pop bc
|
|
ldh a, [hGameBoyColorFlag]
|
|
and a
|
|
ret z
|
|
push bc
|
|
ld hl, MonBillboardPaletteMapPointers
|
|
add hl, bc
|
|
ld a, Bank(MonBillboardPaletteMapPointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld e, a
|
|
ld a, Bank(MonBillboardPaletteMapPointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld d, a
|
|
ld a, Bank(MonBillboardPaletteMapPointers)
|
|
call ReadByteFromBank
|
|
hlCoord 1, 3, vBGMap
|
|
call LoadBillboardPaletteMap
|
|
pop bc
|
|
ld hl, MonBillboardPalettePointers
|
|
add hl, bc
|
|
ld a, Bank(MonBillboardPalettePointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld e, a
|
|
ld a, Bank(MonBillboardPalettePointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld d, a
|
|
ld a, Bank(MonBillboardPalettePointers)
|
|
call ReadByteFromBank
|
|
ld bc, $10b0
|
|
ld hl, rBGPI
|
|
call Func_8e1
|
|
ret
|
|
|
|
LoadUncaughtPokemonBackgroundGfx: ; 0x28b76
|
|
ld a, BANK(UncaughtPokemonBackgroundPic)
|
|
ld hl, UncaughtPokemonBackgroundPic
|
|
ld de, vTilesBG tile $00
|
|
ld bc, $0180
|
|
call LoadOrCopyVRAMData
|
|
call Func_28cd4
|
|
ldh a, [hGameBoyColorFlag]
|
|
and a
|
|
ret z
|
|
ld a, BANK(UncaughtPokemonPaletteMap)
|
|
ld de, UncaughtPokemonPaletteMap
|
|
hlCoord 1, 3, vBGMap
|
|
call LoadBillboardPaletteMap
|
|
ret
|
|
|
|
UncaughtPokemonPaletteMap:
|
|
db $05, $05, $05, $05, $05, $05
|
|
db $05, $05, $05, $05, $05, $05
|
|
db $05, $05, $05, $05, $05, $05
|
|
db $05, $05, $05, $05, $05, $05
|
|
|
|
LoadSeenPokemonGfx: ; 0x28baf
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
sla c
|
|
rl b
|
|
add c
|
|
ld c, a
|
|
jr nc, .asm_28bbe
|
|
inc b
|
|
.asm_28bbe
|
|
ld hl, MonBillboardPicPointers
|
|
add hl, bc
|
|
ld a, Bank(MonBillboardPicPointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld c, a
|
|
ld a, Bank(MonBillboardPicPointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld b, a
|
|
ld a, Bank(MonBillboardPicPointers)
|
|
call ReadByteFromBank
|
|
ld hl, $0180
|
|
add hl, bc
|
|
ld de, vTilesBG tile $00
|
|
ld bc, $0180
|
|
call LoadOrCopyVRAMData
|
|
call Func_28cd4
|
|
ldh a, [hGameBoyColorFlag]
|
|
and a
|
|
ret z
|
|
ld a, BANK(UncaughtPokemonPaletteMap)
|
|
ld de, UncaughtPokemonPaletteMap
|
|
hlCoord 1, 3, vBGMap
|
|
call LoadBillboardPaletteMap
|
|
ret
|
|
|
|
PlayMonPokedexCatchAnimation: ; 0x28bf5
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
sla c
|
|
rl b
|
|
add c
|
|
ld c, a
|
|
jr nc, .asm_28c04
|
|
inc b
|
|
.asm_28c04
|
|
push bc
|
|
ld a, $1
|
|
ldh [rVBK], a
|
|
ld hl, MonAnimatedPicPointers
|
|
add hl, bc
|
|
ld a, Bank(MonAnimatedPicPointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld c, a
|
|
ld a, Bank(MonAnimatedPicPointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld b, a
|
|
ld a, Bank(MonAnimatedPicPointers)
|
|
call ReadByteFromBank
|
|
ld h, b
|
|
ld l, c
|
|
ld de, vTilesOB
|
|
ld bc, $0300
|
|
call LoadOrCopyVRAMData
|
|
xor a
|
|
ldh [rVBK], a
|
|
pop bc
|
|
push bc
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, CatchemMonIds
|
|
add hl, bc
|
|
ld a, BANK(CatchemMonIds)
|
|
call ReadByteFromBank
|
|
ld c, a
|
|
ld b, $0
|
|
sla c
|
|
rl b
|
|
add c
|
|
ld c, a
|
|
jr nc, .asm_28c4b
|
|
inc b
|
|
.asm_28c4b
|
|
ld hl, CatchSpriteFrameDurations
|
|
add hl, bc
|
|
ld a, Bank(CatchSpriteFrameDurations)
|
|
call ReadByteFromBank
|
|
ld [wCurrentCatchMonIdleFrame1Duration], a
|
|
ld [wLoopsUntilNextCatchSpriteAnimationChange], a
|
|
inc hl
|
|
ld a, Bank(CatchSpriteFrameDurations)
|
|
call ReadByteFromBank
|
|
ld [wCurrentCatchMonIdleFrame2Duration], a
|
|
inc hl
|
|
ld a, Bank(CatchSpriteFrameDurations)
|
|
call ReadByteFromBank
|
|
ld [wCurrentCatchMonHitFrameDuration], a
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, MonAnimatedSpriteTypes
|
|
add hl, bc
|
|
ld a, Bank(MonAnimatedSpriteTypes)
|
|
call ReadByteFromBank
|
|
ld [wCurrentAnimatedMonSpriteType], a
|
|
ld [wCurrentAnimatedMonSpriteFrame], a
|
|
call Func_28cf8
|
|
pop bc
|
|
ldh a, [hGameBoyColorFlag]
|
|
and a
|
|
ret z
|
|
ld hl, MonAnimatedPalettePointers
|
|
add hl, bc
|
|
ld a, Bank(MonAnimatedPalettePointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld e, a
|
|
ld a, Bank(MonAnimatedPalettePointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
ld d, a
|
|
ld a, Bank(MonAnimatedPalettePointers)
|
|
call ReadByteFromBank
|
|
push af
|
|
push de
|
|
ld bc, $10b0
|
|
ld hl, rBGPI
|
|
call Func_8e1
|
|
pop de
|
|
pop af
|
|
push af
|
|
ld bc, $08d8
|
|
ld hl, rOBPI
|
|
call Func_8e1
|
|
pop af
|
|
ld bc, $08e8
|
|
ld hl, rOBPI
|
|
call Func_8e1
|
|
ret
|
|
|
|
CheckIfMonHasAnimation: ; 0x28cc2
|
|
ld a, [wCurPokedexIndex]
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, MonAnimatedSpriteTypes
|
|
add hl, bc
|
|
ld a, Bank(MonAnimatedSpriteTypes)
|
|
call ReadByteFromBank
|
|
bit 7, a ; if true, this Pokemon does not have an animation
|
|
ret
|
|
|
|
Func_28cd4: ; 0x28cd4
|
|
xor a
|
|
ld hl, wd961
|
|
cp [hl]
|
|
ret z
|
|
ld [hl], a
|
|
ld de, .data_28ce0
|
|
jr Func_28d1d
|
|
|
|
.data_28ce0: ; 0x28ce0
|
|
db $0
|
|
db $1
|
|
db $2
|
|
db $3
|
|
db $4
|
|
db $5
|
|
db $6
|
|
db $7
|
|
db $8
|
|
db $9
|
|
db $a
|
|
db $b
|
|
db $c
|
|
db $d
|
|
db $e
|
|
db $f
|
|
db $10
|
|
db $11
|
|
db $12
|
|
db $13
|
|
db $14
|
|
db $15
|
|
db $16
|
|
db $17
|
|
|
|
Func_28cf8: ; 0x28cf8
|
|
ld a, $1
|
|
ld hl, wd961
|
|
cp [hl]
|
|
ret z
|
|
ld [hl], a
|
|
ld de, .data_28d05
|
|
jr Func_28d1d
|
|
|
|
.data_28d05
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
db $fe
|
|
|
|
Func_28d1d:
|
|
hlCoord 1, 3, vBGMap
|
|
ld b, $4
|
|
.asm_28d22
|
|
ld c, $6
|
|
.asm_28d24
|
|
ld a, [de]
|
|
call PutTileInVRAM
|
|
inc de
|
|
inc hl
|
|
dec c
|
|
jr nz, .asm_28d24
|
|
ld a, l
|
|
add $1a
|
|
ld l, a
|
|
dec b
|
|
jr nz, .asm_28d22
|
|
ret
|
|
|
|
CountNumSeenOwnedMons: ; 0x28d35
|
|
ld hl, wPokedexFlags
|
|
ld de, $0000 ; keep a running count: d = owned, e = seen
|
|
ld b, NUM_POKEMON
|
|
.checkSeen
|
|
bit BIT_POKEDEX_MON_SEEN, [hl]
|
|
jr z, .checkOwned
|
|
inc e
|
|
.checkOwned
|
|
bit BIT_POKEDEX_MON_CAUGHT, [hl]
|
|
jr z, .nextMon
|
|
inc d
|
|
.nextMon
|
|
inc hl
|
|
dec b
|
|
jr nz, .checkSeen
|
|
push de
|
|
ld a, d
|
|
call ConvertHexByteToDecWord
|
|
ld a, e
|
|
ld [wNumPokemonSeen], a
|
|
ld a, d
|
|
ld [wNumPokemonSeen + 1], a
|
|
pop de
|
|
ld a, e
|
|
call ConvertHexByteToDecWord
|
|
ld a, e
|
|
ld [wNumPokemonOwned], a
|
|
ld a, d
|
|
ld [wNumPokemonOwned + 1], a
|
|
ret
|
|
|
|
ClearPokedexData: ; 0x28d66
|
|
ld hl, wPokedexFlags
|
|
xor a
|
|
ld b, NUM_POKEMON
|
|
.asm_28d6c
|
|
ld [hli], a
|
|
dec b
|
|
jr nz, .asm_28d6c
|
|
ret
|
|
|
|
Func_28d71: ; 0x28d71
|
|
ld a, [wd865]
|
|
ld c, a
|
|
ld a, [de]
|
|
inc de
|
|
and a
|
|
ret z
|
|
cp $20
|
|
jr nz, .asm_28d81
|
|
ld a, $ff
|
|
jr .asm_28d82
|
|
|
|
.asm_28d81
|
|
add c
|
|
.asm_28d82
|
|
call Func_28d88
|
|
inc hl
|
|
jr Func_28d71
|
|
|
|
Func_28d88: ; 0x28d88
|
|
push af
|
|
ldh a, [rLCDC]
|
|
bit 7, a
|
|
jr nz, .asm_28d92
|
|
pop af
|
|
ld [hl], a
|
|
ret
|
|
|
|
.asm_28d92
|
|
pop af
|
|
call PutTileInVRAM
|
|
ret
|
|
|
|
LoadPokemonDescriptionVWFCharacterTiles: ; 0x28d97
|
|
push de
|
|
ld a, b
|
|
ldh [hVariableWidthFontFF8C], a
|
|
ldh [hVariableWidthFontFF8D], a
|
|
ld a, c
|
|
ldh [hVariableWidthFontFF8F], a
|
|
xor a
|
|
ldh [hVariableWidthFontFF8E], a
|
|
ldh [hVariableWidthFontFF90], a
|
|
ldh [hVariableWidthFontFF91], a
|
|
call Func_28e73 ; function zeros out a large chunk of memory
|
|
.asm_28daa
|
|
call PokedexDescriptionVWFCharacterMapping
|
|
jr nc, .asm_28dcb
|
|
push hl
|
|
ldh [hVariableWidthFontFF92], a
|
|
cp $ff
|
|
jr nz, .asm_28dbb
|
|
call Func_208c
|
|
jr .asm_28dc8
|
|
|
|
.asm_28dbb
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, CharacterWidths
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ldh [hVariableWidthFontFF93], a
|
|
call LoadDexVWFCharacter
|
|
.asm_28dc8
|
|
pop hl
|
|
jr nc, .asm_28daa
|
|
.asm_28dcb
|
|
pop de
|
|
push af
|
|
ld a, e
|
|
ld [wd863], a
|
|
ld a, d
|
|
ld [wd864], a
|
|
ld a, [wd862]
|
|
and a
|
|
jr nz, .asm_28ddd
|
|
pop af
|
|
ret
|
|
|
|
.asm_28ddd
|
|
push hl
|
|
ld a, [wd861]
|
|
ld c, a
|
|
ld b, $0
|
|
bit 7, c ; `c` is always either 0 or 4, hence this always sets the zero flag
|
|
jr z, .asm_28de9
|
|
dec b
|
|
.asm_28de9
|
|
ld hl, wPokedexFontBuffer
|
|
add hl, bc
|
|
ldh a, [hVariableWidthFontFF8F]
|
|
ld c, a
|
|
ld b, $0
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
xor a
|
|
call LoadOrCopyVRAMData
|
|
pop hl
|
|
pop af
|
|
ret
|
|
|
|
LoadPokemonNameVWFCharacterTiles: ; 0x28e09
|
|
push de
|
|
ld a, b
|
|
ldh [hVariableWidthFontFF8C], a
|
|
ldh [hVariableWidthFontFF8D], a
|
|
ld a, c
|
|
ldh [hVariableWidthFontFF8F], a
|
|
xor a
|
|
ldh [hVariableWidthFontFF8E], a
|
|
ldh [hVariableWidthFontFF90], a
|
|
ldh [hVariableWidthFontFF91], a
|
|
call Func_28e73
|
|
.asm_28e1c
|
|
call Func_295e1
|
|
jr nc, .asm_28e35
|
|
push hl
|
|
ldh [hVariableWidthFontFF92], a
|
|
ld c, a
|
|
ld b, $0
|
|
ld hl, CharacterWidths
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ldh [hVariableWidthFontFF93], a
|
|
call LoadDexVWFCharacter
|
|
pop hl
|
|
jr nc, .asm_28e1c
|
|
nop
|
|
.asm_28e35
|
|
pop de
|
|
push af
|
|
ld a, e
|
|
ld [wd863], a
|
|
ld a, d
|
|
ld [wd864], a
|
|
ld a, [wd862]
|
|
and a
|
|
jr nz, .asm_28e47
|
|
pop af
|
|
ret
|
|
|
|
.asm_28e47
|
|
push hl
|
|
ld a, [wd861]
|
|
ld c, a
|
|
ld b, $0
|
|
bit 7, c
|
|
jr z, .asm_28e53
|
|
dec b
|
|
.asm_28e53
|
|
ld hl, wPokedexFontBuffer
|
|
add hl, bc
|
|
ldh a, [hVariableWidthFontFF8F]
|
|
ld c, a
|
|
ld b, $0
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
xor a
|
|
call LoadOrCopyVRAMData
|
|
pop hl
|
|
pop af
|
|
ret
|
|
|
|
; Appears to select a certain amount of memory that will get zeroed out.
|
|
Func_28e73: ; 0x28e73
|
|
push hl
|
|
ldh a, [hVariableWidthFontFF8F]
|
|
; `a` in this function always contains either $0A, $16, or $6c
|
|
; compute 16*a and stores it as `bc`.
|
|
ld c, a
|
|
ld b, $0
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
sla c
|
|
rl b
|
|
ld hl, Func_29566
|
|
ld a, l
|
|
sub c
|
|
ld l, a
|
|
ld a, h
|
|
sbc b
|
|
ld h, a
|
|
; When we `push hl`, this will be the address that we will return to when `ret` is called.
|
|
; Specifically, the address should occur somewhere in `Func_28e9a` or `Func_29566`, basically,
|
|
; indicating how many memory locations we should zero out.
|
|
push hl
|
|
ld hl, wc000
|
|
ld a, [wd860]
|
|
ret
|
|
|
|
Func_28e9a:
|
|
REPT 20 * 87
|
|
ld [hli], a
|
|
ENDR
|
|
Func_29566:
|
|
REPT 20
|
|
ld [hli], a
|
|
ENDR
|
|
pop hl
|
|
ret
|
|
|
|
; This function takes in the character ID and performs some kind of mapping on it.
|
|
; Not exactly sure why. Need to research more.
|
|
PokedexDescriptionVWFCharacterMapping: ; 0x2957c
|
|
ld a, BANK(PokedexDescriptionPointers)
|
|
call ReadByteFromBank
|
|
inc hl
|
|
and a
|
|
ret z
|
|
cp $d ; carriage return
|
|
jr nz, .checkNumericCharacter
|
|
ld a, $ff
|
|
scf
|
|
ret
|
|
|
|
.checkNumericCharacter
|
|
cp '0'
|
|
jr c, .checkUpperCaseCharacter
|
|
cp '9' + 1
|
|
jr c, .asm_295be
|
|
.checkUpperCaseCharacter
|
|
cp 'A'
|
|
jr c, .checkLowerCaseCharacter
|
|
cp 'Z' + 1
|
|
jr c, .asm_295c2
|
|
.checkLowerCaseCharacter
|
|
cp 'a'
|
|
jr c, .checkSpecialCharacter
|
|
cp 'z' + 1
|
|
jr c, .asm_295c6
|
|
.checkSpecialCharacter
|
|
cp ' '
|
|
jr z, .asm_295ca
|
|
cp ','
|
|
jr z, .asm_295cd
|
|
cp '.'
|
|
jr z, .asm_295d1
|
|
cp '`'
|
|
jr z, .asm_295d5
|
|
cp '-'
|
|
jr z, .asm_295d9
|
|
cp 'é'
|
|
jr z, .asm_295dd
|
|
and a
|
|
ret
|
|
|
|
.asm_295be
|
|
sub $88
|
|
scf
|
|
ret
|
|
|
|
.asm_295c2
|
|
sub $8e
|
|
scf
|
|
ret
|
|
|
|
.asm_295c6
|
|
sub $94
|
|
scf
|
|
ret
|
|
|
|
.asm_295ca
|
|
xor a
|
|
scf
|
|
ret
|
|
|
|
.asm_295cd
|
|
ld a, $f3
|
|
scf
|
|
ret
|
|
|
|
.asm_295d1
|
|
ld a, $f4
|
|
scf
|
|
ret
|
|
|
|
.asm_295d5
|
|
ld a, $fa
|
|
scf
|
|
ret
|
|
|
|
.asm_295d9
|
|
ld a, $b2
|
|
scf
|
|
ret
|
|
|
|
.asm_295dd
|
|
ld a, $f9
|
|
scf
|
|
ret
|
|
|
|
Func_295e1: ; 0x295e1
|
|
ld a, [hli]
|
|
and a
|
|
ret z
|
|
cp $80
|
|
jr nc, .asm_295ed
|
|
ld c, a
|
|
ld b, $0
|
|
jr .asm_295f0
|
|
|
|
.asm_295ed
|
|
ld b, a
|
|
ld a, [hli]
|
|
ld c, a
|
|
.asm_295f0
|
|
ld a, b
|
|
and a
|
|
jr nz, .asm_295f9
|
|
ld a, c
|
|
sub $20
|
|
scf
|
|
ret
|
|
|
|
.asm_295f9
|
|
push hl
|
|
call GetCharacterWidthIndex
|
|
ld c, a
|
|
ld b, $0
|
|
add hl, bc
|
|
ld a, [hl]
|
|
pop hl
|
|
scf
|
|
ret
|
|
|
|
GetCharacterWidthIndex: ; 0x29605
|
|
ld a, b
|
|
cp $81
|
|
jr nz, .asm_29611
|
|
ld hl, CharacterWidthIndices1
|
|
ld a, c
|
|
sub $40
|
|
ret
|
|
|
|
.asm_29611
|
|
cp $83
|
|
jr nz, .asm_2961c
|
|
ld hl, CharacterWidthIndices3
|
|
ld a, c
|
|
sub $40
|
|
ret
|
|
|
|
.asm_2961c
|
|
ld a, c
|
|
cp $9f
|
|
jr nc, .asm_29628
|
|
ld hl, CharacterWidthIndices2
|
|
ld a, c
|
|
sub $4f
|
|
ret
|
|
|
|
.asm_29628
|
|
ld hl, CharacterWidthIndices4
|
|
ld a, c
|
|
sub $9f
|
|
ret
|
|
|
|
INCLUDE "data/vwf_character_widths.asm"
|
|
INCLUDE "text/pokedex_mon_names.asm"
|
|
INCLUDE "data/mon_species.asm"
|
|
INCLUDE "text/pokedex_species.asm"
|
|
INCLUDE "text/pokedex_mon_attributes.asm"
|
|
INCLUDE "data/dex_scroll_offsets.asm"
|