summaryrefslogtreecommitdiff
path: root/src/pokemon_summary_screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pokemon_summary_screen.c')
-rw-r--r--src/pokemon_summary_screen.c109
1 files changed, 63 insertions, 46 deletions
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 3041fdb13..dc009bbff 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -47,6 +47,14 @@
#include "constants/rgb.h"
#include "constants/songs.h"
+enum {
+ PSS_PAGE_INFO,
+ PSS_PAGE_SKILLS,
+ PSS_PAGE_BATTLE_MOVES,
+ PSS_PAGE_CONTEST_MOVES,
+ PSS_PAGE_COUNT,
+};
+
// Screen titles (upper left)
#define PSS_LABEL_WINDOW_POKEMON_INFO_TITLE 0
#define PSS_LABEL_WINDOW_POKEMON_SKILLS_TITLE 1
@@ -111,6 +119,11 @@ enum
SPRITE_ARR_ID_COUNT = SPRITE_ARR_ID_MOVE_SELECTOR2 + MOVE_SELECTOR_SPRITES_COUNT
};
+#define TILE_EMPTY_APPEAL_HEART 0x1039
+#define TILE_FILLED_APPEAL_HEART 0x103A
+#define TILE_FILLED_JAM_HEART 0x103C
+#define TILE_EMPTY_JAM_HEART 0x103D
+
static EWRAM_DATA struct PokemonSummaryScreenData
{
/*0x00*/ union {
@@ -175,7 +188,7 @@ static EWRAM_DATA struct PokemonSummaryScreenData
} *sMonSummaryScreen = NULL;
EWRAM_DATA u8 gLastViewedMonIndex = 0;
static EWRAM_DATA u8 sMoveSlotToReplace = 0;
-ALIGNED(4) static EWRAM_DATA u8 sUnknownTaskId = 0;
+ALIGNED(4) static EWRAM_DATA u8 sAnimDelayTaskId = 0;
// forward declarations
static bool8 LoadGraphics(void);
@@ -296,6 +309,7 @@ static void SpriteCb_MoveSelector(struct Sprite *sprite);
static void DestroyMoveSelectorSprites(u8 firstArrayId);
static void SetMainMoveSelectorColor(u8 whichColor);
static void KeepMoveSelectorVisible(u8 firstSpriteId);
+static void SummaryScreen_DestroyAnimDelayTask(void);
// const rom data
#include "data/text/move_descriptions.h"
@@ -1069,24 +1083,24 @@ void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex,
sMonSummaryScreen->maxMonIndex = maxMonIndex;
sMonSummaryScreen->callback = callback;
- if (mode == PSS_MODE_BOX)
+ if (mode == SUMMARY_MODE_BOX)
sMonSummaryScreen->isBoxMon = TRUE;
else
sMonSummaryScreen->isBoxMon = FALSE;
switch (mode)
{
- case PSS_MODE_NORMAL:
- case PSS_MODE_BOX:
+ case SUMMARY_MODE_NORMAL:
+ case SUMMARY_MODE_BOX:
sMonSummaryScreen->minPageIndex = 0;
sMonSummaryScreen->maxPageIndex = PSS_PAGE_COUNT - 1;
break;
- case PSS_MODE_LOCK_MOVES:
+ case SUMMARY_MODE_LOCK_MOVES:
sMonSummaryScreen->minPageIndex = 0;
sMonSummaryScreen->maxPageIndex = PSS_PAGE_COUNT - 1;
sMonSummaryScreen->lockMovesFlag = TRUE;
break;
- case PSS_MODE_SELECT_MOVE:
+ case SUMMARY_MODE_SELECT_MOVE:
sMonSummaryScreen->minPageIndex = PSS_PAGE_BATTLE_MOVES;
sMonSummaryScreen->maxPageIndex = PSS_PAGE_COUNT - 1;
sMonSummaryScreen->lockMonFlag = TRUE;
@@ -1094,7 +1108,7 @@ void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex,
}
sMonSummaryScreen->currPageIndex = sMonSummaryScreen->minPageIndex;
- SummaryScreen_SetUnknownTaskId(0xFF);
+ SummaryScreen_SetAnimDelayTaskId(TASK_NONE);
if (gMonSpritesGfxPtr == NULL)
sub_806F2AC(0, 0);
@@ -1104,7 +1118,7 @@ void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex,
void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove)
{
- ShowPokemonSummaryScreen(PSS_MODE_SELECT_MOVE, mons, monIndex, maxMonIndex, callback);
+ ShowPokemonSummaryScreen(SUMMARY_MODE_SELECT_MOVE, mons, monIndex, maxMonIndex, callback);
sMonSummaryScreen->newMove = newMove;
}
@@ -1239,7 +1253,7 @@ static bool8 LoadGraphics(void)
gMain.state++;
break;
case 22:
- if (sMonSummaryScreen->mode != PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode != SUMMARY_MODE_SELECT_MOVE)
CreateTask(Task_HandleInput, 0);
else
CreateTask(Task_SetHandleReplaceMoveInput, 0);
@@ -1392,7 +1406,7 @@ static bool8 ExtractMonDataToSummaryStruct(struct Pokemon *mon)
sum->ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES);
break;
case 2:
- if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == PSS_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE)
+ if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == SUMMARY_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE)
{
sum->nature = GetNature(mon);
sum->currentHP = GetMonData(mon, MON_DATA_HP);
@@ -1480,7 +1494,7 @@ static void CloseSummaryScreen(u8 taskId)
{
SetMainCallback2(sMonSummaryScreen->callback);
gLastViewedMonIndex = sMonSummaryScreen->curMonIndex;
- SummaryScreen_DestroyUnknownTask();
+ SummaryScreen_DestroyAnimDelayTask();
ResetSpriteData();
FreeAllSpritePalettes();
StopCryAndClearCrySongs();
@@ -1560,7 +1574,7 @@ static void ChangeSummaryPokemon(u8 taskId, s8 delta)
else
delta = 3;
}
- monId = sub_80D214C(sMonSummaryScreen->monList.boxMons, sMonSummaryScreen->curMonIndex, sMonSummaryScreen->maxMonIndex, delta);
+ monId = AdvanceStorageMonIndex(sMonSummaryScreen->monList.boxMons, sMonSummaryScreen->curMonIndex, sMonSummaryScreen->maxMonIndex, delta);
}
else if (IsMultiBattle() == TRUE)
{
@@ -1598,7 +1612,7 @@ static void Task_ChangeSummaryMon(u8 taskId)
StopCryAndClearCrySongs();
break;
case 1:
- SummaryScreen_DestroyUnknownTask();
+ SummaryScreen_DestroyAnimDelayTask();
DestroySpriteAndFreeResources(&gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_MON]]);
break;
case 2:
@@ -2636,29 +2650,30 @@ static void DrawContestMoveHearts(u16 move)
if (move != MOVE_NONE)
{
+ // Draw appeal hearts
u8 effectValue = gContestEffects[gContestMoves[move].effect].appeal;
if (effectValue != 0xFF)
effectValue /= 10;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < MAX_CONTEST_MOVE_HEARTS; i++)
{
if (effectValue != 0xFF && i < effectValue)
- tilemap[(i / 4 * 32) + (i & 3) + 0x1E6] = 0x103A;
+ tilemap[(i / 4 * 32) + (i & 3) + 0x1E6] = TILE_FILLED_APPEAL_HEART;
else
- tilemap[(i / 4 * 32) + (i & 3) + 0x1E6] = 0x1039;
+ tilemap[(i / 4 * 32) + (i & 3) + 0x1E6] = TILE_EMPTY_APPEAL_HEART;
}
+ // Draw jam hearts
effectValue = gContestEffects[gContestMoves[move].effect].jam;
-
if (effectValue != 0xFF)
effectValue /= 10;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < MAX_CONTEST_MOVE_HEARTS; i++)
{
if (effectValue != 0xFF && i < effectValue)
- tilemap[(i / 4 * 32) + (i & 3) + 0x226] = 0x103C;
+ tilemap[(i / 4 * 32) + (i & 3) + 0x226] = TILE_FILLED_JAM_HEART;
else
- tilemap[(i / 4 * 32) + (i & 3) + 0x226] = 0x103D;
+ tilemap[(i / 4 * 32) + (i & 3) + 0x226] = TILE_EMPTY_JAM_HEART;
}
}
}
@@ -2858,7 +2873,7 @@ static void PutPageWindowTilemaps(u8 page)
break;
case PSS_PAGE_BATTLE_MOVES:
PutWindowTilemap(PSS_LABEL_WINDOW_BATTLE_MOVES_TITLE);
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES)
PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC);
@@ -2870,7 +2885,7 @@ static void PutPageWindowTilemaps(u8 page)
break;
case PSS_PAGE_CONTEST_MOVES:
PutWindowTilemap(PSS_LABEL_WINDOW_CONTEST_MOVES_TITLE);
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES)
PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM);
@@ -2906,7 +2921,7 @@ static void ClearPageWindowTilemaps(u8 page)
ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_EXP);
break;
case PSS_PAGE_BATTLE_MOVES:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES)
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC);
@@ -2917,7 +2932,7 @@ static void ClearPageWindowTilemaps(u8 page)
}
break;
case PSS_PAGE_CONTEST_MOVES:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES)
ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM);
@@ -3412,7 +3427,7 @@ static void PrintBattleMoves(void)
PrintMoveNameAndPP(2);
PrintMoveNameAndPP(3);
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
PrintNewMoveDetailsOrCancelText();
if (sMonSummaryScreen->firstMoveIndex == MAX_MON_MOVES)
@@ -3446,11 +3461,11 @@ static void Task_PrintBattleMoves(u8 taskId)
PrintMoveNameAndPP(3);
break;
case 5:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
PrintNewMoveDetailsOrCancelText();
break;
case 6:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->firstMoveIndex == MAX_MON_MOVES)
data[1] = sMonSummaryScreen->newMove;
@@ -3459,7 +3474,7 @@ static void Task_PrintBattleMoves(u8 taskId)
}
break;
case 7:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES)
PrintMoveDetails(data[1]);
@@ -3547,7 +3562,7 @@ static void PrintContestMoves(void)
PrintMoveNameAndPP(2);
PrintMoveNameAndPP(3);
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
PrintNewMoveDetailsOrCancelText();
PrintContestMoveDescription(sMonSummaryScreen->firstMoveIndex);
@@ -3573,11 +3588,11 @@ static void Task_PrintContestMoves(u8 taskId)
PrintMoveNameAndPP(3);
break;
case 5:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
PrintNewMoveDetailsOrCancelText();
break;
case 6:
- if (sMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE)
+ if (sMonSummaryScreen->mode == SUMMARY_MODE_SELECT_MOVE)
{
if (sMonSummaryScreen->newMove != MOVE_NONE || sMonSummaryScreen->firstMoveIndex != MAX_MON_MOVES)
PrintContestMoveDescription(sMonSummaryScreen->firstMoveIndex);
@@ -3612,7 +3627,7 @@ static void PrintMoveDetails(u16 move)
FillWindowPixelBuffer(windowId, PIXEL_FILL(0));
if (move != MOVE_NONE)
{
- if (sMonSummaryScreen->currPageIndex == PSS_MODE_BOX)
+ if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES)
{
PrintMovePowerAndAccuracy(move);
PrintTextOnWindow(windowId, gMoveDescriptionPointers[move - 1], 6, 1, 0, 0);
@@ -3757,8 +3772,8 @@ static void SetTypeSpritePosAndPal(u8 typeId, u8 x, u8 y, u8 spriteArrayId)
struct Sprite *sprite = &gSprites[sMonSummaryScreen->spriteIds[spriteArrayId]];
StartSpriteAnim(sprite, typeId);
sprite->oam.paletteNum = sMoveTypeToOamPaletteNum[typeId];
- sprite->pos1.x = x + 16;
- sprite->pos1.y = y + 8;
+ sprite->x = x + 16;
+ sprite->y = y + 8;
SetSpriteInvisibility(spriteArrayId, FALSE);
}
@@ -3866,14 +3881,14 @@ static u8 LoadMonGfxAndSprite(struct Pokemon *mon, s16 *state)
{
if (gMonSpritesGfxPtr != NULL)
{
- if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == PSS_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE)
+ if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == SUMMARY_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE)
HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid);
else
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid);
}
else
{
- if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == PSS_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE)
+ if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == SUMMARY_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE)
HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], sub_806F4F8(0, 1), summary->species2, summary->pid);
else
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], sub_806F4F8(0, 1), summary->species2, summary->pid);
@@ -3933,17 +3948,19 @@ static void SpriteCB_Pokemon(struct Sprite *sprite)
}
}
-void SummaryScreen_SetUnknownTaskId(u8 taskId)
+// Track and then destroy Task_PokemonSummaryAnimateAfterDelay
+// Normally destroys itself but it can be interrupted before the animation starts
+void SummaryScreen_SetAnimDelayTaskId(u8 taskId)
{
- sUnknownTaskId = taskId;
+ sAnimDelayTaskId = taskId;
}
-void SummaryScreen_DestroyUnknownTask(void)
+static void SummaryScreen_DestroyAnimDelayTask(void)
{
- if (sUnknownTaskId != TASK_NONE)
+ if (sAnimDelayTaskId != TASK_NONE)
{
- DestroyTask(sUnknownTaskId);
- sUnknownTaskId = TASK_NONE;
+ DestroyTask(sAnimDelayTaskId);
+ sAnimDelayTaskId = TASK_NONE;
}
}
@@ -3982,8 +3999,8 @@ static void CreateMonMarkingsSprite(struct Pokemon *mon)
if (sprite != NULL)
{
StartSpriteAnim(sprite, GetMonData(mon, MON_DATA_MARKINGS));
- sMonSummaryScreen->markingsSprite->pos1.x = 60;
- sMonSummaryScreen->markingsSprite->pos1.y = 26;
+ sMonSummaryScreen->markingsSprite->x = 60;
+ sMonSummaryScreen->markingsSprite->y = 26;
sMonSummaryScreen->markingsSprite->oam.priority = 1;
}
}
@@ -4070,9 +4087,9 @@ static void SpriteCb_MoveSelector(struct Sprite *sprite)
}
if (sprite->data[0] == SPRITE_ARR_ID_MOVE_SELECTOR1)
- sprite->pos2.y = sMonSummaryScreen->firstMoveIndex * 16;
+ sprite->y2 = sMonSummaryScreen->firstMoveIndex * 16;
else
- sprite->pos2.y = sMonSummaryScreen->secondMoveIndex * 16;
+ sprite->y2 = sMonSummaryScreen->secondMoveIndex * 16;
}
static void DestroyMoveSelectorSprites(u8 firstArrayId)