Name pokemon summary screen remaining unnamed symbols

This commit is contained in:
Jamie Foster 2025-09-01 15:18:53 +02:00
parent 208f97e1e3
commit b6742bac1c

View File

@ -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)
{