summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_dome.c126
-rw-r--r--src/battle_message.c8
-rw-r--r--src/battle_tower.c37
-rw-r--r--src/frontier_util.c1832
-rw-r--r--src/new_game.c4
-rw-r--r--src/overworld.c2
-rw-r--r--src/record_mixing.c200
-rw-r--r--src/save.c36
-rw-r--r--src/strings.c4
-rw-r--r--src/tv.c6
10 files changed, 2009 insertions, 246 deletions
diff --git a/src/battle_dome.c b/src/battle_dome.c
index 15348e458..3677131ab 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -3,6 +3,7 @@
#include "battle.h"
#include "battle_setup.h"
#include "battle_tower.h"
+#include "battle_frontier_2.h"
#include "battle_message.h"
#include "event_data.h"
#include "overworld.h"
@@ -56,12 +57,11 @@ struct UnkStruct_860DD10
};
extern void sub_81B8558(void);
-extern u32 sub_81A39C4(void);
extern u16 sub_81A5060(u8 monId, u8 moveSlotId);
extern u8 sub_81A50F0(u8, u8);
extern u8 sub_81A50B0(u8);
extern void sub_81A4C30(void);
-extern bool8 sub_81A3610(void);
+extern u8 sub_81A3610(void);
extern u16 sub_81A4FF0(u8);
extern void ReducePlayerPartyToThree(void);
@@ -2408,7 +2408,7 @@ static void sub_818E9CC(void)
gSaveBlock2Ptr->frontier.field_CA9_a = 0;
gSaveBlock2Ptr->frontier.field_CA9_b = 0;
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]))
- gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] = 0;
+ gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = 0;
saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
gTrainerBattleOpponent_A = 0;
@@ -2422,7 +2422,7 @@ static void sub_818EA84(void)
switch (gSpecialVar_0x8005)
{
case 0:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode];
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
break;
case 1:
gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]) != 0);
@@ -2490,7 +2490,7 @@ static void sub_818ED28(void)
switch (gSpecialVar_0x8005)
{
case 0:
- gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] = gSpecialVar_0x8006;
+ gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006;
break;
case 1:
if (gSpecialVar_0x8006)
@@ -2575,7 +2575,7 @@ static void InitDomeTrainers(void)
for (i = 0; i < 3; i++)
{
- gSaveBlock2Ptr->frontier.domeMonId[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_SPECIES, NULL);
+ gSaveBlock2Ptr->frontier.domeMonIds[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_SPECIES, NULL);
for (j = 0; j < 4; 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++)
@@ -2590,7 +2590,7 @@ static void InitDomeTrainers(void)
{
do
{
- trainerId = sub_8162548(sub_81A39C4(), 0);
+ trainerId = sub_8162548(GetCurrentFacilityWinStreak(), 0);
for (j = 1; j < i; j++)
{
if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId)
@@ -2603,7 +2603,7 @@ static void InitDomeTrainers(void)
{
do
{
- trainerId = sub_8162548(sub_81A39C4() + 1, 0);
+ trainerId = sub_8162548(GetCurrentFacilityWinStreak() + 1, 0);
for (j = 1; j < i; j++)
{
if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId)
@@ -2621,7 +2621,7 @@ static void InitDomeTrainers(void)
monTournamentId = RandomizeFacilityTrainerMonId(trainerId);
for (k = 0; k < j; k++)
{
- s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonId[i][k];
+ s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonIds[i][k];
if (checkingMonId == monTournamentId
|| species[0] == gFacilityTrainerMons[monTournamentId].species
|| species[1] == gFacilityTrainerMons[monTournamentId].species
@@ -2630,7 +2630,7 @@ static void InitDomeTrainers(void)
}
} while (k != j);
- gSaveBlock2Ptr->frontier.domeMonId[i][j] = monTournamentId;
+ gSaveBlock2Ptr->frontier.domeMonIds[i][j] = monTournamentId;
species[j] = gFacilityTrainerMons[monTournamentId].species;
}
@@ -2671,10 +2671,10 @@ static void InitDomeTrainers(void)
ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId);
for (j = 0; j < 3; j++)
{
- CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species,
+ CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species,
monLevel, ivs,
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].evSpread,
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].nature,
+ gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].evSpread,
+ gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].nature,
statValues);
statSums[i] += statValues[STAT_ATK];
@@ -2683,8 +2683,8 @@ static void InitDomeTrainers(void)
statSums[i] += statValues[STAT_SPDEF];
statSums[i] += statValues[STAT_SPEED];
statSums[i] += statValues[STAT_HP];
- monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type1];
- monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type2];
+ monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species].type1];
+ monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species].type2];
}
for (monTypesCount = 0, j = 0; j < 32; j++)
@@ -2737,7 +2737,7 @@ static void InitDomeTrainers(void)
}
for (i = 0; i < 3; i++)
- gSaveBlock2Ptr->frontier.domeMonId[j][i] = sub_81A4FF0(i);
+ gSaveBlock2Ptr->frontier.domeMonIds[j][i] = sub_81A4FF0(i);
}
Free(statSums);
@@ -2799,7 +2799,7 @@ static void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray)
SWAP(gSaveBlock2Ptr->frontier.domeTrainers[id1].trainerId, gSaveBlock2Ptr->frontier.domeTrainers[id2].trainerId, temp);
for (i = 0; i < 3; i++)
- SWAP(gSaveBlock2Ptr->frontier.domeMonId[id1][i], gSaveBlock2Ptr->frontier.domeMonId[id2][i], temp);
+ SWAP(gSaveBlock2Ptr->frontier.domeMonIds[id1][i], gSaveBlock2Ptr->frontier.domeMonIds[id2][i], temp);
}
static void sub_818F9B0(void)
@@ -2829,24 +2829,24 @@ static void CreateDomeMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentM
u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3.
u8 level = SetFacilityPtrsGetLevel();
CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[monPartyId],
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].species,
+ gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].species,
level,
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].nature,
+ gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].nature,
fixedIv,
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].evSpread, otId);
+ gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].evSpread, otId);
happiness = 0xFF;
for (i = 0; i < 4; i++)
{
SetMonMoveSlot(&gEnemyParty[monPartyId],
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].moves[i], i);
- if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].moves[i] == MOVE_FRUSTRATION)
+ gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].moves[i], i);
+ if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].moves[i] == MOVE_FRUSTRATION)
happiness = 0;
}
SetMonData(&gEnemyParty[monPartyId], MON_DATA_FRIENDSHIP, &happiness);
SetMonData(&gEnemyParty[monPartyId], MON_DATA_HELD_ITEM,
- &gBattleFrontierHeldItems[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].itemTableId]);
+ &gBattleFrontierHeldItems[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].itemTableId]);
}
static void CreateDomeTrainerMons(u16 tournamentTrainerId)
@@ -2922,7 +2922,7 @@ static s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1)
}
else
{
- array[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId],
+ array[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][i]].moves[moveId],
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0);
}
}
@@ -2950,7 +2950,7 @@ static s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1)
}
else
{
- array[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId],
+ array[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][i]].moves[moveId],
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1);
}
}
@@ -3481,13 +3481,13 @@ static void sub_819033C(void)
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
- if (gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] < 999)
- gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]++;
- if (gSaveBlock2Ptr->frontier.field_D1C[battleMode][lvlMode] < 999)
- gSaveBlock2Ptr->frontier.field_D1C[battleMode][lvlMode]++;
+ if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] < 999)
+ gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]++;
+ if (gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode] < 999)
+ gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode]++;
- if (gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode])
- gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode];
+ if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode])
+ gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
}
static void ShowDomeOpponentInfo(void)
@@ -4756,7 +4756,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
{
if (trainerId == TRAINER_PLAYER)
{
- sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i],
+ sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i],
SpriteCb_MonIcon,
x | sInfoTrainerMonX[i],
y + sInfoTrainerMonY[i],
@@ -4765,7 +4765,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
}
else if (trainerId == TRAINER_FRONTIER_BRAIN)
{
- sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i],
+ sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i],
SpriteCb_MonIcon,
x | sInfoTrainerMonX[i],
y + sInfoTrainerMonY[i],
@@ -4774,7 +4774,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
}
else
{
- sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species,
+ sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].species,
SpriteCb_MonIcon,
x | sInfoTrainerMonX[i],
y + sInfoTrainerMonY[i],
@@ -4837,11 +4837,11 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
{
textPrinter.currentY = gUnknown_0860D346[i];
if (trainerId == TRAINER_PLAYER)
- textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]];
+ textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]];
else if (trainerId == TRAINER_FRONTIER_BRAIN)
- textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]];
+ textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]];
else
- textPrinter.current_text_offset = gSpeciesNames[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species];
+ textPrinter.current_text_offset = gSpeciesNames[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].species];
textPrinter.windowId = 1 + i + windowId;
if (i == 1)
@@ -4879,7 +4879,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
else if (trainerId == TRAINER_PLAYER)
allocatedArray[k] += sMovePointsForDomeTrainers[gSaveBlock2Ptr->frontier.field_EFC[i].moves[j]][k];
else
- allocatedArray[k] += sMovePointsForDomeTrainers[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].moves[j]][k];
+ allocatedArray[k] += sMovePointsForDomeTrainers[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].moves[j]][k];
}
}
}
@@ -4952,7 +4952,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
{
for (i = 0; i < 3; i++)
{
- s32 evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].evSpread;
+ s32 evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].evSpread;
for (k = 0, j = 0; j < 6; j++)
{
allocatedArray[j] = 0;
@@ -4961,7 +4961,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
evBits >>= 1;
}
k = MAX_TOTAL_EVS / k;
- evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].evSpread;
+ evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].evSpread;
for (j = 0; j < 6; j++)
{
if (evBits & 1)
@@ -4972,7 +4972,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
allocatedArray[6] += allocatedArray[0];
for (j = 0; j < 5; j++)
{
- nature = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].nature;
+ nature = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].nature;
if (gNatureStatTable[nature][j] > 0)
{
allocatedArray[j + 7] += (allocatedArray[j + 1] * 110) / 100;
@@ -5210,7 +5210,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
{
if (trainerIds[0] == TRAINER_PLAYER)
{
- sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i],
+ sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[0]][i],
SpriteCb_MonIcon,
x | sFirstTrainerMonX[i],
y + sFirstTrainerMonY[i],
@@ -5219,7 +5219,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
}
else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN)
{
- sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i],
+ sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[0]][i],
SpriteCb_MonIcon,
x | sFirstTrainerMonX[i],
y + sFirstTrainerMonY[i],
@@ -5228,7 +5228,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
}
else
{
- sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i]].species,
+ sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[0]][i]].species,
SpriteCb_MonIcon,
x | sFirstTrainerMonX[i],
y + sFirstTrainerMonY[i],
@@ -5250,7 +5250,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
{
if (trainerIds[1] == TRAINER_PLAYER)
{
- sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i],
+ sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[1]][i],
SpriteCb_MonIcon,
x | sSecondTrainerMonX[i],
y + sSecondTrainerMonY[i],
@@ -5259,7 +5259,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
}
else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN)
{
- sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i],
+ sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[1]][i],
SpriteCb_MonIcon,
x | sSecondTrainerMonX[i],
y + sSecondTrainerMonY[i],
@@ -5268,7 +5268,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
}
else
{
- sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i]].species,
+ sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[1]][i]].species,
SpriteCb_MonIcon,
x | sSecondTrainerMonX[i],
y + sSecondTrainerMonY[i],
@@ -5566,7 +5566,7 @@ static u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roun
if (gSaveBlock2Ptr->frontier.domeTrainers[winnerTournamentId].trainerId == TRAINER_FRONTIER_BRAIN)
moveIds[i * 4 + j] = sub_81A5060(i, j);
else
- moveIds[i * 4 + j] = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[winnerTournamentId][i]].moves[j];
+ moveIds[i * 4 + j] = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[winnerTournamentId][i]].moves[j];
movePower = gBattleMoves[moveIds[i * 4 + j]].power;
if (movePower == 0)
@@ -5584,9 +5584,9 @@ static u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roun
do
{
var = Random32();
- } while (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[loserTournamentId][k]].nature != GetNatureFromPersonality(var));
+ } while (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[loserTournamentId][k]].nature != GetNatureFromPersonality(var));
- targetSpecies = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[loserTournamentId][k]].species;
+ targetSpecies = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[loserTournamentId][k]].species;
if (var & 1)
targetAbility = gBaseStats[targetSpecies].ability2;
else
@@ -6193,7 +6193,7 @@ static void sub_8194F58(void)
monTournamentId = RandomizeFacilityTrainerMonId(trainerId);
for (k = 0; k < j; k++)
{
- s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonId[i][k];
+ s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonIds[i][k];
if (checkingMonId == monTournamentId
|| species[0] == gFacilityTrainerMons[monTournamentId].species
|| species[1] == gFacilityTrainerMons[monTournamentId].species
@@ -6202,7 +6202,7 @@ static void sub_8194F58(void)
}
} while (k != j);
- gSaveBlock2Ptr->frontier.domeMonId[i][j] = monTournamentId;
+ gSaveBlock2Ptr->frontier.domeMonIds[i][j] = monTournamentId;
species[j] = gFacilityTrainerMons[monTournamentId].species;
}
gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0;
@@ -6218,10 +6218,10 @@ static void sub_8194F58(void)
ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId);
for (j = 0; j < 3; j++)
{
- CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species,
+ CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species,
monLevel, ivs,
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].evSpread,
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].nature,
+ gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].evSpread,
+ gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].nature,
statValues);
statSums[i] += statValues[STAT_ATK];
@@ -6230,8 +6230,8 @@ static void sub_8194F58(void)
statSums[i] += statValues[STAT_SPDEF];
statSums[i] += statValues[STAT_SPEED];
statSums[i] += statValues[STAT_HP];
- monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type1];
- monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type2];
+ monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species].type1];
+ monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species].type2];
}
// Because GF hates temporary vars, trainerId acts like monTypesCount here.
@@ -6347,11 +6347,11 @@ static void DecideRoundWinners(u8 roundId)
{
for (monId2 = 0; monId2 < 3; monId2++)
{
- points1 += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].moves[moveSlot],
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId2]].species, 2);
+ points1 += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId1][monId1]].moves[moveSlot],
+ gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId2][monId2]].species, 2);
}
}
- species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].species;
+ species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId1][monId1]].species;
points1 += ( gBaseStats[species].baseHP
+ gBaseStats[species].baseAttack
+ gBaseStats[species].baseDefense
@@ -6370,11 +6370,11 @@ static void DecideRoundWinners(u8 roundId)
{
for (monId2 = 0; monId2 < 3; monId2++)
{
- points2 += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].moves[moveSlot],
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId2]].species, 2);
+ points2 += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId2][monId1]].moves[moveSlot],
+ gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId1][monId2]].species, 2);
}
}
- species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].species;
+ species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId2][monId1]].species;
points2 += ( gBaseStats[species].baseHP
+ gBaseStats[species].baseAttack
+ gBaseStats[species].baseDefense
diff --git a/src/battle_message.c b/src/battle_message.c
index 99ab8bbd6..147d0295f 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -2579,7 +2579,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
case B_TXT_TRAINER1_LOSE_TEXT: // trainerA lose text
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
{
- CopyFrontierTrainerText(FRONTIER_LOSE_TEXT, gTrainerBattleOpponent_A);
+ CopyFrontierTrainerText(FRONTIER_PLAYER_WON_TEXT, gTrainerBattleOpponent_A);
toCpy = gStringVar4;
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
@@ -2595,7 +2595,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
case B_TXT_TRAINER1_WIN_TEXT: // trainerA win text
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
{
- CopyFrontierTrainerText(FRONTIER_WIN_TEXT, gTrainerBattleOpponent_A);
+ CopyFrontierTrainerText(FRONTIER_PLAYER_LOST_TEXT, gTrainerBattleOpponent_A);
toCpy = gStringVar4;
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
@@ -2676,7 +2676,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
case B_TXT_TRAINER2_LOSE_TEXT:
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
{
- CopyFrontierTrainerText(FRONTIER_LOSE_TEXT, gTrainerBattleOpponent_B);
+ CopyFrontierTrainerText(FRONTIER_PLAYER_WON_TEXT, gTrainerBattleOpponent_B);
toCpy = gStringVar4;
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
@@ -2692,7 +2692,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
case B_TXT_TRAINER2_WIN_TEXT:
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
{
- CopyFrontierTrainerText(FRONTIER_WIN_TEXT, gTrainerBattleOpponent_B);
+ CopyFrontierTrainerText(FRONTIER_PLAYER_LOST_TEXT, gTrainerBattleOpponent_B);
toCpy = gStringVar4;
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
diff --git a/src/battle_tower.c b/src/battle_tower.c
index 4b63c2875..4518e6ad9 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -10,7 +10,7 @@
#include "international_string_util.h"
#include "battle.h"
#include "battle_frontier_1.h"
-#include "battle_frontier_2.h"
+#include "frontier_util.h"
#include "recorded_battle.h"
#include "easy_chat.h"
#include "gym_leader_rematch.h"
@@ -33,7 +33,6 @@ extern u16 gUnknown_03006298[];
extern void sub_81A3ACC(void);
extern void CreateFrontierBrainPokemon(void);
extern void sub_81A6CD0(void);
-extern u16 sub_81A39C4(void);
extern void SetFrontierBrainTrainerGfxId(void);
extern u8 GetFrontierBrainTrainerPicIndex(void);
extern u8 GetFrontierBrainTrainerClass(void);
@@ -220,7 +219,7 @@ static void sub_8161F94(void)
gSaveBlock2Ptr->frontier.field_CA9_b = 0;
sub_81A3ACC();
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_085DF9AC[battleMode][lvlMode]))
- gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] = 0;
+ gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = 0;
ValidateBattleTowerRecordChecksums();
saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
@@ -258,7 +257,7 @@ static void sub_81620F4(void)
case 0:
break;
case 1:
- gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] = gSpecialVar_0x8006;
+ gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006;
break;
case 2:
if (gSpecialVar_0x8006)
@@ -364,7 +363,8 @@ static void ChooseNextBattleTowerTrainer(void)
{
u16 id;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
- u32 r5 = sub_81A39C4() / 7;
+ u16 winStreak = GetCurrentFacilityWinStreak();
+ u32 challengeNum = winStreak / 7;
SetFacilityPtrsGetLevel();
if (battleMode == FRONTIER_MODE_MULTIS || battleMode == FRONTIER_MODE_LINK_MULTIS)
@@ -385,7 +385,7 @@ static void ChooseNextBattleTowerTrainer(void)
s32 i;
while (1)
{
- id = sub_8162548(r5, gSaveBlock2Ptr->frontier.curChallengeBattleNum);
+ id = sub_8162548(challengeNum, gSaveBlock2Ptr->frontier.curChallengeBattleNum);
// Ensure trainer wasn't previously fought in this challenge.
for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++)
@@ -1179,7 +1179,7 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId)
{
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; // Unused variable.
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
- u8 challengeNum = gSaveBlock2Ptr->frontier.winStreaks[battleMode][0] / 7;
+ u8 challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][0] / 7;
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 6)
fixedIV = sub_81A6CA8(challengeNum, 0);
else
@@ -1480,8 +1480,8 @@ static void SaveCurrentWinStreak(void)
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
u16 winStreak = GetCurrentBattleTowerWinStreak(lvlMode, battleMode);
- if (gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] < winStreak)
- gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] = winStreak;
+ if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] < winStreak)
+ gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = winStreak;
}
static void sub_8163EE4(void)
@@ -1516,8 +1516,8 @@ static void sub_8163EE4(void)
for (i = 0; i < 6; i++)
{
playerRecord->greeting[i] = gSaveBlock1Ptr->unk2BBC[i];
- playerRecord->unk1C[i] = gSaveBlock1Ptr->unk2BC8[i];
- playerRecord->unk28[i] = gSaveBlock1Ptr->unk2BD4[i];
+ playerRecord->speechWon[i] = gSaveBlock1Ptr->unk2BC8[i];
+ playerRecord->speechLost[i] = gSaveBlock1Ptr->unk2BD4[i];
}
for (i = 0; i < 4; i++)
@@ -1535,7 +1535,7 @@ static void SaveBattleTowerProgress(void)
{
u16 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
- s32 challengeNum = (signed)(gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] / 7);
+ s32 challengeNum = (signed)(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7);
if (gSpecialVar_0x8005 == 0 && (challengeNum > 1 || gSaveBlock2Ptr->frontier.curChallengeBattleNum != 0))
sub_8163EE4();
@@ -1625,7 +1625,7 @@ static void sub_81642A0(void)
eventObjTemplates = gSaveBlock1Ptr->eventObjectTemplates;
lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
- challengeNum = gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] / 7;
+ challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7;
species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES, NULL);
species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL);
level = SetFacilityPtrsGetLevel();
@@ -1795,7 +1795,8 @@ static void sub_8164828(void)
s32 i, j, arrId;
s32 monPoolId;
s32 level = SetFacilityPtrsGetLevel();
- s32 challengeNum = sub_81A39C4() / 7;
+ u16 winStreak = GetCurrentFacilityWinStreak();
+ s32 challengeNum = winStreak / 7;
s32 k = gSpecialVar_LastTalked - 2;
s32 trainerId = gSaveBlock2Ptr->frontier.field_CB4[k];
@@ -1911,7 +1912,7 @@ static void sub_8164B74(void)
case 0:
if (battleMode == FRONTIER_MODE_LINK_MULTIS)
{
- challengeNum = gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] / 7;
+ challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7;
if (sub_800A520())
{
SendBlock(bitmask_all_link_players_but_self(), &challengeNum, sizeof(challengeNum));
@@ -2069,7 +2070,7 @@ static void ClearBattleTowerRecord(struct EmeraldBattleTowerRecord *record)
u16 GetCurrentBattleTowerWinStreak(u8 lvlMode, u8 battleMode)
{
- u16 winStreak = gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode];
+ u16 winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode];
if (winStreak > 9999)
return 9999;
@@ -2425,9 +2426,9 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em
for (i = 0; i < 6; i++)
dst->greeting[i] = src->greeting[i];
for (i = 0; i < 6; i++)
- dst->unk1C[i] = gUnknown_085DFA46[i];
+ dst->speechWon[i] = gUnknown_085DFA46[i];
for (i = 0; i < 6; i++)
- dst->unk28[i] = gUnknown_085DFA52[i];
+ dst->speechLost[i] = gUnknown_085DFA52[i];
for (i = 0; i < 3; i++)
dst->party[i] = src->party[i];
diff --git a/src/frontier_util.c b/src/frontier_util.c
new file mode 100644
index 000000000..99419cc9a
--- /dev/null
+++ b/src/frontier_util.c
@@ -0,0 +1,1832 @@
+#include "global.h"
+#include "frontier_util.h"
+#include "event_data.h"
+#include "battle_setup.h"
+#include "overworld.h"
+#include "random.h"
+#include "battle_tower.h"
+#include "field_specials.h"
+#include "battle.h"
+#include "script_pokemon_util_80F87D8.h"
+#include "main.h"
+#include "window.h"
+#include "menu.h"
+#include "text.h"
+#include "battle_records.h"
+#include "international_string_util.h"
+#include "string_util.h"
+#include "new_game.h"
+#include "link.h"
+#include "tv.h"
+#include "apprentice.h"
+#include "pokedex.h"
+#include "recorded_battle.h"
+#include "data2.h"
+#include "record_mixing.h"
+#include "strings.h"
+#include "malloc.h"
+#include "save.h"
+#include "load_save.h"
+#include "battle_dome.h"
+#include "constants/battle_frontier.h"
+#include "constants/trainers.h"
+#include "constants/species.h"
+#include "constants/game_stat.h"
+#include "constants/moves.h"
+
+extern u8 gUnknown_0203CEF8[];
+
+extern void (* const gUnknown_08611C18[])(void);
+extern const u16 gUnknown_08611BFC[][2];
+extern const struct BattleFrontierTrainer gBattleFrontierTrainers[];
+extern const struct WindowTemplate gUnknown_08611C74;
+extern const struct WindowTemplate gUnknown_08611C7C;
+extern const struct WindowTemplate gUnknown_08611C84;
+extern const u8 gUnknown_086118B4[29][7][4];
+extern const u16 gUnknown_08611C9A[];
+extern const u8 *const gUnknown_08611D08[];
+extern const u8 *const gUnknown_08611CB0[][2];
+extern const u8 *const gUnknown_08611D00[];
+
+extern void sub_81B8558(void);
+
+// This file's functions.
+u8 sub_81A3B30(u8 facility);
+static void ShowTowerResultsWindow(u8);
+static void ShowDomeResultsWindow(u8);
+static void ShowPalaceResultsWindow(u8);
+static void ShowPikeResultsWindow(void);
+static void ShowFactoryResultsWindow(u8);
+static void ShowArenaResultsWindow(void);
+static void ShowPyramidResultsWindow(void);
+static void ShowLinkContestResultsWindow(void);
+u8 sub_81A3610(void);
+void sub_81A51A8(u8);
+void sub_81A5030(u8);
+
+// const rom data
+const u8 gUnknown_08611550[][4] =
+{
+ [FRONTIER_FACILITY_TOWER] = {0x23, 0x46, 0x23, 0x01},
+ [FRONTIER_FACILITY_DOME] = {0x04, 0x09, 0x05, 0x00},
+ [FRONTIER_FACILITY_PALACE] = {0x15, 0x2a, 0x15, 0x01},
+ [FRONTIER_FACILITY_ARENA] = {0x1c, 0x38, 0x1c, 0x01},
+ [FRONTIER_FACILITY_FACTORY] = {0x15, 0x2a, 0x15, 0x01},
+ [FRONTIER_FACILITY_PIKE] = {0x1c, 0x8c, 0x38, 0x01},
+ [FRONTIER_FACILITY_PYRAMID] = {0x15, 0x46, 0x23, 0x00},
+};
+
+// code
+void sub_81A1780(void)
+{
+ gUnknown_08611C18[gSpecialVar_0x8004]();
+}
+
+void sub_81A17A0(void)
+{
+ VarSet(VAR_TEMP_0, 0xFF);
+ switch (gSaveBlock2Ptr->frontier.field_CA8)
+ {
+ case 0:
+ break;
+ case 1:
+ sub_813A878(0);
+ VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8);
+ break;
+ case 4:
+ sub_813A878(0);
+ VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8);
+ break;
+ case 3:
+ sub_813A878(1);
+ VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8);
+ break;
+ case 2:
+ VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8);
+ break;
+ }
+}
+
+void sub_81A1830(void)
+{
+ u8 facility = VarGet(VAR_FRONTIER_FACILITY);
+ u8 currSymbol = sub_81A3B30(facility);
+ if (currSymbol == 2)
+ currSymbol = 1;
+
+ switch (gSpecialVar_0x8005)
+ {
+ case 0:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA8;
+ break;
+ case 1:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.lvlMode;
+ break;
+ case 2:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
+ break;
+ case 3:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_a;
+ break;
+ case 5:
+ gSpecialVar_Result = gBattleOutcome;
+ gBattleOutcome = 0;
+ break;
+ case 6:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_b;
+ break;
+ case 7:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D00 & gUnknown_08611BFC[facility][currSymbol];
+ break;
+ }
+}
+
+void sub_81A1968(void)
+{
+ s32 i;
+ u8 facility = VarGet(VAR_FRONTIER_FACILITY);
+ u8 currSymbol = sub_81A3B30(facility);
+ if (currSymbol == 2)
+ currSymbol = 1;
+
+ switch (gSpecialVar_0x8005)
+ {
+ case 0:
+ gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8006;
+ break;
+ case 1:
+ gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_0x8006;
+ break;
+ case 2:
+ gSaveBlock2Ptr->frontier.curChallengeBattleNum = gSpecialVar_0x8006;
+ break;
+ case 3:
+ gSaveBlock2Ptr->frontier.field_CA9_a = gSpecialVar_0x8006;
+ break;
+ case 4:
+ for (i = 0; i < 4; i++)
+ gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gUnknown_0203CEF8[i];
+ break;
+ case 6:
+ gSaveBlock2Ptr->frontier.field_CA9_b = gSpecialVar_0x8006;
+ break;
+ case 7:
+ gSaveBlock2Ptr->frontier.field_D00 |= gUnknown_08611BFC[facility][currSymbol];
+ break;
+ }
+}
+
+void sub_81A1AD4(void)
+{
+ s32 i;
+
+ sub_81B8558();
+ for (i = 0; i < gSpecialVar_0x8005; i++)
+ gUnknown_0203CEF8[i] = gSaveBlock2Ptr->frontier.selectedPartyMons[i];
+ ReducePlayerPartyToThree();
+}
+
+void sub_81A1B1C(void)
+{
+ DoSoftReset();
+}
+
+void sub_81A1B28(void)
+{
+ gFacilityTrainers = gBattleFrontierTrainers;
+}
+
+void sub_81A1B38(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ u16 monId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1;
+ if (monId < PARTY_SIZE)
+ gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1] = gPlayerParty[i];
+ }
+}
+
+void sub_81A1B98(void)
+{
+ if (gSpecialVar_0x8006 > 3)
+ gSpecialVar_0x8006 = 0;
+ switch (gSpecialVar_0x8005)
+ {
+ case FRONTIER_FACILITY_TOWER:
+ ShowTowerResultsWindow(gSpecialVar_0x8006);
+ break;
+ case FRONTIER_FACILITY_DOME:
+ ShowDomeResultsWindow(gSpecialVar_0x8006);
+ break;
+ case FRONTIER_FACILITY_PALACE:
+ ShowPalaceResultsWindow(gSpecialVar_0x8006);
+ break;
+ case FRONTIER_FACILITY_PIKE:
+ ShowPikeResultsWindow();
+ break;
+ case FRONTIER_FACILITY_FACTORY:
+ ShowFactoryResultsWindow(gSpecialVar_0x8006);
+ break;
+ case FRONTIER_FACILITY_ARENA:
+ ShowArenaResultsWindow();
+ break;
+ case FRONTIER_FACILITY_PYRAMID:
+ ShowPyramidResultsWindow();
+ break;
+ case 7:
+ ShowLinkContestResultsWindow();
+ break;
+ }
+}
+
+static bool8 sub_81A1C24(u32 flags)
+{
+ if (gSaveBlock2Ptr->frontier.field_CDC & flags)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void sub_81A1C4C(const u8 *str, s32 y)
+{
+ s32 x = GetStringCenterAlignXOffset(1, str, 0xE0);
+ y = (y * 8) + 1;
+ AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, y, TEXT_SPEED_FF, NULL);
+}
+
+static void PrintHyphens(s32 y)
+{
+ s32 i;
+ u8 text[37];
+
+ for (i = 0; i < 36; i++)
+ text[i] = CHAR_HYPHEN;
+ text[i] = EOS;
+
+ y = (y * 8) + 1;
+ AddTextPrinterParameterized(gRecordsWindowId, 1, text, 4, y, TEXT_SPEED_FF, NULL);
+}
+
+// Battle Tower records.
+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;
+ ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ StringExpandPlaceholders(gStringVar4, gText_WinStreak);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
+}
+
+static void TowerPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y)
+{
+ u16 num = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[battleMode][lvlMode];
+ TowerPrintStreak(gText_Record, num, x1, x2, y);
+}
+
+static u16 TowerGetWinStreak(u8 battleMode, u8 lvlMode)
+{
+ u16 winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode];
+ if (winStreak > 9999)
+ return 9999;
+ else
+ return winStreak;
+}
+
+static void TowerPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y)
+{
+ bool8 isCurrent;
+ u16 winStreak = TowerGetWinStreak(battleMode, lvlMode);
+ switch (battleMode)
+ {
+ default:
+ case FRONTIER_MODE_SINGLES:
+ if (lvlMode != FRONTIER_LVL_50)
+ isCurrent = sub_81A1C24(2);
+ else
+ isCurrent = sub_81A1C24(1);
+ break;
+ case FRONTIER_MODE_DOUBLES:
+ if (lvlMode != FRONTIER_LVL_50)
+ isCurrent = sub_81A1C24(0x8000);
+ else
+ isCurrent = sub_81A1C24(0x4000);
+ break;
+ case FRONTIER_MODE_MULTIS:
+ if (lvlMode != FRONTIER_LVL_50)
+ isCurrent = sub_81A1C24(0x20000);
+ else
+ isCurrent = sub_81A1C24(0x10000);
+ break;
+ case FRONTIER_MODE_LINK_MULTIS:
+ if (lvlMode != FRONTIER_LVL_50)
+ isCurrent = sub_81A1C24(0x80000);
+ else
+ isCurrent = sub_81A1C24(0x40000);
+ break;
+ }
+
+ if (isCurrent == TRUE)
+ TowerPrintStreak(gText_Current, winStreak, x1, x2, y);
+ else
+ TowerPrintStreak(gText_Prev, winStreak, x1, x2, y);
+}
+
+static void ShowTowerResultsWindow(u8 battleMode)
+{
+ gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE);
+ FillWindowPixelBuffer(gRecordsWindowId, 0x11);
+ if (battleMode == FRONTIER_MODE_SINGLES)
+ StringExpandPlaceholders(gStringVar4, gText_SingleBattleRoomResults);
+ else if (battleMode == FRONTIER_MODE_DOUBLES)
+ StringExpandPlaceholders(gStringVar4, gText_DoubleBattleRoomResults);
+ else if (battleMode == FRONTIER_MODE_MULTIS)
+ StringExpandPlaceholders(gStringVar4, gText_MultiBattleRoomResults);
+ else
+ StringExpandPlaceholders(gStringVar4, gText_LinkMultiBattleRoomResults);
+
+ sub_81A1C4C(gStringVar4, 2);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL);
+ PrintHyphens(10);
+ TowerPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 72, 132, 49);
+ TowerPrintRecordStreak(battleMode, FRONTIER_LVL_50, 72, 132, 65);
+ TowerPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 72, 132, 97);
+ TowerPrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 72, 132, 113);
+ PutWindowTilemap(gRecordsWindowId);
+ CopyWindowToVram(gRecordsWindowId, 3);
+}
+
+// Battle Dome records.
+static u16 DomeGetWinStreak(u8 battleMode, u8 lvlMode)
+{
+ u16 winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
+ if (winStreak > 9999)
+ return 9999;
+ else
+ return winStreak;
+}
+
+static void PrintTwoStrings(const u8 *str1, const u8 *str2, u16 num, u8 x1, u8 x2, u8 y)
+{
+ AddTextPrinterParameterized(gRecordsWindowId, 1, str1, x1, y, TEXT_SPEED_FF, NULL);
+ ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ StringExpandPlaceholders(gStringVar4, str2);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
+}
+
+static void DomePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y)
+{
+ bool8 isCurrent;
+ u16 winStreak = DomeGetWinStreak(battleMode, lvlMode);
+ switch (battleMode)
+ {
+ default:
+ case FRONTIER_MODE_SINGLES:
+ if (lvlMode != FRONTIER_LVL_50)
+ isCurrent = sub_81A1C24(8);
+ else
+ isCurrent = sub_81A1C24(4);
+ break;
+ case FRONTIER_MODE_DOUBLES:
+ if (lvlMode != FRONTIER_LVL_50)
+ isCurrent = sub_81A1C24(0x200000);
+ else
+ isCurrent = sub_81A1C24(0x100000);
+ break;
+ }
+
+ if (isCurrent == TRUE)
+ PrintTwoStrings(gText_Current, gText_ClearStreak, winStreak, x1, x2, y);
+ else
+ PrintTwoStrings(gText_Prev, gText_ClearStreak, winStreak, x1, x2, y);
+}
+
+static void ShowDomeResultsWindow(u8 battleMode)
+{
+ gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE);
+ FillWindowPixelBuffer(gRecordsWindowId, 0x11);
+ if (battleMode == FRONTIER_MODE_SINGLES)
+ StringExpandPlaceholders(gStringVar4, gText_SingleBattleTourneyResults);
+ else
+ StringExpandPlaceholders(gStringVar4, gText_DoubleBattleTourneyResults);
+
+ sub_81A1C4C(gStringVar4, 0);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL);
+ PrintHyphens(10);
+ DomePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 64, 121, 33);
+ PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_50], 64, 121, 49);
+ PrintTwoStrings(gText_Total, gText_Championships, gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][FRONTIER_LVL_50], 64, 112, 65);
+ DomePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 64, 121, 97);
+ PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_OPEN], 64, 121, 113);
+ PrintTwoStrings(gText_Total, gText_Championships, gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][FRONTIER_LVL_OPEN], 64, 112, 129);
+ PutWindowTilemap(gRecordsWindowId);
+ CopyWindowToVram(gRecordsWindowId, 3);
+}
+
+// Battle Palace records.
+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;
+ ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ StringExpandPlaceholders(gStringVar4, gText_WinStreak);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
+}
+
+static void PalacePrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y)
+{
+ u16 num = gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode];
+ PalacePrintStreak(gText_Record, num, x1, x2, y);
+}
+
+static u16 PalaceGetWinStreak(u8 battleMode, u8 lvlMode)
+{
+ u16 winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode];
+ if (winStreak > 9999)
+ return 9999;
+ else
+ return winStreak;
+}
+
+static void PalacePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y)
+{
+ bool8 isCurrent;
+ u16 winStreak = PalaceGetWinStreak(battleMode, lvlMode);
+ switch (battleMode)
+ {
+ default:
+ case FRONTIER_MODE_SINGLES:
+ if (lvlMode != FRONTIER_LVL_50)
+ isCurrent = sub_81A1C24(0x20);
+ else
+ isCurrent = sub_81A1C24(0x10);
+ break;
+ case FRONTIER_MODE_DOUBLES:
+ if (lvlMode != FRONTIER_LVL_50)
+ isCurrent = sub_81A1C24(0x800000);
+ else
+ isCurrent = sub_81A1C24(0x400000);
+ }
+
+ if (isCurrent == TRUE)
+ PalacePrintStreak(gText_Current, winStreak, x1, x2, y);
+ else
+ PalacePrintStreak(gText_Prev, winStreak, x1, x2, y);
+}
+
+static void ShowPalaceResultsWindow(u8 battleMode)
+{
+ gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE);
+ FillWindowPixelBuffer(gRecordsWindowId, 0x11);
+ if (battleMode == FRONTIER_MODE_SINGLES)
+ StringExpandPlaceholders(gStringVar4, gText_SingleBattleHallResults);
+ else
+ StringExpandPlaceholders(gStringVar4, gText_DoubleBattleHallResults);
+
+ sub_81A1C4C(gStringVar4, 2);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL);
+ PrintHyphens(10);
+ PalacePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 72, 131, 49);
+ PalacePrintRecordStreak(battleMode, FRONTIER_LVL_50, 72, 131, 65);
+ PalacePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 72, 131, 97);
+ PalacePrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 72, 131, 113);
+ PutWindowTilemap(gRecordsWindowId);
+ CopyWindowToVram(gRecordsWindowId, 3);
+}
+
+// Battle Pike records.
+static u16 PikeGetWinStreak(u8 lvlMode)
+{
+ u16 winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode];
+ if (winStreak > 9999)
+ return 9999;
+ else
+ return winStreak;
+}
+
+static void PikePrintCleared(const u8 *str1, const u8 *str2, u16 num, u8 x1, u8 x2, u8 y)
+{
+ AddTextPrinterParameterized(gRecordsWindowId, 1, str1, x1, y, TEXT_SPEED_FF, NULL);
+ ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ StringExpandPlaceholders(gStringVar4, str2);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
+}
+
+static void PikePrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
+{
+ bool8 isCurrent;
+ u16 winStreak = PikeGetWinStreak(lvlMode);
+
+ if (lvlMode != FRONTIER_LVL_50)
+ isCurrent = sub_81A1C24(0x800);
+ else
+ isCurrent = sub_81A1C24(0x400);
+
+ if (isCurrent == TRUE)
+ PrintTwoStrings(gText_Current, gText_RoomsCleared, winStreak, x1, x2, y);
+ else
+ PrintTwoStrings(gText_Prev, gText_RoomsCleared, winStreak, x1, x2, y);
+}
+
+static void ShowPikeResultsWindow(void)
+{
+ gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE);
+ FillWindowPixelBuffer(gRecordsWindowId, 0x11);
+ StringExpandPlaceholders(gStringVar4, gText_BattleChoiceResults);
+ sub_81A1C4C(gStringVar4, 0);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL);
+ PrintHyphens(10);
+ PikePrintPrevOrCurrentStreak(FRONTIER_LVL_50, 64, 114, 33);
+ PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_50], 64, 114, 49);
+ PikePrintCleared(gText_Total, gText_TimesCleared, gSaveBlock2Ptr->frontier.pikeTotalStreaks[FRONTIER_LVL_50], 64, 114, 65);
+ PikePrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 64, 114, 97);
+ PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_OPEN], 64, 114, 113);
+ PikePrintCleared(gText_Total, gText_TimesCleared, gSaveBlock2Ptr->frontier.pikeTotalStreaks[FRONTIER_LVL_OPEN], 64, 114, 129);
+ PutWindowTilemap(gRecordsWindowId);
+ CopyWindowToVram(gRecordsWindowId, 3);
+}
+
+// Battle Arena records.
+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;
+ ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ StringExpandPlaceholders(gStringVar4, gText_KOsInARow);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
+}
+
+static void ArenaPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
+{
+ u16 num = gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode];
+ ArenaPrintStreak(gText_Record, num, x1, x2, y);
+}
+
+static u16 ArenaGetWinStreak(u8 lvlMode)
+{
+ u16 winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode];
+ if (winStreak > 9999)
+ return 9999;
+ else
+ return winStreak;
+}
+
+static void ArenaPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
+{
+ bool8 isCurrent;
+ u16 winStreak = ArenaGetWinStreak(lvlMode);
+
+ if (lvlMode != FRONTIER_LVL_50)
+ isCurrent = sub_81A1C24(0x80);
+ else
+ isCurrent = sub_81A1C24(0x40);
+
+ if (isCurrent == TRUE)
+ ArenaPrintStreak(gText_Current, winStreak, x1, x2, y);
+ else
+ ArenaPrintStreak(gText_Prev, winStreak, x1, x2, y);
+}
+
+static void ShowArenaResultsWindow(void)
+{
+ gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE);
+ FillWindowPixelBuffer(gRecordsWindowId, 0x11);
+ PrintHyphens(10);
+ StringExpandPlaceholders(gStringVar4, gText_SetKOTourneyResults);
+ sub_81A1C4C(gStringVar4, 2);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL);
+ ArenaPrintPrevOrCurrentStreak(FRONTIER_LVL_50, 72, 126, 49);
+ ArenaPrintRecordStreak(FRONTIER_LVL_50, 72, 126, 65);
+ ArenaPrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 72, 126, 97);
+ ArenaPrintRecordStreak(FRONTIER_LVL_OPEN, 72, 126, 113);
+ PutWindowTilemap(gRecordsWindowId);
+ CopyWindowToVram(gRecordsWindowId, 3);
+}
+
+// Battle Factory records.
+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;
+ ConvertIntToDecimalStringN(gStringVar1, num1, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ StringExpandPlaceholders(gStringVar4, gText_WinStreak);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
+
+ ConvertIntToDecimalStringN(gStringVar1, num2, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ StringExpandPlaceholders(gStringVar4, gText_TimesVar1);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x3, y, TEXT_SPEED_FF, NULL);
+}
+
+static void FactoryPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y)
+{
+ u16 num1 = gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[battleMode][lvlMode];
+ u16 num2 = gSaveBlock2Ptr->frontier.factoryRecordRentsCount[battleMode][lvlMode];
+ FactoryPrintStreak(gText_Record, num1, num2, x1, x2, x3, y);
+}
+
+static u16 FactoryGetWinStreak(u8 battleMode, u8 lvlMode)
+{
+ u16 winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode];
+ if (winStreak > 9999)
+ return 9999;
+ else
+ return winStreak;
+}
+
+static u16 FactoryGetRentsCount(u8 battleMode, u8 lvlMode)
+{
+ u16 rents = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode];
+ if (rents > 9999)
+ return 9999;
+ else
+ return rents;
+}
+
+static void FactoryPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y)
+{
+ bool8 isCurrent;
+ u16 winStreak = FactoryGetWinStreak(battleMode, lvlMode);
+ u16 rents = FactoryGetRentsCount(battleMode, lvlMode);
+ switch (battleMode)
+ {
+ default:
+ case FRONTIER_MODE_SINGLES:
+ if (lvlMode != FRONTIER_LVL_50)
+ isCurrent = sub_81A1C24(0x200);
+ else
+ isCurrent = sub_81A1C24(0x100);
+ break;
+ case FRONTIER_MODE_DOUBLES:
+ if (lvlMode != FRONTIER_LVL_50)
+ isCurrent = sub_81A1C24(0x2000000);
+ else
+ isCurrent = sub_81A1C24(0x1000000);
+ break;
+ }
+
+ if (isCurrent == TRUE)
+ FactoryPrintStreak(gText_Current, winStreak, rents, x1, x2, x3, y);
+ else
+ FactoryPrintStreak(gText_Prev, winStreak, rents, x1, x2, x3, y);
+}
+
+static void ShowFactoryResultsWindow(u8 battleMode)
+{
+ gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE);
+ FillWindowPixelBuffer(gRecordsWindowId, 0x11);
+ if (battleMode == FRONTIER_MODE_SINGLES)
+ StringExpandPlaceholders(gStringVar4, gText_BattleSwapSingleResults);
+ else
+ StringExpandPlaceholders(gStringVar4, gText_BattleSwapDoubleResults);
+
+ sub_81A1C4C(gStringVar4, 0);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_RentalSwap, 152, 33, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL);
+ PrintHyphens(10);
+ FactoryPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 8, 64, 158, 49);
+ FactoryPrintRecordStreak(battleMode, FRONTIER_LVL_50, 8, 64, 158, 65);
+ FactoryPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 113);
+ FactoryPrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 129);
+ PutWindowTilemap(gRecordsWindowId);
+ CopyWindowToVram(gRecordsWindowId, 3);
+}
+
+// Battle Pyramid records.
+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;
+ ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ StringExpandPlaceholders(gStringVar4, gText_FloorsCleared);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
+}
+
+static void PyramidPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
+{
+ u16 num = gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode];
+ PyramidPrintStreak(gText_Record, num, x1, x2, y);
+}
+
+static u16 PyramidGetWinStreak(u8 lvlMode)
+{
+ u16 winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode];
+ if (winStreak > 9999)
+ return 9999;
+ else
+ return winStreak;
+}
+
+static void PyramidPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
+{
+ bool8 isCurrent;
+ u16 winStreak = PyramidGetWinStreak(lvlMode);
+
+ if (lvlMode != FRONTIER_LVL_50)
+ isCurrent = sub_81A1C24(0x2000);
+ else
+ isCurrent = sub_81A1C24(0x1000);
+
+ if (isCurrent == TRUE)
+ PyramidPrintStreak(gText_Current, winStreak, x1, x2, y);
+ else
+ PyramidPrintStreak(gText_Prev, winStreak, x1, x2, y);
+}
+
+static void ShowPyramidResultsWindow(void)
+{
+ gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE);
+ FillWindowPixelBuffer(gRecordsWindowId, 0x11);
+ StringExpandPlaceholders(gStringVar4, gText_BattleQuestResults);
+ sub_81A1C4C(gStringVar4, 2);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 49, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL);
+ PrintHyphens(10);
+ PyramidPrintPrevOrCurrentStreak(FRONTIER_LVL_50, 64, 111, 49);
+ PyramidPrintRecordStreak(FRONTIER_LVL_50, 64, 111, 65);
+ PyramidPrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 64, 111, 97);
+ PyramidPrintRecordStreak(FRONTIER_LVL_OPEN, 64, 111, 113);
+ PutWindowTilemap(gRecordsWindowId);
+ CopyWindowToVram(gRecordsWindowId, 3);
+}
+
+// Link contest records. Why is it in this file?
+static void ShowLinkContestResultsWindow(void)
+{
+ const u8 *str;
+ s32 i, j;
+ s32 x;
+
+ gRecordsWindowId = AddWindow(&gUnknown_08611C7C);
+ NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE);
+ FillWindowPixelBuffer(gRecordsWindowId, 0x11);
+
+ StringExpandPlaceholders(gStringVar4, gText_LinkContestResults);
+ x = GetStringCenterAlignXOffset(1, gStringVar4, 0xD0);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x, 1, TEXT_SPEED_FF, NULL);
+
+ str = gText_1st;
+ x = GetStringRightAlignXOffset(1, str, 0x26) + 50;
+ AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL);
+
+ str = gText_2nd;
+ x = GetStringRightAlignXOffset(1, str, 0x26) + 88;
+ AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL);
+
+ str = gText_3rd;
+ x = GetStringRightAlignXOffset(1, str, 0x26) + 126;
+ AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL);
+
+ str = gText_4th;
+ x = GetStringRightAlignXOffset(1, str, 0x26) + 164;
+ AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL);
+
+ x = 6;
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Cool, x, 41, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Beauty, x, 57, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Cute, x, 73, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Smart, x, 89, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Tough, x, 105, TEXT_SPEED_FF, NULL);
+
+ for (i = 0; i < 5; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ ConvertIntToDecimalStringN(gStringVar4, gSaveBlock2Ptr->contestLinkResults[i][j], STR_CONV_MODE_RIGHT_ALIGN, 4);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, (j * 38) + 64, (i * 16) + 41, TEXT_SPEED_FF, NULL);
+ }
+ }
+
+ PutWindowTilemap(gRecordsWindowId);
+ CopyWindowToVram(gRecordsWindowId, 3);
+}
+
+void sub_81A31FC(void)
+{
+ u8 text[32];
+ s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
+ s32 facility = VarGet(VAR_FRONTIER_FACILITY);
+ s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
+
+ switch (facility)
+ {
+ case FRONTIER_FACILITY_TOWER:
+ if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.towerRecordWinStreaks[battleMode][lvlMode])
+ {
+ gSaveBlock2Ptr->frontier.towerRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode];
+ if (battleMode == FRONTIER_MODE_LINK_MULTIS)
+ {
+ StringCopy(text, gLinkPlayers[gBattleScripting.multiplayerId ^ 1].name);
+ StripExtCtrlCodes(text);
+ StringCopy(gSaveBlock2Ptr->frontier.field_EE1[lvlMode], text);
+ WriteUnalignedWord(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.field_EF1[lvlMode]);
+ }
+ if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > 1
+ && sub_80EE818())
+ {
+ switch (battleMode)
+ {
+ case FRONTIER_MODE_SINGLES:
+ sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 1);
+ break;
+ case FRONTIER_MODE_DOUBLES:
+ sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 2);
+ break;
+ case FRONTIER_MODE_MULTIS:
+ sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 3);
+ break;
+ case FRONTIER_MODE_LINK_MULTIS:
+ sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 4);
+ break;
+ }
+ }
+ }
+ break;
+ case FRONTIER_FACILITY_DOME:
+ if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode])
+ {
+ gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
+ if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] > 1
+ && sub_80EE818())
+ {
+ if (battleMode == FRONTIER_MODE_SINGLES)
+ sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 5);
+ else
+ sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 6);
+ }
+ }
+ break;
+ case FRONTIER_FACILITY_PALACE:
+ if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode])
+ {
+ gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode];
+ if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > 1
+ && sub_80EE818())
+ {
+ if (battleMode == FRONTIER_MODE_SINGLES)
+ sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 11);
+ else
+ sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 12);
+ }
+ }
+ break;
+ case FRONTIER_FACILITY_ARENA:
+ if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode])
+ {
+ gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode];
+ if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > 1
+ && sub_80EE818())
+ {
+ sub_80EE8C8(gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode], 10);
+ }
+ }
+ break;
+ case FRONTIER_FACILITY_FACTORY:
+ if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[battleMode][lvlMode])
+ {
+ 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())
+ {
+ if (battleMode == FRONTIER_MODE_SINGLES)
+ sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 7);
+ else
+ sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 8);
+ }
+ }
+ break;
+ case FRONTIER_FACILITY_PIKE:
+ if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] > gSaveBlock2Ptr->frontier.pikeRecordStreaks[lvlMode])
+ {
+ gSaveBlock2Ptr->frontier.pikeRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode];
+ if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] > 1
+ && sub_80EE818())
+ {
+ sub_80EE8C8(gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode], 9);
+ }
+ }
+ break;
+ case FRONTIER_FACILITY_PYRAMID:
+ if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] > gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode])
+ {
+ gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode];
+ if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] > 1
+ && sub_80EE818())
+ {
+ sub_80EE8C8(gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode], 13);
+ }
+ }
+ break;
+ }
+}
+
+void sub_81A35EC(void)
+{
+ VarGet(VAR_FRONTIER_FACILITY); // Unused return value.
+ gSpecialVar_Result = sub_81A3610();
+}
+
+u8 sub_81A3610(void)
+{
+ s32 ret = 0;
+ s32 facility = VarGet(VAR_FRONTIER_FACILITY);
+ s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
+ u16 val = GetCurrentFacilityWinStreak();
+ s32 r5 = val + gUnknown_08611550[facility][3];
+ s32 symbolsCount;
+
+ if (battleMode != FRONTIER_MODE_SINGLES)
+ return 0;
+
+ symbolsCount = sub_81A3B30(facility);
+ switch (symbolsCount)
+ {
+ case 0:
+ case 1:
+ if (r5 == gUnknown_08611550[facility][symbolsCount])
+ ret = symbolsCount + 1;
+ break;
+ case 2:
+ default:
+ if (r5 == gUnknown_08611550[facility][0])
+ ret = 3;
+ else if (r5 == gUnknown_08611550[facility][1])
+ ret = 4;
+ else if (r5 > gUnknown_08611550[facility][1] && (r5 - gUnknown_08611550[facility][1]) % gUnknown_08611550[facility][2] == 0)
+ ret = 4;
+ break;
+ }
+
+ return ret;
+}
+
+void CopyFrontierTrainerText(u8 whichText, u16 trainerId)
+{
+ switch (whichText)
+ {
+ case FRONTIER_BEFORE_TEXT:
+ if (trainerId == TRAINER_EREADER)
+ FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.greeting);
+ else if (trainerId == TRAINER_FRONTIER_BRAIN)
+ sub_81A51A8(0);
+ else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ FrontierSpeechToString(gFacilityTrainers[trainerId].speechBefore);
+ else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE)
+ FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].greeting);
+ else
+ CopyFriendsApprenticeChallengeText(trainerId - TRAINER_RECORD_MIXING_APPRENTICE);
+ break;
+ case FRONTIER_PLAYER_LOST_TEXT:
+ if (trainerId == TRAINER_EREADER)
+ {
+ FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.farewellPlayerLost);
+ }
+ else if (trainerId == TRAINER_FRONTIER_BRAIN)
+ {
+ sub_81A51A8(0);
+ }
+ else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ {
+ FrontierSpeechToString(gFacilityTrainers[trainerId].speechWin);
+ }
+ else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
+ FrontierSpeechToString(sub_81864E0());
+ else
+ FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].speechWon);
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
+ FrontierSpeechToString(sub_81864E0());
+ else
+ FrontierSpeechToString(gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].easyChatWords);
+ }
+ break;
+ case FRONTIER_PLAYER_WON_TEXT:
+ if (trainerId == TRAINER_EREADER)
+ {
+ FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.farewellPlayerWon);
+ }
+ else if (trainerId == TRAINER_FRONTIER_BRAIN)
+ {
+ sub_81A51A8(1);
+ }
+ else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ {
+ FrontierSpeechToString(gFacilityTrainers[trainerId].speechLose);
+ }
+ else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
+ FrontierSpeechToString(sub_81864E0());
+ else
+ FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].speechLost);
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
+ {
+ trainerId = sub_81864A8();
+ FrontierSpeechToString(gApprentices[trainerId].easyChatWords);
+ }
+ else
+ {
+ trainerId = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id;
+ FrontierSpeechToString(gApprentices[trainerId].easyChatWords);
+ }
+ }
+ break;
+ }
+}
+
+void sub_81A3908(void)
+{
+ s32 battleMode, lvlMode;
+
+ gSaveBlock2Ptr->frontier.field_CDC = 0;
+ for (battleMode = 0; battleMode < 4; battleMode++)
+ {
+ for (lvlMode = 0; lvlMode < 2; lvlMode++)
+ {
+ gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = 0;
+ if (battleMode < FRONTIER_MODE_MULTIS)
+ {
+ gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = 0;
+ gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0;
+ gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] = 0;
+ }
+ if (battleMode == FRONTIER_MODE_SINGLES)
+ {
+ gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = 0;
+ gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] = 0;
+ gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] = 0;
+ }
+ }
+ }
+ if (gSaveBlock2Ptr->frontier.field_CA8 != 0)
+ gSaveBlock2Ptr->frontier.field_CA8 = 1;
+}
+
+u32 GetCurrentFacilityWinStreak(void)
+{
+ s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
+ s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
+ s32 facility = VarGet(VAR_FRONTIER_FACILITY);
+
+ switch (facility)
+ {
+ case FRONTIER_FACILITY_TOWER:
+ return gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode];
+ case FRONTIER_FACILITY_DOME:
+ return gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
+ case FRONTIER_FACILITY_PALACE:
+ return gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode];
+ case FRONTIER_FACILITY_ARENA:
+ return gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode];
+ case FRONTIER_FACILITY_FACTORY:
+ return gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode];
+ case FRONTIER_FACILITY_PIKE:
+ return gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode];
+ case FRONTIER_FACILITY_PYRAMID:
+ return gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode];
+ default:
+ return 0;
+ }
+}
+
+void sub_81A3ACC(void)
+{
+ s32 i;
+
+ for (i = 0; i < 20; i++)
+ gSaveBlock2Ptr->frontier.field_CB4[i] |= 0xFFFF;
+}
+
+void sub_81A3B00(void)
+{
+ if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
+ gSpecialVar_Result = TRUE;
+ else
+ gSpecialVar_Result = FALSE;
+}
+
+u8 sub_81A3B30(u8 facility)
+{
+ return FlagGet(FLAG_SYS_TOWER_SILVER + facility * 2)
+ + FlagGet(FLAG_SYS_TOWER_GOLD + facility * 2);
+}
+
+void sub_81A3B64(void)
+{
+ s32 challengeNum = 0;
+ s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
+ s32 facility = VarGet(VAR_FRONTIER_FACILITY);
+ s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
+ s32 points;
+
+ switch (facility)
+ {
+ case FRONTIER_FACILITY_TOWER:
+ challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7;
+ break;
+ case FRONTIER_FACILITY_DOME:
+ challengeNum = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
+ break;
+ case FRONTIER_FACILITY_PALACE:
+ challengeNum = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] / 7;
+ break;
+ case FRONTIER_FACILITY_ARENA:
+ challengeNum = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] / 7;
+ break;
+ case FRONTIER_FACILITY_FACTORY:
+ challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7;
+ break;
+ case FRONTIER_FACILITY_PIKE:
+ challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14;
+ break;
+ case FRONTIER_FACILITY_PYRAMID:
+ challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7;
+ break;
+ }
+
+ if (challengeNum != 0)
+ challengeNum--;
+ if (challengeNum > ARRAY_COUNT(gUnknown_086118B4))
+ challengeNum = ARRAY_COUNT(gUnknown_086118B4);
+
+ points = gUnknown_086118B4[challengeNum][facility][battleMode];
+ if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
+ points += 10;
+ gSaveBlock2Ptr->frontier.battlePoints += points;
+ ConvertIntToDecimalStringN(gStringVar1, points, STR_CONV_MODE_LEFT_ALIGN, 2);
+ if (gSaveBlock2Ptr->frontier.battlePoints > 9999)
+ gSaveBlock2Ptr->frontier.battlePoints = 9999;
+
+ points = gSaveBlock2Ptr->frontier.field_EBA;
+ points += gUnknown_086118B4[challengeNum][facility][battleMode];
+ sub_80EED60(gUnknown_086118B4[challengeNum][facility][battleMode]);
+ if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
+ {
+ points += 10;
+ sub_80EED60(10);
+ }
+ if (points > 0xFFFF)
+ points = 0xFFFF;
+ gSaveBlock2Ptr->frontier.field_EBA = points;
+}
+
+void sub_81A3D30(void)
+{
+ s32 facility = VarGet(VAR_FRONTIER_FACILITY);
+ gSpecialVar_Result = sub_81A3B30(facility);
+}
+
+void sub_81A3D58(void)
+{
+ s32 facility = VarGet(VAR_FRONTIER_FACILITY);
+ if (sub_81A3B30(facility) == 0)
+ FlagSet(FLAG_SYS_TOWER_SILVER + facility * 2);
+ else
+ FlagSet(FLAG_SYS_TOWER_GOLD + facility * 2);
+}
+
+void sub_81A3DA0(void)
+{
+ if (gBattleTypeFlags & gSpecialVar_0x8005)
+ gSpecialVar_Result = TRUE;
+ else
+ gSpecialVar_Result = FALSE;
+}
+
+static u8 sub_81A3DD0(u16 species, u8 arg1, s32 arg2)
+{
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
+ {
+ arg1++;
+ switch (arg1)
+ {
+ case 1:
+ case 3:
+ case 5:
+ case 7:
+ case 9:
+ case 11:
+ if (arg2 == arg1)
+ StringAppend(gStringVar1, gText_SpaceAndSpace);
+ else if (arg2 > arg1)
+ StringAppend(gStringVar1, gText_CommaSpace);
+ break;
+ case 2:
+ if (arg1 == arg2)
+ StringAppend(gStringVar1, gText_SpaceAndSpace);
+ else
+ StringAppend(gStringVar1, gText_CommaSpace);
+ StringAppend(gStringVar1, gText_NewLine);
+ break;
+ default:
+ if (arg1 == arg2)
+ StringAppend(gStringVar1, gText_SpaceAndSpace);
+ else
+ StringAppend(gStringVar1, gText_CommaSpace);
+ StringAppend(gStringVar1, gText_ScrollTextUp);
+ break;
+ }
+ StringAppend(gStringVar1, gSpeciesNames[species]);
+ }
+
+ return arg1;
+}
+
+static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monLevel, u16 *speciesArray, u16 *itemsArray, u8 *count)
+{
+ s32 i = 0;
+
+ if (species == SPECIES_EGG || species == SPECIES_NONE)
+ return;
+
+ for (i = 0; gUnknown_08611C9A[i] != 0xFFFF && gUnknown_08611C9A[i] != species; i++)
+ ;
+
+ if (gUnknown_08611C9A[i] != 0xFFFF)
+ return;
+ if (lvlMode == FRONTIER_LVL_50 && monLevel > 50)
+ return;
+
+ for (i = 0; i < *count && speciesArray[i] != species; i++)
+ ;
+ if (i != *count)
+ return;
+
+ if (heldItem != 0)
+ {
+ for (i = 0; i < *count && itemsArray[i] != heldItem; i++)
+ ;
+ if (i != *count)
+ return;
+ }
+
+ speciesArray[*count] = species;
+ itemsArray[*count] = heldItem;
+ (*count)++;
+}
+
+void sub_81A3FD4(void)
+{
+ u16 speciesArray[6];
+ u16 itemArray[6];
+ s32 monId = 0;
+ s32 toChoose = 0;
+ u8 count = 0;
+ s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
+ s32 monIdLooper;
+
+ switch (battleMode)
+ {
+ case FRONTIER_MODE_SINGLES:
+ toChoose = 3;
+ break;
+ case FRONTIER_MODE_MULTIS:
+ case FRONTIER_MODE_LINK_MULTIS:
+ toChoose = 2;
+ break;
+ case FRONTIER_MODE_DOUBLES:
+ if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_TOWER)
+ toChoose = 4;
+ else
+ toChoose = 3;
+ break;
+ }
+
+ monIdLooper = 0;
+ do
+ {
+ monId = monIdLooper;
+ count = 0;
+ do
+ {
+ u16 species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2);
+ u16 heldItem = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM);
+ u8 level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ u16 hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
+ if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_PYRAMID)
+ {
+ if (heldItem == 0)
+ AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count);
+ }
+ else
+ {
+ AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count);
+ }
+ monId++;
+ if (monId >= PARTY_SIZE)
+ monId = 0;
+ } while (monId != monIdLooper);
+
+ monIdLooper++;
+ } while (monIdLooper < PARTY_SIZE && count < toChoose);
+
+ if (count < toChoose)
+ {
+ s32 i;
+ s32 caughtBannedMons = 0;
+ s32 species = gUnknown_08611C9A[0];
+ for (i = 0; species != 0xFFFF; i++, species = gUnknown_08611C9A[i])
+ {
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
+ caughtBannedMons++;
+ }
+ gStringVar1[0] = EOS;
+ gSpecialVar_0x8004 = 1;
+ count = 0;
+ for (i = 0; gUnknown_08611C9A[i] != 0xFFFF; i++)
+ count = sub_81A3DD0(gUnknown_08611C9A[i], count, caughtBannedMons);
+
+ if (count == 0)
+ {
+ StringAppend(gStringVar1, gText_Space2);
+ StringAppend(gStringVar1, gText_Are);
+ }
+ else
+ {
+ if (count & 1)
+ StringAppend(gStringVar1, gText_ScrollTextUp);
+ else
+ StringAppend(gStringVar1, gText_Space2);
+ StringAppend(gStringVar1, gText_Are2);
+ }
+ }
+ else
+ {
+ gSpecialVar_0x8004 = 0;
+ gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_Result;
+ }
+}
+
+void sub_81A4224(void)
+{
+ ValidateEReaderTrainer();
+}
+
+void sub_81A4230(void)
+{
+ s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
+ s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
+ s32 facility = VarGet(VAR_FRONTIER_FACILITY);
+
+ switch (facility)
+ {
+ case FRONTIER_FACILITY_TOWER:
+ if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] < 9999)
+ {
+ 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];
+ }
+ }
+ break;
+ case FRONTIER_FACILITY_DOME:
+ if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] < 9999)
+ gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]++;
+ if (gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode] < 9999)
+ gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode]++;
+ break;
+ case FRONTIER_FACILITY_PALACE:
+ if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999)
+ gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++;
+ break;
+ case FRONTIER_FACILITY_ARENA:
+ if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] < 9999)
+ gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]++;
+ break;
+ case FRONTIER_FACILITY_FACTORY:
+ if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] < 9999)
+ gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]++;
+ break;
+ case FRONTIER_FACILITY_PIKE:
+ if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] < 9999)
+ gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]++;
+ break;
+ case FRONTIER_FACILITY_PYRAMID:
+ if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] < 9999)
+ gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]++;
+ break;
+ }
+}
+
+void sub_81A43A8(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gSaveBlock2Ptr->frontier.selectedPartyMons[i] != 0)
+ {
+ u16 item = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_HELD_ITEM, NULL);
+ SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item);
+ }
+ }
+}
+
+void sub_81A4410(void)
+{
+ gSpecialVar_Result = MoveRecordedBattleToSaveData();
+ gSaveBlock2Ptr->frontier.field_CA9_b = 1;
+}
+
+void sub_81A443C(void)
+{
+ switch (gSpecialVar_0x8005)
+ {
+ case 0:
+ GetFrontierTrainerName(gStringVar1, gTrainerBattleOpponent_A);
+ break;
+ case 1:
+ GetFrontierTrainerName(gStringVar2, gTrainerBattleOpponent_A);
+ break;
+ }
+}
+
+void sub_81A447C(void)
+{
+ u8 i, j, k;
+
+ for (i = 0; i < 4; i++)
+ {
+ u16 monId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1;
+ if (monId < PARTY_SIZE)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ for (k = 0; k < 4; k++)
+ {
+ if (GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_MOVE1 + k, NULL)
+ == GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j, NULL))
+ break;
+ }
+ if (k == 4)
+ SetMonMoveSlot(&gPlayerParty[i], MOVE_SKETCH, j);
+ }
+ gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1] = gPlayerParty[i];
+ }
+ }
+}
+
+void sub_81A457C(void)
+{
+ sub_81A5030(VarGet(VAR_FRONTIER_FACILITY));
+}
+
+// Battle Frontier Ranking Hall records.
+static void Print1PRecord(s32 position, s32 x, s32 y, struct RankingHall1P *hallRecord, s32 hallFacilityId)
+{
+ u8 text[32];
+ u16 winStreak;
+
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_123Dot[position], x * 8, (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL);
+ hallRecord->name[PLAYER_NAME_LENGTH] = EOS;
+ if (hallRecord->winStreak)
+ {
+ 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;
+ ConvertIntToDecimalStringN(gStringVar2, winStreak, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ StringExpandPlaceholders(gStringVar4, gUnknown_08611D08[hallFacilityId]);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, gUnknown_08611D08[hallFacilityId], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL);
+ }
+}
+
+static void Print2PRecord(s32 position, s32 x, s32 y, struct RankingHall2P *hallRecord)
+{
+ u8 text[32];
+ u16 winStreak;
+
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gText_123Dot[position], x * 8, (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL);
+ if (hallRecord->winStreak)
+ {
+ hallRecord->name1[PLAYER_NAME_LENGTH] = EOS;
+ hallRecord->name2[PLAYER_NAME_LENGTH] = EOS;
+ TVShowConvertInternationalString(text, hallRecord->name1, hallRecord->language);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, text, (x + 2) * 8, (8 * (y + 5 * position - 1)) + 1, TEXT_SPEED_FF, NULL);
+ if (IsStringJapanese(hallRecord->name2))
+ TVShowConvertInternationalString(text, hallRecord->name2, LANGUAGE_JAPANESE);
+ else
+ StringCopy(text, hallRecord->name2);
+ 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;
+ ConvertIntToDecimalStringN(gStringVar2, winStreak, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ StringExpandPlaceholders(gStringVar4, gUnknown_08611D08[9]);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, gUnknown_08611D08[9], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL);
+ }
+}
+
+static void Fill1PRecords(struct RankingHall1P *dst, s32 hallFacilityId, s32 lvlMode)
+{
+ s32 i, j;
+ struct RankingHall1P record1P[4];
+ struct PlayerHallRecords *playerHallRecords = calloc(1, sizeof(struct PlayerHallRecords));
+ GetPlayerHallRecords(playerHallRecords);
+
+ for (i = 0; i < 3; i++)
+ record1P[i] = gSaveBlock2Ptr->hallRecords1P[hallFacilityId][lvlMode][i];
+
+ record1P[3] = playerHallRecords->onePlayer[hallFacilityId][lvlMode];
+
+ for (i = 0; i < 3; i++)
+ {
+ s32 highestWinStreak = 0;
+ s32 highestId = 0;
+ for (j = 0; j < 4; j++)
+ {
+ if (record1P[j].winStreak > highestWinStreak)
+ {
+ highestId = j;
+ highestWinStreak = record1P[j].winStreak;
+ }
+ }
+ if (record1P[3].winStreak >= highestWinStreak)
+ highestId = 3;
+
+ dst[i] = record1P[highestId];
+ record1P[highestId].winStreak = 0;
+ }
+
+ free(playerHallRecords);
+}
+
+static void Fill2PRecords(struct RankingHall2P *dst, s32 lvlMode)
+{
+ s32 i, j;
+ struct RankingHall2P record2P[4];
+ struct PlayerHallRecords *playerHallRecords = calloc(1, sizeof(struct PlayerHallRecords));
+ GetPlayerHallRecords(playerHallRecords);
+
+ for (i = 0; i < 3; i++)
+ record2P[i] = gSaveBlock2Ptr->hallRecords2P[lvlMode][i];
+
+ record2P[3] = playerHallRecords->twoPlayers[lvlMode];
+
+ for (i = 0; i < 3; i++)
+ {
+ s32 highestWinStreak = 0;
+ s32 highestId = 0;
+ for (j = 0; j < 3; j++)
+ {
+ if (record2P[j].winStreak > highestWinStreak)
+ {
+ highestId = j;
+ highestWinStreak = record2P[j].winStreak;
+ }
+ }
+ if (record2P[3].winStreak >= highestWinStreak)
+ highestId = 3;
+
+ dst[i] = record2P[highestId];
+ record2P[highestId].winStreak = 0;
+ }
+
+ free(playerHallRecords);
+}
+
+static void PrintHallRecords(s32 hallFacilityId, s32 lvlMode)
+{
+ s32 i;
+ s32 x;
+ struct RankingHall1P records1P[3];
+ struct RankingHall2P records2P[3];
+
+ StringCopy(gStringVar1, gUnknown_08611CB0[hallFacilityId][0]);
+ StringExpandPlaceholders(gStringVar4, gUnknown_08611CB0[hallFacilityId][1]);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL);
+ x = GetStringRightAlignXOffset(1, gUnknown_08611D00[lvlMode], 0xD0);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gUnknown_08611D00[lvlMode], x, 1, TEXT_SPEED_FF, NULL);
+ if (hallFacilityId == HALL_FACILITIES_COUNT)
+ {
+ gSaveBlock2Ptr->frontier.field_EE1[0][PLAYER_NAME_LENGTH] = EOS;
+ gSaveBlock2Ptr->frontier.field_EE1[1][PLAYER_NAME_LENGTH] = EOS;
+ Fill2PRecords(records2P, lvlMode);
+ for (i = 0; i < 3; i++)
+ Print2PRecord(i, 1, 4, &records2P[i]);
+ }
+ else
+ {
+ Fill1PRecords(records1P, hallFacilityId, lvlMode);
+ for (i = 0; i < 3; i++)
+ Print1PRecord(i, 1, 4, &records1P[i], hallFacilityId);
+ }
+}
+
+void ShowRankingHallRecordsWindow(void)
+{
+ gRecordsWindowId = AddWindow(&gUnknown_08611C84);
+ NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE);
+ FillWindowPixelBuffer(gRecordsWindowId, 0x11);
+ PrintHallRecords(gSpecialVar_0x8005, FRONTIER_LVL_50);
+ PutWindowTilemap(gRecordsWindowId);
+ CopyWindowToVram(gRecordsWindowId, 3);
+}
+
+void ScrollRankingHallRecordsWindow(void)
+{
+ FillWindowPixelBuffer(gRecordsWindowId, 0x11);
+ PrintHallRecords(gSpecialVar_0x8005, FRONTIER_LVL_OPEN);
+ CopyWindowToVram(gRecordsWindowId, 2);
+}
+
+void ClearnRankingHallRecords(void)
+{
+ s32 i, j, k;
+
+ for (i = 0; i < HALL_FACILITIES_COUNT; i++)
+ {
+ for (j = 0; j < 2; j++)
+ {
+ for (k = 0; k < 3; k++)
+ {
+ CopyUnalignedWord(gSaveBlock2Ptr->hallRecords1P[i][j][k].id, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0.
+ gSaveBlock2Ptr->hallRecords1P[i][j][k].name[0] = EOS;
+ gSaveBlock2Ptr->hallRecords1P[i][j][k].winStreak = 0;
+ }
+ }
+ }
+
+ for (j = 0; j < 2; j++)
+ {
+ for (k = 0; k < 3; k++)
+ {
+ CopyUnalignedWord(gSaveBlock2Ptr->hallRecords2P[j][k].id1, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0.
+ CopyUnalignedWord(gSaveBlock2Ptr->hallRecords2P[j][k].id2, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0.
+ gSaveBlock2Ptr->hallRecords2P[j][k].name1[0] = EOS;
+ gSaveBlock2Ptr->hallRecords2P[j][k].name2[0] = EOS;
+ gSaveBlock2Ptr->hallRecords2P[j][k].winStreak = 0;
+ }
+ }
+}
+
+void sub_81A4C30(void)
+{
+ s32 i;
+ struct Pokemon *monsParty = calloc(PARTY_SIZE, sizeof(struct Pokemon));
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ monsParty[i] = gPlayerParty[i];
+
+ i = gPlayerPartyCount;
+ LoadPlayerParty();
+ sub_8076D5C();
+ TrySavingData(SAVE_LINK);
+ sav2_gender2_inplace_and_xFE();
+ gPlayerPartyCount = i;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ gPlayerParty[i] = monsParty[i];
+
+ free(monsParty);
+}
+
+extern const u16 gFacilityToBrainTrainerId[];
+extern const u8 gUnknown_08611C8C[][2];
+
+u8 GetFrontierBrainTrainerPicIndex(void)
+{
+ s32 facility;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
+ facility = GetRecordedBattleFrontierFacility();
+ else
+ facility = VarGet(VAR_FRONTIER_FACILITY);
+
+ return gTrainers[gFacilityToBrainTrainerId[facility]].trainerPic;
+}
+
+u8 GetFrontierBrainTrainerClass(void)
+{
+ s32 facility;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
+ facility = GetRecordedBattleFrontierFacility();
+ else
+ facility = VarGet(VAR_FRONTIER_FACILITY);
+
+ return gTrainers[gFacilityToBrainTrainerId[facility]].trainerClass;
+}
+
+void CopyFrontierBrainTrainerName(u8 *dst)
+{
+ s32 i;
+ s32 facility;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
+ facility = GetRecordedBattleFrontierFacility();
+ else
+ facility = VarGet(VAR_FRONTIER_FACILITY);
+
+ for (i = 0; i < PLAYER_NAME_LENGTH; i++)
+ dst[i] = gTrainers[gFacilityToBrainTrainerId[facility]].trainerName[i];
+
+ dst[i] = EOS;
+}
+
+bool8 IsFrontierBrainFemale(void)
+{
+ s32 facility = VarGet(VAR_FRONTIER_FACILITY);
+ return gUnknown_08611C8C[facility][1];
+}
+
+void SetFrontierBrainTrainerGfxId(void)
+{
+ s32 facility = VarGet(VAR_FRONTIER_FACILITY);
+ VarSet(VAR_OBJ_GFX_ID_0, gUnknown_08611C8C[facility][0]);
+}
+
+s32 sub_81A513C(void);
+
+#define FRONTIER_BRAIN_OTID 61226
+
+struct FrontierBrainMon
+{
+ u16 species;
+ u16 heldItem;
+ u8 fixedIV;
+ u8 nature;
+ u8 evs[6];
+ u16 moves[4];
+};
+
+extern const struct FrontierBrainMon sFrontierBrainsMons[][2][3];
+
+void CreateFrontierBrainPokemon(void)
+{
+ s32 i, j;
+ s32 monCountInBits;
+ s32 monPartyId;
+ s32 monLevel;
+ u8 friendship;
+ s32 facility = VarGet(VAR_FRONTIER_FACILITY);
+ s32 symbol = sub_81A513C();
+
+ if (facility == FRONTIER_FACILITY_DOME)
+ monCountInBits = GetTrainerMonCountInBits(TrainerIdToDomeTournamentId(TRAINER_FRONTIER_BRAIN));
+ else
+ monCountInBits = 7;
+
+ ZeroEnemyPartyMons();
+ monPartyId = 0;
+ monLevel = SetFacilityPtrsGetLevel();
+ for (i = 0; i < 3; monCountInBits >>= 1, i++)
+ {
+ if (!(monCountInBits & 1))
+ continue;
+
+ do
+ {
+ j = Random32();
+ } while (IsShinyOtIdPersonality(FRONTIER_BRAIN_OTID, j) || sFrontierBrainsMons[facility][symbol][i].nature != GetNatureFromPersonality(j));
+ CreateMon(&gEnemyParty[monPartyId],
+ sFrontierBrainsMons[facility][symbol][i].species,
+ monLevel,
+ sFrontierBrainsMons[facility][symbol][i].fixedIV,
+ TRUE, j,
+ TRUE, FRONTIER_BRAIN_OTID);
+ SetMonData(&gEnemyParty[monPartyId], MON_DATA_HELD_ITEM, &sFrontierBrainsMons[facility][symbol][i].heldItem);
+ for (j = 0; j < 6; j++)
+ SetMonData(&gEnemyParty[monPartyId], MON_DATA_HP_EV + j, &sFrontierBrainsMons[facility][symbol][i].evs[j]);
+ friendship = 0xFF;
+ for (j = 0; j < 4; j++)
+ {
+ SetMonMoveSlot(&gEnemyParty[monPartyId], sFrontierBrainsMons[facility][symbol][i].moves[j], j);
+ if (sFrontierBrainsMons[facility][symbol][i].moves[j] == MOVE_FRUSTRATION)
+ friendship = 0;
+ }
+ SetMonData(&gEnemyParty[monPartyId], MON_DATA_FRIENDSHIP, &friendship);
+ CalculateMonStats(&gEnemyParty[monPartyId]);
+ monPartyId++;
+ }
+}
diff --git a/src/new_game.c b/src/new_game.c
index 127e48c35..e6bafa7a7 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -26,6 +26,7 @@
#include "item.h"
#include "pokedex.h"
#include "apprentice.h"
+#include "frontier_util.h"
extern u8 gDifferentSaveFile;
extern u16 gSaveFileStatus;
@@ -45,7 +46,6 @@ extern void NewGameInitPCItems(void);
extern void ClearDecorationInventories(void);
extern void ResetFanClub(void);
extern void copy_strings_to_sav1(void);
-extern void sub_81A4B14(void);
extern void sub_8195E10(void);
extern void sub_801AFD8(void);
extern void sub_800E5AC(void);
@@ -204,7 +204,7 @@ void NewGameInitData(void)
copy_strings_to_sav1();
SetLilycoveLady();
ResetAllApprenticeData();
- sub_81A4B14();
+ ClearnRankingHallRecords();
sub_8195E10();
sub_801AFD8();
sub_800E5AC();
diff --git a/src/overworld.c b/src/overworld.c
index 8d73a6680..6fc880a54 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -52,6 +52,7 @@
#include "tv.h"
#include "scanline_effect.h"
#include "wild_encounter.h"
+#include "battle_frontier_2.h"
#include "constants/abilities.h"
#include "constants/map_types.h"
#include "constants/maps.h"
@@ -136,7 +137,6 @@ extern void sub_8087D74(void);
extern void battle_pyramid_map_load_related(u8);
extern void sub_80B00E8(u8);
extern void sub_80E9238(u8);
-extern void sub_81A3908(void);
extern void sub_81AA2F8(void);
extern void sub_8195E10(void);
extern void sub_80EDB44(void);
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 4bb97cf1d..6caea7239 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -33,31 +33,17 @@
#include "new_game.h"
#include "daycare.h"
#include "international_string_util.h"
+#include "constants/battle_frontier.h"
extern void ReceiveSecretBasesData(struct SecretBaseRecord *, size_t, u8);
extern void ReceiveEasyChatPairsData(struct EasyChatPair *, size_t, u8);
// Static type declarations
-struct UnknownRecMixingStruct
+struct RecordMixingHallRecords
{
- u32 field_0;
- u16 field_4;
- u8 field_6[9];
-};
-
-struct UnknownRecMixingStruct2
-{
- u32 field_0;
- u16 field_4;
- u16 field_6;
- u16 field_8;
- u8 field_A[16];
-};
-
-struct UnknownRecMixingStruct3
-{
- u8 field_0[0x810];
+ struct RankingHall1P hallRecords1P[HALL_FACILITIES_COUNT][2][6];
+ struct RankingHall2P hallRecords2P[2][6];
};
struct PlayerRecordsRS
@@ -85,7 +71,7 @@ struct PlayerRecordsEmerald
/* 0x1210 */ u16 giftItem;
/* 0x1214 */ LilycoveLady lilycoveLady;
/* 0x1254 */ struct Apprentice apprentice[2];
- /* 0x12dc */ struct UnkRecordMixingStruct2 unk_12dc;
+ /* 0x12dc */ struct PlayerHallRecords hallRecords;
/* 0x1434 */ u8 field_1434[0x10];
}; // 0x1444
@@ -106,7 +92,7 @@ static IWRAM_DATA struct EasyChatPair *sEasyChatPairsSave;
static IWRAM_DATA struct RecordMixingDayCareMail *gUnknown_03001148;
static IWRAM_DATA void *sBattleTowerSave;
static IWRAM_DATA LilycoveLady *sLilycoveLadySave;
-static IWRAM_DATA void *gUnknown_03001154; // gSaveBlock2Ptr->field_0DC;
+static IWRAM_DATA void *sApprenticesSave;
static IWRAM_DATA void *sBattleTowerSave_Duplicate;
static IWRAM_DATA u32 sRecordStructSize;
static IWRAM_DATA u8 gUnknown_03001160;
@@ -137,7 +123,7 @@ static void ReceiveGiftItem(u16 *item, u8 which);
static void sub_80E7FF8(u8 taskId);
static void sub_80E8110(struct Apprentice *arg0, struct Apprentice *arg1);
static void ReceiveApprenticeData(struct Apprentice *arg0, size_t arg1, u32 arg2);
-static void sub_80E89AC(struct UnkRecordMixingStruct2 *arg0, size_t arg1, u32 arg2);
+static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, size_t arg1, u32 arg2);
static void sub_80E89F8(struct RecordMixingDayCareMail *dst);
static void SanitizeDayCareMailForRuby(struct RecordMixingDayCareMail *src);
static void SanitizeEmeraldBattleTowerRecord(struct EmeraldBattleTowerRecord *arg0);
@@ -200,7 +186,7 @@ static void SetSrcLookupPointers(void)
gUnknown_03001148 = &gUnknown_02039F9C;
sBattleTowerSave = &gSaveBlock2Ptr->frontier.towerPlayer;
sLilycoveLadySave = &gSaveBlock1Ptr->lilycoveLady;
- gUnknown_03001154 = gSaveBlock2Ptr->apprentices;
+ sApprenticesSave = gSaveBlock2Ptr->apprentices;
sBattleTowerSave_Duplicate = &gSaveBlock2Ptr->frontier.towerPlayer;
}
@@ -266,8 +252,8 @@ static void PrepareExchangePacket(void)
if (GetMultiplayerId() == 0)
sSentRecord->emerald.giftItem = GetRecordMixingGift();
- sub_80E8110(sSentRecord->emerald.apprentice, gUnknown_03001154);
- sub_80E8260(&sSentRecord->emerald.unk_12dc);
+ sub_80E8110(sSentRecord->emerald.apprentice, sApprenticesSave);
+ GetPlayerHallRecords(&sSentRecord->emerald.hallRecords);
}
}
@@ -300,7 +286,7 @@ static void ReceiveExchangePacket(u32 which)
ReceiveGiftItem(&sReceivedRecords->emerald.giftItem, which);
ReceiveLilycoveLadyData(&sReceivedRecords->emerald.lilycoveLady, sizeof(struct PlayerRecordsEmerald), which);
ReceiveApprenticeData(sReceivedRecords->emerald.apprentice, sizeof(struct PlayerRecordsEmerald), (u8) which);
- sub_80E89AC(&sReceivedRecords->emerald.unk_12dc, sizeof(struct PlayerRecordsEmerald), (u8) which);
+ ReceiveRankingHallRecords(&sReceivedRecords->emerald.hallRecords, sizeof(struct PlayerRecordsEmerald), (u8) which);
}
}
@@ -1608,42 +1594,42 @@ static void sub_80E8110(struct Apprentice *dst, struct Apprentice *src)
}
}
-void sub_80E8260(struct UnkRecordMixingStruct2 *dst)
+void GetPlayerHallRecords(struct PlayerHallRecords *dst)
{
s32 i, j;
- for (i = 0; i < 9; i++)
+ for (i = 0; i < HALL_FACILITIES_COUNT; i++)
{
for (j = 0; j < 2; j++)
{
- CopyUnalignedWord(dst->field_0[i][j].playerId, gSaveBlock2Ptr->playerTrainerId);
- dst->field_0[i][j].language = GAME_LANGUAGE;
- StringCopy(dst->field_0[i][j].playerName, gSaveBlock2Ptr->playerName);
+ CopyUnalignedWord(dst->onePlayer[i][j].id, gSaveBlock2Ptr->playerTrainerId);
+ dst->onePlayer[i][j].language = GAME_LANGUAGE;
+ StringCopy(dst->onePlayer[i][j].name, gSaveBlock2Ptr->playerName);
}
}
for (j = 0; j < 2; j++)
{
- dst->field_120[j].language = GAME_LANGUAGE;
- CopyUnalignedWord(dst->field_120[j].playerId1, gSaveBlock2Ptr->playerTrainerId);
- CopyUnalignedWord(dst->field_120[j].playerId2, gSaveBlock2Ptr->frontier.field_EF1[j]);
- StringCopy(dst->field_120[j].playerName1, gSaveBlock2Ptr->playerName);
- StringCopy(dst->field_120[j].playerName2, gSaveBlock2Ptr->frontier.field_EE1[j]);
+ dst->twoPlayers[j].language = GAME_LANGUAGE;
+ CopyUnalignedWord(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId);
+ CopyUnalignedWord(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.field_EF1[j]);
+ StringCopy(dst->twoPlayers[j].name1, gSaveBlock2Ptr->playerName);
+ StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.field_EE1[j]);
}
for (i = 0; i < 2; i++)
{
- dst->field_0[0][i].field_4 = gSaveBlock2Ptr->frontier.field_CF0[i];
- dst->field_0[1][i].field_4 = gSaveBlock2Ptr->frontier.field_CF4[i];
- dst->field_0[2][i].field_4 = gSaveBlock2Ptr->frontier.field_CF8[i];
- dst->field_0[3][i].field_4 = gSaveBlock2Ptr->frontier.field_D14[0][i];
- dst->field_0[4][i].field_4 = gSaveBlock2Ptr->frontier.field_DD0[0][i];
- dst->field_0[5][i].field_4 = gSaveBlock2Ptr->frontier.field_DDE[i];
- dst->field_0[6][i].field_4 = gSaveBlock2Ptr->frontier.field_DEA[i];
- dst->field_0[7][i].field_4 = gSaveBlock2Ptr->frontier.field_E08[i];
- dst->field_0[8][i].field_4 = gSaveBlock2Ptr->frontier.field_E1E[i];
-
- dst->field_120[i].field_8 = gSaveBlock2Ptr->frontier.field_CFC[i];
+ dst->onePlayer[0][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_SINGLES][i];
+ dst->onePlayer[1][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_DOUBLES][i];
+ dst->onePlayer[2][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_MULTIS][i];
+ dst->onePlayer[3][i].winStreak = gSaveBlock2Ptr->frontier.domeRecordWinStreaks[FRONTIER_MODE_SINGLES][i];
+ dst->onePlayer[4][i].winStreak = gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[FRONTIER_MODE_SINGLES][i];
+ dst->onePlayer[5][i].winStreak = gSaveBlock2Ptr->frontier.arenaRecordStreaks[i];
+ dst->onePlayer[6][i].winStreak = gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[FRONTIER_MODE_SINGLES][i];
+ dst->onePlayer[7][i].winStreak = gSaveBlock2Ptr->frontier.pikeRecordStreaks[i];
+ dst->onePlayer[8][i].winStreak = gSaveBlock2Ptr->frontier.pyramidRecordStreaks[i];
+
+ dst->twoPlayers[i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_LINK_MULTIS][i];
}
}
@@ -1702,7 +1688,7 @@ static void ReceiveApprenticeData(struct Apprentice *arg0, size_t arg1, u32 arg2
}
NAKED
-static void sub_80E8578(struct UnknownRecMixingStruct3 *arg0, struct UnkRecordMixingStruct2 *arg1, size_t arg2, u32 arg3, u32 arg4)
+static void sub_80E8578(struct RecordMixingHallRecords *arg0, struct PlayerHallRecords *arg1, size_t arg2, u32 arg3, u32 arg4)
{
asm_unified(" push {r4-r7,lr}\n\
mov r7, r10\n\
@@ -2106,133 +2092,75 @@ _080E8864:\n\
");
}
-static void sub_80E8880(struct UnknownRecMixingStruct *arg0, struct UnknownRecMixingStruct *arg1)
+static void sub_80E8880(struct RankingHall1P *arg0, struct RankingHall1P *arg1)
{
s32 i, j;
for (i = 0; i < 3; i++)
{
- s32 r2 = 0;
- s32 r4 = -1;
+ s32 highestWinStreak = 0;
+ s32 highestId = -1;
for (j = 0; j < 6; j++)
{
- if (arg1[j].field_4 > r2)
+ if (arg1[j].winStreak > highestWinStreak)
{
- r4 = j;
- r2 = arg1[j].field_4;
+ highestId = j;
+ highestWinStreak = arg1[j].winStreak;
}
}
- if (r4 >= 0)
+ if (highestId >= 0)
{
- arg0[i] = arg1[r4];
- arg1[r4].field_4 = 0;
+ arg0[i] = arg1[highestId];
+ arg1[highestId].winStreak = 0;
}
}
}
-static void sub_80E88CC(struct UnknownRecMixingStruct2 *arg0, struct UnknownRecMixingStruct2 *arg1)
+static void sub_80E88CC(struct RankingHall2P *arg0, struct RankingHall2P *arg1)
{
s32 i, j;
for (i = 0; i < 3; i++)
{
- s32 r2 = 0;
- s32 r4 = -1;
+ s32 highestWinStreak = 0;
+ s32 highestId = -1;
for (j = 0; j < 6; j++)
{
- if (arg1[j].field_8 > r2)
+ if (arg1[j].winStreak > highestWinStreak)
{
- r4 = j;
- r2 = arg1[j].field_8;
+ highestId = j;
+ highestWinStreak = arg1[j].winStreak;
}
}
- if (r4 >= 0)
+ if (highestId >= 0)
{
- arg0[i] = arg1[r4];
- arg1[r4].field_8 = 0;
+ arg0[i] = arg1[highestId];
+ arg1[highestId].winStreak = 0;
}
}
}
-NAKED
-static void sub_80E8924(struct UnknownRecMixingStruct3 *arg0)
+static void sub_80E8924(struct RecordMixingHallRecords *arg0)
{
- asm_unified("push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- mov r9, r0\n\
- movs r0, 0\n\
- ldr r1, =gSaveBlock2Ptr\n\
- mov r10, r1\n\
-_080E8936:\n\
- lsls r1, r0, 1\n\
- adds r2, r0, 0x1\n\
- mov r8, r2\n\
- adds r1, r0\n\
- lsls r0, r1, 5\n\
- movs r2, 0x87\n\
- lsls r2, 2\n\
- adds r7, r0, r2\n\
- lsls r1, 6\n\
- mov r0, r9\n\
- adds r4, r0, r1\n\
- movs r6, 0\n\
- movs r5, 0x1\n\
-_080E8950:\n\
- mov r1, r10\n\
- ldr r0, [r1]\n\
- adds r0, r7\n\
- adds r0, r6\n\
- adds r1, r4, 0\n\
- bl sub_80E8880\n\
- adds r4, 0x60\n\
- adds r6, 0x30\n\
- subs r5, 0x1\n\
- cmp r5, 0\n\
- bge _080E8950\n\
- mov r0, r8\n\
- cmp r0, 0x8\n\
- ble _080E8936\n\
- movs r5, 0\n\
- ldr r4, =gSaveBlock2Ptr\n\
-_080E8972:\n\
- movs r0, 0x54\n\
- adds r1, r5, 0\n\
- muls r1, r0\n\
- ldr r2, =0x0000057c\n\
- adds r1, r2\n\
- ldr r0, [r4]\n\
- adds r0, r1\n\
- movs r1, 0xA8\n\
- muls r1, r5\n\
- movs r2, 0xD8\n\
- lsls r2, 3\n\
- adds r1, r2\n\
- add r1, r9\n\
- bl sub_80E88CC\n\
- adds r5, 0x1\n\
- cmp r5, 0x1\n\
- ble _080E8972\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool");
+ s32 i, j;
+
+ for (i = 0; i < HALL_FACILITIES_COUNT; i++)
+ {
+ for (j = 0; j < 2; j++)
+ sub_80E8880(gSaveBlock2Ptr->hallRecords1P[i][j], arg0->hallRecords1P[i][j]);
+ }
+ for (j = 0; j < 2; j++)
+ sub_80E88CC(gSaveBlock2Ptr->hallRecords2P[j], arg0->hallRecords2P[j]);
}
-static void sub_80E89AC(struct UnkRecordMixingStruct2 *arg0, size_t arg1, u32 arg2)
+static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, size_t arg1, u32 arg2)
{
u8 linkPlayerCount = GetLinkPlayerCount();
- struct UnknownRecMixingStruct3 *largeStructPtr = AllocZeroed(sizeof(struct UnknownRecMixingStruct3));
+ struct RecordMixingHallRecords *largeStructPtr = AllocZeroed(sizeof(struct RecordMixingHallRecords));
- sub_80E8578(largeStructPtr, arg0, arg1, arg2, linkPlayerCount);
+ sub_80E8578(largeStructPtr, hallRecords, arg1, arg2, linkPlayerCount);
sub_80E8924(largeStructPtr);
Free(largeStructPtr);
diff --git a/src/save.c b/src/save.c
index 68427c4c3..0bd48cca9 100644
--- a/src/save.c
+++ b/src/save.c
@@ -712,30 +712,34 @@ u8 HandleSavingData(u8 saveType)
u8 TrySavingData(u8 saveType) // TrySave
{
- if(gFlashMemoryPresent == TRUE)
+ if (gFlashMemoryPresent != TRUE)
{
- HandleSavingData(saveType);
- if(gDamagedSaveSectors)
- DoSaveFailedScreen(saveType);
- else
- goto OK; // really?
+ gUnknown_03006294 = 0xFF;
+ return 0xFF;
}
- gUnknown_03006294 = 0xFF;
- return 0xFF;
-OK:
- gUnknown_03006294 = 1;
- return 1;
+ HandleSavingData(saveType);
+ if (!gDamagedSaveSectors)
+ {
+ gUnknown_03006294 = 1;
+ return 1;
+ }
+ else
+ {
+ DoSaveFailedScreen(saveType);
+ gUnknown_03006294 = 0xFF;
+ return 0xFF;
+ }
}
-u8 sub_8153380(void) // trade.s save
+bool8 sub_8153380(void) // trade.s save
{
if (gFlashMemoryPresent != TRUE)
- return 1;
+ return TRUE;
UpdateSaveAddresses();
SaveSerializedGame();
RestoreSaveBackupVarsAndIncrement(gRamSaveSectionLocations);
- return 0;
+ return FALSE;
}
bool8 sub_81533AC(void) // trade.s save
@@ -744,9 +748,9 @@ bool8 sub_81533AC(void) // trade.s save
if (gDamagedSaveSectors)
DoSaveFailedScreen(0);
if (retVal == 0xFF)
- return 1;
+ return TRUE;
else
- return 0;
+ return FALSE;
}
u8 sub_81533E0(void) // trade.s save
diff --git a/src/strings.c b/src/strings.c
index 15c247744..9cb384e70 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1569,9 +1569,7 @@ asm(".align 2");
const u8 gUnknown_085EE410[] = _("Floors cleared: {STR_VAR_2}");
asm(".align 2");
-const u8 gText_1Dot[] = _("1.");
-const u8 gUnknown_085EE427[] = _("2.");
-const u8 gUnknown_085EE42A[] = _("3.");
+const u8 gText_123Dot[][3] = {_("1."), _("2."), _("3.")};
const u8 gText_SavingDontTurnOff2[] = _("SAVING…\nDON’T TURN OFF THE POWER.");
const u8 gText_BlenderMaxSpeedRecord[] = _("BERRY BLENDER\nMAXIMUM SPEED RECORD!");
const u8 gText_234Players[] = _("2 PLAYERS\n3 PLAYERS\n4 PLAYERS");
diff --git a/src/tv.c b/src/tv.c
index 897f9950b..faa2767b0 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -2500,7 +2500,7 @@ bool8 sub_80EE818(void)
return TRUE;
}
-void sub_80EE8C8(u16 winStreak, u8 facility)
+void sub_80EE8C8(u16 winStreak, u8 facilityAndMode)
{
TVShow *show;
@@ -2512,8 +2512,8 @@ void sub_80EE8C8(u16 winStreak, u8 facility)
show->frontier.active = FALSE;
StringCopy(show->frontier.playerName, gSaveBlock2Ptr->playerName);
show->frontier.winStreak = winStreak;
- show->frontier.facility = facility;
- switch (facility)
+ show->frontier.facility = facilityAndMode;
+ switch (facilityAndMode)
{
case 1:
case 5: