shithub: pokecrystal

ref: efee40447ef4bce70cb97fa9c653fe350af000d1
dir: /engine/pokedex.asm/

View raw version

Pokedex: ; 40000

	ld a, [hWX]
	ld l, a
	ld a, [hWY]
	ld h, a
	push hl
	ld a, [hSCX]
	push af
	ld hl, Options
	ld a, [hl]
	push af
	set NO_TEXT_SCROLL, [hl]
	ld a, [VramState]
	push af
	xor a
	ld [VramState], a
	ld a, [hInMenu]
	push af
	ld a, $1
	ld [hInMenu], a

	xor a
	ld [hMapAnims], a
	call InitPokedex
	call DelayFrame

.main
	call JoyTextDelay
	ld a, [wJumptableIndex]
	bit 7, a
	jr nz, .exit
	call Pokedex_Main
	call DelayFrame
	jr .main

.exit
	ld de, SFX_READ_TEXT_2
	call PlaySFX
	call WaitSFX
	call ClearSprites
	ld a, [wCurrentDexMode]
	ld [wLastDexMode], a

	pop af
	ld [hInMenu], a
	pop af
	ld [VramState], a
	pop af
	ld [Options], a
	pop af
	ld [hSCX], a
	pop hl
	ld a, l
	ld [hWX], a
	ld a, h
	ld [hWY], a
	ret
; 40063

InitPokedex: ; 40063
	call ClearBGPalettes
	call ClearSprites
	call ClearTileMap
	call Pokedex_LoadGFX

	ld hl, wPokedexDataStart
	ld bc, wPokedexDataEnd - wPokedexDataStart
	xor a
	call ByteFill

	xor a
	ld [wJumptableIndex], a
	ld [wcf64], a
	ld [wcf65], a
	ld [wcf66], a

	call Pokedex_CheckUnlockedUnownMode

	ld a, [wLastDexMode]
	ld [wCurrentDexMode], a

	call Pokedex_ChangeMode
	call Pokedex_InitCursorPosition
	call Pokedex_GetLandmark
	callba Function1de247
	call Pokedex_ResetBGMapMode
	ret
; 400a2

Pokedex_CheckUnlockedUnownMode: ; 400a2
	ld a, [StatusFlags]
	bit 1, a
	jr nz, .unlocked

	xor a
	ld [wUnlockedUnownMode], a
	ret

.unlocked
	ld a, TRUE
	ld [wUnlockedUnownMode], a
	ret
; 400b4

Pokedex_InitCursorPosition: ; 400b4
	ld hl, wPokedexDataStart
	ld a, [wLastDexEntry]
	and a
	jr z, .done
	cp NUM_POKEMON + 1
	jr nc, .done

	ld b, a
	ld a, [wDexListingEnd]
	cp $8
	jr c, .only_one_page

	sub $7
	ld c, a
.loop1
	ld a, b
	cp [hl]
	jr z, .done
	inc hl
	ld a, [wDexListingPage]
	inc a
	ld [wDexListingPage], a
	dec c
	jr nz, .loop1

.only_one_page
	ld c, $7
.loop2
	ld a, b
	cp [hl]
	jr z, .done
	inc hl
	ld a, [wDexListingCursor]
	inc a
	ld [wDexListingCursor], a
	dec c
	jr nz, .loop2

.done
	ret
; 400ed

Pokedex_GetLandmark: ; 400ed
	ld a, [MapGroup]
	ld b, a
	ld a, [MapNumber]
	ld c, a
	call GetWorldMapLocation

	cp SPECIAL_MAP
	jr nz, .load

	ld a, [BackupMapGroup]
	ld b, a
	ld a, [BackupMapNumber]
	ld c, a
	call GetWorldMapLocation

.load
	ld [wDexCurrentLocation], a
	ret
; 4010b

Pokedex_Main: ; 4010b
	ld a, [wJumptableIndex]
	ld hl, .Jumptable
	call Pokedex_LoadPointer
	jp [hl]
; 40115


.Jumptable: ; 40115 (10:4115)
	dw Function4013c
	dw Function401ae
	dw Function40217
	dw Function40258
	dw Function402aa
	dw Function40443
	dw Function40471
	dw Function4039d
	dw Function403be
	dw Function4050a
	dw Function40562
	dw Pokedex_UnownMode ; Unown Dex
	dw Function405df
	dw Pokedex_CloseDex ; Exit


Pokedex_IncrementDexPointer: ; 40131 (10:4131)
	ld hl, wJumptableIndex
	inc [hl]
	ret

Pokedex_CloseDex: ; 40136 (10:4136)
	ld hl, wJumptableIndex
	set 7, [hl]
	ret

Function4013c: ; 4013c (10:413c)
	xor a
	ld [hBGMapMode], a
	call ClearSprites
	xor a
	hlcoord 0, 0, AttrMap
	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
	call ByteFill
	callba DrawPokedexListWindow
	hlcoord 0, 17
	ld de, String_START_SEARCH
	call Pokedex_PlaceString
	ld a, $7
	ld [wc7d3], a
	call Function40b0f
	call Pokedex_SetBGMapMode_3ifDMG_4ifCGB
	call Pokedex_ResetBGMapMode
	call Function4074c
	ld a, $5
	ld [hSCX], a

	ld a, [wCurrentDexMode]
	cp DEXMODE_OLD
	ld a, $4a
	jr z, .okay
	ld a, $47
.okay
	ld [hWX], a
	xor a
	ld [hWY], a
	call WaitBGMap

	call Pokedex_ResetBGMapMode
	ld a, -1
	ld [CurPartySpecies], a
	ld a, $4
	call Function41423
	call Function41148
	callba DrawPokedexListWindow
	hlcoord 0, 17
	ld de, String_START_SEARCH
	call Pokedex_PlaceString
	ld a, $7
	ld [wc7d3], a
	call Function40b0f
	call Pokedex_IncrementDexPointer
	ret

Function401ae: ; 401ae (10:41ae)
	ld hl, hJoyPressed ; $ffa7
	ld a, [hl]
	and B_BUTTON
	jr nz, .b
	ld a, [hl]
	and A_BUTTON
	jr nz, .a
	ld a, [hl]
	and SELECT
	jr nz, .select
	ld a, [hl]
	and START
	jr nz, .start
	call Function406c5
	ret nc
	call Function41148
	xor a
	ld [hBGMapMode], a
	call Function40b0f
	call Pokedex_SetBGMapMode3
	call Pokedex_ResetBGMapMode
	ret

.a
	call Pokedex_GetMonAtCursorPosition
	call Pokedex_CheckSeen
	ret z
	ld a, $2
	ld [wJumptableIndex], a
	ld a, $0
	ld [wcf64], a
	ret

.select
	call Function41401
	ld a, $7
	ld [wJumptableIndex], a
	xor a
	ld [hSCX], a
	ld a, $a7
	ld [hWX], a
	call DelayFrame
	ret

.start
	call Function41401
	ld a, $5
	ld [wJumptableIndex], a
	xor a
	ld [hSCX], a
	ld a, $a7
	ld [hWX], a
	call DelayFrame
	ret

.b
	ld a, $d
	ld [wJumptableIndex], a
	ret

Function40217: ; 40217 (10:4217)
	call LowVolume
	xor a
	ld [wPokedexStatus], a
	xor a
	ld [hBGMapMode], a
	call ClearSprites
	call Pokedex_LoadCurrentFootprint
	call Function407fd
	call Function4134f
	call Pokedex_GetMonAtCursorPosition
	ld [wLastDexEntry], a
	callba DisplayDexEntry
	call Pokedex_DrawFootprint
	call WaitBGMap
	ld a, $a7
	ld [hWX], a
	call Pokedex_GetMonAtCursorPosition
	ld [CurPartySpecies], a
	ld a, $4
	call Function41423
	ld a, [CurPartySpecies]
	call PlayCry
	call Pokedex_IncrementDexPointer
	ret

