summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2020-01-12 22:42:43 -0500
committerGitHub <noreply@github.com>2020-01-12 22:42:43 -0500
commit655910a16fcb7b62cf43b83bb00b21a9c3e55e82 (patch)
treea619369a0d8b263f82d660ad7800f4b42328bb07 /include
parent635267ce32bd696fe15391449efdf07fa35cf449 (diff)
parentfa5816915d2a089549bfae3851c36336eae35d43 (diff)
Merge branch 'master' into fix-eventobj
Diffstat (limited to 'include')
-rw-r--r--include/battle_dome.h4
-rw-r--r--include/battle_tower.h18
-rw-r--r--include/constants/battle_dome.h154
-rw-r--r--include/constants/battle_frontier.h10
-rw-r--r--include/constants/battle_frontier_mons.h899
-rw-r--r--include/constants/battle_frontier_trainers.h309
-rw-r--r--include/constants/battle_tent_mons.h173
-rw-r--r--include/constants/battle_tent_trainers.h99
-rw-r--r--include/constants/flags.h14
-rw-r--r--include/constants/global.h1
-rw-r--r--include/constants/metatile_labels.h218
-rw-r--r--include/constants/opponents.h4
-rw-r--r--include/constants/pokemon.h6
-rw-r--r--include/constants/trainers.h4
-rw-r--r--include/constants/tv.h88
-rw-r--r--include/easy_chat.h4
-rw-r--r--include/event_scripts.h86
-rw-r--r--include/fldeff_misc.h2
-rw-r--r--include/global.h53
-rw-r--r--include/graphics.h29
-rw-r--r--include/hall_of_fame.h2
-rw-r--r--include/link.h2
-rw-r--r--include/pokemon_icon.h2
-rw-r--r--include/save.h21
-rw-r--r--include/secret_base.h10
-rw-r--r--include/strings.h230
-rw-r--r--include/tv.h4
27 files changed, 2161 insertions, 285 deletions
diff --git a/include/battle_dome.h b/include/battle_dome.h
index d1dfdb100..900508c4b 100644
--- a/include/battle_dome.h
+++ b/include/battle_dome.h
@@ -1,9 +1,9 @@
#ifndef GUARD_BATTLE_DOME_H
#define GUARD_BATTLE_DOME_H
-extern u32 gUnknown_0203CD70;
+extern u32 gPlayerPartyLostHP;
-int GetDomeTrainerMonCountInBits(u16 tournamentTrainerId);
+int GetDomeTrainerSelectedMons(u16 tournamentTrainerId);
int TrainerIdToDomeTournamentId(u16 trainerId);
#endif // GUARD_BATTLE_DOME_H
diff --git a/include/battle_tower.h b/include/battle_tower.h
index 2366cac12..3bf2f004b 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -8,8 +8,8 @@ struct RSBattleTowerRecord
/*0x02*/ u16 winStreak;
/*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
/*0x0C*/ u8 trainerId[TRAINER_ID_LENGTH];
- /*0x10*/ u16 greeting[6];
- /*0x1C*/ struct BattleTowerPokemon party[3];
+ /*0x10*/ u16 greeting[EASY_CHAT_BATTLE_WORDS_COUNT];
+ /*0x1C*/ struct BattleTowerPokemon party[FRONTIER_PARTY_SIZE];
/*0xA0*/ u32 checksum;
};
@@ -18,10 +18,10 @@ struct BattleFrontierTrainer
u8 facilityClass;
u8 filler1[3];
u8 trainerName[PLAYER_NAME_LENGTH + 1];
- u16 speechBefore[6];
- u16 speechWin[6];
- u16 speechLose[6];
- const u16 *monSets;
+ u16 speechBefore[EASY_CHAT_BATTLE_WORDS_COUNT];
+ u16 speechWin[EASY_CHAT_BATTLE_WORDS_COUNT];
+ u16 speechLose[EASY_CHAT_BATTLE_WORDS_COUNT];
+ const u16 *monSet;
};
struct FacilityMon
@@ -49,7 +49,7 @@ extern const struct BattleFrontierTrainer *gFacilityTrainers;
extern const struct FacilityMon *gFacilityTrainerMons;
void CallBattleTowerFunc(void);
-u16 sub_8162548(u8 challengeNum, u8 battleNum);
+u16 GetRandomScaledFrontierTrainerId(u8 challengeNum, u8 battleNum);
void SetBattleFacilityTrainerGfxId(u16 trainerId, u8 tempVarId);
void SetEReaderTrainerGfxId(void);
u8 GetBattleFacilityTrainerGfxId(u16 trainerId);
@@ -59,7 +59,7 @@ u8 GetFrontierOpponentClass(u16 trainerId);
void GetFrontierTrainerName(u8 *dst, u16 trainerId);
void FillFrontierTrainerParty(u8 monsCount);
void FillFrontierTrainersParties(u8 monsCount);
-u16 RandomizeFacilityTrainerMonSet(u16 trainerId);
+u16 GetRandomFrontierMonFromSet(u16 trainerId);
void FrontierSpeechToString(const u16 *words);
void DoSpecialTrainerBattle(void);
void CalcEmeraldBattleTowerChecksum(struct EmeraldBattleTowerRecord *record);
@@ -71,7 +71,7 @@ void GetEreaderTrainerName(u8 *dst);
void ValidateEReaderTrainer(void);
void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer);
void CopyEReaderTrainerGreeting(void);
-void sub_81653CC(void);
+void TryHideBattleTowerReporter(void);
bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct EmeraldBattleTowerRecord *dst);
bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, struct RSBattleTowerRecord *dst);
void CalcApprenticeChecksum(struct Apprentice *apprentice);
diff --git a/include/constants/battle_dome.h b/include/constants/battle_dome.h
index 48152cdbb..ea7310e55 100644
--- a/include/constants/battle_dome.h
+++ b/include/constants/battle_dome.h
@@ -1,6 +1,21 @@
#ifndef GUARD_CONSTANTS_BATTLE_DOME_H
#define GUARD_CONSTANTS_BATTLE_DOME_H
+#define DOME_ROUND1 0
+#define DOME_ROUND2 1
+#define DOME_SEMIFINAL 2
+#define DOME_FINAL 3
+#define DOME_ROUNDS_COUNT 4
+
+//#define DOME_TOURNAMENT_TRAINERS_COUNT 16 -- defined in global
+#define DOME_TOURNAMENT_MATCHES_COUNT DOME_TOURNAMENT_TRAINERS_COUNT - 1
+
+#define DOME_BATTLE_PARTY_SIZE 2
+
+#define DOME_PLAYER_WON_MATCH 1
+#define DOME_PLAYER_LOST_MATCH 2
+#define DOME_PLAYER_RETIRED 9
+
#define BATTLE_DOME_FUNC_INIT 0
#define BATTLE_DOME_FUNC_GET_DATA 1
#define BATTLE_DOME_FUNC_SET_DATA 2
@@ -9,7 +24,7 @@
#define BATTLE_DOME_FUNC_INIT_OPPONENT_PARTY 5
#define BATTLE_DOME_FUNC_SHOW_OPPONENT_INFO 6
#define BATTLE_DOME_FUNC_SHOW_TOURNEY_TREE 7
-#define BATTLE_DOME_FUNC_SHOW_PREV_RESULTS_TREE 8
+#define BATTLE_DOME_FUNC_SHOW_PREV_TOURNEY_TREE 8
#define BATTLE_DOME_FUNC_SET_OPPONENT_ID 9
#define BATTLE_DOME_FUNC_SET_OPPONENT_GFX 10
#define BATTLE_DOME_FUNC_SHOW_STATIC_TOURNEY_TREE 11
@@ -22,24 +37,127 @@
#define BATTLE_DOME_FUNC_REDUCE_PARTY 18
#define BATTLE_DOME_FUNC_COMPARE_SEEDS 19
#define BATTLE_DOME_FUNC_GET_WINNER_NAME 20
-#define BATTLE_DOME_FUNC_21 21
+#define BATTLE_DOME_FUNC_INIT_RESULTS_TREE 21
#define BATTLE_DOME_FUNC_INIT_TRAINERS 22
-#define DOME_DATA_WIN_STREAK 0
-#define DOME_DATA_WIN_STREAK_ACTIVE 1
-#define DOME_DATA_2 2
-#define DOME_DATA_3 3
-#define DOME_DATA_4 4
-#define DOME_DATA_5 5
-#define DOME_DATA_6 6
-#define DOME_DATA_7 7
-#define DOME_DATA_8 8
-#define DOME_DATA_9 9
-
-#define DOME_ROUND1 0
-#define DOME_ROUND2 1
-#define DOME_SEMIFINAL 2
-#define DOME_FINAL 3
-#define DOME_ROUNDS_COUNT 4
+#define DOME_DATA_WIN_STREAK 0
+#define DOME_DATA_WIN_STREAK_ACTIVE 1
+#define DOME_DATA_ATTEMPTED_SINGLES_50 2
+#define DOME_DATA_ATTEMPTED_SINGLES_OPEN 3
+#define DOME_DATA_HAS_WON_SINGLES_50 4
+#define DOME_DATA_HAS_WON_SINGLES_OPEN 5
+#define DOME_DATA_ATTEMPTED_CHALLENGE 6
+#define DOME_DATA_HAS_WON_CHALLENGE 7
+#define DOME_DATA_SELECTED_MONS 8
+#define DOME_DATA_PREV_TOURNEY_TYPE 9
+
+// ID for Exit/Cancel on the tourney tree
+#define TOURNEY_TREE_CLOSE_BUTTON 31
+
+// Input IDs on the tourney tree
+#define TOURNEY_TREE_SELECTED_CLOSE 0
+#define TOURNEY_TREE_NO_SELECTION 1
+#define TOURNEY_TREE_SELECTED_TRAINER 2
+#define TOURNEY_TREE_SELECTED_MATCH 3
+
+// Modes for showing the tourney tree info card
+#define INFOCARD_NEXT_OPPONENT 0
+#define INFOCARD_TRAINER 1
+#define INFOCARD_MATCH 2
+
+// Input IDs for the info cards
+#define INFOCARD_INPUT_NONE 0
+#define TRAINERCARD_INPUT_UP 1
+#define TRAINERCARD_INPUT_DOWN 2
+#define TRAINERCARD_INPUT_LEFT 3
+#define TRAINERCARD_INPUT_RIGHT 4
+#define MATCHCARD_INPUT_UP 5
+#define MATCHCARD_INPUT_DOWN 6
+#define MATCHCARD_INPUT_LEFT 7
+#define MATCHCARD_INPUT_RIGHT 8
+#define INFOCARD_INPUT_AB 9
+
+#define CARD_ALTERNATE_SLOT (1 << 0) // When set, uses an alternate slot to store the incoming card sprites
+#define MOVE_CARD_RIGHT (1 << 1)
+#define MOVE_CARD_DOWN (1 << 2)
+#define MOVE_CARD_LEFT (1 << 3)
+#define MOVE_CARD_UP (1 << 4)
+#define MOVE_CARD (MOVE_CARD_RIGHT | MOVE_CARD_DOWN | MOVE_CARD_LEFT | MOVE_CARD_UP)
+
+// Text IDs for sBattleDomeWinTexts
+#define DOME_TEXT_NO_WINNER_YET 0
+#define DOME_TEXT_WON_USING_MOVE 1
+#define DOME_TEXT_CHAMP_USING_MOVE 2
+#define DOME_TEXT_WON_ON_FORFEIT 3
+#define DOME_TEXT_CHAMP_ON_FORFEIT 4
+#define DOME_TEXT_WON_NO_MOVES 5
+#define DOME_TEXT_CHAMP_NO_MOVES 6
+
+// Offsets/start positions within sBattleDomeOpponentStatsTexts
+#define DOME_TEXT_TWO_GOOD_STATS 0
+#define DOME_TEXT_ONE_GOOD_STAT 15
+#define DOME_TEXT_TWO_BAD_STATS 21
+#define DOME_TEXT_ONE_BAD_STAT 36
+#define DOME_TEXT_WELL_BALANCED 42
+#define DOME_TEXT_HP 0
+#define DOME_TEXT_ATK 5
+#define DOME_TEXT_DEF 9
+#define DOME_TEXT_SPEED 12
+#define DOME_TEXT_SPATK 14
+
+// Move point indexes for sBattleStyleMovePoints[][], to determine Battle Dome trainers battle styles
+#define MOVE_POINTS_COMBO 0 // Moves that work well in combination (e.g. Rain Dance + Hydro Pump)
+#define MOVE_POINTS_STAT_RAISE 1
+#define MOVE_POINTS_STAT_LOWER 2
+#define MOVE_POINTS_RARE 3 // Uncommon moves. Mostly arbitrary
+#define MOVE_POINTS_HEAL 4
+#define MOVE_POINTS_RISKY 5
+#define MOVE_POINTS_STATUS 6
+#define MOVE_POINTS_DMG 7
+#define MOVE_POINTS_DEF 8 // Defensive moves, like Amnesia, Light Screen, or accuracy-lowers
+#define MOVE_POINTS_ACCURATE 9
+#define MOVE_POINTS_POWERFUL 10 // Most of the moves that are >= 100 power
+#define MOVE_POINTS_POPULAR 11 // Group seems arbitrary. All using it are TM/HMs, but its only 11/58
+#define MOVE_POINTS_LUCK 12
+#define MOVE_POINTS_STRONG 13 // Most of the moves that are >= 90 power
+#define MOVE_POINTS_LOW_PP 14
+#define MOVE_POINTS_EFFECT 15 // Moves with additional effects
+#define NUM_MOVE_POINT_TYPES 16
+
+// Battle style IDs for sBattleDomeOpponentStyleTexts
+#define DOME_BATTLE_STYLE_RISKY 0
+#define DOME_BATTLE_STYLE_STALL 1
+#define DOME_BATTLE_STYLE_VARIED 2
+#define DOME_BATTLE_STYLE_COMBO_HIGH 3
+#define DOME_BATTLE_STYLE_RARE_MOVES 4
+#define DOME_BATTLE_STYLE_RARE_MOVE 5
+#define DOME_BATTLE_STYLE_HP 6
+#define DOME_BATTLE_STYLE_STORE_POWER 7
+#define DOME_BATTLE_STYLE_ENFEEBLE_LOW 8
+#define DOME_BATTLE_STYLE_LUCK 9
+#define DOME_BATTLE_STYLE_REGAL 10
+#define DOME_BATTLE_STYLE_LOW_PP 11
+#define DOME_BATTLE_STYLE_STATUS_ATK 12
+#define DOME_BATTLE_STYLE_ENDURE 13
+#define DOME_BATTLE_STYLE_STATUS 14
+#define DOME_BATTLE_STYLE_STRAIGHTFORWARD 15
+#define DOME_BATTLE_STYLE_AGGRESSIVE 16
+#define DOME_BATTLE_STYLE_DEF 17
+#define DOME_BATTLE_STYLE_ENFEEBLE_HIGH 18
+#define DOME_BATTLE_STYLE_POPULAR_POWER 19
+#define DOME_BATTLE_STYLE_COMBO_LOW 20
+#define DOME_BATTLE_STYLE_ACCURATE 21
+#define DOME_BATTLE_STYLE_POWERFUL 22
+#define DOME_BATTLE_STYLE_ATK_OVER_DEF 23
+#define DOME_BATTLE_STYLE_DEF_OVER_ATK 24
+#define DOME_BATTLE_STYLE_POPULAR_STRONG 25
+#define DOME_BATTLE_STYLE_EFFECTS 26
+#define DOME_BATTLE_STYLE_BALANCED 27
+#define DOME_BATTLE_STYLE_UNUSED1 28
+#define DOME_BATTLE_STYLE_UNUSED2 29
+#define DOME_BATTLE_STYLE_UNUSED3 30
+#define DOME_BATTLE_STYLE_UNUSED4 31
+#define NUM_BATTLE_STYLES 32
+
#endif //GUARD_CONSTANTS_BATTLE_DOME_H
diff --git a/include/constants/battle_frontier.h b/include/constants/battle_frontier.h
index 0bf1ba02b..1a60714e8 100644
--- a/include/constants/battle_frontier.h
+++ b/include/constants/battle_frontier.h
@@ -6,9 +6,9 @@
// Battle Frontier facility ids.
#define FRONTIER_FACILITY_TOWER 0
#define FRONTIER_FACILITY_DOME 1
-#define FRONTIER_FACILITY_PALACE 2
-#define FRONTIER_FACILITY_ARENA 3
-#define FRONTIER_FACILITY_FACTORY 4
+#define FRONTIER_FACILITY_PALACE 2 // also Verdanturf Tent
+#define FRONTIER_FACILITY_ARENA 3 // also Fallarbor Tent
+#define FRONTIER_FACILITY_FACTORY 4 // also Slateport Tent
#define FRONTIER_FACILITY_PIKE 5
#define FRONTIER_FACILITY_PYRAMID 6
#define NUM_FRONTIER_FACILITIES 7
@@ -17,10 +17,6 @@
#define FACILITY_UNION_ROOM 8
#define FACILITY_MULTI_OR_EREADER 9 // Direct Corner multi battles, multi battle with Steven, and e-Reader battles
-#define TENT_VERDANTURF 2
-#define TENT_FALLARBOR 3
-#define TENT_SLATEPORT 4
-
// Battle Frontier lvl modes.
#define FRONTIER_LVL_50 0
#define FRONTIER_LVL_OPEN 1
diff --git a/include/constants/battle_frontier_mons.h b/include/constants/battle_frontier_mons.h
new file mode 100644
index 000000000..10e68980a
--- /dev/null
+++ b/include/constants/battle_frontier_mons.h
@@ -0,0 +1,899 @@
+#ifndef GUARD_CONSTANTS_BATTLE_FRONTIER_MONS_H
+#define GUARD_CONSTANTS_BATTLE_FRONTIER_MONS_H
+
+#define FRONTIER_MON_SUNKERN 0
+#define FRONTIER_MON_AZURILL 1
+#define FRONTIER_MON_CATERPIE 2
+#define FRONTIER_MON_WEEDLE 3
+#define FRONTIER_MON_WURMPLE 4
+#define FRONTIER_MON_RALTS 5
+#define FRONTIER_MON_MAGIKARP 6
+#define FRONTIER_MON_FEEBAS 7
+#define FRONTIER_MON_METAPOD 8
+#define FRONTIER_MON_KAKUNA 9
+#define FRONTIER_MON_PICHU 10
+#define FRONTIER_MON_SILCOON 11
+#define FRONTIER_MON_CASCOON 12
+#define FRONTIER_MON_IGGLYBUFF 13
+#define FRONTIER_MON_WOOPER 14
+#define FRONTIER_MON_TYROGUE 15
+#define FRONTIER_MON_SENTRET 16
+#define FRONTIER_MON_CLEFFA 17
+#define FRONTIER_MON_SEEDOT 18
+#define FRONTIER_MON_LOTAD 19
+#define FRONTIER_MON_POOCHYENA 20
+#define FRONTIER_MON_SHEDINJA 21
+#define FRONTIER_MON_MAKUHITA 22
+#define FRONTIER_MON_WHISMUR 23
+#define FRONTIER_MON_ZIGZAGOON 24
+#define FRONTIER_MON_ZUBAT 25
+#define FRONTIER_MON_TOGEPI 26
+#define FRONTIER_MON_SPINARAK 27
+#define FRONTIER_MON_MARILL 28
+#define FRONTIER_MON_HOPPIP 29
+#define FRONTIER_MON_SLUGMA 30
+#define FRONTIER_MON_SWINUB 31
+#define FRONTIER_MON_SMEARGLE 32
+#define FRONTIER_MON_PIDGEY 33
+#define FRONTIER_MON_RATTATA 34
+#define FRONTIER_MON_WYNAUT 35
+#define FRONTIER_MON_SKITTY 36
+#define FRONTIER_MON_SPEAROW 37
+#define FRONTIER_MON_HOOTHOOT 38
+#define FRONTIER_MON_DIGLETT 39
+#define FRONTIER_MON_LEDYBA 40
+#define FRONTIER_MON_NINCADA 41
+#define FRONTIER_MON_SURSKIT 42
+#define FRONTIER_MON_JIGGLYPUFF 43
+#define FRONTIER_MON_TAILLOW 44
+#define FRONTIER_MON_WINGULL 45
+#define FRONTIER_MON_NIDORAN_M 46
+#define FRONTIER_MON_NIDORAN_F 47
+#define FRONTIER_MON_KIRLIA 48
+#define FRONTIER_MON_MAREEP 49
+#define FRONTIER_MON_MEDITITE 50
+#define FRONTIER_MON_SLAKOTH 51
+#define FRONTIER_MON_PARAS 52
+#define FRONTIER_MON_EKANS 53
+#define FRONTIER_MON_DITTO 54
+#define FRONTIER_MON_BARBOACH 55
+#define FRONTIER_MON_MEOWTH 56
+#define FRONTIER_MON_PINECO 57
+#define FRONTIER_MON_TRAPINCH 58
+#define FRONTIER_MON_SPHEAL 59
+#define FRONTIER_MON_HORSEA 60
+#define FRONTIER_MON_SHROOMISH 61
+#define FRONTIER_MON_SHUPPET 62
+#define FRONTIER_MON_DUSKULL 63
+#define FRONTIER_MON_ELECTRIKE 64
+#define FRONTIER_MON_VULPIX 65
+#define FRONTIER_MON_PIKACHU 66
+#define FRONTIER_MON_SANDSHREW 67
+#define FRONTIER_MON_POLIWAG 68
+#define FRONTIER_MON_BELLSPROUT 69
+#define FRONTIER_MON_GEODUDE 70
+#define FRONTIER_MON_DRATINI 71
+#define FRONTIER_MON_SNUBBULL 72
+#define FRONTIER_MON_REMORAID 73
+#define FRONTIER_MON_LARVITAR 74
+#define FRONTIER_MON_BALTOY 75
+#define FRONTIER_MON_SNORUNT 76
+#define FRONTIER_MON_BAGON 77
+#define FRONTIER_MON_BELDUM 78
+#define FRONTIER_MON_GULPIN 79
+#define FRONTIER_MON_VENONAT 80
+#define FRONTIER_MON_MANKEY 81
+#define FRONTIER_MON_MACHOP 82
+#define FRONTIER_MON_SHELLDER 83
+#define FRONTIER_MON_SMOOCHUM 84
+#define FRONTIER_MON_NUMEL 85
+#define FRONTIER_MON_CARVANHA 86
+#define FRONTIER_MON_CORPHISH 87
+#define FRONTIER_MON_CHARMANDER 88
+#define FRONTIER_MON_CYNDAQUIL 89
+#define FRONTIER_MON_ABRA 90
+#define FRONTIER_MON_DODUO 91
+#define FRONTIER_MON_GASTLY 92
+#define FRONTIER_MON_SWABLU 93
+#define FRONTIER_MON_TREECKO 94
+#define FRONTIER_MON_TORCHIC 95
+#define FRONTIER_MON_MUDKIP 96
+#define FRONTIER_MON_SQUIRTLE 97
+#define FRONTIER_MON_TOTODILE 98
+#define FRONTIER_MON_SLOWPOKE 99
+#define FRONTIER_MON_BULBASAUR 100
+#define FRONTIER_MON_CHIKORITA 101
+#define FRONTIER_MON_ODDISH 102
+#define FRONTIER_MON_PSYDUCK 103
+#define FRONTIER_MON_CUBONE 104
+#define FRONTIER_MON_GOLDEEN 105
+#define FRONTIER_MON_NATU 106
+#define FRONTIER_MON_CLEFAIRY 107
+#define FRONTIER_MON_MAGNEMITE 108
+#define FRONTIER_MON_SEEL 109
+#define FRONTIER_MON_GRIMER 110
+#define FRONTIER_MON_KRABBY 111
+#define FRONTIER_MON_EXEGGCUTE 112
+#define FRONTIER_MON_EEVEE 113
+#define FRONTIER_MON_DROWZEE 114
+#define FRONTIER_MON_VOLTORB 115
+#define FRONTIER_MON_CHINCHOU 116
+#define FRONTIER_MON_TEDDIURSA 117
+#define FRONTIER_MON_DELIBIRD 118
+#define FRONTIER_MON_HOUNDOUR 119
+#define FRONTIER_MON_PHANPY 120
+#define FRONTIER_MON_SPOINK 121
+#define FRONTIER_MON_ARON 122
+#define FRONTIER_MON_LUVDISC 123
+#define FRONTIER_MON_TENTACOOL 124
+#define FRONTIER_MON_CACNEA 125
+#define FRONTIER_MON_UNOWN 126
+#define FRONTIER_MON_KOFFING 127
+#define FRONTIER_MON_STARYU 128
+#define FRONTIER_MON_SKIPLOOM 129
+#define FRONTIER_MON_NUZLEAF 130
+#define FRONTIER_MON_LOMBRE 131
+#define FRONTIER_MON_VIBRAVA 132
+#define FRONTIER_MON_RHYHORN 133
+#define FRONTIER_MON_CLAMPERL 134
+#define FRONTIER_MON_PIDGEOTTO 135
+#define FRONTIER_MON_GROWLITHE 136
+#define FRONTIER_MON_FARFETCHD 137
+#define FRONTIER_MON_OMANYTE 138
+#define FRONTIER_MON_KABUTO 139
+#define FRONTIER_MON_LILEEP 140
+#define FRONTIER_MON_ANORITH 141
+#define FRONTIER_MON_AIPOM 142
+#define FRONTIER_MON_ELEKID 143
+#define FRONTIER_MON_LOUDRED 144
+#define FRONTIER_MON_SPINDA 145
+#define FRONTIER_MON_NIDORINA 146
+#define FRONTIER_MON_NIDORINO 147
+#define FRONTIER_MON_FLAAFFY 148
+#define FRONTIER_MON_MAGBY 149
+#define FRONTIER_MON_NOSEPASS 150
+#define FRONTIER_MON_CORSOLA 151
+#define FRONTIER_MON_MAWILE 152
+#define FRONTIER_MON_BUTTERFREE 153
+#define FRONTIER_MON_BEEDRILL 154
+#define FRONTIER_MON_POLIWHIRL 155
+#define FRONTIER_MON_ONIX 156
+#define FRONTIER_MON_BEAUTIFLY 157
+#define FRONTIER_MON_DUSTOX 158
+#define FRONTIER_MON_LEDIAN 159
+#define FRONTIER_MON_ARIADOS 160
+#define FRONTIER_MON_YANMA 161
+
+#define FRONTIER_MON_DELCATTY_1 162
+#define FRONTIER_MON_SABLEYE_1 163
+#define FRONTIER_MON_LICKITUNG_1 164
+#define FRONTIER_MON_WEEPINBELL_1 165
+#define FRONTIER_MON_GRAVELER_1 166
+#define FRONTIER_MON_GLOOM_1 167
+#define FRONTIER_MON_PORYGON_1 168
+#define FRONTIER_MON_KADABRA_1 169
+#define FRONTIER_MON_WAILMER_1 170
+#define FRONTIER_MON_ROSELIA_1 171
+#define FRONTIER_MON_VOLBEAT_1 172
+#define FRONTIER_MON_ILLUMISE_1 173
+#define FRONTIER_MON_IVYSAUR_1 174
+#define FRONTIER_MON_CHARMELEON_1 175
+#define FRONTIER_MON_WARTORTLE_1 176
+#define FRONTIER_MON_PARASECT_1 177
+#define FRONTIER_MON_MACHOKE_1 178
+#define FRONTIER_MON_HAUNTER_1 179
+#define FRONTIER_MON_BAYLEEF_1 180
+#define FRONTIER_MON_QUILAVA_1 181
+#define FRONTIER_MON_CROCONAW_1 182
+#define FRONTIER_MON_TOGETIC_1 183
+#define FRONTIER_MON_MURKROW_1 184
+#define FRONTIER_MON_WOBBUFFET_1 185
+#define FRONTIER_MON_PLUSLE_1 186
+#define FRONTIER_MON_MINUN_1 187
+#define FRONTIER_MON_GROVYLE_1 188
+#define FRONTIER_MON_COMBUSKEN_1 189
+#define FRONTIER_MON_MARSHTOMP_1 190
+#define FRONTIER_MON_PONYTA_1 191
+#define FRONTIER_MON_AZUMARILL_1 192
+#define FRONTIER_MON_SUDOWOODO_1 193
+#define FRONTIER_MON_MAGCARGO_1 194
+#define FRONTIER_MON_PUPITAR_1 195
+#define FRONTIER_MON_SEALEO_1 196
+#define FRONTIER_MON_RATICATE_1 197
+#define FRONTIER_MON_MASQUERAIN_1 198
+#define FRONTIER_MON_FURRET_1 199
+#define FRONTIER_MON_DUNSPARCE_1 200
+#define FRONTIER_MON_DRAGONAIR_1 201
+#define FRONTIER_MON_MIGHTYENA_1 202
+#define FRONTIER_MON_LINOONE_1 203
+#define FRONTIER_MON_CASTFORM_1 204
+#define FRONTIER_MON_SHELGON_1 205
+#define FRONTIER_MON_METANG_1 206
+#define FRONTIER_MON_WIGGLYTUFF_1 207
+#define FRONTIER_MON_SUNFLORA_1 208
+#define FRONTIER_MON_CHIMECHO_1 209
+#define FRONTIER_MON_GLIGAR_1 210
+#define FRONTIER_MON_QWILFISH_1 211
+#define FRONTIER_MON_SNEASEL_1 212
+#define FRONTIER_MON_PELIPPER_1 213
+#define FRONTIER_MON_SWELLOW_1 214
+#define FRONTIER_MON_LAIRON_1 215
+#define FRONTIER_MON_TANGELA_1 216
+#define FRONTIER_MON_ARBOK_1 217
+#define FRONTIER_MON_PERSIAN_1 218
+#define FRONTIER_MON_SEADRA_1 219
+#define FRONTIER_MON_KECLEON_1 220
+#define FRONTIER_MON_VIGOROTH_1 221
+#define FRONTIER_MON_LUNATONE_1 222
+#define FRONTIER_MON_SOLROCK_1 223
+#define FRONTIER_MON_NOCTOWL_1 224
+#define FRONTIER_MON_SANDSLASH_1 225
+#define FRONTIER_MON_VENOMOTH_1 226
+#define FRONTIER_MON_CHANSEY_1 227
+#define FRONTIER_MON_SEAKING_1 228
+#define FRONTIER_MON_JUMPLUFF_1 229
+#define FRONTIER_MON_PILOSWINE_1 230
+#define FRONTIER_MON_GOLBAT_1 231
+#define FRONTIER_MON_PRIMEAPE_1 232
+#define FRONTIER_MON_HITMONLEE_1 233
+#define FRONTIER_MON_HITMONCHAN_1 234
+#define FRONTIER_MON_GIRAFARIG_1 235
+#define FRONTIER_MON_HITMONTOP_1 236
+#define FRONTIER_MON_BANETTE_1 237
+#define FRONTIER_MON_NINJASK_1 238
+#define FRONTIER_MON_SEVIPER_1 239
+#define FRONTIER_MON_ZANGOOSE_1 240
+#define FRONTIER_MON_CAMERUPT_1 241
+#define FRONTIER_MON_SHARPEDO_1 242
+#define FRONTIER_MON_TROPIUS_1 243
+#define FRONTIER_MON_MAGNETON_1 244
+#define FRONTIER_MON_MANTINE_1 245
+#define FRONTIER_MON_STANTLER_1 246
+#define FRONTIER_MON_ABSOL_1 247
+#define FRONTIER_MON_SWALOT_1 248
+#define FRONTIER_MON_CRAWDAUNT_1 249
+#define FRONTIER_MON_PIDGEOT_1 250
+#define FRONTIER_MON_GRUMPIG_1 251
+#define FRONTIER_MON_TORKOAL_1 252
+#define FRONTIER_MON_KINGLER_1 253
+#define FRONTIER_MON_CACTURNE_1 254
+#define FRONTIER_MON_BELLOSSOM_1 255
+#define FRONTIER_MON_OCTILLERY_1 256
+#define FRONTIER_MON_HUNTAIL_1 257
+#define FRONTIER_MON_GOREBYSS_1 258
+#define FRONTIER_MON_RELICANTH_1 259
+#define FRONTIER_MON_OMASTAR_1 260
+#define FRONTIER_MON_KABUTOPS_1 261
+#define FRONTIER_MON_POLIWRATH_1 262
+#define FRONTIER_MON_SCYTHER_1 263
+#define FRONTIER_MON_PINSIR_1 264
+#define FRONTIER_MON_POLITOED_1 265
+#define FRONTIER_MON_CLOYSTER_1 266
+
+#define FRONTIER_MON_DELCATTY_2 267
+#define FRONTIER_MON_SABLEYE_2 268
+#define FRONTIER_MON_LICKITUNG_2 269
+#define FRONTIER_MON_WEEPINBELL_2 270
+#define FRONTIER_MON_GRAVELER_2 271
+#define FRONTIER_MON_GLOOM_2 272
+#define FRONTIER_MON_PORYGON_2 273
+#define FRONTIER_MON_KADABRA_2 274
+#define FRONTIER_MON_WAILMER_2 275
+#define FRONTIER_MON_ROSELIA_2 276
+#define FRONTIER_MON_VOLBEAT_2 277
+#define FRONTIER_MON_ILLUMISE_2 278
+#define FRONTIER_MON_IVYSAUR_2 279
+#define FRONTIER_MON_CHARMELEON_2 280
+#define FRONTIER_MON_WARTORTLE_2 281
+#define FRONTIER_MON_PARASECT_2 282
+#define FRONTIER_MON_MACHOKE_2 283
+#define FRONTIER_MON_HAUNTER_2 284
+#define FRONTIER_MON_BAYLEEF_2 285
+#define FRONTIER_MON_QUILAVA_2 286
+#define FRONTIER_MON_CROCONAW_2 287
+#define FRONTIER_MON_TOGETIC_2 288
+#define FRONTIER_MON_MURKROW_2 289
+#define FRONTIER_MON_WOBBUFFET_2 290
+#define FRONTIER_MON_PLUSLE_2 291
+#define FRONTIER_MON_MINUN_2 292
+#define FRONTIER_MON_GROVYLE_2 293
+#define FRONTIER_MON_COMBUSKEN_2 294
+#define FRONTIER_MON_MARSHTOMP_2 295
+#define FRONTIER_MON_PONYTA_2 296
+#define FRONTIER_MON_AZUMARILL_2 297
+#define FRONTIER_MON_SUDOWOODO_2 298
+#define FRONTIER_MON_MAGCARGO_2 299
+#define FRONTIER_MON_PUPITAR_2 300
+#define FRONTIER_MON_SEALEO_2 301
+#define FRONTIER_MON_RATICATE_2 302
+#define FRONTIER_MON_MASQUERAIN_2 303
+#define FRONTIER_MON_FURRET_2 304
+#define FRONTIER_MON_DUNSPARCE_2 305
+#define FRONTIER_MON_DRAGONAIR_2 306
+#define FRONTIER_MON_MIGHTYENA_2 307
+#define FRONTIER_MON_LINOONE_2 308
+#define FRONTIER_MON_CASTFORM_2 309
+#define FRONTIER_MON_SHELGON_2 310
+#define FRONTIER_MON_METANG_2 311
+#define FRONTIER_MON_WIGGLYTUFF_2 312
+#define FRONTIER_MON_SUNFLORA_2 313
+#define FRONTIER_MON_CHIMECHO_2 314
+#define FRONTIER_MON_GLIGAR_2 315
+#define FRONTIER_MON_QWILFISH_2 316
+#define FRONTIER_MON_SNEASEL_2 317
+#define FRONTIER_MON_PELIPPER_2 318
+#define FRONTIER_MON_SWELLOW_2 319
+#define FRONTIER_MON_LAIRON_2 320
+#define FRONTIER_MON_TANGELA_2 321
+#define FRONTIER_MON_ARBOK_2 322
+#define FRONTIER_MON_PERSIAN_2 323
+#define FRONTIER_MON_SEADRA_2 324
+#define FRONTIER_MON_KECLEON_2 325
+#define FRONTIER_MON_VIGOROTH_2 326
+#define FRONTIER_MON_LUNATONE_2 327
+#define FRONTIER_MON_SOLROCK_2 328
+#define FRONTIER_MON_NOCTOWL_2 329
+#define FRONTIER_MON_SANDSLASH_2 330
+#define FRONTIER_MON_VENOMOTH_2 331
+#define FRONTIER_MON_CHANSEY_2 332
+#define FRONTIER_MON_SEAKING_2 333
+#define FRONTIER_MON_JUMPLUFF_2 334
+#define FRONTIER_MON_PILOSWINE_2 335
+#define FRONTIER_MON_GOLBAT_2 336
+#define FRONTIER_MON_PRIMEAPE_2 337
+#define FRONTIER_MON_HITMONLEE_2 338
+#define FRONTIER_MON_HITMONCHAN_2 339
+#define FRONTIER_MON_GIRAFARIG_2 340
+#define FRONTIER_MON_HITMONTOP_2 341
+#define FRONTIER_MON_BANETTE_2 342
+#define FRONTIER_MON_NINJASK_2 343
+#define FRONTIER_MON_SEVIPER_2 344
+#define FRONTIER_MON_ZANGOOSE_2 345
+#define FRONTIER_MON_CAMERUPT_2 346
+#define FRONTIER_MON_SHARPEDO_2 347
+#define FRONTIER_MON_TROPIUS_2 348
+#define FRONTIER_MON_MAGNETON_2 349
+#define FRONTIER_MON_MANTINE_2 350
+#define FRONTIER_MON_STANTLER_2 351
+#define FRONTIER_MON_ABSOL_2 352
+#define FRONTIER_MON_SWALOT_2 353
+#define FRONTIER_MON_CRAWDAUNT_2 354
+#define FRONTIER_MON_PIDGEOT_2 355
+#define FRONTIER_MON_GRUMPIG_2 356
+#define FRONTIER_MON_TORKOAL_2 357
+#define FRONTIER_MON_KINGLER_2 358
+#define FRONTIER_MON_CACTURNE_2 359
+#define FRONTIER_MON_BELLOSSOM_2 360
+#define FRONTIER_MON_OCTILLERY_2 361
+#define FRONTIER_MON_HUNTAIL_2 362
+#define FRONTIER_MON_GOREBYSS_2 363
+#define FRONTIER_MON_RELICANTH_2 364
+#define FRONTIER_MON_OMASTAR_2 365
+#define FRONTIER_MON_KABUTOPS_2 366
+#define FRONTIER_MON_POLIWRATH_2 367
+#define FRONTIER_MON_SCYTHER_2 368
+#define FRONTIER_MON_PINSIR_2 369
+#define FRONTIER_MON_POLITOED_2 370
+#define FRONTIER_MON_CLOYSTER_2 371
+
+#define FRONTIER_MON_DUGTRIO_1 372
+#define FRONTIER_MON_MEDICHAM_1 373
+#define FRONTIER_MON_MISDREAVUS_1 374
+#define FRONTIER_MON_FEAROW_1 375
+#define FRONTIER_MON_GRANBULL_1 376
+#define FRONTIER_MON_JYNX_1 377
+#define FRONTIER_MON_DUSCLOPS_1 378
+#define FRONTIER_MON_DODRIO_1 379
+#define FRONTIER_MON_MR_MIME_1 380
+#define FRONTIER_MON_LANTURN_1 381
+#define FRONTIER_MON_BRELOOM_1 382
+#define FRONTIER_MON_FORRETRESS_1 383
+#define FRONTIER_MON_WHISCASH_1 384
+#define FRONTIER_MON_XATU_1 385
+#define FRONTIER_MON_SKARMORY_1 386
+#define FRONTIER_MON_MAROWAK_1 387
+#define FRONTIER_MON_QUAGSIRE_1 388
+#define FRONTIER_MON_CLEFABLE_1 389
+#define FRONTIER_MON_HARIYAMA_1 390
+#define FRONTIER_MON_RAICHU_1 391
+#define FRONTIER_MON_DEWGONG_1 392
+#define FRONTIER_MON_MANECTRIC_1 393
+#define FRONTIER_MON_VILEPLUME_1 394
+#define FRONTIER_MON_VICTREEBEL_1 395
+#define FRONTIER_MON_ELECTRODE_1 396
+#define FRONTIER_MON_EXPLOUD_1 397
+#define FRONTIER_MON_SHIFTRY_1 398
+#define FRONTIER_MON_GLALIE_1 399
+#define FRONTIER_MON_LUDICOLO_1 400
+#define FRONTIER_MON_HYPNO_1 401
+#define FRONTIER_MON_GOLEM_1 402
+#define FRONTIER_MON_RHYDON_1 403
+#define FRONTIER_MON_ALAKAZAM_1 404
+#define FRONTIER_MON_WEEZING_1 405
+#define FRONTIER_MON_KANGASKHAN_1 406
+#define FRONTIER_MON_ELECTABUZZ_1 407
+#define FRONTIER_MON_TAUROS_1 408
+#define FRONTIER_MON_SLOWBRO_1 409
+#define FRONTIER_MON_SLOWKING_1 410
+#define FRONTIER_MON_MILTANK_1 411
+#define FRONTIER_MON_ALTARIA_1 412
+#define FRONTIER_MON_NIDOQUEEN_1 413
+#define FRONTIER_MON_NIDOKING_1 414
+#define FRONTIER_MON_MAGMAR_1 415
+#define FRONTIER_MON_CRADILY_1 416
+#define FRONTIER_MON_ARMALDO_1 417
+#define FRONTIER_MON_GOLDUCK_1 418
+#define FRONTIER_MON_RAPIDASH_1 419
+#define FRONTIER_MON_MUK_1 420
+#define FRONTIER_MON_GENGAR_1 421
+#define FRONTIER_MON_AMPHAROS_1 422
+#define FRONTIER_MON_SCIZOR_1 423
+#define FRONTIER_MON_HERACROSS_1 424
+#define FRONTIER_MON_URSARING_1 425
+#define FRONTIER_MON_HOUNDOOM_1 426
+#define FRONTIER_MON_DONPHAN_1 427
+#define FRONTIER_MON_CLAYDOL_1 428
+#define FRONTIER_MON_WAILORD_1 429
+#define FRONTIER_MON_NINETALES_1 430
+#define FRONTIER_MON_MACHAMP_1 431
+#define FRONTIER_MON_SHUCKLE_1 432
+#define FRONTIER_MON_STEELIX_1 433
+#define FRONTIER_MON_TENTACRUEL_1 434
+#define FRONTIER_MON_AERODACTYL_1 435
+#define FRONTIER_MON_PORYGON2_1 436
+#define FRONTIER_MON_GARDEVOIR_1 437
+#define FRONTIER_MON_EXEGGUTOR_1 438
+#define FRONTIER_MON_STARMIE_1 439
+#define FRONTIER_MON_FLYGON_1 440
+#define FRONTIER_MON_VENUSAUR_1 441
+#define FRONTIER_MON_VAPOREON_1 442
+#define FRONTIER_MON_JOLTEON_1 443
+#define FRONTIER_MON_FLAREON_1 444
+#define FRONTIER_MON_MEGANIUM_1 445
+#define FRONTIER_MON_ESPEON_1 446
+#define FRONTIER_MON_UMBREON_1 447
+#define FRONTIER_MON_BLASTOISE_1 448
+#define FRONTIER_MON_FERALIGATR_1 449
+#define FRONTIER_MON_AGGRON_1 450
+#define FRONTIER_MON_BLAZIKEN_1 451
+#define FRONTIER_MON_WALREIN_1 452
+#define FRONTIER_MON_SCEPTILE_1 453
+#define FRONTIER_MON_CHARIZARD_1 454
+#define FRONTIER_MON_TYPHLOSION_1 455
+#define FRONTIER_MON_LAPRAS_1 456
+#define FRONTIER_MON_CROBAT_1 457
+#define FRONTIER_MON_SWAMPERT_1 458
+#define FRONTIER_MON_GYARADOS_1 459
+#define FRONTIER_MON_SNORLAX_1 460
+#define FRONTIER_MON_KINGDRA_1 461
+#define FRONTIER_MON_BLISSEY_1 462
+#define FRONTIER_MON_MILOTIC_1 463
+#define FRONTIER_MON_ARCANINE_1 464
+#define FRONTIER_MON_SALAMENCE_1 465
+#define FRONTIER_MON_METAGROSS_1 466
+#define FRONTIER_MON_SLAKING_1 467
+
+#define FRONTIER_MON_DUGTRIO_2 468
+#define FRONTIER_MON_MEDICHAM_2 469
+#define FRONTIER_MON_MAROWAK_2 470
+#define FRONTIER_MON_QUAGSIRE_2 471
+#define FRONTIER_MON_MISDREAVUS_2 472
+#define FRONTIER_MON_FEAROW_2 473
+#define FRONTIER_MON_GRANBULL_2 474
+#define FRONTIER_MON_JYNX_2 475
+#define FRONTIER_MON_DUSCLOPS_2 476
+#define FRONTIER_MON_DODRIO_2 477
+#define FRONTIER_MON_MR_MIME_2 478
+#define FRONTIER_MON_LANTURN_2 479
+#define FRONTIER_MON_BRELOOM_2 480
+#define FRONTIER_MON_FORRETRESS_2 481
+#define FRONTIER_MON_SKARMORY_2 482
+#define FRONTIER_MON_WHISCASH_2 483
+#define FRONTIER_MON_XATU_2 484
+#define FRONTIER_MON_CLEFABLE_2 485
+#define FRONTIER_MON_HARIYAMA_2 486
+#define FRONTIER_MON_RAICHU_2 487
+#define FRONTIER_MON_DEWGONG_2 488
+#define FRONTIER_MON_MANECTRIC_2 489
+#define FRONTIER_MON_VILEPLUME_2 490
+#define FRONTIER_MON_VICTREEBEL_2 491
+#define FRONTIER_MON_ELECTRODE_2 492
+#define FRONTIER_MON_EXPLOUD_2 493
+#define FRONTIER_MON_SHIFTRY_2 494
+#define FRONTIER_MON_GLALIE_2 495
+#define FRONTIER_MON_LUDICOLO_2 496
+#define FRONTIER_MON_HYPNO_2 497
+#define FRONTIER_MON_GOLEM_2 498
+#define FRONTIER_MON_RHYDON_2 499
+#define FRONTIER_MON_ALAKAZAM_2 500
+#define FRONTIER_MON_WEEZING_2 501
+#define FRONTIER_MON_KANGASKHAN_2 502
+#define FRONTIER_MON_ELECTABUZZ_2 503
+#define FRONTIER_MON_TAUROS_2 504
+#define FRONTIER_MON_SLOWBRO_2 505
+#define FRONTIER_MON_SLOWKING_2 506
+#define FRONTIER_MON_MILTANK_2 507
+#define FRONTIER_MON_ALTARIA_2 508
+#define FRONTIER_MON_NIDOQUEEN_2 509
+#define FRONTIER_MON_NIDOKING_2 510
+#define FRONTIER_MON_MAGMAR_2 511
+#define FRONTIER_MON_CRADILY_2 512
+#define FRONTIER_MON_ARMALDO_2 513
+#define FRONTIER_MON_GOLDUCK_2 514
+#define FRONTIER_MON_RAPIDASH_2 515
+#define FRONTIER_MON_MUK_2 516
+#define FRONTIER_MON_GENGAR_2 517
+#define FRONTIER_MON_AMPHAROS_2 518
+#define FRONTIER_MON_SCIZOR_2 519
+#define FRONTIER_MON_HERACROSS_2 520
+#define FRONTIER_MON_URSARING_2 521
+#define FRONTIER_MON_HOUNDOOM_2 522
+#define FRONTIER_MON_DONPHAN_2 523
+#define FRONTIER_MON_CLAYDOL_2 524
+#define FRONTIER_MON_WAILORD_2 525
+#define FRONTIER_MON_NINETALES_2 526
+#define FRONTIER_MON_MACHAMP_2 527
+#define FRONTIER_MON_SHUCKLE_2 528
+#define FRONTIER_MON_STEELIX_2 529
+#define FRONTIER_MON_TENTACRUEL_2 530
+#define FRONTIER_MON_AERODACTYL_2 531
+#define FRONTIER_MON_PORYGON2_2 532
+#define FRONTIER_MON_GARDEVOIR_2 533
+#define FRONTIER_MON_EXEGGUTOR_2 534
+#define FRONTIER_MON_STARMIE_2 535
+#define FRONTIER_MON_FLYGON_2 536
+#define FRONTIER_MON_VENUSAUR_2 537
+#define FRONTIER_MON_VAPOREON_2 538
+#define FRONTIER_MON_JOLTEON_2 539
+#define FRONTIER_MON_FLAREON_2 540
+#define FRONTIER_MON_MEGANIUM_2 541
+#define FRONTIER_MON_ESPEON_2 542
+#define FRONTIER_MON_UMBREON_2 543
+#define FRONTIER_MON_BLASTOISE_2 544
+#define FRONTIER_MON_FERALIGATR_2 545
+#define FRONTIER_MON_AGGRON_2 546
+#define FRONTIER_MON_BLAZIKEN_2 547
+#define FRONTIER_MON_WALREIN_2 548
+#define FRONTIER_MON_SCEPTILE_2 549
+#define FRONTIER_MON_CHARIZARD_2 550
+#define FRONTIER_MON_TYPHLOSION_2 551
+#define FRONTIER_MON_LAPRAS_2 552
+#define FRONTIER_MON_CROBAT_2 553
+#define FRONTIER_MON_SWAMPERT_2 554
+#define FRONTIER_MON_GYARADOS_2 555
+#define FRONTIER_MON_SNORLAX_2 556
+#define FRONTIER_MON_KINGDRA_2 557
+#define FRONTIER_MON_BLISSEY_2 558
+#define FRONTIER_MON_MILOTIC_2 559
+#define FRONTIER_MON_ARCANINE_2 560
+#define FRONTIER_MON_SALAMENCE_2 561
+#define FRONTIER_MON_METAGROSS_2 562
+#define FRONTIER_MON_SLAKING_2 563
+
+#define FRONTIER_MON_DUGTRIO_3 564
+#define FRONTIER_MON_MEDICHAM_3 565
+#define FRONTIER_MON_MISDREAVUS_3 566
+#define FRONTIER_MON_FEAROW_3 567
+#define FRONTIER_MON_GRANBULL_3 568
+#define FRONTIER_MON_JYNX_3 569
+#define FRONTIER_MON_DUSCLOPS_3 570
+#define FRONTIER_MON_DODRIO_3 571
+#define FRONTIER_MON_MR_MIME_3 572
+#define FRONTIER_MON_LANTURN_3 573
+#define FRONTIER_MON_BRELOOM_3 574
+#define FRONTIER_MON_FORRETRESS_3 575
+#define FRONTIER_MON_WHISCASH_3 576
+#define FRONTIER_MON_XATU_3 577
+#define FRONTIER_MON_SKARMORY_3 578
+#define FRONTIER_MON_MAROWAK_3 579
+#define FRONTIER_MON_QUAGSIRE_3 580
+#define FRONTIER_MON_CLEFABLE_3 581
+#define FRONTIER_MON_HARIYAMA_3 582
+#define FRONTIER_MON_RAICHU_3 583
+#define FRONTIER_MON_DEWGONG_3 584
+#define FRONTIER_MON_MANECTRIC_3 585
+#define FRONTIER_MON_VILEPLUME_3 586
+#define FRONTIER_MON_VICTREEBEL_3 587
+#define FRONTIER_MON_ELECTRODE_3 588
+#define FRONTIER_MON_EXPLOUD_3 589
+#define FRONTIER_MON_SHIFTRY_3 590
+#define FRONTIER_MON_GLALIE_3 591
+#define FRONTIER_MON_LUDICOLO_3 592
+#define FRONTIER_MON_HYPNO_3 593
+#define FRONTIER_MON_GOLEM_3 594
+#define FRONTIER_MON_RHYDON_3 595
+#define FRONTIER_MON_ALAKAZAM_3 596
+#define FRONTIER_MON_WEEZING_3 597
+#define FRONTIER_MON_KANGASKHAN_3 598
+#define FRONTIER_MON_ELECTABUZZ_3 599
+#define FRONTIER_MON_TAUROS_3 600
+#define FRONTIER_MON_SLOWBRO_3 601
+#define FRONTIER_MON_SLOWKING_3 602
+#define FRONTIER_MON_MILTANK_3 603
+#define FRONTIER_MON_ALTARIA_3 604
+#define FRONTIER_MON_NIDOQUEEN_3 605
+#define FRONTIER_MON_NIDOKING_3 606
+#define FRONTIER_MON_MAGMAR_3 607
+#define FRONTIER_MON_CRADILY_3 608
+#define FRONTIER_MON_ARMALDO_3 609
+#define FRONTIER_MON_GOLDUCK_3 610
+#define FRONTIER_MON_RAPIDASH_3 611
+#define FRONTIER_MON_MUK_3 612
+#define FRONTIER_MON_GENGAR_3 613
+#define FRONTIER_MON_AMPHAROS_3 614
+#define FRONTIER_MON_SCIZOR_3 615
+#define FRONTIER_MON_HERACROSS_3 616
+#define FRONTIER_MON_URSARING_3 617
+#define FRONTIER_MON_HOUNDOOM_3 618
+#define FRONTIER_MON_DONPHAN_3 619
+#define FRONTIER_MON_CLAYDOL_3 620
+#define FRONTIER_MON_WAILORD_3 621
+#define FRONTIER_MON_NINETALES_3 622
+#define FRONTIER_MON_MACHAMP_3 623
+#define FRONTIER_MON_SHUCKLE_3 624
+#define FRONTIER_MON_STEELIX_3 625
+#define FRONTIER_MON_TENTACRUEL_3 626
+#define FRONTIER_MON_AERODACTYL_3 627
+#define FRONTIER_MON_PORYGON2_3 628
+#define FRONTIER_MON_GARDEVOIR_3 629
+#define FRONTIER_MON_EXEGGUTOR_3 630
+#define FRONTIER_MON_STARMIE_3 631
+#define FRONTIER_MON_FLYGON_3 632
+#define FRONTIER_MON_VENUSAUR_3 633
+#define FRONTIER_MON_VAPOREON_3 634
+#define FRONTIER_MON_JOLTEON_3 635
+#define FRONTIER_MON_FLAREON_3 636
+#define FRONTIER_MON_MEGANIUM_3 637
+#define FRONTIER_MON_ESPEON_3 638
+#define FRONTIER_MON_UMBREON_3 639
+#define FRONTIER_MON_BLASTOISE_3 640
+#define FRONTIER_MON_FERALIGATR_3 641
+#define FRONTIER_MON_AGGRON_3 642
+#define FRONTIER_MON_BLAZIKEN_3 643
+#define FRONTIER_MON_WALREIN_3 644
+#define FRONTIER_MON_SCEPTILE_3 645
+#define FRONTIER_MON_CHARIZARD_3 646
+#define FRONTIER_MON_TYPHLOSION_3 647
+#define FRONTIER_MON_LAPRAS_3 648
+#define FRONTIER_MON_CROBAT_3 649
+#define FRONTIER_MON_SWAMPERT_3 650
+#define FRONTIER_MON_GYARADOS_3 651
+#define FRONTIER_MON_SNORLAX_3 652
+#define FRONTIER_MON_KINGDRA_3 653
+#define FRONTIER_MON_BLISSEY_3 654
+#define FRONTIER_MON_MILOTIC_3 655
+#define FRONTIER_MON_ARCANINE_3 656
+#define FRONTIER_MON_SALAMENCE_3 657
+#define FRONTIER_MON_METAGROSS_3 658
+#define FRONTIER_MON_SLAKING_3 659
+
+#define FRONTIER_MON_DUGTRIO_4 660
+#define FRONTIER_MON_MEDICHAM_4 661
+#define FRONTIER_MON_MISDREAVUS_4 662
+#define FRONTIER_MON_FEAROW_4 663
+#define FRONTIER_MON_GRANBULL_4 664
+#define FRONTIER_MON_JYNX_4 665
+#define FRONTIER_MON_DUSCLOPS_4 666
+#define FRONTIER_MON_DODRIO_4 667
+#define FRONTIER_MON_MR_MIME_4 668
+#define FRONTIER_MON_LANTURN_4 669
+#define FRONTIER_MON_BRELOOM_4 670
+#define FRONTIER_MON_FORRETRESS_4 671
+#define FRONTIER_MON_WHISCASH_4 672
+#define FRONTIER_MON_XATU_4 673
+#define FRONTIER_MON_SKARMORY_4 674
+#define FRONTIER_MON_MAROWAK_4 675
+#define FRONTIER_MON_QUAGSIRE_4 676
+#define FRONTIER_MON_CLEFABLE_4 677
+#define FRONTIER_MON_HARIYAMA_4 678
+#define FRONTIER_MON_RAICHU_4 679
+#define FRONTIER_MON_DEWGONG_4 680
+#define FRONTIER_MON_MANECTRIC_4 681
+#define FRONTIER_MON_VILEPLUME_4 682
+#define FRONTIER_MON_VICTREEBEL_4 683
+#define FRONTIER_MON_ELECTRODE_4 684
+#define FRONTIER_MON_EXPLOUD_4 685
+#define FRONTIER_MON_SHIFTRY_4 686
+#define FRONTIER_MON_GLALIE_4 687
+#define FRONTIER_MON_LUDICOLO_4 688
+#define FRONTIER_MON_HYPNO_4 689
+#define FRONTIER_MON_GOLEM_4 690
+#define FRONTIER_MON_RHYDON_4 691
+#define FRONTIER_MON_ALAKAZAM_4 692
+#define FRONTIER_MON_WEEZING_4 693
+#define FRONTIER_MON_KANGASKHAN_4 694
+#define FRONTIER_MON_ELECTABUZZ_4 695
+#define FRONTIER_MON_TAUROS_4 696
+#define FRONTIER_MON_SLOWBRO_4 697
+#define FRONTIER_MON_SLOWKING_4 698
+#define FRONTIER_MON_MILTANK_4 699
+#define FRONTIER_MON_ALTARIA_4 700
+#define FRONTIER_MON_NIDOQUEEN_4 701
+#define FRONTIER_MON_NIDOKING_4 702
+#define FRONTIER_MON_MAGMAR_4 703
+#define FRONTIER_MON_CRADILY_4 704
+#define FRONTIER_MON_ARMALDO_4 705
+#define FRONTIER_MON_GOLDUCK_4 706
+#define FRONTIER_MON_RAPIDASH_4 707
+#define FRONTIER_MON_MUK_4 708
+#define FRONTIER_MON_GENGAR_4 709
+#define FRONTIER_MON_AMPHAROS_4 710
+#define FRONTIER_MON_SCIZOR_4 711
+#define FRONTIER_MON_HERACROSS_4 712
+#define FRONTIER_MON_URSARING_4 713
+#define FRONTIER_MON_HOUNDOOM_4 714
+#define FRONTIER_MON_DONPHAN_4 715
+#define FRONTIER_MON_CLAYDOL_4 716
+#define FRONTIER_MON_WAILORD_4 717
+#define FRONTIER_MON_NINETALES_4 718
+#define FRONTIER_MON_MACHAMP_4 719
+#define FRONTIER_MON_SHUCKLE_4 720
+#define FRONTIER_MON_STEELIX_4 721
+#define FRONTIER_MON_TENTACRUEL_4 722
+#define FRONTIER_MON_AERODACTYL_4 723
+#define FRONTIER_MON_PORYGON2_4 724
+#define FRONTIER_MON_GARDEVOIR_4 725
+#define FRONTIER_MON_EXEGGUTOR_4 726
+#define FRONTIER_MON_STARMIE_4 727
+#define FRONTIER_MON_FLYGON_4 728
+#define FRONTIER_MON_VENUSAUR_4 729
+#define FRONTIER_MON_VAPOREON_4 730
+#define FRONTIER_MON_JOLTEON_4 731
+#define FRONTIER_MON_FLAREON_4 732
+#define FRONTIER_MON_MEGANIUM_4 733
+#define FRONTIER_MON_ESPEON_4 734
+#define FRONTIER_MON_UMBREON_4 735
+#define FRONTIER_MON_BLASTOISE_4 736
+#define FRONTIER_MON_FERALIGATR_4 737
+#define FRONTIER_MON_AGGRON_4 738
+#define FRONTIER_MON_BLAZIKEN_4 739
+#define FRONTIER_MON_WALREIN_4 740
+#define FRONTIER_MON_SCEPTILE_4 741
+#define FRONTIER_MON_CHARIZARD_4 742
+#define FRONTIER_MON_TYPHLOSION_4 743
+#define FRONTIER_MON_LAPRAS_4 744
+#define FRONTIER_MON_CROBAT_4 745
+#define FRONTIER_MON_SWAMPERT_4 746
+#define FRONTIER_MON_GYARADOS_4 747
+#define FRONTIER_MON_SNORLAX_4 748
+#define FRONTIER_MON_KINGDRA_4 749
+#define FRONTIER_MON_BLISSEY_4 750
+#define FRONTIER_MON_MILOTIC_4 751
+#define FRONTIER_MON_ARCANINE_4 752
+#define FRONTIER_MON_SALAMENCE_4 753
+#define FRONTIER_MON_METAGROSS_4 754
+#define FRONTIER_MON_SLAKING_4 755
+
+#define FRONTIER_MON_ARTICUNO_1 756
+#define FRONTIER_MON_ZAPDOS_1 757
+#define FRONTIER_MON_MOLTRES_1 758
+#define FRONTIER_MON_RAIKOU_1 759
+#define FRONTIER_MON_ENTEI_1 760
+#define FRONTIER_MON_SUICUNE_1 761
+#define FRONTIER_MON_REGIROCK_1 762
+#define FRONTIER_MON_REGICE_1 763
+#define FRONTIER_MON_REGISTEEL_1 764
+#define FRONTIER_MON_LATIAS_1 765
+#define FRONTIER_MON_LATIOS_1 766
+#define FRONTIER_MON_ARTICUNO_2 767
+#define FRONTIER_MON_ZAPDOS_2 768
+#define FRONTIER_MON_MOLTRES_2 769
+#define FRONTIER_MON_RAIKOU_2 770
+#define FRONTIER_MON_ENTEI_2 771
+#define FRONTIER_MON_SUICUNE_2 772
+#define FRONTIER_MON_REGIROCK_2 773
+#define FRONTIER_MON_REGICE_2 774
+#define FRONTIER_MON_REGISTEEL_2 775
+#define FRONTIER_MON_LATIAS_2 776
+#define FRONTIER_MON_LATIOS_2 777
+#define FRONTIER_MON_ARTICUNO_3 778
+#define FRONTIER_MON_ZAPDOS_3 779
+#define FRONTIER_MON_MOLTRES_3 780
+#define FRONTIER_MON_RAIKOU_3 781
+#define FRONTIER_MON_ENTEI_3 782
+#define FRONTIER_MON_SUICUNE_3 783
+#define FRONTIER_MON_REGIROCK_3 784
+#define FRONTIER_MON_REGICE_3 785
+#define FRONTIER_MON_REGISTEEL_3 786
+#define FRONTIER_MON_LATIAS_3 787
+#define FRONTIER_MON_LATIOS_3 788
+#define FRONTIER_MON_ARTICUNO_4 789
+#define FRONTIER_MON_ZAPDOS_4 790
+#define FRONTIER_MON_MOLTRES_4 791
+#define FRONTIER_MON_RAIKOU_4 792
+#define FRONTIER_MON_ENTEI_4 793
+#define FRONTIER_MON_SUICUNE_4 794
+#define FRONTIER_MON_REGIROCK_4 795
+#define FRONTIER_MON_REGICE_4 796
+#define FRONTIER_MON_REGISTEEL_4 797
+#define FRONTIER_MON_LATIAS_4 798
+#define FRONTIER_MON_LATIOS_4 799
+#define FRONTIER_MON_GENGAR_5 800
+#define FRONTIER_MON_GENGAR_6 801
+#define FRONTIER_MON_GENGAR_7 802
+#define FRONTIER_MON_GENGAR_8 803
+#define FRONTIER_MON_URSARING_5 804
+#define FRONTIER_MON_URSARING_6 805
+#define FRONTIER_MON_URSARING_7 806
+#define FRONTIER_MON_URSARING_8 807
+#define FRONTIER_MON_MACHAMP_5 808
+#define FRONTIER_MON_MACHAMP_6 809
+#define FRONTIER_MON_MACHAMP_7 810
+#define FRONTIER_MON_MACHAMP_8 811
+#define FRONTIER_MON_GARDEVOIR_5 812
+#define FRONTIER_MON_GARDEVOIR_6 813
+#define FRONTIER_MON_GARDEVOIR_7 814
+#define FRONTIER_MON_GARDEVOIR_8 815
+#define FRONTIER_MON_STARMIE_5 816
+#define FRONTIER_MON_STARMIE_6 817
+#define FRONTIER_MON_STARMIE_7 818
+#define FRONTIER_MON_STARMIE_8 819
+#define FRONTIER_MON_LAPRAS_5 820
+#define FRONTIER_MON_LAPRAS_6 821
+#define FRONTIER_MON_LAPRAS_7 822
+#define FRONTIER_MON_LAPRAS_8 823
+#define FRONTIER_MON_SNORLAX_5 824
+#define FRONTIER_MON_SNORLAX_6 825
+#define FRONTIER_MON_SNORLAX_7 826
+#define FRONTIER_MON_SNORLAX_8 827
+#define FRONTIER_MON_SALAMENCE_5 828
+#define FRONTIER_MON_SALAMENCE_6 829
+#define FRONTIER_MON_SALAMENCE_7 830
+#define FRONTIER_MON_SALAMENCE_8 831
+#define FRONTIER_MON_METAGROSS_5 832
+#define FRONTIER_MON_METAGROSS_6 833
+#define FRONTIER_MON_METAGROSS_7 834
+#define FRONTIER_MON_METAGROSS_8 835
+#define FRONTIER_MON_REGIROCK_5 836
+#define FRONTIER_MON_REGIROCK_6 837
+#define FRONTIER_MON_REGICE_5 838
+#define FRONTIER_MON_REGICE_6 839
+#define FRONTIER_MON_REGISTEEL_5 840
+#define FRONTIER_MON_REGISTEEL_6 841
+#define FRONTIER_MON_LATIAS_5 842
+#define FRONTIER_MON_LATIAS_6 843
+#define FRONTIER_MON_LATIAS_7 844
+#define FRONTIER_MON_LATIAS_8 845
+#define FRONTIER_MON_LATIOS_5 846
+#define FRONTIER_MON_LATIOS_6 847
+#define FRONTIER_MON_LATIOS_7 848
+#define FRONTIER_MON_LATIOS_8 849
+
+#define FRONTIER_MONS_HIGH_TIER 849 // Mons above this point can only appear > level 50
+
+#define FRONTIER_MON_DRAGONITE_1 850
+#define FRONTIER_MON_DRAGONITE_2 851
+#define FRONTIER_MON_DRAGONITE_3 852
+#define FRONTIER_MON_DRAGONITE_4 853
+#define FRONTIER_MON_DRAGONITE_5 854
+#define FRONTIER_MON_DRAGONITE_6 855
+#define FRONTIER_MON_DRAGONITE_7 856
+#define FRONTIER_MON_DRAGONITE_8 857
+#define FRONTIER_MON_DRAGONITE_9 858
+#define FRONTIER_MON_DRAGONITE_10 859
+#define FRONTIER_MON_TYRANITAR_1 860
+#define FRONTIER_MON_TYRANITAR_2 861
+#define FRONTIER_MON_TYRANITAR_3 862
+#define FRONTIER_MON_TYRANITAR_4 863
+#define FRONTIER_MON_TYRANITAR_5 864
+#define FRONTIER_MON_TYRANITAR_6 865
+#define FRONTIER_MON_TYRANITAR_7 866
+#define FRONTIER_MON_TYRANITAR_8 867
+#define FRONTIER_MON_TYRANITAR_9 868
+#define FRONTIER_MON_TYRANITAR_10 869
+#define FRONTIER_MON_ARTICUNO_5 870
+#define FRONTIER_MON_ARTICUNO_6 871
+#define FRONTIER_MON_ZAPDOS_5 872
+#define FRONTIER_MON_ZAPDOS_6 873
+#define FRONTIER_MON_MOLTRES_5 874
+#define FRONTIER_MON_MOLTRES_6 875
+#define FRONTIER_MON_RAIKOU_5 876
+#define FRONTIER_MON_RAIKOU_6 877
+#define FRONTIER_MON_ENTEI_5 878
+#define FRONTIER_MON_ENTEI_6 879
+#define FRONTIER_MON_SUICUNE_5 880
+#define FRONTIER_MON_SUICUNE_6 881
+
+#define NUM_FRONTIER_MONS 882
+
+#endif //GUARD_CONSTANTS_BATTLE_FRONTIER_MONS_H
diff --git a/include/constants/battle_frontier_trainers.h b/include/constants/battle_frontier_trainers.h
new file mode 100644
index 000000000..2914b153f
--- /dev/null
+++ b/include/constants/battle_frontier_trainers.h
@@ -0,0 +1,309 @@
+#ifndef GUARD_CONSTANTS_BATTLE_FRONTIER_TRAINERS_H
+#define GUARD_CONSTANTS_BATTLE_FRONTIER_TRAINERS_H
+
+#define FRONTIER_TRAINER_BRADY 0
+#define FRONTIER_TRAINER_CONNER 1
+#define FRONTIER_TRAINER_BRADLEY 2
+#define FRONTIER_TRAINER_CYBIL 3
+#define FRONTIER_TRAINER_RODETTE 4
+#define FRONTIER_TRAINER_PEGGY 5
+#define FRONTIER_TRAINER_KEITH 6
+#define FRONTIER_TRAINER_GRAYSON 7
+#define FRONTIER_TRAINER_GLENN 8
+#define FRONTIER_TRAINER_LILIANA 9
+#define FRONTIER_TRAINER_ELISE 10
+#define FRONTIER_TRAINER_ZOEY 11
+#define FRONTIER_TRAINER_MANUEL 12
+#define FRONTIER_TRAINER_RUSS 13
+#define FRONTIER_TRAINER_DUSTIN 14
+#define FRONTIER_TRAINER_TINA 15
+#define FRONTIER_TRAINER_GILLIAN1 16
+#define FRONTIER_TRAINER_ZOE 17
+#define FRONTIER_TRAINER_CHEN 18
+#define FRONTIER_TRAINER_AL 19
+#define FRONTIER_TRAINER_MITCH 20
+#define FRONTIER_TRAINER_ANNE 21
+#define FRONTIER_TRAINER_ALIZE 22
+#define FRONTIER_TRAINER_LAUREN 23
+#define FRONTIER_TRAINER_KIPP 24
+#define FRONTIER_TRAINER_JASON 25
+#define FRONTIER_TRAINER_JOHN 26
+#define FRONTIER_TRAINER_ANN 27
+#define FRONTIER_TRAINER_EILEEN 28
+#define FRONTIER_TRAINER_CARLIE 29
+#define FRONTIER_TRAINER_GORDON 30
+#define FRONTIER_TRAINER_AYDEN 31
+#define FRONTIER_TRAINER_MARCO 32
+#define FRONTIER_TRAINER_CIERRA 33
+#define FRONTIER_TRAINER_MARCY 34
+#define FRONTIER_TRAINER_KATHY 35
+#define FRONTIER_TRAINER_PEYTON 36
+#define FRONTIER_TRAINER_JULIAN 37
+#define FRONTIER_TRAINER_QUINN 38
+#define FRONTIER_TRAINER_HAYLEE 39
+#define FRONTIER_TRAINER_AMANDA 40
+#define FRONTIER_TRAINER_STACY 41
+#define FRONTIER_TRAINER_RAFAEL 42
+#define FRONTIER_TRAINER_OLIVER 43
+#define FRONTIER_TRAINER_PAYTON 44
+#define FRONTIER_TRAINER_PAMELA 45
+#define FRONTIER_TRAINER_ELIZA 46
+#define FRONTIER_TRAINER_MARISA 47
+#define FRONTIER_TRAINER_LEWIS 48
+#define FRONTIER_TRAINER_YOSHI 49
+#define FRONTIER_TRAINER_DESTIN 50
+#define FRONTIER_TRAINER_KEON 51
+#define FRONTIER_TRAINER_STUART 52
+#define FRONTIER_TRAINER_NESTOR 53
+#define FRONTIER_TRAINER_DERRICK 54
+#define FRONTIER_TRAINER_BRYSON 55
+#define FRONTIER_TRAINER_CLAYTON 56
+#define FRONTIER_TRAINER_TRENTON 57
+#define FRONTIER_TRAINER_JENSON 58
+#define FRONTIER_TRAINER_WESLEY 59
+#define FRONTIER_TRAINER_ANTON 60
+#define FRONTIER_TRAINER_LAWSON 61
+#define FRONTIER_TRAINER_SAMMY 62
+#define FRONTIER_TRAINER_ARNIE 63
+#define FRONTIER_TRAINER_ADRIAN 64
+#define FRONTIER_TRAINER_TRISTAN 65
+#define FRONTIER_TRAINER_JULIANA 66
+#define FRONTIER_TRAINER_RYLEE 67
+#define FRONTIER_TRAINER_CHELSEA 68
+#define FRONTIER_TRAINER_DANELA 69
+#define FRONTIER_TRAINER_LIZBETH 70
+#define FRONTIER_TRAINER_AMELIA 71
+#define FRONTIER_TRAINER_JILLIAN 72
+#define FRONTIER_TRAINER_ABBIE 73
+#define FRONTIER_TRAINER_BRIANA 74
+#define FRONTIER_TRAINER_ANTONIO 75
+#define FRONTIER_TRAINER_JADEN 76
+#define FRONTIER_TRAINER_DAKOTA 77
+#define FRONTIER_TRAINER_BRAYDEN 78
+#define FRONTIER_TRAINER_CORSON 79
+#define FRONTIER_TRAINER_TREVIN 80
+#define FRONTIER_TRAINER_PATRICK 81
+#define FRONTIER_TRAINER_KADEN 82
+#define FRONTIER_TRAINER_MAXWELL 83
+#define FRONTIER_TRAINER_DARYL 84
+#define FRONTIER_TRAINER_KENNETH 85
+#define FRONTIER_TRAINER_RICH 86
+#define FRONTIER_TRAINER_CADEN 87
+#define FRONTIER_TRAINER_MARLON 88
+#define FRONTIER_TRAINER_NASH 89
+#define FRONTIER_TRAINER_ROBBY 90
+#define FRONTIER_TRAINER_REECE 91
+#define FRONTIER_TRAINER_KATHRYN 92
+#define FRONTIER_TRAINER_ELLEN 93
+#define FRONTIER_TRAINER_RAMON 94
+#define FRONTIER_TRAINER_ARTHUR 95
+#define FRONTIER_TRAINER_ALONDRA 96
+#define FRONTIER_TRAINER_ADRIANA 97
+#define FRONTIER_TRAINER_MALIK 98
+#define FRONTIER_TRAINER_JILL 99
+#define FRONTIER_TRAINER_ERIK 100
+#define FRONTIER_TRAINER_YAZMIN 101
+#define FRONTIER_TRAINER_JAMAL 102
+#define FRONTIER_TRAINER_LESLIE 103
+#define FRONTIER_TRAINER_DAVE 104
+#define FRONTIER_TRAINER_CARLO 105
+#define FRONTIER_TRAINER_EMILIA 106
+#define FRONTIER_TRAINER_DALIA 107
+#define FRONTIER_TRAINER_HITOMI 108
+#define FRONTIER_TRAINER_RICARDO 109
+#define FRONTIER_TRAINER_SHIZUKA 110
+#define FRONTIER_TRAINER_JOANA 111
+#define FRONTIER_TRAINER_KELLY 112
+#define FRONTIER_TRAINER_RAYNA 113
+#define FRONTIER_TRAINER_EVAN 114
+#define FRONTIER_TRAINER_JORDAN 115
+#define FRONTIER_TRAINER_JOEL 116
+#define FRONTIER_TRAINER_KRISTEN 117
+#define FRONTIER_TRAINER_SELPHY 118
+#define FRONTIER_TRAINER_CHLOE 119
+#define FRONTIER_TRAINER_NORTON 120
+#define FRONTIER_TRAINER_LUKAS 121
+#define FRONTIER_TRAINER_ZACH 122
+#define FRONTIER_TRAINER_KAITLYN 123
+#define FRONTIER_TRAINER_BREANNA 124
+#define FRONTIER_TRAINER_KENDRA 125
+#define FRONTIER_TRAINER_MOLLY 126
+#define FRONTIER_TRAINER_JAZMIN 127
+#define FRONTIER_TRAINER_KELSEY 128
+#define FRONTIER_TRAINER_JALEN 129
+#define FRONTIER_TRAINER_GRIFFEN 130
+#define FRONTIER_TRAINER_XANDER 131
+#define FRONTIER_TRAINER_MARVIN 132
+#define FRONTIER_TRAINER_BRENNAN 133
+#define FRONTIER_TRAINER_BALEY 134
+#define FRONTIER_TRAINER_ZACKARY 135
+#define FRONTIER_TRAINER_GABRIEL 136
+#define FRONTIER_TRAINER_EMILY 137
+#define FRONTIER_TRAINER_JORDYN 138
+#define FRONTIER_TRAINER_SOFIA 139
+#define FRONTIER_TRAINER_BRADEN 140
+#define FRONTIER_TRAINER_KAYDEN 141
+#define FRONTIER_TRAINER_COOPER 142
+#define FRONTIER_TRAINER_JULIA 143
+#define FRONTIER_TRAINER_AMARA 144
+#define FRONTIER_TRAINER_LYNN 145
+#define FRONTIER_TRAINER_JOVAN 146
+#define FRONTIER_TRAINER_DOMINIC 147
+#define FRONTIER_TRAINER_NIKOLAS 148
+#define FRONTIER_TRAINER_VALERIA 149
+#define FRONTIER_TRAINER_DELANEY 150
+#define FRONTIER_TRAINER_MEGHAN 151
+#define FRONTIER_TRAINER_ROBERTO 152
+#define FRONTIER_TRAINER_DAMIAN 153
+#define FRONTIER_TRAINER_BRODY 154
+#define FRONTIER_TRAINER_GRAHAM 155
+#define FRONTIER_TRAINER_TYLOR 156
+#define FRONTIER_TRAINER_JAREN 157
+#define FRONTIER_TRAINER_CORDELL 158
+#define FRONTIER_TRAINER_JAZLYN 159
+#define FRONTIER_TRAINER_ZACHERY 160
+#define FRONTIER_TRAINER_JOHAN 161
+#define FRONTIER_TRAINER_SHEA 162
+#define FRONTIER_TRAINER_KAILA 163
+#define FRONTIER_TRAINER_ISIAH 164
+#define FRONTIER_TRAINER_GARRETT 165
+#define FRONTIER_TRAINER_HAYLIE 166
+#define FRONTIER_TRAINER_MEGAN 167
+#define FRONTIER_TRAINER_ISSAC 168
+#define FRONTIER_TRAINER_QUINTON 169
+#define FRONTIER_TRAINER_SALMA 170
+#define FRONTIER_TRAINER_ANSLEY 171
+#define FRONTIER_TRAINER_HOLDEN 172
+#define FRONTIER_TRAINER_LUCA 173
+#define FRONTIER_TRAINER_JAMISON 174
+#define FRONTIER_TRAINER_GUNNAR 175
+#define FRONTIER_TRAINER_CRAIG 176
+#define FRONTIER_TRAINER_PIERCE 177
+#define FRONTIER_TRAINER_REGINA 178
+#define FRONTIER_TRAINER_ALISON 179
+#define FRONTIER_TRAINER_HANK 180
+#define FRONTIER_TRAINER_EARL 181
+#define FRONTIER_TRAINER_RAMIRO 182
+#define FRONTIER_TRAINER_HUNTER 183
+#define FRONTIER_TRAINER_AIDEN 184
+#define FRONTIER_TRAINER_XAVIER 185
+#define FRONTIER_TRAINER_CLINTON 186
+#define FRONTIER_TRAINER_JESSE 187
+#define FRONTIER_TRAINER_EDUARDO 188
+#define FRONTIER_TRAINER_HAL 189
+#define FRONTIER_TRAINER_GAGE 190
+#define FRONTIER_TRAINER_ARNOLD 191
+#define FRONTIER_TRAINER_JARRETT 192
+#define FRONTIER_TRAINER_GARETT 193
+#define FRONTIER_TRAINER_EMANUEL 194
+#define FRONTIER_TRAINER_GUSTAVO 195
+#define FRONTIER_TRAINER_KAMERON 196
+#define FRONTIER_TRAINER_ALFREDO 197
+#define FRONTIER_TRAINER_RUBEN 198
+#define FRONTIER_TRAINER_LAMAR 199
+#define FRONTIER_TRAINER_JAXON 200
+#define FRONTIER_TRAINER_LOGAN 201
+#define FRONTIER_TRAINER_EMILEE 202
+#define FRONTIER_TRAINER_JOSIE 203
+#define FRONTIER_TRAINER_ARMANDO 204
+#define FRONTIER_TRAINER_SKYLER 205
+#define FRONTIER_TRAINER_RUTH 206
+#define FRONTIER_TRAINER_MELODY 207
+#define FRONTIER_TRAINER_PEDRO 208
+#define FRONTIER_TRAINER_ERICK 209
+#define FRONTIER_TRAINER_ELAINE 210
+#define FRONTIER_TRAINER_JOYCE 211
+#define FRONTIER_TRAINER_TODD 212
+#define FRONTIER_TRAINER_GAVIN 213
+#define FRONTIER_TRAINER_MALORY 214
+#define FRONTIER_TRAINER_ESTHER 215
+#define FRONTIER_TRAINER_OSCAR 216
+#define FRONTIER_TRAINER_WILSON 217
+#define FRONTIER_TRAINER_CLARE 218
+#define FRONTIER_TRAINER_TESS 219
+#define FRONTIER_TRAINER_LEON 220
+#define FRONTIER_TRAINER_ALONZO 221
+#define FRONTIER_TRAINER_VINCE 222
+#define FRONTIER_TRAINER_BRYON 223
+#define FRONTIER_TRAINER_AVA 224
+#define FRONTIER_TRAINER_MIRIAM 225
+#define FRONTIER_TRAINER_CARRIE 226
+#define FRONTIER_TRAINER_GILLIAN2 227
+#define FRONTIER_TRAINER_TYLER 228
+#define FRONTIER_TRAINER_CHAZ 229
+#define FRONTIER_TRAINER_NELSON 230
+#define FRONTIER_TRAINER_SHANIA 231
+#define FRONTIER_TRAINER_STELLA 232
+#define FRONTIER_TRAINER_DORINE 233
+#define FRONTIER_TRAINER_MADDOX 234
+#define FRONTIER_TRAINER_DAVIN 235
+#define FRONTIER_TRAINER_TREVON 236
+#define FRONTIER_TRAINER_MATEO 237
+#define FRONTIER_TRAINER_BRET 238
+#define FRONTIER_TRAINER_RAUL 239
+#define FRONTIER_TRAINER_KAY 240
+#define FRONTIER_TRAINER_ELENA 241
+#define FRONTIER_TRAINER_ALANA 242
+#define FRONTIER_TRAINER_ALEXAS 243
+#define FRONTIER_TRAINER_WESTON 244
+#define FRONTIER_TRAINER_JASPER 245
+#define FRONTIER_TRAINER_NADIA 246
+#define FRONTIER_TRAINER_MIRANDA 247
+#define FRONTIER_TRAINER_EMMA 248
+#define FRONTIER_TRAINER_ROLANDO 249
+#define FRONTIER_TRAINER_STANLY 250
+#define FRONTIER_TRAINER_DARIO 251
+#define FRONTIER_TRAINER_KARLEE 252
+#define FRONTIER_TRAINER_JAYLIN 253
+#define FRONTIER_TRAINER_INGRID 254
+#define FRONTIER_TRAINER_DELILAH 255
+#define FRONTIER_TRAINER_CARLY 256
+#define FRONTIER_TRAINER_LEXIE 257
+#define FRONTIER_TRAINER_MILLER 258
+#define FRONTIER_TRAINER_MARV 259
+#define FRONTIER_TRAINER_LAYTON 260
+#define FRONTIER_TRAINER_BROOKS 261
+#define FRONTIER_TRAINER_GREGORY 262
+#define FRONTIER_TRAINER_REESE 263
+#define FRONTIER_TRAINER_MASON 264
+#define FRONTIER_TRAINER_TOBY 265
+#define FRONTIER_TRAINER_DOROTHY 266
+#define FRONTIER_TRAINER_PIPER 267
+#define FRONTIER_TRAINER_FINN 268
+#define FRONTIER_TRAINER_SAMIR 269
+#define FRONTIER_TRAINER_FIONA 270
+#define FRONTIER_TRAINER_GLORIA 271
+#define FRONTIER_TRAINER_NICO 272
+#define FRONTIER_TRAINER_JEREMY 273
+#define FRONTIER_TRAINER_CAITLIN 274
+#define FRONTIER_TRAINER_REENA 275
+#define FRONTIER_TRAINER_AVERY 276
+#define FRONTIER_TRAINER_LIAM 277
+#define FRONTIER_TRAINER_THEO 278
+#define FRONTIER_TRAINER_BAILEY 279
+#define FRONTIER_TRAINER_HUGO 280
+#define FRONTIER_TRAINER_BRYCE 281
+#define FRONTIER_TRAINER_GIDEON 282
+#define FRONTIER_TRAINER_TRISTON 283
+#define FRONTIER_TRAINER_CHARLES 284
+#define FRONTIER_TRAINER_RAYMOND 285
+#define FRONTIER_TRAINER_DIRK 286
+#define FRONTIER_TRAINER_HAROLD 287
+#define FRONTIER_TRAINER_OMAR 288
+#define FRONTIER_TRAINER_PETER 289
+#define FRONTIER_TRAINER_DEV 290
+#define FRONTIER_TRAINER_COREY 291
+#define FRONTIER_TRAINER_ANDRE 292
+#define FRONTIER_TRAINER_FERRIS 293
+#define FRONTIER_TRAINER_ALIVIA 294
+#define FRONTIER_TRAINER_PAIGE 295
+#define FRONTIER_TRAINER_ANYA 296
+#define FRONTIER_TRAINER_DAWN 297
+#define FRONTIER_TRAINER_ABBY 298
+#define FRONTIER_TRAINER_GRETEL 299
+
+#define FRONTIER_TRAINERS_COUNT 300
+
+// special trainer IDs begin at 300, see constants/trainers.h
+
+#endif // GUARD_CONSTANTS_BATTLE_FRONTIER_TRAINERS_H
diff --git a/include/constants/battle_tent_mons.h b/include/constants/battle_tent_mons.h
new file mode 100644
index 000000000..d9fc89a20
--- /dev/null
+++ b/include/constants/battle_tent_mons.h
@@ -0,0 +1,173 @@
+#ifndef GUARD_CONSTANTS_BATTLE_TENT_MONS_H
+#define GUARD_CONSTANTS_BATTLE_TENT_MONS_H
+
+#define SLATEPORT_TENT_MON_ZIGZAGOON_1 0
+#define SLATEPORT_TENT_MON_ZIGZAGOON_2 1
+#define SLATEPORT_TENT_MON_BEAUTIFLY 2
+#define SLATEPORT_TENT_MON_DUSTOX 3
+#define SLATEPORT_TENT_MON_WAILMER_1 4
+#define SLATEPORT_TENT_MON_WAILMER_2 5
+#define SLATEPORT_TENT_MON_MARILL_1 6
+#define SLATEPORT_TENT_MON_WINGULL_1 7
+#define SLATEPORT_TENT_MON_PELIPPER_1 8
+#define SLATEPORT_TENT_MON_CACNEA_1 9
+#define SLATEPORT_TENT_MON_LOMBRE_1 10
+#define SLATEPORT_TENT_MON_LOTAD 11
+#define SLATEPORT_TENT_MON_SEEDOT 12
+#define SLATEPORT_TENT_MON_NUZLEAF 13
+#define SLATEPORT_TENT_MON_NINJASK_1 14
+#define SLATEPORT_TENT_MON_NINJASK_2 15
+#define SLATEPORT_TENT_MON_GRAVELER 16
+#define SLATEPORT_TENT_MON_BALTOY 17
+#define SLATEPORT_TENT_MON_MIGHTYENA_1 18
+#define SLATEPORT_TENT_MON_MIGHTYENA_2 19
+#define SLATEPORT_TENT_MON_LINOONE 20
+#define SLATEPORT_TENT_MON_GOLDEEN 21
+#define SLATEPORT_TENT_MON_ELECTRIKE_1 22
+#define SLATEPORT_TENT_MON_VOLTORB 23
+#define SLATEPORT_TENT_MON_ARON_1 24
+#define SLATEPORT_TENT_MON_ARON_2 25
+#define SLATEPORT_TENT_MON_TRAPINCH_1 26
+#define SLATEPORT_TENT_MON_CACNEA_2 27
+#define SLATEPORT_TENT_MON_TAILLOW 28
+#define SLATEPORT_TENT_MON_SWELLOW 29
+#define SLATEPORT_TENT_MON_GOLBAT_1 30
+#define SLATEPORT_TENT_MON_LOUDRED 31
+#define SLATEPORT_TENT_MON_SPINDA 32
+#define SLATEPORT_TENT_MON_MAGNEMITE 33
+#define SLATEPORT_TENT_MON_WHISMUR 34
+#define SLATEPORT_TENT_MON_MAKUHITA 35
+#define SLATEPORT_TENT_MON_NUMEL_1 36
+#define SLATEPORT_TENT_MON_BARBOACH 37
+#define SLATEPORT_TENT_MON_TENTACOOL 38
+#define SLATEPORT_TENT_MON_VIGOROTH 39
+#define SLATEPORT_TENT_MON_MAGIKARP 40
+#define SLATEPORT_TENT_MON_SEVIPER_1 41
+#define SLATEPORT_TENT_MON_SOLROCK 42
+#define SLATEPORT_TENT_MON_KECLEON_1 43
+#define SLATEPORT_TENT_MON_KECLEON_2 44
+#define SLATEPORT_TENT_MON_SHROOMISH_1 45
+#define SLATEPORT_TENT_MON_SHROOMISH_2 46
+#define SLATEPORT_TENT_MON_LOMBRE_2 47
+#define SLATEPORT_TENT_MON_NUMEL_2 48
+#define SLATEPORT_TENT_MON_TRAPINCH_2 49
+#define SLATEPORT_TENT_MON_PELIPPER_2 50
+#define SLATEPORT_TENT_MON_WINGULL_2 51
+#define SLATEPORT_TENT_MON_MARILL_2 52
+#define SLATEPORT_TENT_MON_SKITTY 53
+#define SLATEPORT_TENT_MON_SEVIPER_2 54
+#define SLATEPORT_TENT_MON_GOLBAT_2 55
+#define SLATEPORT_TENT_MON_RALTS 56
+#define SLATEPORT_TENT_MON_SANDSHREW 57
+#define SLATEPORT_TENT_MON_SWALOT 58
+#define SLATEPORT_TENT_MON_VOLBEAT 59
+#define SLATEPORT_TENT_MON_ILLUMISE 60
+#define SLATEPORT_TENT_MON_KADABRA 61
+#define SLATEPORT_TENT_MON_KIRLIA 62
+#define SLATEPORT_TENT_MON_BRELOOM 63
+#define SLATEPORT_TENT_MON_PLUSLE_1 64
+#define SLATEPORT_TENT_MON_PLUSLE_2 65
+#define SLATEPORT_TENT_MON_ELECTRIKE_2 66
+#define SLATEPORT_TENT_MON_SWABLU 67
+#define SLATEPORT_TENT_MON_MACHOP 68
+#define SLATEPORT_TENT_MON_MACHOKE 69
+
+#define NUM_SLATEPORT_TENT_MONS 70
+
+#define VERDANTURF_TENT_MON_POOCHYENA 0
+#define VERDANTURF_TENT_MON_ZIGZAGOON 1
+#define VERDANTURF_TENT_MON_DUSTOX 2
+#define VERDANTURF_TENT_MON_TAILLOW 3
+#define VERDANTURF_TENT_MON_SHROOMISH 4
+#define VERDANTURF_TENT_MON_MACHOP 5
+#define VERDANTURF_TENT_MON_MAGIKARP 6
+#define VERDANTURF_TENT_MON_BARBOACH 7
+#define VERDANTURF_TENT_MON_WINGULL 8
+#define VERDANTURF_TENT_MON_ARON_1 9
+#define VERDANTURF_TENT_MON_NUMEL_1 10
+#define VERDANTURF_TENT_MON_SWALOT 11
+#define VERDANTURF_TENT_MON_KECLEON 12
+#define VERDANTURF_TENT_MON_BALTOY 13
+#define VERDANTURF_TENT_MON_NINJASK 14
+#define VERDANTURF_TENT_MON_MAKUHITA 15
+#define VERDANTURF_TENT_MON_SWABLU 16
+#define VERDANTURF_TENT_MON_GOLDEEN_1 17
+#define VERDANTURF_TENT_MON_LOTAD 18
+#define VERDANTURF_TENT_MON_NUMEL_2 19
+#define VERDANTURF_TENT_MON_LINOONE 20
+#define VERDANTURF_TENT_MON_SEVIPER 21
+#define VERDANTURF_TENT_MON_SKARMORY 22
+#define VERDANTURF_TENT_MON_SWELLOW 23
+#define VERDANTURF_TENT_MON_GOLDEEN_2 24
+#define VERDANTURF_TENT_MON_ELECTRIKE 25
+#define VERDANTURF_TENT_MON_NUZLEAF 26
+#define VERDANTURF_TENT_MON_ARON_2 27
+#define VERDANTURF_TENT_MON_MIGHTYENA 28
+#define VERDANTURF_TENT_MON_SOLROCK 29
+#define VERDANTURF_TENT_MON_GRAVELER 30
+#define VERDANTURF_TENT_MON_KADABRA 31
+#define VERDANTURF_TENT_MON_VOLTORB 32
+#define VERDANTURF_TENT_MON_MAGNEMITE 33
+#define VERDANTURF_TENT_MON_PELIPPER 34
+#define VERDANTURF_TENT_MON_LOUDRED 35
+#define VERDANTURF_TENT_MON_MARILL 36
+#define VERDANTURF_TENT_MON_TRAPINCH 37
+#define VERDANTURF_TENT_MON_TENTACOOL 38
+#define VERDANTURF_TENT_MON_VIGOROTH 39
+#define VERDANTURF_TENT_MON_WAILMER 40
+#define VERDANTURF_TENT_MON_ILLUMISE 41
+#define VERDANTURF_TENT_MON_MACHOKE 42
+#define VERDANTURF_TENT_MON_WHISMUR 43
+#define VERDANTURF_TENT_MON_CACNEA 44
+
+#define NUM_VERDANTURF_TENT_MONS 45
+
+#define FALLARBOR_TENT_MON_NUMEL 0
+#define FALLARBOR_TENT_MON_LINOONE_1 1
+#define FALLARBOR_TENT_MON_PLUSLE 2
+#define FALLARBOR_TENT_MON_POOCHYENA 3
+#define FALLARBOR_TENT_MON_KECLEON 4
+#define FALLARBOR_TENT_MON_MAGIKARP 5
+#define FALLARBOR_TENT_MON_SOLROCK 6
+#define FALLARBOR_TENT_MON_MAKUHITA 7
+#define FALLARBOR_TENT_MON_MACHOKE 8
+#define FALLARBOR_TENT_MON_NINCADA 9
+#define FALLARBOR_TENT_MON_BEAUTIFLY 10
+#define FALLARBOR_TENT_MON_DUSTOX 11
+#define FALLARBOR_TENT_MON_ILLUMISE 12
+#define FALLARBOR_TENT_MON_VOLBEAT 13
+#define FALLARBOR_TENT_MON_NINJASK_1 14
+#define FALLARBOR_TENT_MON_NINJASK_2 15
+#define FALLARBOR_TENT_MON_ARON_1 16
+#define FALLARBOR_TENT_MON_ARON_2 17
+#define FALLARBOR_TENT_MON_ELECTRIKE 18
+#define FALLARBOR_TENT_MON_MAGNEMITE 19
+#define FALLARBOR_TENT_MON_VOLTORB 20
+#define FALLARBOR_TENT_MON_WHISMUR 21
+#define FALLARBOR_TENT_MON_LOUDRED 22
+#define FALLARBOR_TENT_MON_LINOONE_2 23
+#define FALLARBOR_TENT_MON_MIGHTYENA 24
+#define FALLARBOR_TENT_MON_SWABLU 25
+#define FALLARBOR_TENT_MON_SKARMORY 26
+#define FALLARBOR_TENT_MON_GOLBAT 27
+#define FALLARBOR_TENT_MON_WINGULL 28
+#define FALLARBOR_TENT_MON_PELIPPER 29
+#define FALLARBOR_TENT_MON_BARBOACH 30
+#define FALLARBOR_TENT_MON_WAILMER 31
+#define FALLARBOR_TENT_MON_MARILL 32
+#define FALLARBOR_TENT_MON_GOLDEEN_1 33
+#define FALLARBOR_TENT_MON_GOLDEEN_2 34
+#define FALLARBOR_TENT_MON_TRAPINCH 35
+#define FALLARBOR_TENT_MON_BALTOY 36
+#define FALLARBOR_TENT_MON_GRAVELER 37
+#define FALLARBOR_TENT_MON_SANDSHREW 38
+#define FALLARBOR_TENT_MON_SWALOT 39
+#define FALLARBOR_TENT_MON_SHROOMISH 40
+#define FALLARBOR_TENT_MON_KIRLIA 41
+#define FALLARBOR_TENT_MON_LOMBRE 42
+#define FALLARBOR_TENT_MON_NUZLEAF 43
+#define FALLARBOR_TENT_MON_CACNEA 44
+
+#define NUM_FALLARBOR_TENT_MONS 45
+
+#endif // GUARD_CONSTANTS_BATTLE_TENT_MONS_H
diff --git a/include/constants/battle_tent_trainers.h b/include/constants/battle_tent_trainers.h
new file mode 100644
index 000000000..3629da0ca
--- /dev/null
+++ b/include/constants/battle_tent_trainers.h
@@ -0,0 +1,99 @@
+#ifndef GUARD_CONSTANTS_BATTLE_TENT_TRAINERS_H
+#define GUARD_CONSTANTS_BATTLE_TENT_TRAINERS_H
+
+#define SLATEPORT_TENT_TRAINER_JOLIE 0
+#define SLATEPORT_TENT_TRAINER_MALACHI 1
+#define SLATEPORT_TENT_TRAINER_KELSIE 2
+#define SLATEPORT_TENT_TRAINER_DAVON 3
+#define SLATEPORT_TENT_TRAINER_GLENDA 4
+#define SLATEPORT_TENT_TRAINER_HELENA 5
+#define SLATEPORT_TENT_TRAINER_RODOLFO 6
+#define SLATEPORT_TENT_TRAINER_DAVION 7
+#define SLATEPORT_TENT_TRAINER_KENDALL 8
+#define SLATEPORT_TENT_TRAINER_COLTEN 9
+#define SLATEPORT_TENT_TRAINER_IRVIN 10
+#define SLATEPORT_TENT_TRAINER_SHAUN 11
+#define SLATEPORT_TENT_TRAINER_KYLER 12
+#define SLATEPORT_TENT_TRAINER_MAGGIE 13
+#define SLATEPORT_TENT_TRAINER_STEPHON 14
+#define SLATEPORT_TENT_TRAINER_REBECCA 15
+#define SLATEPORT_TENT_TRAINER_REGGIE 16
+#define SLATEPORT_TENT_TRAINER_JANAE 17
+#define SLATEPORT_TENT_TRAINER_CAIDEN 18
+#define SLATEPORT_TENT_TRAINER_KIRSTEN 19
+#define SLATEPORT_TENT_TRAINER_KURTIS 20
+#define SLATEPORT_TENT_TRAINER_STEFAN 21
+#define SLATEPORT_TENT_TRAINER_AVERY 22
+#define SLATEPORT_TENT_TRAINER_DWANE 23
+#define SLATEPORT_TENT_TRAINER_MCKENNA 24
+#define SLATEPORT_TENT_TRAINER_CAMRYN 25
+#define SLATEPORT_TENT_TRAINER_NATASHA 26
+#define SLATEPORT_TENT_TRAINER_AUSTYN 27
+#define SLATEPORT_TENT_TRAINER_DONOVAN 28
+#define SLATEPORT_TENT_TRAINER_TAMIA 29
+
+#define VERDANTURF_TENT_TRAINER_BRENNA 0
+#define VERDANTURF_TENT_TRAINER_DILAN 1
+#define VERDANTURF_TENT_TRAINER_ELIANA 2
+#define VERDANTURF_TENT_TRAINER_MARKUS 3
+#define VERDANTURF_TENT_TRAINER_CAITLYN 4
+#define VERDANTURF_TENT_TRAINER_DESIREE 5
+#define VERDANTURF_TENT_TRAINER_RONALD 6
+#define VERDANTURF_TENT_TRAINER_ASHTEN 7
+#define VERDANTURF_TENT_TRAINER_GERARD 8
+#define VERDANTURF_TENT_TRAINER_BRADLY 9
+#define VERDANTURF_TENT_TRAINER_DENNIS 10
+#define VERDANTURF_TENT_TRAINER_PRESTIN 11
+#define VERDANTURF_TENT_TRAINER_ERNESTO 12
+#define VERDANTURF_TENT_TRAINER_NALA 13
+#define VERDANTURF_TENT_TRAINER_DARNELL 14
+#define VERDANTURF_TENT_TRAINER_ASHLYN 15
+#define VERDANTURF_TENT_TRAINER_ADDISON 16
+#define VERDANTURF_TENT_TRAINER_JUSTINE 17
+#define VERDANTURF_TENT_TRAINER_TYSON 18
+#define VERDANTURF_TENT_TRAINER_LAILA 19
+#define VERDANTURF_TENT_TRAINER_WAREN 20
+#define VERDANTURF_TENT_TRAINER_TOBIAS 21
+#define VERDANTURF_TENT_TRAINER_JOSIAH 22
+#define VERDANTURF_TENT_TRAINER_DION 23
+#define VERDANTURF_TENT_TRAINER_KENZIE 24
+#define VERDANTURF_TENT_TRAINER_LILLIAN 25
+#define VERDANTURF_TENT_TRAINER_LESLEY 26
+#define VERDANTURF_TENT_TRAINER_MARQUIS 27
+#define VERDANTURF_TENT_TRAINER_FREDDY 28
+#define VERDANTURF_TENT_TRAINER_CECILIA 29
+
+#define FALLARBOR_TENT_TRAINER_AMBER 0
+#define FALLARBOR_TENT_TRAINER_JAVIER 1
+#define FALLARBOR_TENT_TRAINER_NATALIA 2
+#define FALLARBOR_TENT_TRAINER_TREVE 3
+#define FALLARBOR_TENT_TRAINER_ARIANNA 4
+#define FALLARBOR_TENT_TRAINER_JADYN 5
+#define FALLARBOR_TENT_TRAINER_GERARDO 6
+#define FALLARBOR_TENT_TRAINER_JONN 7
+#define FALLARBOR_TENT_TRAINER_ESTEBAN 8
+#define FALLARBOR_TENT_TRAINER_JAMESON 9
+#define FALLARBOR_TENT_TRAINER_ALANZO 10
+#define FALLARBOR_TENT_TRAINER_HOWARD 11
+#define FALLARBOR_TENT_TRAINER_CONRAD 12
+#define FALLARBOR_TENT_TRAINER_MAKENNA 13
+#define FALLARBOR_TENT_TRAINER_BRAYAN 14
+#define FALLARBOR_TENT_TRAINER_MARIANA 15
+#define FALLARBOR_TENT_TRAINER_SHELDON 16
+#define FALLARBOR_TENT_TRAINER_GIANNA 17
+#define FALLARBOR_TENT_TRAINER_YAHIR 18
+#define FALLARBOR_TENT_TRAINER_BRITNEY 19
+#define FALLARBOR_TENT_TRAINER_HECTER 20
+#define FALLARBOR_TENT_TRAINER_TANNOR 21
+#define FALLARBOR_TENT_TRAINER_BENJI 22
+#define FALLARBOR_TENT_TRAINER_RORY 23
+#define FALLARBOR_TENT_TRAINER_ELEANOR 24
+#define FALLARBOR_TENT_TRAINER_EVELYN 25
+#define FALLARBOR_TENT_TRAINER_ARIELLE 26
+#define FALLARBOR_TENT_TRAINER_CONNAR 27
+#define FALLARBOR_TENT_TRAINER_MAURICE 28
+#define FALLARBOR_TENT_TRAINER_KIANNA 29
+
+#define NUM_BATTLE_TENT_TRAINERS 30
+
+#endif // GUARD_CONSTANTS_BATTLE_TENT_TRAINERS_H
diff --git a/include/constants/flags.h b/include/constants/flags.h
index be0899691..1163e394f 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -1,6 +1,8 @@
#ifndef GUARD_CONSTANTS_FLAGS_H
#define GUARD_CONSTANTS_FLAGS_H
+#include "constants/opponents.h"
+
// Temporary Flags
// These temporary flags are are cleared every time a map is loaded. They are used
// for things like shortening an NPCs introduction text if the player already spoke
@@ -533,8 +535,6 @@
#define FLAG_MYSTERY_EVENT_14 0x1F2
#define FLAG_MYSTERY_EVENT_15 0x1F3
-#define FLAG_TRICK_HOUSE_END_ROOM 0x1F5 // Trick House End Room Flag
-
// Hidden Items -- sorted by location
#define FLAG_HIDDEN_ITEMS_START 0x1F4
#define FLAG_HIDDEN_ITEM_TRICK_HOUSE_NUGGET (FLAG_HIDDEN_ITEMS_START + 0x01)
@@ -1342,13 +1342,17 @@
#define FLAG_UNUSED_0x4FF 0x4FF // Unused Flag
-#define FLAG_TRAINER_FLAG_START 0x500
-#define TRAINERS_FLAG_NO 0x356
+// Trainer Flags
+// Trainer flags occupy 0x500 - 0x85F, the last 9 of which are unused
+// See constants/opponents.h. The values there + FLAG_TRAINER_FLAG_START are the flag IDs
-#define SYSTEM_FLAGS (FLAG_TRAINER_FLAG_START + TRAINERS_FLAG_NO + 0xA) // 0x860
+#define TRAINER_FLAGS_START 0x500
+#define TRAINER_FLAGS_END (TRAINER_FLAGS_START + MAX_TRAINERS_COUNT - 1) // 0x85F
// System Flags
+#define SYSTEM_FLAGS (TRAINER_FLAGS_END + 1) // 0x860
+
#define FLAG_SYS_POKEMON_GET (SYSTEM_FLAGS + 0) // FLAG_0x860
#define FLAG_SYS_POKEDEX_GET (SYSTEM_FLAGS + 1)
#define FLAG_SYS_POKENAV_GET (SYSTEM_FLAGS + 2)
diff --git a/include/constants/global.h b/include/constants/global.h
index 19e23d52a..7c96de511 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -58,6 +58,7 @@
#define TRAINER_ID_LENGTH 4
#define MAX_MON_MOVES 4
+#define NUM_STATS 6
// party sizes
#define PARTY_SIZE 6
diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h
index 58ac90eab..a0ea6855b 100644
--- a/include/constants/metatile_labels.h
+++ b/include/constants/metatile_labels.h
@@ -2,29 +2,39 @@
#define GUARD_METATILE_LABELS_H
// gTileset_General
-#define METATILE_General_Grass 0x001
-#define METATILE_General_TallGrass 0x00D
-#define METATILE_General_LongGrass 0x015
-#define METATILE_General_TallGrass_TreeUp 0x025
-#define METATILE_General_Grass_TreeUp 0x00E
-#define METATILE_General_TallGrass_TreeLeft 0x1C6
-#define METATILE_General_TallGrass_TreeRight 0x1C7
-#define METATILE_General_Grass_TreeLeft 0x1CE
-#define METATILE_General_Grass_TreeRight 0x1CF
-#define METATILE_General_MuddySlope_Frame0 0x0E8
-#define METATILE_General_MuddySlope_Frame1 0x0E9
-#define METATILE_General_MuddySlope_Frame2 0x0EA
-#define METATILE_General_MuddySlope_Frame3 0x0EB
-#define METATILE_General_SandPit_Center 0x121
-#define METATILE_General_CaveEntrance_Top 0x09F
-#define METATILE_General_CaveEntrance_Bottom 0x0A7
-#define METATILE_General_RockWall_GrassBase 0x079
-#define METATILE_General_RockWall_RockBase 0x07C
-#define METATILE_General_RockWall_SandBase 0x091
-#define METATILE_General_CalmWater 0x170
-#define METATILE_General_RoughWater 0x14E
-#define METATILE_General_RoughDeepWater 0x14F
-#define METATILE_General_ReflectiveWater 0x0A1
+#define METATILE_General_Grass 0x001
+#define METATILE_General_TallGrass 0x00D
+#define METATILE_General_LongGrass 0x015
+#define METATILE_General_TallGrass_TreeUp 0x025
+#define METATILE_General_Grass_TreeUp 0x00E
+#define METATILE_General_TallGrass_TreeLeft 0x1C6
+#define METATILE_General_TallGrass_TreeRight 0x1C7
+#define METATILE_General_Grass_TreeLeft 0x1CE
+#define METATILE_General_Grass_TreeRight 0x1CF
+#define METATILE_General_MuddySlope_Frame0 0x0E8
+#define METATILE_General_MuddySlope_Frame1 0x0E9
+#define METATILE_General_MuddySlope_Frame2 0x0EA
+#define METATILE_General_MuddySlope_Frame3 0x0EB
+#define METATILE_General_SandPit_Center 0x121
+#define METATILE_General_CaveEntrance_Top 0x09F
+#define METATILE_General_CaveEntrance_Bottom 0x0A7
+#define METATILE_General_RockWall_GrassBase 0x079
+#define METATILE_General_RockWall_RockBase 0x07C
+#define METATILE_General_RockWall_SandBase 0x091
+#define METATILE_General_CalmWater 0x170
+#define METATILE_General_RoughWater 0x14E
+#define METATILE_General_RoughDeepWater 0x14F
+#define METATILE_General_ReflectiveWater 0x0A1
+#define METATILE_General_SecretBase_TreeLeft 0x026
+#define METATILE_General_SecretBase_TreeRight 0x027
+#define METATILE_General_SecretBase_VineLeft 0x036
+#define METATILE_General_SecretBase_VineRight 0x037
+#define METATILE_General_RedCaveIndent 0x1A0
+#define METATILE_General_RedCaveOpen 0x1A1
+#define METATILE_General_YellowCaveIndent 0x1A8
+#define METATILE_General_YellowCaveOpen 0x1A9
+#define METATILE_General_BlueCaveIndent 0x1B0
+#define METATILE_General_BlueCaveOpen 0x1B1
// gTileset_Building
#define METATILE_Building_PC_Off 0x004
@@ -143,6 +153,8 @@
#define METATILE_Fortree_BridgeOverGrass_Lowered 0x24F
#define METATILE_Fortree_BridgeOverTrees_Raised 0x256
#define METATILE_Fortree_BridgeOverTrees_Lowered 0x257
+#define METATILE_Fortree_SecretBase_Shrub 0x271
+#define METATILE_Fortree_SecretBase_ShrubOpen 0x278
#define METATILE_Fortree_SecretBase_LongGrass_TopLeft 0x279
#define METATILE_Fortree_SecretBase_LongGrass_TopMid 0x27A
#define METATILE_Fortree_SecretBase_LongGrass_TopRight 0x27B
@@ -164,6 +176,8 @@
// gTileset_Fallarbor
#define METATILE_Fallarbor_AshGrass 0x20A
+#define METATILE_Fallarbor_BrownCaveIndent 0x208
+#define METATILE_Fallarbor_BrownCaveOpen 0x210
#define METATILE_Fallarbor_NormalGrass 0x212
#define METATILE_Fallarbor_AshField 0x218
#define METATILE_Fallarbor_BrownCaveEntrance_Top 0x259
@@ -414,4 +428,162 @@
#define METATILE_Underwater_RockWall 0x21E
#define METATILE_Underwater_FloorShadow 0x228
+// gTileset_SecretBase
+#define METATILE_SecretBase_Wall_TopMid 0x202
+#define METATILE_SecretBase_Ground 0x20A
+#define METATILE_SecretBase_PC 0x220
+#define METATILE_SecretBase_RegisterPC 0x221
+#define METATILE_SecretBase_PC_On 0x224
+#define METATILE_SecretBase_RedBrick_Top 0x225
+#define METATILE_SecretBase_RedBrick_Bottom 0x22D
+#define METATILE_SecretBase_YellowBrick_Top 0x226
+#define METATILE_SecretBase_YellowBrick_Bottom 0x22E
+#define METATILE_SecretBase_BlueBrick_Top 0x227
+#define METATILE_SecretBase_BlueBrick_Bottom 0x22F
+#define METATILE_SecretBase_MudBall 0x228
+#define METATILE_SecretBase_Fence_Horizontal 0x22C
+#define METATILE_SecretBase_Fence_Vertical 0x233
+#define METATILE_SecretBase_Board_Top 0x234
+#define METATILE_SecretBase_Board_Bottom 0x23C
+#define METATILE_SecretBase_RedTent_DoorTop 0x239
+#define METATILE_SecretBase_RedTent_Door 0x241
+#define METATILE_SecretBase_BlueTent_DoorTop 0x251
+#define METATILE_SecretBase_BlueTent_Door 0x259
+#define METATILE_SecretBase_Slide_Stairs 0x23D
+#define METATILE_SecretBase_Slide 0x23E
+#define METATILE_SecretBase_Stand_LeftCorner 0x26A
+#define METATILE_SecretBase_Stand_RightCorner 0x26D
+#define METATILE_SecretBase_BreakableDoor_TopClosed 0x237
+#define METATILE_SecretBase_BreakableDoor_BottomClosed 0x23F
+#define METATILE_SecretBase_BreakableDoor_TopOpen 0x26E
+#define METATILE_SecretBase_BreakableDoor_BottomOpen 0x276
+#define METATILE_SecretBase_NoteMat_C 0x278
+#define METATILE_SecretBase_NoteMat_D 0x279
+#define METATILE_SecretBase_NoteMat_E 0x27A
+#define METATILE_SecretBase_NoteMat_F 0x27B
+#define METATILE_SecretBase_NoteMat_G 0x27C
+#define METATILE_SecretBase_NoteMat_A 0x27D
+#define METATILE_SecretBase_NoteMat_B 0x27E
+#define METATILE_SecretBase_NoteMat_C_Sharp 0x2B3
+#define METATILE_SecretBase_Tire_TopLeft 0x280
+#define METATILE_SecretBase_Tire_TopRight 0x281
+#define METATILE_SecretBase_Tire_BottomLeft 0x288
+#define METATILE_SecretBase_Tire_BottomRight 0x289
+#define METATILE_SecretBase_GlassOrnament_Base1 0x28A
+#define METATILE_SecretBase_GlassOrnament_Base2 0x28B
+#define METATILE_SecretBase_SandOrnament_BrokenTop 0x284
+#define METATILE_SecretBase_SandOrnament_BrokenBase 0x28C
+#define METATILE_SecretBase_SandOrnament_Top 0x285
+#define METATILE_SecretBase_SandOrnament_Base1 0x28D
+#define METATILE_SecretBase_SandOrnament_TopWall 0x286
+#define METATILE_SecretBase_SandOrnament_Base2 0x28E
+#define METATILE_SecretBase_SmallDesk 0x287
+#define METATILE_SecretBase_PokemonDesk 0x28F
+#define METATILE_SecretBase_HeavyDesk_TopLeft 0x290
+#define METATILE_SecretBase_HeavyDesk_TopMid 0x291
+#define METATILE_SecretBase_HeavyDesk_TopRight 0x292
+#define METATILE_SecretBase_HeavyDesk_BottomLeft 0x298
+#define METATILE_SecretBase_HeavyDesk_BottomMid 0x299
+#define METATILE_SecretBase_HeavyDesk_BottomRight 0x29A
+#define METATILE_SecretBase_RaggedDesk_TopLeft 0x293
+#define METATILE_SecretBase_RaggedDesk_TopMid 0x294
+#define METATILE_SecretBase_RaggedDesk_TopRight 0x295
+#define METATILE_SecretBase_RaggedDesk_BottomLeft 0x29B
+#define METATILE_SecretBase_RaggedDesk_BottomMid 0x29C
+#define METATILE_SecretBase_RaggedDesk_BottomRight 0x29D
+#define METATILE_SecretBase_ComfortDesk_TopLeft 0x296
+#define METATILE_SecretBase_ComfortDesk_TopMid 0x297
+#define METATILE_SecretBase_ComfortDesk_TopRight 0x2A3
+#define METATILE_SecretBase_ComfortDesk_BottomLeft 0x29E
+#define METATILE_SecretBase_ComfortDesk_BottomMid 0x29F
+#define METATILE_SecretBase_ComfortDesk_BottomRight 0x2AB
+#define METATILE_SecretBase_BrickDesk_TopLeft 0x2A0
+#define METATILE_SecretBase_BrickDesk_TopMid 0x2A1
+#define METATILE_SecretBase_BrickDesk_TopRight 0x2A2
+#define METATILE_SecretBase_BrickDesk_MidLeft 0x2A8
+#define METATILE_SecretBase_BrickDesk_Center 0x2A9
+#define METATILE_SecretBase_BrickDesk_MidRight 0x2AA
+#define METATILE_SecretBase_BrickDesk_BottomLeft 0x2B0
+#define METATILE_SecretBase_BrickDesk_BottomMid 0x2B1
+#define METATILE_SecretBase_BrickDesk_BottomRight 0x2B2
+#define METATILE_SecretBase_CampDesk_TopLeft 0x2A4
+#define METATILE_SecretBase_CampDesk_TopMid 0x2A5
+#define METATILE_SecretBase_CampDesk_TopRight 0x2A6
+#define METATILE_SecretBase_CampDesk_MidLeft 0x2AC
+#define METATILE_SecretBase_CampDesk_Center 0x2AD
+#define METATILE_SecretBase_CampDesk_MidRight 0x2AE
+#define METATILE_SecretBase_CampDesk_BottomLeft 0x2B4
+#define METATILE_SecretBase_CampDesk_BottomMid 0x2B5
+#define METATILE_SecretBase_CampDesk_BottomRight 0x2B6
+#define METATILE_SecretBase_HardDesk_TopLeft 0x2A7
+#define METATILE_SecretBase_HardDesk_TopMid 0x2BB
+#define METATILE_SecretBase_HardDesk_TopRight 0x2BC
+#define METATILE_SecretBase_HardDesk_MidLeft 0x2AF
+#define METATILE_SecretBase_HardDesk_Center 0x2C3
+#define METATILE_SecretBase_HardDesk_MidRight 0x2C4
+#define METATILE_SecretBase_HardDesk_BottomLeft 0x2B7
+#define METATILE_SecretBase_HardDesk_BottomMid 0x2CB
+#define METATILE_SecretBase_HardDesk_BottomRight 0x2CC
+#define METATILE_SecretBase_PrettyDesk_TopLeft 0x2BD
+#define METATILE_SecretBase_PrettyDesk_TopMid 0x2BE
+#define METATILE_SecretBase_PrettyDesk_TopRight 0x2BF
+#define METATILE_SecretBase_PrettyDesk_MidLeft 0x2C5
+#define METATILE_SecretBase_PrettyDesk_Center 0x2C6
+#define METATILE_SecretBase_PrettyDesk_MidRight 0x2C7
+#define METATILE_SecretBase_PrettyDesk_BottomLeft 0x2CD
+#define METATILE_SecretBase_PrettyDesk_BottomMid 0x2CE
+#define METATILE_SecretBase_PrettyDesk_BottomRight 0x2CF
+#define METATILE_SecretBase_SmallChair 0x2B8
+#define METATILE_SecretBase_PokemonChair 0x2B9
+#define METATILE_SecretBase_HeavyChair 0x2BA
+#define METATILE_SecretBase_PrettyChair 0x2C0
+#define METATILE_SecretBase_ComfortChair 0x2C1
+#define METATILE_SecretBase_RaggedChair 0x2C2
+#define METATILE_SecretBase_BrickChair 0x2C8
+#define METATILE_SecretBase_CampChair 0x2C9
+#define METATILE_SecretBase_HardChair 0x2Ca
+#define METATILE_SecretBase_RedPlant_Base1 0x2D8
+#define METATILE_SecretBase_RedPlant_Base2 0x2D9
+#define METATILE_SecretBase_TropicalPlant_Base1 0x2DA
+#define METATILE_SecretBase_TropicalPlant_Base2 0x2DB
+#define METATILE_SecretBase_PrettyFlower_Base1 0x2DC
+#define METATILE_SecretBase_PrettyFlower_Base2 0x2DD
+#define METATILE_SecretBase_ColorfulFlowers_BaseLeft1 0x2E8
+#define METATILE_SecretBase_ColorfulFlowers_BaseRight1 0x2E9
+#define METATILE_SecretBase_ColorfulFlowers_BaseLeft2 0x2EA
+#define METATILE_SecretBase_ColorfulFlowers_BaseRight2 0x2EB
+#define METATILE_SecretBase_BigPlant_BaseLeft1 0x2EC
+#define METATILE_SecretBase_BigPlant_BaseRight1 0x2ED
+#define METATILE_SecretBase_BigPlant_BaseLeft2 0x2EE
+#define METATILE_SecretBase_BigPlant_BaseRight2 0x2EF
+#define METATILE_SecretBase_GorgeousPlant_BaseLeft1 0x2F8
+#define METATILE_SecretBase_GorgeousPlant_BaseRight1 0x2F9
+#define METATILE_SecretBase_GorgeousPlant_BaseLeft2 0x2FA
+#define METATILE_SecretBase_GorgeousPlant_BaseRight2 0x2FB
+#define METATILE_SecretBase_TV 0x2F4
+#define METATILE_SecretBase_RoundTV 0x2F5
+#define METATILE_SecretBase_CuteTV 0x2F6
+#define METATILE_SecretBase_PikaPoster_Left 0x31C
+#define METATILE_SecretBase_PikaPoster_Right 0x31D
+#define METATILE_SecretBase_LongPoster_Left 0x31E
+#define METATILE_SecretBase_LongPoster_Right 0x31F
+#define METATILE_SecretBase_SeaPoster_Left 0x324
+#define METATILE_SecretBase_SeaPoster_Right 0x325
+#define METATILE_SecretBase_SkyPoster_Left 0x326
+#define METATILE_SecretBase_SkyPoster_Right 0x327
+#define METATILE_SecretBase_KissPoster_Left 0x32C
+#define METATILE_SecretBase_KissPoster_Right 0x32D
+#define METATILE_SecretBase_BallPoster 0x330
+#define METATILE_SecretBase_GreenPoster 0x331
+#define METATILE_SecretBase_RedPoster 0x332
+#define METATILE_SecretBase_BluePoster 0x333
+#define METATILE_SecretBase_CutePoster 0x334
+#define METATILE_SecretBase_SilverShield_Base1 0x2DE
+#define METATILE_SecretBase_SilverShield_Base2 0x2DF
+#define METATILE_SecretBase_GoldShield_Base1 0x336
+#define METATILE_SecretBase_GoldShield_Base2 0x337
+#define METATILE_SecretBase_RedBalloon 0x338
+#define METATILE_SecretBase_BlueBalloon 0x33c
+#define METATILE_SecretBase_YellowBalloon 0x340
+
#endif // GUARD_METATILE_LABELS_H
diff --git a/include/constants/opponents.h b/include/constants/opponents.h
index 79a125bda..cd35cf6b7 100644
--- a/include/constants/opponents.h
+++ b/include/constants/opponents.h
@@ -857,6 +857,10 @@
#define TRAINER_BRENDAN_PLACEHOLDER 853
#define TRAINER_MAY_PLACEHOLDER 854
+// NOTE: Because each Trainer uses a flag to determine when they are defeated, there is only space for 9 additional trainers before trainer flag space overflows
+// More space can be made by shifting flags around in constants/flags.h or changing how trainer flags are handled
+
#define TRAINERS_COUNT 855
+#define MAX_TRAINERS_COUNT 864
#endif // GUARD_CONSTANTS_OPPONENTS_H
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index 5610a470c..97e3f0686 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -80,8 +80,8 @@
#define STAT_ACC 6 // Only in battles.
#define STAT_EVASION 7 // Only in battles.
-#define NUM_STATS 6
-#define NUM_BATTLE_STATS 8
+#define NUM_EV_STATS NUM_STATS - 1 // excludes HP
+#define NUM_BATTLE_STATS NUM_STATS + 2 // includes Accuracy and Evasion
// Shiny odds
#define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536
@@ -213,6 +213,8 @@
#define FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE 7
#define FRIENDSHIP_EVENT_FAINT_LARGE 8
+#define MAX_FRIENDSHIP 0xFF
+
#define STATUS_PRIMARY_NONE 0
#define STATUS_PRIMARY_POISON 1
#define STATUS_PRIMARY_PARALYSIS 2
diff --git a/include/constants/trainers.h b/include/constants/trainers.h
index e5a193770..541b131ca 100644
--- a/include/constants/trainers.h
+++ b/include/constants/trainers.h
@@ -2,9 +2,11 @@
#define GUARD_TRAINERS_H
#include "constants/opponents.h"
+#include "constants/battle_frontier_trainers.h"
// Special Trainer Ids.
-#define TRAINER_RECORD_MIXING_FRIEND 300
+// 0-299 are frontier trainers
+#define TRAINER_RECORD_MIXING_FRIEND FRONTIER_TRAINERS_COUNT
#define TRAINER_RECORD_MIXING_APPRENTICE 400
#define TRAINER_EREADER 500
#define TRAINER_FRONTIER_BRAIN 1022
diff --git a/include/constants/tv.h b/include/constants/tv.h
index fddf650e4..6f686f727 100644
--- a/include/constants/tv.h
+++ b/include/constants/tv.h
@@ -46,4 +46,92 @@
// Number of ribbons to put Spot the Cuties on air
#define NUM_CUTIES_RIBBONS 4
+// TV Show states for Secret Base Secrets
+#define SBSECRETS_STATE_INTRO 0
+#define SBSECRETS_STATE_DO_NEXT1 1
+#define SBSECRETS_STATE_DO_NEXT2 2
+#define SBSECRETS_STATE_TOOK_X_STEPS 3
+#define SBSECRETS_STATE_BASE_INTEREST_LOW 4
+#define SBSECRETS_STATE_BASE_INTEREST_MED 5
+#define SBSECRETS_STATE_BASE_INTEREST_HIGH 6
+#define SBSECRETS_STATE_OUTRO 7
+#define SBSECRETS_STATE_NOTHING_USED1 8
+#define SBSECRETS_STATE_NOTHING_USED2 9
+#define SBSECRETS_STATE_USED_CHAIR 10
+#define SBSECRETS_STATE_USED_BALLOON 11
+#define SBSECRETS_STATE_USED_TENT 12
+#define SBSECRETS_STATE_USED_PLANT 13
+#define SBSECRETS_STATE_USED_GOLD_SHIELD 14
+#define SBSECRETS_STATE_USED_SILVER_SHIELD 15
+#define SBSECRETS_STATE_USED_GLASS_ORNAMENT 16
+#define SBSECRETS_STATE_USED_TV 17
+#define SBSECRETS_STATE_USED_MUD_BALL 18
+#define SBSECRETS_STATE_USED_BAG 19
+#define SBSECRETS_STATE_USED_CUSHION 20
+#define SBSECRETS_STATE_HIT_CUSHION 21
+#define SBSECRETS_STATE_HUGGED_CUSHION 22
+#define SBSECRETS_STATE_BATTLED_WON 23
+#define SBSECRETS_STATE_BATTLED_LOST 24
+#define SBSECRETS_STATE_DECLINED_BATTLE 25
+#define SBSECRETS_STATE_USED_POSTER 26
+#define SBSECRETS_STATE_USED_NOTE_MAT 27
+#define SBSECRETS_STATE_BATTLED_DRAW 28
+#define SBSECRETS_STATE_USED_SPIN_MAT 29
+#define SBSECRETS_STATE_USED_SAND_ORNAMENT 30
+#define SBSECRETS_STATE_USED_DESK 31
+#define SBSECRETS_STATE_USED_BRICK 32
+#define SBSECRETS_STATE_USED_SOLID_BOARD 33
+#define SBSECRETS_STATE_USED_FENCE 34
+#define SBSECRETS_STATE_USED_GLITTER_MAT 35
+#define SBSECRETS_STATE_USED_TIRE 36
+#define SBSECRETS_STATE_USED_STAND 37
+#define SBSECRETS_STATE_USED_BREAKABLE_DOOR 38
+#define SBSECRETS_STATE_USED_DOLL 39
+#define SBSECRETS_STATE_USED_SLIDE 40
+#define SBSECRETS_STATE_DECLINED_SLIDE 41
+#define SBSECRETS_STATE_USED_JUMP_MAT 42
+#define SBSECRETS_NUM_STATES 43
+
+// The below flags are set when interacting with objects in a friends secret base
+// Theyre set as bits in a var, and with 32 flags they're spread across 2 vars
+
+// VAR_SECRET_BASE_LOW_TV_FLAGS
+#define SECRET_BASE_USED_CHAIR (1 << 0)
+#define SECRET_BASE_USED_BALLOON (1 << 1)
+#define SECRET_BASE_USED_TENT (1 << 2)
+#define SECRET_BASE_USED_PLANT (1 << 3)
+#define SECRET_BASE_USED_GOLD_SHIELD (1 << 4)
+#define SECRET_BASE_USED_SILVER_SHIELD (1 << 5)
+#define SECRET_BASE_USED_GLASS_ORNAMENT (1 << 6)
+#define SECRET_BASE_USED_TV (1 << 7)
+#define SECRET_BASE_USED_MUD_BALL (1 << 8)
+#define SECRET_BASE_USED_BAG (1 << 9)
+#define SECRET_BASE_USED_CUSHION (1 << 10)
+#define SECRET_BASE_BATTLED_WON (1 << 11)
+#define SECRET_BASE_BATTLED_LOST (1 << 12)
+#define SECRET_BASE_DECLINED_BATTLE (1 << 13)
+#define SECRET_BASE_USED_POSTER (1 << 14)
+#define SECRET_BASE_USED_NOTE_MAT (1 << 15)
+
+// VAR_SECRET_BASE_HIGH_TV_FLAGS
+#define SECRET_BASE_BATTLED_DRAW (1 << 0)
+#define SECRET_BASE_USED_SPIN_MAT (1 << 1)
+#define SECRET_BASE_USED_SAND_ORNAMENT (1 << 2)
+#define SECRET_BASE_USED_DESK (1 << 3)
+#define SECRET_BASE_USED_BRICK (1 << 4)
+#define SECRET_BASE_USED_SOLID_BOARD (1 << 5)
+#define SECRET_BASE_USED_FENCE (1 << 6)
+#define SECRET_BASE_USED_GLITTER_MAT (1 << 7)
+#define SECRET_BASE_USED_TIRE (1 << 8)
+#define SECRET_BASE_USED_STAND (1 << 9)
+#define SECRET_BASE_USED_BREAKABLE_DOOR (1 << 10)
+#define SECRET_BASE_USED_DOLL (1 << 11)
+#define SECRET_BASE_USED_SLIDE (1 << 12)
+#define SECRET_BASE_DECLINED_SLIDE (1 << 13)
+#define SECRET_BASE_USED_JUMP_MAT (1 << 14)
+#define SECRET_BASE_UNUSED_FLAG (1 << 15)
+
+#define NUM_SECRET_BASE_FLAGS 32 // by definition, bitfield of 2 u16s
+
+
#endif //GUARD_CONSTANTS_TV_H
diff --git a/include/easy_chat.h b/include/easy_chat.h
index 221cbd1da..f2ef066d4 100644
--- a/include/easy_chat.h
+++ b/include/easy_chat.h
@@ -128,10 +128,10 @@ bool32 sub_811F8D8(int word);
void InitializeEasyChatWordArray(u16 *words, u16 length);
u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows);
bool8 ECWord_CheckIfOutsideOfValidRange(u16 word);
-u16 sub_811EE38(u16 group);
+u16 GetRandomEasyChatWordFromGroup(u16 group);
u16 GetNewHipsterPhraseToTeach(void);
u16 EasyChat_GetNumWordsInGroup(u8);
-u16 sub_811EE90(u16);
+u16 GetRandomEasyChatWordFromUnlockedGroup(u16);
void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback, u8 displayedPersonType);
void sub_811F8BC(void);
void UnlockAdditionalPhrase(u8 additionalPhraseId);
diff --git a/include/event_scripts.h b/include/event_scripts.h
index c2716a214..a56ab89e0 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -240,49 +240,49 @@ extern const u8 gTVWhatsNo1InHoennTodayText05[];
extern const u8 gTVWhatsNo1InHoennTodayText06[];
extern const u8 gTVWhatsNo1InHoennTodayText07[];
extern const u8 gTVWhatsNo1InHoennTodayText08[];
-extern const u8 gTVSecretBaseSecretsText00[];
-extern const u8 gTVSecretBaseSecretsText01[];
-extern const u8 gTVSecretBaseSecretsText02[];
-extern const u8 gTVSecretBaseSecretsText03[];
-extern const u8 gTVSecretBaseSecretsText04[];
-extern const u8 gTVSecretBaseSecretsText05[];
-extern const u8 gTVSecretBaseSecretsText06[];
-extern const u8 gTVSecretBaseSecretsText07[];
-extern const u8 gTVSecretBaseSecretsText08[];
-extern const u8 gTVSecretBaseSecretsText09[];
-extern const u8 gTVSecretBaseSecretsText10[];
-extern const u8 gTVSecretBaseSecretsText11[];
-extern const u8 gTVSecretBaseSecretsText12[];
-extern const u8 gTVSecretBaseSecretsText13[];
-extern const u8 gTVSecretBaseSecretsText14[];
-extern const u8 gTVSecretBaseSecretsText15[];
-extern const u8 gTVSecretBaseSecretsText16[];
-extern const u8 gTVSecretBaseSecretsText17[];
-extern const u8 gTVSecretBaseSecretsText18[];
-extern const u8 gTVSecretBaseSecretsText19[];
-extern const u8 gTVSecretBaseSecretsText20[];
-extern const u8 gTVSecretBaseSecretsText21[];
-extern const u8 gTVSecretBaseSecretsText22[];
-extern const u8 gTVSecretBaseSecretsText23[];
-extern const u8 gTVSecretBaseSecretsText24[];
-extern const u8 gTVSecretBaseSecretsText25[];
-extern const u8 gTVSecretBaseSecretsText26[];
-extern const u8 gTVSecretBaseSecretsText27[];
-extern const u8 gTVSecretBaseSecretsText28[];
-extern const u8 gTVSecretBaseSecretsText29[];
-extern const u8 gTVSecretBaseSecretsText30[];
-extern const u8 gTVSecretBaseSecretsText31[];
-extern const u8 gTVSecretBaseSecretsText32[];
-extern const u8 gTVSecretBaseSecretsText33[];
-extern const u8 gTVSecretBaseSecretsText34[];
-extern const u8 gTVSecretBaseSecretsText35[];
-extern const u8 gTVSecretBaseSecretsText36[];
-extern const u8 gTVSecretBaseSecretsText37[];
-extern const u8 gTVSecretBaseSecretsText38[];
-extern const u8 gTVSecretBaseSecretsText39[];
-extern const u8 gTVSecretBaseSecretsText40[];
-extern const u8 gTVSecretBaseSecretsText41[];
-extern const u8 gTVSecretBaseSecretsText42[];
+extern const u8 TVSecretBaseSecrets_Text_Intro[];
+extern const u8 TVSecretBaseSecrets_Text_WhatWillPlayerDoNext1[];
+extern const u8 TVSecretBaseSecrets_Text_WhatWillPlayerDoNext2[];
+extern const u8 TVSecretBaseSecrets_Text_TookXStepsBeforeLeaving[];
+extern const u8 TVSecretBaseSecrets_Text_BaseFailedToInterestPlayer[];
+extern const u8 TVSecretBaseSecrets_Text_PlayerEnjoyedBase[];
+extern const u8 TVSecretBaseSecrets_Text_PlayerHugeFanOfBase[];
+extern const u8 TVSecretBaseSecrets_Text_Outro[];
+extern const u8 TVSecretBaseSecrets_Text_StoppedMoving1[];
+extern const u8 TVSecretBaseSecrets_Text_StoppedMoving2[];
+extern const u8 TVSecretBaseSecrets_Text_UsedChair[];
+extern const u8 TVSecretBaseSecrets_Text_UsedBalloon[];
+extern const u8 TVSecretBaseSecrets_Text_UsedTent[];
+extern const u8 TVSecretBaseSecrets_Text_UsedPlant[];
+extern const u8 TVSecretBaseSecrets_Text_UsedGoldShield[];
+extern const u8 TVSecretBaseSecrets_Text_UsedSilverShield[];
+extern const u8 TVSecretBaseSecrets_Text_UsedGlassOrnament[];
+extern const u8 TVSecretBaseSecrets_Text_UsedTV[];
+extern const u8 TVSecretBaseSecrets_Text_UsedMudBall[];
+extern const u8 TVSecretBaseSecrets_Text_UsedBag[];
+extern const u8 TVSecretBaseSecrets_Text_UsedCushion[];
+extern const u8 TVSecretBaseSecrets_Text_HitCushion[];
+extern const u8 TVSecretBaseSecrets_Text_HuggedCushion[];
+extern const u8 TVSecretBaseSecrets_Text_BattledWon[];
+extern const u8 TVSecretBaseSecrets_Text_BattledLost[];
+extern const u8 TVSecretBaseSecrets_Text_DeclinedBattle[];
+extern const u8 TVSecretBaseSecrets_Text_UsedPoster[];
+extern const u8 TVSecretBaseSecrets_Text_UsedNoteMat[];
+extern const u8 TVSecretBaseSecrets_Text_BattledDraw[];
+extern const u8 TVSecretBaseSecrets_Text_UsedSpinMat[];
+extern const u8 TVSecretBaseSecrets_Text_UsedSandOrnament[];
+extern const u8 TVSecretBaseSecrets_Text_UsedDesk[];
+extern const u8 TVSecretBaseSecrets_Text_UsedBrick[];
+extern const u8 TVSecretBaseSecrets_Text_UsedSolidBoard[];
+extern const u8 TVSecretBaseSecrets_Text_UsedFence[];
+extern const u8 TVSecretBaseSecrets_Text_UsedGlitterMat[];
+extern const u8 TVSecretBaseSecrets_Text_UsedTire[];
+extern const u8 TVSecretBaseSecrets_Text_UsedStand[];
+extern const u8 TVSecretBaseSecrets_Text_BrokeDoor[];
+extern const u8 TVSecretBaseSecrets_Text_UsedDoll[];
+extern const u8 TVSecretBaseSecrets_Text_UsedSlide[];
+extern const u8 TVSecretBaseSecrets_Text_UsedSlideButDidntGoDown[];
+extern const u8 TVSecretBaseSecrets_Text_UsedJumpMat[];
extern const u8 gTVSafariFanClubText00[];
extern const u8 gTVSafariFanClubText01[];
extern const u8 gTVSafariFanClubText02[];
diff --git a/include/fldeff_misc.h b/include/fldeff_misc.h
index fd96f5646..6fd15c1ea 100644
--- a/include/fldeff_misc.h
+++ b/include/fldeff_misc.h
@@ -21,7 +21,7 @@ void ShatterSecretBaseBreakableDoor(s16 x, s16 y);
void PlaySecretBaseMusicNoteMatSound(s16 metatileId);
void DoSecretBaseGlitterMatSparkle(void);
bool8 FldEff_SandPillar(void);
-void GetShieldToyTVDecorationInfo(void);
+void InteractWithShieldOrTVDecoration(void);
bool8 sub_80FADE4(u16 arg0, u8 arg1);
void FldEffPoison_Start(void);
bool32 FldEffPoison_IsActive(void);
diff --git a/include/global.h b/include/global.h
index e721a93ba..34d897a8c 100644
--- a/include/global.h
+++ b/include/global.h
@@ -297,10 +297,11 @@ struct BattleTowerEReaderTrainer
/*0xB8*/ u32 checksum;
};
-struct FrontierMonData
+// For displaying party information on the player's Battle Dome tourney page
+struct DomeMonData
{
u16 moves[MAX_MON_MOVES];
- u8 evs[6];
+ u8 evs[NUM_STATS];
u8 nature;
};
@@ -317,7 +318,7 @@ struct BattleDomeTrainer
u16 trainerId:10;
u16 isEliminated:1;
u16 eliminatedAt:2;
- u16 unk3:3;
+ u16 forfeited:3;
};
#define DOME_TOURNAMENT_TRAINERS_COUNT 16
@@ -332,10 +333,6 @@ struct BattleFrontier
/*0xCA9*/ u8 lvlMode:2;
/*0xCA9*/ u8 challengePaused:1;
/*0xCA9*/ u8 disableRecordBattle:1;
- /*0xCA9*/ u8 unused_CA9_c:1;
- /*0xCA9*/ u8 unused_CA9_d:1;
- /*0xCA9*/ u8 unused_CA9_e:1;
- /*0xCA9*/ u8 unused_CA9_f:1;
/*0xCAA*/ u16 selectedPartyMons[MAX_FRONTIER_PARTY_SIZE];
/*0xCB2*/ u16 curChallengeBattleNum; // Battle number / room number (Pike) / floor number (Pyramid)
/*0xCB4*/ u16 trainerIds[20];
@@ -347,17 +344,17 @@ struct BattleFrontier
/*0xD04*/ u16 towerNumWins; // Increments to MAX_STREAK but never read otherwise
/*0xD06*/ u8 towerBattleOutcome;
/*0xD07*/ u8 towerLvlMode;
- /*0xD08*/ u8 field_D08_0:1;
- /*0xD08*/ u8 field_D08_1:1;
- /*0xD08*/ u8 field_D08_2:1;
- /*0xD08*/ u8 field_D08_3:1;
- /*0xD08*/ u8 field_D08_4:1;
- /*0xD08*/ u8 field_D08_5:1;
- /*0xD08*/ u8 field_D08_6:1;
- /*0xD08*/ u8 field_D08_7:1;
- /*0xD09*/ u8 filler_D09;
- /*0xD0A*/ u8 field_D0A;
- /*0xD0B*/ u8 field_D0B;
+ /*0xD08*/ u8 domeAttemptedSingles50:1;
+ /*0xD08*/ u8 domeAttemptedSinglesOpen:1;
+ /*0xD08*/ u8 domeHasWonSingles50:1;
+ /*0xD08*/ u8 domeHasWonSinglesOpen:1;
+ /*0xD08*/ u8 domeAttemptedDoubles50:1;
+ /*0xD08*/ u8 domeAttemptedDoublesOpen:1;
+ /*0xD08*/ u8 domeHasWonDoubles50:1;
+ /*0xD08*/ u8 domeHasWonDoublesOpen:1;
+ /*0xD09*/ u8 domeUnused;
+ /*0xD0A*/ u8 domeLvlMode;
+ /*0xD0B*/ u8 domeBattleMode;
/*0xD0C*/ u16 domeWinStreaks[2][2];
/*0xD14*/ u16 domeRecordWinStreaks[2][2];
/*0xD1C*/ u16 domeTotalChampionships[2][2];
@@ -392,11 +389,11 @@ struct BattleFrontier
/*0xE6A*/ u16 verdanturfTentPrize;
/*0xE6C*/ u16 fallarborTentPrize;
/*0xE6E*/ u16 slateportTentPrize;
- /*0xE70*/ struct RentalMon rentalMons[PARTY_SIZE];
+ /*0xE70*/ struct RentalMon rentalMons[FRONTIER_PARTY_SIZE * 2];
/*0xEB8*/ u16 battlePoints;
/*0xEBA*/ u16 cardBattlePoints;
/*0xEBC*/ u32 battlesCount;
- /*0xEC0*/ u16 field_EC0[16];
+ /*0xEC0*/ u16 domeWinningMoves[DOME_TOURNAMENT_TRAINERS_COUNT];
/*0xEE0*/ u8 trainerFlags;
/*0xEE1*/ u8 opponentNames[2][PLAYER_NAME_LENGTH + 1];
/*0xEF1*/ u8 opponentTrainerIds[2][TRAINER_ID_LENGTH];
@@ -404,7 +401,7 @@ struct BattleFrontier
/*0xEF9*/ u8 savedGame:1;
/*0xEFA*/ u8 unused_EFA;
/*0xEFB*/ u8 unused_EFB;
- /*0xEFC*/ struct FrontierMonData field_EFC[FRONTIER_PARTY_SIZE];
+ /*0xEFC*/ struct DomeMonData domePlayerPartyData[FRONTIER_PARTY_SIZE];
};
struct ApprenticeQuestion
@@ -934,13 +931,13 @@ struct SaveBlock1
/*0x271C*/ u8 playerRoomDecor[DECOR_MAX_PLAYERS_HOUSE];
/*0x2728*/ u8 playerRoomDecorPos[DECOR_MAX_PLAYERS_HOUSE];
/*0x2734*/ u8 decorDesk[10];
- /*0x????*/ u8 decorChair[10];
- /*0x????*/ u8 decorPlant[10];
- /*0x????*/ u8 decorOrnament[30];
- /*0x????*/ u8 decorMat[30];
- /*0x????*/ u8 decorPoster[10];
- /*0x????*/ u8 decorDoll[40];
- /*0x????*/ u8 decorCushion[10];
+ /*0x273E*/ u8 decorChair[10];
+ /*0x2748*/ u8 decorPlant[10];
+ /*0x2752*/ u8 decorOrnament[30];
+ /*0x2770*/ u8 decorMat[30];
+ /*0x278E*/ u8 decorPoster[10];
+ /*0x2798*/ u8 decorDoll[40];
+ /*0x27C0*/ u8 decorCushion[10];
/*0x27CA*/ u8 padding_27CA[2];
/*0x27CC*/ TVShow tvShows[TV_SHOWS_COUNT];
/*0x2B50*/ PokeNews pokeNews[POKE_NEWS_COUNT];
diff --git a/include/graphics.h b/include/graphics.h
index 146803cfa..a8d4453b0 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4117,19 +4117,19 @@ extern const u16 gTitleScreenBgPalettes[];
extern const u16 gTitleScreenPressStartPal[];
extern const u16 gTitleScreenEmeraldVersionPal[];
-extern const u32 gUnknown_08D83D50[];
-extern const u32 gUnknown_08D84970[];
-extern const u32 gUnknown_08D84F00[];
-extern const u32 gUnknown_08D85444[];
-extern const u32 gUnknown_08D85358[];
-extern const u32 gBattleWindowTextPalette[];
-extern const u32 gUnknown_08D854C8[];
-extern const u32 gUnknown_08D82F10[];
-extern const u32 gUnknown_08D834FC[];
-extern const u32 gUnknown_08D83B2C[];
-extern const u32 gUnknown_08D83C3C[];
-extern const u32 gUnknown_08D83900[];
-extern const u32 gBattleFrontierGfx_DomeOptions[];
+// Battle Dome
+extern const u32 gDomeTourneyInfoCard_Gfx[];
+extern const u32 gDomeTourneyInfoCard_Tilemap[];
+extern const u32 gDomeTourneyInfoCardBg_Tilemap[];
+extern const u32 gDomeTourneyTree_Pal[];
+extern const u32 gDomeTourneyTreeButtons_Pal[];
+extern const u32 gDomeTourneyMatchCardBg_Pal[];
+extern const u32 gDomeTourneyBg_Gfx[];
+extern const u32 gDomeTourneyLine_Gfx[];
+extern const u32 gDomeTourneyLineDown_Tilemap[];
+extern const u32 gDomeTourneyLineUp_Tilemap[];
+extern const u32 gDomeTourneyLineMask_Tilemap[];
+extern const u32 gDomeTourneyTreeButtons_Gfx[];
extern const u16 gTilesetAnims_BattleDomePals0_0[];
extern const u16 gTilesetAnims_BattleDomePals0_1[];
extern const u16 gTilesetAnims_BattleDomePals0_2[];
@@ -4137,6 +4137,9 @@ extern const u16 gTilesetAnims_BattleDomePals0_3[];
extern const u32 gBattleArenaJudgementSymbolsGfx[];
extern const u32 gBattleArenaJudgementSymbolsPalette[];
+
+extern const u32 gBattleWindowTextPalette[];
+
extern const u32 gContest2Pal[];
extern const u32 gBattleAnimSpriteGfx_Bone[];
diff --git a/include/hall_of_fame.h b/include/hall_of_fame.h
index 5c8a01bcb..a83fad2fc 100644
--- a/include/hall_of_fame.h
+++ b/include/hall_of_fame.h
@@ -4,7 +4,7 @@
void CB2_DoHallOfFameScreen(void);
void CB2_DoHallOfFameScreenDontSaveData(void);
void CB2_DoHallOfFamePC(void);
-void sub_8175280(void);
+void DoConfettiEffect(void);
// hof_pc.c
void ReturnFromHallOfFamePC(void);
diff --git a/include/link.h b/include/link.h
index 4d6771a03..f41161d23 100644
--- a/include/link.h
+++ b/include/link.h
@@ -84,7 +84,7 @@
#define LINKTYPE_MULTI_BATTLE 0x2255
#define LINKTYPE_BATTLE_TOWER_50 0x2266
#define LINKTYPE_BATTLE_TOWER_OPEN 0x2277
-#define LINKTYPE_0x2288 0x2288 // battle?
+#define LINKTYPE_BATTLE_TOWER 0x2288
#define LINKTYPE_0x3311 0x3311
#define LINKTYPE_0x3322 0x3322
#define LINKTYPE_BERRY_BLENDER_SETUP 0x4411
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
index 9d56aebcb..dbd7f2895 100644
--- a/include/pokemon_icon.h
+++ b/include/pokemon_icon.h
@@ -16,7 +16,7 @@ void LoadMonIconPalette(u16 species);
void FreeMonIconPalettes(void);
u8 sub_80D2D78(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, bool32 extra);
void FreeMonIconPalette(u16 species);
-void sub_80D2EF8(struct Sprite *sprite);
+void FreeAndDestroyMonIconSprite(struct Sprite *sprite);
u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality, bool32 extra);
u8 UpdateMonIconFrame(struct Sprite *sprite);
void LoadMonIconPalette(u16 species);
diff --git a/include/save.h b/include/save.h
index 5e2cf7267..225b2b62c 100644
--- a/include/save.h
+++ b/include/save.h
@@ -55,13 +55,25 @@ enum
SAVE_HALL_OF_FAME_ERASE_BEFORE // unused
};
+#define SECTOR_ID_SAVEBLOCK2 0
+#define SECTOR_ID_SAVEBLOCK1_START 1
+#define SECTOR_ID_SAVEBLOCK1_END 4
+#define SECTOR_ID_PKMN_STORAGE_START 5
+#define SECTOR_ID_PKMN_STORAGE_END 13
#define SECTOR_SAVE_SLOT_LENGTH 14
+// Save Slot 1: 0-13; Save Slot 2: 14-27
#define SECTOR_ID_HOF_1 28
#define SECTOR_ID_HOF_2 29
#define SECTOR_ID_TRAINER_HILL 30
#define SECTOR_ID_RECORDED_BATTLE 31
#define SECTORS_COUNT 32
+#define SAVE_STATUS_EMPTY 0
+#define SAVE_STATUS_OK 1
+#define SAVE_STATUS_CORRUPT 2
+#define SAVE_STATUS_NO_FLASH 4
+#define SAVE_STATUS_ERROR 0xFF
+
extern u16 gLastWrittenSector;
extern u32 gLastSaveCounter;
extern u16 gLastKnownGoodSector;
@@ -82,13 +94,12 @@ u8 HandleSavingData(u8 saveType);
u8 TrySavingData(u8 saveType);
bool8 sub_8153380(void);
bool8 sub_81533AC(void);
-u8 sub_81533E0(void);
-u8 sub_8153408(void);
-u8 FullSaveGame(void);
+bool8 sub_81533E0(void);
+bool8 sub_8153408(void);
+bool8 FullSaveGame(void);
bool8 CheckSaveFile(void);
-u8 Save_LoadGameData(u8 a1);
+u8 Save_LoadGameData(u8 saveType);
u16 sub_815355C(void);
-u8 sub_81534D0(u8);
u32 TryReadSpecialSaveSection(u8 sector, u8* dst);
u32 TryWriteSpecialSaveSection(u8 sector, u8* src);
void sub_8153688(u8 taskId);
diff --git a/include/secret_base.h b/include/secret_base.h
index 4e323b0c6..b7d36a8ee 100644
--- a/include/secret_base.h
+++ b/include/secret_base.h
@@ -12,13 +12,13 @@ void InitSecretBaseAppearance(bool8 hidePC);
bool8 CurMapIsSecretBase(void);
void SecretBasePerStepCallback(u8 taskId);
bool8 TrySetCurSecretBase(void);
-void SetSecretBaseSecretsTvFlags_Poster(void);
-void SetSecretBaseSecretsTvFlags_MiscFurnature(void);
-void SetSecretBaseSecretsTvFlags_LargeDecorationSpot(void);
-void SetSecretBaseSecretsTvFlags_SmallDecorationSpot(void);
+void CheckInteractedWithFriendsPosterDecor(void);
+void CheckInteractedWithFriendsFurnitureBottom(void);
+void CheckInteractedWithFriendsFurnitureMiddle(void);
+void CheckInteractedWithFriendsFurnitureTop(void);
void WarpIntoSecretBase(const struct MapPosition *position, const struct MapEvents *events);
bool8 SecretBaseMapPopupEnabled(void);
-void sub_80EB218(void);
+void CheckLeftFriendsSecretBase(void);
void ClearSecretBases(void);
void SetCurSecretBaseIdFromPosition(const struct MapPosition *position, const struct MapEvents *events);
void TrySetCurSecretBaseIndex(void);
diff --git a/include/strings.h b/include/strings.h
index fe4e08eeb..eda1c55e4 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1705,120 +1705,120 @@ extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerMAccept[]
extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_SwimmerMReject[];
// Battle Dome.
-extern const u8 gBattleDomeOpponentPotentialText1[];
-extern const u8 gBattleDomeOpponentPotentialText2[];
-extern const u8 gBattleDomeOpponentPotentialText3[];
-extern const u8 gBattleDomeOpponentPotentialText4[];
-extern const u8 gBattleDomeOpponentPotentialText5[];
-extern const u8 gBattleDomeOpponentPotentialText6[];
-extern const u8 gBattleDomeOpponentPotentialText7[];
-extern const u8 gBattleDomeOpponentPotentialText8[];
-extern const u8 gBattleDomeOpponentPotentialText9[];
-extern const u8 gBattleDomeOpponentPotentialText10[];
-extern const u8 gBattleDomeOpponentPotentialText11[];
-extern const u8 gBattleDomeOpponentPotentialText12[];
-extern const u8 gBattleDomeOpponentPotentialText13[];
-extern const u8 gBattleDomeOpponentPotentialText14[];
-extern const u8 gBattleDomeOpponentPotentialText15[];
-extern const u8 gBattleDomeOpponentPotentialText16[];
-extern const u8 gBattleDomeOpponentPotentialText17[];
-extern const u8 gBattleDomeOpponentStyleText1[];
-extern const u8 gBattleDomeOpponentStyleText2[];
-extern const u8 gBattleDomeOpponentStyleText3[];
-extern const u8 gBattleDomeOpponentStyleText4[];
-extern const u8 gBattleDomeOpponentStyleText5[];
-extern const u8 gBattleDomeOpponentStyleText6[];
-extern const u8 gBattleDomeOpponentStyleText7[];
-extern const u8 gBattleDomeOpponentStyleText8[];
-extern const u8 gBattleDomeOpponentStyleText9[];
-extern const u8 gBattleDomeOpponentStyleText10[];
-extern const u8 gBattleDomeOpponentStyleText11[];
-extern const u8 gBattleDomeOpponentStyleText12[];
-extern const u8 gBattleDomeOpponentStyleText13[];
-extern const u8 gBattleDomeOpponentStyleText14[];
-extern const u8 gBattleDomeOpponentStyleText15[];
-extern const u8 gBattleDomeOpponentStyleText16[];
-extern const u8 gBattleDomeOpponentStyleText17[];
-extern const u8 gBattleDomeOpponentStyleText18[];
-extern const u8 gBattleDomeOpponentStyleText19[];
-extern const u8 gBattleDomeOpponentStyleText20[];
-extern const u8 gBattleDomeOpponentStyleText21[];
-extern const u8 gBattleDomeOpponentStyleText22[];
-extern const u8 gBattleDomeOpponentStyleText23[];
-extern const u8 gBattleDomeOpponentStyleText24[];
-extern const u8 gBattleDomeOpponentStyleText25[];
-extern const u8 gBattleDomeOpponentStyleText26[];
-extern const u8 gBattleDomeOpponentStyleText27[];
-extern const u8 gBattleDomeOpponentStyleText28[];
-extern const u8 gBattleDomeOpponentStyleTextUnused1[];
-extern const u8 gBattleDomeOpponentStyleTextUnused2[];
-extern const u8 gBattleDomeOpponentStyleTextUnused3[];
-extern const u8 gBattleDomeOpponentStyleTextUnused4[];
-extern const u8 gBattleDomeOpponentStatsText1[];
-extern const u8 gBattleDomeOpponentStatsText2[];
-extern const u8 gBattleDomeOpponentStatsText3[];
-extern const u8 gBattleDomeOpponentStatsText4[];
-extern const u8 gBattleDomeOpponentStatsText5[];
-extern const u8 gBattleDomeOpponentStatsText6[];
-extern const u8 gBattleDomeOpponentStatsText7[];
-extern const u8 gBattleDomeOpponentStatsText8[];
-extern const u8 gBattleDomeOpponentStatsText9[];
-extern const u8 gBattleDomeOpponentStatsText10[];
-extern const u8 gBattleDomeOpponentStatsText11[];
-extern const u8 gBattleDomeOpponentStatsText12[];
-extern const u8 gBattleDomeOpponentStatsText13[];
-extern const u8 gBattleDomeOpponentStatsText14[];
-extern const u8 gBattleDomeOpponentStatsText15[];
-extern const u8 gBattleDomeOpponentStatsText16[];
-extern const u8 gBattleDomeOpponentStatsText17[];
-extern const u8 gBattleDomeOpponentStatsText18[];
-extern const u8 gBattleDomeOpponentStatsText19[];
-extern const u8 gBattleDomeOpponentStatsText20[];
-extern const u8 gBattleDomeOpponentStatsText21[];
-extern const u8 gBattleDomeOpponentStatsText22[];
-extern const u8 gBattleDomeOpponentStatsText23[];
-extern const u8 gBattleDomeOpponentStatsText24[];
-extern const u8 gBattleDomeOpponentStatsText25[];
-extern const u8 gBattleDomeOpponentStatsText26[];
-extern const u8 gBattleDomeOpponentStatsText27[];
-extern const u8 gBattleDomeOpponentStatsText28[];
-extern const u8 gBattleDomeOpponentStatsText29[];
-extern const u8 gBattleDomeOpponentStatsText30[];
-extern const u8 gBattleDomeOpponentStatsText31[];
-extern const u8 gBattleDomeOpponentStatsText32[];
-extern const u8 gBattleDomeOpponentStatsText33[];
-extern const u8 gBattleDomeOpponentStatsText34[];
-extern const u8 gBattleDomeOpponentStatsText35[];
-extern const u8 gBattleDomeOpponentStatsText36[];
-extern const u8 gBattleDomeOpponentStatsText37[];
-extern const u8 gBattleDomeOpponentStatsText38[];
-extern const u8 gBattleDomeOpponentStatsText39[];
-extern const u8 gBattleDomeOpponentStatsText40[];
-extern const u8 gBattleDomeOpponentStatsText41[];
-extern const u8 gBattleDomeOpponentStatsText42[];
-extern const u8 gBattleDomeOpponentStatsText43[];
-extern const u8 gBattleDomeMatchNumberText1[];
-extern const u8 gBattleDomeMatchNumberText2[];
-extern const u8 gBattleDomeMatchNumberText3[];
-extern const u8 gBattleDomeMatchNumberText4[];
-extern const u8 gBattleDomeMatchNumberText5[];
-extern const u8 gBattleDomeMatchNumberText6[];
-extern const u8 gBattleDomeMatchNumberText7[];
-extern const u8 gBattleDomeMatchNumberText8[];
-extern const u8 gBattleDomeMatchNumberText9[];
-extern const u8 gBattleDomeMatchNumberText10[];
-extern const u8 gBattleDomeMatchNumberText11[];
-extern const u8 gBattleDomeMatchNumberText12[];
-extern const u8 gBattleDomeMatchNumberText13[];
-extern const u8 gBattleDomeMatchNumberText14[];
-extern const u8 gBattleDomeMatchNumberText15[];
-extern const u8 gBattleDomeWinText1[];
-extern const u8 gBattleDomeWinText2[];
-extern const u8 gBattleDomeWinText3[];
-extern const u8 gBattleDomeWinText4[];
-extern const u8 gBattleDomeWinText5[];
-extern const u8 gBattleDomeWinText6[];
-extern const u8 gBattleDomeWinText7[];
+extern const u8 BattleDome_Text_Potential1[];
+extern const u8 BattleDome_Text_Potential2[];
+extern const u8 BattleDome_Text_Potential3[];
+extern const u8 BattleDome_Text_Potential4[];
+extern const u8 BattleDome_Text_Potential5[];
+extern const u8 BattleDome_Text_Potential6[];
+extern const u8 BattleDome_Text_Potential7[];
+extern const u8 BattleDome_Text_Potential8[];
+extern const u8 BattleDome_Text_Potential9[];
+extern const u8 BattleDome_Text_Potential10[];
+extern const u8 BattleDome_Text_Potential11[];
+extern const u8 BattleDome_Text_Potential12[];
+extern const u8 BattleDome_Text_Potential13[];
+extern const u8 BattleDome_Text_Potential14[];
+extern const u8 BattleDome_Text_Potential15[];
+extern const u8 BattleDome_Text_Potential16[];
+extern const u8 BattleDome_Text_PotentialDomeAceTucker[];
+extern const u8 BattleDome_Text_StyleRiskDisaster[];
+extern const u8 BattleDome_Text_StyleEndureLongBattles[];
+extern const u8 BattleDome_Text_StyleVariesTactics[];
+extern const u8 BattleDome_Text_StyleToughWinningPattern[];
+extern const u8 BattleDome_Text_StyleUsesVeryRareMove[];
+extern const u8 BattleDome_Text_StyleUsesStartlingMoves[];
+extern const u8 BattleDome_Text_StyleConstantlyWatchesHP[];
+extern const u8 BattleDome_Text_StyleStoresAndLoosesPower[];
+extern const u8 BattleDome_Text_StyleEnfeeblesFoes[];
+extern const u8 BattleDome_Text_StylePrefersLuckTactics[];
+extern const u8 BattleDome_Text_StyleRegalAtmosphere[];
+extern const u8 BattleDome_Text_StylePowerfulLowPPMoves[];
+extern const u8 BattleDome_Text_StyleEnfeebleThenAttack[];
+extern const u8 BattleDome_Text_StyleBattlesWhileEnduring[];
+extern const u8 BattleDome_Text_StyleUpsetsFoesEmotionally[];
+extern const u8 BattleDome_Text_StyleStrongAndStraightforward[];
+extern const u8 BattleDome_Text_StyleAggressivelyStrongMoves[];
+extern const u8 BattleDome_Text_StyleCleverlyDodgesAttacks[];
+extern const u8 BattleDome_Text_StyleUsesUpsettingMoves[];
+extern const u8 BattleDome_Text_StyleUsesPopularMoves[];
+extern const u8 BattleDome_Text_StyleHasPowerfulComboMoves[];
+extern const u8 BattleDome_Text_StyleUsesHighProbabilityMoves[];
+extern const u8 BattleDome_Text_StyleAggressivelySpectacularMoves[];
+extern const u8 BattleDome_Text_StyleEmphasizesOffenseOverDefense[];
+extern const u8 BattleDome_Text_StyleEmphasizesDefenseOverOffense[];
+extern const u8 BattleDome_Text_StyleAttacksQuicklyStrongMoves[];
+extern const u8 BattleDome_Text_StyleUsesAddedEffectMoves[];
+extern const u8 BattleDome_Text_StyleUsesBalancedMixOfMoves[];
+extern const u8 BattleDome_Text_StyleSampleMessage1[];
+extern const u8 BattleDome_Text_StyleSampleMessage2[];
+extern const u8 BattleDome_Text_StyleSampleMessage3[];
+extern const u8 BattleDome_Text_StyleSampleMessage4[];
+extern const u8 BattleDome_Text_EmphasizesHPAndAtk[];
+extern const u8 BattleDome_Text_EmphasizesHPAndDef[];
+extern const u8 BattleDome_Text_EmphasizesHPAndSpeed[];
+extern const u8 BattleDome_Text_EmphasizesHPAndSpAtk[];
+extern const u8 BattleDome_Text_EmphasizesHPAndSpDef[];
+extern const u8 BattleDome_Text_EmphasizesAtkAndDef[];
+extern const u8 BattleDome_Text_EmphasizesAtkAndSpeed[];
+extern const u8 BattleDome_Text_EmphasizesAtkAndSpAtk[];
+extern const u8 BattleDome_Text_EmphasizesAtkAndSpDef[];
+extern const u8 BattleDome_Text_EmphasizesDefAndSpeed[];
+extern const u8 BattleDome_Text_EmphasizesDefAndSpAtk[];
+extern const u8 BattleDome_Text_EmphasizesDefAndSpDef[];
+extern const u8 BattleDome_Text_EmphasizesSpeedAndSpAtk[];
+extern const u8 BattleDome_Text_EmphasizesSpeedAndSpDef[];
+extern const u8 BattleDome_Text_EmphasizesSpAtkAndSpDef[];
+extern const u8 BattleDome_Text_EmphasizesHP[];
+extern const u8 BattleDome_Text_EmphasizesAtk[];
+extern const u8 BattleDome_Text_EmphasizesDef[];
+extern const u8 BattleDome_Text_EmphasizesSpeed[];
+extern const u8 BattleDome_Text_EmphasizesSpAtk[];
+extern const u8 BattleDome_Text_EmphasizesSpDef[];
+extern const u8 BattleDome_Text_NeglectsHPAndAtk[];
+extern const u8 BattleDome_Text_NeglectsHPAndDef[];
+extern const u8 BattleDome_Text_NeglectsHPAndSpeed[];
+extern const u8 BattleDome_Text_NeglectsHPAndSpAtk[];
+extern const u8 BattleDome_Text_NeglectsHPAndSpDef[];
+extern const u8 BattleDome_Text_NeglectsAtkAndDef[];
+extern const u8 BattleDome_Text_NeglectsAtkAndSpeed[];
+extern const u8 BattleDome_Text_NeglectsAtkAndSpAtk[];
+extern const u8 BattleDome_Text_NeglectsAtkAndSpDef[];
+extern const u8 BattleDome_Text_NeglectsDefAndSpeed[];
+extern const u8 BattleDome_Text_NeglectsDefAndSpAtk[];
+extern const u8 BattleDome_Text_NeglectsDefAndSpDef[];
+extern const u8 BattleDome_Text_NeglectsSpeedAndSpAtk[];
+extern const u8 BattleDome_Text_NeglectsSpeedAndSpDef[];
+extern const u8 BattleDome_Text_NeglectsSpAtkAndSpDef[];
+extern const u8 BattleDome_Text_NeglectsHP[];
+extern const u8 BattleDome_Text_NeglectsAtk[];
+extern const u8 BattleDome_Text_NeglectsDef[];
+extern const u8 BattleDome_Text_NeglectsSpeed[];
+extern const u8 BattleDome_Text_NeglectsSpAtk[];
+extern const u8 BattleDome_Text_NeglectsSpDef[];
+extern const u8 BattleDome_Text_RaisesMonsWellBalanced[];
+extern const u8 BattleDome_Text_Round1Match1[];
+extern const u8 BattleDome_Text_Round1Match2[];
+extern const u8 BattleDome_Text_Round1Match3[];
+extern const u8 BattleDome_Text_Round1Match4[];
+extern const u8 BattleDome_Text_Round1Match5[];
+extern const u8 BattleDome_Text_Round1Match6[];
+extern const u8 BattleDome_Text_Round1Match7[];
+extern const u8 BattleDome_Text_Round1Match8[];
+extern const u8 BattleDome_Text_Round2Match1[];
+extern const u8 BattleDome_Text_Round2Match2[];
+extern const u8 BattleDome_Text_Round2Match3[];
+extern const u8 BattleDome_Text_Round2Match4[];
+extern const u8 BattleDome_Text_SemifinalMatch1[];
+extern const u8 BattleDome_Text_SemifinalMatch2[];
+extern const u8 BattleDome_Text_FinalMatch[];
+extern const u8 BattleDome_Text_LetTheBattleBegin[];
+extern const u8 BattleDome_Text_TrainerWonUsingMove[];
+extern const u8 BattleDome_Text_TrainerBecameChamp[];
+extern const u8 BattleDome_Text_TrainerWonByDefault[];
+extern const u8 BattleDome_Text_TrainerWonOutrightByDefault[];
+extern const u8 BattleDome_Text_TrainerWonNoMoves[];
+extern const u8 BattleDome_Text_TrainerWonOutrightNoMoves[];
// Battle Pyramid.
extern const u8 BattlePyramid_Text_ExitHintUp1[];
@@ -1948,8 +1948,6 @@ extern const u8 BattlePyramid_Text_FiveTrainersRemaining6[];
extern const u8 BattlePyramid_Text_SixTrainersRemaining6[];
extern const u8 BattlePyramid_Text_SevenTrainersRemaining6[];
-
-
// PC strings
extern const u8 gText_ExitFromBox[];
extern const u8 gText_WhatDoYouWantToDo[];
diff --git a/include/tv.h b/include/tv.h
index dc4b22a99..8e9233c2b 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -18,7 +18,7 @@ void TryPutTrainerFanClubOnAir(void);
void IncrementDailyPlantedBerries(void);
void IncrementDailyPickedBerries(void);
void IncrementDailyBattlePoints(u16 delta);
-void sub_80F01B8(void);
+void HideBattleTowerReporter(void);
void ReceiveTvShowsData(void *src, u32 size, u8 masterIdx);
void TryPutSpotTheCutiesOnAir(struct Pokemon *pokemon, u8 ribbonMonDataIdx);
u32 GetPlayerIDAsU32(void);
@@ -29,7 +29,7 @@ u8 GetRibbonCount(struct Pokemon *pokemon);
void AlertTVThatPlayerPlayedSlotMachine(u16 nCoinsSpent);
void AlertTVThatPlayerPlayedRoulette(u16 nCoinsSpent);
void AlertTVOfNewCoinTotal(u16 nCoinsPaidOut);
-void sub_80EEA70(void);
+void TryPutSecretBaseSecretsOnAir(void);
void sub_80EDB44(void);
void sub_80EDC60(const u16 *words);
void sub_80EDA80(void);