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 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 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 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, [wDexListingScrollOffset] inc a ld [wDexListingScrollOffset], 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 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 Pokedex_Main: ; 4010b ld a, [wJumptableIndex] ld hl, .Jumptable call Pokedex_LoadPointer jp [hl] .Jumptable: ; 40115 (10:4115) 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 dw Pokedex_CloseDex Pokedex_IncrementDexPointer: ; 40131 (10:4131) ld hl, wJumptableIndex inc [hl] ret Pokedex_CloseDex: ; 40136 (10:4136) ld hl, wJumptableIndex set 7, [hl] ret Pokedex_InitMainScreen: ; 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 [wDexListingHeight], a call Pokedex_PrintListing call Pokedex_SetBGMapMode_3ifDMG_4ifCGB call Pokedex_ResetBGMapMode call Pokedex_DrawMainScreenLeftSideAndBottom 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, SCGB_POKEDEX call Pokedex_GetSGBLayout call Pokedex_UpdateCursorOAM callba DrawPokedexListWindow hlcoord 0, 17 ld de, String_START_SEARCH call Pokedex_PlaceString ld a, 7 ld [wDexListingHeight], a call Pokedex_PrintListing call Pokedex_IncrementDexPointer ret Pokedex_UpdateMainScreen: ; 401ae (10:41ae) ld hl, hJoyPressed 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 Pokedex_ListingHandleDPadInput ret nc call Pokedex_UpdateCursorOAM xor a ld [hBGMapMode], a call Pokedex_PrintListing call Pokedex_SetBGMapMode3 call Pokedex_ResetBGMapMode ret .a call Pokedex_GetSelectedMon call Pokedex_CheckSeen ret z ld a, $2 ld [wJumptableIndex], a ld a, $0 ld [wcf64], a ret .select call Pokedex_BlackOutBG ld a, $7 ld [wJumptableIndex], a xor a ld [hSCX], a ld a, $a7 ld [hWX], a call DelayFrame ret .start call Pokedex_BlackOutBG 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 Pokedex_InitDexEntryScreen: ; 40217 (10:4217) call LowVolume xor a ld [wPokedexStatus], a xor a ld [hBGMapMode], a call ClearSprites call Pokedex_LoadCurrentFootprint call Pokedex_DrawDexEntryScreenBG call Pokedex_InitArrowCursor call Pokedex_GetSelectedMon ld [wLastDexEntry], a callba DisplayDexEntry call Pokedex_DrawFootprint call WaitBGMap ld a, $a7 ld [hWX], a call Pokedex_GetSelectedMon ld [CurPartySpecies], a ld a, SCGB_POKEDEX call Pokedex_GetSGBLayout ld a, [CurPartySpecies] call PlayCry call Pokedex_IncrementDexPointer ret Pokedex_UpdateDexEntryScreen: ; 40258 (10:4258) ld de, DexEntryScreen_ArrowCursorData call Pokedex_MoveArrowCursor ld hl, hJoyPressed 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, [wDexArrowCursorPosIndex] 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 Pokedex_Page: ; 40292 ld a, [wPokedexStatus] xor $1 ld [wPokedexStatus], a call Pokedex_GetSelectedMon ld [wLastDexEntry], a callba DisplayDexEntry call WaitBGMap ret Pokedex_ReinitDexEntryScreen: ; 402aa (10:42aa) ; Reinitialize the Pokédex entry screen after changing the selected mon. call Pokedex_BlackOutBG xor a ld [wPokedexStatus], a xor a ld [hBGMapMode], a call Pokedex_DrawDexEntryScreenBG call Pokedex_InitArrowCursor call Pokedex_LoadCurrentFootprint call Pokedex_GetSelectedMon ld [wLastDexEntry], a callba DisplayDexEntry call Pokedex_DrawFootprint call Pokedex_LoadSelectedMonTiles call WaitBGMap call Pokedex_GetSelectedMon ld [CurPartySpecies], a ld a, SCGB_POKEDEX call Pokedex_GetSGBLayout ld a, [CurPartySpecies] call PlayCry ld hl, wJumptableIndex dec [hl] ret DexEntryScreen_ArrowCursorData: ; 402e8 db D_RIGHT | D_LEFT, 4 dwcoord 1, 17 dwcoord 6, 17 dwcoord 11, 17 dwcoord 15, 17 DexEntryPage_Jumptable: ; 402f2 dw Pokedex_Page dw .Area dw .Cry dw .Print .Area: ; 402fa call Pokedex_BlackOutBG xor a ld [hSCX], a call DelayFrame ld a, $7 ld [hWX], a ld a, $90 ld [hWY], a call Pokedex_GetSelectedMon ld a, [wDexCurrentLocation] ld e, a predef _Area call Pokedex_BlackOutBG call DelayFrame xor a ld [hBGMapMode], a ld a, $90 ld [hWY], a ld a, $5 ld [hSCX], a call DelayFrame call Function4038d call Pokedex_LoadSelectedMonTiles call WaitBGMap call Pokedex_GetSelectedMon ld [CurPartySpecies], a ld a, SCGB_POKEDEX call Pokedex_GetSGBLayout ret .Cry: ; 40340 call Pokedex_GetSelectedMon ld a, [wd265] call GetCryIndex ld e, c ld d, b call PlayCryHeader ret .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 Function4038d: ; 4038d call Pokedex_DrawDexEntryScreenBG call Pokedex_GetSelectedMon callba DisplayDexEntry call Pokedex_DrawFootprint ret Pokedex_InitOptionScreen: ; 4039d (10:439d) xor a ld [hBGMapMode], a call ClearSprites call Pokedex_DrawOptionScreenBG call Pokedex_InitArrowCursor ld a, [wCurrentDexMode] ld [wDexArrowCursorPosIndex], a call Function40e5b call WaitBGMap ld a, $10 call Pokedex_GetSGBLayout call Pokedex_IncrementDexPointer ret Pokedex_UpdateOptionScreen: ; 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 Pokedex_MoveArrowCursor 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, [wDexArrowCursorPosIndex] ld hl, Jumptable_40405 call Pokedex_LoadPointer jp [hl] .asm_403ea call Pokedex_BlackOutBG ld a, $0 ld [wJumptableIndex], a ret Unknown_403f3: ; 403f3 db D_UP | D_DOWN, 3 dwcoord 2, 4 dwcoord 2, 6 dwcoord 2, 8 Unknown_403fb: ; 403fb db D_UP | D_DOWN, 4 dwcoord 2, 4 dwcoord 2, 6 dwcoord 2, 8 dwcoord 2, 10 Jumptable_40405: ; 40405 (10:4405) dw Function4040d dw Function40411 dw Function40415 dw Function4043a Function4040d: ; 4040d (10:440d) ld b, DEXMODE_NEW jr Function40417 Function40411: ; 40411 (10:4411) ld b, DEXMODE_OLD jr Function40417 Function40415: ; 40415 (10:4415) ld b, DEXMODE_ABC 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 [wDexListingScrollOffset], a ld [wDexListingCursor], a call Pokedex_InitCursorPosition .asm_40431 call Pokedex_BlackOutBG ld a, $0 ld [wJumptableIndex], a ret Function4043a: ; 4043a (10:443a) call Pokedex_BlackOutBG ld a, $b ld [wJumptableIndex], a ret Pokedex_InitSearchScreen: ; 40443 (10:4443) xor a ld [hBGMapMode], a call ClearSprites call Pokedex_DrawSearchScreenBG call Pokedex_InitArrowCursor ld a, NORMAL + 1 ld [wDexSearchMonType1], a xor a ld [wDexSearchMonType2], a call Pokedex_PlaceSearchScreenTypeStrings xor a ld [wDexSearchSlowpokeFrame], a callba DoDexSearchSlowpokeFrame call WaitBGMap ld a, $10 call Pokedex_GetSGBLayout call Pokedex_IncrementDexPointer ret Pokedex_UpdateSearchScreen: ; 40471 (10:4471) ld de, .ArrowCursorData call Pokedex_MoveArrowCursor call Pokedex_UpdateSearchMonType call c, Pokedex_PlaceSearchScreenTypeStrings ld hl, hJoyPressed 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, [wDexArrowCursorPosIndex] ld hl, .MenuActionJumptable call Pokedex_LoadPointer jp [hl] .asm_40495 call Pokedex_BlackOutBG ld a, $0 ld [wJumptableIndex], a ret .ArrowCursorData: ; 4049e db D_UP | D_DOWN, 4 dwcoord 2, 4 dwcoord 2, 6 dwcoord 2, 13 dwcoord 2, 15 .MenuActionJumptable: ; 404a8 dw .MenuAction_MonSearchType dw .MenuAction_MonSearchType dw .MenuAction_BeginSearch dw .MenuAction_Cancel .MenuAction_MonSearchType: ; 404b0 call Pokedex_NextSearchMonType call Pokedex_PlaceSearchScreenTypeStrings ret .MenuAction_BeginSearch: ; 404b7 call Pokedex_SearchForMons callba AnimateDexSearchSlowpoke ld a, [wDexSearchResultCount] and a jr nz, .show_search_results call Pokedex_ChangeMode call Function41107 xor a ld [hBGMapMode], a call Pokedex_DrawSearchScreenBG call Pokedex_InitArrowCursor call Pokedex_PlaceSearchScreenTypeStrings call WaitBGMap ret .show_search_results ld [wDexListingEnd], a ld a, [wDexListingScrollOffset] ld [wc7e0], a ld a, [wDexListingCursor] ld [wc7e1], a ld a, [wLastDexEntry] ld [wcf65], a xor a ld [wDexListingScrollOffset], a ld [wDexListingCursor], a call Pokedex_BlackOutBG ld a, $9 ld [wJumptableIndex], a ret .MenuAction_Cancel: ; 40501 call Pokedex_BlackOutBG ld a, $0 ld [wJumptableIndex], a ret Pokedex_InitSearchResultsScreen: ; 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 Pokedex_PlaceSearchResultsTypeStrings ld a, 4 ld [wDexListingHeight], a call Pokedex_PrintListing call Pokedex_SetBGMapMode3 call Pokedex_ResetBGMapMode call Pokedex_DrawSearchResultsScreenBG 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 Pokedex_PlaceSearchResultsTypeStrings call Pokedex_UpdateSearchResultsCursorOAM ld a, $ff ld [CurPartySpecies], a ld a, SCGB_POKEDEX call Pokedex_GetSGBLayout call Pokedex_IncrementDexPointer ret Pokedex_UpdateSearchResultsScreen: ; 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 Pokedex_ListingHandleDPadInput ret nc call Pokedex_UpdateSearchResultsCursorOAM xor a ld [hBGMapMode], a call Pokedex_PrintListing call Pokedex_SetBGMapMode3 call Pokedex_ResetBGMapMode ret .asm_40583 call Pokedex_GetSelectedMon call Pokedex_CheckSeen ret z ld a, $2 ld [wJumptableIndex], a ld a, $9 ld [wcf64], a ret .asm_40595 ld a, [wc7e0] ld [wDexListingScrollOffset], a ld a, [wc7e1] ld [wDexListingCursor], a ld a, [wcf65] ld [wLastDexEntry], a call Pokedex_BlackOutBG call ClearSprites call Pokedex_ChangeMode ld a, $5 ld [wJumptableIndex], a xor a ld [hSCX], a ld a, $a7 ld [hWX], a ret Pokedex_InitUnownMode: ; 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 Pokedex_GetSGBLayout call Pokedex_IncrementDexPointer ret Pokedex_UpdateUnownMode: ; 405df (10:45df) ld hl, hJoyPressed ld a, [hl] and A_BUTTON | B_BUTTON jr nz, .a_b call Function40610 ret .a_b call Pokedex_BlackOutBG 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, [wDexListingScrollOffset] 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, [wDexListingHeight] ld d, a ld a, [wDexListingEnd] ld e, a call Pokedex_ListingMoveCursorUp jr nc, .nope call Pokedex_GetSelectedMon call Pokedex_CheckSeen jr nz, .yep jr .up .down ld a, [wDexListingHeight] ld d, a ld a, [wDexListingEnd] ld e, a call Pokedex_ListingMoveCursorDown jr nc, .nope call Pokedex_GetSelectedMon call Pokedex_CheckSeen jr nz, .yep jr .down .yep scf ret .nope ld a, [wBackupDexListingCursor] ld [wDexListingCursor], a ld a, [wBackupDexListingPage] ld [wDexListingScrollOffset], a and a ret Pokedex_ListingHandleDPadInput: ; 406c5 (10:46c5) ; Handles D-pad input for a list of Pokémon. ld a, [wDexListingHeight] ld d, a ld a, [wDexListingEnd] ld e, a ld hl, hJoyLast ld a, [hl] and D_UP jr nz, Pokedex_ListingMoveCursorUp ld a, [hl] and D_DOWN jr nz, Pokedex_ListingMoveCursorDown ld a, d cp e jr nc, Pokedex_ListingPosStayedSame ld a, [hl] and D_LEFT jr nz, Pokedex_ListingMoveUpOnePage ld a, [hl] and D_RIGHT jr nz, Pokedex_ListingMoveDownOnePage jr Pokedex_ListingPosStayedSame Pokedex_ListingMoveCursorUp: ; 406ea (10:46ea) ld hl, wDexListingCursor ld a, [hl] and a jr z, .try_scrolling dec [hl] jr Pokedex_ListingPosChanged .try_scrolling ld hl, wDexListingScrollOffset ld a, [hl] and a jr z, Pokedex_ListingPosStayedSame dec [hl] jr Pokedex_ListingPosChanged Pokedex_ListingMoveCursorDown: ; 406fe (10:46fe) ld hl, wDexListingCursor ld a, [hl] inc a cp e jr nc, Pokedex_ListingPosStayedSame cp d jr nc, .try_scrolling inc [hl] jr Pokedex_ListingPosChanged .try_scrolling ld hl, wDexListingScrollOffset add [hl] cp e jr nc, Pokedex_ListingPosStayedSame inc [hl] jr Pokedex_ListingPosChanged Pokedex_ListingMoveUpOnePage: ; 40716 (10:4716) ld hl, wDexListingScrollOffset ld a, [hl] and a jr z, Pokedex_ListingPosStayedSame cp d jr nc, .not_near_top ; If we're already less than page away from the top, go to the top. xor a ld [hl], a jr Pokedex_ListingPosChanged .not_near_top sub d ld [hl], a 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 ld a, d add a add [hl] jr c, .near_bottom cp e jr c, .not_near_bottom .near_bottom ld a, e sub d ld [hl], a jr Pokedex_ListingPosChanged .not_near_bottom ld a, [hl] add d ld [hl], a jr Pokedex_ListingPosChanged Pokedex_ListingPosStayedSame: ; 4073d (10:473d) and a ret Pokedex_ListingPosChanged: ; 4073f (10:473f) scf ret Pokedex_HLDownBRows: ; 40741 ; Moves the tilemap pointer in HL down by B rows. push de ld de, SCREEN_WIDTH .loop ld [hl], a add hl, de dec b jr nz, .loop pop de ret Pokedex_DrawMainScreenLeftSideAndBottom: ; 4074c (10:474c) ; Draws the left sidebar and the bottom bar on the main screen. 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 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 Pokedex_HLDownBRows hlcoord 8, 10 ld b, $6 ld a, $5a call Pokedex_HLDownBRows 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 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 Pokedex_DrawDexEntryScreenBG: ; 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 Pokedex_HLDownBRows 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, .Height call Pokedex_PlaceString hlcoord 9, 9 ld de, .Weight call Pokedex_PlaceString hlcoord 0, 17 ld de, .MenuItems call Pokedex_PlaceString call Pokedex_PlaceFrontpicTopLeftCorner ret .Unused: ; 4084f db $5c, $5d, $ff ; No. .Height: ; 40852 db "HT ?", $5e, "??", $5f, $ff ; HT ?'??" .Weight: ; 4085c db "WT ???lb", $ff ; WT ???lb .MenuItems: ; 40867 db $3b, " PAGE AREA CRY PRNT", $ff Pokedex_DrawOptionScreenBG: ; 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, .Title call Pokedex_PlaceString hlcoord 3, 4 ld de, .Modes call PlaceString ld a, [wUnlockedUnownMode] and a ret z hlcoord 3, 10 ld de, .UnownMode call PlaceString ret .Title: ; 408b2 db $3b, " OPTION ", $3c, $ff .Modes: ; 408bd db "NEW #DEX MODE" next "OLD #DEX MODE" next "A to Z MODE" db "@" .UnownMode: ; 408e5 db "UNOWN MODE@" Pokedex_DrawSearchScreenBG: ; 408f0 (10:48f0) call Pokedex_FillBackgroundColor2 hlcoord 0, 2 lb bc, 14, 18 call Pokedex_PlaceBorder hlcoord 0, 1 ld de, .Title call Pokedex_PlaceString hlcoord 8, 4 ld de, .TypeLeftRightArrows call Pokedex_PlaceString hlcoord 8, 6 ld de, .TypeLeftRightArrows call Pokedex_PlaceString hlcoord 3, 4 ld de, .Types call PlaceString hlcoord 3, 13 ld de, .Menu call PlaceString ret .Title: ; 4092a db $3b, " SEARCH ", $3c, $ff .TypeLeftRightArrows: ; 40935 db $3d, " ", $3e, $ff .Types: ; 40940 db "TYPE1" next "TYPE2" db "@" .Menu: ; 4094c db "BEGIN SEARCH!!" next "CANCEL" db "@" Pokedex_DrawSearchResultsScreenBG: ; 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, .BottomWindowText call PlaceString ld de, wDexSearchResultCount 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 Pokedex_HLDownBRows hlcoord 8, 8 ld [hl], $53 hlcoord 8, 9 ld [hl], $69 hlcoord 8, 10 ld [hl], $6a call Pokedex_PlaceFrontpicTopLeftCorner ret .BottomWindowText: ; 409ae db "SEARCH RESULTS" next " TYPE" next " FOUND!" db "@" Pokedex_PlaceSearchResultsTypeStrings: ; 409cf (10:49cf) ld a, [wDexSearchMonType1] hlcoord 0, 14 call Pokedex_PlaceTypeString ld a, [wDexSearchMonType1] ld b, a ld a, [wDexSearchMonType2] and a jr z, .done cp b jr z, .done hlcoord 2, 15 call Pokedex_PlaceTypeString hlcoord 1, 15 ld [hl], "/" .done 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 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 Pokedex_FillBackgroundColor2: ; 40aa6 hlcoord 0, 0 ld a, $32 ld bc, SCREEN_WIDTH * SCREEN_HEIGHT call ByteFill ret 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 Pokedex_PlaceString: ; 40acd .loop ld a, [de] cp -1 ret z inc de ld [hli], a jr .loop 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 .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 Pokedex_PrintListing: ; 40b0f (10:4b0f) ; Prints the list of Pokémon on the main Pokédex screen. ; 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 * [wDexListingHeight] + 1) by 11 box starting at 0,1 hlcoord 0, 1 ld a, [wDexListingHeight] add a inc a ld b, a ld a, " " call Pokedex_FillBox ; Load de with wPokedexDataStart + [wDexListingScrollOffset] ld a, [wDexListingScrollOffset] ld e, a ld d, $0 ld hl, wPokedexDataStart add hl, de ld e, l ld d, h hlcoord 0, 2 ld a, [wDexListingHeight] .loop push af ld a, [de] ld [wd265], a push de push hl call .PrintEntry pop hl ld de, 2 * SCREEN_WIDTH add hl, de pop de inc de pop af dec a jr nz, .loop call Pokedex_LoadSelectedMonTiles ret .PrintEntry: ; 40b55 (10:4b55) ; Prints one entry in the list of Pokémon on the main Pokédex screen. 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 .NameNotSeen: ; 40b9a db "-----@" 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 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. ld a, [wDexListingCursor] ld hl, wDexListingScrollOffset add [hl] ld e, a ld d, $0 ld hl, wPokedexDataStart add hl, de ld a, [hl] ld [wd265], a ret 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 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] .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 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, [wDexArrowCursorPosIndex] 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 Unknown_40e7d: ; 40e7d dw .NewMode dw .OldMode dw .ABCMode dw .UnownMode .NewMode: ; 40e85 db " are listed by" next "evolution type.@" .OldMode: ; 40ea6 db " are listed by" next "official type.@" .ABCMode: ; 40ec6 db " are listed" next "alphabetically.@" .UnownMode: ; 40ee4 db "UNOWN are listed" next "in catching order.@" 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 String_ChangingModesPleaseWait: ; 40f32 db "Changing modes." next "Please wait.@" Pokedex_UpdateSearchMonType: ; 40f4f (10:4f4f) ld a, [wDexArrowCursorPosIndex] cp 2 jr nc, .NoChange ld hl, hJoyLast ld a, [hl] and D_LEFT jr nz, Pokedex_PrevSearchMonType ld a, [hl] and D_RIGHT jr nz, Pokedex_NextSearchMonType .NoChange and a ret Pokedex_PrevSearchMonType: ; 40f65 ld a, [wDexArrowCursorPosIndex] and a jr nz, .asm_40f76 ld hl, wDexSearchMonType1 ld a, [hl] cp $1 jr z, .asm_40f80 dec [hl] jr .asm_40f82 .asm_40f76 ld hl, wDexSearchMonType2 ld a, [hl] and a jr z, .asm_40f80 dec [hl] jr .asm_40f82 .asm_40f80 ld [hl], $11 .asm_40f82 scf ret Pokedex_NextSearchMonType: ; 40f84 ld a, [wDexArrowCursorPosIndex] and a jr nz, .asm_40f99 ld hl, wDexSearchMonType1 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, wDexSearchMonType2 ld a, [hl] cp $11 jr nc, .asm_40fa4 inc [hl] jr .asm_40fa6 .asm_40fa4 ld [hl], $0 .asm_40fa6 scf ret Pokedex_PlaceSearchScreenTypeStrings: ; 40fa8 (10:4fa8) xor a ld [hBGMapMode], a hlcoord 9, 3 lb bc, 4, 8 ld a, " " call Pokedex_FillBox ld a, [wDexSearchMonType1] hlcoord 9, 4 call Pokedex_PlaceTypeString ld a, [wDexSearchMonType2] hlcoord 9, 6 call Pokedex_PlaceTypeString ld a, $1 ld [hBGMapMode], a ret Pokedex_PlaceTypeString: ; 40fcd (10:4fcd) push hl ld e, a ld d, 0 ld hl, .TypeStrings rept 9 add hl, de endr ld e, l ld d, h pop hl call PlaceString ret .TypeStrings: ; 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 @" Pokedex_SearchForMons: ; 41086 ld a, [wDexSearchMonType2] and a call nz, .Search ld a, [wDexSearchMonType1] and a call nz, .Search ret .Search: ; 41095 dec a ld e, a ld d, 0 ld hl, .TypeConversionTable add hl, de ld a, [hl] ld [wDexConvertedMonType], a ld hl, wPokedexDataStart ld de, wPokedexDataStart ld c, NUM_POKEMON xor a ld [wDexSearchResultCount], a .loop push bc ld a, [hl] and a jr z, .next_mon ld [wd265], a ld [CurSpecies], a call Pokedex_CheckCaught jr z, .next_mon push hl push de call GetBaseData pop de pop hl ld a, [wDexConvertedMonType] ld b, a ld a, [BaseType1] cp b jr z, .match_found ld a, [BaseType2] cp b jr nz, .next_mon .match_found ld a, [wd265] ld [de], a inc de ld a, [wDexSearchResultCount] inc a ld [wDexSearchResultCount], a .next_mon inc hl pop bc dec c jr nz, .loop ld l, e ld h, d ld a, [wDexSearchResultCount] ld c, 0 .zero_remaining_mons cp NUM_POKEMON jr z, .done ld [hl], c inc hl inc a jr .zero_remaining_mons .done ret .TypeConversionTable: ; 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 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 String_41126: ; 41126 db "The specified type" next "was not found.@" Pokedex_UpdateCursorOAM: ; 41148 (10:5148) ld a, [wCurrentDexMode] cp DEXMODE_OLD jp z, Pokedex_PutOldModeCursorOAM call Pokedex_PutNewModeABCModeCursorOAM call Pokedex_PutScrollbarOAM ret Pokedex_PutOldModeCursorOAM: ; 41157 (10:5157) ld hl, .CursorOAM ld a, [wDexListingCursor] or a jr nz, .okay ld hl, .CursorAtTopOAM .okay call Pokedex_LoadCursorOAM ret .CursorOAM: ; 41167 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 .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. 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 Pokedex_PutNewModeABCModeCursorOAM: ; 41229 (10:5229) ld hl, .CursorOAM call Pokedex_LoadCursorOAM ret .CursorOAM: ; 41230 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 Pokedex_UpdateSearchResultsCursorOAM: ; 41281 (10:5281) ld a, [wCurrentDexMode] cp DEXMODE_OLD jp z, Pokedex_PutOldModeCursorOAM ld hl, .CursorOAM call Pokedex_LoadCursorOAM ret .CursorOAM: ; 41290 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 Pokedex_LoadCursorOAM: ; 412f1 (10:52f1) ld de, Sprites .loop 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 .loop Pokedex_PutScrollbarOAM: ; 4130e (10:530e) ; Writes the OAM data for the scrollbar in the new mode and ABC mode. push de ld a, [wDexListingEnd] dec a ld e, a ld a, [wDexListingCursor] ld hl, wDexListingScrollOffset 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 Pokedex_InitArrowCursor: ; 4134f (10:534f) xor a ld [wDexArrowCursorPosIndex], a ld [wDexArrowCursorDelayCounter], a ld [wDexArrowCursorBlinkCounter], a ret Pokedex_MoveArrowCursor: ; 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_BlinkArrowCursor ld hl, hJoyPressed ld a, [hl] and D_LEFT | D_UP and b jr nz, .MoveCursorLeftOrUp ld a, [hl] and D_RIGHT | D_DOWN and b jr nz, .MoveCursorRightOrDown ld a, [hl] and SELECT and b jr nz, .Select call Pokedex_ArrowCursorDelay jr c, .NoAction ld hl, hJoyLast ld a, [hl] and D_LEFT | D_UP and b jr nz, .MoveCursorLeftOrUp ld a, [hl] and D_RIGHT | D_DOWN and b jr nz, .MoveCursorRightOrDown jr .NoAction .MoveCursorLeftOrUp ld a, [wDexArrowCursorPosIndex] and a jr z, .NoAction call Pokedex_GetArrowCursorPos ld [hl], " " ld hl, wDexArrowCursorPosIndex dec [hl] jr .UpdateCursorPosition .MoveCursorRightOrDown ld a, [wDexArrowCursorPosIndex] cp c jr nc, .NoAction call Pokedex_GetArrowCursorPos ld [hl], " " ld hl, wDexArrowCursorPosIndex inc [hl] .UpdateCursorPosition call Pokedex_GetArrowCursorPos ld [hl], "▶" ld a, 12 ld [wDexArrowCursorDelayCounter], a xor a ld [wDexArrowCursorBlinkCounter], a scf ret .NoAction and a ret .Select call Pokedex_GetArrowCursorPos ld [hl], " " ld a, [wDexArrowCursorPosIndex] cp c jr c, .Update ld a, -1 .Update inc a ld [wDexArrowCursorPosIndex], a jr .UpdateCursorPosition Pokedex_GetArrowCursorPos: ; 413d4 (10:53d4) ld a, [wDexArrowCursorPosIndex] add a ld l, a ld h, 0 add hl, de ld a, [hli] ld h, [hl] ld l, a ret Pokedex_BlinkArrowCursor: ; 413e0 (10:53e0) ld hl, wDexArrowCursorBlinkCounter ld a, [hl] inc [hl] and $8 jr z, .blink_on call Pokedex_GetArrowCursorPos ld [hl], " " ret .blink_on call Pokedex_GetArrowCursorPos ld [hl], "▶" ret 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 ld a, [hl] and a ret z dec [hl] scf ret Pokedex_FillBox: ; 413fe (10:53fe) jp FillBoxWithByte Pokedex_BlackOutBG: ; 41401 (10:5401) ; Make BG palettes black so that the BG becomes all black. 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 Pokedex_GetSGBLayout: ; 41423 ld b, a call GetSGBLayout Function41427: ; 41427 ld a, $e4 call DmgToCgbBGPals ld a, $e0 call DmgToCgbObjPal0 ret 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 Pokedex_LoadSelectedMonTiles: ; 4143b ; Loads the tiles of the currently selected Pokémon. call Pokedex_GetSelectedMon 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 Pokedex_LoadCurrentFootprint: ; 41478 (10:5478) call Pokedex_GetSelectedMon 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 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 PokedexLZ: ; 4150e INCBIN "gfx/pokedex/pokedex.2bpp.lz" PokedexSlowpokeLZ: ; 416b0 INCBIN "gfx/pokedex/slowpoke.2bpp.lz" Pokedex_CheckSGB: ; 41a24 ld a, [hCGB] or a ret nz ld a, [hSGB] dec a ret 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 Function41a58: ; 41a58 (10:5a58) ld a, [UnownLetter] push af ld a, [wc7dd] ld e, a ld d, $0 ld hl, 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 _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 Pokedex_DrawDexEntryScreenBG 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, SCGB_POKEDEX call Pokedex_GetSGBLayout ld a, [CurPartySpecies] call PlayCry ret 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