Function40258: ; 40258 (10:4258)
	ld de, DexEntryPage_JoypadCoords
	call Function4135a
	ld hl, hJoyPressed ; $ffa7
	ld a, [hl]
	and B_BUTTON
	jr nz, .b
	ld a, [hl]
	and A_BUTTON
	jr nz, .a
	call Pokedex_NextOrPreviousDexEntry
	ret nc
	call Pokedex_IncrementDexPointer
	ret

.a
	ld a, [wc7d8]
	ld hl, DexEntryPage_Jumptable
	call Pokedex_LoadPointer
	jp [hl]

.b
	ld a, [LastVolume]
	and a
	jr z, .max_volume
	ld a, $77
	ld [LastVolume], a

.max_volume
	call MaxVolume
	ld a, [wcf64]
	ld [wJumptableIndex], a
	ret
; 40292 (10:4292)

Pokedex_Page: ; 40292
	ld a, [wPokedexStatus]
	xor $1
	ld [wPokedexStatus], a
	call Pokedex_GetMonAtCursorPosition
	ld [wLastDexEntry], a
	callba DisplayDexEntry
	call WaitBGMap
	ret
; 402aa

Function402aa: ; 402aa (10:42aa)
	call Function41401
	xor a
	ld [wPokedexStatus], a
	xor a
	ld [hBGMapMode], a
	call Function407fd
	call Function4134f
	call Pokedex_LoadCurrentFootprint
	call Pokedex_GetMonAtCursorPosition
	ld [wLastDexEntry], a
	callba DisplayDexEntry
	call Pokedex_DrawFootprint
	call Function4143b
	call WaitBGMap
	call Pokedex_GetMonAtCursorPosition
	ld [CurPartySpecies], a
	ld a, $4
	call Function41423
	ld a, [CurPartySpecies]
	call PlayCry
	ld hl, wJumptableIndex
	dec [hl]
	ret
; 402e8 (10:42e8)

DexEntryPage_JoypadCoords: ; 402e8
	db D_RIGHT | D_LEFT, 4
	dwcoord 1, 17
	dwcoord 6, 17
	dwcoord 11, 17
	dwcoord 15, 17

; 402f2

DexEntryPage_Jumptable: ; 402f2
	dw Pokedex_Page
	dw .Area
	dw .Cry
	dw .Print
; 402fa

.Area: ; 402fa
	call Function41401
	xor a
	ld [hSCX], a
	call DelayFrame
	ld a, $7
	ld [hWX], a
	ld a, $90
	ld [hWY], a
	call Pokedex_GetMonAtCursorPosition
	ld a, [wDexCurrentLocation]
	ld e, a
	predef _Area
	call Function41401
	call DelayFrame
	xor a
	ld [hBGMapMode], a
	ld a, $90
	ld [hWY], a
	ld a, $5
	ld [hSCX], a
	call DelayFrame
	call Function4038d
	call Function4143b
	call WaitBGMap
	call Pokedex_GetMonAtCursorPosition
	ld [CurPartySpecies], a
	ld a, $4
	call Function41423
	ret
; 40340

.Cry: ; 40340
	call Pokedex_GetMonAtCursorPosition
	ld a, [wd265]
	call GetCryIndex
	ld e, c
	ld d, b
	call PlayCryHeader
	ret
; 4034f

.Print: ; 4034f
	call Function41415
	xor a
	ld [hSCX], a
	ld a, [wcf65]
	push af
	ld a, [wcf64]
	push af
	ld a, [wJumptableIndex]
	push af
	callba PrintDexEntry
	pop af
	ld [wJumptableIndex], a
	pop af
	ld [wcf64], a
	pop af
	ld [wcf65], a
	call ClearBGPalettes
	call DisableLCD
	call Pokedex_LoadInvertedFont
	call Function4038d
	call EnableLCD
	call WaitBGMap
	ld a, $5
	ld [hSCX], a
	call Function41427
	ret
; 4038d

Function4038d: ; 4038d
	call Function407fd
	call Pokedex_GetMonAtCursorPosition
	callba DisplayDexEntry
	call Pokedex_DrawFootprint
	ret
; 4039d

Function4039d: ; 4039d (10:439d)
	xor a
	ld [hBGMapMode], a
	call ClearSprites
	call Function4087c
	call Function4134f
	ld a, [wCurrentDexMode]
	ld [wc7d8], a
	call Function40e5b
	call WaitBGMap
	ld a, $10
	call Function41423
	call Pokedex_IncrementDexPointer
	ret

Function403be: ; 403be (10:43be)
	ld a, [wUnlockedUnownMode]
	and a
	jr nz, .asm_403c9
	ld de, Unknown_403f3
	jr .asm_403cc

.asm_403c9
	ld de, Unknown_403fb
.asm_403cc
	call Function4135a
	call c, Function40e5b
	ld hl, hJoyPressed ; $ffa7
	ld a, [hl]
	and $6
	jr nz, .asm_403ea
	ld a, [hl]
	and $1
	jr nz, .asm_403e0
	ret

.asm_403e0
	ld a, [wc7d8]
	ld hl, Jumptable_40405
	call Pokedex_LoadPointer
	jp [hl]

.asm_403ea
	call Function41401
	ld a, $0
	ld [wJumptableIndex], a
	ret
; 403f3 (10:43f3)

Unknown_403f3: ; 403f3
	db D_UP | D_DOWN, 3
	dwcoord 2,  4
	dwcoord 2,  6
	dwcoord 2,  8
; 403fb

Unknown_403fb: ; 403fb
	db D_UP | D_DOWN, 4
	dwcoord 2,  4
	dwcoord 2,  6
	dwcoord 2,  8
	dwcoord 2, 10
; 40405

Jumptable_40405: ; 40405 (10:4405)
	dw Function4040d
	dw Function40411
	dw Function40415
	dw Function4043a
; 4040d

Function4040d: ; 4040d (10:440d)
	ld b, $0
	jr Function40417

Function40411: ; 40411 (10:4411)
	ld b, $1
	jr Function40417

Function40415: ; 40415 (10:4415)
	ld b, $2
Function40417: ; 40417 (10:4417)
	ld a, [wCurrentDexMode]
	cp b
	jr z, .asm_40431
	ld a, b
	ld [wCurrentDexMode], a
	call Pokedex_ChangeMode
	call Function40f08
	xor a
	ld [wDexListingPage], a
	ld [wDexListingCursor], a
	call Pokedex_InitCursorPosition

.asm_40431
	call Function41401
	ld a, $0
	ld [wJumptableIndex], a
	ret

Function4043a: ; 4043a (10:443a)
	call Function41401
	ld a, $b
	ld [wJumptableIndex], a
	ret

Function40443: ; 40443 (10:4443)
	xor a
	ld [hBGMapMode], a
	call ClearSprites
	call Function408f0
	call Function4134f
	ld a, $1
	ld [wc7d5], a
	xor a
	ld [wc7d6], a
	call Function40fa8
	xor a
	ld [wDexSearchSlowpokeFrame], a
	callba DoDexSearchSlowpokeFrame
	call WaitBGMap
	ld a, $10
	call Function41423
	call Pokedex_IncrementDexPointer
	ret

Function40471: ; 40471 (10:4471)
	ld de, Unknown_4049e
	call Function4135a
	call Function40f4f
	call c, Function40fa8
	ld hl, hJoyPressed ; $ffa7
	ld a, [hl]
	and START | B_BUTTON
	jr nz, .asm_40495
	ld a, [hl]
	and A_BUTTON
	jr nz, .asm_4048b
	ret

.asm_4048b
	ld a, [wc7d8]
	ld hl, Jumptable_404a8
	call Pokedex_LoadPointer
	jp [hl]

.asm_40495
	call Function41401
	ld a, $0
	ld [wJumptableIndex], a
	ret
; 4049e (10:449e)

Unknown_4049e: ; 4049e
	db D_UP | D_DOWN, 4
	dwcoord 2, 4
	dwcoord 2, 6
	dwcoord 2, 13
	dwcoord 2, 15
; 404a8

Jumptable_404a8: ; 404a8
	dw Function404b0
	dw Function404b0
	dw Function404b7
	dw Function40501
; 404b0

Function404b0: ; 404b0
	call Function40f84
	call Function40fa8
	ret
; 404b7

Function404b7: ; 404b7
	call Function41086
	callba AnimateDexSearchSlowpoke
	ld a, [wc7d7]
	and a
	jr nz, .asm_404dc
	call Pokedex_ChangeMode
	call Function41107
	xor a
	ld [hBGMapMode], a
	call Function408f0
	call Function4134f
	call Function40fa8
	call WaitBGMap
	ret

.asm_404dc
	ld [wDexListingEnd], a
	ld a, [wDexListingPage]
	ld [wc7e0], a
	ld a, [wDexListingCursor]
	ld [wc7e1], a
	ld a, [wLastDexEntry]
	ld [wcf65], a
	xor a
	ld [wDexListingPage], a
	ld [wDexListingCursor], a
	call Function41401
	ld a, $9
	ld [wJumptableIndex], a
	ret
; 40501

Function40501: ; 40501
	call Function41401
	ld a, $0
	ld [wJumptableIndex], a
	ret
; 4050a

Function4050a: ; 4050a (10:450a)
	xor a
	ld [hBGMapMode], a
	xor a
	hlcoord 0, 0, AttrMap
	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
	call ByteFill
	call Pokedex_SetBGMapMode4
	call Pokedex_ResetBGMapMode
	callba DrawPokedexSearchResultsWindow
	call Function409cf
	ld a, $4
	ld [wc7d3], a
	call Function40b0f
	call Pokedex_SetBGMapMode3
	call Pokedex_ResetBGMapMode
	call Function40962
	ld a, $5
	ld [hSCX], a
	ld a, $4a
	ld [hWX], a
	xor a
	ld [hWY], a
	call WaitBGMap
	call Pokedex_ResetBGMapMode
	callba DrawPokedexSearchResultsWindow
	call Function409cf
	call Function41281
	ld a, $ff
	ld [CurPartySpecies], a
	ld a, $4
	call Function41423
	call Pokedex_IncrementDexPointer
	ret

Function40562: ; 40562 (10:4562)
	ld hl, hJoyPressed ; $ffa7
	ld a, [hl]
	and B_BUTTON
	jr nz, .asm_40595
	ld a, [hl]
	and A_BUTTON
	jr nz, .asm_40583
	call Function406c5
	ret nc
	call Function41281
	xor a
	ld [hBGMapMode], a
	call Function40b0f
	call Pokedex_SetBGMapMode3
	call Pokedex_ResetBGMapMode
	ret

.asm_40583
	call Pokedex_GetMonAtCursorPosition
	call Pokedex_CheckSeen
	ret z
	ld a, $2
	ld [wJumptableIndex], a
	ld a, $9
	ld [wcf64], a
	ret

.asm_40595
	ld a, [wc7e0]
	ld [wDexListingPage], a
	ld a, [wc7e1]
	ld [wDexListingCursor], a
	ld a, [wcf65]
	ld [wLastDexEntry], a
	call Function41401
	call ClearSprites
	call Pokedex_ChangeMode
	ld a, $5
	ld [wJumptableIndex], a
	xor a
	ld [hSCX], a
	ld a, $a7
	ld [hWX], a
	ret

Pokedex_UnownMode: ; 405bd (10:45bd)
	call Pokedex_LoadUnownFont
	call Function409f1
	xor a
	ld [wc7dd], a
	call Function41a58
	call Function40658
	callba PrintUnownWord
	call WaitBGMap
	ld a, $16
	call Function41423
	call Pokedex_IncrementDexPointer
	ret

Function405df: ; 405df (10:45df)
	ld hl, hJoyPressed ; $ffa7
	ld a, [hl]
	and A_BUTTON | B_BUTTON
	jr nz, .a_b
	call Function40610
	ret

.a_b
	call Function41401
	ld a, $7
	ld [wJumptableIndex], a
	call DelayFrame
	call Pokedex_CheckSGB
	jr nz, .decompress
	callba Function1ddf26
	jr .done

.decompress
	ld hl, PokedexLZ
	ld de, VTiles2 tile $31
	lb bc, BANK(PokedexLZ), $3a
	call DecompressRequest2bpp

.done
	ret

Function40610: ; 40610 (10:4610)
	ld hl, hJoyLast
	ld a, [hl]
	and D_RIGHT
	jr nz, .right
	ld a, [hl]
	and D_LEFT
	jr nz, .left
	ret

.right
	ld a, [wc7de]
	ld e, a
	ld hl, wc7dd
	ld a, [hl]
	inc a
	cp e
	ret nc
	ld a, [hl]
	inc [hl]
	jr .update

.left
	ld hl, wc7dd
	ld a, [hl]
	and a
	ret z
	ld a, [hl]
	dec [hl]

.update
	push af
	xor a
	ld [hBGMapMode], a
	pop af
	call Function40654
	call Function41a58
	call Function40658
	callba PrintUnownWord
	ld a, $1
	ld [hBGMapMode], a
	call DelayFrame
	call DelayFrame
	ret

Function40654: ; 40654 (10:4654)
	ld c, $7f
	jr asm_4065d

Function40658: ; 40658 (10:4658)
	ld a, [wc7dd]
	ld c, $5a
asm_4065d: ; 4065d (10:465d)
	ld e, a
	ld d, 0
	ld hl, Unknown_40a3e + 2
rept 4
	add hl, de
endr
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ld [hl], c
	ret

Pokedex_NextOrPreviousDexEntry: ; 4066c (10:466c)
	ld a, [wDexListingCursor]
	ld [wBackupDexListingCursor], a
	ld a, [wDexListingPage]
	ld [wBackupDexListingPage], a
	ld hl, hJoyLast
	ld a, [hl]
	and D_UP
	jr nz, .up
	ld a, [hl]
	and D_DOWN
	jr nz, .down
	and a
	ret

.up
	ld a, [wc7d3]
	ld d, a
	ld a, [wDexListingEnd]
	ld e, a
	call Function406ea
	jr nc, .nope
	call Pokedex_GetMonAtCursorPosition
	call Pokedex_CheckSeen
	jr nz, .yep
	jr .up

.down
	ld a, [wc7d3]
	ld d, a
	ld a, [wDexListingEnd]
	ld e, a
	call Function406fe
	jr nc, .nope
	call Pokedex_GetMonAtCursorPosition
	call Pokedex_CheckSeen
	jr nz, .yep
	jr .down

.yep
	scf
	ret

.nope
	ld a, [wBackupDexListingCursor]
	ld [wDexListingCursor], a
	ld a, [wBackupDexListingPage]
	ld [wDexListingPage], a
	and a
	ret

Function406c5: ; 406c5 (10:46c5)
	ld a, [wc7d3]
	ld d, a
	ld a, [wDexListingEnd]
	ld e, a
	ld hl, hJoyLast
	ld a, [hl]
	and D_UP
	jr nz, Function406ea
	ld a, [hl]
	and D_DOWN
	jr nz, Function406fe
	ld a, d
	cp e
	jr nc, asm_4073d
	ld a, [hl]
	and $20
	jr nz, asm_40716
	ld a, [hl]
	and $10
	jr nz, asm_40728
	jr asm_4073d

Function406ea: ; 406ea (10:46ea)
	ld hl, wDexListingCursor
	ld a, [hl]
	and a
	jr z, .asm_406f4
	dec [hl]
	jr asm_4073f
.asm_406f4
	ld hl, wDexListingPage
	ld a, [hl]
	and a
	jr z, asm_4073d
	dec [hl]
	jr asm_4073f

Function406fe: ; 406fe (10:46fe)
	ld hl, wDexListingCursor
	ld a, [hl]
	inc a
	cp e
	jr nc, asm_4073d
	cp d
	jr nc, .asm_4070c
	inc [hl]
	jr asm_4073f
.asm_4070c
	ld hl, wDexListingPage
	add [hl]
	cp e
	jr nc, asm_4073d
	inc [hl]
	jr asm_4073f
asm_40716: ; 40716 (10:4716)
	ld hl, wDexListingPage
	ld a, [hl]
	and a
	jr z, asm_4073d
	cp d
	jr nc, .asm_40724
	xor a
	ld [hl], a
	jr asm_4073f
.asm_40724
	sub d
	ld [hl], a
	jr asm_4073f
