diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_arena.c | 27 | ||||
-rw-r--r-- | src/battle_dome.c | 46 | ||||
-rw-r--r-- | src/battle_factory.c | 31 | ||||
-rw-r--r-- | src/battle_message.c | 2 | ||||
-rw-r--r-- | src/battle_palace.c | 34 | ||||
-rw-r--r-- | src/battle_pike.c | 35 | ||||
-rw-r--r-- | src/battle_pyramid.c | 41 | ||||
-rw-r--r-- | src/battle_tent.c | 48 | ||||
-rw-r--r-- | src/battle_tower.c | 316 | ||||
-rw-r--r-- | src/data/battle_frontier/battle_frontier_trainers.h | 12 | ||||
-rw-r--r-- | src/data/battle_frontier/trainer_hill.h | 4 | ||||
-rw-r--r-- | src/data/pokemon/trainer_class_lookups.h | 4 | ||||
-rw-r--r-- | src/frontier_util.c | 388 | ||||
-rw-r--r-- | src/link.c | 2 | ||||
-rw-r--r-- | src/mystery_gift.c | 2 | ||||
-rw-r--r-- | src/new_game.c | 4 | ||||
-rw-r--r-- | src/overworld.c | 2 | ||||
-rw-r--r-- | src/pokemon.c | 2 | ||||
-rw-r--r-- | src/record_mixing.c | 4 | ||||
-rw-r--r-- | src/recorded_battle.c | 8 | ||||
-rw-r--r-- | src/reset_rtc_screen.c | 2 | ||||
-rw-r--r-- | src/save.c | 4 | ||||
-rwxr-xr-x | src/script_pokemon_util_80F87D8.c | 2 | ||||
-rwxr-xr-x | src/trainer_card.c | 4 | ||||
-rw-r--r-- | src/tv.c | 31 |
25 files changed, 538 insertions, 517 deletions
diff --git a/src/battle_arena.c b/src/battle_arena.c index 2f11b504b..c3d227376 100644 --- a/src/battle_arena.c +++ b/src/battle_arena.c @@ -22,6 +22,7 @@ #include "constants/songs.h" #include "constants/battle_string_ids.h" #include "constants/battle_frontier.h" +#include "constants/frontier_util.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/rgb.h" @@ -786,14 +787,14 @@ static void InitArenaChallenge(void) bool32 isCurrent; u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - gSaveBlock2Ptr->frontier.challengeOutcome = 0; + gSaveBlock2Ptr->frontier.challengeStatus = 0; gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.challengePaused = FALSE; gSaveBlock2Ptr->frontier.field_CA9_b = 0; if (lvlMode != FRONTIER_LVL_50) - isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x80; + isCurrent = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_ARENA_OPEN; else - isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x40; + isCurrent = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_ARENA_50; if (!isCurrent) gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = 0; @@ -816,9 +817,9 @@ static void GetArenaData(void) break; case 2: if (lvlMode != FRONTIER_LVL_50) - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x80; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_ARENA_OPEN; else - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x40; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_ARENA_50; break; } } @@ -839,16 +840,16 @@ static void SetArenaData(void) if (lvlMode != FRONTIER_LVL_50) { if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= 0x80; + gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_ARENA_OPEN; else - gSaveBlock2Ptr->frontier.field_CDC &= ~(0x80); + gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_ARENA_OPEN); } else { if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= 0x40; + gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_ARENA_50; else - gSaveBlock2Ptr->frontier.field_CDC &= ~(0x40); + gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_ARENA_50); } break; } @@ -856,10 +857,10 @@ static void SetArenaData(void) static void sub_81A5AC4(void) { - gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005; + gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_0, 0); - gSaveBlock2Ptr->frontier.field_CA9_a = 1; - sub_81A4C30(); + gSaveBlock2Ptr->frontier.challengePaused = TRUE; + SaveGameFrontier(); } static void SetArenaRewardItem(void) diff --git a/src/battle_dome.c b/src/battle_dome.c index 234df1947..fc254e74d 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -1104,16 +1104,16 @@ static void (* const sBattleDomeFunctions[])(void) = InitDomeTrainers, }; -static const u32 gUnknown_0860D0EC[][2] = +static const u32 sWinStreakFlags[][2] = { - {0x00000004, 0x00000008}, - {0x00100000, 0x00200000}, + {STREAK_DOME_SINGLES_50, STREAK_DOME_SINGLES_OPEN}, + {STREAK_DOME_DOUBLES_50, STREAK_DOME_DOUBLES_OPEN}, }; -static const u32 gUnknown_0860D0FC[][2] = +static const u32 sWinStreakMasks[][2] = { - {0xfffffffb, 0xfffffff7}, - {0xffefffff, 0xffdfffff}, + {~(STREAK_DOME_SINGLES_50), ~(STREAK_DOME_SINGLES_OPEN)}, + {~(STREAK_DOME_DOUBLES_50), ~(STREAK_DOME_DOUBLES_OPEN)}, }; static const u8 sIdToOpponentId[DOME_TOURNAMENT_TRAINERS_COUNT][DOME_ROUNDS_COUNT] = @@ -2262,11 +2262,11 @@ static void InitDomeChallenge(void) u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - gSaveBlock2Ptr->frontier.challengeOutcome = 0; + gSaveBlock2Ptr->frontier.challengeStatus = 0; gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.challengePaused = FALSE; gSaveBlock2Ptr->frontier.field_CA9_b = 0; - if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode])) + if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode])) gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = 0; SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); @@ -2284,7 +2284,7 @@ static void GetDomeData(void) gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; break; case 1: - gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]) != 0); + gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]) != 0); break; case 2: gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_0; @@ -2332,8 +2332,8 @@ static void GetDomeData(void) break; case 8: ClearSelectedPartyOrder(); - gSelectedOrderFromParty[0] = gSaveBlock2Ptr->frontier.field_CB0; - gSelectedOrderFromParty[1] = gSaveBlock2Ptr->frontier.field_CB0 >> 8; + gSelectedOrderFromParty[0] = gSaveBlock2Ptr->frontier.selectedPartyMons[3]; + gSelectedOrderFromParty[1] = gSaveBlock2Ptr->frontier.selectedPartyMons[3] >> 8; break; case 9: gSpecialVar_Result = (gSaveBlock2Ptr->frontier.field_D0A * 2) - 3 + gSaveBlock2Ptr->frontier.field_D0B; @@ -2353,9 +2353,9 @@ static void SetDomeData(void) break; case 1: if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860D0EC[battleMode][lvlMode]; + gSaveBlock2Ptr->frontier.winStreakActiveFlags |= sWinStreakFlags[battleMode][lvlMode]; else - gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860D0FC[battleMode][lvlMode]; + gSaveBlock2Ptr->frontier.winStreakActiveFlags &= sWinStreakMasks[battleMode][lvlMode]; break; case 2: gSaveBlock2Ptr->frontier.field_D08_0 = gSpecialVar_0x8006; @@ -2402,7 +2402,7 @@ static void SetDomeData(void) } break; case 8: - gSaveBlock2Ptr->frontier.field_CB0 = T1_READ_16(gSelectedOrderFromParty); + gSaveBlock2Ptr->frontier.selectedPartyMons[3] = T1_READ_16(gSelectedOrderFromParty); break; } } @@ -2432,12 +2432,12 @@ static void InitDomeTrainers(void) gSaveBlock2Ptr->frontier.domeTrainers[0].eliminatedAt = 0; gSaveBlock2Ptr->frontier.domeTrainers[0].unk3 = 0; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { gSaveBlock2Ptr->frontier.domeMonIds[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_SPECIES, NULL); for (j = 0; j < MAX_MON_MOVES; j++) gSaveBlock2Ptr->frontier.field_EFC[i].moves[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_MOVE1 + j, NULL); - for (j = 0; j < 6; j++) + for (j = 0; j < NUM_STATS; j++) gSaveBlock2Ptr->frontier.field_EFC[i].evs[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_HP_EV + j, NULL); gSaveBlock2Ptr->frontier.field_EFC[i].nature = GetNature(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1]); @@ -2500,9 +2500,9 @@ static void InitDomeTrainers(void) monTypesBits = 0; statSums[0] = 0; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - trainerId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; // Great variable choice, gamefreak. + trainerId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_ATK, NULL); statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_DEF, NULL); statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPATK, NULL); @@ -3329,10 +3329,10 @@ static void SetDomeOpponentGraphicsId(void) static void sub_81902F8(void) { - gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005; + gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_0, 0); - gSaveBlock2Ptr->frontier.field_CA9_a = 1; - sub_81A4C30(); + gSaveBlock2Ptr->frontier.challengePaused = TRUE; + SaveGameFrontier(); } static void UpdateDomeStreaks(void) @@ -6017,7 +6017,7 @@ static void sub_8194F58(void) species[0] = 0; species[1] = 0; species[2] = 0; - if ((gSaveBlock2Ptr->frontier.field_D0A != -gSaveBlock2Ptr->frontier.field_D0B) && gSaveBlock2Ptr->frontier.challengeOutcome != 1) + if ((gSaveBlock2Ptr->frontier.field_D0A != -gSaveBlock2Ptr->frontier.field_D0B) && gSaveBlock2Ptr->frontier.challengeStatus != CHALLENGE_STATUS_SAVING) return; statSums = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT); diff --git a/src/battle_factory.c b/src/battle_factory.c index 44a82b39c..cc1fd12b7 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -11,6 +11,7 @@ #include "constants/species.h" #include "constants/battle_ai.h" #include "constants/battle_frontier.h" +#include "constants/frontier_util.h" #include "constants/layouts.h" #include "constants/trainers.h" #include "constants/moves.h" @@ -131,16 +132,16 @@ static void (* const sBattleFactoryFunctions[])(void) = RestorePlayerPartyHeldItems, }; -static const u32 gUnknown_08612164[][2] = +static const u32 sWinStreakFlags[][2] = { - {0x100, 0x200}, - {0x1000000, 0x2000000}, + {STREAK_FACTORY_SINGLES_50, STREAK_FACTORY_SINGLES_OPEN}, + {STREAK_FACTORY_DOUBLES_50, STREAK_FACTORY_DOUBLES_OPEN}, }; -static const u32 gUnknown_08612174[][2] = +static const u32 sWinStreakMasks[][2] = { - {0xfffffeff, 0xfffffdff}, - {0xfeffffff, 0xfdffffff}, + {~(STREAK_FACTORY_SINGLES_50), ~(STREAK_FACTORY_SINGLES_OPEN)}, + {~(STREAK_FACTORY_DOUBLES_50), ~(STREAK_FACTORY_DOUBLES_OPEN)}, }; static const u8 sFixedIVTable[][2] = @@ -187,11 +188,11 @@ static void InitFactoryChallenge(void) u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - gSaveBlock2Ptr->frontier.challengeOutcome = 0; + gSaveBlock2Ptr->frontier.challengeStatus = 0; gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.challengePaused = FALSE; gSaveBlock2Ptr->frontier.field_CA9_b = 0; - if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_08612164[battleMode][lvlMode])) + if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode])) { gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] = 0; gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode] = 0; @@ -218,7 +219,7 @@ static void GetBattleFactoryData(void) gSpecialVar_Result = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; break; case 2: - gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_08612164[battleMode][lvlMode]) != 0); + gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]) != 0); break; case 3: gSpecialVar_Result = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode]; @@ -238,9 +239,9 @@ static void SetBattleFactoryData(void) break; case 2: if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_08612164[battleMode][lvlMode]; + gSaveBlock2Ptr->frontier.winStreakActiveFlags |= sWinStreakFlags[battleMode][lvlMode]; else - gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_08612174[battleMode][lvlMode]; + gSaveBlock2Ptr->frontier.winStreakActiveFlags &= sWinStreakMasks[battleMode][lvlMode]; break; case 3: if (sPerformedRentalSwap == TRUE) @@ -254,10 +255,10 @@ static void SetBattleFactoryData(void) static void sub_81A613C(void) { - gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005; + gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_0, 0); - gSaveBlock2Ptr->frontier.field_CA9_a = 1; - sub_81A4C30(); + gSaveBlock2Ptr->frontier.challengePaused = TRUE; + SaveGameFrontier(); } static void nullsub_75(void) diff --git a/src/battle_message.c b/src/battle_message.c index 1701f26ec..f60527d7a 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1195,7 +1195,7 @@ const u8 gText_Love[] = _("love"); const u8 gText_SpaceAndSpace[] = _(" and "); const u8 gText_CommaSpace[] = _(", "); const u8 gText_Space2[] = _(" "); -const u8 gText_ScrollTextUp[] = _("\l"); +const u8 gText_LineBreak[] = _("\l"); const u8 gText_NewLine[] = _("\n"); const u8 gText_Are[] = _("are"); const u8 gText_Are2[] = _("are"); diff --git a/src/battle_palace.c b/src/battle_palace.c index 61ccfedfd..ed3fb751e 100644 --- a/src/battle_palace.c +++ b/src/battle_palace.c @@ -8,6 +8,8 @@ #include "item.h" #include "string_util.h" #include "constants/items.h" +#include "constants/battle_frontier.h" +#include "constants/frontier_util.h" // This file's functions. static void sub_8195980(void); @@ -39,16 +41,16 @@ static void (* const sBattlePalaceFunctions[])(void) = static const u16 gUnknown_0860DE78[] = {ITEM_HP_UP, ITEM_PROTEIN, ITEM_IRON, ITEM_CALCIUM, ITEM_CARBOS, ITEM_ZINC}; static const u16 gUnknown_0860DE84[] = {ITEM_BRIGHT_POWDER, ITEM_WHITE_HERB, ITEM_QUICK_CLAW, ITEM_LEFTOVERS, ITEM_MENTAL_HERB, ITEM_KINGS_ROCK, ITEM_FOCUS_BAND, ITEM_SCOPE_LENS, ITEM_CHOICE_BAND}; -static const u32 gUnknown_0860DE98[][2] = +static const u32 sWinStreakFlags[][2] = { - {0x10, 0x20}, - {0x400000, 0x800000}, + {STREAK_PALACE_SINGLES_50, STREAK_PALACE_SINGLES_OPEN}, + {STREAK_PALACE_DOUBLES_50, STREAK_PALACE_DOUBLES_OPEN}, }; -static const u32 gUnknown_0860DEA8[][2] = +static const u32 sWinStreakMasks[][2] = { - {~0x10, ~0x20}, - {~0x400000, ~0x800000}, + {~(STREAK_PALACE_SINGLES_50), ~(STREAK_PALACE_SINGLES_OPEN)}, + {~(STREAK_PALACE_DOUBLES_50), ~(STREAK_PALACE_DOUBLES_OPEN)}, }; // code @@ -62,11 +64,11 @@ static void sub_8195980(void) u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - gSaveBlock2Ptr->frontier.challengeOutcome = 0; + gSaveBlock2Ptr->frontier.challengeStatus = 0; gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.challengePaused = FALSE; gSaveBlock2Ptr->frontier.field_CA9_b = 0; - if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode])) + if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode])) gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0; SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); @@ -87,7 +89,7 @@ static void sub_8195A38(void) gSpecialVar_Result = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; break; case 2: - gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]) != 0); + gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]) != 0); break; } } @@ -107,9 +109,9 @@ static void sub_8195AE4(void) break; case 2: if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860DE98[battleMode][lvlMode]; + gSaveBlock2Ptr->frontier.winStreakActiveFlags |= sWinStreakFlags[battleMode][lvlMode]; else - gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860DEA8[battleMode][lvlMode]; + gSaveBlock2Ptr->frontier.winStreakActiveFlags &= sWinStreakMasks[battleMode][lvlMode]; break; } } @@ -144,7 +146,7 @@ static void sub_8195C7C(void) u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999) + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < MAX_STREAK) { gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++; @@ -156,10 +158,10 @@ static void sub_8195C7C(void) static void sub_8195CE4(void) { - gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005; + gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_0, 0); - gSaveBlock2Ptr->frontier.field_CA9_a = 1; - sub_81A4C30(); + gSaveBlock2Ptr->frontier.challengePaused = TRUE; + SaveGameFrontier(); } static void sub_8195D28(void) diff --git a/src/battle_pike.c b/src/battle_pike.c index 575c4235b..c2f8ae417 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -15,6 +15,7 @@ #include "battle_setup.h" #include "constants/event_objects.h" #include "constants/battle_frontier.h" +#include "constants/frontier_util.h" #include "constants/abilities.h" #include "constants/easy_chat.h" #include "constants/layouts.h" @@ -537,7 +538,7 @@ static bool8 (* const sStatusInflictionScreenFadeFuncs[])(struct Task *) = StatusInflictionFadeOut, StatusInflictionFadeIn }; -static const u32 gUnknown_08612690[] = {0x400, 0x800}; +static const u32 sWinStreakFlags[] = {STREAK_PIKE_50, STREAK_PIKE_OPEN}; // code void CallBattlePikeFunction(void) @@ -636,9 +637,9 @@ static void GetBattlePikeData(void) break; case 4: if (lvlMode != FRONTIER_LVL_50) - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x800; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PIKE_OPEN; else - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x400; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PIKE_50; break; } } @@ -653,31 +654,31 @@ static void SetBattlePikeData(void) gSaveBlock2Ptr->frontier.field_E02 = gSpecialVar_0x8006; break; case 1: - if (gSpecialVar_0x8006 <= 9999) + if (gSpecialVar_0x8006 <= MAX_STREAK) gSaveBlock2Ptr->frontier.pikeWinStreaks[gSaveBlock2Ptr->frontier.lvlMode] = gSpecialVar_0x8006; break; case 2: - if (gSpecialVar_0x8006 <= 9999 && gSaveBlock2Ptr->frontier.pikeRecordStreaks[gSaveBlock2Ptr->frontier.lvlMode] < gSpecialVar_0x8006) + if (gSpecialVar_0x8006 <= MAX_STREAK && gSaveBlock2Ptr->frontier.pikeRecordStreaks[gSaveBlock2Ptr->frontier.lvlMode] < gSpecialVar_0x8006) gSaveBlock2Ptr->frontier.pikeRecordStreaks[gSaveBlock2Ptr->frontier.lvlMode] = gSpecialVar_0x8006; break; case 3: - if (gSpecialVar_0x8006 <= 9999) + if (gSpecialVar_0x8006 <= MAX_STREAK) gSaveBlock2Ptr->frontier.pikeTotalStreaks[gSaveBlock2Ptr->frontier.lvlMode] = gSpecialVar_0x8006; break; case 4: if (lvlMode != FRONTIER_LVL_50) { if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= 0x800; + gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_PIKE_OPEN; else - gSaveBlock2Ptr->frontier.field_CDC &= ~(0x800); + gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_PIKE_OPEN); } else { if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= 0x400; + gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_PIKE_50; else - gSaveBlock2Ptr->frontier.field_CDC &= ~(0x400); + gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_PIKE_50); } break; } @@ -708,9 +709,9 @@ static void sub_81A740C(void) static void sub_81A7418(void) { - gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005; + gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_0, 0); - gSaveBlock2Ptr->frontier.field_CA9_a = 1; + gSaveBlock2Ptr->frontier.challengePaused = TRUE; save_serialize_map(); TrySavingData(SAVE_LINK); } @@ -1587,7 +1588,7 @@ static void BackupMonHeldItems(void) { u8 i; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { int heldItem = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_HELD_ITEM); @@ -1599,7 +1600,7 @@ static void RestoreMonHeldItems(void) { u8 i; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { SetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_HELD_ITEM, @@ -1611,10 +1612,10 @@ static void InitPikeChallenge(void) { u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - gSaveBlock2Ptr->frontier.challengeOutcome = 0; + gSaveBlock2Ptr->frontier.challengeStatus = 0; gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = 0; - if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_08612690[lvlMode])) + gSaveBlock2Ptr->frontier.challengePaused = FALSE; + if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[lvlMode])) gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] = 0; gTrainerBattleOpponent_A = 0; diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 99076f173..de53c9a47 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -30,6 +30,7 @@ #include "constants/battle_pyramid.h" #include "constants/event_objects.h" #include "constants/event_object_movement_constants.h" +#include "constants/frontier_util.h" #include "constants/items.h" #include "constants/layouts.h" #include "constants/maps.h" @@ -514,7 +515,7 @@ static const u8 sTrainerTextGroups[50][2] = {FACILITY_CLASS_SAILOR, 2}, {FACILITY_CLASS_COLLECTOR, 2}, {FACILITY_CLASS_PKMN_BREEDER_M, 2}, - {FACILITY_CLASS_POKEMON_BREEDER_F, 3}, + {FACILITY_CLASS_PKMN_BREEDER_F, 3}, {FACILITY_CLASS_PKMN_RANGER_M, 2}, {FACILITY_CLASS_PKMN_RANGER_F, 3}, {FACILITY_CLASS_LASS, 3}, @@ -842,13 +843,13 @@ static void InitPyramidChallenge(void) bool32 isCurrent; u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - gSaveBlock2Ptr->frontier.challengeOutcome = 0; + gSaveBlock2Ptr->frontier.challengeStatus = 0; gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.challengePaused = FALSE; if (lvlMode != FRONTIER_LVL_50) - isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x2000; + isCurrent = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_OPEN; else - isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x1000; + isCurrent = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_50; if (!isCurrent) { @@ -875,9 +876,9 @@ static void GetBattlePyramidData(void) break; case 2: if (lvlMode != FRONTIER_LVL_50) - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x2000; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_OPEN; else - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x1000; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_50; break; case 3: gSpecialVar_Result = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_50]; @@ -886,10 +887,10 @@ static void GetBattlePyramidData(void) gSpecialVar_Result = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN]; break; case 5: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x1000; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_50; break; case 6: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x2000; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_OPEN; break; } } @@ -910,16 +911,16 @@ static void SetBattlePyramidData(void) if (lvlMode != FRONTIER_LVL_50) { if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= 0x2000; + gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_PYRAMID_OPEN; else - gSaveBlock2Ptr->frontier.field_CDC &= ~(0x2000); + gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_PYRAMID_OPEN); } else { if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= 0x1000; + gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_PYRAMID_50; else - gSaveBlock2Ptr->frontier.field_CDC &= ~(0x1000); + gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_PYRAMID_50); } break; case 7: @@ -930,9 +931,9 @@ static void SetBattlePyramidData(void) static void sub_81A9134(void) { - gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005; + gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_0, 0); - gSaveBlock2Ptr->frontier.field_CA9_a = 1; + gSaveBlock2Ptr->frontier.challengePaused = TRUE; save_serialize_map(); TrySavingData(SAVE_LINK); } @@ -1169,7 +1170,7 @@ static void ClearPyramidPartyHeldItems(void) for (i = 0; i < PARTY_SIZE; i++) { - for (j = 0; j < 4; j++) + for (j = 0; j < MAX_FRONTIER_PARTY_SIZE; j++) { if (gSaveBlock2Ptr->frontier.selectedPartyMons[j] != 0 && gSaveBlock2Ptr->frontier.selectedPartyMons[j] - 1 == i) SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item); @@ -1200,10 +1201,10 @@ static void RestorePyramidPlayerParty(void) { int i, j, k, l; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { int partyIndex = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; - for (j = 0; j < 3; j++) + for (j = 0; j < FRONTIER_PARTY_SIZE; j++) { if (GetMonData(&gSaveBlock1Ptr->playerParty[partyIndex], MON_DATA_SPECIES, NULL) == GetMonData(&gPlayerParty[j], MON_DATA_SPECIES, NULL)) { @@ -1224,7 +1225,7 @@ static void RestorePyramidPlayerParty(void) } } - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gSelectedOrderFromParty[i]; } @@ -1434,7 +1435,7 @@ void sub_81A9E90(void) if (InBattlePyramid()) { RestorePyramidPlayerParty(); - gSaveBlock2Ptr->frontier.challengeOutcome = 2; + gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_PAUSED; VarSet(VAR_TEMP_E, 0); LoadPlayerParty(); } diff --git a/src/battle_tent.c b/src/battle_tent.c index f9385571f..6e3df49a9 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -47,7 +47,7 @@ static void sub_81B9EC0(void); static u16 sRandMonSetId; // const rom data -void static (*const gUnknown_086160B4[])(void) = +void static (*const sVerdanturfTentFuncs[])(void) = { sub_81B99D4, sub_81B9A28, @@ -61,7 +61,7 @@ void static (*const gUnknown_086160B4[])(void) = static const u16 sVerdanturfTentRewards[] = {ITEM_NEST_BALL}; -void static (*const gUnknown_086160D8[])(void) = +void static (*const sFallarborTentFuncs[])(void) = { sub_81B9BA0, sub_81B9BF4, @@ -74,7 +74,7 @@ void static (*const gUnknown_086160D8[])(void) = static const u16 sFallarborTentRewards[] = {ITEM_HYPER_POTION}; -void static (*const gUnknown_086160F8[])(void) = +void static (*const sSlateportTentFuncs[])(void) = { sub_81B9D28, sub_81B9D7C, @@ -91,16 +91,16 @@ void static (*const gUnknown_086160F8[])(void) = static const u16 sSlateportTentRewards[] = {ITEM_FULL_HEAL}; // code -void sub_81B99B4(void) +void CallVerdanturfTentFunction(void) { - gUnknown_086160B4[gSpecialVar_0x8004](); + sVerdanturfTentFuncs[gSpecialVar_0x8004](); } static void sub_81B99D4(void) { - gSaveBlock2Ptr->frontier.challengeOutcome = 0; + gSaveBlock2Ptr->frontier.challengeStatus = 0; gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = FALSE; + gSaveBlock2Ptr->frontier.challengePaused = FALSE; SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); } @@ -128,10 +128,10 @@ static void sub_81B9A90(void) static void sub_81B9ABC(void) { - gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005; + gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_0, 0); - gSaveBlock2Ptr->frontier.field_CA9_a = TRUE; - sub_81A4C30(); + gSaveBlock2Ptr->frontier.challengePaused = TRUE; + SaveGameFrontier(); } static void sub_81B9B00(void) @@ -153,16 +153,16 @@ static void sub_81B9B28(void) } } -void sub_81B9B80(void) +void CallFallarborTentFunction(void) { - gUnknown_086160D8[gSpecialVar_0x8004](); + sFallarborTentFuncs[gSpecialVar_0x8004](); } static void sub_81B9BA0(void) { - gSaveBlock2Ptr->frontier.challengeOutcome = 0; + gSaveBlock2Ptr->frontier.challengeStatus = 0; gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = FALSE; + gSaveBlock2Ptr->frontier.challengePaused = FALSE; SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); } @@ -178,10 +178,10 @@ static void sub_81B9C10(void) static void sub_81B9C2C(void) { - gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005; + gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_0, 0); - gSaveBlock2Ptr->frontier.field_CA9_a = TRUE; - sub_81A4C30(); + gSaveBlock2Ptr->frontier.challengePaused = TRUE; + SaveGameFrontier(); } static void sub_81B9C70(void) @@ -208,16 +208,16 @@ static void sub_81B9CF0(void) GetFrontierTrainerName(gStringVar1, gTrainerBattleOpponent_A); } -void sub_81B9D08(void) +void CallSlateportTentFunction(void) { - gUnknown_086160F8[gSpecialVar_0x8004](); + sSlateportTentFuncs[gSpecialVar_0x8004](); } static void sub_81B9D28(void) { - gSaveBlock2Ptr->frontier.challengeOutcome = 0; + gSaveBlock2Ptr->frontier.challengeStatus = 0; gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = FALSE; + gSaveBlock2Ptr->frontier.challengePaused = FALSE; SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); } @@ -233,10 +233,10 @@ static void sub_81B9D98(void) static void sub_81B9DB4(void) { - gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005; + gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_0, 0); - gSaveBlock2Ptr->frontier.field_CA9_a = TRUE; - sub_81A4C30(); + gSaveBlock2Ptr->frontier.challengePaused = TRUE; + SaveGameFrontier(); } static void sub_81B9DF8(void) diff --git a/src/battle_tower.c b/src/battle_tower.c index 151610035..c8b243ad0 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -25,6 +25,7 @@ #include "battle_factory.h" #include "constants/battle_frontier.h" #include "constants/battle_tower.h" +#include "constants/frontier_util.h" #include "constants/items.h" #include "constants/trainers.h" #include "constants/event_objects.h" @@ -200,7 +201,7 @@ const u8 gTowerFemaleFacilityClasses[20] = FACILITY_CLASS_PARASOL_LADY, FACILITY_CLASS_SWIMMER_F, FACILITY_CLASS_PICNICKER, - FACILITY_CLASS_POKEMON_BREEDER_F, + FACILITY_CLASS_PKMN_BREEDER_F, FACILITY_CLASS_PKMN_RANGER_F, FACILITY_CLASS_LASS }; @@ -263,83 +264,84 @@ const u8 gTowerFemaleTrainerGfxIds[20] = EVENT_OBJ_GFX_LASS }; -static const u8 sRubyFacilityClassToEmerald[][2] = -{ - {0x00, FACILITY_CLASS_AQUA_LEADER_ARCHIE}, - {0x01, FACILITY_CLASS_AQUA_GRUNT_M}, - {0x02, FACILITY_CLASS_AQUA_GRUNT_F}, - {0x03, FACILITY_CLASS_AROMA_LADY}, - {0x04, FACILITY_CLASS_RUIN_MANIAC}, - {0x05, FACILITY_CLASS_INTERVIEWER}, - {0x06, FACILITY_CLASS_TUBER_F}, - {0x07, FACILITY_CLASS_TUBER_M}, - {0x08, FACILITY_CLASS_COOLTRAINER_M}, - {0x09, FACILITY_CLASS_COOLTRAINER_F}, - {0x0a, FACILITY_CLASS_HEX_MANIAC}, - {0x0b, FACILITY_CLASS_LADY}, - {0x0c, FACILITY_CLASS_BEAUTY}, - {0x0d, FACILITY_CLASS_RICH_BOY}, - {0x0e, FACILITY_CLASS_POKEMANIAC}, - {0x0f, FACILITY_CLASS_SWIMMER_M}, - {0x10, FACILITY_CLASS_BLACK_BELT}, - {0x11, FACILITY_CLASS_GUITARIST}, - {0x12, FACILITY_CLASS_KINDLER}, - {0x13, FACILITY_CLASS_CAMPER}, - {0x14, FACILITY_CLASS_BUG_MANIAC}, - {0x15, FACILITY_CLASS_PSYCHIC_M}, - {0x16, FACILITY_CLASS_PSYCHIC_F}, - {0x17, FACILITY_CLASS_GENTLEMAN}, - {0x18, FACILITY_CLASS_ELITE_FOUR_SIDNEY}, - {0x19, FACILITY_CLASS_ELITE_FOUR_PHOEBE}, - {0x1a, FACILITY_CLASS_LEADER_ROXANNE}, - {0x1b, FACILITY_CLASS_LEADER_BRAWLY}, - {0x1c, FACILITY_CLASS_LEADER_TATE_AND_LIZA}, - {0x1d, FACILITY_CLASS_SCHOOL_KID_M}, - {0x1e, FACILITY_CLASS_SCHOOL_KID_F}, - {0x1f, FACILITY_CLASS_SR_AND_JR}, - {0x20, FACILITY_CLASS_POKEFAN_M}, - {0x21, FACILITY_CLASS_POKEFAN_F}, - {0x22, FACILITY_CLASS_EXPERT_M}, - {0x23, FACILITY_CLASS_EXPERT_F}, - {0x24, FACILITY_CLASS_YOUNGSTER}, - {0x25, FACILITY_CLASS_CHAMPION_WALLACE}, - {0x26, FACILITY_CLASS_FISHERMAN}, - {0x27, FACILITY_CLASS_CYCLING_TRIATHLETE_M}, - {0x28, FACILITY_CLASS_CYCLING_TRIATHLETE_F}, - {0x29, FACILITY_CLASS_RUNNING_TRIATHLETE_M}, - {0x2a, FACILITY_CLASS_RUNNING_TRIATHLETE_F}, - {0x2b, FACILITY_CLASS_SWIMMING_TRIATHLETE_M}, - {0x2c, FACILITY_CLASS_SWIMMING_TRIATHLETE_F}, - {0x2d, FACILITY_CLASS_DRAGON_TAMER}, - {0x2e, FACILITY_CLASS_BIRD_KEEPER}, - {0x2f, FACILITY_CLASS_NINJA_BOY}, - {0x30, FACILITY_CLASS_BATTLE_GIRL}, - {0x31, FACILITY_CLASS_PARASOL_LADY}, - {0x32, FACILITY_CLASS_SWIMMER_F}, - {0x33, FACILITY_CLASS_PICNICKER}, - {0x34, FACILITY_CLASS_TWINS}, - {0x35, FACILITY_CLASS_SAILOR}, - {0x38, FACILITY_CLASS_COLLECTOR}, - {0x39, FACILITY_CLASS_WALLY}, - {0x3a, FACILITY_CLASS_BRENDAN}, - {0x3b, FACILITY_CLASS_BRENDAN_2}, - {0x3c, FACILITY_CLASS_BRENDAN_3}, - {0x3d, FACILITY_CLASS_MAY}, - {0x3e, FACILITY_CLASS_MAY_2}, - {0x3f, FACILITY_CLASS_MAY_3}, - {0x40, FACILITY_CLASS_PKMN_BREEDER_M}, - {0x41, FACILITY_CLASS_POKEMON_BREEDER_F}, - {0x42, FACILITY_CLASS_PKMN_RANGER_M}, - {0x43, FACILITY_CLASS_PKMN_RANGER_F}, - {0x44, FACILITY_CLASS_MAGMA_LEADER_MAXIE}, - {0x45, FACILITY_CLASS_MAGMA_GRUNT_M}, - {0x46, FACILITY_CLASS_MAGMA_GRUNT_F}, - {0x47, FACILITY_CLASS_LASS}, - {0x48, FACILITY_CLASS_BUG_CATCHER}, - {0x49, FACILITY_CLASS_HIKER}, - {0x4a, FACILITY_CLASS_YOUNG_COUPLE}, - {0x4b, FACILITY_CLASS_OLD_COUPLE}, - {0x4c, FACILITY_CLASS_SIS_AND_BRO}, +// Excludes the unused RS_FACILITY_CLASS_BOARDER_1 and _2 +static const u8 sRubyFacilityClassToEmerald[RS_FACILITY_CLASSES_COUNT - 2][2] = +{ + {RS_FACILITY_CLASS_AQUA_LEADER_ARCHIE, FACILITY_CLASS_AQUA_LEADER_ARCHIE}, + {RS_FACILITY_CLASS_AQUA_GRUNT_M, FACILITY_CLASS_AQUA_GRUNT_M}, + {RS_FACILITY_CLASS_AQUA_GRUNT_F, FACILITY_CLASS_AQUA_GRUNT_F}, + {RS_FACILITY_CLASS_AROMA_LADY, FACILITY_CLASS_AROMA_LADY}, + {RS_FACILITY_CLASS_RUIN_MANIAC, FACILITY_CLASS_RUIN_MANIAC}, + {RS_FACILITY_CLASS_INTERVIEWER, FACILITY_CLASS_INTERVIEWER}, + {RS_FACILITY_CLASS_TUBER_F, FACILITY_CLASS_TUBER_F}, + {RS_FACILITY_CLASS_TUBER_M, FACILITY_CLASS_TUBER_M}, + {RS_FACILITY_CLASS_COOLTRAINER_M, FACILITY_CLASS_COOLTRAINER_M}, + {RS_FACILITY_CLASS_COOLTRAINER_F, FACILITY_CLASS_COOLTRAINER_F}, + {RS_FACILITY_CLASS_HEX_MANIAC, FACILITY_CLASS_HEX_MANIAC}, + {RS_FACILITY_CLASS_LADY, FACILITY_CLASS_LADY}, + {RS_FACILITY_CLASS_BEAUTY, FACILITY_CLASS_BEAUTY}, + {RS_FACILITY_CLASS_RICH_BOY, FACILITY_CLASS_RICH_BOY}, + {RS_FACILITY_CLASS_POKEMANIAC, FACILITY_CLASS_POKEMANIAC}, + {RS_FACILITY_CLASS_SWIMMER_M, FACILITY_CLASS_SWIMMER_M}, + {RS_FACILITY_CLASS_BLACK_BELT, FACILITY_CLASS_BLACK_BELT}, + {RS_FACILITY_CLASS_GUITARIST, FACILITY_CLASS_GUITARIST}, + {RS_FACILITY_CLASS_KINDLER, FACILITY_CLASS_KINDLER}, + {RS_FACILITY_CLASS_CAMPER, FACILITY_CLASS_CAMPER}, + {RS_FACILITY_CLASS_BUG_MANIAC, FACILITY_CLASS_BUG_MANIAC}, + {RS_FACILITY_CLASS_PSYCHIC_M, FACILITY_CLASS_PSYCHIC_M}, + {RS_FACILITY_CLASS_PSYCHIC_F, FACILITY_CLASS_PSYCHIC_F}, + {RS_FACILITY_CLASS_GENTLEMAN, FACILITY_CLASS_GENTLEMAN}, + {RS_FACILITY_CLASS_ELITE_FOUR_M, FACILITY_CLASS_ELITE_FOUR_SIDNEY}, + {RS_FACILITY_CLASS_ELITE_FOUR_F, FACILITY_CLASS_ELITE_FOUR_PHOEBE}, + {RS_FACILITY_CLASS_LEADER_F, FACILITY_CLASS_LEADER_ROXANNE}, + {RS_FACILITY_CLASS_LEADER_M, FACILITY_CLASS_LEADER_BRAWLY}, + {RS_FACILITY_CLASS_LEADER_MF, FACILITY_CLASS_LEADER_TATE_AND_LIZA}, + {RS_FACILITY_CLASS_SCHOOL_KID_M, FACILITY_CLASS_SCHOOL_KID_M}, + {RS_FACILITY_CLASS_SCHOOL_KID_F, FACILITY_CLASS_SCHOOL_KID_F}, + {RS_FACILITY_CLASS_SR_AND_JR, FACILITY_CLASS_SR_AND_JR}, + {RS_FACILITY_CLASS_POKEFAN_M, FACILITY_CLASS_POKEFAN_M}, + {RS_FACILITY_CLASS_POKEFAN_F, FACILITY_CLASS_POKEFAN_F}, + {RS_FACILITY_CLASS_EXPERT_M, FACILITY_CLASS_EXPERT_M}, + {RS_FACILITY_CLASS_EXPERT_F, FACILITY_CLASS_EXPERT_F}, + {RS_FACILITY_CLASS_YOUNGSTER, FACILITY_CLASS_YOUNGSTER}, + {RS_FACILITY_CLASS_CHAMPION, FACILITY_CLASS_CHAMPION_WALLACE}, + {RS_FACILITY_CLASS_FISHERMAN, FACILITY_CLASS_FISHERMAN}, + {RS_FACILITY_CLASS_CYCLING_TRIATHLETE_M, FACILITY_CLASS_CYCLING_TRIATHLETE_M}, + {RS_FACILITY_CLASS_CYCLING_TRIATHLETE_F, FACILITY_CLASS_CYCLING_TRIATHLETE_F}, + {RS_FACILITY_CLASS_RUNNING_TRIATHLETE_M, FACILITY_CLASS_RUNNING_TRIATHLETE_M}, + {RS_FACILITY_CLASS_RUNNING_TRIATHLETE_F, FACILITY_CLASS_RUNNING_TRIATHLETE_F}, + {RS_FACILITY_CLASS_SWIMMING_TRIATHLETE_M, FACILITY_CLASS_SWIMMING_TRIATHLETE_M}, + {RS_FACILITY_CLASS_SWIMMING_TRIATHLETE_F, FACILITY_CLASS_SWIMMING_TRIATHLETE_F}, + {RS_FACILITY_CLASS_DRAGON_TAMER, FACILITY_CLASS_DRAGON_TAMER}, + {RS_FACILITY_CLASS_BIRD_KEEPER, FACILITY_CLASS_BIRD_KEEPER}, + {RS_FACILITY_CLASS_NINJA_BOY, FACILITY_CLASS_NINJA_BOY}, + {RS_FACILITY_CLASS_BATTLE_GIRL, FACILITY_CLASS_BATTLE_GIRL}, + {RS_FACILITY_CLASS_PARASOL_LADY, FACILITY_CLASS_PARASOL_LADY}, + {RS_FACILITY_CLASS_SWIMMER_F, FACILITY_CLASS_SWIMMER_F}, + {RS_FACILITY_CLASS_PICNICKER, FACILITY_CLASS_PICNICKER}, + {RS_FACILITY_CLASS_TWINS, FACILITY_CLASS_TWINS}, + {RS_FACILITY_CLASS_SAILOR, FACILITY_CLASS_SAILOR}, + {RS_FACILITY_CLASS_COLLECTOR, FACILITY_CLASS_COLLECTOR}, + {RS_FACILITY_CLASS_WALLY, FACILITY_CLASS_WALLY}, + {RS_FACILITY_CLASS_BRENDAN_1, FACILITY_CLASS_BRENDAN}, + {RS_FACILITY_CLASS_BRENDAN_2, FACILITY_CLASS_BRENDAN_2}, + {RS_FACILITY_CLASS_BRENDAN_3, FACILITY_CLASS_BRENDAN_3}, + {RS_FACILITY_CLASS_MAY_1, FACILITY_CLASS_MAY}, + {RS_FACILITY_CLASS_MAY_2, FACILITY_CLASS_MAY_2}, + {RS_FACILITY_CLASS_MAY_3, FACILITY_CLASS_MAY_3}, + {RS_FACILITY_CLASS_PKMN_BREEDER_M, FACILITY_CLASS_PKMN_BREEDER_M}, + {RS_FACILITY_CLASS_PKMN_BREEDER_F, FACILITY_CLASS_PKMN_BREEDER_F}, + {RS_FACILITY_CLASS_PKMN_RANGER_M, FACILITY_CLASS_PKMN_RANGER_M}, + {RS_FACILITY_CLASS_PKMN_RANGER_F, FACILITY_CLASS_PKMN_RANGER_F}, + {RS_FACILITY_CLASS_MAGMA_LEADER, FACILITY_CLASS_MAGMA_LEADER_MAXIE}, + {RS_FACILITY_CLASS_MAGMA_GRUNT_M, FACILITY_CLASS_MAGMA_GRUNT_M}, + {RS_FACILITY_CLASS_MAGMA_GRUNT_F, FACILITY_CLASS_MAGMA_GRUNT_F}, + {RS_FACILITY_CLASS_LASS, FACILITY_CLASS_LASS}, + {RS_FACILITY_CLASS_BUG_CATCHER, FACILITY_CLASS_BUG_CATCHER}, + {RS_FACILITY_CLASS_HIKER, FACILITY_CLASS_HIKER}, + {RS_FACILITY_CLASS_YOUNG_COUPLE, FACILITY_CLASS_YOUNG_COUPLE}, + {RS_FACILITY_CLASS_OLD_COUPLE, FACILITY_CLASS_OLD_COUPLE}, + {RS_FACILITY_CLASS_SIS_AND_BRO, FACILITY_CLASS_SIS_AND_BRO}, }; static const u8 *const gUnknown_085DCFD8[] = @@ -986,7 +988,7 @@ struct {FACILITY_CLASS_PSYCHIC_M, gUnknown_085DD44C}, {FACILITY_CLASS_PSYCHIC_F, gUnknown_085DD460}, {FACILITY_CLASS_SCHOOL_KID_F, gUnknown_085DD474}, - {FACILITY_CLASS_POKEMON_BREEDER_F, gUnknown_085DD488}, + {FACILITY_CLASS_PKMN_BREEDER_F, gUnknown_085DD488}, {FACILITY_CLASS_POKEFAN_F, gUnknown_085DD49C}, {FACILITY_CLASS_SWIMMER_F, gUnknown_085DD4B0}, {FACILITY_CLASS_SWIMMING_TRIATHLETE_M, gUnknown_085DD4C4}, @@ -1072,20 +1074,20 @@ static void (* const sBattleTowerFuncs[])(void) = [BATTLE_TOWER_FUNC_15] = sub_8164E04, }; -static const u32 gUnknown_085DF9AC[][2] = +static const u32 sWinStreakFlags[][2] = { - {0x00000001, 0x00000002}, - {0x00004000, 0x00008000}, - {0x00010000, 0x00020000}, - {0x00040000, 0x00080000}, + {STREAK_TOWER_SINGLES_50, STREAK_TOWER_SINGLES_OPEN}, + {STREAK_TOWER_DOUBLES_50, STREAK_TOWER_DOUBLES_OPEN}, + {STREAK_TOWER_MULTIS_50, STREAK_TOWER_MULTIS_OPEN}, + {STREAK_TOWER_LINK_MULTIS_50, STREAK_TOWER_LINK_MULTIS_OPEN}, }; -static const u32 gUnknown_085DF9CC[][2] = +static const u32 sWinStreakMasks[][2] = { - {0xfffffffe, 0xfffffffd}, - {0xffffbfff, 0xffff7fff}, - {0xfffeffff, 0xfffdffff}, - {0xfffbffff, 0xfff7ffff}, + {~(STREAK_TOWER_SINGLES_50), ~(STREAK_TOWER_SINGLES_OPEN)}, + {~(STREAK_TOWER_DOUBLES_50), ~(STREAK_TOWER_DOUBLES_OPEN)}, + {~(STREAK_TOWER_MULTIS_50), ~(STREAK_TOWER_MULTIS_OPEN)}, + {~(STREAK_TOWER_LINK_MULTIS_50), ~(STREAK_TOWER_LINK_MULTIS_OPEN)}, }; static const u8 gUnknown_085DF9EC[] = @@ -1093,12 +1095,13 @@ static const u8 gUnknown_085DF9EC[] = 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x09, 0x0a, 0x0b, 0x0c }; -static const u8 gUnknown_085DF9F6[] = +// Unclear why this was duplicated +static const u8 sBattleTowerPartySizes2[] = { - [FRONTIER_MODE_SINGLES] = 3, - [FRONTIER_MODE_DOUBLES] = 4, - [FRONTIER_MODE_MULTIS] = 2, - [FRONTIER_MODE_LINK_MULTIS] = 2, + [FRONTIER_MODE_SINGLES] = FRONTIER_PARTY_SIZE, + [FRONTIER_MODE_DOUBLES] = FRONTIER_DOUBLES_PARTY_SIZE, + [FRONTIER_MODE_MULTIS] = FRONTIER_MULTI_PARTY_SIZE, + [FRONTIER_MODE_LINK_MULTIS] = FRONTIER_MULTI_PARTY_SIZE, }; static const u16 gUnknown_085DF9FA[][2] = @@ -1127,22 +1130,22 @@ static const u16 gUnknown_085DFA1A[][2] = {0x00c8, 0x00b7}, }; -static const u8 gUnknown_085DFA42[4] = +static const u8 sBattleTowerPartySizes[FRONTIER_MODE_COUNT] = { - [FRONTIER_MODE_SINGLES] = 3, - [FRONTIER_MODE_DOUBLES] = 4, - [FRONTIER_MODE_MULTIS] = 2, - [FRONTIER_MODE_LINK_MULTIS] = 2, + [FRONTIER_MODE_SINGLES] = FRONTIER_PARTY_SIZE, + [FRONTIER_MODE_DOUBLES] = FRONTIER_DOUBLES_PARTY_SIZE, + [FRONTIER_MODE_MULTIS] = FRONTIER_MULTI_PARTY_SIZE, + [FRONTIER_MODE_LINK_MULTIS] = FRONTIER_MULTI_PARTY_SIZE, }; -static const u16 gUnknown_085DFA46[] = +static const u16 sRecordTrainerSpeechWon[] = { - 0x0c3a, 0x0c3a, 0x0c01, 0x0a2a, 0x0607, 0x0c01 + EC_WORD_YAY, EC_WORD_YAY, EC_WORD_EXCL_EXCL, EC_WORD_I_VE, EC_WORD_WON, EC_WORD_EXCL_EXCL }; -static const u16 gUnknown_085DFA52[] = +static const u16 sRecordTrainerSpeechLost[] = { - 0x1039, 0x122e, 0x0c04, 0x0a3d, 0x0630, 0x0c04 + EC_WORD_TOO, EC_WORD_BAD, EC_WORD_ELLIPSIS, EC_WORD_WE, EC_WORD_LOST, EC_WORD_ELLIPSIS }; // code @@ -1156,12 +1159,12 @@ static void sub_8161F94(void) u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - gSaveBlock2Ptr->frontier.challengeOutcome = 1; + gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_SAVING; gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.challengePaused = FALSE; gSaveBlock2Ptr->frontier.field_CA9_b = 0; - sub_81A3ACC(); - if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_085DF9AC[battleMode][lvlMode])) + ResetFrontierTrainerIds(); + if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode])) gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = 0; ValidateBattleTowerRecordChecksums(); @@ -1182,10 +1185,10 @@ static void sub_8162054(void) gSpecialVar_Result = GetCurrentBattleTowerWinStreak(lvlMode, battleMode); break; case 2: - gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_085DF9AC[battleMode][lvlMode]) != 0); + gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]) != 0); break; case 3: - gSaveBlock2Ptr->frontier.field_D07 = gSaveBlock2Ptr->frontier.lvlMode; + gSaveBlock2Ptr->frontier.towerLvlMode = gSaveBlock2Ptr->frontier.lvlMode; break; } } @@ -1204,12 +1207,12 @@ static void sub_81620F4(void) break; case 2: if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_085DF9AC[battleMode][lvlMode]; + gSaveBlock2Ptr->frontier.winStreakActiveFlags |= sWinStreakFlags[battleMode][lvlMode]; else - gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_085DF9CC[battleMode][lvlMode]; + gSaveBlock2Ptr->frontier.winStreakActiveFlags &= sWinStreakMasks[battleMode][lvlMode]; break; case 3: - gSaveBlock2Ptr->frontier.field_D07 = gSaveBlock2Ptr->frontier.lvlMode; + gSaveBlock2Ptr->frontier.towerLvlMode = gSaveBlock2Ptr->frontier.lvlMode; break; } } @@ -1219,8 +1222,9 @@ static void sub_81621C0(void) if (gTrainerBattleOpponent_A == TRAINER_EREADER) ClearEReaderTrainer(&gSaveBlock2Ptr->frontier.ereaderTrainer); - if (gSaveBlock2Ptr->frontier.field_D04 < 9999) - gSaveBlock2Ptr->frontier.field_D04++; + // below field is never read outside this conditional + if (gSaveBlock2Ptr->frontier.towerNumWins < MAX_STREAK) + gSaveBlock2Ptr->frontier.towerNumWins++; gSaveBlock2Ptr->frontier.curChallengeBattleNum++; SaveCurrentWinStreak(); @@ -1258,7 +1262,7 @@ static bool8 ChooseSpecialBattleTowerTrainer(void) validMons++; } - if (validMons >= gUnknown_085DF9F6[battleMode] + if (validMons >= sBattleTowerPartySizes2[battleMode] && gSaveBlock2Ptr->frontier.towerRecords[i].winStreak == winStreak && gSaveBlock2Ptr->frontier.towerRecords[i].lvlMode == lvlMode && recordHasData @@ -2244,21 +2248,21 @@ void DoSpecialTrainerBattle(void) switch (VarGet(VAR_FRONTIER_BATTLE_MODE)) { case FRONTIER_MODE_SINGLES: - FillFrontierTrainerParty(3); + FillFrontierTrainerParty(FRONTIER_PARTY_SIZE); break; case FRONTIER_MODE_DOUBLES: - FillFrontierTrainerParty(4); + FillFrontierTrainerParty(FRONTIER_DOUBLES_PARTY_SIZE); gBattleTypeFlags |= BATTLE_TYPE_DOUBLE; break; case FRONTIER_MODE_MULTIS: - FillFrontierTrainersParties(2); + FillFrontierTrainersParties(FRONTIER_MULTI_PARTY_SIZE); gPartnerTrainerId = gSaveBlock2Ptr->frontier.trainerIds[17]; FillPartnerParty(gPartnerTrainerId); gBattleTypeFlags |= BATTLE_TYPE_DOUBLE | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS; break; case FRONTIER_MODE_LINK_MULTIS: gBattleTypeFlags |= BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_MULTI | BATTLE_TYPE_x800000; - FillFrontierTrainersParties(2); + FillFrontierTrainersParties(FRONTIER_MULTI_PARTY_SIZE); break; } CreateTask(Task_StartBattleAfterTransition, 1); @@ -2300,9 +2304,9 @@ void DoSpecialTrainerBattle(void) if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES) gBattleTypeFlags |= BATTLE_TYPE_DOUBLE; if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) - FillFrontierTrainerParty(3); + FillFrontierTrainerParty(FRONTIER_PARTY_SIZE); else - FillTentTrainerParty(3); + FillTentTrainerParty(FRONTIER_PARTY_SIZE); CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); BattleTransition_StartOnField(sub_80B100C(4)); @@ -2310,9 +2314,9 @@ void DoSpecialTrainerBattle(void) case SPECIAL_BATTLE_ARENA: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_ARENA; if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) - FillFrontierTrainerParty(3); + FillFrontierTrainerParty(FRONTIER_PARTY_SIZE); else - FillTentTrainerParty(3); + FillTentTrainerParty(FRONTIER_PARTY_SIZE); CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); BattleTransition_StartOnField(sub_80B100C(5)); @@ -2328,14 +2332,14 @@ void DoSpecialTrainerBattle(void) break; case SPECIAL_BATTLE_PIKE_SINGLE: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_BATTLE_TOWER; - FillFrontierTrainerParty(3); + FillFrontierTrainerParty(FRONTIER_PARTY_SIZE); CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); BattleTransition_StartOnField(sub_80B100C(7)); break; case SPECIAL_BATTLE_PYRAMID: gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID; - FillFrontierTrainerParty(3); + FillFrontierTrainerParty(FRONTIER_PARTY_SIZE); CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); BattleTransition_StartOnField(sub_80B100C(10)); @@ -2408,7 +2412,7 @@ static void sub_8163EE4(void) playerRecord->speechLost[i] = gSaveBlock1Ptr->easyChatBattleLost[i]; } - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) { if (gSaveBlock2Ptr->frontier.selectedPartyMons[i] != 0) sub_80686FC(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], &playerRecord->party[i]); @@ -2428,10 +2432,10 @@ static void SaveBattleTowerProgress(void) if (gSpecialVar_0x8005 == 0 && (challengeNum > 1 || gSaveBlock2Ptr->frontier.curChallengeBattleNum != 0)) sub_8163EE4(); - gSaveBlock2Ptr->frontier.challengeOutcome =gSpecialVar_0x8005; + gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_0, 0); - gSaveBlock2Ptr->frontier.field_CA9_a = 1; - sub_81A4C30(); + gSaveBlock2Ptr->frontier.challengePaused = TRUE; + SaveGameFrontier(); } static void nullsub_61(void) @@ -2895,13 +2899,13 @@ static void sub_8164E04(void) GetFrontierTrainerName(text, gTrainerBattleOpponent_A); StripExtCtrlCodes(text); - StringCopy(gSaveBlock2Ptr->frontier.field_BD8, text); - GetBattleTowerTrainerLanguage(&gSaveBlock2Ptr->frontier.field_BEB, gTrainerBattleOpponent_A); - gSaveBlock2Ptr->frontier.field_BD6 = GetMonData(&gEnemyParty[gBattlerPartyIndexes[1]], MON_DATA_SPECIES, NULL); - gSaveBlock2Ptr->frontier.field_BD4 = GetMonData(&gPlayerParty[gBattlerPartyIndexes[0]], MON_DATA_SPECIES, NULL); + StringCopy(gSaveBlock2Ptr->frontier.towerInterview.opponentName, text); + GetBattleTowerTrainerLanguage(&gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage, gTrainerBattleOpponent_A); + gSaveBlock2Ptr->frontier.towerInterview.opponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[1]], MON_DATA_SPECIES, NULL); + gSaveBlock2Ptr->frontier.towerInterview.playerSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[0]], MON_DATA_SPECIES, NULL); for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++) - gSaveBlock2Ptr->frontier.field_BE0[i] = gBattleMons[0].nickname[i]; - gSaveBlock2Ptr->frontier.field_D06 = gBattleOutcome; + gSaveBlock2Ptr->frontier.towerInterview.opponentMonNickname[i] = gBattleMons[0].nickname[i]; + gSaveBlock2Ptr->frontier.towerBattleOutcome = gBattleOutcome; } static void ValidateBattleTowerRecordChecksums(void) @@ -2968,13 +2972,13 @@ u16 GetCurrentBattleTowerWinStreak(u8 lvlMode, u8 battleMode) static u8 GetMonCountForBattleMode(u8 battleMode) { - u8 sp[ARRAY_COUNT(gUnknown_085DFA42)]; - memcpy(sp, gUnknown_085DFA42, sizeof(gUnknown_085DFA42)); + u8 partySizes[ARRAY_COUNT(sBattleTowerPartySizes)]; + memcpy(partySizes, sBattleTowerPartySizes, sizeof(sBattleTowerPartySizes)); - if (battleMode < ARRAY_COUNT(gUnknown_085DFA42)) - return sp[battleMode]; + if (battleMode < ARRAY_COUNT(sBattleTowerPartySizes)) + return partySizes[battleMode]; else - return 3; + return FRONTIER_PARTY_SIZE; } struct RibbonCounter @@ -3158,7 +3162,7 @@ static void CopyEReaderTrainerFarewellMessage(void) void sub_81653CC(void) { - if (gSaveBlock2Ptr->frontier.challengeOutcome == 1) + if (gSaveBlock2Ptr->frontier.challengeStatus == CHALLENGE_STATUS_SAVING) sub_80F01B8(); if (FlagGet(FLAG_CANCEL_BATTLE_ROOM_CHALLENGE) == TRUE) { @@ -3282,13 +3286,13 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em { s32 i, validMons = 0; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { if (src->party[i].species) validMons++; } - if (validMons != 3) + if (validMons != FRONTIER_PARTY_SIZE) { memset(dst, 0, sizeof(*dst)); return FALSE; @@ -3298,6 +3302,7 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em dst->lvlMode = src->lvlMode; dst->winStreak = src->winStreak; // BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries. + // Fix by using ARRAY_COUNT(sRubyFacilityClassToEmerald) for (i = 0; i < FACILITY_CLASSES_COUNT; i++) { if (sRubyFacilityClassToEmerald[i][0] == src->facilityClass) @@ -3312,16 +3317,16 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em dst->name[i] = src->name[i]; for (i = 0; i < TRAINER_ID_LENGTH; i++) dst->trainerId[i] = src->trainerId[i]; - for (i = 0; i < 6; i++) + for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) dst->greeting[i] = src->greeting[i]; - for (i = 0; i < 6; i++) - dst->speechWon[i] = gUnknown_085DFA46[i]; - for (i = 0; i < 6; i++) - dst->speechLost[i] = gUnknown_085DFA52[i]; - for (i = 0; i < 3; i++) + for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) + dst->speechWon[i] = sRecordTrainerSpeechWon[i]; + for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) + dst->speechLost[i] = sRecordTrainerSpeechLost[i]; + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) dst->party[i] = src->party[i]; - CpuFill32(0, &dst->party[3], sizeof(dst->party[3])); + CpuFill32(0, &dst->party[FRONTIER_PARTY_SIZE], sizeof(dst->party[FRONTIER_PARTY_SIZE])); CalcEmeraldBattleTowerChecksum(dst); return TRUE; } @@ -3331,13 +3336,13 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru { s32 i, validMons = 0; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { if (src->party[i].species) validMons++; } - if (validMons != 3) + if (validMons != FRONTIER_PARTY_SIZE) { memset(dst, 0, sizeof(*dst)); return FALSE; @@ -3347,6 +3352,7 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru dst->lvlMode = src->lvlMode; dst->winStreak = src->winStreak; // BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries. + // Fix by using ARRAY_COUNT(sRubyFacilityClassToEmerald) instead for (i = 0; i < FACILITY_CLASSES_COUNT; i++) { if (sRubyFacilityClassToEmerald[i][1] == src->facilityClass) @@ -3355,15 +3361,15 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru if (i != FACILITY_CLASSES_COUNT) dst->facilityClass = sRubyFacilityClassToEmerald[i][0]; else - dst->facilityClass = 0x24; // FACILITY_CLASS_YOUNGSTER in Ruby/Sapphire. + dst->facilityClass = RS_FACILITY_CLASS_YOUNGSTER; for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) dst->name[i] = src->name[i]; for (i = 0; i < TRAINER_ID_LENGTH; i++) dst->trainerId[i] = src->trainerId[i]; - for (i = 0; i < 6; i++) + for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++) dst->greeting[i] = src->greeting[i]; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) dst->party[i] = src->party[i]; CalcRubyBattleTowerChecksum(dst); diff --git a/src/data/battle_frontier/battle_frontier_trainers.h b/src/data/battle_frontier/battle_frontier_trainers.h index faef40656..7977852b2 100644 --- a/src/data/battle_frontier/battle_frontier_trainers.h +++ b/src/data/battle_frontier/battle_frontier_trainers.h @@ -361,7 +361,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[] = .monSets = gBattleFrontierTrainerMons_Payton }, [45] = { - .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, .trainerName = _("PAMELA"), .speechBefore = {EC_WORD_ALL, EC_WORD_POKEMON, EC_WORD_ADORE, EC_WORD_A, EC_WORD_KIND, EC_WORD_TRAINER}, .speechWin = {EC_WORD_IT_S, EC_WORD_TOO, EC_WORD_BAD, EC_WORD_YOU, EC_WORD_LOST, 0xFFFF}, @@ -369,7 +369,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[] = .monSets = gBattleFrontierTrainerMons_Pamela }, [46] = { - .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, .trainerName = _("ELIZA"), .speechBefore = {EC_WORD_I, EC_WORD_ADORE, EC_WORD_POKEMON, EC_WORD_LIKE, EC_WORD_MY, EC_WORD_CHILDREN}, .speechWin = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POKEMON}, @@ -377,7 +377,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[] = .monSets = gBattleFrontierTrainerMons_Eliza }, [47] = { - .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, .trainerName = _("MARISA"), .speechBefore = {EC_WORD_I, EC_WORD_PROMISE, EC_WORD_TO, EC_WORD_BATTLE, EC_WORD_SERIOUSLY, 0xFFFF}, .speechWin = {EC_WORD_PROMISE, EC_WORD_ME, EC_WORD_YOU, EC_WORD_WILL, EC_WORD_DO, EC_WORD_BETTER}, @@ -1273,7 +1273,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[] = .monSets = gBattleFrontierTrainerMons_Cordell }, [159] = { - .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, .trainerName = _("JAZLYN"), .speechBefore = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_POKEDEX, EC_WORD_REALLY, EC_WORD_AWESOME, EC_WORD_QUES}, .speechWin = {EC_WORD_OH_YEAH, EC_WORD_WOW, EC_WORD_YOUR, EC_WORD_POKEDEX, EC_WORD_IS, EC_WORD_SUPER}, @@ -1745,7 +1745,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[] = .monSets = gBattleFrontierTrainerMons_Wilson }, [218] = { - .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, .trainerName = _("CLARE"), .speechBefore = {EC_WORD_YAY, EC_WORD_EXCL, EC_WORD_A, EC_WORD_TOUGH, EC_WORD_TRAINER, EC_WORD_EXCL}, .speechWin = {EC_WORD_AWW, EC_WORD_EXCL, EC_WORD_A, EC_WORD_WIMPY, EC_WORD_TRAINER, EC_WORD_EXCL}, @@ -1753,7 +1753,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[] = .monSets = gBattleFrontierTrainerMons_Clare }, [219] = { - .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, .trainerName = _("TESS"), .speechBefore = {EC_WORD_WANT, EC_WORD_SOME, EC_POKEMON(GULPIN), EC_WORD_DESIGN, EC_WORD_SWEETS, EC_WORD_QUES}, .speechWin = {EC_WORD_THEY_RE, EC_WORD_A, EC_WORD_SECRET, EC_WORD_POKEMON, EC_WORD_GOURMET, EC_WORD_ITEM}, diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h index f38cfcc38..cfd5dd994 100644 --- a/src/data/battle_frontier/trainer_hill.h +++ b/src/data/battle_frontier/trainer_hill.h @@ -847,7 +847,7 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = [1] = { .name = _("JAYDEN"), - .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, .unused = 0, .speechBefore = {EC_WORD_SOME, EC_WORD_THINGS, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_DO, EC_WORD_ALONE}, .speechWin = {EC_WORD_YOU, EC_WORD_WIN, EC_WORD_AS, EC_WORD_A, EC_WORD_GROUP, 0xFFFF}, @@ -1152,7 +1152,7 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = [1] = { .name = _("VERONICA"), - .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F, .unused = 0, .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_STRONG, EC_WORD_BEAUTY, EC_WORD_AROUND, EC_WORD_HERE}, .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL, 0xFFFF}, diff --git a/src/data/pokemon/trainer_class_lookups.h b/src/data/pokemon/trainer_class_lookups.h index 0f2b53a18..2edefb274 100644 --- a/src/data/pokemon/trainer_class_lookups.h +++ b/src/data/pokemon/trainer_class_lookups.h @@ -2,7 +2,7 @@ const u8 gFacilityClassToPicIndex[] = { [FACILITY_CLASS_HIKER] = TRAINER_PIC_HIKER, [FACILITY_CLASS_AQUA_GRUNT_M] = TRAINER_PIC_AQUA_GRUNT_M, - [FACILITY_CLASS_POKEMON_BREEDER_F] = TRAINER_PIC_POKEMON_BREEDER_F, + [FACILITY_CLASS_PKMN_BREEDER_F] = TRAINER_PIC_POKEMON_BREEDER_F, [FACILITY_CLASS_COOLTRAINER_M] = TRAINER_PIC_COOLTRAINER_M, [FACILITY_CLASS_BIRD_KEEPER] = TRAINER_PIC_BIRD_KEEPER, [FACILITY_CLASS_COLLECTOR] = TRAINER_PIC_COLLECTOR, @@ -88,7 +88,7 @@ const u8 gFacilityClassToTrainerClass[] = { [FACILITY_CLASS_HIKER] = TRAINER_CLASS_HIKER, [FACILITY_CLASS_AQUA_GRUNT_M] = TRAINER_CLASS_TEAM_AQUA, - [FACILITY_CLASS_POKEMON_BREEDER_F] = TRAINER_CLASS_PKMN_BREEDER, + [FACILITY_CLASS_PKMN_BREEDER_F] = TRAINER_CLASS_PKMN_BREEDER, [FACILITY_CLASS_COOLTRAINER_M] = TRAINER_CLASS_COOLTRAINER, [FACILITY_CLASS_BIRD_KEEPER] = TRAINER_CLASS_BIRD_KEEPER, [FACILITY_CLASS_COLLECTOR] = TRAINER_CLASS_COLLECTOR, diff --git a/src/frontier_util.c b/src/frontier_util.c index 138b678ed..084be4fe2 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -45,30 +45,30 @@ struct FrontierBrainMon u8 fixedIV; u8 nature; u8 evs[NUM_STATS]; - u16 moves[4]; + u16 moves[MAX_MON_MOVES]; }; // This file's functions. static void GetChallengeStatus(void); static void GetFrontierData(void); static void SetFrontierData(void); -static void LoadSelectedParty(void); +static void SetSelectedPartyOrder(void); static void DoSoftReset_(void); static void SetFrontierTrainers(void); -static void sub_81A1B38(void); +static void SaveSelectedParty(void); static void ShowFacilityResultsWindow(void); -static void sub_81A31FC(void); +static void CheckPutFrontierTVShowOnAir(void); static void Script_GetFrontierBrainStatus(void); static void IsTrainerFrontierBrain(void); -static void sub_81A3B64(void); +static void GiveBattlePoints(void); static void GetFacilitySymbolCount(void); static void GiveFacilitySymbol(void); static void CheckBattleTypeFlag(void); -static void sub_81A3FD4(void); +static void CheckPartyIneligibility(void); static void ValidateVisitingTrainer(void); -static void sub_81A4230(void); -static void sub_81A43A8(void); -static void sub_81A4410(void); +static void IncrementWinStreak(void); +static void RestoreHeldItems(void); +static void SaveRecordBattle(void); static void BufferFrontierTrainerName(void); static void ResetSketchedMoves(void); static void SetFacilityBrainEventObject(void); @@ -591,7 +591,9 @@ static const u8 sBattlePointAwards[][NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUN }, }; -static const u16 sFacilitySymbolBitFlags[NUM_FRONTIER_FACILITIES][2] = +// Flags to change the conversation when the Frontier Brain is encountered for a battle +// First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol) +static const u16 sBattledBrainBitFlags[NUM_FRONTIER_FACILITIES][2] = { [FRONTIER_FACILITY_TOWER] = {0x0001, 0x0002}, [FRONTIER_FACILITY_DOME] = {0x0004, 0x0008}, @@ -607,29 +609,29 @@ static void (* const sFrontierUtilFuncs[])(void) = [FRONTIER_UTIL_FUNC_GET_STATUS] = GetChallengeStatus, [FRONTIER_UTIL_FUNC_GET_DATA] = GetFrontierData, [FRONTIER_UTIL_FUNC_SET_DATA] = SetFrontierData, - [FRONTIER_UTIL_FUNC_LOAD_SELECTED_PARTY] = LoadSelectedParty, + [FRONTIER_UTIL_FUNC_SET_PARTY_ORDER] = SetSelectedPartyOrder, [FRONTIER_UTIL_FUNC_SOFT_RESET] = DoSoftReset_, - [FRONTIER_UTIL_FUNC_SET_FRONTIER_TRAINERS] = SetFrontierTrainers, - [FRONTIER_UTIL_FUNC_6] = sub_81A1B38, + [FRONTIER_UTIL_FUNC_SET_TRAINERS] = SetFrontierTrainers, + [FRONTIER_UTIL_FUNC_SAVE_PARTY] = SaveSelectedParty, [FRONTIER_UTIL_FUNC_RESULTS_WINDOW] = ShowFacilityResultsWindow, - [FRONTIER_UTIL_FUNC_8] = sub_81A31FC, + [FRONTIER_UTIL_FUNC_CHECK_AIR_TV_SHOW] = CheckPutFrontierTVShowOnAir, [FRONTIER_UTIL_FUNC_GET_BRAIN_STATUS] = Script_GetFrontierBrainStatus, - [FRONTIER_UTIL_FUNC_IS_FRONTIER_BRAIN] = IsTrainerFrontierBrain, - [FRONTIER_UTIL_FUNC_11] = sub_81A3B64, + [FRONTIER_UTIL_FUNC_IS_BRAIN] = IsTrainerFrontierBrain, + [FRONTIER_UTIL_FUNC_GIVE_BATTLE_POINTS] = GiveBattlePoints, [FRONTIER_UTIL_FUNC_GET_FACILITY_SYMBOLS] = GetFacilitySymbolCount, [FRONTIER_UTIL_FUNC_GIVE_FACILITY_SYMBOL] = GiveFacilitySymbol, [FRONTIER_UTIL_FUNC_CHECK_BATTLE_TYPE] = CheckBattleTypeFlag, - [FRONTIER_UTIL_FUNC_15] = sub_81A3FD4, + [FRONTIER_UTIL_FUNC_CHECK_INELIGIBLE] = CheckPartyIneligibility, [FRONTIER_UTIL_FUNC_CHECK_VISIT_TRAINER] = ValidateVisitingTrainer, - [FRONTIER_UTIL_FUNC_17] = sub_81A4230, - [FRONTIER_UTIL_FUNC_18] = sub_81A43A8, - [FRONTIER_UTIL_FUNC_19] = sub_81A4410, + [FRONTIER_UTIL_FUNC_INCREMENT_STREAK] = IncrementWinStreak, + [FRONTIER_UTIL_FUNC_RESTORE_HELD_ITEMS] = RestoreHeldItems, + [FRONTIER_UTIL_FUNC_SAVE_BATTLE] = SaveRecordBattle, [FRONTIER_UTIL_FUNC_BUFFER_TRAINER_NAME] = BufferFrontierTrainerName, [FRONTIER_UTIL_FUNC_RESET_SKETCH_MOVES] = ResetSketchedMoves, [FRONTIER_UTIL_FUNC_SET_BRAIN_OBJECT] = SetFacilityBrainEventObject, }; -static const struct WindowTemplate gUnknown_08611C74 = +static const struct WindowTemplate sFrontierResultsWindowTemplate = { .bg = 0, .tilemapLeft = 1, @@ -640,7 +642,7 @@ static const struct WindowTemplate gUnknown_08611C74 = .baseBlock = 1 }; -static const struct WindowTemplate gUnknown_08611C7C = +static const struct WindowTemplate sLinkContestResultsWindowTemplate = { .bg = 0, .tilemapLeft = 2, @@ -651,7 +653,7 @@ static const struct WindowTemplate gUnknown_08611C7C = .baseBlock = 1 }; -static const struct WindowTemplate gUnknown_08611C84 = +static const struct WindowTemplate sRankingHallRecordsWindowTemplate = { .bg = 0, .tilemapLeft = 2, @@ -787,29 +789,28 @@ void CallFrontierUtilFunc(void) sFrontierUtilFuncs[gSpecialVar_0x8004](); } -// Buffers into VAR_TEMP_0 specifically because this is used to react to the outcome in OnFrame map scripts -// TODO: use constants, fix name, rename field, compare to get/set data 0 +// Buffers into VAR_TEMP_0 specifically because this is used to react to the status in OnFrame map scripts static void GetChallengeStatus(void) { VarSet(VAR_TEMP_0, 0xFF); - switch (gSaveBlock2Ptr->frontier.challengeOutcome) + switch (gSaveBlock2Ptr->frontier.challengeStatus) { case 0: break; - case 1: + case CHALLENGE_STATUS_SAVING: FrontierGamblerSetWonOrLost(FALSE); - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeOutcome); + VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus); break; - case 4: + case CHALLENGE_STATUS_LOST: FrontierGamblerSetWonOrLost(FALSE); - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeOutcome); + VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus); break; - case 3: + case CHALLENGE_STATUS_WON: FrontierGamblerSetWonOrLost(TRUE); - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeOutcome); + VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus); break; - case 2: - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeOutcome); + case CHALLENGE_STATUS_PAUSED: + VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus); break; } } @@ -823,27 +824,27 @@ static void GetFrontierData(void) switch (gSpecialVar_0x8005) { - case 0: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.challengeOutcome; + case FRONTIER_DATA_CHALLENGE_STATUS: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.challengeStatus; break; - case 1: + case FRONTIER_DATA_LVL_MODE: gSpecialVar_Result = gSaveBlock2Ptr->frontier.lvlMode; break; - case 2: + case FRONTIER_DATA_BATTLE_NUM: gSpecialVar_Result = gSaveBlock2Ptr->frontier.curChallengeBattleNum; break; - case 3: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_a; + case FRONTIER_DATA_PAUSED: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.challengePaused; break; - case 5: + case FRONTIER_DATA_BATTLE_OUTCOME: gSpecialVar_Result = gBattleOutcome; gBattleOutcome = 0; break; - case 6: + case FRONTIER_DATA_6: gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_b; break; - case 7: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.symbolFlags & sFacilitySymbolBitFlags[facility][hasSymbol]; + case FRONTIER_DATA_HEARD_BRAIN_SPEECH: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.battledBrainFlags & sBattledBrainBitFlags[facility][hasSymbol]; break; } } @@ -858,32 +859,32 @@ static void SetFrontierData(void) switch (gSpecialVar_0x8005) { - case 0: - gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8006; + case FRONTIER_DATA_CHALLENGE_STATUS: + gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8006; break; - case 1: + case FRONTIER_DATA_LVL_MODE: gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_0x8006; break; - case 2: + case FRONTIER_DATA_BATTLE_NUM: gSaveBlock2Ptr->frontier.curChallengeBattleNum = gSpecialVar_0x8006; break; - case 3: - gSaveBlock2Ptr->frontier.field_CA9_a = gSpecialVar_0x8006; + case FRONTIER_DATA_PAUSED: + gSaveBlock2Ptr->frontier.challengePaused = gSpecialVar_0x8006; break; - case 4: - for (i = 0; i < 4; i++) + case FRONTIER_DATA_SELECTED_MON_ORDER: + for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gSelectedOrderFromParty[i]; break; - case 6: + case FRONTIER_DATA_6: gSaveBlock2Ptr->frontier.field_CA9_b = gSpecialVar_0x8006; break; - case 7: - gSaveBlock2Ptr->frontier.symbolFlags |= sFacilitySymbolBitFlags[facility][hasSymbol]; + case FRONTIER_DATA_HEARD_BRAIN_SPEECH: + gSaveBlock2Ptr->frontier.battledBrainFlags |= sBattledBrainBitFlags[facility][hasSymbol]; break; } } -static void LoadSelectedParty(void) +static void SetSelectedPartyOrder(void) { s32 i; @@ -903,11 +904,11 @@ static void SetFrontierTrainers(void) gFacilityTrainers = gBattleFrontierTrainers; } -static void sub_81A1B38(void) +static void SaveSelectedParty(void) { u8 i; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) { u16 monId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; if (monId < PARTY_SIZE) @@ -948,9 +949,9 @@ static void ShowFacilityResultsWindow(void) } } -static bool8 sub_81A1C24(u32 flags) +static bool8 IsWinStreakActive(u32 challenge) { - if (gSaveBlock2Ptr->frontier.field_CDC & flags) + if (gSaveBlock2Ptr->frontier.winStreakActiveFlags & challenge) return TRUE; else return FALSE; @@ -980,8 +981,8 @@ static void PrintHyphens(s32 y) static void TowerPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) { AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); - if (num > 9999) - num = 9999; + if (num > MAX_STREAK) + num = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_WinStreak); AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); @@ -996,8 +997,8 @@ static void TowerPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y static u16 TowerGetWinStreak(u8 battleMode, u8 lvlMode) { u16 winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; - if (winStreak > 9999) - return 9999; + if (winStreak > MAX_STREAK) + return MAX_STREAK; else return winStreak; } @@ -1011,27 +1012,27 @@ static void TowerPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x default: case FRONTIER_MODE_SINGLES: if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(2); + isCurrent = IsWinStreakActive(STREAK_TOWER_SINGLES_OPEN); else - isCurrent = sub_81A1C24(1); + isCurrent = IsWinStreakActive(STREAK_TOWER_SINGLES_50); break; case FRONTIER_MODE_DOUBLES: if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x8000); + isCurrent = IsWinStreakActive(STREAK_TOWER_DOUBLES_OPEN); else - isCurrent = sub_81A1C24(0x4000); + isCurrent = IsWinStreakActive(STREAK_TOWER_DOUBLES_50); break; case FRONTIER_MODE_MULTIS: if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x20000); + isCurrent = IsWinStreakActive(STREAK_TOWER_MULTIS_OPEN); else - isCurrent = sub_81A1C24(0x10000); + isCurrent = IsWinStreakActive(STREAK_TOWER_MULTIS_50); break; case FRONTIER_MODE_LINK_MULTIS: if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x80000); + isCurrent = IsWinStreakActive(STREAK_TOWER_LINK_MULTIS_OPEN); else - isCurrent = sub_81A1C24(0x40000); + isCurrent = IsWinStreakActive(STREAK_TOWER_LINK_MULTIS_50); break; } @@ -1043,7 +1044,7 @@ static void TowerPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x static void ShowTowerResultsWindow(u8 battleMode) { - gRecordsWindowId = AddWindow(&gUnknown_08611C74); + gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate); DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); if (battleMode == FRONTIER_MODE_SINGLES) @@ -1071,8 +1072,8 @@ static void ShowTowerResultsWindow(u8 battleMode) static u16 DomeGetWinStreak(u8 battleMode, u8 lvlMode) { u16 winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; - if (winStreak > 9999) - return 9999; + if (winStreak > MAX_STREAK) + return MAX_STREAK; else return winStreak; } @@ -1094,15 +1095,15 @@ static void DomePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2 default: case FRONTIER_MODE_SINGLES: if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(8); + isCurrent = IsWinStreakActive(STREAK_DOME_SINGLES_OPEN); else - isCurrent = sub_81A1C24(4); + isCurrent = IsWinStreakActive(STREAK_DOME_SINGLES_50); break; case FRONTIER_MODE_DOUBLES: if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x200000); + isCurrent = IsWinStreakActive(STREAK_DOME_DOUBLES_OPEN); else - isCurrent = sub_81A1C24(0x100000); + isCurrent = IsWinStreakActive(STREAK_DOME_DOUBLES_50); break; } @@ -1114,7 +1115,7 @@ static void DomePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2 static void ShowDomeResultsWindow(u8 battleMode) { - gRecordsWindowId = AddWindow(&gUnknown_08611C74); + gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate); DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); if (battleMode == FRONTIER_MODE_SINGLES) @@ -1140,8 +1141,8 @@ static void ShowDomeResultsWindow(u8 battleMode) static void PalacePrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) { AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); - if (num > 9999) - num = 9999; + if (num > MAX_STREAK) + num = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_WinStreak); AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); @@ -1156,8 +1157,8 @@ static void PalacePrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 static u16 PalaceGetWinStreak(u8 battleMode, u8 lvlMode) { u16 winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; - if (winStreak > 9999) - return 9999; + if (winStreak > MAX_STREAK) + return MAX_STREAK; else return winStreak; } @@ -1171,15 +1172,15 @@ static void PalacePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 default: case FRONTIER_MODE_SINGLES: if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x20); + isCurrent = IsWinStreakActive(STREAK_PALACE_SINGLES_OPEN); else - isCurrent = sub_81A1C24(0x10); + isCurrent = IsWinStreakActive(STREAK_PALACE_SINGLES_50); break; case FRONTIER_MODE_DOUBLES: if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x800000); + isCurrent = IsWinStreakActive(STREAK_PALACE_DOUBLES_OPEN); else - isCurrent = sub_81A1C24(0x400000); + isCurrent = IsWinStreakActive(STREAK_PALACE_DOUBLES_50); } if (isCurrent == TRUE) @@ -1190,7 +1191,7 @@ static void PalacePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 static void ShowPalaceResultsWindow(u8 battleMode) { - gRecordsWindowId = AddWindow(&gUnknown_08611C74); + gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate); DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); if (battleMode == FRONTIER_MODE_SINGLES) @@ -1214,8 +1215,8 @@ static void ShowPalaceResultsWindow(u8 battleMode) static u16 PikeGetWinStreak(u8 lvlMode) { u16 winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; - if (winStreak > 9999) - return 9999; + if (winStreak > MAX_STREAK) + return MAX_STREAK; else return winStreak; } @@ -1234,9 +1235,9 @@ static void PikePrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) u16 winStreak = PikeGetWinStreak(lvlMode); if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x800); + isCurrent = IsWinStreakActive(STREAK_PIKE_OPEN); else - isCurrent = sub_81A1C24(0x400); + isCurrent = IsWinStreakActive(STREAK_PIKE_50); if (isCurrent == TRUE) PrintTwoStrings(gText_Current, gText_RoomsCleared, winStreak, x1, x2, y); @@ -1246,7 +1247,7 @@ static void PikePrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) static void ShowPikeResultsWindow(void) { - gRecordsWindowId = AddWindow(&gUnknown_08611C74); + gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate); DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); StringExpandPlaceholders(gStringVar4, gText_BattleChoiceResults); @@ -1268,8 +1269,8 @@ static void ShowPikeResultsWindow(void) static void ArenaPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) { AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); - if (num > 9999) - num = 9999; + if (num > MAX_STREAK) + num = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_KOsInARow); AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); @@ -1284,8 +1285,8 @@ static void ArenaPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) static u16 ArenaGetWinStreak(u8 lvlMode) { u16 winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]; - if (winStreak > 9999) - return 9999; + if (winStreak > MAX_STREAK) + return MAX_STREAK; else return winStreak; } @@ -1296,9 +1297,9 @@ static void ArenaPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) u16 winStreak = ArenaGetWinStreak(lvlMode); if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x80); + isCurrent = IsWinStreakActive(STREAK_ARENA_OPEN); else - isCurrent = sub_81A1C24(0x40); + isCurrent = IsWinStreakActive(STREAK_ARENA_50); if (isCurrent == TRUE) ArenaPrintStreak(gText_Current, winStreak, x1, x2, y); @@ -1308,7 +1309,7 @@ static void ArenaPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) static void ShowArenaResultsWindow(void) { - gRecordsWindowId = AddWindow(&gUnknown_08611C74); + gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate); DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); PrintHyphens(10); @@ -1328,8 +1329,8 @@ static void ShowArenaResultsWindow(void) static void FactoryPrintStreak(const u8 *str, u16 num1, u16 num2, u8 x1, u8 x2, u8 x3, u8 y) { AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); - if (num1 > 9999) - num1 = 9999; + if (num1 > MAX_STREAK) + num1 = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar1, num1, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_WinStreak); AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); @@ -1349,8 +1350,8 @@ static void FactoryPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 static u16 FactoryGetWinStreak(u8 battleMode, u8 lvlMode) { u16 winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; - if (winStreak > 9999) - return 9999; + if (winStreak > MAX_STREAK) + return MAX_STREAK; else return winStreak; } @@ -1358,8 +1359,8 @@ static u16 FactoryGetWinStreak(u8 battleMode, u8 lvlMode) static u16 FactoryGetRentsCount(u8 battleMode, u8 lvlMode) { u16 rents = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode]; - if (rents > 9999) - return 9999; + if (rents > MAX_STREAK) + return MAX_STREAK; else return rents; } @@ -1374,15 +1375,15 @@ static void FactoryPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 default: case FRONTIER_MODE_SINGLES: if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x200); + isCurrent = IsWinStreakActive(STREAK_FACTORY_SINGLES_OPEN); else - isCurrent = sub_81A1C24(0x100); + isCurrent = IsWinStreakActive(STREAK_FACTORY_SINGLES_50); break; case FRONTIER_MODE_DOUBLES: if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x2000000); + isCurrent = IsWinStreakActive(STREAK_FACTORY_DOUBLES_OPEN); else - isCurrent = sub_81A1C24(0x1000000); + isCurrent = IsWinStreakActive(STREAK_FACTORY_DOUBLES_50); break; } @@ -1394,7 +1395,7 @@ static void FactoryPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 static void ShowFactoryResultsWindow(u8 battleMode) { - gRecordsWindowId = AddWindow(&gUnknown_08611C74); + gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate); DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); if (battleMode == FRONTIER_MODE_SINGLES) @@ -1419,8 +1420,8 @@ static void ShowFactoryResultsWindow(u8 battleMode) static void PyramidPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) { AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); - if (num > 9999) - num = 9999; + if (num > MAX_STREAK) + num = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_FloorsCleared); AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); @@ -1435,8 +1436,8 @@ static void PyramidPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) static u16 PyramidGetWinStreak(u8 lvlMode) { u16 winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]; - if (winStreak > 9999) - return 9999; + if (winStreak > MAX_STREAK) + return MAX_STREAK; else return winStreak; } @@ -1447,9 +1448,9 @@ static void PyramidPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) u16 winStreak = PyramidGetWinStreak(lvlMode); if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x2000); + isCurrent = IsWinStreakActive(STREAK_PYRAMID_OPEN); else - isCurrent = sub_81A1C24(0x1000); + isCurrent = IsWinStreakActive(STREAK_PYRAMID_50); if (isCurrent == TRUE) PyramidPrintStreak(gText_Current, winStreak, x1, x2, y); @@ -1459,7 +1460,7 @@ static void PyramidPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) static void ShowPyramidResultsWindow(void) { - gRecordsWindowId = AddWindow(&gUnknown_08611C74); + gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate); DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); StringExpandPlaceholders(gStringVar4, gText_BattleQuestResults); @@ -1482,7 +1483,7 @@ static void ShowLinkContestResultsWindow(void) s32 i, j; s32 x; - gRecordsWindowId = AddWindow(&gUnknown_08611C7C); + gRecordsWindowId = AddWindow(&sLinkContestResultsWindowTemplate); DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); @@ -1526,7 +1527,7 @@ static void ShowLinkContestResultsWindow(void) CopyWindowToVram(gRecordsWindowId, 3); } -static void sub_81A31FC(void) +static void CheckPutFrontierTVShowOnAir(void) { u8 name[32]; s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; @@ -1543,25 +1544,25 @@ static void sub_81A31FC(void) { StringCopy(name, gLinkPlayers[gBattleScripting.multiplayerId ^ 1].name); StripExtCtrlCodes(name); - StringCopy(gSaveBlock2Ptr->frontier.opponentName[lvlMode], name); - SetTrainerId(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.field_EF1[lvlMode]); + StringCopy(gSaveBlock2Ptr->frontier.opponentNames[lvlMode], name); + SetTrainerId(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.opponentTrainerIds[lvlMode]); } if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > 1 - && sub_80EE818()) + && ShouldAirFrontierTVShow()) { switch (battleMode) { case FRONTIER_MODE_SINGLES: - sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 1); + TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 1); break; case FRONTIER_MODE_DOUBLES: - sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 2); + TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 2); break; case FRONTIER_MODE_MULTIS: - sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 3); + TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 3); break; case FRONTIER_MODE_LINK_MULTIS: - sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 4); + TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 4); break; } } @@ -1572,12 +1573,12 @@ static void sub_81A31FC(void) { gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] > 1 - && sub_80EE818()) + && ShouldAirFrontierTVShow()) { if (battleMode == FRONTIER_MODE_SINGLES) - sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 5); + TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 5); else - sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 6); + TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 6); } } break; @@ -1586,12 +1587,12 @@ static void sub_81A31FC(void) { gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > 1 - && sub_80EE818()) + && ShouldAirFrontierTVShow()) { if (battleMode == FRONTIER_MODE_SINGLES) - sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 11); + TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 11); else - sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 12); + TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 12); } } break; @@ -1600,9 +1601,9 @@ static void sub_81A31FC(void) { gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]; if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > 1 - && sub_80EE818()) + && ShouldAirFrontierTVShow()) { - sub_80EE8C8(gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode], 10); + TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode], 10); } } break; @@ -1612,12 +1613,12 @@ static void sub_81A31FC(void) gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; gSaveBlock2Ptr->frontier.factoryRecordRentsCount[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode]; if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] > 1 - && sub_80EE818()) + && ShouldAirFrontierTVShow()) { if (battleMode == FRONTIER_MODE_SINGLES) - sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 7); + TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 7); else - sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 8); + TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 8); } } break; @@ -1626,9 +1627,9 @@ static void sub_81A31FC(void) { gSaveBlock2Ptr->frontier.pikeRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] > 1 - && sub_80EE818()) + && ShouldAirFrontierTVShow()) { - sub_80EE8C8(gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode], 9); + TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode], 9); } } break; @@ -1637,9 +1638,9 @@ static void sub_81A31FC(void) { gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]; if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] > 1 - && sub_80EE818()) + && ShouldAirFrontierTVShow()) { - sub_80EE8C8(gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode], 13); + TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode], 13); } } break; @@ -1772,11 +1773,11 @@ void CopyFrontierTrainerText(u8 whichText, u16 trainerId) } } -void sub_81A3908(void) +void ResetWinStreaks(void) { s32 battleMode, lvlMode; - gSaveBlock2Ptr->frontier.field_CDC = 0; + gSaveBlock2Ptr->frontier.winStreakActiveFlags = 0; for (battleMode = 0; battleMode < 4; battleMode++) { for (lvlMode = 0; lvlMode < 2; lvlMode++) @@ -1796,8 +1797,8 @@ void sub_81A3908(void) } } } - if (gSaveBlock2Ptr->frontier.challengeOutcome != 0) - gSaveBlock2Ptr->frontier.challengeOutcome = 1; + if (gSaveBlock2Ptr->frontier.challengeStatus != 0) + gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_SAVING; } u32 GetCurrentFacilityWinStreak(void) @@ -1827,11 +1828,11 @@ u32 GetCurrentFacilityWinStreak(void) } } -void sub_81A3ACC(void) +void ResetFrontierTrainerIds(void) { s32 i; - for (i = 0; i < 20; i++) + for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.trainerIds); i++) gSaveBlock2Ptr->frontier.trainerIds[i] = 0xFFFF; } @@ -1849,7 +1850,7 @@ u8 GetPlayerSymbolCountForFacility(u8 facility) + FlagGet(FLAG_SYS_TOWER_GOLD + facility * 2); } -static void sub_81A3B64(void) +static void GiveBattlePoints(void) { s32 challengeNum = 0; s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; @@ -1895,7 +1896,7 @@ static void sub_81A3B64(void) if (gSaveBlock2Ptr->frontier.battlePoints > MAX_BATTLE_FRONTIER_POINTS) gSaveBlock2Ptr->frontier.battlePoints = MAX_BATTLE_FRONTIER_POINTS; - points = gSaveBlock2Ptr->frontier.field_EBA; + points = gSaveBlock2Ptr->frontier.cardBattlePoints; points += sBattlePointAwards[challengeNum][facility][battleMode]; IncrementDailyBattlePoints(sBattlePointAwards[challengeNum][facility][battleMode]); if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) @@ -1905,7 +1906,7 @@ static void sub_81A3B64(void) } if (points > 0xFFFF) points = 0xFFFF; - gSaveBlock2Ptr->frontier.field_EBA = points; + gSaveBlock2Ptr->frontier.cardBattlePoints = points; } static void GetFacilitySymbolCount(void) @@ -1931,7 +1932,7 @@ static void CheckBattleTypeFlag(void) gSpecialVar_Result = FALSE; } -static u8 AppendBannedMonSpeciesName(u16 species, u8 count, s32 numBannedMonsCaught) +static u8 AppendCaughtBannedMonSpeciesName(u16 species, u8 count, s32 numBannedMonsCaught) { if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) { @@ -1961,7 +1962,7 @@ static u8 AppendBannedMonSpeciesName(u16 species, u8 count, s32 numBannedMonsCau StringAppend(gStringVar1, gText_SpaceAndSpace); else StringAppend(gStringVar1, gText_CommaSpace); - StringAppend(gStringVar1, gText_ScrollTextUp); + StringAppend(gStringVar1, gText_LineBreak); break; } StringAppend(gStringVar1, gSpeciesNames[species]); @@ -2003,7 +2004,10 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL (*count)++; } -static void sub_81A3FD4(void) +// gSpecialVar_Result is the level mode before and after calls to this function +// gSpecialVar_0x8004 is used to store the return value instead (TRUE if there are insufficient eligible mons) +// The names of ineligible pokemon that have been caught are also buffered to print +static void CheckPartyIneligibility(void) { u16 speciesArray[PARTY_SIZE]; u16 itemArray[PARTY_SIZE]; @@ -2013,20 +2017,23 @@ static void sub_81A3FD4(void) s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); s32 monIdLooper; + // count is re-used, define for clarity + #define numEligibleMons count + switch (battleMode) { case FRONTIER_MODE_SINGLES: - toChoose = 3; + toChoose = FRONTIER_PARTY_SIZE; break; case FRONTIER_MODE_MULTIS: case FRONTIER_MODE_LINK_MULTIS: - toChoose = 2; + toChoose = FRONTIER_MULTI_PARTY_SIZE; break; case FRONTIER_MODE_DOUBLES: if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_TOWER) - toChoose = 4; + toChoose = FRONTIER_DOUBLES_PARTY_SIZE; else - toChoose = 3; + toChoose = FRONTIER_PARTY_SIZE; break; } @@ -2034,7 +2041,7 @@ static void sub_81A3FD4(void) do { monId = monIdLooper; - count = 0; + numEligibleMons = 0; do { u16 species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); @@ -2044,11 +2051,11 @@ static void sub_81A3FD4(void) if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_PYRAMID) { if (heldItem == ITEM_NONE) - AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count); + AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &numEligibleMons); } else { - AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count); + AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &numEligibleMons); } monId++; if (monId >= PARTY_SIZE) @@ -2056,9 +2063,9 @@ static void sub_81A3FD4(void) } while (monId != monIdLooper); monIdLooper++; - } while (monIdLooper < PARTY_SIZE && count < toChoose); + } while (monIdLooper < PARTY_SIZE && numEligibleMons < toChoose); - if (count < toChoose) + if (numEligibleMons < toChoose) { s32 i; s32 caughtBannedMons = 0; @@ -2069,10 +2076,10 @@ static void sub_81A3FD4(void) caughtBannedMons++; } gStringVar1[0] = EOS; - gSpecialVar_0x8004 = 1; + gSpecialVar_0x8004 = TRUE; count = 0; for (i = 0; gFrontierBannedSpecies[i] != 0xFFFF; i++) - count = AppendBannedMonSpeciesName(gFrontierBannedSpecies[i], count, caughtBannedMons); + count = AppendCaughtBannedMonSpeciesName(gFrontierBannedSpecies[i], count, caughtBannedMons); if (count == 0) { @@ -2082,7 +2089,7 @@ static void sub_81A3FD4(void) else { if (count & 1) - StringAppend(gStringVar1, gText_ScrollTextUp); + StringAppend(gStringVar1, gText_LineBreak); else StringAppend(gStringVar1, gText_Space2); StringAppend(gStringVar1, gText_Are2); @@ -2090,9 +2097,10 @@ static void sub_81A3FD4(void) } else { - gSpecialVar_0x8004 = 0; + gSpecialVar_0x8004 = FALSE; gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_Result; } + #undef numEligibleMons } static void ValidateVisitingTrainer(void) @@ -2100,7 +2108,7 @@ static void ValidateVisitingTrainer(void) ValidateEReaderTrainer(); } -static void sub_81A4230(void) +static void IncrementWinStreak(void) { s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); @@ -2109,50 +2117,50 @@ static void sub_81A4230(void) switch (facility) { case FRONTIER_FACILITY_TOWER: - if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] < 9999) + if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] < MAX_STREAK) { gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]++; if (battleMode == FRONTIER_MODE_SINGLES) { SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]); - gSaveBlock2Ptr->frontier.field_D02 = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; + gSaveBlock2Ptr->frontier.towerSinglesStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; } } break; case FRONTIER_FACILITY_DOME: - if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] < 9999) + if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] < MAX_STREAK) gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]++; - if (gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode] < 9999) + if (gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode] < MAX_STREAK) gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode]++; break; case FRONTIER_FACILITY_PALACE: - if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999) + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < MAX_STREAK) gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++; break; case FRONTIER_FACILITY_ARENA: - if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] < 9999) + if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] < MAX_STREAK) gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]++; break; case FRONTIER_FACILITY_FACTORY: - if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] < 9999) + if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] < MAX_STREAK) gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]++; break; case FRONTIER_FACILITY_PIKE: - if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] < 9999) + if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] < MAX_STREAK) gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]++; break; case FRONTIER_FACILITY_PYRAMID: - if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] < 9999) + if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] < MAX_STREAK) gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]++; break; } } -static void sub_81A43A8(void) +static void RestoreHeldItems(void) { u8 i; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) { if (gSaveBlock2Ptr->frontier.selectedPartyMons[i] != 0) { @@ -2162,7 +2170,7 @@ static void sub_81A43A8(void) } } -static void sub_81A4410(void) +static void SaveRecordBattle(void) { gSpecialVar_Result = MoveRecordedBattleToSaveData(); gSaveBlock2Ptr->frontier.field_CA9_b = 1; @@ -2185,7 +2193,7 @@ static void ResetSketchedMoves(void) { u8 i, j, k; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) { u16 monId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; if (monId < PARTY_SIZE) @@ -2224,8 +2232,8 @@ static void Print1PRecord(s32 position, s32 x, s32 y, struct RankingHall1P *hall TVShowConvertInternationalString(text, hallRecord->name, hallRecord->language); AddTextPrinterParameterized(gRecordsWindowId, 1, text, (x + 2) * 8, (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL); winStreak = hallRecord->winStreak; - if (winStreak > 9999) - winStreak = 9999; + if (winStreak > MAX_STREAK) + winStreak = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar2, winStreak, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, sHallFacilityToRecordsText[hallFacilityId]); AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, sHallFacilityToRecordsText[hallFacilityId], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL); @@ -2251,8 +2259,8 @@ static void Print2PRecord(s32 position, s32 x, s32 y, struct RankingHall2P *hall AddTextPrinterParameterized(gRecordsWindowId, 1, text, (x + 4) * 8, (8 * (y + 5 * position + 1)) + 1, TEXT_SPEED_FF, NULL); winStreak = hallRecord->winStreak; - if (winStreak > 9999) - winStreak = 9999; + if (winStreak > MAX_STREAK) + winStreak = MAX_STREAK; ConvertIntToDecimalStringN(gStringVar2, winStreak, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, sHallFacilityToRecordsText[RANKING_HALL_BATTLE_TOWER_LINK]); AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, sHallFacilityToRecordsText[RANKING_HALL_BATTLE_TOWER_LINK], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL); @@ -2341,8 +2349,8 @@ static void PrintHallRecords(s32 hallFacilityId, s32 lvlMode) AddTextPrinterParameterized(gRecordsWindowId, 1, sLevelModeText[lvlMode], x, 1, TEXT_SPEED_FF, NULL); if (hallFacilityId == RANKING_HALL_BATTLE_TOWER_LINK) { - gSaveBlock2Ptr->frontier.opponentName[0][PLAYER_NAME_LENGTH] = EOS; - gSaveBlock2Ptr->frontier.opponentName[1][PLAYER_NAME_LENGTH] = EOS; + gSaveBlock2Ptr->frontier.opponentNames[0][PLAYER_NAME_LENGTH] = EOS; + gSaveBlock2Ptr->frontier.opponentNames[1][PLAYER_NAME_LENGTH] = EOS; Fill2PRecords(records2P, lvlMode); for (i = 0; i < 3; i++) Print2PRecord(i, 1, 4, &records2P[i]); @@ -2357,7 +2365,7 @@ static void PrintHallRecords(s32 hallFacilityId, s32 lvlMode) void ShowRankingHallRecordsWindow(void) { - gRecordsWindowId = AddWindow(&gUnknown_08611C84); + gRecordsWindowId = AddWindow(&sRankingHallRecordsWindowTemplate); DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1)); PrintHallRecords(gSpecialVar_0x8005, FRONTIER_LVL_50); @@ -2402,7 +2410,7 @@ void ClearRankingHallRecords(void) } } -void sub_81A4C30(void) +void SaveGameFrontier(void) { s32 i; struct Pokemon *monsParty = calloc(PARTY_SIZE, sizeof(struct Pokemon)); diff --git a/src/link.c b/src/link.c index b010558a5..dcc35d7d0 100644 --- a/src/link.c +++ b/src/link.c @@ -453,7 +453,7 @@ static void LinkTestProcessKeyInput(void) } if (gMain.newKeys & R_BUTTON) { - TrySavingData(1); + TrySavingData(SAVE_LINK); } if (gMain.newKeys & SELECT_BUTTON) { diff --git a/src/mystery_gift.c b/src/mystery_gift.c index aae7d127e..9da5f060a 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -921,7 +921,7 @@ static bool32 mevent_save_game(u8 * state) (*state)++; break; case 1: - TrySavingData(0); + TrySavingData(SAVE_NORMAL); (*state)++; break; case 2: diff --git a/src/new_game.c b/src/new_game.c index 1021ea96c..b24114f77 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -122,8 +122,8 @@ static void ClearFrontierRecord(void) { CpuFill32(0, &gSaveBlock2Ptr->frontier, sizeof(gSaveBlock2Ptr->frontier)); - gSaveBlock2Ptr->frontier.opponentName[0][0] = EOS; - gSaveBlock2Ptr->frontier.opponentName[1][0] = EOS; + gSaveBlock2Ptr->frontier.opponentNames[0][0] = EOS; + gSaveBlock2Ptr->frontier.opponentNames[1][0] = EOS; } static void WarpToTruck(void) diff --git a/src/overworld.c b/src/overworld.c index c2e3d2789..f135dd3b1 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1715,7 +1715,7 @@ void CB2_ContinueSavedGame(void) StopMapMusic(); ResetSafariZoneFlag_(); if (gSaveFileStatus == 0xFF) - sub_81A3908(); + ResetWinStreaks(); LoadSaveblockMapHeader(); ClearDiveAndHoleWarps(); diff --git a/src/pokemon.c b/src/pokemon.c index 376f400e6..2b9483c53 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1887,7 +1887,7 @@ const u16 gLinkPlayerFacilityClasses[] = 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_POKEMON_BREEDER_F, FACILITY_CLASS_BEAUTY + FACILITY_CLASS_PKMN_BREEDER_F, FACILITY_CLASS_BEAUTY }; static const u8 sHoldEffectToType[][2] = diff --git a/src/record_mixing.c b/src/record_mixing.c index 4ad47cc21..00b2cb076 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -1094,9 +1094,9 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst) { dst->twoPlayers[j].language = GAME_LANGUAGE; CopyTrainerId(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId); - CopyTrainerId(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.field_EF1[j]); + CopyTrainerId(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.opponentTrainerIds[j]); StringCopy(dst->twoPlayers[j].name1, gSaveBlock2Ptr->playerName); - StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.opponentName[j]); + StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.opponentNames[j]); } for (i = 0; i < 2; i++) diff --git a/src/recorded_battle.c b/src/recorded_battle.c index bde2b7bb6..1533fd5ad 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -334,9 +334,9 @@ bool32 MoveRecordedBattleToSaveData(void) s32 i, j; bool32 ret; struct RecordedBattleSave *battleSave, *savSection; - u8 var; + u8 saveAttempts; - var = 0; + saveAttempts = 0; battleSave = AllocZeroed(sizeof(struct RecordedBattleSave)); savSection = AllocZeroed(0x1000); @@ -480,8 +480,8 @@ bool32 MoveRecordedBattleToSaveData(void) ret = RecordedBattleToSave(battleSave, savSection); if (ret == TRUE) break; - var++; - if (var >= 3) + saveAttempts++; + if (saveAttempts >= 3) break; } diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c index eebaab52f..2bbf7d782 100644 --- a/src/reset_rtc_screen.c +++ b/src/reset_rtc_screen.c @@ -608,7 +608,7 @@ static void Task_ResetRtcScreen(u8 taskId) } break; case 4: - if (TrySavingData(0) == 1) + if (TrySavingData(SAVE_NORMAL) == 1) { ShowMessage(gText_SaveCompleted); PlaySE(SE_PINPON); diff --git a/src/save.c b/src/save.c index cdfd2ae1d..e1f5a6fff 100644 --- a/src/save.c +++ b/src/save.c @@ -683,8 +683,8 @@ u8 HandleSavingData(u8 saveType) SaveSerializedGame(); save_write_to_flash(0xFFFF, gRamSaveSectionLocations); break; - case SAVE_LINK: // _081532C4 - case SAVE_LINK2: + case SAVE_LINK: // Link and Battle Frontier + case SAVE_LINK2: // Unused SaveSerializedGame(); for(i = 0; i < 5; i++) ClearSaveData_2(i, gRamSaveSectionLocations); diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c index 8c66be30f..8c3da5fc8 100755 --- a/src/script_pokemon_util_80F87D8.c +++ b/src/script_pokemon_util_80F87D8.c @@ -640,7 +640,7 @@ void CreateScriptedWildMon(u16 species, u8 level, u16 item) u8 heldItem[2]; ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], species, level, 0x20, 0, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); if (item) { heldItem[0] = item; diff --git a/src/trainer_card.c b/src/trainer_card.c index f3bff3731..9fa686e16 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -728,7 +728,7 @@ static void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCar trainerCard->version = GAME_VERSION; SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD); trainerCard->hasAllSymbols = HasAllFrontierSymbols(); - trainerCard->frontierBP = gSaveBlock2Ptr->frontier.field_EBA; + trainerCard->frontierBP = gSaveBlock2Ptr->frontier.cardBattlePoints; if (trainerCard->hasAllSymbols) trainerCard->stars++; @@ -744,7 +744,7 @@ void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) trainerCard->version = GAME_VERSION; SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD); trainerCard->var_3A = HasAllFrontierSymbols(); - *((u16*)&trainerCard->berryCrushPoints) = gSaveBlock2Ptr->frontier.field_EBA; + *((u16*)&trainerCard->berryCrushPoints) = gSaveBlock2Ptr->frontier.cardBattlePoints; if (trainerCard->var_3A) trainerCard->stars++; @@ -1,7 +1,6 @@ #include "global.h" #include "rtc.h" #include "overworld.h" -#include "constants/maps.h" #include "random.h" #include "event_data.h" #include "fieldmap.h" @@ -14,12 +13,9 @@ #include "pokemon_storage_system.h" #include "field_message_box.h" #include "easy_chat.h" -#include "constants/species.h" -#include "constants/moves.h" #include "battle.h" #include "battle_tower.h" #include "contest.h" -#include "constants/items.h" #include "item.h" #include "link.h" #include "main.h" @@ -33,15 +29,20 @@ #include "naming_screen.h" #include "malloc.h" #include "region_map.h" -#include "constants/region_map_sections.h" #include "decoration.h" #include "secret_base.h" #include "tv.h" #include "data.h" +#include "constants/battle_frontier.h" #include "constants/contest.h" +#include "constants/items.h" #include "constants/layouts.h" +#include "constants/maps.h" #include "constants/metatile_behaviors.h" +#include "constants/moves.h" +#include "constants/region_map_sections.h" #include "constants/script_menu.h" +#include "constants/species.h" #include "constants/tv.h" // Static type declarations @@ -1538,12 +1539,12 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void) show->bravoTrainerTower.kind = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE; show->bravoTrainerTower.active = TRUE; StringCopy(show->bravoTrainerTower.trainerName, gSaveBlock2Ptr->playerName); - StringCopy(show->bravoTrainerTower.pokemonName, gSaveBlock2Ptr->frontier.field_BD8); - show->bravoTrainerTower.species = gSaveBlock2Ptr->frontier.field_BD4; - show->bravoTrainerTower.defeatedSpecies = gSaveBlock2Ptr->frontier.field_BD6; - show->bravoTrainerTower.numFights = GetCurrentBattleTowerWinStreak(gSaveBlock2Ptr->frontier.field_D07, 0); - show->bravoTrainerTower.wonTheChallenge = gSaveBlock2Ptr->frontier.field_D06; - if (gSaveBlock2Ptr->frontier.field_D07 == 0) + StringCopy(show->bravoTrainerTower.pokemonName, gSaveBlock2Ptr->frontier.towerInterview.opponentName); + show->bravoTrainerTower.species = gSaveBlock2Ptr->frontier.towerInterview.playerSpecies; + show->bravoTrainerTower.defeatedSpecies = gSaveBlock2Ptr->frontier.towerInterview.opponentSpecies; + show->bravoTrainerTower.numFights = GetCurrentBattleTowerWinStreak(gSaveBlock2Ptr->frontier.towerLvlMode, 0); + show->bravoTrainerTower.wonTheChallenge = gSaveBlock2Ptr->frontier.towerBattleOutcome; + if (gSaveBlock2Ptr->frontier.towerLvlMode == FRONTIER_LVL_50) { show->bravoTrainerTower.btLevel = 50; } @@ -1554,13 +1555,13 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void) show->bravoTrainerTower.interviewResponse = gSpecialVar_0x8004; tv_store_id_2x(show); show->bravoTrainerTower.language = gGameLanguage; - if (show->bravoTrainerTower.language == LANGUAGE_JAPANESE || gSaveBlock2Ptr->frontier.field_BEB == LANGUAGE_JAPANESE) + if (show->bravoTrainerTower.language == LANGUAGE_JAPANESE || gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage == LANGUAGE_JAPANESE) { show->bravoTrainerTower.pokemonNameLanguage = LANGUAGE_JAPANESE; } else { - show->bravoTrainerTower.pokemonNameLanguage = gSaveBlock2Ptr->frontier.field_BEB; + show->bravoTrainerTower.pokemonNameLanguage = gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage; } } @@ -2466,7 +2467,7 @@ bool8 ShouldHideFanClubInterviewer(void) return FALSE; } -bool8 sub_80EE818(void) +bool8 ShouldAirFrontierTVShow(void) { u32 playerId; u8 showIdx; @@ -2494,7 +2495,7 @@ bool8 sub_80EE818(void) return TRUE; } -void sub_80EE8C8(u16 winStreak, u8 facilityAndMode) +void TryPutFrontierTVShowOnAir(u16 winStreak, u8 facilityAndMode) { TVShow *show; |