summaryrefslogtreecommitdiff
path: root/src/battle_tower.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle_tower.c')
-rw-r--r--src/battle_tower.c155
1 files changed, 86 insertions, 69 deletions
diff --git a/src/battle_tower.c b/src/battle_tower.c
index 0333c4397..ee75feeb4 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -35,7 +35,6 @@
#include "constants/trainers.h"
#include "constants/event_objects.h"
#include "constants/moves.h"
-#include "constants/species.h"
#include "constants/easy_chat.h"
#include "constants/tv.h"
@@ -47,7 +46,7 @@ EWRAM_DATA const struct BattleFrontierTrainer *gFacilityTrainers = NULL;
EWRAM_DATA const struct FacilityMon *gFacilityTrainerMons = NULL;
// IWRAM common
-u16 gUnknown_03006298[MAX_FRONTIER_PARTY_SIZE];
+u16 gFrontierTempParty[MAX_FRONTIER_PARTY_SIZE];
// This file's functions.
static void InitTowerChallenge(void);
@@ -58,12 +57,12 @@ static void SetTowerBattleWon(void);
static void AwardBattleTowerRibbons(void);
static void SaveTowerChallenge(void);
static void GetOpponentIntroSpeech(void);
-static void nullsub_61(void);
-static void nullsub_116(void);
+static void BattleTowerNop1(void);
+static void BattleTowerNop2(void);
static void LoadMultiPartnerCandidatesData(void);
static void ShowPartnerCandidateMessage(void);
static void LoadLinkMultiOpponentsData(void);
-static void sub_8164DCC(void);
+static void TowerTryCloseLink(void);
static void SetMultiPartnerGfx(void);
static void SetTowerInterviewData(void);
static void ValidateBattleTowerRecordChecksums(void);
@@ -812,12 +811,12 @@ static void (* const sBattleTowerFuncs[])(void) =
[BATTLE_TOWER_FUNC_GIVE_RIBBONS] = AwardBattleTowerRibbons,
[BATTLE_TOWER_FUNC_SAVE] = SaveTowerChallenge,
[BATTLE_TOWER_FUNC_GET_OPPONENT_INTRO] = GetOpponentIntroSpeech,
- [BATTLE_TOWER_FUNC_NOP] = nullsub_61,
- [BATTLE_TOWER_FUNC_NOP2] = nullsub_116,
+ [BATTLE_TOWER_FUNC_NOP] = BattleTowerNop1,
+ [BATTLE_TOWER_FUNC_NOP2] = BattleTowerNop2,
[BATTLE_TOWER_FUNC_LOAD_PARTNERS] = LoadMultiPartnerCandidatesData,
[BATTLE_TOWER_FUNC_PARTNER_MSG] = ShowPartnerCandidateMessage,
[BATTLE_TOWER_FUNC_LOAD_LINK_OPPONENTS] = LoadLinkMultiOpponentsData,
- [BATTLE_TOWER_FUNC_13] = sub_8164DCC,
+ [BATTLE_TOWER_FUNC_TRY_CLOSE_LINK] = TowerTryCloseLink,
[BATTLE_TOWER_FUNC_SET_PARTNER_GFX] = SetMultiPartnerGfx,
[BATTLE_TOWER_FUNC_SET_INTERVIEW_DATA] = SetTowerInterviewData,
};
@@ -1000,7 +999,7 @@ static bool8 ChooseSpecialBattleTowerTrainer(void)
return FALSE;
winStreak = GetCurrentBattleTowerWinStreak(lvlMode, battleMode);
- for (i = 0; i < 5; i++)
+ for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++)
{
u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]);
u32 recordHasData = 0;
@@ -1011,7 +1010,7 @@ static bool8 ChooseSpecialBattleTowerTrainer(void)
checksum += record[j];
}
validMons = 0;
- for (j = 0; j < 4; j++)
+ for (j = 0; j < MAX_FRONTIER_PARTY_SIZE; j++)
{
if (gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species != 0
&& gSaveBlock2Ptr->frontier.towerRecords[i].party[j].level <= GetFrontierEnemyMonLevel(lvlMode))
@@ -1325,7 +1324,7 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm)
struct EmeraldBattleTowerRecord *newRecord = newRecordEm; // Needed to match.
// Find a record slot of the same player and replace it.
- for (i = 0; i < 5; i++)
+ for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++)
{
k = 0;
for (j = 0; j < TRAINER_ID_LENGTH; j++)
@@ -1337,10 +1336,15 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm)
{
for (k = 0; k < PLAYER_NAME_LENGTH; k++)
{
- // BUG: Wrong variable used, 'j' instead of 'k'.
+ #ifdef BUGFIX
+ if (gSaveBlock2Ptr->frontier.towerRecords[i].name[k] != newRecord->name[k])
+ break;
+ if (newRecord->name[k] == EOS)
+ #else
if (gSaveBlock2Ptr->frontier.towerRecords[i].name[j] != newRecord->name[j])
break;
if (newRecord->name[j] == EOS)
+ #endif
{
k = PLAYER_NAME_LENGTH;
break;
@@ -1351,19 +1355,19 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm)
if (k == PLAYER_NAME_LENGTH)
break;
}
- if (i < 5)
+ if (i < BATTLE_TOWER_RECORD_COUNT)
{
gSaveBlock2Ptr->frontier.towerRecords[i] = *newRecord;
return;
}
// Find an empty record slot.
- for (i = 0; i < 5; i++)
+ for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++)
{
if (gSaveBlock2Ptr->frontier.towerRecords[i].winStreak == 0)
break;
}
- if (i < 5)
+ if (i < BATTLE_TOWER_RECORD_COUNT)
{
gSaveBlock2Ptr->frontier.towerRecords[i] = *newRecord;
return;
@@ -1374,7 +1378,7 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm)
slotIds[0] = 0;
slotsCount++;
- for (i = 1; i < 5; i++)
+ for (i = 1; i < BATTLE_TOWER_RECORD_COUNT; i++)
{
for (j = 0; j < slotsCount; j++)
{
@@ -1447,7 +1451,7 @@ u8 GetFrontierOpponentClass(u16 trainerId)
}
else if (trainerId == TRAINER_FRONTIER_BRAIN)
{
- trainerClass = GetFrontierBrainTrainerClass();
+ return GetFrontierBrainTrainerClass();
}
else if (trainerId == TRAINER_STEVEN_PARTNER)
{
@@ -1466,9 +1470,6 @@ u8 GetFrontierOpponentClass(u16 trainerId)
else
{
trainerClass = gFacilityClassToTrainerClass[gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].facilityClass];
- #ifndef NONMATCHING
- asm("");
- #endif
}
}
else
@@ -1480,9 +1481,6 @@ u8 GetFrontierOpponentClass(u16 trainerId)
else
{
trainerClass = gFacilityClassToTrainerClass[gApprentices[gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id].facilityClass];
- #ifndef NONMATCHING
- asm("");
- #endif
}
}
@@ -1549,7 +1547,7 @@ void GetFrontierTrainerName(u8 *dst, u16 trainerId)
{
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
{
- sub_8186468(dst);
+ GetRecordedBattleRecordMixFriendName(dst);
return;
}
else
@@ -1863,7 +1861,7 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId)
otID = T1_READ_32(gSaveBlock2Ptr->playerTrainerId);
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- u16 monId = gUnknown_03006298[i];
+ u16 monId = gFrontierTempParty[i];
CreateMonWithEVSpreadNatureOTID(&gEnemyParty[firstMonId + i],
gFacilityTrainerMons[monId].species,
level,
@@ -1891,7 +1889,7 @@ static void FillFactoryTentTrainerParty(u16 trainerId, u8 firstMonId)
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- u16 monId = gUnknown_03006298[i];
+ u16 monId = gFrontierTempParty[i];
CreateMonWithEVSpreadNatureOTID(&gEnemyParty[firstMonId + i],
gFacilityTrainerMons[monId].species,
level,
@@ -2061,7 +2059,7 @@ void DoSpecialTrainerBattle(void)
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
FillFrontierTrainerParty(DOME_BATTLE_PARTY_SIZE);
CreateTask(Task_StartBattleAfterTransition, 1);
- sub_806E694(0);
+ CreateTask_PlayMapChosenOrBattleBGM(0);
BattleTransition_StartOnField(GetSpecialBattleTransition(3));
break;
case SPECIAL_BATTLE_PALACE:
@@ -2141,7 +2139,7 @@ static void SaveCurrentWinStreak(void)
gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = winStreak;
}
-static void sub_8163EE4(void)
+static void SaveBattleTowerRecord(void)
{
s32 i;
u8 lvlMode, battleMode, class;
@@ -2180,7 +2178,7 @@ static void sub_8163EE4(void)
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
{
if (gSaveBlock2Ptr->frontier.selectedPartyMons[i] != 0)
- sub_80686FC(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], &playerRecord->party[i]);
+ ConvertPokemonToBattleTowerPokemon(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], &playerRecord->party[i]);
}
playerRecord->language = gGameLanguage;
@@ -2195,7 +2193,7 @@ static void SaveTowerChallenge(void)
s32 challengeNum = (signed)(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7);
if (gSpecialVar_0x8005 == 0 && (challengeNum > 1 || gSaveBlock2Ptr->frontier.curChallengeBattleNum != 0))
- sub_8163EE4();
+ SaveBattleTowerRecord();
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
VarSet(VAR_TEMP_0, 0);
@@ -2203,12 +2201,12 @@ static void SaveTowerChallenge(void)
SaveGameFrontier();
}
-static void nullsub_61(void)
+static void BattleTowerNop1(void)
{
}
-static void nullsub_116(void)
+static void BattleTowerNop2(void)
{
}
@@ -2231,11 +2229,11 @@ static void GetApprenticeMultiPartnerParty(u16 trainerId)
}
}
- gUnknown_03006298[0] = validSpecies[Random() % count];
+ gFrontierTempParty[0] = validSpecies[Random() % count];
do
{
- gUnknown_03006298[1] = validSpecies[Random() % count];
- } while (gUnknown_03006298[0] == gUnknown_03006298[1]);
+ gFrontierTempParty[1] = validSpecies[Random() % count];
+ } while (gFrontierTempParty[0] == gFrontierTempParty[1]);
}
static void GetRecordMixFriendMultiPartnerParty(u16 trainerId)
@@ -2247,7 +2245,7 @@ static void GetRecordMixFriendMultiPartnerParty(u16 trainerId)
u16 species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL);
count = 0;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
{
if (gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[i].species != species1
&& gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[i].species != species2
@@ -2259,11 +2257,11 @@ static void GetRecordMixFriendMultiPartnerParty(u16 trainerId)
}
}
- gUnknown_03006298[2] = validSpecies[Random() % count];
+ gFrontierTempParty[2] = validSpecies[Random() % count];
do
{
- gUnknown_03006298[3] = validSpecies[Random() % count];
- } while (gUnknown_03006298[2] == gUnknown_03006298[3]);
+ gFrontierTempParty[3] = validSpecies[Random() % count];
+ } while (gFrontierTempParty[2] == gFrontierTempParty[3]);
}
static void LoadMultiPartnerCandidatesData(void)
@@ -2369,7 +2367,7 @@ static void LoadMultiPartnerCandidatesData(void)
}
r10 = 0;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++)
{
u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]);
u32 recordHasData = 0;
@@ -2386,7 +2384,7 @@ static void LoadMultiPartnerCandidatesData(void)
&& gSaveBlock2Ptr->frontier.towerRecords[i].checksum == checksum)
{
k = 0;
- for (j = 0; j < 4; j++)
+ for (j = 0; j < MAX_FRONTIER_PARTY_SIZE; j++)
{
if (species1 != gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species
&& species2 != gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species
@@ -2412,7 +2410,7 @@ static void LoadMultiPartnerCandidatesData(void)
}
}
-static void sub_81646BC(u16 trainerId, u16 monId)
+static void GetPotentialPartnerMoveAndSpecies(u16 trainerId, u16 monId)
{
u16 move = 0;
u16 species = 0;
@@ -2427,15 +2425,15 @@ static void sub_81646BC(u16 trainerId, u16 monId)
}
else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE)
{
- move = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[gUnknown_03006298[gSpecialVar_0x8005 + 1]].moves[0];
- species = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[gUnknown_03006298[gSpecialVar_0x8005 + 1]].species;
+ move = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[gFrontierTempParty[gSpecialVar_0x8005 + 1]].moves[0];
+ species = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[gFrontierTempParty[gSpecialVar_0x8005 + 1]].species;
}
else
{
s32 i;
- move = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[gUnknown_03006298[gSpecialVar_0x8005 - 1]].moves[0];
- species = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[gUnknown_03006298[gSpecialVar_0x8005 - 1]].species;
+ move = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[gFrontierTempParty[gSpecialVar_0x8005 - 1]].moves[0];
+ species = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[gFrontierTempParty[gSpecialVar_0x8005 - 1]].species;
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
gStringVar3[i] = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].playerName[i];
gStringVar3[i] = EOS;
@@ -2447,6 +2445,14 @@ static void sub_81646BC(u16 trainerId, u16 monId)
StringCopy(gStringVar2, gSpeciesNames[species]);
}
+// For multi battles in the Battle Tower, the player may choose a partner by talking to them
+// These partners can be an NPC or a former/record-mixed Apprentice
+// When talked to, their response consists of:
+// PARTNER_MSGID_INTRO - A greeting
+// PARTNER_MSGID_MON1 - Naming one pokemon on their team, and a move it has
+// PARTNER_MSGID_MON2_ASK - Naming a second pokemon on their team, a move it has, and asking if they'd like to be their partner
+// PARTNER_MSGID_ACCEPT - If the player agrees to be their partner
+// PARTNER_MSGID_REJECT - If the player declines to be their partner
static void ShowPartnerCandidateMessage(void)
{
s32 i, j, partnerId;
@@ -2489,11 +2495,11 @@ static void ShowPartnerCandidateMessage(void)
break;
case PARTNER_MSGID_MON1:
monId = gSaveBlock2Ptr->frontier.trainerIds[8 + k * 2];
- sub_81646BC(trainerId, monId);
+ GetPotentialPartnerMoveAndSpecies(trainerId, monId);
break;
case PARTNER_MSGID_MON2_ASK:
monId = gSaveBlock2Ptr->frontier.trainerIds[9 + k * 2];
- sub_81646BC(trainerId, monId);
+ GetPotentialPartnerMoveAndSpecies(trainerId, monId);
break;
case PARTNER_MSGID_ACCEPT:
gPartnerTrainerId = trainerId;
@@ -2504,13 +2510,13 @@ static void ShowPartnerCandidateMessage(void)
}
else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE)
{
- gSaveBlock2Ptr->frontier.trainerIds[18] = gUnknown_03006298[2];
- gSaveBlock2Ptr->frontier.trainerIds[19] = gUnknown_03006298[3];
+ gSaveBlock2Ptr->frontier.trainerIds[18] = gFrontierTempParty[2];
+ gSaveBlock2Ptr->frontier.trainerIds[19] = gFrontierTempParty[3];
}
else
{
- gSaveBlock2Ptr->frontier.trainerIds[18] = gUnknown_03006298[0];
- gSaveBlock2Ptr->frontier.trainerIds[19] = gUnknown_03006298[1];
+ gSaveBlock2Ptr->frontier.trainerIds[18] = gFrontierTempParty[0];
+ gSaveBlock2Ptr->frontier.trainerIds[19] = gFrontierTempParty[1];
}
for (k = 0; k < 14; k++)
{
@@ -2645,7 +2651,7 @@ static void LoadLinkMultiOpponentsData(void)
}
}
-static void sub_8164DCC(void)
+static void TowerTryCloseLink(void)
{
if (gWirelessCommType != 0)
SetCloseLinkCallback();
@@ -2689,7 +2695,7 @@ static void ValidateBattleTowerRecordChecksums(void)
if (gSaveBlock2Ptr->frontier.towerPlayer.checksum != checksum)
ClearBattleTowerRecord(&gSaveBlock2Ptr->frontier.towerPlayer);
- for (i = 0; i < 5; i++)
+ for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++)
{
record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]);
checksum = 0;
@@ -2840,7 +2846,7 @@ static void FillEReaderTrainerWithPlayerData(void)
}
for (i = 0; i < 3; i++)
- sub_80686FC(&gPlayerParty[i], &ereaderTrainer->party[i]);
+ ConvertPokemonToBattleTowerPokemon(&gPlayerParty[i], &ereaderTrainer->party[i]);
SetEReaderTrainerChecksum(ereaderTrainer);
}
@@ -2963,7 +2969,12 @@ static void FillPartnerParty(u16 trainerId)
sStevenMons[i].species,
sStevenMons[i].level,
sStevenMons[i].fixedIV,
- TRUE, i, // BUG: personality was stored in the 'j' variable. As a result, Steven's pokemon do not have the intended natures.
+ TRUE,
+ #ifdef BUGFIX
+ j,
+ #else
+ i, // BUG: personality was stored in the 'j' variable. As a result, Steven's pokemon do not have the intended natures.
+ #endif
OT_ID_PRESET, STEVEN_OTID);
for (j = 0; j < PARTY_SIZE; j++)
SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_HP_EV + j, &sStevenMons[i].evs[j]);
@@ -3069,9 +3080,12 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em
{
dst->lvlMode = src->lvlMode;
dst->winStreak = src->winStreak;
- // BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries.
- // Fix by using ARRAY_COUNT(sRubyFacilityClassToEmerald)
+ // UB: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries.
+ #ifdef UBFIX
+ for (i = 0; i < ARRAY_COUNT(sRubyFacilityClassToEmerald); i++)
+ #else
for (i = 0; i < FACILITY_CLASSES_COUNT; i++)
+ #endif
{
if (sRubyFacilityClassToEmerald[i][0] == src->facilityClass)
break;
@@ -3119,9 +3133,12 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru
{
dst->lvlMode = src->lvlMode;
dst->winStreak = src->winStreak;
- // BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries.
- // Fix by using ARRAY_COUNT(sRubyFacilityClassToEmerald) instead
+ // UB: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries.
+ #ifdef UBFIX
+ for (i = 0; i < ARRAY_COUNT(sRubyFacilityClassToEmerald); i++)
+ #else
for (i = 0; i < FACILITY_CLASSES_COUNT; i++)
+ #endif
{
if (sRubyFacilityClassToEmerald[i][1] == src->facilityClass)
break;
@@ -3283,16 +3300,16 @@ static u8 GetFrontierTrainerFixedIvs(u16 trainerId)
return fixedIv;
}
-static u16 sub_8165D40(void)
+static u16 GetBattleTentTrainerId(void)
{
u32 facility = VarGet(VAR_FRONTIER_FACILITY);
- if (facility == FRONTIER_FACILITY_PALACE)
- return Random() % 30;
- else if (facility == FRONTIER_FACILITY_ARENA)
- return Random() % 30;
- else if (facility == FRONTIER_FACILITY_FACTORY)
- return Random() % 30;
+ if (facility == FRONTIER_FACILITY_PALACE) // Verdanturf Tent; uses Palace mechanics
+ return Random() % NUM_BATTLE_TENT_TRAINERS;
+ else if (facility == FRONTIER_FACILITY_ARENA) // Fallarbor Tent; uses Arena mechanics
+ return Random() % NUM_BATTLE_TENT_TRAINERS;
+ else if (facility == FRONTIER_FACILITY_FACTORY) // Slateport Tent; uses Factory mechanics
+ return Random() % NUM_BATTLE_TENT_TRAINERS;
else if (facility == FRONTIER_FACILITY_TOWER)
return 0;
else
@@ -3339,7 +3356,7 @@ static void SetNextBattleTentOpponent(void)
do
{
- trainerId = sub_8165D40();
+ trainerId = GetBattleTentTrainerId();
for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++)
{
if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId)
@@ -3502,7 +3519,7 @@ bool32 ValidateBattleTowerRecord(u8 recordId) // unused
}
}
-void sub_8166188(void)
+void TrySetLinkBattleTowerEnemyPartyLevel(void)
{
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
{