asm_40728: ; 40728 (10:4728)
	ld hl, wDexListingPage
	ld a, d
	add a
	add [hl]
	jr c, .asm_40733
	cp e
	jr c, .asm_40738
.asm_40733
	ld a, e
	sub d
	ld [hl], a
	jr asm_4073f
.asm_40738
	ld a, [hl]
	add d
	ld [hl], a
	jr asm_4073f
asm_4073d: ; 4073d (10:473d)
	and a
	ret
asm_4073f: ; 4073f (10:473f)
	scf
	ret

Function40741: ; 40741
	push de
	ld de, $0014
.asm_40745
	ld [hl], a
	add hl, de
	dec b
	jr nz, .asm_40745
	pop de
	ret
; 4074c


Function4074c: ; 4074c (10:474c)
	hlcoord 0, 17
	ld de, String_START_SEARCH
	call Pokedex_PlaceString
	ld a, $32
	hlcoord 0, 0
	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
	call ByteFill
	hlcoord 0, 0
	lb bc, 7, 7
	call Pokedex_PlaceBorder
	hlcoord 0, 9
	ld bc, $607
	call Pokedex_PlaceBorder
	hlcoord 1, 11
	ld de, String_SEEN
	call Pokedex_PlaceString
	ld hl, PokedexSeen ; wdeb9 (aliases: EndPokedexSeen)
	ld b, EndPokedexSeen - PokedexSeen
	call CountSetBits
	ld de, wd265
	hlcoord 5, 12
	lb bc, 1, 3
	call PrintNum
	hlcoord 1, 14
	ld de, String_OWN
	call Pokedex_PlaceString
	ld hl, PokedexCaught
	ld b, EndPokedexCaught - PokedexCaught
	call CountSetBits
	ld de, wd265
	hlcoord 5, 15
	lb bc, 1, 3
	call PrintNum
	hlcoord 1, 17
	ld de, String_SELECT_OPTION
	call Pokedex_PlaceString
	hlcoord 8, 1
	ld b, $7
	ld a, $5a
	call Function40741
	hlcoord 8, 10
	ld b, $6
	ld a, $5a
	call Function40741
	hlcoord 8, 0
	ld [hl], $59
	hlcoord 8, 8
	ld [hl], $53
	hlcoord 8, 9
	ld [hl], $54
	hlcoord 8, 16
	ld [hl], $5b
	call Pokedex_PlaceFrontpicTopLeftCorner
	ret
; 407e1 (10:47e1)

String_SEEN: ; 407e1
	db "SEEN", $ff
String_OWN: ; 407e6
	db "OWN", $ff
String_SELECT_OPTION: ; 407ea
	db $3b, $48, $49, $4a, $44, $45, $46, $47 ; SELECT > OPTION
String_START_SEARCH: ; 407f2
	db $3c, $3b, $41, $42, $43, $4b, $4c, $4d, $4e, $3c, $ff ; START > SEARCH
; 407fd

Function407fd: ; 407fd
	call Pokedex_FillBackgroundColor2
	hlcoord 0, 0
	ld bc, $0f12
	call Pokedex_PlaceBorder
	hlcoord 19, 0
	ld [hl], $34
	hlcoord 19, 1
	ld a, $7f
	ld b, $f
	call Function40741
	ld [hl], $39
	hlcoord 1, 10
	ld bc, $0013
	ld a, $61
	call ByteFill
	hlcoord 1, 17
	ld bc, $0012
	ld a, $7f
	call ByteFill
	hlcoord 9, 7
	ld de, Unknown_40852
	call Pokedex_PlaceString
	hlcoord 9, 9
	ld de, Unknown_4085c
	call Pokedex_PlaceString
	hlcoord 0, 17
	ld de, Unknown_40867
	call Pokedex_PlaceString
	call Pokedex_PlaceFrontpicTopLeftCorner
	ret
; 4084f

Unknown_4084f: ; 4084f
	db $5c, $5d, $ff ; No.
Unknown_40852: ; 40852
	db "HT  ?", $5e, "??", $5f, $ff ; HT  ?'??"
Unknown_4085c: ; 4085c
	db "WT   ???lb", $ff ; WT   ???lb
Unknown_40867: ; 40867
	db $3b, " PAGE AREA CRY PRNT", $ff
; 4087c

Function4087c: ; 4087c (10:487c)
	call Pokedex_FillBackgroundColor2
	hlcoord 0, 2
	lb bc, 8, 18
	call Pokedex_PlaceBorder
	hlcoord 0, 12
	lb bc, 4, 18
	call Pokedex_PlaceBorder
	hlcoord 0, 1
	ld de, Unknown_408b2
	call Pokedex_PlaceString
	hlcoord 3, 4
	ld de, String_408bd
	call PlaceString
	ld a, [wUnlockedUnownMode]
	and a
	ret z
	hlcoord 3, 10
	ld de, String_408e5
	call PlaceString
	ret
; 408b2 (10:48b2)

Unknown_408b2: ; 408b2
	db $3b, " OPTION ", $3c, $ff
; 408bd

String_408bd: ; 408bd
	db   "NEW #DEX MODE"
	next "OLD #DEX MODE"
	next "A to Z MODE"
	db "@"
; 408e5

String_408e5: ; 408e5
	db "UNOWN MODE@"
; 408f0

Function408f0: ; 408f0 (10:48f0)
	call Pokedex_FillBackgroundColor2
	hlcoord 0, 2
	lb bc, 14, 18
	call Pokedex_PlaceBorder
	hlcoord 0, 1
	ld de, Unknown_4092a
	call Pokedex_PlaceString
	hlcoord 8, 4
	ld de, Unknown_40935
	call Pokedex_PlaceString
	hlcoord 8, 6
	ld de, Unknown_40935
	call Pokedex_PlaceString
	hlcoord 3, 4
	ld de, String_40940
	call PlaceString
	hlcoord 3, 13
	ld de, String_4094c
	call PlaceString
	ret
; 4092a (10:492a)

Unknown_4092a: ; 4092a
	db $3b, " SEARCH ", $3c, $ff
; 40925

Unknown_40935: ; 40935
	db $3d, "        ", $3e, $ff
; 40940

String_40940: ; 40940
	db   "TYPE1"
	next "TYPE2"
	db   "@"
; 4094c

String_4094c: ; 4094c
	db   "BEGIN SEARCH!!"
	next "CANCEL"
	db   "@"
; 40962

Function40962: ; 40962 (10:4962)
	call Pokedex_FillBackgroundColor2
	hlcoord 0, 0
	lb bc, 7, 7
	call Pokedex_PlaceBorder
	hlcoord 0, 11
	lb bc, 5, 18
	call Pokedex_PlaceBorder
	hlcoord 1, 12
	ld de, String_409ae
	call PlaceString
	ld de, wc7d7
	hlcoord 1, 16
	lb bc, 1, 3
	call PrintNum
	hlcoord 8, 0
	ld [hl], $59
	hlcoord 8, 1
	ld b, $7
	ld a, $5a
	call Function40741
	hlcoord 8, 8
	ld [hl], $53
	hlcoord 8, 9
	ld [hl], $69
	hlcoord 8, 10
	ld [hl], $6a
	call Pokedex_PlaceFrontpicTopLeftCorner
	ret
; 409ae (10:49ae)

String_409ae: ; 409ae
	db   "SEARCH RESULTS"
	next "  TYPE"
	next "    FOUND!"
	db   "@"
; 409cf

Function409cf: ; 409cf (10:49cf)
	ld a, [wc7d5]
	hlcoord 0, 14
	call Function40fcd
	ld a, [wc7d5]
	ld b, a
	ld a, [wc7d6]
	and a
	jr z, .asm_409f0
	cp b
	jr z, .asm_409f0
	hlcoord 2, 15
	call Function40fcd
	hlcoord 1, 15
	ld [hl], $f3
.asm_409f0
	ret

