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.c4334
1 files changed, 2317 insertions, 2017 deletions
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 32d2bde4f..df596749e 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -1,399 +1,1054 @@
#include "global.h"
+#include "main.h"
#include "battle.h"
+#include "battle_anim.h"
+#include "battle_frontier_2.h"
+#include "battle_message.h"
+#include "battle_tent.h"
#include "bg.h"
+#include "contest.h"
+#include "contest_effect.h"
+#include "data2.h"
+#include "daycare.h"
#include "decompress.h"
+#include "dynamic_placeholder_text_util.h"
+#include "event_data.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "international_string_util.h"
#include "item.h"
-#include "constants/items.h"
#include "link.h"
#include "m4a.h"
-#include "main.h"
#include "malloc.h"
-#include "constants/moves.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "mon_markings.h"
+#include "party_menu.h"
#include "palette.h"
+#include "pokeball.h"
#include "pokemon.h"
-#include "constants/songs.h"
+#include "pokemon_storage_system.h"
+#include "pokemon_summary_screen.h"
+#include "region_map.h"
+#include "scanline_effect.h"
#include "sound.h"
-#include "constants/species.h"
#include "sprite.h"
-#include "dynamic_placeholder_text_util.h"
#include "string_util.h"
+#include "strings.h"
#include "task.h"
#include "text.h"
+#include "tv.h"
#include "window.h"
-#include "event_data.h"
-#include "gpu_regs.h"
-#include "menu.h"
-#include "international_string_util.h"
-#include "scanline_effect.h"
-#include "menu_helpers.h"
-#include "daycare.h"
-#include "data2.h"
-#include "contest.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/region_map_sections.h"
+#include "constants/songs.h"
+#include "constants/species.h"
-extern struct UnkSummaryStruct* gUnknown_0203CF1C;
-extern struct BgTemplate gUnknown_0861CBB4;
-extern u8 gUnknown_0203CF20;
-extern struct MusicPlayerInfo gMPlayInfo_BGM;
-extern s8 gUnknown_0861CC1C[];
-extern u8 gUnknown_0203CF21;
-extern struct UnkStruct_61CC04 gUnknown_0861CC04;
-extern struct UnkStruct_61CC04 gUnknown_0861CC10;
-extern struct UnkStruct_61CC04 gUnknown_0861CBEC;
-extern struct UnkStruct_61CC04 gUnknown_0861CBF8;
-extern u16 gSummaryScreenWindow_Tilemap[];
-extern struct ContestMove gContestMoves[];
-extern struct ContestEffect gContestEffects[];
-extern struct WindowTemplate gUnknown_0861CC24;
-extern u8 gUnknown_0861CD2C[][3];
-extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
-extern u8 gText_MaleSymbol[];
-extern u8 gText_FemaleSymbol[];
-extern u8 gUnknown_0861CDD3[];
-extern void (*const gUnknown_0861CE54[])();
-extern void (*const gUnknown_0861CE64[])(u8 taskId);
-extern struct WindowTemplate gUnknown_0861CCCC;
-extern u8 gUnknown_0861CE74[];
-extern u8 gUnknown_0861CE7B[];
-extern struct WindowTemplate gUnknown_0861CCEC;
-extern struct WindowTemplate gUnknown_0861CD14;
-extern const u8 *const gContestEffectDescriptionPointers[];
-extern const u8 *const gMoveDescriptionPointers[];
-
-void sub_81C488C(u8 a);
-extern u8 sub_81221EC();
-extern u8 sub_81221AC();
-extern u8 gUnknown_08D9862C;
-extern u8 gUnknown_08D98CC8;
-extern u8 gUnknown_08D987FC;
-extern u8 gUnknown_08D9898C;
-extern u8 gUnknown_08D98B28;
-extern u8 gUnknown_08D9853C;
-extern u8 gUnknown_08D85620;
-extern struct CompressedSpriteSheet gUnknown_0861CFBC;
-extern struct CompressedSpriteSheet gUnknown_0861D074;
-extern struct CompressedSpriteSheet gUnknown_0861D0F8;
-extern struct CompressedSpritePalette gUnknown_0861D100;
-extern struct CompressedSpritePalette gUnknown_0861D07C;
-extern u8 gMoveTypes_Pal;
-extern u8 gUnknown_08D97D0C;
-extern void sub_81C1E20(u8 taskId);
-extern u8 *GetMonNickname(struct Pokemon *mon, u8 *dest);
-extern u16 SpeciesToPokedexNum(u16 species);
-extern u8 gText_UnkCtrlF908Clear01[];
-extern u8 gText_LevelSymbol[];
-extern u8 gText_PkmnInfo[];
-extern u8 gText_PkmnSkills[];
-extern u8 gText_BattleMoves[];
-extern u8 gText_ContestMoves[];
-extern u8 gText_HMMovesCantBeForgotten2[];
-extern u8 gText_Cancel2[];
-extern u8 gText_Info[];
-extern u8 gText_Switch[];
-extern u8 gText_RentalPkmn[];
-extern u8 gText_TypeSlash[];
-extern u8 gText_HP4[];
-extern u8 gText_Attack3[];
-extern u8 gText_Defense3[];
-extern u8 gText_SpAtk4[];
-extern u8 gText_SpDef4[];
-extern u8 gText_Speed2[];
-extern u8 gText_ExpPoints[];
-extern u8 gText_NextLv[];
-extern u8 gText_Status[];
-extern u8 gText_Power[];
-extern u8 gText_Accuracy2[];
-extern u8 gText_Appeal[];
-extern u8 gText_Jam[];
-extern u8 gText_OTSlash[];
-extern u8 gText_UnkCtrlF907F908[];
-extern u8 gText_XNature[];
-extern u8 gText_XNatureHatchedAtYZ[];
-extern u8 gText_XNatureHatchedSomewhereAt[];
-extern u8 gText_XNatureMetAtYZ[];
-extern u8 gText_XNatureMetSomewhereAt[];
-extern u8 gText_XNatureFatefulEncounter[];
-extern u8 gText_XNatureProbablyMetAt[];
-extern u8 gText_XNatureObtainedInTrade[];
-extern u8 *gNatureNamePointers[];
-extern u8 gText_EmptyString5[];
-extern u32 gBattleTypeFlags;
-extern u8 gText_FiveMarks[];
-extern u8 gText_EggWillTakeALongTime[];
-extern u8 gText_EggAboutToHatch[];
-extern u8 gText_EggWillHatchSoon[];
-extern u8 gText_EggWillTakeSomeTime[];
-extern u8 gText_PeculiarEggNicePlace[];
-extern u8 gText_PeculiarEggTrade[];
-extern u8 gText_EggFromTraveler[];
-extern u8 gText_EggFromHotSprings[];
-extern u8 gText_OddEggFoundByCouple[];
-extern u8 gText_None[];
-extern u8 gText_RibbonsVar1[];
-extern u8 gUnknown_0861CE82[];
-extern u8 gUnknown_0861CE8E[];
-extern u8 gText_OneDash[];
-extern u8 gText_TwoDashes[];
-extern u8 gText_ThreeDashes[];
-extern u8 gText_Cancel[];
-extern u8 gUnknown_0861CE97[];
-extern const struct SpriteTemplate gUnknown_0861CFC4;
-
-extern void sub_8199C30(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f);
-extern bool8 sub_81A6BF4();
-extern bool8 sub_81B9E94();
-extern void DynamicPlaceholderTextUtil_Reset();
-extern void sub_8124610(u8 *a, u8 b);
-extern int GetPlayerIDAsU32();
-extern u8 GetCurrentPpToMaxPpState(u8 a, u8 b);
-
-void sub_81BFAE4(void);
-void sub_81BFE24();
-u8 sub_81BFEB0();
-void sub_81C2554();
-void sub_81C1BA0();
-void sub_81C0098(struct Pokemon* a);
-bool8 sub_81C00F0(struct Pokemon* a);
-void sub_81C25E8();
-void sub_81C286C();
-void sub_81C2D9C(u8 a);
-void sub_81C0348();
-void sub_81C2AFC(u8 a);
-void sub_81C4190();
-void sub_81C42C8();
-u8 sub_81C45F4(void* a, u16* b);
-void sub_81C4984();
-void sub_81C4A08();
-void sub_81C4A88();
-void sub_81C4280();
-void sub_81C43A0();
-void sub_81C4484();
-void sub_81C4420();
-void sub_81C0510(u8 taskId);
-void sub_81C171C(u8 taskId);
-void ResetAllBgsCoordinates();
-u8 sub_81B205C(struct Pokemon* a);
-void sub_81C1DA4(u16 a, s16 b);
-void sub_81C1EFC(u16 a, s16 b, u16 c);
-void sub_81C240C(u16 a);
-void sub_81C2194(u16 *a, u16 b, u8 c);
-void sub_81C2074(u16 a, s16 b);
-void sub_81C2524();
-void sub_81C2228(struct Pokemon* mon);
-void sub_81C0484(u8 taskId);
-void sub_81C4898();
-void sub_806F47C(u8 a);
-u8 GetLRKeysState();
-void sub_81C0604(u8 taskId, s8 a);
-void sub_81C0A8C(u8 taskId, s8 a);
-void sub_81C48F0();
-void sub_81C0E48(u8 taskId);
-void sub_81C0704(u8 taskId);
-s8 sub_81C09B4(s8 a);
-s8 sub_81C08F8(s8 a);
-void sub_81C4204(u8 a, u8 b);
-void sub_81C20F0(u8 taskId);
-bool8 sub_81C0A50(struct Pokemon* mon);
-void sub_81C49E0();
-void sub_81C0E24();
-void sub_81C2C38(u8 a);
-void sub_81C0B8C(u8 taskId);
-void sub_81C0CC4(u8 taskId);
-void sub_81C2DE4(u8 a);
-void sub_81C424C();
-void sub_81C0C68(u8 taskId);
-void sub_81C0D44(u8 taskId);
-void sub_81C22CC(struct Pokemon* mon);
-void sub_81C0F44(u8 taskId);
-void sub_81C3E9C(u16 a);
-void sub_81C3F44();
-void sub_81C44F0();
-void sub_81C4AF8(u8 a);
-void sub_81C1070(s16* a, s8 b, u8* c);
-void sub_81C11F4(u8 a);
-void sub_81C129C(u8 a);
-bool8 sub_81C1040();
-void sub_81C4064();
-void sub_81C4C60(u8 a);
-void sub_81C12E4(u8 taskId);
-void sub_81C4C84(u8 a);
-void sub_81C13B0(u8 a, u8 b);
-void sub_81C14BC(struct Pokemon *mon, u8 a, u8 b);
-void sub_81C15EC(struct BoxPokemon *mon, u8 a, u8 b);
-void sub_81C40A0(u8 a, u8 b);
-void sub_81C4568(u8 a, u8 b);
-void sub_81C174C(u8 taskId);
-bool8 sub_81C18A8();
-void sub_81C18F4(u8 a);
-u8 sub_81B6D14(u16 a);
-void sub_81C1940(u8 taskId);
-void sub_81C4154();
-void sub_81C1F80(u8 taskId);
-void sub_81C2628();
-void sub_81C2794();
-void sub_81C27DC(struct Pokemon *mon, u16 a);
-void sub_81C2D68(u8 a);
-void sub_81C335C();
-void sub_81C33CC();
-void sub_81C3428();
-void sub_81C349C();
-void sub_81C2EC4();
-void sub_81C2F5C();
-void sub_81C2FD8();
-void sub_81C302C();
-void sub_81C307C();
-void sub_81C3194();
-void sub_81C31C0();
-bool8 sub_81C3304();
-void sub_81C31F0(u8 *a);
-u8 sub_81C3220();
-bool8 sub_81C32BC();
-void sub_81C35E4();
-void sub_81C3690();
-void sub_81C3710();
-void sub_81C37D8();
-void sub_81C3808();
-void sub_81C3890();
-void sub_81C38C0();
-void sub_81C3B08(u8 a);
-void sub_81C3E2C(u8 a);
-void sub_81C4D18();
-
-void SetBgAttribute(u8 bg, u8 attributeId, u8 value);
-
-bool8 sub_81BFB10();
-u8 sub_81B1250();
-
-union UnkUnion
-{
- struct Pokemon mon[6];
- struct BoxPokemon boxMon[6];
-};
-
-
-u8 sub_80D214C(union UnkUnion* a, u8 b, u8 c, u8 d);
-
-struct PokeSummary
-{
- u16 species; // 0x0
- u16 species2; // 0x2
- u8 isEgg; // 0x4
- u8 level; // 0x5
- u8 ribbons; // 0x6
- u8 unk7; // 0x7
- u8 altAbility; // 0x8
- u8 metLocation; // 0x9
- u8 metLevel; // 0xA
- u8 metGame; // 0xB
- u32 pid; // 0xC
- u32 exp; // 0x10
- u16 moves[4]; // 0x14
- u8 pp[4]; // 0x1C
- u16 currentHP; // 0x20
- u16 maxHP; // 0x22
- u16 atk; // 0x24
- u16 def; // 0x26
- u16 spatk; // 0x28
- u16 spdef; // 0x2A
- u16 speed; // 0x2C
- u16 item; // 0x2E
- u16 friendship; // 0x30
- u8 OTGender; // 0x32
- u8 nature; // 0x33
- u8 ppBonuses; // 0x34
- u8 sanity; // 0x35
- u8 OTName[8]; // 0x36
- u8 unk3E[9]; // 0x3E
- u32 OTID; // 0x48
-};
-
-struct UnkSummaryStruct
-{
- /*0x00*/ union UnkUnion *unk0;
- /*0x04*/ void *unk4;
- /*0x08*/ void *unk8;
+static EWRAM_DATA struct UnkSummaryStruct
+{
+ /*0x00*/ union {
+ struct Pokemon *mons;
+ struct BoxPokemon *boxMons;
+ } monList;
+ /*0x04*/ MainCallback callback;
+ /*0x08*/ struct Sprite *markingsSprite;
/*0x0C*/ struct Pokemon currentMon;
- /*0x70*/ struct PokeSummary summary;
- u16 unkTilemap0[0x400];
- u16 unkTilemap0_1[0x400];
- u16 unkTilemap1[0x400];
- u16 unkTilemap1_1[0x400];
- u16 unkTilemap2[0x400];
- u16 unkTilemap2_1[0x400];
- u16 unkTilemap3[0x400];
- u16 unkTilemap3_1[0x400];
- u8 unk40BC;
- u8 unk40BD;
- u8 unk40BE;
- u8 unk40BF;
- u8 unk40C0;
- u8 unk40C1;
- u8 unk40C2;
- u8 unk40C3;
- u16 unk40C4;
- u8 unk40C6;
- u8 unk40C7;
- u8 unk40C8;
+ /*0x70*/ struct PokeSummary
+ {
+ u16 species; // 0x0
+ u16 species2; // 0x2
+ u8 isEgg; // 0x4
+ u8 level; // 0x5
+ u8 ribbonCount; // 0x6
+ u8 unk7; // 0x7
+ u8 altAbility; // 0x8
+ u8 metLocation; // 0x9
+ u8 metLevel; // 0xA
+ u8 metGame; // 0xB
+ u32 pid; // 0xC
+ u32 exp; // 0x10
+ u16 moves[4]; // 0x14
+ u8 pp[4]; // 0x1C
+ u16 currentHP; // 0x20
+ u16 maxHP; // 0x22
+ u16 atk; // 0x24
+ u16 def; // 0x26
+ u16 spatk; // 0x28
+ u16 spdef; // 0x2A
+ u16 speed; // 0x2C
+ u16 item; // 0x2E
+ u16 friendship; // 0x30
+ u8 OTGender; // 0x32
+ u8 nature; // 0x33
+ u8 ppBonuses; // 0x34
+ u8 sanity; // 0x35
+ u8 OTName[8]; // 0x36
+ u8 unk3E[9]; // 0x3E
+ u32 OTID; // 0x48
+ } summary;
+ u16 bgTilemapBuffers[4][2][0x400];
+ u8 mode;
+ bool8 isBoxMon;
+ u8 curMonIndex;
+ u8 maxMonIndex;
+ u8 currPageIndex;
+ u8 minPageIndex;
+ u8 maxPageIndex;
+ bool8 unk40C3;
+ u16 newMove;
+ u8 firstMoveIndex;
+ u8 secondMoveIndex;
+ bool8 unk40C8;
u8 unk40C9;
- u8 unk40CA;
- u8 unk40CB[8];
- u8 unk40D3[0x1C];
- u8 unk40EF;
+ u8 filler40CA;
+ u8 windowIds[8];
+ u8 spriteIds[28];
+ bool8 unk40EF;
s16 unk40F0;
u8 unk_filler4[6];
+} *pssData = NULL;
+EWRAM_DATA u8 gUnknown_0203CF20 = 0;
+static EWRAM_DATA u8 gUnknown_0203CF21 = 0;
+static EWRAM_DATA u8 gFiller_0203CF22[2] = {0};
+static EWRAM_DATA u8 sUnknownTaskId = 0;
+static EWRAM_DATA u8 gFiller_0203CF25[3] = {0};
+
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+
+struct UnkStruct_61CC04
+{
+ const u16 *ptr;
+ u16 field_4;
+ u8 field_6;
+ u8 field_7;
+ u8 field_8;
+ u8 field_9;
};
-void sub_81BF8EC(u8 a, void *b, u8 c, u8 d, void *e)
+// forward declarations
+bool8 sub_81B1250(void);
+static bool8 SummaryScreen_LoadGraphics(void);
+static void SummaryScreen_LoadingCB2(void);
+static void InitBGs(void);
+static bool8 SummaryScreen_DecompressGraphics(void);
+static void CopyMonToSummaryStruct(struct Pokemon* a);
+static bool8 ExtractMonDataToSummaryStruct(struct Pokemon* a);
+static void sub_81C0348(void);
+static void sub_81C0484(u8 taskId);
+static void sub_81C0510(u8 taskId);
+static void sub_81C0604(u8 taskId, s8 a);
+static void sub_81C0704(u8 taskId);
+static s8 sub_81C08F8(s8 a);
+static s8 sub_81C09B4(s8 a);
+static bool8 sub_81C0A50(struct Pokemon* mon);
+static void sub_81C0A8C(u8 taskId, s8 a);
+static void sub_81C0B8C(u8 taskId);
+static void sub_81C0C68(u8 taskId);
+static void sub_81C0CC4(u8 taskId);
+static void sub_81C0D44(u8 taskId);
+static void sub_81C0E24(void);
+static void sub_81C0E48(u8 taskId);
+static void sub_81C0F44(u8 taskId);
+static bool8 sub_81C1040(void);
+static void sub_81C1070(s16* a, s8 b, u8* c);
+static void sub_81C11F4(u8 a);
+static void sub_81C129C(u8 a);
+static void sub_81C12E4(u8 taskId);
+static void sub_81C13B0(u8 taskId, bool8 b);
+static void SwapMonMoves(struct Pokemon *mon, u8 moveIndex1, u8 moveIndex2);
+static void SwapBoxMonMoves(struct BoxPokemon *mon, u8 moveIndex1, u8 moveIndex2);
+static void sub_81C171C(u8 taskId);
+static void sub_81C174C(u8 taskId);
+static bool8 sub_81C18A8(void);
+static void sub_81C18F4(u8 a);
+static void sub_81C1940(u8 taskId);
+static void sub_81C1BA0(void);
+static void sub_81C1DA4(u16 a, s16 b);
+static void sub_81C1E20(u8 taskId);
+static void sub_81C1EFC(u16 a, s16 b, u16 c);
+static void sub_81C1F80(u8 taskId);
+static void sub_81C2074(u16 a, s16 b);
+static void sub_81C20F0(u8 taskId);
+static void sub_81C2194(u16 *a, u16 b, u8 c);
+static void sub_81C2228(struct Pokemon* mon);
+static void DrawExperienceProgressBar(struct Pokemon* mon);
+static void sub_81C240C(u16 a);
+static void sub_81C2524(void);
+static void sub_81C2554(void);
+static void sub_81C25E8(void);
+static void sub_81C2628(void);
+static void sub_81C2794(void);
+static void sub_81C27DC(struct Pokemon *mon, u16 a);
+static void PrintPageNamesAndStatsPageToWindows(void);
+static void sub_81C2AFC(u8 a);
+static void sub_81C2C38(u8 a);
+static void SummaryScreen_RemoveWindowByIndex(u8 a);
+static void sub_81C2D9C(u8 a);
+static void sub_81C2DE4(u8 a);
+static void sub_81C2E00(void);
+static void sub_81C2E40(u8 taskId);
+static void PrintMonOTName(void);
+static void PrintMonOTID(void);
+static void PrintMonAbilityName(void);
+static void PrintMonAbilityDescription(void);
+static void BufferMonTrainerMemo(void);
+static void PrintMonTrainerMemo(void);
+static void BufferNatureString(void);
+static void GetMetLevelString(u8 *a);
+static bool8 DoesMonOTMatchOwner(void);
+static bool8 DidMonComeFromGBAGames(void);
+static bool8 IsInGamePartnerMon(void);
+static void PrintEggOTName(void);
+static void PrintEggOTID(void);
+static void PrintEggState(void);
+static void PrintEggMemo(void);
+static void sub_81C3554(u8 taskId);
+static void PrintHeldItemName(void);
+static void sub_81C3530(void);
+static void PrintRibbonCount(void);
+static void BufferLeftColumnStats(void);
+static void PrintLeftColumnStats(void);
+static void BufferRightColumnStats(void);
+static void PrintRightColumnStats(void);
+static void PrintExpPointsNextLevel(void);
+static void sub_81C3984(void);
+static void sub_81C39F0(u8 taskId);
+static void PrintMoveNameAndPP(u8 a);
+static void sub_81C3D08(void);
+static void sub_81C3D54(u8 taskId);
+static void PrintContestMoveDescription(u8 a);
+static void PrintMoveDetails(u16 a);
+static void PrintNewMoveDetailsOrCancelText(void);
+static void sub_81C4064(void);
+static void sub_81C40A0(u8 a, u8 b);
+static void PrintHMMovesCantBeForgotten(void);
+static void sub_81C4190(void);
+static void sub_81C4204(u8 a, u8 b);
+static void sub_81C424C(void);
+static void sub_81C4280(void);
+static void sub_81C42C8(void);
+static void sub_81C43A0(void);
+static void sub_81C4420(void);
+static void sub_81C4484(void);
+static void sub_81C44F0(void);
+static void sub_81C4568(u8 a, u8 b);
+static u8 sub_81C45F4(struct Pokemon *a, s16 *b);
+static u8 sub_81C47B4(struct Pokemon *unused);
+static void sub_81C4844(struct Sprite *);
+void SummaryScreen_SetUnknownTaskId(u8 a);
+void SummaryScreen_DestroyUnknownTask(void);
+static void sub_81C48F0(void);
+static void CreateMonMarkingsSprite(struct Pokemon *mon);
+static void RemoveAndCreateMonMarkingsSprite(struct Pokemon *mon);
+static void CreateCaughtBallSprite(struct Pokemon *mon);
+static void CreateSetStatusSprite(void);
+static void sub_81C4AF8(u8 a);
+static void sub_81C4BE4(struct Sprite *sprite);
+static void sub_81C4C60(u8 a);
+static void sub_81C4C84(u8 a);
+static void sub_81C4D18(u8 a);
+
+// const rom data
+#include "data/text/move_descriptions.h"
+#include "data/text/nature_names.h"
+
+static const struct BgTemplate gUnknown_0861CBB4[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0,
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 27,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0,
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 25,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0,
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 29,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0,
+ },
+};
+
+static const u16 gUnknown_0861CBC4[] = INCBIN_U16("graphics/interface/unk_tilemap2.bin");
+static const struct UnkStruct_61CC04 gUnknown_0861CBEC =
+{
+ gUnknown_0861CBC4, 1, 10, 2, 0, 18
+};
+static const struct UnkStruct_61CC04 gUnknown_0861CBF8 =
+{
+ gUnknown_0861CBC4, 1, 10, 2, 0, 50
+};
+static const struct UnkStruct_61CC04 gUnknown_0861CC04 =
{
- u8 byte;
- gUnknown_0203CF1C = AllocZeroed(sizeof(struct UnkSummaryStruct));
- gUnknown_0203CF1C->unk40BC = a;
- gUnknown_0203CF1C->unk0 = b;
- gUnknown_0203CF1C->unk40BE = c;
- gUnknown_0203CF1C->unk40BF = d;
- gUnknown_0203CF1C->unk4 = e;
- if (a == 2)
- gUnknown_0203CF1C->unk40BD = 1;
+ gSummaryScreenPowAcc_Tilemap, 0, 10, 7, 0, 45
+};
+static const struct UnkStruct_61CC04 gUnknown_0861CC10 =
+{
+ gUnknown_08DC3C34, 0, 10, 7, 0, 45
+};
+static const s8 gUnknown_0861CC1C[] = {0, 2, 3, 1, 4, 5};
+static const struct WindowTemplate gUnknown_0861CC24[] =
+{
+ {
+ .priority = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 0,
+ .width = 11,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 1,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 0,
+ .width = 11,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 23,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 0,
+ .width = 11,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 45,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 0,
+ .width = 11,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 67,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 0,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 7,
+ .baseBlock = 89,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 0,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 7,
+ .baseBlock = 105,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 0,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 7,
+ .baseBlock = 121,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 11,
+ .tilemapTop = 4,
+ .width = 0,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 137,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 11,
+ .tilemapTop = 4,
+ .width = 18,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 137,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 11,
+ .tilemapTop = 6,
+ .width = 18,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 173,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 10,
+ .tilemapTop = 7,
+ .width = 6,
+ .height = 6,
+ .paletteNum = 6,
+ .baseBlock = 209,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 7,
+ .width = 5,
+ .height = 6,
+ .paletteNum = 6,
+ .baseBlock = 245,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 10,
+ .tilemapTop = 14,
+ .width = 11,
+ .height = 4,
+ .paletteNum = 6,
+ .baseBlock = 275,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 18,
+ .width = 6,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 319,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 15,
+ .width = 9,
+ .height = 4,
+ .paletteNum = 6,
+ .baseBlock = 331,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 15,
+ .width = 5,
+ .height = 4,
+ .paletteNum = 6,
+ .baseBlock = 367,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 4,
+ .width = 0,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 387,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 2,
+ .width = 4,
+ .height = 2,
+ .paletteNum = 7,
+ .baseBlock = 387,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 12,
+ .width = 9,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 395,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 14,
+ .width = 9,
+ .height = 4,
+ .paletteNum = 6,
+ .baseBlock = 413,
+ },
+ DUMMY_WIN_TEMPLATE
+};
+static const struct WindowTemplate gUnknown_0861CCCC[] =
+{
+ {
+ .priority = 0,
+ .tilemapLeft = 11,
+ .tilemapTop = 4,
+ .width = 11,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 449,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 4,
+ .width = 7,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 471,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 11,
+ .tilemapTop = 9,
+ .width = 18,
+ .height = 4,
+ .paletteNum = 6,
+ .baseBlock = 485,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 11,
+ .tilemapTop = 14,
+ .width = 18,
+ .height = 6,
+ .paletteNum = 6,
+ .baseBlock = 557,
+ },
+};
+static const struct WindowTemplate gUnknown_0861CCEC[] =
+{
+ {
+ .priority = 0,
+ .tilemapLeft = 10,
+ .tilemapTop = 4,
+ .width = 10,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 449,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 20,
+ .tilemapTop = 4,
+ .width = 10,
+ .height = 2,
+ .paletteNum = 6,
+ .baseBlock = 469,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 16,
+ .tilemapTop = 7,
+ .width = 6,
+ .height = 6,
+ .paletteNum = 6,
+ .baseBlock = 489,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 27,
+ .tilemapTop = 7,
+ .width = 3,
+ .height = 6,
+ .paletteNum = 6,
+ .baseBlock = 525,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 24,
+ .tilemapTop = 14,
+ .width = 6,
+ .height = 4,
+ .paletteNum = 6,
+ .baseBlock = 543,
+ },
+};
+static const struct WindowTemplate gUnknown_0861CD14[] =
+{
+ {
+ .priority = 0,
+ .tilemapLeft = 15,
+ .tilemapTop = 4,
+ .width = 9,
+ .height = 10,
+ .paletteNum = 6,
+ .baseBlock = 449,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 24,
+ .tilemapTop = 4,
+ .width = 6,
+ .height = 10,
+ .paletteNum = 8,
+ .baseBlock = 539,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 10,
+ .tilemapTop = 15,
+ .width = 20,
+ .height = 4,
+ .paletteNum = 6,
+ .baseBlock = 599,
+ },
+};
+static const u8 sTextColors_861CD2C[][3] =
+{
+ {0, 1, 2},
+ {0, 3, 4},
+ {0, 5, 6},
+ {0, 7, 8},
+ {0, 9, 10},
+ {0, 11, 12},
+ {0, 13, 14},
+ {0, 7, 8},
+ {13, 15, 14},
+ {0, 1, 2},
+ {0, 3, 4},
+ {0, 5, 6},
+ {0, 7, 8}
+};
+static const u8 gUnknown_0861CD53[] = INCBIN_U8("graphics/interface/summary_a_button.4bpp");
+static const u8 gUnknown_0861CDD3[] = INCBIN_U8("graphics/interface/summary_b_button.4bpp");
+static void (*const gUnknown_0861CE54[])(void) =
+{
+ sub_81C2E00,
+ sub_81C3530,
+ sub_81C3984,
+ sub_81C3D08
+};
+static void (*const gUnknown_0861CE64[])(u8 taskId) =
+{
+ sub_81C2E40,
+ sub_81C3554,
+ sub_81C39F0,
+ sub_81C3D54
+};
+static const u8 gUnknown_0861CE74[] = _("{COLOR LIGHT_RED}{SHADOW GREEN}");
+static const u8 gUnknown_0861CE7B[] = _("{COLOR WHITE}{SHADOW DARK_GREY}");
+static const u8 gUnknown_0861CE82[] = _("{SPECIAL_F7 0x00}/{SPECIAL_F7 0x01}\n{SPECIAL_F7 0x02}\n{SPECIAL_F7 0x03}");
+static const u8 gUnknown_0861CE8E[] = _("{SPECIAL_F7 0x00}\n{SPECIAL_F7 0x01}\n{SPECIAL_F7 0x02}");
+static const u8 gUnknown_0861CE97[] = _("{PP}{SPECIAL_F7 0x00}/{SPECIAL_F7 0x01}");
+
+#define TAG_MOVE_TYPES 30002
+
+static const struct OamData sOamData_MoveTypes =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 1,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd sSpriteAnim_TypeNormal[] = {
+ ANIMCMD_FRAME(TYPE_NORMAL * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeFighting[] = {
+ ANIMCMD_FRAME(TYPE_FIGHTING * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeFlying[] = {
+ ANIMCMD_FRAME(TYPE_FLYING * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypePoison[] = {
+ ANIMCMD_FRAME(TYPE_POISON * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeGround[] = {
+ ANIMCMD_FRAME(TYPE_GROUND * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeRock[] = {
+ ANIMCMD_FRAME(TYPE_ROCK * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeBug[] = {
+ ANIMCMD_FRAME(TYPE_BUG * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeGhost[] = {
+ ANIMCMD_FRAME(TYPE_GHOST * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeSteel[] = {
+ ANIMCMD_FRAME(TYPE_STEEL * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeMystery[] = {
+ ANIMCMD_FRAME(TYPE_MYSTERY * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeFire[] = {
+ ANIMCMD_FRAME(TYPE_FIRE * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeWater[] = {
+ ANIMCMD_FRAME(TYPE_WATER * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeGrass[] = {
+ ANIMCMD_FRAME(TYPE_GRASS * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeElectric[] = {
+ ANIMCMD_FRAME(TYPE_ELECTRIC * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypePsychic[] = {
+ ANIMCMD_FRAME(TYPE_PSYCHIC * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeIce[] = {
+ ANIMCMD_FRAME(TYPE_ICE * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeDragon[] = {
+ ANIMCMD_FRAME(TYPE_DRAGON * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_TypeDark[] = {
+ ANIMCMD_FRAME(TYPE_DARK * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_CategoryCool[] = {
+ ANIMCMD_FRAME((CONTEST_CATEGORY_COOL + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_CategoryBeauty[] = {
+ ANIMCMD_FRAME((CONTEST_CATEGORY_BEAUTY + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_CategoryCute[] = {
+ ANIMCMD_FRAME((CONTEST_CATEGORY_CUTE + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_CategorySmart[] = {
+ ANIMCMD_FRAME((CONTEST_CATEGORY_SMART + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_CategoryTough[] = {
+ ANIMCMD_FRAME((CONTEST_CATEGORY_TOUGH + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd *const sSpriteAnimTable_MoveTypes[NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT] = {
+ sSpriteAnim_TypeNormal,
+ sSpriteAnim_TypeFighting,
+ sSpriteAnim_TypeFlying,
+ sSpriteAnim_TypePoison,
+ sSpriteAnim_TypeGround,
+ sSpriteAnim_TypeRock,
+ sSpriteAnim_TypeBug,
+ sSpriteAnim_TypeGhost,
+ sSpriteAnim_TypeSteel,
+ sSpriteAnim_TypeMystery,
+ sSpriteAnim_TypeFire,
+ sSpriteAnim_TypeWater,
+ sSpriteAnim_TypeGrass,
+ sSpriteAnim_TypeElectric,
+ sSpriteAnim_TypePsychic,
+ sSpriteAnim_TypeIce,
+ sSpriteAnim_TypeDragon,
+ sSpriteAnim_TypeDark,
+ sSpriteAnim_CategoryCool,
+ sSpriteAnim_CategoryBeauty,
+ sSpriteAnim_CategoryCute,
+ sSpriteAnim_CategorySmart,
+ sSpriteAnim_CategoryTough,
+};
+
+static const struct CompressedSpriteSheet sSpriteSheet_MoveTypes =
+{
+ .data = gMoveTypes_Gfx,
+ .size = (NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT) * 0x100,
+ .tag = TAG_MOVE_TYPES
+};
+static const struct SpriteTemplate sSpriteTemplate_MoveTypes =
+{
+ .tileTag = TAG_MOVE_TYPES,
+ .paletteTag = TAG_MOVE_TYPES,
+ .oam = &sOamData_MoveTypes,
+ .anims = sSpriteAnimTable_MoveTypes,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+static const u8 sMoveTypeToOamPaletteNum[NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT] =
+{
+ [TYPE_NORMAL] = 13,
+ [TYPE_FIGHTING] = 13,
+ [TYPE_FLYING] = 14,
+ [TYPE_POISON] = 14,
+ [TYPE_GROUND] = 13,
+ [TYPE_ROCK] = 13,
+ [TYPE_BUG] = 15,
+ [TYPE_GHOST] = 14,
+ [TYPE_STEEL] = 13,
+ [TYPE_MYSTERY] = 15,
+ [TYPE_FIRE] = 13,
+ [TYPE_WATER] = 14,
+ [TYPE_GRASS] = 15,
+ [TYPE_ELECTRIC] = 13,
+ [TYPE_PSYCHIC] = 14,
+ [TYPE_ICE] = 14,
+ [TYPE_DRAGON] = 15,
+ [TYPE_DARK] = 13,
+ [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_COOL] = 13,
+ [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_BEAUTY] = 14,
+ [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_CUTE] = 14,
+ [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_SMART] = 15,
+ [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_TOUGH] = 13,
+};
+static const struct OamData gOamData_861CFF4 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd gSpriteAnim_861CFFC[] = {
+ ANIMCMD_FRAME(0, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D004[] = {
+ ANIMCMD_FRAME(4, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D00C[] = {
+ ANIMCMD_FRAME(8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D014[] = {
+ ANIMCMD_FRAME(12, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D01C[] = {
+ ANIMCMD_FRAME(16, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D024[] = {
+ ANIMCMD_FRAME(16, 0, TRUE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D02C[] = {
+ ANIMCMD_FRAME(20, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D034[] = {
+ ANIMCMD_FRAME(24, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D03C[] = {
+ ANIMCMD_FRAME(24, 0, TRUE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D044[] = {
+ ANIMCMD_FRAME(28, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd *const gSpriteAnimTable_861D04C[] = {
+ gSpriteAnim_861CFFC,
+ gSpriteAnim_861D004,
+ gSpriteAnim_861D00C,
+ gSpriteAnim_861D014,
+ gSpriteAnim_861D01C,
+ gSpriteAnim_861D024,
+ gSpriteAnim_861D02C,
+ gSpriteAnim_861D034,
+ gSpriteAnim_861D03C,
+ gSpriteAnim_861D044,
+};
+static const struct CompressedSpriteSheet gUnknown_0861D074 =
+{
+ .data = gUnknown_08D97BEC,
+ .size = 0x400,
+ .tag = 30000
+};
+static const struct CompressedSpritePalette gUnknown_0861D07C =
+{
+ .data = gUnknown_08D97CF4,
+ .tag = 30000
+};
+static const struct SpriteTemplate gUnknown_0861D084 =
+{
+ .tileTag = 30000,
+ .paletteTag = 30000,
+ .oam = &gOamData_861CFF4,
+ .anims = gSpriteAnimTable_861D04C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+static const struct OamData sOamData_StatusCondition =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 1,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 3,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd sSpriteAnim_StatusPoison[] = {
+ ANIMCMD_FRAME(0, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_StatusParalyzed[] = {
+ ANIMCMD_FRAME(4, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_StatusSleep[] = {
+ ANIMCMD_FRAME(8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_StatusFrozen[] = {
+ ANIMCMD_FRAME(12, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_StatusBurn[] = {
+ ANIMCMD_FRAME(16, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_StatusPokerus[] = {
+ ANIMCMD_FRAME(20, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd sSpriteAnim_StatusFaint[] = {
+ ANIMCMD_FRAME(24, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd *const sSpriteAnimTable_StatusCondition[] = {
+ sSpriteAnim_StatusPoison,
+ sSpriteAnim_StatusParalyzed,
+ sSpriteAnim_StatusSleep,
+ sSpriteAnim_StatusFrozen,
+ sSpriteAnim_StatusBurn,
+ sSpriteAnim_StatusPokerus,
+ sSpriteAnim_StatusFaint,
+};
+static const struct CompressedSpriteSheet gUnknown_0861D0F8 =
+{
+ .data = gStatusGfx_Icons,
+ .size = 0x380,
+ .tag = 30001
+};
+static const struct CompressedSpritePalette gUnknown_0861D100 =
+{
+ .data = gStatusPal_Icons,
+ .tag = 30001
+};
+static const struct SpriteTemplate sSpriteTemplate_StatusCondition =
+{
+ .tileTag = 30001,
+ .paletteTag = 30001,
+ .oam = &sOamData_StatusCondition,
+ .anims = sSpriteAnimTable_StatusCondition,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+static const u16 gUnknown_0861D120[] = INCBIN_U16("graphics/interface/summary_markings.gbapal");
+
+// code
+void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void))
+{
+ pssData = AllocZeroed(sizeof(*pssData));
+ pssData->mode = mode;
+ pssData->monList.mons = mons;
+ pssData->curMonIndex = monIndex;
+ pssData->maxMonIndex = maxMonIndex;
+ pssData->callback = callback;
+
+ if (mode == PSS_MODE_UNK2)
+ pssData->isBoxMon = TRUE;
else
- gUnknown_0203CF1C->unk40BD = 0;
- switch (a)
+ pssData->isBoxMon = FALSE;
+
+ switch (mode)
{
- case 0:
- case 2:
- gUnknown_0203CF1C->unk40C1 = 0;
- gUnknown_0203CF1C->unk40C2 = 3;
+ case PSS_MODE_NORMAL:
+ case PSS_MODE_UNK2:
+ pssData->minPageIndex = 0;
+ pssData->maxPageIndex = 3;
break;
- case 1:
- gUnknown_0203CF1C->unk40C1 = 0;
- gUnknown_0203CF1C->unk40C2 = 3;
- gUnknown_0203CF1C->unk40C8 = 1;
+ case PSS_MODE_UNK1:
+ pssData->minPageIndex = 0;
+ pssData->maxPageIndex = 3;
+ pssData->unk40C8 = TRUE;
break;
- case 3:
- gUnknown_0203CF1C->unk40C1 = 2;
- gUnknown_0203CF1C->unk40C2 = 3;
- gUnknown_0203CF1C->unk40C3 = 1;
+ case PSS_MODE_SELECT_MOVE:
+ pssData->minPageIndex = 2;
+ pssData->maxPageIndex = 3;
+ pssData->unk40C3 = TRUE;
break;
}
- byte = gUnknown_0203CF1C->unk40C1;
- gUnknown_0203CF1C->unk40C0 = byte;
- sub_81C488C(0xFF);
+
+ pssData->currPageIndex = pssData->minPageIndex;
+ SummaryScreen_SetUnknownTaskId(-1);
+
if (gMonSpritesGfxPtr == 0)
sub_806F2AC(0, 0);
- SetMainCallback2(sub_81BFAE4);
+
+ SetMainCallback2(SummaryScreen_LoadingCB2);
}
-void sub_81BFA38(void *a, u8 b, u8 c, void *d, u16 e)
+void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove)
{
- sub_81BF8EC(3, a, b, c, d);
- gUnknown_0203CF1C->unk40C4 = e;
+ ShowPokemonSummaryScreen(PSS_MODE_SELECT_MOVE, mons, monIndex, maxMonIndex, callback);
+ pssData->newMove = newMove;
}
-void sub_81BFA80(u8 a, void *b, u8 c, u8 d, void *e)
+void ShowPokemonSummaryScreenSet40EF(u8 mode, struct BoxPokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void))
{
- sub_81BF8EC(a, b, c, d, e);
- gUnknown_0203CF1C->unk40EF = 1;
+ ShowPokemonSummaryScreen(mode, mons, monIndex, maxMonIndex, callback);
+ pssData->unk40EF = TRUE;
}
-void sub_81BFAB4(void)
+static void SummaryScreen_MainCB2(void)
{
RunTasks();
AnimateSprites();
@@ -402,23 +1057,19 @@ void sub_81BFAB4(void)
UpdatePaletteFade();
}
-void sub_81BFAD0(void)
+static void SummaryScreen_VBlank(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-void sub_81BFAE4()
+static void SummaryScreen_LoadingCB2(void)
{
- while (1)
- {
- if (sub_81221EC() == 1 || sub_81BFB10() == TRUE || sub_81221AC() == 1)
- break;
- }
+ while (sub_81221EC() != TRUE && SummaryScreen_LoadGraphics() != TRUE && sub_81221AC() != TRUE);
}
-bool8 sub_81BFB10(void)
+static bool8 SummaryScreen_LoadGraphics(void)
{
switch (gMain.state)
{
@@ -446,12 +1097,12 @@ bool8 sub_81BFB10(void)
gMain.state++;
break;
case 5:
- sub_81BFE24();
- gUnknown_0203CF1C->unk40F0 = 0;
+ InitBGs();
+ pssData->unk40F0 = 0;
gMain.state++;
break;
case 6:
- if (sub_81BFEB0() != 0)
+ if (SummaryScreen_DecompressGraphics() != FALSE)
gMain.state++;
break;
case 7:
@@ -463,12 +1114,12 @@ bool8 sub_81BFB10(void)
gMain.state++;
break;
case 9:
- sub_81C0098(&gUnknown_0203CF1C->currentMon);
- gUnknown_0203CF1C->unk40F0 = 0;
+ CopyMonToSummaryStruct(&pssData->currentMon);
+ pssData->unk40F0 = 0;
gMain.state++;
break;
case 10:
- if (sub_81C00F0(&gUnknown_0203CF1C->currentMon) != 0)
+ if (ExtractMonDataToSummaryStruct(&pssData->currentMon) != 0)
gMain.state++;
break;
case 11:
@@ -476,11 +1127,11 @@ bool8 sub_81BFB10(void)
gMain.state++;
break;
case 12:
- sub_81C286C();
+ PrintPageNamesAndStatsPageToWindows();
gMain.state++;
break;
case 13:
- sub_81C2D9C(gUnknown_0203CF1C->unk40C0);
+ sub_81C2D9C(pssData->currPageIndex);
gMain.state++;
break;
case 14:
@@ -488,33 +1139,33 @@ bool8 sub_81BFB10(void)
gMain.state++;
break;
case 15:
- sub_81C2AFC(gUnknown_0203CF1C->unk40C0);
+ sub_81C2AFC(pssData->currPageIndex);
gMain.state++;
break;
case 16:
sub_81C4190();
sub_81C42C8();
- gUnknown_0203CF1C->unk40F0 = 0;
+ pssData->unk40F0 = 0;
gMain.state++;
break;
case 17:
- gUnknown_0203CF1C->unk40D3[0] = sub_81C45F4(&gUnknown_0203CF1C->currentMon, &gUnknown_0203CF1C->unk40F0);
- if (gUnknown_0203CF1C->unk40D3[0] != 0xFF)
+ pssData->spriteIds[0] = sub_81C45F4(&pssData->currentMon, &pssData->unk40F0);
+ if (pssData->spriteIds[0] != 0xFF)
{
- gUnknown_0203CF1C->unk40F0 = 0;
+ pssData->unk40F0 = 0;
gMain.state++;
}
break;
case 18:
- sub_81C4984(&gUnknown_0203CF1C->currentMon);
+ CreateMonMarkingsSprite(&pssData->currentMon);
gMain.state++;
break;
case 19:
- sub_81C4A08(&gUnknown_0203CF1C->currentMon);
+ CreateCaughtBallSprite(&pssData->currentMon);
gMain.state++;
break;
case 20:
- sub_81C4A88();
+ CreateSetStatusSprite();
gMain.state++;
break;
case 21:
@@ -522,7 +1173,7 @@ bool8 sub_81BFB10(void)
gMain.state++;
break;
case 22:
- if (gUnknown_0203CF1C->unk40BC != 3)
+ if (pssData->mode != PSS_MODE_SELECT_MOVE)
CreateTask(sub_81C0510, 0);
else
CreateTask(sub_81C171C, 0);
@@ -538,20 +1189,20 @@ bool8 sub_81BFB10(void)
gMain.state++;
break;
default:
- SetVBlankCallback(sub_81BFAD0);
- SetMainCallback2(sub_81BFAB4);
+ SetVBlankCallback(SummaryScreen_VBlank);
+ SetMainCallback2(SummaryScreen_MainCB2);
return TRUE;
}
return FALSE;
}
-void sub_81BFE24()
+static void InitBGs(void)
{
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, &gUnknown_0861CBB4, 4);
- SetBgTilemapBuffer(1, &gUnknown_0203CF1C->unkTilemap2);
- SetBgTilemapBuffer(2, &gUnknown_0203CF1C->unkTilemap1);
- SetBgTilemapBuffer(3, &gUnknown_0203CF1C->unkTilemap0);
+ InitBgsFromTemplates(0, gUnknown_0861CBB4, ARRAY_COUNT(gUnknown_0861CBB4));
+ SetBgTilemapBuffer(1, pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0]);
+ SetBgTilemapBuffer(2, pssData->bgTilemapBuffers[PSS_PAGE_SKILLS][0]);
+ SetBgTilemapBuffer(3, pssData->bgTilemapBuffers[PSS_PAGE_INFO][0]);
ResetAllBgsCoordinates();
schedule_bg_copy_tilemap_to_vram(1);
schedule_bg_copy_tilemap_to_vram(2);
@@ -564,90 +1215,90 @@ void sub_81BFE24()
ShowBg(3);
}
-u8 sub_81BFEB0()
+static bool8 SummaryScreen_DecompressGraphics(void)
{
- switch (gUnknown_0203CF1C->unk40F0)
+ switch (pssData->unk40F0)
{
case 0:
reset_temp_tile_data_buffers();
decompress_and_copy_tile_data_to_vram(1, &gUnknown_08D97D0C, 0, 0, 0);
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
break;
case 1:
if (free_temp_tile_data_buffers_if_possible() != 1)
{
- LZDecompressWram(&gUnknown_08D9862C, gUnknown_0203CF1C->unkTilemap0);
- gUnknown_0203CF1C->unk40F0++;
+ LZDecompressWram(&gUnknown_08D9862C, pssData->bgTilemapBuffers[PSS_PAGE_INFO][0]);
+ pssData->unk40F0++;
}
break;
case 2:
- LZDecompressWram(&gUnknown_08D98CC8, gUnknown_0203CF1C->unkTilemap0_1);
- gUnknown_0203CF1C->unk40F0++;
+ LZDecompressWram(&gUnknown_08D98CC8, pssData->bgTilemapBuffers[PSS_PAGE_INFO][1]);
+ pssData->unk40F0++;
break;
case 3:
- LZDecompressWram(&gUnknown_08D987FC, gUnknown_0203CF1C->unkTilemap1_1);
- gUnknown_0203CF1C->unk40F0++;
+ LZDecompressWram(&gUnknown_08D987FC, pssData->bgTilemapBuffers[PSS_PAGE_SKILLS][1]);
+ pssData->unk40F0++;
break;
case 4:
- LZDecompressWram(&gUnknown_08D9898C, gUnknown_0203CF1C->unkTilemap2_1);
- gUnknown_0203CF1C->unk40F0++;
+ LZDecompressWram(&gUnknown_08D9898C, pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][1]);
+ pssData->unk40F0++;
break;
case 5:
- LZDecompressWram(&gUnknown_08D98B28, gUnknown_0203CF1C->unkTilemap3_1);
- gUnknown_0203CF1C->unk40F0++;
+ LZDecompressWram(&gUnknown_08D98B28, pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][1]);
+ pssData->unk40F0++;
break;
case 6:
LoadCompressedPalette(&gUnknown_08D9853C, 0, 0x100);
LoadPalette(&gUnknown_08D85620, 0x81, 0x1E);
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
break;
case 7:
- LoadCompressedObjectPic(&gUnknown_0861CFBC);
- gUnknown_0203CF1C->unk40F0++;
+ LoadCompressedObjectPic(&sSpriteSheet_MoveTypes);
+ pssData->unk40F0++;
break;
case 8:
LoadCompressedObjectPic(&gUnknown_0861D074);
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
break;
case 9:
LoadCompressedObjectPic(&gUnknown_0861D0F8);
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
break;
case 10:
LoadCompressedObjectPalette(&gUnknown_0861D100);
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
break;
case 11:
LoadCompressedObjectPalette(&gUnknown_0861D07C);
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
break;
case 12:
LoadCompressedPalette(&gMoveTypes_Pal, 0x1D0, 0x60);
- gUnknown_0203CF1C->unk40F0 = 0;
- return 1;
+ pssData->unk40F0 = 0;
+ return TRUE;
}
- return 0;
+ return FALSE;
}
-void sub_81C0098(struct Pokemon *mon)
+static void CopyMonToSummaryStruct(struct Pokemon *mon)
{
- if (gUnknown_0203CF1C->unk40BD == 0)
+ if (!pssData->isBoxMon)
{
- struct Pokemon *partyMon = gUnknown_0203CF1C->unk0->mon;
- *mon = partyMon[gUnknown_0203CF1C->unk40BE];
+ struct Pokemon *partyMon = pssData->monList.mons;
+ *mon = partyMon[pssData->curMonIndex];
}
else
{
- struct BoxPokemon *boxMon = gUnknown_0203CF1C->unk0->boxMon;
- BoxMonToMon(&boxMon[gUnknown_0203CF1C->unk40BE], mon);
+ struct BoxPokemon *boxMon = pssData->monList.boxMons;
+ BoxMonToMon(&boxMon[pssData->curMonIndex], mon);
}
}
-bool8 sub_81C00F0(struct Pokemon *a)
+static bool8 ExtractMonDataToSummaryStruct(struct Pokemon *a)
{
u32 i;
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- switch (gUnknown_0203CF1C->unk40F0)
+ struct PokeSummary *sum = &pssData->summary;
+ switch (pssData->unk40F0)
{
case 0:
sum->species = GetMonData(a, MON_DATA_SPECIES);
@@ -658,10 +1309,12 @@ bool8 sub_81C00F0(struct Pokemon *a)
sum->item = GetMonData(a, MON_DATA_HELD_ITEM);
sum->pid = GetMonData(a, MON_DATA_PERSONALITY);
sum->sanity = GetMonData(a, MON_DATA_SANITY_BIT1);
- if (sum->sanity != 0)
- sum->isEgg = 1;
+
+ if (sum->sanity)
+ sum->isEgg = TRUE;
else
sum->isEgg = GetMonData(a, MON_DATA_IS_EGG);
+
break;
case 1:
for (i = 0; i < 4; i++)
@@ -672,7 +1325,7 @@ bool8 sub_81C00F0(struct Pokemon *a)
sum->ppBonuses = GetMonData(a, MON_DATA_PP_BONUSES);
break;
case 2:
- if ((struct Pokemon*)gUnknown_0203CF1C->unk0 == gPlayerParty || gUnknown_0203CF1C->unk40BC == 2 || gUnknown_0203CF1C->unk40EF == 1)
+ if (pssData->monList.mons == gPlayerParty || pssData->mode == PSS_MODE_UNK2 || pssData->unk40EF == TRUE)
{
sum->nature = GetNature(a);
sum->currentHP = GetMonData(a, MON_DATA_HP);
@@ -707,63 +1360,63 @@ bool8 sub_81C00F0(struct Pokemon *a)
sum->friendship = GetMonData(a, MON_DATA_FRIENDSHIP);
break;
default:
- sum->ribbons = GetMonData(a, MON_DATA_RIBBON_COUNT);
+ sum->ribbonCount = GetMonData(a, MON_DATA_RIBBON_COUNT);
return TRUE;
}
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
return FALSE;
}
-void sub_81C0348(void)
+static void sub_81C0348(void)
{
- if (gUnknown_0203CF1C->unk40C0 != 2 && gUnknown_0203CF1C->unk40C0 != 3)
+ if (pssData->currPageIndex != PSS_PAGE_BATTLE_MOVES && pssData->currPageIndex != PSS_PAGE_CONTEST_MOVES)
{
sub_81C1DA4(0, 255);
sub_81C1EFC(0, 255, 0);
}
else
{
- sub_81C240C(gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6]);
- sub_81C2194(&gUnknown_0203CF1C->unkTilemap2[0], 3, 0);
- sub_81C2194(&gUnknown_0203CF1C->unkTilemap3[0], 1, 0);
- SetBgTilemapBuffer(1, &gUnknown_0203CF1C->unkTilemap3);
- SetBgTilemapBuffer(2, &gUnknown_0203CF1C->unkTilemap2);
+ sub_81C240C(pssData->summary.moves[pssData->firstMoveIndex]);
+ sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], 3, 0);
+ sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], 1, 0);
+ SetBgTilemapBuffer(1, pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0]);
+ SetBgTilemapBuffer(2, pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0]);
ChangeBgX(2, 0x10000, 1);
- ClearWindowTilemap(0x13);
- ClearWindowTilemap(0xD);
+ ClearWindowTilemap(19);
+ ClearWindowTilemap(13);
}
- if (gUnknown_0203CF1C->summary.unk7 == 0)
+ if (pssData->summary.unk7 == 0)
{
sub_81C2074(0, 0xFF);
}
else
{
- if (gUnknown_0203CF1C->unk40C0 != 2 && gUnknown_0203CF1C->unk40C0 != 3)
- PutWindowTilemap(0xD);
+ if (pssData->currPageIndex != PSS_PAGE_BATTLE_MOVES && pssData->currPageIndex != PSS_PAGE_CONTEST_MOVES)
+ PutWindowTilemap(13);
}
sub_81C2524();
- sub_81C2228(&gUnknown_0203CF1C->currentMon);
+ sub_81C2228(&pssData->currentMon);
}
-void sub_81C0434()
+static void sub_81C0434(void)
{
FreeAllWindowBuffers();
- Free(gUnknown_0203CF1C);
+ Free(pssData);
}
-void sub_81C044C(u8 taskId)
+static void sub_81C044C(u8 taskId)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
gTasks[taskId].func = sub_81C0484;
}
-void sub_81C0484(u8 taskId)
+static void sub_81C0484(u8 taskId)
{
- if (sub_81221EC() != 1 && !gPaletteFade.active)
+ if (sub_81221EC() != TRUE && !gPaletteFade.active)
{
- SetMainCallback2(gUnknown_0203CF1C->unk4);
- gUnknown_0203CF20 = gUnknown_0203CF1C->unk40BE;
- sub_81C4898();
+ SetMainCallback2(pssData->callback);
+ gUnknown_0203CF20 = pssData->curMonIndex;
+ SummaryScreen_DestroyUnknownTask();
ResetSpriteData();
FreeAllSpritePalettes();
StopCryAndClearCrySongs();
@@ -775,9 +1428,9 @@ void sub_81C0484(u8 taskId)
}
}
-void sub_81C0510(u8 taskId)
+static void sub_81C0510(u8 taskId)
{
- if (sub_81221EC() != 1 && !gPaletteFade.active)
+ if (sub_81221EC() != TRUE && !gPaletteFade.active)
{
if (gMain.newKeys & DPAD_UP)
{
@@ -797,9 +1450,9 @@ void sub_81C0510(u8 taskId)
}
else if (gMain.newKeys & A_BUTTON)
{
- if (gUnknown_0203CF1C->unk40C0 != 1)
+ if (pssData->currPageIndex != PSS_PAGE_SKILLS)
{
- if (gUnknown_0203CF1C->unk40C0 == 0)
+ if (pssData->currPageIndex == PSS_PAGE_INFO)
{
sub_81C48F0();
PlaySE(SE_SELECT);
@@ -821,15 +1474,15 @@ void sub_81C0510(u8 taskId)
}
}
-void sub_81C0604(u8 taskId, s8 a)
+static void sub_81C0604(u8 taskId, s8 a)
{
s8 r4_2;
- if (gUnknown_0203CF1C->unk40C3 == 0)
+ if (!pssData->unk40C3)
{
- if (gUnknown_0203CF1C->unk40BD == 1)
+ if (pssData->isBoxMon == TRUE)
{
- if (gUnknown_0203CF1C->unk40C0 != 0)
+ if (pssData->currPageIndex != PSS_PAGE_INFO)
{
if (a == 1)
a = 0;
@@ -843,7 +1496,7 @@ void sub_81C0604(u8 taskId, s8 a)
else
a = 3;
}
- r4_2 = sub_80D214C(gUnknown_0203CF1C->unk0, gUnknown_0203CF1C->unk40BE, gUnknown_0203CF1C->unk40BF, a);
+ r4_2 = sub_80D214C(pssData->monList.boxMons, pssData->curMonIndex, pssData->maxMonIndex, a);
}
else if (sub_81B1250() == 1)
{
@@ -857,21 +1510,21 @@ void sub_81C0604(u8 taskId, s8 a)
if (r4_2 != -1)
{
PlaySE(SE_SELECT);
- if (gUnknown_0203CF1C->summary.unk7 != 0)
+ if (pssData->summary.unk7 != 0)
{
sub_81C4204(2, 1);
- ClearWindowTilemap(0xD);
+ ClearWindowTilemap(13);
schedule_bg_copy_tilemap_to_vram(0);
sub_81C2074(0, 2);
}
- gUnknown_0203CF1C->unk40BE = r4_2;
+ pssData->curMonIndex = r4_2;
gTasks[taskId].data[0] = 0;
gTasks[taskId].func = sub_81C0704;
}
}
}
-void sub_81C0704(u8 taskId)
+static void sub_81C0704(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -881,37 +1534,37 @@ void sub_81C0704(u8 taskId)
StopCryAndClearCrySongs();
break;
case 1:
- sub_81C4898();
- DestroySpriteAndFreeResources(&gSprites[gUnknown_0203CF1C->unk40D3[0]]);
+ SummaryScreen_DestroyUnknownTask();
+ DestroySpriteAndFreeResources(&gSprites[pssData->spriteIds[0]]);
break;
case 2:
- DestroySpriteAndFreeResources(&gSprites[gUnknown_0203CF1C->unk40D3[1]]);
+ DestroySpriteAndFreeResources(&gSprites[pssData->spriteIds[1]]);
break;
case 3:
- sub_81C0098(&gUnknown_0203CF1C->currentMon);
- gUnknown_0203CF1C->unk40F0 = 0;
+ CopyMonToSummaryStruct(&pssData->currentMon);
+ pssData->unk40F0 = 0;
break;
case 4:
- if (sub_81C00F0(&gUnknown_0203CF1C->currentMon) == FALSE)
+ if (ExtractMonDataToSummaryStruct(&pssData->currentMon) == FALSE)
return;
break;
case 5:
- sub_81C49E0(&gUnknown_0203CF1C->currentMon);
+ RemoveAndCreateMonMarkingsSprite(&pssData->currentMon);
break;
case 6:
- sub_81C4A08(&gUnknown_0203CF1C->currentMon);
+ CreateCaughtBallSprite(&pssData->currentMon);
break;
case 7:
- if (gUnknown_0203CF1C->summary.unk7)
+ if (pssData->summary.unk7)
sub_81C2074(10, -2);
- sub_81C2228(&gUnknown_0203CF1C->currentMon);
+ sub_81C2228(&pssData->currentMon);
data[1] = 0;
break;
case 8:
- gUnknown_0203CF1C->unk40D3[0] = sub_81C45F4(&gUnknown_0203CF1C->currentMon, &data[1]);
- if (gUnknown_0203CF1C->unk40D3[0] == 0xFF)
+ pssData->spriteIds[0] = sub_81C45F4(&pssData->currentMon, &data[1]);
+ if (pssData->spriteIds[0] == 0xFF)
return;
- gSprites[gUnknown_0203CF1C->unk40D3[0]].data[2] = 1;
+ gSprites[pssData->spriteIds[0]].data[2] = 1;
sub_81C0E24();
data[1] = 0;
break;
@@ -922,11 +1575,11 @@ void sub_81C0704(u8 taskId)
sub_81C25E8();
break;
case 11:
- sub_81C2D9C(gUnknown_0203CF1C->unk40C0);
+ sub_81C2D9C(pssData->currPageIndex);
sub_81C2524();
break;
case 12:
- gSprites[gUnknown_0203CF1C->unk40D3[0]].data[2] = 0;
+ gSprites[pssData->spriteIds[0]].data[2] = 0;
break;
default:
if (sub_81221EC() == 0 && FuncIsActiveTask(sub_81C20F0) == 0)
@@ -939,51 +1592,52 @@ void sub_81C0704(u8 taskId)
data[0]++;
}
-s8 sub_81C08F8(s8 a)
+static s8 sub_81C08F8(s8 a)
{
- struct Pokemon *mon = gUnknown_0203CF1C->unk0->mon;
+ struct Pokemon *mon = pssData->monList.mons;
- if (gUnknown_0203CF1C->unk40C0 == 0)
+ if (pssData->currPageIndex == PSS_PAGE_INFO)
{
- if (a == -1 && gUnknown_0203CF1C->unk40BE == 0)
+ if (a == -1 && pssData->curMonIndex == 0)
return -1;
- if (a == 1 && gUnknown_0203CF1C->unk40BE >= gUnknown_0203CF1C->unk40BF)
+ else if (a == 1 && pssData->curMonIndex >= pssData->maxMonIndex)
return -1;
- return gUnknown_0203CF1C->unk40BE + a;
+ else
+ return pssData->curMonIndex + a;
}
else
{
- s8 index = gUnknown_0203CF1C->unk40BE;
+ s8 index = pssData->curMonIndex;
do
{
index += a;
- if (index < 0 || index > gUnknown_0203CF1C->unk40BF)
+ if (index < 0 || index > pssData->maxMonIndex)
return -1;
} while (GetMonData(&mon[index], MON_DATA_IS_EGG) != 0);
return index;
}
}
-s8 sub_81C09B4(s8 a)
+static s8 sub_81C09B4(s8 a)
{
- struct Pokemon *mon = gUnknown_0203CF1C->unk0->mon;
+ struct Pokemon *mon = pssData->monList.mons;
s8 r5 = 0;
u8 i;
for (i = 0; i < 6; i++)
{
- if (gUnknown_0861CC1C[i] == gUnknown_0203CF1C->unk40BE)
+ if (gUnknown_0861CC1C[i] == pssData->curMonIndex)
{
r5 = i;
break;
}
}
- while (1)
+ while (TRUE)
{
int b;
- s8* c = &gUnknown_0861CC1C[0];
+ const s8* c = gUnknown_0861CC1C;
r5 += a;
if (r5 < 0 || r5 >= 6)
@@ -994,45 +1648,46 @@ s8 sub_81C09B4(s8 a)
}
}
-bool8 sub_81C0A50(struct Pokemon* mon)
+static bool8 sub_81C0A50(struct Pokemon* mon)
{
- if (GetMonData(mon, MON_DATA_SPECIES) == 0)
+ if (GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NONE)
return FALSE;
- else if (gUnknown_0203CF1C->unk40BE != 0 || GetMonData(mon, MON_DATA_IS_EGG) == 0)
+ else if (pssData->curMonIndex != 0 || GetMonData(mon, MON_DATA_IS_EGG) == 0)
return TRUE;
else
return FALSE;
}
-void sub_81C0A8C(u8 taskId, s8 b)
+static void sub_81C0A8C(u8 taskId, s8 b)
{
- struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
+ struct PokeSummary *summary = &pssData->summary;
s16 *data = gTasks[taskId].data;
if (summary->isEgg)
return;
- if (b == -1 && gUnknown_0203CF1C->unk40C0 == gUnknown_0203CF1C->unk40C1)
+ else if (b == -1 && pssData->currPageIndex == pssData->minPageIndex)
return;
- if (b == 1 && gUnknown_0203CF1C->unk40C0 == gUnknown_0203CF1C->unk40C2)
+ else if (b == 1 && pssData->currPageIndex == pssData->maxPageIndex)
return;
+
PlaySE(SE_SELECT);
- sub_81C2C38(gUnknown_0203CF1C->unk40C0);
- gUnknown_0203CF1C->unk40C0 += b;
+ sub_81C2C38(pssData->currPageIndex);
+ pssData->currPageIndex += b;
data[0] = 0;
if (b == 1)
SetTaskFuncWithFollowupFunc(taskId, sub_81C0B8C, gTasks[taskId].func);
else
SetTaskFuncWithFollowupFunc(taskId, sub_81C0CC4, gTasks[taskId].func);
- sub_81C2DE4(gUnknown_0203CF1C->unk40C0);
+ sub_81C2DE4(pssData->currPageIndex);
sub_81C424C();
}
-void sub_81C0B8C(u8 taskId)
+static void sub_81C0B8C(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (data[0] == 0)
{
- if (gUnknown_0203CF1C->unk40C9 == 0)
+ if (pssData->unk40C9 == 0)
{
data[1] = 1;
SetBgAttribute(1, 7, 1);
@@ -1047,7 +1702,7 @@ void sub_81C0B8C(u8 taskId)
schedule_bg_copy_tilemap_to_vram(2);
}
ChangeBgX(data[1], 0, 0);
- SetBgTilemapBuffer(data[1], (u8*)gUnknown_0203CF1C + ((gUnknown_0203CF1C->unk40C0 << 12) + 0xBC));
+ SetBgTilemapBuffer(data[1], pssData->bgTilemapBuffers[pssData->currPageIndex][0]);
ShowBg(1);
ShowBg(2);
}
@@ -1057,25 +1712,25 @@ void sub_81C0B8C(u8 taskId)
gTasks[taskId].func = sub_81C0C68;
}
-void sub_81C0C68(u8 taskId)
+static void sub_81C0C68(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- gUnknown_0203CF1C->unk40C9 ^= 1;
+ pssData->unk40C9 ^= 1;
data[1] = 0;
data[0] = 0;
sub_81C1BA0();
- sub_81C2AFC(gUnknown_0203CF1C->unk40C0);
+ sub_81C2AFC(pssData->currPageIndex);
sub_81C4280();
sub_81C0E24();
SwitchTaskToFollowupFunc(taskId);
}
-void sub_81C0CC4(u8 taskId)
+static void sub_81C0CC4(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (data[0] == 0)
{
- if (gUnknown_0203CF1C->unk40C9 == 0)
+ if (pssData->unk40C9 == 0)
data[1] = 2;
else
data[1] = 1;
@@ -1087,10 +1742,10 @@ void sub_81C0CC4(u8 taskId)
gTasks[taskId].func = sub_81C0D44;
}
-void sub_81C0D44(u8 taskId)
+static void sub_81C0D44(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (gUnknown_0203CF1C->unk40C9 == 0)
+ if (pssData->unk40C9 == 0)
{
SetBgAttribute(1, 7, 1);
SetBgAttribute(2, 7, 2);
@@ -1102,48 +1757,48 @@ void sub_81C0D44(u8 taskId)
SetBgAttribute(1, 7, 2);
schedule_bg_copy_tilemap_to_vram(1);
}
- if (gUnknown_0203CF1C->unk40C0 > 1)
+ if (pssData->currPageIndex > 1)
{
- SetBgTilemapBuffer(data[1], (u8*)gUnknown_0203CF1C + ((gUnknown_0203CF1C->unk40C0 << 12) + 0xFFFFF0BC));
+ SetBgTilemapBuffer(data[1], (u8*)pssData + ((pssData->currPageIndex << 12) + 0xFFFFF0BC));
ChangeBgX(data[1], 0x10000, 0);
}
ShowBg(1);
ShowBg(2);
- gUnknown_0203CF1C->unk40C9 ^= 1;
+ pssData->unk40C9 ^= 1;
data[1] = 0;
data[0] = 0;
sub_81C1BA0();
- sub_81C2AFC(gUnknown_0203CF1C->unk40C0);
+ sub_81C2AFC(pssData->currPageIndex);
sub_81C4280();
sub_81C0E24();
SwitchTaskToFollowupFunc(taskId);
}
-void sub_81C0E24()
+static void sub_81C0E24(void)
{
- if (gUnknown_0203CF1C->unk40C0 == 1)
- sub_81C22CC(&gUnknown_0203CF1C->currentMon);
+ if (pssData->currPageIndex == 1)
+ DrawExperienceProgressBar(&pssData->currentMon);
}
-void sub_81C0E48(u8 taskId)
+static void sub_81C0E48(u8 taskId)
{
u16 move;
- gUnknown_0203CF1C->unk40C6 = 0;
- move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
+ pssData->firstMoveIndex = 0;
+ move = pssData->summary.moves[pssData->firstMoveIndex];
ClearWindowTilemap(0x13);
- if (gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible == 0)
+ if (gSprites[pssData->spriteIds[2]].invisible == 0)
ClearWindowTilemap(0xD);
sub_81C1DA4(9, -3);
sub_81C1EFC(9, -3, move);
- if (gUnknown_0203CF1C->unk40C8 == 0)
+ if (!pssData->unk40C8)
{
ClearWindowTilemap(5);
PutWindowTilemap(6);
}
- sub_81C2194(&gUnknown_0203CF1C->unkTilemap2[0], 3, 0);
- sub_81C2194(&gUnknown_0203CF1C->unkTilemap3[0], 1, 0);
- sub_81C3E9C(move);
- sub_81C3F44();
+ sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], 3, 0);
+ sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], 1, 0);
+ PrintMoveDetails(move);
+ PrintNewMoveDetailsOrCancelText();
sub_81C44F0();
schedule_bg_copy_tilemap_to_vram(0);
schedule_bg_copy_tilemap_to_vram(1);
@@ -1152,7 +1807,7 @@ void sub_81C0E48(u8 taskId)
gTasks[taskId].func = sub_81C0F44;
}
-void sub_81C0F44(u8 taskId)
+static void sub_81C0F44(u8 taskId)
{
u8 id = taskId;
s16 *data = gTasks[taskId].data;
@@ -1162,17 +1817,17 @@ void sub_81C0F44(u8 taskId)
if (gMain.newKeys & DPAD_UP)
{
data[0] = 4;
- sub_81C1070(data, -1, &gUnknown_0203CF1C->unk40C6);
+ sub_81C1070(data, -1, &pssData->firstMoveIndex);
}
else if (gMain.newKeys & DPAD_DOWN)
{
data[0] = 4;
- sub_81C1070(data, 1, &gUnknown_0203CF1C->unk40C6);
+ sub_81C1070(data, 1, &pssData->firstMoveIndex);
}
else if (gMain.newKeys & A_BUTTON)
{
- if (gUnknown_0203CF1C->unk40C8 == 1
- || (gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
+ if (pssData->unk40C8 == TRUE
+ || (pssData->newMove == MOVE_NONE && pssData->firstMoveIndex == MAX_MON_MOVES))
{
PlaySE(SE_SELECT);
sub_81C11F4(taskId);
@@ -1195,18 +1850,18 @@ void sub_81C0F44(u8 taskId)
}
}
-bool8 sub_81C1040(void)
+static bool8 sub_81C1040(void)
{
u8 i;
for (i = 1; i < 4; i++)
{
- if (gUnknown_0203CF1C->summary.moves[i] != 0)
+ if (pssData->summary.moves[i] != 0)
return TRUE;
}
return FALSE;
}
-void sub_81C1070(s16 *a, s8 b, u8 *c)
+static void sub_81C1070(s16 *a, s8 b, u8 *c)
{
s8 i;
s8 moveIndex;
@@ -1223,27 +1878,27 @@ void sub_81C1070(s16 *a, s8 b, u8 *c)
moveIndex = a[0];
if (moveIndex == 4)
{
- move = gUnknown_0203CF1C->unk40C4;
+ move = pssData->newMove;
break;
}
- move = gUnknown_0203CF1C->summary.moves[moveIndex];
+ move = pssData->summary.moves[moveIndex];
if (move != 0)
break;
}
sub_81C240C(move);
schedule_bg_copy_tilemap_to_vram(1);
schedule_bg_copy_tilemap_to_vram(2);
- sub_81C3E9C(move);
- if ((*c == 4 && gUnknown_0203CF1C->unk40C4 == 0) || a[1] == 1)
+ PrintMoveDetails(move);
+ if ((*c == 4 && pssData->newMove == MOVE_NONE) || a[1] == 1)
{
ClearWindowTilemap(19);
- if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
+ if (!gSprites[pssData->spriteIds[2]].invisible)
ClearWindowTilemap(13);
schedule_bg_copy_tilemap_to_vram(0);
sub_81C1DA4(9, -3);
sub_81C1EFC(9, -3, move);
}
- if (*c != 4 && moveIndex == 4 && gUnknown_0203CF1C->unk40C4 == 0)
+ if (*c != 4 && moveIndex == 4 && pssData->newMove == MOVE_NONE)
{
ClearWindowTilemap(14);
ClearWindowTilemap(15);
@@ -1252,22 +1907,22 @@ void sub_81C1070(s16 *a, s8 b, u8 *c)
sub_81C1EFC(0, 3, 0);
}
*c = moveIndex;
- if (c == &gUnknown_0203CF1C->unk40C6)
+ if (c == &pssData->firstMoveIndex)
sub_81C4D18(8);
else
sub_81C4D18(18);
}
-void sub_81C11F4(u8 taskId)
+static void sub_81C11F4(u8 taskId)
{
sub_81C4C60(8);
ClearWindowTilemap(6);
PutWindowTilemap(5);
- sub_81C3E9C(0);
- sub_81C2194(&gUnknown_0203CF1C->unkTilemap2[0], 3, 1);
- sub_81C2194(&gUnknown_0203CF1C->unkTilemap3[0], 1, 1);
+ PrintMoveDetails(0);
+ sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], 3, 1);
+ sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], 1, 1);
sub_81C4064();
- if (gUnknown_0203CF1C->unk40C6 != 4)
+ if (pssData->firstMoveIndex != MAX_MON_MOVES)
{
ClearWindowTilemap(14);
ClearWindowTilemap(15);
@@ -1280,506 +1935,160 @@ void sub_81C11F4(u8 taskId)
gTasks[taskId].func = sub_81C0510;
}
-void sub_81C129C(u8 taskId)
+static void sub_81C129C(u8 taskId)
{
- gUnknown_0203CF1C->unk40C7 = gUnknown_0203CF1C->unk40C6;
+ pssData->secondMoveIndex = pssData->firstMoveIndex;
sub_81C4C84(1);
sub_81C4AF8(18);
gTasks[taskId].func = sub_81C12E4;
}
-void sub_81C12E4(u8 taskId)
+static void sub_81C12E4(u8 taskId)
{
- u8 a = taskId;
s16* data = gTasks[taskId].data;
- if (sub_81221EC() != 1)
+
+ if (sub_81221EC() != TRUE)
{
if (gMain.newKeys & DPAD_UP)
{
data[0] = 3;
- sub_81C1070(&data[0], -1, &gUnknown_0203CF1C->unk40C7);
+ sub_81C1070(&data[0], -1, &pssData->secondMoveIndex);
}
else if (gMain.newKeys & DPAD_DOWN)
{
data[0] = 3;
- sub_81C1070(&data[0], 1, &gUnknown_0203CF1C->unk40C7);
+ sub_81C1070(&data[0], 1, &pssData->secondMoveIndex);
}
else if (gMain.newKeys & A_BUTTON)
{
- if (gUnknown_0203CF1C->unk40C6 == gUnknown_0203CF1C->unk40C7)
+ if (pssData->firstMoveIndex == pssData->secondMoveIndex)
{
sub_81C13B0(taskId, 0);
}
else
+ {
sub_81C13B0(taskId, 1);
+ }
}
else if (gMain.newKeys & B_BUTTON)
- sub_81C13B0(a, 0);
+ {
+ sub_81C13B0(taskId, 0);
+ }
}
}
-void sub_81C13B0(u8 taskId, u8 b)
+static void sub_81C13B0(u8 taskId, bool8 b)
{
u16 move;
+
PlaySE(SE_SELECT);
sub_81C4C84(0);
sub_81C4C60(18);
- if (b == 1)
+
+ if (b == TRUE)
{
- if (gUnknown_0203CF1C->unk40BD == 0)
+ if (!pssData->isBoxMon)
{
- struct Pokemon *why = gUnknown_0203CF1C->unk0->mon;
- sub_81C14BC(&why[gUnknown_0203CF1C->unk40BE], gUnknown_0203CF1C->unk40C6, gUnknown_0203CF1C->unk40C7);
+ struct Pokemon *why = pssData->monList.mons;
+ SwapMonMoves(&why[pssData->curMonIndex], pssData->firstMoveIndex, pssData->secondMoveIndex);
}
else
{
- struct BoxPokemon *why = gUnknown_0203CF1C->unk0->boxMon;
- sub_81C15EC(&why[gUnknown_0203CF1C->unk40BE], gUnknown_0203CF1C->unk40C6, gUnknown_0203CF1C->unk40C7);
+ struct BoxPokemon *why = pssData->monList.boxMons;
+ SwapBoxMonMoves(&why[pssData->curMonIndex], pssData->firstMoveIndex, pssData->secondMoveIndex);
}
- sub_81C0098(&gUnknown_0203CF1C->currentMon);
- sub_81C40A0(gUnknown_0203CF1C->unk40C6, gUnknown_0203CF1C->unk40C7);
- sub_81C4568(gUnknown_0203CF1C->unk40C6, gUnknown_0203CF1C->unk40C7);
- gUnknown_0203CF1C->unk40C6 = gUnknown_0203CF1C->unk40C7;
+ CopyMonToSummaryStruct(&pssData->currentMon);
+ sub_81C40A0(pssData->firstMoveIndex, pssData->secondMoveIndex);
+ sub_81C4568(pssData->firstMoveIndex, pssData->secondMoveIndex);
+ pssData->firstMoveIndex = pssData->secondMoveIndex;
}
- move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
- sub_81C3E9C(move);
+
+ move = pssData->summary.moves[pssData->firstMoveIndex];
+ PrintMoveDetails(move);
sub_81C240C(move);
schedule_bg_copy_tilemap_to_vram(1);
schedule_bg_copy_tilemap_to_vram(2);
gTasks[taskId].func = sub_81C0F44;
}
+static void SwapMonMoves(struct Pokemon *mon, u8 moveIndex1, u8 moveIndex2)
+{
+ struct PokeSummary* summary = &pssData->summary;
+
+ u16 move1 = summary->moves[moveIndex1];
+ u16 move2 = summary->moves[moveIndex2];
+ u8 move1pp = summary->pp[moveIndex1];
+ u8 move2pp = summary->pp[moveIndex2];
+ u8 ppBonuses = summary->ppBonuses;
+
+ // Calculate PP bonuses
+ u8 ppUpMask1 = gUnknown_08329D22[moveIndex1];
+ u8 ppBonusMove1 = (ppBonuses & ppUpMask1) >> (moveIndex1 * 2);
+ u8 ppUpMask2 = gUnknown_08329D22[moveIndex2];
+ u8 ppBonusMove2 = (ppBonuses & ppUpMask2) >> (moveIndex2 * 2);
+ ppBonuses &= ~ppUpMask1;
+ ppBonuses &= ~ppUpMask2;
+ ppBonuses |= (ppBonusMove1 << (moveIndex2 * 2)) + (ppBonusMove2 << (moveIndex1 * 2));
+
+ // Swap the moves
+ SetMonData(mon, MON_DATA_MOVE1 + moveIndex1, &move2);
+ SetMonData(mon, MON_DATA_MOVE1 + moveIndex2, &move1);
+ SetMonData(mon, MON_DATA_PP1 + moveIndex1, &move2pp);
+ SetMonData(mon, MON_DATA_PP1 + moveIndex2, &move1pp);
+ SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
+
+ summary->moves[moveIndex1] = move2;
+ summary->moves[moveIndex2] = move1;
+
+ summary->pp[moveIndex1] = move2pp;
+ summary->pp[moveIndex2] = move1pp;
+
+ summary->ppBonuses = ppBonuses;
+}
+
+static void SwapBoxMonMoves(struct BoxPokemon *mon, u8 moveIndex1, u8 moveIndex2)
+{
+ struct PokeSummary* summary = &pssData->summary;
+
+ u16 move1 = summary->moves[moveIndex1];
+ u16 move2 = summary->moves[moveIndex2];
+ u8 move1pp = summary->pp[moveIndex1];
+ u8 move2pp = summary->pp[moveIndex2];
+ u8 ppBonuses = summary->ppBonuses;
+
+ // Calculate PP bonuses
+ u8 ppUpMask1 = gUnknown_08329D22[moveIndex1];
+ u8 ppBonusMove1 = (ppBonuses & ppUpMask1) >> (moveIndex1 * 2);
+ u8 ppUpMask2 = gUnknown_08329D22[moveIndex2];
+ u8 ppBonusMove2 = (ppBonuses & ppUpMask2) >> (moveIndex2 * 2);
+ ppBonuses &= ~ppUpMask1;
+ ppBonuses &= ~ppUpMask2;
+ ppBonuses |= (ppBonusMove1 << (moveIndex2 * 2)) + (ppBonusMove2 << (moveIndex1 * 2));
+
+ // Swap the moves
+ SetBoxMonData(mon, MON_DATA_MOVE1 + moveIndex1, &move2);
+ SetBoxMonData(mon, MON_DATA_MOVE1 + moveIndex2, &move1);
+ SetBoxMonData(mon, MON_DATA_PP1 + moveIndex1, &move2pp);
+ SetBoxMonData(mon, MON_DATA_PP1 + moveIndex2, &move1pp);
+ SetBoxMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
+
+ summary->moves[moveIndex1] = move2;
+ summary->moves[moveIndex2] = move1;
+
+ summary->pp[moveIndex1] = move2pp;
+ summary->pp[moveIndex2] = move1pp;
+
+ summary->ppBonuses = ppBonuses;
+}
-#ifdef NONMATCHING
-void sub_81C14BC(struct Pokemon *mon, u8 swappingFromId, u8 swappingToId)
-{
- u16 localMoveTo;
- u16 localMoveFrom;
- u8 localPpTo;
- u8 localPpFrom;
- u8 localPpBonuses;
- u16* moveFromPtr;
- u16* moveToPtr;
- u8* ppFromPtr;
- u8* ppToPtr;
- u8* ppBonusesPtr;
-
- moveFromPtr = &gUnknown_0203CF1C->summary.moves[swappingFromId];
- localMoveFrom = *moveFromPtr;
-
- moveToPtr = &gUnknown_0203CF1C->summary.moves[swappingToId];
- localMoveTo = *moveToPtr;
-
- ppFromPtr = &gUnknown_0203CF1C->summary.pp[swappingFromId];
- localPpFrom = *ppFromPtr;
-
- ppToPtr = &gUnknown_0203CF1C->summary.pp[swappingToId];
- localPpTo = *ppToPtr;
-
- ppBonusesPtr = &gUnknown_0203CF1C->summary.ppBonuses;
- localPpBonuses = *ppBonusesPtr;
-
-{
- u8 bitsFrom, bitsTo;
-
- bitsFrom = (localPpBonuses & gUnknown_08329D22[swappingFromId]) >> (swappingFromId << 1);
- bitsTo = (localPpBonuses & gUnknown_08329D22[swappingToId]) >> (swappingToId << 1);
-
-
- localPpBonuses &= ~(gUnknown_08329D22[swappingFromId]);
- localPpBonuses &= ~(gUnknown_08329D22[swappingToId]);
-
- localPpBonuses |= ((bitsFrom << (swappingToId << 1)) + (bitsTo << (swappingToId << 1)));
-}
-
- SetMonData(mon, swappingFromId + MON_DATA_MOVE1, &localMoveTo);
- SetMonData(mon, swappingToId + MON_DATA_MOVE1, &localMoveFrom);
-
- SetMonData(mon, swappingFromId + MON_DATA_PP1, &localPpTo);
- SetMonData(mon, swappingToId + MON_DATA_PP1, &localPpFrom);
-
- SetMonData(mon, MON_DATA_PP_BONUSES, &localPpBonuses);
-
- *moveFromPtr = localMoveTo;
- *moveToPtr = localMoveFrom;
-
- *ppFromPtr = localPpTo;
- *ppToPtr = localPpFrom;
-
- *ppBonusesPtr = localPpBonuses;
-}
-#else
-NAKED
-void sub_81C14BC(struct Pokemon *mon, u8 swappingFromId, u8 swappingToId)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x28\n\
- adds r7, r0, 0\n\
- adds r4, r1, 0\n\
- adds r6, r2, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- lsls r6, 24\n\
- lsrs r6, 24\n\
- ldr r0, =gUnknown_0203CF1C\n\
- ldr r2, [r0]\n\
- lsls r0, r4, 1\n\
- mov r10, r0\n\
- adds r1, r2, 0\n\
- adds r1, 0x84\n\
- adds r0, r1, r0\n\
- str r0, [sp, 0x8]\n\
- ldrh r0, [r0]\n\
- mov r3, sp\n\
- adds r3, 0x2\n\
- str r3, [sp, 0x1C]\n\
- strh r0, [r3]\n\
- lsls r0, r6, 1\n\
- mov r9, r0\n\
- add r1, r9\n\
- str r1, [sp, 0xC]\n\
- ldrh r1, [r1]\n\
- mov r0, sp\n\
- strh r1, [r0]\n\
- adds r1, r2, 0\n\
- adds r1, 0x8C\n\
- adds r3, r1, r4\n\
- str r3, [sp, 0x10]\n\
- ldrb r0, [r3]\n\
- mov r3, sp\n\
- adds r3, 0x5\n\
- str r3, [sp, 0x24]\n\
- strb r0, [r3]\n\
- adds r1, r6\n\
- str r1, [sp, 0x14]\n\
- ldrb r0, [r1]\n\
- mov r1, sp\n\
- adds r1, 0x4\n\
- str r1, [sp, 0x20]\n\
- strb r0, [r1]\n\
- adds r2, 0xA4\n\
- str r2, [sp, 0x18]\n\
- ldrb r0, [r2]\n\
- mov r5, sp\n\
- adds r5, 0x6\n\
- strb r0, [r5]\n\
- ldr r1, =gUnknown_08329D22\n\
- adds r0, r4, r1\n\
- ldrb r0, [r0]\n\
- mov r8, r0\n\
- ldrb r0, [r5]\n\
- adds r2, r0, 0\n\
- mov r3, r8\n\
- ands r2, r3\n\
- mov r3, r10\n\
- asrs r2, r3\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- adds r1, r6, r1\n\
- ldrb r1, [r1]\n\
- mov r12, r1\n\
- adds r1, r0, 0\n\
- mov r3, r12\n\
- ands r1, r3\n\
- mov r3, r9\n\
- asrs r1, r3\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- mov r3, r8\n\
- bics r0, r3\n\
- strb r0, [r5]\n\
- ldrb r0, [r5]\n\
- mov r3, r12\n\
- bics r0, r3\n\
- strb r0, [r5]\n\
- mov r0, r9\n\
- lsls r2, r0\n\
- mov r3, r10\n\
- lsls r1, r3\n\
- adds r2, r1\n\
- ldrb r0, [r5]\n\
- orrs r0, r2\n\
- strb r0, [r5]\n\
- adds r1, r4, 0\n\
- adds r1, 0xD\n\
- adds r0, r7, 0\n\
- mov r2, sp\n\
- bl SetMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xD\n\
- adds r0, r7, 0\n\
- ldr r2, [sp, 0x1C]\n\
- bl SetMonData\n\
- adds r4, 0x11\n\
- adds r0, r7, 0\n\
- adds r1, r4, 0\n\
- ldr r2, [sp, 0x20]\n\
- bl SetMonData\n\
- adds r6, 0x11\n\
- adds r0, r7, 0\n\
- adds r1, r6, 0\n\
- ldr r2, [sp, 0x24]\n\
- bl SetMonData\n\
- adds r0, r7, 0\n\
- movs r1, 0x15\n\
- adds r2, r5, 0\n\
- bl SetMonData\n\
- mov r0, sp\n\
- ldrh r0, [r0]\n\
- ldr r1, [sp, 0x8]\n\
- strh r0, [r1]\n\
- ldr r3, [sp, 0x1C]\n\
- ldrh r0, [r3]\n\
- ldr r1, [sp, 0xC]\n\
- strh r0, [r1]\n\
- ldr r3, [sp, 0x20]\n\
- ldrb r0, [r3]\n\
- ldr r1, [sp, 0x10]\n\
- strb r0, [r1]\n\
- ldr r3, [sp, 0x24]\n\
- ldrb r0, [r3]\n\
- ldr r1, [sp, 0x14]\n\
- strb r0, [r1]\n\
- ldrb r0, [r5]\n\
- ldr r3, [sp, 0x18]\n\
- strb r0, [r3]\n\
- add sp, 0x28\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided\n");
-}
-#endif
-
-#ifdef NONMATCHING
-void sub_81C15EC(struct BoxPokemon *mon, u8 swappingFromId, u8 swappingToId)
-{
- u16 localMoveTo;
- u16 localMoveFrom;
- u8 localPpTo;
- u8 localPpFrom;
- u8 localPpBonuses;
- u16* moveFromPtr;
- u16* moveToPtr;
- u8* ppFromPtr;
- u8* ppToPtr;
- u8* ppBonusesPtr;
-
- moveFromPtr = &gUnknown_0203CF1C->summary.moves[swappingFromId];
- localMoveFrom = *moveFromPtr;
-
- moveToPtr = &gUnknown_0203CF1C->summary.moves[swappingToId];
- localMoveTo = *moveToPtr;
-
- ppFromPtr = &gUnknown_0203CF1C->summary.pp[swappingFromId];
- localPpFrom = *ppFromPtr;
-
- ppToPtr = &gUnknown_0203CF1C->summary.pp[swappingToId];
- localPpTo = *ppToPtr;
-
- ppBonusesPtr = &gUnknown_0203CF1C->summary.ppBonuses;
- localPpBonuses = *ppBonusesPtr;
-
-{
- u8 bitsFrom, bitsTo;
-
- bitsFrom = (localPpBonuses & gUnknown_08329D22[swappingFromId]) >> (swappingFromId << 1);
- bitsTo = (localPpBonuses & gUnknown_08329D22[swappingToId]) >> (swappingToId << 1);
-
-
- localPpBonuses &= ~(gUnknown_08329D22[swappingFromId]);
- localPpBonuses &= ~(gUnknown_08329D22[swappingToId]);
-
- localPpBonuses |= ((bitsFrom << (swappingToId << 1)) + (bitsTo << (swappingToId << 1)));
-}
-
- SetBoxMonData(mon, swappingFromId + MON_DATA_MOVE1, &localMoveTo);
- SetBoxMonData(mon, swappingToId + MON_DATA_MOVE1, &localMoveFrom);
-
- SetBoxMonData(mon, swappingFromId + MON_DATA_PP1, &localPpTo);
- SetBoxMonData(mon, swappingToId + MON_DATA_PP1, &localPpFrom);
-
- SetBoxMonData(mon, MON_DATA_PP_BONUSES, &localPpBonuses);
-
- *moveFromPtr = localMoveTo;
- *moveToPtr = localMoveFrom;
-
- *ppFromPtr = localPpTo;
- *ppToPtr = localPpFrom;
-
- *ppBonusesPtr = localPpBonuses;
-}
-#else
-NAKED
-void sub_81C15EC(struct BoxPokemon *mon, u8 swappingFromId, u8 swappingToId)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x28\n\
- adds r7, r0, 0\n\
- adds r4, r1, 0\n\
- adds r6, r2, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- lsls r6, 24\n\
- lsrs r6, 24\n\
- ldr r0, =gUnknown_0203CF1C\n\
- ldr r2, [r0]\n\
- lsls r0, r4, 1\n\
- mov r10, r0\n\
- adds r1, r2, 0\n\
- adds r1, 0x84\n\
- adds r0, r1, r0\n\
- str r0, [sp, 0x8]\n\
- ldrh r0, [r0]\n\
- mov r3, sp\n\
- adds r3, 0x2\n\
- str r3, [sp, 0x1C]\n\
- strh r0, [r3]\n\
- lsls r0, r6, 1\n\
- mov r9, r0\n\
- add r1, r9\n\
- str r1, [sp, 0xC]\n\
- ldrh r1, [r1]\n\
- mov r0, sp\n\
- strh r1, [r0]\n\
- adds r1, r2, 0\n\
- adds r1, 0x8C\n\
- adds r3, r1, r4\n\
- str r3, [sp, 0x10]\n\
- ldrb r0, [r3]\n\
- mov r3, sp\n\
- adds r3, 0x5\n\
- str r3, [sp, 0x24]\n\
- strb r0, [r3]\n\
- adds r1, r6\n\
- str r1, [sp, 0x14]\n\
- ldrb r0, [r1]\n\
- mov r1, sp\n\
- adds r1, 0x4\n\
- str r1, [sp, 0x20]\n\
- strb r0, [r1]\n\
- adds r2, 0xA4\n\
- str r2, [sp, 0x18]\n\
- ldrb r0, [r2]\n\
- mov r5, sp\n\
- adds r5, 0x6\n\
- strb r0, [r5]\n\
- ldr r1, =gUnknown_08329D22\n\
- adds r0, r4, r1\n\
- ldrb r0, [r0]\n\
- mov r8, r0\n\
- ldrb r0, [r5]\n\
- adds r2, r0, 0\n\
- mov r3, r8\n\
- ands r2, r3\n\
- mov r3, r10\n\
- asrs r2, r3\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- adds r1, r6, r1\n\
- ldrb r1, [r1]\n\
- mov r12, r1\n\
- adds r1, r0, 0\n\
- mov r3, r12\n\
- ands r1, r3\n\
- mov r3, r9\n\
- asrs r1, r3\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- mov r3, r8\n\
- bics r0, r3\n\
- strb r0, [r5]\n\
- ldrb r0, [r5]\n\
- mov r3, r12\n\
- bics r0, r3\n\
- strb r0, [r5]\n\
- mov r0, r9\n\
- lsls r2, r0\n\
- mov r3, r10\n\
- lsls r1, r3\n\
- adds r2, r1\n\
- ldrb r0, [r5]\n\
- orrs r0, r2\n\
- strb r0, [r5]\n\
- adds r1, r4, 0\n\
- adds r1, 0xD\n\
- adds r0, r7, 0\n\
- mov r2, sp\n\
- bl SetBoxMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xD\n\
- adds r0, r7, 0\n\
- ldr r2, [sp, 0x1C]\n\
- bl SetBoxMonData\n\
- adds r4, 0x11\n\
- adds r0, r7, 0\n\
- adds r1, r4, 0\n\
- ldr r2, [sp, 0x20]\n\
- bl SetBoxMonData\n\
- adds r6, 0x11\n\
- adds r0, r7, 0\n\
- adds r1, r6, 0\n\
- ldr r2, [sp, 0x24]\n\
- bl SetBoxMonData\n\
- adds r0, r7, 0\n\
- movs r1, 0x15\n\
- adds r2, r5, 0\n\
- bl SetBoxMonData\n\
- mov r0, sp\n\
- ldrh r0, [r0]\n\
- ldr r1, [sp, 0x8]\n\
- strh r0, [r1]\n\
- ldr r3, [sp, 0x1C]\n\
- ldrh r0, [r3]\n\
- ldr r1, [sp, 0xC]\n\
- strh r0, [r1]\n\
- ldr r3, [sp, 0x20]\n\
- ldrb r0, [r3]\n\
- ldr r1, [sp, 0x10]\n\
- strb r0, [r1]\n\
- ldr r3, [sp, 0x24]\n\
- ldrb r0, [r3]\n\
- ldr r1, [sp, 0x14]\n\
- strb r0, [r1]\n\
- ldrb r0, [r5]\n\
- ldr r3, [sp, 0x18]\n\
- strb r0, [r3]\n\
- add sp, 0x28\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided\n");
-}
-#endif
-
-void sub_81C171C(u8 taskId)
+static void sub_81C171C(u8 taskId)
{
sub_81C44F0();
sub_81C4AF8(8);
gTasks[taskId].func = sub_81C174C;
}
-void sub_81C174C(u8 taskId)
+static void sub_81C174C(u8 taskId)
{
s16* data = gTasks[taskId].data;
@@ -1790,12 +2099,12 @@ void sub_81C174C(u8 taskId)
if (gMain.newKeys & DPAD_UP)
{
data[0] = 4;
- sub_81C1070(data, -1, &gUnknown_0203CF1C->unk40C6);
+ sub_81C1070(data, -1, &pssData->firstMoveIndex);
}
else if (gMain.newKeys & DPAD_DOWN)
{
data[0] = 4;
- sub_81C1070(data, 1, &gUnknown_0203CF1C->unk40C6);
+ sub_81C1070(data, 1, &pssData->firstMoveIndex);
}
else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1)
{
@@ -1811,7 +2120,7 @@ void sub_81C174C(u8 taskId)
{
sub_81C48F0();
PlaySE(SE_SELECT);
- gUnknown_0203CF21 = gUnknown_0203CF1C->unk40C6;
+ gUnknown_0203CF21 = pssData->firstMoveIndex;
gSpecialVar_0x8005 = gUnknown_0203CF21;
sub_81C044C(taskId);
}
@@ -1834,26 +2143,26 @@ void sub_81C174C(u8 taskId)
}
}
-bool8 sub_81C18A8()
+static bool8 sub_81C18A8(void)
{
- if (gUnknown_0203CF1C->unk40C6 == 4 || gUnknown_0203CF1C->unk40C4 == 0 || sub_81B6D14(gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6]) != 1)
+ if (pssData->firstMoveIndex == MAX_MON_MOVES || pssData->newMove == MOVE_NONE || sub_81B6D14(pssData->summary.moves[pssData->firstMoveIndex]) != 1)
return TRUE;
else
return FALSE;
}
-void sub_81C18F4(u8 taskId)
+static void sub_81C18F4(u8 taskId)
{
ClearWindowTilemap(14);
ClearWindowTilemap(15);
schedule_bg_copy_tilemap_to_vram(0);
sub_81C1DA4(0, 3);
sub_81C1EFC(0, 3, 0);
- sub_81C4154();
+ PrintHMMovesCantBeForgotten();
gTasks[taskId].func = sub_81C1940;
}
-void sub_81C1940(u8 taskId)
+static void sub_81C1940(u8 taskId)
{
s16* data = gTasks[taskId].data;
u16 move;
@@ -1863,7 +2172,7 @@ void sub_81C1940(u8 taskId)
{
data[1] = 1;
data[0] = 4;
- sub_81C1070(&data[0], -1, &gUnknown_0203CF1C->unk40C6);
+ sub_81C1070(&data[0], -1, &pssData->firstMoveIndex);
data[1] = 0;
gTasks[taskId].func = sub_81C174C;
}
@@ -1871,19 +2180,18 @@ void sub_81C1940(u8 taskId)
{
data[1] = 1;
data[0] = 4;
- sub_81C1070(&data[0], 1, &gUnknown_0203CF1C->unk40C6);
+ sub_81C1070(&data[0], 1, &pssData->firstMoveIndex);
data[1] = 0;
gTasks[taskId].func = sub_81C174C;
}
else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1)
{
- if (gUnknown_0203CF1C->unk40C0 != 2)
+ if (pssData->currPageIndex != 2)
{
-
ClearWindowTilemap(19);
- if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
+ if (!gSprites[pssData->spriteIds[2]].invisible)
ClearWindowTilemap(13);
- move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
+ move = pssData->summary.moves[pssData->firstMoveIndex];
gTasks[taskId].func = sub_81C174C;
sub_81C0A8C(taskId, -1);
sub_81C1DA4(9, -2);
@@ -1892,12 +2200,12 @@ void sub_81C1940(u8 taskId)
}
else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2)
{
- if (gUnknown_0203CF1C->unk40C0 != 3)
+ if (pssData->currPageIndex != 3)
{
ClearWindowTilemap(19);
- if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
+ if (!gSprites[pssData->spriteIds[2]].invisible)
ClearWindowTilemap(13);
- move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
+ move = pssData->summary.moves[pssData->firstMoveIndex];
gTasks[taskId].func = sub_81C174C;
sub_81C0A8C(taskId, 1);
sub_81C1DA4(9, -2);
@@ -1907,10 +2215,10 @@ void sub_81C1940(u8 taskId)
else if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
ClearWindowTilemap(19);
- if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
+ if (!gSprites[pssData->spriteIds[2]].invisible)
ClearWindowTilemap(13);
- move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
- sub_81C3E9C(move);
+ move = pssData->summary.moves[pssData->firstMoveIndex];
+ PrintMoveDetails(move);
schedule_bg_copy_tilemap_to_vram(0);
sub_81C1DA4(9, -3);
sub_81C1EFC(9, -3, move);
@@ -1919,69 +2227,71 @@ void sub_81C1940(u8 taskId)
}
}
-u8 sub_81C1B94()
+u8 sub_81C1B94(void)
{
return gUnknown_0203CF21;
}
-void sub_81C1BA0()
+static void sub_81C1BA0(void)
{
u16 *alloced = Alloc(32);
u8 i;
+
for (i = 0; i < 4; i++)
{
- u8 j = i << 1;
- if (i < gUnknown_0203CF1C->unk40C1)
+ u8 j = i * 2;
+
+ if (i < pssData->minPageIndex)
{
- alloced[j+0] = 0x40;
- alloced[j+1] = 0x40;
- alloced[j+8] = 0x50;
- alloced[j+9] = 0x50;
+ alloced[j + 0] = 0x40;
+ alloced[j + 1] = 0x40;
+ alloced[j + 8] = 0x50;
+ alloced[j + 9] = 0x50;
}
- else if (i > gUnknown_0203CF1C->unk40C2)
+ else if (i > pssData->maxPageIndex)
{
- alloced[j+0] = 0x4A;
- alloced[j+1] = 0x4A;
- alloced[j+8] = 0x5A;
- alloced[j+9] = 0x5A;
+ alloced[j + 0] = 0x4A;
+ alloced[j + 1] = 0x4A;
+ alloced[j + 8] = 0x5A;
+ alloced[j + 9] = 0x5A;
}
- else if (i < gUnknown_0203CF1C->unk40C0)
+ else if (i < pssData->currPageIndex)
{
- alloced[j+0] = 0x46;
- alloced[j+1] = 0x47;
- alloced[j+8] = 0x56;
- alloced[j+9] = 0x57;
+ alloced[j + 0] = 0x46;
+ alloced[j + 1] = 0x47;
+ alloced[j + 8] = 0x56;
+ alloced[j + 9] = 0x57;
}
- else if (i == gUnknown_0203CF1C->unk40C0)
+ else if (i == pssData->currPageIndex)
{
- if (i != gUnknown_0203CF1C->unk40C2)
+ if (i != pssData->maxPageIndex)
{
- alloced[j+0] = 0x41;
- alloced[j+1] = 0x42;
- alloced[j+8] = 0x51;
- alloced[j+9] = 0x52;
+ alloced[j + 0] = 0x41;
+ alloced[j + 1] = 0x42;
+ alloced[j + 8] = 0x51;
+ alloced[j + 9] = 0x52;
}
else
{
- alloced[j+0] = 0x4B;
- alloced[j+1] = 0x4C;
- alloced[j+8] = 0x5B;
- alloced[j+9] = 0x5C;
+ alloced[j + 0] = 0x4B;
+ alloced[j + 1] = 0x4C;
+ alloced[j + 8] = 0x5B;
+ alloced[j + 9] = 0x5C;
}
}
- else if (i != gUnknown_0203CF1C->unk40C2)
+ else if (i != pssData->maxPageIndex)
{
- alloced[j+0] = 0x43;
- alloced[j+1] = 0x44;
- alloced[j+8] = 0x53;
- alloced[j+9] = 0x54;
+ alloced[j + 0] = 0x43;
+ alloced[j + 1] = 0x44;
+ alloced[j + 8] = 0x53;
+ alloced[j + 9] = 0x54;
}
else
{
- alloced[j+0] = 0x48;
- alloced[j+1] = 0x49;
- alloced[j+8] = 0x58;
- alloced[j+9] = 0x59;
+ alloced[j + 0] = 0x48;
+ alloced[j + 1] = 0x49;
+ alloced[j + 8] = 0x58;
+ alloced[j + 9] = 0x59;
}
}
CopyToBgTilemapBufferRect_ChangePalette(3, alloced, 11, 0, 8, 2, 16);
@@ -1989,181 +2299,42 @@ void sub_81C1BA0()
Free(alloced);
}
-struct UnkStruct_61CC04
-{
- u8 *ptr;
- u8 field_4;
- u8 field_5;
- u8 field_6;
- u8 field_7;
- u8 field_8;
- u8 field_9;
-};
-
-#ifdef NONMATCHING
-void sub_81C1CB0(struct UnkStruct_61CC04 *a, u16 *b, u8 c, u8 d)
+static void sub_81C1CB0(const struct UnkStruct_61CC04 *unkStruct, u16 *dest, u8 c, bool8 d)
{
- u8 *alloced = Alloc(a->field_6 * (a->field_7 << 1));
- CpuFill16(a->field_4, alloced, a->field_7*a->field_6);
- if (a->field_6 != c)
+ 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)
{
if (!d)
{
- for (d;d < a->field_7; d++)
+ for (i = 0; i < unkStruct->field_7; i++)
{
- CpuCopy16(&a->ptr + ((c + a->field_6*d)), alloced + ((a->field_6*d) << 1), (a->field_6 - c) * 2);
+ CpuCopy16(&unkStruct->ptr[c + unkStruct->field_6 * i], &alloced[unkStruct->field_6 * i], (unkStruct->field_6 - c) * 2);
}
}
else
{
- for (d = 0;d < a->field_7; d++)
+ for (i = 0; i < unkStruct->field_7; i++)
{
- CpuCopy16(&a->ptr + (a->field_6*d), alloced + ((c + a->field_6*d) << 1), (a->field_6 - c) * 2);
+ CpuCopy16(&unkStruct->ptr[unkStruct->field_6 * i], &alloced[c + unkStruct->field_6 * i], (unkStruct->field_6 - c) * 2);
}
}
}
- d = 0;
- while (d < a->field_7)
+ for (i = 0; i < unkStruct->field_7; i++)
{
- CpuCopy16(alloced + ((a->field_6*d) << 1), b + ((((a->field_9 + d) << 5) + a->field_8) << 1), a->field_6 * 2);
- d++;
+ CpuCopy16(&alloced[unkStruct->field_6 * i], &dest[(unkStruct->field_9 + i) * 32 + unkStruct->field_8], unkStruct->field_6 * 2);
}
Free(alloced);
}
-#else
-NAKED
-void sub_81C1CB0(struct UnkStruct_61CC04 *a, u16 *b, u8 c, u8 d)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- sub sp, 0x4\n\
- adds r4, r0, 0\n\
- mov r8, r1\n\
- lsls r2, 24\n\
- lsrs r6, r2, 24\n\
- lsls r3, 24\n\
- lsrs r5, r3, 24\n\
- ldrb r1, [r4, 0x6]\n\
- ldrb r0, [r4, 0x7]\n\
- lsls r0, 1\n\
- muls r0, r1\n\
- bl Alloc\n\
- adds r7, r0, 0\n\
- mov r1, sp\n\
- ldrh r0, [r4, 0x4]\n\
- strh r0, [r1]\n\
- ldrb r1, [r4, 0x7]\n\
- ldrb r0, [r4, 0x6]\n\
- adds r2, r1, 0\n\
- muls r2, r0\n\
- movs r0, 0x80\n\
- lsls r0, 17\n\
- orrs r2, r0\n\
- mov r0, sp\n\
- adds r1, r7, 0\n\
- bl CpuSet\n\
- ldrb r0, [r4, 0x6]\n\
- cmp r0, r6\n\
- beq _081C1D60\n\
- cmp r5, 0\n\
- bne _081C1D30\n\
- movs r5, 0\n\
- ldrb r0, [r4, 0x7]\n\
- cmp r5, r0\n\
- bcs _081C1D60\n\
-_081C1D00:\n\
- ldrb r2, [r4, 0x6]\n\
- adds r1, r2, 0\n\
- muls r1, r5\n\
- adds r3, r6, r1\n\
- lsls r3, 1\n\
- ldr r0, [r4]\n\
- adds r0, r3\n\
- lsls r1, 1\n\
- adds r1, r7, r1\n\
- subs r2, r6\n\
- ldr r3, =0x001fffff\n\
- ands r2, r3\n\
- bl CpuSet\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- ldrb r3, [r4, 0x7]\n\
- cmp r5, r3\n\
- bcc _081C1D00\n\
- b _081C1D60\n\
- .pool\n\
-_081C1D30:\n\
- movs r5, 0\n\
- ldrb r0, [r4, 0x7]\n\
- cmp r5, r0\n\
- bcs _081C1D60\n\
-_081C1D38:\n\
- ldrb r2, [r4, 0x6]\n\
- adds r1, r2, 0\n\
- muls r1, r5\n\
- lsls r3, r1, 1\n\
- ldr r0, [r4]\n\
- adds r0, r3\n\
- adds r1, r6, r1\n\
- lsls r1, 1\n\
- adds r1, r7, r1\n\
- subs r2, r6\n\
- ldr r3, =0x001fffff\n\
- ands r2, r3\n\
- bl CpuSet\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- ldrb r3, [r4, 0x7]\n\
- cmp r5, r3\n\
- bcc _081C1D38\n\
-_081C1D60:\n\
- movs r5, 0\n\
- b _081C1D8A\n\
- .pool\n\
-_081C1D68:\n\
- ldrb r2, [r4, 0x6]\n\
- adds r0, r2, 0\n\
- muls r0, r5\n\
- lsls r0, 1\n\
- adds r0, r7, r0\n\
- ldrb r1, [r4, 0x9]\n\
- adds r1, r5\n\
- lsls r1, 5\n\
- ldrb r3, [r4, 0x8]\n\
- adds r1, r3\n\
- lsls r1, 1\n\
- add r1, r8\n\
- bl CpuSet\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
-_081C1D8A:\n\
- ldrb r0, [r4, 0x7]\n\
- cmp r5, r0\n\
- bcc _081C1D68\n\
- adds r0, r7, 0\n\
- bl Free\n\
- add sp, 0x4\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
-}
-#endif
-
-void sub_81C1DA4(u16 a, s16 b)
+
+static void sub_81C1DA4(u16 a, s16 b)
{
if (b > gUnknown_0861CC04.field_6)
b = gUnknown_0861CC04.field_6;
if (b == 0 || b == gUnknown_0861CC04.field_6)
{
- sub_81C1CB0(&gUnknown_0861CC04, &gUnknown_0203CF1C->unkTilemap2[0], b, 1);
+ sub_81C1CB0(&gUnknown_0861CC04, pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], b, 1);
}
else
{
@@ -2177,7 +2348,7 @@ void sub_81C1DA4(u16 a, s16 b)
}
}
-void sub_81C1E20(u8 taskId)
+static void sub_81C1E20(u8 taskId)
{
s16 *data = gTasks[taskId].data;
data[1] += data[0];
@@ -2189,18 +2360,17 @@ void sub_81C1E20(u8 taskId)
{
data[1] = gUnknown_0861CC04.field_6;
}
- sub_81C1CB0(&gUnknown_0861CC04, &gUnknown_0203CF1C->unkTilemap2[0], data[1], 1);
+ sub_81C1CB0(&gUnknown_0861CC04, pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], data[1], 1);
if (data[1] <= 0 || data[1] >= gUnknown_0861CC04.field_6)
{
if (data[0] < 0)
{
- if (gUnknown_0203CF1C->unk40C0 == 2)
+ if (pssData->currPageIndex == 2)
PutWindowTilemap(14);
-
}
else
{
- if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
+ if (!gSprites[pssData->spriteIds[2]].invisible)
PutWindowTilemap(13);
PutWindowTilemap(19);
}
@@ -2211,12 +2381,12 @@ void sub_81C1E20(u8 taskId)
schedule_bg_copy_tilemap_to_vram(2);
}
-void sub_81C1EFC(u16 a, s16 b, u16 move)
+static void sub_81C1EFC(u16 a, s16 b, u16 move)
{
if (b > gUnknown_0861CC10.field_6)
b = gUnknown_0861CC10.field_6;
if (b == 0 || b == gUnknown_0861CC10.field_6)
- sub_81C1CB0(&gUnknown_0861CC10, &gUnknown_0203CF1C->unkTilemap3[0], b, 1);
+ sub_81C1CB0(&gUnknown_0861CC10, pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], b, 1);
else
{
u8 taskId = FindTaskIdByFunc(sub_81C1F80);
@@ -2228,7 +2398,7 @@ void sub_81C1EFC(u16 a, s16 b, u16 move)
}
}
-void sub_81C1F80(u8 taskId)
+static void sub_81C1F80(u8 taskId)
{
s16 *data = gTasks[taskId].data;
data[1] += data[0];
@@ -2240,18 +2410,18 @@ void sub_81C1F80(u8 taskId)
{
data[1] = gUnknown_0861CC10.field_6;
}
- sub_81C1CB0(&gUnknown_0861CC10, &gUnknown_0203CF1C->unkTilemap3[0], data[1], 1);
+ sub_81C1CB0(&gUnknown_0861CC10, pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], data[1], 1);
if (data[1] <= 0 || data[1] >= gUnknown_0861CC10.field_6)
{
if (data[0] < 0)
{
- if (gUnknown_0203CF1C->unk40C0 == 3 && FuncIsActiveTask(sub_81C0B8C) == 0)
+ if (pssData->currPageIndex == 3 && FuncIsActiveTask(sub_81C0B8C) == 0)
PutWindowTilemap(15);
sub_81C240C(data[2]);
}
else
{
- if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
+ if (!gSprites[pssData->spriteIds[2]].invisible)
{
PutWindowTilemap(13);
}
@@ -2264,14 +2434,14 @@ void sub_81C1F80(u8 taskId)
schedule_bg_copy_tilemap_to_vram(2);
}
-void sub_81C2074(u16 a, s16 b)
+static void sub_81C2074(u16 a, s16 b)
{
if (b > gUnknown_0861CBEC.field_6)
b = gUnknown_0861CBEC.field_6;
if (b == 0 || b == gUnknown_0861CBEC.field_6)
{
- sub_81C1CB0(&gUnknown_0861CBEC, &gUnknown_0203CF1C->unkTilemap0[0], b, 0);
- sub_81C1CB0(&gUnknown_0861CBF8, &gUnknown_0203CF1C->unkTilemap0[0], b, 0);
+ sub_81C1CB0(&gUnknown_0861CBEC, pssData->bgTilemapBuffers[PSS_PAGE_INFO][0], b, 0);
+ sub_81C1CB0(&gUnknown_0861CBF8, pssData->bgTilemapBuffers[PSS_PAGE_INFO][0], b, 0);
}
else
{
@@ -2281,7 +2451,7 @@ void sub_81C2074(u16 a, s16 b)
}
}
-void sub_81C20F0(u8 taskId)
+static void sub_81C20F0(u8 taskId)
{
s16 *data = gTasks[taskId].data;
data[1] += data[0];
@@ -2289,14 +2459,14 @@ void sub_81C20F0(u8 taskId)
data[1] = 0;
else if (data[1] > gUnknown_0861CBEC.field_6)
data[1] = gUnknown_0861CBEC.field_6;
- sub_81C1CB0(&gUnknown_0861CBEC, &gUnknown_0203CF1C->unkTilemap0[0], data[1], 0);
- sub_81C1CB0(&gUnknown_0861CBF8, &gUnknown_0203CF1C->unkTilemap0[0], data[1], 0);
+ sub_81C1CB0(&gUnknown_0861CBEC, pssData->bgTilemapBuffers[PSS_PAGE_INFO][0], data[1], 0);
+ sub_81C1CB0(&gUnknown_0861CBF8, pssData->bgTilemapBuffers[PSS_PAGE_INFO][0], data[1], 0);
schedule_bg_copy_tilemap_to_vram(3);
if (data[1] <= 0 || data[1] >= gUnknown_0861CBEC.field_6)
{
if (data[0] < 0)
{
- sub_81C4A88();
+ CreateSetStatusSprite();
PutWindowTilemap(13);
schedule_bg_copy_tilemap_to_vram(0);
}
@@ -2304,387 +2474,325 @@ void sub_81C20F0(u8 taskId)
}
}
-// somebody send help this is a complete fucking mess
-#ifdef NONMATCHING
-void sub_81C2194(u16 *a, u16 b, u8 c)
+static void sub_81C2194(u16 *output, u16 palette, bool8 c)
{
u16 i;
- int var;
- b *= 0x1000;
+ u32 var;
+
+ palette *= 0x1000;
var = 0x56A;
if (c == 0)
{
for (i = 0; i < 20; i++)
{
- a[(i + var) << 1] = gSummaryScreenWindow_Tilemap[i] + b;
- a[((i + var) << 1) + 0x40] = gSummaryScreenWindow_Tilemap[i] + b;
- a[((i + var) << 1) + 0x80] = gSummaryScreenWindow_Tilemap[i + 20] + b;
+ output[var + i] = gSummaryScreenWindow_Tilemap[i] + palette;
+ output[var + i + 0x20] = gSummaryScreenWindow_Tilemap[i] + palette;
+ output[var + i + 0x40] = gSummaryScreenWindow_Tilemap[i + 20] + palette;
}
}
else
{
for (i = 0; i < 20; i++)
{
- a[(i + var)] = gSummaryScreenWindow_Tilemap[i + 20] + b;
- a[((i + var)) + 0x40] = gSummaryScreenWindow_Tilemap[i + 40] + b;
- a[((i + var)) + 0x80] = gSummaryScreenWindow_Tilemap[i + 40] + b;
- }
- }
-}
-#else
-NAKED
-void sub_81C2194(u16 *a, u16 b, u8 c)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- adds r6, r0, 0\n\
- lsls r2, 24\n\
- lsls r1, 28\n\
- lsrs r4, r1, 16\n\
- ldr r7, =0x0000056a\n\
- cmp r2, 0\n\
- bne _081C21E4\n\
- movs r3, 0\n\
- ldr r5, =gSummaryScreenWindow_Tilemap\n\
-_081C21A8:\n\
- adds r2, r7, r3\n\
- lsls r2, 1\n\
- adds r2, r6\n\
- lsls r0, r3, 1\n\
- adds r0, r5\n\
- ldrh r1, [r0]\n\
- adds r1, r4, r1\n\
- strh r1, [r2]\n\
- adds r0, r2, 0\n\
- adds r0, 0x40\n\
- strh r1, [r0]\n\
- adds r2, 0x80\n\
- adds r0, r3, 0\n\
- adds r0, 0x14\n\
- lsls r0, 1\n\
- adds r0, r5\n\
- ldrh r0, [r0]\n\
- adds r0, r4, r0\n\
- strh r0, [r2]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x13\n\
- bls _081C21A8\n\
- b _081C221C\n\
- .pool\n\
-_081C21E4:\n\
- movs r3, 0\n\
- ldr r5, =gSummaryScreenWindow_Tilemap\n\
-_081C21E8:\n\
- adds r1, r7, r3\n\
- lsls r1, 1\n\
- adds r1, r6\n\
- adds r0, r3, 0\n\
- adds r0, 0x14\n\
- lsls r0, 1\n\
- adds r0, r5\n\
- ldrh r0, [r0]\n\
- adds r0, r4, r0\n\
- strh r0, [r1]\n\
- adds r2, r1, 0\n\
- adds r2, 0x40\n\
- adds r0, r3, 0\n\
- adds r0, 0x28\n\
- lsls r0, 1\n\
- adds r0, r5\n\
- ldrh r0, [r0]\n\
- adds r0, r4, r0\n\
- strh r0, [r2]\n\
- adds r1, 0x80\n\
- strh r0, [r1]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x13\n\
- bls _081C21E8\n\
-_081C221C:\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided\n");
-}
-#endif
-
-void sub_81C2228(struct Pokemon *mon)
+ output[var + i] = gSummaryScreenWindow_Tilemap[i + 20] + palette;
+ output[var + i + 0x20] = gSummaryScreenWindow_Tilemap[i + 40] + palette;
+ output[var + i + 0x40] = gSummaryScreenWindow_Tilemap[i + 40] + palette;
+ }
+ }
+}
+
+static void sub_81C2228(struct Pokemon *mon)
{
if (!CheckPartyPokerus(mon, 0) && CheckPartyHasHadPokerus(mon, 0))
{
- gUnknown_0203CF1C->unkTilemap0[0x223] = 0x2C;
- gUnknown_0203CF1C->unkTilemap0_1[0x223] = 0x2C;
+ pssData->bgTilemapBuffers[PSS_PAGE_INFO][0][0x223] = 0x2C;
+ pssData->bgTilemapBuffers[PSS_PAGE_INFO][1][0x223] = 0x2C;
}
else
{
- gUnknown_0203CF1C->unkTilemap0[0x223] = 0x81A;
- gUnknown_0203CF1C->unkTilemap0_1[0x223] = 0x81A;
+ pssData->bgTilemapBuffers[PSS_PAGE_INFO][0][0x223] = 0x81A;
+ pssData->bgTilemapBuffers[PSS_PAGE_INFO][1][0x223] = 0x81A;
}
schedule_bg_copy_tilemap_to_vram(3);
}
-void sub_81C228C(u8 a)
+static void sub_81C228C(bool8 isMonShiny)
{
- if (a == 0)
+ if (!isMonShiny)
sub_8199C30(3, 1, 4, 8, 8, 0);
else
sub_8199C30(3, 1, 4, 8, 8, 5);
schedule_bg_copy_tilemap_to_vram(3);
}
-void sub_81C22CC(struct Pokemon *unused)
+static void DrawExperienceProgressBar(struct Pokemon *unused)
{
- s64 r6r7;
- struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
+ s64 numExpProgressBarTicks;
+ struct PokeSummary *summary = &pssData->summary;
u16 *r9;
u8 i;
if (summary->level < MAX_MON_LEVEL)
{
- u32 r1 = gExperienceTables[gBaseStats[summary->species].growthRate][summary->level + 1] - gExperienceTables[gBaseStats[summary->species].growthRate][summary->level];
- u32 r4 = summary->exp - gExperienceTables[gBaseStats[summary->species].growthRate][summary->level];
-
- r6r7 = r4 * 64 / r1;
- if (r6r7 == 0 && r4 != 0)
- r6r7 = 1;
+ u32 expBetweenLevels = gExperienceTables[gBaseStats[summary->species].growthRate][summary->level + 1] - gExperienceTables[gBaseStats[summary->species].growthRate][summary->level];
+ u32 expSinceLastLevel = summary->exp - gExperienceTables[gBaseStats[summary->species].growthRate][summary->level];
+
+ // Calculate the number of 1-pixel "ticks" to illuminate in the experience progress bar.
+ // There are 8 tiles that make up the bar, and each tile has 8 "ticks". Hence, the numerator
+ // is multiplied by 64.
+ numExpProgressBarTicks = expSinceLastLevel * 64 / expBetweenLevels;
+ if (numExpProgressBarTicks == 0 && expSinceLastLevel != 0)
+ numExpProgressBarTicks = 1;
}
else
{
- r6r7 = 0;
+ numExpProgressBarTicks = 0;
}
- r9 = &gUnknown_0203CF1C->unkTilemap1_1[0x255];
+ r9 = &pssData->bgTilemapBuffers[PSS_PAGE_SKILLS][1][0x255];
for (i = 0; i < 8; i++)
{
- if (r6r7 > 7)
+ if (numExpProgressBarTicks > 7)
r9[i] = 0x206A;
else
- r9[i] = 0x2062 + (r6r7 % 8);
- r6r7 -= 8;
- if (r6r7 < 0)
- r6r7 = 0;
+ r9[i] = 0x2062 + (numExpProgressBarTicks % 8);
+ numExpProgressBarTicks -= 8;
+ if (numExpProgressBarTicks < 0)
+ numExpProgressBarTicks = 0;
}
- if (GetBgTilemapBuffer(1) == gUnknown_0203CF1C->unkTilemap1)
+ if (GetBgTilemapBuffer(1) == pssData->bgTilemapBuffers[PSS_PAGE_SKILLS][0])
schedule_bg_copy_tilemap_to_vram(1);
else
schedule_bg_copy_tilemap_to_vram(2);
}
-void sub_81C240C(u16 move)
+static void sub_81C240C(u16 move)
{
- u16* r5 = &gUnknown_0203CF1C->unkTilemap3_1[0];
+ u16 *tilemap = pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][1];
u8 i;
- u8 r4;
+ u8 effectValue;
+
if (move != MOVE_NONE)
{
- r4 = gContestEffects[gContestMoves[move].effect].appeal;
- if (r4 != 0xFF)
- r4 /= 10;
- for (i = 0;i < 8; i++)
+ effectValue = gContestEffects[gContestMoves[move].effect].appeal;
+
+ if (effectValue != 0xFF)
+ effectValue /= 10;
+
+ for (i = 0; i < 8; i++)
{
- if (r4 != 0xFF && i < r4)
+ if (effectValue != 0xFF && i < effectValue)
{
- r5[((i>>2)*32)+(i&3)+0x1E6] = 0x103A;
+ tilemap[(i / 4 * 32) + (i & 3) + 0x1E6] = 0x103A;
}
else
- r5[((i>>2)*32)+(i&3)+0x1E6] = 0x1039;
+ {
+ tilemap[(i / 4 * 32) + (i & 3) + 0x1E6] = 0x1039;
+ }
}
- r4 = gContestEffects[gContestMoves[move].effect].jam;
- if (r4 != 0xFF)
- r4 /= 10;
- for (i = 0;i < 8; i++)
+
+ effectValue = gContestEffects[gContestMoves[move].effect].jam;
+
+ if (effectValue != 0xFF)
+ effectValue /= 10;
+
+ for (i = 0; i < 8; i++)
{
- if (r4 != 0xFF && i < r4)
+ if (effectValue != 0xFF && i < effectValue)
{
- r5[((i>>2)*32)+(i&3)+0x226] = 0x103C;
+ tilemap[(i / 4 * 32) + (i & 3) + 0x226] = 0x103C;
}
else
- r5[((i>>2)*32)+(i&3)+0x226] = 0x103D;
+ {
+ tilemap[(i / 4 * 32) + (i & 3) + 0x226] = 0x103D;
+ }
}
}
}
-void sub_81C2524()
+static void sub_81C2524(void)
{
- if (gUnknown_0203CF1C->summary.isEgg != 0)
+ if (pssData->summary.isEgg)
ChangeBgX(3, 0x10000, 0);
else
ChangeBgX(3, 0, 0);
}
-void sub_81C2554()
+static void sub_81C2554(void)
{
u8 i;
- InitWindows(&gUnknown_0861CC24);
+ InitWindows(gUnknown_0861CC24);
DeactivateAllTextPrinters();
+
for (i = 0; i < 20; i++)
+ {
FillWindowPixelBuffer(i, 0);
+ }
for (i = 0; i < 8; i++)
- gUnknown_0203CF1C->unk40CB[i] |= 0xFF;
+ {
+ pssData->windowIds[i] = 0xFF;
+ }
}
-void sub_81C25A4(u8 a, const u8 *b, u8 c, u8 d, u8 e, u8 f)
+static void SummaryScreen_PrintTextOnWindow(u8 windowId, const u8 *string, u8 x, u8 y, u8 lineSpacing, u8 colorId)
{
- AddTextPrinterParameterized2(a, 1, c, d, 0, e, gUnknown_0861CD2C[f], 0, b);
+ AddTextPrinterParameterized4(windowId, 1, x, y, 0, lineSpacing, sTextColors_861CD2C[colorId], 0, string);
}
-void sub_81C25E8()
+static void sub_81C25E8(void)
{
FillWindowPixelBuffer(17, 0);
FillWindowPixelBuffer(18, 0);
FillWindowPixelBuffer(19, 0);
- if (gUnknown_0203CF1C->summary.isEgg == 0)
+ if (!pssData->summary.isEgg)
sub_81C2628();
else
sub_81C2794();
schedule_bg_copy_tilemap_to_vram(0);
}
-void sub_81C2628()
+static void sub_81C2628(void)
{
u8 strArray[16];
- struct Pokemon *mon = &gUnknown_0203CF1C->currentMon;
- struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
- u16 r5 = SpeciesToPokedexNum(summary->species);
- if (r5 != 0xFFFF)
+ struct Pokemon *mon = &pssData->currentMon;
+ struct PokeSummary *summary = &pssData->summary;
+ u16 dexNum = SpeciesToPokedexNum(summary->species);
+ if (dexNum != 0xFFFF)
{
StringCopy(gStringVar1, &gText_UnkCtrlF908Clear01[0]);
- ConvertIntToDecimalStringN(gStringVar2, r5, 2, 3);
+ ConvertIntToDecimalStringN(gStringVar2, dexNum, 2, 3);
StringAppend(gStringVar1, gStringVar2);
- if (IsMonShiny(mon) == 0)
+ if (!IsMonShiny(mon))
{
- sub_81C25A4(17, gStringVar1, 0, 1, 0, 1);
- sub_81C228C(0);
+ SummaryScreen_PrintTextOnWindow(17, gStringVar1, 0, 1, 0, 1);
+ sub_81C228C(FALSE);
}
else
{
- sub_81C25A4(17, gStringVar1, 0, 1, 0, 7);
- sub_81C228C(1);
+ SummaryScreen_PrintTextOnWindow(17, gStringVar1, 0, 1, 0, 7);
+ sub_81C228C(TRUE);
}
PutWindowTilemap(17);
}
else
{
ClearWindowTilemap(17);
- if (IsMonShiny(mon) == 0)
- sub_81C228C(0);
+ if (!IsMonShiny(mon))
+ sub_81C228C(FALSE);
else
- sub_81C228C(1);
+ sub_81C228C(TRUE);
}
StringCopy(gStringVar1, &gText_LevelSymbol[0]);
ConvertIntToDecimalStringN(gStringVar2, summary->level, 0, 3);
StringAppend(gStringVar1, gStringVar2);
- sub_81C25A4(19, gStringVar1, 0x18, 17, 0, 1);
+ SummaryScreen_PrintTextOnWindow(19, gStringVar1, 0x18, 17, 0, 1);
GetMonNickname(mon, gStringVar1);
- sub_81C25A4(18, gStringVar1, 0, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(18, gStringVar1, 0, 1, 0, 1);
strArray[0] = CHAR_SLASH;
StringCopy(&strArray[1], &gSpeciesNames[summary->species2][0]);
- sub_81C25A4(19, &strArray[0], 0, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(19, &strArray[0], 0, 1, 0, 1);
sub_81C27DC(mon, summary->species2);
PutWindowTilemap(18);
PutWindowTilemap(19);
}
-void sub_81C2794()
+static void sub_81C2794(void)
{
- GetMonNickname(&gUnknown_0203CF1C->currentMon, gStringVar1);
- sub_81C25A4(18, gStringVar1, 0, 1, 0, 1);
+ GetMonNickname(&pssData->currentMon, gStringVar1);
+ SummaryScreen_PrintTextOnWindow(18, gStringVar1, 0, 1, 0, 1);
PutWindowTilemap(18);
ClearWindowTilemap(17);
ClearWindowTilemap(19);
}
-void sub_81C27DC(struct Pokemon *mon, u16 a)
+static void sub_81C27DC(struct Pokemon *mon, u16 species)
{
- if (a != SPECIES_NIDORAN_M && a != SPECIES_NIDORAN_F)
+ if (species != SPECIES_NIDORAN_M && species != SPECIES_NIDORAN_F)
{
u8 gender = GetMonGender(mon);
switch (gender)
{
- case 0:
- sub_81C25A4(0x13, &gText_MaleSymbol[0], 0x39, 17, 0, 3);
+ case MON_MALE:
+ SummaryScreen_PrintTextOnWindow(19, gText_MaleSymbol, 57, 17, 0, 3);
break;
- case 0xFE:
- sub_81C25A4(0x13, &gText_FemaleSymbol[0], 0x39, 17, 0, 4);
+ case MON_FEMALE:
+ SummaryScreen_PrintTextOnWindow(19, gText_FemaleSymbol, 57, 17, 0, 4);
break;
}
}
}
-void sub_81C2838(u8 a, bool8 b, u32 c)
-{
- BlitBitmapToWindow(a, (b) ? &gUnknown_0861CDD3[0] : &gUnknown_0861CDD3[0] - 0x80, c, 0, 16, 16);
-}
-
-void sub_81C286C()
-{
- int r4;
- int r2;
- int temp;
- sub_81C25A4(0, gText_PkmnInfo, 2, 1, 0, 1);
- sub_81C25A4(1, gText_PkmnSkills, 2, 1, 0, 1);
- sub_81C25A4(2, gText_BattleMoves, 2, 1, 0, 1);
- sub_81C25A4(3, gText_ContestMoves, 2, 1, 0, 1);
- r4 = GetStringRightAlignXOffset(1, gText_Cancel2, 0x3E);
- r2 = r4 - 16;
- if (r2 < 0)
- r2 = 0;
- sub_81C2838(4, 0, r2);
- sub_81C25A4(4, gText_Cancel2, r4, 1, 0, 0);
- r4 = GetStringRightAlignXOffset(1, gText_Info, 0x3E);
- r2 = r4 - 16;
- if (r2 < 0)
- r2 = 0;
- sub_81C2838(5, 0, r2);
- sub_81C25A4(5, gText_Info, r4, 1, 0, 0);
- r4 = GetStringRightAlignXOffset(1, gText_Switch, 0x3E);
- r2 = r4 - 16;
- if (r2 < 0)
- r2 = 0;
- sub_81C2838(6, 0, r2);
- sub_81C25A4(6, gText_Switch, r4, 1, 0, 0);
- sub_81C25A4(8, gText_RentalPkmn, 0, 1, 0, 1);
- sub_81C25A4(9, gText_TypeSlash, 0, 1, 0, 0);
- temp = 6;
- temp += GetStringCenterAlignXOffset(1, gText_HP4, 42);
- sub_81C25A4(10, gText_HP4, temp, 1, 0, 1);
- temp = 6;
- temp += GetStringCenterAlignXOffset(1, gText_Attack3, 42);
- sub_81C25A4(10, gText_Attack3, temp, 17, 0, 1);
- temp = 6;
- temp += GetStringCenterAlignXOffset(1, gText_Defense3, 42);
- sub_81C25A4(10, gText_Defense3, temp, 33, 0, 1);
- temp = 2;
- temp += GetStringCenterAlignXOffset(1, gText_SpAtk4, 36);
- sub_81C25A4(11, gText_SpAtk4, temp, 1, 0, 1);
- temp = 2;
- temp += GetStringCenterAlignXOffset(1, gText_SpDef4, 36);
- sub_81C25A4(11, gText_SpDef4, temp, 17, 0, 1);
- temp = 2;
- temp += GetStringCenterAlignXOffset(1, gText_Speed2, 36);
- sub_81C25A4(11, gText_Speed2, temp, 33, 0, 1);
- sub_81C25A4(12, gText_ExpPoints, 6, 1, 0, 1);
- sub_81C25A4(12, gText_NextLv, 6, 17, 0, 1);
- sub_81C25A4(13, gText_Status, 2, 1, 0, 1);
- sub_81C25A4(14, gText_Power, 0, 1, 0, 1);
- sub_81C25A4(14, gText_Accuracy2, 0, 17, 0, 1);
- sub_81C25A4(15, gText_Appeal, 0, 1, 0, 1);
- sub_81C25A4(15, gText_Jam, 0, 17, 0, 1);
-}
-
-void sub_81C2AFC(u8 a)
+static void PrintAOrBButtonIcon(u8 windowId, bool8 bButton, u32 x)
+{
+ BlitBitmapToWindow(windowId, (bButton) ? gUnknown_0861CDD3 : gUnknown_0861CDD3 - 0x80, x, 0, 16, 16);
+}
+
+static void PrintPageNamesAndStatsPageToWindows(void)
+{
+ int stringXPos;
+ int iconXPos;
+ int statsXPos;
+
+ SummaryScreen_PrintTextOnWindow(0, gText_PkmnInfo, 2, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(1, gText_PkmnSkills, 2, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(2, gText_BattleMoves, 2, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(3, gText_ContestMoves, 2, 1, 0, 1);
+
+ stringXPos = GetStringRightAlignXOffset(1, gText_Cancel2, 62);
+ iconXPos = stringXPos - 16;
+ if (iconXPos < 0)
+ iconXPos = 0;
+ PrintAOrBButtonIcon(4, FALSE, iconXPos);
+ SummaryScreen_PrintTextOnWindow(4, gText_Cancel2, stringXPos, 1, 0, 0);
+
+ stringXPos = GetStringRightAlignXOffset(1, gText_Info, 0x3E);
+ iconXPos = stringXPos - 16;
+ if (iconXPos < 0)
+ iconXPos = 0;
+ PrintAOrBButtonIcon(5, FALSE, iconXPos);
+ SummaryScreen_PrintTextOnWindow(5, gText_Info, stringXPos, 1, 0, 0);
+
+ stringXPos = GetStringRightAlignXOffset(1, gText_Switch, 0x3E);
+ iconXPos = stringXPos - 16;
+ if (iconXPos < 0)
+ iconXPos = 0;
+ PrintAOrBButtonIcon(6, FALSE, iconXPos);
+ SummaryScreen_PrintTextOnWindow(6, gText_Switch, stringXPos, 1, 0, 0);
+
+ SummaryScreen_PrintTextOnWindow(8, gText_RentalPkmn, 0, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(9, gText_TypeSlash, 0, 1, 0, 0);
+ statsXPos = 6 + GetStringCenterAlignXOffset(1, gText_HP4, 42);
+ SummaryScreen_PrintTextOnWindow(10, gText_HP4, statsXPos, 1, 0, 1);
+ statsXPos = 6 + GetStringCenterAlignXOffset(1, gText_Attack3, 42);
+ SummaryScreen_PrintTextOnWindow(10, gText_Attack3, statsXPos, 17, 0, 1);
+ statsXPos = 6 + GetStringCenterAlignXOffset(1, gText_Defense3, 42);
+ SummaryScreen_PrintTextOnWindow(10, gText_Defense3, statsXPos, 33, 0, 1);
+ statsXPos = 2 + GetStringCenterAlignXOffset(1, gText_SpAtk4, 36);
+ SummaryScreen_PrintTextOnWindow(11, gText_SpAtk4, statsXPos, 1, 0, 1);
+ statsXPos = 2 + GetStringCenterAlignXOffset(1, gText_SpDef4, 36);
+ SummaryScreen_PrintTextOnWindow(11, gText_SpDef4, statsXPos, 17, 0, 1);
+ statsXPos = 2 + GetStringCenterAlignXOffset(1, gText_Speed2, 36);
+ SummaryScreen_PrintTextOnWindow(11, gText_Speed2, statsXPos, 33, 0, 1);
+ SummaryScreen_PrintTextOnWindow(12, gText_ExpPoints, 6, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(12, gText_NextLv, 6, 17, 0, 1);
+ SummaryScreen_PrintTextOnWindow(13, gText_Status, 2, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(14, gText_Power, 0, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(14, gText_Accuracy2, 0, 17, 0, 1);
+ SummaryScreen_PrintTextOnWindow(15, gText_Appeal, 0, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(15, gText_Jam, 0, 17, 0, 1);
+}
+
+static void sub_81C2AFC(u8 a)
{
u8 i;
+
ClearWindowTilemap(0);
ClearWindowTilemap(1);
ClearWindowTilemap(2);
ClearWindowTilemap(3);
+
switch (a)
{
case 0:
@@ -2702,33 +2810,39 @@ void sub_81C2AFC(u8 a)
break;
case 2:
PutWindowTilemap(2);
- if (gUnknown_0203CF1C->unk40BC == 3)
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if(!(gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
+ if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
PutWindowTilemap(14);
}
else
+ {
PutWindowTilemap(5);
+ }
break;
case 3:
PutWindowTilemap(3);
- if (gUnknown_0203CF1C->unk40BC == 3)
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if(!(gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
+ if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
PutWindowTilemap(15);
}
else
+ {
PutWindowTilemap(5);
+ }
break;
}
+
for (i = 0; i < 8; i++)
{
- PutWindowTilemap(gUnknown_0203CF1C->unk40CB[i]);
+ PutWindowTilemap(pssData->windowIds[i]);
}
+
schedule_bg_copy_tilemap_to_vram(0);
}
-void sub_81C2C38(u8 a)
+static void sub_81C2C38(u8 a)
{
u8 i;
switch (a)
@@ -2745,43 +2859,51 @@ void sub_81C2C38(u8 a)
ClearWindowTilemap(12);
break;
case 2:
- if (gUnknown_0203CF1C->unk40BC == 3)
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if(!(gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
+ if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
ClearWindowTilemap(14);
}
else
+ {
ClearWindowTilemap(5);
+ }
break;
case 3:
- if (gUnknown_0203CF1C->unk40BC == 3)
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if(!(gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
+ if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
ClearWindowTilemap(15);
}
else
+ {
ClearWindowTilemap(5);
+ }
break;
}
+
for (i = 0; i < 8; i++)
- sub_81C2D68(i);
+ {
+ SummaryScreen_RemoveWindowByIndex(i);
+ }
+
schedule_bg_copy_tilemap_to_vram(0);
}
-u8 sub_81C2D2C(struct WindowTemplate *template, u8 a)
+static u8 AddWindowFromTemplateList(const struct WindowTemplate *template, u8 templateId)
{
- u8 *windowIdPtr = &(gUnknown_0203CF1C->unk40CB[a]);
+ u8 *windowIdPtr = &(pssData->windowIds[templateId]);
if (*windowIdPtr == 0xFF)
{
- *windowIdPtr = AddWindow(&template[a]);
+ *windowIdPtr = AddWindow(&template[templateId]);
FillWindowPixelBuffer(*windowIdPtr, 0);
}
return *windowIdPtr;
}
-void sub_81C2D68(u8 a)
+static void SummaryScreen_RemoveWindowByIndex(u8 windowIndex)
{
- u8 *windowIdPtr = &(gUnknown_0203CF1C->unk40CB[a]);
+ u8 *windowIdPtr = &(pssData->windowIds[windowIndex]);
if (*windowIdPtr != 0xFF)
{
ClearWindowTilemap(*windowIdPtr);
@@ -2790,302 +2912,259 @@ void sub_81C2D68(u8 a)
}
}
-void sub_81C2D9C(u8 a)
+static void sub_81C2D9C(u8 pageIndex)
{
u16 i;
for (i = 0; i < 8; i++)
{
- if (gUnknown_0203CF1C->unk40CB[i] != 0xFF)
- FillWindowPixelBuffer(gUnknown_0203CF1C->unk40CB[i], 0);
+ if (pssData->windowIds[i] != 0xFF)
+ FillWindowPixelBuffer(pssData->windowIds[i], 0);
}
- gUnknown_0861CE54[a]();
+ gUnknown_0861CE54[pageIndex]();
}
-void sub_81C2DE4(u8 a)
+static void sub_81C2DE4(u8 pageIndex)
{
- CreateTask(gUnknown_0861CE64[a], 16);
+ CreateTask(gUnknown_0861CE64[pageIndex], 16);
}
-void sub_81C2E00()
+static void sub_81C2E00(void)
{
- if (gUnknown_0203CF1C->summary.isEgg)
+ if (pssData->summary.isEgg)
{
- sub_81C335C();
- sub_81C33CC();
- sub_81C3428();
- sub_81C349C();
+ PrintEggOTName();
+ PrintEggOTID();
+ PrintEggState();
+ PrintEggMemo();
}
else
{
- sub_81C2EC4();
- sub_81C2F5C();
- sub_81C2FD8();
- sub_81C302C();
- sub_81C307C();
- sub_81C3194();
+ PrintMonOTName();
+ PrintMonOTID();
+ PrintMonAbilityName();
+ PrintMonAbilityDescription();
+ BufferMonTrainerMemo();
+ PrintMonTrainerMemo();
}
}
-void sub_81C2E40(u8 taskId)
+static void sub_81C2E40(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- s16 dataa = data[0] - 1;
- switch (dataa)
+ switch (data[0])
{
- case 0:
- sub_81C2EC4();
- break;
case 1:
- sub_81C2F5C();
+ PrintMonOTName();
break;
case 2:
- sub_81C2FD8();
+ PrintMonOTID();
break;
case 3:
- sub_81C302C();
+ PrintMonAbilityName();
break;
case 4:
- sub_81C307C();
+ PrintMonAbilityDescription();
break;
case 5:
- sub_81C3194();
+ BufferMonTrainerMemo();
break;
case 6:
+ PrintMonTrainerMemo();
+ break;
+ case 7:
DestroyTask(taskId);
return;
}
data[0]++;
}
-void sub_81C2EC4()
+static void PrintMonOTName(void)
{
- u8 r5;
- int r2;
- if (sub_81A6BF4() != 1 && sub_81B9E94() != 1)
+ u8 windowId;
+ int x;
+ if (sub_81A6BF4() != TRUE && sub_81B9E94() != TRUE)
{
- r5 = sub_81C2D2C(&gUnknown_0861CCCC, 0);
- sub_81C25A4(r5, gText_OTSlash, 0, 1, 0, 1);
- r2 = GetStringWidth(1, gText_OTSlash, 0);
- if (gUnknown_0203CF1C->summary.OTGender == 0)
- sub_81C25A4(r5, gUnknown_0203CF1C->summary.OTName, r2, 1, 0, 5);
+ windowId = AddWindowFromTemplateList(gUnknown_0861CCCC, 0);
+ SummaryScreen_PrintTextOnWindow(windowId, gText_OTSlash, 0, 1, 0, 1);
+ x = GetStringWidth(1, gText_OTSlash, 0);
+ if (pssData->summary.OTGender == 0)
+ SummaryScreen_PrintTextOnWindow(windowId, pssData->summary.OTName, x, 1, 0, 5);
else
- sub_81C25A4(r5, gUnknown_0203CF1C->summary.OTName, r2, 1, 0, 6);
+ SummaryScreen_PrintTextOnWindow(windowId, pssData->summary.OTName, x, 1, 0, 6);
}
}
-void sub_81C2F5C()
+static void PrintMonOTID(void)
{
- int r4;
+ int xPos;
if (sub_81A6BF4() != TRUE && sub_81B9E94() != TRUE)
{
- ConvertIntToDecimalStringN(StringCopy(gStringVar1, gText_UnkCtrlF907F908), (u16)gUnknown_0203CF1C->summary.OTID, 2, 5);
- r4 = GetStringRightAlignXOffset(1, gStringVar1, 0x38);
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 1), gStringVar1, r4, 1, 0, 1);
+ ConvertIntToDecimalStringN(StringCopy(gStringVar1, gText_UnkCtrlF907F908), (u16)pssData->summary.OTID, 2, 5);
+ xPos = GetStringRightAlignXOffset(1, gStringVar1, 56);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 1), gStringVar1, xPos, 1, 0, 1);
}
}
-void sub_81C2FD8()
+static void PrintMonAbilityName(void)
{
- u8 ability = GetAbilityBySpecies(gUnknown_0203CF1C->summary.species, gUnknown_0203CF1C->summary.altAbility);
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 2), gAbilityNames[ability], 0, 1, 0, 1);
+ u8 ability = GetAbilityBySpecies(pssData->summary.species, pssData->summary.altAbility);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 2), gAbilityNames[ability], 0, 1, 0, 1);
}
-void sub_81C302C()
+static void PrintMonAbilityDescription(void)
{
- u8 ability = GetAbilityBySpecies(gUnknown_0203CF1C->summary.species, gUnknown_0203CF1C->summary.altAbility);
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 2), gAbilityDescriptionPointers[ability], 0, 17, 0, 0);
+ u8 ability = GetAbilityBySpecies(pssData->summary.species, pssData->summary.altAbility);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 2), gAbilityDescriptionPointers[ability], 0, 17, 0, 0);
}
-void sub_81C307C()
+static void BufferMonTrainerMemo(void)
{
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- u8 *text;
+ struct PokeSummary *sum = &pssData->summary;
+ const u8 *text;
+
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gUnknown_0861CE74);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_0861CE7B);
- sub_81C31C0();
- if (sub_81A6BF4() == TRUE || sub_81B9E94() == TRUE || sub_81C3304() == TRUE)
+ BufferNatureString();
+
+ if (sub_81A6BF4() == TRUE || sub_81B9E94() == TRUE || IsInGamePartnerMon() == TRUE)
+ {
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_XNature);
+ }
else
{
- u8 *alloced1 = Alloc(32);
- u8 *alloced2 = Alloc(32);
- sub_81C31F0(alloced1);
- if (sum->metLocation <= 0xD4)
+ u8 *metLevelString = Alloc(32);
+ u8 *metLocationString = Alloc(32);
+ GetMetLevelString(metLevelString);
+
+ if (sum->metLocation < MAPSEC_NONE)
{
- sub_8124610(alloced2, sum->metLocation);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, alloced2);
+ sub_8124610(metLocationString, sum->metLocation);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, metLocationString);
}
- if (sub_81C3220() == 1)
+
+ if (DoesMonOTMatchOwner() == TRUE)
{
if (sum->metLevel == 0)
- text = (sum->metLocation > 0xD4) ? gText_XNatureHatchedSomewhereAt : gText_XNatureHatchedAtYZ;
+ text = (sum->metLocation >= MAPSEC_NONE) ? gText_XNatureHatchedSomewhereAt : gText_XNatureHatchedAtYZ;
else
- text = (sum->metLocation > 0xD4) ? gText_XNatureMetSomewhereAt : gText_XNatureMetAtYZ;
+ text = (sum->metLocation >= MAPSEC_NONE) ? gText_XNatureMetSomewhereAt : gText_XNatureMetAtYZ;
}
- else if (sum->metLocation == 0xFF)
+ else if (sum->metLocation == MAPSEC_FATEFUL_ENCOUNTER)
+ {
text = gText_XNatureFatefulEncounter;
- else if (sum->metLocation != 0xFE && sub_81C32BC())
- text = (sum->metLocation > 0xD4) ? gText_XNatureObtainedInTrade : gText_XNatureProbablyMetAt;
+ }
+ else if (sum->metLocation != MAPSEC_IN_GAME_TRADE && DidMonComeFromGBAGames())
+ {
+ text = (sum->metLocation >= MAPSEC_NONE) ? gText_XNatureObtainedInTrade : gText_XNatureProbablyMetAt;
+ }
else
+ {
text = gText_XNatureObtainedInTrade;
+ }
+
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, text);
- Free(alloced1);
- Free(alloced2);
+ Free(metLevelString);
+ Free(metLocationString);
}
}
-void sub_81C3194()
+static void PrintMonTrainerMemo(void)
{
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 3), gStringVar4, 0, 1, 0, 0);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 3), gStringVar4, 0, 1, 0, 0);
}
-void sub_81C31C0()
+static void BufferNatureString(void)
{
- struct UnkSummaryStruct *sumStruct = gUnknown_0203CF1C;
+ struct UnkSummaryStruct *sumStruct = pssData;
DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gNatureNamePointers[sumStruct->summary.nature]);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, gText_EmptyString5);
}
-void sub_81C31F0(u8 *a)
+static void GetMetLevelString(u8 *output)
{
- u8 level = gUnknown_0203CF1C->summary.metLevel;
+ u8 level = pssData->summary.metLevel;
if (level == 0)
level = EGG_HATCH_LEVEL;
- ConvertIntToDecimalStringN(a, level, 0, 3);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, a);
+ ConvertIntToDecimalStringN(output, level, 0, 3);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, output);
}
-u8 sub_81C3220()
+static bool8 DoesMonOTMatchOwner(void)
{
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- u32 r4;
- u8 r5;
- if (gUnknown_0203CF1C->unk0 == (union UnkUnion *)&gEnemyParty)
+ struct PokeSummary *sum = &pssData->summary;
+ u32 trainerId;
+ u8 gender;
+
+ if (pssData->monList.mons == gEnemyParty)
{
- u8 multiID = GetMultiplayerId()^1;
- r4 = (u16)gLinkPlayers[multiID].trainerId;
- r5 = gLinkPlayers[multiID].gender;
+ u8 multiID = GetMultiplayerId() ^ 1;
+ trainerId = (u16)gLinkPlayers[multiID].trainerId;
+ gender = gLinkPlayers[multiID].gender;
StringCopy(gStringVar1, gLinkPlayers[multiID].name);
}
else
{
- r4 = GetPlayerIDAsU32() & 0xFFFF;
- r5 = gSaveBlock2Ptr->playerGender;
+ trainerId = GetPlayerIDAsU32() & 0xFFFF;
+ gender = gSaveBlock2Ptr->playerGender;
StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
}
- if (r5 != sum->OTGender || r4 != (sum->OTID & 0xFFFF) || StringCompareWithoutExtCtrlCodes(gStringVar1, sum->OTName))
+ if (gender != sum->OTGender || trainerId != (sum->OTID & 0xFFFF) || StringCompareWithoutExtCtrlCodes(gStringVar1, sum->OTName))
{
- return 0;
+ return FALSE;
}
- return 1;
+ return TRUE;
}
-bool8 sub_81C32BC()
+static bool8 DidMonComeFromGBAGames(void)
{
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- u8 r0 = sum->metGame - 1;
- if (r0 <= 4)
+ struct PokeSummary *sum = &pssData->summary;
+ if (sum->metGame > 0 && sum->metGame <= VERSION_LEAF_GREEN)
return TRUE;
return FALSE;
}
-bool8 sub_81C32E0()
+bool8 DidMonComeFromRSE(void)
{
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- u8 r0 = sum->metGame - 1;
- if (r0 <= 2)
+ struct PokeSummary *sum = &pssData->summary;
+ if (sum->metGame > 0 && sum->metGame <= VERSION_EMERALD)
return TRUE;
return FALSE;
}
-bool8 sub_81C3304()
+static bool8 IsInGamePartnerMon(void)
{
if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) && gMain.inBattle)
{
- if (gUnknown_0203CF1C->unk40BE == 1 || gUnknown_0203CF1C->unk40BE == 4 || gUnknown_0203CF1C->unk40BE == 5)
+ if (pssData->curMonIndex == 1 || pssData->curMonIndex == 4 || pssData->curMonIndex == 5)
return TRUE;
}
return FALSE;
}
-#ifdef NONMATCHING
-void sub_81C335C()
-{
- u8 r4 = sub_81C2D2C(&gUnknown_0861CCCC, 0);
- u32 r5 = GetStringWidth(1, gText_OTSlash, 0);
- sub_81C25A4(r4, gText_OTSlash, 0, 1, 0, 1);
- sub_81C25A4(r4, gText_FiveMarks, r5, 1, 0, 1);
-}
-#else
-NAKED
-void sub_81C335C()
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5,r6}\n\
- sub sp, 0x8\n\
- ldr r0, =gUnknown_0861CCCC\n\
- movs r1, 0\n\
- bl sub_81C2D2C\n\
- adds r4, r0, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- ldr r0, =gText_OTSlash\n\
- mov r8, r0\n\
- movs r0, 0x1\n\
- mov r1, r8\n\
- movs r2, 0\n\
- bl GetStringWidth\n\
- adds r5, r0, 0\n\
- movs r0, 0\n\
- mov r9, r0\n\
- str r0, [sp]\n\
- movs r6, 0x1\n\
- str r6, [sp, 0x4]\n\
- adds r0, r4, 0\n\
- mov r1, r8\n\
- movs r2, 0\n\
- movs r3, 0x1\n\
- bl sub_81C25A4\n\
- ldr r1, =gText_FiveMarks\n\
- lsls r5, 24\n\
- lsrs r5, 24\n\
- mov r0, r9\n\
- str r0, [sp]\n\
- str r6, [sp, 0x4]\n\
- adds r0, r4, 0\n\
- adds r2, r5, 0\n\
- movs r3, 0x1\n\
- bl sub_81C25A4\n\
- add sp, 0x8\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided\n");
-}
-#endif
-
-void sub_81C33CC()
-{
- int r4;
+static void PrintEggOTName(void)
+{
+ u32 windowId = AddWindowFromTemplateList(gUnknown_0861CCCC, 0);
+ u32 width = GetStringWidth(1, gText_OTSlash, 0);
+ SummaryScreen_PrintTextOnWindow(windowId, gText_OTSlash, 0, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(windowId, gText_FiveMarks, width, 1, 0, 1);
+}
+
+static void PrintEggOTID(void)
+{
+ int x;
StringCopy(gStringVar1, gText_UnkCtrlF907F908);
StringAppend(gStringVar1, gText_FiveMarks);
- r4 = GetStringRightAlignXOffset(1, gStringVar1, 0x38);
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 1), gStringVar1, r4, 1, 0, 1);
+ x = GetStringRightAlignXOffset(1, gStringVar1, 56);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 1), gStringVar1, x, 1, 0, 1);
}
-void sub_81C3428()
+static void PrintEggState(void)
{
- u8 *text;
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- if (gUnknown_0203CF1C->summary.sanity == 1)
+ const u8 *text;
+ struct PokeSummary *sum = &pssData->summary;
+
+ if (pssData->summary.sanity == TRUE)
text = gText_EggWillTakeALongTime;
else if (sum->friendship <= 5)
text = gText_EggAboutToHatch;
@@ -3095,141 +3174,158 @@ void sub_81C3428()
text = gText_EggWillTakeSomeTime;
else
text = gText_EggWillTakeALongTime;
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 2), text, 0, 1, 0, 0);
+
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 2), text, 0, 1, 0, 0);
}
-void sub_81C349C()
+static void PrintEggMemo(void)
{
- u8 *text;
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- if (gUnknown_0203CF1C->summary.sanity != 1)
+ const u8 *text;
+ struct PokeSummary *sum = &pssData->summary;
+
+ if (pssData->summary.sanity != 1)
{
- if (sum->metLocation == 0xFF)
+ if (sum->metLocation == MAPSEC_FATEFUL_ENCOUNTER)
text = gText_PeculiarEggNicePlace;
- else if (sub_81C32BC() == 0 || sub_81C3220() == 0)
+ else if (DidMonComeFromGBAGames() == FALSE || DoesMonOTMatchOwner() == FALSE)
text = gText_PeculiarEggTrade;
- else if (sum->metLocation == 0xFD)
- text = (sub_81C32E0() == TRUE) ? gText_EggFromHotSprings : gText_EggFromTraveler;
+ else if (sum->metLocation == MAPSEC_SPECIAL_EGG)
+ text = (DidMonComeFromRSE() == TRUE) ? gText_EggFromHotSprings : gText_EggFromTraveler;
else
text = gText_OddEggFoundByCouple;
}
else
+ {
text = gText_OddEggFoundByCouple;
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 3), text, 0, 1, 0, 0);
+ }
+
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 3), text, 0, 1, 0, 0);
}
-void sub_81C3530()
+static void sub_81C3530(void)
{
- sub_81C35E4();
- sub_81C3690();
- sub_81C3710();
- sub_81C37D8();
- sub_81C3808();
- sub_81C3890();
- sub_81C38C0();
+ PrintHeldItemName();
+ PrintRibbonCount();
+ BufferLeftColumnStats();
+ PrintLeftColumnStats();
+ BufferRightColumnStats();
+ PrintRightColumnStats();
+ PrintExpPointsNextLevel();
}
-void sub_81C3554(u8 taskId)
+static void sub_81C3554(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- s16 dataa = data[0] - 1;
- switch (dataa)
+
+ switch (data[0])
{
- case 0:
- sub_81C35E4();
- break;
case 1:
- sub_81C3690();
+ PrintHeldItemName();
break;
case 2:
- sub_81C3710();
+ PrintRibbonCount();
break;
case 3:
- sub_81C37D8();
+ BufferLeftColumnStats();
break;
case 4:
- sub_81C3808();
+ PrintLeftColumnStats();
break;
case 5:
- sub_81C3890();
+ BufferRightColumnStats();
break;
case 6:
- sub_81C38C0();
+ PrintRightColumnStats();
break;
case 7:
+ PrintExpPointsNextLevel();
+ break;
+ case 8:
DestroyTask(taskId);
return;
}
data[0]++;
}
-void sub_81C35E4()
+static void PrintHeldItemName(void)
{
const u8 *text;
int offset;
- if (gUnknown_0203CF1C->summary.item == ITEM_ENIGMA_BERRY && sub_81B1250() == 1 && (gUnknown_0203CF1C->unk40BE == 1 || gUnknown_0203CF1C->unk40BE == 4 || gUnknown_0203CF1C->unk40BE == 5))
+
+ if (pssData->summary.item == ITEM_ENIGMA_BERRY && sub_81B1250() == TRUE && (pssData->curMonIndex == 1 || pssData->curMonIndex == 4 || pssData->curMonIndex == 5))
{
text = ItemId_GetName(ITEM_ENIGMA_BERRY);
}
- else if (gUnknown_0203CF1C->summary.item == ITEM_NONE)
+ else if (pssData->summary.item == ITEM_NONE)
+ {
text = gText_None;
+ }
else
{
- CopyItemName(gUnknown_0203CF1C->summary.item, gStringVar1);
+ CopyItemName(pssData->summary.item, gStringVar1);
text = gStringVar1;
}
- offset = GetStringCenterAlignXOffset(1, text, 0x48) + 6;
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCEC, 0), text, offset, 1, 0, 0);
+
+ offset = GetStringCenterAlignXOffset(1, text, 72) + 6;
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCEC, 0), text, offset, 1, 0, 0);
}
-void sub_81C3690()
+static void PrintRibbonCount(void)
{
- u8 *text;
+ const u8 *text;
int offset;
- if (gUnknown_0203CF1C->summary.ribbons == 0)
+
+ if (pssData->summary.ribbonCount == 0)
+ {
text = gText_None;
+ }
else
{
- ConvertIntToDecimalStringN(gStringVar1, gUnknown_0203CF1C->summary.ribbons, 1, 2);
+ ConvertIntToDecimalStringN(gStringVar1, pssData->summary.ribbonCount, 1, 2);
StringExpandPlaceholders(gStringVar4, gText_RibbonsVar1);
text = gStringVar4;
}
- offset = GetStringCenterAlignXOffset(1, text, 0x46) + 6;
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCEC, 1), text, offset, 1, 0, 0);
+
+ offset = GetStringCenterAlignXOffset(1, text, 70) + 6;
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCEC, 1), text, offset, 1, 0, 0);
}
-void sub_81C3710()
+static void BufferLeftColumnStats(void)
{
- u8 *alloced1 = Alloc(8);
- u8 *alloced2 = Alloc(8);
- u8 *alloced3 = Alloc(8);
- u8 *alloced4 = Alloc(8);
- ConvertIntToDecimalStringN(alloced1, gUnknown_0203CF1C->summary.currentHP, 1, 3);
- ConvertIntToDecimalStringN(alloced2, gUnknown_0203CF1C->summary.maxHP, 1, 3);
- ConvertIntToDecimalStringN(alloced3, gUnknown_0203CF1C->summary.atk, 1, 7);
- ConvertIntToDecimalStringN(alloced4, gUnknown_0203CF1C->summary.def, 1, 7);
+ u8 *currentHPString = Alloc(8);
+ u8 *maxHPString = Alloc(8);
+ u8 *attackString = Alloc(8);
+ u8 *defenseString = Alloc(8);
+
+ ConvertIntToDecimalStringN(currentHPString, pssData->summary.currentHP, 1, 3);
+ ConvertIntToDecimalStringN(maxHPString, pssData->summary.maxHP, 1, 3);
+ ConvertIntToDecimalStringN(attackString, pssData->summary.atk, 1, 7);
+ ConvertIntToDecimalStringN(defenseString, pssData->summary.def, 1, 7);
+
DynamicPlaceholderTextUtil_Reset();
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, alloced1);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, alloced2);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, alloced3);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, alloced4);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, currentHPString);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, maxHPString);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, attackString);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, defenseString);
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_0861CE82);
- Free(alloced1);
- Free(alloced2);
- Free(alloced3);
- Free(alloced4);
+
+ Free(currentHPString);
+ Free(maxHPString);
+ Free(attackString);
+ Free(defenseString);
}
-void sub_81C37D8()
+static void PrintLeftColumnStats(void)
{
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCEC, 2), gStringVar4, 4, 1, 0, 0);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCEC, 2), gStringVar4, 4, 1, 0, 0);
}
-void sub_81C3808()
+static void BufferRightColumnStats(void)
{
- ConvertIntToDecimalStringN(gStringVar1, gUnknown_0203CF1C->summary.spatk, 1, 3);
- ConvertIntToDecimalStringN(gStringVar2, gUnknown_0203CF1C->summary.spdef, 1, 3);
- ConvertIntToDecimalStringN(gStringVar3, gUnknown_0203CF1C->summary.speed, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, pssData->summary.spatk, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar2, pssData->summary.spdef, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar3, pssData->summary.speed, 1, 3);
+
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar2);
@@ -3237,317 +3333,183 @@ void sub_81C3808()
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_0861CE8E);
}
-void sub_81C3890()
+static void PrintRightColumnStats(void)
{
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCEC, 3), gStringVar4, 2, 1, 0, 0);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCEC, 3), gStringVar4, 2, 1, 0, 0);
}
-void sub_81C38C0()
+static void PrintExpPointsNextLevel(void)
{
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- u8 r6 = sub_81C2D2C(&gUnknown_0861CCEC, 4);
+ struct PokeSummary *sum = &pssData->summary;
+ u8 windowId = AddWindowFromTemplateList(gUnknown_0861CCEC, 4);
int offset;
u32 expToNextLevel;
+
ConvertIntToDecimalStringN(gStringVar1, sum->exp, 1, 7);
- offset = GetStringRightAlignXOffset(1, gStringVar1, 0x2A) + 2;
- sub_81C25A4(r6, gStringVar1, offset, 1, 0, 0);
+ offset = GetStringRightAlignXOffset(1, gStringVar1, 42) + 2;
+ SummaryScreen_PrintTextOnWindow(windowId, gStringVar1, offset, 1, 0, 0);
+
if (sum->level < MAX_MON_LEVEL)
expToNextLevel = gExperienceTables[gBaseStats[sum->species].growthRate][sum->level + 1] - sum->exp;
else
expToNextLevel = 0;
+
ConvertIntToDecimalStringN(gStringVar1, expToNextLevel, 1, 6);
- offset = GetStringRightAlignXOffset(1, gStringVar1, 0x2A) + 2;
- sub_81C25A4(r6, gStringVar1, offset, 17, 0, 0);
+ offset = GetStringRightAlignXOffset(1, gStringVar1, 42) + 2;
+ SummaryScreen_PrintTextOnWindow(windowId, gStringVar1, offset, 17, 0, 0);
}
-void sub_81C3984()
+static void sub_81C3984(void)
{
- sub_81C3B08(0);
- sub_81C3B08(1);
- sub_81C3B08(2);
- sub_81C3B08(3);
- if (gUnknown_0203CF1C->unk40BC == 3)
+ PrintMoveNameAndPP(0);
+ PrintMoveNameAndPP(1);
+ PrintMoveNameAndPP(2);
+ PrintMoveNameAndPP(3);
+
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- sub_81C3F44();
- if (gUnknown_0203CF1C->unk40C6 == 4)
+ PrintNewMoveDetailsOrCancelText();
+ if (pssData->firstMoveIndex == MAX_MON_MOVES)
{
- if (gUnknown_0203CF1C->unk40C4 != 0)
- sub_81C3E9C(gUnknown_0203CF1C->unk40C4);
+ if (pssData->newMove != MOVE_NONE)
+ PrintMoveDetails(pssData->newMove);
}
else
- sub_81C3E9C(gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6]);
+ {
+ PrintMoveDetails(pssData->summary.moves[pssData->firstMoveIndex]);
+ }
}
}
-void sub_81C39F0(u8 taskId)
+static void sub_81C39F0(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- s16 dataa = data[0] - 1;
- switch (dataa)
+ switch (data[0])
{
- case 0:
- sub_81C3B08(0);
- break;
case 1:
- sub_81C3B08(1);
+ PrintMoveNameAndPP(0);
break;
case 2:
- sub_81C3B08(2);
+ PrintMoveNameAndPP(1);
break;
case 3:
- sub_81C3B08(3);
+ PrintMoveNameAndPP(2);
break;
case 4:
- if (gUnknown_0203CF1C->unk40BC == 3)
- sub_81C3F44();
+ PrintMoveNameAndPP(3);
break;
case 5:
- if (gUnknown_0203CF1C->unk40BC == 3)
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
+ PrintNewMoveDetailsOrCancelText();
+ break;
+ case 6:
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if (gUnknown_0203CF1C->unk40C6 == 4)
- data[1] = gUnknown_0203CF1C->unk40C4;
+ if (pssData->firstMoveIndex == MAX_MON_MOVES)
+ data[1] = pssData->newMove;
else
- data[1] = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
+ data[1] = pssData->summary.moves[pssData->firstMoveIndex];
}
break;
- case 6:
- if (gUnknown_0203CF1C->unk40BC == 3)
+ case 7:
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if (!(gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
- sub_81C3E9C(data[1]);
+ if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
+ PrintMoveDetails(data[1]);
}
break;
- case 7:
+ case 8:
DestroyTask(taskId);
return;
}
data[0]++;
}
-#ifdef NONMATCHING
-void sub_81C3B08(u8 a)
+static void PrintMoveNameAndPP(u8 moveIndex)
{
- struct UnkSummaryStruct *r10 = gUnknown_0203CF1C;
- u8 r8 = sub_81C2D2C(&gUnknown_0861CD14, 0);
- u8 sp = sub_81C2D2C(&gUnknown_0861CD14, 1);
- u8 r6;
- u8 r5;
- u8 *text;
- int offset;
- u16 move;
- if (r10->summary.moves[a] != 0)
+ u8 pp;
+ u32 ppState;
+ const u8 *text;
+ u32 offset;
+ struct UnkSummaryStruct *summaryStruct = pssData;
+ u8 moveNameWindowId = AddWindowFromTemplateList(gUnknown_0861CD14, 0);
+ u8 ppValueWindowId = AddWindowFromTemplateList(gUnknown_0861CD14, 1);
+ u16 move = summaryStruct->summary.moves[moveIndex];
+
+ if (move != 0)
{
- move = r10->summary.moves[a];
- r6 = CalculatePPWithBonus(move, r10->summary.ppBonuses, a);
- sub_81C25A4(r8, gMoveNames[move], 0, (a<<4) + 1, 0, 1);
- ConvertIntToDecimalStringN(gStringVar1, r10->summary.pp[a], 1, 2);
- ConvertIntToDecimalStringN(gStringVar2, r6, 1, 2);
+ pp = CalculatePPWithBonus(move, summaryStruct->summary.ppBonuses, moveIndex);
+ SummaryScreen_PrintTextOnWindow(moveNameWindowId, gMoveNames[move], 0, moveIndex * 16 + 1, 0, 1);
+ ConvertIntToDecimalStringN(gStringVar1, summaryStruct->summary.pp[moveIndex], 1, 2);
+ ConvertIntToDecimalStringN(gStringVar2, pp, 1, 2);
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar2);
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_0861CE97);
text = gStringVar4;
- r5 = GetCurrentPpToMaxPpState(r10->summary.pp[a], r6) + 9;
- offset = GetStringRightAlignXOffset(1, text, 0x2C);
+ ppState = GetCurrentPpToMaxPpState(summaryStruct->summary.pp[moveIndex], pp) + 9;
+ offset = GetStringRightAlignXOffset(1, text, 44);
}
else
{
- sub_81C25A4(r8, gText_OneDash, 0, (a<<4) + 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(moveNameWindowId, gText_OneDash, 0, moveIndex * 16 + 1, 0, 1);
text = gText_TwoDashes;
- r5 = 12;
- offset = GetStringCenterAlignXOffset(1, text, 0x2C);
- }
- sub_81C25A4(sp, text, offset, (a<<4), 0, r5);
-}
-#else
-NAKED
-void sub_81C3B08(u8 a)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0xC\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- ldr r0, =gUnknown_0203CF1C\n\
- ldr r0, [r0]\n\
- mov r10, r0\n\
- ldr r4, =gUnknown_0861CD14\n\
- adds r0, r4, 0\n\
- movs r1, 0\n\
- bl sub_81C2D2C\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0x1\n\
- bl sub_81C2D2C\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- str r0, [sp, 0x8]\n\
- lsls r1, r7, 1\n\
- mov r0, r10\n\
- adds r0, 0x84\n\
- adds r0, r1\n\
- ldrh r5, [r0]\n\
- cmp r5, 0\n\
- beq _081C3C00\n\
- mov r0, r10\n\
- adds r0, 0xA4\n\
- ldrb r1, [r0]\n\
- adds r0, r5, 0\n\
- adds r2, r7, 0\n\
- bl CalculatePPWithBonus\n\
- adds r6, r0, 0\n\
- lsls r6, 24\n\
- lsrs r6, 24\n\
- movs r0, 0xD\n\
- adds r1, r5, 0\n\
- muls r1, r0\n\
- ldr r0, =gMoveNames\n\
- adds r1, r0\n\
- lsls r0, r7, 4\n\
- mov r9, r0\n\
- mov r3, r9\n\
- adds r3, 0x1\n\
- lsls r3, 24\n\
- lsrs r3, 24\n\
- movs r0, 0\n\
- str r0, [sp]\n\
- movs r0, 0x1\n\
- str r0, [sp, 0x4]\n\
- mov r0, r8\n\
- movs r2, 0\n\
- bl sub_81C25A4\n\
- ldr r0, =gStringVar1\n\
- mov r8, r0\n\
- mov r5, r10\n\
- adds r5, 0x8C\n\
- adds r5, r7\n\
- ldrb r1, [r5]\n\
- movs r2, 0x1\n\
- movs r3, 0x2\n\
- bl ConvertIntToDecimalStringN\n\
- ldr r4, =gStringVar2\n\
- adds r0, r4, 0\n\
- adds r1, r6, 0\n\
- movs r2, 0x1\n\
- movs r3, 0x2\n\
- bl ConvertIntToDecimalStringN\n\
- bl DynamicPlaceholderTextUtil_Reset\n\
- movs r0, 0\n\
- mov r1, r8\n\
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr\n\
- movs r0, 0x1\n\
- adds r1, r4, 0\n\
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr\n\
- ldr r4, =gStringVar4\n\
- ldr r1, =gUnknown_0861CE97\n\
- adds r0, r4, 0\n\
- bl DynamicPlaceholderTextUtil_ExpandPlaceholders\n\
- adds r7, r4, 0\n\
- ldrb r0, [r5]\n\
- adds r1, r6, 0\n\
- bl GetCurrentPpToMaxPpState\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- adds r5, r0, 0\n\
- adds r5, 0x9\n\
- movs r0, 0x1\n\
- adds r1, r7, 0\n\
- movs r2, 0x2C\n\
- bl GetStringRightAlignXOffset\n\
- mov r4, r9\n\
- b _081C3C26\n\
- .pool\n\
-_081C3C00:\n\
- ldr r1, =gText_OneDash\n\
- lsls r4, r7, 4\n\
- adds r3, r4, 0x1\n\
- lsls r3, 24\n\
- lsrs r3, 24\n\
- str r5, [sp]\n\
- movs r0, 0x1\n\
- str r0, [sp, 0x4]\n\
- mov r0, r8\n\
- movs r2, 0\n\
- bl sub_81C25A4\n\
- ldr r7, =gText_TwoDashes\n\
- movs r5, 0xC\n\
- movs r0, 0x1\n\
- adds r1, r7, 0\n\
- movs r2, 0x2C\n\
- bl GetStringCenterAlignXOffset\n\
-_081C3C26:\n\
- lsls r2, r0, 24\n\
- lsrs r2, 24\n\
- adds r3, r4, 0x1\n\
- lsls r3, 24\n\
- lsrs r3, 24\n\
- movs r0, 0\n\
- str r0, [sp]\n\
- lsls r0, r5, 24\n\
- lsrs r0, 24\n\
- str r0, [sp, 0x4]\n\
- ldr r0, [sp, 0x8]\n\
- adds r1, r7, 0\n\
- bl sub_81C25A4\n\
- add sp, 0xC\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided\n");
-}
-#endif
-
-void sub_81C3C5C(u16 move)
-{
- u8 *text;
- if (move != 0)
+ ppState = 12;
+ offset = GetStringCenterAlignXOffset(1, text, 44);
+ }
+
+ SummaryScreen_PrintTextOnWindow(ppValueWindowId, text, offset, moveIndex * 16 + 1, 0, ppState);
+}
+
+static void PrintMovePowerAndAccuracy(u16 moveIndex)
+{
+ const u8 *text;
+ if (moveIndex != 0)
{
- FillWindowPixelRect(14, 0, 0x35, 0, 0x13, 0x20);
- if (gBattleMoves[move].power <= 1)
+ FillWindowPixelRect(14, 0, 53, 0, 19, 32);
+
+ if (gBattleMoves[moveIndex].power < 2)
+ {
text = gText_ThreeDashes;
+ }
else
{
- ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].power, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveIndex].power, 1, 3);
text = gStringVar1;
}
- sub_81C25A4(14, text, 0x35, 1, 0, 0);
- if (gBattleMoves[move].accuracy == 0)
+
+ SummaryScreen_PrintTextOnWindow(14, text, 53, 1, 0, 0);
+
+ if (gBattleMoves[moveIndex].accuracy == 0)
+ {
text = gText_ThreeDashes;
+ }
else
{
- ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].accuracy, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveIndex].accuracy, 1, 3);
text = gStringVar1;
}
- sub_81C25A4(14, text, 0x35, 17, 0, 0);
+
+ SummaryScreen_PrintTextOnWindow(14, text, 53, 17, 0, 0);
}
}
-void sub_81C3D08()
+static void sub_81C3D08(void)
{
- sub_81C3B08(0);
- sub_81C3B08(1);
- sub_81C3B08(2);
- sub_81C3B08(3);
- if (gUnknown_0203CF1C->unk40BC == 3)
+ PrintMoveNameAndPP(0);
+ PrintMoveNameAndPP(1);
+ PrintMoveNameAndPP(2);
+ PrintMoveNameAndPP(3);
+
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- sub_81C3F44();
- sub_81C3E2C(gUnknown_0203CF1C->unk40C6);
+ PrintNewMoveDetailsOrCancelText();
+ PrintContestMoveDescription(pssData->firstMoveIndex);
}
}
-void sub_81C3D54(u8 taskId)
+static void sub_81C3D54(u8 taskId)
{
s16 *data = gTasks[taskId].data;
s16 dataa = data[0] - 1;
@@ -3555,26 +3517,26 @@ void sub_81C3D54(u8 taskId)
switch (dataa)
{
case 0:
- sub_81C3B08(0);
+ PrintMoveNameAndPP(0);
break;
case 1:
- sub_81C3B08(1);
+ PrintMoveNameAndPP(1);
break;
case 2:
- sub_81C3B08(2);
+ PrintMoveNameAndPP(2);
break;
case 3:
- sub_81C3B08(3);
+ PrintMoveNameAndPP(3);
break;
case 4:
- if (gUnknown_0203CF1C->unk40BC == 3)
- sub_81C3F44();
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
+ PrintNewMoveDetailsOrCancelText();
break;
case 5:
- if (gUnknown_0203CF1C->unk40BC == 3)
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if (!(gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
- sub_81C3E2C(gUnknown_0203CF1C->unk40C6);
+ if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
+ PrintContestMoveDescription(pssData->firstMoveIndex);
}
break;
case 6:
@@ -3584,36 +3546,36 @@ void sub_81C3D54(u8 taskId)
data[0]++;
}
-void sub_81C3E2C(u8 moveSlot)
+static void PrintContestMoveDescription(u8 moveSlot)
{
u16 move;
if (moveSlot == 4)
- move = gUnknown_0203CF1C->unk40C4;
+ move = pssData->newMove;
else
- move = gUnknown_0203CF1C->summary.moves[moveSlot];
+ move = pssData->summary.moves[moveSlot];
if (move != MOVE_NONE)
{
- u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 2);
- sub_81C25A4(windowId, gContestEffectDescriptionPointers[gContestMoves[move].effect], 6, 1, 0, 0);
+ u8 windowId = AddWindowFromTemplateList(gUnknown_0861CD14, 2);
+ SummaryScreen_PrintTextOnWindow(windowId, gContestEffectDescriptionPointers[gContestMoves[move].effect], 6, 1, 0, 0);
}
}
-void sub_81C3E9C(u16 move)
+static void PrintMoveDetails(u16 move)
{
- u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 2);
+ u8 windowId = AddWindowFromTemplateList(gUnknown_0861CD14, 2);
FillWindowPixelBuffer(windowId, 0);
if (move != MOVE_NONE)
{
- if (gUnknown_0203CF1C->unk40C0 == 2)
+ if (pssData->currPageIndex == 2)
{
- sub_81C3C5C(move);
- sub_81C25A4(windowId, gMoveDescriptionPointers[move - 1], 6, 1, 0, 0);
+ PrintMovePowerAndAccuracy(move);
+ SummaryScreen_PrintTextOnWindow(windowId, gMoveDescriptionPointers[move - 1], 6, 1, 0, 0);
}
else
{
- sub_81C25A4(windowId, gContestEffectDescriptionPointers[gContestMoves[move].effect], 6, 1, 0, 0);
+ SummaryScreen_PrintTextOnWindow(windowId, gContestEffectDescriptionPointers[gContestMoves[move].effect], 6, 1, 0, 0);
}
PutWindowTilemap(windowId);
}
@@ -3625,96 +3587,100 @@ void sub_81C3E9C(u16 move)
schedule_bg_copy_tilemap_to_vram(0);
}
-void sub_81C3F44(void)
+static void PrintNewMoveDetailsOrCancelText(void)
{
- u8 windowId1 = sub_81C2D2C(&gUnknown_0861CD14, 0);
- u8 windowId2 = sub_81C2D2C(&gUnknown_0861CD14, 1);
- if (gUnknown_0203CF1C->unk40C4 == MOVE_NONE)
+ u8 windowId1 = AddWindowFromTemplateList(gUnknown_0861CD14, 0);
+ u8 windowId2 = AddWindowFromTemplateList(gUnknown_0861CD14, 1);
+
+ if (pssData->newMove == MOVE_NONE)
{
- sub_81C25A4(windowId1, gText_Cancel, 0, 0x41, 0, 1);
+ SummaryScreen_PrintTextOnWindow(windowId1, gText_Cancel, 0, 65, 0, 1);
}
else
{
- u16 move = gUnknown_0203CF1C->unk40C4;
- if (gUnknown_0203CF1C->unk40C0 == 2)
- sub_81C25A4(windowId1, gMoveNames[move], 0, 0x41, 0, 6);
+ u16 move = pssData->newMove;
+
+ if (pssData->currPageIndex == 2)
+ SummaryScreen_PrintTextOnWindow(windowId1, gMoveNames[move], 0, 65, 0, 6);
else
- sub_81C25A4(windowId1, gMoveNames[move], 0, 0x41, 0, 5);
+ SummaryScreen_PrintTextOnWindow(windowId1, gMoveNames[move], 0, 65, 0, 5);
ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].pp, 1, 2);
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1);
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_0861CE97);
- sub_81C25A4(windowId2, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x2C), 0x41, 0, 12);
+ SummaryScreen_PrintTextOnWindow(windowId2, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x2C), 0x41, 0, 12);
}
}
-void sub_81C4064(void)
+static void sub_81C4064(void)
{
- u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 0);
- FillWindowPixelRect(windowId, 0, 0, 0x42, 0x48, 0x10);
+ u8 windowId = AddWindowFromTemplateList(gUnknown_0861CD14, 0);
+ FillWindowPixelRect(windowId, 0, 0, 66, 72, 16);
CopyWindowToVram(windowId, 2);
}
-void sub_81C40A0(u8 a, u8 b)
+static void sub_81C40A0(u8 moveIndex1, u8 moveIndex2)
{
- u8 windowId1 = sub_81C2D2C(&gUnknown_0861CD14, 0);
- u8 windowId2 = sub_81C2D2C(&gUnknown_0861CD14, 1);
+ u8 windowId1 = AddWindowFromTemplateList(gUnknown_0861CD14, 0);
+ u8 windowId2 = AddWindowFromTemplateList(gUnknown_0861CD14, 1);
- FillWindowPixelRect(windowId1, 0, 0, a * 16, 0x48, 0x10);
- FillWindowPixelRect(windowId1, 0, 0, b * 16, 0x48, 0x10);
+ FillWindowPixelRect(windowId1, 0, 0, moveIndex1 * 16, 0x48, 0x10);
+ FillWindowPixelRect(windowId1, 0, 0, moveIndex2 * 16, 0x48, 0x10);
- FillWindowPixelRect(windowId2, 0, 0, a * 16, 0x30, 0x10);
- FillWindowPixelRect(windowId2, 0, 0, b * 16, 0x30, 0x10);
+ FillWindowPixelRect(windowId2, 0, 0, moveIndex1 * 16, 0x30, 0x10);
+ FillWindowPixelRect(windowId2, 0, 0, moveIndex2 * 16, 0x30, 0x10);
- sub_81C3B08(a);
- sub_81C3B08(b);
+ PrintMoveNameAndPP(moveIndex1);
+ PrintMoveNameAndPP(moveIndex2);
}
-void sub_81C4154(void)
+static void PrintHMMovesCantBeForgotten(void)
{
- u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 2);
+ u8 windowId = AddWindowFromTemplateList(gUnknown_0861CD14, 2);
FillWindowPixelBuffer(windowId, 0);
- sub_81C25A4(windowId, gText_HMMovesCantBeForgotten2, 6, 1, 0, 0);
+ SummaryScreen_PrintTextOnWindow(windowId, gText_HMMovesCantBeForgotten2, 6, 1, 0, 0);
}
-void sub_81C4190(void)
+static void sub_81C4190(void)
{
u8 i;
for (i = 0; i < 28; i++)
- gUnknown_0203CF1C->unk40D3[i] |= 0xFF;
+ {
+ pssData->spriteIds[i] = 0xFF;
+ }
}
-void sub_81C41C0(u8 spriteArrayId)
+static void DestroySpriteInArray(u8 spriteArrayId)
{
- if (gUnknown_0203CF1C->unk40D3[spriteArrayId] != 0xFF)
+ if (pssData->spriteIds[spriteArrayId] != 0xFF)
{
- DestroySprite(&gSprites[gUnknown_0203CF1C->unk40D3[spriteArrayId]]);
- gUnknown_0203CF1C->unk40D3[spriteArrayId] = 0xFF;
+ DestroySprite(&gSprites[pssData->spriteIds[spriteArrayId]]);
+ pssData->spriteIds[spriteArrayId] = 0xFF;
}
}
-void sub_81C4204(u8 spriteArrayId, bool8 invisible)
+static void sub_81C4204(u8 spriteArrayId, bool8 invisible)
{
- gSprites[gUnknown_0203CF1C->unk40D3[spriteArrayId]].invisible = invisible;
+ gSprites[pssData->spriteIds[spriteArrayId]].invisible = invisible;
}
-void sub_81C424C(void)
+static void sub_81C424C(void)
{
u8 i;
for (i = 3; i < 28; i++)
{
- if (gUnknown_0203CF1C->unk40D3[i] != 0xFF)
+ if (pssData->spriteIds[i] != 0xFF)
sub_81C4204(i, TRUE);
}
}
-void sub_81C4280(void)
+static void sub_81C4280(void)
{
- switch (gUnknown_0203CF1C->unk40C0)
+ switch (pssData->currPageIndex)
{
case 0:
sub_81C43A0();
@@ -3730,45 +3696,43 @@ void sub_81C4280(void)
}
}
-void sub_81C42C8(void)
+static void sub_81C42C8(void)
{
u8 i;
for (i = 3; i < 8; i++)
{
- if (gUnknown_0203CF1C->unk40D3[i] == 0xFF)
- gUnknown_0203CF1C->unk40D3[i] = CreateSprite(&gUnknown_0861CFC4, 0, 0, 2);
+ if (pssData->spriteIds[i] == 0xFF)
+ pssData->spriteIds[i] = CreateSprite(&sSpriteTemplate_MoveTypes, 0, 0, 2);
sub_81C4204(i, TRUE);
}
}
-extern const u8 gUnknown_0861CFDC[];
-
-void sub_81C4318(u8 typeId, u8 x, u8 y, u8 spriteArrayId)
+static void SetMoveTypeSpritePosAndType(u8 typeId, u8 x, u8 y, u8 spriteArrayId)
{
- struct Sprite *sprite = &gSprites[gUnknown_0203CF1C->unk40D3[spriteArrayId]];
+ struct Sprite *sprite = &gSprites[pssData->spriteIds[spriteArrayId]];
StartSpriteAnim(sprite, typeId);
- sprite->oam.paletteNum = gUnknown_0861CFDC[typeId];
+ sprite->oam.paletteNum = sMoveTypeToOamPaletteNum[typeId];
sprite->pos1.x = x + 16;
sprite->pos1.y = y + 8;
sub_81C4204(spriteArrayId, FALSE);
}
-void sub_81C43A0(void)
+static void sub_81C43A0(void)
{
- struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
+ struct PokeSummary *summary = &pssData->summary;
if (summary->isEgg)
{
- sub_81C4318(TYPE_MYSTERY, 0x78, 0x30, 3);
+ SetMoveTypeSpritePosAndType(TYPE_MYSTERY, 120, 48, 3);
sub_81C4204(4, TRUE);
}
else
{
- sub_81C4318(gBaseStats[summary->species].type1, 0x78, 0x30, 3);
+ SetMoveTypeSpritePosAndType(gBaseStats[summary->species].type1, 0x78, 0x30, 3);
if (gBaseStats[summary->species].type1 != gBaseStats[summary->species].type2)
{
- sub_81C4318(gBaseStats[summary->species].type2, 0xA0, 0x30, 4);
+ SetMoveTypeSpritePosAndType(gBaseStats[summary->species].type2, 0xA0, 0x30, 4);
sub_81C4204(4, FALSE);
}
else
@@ -3778,43 +3742,379 @@ void sub_81C43A0(void)
}
}
-void sub_81C4420(void)
+static void sub_81C4420(void)
{
u8 i;
- struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
+ struct PokeSummary *summary = &pssData->summary;
for (i = 0; i < 4; i++)
{
if (summary->moves[i] != MOVE_NONE)
- sub_81C4318(gBattleMoves[summary->moves[i]].type, 0x55, 0x20 + (i * 0x10), i + 3);
+ SetMoveTypeSpritePosAndType(gBattleMoves[summary->moves[i]].type, 0x55, 0x20 + (i * 0x10), i + 3);
else
sub_81C4204(i + 3, TRUE);
}
}
-void sub_81C4484(void)
+static void sub_81C4484(void)
{
u8 i;
- struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
+ struct PokeSummary *summary = &pssData->summary;
for (i = 0; i < 4; i++)
{
if (summary->moves[i] != MOVE_NONE)
- sub_81C4318(NUMBER_OF_MON_TYPES + gContestMoves[summary->moves[i]].contestCategory, 0x55, 0x20 + (i * 0x10), i + 3);
+ SetMoveTypeSpritePosAndType(NUMBER_OF_MON_TYPES + gContestMoves[summary->moves[i]].contestCategory, 0x55, 0x20 + (i * 0x10), i + 3);
else
sub_81C4204(i + 3, TRUE);
}
}
-void sub_81C44F0(void)
+static void sub_81C44F0(void)
{
- if (gUnknown_0203CF1C->unk40C4 == MOVE_NONE)
+ if (pssData->newMove == MOVE_NONE)
{
sub_81C4204(7, TRUE);
}
else
{
- if (gUnknown_0203CF1C->unk40C0 == 2)
- sub_81C4318(gBattleMoves[gUnknown_0203CF1C->unk40C4].type, 0x55, 0x60, 7);
+ if (pssData->currPageIndex == 2)
+ SetMoveTypeSpritePosAndType(gBattleMoves[pssData->newMove].type, 85, 96, 7);
else
- sub_81C4318(NUMBER_OF_MON_TYPES + gContestMoves[gUnknown_0203CF1C->unk40C4].contestCategory, 0x55, 0x60, 7);
+ SetMoveTypeSpritePosAndType(NUMBER_OF_MON_TYPES + gContestMoves[pssData->newMove].contestCategory, 85, 96, 7);
+ }
+}
+
+static void sub_81C4568(u8 a0, u8 a1)
+{
+ struct Sprite *sprite1 = &gSprites[pssData->spriteIds[a0 + 3]];
+ struct Sprite *sprite2 = &gSprites[pssData->spriteIds[a1 + 3]];
+
+ u8 temp = sprite1->animNum;
+ sprite1->animNum = sprite2->animNum;
+ sprite2->animNum = temp;
+
+ temp = sprite1->oam.paletteNum;
+ sprite1->oam.paletteNum = sprite2->oam.paletteNum;
+ sprite2->oam.paletteNum = temp;
+
+ sprite1->animBeginning = TRUE;
+ sprite1->animEnded = FALSE;
+ sprite2->animBeginning = TRUE;
+ sprite2->animEnded = FALSE;
+}
+
+static u8 sub_81C45F4(struct Pokemon *mon, s16 *a1)
+{
+ const struct CompressedSpritePalette *pal;
+ struct PokeSummary *summary = &pssData->summary;
+
+ switch (*a1)
+ {
+ default:
+ return sub_81C47B4(mon);
+ case 0:
+ if (gMain.inBattle)
+ {
+ if (sub_80688F8(3, pssData->curMonIndex))
+ {
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid);
+ }
+ else
+ {
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid);
+ }
+ }
+ else
+ {
+ if (gMonSpritesGfxPtr != NULL)
+ {
+ if (pssData->monList.mons == gPlayerParty || pssData->mode == PSS_MODE_UNK2 || pssData->unk40EF == TRUE)
+ {
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid);
+ }
+ else
+ {
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid);
+ }
+ }
+ else
+ {
+ if (pssData->monList.mons == gPlayerParty || pssData->mode == PSS_MODE_UNK2 || pssData->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);
+ }
+ }
+ }
+ (*a1)++;
+ return -1;
+ case 1:
+ pal = GetMonSpritePalStructFromOtIdPersonality(summary->species2, summary->OTID, summary->pid);
+ LoadCompressedObjectPalette(pal);
+ SetMultiuseSpriteTemplateToPokemon(pal->tag, 1);
+ (*a1)++;
+ return -1;
+ }
+}
+
+static void sub_81C4778(void)
+{
+ struct PokeSummary *summary = &pssData->summary;
+ if (!summary->isEgg)
+ {
+ if (ShouldPlayNormalMonCry(&pssData->currentMon) == TRUE)
+ {
+ PlayCry3(summary->species2, 0, 0);
+ }
+ else
+ {
+ PlayCry3(summary->species2, 0, 11);
+ }
+ }
+}
+
+static u8 sub_81C47B4(struct Pokemon *unused)
+{
+ struct PokeSummary *summary = &pssData->summary;
+ u8 spriteId = CreateSprite(&gMultiuseSpriteTemplate, 40, 64, 5);
+ struct Sprite *sprite = &gSprites[spriteId];
+
+ FreeSpriteOamMatrix(sprite);
+
+ sprite->data[0] = summary->species2;
+ sprite->data[2] = 0;
+ gSprites[spriteId].callback = sub_81C4844;
+ sprite->oam.priority = 0;
+
+ if (!IsMonSpriteNotFlipped(summary->species2))
+ {
+ sprite->hFlip = TRUE;
+ }
+ else
+ {
+ sprite->hFlip = FALSE;
+ }
+
+ return spriteId;
+}
+
+static void sub_81C4844(struct Sprite *sprite)
+{
+ struct PokeSummary *summary = &pssData->summary;
+
+ if (!gPaletteFade.active && sprite->data[2] != 1)
+ {
+ sprite->data[1] = IsMonSpriteNotFlipped(sprite->data[0]);
+ sub_81C4778();
+ PokemonSummaryDoMonAnimation(sprite, sprite->data[0], summary->isEgg);
+ }
+}
+
+void SummaryScreen_SetUnknownTaskId(u8 a0)
+{
+ sUnknownTaskId = a0;
+}
+
+void SummaryScreen_DestroyUnknownTask(void)
+{
+ if (sUnknownTaskId != 0xFF)
+ {
+ DestroyTask(sUnknownTaskId);
+ sUnknownTaskId = 0xFF;
+ }
+}
+
+static bool32 SummaryScreen_DoesSpriteHaveCallback(void)
+{
+ if (gSprites[pssData->spriteIds[0]].callback == SpriteCallbackDummy)
+ {
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+static void sub_81C48F0(void)
+{
+ u16 i;
+ u16 paletteIndex;
+
+ gSprites[pssData->spriteIds[0]].animPaused = TRUE;
+ gSprites[pssData->spriteIds[0]].callback = SpriteCallbackDummy;
+ sub_806EE98();
+
+ paletteIndex = (gSprites[pssData->spriteIds[0]].oam.paletteNum * 16) | 0x100;
+
+ for (i = 0; i < 16; i++)
+ {
+ gPlttBufferUnfaded[(u16)(i + paletteIndex)] = gPlttBufferFaded[(u16)(i + paletteIndex)];
+ }
+}
+
+static void CreateMonMarkingsSprite(struct Pokemon *mon)
+{
+ struct Sprite *sprite = sub_811FF94(30003, 30003, gUnknown_0861D120);
+
+ pssData->markingsSprite = sprite;
+
+ if (sprite != NULL)
+ {
+ StartSpriteAnim(sprite, GetMonData(mon, MON_DATA_MARKINGS));
+ pssData->markingsSprite->pos1.x = 60;
+ pssData->markingsSprite->pos1.y = 26;
+ pssData->markingsSprite->oam.priority = 1;
+ }
+}
+
+static void RemoveAndCreateMonMarkingsSprite(struct Pokemon *mon)
+{
+ DestroySprite(pssData->markingsSprite);
+ FreeSpriteTilesByTag(30003);
+ CreateMonMarkingsSprite(mon);
+}
+
+static void CreateCaughtBallSprite(struct Pokemon *mon)
+{
+ u8 ball = ItemIdToBallId(GetMonData(mon, MON_DATA_POKEBALL));
+
+ LoadBallGfx(ball);
+ pssData->spriteIds[1] = CreateSprite(&gBallSpriteTemplates[ball], 16, 136, 0);
+ gSprites[pssData->spriteIds[1]].callback = SpriteCallbackDummy;
+ gSprites[pssData->spriteIds[1]].oam.priority = 3;
+}
+
+static void CreateSetStatusSprite(void)
+{
+ u8 *spriteId = &pssData->spriteIds[2];
+ u8 anim;
+
+ if (*spriteId == 0xFF)
+ {
+ *spriteId = CreateSprite(&sSpriteTemplate_StatusCondition, 64, 152, 0);
+ }
+
+ anim = sub_81B205C(&pssData->currentMon);
+
+ if (anim != 0)
+ {
+ StartSpriteAnim(&gSprites[*spriteId], anim - 1);
+ sub_81C4204(2, FALSE);
+ }
+ else
+ {
+ sub_81C4204(2, TRUE);
+ }
+}
+
+static void sub_81C4AF8(u8 a0)
+{
+ u8 i;
+ u8 *spriteIds = &pssData->spriteIds[a0];
+
+ if (pssData->currPageIndex > 1)
+ {
+ u8 subsprite = 0;
+ if (a0 == 8)
+ {
+ subsprite = 1;
+ }
+
+ for (i = 0; i < 10; i++)
+ {
+ spriteIds[i] = CreateSprite(&gUnknown_0861D084, i * 16 + 89, 40, subsprite);
+ if (i == 0)
+ {
+ StartSpriteAnim(&gSprites[spriteIds[0]], 4);
+ }
+ else if (i == 9)
+ {
+ StartSpriteAnim(&gSprites[spriteIds[9]], 5);
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteIds[i]], 6);
+ }
+ gSprites[spriteIds[i]].callback = sub_81C4BE4;
+ gSprites[spriteIds[i]].data[0] = a0;
+ gSprites[spriteIds[i]].data[1] = 0;
+ }
+ }
+}
+
+static void sub_81C4BE4(struct Sprite *sprite)
+{
+ if (sprite->animNum > 3 && sprite->animNum < 7)
+ {
+ sprite->data[1] = (sprite->data[1] + 1) & 0x1F;
+ if (sprite->data[1] > 24)
+ {
+ sprite->invisible = TRUE;
+ }
+ else
+ {
+ sprite->invisible = FALSE;
+ }
+ }
+ else
+ {
+ sprite->data[1] = 0;
+ sprite->invisible = FALSE;
+ }
+
+ if (sprite->data[0] == 8)
+ {
+ sprite->pos2.y = pssData->firstMoveIndex * 16;
+ }
+ else
+ {
+ sprite->pos2.y = pssData->secondMoveIndex * 16;
+ }
+}
+
+static void sub_81C4C60(u8 a0)
+{
+ u8 i;
+ for (i = 0; i < 10; i++)
+ {
+ DestroySpriteInArray(a0 + i);
+ }
+}
+
+static void sub_81C4C84(u8 a0)
+{
+ u8 i;
+ u8 *spriteIds = &pssData->spriteIds[8];
+ a0 *= 3;
+
+ for (i = 0; i < 10; i++)
+ {
+ if (i == 0)
+ {
+ StartSpriteAnim(&gSprites[spriteIds[0]], a0 + 4);
+ }
+ else if (i == 9)
+ {
+ StartSpriteAnim(&gSprites[spriteIds[9]], a0 + 5);
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteIds[i]], a0 + 6);
+ }
+ }
+}
+
+static void sub_81C4D18(u8 firstSpriteId)
+{
+ u8 i;
+ u8 *spriteIds = &pssData->spriteIds[firstSpriteId];
+
+ for (i = 0; i < 10; i++)
+ {
+ gSprites[spriteIds[i]].data[1] = 0;
+ gSprites[spriteIds[i]].invisible = FALSE;
}
}