diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_main.c | 2 | ||||
-rw-r--r-- | src/battle_script_commands.c | 4 | ||||
-rw-r--r-- | src/battle_setup.c | 2 | ||||
-rw-r--r-- | src/battle_util2.c | 6 | ||||
-rw-r--r-- | src/berry_fix_graphics.c (renamed from src/unk_81BAD84.c) | 24 | ||||
-rw-r--r-- | src/berry_fix_program.c | 86 | ||||
-rwxr-xr-x | src/berry_powder.c | 112 | ||||
-rw-r--r-- | src/cable_club.c | 8 | ||||
-rw-r--r-- | src/contest_link_80F57C4.c | 256 | ||||
-rw-r--r-- | src/data/graphics/slot_machine.h | 3 | ||||
-rwxr-xr-x | src/field_message_box.c | 2 | ||||
-rw-r--r-- | src/field_poison.c | 2 | ||||
-rw-r--r-- | src/graphics.c | 32 | ||||
-rwxr-xr-x | src/item_menu.c | 34 | ||||
-rw-r--r-- | src/main_menu.c | 2 | ||||
-rw-r--r-- | src/match_call.c | 6 | ||||
-rw-r--r-- | src/menu.c | 22 | ||||
-rw-r--r-- | src/menu_specialized.c | 2 | ||||
-rwxr-xr-x | src/party_menu.c | 2 | ||||
-rw-r--r-- | src/player_pc.c | 6 | ||||
-rw-r--r-- | src/pokemon.c | 109 | ||||
-rw-r--r-- | src/pokemon_storage_system.c | 4 | ||||
-rw-r--r-- | src/pokenav.c | 30 | ||||
-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-x | src/pokenav_match_call_1.c (renamed from src/pokenav_unk_3.c) | 0 | ||||
-rwxr-xr-x | src/pokenav_match_call_2.c (renamed from src/pokenav_unk_4.c) | 2 | ||||
-rw-r--r-- | src/pokenav_menu_handler_1.c | 513 | ||||
-rw-r--r-- | src/pokenav_menu_handler_2.c (renamed from src/pokenav_unk_2.c) | 280 | ||||
-rwxr-xr-x | src/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.c | 466 | ||||
-rw-r--r-- | src/reset_rtc_screen.c | 2 | ||||
-rw-r--r-- | src/rotating_tile_puzzle.c | 89 | ||||
-rw-r--r-- | src/scrcmd.c | 2 | ||||
-rw-r--r-- | src/slot_machine.c | 2375 | ||||
-rw-r--r-- | src/start_menu.c | 20 | ||||
-rw-r--r-- | src/strings.c | 6 | ||||
-rwxr-xr-x | src/trainer_card.c | 877 | ||||
-rw-r--r-- | src/trainer_pokemon_sprites.c | 11 | ||||
-rw-r--r-- | src/tv.c | 2 | ||||
-rw-r--r-- | src/union_room.c | 8 |
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) @@ -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]); } |