Function409f1: ; 409f1 (10:49f1)
	call Pokedex_FillBackgroundColor2
	hlcoord 2, 1
	lb bc, 10, 13
	call Pokedex_PlaceBorder
	hlcoord 2, 14
	lb bc, 1, 13
	call Pokedex_PlaceBorder
	hlcoord 2, 15
	ld [hl], $3d
	hlcoord 16, 15
	ld [hl], $3e
	hlcoord 6, 5
	call Pokedex_PlaceFrontpicAtHL
	ld de, 0
	ld b, 0
	ld c, 26
.loop
	ld hl, UnownDex
	add hl, de
	ld a, [hl]
	and a
	jr z, .done
	push af
	ld hl, Unknown_40a3e
rept 4
	add hl, de
endr
	ld a, [hli]
	ld h, [hl]
	ld l, a
	pop af
	add $40 - 1 ; Unown A
	ld [hl], a
	inc de
	inc b
	dec c
	jr nz, .loop
.done
	ld a, b
	ld [wc7de], a
	ret
; 40a3e (10:4a3e)

Unknown_40a3e: ; 40a3e
;           letter, cursor
	dwcoord   4,11,   3,11
	dwcoord   4,10,   3,10
	dwcoord   4, 9,   3, 9
	dwcoord   4, 8,   3, 8
	dwcoord   4, 7,   3, 7
	dwcoord   4, 6,   3, 6
	dwcoord   4, 5,   3, 5
	dwcoord   4, 4,   3, 4
	dwcoord   4, 3,   3, 2
	dwcoord   5, 3,   5, 2
	dwcoord   6, 3,   6, 2
	dwcoord   7, 3,   7, 2
	dwcoord   8, 3,   8, 2
	dwcoord   9, 3,   9, 2
	dwcoord  10, 3,  10, 2
	dwcoord  11, 3,  11, 2
	dwcoord  12, 3,  12, 2
	dwcoord  13, 3,  13, 2
	dwcoord  14, 3,  15, 2
	dwcoord  14, 4,  15, 4
	dwcoord  14, 5,  15, 5
	dwcoord  14, 6,  15, 6
	dwcoord  14, 7,  15, 7
	dwcoord  14, 8,  15, 8
	dwcoord  14, 9,  15, 9
	dwcoord  14,10,  15,10
; 40aa6

Pokedex_FillBackgroundColor2: ; 40aa6
	hlcoord 0, 0
	ld a, $32
	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
	call ByteFill
	ret
; 40ab2

Pokedex_PlaceFrontpicTopLeftCorner: ; 40ab2
	hlcoord 1, 1
Pokedex_PlaceFrontpicAtHL: ; 40ab5
	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
	ret
; 40acd

Pokedex_PlaceString: ; 40acd
.loop
	ld a, [de]
	cp -1
	ret z
	inc de
	ld [hli], a
	jr .loop
; 40ad5


Pokedex_PlaceBorder: ; 40ad5
	push hl
	ld a, $33
	ld [hli], a
	ld d, $34
	call .FillRow
	ld a, $35
	ld [hl], a
	pop hl
	ld de, SCREEN_WIDTH
	add hl, de
.loop
	push hl
	ld a, $36
	ld [hli], a
	ld d, $7f
	call .FillRow
	ld a, $37
	ld [hl], a
	pop hl
	ld de, SCREEN_WIDTH
	add hl, de
	dec b
	jr nz, .loop
	ld a, $38
	ld [hli], a
	ld d, $39
	call .FillRow
	ld a, $3a
	ld [hl], a
	ret
; 40b06

.FillRow: ; 40b06
	ld e, c
.row_loop
	ld a, e
	and a
	ret z
	ld a, d
	ld [hli], a
	dec e
	jr .row_loop
; 40b0f


Function40b0f: ; 40b0f (10:4b0f)
; This check is completely useless.
	ld a, [wCurrentDexMode]
	cp DEXMODE_OLD
	jr z, .okay
	ld c, 11
	jr .resume
.okay
	ld c, 11
; End useless check
.resume
; Clear (2 * [wc7d3] + 1) by 11 box starting at 0,1
	hlcoord 0, 1
	ld a, [wc7d3]
	add a
	inc a
	ld b, a
	ld a, " "
	call Pokedex_FillBox

; Load de with wPokedexDataStart + [wDexListingPage]
	ld a, [wDexListingPage]
	ld e, a
	ld d, $0
	ld hl, wPokedexDataStart
	add hl, de
	ld e, l
	ld d, h
	hlcoord 0, 2
	ld a, [wc7d3]
.loop
	push af
	ld a, [de]
	ld [wd265], a
	push de
	push hl
	call Function40b55
	pop hl
	ld de, 2 * SCREEN_WIDTH
	add hl, de
	pop de
	inc de
	pop af
	dec a
	jr nz, .loop
	call Function4143b
	ret

Function40b55: ; 40b55 (10:4b55)
	and a
	ret z
	call Pokedex_PrintNumberIfOldMode
	call Pokedex_PlaceDefaultStringIfNotSeen
	ret c
	call Pokedex_PlaceCaughtSymbolIfCaught
	push hl
	call GetPokemonName
	pop hl
	call PlaceString
	ret

Pokedex_PrintNumberIfOldMode: ; 40b6a (10:4b6a)
	ld a, [wCurrentDexMode]
	cp DEXMODE_OLD
	jr z, .printnum
	ret

.printnum
	push hl
	ld de, -SCREEN_WIDTH
	add hl, de
	ld de, wd265
	lb bc, PRINTNUM_LEADINGZEROS | 1, 3
	call PrintNum
	pop hl
	ret

Pokedex_PlaceCaughtSymbolIfCaught: ; 40b82 (10:4b82)
	call Pokedex_CheckCaught
	jr nz, .place_caught_symbol
	inc hl
	ret

.place_caught_symbol
	ld a, $4f
	ld [hli], a
	ret

Pokedex_PlaceDefaultStringIfNotSeen: ; 40b8d (10:4b8d)
	call Pokedex_CheckSeen
	ret nz
	inc hl
	ld de, .NameNotSeen
	call PlaceString
	scf
	ret
; 40b9a (10:4b9a)

.NameNotSeen: ; 40b9a
	db "-----@"
; 40ba0

Pokedex_DrawFootprint: ; 40ba0
	hlcoord 18, 1
	ld a, $62
	ld [hli], a
	inc a
	ld [hl], a
	hlcoord 18, 2
	ld a, $64
	ld [hli], a
	inc a
	ld [hl], a
	ret
; 40bb1


Pokedex_GetMonAtCursorPosition: ; 40bb1
	ld a, [wDexListingCursor]
	ld hl, wDexListingPage
	add [hl]
	ld e, a
	ld d, $0
	ld hl, wPokedexDataStart
	add hl, de
	ld a, [hl]
	ld [wd265], a
	ret
; 40bc4


Pokedex_CheckCaught: ; 40bc4 (10:4bc4)
	push de
	push hl
	ld a, [wd265]
	dec a
	call CheckCaughtMon
	pop hl
	pop de
	ret


Pokedex_CheckSeen: ; 40bd0
	push de
	push hl
	ld a, [wd265]
	dec a
	call CheckSeenMon
	pop hl
	pop de
	ret
; 40bdc



Pokedex_ChangeMode: ; 40bdc
	ld hl, wPokedexDataStart
	ld bc, wPokedexMetadata - wPokedexDataStart
	xor a
	call ByteFill
	ld a, [wCurrentDexMode]
	ld hl, .Jumptable
	call Pokedex_LoadPointer
	jp [hl]
; 40bf0


.Jumptable: ; 40bf0 (10:4bf0)
	dw .NewMode
	dw .OldMode
	dw Pokedex_ABCMode


.NewMode: ; 40bf6 (10:4bf6)
	ld de, NewPokedexOrder
	ld hl, wPokedexDataStart
	ld c, NUM_POKEMON
.loopnew
	ld a, [de]
	inc de
	ld [hli], a
	dec c
	jr nz, .loopnew
	call .FindLastSeen
	ret

.OldMode: ; 40c08 (10:4c08)
	ld hl, wPokedexDataStart
	ld a, $1
	ld c, NUM_POKEMON
.loopold
	ld [hli], a
	inc a
	dec c
	jr nz, .loopold
	call .FindLastSeen
	ret

