pokecrystal-board/engine/pokedex.asm

2625 lines
44 KiB
NASM
Raw Normal View History

2016-01-09 23:05:34 -08:00
const_def
const DEXSTATE_MAIN_SCR
const DEXSTATE_UPDATE_MAIN_SCR
const DEXSTATE_DEX_ENTRY_SCR
const DEXSTATE_UPDATE_DEX_ENTRY_SCR
const DEXSTATE_REINIT_DEX_ENTRY_SCR
const DEXSTATE_SEARCH_SCR
const DEXSTATE_UPDATE_SEARCH_SCR
const DEXSTATE_OPTION_SCR
const DEXSTATE_UPDATE_OPTION_SCR
const DEXSTATE_SEARCH_RESULTS_SCR
const DEXSTATE_UPDATE_SEARCH_RESULTS_SCR
const DEXSTATE_UNOWN_MODE
const DEXSTATE_UPDATE_UNOWN_MODE
const DEXSTATE_EXIT
2015-02-11 13:36:02 -08:00
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
2015-10-16 10:35:43 -07:00
ld a, [hInMenu]
2015-02-11 13:36:02 -08:00
push af
ld a, $1
2015-10-16 10:35:43 -07:00
ld [hInMenu], a
2015-02-11 13:36:02 -08:00
xor a
2015-11-05 11:06:03 -08:00
ld [hMapAnims], a
2015-02-11 13:36:02 -08:00
call InitPokedex
call DelayFrame
.main
call JoyTextDelay
2015-10-24 16:49:19 -07:00
ld a, [wJumptableIndex]
2015-02-11 13:36:02 -08:00
bit 7, a
jr nz, .exit
2016-01-09 23:05:34 -08:00
call Pokedex_RunJumptable
2015-02-11 13:36:02 -08:00
call DelayFrame
jr .main
.exit
ld de, SFX_READ_TEXT_2
call PlaySFX
call WaitSFX
call ClearSprites
2015-11-29 18:34:59 -08:00
ld a, [wCurrentDexMode]
ld [wLastDexMode], a
2015-02-11 13:36:02 -08:00
pop af
2015-10-16 10:35:43 -07:00
ld [hInMenu], a
2015-02-11 13:36:02 -08:00
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
InitPokedex: ; 40063
2015-11-11 20:38:57 -08:00
call ClearBGPalettes
2015-02-11 13:36:02 -08:00
call ClearSprites
call ClearTileMap
2015-11-29 18:34:59 -08:00
call Pokedex_LoadGFX
2015-02-11 13:36:02 -08:00
2015-11-12 21:49:27 -08:00
ld hl, wPokedexDataStart
ld bc, wPokedexDataEnd - wPokedexDataStart
2015-02-11 13:36:02 -08:00
xor a
call ByteFill
xor a
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2016-01-09 19:03:38 -08:00
ld [wDexEntryPrevJumptableIndex], a
2015-02-11 13:36:02 -08:00
ld [wcf65], a
ld [wcf66], a
2015-11-29 18:34:59 -08:00
call Pokedex_CheckUnlockedUnownMode
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
ld a, [wLastDexMode]
ld [wCurrentDexMode], a
2015-02-11 13:36:02 -08:00
2016-01-09 19:03:38 -08:00
call Pokedex_OrderMonsByMode
2015-11-29 18:34:59 -08:00
call Pokedex_InitCursorPosition
call Pokedex_GetLandmark
2016-01-09 19:46:41 -08:00
callba DrawDexEntryScreenRightEdge
2015-11-29 18:34:59 -08:00
call Pokedex_ResetBGMapMode
2015-02-11 13:36:02 -08:00
ret
2015-11-29 18:34:59 -08:00
Pokedex_CheckUnlockedUnownMode: ; 400a2
2015-02-11 13:36:02 -08:00
ld a, [StatusFlags]
bit 1, a
2015-11-29 18:34:59 -08:00
jr nz, .unlocked
2015-02-11 13:36:02 -08:00
xor a
2015-11-29 18:34:59 -08:00
ld [wUnlockedUnownMode], a
2015-02-11 13:36:02 -08:00
ret
2015-11-29 18:34:59 -08:00
.unlocked
ld a, TRUE
ld [wUnlockedUnownMode], a
2015-02-11 13:36:02 -08:00
ret
2015-11-29 18:34:59 -08:00
Pokedex_InitCursorPosition: ; 400b4
ld hl, wPokedexDataStart
ld a, [wLastDexEntry]
2015-02-11 13:36:02 -08:00
and a
2015-11-29 18:34:59 -08:00
jr z, .done
cp NUM_POKEMON + 1
jr nc, .done
2015-02-11 13:36:02 -08:00
ld b, a
2015-11-29 18:34:59 -08:00
ld a, [wDexListingEnd]
2015-02-11 13:36:02 -08:00
cp $8
2015-11-29 18:34:59 -08:00
jr c, .only_one_page
2015-02-11 13:36:02 -08:00
sub $7
ld c, a
2015-11-29 18:34:59 -08:00
.loop1
2015-02-11 13:36:02 -08:00
ld a, b
cp [hl]
2015-11-29 18:34:59 -08:00
jr z, .done
2015-02-11 13:36:02 -08:00
inc hl
2016-01-09 17:51:14 -08:00
ld a, [wDexListingScrollOffset]
2015-02-11 13:36:02 -08:00
inc a
2016-01-09 17:51:14 -08:00
ld [wDexListingScrollOffset], a
2015-02-11 13:36:02 -08:00
dec c
2015-11-29 18:34:59 -08:00
jr nz, .loop1
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
.only_one_page
2015-02-11 13:36:02 -08:00
ld c, $7
2015-11-29 18:34:59 -08:00
.loop2
2015-02-11 13:36:02 -08:00
ld a, b
cp [hl]
2015-11-29 18:34:59 -08:00
jr z, .done
2015-02-11 13:36:02 -08:00
inc hl
2015-11-29 18:34:59 -08:00
ld a, [wDexListingCursor]
2015-02-11 13:36:02 -08:00
inc a
2015-11-29 18:34:59 -08:00
ld [wDexListingCursor], a
2015-02-11 13:36:02 -08:00
dec c
2015-11-29 18:34:59 -08:00
jr nz, .loop2
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
.done
2015-02-11 13:36:02 -08:00
ret
2015-11-29 18:34:59 -08:00
Pokedex_GetLandmark: ; 400ed
2015-02-11 13:36:02 -08:00
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
call GetWorldMapLocation
cp SPECIAL_MAP
2015-11-29 18:34:59 -08:00
jr nz, .load
2015-02-11 13:36:02 -08:00
ld a, [BackupMapGroup]
ld b, a
ld a, [BackupMapNumber]
ld c, a
call GetWorldMapLocation
2015-11-29 18:34:59 -08:00
.load
ld [wDexCurrentLocation], a
2015-02-11 13:36:02 -08:00
ret
2016-01-09 23:05:34 -08:00
Pokedex_RunJumptable: ; 4010b
2015-10-24 16:49:19 -07:00
ld a, [wJumptableIndex]
2015-11-29 18:34:59 -08:00
ld hl, .Jumptable
call Pokedex_LoadPointer
jp hl
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
.Jumptable: ; 40115 (10:4115)
2016-01-09 17:51:14 -08:00
dw Pokedex_InitMainScreen
dw Pokedex_UpdateMainScreen
dw Pokedex_InitDexEntryScreen
dw Pokedex_UpdateDexEntryScreen
dw Pokedex_ReinitDexEntryScreen
dw Pokedex_InitSearchScreen
dw Pokedex_UpdateSearchScreen
dw Pokedex_InitOptionScreen
dw Pokedex_UpdateOptionScreen
dw Pokedex_InitSearchResultsScreen
dw Pokedex_UpdateSearchResultsScreen
dw Pokedex_InitUnownMode
dw Pokedex_UpdateUnownMode
2016-01-09 23:05:34 -08:00
dw Pokedex_Exit
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
Pokedex_IncrementDexPointer: ; 40131 (10:4131)
2015-10-24 16:49:19 -07:00
ld hl, wJumptableIndex
2015-02-11 13:36:02 -08:00
inc [hl]
ret
2016-01-09 23:05:34 -08:00
Pokedex_Exit: ; 40136 (10:4136)
2015-10-24 16:49:19 -07:00
ld hl, wJumptableIndex
2015-02-11 13:36:02 -08:00
set 7, [hl]
ret
2016-01-09 17:51:14 -08:00
Pokedex_InitMainScreen: ; 4013c (10:413c)
2015-02-11 13:36:02 -08:00
xor a
ld [hBGMapMode], a
2015-02-11 13:36:02 -08:00
call ClearSprites
xor a
hlcoord 0, 0, AttrMap
2015-11-29 18:34:59 -08:00
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
2015-02-11 13:36:02 -08:00
call ByteFill
2015-11-29 18:34:59 -08:00
callba DrawPokedexListWindow
2015-02-11 13:36:02 -08:00
hlcoord 0, 17
ld de, String_START_SEARCH
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceString
2016-01-09 17:51:14 -08:00
ld a, 7
ld [wDexListingHeight], a
call Pokedex_PrintListing
2015-11-29 18:34:59 -08:00
call Pokedex_SetBGMapMode_3ifDMG_4ifCGB
call Pokedex_ResetBGMapMode
2016-01-09 19:03:38 -08:00
call Pokedex_DrawMainScreenBG
2015-02-11 13:36:02 -08:00
ld a, $5
ld [hSCX], a
2015-11-29 18:34:59 -08:00
ld a, [wCurrentDexMode]
cp DEXMODE_OLD
2015-02-11 13:36:02 -08:00
ld a, $4a
2015-11-29 18:34:59 -08:00
jr z, .okay
2015-02-11 13:36:02 -08:00
ld a, $47
2015-11-29 18:34:59 -08:00
.okay
ld [hWX], a
2015-02-11 13:36:02 -08:00
xor a
ld [hWY], a
2015-02-11 13:36:02 -08:00
call WaitBGMap
2015-11-29 18:34:59 -08:00
call Pokedex_ResetBGMapMode
ld a, -1
2015-02-11 13:36:02 -08:00
ld [CurPartySpecies], a
2016-01-09 17:51:14 -08:00
ld a, SCGB_POKEDEX
call Pokedex_GetSGBLayout
call Pokedex_UpdateCursorOAM
2015-11-29 18:34:59 -08:00
callba DrawPokedexListWindow
2015-02-11 13:36:02 -08:00
hlcoord 0, 17
ld de, String_START_SEARCH
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceString
2016-01-09 17:51:14 -08:00
ld a, 7
ld [wDexListingHeight], a
call Pokedex_PrintListing
2015-11-29 18:34:59 -08:00
call Pokedex_IncrementDexPointer
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_UpdateMainScreen: ; 401ae (10:41ae)
ld hl, hJoyPressed
2015-02-11 13:36:02 -08:00
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
2016-01-09 17:51:14 -08:00
call Pokedex_ListingHandleDPadInput
2015-02-11 13:36:02 -08:00
ret nc
2016-01-09 17:51:14 -08:00
call Pokedex_UpdateCursorOAM
2015-02-11 13:36:02 -08:00
xor a
ld [hBGMapMode], a
2016-01-09 17:51:14 -08:00
call Pokedex_PrintListing
2015-11-29 18:34:59 -08:00
call Pokedex_SetBGMapMode3
call Pokedex_ResetBGMapMode
2015-02-11 13:36:02 -08:00
ret
.a
2016-01-09 17:51:14 -08:00
call Pokedex_GetSelectedMon
2015-11-29 18:34:59 -08:00
call Pokedex_CheckSeen
2015-02-11 13:36:02 -08:00
ret z
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_DEX_ENTRY_SCR
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_MAIN_SCR
2016-01-09 19:03:38 -08:00
ld [wDexEntryPrevJumptableIndex], a
2015-02-11 13:36:02 -08:00
ret
.select
2016-01-09 17:51:14 -08:00
call Pokedex_BlackOutBG
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_OPTION_SCR
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-02-11 13:36:02 -08:00
xor a
ld [hSCX], a
2015-02-11 13:36:02 -08:00
ld a, $a7
ld [hWX], a
2015-02-11 13:36:02 -08:00
call DelayFrame
ret
.start
2016-01-09 17:51:14 -08:00
call Pokedex_BlackOutBG
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_SEARCH_SCR
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-02-11 13:36:02 -08:00
xor a
ld [hSCX], a
2015-02-11 13:36:02 -08:00
ld a, $a7
ld [hWX], a
2015-02-11 13:36:02 -08:00
call DelayFrame
ret
.b
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_EXIT
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_InitDexEntryScreen: ; 40217 (10:4217)
2015-02-11 13:36:02 -08:00
call LowVolume
xor a
ld [wPokedexStatus], a
2015-02-11 13:36:02 -08:00
xor a
ld [hBGMapMode], a
2015-02-11 13:36:02 -08:00
call ClearSprites
2015-11-29 18:34:59 -08:00
call Pokedex_LoadCurrentFootprint
2016-01-09 17:51:14 -08:00
call Pokedex_DrawDexEntryScreenBG
call Pokedex_InitArrowCursor
call Pokedex_GetSelectedMon
2015-11-29 18:34:59 -08:00
ld [wLastDexEntry], a
callba DisplayDexEntry
2015-11-29 18:34:59 -08:00
call Pokedex_DrawFootprint
2015-02-11 13:36:02 -08:00
call WaitBGMap
ld a, $a7
ld [hWX], a
2016-01-09 17:51:14 -08:00
call Pokedex_GetSelectedMon
2015-02-11 13:36:02 -08:00
ld [CurPartySpecies], a
2016-01-09 17:51:14 -08:00
ld a, SCGB_POKEDEX
call Pokedex_GetSGBLayout
2015-02-11 13:36:02 -08:00
ld a, [CurPartySpecies]
call PlayCry
2015-11-29 18:34:59 -08:00
call Pokedex_IncrementDexPointer
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_UpdateDexEntryScreen: ; 40258 (10:4258)
ld de, DexEntryScreen_ArrowCursorData
call Pokedex_MoveArrowCursor
ld hl, hJoyPressed
2015-02-11 13:36:02 -08:00
ld a, [hl]
and B_BUTTON
2016-01-09 19:03:38 -08:00
jr nz, .return_to_prev_screen
2015-02-11 13:36:02 -08:00
ld a, [hl]
and A_BUTTON
2016-01-09 19:03:38 -08:00
jr nz, .do_menu_action
2015-11-29 18:34:59 -08:00
call Pokedex_NextOrPreviousDexEntry
2015-02-11 13:36:02 -08:00
ret nc
2015-11-29 18:34:59 -08:00
call Pokedex_IncrementDexPointer
2015-02-11 13:36:02 -08:00
ret
2016-01-09 19:03:38 -08:00
.do_menu_action
2016-01-09 17:51:14 -08:00
ld a, [wDexArrowCursorPosIndex]
2016-01-09 19:03:38 -08:00
ld hl, DexEntryScreen_MenuActionJumptable
2015-11-29 18:34:59 -08:00
call Pokedex_LoadPointer
jp hl
2015-02-11 13:36:02 -08:00
2016-01-09 19:03:38 -08:00
.return_to_prev_screen
2015-02-11 13:36:02 -08:00
ld a, [LastVolume]
and a
2015-11-29 18:34:59 -08:00
jr z, .max_volume
2015-02-11 13:36:02 -08:00
ld a, $77
ld [LastVolume], a
2015-11-29 18:34:59 -08:00
.max_volume
2015-02-11 13:36:02 -08:00
call MaxVolume
2016-01-09 19:03:38 -08:00
ld a, [wDexEntryPrevJumptableIndex]
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-02-11 13:36:02 -08:00
ret
2015-12-09 08:38:40 -08:00
Pokedex_Page: ; 40292
ld a, [wPokedexStatus]
2015-02-11 13:36:02 -08:00
xor $1
ld [wPokedexStatus], a
2016-01-09 17:51:14 -08:00
call Pokedex_GetSelectedMon
2015-11-29 18:34:59 -08:00
ld [wLastDexEntry], a
callba DisplayDexEntry
2015-02-11 13:36:02 -08:00
call WaitBGMap
ret
2016-01-09 17:51:14 -08:00
Pokedex_ReinitDexEntryScreen: ; 402aa (10:42aa)
; Reinitialize the Pokédex entry screen after changing the selected mon.
call Pokedex_BlackOutBG
2015-02-11 13:36:02 -08:00
xor a
ld [wPokedexStatus], a
2015-02-11 13:36:02 -08:00
xor a
ld [hBGMapMode], a
2016-01-09 17:51:14 -08:00
call Pokedex_DrawDexEntryScreenBG
call Pokedex_InitArrowCursor
2015-11-29 18:34:59 -08:00
call Pokedex_LoadCurrentFootprint
2016-01-09 17:51:14 -08:00
call Pokedex_GetSelectedMon
2015-11-29 18:34:59 -08:00
ld [wLastDexEntry], a
callba DisplayDexEntry
2015-11-29 18:34:59 -08:00
call Pokedex_DrawFootprint
2016-01-09 17:51:14 -08:00
call Pokedex_LoadSelectedMonTiles
2015-02-11 13:36:02 -08:00
call WaitBGMap
2016-01-09 17:51:14 -08:00
call Pokedex_GetSelectedMon
2015-02-11 13:36:02 -08:00
ld [CurPartySpecies], a
2016-01-09 17:51:14 -08:00
ld a, SCGB_POKEDEX
call Pokedex_GetSGBLayout
2015-02-11 13:36:02 -08:00
ld a, [CurPartySpecies]
call PlayCry
2015-10-24 16:49:19 -07:00
ld hl, wJumptableIndex
2015-02-11 13:36:02 -08:00
dec [hl]
ret
2016-01-09 17:51:14 -08:00
DexEntryScreen_ArrowCursorData: ; 402e8
2015-11-29 18:34:59 -08:00
db D_RIGHT | D_LEFT, 4
2015-02-11 13:36:02 -08:00
dwcoord 1, 17
dwcoord 6, 17
dwcoord 11, 17
dwcoord 15, 17
2015-11-29 18:34:59 -08:00
2015-02-11 13:36:02 -08:00
2016-01-09 19:03:38 -08:00
DexEntryScreen_MenuActionJumptable: ; 402f2
2015-12-09 08:38:40 -08:00
dw Pokedex_Page
dw .Area
dw .Cry
dw .Print
2015-02-11 13:36:02 -08:00
2015-12-09 08:38:40 -08:00
.Area: ; 402fa
2016-01-09 17:51:14 -08:00
call Pokedex_BlackOutBG
2015-02-11 13:36:02 -08:00
xor a
ld [hSCX], a
call DelayFrame
ld a, $7
ld [hWX], a
ld a, $90
ld [hWY], a
2016-01-09 17:51:14 -08:00
call Pokedex_GetSelectedMon
2015-11-29 18:34:59 -08:00
ld a, [wDexCurrentLocation]
2015-02-11 13:36:02 -08:00
ld e, a
2015-12-09 08:38:40 -08:00
predef _Area
2016-01-09 17:51:14 -08:00
call Pokedex_BlackOutBG
2015-02-11 13:36:02 -08:00
call DelayFrame
xor a
ld [hBGMapMode], a
ld a, $90
ld [hWY], a
ld a, $5
ld [hSCX], a
call DelayFrame
2016-01-09 19:03:38 -08:00
call Pokedex_RedisplayDexEntry
2016-01-09 17:51:14 -08:00
call Pokedex_LoadSelectedMonTiles
2015-02-11 13:36:02 -08:00
call WaitBGMap
2016-01-09 17:51:14 -08:00
call Pokedex_GetSelectedMon
2015-02-11 13:36:02 -08:00
ld [CurPartySpecies], a
2016-01-09 17:51:14 -08:00
ld a, SCGB_POKEDEX
call Pokedex_GetSGBLayout
2015-02-11 13:36:02 -08:00
ret
2015-12-09 08:38:40 -08:00
.Cry: ; 40340
2016-01-09 17:51:14 -08:00
call Pokedex_GetSelectedMon
2015-02-11 13:36:02 -08:00
ld a, [wd265]
call GetCryIndex
ld e, c
ld d, b
call PlayCryHeader
ret
2015-12-09 08:38:40 -08:00
.Print: ; 4034f
2016-01-09 19:03:38 -08:00
call Pokedex_ApplyPrintPals
2015-02-11 13:36:02 -08:00
xor a
ld [hSCX], a
ld a, [wcf65]
push af
2016-01-09 19:03:38 -08:00
ld a, [wDexEntryPrevJumptableIndex]
2015-02-11 13:36:02 -08:00
push af
2015-10-24 16:49:19 -07:00
ld a, [wJumptableIndex]
2015-02-11 13:36:02 -08:00
push af
2015-11-22 21:21:21 -08:00
callba PrintDexEntry
2015-02-11 13:36:02 -08:00
pop af
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-02-11 13:36:02 -08:00
pop af
2016-01-09 19:03:38 -08:00
ld [wDexEntryPrevJumptableIndex], a
2015-02-11 13:36:02 -08:00
pop af
ld [wcf65], a
2015-11-11 20:38:57 -08:00
call ClearBGPalettes
2015-02-11 13:36:02 -08:00
call DisableLCD
2015-11-29 18:34:59 -08:00
call Pokedex_LoadInvertedFont
2016-01-09 19:03:38 -08:00
call Pokedex_RedisplayDexEntry
2015-02-11 13:36:02 -08:00
call EnableLCD
call WaitBGMap
ld a, $5
ld [hSCX], a
2016-01-09 19:03:38 -08:00
call Pokedex_ApplyUsualPals
2015-02-11 13:36:02 -08:00
ret
2016-01-09 19:03:38 -08:00
Pokedex_RedisplayDexEntry: ; 4038d
2016-01-09 17:51:14 -08:00
call Pokedex_DrawDexEntryScreenBG
call Pokedex_GetSelectedMon
callba DisplayDexEntry
2015-11-29 18:34:59 -08:00
call Pokedex_DrawFootprint
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_InitOptionScreen: ; 4039d (10:439d)
2015-02-11 13:36:02 -08:00
xor a
ld [hBGMapMode], a
2015-02-11 13:36:02 -08:00
call ClearSprites
2016-01-09 17:51:14 -08:00
call Pokedex_DrawOptionScreenBG
call Pokedex_InitArrowCursor
2015-11-29 18:34:59 -08:00
ld a, [wCurrentDexMode]
2016-01-09 17:51:14 -08:00
ld [wDexArrowCursorPosIndex], a
2016-01-09 19:03:38 -08:00
call Pokedex_DisplayModeDescription
2015-02-11 13:36:02 -08:00
call WaitBGMap
2016-01-09 19:56:37 -08:00
ld a, SCGB_POKEDEX_SEARCH_OPTION
2016-01-09 17:51:14 -08:00
call Pokedex_GetSGBLayout
2015-11-29 18:34:59 -08:00
call Pokedex_IncrementDexPointer
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_UpdateOptionScreen: ; 403be (10:43be)
2015-11-29 18:34:59 -08:00
ld a, [wUnlockedUnownMode]
2015-02-11 13:36:02 -08:00
and a
2016-01-09 19:03:38 -08:00
jr nz, .okay
ld de, .NoUnownModeArrowCursorData
jr .okay2
.okay
ld de, .ArrowCursorData
.okay2
2016-01-09 17:51:14 -08:00
call Pokedex_MoveArrowCursor
2016-01-09 19:03:38 -08:00
call c, Pokedex_DisplayModeDescription
ld hl, hJoyPressed
2015-02-11 13:36:02 -08:00
ld a, [hl]
2016-01-09 19:03:38 -08:00
and SELECT | B_BUTTON
jr nz, .return_to_main_screen
2015-02-11 13:36:02 -08:00
ld a, [hl]
2016-01-09 19:03:38 -08:00
and A_BUTTON
jr nz, .do_menu_action
2015-02-11 13:36:02 -08:00
ret
2016-01-09 19:03:38 -08:00
.do_menu_action
2016-01-09 17:51:14 -08:00
ld a, [wDexArrowCursorPosIndex]
2016-01-09 19:03:38 -08:00
ld hl, .MenuActionJumptable
2015-11-29 18:34:59 -08:00
call Pokedex_LoadPointer
jp hl
2015-02-11 13:36:02 -08:00
2016-01-09 19:03:38 -08:00
.return_to_main_screen
2016-01-09 17:51:14 -08:00
call Pokedex_BlackOutBG
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_MAIN_SCR
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-02-11 13:36:02 -08:00
ret
2016-01-09 19:03:38 -08:00
.NoUnownModeArrowCursorData: ; 403f3
2015-11-29 18:34:59 -08:00
db D_UP | D_DOWN, 3
dwcoord 2, 4
dwcoord 2, 6
dwcoord 2, 8
2015-02-11 13:36:02 -08:00
2016-01-09 19:03:38 -08:00
.ArrowCursorData: ; 403fb
2015-11-29 18:34:59 -08:00
db D_UP | D_DOWN, 4
dwcoord 2, 4
dwcoord 2, 6
dwcoord 2, 8
2015-02-11 13:36:02 -08:00
dwcoord 2, 10
2016-01-09 19:03:38 -08:00
.MenuActionJumptable: ; 40405 (10:4405)
dw .MenuAction_NewMode
dw .MenuAction_OldMode
dw .MenuAction_ABCMode
dw .MenuAction_UnownMode
2015-02-11 13:36:02 -08:00
2016-01-09 19:03:38 -08:00
.MenuAction_NewMode: ; 4040d (10:440d)
2016-01-06 13:59:56 -08:00
ld b, DEXMODE_NEW
2016-01-09 19:03:38 -08:00
jr .ChangeMode
2015-02-11 13:36:02 -08:00
2016-01-09 19:03:38 -08:00
.MenuAction_OldMode: ; 40411 (10:4411)
2016-01-06 13:59:56 -08:00
ld b, DEXMODE_OLD
2016-01-09 19:03:38 -08:00
jr .ChangeMode
2015-02-11 13:36:02 -08:00
2016-01-09 19:03:38 -08:00
.MenuAction_ABCMode: ; 40415 (10:4415)
2016-01-06 13:59:56 -08:00
ld b, DEXMODE_ABC
2016-01-09 19:03:38 -08:00
.ChangeMode: ; 40417 (10:4417)
2015-11-29 18:34:59 -08:00
ld a, [wCurrentDexMode]
2015-02-11 13:36:02 -08:00
cp b
2016-01-09 19:03:38 -08:00
jr z, .skip_changing_mode ; Skip if new mode is same as current.
2015-02-11 13:36:02 -08:00
ld a, b
2015-11-29 18:34:59 -08:00
ld [wCurrentDexMode], a
2016-01-09 19:03:38 -08:00
call Pokedex_OrderMonsByMode
call Pokedex_DisplayChangingModesMessage
2015-02-11 13:36:02 -08:00
xor a
2016-01-09 17:51:14 -08:00
ld [wDexListingScrollOffset], a
2015-11-29 18:34:59 -08:00
ld [wDexListingCursor], a
call Pokedex_InitCursorPosition
2015-02-11 13:36:02 -08:00
2016-01-09 19:03:38 -08:00
.skip_changing_mode
2016-01-09 17:51:14 -08:00
call Pokedex_BlackOutBG
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_MAIN_SCR
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-02-11 13:36:02 -08:00
ret
2016-01-09 19:03:38 -08:00
.MenuAction_UnownMode: ; 4043a (10:443a)
2016-01-09 17:51:14 -08:00
call Pokedex_BlackOutBG
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_UNOWN_MODE
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_InitSearchScreen: ; 40443 (10:4443)
2015-02-11 13:36:02 -08:00
xor a
ld [hBGMapMode], a
2015-02-11 13:36:02 -08:00
call ClearSprites
2016-01-09 17:51:14 -08:00
call Pokedex_DrawSearchScreenBG
call Pokedex_InitArrowCursor
ld a, NORMAL + 1
ld [wDexSearchMonType1], a
2015-02-11 13:36:02 -08:00
xor a
2016-01-09 17:51:14 -08:00
ld [wDexSearchMonType2], a
call Pokedex_PlaceSearchScreenTypeStrings
2015-02-11 13:36:02 -08:00
xor a
ld [wDexSearchSlowpokeFrame], a
callba DoDexSearchSlowpokeFrame
2015-02-11 13:36:02 -08:00
call WaitBGMap
2016-01-09 19:56:37 -08:00
ld a, SCGB_POKEDEX_SEARCH_OPTION
2016-01-09 17:51:14 -08:00
call Pokedex_GetSGBLayout
2015-11-29 18:34:59 -08:00
call Pokedex_IncrementDexPointer
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_UpdateSearchScreen: ; 40471 (10:4471)
ld de, .ArrowCursorData
call Pokedex_MoveArrowCursor
call Pokedex_UpdateSearchMonType
call c, Pokedex_PlaceSearchScreenTypeStrings
ld hl, hJoyPressed
2015-02-11 13:36:02 -08:00
ld a, [hl]
and START | B_BUTTON
2016-01-09 19:03:38 -08:00
jr nz, .cancel
2015-02-11 13:36:02 -08:00
ld a, [hl]
and A_BUTTON
2016-01-09 19:03:38 -08:00
jr nz, .do_menu_action
2015-02-11 13:36:02 -08:00
ret
2016-01-09 19:03:38 -08:00
.do_menu_action
2016-01-09 17:51:14 -08:00
ld a, [wDexArrowCursorPosIndex]
ld hl, .MenuActionJumptable
2015-11-29 18:34:59 -08:00
call Pokedex_LoadPointer
jp hl
2015-02-11 13:36:02 -08:00
2016-01-09 19:03:38 -08:00
.cancel
2016-01-09 17:51:14 -08:00
call Pokedex_BlackOutBG
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_MAIN_SCR
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
.ArrowCursorData: ; 4049e
2015-11-29 18:34:59 -08:00
db D_UP | D_DOWN, 4
2015-02-11 13:36:02 -08:00
dwcoord 2, 4
dwcoord 2, 6
dwcoord 2, 13
dwcoord 2, 15
2016-01-09 17:51:14 -08:00
.MenuActionJumptable: ; 404a8
dw .MenuAction_MonSearchType
dw .MenuAction_MonSearchType
dw .MenuAction_BeginSearch
dw .MenuAction_Cancel
2015-02-11 13:36:02 -08:00
2016-01-09 17:51:14 -08:00
.MenuAction_MonSearchType: ; 404b0
call Pokedex_NextSearchMonType
call Pokedex_PlaceSearchScreenTypeStrings
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
.MenuAction_BeginSearch: ; 404b7
call Pokedex_SearchForMons
callba AnimateDexSearchSlowpoke
2016-01-09 17:51:14 -08:00
ld a, [wDexSearchResultCount]
2015-02-11 13:36:02 -08:00
and a
2016-01-09 17:51:14 -08:00
jr nz, .show_search_results
2016-01-09 19:03:38 -08:00
; No mon with matching types was found.
call Pokedex_OrderMonsByMode
call Pokedex_DisplayTypeNotFoundMessage
2015-02-11 13:36:02 -08:00
xor a
ld [hBGMapMode], a
2016-01-09 17:51:14 -08:00
call Pokedex_DrawSearchScreenBG
call Pokedex_InitArrowCursor
call Pokedex_PlaceSearchScreenTypeStrings
2015-02-11 13:36:02 -08:00
call WaitBGMap
ret
2016-01-09 17:51:14 -08:00
.show_search_results
2015-11-29 18:34:59 -08:00
ld [wDexListingEnd], a
2016-01-09 17:51:14 -08:00
ld a, [wDexListingScrollOffset]
ld [wDexListingScrollOffsetBackup], a
2015-11-29 18:34:59 -08:00
ld a, [wDexListingCursor]
ld [wDexListingCursorBackup], a
2015-11-29 18:34:59 -08:00
ld a, [wLastDexEntry]
2015-02-11 13:36:02 -08:00
ld [wcf65], a
xor a
2016-01-09 17:51:14 -08:00
ld [wDexListingScrollOffset], a
2015-11-29 18:34:59 -08:00
ld [wDexListingCursor], a
2016-01-09 17:51:14 -08:00
call Pokedex_BlackOutBG
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_SEARCH_RESULTS_SCR
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
.MenuAction_Cancel: ; 40501
call Pokedex_BlackOutBG
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_MAIN_SCR
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_InitSearchResultsScreen: ; 4050a (10:450a)
2015-02-11 13:36:02 -08:00
xor a
ld [hBGMapMode], a
2015-02-11 13:36:02 -08:00
xor a
hlcoord 0, 0, AttrMap
2015-11-29 18:34:59 -08:00
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
2015-02-11 13:36:02 -08:00
call ByteFill
2015-11-29 18:34:59 -08:00
call Pokedex_SetBGMapMode4
call Pokedex_ResetBGMapMode
callba DrawPokedexSearchResultsWindow
2016-01-09 17:51:14 -08:00
call Pokedex_PlaceSearchResultsTypeStrings
ld a, 4
ld [wDexListingHeight], a
call Pokedex_PrintListing
2015-11-29 18:34:59 -08:00
call Pokedex_SetBGMapMode3
call Pokedex_ResetBGMapMode
2016-01-09 17:51:14 -08:00
call Pokedex_DrawSearchResultsScreenBG
2015-02-11 13:36:02 -08:00
ld a, $5
ld [hSCX], a
2015-02-11 13:36:02 -08:00
ld a, $4a
ld [hWX], a
2015-02-11 13:36:02 -08:00
xor a
ld [hWY], a
2015-02-11 13:36:02 -08:00
call WaitBGMap
2015-11-29 18:34:59 -08:00
call Pokedex_ResetBGMapMode
callba DrawPokedexSearchResultsWindow
2016-01-09 17:51:14 -08:00
call Pokedex_PlaceSearchResultsTypeStrings
call Pokedex_UpdateSearchResultsCursorOAM
2015-02-11 13:36:02 -08:00
ld a, $ff
ld [CurPartySpecies], a
2016-01-09 17:51:14 -08:00
ld a, SCGB_POKEDEX
call Pokedex_GetSGBLayout
2015-11-29 18:34:59 -08:00
call Pokedex_IncrementDexPointer
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_UpdateSearchResultsScreen: ; 40562 (10:4562)
2016-01-09 19:03:38 -08:00
ld hl, hJoyPressed
2015-02-11 13:36:02 -08:00
ld a, [hl]
and B_BUTTON
2016-01-09 19:03:38 -08:00
jr nz, .return_to_search_screen
2015-02-11 13:36:02 -08:00
ld a, [hl]
and A_BUTTON
2016-01-09 19:03:38 -08:00
jr nz, .go_to_dex_entry
2016-01-09 17:51:14 -08:00
call Pokedex_ListingHandleDPadInput
2015-02-11 13:36:02 -08:00
ret nc
2016-01-09 17:51:14 -08:00
call Pokedex_UpdateSearchResultsCursorOAM
2015-02-11 13:36:02 -08:00
xor a
ld [hBGMapMode], a
2016-01-09 17:51:14 -08:00
call Pokedex_PrintListing
2015-11-29 18:34:59 -08:00
call Pokedex_SetBGMapMode3
call Pokedex_ResetBGMapMode
2015-02-11 13:36:02 -08:00
ret
2016-01-09 19:03:38 -08:00
.go_to_dex_entry
2016-01-09 17:51:14 -08:00
call Pokedex_GetSelectedMon
2015-11-29 18:34:59 -08:00
call Pokedex_CheckSeen
2015-02-11 13:36:02 -08:00
ret z
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_DEX_ENTRY_SCR
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_SEARCH_RESULTS_SCR
2016-01-09 19:03:38 -08:00
ld [wDexEntryPrevJumptableIndex], a
2015-02-11 13:36:02 -08:00
ret
2016-01-09 19:03:38 -08:00
.return_to_search_screen
ld a, [wDexListingScrollOffsetBackup]
2016-01-09 17:51:14 -08:00
ld [wDexListingScrollOffset], a
ld a, [wDexListingCursorBackup]
2015-11-29 18:34:59 -08:00
ld [wDexListingCursor], a
2015-02-11 13:36:02 -08:00
ld a, [wcf65]
2015-11-29 18:34:59 -08:00
ld [wLastDexEntry], a
2016-01-09 17:51:14 -08:00
call Pokedex_BlackOutBG
2015-02-11 13:36:02 -08:00
call ClearSprites
2016-01-09 19:03:38 -08:00
call Pokedex_OrderMonsByMode
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_SEARCH_SCR
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-02-11 13:36:02 -08:00
xor a
ld [hSCX], a
2015-02-11 13:36:02 -08:00
ld a, $a7
ld [hWX], a
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_InitUnownMode: ; 405bd (10:45bd)
2015-11-29 18:34:59 -08:00
call Pokedex_LoadUnownFont
2016-01-09 19:46:41 -08:00
call Pokedex_DrawUnownModeBG
2015-02-11 13:36:02 -08:00
xor a
2016-01-09 19:46:41 -08:00
ld [wDexCurrentUnownIndex], a
call Pokedex_LoadUnownFrontpicTiles
call Pokedex_UnownModePlaceCursor
2015-11-29 18:34:59 -08:00
callba PrintUnownWord
2015-02-11 13:36:02 -08:00
call WaitBGMap
2016-01-09 19:56:37 -08:00
ld a, SCGB_POKEDEX_UNOWN_MODE
2016-01-09 17:51:14 -08:00
call Pokedex_GetSGBLayout
2015-11-29 18:34:59 -08:00
call Pokedex_IncrementDexPointer
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_UpdateUnownMode: ; 405df (10:45df)
ld hl, hJoyPressed
2015-02-11 13:36:02 -08:00
ld a, [hl]
and A_BUTTON | B_BUTTON
2015-11-29 18:34:59 -08:00
jr nz, .a_b
2016-01-09 19:03:38 -08:00
call Pokedex_UnownModeHandleDPadInput
2015-02-11 13:36:02 -08:00
ret
2015-11-29 18:34:59 -08:00
.a_b
2016-01-09 17:51:14 -08:00
call Pokedex_BlackOutBG
2016-01-09 23:05:34 -08:00
ld a, DEXSTATE_OPTION_SCR
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-02-11 13:36:02 -08:00
call DelayFrame
2015-11-29 18:34:59 -08:00
call Pokedex_CheckSGB
jr nz, .decompress
callba LoadSGBPokedexGFX2
2015-11-29 18:34:59 -08:00
jr .done
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
.decompress
2015-02-11 13:36:02 -08:00
ld hl, PokedexLZ
ld de, VTiles2 tile $31
2015-02-11 13:36:02 -08:00
lb bc, BANK(PokedexLZ), $3a
2015-11-04 13:14:27 -08:00
call DecompressRequest2bpp
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
.done
2015-02-11 13:36:02 -08:00
ret
2016-01-09 19:03:38 -08:00
Pokedex_UnownModeHandleDPadInput: ; 40610 (10:4610)
2015-10-16 10:35:43 -07:00
ld hl, hJoyLast
2015-02-11 13:36:02 -08:00
ld a, [hl]
and D_RIGHT
jr nz, .right
ld a, [hl]
and D_LEFT
jr nz, .left
ret
.right
2016-01-09 19:46:41 -08:00
ld a, [wDexUnownCount]
2015-02-11 13:36:02 -08:00
ld e, a
2016-01-09 19:46:41 -08:00
ld hl, wDexCurrentUnownIndex
2015-02-11 13:36:02 -08:00
ld a, [hl]
inc a
cp e
ret nc
ld a, [hl]
inc [hl]
2015-11-29 18:34:59 -08:00
jr .update
2015-02-11 13:36:02 -08:00
.left
2016-01-09 19:46:41 -08:00
ld hl, wDexCurrentUnownIndex
2015-02-11 13:36:02 -08:00
ld a, [hl]
and a
ret z
ld a, [hl]
dec [hl]
2015-11-29 18:34:59 -08:00
.update
2015-02-11 13:36:02 -08:00
push af
xor a
ld [hBGMapMode], a
2015-02-11 13:36:02 -08:00
pop af
2016-01-09 19:46:41 -08:00
call Pokedex_UnownModeEraseCursor
call Pokedex_LoadUnownFrontpicTiles
call Pokedex_UnownModePlaceCursor
2015-11-29 18:34:59 -08:00
callba PrintUnownWord
2015-02-11 13:36:02 -08:00
ld a, $1
ld [hBGMapMode], a
2015-02-11 13:36:02 -08:00
call DelayFrame
call DelayFrame
ret
2016-01-09 19:46:41 -08:00
Pokedex_UnownModeEraseCursor: ; 40654 (10:4654)
ld c, " "
jr Pokedex_UnownModeUpdateCursorGfx
2015-02-11 13:36:02 -08:00
2016-01-09 19:46:41 -08:00
Pokedex_UnownModePlaceCursor: ; 40658 (10:4658)
ld a, [wDexCurrentUnownIndex]
ld c, $5a ; diamond cursor
2015-02-11 13:36:02 -08:00
2016-01-09 19:46:41 -08:00
Pokedex_UnownModeUpdateCursorGfx: ; 4065d (10:465d)
2015-02-11 13:36:02 -08:00
ld e, a
ld d, 0
2016-01-09 19:46:41 -08:00
ld hl, UnownModeLetterAndCursorCoords + 2
2015-07-20 19:18:18 -07:00
rept 4
2015-02-11 13:36:02 -08:00
add hl, de
2015-07-20 19:18:18 -07:00
endr
2015-02-11 13:36:02 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
ld [hl], c
ret
2015-11-29 18:34:59 -08:00
Pokedex_NextOrPreviousDexEntry: ; 4066c (10:466c)
ld a, [wDexListingCursor]
ld [wBackupDexListingCursor], a
2016-01-09 17:51:14 -08:00
ld a, [wDexListingScrollOffset]
2015-11-29 18:34:59 -08:00
ld [wBackupDexListingPage], a
2015-10-16 10:35:43 -07:00
ld hl, hJoyLast
2015-02-11 13:36:02 -08:00
ld a, [hl]
and D_UP
jr nz, .up
ld a, [hl]
and D_DOWN
jr nz, .down
and a
ret
.up
2016-01-09 17:51:14 -08:00
ld a, [wDexListingHeight]
2015-02-11 13:36:02 -08:00
ld d, a
2015-11-29 18:34:59 -08:00
ld a, [wDexListingEnd]
2015-02-11 13:36:02 -08:00
ld e, a
2016-01-09 17:51:14 -08:00
call Pokedex_ListingMoveCursorUp
2015-11-29 18:34:59 -08:00
jr nc, .nope
2016-01-09 17:51:14 -08:00
call Pokedex_GetSelectedMon
2015-11-29 18:34:59 -08:00
call Pokedex_CheckSeen
jr nz, .yep
2015-02-11 13:36:02 -08:00
jr .up
.down
2016-01-09 17:51:14 -08:00
ld a, [wDexListingHeight]
2015-02-11 13:36:02 -08:00
ld d, a
2015-11-29 18:34:59 -08:00
ld a, [wDexListingEnd]
2015-02-11 13:36:02 -08:00
ld e, a
2016-01-09 17:51:14 -08:00
call Pokedex_ListingMoveCursorDown
2015-11-29 18:34:59 -08:00
jr nc, .nope
2016-01-09 17:51:14 -08:00
call Pokedex_GetSelectedMon
2015-11-29 18:34:59 -08:00
call Pokedex_CheckSeen
jr nz, .yep
2015-02-11 13:36:02 -08:00
jr .down
2015-11-29 18:34:59 -08:00
.yep
2015-02-11 13:36:02 -08:00
scf
ret
2015-11-29 18:34:59 -08:00
.nope
ld a, [wBackupDexListingCursor]
ld [wDexListingCursor], a
ld a, [wBackupDexListingPage]
2016-01-09 17:51:14 -08:00
ld [wDexListingScrollOffset], a
2015-02-11 13:36:02 -08:00
and a
ret
2016-01-09 17:51:14 -08:00
Pokedex_ListingHandleDPadInput: ; 406c5 (10:46c5)
; Handles D-pad input for a list of Pokémon.
ld a, [wDexListingHeight]
2015-02-11 13:36:02 -08:00
ld d, a
2015-11-29 18:34:59 -08:00
ld a, [wDexListingEnd]
2015-02-11 13:36:02 -08:00
ld e, a
2015-10-16 10:35:43 -07:00
ld hl, hJoyLast
2015-02-11 13:36:02 -08:00
ld a, [hl]
and D_UP
2016-01-09 17:51:14 -08:00
jr nz, Pokedex_ListingMoveCursorUp
2015-02-11 13:36:02 -08:00
ld a, [hl]
and D_DOWN
2016-01-09 17:51:14 -08:00
jr nz, Pokedex_ListingMoveCursorDown
2015-02-11 13:36:02 -08:00
ld a, d
cp e
2016-01-09 17:51:14 -08:00
jr nc, Pokedex_ListingPosStayedSame
2015-02-11 13:36:02 -08:00
ld a, [hl]
2016-01-09 17:51:14 -08:00
and D_LEFT
jr nz, Pokedex_ListingMoveUpOnePage
2015-02-11 13:36:02 -08:00
ld a, [hl]
2016-01-09 17:51:14 -08:00
and D_RIGHT
jr nz, Pokedex_ListingMoveDownOnePage
jr Pokedex_ListingPosStayedSame
2015-02-11 13:36:02 -08:00
2016-01-09 17:51:14 -08:00
Pokedex_ListingMoveCursorUp: ; 406ea (10:46ea)
2015-11-29 18:34:59 -08:00
ld hl, wDexListingCursor
2015-02-11 13:36:02 -08:00
ld a, [hl]
and a
2016-01-09 17:51:14 -08:00
jr z, .try_scrolling
2015-02-11 13:36:02 -08:00
dec [hl]
2016-01-09 17:51:14 -08:00
jr Pokedex_ListingPosChanged
.try_scrolling
ld hl, wDexListingScrollOffset
2015-02-11 13:36:02 -08:00
ld a, [hl]
and a
2016-01-09 17:51:14 -08:00
jr z, Pokedex_ListingPosStayedSame
2015-02-11 13:36:02 -08:00
dec [hl]
2016-01-09 17:51:14 -08:00
jr Pokedex_ListingPosChanged
2015-02-11 13:36:02 -08:00
2016-01-09 17:51:14 -08:00
Pokedex_ListingMoveCursorDown: ; 406fe (10:46fe)
2015-11-29 18:34:59 -08:00
ld hl, wDexListingCursor
2015-02-11 13:36:02 -08:00
ld a, [hl]
inc a
cp e
2016-01-09 17:51:14 -08:00
jr nc, Pokedex_ListingPosStayedSame
2015-02-11 13:36:02 -08:00
cp d
2016-01-09 17:51:14 -08:00
jr nc, .try_scrolling
2015-02-11 13:36:02 -08:00
inc [hl]
2016-01-09 17:51:14 -08:00
jr Pokedex_ListingPosChanged
.try_scrolling
ld hl, wDexListingScrollOffset
2015-02-11 13:36:02 -08:00
add [hl]
cp e
2016-01-09 17:51:14 -08:00
jr nc, Pokedex_ListingPosStayedSame
2015-02-11 13:36:02 -08:00
inc [hl]
2016-01-09 17:51:14 -08:00
jr Pokedex_ListingPosChanged
Pokedex_ListingMoveUpOnePage: ; 40716 (10:4716)
ld hl, wDexListingScrollOffset
2015-02-11 13:36:02 -08:00
ld a, [hl]
and a
2016-01-09 17:51:14 -08:00
jr z, Pokedex_ListingPosStayedSame
2015-02-11 13:36:02 -08:00
cp d
2016-01-09 17:51:14 -08:00
jr nc, .not_near_top
; If we're already less than page away from the top, go to the top.
2015-02-11 13:36:02 -08:00
xor a
ld [hl], a
2016-01-09 17:51:14 -08:00
jr Pokedex_ListingPosChanged
.not_near_top
2015-02-11 13:36:02 -08:00
sub d
ld [hl], a
2016-01-09 17:51:14 -08:00
jr Pokedex_ListingPosChanged
Pokedex_ListingMoveDownOnePage: ; 40728 (10:4728)
; When moving down a page, the return value always report a change in position.
ld hl, wDexListingScrollOffset
2015-02-11 13:36:02 -08:00
ld a, d
add a
add [hl]
2016-01-09 17:51:14 -08:00
jr c, .near_bottom
2015-02-11 13:36:02 -08:00
cp e
2016-01-09 17:51:14 -08:00
jr c, .not_near_bottom
.near_bottom
2015-02-11 13:36:02 -08:00
ld a, e
sub d
ld [hl], a
2016-01-09 17:51:14 -08:00
jr Pokedex_ListingPosChanged
.not_near_bottom
2015-02-11 13:36:02 -08:00
ld a, [hl]
add d
ld [hl], a
2016-01-09 17:51:14 -08:00
jr Pokedex_ListingPosChanged
Pokedex_ListingPosStayedSame: ; 4073d (10:473d)
2015-02-11 13:36:02 -08:00
and a
ret
2016-01-09 17:51:14 -08:00
Pokedex_ListingPosChanged: ; 4073f (10:473f)
2015-02-11 13:36:02 -08:00
scf
ret
2016-01-19 16:51:05 -08:00
Pokedex_FillColumn: ; 40741
; Fills a column starting at HL, going downwards.
; B is the height of the column and A is the tile it's filled with.
2015-02-11 13:36:02 -08:00
push de
2016-01-12 09:46:18 -08:00
ld de, SCREEN_WIDTH
.loop
2015-02-11 13:36:02 -08:00
ld [hl], a
add hl, de
dec b
2016-01-12 09:46:18 -08:00
jr nz, .loop
2015-02-11 13:36:02 -08:00
pop de
ret
2016-01-09 19:03:38 -08:00
Pokedex_DrawMainScreenBG: ; 4074c (10:474c)
2016-01-09 17:51:14 -08:00
; Draws the left sidebar and the bottom bar on the main screen.
2015-02-11 13:36:02 -08:00
hlcoord 0, 17
ld de, String_START_SEARCH
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceString
2015-02-11 13:36:02 -08:00
ld a, $32
hlcoord 0, 0
2015-11-29 18:34:59 -08:00
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
2015-02-11 13:36:02 -08:00
call ByteFill
hlcoord 0, 0
2015-02-11 13:36:02 -08:00
lb bc, 7, 7
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceBorder
2015-02-11 13:36:02 -08:00
hlcoord 0, 9
2016-01-12 09:46:18 -08:00
lb bc, 6, 7
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceBorder
2015-02-11 13:36:02 -08:00
hlcoord 1, 11
ld de, String_SEEN
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceString
2016-01-09 17:51:14 -08:00
ld hl, PokedexSeen
2015-02-11 13:36:02 -08:00
ld b, EndPokedexSeen - PokedexSeen
call CountSetBits
ld de, wd265
hlcoord 5, 12
lb bc, 1, 3
2015-02-11 13:36:02 -08:00
call PrintNum
hlcoord 1, 14
ld de, String_OWN
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceString
2015-02-11 13:36:02 -08:00
ld hl, PokedexCaught
ld b, EndPokedexCaught - PokedexCaught
call CountSetBits
ld de, wd265
hlcoord 5, 15
lb bc, 1, 3
2015-02-11 13:36:02 -08:00
call PrintNum
hlcoord 1, 17
ld de, String_SELECT_OPTION
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceString
2015-02-11 13:36:02 -08:00
hlcoord 8, 1
2016-01-12 09:46:18 -08:00
ld b, 7
2015-02-11 13:36:02 -08:00
ld a, $5a
2016-01-19 16:51:05 -08:00
call Pokedex_FillColumn
2015-02-11 13:36:02 -08:00
hlcoord 8, 10
2016-01-12 09:46:18 -08:00
ld b, 6
2015-02-11 13:36:02 -08:00
ld a, $5a
2016-01-19 16:51:05 -08:00
call Pokedex_FillColumn
2015-02-11 13:36:02 -08:00
hlcoord 8, 0
ld [hl], $59
hlcoord 8, 8
ld [hl], $53
hlcoord 8, 9
ld [hl], $54
hlcoord 8, 16
ld [hl], $5b
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceFrontpicTopLeftCorner
2015-02-11 13:36:02 -08:00
ret
String_SEEN: ; 407e1
2015-02-11 13:36:02 -08:00
db "SEEN", $ff
String_OWN: ; 407e6
2015-02-11 13:36:02 -08:00
db "OWN", $ff
String_SELECT_OPTION: ; 407ea
2015-02-11 13:36:02 -08:00
db $3b, $48, $49, $4a, $44, $45, $46, $47 ; SELECT > OPTION
String_START_SEARCH: ; 407f2
2015-02-11 13:36:02 -08:00
db $3c, $3b, $41, $42, $43, $4b, $4c, $4d, $4e, $3c, $ff ; START > SEARCH
2016-01-09 17:51:14 -08:00
Pokedex_DrawDexEntryScreenBG: ; 407fd
2015-11-29 18:34:59 -08:00
call Pokedex_FillBackgroundColor2
hlcoord 0, 0
2016-01-12 09:46:18 -08:00
lb bc, 15, 18
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceBorder
2015-02-11 13:36:02 -08:00
hlcoord 19, 0
ld [hl], $34
hlcoord 19, 1
2016-01-12 09:46:18 -08:00
ld a, " "
ld b, 15
2016-01-19 16:51:05 -08:00
call Pokedex_FillColumn
2015-02-11 13:36:02 -08:00
ld [hl], $39
hlcoord 1, 10
2016-01-12 09:46:18 -08:00
ld bc, 19
2015-02-11 13:36:02 -08:00
ld a, $61
call ByteFill
hlcoord 1, 17
2016-01-12 09:46:18 -08:00
ld bc, 18
ld a, " "
2015-02-11 13:36:02 -08:00
call ByteFill
hlcoord 9, 7
2016-01-09 17:51:14 -08:00
ld de, .Height
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceString
2015-02-11 13:36:02 -08:00
hlcoord 9, 9
2016-01-09 17:51:14 -08:00
ld de, .Weight
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceString
2015-02-11 13:36:02 -08:00
hlcoord 0, 17
2016-01-09 17:51:14 -08:00
ld de, .MenuItems
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceString
call Pokedex_PlaceFrontpicTopLeftCorner
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
.Unused: ; 4084f
2015-02-11 13:36:02 -08:00
db $5c, $5d, $ff ; No.
2016-01-09 17:51:14 -08:00
.Height: ; 40852
2015-02-11 13:36:02 -08:00
db "HT ?", $5e, "??", $5f, $ff ; HT ?'??"
2016-01-09 17:51:14 -08:00
.Weight: ; 4085c
2015-02-11 13:36:02 -08:00
db "WT ???lb", $ff ; WT ???lb
2016-01-09 17:51:14 -08:00
.MenuItems: ; 40867
2015-02-11 13:36:02 -08:00
db $3b, " PAGE AREA CRY PRNT", $ff
2016-01-09 17:51:14 -08:00
Pokedex_DrawOptionScreenBG: ; 4087c (10:487c)
2015-11-29 18:34:59 -08:00
call Pokedex_FillBackgroundColor2
2015-02-11 13:36:02 -08:00
hlcoord 0, 2
lb bc, 8, 18
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceBorder
2015-02-11 13:36:02 -08:00
hlcoord 0, 12
lb bc, 4, 18
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceBorder
2015-02-11 13:36:02 -08:00
hlcoord 0, 1
2016-01-09 17:51:14 -08:00
ld de, .Title
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceString
2015-02-11 13:36:02 -08:00
hlcoord 3, 4
2016-01-09 17:51:14 -08:00
ld de, .Modes
2015-02-11 13:36:02 -08:00
call PlaceString
2015-11-29 18:34:59 -08:00
ld a, [wUnlockedUnownMode]
2015-02-11 13:36:02 -08:00
and a
ret z
hlcoord 3, 10
2016-01-09 17:51:14 -08:00
ld de, .UnownMode
2015-02-11 13:36:02 -08:00
call PlaceString
ret
2016-01-09 17:51:14 -08:00
.Title: ; 408b2
2015-02-11 13:36:02 -08:00
db $3b, " OPTION ", $3c, $ff
2016-01-09 17:51:14 -08:00
.Modes: ; 408bd
db "NEW #DEX MODE"
next "OLD #DEX MODE"
next "A to Z MODE"
db "@"
2015-02-11 13:36:02 -08:00
2016-01-09 17:51:14 -08:00
.UnownMode: ; 408e5
2015-02-11 13:36:02 -08:00
db "UNOWN MODE@"
2016-01-09 17:51:14 -08:00
Pokedex_DrawSearchScreenBG: ; 408f0 (10:48f0)
2015-11-29 18:34:59 -08:00
call Pokedex_FillBackgroundColor2
2015-02-11 13:36:02 -08:00
hlcoord 0, 2
lb bc, 14, 18
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceBorder
2015-02-11 13:36:02 -08:00
hlcoord 0, 1
2016-01-09 17:51:14 -08:00
ld de, .Title
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceString
2015-02-11 13:36:02 -08:00
hlcoord 8, 4
2016-01-09 17:51:14 -08:00
ld de, .TypeLeftRightArrows
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceString
2015-02-11 13:36:02 -08:00
hlcoord 8, 6
2016-01-09 17:51:14 -08:00
ld de, .TypeLeftRightArrows
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceString
2015-02-11 13:36:02 -08:00
hlcoord 3, 4
2016-01-09 17:51:14 -08:00
ld de, .Types
2015-02-11 13:36:02 -08:00
call PlaceString
hlcoord 3, 13
2016-01-09 17:51:14 -08:00
ld de, .Menu
2015-02-11 13:36:02 -08:00
call PlaceString
ret
2016-01-09 17:51:14 -08:00
.Title: ; 4092a
2015-02-11 13:36:02 -08:00
db $3b, " SEARCH ", $3c, $ff
2016-01-09 17:51:14 -08:00
.TypeLeftRightArrows: ; 40935
2015-02-11 13:36:02 -08:00
db $3d, " ", $3e, $ff
2016-01-09 17:51:14 -08:00
.Types: ; 40940
2015-02-11 13:36:02 -08:00
db "TYPE1"
next "TYPE2"
db "@"
2016-01-09 17:51:14 -08:00
.Menu: ; 4094c
2015-02-11 13:36:02 -08:00
db "BEGIN SEARCH!!"
next "CANCEL"
db "@"
2016-01-09 17:51:14 -08:00
Pokedex_DrawSearchResultsScreenBG: ; 40962 (10:4962)
2015-11-29 18:34:59 -08:00
call Pokedex_FillBackgroundColor2
hlcoord 0, 0
2015-02-11 13:36:02 -08:00
lb bc, 7, 7
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceBorder
2015-02-11 13:36:02 -08:00
hlcoord 0, 11
lb bc, 5, 18
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceBorder
2015-02-11 13:36:02 -08:00
hlcoord 1, 12
2016-01-09 17:51:14 -08:00
ld de, .BottomWindowText
2015-02-11 13:36:02 -08:00
call PlaceString
2016-01-09 17:51:14 -08:00
ld de, wDexSearchResultCount
2015-02-11 13:36:02 -08:00
hlcoord 1, 16
lb bc, 1, 3
2015-02-11 13:36:02 -08:00
call PrintNum
hlcoord 8, 0
ld [hl], $59
hlcoord 8, 1
2016-01-12 09:46:18 -08:00
ld b, 7
2015-02-11 13:36:02 -08:00
ld a, $5a
2016-01-19 16:51:05 -08:00
call Pokedex_FillColumn
2015-02-11 13:36:02 -08:00
hlcoord 8, 8
ld [hl], $53
hlcoord 8, 9
ld [hl], $69
hlcoord 8, 10
ld [hl], $6a
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceFrontpicTopLeftCorner
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
.BottomWindowText: ; 409ae
2015-02-11 13:36:02 -08:00
db "SEARCH RESULTS"
next " TYPE"
next " FOUND!"
db "@"
2016-01-09 17:51:14 -08:00
Pokedex_PlaceSearchResultsTypeStrings: ; 409cf (10:49cf)
ld a, [wDexSearchMonType1]
2015-02-11 13:36:02 -08:00
hlcoord 0, 14
2016-01-09 17:51:14 -08:00
call Pokedex_PlaceTypeString
ld a, [wDexSearchMonType1]
2015-02-11 13:36:02 -08:00
ld b, a
2016-01-09 17:51:14 -08:00
ld a, [wDexSearchMonType2]
2015-02-11 13:36:02 -08:00
and a
2016-01-09 17:51:14 -08:00
jr z, .done
2015-02-11 13:36:02 -08:00
cp b
2016-01-09 17:51:14 -08:00
jr z, .done
2015-02-11 13:36:02 -08:00
hlcoord 2, 15
2016-01-09 17:51:14 -08:00
call Pokedex_PlaceTypeString
2015-02-11 13:36:02 -08:00
hlcoord 1, 15
2016-01-09 17:51:14 -08:00
ld [hl], "/"
.done
2015-02-11 13:36:02 -08:00
ret
2016-01-09 19:46:41 -08:00
Pokedex_DrawUnownModeBG: ; 409f1 (10:49f1)
2015-11-29 18:34:59 -08:00
call Pokedex_FillBackgroundColor2
2015-02-11 13:36:02 -08:00
hlcoord 2, 1
lb bc, 10, 13
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceBorder
2015-02-11 13:36:02 -08:00
hlcoord 2, 14
lb bc, 1, 13
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceBorder
2015-02-11 13:36:02 -08:00
hlcoord 2, 15
ld [hl], $3d
hlcoord 16, 15
ld [hl], $3e
hlcoord 6, 5
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceFrontpicAtHL
2015-02-11 13:36:02 -08:00
ld de, 0
ld b, 0
ld c, 26
2015-11-29 18:34:59 -08:00
.loop
2015-02-11 13:36:02 -08:00
ld hl, UnownDex
add hl, de
ld a, [hl]
and a
2015-11-29 18:34:59 -08:00
jr z, .done
2015-02-11 13:36:02 -08:00
push af
2016-01-09 19:46:41 -08:00
ld hl, UnownModeLetterAndCursorCoords
2015-07-20 19:18:18 -07:00
rept 4
2015-02-11 13:36:02 -08:00
add hl, de
2015-07-20 19:18:18 -07:00
endr
2015-02-11 13:36:02 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
pop af
2015-11-29 18:34:59 -08:00
add $40 - 1 ; Unown A
2015-02-11 13:36:02 -08:00
ld [hl], a
inc de
inc b
dec c
2015-11-29 18:34:59 -08:00
jr nz, .loop
.done
2015-02-11 13:36:02 -08:00
ld a, b
2016-01-09 19:46:41 -08:00
ld [wDexUnownCount], a
2015-02-11 13:36:02 -08:00
ret
2016-01-09 19:46:41 -08:00
UnownModeLetterAndCursorCoords: ; 40a3e
2015-11-29 18:34:59 -08:00
; letter, cursor
2015-02-11 13:36:02 -08:00
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
2015-11-29 18:34:59 -08:00
Pokedex_FillBackgroundColor2: ; 40aa6
hlcoord 0, 0
2015-02-11 13:36:02 -08:00
ld a, $32
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
2015-02-11 13:36:02 -08:00
call ByteFill
ret
2015-11-29 18:34:59 -08:00
Pokedex_PlaceFrontpicTopLeftCorner: ; 40ab2
2015-02-11 13:36:02 -08:00
hlcoord 1, 1
2015-11-29 18:34:59 -08:00
Pokedex_PlaceFrontpicAtHL: ; 40ab5
2015-02-11 13:36:02 -08:00
xor a
ld b, $7
2015-11-29 18:34:59 -08:00
.row
2015-02-11 13:36:02 -08:00
ld c, $7
push af
push hl
2015-11-29 18:34:59 -08:00
.col
2015-02-11 13:36:02 -08:00
ld [hli], a
add $7
dec c
2015-11-29 18:34:59 -08:00
jr nz, .col
2015-02-11 13:36:02 -08:00
pop hl
2015-11-29 18:34:59 -08:00
ld de, SCREEN_WIDTH
2015-02-11 13:36:02 -08:00
add hl, de
pop af
inc a
dec b
2015-11-29 18:34:59 -08:00
jr nz, .row
2015-02-11 13:36:02 -08:00
ret
2015-11-29 18:34:59 -08:00
Pokedex_PlaceString: ; 40acd
.loop
2015-02-11 13:36:02 -08:00
ld a, [de]
2015-11-29 18:34:59 -08:00
cp -1
2015-02-11 13:36:02 -08:00
ret z
inc de
ld [hli], a
2015-11-29 18:34:59 -08:00
jr .loop
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
Pokedex_PlaceBorder: ; 40ad5
2015-02-11 13:36:02 -08:00
push hl
ld a, $33
ld [hli], a
ld d, $34
2015-11-29 18:34:59 -08:00
call .FillRow
2015-02-11 13:36:02 -08:00
ld a, $35
ld [hl], a
pop hl
2015-11-29 18:34:59 -08:00
ld de, SCREEN_WIDTH
2015-02-11 13:36:02 -08:00
add hl, de
2015-11-29 18:34:59 -08:00
.loop
2015-02-11 13:36:02 -08:00
push hl
ld a, $36
ld [hli], a
ld d, $7f
2015-11-29 18:34:59 -08:00
call .FillRow
2015-02-11 13:36:02 -08:00
ld a, $37
ld [hl], a
pop hl
2015-11-29 18:34:59 -08:00
ld de, SCREEN_WIDTH
2015-02-11 13:36:02 -08:00
add hl, de
dec b
2015-11-29 18:34:59 -08:00
jr nz, .loop
2015-02-11 13:36:02 -08:00
ld a, $38
ld [hli], a
ld d, $39
2015-11-29 18:34:59 -08:00
call .FillRow
2015-02-11 13:36:02 -08:00
ld a, $3a
ld [hl], a
ret
2015-11-29 18:34:59 -08:00
.FillRow: ; 40b06
2015-02-11 13:36:02 -08:00
ld e, c
2015-11-29 18:34:59 -08:00
.row_loop
2015-02-11 13:36:02 -08:00
ld a, e
and a
ret z
ld a, d
ld [hli], a
dec e
2015-11-29 18:34:59 -08:00
jr .row_loop
2015-02-11 13:36:02 -08:00
2016-01-09 17:51:14 -08:00
Pokedex_PrintListing: ; 40b0f (10:4b0f)
; Prints the list of Pokémon on the main Pokédex screen.
2015-11-29 18:34:59 -08:00
; 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
2016-01-09 17:51:14 -08:00
2015-11-29 18:34:59 -08:00
.resume
2016-01-09 17:51:14 -08:00
; Clear (2 * [wDexListingHeight] + 1) by 11 box starting at 0,1
2015-02-11 13:36:02 -08:00
hlcoord 0, 1
2016-01-09 17:51:14 -08:00
ld a, [wDexListingHeight]
2015-02-11 13:36:02 -08:00
add a
inc a
ld b, a
2015-11-29 18:34:59 -08:00
ld a, " "
call Pokedex_FillBox
2016-01-09 17:51:14 -08:00
; Load de with wPokedexDataStart + [wDexListingScrollOffset]
ld a, [wDexListingScrollOffset]
2015-02-11 13:36:02 -08:00
ld e, a
ld d, $0
2015-11-29 18:34:59 -08:00
ld hl, wPokedexDataStart
2015-02-11 13:36:02 -08:00
add hl, de
ld e, l
ld d, h
hlcoord 0, 2
2016-01-09 17:51:14 -08:00
ld a, [wDexListingHeight]
2015-11-29 18:34:59 -08:00
.loop
2015-02-11 13:36:02 -08:00
push af
ld a, [de]
ld [wd265], a
push de
push hl
2016-01-09 17:51:14 -08:00
call .PrintEntry
2015-02-11 13:36:02 -08:00
pop hl
2015-11-29 18:34:59 -08:00
ld de, 2 * SCREEN_WIDTH
2015-02-11 13:36:02 -08:00
add hl, de
pop de
inc de
pop af
dec a
2015-11-29 18:34:59 -08:00
jr nz, .loop
2016-01-09 17:51:14 -08:00
call Pokedex_LoadSelectedMonTiles
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
.PrintEntry: ; 40b55 (10:4b55)
; Prints one entry in the list of Pokémon on the main Pokédex screen.
2015-02-11 13:36:02 -08:00
and a
ret z
2015-11-29 18:34:59 -08:00
call Pokedex_PrintNumberIfOldMode
call Pokedex_PlaceDefaultStringIfNotSeen
2015-02-11 13:36:02 -08:00
ret c
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceCaughtSymbolIfCaught
2015-02-11 13:36:02 -08:00
push hl
call GetPokemonName
pop hl
call PlaceString
ret
2015-11-29 18:34:59 -08:00
Pokedex_PrintNumberIfOldMode: ; 40b6a (10:4b6a)
ld a, [wCurrentDexMode]
cp DEXMODE_OLD
jr z, .printnum
2015-02-11 13:36:02 -08:00
ret
2015-11-29 18:34:59 -08:00
.printnum
2015-02-11 13:36:02 -08:00
push hl
2015-11-29 18:34:59 -08:00
ld de, -SCREEN_WIDTH
2015-02-11 13:36:02 -08:00
add hl, de
ld de, wd265
lb bc, PRINTNUM_LEADINGZEROS | 1, 3
2015-02-11 13:36:02 -08:00
call PrintNum
pop hl
ret
2015-11-29 18:34:59 -08:00
Pokedex_PlaceCaughtSymbolIfCaught: ; 40b82 (10:4b82)
call Pokedex_CheckCaught
jr nz, .place_caught_symbol
2015-02-11 13:36:02 -08:00
inc hl
ret
2015-11-29 18:34:59 -08:00
.place_caught_symbol
2015-02-11 13:36:02 -08:00
ld a, $4f
ld [hli], a
ret
2015-11-29 18:34:59 -08:00
Pokedex_PlaceDefaultStringIfNotSeen: ; 40b8d (10:4b8d)
call Pokedex_CheckSeen
2015-02-11 13:36:02 -08:00
ret nz
inc hl
2015-11-29 18:34:59 -08:00
ld de, .NameNotSeen
2015-02-11 13:36:02 -08:00
call PlaceString
scf
ret
2015-11-29 18:34:59 -08:00
.NameNotSeen: ; 40b9a
2015-02-11 13:36:02 -08:00
db "-----@"
2015-11-29 18:34:59 -08:00
Pokedex_DrawFootprint: ; 40ba0
2015-02-11 13:36:02 -08:00
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
2016-01-09 17:51:14 -08:00
Pokedex_GetSelectedMon: ; 40bb1
; Gets the species of the currently selected Pokémon. This corresponds to the
; position of the cursor in the main listing, but this function can be used
; on all Pokédex screens.
2015-11-29 18:34:59 -08:00
ld a, [wDexListingCursor]
2016-01-09 17:51:14 -08:00
ld hl, wDexListingScrollOffset
2015-02-11 13:36:02 -08:00
add [hl]
ld e, a
ld d, $0
2015-11-29 18:34:59 -08:00
ld hl, wPokedexDataStart
2015-02-11 13:36:02 -08:00
add hl, de
ld a, [hl]
ld [wd265], a
ret
2015-11-29 18:34:59 -08:00
Pokedex_CheckCaught: ; 40bc4 (10:4bc4)
2015-02-11 13:36:02 -08:00
push de
push hl
ld a, [wd265]
dec a
call CheckCaughtMon
pop hl
pop de
ret
2015-11-29 18:34:59 -08:00
Pokedex_CheckSeen: ; 40bd0
2015-02-11 13:36:02 -08:00
push de
push hl
ld a, [wd265]
dec a
call CheckSeenMon
pop hl
pop de
ret
2016-01-09 19:03:38 -08:00
Pokedex_OrderMonsByMode: ; 40bdc
2015-11-29 18:34:59 -08:00
ld hl, wPokedexDataStart
ld bc, wPokedexMetadata - wPokedexDataStart
2015-02-11 13:36:02 -08:00
xor a
call ByteFill
2015-11-29 18:34:59 -08:00
ld a, [wCurrentDexMode]
ld hl, .Jumptable
call Pokedex_LoadPointer
jp hl
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
.Jumptable: ; 40bf0 (10:4bf0)
dw .NewMode
dw .OldMode
dw Pokedex_ABCMode
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
.NewMode: ; 40bf6 (10:4bf6)
2015-02-11 13:36:02 -08:00
ld de, NewPokedexOrder
2015-11-29 18:34:59 -08:00
ld hl, wPokedexDataStart
2015-02-11 13:36:02 -08:00
ld c, NUM_POKEMON
2015-11-29 18:34:59 -08:00
.loopnew
2015-02-11 13:36:02 -08:00
ld a, [de]
inc de
ld [hli], a
dec c
2015-11-29 18:34:59 -08:00
jr nz, .loopnew
call .FindLastSeen
2015-02-11 13:36:02 -08:00
ret
2015-11-29 18:34:59 -08:00
.OldMode: ; 40c08 (10:4c08)
ld hl, wPokedexDataStart
2015-02-11 13:36:02 -08:00
ld a, $1
ld c, NUM_POKEMON
2015-11-29 18:34:59 -08:00
.loopold
2015-02-11 13:36:02 -08:00
ld [hli], a
inc a
dec c
2015-11-29 18:34:59 -08:00
jr nz, .loopold
call .FindLastSeen
2015-02-11 13:36:02 -08:00
ret
2015-11-29 18:34:59 -08:00
.FindLastSeen: ; 40c18 (10:4c18)
ld hl, wPokedexDataStart + NUM_POKEMON - 1
2015-02-11 13:36:02 -08:00
ld d, NUM_POKEMON
ld e, d
2015-11-29 18:34:59 -08:00
.loopfindend
2015-02-11 13:36:02 -08:00
ld a, [hld]
ld [wd265], a
2015-11-29 18:34:59 -08:00
call Pokedex_CheckSeen
jr nz, .foundend
2015-02-11 13:36:02 -08:00
dec d
dec e
2015-11-29 18:34:59 -08:00
jr nz, .loopfindend
.foundend
2015-02-11 13:36:02 -08:00
ld a, d
2015-11-29 18:34:59 -08:00
ld [wDexListingEnd], a
2015-02-11 13:36:02 -08:00
ret
2015-11-29 18:34:59 -08:00
Pokedex_ABCMode: ; 40c30
2015-02-11 13:36:02 -08:00
xor a
2015-11-29 18:34:59 -08:00
ld [wDexListingEnd], a
ld hl, wPokedexDataStart
2015-02-11 13:36:02 -08:00
ld de, AlphabeticalPokedexOrder
ld c, NUM_POKEMON
2015-11-29 18:34:59 -08:00
.loop1abc
2015-02-11 13:36:02 -08:00
push bc
ld a, [de]
ld [wd265], a
2015-11-29 18:34:59 -08:00
call Pokedex_CheckSeen
jr z, .skipabc
2015-02-11 13:36:02 -08:00
ld a, [wd265]
ld [hli], a
2015-11-29 18:34:59 -08:00
ld a, [wDexListingEnd]
2015-02-11 13:36:02 -08:00
inc a
2015-11-29 18:34:59 -08:00
ld [wDexListingEnd], a
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
.skipabc
2015-02-11 13:36:02 -08:00
inc de
pop bc
dec c
2015-11-29 18:34:59 -08:00
jr nz, .loop1abc
ld a, [wDexListingEnd]
2015-02-11 13:36:02 -08:00
ld c, 0
2015-11-29 18:34:59 -08:00
.loop2abc
2015-02-11 13:36:02 -08:00
cp NUM_POKEMON
2015-11-29 18:34:59 -08:00
jr z, .doneabc
2015-02-11 13:36:02 -08:00
ld [hl], c
inc hl
inc a
2015-11-29 18:34:59 -08:00
jr .loop2abc
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
.doneabc
2015-02-11 13:36:02 -08:00
ret
AlphabeticalPokedexOrder: ; 0x40c65
INCLUDE "data/pokedex/order_alpha.asm"
NewPokedexOrder: ; 0x40d60
INCLUDE "data/pokedex/order_new.asm"
2016-01-09 19:03:38 -08:00
Pokedex_DisplayModeDescription: ; 40e5b
2015-02-11 13:36:02 -08:00
xor a
ld [hBGMapMode], a
hlcoord 0, 12
2016-01-12 09:46:18 -08:00
lb bc, 4, 18
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceBorder
2016-01-09 17:51:14 -08:00
ld a, [wDexArrowCursorPosIndex]
2016-01-09 19:03:38 -08:00
ld hl, .Modes
2015-11-29 18:34:59 -08:00
call Pokedex_LoadPointer
2015-02-11 13:36:02 -08:00
ld e, l
ld d, h
hlcoord 1, 14
call PlaceString
ld a, $1
ld [hBGMapMode], a
ret
2016-01-09 19:03:38 -08:00
.Modes: ; 40e7d
2015-11-29 18:34:59 -08:00
dw .NewMode
dw .OldMode
dw .ABCMode
dw .UnownMode
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
.NewMode: ; 40e85
db "<PK><MN> are listed by"
next "evolution type.@"
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
.OldMode: ; 40ea6
db "<PK><MN> are listed by"
next "official type.@"
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
.ABCMode: ; 40ec6
db "<PK><MN> are listed"
next "alphabetically.@"
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
.UnownMode: ; 40ee4
db "UNOWN are listed"
next "in catching order.@"
2015-02-11 13:36:02 -08:00
2016-01-09 19:03:38 -08:00
Pokedex_DisplayChangingModesMessage: ; 40f08 (10:4f08)
2015-02-11 13:36:02 -08:00
xor a
ld [hBGMapMode], a
2015-02-11 13:36:02 -08:00
hlcoord 0, 12
2016-01-12 09:46:18 -08:00
lb bc, 4, 18
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceBorder
ld de, String_ChangingModesPleaseWait
2015-02-11 13:36:02 -08:00
hlcoord 1, 14
call PlaceString
ld a, $1
ld [hBGMapMode], a
2015-11-29 18:34:59 -08:00
ld c, 64
2015-02-11 13:36:02 -08:00
call DelayFrames
ld de, SFX_CHANGE_DEX_MODE
call PlaySFX
2015-11-29 18:34:59 -08:00
ld c, 64
2015-02-11 13:36:02 -08:00
call DelayFrames
ret
2015-11-29 18:34:59 -08:00
String_ChangingModesPleaseWait: ; 40f32
db "Changing modes."
next "Please wait.@"
2015-02-11 13:36:02 -08:00
2016-01-09 17:51:14 -08:00
Pokedex_UpdateSearchMonType: ; 40f4f (10:4f4f)
ld a, [wDexArrowCursorPosIndex]
cp 2
2016-01-09 19:03:38 -08:00
jr nc, .no_change
2015-10-16 10:35:43 -07:00
ld hl, hJoyLast
2015-02-11 13:36:02 -08:00
ld a, [hl]
2016-01-09 17:51:14 -08:00
and D_LEFT
jr nz, Pokedex_PrevSearchMonType
2015-02-11 13:36:02 -08:00
ld a, [hl]
2016-01-09 17:51:14 -08:00
and D_RIGHT
jr nz, Pokedex_NextSearchMonType
2016-01-09 19:03:38 -08:00
.no_change
2015-02-11 13:36:02 -08:00
and a
ret
2016-01-09 17:51:14 -08:00
Pokedex_PrevSearchMonType: ; 40f65
ld a, [wDexArrowCursorPosIndex]
2015-02-11 13:36:02 -08:00
and a
2016-01-09 19:03:38 -08:00
jr nz, .type2
2016-01-09 17:51:14 -08:00
ld hl, wDexSearchMonType1
2015-02-11 13:36:02 -08:00
ld a, [hl]
cp $1
2016-01-09 19:03:38 -08:00
jr z, .wrap_around
2015-02-11 13:36:02 -08:00
dec [hl]
2016-01-09 19:03:38 -08:00
jr .done
.type2
2016-01-09 17:51:14 -08:00
ld hl, wDexSearchMonType2
2015-02-11 13:36:02 -08:00
ld a, [hl]
and a
2016-01-09 19:03:38 -08:00
jr z, .wrap_around
2015-02-11 13:36:02 -08:00
dec [hl]
2016-01-09 19:03:38 -08:00
jr .done
.wrap_around
2015-02-11 13:36:02 -08:00
ld [hl], $11
2016-01-09 19:03:38 -08:00
.done
2015-02-11 13:36:02 -08:00
scf
ret
2016-01-09 17:51:14 -08:00
Pokedex_NextSearchMonType: ; 40f84
ld a, [wDexArrowCursorPosIndex]
2015-02-11 13:36:02 -08:00
and a
2016-01-09 19:03:38 -08:00
jr nz, .type2
2016-01-09 17:51:14 -08:00
ld hl, wDexSearchMonType1
2015-02-11 13:36:02 -08:00
ld a, [hl]
cp $11
2016-01-09 19:03:38 -08:00
jr nc, .type1_wrap_around
2015-02-11 13:36:02 -08:00
inc [hl]
2016-01-09 19:03:38 -08:00
jr .done
.type1_wrap_around
2015-02-11 13:36:02 -08:00
ld [hl], $1
2016-01-09 19:03:38 -08:00
jr .done
.type2
2016-01-09 17:51:14 -08:00
ld hl, wDexSearchMonType2
2015-02-11 13:36:02 -08:00
ld a, [hl]
cp $11
2016-01-09 19:03:38 -08:00
jr nc, .type2_wrap_around
2015-02-11 13:36:02 -08:00
inc [hl]
2016-01-09 19:03:38 -08:00
jr .done
.type2_wrap_around
ld [hl], 0
.done
2015-02-11 13:36:02 -08:00
scf
ret
2016-01-09 17:51:14 -08:00
Pokedex_PlaceSearchScreenTypeStrings: ; 40fa8 (10:4fa8)
2015-02-11 13:36:02 -08:00
xor a
ld [hBGMapMode], a
2015-02-11 13:36:02 -08:00
hlcoord 9, 3
2016-01-09 17:51:14 -08:00
lb bc, 4, 8
ld a, " "
2015-11-29 18:34:59 -08:00
call Pokedex_FillBox
2016-01-09 17:51:14 -08:00
ld a, [wDexSearchMonType1]
2015-02-11 13:36:02 -08:00
hlcoord 9, 4
2016-01-09 17:51:14 -08:00
call Pokedex_PlaceTypeString
ld a, [wDexSearchMonType2]
2015-02-11 13:36:02 -08:00
hlcoord 9, 6
2016-01-09 17:51:14 -08:00
call Pokedex_PlaceTypeString
2015-02-11 13:36:02 -08:00
ld a, $1
ld [hBGMapMode], a
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_PlaceTypeString: ; 40fcd (10:4fcd)
2015-02-11 13:36:02 -08:00
push hl
ld e, a
ld d, 0
2016-01-09 17:51:14 -08:00
ld hl, .TypeStrings
2015-07-20 19:18:18 -07:00
rept 9
2015-02-11 13:36:02 -08:00
add hl, de
2015-07-20 19:18:18 -07:00
endr
2015-02-11 13:36:02 -08:00
ld e, l
ld d, h
pop hl
call PlaceString
ret
2016-01-09 17:51:14 -08:00
.TypeStrings: ; 40fe4
2015-02-11 13:36:02 -08:00
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 @"
2016-01-09 17:51:14 -08:00
Pokedex_SearchForMons: ; 41086
ld a, [wDexSearchMonType2]
2015-02-11 13:36:02 -08:00
and a
2016-01-09 17:51:14 -08:00
call nz, .Search
ld a, [wDexSearchMonType1]
2015-02-11 13:36:02 -08:00
and a
2016-01-09 17:51:14 -08:00
call nz, .Search
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
.Search: ; 41095
2015-02-11 13:36:02 -08:00
dec a
ld e, a
ld d, 0
2016-01-09 17:51:14 -08:00
ld hl, .TypeConversionTable
2015-02-11 13:36:02 -08:00
add hl, de
ld a, [hl]
2016-01-09 17:51:14 -08:00
ld [wDexConvertedMonType], a
2015-11-29 18:34:59 -08:00
ld hl, wPokedexDataStart
ld de, wPokedexDataStart
2015-02-11 13:36:02 -08:00
ld c, NUM_POKEMON
xor a
2016-01-09 17:51:14 -08:00
ld [wDexSearchResultCount], a
.loop
2015-02-11 13:36:02 -08:00
push bc
ld a, [hl]
and a
2016-01-09 17:51:14 -08:00
jr z, .next_mon
2015-02-11 13:36:02 -08:00
ld [wd265], a
ld [CurSpecies], a
2015-11-29 18:34:59 -08:00
call Pokedex_CheckCaught
2016-01-09 17:51:14 -08:00
jr z, .next_mon
2015-02-11 13:36:02 -08:00
push hl
push de
call GetBaseData
pop de
pop hl
2016-01-09 17:51:14 -08:00
ld a, [wDexConvertedMonType]
2015-02-11 13:36:02 -08:00
ld b, a
ld a, [BaseType1]
cp b
2016-01-09 17:51:14 -08:00
jr z, .match_found
2015-02-11 13:36:02 -08:00
ld a, [BaseType2]
cp b
2016-01-09 17:51:14 -08:00
jr nz, .next_mon
2015-02-11 13:36:02 -08:00
2016-01-09 17:51:14 -08:00
.match_found
2015-02-11 13:36:02 -08:00
ld a, [wd265]
ld [de], a
inc de
2016-01-09 17:51:14 -08:00
ld a, [wDexSearchResultCount]
2015-02-11 13:36:02 -08:00
inc a
2016-01-09 17:51:14 -08:00
ld [wDexSearchResultCount], a
2015-02-11 13:36:02 -08:00
2016-01-09 17:51:14 -08:00
.next_mon
2015-02-11 13:36:02 -08:00
inc hl
pop bc
dec c
2016-01-09 17:51:14 -08:00
jr nz, .loop
2015-02-11 13:36:02 -08:00
ld l, e
ld h, d
2016-01-09 17:51:14 -08:00
ld a, [wDexSearchResultCount]
2015-02-11 13:36:02 -08:00
ld c, 0
2016-01-09 17:51:14 -08:00
.zero_remaining_mons
2015-02-11 13:36:02 -08:00
cp NUM_POKEMON
2016-01-09 17:51:14 -08:00
jr z, .done
2015-02-11 13:36:02 -08:00
ld [hl], c
inc hl
inc a
2016-01-09 17:51:14 -08:00
jr .zero_remaining_mons
2015-02-11 13:36:02 -08:00
2016-01-09 17:51:14 -08:00
.done
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
.TypeConversionTable: ; 410f6
2015-02-11 13:36:02 -08:00
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
2016-01-09 19:03:38 -08:00
Pokedex_DisplayTypeNotFoundMessage: ; 41107
2015-02-11 13:36:02 -08:00
xor a
ld [hBGMapMode], a
hlcoord 0, 12
2016-01-12 09:46:18 -08:00
lb bc, 4, 18
2015-11-29 18:34:59 -08:00
call Pokedex_PlaceBorder
2016-01-09 19:03:38 -08:00
ld de, .TypeNotFound
2015-02-11 13:36:02 -08:00
hlcoord 1, 14
call PlaceString
ld a, $1
ld [hBGMapMode], a
ld c, $80
call DelayFrames
ret
2016-01-09 19:03:38 -08:00
.TypeNotFound: ; 41126
db "The specified type"
next "was not found.@"
2015-02-11 13:36:02 -08:00
2016-01-09 17:51:14 -08:00
Pokedex_UpdateCursorOAM: ; 41148 (10:5148)
2015-11-29 18:34:59 -08:00
ld a, [wCurrentDexMode]
2016-01-09 17:51:14 -08:00
cp DEXMODE_OLD
jp z, Pokedex_PutOldModeCursorOAM
call Pokedex_PutNewModeABCModeCursorOAM
call Pokedex_PutScrollbarOAM
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_PutOldModeCursorOAM: ; 41157 (10:5157)
ld hl, .CursorOAM
2015-11-29 18:34:59 -08:00
ld a, [wDexListingCursor]
2015-02-11 13:36:02 -08:00
or a
2016-01-09 17:51:14 -08:00
jr nz, .okay
ld hl, .CursorAtTopOAM
.okay
call Pokedex_LoadCursorOAM
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
.CursorOAM: ; 41167
2015-02-11 13:36:02 -08:00
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
2016-01-09 17:51:14 -08:00
.CursorAtTopOAM: ; 411c8
; OAM data for when the cursor is at the top of the list. The tiles at the top
; are cut off so they don't show up outside the list area.
2015-02-11 13:36:02 -08:00
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
2016-01-09 17:51:14 -08:00
Pokedex_PutNewModeABCModeCursorOAM: ; 41229 (10:5229)
ld hl, .CursorOAM
call Pokedex_LoadCursorOAM
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
.CursorOAM: ; 41230
2015-02-11 13:36:02 -08:00
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
2016-01-09 17:51:14 -08:00
Pokedex_UpdateSearchResultsCursorOAM: ; 41281 (10:5281)
2015-11-29 18:34:59 -08:00
ld a, [wCurrentDexMode]
2016-01-09 17:51:14 -08:00
cp DEXMODE_OLD
jp z, Pokedex_PutOldModeCursorOAM
ld hl, .CursorOAM
call Pokedex_LoadCursorOAM
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
.CursorOAM: ; 41290
2015-02-11 13:36:02 -08:00
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
2016-01-09 17:51:14 -08:00
Pokedex_LoadCursorOAM: ; 412f1 (10:52f1)
2015-02-11 13:36:02 -08:00
ld de, Sprites
2016-01-09 17:51:14 -08:00
.loop
2015-02-11 13:36:02 -08:00
ld a, [hl]
cp $ff
ret z
2015-11-29 18:34:59 -08:00
ld a, [wDexListingCursor]
2015-02-11 13:36:02 -08:00
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
2016-01-09 17:51:14 -08:00
jr .loop
2015-02-11 13:36:02 -08:00
2016-01-09 17:51:14 -08:00
Pokedex_PutScrollbarOAM: ; 4130e (10:530e)
; Writes the OAM data for the scrollbar in the new mode and ABC mode.
2015-02-11 13:36:02 -08:00
push de
2015-11-29 18:34:59 -08:00
ld a, [wDexListingEnd]
2015-02-11 13:36:02 -08:00
dec a
ld e, a
2015-11-29 18:34:59 -08:00
ld a, [wDexListingCursor]
2016-01-09 17:51:14 -08:00
ld hl, wDexListingScrollOffset
2015-02-11 13:36:02 -08:00
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
2015-11-29 18:34:59 -08:00
ld a, [wDexListingEnd]
2015-02-11 13:36:02 -08:00
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
2016-01-09 17:51:14 -08:00
Pokedex_InitArrowCursor: ; 4134f (10:534f)
2015-02-11 13:36:02 -08:00
xor a
2016-01-09 17:51:14 -08:00
ld [wDexArrowCursorPosIndex], a
ld [wDexArrowCursorDelayCounter], a
ld [wDexArrowCursorBlinkCounter], a
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_MoveArrowCursor: ; 4135a (10:535a)
2015-11-29 18:34:59 -08:00
; bc = [de] - 1
2015-02-11 13:36:02 -08:00
ld a, [de]
ld b, a
inc de
ld a, [de]
dec a
ld c, a
inc de
2016-01-09 17:51:14 -08:00
call Pokedex_BlinkArrowCursor
2015-11-29 18:34:59 -08:00
2016-01-09 17:51:14 -08:00
ld hl, hJoyPressed
2015-02-11 13:36:02 -08:00
ld a, [hl]
and D_LEFT | D_UP
and b
2016-01-09 19:03:38 -08:00
jr nz, .move_left_or_up
2015-02-11 13:36:02 -08:00
ld a, [hl]
and D_RIGHT | D_DOWN
and b
2016-01-09 19:03:38 -08:00
jr nz, .move_right_or_down
2015-02-11 13:36:02 -08:00
ld a, [hl]
and SELECT
and b
2016-01-09 19:03:38 -08:00
jr nz, .select
2016-01-09 17:51:14 -08:00
call Pokedex_ArrowCursorDelay
2016-01-09 19:03:38 -08:00
jr c, .no_action
2015-10-16 10:35:43 -07:00
ld hl, hJoyLast
2015-02-11 13:36:02 -08:00
ld a, [hl]
and D_LEFT | D_UP
and b
2016-01-09 19:03:38 -08:00
jr nz, .move_left_or_up
2015-02-11 13:36:02 -08:00
ld a, [hl]
and D_RIGHT | D_DOWN
and b
2016-01-09 19:03:38 -08:00
jr nz, .move_right_or_down
jr .no_action
2015-11-29 18:34:59 -08:00
2016-01-09 19:03:38 -08:00
.move_left_or_up
2016-01-09 17:51:14 -08:00
ld a, [wDexArrowCursorPosIndex]
2015-02-11 13:36:02 -08:00
and a
2016-01-09 19:03:38 -08:00
jr z, .no_action
2016-01-09 17:51:14 -08:00
call Pokedex_GetArrowCursorPos
2015-11-29 18:34:59 -08:00
ld [hl], " "
2016-01-09 17:51:14 -08:00
ld hl, wDexArrowCursorPosIndex
2015-02-11 13:36:02 -08:00
dec [hl]
2016-01-09 19:03:38 -08:00
jr .update_cursor_pos
2015-11-29 18:34:59 -08:00
2016-01-09 19:03:38 -08:00
.move_right_or_down
2016-01-09 17:51:14 -08:00
ld a, [wDexArrowCursorPosIndex]
2015-02-11 13:36:02 -08:00
cp c
2016-01-09 19:03:38 -08:00
jr nc, .no_action
2016-01-09 17:51:14 -08:00
call Pokedex_GetArrowCursorPos
2015-11-29 18:34:59 -08:00
ld [hl], " "
2016-01-09 17:51:14 -08:00
ld hl, wDexArrowCursorPosIndex
2015-02-11 13:36:02 -08:00
inc [hl]
2016-01-09 17:51:14 -08:00
2016-01-09 19:03:38 -08:00
.update_cursor_pos
2016-01-09 17:51:14 -08:00
call Pokedex_GetArrowCursorPos
2015-11-29 18:34:59 -08:00
ld [hl], "â–¶"
2016-01-09 17:51:14 -08:00
ld a, 12
ld [wDexArrowCursorDelayCounter], a
2015-02-11 13:36:02 -08:00
xor a
2016-01-09 17:51:14 -08:00
ld [wDexArrowCursorBlinkCounter], a
2015-02-11 13:36:02 -08:00
scf
ret
2015-11-29 18:34:59 -08:00
2016-01-09 19:03:38 -08:00
.no_action
2015-02-11 13:36:02 -08:00
and a
ret
2015-11-29 18:34:59 -08:00
2016-01-09 19:03:38 -08:00
.select
2016-01-09 17:51:14 -08:00
call Pokedex_GetArrowCursorPos
2015-11-29 18:34:59 -08:00
ld [hl], " "
2016-01-09 17:51:14 -08:00
ld a, [wDexArrowCursorPosIndex]
2015-02-11 13:36:02 -08:00
cp c
2016-01-09 19:03:38 -08:00
jr c, .update
2016-01-09 17:51:14 -08:00
ld a, -1
2016-01-09 19:03:38 -08:00
.update
2015-02-11 13:36:02 -08:00
inc a
2016-01-09 17:51:14 -08:00
ld [wDexArrowCursorPosIndex], a
2016-01-09 19:03:38 -08:00
jr .update_cursor_pos
2015-02-11 13:36:02 -08:00
2016-01-09 17:51:14 -08:00
Pokedex_GetArrowCursorPos: ; 413d4 (10:53d4)
ld a, [wDexArrowCursorPosIndex]
2015-02-11 13:36:02 -08:00
add a
ld l, a
2016-01-09 17:51:14 -08:00
ld h, 0
2015-02-11 13:36:02 -08:00
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ret
2016-01-09 17:51:14 -08:00
Pokedex_BlinkArrowCursor: ; 413e0 (10:53e0)
ld hl, wDexArrowCursorBlinkCounter
2015-02-11 13:36:02 -08:00
ld a, [hl]
inc [hl]
and $8
2015-11-29 18:34:59 -08:00
jr z, .blink_on
2016-01-09 17:51:14 -08:00
call Pokedex_GetArrowCursorPos
2015-11-29 18:34:59 -08:00
ld [hl], " "
2015-02-11 13:36:02 -08:00
ret
2015-11-29 18:34:59 -08:00
.blink_on
2016-01-09 17:51:14 -08:00
call Pokedex_GetArrowCursorPos
2015-11-29 18:34:59 -08:00
ld [hl], "â–¶"
2015-02-11 13:36:02 -08:00
ret
2016-01-09 17:51:14 -08:00
Pokedex_ArrowCursorDelay: ; 413f5 (10:53f5)
; Updates the delay counter set when moving the arrow cursor.
; Returns whether the delay is active in carry.
ld hl, wDexArrowCursorDelayCounter
2015-02-11 13:36:02 -08:00
ld a, [hl]
and a
ret z
2015-11-29 18:34:59 -08:00
2015-02-11 13:36:02 -08:00
dec [hl]
scf
ret
2015-11-29 18:34:59 -08:00
Pokedex_FillBox: ; 413fe (10:53fe)
jp FillBoxWithByte
2015-02-11 13:36:02 -08:00
2016-01-09 17:51:14 -08:00
Pokedex_BlackOutBG: ; 41401 (10:5401)
; Make BG palettes black so that the BG becomes all black.
ld a, [rSVBK]
2015-02-11 13:36:02 -08:00
push af
ld a, $5
ld [rSVBK], a
2015-11-20 12:15:32 -08:00
ld hl, UnknBGPals
2015-02-11 13:36:02 -08:00
ld bc, $40
xor a
call ByteFill
pop af
ld [rSVBK], a
2015-02-11 13:36:02 -08:00
2016-01-09 19:03:38 -08:00
Pokedex_ApplyPrintPals: ; 41415
2015-02-11 13:36:02 -08:00
ld a, $ff
call DmgToCgbBGPals
ld a, $ff
2015-12-09 08:38:40 -08:00
call DmgToCgbObjPal0
2015-02-11 13:36:02 -08:00
call DelayFrame
ret
2016-01-09 17:51:14 -08:00
Pokedex_GetSGBLayout: ; 41423
2015-02-11 13:36:02 -08:00
ld b, a
call GetSGBLayout
2016-01-09 19:03:38 -08:00
Pokedex_ApplyUsualPals: ; 41427
; This applies the palettes used for most Pokédex screens.
2015-02-11 13:36:02 -08:00
ld a, $e4
call DmgToCgbBGPals
ld a, $e0
2015-12-09 08:38:40 -08:00
call DmgToCgbObjPal0
2015-02-11 13:36:02 -08:00
ret
2015-11-29 18:34:59 -08:00
Pokedex_LoadPointer: ; 41432
2015-02-11 13:36:02 -08:00
ld e, a
ld d, 0
add hl, de
add hl, de
2015-02-11 13:36:02 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
ret
2016-01-09 17:51:14 -08:00
Pokedex_LoadSelectedMonTiles: ; 4143b
; Loads the tiles of the currently selected Pokémon.
call Pokedex_GetSelectedMon
2015-11-29 18:34:59 -08:00
call Pokedex_CheckSeen
jr z, .QuestionMark
ld a, [wFirstUnownSeen]
2015-02-11 13:36:02 -08:00
ld [UnownLetter], a
ld a, [wd265]
ld [CurPartySpecies], a
call GetBaseData
ld de, VTiles2
predef GetFrontpic
ret
.QuestionMark:
ld a, BANK(sScratch)
2015-02-11 13:36:02 -08:00
call GetSRAMBank
2015-11-29 18:34:59 -08:00
callba LoadQuestionMarkPic
2015-02-11 13:36:02 -08:00
ld hl, VTiles2
ld de, sScratch
ld c, 7 * 7
2015-02-11 13:36:02 -08:00
ld a, [hROMBank]
ld b, a
call Get2bpp
call CloseSRAM
ret
2015-11-29 18:34:59 -08:00
Pokedex_LoadCurrentFootprint: ; 41478 (10:5478)
2016-01-09 17:51:14 -08:00
call Pokedex_GetSelectedMon
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
Pokedex_LoadAnyFootprint: ; 4147b
2015-02-11 13:36:02 -08:00
ld a, [wd265]
dec a
2015-11-29 18:34:59 -08:00
and ($ff ^ $07) ; $f8 ; $1f << 3
2015-02-11 13:36:02 -08:00
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
2015-02-11 13:36:02 -08:00
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.
2015-11-29 18:34:59 -08:00
ld de, 8 tiles
2015-02-11 13:36:02 -08:00
add hl, de
ld e, l
ld d, h
ld hl, VTiles2 tile $64
2015-02-11 13:36:02 -08:00
lb bc, BANK(Footprints), 2
call Request1bpp
ret
2015-11-29 18:34:59 -08:00
Pokedex_LoadGFX: ; 414b7
2015-02-11 13:36:02 -08:00
call DisableLCD
ld hl, VTiles2
2015-11-29 18:34:59 -08:00
ld bc, $31 tiles
2015-02-11 13:36:02 -08:00
xor a
call ByteFill
2015-11-29 18:34:59 -08:00
call Pokedex_LoadInvertedFont
2015-11-04 13:14:27 -08:00
call LoadFontsExtra
ld hl, VTiles2 tile $60
2015-11-29 18:34:59 -08:00
ld bc, $20 tiles
call Pokedex_InvertTiles
call Pokedex_CheckSGB
jr nz, .LoadPokedexLZ
callba LoadSGBPokedexGFX
jr .LoadPokedexSlowpokeLZ
.LoadPokedexLZ:
2015-02-11 13:36:02 -08:00
ld hl, PokedexLZ
ld de, VTiles2 tile $31
2015-02-11 13:36:02 -08:00
call Decompress
.LoadPokedexSlowpokeLZ:
2015-02-11 13:36:02 -08:00
ld hl, PokedexSlowpokeLZ
ld de, VTiles0
call Decompress
ld a, 6
call SkipMusic
call EnableLCD
ret
2015-11-29 18:34:59 -08:00
Pokedex_LoadInvertedFont: ; 414fb
2015-11-04 13:14:27 -08:00
call LoadStandardFont
2015-02-11 13:36:02 -08:00
ld hl, VTiles1
2015-11-29 18:34:59 -08:00
ld bc, $80 tiles
2015-02-11 13:36:02 -08:00
2015-11-29 18:34:59 -08:00
Pokedex_InvertTiles: ; 41504
.loop
2015-02-11 13:36:02 -08:00
ld a, [hl]
xor $ff
ld [hli], a
dec bc
ld a, b
or c
2015-11-29 18:34:59 -08:00
jr nz, .loop
2015-02-11 13:36:02 -08:00
ret
PokedexLZ: ; 4150e
2015-11-29 18:34:59 -08:00
INCBIN "gfx/pokedex/pokedex.2bpp.lz"
2015-02-11 13:36:02 -08:00
PokedexSlowpokeLZ: ; 416b0
INCBIN "gfx/pokedex/slowpoke.2bpp.lz"
2015-11-29 18:34:59 -08:00
Pokedex_CheckSGB: ; 41a24
2015-02-11 13:36:02 -08:00
ld a, [hCGB]
or a
ret nz
ld a, [hSGB]
dec a
ret
2015-11-29 18:34:59 -08:00
Pokedex_LoadUnownFont: ; 41a2c
2015-08-20 23:00:59 -07:00
ld a, BANK(sScratch)
2015-02-11 13:36:02 -08:00
call GetSRAMBank
ld hl, UnownFont
2015-08-20 23:00:59 -07:00
ld de, sScratch + $188
2015-11-29 18:34:59 -08:00
ld bc, 39 tiles
2015-02-11 13:36:02 -08:00
ld a, BANK(UnownFont)
call FarCopyBytes
2015-08-20 23:00:59 -07:00
ld hl, sScratch + $188
2015-11-29 18:34:59 -08:00
ld bc, 27 tiles
call Pokedex_InvertTiles
2015-08-20 23:00:59 -07:00
ld de, sScratch + $188
ld hl, VTiles2 tile $40
2015-11-29 18:34:59 -08:00
lb bc, BANK(Pokedex_LoadUnownFont), 27
2015-02-11 13:36:02 -08:00
call Request2bpp
call CloseSRAM
ret
2016-01-09 19:46:41 -08:00
Pokedex_LoadUnownFrontpicTiles: ; 41a58 (10:5a58)
2015-02-11 13:36:02 -08:00
ld a, [UnownLetter]
push af
2016-01-09 19:46:41 -08:00
ld a, [wDexCurrentUnownIndex]
2015-02-11 13:36:02 -08:00
ld e, a
2016-01-09 19:46:41 -08:00
ld d, 0
2016-01-09 17:51:14 -08:00
ld hl, UnownDex
2015-02-11 13:36:02 -08:00
add hl, de
ld a, [hl]
ld [UnownLetter], a
ld a, UNOWN
ld [CurPartySpecies], a
call GetBaseData
ld de, VTiles2 tile $00
2015-02-11 13:36:02 -08:00
predef GetFrontpic
pop af
ld [UnownLetter], a
ret
2015-11-29 18:34:59 -08:00
_NewPokedexEntry: ; 41a7f
xor a
ld [hBGMapMode], a
2016-01-09 19:46:41 -08:00
callba DrawDexEntryScreenRightEdge
2015-11-29 18:34:59 -08:00
call Pokedex_ResetBGMapMode
call DisableLCD
call LoadStandardFont
call LoadFontsExtra
2015-11-29 18:34:59 -08:00
call Pokedex_LoadGFX
call Pokedex_LoadAnyFootprint
ld a, [wd265]
ld [CurPartySpecies], a
2016-01-09 17:51:14 -08:00
call Pokedex_DrawDexEntryScreenBG
2015-11-29 18:34:59 -08:00
call Pokedex_DrawFootprint
hlcoord 0, 17
ld [hl], $3b
inc hl
2015-11-29 18:34:59 -08:00
ld bc, 19
ld a, " "
call ByteFill
callba DisplayDexEntry
call EnableLCD
call WaitBGMap
call GetBaseData
ld de, VTiles2
predef GetFrontpic
2016-01-09 17:51:14 -08:00
ld a, SCGB_POKEDEX
call Pokedex_GetSGBLayout
ld a, [CurPartySpecies]
call PlayCry
ret
2015-11-29 18:34:59 -08:00
Pokedex_SetBGMapMode3: ; 41ad7 (10:5ad7)
ld a, $3
ld [hBGMapMode], a
ld c, 4
call DelayFrames
ret
2015-11-29 18:34:59 -08:00
Pokedex_SetBGMapMode4: ; 41ae1 (10:5ae1)
ld a, $4
ld [hBGMapMode], a
ld c, 4
call DelayFrames
ret
2015-11-29 18:34:59 -08:00
Pokedex_SetBGMapMode_3ifDMG_4ifCGB: ; 41aeb (10:5aeb)
ld a, [hCGB]
and a
2015-11-29 18:34:59 -08:00
jr z, .DMG
call Pokedex_SetBGMapMode4
.DMG:
2015-11-29 18:34:59 -08:00
call Pokedex_SetBGMapMode3
ret
2015-11-29 18:34:59 -08:00
Pokedex_ResetBGMapMode: ; 41af7
xor a
ld [hBGMapMode], a
ret