From b6742bac1cbd32cf2efacf933274e31f73f3d0dd Mon Sep 17 00:00:00 2001 From: Jamie Foster Date: Mon, 1 Sep 2025 15:18:53 +0200 Subject: [PATCH] Name pokemon summary screen remaining unnamed symbols --- src/pokemon_summary_screen.c | 250 +++++++++++++++++++---------------- 1 file changed, 139 insertions(+), 111 deletions(-) diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index a5886fd6a9..16d9901220 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -228,12 +228,12 @@ static bool8 CanReplaceMove(void); static void ShowCantForgetHMsWindow(u8); static void Task_HandleInputCantForgetHMsMoves(u8); static void DrawPagination(void); -static void HandlePowerAccTilemap(u16, s16); -static void Task_ShowPowerAccWindow(u8); -static void HandleAppealJamTilemap(u16, s16, u16); -static void Task_ShowAppealJamWindow(u8); -static void HandleStatusTilemap(u16, s16); -static void Task_ShowStatusWindow(u8); +static void PositionPowerAccSlidingWindow(u16, s16); +static void Task_SlidePowerAccWindow(u8); +static void PositionAppealJamSlidingWindow(u16, s16, u16); +static void Task_SlideAppealJamWindow(u8); +static void PositionStatusSlidingWindow(u16, s16); +static void Task_SlideStatusWindow(u8); static void TilemapFiveMovesDisplay(u16 *, u16, bool8); static void DrawPokerusCuredSymbol(struct Pokemon *); static void DrawExperienceProgressBar(struct Pokemon *); @@ -356,32 +356,52 @@ static const struct BgTemplate sBgTemplates[] = }, }; -struct TilemapCtrl +struct SlidingWindow { const u16 *gfx; - u16 field_4; - u8 field_6; - u8 field_7; - u8 field_8; - u8 field_9; + u16 defaultTile; + u8 width; + u8 height; + u8 left; + u8 top; }; static const u16 sStatusTilemap[] = INCBIN_U16("graphics/summary_screen/status_tilemap.bin"); -static const struct TilemapCtrl sStatusTilemapCtrl1 = +static const struct SlidingWindow sStatusSlidingWindow1 = { - sStatusTilemap, 1, 10, 2, 0, 18 + .gfx = sStatusTilemap, + .defaultTile = 1, + .width = 10, + .height = 2, + .left = 0, + .top = 18 }; -static const struct TilemapCtrl sStatusTilemapCtrl2 = +static const struct SlidingWindow sStatusSlidingWindow2 = { - sStatusTilemap, 1, 10, 2, 0, 50 + .gfx = sStatusTilemap, + .defaultTile = 1, + .width = 10, + .height = 2, + .left = 0, + .top = 50 }; -static const struct TilemapCtrl sBattleMoveTilemapCtrl = +static const struct SlidingWindow sPowerAccSlidingWindow = { - gSummaryScreen_MoveEffect_Battle_Tilemap, 0, 10, 7, 0, 45 + .gfx = gSummaryScreen_MoveEffect_Battle_Tilemap, + .defaultTile = 0, + .width = 10, + .height = 7, + .left = 0, + .top = 45 }; -static const struct TilemapCtrl sContestMoveTilemapCtrl = +static const struct SlidingWindow sAppealJamSlidingWindow = { - gSummaryScreen_MoveEffect_Contest_Tilemap, 0, 10, 7, 0, 45 + .gfx = gSummaryScreen_MoveEffect_Contest_Tilemap, + .defaultTile = 0, + .width = 10, + .height = 7, + .left = 0, + .top = 45 }; static const s8 sMultiBattleOrder[] = {0, 2, 3, 1, 4, 5}; static const struct WindowTemplate sSummaryTemplate[] = @@ -1455,8 +1475,8 @@ static void SetDefaultTilemaps(void) { if (sMonSummaryScreen->currPageIndex != PSS_PAGE_BATTLE_MOVES && sMonSummaryScreen->currPageIndex != PSS_PAGE_CONTEST_MOVES) { - HandlePowerAccTilemap(0, 0xFF); - HandleAppealJamTilemap(0, 0xFF, 0); + PositionPowerAccSlidingWindow(0, 0xFF); + PositionAppealJamSlidingWindow(0, 0xFF, 0); } else { @@ -1471,7 +1491,7 @@ static void SetDefaultTilemaps(void) } if (sMonSummaryScreen->summary.ailment == AILMENT_NONE) - HandleStatusTilemap(0, 0xFF); + PositionStatusSlidingWindow(0, 0xFF); else if (sMonSummaryScreen->currPageIndex != PSS_PAGE_BATTLE_MOVES && sMonSummaryScreen->currPageIndex != PSS_PAGE_CONTEST_MOVES) PutWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS); @@ -1596,7 +1616,7 @@ static void ChangeSummaryPokemon(u8 taskId, s8 delta) SetSpriteInvisibility(SPRITE_ARR_ID_STATUS, TRUE); ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS); ScheduleBgCopyTilemapToVram(0); - HandleStatusTilemap(0, 2); + PositionStatusSlidingWindow(0, 2); } sMonSummaryScreen->curMonIndex = monId; gTasks[taskId].data[0] = 0; @@ -1637,7 +1657,7 @@ static void Task_ChangeSummaryMon(u8 taskId) break; case 7: if (sMonSummaryScreen->summary.ailment != AILMENT_NONE) - HandleStatusTilemap(10, -2); + PositionStatusSlidingWindow(10, -2); DrawPokerusCuredSymbol(&sMonSummaryScreen->currentMon); data[1] = 0; break; @@ -1663,7 +1683,7 @@ static void Task_ChangeSummaryMon(u8 taskId) gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_MON]].data[2] = 0; break; default: - if (!MenuHelpers_ShouldWaitForLinkRecv() && !FuncIsActiveTask(Task_ShowStatusWindow)) + if (!MenuHelpers_ShouldWaitForLinkRecv() && !FuncIsActiveTask(Task_SlideStatusWindow)) { data[0] = 0; gTasks[taskId].func = Task_HandleInput; @@ -1869,8 +1889,8 @@ static void SwitchToMoveSelection(u8 taskId) ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES); if (!gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_STATUS]].invisible) ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS); - HandlePowerAccTilemap(9, -3); - HandleAppealJamTilemap(9, -3, move); + PositionPowerAccSlidingWindow(9, -3); + PositionAppealJamSlidingWindow(9, -3, move); if (!sMonSummaryScreen->lockMovesFlag) { ClearWindowTilemap(PSS_LABEL_WINDOW_PROMPT_INFO); @@ -1976,8 +1996,8 @@ static void ChangeSelectedMove(s16 *taskData, s8 direction, u8 *moveIndexPtr) if (!gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_STATUS]].invisible) ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS); ScheduleBgCopyTilemapToVram(0); - HandlePowerAccTilemap(9, -3); - HandleAppealJamTilemap(9, -3, move); + PositionPowerAccSlidingWindow(9, -3); + PositionAppealJamSlidingWindow(9, -3, move); } if (*moveIndexPtr != MAX_MON_MOVES && newMoveIndex == MAX_MON_MOVES @@ -1986,8 +2006,8 @@ static void ChangeSelectedMove(s16 *taskData, s8 direction, u8 *moveIndexPtr) ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM); ScheduleBgCopyTilemapToVram(0); - HandlePowerAccTilemap(0, 3); - HandleAppealJamTilemap(0, 3, 0); + PositionPowerAccSlidingWindow(0, 3); + PositionAppealJamSlidingWindow(0, 3, 0); } *moveIndexPtr = newMoveIndex; @@ -2011,8 +2031,8 @@ static void CloseMoveSelectMode(u8 taskId) { ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM); - HandlePowerAccTilemap(0, 3); - HandleAppealJamTilemap(0, 3, 0); + PositionPowerAccSlidingWindow(0, 3); + PositionAppealJamSlidingWindow(0, 3, 0); } ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(1); @@ -2238,8 +2258,8 @@ static void ShowCantForgetHMsWindow(u8 taskId) ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM); ScheduleBgCopyTilemapToVram(0); - HandlePowerAccTilemap(0, 3); - HandleAppealJamTilemap(0, 3, 0); + PositionPowerAccSlidingWindow(0, 3); + PositionAppealJamSlidingWindow(0, 3, 0); PrintHMMovesCantBeForgotten(); gTasks[taskId].func = Task_HandleInputCantForgetHMsMoves; } @@ -2249,7 +2269,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) { s16 *data = gTasks[taskId].data; u16 move; - if (FuncIsActiveTask(Task_ShowPowerAccWindow) != 1) + if (FuncIsActiveTask(Task_SlidePowerAccWindow) != 1) { if (JOY_NEW(DPAD_UP)) { @@ -2277,8 +2297,8 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) move = sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex]; gTasks[taskId].func = Task_HandleReplaceMoveInput; ChangePage(taskId, -1); - HandlePowerAccTilemap(9, -2); - HandleAppealJamTilemap(9, -2, move); + PositionPowerAccSlidingWindow(9, -2); + PositionAppealJamSlidingWindow(9, -2, move); } } else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) @@ -2291,8 +2311,8 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) move = sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex]; gTasks[taskId].func = Task_HandleReplaceMoveInput; ChangePage(taskId, 1); - HandlePowerAccTilemap(9, -2); - HandleAppealJamTilemap(9, -2, move); + PositionPowerAccSlidingWindow(9, -2); + PositionAppealJamSlidingWindow(9, -2, move); } } else if (JOY_NEW(A_BUTTON | B_BUTTON)) @@ -2303,8 +2323,8 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) move = sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex]; PrintMoveDetails(move); ScheduleBgCopyTilemapToVram(0); - HandlePowerAccTilemap(9, -3); - HandleAppealJamTilemap(9, -3, move); + PositionPowerAccSlidingWindow(9, -3); + PositionAppealJamSlidingWindow(9, -3, move); gTasks[taskId].func = Task_HandleReplaceMoveInput; } } @@ -2382,65 +2402,69 @@ static void DrawPagination(void) // Updates the pagination dots at the top of th Free(tilemap); } -static void ChangeTilemap(const struct TilemapCtrl *unkStruct, u16 *dest, u8 c, bool8 d) +static void CopyNColumnsToTilemap(const struct SlidingWindow *slidingWindow, u16 *tilemapDest, u8 visibleColumns, bool8 isOpeningToTheLeft) { u16 i; - u16 *alloced = Alloc(unkStruct->field_6 * 2 * unkStruct->field_7); - CpuFill16(unkStruct->field_4, alloced, unkStruct->field_6 * 2 * unkStruct->field_7); - if (unkStruct->field_6 != c) + u16 *alloced = Alloc(slidingWindow->width * 2 * slidingWindow->height); + CpuFill16(slidingWindow->defaultTile, alloced, slidingWindow->width * 2 * slidingWindow->height); + if (slidingWindow->width != visibleColumns) { - if (!d) + if (!isOpeningToTheLeft) { - for (i = 0; i < unkStruct->field_7; i++) - CpuCopy16(&unkStruct->gfx[c + unkStruct->field_6 * i], &alloced[unkStruct->field_6 * i], (unkStruct->field_6 - c) * 2); + for (i = 0; i < slidingWindow->height; i++) + CpuCopy16(&slidingWindow->gfx[visibleColumns + slidingWindow->width * i], &alloced[slidingWindow->width * i], (slidingWindow->width - visibleColumns) * 2); } else { - for (i = 0; i < unkStruct->field_7; i++) - CpuCopy16(&unkStruct->gfx[unkStruct->field_6 * i], &alloced[c + unkStruct->field_6 * i], (unkStruct->field_6 - c) * 2); + for (i = 0; i < slidingWindow->height; i++) + CpuCopy16(&slidingWindow->gfx[slidingWindow->width * i], &alloced[visibleColumns + slidingWindow->width * i], (slidingWindow->width - visibleColumns) * 2); } } - for (i = 0; i < unkStruct->field_7; i++) - CpuCopy16(&alloced[unkStruct->field_6 * i], &dest[(unkStruct->field_9 + i) * 32 + unkStruct->field_8], unkStruct->field_6 * 2); + for (i = 0; i < slidingWindow->height; i++) + CpuCopy16(&alloced[slidingWindow->width * i], &tilemapDest[(slidingWindow->top + i) * 32 + slidingWindow->left], slidingWindow->width * 2); Free(alloced); } -static void HandlePowerAccTilemap(u16 a, s16 b) +#define tScrollingSpeed data[0] +#define tVisibleColumns data[1] +#define tMove data[2] + +static void PositionPowerAccSlidingWindow(u16 visibleColumns, s16 speed) { - if (b > sBattleMoveTilemapCtrl.field_6) - b = sBattleMoveTilemapCtrl.field_6; - if (b == 0 || b == sBattleMoveTilemapCtrl.field_6) + if (speed > sPowerAccSlidingWindow.width) + speed = sPowerAccSlidingWindow.width; + if (speed == 0 || speed == sPowerAccSlidingWindow.width) { - ChangeTilemap(&sBattleMoveTilemapCtrl, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], b, TRUE); + CopyNColumnsToTilemap(&sPowerAccSlidingWindow, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], speed, TRUE); } else { - u8 taskId = FindTaskIdByFunc(Task_ShowPowerAccWindow); + u8 taskId = FindTaskIdByFunc(Task_SlidePowerAccWindow); if (taskId == TASK_NONE) - taskId = CreateTask(Task_ShowPowerAccWindow, 8); - gTasks[taskId].data[0] = b; - gTasks[taskId].data[1] = a; + taskId = CreateTask(Task_SlidePowerAccWindow, 8); + gTasks[taskId].tScrollingSpeed = speed; + gTasks[taskId].tVisibleColumns = visibleColumns; } } -static void Task_ShowPowerAccWindow(u8 taskId) +static void Task_SlidePowerAccWindow(u8 taskId) { s16 *data = gTasks[taskId].data; - data[1] += data[0]; - if (data[1] < 0) + tVisibleColumns += tScrollingSpeed; + if (tVisibleColumns < 0) { - data[1] = 0; + tVisibleColumns = 0; } - else if (data[1] > sBattleMoveTilemapCtrl.field_6) + else if (tVisibleColumns > sPowerAccSlidingWindow.width) { - data[1] = sBattleMoveTilemapCtrl.field_6; + tVisibleColumns = sPowerAccSlidingWindow.width; } - ChangeTilemap(&sBattleMoveTilemapCtrl, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], data[1], TRUE); - if (data[1] <= 0 || data[1] >= sBattleMoveTilemapCtrl.field_6) + CopyNColumnsToTilemap(&sPowerAccSlidingWindow, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], tVisibleColumns, TRUE); + if (tVisibleColumns <= 0 || tVisibleColumns >= sPowerAccSlidingWindow.width) { - if (data[0] < 0) + if (tScrollingSpeed < 0) { if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES) PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); @@ -2458,46 +2482,46 @@ static void Task_ShowPowerAccWindow(u8 taskId) ScheduleBgCopyTilemapToVram(2); } -static void HandleAppealJamTilemap(u16 a, s16 b, u16 move) +static void PositionAppealJamSlidingWindow(u16 visibleColumns, s16 speed, u16 move) { - if (b > sContestMoveTilemapCtrl.field_6) - b = sContestMoveTilemapCtrl.field_6; + if (speed > sAppealJamSlidingWindow.width) + speed = sAppealJamSlidingWindow.width; - if (b == 0 || b == sContestMoveTilemapCtrl.field_6) + if (speed == 0 || speed == sAppealJamSlidingWindow.width) { - ChangeTilemap(&sContestMoveTilemapCtrl, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], b, TRUE); + CopyNColumnsToTilemap(&sAppealJamSlidingWindow, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], speed, TRUE); } else { - u8 taskId = FindTaskIdByFunc(Task_ShowAppealJamWindow); + u8 taskId = FindTaskIdByFunc(Task_SlideAppealJamWindow); if (taskId == TASK_NONE) - taskId = CreateTask(Task_ShowAppealJamWindow, 8); - gTasks[taskId].data[0] = b; - gTasks[taskId].data[1] = a; - gTasks[taskId].data[2] = move; + taskId = CreateTask(Task_SlideAppealJamWindow, 8); + gTasks[taskId].tScrollingSpeed = speed; + gTasks[taskId].tVisibleColumns = visibleColumns; + gTasks[taskId].tMove = move; } } -static void Task_ShowAppealJamWindow(u8 taskId) +static void Task_SlideAppealJamWindow(u8 taskId) { s16 *data = gTasks[taskId].data; - data[1] += data[0]; - if (data[1] < 0) + tVisibleColumns += tScrollingSpeed; + if (tVisibleColumns < 0) { - data[1] = 0; + tVisibleColumns = 0; } - else if (data[1] > sContestMoveTilemapCtrl.field_6) + else if (tVisibleColumns > sAppealJamSlidingWindow.width) { - data[1] = sContestMoveTilemapCtrl.field_6; + tVisibleColumns = sAppealJamSlidingWindow.width; } - ChangeTilemap(&sContestMoveTilemapCtrl, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], data[1], TRUE); - if (data[1] <= 0 || data[1] >= sContestMoveTilemapCtrl.field_6) + CopyNColumnsToTilemap(&sAppealJamSlidingWindow, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], tVisibleColumns, TRUE); + if (tVisibleColumns <= 0 || tVisibleColumns >= sAppealJamSlidingWindow.width) { - if (data[0] < 0) + if (tScrollingSpeed < 0) { if (sMonSummaryScreen->currPageIndex == PSS_PAGE_CONTEST_MOVES && FuncIsActiveTask(PssScrollRight) == 0) PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM); - DrawContestMoveHearts(data[2]); + DrawContestMoveHearts(tMove); } else { @@ -2514,37 +2538,37 @@ static void Task_ShowAppealJamWindow(u8 taskId) ScheduleBgCopyTilemapToVram(2); } -static void HandleStatusTilemap(u16 a, s16 b) +static void PositionStatusSlidingWindow(u16 visibleColumns, s16 speed) { - if (b > sStatusTilemapCtrl1.field_6) - b = sStatusTilemapCtrl1.field_6; - if (b == 0 || b == sStatusTilemapCtrl1.field_6) + if (speed > sStatusSlidingWindow1.width) + speed = sStatusSlidingWindow1.width; + if (speed == 0 || speed == sStatusSlidingWindow1.width) { - ChangeTilemap(&sStatusTilemapCtrl1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], b, FALSE); - ChangeTilemap(&sStatusTilemapCtrl2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], b, FALSE); + CopyNColumnsToTilemap(&sStatusSlidingWindow1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], speed, FALSE); + CopyNColumnsToTilemap(&sStatusSlidingWindow2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], speed, FALSE); } else { - u8 taskId = CreateTask(Task_ShowStatusWindow, 8); - gTasks[taskId].data[0] = b; - gTasks[taskId].data[1] = a; + u8 taskId = CreateTask(Task_SlideStatusWindow, 8); + gTasks[taskId].tScrollingSpeed = speed; + gTasks[taskId].tVisibleColumns = visibleColumns; } } -static void Task_ShowStatusWindow(u8 taskId) +static void Task_SlideStatusWindow(u8 taskId) { s16 *data = gTasks[taskId].data; - data[1] += data[0]; - if (data[1] < 0) - data[1] = 0; - else if (data[1] > sStatusTilemapCtrl1.field_6) - data[1] = sStatusTilemapCtrl1.field_6; - ChangeTilemap(&sStatusTilemapCtrl1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], data[1], FALSE); - ChangeTilemap(&sStatusTilemapCtrl2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], data[1], FALSE); + tVisibleColumns += tScrollingSpeed; + if (tVisibleColumns < 0) + tVisibleColumns = 0; + else if (tVisibleColumns > sStatusSlidingWindow1.width) + tVisibleColumns = sStatusSlidingWindow1.width; + CopyNColumnsToTilemap(&sStatusSlidingWindow1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], tVisibleColumns, FALSE); + CopyNColumnsToTilemap(&sStatusSlidingWindow2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], tVisibleColumns, FALSE); ScheduleBgCopyTilemapToVram(3); - if (data[1] <= 0 || data[1] >= sStatusTilemapCtrl1.field_6) + if (tVisibleColumns <= 0 || tVisibleColumns >= sStatusSlidingWindow1.width) { - if (data[0] < 0) + if (tScrollingSpeed < 0) { CreateSetStatusSprite(); PutWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS); @@ -2554,6 +2578,10 @@ static void Task_ShowStatusWindow(u8 taskId) } } +#undef tScrollingSpeed +#undef tVisibleColumns +#undef tMove + // Toggles the "Cancel" window that appears when selecting a move static void TilemapFiveMovesDisplay(u16 *dst, u16 palette, bool8 remove) {