.FindLastSeen: ; 40c18 (10:4c18)
	ld hl, wPokedexDataStart + NUM_POKEMON - 1
	ld d, NUM_POKEMON
	ld e, d
.loopfindend
	ld a, [hld]
	ld [wd265], a
	call Pokedex_CheckSeen
	jr nz, .foundend
	dec d
	dec e
	jr nz, .loopfindend
.foundend
	ld a, d
	ld [wDexListingEnd], a
	ret

Pokedex_ABCMode: ; 40c30
	xor a
	ld [wDexListingEnd], a
	ld hl, wPokedexDataStart
	ld de, AlphabeticalPokedexOrder
	ld c, NUM_POKEMON
.loop1abc
	push bc
	ld a, [de]
	ld [wd265], a
	call Pokedex_CheckSeen
	jr z, .skipabc
	ld a, [wd265]
	ld [hli], a
	ld a, [wDexListingEnd]
	inc a
	ld [wDexListingEnd], a

.skipabc
	inc de
	pop bc
	dec c
	jr nz, .loop1abc
	ld a, [wDexListingEnd]
	ld c, 0
.loop2abc
	cp NUM_POKEMON
	jr z, .doneabc
	ld [hl], c
	inc hl
	inc a
	jr .loop2abc

.doneabc
	ret
; 40c65

AlphabeticalPokedexOrder: ; 0x40c65
INCLUDE "data/pokedex/order_alpha.asm"

NewPokedexOrder: ; 0x40d60
INCLUDE "data/pokedex/order_new.asm"

Function40e5b: ; 40e5b
	xor a
	ld [hBGMapMode], a
	hlcoord 0, 12
	lb bc, 4, SCREEN_WIDTH - 2
	call Pokedex_PlaceBorder
	ld a, [wc7d8]
	ld hl, Unknown_40e7d
	call Pokedex_LoadPointer
	ld e, l
	ld d, h
	hlcoord 1, 14
	call PlaceString
	ld a, $1
	ld [hBGMapMode], a
	ret
; 40e7d

Unknown_40e7d: ; 40e7d
	dw .NewMode
	dw .OldMode
	dw .ABCMode
	dw .UnownMode
; 40e85

.NewMode: ; 40e85
	db   "<PK><MN> are listed by"
	next "evolution type.@"
; 40ea6

.OldMode: ; 40ea6
	db   "<PK><MN> are listed by"
	next "official type.@"
; 40ec6

.ABCMode: ; 40ec6
	db   "<PK><MN> are listed"
	next "alphabetically.@"
; 40ee4

.UnownMode: ; 40ee4
	db   "UNOWN are listed"
	next "in catching order.@"
; 40f08

Function40f08: ; 40f08 (10:4f08)
	xor a
	ld [hBGMapMode], a
	hlcoord 0, 12
	lb bc, 4, SCREEN_WIDTH - 2
	call Pokedex_PlaceBorder
	ld de, String_ChangingModesPleaseWait
	hlcoord 1, 14
	call PlaceString
	ld a, $1
	ld [hBGMapMode], a
	ld c, 64
	call DelayFrames
	ld de, SFX_CHANGE_DEX_MODE
	call PlaySFX
	ld c, 64
	call DelayFrames
	ret
; 40f32 (10:4f32)

String_ChangingModesPleaseWait: ; 40f32
	db   "Changing modes."
	next "Please wait.@"
; 40f4f

Function40f4f: ; 40f4f (10:4f4f)
	ld a, [wc7d8]
	cp $2
	jr nc, .asm_40f63
	ld hl, hJoyLast
	ld a, [hl]
	and $20
	jr nz, .asm_40f65
	ld a, [hl]
	and $10
	jr nz, Function40f84
.asm_40f63
	and a
	ret
.asm_40f65
	ld a, [wc7d8]
	and a
	jr nz, .asm_40f76
	ld hl, wc7d5
	ld a, [hl]
	cp $1
	jr z, .asm_40f80
	dec [hl]
	jr .asm_40f82
.asm_40f76
	ld hl, wc7d6
	ld a, [hl]
	and a
	jr z, .asm_40f80
	dec [hl]
	jr .asm_40f82
.asm_40f80
	ld [hl], $11
.asm_40f82
	scf
	ret
; 40f84

Function40f84: ; 40f84
	ld a, [wc7d8]
	and a
	jr nz, .asm_40f99
	ld hl, wc7d5
	ld a, [hl]
	cp $11
	jr nc, .asm_40f95
	inc [hl]
	jr .asm_40fa6
.asm_40f95
	ld [hl], $1
	jr .asm_40fa6
.asm_40f99
	ld hl, wc7d6
	ld a, [hl]
	cp $11
	jr nc, .asm_40fa4
	inc [hl]
	jr .asm_40fa6
.asm_40fa4
	ld [hl], $0
.asm_40fa6
	scf
	ret

Function40fa8: ; 40fa8 (10:4fa8)
	xor a
	ld [hBGMapMode], a
	hlcoord 9, 3
	ld bc, $408
	ld a, $7f
	call Pokedex_FillBox
	ld a, [wc7d5]
	hlcoord 9, 4
	call Function40fcd
	ld a, [wc7d6]
	hlcoord 9, 6
	call Function40fcd
	ld a, $1
	ld [hBGMapMode], a
	ret

Function40fcd: ; 40fcd (10:4fcd)
	push hl
	ld e, a
	ld d, 0
	ld hl, Strings_40fe4
rept 9
	add hl, de
endr
	ld e, l
	ld d, h
	pop hl
	call PlaceString
	ret
; 40fe4 (10:4fe4)

Strings_40fe4: ; 40fe4
	db "  ----  @"
	db " NORMAL @"
	db "  FIRE  @"
	db " WATER  @"
	db " GRASS  @"
	db "ELECTRIC@"
	db "  ICE   @"
	db "FIGHTING@"
	db " POISON @"
	db " GROUND @"
	db " FLYING @"
	db "PSYCHIC @"
	db "  BUG   @"
	db "  ROCK  @"
	db " GHOST  @"
	db " DRAGON @"
	db "  DARK  @"
	db " STEEL  @"
; 41086

Function41086: ; 41086
	ld a, [wc7d6]
	and a
	call nz, Function41095
	ld a, [wc7d5]
	and a
	call nz, Function41095
	ret
; 41095

Function41095: ; 41095
	dec a
	ld e, a
	ld d, 0
	ld hl, Unknown_410f6
	add hl, de
	ld a, [hl]
	ld [wc7df], a
	ld hl, wPokedexDataStart
	ld de, wPokedexDataStart
	ld c, NUM_POKEMON
	xor a
	ld [wc7d7], a
.asm_410ad
	push bc
	ld a, [hl]
	and a
	jr z, .asm_410e0
	ld [wd265], a
	ld [CurSpecies], a
	call Pokedex_CheckCaught
	jr z, .asm_410e0
	push hl
	push de
	call GetBaseData
	pop de
	pop hl
	ld a, [wc7df]
	ld b, a
	ld a, [BaseType1]
	cp b
	jr z, .asm_410d4
	ld a, [BaseType2]
	cp b
	jr nz, .asm_410e0

.asm_410d4
	ld a, [wd265]
	ld [de], a
	inc de
	ld a, [wc7d7]
	inc a
	ld [wc7d7], a

.asm_410e0
	inc hl
	pop bc
	dec c
	jr nz, .asm_410ad
	ld l, e
	ld h, d
	ld a, [wc7d7]
	ld c, 0
.asm_410ec
	cp NUM_POKEMON
	jr z, .asm_410f5
	ld [hl], c
	inc hl
	inc a
	jr .asm_410ec

.asm_410f5
	ret
; 410f6

Unknown_410f6: ; 410f6
	db NORMAL
	db FIRE
	db WATER
	db GRASS
	db ELECTRIC
	db ICE
	db FIGHTING
	db POISON
	db GROUND
	db FLYING
	db PSYCHIC
	db BUG
	db ROCK
	db GHOST
	db DRAGON
	db DARK
	db STEEL
; 41107

