summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorGriffinR <griffin.richards@comcast.net>2019-11-25 20:00:04 -0500
committerGriffinR <griffin.richards@comcast.net>2019-11-25 20:00:04 -0500
commitf559fa3fe26910056e84315370cb13ec8501af18 (patch)
tree498c7ed00243cf03420451fdde3e04ac36add55c /include
parent4c52cf9ed15f01f949fbf2139444f674694e446d (diff)
parent6efa51f8ad7b62a3a12c81f1d0bf299be31718b0 (diff)
Merge master into ObjEvent rename
Diffstat (limited to 'include')
-rw-r--r--include/apprentice.h8
-rw-r--r--include/battle_anim.h4
-rw-r--r--include/battle_message.h2
-rw-r--r--include/constants/apprentice.h100
-rw-r--r--include/constants/battle_anim.h2
-rw-r--r--include/constants/battle_frontier.h24
-rw-r--r--include/constants/battle_pike.h19
-rw-r--r--include/constants/frontier_util.h73
-rw-r--r--include/constants/global.h25
-rwxr-xr-xinclude/constants/layouts.h6
-rwxr-xr-xinclude/constants/map_groups.h6
-rw-r--r--include/constants/pokemon.h4
-rw-r--r--include/constants/trainer_hill.h34
-rw-r--r--include/constants/trainers.h82
-rw-r--r--include/frontier_util.h8
-rw-r--r--include/global.h122
-rw-r--r--include/graphics.h4
-rw-r--r--include/item_menu.h2
-rw-r--r--include/strings.h63
-rw-r--r--include/tv.h4
20 files changed, 411 insertions, 181 deletions
diff --git a/include/apprentice.h b/include/apprentice.h
index 195106c53..27ce0371e 100644
--- a/include/apprentice.h
+++ b/include/apprentice.h
@@ -1,21 +1,21 @@
#ifndef GUARD_APPRENTICE_H
#define GUARD_APPRENTICE_H
-#define APPRENTICE_SPECIES_COUNT 10
+#include "constants/apprentice.h"
struct ApprenticeTrainer
{
- u8 name[6][PLAYER_NAME_LENGTH + 1]; // For all six languages.
+ u8 name[NUM_LANGUAGES - 1][PLAYER_NAME_LENGTH + 1]; // For all languages except the unused one.
u16 otId;
u8 facilityClass;
u16 species[APPRENTICE_SPECIES_COUNT];
u8 id;
- u16 easyChatWords[6];
+ u16 speechLost[EASY_CHAT_BATTLE_WORDS_COUNT];
};
extern const struct ApprenticeTrainer gApprentices[];
-void CopyFriendsApprenticeChallengeText(u8 saveblockApprenticeId);
+void BufferApprenticeChallengeText(u8 saveApprenticeId);
void Apprentice_EnableBothScriptContexts(void);
void ResetApprenticeStruct(struct Apprentice *apprentice);
void ResetAllApprenticeData(void);
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 503e23df2..c3019a5cf 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -185,7 +185,7 @@ bool8 IsBattlerSpritePresent(u8 battlerId);
void sub_80A6C68(u32 arg0);
u8 GetAnimBattlerSpriteId(u8 wantedBattler);
bool8 IsDoubleBattle(void);
-u8 sub_80A6D94(void);
+u8 GetBattleBgPaletteNum(void);
u8 GetBattlerSpriteBGPriorityRank(u8 battlerId);
void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite*));
void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite);
@@ -231,7 +231,7 @@ void AnimWaterPulseRing(struct Sprite *sprite);
void sub_810E2C8(struct Sprite *sprite);
// smokescreen.c
-u8 sub_807521C(s16 x, s16 y, u8 a3);
+u8 SmokescreenImpact(s16 x, s16 y, u8 a3);
u32 UnpackSelectedBattleAnimPalettes(s16);
diff --git a/include/battle_message.h b/include/battle_message.h
index 1157fbfae..a3f2636e5 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -259,7 +259,7 @@ extern const u8 gText_Love[];
extern const u8 gText_SpaceAndSpace[];
extern const u8 gText_CommaSpace[];
extern const u8 gText_Space2[];
-extern const u8 gText_ScrollTextUp[];
+extern const u8 gText_LineBreak[];
extern const u8 gText_NewLine[];
extern const u8 gText_Are[];
extern const u8 gText_Are2[];
diff --git a/include/constants/apprentice.h b/include/constants/apprentice.h
index 9db58bb8e..63434a4fc 100644
--- a/include/constants/apprentice.h
+++ b/include/constants/apprentice.h
@@ -1,22 +1,88 @@
#ifndef GUARD_CONSTANTS_APPRENTICE_H
#define GUARD_CONSTANTS_APPRENTICE_H
-#define APPRENTICE_ASK_WHICH_LEVEL 0
-#define APPRENTICE_ASK_3SPECIES 1
-#define APPRENTICE_ASK_2SPECIES 2
-#define APPRENTICE_ASK_MOVES 3
-#define APPRENTICE_ASK_GIVE 4
-#define APPRENTICE_ASK_YES_NO 6
-
-#define APPRENTICE_BUFF_SPECIES1 0
-#define APPRENTICE_BUFF_SPECIES2 1
-#define APPRENTICE_BUFF_SPECIES3 2
-#define APPRENTICE_BUFF_MOVE1 3
-#define APPRENTICE_BUFF_MOVE2 4
-#define APPRENTICE_BUFF_ITEM 5
-#define APPRENTICE_BUFF_NAME 6
-#define APPRENTICE_BUFF_EASY_CHAT 7
-#define APPRENTICE_BUFF_LEVEL 8
-#define APPRENTICE_BUFF_SPECIES4 9
+#define NUM_APPRENTICES 16
+#define APPRENTICE_SPECIES_COUNT 10
+
+#define NUM_WHICH_MON_QUESTIONS MULTI_PARTY_SIZE
+#define NUM_WHICH_MOVE_QUESTIONS 5
+
+#define APPRENTICE_LVL_MODE_50 (FRONTIER_LVL_50 + 1)
+#define APPRENTICE_LVL_MODE_OPEN (FRONTIER_LVL_OPEN + 1)
+
+#define APPRENTICE_FUNC_GAVE_LVLMODE 0
+#define APPRENTICE_FUNC_SET_LVLMODE 1
+#define APPRENTICE_FUNC_SET_ID 2
+#define APPRENTICE_FUNC_SHUFFLE_SPECIES 3
+#define APPRENTICE_FUNC_RANDOMIZE_QUESTIONS 4
+#define APPRENTICE_FUNC_ANSWERED_QUESTION 5
+#define APPRENTICE_FUNC_IS_FINAL_QUESTION 6
+#define APPRENTICE_FUNC_MENU 7
+#define APPRENTICE_FUNC_PRINT_MSG 8
+#define APPRENTICE_FUNC_RESET 9
+#define APPRENTICE_FUNC_CHECK_GONE 10
+#define APPRENTICE_FUNC_GET_QUESTION 11
+#define APPRENTICE_FUNC_GET_NUM_PARTY_MONS 12
+#define APPRENTICE_FUNC_SET_PARTY_MON 13
+#define APPRENTICE_FUNC_INIT_QUESTION_DATA 14
+#define APPRENTICE_FUNC_FREE_QUESTION_DATA 15
+#define APPRENTICE_FUNC_BUFFER_STRING 16
+#define APPRENTICE_FUNC_SET_MOVE 17
+#define APPRENTICE_FUNC_SET_LEAD_MON 18
+#define APPRENTICE_FUNC_OPEN_BAG 19
+#define APPRENTICE_FUNC_TRY_SET_HELD_ITEM 20
+#define APPRENTICE_FUNC_SAVE 21
+#define APPRENTICE_FUNC_SET_GFX_SAVED 22
+#define APPRENTICE_FUNC_SET_GFX 23
+#define APPRENTICE_FUNC_SHOULD_LEAVE 24
+#define APPRENTICE_FUNC_SHIFT_SAVED 25
+
+#define APPRENTICE_MSG_PLEASE_TEACH 0
+#define APPRENTICE_MSG_REJECT 1
+#define APPRENTICE_MSG_WHICH_LVL_MODE 2
+#define APPRENTICE_MSG_THANKS_LVL_MODE 3
+#define APPRENTICE_MSG_WHICH_MON_FIRST 4
+#define APPRENTICE_MSG_THANKS_MON_FIRST 5
+#define APPRENTICE_MSG_WHICH_MON 6
+#define APPRENTICE_MSG_THANKS_MON 7
+#define APPRENTICE_MSG_WHICH_MOVE 8
+#define APPRENTICE_MSG_THANKS_MOVE 9
+#define APPRENTICE_MSG_WHAT_HELD_ITEM 10
+#define APPRENTICE_MSG_PICK_WIN_SPEECH 11
+#define APPRENTICE_MSG_THANKS_HELD_ITEM 12
+#define APPRENTICE_MSG_HOLD_NOTHING 13
+#define APPRENTICE_MSG_THANKS_NO_HELD_ITEM 14
+#define APPRENTICE_MSG_THANKS_WIN_SPEECH 15
+#define APPRENTICE_MSG_ITEM_ALREADY_SUGGESTED 16
+
+#define APPRENTICE_QUESTION_WHICH_FIRST 1
+#define APPRENTICE_QUESTION_WHICH_MON 2
+#define APPRENTICE_QUESTION_WHICH_MOVE 3
+#define APPRENTICE_QUESTION_WHAT_ITEM 4
+#define APPRENTICE_QUESTION_WIN_SPEECH 5
+
+// Would be redundant with the above set if they used the same values
+#define QUESTION_ID_WIN_SPEECH 0
+#define QUESTION_ID_WHAT_ITEM 1
+#define QUESTION_ID_WHICH_MOVE 2
+#define QUESTION_ID_WHICH_FIRST 3
+
+#define APPRENTICE_ASK_WHICH_LEVEL 0
+#define APPRENTICE_ASK_3SPECIES 1
+#define APPRENTICE_ASK_2SPECIES 2
+#define APPRENTICE_ASK_MOVES 3
+#define APPRENTICE_ASK_GIVE 4
+#define APPRENTICE_ASK_YES_NO 6
+
+#define APPRENTICE_BUFF_SPECIES1 0
+#define APPRENTICE_BUFF_SPECIES2 1
+#define APPRENTICE_BUFF_SPECIES3 2
+#define APPRENTICE_BUFF_MOVE1 3
+#define APPRENTICE_BUFF_MOVE2 4
+#define APPRENTICE_BUFF_ITEM 5
+#define APPRENTICE_BUFF_NAME 6
+#define APPRENTICE_BUFF_WIN_SPEECH 7
+#define APPRENTICE_BUFF_LEVEL 8
+#define APPRENTICE_BUFF_LEAD_MON_SPECIES 9
#endif // GUARD_CONSTANTS_APPRENTICE_H
diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h
index 0a023f0c2..0fe231cdc 100644
--- a/include/constants/battle_anim.h
+++ b/include/constants/battle_anim.h
@@ -237,7 +237,7 @@
#define ANIM_TAG_SPOTLIGHT (ANIM_SPRITES_START + 227)
#define ANIM_TAG_LETTER_Z (ANIM_SPRITES_START + 228)
#define ANIM_TAG_RAPID_SPIN (ANIM_SPRITES_START + 229)
-#define ANIM_TAG_TRI_FORCE_TRIANGLE (ANIM_SPRITES_START + 230)
+#define ANIM_TAG_TRI_ATTACK_TRIANGLE (ANIM_SPRITES_START + 230)
#define ANIM_TAG_WISP_ORB (ANIM_SPRITES_START + 231)
#define ANIM_TAG_WISP_FIRE (ANIM_SPRITES_START + 232)
#define ANIM_TAG_GOLD_STARS (ANIM_SPRITES_START + 233)
diff --git a/include/constants/battle_frontier.h b/include/constants/battle_frontier.h
index 54d50c18a..0bf1ba02b 100644
--- a/include/constants/battle_frontier.h
+++ b/include/constants/battle_frontier.h
@@ -12,7 +12,8 @@
#define FRONTIER_FACILITY_PIKE 5
#define FRONTIER_FACILITY_PYRAMID 6
#define NUM_FRONTIER_FACILITIES 7
-// The multiplayer battle colosseum rooms re-use VAR_FRONTIER_FACILITY.
+// VAR_FRONTIER_FACILITY is re-used for the below facilities as well
+#define FACILITY_LINK_CONTEST 7
#define FACILITY_UNION_ROOM 8
#define FACILITY_MULTI_OR_EREADER 9 // Direct Corner multi battles, multi battle with Steven, and e-Reader battles
@@ -21,15 +22,22 @@
#define TENT_SLATEPORT 4
// Battle Frontier lvl modes.
-#define FRONTIER_LVL_50 0
+#define FRONTIER_LVL_50 0
#define FRONTIER_LVL_OPEN 1
#define FRONTIER_LVL_TENT 2
// Battle Frontier battle modes.
-#define FRONTIER_MODE_SINGLES 0
-#define FRONTIER_MODE_DOUBLES 1
-#define FRONTIER_MODE_MULTIS 2
-#define FRONTIER_MODE_LINK_MULTIS 3
+#define FRONTIER_MODE_SINGLES 0
+#define FRONTIER_MODE_DOUBLES 1
+#define FRONTIER_MODE_MULTIS 2
+#define FRONTIER_MODE_LINK_MULTIS 3
+#define FRONTIER_MODE_COUNT 4
+
+// Challenge Statuses
+#define CHALLENGE_STATUS_SAVING 1
+#define CHALLENGE_STATUS_PAUSED 2
+#define CHALLENGE_STATUS_WON 3
+#define CHALLENGE_STATUS_LOST 4
// Special trainer battles.
#define SPECIAL_BATTLE_TOWER 0
@@ -45,6 +53,7 @@
#define SPECIAL_BATTLE_PYRAMID 10
#define MAX_BATTLE_FRONTIER_POINTS 9999
+#define MAX_STREAK 9999
// These sets of facility ids would be redunant if the order was consistent
// The order is important for this set so that all the non-link records can be continuous
@@ -86,9 +95,6 @@
#define FRONTIER_GAMBLER_CHALLENGE_COUNT 12
-// For 'ShowFacilityResultsWindow' function which is a part of the 'CallFrontierUtilFunc' special.
-#define RESULTS_LINK_CONTEST 7
-
#define EXCHANGE_CORNER_DECOR1_CLERK 0
#define EXCHANGE_CORNER_DECOR2_CLERK 1
#define EXCHANGE_CORNER_VITAMIN_CLERK 2
diff --git a/include/constants/battle_pike.h b/include/constants/battle_pike.h
index e92c4a006..4fb20550e 100644
--- a/include/constants/battle_pike.h
+++ b/include/constants/battle_pike.h
@@ -10,6 +10,17 @@
#define PIKE_ROOM_HARD_BATTLE 6
#define PIKE_ROOM_DOUBLE_BATTLE 7
#define PIKE_ROOM_BRAIN 8
+#define NUM_PIKE_ROOM_TYPES 9
+
+#define PIKE_ROOM_LEFT 0
+#define PIKE_ROOM_CENTER 1
+#define PIKE_ROOM_RIGHT 2
+
+#define PIKE_HINT_NOSTALGIA 0
+#define PIKE_HINT_WHISPERING 1
+#define PIKE_HINT_POKEMON 2
+#define PIKE_HINT_PEOPLE 3
+#define PIKE_HINT_BRAIN 4
// For the room with a status effect.
#define PIKE_STATUS_KIRLIA 0
@@ -19,8 +30,8 @@
#define BATTLE_PIKE_FUNC_SET_ROOM_TYPE 0
#define BATTLE_PIKE_FUNC_GET_DATA 1
#define BATTLE_PIKE_FUNC_SET_DATA 2
-#define BATTLE_PIKE_FUNC_IN_FINAL_ROOM 3
-#define BATTLE_PIKE_FUNC_SET_UP_ROOM_OBJECTS 4
+#define BATTLE_PIKE_FUNC_IS_FINAL_ROOM 3
+#define BATTLE_PIKE_FUNC_SET_ROOM_OBJECTS 4
#define BATTLE_PIKE_FUNC_GET_ROOM_TYPE 5
#define BATTLE_PIKE_FUNC_6 6
#define BATTLE_PIKE_FUNC_7 7
@@ -34,14 +45,14 @@
#define BATTLE_PIKE_FUNC_STATUS_SCREEN_FADE 15
#define BATTLE_PIKE_FUNC_IS_IN 16
#define BATTLE_PIKE_FUNC_SET_HINT_ROOM 17
-#define BATTLE_PIKE_FUNC_SET_HINT_ROOM_ID 18
+#define BATTLE_PIKE_FUNC_GET_HINT_ROOM_ID 18
#define BATTLE_PIKE_FUNC_GET_ROOM_TYPE_HINT 19
#define BATTLE_PIKE_FUNC_CLEAR_TRAINER_IDS 20
#define BATTLE_PIKE_FUNC_BUFFER_RECORD_MIX_MSG 21
#define BATTLE_PIKE_FUNC_GET_QUEEN_FIGHT_TYPE 22
#define BATTLE_PIKE_FUNC_HEAL_MONS_BEFORE_QUEEN 23
#define BATTLE_PIKE_FUNC_SET_HEALING_ROOMS_DISABLED 24
-#define BATTLE_PIKE_FUNC_CAN_PARTY_BE_HEALED 25
+#define BATTLE_PIKE_FUNC_IS_PARTY_FULL_HEALTH 25
#define BATTLE_PIKE_FUNC_SAVE_MON_HELD_ITEMS 26
#define BATTLE_PIKE_FUNC_LOAD_MON_HELD_ITEMS 27
#define BATTLE_PIKE_FUNC_INIT_CHALLENGE 28
diff --git a/include/constants/frontier_util.h b/include/constants/frontier_util.h
index 52bde509f..d71809169 100644
--- a/include/constants/frontier_util.h
+++ b/include/constants/frontier_util.h
@@ -5,28 +5,71 @@
#define FRONTIER_PLAYER_LOST_TEXT 1
#define FRONTIER_PLAYER_WON_TEXT 2
-#define FRONTIER_UTIL_FUNC_0 0
-#define FRONTIER_UTIL_FUNC_1 1
-#define FRONTIER_UTIL_FUNC_2 2
-#define FRONTIER_UTIL_FUNC_LOAD_SELECTED_PARTY 3
+// return values for GetFrontierBrainStatus
+#define FRONTIER_BRAIN_NOT_READY 0
+#define FRONTIER_BRAIN_SILVER 1
+#define FRONTIER_BRAIN_GOLD 2
+#define FRONTIER_BRAIN_STREAK 3 // for encountering the brain after getting both symbols
+#define FRONTIER_BRAIN_STREAK_LONG 4 //
+
+#define FRONTIER_UTIL_FUNC_GET_STATUS 0
+#define FRONTIER_UTIL_FUNC_GET_DATA 1
+#define FRONTIER_UTIL_FUNC_SET_DATA 2
+#define FRONTIER_UTIL_FUNC_SET_PARTY_ORDER 3
#define FRONTIER_UTIL_FUNC_SOFT_RESET 4
-#define FRONTIER_UTIL_FUNC_SET_FRONTIER_TRAINERS 5
-#define FRONTIER_UTIL_FUNC_6 6
+#define FRONTIER_UTIL_FUNC_SET_TRAINERS 5
+#define FRONTIER_UTIL_FUNC_SAVE_PARTY 6
#define FRONTIER_UTIL_FUNC_RESULTS_WINDOW 7
-#define FRONTIER_UTIL_FUNC_8 8
-#define FRONTIER_UTIL_FUNC_9 9
-#define FRONTIER_UTIL_FUNC_IS_FRONTIER_BRAIN 10
-#define FRONTIER_UTIL_FUNC_11 11
+#define FRONTIER_UTIL_FUNC_CHECK_AIR_TV_SHOW 8
+#define FRONTIER_UTIL_FUNC_GET_BRAIN_STATUS 9
+#define FRONTIER_UTIL_FUNC_IS_BRAIN 10
+#define FRONTIER_UTIL_FUNC_GIVE_BATTLE_POINTS 11
#define FRONTIER_UTIL_FUNC_GET_FACILITY_SYMBOLS 12
#define FRONTIER_UTIL_FUNC_GIVE_FACILITY_SYMBOL 13
#define FRONTIER_UTIL_FUNC_CHECK_BATTLE_TYPE 14
-#define FRONTIER_UTIL_FUNC_15 15
+#define FRONTIER_UTIL_FUNC_CHECK_INELIGIBLE 15
#define FRONTIER_UTIL_FUNC_CHECK_VISIT_TRAINER 16
-#define FRONTIER_UTIL_FUNC_17 17
-#define FRONTIER_UTIL_FUNC_18 18
-#define FRONTIER_UTIL_FUNC_19 19
+#define FRONTIER_UTIL_FUNC_INCREMENT_STREAK 17
+#define FRONTIER_UTIL_FUNC_RESTORE_HELD_ITEMS 18
+#define FRONTIER_UTIL_FUNC_SAVE_BATTLE 19
#define FRONTIER_UTIL_FUNC_BUFFER_TRAINER_NAME 20
-#define FRONTIER_UTIL_FUNC_21 21
+#define FRONTIER_UTIL_FUNC_RESET_SKETCH_MOVES 21
#define FRONTIER_UTIL_FUNC_SET_BRAIN_OBJECT 22
+#define FRONTIER_DATA_CHALLENGE_STATUS 0
+#define FRONTIER_DATA_LVL_MODE 1
+#define FRONTIER_DATA_BATTLE_NUM 2
+#define FRONTIER_DATA_PAUSED 3
+#define FRONTIER_DATA_SELECTED_MON_ORDER 4
+#define FRONTIER_DATA_BATTLE_OUTCOME 5
+#define FRONTIER_DATA_6 6
+#define FRONTIER_DATA_HEARD_BRAIN_SPEECH 7
+
+#define STREAK_TOWER_SINGLES_50 (1 << 0)
+#define STREAK_TOWER_SINGLES_OPEN (1 << 1)
+#define STREAK_DOME_SINGLES_50 (1 << 2)
+#define STREAK_DOME_SINGLES_OPEN (1 << 3)
+#define STREAK_PALACE_SINGLES_50 (1 << 4)
+#define STREAK_PALACE_SINGLES_OPEN (1 << 5)
+#define STREAK_ARENA_50 (1 << 6)
+#define STREAK_ARENA_OPEN (1 << 7)
+#define STREAK_FACTORY_SINGLES_50 (1 << 8)
+#define STREAK_FACTORY_SINGLES_OPEN (1 << 9)
+#define STREAK_PIKE_50 (1 << 10)
+#define STREAK_PIKE_OPEN (1 << 11)
+#define STREAK_PYRAMID_50 (1 << 12)
+#define STREAK_PYRAMID_OPEN (1 << 13)
+#define STREAK_TOWER_DOUBLES_50 (1 << 14)
+#define STREAK_TOWER_DOUBLES_OPEN (1 << 15)
+#define STREAK_TOWER_MULTIS_50 (1 << 16)
+#define STREAK_TOWER_MULTIS_OPEN (1 << 17)
+#define STREAK_TOWER_LINK_MULTIS_50 (1 << 18)
+#define STREAK_TOWER_LINK_MULTIS_OPEN (1 << 19)
+#define STREAK_DOME_DOUBLES_50 (1 << 20)
+#define STREAK_DOME_DOUBLES_OPEN (1 << 21)
+#define STREAK_PALACE_DOUBLES_50 (1 << 22)
+#define STREAK_PALACE_DOUBLES_OPEN (1 << 23)
+#define STREAK_FACTORY_DOUBLES_50 (1 << 24)
+#define STREAK_FACTORY_DOUBLES_OPEN (1 << 25)
+
#endif // GUARD_CONSTANTS_FRONTIER_UTIL_H
diff --git a/include/constants/global.h b/include/constants/global.h
index 46fd810cb..96acec853 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -18,12 +18,13 @@
#define VERSION_GAMECUBE 15
#define LANGUAGE_JAPANESE 1
-#define LANGUAGE_ENGLISH 2
-#define LANGUAGE_FRENCH 3
-#define LANGUAGE_ITALIAN 4
-#define LANGUAGE_GERMAN 5
-#define LANGUAGE_KOREAN 6 // 6 goes unused but the theory is it was meant to be Korean
-#define LANGUAGE_SPANISH 7
+#define LANGUAGE_ENGLISH 2
+#define LANGUAGE_FRENCH 3
+#define LANGUAGE_ITALIAN 4
+#define LANGUAGE_GERMAN 5
+#define LANGUAGE_KOREAN 6 // 6 goes unused but the theory is it was meant to be Korean
+#define LANGUAGE_SPANISH 7
+#define NUM_LANGUAGES 7
#define GAME_VERSION (VERSION_EMERALD)
#define GAME_LANGUAGE (LANGUAGE_ENGLISH)
@@ -48,21 +49,29 @@
#define OBJECT_EVENT_TEMPLATES_COUNT 64
#define DECOR_MAX_SECRET_BASE 16
#define DECOR_MAX_PLAYERS_HOUSE 12
+#define APPRENTICE_COUNT 4
+#define APPRENTICE_MAX_QUESTIONS 9
#define PYRAMID_BAG_ITEMS_COUNT 10
#define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode.
#define TRAINER_ID_LENGTH 4
+#define MAX_MON_MOVES 4
+
+// party sizes
#define PARTY_SIZE 6
-#define FRONTIER_PARTY_SIZE 3
#define MULTI_PARTY_SIZE PARTY_SIZE / 2
-#define MAX_MON_MOVES 4
+#define FRONTIER_PARTY_SIZE 3
+#define FRONTIER_DOUBLES_PARTY_SIZE 4
+#define FRONTIER_MULTI_PARTY_SIZE 2
+#define MAX_FRONTIER_PARTY_SIZE FRONTIER_DOUBLES_PARTY_SIZE
// string lengths
#define ITEM_NAME_LENGTH 14
#define POKEMON_NAME_LENGTH 10
#define PLAYER_NAME_LENGTH 7
#define MAIL_WORDS_COUNT 9
+#define EASY_CHAT_BATTLE_WORDS_COUNT 6
#define MOVE_NAME_LENGTH 12
#define MALE 0
diff --git a/include/constants/layouts.h b/include/constants/layouts.h
index fe905a2c6..ba20cb3a5 100755
--- a/include/constants/layouts.h
+++ b/include/constants/layouts.h
@@ -352,13 +352,13 @@
#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY 349
#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR 350
#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM 351
-#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM1 352
-#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM2 353
+#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL 352
+#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL 353
#define LAYOUT_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY 354
#define LAYOUT_BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR 355
#define LAYOUT_BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM 356
#define LAYOUT_SOOTOPOLIS_CITY_LEGENDS_BATTLE 357
-#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3 358
+#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS 358
#define LAYOUT_UNKNOWN_084693AC 359
#define LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY 360
#define LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE 361
diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h
index bedaaca2a..14b3f1d56 100755
--- a/include/constants/map_groups.h
+++ b/include/constants/map_groups.h
@@ -498,9 +498,9 @@
#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY (34 | (26 << 8))
#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR (35 | (26 << 8))
#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM (36 | (26 << 8))
-#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM1 (37 | (26 << 8))
-#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM2 (38 | (26 << 8))
-#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3 (39 | (26 << 8))
+#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL (37 | (26 << 8))
+#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL (38 | (26 << 8))
+#define MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS (39 | (26 << 8))
#define MAP_BATTLE_FRONTIER_RANKING_HALL (40 | (26 << 8))
#define MAP_BATTLE_FRONTIER_LOUNGE1 (41 | (26 << 8))
#define MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER (42 | (26 << 8))
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index b2084f154..5610a470c 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -195,6 +195,10 @@
#define MON_ALREADY_KNOWS_MOVE 0xFFFE
#define MON_HAS_MAX_MOVES 0xFFFF
+#define LEVEL_UP_MOVE_ID 0x01FF
+#define LEVEL_UP_MOVE_LV 0xFE00
+#define LEVEL_UP_END 0xFFFF
+
#define MON_MALE 0x00
#define MON_FEMALE 0xFE
#define MON_GENDERLESS 0xFF
diff --git a/include/constants/trainer_hill.h b/include/constants/trainer_hill.h
index f7a270428..afbcd4ace 100644
--- a/include/constants/trainer_hill.h
+++ b/include/constants/trainer_hill.h
@@ -13,24 +13,24 @@
#define NUM_TRAINER_HILL_PRIZE_LISTS 10
-#define TRAINER_HILL_FUNC_START 0
-#define TRAINER_HILL_FUNC_GET_OWNER_STATE 1
-#define TRAINER_HILL_FUNC_GIVE_PRIZE 2
-#define TRAINER_HILL_FUNC_CHECK_FINAL_TIME 3
-#define TRAINER_HILL_FUNC_RESUME_TIMER 4
-#define TRAINER_HILL_FUNC_SET_LOST 5
-#define TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS 6
-#define TRAINER_HILL_FUNC_GET_CHALLENGE_TIME 7
-#define TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED 8
-#define TRAINER_HILL_FUNC_CLEAR_RESULT 9
-#define TRAINER_HILL_FUNC_IN_CHALLENGE 10
-#define TRAINER_HILL_FUNC_POST_BATTLE_TEXT 11
+#define TRAINER_HILL_FUNC_START 0
+#define TRAINER_HILL_FUNC_GET_OWNER_STATE 1
+#define TRAINER_HILL_FUNC_GIVE_PRIZE 2
+#define TRAINER_HILL_FUNC_CHECK_FINAL_TIME 3
+#define TRAINER_HILL_FUNC_RESUME_TIMER 4
+#define TRAINER_HILL_FUNC_SET_LOST 5
+#define TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS 6
+#define TRAINER_HILL_FUNC_GET_CHALLENGE_TIME 7
+#define TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED 8
+#define TRAINER_HILL_FUNC_CLEAR_RESULT 9
+#define TRAINER_HILL_FUNC_IN_CHALLENGE 10
+#define TRAINER_HILL_FUNC_POST_BATTLE_TEXT 11
#define TRAINER_HILL_FUNC_SET_ALL_TRAINER_FLAGS 12
-#define TRAINER_HILL_FUNC_GET_GAME_SAVED 13
-#define TRAINER_HILL_FUNC_SET_GAME_SAVED 14
-#define TRAINER_HILL_FUNC_CLEAR_GAME_SAVED 15
-#define TRAINER_HILL_FUNC_GET_WON 16
-#define TRAINER_HILL_FUNC_SET_TAG 17
+#define TRAINER_HILL_FUNC_GET_GAME_SAVED 13
+#define TRAINER_HILL_FUNC_SET_GAME_SAVED 14
+#define TRAINER_HILL_FUNC_CLEAR_GAME_SAVED 15
+#define TRAINER_HILL_FUNC_GET_WON 16
+#define TRAINER_HILL_FUNC_SET_TAG 17
#define TRAINER_HILL_TEXT_INTRO 2
#define TRAINER_HILL_TEXT_PLAYER_LOST 3
diff --git a/include/constants/trainers.h b/include/constants/trainers.h
index c0abfe6b6..e5a193770 100644
--- a/include/constants/trainers.h
+++ b/include/constants/trainers.h
@@ -119,7 +119,7 @@
#define FACILITY_CLASS_HIKER 0x0
#define FACILITY_CLASS_AQUA_GRUNT_M 0x1
-#define FACILITY_CLASS_POKEMON_BREEDER_F 0x2
+#define FACILITY_CLASS_PKMN_BREEDER_F 0x2
#define FACILITY_CLASS_COOLTRAINER_M 0x3
#define FACILITY_CLASS_BIRD_KEEPER 0x4
#define FACILITY_CLASS_COLLECTOR 0x5
@@ -202,6 +202,86 @@
#define FACILITY_CLASSES_COUNT 0x52
+#define RS_FACILITY_CLASS_AQUA_LEADER_ARCHIE 0x0
+#define RS_FACILITY_CLASS_AQUA_GRUNT_M 0x1
+#define RS_FACILITY_CLASS_AQUA_GRUNT_F 0x2
+#define RS_FACILITY_CLASS_AROMA_LADY 0x3
+#define RS_FACILITY_CLASS_RUIN_MANIAC 0x4
+#define RS_FACILITY_CLASS_INTERVIEWER 0x5
+#define RS_FACILITY_CLASS_TUBER_F 0x6
+#define RS_FACILITY_CLASS_TUBER_M 0x7
+#define RS_FACILITY_CLASS_COOLTRAINER_M 0x8
+#define RS_FACILITY_CLASS_COOLTRAINER_F 0x9
+#define RS_FACILITY_CLASS_HEX_MANIAC 0xA
+#define RS_FACILITY_CLASS_LADY 0xB
+#define RS_FACILITY_CLASS_BEAUTY 0xC
+#define RS_FACILITY_CLASS_RICH_BOY 0xD
+#define RS_FACILITY_CLASS_POKEMANIAC 0xE
+#define RS_FACILITY_CLASS_SWIMMER_M 0xF
+#define RS_FACILITY_CLASS_BLACK_BELT 0x10
+#define RS_FACILITY_CLASS_GUITARIST 0x11
+#define RS_FACILITY_CLASS_KINDLER 0x12
+#define RS_FACILITY_CLASS_CAMPER 0x13
+#define RS_FACILITY_CLASS_BUG_MANIAC 0x14
+#define RS_FACILITY_CLASS_PSYCHIC_M 0x15
+#define RS_FACILITY_CLASS_PSYCHIC_F 0x16
+#define RS_FACILITY_CLASS_GENTLEMAN 0x17
+#define RS_FACILITY_CLASS_ELITE_FOUR_M 0x18
+#define RS_FACILITY_CLASS_ELITE_FOUR_F 0x19
+#define RS_FACILITY_CLASS_LEADER_F 0x1A
+#define RS_FACILITY_CLASS_LEADER_M 0x1B
+#define RS_FACILITY_CLASS_LEADER_MF 0x1C
+#define RS_FACILITY_CLASS_SCHOOL_KID_M 0x1D
+#define RS_FACILITY_CLASS_SCHOOL_KID_F 0x1E
+#define RS_FACILITY_CLASS_SR_AND_JR 0x1F
+#define RS_FACILITY_CLASS_POKEFAN_M 0x20
+#define RS_FACILITY_CLASS_POKEFAN_F 0x21
+#define RS_FACILITY_CLASS_EXPERT_M 0x22
+#define RS_FACILITY_CLASS_EXPERT_F 0x23
+#define RS_FACILITY_CLASS_YOUNGSTER 0x24
+#define RS_FACILITY_CLASS_CHAMPION 0x25
+#define RS_FACILITY_CLASS_FISHERMAN 0x26
+#define RS_FACILITY_CLASS_CYCLING_TRIATHLETE_M 0x27
+#define RS_FACILITY_CLASS_CYCLING_TRIATHLETE_F 0x28
+#define RS_FACILITY_CLASS_RUNNING_TRIATHLETE_M 0x29
+#define RS_FACILITY_CLASS_RUNNING_TRIATHLETE_F 0x2A
+#define RS_FACILITY_CLASS_SWIMMING_TRIATHLETE_M 0x2B
+#define RS_FACILITY_CLASS_SWIMMING_TRIATHLETE_F 0x2C
+#define RS_FACILITY_CLASS_DRAGON_TAMER 0x2D
+#define RS_FACILITY_CLASS_BIRD_KEEPER 0x2E
+#define RS_FACILITY_CLASS_NINJA_BOY 0x2F
+#define RS_FACILITY_CLASS_BATTLE_GIRL 0x30
+#define RS_FACILITY_CLASS_PARASOL_LADY 0x31
+#define RS_FACILITY_CLASS_SWIMMER_F 0x32
+#define RS_FACILITY_CLASS_PICNICKER 0x33
+#define RS_FACILITY_CLASS_TWINS 0x34
+#define RS_FACILITY_CLASS_SAILOR 0x35
+#define RS_FACILITY_CLASS_BOARDER_1 0x36
+#define RS_FACILITY_CLASS_BOARDER_2 0x37
+#define RS_FACILITY_CLASS_COLLECTOR 0x38
+#define RS_FACILITY_CLASS_WALLY 0x39
+#define RS_FACILITY_CLASS_BRENDAN_1 0x3A
+#define RS_FACILITY_CLASS_BRENDAN_2 0x3B
+#define RS_FACILITY_CLASS_BRENDAN_3 0x3C
+#define RS_FACILITY_CLASS_MAY_1 0x3D
+#define RS_FACILITY_CLASS_MAY_2 0x3E
+#define RS_FACILITY_CLASS_MAY_3 0x3F
+#define RS_FACILITY_CLASS_PKMN_BREEDER_M 0x40
+#define RS_FACILITY_CLASS_PKMN_BREEDER_F 0x41
+#define RS_FACILITY_CLASS_PKMN_RANGER_M 0x42
+#define RS_FACILITY_CLASS_PKMN_RANGER_F 0x43
+#define RS_FACILITY_CLASS_MAGMA_LEADER 0x44
+#define RS_FACILITY_CLASS_MAGMA_GRUNT_M 0x45
+#define RS_FACILITY_CLASS_MAGMA_GRUNT_F 0x46
+#define RS_FACILITY_CLASS_LASS 0x47
+#define RS_FACILITY_CLASS_BUG_CATCHER 0x48
+#define RS_FACILITY_CLASS_HIKER 0x49
+#define RS_FACILITY_CLASS_YOUNG_COUPLE 0x4A
+#define RS_FACILITY_CLASS_OLD_COUPLE 0x4B
+#define RS_FACILITY_CLASS_SIS_AND_BRO 0x4C
+
+#define RS_FACILITY_CLASSES_COUNT 0x4D
+
#define TRAINER_CLASS_PKMN_TRAINER_1 0x0 // Unused
#define TRAINER_CLASS_PKMN_TRAINER_2 0x1 // Unused
#define TRAINER_CLASS_HIKER 0x2
diff --git a/include/frontier_util.h b/include/frontier_util.h
index 273c4cc20..f445949ef 100644
--- a/include/frontier_util.h
+++ b/include/frontier_util.h
@@ -2,16 +2,16 @@
#define GUARD_FRONTIER_UTIL_H
void CallFrontierUtilFunc(void);
-u8 sub_81A3610(void);
+u8 GetFrontierBrainStatus(void);
void CopyFrontierTrainerText(u8 whichText, u16 trainerId);
-void sub_81A3908(void);
+void ResetWinStreaks(void);
u32 GetCurrentFacilityWinStreak(void);
-void sub_81A3ACC(void);
+void ResetFrontierTrainerIds(void);
u8 GetPlayerSymbolCountForFacility(u8 facility);
void ShowRankingHallRecordsWindow(void);
void ScrollRankingHallRecordsWindow(void);
void ClearRankingHallRecords(void);
-void sub_81A4C30(void);
+void SaveGameFrontier(void);
u8 GetFrontierBrainTrainerPicIndex(void);
u8 GetFrontierBrainTrainerClass(void);
void CopyFrontierBrainTrainerName(u8 *dst);
diff --git a/include/global.h b/include/global.h
index 8334fe62f..357c9d60f 100644
--- a/include/global.h
+++ b/include/global.h
@@ -214,14 +214,16 @@ struct ApprenticeMon
u16 item;
};
+// This is for past players Apprentices or Apprentices received via Record Mix.
+// For the current Apprentice, see struct PlayersApprentice
struct Apprentice
{
u8 id:5;
u8 lvlMode:2; // + 1
- u8 field_1;
+ u8 numQuestions;
u8 number;
struct ApprenticeMon party[MULTI_PARTY_SIZE];
- u16 easyChatWords[6];
+ u16 speechWon[EASY_CHAT_BATTLE_WORDS_COUNT];
u8 playerId[TRAINER_ID_LENGTH];
u8 playerName[PLAYER_NAME_LENGTH];
u8 language;
@@ -264,14 +266,23 @@ struct EmeraldBattleTowerRecord
/*0x02*/ u16 winStreak;
/*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
/*0x0C*/ u8 trainerId[TRAINER_ID_LENGTH];
- /*0x10*/ u16 greeting[6];
- /*0x1C*/ u16 speechWon[6];
- /*0x28*/ u16 speechLost[6];
- /*0x34*/ struct BattleTowerPokemon party[4];
+ /*0x10*/ u16 greeting[EASY_CHAT_BATTLE_WORDS_COUNT];
+ /*0x1C*/ u16 speechWon[EASY_CHAT_BATTLE_WORDS_COUNT];
+ /*0x28*/ u16 speechLost[EASY_CHAT_BATTLE_WORDS_COUNT];
+ /*0x34*/ struct BattleTowerPokemon party[MAX_FRONTIER_PARTY_SIZE];
/*0xE4*/ u8 language;
/*0xE8*/ u32 checksum;
};
+struct BattleTowerInterview
+{
+ u16 playerSpecies;
+ u16 opponentSpecies;
+ u8 opponentName[PLAYER_NAME_LENGTH + 1];
+ u8 opponentMonNickname[POKEMON_NAME_LENGTH + 1];
+ u8 opponentLanguage;
+};
+
struct BattleTowerEReaderTrainer
{
/*0x00*/ u8 unk0;
@@ -279,9 +290,9 @@ struct BattleTowerEReaderTrainer
/*0x02*/ u16 winStreak;
/*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
/*0x0C*/ u8 trainerId[TRAINER_ID_LENGTH];
- /*0x10*/ u16 greeting[6];
- /*0x1C*/ u16 farewellPlayerLost[6];
- /*0x28*/ u16 farewellPlayerWon[6];
+ /*0x10*/ u16 greeting[EASY_CHAT_BATTLE_WORDS_COUNT];
+ /*0x1C*/ u16 farewellPlayerLost[EASY_CHAT_BATTLE_WORDS_COUNT];
+ /*0x28*/ u16 farewellPlayerWon[EASY_CHAT_BATTLE_WORDS_COUNT];
/*0x34*/ struct BattleTowerPokemon party[FRONTIER_PARTY_SIZE];
/*0xB8*/ u32 checksum;
};
@@ -315,32 +326,27 @@ struct BattleFrontier
{
/*0x64C*/ struct EmeraldBattleTowerRecord towerPlayer;
/*0x738*/ struct EmeraldBattleTowerRecord towerRecords[5]; // From record mixing.
- /*0xBD4*/ u16 field_BD4;
- /*0xBD6*/ u16 field_BD6;
- /*0xBD8*/ u8 field_BD8[PLAYER_NAME_LENGTH + 1];
- /*0xBE3*/ u8 field_BE0[POKEMON_NAME_LENGTH + 1];
- /*0xBEB*/ u8 field_BEB;
+ /*0xBEB*/ struct BattleTowerInterview towerInterview;
/*0xBEC*/ struct BattleTowerEReaderTrainer ereaderTrainer;
- /*0xCA8*/ u8 field_CA8;
- /*0xCA9*/ u8 lvlMode:2; // 0x1, 0x2 -> 0x3
- /*0xCA9*/ u8 field_CA9_a:1; // 0x4
- /*0xCA9*/ u8 field_CA9_b:1; // 0x8
- /*0xCA9*/ u8 field_CA9_c:1; // 0x10
- /*0xCA9*/ u8 field_CA9_d:1; // 0x20
- /*0xCA9*/ u8 field_CA9_e:1; // 0x40
- /*0xCA9*/ u8 field_CA9_f:1; // 0x80
- /*0xCAA*/ u16 selectedPartyMons[FRONTIER_PARTY_SIZE];
- /*0xCB0*/ u16 field_CB0;
- /*0xCB2*/ u16 curChallengeBattleNum; // In case of battle pyramid, the floor.
+ /*0xCA8*/ u8 challengeStatus;
+ /*0xCA9*/ u8 lvlMode:2;
+ /*0xCA9*/ u8 challengePaused:1;
+ /*0xCA9*/ u8 field_CA9_b: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];
- /*0xCDC*/ u32 field_CDC;
+ /*0xCDC*/ u32 winStreakActiveFlags;
/*0xCE0*/ u16 towerWinStreaks[4][2];
/*0xCF0*/ u16 towerRecordWinStreaks[4][2];
- /*0xD00*/ u16 field_D00;
- /*0xD02*/ u16 field_D02;
- /*0xD04*/ u16 field_D04;
- /*0xD06*/ u8 field_D06;
- /*0xD07*/ u8 field_D07;
+ /*0xD00*/ u16 battledBrainFlags;
+ /*0xD02*/ u16 towerSinglesStreak; // Never read
+ /*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;
@@ -386,41 +392,41 @@ struct BattleFrontier
/*0xE6A*/ u16 field_E6A;
/*0xE6C*/ u16 field_E6C;
/*0xE6E*/ u16 field_E6E;
- /*0xE70*/ struct RentalMon rentalMons[6];
+ /*0xE70*/ struct RentalMon rentalMons[PARTY_SIZE];
/*0xEB8*/ u16 battlePoints;
- /*0xEBA*/ u16 field_EBA;
+ /*0xEBA*/ u16 cardBattlePoints;
/*0xEBC*/ u32 battlesCount;
/*0xEC0*/ u16 field_EC0[16];
/*0xEE0*/ u8 trainerFlags;
- /*0xEE1*/ u8 opponentName[2][PLAYER_NAME_LENGTH + 1];
- /*0xEF1*/ u8 field_EF1[2][4];
- /*0xEF9*/ u8 unk_EF9:7;
+ /*0xEE1*/ u8 opponentNames[2][PLAYER_NAME_LENGTH + 1];
+ /*0xEF1*/ u8 opponentTrainerIds[2][TRAINER_ID_LENGTH];
+ /*0xEF9*/ u8 unk_EF9:7; // Never read
/*0xEF9*/ u8 savedGame:1;
- /*0xEFA*/ u8 field_EFA;
- /*0xEFB*/ u8 field_EFB;
- /*0xEFC*/ struct FrontierMonData field_EFC[3];
+ /*0xEFA*/ u8 unused_EFA;
+ /*0xEFB*/ u8 unused_EFB;
+ /*0xEFC*/ struct FrontierMonData field_EFC[FRONTIER_PARTY_SIZE];
};
-struct Sav2_B8
+struct ApprenticeQuestion
{
- u8 unk0_0:2;
- u8 unk0_1:2;
- u8 unk0_2:2;
- u8 unk0_3:2;
- u16 unk2;
+ u8 questionId:2;
+ u8 monId:2;
+ u8 moveSlot:2;
+ u8 suggestedChange:2; // TRUE if told to use held item or second move, FALSE if told to use no item or first move
+ u16 data; // used both as an itemId and a moveId
};
struct PlayersApprentice
{
/*0xB0*/ u8 id;
- /*0xB1*/ u8 activeLvlMode:2; // +1, 0 means not active
- /*0xB1*/ u8 field_B1_1:4;
- /*0xB1*/ u8 field_B1_2:2;
- /*0xB2*/ u8 field_B2_0:3;
- /*0xB2*/ u8 field_B2_1:2;
- /*0xB3*/ u8 field_B3;
- /*0xB4*/ u8 monIds[MULTI_PARTY_SIZE];
- /*0xB8*/ struct Sav2_B8 field_B8[9];
+ /*0xB1*/ u8 lvlMode:2; //0: Unassigned, 1: Lv 50, 2: Open Lv
+ /*0xB1*/ u8 questionsAnswered:4;
+ /*0xB1*/ u8 leadMonId:2;
+ /*0xB2*/ u8 party:3;
+ /*0xB2*/ u8 saveId:2;
+ /*0xB3*/ u8 unused;
+ /*0xB4*/ u8 speciesIds[MULTI_PARTY_SIZE];
+ /*0xB8*/ struct ApprenticeQuestion questions[APPRENTICE_MAX_QUESTIONS];
};
struct RankingHall1P
@@ -465,7 +471,7 @@ struct SaveBlock2
/*0xA8*/ u32 field_A8; // Written to, but never read.
/*0xAC*/ u32 encryptionKey;
/*0xB0*/ struct PlayersApprentice playerApprentice;
- /*0xDC*/ struct Apprentice apprentices[4]; // From record mixing.
+ /*0xDC*/ struct Apprentice apprentices[APPRENTICE_COUNT];
/*0x1EC*/ struct BerryCrush berryCrush;
/*0x1FC*/ struct PokemonJumpResults pokeJump;
/*0x20C*/ struct BerryPickingResults berryPick;
@@ -949,10 +955,10 @@ struct SaveBlock1
/*0x2BA1*/ u8 outbreakPokemonProbability;
/*0x2BA2*/ u16 outbreakDaysLeft;
/*0x2BA4*/ struct GabbyAndTyData gabbyAndTyData;
- /*0x2BB0*/ u16 easyChatProfile[6];
- /*0x2BBC*/ u16 easyChatBattleStart[6];
- /*0x2BC8*/ u16 easyChatBattleWon[6];
- /*0x2BD4*/ u16 easyChatBattleLost[6];
+ /*0x2BB0*/ u16 easyChatProfile[EASY_CHAT_BATTLE_WORDS_COUNT];
+ /*0x2BBC*/ u16 easyChatBattleStart[EASY_CHAT_BATTLE_WORDS_COUNT];
+ /*0x2BC8*/ u16 easyChatBattleWon[EASY_CHAT_BATTLE_WORDS_COUNT];
+ /*0x2BD4*/ u16 easyChatBattleLost[EASY_CHAT_BATTLE_WORDS_COUNT];
/*0x2BE0*/ struct MailStruct mail[MAIL_COUNT];
/*0x2E20*/ u8 additionalPhrases[8]; // bitfield for 33 additional phrases in easy chat system
/*0x2E28*/ OldMan oldMan;
diff --git a/include/graphics.h b/include/graphics.h
index 831b202f8..146803cfa 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4363,7 +4363,7 @@ extern const u32 gBattleAnimSpriteGfx_Pokeball[];
extern const u32 gBattleAnimSpriteGfx_Spotlight[];
extern const u32 gBattleAnimSpriteGfx_LetterZ[];
extern const u32 gBattleAnimSpriteGfx_RapidSpin[];
-extern const u32 gBattleAnimSpriteGfx_TriForceTriangle[];
+extern const u32 gBattleAnimSpriteGfx_TriAttackTriangle[];
extern const u32 gBattleAnimSpriteGfx_WispOrb[];
extern const u32 gBattleAnimSpriteGfx_WispFire[];
extern const u32 gBattleAnimSpriteGfx_GoldStars[];
@@ -4646,7 +4646,7 @@ extern const u32 gBattleAnimSpritePal_JaggedMusicNote[];
extern const u32 gBattleAnimSpritePal_Pokeball[];
extern const u32 gBattleAnimSpritePal_LetterZ[];
extern const u32 gBattleAnimSpritePal_RapidSpin[];
-extern const u32 gBattleAnimSpritePal_TriForceTriangle[];
+extern const u32 gBattleAnimSpritePal_TriAttackTriangle[];
extern const u32 gBattleAnimSpritePal_WispOrb[];
extern const u32 gBattleAnimSpritePal_GoldStars[];
extern const u32 gBattleAnimSpritePal_EclipsingOrb[];
diff --git a/include/item_menu.h b/include/item_menu.h
index a21a6da4f..508f94815 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -71,7 +71,7 @@ extern u16 gSpecialVar_ItemId;
void sub_81AAC14(void);
void FavorLadyOpenBagMenu(void);
void QuizLadyOpenBagMenu(void);
-void sub_81AAC28(void);
+void ApprenticeOpenBagMenu(void);
void sub_81AABB0(void);
void SetInitialScrollAndCursorPositions(u8 pocketId);
void bag_menu_mail_related(void);
diff --git a/include/strings.h b/include/strings.h
index 7a477e166..f814ad29f 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1304,7 +1304,7 @@ extern const u8 gText_1st[];
extern const u8 gText_SpaceAndSpace[];
extern const u8 gText_CommaSpace[];
extern const u8 gText_NewLine[];
-extern const u8 gText_ScrollTextUp[];
+extern const u8 gText_LineBreak[];
extern const u8 gText_Space[];
extern const u8 gText_Space2[];
extern const u8 gText_Are[];
@@ -1326,34 +1326,35 @@ extern const u8 gText_FrontierFacilityRoomsCleared[];
extern const u8 gText_FrontierFacilityKOsStreak[];
extern const u8 gText_FrontierFacilityFloorsCleared[];
-extern const u8 gText_082C843F[];
-extern const u8 gText_082C848B[];
-extern const u8 gText_082C8628[];
-extern const u8 gText_082C85B4[];
-extern const u8 gText_082C8512[];
-extern const u8 gText_082C859D[];
-extern const u8 gText_082C86C3[];
-extern const u8 gText_082C8458[];
-extern const u8 gText_082C84C1[];
-extern const u8 gText_082C8662[];
-extern const u8 gText_082C85E3[];
-extern const u8 gText_082C853B[];
-extern const u8 gText_082C85A4[];
-extern const u8 gText_082C86FE[];
-extern const u8 gText_082C846C[];
-extern const u8 gText_082C84D0[];
-extern const u8 gText_082C8682[];
-extern const u8 gText_082C85F5[];
-extern const u8 gText_082C8561[];
-extern const u8 gText_082C85A9[];
-extern const u8 gText_082C8739[];
-extern const u8 gText_082C8480[];
-extern const u8 gText_082C84F7[];
-extern const u8 gText_082C86B3[];
-extern const u8 gText_082C8611[];
-extern const u8 gText_082C8589[];
-extern const u8 gText_082C85AE[];
-extern const u8 gText_082C877B[];
+// Frontier Brain
+extern const u8 gText_AnabelWonSilver[];
+extern const u8 gText_TuckerWonSilver[];
+extern const u8 gText_SpenserWonSilver[];
+extern const u8 gText_GretaWonSilver[];
+extern const u8 gText_NolandWonSilver[];
+extern const u8 gText_LucyWonSilver[];
+extern const u8 gText_BrandonWonSilver[];
+extern const u8 gText_AnabelDefeatSilver[];
+extern const u8 gText_TuckerDefeatSilver[];
+extern const u8 gText_SpenserDefeatSilver[];
+extern const u8 gText_GretaDefeatSilver[];
+extern const u8 gText_NolandDefeatSilver[];
+extern const u8 gText_LucyDefeatSilver[];
+extern const u8 gText_BrandonDefeatSilver[];
+extern const u8 gText_AnabelWonGold[];
+extern const u8 gText_TuckerWonGold[];
+extern const u8 gText_SpenserWonGold[];
+extern const u8 gText_GretaWonGold[];
+extern const u8 gText_NolandWonGold[];
+extern const u8 gText_LucyWonGold[];
+extern const u8 gText_BrandonWonGold[];
+extern const u8 gText_AnabelDefeatGold[];
+extern const u8 gText_TuckerDefeatGold[];
+extern const u8 gText_SpenserDefeatGold[];
+extern const u8 gText_GretaDefeatGold[];
+extern const u8 gText_NolandDefeatGold[];
+extern const u8 gText_LucyDefeatGold[];
+extern const u8 gText_BrandonDefeatGold[];
// Battle Tower.
extern const u8 BattleFrontier_BattleTowerMultiBattleRoom_Text_2479CE[];
@@ -2400,6 +2401,10 @@ extern const u8 gUnknown_085EDC45[];
extern const u8 gUnknown_085EDB00[];
extern const u8 gUnknown_085EDC84[];
+// Apprentice
+extern const u8 gText_Give[];
+extern const u8 gText_NoNeed[];
+
// Easy Chat Entry
extern const u8 gText_StopGivingPkmnMail[];
extern const u8 gText_LikeToQuitQuiz[];
diff --git a/include/tv.h b/include/tv.h
index 4027c3c0f..dc4b22a99 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -9,7 +9,7 @@ extern u8 *const gTVStringVarPtrs[3];
void ClearTVShowData(void);
void sub_80EE184(void);
void sub_80EE35C(u16 foeSpecies, u16 species, u8 moveIdx, const u16 *movePtr, u16 betterMove);
-void sub_80EE8C8(u16 winStreak, u8 facility);
+void TryPutFrontierTVShowOnAir(u16 winStreak, u8 facility);
void DoTVShow(void);
void DoTVShowInSearchOfTrainers(void);
void TryPutTreasureInvestigatorsOnAir(void);
@@ -56,7 +56,7 @@ void InterviewAfter(void);
void UpdateTVScreensOnMap(int, int);
void TV_PrintIntToStringVar(u8 varIdx, int value);
void SaveRecordedItemPurchasesForTVShow(void);
-bool8 sub_80EE818(void);
+bool8 ShouldAirFrontierTVShow(void);
void sub_80EE8C8(u16 winStreak, u8 facilityAndMode);
void BravoTrainerPokemonProfile_BeforeInterview2(u8 contestStandingPlace);
void ContestLiveUpdates_BeforeInterview_1(u8 a0);