summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_main.c2
-rw-r--r--src/battle_script_commands.c4
-rw-r--r--src/battle_setup.c2
-rw-r--r--src/battle_util2.c6
-rw-r--r--src/berry_fix_graphics.c (renamed from src/unk_81BAD84.c)24
-rw-r--r--src/berry_fix_program.c86
-rwxr-xr-xsrc/berry_powder.c112
-rw-r--r--src/cable_club.c8
-rw-r--r--src/contest_link_80F57C4.c256
-rw-r--r--src/data/graphics/slot_machine.h3
-rwxr-xr-xsrc/field_message_box.c2
-rw-r--r--src/field_poison.c2
-rw-r--r--src/graphics.c32
-rwxr-xr-xsrc/item_menu.c34
-rw-r--r--src/main_menu.c2
-rw-r--r--src/match_call.c6
-rw-r--r--src/menu.c22
-rw-r--r--src/menu_specialized.c2
-rwxr-xr-xsrc/party_menu.c2
-rw-r--r--src/player_pc.c6
-rw-r--r--src/pokemon.c109
-rw-r--r--src/pokemon_storage_system.c4
-rw-r--r--src/pokenav.c30
-rw-r--r--src/pokenav_conditions_1.c (renamed from src/pokenav_unk_6.c)6
-rw-r--r--src/pokenav_conditions_2.c (renamed from src/pokenav_unk_7.c)0
-rw-r--r--src/pokenav_conditions_3.c (renamed from src/pokenav_unk_8.c)26
-rwxr-xr-xsrc/pokenav_match_call_1.c (renamed from src/pokenav_unk_3.c)0
-rwxr-xr-xsrc/pokenav_match_call_2.c (renamed from src/pokenav_unk_4.c)2
-rw-r--r--src/pokenav_menu_handler_1.c513
-rw-r--r--src/pokenav_menu_handler_2.c (renamed from src/pokenav_unk_2.c)280
-rwxr-xr-xsrc/pokenav_region_map.c (renamed from src/pokenav_unk_5.c)0
-rw-r--r--src/pokenav_ribbons_1.c (renamed from src/pokenav_unk_9.c)32
-rw-r--r--src/pokenav_ribbons_2.c (renamed from src/pokenav_unk_10.c)12
-rw-r--r--src/pokenav_unk_1.c466
-rw-r--r--src/reset_rtc_screen.c2
-rw-r--r--src/rotating_tile_puzzle.c89
-rw-r--r--src/scrcmd.c2
-rw-r--r--src/slot_machine.c2375
-rw-r--r--src/start_menu.c20
-rw-r--r--src/strings.c6
-rwxr-xr-xsrc/trainer_card.c877
-rw-r--r--src/trainer_pokemon_sprites.c11
-rw-r--r--src/tv.c2
-rw-r--r--src/union_room.c8
44 files changed, 4093 insertions, 1392 deletions
diff --git a/src/battle_main.c b/src/battle_main.c
index bcef3b286..0f6ec40a4 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -718,7 +718,7 @@ static void CB2_InitBattleInternal(void)
gSaveBlock2Ptr->frontier.disableRecordBattle = FALSE;
for (i = 0; i < PARTY_SIZE; i++)
- AdjustFriendship(&gPlayerParty[i], 3);
+ AdjustFriendship(&gPlayerParty[i], FRIENDSHIP_EVENT_LEAGUE_BATTLE);
gBattleCommunication[MULTIUSE_STATE] = 0;
}
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 8924c6729..685626a85 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -3434,7 +3434,7 @@ static void Cmd_getexp(void)
gLeveledUpInBattle |= gBitTable[gBattleStruct->expGetterMonId];
gBattlescriptCurrInstr = BattleScript_LevelUp;
gBattleMoveDamage = (gBattleBufferB[gActiveBattler][2] | (gBattleBufferB[gActiveBattler][3] << 8));
- AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterMonId], 0);
+ AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterMonId], FRIENDSHIP_EVENT_GROW_LEVEL);
// update battle mon structure after level up
if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId && gBattleMons[0].hp)
@@ -6351,7 +6351,7 @@ static void PutLevelAndGenderOnLvlUpBox(void)
txtPtr = gStringVar4;
gStringVar4[0] = CHAR_SPECIAL_F9;
txtPtr++;
- txtPtr[0] = 5;
+ txtPtr[0] = CHAR_LV_2;
txtPtr++;
var = (u32)(txtPtr);
diff --git a/src/battle_setup.c b/src/battle_setup.c
index f6b386bf8..eff57eae3 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -321,7 +321,7 @@ const struct RematchTrainer gRematchTable[REMATCH_TABLE_ENTRIES] =
[REMATCH_WALLACE] = REMATCH(TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, EVER_GRANDE_CITY),
};
-static const u16 sBadgeFlags[8] =
+static const u16 sBadgeFlags[NUM_BADGES] =
{
FLAG_BADGE01_GET, FLAG_BADGE02_GET, FLAG_BADGE03_GET, FLAG_BADGE04_GET,
FLAG_BADGE05_GET, FLAG_BADGE06_GET, FLAG_BADGE07_GET, FLAG_BADGE08_GET,
diff --git a/src/battle_util2.c b/src/battle_util2.c
index fd0dda76b..6d51f51e7 100644
--- a/src/battle_util2.c
+++ b/src/battle_util2.c
@@ -92,13 +92,13 @@ void AdjustFriendshipOnBattleFaint(u8 battlerId)
if (gBattleMons[opposingBattlerId].level > gBattleMons[battlerId].level)
{
if (gBattleMons[opposingBattlerId].level - gBattleMons[battlerId].level > 29)
- AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 8);
+ AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], FRIENDSHIP_EVENT_FAINT_LARGE);
else
- AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 6);
+ AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], FRIENDSHIP_EVENT_FAINT_SMALL);
}
else
{
- AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 6);
+ AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], FRIENDSHIP_EVENT_FAINT_SMALL);
}
}
diff --git a/src/unk_81BAD84.c b/src/berry_fix_graphics.c
index adf43bb90..b37645d4c 100644
--- a/src/unk_81BAD84.c
+++ b/src/berry_fix_graphics.c
@@ -1,11 +1,12 @@
#include "global.h"
#include "graphics.h"
-const struct {
+// Duplicate of sBerryFixGraphics in berry_fix_program.c
+static const struct {
const u32 *gfx;
- const u32 *tileMap;
+ const u32 *tilemap;
const u16 *pltt;
-} gUnknown_08617128[] = {
+} sBerryFixGraphics[] = {
{
gBerryFixGameboy_Gfx,
gBerryFixGameboy_Tilemap,
@@ -33,15 +34,16 @@ const struct {
}
};
-void sub_81BAD84(u32 idx)
+// Unused. See berry_fix_program.c
+static void LoadBerryFixGraphics(u32 idx)
{
- REG_DISPCNT = 0x0000;
- REG_BG0HOFS = 0x0000;
- REG_BG0VOFS = 0x0000;
- REG_BLDCNT = 0x0000;
- LZ77UnCompVram(gUnknown_08617128[idx].gfx, (void *)BG_CHAR_ADDR(0));
- LZ77UnCompVram(gUnknown_08617128[idx].tileMap, (void *)BG_SCREEN_ADDR(31));
- CpuCopy16(gUnknown_08617128[idx].pltt, (void *)PLTT, 0x200);
+ REG_DISPCNT = 0;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BLDCNT = 0;
+ LZ77UnCompVram(sBerryFixGraphics[idx].gfx, (void *)BG_CHAR_ADDR(0));
+ LZ77UnCompVram(sBerryFixGraphics[idx].tilemap, (void *)BG_SCREEN_ADDR(31));
+ CpuCopy16(sBerryFixGraphics[idx].pltt, (void *)PLTT, 0x200);
REG_BG0CNT = 0x1f00;
REG_DISPCNT = DISPCNT_BG0_ON;
}
diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c
index f42531f15..dcc21d036 100644
--- a/src/berry_fix_program.c
+++ b/src/berry_fix_program.c
@@ -47,20 +47,65 @@ static const u8 sText_TransmittingPleaseWait[] = _("Transmitting. Please wait.\n
static const u8 sText_PleaseFollowInstructionsOnScreen[] = _("Please follow the instructions on your\nPOKéMON Ruby/Sapphire screen.");
static const u8 sText_TransmissionFailureTryAgain[] = _("Transmission failure.\n{COLOR RED}{SHADOW LIGHT_RED}Please try again.");
-static const struct BgTemplate gUnknown_08618108[] = {
+static const struct BgTemplate sBerryFixBgTemplates[] = {
{
- 0, 0, 30, 0, 0, 0
- }, {
- 1, 1, 31, 0, 0, 1
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 1,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
}
};
-static const struct WindowTemplate gUnknown_08618110[] = {
- {0, 2, 4, 26, 2, 15, 0x001},
- {0, 1, 11, 28, 8, 15, 0x035},
- {0, 0, 8, 30, 2, 15, 0x115},
- {0, 8, 0, 14, 2, 15, 0x151},
- {-1}
+static const struct WindowTemplate sBerryFixWindowTemplates[] = {
+ {
+ .bg = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 4,
+ .width = 26,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 1
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 11,
+ .width = 28,
+ .height = 8,
+ .paletteNum = 15,
+ .baseBlock = 53
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 8,
+ .width = 30,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 277
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 8,
+ .tilemapTop = 0,
+ .width = 14,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 337
+ },
+ DUMMY_WIN_TEMPLATE
};
static const u16 sUnknown_08618138[] = {
@@ -82,7 +127,12 @@ static const u8 *const sBerryProgramTexts[] = {
sText_BerryProgramWillBeUpdatedPressA
};
-static const void *const gUnknown_08618178[][3] = {
+
+static const struct {
+ const u32 *gfx;
+ const u32 *tilemap;
+ const u16 *pltt;
+} sBerryFixGraphics[] = {
{
gBerryFixGameboy_Gfx,
gBerryFixGameboy_Tilemap,
@@ -117,8 +167,8 @@ extern const u8 gMultiBootProgram_BerryGlitchFix_End[];
void CB2_InitBerryFixProgram(void)
{
- DisableInterrupts(0xFFFF);
- EnableInterrupts(0x0001);
+ DisableInterrupts(0xFFFF); // all
+ EnableInterrupts(INTR_FLAG_VBLANK);
m4aSoundVSyncOff();
SetVBlankCallback(NULL);
ResetSpriteData();
@@ -216,12 +266,12 @@ static void berry_fix_gpu_set(void)
DmaFill32(3, 0, PLTT, PLTT_SIZE);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_08618108, ARRAY_COUNT(gUnknown_08618108));
+ InitBgsFromTemplates(0, sBerryFixBgTemplates, ARRAY_COUNT(sBerryFixBgTemplates));
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
- InitWindows(gUnknown_08618110);
+ InitWindows(sBerryFixWindowTemplates);
DeactivateAllTextPrinters();
DmaCopy32(3, sUnknown_08618138, BG_PLTT + 0x1E0, 0x20);
@@ -293,9 +343,9 @@ static void berry_fix_text_print(int scene)
break;
}
CopyBgTilemapBufferToVram(0);
- LZ77UnCompVram(gUnknown_08618178[scene][0], (void *)BG_CHAR_ADDR(1));
- LZ77UnCompVram(gUnknown_08618178[scene][1], (void *)BG_SCREEN_ADDR(31));
- CpuCopy32(gUnknown_08618178[scene][2], (void *)BG_PLTT, 0x100);
+ LZ77UnCompVram(sBerryFixGraphics[scene].gfx, (void *)BG_CHAR_ADDR(1));
+ LZ77UnCompVram(sBerryFixGraphics[scene].tilemap, (void *)BG_SCREEN_ADDR(31));
+ CpuCopy32(sBerryFixGraphics[scene].pltt, (void *)BG_PLTT, 0x100);
ShowBg(0);
ShowBg(1);
}
diff --git a/src/berry_powder.c b/src/berry_powder.c
index 91f9d0d4e..50d280f0a 100755
--- a/src/berry_powder.c
+++ b/src/berry_powder.c
@@ -14,6 +14,118 @@
static EWRAM_DATA u8 sBerryPowderVendorWindowId = 0;
+// Unused
+static const struct BgTemplate sBerryPowderBgTemplates[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 12,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 14,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 3,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+};
+
+// ? Part of the BG templates?
+static const u32 sUnknown[] = {0xFF, 0x00};
+
+// Unused
+static const struct WindowTemplate sBerryPowderWindowTemplates[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 1,
+ .width = 28,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 19
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 5,
+ .width = 28,
+ .height = 14,
+ .paletteNum = 13,
+ .baseBlock = 75
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 5,
+ .width = 28,
+ .height = 7,
+ .paletteNum = 13,
+ .baseBlock = 75
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 8,
+ .width = 19,
+ .height = 3,
+ .paletteNum = 13,
+ .baseBlock = 19
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 7,
+ .width = 6,
+ .height = 4,
+ .paletteNum = 13,
+ .baseBlock = 76
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 4,
+ .tilemapTop = 6,
+ .width = 22,
+ .height = 5,
+ .paletteNum = 13,
+ .baseBlock = 19
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 5,
+ .tilemapTop = 8,
+ .width = 19,
+ .height = 3,
+ .paletteNum = 13,
+ .baseBlock = 19
+ },
+};
+
static u32 DecryptBerryPowder(u32 *powder)
{
return *powder ^ gSaveBlock2Ptr->encryptionKey;
diff --git a/src/cable_club.c b/src/cable_club.c
index 11920bea9..c2ac72883 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -1190,16 +1190,16 @@ void Script_ShowLinkTrainerCard(void)
// color into gStringVar2.
bool32 GetLinkTrainerCardColor(u8 linkPlayerIndex)
{
- u32 trainerCardColorIndex;
+ u32 numStars;
gSpecialVar_0x8006 = linkPlayerIndex;
StringCopy(gStringVar1, gLinkPlayers[linkPlayerIndex].name);
- trainerCardColorIndex = GetTrainerCardStars(linkPlayerIndex);
- if (trainerCardColorIndex == 0)
+ numStars = GetTrainerCardStars(linkPlayerIndex);
+ if (numStars == 0)
return FALSE;
- StringCopy(gStringVar2, gTrainerCardColorNames[trainerCardColorIndex - 1]);
+ StringCopy(gStringVar2, gTrainerCardColorNames[numStars - 1]);
return TRUE;
}
diff --git a/src/contest_link_80F57C4.c b/src/contest_link_80F57C4.c
index 8a1fce64b..0cecaed07 100644
--- a/src/contest_link_80F57C4.c
+++ b/src/contest_link_80F57C4.c
@@ -83,19 +83,6 @@ struct ContestLink80F57C4
EWRAM_DATA struct ContestLink80F57C4 *gUnknown_0203A034 = NULL;
-extern const struct BgTemplate gUnknown_0858D888[4];
-extern const struct WindowTemplate gUnknown_0858D898[];
-extern const struct CompressedSpriteSheet gUnknown_0858D878[];
-extern const struct CompressedSpritePalette gUnknown_0858D880[];
-extern const struct SpriteSheet gUnknown_0858D8E0;
-extern const struct SpriteTemplate gSpriteTemplate_858D8C8;
-extern const u8 sContestLinkTextColors[];
-extern const u8 gUnknown_0858D6D0[];
-extern const struct SpriteTemplate gSpriteTemplate_858D7F8;
-extern const struct SpriteSheet gUnknown_0858D810[];
-extern const struct SpritePalette gUnknown_0858D850;
-extern const struct SpriteTemplate gSpriteTemplate_858D860;
-
static void sub_80F6A9C(void);
static void sub_80F71C8(void);
u8 sub_80F7310(u8, u8);
@@ -152,6 +139,219 @@ static void sub_80F85BC(u8);
static void sub_80F86B8(u8);
static void sub_80F878C(u8);
static void sub_80F87B4(u8);
+static void sub_80F7768(struct Sprite *sprite);
+
+static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal");
+static const u8 sUnknown_0858D6D0[] = INCBIN_U8("graphics/unknown/unknown_58D6D0.4bpp");
+static const u16 sMiscBlank_Pal[] = INCBIN_U16("graphics/interface/blank.gbapal");
+
+static const struct OamData sOamData_858D7F0 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x32),
+ .tileNum = 0,
+ .priority = 3,
+ .paletteNum = 2,
+ .affineParam = 0,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_858D7F8 =
+{
+ .tileTag = 3009,
+ .paletteTag = 3009,
+ .oam = &sOamData_858D7F0,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteSheet sUnknown_0858D810[] =
+{
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3009 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3010 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3011 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3012 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3013 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3014 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3015 },
+ { .data = gMiscBlank_Gfx, .size = 0x400, .tag = 3016 },
+};
+
+static const struct SpritePalette sUnknown_0858D850 =
+{
+ .data = sMiscBlank_Pal,
+ .tag = 3009,
+};
+
+static const struct OamData sOamData_858D858 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(8x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x8),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_858D860 =
+{
+ .tileTag = 3017,
+ .paletteTag = 3017,
+ .oam = &sOamData_858D858,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80F7768
+};
+
+static const struct CompressedSpriteSheet sUnknown_0858D878 =
+{
+ .data = gContestConfetti_Gfx,
+ .size = 0x220,
+ .tag = 3017
+};
+
+
+static const struct CompressedSpritePalette sUnknown_0858D880 =
+{
+ .data = gContestConfetti_Pal,
+ .tag = 3017
+};
+
+static const struct BgTemplate sUnknown_0858D888[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0,
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 24,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0,
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 28,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0,
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 26,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0,
+ }
+};
+
+static const struct WindowTemplate sUnknown_0858D898[] =
+{
+ {
+ .bg = 1,
+ .tilemapLeft = 7,
+ .tilemapTop = 4,
+ .width = 12,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 770
+ },
+ {
+ .bg = 1,
+ .tilemapLeft = 7,
+ .tilemapTop = 7,
+ .width = 12,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 794
+ },
+ {
+ .bg = 1,
+ .tilemapLeft = 7,
+ .tilemapTop = 10,
+ .width = 12,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 818
+ },
+ {
+ .bg = 1,
+ .tilemapLeft = 7,
+ .tilemapTop = 13,
+ .width = 12,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 842
+ },
+ DUMMY_WIN_TEMPLATE,
+};
+
+static const struct OamData sUnknown_0858D8C0 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x16),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+
+static const struct SpriteTemplate sSpriteTemplate_858D8C8 =
+{
+ .tileTag = 22222,
+ .paletteTag = 0,
+ .oam = &sUnknown_0858D8C0,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteSheet sUnknown_0858D8E0 =
+{
+ .data = gMiscBlank_Gfx,
+ .size = 0x200,
+ .tag = 22222
+};
+
+static const u8 sContestLinkTextColors[4] = {TEXT_COLOR_WHITE, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5};
+
void sub_80F57C4(void)
{
@@ -159,11 +359,11 @@ void sub_80F57C4(void)
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_0858D888, ARRAY_COUNT(gUnknown_0858D888));
+ InitBgsFromTemplates(0, sUnknown_0858D888, ARRAY_COUNT(sUnknown_0858D888));
for (i = 0; i < 4; i++)
SetBgTilemapBuffer(i, gUnknown_0203A034->unkC[i]);
- InitWindows(gUnknown_0858D898);
+ InitWindows(sUnknown_0858D898);
DeactivateAllTextPrinters();
SetGpuReg(REG_OFFSET_MOSAIC, 0);
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
@@ -210,7 +410,7 @@ void sub_80F591C(void)
CopyToBgTilemapBuffer(0, gUnknown_08C19EEC, 0, 0);
sub_80F71C8();
LoadCompressedPalette(gUnknown_08C1A2B4, 0, 0x200);
- LoadPalette(gUnknown_0858D6B0, 0xF0, 0x20);
+ LoadPalette(sUnknown_0858D6B0, 0xF0, 0x20);
for (i = 0; i < 4; i++)
{
@@ -669,8 +869,8 @@ static void sub_80F6404(u8 taskId)
gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].callback = sub_80F75A8;
gUnknown_0203A034->unk0->spriteId = spriteId;
- LoadCompressedSpriteSheet(gUnknown_0858D878);
- LoadCompressedSpritePalette(gUnknown_0858D880);
+ LoadCompressedSpriteSheet(&sUnknown_0858D878);
+ LoadCompressedSpritePalette(&sUnknown_0858D880);
CreateTask(sub_80F7670, 10);
gTasks[taskId].data[0]++;
break;
@@ -900,9 +1100,9 @@ static void sub_80F6AE8(void)
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(8, 8);
gSprites[gWirelessStatusIndicatorSpriteId].subpriority = 1;
- sheet = LoadSpriteSheet(&gUnknown_0858D8E0);
+ sheet = LoadSpriteSheet(&sUnknown_0858D8E0);
RequestDma3Fill(0xFFFFFFFF, (void *)BG_CHAR_ADDR(4) + sheet * 0x20, 0x80, 1);
- spriteId = CreateSprite(&gSpriteTemplate_858D8C8, 8, 8, 0);
+ spriteId = CreateSprite(&sSpriteTemplate_858D8C8, 8, 8, 0);
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW;
}
}
@@ -937,7 +1137,7 @@ s32 sub_80F6B78(const u8 *text, u8 spriteId)
AddTextPrinterParameterized3(windowId, 1, (strWidth * 8 - origWidth) / 2, 1, sContestLinkTextColors, -1, text);
windowTilesPtr = (u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA));
- src = (u8 *)(gUnknown_0858D6D0);
+ src = (u8 *)(sUnknown_0858D6D0);
sprite = &gSprites[spriteId];
spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + VRAM + 0x10000);
@@ -1043,7 +1243,7 @@ _080F6BD0:\n\
movs r1, 0x7\n\
bl GetWindowAttribute\n\
mov r9, r0\n\
- ldr r2, =gUnknown_0858D6D0\n\
+ ldr r2, =sUnknown_0858D6D0\n\
mov r8, r2\n\
lsls r1, r7, 4\n\
adds r1, r7\n\
@@ -1257,11 +1457,11 @@ static void sub_80F6DC0(void)
struct SpriteTemplate template;
u8 spriteIds[8];
- template = gSpriteTemplate_858D7F8;
- for (i = 0; i < 8; i++)
- LoadSpriteSheet(&gUnknown_0858D810[i]);
+ template = sSpriteTemplate_858D7F8;
+ for (i = 0; i < (int)ARRAY_COUNT(sUnknown_0858D810); i++)
+ LoadSpriteSheet(&sUnknown_0858D810[i]);
- LoadSpritePalette(&gUnknown_0858D850);
+ LoadSpritePalette(&sUnknown_0858D850);
for (i = 0; i < 8; i++)
{
spriteIds[i] = CreateSprite(&template, 272, 144, 10);
@@ -1629,7 +1829,7 @@ static void sub_80F7670(u8 taskId)
gTasks[taskId].data[0] = 0;
if (gUnknown_0203A034->unk0->unk7 < 40)
{
- u8 spriteId = CreateSprite(&gSpriteTemplate_858D860, (Random() % 240) - 20, 44, 5);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_858D860, (Random() % 240) - 20, 44, 5);
gSprites[spriteId].data[0] = Random() % 512;
gSprites[spriteId].data[1] = (Random() % 24) + 16;
gSprites[spriteId].data[2] = (Random() % 256) + 48;
@@ -1642,7 +1842,7 @@ static void sub_80F7670(u8 taskId)
DestroyTask(taskId);
}
-void sub_80F7768(struct Sprite *sprite)
+static void sub_80F7768(struct Sprite *sprite)
{
s16 delta;
diff --git a/src/data/graphics/slot_machine.h b/src/data/graphics/slot_machine.h
index 3f351f7ba..a94f2b622 100644
--- a/src/data/graphics/slot_machine.h
+++ b/src/data/graphics/slot_machine.h
@@ -58,3 +58,6 @@ const u8 gSlotMachineReelTimeExplosion1[] = INCBIN_U8("graphics/slot_machine/ree
const u8 gSlotMachineReelTimeShadow[] = INCBIN_U8("graphics/slot_machine/shadow.4bpp");
const u8 gSlotMachineReelTimePikaAura[] = INCBIN_U8("graphics/slot_machine/pika_aura.4bpp");
+
+const u8 gUnknown_08DD19F8[] = INCBIN_U8("graphics/unknown/unknown_DD19F8.bin");
+const u8 gUnknown_08DD1A18[] = INCBIN_U8("graphics/unknown/unknown_DD1A18.4bpp");
diff --git a/src/field_message_box.c b/src/field_message_box.c
index 1c554b6c6..be76b0c19 100755
--- a/src/field_message_box.c
+++ b/src/field_message_box.c
@@ -27,7 +27,7 @@ static void sub_8098154(u8 taskId)
switch (task->data[0])
{
case 0:
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
task->data[0]++;
break;
case 1:
diff --git a/src/field_poison.c b/src/field_poison.c
index 8385966d4..9d3ca047c 100644
--- a/src/field_poison.c
+++ b/src/field_poison.c
@@ -48,7 +48,7 @@ static void FaintFromFieldPoison(u8 partyIdx)
struct Pokemon *pokemon = gPlayerParty + partyIdx;
u32 status = STATUS1_NONE;
- AdjustFriendship(pokemon, 0x07);
+ AdjustFriendship(pokemon, FRIENDSHIP_EVENT_FAINT_FIELD_PSN);
SetMonData(pokemon, MON_DATA_STATUS, &status);
GetMonData(pokemon, MON_DATA_NICKNAME, gStringVar1);
StringGetEnd10(gStringVar1);
diff --git a/src/graphics.c b/src/graphics.c
index eeeba56c9..f6a064d57 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -1418,27 +1418,21 @@ const u16 gUsePokeblockNatureWin_Pal[] = INCBIN_U16("graphics/pokeblock/use_scre
#include "data/graphics/slot_machine.h"
-const u16 gUnknown_08DD19F8[] = INCBIN_U16("graphics/unknown/unknown_DD19F8.bin");
-
-const u8 gUnknown_08DD1A18[] = INCBIN_U8("graphics/unknown/unknown_DD1A18.4bpp");
-
// trainer card
-const u16 gEmeraldTrainerCard0Star_Pal[] = INCBIN_U16("graphics/trainer_card/0star.gbapal");
-const u32 gEmeraldTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp.lz");
-
-const u32 gUnknown_08DD1F78[] = INCBIN_U32("graphics/unknown/unknown_DD1F78.bin.lz");
-const u32 gUnknown_08DD2010[] = INCBIN_U32("graphics/unknown/unknown_DD2010.bin.lz");
-const u32 gUnknown_08DD21B0[] = INCBIN_U32("graphics/unknown/unknown_DD21B0.bin.lz");
-const u32 gUnknown_08DD228C[] = INCBIN_U32("graphics/unknown/unknown_DD228C.bin.lz");
-
-const u16 gFireRedTrainerCard0Star_Pal[] = INCBIN_U16("graphics/trainer_card/0star_fr.gbapal");
-const u32 gFireRedTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card_fr.4bpp.lz");
-
-const u32 gUnknown_08DD2AE0[] = INCBIN_U32("graphics/unknown/unknown_DD2AE0.bin.lz");
-const u32 gUnknown_08DD2B78[] = INCBIN_U32("graphics/unknown/unknown_DD2B78.bin.lz");
-const u32 gUnknown_08DD2D30[] = INCBIN_U32("graphics/unknown/unknown_DD2D30.bin.lz");
-const u32 gUnknown_08DD2E5C[] = INCBIN_U32("graphics/unknown/unknown_DD2E5C.bin.lz");
+const u16 gHoennTrainerCard0Star_Pal[] = INCBIN_U16("graphics/trainer_card/0star.gbapal");
+const u32 gHoennTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp.lz");
+const u32 gHoennTrainerCardBg_Tilemap[] = INCBIN_U32("graphics/trainer_card/bg.bin.lz");
+const u32 gHoennTrainerCardFront_Tilemap[] = INCBIN_U32("graphics/trainer_card/front.bin.lz");
+const u32 gHoennTrainerCardBack_Tilemap[] = INCBIN_U32("graphics/trainer_card/back.bin.lz");
+const u32 gHoennTrainerCardFrontLink_Tilemap[] = INCBIN_U32("graphics/trainer_card/front_link.bin.lz");
+
+const u16 gKantoTrainerCard0Star_Pal[] = INCBIN_U16("graphics/trainer_card/0star_fr.gbapal");
+const u32 gKantoTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card_fr.4bpp.lz");
+const u32 gKantoTrainerCardBg_Tilemap[] = INCBIN_U32("graphics/trainer_card/bg_fr.bin.lz");
+const u32 gKantoTrainerCardFront_Tilemap[] = INCBIN_U32("graphics/trainer_card/front_fr.bin.lz");
+const u32 gKantoTrainerCardBack_Tilemap[] = INCBIN_U32("graphics/trainer_card/back_fr.bin.lz");
+const u32 gKantoTrainerCardFrontLink_Tilemap[] = INCBIN_U32("graphics/trainer_card/front_link_fr.bin.lz");
// pokemon storage system
diff --git a/src/item_menu.c b/src/item_menu.c
index 6d86d67bd..9621ff1a3 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -432,8 +432,8 @@ struct ListBuffer2 {
};
struct TempWallyStruct {
- struct ItemSlot bagPocket_Items[30];
- struct ItemSlot bagPocket_PokeBalls[16];
+ struct ItemSlot bagPocket_Items[BAG_ITEMS_COUNT];
+ struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT];
u16 cursorPosition[POCKETS_COUNT];
u16 scrollPosition[POCKETS_COUNT];
u8 filler[0x2];
@@ -445,7 +445,7 @@ EWRAM_DATA struct BagStruct gBagPositionStruct = {0};
static EWRAM_DATA struct ListBuffer1 *sListBuffer1 = 0;
static EWRAM_DATA struct ListBuffer2 *sListBuffer2 = 0;
EWRAM_DATA u16 gSpecialVar_ItemId = 0;
-static EWRAM_DATA struct TempWallyStruct *gUnknown_0203CE80 = 0;
+static EWRAM_DATA struct TempWallyStruct *sTempWallyBag = 0;
extern u8 *const gPocketNamesStringsTable[];
extern u8* gReturnToXStringsTable[];
@@ -2130,17 +2130,17 @@ void PrepareBagForWallyTutorial(void)
{
u32 i;
- gUnknown_0203CE80 = AllocZeroed(sizeof(struct TempWallyStruct));
- memcpy(gUnknown_0203CE80->bagPocket_Items, gSaveBlock1Ptr->bagPocket_Items, sizeof(gSaveBlock1Ptr->bagPocket_Items));
- memcpy(gUnknown_0203CE80->bagPocket_PokeBalls, gSaveBlock1Ptr->bagPocket_PokeBalls, sizeof(gSaveBlock1Ptr->bagPocket_PokeBalls));
- gUnknown_0203CE80->pocket = gBagPositionStruct.pocket;
+ sTempWallyBag = AllocZeroed(sizeof(struct TempWallyStruct));
+ memcpy(sTempWallyBag->bagPocket_Items, gSaveBlock1Ptr->bagPocket_Items, sizeof(gSaveBlock1Ptr->bagPocket_Items));
+ memcpy(sTempWallyBag->bagPocket_PokeBalls, gSaveBlock1Ptr->bagPocket_PokeBalls, sizeof(gSaveBlock1Ptr->bagPocket_PokeBalls));
+ sTempWallyBag->pocket = gBagPositionStruct.pocket;
for (i = 0; i <= 4; i++)
{
- gUnknown_0203CE80->cursorPosition[i] = gBagPositionStruct.cursorPosition[i];
- gUnknown_0203CE80->scrollPosition[i] = gBagPositionStruct.scrollPosition[i];
+ sTempWallyBag->cursorPosition[i] = gBagPositionStruct.cursorPosition[i];
+ sTempWallyBag->scrollPosition[i] = gBagPositionStruct.scrollPosition[i];
}
- ClearItemSlots(gSaveBlock1Ptr->bagPocket_Items, 30);
- ClearItemSlots(gSaveBlock1Ptr->bagPocket_PokeBalls, 16);
+ ClearItemSlots(gSaveBlock1Ptr->bagPocket_Items, BAG_ITEMS_COUNT);
+ ClearItemSlots(gSaveBlock1Ptr->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT);
ResetBagScrollPositions();
}
@@ -2148,15 +2148,15 @@ void RestoreBagAfterWallyTutorial(void)
{
u32 i;
- memcpy(gSaveBlock1Ptr->bagPocket_Items, gUnknown_0203CE80->bagPocket_Items, sizeof(gUnknown_0203CE80->bagPocket_Items));
- memcpy(gSaveBlock1Ptr->bagPocket_PokeBalls, gUnknown_0203CE80->bagPocket_PokeBalls, sizeof(gUnknown_0203CE80->bagPocket_PokeBalls));
- gBagPositionStruct.pocket = gUnknown_0203CE80->pocket;
+ memcpy(gSaveBlock1Ptr->bagPocket_Items, sTempWallyBag->bagPocket_Items, sizeof(sTempWallyBag->bagPocket_Items));
+ memcpy(gSaveBlock1Ptr->bagPocket_PokeBalls, sTempWallyBag->bagPocket_PokeBalls, sizeof(sTempWallyBag->bagPocket_PokeBalls));
+ gBagPositionStruct.pocket = sTempWallyBag->pocket;
for (i = 0; i <= 4; i++)
{
- gBagPositionStruct.cursorPosition[i] = gUnknown_0203CE80->cursorPosition[i];
- gBagPositionStruct.scrollPosition[i] = gUnknown_0203CE80->scrollPosition[i];
+ gBagPositionStruct.cursorPosition[i] = sTempWallyBag->cursorPosition[i];
+ gBagPositionStruct.scrollPosition[i] = sTempWallyBag->scrollPosition[i];
}
- Free(gUnknown_0203CE80);
+ Free(sTempWallyBag);
}
void DoWallyTutorialBagMenu(void)
diff --git a/src/main_menu.c b/src/main_menu.c
index 61a60a8e7..91931e581 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -2188,7 +2188,7 @@ static void MainMenu_FormatSavegameBadges(void)
u8 badgeCount = 0;
u32 i;
- for (i = FLAG_BADGE01_GET; i <= FLAG_BADGE08_GET; i++)
+ for (i = FLAG_BADGE01_GET; i < FLAG_BADGE01_GET + NUM_BADGES; i++)
{
if (FlagGet(i))
badgeCount++;
diff --git a/src/match_call.c b/src/match_call.c
index 0647e96dc..9d8523576 100644
--- a/src/match_call.c
+++ b/src/match_call.c
@@ -1287,7 +1287,7 @@ static bool32 sub_81963F0(u8 taskId)
ChangeBgY(0, 0, 0);
if (!gMatchCallState.triggeredFromScript)
{
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
playerObjectId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0);
ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]);
ScriptMovement_UnfreezeObjectEvents();
@@ -1746,7 +1746,7 @@ static void PopulateBattleFrontierStreak(int matchCallId, u8 *destStr)
ConvertIntToDecimalStringN(destStr, gBattleFrontierStreakInfo.streak, STR_CONV_MODE_LEFT_ALIGN, i);
}
-static const u16 sBadgeFlags[] =
+static const u16 sBadgeFlags[NUM_BADGES] =
{
FLAG_BADGE01_GET,
FLAG_BADGE02_GET,
@@ -1762,7 +1762,7 @@ static int GetNumOwnedBadges(void)
{
u32 i;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < NUM_BADGES; i++)
{
if (!FlagGet(sBadgeFlags[i]))
break;
diff --git a/src/menu.c b/src/menu.c
index fb7f44ceb..62387c323 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -159,7 +159,7 @@ void sub_8197200(void)
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
DeactivateAllTextPrinters();
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
}
u16 RunTextPrintersAndIsPrinter0Active(void)
@@ -209,7 +209,7 @@ void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonP
AddTextPrinterParameterized2(0, 1, gStringVar4, speed, NULL, 2, 1, 3);
}
-void sub_81973A4(void)
+void LoadMessageBoxAndBorderGfx(void)
{
LoadMessageBoxGfx(0, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM * 0x10);
LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM * 0x10);
@@ -458,7 +458,7 @@ u16 sub_81978D0(u8 colorNum)
void DisplayItemMessageOnField(u8 taskId, const u8 *string, TaskFunc callback)
{
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
DisplayMessageAndContinueTask(taskId, 0, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM, 1, GetPlayerTextSpeedDelay(), string, callback);
CopyWindowToVram(0, 3);
}
@@ -2133,7 +2133,7 @@ void blit_move_info_icon(u8 windowId, u8 iconId, u16 x, u16 y)
BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + gMoveMenuInfoIcons[iconId].offset * 32, 0, 0, 128, 128, x, y, gMoveMenuInfoIcons[iconId].width, gMoveMenuInfoIcons[iconId].height);
}
-void sub_819A344(u8 a0, u8 *dest, u8 color)
+void BufferSaveMenuText(u8 textId, u8 *dest, u8 color)
{
s32 curFlag;
s32 flagCount;
@@ -2147,28 +2147,28 @@ void sub_819A344(u8 a0, u8 *dest, u8 color)
*(string++) = EXT_CTRL_CODE_SHADOW;
*(string++) = color + 1;
- switch (a0)
+ switch (textId)
{
- case 0:
+ case SAVE_MENU_NAME:
StringCopy(string, gSaveBlock2Ptr->playerName);
break;
- case 1:
+ case SAVE_MENU_CAUGHT:
if (IsNationalPokedexEnabled())
string = ConvertIntToDecimalStringN(string, GetNationalPokedexCount(FLAG_GET_CAUGHT), STR_CONV_MODE_LEFT_ALIGN, 3);
else
string = ConvertIntToDecimalStringN(string, GetHoennPokedexCount(FLAG_GET_CAUGHT), STR_CONV_MODE_LEFT_ALIGN, 3);
*string = EOS;
break;
- case 2:
+ case SAVE_MENU_PLAY_TIME:
string = ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
*(string++) = CHAR_COLON;
ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
break;
- case 3:
+ case SAVE_MENU_LOCATION:
GetMapNameGeneric(string, gMapHeader.regionMapSectionId);
break;
- case 4:
- for (curFlag = FLAG_BADGE01_GET, flagCount = 0, endOfString = string + 1; curFlag <= FLAG_BADGE08_GET; curFlag++)
+ case SAVE_MENU_BADGES:
+ for (curFlag = FLAG_BADGE01_GET, flagCount = 0, endOfString = string + 1; curFlag < FLAG_BADGE01_GET + NUM_BADGES; curFlag++)
{
if (FlagGet(curFlag))
flagCount++;
diff --git a/src/menu_specialized.c b/src/menu_specialized.c
index 252bb7604..d1b00f883 100644
--- a/src/menu_specialized.c
+++ b/src/menu_specialized.c
@@ -955,7 +955,7 @@ static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId)
*(str++) = 9;
*(str++) = CHAR_SLASH;
*(str++) = CHAR_SPECIAL_F9;
- *(str++) = 5;
+ *(str++) = CHAR_LV_2;
str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3);
*(str++) = CHAR_SPACE;
*str = EOS;
diff --git a/src/party_menu.c b/src/party_menu.c
index bc4cf8c0b..4decdeb02 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -4701,7 +4701,7 @@ static void Task_LearnedMove(u8 taskId)
if (move[1] == 0)
{
- AdjustFriendship(mon, 4);
+ AdjustFriendship(mon, FRIENDSHIP_EVENT_LEARN_TMHM);
if (item < ITEM_HM01_CUT)
RemoveBagItem(item, 1);
}
diff --git a/src/player_pc.c b/src/player_pc.c
index bf3a5b01d..bb2361779 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -505,7 +505,7 @@ void sub_816B31C(void)
void Mailbox_DoRedrawMailboxMenuAfterReturn(void)
{
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
DrawDialogueFrame(0, 1);
InitItemStorageMenu(CreateTask(ItemStorage_HandleReturnToProcessInput, 0), 1);
FadeInFromBlack();
@@ -739,7 +739,7 @@ static void pal_fill_for_maplights_or_black(void)
{
u8 taskId;
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0);
if (sub_81D1C44(playerPCItemPageInfo.count) == TRUE)
Mailbox_DrawMailboxMenu(taskId);
@@ -847,7 +847,7 @@ static void Mailbox_UpdateMailListAfterDeposit(void)
&& playerPCItemPageInfo.itemsAbove != 0)
playerPCItemPageInfo.itemsAbove--;
ItemStorage_SetItemAndMailCount(taskId);
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
if (sub_81D1C44(playerPCItemPageInfo.count) == TRUE)
Mailbox_DrawMailboxMenu(taskId);
else
diff --git a/src/pokemon.c b/src/pokemon.c
index 6dd09902d..ec29af02d 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -61,6 +61,7 @@ static void DecryptBoxMon(struct BoxPokemon *boxMon);
static void sub_806E6CC(u8 taskId);
static bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId);
static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move);
+static bool8 ShouldSkipFriendshipChange(void);
// EWRAM vars
EWRAM_DATA static u8 sLearningMoveTableID = 0;
@@ -73,7 +74,21 @@ EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL};
// const rom data
#include "data/battle_moves.h"
-static const u8 sUnreferencedData[] = {0x34, 0x00, 0x10, 0x00, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00};
+
+// Used in an unreferenced function in RS.
+// Unreferenced here and in FRLG.
+struct CombinedMove
+{
+ u16 move1;
+ u16 move2;
+ u16 newMove;
+};
+
+static const struct CombinedMove sCombinedMoves[2] =
+{
+ {MOVE_EMBER, MOVE_GUST, MOVE_HEAT_WAVE},
+ {0xFFFF, 0xFFFF, 0xFFFF}
+};
#define SPECIES_TO_HOENN(name) [SPECIES_##name - 1] = HOENN_DEX_##name
#define SPECIES_TO_NATIONAL(name) [SPECIES_##name - 1] = NATIONAL_DEX_##name
@@ -1872,22 +1887,34 @@ const u8 gStatStageRatios[][2] =
static const u16 sDeoxysBaseStats[] =
{
- 50, // Hp
- 95, // Attack
- 90, // Defense
- 180, // Speed
- 95, // Sp.Attack
- 90, // Sp.Defense
+ [STAT_HP] = 50,
+ [STAT_ATK] = 95,
+ [STAT_DEF] = 90,
+ [STAT_SPEED] = 180,
+ [STAT_SPATK] = 95,
+ [STAT_SPDEF] = 90,
};
-const u16 gLinkPlayerFacilityClasses[] =
-{
- FACILITY_CLASS_COOLTRAINER_M, FACILITY_CLASS_BLACK_BELT, FACILITY_CLASS_CAMPER,
- FACILITY_CLASS_YOUNGSTER, FACILITY_CLASS_PSYCHIC_M, FACILITY_CLASS_BUG_CATCHER,
- FACILITY_CLASS_PKMN_BREEDER_M, FACILITY_CLASS_GUITARIST,
- FACILITY_CLASS_COOLTRAINER_F, FACILITY_CLASS_HEX_MANIAC, FACILITY_CLASS_PICNICKER,
- FACILITY_CLASS_LASS, FACILITY_CLASS_PSYCHIC_F, FACILITY_CLASS_BATTLE_GIRL,
- FACILITY_CLASS_PKMN_BREEDER_F, FACILITY_CLASS_BEAUTY
+const u16 gLinkPlayerFacilityClasses[NUM_MALE_LINK_FACILITY_CLASSES + NUM_FEMALE_LINK_FACILITY_CLASSES] =
+{
+ // Male classes
+ FACILITY_CLASS_COOLTRAINER_M,
+ FACILITY_CLASS_BLACK_BELT,
+ FACILITY_CLASS_CAMPER,
+ FACILITY_CLASS_YOUNGSTER,
+ FACILITY_CLASS_PSYCHIC_M,
+ FACILITY_CLASS_BUG_CATCHER,
+ FACILITY_CLASS_PKMN_BREEDER_M,
+ FACILITY_CLASS_GUITARIST,
+ // Female Classes
+ FACILITY_CLASS_COOLTRAINER_F,
+ FACILITY_CLASS_HEX_MANIAC,
+ FACILITY_CLASS_PICNICKER,
+ FACILITY_CLASS_LASS,
+ FACILITY_CLASS_PSYCHIC_F,
+ FACILITY_CLASS_BATTLE_GIRL,
+ FACILITY_CLASS_PKMN_BREEDER_F,
+ FACILITY_CLASS_BEAUTY
};
static const u8 sHoldEffectToType[][2] =
@@ -2049,17 +2076,19 @@ static const u8 sStatsToRaise[] =
STAT_ATK, STAT_ATK, STAT_SPEED, STAT_DEF, STAT_SPATK, STAT_ACC
};
-static const s8 gUnknown_08329ECE[][3] =
-{
- { 5, 3, 2},
- { 5, 3, 2},
- { 1, 1, 0},
- { 3, 2, 1},
- { 1, 1, 0},
- { 1, 1, 1},
- {-1, -1, -1},
- {-5, -5, -10},
- {-5, -5, -10},
+// 3 modifiers each for how much to change friendship for different ranges
+// 0-99, 100-199, 200+
+static const s8 sFriendshipEventModifiers[][3] =
+{
+ [FRIENDSHIP_EVENT_GROW_LEVEL] = { 5, 3, 2},
+ [FRIENDSHIP_EVENT_VITAMIN] = { 5, 3, 2},
+ [FRIENDSHIP_EVENT_BATTLE_ITEM] = { 1, 1, 0},
+ [FRIENDSHIP_EVENT_LEAGUE_BATTLE] = { 3, 2, 1},
+ [FRIENDSHIP_EVENT_LEARN_TMHM] = { 1, 1, 0},
+ [FRIENDSHIP_EVENT_WALKING] = { 1, 1, 1},
+ [FRIENDSHIP_EVENT_FAINT_SMALL] = {-1, -1, -1},
+ [FRIENDSHIP_EVENT_FAINT_FIELD_PSN] = {-5, -5, -10},
+ [FRIENDSHIP_EVENT_FAINT_LARGE] = {-5, -5, -10},
};
static const u16 sHMMoves[] =
@@ -5069,7 +5098,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
}
break;
case 5:
- if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && (retVal == 0 || var_28 != 0) && !sub_806F104() && var_34 == 0)
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && (retVal == 0 || var_28 != 0) && !ShouldSkipFriendshipChange() && var_34 == 0)
{
var_34 = itemEffect[var_3C];
friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
@@ -5095,7 +5124,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
break;
case 6:
if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200
- && (retVal == 0 || var_28 != 0) && !sub_806F104() && var_34 == 0)
+ && (retVal == 0 || var_28 != 0) && !ShouldSkipFriendshipChange() && var_34 == 0)
{
var_34 = itemEffect[var_3C];
friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
@@ -5120,7 +5149,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
var_3C++;
break;
case 7:
- if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && (retVal == 0 || var_28 != 0) && !sub_806F104() && var_34 == 0)
+ if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && (retVal == 0 || var_28 != 0) && !ShouldSkipFriendshipChange() && var_34 == 0)
{
var_34 = itemEffect[var_3C];
friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
@@ -5738,12 +5767,18 @@ u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex)
return n;
}
+#define IS_LEAGUE_BATTLE \
+ ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) \
+ && (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR \
+ || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_LEADER \
+ || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_CHAMPION)) \
+
void AdjustFriendship(struct Pokemon *mon, u8 event)
{
u16 species, heldItem;
u8 holdEffect;
- if (sub_806F104())
+ if (ShouldSkipFriendshipChange())
return;
species = GetMonData(mon, MON_DATA_SPECIES2, 0);
@@ -5765,18 +5800,16 @@ void AdjustFriendship(struct Pokemon *mon, u8 event)
{
u8 friendshipLevel = 0;
s16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
+
if (friendship > 99)
friendshipLevel++;
if (friendship > 199)
friendshipLevel++;
- if ((event != 5 || !(Random() & 1))
- && (event != 3
- || ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
- && (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR
- || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_LEADER
- || gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_CHAMPION))))
+
+ if ((event != FRIENDSHIP_EVENT_WALKING || !(Random() & 1))
+ && (event != FRIENDSHIP_EVENT_LEAGUE_BATTLE || IS_LEAGUE_BATTLE))
{
- s8 mod = gUnknown_08329ECE[event][friendshipLevel];
+ s8 mod = sFriendshipEventModifiers[event][friendshipLevel];
if (mod > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP)
mod = (150 * mod) / 100;
friendship += mod;
@@ -6768,7 +6801,7 @@ bool8 HasTwoFramesAnimation(u16 species)
&& species != SPECIES_UNOWN);
}
-bool8 sub_806F104(void)
+static bool8 ShouldSkipFriendshipChange(void)
{
if (gMain.inBattle && gBattleTypeFlags & (BATTLE_TYPE_FRONTIER))
return TRUE;
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index 4ccb39ce2..c99841ea2 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -1735,7 +1735,7 @@ static void Task_PokemonStorageSystemPC(u8 taskId)
{
case 0:
CreatePCMenu(task->data[1], &task->data[15]);
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
DrawDialogueFrame(0, 0);
FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, TEXT_SPEED_FF, NULL, 2, 1, 3);
@@ -6898,7 +6898,7 @@ static void SetCursorMonData(void *pokemon, u8 mode)
*(txtPtr++) = 3;
*(txtPtr++) = 0;
*(txtPtr++) = CHAR_SPECIAL_F9;
- *(txtPtr++) = 5;
+ *(txtPtr++) = CHAR_LV_2;
txtPtr = ConvertIntToDecimalStringN(txtPtr, sPSSData->cursorMonLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
txtPtr[0] = CHAR_SPACE;
diff --git a/src/pokenav.c b/src/pokenav.c
index a7b7c95a3..03b29ab0b 100644
--- a/src/pokenav.c
+++ b/src/pokenav.c
@@ -21,7 +21,7 @@ struct PokenavResources
u32 (*currentMenuCb1)(void);
u32 currentMenuIndex;
u16 mode;
- u16 fieldA;
+ u16 conditionSearchId;
bool32 hasAnyRibbons;
void *field10[SUBSTRUCT_COUNT];
};
@@ -57,7 +57,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] =
.unk0 = PokenavCallback_Init_0,
.unk4 = sub_81C941C,
.unk8 = sub_81C9924,
- .unkC = sub_81C9990,
+ .unkC = CreateMenuHandlerLoopedTask,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
@@ -66,7 +66,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] =
.unk0 = PokenavCallback_Init_0,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
- .unkC = sub_81C9990,
+ .unkC = CreateMenuHandlerLoopedTask,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
@@ -75,7 +75,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] =
.unk0 = PokenavCallback_Init_2,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
- .unkC = sub_81C9990,
+ .unkC = CreateMenuHandlerLoopedTask,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
@@ -84,7 +84,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] =
.unk0 = PokenavCallback_Init_3,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
- .unkC = sub_81C9990,
+ .unkC = CreateMenuHandlerLoopedTask,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
@@ -93,7 +93,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] =
.unk0 = PokenavCallback_Init_4,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
- .unkC = sub_81C9990,
+ .unkC = CreateMenuHandlerLoopedTask,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
@@ -102,7 +102,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] =
.unk0 = PokenavCallback_Init_5,
.unk4 = sub_81C941C,
.unk8 = sub_81C9940,
- .unkC = sub_81C9990,
+ .unkC = CreateMenuHandlerLoopedTask,
.unk10 = sub_81C99C0,
.unk14 = sub_81C9430,
.unk18 = sub_81C99D4,
@@ -156,7 +156,7 @@ const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] =
.unk0 = PokenavCallback_Init_11,
.unk4 = sub_81CAB24,
.unk8 = sub_81CB260,
- .unkC = sub_81CB29C,
+ .unkC = CreateMatchCallLoopedTask,
.unk10 = sub_81CB2CC,
.unk14 = sub_81CAB38,
.unk18 = sub_81CB2E0,
@@ -554,18 +554,18 @@ void SetPokenavMode(u16 mode)
gPokenavResources->mode = mode;
}
-void sub_81C7694(u32 a0)
+void SetSelectedConditionSearch(u32 cursorPos)
{
- u32 value = a0;
+ u32 searchId = cursorPos;
- if (value > 4)
- value = 0;
- gPokenavResources->fieldA = value;
+ if (searchId > POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH - POKENAV_MENUITEM_CONDITION_SEARCH_COOL)
+ searchId = 0;
+ gPokenavResources->conditionSearchId = searchId;
}
-u32 sub_81C76AC(void)
+u32 GetSelectedConditionSearch(void)
{
- return gPokenavResources->fieldA;
+ return gPokenavResources->conditionSearchId;
}
bool32 CanViewRibbonsMenu(void)
diff --git a/src/pokenav_unk_6.c b/src/pokenav_conditions_1.c
index 4c93c0d41..70c309992 100644
--- a/src/pokenav_unk_6.c
+++ b/src/pokenav_conditions_1.c
@@ -147,9 +147,9 @@ u32 sub_81CD110(struct PokenavSub11 *structPtr)
u32 sub_81CD19C(struct PokenavSub11 *structPtr)
{
if (structPtr->unk6300 == 0)
- return 100002;
+ return POKENAV_MENU_2;
else
- return 100010;
+ return POKENAV_MENU_A;
}
void sub_81CD1C0(void)
@@ -402,7 +402,7 @@ u8 *sub_81CD624(u8 *str, u16 id, bool8 arg3)
*(str_++) = 9;
*(str_++) = CHAR_SLASH;
*(str_++) = CHAR_SPECIAL_F9;
- *(str_++) = 5;
+ *(str_++) = CHAR_LV_2;
txtPtr = str_;
str_ = ConvertIntToDecimalStringN(str_, level, STR_CONV_MODE_LEFT_ALIGN, 3);
lvlDigits = str_ - txtPtr;
diff --git a/src/pokenav_unk_7.c b/src/pokenav_conditions_2.c
index 11fdaa425..11fdaa425 100644
--- a/src/pokenav_unk_7.c
+++ b/src/pokenav_conditions_2.c
diff --git a/src/pokenav_unk_8.c b/src/pokenav_conditions_3.c
index 6c1460dd1..9b6ce432b 100644
--- a/src/pokenav_unk_8.c
+++ b/src/pokenav_conditions_3.c
@@ -113,9 +113,9 @@ static const struct WindowTemplate gUnknown_086235B4 =
.baseBlock = 20
};
-static const u8 gUnknown_086235BC[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}");
-static const u8 gUnknown_086235C8[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}");
-static const u8 gUnknown_086235D4[] = _("{UNK_SPACER}");
+static const u8 sText_MaleSymbol[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}");
+static const u8 sText_FemaleSymbol[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}");
+static const u8 sText_NoGenderSymbol[] = _("{UNK_SPACER}");
bool32 PokenavCallback_Init_8(void)
{
@@ -130,7 +130,7 @@ bool32 PokenavCallback_Init_8(void)
structPtr->unk0 = sub_81CF010;
structPtr->loopedTaskId = CreateLoopedTask(sub_81CF11C, 1);
structPtr->unk18 = 0;
- structPtr->unk14 = gUnknown_086233A0[sub_81C76AC()];
+ structPtr->unk14 = gUnknown_086233A0[GetSelectedConditionSearch()];
return TRUE;
}
@@ -143,7 +143,7 @@ bool32 PokenavCallback_Init_10(void)
structPtr->unkPtr = GetSubstructPtr(18);
structPtr->unk0 = sub_81CF030;
structPtr->unk18 = 1;
- structPtr->unk14 = gUnknown_086233A0[sub_81C76AC()];
+ structPtr->unk14 = gUnknown_086233A0[GetSelectedConditionSearch()];
return TRUE;
}
@@ -443,7 +443,7 @@ static u32 sub_81CF418(s32 state)
HideBg(3);
if (!unk->unkC)
{
- u8 r4 = sub_81C76AC() + 8;
+ u8 r4 = GetSelectedConditionSearch() + POKENAV_MENUITEM_CONDITION_SEARCH_COOL;
LoadLeftHeaderGfxForIndex(r4);
sub_81C7FA0(r4, 1, 0);
sub_81C7FA0(1, 1, 0);
@@ -673,13 +673,16 @@ static void sub_81CF8E4(struct PokenavMonList * item, u8 * dest)
u8 level;
u8 * s;
const u8 * genderStr;
- if (item->boxId == 14)
+
+ // Mon is in party
+ if (item->boxId == TOTAL_BOXES_COUNT)
{
struct Pokemon * mon = &gPlayerParty[item->monId];
gender = GetMonGender(mon);
level = GetLevelFromMonExp(mon);
GetMonData(mon, MON_DATA_NICKNAME, gStringVar3);
}
+ // Mon is in PC
else
{
struct BoxPokemon * mon = GetBoxedMonPtr(item->boxId, item->monId);
@@ -687,24 +690,25 @@ static void sub_81CF8E4(struct PokenavMonList * item, u8 * dest)
level = GetLevelFromBoxMonExp(mon);
GetBoxMonData(mon, MON_DATA_NICKNAME, gStringVar3);
}
+
StringGetEnd10(gStringVar3);
dest = sub_81DB494(dest, 1, gStringVar3, 60);
switch (gender)
{
default:
- genderStr = gUnknown_086235D4;
+ genderStr = sText_NoGenderSymbol;
break;
case MON_MALE:
- genderStr = gUnknown_086235BC;
+ genderStr = sText_MaleSymbol;
break;
case MON_FEMALE:
- genderStr = gUnknown_086235C8;
+ genderStr = sText_FemaleSymbol;
break;
}
s = StringCopy(gStringVar1, genderStr);
*s++ = CHAR_SLASH;
*s++ = CHAR_SPECIAL_F9;
- *s++ = 5; // LV
+ *s++ = CHAR_LV_2;
ConvertIntToDecimalStringN(s, level, STR_CONV_MODE_LEFT_ALIGN, 3);
sub_81DB494(dest, 1, gStringVar1, 40);
}
diff --git a/src/pokenav_unk_3.c b/src/pokenav_match_call_1.c
index 28e84b50b..28e84b50b 100755
--- a/src/pokenav_unk_3.c
+++ b/src/pokenav_match_call_1.c
diff --git a/src/pokenav_unk_4.c b/src/pokenav_match_call_2.c
index d8a1a0dfa..aaa1767aa 100755
--- a/src/pokenav_unk_4.c
+++ b/src/pokenav_match_call_2.c
@@ -286,7 +286,7 @@ bool32 sub_81CB260(void)
return TRUE;
}
-void sub_81CB29C(s32 index)
+void CreateMatchCallLoopedTask(s32 index)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
state->unk4 = CreateLoopedTask(sMatchCallLoopTaskFuncs[index], 1);
diff --git a/src/pokenav_menu_handler_1.c b/src/pokenav_menu_handler_1.c
new file mode 100644
index 000000000..44176176d
--- /dev/null
+++ b/src/pokenav_menu_handler_1.c
@@ -0,0 +1,513 @@
+#include "global.h"
+#include "pokenav.h"
+#include "event_data.h"
+#include "main.h"
+#include "sound.h"
+#include "constants/songs.h"
+
+struct Pokenav1Struct
+{
+ u16 menuType;
+ s16 cursorPos;
+ u16 currMenuItem;
+ u16 helpBarIndex;
+ u32 unk8;
+ u32 (*callback)(struct Pokenav1Struct*);
+};
+
+static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state);
+static void ReturnToConditionMenu(struct Pokenav1Struct *state);
+static void ReturnToMainMenu(struct Pokenav1Struct *state);
+static u32 sub_81C97BC(struct Pokenav1Struct *state);
+static void sub_81C97B0(struct Pokenav1Struct *state, u32 a1);
+static u32 CB2_ReturnToConditionMenu(struct Pokenav1Struct *state);
+static u32 CB2_ReturnToMainMenu(struct Pokenav1Struct *state);
+static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state);
+static u32 HandleConditionMenuInput(struct Pokenav1Struct *state);
+static u32 HandleCantOpenRibbonsInput(struct Pokenav1Struct *state);
+static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state);
+static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state);
+static u32 HandleMainMenuInput(struct Pokenav1Struct *state);
+static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*);
+static void SetMenuInputHandler(struct Pokenav1Struct *state);
+
+// Number of entries - 1 for that menu type
+static const u8 sLastCursorPositions[] =
+{
+ [POKENAV_MENU_TYPE_DEFAULT] = 2,
+ [POKENAV_MENU_TYPE_UNLOCK_MC] = 3,
+ [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = 4,
+ [POKENAV_MENU_TYPE_CONDITION] = 2,
+ [POKENAV_MENU_TYPE_CONDITION_SEARCH] = 5
+};
+
+static const u8 sMenuItems[][6] =
+{
+ [POKENAV_MENU_TYPE_DEFAULT] =
+ {
+ POKENAV_MENUITEM_MAP,
+ POKENAV_MENUITEM_CONDITION,
+ [2 ... 5] = POKENAV_MENUITEM_SWITCH_OFF
+ },
+ [POKENAV_MENU_TYPE_UNLOCK_MC] =
+ {
+ POKENAV_MENUITEM_MAP,
+ POKENAV_MENUITEM_CONDITION,
+ POKENAV_MENUITEM_MATCH_CALL,
+ [3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF
+ },
+ [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] =
+ {
+ POKENAV_MENUITEM_MAP,
+ POKENAV_MENUITEM_CONDITION,
+ POKENAV_MENUITEM_MATCH_CALL,
+ POKENAV_MENUITEM_RIBBONS,
+ [4 ... 5] = POKENAV_MENUITEM_SWITCH_OFF
+ },
+ [POKENAV_MENU_TYPE_CONDITION] =
+ {
+ POKENAV_MENUITEM_CONDITION_PARTY,
+ POKENAV_MENUITEM_CONDITION_SEARCH,
+ POKENAV_MENUITEM_CONDITION_CANCEL,
+ [3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF
+ },
+ [POKENAV_MENU_TYPE_CONDITION_SEARCH] =
+ {
+ POKENAV_MENUITEM_CONDITION_SEARCH_COOL,
+ POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY,
+ POKENAV_MENUITEM_CONDITION_SEARCH_CUTE,
+ POKENAV_MENUITEM_CONDITION_SEARCH_SMART,
+ POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH,
+ POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL
+ },
+};
+
+static u8 GetPokenavMainMenuType(void)
+{
+ u8 menuType = POKENAV_MENU_TYPE_DEFAULT;
+
+ if (FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV))
+ {
+ menuType = POKENAV_MENU_TYPE_UNLOCK_MC;
+
+ if (FlagGet(FLAG_SYS_RIBBON_GET))
+ menuType = POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS;
+ }
+
+ return menuType;
+}
+
+bool32 PokenavCallback_Init_0(void)
+{
+ struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
+ if (!state)
+ return FALSE;
+
+ state->menuType = GetPokenavMainMenuType();
+ state->cursorPos = 0;
+ state->currMenuItem = POKENAV_MENUITEM_MAP;
+ state->helpBarIndex = HELPBAR_NONE;
+ SetMenuInputHandler(state);
+ return TRUE;
+}
+
+bool32 PokenavCallback_Init_4(void)
+{
+ struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
+ if (!state)
+ return FALSE;
+
+ state->menuType = GetPokenavMainMenuType();
+ state->cursorPos = 2;
+ state->currMenuItem = POKENAV_MENUITEM_MATCH_CALL;
+ state->helpBarIndex = HELPBAR_NONE;
+ SetMenuInputHandler(state);
+ return TRUE;
+}
+
+bool32 PokenavCallback_Init_5(void)
+{
+ struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
+ if (!state)
+ return FALSE;
+
+ state->menuType = GetPokenavMainMenuType();
+ state->cursorPos = 3;
+ state->currMenuItem = POKENAV_MENUITEM_RIBBONS;
+ SetMenuInputHandler(state);
+ return TRUE;
+}
+
+bool32 PokenavCallback_Init_2(void)
+{
+ struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
+ if (!state)
+ return FALSE;
+
+ state->menuType = POKENAV_MENU_TYPE_CONDITION;
+ state->cursorPos = 0;
+ state->currMenuItem = POKENAV_MENUITEM_CONDITION_PARTY;
+ state->helpBarIndex = HELPBAR_NONE;
+ SetMenuInputHandler(state);
+ return TRUE;
+}
+
+bool32 PokenavCallback_Init_3(void)
+{
+ struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
+ if (!state)
+ return FALSE;
+
+ state->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH;
+ state->cursorPos = GetSelectedConditionSearch();
+ state->currMenuItem = state->cursorPos + POKENAV_MENUITEM_CONDITION_SEARCH_COOL;
+ state->helpBarIndex = HELPBAR_NONE;
+ SetMenuInputHandler(state);
+ return TRUE;
+}
+
+static void SetMenuInputHandler(struct Pokenav1Struct *state)
+{
+ switch (state->menuType)
+ {
+ case POKENAV_MENU_TYPE_DEFAULT:
+ SetPokenavMode(POKENAV_MODE_NORMAL);
+ // fallthrough
+ case POKENAV_MENU_TYPE_UNLOCK_MC:
+ case POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS:
+ state->callback = GetMainMenuInputHandler();
+ break;
+ case POKENAV_MENU_TYPE_CONDITION:
+ state->callback = HandleConditionMenuInput;
+ break;
+ case POKENAV_MENU_TYPE_CONDITION_SEARCH:
+ state->callback = HandleConditionSearchMenuInput;
+ break;
+ }
+}
+
+static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*)
+{
+ switch (GetPokenavMode())
+ {
+ default:
+ case POKENAV_MODE_NORMAL:
+ return HandleMainMenuInput;
+ case POKENAV_MODE_FORCE_CALL_READY:
+ return HandleMainMenuInputTutorial;
+ case POKENAV_MODE_FORCE_CALL_EXIT:
+ return HandleMainMenuInputEndTutorial;
+ }
+}
+
+u32 sub_81C941C(void)
+{
+ struct Pokenav1Struct *state = GetSubstructPtr(1);
+ return state->callback(state);
+}
+
+void sub_81C9430(void)
+{
+ FreePokenavSubstruct(1);
+}
+
+static u32 HandleMainMenuInput(struct Pokenav1Struct *state)
+{
+ if (UpdateMenuCursorPos(state))
+ return POKENAV_MENU_FUNC_MOVE_CURSOR;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ switch (sMenuItems[state->menuType][state->cursorPos])
+ {
+ case POKENAV_MENUITEM_MAP:
+ state->helpBarIndex = gSaveBlock2Ptr->regionMapZoom ? HELPBAR_MAP_ZOOMED_IN : HELPBAR_MAP_ZOOMED_OUT;
+ sub_81C97B0(state, POKENAV_MENU_6);
+ return POKENAV_MENU_FUNC_OPEN_FEATURE;
+ case POKENAV_MENUITEM_CONDITION:
+ state->menuType = POKENAV_MENU_TYPE_CONDITION;
+ state->cursorPos = 0;
+ state->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][0];
+ state->callback = HandleConditionMenuInput;
+ return POKENAV_MENU_FUNC_OPEN_CONDITION;
+ case POKENAV_MENUITEM_MATCH_CALL:
+ state->helpBarIndex = HELPBAR_MC_TRAINER_LIST;
+ sub_81C97B0(state, POKENAV_MENU_B);
+ return POKENAV_MENU_FUNC_OPEN_FEATURE;
+ case POKENAV_MENUITEM_RIBBONS:
+ if (CanViewRibbonsMenu())
+ {
+ state->helpBarIndex = HELPBAR_RIBBONS_MON_LIST;
+ sub_81C97B0(state, POKENAV_MENU_C);
+ return POKENAV_MENU_FUNC_OPEN_FEATURE;
+ }
+ else
+ {
+ state->callback = HandleCantOpenRibbonsInput;
+ return POKENAV_MENU_FUNC_NO_RIBBON_WINNERS;
+ }
+ case POKENAV_MENUITEM_SWITCH_OFF:
+ return -1;
+ }
+ }
+
+ if (gMain.newKeys & B_BUTTON)
+ return -1;
+
+ return POKENAV_MENU_FUNC_NONE;
+}
+
+// Force the player to select Match Call during the call Mr. Stone pokenav tutorial
+static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state)
+{
+ if (UpdateMenuCursorPos(state))
+ return POKENAV_MENU_FUNC_MOVE_CURSOR;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ if (sMenuItems[state->menuType][state->cursorPos] == POKENAV_MENUITEM_MATCH_CALL)
+ {
+ state->helpBarIndex = HELPBAR_MC_TRAINER_LIST;
+ sub_81C97B0(state, POKENAV_MENU_B);
+ return POKENAV_MENU_FUNC_OPEN_FEATURE;
+ }
+ else
+ {
+ PlaySE(SE_HAZURE);
+ return POKENAV_MENU_FUNC_NONE;
+ }
+ }
+
+ if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_HAZURE);
+ return POKENAV_MENU_FUNC_NONE;
+ }
+
+ return POKENAV_MENU_FUNC_NONE;
+}
+
+// After calling Mr. Stone during the pokenav tutorial, force player to exit or use Match Call again
+static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state)
+{
+ if (UpdateMenuCursorPos(state))
+ return POKENAV_MENU_FUNC_MOVE_CURSOR;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ u32 menuItem = sMenuItems[state->menuType][state->cursorPos];
+ if (menuItem != POKENAV_MENUITEM_MATCH_CALL && menuItem != POKENAV_MENUITEM_SWITCH_OFF)
+ {
+ PlaySE(SE_HAZURE);
+ return POKENAV_MENU_FUNC_NONE;
+ }
+ else if (menuItem == POKENAV_MENUITEM_MATCH_CALL)
+ {
+ state->helpBarIndex = HELPBAR_MC_TRAINER_LIST;
+ sub_81C97B0(state, POKENAV_MENU_B);
+ return POKENAV_MENU_FUNC_OPEN_FEATURE;
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ return -1;
+ }
+ return POKENAV_MENU_FUNC_NONE;
+}
+
+// Handles input after selecting Ribbons when there are no ribbon winners left
+// Selecting it again just reprints the Ribbon description to replace the "No Ribbon winners" message
+static u32 HandleCantOpenRibbonsInput(struct Pokenav1Struct *state)
+{
+ if (UpdateMenuCursorPos(state))
+ {
+ state->callback = GetMainMenuInputHandler();
+ return POKENAV_MENU_FUNC_MOVE_CURSOR;
+ }
+
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ state->callback = GetMainMenuInputHandler();
+ return POKENAV_MENU_FUNC_RESHOW_DESCRIPTION;
+ }
+
+ return POKENAV_MENU_FUNC_NONE;
+}
+
+static u32 HandleConditionMenuInput(struct Pokenav1Struct *state)
+{
+ if (UpdateMenuCursorPos(state))
+ return POKENAV_MENU_FUNC_MOVE_CURSOR;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ switch (sMenuItems[state->menuType][state->cursorPos])
+ {
+ case POKENAV_MENUITEM_CONDITION_SEARCH:
+ state->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH;
+ state->cursorPos = 0;
+ state->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION_SEARCH][0];
+ state->callback = HandleConditionSearchMenuInput;
+ return POKENAV_MENU_FUNC_OPEN_CONDITION_SEARCH;
+ case POKENAV_MENUITEM_CONDITION_PARTY:
+ state->helpBarIndex = 0;
+ sub_81C97B0(state, POKENAV_MENU_7);
+ return POKENAV_MENU_FUNC_OPEN_FEATURE;
+ case POKENAV_MENUITEM_CONDITION_CANCEL:
+ PlaySE(SE_SELECT);
+ ReturnToMainMenu(state);
+ return POKENAV_MENU_FUNC_RETURN_TO_MAIN;
+ }
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ if (state->cursorPos != sLastCursorPositions[state->menuType])
+ {
+ state->cursorPos = sLastCursorPositions[state->menuType];
+ state->callback = CB2_ReturnToMainMenu;
+ return POKENAV_MENU_FUNC_MOVE_CURSOR;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ ReturnToMainMenu(state);
+ return POKENAV_MENU_FUNC_RETURN_TO_MAIN;
+ }
+ }
+
+ return POKENAV_MENU_FUNC_NONE;
+}
+
+static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state)
+{
+ if (UpdateMenuCursorPos(state))
+ return POKENAV_MENU_FUNC_MOVE_CURSOR;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ u8 menuItem = sMenuItems[state->menuType][state->cursorPos];
+ if (menuItem != POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL)
+ {
+ SetSelectedConditionSearch(menuItem - POKENAV_MENUITEM_CONDITION_SEARCH_COOL);
+ sub_81C97B0(state, POKENAV_MENU_8);
+ state->helpBarIndex = HELPBAR_CONDITION_MON_LIST;
+ return POKENAV_MENU_FUNC_OPEN_FEATURE;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ ReturnToConditionMenu(state);
+ return POKENAV_MENU_FUNC_RETURN_TO_CONDITION;
+ }
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ if (state->cursorPos != sLastCursorPositions[state->menuType])
+ {
+ state->cursorPos = sLastCursorPositions[state->menuType];
+ state->callback = CB2_ReturnToConditionMenu;
+ return POKENAV_MENU_FUNC_MOVE_CURSOR;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ ReturnToConditionMenu(state);
+ return POKENAV_MENU_FUNC_RETURN_TO_CONDITION;
+ }
+ }
+ return POKENAV_MENU_FUNC_NONE;
+}
+
+static u32 CB2_ReturnToMainMenu(struct Pokenav1Struct *state)
+{
+ ReturnToMainMenu(state);
+ return POKENAV_MENU_FUNC_RETURN_TO_MAIN;
+}
+
+static u32 CB2_ReturnToConditionMenu(struct Pokenav1Struct *state)
+{
+ ReturnToConditionMenu(state);
+ return POKENAV_MENU_FUNC_RETURN_TO_CONDITION;
+}
+
+static void sub_81C97B0(struct Pokenav1Struct *state, u32 a1)
+{
+ state->unk8 = a1;
+ state->callback = sub_81C97BC;
+}
+
+static u32 sub_81C97BC(struct Pokenav1Struct *state)
+{
+ return state->unk8;
+}
+
+static void ReturnToMainMenu(struct Pokenav1Struct *state)
+{
+ state->menuType = GetPokenavMainMenuType();
+ state->cursorPos = 1;
+ state->currMenuItem = sMenuItems[state->menuType][state->cursorPos];
+ state->callback = HandleMainMenuInput;
+}
+
+static void ReturnToConditionMenu(struct Pokenav1Struct *state)
+{
+ state->menuType = POKENAV_MENU_TYPE_CONDITION;
+ state->cursorPos = 1;
+ state->currMenuItem = sMenuItems[POKENAV_MENU_TYPE_CONDITION][1];
+ state->callback = HandleConditionMenuInput;
+}
+
+static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state)
+{
+ if (gMain.newKeys & DPAD_UP)
+ {
+ if (--state->cursorPos < 0)
+ state->cursorPos = sLastCursorPositions[state->menuType];
+
+ state->currMenuItem = sMenuItems[state->menuType][state->cursorPos];
+ return TRUE;
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ state->cursorPos++;
+ if (state->cursorPos > sLastCursorPositions[state->menuType])
+ state->cursorPos = 0;
+
+ state->currMenuItem = sMenuItems[state->menuType][state->cursorPos];
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+int GetPokenavMenuType(void)
+{
+ struct Pokenav1Struct *state = GetSubstructPtr(1);
+ return state->menuType;
+}
+
+// Position of cursor relative to number of current menu options
+int GetPokenavCursorPos(void)
+{
+ struct Pokenav1Struct *state = GetSubstructPtr(1);
+ return state->cursorPos;
+}
+
+// ID of menu item the cursor is currently on
+int GetCurrentMenuItemId(void)
+{
+ struct Pokenav1Struct *state = GetSubstructPtr(1);
+ return state->currMenuItem;
+}
+
+u16 GetHelpBarTextId(void)
+{
+ struct Pokenav1Struct *state = GetSubstructPtr(1);
+ return state->helpBarIndex;
+}
diff --git a/src/pokenav_unk_2.c b/src/pokenav_menu_handler_2.c
index de962ccd6..94b816b6d 100644
--- a/src/pokenav_unk_2.c
+++ b/src/pokenav_menu_handler_2.c
@@ -23,31 +23,31 @@ struct Pokenav2Struct
{
bool32 (*callback)(void);
u32 loopedTaskId;
- u16 optionDescriptionWindowId;
+ u16 optionDescWindowId;
u8 bg3ScrollTaskId;
u8 cursorPos;
bool8 otherIconsInMotion;
u8 field_00d;
- bool32 iconVisible[6];
+ bool32 iconVisible[MAX_POKENAV_MENUITEMS];
struct Sprite * field_028;
- struct Sprite * iconSprites[6][4];
+ struct Sprite * iconSprites[MAX_POKENAV_MENUITEMS][4];
u16 bg1TilemapBuffer[0x400];
};
static struct Pokenav2Struct * sub_81C9958(void);
static bool32 sub_81C99FC(void);
static u32 sub_81C9A10(s32 state);
-static u32 sub_81C9C6C(s32 state);
-static u32 sub_81C9CA8(s32 state);
-static u32 sub_81C9D44(s32 state);
-static u32 sub_81C9DD8(s32 state);
-static u32 sub_81C9E58(s32 state);
-static u32 sub_81C9EC8(s32 state);
-static u32 sub_81C9EF8(s32 state);
-static u32 sub_81C9F28(s32 state);
+static u32 LoopedTask_MoveMenuCursor(s32 state);
+static u32 LoopedTask_OpenConditionMenu(s32 state);
+static u32 LoopedTask_ReturnToMainMenu(s32 state);
+static u32 LoopedTask_OpenConditionSearchMenu(s32 state);
+static u32 LoopedTask_ReturnToConditionMenu(s32 state);
+static u32 LoopedTask_SelectRibbonsNoWinners(s32 state);
+static u32 LoopedTask_ReShowDescription(s32 state);
+static u32 LoopedTask_OpenPokenavFeature(s32 state);
static void sub_81C9FC4(void);
static void sub_81C9FEC(void);
-static void sub_81CA02C(void);
+static void CreateMenuOptionSprites(void);
static void sub_81CA094(void);
static void sub_81CA0C8(void);
static void sub_81CA0EC(const u16 *const * a0, s32 a1, s32 a2);
@@ -56,7 +56,7 @@ static void sub_81CA278(void);
static void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3);
static void sub_81CA3B4(struct Sprite ** sprites);
static void sub_81CA2DC(void);
-static bool32 sub_81CA324(void);
+static bool32 AreMenuOptionSpritesMoving(void);
static void sub_81CA448(struct Sprite ** sprites, bool32 a1);
static void sub_81CA474(struct Sprite * sprite);
static void sub_81CA4AC(struct Sprite * sprite);
@@ -64,9 +64,9 @@ static void sub_81CA580(u8 taskId);
static void sub_81CA640(void);
static void sub_81CA6AC(struct Sprite * sprite);
static void sub_81CA698(void);
-static void sub_81CA6E0(void);
-static void sub_81CA714(void);
-static void sub_81CA770(void);
+static void AddOptionDescriptionWindow(void);
+static void PrintCurrentOptionDescription(void);
+static void PrintNoRibbonWinners(void);
static bool32 sub_81CA7C4(void);
static void sub_81CA7D4(void);
static void sub_81CA7F4(void);
@@ -120,16 +120,16 @@ static const struct BgTemplate gUnknown_08620194[] = {
}
};
-static const LoopedTask gUnknown_086201A0[] = {
- NULL,
- sub_81C9C6C,
- sub_81C9CA8,
- sub_81C9D44,
- sub_81C9DD8,
- sub_81C9E58,
- sub_81C9EC8,
- sub_81C9EF8,
- sub_81C9F28
+static const LoopedTask sMenuHandlerLoopTaskFuncs[] = {
+ [POKENAV_MENU_FUNC_NONE] = NULL,
+ [POKENAV_MENU_FUNC_MOVE_CURSOR] = LoopedTask_MoveMenuCursor,
+ [POKENAV_MENU_FUNC_OPEN_CONDITION] = LoopedTask_OpenConditionMenu,
+ [POKENAV_MENU_FUNC_RETURN_TO_MAIN] = LoopedTask_ReturnToMainMenu,
+ [POKENAV_MENU_FUNC_OPEN_CONDITION_SEARCH] = LoopedTask_OpenConditionSearchMenu,
+ [POKENAV_MENU_FUNC_RETURN_TO_CONDITION] = LoopedTask_ReturnToConditionMenu,
+ [POKENAV_MENU_FUNC_NO_RIBBON_WINNERS] = LoopedTask_SelectRibbonsNoWinners,
+ [POKENAV_MENU_FUNC_RESHOW_DESCRIPTION] = LoopedTask_ReShowDescription,
+ [POKENAV_MENU_FUNC_OPEN_FEATURE] = LoopedTask_OpenPokenavFeature
};
static const struct CompressedSpriteSheet gUnknown_086201C4[] =
@@ -175,39 +175,45 @@ struct UnkStruct_08620240
{
u16 unk0;
u16 unk2;
- const u16 *unk4[6];
+ const u16 *unk4[MAX_POKENAV_MENUITEMS];
};
-static const struct UnkStruct_08620240 gUnknown_08620240[5] =
+// TODO
+static const struct UnkStruct_08620240 gUnknown_08620240[POKENAV_MENU_TYPE_COUNT] =
{
+ [POKENAV_MENU_TYPE_DEFAULT] =
{
0x2A,
- 0x14,
- {gUnknown_0862020C, gUnknown_08620210, gUnknown_0862021C}
+ 0x14,
+ {gUnknown_0862020C, gUnknown_08620210, gUnknown_0862021C}
},
+ [POKENAV_MENU_TYPE_UNLOCK_MC] =
{
0x2A,
- 0x14,
- {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_0862021C}
+ 0x14,
+ {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_0862021C}
},
+ [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] =
{
0x2A,
- 0x14,
- {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_08620218, gUnknown_0862021C}
+ 0x14,
+ {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_08620218, gUnknown_0862021C}
},
+ [POKENAV_MENU_TYPE_CONDITION] =
{
0x38,
- 0x14,
- {gUnknown_08620220, gUnknown_08620224, gUnknown_0862023C}
+ 0x14,
+ {gUnknown_08620220, gUnknown_08620224, gUnknown_0862023C}
},
+ [POKENAV_MENU_TYPE_CONDITION_SEARCH] =
{
0x28,
- 0x10,
- {gUnknown_08620228, gUnknown_0862022C, gUnknown_08620230, gUnknown_08620234, gUnknown_08620238, gUnknown_0862023C}
+ 0x10,
+ {gUnknown_08620228, gUnknown_0862022C, gUnknown_08620230, gUnknown_08620234, gUnknown_08620238, gUnknown_0862023C}
},
};
-static const struct WindowTemplate gUnknown_086202CC =
+static const struct WindowTemplate sOptionDescWindowTemplate =
{
.bg = 1,
.tilemapLeft = 3,
@@ -218,28 +224,28 @@ static const struct WindowTemplate gUnknown_086202CC =
.baseBlock = 8
};
-static const u8 *const gUnknown_086202D4[] =
-{
- gText_CheckMapOfHoenn,
- gText_CheckPokemonInDetail,
- gText_CallRegisteredTrainer,
- gText_CheckObtainedRibbons,
- gText_PutAwayPokenav,
- gText_CheckPartyPokemonInDetail,
- gText_CheckAllPokemonInDetail,
- gText_ReturnToPokenavMenu,
- gText_FindCoolPokemon,
- gText_FindBeautifulPokemon,
- gText_FindCutePokemon,
- gText_FindSmartPokemon,
- gText_FindToughPokemon,
- gText_ReturnToConditionMenu
+static const u8 *const sPageDescriptions[] =
+{
+ [POKENAV_MENUITEM_MAP] = gText_CheckMapOfHoenn,
+ [POKENAV_MENUITEM_CONDITION] = gText_CheckPokemonInDetail,
+ [POKENAV_MENUITEM_MATCH_CALL] = gText_CallRegisteredTrainer,
+ [POKENAV_MENUITEM_RIBBONS] = gText_CheckObtainedRibbons,
+ [POKENAV_MENUITEM_SWITCH_OFF] = gText_PutAwayPokenav,
+ [POKENAV_MENUITEM_CONDITION_PARTY] = gText_CheckPartyPokemonInDetail,
+ [POKENAV_MENUITEM_CONDITION_SEARCH] = gText_CheckAllPokemonInDetail,
+ [POKENAV_MENUITEM_CONDITION_CANCEL] = gText_ReturnToPokenavMenu,
+ [POKENAV_MENUITEM_CONDITION_SEARCH_COOL] = gText_FindCoolPokemon,
+ [POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY] = gText_FindBeautifulPokemon,
+ [POKENAV_MENUITEM_CONDITION_SEARCH_CUTE] = gText_FindCutePokemon,
+ [POKENAV_MENUITEM_CONDITION_SEARCH_SMART] = gText_FindSmartPokemon,
+ [POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH] = gText_FindToughPokemon,
+ [POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL] = gText_ReturnToConditionMenu
};
-static const u8 sOptionDescTextColors[] = {TEXT_COLOR_GREEN, TEXT_COLOR_BLUE, TEXT_COLOR_LIGHT_GREEN};
+static const u8 sOptionDescTextColors[] = {TEXT_COLOR_GREEN, TEXT_COLOR_BLUE, TEXT_COLOR_LIGHT_GREEN};
static const u8 sOptionDescTextColors2[] = {TEXT_COLOR_GREEN, TEXT_COLOR_BLUE, TEXT_COLOR_LIGHT_GREEN};
-static const struct OamData gUnknown_08620314 =
+static const struct OamData sOamData_MenuOption =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -266,20 +272,20 @@ static const union AffineAnimCmd gUnknown_0862032C[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd *const gUnknown_08620344[] =
+static const union AffineAnimCmd *const sSpriteAnims_MenuOption[] =
{
gUnknown_0862031C,
- gUnknown_0862032C
+ gUnknown_0862032C
};
-static const struct SpriteTemplate gUnknown_0862034C =
+static const struct SpriteTemplate sMenuOptionSpriteTemplate =
{
.tileTag = 3,
.paletteTag = 4,
- .oam = &gUnknown_08620314,
+ .oam = &sOamData_MenuOption,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08620344,
+ .affineAnims = sSpriteAnims_MenuOption,
.callback = SpriteCallbackDummy,
};
@@ -368,11 +374,11 @@ static struct Pokenav2Struct * sub_81C9958(void)
}
-void sub_81C9990(s32 ltIdx)
+void CreateMenuHandlerLoopedTask(s32 ltIdx)
{
struct Pokenav2Struct * unk = GetSubstructPtr(2);
- unk->loopedTaskId = CreateLoopedTask(gUnknown_086201A0[ltIdx], 1);
+ unk->loopedTaskId = CreateLoopedTask(sMenuHandlerLoopTaskFuncs[ltIdx], 1);
unk->callback = sub_81C99FC;
}
@@ -388,7 +394,7 @@ void sub_81C99D4(void)
struct Pokenav2Struct * unk = GetSubstructPtr(2);
sub_81CA7F4();
- RemoveWindow(unk->optionDescriptionWindowId);
+ RemoveWindow(unk->optionDescWindowId);
sub_81C9FEC();
sub_81CA994();
FreePokenavSubstruct(2);
@@ -434,21 +440,21 @@ static u32 sub_81C9A10(s32 state)
decompress_and_copy_tile_data_to_vram(3, gUnknown_0861FC98, 0, 0, 0);
decompress_and_copy_tile_data_to_vram(3, gUnknown_0861FCAC, 0, 0, 1);
CopyPaletteIntoBufferUnfaded(gUnknown_0861FC78, 0x30, 0x20);
- if (sub_81C9894() == 3 || sub_81C9894() == 4)
+ if (GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION || GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION_SEARCH)
sub_81CA850();
return LT_INC_AND_PAUSE;
case 3:
if (free_temp_tile_data_buffers_if_possible())
return LT_PAUSE;
- sub_81CA6E0();
+ AddOptionDescriptionWindow();
sub_81CA7D4();
return LT_INC_AND_CONTINUE;
case 4:
sub_81C9FC4();
return LT_INC_AND_CONTINUE;
case 5:
- sub_81CA714();
- sub_81CA02C();
+ PrintCurrentOptionDescription();
+ CreateMenuOptionSprites();
sub_81CA640();
sub_81CA0C8();
return LT_INC_AND_PAUSE;
@@ -467,12 +473,12 @@ static u32 sub_81C9A10(s32 state)
PlaySE(SE_PN_ON);
sub_81C7AC0(3);
}
- switch (sub_81C9894())
+ switch (GetPokenavMenuType())
{
- case 4:
+ case POKENAV_MENU_TYPE_CONDITION_SEARCH:
LoadLeftHeaderGfxForIndex(7);
// fallthrough
- case 3:
+ case POKENAV_MENU_TYPE_CONDITION:
LoadLeftHeaderGfxForIndex(1);
break;
default:
@@ -483,12 +489,12 @@ static u32 sub_81C9A10(s32 state)
case 8:
if (IsPaletteFadeActive())
return LT_PAUSE;
- switch (sub_81C9894())
+ switch (GetPokenavMenuType())
{
- case 4:
+ case POKENAV_MENU_TYPE_CONDITION_SEARCH:
sub_81C7FA0(7, FALSE, FALSE);
// fallthrough
- case 3:
+ case POKENAV_MENU_TYPE_CONDITION:
sub_81C7FA0(1, FALSE, FALSE);
break;
default:
@@ -499,7 +505,7 @@ static u32 sub_81C9A10(s32 state)
sub_81CA92C();
return LT_INC_AND_CONTINUE;
case 9:
- if (sub_81CA324())
+ if (AreMenuOptionSpritesMoving())
return LT_PAUSE;
if (sub_81C8010())
return LT_PAUSE;
@@ -508,18 +514,18 @@ static u32 sub_81C9A10(s32 state)
return LT_FINISH;
}
-static u32 sub_81C9C6C(s32 state)
+static u32 LoopedTask_MoveMenuCursor(s32 state)
{
switch (state)
{
case 0:
sub_81CAA3C();
sub_81CA278();
- sub_81CA714();
+ PrintCurrentOptionDescription();
PlaySE(SE_SELECT);
return LT_INC_AND_PAUSE;
case 1:
- if (sub_81CA324())
+ if (AreMenuOptionSpritesMoving())
return LT_PAUSE;
if (sub_81CA7C4())
return LT_PAUSE;
@@ -528,7 +534,7 @@ static u32 sub_81C9C6C(s32 state)
return LT_FINISH;
}
-static u32 sub_81C9CA8(s32 state)
+static u32 LoopedTask_OpenConditionMenu(s32 state)
{
switch (state)
{
@@ -539,7 +545,7 @@ static u32 sub_81C9CA8(s32 state)
PlaySE(SE_SELECT);
return LT_INC_AND_PAUSE;
case 1:
- if (sub_81CA324())
+ if (AreMenuOptionSpritesMoving())
return LT_PAUSE;
if (sub_81C8010())
return LT_PAUSE;
@@ -550,10 +556,10 @@ static u32 sub_81C9CA8(s32 state)
sub_81CA20C();
sub_81C7FA0(1, FALSE, FALSE);
sub_81CA818();
- sub_81CA714();
+ PrintCurrentOptionDescription();
return LT_INC_AND_PAUSE;
case 3:
- if (sub_81CA324())
+ if (AreMenuOptionSpritesMoving())
return LT_PAUSE;
if (sub_81C8010())
return LT_PAUSE;
@@ -567,7 +573,7 @@ static u32 sub_81C9CA8(s32 state)
return LT_FINISH;
}
-static u32 sub_81C9D44(s32 state)
+static u32 LoopedTask_ReturnToMainMenu(s32 state)
{
switch (state)
{
@@ -577,7 +583,7 @@ static u32 sub_81C9D44(s32 state)
sub_81C7FC4(1, 0);
return LT_INC_AND_PAUSE;
case 1:
- if (sub_81CA324())
+ if (AreMenuOptionSpritesMoving())
return LT_PAUSE;
if (sub_81C8010())
return LT_PAUSE;
@@ -588,10 +594,10 @@ static u32 sub_81C9D44(s32 state)
sub_81CA20C();
sub_81C7FA0(0, FALSE, FALSE);
sub_81CA864();
- sub_81CA714();
+ PrintCurrentOptionDescription();
return LT_INC_AND_PAUSE;
case 3:
- if (sub_81CA324())
+ if (AreMenuOptionSpritesMoving())
return LT_PAUSE;
if (sub_81C8010())
return LT_PAUSE;
@@ -605,7 +611,7 @@ static u32 sub_81C9D44(s32 state)
return LT_FINISH;
}
-static u32 sub_81C9DD8(s32 state)
+static u32 LoopedTask_OpenConditionSearchMenu(s32 state)
{
switch (state)
{
@@ -615,7 +621,7 @@ static u32 sub_81C9DD8(s32 state)
PlaySE(SE_SELECT);
return LT_INC_AND_PAUSE;
case 1:
- if (sub_81CA324())
+ if (AreMenuOptionSpritesMoving())
return LT_PAUSE;
LoadLeftHeaderGfxForIndex(7);
sub_81CA0C8();
@@ -623,10 +629,10 @@ static u32 sub_81C9DD8(s32 state)
case 2:
sub_81CA20C();
sub_81C7FA0(7, FALSE, FALSE);
- sub_81CA714();
+ PrintCurrentOptionDescription();
return LT_INC_AND_PAUSE;
case 3:
- if (sub_81CA324())
+ if (AreMenuOptionSpritesMoving())
return LT_PAUSE;
if (sub_81C8010())
return LT_PAUSE;
@@ -638,7 +644,7 @@ static u32 sub_81C9DD8(s32 state)
return LT_FINISH;
}
-static u32 sub_81C9E58(s32 state)
+static u32 LoopedTask_ReturnToConditionMenu(s32 state)
{
switch (state)
{
@@ -648,7 +654,7 @@ static u32 sub_81C9E58(s32 state)
sub_81C7FC4(7, 0);
return LT_INC_AND_PAUSE;
case 1:
- if (sub_81CA324())
+ if (AreMenuOptionSpritesMoving())
return LT_PAUSE;
if (sub_81C8010())
return LT_PAUSE;
@@ -656,10 +662,10 @@ static u32 sub_81C9E58(s32 state)
return LT_INC_AND_PAUSE;
case 2:
sub_81CA20C();
- sub_81CA714();
+ PrintCurrentOptionDescription();
return LT_INC_AND_PAUSE;
case 3:
- if (sub_81CA324())
+ if (AreMenuOptionSpritesMoving())
return LT_PAUSE;
if (sub_81CA89C())
return LT_PAUSE;
@@ -669,13 +675,13 @@ static u32 sub_81C9E58(s32 state)
return LT_FINISH;
}
-static u32 sub_81C9EC8(s32 state)
+static u32 LoopedTask_SelectRibbonsNoWinners(s32 state)
{
switch (state)
{
case 0:
PlaySE(SE_HAZURE);
- sub_81CA770();
+ PrintNoRibbonWinners();
return LT_INC_AND_PAUSE;
case 1:
if (IsDma3ManagerBusyWithBgCopy())
@@ -685,13 +691,14 @@ static u32 sub_81C9EC8(s32 state)
return LT_FINISH;
}
-static u32 sub_81C9EF8(s32 state)
+// For redisplaying the Ribbons description to replace the No Ribbon Winners message
+static u32 LoopedTask_ReShowDescription(s32 state)
{
switch (state)
{
case 0:
PlaySE(SE_SELECT);
- sub_81CA714();
+ PrintCurrentOptionDescription();
return LT_INC_AND_PAUSE;
case 1:
if (IsDma3ManagerBusyWithBgCopy())
@@ -701,7 +708,8 @@ static u32 sub_81C9EF8(s32 state)
return LT_FINISH;
}
-static u32 sub_81C9F28(s32 state)
+// For selecting a feature option from a menu, e.g. the Map, Match Call, Beauty search, etc.
+static u32 LoopedTask_OpenPokenavFeature(s32 state)
{
switch (state)
{
@@ -714,12 +722,12 @@ static u32 sub_81C9F28(s32 state)
sub_81C7880();
sub_81CA9C8();
sub_81CA2DC();
- switch (sub_81C9894())
+ switch (GetPokenavMenuType())
{
- case 4:
+ case POKENAV_MENU_TYPE_CONDITION_SEARCH:
sub_81C7FC4(7, FALSE);
// fallthrough
- case 3:
+ case POKENAV_MENU_TYPE_CONDITION:
sub_81C7FC4(1, FALSE);
break;
default:
@@ -729,7 +737,7 @@ static u32 sub_81C9F28(s32 state)
PlaySE(SE_SELECT);
return LT_INC_AND_PAUSE;
case 2:
- if (sub_81CA324())
+ if (AreMenuOptionSpritesMoving())
return LT_PAUSE;
if (sub_81C8010())
return LT_PAUSE;
@@ -766,16 +774,17 @@ static void sub_81C9FEC(void)
sub_81CA698();
}
-static void sub_81CA02C(void)
+static void CreateMenuOptionSprites(void)
{
s32 i, j;
struct Pokenav2Struct * unk = GetSubstructPtr(2);
- for (i = 0; i < 6; i++)
+ for (i = 0; i < MAX_POKENAV_MENUITEMS; i++)
{
+ // Each menu option is 4 subsprites
for (j = 0; j < 4; j++)
{
- u8 spriteId = CreateSprite(&gUnknown_0862034C, 0x8c, 20 * i + 40, 3);
+ u8 spriteId = CreateSprite(&sMenuOptionSpriteTemplate, 0x8c, 20 * i + 40, 3);
unk->iconSprites[i][j] = &gSprites[spriteId];
gSprites[spriteId].pos2.x = 32 * j;
}
@@ -787,7 +796,7 @@ static void sub_81CA094(void)
s32 i, j;
struct Pokenav2Struct * unk = GetSubstructPtr(2);
- for (i = 0; i < 6; i++)
+ for (i = 0; i < MAX_POKENAV_MENUITEMS; i++)
{
for (j = 0; j < 4; j++)
{
@@ -799,8 +808,8 @@ static void sub_81CA094(void)
static void sub_81CA0C8(void)
{
- s32 r0 = sub_81C9894();
- sub_81CA0EC(gUnknown_08620240[r0].unk4, gUnknown_08620240[r0].unk0, gUnknown_08620240[r0].unk2);
+ s32 menuType = GetPokenavMenuType();
+ sub_81CA0EC(gUnknown_08620240[menuType].unk4, gUnknown_08620240[menuType].unk0, gUnknown_08620240[menuType].unk2);
}
static void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2)
@@ -809,7 +818,7 @@ static void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2)
struct Pokenav2Struct * unk = GetSubstructPtr(2);
s32 sp04 = GetSpriteTileStartByTag(3);
- for (i = 0; i < 6; i++)
+ for (i = 0; i < MAX_POKENAV_MENUITEMS; i++)
{
if (*a0 != NULL)
{
@@ -841,11 +850,11 @@ static void sub_81CA20C(void)
{
s32 i;
struct Pokenav2Struct * unk = GetSubstructPtr(2);
- s32 r8 = sub_81C98A4();
+ s32 r8 = GetPokenavCursorPos();
s32 r7 = 0;
s32 r2;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < MAX_POKENAV_MENUITEMS; i++)
{
if (unk->iconVisible[i])
{
@@ -868,10 +877,10 @@ static void sub_81CA278(void)
{
s32 i;
struct Pokenav2Struct * unk = GetSubstructPtr(2);
- s32 r3 = sub_81C98A4();
+ s32 r3 = GetPokenavCursorPos();
s32 r5;
- for (i = 0, r5 = 0; i < 6; i++)
+ for (i = 0, r5 = 0; i < MAX_POKENAV_MENUITEMS; i++)
{
if (unk->iconVisible[i])
{
@@ -894,7 +903,7 @@ static void sub_81CA2DC(void)
s32 i;
struct Pokenav2Struct * unk = GetSubstructPtr(2);
- for (i = 0; i < 6; i++)
+ for (i = 0; i < MAX_POKENAV_MENUITEMS; i++)
{
if (unk->iconVisible[i])
{
@@ -906,12 +915,12 @@ static void sub_81CA2DC(void)
}
}
-static bool32 sub_81CA324(void)
+static bool32 AreMenuOptionSpritesMoving(void)
{
s32 i;
struct Pokenav2Struct * unk = GetSubstructPtr(2);
- for (i = 0; i < 6; i++)
+ for (i = 0; i < MAX_POKENAV_MENUITEMS; i++)
{
if (unk->iconSprites[i][0]->callback != SpriteCallbackDummy)
return TRUE;
@@ -1112,34 +1121,35 @@ static void sub_81CA6AC(struct Sprite * sprite)
}
}
-static void sub_81CA6E0(void)
+static void AddOptionDescriptionWindow(void)
{
struct Pokenav2Struct * ptr = GetSubstructPtr(2);
- ptr->optionDescriptionWindowId = AddWindow(&gUnknown_086202CC);
- PutWindowTilemap(ptr->optionDescriptionWindowId);
- FillWindowPixelBuffer(ptr->optionDescriptionWindowId, PIXEL_FILL(6));
- CopyWindowToVram(ptr->optionDescriptionWindowId, 3);
+ ptr->optionDescWindowId = AddWindow(&sOptionDescWindowTemplate);
+ PutWindowTilemap(ptr->optionDescWindowId);
+ FillWindowPixelBuffer(ptr->optionDescWindowId, PIXEL_FILL(6));
+ CopyWindowToVram(ptr->optionDescWindowId, 3);
}
-static void sub_81CA714(void)
+static void PrintCurrentOptionDescription(void)
{
struct Pokenav2Struct * ptr = GetSubstructPtr(2);
- int i = sub_81C98B4();
- const u8 * s = gUnknown_086202D4[i];
+ int menuItem = GetCurrentMenuItemId();
+ const u8 * s = sPageDescriptions[menuItem];
u32 width = GetStringWidth(1, s, -1);
- FillWindowPixelBuffer(ptr->optionDescriptionWindowId, PIXEL_FILL(6));
- AddTextPrinterParameterized3(ptr->optionDescriptionWindowId, 1, (192 - width) / 2, 1, sOptionDescTextColors, 0, s);
+ FillWindowPixelBuffer(ptr->optionDescWindowId, PIXEL_FILL(6));
+ AddTextPrinterParameterized3(ptr->optionDescWindowId, 1, (192 - width) / 2, 1, sOptionDescTextColors, 0, s);
}
-
-static void sub_81CA770(void)
+// Printed when Ribbons is selected if no PC/party mons have ribbons
+// Can occur by obtaining a mon with a ribbon and then releasing all ribbon winners
+static void PrintNoRibbonWinners(void)
{
struct Pokenav2Struct * ptr = GetSubstructPtr(2);
const u8 * s = gText_NoRibbonWinners;
u32 width = GetStringWidth(1, s, -1);
- FillWindowPixelBuffer(ptr->optionDescriptionWindowId, PIXEL_FILL(6));
- AddTextPrinterParameterized3(ptr->optionDescriptionWindowId, 1, (192 - width) / 2, 1, sOptionDescTextColors2, 0, s);
+ FillWindowPixelBuffer(ptr->optionDescWindowId, PIXEL_FILL(6));
+ AddTextPrinterParameterized3(ptr->optionDescWindowId, 1, (192 - width) / 2, 1, sOptionDescTextColors2, 0, s);
}
static bool32 sub_81CA7C4(void)
@@ -1259,9 +1269,9 @@ static void sub_81CA9EC(u8 taskId)
static void sub_81CAA3C(void)
{
- int i = sub_81C9894();
- int j = sub_81C98A4();
- int r4 = gUnknown_08620240[i].unk2 * j + gUnknown_08620240[i].unk0 - 8;
+ int menuType = GetPokenavMenuType();
+ int cursorPos = GetPokenavCursorPos();
+ int r4 = gUnknown_08620240[menuType].unk2 * cursorPos + gUnknown_08620240[menuType].unk0 - 8;
CpuFill16(0, gScanlineEffectRegBuffers[0], 0x140);
CpuFill16(0, gScanlineEffectRegBuffers[1], 0x140);
CpuFill16(RGB(16, 23, 28), &gScanlineEffectRegBuffers[0][r4], 0x20);
diff --git a/src/pokenav_unk_5.c b/src/pokenav_region_map.c
index be30ca94d..be30ca94d 100755
--- a/src/pokenav_unk_5.c
+++ b/src/pokenav_region_map.c
diff --git a/src/pokenav_unk_9.c b/src/pokenav_ribbons_1.c
index b1a344de9..63b4adb30 100644
--- a/src/pokenav_unk_9.c
+++ b/src/pokenav_ribbons_1.c
@@ -50,7 +50,7 @@ static void sub_81D02B0(s32 windowId, s32 val1, s32 val2);
static void sub_81D024C(struct PokenavSub10 *ptr);
static void sub_81D0288(struct PokenavSub10 *ptr);
static void sub_81D0304(void);
-static void sub_81D035C(struct PokenavMonList *, u8 *);
+static void BufferRibbonMonInfoText(struct PokenavMonList *, u8 *);
static const LoopedTask gUnknown_086235D8[] =
{
@@ -107,9 +107,9 @@ static const struct WindowTemplate gUnknown_086237D4 =
.baseBlock = 20
};
-static const u8 gUnknown_086237DC[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}");
-static const u8 gUnknown_086237E8[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}");
-static const u8 gUnknown_086237F4[] = _("{UNK_SPACER}");
+static const u8 sText_MaleSymbol[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}");
+static const u8 sText_FemaleSymbol[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}");
+static const u8 sText_NoGenderSymbol[] = _("{UNK_SPACER}");
bool32 PokenavCallback_Init_12(void)
{
@@ -188,12 +188,12 @@ static u32 sub_81CFA88(struct PokenavSub9 *structPtr)
static u32 sub_81CFB08(struct PokenavSub9 *structPtr)
{
- return 100005;
+ return POKENAV_MENU_5;
}
static u32 sub_81CFB10(struct PokenavSub9 *structPtr)
{
- return 100013;
+ return POKENAV_MENU_D;
}
static u32 sub_81CFB18(void)
@@ -660,7 +660,7 @@ static void sub_81D02B0(s32 windowId, s32 val1, s32 val2)
*ptr++ = CHAR_SLASH;
ConvertIntToDecimalStringN(ptr, val2, STR_CONV_MODE_RIGHT_ALIGN, 3);
x = GetStringCenterAlignXOffset(1, strbuf, 56);
- AddTextPrinterParameterized(windowId, 1, strbuf,x, 1, 0xFF, NULL);
+ AddTextPrinterParameterized(windowId, 1, strbuf, x, 1, 0xFF, NULL);
}
static void sub_81D0304(void)
@@ -676,18 +676,21 @@ static void sub_81D0304(void)
template.unkC = 8;
template.unkD = 2;
template.unkE = 1;
- template.listFunc.unk10_1 = sub_81D035C;
+ template.listFunc.unk10_1 = BufferRibbonMonInfoText;
template.unk14 = NULL;
sub_81C81D4(&gUnknown_086237B0[1], &template, 0);
}
-static void sub_81D035C(struct PokenavMonList * item0, u8 * dest)
+// Buffers the "Nickname gender/level" text for the ribbon mon list
+static void BufferRibbonMonInfoText(struct PokenavMonList * item0, u8 * dest)
{
u8 gender;
u8 level;
u8 * s;
const u8 * genderStr;
struct PokenavMonList * item = item0;
+
+ // Mon is in party
if (item->boxId == TOTAL_BOXES_COUNT)
{
struct Pokemon * mon = &gPlayerParty[item->monId];
@@ -695,6 +698,7 @@ static void sub_81D035C(struct PokenavMonList * item0, u8 * dest)
level = GetLevelFromMonExp(mon);
GetMonData(mon, MON_DATA_NICKNAME, gStringVar3);
}
+ // Mon is in PC
else
{
struct BoxPokemon * mon = GetBoxedMonPtr(item->boxId, item->monId);
@@ -702,24 +706,26 @@ static void sub_81D035C(struct PokenavMonList * item0, u8 * dest)
level = GetLevelFromBoxMonExp(mon);
GetBoxMonData(mon, MON_DATA_NICKNAME, gStringVar3);
}
+
StringGetEnd10(gStringVar3);
dest = sub_81DB494(dest, 1, gStringVar3, 60);
switch (gender)
{
default:
- genderStr = gUnknown_086237F4;
+ genderStr = sText_NoGenderSymbol;
break;
case MON_MALE:
- genderStr = gUnknown_086237DC;
+ genderStr = sText_MaleSymbol;
break;
case MON_FEMALE:
- genderStr = gUnknown_086237E8;
+ genderStr = sText_FemaleSymbol;
break;
}
+
s = StringCopy(gStringVar1, genderStr);
*s++ = CHAR_SLASH;
*s++ = CHAR_SPECIAL_F9;
- *s++ = 5; // LV
+ *s++ = CHAR_LV_2;
ConvertIntToDecimalStringN(s, level, STR_CONV_MODE_LEFT_ALIGN, 3);
dest = sub_81DB494(dest, 1, gStringVar1, 54);
ConvertIntToDecimalStringN(dest, item->data, STR_CONV_MODE_RIGHT_ALIGN, 2);
diff --git a/src/pokenav_unk_10.c b/src/pokenav_ribbons_2.c
index 099843f83..2789b1244 100644
--- a/src/pokenav_unk_10.c
+++ b/src/pokenav_ribbons_2.c
@@ -122,8 +122,8 @@ static const u16 gUnknown_08624038[] = INCBIN_U16("graphics/pokenav/ribbons_icon
static const u16 gUnknown_08624058[] = INCBIN_U16("graphics/pokenav/ribbons_icon4.gbapal");
static const u16 gUnknown_08624078[] = INCBIN_U16("graphics/pokenav/ribbons_icon5.gbapal");
static const u16 gUnknown_08624098[] = INCBIN_U16("graphics/pokenav/8624098.gbapal");
-static const u32 gUnknown_086240B8[] = INCBIN_U32("graphics/pokenav/ribbons_icon.4bpp.lz");
-static const u32 gUnknown_08624280[] = INCBIN_U32("graphics/pokenav/ribbons_icon_big.4bpp.lz");
+static const u32 sRibbonIconsSmall_Gfx[] = INCBIN_U32("graphics/pokenav/ribbons_icon.4bpp.lz");
+static const u32 sRibbonIconsBig_Gfx[] = INCBIN_U32("graphics/pokenav/ribbons_icon_big.4bpp.lz");
static const struct BgTemplate gUnknown_08624B98[] =
{
@@ -235,7 +235,7 @@ u32 sub_81D0548(struct PokenavSub13 *structPtr)
u32 sub_81D05D4(struct PokenavSub13 *structPtr)
{
- return 100014;
+ return POKENAV_MENU_E;
}
bool32 sub_81D05DC(struct PokenavSub13 *structPtr)
@@ -527,7 +527,7 @@ u32 sub_81D0A6C(s32 state)
if (!free_temp_tile_data_buffers_if_possible())
{
sub_8199DF0(1, 0, 0, 1);
- decompress_and_copy_tile_data_to_vram(1, gUnknown_086240B8, 0, 1, 0);
+ decompress_and_copy_tile_data_to_vram(1, sRibbonIconsSmall_Gfx, 0, 1, 0);
SetBgTilemapBuffer(1, structPtr->tilemapBuffers[1]);
FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20);
CopyPaletteIntoBufferUnfaded(gUnknown_08623FF8, 0x20, 0xA0);
@@ -837,7 +837,7 @@ void sub_81D0FF0(struct PokenavSub14 *structPtr)
txtPtr = StringCopy(gStringVar1, genderTxt);
*(txtPtr++) = CHAR_SLASH;
*(txtPtr++) = CHAR_SPECIAL_F9;
- *(txtPtr++) = 5;
+ *(txtPtr++) = CHAR_LV_2;
ConvertIntToDecimalStringN(txtPtr, level, STR_CONV_MODE_LEFT_ALIGN, 3);
AddTextPrinterParameterized(windowId, 1, gStringVar1, 60, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(windowId, 2);
@@ -1041,7 +1041,7 @@ void sub_81D13BC(u16 *dst, u32 id)
static const struct CompressedSpriteSheet gUnknown_08624C78 =
{
- gUnknown_08624280, 0x1800, 9
+ sRibbonIconsBig_Gfx, 0x1800, 9
};
static const struct SpritePalette gUnknown_08624C80[] =
diff --git a/src/pokenav_unk_1.c b/src/pokenav_unk_1.c
deleted file mode 100644
index 8bf3ebd2a..000000000
--- a/src/pokenav_unk_1.c
+++ /dev/null
@@ -1,466 +0,0 @@
-#include "global.h"
-#include "pokenav.h"
-#include "event_data.h"
-#include "main.h"
-#include "sound.h"
-#include "constants/songs.h"
-
-struct Pokenav1Struct
-{
- u16 menuType;
- s16 cursorPos;
- u16 descriptionId;
- u16 helpBarIndex;
- u32 unk8;
- u32 (*callback)(struct Pokenav1Struct*);
-};
-
-static bool32 sub_81C9814(struct Pokenav1Struct *a0);
-static void sub_81C97F8(struct Pokenav1Struct *a0);
-static void sub_81C97C0(struct Pokenav1Struct *a0);
-static u32 sub_81C97BC(struct Pokenav1Struct *a0);
-static void sub_81C97B0(struct Pokenav1Struct *a0, u32 a1);
-static u32 sub_81C97A4(struct Pokenav1Struct *a0);
-static u32 sub_81C9798(struct Pokenav1Struct *a0);
-static u32 sub_81C96FC(struct Pokenav1Struct *a0);
-static u32 sub_81C963C(struct Pokenav1Struct *a0);
-static u32 sub_81C9600(struct Pokenav1Struct *a0);
-static u32 sub_81C9588(struct Pokenav1Struct *a0);
-static u32 sub_81C9520(struct Pokenav1Struct *a0);
-static u32 sub_81C943C(struct Pokenav1Struct *a0);
-static u32 (*sub_81C93EC(void))(struct Pokenav1Struct*);
-static void sub_81C939C(struct Pokenav1Struct *state);
-
-static const u8 sLastCursorPositions[] = {2, 3, 4, 2, 5};
-
-static const u8 sDescriptionIds[][6] =
-{
- { 0, 1, 4, 4, 4, 4 },
- { 0, 1, 2, 4, 4, 4 },
- { 0, 1, 2, 3, 4, 4 },
- { 5, 6, 7, 4, 4, 4 },
- { 8, 9, 10, 11, 12, 13 },
-};
-
-static u8 GetPokenavMainMenuType(void)
-{
- u8 retVal = 0;
- if (FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV))
- {
- retVal = 1;
- if (FlagGet(FLAG_SYS_RIBBON_GET))
- retVal = 2;
- }
-
- return retVal;
-}
-
-bool32 PokenavCallback_Init_0(void)
-{
- struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
- if (!state)
- return FALSE;
-
- state->menuType = GetPokenavMainMenuType();
- state->cursorPos = 0;
- state->descriptionId = 0;
- state->helpBarIndex = HELPBAR_NONE;
- sub_81C939C(state);
- return TRUE;
-}
-
-bool32 PokenavCallback_Init_4(void)
-{
- struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
- if (!state)
- return FALSE;
-
- state->menuType = GetPokenavMainMenuType();
- state->cursorPos = 2;
- state->descriptionId = 2;
- state->helpBarIndex = HELPBAR_NONE;
- sub_81C939C(state);
- return TRUE;
-}
-
-bool32 PokenavCallback_Init_5(void)
-{
- struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
- if (!state)
- return FALSE;
-
- state->menuType = GetPokenavMainMenuType();
- state->cursorPos = 3;
- state->descriptionId = 3;
- sub_81C939C(state);
- return TRUE;
-}
-
-bool32 PokenavCallback_Init_2(void)
-{
- struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
- if (!state)
- return FALSE;
-
- state->menuType = 3;
- state->cursorPos = 0;
- state->descriptionId = 5;
- state->helpBarIndex = HELPBAR_NONE;
- sub_81C939C(state);
- return TRUE;
-}
-
-bool32 PokenavCallback_Init_3(void)
-{
- struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct));
- if (!state)
- return FALSE;
-
- state->menuType = 4;
- state->cursorPos = sub_81C76AC();
- state->descriptionId = state->cursorPos + 8;
- state->helpBarIndex = HELPBAR_NONE;
- sub_81C939C(state);
- return TRUE;
-}
-
-static void sub_81C939C(struct Pokenav1Struct *state)
-{
- switch (state->menuType)
- {
- case 0:
- SetPokenavMode(POKENAV_MODE_NORMAL);
- // fallthrough
- case 1:
- case 2:
- state->callback = sub_81C93EC();
- break;
- case 3:
- state->callback = sub_81C963C;
- break;
- case 4:
- state->callback = sub_81C96FC;
- break;
- }
-}
-
-static u32 (*sub_81C93EC(void))(struct Pokenav1Struct*)
-{
- switch (GetPokenavMode())
- {
- default:
- case POKENAV_MODE_NORMAL:
- return sub_81C943C;
- case POKENAV_MODE_FORCE_CALL_READY:
- return sub_81C9520;
- case POKENAV_MODE_FORCE_CALL_EXIT:
- return sub_81C9588;
- }
-}
-
-u32 sub_81C941C(void)
-{
- struct Pokenav1Struct *state = GetSubstructPtr(1);
- return state->callback(state);
-}
-
-void sub_81C9430(void)
-{
- FreePokenavSubstruct(1);
-}
-
-static u32 sub_81C943C(struct Pokenav1Struct *a0)
-{
- if (sub_81C9814(a0))
- return 1;
-
- if (gMain.newKeys & A_BUTTON)
- {
- switch (sDescriptionIds[a0->menuType][a0->cursorPos])
- {
- case 0:
- a0->helpBarIndex = gSaveBlock2Ptr->regionMapZoom ? HELPBAR_MAP_ZOOMED_IN : HELPBAR_MAP_ZOOMED_OUT;
- sub_81C97B0(a0, POKENAV_MENU_6);
- return 8;
- case 1:
- a0->menuType = 3;
- a0->cursorPos = 0;
- a0->descriptionId = sDescriptionIds[3][0];
- a0->callback = sub_81C963C;
- return 2;
- case 2:
- a0->helpBarIndex = HELPBAR_MC_TRAINER_LIST;
- sub_81C97B0(a0, POKENAV_MENU_B);
- return 8;
- case 3:
- if (CanViewRibbonsMenu())
- {
- a0->helpBarIndex = HELPBAR_RIBBONS_MON_LIST;
- sub_81C97B0(a0, POKENAV_MENU_C);
- return 8;
- }
- else
- {
- a0->callback = sub_81C9600;
- return 6;
- }
- case 4:
- return -1;
- }
- }
-
- if (gMain.newKeys & B_BUTTON)
- return -1;
-
- return 0;
-}
-
-static u32 sub_81C9520(struct Pokenav1Struct *a0)
-{
- if (sub_81C9814(a0))
- return 1;
-
- if (gMain.newKeys & A_BUTTON)
- {
- if (sDescriptionIds[a0->menuType][a0->cursorPos] == 2)
- {
- a0->helpBarIndex = HELPBAR_MC_TRAINER_LIST;
- sub_81C97B0(a0, POKENAV_MENU_B);
- return 8;
- }
- else
- {
- PlaySE(SE_HAZURE);
- return 0;
- }
- }
-
- if (gMain.newKeys & B_BUTTON)
- {
- PlaySE(SE_HAZURE);
- return 0;
- }
-
- return 0;
-}
-
-static u32 sub_81C9588(struct Pokenav1Struct *a0)
-{
- if (sub_81C9814(a0))
- return 1;
-
- if (gMain.newKeys & A_BUTTON)
- {
- u32 v0 = sDescriptionIds[a0->menuType][a0->cursorPos];
- if (v0 != 2 && v0 != 4)
- {
- PlaySE(SE_HAZURE);
- return 0;
- }
- else if (v0 == 2)
- {
- a0->helpBarIndex = HELPBAR_MC_TRAINER_LIST;
- sub_81C97B0(a0, POKENAV_MENU_B);
- return 8;
- }
- else
- {
- return -1;
- }
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- return -1;
- }
- return 0;
-}
-
-static u32 sub_81C9600(struct Pokenav1Struct *a0)
-{
- if (sub_81C9814(a0))
- {
- a0->callback = sub_81C93EC();
- return 1;
- }
-
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
- {
- a0->callback = sub_81C93EC();
- return 7;
- }
-
- return 0;
-}
-
-static u32 sub_81C963C(struct Pokenav1Struct *a0)
-{
- u32 v0 = sub_81C9814(a0);
- if (v0)
- return 1;
-
- if (gMain.newKeys & A_BUTTON)
- {
- switch (sDescriptionIds[a0->menuType][a0->cursorPos])
- {
- case 6:
- a0->menuType = 4;
- a0->cursorPos = v0;
- a0->descriptionId = sDescriptionIds[4][0];
- a0->callback = sub_81C96FC;
- return 4;
- case 5:
- a0->helpBarIndex = v0;
- sub_81C97B0(a0, POKENAV_MENU_7);
- return 8;
- case 7:
- PlaySE(SE_SELECT);
- sub_81C97C0(a0);
- return 3;
- }
- }
- if (gMain.newKeys & B_BUTTON)
- {
- if (a0->cursorPos != sLastCursorPositions[a0->menuType])
- {
- a0->cursorPos = sLastCursorPositions[a0->menuType];
- a0->callback = sub_81C9798;
- return 1;
- }
- else
- {
- PlaySE(SE_SELECT);
- sub_81C97C0(a0);
- return 3;
- }
- }
-
- return 0;
-}
-
-static u32 sub_81C96FC(struct Pokenav1Struct *a0)
-{
- if (sub_81C9814(a0))
- return 1;
-
- if (gMain.newKeys & A_BUTTON)
- {
- u8 v0 = sDescriptionIds[a0->menuType][a0->cursorPos];
- if (v0 != 13)
- {
- sub_81C7694(v0 - 8);
- sub_81C97B0(a0, POKENAV_MENU_8);
- a0->helpBarIndex = HELPBAR_CONDITION_MON_LIST;
- return 8;
- }
- else
- {
- PlaySE(SE_SELECT);
- sub_81C97F8(a0);
- return 5;
- }
- }
- if (gMain.newKeys & B_BUTTON)
- {
- if (a0->cursorPos != sLastCursorPositions[a0->menuType])
- {
- a0->cursorPos = sLastCursorPositions[a0->menuType];
- a0->callback = sub_81C97A4;
- return 1;
- }
- else
- {
- PlaySE(SE_SELECT);
- sub_81C97F8(a0);
- return 5;
- }
- }
- return 0;
-}
-
-static u32 sub_81C9798(struct Pokenav1Struct *a0)
-{
- sub_81C97C0(a0);
- return 3;
-}
-
-static u32 sub_81C97A4(struct Pokenav1Struct *a0)
-{
- sub_81C97F8(a0);
- return 5;
-}
-
-static void sub_81C97B0(struct Pokenav1Struct *a0, u32 a1)
-{
- a0->unk8 = a1;
- a0->callback = sub_81C97BC;
-}
-
-static u32 sub_81C97BC(struct Pokenav1Struct *a0)
-{
- return a0->unk8;
-}
-
-static void sub_81C97C0(struct Pokenav1Struct *a0)
-{
- a0->menuType = GetPokenavMainMenuType();
- a0->cursorPos = 1;
- a0->descriptionId = sDescriptionIds[a0->menuType][a0->cursorPos];
- a0->callback = sub_81C943C;
-}
-
-static void sub_81C97F8(struct Pokenav1Struct *a0)
-{
- a0->menuType = 3;
- a0->cursorPos = 1;
- a0->descriptionId = sDescriptionIds[3][1];
- a0->callback = sub_81C963C;
-}
-
-static bool32 sub_81C9814(struct Pokenav1Struct *a0)
-{
- if (gMain.newKeys & DPAD_UP)
- {
- if (--a0->cursorPos < 0)
- a0->cursorPos = sLastCursorPositions[a0->menuType];
-
- a0->descriptionId = sDescriptionIds[a0->menuType][a0->cursorPos];
- return TRUE;
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- a0->cursorPos++;
- if (a0->cursorPos > sLastCursorPositions[a0->menuType])
- a0->cursorPos = 0;
-
- a0->descriptionId = sDescriptionIds[a0->menuType][a0->cursorPos];
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-}
-
-int sub_81C9894(void)
-{
- struct Pokenav1Struct *state = GetSubstructPtr(1);
- return state->menuType;
-}
-
-int sub_81C98A4(void)
-{
- struct Pokenav1Struct *state = GetSubstructPtr(1);
- return state->cursorPos;
-}
-
-int sub_81C98B4(void)
-{
- struct Pokenav1Struct *state = GetSubstructPtr(1);
- return state->descriptionId;
-}
-
-u16 GetHelpBarTextId(void)
-{
- struct Pokenav1Struct *state = GetSubstructPtr(1);
- return state->helpBarIndex;
-}
diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c
index efad640e3..07e96f3bd 100644
--- a/src/reset_rtc_screen.c
+++ b/src/reset_rtc_screen.c
@@ -475,7 +475,7 @@ static void sub_809F048(void)
ShowBg(0);
InitWindows(sUnknown_08510408);
DeactivateAllTextPrinters();
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
}
static void CB2_ResetRtcScreen(void)
diff --git a/src/rotating_tile_puzzle.c b/src/rotating_tile_puzzle.c
index 408aa7fef..fd26361dd 100644
--- a/src/rotating_tile_puzzle.c
+++ b/src/rotating_tile_puzzle.c
@@ -8,15 +8,6 @@
#include "constants/event_objects.h"
#include "constants/metatile_labels.h"
-extern const u8 RotatingTilePuzzle_Movement_ShiftRight[];
-extern const u8 RotatingTilePuzzle_Movement_ShiftDown[];
-extern const u8 RotatingTilePuzzle_Movement_ShiftLeft[];
-extern const u8 RotatingTilePuzzle_Movement_ShiftUp[];
-extern const u8 RotatingTilePuzzle_Movement_FaceRight[];
-extern const u8 RotatingTilePuzzle_Movement_FaceDown[];
-extern const u8 RotatingTilePuzzle_Movement_FaceLeft[];
-extern const u8 RotatingTilePuzzle_Movement_FaceUp[];
-
#define ROTATE_COUNTERCLOCKWISE 0
#define ROTATE_CLOCKWISE 1
#define ROTATE_NONE 2
@@ -34,6 +25,62 @@ struct RotatingTilePuzzle
bool8 isTrickHouse;
};
+static const u8 sMovement_ShiftRight[] =
+{
+ MOVEMENT_ACTION_STORE_AND_LOCK_ANIM,
+ MOVEMENT_ACTION_WALK_NORMAL_RIGHT,
+ MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM,
+ MOVEMENT_ACTION_STEP_END
+};
+
+static const u8 sMovement_ShiftDown[] =
+{
+ MOVEMENT_ACTION_STORE_AND_LOCK_ANIM,
+ MOVEMENT_ACTION_WALK_NORMAL_DOWN,
+ MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM,
+ MOVEMENT_ACTION_STEP_END
+};
+
+static const u8 sMovement_ShiftLeft[] =
+{
+ MOVEMENT_ACTION_STORE_AND_LOCK_ANIM,
+ MOVEMENT_ACTION_WALK_NORMAL_LEFT,
+ MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM,
+ MOVEMENT_ACTION_STEP_END
+};
+
+static const u8 sMovement_ShiftUp[] =
+{
+ MOVEMENT_ACTION_STORE_AND_LOCK_ANIM,
+ MOVEMENT_ACTION_WALK_NORMAL_UP,
+ MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM,
+ MOVEMENT_ACTION_STEP_END
+};
+
+static const u8 sMovement_FaceRight[] =
+{
+ MOVEMENT_ACTION_FACE_RIGHT,
+ MOVEMENT_ACTION_STEP_END
+};
+
+static const u8 sMovement_FaceDown[] =
+{
+ MOVEMENT_ACTION_FACE_DOWN,
+ MOVEMENT_ACTION_STEP_END
+};
+
+static const u8 sMovement_FaceLeft[] =
+{
+ MOVEMENT_ACTION_FACE_LEFT,
+ MOVEMENT_ACTION_STEP_END
+};
+
+static const u8 sMovement_FaceUp[] =
+{
+ MOVEMENT_ACTION_FACE_UP,
+ MOVEMENT_ACTION_STEP_END
+};
+
// This file's functions.
static void SaveRotatingTileObject(u8 eventTemplateId, u8 arg1);
static void TurnUnsavedRotatingTileObject(u8 eventTemplateId, u8 arg1);
@@ -106,19 +153,19 @@ u16 MoveRotatingTileObjects(u8 puzzleNumber)
switch (puzzleTileNum)
{
case 0: // Right Arrow
- movementScript = RotatingTilePuzzle_Movement_ShiftRight;
+ movementScript = sMovement_ShiftRight;
x = 1;
break;
case 1: // Down Arrow
- movementScript = RotatingTilePuzzle_Movement_ShiftDown;
+ movementScript = sMovement_ShiftDown;
y = 1;
break;
case 2: // Left Arrow
- movementScript = RotatingTilePuzzle_Movement_ShiftLeft;
+ movementScript = sMovement_ShiftLeft;
x = -1;
break;
case 3: // Up Arrow
- movementScript = RotatingTilePuzzle_Movement_ShiftUp;
+ movementScript = sMovement_ShiftUp;
y = -1;
break;
default:
@@ -204,19 +251,19 @@ void TurnRotatingTileObjects(void)
switch (direction)
{
case DIR_EAST:
- movementScript = RotatingTilePuzzle_Movement_FaceUp;
+ movementScript = sMovement_FaceUp;
objectEvents[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP;
break;
case DIR_SOUTH:
- movementScript = RotatingTilePuzzle_Movement_FaceRight;
+ movementScript = sMovement_FaceRight;
objectEvents[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT;
break;
case DIR_WEST:
- movementScript = RotatingTilePuzzle_Movement_FaceDown;
+ movementScript = sMovement_FaceDown;
objectEvents[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN;
break;
case DIR_NORTH:
- movementScript = RotatingTilePuzzle_Movement_FaceLeft;
+ movementScript = sMovement_FaceLeft;
objectEvents[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT;
break;
default:
@@ -233,19 +280,19 @@ void TurnRotatingTileObjects(void)
switch (direction)
{
case DIR_EAST:
- movementScript = RotatingTilePuzzle_Movement_FaceDown;
+ movementScript = sMovement_FaceDown;
objectEvents[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN;
break;
case DIR_SOUTH:
- movementScript = RotatingTilePuzzle_Movement_FaceLeft;
+ movementScript = sMovement_FaceLeft;
objectEvents[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT;
break;
case DIR_WEST:
- movementScript = RotatingTilePuzzle_Movement_FaceUp;
+ movementScript = sMovement_FaceUp;
objectEvents[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP;
break;
case DIR_NORTH:
- movementScript = RotatingTilePuzzle_Movement_FaceRight;
+ movementScript = sMovement_FaceRight;
objectEvents[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT;
break;
default:
diff --git a/src/scrcmd.c b/src/scrcmd.c
index b5e3ac52c..ad01791a9 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -1304,7 +1304,7 @@ bool8 ScrCmd_cmdDB(struct ScriptContext *ctx)
if (msg == NULL)
msg = (const u8 *)ctx->data[0];
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
DrawDialogueFrame(0, 1);
AddTextPrinterParameterized(0, 1, msg, 0, 1, 0, 0);
return FALSE;
diff --git a/src/slot_machine.c b/src/slot_machine.c
index db1291ceb..8f117431a 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -319,6 +319,35 @@ static void sub_812F958(void);
static void sub_812F968(void);
static void LoadSlotMachineWheelOverlay(void);
static u8 sub_8105BB4(u8 templateIdx, u8 cbAndCoordsIdx, s16 a2);
+static void sub_8105C64(struct Sprite *sprite);
+static void sub_8105F54(struct Sprite *sprite);
+static void sub_8105F9C(struct Sprite *sprite);
+static void sub_8105EB4(struct Sprite *sprite);
+static void sub_8105C6C(struct Sprite *sprite);
+static void sub_8105CF0(struct Sprite *sprite);
+static void sub_8105D08(struct Sprite *sprite);
+static void sub_8105D20(struct Sprite *sprite);
+static void sub_8105D3C(struct Sprite *sprite);
+static void sub_8105DA4(struct Sprite *sprite);
+static void sub_8105E08(struct Sprite *sprite);
+static void sub_8106058(struct Sprite *sprite);
+static void sub_81060FC(struct Sprite *sprite);
+static void sub_81061C8(struct Sprite *sprite);
+static void sub_8106230(struct Sprite *sprite);
+static void sub_810639C(void);
+static void sub_8106364(void);
+static void sub_8106370(void);
+static void nullsub_70(void);
+static void sub_8104F18(struct Sprite *sprite);
+static void sub_810506C(struct Sprite *sprite);
+static void sub_8105170(struct Sprite *sprite);
+static void sub_810535C(struct Sprite *sprite);
+static void sub_810562C(struct Sprite *sprite);
+static void sub_8105784(struct Sprite *sprite);
+static void sub_8105894(struct Sprite *sprite);
+static void sub_810594C(struct Sprite *sprite);
+static void sub_8105A38(struct Sprite *sprite);
+static void sub_8105B70(struct Sprite *sprite);
// Ewram variables
static EWRAM_DATA u16 *sUnknown_0203AAC8 = NULL;
@@ -354,56 +383,73 @@ static EWRAM_DATA struct SlotMachineEwramStruct *sSlotMachine = NULL;
static struct SpriteFrameImage *gUnknown_03001188[26];
// Const rom data.
-extern const struct UnkStruct1 *const gUnknown_083ED048[];
-extern const u16 gPalette_83EDE24[];
-extern const u8 gLuckyRoundProbabilities[][3];
-extern const u8 gBiasTags[];
-extern const u16 gLuckyFlagSettings_Top3[];
-extern const u16 gLuckyFlagSettings_NotTop3[];
-extern const s16 gUnknown_083ECE7E[][2];
-extern const SpriteCallback gUnknown_083ECF0C[];
-extern const struct SpriteTemplate *const gUnknown_083EDB5C[];
-extern const struct SubspriteTable *const gUnknown_083EDBC4[];
-extern const struct SpriteTemplate gSpriteTemplate_83ED6CC;
-extern const struct SpriteTemplate gSpriteTemplate_83ED564;
-extern const struct SpriteTemplate gSpriteTemplate_83ED54C;
-extern const struct SpriteTemplate gSpriteTemplate_83ED534;
-extern const u8 gUnknown_083ECC58[2];
-extern const struct SpriteTemplate gSpriteTemplate_83ED51C;
-extern const u16 gProbabilityTable_SkipToReeltimeAction14[];
-extern const u16 *const gUnknown_083EDE10[];
-extern const u16 gReelIncrementTable[][2];
-extern const u16 gReelTimeBonusIncrementTable[];
-extern const u16 gSlotMatchFlags[];
-extern const u16 gSlotPayouts[];
-extern const u8 *const gUnknown_083EDCE4;
-extern const u8 *const gUnknown_083EDCDC;
-extern const u32 gReelTimeGfx[];
-extern const struct SpriteSheet gSlotMachineSpriteSheets[];
-extern const struct SpritePalette gSlotMachineSpritePalettes[];
-extern const u16 *const gUnknown_083EDE20;
-extern const s16 gInitialReelPositions[][2];
-extern const struct BgTemplate gUnknown_085A7424[4];
-extern const struct WindowTemplate gUnknown_085A7434[];
-extern const u8 gLuckyFlagProbabilities_Top3[][6];
-extern const u8 gLuckyFlagProbabilities_NotTop3[][6];
-extern const u8 gReeltimeProbabilities_UnluckyGame[][17];
-extern const u8 gReelTimeProbabilities_LuckyGame[][17];
-extern const u8 gSym2Match[];
-extern const u8 gReelTimeTags[];
-extern const u8 gReelSymbols[][REEL_NUM_TAGS];
-extern const u16 *const gUnknown_083EDD08[];
-extern const u16 *const gUnknown_083EDD1C[];
-extern const u8 gUnknown_083EDD30[];
-extern const u8 gBettingTilesId[][2];
-extern const u8 gNumberBettingTiles[];
-extern const u16 *const gUnknown_083EDDA0[];
-extern const u16 *const gUnknown_083EDDAC;
-extern const u16 gReelTimeWindowTilemap[];
-extern const u16 gUnknown_085A9898[];
-extern void (*const gUnknown_083ED064[])(void);
-
-const struct BgTemplate gUnknown_085A7424[] =
+static const struct UnkStruct1 *const gUnknown_083ED048[];
+static const u16 gPalette_83EDE24[];
+static const u8 gLuckyRoundProbabilities[][3];
+static const u8 gBiasTags[];
+static const u16 gLuckyFlagSettings_Top3[];
+static const u16 gLuckyFlagSettings_NotTop3[];
+static const s16 gUnknown_083ECE7E[][2];
+static const SpriteCallback gUnknown_083ECF0C[];
+static const struct SpriteTemplate *const gUnknown_083EDB5C[];
+static const struct SubspriteTable *const gUnknown_083EDBC4[];
+static const struct SpriteTemplate gSpriteTemplate_83ED6CC;
+static const struct SpriteTemplate gSpriteTemplate_83ED564;
+static const struct SpriteTemplate gSpriteTemplate_83ED54C;
+static const struct SpriteTemplate gSpriteTemplate_83ED534;
+static const u8 gUnknown_083ECC58[2];
+static const struct SpriteTemplate gSpriteTemplate_83ED51C;
+static const u16 gProbabilityTable_SkipToReeltimeAction14[];
+static const u16 *const gUnknown_083EDE10[];
+static const u16 gReelIncrementTable[][2];
+static const u16 gReelTimeBonusIncrementTable[];
+static const u16 gSlotMatchFlags[];
+static const u16 gSlotPayouts[];
+static const u8 *const gUnknown_083EDCE4;
+static const u8 *const gUnknown_083EDCDC;
+static const u32 gReelTimeGfx[];
+static const struct SpriteSheet gSlotMachineSpriteSheets[];
+static const struct SpritePalette gSlotMachineSpritePalettes[];
+static const u16 *const gUnknown_083EDE20;
+static const s16 gInitialReelPositions[][2];
+static const struct BgTemplate gUnknown_085A7424[4];
+static const struct WindowTemplate gUnknown_085A7434[];
+static const u8 gLuckyFlagProbabilities_Top3[][6];
+static const u8 gLuckyFlagProbabilities_NotTop3[][6];
+static const u8 gReeltimeProbabilities_UnluckyGame[][17];
+static const u8 gReelTimeProbabilities_LuckyGame[][17];
+static const u8 gSym2Match[];
+static const u8 gReelTimeTags[];
+static const u8 gReelSymbols[][REEL_NUM_TAGS];
+static const u8 *const gUnknown_083EDD08[];
+static const u16 *const gUnknown_083EDD1C[];
+static const u8 gUnknown_083EDD30[];
+static const u8 gBettingTilesId[][2];
+static const u8 gNumberBettingTiles[];
+static const u16 *const gUnknown_083EDDA0[];
+static const u16 *const gUnknown_083EDDAC;
+static const u16 gReelTimeWindowTilemap[];
+static const u16 gUnknown_085A9898[];
+static void (*const gUnknown_083ED064[])(void);
+static const struct SpriteTemplate gSpriteTemplate_83ED504;
+static const struct SpriteTemplate gSpriteTemplate_83ED4EC;
+static const struct SpriteTemplate gSpriteTemplate_83ED4D4;
+static const struct SpriteTemplate gSpriteTemplate_83ED4BC;
+static const struct SpriteTemplate gSpriteTemplate_83ED4A4;
+static const struct SpriteTemplate gSpriteTemplate_83ED474;
+static const struct SpriteTemplate gSpriteTemplate_83ED48C;
+static const struct SpriteTemplate gSpriteTemplate_83ED444;
+static const struct SpriteTemplate gSpriteTemplate_83ED42C;
+static const struct SpriteTemplate gSpriteTemplate_83ED414;
+static const struct SpriteTemplate gSpriteTemplate_83ED45C;
+static const struct SubspriteTable gSubspriteTables_83ED7D4[];
+static const struct SubspriteTable gSubspriteTables_83ED7B4[];
+static const struct SubspriteTable gSubspriteTables_83ED78C[];
+static const struct SubspriteTable gSubspriteTables_83ED73C[];
+static const struct SubspriteTable gSubspriteTables_83ED75C[];
+static const struct SubspriteTable gSubspriteTables_83ED704[];
+
+static const struct BgTemplate gUnknown_085A7424[] =
{
{
.bg = 0,
@@ -443,13 +489,13 @@ const struct BgTemplate gUnknown_085A7424[] =
},
};
-const struct WindowTemplate gUnknown_085A7434[] =
+static const struct WindowTemplate gUnknown_085A7434[] =
{
{0, 2, 15, 0x1B, 4, 15, 0x194},
DUMMY_WIN_TEMPLATE
};
-const struct WindowTemplate gUnknown_085A7444 =
+static const struct WindowTemplate gUnknown_085A7444 =
{
0, 1, 3, 20, 13, 13, 1
};
@@ -633,23 +679,8 @@ void (*const gUnknown_083ECC54[])(struct Task *task) =
nullsub_69,
};
-extern const struct SpriteTemplate gSpriteTemplate_83ED504;
-extern const struct SpriteTemplate gSpriteTemplate_83ED4EC;
-extern const struct SubspriteTable gSubspriteTables_83ED7D4[];
-extern const struct SpriteTemplate gSpriteTemplate_83ED4D4;
-extern const struct SubspriteTable gSubspriteTables_83ED7B4[];
-extern const struct SpriteTemplate gSpriteTemplate_83ED4BC;
-extern const struct SpriteTemplate gSpriteTemplate_83ED4A4;
-extern const struct SubspriteTable gSubspriteTables_83ED78C[];
-extern const struct SpriteTemplate gSpriteTemplate_83ED474;
-extern const struct SpriteTemplate gSpriteTemplate_83ED48C;
-extern const struct SubspriteTable gSubspriteTables_83ED73C[];
-extern const struct SubspriteTable gSubspriteTables_83ED75C[];
-extern const struct SpriteTemplate gSpriteTemplate_83ED444;
-extern const struct SubspriteTable gSubspriteTables_83ED704[];
-extern const struct SpriteTemplate gSpriteTemplate_83ED42C;
-extern const struct SpriteTemplate gSpriteTemplate_83ED414;
-extern const struct SpriteTemplate gSpriteTemplate_83ED45C;
+
+
// code
#define tState data[0]
@@ -3278,7 +3309,7 @@ static void sub_8104EA8(void)
}
}
-/*static */void sub_8104F18(struct Sprite *sprite)
+static void sub_8104F18(struct Sprite *sprite)
{
sprite->data[2] = sSlotMachine->reelPixelOffsets[sprite->data[0]] + sprite->data[1];
sprite->data[2] %= 120;
@@ -3308,7 +3339,7 @@ static void sub_8104FF4(s16 x, s16 y, u8 a2, s16 a3)
sprite->data[3] = -1;
}
-/*static */void sub_810506C(struct Sprite *sprite)
+static void sub_810506C(struct Sprite *sprite)
{
u16 tag = sSlotMachine->coins;
if (sprite->data[0])
@@ -3364,7 +3395,7 @@ static void sub_810514C(void)
FREE_AND_SET_NULL(sUnknown_0203AAE4);
}
-/*static */void sub_8105170(struct Sprite *sprite)
+static void sub_8105170(struct Sprite *sprite)
{
sprite->pos2.y = sprite->pos2.x = 0;
if (sprite->animNum == 4)
@@ -3446,7 +3477,7 @@ static void sub_81052EC(void)
}
}
-/*static */void sub_810535C(struct Sprite *sprite)
+static void sub_810535C(struct Sprite *sprite)
{
s16 r0 = (u16)(sSlotMachine->reeltimePixelOffset + sprite->data[7]);
r0 %= 40;
@@ -3535,7 +3566,7 @@ static void CreateReelTimeSprites1(void)
sprite->data[7] = 0x20;
}
-/*static */void sub_810562C(struct Sprite *sprite)
+static void sub_810562C(struct Sprite *sprite)
{
if (sprite->data[0] != 0)
{
@@ -3587,7 +3618,7 @@ static void CreateReelTimeSprite2(void)
sSlotMachine->reelTimeSprites2[1] = spriteId;
}
-/*static */void sub_8105784(struct Sprite *sprite)
+static void sub_8105784(struct Sprite *sprite)
{
u8 sp[] = {16, 0};
if (sprite->data[0] && --sprite->data[6] <= 0)
@@ -3619,7 +3650,7 @@ static void sub_8105854(void)
sSlotMachine->unk41 = spriteId;
}
-/*static */void sub_8105894(struct Sprite *sprite)
+static void sub_8105894(struct Sprite *sprite)
{
sprite->pos2.y = gSpriteCoordOffsetY;
}
@@ -3644,7 +3675,7 @@ static void sub_81058C4(void)
}
}
-/*static */void sub_810594C(struct Sprite *sprite)
+static void sub_810594C(struct Sprite *sprite)
{
sprite->data[0] -= 2;
sprite->data[0] &= 0xff;
@@ -3681,7 +3712,7 @@ static void sub_81059E8(void)
sSlotMachine->unk43 = spriteId;
}
-/*static */void sub_8105A38(struct Sprite *sprite)
+static void sub_8105A38(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -3730,7 +3761,7 @@ static u8 sub_8105B1C(s16 x, s16 y)
return spriteId;
}
-/*static */void sub_8105B70(struct Sprite *sprite)
+static void sub_8105B70(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
sprite->data[7] = 1;
@@ -4189,11 +4220,6 @@ static void sub_8106404(void)
LoadSpriteSheet(sUnknown_0203AB2C);
}
-extern const u32 gSlotMachineMenu_Gfx[];
-extern const u16 gSlotMachineMenu_Tilemap[];
-extern const u16 gUnknown_08DCEC70[];
-extern const u16 gSlotMachineMenu_Pal[];
-
static void sub_8106448(void)
{
sUnknown_0203AAC8 = Alloc(0x2200);
@@ -4358,7 +4384,7 @@ static void SlotMachineSetup_8_0(void)
sUnknown_0203AB28[1].size = 0x180;
}
-const u8 gReelSymbols[][REEL_NUM_TAGS] =
+static const u8 gReelSymbols[][REEL_NUM_TAGS] =
{
{
SLOT_MACHINE_TAG_7_RED,
@@ -4431,17 +4457,17 @@ const u8 gReelSymbols[][REEL_NUM_TAGS] =
},
};
-const u8 gReelTimeTags[] = {
+static const u8 gReelTimeTags[] = {
1, 0, 5, 4, 3, 2
};
-const s16 gInitialReelPositions[][2] = {
+static const s16 gInitialReelPositions[][2] = {
{0, 6},
{0, 10},
{0, 2}
};
-const u8 gLuckyRoundProbabilities[][3] = {
+static const u8 gLuckyRoundProbabilities[][3] = {
{1, 1, 12},
{1, 1, 14},
{2, 2, 14},
@@ -4450,13 +4476,13 @@ const u8 gLuckyRoundProbabilities[][3] = {
{3, 3, 16}
};
-const u8 gLuckyFlagProbabilities_Top3[][6] = {
+static const u8 gLuckyFlagProbabilities_Top3[][6] = {
{25, 25, 30, 40, 40, 50},
{25, 25, 30, 30, 35, 35},
{25, 25, 30, 25, 25, 30}
};
-const u8 gLuckyFlagProbabilities_NotTop3[][6] = {
+static const u8 gLuckyFlagProbabilities_NotTop3[][6] = {
{20, 25, 25, 20, 25, 25},
{12, 15, 15, 18, 19, 22},
{25, 25, 25, 30, 30, 40},
@@ -4464,7 +4490,7 @@ const u8 gLuckyFlagProbabilities_NotTop3[][6] = {
{40, 40, 35, 35, 40, 40}
};
-const u8 gReeltimeProbabilities_UnluckyGame[][17] = {
+static const u8 gReeltimeProbabilities_UnluckyGame[][17] = {
{243, 243, 243, 80, 80, 80, 80, 40, 40, 40, 40, 40, 40, 5, 5, 5, 5},
{ 5, 5, 5, 150, 150, 150, 150, 130, 130, 130, 130, 130, 130, 100, 100, 100, 5},
{ 4, 4, 4, 20, 20, 20, 20, 80, 80, 80, 80, 80, 80, 100, 100, 100, 40},
@@ -4473,7 +4499,7 @@ const u8 gReeltimeProbabilities_UnluckyGame[][17] = {
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6}
};
-const u8 gReelTimeProbabilities_LuckyGame[][17] = {
+static const u8 gReelTimeProbabilities_LuckyGame[][17] = {
{ 243, 243, 243, 200, 200, 200, 200, 160, 160, 160, 160, 160, 160, 70, 70, 70, 5},
{ 5, 5, 5, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 2, 2, 2, 6},
{ 4, 4, 4, 25, 25, 25, 25, 30, 30, 30, 30, 30, 30, 40, 40, 40, 35},
@@ -4482,11 +4508,11 @@ const u8 gReelTimeProbabilities_LuckyGame[][17] = {
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 60}
};
-const u16 gProbabilityTable_SkipToReeltimeAction14[] = {
+static const u16 gProbabilityTable_SkipToReeltimeAction14[] = {
128, 175, 200, 225, 256
};
-const u16 gReelIncrementTable[][2] = {
+static const u16 gReelIncrementTable[][2] = {
{10, 5},
{10, 10},
{10, 15},
@@ -4494,24 +4520,24 @@ const u16 gReelIncrementTable[][2] = {
{10, 35}
};
-const u16 gReelTimeBonusIncrementTable[] = {
+static const u16 gReelTimeBonusIncrementTable[] = {
0, 5, 10, 15, 20
};
// tentative name
-const u8 gBiasTags[] = {
+static const u8 gBiasTags[] = {
SLOT_MACHINE_TAG_REPLAY, SLOT_MACHINE_TAG_CHERRY, SLOT_MACHINE_TAG_LOTAD, SLOT_MACHINE_TAG_AZURILL, SLOT_MACHINE_TAG_POWER, SLOT_MACHINE_TAG_7_RED, SLOT_MACHINE_TAG_7_RED, SLOT_MACHINE_TAG_7_RED
};
-const u16 gLuckyFlagSettings_Top3[] = {
+static const u16 gLuckyFlagSettings_Top3[] = {
LUCKY_BIAS_777, LUCKY_BIAS_REELTIME, LUCKY_BIAS_MIXED_777
};
-const u16 gLuckyFlagSettings_NotTop3[] = {
+static const u16 gLuckyFlagSettings_NotTop3[] = {
LUCKY_BIAS_POWER, LUCKY_BIAS_AZURILL, LUCKY_BIAS_LOTAD, LUCKY_BIAS_CHERRY, LUCKY_BIAS_REPLAY
};
-const u8 gSym2Match[] = {
+static const u8 gSym2Match[] = {
SLOT_MACHINE_MATCHED_777_RED,
SLOT_MACHINE_MATCHED_777_BLUE,
SLOT_MACHINE_MATCHED_AZURILL,
@@ -4521,7 +4547,7 @@ const u8 gSym2Match[] = {
SLOT_MACHINE_MATCHED_REPLAY
};
-const u16 gSlotMatchFlags[] = {
+static const u16 gSlotMatchFlags[] = {
1 << SLOT_MACHINE_MATCHED_1CHERRY,
1 << SLOT_MACHINE_MATCHED_2CHERRY,
1 << SLOT_MACHINE_MATCHED_REPLAY,
@@ -4533,11 +4559,11 @@ const u16 gSlotMatchFlags[] = {
1 << SLOT_MACHINE_MATCHED_777_BLUE
};
-const u16 gSlotPayouts[] = {
+static const u16 gSlotPayouts[] = {
2, 4, 0, 6, 12, 3, 90, 300, 300
};
-const s16 gUnknown_083ECE7E[][2] = {
+static const s16 gUnknown_083ECE7E[][2] = {
{ 0xd0, 0x38},
{ 0xb8, 0x00},
{ 0xc8, 0x08},
@@ -4575,7 +4601,7 @@ const s16 gUnknown_083ECE7E[][2] = {
{ 0x00, 0x00}
};
-const SpriteCallback gUnknown_083ECF0C[] = {
+static const SpriteCallback gUnknown_083ECF0C[] = {
sub_8105C64,
sub_8105F54,
sub_8105F54,
@@ -4613,14 +4639,14 @@ const SpriteCallback gUnknown_083ECF0C[] = {
sub_8106230
};
-const struct UnkStruct1 Unknown_83ECF98[] = {
+static const struct UnkStruct1 Unknown_83ECF98[] = {
{25, 34, 0},
{2, 0, 0},
{9, 16, 0},
{255, 0, 0}
};
-const struct UnkStruct1 Unknown_83ECFA8[] = {
+static const struct UnkStruct1 Unknown_83ECFA8[] = {
{10, 1, 0},
{11, 2, 0},
{12, 3, 0},
@@ -4630,13 +4656,13 @@ const struct UnkStruct1 Unknown_83ECFA8[] = {
{255, 0, 0}
};
-const struct UnkStruct1 Unknown_83ECFC4[] = {
+static const struct UnkStruct1 Unknown_83ECFC4[] = {
{3, 7, 0},
{8, 17, 0},
{255, 0, 0}
};
-const struct UnkStruct1 Unknown_83ECFD0[] = {
+static const struct UnkStruct1 Unknown_83ECFD0[] = {
{4, 8, 0},
{6, 9, 0},
{6, 10, 1},
@@ -4645,14 +4671,14 @@ const struct UnkStruct1 Unknown_83ECFD0[] = {
{255, 0, 0}
};
-const struct UnkStruct1 Unknown_83ECFE8[] = {
+static const struct UnkStruct1 Unknown_83ECFE8[] = {
{0, 13, 0},
{1, 14, 0},
{7, 15, 0},
{255, 0, 0}
};
-const struct UnkStruct1 Unknown_83ECFF8[] = {
+static const struct UnkStruct1 Unknown_83ECFF8[] = {
{19, 26, 0},
{20, 27, 1},
{21, 28, 2},
@@ -4665,7 +4691,7 @@ const struct UnkStruct1 Unknown_83ECFF8[] = {
{255, 0, 0}
};
-const struct UnkStruct1 Unknown_83ED020[] = {
+static const struct UnkStruct1 Unknown_83ED020[] = {
{22, 18, 0},
{23, 19, 1},
{24, 20, 2},
@@ -4678,7 +4704,7 @@ const struct UnkStruct1 Unknown_83ED020[] = {
{255, 0, 0}
};
-const struct UnkStruct1 *const gUnknown_083ED048[] = {
+static const struct UnkStruct1 *const gUnknown_083ED048[] = {
Unknown_83ECF98,
Unknown_83ECFA8,
Unknown_83ECFC4,
@@ -4688,7 +4714,7 @@ const struct UnkStruct1 *const gUnknown_083ED048[] = {
Unknown_83ECFF8
};
-void (*const gUnknown_083ED064[])(void) = {
+static void (*const gUnknown_083ED064[])(void) = {
sub_810639C,
sub_8106364,
sub_8106370,
@@ -4697,3 +4723,2128 @@ void (*const gUnknown_083ED064[])(void) = {
sub_8106370,
sub_8106370
};
+
+static const struct OamData gUnknown_085A7A3C =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(8x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x8),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct OamData gUnknown_085A7A44 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(8x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x16),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct OamData gUnknown_085A7A4C =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x16),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct OamData gUnknown_085A7A54 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x32),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct OamData gUnknown_085A7A5C =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(32x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x32),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct OamData gUnknown_085A7A64 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(32x64),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x64),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct OamData gUnknown_085A7A6C =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x32),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct OamData gUnknown_085A7A74 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(64x64),
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct SpriteFrameImage gUnknown_085A7A7C[] =
+{
+ { gSlotMachineReelTimeNumber0, 0x80 },
+ { gSlotMachineReelTimeNumber1, 0x80 },
+ { gSlotMachineReelTimeNumber2, 0x80 },
+ { gSlotMachineReelTimeNumber3, 0x80 },
+ { gSlotMachineReelTimeNumber4, 0x80 },
+ { gSlotMachineReelTimeNumber5, 0x80 },
+};
+
+static const struct SpriteFrameImage gUnknown_085A7AAC[] = { gSlotMachineReelTimeShadow, 0x200 };
+static const struct SpriteFrameImage gUnknown_085A7AB4[] = { gUnknown_08DD1A18, 0x40 };
+
+static const struct SpriteFrameImage gUnknown_085A7ABC[] =
+{
+ { gSlotMachineReelTimeLargeBolt0, 0x100 },
+ { gSlotMachineReelTimeLargeBolt1, 0x100 },
+};
+
+static const struct SpriteFrameImage gUnknown_085A7ACC[] = { gSlotMachineReelTimePikaAura, 0x400 };
+
+static const struct SpriteFrameImage gUnknown_085A7AD4[] =
+{
+ { gSlotMachineReelTimeExplosion0, 0x200 },
+ { gSlotMachineReelTimeExplosion1, 0x200 },
+};
+
+static const struct SpriteFrameImage gUnknown_085A7AE4[] = { gSlotMachineReelTimeDuck, 0x20};
+static const struct SpriteFrameImage gUnknown_085A7AEC[] = { gSlotMachineReelTimeSmoke, 0x80};
+static const struct SpriteFrameImage gUnknown_085A7AF4[] = { gSlotMachineReelTimeBolt, 0x20};
+
+static const union AnimCmd gUnknown_085A7AFC[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7B04[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd gUnknown_085A7B0C[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7B14[] =
+{
+ ANIMCMD_FRAME(1, 16),
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd gUnknown_085A7B20[] =
+{
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd gUnknown_085A7B2C[] =
+{
+ ANIMCMD_FRAME(1, 4),
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd gUnknown_085A7B38[] =
+{
+ ANIMCMD_FRAME(2, 32),
+ ANIMCMD_FRAME(3, 32),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd gUnknown_085A7B44[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7B4C[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7B54[] =
+{
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7B5C[] =
+{
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7B64[] =
+{
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7B6C[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7B74[] =
+{
+ ANIMCMD_FRAME(5, 1),
+ ANIMCMD_END
+};
+
+
+static const union AnimCmd gUnknown_085A7B7C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(1, 4),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd gUnknown_085A7B88[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_FRAME(1, 16),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd gUnknown_085A7B94[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_FRAME(1, 30),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd gUnknown_085A7BA0[] =
+{
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7BA8[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_FRAME(1, 30),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd gUnknown_085A7BB4[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_FRAME(1, 16),
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_FRAME(1, 16, .hFlip = TRUE),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd gUnknown_085A7BC8[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7BD0[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7BD8[] =
+{
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7BE0[] =
+{
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7BE8[] =
+{
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085A7BF0[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gUnknown_085A7BF8[] =
+{
+ gUnknown_085A7AFC
+};
+
+static const union AnimCmd *const gUnknown_085A7BFC[] =
+{
+ gUnknown_085A7B04
+};
+
+static const union AnimCmd *const gUnknown_085A7C00[] =
+{
+ gUnknown_085A7B0C,
+ gUnknown_085A7B14,
+ gUnknown_085A7B20,
+ gUnknown_085A7B2C,
+ gUnknown_085A7B38,
+ gUnknown_085A7B44
+};
+
+static const union AnimCmd *const gUnknown_085A7C18[] =
+{
+ gUnknown_085A7B4C,
+ gUnknown_085A7B54,
+ gUnknown_085A7B5C,
+ gUnknown_085A7B64,
+ gUnknown_085A7B6C,
+ gUnknown_085A7B74
+};
+
+static const union AnimCmd *const gUnknown_085A7C30[] =
+{
+ gUnknown_085A7B7C
+};
+
+static const union AnimCmd *const gUnknown_085A7C34[] =
+{
+ gUnknown_085A7B88
+};
+
+static const union AnimCmd *const gUnknown_085A7C38[] =
+{
+ gUnknown_085A7B94,
+ gUnknown_085A7BA0
+};
+
+static const union AnimCmd *const gUnknown_085A7C40[] =
+{
+ gUnknown_085A7BA8
+};
+
+static const union AnimCmd *const gUnknown_085A7C44[] =
+{
+ gUnknown_085A7BB4,
+ gUnknown_085A7BC8
+};
+
+static const union AnimCmd *const gUnknown_085A7C4C[] =
+{
+ gUnknown_085A7BD0,
+ gUnknown_085A7BD8,
+ gUnknown_085A7BE0,
+ gUnknown_085A7BE8,
+ gUnknown_085A7BF0
+};
+
+
+static const union AffineAnimCmd gUnknown_085A7C60[] =
+{
+ AFFINEANIMCMD_FRAME(16, 16, 0, 0),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(1, 1, 0, 1),
+ AFFINEANIMCMD_LOOP(0xFF),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const gUnknown_085A7C88[] =
+{
+ gUnknown_085A7C60
+};
+
+static const union AffineAnimCmd gUnknown_085A7C8C[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 8, 32),
+ AFFINEANIMCMD_FRAME(0, 0, 6, 32),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 16),
+ AFFINEANIMCMD_FRAME(0, 0, 12, 2),
+ AFFINEANIMCMD_FRAME(0, 0, -12, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 12, 2),
+ AFFINEANIMCMD_FRAME(0, 0, 12, 2),
+ AFFINEANIMCMD_FRAME(0, 0, -12, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 12, 2),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const gUnknown_085A7CDC[] =
+{
+ gUnknown_085A7C8C
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED414 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gUnknown_085A7A5C,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8104F18
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED42C =
+{
+ .tileTag = 7,
+ .paletteTag = 4,
+ .oam = &gUnknown_085A7A44,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810506C
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED444 =
+{
+ .tileTag = 17,
+ .paletteTag = 0,
+ .oam = &gUnknown_085A7A74,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED45C =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 1,
+ .oam = &gUnknown_085A7A74,
+ .anims = gUnknown_085A7C00,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8105170
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED474 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 2,
+ .oam = &gUnknown_085A7A44,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED48C =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 3,
+ .oam = &gUnknown_085A7A44,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED4A4 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 3,
+ .oam = &gUnknown_085A7A44,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED4BC =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4,
+ .oam = &gUnknown_085A7A4C,
+ .anims = gUnknown_085A7C18,
+ .images = gUnknown_085A7A7C,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810535C
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED4D4 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4,
+ .oam = &gUnknown_085A7A4C,
+ .anims = gUnknown_085A7BF8,
+ .images = gUnknown_085A7AAC,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED4EC =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4,
+ .oam = &gUnknown_085A7A4C,
+ .anims = gUnknown_085A7BF8,
+ .images = gUnknown_085A7AB4,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED504 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4,
+ .oam = &gUnknown_085A7A54,
+ .anims = gUnknown_085A7C30,
+ .images = gUnknown_085A7ABC,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810562C
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED51C =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 7,
+ .oam = &gUnknown_085A7A64,
+ .anims = gUnknown_085A7BF8,
+ .images = gUnknown_085A7ACC,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8105784
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED534 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 5,
+ .oam = &gUnknown_085A7A5C,
+ .anims = gUnknown_085A7C34,
+ .images = gUnknown_085A7AD4,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8105894
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED54C =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4,
+ .oam = &gUnknown_085A7A3C,
+ .anims = gUnknown_085A7BFC,
+ .images = gUnknown_085A7AE4,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810594C
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED564 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4,
+ .oam = &gUnknown_085A7A4C,
+ .anims = gUnknown_085A7BF8,
+ .images = gUnknown_085A7AEC,
+ .affineAnims = gUnknown_085A7C88,
+ .callback = sub_8105A38
+};
+
+static const struct SpriteTemplate gUnknown_085A7E48 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A3C,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gUnknown_085A7E60 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A3C,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gUnknown_085A7E78 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A3C,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gUnknown_085A7E90 =
+{
+ .tileTag = 18,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A3C,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gUnknown_085A7EA8 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A6C,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gUnknown_085A7EC0 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A6C,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gUnknown_085A7ED8 =
+{
+ .tileTag = 19,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A3C,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gUnknown_085A7EF0 =
+{
+ .tileTag = 20,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A3C,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gUnknown_085A7F08 =
+{
+ .tileTag = 21,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A3C,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gUnknown_085A7F20 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A5C,
+ .anims = gUnknown_085A7C38,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gUnknown_085A7F38 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A3C,
+ .anims = gUnknown_085A7BF8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gUnknown_085A7F50 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A4C,
+ .anims = gUnknown_085A7C4C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gUnknown_085A7F68 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A3C,
+ .anims = gUnknown_085A7C44,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gUnknown_085A7F80 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 6,
+ .oam = &gUnknown_085A7A3C,
+ .anims = gUnknown_085A7C40,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate gSpriteTemplate_83ED6CC =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4,
+ .oam = &gUnknown_085A7A3C,
+ .anims = gUnknown_085A7BF8,
+ .images = gUnknown_085A7AF4,
+ .affineAnims = gUnknown_085A7CDC,
+ .callback = sub_8105B70
+};
+
+static const struct Subsprite gUnknown_085A7FB0[] =
+{
+ {
+ .x = -64,
+ .y = -64,
+ .shape = SPRITE_SHAPE(64x64),
+ .size = SPRITE_SIZE(64x64),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = -64,
+ .shape = SPRITE_SHAPE(64x64),
+ .size = SPRITE_SIZE(64x64),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = -64,
+ .y = 0,
+ .shape = SPRITE_SHAPE(64x64),
+ .size = SPRITE_SIZE(64x64),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = 0,
+ .shape = SPRITE_SHAPE(64x64),
+ .size = SPRITE_SIZE(64x64),
+ .tileOffset = 0,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gSubspriteTables_83ED704[] =
+{
+ ARRAY_COUNT(gUnknown_085A7FB0), gUnknown_085A7FB0
+};
+
+static const struct Subsprite gUnknown_085A7FC8[] =
+{
+ {
+ .x = -32,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 1,
+ },
+ {
+ .x = 0,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 1,
+ },
+ {
+ .x = -32,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 1,
+ },
+ {
+ .x = 0,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 1,
+ },
+ {
+ .x = -32,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 16,
+ .priority = 1,
+ },
+ {
+ .x = 0,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 20,
+ .priority = 1
+ }
+};
+
+static const struct SubspriteTable gSubspriteTables_83ED73C[] =
+{
+ ARRAY_COUNT(gUnknown_085A7FC8), gUnknown_085A7FC8
+};
+
+static const struct Subsprite gUnknown_085A7FE8[] =
+{
+ {
+ .x = -32,
+ .y = -20,
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .tileOffset = 0,
+ .priority = 1,
+ },
+ {
+ .x = -32,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 32,
+ .priority = 1,
+ },
+ {
+ .x = 0,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 36,
+ .priority = 1,
+ }
+};
+
+static const struct SubspriteTable gSubspriteTables_83ED75C[] =
+{
+ ARRAY_COUNT(gUnknown_085A7FE8), gUnknown_085A7FE8
+};
+
+static const struct Subsprite gUnknown_085A7FFC[] =
+{
+ {
+ .x = -32,
+ .y = -24,
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .tileOffset = 0,
+ .priority = 1,
+ },
+ {
+ .x = -32,
+ .y = 8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 32,
+ .priority = 1,
+ },
+ {
+ .x = 0,
+ .y = 8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 36,
+ .priority = 1,
+ },
+ {
+ .x = -32,
+ .y = 16,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 40,
+ .priority = 1,
+ },
+ {
+ .x = 0,
+ .y = 16,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 44,
+ .priority = 1,
+ }
+};
+
+static const struct SubspriteTable gSubspriteTables_83ED78C[] =
+{
+ ARRAY_COUNT(gUnknown_085A7FFC), gUnknown_085A7FFC
+};
+
+static const struct Subsprite gUnknown_085A8018[] =
+{
+ {
+ .x = -32,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 1,
+ },
+ {
+ .x = 0,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 1,
+ },
+ {
+ .x = -32,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 1,
+ },
+ {
+ .x = 0,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 1,
+ }
+};
+
+static const struct SubspriteTable gSubspriteTables_83ED7B4[] =
+{
+ ARRAY_COUNT(gUnknown_085A8018), gUnknown_085A8018
+};
+
+static const struct Subsprite gUnknown_085A8030[] =
+{
+ {
+ .x = -8,
+ .y = -12,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 0,
+ .priority = 1,
+ },
+ {
+ .x = -8,
+ .y = -4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 0,
+ .priority = 1,
+ },
+ {
+ .x = -8,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 0,
+ .priority = 1,
+ }
+};
+
+static const struct SubspriteTable gSubspriteTables_83ED7D4[] =
+{
+ ARRAY_COUNT(gUnknown_085A8030), gUnknown_085A8030
+};
+
+static const struct Subsprite gUnknown_085A8044[] =
+{
+ {
+ .x = -32,
+ .y = -24,
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = -32,
+ .y = 8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 32,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = 8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 36,
+ .priority = 3,
+ },
+ {
+ .x = -32,
+ .y = 16,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 40,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = 16,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 44,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8058[] =
+{
+ ARRAY_COUNT(gUnknown_085A8044), gUnknown_085A8044
+};
+
+static const struct Subsprite gUnknown_085A8060[] =
+{
+ {
+ .x = -32,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 3,
+ },
+ {
+ .x = -32,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8070[] =
+{
+ ARRAY_COUNT(gUnknown_085A8060), gUnknown_085A8060
+};
+
+static const struct Subsprite gUnknown_085A8078[] =
+{
+ {
+ .x = -32,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 3,
+ },
+ {
+ .x = -32,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8088[] =
+{
+ ARRAY_COUNT(gUnknown_085A8078), gUnknown_085A8078
+};
+
+static const struct Subsprite gUnknown_085A8090[] =
+{
+ {
+ .x = -32,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 3,
+ },
+ {
+ .x = -32,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A80A0[] =
+{
+ ARRAY_COUNT(gUnknown_085A8090), gUnknown_085A8090
+};
+
+static const struct Subsprite gUnknown_085A80A8[] =
+{
+ {
+ .x = -32,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 3,
+ },
+ {
+ .x = -32,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 3,
+ },
+ {
+ .x = -32,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 16,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 20,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A80C0[] =
+{
+ ARRAY_COUNT(gUnknown_085A80A8), gUnknown_085A80A8
+};
+
+static const struct Subsprite gUnknown_085A80C8[] =
+{
+ {
+ .x = -16,
+ .y = -16,
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .tileOffset = 0,
+ .priority = 3,
+ }
+};
+
+static const struct Subsprite gUnknown_085A80CC[] =
+{
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .tileOffset = 16,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A80D0[] =
+{
+ ARRAY_COUNT(gUnknown_085A80C8), gUnknown_085A80C8
+};
+
+static const struct SubspriteTable gUnknown_085A80D8[] =
+{
+ ARRAY_COUNT(gUnknown_085A80CC), gUnknown_085A80CC
+};
+
+static const struct Subsprite gUnknown_085A80E0[] =
+{
+ {
+ .x = -24,
+ .y = -24,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = 8,
+ -24,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 4,
+ .priority = 3,
+ },
+ {
+ .x = -24,
+ .y = -16,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 6,
+ .priority = 3,
+ },
+ {
+ .x = 8,
+ .y = -16,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 10,
+ .priority = 3,
+ },
+ {
+ .x = -24,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 3,
+ },
+ {
+ .x = 8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 16,
+ .priority = 3,
+ },
+ {
+ .x = -24,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 18,
+ .priority = 3,
+ },
+ {
+ .x = 8,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 22,
+ .priority = 3,
+ },
+ {
+ .x = -24,
+ .y = 8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 24,
+ .priority = 3,
+ },
+ {
+ .x = 8,
+ .y = 8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 28,
+ .priority = 3,
+ },
+ {
+ .x = -24,
+ .y = 16,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 30,
+ .priority = 3,
+ },
+ {
+ .x = 8,
+ .y = 16,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 34,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8110[] =
+{
+ ARRAY_COUNT(gUnknown_085A80E0), gUnknown_085A80E0
+};
+
+static const struct Subsprite gUnknown_085A8118[] =
+{
+ {
+ .x = -16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x16),
+ .size = SPRITE_SIZE(32x16),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = -16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 8,
+ .priority = 3,
+ },
+ {
+ .x = 0,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 10,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8124[] =
+{
+ ARRAY_COUNT(gUnknown_085A8118), gUnknown_085A8118
+};
+
+static const struct Subsprite gUnknown_085A812C[] =
+{
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = -8,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 8,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8134[] =
+{
+ ARRAY_COUNT(gUnknown_085A812C), gUnknown_085A812C
+};
+
+static const struct Subsprite gUnknown_085A813C[] =
+{
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 2,
+ .priority = 3,
+ },
+ {
+ .x = -8,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 10,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8144[] =
+{
+ ARRAY_COUNT(gUnknown_085A813C), gUnknown_085A813C
+};
+
+static const struct Subsprite gUnknown_085A814C[] =
+{
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 4,
+ .priority = 3,
+ },
+ {
+ .x = -8,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 12,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8154[] =
+{
+ ARRAY_COUNT(gUnknown_085A814C), gUnknown_085A814C
+};
+
+static const struct Subsprite gUnknown_085A815C[] =
+{
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 6,
+ .priority = 3,
+ },
+ {
+ .x = -8,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 14,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8164[] =
+{
+ ARRAY_COUNT(gUnknown_085A815C), gUnknown_085A815C
+};
+
+static const struct Subsprite gUnknown_085A816C[] =
+{
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = -8,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 8,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8174[] =
+{
+ ARRAY_COUNT(gUnknown_085A816C), gUnknown_085A816C
+};
+
+static const struct Subsprite gUnknown_085A817C[] =
+{
+ {
+ .x = -4,
+ .y = -8,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 2,
+ .priority = 3,
+ },
+ {
+ .x = -4,
+ .y = 0,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 10,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8184[] =
+{
+ ARRAY_COUNT(gUnknown_085A817C), gUnknown_085A817C
+};
+
+static const struct Subsprite gUnknown_085A818C[] =
+{
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 3,
+ .priority = 3,
+ },
+ {
+ .x = -8,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 11,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8194[] =
+{
+ ARRAY_COUNT(gUnknown_085A818C), gUnknown_085A818C
+};
+
+static const struct Subsprite gUnknown_085A819C[] =
+{
+ {
+ .x = -4,
+ .y = -8,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 5,
+ .priority = 3,
+ },
+ {
+ .x = -4,
+ .y = 0,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 13,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A81A4[] =
+{
+ ARRAY_COUNT(gUnknown_085A819C), gUnknown_085A819C
+};
+
+static const struct Subsprite gUnknown_085A81AC[] =
+{
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 6,
+ .priority = 3,
+ },
+ {
+ .x = -8,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 14,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A81B4[] =
+{
+ ARRAY_COUNT(gUnknown_085A81AC), gUnknown_085A81AC
+};
+
+static const struct Subsprite gUnknown_085A81BC[] =
+{
+ {
+ .x = -12,
+ .y = -12,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = 4,
+ .y = -12,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 2,
+ .priority = 3,
+ },
+ {
+ .x = -12,
+ .y = -4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 8,
+ .priority = 3,
+ },
+ {
+ .x = 4,
+ .y = -4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 10,
+ .priority = 3,
+ },
+ {
+ .x = -12,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 16,
+ .priority = 3,
+ },
+ {
+ .x = 4,
+ .y = 4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 18,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A81D4[] =
+{
+ ARRAY_COUNT(gUnknown_085A81BC), gUnknown_085A81BC
+};
+
+static const struct Subsprite gUnknown_085A81DC[] =
+{
+ {
+ .x = -8,
+ .y = -12,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 3,
+ .priority = 3,
+ },
+ {
+ .x = -8,
+ .y = -4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 11,
+ .priority = 3,
+ },
+ {
+ .x = -8,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 19,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A81E8[] =
+{
+ ARRAY_COUNT(gUnknown_085A81DC), gUnknown_085A81DC
+};
+
+static const struct Subsprite gUnknown_085A81F0[] =
+{
+ {
+ .x = -12,
+ .y = -12,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 5,
+ .priority = 3,
+ },
+ {
+ .x = 4,
+ .y = -12,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 7,
+ .priority = 3,
+ },
+ {
+ .x = -12,
+ .y = -4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 13,
+ .priority = 3,
+ },
+ {
+ .x = 4,
+ .y = -4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 15,
+ .priority = 3,
+ },
+ {
+ .x = -12,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 21,
+ .priority = 3,
+ },
+ {
+ .x = 4,
+ .y = 4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 23,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8208[] =
+{
+ ARRAY_COUNT(gUnknown_085A81F0), gUnknown_085A81F0
+};
+
+static const struct Subsprite gUnknown_085A8210[] =
+{
+ {
+ .x = -12,
+ .y = -12,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 0,
+ .priority = 3,
+ },
+ {
+ .x = 4,
+ .y = -12,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 2,
+ .priority = 3,
+ },
+ {
+ .x = -12,
+ .y = -4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 8,
+ .priority = 3,
+ },
+ {
+ .x = 4,
+ .y = -4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 10,
+ .priority = 3,
+ },
+ {
+ .x = -12,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 16,
+ .priority = 3,
+ },
+ {
+ .x = 4,
+ .y = 4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 18,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A8228[] =
+{
+ ARRAY_COUNT(gUnknown_085A8210), gUnknown_085A8210
+};
+
+static const struct Subsprite gUnknown_085A822C[] =
+{
+ {
+ .x = -8,
+ .y = -12,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 3,
+ .priority = 3,
+ },
+ {
+ .x = -8,
+ .y = -4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 11,
+ .priority = 3,
+ },
+ {
+ .x = -8,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 19,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A823C[] =
+{
+ ARRAY_COUNT(gUnknown_085A822C), gUnknown_085A822C
+};
+
+static const struct Subsprite gUnknown_085A8244[] =
+{
+ {
+ .x = -12,
+ .y = -12,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 5,
+ .priority = 3,
+ },
+ {
+ .x = 4,
+ .y = -12,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 7,
+ .priority = 3,
+ },
+ {
+ .x = -12,
+ .y = -4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 13,
+ .priority = 3,
+ },
+ {
+ .x = 4,
+ .y = -4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 15,
+ .priority = 3,
+ },
+ {
+ .x = -12,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 21,
+ .priority = 3,
+ },
+ {
+ .x = 4,
+ .y = 4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 23,
+ .priority = 3,
+ }
+};
+
+static const struct SubspriteTable gUnknown_085A825C[] =
+{
+ ARRAY_COUNT(gUnknown_085A8244), gUnknown_085A8244
+};
+
+static const struct SpriteTemplate *const gUnknown_083EDB5C[] =
+{
+ &gUnknown_085A7E48,
+ &gUnknown_085A7E60,
+ &gUnknown_085A7E78,
+ &gUnknown_085A7EA8,
+ &gUnknown_085A7EC0,
+ &gUnknown_085A7F20,
+ &gUnknown_085A7F38,
+ &gUnknown_085A7F50,
+ &gUnknown_085A7F68,
+ &gUnknown_085A7F80,
+ &gUnknown_085A7E90,
+ &gUnknown_085A7E90,
+ &gUnknown_085A7E90,
+ &gUnknown_085A7E90,
+ &gUnknown_085A7ED8,
+ &gUnknown_085A7ED8,
+ &gUnknown_085A7ED8,
+ &gUnknown_085A7ED8,
+ &gUnknown_085A7ED8,
+ &gUnknown_085A7EF0,
+ &gUnknown_085A7EF0,
+ &gUnknown_085A7EF0,
+ &gUnknown_085A7F08,
+ &gUnknown_085A7F08,
+ &gUnknown_085A7F08,
+ &gDummySpriteTemplate
+};
+
+static const struct SubspriteTable *const gUnknown_083EDBC4[] =
+{
+ gUnknown_085A8058,
+ gUnknown_085A8070,
+ gUnknown_085A8088,
+ gUnknown_085A80C0,
+ NULL,
+ NULL,
+ gUnknown_085A80D0,
+ NULL,
+ gUnknown_085A8110,
+ gUnknown_085A8124,
+ gUnknown_085A8134,
+ gUnknown_085A8144,
+ gUnknown_085A8154,
+ gUnknown_085A8164,
+ gUnknown_085A8174,
+ gUnknown_085A8184,
+ gUnknown_085A8194,
+ gUnknown_085A81A4,
+ gUnknown_085A81B4,
+ gUnknown_085A81D4,
+ gUnknown_085A81E8,
+ gUnknown_085A8208,
+ gUnknown_085A8228,
+ gUnknown_085A823C,
+ gUnknown_085A825C,
+ NULL
+};
+
+static const struct SpriteSheet gSlotMachineSpriteSheets[] =
+{
+ { .data = gSlotMachineReelSymbol1Tiles, .size = 0x200, .tag = 0 },
+ { .data = gSlotMachineReelSymbol2Tiles, .size = 0x200, .tag = 1 },
+ { .data = gSlotMachineReelSymbol3Tiles, .size = 0x200, .tag = 2 },
+ { .data = gSlotMachineReelSymbol4Tiles, .size = 0x200, .tag = 3 },
+ { .data = gSlotMachineReelSymbol5Tiles, .size = 0x200, .tag = 4 },
+ { .data = gSlotMachineReelSymbol6Tiles, .size = 0x200, .tag = 5 },
+ { .data = gSlotMachineReelSymbol7Tiles, .size = 0x200, .tag = 6 },
+ { .data = gSlotMachineNumber0Tiles, .size = 0x40, .tag = 7 },
+ { .data = gSlotMachineNumber1Tiles, .size = 0x40, .tag = 8 },
+ { .data = gSlotMachineNumber2Tiles, .size = 0x40, .tag = 9 },
+ { .data = gSlotMachineNumber3Tiles, .size = 0x40, .tag = 10 },
+ { .data = gSlotMachineNumber4Tiles, .size = 0x40, .tag = 11 },
+ { .data = gSlotMachineNumber5Tiles, .size = 0x40, .tag = 12 },
+ { .data = gSlotMachineNumber6Tiles, .size = 0x40, .tag = 13 },
+ { .data = gSlotMachineNumber7Tiles, .size = 0x40, .tag = 14 },
+ { .data = gSlotMachineNumber8Tiles, .size = 0x40, .tag = 15 },
+ { .data = gSlotMachineNumber9Tiles, .size = 0x40, .tag = 16 },
+};
+
+static const u8 sUnused1[][8] =
+{
+ {0, 0, 0, 0, 0, 2, 18},
+ {0, 0, 0, 0, 0, 2, 19},
+ {0, 0, 0, 0, 0, 3, 20},
+ {0, 0, 0, 0, 0, 3, 21},
+ {0, 0, 0, 0, 0, 0, 0}
+};
+
+static const u8 *const gUnknown_083EDCDC = gUnknown_08DD19F8;
+
+static const u8 sUnused2[][2] =
+{
+ {0x7B, 0x6F},
+ {0x68, 0x69},
+ {0xAB, 0x36},
+ {0xFF, 0x7F},
+ {0x50, 0x57},
+ {0xC0, 0x7E},
+ {0xBA, 2},
+ {0xBA, 2},
+ {0xFD, 1},
+ {0xFD, 1}
+};
+
+static const u8 gUnknown_085A83FC[] = {0x91, 0x7F};
+static const u8 gUnknown_085A83FE[] = {0xBF, 0x43};
+static const u8 gUnknown_085A8400[] = {0xBF, 0x43};
+static const u8 gUnknown_085A8402[] = {0xBF, 0x4A};
+static const u8 gUnknown_085A8404[] = {0xBF, 0x4A};
+
+static const u8 *const gUnknown_083EDD08[] =
+{
+ gUnknown_085A83FC,
+ gUnknown_085A83FE,
+ gUnknown_085A8400,
+ gUnknown_085A8402,
+ gUnknown_085A8404,
+};
+
+static const u16 *const gUnknown_083EDD1C[] =
+{
+ gSlotMachineMenu_Pal + 0x4A,
+ gSlotMachineMenu_Pal + 0x4B,
+ gSlotMachineMenu_Pal + 0x4C,
+ gSlotMachineMenu_Pal + 0x4D,
+ gSlotMachineMenu_Pal + 0x4E,
+};
+
+static const u8 gUnknown_083EDD30[] = {0x4A, 0x4B, 0x4C, 0x4E, 0x4D};
+
+static const u8 gBettingTilesId[][2] =
+{
+ {0, 0},
+ {1, 2},
+ {3, 4},
+};
+
+static const u8 gNumberBettingTiles[] = { 1, 2, 2 };
+
+static const u16 gUnknown_085A843E[] = INCBIN_U16("graphics/slot_machine/85A843E.gbapal");
+static const u16 gUnknown_085A845E[] = INCBIN_U16("graphics/slot_machine/85A845E.gbapal");
+static const u16 gUnknown_085A847E[] = INCBIN_U16("graphics/slot_machine/85A847E.gbapal");
+
+static const u16 *const gUnknown_083EDDA0[] =
+{
+ gUnknown_085A843E,
+ gUnknown_085A845E,
+ gUnknown_085A847E,
+};
+
+static const u16 *const gUnknown_083EDDAC = {gSlotMachineMenu_Pal + 0x10};
+
+static const u16 gUnknown_085A84B0[] = INCBIN_U16("graphics/slot_machine/85A84B0.gbapal");
+static const u16 gUnknown_085A84D0[] = INCBIN_U16("graphics/slot_machine/85A84D0.gbapal");
+static const u16 gUnknown_085A84F0[] = INCBIN_U16("graphics/slot_machine/85A84F0.gbapal");
+
+static const u16 *const gUnknown_083EDE10[] =
+{
+ gUnknown_085A84B0,
+ gUnknown_085A84D0,
+ gUnknown_085A84F0,
+ gUnknown_08DCF230,
+};
+
+static const u16 *const gUnknown_083EDE20 = gUnknown_08DCF230;
+static const u16 gPalette_83EDE24[] = INCBIN_U16("graphics/slot_machine/85A8524.bin");
+
+static const struct SpritePalette gSlotMachineSpritePalettes[] =
+{
+ { .data = gUnknown_08DCF170, .tag = 0},
+ { .data = gUnknown_08DCF190, .tag = 1},
+ { .data = gUnknown_08DCF1B0, .tag = 2},
+ { .data = gSlotMachineReelTime_Pal, .tag = 3},
+ { .data = gUnknown_08DCF1F0, .tag = 4},
+ { .data = gUnknown_08DCF210, .tag = 5},
+ { .data = gUnknown_08DCF230, .tag = 6},
+ { .data = gUnknown_08DCF1F0, .tag = 7},
+ {}
+};
+
+static const u32 gReelTimeGfx[] = INCBIN_U32("graphics/slot_machine/reel_time_gfx.4bpp.lz");
+static const u16 gReelTimeWindowTilemap[] = INCBIN_U16("graphics/slot_machine/85A96E0.bin");
+static const u16 gUnknown_085A9898[] = {0};
diff --git a/src/start_menu.c b/src/start_menu.c
index f6cad8aec..a6e7ae5d8 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -450,7 +450,7 @@ static bool32 InitStartMenuStep(void)
sInitStartMenuData[0]++;
break;
case 2:
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
DrawStdWindowFrame(sub_81979C4(sNumStartMenuActions), FALSE);
sInitStartMenuData[1] = 0;
sInitStartMenuData[0]++;
@@ -1314,37 +1314,37 @@ static void ShowSaveInfoWindow(void)
// Print region name
yOffset = 1;
- sub_819A344(3, gStringVar4, TEXT_COLOR_GREEN);
+ BufferSaveMenuText(SAVE_MENU_LOCATION, gStringVar4, TEXT_COLOR_GREEN);
AddTextPrinterParameterized(sSaveInfoWindowId, 1, gStringVar4, 0, yOffset, 0xFF, NULL);
// Print player name
- yOffset = 0x11;
+ yOffset += 16;
AddTextPrinterParameterized(sSaveInfoWindowId, 1, gText_SavingPlayer, 0, yOffset, 0xFF, NULL);
- sub_819A344(0, gStringVar4, color);
+ BufferSaveMenuText(SAVE_MENU_NAME, gStringVar4, color);
xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70);
PrintPlayerNameOnWindow(sSaveInfoWindowId, gStringVar4, xOffset, yOffset);
// Print badge count
- yOffset = 0x21;
+ yOffset += 16;
AddTextPrinterParameterized(sSaveInfoWindowId, 1, gText_SavingBadges, 0, yOffset, 0xFF, NULL);
- sub_819A344(4, gStringVar4, color);
+ BufferSaveMenuText(SAVE_MENU_BADGES, gStringVar4, color);
xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70);
AddTextPrinterParameterized(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL);
if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE)
{
// Print pokedex count
- yOffset = 0x31;
+ yOffset += 16;
AddTextPrinterParameterized(sSaveInfoWindowId, 1, gText_SavingPokedex, 0, yOffset, 0xFF, NULL);
- sub_819A344(1, gStringVar4, color);
+ BufferSaveMenuText(SAVE_MENU_CAUGHT, gStringVar4, color);
xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70);
AddTextPrinterParameterized(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL);
}
// Print play time
- yOffset += 0x10;
+ yOffset += 16;
AddTextPrinterParameterized(sSaveInfoWindowId, 1, gText_SavingTime, 0, yOffset, 0xFF, NULL);
- sub_819A344(2, gStringVar4, color);
+ BufferSaveMenuText(SAVE_MENU_PLAY_TIME, gStringVar4, color);
xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70);
AddTextPrinterParameterized(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL);
diff --git a/src/strings.c b/src/strings.c
index f0566c859..3ca7f693f 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1206,12 +1206,12 @@ const u8 gText_UnionTradesAndBattles[] = _("UNION TRADES & BATTLES");
const u8 gText_BerryCrush[] = _("BERRY CRUSH");
const u8 gText_WaitingTrainerFinishReading[] = _("Waiting for the other TRAINER to\nfinish reading your TRAINER CARD.");
const u8 gText_PokeblocksWithFriends[] = _("{POKEBLOCK}S W/FRIENDS");
-const u8 gText_Var1DarkGreyShadowLightGrey[] = _("{STR_VAR_1}{COLOR DARK_GREY}{SHADOW LIGHT_GREY}");
+const u8 gText_NumPokeblocks[] = _("{STR_VAR_1}{COLOR DARK_GREY}{SHADOW LIGHT_GREY}");
const u8 gText_WonContestsWFriends[] = _("WON CONTESTS W/FRIENDS");
const u8 gText_BattlePtsWon[] = _("BATTLE POINTS WON");
-const u8 gText_Var1DarkLightGreyBP[] = _("{STR_VAR_1}{COLOR DARK_GREY}{SHADOW LIGHT_GREY}BP");
+const u8 gText_NumBP[] = _("{STR_VAR_1}{COLOR DARK_GREY}{SHADOW LIGHT_GREY}BP");
const u8 gText_BattleTower[] = _("BATTLE TOWER");
-const u8 gText_WSlashStraightSlash[] = _("W/{COLOR RED}{SHADOW LIGHT_RED}{STR_VAR_1}{COLOR DARK_GREY}{SHADOW LIGHT_GREY} STRAIGHT/{COLOR RED}{SHADOW LIGHT_RED}{STR_VAR_2}");
+const u8 gText_WinsStraight[] = _("W/{COLOR RED}{SHADOW LIGHT_RED}{STR_VAR_1}{COLOR DARK_GREY}{SHADOW LIGHT_GREY} STRAIGHT/{COLOR RED}{SHADOW LIGHT_RED}{STR_VAR_2}");
const u8 gText_BattleTower2[] = _("BATTLE TOWER");
const u8 gText_BattleDome[] = _("BATTLE DOME");
const u8 gText_BattlePalace[] = _("BATTLE PALACE");
diff --git a/src/trainer_card.c b/src/trainer_card.c
index 5ea076c2a..fb92dc336 100755
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -31,62 +31,56 @@
#include "constants/game_stat.h"
#include "constants/battle_frontier.h"
#include "constants/rgb.h"
-
-enum
-{
- CARD_TYPE_FRLG,
- CARD_TYPE_RS,
- CARD_TYPE_EMERALD,
-};
+#include "constants/trainers.h"
struct TrainerCardData
{
- u8 var_0;
+ u8 mainState;
u8 printState;
u8 gfxLoadState;
u8 bgPalLoadState;
- u8 var_4;
+ u8 flipDrawState;
bool8 isLink;
- u8 var_6;
- u8 var_7;
- u8 var_8;
+ u8 timeColonBlinkTimer;
+ bool8 timeColonInvisible;
+ bool8 onBack;
bool8 allowDMACopy;
bool8 hasPokedex;
bool8 hasHofResult;
bool8 hasLinkResults;
bool8 hasBattleTowerWins;
- u8 var_E;
- u8 var_F;
+ bool8 unused_E;
+ bool8 unused_F;
bool8 hasTrades;
- u8 badgeCount[8];
- u8 var_19[4][0xD];
- u8 var_4D[0x46];
- u8 var_93[0x46];
- u8 var_D9[0x8C];
- u8 var_165[0x46];
- u8 var_1AB[0x8C];
- u8 var_237[0x8C];
- u8 var_2C3[0x8C];
- u8 var_34F[0x46];
- u8 var_395[0x46];
- u8 var_3DB[0x46];
- u8 var_421[0x46];
- u16 var_468[0x60];
- s8 var_528;
- u8 var_529;
+ u8 badgeCount[NUM_BADGES];
+ u8 easyChatProfile[TRAINER_CARD_PROFILE_LENGTH][13];
+ u8 textPlayersCard[70];
+ u8 textHofTime[70];
+ u8 textLinkBattleType[140];
+ u8 textLinkBattleWins[70];
+ u8 textLinkBattleLosses[140];
+ u8 textNumTrades[140];
+ u8 textBerryCrushPts[140];
+ u8 textUnionRoomStats[70];
+ u8 textNumLinkPokeblocks[70];
+ u8 textNumLinkContests[70];
+ u8 textBattleFacilityStat[70];
+ u16 monIconPal[16 * PARTY_SIZE];
+ s8 flipBlendY;
+ bool8 timeColonNeedDraw;
u8 cardType;
bool8 isHoenn;
- u16 var_52C;
+ u16 blendColor;
void (*callback2)(void);
struct TrainerCard trainerCard;
- u16 var_598[0x4B0 / 2];
- u16 var_A48[0x4B0 / 2];
- u16 var_EF8[0x4B0 / 2];
- u8 var_13A8[0x400];
- u8 var_17A8[0x200];
- u8 var_19A8[0x2300];
- u16 var_3CA8[0x2000 / 2];
- u16 var_5CA8[0x2000 / 2];
+ u16 frontTilemap[600];
+ u16 backTilemap[600];
+ u16 bgTilemap[600];
+ u8 badgeTiles[0x80 * NUM_BADGES];
+ u8 stickerTiles[0x200];
+ u8 cardTiles[0x2300];
+ u16 cardTilemapBuffer[0x1000];
+ u16 bgTilemapBuffer[0x1000];
u16 var_7CA8;
u8 language;
};
@@ -98,18 +92,18 @@ EWRAM_DATA static struct TrainerCardData *sData = NULL;
//this file's functions
static void VblankCb_TrainerCard(void);
static void HblankCb_TrainerCard(void);
-static void sub_80C48C8(void);
+static void BlinkTimeColon(void);
static void CB2_TrainerCard(void);
static void CloseTrainerCard(u8 task);
-static bool8 PrintAllOnCardPage1(void);
-static void sub_80C438C(u8);
-static void sub_80C4FF0(void);
-static void sub_80C4550(u16*);
-static void sub_80C45C0(u16*);
-static void TrainerCard_PrintStarsAndBadgesOnCard(void);
+static bool8 PrintAllOnCardFront(void);
+static void DrawTrainerCardWindow(u8);
+static void CreateTrainerCardTrainerPic(void);
+static void DrawCardScreenBackground(u16*);
+static void DrawCardFrontOrBack(u16*);
+static void DrawStarsAndBadgesOnCard(void);
static void PrintTimeOnCard(void);
-static void sub_80C4918(void);
-static bool8 sub_80C4940(void);
+static void FlipTrainerCard(void);
+static bool8 IsCardFlipTaskActive(void);
static bool8 LoadCardGfx(void);
static void CB2_InitTrainerCard(void);
static u32 GetCappedGameStat(u8 statId, u32 maxValue);
@@ -124,74 +118,74 @@ static void HandleGpuRegs(void);
static void ResetGpuRegs(void);
static void InitBgsAndWindows(void);
static void SetTrainerCardCb2(void);
-static void sub_80C3414(void);
-static void sub_80C4EE4(void);
+static void SetUpTrainerCardTask(void);
+static void InitTrainerCardData(void);
static u8 GetSetCardType(void);
-static void PrintNameOnCard(void);
+static void PrintNameOnCardFront(void);
static void PrintIdOnCard(void);
static void PrintMoneyOnCard(void);
static void PrintPokedexOnCard(void);
static void PrintProfilePhraseOnCard(void);
-static bool8 PrintStringsOnCardPage2(void);
-static void sub_80C3B50(void);
-static void PrintHofDebutStringOnCard(void);
-static void PrintWinsLossesStringOnCard(void);
+static bool8 PrintAllOnCardBack(void);
+static void PrintNameOnCardBack(void);
+static void PrintHofDebutTimeOnCard(void);
+static void PrintLinkBattleResultsOnCard(void);
static void PrintTradesStringOnCard(void);
static void PrintBerryCrushStringOnCard(void);
static void PrintPokeblockStringOnCard(void);
static void PrintUnionStringOnCard(void);
static void PrintContestStringOnCard(void);
-static void TrainerCard_PrintPokemonIconsOnCard(void);
+static void PrintPokemonIconsOnCard(void);
static void PrintBattleFacilityStringOnCard(void);
-static void sub_80C42A4(void);
-static void PrintAllVariableNumsOnCardPage2(void);
-static void PrintNameOnCard2(void);
-static void PrintHofTimeOnCard(void);
-static void PrintLinkResultsNumsOnCard(void);
-static void PrintTradesNumOnCard(void);
-static void PrintBerryCrushNumOnCard(void);
-static void PrintUnionNumOnCard(void);
-static void PrintPokeblocksNumOnCard(void);
-static void PrintContestNumOnCard(void);
-static void PrintBattleFacilityNumsOnCard(void);
-static void PrintString(u8 top, const u8* str1, u8* str2, const u8* color);
-static void sub_80C4330(void);
+static void PrintStickersOnCard(void);
+static void BufferTextsVarsForCardPage2(void);
+static void BufferNameForCardBack(void);
+static void BufferHofDebutTime(void);
+static void BufferLinkBattleResults(void);
+static void BufferNumTrades(void);
+static void BufferBerryCrushPoints(void);
+static void BufferUnionRoomStats(void);
+static void BufferLinkPokeblocksNum(void);
+static void BufferLinkContestNum(void);
+static void BufferBattleFacilityStats(void);
+static void PrintStatOnBackOfCard(u8 top, const u8* str1, u8* str2, const u8* color);
+static void LoadStickerGfx(void);
static u8 SetCardBgsAndPals(void);
-static void sub_80C474C(void);
-static void sub_80C4960(u8);
-static bool8 sub_80C4998(struct Task* task);
-static bool8 sub_80C49D8(struct Task* task);
-static bool8 sub_80C4B08(struct Task* task);
-static bool8 sub_80C4C1C(struct Task* task);
-static bool8 sub_80C4C84(struct Task* task);
-static bool8 sub_80C4DB0(struct Task* task);
+static void DrawCardBackStats(void);
+static void Task_DoCardFlipTask(u8);
+static bool8 Task_BeginCardFlip(struct Task* task);
+static bool8 Task_AnimateCardFlipDown(struct Task* task);
+static bool8 Task_DrawFlippedCardSide(struct Task* task);
+static bool8 Task_SetCardFlipped(struct Task* task);
+static bool8 Task_AnimateCardFlipUp(struct Task* task);
+static bool8 Task_EndCardFlip(struct Task* task);
static void sub_80C32EC(u16);
-static void sub_80C41D8(void);
+static void LoadMonIconGfx(void);
// const rom data
-static const u32 gUnknown_0856F018[] = INCBIN_U32("graphics/trainer_card/stickers_fr.4bpp.lz");
-static const u16 gUnknown_0856F18C[] = INCBIN_U16("graphics/trainer_card/unknown_56F18C.gbapal");
-static const u16 gEmeraldTrainerCard1Star_Pal[] = INCBIN_U16("graphics/trainer_card/one_star.gbapal");
-static const u16 gFireRedTrainerCard1Star_Pal[] = INCBIN_U16("graphics/trainer_card/one_star_fr.gbapal");
-static const u16 gEmeraldTrainerCard2Star_Pal[] = INCBIN_U16("graphics/trainer_card/two_stars.gbapal");
-static const u16 gFireRedTrainerCard2Star_Pal[] = INCBIN_U16("graphics/trainer_card/two_stars_fr.gbapal");
-static const u16 gEmeraldTrainerCard3Star_Pal[] = INCBIN_U16("graphics/trainer_card/three_stars.gbapal");
-static const u16 gFireRedTrainerCard3Star_Pal[] = INCBIN_U16("graphics/trainer_card/three_stars_fr.gbapal");
-static const u16 gEmeraldTrainerCard4Star_Pal[] = INCBIN_U16("graphics/trainer_card/four_stars.gbapal");
-static const u16 gFireRedTrainerCard4Star_Pal[] = INCBIN_U16("graphics/trainer_card/four_stars_fr.gbapal");
-static const u16 sEmeraldTrainerCardFemaleBackground_Pal[] = INCBIN_U16("graphics/trainer_card/female_bg.gbapal");
-static const u16 sFireRedTrainerCardFemaleBackground_Pal[] = INCBIN_U16("graphics/trainer_card/female_bg_fr.gbapal");
-static const u16 sEmeraldTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/badges.gbapal");
-static const u16 sFireRedTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/badges_fr.gbapal");
-static const u16 gUnknown_0856F52C[] = INCBIN_U16("graphics/trainer_card/gold.gbapal");
-static const u16 gUnknown_0856F54C[] = INCBIN_U16("graphics/trainer_card/stickers_fr1.gbapal");
-static const u16 gUnknown_0856F56C[] = INCBIN_U16("graphics/trainer_card/stickers_fr2.gbapal");
-static const u16 gUnknown_0856F58C[] = INCBIN_U16("graphics/trainer_card/stickers_fr3.gbapal");
-static const u16 gUnknown_0856F5AC[] = INCBIN_U16("graphics/trainer_card/stickers_fr4.gbapal");
-static const u32 sEmeraldTrainerCardBadges_Tile[] = INCBIN_U32("graphics/trainer_card/badges.4bpp.lz");
-static const u32 sFireRedTrainerCardBadges_Tile[] = INCBIN_U32("graphics/trainer_card/badges_fr.4bpp.lz");
-
-static const struct BgTemplate gUnknown_0856FAB4[4] =
+static const u32 sTrainerCardStickers_Gfx[] = INCBIN_U32("graphics/trainer_card/stickers_fr.4bpp.lz");
+static const u16 sUnused_0856F18C[] = INCBIN_U16("graphics/trainer_card/unknown_56F18C.gbapal");
+static const u16 sHoennTrainerCard1Star_Pal[] = INCBIN_U16("graphics/trainer_card/one_star.gbapal");
+static const u16 sKantoTrainerCard1Star_Pal[] = INCBIN_U16("graphics/trainer_card/one_star_fr.gbapal");
+static const u16 sHoennTrainerCard2Star_Pal[] = INCBIN_U16("graphics/trainer_card/two_stars.gbapal");
+static const u16 sKantoTrainerCard2Star_Pal[] = INCBIN_U16("graphics/trainer_card/two_stars_fr.gbapal");
+static const u16 sHoennTrainerCard3Star_Pal[] = INCBIN_U16("graphics/trainer_card/three_stars.gbapal");
+static const u16 sKantoTrainerCard3Star_Pal[] = INCBIN_U16("graphics/trainer_card/three_stars_fr.gbapal");
+static const u16 sHoennTrainerCard4Star_Pal[] = INCBIN_U16("graphics/trainer_card/four_stars.gbapal");
+static const u16 sKantoTrainerCard4Star_Pal[] = INCBIN_U16("graphics/trainer_card/four_stars_fr.gbapal");
+static const u16 sHoennTrainerCardFemaleBg_Pal[] = INCBIN_U16("graphics/trainer_card/female_bg.gbapal");
+static const u16 sKantoTrainerCardFemaleBg_Pal[] = INCBIN_U16("graphics/trainer_card/female_bg_fr.gbapal");
+static const u16 sHoennTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/badges.gbapal");
+static const u16 sKantoTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/badges_fr.gbapal");
+static const u16 sTrainerCardGold_Pal[] = INCBIN_U16("graphics/trainer_card/gold.gbapal");
+static const u16 sTrainerCardSticker1_Pal[] = INCBIN_U16("graphics/trainer_card/stickers_fr1.gbapal");
+static const u16 sTrainerCardSticker2_Pal[] = INCBIN_U16("graphics/trainer_card/stickers_fr2.gbapal");
+static const u16 sTrainerCardSticker3_Pal[] = INCBIN_U16("graphics/trainer_card/stickers_fr3.gbapal");
+static const u16 sTrainerCardSticker4_Pal[] = INCBIN_U16("graphics/trainer_card/stickers_fr4.gbapal");
+static const u32 sHoennTrainerCardBadges_Gfx[] = INCBIN_U32("graphics/trainer_card/badges.4bpp.lz");
+static const u32 sKantoTrainerCardBadges_Gfx[] = INCBIN_U32("graphics/trainer_card/badges_fr.4bpp.lz");
+
+static const struct BgTemplate sTrainerCardBgTemplates[4] =
{
{
.bg = 0,
@@ -231,7 +225,7 @@ static const struct BgTemplate gUnknown_0856FAB4[4] =
},
};
-static const struct WindowTemplate gUnknown_0856FAC4[] =
+static const struct WindowTemplate sTrainerCardWindowTemplates[] =
{
{
.bg = 1,
@@ -263,44 +257,69 @@ static const struct WindowTemplate gUnknown_0856FAC4[] =
DUMMY_WIN_TEMPLATE
};
-static const u16 *const gEmeraldTrainerCardStarPals[] =
+static const u16 *const sHoennTrainerCardStarPals[] =
{
- gEmeraldTrainerCard0Star_Pal,
- gEmeraldTrainerCard1Star_Pal,
- gEmeraldTrainerCard2Star_Pal,
- gEmeraldTrainerCard3Star_Pal,
- gEmeraldTrainerCard4Star_Pal,
+ gHoennTrainerCard0Star_Pal,
+ sHoennTrainerCard1Star_Pal,
+ sHoennTrainerCard2Star_Pal,
+ sHoennTrainerCard3Star_Pal,
+ sHoennTrainerCard4Star_Pal,
};
-static const u16 *const gFireRedTrainerCardStarPals[] =
+static const u16 *const sKantoTrainerCardStarPals[] =
{
- gFireRedTrainerCard0Star_Pal,
- gFireRedTrainerCard1Star_Pal,
- gFireRedTrainerCard2Star_Pal,
- gFireRedTrainerCard3Star_Pal,
- gFireRedTrainerCard4Star_Pal,
+ gKantoTrainerCard0Star_Pal,
+ sKantoTrainerCard1Star_Pal,
+ sKantoTrainerCard2Star_Pal,
+ sKantoTrainerCard3Star_Pal,
+ sKantoTrainerCard4Star_Pal,
};
static const u8 sTrainerCardTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY};
static const u8 sTrainerCardStatColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED};
-static const u8 gUnknown_0856FB12[6] = {0};
+static const u8 sTimeColonInvisibleTextColors[6] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_TRANSPARENT};
-static const u8 gUnknown_0856FB18[][2][2] =
+static const u8 sTrainerPicOffset[2][GENDER_COUNT][2] =
{
- {{0xD, 4}, {0xD, 4}},
- {{1, 0}, {1, 0}},
+ // Kanto
+ {
+ [MALE] = {13, 4},
+ [FEMALE] = {13, 4}
+ },
+ // Hoenn
+ {
+ [MALE] = {1, 0},
+ [FEMALE] = {1, 0}
+ },
};
-static const u8 gUnknown_0856FB20[][2] = {{0x4E, 0x4F}, {0x50, 0x51}, {0x3C, 0x3F}};
+static const u8 sTrainerPicFacilityClass[][GENDER_COUNT] =
+{
+ [CARD_TYPE_FRLG] =
+ {
+ [MALE] = FACILITY_CLASS_RED,
+ [FEMALE] = FACILITY_CLASS_LEAF
+ },
+ [CARD_TYPE_RS] =
+ {
+ [MALE] = FACILITY_CLASS_RS_BRENDAN,
+ [FEMALE] = FACILITY_CLASS_RS_MAY
+ },
+ [CARD_TYPE_EMERALD] =
+ {
+ [MALE] = FACILITY_CLASS_BRENDAN,
+ [FEMALE] = FACILITY_CLASS_MAY
+ }
+};
-static bool8 (*const gUnknown_0856FB28[])(struct Task *) =
+static bool8 (*const sTrainerCardFlipTasks[])(struct Task *) =
{
- sub_80C4998,
- sub_80C49D8,
- sub_80C4B08,
- sub_80C4C1C,
- sub_80C4C84,
- sub_80C4DB0,
+ Task_BeginCardFlip,
+ Task_AnimateCardFlipDown,
+ Task_DrawFlippedCardSide,
+ Task_SetCardFlipped,
+ Task_AnimateCardFlipUp,
+ Task_EndCardFlip,
};
// code
@@ -309,7 +328,7 @@ static void VblankCb_TrainerCard(void)
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
- sub_80C48C8();
+ BlinkTimeColon();
if (sData->allowDMACopy)
DmaCopy16(3, &gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 0x140);
}
@@ -342,114 +361,126 @@ static void CloseTrainerCard(u8 taskId)
DestroyTask(taskId);
}
-static void sub_80C2760(u8 taskId)
+// States for Task_TrainerCard. Skips the initial states, which are done once in order
+#define STATE_HANDLE_INPUT_FRONT 10
+#define STATE_HANDLE_INPUT_BACK 11
+#define STATE_WAIT_FLIP_TO_BACK 12
+#define STATE_WAIT_FLIP_TO_FRONT 13
+#define STATE_CLOSE_CARD 14
+#define STATE_WAIT_LINK_PARTNER 15
+#define STATE_CLOSE_CARD_LINK 16
+
+static void Task_TrainerCard(u8 taskId)
{
- switch (sData->var_0)
+ switch (sData->mainState)
{
+ // Draw card initially
case 0:
if (!IsDma3ManagerBusyWithBgCopy())
{
FillWindowPixelBuffer(1, PIXEL_FILL(0));
- sData->var_0++;
+ sData->mainState++;
}
break;
case 1:
- if (PrintAllOnCardPage1())
- sData->var_0++;
+ if (PrintAllOnCardFront())
+ sData->mainState++;
break;
case 2:
- sub_80C438C(1);
- sData->var_0++;
+ DrawTrainerCardWindow(1);
+ sData->mainState++;
break;
case 3:
FillWindowPixelBuffer(2, PIXEL_FILL(0));
- sub_80C4FF0();
- sub_80C438C(2);
- sData->var_0++;
+ CreateTrainerCardTrainerPic();
+ DrawTrainerCardWindow(2);
+ sData->mainState++;
break;
case 4:
- sub_80C4550(sData->var_EF8);
- sData->var_0++;
+ DrawCardScreenBackground(sData->bgTilemap);
+ sData->mainState++;
break;
case 5:
- sub_80C45C0(sData->var_598);
- sData->var_0++;
+ DrawCardFrontOrBack(sData->frontTilemap);
+ sData->mainState++;
break;
case 6:
- TrainerCard_PrintStarsAndBadgesOnCard();
- sData->var_0++;
+ DrawStarsAndBadgesOnCard();
+ sData->mainState++;
break;
+ // Fade in
case 7:
if (gWirelessCommType == 1 && gReceivedRemoteLinkPlayers == TRUE)
{
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(230, 150);
}
- BlendPalettes(0xFFFFFFFF, 16, sData->var_52C);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, sData->var_52C);
+ BlendPalettes(0xFFFFFFFF, 16, sData->blendColor);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, sData->blendColor);
SetVBlankCallback(VblankCb_TrainerCard);
- sData->var_0++;
+ sData->mainState++;
break;
case 8:
if (!UpdatePaletteFade() && !IsDma3ManagerBusyWithBgCopy())
{
PlaySE(SE_RG_CARD3);
- sData->var_0 = 10;
+ sData->mainState = STATE_HANDLE_INPUT_FRONT;
}
break;
case 9:
if (!IsSEPlaying())
- sData->var_0++;
+ sData->mainState++;
break;
- case 10:
- if (!gReceivedRemoteLinkPlayers && sData->var_529)
+ case STATE_HANDLE_INPUT_FRONT:
+ // Blink the : in play time
+ if (!gReceivedRemoteLinkPlayers && sData->timeColonNeedDraw)
{
PrintTimeOnCard();
- sub_80C438C(1);
- sData->var_529 = 0;
+ DrawTrainerCardWindow(1);
+ sData->timeColonNeedDraw = FALSE;
}
if (gMain.newKeys & A_BUTTON)
{
- sub_80C4918();
+ FlipTrainerCard();
PlaySE(SE_RG_CARD1);
- sData->var_0 = 12;
+ sData->mainState = STATE_WAIT_FLIP_TO_BACK;
}
else if (gMain.newKeys & B_BUTTON)
{
if (gReceivedRemoteLinkPlayers && sData->isLink && InUnionRoom() == TRUE)
{
- sData->var_0 = 15;
+ sData->mainState = STATE_WAIT_LINK_PARTNER;
}
else
{
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, sData->var_52C);
- sData->var_0 = 14;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, sData->blendColor);
+ sData->mainState = STATE_CLOSE_CARD;
}
}
break;
- case 12:
- if (sub_80C4940() && sub_8087598() != TRUE)
+ case STATE_WAIT_FLIP_TO_BACK:
+ if (IsCardFlipTaskActive() && sub_8087598() != TRUE)
{
PlaySE(SE_RG_CARD3);
- sData->var_0 = 11;
+ sData->mainState = STATE_HANDLE_INPUT_BACK;
}
break;
- case 11:
+ case STATE_HANDLE_INPUT_BACK:
if (gMain.newKeys & B_BUTTON)
{
if (gReceivedRemoteLinkPlayers && sData->isLink && InUnionRoom() == TRUE)
{
- sData->var_0 = 15;
+ sData->mainState = STATE_WAIT_LINK_PARTNER;
}
else if (gReceivedRemoteLinkPlayers)
{
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, sData->var_52C);
- sData->var_0 = 14;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, sData->blendColor);
+ sData->mainState = STATE_CLOSE_CARD;
}
else
{
- sub_80C4918();
- sData->var_0 = 13;
+ FlipTrainerCard();
+ sData->mainState = STATE_WAIT_FLIP_TO_FRONT;
PlaySE(SE_RG_CARD1);
}
}
@@ -457,37 +488,37 @@ static void sub_80C2760(u8 taskId)
{
if (gReceivedRemoteLinkPlayers && sData->isLink && InUnionRoom() == TRUE)
{
- sData->var_0 = 15;
+ sData->mainState = STATE_WAIT_LINK_PARTNER;
}
else
{
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, sData->var_52C);
- sData->var_0 = 14;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, sData->blendColor);
+ sData->mainState = STATE_CLOSE_CARD;
}
}
break;
- case 15:
+ case STATE_WAIT_LINK_PARTNER:
sub_800AC34();
DrawDialogueFrame(0, 1);
AddTextPrinterParameterized(0, 1, gText_WaitingTrainerFinishReading, 0, 1, 255, 0);
CopyWindowToVram(0, 3);
- sData->var_0 = 16;
+ sData->mainState = STATE_CLOSE_CARD_LINK;
break;
- case 16:
+ case STATE_CLOSE_CARD_LINK:
if (!gReceivedRemoteLinkPlayers)
{
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, sData->var_52C);
- sData->var_0 = 14;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, sData->blendColor);
+ sData->mainState = STATE_CLOSE_CARD;
}
break;
- case 14:
+ case STATE_CLOSE_CARD:
if (!UpdatePaletteFade())
CloseTrainerCard(taskId);
break;
- case 13:
- if (sub_80C4940() && sub_8087598() != TRUE)
+ case STATE_WAIT_FLIP_TO_FRONT:
+ if (IsCardFlipTaskActive() && sub_8087598() != TRUE)
{
- sData->var_0 = 10;
+ sData->mainState = STATE_HANDLE_INPUT_FRONT;
PlaySE(SE_RG_CARD3);
}
break;
@@ -500,47 +531,47 @@ static bool8 LoadCardGfx(void)
{
case 0:
if (sData->cardType != CARD_TYPE_FRLG)
- LZ77UnCompWram(gUnknown_08DD1F78, sData->var_EF8);
+ LZ77UnCompWram(gHoennTrainerCardBg_Tilemap, sData->bgTilemap);
else
- LZ77UnCompWram(gUnknown_08DD2AE0, sData->var_EF8);
+ LZ77UnCompWram(gKantoTrainerCardBg_Tilemap, sData->bgTilemap);
break;
case 1:
if (sData->cardType != CARD_TYPE_FRLG)
- LZ77UnCompWram(gUnknown_08DD21B0, sData->var_A48);
+ LZ77UnCompWram(gHoennTrainerCardBack_Tilemap, sData->backTilemap);
else
- LZ77UnCompWram(gUnknown_08DD2D30, sData->var_A48);
+ LZ77UnCompWram(gKantoTrainerCardBack_Tilemap, sData->backTilemap);
break;
case 2:
if (!sData->isLink)
{
if (sData->cardType != CARD_TYPE_FRLG)
- LZ77UnCompWram(gUnknown_08DD2010, sData->var_598);
+ LZ77UnCompWram(gHoennTrainerCardFront_Tilemap, sData->frontTilemap);
else
- LZ77UnCompWram(gUnknown_08DD2B78, sData->var_598);
+ LZ77UnCompWram(gKantoTrainerCardFront_Tilemap, sData->frontTilemap);
}
else
{
if (sData->cardType != CARD_TYPE_FRLG)
- LZ77UnCompWram(gUnknown_08DD228C, sData->var_598);
+ LZ77UnCompWram(gHoennTrainerCardFrontLink_Tilemap, sData->frontTilemap);
else
- LZ77UnCompWram(gUnknown_08DD2E5C, sData->var_598);
+ LZ77UnCompWram(gKantoTrainerCardFrontLink_Tilemap, sData->frontTilemap);
}
break;
case 3:
if (sData->cardType != CARD_TYPE_FRLG)
- LZ77UnCompWram(sEmeraldTrainerCardBadges_Tile, sData->var_13A8);
+ LZ77UnCompWram(sHoennTrainerCardBadges_Gfx, sData->badgeTiles);
else
- LZ77UnCompWram(sFireRedTrainerCardBadges_Tile, sData->var_13A8);
+ LZ77UnCompWram(sKantoTrainerCardBadges_Gfx, sData->badgeTiles);
break;
case 4:
if (sData->cardType != CARD_TYPE_FRLG)
- LZ77UnCompWram(gEmeraldTrainerCard_Gfx, sData->var_19A8);
+ LZ77UnCompWram(gHoennTrainerCard_Gfx, sData->cardTiles);
else
- LZ77UnCompWram(gFireRedTrainerCard_Gfx, sData->var_19A8);
+ LZ77UnCompWram(gKantoTrainerCard_Gfx, sData->cardTiles);
break;
case 5:
if (sData->cardType == CARD_TYPE_FRLG)
- LZ77UnCompWram(gUnknown_0856F018, sData->var_17A8);
+ LZ77UnCompWram(sTrainerCardStickers_Gfx, sData->stickerTiles);
break;
default:
sData->gfxLoadState = 0;
@@ -556,7 +587,7 @@ static void CB2_InitTrainerCard(void)
{
case 0:
ResetGpuRegs();
- sub_80C3414();
+ SetUpTrainerCardTask();
gMain.state++;
break;
case 1:
@@ -564,7 +595,7 @@ static void CB2_InitTrainerCard(void)
gMain.state++;
break;
case 2:
- if (!sData->var_52C)
+ if (!sData->blendColor)
DmaClear16(3, (void *)PLTT, PLTT_SIZE);
gMain.state++;
break;
@@ -578,7 +609,7 @@ static void CB2_InitTrainerCard(void)
gMain.state++;
break;
case 5:
- sub_80C41D8();
+ LoadMonIconGfx();
gMain.state++;
break;
case 6:
@@ -586,7 +617,7 @@ static void CB2_InitTrainerCard(void)
gMain.state++;
break;
case 7:
- sub_80C4330();
+ LoadStickerGfx();
gMain.state++;
break;
case 8:
@@ -594,7 +625,7 @@ static void CB2_InitTrainerCard(void)
gMain.state++;
break;
case 9:
- PrintAllVariableNumsOnCardPage2();
+ BufferTextsVarsForCardPage2();
gMain.state++;
break;
case 10:
@@ -693,8 +724,8 @@ static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType)
trainerCard->money = GetMoney(&gSaveBlock1Ptr->money);
- for (i = 0; i < 4; i++)
- trainerCard->var_28[i] = gSaveBlock1Ptr->easyChatProfile[i];
+ for (i = 0; i < TRAINER_CARD_PROFILE_LENGTH; i++)
+ trainerCard->easyChatProfile[i] = gSaveBlock1Ptr->easyChatProfile[i];
StringCopy(trainerCard->playerName, gSaveBlock2Ptr->playerName);
@@ -733,9 +764,9 @@ static void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCar
trainerCard->stars++;
if (trainerCard->gender == FEMALE)
- trainerCard->var_4F = gLinkPlayerFacilityClasses[(trainerCard->trainerId % 8) + 8];
+ trainerCard->facilityClass = gLinkPlayerFacilityClasses[(trainerCard->trainerId % NUM_FEMALE_LINK_FACILITY_CLASSES) + NUM_MALE_LINK_FACILITY_CLASSES];
else
- trainerCard->var_4F = gLinkPlayerFacilityClasses[trainerCard->trainerId % 8];
+ trainerCard->facilityClass = gLinkPlayerFacilityClasses[trainerCard->trainerId % NUM_MALE_LINK_FACILITY_CLASSES];
}
void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard)
@@ -743,15 +774,15 @@ void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard)
memset(trainerCard, 0, 0x60);
trainerCard->version = GAME_VERSION;
SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD);
- trainerCard->var_3A = HasAllFrontierSymbols();
+ trainerCard->hasAllFrontierSymbols = HasAllFrontierSymbols();
*((u16*)&trainerCard->berryCrushPoints) = gSaveBlock2Ptr->frontier.cardBattlePoints;
- if (trainerCard->var_3A)
+ if (trainerCard->hasAllFrontierSymbols)
trainerCard->stars++;
if (trainerCard->gender == FEMALE)
- trainerCard->var_4F = gLinkPlayerFacilityClasses[(trainerCard->trainerId % 8) + 8];
+ trainerCard->facilityClass = gLinkPlayerFacilityClasses[(trainerCard->trainerId % NUM_FEMALE_LINK_FACILITY_CLASSES) + NUM_MALE_LINK_FACILITY_CLASSES];
else
- trainerCard->var_4F = gLinkPlayerFacilityClasses[trainerCard->trainerId % 8];
+ trainerCard->facilityClass = gLinkPlayerFacilityClasses[trainerCard->trainerId % NUM_MALE_LINK_FACILITY_CLASSES];
}
void CopyTrainerCardData(struct TrainerCard *dst, u16 *src, u8 gameVersion)
@@ -785,8 +816,8 @@ static void SetDataFromTrainerCard(void)
sData->hasHofResult = FALSE;
sData->hasLinkResults = FALSE;
sData->hasBattleTowerWins = FALSE;
- sData->var_E = 0;
- sData->var_F = 0;
+ sData->unused_E = FALSE;
+ sData->unused_F = FALSE;
sData->hasTrades = FALSE;
memset(sData->badgeCount, 0, sizeof(sData->badgeCount));
if (sData->trainerCard.hasPokedex)
@@ -804,7 +835,7 @@ static void SetDataFromTrainerCard(void)
if (sData->trainerCard.battleTowerWins || sData->trainerCard.battleTowerStraightWins)
sData->hasBattleTowerWins++;
- for (i = 0, badgeFlag = FLAG_BADGE01_GET; badgeFlag <= FLAG_BADGE08_GET; badgeFlag++, i++)
+ for (i = 0, badgeFlag = FLAG_BADGE01_GET; badgeFlag < FLAG_BADGE01_GET + NUM_BADGES; badgeFlag++, i++)
{
if (FlagGet(badgeFlag))
sData->badgeCount[i]++;
@@ -830,14 +861,15 @@ static void HandleGpuRegs(void)
EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK);
}
+// Part of animating card flip
static void sub_80C32EC(u16 arg0)
{
s8 quotient = (arg0 + 40) / 10;
if (quotient <= 4)
quotient = 0;
- sData->var_528 = quotient;
- SetGpuReg(REG_OFFSET_BLDY, sData->var_528);
+ sData->flipBlendY = quotient;
+ SetGpuReg(REG_OFFSET_BLDY, sData->flipBlendY);
SetGpuReg(REG_OFFSET_WIN0V, (sData->var_7CA8 * 256) | (160 - sData->var_7CA8));
}
@@ -855,7 +887,7 @@ static void ResetGpuRegs(void)
static void InitBgsAndWindows(void)
{
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_0856FAB4, ARRAY_COUNT(gUnknown_0856FAB4));
+ InitBgsFromTemplates(0, sTrainerCardBgTemplates, ARRAY_COUNT(sTrainerCardBgTemplates));
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
@@ -864,9 +896,9 @@ static void InitBgsAndWindows(void)
ChangeBgY(2, 0, 0);
ChangeBgX(3, 0, 0);
ChangeBgY(3, 0, 0);
- InitWindows(gUnknown_0856FAC4);
+ InitWindows(sTrainerCardWindowTemplates);
DeactivateAllTextPrinters();
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
}
static void SetTrainerCardCb2(void)
@@ -874,21 +906,21 @@ static void SetTrainerCardCb2(void)
SetMainCallback2(CB2_TrainerCard);
}
-static void sub_80C3414(void)
+static void SetUpTrainerCardTask(void)
{
ResetTasks();
ScanlineEffect_Stop();
- CreateTask(sub_80C2760, 0);
- sub_80C4EE4();
+ CreateTask(Task_TrainerCard, 0);
+ InitTrainerCardData();
SetDataFromTrainerCard();
}
-static bool8 PrintAllOnCardPage1(void)
+static bool8 PrintAllOnCardFront(void)
{
switch (sData->printState)
{
case 0:
- PrintNameOnCard();
+ PrintNameOnCardFront();
break;
case 1:
PrintIdOnCard();
@@ -913,18 +945,18 @@ static bool8 PrintAllOnCardPage1(void)
return FALSE;
}
-static bool8 PrintStringsOnCardPage2(void)
+static bool8 PrintAllOnCardBack(void)
{
switch (sData->printState)
{
case 0:
- sub_80C3B50();
+ PrintNameOnCardBack();
break;
case 1:
- PrintHofDebutStringOnCard();
+ PrintHofDebutTimeOnCard();
break;
case 2:
- PrintWinsLossesStringOnCard();
+ PrintLinkBattleResultsOnCard();
break;
case 3:
PrintTradesStringOnCard();
@@ -938,11 +970,11 @@ static bool8 PrintStringsOnCardPage2(void)
PrintContestStringOnCard();
break;
case 6:
- TrainerCard_PrintPokemonIconsOnCard();
+ PrintPokemonIconsOnCard();
PrintBattleFacilityStringOnCard();
break;
case 7:
- sub_80C42A4();
+ PrintStickersOnCard();
break;
default:
sData->printState = 0;
@@ -952,20 +984,20 @@ static bool8 PrintStringsOnCardPage2(void)
return FALSE;
}
-static void PrintAllVariableNumsOnCardPage2(void)
+static void BufferTextsVarsForCardPage2(void)
{
- PrintNameOnCard2();
- PrintHofTimeOnCard();
- PrintLinkResultsNumsOnCard();
- PrintTradesNumOnCard();
- PrintBerryCrushNumOnCard();
- PrintUnionNumOnCard();
- PrintPokeblocksNumOnCard();
- PrintContestNumOnCard();
- PrintBattleFacilityNumsOnCard();
+ BufferNameForCardBack();
+ BufferHofDebutTime();
+ BufferLinkBattleResults();
+ BufferNumTrades();
+ BufferBerryCrushPoints();
+ BufferUnionRoomStats();
+ BufferLinkPokeblocksNum();
+ BufferLinkContestNum();
+ BufferBattleFacilityStats();
}
-static void PrintNameOnCard(void)
+static void PrintNameOnCardFront(void)
{
u8 buffer[32];
u8* txtPtr;
@@ -1058,14 +1090,14 @@ static void PrintPokedexOnCard(void)
}
}
-static const u8 *const gUnknown_0856FB40[] = {sTrainerCardTextColors, gUnknown_0856FB12};
+static const u8 *const sTimeColonTextColors[] = {sTrainerCardTextColors, sTimeColonInvisibleTextColors};
static void PrintTimeOnCard(void)
{
u16 hours;
u16 minutes;
s32 width;
- u32 r7, r4, r10;
+ u32 x, y, totalWidth;
if (!sData->isHoenn)
AddTextPrinterParameterized3(1, 1, 20, 88, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardTime);
@@ -1091,175 +1123,180 @@ static void PrintTimeOnCard(void)
if (!sData->isHoenn)
{
- r7 = 144;
- r4 = 88;
+ x = 144;
+ y = 88;
}
else
{
- r7 = 128;
- r4 = 89;
+ x = 128;
+ y = 89;
}
- r10 = width + 30;
- r7 -= r10;
+ totalWidth = width + 30;
+ x -= totalWidth;
- FillWindowPixelRect(1, PIXEL_FILL(0), r7, r4, r10, 15);
+ FillWindowPixelRect(1, PIXEL_FILL(0), x, y, totalWidth, 15);
ConvertIntToDecimalStringN(gStringVar4, hours, STR_CONV_MODE_RIGHT_ALIGN, 3);
- AddTextPrinterParameterized3(1, 1, r7, r4, sTrainerCardTextColors, TEXT_SPEED_FF, gStringVar4);
- r7 += 18;
- AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB40[sData->var_7], TEXT_SPEED_FF, gText_Colon2);
- r7 += width;
+ AddTextPrinterParameterized3(1, 1, x, y, sTrainerCardTextColors, TEXT_SPEED_FF, gStringVar4);
+ x += 18;
+ AddTextPrinterParameterized3(1, 1, x, y, sTimeColonTextColors[sData->timeColonInvisible], TEXT_SPEED_FF, gText_Colon2);
+ x += width;
ConvertIntToDecimalStringN(gStringVar4, minutes, STR_CONV_MODE_LEADING_ZEROS, 2);
- AddTextPrinterParameterized3(1, 1, r7, r4, sTrainerCardTextColors, TEXT_SPEED_FF, gStringVar4);
+ AddTextPrinterParameterized3(1, 1, x, y, sTrainerCardTextColors, TEXT_SPEED_FF, gStringVar4);
}
-static const u8 gUnknown_0856FB48[] = {0x71, 0x68};
-static const u8 gUnknown_0856FB4A[] = {0x81, 0x78};
-
static void PrintProfilePhraseOnCard(void)
{
+ static const u8 yOffsetsLine1[] = {113, 104};
+ static const u8 yOffsetsLine2[] = {129, 120};
+
if (sData->isLink)
{
- AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB48[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->var_19[0]);
- AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->var_19[0], 0) + 14, gUnknown_0856FB48[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->var_19[1]);
- AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB4A[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->var_19[2]);
- AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->var_19[2], 0) + 14, gUnknown_0856FB4A[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->var_19[3]);
+ AddTextPrinterParameterized3(1, 1, 8, yOffsetsLine1[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->easyChatProfile[0]);
+ AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->easyChatProfile[0], 0) + 14, yOffsetsLine1[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->easyChatProfile[1]);
+ AddTextPrinterParameterized3(1, 1, 8, yOffsetsLine2[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->easyChatProfile[2]);
+ AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->easyChatProfile[2], 0) + 14, yOffsetsLine2[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->easyChatProfile[3]);
}
}
-static void PrintNameOnCard2(void)
+static void BufferNameForCardBack(void)
{
- StringCopy(sData->var_4D, sData->trainerCard.playerName);
- ConvertInternationalString(sData->var_4D, sData->language);
+ StringCopy(sData->textPlayersCard, sData->trainerCard.playerName);
+ ConvertInternationalString(sData->textPlayersCard, sData->language);
if (sData->cardType != CARD_TYPE_FRLG)
{
- StringCopy(gStringVar1, sData->var_4D);
- StringExpandPlaceholders(sData->var_4D, gText_Var1sTrainerCard);
+ StringCopy(gStringVar1, sData->textPlayersCard);
+ StringExpandPlaceholders(sData->textPlayersCard, gText_Var1sTrainerCard);
}
}
-static void sub_80C3B50(void)
+static void PrintNameOnCardBack(void)
{
if (!sData->isHoenn)
- AddTextPrinterParameterized3(1, 1, 136, 9, sTrainerCardTextColors, TEXT_SPEED_FF, sData->var_4D);
+ AddTextPrinterParameterized3(1, 1, 136, 9, sTrainerCardTextColors, TEXT_SPEED_FF, sData->textPlayersCard);
else
- AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, sData->var_4D, 216), 9, sTrainerCardTextColors, TEXT_SPEED_FF, sData->var_4D);
+ AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, sData->textPlayersCard, 216), 9, sTrainerCardTextColors, TEXT_SPEED_FF, sData->textPlayersCard);
}
-static const u8 gUnknown_0856FB4C[] = {0xfd, 0x02, 0xf0, 0xfd, 0x03, 0xf0, 0xfd, 0x04, 0xff};
+static const u8 sText_HofTime[] = _("{STR_VAR_1}:{STR_VAR_2}:{STR_VAR_3}");
-static void PrintHofTimeOnCard(void)
+static void BufferHofDebutTime(void)
{
if (sData->hasHofResult)
{
ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.hofDebutHours, STR_CONV_MODE_RIGHT_ALIGN, 3);
ConvertIntToDecimalStringN(gStringVar2, sData->trainerCard.hofDebutMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
ConvertIntToDecimalStringN(gStringVar3, sData->trainerCard.hofDebutSeconds, STR_CONV_MODE_LEADING_ZEROS, 2);
- StringExpandPlaceholders(sData->var_93, gUnknown_0856FB4C);
+ StringExpandPlaceholders(sData->textHofTime, sText_HofTime);
}
}
-static const u8 gUnknown_0856FB55[] = {0x08, 0x10};
-static const u8 gUnknown_0856FB57[] = {0xd8, 0xd8};
-
-static void PrintString(u8 top, const u8* str1, u8* str2, const u8* color)
+static void PrintStatOnBackOfCard(u8 top, const u8* statName, u8* stat, const u8* color)
{
- AddTextPrinterParameterized3(1, 1, gUnknown_0856FB55[sData->isHoenn], top * 16 + 33, sTrainerCardTextColors, TEXT_SPEED_FF, str1);
- AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, str2, gUnknown_0856FB57[sData->isHoenn]), top * 16 + 33, color, TEXT_SPEED_FF, str2);
+ static const u8 xOffsets[] = {8, 16};
+ static const u8 widths[] = {216, 216};
+
+ AddTextPrinterParameterized3(1, 1, xOffsets[sData->isHoenn], top * 16 + 33, sTrainerCardTextColors, TEXT_SPEED_FF, statName);
+ AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, stat, widths[sData->isHoenn]), top * 16 + 33, color, TEXT_SPEED_FF, stat);
}
-static void PrintHofDebutStringOnCard(void)
+static void PrintHofDebutTimeOnCard(void)
{
if (sData->hasHofResult)
- PrintString(0, gText_HallOfFameDebut, sData->var_93, sTrainerCardStatColors);
+ PrintStatOnBackOfCard(0, gText_HallOfFameDebut, sData->textHofTime, sTrainerCardStatColors);
}
-static const u8 *const gUnknown_0856FB5C[] = {gText_LinkBattles, gText_LinkCableBattles, gText_LinkBattles};
+static const u8 *const sLinkBattleTexts[] =
+{
+ [CARD_TYPE_FRLG] = gText_LinkBattles,
+ [CARD_TYPE_RS] = gText_LinkCableBattles,
+ [CARD_TYPE_EMERALD] = gText_LinkBattles
+};
-static void PrintLinkResultsNumsOnCard(void)
+static void BufferLinkBattleResults(void)
{
if (sData->hasLinkResults)
{
- StringCopy(sData->var_D9, gUnknown_0856FB5C[sData->cardType]);
- ConvertIntToDecimalStringN(sData->var_165, sData->trainerCard.linkBattleWins, STR_CONV_MODE_LEFT_ALIGN, 4);
- ConvertIntToDecimalStringN(sData->var_1AB, sData->trainerCard.linkBattleLosses, STR_CONV_MODE_LEFT_ALIGN, 4);
+ StringCopy(sData->textLinkBattleType, sLinkBattleTexts[sData->cardType]);
+ ConvertIntToDecimalStringN(sData->textLinkBattleWins, sData->trainerCard.linkBattleWins, STR_CONV_MODE_LEFT_ALIGN, 4);
+ ConvertIntToDecimalStringN(sData->textLinkBattleLosses, sData->trainerCard.linkBattleLosses, STR_CONV_MODE_LEFT_ALIGN, 4);
}
}
-static void PrintWinsLossesStringOnCard(void)
+static void PrintLinkBattleResultsOnCard(void)
{
if (sData->hasLinkResults)
{
- StringCopy(gStringVar1, sData->var_165);
- StringCopy(gStringVar2, sData->var_1AB);
+ StringCopy(gStringVar1, sData->textLinkBattleWins);
+ StringCopy(gStringVar2, sData->textLinkBattleLosses);
StringExpandPlaceholders(gStringVar4, gText_WinsLosses);
- PrintString(1, sData->var_D9, gStringVar4, sTrainerCardTextColors);
+ PrintStatOnBackOfCard(1, sData->textLinkBattleType, gStringVar4, sTrainerCardTextColors);
}
}
-static void PrintTradesNumOnCard(void)
+static void BufferNumTrades(void)
{
if (sData->hasTrades)
- ConvertIntToDecimalStringN(sData->var_237, sData->trainerCard.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5);
+ ConvertIntToDecimalStringN(sData->textNumTrades, sData->trainerCard.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5);
}
static void PrintTradesStringOnCard(void)
{
if (sData->hasTrades)
- PrintString(2, gText_PokemonTrades, sData->var_237, sTrainerCardStatColors);
+ PrintStatOnBackOfCard(2, gText_PokemonTrades, sData->textNumTrades, sTrainerCardStatColors);
}
-static void PrintBerryCrushNumOnCard(void)
+static void BufferBerryCrushPoints(void)
{
if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.berryCrushPoints)
- ConvertIntToDecimalStringN(sData->var_2C3, sData->trainerCard.berryCrushPoints, STR_CONV_MODE_RIGHT_ALIGN, 5);
+ ConvertIntToDecimalStringN(sData->textBerryCrushPts, sData->trainerCard.berryCrushPoints, STR_CONV_MODE_RIGHT_ALIGN, 5);
}
static void PrintBerryCrushStringOnCard(void)
{
if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.berryCrushPoints)
- PrintString(4, gText_BerryCrush, sData->var_2C3, sTrainerCardStatColors);
+ PrintStatOnBackOfCard(4, gText_BerryCrush, sData->textBerryCrushPts, sTrainerCardStatColors);
}
-static void PrintUnionNumOnCard(void)
+static void BufferUnionRoomStats(void)
{
if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.unionRoomNum)
- ConvertIntToDecimalStringN(sData->var_34F, sData->trainerCard.unionRoomNum, STR_CONV_MODE_RIGHT_ALIGN, 5);
+ ConvertIntToDecimalStringN(sData->textUnionRoomStats, sData->trainerCard.unionRoomNum, STR_CONV_MODE_RIGHT_ALIGN, 5);
}
static void PrintUnionStringOnCard(void)
{
if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.unionRoomNum)
- PrintString(3, gText_UnionTradesAndBattles, sData->var_34F, sTrainerCardStatColors);
+ PrintStatOnBackOfCard(3, gText_UnionTradesAndBattles, sData->textUnionRoomStats, sTrainerCardStatColors);
}
-static void PrintPokeblocksNumOnCard(void)
+static void BufferLinkPokeblocksNum(void)
{
if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.pokeblocksWithFriends)
{
ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5);
- StringExpandPlaceholders(sData->var_395, gText_Var1DarkGreyShadowLightGrey);
+ StringExpandPlaceholders(sData->textNumLinkPokeblocks, gText_NumPokeblocks);
}
}
static void PrintPokeblockStringOnCard(void)
{
if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.pokeblocksWithFriends)
- PrintString(3, gText_PokeblocksWithFriends, sData->var_395, sTrainerCardStatColors);
+ PrintStatOnBackOfCard(3, gText_PokeblocksWithFriends, sData->textNumLinkPokeblocks, sTrainerCardStatColors);
}
-static void PrintContestNumOnCard(void)
+static void BufferLinkContestNum(void)
{
if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.contestsWithFriends)
- ConvertIntToDecimalStringN(sData->var_3DB, sData->trainerCard.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5);
+ ConvertIntToDecimalStringN(sData->textNumLinkContests, sData->trainerCard.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5);
}
static void PrintContestStringOnCard(void)
{
if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.contestsWithFriends)
- PrintString(4, gText_WonContestsWFriends, sData->var_3DB, sTrainerCardStatColors);
+ PrintStatOnBackOfCard(4, gText_WonContestsWFriends, sData->textNumLinkContests, sTrainerCardStatColors);
}
-static void PrintBattleFacilityNumsOnCard(void)
+static void BufferBattleFacilityStats(void)
{
switch (sData->cardType)
{
@@ -1268,14 +1305,14 @@ static void PrintBattleFacilityNumsOnCard(void)
{
ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.battleTowerWins, STR_CONV_MODE_RIGHT_ALIGN, 4);
ConvertIntToDecimalStringN(gStringVar2, sData->trainerCard.battleTowerStraightWins, STR_CONV_MODE_RIGHT_ALIGN, 4);
- StringExpandPlaceholders(sData->var_421, gText_WSlashStraightSlash);
+ StringExpandPlaceholders(sData->textBattleFacilityStat, gText_WinsStraight);
}
break;
case CARD_TYPE_EMERALD:
if (sData->trainerCard.frontierBP)
{
ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.frontierBP, STR_CONV_MODE_RIGHT_ALIGN, 5);
- StringExpandPlaceholders(sData->var_421, gText_Var1DarkLightGreyBP);
+ StringExpandPlaceholders(sData->textBattleFacilityStat, gText_NumBP);
}
break;
case CARD_TYPE_FRLG:
@@ -1289,90 +1326,90 @@ static void PrintBattleFacilityStringOnCard(void)
{
case CARD_TYPE_RS:
if (sData->hasBattleTowerWins)
- PrintString(5, gText_BattleTower, sData->var_421, sTrainerCardTextColors);
+ PrintStatOnBackOfCard(5, gText_BattleTower, sData->textBattleFacilityStat, sTrainerCardTextColors);
break;
case CARD_TYPE_EMERALD:
if (sData->trainerCard.frontierBP)
- PrintString(5, gText_BattlePtsWon, sData->var_421, sTrainerCardStatColors);
+ PrintStatOnBackOfCard(5, gText_BattlePtsWon, sData->textBattleFacilityStat, sTrainerCardStatColors);
break;
case CARD_TYPE_FRLG:
break;
}
}
-static void TrainerCard_PrintPokemonIconsOnCard(void)
+static void PrintPokemonIconsOnCard(void)
{
u8 i;
- u8 buffer[] = {0x05, 0x06, 0x07, 0x08, 0x09, 0x0a};
- u8 buffer2[] = {0x00, 0x04, 0x08, 0x0c, 0x10, 0x14};
+ u8 paletteSlots[PARTY_SIZE] = {5, 6, 7, 8, 9, 10};
+ u8 xOffsets[PARTY_SIZE] = {0, 4, 8, 12, 16, 20};
if (sData->cardType == CARD_TYPE_FRLG)
{
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (sData->trainerCard.monSpecies[i])
{
u8 monSpecies = GetMonIconPaletteIndexFromSpecies(sData->trainerCard.monSpecies[i]);
- WriteSequenceToBgTilemapBuffer(3, 16 * i + 224, buffer2[i] + 3, 15, 4, 4, buffer[monSpecies], 1);
+ WriteSequenceToBgTilemapBuffer(3, 16 * i + 224, xOffsets[i] + 3, 15, 4, 4, paletteSlots[monSpecies], 1);
}
}
}
}
-static void sub_80C41D8(void)
+static void LoadMonIconGfx(void)
{
u8 i;
- CpuSet(gMonIconPalettes, sData->var_468, 0x60);
- switch (sData->trainerCard.var_4E)
+ CpuSet(gMonIconPalettes, sData->monIconPal, 0x60);
+ switch (sData->trainerCard.monIconTint)
{
- case 0:
+ case MON_ICON_TINT_NORMAL:
break;
- case 1:
- TintPalette_CustomTone(sData->var_468, 96, 0, 0, 0);
+ case MON_ICON_TINT_BLACK:
+ TintPalette_CustomTone(sData->monIconPal, 96, 0, 0, 0);
break;
- case 2:
- TintPalette_CustomTone(sData->var_468, 96, 500, 330, 310);
+ case MON_ICON_TINT_PINK:
+ TintPalette_CustomTone(sData->monIconPal, 96, 500, 330, 310);
break;
- case 3:
- TintPalette_SepiaTone(sData->var_468, 96);
+ case MON_ICON_TINT_SEPIA:
+ TintPalette_SepiaTone(sData->monIconPal, 96);
break;
}
- LoadPalette(sData->var_468, 80, 192);
+ LoadPalette(sData->monIconPal, 80, 192);
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (sData->trainerCard.monSpecies[i])
LoadBgTiles(3, GetMonIconTiles(sData->trainerCard.monSpecies[i], 0), 512, 16 * i + 32);
}
}
-static void sub_80C42A4(void)
+static void PrintStickersOnCard(void)
{
u8 i;
- u8 buffer[4] = {0x0b, 0x0c, 0x0d, 0x0e};
+ u8 paletteSlots[4] = {11, 12, 13, 14};
- if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.var_4C == 1)
+ if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.shouldDrawStickers == TRUE)
{
- for (i = 0; i < 3; i++)
+ for (i = 0; i < TRAINER_CARD_STICKER_TYPES; i++)
{
- u8 var_50 = sData->trainerCard.var_50[i];
- if (sData->trainerCard.var_50[i])
- WriteSequenceToBgTilemapBuffer(3, i * 4 + 320, i * 3 + 2, 2, 2, 2, buffer[var_50 - 1], 1);
+ u8 sticker = sData->trainerCard.stickers[i];
+ if (sData->trainerCard.stickers[i])
+ WriteSequenceToBgTilemapBuffer(3, i * 4 + 320, i * 3 + 2, 2, 2, 2, paletteSlots[sticker - 1], 1);
}
}
}
-static void sub_80C4330(void)
+static void LoadStickerGfx(void)
{
- LoadPalette(gUnknown_0856F54C, 176, 32);
- LoadPalette(gUnknown_0856F56C, 192, 32);
- LoadPalette(gUnknown_0856F58C, 208, 32);
- LoadPalette(gUnknown_0856F5AC, 224, 32);
- LoadBgTiles(3, sData->var_17A8, 1024, 128);
+ LoadPalette(sTrainerCardSticker1_Pal, 176, 32);
+ LoadPalette(sTrainerCardSticker2_Pal, 192, 32);
+ LoadPalette(sTrainerCardSticker3_Pal, 208, 32);
+ LoadPalette(sTrainerCardSticker4_Pal, 224, 32);
+ LoadBgTiles(3, sData->stickerTiles, 1024, 128);
}
-static void sub_80C438C(u8 windowId)
+static void DrawTrainerCardWindow(u8 windowId)
{
PutWindowTilemap(windowId);
CopyWindowToVram(windowId, 3);
@@ -1383,31 +1420,31 @@ static u8 SetCardBgsAndPals(void)
switch (sData->bgPalLoadState)
{
case 0:
- LoadBgTiles(3, sData->var_13A8, 1024, 0);
+ LoadBgTiles(3, sData->badgeTiles, ARRAY_COUNT(sData->badgeTiles), 0);
break;
case 1:
- LoadBgTiles(0, sData->var_19A8, 6144, 0);
+ LoadBgTiles(0, sData->cardTiles, 0x1800, 0);
break;
case 2:
if (sData->cardType != CARD_TYPE_FRLG)
{
- LoadPalette(gEmeraldTrainerCardStarPals[sData->trainerCard.stars], 0, 96);
- LoadPalette(sEmeraldTrainerCardBadges_Pal, 48, 32);
- if (sData->trainerCard.gender)
- LoadPalette(sEmeraldTrainerCardFemaleBackground_Pal, 16, 32);
+ LoadPalette(sHoennTrainerCardStarPals[sData->trainerCard.stars], 0, 96);
+ LoadPalette(sHoennTrainerCardBadges_Pal, 48, 32);
+ if (sData->trainerCard.gender != MALE)
+ LoadPalette(sHoennTrainerCardFemaleBg_Pal, 16, 32);
}
else
{
- LoadPalette(gFireRedTrainerCardStarPals[sData->trainerCard.stars], 0, 96);
- LoadPalette(sFireRedTrainerCardBadges_Pal, 48, 32);
- if (sData->trainerCard.gender)
- LoadPalette(sFireRedTrainerCardFemaleBackground_Pal, 16, 32);
+ LoadPalette(sKantoTrainerCardStarPals[sData->trainerCard.stars], 0, 96);
+ LoadPalette(sKantoTrainerCardBadges_Pal, 48, 32);
+ if (sData->trainerCard.gender != MALE)
+ LoadPalette(sKantoTrainerCardFemaleBg_Pal, 16, 32);
}
- LoadPalette(gUnknown_0856F52C, 64, 32);
+ LoadPalette(sTrainerCardGold_Pal, 64, 32);
break;
case 3:
- SetBgTilemapBuffer(0, sData->var_3CA8);
- SetBgTilemapBuffer(2, sData->var_5CA8);
+ SetBgTilemapBuffer(0, sData->cardTilemapBuffer);
+ SetBgTilemapBuffer(2, sData->bgTilemapBuffer);
break;
case 4:
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
@@ -1420,10 +1457,10 @@ static u8 SetCardBgsAndPals(void)
return 0;
}
-static void sub_80C4550(u16 *ptr)
+static void DrawCardScreenBackground(u16 *ptr)
{
s16 i, j;
- u16 *dst = sData->var_5CA8;
+ u16 *dst = sData->bgTilemapBuffer;
for (i = 0; i < 20; i++)
{
@@ -1438,10 +1475,10 @@ static void sub_80C4550(u16 *ptr)
CopyBgTilemapBufferToVram(2);
}
-static void sub_80C45C0(u16* ptr)
+static void DrawCardFrontOrBack(u16* ptr)
{
s16 i, j;
- u16 *dst = sData->var_3CA8;
+ u16 *dst = sData->cardTilemapBuffer;
for (i = 0; i < 20; i++)
{
@@ -1456,19 +1493,19 @@ static void sub_80C45C0(u16* ptr)
CopyBgTilemapBufferToVram(0);
}
-static const u8 gUnknown_0856FB78[] = {7, 7};
-
-static void TrainerCard_PrintStarsAndBadgesOnCard(void)
+static void DrawStarsAndBadgesOnCard(void)
{
+ static const u8 yOffsets[] = {7, 7};
+
s16 i, x;
u16 tileNum = 192;
u8 palNum = 3;
- FillBgTilemapBufferRect(3, 143, 15, gUnknown_0856FB78[sData->isHoenn], sData->trainerCard.stars, 1, 4);
+ FillBgTilemapBufferRect(3, 143, 15, yOffsets[sData->isHoenn], sData->trainerCard.stars, 1, 4);
if (!sData->isLink)
{
x = 4;
- for (i = 0; i < 8; i++, tileNum += 2, x += 3)
+ for (i = 0; i < NUM_BADGES; i++, tileNum += 2, x += 3)
{
if (sData->badgeCount[i])
{
@@ -1482,7 +1519,7 @@ static void TrainerCard_PrintStarsAndBadgesOnCard(void)
CopyBgTilemapBufferToVram(3);
}
-static void sub_80C474C(void)
+static void DrawCardBackStats(void)
{
if (sData->cardType == CARD_TYPE_FRLG)
{
@@ -1525,13 +1562,13 @@ static void sub_80C474C(void)
CopyBgTilemapBufferToVram(3);
}
-static void sub_80C48C8(void)
+static void BlinkTimeColon(void)
{
- if (++sData->var_6 > 60)
+ if (++sData->timeColonBlinkTimer > 60)
{
- sData->var_6 = 0;
- sData->var_7 ^= 1;
- sData->var_529 = 1;
+ sData->timeColonBlinkTimer = 0;
+ sData->timeColonInvisible ^= 1;
+ sData->timeColonNeedDraw = TRUE;
}
}
@@ -1541,28 +1578,30 @@ u8 GetTrainerCardStars(u8 cardId)
return trainerCards[cardId].stars;
}
-static void sub_80C4918(void)
+#define tFlipState data[0]
+
+static void FlipTrainerCard(void)
{
- u8 taskId = CreateTask(sub_80C4960, 0);
- sub_80C4960(taskId);
+ u8 taskId = CreateTask(Task_DoCardFlipTask, 0);
+ Task_DoCardFlipTask(taskId);
SetHBlankCallback(HblankCb_TrainerCard);
}
-static bool8 sub_80C4940(void)
+static bool8 IsCardFlipTaskActive(void)
{
- if (FindTaskIdByFunc(sub_80C4960) == 0xFF)
+ if (FindTaskIdByFunc(Task_DoCardFlipTask) == 0xFF)
return TRUE;
else
return FALSE;
}
-static void sub_80C4960(u8 taskId)
+static void Task_DoCardFlipTask(u8 taskId)
{
- while(gUnknown_0856FB28[gTasks[taskId].data[0]](&gTasks[taskId]))
+ while(sTrainerCardFlipTasks[gTasks[taskId].tFlipState](&gTasks[taskId]))
;
}
-static bool8 sub_80C4998(struct Task* task)
+static bool8 Task_BeginCardFlip(struct Task* task)
{
u32 i;
@@ -1572,11 +1611,11 @@ static bool8 sub_80C4998(struct Task* task)
ScanlineEffect_Clear();
for (i = 0; i < 160; i++)
gScanlineEffectRegBuffers[1][i] = 0;
- task->data[0]++;
+ task->tFlipState++;
return FALSE;
}
-static bool8 sub_80C49D8(struct Task* task)
+static bool8 Task_AnimateCardFlipDown(struct Task* task)
{
u32 r4, r5, r10, r7, r6, var_24, r9, var;
s16 i;
@@ -1617,12 +1656,12 @@ static bool8 sub_80C49D8(struct Task* task)
sData->allowDMACopy = TRUE;
if (task->data[1] >= 77)
- task->data[0]++;
+ task->tFlipState++;
return FALSE;
}
-static bool8 sub_80C4B08(struct Task* task)
+static bool8 Task_DrawFlippedCardSide(struct Task* task)
{
sData->allowDMACopy = FALSE;
if (sub_8087598() == TRUE)
@@ -1630,71 +1669,73 @@ static bool8 sub_80C4B08(struct Task* task)
do
{
- switch (sData->var_4)
+ switch (sData->flipDrawState)
{
case 0:
FillWindowPixelBuffer(1, PIXEL_FILL(0));
FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20);
break;
case 1:
- if (!sData->var_8)
+ if (!sData->onBack)
{
- if (!PrintStringsOnCardPage2())
+ if (!PrintAllOnCardBack())
return FALSE;
}
else
{
- if (!PrintAllOnCardPage1())
+ if (!PrintAllOnCardFront())
return FALSE;
}
break;
case 2:
- if (!sData->var_8)
- sub_80C45C0(sData->var_A48);
+ if (!sData->onBack)
+ DrawCardFrontOrBack(sData->backTilemap);
else
- sub_80C438C(1);
+ DrawTrainerCardWindow(1);
break;
case 3:
- if (!sData->var_8)
- sub_80C474C();
+ if (!sData->onBack)
+ DrawCardBackStats();
else
FillWindowPixelBuffer(2, PIXEL_FILL(0));
break;
case 4:
- if (sData->var_8)
- sub_80C4FF0();
+ if (sData->onBack)
+ CreateTrainerCardTrainerPic();
break;
default:
- task->data[0]++;
+ task->tFlipState++;
sData->allowDMACopy = TRUE;
- sData->var_4 = 0;
+ sData->flipDrawState = 0;
return FALSE;
}
- sData->var_4++;
+ sData->flipDrawState++;
} while (gReceivedRemoteLinkPlayers == 0);
return FALSE;
}
-static bool8 sub_80C4C1C(struct Task* task)
+static bool8 Task_SetCardFlipped(struct Task* task)
{
sData->allowDMACopy = FALSE;
- if (sData->var_8)
+
+ // If on back of card, draw front of card because its being flipped
+ if (sData->onBack)
{
- sub_80C438C(2);
- sub_80C4550(sData->var_EF8);
- sub_80C45C0(sData->var_598);
- TrainerCard_PrintStarsAndBadgesOnCard();
+ DrawTrainerCardWindow(2);
+ DrawCardScreenBackground(sData->bgTilemap);
+ DrawCardFrontOrBack(sData->frontTilemap);
+ DrawStarsAndBadgesOnCard();
}
- sub_80C438C(1);
- sData->var_8 ^= 1;
- task->data[0]++;
+ DrawTrainerCardWindow(1);
+ sData->onBack ^= 1;
+ task->tFlipState++;
sData->allowDMACopy = TRUE;
PlaySE(SE_RG_CARD2);
return FALSE;
}
-static bool8 sub_80C4C84(struct Task* task)
+static bool8 Task_AnimateCardFlipUp(struct Task* task)
{
u32 r4, r5, r10, r7, r6, var_24, r9, var;
s16 i;
@@ -1735,17 +1776,17 @@ static bool8 sub_80C4C84(struct Task* task)
sData->allowDMACopy = TRUE;
if (task->data[1] <= 0)
- task->data[0]++;
+ task->tFlipState++;
return FALSE;
}
-static bool8 sub_80C4DB0(struct Task *task)
+static bool8 Task_EndCardFlip(struct Task *task)
{
ShowBg(1);
ShowBg(3);
SetHBlankCallback(NULL);
- DestroyTask(FindTaskIdByFunc(sub_80C4960));
+ DestroyTask(FindTaskIdByFunc(Task_DoCardFlipTask));
return FALSE;
}
@@ -1754,9 +1795,9 @@ void ShowPlayerTrainerCard(void (*callback)(void))
sData = AllocZeroed(sizeof(*sData));
sData->callback2 = callback;
if (callback == CB2_ReshowFrontierPass)
- sData->var_52C = 0x7FFF;
+ sData->blendColor = RGB_WHITE;
else
- sData->var_52C = 0;
+ sData->blendColor = RGB_BLACK;
if (InUnionRoom() == TRUE)
sData->isLink = TRUE;
@@ -1778,18 +1819,18 @@ void ShowTrainerCardInLink(u8 cardId, void (*callback)(void))
SetMainCallback2(CB2_InitTrainerCard);
}
-static void sub_80C4EE4(void)
+static void InitTrainerCardData(void)
{
u8 i;
- sData->var_0 = 0;
- sData->var_6 = gSaveBlock2Ptr->playTimeVBlanks;
- sData->var_7 = 0;
- sData->var_8 = 0;
- sData->var_528 = 0;
+ sData->mainState = 0;
+ sData->timeColonBlinkTimer = gSaveBlock2Ptr->playTimeVBlanks;
+ sData->timeColonInvisible = FALSE;
+ sData->onBack = FALSE;
+ sData->flipBlendY = 0;
sData->cardType = GetSetCardType();
- for (i = 0; i < 4; i++)
- CopyEasyChatWord(sData->var_19[i], sData->trainerCard.var_28[i]);
+ for (i = 0; i < TRAINER_CARD_PROFILE_LENGTH; i++)
+ CopyEasyChatWord(sData->easyChatProfile[i], sData->trainerCard.easyChatProfile[i]);
}
static u8 GetSetCardType(void)
@@ -1833,23 +1874,23 @@ static u8 VersionToCardType(u8 version)
return CARD_TYPE_RS;
}
-static void sub_80C4FF0(void)
+static void CreateTrainerCardTrainerPic(void)
{
if (InUnionRoom() == TRUE && gReceivedRemoteLinkPlayers == 1)
{
- sub_818D938(FacilityClassToPicIndex(sData->trainerCard.var_4F),
+ CreateTrainerCardTrainerPicSprite(FacilityClassToPicIndex(sData->trainerCard.facilityClass),
TRUE,
- gUnknown_0856FB18[sData->isHoenn][sData->trainerCard.gender][0],
- gUnknown_0856FB18[sData->isHoenn][sData->trainerCard.gender][1],
+ sTrainerPicOffset[sData->isHoenn][sData->trainerCard.gender][0],
+ sTrainerPicOffset[sData->isHoenn][sData->trainerCard.gender][1],
8,
2);
}
else
{
- sub_818D938(FacilityClassToPicIndex(gUnknown_0856FB20[sData->cardType][sData->trainerCard.gender]),
+ CreateTrainerCardTrainerPicSprite(FacilityClassToPicIndex(sTrainerPicFacilityClass[sData->cardType][sData->trainerCard.gender]),
TRUE,
- gUnknown_0856FB18[sData->isHoenn][sData->trainerCard.gender][0],
- gUnknown_0856FB18[sData->isHoenn][sData->trainerCard.gender][1],
+ sTrainerPicOffset[sData->isHoenn][sData->trainerCard.gender][0],
+ sTrainerPicOffset[sData->isHoenn][sData->trainerCard.gender][1],
8,
2);
}
diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c
index 99a3fd4c5..d2cb634f0 100644
--- a/src/trainer_pokemon_sprites.c
+++ b/src/trainer_pokemon_sprites.c
@@ -331,7 +331,7 @@ static u16 sub_818D65C(u16 species, u32 otId, u32 personality, bool8 isFrontPic,
return 0;
}
-static u16 sub_818D6CC(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId, bool8 isTrainer)
+static u16 CreateTrainerCardSprite(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId, bool8 isTrainer)
{
u8 *framePics;
@@ -366,9 +366,10 @@ u16 sub_818D834(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 pal
return sub_818D65C(species, otId, personality, isFrontPic, paletteSlot, windowId, FALSE);
}
-u16 sub_818D864(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId)
+// Unused, FRLG only
+u16 CreateTrainerCardMonIconSprite(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId)
{
- return sub_818D6CC(species, otId, personality, isFrontPic, destX, destY, paletteSlot, windowId, FALSE);
+ return CreateTrainerCardSprite(species, otId, personality, isFrontPic, destX, destY, paletteSlot, windowId, FALSE);
}
u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag)
@@ -386,9 +387,9 @@ u16 sub_818D904(u16 species, bool8 isFrontPic, u8 paletteSlot, u8 windowId)
return sub_818D65C(species, 0, 0, isFrontPic, paletteSlot, windowId, TRUE);
}
-u16 sub_818D938(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId)
+u16 CreateTrainerCardTrainerPicSprite(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId)
{
- return sub_818D6CC(species, 0, 0, isFrontPic, destX, destY, paletteSlot, windowId, TRUE);
+ return CreateTrainerCardSprite(species, 0, 0, isFrontPic, destX, destY, paletteSlot, windowId, TRUE);
}
u16 PlayerGenderToFrontTrainerPicId_Debug(u8 gender, bool8 getClass)
diff --git a/src/tv.c b/src/tv.c
index 04cd6f70a..95f816745 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -1943,7 +1943,7 @@ void sub_80EDB44(void)
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->rivalTrainer.kind = TVSHOW_TODAYS_RIVAL_TRAINER;
show->rivalTrainer.active = FALSE;
- for (i = FLAG_BADGE01_GET, nBadges = 0; i < FLAG_BADGE01_GET + 8; i ++)
+ for (i = FLAG_BADGE01_GET, nBadges = 0; i < FLAG_BADGE01_GET + NUM_BADGES; i ++)
{
if (FlagGet(i))
{
diff --git a/src/union_room.c b/src/union_room.c
index 733909342..a3ac02797 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -3376,7 +3376,7 @@ u8 sub_8016FF0(struct UnkStruct_Main4 * a0, u32 a1)
bool32 sub_8017020(const u8 *src)
{
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
DrawDialogueFrame(0, 1);
StringExpandPlaceholders(gStringVar4, src);
AddTextPrinterWithCustomSpeedForMessage(FALSE, 1);
@@ -3400,7 +3400,7 @@ bool8 PrintOnTextbox(u8 *textState, const u8 *str)
switch (*textState)
{
case 0:
- sub_81973A4();
+ LoadMessageBoxAndBorderGfx();
DrawDialogueFrame(0, 1);
StringExpandPlaceholders(gStringVar4, str);
AddTextPrinterForMessage_2(TRUE);
@@ -4316,9 +4316,9 @@ void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2)
ConvertIntToDecimalStringN(arg1->field_C0[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->field_C0[2]);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_CARD_PROFILE_LENGTH; i++)
{
- CopyEasyChatWord(arg1->field_C0[i + 3], trainerCard->var_28[i]);
+ CopyEasyChatWord(arg1->field_C0[i + 3], trainerCard->easyChatProfile[i]);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, arg1->field_C0[i + 3]);
}