Function41107: ; 41107
	xor a
	ld [hBGMapMode], a
	hlcoord 0, 12
	ld bc, $0412
	call Pokedex_PlaceBorder
	ld de, String_41126
	hlcoord 1, 14
	call PlaceString
	ld a, $1
	ld [hBGMapMode], a
	ld c, $80
	call DelayFrames
	ret
; 41126

String_41126: ; 41126
	db   "The specified type"
	next "was not found.@"
; 41148

Function41148: ; 41148 (10:5148)
	ld a, [wCurrentDexMode]
	cp $1
	jp z, Function41157
	call Function41229
	call Function4130e
	ret

Function41157: ; 41157 (10:5157)
	ld hl, Unknown_41167
	ld a, [wDexListingCursor]
	or a
	jr nz, .asm_41163
	ld hl, Unknown_411c8
.asm_41163
	call Function412f1
	ret
; 41167 (10:5167)

Unknown_41167: ; 41167
; OAM
	db $18, $47, $30, $07
	db $10, $47, $31, $07
	db $10, $4f, $32, $07
	db $10, $57, $32, $07
	db $10, $5f, $32, $07
	db $10, $67, $33, $07
	db $10, $7e, $33, $27
	db $10, $86, $32, $27
	db $10, $8e, $32, $27
	db $10, $96, $32, $27
	db $10, $9e, $31, $27
	db $18, $9e, $30, $27
	db $20, $47, $30, $47
	db $28, $47, $31, $47
	db $28, $4f, $32, $47
	db $28, $57, $32, $47
	db $28, $5f, $32, $47
	db $28, $67, $33, $47
	db $28, $7e, $33, $67
	db $28, $86, $32, $67
	db $28, $8e, $32, $67
	db $28, $96, $32, $67
	db $28, $9e, $31, $67
	db $20, $9e, $30, $67
	db $ff
; 411c8

Unknown_411c8: ; 411c8
; OAM
	db $18, $47, $30, $07
	db $10, $47, $34, $07
	db $10, $4f, $35, $07
	db $10, $57, $35, $07
	db $10, $5f, $35, $07
	db $10, $67, $36, $07
	db $10, $7e, $36, $27
	db $10, $86, $35, $27
	db $10, $8e, $35, $27
	db $10, $96, $35, $27
	db $10, $9e, $34, $27
	db $18, $9e, $30, $27
	db $20, $47, $30, $47
	db $28, $47, $31, $47
	db $28, $4f, $32, $47
	db $28, $57, $32, $47
	db $28, $5f, $32, $47
	db $28, $67, $33, $47
	db $28, $7e, $33, $67
	db $28, $86, $32, $67
	db $28, $8e, $32, $67
	db $28, $96, $32, $67
	db $28, $9e, $31, $67
	db $20, $9e, $30, $67
	db $ff
; 41229

Function41229: ; 41229 (10:5229)
	ld hl, Unknown_41230
	call Function412f1
	ret
; 41230 (10:5230)

Unknown_41230: ; 41230
; OAM
	db $1b, $47, $30, $07
	db $13, $47, $31, $07
	db $13, $4f, $32, $07
	db $13, $57, $32, $07
	db $13, $5f, $33, $07
	db $13, $80, $33, $27
	db $13, $88, $32, $27
	db $13, $90, $32, $27
	db $13, $98, $31, $27
	db $1b, $98, $30, $27
	db $23, $47, $30, $47
	db $2b, $47, $31, $47
	db $2b, $4f, $32, $47
	db $2b, $57, $32, $47
	db $2b, $5f, $33, $47
	db $2b, $80, $33, $67
	db $2b, $88, $32, $67
	db $2b, $90, $32, $67
	db $2b, $98, $31, $67
	db $23, $98, $30, $67
	db $ff
; 41281

Function41281: ; 41281 (10:5281)
	ld a, [wCurrentDexMode]
	cp $1
	jp z, Function41157
	ld hl, Unknown_41290
	call Function412f1
	ret
; 41290 (10:5290)

Unknown_41290: ; 41290
; OAM
	db $1b, $47, $30, $07
	db $13, $47, $31, $07
	db $13, $4f, $32, $07
	db $13, $57, $32, $07
	db $13, $5f, $32, $07
	db $13, $67, $33, $07
	db $13, $7e, $33, $27
	db $13, $86, $32, $27
	db $13, $8e, $32, $27
	db $13, $96, $32, $27
	db $13, $9e, $31, $27
	db $1b, $9e, $30, $27
	db $23, $47, $30, $47
	db $2b, $47, $31, $47
	db $2b, $4f, $32, $47
	db $2b, $57, $32, $47
	db $2b, $5f, $32, $47
	db $2b, $67, $33, $47
	db $2b, $7e, $33, $67
	db $2b, $86, $32, $67
	db $2b, $8e, $32, $67
	db $2b, $96, $32, $67
	db $2b, $9e, $31, $67
	db $23, $9e, $30, $67
	db $ff
; 412f1

Function412f1: ; 412f1 (10:52f1)
	ld de, Sprites
.asm_412f4
	ld a, [hl]
	cp $ff
	ret z
	ld a, [wDexListingCursor]
	and $7
	swap a
	add [hl]
	inc hl
	ld [de], a
	inc de
	ld a, [hli]
	ld [de], a
	inc de
	ld a, [hli]
	ld [de], a
	inc de
	ld a, [hli]
	ld [de], a
	inc de
	jr .asm_412f4

Function4130e: ; 4130e (10:530e)
	push de
	ld a, [wDexListingEnd]
	dec a
	ld e, a
	ld a, [wDexListingCursor]
	ld hl, wDexListingPage
	add [hl]
	cp e
	jr z, .asm_4133f
	ld hl, $0
	ld bc, $79
	call AddNTimes
	ld e, l
	ld d, h
	ld b, $0
	ld a, d
	or e
	jr z, .asm_41341
	ld a, [wDexListingEnd]
	ld c, a
.asm_41333
	ld a, e
	sub c
	ld e, a
	ld a, d
	sbc $0
	ld d, a
	jr c, .asm_41341
	inc b
	jr .asm_41333
.asm_4133f
	ld b, $79
.asm_41341
	ld a, $14
	add b
	pop hl
	ld [hli], a
	ld a, $a1
	ld [hli], a
	ld a, $f
	ld [hli], a
	ld [hl], $0
	ret

Function4134f: ; 4134f (10:534f)
	xor a
	ld [wc7d8], a
	ld [wc7d9], a
	ld [wc7da], a
	ret

Function4135a: ; 4135a (10:535a)
; bc = [de] - 1
	ld a, [de]
	ld b, a
	inc de
	ld a, [de]
	dec a
	ld c, a
	inc de
	call Pokedex_BlinkInfoScreenCursor

	ld hl, hJoyPressed ; $ffa7
	ld a, [hl]
	and D_LEFT | D_UP
	and b
	jr nz, .MoveCursorLeft
	ld a, [hl]
	and D_RIGHT | D_DOWN
	and b
	jr nz, .MoveCursorRight
	ld a, [hl]
	and SELECT
	and b
	jr nz, .Select
	call Pokedex_CursorFrameDelay
	jr c, .NoAction
	ld hl, hJoyLast
	ld a, [hl]
	and D_LEFT | D_UP
	and b
	jr nz, .MoveCursorLeft
	ld a, [hl]
	and D_RIGHT | D_DOWN
	and b
	jr nz, .MoveCursorRight
	jr .NoAction

.MoveCursorLeft
	ld a, [wc7d8]
	and a
	jr z, .NoAction
	call Pokedex_GetCursorPosition
	ld [hl], " "
	ld hl, wc7d8
	dec [hl]
	jr .UpdateCursorPosition

.MoveCursorRight
	ld a, [wc7d8]
	cp c
	jr nc, .NoAction
	call Pokedex_GetCursorPosition
	ld [hl], " "
	ld hl, wc7d8
	inc [hl]
.UpdateCursorPosition
	call Pokedex_GetCursorPosition
	ld [hl], "▶"
	ld a, $c
	ld [wc7d9], a
	xor a
	ld [wc7da], a
	scf
	ret

.NoAction
	and a
	ret

