diff options
Diffstat (limited to 'src/pokedex.c')
-rw-r--r-- | src/pokedex.c | 228 |
1 files changed, 122 insertions, 106 deletions
diff --git a/src/pokedex.c b/src/pokedex.c index eba97beb7..81d7c6730 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -104,13 +104,15 @@ enum #define POKEBALL_ROTATION_TOP 64 #define POKEBALL_ROTATION_BOTTOM (POKEBALL_ROTATION_TOP - 16) -// EWRAM +// Coordinates of the Pokémon sprite on its page (info/cry screens) +#define MON_PAGE_X 48 +#define MON_PAGE_Y 56 + static EWRAM_DATA struct PokedexView *sPokedexView = NULL; static EWRAM_DATA u16 sLastSelectedPokemon = 0; static EWRAM_DATA u8 sPokeBallRotation = 0; static EWRAM_DATA struct PokedexListItem *sPokedexListItem = NULL; -// IWRAM common // This is written to, but never read. u8 gUnusedPokedexU8; void (*gPokedexVBlankCB)(void); @@ -239,7 +241,7 @@ static void SpriteCB_DexListStartMenuCursor(struct Sprite *sprite); static void SpriteCB_PokedexListMonSprite(struct Sprite *sprite); static u8 LoadInfoScreen(struct PokedexListItem*, u8 monSpriteId); static bool8 IsInfoScreenScrolling(u8); -static u8 sub_80BE9F8(struct PokedexListItem*, u8); +static u8 StartInfoScreenScroll(struct PokedexListItem*, u8); static void Task_LoadInfoScreen(u8); static void Task_HandleInfoScreenInput(u8); static void Task_SwitchScreensFromInfoScreen(u8); @@ -268,7 +270,7 @@ static void PrintMonHeight(u16 height, u8 left, u8 top); static void PrintMonWeight(u16 weight, u8 left, u8 top); static void ResetOtherVideoRegisters(u16); static u8 PrintCryScreenSpeciesName(u8, u16, u8, u8); -static void PrintFootprint(u8 windowId, u16 dexNum); +static void DrawFootprint(u8 windowId, u16 dexNum); static u16 CreateSizeScreenTrainerPic(u16, s16, s16, s8); static u16 GetNextPosition(u8, u16, u16, u16); static u8 LoadSearchMenu(void); @@ -1655,7 +1657,7 @@ void Task_OpenPokedexMainPage(u8 taskId) gTasks[taskId].func = Task_HandlePokedexInput; } -#define tTaskId data[0] +#define tLoadScreenTaskId data[0] static void Task_HandlePokedexInput(u8 taskId) { @@ -1667,7 +1669,7 @@ static void Task_HandlePokedexInput(u8 taskId) } else { - if ((JOY_NEW(A_BUTTON)) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) + if (JOY_NEW(A_BUTTON) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) { UpdateSelectedMonSpriteId(); BeginNormalPaletteFade(~(1 << (gSprites[sPokedexView->selectedMonSpriteId].oam.paletteNum + 16)), 0, 0, 0x10, RGB_BLACK); @@ -1688,7 +1690,7 @@ static void Task_HandlePokedexInput(u8 taskId) { PlaySE(SE_SELECT); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].tTaskId = LoadSearchMenu(); + gTasks[taskId].tLoadScreenTaskId = LoadSearchMenu(); sPokedexView->screenSwitchState = 0; sPokedexView->pokeBallRotationBackup = sPokedexView->pokeBallRotation; sPokedexView->selectedPokemonBackup = sPokedexView->selectedPokemon; @@ -1768,12 +1770,12 @@ static void Task_HandlePokedexStartMenuInput(u8 taskId) gTasks[taskId].func = Task_HandlePokedexInput; PlaySE(SE_SELECT); } - else if ((JOY_REPEAT(DPAD_UP)) && sPokedexView->menuCursorPos != 0) + else if (JOY_REPEAT(DPAD_UP) && sPokedexView->menuCursorPos != 0) { sPokedexView->menuCursorPos--; PlaySE(SE_SELECT); } - else if ((JOY_REPEAT(DPAD_DOWN)) && sPokedexView->menuCursorPos < 3) + else if (JOY_REPEAT(DPAD_DOWN) && sPokedexView->menuCursorPos < 3) { sPokedexView->menuCursorPos++; PlaySE(SE_SELECT); @@ -1781,25 +1783,28 @@ static void Task_HandlePokedexStartMenuInput(u8 taskId) } } +// Opening the info screen from list view. Pokémon sprite is moving to its new position, wait for it to arrive static void Task_OpenInfoScreenAfterMonMovement(u8 taskId) { - if (gSprites[sPokedexView->selectedMonSpriteId].x == 48 && gSprites[sPokedexView->selectedMonSpriteId].y == 56) + if (gSprites[sPokedexView->selectedMonSpriteId].x == MON_PAGE_X && gSprites[sPokedexView->selectedMonSpriteId].y == MON_PAGE_Y) { sPokedexView->currentPageBackup = sPokedexView->currentPage; - gTasks[taskId].tTaskId = LoadInfoScreen(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], sPokedexView->selectedMonSpriteId); + gTasks[taskId].tLoadScreenTaskId = LoadInfoScreen(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], sPokedexView->selectedMonSpriteId); gTasks[taskId].func = Task_WaitForExitInfoScreen; } } static void Task_WaitForExitInfoScreen(u8 taskId) { - if (gTasks[gTasks[taskId].tTaskId].isActive) + if (gTasks[gTasks[taskId].tLoadScreenTaskId].isActive) { - if (sPokedexView->currentPage == PAGE_INFO && !IsInfoScreenScrolling(gTasks[taskId].tTaskId) && TryDoInfoScreenScroll()) - sub_80BE9F8(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], gTasks[taskId].tTaskId); + // While active, handle scroll input + if (sPokedexView->currentPage == PAGE_INFO && !IsInfoScreenScrolling(gTasks[taskId].tLoadScreenTaskId) && TryDoInfoScreenScroll()) + StartInfoScreenScroll(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], gTasks[taskId].tLoadScreenTaskId); } else { + // Exiting, back to list view sLastSelectedPokemon = sPokedexView->selectedPokemon; sPokeBallRotation = sPokedexView->pokeBallRotation; gTasks[taskId].func = Task_OpenPokedexMainPage; @@ -1808,7 +1813,7 @@ static void Task_WaitForExitInfoScreen(u8 taskId) static void Task_WaitForExitSearch(u8 taskId) { - if (!gTasks[gTasks[taskId].tTaskId].isActive) + if (!gTasks[gTasks[taskId].tLoadScreenTaskId].isActive) { ClearMonSprites(); @@ -1867,7 +1872,7 @@ static void Task_HandleSearchResultsInput(u8 taskId) } else { - if ((JOY_NEW(A_BUTTON)) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) + if (JOY_NEW(A_BUTTON) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen) { u32 a; @@ -1890,7 +1895,7 @@ static void Task_HandleSearchResultsInput(u8 taskId) else if (JOY_NEW(SELECT_BUTTON)) { BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].tTaskId = LoadSearchMenu(); + gTasks[taskId].tLoadScreenTaskId = LoadSearchMenu(); sPokedexView->screenSwitchState = 0; gTasks[taskId].func = Task_WaitForExitSearch; PlaySE(SE_PC_LOGIN); @@ -1970,12 +1975,12 @@ static void Task_HandleSearchResultsStartMenuInput(u8 taskId) gTasks[taskId].func = Task_HandleSearchResultsInput; PlaySE(SE_SELECT); } - else if ((JOY_REPEAT(DPAD_UP)) && sPokedexView->menuCursorPos) + else if (JOY_REPEAT(DPAD_UP) && sPokedexView->menuCursorPos) { sPokedexView->menuCursorPos--; PlaySE(SE_SELECT); } - else if ((JOY_REPEAT(DPAD_DOWN)) && sPokedexView->menuCursorPos < 4) + else if (JOY_REPEAT(DPAD_DOWN) && sPokedexView->menuCursorPos < 4) { sPokedexView->menuCursorPos++; PlaySE(SE_SELECT); @@ -1985,10 +1990,10 @@ static void Task_HandleSearchResultsStartMenuInput(u8 taskId) static void Task_OpenSearchResultsInfoScreenAfterMonMovement(u8 taskId) { - if (gSprites[sPokedexView->selectedMonSpriteId].x == 48 && gSprites[sPokedexView->selectedMonSpriteId].y == 56) + if (gSprites[sPokedexView->selectedMonSpriteId].x == MON_PAGE_X && gSprites[sPokedexView->selectedMonSpriteId].y == MON_PAGE_Y) { sPokedexView->currentPageBackup = sPokedexView->currentPage; - gTasks[taskId].tTaskId = LoadInfoScreen(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], sPokedexView->selectedMonSpriteId); + gTasks[taskId].tLoadScreenTaskId = LoadInfoScreen(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], sPokedexView->selectedMonSpriteId); sPokedexView->selectedMonSpriteId = -1; gTasks[taskId].func = Task_WaitForExitSearchResultsInfoScreen; } @@ -1996,13 +2001,15 @@ static void Task_OpenSearchResultsInfoScreenAfterMonMovement(u8 taskId) static void Task_WaitForExitSearchResultsInfoScreen(u8 taskId) { - if (gTasks[gTasks[taskId].tTaskId].isActive) + if (gTasks[gTasks[taskId].tLoadScreenTaskId].isActive) { - if (sPokedexView->currentPage == PAGE_INFO && !IsInfoScreenScrolling(gTasks[taskId].tTaskId) && TryDoInfoScreenScroll()) - sub_80BE9F8(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], gTasks[taskId].tTaskId); + // While active, handle scroll input + if (sPokedexView->currentPage == PAGE_INFO && !IsInfoScreenScrolling(gTasks[taskId].tLoadScreenTaskId) && TryDoInfoScreenScroll()) + StartInfoScreenScroll(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], gTasks[taskId].tLoadScreenTaskId); } else { + // Exiting, back to search results gTasks[taskId].func = Task_OpenSearchResults; } } @@ -2037,7 +2044,7 @@ static void Task_ClosePokedexFromSearchResultsStartMenu(u8 taskId) } } -#undef tTaskId +#undef tLoadScreenTaskId // For loading main pokedex page or pokedex search results static bool8 LoadPokedexListPage(u8 page) @@ -2584,7 +2591,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) u16 startingPos; u8 scrollDir = 0; - if ((JOY_HELD(DPAD_UP)) && (selectedMon > 0)) + if (JOY_HELD(DPAD_UP) && (selectedMon > 0)) { scrollDir = 1; selectedMon = GetNextPosition(1, selectedMon, 0, sPokedexView->pokemonListCount - 1); @@ -2592,7 +2599,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonListEntry(1, selectedMon, ignored); PlaySE(SE_DEX_SCROLL); } - else if ((JOY_HELD(DPAD_DOWN)) && (selectedMon < sPokedexView->pokemonListCount - 1)) + else if (JOY_HELD(DPAD_DOWN) && (selectedMon < sPokedexView->pokemonListCount - 1)) { scrollDir = 2; selectedMon = GetNextPosition(0, selectedMon, 0, sPokedexView->pokemonListCount - 1); @@ -2600,7 +2607,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonListEntry(2, selectedMon, ignored); PlaySE(SE_DEX_SCROLL); } - else if ((JOY_NEW(DPAD_LEFT)) && (selectedMon > 0)) + else if (JOY_NEW(DPAD_LEFT) && (selectedMon > 0)) { startingPos = selectedMon; @@ -2611,7 +2618,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonSpritesAtPos(selectedMon, 0xE); PlaySE(SE_DEX_PAGE); } - else if ((JOY_NEW(DPAD_RIGHT)) && (selectedMon < sPokedexView->pokemonListCount - 1)) + else if (JOY_NEW(DPAD_RIGHT) && (selectedMon < sPokedexView->pokemonListCount - 1)) { startingPos = selectedMon; for (i = 0; i < 7; i++) @@ -2660,7 +2667,7 @@ static bool8 TryDoInfoScreenScroll(void) u16 nextPokemon; u16 selectedPokemon = sPokedexView->selectedPokemon; - if ((JOY_NEW(DPAD_UP)) && selectedPokemon) + if (JOY_NEW(DPAD_UP) && selectedPokemon) { nextPokemon = selectedPokemon; while (nextPokemon != 0) @@ -2683,7 +2690,7 @@ static bool8 TryDoInfoScreenScroll(void) return TRUE; } } - else if ((JOY_NEW(DPAD_DOWN)) && selectedPokemon < sPokedexView->pokemonListCount - 1) + else if (JOY_NEW(DPAD_DOWN) && selectedPokemon < sPokedexView->pokemonListCount - 1) { nextPokemon = selectedPokemon; while (nextPokemon < sPokedexView->pokemonListCount - 1) @@ -3000,16 +3007,16 @@ void SpriteCB_MoveMonForInfoScreen(struct Sprite *sprite) sprite->oam.affineMode = ST_OAM_AFFINE_OFF; sprite->x2 = 0; sprite->y2 = 0; - if (sprite->x != 48 || sprite->y != 56) + if (sprite->x != MON_PAGE_X || sprite->y != MON_PAGE_Y) { - if (sprite->x > 48) + if (sprite->x > MON_PAGE_X) sprite->x--; - if (sprite->x < 48) + if (sprite->x < MON_PAGE_X) sprite->x++; - if (sprite->y > 56) + if (sprite->y > MON_PAGE_Y) sprite->y--; - if (sprite->y < 56) + if (sprite->y < MON_PAGE_Y) sprite->y++; } else @@ -3163,7 +3170,12 @@ static void PrintInfoScreenText(const u8* str, u8 left, u8 top) AddTextPrinterParameterized4(0, 1, left, top, 0, 0, color, -1, str); } -#define tMonSpriteId data[4] +#define tScrolling data[0] +#define tMonSpriteDone data[1] +#define tBgLoaded data[2] +#define tSkipCry data[3] +#define tMonSpriteId data[4] +#define tTrainerSpriteId data[5] static u8 LoadInfoScreen(struct PokedexListItem* item, u8 monSpriteId) { @@ -3171,12 +3183,12 @@ static u8 LoadInfoScreen(struct PokedexListItem* item, u8 monSpriteId) sPokedexListItem = item; taskId = CreateTask(Task_LoadInfoScreen, 0); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 1; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; + gTasks[taskId].tScrolling = FALSE; + gTasks[taskId].tMonSpriteDone = TRUE; // Already has sprite from list view + gTasks[taskId].tBgLoaded = FALSE; + gTasks[taskId].tSkipCry = FALSE; gTasks[taskId].tMonSpriteId = monSpriteId; - gTasks[taskId].data[5] = 255; + gTasks[taskId].tTrainerSpriteId = SPRITE_NONE; ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sInfoScreen_BgTemplate, ARRAY_COUNT(sInfoScreen_BgTemplate)); SetBgTilemapBuffer(3, AllocZeroed(BG_SCREEN_SIZE)); @@ -3191,19 +3203,19 @@ static u8 LoadInfoScreen(struct PokedexListItem* item, u8 monSpriteId) static bool8 IsInfoScreenScrolling(u8 taskId) { - if (gTasks[taskId].data[0] == 0 && gTasks[taskId].func == Task_HandleInfoScreenInput) + if (!gTasks[taskId].tScrolling && gTasks[taskId].func == Task_HandleInfoScreenInput) return FALSE; else return TRUE; } -static u8 sub_80BE9F8(struct PokedexListItem *item, u8 taskId) +static u8 StartInfoScreenScroll(struct PokedexListItem *item, u8 taskId) { sPokedexListItem = item; - gTasks[taskId].data[0] = 1; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; + gTasks[taskId].tScrolling = TRUE; + gTasks[taskId].tMonSpriteDone = FALSE; + gTasks[taskId].tBgLoaded = FALSE; + gTasks[taskId].tSkipCry = FALSE; return taskId; } @@ -3221,9 +3233,9 @@ static void Task_LoadInfoScreen(u8 taskId) gPokedexVBlankCB = gMain.vblankCallback; SetVBlankCallback(NULL); r2 = 0; - if (gTasks[taskId].data[1] != 0) + if (gTasks[taskId].tMonSpriteDone) r2 += DISPCNT_OBJ_ON; - if (gTasks[taskId].data[2] != 0) + if (gTasks[taskId].tBgLoaded) r2 |= DISPCNT_BG1_ON; ResetOtherVideoRegisters(r2); gMain.state = 1; @@ -3235,7 +3247,7 @@ static void Task_LoadInfoScreen(u8 taskId) FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); PutWindowTilemap(WIN_INFO); PutWindowTilemap(WIN_FOOTPRINT); - PrintFootprint(WIN_FOOTPRINT, sPokedexListItem->dexNum); + DrawFootprint(WIN_FOOTPRINT, sPokedexListItem->dexNum); CopyWindowToVram(WIN_FOOTPRINT, 2); gMain.state++; break; @@ -3259,9 +3271,9 @@ static void Task_LoadInfoScreen(u8 taskId) gMain.state++; break; case 5: - if (gTasks[taskId].data[1] == 0) + if (!gTasks[taskId].tMonSpriteDone) { - gTasks[taskId].tMonSpriteId = (u16)CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 48, 56, 0); + gTasks[taskId].tMonSpriteId = (u16)CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, MON_PAGE_X, MON_PAGE_Y, 0); gSprites[gTasks[taskId].tMonSpriteId].oam.priority = 0; } gMain.state++; @@ -3270,9 +3282,9 @@ static void Task_LoadInfoScreen(u8 taskId) { u32 preservedPalettes = 0; - if (gTasks[taskId].data[2] != 0) + if (gTasks[taskId].tBgLoaded) preservedPalettes = 0x14; // each bit represents a palette index - if (gTasks[taskId].data[1] != 0) + if (gTasks[taskId].tMonSpriteDone) preservedPalettes |= (1 << (gSprites[gTasks[taskId].tMonSpriteId].oam.paletteNum + 16)); BeginNormalPaletteFade(~preservedPalettes, 0, 16, 0, RGB_BLACK); SetVBlankCallback(gPokedexVBlankCB); @@ -3294,10 +3306,10 @@ static void Task_LoadInfoScreen(u8 taskId) if (!gPaletteFade.active) { gMain.state++; - if (gTasks[taskId].data[3] == 0) + if (!gTasks[taskId].tSkipCry) { StopCryAndClearCrySongs(); - PlayCry2(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, 0x7D, 0xA); + PlayCry2(NationalPokedexNumToSpecies(sPokedexListItem->dexNum), 0, 125, 10); } else { @@ -3310,10 +3322,10 @@ static void Task_LoadInfoScreen(u8 taskId) gMain.state++; break; case 10: - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 1; - gTasks[taskId].data[3] = 1; + gTasks[taskId].tScrolling = FALSE; + gTasks[taskId].tMonSpriteDone = FALSE; // Reload next time screen comes up + gTasks[taskId].tBgLoaded = TRUE; + gTasks[taskId].tSkipCry = TRUE; gTasks[taskId].func = Task_HandleInfoScreenInput; gMain.state = 0; break; @@ -3341,7 +3353,7 @@ static void FreeInfoScreenWindowAndBgBuffers(void) static void Task_HandleInfoScreenInput(u8 taskId) { - if (gTasks[taskId].data[0] != 0) + if (gTasks[taskId].tScrolling) { // Scroll up/down BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); @@ -3393,8 +3405,8 @@ static void Task_HandleInfoScreenInput(u8 taskId) } return; } - if (((JOY_NEW(DPAD_LEFT)) - || ((JOY_NEW(L_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if ((JOY_NEW(DPAD_LEFT) + || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) && sPokedexView->selectedScreen > 0) { sPokedexView->selectedScreen--; @@ -3402,8 +3414,8 @@ static void Task_HandleInfoScreenInput(u8 taskId) PlaySE(SE_DEX_PAGE); return; } - if (((JOY_NEW(DPAD_RIGHT)) - || ((JOY_NEW(R_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if ((JOY_NEW(DPAD_RIGHT) + || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) && sPokedexView->selectedScreen < CANCEL_SCREEN) { sPokedexView->selectedScreen++; @@ -3552,7 +3564,7 @@ static void Task_LoadCryScreen(u8 taskId) gMain.state++; break; case 5: - gTasks[taskId].tMonSpriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 48, 56, 0); + gTasks[taskId].tMonSpriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, MON_PAGE_X, MON_PAGE_Y, 0); gSprites[gTasks[taskId].tMonSpriteId].oam.priority = 0; gDexCryScreenState = 0; gMain.state++; @@ -3640,8 +3652,8 @@ static void Task_HandleCryScreenInput(u8 taskId) PlaySE(SE_PC_OFF); return; } - if ((JOY_NEW(DPAD_LEFT)) - || ((JOY_NEW(L_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if (JOY_NEW(DPAD_LEFT) + || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { BeginNormalPaletteFade(PALETTES_ALL & ~(0x14), 0, 0, 0x10, RGB_BLACK); m4aMPlayContinue(&gMPlayInfo_BGM); @@ -3650,8 +3662,8 @@ static void Task_HandleCryScreenInput(u8 taskId) PlaySE(SE_DEX_PAGE); return; } - if ((JOY_NEW(DPAD_RIGHT)) - || ((JOY_NEW(R_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if (JOY_NEW(DPAD_RIGHT) + || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { if (!sPokedexListItem->owned) { @@ -3756,7 +3768,7 @@ static void Task_LoadSizeScreen(u8 taskId) gSprites[spriteId].y2 = gPokedexEntries[sPokedexListItem->dexNum].trainerOffset; SetOamMatrix(1, gPokedexEntries[sPokedexListItem->dexNum].trainerScale, 0, 0, gPokedexEntries[sPokedexListItem->dexNum].trainerScale); LoadPalette(sSizeScreenSilhouette_Pal, (gSprites[spriteId].oam.paletteNum + 16) * 16, 0x20); - gTasks[taskId].data[5] = spriteId; + gTasks[taskId].tTrainerSpriteId = spriteId; gMain.state++; break; case 6: @@ -3810,8 +3822,8 @@ static void Task_HandleSizeScreenInput(u8 taskId) gTasks[taskId].func = Task_SwitchScreensFromSizeScreen; PlaySE(SE_PC_OFF); } - else if ((JOY_NEW(DPAD_LEFT)) - || ((JOY_NEW(L_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + else if (JOY_NEW(DPAD_LEFT) + || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { BeginNormalPaletteFade(PALETTES_ALL & ~(0x14), 0, 0, 0x10, RGB_BLACK); sPokedexView->screenSwitchState = 2; @@ -3825,7 +3837,7 @@ static void Task_SwitchScreensFromSizeScreen(u8 taskId) if (!gPaletteFade.active) { FreeAndDestroyMonPicSprite(gTasks[taskId].tMonSpriteId); - FreeAndDestroyTrainerPicSprite(gTasks[taskId].data[5]); + FreeAndDestroyTrainerPicSprite(gTasks[taskId].tTrainerSpriteId); switch (sPokedexView->screenSwitchState) { default: @@ -3839,7 +3851,12 @@ static void Task_SwitchScreensFromSizeScreen(u8 taskId) } } +#undef tScrolling +#undef tMonSpriteDone +#undef tBgLoaded +#undef tSkipCry #undef tMonSpriteId +#undef tTrainerSpriteId static void LoadScreenSelectBarMain(u16 unused) { @@ -3957,7 +3974,7 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId) FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); PutWindowTilemap(WIN_INFO); PutWindowTilemap(WIN_FOOTPRINT); - PrintFootprint(WIN_FOOTPRINT, gTasks[taskId].tDexNum); + DrawFootprint(WIN_FOOTPRINT, gTasks[taskId].tDexNum); CopyWindowToVram(WIN_FOOTPRINT, 2); ResetPaletteFade(); LoadPokedexBgPalette(FALSE); @@ -3974,7 +3991,7 @@ static void Task_DisplayCaughtMonDexPage(u8 taskId) gTasks[taskId].tState++; break; case 4: - spriteId = CreateMonSpriteFromNationalDexNumber(dexNum, 48, 56, 0); + spriteId = CreateMonSpriteFromNationalDexNumber(dexNum, MON_PAGE_X, MON_PAGE_Y, 0); gSprites[spriteId].oam.priority = 0; BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK); SetVBlankCallback(gPokedexVBlankCB); @@ -4172,7 +4189,7 @@ static void PrintMonWeight(u16 weight, u8 left, u8 top) if ((buffer[i] = (lbs / 100000) + CHAR_0) == CHAR_0 && !output) { - buffer[i++] = 0x77; + buffer[i++] = CHAR_SPACER; } else { @@ -4183,7 +4200,7 @@ static void PrintMonWeight(u16 weight, u8 left, u8 top) lbs %= 100000; if ((buffer[i] = (lbs / 10000) + CHAR_0) == CHAR_0 && !output) { - buffer[i++] = 0x77; + buffer[i++] = CHAR_SPACER; } else { @@ -4194,7 +4211,7 @@ static void PrintMonWeight(u16 weight, u8 left, u8 top) lbs %= 10000; if ((buffer[i] = (lbs / 1000) + CHAR_0) == CHAR_0 && !output) { - buffer[i++] = 0x77; + buffer[i++] = CHAR_SPACER; } else { @@ -4523,7 +4540,7 @@ static void UnusedPrintDecimalNum(u8 windowId, u16 b, u8 left, u8 top) result = b / 1000; if (result == 0) { - str[0] = 0x77; + str[0] = CHAR_SPACER; outputted = FALSE; } else @@ -4535,7 +4552,7 @@ static void UnusedPrintDecimalNum(u8 windowId, u16 b, u8 left, u8 top) result = (b % 1000) / 100; if (result == 0 && !outputted) { - str[1] = 0x77; + str[1] = CHAR_SPACER; outputted = FALSE; } else @@ -4551,36 +4568,35 @@ static void UnusedPrintDecimalNum(u8 windowId, u16 b, u8 left, u8 top) PrintInfoSubMenuText(windowId, str, left, top); } -static void PrintFootprint(u8 windowId, u16 dexNum) +static void DrawFootprint(u8 windowId, u16 dexNum) { - u8 image[32 * 4]; - const u8 * r12 = gMonFootprintTable[NationalPokedexNumToSpecies(dexNum)]; - u16 r5 = 0; - u16 i; - u16 j; + u8 footprint[32 * 4]; + const u8 * footprintGfx = gMonFootprintTable[NationalPokedexNumToSpecies(dexNum)]; + u16 tileIdx = 0; + u16 i, j; for (i = 0; i < 32; i++) { - u8 r3 = r12[i]; + u8 tile = footprintGfx[i]; for (j = 0; j < 4; j++) { - u8 value = ((r3 >> (2 * j)) & 1 ? 2 : 0); - if ((2 << (2 * j)) & r3) + u8 value = ((tile >> (2 * j)) & 1 ? 2 : 0); + if (tile & (2 << (2 * j))) value |= 0x20; - image[r5] = value; - r5++; + footprint[tileIdx] = value; + tileIdx++; } } - CopyToWindowPixelBuffer(windowId, image, sizeof(image), 0); + CopyToWindowPixelBuffer(windowId, footprint, sizeof(footprint), 0); } -// Unused -void sub_80C0DC0(u16 a, u16 b) +// Unused Ruby/Sapphire function. +static void RS_DrawFootprint(u16 offset, u16 tileNum) { - *(u16 *)(VRAM + a * 0x800 + 0x232) = 0xF000 + b + 0; - *(u16 *)(VRAM + a * 0x800 + 0x234) = 0xF000 + b + 1; - *(u16 *)(VRAM + a * 0x800 + 0x272) = 0xF000 + b + 2; - *(u16 *)(VRAM + a * 0x800 + 0x274) = 0xF000 + b + 3; + *(u16 *)(VRAM + offset * 0x800 + 0x232) = 0xF000 + tileNum + 0; + *(u16 *)(VRAM + offset * 0x800 + 0x234) = 0xF000 + tileNum + 1; + *(u16 *)(VRAM + offset * 0x800 + 0x272) = 0xF000 + tileNum + 2; + *(u16 *)(VRAM + offset * 0x800 + 0x274) = 0xF000 + tileNum + 3; } static u16 GetNextPosition(u8 direction, u16 position, u16 min, u16 max) @@ -4919,7 +4935,7 @@ static void Task_HandleSearchTopBarInput(u8 taskId) } return; } - if ((JOY_NEW(DPAD_LEFT)) && gTasks[taskId].tTopBarItem > SEARCH_TOPBAR_SEARCH) + if (JOY_NEW(DPAD_LEFT) && gTasks[taskId].tTopBarItem > SEARCH_TOPBAR_SEARCH) { PlaySE(SE_DEX_PAGE); gTasks[taskId].tTopBarItem--; @@ -4927,7 +4943,7 @@ static void Task_HandleSearchTopBarInput(u8 taskId) CopyWindowToVram(0, 2); CopyBgTilemapBufferToVram(3); } - if ((JOY_NEW(DPAD_RIGHT)) && gTasks[taskId].tTopBarItem < SEARCH_TOPBAR_CANCEL) + if (JOY_NEW(DPAD_RIGHT) && gTasks[taskId].tTopBarItem < SEARCH_TOPBAR_CANCEL) { PlaySE(SE_DEX_PAGE); gTasks[taskId].tTopBarItem++; @@ -5008,7 +5024,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) return; } - if ((JOY_NEW(DPAD_LEFT)) && movementMap[gTasks[taskId].tMenuItem][0] != 0xFF) + if (JOY_NEW(DPAD_LEFT) && movementMap[gTasks[taskId].tMenuItem][0] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][0]; @@ -5016,7 +5032,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) CopyWindowToVram(0, 2); CopyBgTilemapBufferToVram(3); } - if ((JOY_NEW(DPAD_RIGHT)) && movementMap[gTasks[taskId].tMenuItem][1] != 0xFF) + if (JOY_NEW(DPAD_RIGHT) && movementMap[gTasks[taskId].tMenuItem][1] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][1]; @@ -5024,7 +5040,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) CopyWindowToVram(0, 2); CopyBgTilemapBufferToVram(3); } - if ((JOY_NEW(DPAD_UP)) && movementMap[gTasks[taskId].tMenuItem][2] != 0xFF) + if (JOY_NEW(DPAD_UP) && movementMap[gTasks[taskId].tMenuItem][2] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][2]; @@ -5032,7 +5048,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) CopyWindowToVram(0, 2); CopyBgTilemapBufferToVram(3); } - if ((JOY_NEW(DPAD_DOWN)) && movementMap[gTasks[taskId].tMenuItem][3] != 0xFF) + if (JOY_NEW(DPAD_DOWN) && movementMap[gTasks[taskId].tMenuItem][3] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][3]; |