From 7f54df58bfb00564874f8b6b3acef52a9aff7442 Mon Sep 17 00:00:00 2001 From: Remy Oukaour Date: Sun, 21 Jan 2018 18:00:23 -0500 Subject: Group engine/pokedex files --- engine/pokedex.asm | 2592 ----------------------------------- engine/pokedex/newpokedexentry.asm | 52 + engine/pokedex/pokedex.asm | 2592 +++++++++++++++++++++++++++++++++++ engine/pokedex/pokedex_2.asm | 280 ++++ engine/pokedex/pokedex_3.asm | 162 +++ engine/pokedex/unown_dex.asm | 52 + engine/pokedex_2.asm | 280 ---- engine/pokedex_3.asm | 162 --- engine/routines/newpokedexentry.asm | 52 - engine/unown_dex.asm | 52 - 10 files changed, 3138 insertions(+), 3138 deletions(-) delete mode 100644 engine/pokedex.asm create mode 100644 engine/pokedex/newpokedexentry.asm create mode 100644 engine/pokedex/pokedex.asm create mode 100644 engine/pokedex/pokedex_2.asm create mode 100644 engine/pokedex/pokedex_3.asm create mode 100755 engine/pokedex/unown_dex.asm delete mode 100644 engine/pokedex_2.asm delete mode 100644 engine/pokedex_3.asm delete mode 100644 engine/routines/newpokedexentry.asm delete mode 100755 engine/unown_dex.asm (limited to 'engine') diff --git a/engine/pokedex.asm b/engine/pokedex.asm deleted file mode 100644 index e96d0a7d7..000000000 --- a/engine/pokedex.asm +++ /dev/null @@ -1,2592 +0,0 @@ -; Pokedex_RunJumptable.Jumptable indexes - 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 - -POKEDEX_SCX EQU 5 -GLOBAL POKEDEX_SCX - -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_RunJumptable - 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 [wPrevDexEntryJumptableIndex], a - ld [wPrevDexEntryBackup], a - ld [wcf66], a - - call Pokedex_CheckUnlockedUnownMode - - ld a, [wLastDexMode] - ld [wCurrentDexMode], a - - call Pokedex_OrderMonsByMode - call Pokedex_InitCursorPosition - call Pokedex_GetLandmark - farcall DrawDexEntryScreenRightEdge - call Pokedex_ResetBGMapMode - ret - -Pokedex_CheckUnlockedUnownMode: ; 400a2 - ld a, [wStatusFlags] - 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, wPokedexOrder - ld a, [wPrevDexEntry] - 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_RunJumptable: ; 4010b - ld a, [wJumptableIndex] - ld hl, .Jumptable - call Pokedex_LoadPointer - jp hl - -.Jumptable: ; 40115 (10:4115) -; entries correspond to DEXSTATE_* constants - 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_Exit - -Pokedex_IncrementDexPointer: ; 40131 (10:4131) - ld hl, wJumptableIndex - inc [hl] - ret - -Pokedex_Exit: ; 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 - farcall 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_DrawMainScreenBG - ld a, POKEDEX_SCX - 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 - farcall 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, DEXSTATE_DEX_ENTRY_SCR - ld [wJumptableIndex], a - ld a, DEXSTATE_MAIN_SCR - ld [wPrevDexEntryJumptableIndex], a - ret - -.select - call Pokedex_BlackOutBG - ld a, DEXSTATE_OPTION_SCR - ld [wJumptableIndex], a - xor a - ld [hSCX], a - ld a, $a7 - ld [hWX], a - call DelayFrame - ret - -.start - call Pokedex_BlackOutBG - ld a, DEXSTATE_SEARCH_SCR - ld [wJumptableIndex], a - xor a - ld [hSCX], a - ld a, $a7 - ld [hWX], a - call DelayFrame - ret - -.b - ld a, DEXSTATE_EXIT - ld [wJumptableIndex], a - ret - -Pokedex_InitDexEntryScreen: ; 40217 (10:4217) - call LowVolume - xor a ; page 1 - ld [wPokedexStatus], a - xor a - ld [hBGMapMode], a - call ClearSprites - call Pokedex_LoadCurrentFootprint - call Pokedex_DrawDexEntryScreenBG - call Pokedex_InitArrowCursor - call Pokedex_GetSelectedMon - ld [wPrevDexEntry], a - farcall 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 PlayMonCry - 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, .return_to_prev_screen - ld a, [hl] - and A_BUTTON - jr nz, .do_menu_action - call Pokedex_NextOrPreviousDexEntry - ret nc - call Pokedex_IncrementDexPointer - ret - -.do_menu_action - ld a, [wDexArrowCursorPosIndex] - ld hl, DexEntryScreen_MenuActionJumptable - call Pokedex_LoadPointer - jp hl - -.return_to_prev_screen - ld a, [LastVolume] - and a - jr z, .max_volume - ld a, $77 - ld [LastVolume], a - -.max_volume - call MaxVolume - ld a, [wPrevDexEntryJumptableIndex] - ld [wJumptableIndex], a - ret - -Pokedex_Page: ; 40292 - ld a, [wPokedexStatus] - xor 1 ; toggle page - ld [wPokedexStatus], a - call Pokedex_GetSelectedMon - ld [wPrevDexEntry], a - farcall 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 ; page 1 - ld [wPokedexStatus], a - xor a - ld [hBGMapMode], a - call Pokedex_DrawDexEntryScreenBG - call Pokedex_InitArrowCursor - call Pokedex_LoadCurrentFootprint - call Pokedex_GetSelectedMon - ld [wPrevDexEntry], a - farcall 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 PlayMonCry - ld hl, wJumptableIndex - dec [hl] - ret - -DexEntryScreen_ArrowCursorData: ; 402e8 - db D_RIGHT | D_LEFT, 4 - dwcoord 1, 17 ; PAGE - dwcoord 6, 17 ; AREA - dwcoord 11, 17 ; CRY - dwcoord 15, 17 ; PRNT - - -DexEntryScreen_MenuActionJumptable: ; 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 Pokedex_GetArea - call Pokedex_BlackOutBG - call DelayFrame - xor a - ld [hBGMapMode], a - ld a, $90 - ld [hWY], a - ld a, POKEDEX_SCX - ld [hSCX], a - call DelayFrame - call Pokedex_RedisplayDexEntry - 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 PlayCry - ret - -.Print: ; 4034f - call Pokedex_ApplyPrintPals - xor a - ld [hSCX], a - ld a, [wPrevDexEntryBackup] - push af - ld a, [wPrevDexEntryJumptableIndex] - push af - ld a, [wJumptableIndex] - push af - farcall PrintDexEntry - pop af - ld [wJumptableIndex], a - pop af - ld [wPrevDexEntryJumptableIndex], a - pop af - ld [wPrevDexEntryBackup], a - call ClearBGPalettes - call DisableLCD - call Pokedex_LoadInvertedFont - call Pokedex_RedisplayDexEntry - call EnableLCD - call WaitBGMap - ld a, POKEDEX_SCX - ld [hSCX], a - call Pokedex_ApplyUsualPals - ret - -Pokedex_RedisplayDexEntry: ; 4038d - call Pokedex_DrawDexEntryScreenBG - call Pokedex_GetSelectedMon - farcall 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] ; Index of the topmost visible item in a scrolling menu ??? - ld [wDexArrowCursorPosIndex], a - call Pokedex_DisplayModeDescription - call WaitBGMap - ld a, SCGB_POKEDEX_SEARCH_OPTION - call Pokedex_GetSGBLayout - call Pokedex_IncrementDexPointer - ret - -Pokedex_UpdateOptionScreen: ; 403be (10:43be) - ld a, [wUnlockedUnownMode] - and a - jr nz, .okay - ld de, .NoUnownModeArrowCursorData - jr .okay2 -.okay - ld de, .ArrowCursorData -.okay2 - call Pokedex_MoveArrowCursor - call c, Pokedex_DisplayModeDescription - ld hl, hJoyPressed - ld a, [hl] - and SELECT | B_BUTTON - jr nz, .return_to_main_screen - ld a, [hl] - and A_BUTTON - jr nz, .do_menu_action - ret - -.do_menu_action - ld a, [wDexArrowCursorPosIndex] - ld hl, .MenuActionJumptable - call Pokedex_LoadPointer - jp hl - -.return_to_main_screen - call Pokedex_BlackOutBG - ld a, DEXSTATE_MAIN_SCR - ld [wJumptableIndex], a - ret - -.NoUnownModeArrowCursorData: ; 403f3 - db D_UP | D_DOWN, 3 - dwcoord 2, 4 ; NEW - dwcoord 2, 6 ; OLD - dwcoord 2, 8 ; ABC - -.ArrowCursorData: ; 403fb - db D_UP | D_DOWN, 4 - dwcoord 2, 4 ; NEW - dwcoord 2, 6 ; OLD - dwcoord 2, 8 ; ABC - dwcoord 2, 10 ; UNOWN - -.MenuActionJumptable: ; 40405 (10:4405) - dw .MenuAction_NewMode - dw .MenuAction_OldMode - dw .MenuAction_ABCMode - dw .MenuAction_UnownMode - -.MenuAction_NewMode: ; 4040d (10:440d) - ld b, DEXMODE_NEW - jr .ChangeMode - -.MenuAction_OldMode: ; 40411 (10:4411) - ld b, DEXMODE_OLD - jr .ChangeMode - -.MenuAction_ABCMode: ; 40415 (10:4415) - ld b, DEXMODE_ABC - -.ChangeMode: ; 40417 (10:4417) - ld a, [wCurrentDexMode] - cp b - jr z, .skip_changing_mode ; Skip if new mode is same as current. - - ld a, b - ld [wCurrentDexMode], a - call Pokedex_OrderMonsByMode - call Pokedex_DisplayChangingModesMessage - xor a - ld [wDexListingScrollOffset], a - ld [wDexListingCursor], a - call Pokedex_InitCursorPosition - -.skip_changing_mode - call Pokedex_BlackOutBG - ld a, DEXSTATE_MAIN_SCR - ld [wJumptableIndex], a - ret - -.MenuAction_UnownMode: ; 4043a (10:443a) - call Pokedex_BlackOutBG - ld a, DEXSTATE_UNOWN_MODE - 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 - farcall DoDexSearchSlowpokeFrame - call WaitBGMap - ld a, SCGB_POKEDEX_SEARCH_OPTION - 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, .cancel - ld a, [hl] - and A_BUTTON - jr nz, .do_menu_action - ret - -.do_menu_action - ld a, [wDexArrowCursorPosIndex] - ld hl, .MenuActionJumptable - call Pokedex_LoadPointer - jp hl - -.cancel - call Pokedex_BlackOutBG - ld a, DEXSTATE_MAIN_SCR - ld [wJumptableIndex], a - ret - -.ArrowCursorData: ; 4049e - db D_UP | D_DOWN, 4 - dwcoord 2, 4 ; TYPE 1 - dwcoord 2, 6 ; TYPE 2 - dwcoord 2, 13 ; BEGIN SEARCH - dwcoord 2, 15 ; CANCEL - -.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 - farcall AnimateDexSearchSlowpoke - ld a, [wDexSearchResultCount] - and a - jr nz, .show_search_results - -; No mon with matching types was found. - call Pokedex_OrderMonsByMode - call Pokedex_DisplayTypeNotFoundMessage - 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 [wDexListingScrollOffsetBackup], a - ld a, [wDexListingCursor] - ld [wDexListingCursorBackup], a - ld a, [wPrevDexEntry] - ld [wPrevDexEntryBackup], a - xor a - ld [wDexListingScrollOffset], a - ld [wDexListingCursor], a - call Pokedex_BlackOutBG - ld a, DEXSTATE_SEARCH_RESULTS_SCR - ld [wJumptableIndex], a - ret - -.MenuAction_Cancel: ; 40501 - call Pokedex_BlackOutBG - ld a, DEXSTATE_MAIN_SCR - 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 - farcall DrawPokedexSearchResultsWindow - call Pokedex_PlaceSearchResultsTypeStrings - ld a, 4 - ld [wDexListingHeight], a - call Pokedex_PrintListing - call Pokedex_SetBGMapMode3 - call Pokedex_ResetBGMapMode - call Pokedex_DrawSearchResultsScreenBG - ld a, POKEDEX_SCX - ld [hSCX], a - ld a, $4a - ld [hWX], a - xor a - ld [hWY], a - call WaitBGMap - call Pokedex_ResetBGMapMode - farcall DrawPokedexSearchResultsWindow - call Pokedex_PlaceSearchResultsTypeStrings - call Pokedex_UpdateSearchResultsCursorOAM - ld a, -1 - ld [CurPartySpecies], a - ld a, SCGB_POKEDEX - call Pokedex_GetSGBLayout - call Pokedex_IncrementDexPointer - ret - -Pokedex_UpdateSearchResultsScreen: ; 40562 (10:4562) - ld hl, hJoyPressed - ld a, [hl] - and B_BUTTON - jr nz, .return_to_search_screen - ld a, [hl] - and A_BUTTON - jr nz, .go_to_dex_entry - call Pokedex_ListingHandleDPadInput - ret nc - call Pokedex_UpdateSearchResultsCursorOAM - xor a - ld [hBGMapMode], a - call Pokedex_PrintListing - call Pokedex_SetBGMapMode3 - call Pokedex_ResetBGMapMode - ret - -.go_to_dex_entry - call Pokedex_GetSelectedMon - call Pokedex_CheckSeen - ret z - ld a, DEXSTATE_DEX_ENTRY_SCR - ld [wJumptableIndex], a - ld a, DEXSTATE_SEARCH_RESULTS_SCR - ld [wPrevDexEntryJumptableIndex], a - ret - -.return_to_search_screen - ld a, [wDexListingScrollOffsetBackup] - ld [wDexListingScrollOffset], a - ld a, [wDexListingCursorBackup] - ld [wDexListingCursor], a - ld a, [wPrevDexEntryBackup] - ld [wPrevDexEntry], a - call Pokedex_BlackOutBG - call ClearSprites - call Pokedex_OrderMonsByMode - ld a, DEXSTATE_SEARCH_SCR - ld [wJumptableIndex], a - xor a - ld [hSCX], a - ld a, $a7 - ld [hWX], a - ret - -Pokedex_InitUnownMode: ; 405bd (10:45bd) - call Pokedex_LoadUnownFont - call Pokedex_DrawUnownModeBG - xor a - ld [wDexCurrentUnownIndex], a - call Pokedex_LoadUnownFrontpicTiles - call Pokedex_UnownModePlaceCursor - farcall PrintUnownWord - call WaitBGMap - ld a, SCGB_POKEDEX_UNOWN_MODE - 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 Pokedex_UnownModeHandleDPadInput - ret - -.a_b - call Pokedex_BlackOutBG - ld a, DEXSTATE_OPTION_SCR - ld [wJumptableIndex], a - call DelayFrame - call Pokedex_CheckSGB - jr nz, .decompress - farcall LoadSGBPokedexGFX2 - jr .done - -.decompress - ld hl, PokedexLZ - ld de, vTiles2 tile $31 - lb bc, BANK(PokedexLZ), 58 - call DecompressRequest2bpp - -.done - ret - -Pokedex_UnownModeHandleDPadInput: ; 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, [wDexUnownCount] - ld e, a - ld hl, wDexCurrentUnownIndex - ld a, [hl] - inc a - cp e - ret nc - ld a, [hl] - inc [hl] - jr .update - -.left - ld hl, wDexCurrentUnownIndex - ld a, [hl] - and a - ret z - ld a, [hl] - dec [hl] - -.update - push af - xor a - ld [hBGMapMode], a - pop af - call Pokedex_UnownModeEraseCursor - call Pokedex_LoadUnownFrontpicTiles - call Pokedex_UnownModePlaceCursor - farcall PrintUnownWord - ld a, $1 - ld [hBGMapMode], a - call DelayFrame - call DelayFrame - ret - -Pokedex_UnownModeEraseCursor: ; 40654 (10:4654) - ld c, " " - jr Pokedex_UnownModeUpdateCursorGfx - -Pokedex_UnownModePlaceCursor: ; 40658 (10:4658) - ld a, [wDexCurrentUnownIndex] - ld c, $5a ; diamond cursor - -Pokedex_UnownModeUpdateCursorGfx: ; 4065d (10:465d) - ld e, a - ld d, 0 - ld hl, UnownModeLetterAndCursorCoords + 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_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. - push de - ld de, SCREEN_WIDTH -.loop - ld [hl], a - add hl, de - dec b - jr nz, .loop - pop de - ret - - -Pokedex_DrawMainScreenBG: ; 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 - lb bc, 6, 7 - 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_FillColumn - hlcoord 8, 10 - ld b, 6 - ld a, $5a - call Pokedex_FillColumn - 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", -1 -String_OWN: ; 407e6 - db "OWN", -1 -String_SELECT_OPTION: ; 407ea - db $3b, $48, $49, $4a, $44, $45, $46, $47 ; SELECT > OPTION - ; fallthrough -String_START_SEARCH: ; 407f2 - db $3c, $3b, $41, $42, $43, $4b, $4c, $4d, $4e, $3c, -1 ; START > SEARCH - -Pokedex_DrawDexEntryScreenBG: ; 407fd - call Pokedex_FillBackgroundColor2 - hlcoord 0, 0 - lb bc, 15, 18 - call Pokedex_PlaceBorder - hlcoord 19, 0 - ld [hl], $34 - hlcoord 19, 1 - ld a, " " - ld b, 15 - call Pokedex_FillColumn - ld [hl], $39 - hlcoord 1, 10 - ld bc, 19 - ld a, $61 - call ByteFill - hlcoord 1, 17 - ld bc, 18 - ld a, " " - 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, -1 ; No. -.Height: ; 40852 - db "HT ?", $5e, "??", $5f, -1 ; HT ?'??" -.Weight: ; 4085c - db "WT ???lb", -1 ; WT ???lb -.MenuItems: ; 40867 - db $3b, " PAGE AREA CRY PRNT", -1 - -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, -1 - -.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, -1 - -.TypeLeftRightArrows: ; 40935 - db $3d, " ", $3e, -1 - -.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_FillColumn - 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 - -Pokedex_DrawUnownModeBG: ; 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, UnownModeLetterAndCursorCoords -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 [wDexUnownCount], a - ret - -UnownModeLetterAndCursorCoords: ; 40a3e -; entries correspond to Unown forms -; letter, cursor - dwcoord 4,11, 3,11 ; A - dwcoord 4,10, 3,10 ; B - dwcoord 4, 9, 3, 9 ; C - dwcoord 4, 8, 3, 8 ; D - dwcoord 4, 7, 3, 7 ; E - dwcoord 4, 6, 3, 6 ; F - dwcoord 4, 5, 3, 5 ; G - dwcoord 4, 4, 3, 4 ; H - dwcoord 4, 3, 3, 2 ; I - dwcoord 5, 3, 5, 2 ; J - dwcoord 6, 3, 6, 2 ; K - dwcoord 7, 3, 7, 2 ; L - dwcoord 8, 3, 8, 2 ; M - dwcoord 9, 3, 9, 2 ; N - dwcoord 10, 3, 10, 2 ; O - dwcoord 11, 3, 11, 2 ; P - dwcoord 12, 3, 12, 2 ; Q - dwcoord 13, 3, 13, 2 ; R - dwcoord 14, 3, 15, 2 ; S - dwcoord 14, 4, 15, 4 ; T - dwcoord 14, 5, 15, 5 ; U - dwcoord 14, 6, 15, 6 ; V - dwcoord 14, 7, 15, 7 ; W - dwcoord 14, 8, 15, 8 ; X - dwcoord 14, 9, 15, 9 ; Y - dwcoord 14,10, 15,10 ; Z - -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 wPokedexOrder + [wDexListingScrollOffset] - ld a, [wDexListingScrollOffset] - ld e, a - ld d, $0 - ld hl, wPokedexOrder - 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, wPokedexOrder - 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_OrderMonsByMode: ; 40bdc - ld hl, wPokedexOrder - ld bc, wPokedexOrderEnd - wPokedexOrder - 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, wPokedexOrder - 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, wPokedexOrder - 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, wPokedexOrder + 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, wPokedexOrder - 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 - - -INCLUDE "data/pokemon/dex_order_alpha.asm" - -INCLUDE "data/pokemon/dex_order_new.asm" - - -Pokedex_DisplayModeDescription: ; 40e5b - xor a - ld [hBGMapMode], a - hlcoord 0, 12 - lb bc, 4, 18 - call Pokedex_PlaceBorder - ld a, [wDexArrowCursorPosIndex] - ld hl, .Modes - call Pokedex_LoadPointer - ld e, l - ld d, h - hlcoord 1, 14 - call PlaceString - ld a, $1 - ld [hBGMapMode], a - ret - -.Modes: ; 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.@" - -Pokedex_DisplayChangingModesMessage: ; 40f08 (10:4f08) - xor a - ld [hBGMapMode], a - hlcoord 0, 12 - lb bc, 4, 18 - 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, .no_change - ld hl, hJoyLast - ld a, [hl] - and D_LEFT - jr nz, Pokedex_PrevSearchMonType - ld a, [hl] - and D_RIGHT - jr nz, Pokedex_NextSearchMonType -.no_change - and a - ret - -Pokedex_PrevSearchMonType: ; 40f65 - ld a, [wDexArrowCursorPosIndex] - and a - jr nz, .type2 - - ld hl, wDexSearchMonType1 - ld a, [hl] - cp 1 - jr z, .wrap_around - dec [hl] - jr .done - -.type2 - ld hl, wDexSearchMonType2 - ld a, [hl] - and a - jr z, .wrap_around - dec [hl] - jr .done - -.wrap_around - ld [hl], NUM_TYPES - 1 - -.done - scf - ret - -Pokedex_NextSearchMonType: ; 40f84 - ld a, [wDexArrowCursorPosIndex] - and a - jr nz, .type2 - - ld hl, wDexSearchMonType1 - ld a, [hl] - cp NUM_TYPES - 1 - jr nc, .type1_wrap_around - inc [hl] - jr .done -.type1_wrap_around - ld [hl], 1 - jr .done - -.type2 - ld hl, wDexSearchMonType2 - ld a, [hl] - cp NUM_TYPES - 1 - jr nc, .type2_wrap_around - inc [hl] - jr .done -.type2_wrap_around - ld [hl], 0 - -.done - 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, PokedexTypeSearchStrings -rept 9 - add hl, de -endr - ld e, l - ld d, h - pop hl - call PlaceString - ret - -INCLUDE "data/types/search_strings.asm" - -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, PokedexTypeSearchConversionTable - add hl, de - ld a, [hl] - ld [wDexConvertedMonType], a - ld hl, wPokedexOrder - ld de, wPokedexOrder - 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 - -INCLUDE "data/types/search_types.asm" - -Pokedex_DisplayTypeNotFoundMessage: ; 41107 - xor a - ld [hBGMapMode], a - hlcoord 0, 12 - lb bc, 4, 18 - call Pokedex_PlaceBorder - ld de, .TypeNotFound - hlcoord 1, 14 - call PlaceString - ld a, $1 - ld [hBGMapMode], a - ld c, $80 - call DelayFrames - ret - -.TypeNotFound: ; 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 - dsprite 3, 0, 9, -1, $30, 7 - dsprite 2, 0, 9, -1, $31, 7 - dsprite 2, 0, 10, -1, $32, 7 - dsprite 2, 0, 11, -1, $32, 7 - dsprite 2, 0, 12, -1, $32, 7 - dsprite 2, 0, 13, -1, $33, 7 - dsprite 2, 0, 16, -2, $33, 7 | X_FLIP - dsprite 2, 0, 17, -2, $32, 7 | X_FLIP - dsprite 2, 0, 18, -2, $32, 7 | X_FLIP - dsprite 2, 0, 19, -2, $32, 7 | X_FLIP - dsprite 2, 0, 20, -2, $31, 7 | X_FLIP - dsprite 3, 0, 20, -2, $30, 7 | X_FLIP - dsprite 4, 0, 9, -1, $30, 7 | Y_FLIP - dsprite 5, 0, 9, -1, $31, 7 | Y_FLIP - dsprite 5, 0, 10, -1, $32, 7 | Y_FLIP - dsprite 5, 0, 11, -1, $32, 7 | Y_FLIP - dsprite 5, 0, 12, -1, $32, 7 | Y_FLIP - dsprite 5, 0, 13, -1, $33, 7 | Y_FLIP - dsprite 5, 0, 16, -2, $33, 7 | X_FLIP | Y_FLIP - dsprite 5, 0, 17, -2, $32, 7 | X_FLIP | Y_FLIP - dsprite 5, 0, 18, -2, $32, 7 | X_FLIP | Y_FLIP - dsprite 5, 0, 19, -2, $32, 7 | X_FLIP | Y_FLIP - dsprite 5, 0, 20, -2, $31, 7 | X_FLIP | Y_FLIP - dsprite 4, 0, 20, -2, $30, 7 | X_FLIP | Y_FLIP - db -1 - -.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. - dsprite 3, 0, 9, -1, $30, 7 - dsprite 2, 0, 9, -1, $34, 7 - dsprite 2, 0, 10, -1, $35, 7 - dsprite 2, 0, 11, -1, $35, 7 - dsprite 2, 0, 12, -1, $35, 7 - dsprite 2, 0, 13, -1, $36, 7 - dsprite 2, 0, 16, -2, $36, 7 | X_FLIP - dsprite 2, 0, 17, -2, $35, 7 | X_FLIP - dsprite 2, 0, 18, -2, $35, 7 | X_FLIP - dsprite 2, 0, 19, -2, $35, 7 | X_FLIP - dsprite 2, 0, 20, -2, $34, 7 | X_FLIP - dsprite 3, 0, 20, -2, $30, 7 | X_FLIP - dsprite 4, 0, 9, -1, $30, 7 | Y_FLIP - dsprite 5, 0, 9, -1, $31, 7 | Y_FLIP - dsprite 5, 0, 10, -1, $32, 7 | Y_FLIP - dsprite 5, 0, 11, -1, $32, 7 | Y_FLIP - dsprite 5, 0, 12, -1, $32, 7 | Y_FLIP - dsprite 5, 0, 13, -1, $33, 7 | Y_FLIP - dsprite 5, 0, 16, -2, $33, 7 | X_FLIP | Y_FLIP - dsprite 5, 0, 17, -2, $32, 7 | X_FLIP | Y_FLIP - dsprite 5, 0, 18, -2, $32, 7 | X_FLIP | Y_FLIP - dsprite 5, 0, 19, -2, $32, 7 | X_FLIP | Y_FLIP - dsprite 5, 0, 20, -2, $31, 7 | X_FLIP | Y_FLIP - dsprite 4, 0, 20, -2, $30, 7 | X_FLIP | Y_FLIP - db -1 - -Pokedex_PutNewModeABCModeCursorOAM: ; 41229 (10:5229) - ld hl, .CursorOAM - call Pokedex_LoadCursorOAM - ret - -.CursorOAM: ; 41230 - dsprite 3, 3, 9, -1, $30, 7 - dsprite 2, 3, 9, -1, $31, 7 - dsprite 2, 3, 10, -1, $32, 7 - dsprite 2, 3, 11, -1, $32, 7 - dsprite 2, 3, 12, -1, $33, 7 - dsprite 2, 3, 16, 0, $33, 7 | X_FLIP - dsprite 2, 3, 17, 0, $32, 7 | X_FLIP - dsprite 2, 3, 18, 0, $32, 7 | X_FLIP - dsprite 2, 3, 19, 0, $31, 7 | X_FLIP - dsprite 3, 3, 19, 0, $30, 7 | X_FLIP - dsprite 4, 3, 9, -1, $30, 7 | Y_FLIP - dsprite 5, 3, 9, -1, $31, 7 | Y_FLIP - dsprite 5, 3, 10, -1, $32, 7 | Y_FLIP - dsprite 5, 3, 11, -1, $32, 7 | Y_FLIP - dsprite 5, 3, 12, -1, $33, 7 | Y_FLIP - dsprite 5, 3, 16, 0, $33, 7 | X_FLIP | Y_FLIP - dsprite 5, 3, 17, 0, $32, 7 | X_FLIP | Y_FLIP - dsprite 5, 3, 18, 0, $32, 7 | X_FLIP | Y_FLIP - dsprite 5, 3, 19, 0, $31, 7 | X_FLIP | Y_FLIP - dsprite 4, 3, 19, 0, $30, 7 | X_FLIP | Y_FLIP - db -1 - -Pokedex_UpdateSearchResultsCursorOAM: ; 41281 (10:5281) - ld a, [wCurrentDexMode] - cp DEXMODE_OLD - jp z, Pokedex_PutOldModeCursorOAM - ld hl, .CursorOAM - call Pokedex_LoadCursorOAM - ret - -.CursorOAM: ; 41290 - dsprite 3, 3, 9, -1, $30, 7 - dsprite 2, 3, 9, -1, $31, 7 - dsprite 2, 3, 10, -1, $32, 7 - dsprite 2, 3, 11, -1, $32, 7 - dsprite 2, 3, 12, -1, $32, 7 - dsprite 2, 3, 13, -1, $33, 7 - dsprite 2, 3, 16, -2, $33, 7 | X_FLIP - dsprite 2, 3, 17, -2, $32, 7 | X_FLIP - dsprite 2, 3, 18, -2, $32, 7 | X_FLIP - dsprite 2, 3, 19, -2, $32, 7 | X_FLIP - dsprite 2, 3, 20, -2, $31, 7 | X_FLIP - dsprite 3, 3, 20, -2, $30, 7 | X_FLIP - dsprite 4, 3, 9, -1, $30, 7 | Y_FLIP - dsprite 5, 3, 9, -1, $31, 7 | Y_FLIP - dsprite 5, 3, 10, -1, $32, 7 | Y_FLIP - dsprite 5, 3, 11, -1, $32, 7 | Y_FLIP - dsprite 5, 3, 12, -1, $32, 7 | Y_FLIP - dsprite 5, 3, 13, -1, $33, 7 | Y_FLIP - dsprite 5, 3, 16, -2, $33, 7 | X_FLIP | Y_FLIP - dsprite 5, 3, 17, -2, $32, 7 | X_FLIP | Y_FLIP - dsprite 5, 3, 18, -2, $32, 7 | X_FLIP | Y_FLIP - dsprite 5, 3, 19, -2, $32, 7 | X_FLIP | Y_FLIP - dsprite 5, 3, 20, -2, $31, 7 | X_FLIP | Y_FLIP - dsprite 4, 3, 20, -2, $30, 7 | X_FLIP | Y_FLIP - db -1 - -Pokedex_LoadCursorOAM: ; 412f1 (10:52f1) - ld de, Sprite01 -.loop - ld a, [hl] - cp -1 - ret z - ld a, [wDexListingCursor] - and $7 - swap a - add [hl] ; y - inc hl - ld [de], a - inc de - ld a, [hli] ; x - ld [de], a - inc de - ld a, [hli] ; tile id - ld [de], a - inc de - ld a, [hli] ; attributes - 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, .move_left_or_up - ld a, [hl] - and D_RIGHT | D_DOWN - and b - jr nz, .move_right_or_down - ld a, [hl] - and SELECT - and b - jr nz, .select - call Pokedex_ArrowCursorDelay - jr c, .no_action - ld hl, hJoyLast - ld a, [hl] - and D_LEFT | D_UP - and b - jr nz, .move_left_or_up - ld a, [hl] - and D_RIGHT | D_DOWN - and b - jr nz, .move_right_or_down - jr .no_action - -.move_left_or_up - ld a, [wDexArrowCursorPosIndex] - and a - jr z, .no_action - call Pokedex_GetArrowCursorPos - ld [hl], " " - ld hl, wDexArrowCursorPosIndex - dec [hl] - jr .update_cursor_pos - -.move_right_or_down - ld a, [wDexArrowCursorPosIndex] - cp c - jr nc, .no_action - call Pokedex_GetArrowCursorPos - ld [hl], " " - ld hl, wDexArrowCursorPosIndex - inc [hl] - -.update_cursor_pos - call Pokedex_GetArrowCursorPos - ld [hl], "▶" - ld a, 12 - ld [wDexArrowCursorDelayCounter], a - xor a - ld [wDexArrowCursorBlinkCounter], a - scf - ret - -.no_action - 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 .update_cursor_pos - -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, BANK(wBGPals1) - ld [rSVBK], a - ld hl, wBGPals1 - ld bc, 8 palettes - xor a - call ByteFill - pop af - ld [rSVBK], a - -Pokedex_ApplyPrintPals: ; 41415 - ld a, $ff - call DmgToCgbBGPals - ld a, $ff - call DmgToCgbObjPal0 - call DelayFrame - ret - -Pokedex_GetSGBLayout: ; 41423 - ld b, a - call GetSGBLayout - -Pokedex_ApplyUsualPals: ; 41427 -; This applies the palettes used for most Pokédex screens. - ld a, $e4 - call DmgToCgbBGPals - ld a, $e0 - call DmgToCgbObjPal0 - ret - - -Pokedex_LoadPointer: ; 41432 - ld e, a - ld d, 0 - add hl, de - add hl, de - 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 GetMonFrontpic - ret - -.QuestionMark: - ld a, BANK(sScratch) - call GetSRAMBank - farcall 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 %11111000 - srl a - srl a - srl a - ld e, 0 - ld d, a - ld a, [wd265] - dec a - and %111 - 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 - farcall 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 - -Pokedex_LoadUnownFrontpicTiles: ; 41a58 (10:5a58) - ld a, [UnownLetter] - push af - ld a, [wDexCurrentUnownIndex] - 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 GetMonFrontpic - pop af - ld [UnownLetter], a - ret - -_NewPokedexEntry: ; 41a7f - xor a - ld [hBGMapMode], a - farcall DrawDexEntryScreenRightEdge - 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 - farcall DisplayDexEntry - call EnableLCD - call WaitBGMap - call GetBaseData - ld de, vTiles2 - predef GetMonFrontpic - ld a, SCGB_POKEDEX - call Pokedex_GetSGBLayout - ld a, [CurPartySpecies] - call PlayMonCry - 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 diff --git a/engine/pokedex/newpokedexentry.asm b/engine/pokedex/newpokedexentry.asm new file mode 100644 index 000000000..d6b755200 --- /dev/null +++ b/engine/pokedex/newpokedexentry.asm @@ -0,0 +1,52 @@ +NewPokedexEntry: ; fb877 + ld a, [hMapAnims] + push af + xor a + ld [hMapAnims], a + call LowVolume + call ClearBGPalettes + call ClearTileMap + call UpdateSprites + call ClearSprites + ld a, [wPokedexStatus] + push af + ld a, [hSCX] + add POKEDEX_SCX + ld [hSCX], a + xor a + ld [wPokedexStatus], a + farcall _NewPokedexEntry + call WaitPressAorB_BlinkCursor + ld a, 1 ; page 2 + ld [wPokedexStatus], a + farcall DisplayDexEntry + call WaitPressAorB_BlinkCursor + pop af + ld [wPokedexStatus], a + call MaxVolume + call RotateThreePalettesRight + ld a, [hSCX] + add -POKEDEX_SCX + ld [hSCX], a + call .ReturnFromDexRegistration + pop af + ld [hMapAnims], a + ret +; fb8c8 + +.ReturnFromDexRegistration: ; fb8c8 + call ClearTileMap + call LoadFontsExtra + call LoadStandardFont + farcall Pokedex_PlaceFrontpicTopLeftCorner + call WaitBGMap2 + farcall GetEnemyMonDVs + ld a, [hli] + ld [TempMonDVs], a + ld a, [hl] + ld [TempMonDVs + 1], a + ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS + call GetSGBLayout + call SetPalettes + ret +; fb8f1 diff --git a/engine/pokedex/pokedex.asm b/engine/pokedex/pokedex.asm new file mode 100644 index 000000000..e96d0a7d7 --- /dev/null +++ b/engine/pokedex/pokedex.asm @@ -0,0 +1,2592 @@ +; Pokedex_RunJumptable.Jumptable indexes + 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 + +POKEDEX_SCX EQU 5 +GLOBAL POKEDEX_SCX + +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_RunJumptable + 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 [wPrevDexEntryJumptableIndex], a + ld [wPrevDexEntryBackup], a + ld [wcf66], a + + call Pokedex_CheckUnlockedUnownMode + + ld a, [wLastDexMode] + ld [wCurrentDexMode], a + + call Pokedex_OrderMonsByMode + call Pokedex_InitCursorPosition + call Pokedex_GetLandmark + farcall DrawDexEntryScreenRightEdge + call Pokedex_ResetBGMapMode + ret + +Pokedex_CheckUnlockedUnownMode: ; 400a2 + ld a, [wStatusFlags] + 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, wPokedexOrder + ld a, [wPrevDexEntry] + 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_RunJumptable: ; 4010b + ld a, [wJumptableIndex] + ld hl, .Jumptable + call Pokedex_LoadPointer + jp hl + +.Jumptable: ; 40115 (10:4115) +; entries correspond to DEXSTATE_* constants + 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_Exit + +Pokedex_IncrementDexPointer: ; 40131 (10:4131) + ld hl, wJumptableIndex + inc [hl] + ret + +Pokedex_Exit: ; 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 + farcall 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_DrawMainScreenBG + ld a, POKEDEX_SCX + 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 + farcall 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, DEXSTATE_DEX_ENTRY_SCR + ld [wJumptableIndex], a + ld a, DEXSTATE_MAIN_SCR + ld [wPrevDexEntryJumptableIndex], a + ret + +.select + call Pokedex_BlackOutBG + ld a, DEXSTATE_OPTION_SCR + ld [wJumptableIndex], a + xor a + ld [hSCX], a + ld a, $a7 + ld [hWX], a + call DelayFrame + ret + +.start + call Pokedex_BlackOutBG + ld a, DEXSTATE_SEARCH_SCR + ld [wJumptableIndex], a + xor a + ld [hSCX], a + ld a, $a7 + ld [hWX], a + call DelayFrame + ret + +.b + ld a, DEXSTATE_EXIT + ld [wJumptableIndex], a + ret + +Pokedex_InitDexEntryScreen: ; 40217 (10:4217) + call LowVolume + xor a ; page 1 + ld [wPokedexStatus], a + xor a + ld [hBGMapMode], a + call ClearSprites + call Pokedex_LoadCurrentFootprint + call Pokedex_DrawDexEntryScreenBG + call Pokedex_InitArrowCursor + call Pokedex_GetSelectedMon + ld [wPrevDexEntry], a + farcall 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 PlayMonCry + 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, .return_to_prev_screen + ld a, [hl] + and A_BUTTON + jr nz, .do_menu_action + call Pokedex_NextOrPreviousDexEntry + ret nc + call Pokedex_IncrementDexPointer + ret + +.do_menu_action + ld a, [wDexArrowCursorPosIndex] + ld hl, DexEntryScreen_MenuActionJumptable + call Pokedex_LoadPointer + jp hl + +.return_to_prev_screen + ld a, [LastVolume] + and a + jr z, .max_volume + ld a, $77 + ld [LastVolume], a + +.max_volume + call MaxVolume + ld a, [wPrevDexEntryJumptableIndex] + ld [wJumptableIndex], a + ret + +Pokedex_Page: ; 40292 + ld a, [wPokedexStatus] + xor 1 ; toggle page + ld [wPokedexStatus], a + call Pokedex_GetSelectedMon + ld [wPrevDexEntry], a + farcall 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 ; page 1 + ld [wPokedexStatus], a + xor a + ld [hBGMapMode], a + call Pokedex_DrawDexEntryScreenBG + call Pokedex_InitArrowCursor + call Pokedex_LoadCurrentFootprint + call Pokedex_GetSelectedMon + ld [wPrevDexEntry], a + farcall 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 PlayMonCry + ld hl, wJumptableIndex + dec [hl] + ret + +DexEntryScreen_ArrowCursorData: ; 402e8 + db D_RIGHT | D_LEFT, 4 + dwcoord 1, 17 ; PAGE + dwcoord 6, 17 ; AREA + dwcoord 11, 17 ; CRY + dwcoord 15, 17 ; PRNT + + +DexEntryScreen_MenuActionJumptable: ; 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 Pokedex_GetArea + call Pokedex_BlackOutBG + call DelayFrame + xor a + ld [hBGMapMode], a + ld a, $90 + ld [hWY], a + ld a, POKEDEX_SCX + ld [hSCX], a + call DelayFrame + call Pokedex_RedisplayDexEntry + 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 PlayCry + ret + +.Print: ; 4034f + call Pokedex_ApplyPrintPals + xor a + ld [hSCX], a + ld a, [wPrevDexEntryBackup] + push af + ld a, [wPrevDexEntryJumptableIndex] + push af + ld a, [wJumptableIndex] + push af + farcall PrintDexEntry + pop af + ld [wJumptableIndex], a + pop af + ld [wPrevDexEntryJumptableIndex], a + pop af + ld [wPrevDexEntryBackup], a + call ClearBGPalettes + call DisableLCD + call Pokedex_LoadInvertedFont + call Pokedex_RedisplayDexEntry + call EnableLCD + call WaitBGMap + ld a, POKEDEX_SCX + ld [hSCX], a + call Pokedex_ApplyUsualPals + ret + +Pokedex_RedisplayDexEntry: ; 4038d + call Pokedex_DrawDexEntryScreenBG + call Pokedex_GetSelectedMon + farcall 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] ; Index of the topmost visible item in a scrolling menu ??? + ld [wDexArrowCursorPosIndex], a + call Pokedex_DisplayModeDescription + call WaitBGMap + ld a, SCGB_POKEDEX_SEARCH_OPTION + call Pokedex_GetSGBLayout + call Pokedex_IncrementDexPointer + ret + +Pokedex_UpdateOptionScreen: ; 403be (10:43be) + ld a, [wUnlockedUnownMode] + and a + jr nz, .okay + ld de, .NoUnownModeArrowCursorData + jr .okay2 +.okay + ld de, .ArrowCursorData +.okay2 + call Pokedex_MoveArrowCursor + call c, Pokedex_DisplayModeDescription + ld hl, hJoyPressed + ld a, [hl] + and SELECT | B_BUTTON + jr nz, .return_to_main_screen + ld a, [hl] + and A_BUTTON + jr nz, .do_menu_action + ret + +.do_menu_action + ld a, [wDexArrowCursorPosIndex] + ld hl, .MenuActionJumptable + call Pokedex_LoadPointer + jp hl + +.return_to_main_screen + call Pokedex_BlackOutBG + ld a, DEXSTATE_MAIN_SCR + ld [wJumptableIndex], a + ret + +.NoUnownModeArrowCursorData: ; 403f3 + db D_UP | D_DOWN, 3 + dwcoord 2, 4 ; NEW + dwcoord 2, 6 ; OLD + dwcoord 2, 8 ; ABC + +.ArrowCursorData: ; 403fb + db D_UP | D_DOWN, 4 + dwcoord 2, 4 ; NEW + dwcoord 2, 6 ; OLD + dwcoord 2, 8 ; ABC + dwcoord 2, 10 ; UNOWN + +.MenuActionJumptable: ; 40405 (10:4405) + dw .MenuAction_NewMode + dw .MenuAction_OldMode + dw .MenuAction_ABCMode + dw .MenuAction_UnownMode + +.MenuAction_NewMode: ; 4040d (10:440d) + ld b, DEXMODE_NEW + jr .ChangeMode + +.MenuAction_OldMode: ; 40411 (10:4411) + ld b, DEXMODE_OLD + jr .ChangeMode + +.MenuAction_ABCMode: ; 40415 (10:4415) + ld b, DEXMODE_ABC + +.ChangeMode: ; 40417 (10:4417) + ld a, [wCurrentDexMode] + cp b + jr z, .skip_changing_mode ; Skip if new mode is same as current. + + ld a, b + ld [wCurrentDexMode], a + call Pokedex_OrderMonsByMode + call Pokedex_DisplayChangingModesMessage + xor a + ld [wDexListingScrollOffset], a + ld [wDexListingCursor], a + call Pokedex_InitCursorPosition + +.skip_changing_mode + call Pokedex_BlackOutBG + ld a, DEXSTATE_MAIN_SCR + ld [wJumptableIndex], a + ret + +.MenuAction_UnownMode: ; 4043a (10:443a) + call Pokedex_BlackOutBG + ld a, DEXSTATE_UNOWN_MODE + 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 + farcall DoDexSearchSlowpokeFrame + call WaitBGMap + ld a, SCGB_POKEDEX_SEARCH_OPTION + 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, .cancel + ld a, [hl] + and A_BUTTON + jr nz, .do_menu_action + ret + +.do_menu_action + ld a, [wDexArrowCursorPosIndex] + ld hl, .MenuActionJumptable + call Pokedex_LoadPointer + jp hl + +.cancel + call Pokedex_BlackOutBG + ld a, DEXSTATE_MAIN_SCR + ld [wJumptableIndex], a + ret + +.ArrowCursorData: ; 4049e + db D_UP | D_DOWN, 4 + dwcoord 2, 4 ; TYPE 1 + dwcoord 2, 6 ; TYPE 2 + dwcoord 2, 13 ; BEGIN SEARCH + dwcoord 2, 15 ; CANCEL + +.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 + farcall AnimateDexSearchSlowpoke + ld a, [wDexSearchResultCount] + and a + jr nz, .show_search_results + +; No mon with matching types was found. + call Pokedex_OrderMonsByMode + call Pokedex_DisplayTypeNotFoundMessage + 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 [wDexListingScrollOffsetBackup], a + ld a, [wDexListingCursor] + ld [wDexListingCursorBackup], a + ld a, [wPrevDexEntry] + ld [wPrevDexEntryBackup], a + xor a + ld [wDexListingScrollOffset], a + ld [wDexListingCursor], a + call Pokedex_BlackOutBG + ld a, DEXSTATE_SEARCH_RESULTS_SCR + ld [wJumptableIndex], a + ret + +.MenuAction_Cancel: ; 40501 + call Pokedex_BlackOutBG + ld a, DEXSTATE_MAIN_SCR + 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 + farcall DrawPokedexSearchResultsWindow + call Pokedex_PlaceSearchResultsTypeStrings + ld a, 4 + ld [wDexListingHeight], a + call Pokedex_PrintListing + call Pokedex_SetBGMapMode3 + call Pokedex_ResetBGMapMode + call Pokedex_DrawSearchResultsScreenBG + ld a, POKEDEX_SCX + ld [hSCX], a + ld a, $4a + ld [hWX], a + xor a + ld [hWY], a + call WaitBGMap + call Pokedex_ResetBGMapMode + farcall DrawPokedexSearchResultsWindow + call Pokedex_PlaceSearchResultsTypeStrings + call Pokedex_UpdateSearchResultsCursorOAM + ld a, -1 + ld [CurPartySpecies], a + ld a, SCGB_POKEDEX + call Pokedex_GetSGBLayout + call Pokedex_IncrementDexPointer + ret + +Pokedex_UpdateSearchResultsScreen: ; 40562 (10:4562) + ld hl, hJoyPressed + ld a, [hl] + and B_BUTTON + jr nz, .return_to_search_screen + ld a, [hl] + and A_BUTTON + jr nz, .go_to_dex_entry + call Pokedex_ListingHandleDPadInput + ret nc + call Pokedex_UpdateSearchResultsCursorOAM + xor a + ld [hBGMapMode], a + call Pokedex_PrintListing + call Pokedex_SetBGMapMode3 + call Pokedex_ResetBGMapMode + ret + +.go_to_dex_entry + call Pokedex_GetSelectedMon + call Pokedex_CheckSeen + ret z + ld a, DEXSTATE_DEX_ENTRY_SCR + ld [wJumptableIndex], a + ld a, DEXSTATE_SEARCH_RESULTS_SCR + ld [wPrevDexEntryJumptableIndex], a + ret + +.return_to_search_screen + ld a, [wDexListingScrollOffsetBackup] + ld [wDexListingScrollOffset], a + ld a, [wDexListingCursorBackup] + ld [wDexListingCursor], a + ld a, [wPrevDexEntryBackup] + ld [wPrevDexEntry], a + call Pokedex_BlackOutBG + call ClearSprites + call Pokedex_OrderMonsByMode + ld a, DEXSTATE_SEARCH_SCR + ld [wJumptableIndex], a + xor a + ld [hSCX], a + ld a, $a7 + ld [hWX], a + ret + +Pokedex_InitUnownMode: ; 405bd (10:45bd) + call Pokedex_LoadUnownFont + call Pokedex_DrawUnownModeBG + xor a + ld [wDexCurrentUnownIndex], a + call Pokedex_LoadUnownFrontpicTiles + call Pokedex_UnownModePlaceCursor + farcall PrintUnownWord + call WaitBGMap + ld a, SCGB_POKEDEX_UNOWN_MODE + 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 Pokedex_UnownModeHandleDPadInput + ret + +.a_b + call Pokedex_BlackOutBG + ld a, DEXSTATE_OPTION_SCR + ld [wJumptableIndex], a + call DelayFrame + call Pokedex_CheckSGB + jr nz, .decompress + farcall LoadSGBPokedexGFX2 + jr .done + +.decompress + ld hl, PokedexLZ + ld de, vTiles2 tile $31 + lb bc, BANK(PokedexLZ), 58 + call DecompressRequest2bpp + +.done + ret + +Pokedex_UnownModeHandleDPadInput: ; 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, [wDexUnownCount] + ld e, a + ld hl, wDexCurrentUnownIndex + ld a, [hl] + inc a + cp e + ret nc + ld a, [hl] + inc [hl] + jr .update + +.left + ld hl, wDexCurrentUnownIndex + ld a, [hl] + and a + ret z + ld a, [hl] + dec [hl] + +.update + push af + xor a + ld [hBGMapMode], a + pop af + call Pokedex_UnownModeEraseCursor + call Pokedex_LoadUnownFrontpicTiles + call Pokedex_UnownModePlaceCursor + farcall PrintUnownWord + ld a, $1 + ld [hBGMapMode], a + call DelayFrame + call DelayFrame + ret + +Pokedex_UnownModeEraseCursor: ; 40654 (10:4654) + ld c, " " + jr Pokedex_UnownModeUpdateCursorGfx + +Pokedex_UnownModePlaceCursor: ; 40658 (10:4658) + ld a, [wDexCurrentUnownIndex] + ld c, $5a ; diamond cursor + +Pokedex_UnownModeUpdateCursorGfx: ; 4065d (10:465d) + ld e, a + ld d, 0 + ld hl, UnownModeLetterAndCursorCoords + 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_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. + push de + ld de, SCREEN_WIDTH +.loop + ld [hl], a + add hl, de + dec b + jr nz, .loop + pop de + ret + + +Pokedex_DrawMainScreenBG: ; 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 + lb bc, 6, 7 + 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_FillColumn + hlcoord 8, 10 + ld b, 6 + ld a, $5a + call Pokedex_FillColumn + 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", -1 +String_OWN: ; 407e6 + db "OWN", -1 +String_SELECT_OPTION: ; 407ea + db $3b, $48, $49, $4a, $44, $45, $46, $47 ; SELECT > OPTION + ; fallthrough +String_START_SEARCH: ; 407f2 + db $3c, $3b, $41, $42, $43, $4b, $4c, $4d, $4e, $3c, -1 ; START > SEARCH + +Pokedex_DrawDexEntryScreenBG: ; 407fd + call Pokedex_FillBackgroundColor2 + hlcoord 0, 0 + lb bc, 15, 18 + call Pokedex_PlaceBorder + hlcoord 19, 0 + ld [hl], $34 + hlcoord 19, 1 + ld a, " " + ld b, 15 + call Pokedex_FillColumn + ld [hl], $39 + hlcoord 1, 10 + ld bc, 19 + ld a, $61 + call ByteFill + hlcoord 1, 17 + ld bc, 18 + ld a, " " + 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, -1 ; No. +.Height: ; 40852 + db "HT ?", $5e, "??", $5f, -1 ; HT ?'??" +.Weight: ; 4085c + db "WT ???lb", -1 ; WT ???lb +.MenuItems: ; 40867 + db $3b, " PAGE AREA CRY PRNT", -1 + +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, -1 + +.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, -1 + +.TypeLeftRightArrows: ; 40935 + db $3d, " ", $3e, -1 + +.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_FillColumn + 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 + +Pokedex_DrawUnownModeBG: ; 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, UnownModeLetterAndCursorCoords +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 [wDexUnownCount], a + ret + +UnownModeLetterAndCursorCoords: ; 40a3e +; entries correspond to Unown forms +; letter, cursor + dwcoord 4,11, 3,11 ; A + dwcoord 4,10, 3,10 ; B + dwcoord 4, 9, 3, 9 ; C + dwcoord 4, 8, 3, 8 ; D + dwcoord 4, 7, 3, 7 ; E + dwcoord 4, 6, 3, 6 ; F + dwcoord 4, 5, 3, 5 ; G + dwcoord 4, 4, 3, 4 ; H + dwcoord 4, 3, 3, 2 ; I + dwcoord 5, 3, 5, 2 ; J + dwcoord 6, 3, 6, 2 ; K + dwcoord 7, 3, 7, 2 ; L + dwcoord 8, 3, 8, 2 ; M + dwcoord 9, 3, 9, 2 ; N + dwcoord 10, 3, 10, 2 ; O + dwcoord 11, 3, 11, 2 ; P + dwcoord 12, 3, 12, 2 ; Q + dwcoord 13, 3, 13, 2 ; R + dwcoord 14, 3, 15, 2 ; S + dwcoord 14, 4, 15, 4 ; T + dwcoord 14, 5, 15, 5 ; U + dwcoord 14, 6, 15, 6 ; V + dwcoord 14, 7, 15, 7 ; W + dwcoord 14, 8, 15, 8 ; X + dwcoord 14, 9, 15, 9 ; Y + dwcoord 14,10, 15,10 ; Z + +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 wPokedexOrder + [wDexListingScrollOffset] + ld a, [wDexListingScrollOffset] + ld e, a + ld d, $0 + ld hl, wPokedexOrder + 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, wPokedexOrder + 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_OrderMonsByMode: ; 40bdc + ld hl, wPokedexOrder + ld bc, wPokedexOrderEnd - wPokedexOrder + 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, wPokedexOrder + 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, wPokedexOrder + 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, wPokedexOrder + 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, wPokedexOrder + 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 + + +INCLUDE "data/pokemon/dex_order_alpha.asm" + +INCLUDE "data/pokemon/dex_order_new.asm" + + +Pokedex_DisplayModeDescription: ; 40e5b + xor a + ld [hBGMapMode], a + hlcoord 0, 12 + lb bc, 4, 18 + call Pokedex_PlaceBorder + ld a, [wDexArrowCursorPosIndex] + ld hl, .Modes + call Pokedex_LoadPointer + ld e, l + ld d, h + hlcoord 1, 14 + call PlaceString + ld a, $1 + ld [hBGMapMode], a + ret + +.Modes: ; 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.@" + +Pokedex_DisplayChangingModesMessage: ; 40f08 (10:4f08) + xor a + ld [hBGMapMode], a + hlcoord 0, 12 + lb bc, 4, 18 + 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, .no_change + ld hl, hJoyLast + ld a, [hl] + and D_LEFT + jr nz, Pokedex_PrevSearchMonType + ld a, [hl] + and D_RIGHT + jr nz, Pokedex_NextSearchMonType +.no_change + and a + ret + +Pokedex_PrevSearchMonType: ; 40f65 + ld a, [wDexArrowCursorPosIndex] + and a + jr nz, .type2 + + ld hl, wDexSearchMonType1 + ld a, [hl] + cp 1 + jr z, .wrap_around + dec [hl] + jr .done + +.type2 + ld hl, wDexSearchMonType2 + ld a, [hl] + and a + jr z, .wrap_around + dec [hl] + jr .done + +.wrap_around + ld [hl], NUM_TYPES - 1 + +.done + scf + ret + +Pokedex_NextSearchMonType: ; 40f84 + ld a, [wDexArrowCursorPosIndex] + and a + jr nz, .type2 + + ld hl, wDexSearchMonType1 + ld a, [hl] + cp NUM_TYPES - 1 + jr nc, .type1_wrap_around + inc [hl] + jr .done +.type1_wrap_around + ld [hl], 1 + jr .done + +.type2 + ld hl, wDexSearchMonType2 + ld a, [hl] + cp NUM_TYPES - 1 + jr nc, .type2_wrap_around + inc [hl] + jr .done +.type2_wrap_around + ld [hl], 0 + +.done + 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, PokedexTypeSearchStrings +rept 9 + add hl, de +endr + ld e, l + ld d, h + pop hl + call PlaceString + ret + +INCLUDE "data/types/search_strings.asm" + +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, PokedexTypeSearchConversionTable + add hl, de + ld a, [hl] + ld [wDexConvertedMonType], a + ld hl, wPokedexOrder + ld de, wPokedexOrder + 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 + +INCLUDE "data/types/search_types.asm" + +Pokedex_DisplayTypeNotFoundMessage: ; 41107 + xor a + ld [hBGMapMode], a + hlcoord 0, 12 + lb bc, 4, 18 + call Pokedex_PlaceBorder + ld de, .TypeNotFound + hlcoord 1, 14 + call PlaceString + ld a, $1 + ld [hBGMapMode], a + ld c, $80 + call DelayFrames + ret + +.TypeNotFound: ; 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 + dsprite 3, 0, 9, -1, $30, 7 + dsprite 2, 0, 9, -1, $31, 7 + dsprite 2, 0, 10, -1, $32, 7 + dsprite 2, 0, 11, -1, $32, 7 + dsprite 2, 0, 12, -1, $32, 7 + dsprite 2, 0, 13, -1, $33, 7 + dsprite 2, 0, 16, -2, $33, 7 | X_FLIP + dsprite 2, 0, 17, -2, $32, 7 | X_FLIP + dsprite 2, 0, 18, -2, $32, 7 | X_FLIP + dsprite 2, 0, 19, -2, $32, 7 | X_FLIP + dsprite 2, 0, 20, -2, $31, 7 | X_FLIP + dsprite 3, 0, 20, -2, $30, 7 | X_FLIP + dsprite 4, 0, 9, -1, $30, 7 | Y_FLIP + dsprite 5, 0, 9, -1, $31, 7 | Y_FLIP + dsprite 5, 0, 10, -1, $32, 7 | Y_FLIP + dsprite 5, 0, 11, -1, $32, 7 | Y_FLIP + dsprite 5, 0, 12, -1, $32, 7 | Y_FLIP + dsprite 5, 0, 13, -1, $33, 7 | Y_FLIP + dsprite 5, 0, 16, -2, $33, 7 | X_FLIP | Y_FLIP + dsprite 5, 0, 17, -2, $32, 7 | X_FLIP | Y_FLIP + dsprite 5, 0, 18, -2, $32, 7 | X_FLIP | Y_FLIP + dsprite 5, 0, 19, -2, $32, 7 | X_FLIP | Y_FLIP + dsprite 5, 0, 20, -2, $31, 7 | X_FLIP | Y_FLIP + dsprite 4, 0, 20, -2, $30, 7 | X_FLIP | Y_FLIP + db -1 + +.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. + dsprite 3, 0, 9, -1, $30, 7 + dsprite 2, 0, 9, -1, $34, 7 + dsprite 2, 0, 10, -1, $35, 7 + dsprite 2, 0, 11, -1, $35, 7 + dsprite 2, 0, 12, -1, $35, 7 + dsprite 2, 0, 13, -1, $36, 7 + dsprite 2, 0, 16, -2, $36, 7 | X_FLIP + dsprite 2, 0, 17, -2, $35, 7 | X_FLIP + dsprite 2, 0, 18, -2, $35, 7 | X_FLIP + dsprite 2, 0, 19, -2, $35, 7 | X_FLIP + dsprite 2, 0, 20, -2, $34, 7 | X_FLIP + dsprite 3, 0, 20, -2, $30, 7 | X_FLIP + dsprite 4, 0, 9, -1, $30, 7 | Y_FLIP + dsprite 5, 0, 9, -1, $31, 7 | Y_FLIP + dsprite 5, 0, 10, -1, $32, 7 | Y_FLIP + dsprite 5, 0, 11, -1, $32, 7 | Y_FLIP + dsprite 5, 0, 12, -1, $32, 7 | Y_FLIP + dsprite 5, 0, 13, -1, $33, 7 | Y_FLIP + dsprite 5, 0, 16, -2, $33, 7 | X_FLIP | Y_FLIP + dsprite 5, 0, 17, -2, $32, 7 | X_FLIP | Y_FLIP + dsprite 5, 0, 18, -2, $32, 7 | X_FLIP | Y_FLIP + dsprite 5, 0, 19, -2, $32, 7 | X_FLIP | Y_FLIP + dsprite 5, 0, 20, -2, $31, 7 | X_FLIP | Y_FLIP + dsprite 4, 0, 20, -2, $30, 7 | X_FLIP | Y_FLIP + db -1 + +Pokedex_PutNewModeABCModeCursorOAM: ; 41229 (10:5229) + ld hl, .CursorOAM + call Pokedex_LoadCursorOAM + ret + +.CursorOAM: ; 41230 + dsprite 3, 3, 9, -1, $30, 7 + dsprite 2, 3, 9, -1, $31, 7 + dsprite 2, 3, 10, -1, $32, 7 + dsprite 2, 3, 11, -1, $32, 7 + dsprite 2, 3, 12, -1, $33, 7 + dsprite 2, 3, 16, 0, $33, 7 | X_FLIP + dsprite 2, 3, 17, 0, $32, 7 | X_FLIP + dsprite 2, 3, 18, 0, $32, 7 | X_FLIP + dsprite 2, 3, 19, 0, $31, 7 | X_FLIP + dsprite 3, 3, 19, 0, $30, 7 | X_FLIP + dsprite 4, 3, 9, -1, $30, 7 | Y_FLIP + dsprite 5, 3, 9, -1, $31, 7 | Y_FLIP + dsprite 5, 3, 10, -1, $32, 7 | Y_FLIP + dsprite 5, 3, 11, -1, $32, 7 | Y_FLIP + dsprite 5, 3, 12, -1, $33, 7 | Y_FLIP + dsprite 5, 3, 16, 0, $33, 7 | X_FLIP | Y_FLIP + dsprite 5, 3, 17, 0, $32, 7 | X_FLIP | Y_FLIP + dsprite 5, 3, 18, 0, $32, 7 | X_FLIP | Y_FLIP + dsprite 5, 3, 19, 0, $31, 7 | X_FLIP | Y_FLIP + dsprite 4, 3, 19, 0, $30, 7 | X_FLIP | Y_FLIP + db -1 + +Pokedex_UpdateSearchResultsCursorOAM: ; 41281 (10:5281) + ld a, [wCurrentDexMode] + cp DEXMODE_OLD + jp z, Pokedex_PutOldModeCursorOAM + ld hl, .CursorOAM + call Pokedex_LoadCursorOAM + ret + +.CursorOAM: ; 41290 + dsprite 3, 3, 9, -1, $30, 7 + dsprite 2, 3, 9, -1, $31, 7 + dsprite 2, 3, 10, -1, $32, 7 + dsprite 2, 3, 11, -1, $32, 7 + dsprite 2, 3, 12, -1, $32, 7 + dsprite 2, 3, 13, -1, $33, 7 + dsprite 2, 3, 16, -2, $33, 7 | X_FLIP + dsprite 2, 3, 17, -2, $32, 7 | X_FLIP + dsprite 2, 3, 18, -2, $32, 7 | X_FLIP + dsprite 2, 3, 19, -2, $32, 7 | X_FLIP + dsprite 2, 3, 20, -2, $31, 7 | X_FLIP + dsprite 3, 3, 20, -2, $30, 7 | X_FLIP + dsprite 4, 3, 9, -1, $30, 7 | Y_FLIP + dsprite 5, 3, 9, -1, $31, 7 | Y_FLIP + dsprite 5, 3, 10, -1, $32, 7 | Y_FLIP + dsprite 5, 3, 11, -1, $32, 7 | Y_FLIP + dsprite 5, 3, 12, -1, $32, 7 | Y_FLIP + dsprite 5, 3, 13, -1, $33, 7 | Y_FLIP + dsprite 5, 3, 16, -2, $33, 7 | X_FLIP | Y_FLIP + dsprite 5, 3, 17, -2, $32, 7 | X_FLIP | Y_FLIP + dsprite 5, 3, 18, -2, $32, 7 | X_FLIP | Y_FLIP + dsprite 5, 3, 19, -2, $32, 7 | X_FLIP | Y_FLIP + dsprite 5, 3, 20, -2, $31, 7 | X_FLIP | Y_FLIP + dsprite 4, 3, 20, -2, $30, 7 | X_FLIP | Y_FLIP + db -1 + +Pokedex_LoadCursorOAM: ; 412f1 (10:52f1) + ld de, Sprite01 +.loop + ld a, [hl] + cp -1 + ret z + ld a, [wDexListingCursor] + and $7 + swap a + add [hl] ; y + inc hl + ld [de], a + inc de + ld a, [hli] ; x + ld [de], a + inc de + ld a, [hli] ; tile id + ld [de], a + inc de + ld a, [hli] ; attributes + 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, .move_left_or_up + ld a, [hl] + and D_RIGHT | D_DOWN + and b + jr nz, .move_right_or_down + ld a, [hl] + and SELECT + and b + jr nz, .select + call Pokedex_ArrowCursorDelay + jr c, .no_action + ld hl, hJoyLast + ld a, [hl] + and D_LEFT | D_UP + and b + jr nz, .move_left_or_up + ld a, [hl] + and D_RIGHT | D_DOWN + and b + jr nz, .move_right_or_down + jr .no_action + +.move_left_or_up + ld a, [wDexArrowCursorPosIndex] + and a + jr z, .no_action + call Pokedex_GetArrowCursorPos + ld [hl], " " + ld hl, wDexArrowCursorPosIndex + dec [hl] + jr .update_cursor_pos + +.move_right_or_down + ld a, [wDexArrowCursorPosIndex] + cp c + jr nc, .no_action + call Pokedex_GetArrowCursorPos + ld [hl], " " + ld hl, wDexArrowCursorPosIndex + inc [hl] + +.update_cursor_pos + call Pokedex_GetArrowCursorPos + ld [hl], "▶" + ld a, 12 + ld [wDexArrowCursorDelayCounter], a + xor a + ld [wDexArrowCursorBlinkCounter], a + scf + ret + +.no_action + 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 .update_cursor_pos + +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, BANK(wBGPals1) + ld [rSVBK], a + ld hl, wBGPals1 + ld bc, 8 palettes + xor a + call ByteFill + pop af + ld [rSVBK], a + +Pokedex_ApplyPrintPals: ; 41415 + ld a, $ff + call DmgToCgbBGPals + ld a, $ff + call DmgToCgbObjPal0 + call DelayFrame + ret + +Pokedex_GetSGBLayout: ; 41423 + ld b, a + call GetSGBLayout + +Pokedex_ApplyUsualPals: ; 41427 +; This applies the palettes used for most Pokédex screens. + ld a, $e4 + call DmgToCgbBGPals + ld a, $e0 + call DmgToCgbObjPal0 + ret + + +Pokedex_LoadPointer: ; 41432 + ld e, a + ld d, 0 + add hl, de + add hl, de + 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 GetMonFrontpic + ret + +.QuestionMark: + ld a, BANK(sScratch) + call GetSRAMBank + farcall 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 %11111000 + srl a + srl a + srl a + ld e, 0 + ld d, a + ld a, [wd265] + dec a + and %111 + 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 + farcall 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 + +Pokedex_LoadUnownFrontpicTiles: ; 41a58 (10:5a58) + ld a, [UnownLetter] + push af + ld a, [wDexCurrentUnownIndex] + 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 GetMonFrontpic + pop af + ld [UnownLetter], a + ret + +_NewPokedexEntry: ; 41a7f + xor a + ld [hBGMapMode], a + farcall DrawDexEntryScreenRightEdge + 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 + farcall DisplayDexEntry + call EnableLCD + call WaitBGMap + call GetBaseData + ld de, vTiles2 + predef GetMonFrontpic + ld a, SCGB_POKEDEX + call Pokedex_GetSGBLayout + ld a, [CurPartySpecies] + call PlayMonCry + 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 diff --git a/engine/pokedex/pokedex_2.asm b/engine/pokedex/pokedex_2.asm new file mode 100644 index 000000000..4dd608ac0 --- /dev/null +++ b/engine/pokedex/pokedex_2.asm @@ -0,0 +1,280 @@ +AnimateDexSearchSlowpoke: ; 441cf + ld hl, .FrameIDs + ld b, 25 +.loop + ld a, [hli] + + ; Wrap around + cp $fe + jr nz, .ok + ld hl, .FrameIDs + ld a, [hli] +.ok + + ld [wDexSearchSlowpokeFrame], a + ld a, [hli] + ld c, a + push bc + push hl + call DoDexSearchSlowpokeFrame + pop hl + pop bc + call DelayFrames + dec b + jr nz, .loop + xor a + ld [wDexSearchSlowpokeFrame], a + call DoDexSearchSlowpokeFrame + ld c, 32 + call DelayFrames + ret + +.FrameIDs: ; 441fc + ; frame ID, duration + db 0, 7 + db 1, 7 + db 2, 7 + db 3, 7 + db 4, 7 + db -2 + +DoDexSearchSlowpokeFrame: ; 44207 + ld a, [wDexSearchSlowpokeFrame] + ld hl, .SlowpokeSpriteData + ld de, Sprite01 +.loop + ld a, [hli] + cp -1 + ret z + ld [de], a ; y + inc de + ld a, [hli] + ld [de], a ; x + inc de + ld a, [wDexSearchSlowpokeFrame] + ld b, a + add a + add b + add [hl] + inc hl + ld [de], a ; tile id + inc de + ld a, [hli] + ld [de], a ; attributes + inc de + jr .loop + +.SlowpokeSpriteData: ; 44228 + dsprite 11, 0, 9, 0, $00, 0 + dsprite 11, 0, 10, 0, $01, 0 + dsprite 11, 0, 11, 0, $02, 0 + dsprite 12, 0, 9, 0, $10, 0 + dsprite 12, 0, 10, 0, $11, 0 + dsprite 12, 0, 11, 0, $12, 0 + dsprite 13, 0, 9, 0, $20, 0 + dsprite 13, 0, 10, 0, $21, 0 + dsprite 13, 0, 11, 0, $22, 0 + db -1 + +DisplayDexEntry: ; 4424d + call GetPokemonName + hlcoord 9, 3 + call PlaceString ; mon species + ld a, [wd265] + ld b, a + call GetDexEntryPointer + ld a, b + push af + hlcoord 9, 5 + call FarString ; dex species + ld h, b + ld l, c + push de +; Print dex number + hlcoord 2, 8 + ld a, $5c ; No + ld [hli], a + ld a, $5d ; . + ld [hli], a + ld de, wd265 + lb bc, PRINTNUM_LEADINGZEROS | 1, 3 + call PrintNum +; Check to see if we caught it. Get out of here if we haven't. + ld a, [wd265] + dec a + call CheckCaughtMon + pop hl + pop bc + ret z +; Get the height of the Pokemon. + ld a, [CurPartySpecies] + ld [CurSpecies], a + inc hl + ld a, b + push af + push hl + call GetFarHalfword + ld d, l + ld e, h + pop hl + inc hl + inc hl + ld a, d + or e + jr z, .skip_height + push hl + push de + ld hl, sp+$0 + ld d, h + ld e, l + hlcoord 12, 7 + lb bc, 2, PRINTNUM_MONEY | 4 + call PrintNum + hlcoord 14, 7 + ld [hl], $5e ; ft symbol + pop af + pop hl + +.skip_height + pop af + push af + inc hl + push hl + dec hl + call GetFarHalfword + ld d, l + ld e, h + ld a, e + or d + jr z, .skip_weight + push de + ld hl, sp+$0 + ld d, h + ld e, l + hlcoord 11, 9 + lb bc, 2, PRINTNUM_RIGHTALIGN | 5 + call PrintNum + pop de + +.skip_weight +; Page 1 + lb bc, 5, SCREEN_WIDTH - 2 + hlcoord 2, 11 + call ClearBox + hlcoord 1, 10 + ld bc, SCREEN_WIDTH - 1 + ld a, $61 ; horizontal divider + call ByteFill + ; page number + hlcoord 1, 9 + ld [hl], $55 + inc hl + ld [hl], $55 + hlcoord 1, 10 + ld [hl], $56 ; P. + inc hl + ld [hl], $57 ; 1 + pop de + inc de + pop af + hlcoord 2, 11 + push af + call FarString + pop bc + ld a, [wPokedexStatus] + or a ; check for page 2 + ret z + +; Page 2 + push bc + push de + lb bc, 5, SCREEN_WIDTH - 2 + hlcoord 2, 11 + call ClearBox + hlcoord 1, 10 + ld bc, SCREEN_WIDTH - 1 + ld a, $61 + call ByteFill + ; page number + hlcoord 1, 9 + ld [hl], $55 + inc hl + ld [hl], $55 + hlcoord 1, 10 + ld [hl], $56 ; P. + inc hl + ld [hl], $58 ; 2 + pop de + inc de + pop af + hlcoord 2, 11 + call FarString + ret + +String_44331: ; 44331 + db "#@" + +GetDexEntryPointer: ; 44333 +; return dex entry pointer b:de + push hl + ld hl, PokedexDataPointerTable + ld a, b + dec a + ld d, 0 + ld e, a + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + push de + rlca + rlca + maskbits NUM_DEX_ENTRY_BANKS + ld hl, .PokedexEntryBanks + ld d, 0 + ld e, a + add hl, de + ld b, [hl] + pop de + pop hl + ret + +.PokedexEntryBanks: ; 44351 + db BANK(PokedexEntries1) + db BANK(PokedexEntries2) + db BANK(PokedexEntries3) + db BANK(PokedexEntries4) + +GetDexEntryPagePointer: ; 44355 + call GetDexEntryPointer ; b:de + push hl + ld h, d + ld l, e +; skip species name +.loop1 + ld a, b + call GetFarByte + inc hl + cp "@" + jr nz, .loop1 +; skip height and weight +rept 4 + inc hl +endr +; if c != 1: skip entry + dec c + jr z, .done +; skip entry +.loop2 + ld a, b + call GetFarByte + inc hl + cp "@" + jr nz, .loop2 + +.done + ld d, h + ld e, l + pop hl + ret diff --git a/engine/pokedex/pokedex_3.asm b/engine/pokedex/pokedex_3.asm new file mode 100644 index 000000000..dc52f83d3 --- /dev/null +++ b/engine/pokedex/pokedex_3.asm @@ -0,0 +1,162 @@ +LoadSGBPokedexGFX: ; 1ddf1c + ld hl, SGBPokedexGFX_LZ + ld de, vTiles2 tile $31 + call Decompress + ret + +LoadSGBPokedexGFX2: ; 1ddf26 (77:5f26) + ld hl, SGBPokedexGFX_LZ + ld de, vTiles2 tile $31 + lb bc, BANK(SGBPokedexGFX_LZ), 58 + call DecompressRequest2bpp + ret + +SGBPokedexGFX_LZ: ; 1ddf33 +INCBIN "gfx/pokedex/sgb.2bpp.lz" + +LoadQuestionMarkPic: ; 1de0d7 + ld hl, .QuestionMarkLZ + ld de, sScratch + call Decompress + ret + +.QuestionMarkLZ: ; 1de0e1 +INCBIN "gfx/pokemon/questionmark/front.2bpp.lz" + +DrawPokedexListWindow: ; 1de171 (77:6171) + ld a, $32 + hlcoord 0, 17 + ld bc, 12 + call ByteFill + hlcoord 0, 1 + lb bc, 15, 11 + call ClearBox + ld a, $34 + hlcoord 0, 0 + ld bc, 11 + call ByteFill + ld a, $39 + hlcoord 0, 16 + ld bc, 11 + call ByteFill + hlcoord 5, 0 + ld [hl], $3f + hlcoord 5, 16 + ld [hl], $40 + ld a, [wCurrentDexMode] + cp DEXMODE_OLD + jr z, .OldMode +; scroll bar + hlcoord 11, 0 + ld [hl], $50 + ld a, $51 + hlcoord 11, 1 + ld b, SCREEN_HEIGHT - 3 + call Bank77_FillColumn + ld [hl], $52 + jr .Done + +.OldMode: +; no scroll bar + hlcoord 11, 0 + ld [hl], $66 + ld a, $67 + hlcoord 11, 1 + ld b, SCREEN_HEIGHT - 3 + call Bank77_FillColumn + ld [hl], $68 +.Done: + ret + +DrawPokedexSearchResultsWindow: ; 1de1d1 (77:61d1) + ld a, $34 + hlcoord 0, 0 + ld bc, 11 + call ByteFill + ld a, $39 + hlcoord 0, 10 + ld bc, 11 + call ByteFill + hlcoord 5, 0 + ld [hl], $3f + hlcoord 5, 10 + ld [hl], $40 + hlcoord 11, 0 + ld [hl], $66 + ld a, $67 + hlcoord 11, 1 + ld b, SCREEN_HEIGHT / 2 + call Bank77_FillColumn + ld [hl], $68 + ld a, $34 + hlcoord 0, 11 + ld bc, 11 + call ByteFill + ld a, $39 + hlcoord 0, 17 + ld bc, 11 + call ByteFill + hlcoord 11, 11 + ld [hl], $66 + ld a, $67 + hlcoord 11, 12 + ld b, 5 + call Bank77_FillColumn + ld [hl], $68 + hlcoord 0, 12 + lb bc, 5, 11 + call ClearBox + ld de, .esults_D + hlcoord 0, 12 + call PlaceString + ret + +.esults_D ; 1de23c +; (SEARCH R) + db "ESULTS" + next "" +; (### FOUN) + next "D!@" + +DrawDexEntryScreenRightEdge: ; 1de247 + ld a, [hBGMapAddress] + ld l, a + ld a, [hBGMapAddress + 1] + ld h, a + push hl + inc hl + ld a, l + ld [hBGMapAddress], a + ld a, h + ld [hBGMapAddress + 1], a + hlcoord 19, 0 + ld [hl], $66 + hlcoord 19, 1 + ld a, $67 + ld b, 15 + call Bank77_FillColumn + ld [hl], $68 + hlcoord 19, 17 + ld [hl], $3c + xor a + ld b, SCREEN_HEIGHT + hlcoord 19, 0, AttrMap + call Bank77_FillColumn + call WaitBGMap2 + pop hl + ld a, l + ld [hBGMapAddress], a + ld a, h + ld [hBGMapAddress + 1], a + ret + +Bank77_FillColumn: ; 1de27f + push de + ld de, SCREEN_WIDTH +.loop + ld [hl], a + add hl, de + dec b + jr nz, .loop + pop de + ret diff --git a/engine/pokedex/unown_dex.asm b/engine/pokedex/unown_dex.asm new file mode 100755 index 000000000..dc6db9dc6 --- /dev/null +++ b/engine/pokedex/unown_dex.asm @@ -0,0 +1,52 @@ +UpdateUnownDex: ; fba18 + ld a, [UnownLetter] + ld c, a + ld b, NUM_UNOWN + ld hl, UnownDex +.loop + ld a, [hli] + and a + jr z, .done + cp c + ret z + dec b + jr nz, .loop + ret + +.done + dec hl + ld [hl], c + ret +; fba2e + +PrintUnownWord: ; fba2e (3e:7a2e) + hlcoord 4, 15 + ld bc, 12 + ld a, " " + call ByteFill + ld a, [wDexCurrentUnownIndex] + ld e, a + ld d, 0 + ld hl, UnownDex + add hl, de + ld a, [hl] + ld e, a + ld d, 0 + ld hl, UnownWords + add hl, de + add hl, de + ld a, [hli] + ld e, a + ld d, [hl] + hlcoord 4, 15 +.loop + ld a, [de] + cp -1 + ret z + inc de + ld [hli], a + jr .loop +; fba5a (3e:7a5a) + + +INCLUDE "data/unown_words.asm" diff --git a/engine/pokedex_2.asm b/engine/pokedex_2.asm deleted file mode 100644 index 4dd608ac0..000000000 --- a/engine/pokedex_2.asm +++ /dev/null @@ -1,280 +0,0 @@ -AnimateDexSearchSlowpoke: ; 441cf - ld hl, .FrameIDs - ld b, 25 -.loop - ld a, [hli] - - ; Wrap around - cp $fe - jr nz, .ok - ld hl, .FrameIDs - ld a, [hli] -.ok - - ld [wDexSearchSlowpokeFrame], a - ld a, [hli] - ld c, a - push bc - push hl - call DoDexSearchSlowpokeFrame - pop hl - pop bc - call DelayFrames - dec b - jr nz, .loop - xor a - ld [wDexSearchSlowpokeFrame], a - call DoDexSearchSlowpokeFrame - ld c, 32 - call DelayFrames - ret - -.FrameIDs: ; 441fc - ; frame ID, duration - db 0, 7 - db 1, 7 - db 2, 7 - db 3, 7 - db 4, 7 - db -2 - -DoDexSearchSlowpokeFrame: ; 44207 - ld a, [wDexSearchSlowpokeFrame] - ld hl, .SlowpokeSpriteData - ld de, Sprite01 -.loop - ld a, [hli] - cp -1 - ret z - ld [de], a ; y - inc de - ld a, [hli] - ld [de], a ; x - inc de - ld a, [wDexSearchSlowpokeFrame] - ld b, a - add a - add b - add [hl] - inc hl - ld [de], a ; tile id - inc de - ld a, [hli] - ld [de], a ; attributes - inc de - jr .loop - -.SlowpokeSpriteData: ; 44228 - dsprite 11, 0, 9, 0, $00, 0 - dsprite 11, 0, 10, 0, $01, 0 - dsprite 11, 0, 11, 0, $02, 0 - dsprite 12, 0, 9, 0, $10, 0 - dsprite 12, 0, 10, 0, $11, 0 - dsprite 12, 0, 11, 0, $12, 0 - dsprite 13, 0, 9, 0, $20, 0 - dsprite 13, 0, 10, 0, $21, 0 - dsprite 13, 0, 11, 0, $22, 0 - db -1 - -DisplayDexEntry: ; 4424d - call GetPokemonName - hlcoord 9, 3 - call PlaceString ; mon species - ld a, [wd265] - ld b, a - call GetDexEntryPointer - ld a, b - push af - hlcoord 9, 5 - call FarString ; dex species - ld h, b - ld l, c - push de -; Print dex number - hlcoord 2, 8 - ld a, $5c ; No - ld [hli], a - ld a, $5d ; . - ld [hli], a - ld de, wd265 - lb bc, PRINTNUM_LEADINGZEROS | 1, 3 - call PrintNum -; Check to see if we caught it. Get out of here if we haven't. - ld a, [wd265] - dec a - call CheckCaughtMon - pop hl - pop bc - ret z -; Get the height of the Pokemon. - ld a, [CurPartySpecies] - ld [CurSpecies], a - inc hl - ld a, b - push af - push hl - call GetFarHalfword - ld d, l - ld e, h - pop hl - inc hl - inc hl - ld a, d - or e - jr z, .skip_height - push hl - push de - ld hl, sp+$0 - ld d, h - ld e, l - hlcoord 12, 7 - lb bc, 2, PRINTNUM_MONEY | 4 - call PrintNum - hlcoord 14, 7 - ld [hl], $5e ; ft symbol - pop af - pop hl - -.skip_height - pop af - push af - inc hl - push hl - dec hl - call GetFarHalfword - ld d, l - ld e, h - ld a, e - or d - jr z, .skip_weight - push de - ld hl, sp+$0 - ld d, h - ld e, l - hlcoord 11, 9 - lb bc, 2, PRINTNUM_RIGHTALIGN | 5 - call PrintNum - pop de - -.skip_weight -; Page 1 - lb bc, 5, SCREEN_WIDTH - 2 - hlcoord 2, 11 - call ClearBox - hlcoord 1, 10 - ld bc, SCREEN_WIDTH - 1 - ld a, $61 ; horizontal divider - call ByteFill - ; page number - hlcoord 1, 9 - ld [hl], $55 - inc hl - ld [hl], $55 - hlcoord 1, 10 - ld [hl], $56 ; P. - inc hl - ld [hl], $57 ; 1 - pop de - inc de - pop af - hlcoord 2, 11 - push af - call FarString - pop bc - ld a, [wPokedexStatus] - or a ; check for page 2 - ret z - -; Page 2 - push bc - push de - lb bc, 5, SCREEN_WIDTH - 2 - hlcoord 2, 11 - call ClearBox - hlcoord 1, 10 - ld bc, SCREEN_WIDTH - 1 - ld a, $61 - call ByteFill - ; page number - hlcoord 1, 9 - ld [hl], $55 - inc hl - ld [hl], $55 - hlcoord 1, 10 - ld [hl], $56 ; P. - inc hl - ld [hl], $58 ; 2 - pop de - inc de - pop af - hlcoord 2, 11 - call FarString - ret - -String_44331: ; 44331 - db "#@" - -GetDexEntryPointer: ; 44333 -; return dex entry pointer b:de - push hl - ld hl, PokedexDataPointerTable - ld a, b - dec a - ld d, 0 - ld e, a - add hl, de - add hl, de - ld e, [hl] - inc hl - ld d, [hl] - push de - rlca - rlca - maskbits NUM_DEX_ENTRY_BANKS - ld hl, .PokedexEntryBanks - ld d, 0 - ld e, a - add hl, de - ld b, [hl] - pop de - pop hl - ret - -.PokedexEntryBanks: ; 44351 - db BANK(PokedexEntries1) - db BANK(PokedexEntries2) - db BANK(PokedexEntries3) - db BANK(PokedexEntries4) - -GetDexEntryPagePointer: ; 44355 - call GetDexEntryPointer ; b:de - push hl - ld h, d - ld l, e -; skip species name -.loop1 - ld a, b - call GetFarByte - inc hl - cp "@" - jr nz, .loop1 -; skip height and weight -rept 4 - inc hl -endr -; if c != 1: skip entry - dec c - jr z, .done -; skip entry -.loop2 - ld a, b - call GetFarByte - inc hl - cp "@" - jr nz, .loop2 - -.done - ld d, h - ld e, l - pop hl - ret diff --git a/engine/pokedex_3.asm b/engine/pokedex_3.asm deleted file mode 100644 index dc52f83d3..000000000 --- a/engine/pokedex_3.asm +++ /dev/null @@ -1,162 +0,0 @@ -LoadSGBPokedexGFX: ; 1ddf1c - ld hl, SGBPokedexGFX_LZ - ld de, vTiles2 tile $31 - call Decompress - ret - -LoadSGBPokedexGFX2: ; 1ddf26 (77:5f26) - ld hl, SGBPokedexGFX_LZ - ld de, vTiles2 tile $31 - lb bc, BANK(SGBPokedexGFX_LZ), 58 - call DecompressRequest2bpp - ret - -SGBPokedexGFX_LZ: ; 1ddf33 -INCBIN "gfx/pokedex/sgb.2bpp.lz" - -LoadQuestionMarkPic: ; 1de0d7 - ld hl, .QuestionMarkLZ - ld de, sScratch - call Decompress - ret - -.QuestionMarkLZ: ; 1de0e1 -INCBIN "gfx/pokemon/questionmark/front.2bpp.lz" - -DrawPokedexListWindow: ; 1de171 (77:6171) - ld a, $32 - hlcoord 0, 17 - ld bc, 12 - call ByteFill - hlcoord 0, 1 - lb bc, 15, 11 - call ClearBox - ld a, $34 - hlcoord 0, 0 - ld bc, 11 - call ByteFill - ld a, $39 - hlcoord 0, 16 - ld bc, 11 - call ByteFill - hlcoord 5, 0 - ld [hl], $3f - hlcoord 5, 16 - ld [hl], $40 - ld a, [wCurrentDexMode] - cp DEXMODE_OLD - jr z, .OldMode -; scroll bar - hlcoord 11, 0 - ld [hl], $50 - ld a, $51 - hlcoord 11, 1 - ld b, SCREEN_HEIGHT - 3 - call Bank77_FillColumn - ld [hl], $52 - jr .Done - -.OldMode: -; no scroll bar - hlcoord 11, 0 - ld [hl], $66 - ld a, $67 - hlcoord 11, 1 - ld b, SCREEN_HEIGHT - 3 - call Bank77_FillColumn - ld [hl], $68 -.Done: - ret - -DrawPokedexSearchResultsWindow: ; 1de1d1 (77:61d1) - ld a, $34 - hlcoord 0, 0 - ld bc, 11 - call ByteFill - ld a, $39 - hlcoord 0, 10 - ld bc, 11 - call ByteFill - hlcoord 5, 0 - ld [hl], $3f - hlcoord 5, 10 - ld [hl], $40 - hlcoord 11, 0 - ld [hl], $66 - ld a, $67 - hlcoord 11, 1 - ld b, SCREEN_HEIGHT / 2 - call Bank77_FillColumn - ld [hl], $68 - ld a, $34 - hlcoord 0, 11 - ld bc, 11 - call ByteFill - ld a, $39 - hlcoord 0, 17 - ld bc, 11 - call ByteFill - hlcoord 11, 11 - ld [hl], $66 - ld a, $67 - hlcoord 11, 12 - ld b, 5 - call Bank77_FillColumn - ld [hl], $68 - hlcoord 0, 12 - lb bc, 5, 11 - call ClearBox - ld de, .esults_D - hlcoord 0, 12 - call PlaceString - ret - -.esults_D ; 1de23c -; (SEARCH R) - db "ESULTS" - next "" -; (### FOUN) - next "D!@" - -DrawDexEntryScreenRightEdge: ; 1de247 - ld a, [hBGMapAddress] - ld l, a - ld a, [hBGMapAddress + 1] - ld h, a - push hl - inc hl - ld a, l - ld [hBGMapAddress], a - ld a, h - ld [hBGMapAddress + 1], a - hlcoord 19, 0 - ld [hl], $66 - hlcoord 19, 1 - ld a, $67 - ld b, 15 - call Bank77_FillColumn - ld [hl], $68 - hlcoord 19, 17 - ld [hl], $3c - xor a - ld b, SCREEN_HEIGHT - hlcoord 19, 0, AttrMap - call Bank77_FillColumn - call WaitBGMap2 - pop hl - ld a, l - ld [hBGMapAddress], a - ld a, h - ld [hBGMapAddress + 1], a - ret - -Bank77_FillColumn: ; 1de27f - push de - ld de, SCREEN_WIDTH -.loop - ld [hl], a - add hl, de - dec b - jr nz, .loop - pop de - ret diff --git a/engine/routines/newpokedexentry.asm b/engine/routines/newpokedexentry.asm deleted file mode 100644 index d6b755200..000000000 --- a/engine/routines/newpokedexentry.asm +++ /dev/null @@ -1,52 +0,0 @@ -NewPokedexEntry: ; fb877 - ld a, [hMapAnims] - push af - xor a - ld [hMapAnims], a - call LowVolume - call ClearBGPalettes - call ClearTileMap - call UpdateSprites - call ClearSprites - ld a, [wPokedexStatus] - push af - ld a, [hSCX] - add POKEDEX_SCX - ld [hSCX], a - xor a - ld [wPokedexStatus], a - farcall _NewPokedexEntry - call WaitPressAorB_BlinkCursor - ld a, 1 ; page 2 - ld [wPokedexStatus], a - farcall DisplayDexEntry - call WaitPressAorB_BlinkCursor - pop af - ld [wPokedexStatus], a - call MaxVolume - call RotateThreePalettesRight - ld a, [hSCX] - add -POKEDEX_SCX - ld [hSCX], a - call .ReturnFromDexRegistration - pop af - ld [hMapAnims], a - ret -; fb8c8 - -.ReturnFromDexRegistration: ; fb8c8 - call ClearTileMap - call LoadFontsExtra - call LoadStandardFont - farcall Pokedex_PlaceFrontpicTopLeftCorner - call WaitBGMap2 - farcall GetEnemyMonDVs - ld a, [hli] - ld [TempMonDVs], a - ld a, [hl] - ld [TempMonDVs + 1], a - ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS - call GetSGBLayout - call SetPalettes - ret -; fb8f1 diff --git a/engine/unown_dex.asm b/engine/unown_dex.asm deleted file mode 100755 index dc6db9dc6..000000000 --- a/engine/unown_dex.asm +++ /dev/null @@ -1,52 +0,0 @@ -UpdateUnownDex: ; fba18 - ld a, [UnownLetter] - ld c, a - ld b, NUM_UNOWN - ld hl, UnownDex -.loop - ld a, [hli] - and a - jr z, .done - cp c - ret z - dec b - jr nz, .loop - ret - -.done - dec hl - ld [hl], c - ret -; fba2e - -PrintUnownWord: ; fba2e (3e:7a2e) - hlcoord 4, 15 - ld bc, 12 - ld a, " " - call ByteFill - ld a, [wDexCurrentUnownIndex] - ld e, a - ld d, 0 - ld hl, UnownDex - add hl, de - ld a, [hl] - ld e, a - ld d, 0 - ld hl, UnownWords - add hl, de - add hl, de - ld a, [hli] - ld e, a - ld d, [hl] - hlcoord 4, 15 -.loop - ld a, [de] - cp -1 - ret z - inc de - ld [hli], a - jr .loop -; fba5a (3e:7a5a) - - -INCLUDE "data/unown_words.asm" -- cgit v1.2.3