.Select
	call Pokedex_GetCursorPosition
	ld [hl], " "
	ld a, [wc7d8]
	cp c
	jr c, .Update
	ld a, $ff
.Update
	inc a
	ld [wc7d8], a
	jr .UpdateCursorPosition

Pokedex_GetCursorPosition: ; 413d4 (10:53d4)
	ld a, [wc7d8]
	add a
	ld l, a
	ld h, $0
	add hl, de
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ret

Pokedex_BlinkInfoScreenCursor: ; 413e0 (10:53e0)
	ld hl, wc7da
	ld a, [hl]
	inc [hl]
	and $8
	jr z, .blink_on
	call Pokedex_GetCursorPosition
	ld [hl], " "
	ret

.blink_on
	call Pokedex_GetCursorPosition
	ld [hl], "▶"
	ret

Pokedex_CursorFrameDelay: ; 413f5 (10:53f5)
	ld hl, wc7d9
	ld a, [hl]
	and a
	ret z

	dec [hl]
	scf
	ret

Pokedex_FillBox: ; 413fe (10:53fe)
	jp FillBoxWithByte

Function41401: ; 41401 (10:5401)
	ld a, [rSVBK]
	push af
	ld a, $5
	ld [rSVBK], a
	ld hl, UnknBGPals
	ld bc, $40
	xor a
	call ByteFill
	pop af
	ld [rSVBK], a

Function41415: ; 41415
	ld a, $ff
	call DmgToCgbBGPals
	ld a, $ff
	call DmgToCgbObjPal0
	call DelayFrame
	ret

Function41423: ; 41423
	ld b, a
	call GetSGBLayout

Function41427: ; 41427
	ld a, $e4
	call DmgToCgbBGPals
	ld a, $e0
	call DmgToCgbObjPal0
	ret
; 41432


Pokedex_LoadPointer: ; 41432
	ld e, a
	ld d, 0
rept 2
	add hl, de
endr
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ret
; 4143b

Function4143b: ; 4143b
	call Pokedex_GetMonAtCursorPosition
	call Pokedex_CheckSeen
	jr z, .QuestionMark
	ld a, [wFirstUnownSeen]
	ld [UnownLetter], a
	ld a, [wd265]
	ld [CurPartySpecies], a
	call GetBaseData
	ld de, VTiles2
	predef GetFrontpic
	ret

.QuestionMark
	ld a, BANK(sScratch)
	call GetSRAMBank
	callba LoadQuestionMarkPic
	ld hl, VTiles2
	ld de, sScratch
	ld c, 7 * 7
	ld a, [hROMBank]
	ld b, a
	call Get2bpp
	call CloseSRAM
	ret
; 41478


Pokedex_LoadCurrentFootprint: ; 41478 (10:5478)
	call Pokedex_GetMonAtCursorPosition

Pokedex_LoadAnyFootprint: ; 4147b
	ld a, [wd265]
	dec a
	and ($ff ^ $07) ; $f8 ; $1f << 3
	srl a
	srl a
	srl a
	ld e, 0
	ld d, a
	ld a, [wd265]
	dec a
	and 7
	swap a ; * $10
	ld l, a
	ld h, 0
	add hl, de
	ld de, Footprints
	add hl, de

	push hl
	ld e, l
	ld d, h
	ld hl, VTiles2 tile $62
	lb bc, BANK(Footprints), 2
	call Request1bpp
	pop hl

	; Whoever was editing footprints forgot to fix their
	; tile editor. Now each bottom half is 8 tiles off.
	ld de, 8 tiles
	add hl, de

	ld e, l
	ld d, h
	ld hl, VTiles2 tile $64
	lb bc, BANK(Footprints), 2
	call Request1bpp

	ret
; 414b7


Pokedex_LoadGFX: ; 414b7
	call DisableLCD
	ld hl, VTiles2
	ld bc, $31 tiles
	xor a
	call ByteFill
	call Pokedex_LoadInvertedFont
	call LoadFontsExtra
	ld hl, VTiles2 tile $60
	ld bc, $20 tiles
	call Pokedex_InvertTiles
	call Pokedex_CheckSGB
	jr nz, .LoadPokedexLZ
	callba LoadSGBPokedexGFX
	jr .LoadPokedexSlowpokeLZ

.LoadPokedexLZ
	ld hl, PokedexLZ
	ld de, VTiles2 tile $31
	call Decompress

.LoadPokedexSlowpokeLZ
	ld hl, PokedexSlowpokeLZ
	ld de, VTiles0
	call Decompress
	ld a, 6
	call SkipMusic
	call EnableLCD
	ret

Pokedex_LoadInvertedFont: ; 414fb
	call LoadStandardFont
	ld hl, VTiles1
	ld bc, $80 tiles

Pokedex_InvertTiles: ; 41504
.loop
	ld a, [hl]
	xor $ff
	ld [hli], a
	dec bc
	ld a, b
	or c
	jr nz, .loop
	ret
; 4150e

PokedexLZ: ; 4150e
INCBIN "gfx/pokedex/pokedex.2bpp.lz"
; 416b0

PokedexSlowpokeLZ: ; 416b0
INCBIN "gfx/pokedex/slowpoke.2bpp.lz"

Pokedex_CheckSGB: ; 41a24
	ld a, [hCGB]
	or a
	ret nz
	ld a, [hSGB]
	dec a
	ret
; 41a2c

Pokedex_LoadUnownFont: ; 41a2c
	ld a, BANK(sScratch)
	call GetSRAMBank
	ld hl, UnownFont
	ld de, sScratch + $188
	ld bc, 39 tiles
	ld a, BANK(UnownFont)
	call FarCopyBytes
	ld hl, sScratch + $188
	ld bc, 27 tiles
	call Pokedex_InvertTiles
	ld de, sScratch + $188
	ld hl, VTiles2 tile $40
	lb bc, BANK(Pokedex_LoadUnownFont), 27
	call Request2bpp
	call CloseSRAM
	ret
; 41a58

Function41a58: ; 41a58 (10:5a58)
	ld a, [UnownLetter]
	push af
	ld a, [wc7dd]
	ld e, a
	ld d, $0
	ld hl, EndPokedexSeen ; wded9 (aliases: UnownDex)
	add hl, de
	ld a, [hl]
	ld [UnownLetter], a
	ld a, UNOWN
	ld [CurPartySpecies], a
	call GetBaseData
	ld de, VTiles2 tile $00
	predef GetFrontpic
	pop af
	ld [UnownLetter], a
	ret
; 41a7f

_NewPokedexEntry: ; 41a7f
	xor a
	ld [hBGMapMode], a
	callba Function1de247
	call Pokedex_ResetBGMapMode
	call DisableLCD
	call LoadStandardFont
	call LoadFontsExtra
	call Pokedex_LoadGFX
	call Pokedex_LoadAnyFootprint
	ld a, [wd265]
	ld [CurPartySpecies], a
	call Function407fd
	call Pokedex_DrawFootprint
	hlcoord 0, 17
	ld [hl], $3b
	inc hl
	ld bc, 19
	ld a, " "
	call ByteFill
	callba DisplayDexEntry
	call EnableLCD
	call WaitBGMap
	call GetBaseData
	ld de, VTiles2
	predef GetFrontpic
	ld a, $4
	call Function41423
	ld a, [CurPartySpecies]
	call PlayCry
	ret
; 41ad7


Pokedex_SetBGMapMode3: ; 41ad7 (10:5ad7)
	ld a, $3
	ld [hBGMapMode], a
	ld c, 4
	call DelayFrames
	ret

Pokedex_SetBGMapMode4: ; 41ae1 (10:5ae1)
	ld a, $4
	ld [hBGMapMode], a
	ld c, 4
	call DelayFrames
	ret

Pokedex_SetBGMapMode_3ifDMG_4ifCGB: ; 41aeb (10:5aeb)
	ld a, [hCGB]
	and a
	jr z, .DMG
	call Pokedex_SetBGMapMode4
.DMG
	call Pokedex_SetBGMapMode3
	ret


Pokedex_ResetBGMapMode: ; 41af7
	xor a
	ld [hBGMapMode], a
	ret
; 41afb