summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDizzyEggg <jajkodizzy@wp.pl>2018-11-01 21:31:10 +0100
committerDizzyEggg <jajkodizzy@wp.pl>2018-11-01 21:31:10 +0100
commit0bb51037d7d3e257a84b1488016441aafd34b020 (patch)
tree80be30e68eb7b53be9cc85c5e4b55c09140b546d /src
parent37d742cbd86eab628e0d84d5957a805c407b0948 (diff)
Finish frontier util
Diffstat (limited to 'src')
-rw-r--r--src/apprentice.c2
-rw-r--r--src/battle_dome.c26
-rw-r--r--src/battle_tent.c2
-rw-r--r--src/battle_tower.c16
-rw-r--r--src/field_control_avatar.c3
-rw-r--r--src/field_poison.c2
-rw-r--r--src/fieldmap.c2
-rw-r--r--src/frontier_util.c789
-rwxr-xr-xsrc/item_menu.c2
-rw-r--r--src/new_game.c20
-rw-r--r--src/pokemon_summary_screen.c2
-rw-r--r--src/record_mixing.c24
-rw-r--r--src/recorded_battle.c22
-rw-r--r--src/scrcmd.c5
-rw-r--r--src/start_menu.c2
-rw-r--r--src/walda_phrase.c2
16 files changed, 765 insertions, 156 deletions
diff --git a/src/apprentice.c b/src/apprentice.c
index b4c1f849e..2feac49a7 100644
--- a/src/apprentice.c
+++ b/src/apprentice.c
@@ -2238,7 +2238,7 @@ static void sub_81A1370(void)
r9 = -1;
for (i = 1; i < 4; i++)
{
- if (ReadUnalignedWord(gSaveBlock2Ptr->apprentices[i].playerId) == ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId)
+ if (GetTrainerId(gSaveBlock2Ptr->apprentices[i].playerId) == GetTrainerId(gSaveBlock2Ptr->playerTrainerId)
&& gSaveBlock2Ptr->apprentices[i].number < r10)
{
r10 = gSaveBlock2Ptr->apprentices[i].number;
diff --git a/src/battle_dome.c b/src/battle_dome.c
index ba8cf6185..d5489f529 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -57,12 +57,12 @@ struct UnkStruct_860DD10
};
extern void sub_81B8558(void);
-extern u16 sub_81A5060(u8 monId, u8 moveSlotId);
-extern u8 sub_81A50F0(u8, u8);
-extern u8 sub_81A50B0(u8);
+extern u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId);
+extern u8 GetFrontierBrainMonEvs(u8, u8);
+extern u8 GetFrontierBrainMonNature(u8);
extern void sub_81A4C30(void);
extern u8 sub_81A3610(void);
-extern u16 sub_81A4FF0(u8);
+extern u16 GetFrontierBrainMonSpecies(u8);
extern void ReducePlayerPartyToThree(void);
extern u8 gUnknown_0203CEF8[];
@@ -2737,7 +2737,7 @@ static void InitDomeTrainers(void)
}
for (i = 0; i < 3; i++)
- gSaveBlock2Ptr->frontier.domeMonIds[j][i] = sub_81A4FF0(i);
+ gSaveBlock2Ptr->frontier.domeMonIds[j][i] = GetFrontierBrainMonSpecies(i);
}
Free(statSums);
@@ -2856,7 +2856,7 @@ static void CreateDomeTrainerMons(u16 tournamentTrainerId)
s32 i, bits;
ZeroEnemyPartyMons();
- bits = GetTrainerMonCountInBits(tournamentTrainerId);
+ bits = GetDomeTrainerMonCountInBits(tournamentTrainerId);
otId = Random32();
if (Random() % 10 > 5)
{
@@ -2884,7 +2884,7 @@ static void CreateDomeTrainerMons(u16 tournamentTrainerId)
}
}
-s32 GetTrainerMonCountInBits(u16 tournamentTrainerId)
+s32 GetDomeTrainerMonCountInBits(u16 tournamentTrainerId)
{
s32 bits;
if (Random() & 1)
@@ -2917,7 +2917,7 @@ static s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1)
{
if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN)
{
- array[i] += GetTypeEffectivenessPoints(sub_81A5060(i, moveId),
+ array[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId),
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0);
}
else
@@ -2945,7 +2945,7 @@ static s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1)
{
if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN)
{
- array[i] += GetTypeEffectivenessPoints(sub_81A5060(i, moveId),
+ array[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId),
GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1);
}
else
@@ -4875,7 +4875,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
for (k = 0; k < DOME_TOURNAMENT_TRAINERS_COUNT; k++)
{
if (trainerId == TRAINER_FRONTIER_BRAIN)
- allocatedArray[k] += sMovePointsForDomeTrainers[sub_81A5060(i, j)][k];
+ allocatedArray[k] += sMovePointsForDomeTrainers[GetFrontierBrainMonMove(i, j)][k];
else if (trainerId == TRAINER_PLAYER)
allocatedArray[k] += sMovePointsForDomeTrainers[gSaveBlock2Ptr->frontier.field_EFC[i].moves[j]][k];
else
@@ -4916,7 +4916,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
for (j = 0; j < 6; j++)
{
if (trainerId == TRAINER_FRONTIER_BRAIN)
- allocatedArray[j] = sub_81A50F0(i, j);
+ allocatedArray[j] = GetFrontierBrainMonEvs(i, j);
else
allocatedArray[j] = gSaveBlock2Ptr->frontier.field_EFC[i].evs[j];
}
@@ -4924,7 +4924,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
for (j = 0; j < 5; j++)
{
if (trainerId == TRAINER_FRONTIER_BRAIN)
- nature = sub_81A50B0(i);
+ nature = GetFrontierBrainMonNature(i);
else
nature = gSaveBlock2Ptr->frontier.field_EFC[i].nature;
@@ -5564,7 +5564,7 @@ static u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roun
{
moveScores[i * 4 + j] = 0;
if (gSaveBlock2Ptr->frontier.domeTrainers[winnerTournamentId].trainerId == TRAINER_FRONTIER_BRAIN)
- moveIds[i * 4 + j] = sub_81A5060(i, j);
+ moveIds[i * 4 + j] = GetFrontierBrainMonMove(i, j);
else
moveIds[i * 4 + j] = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[winnerTournamentId][i]].moves[j];
diff --git a/src/battle_tent.c b/src/battle_tent.c
index 9c66a0325..f3aec1345 100644
--- a/src/battle_tent.c
+++ b/src/battle_tent.c
@@ -19,6 +19,8 @@ extern const u16 gBattleFrontierHeldItems[];
extern u16 gUnknown_03006298[];
+extern void sub_81A4C30(void);
+
// This file's functions.
static void sub_81B99D4(void);
static void sub_81B9A28(void);
diff --git a/src/battle_tower.c b/src/battle_tower.c
index f02336ef5..e95eaf156 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -9,7 +9,6 @@
#include "main.h"
#include "international_string_util.h"
#include "battle.h"
-#include "battle_frontier_1.h"
#include "frontier_util.h"
#include "recorded_battle.h"
#include "easy_chat.h"
@@ -30,14 +29,9 @@
extern u16 gUnknown_03006298[];
-extern void sub_81A3ACC(void);
-extern void CreateFrontierBrainPokemon(void);
extern void sub_81A6CD0(void);
-extern void SetFrontierBrainTrainerGfxId(void);
-extern u8 GetFrontierBrainTrainerPicIndex(void);
-extern u8 GetFrontierBrainTrainerClass(void);
-extern u8 IsFrontierBrainFemale(void);
-extern void CopyFrontierBrainTrainerName(u8 *dst);
+extern void sub_81A4C30(void);
+extern u8 sub_81A6CA8(u8, u8);
extern void SetMonMoveAvoidReturn(struct Pokemon *mon, u16 move, u8 moveSlot);
extern const u8 *const *const gUnknown_085DD690[];
@@ -525,7 +519,7 @@ void SetBattleFacilityTrainerGfxId(u16 trainerId, u8 tempVarId)
}
else if (trainerId == TRAINER_FRONTIER_BRAIN)
{
- SetFrontierBrainTrainerGfxId();
+ SetFrontierBrainEventObjGfx_2();
return;
}
else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
@@ -1509,7 +1503,7 @@ static void sub_8163EE4(void)
}
playerRecord->lvlMode = lvlMode;
playerRecord->facilityClass = class;
- CopyUnalignedWord(playerRecord->trainerId, gSaveBlock2Ptr->playerTrainerId);
+ CopyTrainerId(playerRecord->trainerId, gSaveBlock2Ptr->playerTrainerId);
StringCopy7(playerRecord->name, gSaveBlock2Ptr->playerName);
playerRecord->winStreak = GetCurrentBattleTowerWinStreak(lvlMode, battleMode);
@@ -2165,7 +2159,7 @@ static void FillEReaderTrainerWithPlayerData(void)
+ gSaveBlock2Ptr->playerTrainerId[2] + gSaveBlock2Ptr->playerTrainerId[3]) % ARRAY_COUNT(gTowerMaleFacilityClasses)];
}
- CopyUnalignedWord(ereaderTrainer->trainerId, gSaveBlock2Ptr->playerTrainerId);
+ CopyTrainerId(ereaderTrainer->trainerId, gSaveBlock2Ptr->playerTrainerId);
StringCopy7(ereaderTrainer->name, gSaveBlock2Ptr->playerName);
ereaderTrainer->winStreak = 1;
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index fef403c04..738826020 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -1,6 +1,5 @@
#include "global.h"
#include "battle_setup.h"
-#include "battle_frontier_1.h"
#include "bike.h"
#include "coord_event_weather.h"
#include "daycare.h"
@@ -31,6 +30,8 @@
#include "constants/map_types.h"
#include "constants/songs.h"
+extern bool32 sub_8196034(void);
+
static EWRAM_DATA u8 sWildEncounterImmunitySteps = 0;
static EWRAM_DATA u16 sPreviousPlayerMetatileBehavior = 0;
diff --git a/src/field_poison.c b/src/field_poison.c
index c11f01a45..e2fd994fc 100644
--- a/src/field_poison.c
+++ b/src/field_poison.c
@@ -14,6 +14,8 @@
#include "fldeff_80F9BCC.h"
#include "field_poison.h"
+extern bool8 InBattlePike(void);
+
static bool32 sub_80F9568(struct Pokemon *pokemon)
{
u16 species = GetMonData(pokemon, MON_DATA_SPECIES2);
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 70132ff17..5019b5dc7 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -14,6 +14,8 @@
#include "secret_base.h"
#include "tv.h"
+extern void sub_81AA078(u16*, u8);
+
struct ConnectionFlags
{
u8 south:1;
diff --git a/src/frontier_util.c b/src/frontier_util.c
index 729b1e622..33cef0ac6 100644
--- a/src/frontier_util.c
+++ b/src/frontier_util.c
@@ -33,25 +33,55 @@
#include "constants/species.h"
#include "constants/game_stat.h"
#include "constants/moves.h"
+#include "constants/items.h"
+#include "constants/event_objects.h"
extern u8 gUnknown_0203CEF8[];
-extern void (* const gUnknown_08611C18[])(void);
-extern const u16 gUnknown_08611BFC[][2];
+struct FrontierBrainMon
+{
+ u16 species;
+ u16 heldItem;
+ u8 fixedIV;
+ u8 nature;
+ u8 evs[6];
+ u16 moves[4];
+};
+
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 const u8 *const *const gUnknown_08611DB0[];
+extern const u8 *const *const gUnknown_08611DB8[];
+extern const u16 gFacilityToBrainTrainerId[];
extern void sub_81B8558(void);
// This file's functions.
-u8 sub_81A3B30(u8 facility);
+static void sub_81A17A0(void);
+static void sub_81A1830(void);
+static void sub_81A1968(void);
+static void sub_81A1AD4(void);
+static void DoSoftReset_(void);
+static void sub_81A1B28(void);
+static void sub_81A1B38(void);
+static void ShowFacilityResultsWindow(void);
+static void sub_81A31FC(void);
+static void sub_81A35EC(void);
+static void sub_81A3B00(void);
+static void sub_81A3B64(void);
+static void sub_81A3D30(void);
+static void sub_81A3D58(void);
+static void sub_81A3DA0(void);
+static void sub_81A3FD4(void);
+static void sub_81A4224(void);
+static void sub_81A4230(void);
+static void sub_81A43A8(void);
+static void sub_81A4410(void);
+static void sub_81A443C(void);
+static void sub_81A447C(void);
+static void sub_81A457C(void);
static void ShowTowerResultsWindow(u8);
static void ShowDomeResultsWindow(u8);
static void ShowPalaceResultsWindow(u8);
@@ -60,12 +90,10 @@ static void ShowFactoryResultsWindow(u8);
static void ShowArenaResultsWindow(void);
static void ShowPyramidResultsWindow(void);
static void ShowLinkContestResultsWindow(void);
-u8 sub_81A3610(void);
static void CopyFrontierBrainText(bool8 playerWonText);
-void sub_81A5030(u8);
// const rom data
-const u8 gUnknown_08611550[][4] =
+static const u8 gUnknown_08611550[][4] =
{
[FRONTIER_FACILITY_TOWER] = {0x23, 0x46, 0x23, 0x01},
[FRONTIER_FACILITY_DOME] = {0x04, 0x09, 0x05, 0x00},
@@ -76,13 +104,599 @@ const u8 gUnknown_08611550[][4] =
[FRONTIER_FACILITY_PYRAMID] = {0x15, 0x46, 0x23, 0x00},
};
+static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
+{
+ [FRONTIER_FACILITY_TOWER] =
+ {
+ // Silver Symbol.
+ {
+ {
+ .species = SPECIES_ALAKAZAM,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .fixedIV = 24,
+ .nature = 15,
+ .evs = {106, 0, 152, 152, 100, 0},
+ .moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_DISABLE},
+ },
+ {
+ .species = SPECIES_ENTEI,
+ .heldItem = ITEM_LUM_BERRY,
+ .fixedIV = 24,
+ .nature = 1,
+ .evs = {100, 152, 152, 0, 100, 6},
+ .moves = {MOVE_FIRE_BLAST, MOVE_CALM_MIND, MOVE_RETURN, MOVE_ROAR},
+ },
+ {
+ .species = SPECIES_SNORLAX,
+ .heldItem = ITEM_QUICK_CLAW,
+ .fixedIV = 24,
+ .nature = 3,
+ .evs = {152, 152, 0, 0, 106, 100},
+ .moves = {MOVE_BODY_SLAM, MOVE_BELLY_DRUM, MOVE_YAWN, MOVE_SHADOW_BALL},
+ },
+ },
+ // Gold Symbol.
+ {
+ {
+ .species = SPECIES_RAIKOU,
+ .heldItem = ITEM_LUM_BERRY,
+ .fixedIV = 31,
+ .nature = 15,
+ .evs = {158, 0, 252, 100, 0, 0},
+ .moves = {MOVE_THUNDERBOLT, MOVE_CALM_MIND, MOVE_REFLECT, MOVE_REST},
+ },
+ {
+ .species = SPECIES_LATIOS,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .fixedIV = 31,
+ .nature = 15,
+ .evs = {252, 0, 252, 6, 0, 0},
+ .moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_RECOVER, MOVE_DRAGON_CLAW},
+ },
+ {
+ .species = SPECIES_SNORLAX,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .fixedIV = 31,
+ .nature = 3,
+ .evs = {252, 252, 0, 0, 6, 0},
+ .moves = {MOVE_CURSE, MOVE_RETURN, MOVE_REST, MOVE_SHADOW_BALL},
+ },
+ },
+ },
+ [FRONTIER_FACILITY_DOME] =
+ {
+ // Silver Symbol.
+ {
+ {
+ .species = SPECIES_SWAMPERT,
+ .heldItem = ITEM_FOCUS_BAND,
+ .fixedIV = 20,
+ .nature = 2,
+ .evs = {152, 152, 106, 0, 100, 0},
+ .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_COUNTER},
+ },
+ {
+ .species = SPECIES_SALAMENCE,
+ .heldItem = ITEM_LUM_BERRY,
+ .fixedIV = 20,
+ .nature = 3,
+ .evs = {152, 152, 106, 100, 0, 0},
+ .moves = {MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE},
+ },
+ {
+ .species = SPECIES_CHARIZARD,
+ .heldItem = ITEM_WHITE_HERB,
+ .fixedIV = 20,
+ .nature = 17,
+ .evs = {100, 152, 106, 152, 0, 0},
+ .moves = {MOVE_OVERHEAT, MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE, MOVE_EARTHQUAKE},
+ },
+ },
+ // Gold Symbol.
+ {
+ {
+ .species = SPECIES_SWAMPERT,
+ .heldItem = ITEM_LEFTOVERS,
+ .fixedIV = 31,
+ .nature = 2,
+ .evs = {252, 252, 6, 0, 0, 0},
+ .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
+ },
+ {
+ .species = SPECIES_METAGROSS,
+ .heldItem = ITEM_QUICK_CLAW,
+ .fixedIV = 31,
+ .nature = 2,
+ .evs = {252, 252, 6, 0, 0, 0},
+ .moves = {MOVE_PSYCHIC, MOVE_METEOR_MASH, MOVE_EARTHQUAKE, MOVE_PROTECT},
+ },
+ {
+ .species = SPECIES_LATIAS,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .fixedIV = 31,
+ .nature = 15,
+ .evs = {252, 0, 252, 6, 0, 0},
+ .moves = {MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_REST},
+ },
+ },
+ },
+ [FRONTIER_FACILITY_PALACE] =
+ {
+ // Silver Symbol.
+ {
+ {
+ .species = SPECIES_CROBAT,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .fixedIV = 16,
+ .nature = 3,
+ .evs = {152, 0, 0, 152, 100, 106},
+ .moves = {MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM, MOVE_TOXIC, MOVE_FLY},
+ },
+ {
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_SCOPE_LENS,
+ .fixedIV = 16,
+ .nature = 0,
+ .evs = {152, 152, 0, 106, 100, 0},
+ .moves = {MOVE_EARTHQUAKE, MOVE_SWAGGER, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK},
+ },
+ {
+ .species = SPECIES_LAPRAS,
+ .heldItem = ITEM_QUICK_CLAW,
+ .fixedIV = 16,
+ .nature = 17,
+ .evs = {0, 0, 252, 0, 106, 152},
+ .moves = {MOVE_ICE_BEAM, MOVE_HORN_DRILL, MOVE_CONFUSE_RAY, MOVE_PROTECT},
+ },
+ },
+ // Gold Symbol.
+ {
+ {
+ .species = SPECIES_ARCANINE,
+ .heldItem = ITEM_WHITE_HERB,
+ .fixedIV = 31,
+ .nature = 11,
+ .evs = {6, 252, 252, 0, 0, 0},
+ .moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_ROAR, MOVE_PROTECT},
+ },
+ {
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_SCOPE_LENS,
+ .fixedIV = 31,
+ .nature = 0,
+ .evs = {6, 252, 0, 252, 0, 0},
+ .moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_YAWN},
+ },
+ {
+ .species = SPECIES_SUICUNE,
+ .heldItem = ITEM_KINGS_ROCK,
+ .fixedIV = 31,
+ .nature = 11,
+ .evs = {252, 0, 252, 6, 0, 0},
+ .moves = {MOVE_BLIZZARD, MOVE_SURF, MOVE_BITE, MOVE_CALM_MIND},
+ },
+ },
+ },
+ [FRONTIER_FACILITY_ARENA] =
+ {
+ // Silver Symbol.
+ {
+ {
+ .species = SPECIES_HERACROSS,
+ .heldItem = ITEM_SALAC_BERRY,
+ .fixedIV = 20,
+ .nature = 13,
+ .evs = {106, 152, 0, 152, 0, 100},
+ .moves = {MOVE_MEGAHORN, MOVE_ROCK_TOMB, MOVE_ENDURE, MOVE_REVERSAL},
+ },
+ {
+ .species = SPECIES_UMBREON,
+ .heldItem = ITEM_LEFTOVERS,
+ .fixedIV = 20,
+ .nature = 20,
+ .evs = {152, 0, 100, 0, 152, 106},
+ .moves = {MOVE_BODY_SLAM, MOVE_CONFUSE_RAY, MOVE_PSYCHIC, MOVE_FAINT_ATTACK},
+ },
+ {
+ .species = SPECIES_SHEDINJA,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .fixedIV = 20,
+ .nature = 3,
+ .evs = {0, 252, 6, 252, 0, 0},
+ .moves = {MOVE_SHADOW_BALL, MOVE_RETURN, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE},
+ },
+ },
+ // Gold Symbol.
+ {
+ {
+ .species = SPECIES_UMBREON,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .fixedIV = 31,
+ .nature = 20,
+ .evs = {252, 0, 0, 0, 252, 6},
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_CONFUSE_RAY, MOVE_REST, MOVE_PSYCHIC},
+ },
+ {
+ .species = SPECIES_GENGAR,
+ .heldItem = ITEM_LEFTOVERS,
+ .fixedIV = 31,
+ .nature = 15,
+ .evs = {252, 0, 252, 0, 6, 0},
+ .moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_DESTINY_BOND},
+ },
+ {
+ .species = SPECIES_BRELOOM,
+ .heldItem = ITEM_LUM_BERRY,
+ .fixedIV = 31,
+ .nature = 13,
+ .evs = {6, 252, 0, 252, 0, 0},
+ .moves = {MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HEADBUTT},
+ },
+ },
+ },
+ [FRONTIER_FACILITY_FACTORY] =
+ {
+ // Silver Symbol.
+ {
+ {
+ .species = SPECIES_METANG,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .fixedIV = 31,
+ .nature = 2,
+ .evs = {0, 252, 252, 0, 6, 0},
+ .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW},
+ },
+ {
+ .species = SPECIES_SKARMORY,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .fixedIV = 31,
+ .nature = 8,
+ .evs = {252, 0, 0, 0, 6, 252},
+ .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING},
+ },
+ {
+ .species = SPECIES_AGGRON,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .fixedIV = 31,
+ .nature = 3,
+ .evs = {0, 252, 0, 0, 252, 6},
+ .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW},
+ },
+ },
+ // Gold Symbol.
+ {
+ {
+ .species = SPECIES_METANG,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .fixedIV = 31,
+ .nature = 2,
+ .evs = {0, 252, 252, 0, 6, 0},
+ .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW},
+ },
+ {
+ .species = SPECIES_SKARMORY,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .fixedIV = 31,
+ .nature = 8,
+ .evs = {252, 0, 0, 0, 6, 252},
+ .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING},
+ },
+ {
+ .species = SPECIES_AGGRON,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .fixedIV = 31,
+ .nature = 3,
+ .evs = {0, 252, 0, 0, 252, 6},
+ .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW},
+ },
+ },
+ },
+ [FRONTIER_FACILITY_PIKE] =
+ {
+ // Silver Symbol.
+ {
+ {
+ .species = SPECIES_SEVIPER,
+ .heldItem = ITEM_QUICK_CLAW,
+ .fixedIV = 16,
+ .nature = 2,
+ .evs = {252, 0, 252, 0, 6, 0},
+ .moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_POISON_FANG, MOVE_GIGA_DRAIN},
+ },
+ {
+ .species = SPECIES_SHUCKLE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .fixedIV = 16,
+ .nature = 5,
+ .evs = {252, 0, 0, 0, 106, 252},
+ .moves = {MOVE_TOXIC, MOVE_SANDSTORM, MOVE_PROTECT, MOVE_REST},
+ },
+ {
+ .species = SPECIES_MILOTIC,
+ .heldItem = ITEM_LEFTOVERS,
+ .fixedIV = 16,
+ .nature = 15,
+ .evs = {152, 0, 100, 0, 152, 106},
+ .moves = {MOVE_ICE_BEAM, MOVE_MIRROR_COAT, MOVE_SURF, MOVE_RECOVER},
+ },
+ },
+ // Gold Symbol.
+ {
+ {
+ .species = SPECIES_SEVIPER,
+ .heldItem = ITEM_FOCUS_BAND,
+ .fixedIV = 31,
+ .nature = 5,
+ .evs = {252, 0, 0, 0, 252, 6},
+ .moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN},
+ },
+ {
+ .species = SPECIES_STEELIX,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .fixedIV = 31,
+ .nature = 2,
+ .evs = {252, 0, 0, 0, 6, 252},
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_EXPLOSION, MOVE_SCREECH},
+ },
+ {
+ .species = SPECIES_GYARADOS,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .fixedIV = 31,
+ .nature = 3,
+ .evs = {252, 6, 0, 0, 0, 252},
+ .moves = {MOVE_DRAGON_DANCE, MOVE_RETURN, MOVE_ROAR, MOVE_REST},
+ },
+ },
+ },
+ [FRONTIER_FACILITY_PYRAMID] =
+ {
+ // Silver Symbol.
+ {
+ {
+ .species = SPECIES_REGIROCK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .fixedIV = 16,
+ .nature = 3,
+ .evs = {152, 152, 0, 0, 106, 100},
+ .moves = {MOVE_EXPLOSION, MOVE_SUPERPOWER, MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER},
+ },
+ {
+ .species = SPECIES_REGISTEEL,
+ .heldItem = ITEM_LEFTOVERS,
+ .fixedIV = 16,
+ .nature = 3,
+ .evs = {152, 152, 0, 0, 6, 200},
+ .moves = {MOVE_EARTHQUAKE, MOVE_METAL_CLAW, MOVE_TOXIC, MOVE_IRON_DEFENSE},
+ },
+ {
+ .species = SPECIES_REGICE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .fixedIV = 16,
+ .nature = 15,
+ .evs = {106, 0, 152, 0, 100, 152},
+ .moves = {MOVE_ICE_BEAM, MOVE_AMNESIA, MOVE_THUNDER, MOVE_REST},
+ },
+ },
+ // Gold Symbol.
+ {
+ {
+ .species = SPECIES_ARTICUNO,
+ .heldItem = ITEM_SCOPE_LENS,
+ .fixedIV = 31,
+ .nature = 16,
+ .evs = {6, 0, 252, 252, 0, 0},
+ .moves = {MOVE_BLIZZARD, MOVE_WATER_PULSE, MOVE_AERIAL_ACE, MOVE_REFLECT},
+ },
+ {
+ .species = SPECIES_ZAPDOS,
+ .heldItem = ITEM_LUM_BERRY,
+ .fixedIV = 31,
+ .nature = 16,
+ .evs = {6, 0, 252, 252, 0, 0},
+ .moves = {MOVE_THUNDER, MOVE_DETECT, MOVE_DRILL_PECK, MOVE_LIGHT_SCREEN},
+ },
+ {
+ .species = SPECIES_MOLTRES,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .fixedIV = 31,
+ .nature = 16,
+ .evs = {6, 0, 252, 252, 0, 0},
+ .moves = {MOVE_FIRE_BLAST, MOVE_HYPER_BEAM, MOVE_AERIAL_ACE, MOVE_SAFEGUARD},
+ },
+ },
+ },
+};
+
+static const u8 gUnknown_086118B4[][7][4] =
+{
+ {
+ {1, 2, 3, 3}, {1, 1, 0, 0}, {4, 5, 0, 0}, {1, 0, 0, 0}, {3, 4, 0, 0}, {1, 0, 0, 0}, {5, 0, 0, 0}
+ },
+ {
+ {2, 3, 4, 4}, {1, 1, 0, 0}, {4, 5, 0, 0}, {1, 0, 0, 0}, {3, 4, 0, 0}, {1, 0, 0, 0}, {5, 0, 0, 0}
+ },
+ {
+ {3, 4, 5, 5}, {2, 2, 0, 0}, {5, 6, 0, 0}, {1, 0, 0, 0}, {4, 5, 0, 0}, {2, 0, 0, 0}, {6, 0, 0, 0}
+ },
+ {
+ {4, 5, 6, 6}, {2, 2, 0, 0}, {5, 6, 0, 0}, {2, 0, 0, 0}, {4, 5, 0, 0}, {2, 0, 0, 0}, {6, 0, 0, 0}
+ },
+ {
+ {5, 6, 7, 7}, {3, 3, 0, 0}, {6, 7, 0, 0}, {2, 0, 0, 0}, {5, 6, 0, 0}, {2, 0, 0, 0}, {7, 0, 0, 0}
+ },
+ {
+ {6, 7, 8, 8}, {3, 3, 0, 0}, {6, 7, 0, 0}, {2, 0, 0, 0}, {5, 6, 0, 0}, {4, 0, 0, 0}, {7, 0, 0, 0}
+ },
+ {
+ {7, 8, 9, 9}, {4, 4, 0, 0}, {7, 8, 0, 0}, {3, 0, 0, 0}, {6, 7, 0, 0}, {4, 0, 0, 0}, {8, 0, 0, 0}
+ },
+ {
+ {8, 9, 10, 10}, {4, 4, 0, 0}, {7, 8, 0, 0}, {3, 0, 0, 0},{6, 7, 0, 0}, {4, 0, 0, 0}, {8, 0, 0, 0}
+ },
+ {
+ {9, 10, 11, 11}, {5, 5, 0, 0}, {8, 9, 0, 0}, {4, 0, 0, 0}, {7, 8, 0, 0}, {8, 0, 0, 0}, {9, 0, 0, 0}
+ },
+ {
+ {10, 11, 12, 12}, {5, 5, 0, 0}, {8, 9, 0, 0}, {4, 0, 0, 0}, {7, 8, 0, 0}, {8, 0, 0, 0}, {9, 0, 0, 0}
+ },
+ {
+ {11, 12, 13, 13}, {6, 6, 0, 0}, {9, 10, 0, 0}, {5, 0, 0,0}, {8, 9, 0, 0}, {8, 0, 0, 0}, {10, 0, 0, 0}
+ },
+ {
+ {12, 13, 14, 14}, {6, 6, 0, 0}, {9, 10, 0, 0}, {6, 0, 0,0}, {8, 9, 0, 0}, {8, 0, 0, 0}, {10, 0, 0, 0}
+ },
+ {
+ {13, 14, 15, 15}, {7, 7, 0, 0}, {10, 11, 0, 0}, {7, 0, 0, 0}, {9, 10, 0, 0}, {10, 0, 0, 0}, {11, 0, 0, 0}
+ },
+ {
+ {14, 15, 15, 15}, {7, 7, 0, 0}, {10, 11, 0, 0}, {8, 0, 0, 0}, {9, 10, 0, 0}, {10, 0, 0, 0}, {11, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {8, 8, 0, 0}, {11, 12, 0, 0}, {9, 0, 0, 0}, {10, 11, 0, 0}, {10, 0, 0, 0}, {12, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {8, 8, 0, 0}, {11, 12, 0, 0}, {10, 0, 0, 0}, {10, 11, 0, 0}, {10, 0, 0, 0}, {12, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {9, 9, 0, 0}, {12, 13, 0, 0}, {11, 0, 0, 0}, {11, 12, 0, 0}, {12, 0, 0, 0}, {13, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {9, 9, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {11, 12, 0, 0}, {12, 0, 0, 0}, {13, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {10, 10, 0, 0}, {13, 14, 0, 0}, {13, 0, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {14, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {10, 10, 0, 0}, {13, 14, 0, 0}, {14, 0, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {14, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {11, 11, 0, 0}, {14, 15, 0, 0}, {15, 0, 0, 0}, {13, 14, 0, 0}, {12, 0, 0, 0}, {15, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {11, 11, 0, 0}, {14, 15, 0, 0}, {15, 0, 0, 0}, {13, 14, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {12, 12, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {14, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {12, 12, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {14, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {13, 13, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {13, 13, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {14, 14, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {14, 14, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {15, 15, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0}
+ },
+ {
+ {15, 15, 15, 15}, {15, 15, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0}
+ },
+};
+
+static const u16 gUnknown_08611BFC[][2] =
+{
+ [FRONTIER_FACILITY_TOWER] = {0x0001, 0x0002},
+ [FRONTIER_FACILITY_DOME] = {0x0004, 0x0008},
+ [FRONTIER_FACILITY_PALACE] = {0x0010, 0x0020},
+ [FRONTIER_FACILITY_ARENA] = {0x0040, 0x0080},
+ [FRONTIER_FACILITY_FACTORY] = {0x0100, 0x0200},
+ [FRONTIER_FACILITY_PIKE] = {0x0400, 0x0800},
+ [FRONTIER_FACILITY_PYRAMID] = {0x1000, 0x2000},
+};
+
+static void (* const sFrontierUtilFuncs[])(void) =
+{
+ sub_81A17A0,
+ sub_81A1830,
+ sub_81A1968,
+ sub_81A1AD4,
+ DoSoftReset_,
+ sub_81A1B28,
+ sub_81A1B38,
+ ShowFacilityResultsWindow,
+ sub_81A31FC,
+ sub_81A35EC,
+ sub_81A3B00,
+ sub_81A3B64,
+ sub_81A3D30,
+ sub_81A3D58,
+ sub_81A3DA0,
+ sub_81A3FD4,
+ sub_81A4224,
+ sub_81A4230,
+ sub_81A43A8,
+ sub_81A4410,
+ sub_81A443C,
+ sub_81A447C,
+ sub_81A457C,
+};
+
+static const struct WindowTemplate gUnknown_08611C74 =
+{
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 1,
+ .width = 0x1c,
+ .height = 0x12,
+ .paletteNum = 15,
+ .baseBlock = 1
+};
+
+static const struct WindowTemplate gUnknown_08611C7C =
+{
+ .bg = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 2,
+ .width = 0x1a,
+ .height = 15,
+ .paletteNum = 15,
+ .baseBlock = 1
+};
+
+static const struct WindowTemplate gUnknown_08611C84 =
+{
+ .bg = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 1,
+ .width = 0x1a,
+ .height = 17,
+ .paletteNum = 15,
+ .baseBlock = 1
+};
+
+// Second field - whether the character is female.
+static const u8 sFacilityToBrainEventObjGfx[][2] =
+{
+ [FRONTIER_FACILITY_TOWER] = {EVENT_OBJ_GFX_ANABEL, TRUE},
+ [FRONTIER_FACILITY_DOME] = {EVENT_OBJ_GFX_TUCKER, FALSE},
+ [FRONTIER_FACILITY_PALACE] = {EVENT_OBJ_GFX_SPENSER, FALSE},
+ [FRONTIER_FACILITY_ARENA] = {EVENT_OBJ_GFX_GRETA, TRUE},
+ [FRONTIER_FACILITY_FACTORY] = {EVENT_OBJ_GFX_NOLAND, FALSE},
+ [FRONTIER_FACILITY_PIKE] = {EVENT_OBJ_GFX_LUCY, TRUE},
+ [FRONTIER_FACILITY_PYRAMID] = {EVENT_OBJ_GFX_BRANDON, FALSE},
+};
+
+const u16 gFrontierBannedSpecies[] =
+{
+ SPECIES_MEW, SPECIES_MEWTWO, SPECIES_HO_OH, SPECIES_LUGIA, SPECIES_CELEBI,
+ SPECIES_KYOGRE, SPECIES_GROUDON, SPECIES_RAYQUAZA, SPECIES_JIRACHI, SPECIES_DEOXYS, 0xFFFF
+};
+
// code
-void sub_81A1780(void)
+void CallFrontierUtilFunc(void)
{
- gUnknown_08611C18[gSpecialVar_0x8004]();
+ sFrontierUtilFuncs[gSpecialVar_0x8004]();
}
-void sub_81A17A0(void)
+static void sub_81A17A0(void)
{
VarSet(VAR_TEMP_0, 0xFF);
switch (gSaveBlock2Ptr->frontier.field_CA8)
@@ -107,10 +721,10 @@ void sub_81A17A0(void)
}
}
-void sub_81A1830(void)
+static void sub_81A1830(void)
{
u8 facility = VarGet(VAR_FRONTIER_FACILITY);
- u8 currSymbol = sub_81A3B30(facility);
+ u8 currSymbol = GetPlayerSymbolCountForFacility(facility);
if (currSymbol == 2)
currSymbol = 1;
@@ -141,11 +755,11 @@ void sub_81A1830(void)
}
}
-void sub_81A1968(void)
+static void sub_81A1968(void)
{
s32 i;
u8 facility = VarGet(VAR_FRONTIER_FACILITY);
- u8 currSymbol = sub_81A3B30(facility);
+ u8 currSymbol = GetPlayerSymbolCountForFacility(facility);
if (currSymbol == 2)
currSymbol = 1;
@@ -176,7 +790,7 @@ void sub_81A1968(void)
}
}
-void sub_81A1AD4(void)
+static void sub_81A1AD4(void)
{
s32 i;
@@ -186,17 +800,17 @@ void sub_81A1AD4(void)
ReducePlayerPartyToThree();
}
-void sub_81A1B1C(void)
+static void DoSoftReset_(void)
{
DoSoftReset();
}
-void sub_81A1B28(void)
+static void sub_81A1B28(void)
{
gFacilityTrainers = gBattleFrontierTrainers;
}
-void sub_81A1B38(void)
+static void sub_81A1B38(void)
{
u8 i;
@@ -208,7 +822,7 @@ void sub_81A1B38(void)
}
}
-void sub_81A1B98(void)
+static void ShowFacilityResultsWindow(void)
{
if (gSpecialVar_0x8006 > 3)
gSpecialVar_0x8006 = 0;
@@ -249,7 +863,7 @@ static bool8 sub_81A1C24(u32 flags)
return FALSE;
}
-static void sub_81A1C4C(const u8 *str, s32 y)
+static void PrintAligned(const u8 *str, s32 y)
{
s32 x = GetStringCenterAlignXOffset(1, str, 0xE0);
y = (y * 8) + 1;
@@ -348,7 +962,7 @@ static void ShowTowerResultsWindow(u8 battleMode)
else
StringExpandPlaceholders(gStringVar4, gText_LinkMultiBattleRoomResults);
- sub_81A1C4C(gStringVar4, 2);
+ PrintAligned(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);
@@ -415,7 +1029,7 @@ static void ShowDomeResultsWindow(u8 battleMode)
else
StringExpandPlaceholders(gStringVar4, gText_DoubleBattleTourneyResults);
- sub_81A1C4C(gStringVar4, 0);
+ PrintAligned(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);
@@ -491,7 +1105,7 @@ static void ShowPalaceResultsWindow(u8 battleMode)
else
StringExpandPlaceholders(gStringVar4, gText_DoubleBattleHallResults);
- sub_81A1C4C(gStringVar4, 2);
+ PrintAligned(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);
@@ -543,7 +1157,7 @@ static void ShowPikeResultsWindow(void)
NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE);
FillWindowPixelBuffer(gRecordsWindowId, 0x11);
StringExpandPlaceholders(gStringVar4, gText_BattleChoiceResults);
- sub_81A1C4C(gStringVar4, 0);
+ PrintAligned(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);
@@ -606,7 +1220,7 @@ static void ShowArenaResultsWindow(void)
FillWindowPixelBuffer(gRecordsWindowId, 0x11);
PrintHyphens(10);
StringExpandPlaceholders(gStringVar4, gText_SetKOTourneyResults);
- sub_81A1C4C(gStringVar4, 2);
+ PrintAligned(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);
@@ -695,7 +1309,7 @@ static void ShowFactoryResultsWindow(u8 battleMode)
else
StringExpandPlaceholders(gStringVar4, gText_BattleSwapDoubleResults);
- sub_81A1C4C(gStringVar4, 0);
+ PrintAligned(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);
@@ -756,7 +1370,7 @@ static void ShowPyramidResultsWindow(void)
NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE);
FillWindowPixelBuffer(gRecordsWindowId, 0x11);
StringExpandPlaceholders(gStringVar4, gText_BattleQuestResults);
- sub_81A1C4C(gStringVar4, 2);
+ PrintAligned(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);
@@ -819,7 +1433,7 @@ static void ShowLinkContestResultsWindow(void)
CopyWindowToVram(gRecordsWindowId, 3);
}
-void sub_81A31FC(void)
+static void sub_81A31FC(void)
{
u8 text[32];
s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
@@ -837,7 +1451,7 @@ void sub_81A31FC(void)
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]);
+ SetTrainerId(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.field_EF1[lvlMode]);
}
if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > 1
&& sub_80EE818())
@@ -939,7 +1553,7 @@ void sub_81A31FC(void)
}
}
-void sub_81A35EC(void)
+static void sub_81A35EC(void)
{
VarGet(VAR_FRONTIER_FACILITY); // Unused return value.
gSpecialVar_Result = sub_81A3610();
@@ -957,7 +1571,7 @@ u8 sub_81A3610(void)
if (battleMode != FRONTIER_MODE_SINGLES)
return 0;
- symbolsCount = sub_81A3B30(facility);
+ symbolsCount = GetPlayerSymbolCountForFacility(facility);
switch (symbolsCount)
{
case 0:
@@ -1123,7 +1737,7 @@ void sub_81A3ACC(void)
gSaveBlock2Ptr->frontier.field_CB4[i] |= 0xFFFF;
}
-void sub_81A3B00(void)
+static void sub_81A3B00(void)
{
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
gSpecialVar_Result = TRUE;
@@ -1131,13 +1745,13 @@ void sub_81A3B00(void)
gSpecialVar_Result = FALSE;
}
-u8 sub_81A3B30(u8 facility)
+u8 GetPlayerSymbolCountForFacility(u8 facility)
{
return FlagGet(FLAG_SYS_TOWER_SILVER + facility * 2)
+ FlagGet(FLAG_SYS_TOWER_GOLD + facility * 2);
}
-void sub_81A3B64(void)
+static void sub_81A3B64(void)
{
s32 challengeNum = 0;
s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
@@ -1172,8 +1786,8 @@ void sub_81A3B64(void)
if (challengeNum != 0)
challengeNum--;
- if (challengeNum > ARRAY_COUNT(gUnknown_086118B4))
- challengeNum = ARRAY_COUNT(gUnknown_086118B4);
+ if (challengeNum >= ARRAY_COUNT(gUnknown_086118B4))
+ challengeNum = ARRAY_COUNT(gUnknown_086118B4) - 1;
points = gUnknown_086118B4[challengeNum][facility][battleMode];
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
@@ -1196,22 +1810,22 @@ void sub_81A3B64(void)
gSaveBlock2Ptr->frontier.field_EBA = points;
}
-void sub_81A3D30(void)
+static void sub_81A3D30(void)
{
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
- gSpecialVar_Result = sub_81A3B30(facility);
+ gSpecialVar_Result = GetPlayerSymbolCountForFacility(facility);
}
-void sub_81A3D58(void)
+static void sub_81A3D58(void)
{
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
- if (sub_81A3B30(facility) == 0)
+ if (GetPlayerSymbolCountForFacility(facility) == 0)
FlagSet(FLAG_SYS_TOWER_SILVER + facility * 2);
else
FlagSet(FLAG_SYS_TOWER_GOLD + facility * 2);
}
-void sub_81A3DA0(void)
+static void sub_81A3DA0(void)
{
if (gBattleTypeFlags & gSpecialVar_0x8005)
gSpecialVar_Result = TRUE;
@@ -1265,10 +1879,10 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL
if (species == SPECIES_EGG || species == SPECIES_NONE)
return;
- for (i = 0; gUnknown_08611C9A[i] != 0xFFFF && gUnknown_08611C9A[i] != species; i++)
+ for (i = 0; gFrontierBannedSpecies[i] != 0xFFFF && gFrontierBannedSpecies[i] != species; i++)
;
- if (gUnknown_08611C9A[i] != 0xFFFF)
+ if (gFrontierBannedSpecies[i] != 0xFFFF)
return;
if (lvlMode == FRONTIER_LVL_50 && monLevel > 50)
return;
@@ -1291,7 +1905,7 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL
(*count)++;
}
-void sub_81A3FD4(void)
+static void sub_81A3FD4(void)
{
u16 speciesArray[6];
u16 itemArray[6];
@@ -1350,8 +1964,8 @@ void sub_81A3FD4(void)
{
s32 i;
s32 caughtBannedMons = 0;
- s32 species = gUnknown_08611C9A[0];
- for (i = 0; species != 0xFFFF; i++, species = gUnknown_08611C9A[i])
+ s32 species = gFrontierBannedSpecies[0];
+ for (i = 0; species != 0xFFFF; i++, species = gFrontierBannedSpecies[i])
{
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
caughtBannedMons++;
@@ -1359,8 +1973,8 @@ void sub_81A3FD4(void)
gStringVar1[0] = EOS;
gSpecialVar_0x8004 = 1;
count = 0;
- for (i = 0; gUnknown_08611C9A[i] != 0xFFFF; i++)
- count = sub_81A3DD0(gUnknown_08611C9A[i], count, caughtBannedMons);
+ for (i = 0; gFrontierBannedSpecies[i] != 0xFFFF; i++)
+ count = sub_81A3DD0(gFrontierBannedSpecies[i], count, caughtBannedMons);
if (count == 0)
{
@@ -1383,12 +1997,12 @@ void sub_81A3FD4(void)
}
}
-void sub_81A4224(void)
+static void sub_81A4224(void)
{
ValidateEReaderTrainer();
}
-void sub_81A4230(void)
+static void sub_81A4230(void)
{
s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
@@ -1436,7 +2050,7 @@ void sub_81A4230(void)
}
}
-void sub_81A43A8(void)
+static void sub_81A43A8(void)
{
u8 i;
@@ -1450,13 +2064,13 @@ void sub_81A43A8(void)
}
}
-void sub_81A4410(void)
+static void sub_81A4410(void)
{
gSpecialVar_Result = MoveRecordedBattleToSaveData();
gSaveBlock2Ptr->frontier.field_CA9_b = 1;
}
-void sub_81A443C(void)
+static void sub_81A443C(void)
{
switch (gSpecialVar_0x8005)
{
@@ -1469,7 +2083,7 @@ void sub_81A443C(void)
}
}
-void sub_81A447C(void)
+static void sub_81A447C(void)
{
u8 i, j, k;
@@ -1494,9 +2108,9 @@ void sub_81A447C(void)
}
}
-void sub_81A457C(void)
+static void sub_81A457C(void)
{
- sub_81A5030(VarGet(VAR_FRONTIER_FACILITY));
+ SetFrontierBrainEventObjGfx(VarGet(VAR_FRONTIER_FACILITY));
}
// Battle Frontier Ranking Hall records.
@@ -1670,7 +2284,7 @@ void ClearnRankingHallRecords(void)
{
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.
+ CopyTrainerId(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;
}
@@ -1681,8 +2295,8 @@ void ClearnRankingHallRecords(void)
{
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.
+ CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id1, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0.
+ CopyTrainerId(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;
@@ -1711,9 +2325,7 @@ void sub_81A4C30(void)
free(monsParty);
}
-extern const u16 gFacilityToBrainTrainerId[];
-extern const u8 gUnknown_08611C8C[][2];
-
+// Frontier Brain functions.
u8 GetFrontierBrainTrainerPicIndex(void)
{
s32 facility;
@@ -1757,29 +2369,17 @@ void CopyFrontierBrainTrainerName(u8 *dst)
bool8 IsFrontierBrainFemale(void)
{
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
- return gUnknown_08611C8C[facility][1];
+ return sFacilityToBrainEventObjGfx[facility][1];
}
-void SetFrontierBrainTrainerGfxId(void)
+void SetFrontierBrainEventObjGfx_2(void)
{
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
- VarSet(VAR_OBJ_GFX_ID_0, gUnknown_08611C8C[facility][0]);
+ VarSet(VAR_OBJ_GFX_ID_0, sFacilityToBrainEventObjGfx[facility][0]);
}
#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];
-
#ifdef NONMATCHING
void CreateFrontierBrainPokemon(void)
{
@@ -1792,7 +2392,7 @@ void CreateFrontierBrainPokemon(void)
s32 symbol = GetFronterBrainSymbol();
if (facility == FRONTIER_FACILITY_DOME)
- monCountInBits = GetTrainerMonCountInBits(TrainerIdToDomeTournamentId(TRAINER_FRONTIER_BRAIN));
+ monCountInBits = GetDomeTrainerMonCountInBits(TrainerIdToDomeTournamentId(TRAINER_FRONTIER_BRAIN));
else
monCountInBits = 7;
@@ -1854,7 +2454,7 @@ void CreateFrontierBrainPokemon(void)
bl TrainerIdToDomeTournamentId\n\
lsls r0, 16\n\
lsrs r0, 16\n\
- bl GetTrainerMonCountInBits\n\
+ bl GetDomeTrainerMonCountInBits\n\
adds r4, r0, 0\n\
b _081A4E46\n\
.pool\n\
@@ -1998,7 +2598,7 @@ _081A4F32:\n\
movs r2, 0x64\n\
adds r6, r1, 0\n\
muls r6, r2\n\
- ldr r3, =gUnknown_08611578\n\
+ ldr r3, =sFrontierBrainsMons + 0xC\n\
mov r8, r3\n\
ldr r3, =gEnemyParty\n\
adds r5, r4, 0\n\
@@ -2067,21 +2667,21 @@ _081A4FD0:\n\
}
#endif
-u16 sub_81A4FF0(u8 monPartyId)
+u16 GetFrontierBrainMonSpecies(u8 monId)
{
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
s32 symbol = GetFronterBrainSymbol();
- return sFrontierBrainsMons[facility][symbol][monPartyId].species;
+ return sFrontierBrainsMons[facility][symbol][monId].species;
}
-void sub_81A5030(u8 facility)
+void SetFrontierBrainEventObjGfx(u8 facility)
{
gTrainerBattleOpponent_A = TRAINER_FRONTIER_BRAIN;
- VarSet(VAR_OBJ_GFX_ID_0, gUnknown_08611C8C[facility][0]);
+ VarSet(VAR_OBJ_GFX_ID_0, sFacilityToBrainEventObjGfx[facility][0]);
}
-u16 sub_81A5060(u8 monId, u8 moveSlotId)
+u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId)
{
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
s32 symbol = GetFronterBrainSymbol();
@@ -2089,15 +2689,15 @@ u16 sub_81A5060(u8 monId, u8 moveSlotId)
return sFrontierBrainsMons[facility][symbol][monId].moves[moveSlotId];
}
-u8 sub_81A50B0(u8 monPartyId)
+u8 GetFrontierBrainMonNature(u8 monId)
{
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
s32 symbol = GetFronterBrainSymbol();
- return sFrontierBrainsMons[facility][symbol][monPartyId].nature;
+ return sFrontierBrainsMons[facility][symbol][monId].nature;
}
-u8 sub_81A50F0(u8 monId, u8 evStatId)
+u8 GetFrontierBrainMonEvs(u8 monId, u8 evStatId)
{
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
s32 symbol = GetFronterBrainSymbol();
@@ -2108,7 +2708,7 @@ u8 sub_81A50F0(u8 monId, u8 evStatId)
s32 GetFronterBrainSymbol(void)
{
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
- s32 symbol = sub_81A3B30(facility);
+ s32 symbol = GetPlayerSymbolCountForFacility(facility);
if (symbol == 2)
{
@@ -2124,9 +2724,6 @@ s32 GetFronterBrainSymbol(void)
return symbol;
}
-extern const u8 *const *const gUnknown_08611DB0[];
-extern const u8 *const *const gUnknown_08611DB8[];
-
static void CopyFrontierBrainText(bool8 playerWonText)
{
s32 facility;
diff --git a/src/item_menu.c b/src/item_menu.c
index 37b1a961e..124fbccd2 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -48,6 +48,8 @@
#include "window.h"
#include "apprentice.h"
+extern bool8 InBattlePike(void);
+
void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)());
void CB2_Bag(void);
bool8 setup_bag_menu(void);
diff --git a/src/new_game.c b/src/new_game.c
index e6bafa7a7..d3b8c9d7b 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -69,30 +69,30 @@ static const struct ContestWinner sContestWinnerPicDummy =
};
// code
-void WriteUnalignedWord(u32 var, u8 *dataPtr)
+void SetTrainerId(u32 trainerId, u8 *dst)
{
- dataPtr[0] = var;
- dataPtr[1] = var >> 8;
- dataPtr[2] = var >> 16;
- dataPtr[3] = var >> 24;
+ dst[0] = trainerId;
+ dst[1] = trainerId >> 8;
+ dst[2] = trainerId >> 16;
+ dst[3] = trainerId >> 24;
}
-u32 ReadUnalignedWord(u8* dataPtr)
+u32 GetTrainerId(u8 *trainerId)
{
- return (dataPtr[3] << 24) | (dataPtr[2] << 16) | (dataPtr[1] << 8) | (dataPtr[0]);
+ return (trainerId[3] << 24) | (trainerId[2] << 16) | (trainerId[1] << 8) | (trainerId[0]);
}
-void CopyUnalignedWord(u8 *copyTo, u8 *copyFrom)
+void CopyTrainerId(u8 *dst, u8 *src)
{
s32 i;
for (i = 0; i < 4; i++)
- copyTo[i] = copyFrom[i];
+ dst[i] = src[i];
}
static void InitPlayerTrainerId(void)
{
u32 trainerId = (Random() << 0x10) | GetGeneratedTrainerIdLower();
- WriteUnalignedWord(trainerId, gSaveBlock2Ptr->playerTrainerId);
+ SetTrainerId(trainerId, gSaveBlock2Ptr->playerTrainerId);
}
// L=A isnt set here for some reason.
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index df77e3cfb..11f46b475 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -45,6 +45,8 @@
#include "constants/songs.h"
#include "constants/species.h"
+extern bool8 sub_81A6BF4(void);
+
static EWRAM_DATA struct UnkSummaryStruct
{
/*0x00*/ union {
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 6caea7239..337e353a1 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -1557,12 +1557,12 @@ static void sub_80E8110(struct Apprentice *dst, struct Apprentice *src)
id = ((i + gSaveBlock2Ptr->playerApprentice.field_B2_1) % 3) + 1;
if (src[id].playerName[0] != EOS)
{
- if (ReadUnalignedWord(src[id].playerId) != ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId))
+ if (GetTrainerId(src[id].playerId) != GetTrainerId(gSaveBlock2Ptr->playerTrainerId))
{
r8++;
var_2C = id;
}
- if (ReadUnalignedWord(src[id].playerId) == ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId))
+ if (GetTrainerId(src[id].playerId) == GetTrainerId(gSaveBlock2Ptr->playerTrainerId))
{
var_24++;
var_28 = id;
@@ -1602,7 +1602,7 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst)
{
for (j = 0; j < 2; j++)
{
- CopyUnalignedWord(dst->onePlayer[i][j].id, gSaveBlock2Ptr->playerTrainerId);
+ CopyTrainerId(dst->onePlayer[i][j].id, gSaveBlock2Ptr->playerTrainerId);
dst->onePlayer[i][j].language = GAME_LANGUAGE;
StringCopy(dst->onePlayer[i][j].name, gSaveBlock2Ptr->playerName);
}
@@ -1611,8 +1611,8 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst)
for (j = 0; j < 2; j++)
{
dst->twoPlayers[j].language = GAME_LANGUAGE;
- CopyUnalignedWord(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId);
- CopyUnalignedWord(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.field_EF1[j]);
+ CopyTrainerId(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId);
+ CopyTrainerId(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]);
}
@@ -1639,7 +1639,7 @@ static bool32 sub_80E841C(struct Apprentice *arg0, struct Apprentice *arg1)
for (i = 0; i < 4; i++)
{
- if (ReadUnalignedWord(arg0->playerId) == ReadUnalignedWord(arg1[i].playerId)
+ if (GetTrainerId(arg0->playerId) == GetTrainerId(arg1[i].playerId)
&& arg0->number == arg1[i].number)
{
return TRUE;
@@ -1821,13 +1821,13 @@ _080E8666:\n\
ldr r6, [sp, 0x1C]\n\
adds r0, r6, r0\n\
str r3, [sp, 0x4C]\n\
- bl ReadUnalignedWord\n\
+ bl GetTrainerId\n\
adds r4, r0, 0\n\
ldr r1, [sp, 0x50]\n\
ldr r0, [r1]\n\
add r0, r9\n\
adds r0, r7\n\
- bl ReadUnalignedWord\n\
+ bl GetTrainerId\n\
ldr r3, [sp, 0x4C]\n\
cmp r4, r0\n\
bne _080E86A8\n\
@@ -1983,7 +1983,7 @@ _080E878E:\n\
adds r5, r0, r6\n\
adds r0, r5, 0\n\
str r3, [sp, 0x4C]\n\
- bl ReadUnalignedWord\n\
+ bl GetTrainerId\n\
adds r4, r0, 0\n\
movs r6, 0x90\n\
lsls r6, 1\n\
@@ -1991,18 +1991,18 @@ _080E878E:\n\
mov r1, r9\n\
ldr r0, [r1]\n\
adds r0, r6\n\
- bl ReadUnalignedWord\n\
+ bl GetTrainerId\n\
ldr r3, [sp, 0x4C]\n\
cmp r4, r0\n\
bne _080E8808\n\
adds r0, r5, 0x4\n\
- bl ReadUnalignedWord\n\
+ bl GetTrainerId\n\
adds r4, r0, 0\n\
mov r2, r9\n\
ldr r0, [r2]\n\
adds r0, r6\n\
adds r0, 0x4\n\
- bl ReadUnalignedWord\n\
+ bl GetTrainerId\n\
ldr r3, [sp, 0x4C]\n\
cmp r4, r0\n\
bne _080E8808\n\
diff --git a/src/recorded_battle.c b/src/recorded_battle.c
index eba7039f5..50dd2efa8 100644
--- a/src/recorded_battle.c
+++ b/src/recorded_battle.c
@@ -19,14 +19,11 @@
#define BATTLER_RECORD_SIZE 664
#define ILLEGAL_BATTLE_TYPES ((BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_FIRST_BATTLE \
- | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_ROAMER | BATTLE_TYPE_EREADER_TRAINER \
- | BATTLE_TYPE_KYOGRE_GROUDON | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI \
- | BATTLE_TYPE_RECORDED | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE \
+ | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_ROAMER | BATTLE_TYPE_EREADER_TRAINER \
+ | BATTLE_TYPE_KYOGRE_GROUDON | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI \
+ | BATTLE_TYPE_RECORDED | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE \
| BATTLE_TYPE_GROUDON | BATTLE_TYPE_KYOGRE | BATTLE_TYPE_RAYQUAZA))
-extern u8 gUnknown_03001278;
-extern u8 gUnknown_03001279;
-
struct PlayerInfo
{
u32 trainerId;
@@ -101,6 +98,9 @@ EWRAM_DATA static u8 sApprenticeId = 0;
EWRAM_DATA static u16 sEasyChatSpeech[6] = {0};
EWRAM_DATA static u8 sBattleOutcome = 0;
+IWRAM_DATA static u8 sRecordMixFriendLanguage;
+IWRAM_DATA static u8 sApprenticeLanguage;
+
// this file's functions
static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2);
static bool32 CopyRecordedBattleFromSave(struct RecordedBattleSave *dst);
@@ -586,8 +586,8 @@ static void SetVariablesForRecordedBattle(struct RecordedBattleSave *src)
sRecordMixFriendClass = src->recordMixFriendClass;
sApprenticeId = src->apprenticeId;
- gUnknown_03001278 = src->recordMixFriendLanguage;
- gUnknown_03001279 = src->apprenticeLanguage;
+ sRecordMixFriendLanguage = src->recordMixFriendLanguage;
+ sApprenticeLanguage = src->apprenticeLanguage;
for (i = 0; i < 6; i++)
{
@@ -852,7 +852,7 @@ void sub_8186468(u8 *dst)
dst[i] = sRecordMixFriendName[i];
dst[7] = EOS;
- ConvertInternationalString(dst, gUnknown_03001278);
+ ConvertInternationalString(dst, sRecordMixFriendLanguage);
}
u8 GetRecordedBattleRecordMixFriendClass(void)
@@ -867,12 +867,12 @@ u8 GetRecordedBattleApprenticeId(void)
u8 GetRecordedBattleRecordMixFriendLanguage(void)
{
- return gUnknown_03001278;
+ return sRecordMixFriendLanguage;
}
u8 GetRecordedBattleApprenticeLanguage(void)
{
- return gUnknown_03001279;
+ return sApprenticeLanguage;
}
void RecordedBattle_SaveBattleOutcome(void)
diff --git a/src/scrcmd.c b/src/scrcmd.c
index d3189bec7..5a5867a96 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -49,6 +49,11 @@
#include "tv.h"
#include "window.h"
+extern u16 sub_81A89A0(u8);
+extern void sub_81A8AF8(void);
+extern void sub_81A895C(void);
+extern void sub_81A8934(u8);
+
typedef u16 (*SpecialFunc)(void);
typedef void (*NativeFunc)(void);
diff --git a/src/start_menu.c b/src/start_menu.c
index c587d3820..81c4213e7 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -35,6 +35,8 @@
#include "field_player_avatar.h"
#include "battle_pyramid_bag.h"
+extern bool8 InBattlePike(void);
+
// Menu actions
enum
{
diff --git a/src/walda_phrase.c b/src/walda_phrase.c
index 4a82be14f..ff2ee7399 100644
--- a/src/walda_phrase.c
+++ b/src/walda_phrase.c
@@ -95,7 +95,7 @@ u16 TryGetWallpaperWithWaldaPhrase(void)
{
u16 backgroundClr, foregroundClr;
u8 patternId, iconId;
- u16 trainerId = ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId);
+ u16 trainerId = GetTrainerId(gSaveBlock2Ptr->playerTrainerId);
gSpecialVar_Result = TryCalculateWallpaper(&backgroundClr, &foregroundClr, &iconId, &patternId, trainerId, GetWaldaPhrasePtr());
if (gSpecialVar_Result)