summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDiegoisawesome <diego@domoreaweso.me>2018-07-24 21:18:36 -0700
committerDiegoisawesome <diego@domoreaweso.me>2018-07-24 21:18:36 -0700
commite92e2cb0aa31adf9872b147a1b6deb9d9844b7e8 (patch)
treeb3e357be8cec0c64a84773a7b63f54f97825cbaf /src
parent156fb472e10c10751268d2339b2526c8bd07e34f (diff)
parent5883f867f00b8cc3f3630a8ab4aa2e9d21406949 (diff)
Merge branch 'master' of github.com:pret/pokeemerald
Diffstat (limited to 'src')
-rw-r--r--src/battle_ai_script_commands.c705
-rw-r--r--src/battle_ai_switch_items.c263
-rw-r--r--src/battle_anim.c117
-rw-r--r--src/battle_anim_sound_tasks.c12
-rw-r--r--src/battle_bg.c119
-rw-r--r--src/battle_controller_link_opponent.c49
-rw-r--r--src/battle_controller_link_partner.c52
-rw-r--r--src/battle_controller_opponent.c60
-rw-r--r--src/battle_controller_player.c226
-rw-r--r--src/battle_controller_player_partner.c65
-rw-r--r--src/battle_controller_recorded_opponent.c46
-rw-r--r--src/battle_controller_recorded_player.c47
-rw-r--r--src/battle_controller_safari.c26
-rw-r--r--src/battle_controller_wally.c54
-rw-r--r--src/battle_controllers.c140
-rw-r--r--src/battle_data.c13
-rw-r--r--src/battle_dome_cards.c13
-rw-r--r--src/battle_gfx_sfx_util.c209
-rw-r--r--src/battle_interface.c911
-rw-r--r--src/battle_main.c559
-rw-r--r--src/battle_message.c837
-rw-r--r--src/battle_script_commands.c127
-rw-r--r--src/battle_setup.c37
-rw-r--r--src/battle_tv.c18
-rw-r--r--src/battle_util.c313
-rw-r--r--src/berry_blender.c8
-rw-r--r--src/bike.c1
-rw-r--r--src/braille_puzzles.c28
-rw-r--r--src/data/text/move_names.h357
-rw-r--r--src/data/text/species_names.h414
-rw-r--r--src/data/text/trainer_class_names.h73
-rw-r--r--src/data/trainer_parties.h12437
-rw-r--r--src/data/trainers.h11971
-rw-r--r--src/egg_hatch.c6
-rw-r--r--src/event_object_movement.c1
-rw-r--r--src/evolution_scene.c59
-rw-r--r--src/fieldmap.c6
-rw-r--r--src/hall_of_fame.c20
-rw-r--r--src/item.c2
-rw-r--r--src/item_icon.c2
-rwxr-xr-xsrc/item_menu.c2
-rwxr-xr-xsrc/item_use.c5
-rw-r--r--src/link.c2
-rw-r--r--src/link_rfu.c46
-rw-r--r--src/load_save.c2
-rw-r--r--src/main_menu.c4
-rw-r--r--src/menu.c4
-rw-r--r--src/overworld.c1
-rw-r--r--src/pokeball.c6
-rw-r--r--src/pokeblock.c5
-rw-r--r--src/pokeblock_feed.c7
-rw-r--r--src/pokemon.c167
-rw-r--r--src/recorded_battle.c124
-rw-r--r--src/reshow_battle_screen.c52
-rw-r--r--src/rom6.c1
-rw-r--r--src/rom_8011DC0.c3266
-rw-r--r--src/safari_zone.c10
-rw-r--r--src/secret_base.c8
-rw-r--r--src/start_menu.c2
-rw-r--r--src/starter_choose.c5
-rw-r--r--src/text_window.c4
-rw-r--r--src/walda_phrase.c1
62 files changed, 31616 insertions, 2511 deletions
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index e1a9168a9..74247f8a2 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -3,6 +3,7 @@
#include "pokemon.h"
#include "battle.h"
#include "battle_setup.h"
+#include "recorded_battle.h"
#include "constants/species.h"
#include "constants/abilities.h"
#include "random.h"
@@ -41,13 +42,12 @@ in order to read the next command correctly. refer to battle_ai_scripts.s for th
AI scripts.
*/
-extern const u8 * const gBattleAI_ScriptsTable[];
+extern const u8 *const gBattleAI_ScriptsTable[];
-extern u32 GetAiScriptsInRecordedBattle();
extern u32 GetAiScriptsInBattleFactory();
-static u8 BattleAI_ChooseMoveOrAction_Singles(void);
-static u8 BattleAI_ChooseMoveOrAction_Doubles(void);
+static u8 ChooseMoveOrAction_Singles(void);
+static u8 ChooseMoveOrAction_Doubles(void);
static void RecordLastUsedMoveByTarget(void);
static void BattleAI_DoAIProcessing(void);
static void AIStackPushVar(const u8 *);
@@ -90,7 +90,7 @@ static void BattleAICmd_get_turn_count(void);
static void BattleAICmd_get_type(void);
static void BattleAICmd_get_considered_move_power(void);
static void BattleAICmd_get_how_powerful_move_is(void);
-static void BattleAICmd_get_last_used_bank_move(void);
+static void BattleAICmd_get_last_used_battler_move(void);
static void BattleAICmd_if_equal_(void);
static void BattleAICmd_if_not_equal_(void);
static void BattleAICmd_if_user_goes(void);
@@ -154,115 +154,113 @@ static void BattleAICmd_if_flash_fired(void);
static void BattleAICmd_if_holds_item(void);
// ewram
-
EWRAM_DATA const u8 *gAIScriptPtr = NULL;
EWRAM_DATA static u8 sBattler_AI = 0;
// const rom data
-
typedef void (*BattleAICmdFunc)(void);
static const BattleAICmdFunc sBattleAICmdTable[] =
{
- BattleAICmd_if_random_less_than, // 0x0
- BattleAICmd_if_random_greater_than, // 0x1
- BattleAICmd_if_random_equal, // 0x2
- BattleAICmd_if_random_not_equal, // 0x3
- BattleAICmd_score, // 0x4
- BattleAICmd_if_hp_less_than, // 0x5
- BattleAICmd_if_hp_more_than, // 0x6
- BattleAICmd_if_hp_equal, // 0x7
- BattleAICmd_if_hp_not_equal, // 0x8
- BattleAICmd_if_status, // 0x9
- BattleAICmd_if_not_status, // 0xA
- BattleAICmd_if_status2, // 0xB
- BattleAICmd_if_not_status2, // 0xC
- BattleAICmd_if_status3, // 0xD
- BattleAICmd_if_not_status3, // 0xE
- BattleAICmd_if_side_affecting, // 0xF
- BattleAICmd_if_not_side_affecting, // 0x10
- BattleAICmd_if_less_than, // 0x11
- BattleAICmd_if_more_than, // 0x12
- BattleAICmd_if_equal, // 0x13
- BattleAICmd_if_not_equal, // 0x14
- BattleAICmd_if_less_than_ptr, // 0x15
- BattleAICmd_if_more_than_ptr, // 0x16
- BattleAICmd_if_equal_ptr, // 0x17
- BattleAICmd_if_not_equal_ptr, // 0x18
- BattleAICmd_if_move, // 0x19
- BattleAICmd_if_not_move, // 0x1A
- BattleAICmd_if_in_bytes, // 0x1B
- BattleAICmd_if_not_in_bytes, // 0x1C
- BattleAICmd_if_in_hwords, // 0x1D
- BattleAICmd_if_not_in_hwords, // 0x1E
- BattleAICmd_if_user_has_attacking_move, // 0x1F
- BattleAICmd_if_user_has_no_attacking_moves, // 0x20
- BattleAICmd_get_turn_count, // 0x21
- BattleAICmd_get_type, // 0x22
- BattleAICmd_get_considered_move_power, // 0x23
- BattleAICmd_get_how_powerful_move_is, // 0x24
- BattleAICmd_get_last_used_bank_move, // 0x25
- BattleAICmd_if_equal_, // 0x26
- BattleAICmd_if_not_equal_, // 0x27
- BattleAICmd_if_user_goes, // 0x28
- BattleAICmd_if_user_doesnt_go, // 0x29
- BattleAICmd_nullsub_2A, // 0x2A
- BattleAICmd_nullsub_2B, // 0x2B
- BattleAICmd_count_usable_party_mons, // 0x2C
- BattleAICmd_get_considered_move, // 0x2D
- BattleAICmd_get_considered_move_effect, // 0x2E
- BattleAICmd_get_ability, // 0x2F
- BattleAICmd_get_highest_type_effectiveness, // 0x30
- BattleAICmd_if_type_effectiveness, // 0x31
- BattleAICmd_nullsub_32, // 0x32
- BattleAICmd_nullsub_33, // 0x33
- BattleAICmd_if_status_in_party, // 0x34
- BattleAICmd_if_status_not_in_party, // 0x35
- BattleAICmd_get_weather, // 0x36
- BattleAICmd_if_effect, // 0x37
- BattleAICmd_if_not_effect, // 0x38
- BattleAICmd_if_stat_level_less_than, // 0x39
- BattleAICmd_if_stat_level_more_than, // 0x3A
- BattleAICmd_if_stat_level_equal, // 0x3B
- BattleAICmd_if_stat_level_not_equal, // 0x3C
- BattleAICmd_if_can_faint, // 0x3D
- BattleAICmd_if_cant_faint, // 0x3E
- BattleAICmd_if_has_move, // 0x3F
- BattleAICmd_if_doesnt_have_move, // 0x40
- BattleAICmd_if_has_move_with_effect, // 0x41
- BattleAICmd_if_doesnt_have_move_with_effect, // 0x42
+ BattleAICmd_if_random_less_than, // 0x0
+ BattleAICmd_if_random_greater_than, // 0x1
+ BattleAICmd_if_random_equal, // 0x2
+ BattleAICmd_if_random_not_equal, // 0x3
+ BattleAICmd_score, // 0x4
+ BattleAICmd_if_hp_less_than, // 0x5
+ BattleAICmd_if_hp_more_than, // 0x6
+ BattleAICmd_if_hp_equal, // 0x7
+ BattleAICmd_if_hp_not_equal, // 0x8
+ BattleAICmd_if_status, // 0x9
+ BattleAICmd_if_not_status, // 0xA
+ BattleAICmd_if_status2, // 0xB
+ BattleAICmd_if_not_status2, // 0xC
+ BattleAICmd_if_status3, // 0xD
+ BattleAICmd_if_not_status3, // 0xE
+ BattleAICmd_if_side_affecting, // 0xF
+ BattleAICmd_if_not_side_affecting, // 0x10
+ BattleAICmd_if_less_than, // 0x11
+ BattleAICmd_if_more_than, // 0x12
+ BattleAICmd_if_equal, // 0x13
+ BattleAICmd_if_not_equal, // 0x14
+ BattleAICmd_if_less_than_ptr, // 0x15
+ BattleAICmd_if_more_than_ptr, // 0x16
+ BattleAICmd_if_equal_ptr, // 0x17
+ BattleAICmd_if_not_equal_ptr, // 0x18
+ BattleAICmd_if_move, // 0x19
+ BattleAICmd_if_not_move, // 0x1A
+ BattleAICmd_if_in_bytes, // 0x1B
+ BattleAICmd_if_not_in_bytes, // 0x1C
+ BattleAICmd_if_in_hwords, // 0x1D
+ BattleAICmd_if_not_in_hwords, // 0x1E
+ BattleAICmd_if_user_has_attacking_move, // 0x1F
+ BattleAICmd_if_user_has_no_attacking_moves, // 0x20
+ BattleAICmd_get_turn_count, // 0x21
+ BattleAICmd_get_type, // 0x22
+ BattleAICmd_get_considered_move_power, // 0x23
+ BattleAICmd_get_how_powerful_move_is, // 0x24
+ BattleAICmd_get_last_used_battler_move, // 0x25
+ BattleAICmd_if_equal_, // 0x26
+ BattleAICmd_if_not_equal_, // 0x27
+ BattleAICmd_if_user_goes, // 0x28
+ BattleAICmd_if_user_doesnt_go, // 0x29
+ BattleAICmd_nullsub_2A, // 0x2A
+ BattleAICmd_nullsub_2B, // 0x2B
+ BattleAICmd_count_usable_party_mons, // 0x2C
+ BattleAICmd_get_considered_move, // 0x2D
+ BattleAICmd_get_considered_move_effect, // 0x2E
+ BattleAICmd_get_ability, // 0x2F
+ BattleAICmd_get_highest_type_effectiveness, // 0x30
+ BattleAICmd_if_type_effectiveness, // 0x31
+ BattleAICmd_nullsub_32, // 0x32
+ BattleAICmd_nullsub_33, // 0x33
+ BattleAICmd_if_status_in_party, // 0x34
+ BattleAICmd_if_status_not_in_party, // 0x35
+ BattleAICmd_get_weather, // 0x36
+ BattleAICmd_if_effect, // 0x37
+ BattleAICmd_if_not_effect, // 0x38
+ BattleAICmd_if_stat_level_less_than, // 0x39
+ BattleAICmd_if_stat_level_more_than, // 0x3A
+ BattleAICmd_if_stat_level_equal, // 0x3B
+ BattleAICmd_if_stat_level_not_equal, // 0x3C
+ BattleAICmd_if_can_faint, // 0x3D
+ BattleAICmd_if_cant_faint, // 0x3E
+ BattleAICmd_if_has_move, // 0x3F
+ BattleAICmd_if_doesnt_have_move, // 0x40
+ BattleAICmd_if_has_move_with_effect, // 0x41
+ BattleAICmd_if_doesnt_have_move_with_effect, // 0x42
BattleAICmd_if_any_move_disabled_or_encored, // 0x43
BattleAICmd_if_curr_move_disabled_or_encored, // 0x44
- BattleAICmd_flee, // 0x45
- BattleAICmd_if_random_safari_flee, // 0x46
- BattleAICmd_watch, // 0x47
- BattleAICmd_get_hold_effect, // 0x48
- BattleAICmd_get_gender, // 0x49
- BattleAICmd_is_first_turn_for, // 0x4A
- BattleAICmd_get_stockpile_count, // 0x4B
- BattleAICmd_is_double_battle, // 0x4C
- BattleAICmd_get_used_held_item, // 0x4D
- BattleAICmd_get_move_type_from_result, // 0x4E
- BattleAICmd_get_move_power_from_result, // 0x4F
- BattleAICmd_get_move_effect_from_result, // 0x50
- BattleAICmd_get_protect_count, // 0x51
- BattleAICmd_nullsub_52, // 0x52
- BattleAICmd_nullsub_53, // 0x53
- BattleAICmd_nullsub_54, // 0x54
- BattleAICmd_nullsub_55, // 0x55
- BattleAICmd_nullsub_56, // 0x56
- BattleAICmd_nullsub_57, // 0x57
- BattleAICmd_call, // 0x58
- BattleAICmd_goto, // 0x59
- BattleAICmd_end, // 0x5A
- BattleAICmd_if_level_cond, // 0x5B
- BattleAICmd_if_target_taunted, // 0x5C
- BattleAICmd_if_target_not_taunted, // 0x5D
- BattleAICmd_if_target_is_ally, // 0x5E
- BattleAICmd_is_of_type, // 0x5F
- BattleAICmd_check_ability, // 0x60
- BattleAICmd_if_flash_fired, // 0x61
- BattleAICmd_if_holds_item, // 0x62
+ BattleAICmd_flee, // 0x45
+ BattleAICmd_if_random_safari_flee, // 0x46
+ BattleAICmd_watch, // 0x47
+ BattleAICmd_get_hold_effect, // 0x48
+ BattleAICmd_get_gender, // 0x49
+ BattleAICmd_is_first_turn_for, // 0x4A
+ BattleAICmd_get_stockpile_count, // 0x4B
+ BattleAICmd_is_double_battle, // 0x4C
+ BattleAICmd_get_used_held_item, // 0x4D
+ BattleAICmd_get_move_type_from_result, // 0x4E
+ BattleAICmd_get_move_power_from_result, // 0x4F
+ BattleAICmd_get_move_effect_from_result, // 0x50
+ BattleAICmd_get_protect_count, // 0x51
+ BattleAICmd_nullsub_52, // 0x52
+ BattleAICmd_nullsub_53, // 0x53
+ BattleAICmd_nullsub_54, // 0x54
+ BattleAICmd_nullsub_55, // 0x55
+ BattleAICmd_nullsub_56, // 0x56
+ BattleAICmd_nullsub_57, // 0x57
+ BattleAICmd_call, // 0x58
+ BattleAICmd_goto, // 0x59
+ BattleAICmd_end, // 0x5A
+ BattleAICmd_if_level_cond, // 0x5B
+ BattleAICmd_if_target_taunted, // 0x5C
+ BattleAICmd_if_target_not_taunted, // 0x5D
+ BattleAICmd_if_target_is_ally, // 0x5E
+ BattleAICmd_is_of_type, // 0x5F
+ BattleAICmd_check_ability, // 0x60
+ BattleAICmd_if_flash_fired, // 0x61
+ BattleAICmd_if_holds_item, // 0x62
};
static const u16 sDiscouragedPowerfulMoveEffects[] =
@@ -282,26 +280,29 @@ static const u16 sDiscouragedPowerfulMoveEffects[] =
0xFFFF
};
+// code
void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves)
{
s32 i;
- u8 *data = (u8 *)gBattleResources->battleHistory;
+ u8 *data = (u8 *)BATTLE_HISTORY;
for (i = 0; i < sizeof(struct BattleHistory); i++)
data[i] = 0;
- // items are allowed to use in ONLY trainer battles
- if ((gBattleTypeFlags &
- (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER |
- BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER | BATTLE_TYPE_FRONTIER
- | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_x2000000 | BATTLE_TYPE_SECRET_BASE))
- == BATTLE_TYPE_TRAINER)
+
+ // Items are allowed to use in ONLY trainer battles.
+ if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER
+ | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_SECRET_BASE | BATTLE_TYPE_FRONTIER
+ | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_x2000000)
+ )
+ )
{
for (i = 0; i < 4; i++)
{
if (gTrainers[gTrainerBattleOpponent_A].items[i] != 0)
{
- gBattleResources->battleHistory->trainerItems[gBattleResources->battleHistory->itemsNo] = gTrainers[gTrainerBattleOpponent_A].items[i];
- gBattleResources->battleHistory->itemsNo++;
+ BATTLE_HISTORY->trainerItems[BATTLE_HISTORY->itemsNo] = gTrainers[gTrainerBattleOpponent_A].items[i];
+ BATTLE_HISTORY->itemsNo++;
}
}
}
@@ -315,23 +316,24 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves)
u8 *data = (u8 *)AI_THINKING_STRUCT;
u8 moveLimitations;
- // clear AI data.
+ // Clear AI data.
for (i = 0; i < sizeof(struct AI_ThinkingStruct); i++)
data[i] = 0;
- // conditional score reset, unlike Ruby.
+ // Conditional score reset, unlike Ruby.
for (i = 0; i < 4; i++)
{
if (defaultScoreMoves & 1)
AI_THINKING_STRUCT->score[i] = 100;
else
AI_THINKING_STRUCT->score[i] = 0;
+
defaultScoreMoves >>= 1;
}
moveLimitations = CheckMoveLimitations(gActiveBattler, 0, 0xFF);
- // ignore moves that aren't possible to use
+ // Ignore moves that aren't possible to use.
for (i = 0; i < 4; i++)
{
if (gBitTable[i] & moveLimitations)
@@ -339,21 +341,24 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves)
AI_THINKING_STRUCT->simulatedRNG[i] = 100 - (Random() % 16);
}
+
gBattleResources->AI_ScriptsStack->size = 0;
sBattler_AI = gActiveBattler;
- // decide a random target battlerId in doubles
+
+ // Decide a random target battlerId in doubles.
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
gBattlerTarget = (Random() & BIT_FLANK) + (GetBattlerSide(gActiveBattler) ^ BIT_SIDE);
if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
gBattlerTarget ^= BIT_FLANK;
}
- // in singles there's only one choice
+ // There's only one choice in single battles.
else
{
gBattlerTarget = sBattler_AI ^ BIT_SIDE;
}
+ // Choose proper trainer ai scripts.
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
AI_THINKING_STRUCT->aiFlags = GetAiScriptsInRecordedBattle();
else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
@@ -370,6 +375,7 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves)
AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent_A].aiFlags | gTrainers[gTrainerBattleOpponent_B].aiFlags;
else
AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent_A].aiFlags;
+
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
AI_THINKING_STRUCT->aiFlags |= AI_SCRIPT_DOUBLE_BATTLE; // act smart in doubles and don't attack your partner
}
@@ -380,15 +386,15 @@ u8 BattleAI_ChooseMoveOrAction(void)
u8 ret;
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
- ret = BattleAI_ChooseMoveOrAction_Singles();
+ ret = ChooseMoveOrAction_Singles();
else
- ret = BattleAI_ChooseMoveOrAction_Doubles();
+ ret = ChooseMoveOrAction_Doubles();
gCurrentMove = savedCurrentMove;
return ret;
}
-static u8 BattleAI_ChooseMoveOrAction_Singles(void)
+static u8 ChooseMoveOrAction_Singles(void)
{
u8 currentMoveArray[4];
u8 consideredMoveArray[4];
@@ -409,11 +415,11 @@ static u8 BattleAI_ChooseMoveOrAction_Singles(void)
AI_THINKING_STRUCT->movesetIndex = 0;
}
- // special flags for safari
+ // Check special AI actions.
if (AI_THINKING_STRUCT->aiAction & AI_ACTION_FLEE)
- return 4;
+ return AI_CHOICE_FLEE;
if (AI_THINKING_STRUCT->aiAction & AI_ACTION_WATCH)
- return 5;
+ return AI_CHOICE_WATCH;
numOfBestMoves = 1;
currentMoveArray[0] = AI_THINKING_STRUCT->score[0];
@@ -421,9 +427,9 @@ static u8 BattleAI_ChooseMoveOrAction_Singles(void)
for (i = 1; i < 4; i++)
{
- if (gBattleMons[sBattler_AI].moves[i] != 0) // emerald adds an extra move ID check for some reason.
+ if (gBattleMons[sBattler_AI].moves[i] != MOVE_NONE)
{
- // in ruby, the order of these if statements are reversed.
+ // In ruby, the order of these if statements is reversed.
if (currentMoveArray[0] == AI_THINKING_STRUCT->score[i])
{
currentMoveArray[numOfBestMoves] = AI_THINKING_STRUCT->score[i];
@@ -440,7 +446,7 @@ static u8 BattleAI_ChooseMoveOrAction_Singles(void)
return consideredMoveArray[Random() % numOfBestMoves];
}
-static u8 BattleAI_ChooseMoveOrAction_Doubles(void)
+static u8 ChooseMoveOrAction_Doubles(void)
{
s32 i;
s32 j;
@@ -487,10 +493,15 @@ static u8 BattleAI_ChooseMoveOrAction_Doubles(void)
AI_THINKING_STRUCT->aiLogicId++;
AI_THINKING_STRUCT->movesetIndex = 0;
}
+
if (AI_THINKING_STRUCT->aiAction & AI_ACTION_FLEE)
- actionOrMoveIndex[i] = 4;
+ {
+ actionOrMoveIndex[i] = AI_CHOICE_FLEE;
+ }
else if (AI_THINKING_STRUCT->aiAction & AI_ACTION_WATCH)
- actionOrMoveIndex[i] = 5;
+ {
+ actionOrMoveIndex[i] = AI_CHOICE_WATCH;
+ }
else
{
mostViableMovesScores[0] = AI_THINKING_STRUCT->score[0];
@@ -513,18 +524,16 @@ static u8 BattleAI_ChooseMoveOrAction_Doubles(void)
mostViableMovesNo = 1;
}
}
- //_08130E72
}
actionOrMoveIndex[i] = mostViableMovesIndices[Random() % mostViableMovesNo];
bestMovePointsForTarget[i] = mostViableMovesScores[0];
- // don't use a move against ally if it has less than 100 pts
+ // Don't use a move against ally if it has less than 100 points.
if (i == (sBattler_AI ^ BIT_FLANK) && bestMovePointsForTarget[i] < 100)
{
bestMovePointsForTarget[i] = -1;
- mostViableMovesScores[0] = mostViableMovesScores[0]; // needed to match
+ mostViableMovesScores[0] = mostViableMovesScores[0]; // Needed to match.
}
-
}
}
}
@@ -535,13 +544,11 @@ static u8 BattleAI_ChooseMoveOrAction_Doubles(void)
for (i = 1; i < 4; i++)
{
- //_08130EDA
if (mostMovePoints == bestMovePointsForTarget[i])
{
mostViableTargetsArray[mostViableTargetsNo] = i;
mostViableTargetsNo++;
}
- //_08130EEE
if (mostMovePoints < bestMovePointsForTarget[i])
{
mostMovePoints = bestMovePointsForTarget[i];
@@ -576,7 +583,9 @@ static void BattleAI_DoAIProcessing(void)
break;
case AIState_Processing:
if (AI_THINKING_STRUCT->moveConsidered != 0)
+ {
sBattleAICmdTable[*gAIScriptPtr](); // Run AI command.
+ }
else
{
AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0;
@@ -604,12 +613,12 @@ static void RecordLastUsedMoveByTarget(void)
for (i = 0; i < 4; i++)
{
- if (gBattleResources->battleHistory->usedMoves[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget])
+ if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget])
break;
- if (gBattleResources->battleHistory->usedMoves[gBattlerTarget].moves[i] != gLastMoves[gBattlerTarget] // HACK: This redundant condition is a hack to make the asm match.
- && gBattleResources->battleHistory->usedMoves[gBattlerTarget].moves[i] == 0)
+ if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] != gLastMoves[gBattlerTarget] // HACK: This redundant condition is a hack to make the asm match.
+ && BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == MOVE_NONE)
{
- gBattleResources->battleHistory->usedMoves[gBattlerTarget].moves[i] = gLastMoves[gBattlerTarget];
+ BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] = gLastMoves[gBattlerTarget];
break;
}
}
@@ -620,27 +629,27 @@ void ClearBattlerMoveHistory(u8 battlerId)
s32 i;
for (i = 0; i < 4; i++)
- gBattleResources->battleHistory->usedMoves[battlerId].moves[i] = 0;
+ BATTLE_HISTORY->usedMoves[battlerId].moves[i] = MOVE_NONE;
}
void RecordAbilityBattle(u8 battlerId, u8 abilityId)
{
- gBattleResources->battleHistory->abilities[battlerId] = abilityId;
+ BATTLE_HISTORY->abilities[battlerId] = abilityId;
}
void ClearBattlerAbilityHistory(u8 battlerId)
{
- gBattleResources->battleHistory->abilities[battlerId] = 0;
+ BATTLE_HISTORY->abilities[battlerId] = ABILITY_NONE;
}
void RecordItemEffectBattle(u8 battlerId, u8 itemEffect)
{
- gBattleResources->battleHistory->itemEffects[battlerId] = itemEffect;
+ BATTLE_HISTORY->itemEffects[battlerId] = itemEffect;
}
-void ClearBankItemEffectHistory(u8 battlerId)
+void ClearBattlerItemEffectHistory(u8 battlerId)
{
- gBattleResources->battleHistory->itemEffects[battlerId] = 0;
+ BATTLE_HISTORY->itemEffects[battlerId] = 0;
}
static void BattleAICmd_if_random_less_than(void)
@@ -685,9 +694,9 @@ static void BattleAICmd_if_random_not_equal(void)
static void BattleAICmd_score(void)
{
- AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] += gAIScriptPtr[1]; // add the result to the array of the move consider's score.
+ AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] += gAIScriptPtr[1]; // Add the result to the array of the move consider's score.
- if (AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] < 0) // if the score is negative, flatten it to 0.
+ if (AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] < 0) // If the score is negative, flatten it to 0.
AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0;
gAIScriptPtr += 2; // AI return.
@@ -765,7 +774,7 @@ static void BattleAICmd_if_status(void)
status = T1_READ_32(gAIScriptPtr + 2);
- if ((gBattleMons[battlerId].status1 & status) != 0)
+ if (gBattleMons[battlerId].status1 & status)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -783,7 +792,7 @@ static void BattleAICmd_if_not_status(void)
status = T1_READ_32(gAIScriptPtr + 2);
- if ((gBattleMons[battlerId].status1 & status) == 0)
+ if (!(gBattleMons[battlerId].status1 & status))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -801,7 +810,7 @@ static void BattleAICmd_if_status2(void)
status = T1_READ_32(gAIScriptPtr + 2);
- if ((gBattleMons[battlerId].status2 & status) != 0)
+ if ((gBattleMons[battlerId].status2 & status))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -819,7 +828,7 @@ static void BattleAICmd_if_not_status2(void)
status = T1_READ_32(gAIScriptPtr + 2);
- if ((gBattleMons[battlerId].status2 & status) == 0)
+ if (!(gBattleMons[battlerId].status2 & status))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -837,7 +846,7 @@ static void BattleAICmd_if_status3(void)
status = T1_READ_32(gAIScriptPtr + 2);
- if ((gStatuses3[battlerId] & status) != 0)
+ if (gStatuses3[battlerId] & status)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -855,7 +864,7 @@ static void BattleAICmd_if_not_status3(void)
status = T1_READ_32(gAIScriptPtr + 2);
- if ((gStatuses3[battlerId] & status) == 0)
+ if (!(gStatuses3[battlerId] & status))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -874,7 +883,7 @@ static void BattleAICmd_if_side_affecting(void)
side = GET_BATTLER_SIDE(battlerId);
status = T1_READ_32(gAIScriptPtr + 2);
- if ((gSideStatuses[side] & status) != 0)
+ if (gSideStatuses[side] & status)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -893,7 +902,7 @@ static void BattleAICmd_if_not_side_affecting(void)
side = GET_BATTLER_SIDE(battlerId);
status = T1_READ_32(gAIScriptPtr + 2);
- if ((gSideStatuses[side] & status) == 0)
+ if (!(gSideStatuses[side] & status))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
@@ -1041,7 +1050,7 @@ static void BattleAICmd_if_in_hwords(void)
static void BattleAICmd_if_not_in_hwords(void)
{
- const u16 *ptr = (u16 *)T1_READ_PTR(gAIScriptPtr + 1);
+ const u16 *ptr = (const u16 *)T1_READ_PTR(gAIScriptPtr + 1);
while (*ptr != 0xFFFF)
{
@@ -1065,6 +1074,7 @@ static void BattleAICmd_if_user_has_attacking_move(void)
&& gBattleMoves[gBattleMons[sBattler_AI].moves[i]].power != 0)
break;
}
+
if (i == 4)
gAIScriptPtr += 5;
else
@@ -1081,6 +1091,7 @@ static void BattleAICmd_if_user_has_no_attacking_moves(void)
&& gBattleMoves[gBattleMons[sBattler_AI].moves[i]].power != 0)
break;
}
+
if (i != 4)
gAIScriptPtr += 5;
else
@@ -1118,34 +1129,30 @@ static void BattleAICmd_get_type(void)
gAIScriptPtr += 2;
}
-static u8 BattleAI_GetWantedBank(u8 battlerId)
+static u8 BattleAI_GetWantedBattler(u8 wantedBattler)
{
- switch (battlerId)
+ switch (wantedBattler)
{
- case AI_USER:
- return sBattler_AI;
- case AI_TARGET:
- default:
- return gBattlerTarget;
- case AI_USER_PARTNER:
- return sBattler_AI ^ BIT_FLANK;
- case AI_TARGET_PARTNER:
- return gBattlerTarget ^ BIT_FLANK;
+ case AI_USER:
+ return sBattler_AI;
+ case AI_TARGET:
+ default:
+ return gBattlerTarget;
+ case AI_USER_PARTNER:
+ return sBattler_AI ^ BIT_FLANK;
+ case AI_TARGET_PARTNER:
+ return gBattlerTarget ^ BIT_FLANK;
}
}
static void BattleAICmd_is_of_type(void)
{
- u8 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
+ u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]);
- if(gBattleMons[battlerId].type1 == gAIScriptPtr[2] || gBattleMons[battlerId].type2 == gAIScriptPtr[2])
- {
+ if (IS_BATTLER_OF_TYPE(battlerId, gAIScriptPtr[2]))
AI_THINKING_STRUCT->funcResult = TRUE;
- }
else
- {
AI_THINKING_STRUCT->funcResult = FALSE;
- }
gAIScriptPtr += 3;
}
@@ -1208,19 +1215,19 @@ static void BattleAICmd_get_how_powerful_move_is(void)
}
if (checkedMove == 4)
- AI_THINKING_STRUCT->funcResult = MOVE_MOST_POWERFUL; // is the most powerful
+ AI_THINKING_STRUCT->funcResult = MOVE_MOST_POWERFUL; // Is the most powerful.
else
- AI_THINKING_STRUCT->funcResult = MOVE_NOT_MOST_POWERFUL; // not most powerful
+ AI_THINKING_STRUCT->funcResult = MOVE_NOT_MOST_POWERFUL; // Not the most powerful.
}
else
{
- AI_THINKING_STRUCT->funcResult = MOVE_POWER_DISCOURAGED; // highly discouraged in terms of power
+ AI_THINKING_STRUCT->funcResult = MOVE_POWER_DISCOURAGED; // Highly discouraged in terms of power.
}
gAIScriptPtr++;
}
-static void BattleAICmd_get_last_used_bank_move(void)
+static void BattleAICmd_get_last_used_battler_move(void)
{
if (gAIScriptPtr[1] == AI_USER)
AI_THINKING_STRUCT->funcResult = gLastMoves[sBattler_AI];
@@ -1230,7 +1237,7 @@ static void BattleAICmd_get_last_used_bank_move(void)
gAIScriptPtr += 2;
}
-static void BattleAICmd_if_equal_(void) // same as if_equal
+static void BattleAICmd_if_equal_(void) // Same as if_equal.
{
if (gAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -1238,7 +1245,7 @@ static void BattleAICmd_if_equal_(void) // same as if_equal
gAIScriptPtr += 6;
}
-static void BattleAICmd_if_not_equal_(void) // same as if_not_equal
+static void BattleAICmd_if_not_equal_(void) // Same as if_not_equal.
{
if (gAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -1273,9 +1280,9 @@ static void BattleAICmd_nullsub_2B(void)
static void BattleAICmd_count_usable_party_mons(void)
{
u8 battlerId;
- u8 bankOnField1, bankOnField2;
+ u8 battlerOnField1, battlerOnField2;
struct Pokemon *party;
- int i;
+ s32 i;
AI_THINKING_STRUCT->funcResult = 0;
@@ -1292,19 +1299,19 @@ static void BattleAICmd_count_usable_party_mons(void)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
u32 position;
- bankOnField1 = gBattlerPartyIndexes[battlerId];
+ battlerOnField1 = gBattlerPartyIndexes[battlerId];
position = GetBattlerPosition(battlerId) ^ BIT_FLANK;
- bankOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(position)];
+ battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(position)];
}
- else // in singles there's only one battlerId by side
+ else // In singles there's only one battlerId by side.
{
- bankOnField1 = gBattlerPartyIndexes[battlerId];
- bankOnField2 = gBattlerPartyIndexes[battlerId];
+ battlerOnField1 = gBattlerPartyIndexes[battlerId];
+ battlerOnField2 = gBattlerPartyIndexes[battlerId];
}
for (i = 0; i < PARTY_SIZE; i++)
{
- if (i != bankOnField1 && i != bankOnField2
+ if (i != battlerOnField1 && i != battlerOnField2
&& GetMonData(&party[i], MON_DATA_HP) != 0
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
@@ -1362,22 +1369,18 @@ static void BattleAICmd_get_ability(void)
{
// AI has no knowledge of opponent, so it guesses which ability.
if (Random() & 1)
- {
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability1;
- }
else
- {
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability2;
- }
}
else
{
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability1; // it's definitely ability 1.
+ AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability1; // It's definitely ability 1.
}
}
else
{
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
+ AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability2; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1.
}
}
else
@@ -1385,22 +1388,23 @@ static void BattleAICmd_get_ability(void)
// The AI knows its own ability.
AI_THINKING_STRUCT->funcResult = gBattleMons[battlerId].ability;
}
+
gAIScriptPtr += 2;
}
static void BattleAICmd_check_ability(void)
{
- u32 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
+ u32 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]);
u32 ability = gAIScriptPtr[2];
if (gAIScriptPtr[1] == AI_TARGET || gAIScriptPtr[1] == AI_TARGET_PARTNER)
{
- if (BATTLE_HISTORY->abilities[battlerId] != 0)
+ if (BATTLE_HISTORY->abilities[battlerId] != ABILITY_NONE)
{
ability = BATTLE_HISTORY->abilities[battlerId];
AI_THINKING_STRUCT->funcResult = ability;
}
- // abilities that prevent fleeing.
+ // Abilities that prevent fleeing.
else if (gBattleMons[battlerId].ability == ABILITY_SHADOW_TAG
|| gBattleMons[battlerId].ability == ABILITY_MAGNET_PULL
|| gBattleMons[battlerId].ability == ABILITY_ARENA_TRAP)
@@ -1411,14 +1415,16 @@ static void BattleAICmd_check_ability(void)
{
if (gBaseStats[gBattleMons[battlerId].species].ability2 != ABILITY_NONE)
{
- u8 abilityDummyVariable = ability; // needed to match
+ u8 abilityDummyVariable = ability; // Needed to match.
if (gBaseStats[gBattleMons[battlerId].species].ability1 != abilityDummyVariable
&& gBaseStats[gBattleMons[battlerId].species].ability2 != abilityDummyVariable)
{
ability = gBaseStats[gBattleMons[battlerId].species].ability1;
}
else
- ability = 0;
+ {
+ ability = ABILITY_NONE;
+ }
}
else
{
@@ -1427,7 +1433,7 @@ static void BattleAICmd_check_ability(void)
}
else
{
- ability = gBaseStats[gBattleMons[battlerId].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
+ ability = gBaseStats[gBattleMons[battlerId].species].ability2; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1.
}
}
else
@@ -1435,25 +1441,21 @@ static void BattleAICmd_check_ability(void)
// The AI knows its own or partner's ability.
ability = gBattleMons[battlerId].ability;
}
+
if (ability == 0)
- {
- AI_THINKING_STRUCT->funcResult = 2; // unable to answer
- }
+ AI_THINKING_STRUCT->funcResult = 2; // Unable to answer.
else if (ability == gAIScriptPtr[2])
- {
- AI_THINKING_STRUCT->funcResult = 1; // pokemon has the ability we wanted to check
- }
+ AI_THINKING_STRUCT->funcResult = 1; // Pokemon has the ability we wanted to check.
else
- {
- AI_THINKING_STRUCT->funcResult = 0; // pokemon doesn't have the ability we wanted to check
- }
+ AI_THINKING_STRUCT->funcResult = 0; // Pokemon doesn't have the ability we wanted to check.
+
gAIScriptPtr += 3;
}
static void BattleAICmd_get_highest_type_effectiveness(void)
{
s32 i;
- u8* dynamicMoveType;
+ u8 *dynamicMoveType;
gDynamicBasePower = 0;
dynamicMoveType = &gBattleStruct->dynamicMoveType;
@@ -1465,19 +1467,18 @@ static void BattleAICmd_get_highest_type_effectiveness(void)
for (i = 0; i < 4; i++)
{
- gBattleMoveDamage = AI_EFFECTIVENESS_x1;
+ gBattleMoveDamage = 40;
gCurrentMove = gBattleMons[sBattler_AI].moves[i];
- if (gCurrentMove)
+ if (gCurrentMove != MOVE_NONE)
{
TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
- // reduce by 1/3.
- if (gBattleMoveDamage == 120)
+ if (gBattleMoveDamage == 120) // Super effective STAB.
gBattleMoveDamage = AI_EFFECTIVENESS_x2;
if (gBattleMoveDamage == 240)
gBattleMoveDamage = AI_EFFECTIVENESS_x4;
- if (gBattleMoveDamage == 30)
+ if (gBattleMoveDamage == 30) // Not very effective STAB.
gBattleMoveDamage = AI_EFFECTIVENESS_x0_5;
if (gBattleMoveDamage == 15)
gBattleMoveDamage = AI_EFFECTIVENESS_x0_25;
@@ -1489,6 +1490,7 @@ static void BattleAICmd_get_highest_type_effectiveness(void)
AI_THINKING_STRUCT->funcResult = gBattleMoveDamage;
}
}
+
gAIScriptPtr += 1;
}
@@ -1507,11 +1509,11 @@ static void BattleAICmd_if_type_effectiveness(void)
TypeCalc(gCurrentMove, sBattler_AI, gBattlerTarget);
- if (gBattleMoveDamage == 120)
+ if (gBattleMoveDamage == 120) // Super effective STAB.
gBattleMoveDamage = AI_EFFECTIVENESS_x2;
if (gBattleMoveDamage == 240)
gBattleMoveDamage = AI_EFFECTIVENESS_x4;
- if (gBattleMoveDamage == 30)
+ if (gBattleMoveDamage == 30) // Not very effective STAB.
gBattleMoveDamage = AI_EFFECTIVENESS_x0_5;
if (gBattleMoveDamage == 15)
gBattleMoveDamage = AI_EFFECTIVENESS_x0_25;
@@ -1519,7 +1521,7 @@ static void BattleAICmd_if_type_effectiveness(void)
if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE)
gBattleMoveDamage = AI_EFFECTIVENESS_x0;
- // store gBattleMoveDamage in a u8 variable because gAIScriptPtr[1] is a u8.
+ // Store gBattleMoveDamage in a u8 variable because gAIScriptPtr[1] is a u8.
damageVar = gBattleMoveDamage;
if (damageVar == gAIScriptPtr[1])
@@ -1539,18 +1541,18 @@ static void BattleAICmd_nullsub_33(void)
static void BattleAICmd_if_status_in_party(void)
{
struct Pokemon *party;
- int i;
+ s32 i;
u32 statusToCompareTo;
u8 battlerId;
- switch(gAIScriptPtr[1])
+ switch (gAIScriptPtr[1])
{
- case AI_USER:
- battlerId = sBattler_AI;
- break;
- default:
- battlerId = gBattlerTarget;
- break;
+ case AI_USER:
+ battlerId = sBattler_AI;
+ break;
+ default:
+ battlerId = gBattlerTarget;
+ break;
}
party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
@@ -1576,18 +1578,18 @@ static void BattleAICmd_if_status_in_party(void)
static void BattleAICmd_if_status_not_in_party(void)
{
struct Pokemon *party;
- int i;
+ s32 i;
u32 statusToCompareTo;
u8 battlerId;
switch(gAIScriptPtr[1])
{
- case 1:
- battlerId = sBattler_AI;
- break;
- default:
- battlerId = gBattlerTarget;
- break;
+ case 1:
+ battlerId = sBattler_AI;
+ break;
+ default:
+ battlerId = gBattlerTarget;
+ break;
}
party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
@@ -1602,7 +1604,8 @@ static void BattleAICmd_if_status_not_in_party(void)
if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo)
{
- gAIScriptPtr += 10; // still bugged in Emerald
+ gAIScriptPtr += 10; // UB: Still bugged in Emerald. Uncomment the return statement to fix.
+ // return;
}
}
@@ -1718,7 +1721,7 @@ static void BattleAICmd_if_can_faint(void)
gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100;
- // moves always do at least 1 damage.
+ // Moves always do at least 1 damage.
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
@@ -1747,7 +1750,7 @@ static void BattleAICmd_if_cant_faint(void)
gBattleMoveDamage = gBattleMoveDamage * AI_THINKING_STRUCT->simulatedRNG[AI_THINKING_STRUCT->movesetIndex] / 100;
- // this macro is missing the damage 0 = 1 assumption.
+ // This macro is missing the damage 0 = 1 assumption.
if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1757,118 +1760,93 @@ static void BattleAICmd_if_cant_faint(void)
static void BattleAICmd_if_has_move(void)
{
- int i;
+ s32 i;
const u16 *movePtr = (u16 *)(gAIScriptPtr + 2);
switch (gAIScriptPtr[1])
{
- case AI_USER:
- for (i = 0; i < 4; i++)
- {
- if (gBattleMons[sBattler_AI].moves[i] == *movePtr)
- break;
- }
- if (i == 4)
- {
- gAIScriptPtr += 8;
- return;
- }
- else
- {
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- return;
- }
- case AI_USER_PARTNER:
- if (gBattleMons[sBattler_AI ^ BIT_FLANK].hp == 0)
- {
- gAIScriptPtr += 8;
- return;
- }
- else
- {
- for (i = 0; i < 4; i++)
- {
- if (gBattleMons[sBattler_AI ^ BIT_FLANK].moves[i] == *movePtr)
- break;
- }
- }
- if (i == 4)
- {
- gAIScriptPtr += 8;
- return;
- }
- else
- {
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- return;
- }
- case AI_TARGET:
- case AI_TARGET_PARTNER:
+ case AI_USER:
+ for (i = 0; i < 4; i++)
+ {
+ if (gBattleMons[sBattler_AI].moves[i] == *movePtr)
+ break;
+ }
+ if (i == 4)
+ gAIScriptPtr += 8;
+ else
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
+ break;
+ case AI_USER_PARTNER:
+ if (gBattleMons[sBattler_AI ^ BIT_FLANK].hp == 0)
+ {
+ gAIScriptPtr += 8;
+ break;
+ }
+ else
+ {
for (i = 0; i < 4; i++)
{
- if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == *movePtr)
+ if (gBattleMons[sBattler_AI ^ BIT_FLANK].moves[i] == *movePtr)
break;
}
- if (i == 4)
- {
- gAIScriptPtr += 8;
- return;
- }
- else
- {
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- return;
- }
+ }
+ if (i == 4)
+ gAIScriptPtr += 8;
+ else
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
+ break;
+ case AI_TARGET:
+ case AI_TARGET_PARTNER:
+ for (i = 0; i < 4; i++)
+ {
+ if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == *movePtr)
+ break;
+ }
+ if (i == 4)
+ gAIScriptPtr += 8;
+ else
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
+ break;
}
}
static void BattleAICmd_if_doesnt_have_move(void)
{
- int i;
+ s32 i;
const u16 *movePtr = (u16 *)(gAIScriptPtr + 2);
switch(gAIScriptPtr[1])
{
- case AI_USER:
- case AI_USER_PARTNER: // UB: no separate check for user partner
- for (i = 0; i < 4; i++)
- {
- if (gBattleMons[sBattler_AI].moves[i] == *movePtr)
- break;
- }
- if (i != 4)
- {
- gAIScriptPtr += 8;
- return;
- }
- else
- {
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- return;
- }
- case AI_TARGET:
- case AI_TARGET_PARTNER:
- for (i = 0; i < 4; i++)
- {
- if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == *movePtr)
- break;
- }
- if (i != 4)
- {
- gAIScriptPtr += 8;
- return;
- }
- else
- {
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
- return;
- }
+ case AI_USER:
+ case AI_USER_PARTNER: // UB: no separate check for user partner.
+ for (i = 0; i < 4; i++)
+ {
+ if (gBattleMons[sBattler_AI].moves[i] == *movePtr)
+ break;
+ }
+ if (i != 4)
+ gAIScriptPtr += 8;
+ else
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
+ break;
+ case AI_TARGET:
+ case AI_TARGET_PARTNER:
+ for (i = 0; i < 4; i++)
+ {
+ if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == *movePtr)
+ break;
+ }
+ if (i != 4)
+ gAIScriptPtr += 8;
+ else
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
+ break;
}
}
static void BattleAICmd_if_has_move_with_effect(void)
{
- int i;
+ s32 i;
switch (gAIScriptPtr[1])
{
@@ -1888,7 +1866,7 @@ static void BattleAICmd_if_has_move_with_effect(void)
case AI_TARGET_PARTNER:
for (i = 0; i < 4; i++)
{
- // UB: checks sBattler_AI instead of gBattlerTarget
+ // UB: checks sBattler_AI instead of gBattlerTarget.
if (gBattleMons[sBattler_AI].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i]].effect == gAIScriptPtr[2])
break;
}
@@ -1902,7 +1880,7 @@ static void BattleAICmd_if_has_move_with_effect(void)
static void BattleAICmd_if_doesnt_have_move_with_effect(void)
{
- int i;
+ s32 i;
switch (gAIScriptPtr[1])
{
@@ -1944,25 +1922,22 @@ static void BattleAICmd_if_any_move_disabled_or_encored(void)
if (gAIScriptPtr[2] == 0)
{
- if (gDisableStructs[battlerId].disabledMove == 0)
- {
+ if (gDisableStructs[battlerId].disabledMove == MOVE_NONE)
gAIScriptPtr += 7;
- return;
- }
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- return;
+ else
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
}
- else if (gAIScriptPtr[2] != 1) // ignore the macro if its not 0 or 1.
+ else if (gAIScriptPtr[2] != 1)
{
gAIScriptPtr += 7;
- return;
}
- else if (gDisableStructs[battlerId].encoredMove != 0)
+ else
{
- gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
- return;
+ if (gDisableStructs[battlerId].encoredMove != MOVE_NONE)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
+ else
+ gAIScriptPtr += 7;
}
- gAIScriptPtr += 7;
}
static void BattleAICmd_if_curr_move_disabled_or_encored(void)
@@ -1971,23 +1946,19 @@ static void BattleAICmd_if_curr_move_disabled_or_encored(void)
{
case 0:
if (gDisableStructs[gActiveBattler].disabledMove == AI_THINKING_STRUCT->moveConsidered)
- {
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- return;
- }
- gAIScriptPtr += 6;
- return;
+ else
+ gAIScriptPtr += 6;
+ break;
case 1:
if (gDisableStructs[gActiveBattler].encoredMove == AI_THINKING_STRUCT->moveConsidered)
- {
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- return;
- }
- gAIScriptPtr += 6;
- return;
+ else
+ gAIScriptPtr += 6;
+ break;
default:
gAIScriptPtr += 6;
- return;
+ break;
}
}
@@ -1998,7 +1969,7 @@ static void BattleAICmd_flee(void)
static void BattleAICmd_if_random_safari_flee(void)
{
- u8 safariFleeRate = gBattleStruct->field_7B * 5; // safari flee rate, from 0-20
+ u8 safariFleeRate = gBattleStruct->safariEscapeFactor * 5; // Safari flee rate, from 0-20.
if ((u8)(Random() % 100) < safariFleeRate)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -2030,7 +2001,7 @@ static void BattleAICmd_get_hold_effect(void)
static void BattleAICmd_if_holds_item(void)
{
- u8 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
+ u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]);
u16 item;
u8 var1, var2;
@@ -2107,7 +2078,7 @@ static void BattleAICmd_get_used_held_item(void)
else
battlerId = gBattlerTarget;
- // This is likely a leftover from Ruby's code and its ugly ewram access
+ // This is likely a leftover from Ruby's code and its ugly ewram access.
#ifdef NONMATCHING
AI_THINKING_STRUCT->funcResult = gBattleStruct->usedHeldItems[battlerId];
#else
@@ -2199,28 +2170,22 @@ static void BattleAICmd_if_level_cond(void)
{
case 0: // greater than
if (gBattleMons[sBattler_AI].level > gBattleMons[gBattlerTarget].level)
- {
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- return;
- }
- gAIScriptPtr += 6;
- return;
+ else
+ gAIScriptPtr += 6;
+ break;
case 1: // less than
if (gBattleMons[sBattler_AI].level < gBattleMons[gBattlerTarget].level)
- {
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- return;
- }
- gAIScriptPtr += 6;
- return;
+ else
+ gAIScriptPtr += 6;
+ break;
case 2: // equal
if (gBattleMons[sBattler_AI].level == gBattleMons[gBattlerTarget].level)
- {
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
- return;
- }
- gAIScriptPtr += 6;
- return;
+ else
+ gAIScriptPtr += 6;
+ break;
}
}
@@ -2250,7 +2215,7 @@ static void BattleAICmd_if_target_is_ally(void)
static void BattleAICmd_if_flash_fired(void)
{
- u8 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
+ u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]);
if (gBattleResources->flags->flags[battlerId] & UNKNOWN_FLAG_FLASH_FIRE)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -2277,5 +2242,7 @@ static bool8 AIStackPop(void)
return TRUE;
}
else
+ {
return FALSE;
+ }
}
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index 83ad2b4fd..a105e7edf 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -19,18 +19,20 @@ static bool8 ShouldSwitchIfPerishSong(void)
if (gStatuses3[gActiveBattler] & STATUS3_PERISH_SONG
&& gDisableStructs[gActiveBattler].perishSongTimer1 == 0)
{
- *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = 6;
+ *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE;
}
-
- return FALSE;
+ else
+ {
+ return FALSE;
+ }
}
static bool8 ShouldSwitchIfWonderGuard(void)
{
u8 opposingPosition;
- u8 opposingBank;
+ u8 opposingBattler;
u8 moveFlags;
s32 i, j;
s32 firstId;
@@ -46,22 +48,22 @@ static bool8 ShouldSwitchIfWonderGuard(void)
if (gBattleMons[GetBattlerAtPosition(opposingPosition)].ability != ABILITY_WONDER_GUARD)
return FALSE;
- // check if pokemon has a super effective move
- for (opposingBank = GetBattlerAtPosition(opposingPosition), i = 0; i < 4; i++)
+ // Check if Pokemon has a super effective move.
+ for (opposingBattler = GetBattlerAtPosition(opposingPosition), i = 0; i < 4; i++)
{
move = gBattleMons[gActiveBattler].moves[i];
if (move == MOVE_NONE)
continue;
- moveFlags = AI_TypeCalc(move, gBattleMons[opposingBank].species, gBattleMons[opposingBank].ability);
+ moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
return FALSE;
}
- // get party information
+ // Get party information.
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
{
- if ((gActiveBattler & BIT_FLANK) == 0)
+ if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
firstId = 0, lastId = 3;
else
firstId = 3, lastId = 6;
@@ -76,7 +78,7 @@ static bool8 ShouldSwitchIfWonderGuard(void)
else
party = gEnemyParty;
- // find a pokemon in the party that has a super effective move
+ // Find a Pokemon in the party that has a super effective move.
for (i = firstId; i < lastId; i++)
{
if (GetMonData(&party[i], MON_DATA_HP) == 0)
@@ -88,19 +90,19 @@ static bool8 ShouldSwitchIfWonderGuard(void)
if (i == gBattlerPartyIndexes[gActiveBattler])
continue;
- GetMonData(&party[i], MON_DATA_SPECIES); // unused return value
- GetMonData(&party[i], MON_DATA_ALT_ABILITY); // unused return value
+ GetMonData(&party[i], MON_DATA_SPECIES); // Unused return value.
+ GetMonData(&party[i], MON_DATA_ALT_ABILITY); // Unused return value.
- for (opposingBank = GetBattlerAtPosition(opposingPosition), j = 0; j < 4; j++)
+ for (opposingBattler = GetBattlerAtPosition(opposingPosition), j = 0; j < 4; j++)
{
move = GetMonData(&party[i], MON_DATA_MOVE1 + j);
if (move == MOVE_NONE)
continue;
- moveFlags = AI_TypeCalc(move, gBattleMons[opposingBank].species, gBattleMons[opposingBank].ability);
+ moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % 3 < 2)
{
- // we found a mon
+ // We found a mon.
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i;
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE;
@@ -108,12 +110,12 @@ static bool8 ShouldSwitchIfWonderGuard(void)
}
}
- return FALSE; // at this point there is not a single pokemon in the party that has a super effective move against a pokemon with wonder guard
+ return FALSE; // There is not a single Pokemon in the party that has a super effective move against a mon with Wonder Guard.
}
static bool8 FindMonThatAbsorbsOpponentsMove(void)
{
- u8 bankIn1, bankIn2;
+ u8 battlerIn1, battlerIn2;
u8 absorbingTypeAbility;
s32 firstId;
s32 lastId; // + 1
@@ -131,16 +133,16 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
- bankIn1 = gActiveBattler;
+ battlerIn1 = gActiveBattler;
if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))])
- bankIn2 = gActiveBattler;
+ battlerIn2 = gActiveBattler;
else
- bankIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)));
+ battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)));
}
else
{
- bankIn1 = gActiveBattler;
- bankIn2 = gActiveBattler;
+ battlerIn1 = gActiveBattler;
+ battlerIn2 = gActiveBattler;
}
if (gBattleMoves[gLastLandedMoves[gActiveBattler]].type == TYPE_FIRE)
@@ -157,7 +159,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
{
- if ((gActiveBattler & BIT_FLANK) == 0)
+ if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
firstId = 0, lastId = 3;
else
firstId = 3, lastId = 6;
@@ -183,13 +185,13 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
continue;
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
continue;
- if (i == gBattlerPartyIndexes[bankIn1])
+ if (i == gBattlerPartyIndexes[battlerIn1])
continue;
- if (i == gBattlerPartyIndexes[bankIn2])
+ if (i == gBattlerPartyIndexes[battlerIn2])
continue;
- if (i == *(gBattleStruct->monToSwitchIntoId + bankIn1))
+ if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
continue;
- if (i == *(gBattleStruct->monToSwitchIntoId + bankIn2))
+ if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2))
continue;
species = GetMonData(&party[i], MON_DATA_SPECIES);
@@ -200,7 +202,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void)
if (absorbingTypeAbility == monAbility && Random() & 1)
{
- // we found a mon
+ // we found a mon.
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i;
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE;
@@ -221,13 +223,13 @@ static bool8 ShouldSwitchIfNaturalCure(void)
if ((gLastLandedMoves[gActiveBattler] == 0 || gLastLandedMoves[gActiveBattler] == 0xFFFF) && Random() & 1)
{
- *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = 6;
+ *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE;
}
else if (gBattleMoves[gLastLandedMoves[gActiveBattler]].power == 0 && Random() & 1)
{
- *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = 6;
+ *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE;
}
@@ -236,9 +238,10 @@ static bool8 ShouldSwitchIfNaturalCure(void)
return TRUE;
if (FindMonWithFlagsAndSuperEffective(MOVE_RESULT_NOT_VERY_EFFECTIVE, 1))
return TRUE;
+
if (Random() & 1)
{
- *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = 6;
+ *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
BtlController_EmitTwoReturnValues(1, B_ACTION_SWITCH, 0);
return TRUE;
}
@@ -249,15 +252,15 @@ static bool8 ShouldSwitchIfNaturalCure(void)
static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng)
{
u8 opposingPosition;
- u8 opposingBank;
+ u8 opposingBattler;
s32 i;
u8 moveFlags;
u16 move;
opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(gActiveBattler));
- opposingBank = GetBattlerAtPosition(opposingPosition);
+ opposingBattler = GetBattlerAtPosition(opposingPosition);
- if (!(gAbsentBattlerFlags & gBitTable[opposingBank]))
+ if (!(gAbsentBattlerFlags & gBitTable[opposingBattler]))
{
for (i = 0; i < 4; i++)
{
@@ -265,7 +268,7 @@ static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng)
if (move == MOVE_NONE)
continue;
- moveFlags = AI_TypeCalc(move, gBattleMons[opposingBank].species, gBattleMons[opposingBank].ability);
+ moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
{
if (noRng)
@@ -278,9 +281,9 @@ static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng)
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
return FALSE;
- opposingBank = GetBattlerAtPosition(BATTLE_PARTNER(opposingPosition));
+ opposingBattler = GetBattlerAtPosition(BATTLE_PARTNER(opposingPosition));
- if (!(gAbsentBattlerFlags & gBitTable[opposingBank]))
+ if (!(gAbsentBattlerFlags & gBitTable[opposingBattler]))
{
for (i = 0; i < 4; i++)
{
@@ -288,7 +291,7 @@ static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng)
if (move == MOVE_NONE)
continue;
- moveFlags = AI_TypeCalc(move, gBattleMons[opposingBank].species, gBattleMons[opposingBank].ability);
+ moveFlags = AI_TypeCalc(move, gBattleMons[opposingBattler].species, gBattleMons[opposingBattler].ability);
if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE)
{
if (noRng)
@@ -318,7 +321,7 @@ static bool8 AreStatsRaised(void)
static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
{
- u8 bankIn1, bankIn2;
+ u8 battlerIn1, battlerIn2;
s32 firstId;
s32 lastId; // + 1
struct Pokemon *party;
@@ -337,16 +340,16 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
- bankIn1 = gActiveBattler;
+ battlerIn1 = gActiveBattler;
if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))])
- bankIn2 = gActiveBattler;
+ battlerIn2 = gActiveBattler;
else
- bankIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)));
+ battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)));
}
else
{
- bankIn1 = gActiveBattler;
- bankIn2 = gActiveBattler;
+ battlerIn1 = gActiveBattler;
+ battlerIn2 = gActiveBattler;
}
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
@@ -377,13 +380,13 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
continue;
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
continue;
- if (i == gBattlerPartyIndexes[bankIn1])
+ if (i == gBattlerPartyIndexes[battlerIn1])
continue;
- if (i == gBattlerPartyIndexes[bankIn2])
+ if (i == gBattlerPartyIndexes[battlerIn2])
continue;
- if (i == *(gBattleStruct->monToSwitchIntoId + bankIn1))
+ if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
continue;
- if (i == *(gBattleStruct->monToSwitchIntoId + bankIn2))
+ if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2))
continue;
species = GetMonData(&party[i], MON_DATA_SPECIES);
@@ -395,7 +398,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
moveFlags = AI_TypeCalc(gLastLandedMoves[gActiveBattler], species, monAbility);
if (moveFlags & flags)
{
- bankIn1 = gLastHitBy[gActiveBattler];
+ battlerIn1 = gLastHitBy[gActiveBattler];
for (j = 0; j < 4; j++)
{
@@ -403,7 +406,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
if (move == 0)
continue;
- moveFlags = AI_TypeCalc(move, gBattleMons[bankIn1].species, gBattleMons[bankIn1].ability);
+ moveFlags = AI_TypeCalc(move, gBattleMons[battlerIn1].species, gBattleMons[battlerIn1].ability);
if (moveFlags & MOVE_RESULT_SUPER_EFFECTIVE && Random() % moduloPercent == 0)
{
*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = i;
@@ -419,23 +422,23 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent)
static bool8 ShouldSwitch(void)
{
- u8 bankIn1, bankIn2;
- u8 *activeBankPtr; // needed to match
+ u8 battlerIn1, battlerIn2;
+ u8 *activeBattlerPtr; // Needed to match.
s32 firstId;
s32 lastId; // + 1
struct Pokemon *party;
s32 i;
s32 availableToSwitch;
- if (gBattleMons[*(activeBankPtr = &gActiveBattler)].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
+ if (gBattleMons[*(activeBattlerPtr = &gActiveBattler)].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
return FALSE;
if (gStatuses3[gActiveBattler] & STATUS3_ROOTED)
return FALSE;
- if (AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_SHADOW_TAG, 0, 0))
+ if (ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG))
return FALSE;
- if (AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_ARENA_TRAP, 0, 0))
- return FALSE; // misses the flying or levitate check
- if (AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_MAGNET_PULL, 0, 0))
+ if (ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP)) // Misses the flying type and Levitate check.
+ return FALSE;
+ if (ABILITY_ON_FIELD2(ABILITY_MAGNET_PULL))
{
if (gBattleMons[gActiveBattler].type1 == TYPE_STEEL)
return FALSE;
@@ -448,21 +451,21 @@ static bool8 ShouldSwitch(void)
availableToSwitch = 0;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
- bankIn1 = *activeBankPtr;
- if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(GetBattlerPosition(*activeBankPtr) ^ BIT_FLANK)])
- bankIn2 = *activeBankPtr;
+ battlerIn1 = *activeBattlerPtr;
+ if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(GetBattlerPosition(*activeBattlerPtr) ^ BIT_FLANK)])
+ battlerIn2 = *activeBattlerPtr;
else
- bankIn2 = GetBattlerAtPosition(GetBattlerPosition(*activeBankPtr) ^ BIT_FLANK);
+ battlerIn2 = GetBattlerAtPosition(GetBattlerPosition(*activeBattlerPtr) ^ BIT_FLANK);
}
else
{
- bankIn1 = *activeBankPtr;
- bankIn2 = *activeBankPtr;
+ battlerIn1 = *activeBattlerPtr;
+ battlerIn2 = *activeBattlerPtr;
}
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
{
- if ((gActiveBattler & BIT_FLANK) == 0)
+ if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
firstId = 0, lastId = 3;
else
firstId = 3, lastId = 6;
@@ -485,13 +488,13 @@ static bool8 ShouldSwitch(void)
continue;
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
continue;
- if (i == gBattlerPartyIndexes[bankIn1])
+ if (i == gBattlerPartyIndexes[battlerIn1])
continue;
- if (i == gBattlerPartyIndexes[bankIn2])
+ if (i == gBattlerPartyIndexes[battlerIn2])
continue;
- if (i == *(gBattleStruct->monToSwitchIntoId + bankIn1))
+ if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
continue;
- if (i == *(gBattleStruct->monToSwitchIntoId + bankIn2))
+ if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2))
continue;
availableToSwitch++;
@@ -521,10 +524,10 @@ static bool8 ShouldSwitch(void)
void AI_TrySwitchOrUseItem(void)
{
struct Pokemon *party;
- u8 bankIn1, bankIn2;
+ u8 battlerIn1, battlerIn2;
s32 firstId;
s32 lastId; // + 1
- u8 bankIdentity = GetBattlerPosition(gActiveBattler);
+ u8 battlerIdentity = GetBattlerPosition(gActiveBattler);
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
party = gPlayerParty;
@@ -535,25 +538,25 @@ void AI_TrySwitchOrUseItem(void)
{
if (ShouldSwitch())
{
- if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) == 6)
+ if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) == PARTY_SIZE)
{
s32 monToSwitchId = GetMostSuitableMonToSwitchInto();
- if (monToSwitchId == 6)
+ if (monToSwitchId == PARTY_SIZE)
{
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
{
- bankIn1 = GetBattlerAtPosition(bankIdentity);
- bankIn2 = bankIn1;
+ battlerIn1 = GetBattlerAtPosition(battlerIdentity);
+ battlerIn2 = battlerIn1;
}
else
{
- bankIn1 = GetBattlerAtPosition(bankIdentity);
- bankIn2 = GetBattlerAtPosition(bankIdentity ^ BIT_FLANK);
+ battlerIn1 = GetBattlerAtPosition(battlerIdentity);
+ battlerIn2 = GetBattlerAtPosition(battlerIdentity ^ BIT_FLANK);
}
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
{
- if ((gActiveBattler & BIT_FLANK) == 0)
+ if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
firstId = 0, lastId = 3;
else
firstId = 3, lastId = 6;
@@ -567,13 +570,13 @@ void AI_TrySwitchOrUseItem(void)
{
if (GetMonData(&party[monToSwitchId], MON_DATA_HP) == 0)
continue;
- if (monToSwitchId == gBattlerPartyIndexes[bankIn1])
+ if (monToSwitchId == gBattlerPartyIndexes[battlerIn1])
continue;
- if (monToSwitchId == gBattlerPartyIndexes[bankIn2])
+ if (monToSwitchId == gBattlerPartyIndexes[battlerIn2])
continue;
- if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + bankIn1))
+ if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
continue;
- if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + bankIn2))
+ if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + battlerIn2))
continue;
break;
@@ -608,10 +611,10 @@ static void ModulateByTypeEffectiveness(u8 atkType, u8 defType1, u8 defType2, u8
}
else if (TYPE_EFFECT_ATK_TYPE(i) == atkType)
{
- // check type1
+ // Check type1.
if (TYPE_EFFECT_DEF_TYPE(i) == defType1)
*var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10;
- // check type2
+ // Check type2.
if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2)
*var = (*var * TYPE_EFFECT_MULTIPLIER(i)) / 10;
}
@@ -621,10 +624,10 @@ static void ModulateByTypeEffectiveness(u8 atkType, u8 defType1, u8 defType2, u8
u8 GetMostSuitableMonToSwitchInto(void)
{
- u8 opposingBank;
- u8 bestDmg; // note : should be changed to u32 for obvious reasons
+ u8 opposingBattler;
+ u8 bestDmg; // Note : should be changed to u32 for obvious reasons.
u8 bestMonId;
- u8 bankIn1, bankIn2;
+ u8 battlerIn1, battlerIn2;
s32 firstId;
s32 lastId; // + 1
struct Pokemon *party;
@@ -632,34 +635,34 @@ u8 GetMostSuitableMonToSwitchInto(void)
u8 invalidMons;
u16 move;
- if (*(gBattleStruct->monToSwitchIntoId + gActiveBattler) != 6)
+ if (*(gBattleStruct->monToSwitchIntoId + gActiveBattler) != PARTY_SIZE)
return *(gBattleStruct->monToSwitchIntoId + gActiveBattler);
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
return gBattlerPartyIndexes[gActiveBattler] + 1;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
- bankIn1 = gActiveBattler;
+ battlerIn1 = gActiveBattler;
if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK)])
- bankIn2 = gActiveBattler;
+ battlerIn2 = gActiveBattler;
else
- bankIn2 = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK);
+ battlerIn2 = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_FLANK);
- // UB: It considers the opponent only player's side even though it can battle alongside player;
- opposingBank = Random() & BIT_FLANK;
- if (gAbsentBattlerFlags & gBitTable[opposingBank])
- opposingBank ^= BIT_FLANK;
+ // UB: It considers the opponent only player's side even though it can battle alongside player.
+ opposingBattler = Random() & BIT_FLANK;
+ if (gAbsentBattlerFlags & gBitTable[opposingBattler])
+ opposingBattler ^= BIT_FLANK;
}
else
{
- opposingBank = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_SIDE);
- bankIn1 = gActiveBattler;
- bankIn2 = gActiveBattler;
+ opposingBattler = GetBattlerAtPosition(GetBattlerPosition(gActiveBattler) ^ BIT_SIDE);
+ battlerIn1 = gActiveBattler;
+ battlerIn2 = gActiveBattler;
}
if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000))
{
- if ((gActiveBattler & BIT_FLANK) == 0)
+ if ((gActiveBattler & BIT_FLANK) == B_FLANK_LEFT)
firstId = 0, lastId = 3;
else
firstId = 3, lastId = 6;
@@ -676,27 +679,27 @@ u8 GetMostSuitableMonToSwitchInto(void)
invalidMons = 0;
- while (invalidMons != 0x3F) // all mons are invalid
+ while (invalidMons != 0x3F) // All mons are invalid.
{
bestDmg = 0;
bestMonId = 6;
- // find the mon which type is the most suitable offensively
+ // Find the mon whose type is the most suitable offensively.
for (i = firstId; i < lastId; i++)
{
u16 species = GetMonData(&party[i], MON_DATA_SPECIES);
if (species != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_HP) != 0
&& !(gBitTable[i] & invalidMons)
- && gBattlerPartyIndexes[bankIn1] != i
- && gBattlerPartyIndexes[bankIn2] != i
- && i != *(gBattleStruct->monToSwitchIntoId + bankIn1)
- && i != *(gBattleStruct->monToSwitchIntoId + bankIn2))
+ && gBattlerPartyIndexes[battlerIn1] != i
+ && gBattlerPartyIndexes[battlerIn2] != i
+ && i != *(gBattleStruct->monToSwitchIntoId + battlerIn1)
+ && i != *(gBattleStruct->monToSwitchIntoId + battlerIn2))
{
u8 type1 = gBaseStats[species].type1;
u8 type2 = gBaseStats[species].type2;
u8 typeDmg = 10;
- ModulateByTypeEffectiveness(gBattleMons[opposingBank].type1, type1, type2, &typeDmg);
- ModulateByTypeEffectiveness(gBattleMons[opposingBank].type2, type1, type2, &typeDmg);
+ ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type1, type1, type2, &typeDmg);
+ ModulateByTypeEffectiveness(gBattleMons[opposingBattler].type2, type1, type2, &typeDmg);
if (bestDmg < typeDmg)
{
bestDmg = typeDmg;
@@ -709,24 +712,24 @@ u8 GetMostSuitableMonToSwitchInto(void)
}
}
- // ok, we know the mon has the right typing but does it have at least one super effective move?
- if (bestMonId != 6)
+ // Ok, we know the mon has the right typing but does it have at least one super effective move?
+ if (bestMonId != PARTY_SIZE)
{
for (i = 0; i < 4; i++)
{
move = GetMonData(&party[bestMonId], MON_DATA_MOVE1 + i);
- if (move != MOVE_NONE && TypeCalc(move, gActiveBattler, opposingBank) & MOVE_RESULT_SUPER_EFFECTIVE)
+ if (move != MOVE_NONE && TypeCalc(move, gActiveBattler, opposingBattler) & MOVE_RESULT_SUPER_EFFECTIVE)
break;
}
if (i != 4)
- return bestMonId; // has both the typing and at least one super effective move
+ return bestMonId; // Has both the typing and at least one super effective move.
- invalidMons |= gBitTable[bestMonId]; // sorry buddy, we want something better
+ invalidMons |= gBitTable[bestMonId]; // Sorry buddy, we want something better.
}
else
{
- invalidMons = 0x3F; // no viable mon to switch
+ invalidMons = 0x3F; // No viable mon to switch.
}
}
@@ -738,20 +741,20 @@ u8 GetMostSuitableMonToSwitchInto(void)
bestDmg = 0;
bestMonId = 6;
- // if we couldn't find the best mon in terms of typing, find the one that deals most damage
+ // If we couldn't find the best mon in terms of typing, find the one that deals most damage.
for (i = firstId; i < lastId; i++)
{
if ((u16)(GetMonData(&party[i], MON_DATA_SPECIES)) == SPECIES_NONE)
continue;
if (GetMonData(&party[i], MON_DATA_HP) == 0)
continue;
- if (gBattlerPartyIndexes[bankIn1] == i)
+ if (gBattlerPartyIndexes[battlerIn1] == i)
continue;
- if (gBattlerPartyIndexes[bankIn2] == i)
+ if (gBattlerPartyIndexes[battlerIn2] == i)
continue;
- if (i == *(gBattleStruct->monToSwitchIntoId + bankIn1))
+ if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn1))
continue;
- if (i == *(gBattleStruct->monToSwitchIntoId + bankIn2))
+ if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2))
continue;
for (j = 0; j < 4; j++)
@@ -760,8 +763,8 @@ u8 GetMostSuitableMonToSwitchInto(void)
gBattleMoveDamage = 0;
if (move != MOVE_NONE && gBattleMoves[move].power != 1)
{
- AI_CalcDmg(gActiveBattler, opposingBank);
- TypeCalc(move, gActiveBattler, opposingBank);
+ AI_CalcDmg(gActiveBattler, opposingBattler);
+ TypeCalc(move, gActiveBattler, opposingBattler);
}
if (bestDmg < gBattleMoveDamage)
{
@@ -774,21 +777,21 @@ u8 GetMostSuitableMonToSwitchInto(void)
return bestMonId;
}
-// TODO: use PokemonItemEffect struct instead of u8 once it's documented
+// TODO: use PokemonItemEffect struct instead of u8 once it's documented.
static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u16 as item Id argument
{
if (itemId == ITEM_FULL_RESTORE)
return AI_ITEM_FULL_RESTORE;
- if (itemEffect[4] & 4)
+ else if (itemEffect[4] & 4)
return AI_ITEM_HEAL_HP;
- if (itemEffect[3] & 0x3F)
+ else if (itemEffect[3] & 0x3F)
return AI_ITEM_CURE_CONDITION;
- if (itemEffect[0] & 0x3F || itemEffect[1] != 0 || itemEffect[2] != 0)
+ else if (itemEffect[0] & 0x3F || itemEffect[1] != 0 || itemEffect[2] != 0)
return AI_ITEM_X_STAT;
- if (itemEffect[3] & 0x80)
+ else if (itemEffect[3] & 0x80)
return AI_ITEM_GUARD_SPECS;
-
- return AI_ITEM_NOT_RECOGNIZABLE;
+ else
+ return AI_ITEM_NOT_RECOGNIZABLE;
}
static bool8 ShouldUseItem(void)
@@ -806,7 +809,7 @@ static bool8 ShouldUseItem(void)
else
party = gEnemyParty;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&party[i], MON_DATA_HP) != 0
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
@@ -821,7 +824,7 @@ static bool8 ShouldUseItem(void)
u16 item;
const u8 *itemEffects;
u8 paramOffset;
- u8 bankSide;
+ u8 battlerSide;
if (i != 0 && validMons > (gBattleResources->battleHistory->itemsNo - i) + 1)
continue;
@@ -908,8 +911,8 @@ static bool8 ShouldUseItem(void)
shouldUse = TRUE;
break;
case AI_ITEM_GUARD_SPECS:
- bankSide = GetBattlerSide(gActiveBattler);
- if (gDisableStructs[gActiveBattler].isFirstTurn != 0 && gSideTimers[bankSide].mistTimer == 0)
+ battlerSide = GetBattlerSide(gActiveBattler);
+ if (gDisableStructs[gActiveBattler].isFirstTurn != 0 && gSideTimers[battlerSide].mistTimer == 0)
shouldUse = TRUE;
break;
case AI_ITEM_NOT_RECOGNIZABLE:
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 8071736e6..b6f726897 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -120,7 +120,7 @@ EWRAM_DATA static u16 sSoundAnimFramesToWait = 0;
EWRAM_DATA static u8 sMonAnimTaskIdArray[2] = {0};
EWRAM_DATA u8 gAnimMoveTurn = 0;
EWRAM_DATA static u8 sAnimBackgroundFadeState = 0;
-EWRAM_DATA static u16 sAnimMoveIndex = 0; // set but unused.
+EWRAM_DATA static u16 sAnimMoveIndex = 0; // Set but unused.
EWRAM_DATA u8 gBattleAnimAttacker = 0;
EWRAM_DATA u8 gBattleAnimTarget = 0;
EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0};
@@ -179,6 +179,7 @@ static void (* const sScriptCmdTable[])(void) =
ScriptCmd_stopsound
};
+// code
void ClearBattleAnimationVars(void)
{
s32 i;
@@ -192,11 +193,11 @@ void ClearBattleAnimationVars(void)
gAnimMovePower = 0;
gAnimFriendship = 0;
- // clear index array.
+ // Clear index array.
for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++)
sAnimSpriteIndexArray[i] |= 0xFFFF;
- // clear anim args.
+ // Clear anim args.
for (i = 0; i < ANIM_ARGS_COUNT; i++)
gBattleAnimArgs[i] = 0;
@@ -459,7 +460,7 @@ static void ScriptCmd_delay(void)
gAnimScriptCallback = WaitAnimFrameCount;
}
-// wait for visual tasks to finish.
+// Wait for visual tasks to finish.
static void ScriptCmd_waitforvisualfinish(void)
{
if (gAnimVisualTaskCount == 0)
@@ -486,7 +487,7 @@ static void ScriptCmd_end(void)
s32 i;
bool32 continuousAnim = FALSE;
- // keep waiting as long as there is animations to be done.
+ // Keep waiting as long as there are animations to be done.
if (gAnimVisualTaskCount != 0 || gAnimSoundTaskCount != 0
|| sMonAnimTaskIdArray[0] != 0xFF || sMonAnimTaskIdArray[1] != 0xFF)
{
@@ -495,10 +496,10 @@ static void ScriptCmd_end(void)
return;
}
- // finish the sound effects.
+ // Finish the sound effects.
if (IsSEPlaying())
{
- if (++sSoundAnimFramesToWait <= 90) // wait 90 frames, then halt the sound effect.
+ if (++sSoundAnimFramesToWait <= 90) // Wait 90 frames, then halt the sound effect.
{
gAnimFramesToWait = 1;
return;
@@ -510,7 +511,7 @@ static void ScriptCmd_end(void)
}
}
- // the SE has halted, so set the SE Frame Counter to 0 and continue.
+ // The SE has halted, so set the SE Frame Counter to 0 and continue.
sSoundAnimFramesToWait = 0;
for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++)
@@ -523,7 +524,7 @@ static void ScriptCmd_end(void)
}
}
- if (!continuousAnim) // may have been used for debug?
+ if (!continuousAnim) // May have been used for debug?
{
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256);
if (!IsContest())
@@ -592,12 +593,12 @@ static void ScriptCmd_monbg(void)
bool8 toBG_2;
u8 taskId;
u8 battlerId;
- u8 animBank;
+ u8 animBattler;
sBattleAnimScriptPtr++;
- animBank = sBattleAnimScriptPtr[0];
- if (animBank & ANIM_TARGET)
+ animBattler = sBattleAnimScriptPtr[0];
+ if (animBattler & ANIM_TARGET)
battlerId = gBattleAnimTarget;
else
battlerId = gBattleAnimAttacker;
@@ -655,7 +656,7 @@ bool8 IsBattlerSpriteVisible(u8 battlerId)
if (!IsBattlerSpritePresent(battlerId))
return FALSE;
if (IsContest())
- return TRUE; // this line wont ever be reached.
+ return TRUE; // This line won't ever be reached.
if (!gBattleSpritesDataPtr->battlerData[battlerId].invisible || !gSprites[gBattlerSpriteIds[battlerId]].invisible)
return TRUE;
@@ -847,32 +848,32 @@ static void task_pA_ma0A_obj_to_bg_pal(u8 taskId)
static void ScriptCmd_clearmonbg(void)
{
- u8 animBankId;
+ u8 animBattlerId;
u8 battlerId;
u8 taskId;
sBattleAnimScriptPtr++;
- animBankId = sBattleAnimScriptPtr[0];
+ animBattlerId = sBattleAnimScriptPtr[0];
- if (animBankId == ANIM_ATTACKER)
- animBankId = ANIM_ATK_PARTNER;
- else if (animBankId == ANIM_TARGET)
- animBankId = ANIM_DEF_PARTNER;
+ if (animBattlerId == ANIM_ATTACKER)
+ animBattlerId = ANIM_ATK_PARTNER;
+ else if (animBattlerId == ANIM_TARGET)
+ animBattlerId = ANIM_DEF_PARTNER;
- if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER)
+ if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER)
battlerId = gBattleAnimAttacker;
else
battlerId = gBattleAnimTarget;
if (sMonAnimTaskIdArray[0] != 0xFF)
gSprites[gBattlerSpriteIds[battlerId]].invisible = 0;
- if (animBankId > 1 && sMonAnimTaskIdArray[1] != 0xFF)
+ if (animBattlerId > 1 && sMonAnimTaskIdArray[1] != 0xFF)
gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = 0;
else
- animBankId = 0;
+ animBattlerId = 0;
taskId = CreateTask(sub_80A4980, 5);
- gTasks[taskId].data[0] = animBankId;
+ gTasks[taskId].data[0] = animBattlerId;
gTasks[taskId].data[2] = battlerId;
sBattleAnimScriptPtr++;
@@ -910,18 +911,18 @@ static void ScriptCmd_monbg_22(void)
{
bool8 toBG_2;
u8 battlerId;
- u8 animBankId;
+ u8 animBattlerId;
sBattleAnimScriptPtr++;
- animBankId = sBattleAnimScriptPtr[0];
+ animBattlerId = sBattleAnimScriptPtr[0];
- if (animBankId == ANIM_ATTACKER)
- animBankId = ANIM_ATK_PARTNER;
- else if (animBankId == ANIM_TARGET)
- animBankId = ANIM_DEF_PARTNER;
+ if (animBattlerId == ANIM_ATTACKER)
+ animBattlerId = ANIM_ATK_PARTNER;
+ else if (animBattlerId == ANIM_TARGET)
+ animBattlerId = ANIM_DEF_PARTNER;
- if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER)
+ if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER)
battlerId = gBattleAnimAttacker;
else
battlerId = gBattleAnimTarget;
@@ -938,7 +939,7 @@ static void ScriptCmd_monbg_22(void)
}
battlerId ^= BIT_FLANK;
- if (animBankId > 1 && IsBattlerSpriteVisible(battlerId))
+ if (animBattlerId > 1 && IsBattlerSpriteVisible(battlerId))
{
u8 position = GetBattlerPosition(battlerId);
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
@@ -954,32 +955,32 @@ static void ScriptCmd_monbg_22(void)
static void ScriptCmd_clearmonbg_23(void)
{
- u8 animBankId;
+ u8 animBattlerId;
u8 battlerId;
u8 taskId;
sBattleAnimScriptPtr++;
- animBankId = sBattleAnimScriptPtr[0];
+ animBattlerId = sBattleAnimScriptPtr[0];
- if (animBankId == ANIM_ATTACKER)
- animBankId = ANIM_ATK_PARTNER;
- else if (animBankId == ANIM_TARGET)
- animBankId = ANIM_DEF_PARTNER;
+ if (animBattlerId == ANIM_ATTACKER)
+ animBattlerId = ANIM_ATK_PARTNER;
+ else if (animBattlerId == ANIM_TARGET)
+ animBattlerId = ANIM_DEF_PARTNER;
- if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER)
+ if (animBattlerId == ANIM_ATTACKER || animBattlerId == ANIM_ATK_PARTNER)
battlerId = gBattleAnimAttacker;
else
battlerId = gBattleAnimTarget;
if (IsBattlerSpriteVisible(battlerId))
gSprites[gBattlerSpriteIds[battlerId]].invisible = 0;
- if (animBankId > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK))
+ if (animBattlerId > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK))
gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = 0;
else
- animBankId = 0;
+ animBattlerId = 0;
taskId = CreateTask(sub_80A4BB0, 5);
- gTasks[taskId].data[0] = animBankId;
+ gTasks[taskId].data[0] = animBattlerId;
gTasks[taskId].data[2] = battlerId;
sBattleAnimScriptPtr++;
@@ -1419,18 +1420,18 @@ void Task_PanFromInitialToTarget(u8 taskId)
pan = currentPan + incrementPan;
gTasks[taskId].tCurrentPan = pan;
- if (incrementPan == 0) // If we're not incrementing, just cancel the task immediately
+ if (incrementPan == 0) // If we're not incrementing, just cancel the task immediately.
{
destroyTask = TRUE;
}
- else if (initialPanning < targetPanning) // Panning increasing
+ else if (initialPanning < targetPanning) // Panning increasing.
{
- if (pan >= targetPanning) // Target reached
+ if (pan >= targetPanning) // Target reached.
destroyTask = TRUE;
}
- else // Panning decreasing
+ else // Panning decreasing.
{
- if (pan <= targetPanning) // Target reached
+ if (pan <= targetPanning) // Target reached.
destroyTask = TRUE;
}
@@ -1684,14 +1685,14 @@ static void ScriptCmd_jumpifcontest(void)
static void ScriptCmd_monbgprio_28(void)
{
- u8 wantedBank;
+ u8 wantedBattler;
u8 battlerId;
u8 battlerPosition;
- wantedBank = sBattleAnimScriptPtr[1];
+ wantedBattler = sBattleAnimScriptPtr[1];
sBattleAnimScriptPtr += 2;
- if (wantedBank != ANIM_ATTACKER)
+ if (wantedBattler != ANIM_ATTACKER)
battlerId = gBattleAnimTarget;
else
battlerId = gBattleAnimAttacker;
@@ -1716,15 +1717,15 @@ static void ScriptCmd_monbgprio_29(void)
static void ScriptCmd_monbgprio_2A(void)
{
- u8 wantedBank;
+ u8 wantedBattler;
u8 battlerPosition;
u8 battlerId;
- wantedBank = sBattleAnimScriptPtr[1];
+ wantedBattler = sBattleAnimScriptPtr[1];
sBattleAnimScriptPtr += 2;
if (GetBattlerSide(gBattleAnimAttacker) != GetBattlerSide(gBattleAnimTarget))
{
- if (wantedBank != ANIM_ATTACKER)
+ if (wantedBattler != ANIM_ATTACKER)
battlerId = gBattleAnimTarget;
else
battlerId = gBattleAnimAttacker;
@@ -1762,16 +1763,16 @@ static void ScriptCmd_visible(void)
static void ScriptCmd_doublebattle_2D(void)
{
- u8 wantedBank;
+ u8 wantedBattler;
u8 r4;
u8 spriteId;
- wantedBank = sBattleAnimScriptPtr[1];
+ wantedBattler = sBattleAnimScriptPtr[1];
sBattleAnimScriptPtr += 2;
if (!IsContest() && IsDoubleBattle()
&& GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
{
- if (wantedBank == ANIM_ATTACKER)
+ if (wantedBattler == ANIM_ATTACKER)
{
r4 = sub_80A8364(gBattleAnimAttacker);
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
@@ -1797,16 +1798,16 @@ static void ScriptCmd_doublebattle_2D(void)
static void ScriptCmd_doublebattle_2E(void)
{
- u8 wantedBank;
+ u8 wantedBattler;
u8 r4;
u8 spriteId;
- wantedBank = sBattleAnimScriptPtr[1];
+ wantedBattler = sBattleAnimScriptPtr[1];
sBattleAnimScriptPtr += 2;
if (!IsContest() && IsDoubleBattle()
&& GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
{
- if (wantedBank == ANIM_ATTACKER)
+ if (wantedBattler == ANIM_ATTACKER)
{
r4 = sub_80A8364(gBattleAnimAttacker);
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c
index 2316b9759..5a829171e 100644
--- a/src/battle_anim_sound_tasks.c
+++ b/src/battle_anim_sound_tasks.c
@@ -133,13 +133,13 @@ void sub_8158D8C(u8 taskId)
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
species = gContestResources->field_18->field_0;
else
- DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task
+ DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task.
}
else
{
u8 battlerId;
- // get wanted battler
+ // Get wanted battler.
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
battlerId = gBattleAnimAttacker;
else if (gBattleAnimArgs[0] == ANIM_TARGET)
@@ -149,7 +149,7 @@ void sub_8158D8C(u8 taskId)
else
battlerId = BATTLE_PARTNER(gBattleAnimTarget);
- // check if battler is visible
+ // Check if battler is visible.
if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) && !IsBattlerSpriteVisible(battlerId))
{
DestroyAnimVisualTask(taskId);
@@ -179,13 +179,13 @@ void sub_8158E9C(u8 taskId)
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
species = gContestResources->field_18->field_0;
else
- DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task
+ DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task.
}
else
{
u8 battlerId;
- // get wanted battler
+ // Get wanted battler.
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
battlerId = gBattleAnimAttacker;
else if (gBattleAnimArgs[0] == ANIM_TARGET)
@@ -195,7 +195,7 @@ void sub_8158E9C(u8 taskId)
else
battlerId = BATTLE_PARTNER(gBattleAnimTarget);
- // check if battler is visible
+ // Check if battler is visible.
if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) && !IsBattlerSpriteVisible(battlerId))
{
DestroyAnimVisualTask(taskId);
diff --git a/src/battle_bg.c b/src/battle_bg.c
index d4a2c61b2..999b64a54 100644
--- a/src/battle_bg.c
+++ b/src/battle_bg.c
@@ -18,6 +18,7 @@
#include "text_window.h"
#include "menu.h"
#include "battle_setup.h"
+#include "constants/map_types.h"
struct BattleBackground
{
@@ -31,8 +32,8 @@ struct BattleBackground
extern const struct SpriteTemplate gUnknown_0831A9D0;
extern const struct SpriteTemplate gUnknown_0831A9E8;
extern const struct CompressedSpriteSheet gUnknown_0831AA00;
-extern const struct BgTemplate gUnknown_0831AA08[4];
-extern const struct WindowTemplate *gUnknown_0831ABA0[];
+extern const struct BgTemplate gBattleBgTemplates[4];
+extern const struct WindowTemplate *const gBattleWindowTemplates[];
extern const struct BattleBackground gBattleTerrainTable[];
extern u16 gBattle_BG1_X;
@@ -42,23 +43,23 @@ extern u16 gBattle_BG2_Y;
extern u8 GetCurrentMapBattleScene(void);
-void sub_8035658(void)
+void BattleInitBgsAndWindows(void)
{
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_0831AA08, ARRAY_COUNT(gUnknown_0831AA08));
+ InitBgsFromTemplates(0, gBattleBgTemplates, ARRAY_COUNT(gBattleBgTemplates));
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
{
- gBattleScripting.field_24 = 1;
+ gBattleScripting.windowsType = 1;
SetBgTilemapBuffer(1, gUnknown_02023060);
SetBgTilemapBuffer(2, gUnknown_02023060);
}
else
{
- gBattleScripting.field_24 = 0;
+ gBattleScripting.windowsType = 0;
}
- InitWindows(gUnknown_0831ABA0[gBattleScripting.field_24]);
+ InitWindows(gBattleWindowTemplates[gBattleScripting.windowsType]);
DeactivateAllTextPrinters();
}
@@ -66,14 +67,14 @@ void sub_80356D0(void)
{
DisableInterrupts(INTR_FLAG_HBLANK);
EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
- sub_8035658();
+ BattleInitBgsAndWindows();
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 0);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON | DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
}
-void ApplyPlayerChosenFrameToBattleMenu(void)
+void LoadBattleMenuWindowGfx(void)
{
LoadUserWindowBorderGfx(2, 0x12, 0x10);
LoadUserWindowBorderGfx(2, 0x22, 0x10);
@@ -82,7 +83,7 @@ void ApplyPlayerChosenFrameToBattleMenu(void)
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
{
sub_81978B0(0x70);
- copy_textbox_border_tile_patterns_to_vram(0, 0x30, 0x70);
+ LoadMessageBoxGfx(0, 0x30, 0x70);
gPlttBufferUnfaded[0x76] = 0;
CpuCopy16(&gPlttBufferUnfaded[0x76], &gPlttBufferFaded[0x76], 2);
}
@@ -193,12 +194,12 @@ void LoadBattleTextboxAndBackground(void)
CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0);
CopyBgTilemapBufferToVram(0);
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40);
- ApplyPlayerChosenFrameToBattleMenu();
+ LoadBattleMenuWindowGfx();
DrawMainBattleBackground();
}
-static void sub_8035AE4(u8 taskId, u8 bank, u8 bgId, u8 destX, u8 destY)
+static void sub_8035AE4(u8 taskId, u8 battlerId, u8 bgId, u8 destX, u8 destY)
{
s32 i;
u16 var = 0;
@@ -208,7 +209,7 @@ static void sub_8035AE4(u8 taskId, u8 bank, u8 bgId, u8 destX, u8 destY)
{
if (gTasks[taskId].data[5] != 0)
{
- switch (bank)
+ switch (battlerId)
{
case 0:
var = 0x3F & gTasks[taskId].data[3];
@@ -226,7 +227,7 @@ static void sub_8035AE4(u8 taskId, u8 bank, u8 bgId, u8 destX, u8 destY)
}
else
{
- switch (bank)
+ switch (battlerId)
{
case 0:
var = 0x3F & gTasks[taskId].data[3];
@@ -253,7 +254,7 @@ static void sub_8035AE4(u8 taskId, u8 bank, u8 bgId, u8 destX, u8 destY)
}
else
{
- if (bank == gBattleScripting.multiplayerId)
+ if (battlerId == gBattleScripting.multiplayerId)
var = gTasks[taskId].data[3];
else
var = gTasks[taskId].data[4];
@@ -272,79 +273,79 @@ static void sub_8035C4C(void)
{
if (gBattleOutcome == B_OUTCOME_DREW)
{
- BattleHandleAddTextPrinter(gText_Draw, 0x15);
+ BattlePutTextOnWindow(gText_Draw, 0x15);
}
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (gBattleOutcome == B_OUTCOME_WON)
{
- switch (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18)
+ switch (gLinkPlayers[gBattleScripting.multiplayerId].id)
{
case 0:
- BattleHandleAddTextPrinter(gText_Win, 0x16);
- BattleHandleAddTextPrinter(gText_Loss, 0x17);
+ BattlePutTextOnWindow(gText_Win, 0x16);
+ BattlePutTextOnWindow(gText_Loss, 0x17);
break;
case 1:
- BattleHandleAddTextPrinter(gText_Win, 0x17);
- BattleHandleAddTextPrinter(gText_Loss, 0x16);
+ BattlePutTextOnWindow(gText_Win, 0x17);
+ BattlePutTextOnWindow(gText_Loss, 0x16);
break;
case 2:
- BattleHandleAddTextPrinter(gText_Win, 0x16);
- BattleHandleAddTextPrinter(gText_Loss, 0x17);
+ BattlePutTextOnWindow(gText_Win, 0x16);
+ BattlePutTextOnWindow(gText_Loss, 0x17);
break;
case 3:
- BattleHandleAddTextPrinter(gText_Win, 0x17);
- BattleHandleAddTextPrinter(gText_Loss, 0x16);
+ BattlePutTextOnWindow(gText_Win, 0x17);
+ BattlePutTextOnWindow(gText_Loss, 0x16);
break;
}
}
else
{
- switch (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18)
+ switch (gLinkPlayers[gBattleScripting.multiplayerId].id)
{
case 0:
- BattleHandleAddTextPrinter(gText_Win, 0x17);
- BattleHandleAddTextPrinter(gText_Loss, 0x16);
+ BattlePutTextOnWindow(gText_Win, 0x17);
+ BattlePutTextOnWindow(gText_Loss, 0x16);
break;
case 1:
- BattleHandleAddTextPrinter(gText_Win, 0x16);
- BattleHandleAddTextPrinter(gText_Loss, 0x17);
+ BattlePutTextOnWindow(gText_Win, 0x16);
+ BattlePutTextOnWindow(gText_Loss, 0x17);
break;
case 2:
- BattleHandleAddTextPrinter(gText_Win, 0x17);
- BattleHandleAddTextPrinter(gText_Loss, 0x16);
+ BattlePutTextOnWindow(gText_Win, 0x17);
+ BattlePutTextOnWindow(gText_Loss, 0x16);
break;
case 3:
- BattleHandleAddTextPrinter(gText_Win, 0x16);
- BattleHandleAddTextPrinter(gText_Loss, 0x17);
+ BattlePutTextOnWindow(gText_Win, 0x16);
+ BattlePutTextOnWindow(gText_Loss, 0x17);
break;
}
}
}
else if (gBattleOutcome == B_OUTCOME_WON)
{
- if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 != 0)
+ if (gLinkPlayers[gBattleScripting.multiplayerId].id != 0)
{
- BattleHandleAddTextPrinter(gText_Win, 0x17);
- BattleHandleAddTextPrinter(gText_Loss, 0x16);
+ BattlePutTextOnWindow(gText_Win, 0x17);
+ BattlePutTextOnWindow(gText_Loss, 0x16);
}
else
{
- BattleHandleAddTextPrinter(gText_Win, 0x16);
- BattleHandleAddTextPrinter(gText_Loss, 0x17);
+ BattlePutTextOnWindow(gText_Win, 0x16);
+ BattlePutTextOnWindow(gText_Loss, 0x17);
}
}
else
{
- if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 != 0)
+ if (gLinkPlayers[gBattleScripting.multiplayerId].id != 0)
{
- BattleHandleAddTextPrinter(gText_Win, 0x16);
- BattleHandleAddTextPrinter(gText_Loss, 0x17);
+ BattlePutTextOnWindow(gText_Win, 0x16);
+ BattlePutTextOnWindow(gText_Loss, 0x17);
}
else
{
- BattleHandleAddTextPrinter(gText_Win, 0x17);
- BattleHandleAddTextPrinter(gText_Loss, 0x16);
+ BattlePutTextOnWindow(gText_Win, 0x17);
+ BattlePutTextOnWindow(gText_Loss, 0x16);
}
}
}
@@ -365,23 +366,23 @@ void sub_8035D74(u8 taskId)
name = gLinkPlayers[i].name;
linkPlayer = &gLinkPlayers[i];
- switch (linkPlayer->lp_field_18)
+ switch (linkPlayer->id)
{
case 0:
- BattleHandleAddTextPrinter(name, 0x11);
- sub_8035AE4(taskId, linkPlayer->lp_field_18, 1, 2, 4);
+ BattlePutTextOnWindow(name, 0x11);
+ sub_8035AE4(taskId, linkPlayer->id, 1, 2, 4);
break;
case 1:
- BattleHandleAddTextPrinter(name, 0x12);
- sub_8035AE4(taskId, linkPlayer->lp_field_18, 2, 2, 4);
+ BattlePutTextOnWindow(name, 0x12);
+ sub_8035AE4(taskId, linkPlayer->id, 2, 2, 4);
break;
case 2:
- BattleHandleAddTextPrinter(name, 0x13);
- sub_8035AE4(taskId, linkPlayer->lp_field_18, 1, 2, 8);
+ BattlePutTextOnWindow(name, 0x13);
+ sub_8035AE4(taskId, linkPlayer->id, 1, 2, 8);
break;
case 3:
- BattleHandleAddTextPrinter(name, 0x14);
- sub_8035AE4(taskId, linkPlayer->lp_field_18, 2, 2, 8);
+ BattlePutTextOnWindow(name, 0x14);
+ sub_8035AE4(taskId, linkPlayer->id, 2, 2, 8);
break;
}
}
@@ -392,14 +393,14 @@ void sub_8035D74(u8 taskId)
u8 opponentId = playerId ^ BIT_SIDE;
u8 opponentId_copy = opponentId;
- if (gLinkPlayers[playerId].lp_field_18 != 0)
+ if (gLinkPlayers[playerId].id != 0)
opponentId = playerId, playerId = opponentId_copy;
name = gLinkPlayers[playerId].name;
- BattleHandleAddTextPrinter(name, 0xF);
+ BattlePutTextOnWindow(name, 0xF);
name = gLinkPlayers[opponentId].name;
- BattleHandleAddTextPrinter(name, 0x10);
+ BattlePutTextOnWindow(name, 0x10);
sub_8035AE4(taskId, playerId, 1, 2, 7);
sub_8035AE4(taskId, opponentId, 2, 2, 7);
@@ -457,7 +458,7 @@ void sub_8035D74(u8 taskId)
}
}
-void LoadBattleEntryBackground(void)
+void DrawBattleEntryBackground(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
@@ -478,7 +479,7 @@ void LoadBattleEntryBackground(void)
}
else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_EREADER_TRAINER))
{
- if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId == STEVEN_PARTNER_ID)
+ if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
{
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void*)(VRAM + 0x4000));
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void*)(VRAM + 0xE000));
@@ -740,7 +741,7 @@ bool8 LoadChosenBattleElement(u8 caseId)
}
break;
case 6:
- ApplyPlayerChosenFrameToBattleMenu();
+ LoadBattleMenuWindowGfx();
break;
default:
ret = TRUE;
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index e81fcabe6..d786dacd1 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -34,7 +34,6 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
-extern void sub_806A068(u16, u8);
extern void sub_81851A8(u8 *);
extern u16 sub_8068B48(void);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -89,8 +88,8 @@ static void LinkOpponentHandleFaintingCry(void);
static void LinkOpponentHandleIntroSlide(void);
static void LinkOpponentHandleIntroTrainerBallThrow(void);
static void LinkOpponentHandleDrawPartyStatusSummary(void);
-static void LinkOpponentHandleCmd49(void);
-static void LinkOpponentHandleCmd50(void);
+static void LinkOpponentHandleHidePartyStatusSummary(void);
+static void LinkOpponentHandleEndBounceEffect(void);
static void LinkOpponentHandleSpriteInvisibility(void);
static void LinkOpponentHandleBattleAnimation(void);
static void LinkOpponentHandleLinkStandbyMsg(void);
@@ -161,8 +160,8 @@ static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
LinkOpponentHandleIntroSlide,
LinkOpponentHandleIntroTrainerBallThrow,
LinkOpponentHandleDrawPartyStatusSummary,
- LinkOpponentHandleCmd49,
- LinkOpponentHandleCmd50,
+ LinkOpponentHandleHidePartyStatusSummary,
+ LinkOpponentHandleEndBounceEffect,
LinkOpponentHandleSpriteInvisibility,
LinkOpponentHandleBattleAnimation,
LinkOpponentHandleLinkStandbyMsg,
@@ -191,7 +190,7 @@ static void LinkOpponentBufferRunCommand(void)
}
}
-static void CompleteOnBankSpriteCallbackDummy(void)
+static void CompleteOnBattlerSpriteCallbackDummy(void)
{
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
LinkOpponentBufferExecCompleted();
@@ -395,7 +394,7 @@ static void sub_8064B04(void)
static void CompleteOnHealthbarDone(void)
{
- s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
+ s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -1135,9 +1134,9 @@ static void LinkOpponentHandleLoadMonSprite(void)
u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
- sub_806A068(species, GetBattlerPosition(gActiveBattler));
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C,
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
sub_80A82E4(gActiveBattler));
@@ -1168,10 +1167,10 @@ static void sub_8066494(u8 battlerId, bool8 dontClearSubstituteBit)
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
- sub_806A068(species, GetBattlerPosition(battlerId));
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(
- &gUnknown_0202499C,
+ &gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId));
@@ -1302,8 +1301,8 @@ static void LinkOpponentHandleDrawTrainerPic(void)
}
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
- sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C,
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40,
sub_80A82E4(gActiveBattler));
@@ -1314,7 +1313,7 @@ static void LinkOpponentHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
}
static void LinkOpponentHandleTrainerSlide(void)
@@ -1327,8 +1326,8 @@ static void LinkOpponentHandleTrainerSlide(void)
trainerPicId = GetFrontierTrainerFrontSpriteId(gTrainerBattleOpponent_B);
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
- sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, 176, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, 0x1E);
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, 176, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, 0x1E);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 96;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.x += 32;
@@ -1366,7 +1365,7 @@ static void LinkOpponentHandleFaintAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
PlaySE12WithPanning(SE_POKE_DEAD, PAN_SIDE_OPPONENT);
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8039934;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon;
gBattlerControllerFuncs[gActiveBattler] = sub_8064C14;
}
}
@@ -1475,7 +1474,7 @@ static void LinkOpponentHandlePrintString(void)
gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
BattleTv_SetDataBasedOnString(*stringId);
}
@@ -1716,8 +1715,8 @@ static void LinkOpponentHandleIntroTrainerBallThrow(void)
taskId = CreateTask(sub_8067618, 5);
gTasks[taskId].data[0] = gActiveBattler;
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_28;
@@ -1762,7 +1761,7 @@ static void LinkOpponentHandleDrawPartyStatusSummary(void)
}
else
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
if (gBattleBufferA[gActiveBattler][2] != 0)
{
@@ -1796,14 +1795,14 @@ static void sub_806782C(void)
}
}
-static void LinkOpponentHandleCmd49(void)
+static void LinkOpponentHandleHidePartyStatusSummary(void)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
LinkOpponentBufferExecCompleted();
}
-static void LinkOpponentHandleCmd50(void)
+static void LinkOpponentHandleEndBounceEffect(void)
{
LinkOpponentBufferExecCompleted();
}
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index aaaaebd8d..9867c14e4 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -12,6 +12,7 @@
#include "util.h"
#include "main.h"
#include "constants/songs.h"
+#include "constants/trainers.h"
#include "sound.h"
#include "window.h"
#include "m4a.h"
@@ -33,7 +34,6 @@ extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
-extern void sub_806A068(u16, u8);
extern void sub_81851A8(u8 *);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -87,8 +87,8 @@ static void LinkPartnerHandleFaintingCry(void);
static void LinkPartnerHandleIntroSlide(void);
static void LinkPartnerHandleIntroTrainerBallThrow(void);
static void LinkPartnerHandleDrawPartyStatusSummary(void);
-static void LinkPartnerHandleCmd49(void);
-static void LinkPartnerHandleCmd50(void);
+static void LinkPartnerHandleHidePartyStatusSummary(void);
+static void LinkPartnerHandleEndBounceEffect(void);
static void LinkPartnerHandleSpriteInvisibility(void);
static void LinkPartnerHandleBattleAnimation(void);
static void LinkPartnerHandleLinkStandbyMsg(void);
@@ -158,8 +158,8 @@ static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
LinkPartnerHandleIntroSlide,
LinkPartnerHandleIntroTrainerBallThrow,
LinkPartnerHandleDrawPartyStatusSummary,
- LinkPartnerHandleCmd49,
- LinkPartnerHandleCmd50,
+ LinkPartnerHandleHidePartyStatusSummary,
+ LinkPartnerHandleEndBounceEffect,
LinkPartnerHandleSpriteInvisibility,
LinkPartnerHandleBattleAnimation,
LinkPartnerHandleLinkStandbyMsg,
@@ -188,7 +188,7 @@ static void LinkPartnerBufferRunCommand(void)
}
}
-static void CompleteOnBankSpriteCallbackDummy(void)
+static void CompleteOnBattlerSpriteCallbackDummy(void)
{
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
LinkPartnerBufferExecCompleted();
@@ -279,7 +279,7 @@ static void sub_814B290(void)
static void CompleteOnHealthbarDone(void)
{
- s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
+ s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -1023,9 +1023,9 @@ static void LinkPartnerHandleLoadMonSprite(void)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
- sub_806A068(species, GetBattlerPosition(gActiveBattler));
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C,
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
sub_80A82E4(gActiveBattler));
@@ -1053,10 +1053,10 @@ static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(battlerId));
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(
- &gUnknown_0202499C,
+ &gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId));
@@ -1133,12 +1133,12 @@ static void LinkPartnerHandleDrawTrainerPic(void)
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_FIRE_RED
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_LEAF_GREEN)
{
- trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + BACK_PIC_RED;
+ trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RED;
}
else if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE)
{
- trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + BACK_PIC_RS_BRENDAN;
+ trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
}
else
{
@@ -1146,15 +1146,15 @@ static void LinkPartnerHandleDrawTrainerPic(void)
}
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
- sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, sub_80A82E4(gActiveBattler));
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
}
static void LinkPartnerHandleTrainerSlide(void)
@@ -1299,7 +1299,7 @@ static void LinkPartnerHandlePrintString(void)
gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
BattleTv_SetDataBasedOnString(*stringId);
}
@@ -1545,12 +1545,12 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_FIRE_RED
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_LEAF_GREEN)
{
- trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + BACK_PIC_RED;
+ trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RED;
}
else if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_SAPPHIRE)
{
- trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + BACK_PIC_RS_BRENDAN;
+ trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
}
else
{
@@ -1564,8 +1564,8 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void)
taskId = CreateTask(sub_814DCCC, 5);
gTasks[taskId].data[0] = gActiveBattler;
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_112;
@@ -1611,7 +1611,7 @@ static void LinkPartnerHandleDrawPartyStatusSummary(void)
}
else
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
@@ -1631,14 +1631,14 @@ static void sub_814DE9C(void)
}
}
-static void LinkPartnerHandleCmd49(void)
+static void LinkPartnerHandleHidePartyStatusSummary(void)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
LinkPartnerBufferExecCompleted();
}
-static void LinkPartnerHandleCmd50(void)
+static void LinkPartnerHandleEndBounceEffect(void)
{
LinkPartnerBufferExecCompleted();
}
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index 64cf16b86..1eaa9da18 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -16,6 +16,7 @@
#include "constants/songs.h"
#include "sound.h"
#include "constants/moves.h"
+#include "constants/trainers.h"
#include "window.h"
#include "m4a.h"
#include "palette.h"
@@ -37,9 +38,8 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
-extern void sub_806A068(u16, u8);
extern void sub_81A57E4(u8 battlerId, u16 stringId);
-extern u8 sub_81A4CB0(void);
+extern u8 GetFrontierBrainTrainerPicIndex(void);
extern u8 sub_81D5588(u16 trainerId);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
extern u8 GetEreaderTrainerFrontSpriteId(void);
@@ -94,8 +94,8 @@ static void OpponentHandleFaintingCry(void);
static void OpponentHandleIntroSlide(void);
static void OpponentHandleIntroTrainerBallThrow(void);
static void OpponentHandleDrawPartyStatusSummary(void);
-static void OpponentHandleCmd49(void);
-static void OpponentHandleCmd50(void);
+static void OpponentHandleHidePartyStatusSummary(void);
+static void OpponentHandleEndBounceEffect(void);
static void OpponentHandleSpriteInvisibility(void);
static void OpponentHandleBattleAnimation(void);
static void OpponentHandleLinkStandbyMsg(void);
@@ -166,8 +166,8 @@ static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
OpponentHandleIntroSlide,
OpponentHandleIntroTrainerBallThrow,
OpponentHandleDrawPartyStatusSummary,
- OpponentHandleCmd49,
- OpponentHandleCmd50,
+ OpponentHandleHidePartyStatusSummary,
+ OpponentHandleEndBounceEffect,
OpponentHandleSpriteInvisibility,
OpponentHandleBattleAnimation,
OpponentHandleLinkStandbyMsg,
@@ -199,7 +199,7 @@ static void OpponentBufferRunCommand(void)
}
}
-static void CompleteOnBankSpriteCallbackDummy(void)
+static void CompleteOnBattlerSpriteCallbackDummy(void)
{
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
OpponentBufferExecCompleted();
@@ -391,7 +391,7 @@ static void sub_805F994(void)
static void CompleteOnHealthbarDone(void)
{
- s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
+ s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
if (hpValue != -1)
{
@@ -1127,9 +1127,9 @@ static void OpponentHandleLoadMonSprite(void)
u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
- sub_806A068(species, GetBattlerPosition(gActiveBattler));
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C,
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
sub_80A82E4(gActiveBattler));
@@ -1162,9 +1162,9 @@ static void sub_80613DC(u8 battlerId, bool8 dontClearSubstituteBit)
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
- sub_806A068(species, GetBattlerPosition(battlerId));
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C,
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId));
@@ -1232,9 +1232,9 @@ static void OpponentHandleDrawTrainerPic(void)
{
trainerPicId = GetSecretBaseTrainerPicIndex();
}
- else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_3FE)
+ else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
{
- trainerPicId = sub_81A4CB0();
+ trainerPicId = GetFrontierBrainTrainerPicIndex();
}
else if (gBattleTypeFlags & BATTLE_TYPE_x4000000)
{
@@ -1293,8 +1293,8 @@ static void OpponentHandleDrawTrainerPic(void)
}
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
- sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C,
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40,
sub_80A82E4(gActiveBattler));
@@ -1305,7 +1305,7 @@ static void OpponentHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
}
static void OpponentHandleTrainerSlide(void)
@@ -1316,9 +1316,9 @@ static void OpponentHandleTrainerSlide(void)
{
trainerPicId = GetSecretBaseTrainerPicIndex();
}
- else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_3FE)
+ else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
{
- trainerPicId = sub_81A4CB0();
+ trainerPicId = GetFrontierBrainTrainerPicIndex();
}
else if (gBattleTypeFlags & BATTLE_TYPE_x4000000)
{
@@ -1365,8 +1365,8 @@ static void OpponentHandleTrainerSlide(void)
}
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
- sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, 176, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, 0x1E);
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, 176, (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40, 0x1E);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 96;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.x += 32;
@@ -1403,7 +1403,7 @@ static void OpponentHandleFaintAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
PlaySE12WithPanning(SE_POKE_DEAD, PAN_SIDE_OPPONENT);
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8039934;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon;
gBattlerControllerFuncs[gActiveBattler] = sub_805FAC4;
}
}
@@ -1511,7 +1511,7 @@ static void OpponentHandlePrintString(void)
gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
sub_81A57E4(gActiveBattler, *stringId);
}
@@ -1865,8 +1865,8 @@ static void OpponentHandleIntroTrainerBallThrow(void)
taskId = CreateTask(sub_8062828, 5);
gTasks[taskId].data[0] = gActiveBattler;
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_26;
@@ -1916,7 +1916,7 @@ static void OpponentHandleDrawPartyStatusSummary(void)
}
else
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
if (gBattleBufferA[gActiveBattler][2] != 0)
{
@@ -1950,14 +1950,14 @@ static void sub_8062A2C(void)
}
}
-static void OpponentHandleCmd49(void)
+static void OpponentHandleHidePartyStatusSummary(void)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
OpponentBufferExecCompleted();
}
-static void OpponentHandleCmd50(void)
+static void OpponentHandleEndBounceEffect(void)
{
OpponentBufferExecCompleted();
}
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 7f14d5926..6ab19e368 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -15,6 +15,7 @@
#include "constants/songs.h"
#include "sound.h"
#include "constants/moves.h"
+#include "constants/trainers.h"
#include "window.h"
#include "m4a.h"
#include "palette.h"
@@ -29,6 +30,7 @@
#include "battle_setup.h"
#include "item_use.h"
#include "recorded_battle.h"
+#include "party_menu.h"
extern u8 gUnknown_0203CEE8;
extern u8 gUnknown_0203CEE9;
@@ -38,15 +40,13 @@ extern u16 gBattle_BG0_Y;
extern s32 gUnknown_0203CD70;
extern struct UnusedControllerStruct gUnknown_02022D0C;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
-extern struct SpriteTemplate gUnknown_0202499C;
+extern struct SpriteTemplate gMultiuseSpriteTemplate;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
-extern void sub_81B89AC(u8 arg0);
extern void sub_81AABB0(void);
-extern void sub_806A068(u16, u8);
extern void sub_81A57E4(u8 battlerId, u16 stringId);
extern void sub_81851A8(u8 *);
@@ -100,8 +100,8 @@ static void PlayerHandleFaintingCry(void);
static void PlayerHandleIntroSlide(void);
static void PlayerHandleIntroTrainerBallThrow(void);
static void PlayerHandleDrawPartyStatusSummary(void);
-static void PlayerHandleCmd49(void);
-static void PlayerHandleCmd50(void);
+static void PlayerHandleHidePartyStatusSummary(void);
+static void PlayerHandleEndBounceEffect(void);
static void PlayerHandleSpriteInvisibility(void);
static void PlayerHandleBattleAnimation(void);
static void PlayerHandleLinkStandbyMsg(void);
@@ -120,13 +120,13 @@ static void MoveSelectionDisplayMoveType(void);
static void MoveSelectionDisplayMoveNames(void);
static void HandleMoveSwitchting(void);
static void sub_8058FC0(void);
-static void sub_8059828(void);
+static void WaitForMonSelection(void);
static void CompleteWhenChoseItem(void);
-static void sub_8059544(u8 taskId);
+static void Task_LaunchLvlUpAnim(u8 taskId);
static void Task_PrepareToGiveExpWithExpBar(u8 taskId);
static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId);
static void sub_8059400(u8 taskId);
-static void sub_80595A4(u8 taskId);
+static void Task_UpdateLvlInHealthbox(u8 taskId);
static void PrintLinkStandbyMsg(void);
static u32 CopyPlayerMonData(u8 monId, u8 *dst);
static void SetPlayerMonData(u8 monId);
@@ -187,8 +187,8 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
PlayerHandleIntroSlide,
PlayerHandleIntroTrainerBallThrow,
PlayerHandleDrawPartyStatusSummary,
- PlayerHandleCmd49,
- PlayerHandleCmd50,
+ PlayerHandleHidePartyStatusSummary,
+ PlayerHandleEndBounceEffect,
PlayerHandleSpriteInvisibility,
PlayerHandleBattleAnimation,
PlayerHandleLinkStandbyMsg,
@@ -250,10 +250,10 @@ static void HandleInputChooseAction(void)
{
u16 itemId = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
- dp11b_obj_instanciate(gActiveBattler, 1, 7, 1);
- dp11b_obj_instanciate(gActiveBattler, 0, 7, 1);
+ DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
+ DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
- if (gMain.newAndRepeatedKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == 2)
+ if (gMain.newAndRepeatedKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
gPlayerDpadHoldFrames++;
else
gPlayerDpadHoldFrames = 0;
@@ -347,8 +347,8 @@ static void HandleInputChooseAction(void)
static void sub_80577F0(void) // unused
{
- dp11b_obj_free(gActiveBattler, 1);
- dp11b_obj_free(gActiveBattler, 0);
+ EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
+ EndBounceEffect(gActiveBattler, BOUNCE_MON);
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
}
@@ -358,7 +358,7 @@ static void HandleInputChooseTarget(void)
u8 identities[4];
memcpy(identities, sTargetIdentities, ARRAY_COUNT(sTargetIdentities));
- dp11b_obj_instanciate(gMultiUsePlayerCursor, 1, 0xF, 1);
+ DoBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX, 15, 1);
// what a weird loop
i = 0;
@@ -367,7 +367,7 @@ static void HandleInputChooseTarget(void)
do
{
if (i != gMultiUsePlayerCursor)
- dp11b_obj_free(i, 1);
+ EndBounceEffect(i, BOUNCE_HEALTHBOX);
i++;
} while (i < gBattlersCount);
}
@@ -382,7 +382,7 @@ static void HandleInputChooseTarget(void)
PlaySE(SE_SELECT);
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8));
- dp11b_obj_free(gMultiUsePlayerCursor, 1);
+ EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
PlayerBufferExecCompleted();
}
else if (gMain.newKeys & B_BUTTON || gPlayerDpadHoldFrames > 59)
@@ -390,9 +390,9 @@ static void HandleInputChooseTarget(void)
PlaySE(SE_SELECT);
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8039B2C;
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove;
- dp11b_obj_instanciate(gActiveBattler, 1, 7, 1);
- dp11b_obj_instanciate(gActiveBattler, 0, 7, 1);
- dp11b_obj_free(gMultiUsePlayerCursor, 1);
+ DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1);
+ DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1);
+ EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
}
else if (gMain.newKeys & (DPAD_LEFT | DPAD_UP))
{
@@ -485,7 +485,7 @@ static void HandleInputChooseMove(void)
bool32 canSelectTarget = FALSE;
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleBufferA[gActiveBattler][4]);
- if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == 2)
+ if (gMain.heldKeys & DPAD_ANY && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
gPlayerDpadHoldFrames++;
else
gPlayerDpadHoldFrames = 0;
@@ -620,7 +620,7 @@ static void HandleInputChooseMove(void)
gMultiUsePlayerCursor = gMoveSelectionCursor[gActiveBattler] + 1;
MoveSelectionCreateCursorAt(gMultiUsePlayerCursor, 27);
- BattleHandleAddTextPrinter(gText_BattleSwitchWhich, 0xB);
+ BattlePutTextOnWindow(gText_BattleSwitchWhich, 0xB);
gBattlerControllerFuncs[gActiveBattler] = HandleMoveSwitchting;
}
}
@@ -916,7 +916,7 @@ void sub_80587B0(void)
}
}
-static void CompleteOnBankSpriteCallbackDummy(void)
+static void CompleteOnBattlerSpriteCallbackDummy(void)
{
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
PlayerBufferExecCompleted();
@@ -1120,7 +1120,7 @@ void c3_0802FDF4(u8 taskId)
static void CompleteOnHealthbarDone(void)
{
- s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
+ s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -1143,16 +1143,16 @@ static void CompleteOnInactiveTextPrinter(void)
#define tExpTask_monId data[0]
#define tExpTask_gainedExp data[1]
-#define tExpTask_bank data[2]
+#define tExpTask_battler data[2]
#define tExpTask_frames data[10]
static void Task_GiveExpToMon(u8 taskId)
{
u32 monId = (u8)(gTasks[taskId].tExpTask_monId);
- u8 battlerId = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // give exp without the expbar
+ if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // Give exp without moving the expbar.
{
struct Pokemon *mon = &gPlayerParty[monId];
u16 species = GetMonData(mon, MON_DATA_SPECIES);
@@ -1162,19 +1162,19 @@ static void Task_GiveExpToMon(u8 taskId)
if (currExp + gainedExp >= nextLvlExp)
{
- u8 savedActiveBank;
+ u8 savedActiveBattler;
SetMonData(mon, MON_DATA_EXP, &nextLvlExp);
CalculateMonStats(mon);
gainedExp -= nextLvlExp - currExp;
- savedActiveBank = gActiveBattler;
+ savedActiveBattler = gActiveBattler;
gActiveBattler = battlerId;
- BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
- gActiveBattler = savedActiveBank;
+ BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
+ gActiveBattler = savedActiveBattler;
if (IsDoubleBattle() == TRUE
&& ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]))
- gTasks[taskId].func = sub_8059544;
+ gTasks[taskId].func = Task_LaunchLvlUpAnim;
else
gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
}
@@ -1196,7 +1196,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
{
u8 monIndex = gTasks[taskId].tExpTask_monId;
s32 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- u8 battlerId = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
struct Pokemon *mon = &gPlayerParty[monIndex];
u8 level = GetMonData(mon, MON_DATA_LEVEL);
u16 species = GetMonData(mon, MON_DATA_SPECIES);
@@ -1221,12 +1221,12 @@ static void sub_8059400(u8 taskId)
{
u8 monId = gTasks[taskId].tExpTask_monId;
s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- u8 battlerId = gTasks[taskId].tExpTask_bank;
- s16 r4;
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
+ s16 newExpPoints;
- r4 = sub_8074AA0(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
+ newExpPoints = MoveBattleBar(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]);
- if (r4 == -1)
+ if (newExpPoints == -1) // The bar has been filled with given exp points.
{
u8 level;
s32 currExp;
@@ -1241,16 +1241,16 @@ static void sub_8059400(u8 taskId)
if (currExp + gainedExp >= expOnNextLvl)
{
- u8 savedActiveBank;
+ u8 savedActiveBattler;
SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &expOnNextLvl);
CalculateMonStats(&gPlayerParty[monId]);
gainedExp -= expOnNextLvl - currExp;
- savedActiveBank = gActiveBattler;
+ savedActiveBattler = gActiveBattler;
gActiveBattler = battlerId;
- BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
- gActiveBattler = savedActiveBank;
- gTasks[taskId].func = sub_8059544;
+ BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
+ gActiveBattler = savedActiveBattler;
+ gTasks[taskId].func = Task_LaunchLvlUpAnim;
}
else
{
@@ -1263,27 +1263,27 @@ static void sub_8059400(u8 taskId)
}
}
-static void sub_8059544(u8 taskId)
+static void Task_LaunchLvlUpAnim(u8 taskId)
{
- u8 battlerId = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
u8 monIndex = gTasks[taskId].tExpTask_monId;
if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
battlerId ^= BIT_FLANK;
InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP);
- gTasks[taskId].func = sub_80595A4;
+ gTasks[taskId].func = Task_UpdateLvlInHealthbox;
}
-static void sub_80595A4(u8 taskId)
+static void Task_UpdateLvlInHealthbox(u8 taskId)
{
- u8 battlerId = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_battler;
if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive)
{
u8 monIndex = gTasks[taskId].tExpTask_monId;
- GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
+ GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value.
if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
@@ -1300,8 +1300,8 @@ static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
u8 battlerId;
monIndex = gTasks[taskId].tExpTask_monId;
- GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
- battlerId = gTasks[taskId].tExpTask_bank;
+ GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value.
+ battlerId = gTasks[taskId].tExpTask_battler;
gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId);
}
@@ -1337,21 +1337,21 @@ static void CompleteOnInactiveTextPrinter2(void)
PlayerBufferExecCompleted();
}
-static void sub_80597CC(void)
+static void OpenPartyMenuToChooseMon(void)
{
if (!gPaletteFade.active)
{
- u8 r4;
+ u8 caseId;
- gBattlerControllerFuncs[gActiveBattler] = sub_8059828;
- r4 = gTasks[gUnknown_03005D7C[gActiveBattler]].data[0];
+ gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection;
+ caseId = gTasks[gUnknown_03005D7C[gActiveBattler]].data[0];
DestroyTask(gUnknown_03005D7C[gActiveBattler]);
FreeAllWindowBuffers();
- sub_81B89AC(r4);
+ OpenPartyMenuInBattle(caseId);
}
}
-static void sub_8059828(void)
+static void WaitForMonSelection(void)
{
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
{
@@ -1458,7 +1458,7 @@ static void MoveSelectionDisplayMoveNames(void)
{
MoveSelectionDestroyCursorAt(i);
StringCopy(gDisplayedStringBattle, gMoveNames[moveInfo->moves[i]]);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, i + 3);
+ BattlePutTextOnWindow(gDisplayedStringBattle, i + 3);
if (moveInfo->moves[i] != MOVE_NONE)
gNumberOfMovesToChoose++;
}
@@ -1467,7 +1467,7 @@ static void MoveSelectionDisplayMoveNames(void)
static void MoveSelectionDisplayPpString(void)
{
StringCopy(gDisplayedStringBattle, gText_MoveInterfacePP);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 7);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 7);
}
static void MoveSelectionDisplayPpNumber(void)
@@ -1485,7 +1485,7 @@ static void MoveSelectionDisplayPpNumber(void)
txtPtr++;
ConvertIntToDecimalStringN(txtPtr, moveInfo->maxPp[gMoveSelectionCursor[gActiveBattler]], STR_CONV_MODE_RIGHT_ALIGN, 2);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 9);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 9);
}
static void MoveSelectionDisplayMoveType(void)
@@ -1502,7 +1502,7 @@ static void MoveSelectionDisplayMoveType(void)
txtPtr++;
StringCopy(txtPtr, gTypeNames[gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].type]);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 10);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 10);
}
static void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 arg1)
@@ -1573,7 +1573,7 @@ static void PrintLinkStandbyMsg(void)
{
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
- BattleHandleAddTextPrinter(gText_LinkStandby, 0);
+ BattlePutTextOnWindow(gText_LinkStandby, 0);
}
}
@@ -2199,10 +2199,10 @@ static void sub_805B258(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(battlerId));
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(
- &gUnknown_0202499C,
+ &gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId));
@@ -2259,9 +2259,9 @@ static void DoSwitchOutAnimation(void)
}
}
-// some explanation here
-// in emerald it's possible to have a tag battle in the battle frontier facilities with AI
-// which use the front sprite for both the player and the partner as opposed to any other battles (including the one with Steven) that use the back pic as well as animate it
+// In emerald it's possible to have a tag battle in the battle frontier facilities with AI
+// which use the front sprite for both the player and the partner as opposed to any other battles (including the one with Steven)
+// that use an animated back pic.
static void PlayerHandleDrawTrainerPic(void)
{
s16 xPos, yPos;
@@ -2272,16 +2272,16 @@ static void PlayerHandleDrawTrainerPic(void)
if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_FIRE_RED
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_LEAF_GREEN)
{
- trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RED;
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RED;
}
else if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE)
{
- trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RS_BRENDAN;
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
}
else
{
- trainerPicId = gLinkPlayers[GetMultiplayerId()].gender;
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_BRENDAN;
}
}
else
@@ -2291,12 +2291,12 @@ static void PlayerHandleDrawTrainerPic(void)
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
- if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != 0) // second mon
+ if ((GetBattlerPosition(gActiveBattler) & BIT_FLANK) != B_FLANK_LEFT) // Second mon, on the right.
xPos = 90;
- else // first mon
+ else // First mon, on the left.
xPos = 32;
- if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != STEVEN_PARTNER_ID)
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER)
{
xPos = 90;
yPos = (8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 80;
@@ -2314,12 +2314,12 @@ static void PlayerHandleDrawTrainerPic(void)
}
// Use front pic table for any tag battles unless your partner is Steven.
- if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != STEVEN_PARTNER_ID)
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER)
{
trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender);
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
- sub_806A1C0(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBattler));
+ SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -2329,12 +2329,12 @@ static void PlayerHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineMode = 0;
gSprites[gBattlerSpriteIds[gActiveBattler]].hFlip = 1;
}
- // use the back pic in any other scenario
+ // Use the back pic in any other scenario.
else
{
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
- sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBattler));
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -2342,7 +2342,7 @@ static void PlayerHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
}
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
}
static void PlayerHandleTrainerSlide(void)
@@ -2354,26 +2354,26 @@ static void PlayerHandleTrainerSlide(void)
if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_FIRE_RED
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_LEAF_GREEN)
{
- trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RED;
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RED;
}
else if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY
|| (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE)
{
- trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RS_BRENDAN;
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN;
}
else
{
- trainerPicId = gLinkPlayers[GetMultiplayerId()].gender;
+ trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + TRAINER_BACK_PIC_BRENDAN;
}
}
else
{
- trainerPicId = gSaveBlock2Ptr->playerGender;
+ trainerPicId = gSaveBlock2Ptr->playerGender + TRAINER_BACK_PIC_BRENDAN;
}
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
- sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, 80, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, 30);
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, 80, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, 30);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96;
@@ -2466,7 +2466,7 @@ static void PlayerHandleMoveAnimation(void)
gWeatherMoveAnim = gBattleBufferA[gActiveBattler][12] | (gBattleBufferA[gActiveBattler][13] << 8);
gAnimDisableStructPtr = (struct DisableStruct *)&gBattleBufferA[gActiveBattler][16];
gTransformedPersonalities[gActiveBattler] = gAnimDisableStructPtr->transformedMonPersonality;
- if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // always returns FALSE
+ if (IsMoveWithoutAnimation(move, gAnimMoveTurn)) // Always returns FALSE.
{
PlayerBufferExecCompleted();
}
@@ -2536,7 +2536,7 @@ static void PlayerHandlePrintString(void)
gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
BattleTv_SetDataBasedOnString(*stringId);
sub_81A57E4(gActiveBattler, *stringId);
@@ -2566,14 +2566,14 @@ static void PlayerHandleChooseAction(void)
gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
BattleTv_ClearExplosionFaintCause();
- BattleHandleAddTextPrinter(gText_BattleMenu, 2);
+ BattlePutTextOnWindow(gText_BattleMenu, 2);
for (i = 0; i < 4; i++)
ActionSelectionDestroyCursorAt(i);
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 1);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 1);
}
static void PlayerHandleUnknownYesNoBox(void)
@@ -2581,7 +2581,7 @@ static void PlayerHandleUnknownYesNoBox(void)
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
- BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 12);
+ BattlePutTextOnWindow(gText_BattleYesNoChoice, 12);
gMultiUsePlayerCursor = 1;
BattleCreateYesNoCursorAt(1);
gBattlerControllerFuncs[gActiveBattler] = PlayerHandleUnknownYesNoInput;
@@ -2655,7 +2655,7 @@ static void PlayerHandleChoosePokemon(void)
for (i = 0; i < 3; i++)
gUnknown_0203CF00[i] = gBattleBufferA[gActiveBattler][4 + i];
- if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleBufferA[gActiveBattler][1] & 0xF) != 2)
+ if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleBufferA[gActiveBattler][1] & 0xF) != PARTY_CANT_SWITCH)
{
BtlController_EmitChosenMonReturnValue(1, gBattlerPartyIndexes[gActiveBattler] + 1, gUnknown_0203CF00);
PlayerBufferExecCompleted();
@@ -2664,11 +2664,11 @@ static void PlayerHandleChoosePokemon(void)
{
gUnknown_03005D7C[gActiveBattler] = CreateTask(TaskDummy, 0xFF);
gTasks[gUnknown_03005D7C[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF;
- *(&gBattleStruct->field_49) = gBattleBufferA[gActiveBattler][1] >> 4;
+ *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4;
*(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2];
- *(&gBattleStruct->field_B0) = gBattleBufferA[gActiveBattler][3];
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- gBattlerControllerFuncs[gActiveBattler] = sub_80597CC;
+ *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3];
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0);
+ gBattlerControllerFuncs[gActiveBattler] = OpenPartyMenuToChooseMon;
gBattlerInMenuId = gActiveBattler;
}
}
@@ -2722,19 +2722,19 @@ static void PlayerHandleExpUpdate(void)
u8 taskId;
LoadBattleBarGfx(1);
- GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // unused return value
- expPointsToGive = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES); // Unused return value.
+ expPointsToGive = T1_READ_16(&gBattleBufferA[gActiveBattler][2]);
taskId = CreateTask(Task_GiveExpToMon, 10);
gTasks[taskId].tExpTask_monId = monId;
gTasks[taskId].tExpTask_gainedExp = expPointsToGive;
- gTasks[taskId].tExpTask_bank = gActiveBattler;
+ gTasks[taskId].tExpTask_battler = gActiveBattler;
gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
}
}
#undef tExpTask_monId
#undef tExpTask_gainedExp
-#undef tExpTask_bank
+#undef tExpTask_battler
#undef tExpTask_frames
static void PlayerHandleStatusIconUpdate(void)
@@ -2945,8 +2945,8 @@ static void PlayerHandleIntroTrainerBallThrow(void)
taskId = CreateTask(task05_08033660, 5);
gTasks[taskId].data[0] = gActiveBattler;
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
@@ -2971,7 +2971,7 @@ static void task05_08033660(u8 taskId)
}
else
{
- u8 savedActiveBank = gActiveBattler;
+ u8 savedActiveBattler = gActiveBattler;
gActiveBattler = gTasks[taskId].data[0];
if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI))
@@ -2990,7 +2990,7 @@ static void task05_08033660(u8 taskId)
gActiveBattler ^= BIT_FLANK;
}
gBattlerControllerFuncs[gActiveBattler] = sub_8058B40;
- gActiveBattler = savedActiveBank;
+ gActiveBattler = savedActiveBattler;
DestroyTask(taskId);
}
}
@@ -3003,7 +3003,7 @@ static void PlayerHandleDrawPartyStatusSummary(void)
}
else
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
@@ -3023,17 +3023,17 @@ static void sub_805CE38(void)
}
}
-static void PlayerHandleCmd49(void)
+static void PlayerHandleHidePartyStatusSummary(void)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
PlayerBufferExecCompleted();
}
-static void PlayerHandleCmd50(void)
+static void PlayerHandleEndBounceEffect(void)
{
- dp11b_obj_free(gActiveBattler, 1);
- dp11b_obj_free(gActiveBattler, 0);
+ EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
+ EndBounceEffect(gActiveBattler, BOUNCE_MON);
PlayerBufferExecCompleted();
}
@@ -3072,8 +3072,8 @@ static void PlayerHandleLinkStandbyMsg(void)
PrintLinkStandbyMsg();
// fall through
case 1:
- dp11b_obj_free(gActiveBattler, 1);
- dp11b_obj_free(gActiveBattler, 0);
+ EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX);
+ EndBounceEffect(gActiveBattler, BOUNCE_MON);
break;
case 2:
PrintLinkStandbyMsg();
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index f18f582f7..601b8dcc1 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -11,6 +11,7 @@
#include "util.h"
#include "main.h"
#include "constants/songs.h"
+#include "constants/trainers.h"
#include "sound.h"
#include "window.h"
#include "m4a.h"
@@ -34,7 +35,7 @@ extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern void sub_81358F4(void);
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
-extern void sub_806A068(u16, u8);
+extern void SetMultiuseSpriteTemplateToPokemon(u16, u8);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
// this file's functions
@@ -87,8 +88,8 @@ static void PlayerPartnerHandleFaintingCry(void);
static void PlayerPartnerHandleIntroSlide(void);
static void PlayerPartnerHandleIntroTrainerBallThrow(void);
static void PlayerPartnerHandleDrawPartyStatusSummary(void);
-static void PlayerPartnerHandleCmd49(void);
-static void PlayerPartnerHandleCmd50(void);
+static void PlayerPartnerHandleHidePartyStatusSummary(void);
+static void PlayerPartnerHandleEndBounceEffect(void);
static void PlayerPartnerHandleSpriteInvisibility(void);
static void PlayerPartnerHandleBattleAnimation(void);
static void PlayerPartnerHandleLinkStandbyMsg(void);
@@ -164,8 +165,8 @@ static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
PlayerPartnerHandleIntroSlide,
PlayerPartnerHandleIntroTrainerBallThrow,
PlayerPartnerHandleDrawPartyStatusSummary,
- PlayerPartnerHandleCmd49,
- PlayerPartnerHandleCmd50,
+ PlayerPartnerHandleHidePartyStatusSummary,
+ PlayerPartnerHandleEndBounceEffect,
PlayerPartnerHandleSpriteInvisibility,
PlayerPartnerHandleBattleAnimation,
PlayerPartnerHandleLinkStandbyMsg,
@@ -203,7 +204,7 @@ static void PlayerPartnerBufferRunCommand(void)
}
}
-static void CompleteOnBankSpriteCallbackDummy(void)
+static void CompleteOnBattlerSpriteCallbackDummy(void)
{
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
PlayerPartnerBufferExecCompleted();
@@ -294,7 +295,7 @@ static void sub_81BB1D4(void)
static void CompleteOnHealthbarDone(void)
{
- s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
+ s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -344,7 +345,7 @@ static void Task_GiveExpToMon(u8 taskId)
gainedExp -= nextLvlExp - currExp;
savedActiveBank = gActiveBattler;
gActiveBattler = battlerId;
- BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
+ BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
gActiveBattler = savedActiveBank;
if (IsDoubleBattle() == TRUE
@@ -399,7 +400,7 @@ static void sub_81BB4E4(u8 taskId)
u8 battlerId = gTasks[taskId].tExpTask_bank;
s16 r4;
- r4 = sub_8074AA0(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
+ r4 = MoveBattleBar(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]);
if (r4 == -1)
{
@@ -423,7 +424,7 @@ static void sub_81BB4E4(u8 taskId)
gainedExp -= expOnNextLvl - currExp;
savedActiveBank = gActiveBattler;
gActiveBattler = battlerId;
- BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
+ BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp);
gActiveBattler = savedActiveBank;
gTasks[taskId].func = sub_81BB628;
}
@@ -1210,9 +1211,9 @@ static void PlayerPartnerHandleLoadMonSprite(void)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
- sub_806A068(species, GetBattlerPosition(gActiveBattler));
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C,
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
sub_80A82E4(gActiveBattler));
@@ -1240,10 +1241,10 @@ static void sub_81BD0E4(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(battlerId));
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(
- &gUnknown_0202499C,
+ &gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId));
@@ -1308,9 +1309,9 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
s16 xPos, yPos;
u32 trainerPicId;
- if (gPartnerTrainerId == STEVEN_PARTNER_ID)
+ if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
{
- trainerPicId = BACK_PIC_STEVEN;
+ trainerPicId = TRAINER_BACK_PIC_STEVEN;
xPos = 90;
yPos = (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80;
}
@@ -1322,11 +1323,11 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
}
// Use back pic only if the partner is Steven
- if (gPartnerTrainerId == STEVEN_PARTNER_ID)
+ if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
{
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
- sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBattler));
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -1336,8 +1337,8 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
else // otherwise use front sprite
{
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
- sub_806A1C0(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBattler));
+ SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -1348,7 +1349,7 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].hFlip = 1;
}
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
}
static void PlayerPartnerHandleTrainerSlide(void)
@@ -1492,7 +1493,7 @@ static void PlayerPartnerHandlePrintString(void)
gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
}
@@ -1793,9 +1794,9 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(void)
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F9);
- if (gPartnerTrainerId == STEVEN_PARTNER_ID)
+ if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
{
- u8 spriteId = BACK_PIC_STEVEN;
+ u8 spriteId = TRAINER_BACK_PIC_STEVEN;
LoadCompressedPalette(gTrainerBackPicPaletteTable[spriteId].data, 0x100 + paletteNum * 16, 32);
}
else
@@ -1810,8 +1811,8 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(void)
taskId = CreateTask(sub_81BE2C8, 5);
gTasks[taskId].data[0] = gActiveBattler;
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_77;
@@ -1857,7 +1858,7 @@ static void PlayerPartnerHandleDrawPartyStatusSummary(void)
}
else
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
@@ -1877,14 +1878,14 @@ static void sub_81BE498(void)
}
}
-static void PlayerPartnerHandleCmd49(void)
+static void PlayerPartnerHandleHidePartyStatusSummary(void)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
PlayerPartnerBufferExecCompleted();
}
-static void PlayerPartnerHandleCmd50(void)
+static void PlayerPartnerHandleEndBounceEffect(void)
{
PlayerPartnerBufferExecCompleted();
}
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index 4d1ccbaca..affcb09ab 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -13,6 +13,7 @@
#include "util.h"
#include "main.h"
#include "constants/songs.h"
+#include "constants/trainers.h"
#include "sound.h"
#include "window.h"
#include "m4a.h"
@@ -36,7 +37,6 @@ extern u8 gUnknown_0203C7B4;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
-extern void sub_806A068(u16, u8);
extern u16 sub_8068B48(void);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -90,8 +90,8 @@ static void RecordedOpponentHandleFaintingCry(void);
static void RecordedOpponentHandleIntroSlide(void);
static void RecordedOpponentHandleIntroTrainerBallThrow(void);
static void RecordedOpponentHandleDrawPartyStatusSummary(void);
-static void RecordedOpponentHandleCmd49(void);
-static void RecordedOpponentHandleCmd50(void);
+static void RecordedOpponentHandleHidePartyStatusSummary(void);
+static void RecordedOpponentHandleEndBounceEffect(void);
static void RecordedOpponentHandleSpriteInvisibility(void);
static void RecordedOpponentHandleBattleAnimation(void);
static void RecordedOpponentHandleLinkStandbyMsg(void);
@@ -162,8 +162,8 @@ static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void
RecordedOpponentHandleIntroSlide,
RecordedOpponentHandleIntroTrainerBallThrow,
RecordedOpponentHandleDrawPartyStatusSummary,
- RecordedOpponentHandleCmd49,
- RecordedOpponentHandleCmd50,
+ RecordedOpponentHandleHidePartyStatusSummary,
+ RecordedOpponentHandleEndBounceEffect,
RecordedOpponentHandleSpriteInvisibility,
RecordedOpponentHandleBattleAnimation,
RecordedOpponentHandleLinkStandbyMsg,
@@ -192,7 +192,7 @@ static void RecordedOpponentBufferRunCommand(void)
}
}
-static void CompleteOnBankSpriteCallbackDummy(void)
+static void CompleteOnBattlerSpriteCallbackDummy(void)
{
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
RecordedOpponentBufferExecCompleted();
@@ -377,7 +377,7 @@ static void sub_8186C48(void)
static void CompleteOnHealthbarDone(void)
{
- s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
+ s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -1118,9 +1118,9 @@ static void RecordedOpponentHandleLoadMonSprite(void)
u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
- sub_806A068(species, GetBattlerPosition(gActiveBattler));
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C,
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
sub_80A82E4(gActiveBattler));
@@ -1153,9 +1153,9 @@ static void sub_81885D8(u8 battlerId, bool8 dontClearSubstituteBit)
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
- sub_806A068(species, GetBattlerPosition(battlerId));
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C,
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId));
@@ -1251,8 +1251,8 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
}
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
- sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C,
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40,
sub_80A82E4(gActiveBattler));
@@ -1263,7 +1263,7 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
}
static void RecordedOpponentHandleTrainerSlide(void)
@@ -1296,7 +1296,7 @@ static void RecordedOpponentHandleFaintAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
PlaySE12WithPanning(SE_POKE_DEAD, PAN_SIDE_OPPONENT);
- gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8039934;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon;
gBattlerControllerFuncs[gActiveBattler] = sub_8186D58;
}
}
@@ -1404,7 +1404,7 @@ static void RecordedOpponentHandlePrintString(void)
gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
}
@@ -1658,8 +1658,8 @@ static void RecordedOpponentHandleIntroTrainerBallThrow(void)
taskId = CreateTask(sub_8189548, 5);
gTasks[taskId].data[0] = gActiveBattler;
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_70;
@@ -1704,7 +1704,7 @@ static void RecordedOpponentHandleDrawPartyStatusSummary(void)
}
else
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
if (gBattleBufferA[gActiveBattler][2] != 0)
{
@@ -1738,14 +1738,14 @@ static void sub_818975C(void)
}
}
-static void RecordedOpponentHandleCmd49(void)
+static void RecordedOpponentHandleHidePartyStatusSummary(void)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
RecordedOpponentBufferExecCompleted();
}
-static void RecordedOpponentHandleCmd50(void)
+static void RecordedOpponentHandleEndBounceEffect(void)
{
RecordedOpponentBufferExecCompleted();
}
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index b16c3f307..4f224bc67 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -36,7 +36,6 @@ extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
-extern void sub_806A068(u16, u8);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
// this file's functions
@@ -89,8 +88,8 @@ static void RecordedPlayerHandleFaintingCry(void);
static void RecordedPlayerHandleIntroSlide(void);
static void RecordedPlayerHandleIntroTrainerBallThrow(void);
static void RecordedPlayerHandleDrawPartyStatusSummary(void);
-static void RecordedPlayerHandleCmd49(void);
-static void RecordedPlayerHandleCmd50(void);
+static void RecordedPlayerHandleHidePartyStatusSummary(void);
+static void RecordedPlayerHandleEndBounceEffect(void);
static void RecordedPlayerHandleSpriteInvisibility(void);
static void RecordedPlayerHandleBattleAnimation(void);
static void RecordedPlayerHandleLinkStandbyMsg(void);
@@ -160,8 +159,8 @@ static void (*const sRecordedPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void)
RecordedPlayerHandleIntroSlide,
RecordedPlayerHandleIntroTrainerBallThrow,
RecordedPlayerHandleDrawPartyStatusSummary,
- RecordedPlayerHandleCmd49,
- RecordedPlayerHandleCmd50,
+ RecordedPlayerHandleHidePartyStatusSummary,
+ RecordedPlayerHandleEndBounceEffect,
RecordedPlayerHandleSpriteInvisibility,
RecordedPlayerHandleBattleAnimation,
RecordedPlayerHandleLinkStandbyMsg,
@@ -190,7 +189,7 @@ static void RecordedPlayerBufferRunCommand(void)
}
}
-static void CompleteOnBankSpriteCallbackDummy(void)
+static void CompleteOnBattlerSpriteCallbackDummy(void)
{
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
RecordedPlayerBufferExecCompleted();
@@ -363,7 +362,7 @@ static void sub_818A064(void)
static void CompleteOnHealthbarDone(void)
{
- s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
+ s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -1107,9 +1106,9 @@ static void RecordedPlayerHandleLoadMonSprite(void)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
- sub_806A068(species, GetBattlerPosition(gActiveBattler));
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C,
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
sub_80A82E4(gActiveBattler));
@@ -1137,10 +1136,10 @@ static void sub_818BA6C(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(battlerId));
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
gBattlerSpriteIds[battlerId] = CreateSprite(
- &gUnknown_0202499C,
+ &gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId));
@@ -1242,8 +1241,8 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
{
trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender);
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
- sub_806A1C0(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBattler));
+ SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -1256,8 +1255,8 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
else
{
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
- sub_806A12C(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C, xPos, yPos, sub_80A82E4(gActiveBattler));
+ SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -1265,7 +1264,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
}
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
}
static void RecordedPlayerHandleTrainerSlide(void)
@@ -1409,7 +1408,7 @@ static void RecordedPlayerHandlePrintString(void)
gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
}
@@ -1693,8 +1692,8 @@ static void RecordedPlayerHandleIntroTrainerBallThrow(void)
taskId = CreateTask(sub_818CC24, 5);
gTasks[taskId].data[0] = gActiveBattler;
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_120;
@@ -1740,7 +1739,7 @@ static void RecordedPlayerHandleDrawPartyStatusSummary(void)
}
else
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0;
@@ -1760,14 +1759,14 @@ static void sub_818CDF4(void)
}
}
-static void RecordedPlayerHandleCmd49(void)
+static void RecordedPlayerHandleHidePartyStatusSummary(void)
{
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
RecordedPlayerBufferExecCompleted();
}
-static void RecordedPlayerHandleCmd50(void)
+static void RecordedPlayerHandleEndBounceEffect(void)
{
RecordedPlayerBufferExecCompleted();
}
diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c
index 9f83ebcf0..bc97c01f9 100644
--- a/src/battle_controller_safari.c
+++ b/src/battle_controller_safari.c
@@ -80,8 +80,8 @@ static void SafariHandleFaintingCry(void);
static void SafariHandleIntroSlide(void);
static void SafariHandleIntroTrainerBallThrow(void);
static void SafariHandleDrawPartyStatusSummary(void);
-static void SafariHandleCmd49(void);
-static void SafariHandleCmd50(void);
+static void SafariHandleHidePartyStatusSummary(void);
+static void SafariHandleEndBounceEffect(void);
static void SafariHandleSpriteInvisibility(void);
static void SafariHandleBattleAnimation(void);
static void SafariHandleLinkStandbyMsg(void);
@@ -144,8 +144,8 @@ static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
SafariHandleIntroSlide,
SafariHandleIntroTrainerBallThrow,
SafariHandleDrawPartyStatusSummary,
- SafariHandleCmd49,
- SafariHandleCmd50,
+ SafariHandleHidePartyStatusSummary,
+ SafariHandleEndBounceEffect,
SafariHandleSpriteInvisibility,
SafariHandleBattleAnimation,
SafariHandleLinkStandbyMsg,
@@ -239,7 +239,7 @@ static void HandleInputChooseAction(void)
}
}
-static void CompleteOnBankSpriteCallbackDummy(void)
+static void CompleteOnBattlerSpriteCallbackDummy(void)
{
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
SafariBufferExecCompleted();
@@ -358,9 +358,9 @@ static void SafariHandleReturnMonToBall(void)
static void SafariHandleDrawTrainerPic(void)
{
DecompressTrainerBackPic(gSaveBlock2Ptr->playerGender, gActiveBattler);
- sub_806A12C(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler));
+ SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler));
gBattlerSpriteIds[gActiveBattler] = CreateSprite(
- &gUnknown_0202499C,
+ &gMultiuseSpriteTemplate,
80,
(8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].coords) * 4 + 80,
30);
@@ -368,7 +368,7 @@ static void SafariHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
}
static void SafariHandleTrainerSlide(void)
@@ -427,7 +427,7 @@ static void SafariHandlePrintString(void)
gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
}
@@ -454,14 +454,14 @@ static void SafariHandleChooseAction(void)
s32 i;
gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
- BattleHandleAddTextPrinter(gText_SafariZoneMenu, 2);
+ BattlePutTextOnWindow(gText_SafariZoneMenu, 2);
for (i = 0; i < 4; i++)
ActionSelectionDestroyCursorAt(i);
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo2);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 1);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 1);
}
static void SafariHandleUnknownYesNoBox(void)
@@ -645,12 +645,12 @@ static void SafariHandleDrawPartyStatusSummary(void)
SafariBufferExecCompleted();
}
-static void SafariHandleCmd49(void)
+static void SafariHandleHidePartyStatusSummary(void)
{
SafariBufferExecCompleted();
}
-static void SafariHandleCmd50(void)
+static void SafariHandleEndBounceEffect(void)
{
SafariBufferExecCompleted();
}
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index 20716c679..960181fbc 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -15,6 +15,7 @@
#include "constants/songs.h"
#include "sound.h"
#include "constants/moves.h"
+#include "constants/trainers.h"
#include "window.h"
#include "m4a.h"
#include "palette.h"
@@ -38,7 +39,6 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
-extern void sub_806A068(u16, u8);
// this file's functions
static void WallyHandleGetMonData(void);
@@ -90,8 +90,8 @@ static void WallyHandleFaintingCry(void);
static void WallyHandleIntroSlide(void);
static void WallyHandleIntroTrainerBallThrow(void);
static void WallyHandleDrawPartyStatusSummary(void);
-static void WallyHandleCmd49(void);
-static void WallyHandleCmd50(void);
+static void WallyHandleHidePartyStatusSummary(void);
+static void WallyHandleEndBounceEffect(void);
static void WallyHandleSpriteInvisibility(void);
static void WallyHandleBattleAnimation(void);
static void WallyHandleLinkStandbyMsg(void);
@@ -159,8 +159,8 @@ static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(void) =
WallyHandleIntroSlide,
WallyHandleIntroTrainerBallThrow,
WallyHandleDrawPartyStatusSummary,
- WallyHandleCmd49,
- WallyHandleCmd50,
+ WallyHandleHidePartyStatusSummary,
+ WallyHandleEndBounceEffect,
WallyHandleSpriteInvisibility,
WallyHandleBattleAnimation,
WallyHandleLinkStandbyMsg,
@@ -253,7 +253,7 @@ static void WallyHandleActions(void)
}
}
-static void CompleteOnBankSpriteCallbackDummy(void)
+static void CompleteOnBattlerSpriteCallbackDummy(void)
{
if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy)
WallyBufferExecCompleted();
@@ -349,7 +349,7 @@ static void sub_8168818(void)
static void CompleteOnHealthbarDone(void)
{
- s16 hpValue = sub_8074AA0(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
+ s16 hpValue = MoveBattleBar(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], HEALTH_BAR, 0);
SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]);
@@ -1037,26 +1037,26 @@ static void WallyHandleReturnMonToBall(void)
static void WallyHandleDrawTrainerPic(void)
{
- DecompressTrainerBackPic(BACK_PIC_WALLY, gActiveBattler);
- sub_806A12C(BACK_PIC_WALLY, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C,
+ DecompressTrainerBackPic(TRAINER_BACK_PIC_WALLY, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_WALLY, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80,
- 80 + 4 * (8 - gTrainerBackPicCoords[BACK_PIC_WALLY].coords),
+ 80 + 4 * (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_WALLY].coords),
30);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy;
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy;
}
static void WallyHandleTrainerSlide(void)
{
- DecompressTrainerBackPic(BACK_PIC_WALLY, gActiveBattler);
- sub_806A12C(BACK_PIC_WALLY, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gUnknown_0202499C,
+ DecompressTrainerBackPic(TRAINER_BACK_PIC_WALLY, gActiveBattler);
+ SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_WALLY, GetBattlerPosition(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
80,
- 80 + 4 * (8 - gTrainerBackPicCoords[BACK_PIC_WALLY].coords),
+ 80 + 4 * (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_WALLY].coords),
30);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96;
@@ -1179,7 +1179,7 @@ static void WallyHandlePrintString(void)
gBattle_BG0_Y = 0;
stringId = (u16*)(&gBattleBufferA[gActiveBattler][2]);
BufferStringBattle(*stringId);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
}
@@ -1206,14 +1206,14 @@ static void WallyHandleChooseAction(void)
s32 i;
gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
- BattleHandleAddTextPrinter(gText_BattleMenu, 2);
+ BattlePutTextOnWindow(gText_BattleMenu, 2);
for (i = 0; i < 4; i++)
ActionSelectionDestroyCursorAt(i);
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillWallyDo);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 1);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 1);
}
static void WallyHandleUnknownYesNoBox(void)
@@ -1444,14 +1444,14 @@ static void WallyHandleIntroTrainerBallThrow(void)
StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1);
paletteNum = AllocSpritePalette(0xD6F8);
- LoadCompressedPalette(gTrainerBackPicPaletteTable[BACK_PIC_WALLY].data, 0x100 + paletteNum * 16, 32);
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[TRAINER_BACK_PIC_WALLY].data, 0x100 + paletteNum * 16, 32);
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum;
taskId = CreateTask(sub_816AC04, 5);
gTasks[taskId].data[0] = gActiveBattler;
- if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1)
- gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = sub_8073C30;
+ if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown)
+ gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary;
gBattleSpritesDataPtr->animationData->field_9_x1 = 1;
gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
@@ -1465,8 +1465,8 @@ static void sub_816AA80(u8 battlerId)
gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C,
+ SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId));
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
sub_80A82E4(battlerId));
@@ -1511,18 +1511,18 @@ static void WallyHandleDrawPartyStatusSummary(void)
}
else
{
- gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x1 = 1;
+ gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1;
gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]);
WallyBufferExecCompleted();
}
}
-static void WallyHandleCmd49(void)
+static void WallyHandleHidePartyStatusSummary(void)
{
WallyBufferExecCompleted();
}
-static void WallyHandleCmd50(void)
+static void WallyHandleEndBounceEffect(void)
{
WallyBufferExecCompleted();
}
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 0a712c79b..4d714ca81 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -264,67 +264,67 @@ static void InitSinglePlayerBtlControllers(void)
for (var = gUnknown_0203C7B4, i = 0; i < MAX_BATTLERS_COUNT; i++)
{
- switch (gLinkPlayers[i].lp_field_18)
+ switch (gLinkPlayers[i].id)
{
case 0:
case 3:
- sub_81B8D64(gLinkPlayers[i].lp_field_18, 0);
+ sub_81B8D64(gLinkPlayers[i].id, 0);
break;
case 1:
case 2:
- sub_81B8D64(gLinkPlayers[i].lp_field_18, 1);
+ sub_81B8D64(gLinkPlayers[i].id, 1);
break;
}
if (i == var)
{
- gBattlerControllerFuncs[gLinkPlayers[i].lp_field_18] = SetControllerToRecordedPlayer;
- switch (gLinkPlayers[i].lp_field_18)
+ gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToRecordedPlayer;
+ switch (gLinkPlayers[i].id)
{
case 0:
case 3:
- gBattlerPositions[gLinkPlayers[i].lp_field_18] = B_POSITION_PLAYER_LEFT;
- gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 0;
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
break;
case 1:
case 2:
- gBattlerPositions[gLinkPlayers[i].lp_field_18] = B_POSITION_PLAYER_RIGHT;
- gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 3;
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
break;
}
}
- else if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[var].lp_field_18 & 1))
- || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[var].lp_field_18 & 1)))
+ else if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[var].id & 1))
+ || ((gLinkPlayers[i].id & 1) && (gLinkPlayers[var].id & 1)))
{
- gBattlerControllerFuncs[gLinkPlayers[i].lp_field_18] = SetControllerToRecordedPlayer;
- switch (gLinkPlayers[i].lp_field_18)
+ gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToRecordedPlayer;
+ switch (gLinkPlayers[i].id)
{
case 0:
case 3:
- gBattlerPositions[gLinkPlayers[i].lp_field_18] = B_POSITION_PLAYER_LEFT;
- gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 0;
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
break;
case 1:
case 2:
- gBattlerPositions[gLinkPlayers[i].lp_field_18] = B_POSITION_PLAYER_RIGHT;
- gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 3;
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
break;
}
}
else
{
- gBattlerControllerFuncs[gLinkPlayers[i].lp_field_18] = SetControllerToRecordedOpponent;
- switch (gLinkPlayers[i].lp_field_18)
+ gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToRecordedOpponent;
+ switch (gLinkPlayers[i].id)
{
case 0:
case 3:
- gBattlerPositions[gLinkPlayers[i].lp_field_18] = B_POSITION_OPPONENT_LEFT;
- gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 0;
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_LEFT;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
break;
case 1:
case 2:
- gBattlerPositions[gLinkPlayers[i].lp_field_18] = B_POSITION_OPPONENT_RIGHT;
- gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 3;
+ gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_RIGHT;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
break;
}
}
@@ -506,69 +506,69 @@ static void InitLinkBtlControllers(void)
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
- switch (gLinkPlayers[i].lp_field_18)
+ switch (gLinkPlayers[i].id)
{
case 0:
case 3:
- sub_81B8D64(gLinkPlayers[i].lp_field_18, 0);
+ sub_81B8D64(gLinkPlayers[i].id, 0);
break;
case 1:
case 2:
- sub_81B8D64(gLinkPlayers[i].lp_field_18, 1);
+ sub_81B8D64(gLinkPlayers[i].id, 1);
break;
}
if (i == multiplayerId)
{
- gBattlerControllerFuncs[gLinkPlayers[i].lp_field_18] = SetControllerToPlayer;
- switch (gLinkPlayers[i].lp_field_18)
+ gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToPlayer;
+ switch (gLinkPlayers[i].id)
{
case 0:
case 3:
- gBattlerPositions[gLinkPlayers[i].lp_field_18] = 0;
- gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 0;
+ gBattlerPositions[gLinkPlayers[i].id] = 0;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
break;
case 1:
case 2:
- gBattlerPositions[gLinkPlayers[i].lp_field_18] = 2;
- gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 3;
+ gBattlerPositions[gLinkPlayers[i].id] = 2;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
break;
}
}
else
{
- if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[multiplayerId].lp_field_18 & 1))
- || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[multiplayerId].lp_field_18 & 1)))
+ if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1))
+ || ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1)))
{
- gBattlerControllerFuncs[gLinkPlayers[i].lp_field_18] = SetControllerToLinkPartner;
- switch (gLinkPlayers[i].lp_field_18)
+ gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToLinkPartner;
+ switch (gLinkPlayers[i].id)
{
case 0:
case 3:
- gBattlerPositions[gLinkPlayers[i].lp_field_18] = 0;
- gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 0;
+ gBattlerPositions[gLinkPlayers[i].id] = 0;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
break;
case 1:
case 2:
- gBattlerPositions[gLinkPlayers[i].lp_field_18] = 2;
- gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 3;
+ gBattlerPositions[gLinkPlayers[i].id] = 2;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
break;
}
}
else
{
- gBattlerControllerFuncs[gLinkPlayers[i].lp_field_18] = SetControllerToLinkOpponent;
- switch (gLinkPlayers[i].lp_field_18)
+ gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToLinkOpponent;
+ switch (gLinkPlayers[i].id)
{
case 0:
case 3:
- gBattlerPositions[gLinkPlayers[i].lp_field_18] = 1;
- gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 0;
+ gBattlerPositions[gLinkPlayers[i].id] = 1;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
break;
case 1:
case 2:
- gBattlerPositions[gLinkPlayers[i].lp_field_18] = 3;
- gBattlerPartyIndexes[gLinkPlayers[i].lp_field_18] = 3;
+ gBattlerPositions[gLinkPlayers[i].id] = 3;
+ gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
break;
}
}
@@ -587,7 +587,7 @@ static void SetBattlePartyIds(void)
{
for (i = 0; i < gBattlersCount; i++)
{
- for (j = 0; j < 6; j++)
+ for (j = 0; j < PARTY_SIZE; j++)
{
if (i < 2)
{
@@ -1082,14 +1082,14 @@ void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 m
void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
{
s32 i;
- struct StringInfoBattle* stringInfo;
+ struct BattleMsgData* stringInfo;
sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRING;
sBattleBuffersTransferData[1] = gBattleOutcome;
sBattleBuffersTransferData[2] = stringID;
sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
- stringInfo = (struct StringInfoBattle*)(&sBattleBuffersTransferData[4]);
+ stringInfo = (struct BattleMsgData*)(&sBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove;
stringInfo->originallyUsedMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem;
@@ -1097,7 +1097,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
stringInfo->scrActive = gBattleScripting.battler;
stringInfo->unk1605E = gBattleStruct->field_52;
stringInfo->hpScale = gBattleStruct->hpScale;
- stringInfo->StringBank = gPotentialItemEffectBattler;
+ stringInfo->itemEffectBattler = gPotentialItemEffectBattler;
stringInfo->moveType = gBattleMoves[gCurrentMove].type;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
@@ -1108,20 +1108,20 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID)
stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
stringInfo->textBuffs[2][i] = gBattleTextBuff3[i];
}
- PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct BattleMsgData) + 4);
}
void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
{
s32 i;
- struct StringInfoBattle *stringInfo;
+ struct BattleMsgData *stringInfo;
sBattleBuffersTransferData[0] = CONTROLLER_PRINTSTRINGPLAYERONLY;
sBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY;
sBattleBuffersTransferData[2] = stringID;
sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
- stringInfo = (struct StringInfoBattle*)(&sBattleBuffersTransferData[4]);
+ stringInfo = (struct BattleMsgData*)(&sBattleBuffersTransferData[4]);
stringInfo->currentMove = gCurrentMove;
stringInfo->originallyUsedMove = gChosenMove;
stringInfo->lastItem = gLastUsedItem;
@@ -1137,7 +1137,7 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID)
stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
stringInfo->textBuffs[2][i] = gBattleTextBuff3[i];
}
- PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct BattleMsgData) + 4);
}
void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2)
@@ -1181,7 +1181,7 @@ void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
-void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4)
+void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8 *arg4)
{
s32 i;
@@ -1191,7 +1191,7 @@ void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 ability
sBattleBuffersTransferData[3] = abilityId;
for (i = 0; i < 3; i++)
sBattleBuffersTransferData[4 + i] = arg4[i];
- PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // but only 7 bytes were written
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // Only 7 bytes were written.
}
void BtlController_EmitCmd23(u8 bufferId)
@@ -1449,26 +1449,26 @@ void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* h
sBattleBuffersTransferData[1] = arg2 & 0x7F;
sBattleBuffersTransferData[2] = (arg2 & 0x80) >> 7;
sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY;
- for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * 6); i++)
+ for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * PARTY_SIZE); i++)
sBattleBuffersTransferData[4 + i] = *(i + (u8*)(hpAndStatus));
- PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct HpAndStatus) * 6 + 4);
+ PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct HpAndStatus) * PARTY_SIZE + 4);
}
-void BtlController_EmitCmd49(u8 bufferId)
+void BtlController_EmitHidePartyStatusSummary(u8 bufferId)
{
- sBattleBuffersTransferData[0] = CONTROLLER_49;
- sBattleBuffersTransferData[1] = CONTROLLER_49;
- sBattleBuffersTransferData[2] = CONTROLLER_49;
- sBattleBuffersTransferData[3] = CONTROLLER_49;
+ sBattleBuffersTransferData[0] = CONTROLLER_HIDEPARTYSTATUSSUMMARY;
+ sBattleBuffersTransferData[1] = CONTROLLER_HIDEPARTYSTATUSSUMMARY;
+ sBattleBuffersTransferData[2] = CONTROLLER_HIDEPARTYSTATUSSUMMARY;
+ sBattleBuffersTransferData[3] = CONTROLLER_HIDEPARTYSTATUSSUMMARY;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
-void BtlController_EmitCmd50(u8 bufferId)
+void BtlController_EmitEndBounceEffect(u8 bufferId)
{
- sBattleBuffersTransferData[0] = CONTROLLER_50;
- sBattleBuffersTransferData[1] = CONTROLLER_50;
- sBattleBuffersTransferData[2] = CONTROLLER_50;
- sBattleBuffersTransferData[3] = CONTROLLER_50;
+ sBattleBuffersTransferData[0] = CONTROLLER_ENDBOUNCE;
+ sBattleBuffersTransferData[1] = CONTROLLER_ENDBOUNCE;
+ sBattleBuffersTransferData[2] = CONTROLLER_ENDBOUNCE;
+ sBattleBuffersTransferData[3] = CONTROLLER_ENDBOUNCE;
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
@@ -1511,10 +1511,10 @@ void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2);
}
-void BtlController_EmitCmd55(u8 bufferId, u8 arg1)
+void BtlController_EmitCmd55(u8 bufferId, u8 battleOutcome)
{
sBattleBuffersTransferData[0] = CONTROLLER_55;
- sBattleBuffersTransferData[1] = arg1;
+ sBattleBuffersTransferData[1] = battleOutcome;
sBattleBuffersTransferData[2] = gSaveBlock2Ptr->frontier.field_CA9_b;
sBattleBuffersTransferData[3] = gSaveBlock2Ptr->frontier.field_CA9_b;
sBattleBuffersTransferData[5] = sBattleBuffersTransferData[4] = sub_81850DC(&sBattleBuffersTransferData[6]);
diff --git a/src/battle_data.c b/src/battle_data.c
new file mode 100644
index 000000000..f3719ac2d
--- /dev/null
+++ b/src/battle_data.c
@@ -0,0 +1,13 @@
+#include "global.h"
+#include "battle.h"
+#include "data2.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/species.h"
+#include "constants/trainers.h"
+
+#include "data/trainer_parties.h"
+#include "data/text/trainer_class_names.h"
+#include "data/trainers.h"
+#include "data/text/species_names.h"
+#include "data/text/move_names.h"
diff --git a/src/battle_dome_cards.c b/src/battle_dome_cards.c
index 076a4d342..5e659a2e8 100644
--- a/src/battle_dome_cards.c
+++ b/src/battle_dome_cards.c
@@ -16,14 +16,15 @@ extern const struct CompressedSpriteSheet gTrainerBackPicTable[];
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const union AffineAnimCmd *const gUnknown_082FF618[];
extern const union AffineAnimCmd *const gUnknown_082FF694[];
-extern const union AnimCmd *const gUnknown_082FF70C[];
+extern const union AnimCmd *const gPlayerMonSpriteAnimsTable[];
extern const union AnimCmd *const *const gMonAnimationsSpriteAnimsPtrTable[NUM_SPECIES];
extern const union AnimCmd *const *const gUnknown_0830536C[];
extern const u8 gFacilityClassToPicIndex[];
// Static type declarations
-struct BattleDomeCard {
+struct BattleDomeCard
+{
u8 *frames;
struct SpriteFrameImage *images;
u16 paletteTag;
@@ -41,10 +42,12 @@ static EWRAM_DATA struct BattleDomeCard gUnknown_0203CD04[8] = {};
// .rodata
static const struct BattleDomeCard gUnknown_0860B058 = {};
-static const struct OamData gUnknown_0860B064 = {
+static const struct OamData gUnknown_0860B064 =
+{
.size = 3
};
-static const struct OamData gUnknown_0860B06C = {
+static const struct OamData gUnknown_0860B06C =
+{
.affineMode = 1, .size = 3
};
@@ -158,7 +161,7 @@ static void uns_builder_assign_animtable1(bool8 isTrainer)
{
if (!isTrainer)
{
- gUnknown_0203CCEC.anims = gUnknown_082FF70C;
+ gUnknown_0203CCEC.anims = gPlayerMonSpriteAnimsTable;
}
else
{
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index d2c242553..8f17d488e 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -67,48 +67,48 @@ static void sub_805D7EC(struct Sprite *sprite);
static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId);
static void Task_ClearBitWhenBattleTableAnimDone(u8 taskId);
static void Task_ClearBitWhenSpecialAnimDone(u8 taskId);
-static void ClearSpritesBankHealthboxAnimData(void);
+static void ClearSpritesBattlerHealthboxAnimData(void);
// const rom data
-static const struct CompressedSpriteSheet gUnknown_0832C0D0 =
+static const struct CompressedSpriteSheet sSpriteSheet_SinglesPlayerHealthbox =
{
gUnknown_08C1F1C8, 0x1000, TAG_HEALTHBOX_PLAYER1_TILE
};
-static const struct CompressedSpriteSheet gUnknown_0832C0D8 =
+static const struct CompressedSpriteSheet sSpriteSheet_SinglesOpponentHealthbox =
{
gUnknown_08C1F46C, 0x1000, TAG_HEALTHBOX_OPPONENT1_TILE
};
-static const struct CompressedSpriteSheet gUnknown_0832C0E0[2] =
+static const struct CompressedSpriteSheet sSpriteSheets_DoublesPlayerHealthbox[2] =
{
{gUnknown_08C1F5E8, 0x800, TAG_HEALTHBOX_PLAYER1_TILE},
{gUnknown_08C1F5E8, 0x800, TAG_HEALTHBOX_PLAYER2_TILE}
};
-static const struct CompressedSpriteSheet gUnknown_0832C0F0[2] =
+static const struct CompressedSpriteSheet sSpriteSheets_DoublesOpponentHealthbox[2] =
{
{gUnknown_08C1F76C, 0x800, TAG_HEALTHBOX_OPPONENT1_TILE},
{gUnknown_08C1F76C, 0x800, TAG_HEALTHBOX_OPPONENT2_TILE}
};
-static const struct CompressedSpriteSheet gUnknown_0832C100 =
+static const struct CompressedSpriteSheet sSpriteSheet_SafariHealthbox =
{
gUnknown_08C1F8E8, 0x1000, TAG_HEALTHBOX_SAFARI_TILE
};
-static const struct CompressedSpriteSheet gUnknown_0832C108[MAX_BATTLERS_COUNT] =
+static const struct CompressedSpriteSheet sSpriteSheets_HealthBar[MAX_BATTLERS_COUNT] =
{
- {gBlankGfxCompressed, 0x0100, 0xd704},
- {gBlankGfxCompressed, 0x0120, 0xd705},
- {gBlankGfxCompressed, 0x0100, 0xd706},
- {gBlankGfxCompressed, 0x0120, 0xd707}
+ {gBlankGfxCompressed, 0x0100, TAG_HEALTHBAR_PLAYER1_TILE},
+ {gBlankGfxCompressed, 0x0120, TAG_HEALTHBAR_OPPONENT1_TILE},
+ {gBlankGfxCompressed, 0x0100, TAG_HEALTHBAR_PLAYER2_TILE},
+ {gBlankGfxCompressed, 0x0120, TAG_HEALTHBAR_OPPONENT2_TILE}
};
-static const struct SpritePalette gUnknown_0832C128[2] =
+static const struct SpritePalette sSpritePalettes_HealthBoxHealthBar[2] =
{
{gBattleInterface_BallStatusBarPal, TAG_HEALTHBOX_PAL},
- {gBattleInterface_BallDisplayPal, 0xd704}
+ {gBattleInterface_BallDisplayPal, TAG_HEALTHBAR_PAL}
};
// code
@@ -411,35 +411,35 @@ void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status)
#define tBattlerId data[0]
-bool8 TryHandleLaunchBattleTableAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId, u16 argument)
+bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId, u16 argument)
{
u8 taskId;
if (tableId == B_ANIM_CASTFORM_CHANGE && (argument & 0x80))
{
- gBattleMonForms[activeBank] = (argument & ~(0x80));
+ gBattleMonForms[activeBattler] = (argument & ~(0x80));
return TRUE;
}
- if (gBattleSpritesDataPtr->battlerData[activeBank].behindSubstitute
+ if (gBattleSpritesDataPtr->battlerData[activeBattler].behindSubstitute
&& !ShouldAnimBeDoneRegardlessOfSubsitute(tableId))
{
return TRUE;
}
- if (gBattleSpritesDataPtr->battlerData[activeBank].behindSubstitute
+ if (gBattleSpritesDataPtr->battlerData[activeBattler].behindSubstitute
&& tableId == B_ANIM_SUBSTITUTE_FADE
- && gSprites[gBattlerSpriteIds[activeBank]].invisible)
+ && gSprites[gBattlerSpriteIds[activeBattler]].invisible)
{
- LoadBattleMonGfxAndAnimate(activeBank, TRUE, gBattlerSpriteIds[activeBank]);
- ClearBehindSubstituteBit(activeBank);
+ LoadBattleMonGfxAndAnimate(activeBattler, TRUE, gBattlerSpriteIds[activeBattler]);
+ ClearBehindSubstituteBit(activeBattler);
return TRUE;
}
- gBattleAnimAttacker = atkBank;
- gBattleAnimTarget = defBank;
+ gBattleAnimAttacker = atkBattler;
+ gBattleAnimTarget = defBattler;
gBattleSpritesDataPtr->animationData->animArg = argument;
LaunchBattleAnimation(gBattleAnims_VariousTable, tableId, FALSE);
taskId = CreateTask(Task_ClearBitWhenBattleTableAnimDone, 10);
- gTasks[taskId].tBattlerId = activeBank;
+ gTasks[taskId].tBattlerId = activeBattler;
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].animFromTableActive = 1;
return FALSE;
@@ -475,15 +475,15 @@ static bool8 ShouldAnimBeDoneRegardlessOfSubsitute(u8 animId)
#define tBattlerId data[0]
-void InitAndLaunchSpecialAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId)
+void InitAndLaunchSpecialAnimation(u8 activeBattler, u8 atkBattler, u8 defBattler, u8 tableId)
{
u8 taskId;
- gBattleAnimAttacker = atkBank;
- gBattleAnimTarget = defBank;
+ gBattleAnimAttacker = atkBattler;
+ gBattleAnimTarget = defBattler;
LaunchBattleAnimation(gBattleAnims_Special, tableId, FALSE);
taskId = CreateTask(Task_ClearBitWhenSpecialAnimDone, 10);
- gTasks[taskId].tBattlerId = activeBank;
+ gTasks[taskId].tBattlerId = activeBattler;
gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].tBattlerId].specialAnimActive = 1;
}
@@ -499,7 +499,7 @@ static void Task_ClearBitWhenSpecialAnimDone(u8 taskId)
#undef tBattlerId
-// great function to include newly added moves that don't have animation yet
+// Great function to include newly added moves that don't have animation yet.
bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn)
{
return FALSE;
@@ -679,29 +679,30 @@ void FreeTrainerFrontPicPalette(u16 frontPicId)
FreeSpritePaletteByTag(gTrainerFrontPicPaletteTable[frontPicId].tag);
}
-void sub_805DFFC(void)
+// Unused.
+void BattleLoadAllHealthBoxesGfxAtOnce(void)
{
- u8 numberOfBanks = 0;
+ u8 numberOfBattlers = 0;
u8 i;
- LoadSpritePalette(&gUnknown_0832C128[0]);
- LoadSpritePalette(&gUnknown_0832C128[1]);
+ LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]);
+ LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[1]);
if (!IsDoubleBattle())
{
- LoadCompressedObjectPic(&gUnknown_0832C0D0);
- LoadCompressedObjectPic(&gUnknown_0832C0D8);
- numberOfBanks = 2;
+ LoadCompressedObjectPic(&sSpriteSheet_SinglesPlayerHealthbox);
+ LoadCompressedObjectPic(&sSpriteSheet_SinglesOpponentHealthbox);
+ numberOfBattlers = 2;
}
else
{
- LoadCompressedObjectPic(&gUnknown_0832C0E0[0]);
- LoadCompressedObjectPic(&gUnknown_0832C0E0[1]);
- LoadCompressedObjectPic(&gUnknown_0832C0F0[0]);
- LoadCompressedObjectPic(&gUnknown_0832C0F0[1]);
- numberOfBanks = 4;
+ LoadCompressedObjectPic(&sSpriteSheets_DoublesPlayerHealthbox[0]);
+ LoadCompressedObjectPic(&sSpriteSheets_DoublesPlayerHealthbox[1]);
+ LoadCompressedObjectPic(&sSpriteSheets_DoublesOpponentHealthbox[0]);
+ LoadCompressedObjectPic(&sSpriteSheets_DoublesOpponentHealthbox[1]);
+ numberOfBattlers = 4;
}
- for (i = 0; i < numberOfBanks; i++)
- LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[i]]);
+ for (i = 0; i < numberOfBattlers; i++)
+ LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[i]]);
}
bool8 BattleLoadAllHealthBoxesGfx(u8 state)
@@ -712,45 +713,45 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state)
{
if (state == 1)
{
- LoadSpritePalette(&gUnknown_0832C128[0]);
- LoadSpritePalette(&gUnknown_0832C128[1]);
+ LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]);
+ LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[1]);
}
else if (!IsDoubleBattle())
{
if (state == 2)
{
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
- LoadCompressedObjectPic(&gUnknown_0832C100);
+ LoadCompressedObjectPic(&sSpriteSheet_SafariHealthbox);
else
- LoadCompressedObjectPic(&gUnknown_0832C0D0);
+ LoadCompressedObjectPic(&sSpriteSheet_SinglesPlayerHealthbox);
}
else if (state == 3)
- LoadCompressedObjectPic(&gUnknown_0832C0D8);
+ LoadCompressedObjectPic(&sSpriteSheet_SinglesOpponentHealthbox);
else if (state == 4)
- LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[0]]);
+ LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[0]]);
else if (state == 5)
- LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[1]]);
+ LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[1]]);
else
retVal = TRUE;
}
else
{
if (state == 2)
- LoadCompressedObjectPic(&gUnknown_0832C0E0[0]);
+ LoadCompressedObjectPic(&sSpriteSheets_DoublesPlayerHealthbox[0]);
else if (state == 3)
- LoadCompressedObjectPic(&gUnknown_0832C0E0[1]);
+ LoadCompressedObjectPic(&sSpriteSheets_DoublesPlayerHealthbox[1]);
else if (state == 4)
- LoadCompressedObjectPic(&gUnknown_0832C0F0[0]);
+ LoadCompressedObjectPic(&sSpriteSheets_DoublesOpponentHealthbox[0]);
else if (state == 5)
- LoadCompressedObjectPic(&gUnknown_0832C0F0[1]);
+ LoadCompressedObjectPic(&sSpriteSheets_DoublesOpponentHealthbox[1]);
else if (state == 6)
- LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[0]]);
+ LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[0]]);
else if (state == 7)
- LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[1]]);
+ LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[1]]);
else if (state == 8)
- LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[2]]);
+ LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[2]]);
else if (state == 9)
- LoadCompressedObjectPic(&gUnknown_0832C108[gBattlerPositions[3]]);
+ LoadCompressedObjectPic(&sSpriteSheets_HealthBar[gBattlerPositions[3]]);
else
retVal = TRUE;
}
@@ -771,7 +772,7 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId)
switch (*state1)
{
case 0:
- ClearSpritesBankHealthboxAnimData();
+ ClearSpritesBattlerHealthboxAnimData();
(*state1)++;
break;
case 1:
@@ -849,7 +850,7 @@ void ClearSpritesHealthboxAnimData(void)
memset(gBattleSpritesDataPtr->animationData, 0, sizeof(struct BattleAnimationInfo));
}
-static void ClearSpritesBankHealthboxAnimData(void)
+static void ClearSpritesBattlerHealthboxAnimData(void)
{
ClearSpritesHealthboxAnimData();
memset(gBattleSpritesDataPtr->battlerData, 0, sizeof(struct BattleSpriteInfo) * MAX_BATTLERS_COUNT);
@@ -868,7 +869,7 @@ void CopyBattleSpriteInvisibility(u8 battlerId)
gBattleSpritesDataPtr->battlerData[battlerId].invisible = gSprites[gBattlerSpriteIds[battlerId]].invisible;
}
-void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
+void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform)
{
u16 paletteOffset;
u32 personalityValue;
@@ -878,16 +879,16 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
if (notTransform)
{
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bankAtk]], gBattleSpritesDataPtr->animationData->animArg);
- paletteOffset = 0x100 + bankAtk * 16;
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleSpritesDataPtr->animationData->animArg);
+ paletteOffset = 0x100 + battlerAtk * 16;
LoadPalette(gBattleStruct->castformPalette[gBattleSpritesDataPtr->animationData->animArg], paletteOffset, 32);
- gBattleMonForms[bankAtk] = gBattleSpritesDataPtr->animationData->animArg;
- if (gBattleSpritesDataPtr->battlerData[bankAtk].transformSpecies != SPECIES_NONE)
+ gBattleMonForms[battlerAtk] = gBattleSpritesDataPtr->animationData->animArg;
+ if (gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies != SPECIES_NONE)
{
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
}
- gSprites[gBattlerSpriteIds[bankAtk]].pos1.y = GetBattlerSpriteDefault_Y(bankAtk);
+ gSprites[gBattlerSpriteIds[battlerAtk]].pos1.y = GetBattlerSpriteDefault_Y(battlerAtk);
}
else
{
@@ -909,48 +910,48 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
}
else
{
- position = GetBattlerPosition(bankAtk);
+ position = GetBattlerPosition(battlerAtk);
- if (GetBattlerSide(bankDef) == B_SIDE_OPPONENT)
- targetSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bankDef]], MON_DATA_SPECIES);
+ if (GetBattlerSide(battlerDef) == B_SIDE_OPPONENT)
+ targetSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES);
else
- targetSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bankDef]], MON_DATA_SPECIES);
+ targetSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerDef]], MON_DATA_SPECIES);
- if (GetBattlerSide(bankAtk) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerAtk) == B_SIDE_PLAYER)
{
- personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bankAtk]], MON_DATA_PERSONALITY);
- otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bankAtk]], MON_DATA_OT_ID);
+ personalityValue = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID);
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[targetSpecies],
gMonSpritesGfxPtr->sprites[position],
targetSpecies,
- gTransformedPersonalities[bankAtk]);
+ gTransformedPersonalities[battlerAtk]);
}
else
{
- personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bankAtk]], MON_DATA_PERSONALITY);
- otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bankAtk]], MON_DATA_OT_ID);
+ personalityValue = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID);
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[targetSpecies],
gMonSpritesGfxPtr->sprites[position],
targetSpecies,
- gTransformedPersonalities[bankAtk]);
+ gTransformedPersonalities[battlerAtk]);
}
}
src = gMonSpritesGfxPtr->sprites[position];
- dst = (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[bankAtk]].oam.tileNum * 32);
+ dst = (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32);
DmaCopy32(3, src, dst, 0x800);
- paletteOffset = 0x100 + bankAtk * 16;
+ paletteOffset = 0x100 + battlerAtk * 16;
lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue);
LZDecompressWram(lzPaletteData, gDecompressionBuffer);
LoadPalette(gDecompressionBuffer, paletteOffset, 32);
if (targetSpecies == SPECIES_CASTFORM)
{
- gSprites[gBattlerSpriteIds[bankAtk]].anims = gMonAnimationsSpriteAnimsPtrTable[targetSpecies];
+ gSprites[gBattlerSpriteIds[battlerAtk]].anims = gMonAnimationsSpriteAnimsPtrTable[targetSpecies];
LZDecompressWram(lzPaletteData, gBattleStruct->castformPalette[0]);
- LoadPalette(gBattleStruct->castformPalette[0] + gBattleMonForms[bankDef] * 16, paletteOffset, 32);
+ LoadPalette(gBattleStruct->castformPalette[0] + gBattleMonForms[battlerDef] * 16, paletteOffset, 32);
}
BlendPalette(paletteOffset, 16, 6, RGB_WHITE);
@@ -958,12 +959,12 @@ void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform)
if (!IsContest())
{
- gBattleSpritesDataPtr->battlerData[bankAtk].transformSpecies = targetSpecies;
- gBattleMonForms[bankAtk] = gBattleMonForms[bankDef];
+ gBattleSpritesDataPtr->battlerData[battlerAtk].transformSpecies = targetSpecies;
+ gBattleMonForms[battlerAtk] = gBattleMonForms[battlerDef];
}
- gSprites[gBattlerSpriteIds[bankAtk]].pos1.y = GetBattlerSpriteDefault_Y(bankAtk);
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bankAtk]], gBattleMonForms[bankAtk]);
+ gSprites[gBattlerSpriteIds[battlerAtk]].pos1.y = GetBattlerSpriteDefault_Y(battlerAtk);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleMonForms[battlerAtk]);
}
}
@@ -1068,11 +1069,11 @@ void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId)
void BattleStopLowHpSound(void)
{
- u8 playerBank = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ u8 playerBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
- gBattleSpritesDataPtr->battlerData[playerBank].lowHpSong = 0;
+ gBattleSpritesDataPtr->battlerData[playerBattler].lowHpSong = 0;
if (IsDoubleBattle())
- gBattleSpritesDataPtr->battlerData[playerBank ^ BIT_FLANK].lowHpSong = 0;
+ gBattleSpritesDataPtr->battlerData[playerBattler ^ BIT_FLANK].lowHpSong = 0;
m4aSongNumStop(SE_HINSI);
}
@@ -1085,19 +1086,19 @@ u8 GetMonHPBarLevel(struct Pokemon *mon)
return GetHPBarLevel(hp, maxHP);
}
-void sub_805EAE8(void)
+void HandleBattleLowHpMusicChange(void)
{
if (gMain.inBattle)
{
- u8 playerBank1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
- u8 playerBank2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
- u8 bank1PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBank1]);
- u8 bank2PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBank2]);
-
- if (GetMonData(&gPlayerParty[bank1PartyId], MON_DATA_HP) != 0)
- HandleLowHpMusicChange(&gPlayerParty[bank1PartyId], playerBank1);
- if (IsDoubleBattle() && GetMonData(&gPlayerParty[bank2PartyId], MON_DATA_HP) != 0)
- HandleLowHpMusicChange(&gPlayerParty[bank2PartyId], playerBank2);
+ u8 playerBattler1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ u8 playerBattler2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ u8 battler1PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBattler1]);
+ u8 battler2PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBattler2]);
+
+ if (GetMonData(&gPlayerParty[battler1PartyId], MON_DATA_HP) != 0)
+ HandleLowHpMusicChange(&gPlayerParty[battler1PartyId], playerBattler1);
+ if (IsDoubleBattle() && GetMonData(&gPlayerParty[battler2PartyId], MON_DATA_HP) != 0)
+ HandleLowHpMusicChange(&gPlayerParty[battler2PartyId], playerBattler2);
}
}
@@ -1147,14 +1148,14 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
{
bool8 invisible = FALSE;
u8 battlerId = shadowSprite->tBattlerId;
- struct Sprite *bankSprite = &gSprites[gBattlerSpriteIds[battlerId]];
+ struct Sprite *battlerSprite = &gSprites[gBattlerSpriteIds[battlerId]];
- if (!bankSprite->inUse || !IsBattlerSpritePresent(battlerId))
+ if (!battlerSprite->inUse || !IsBattlerSpritePresent(battlerId))
{
shadowSprite->callback = SpriteCB_SetInvisible;
return;
}
- if (gAnimScriptActive || bankSprite->invisible)
+ if (gAnimScriptActive || battlerSprite->invisible)
invisible = TRUE;
else if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE
&& gEnemyMonElevation[gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies] == 0)
@@ -1163,8 +1164,8 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite)
if (gBattleSpritesDataPtr->battlerData[battlerId].behindSubstitute)
invisible = TRUE;
- shadowSprite->pos1.x = bankSprite->pos1.x;
- shadowSprite->pos2.x = bankSprite->pos2.x;
+ shadowSprite->pos1.x = battlerSprite->pos1.x;
+ shadowSprite->pos2.x = battlerSprite->pos2.x;
shadowSprite->invisible = invisible;
}
@@ -1177,7 +1178,7 @@ void SpriteCB_SetInvisible(struct Sprite *sprite)
void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species)
{
- // The player's shadow is never seen
+ // The player's shadow is never seen.
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
return;
@@ -1270,7 +1271,7 @@ void FreeMonSpritesGfx(void)
FREE_AND_SET_NULL(gMonSpritesGfxPtr);
}
-bool32 ShouldPlayNormalPokeCry(struct Pokemon *mon)
+bool32 ShouldPlayNormalMonCry(struct Pokemon *mon)
{
s16 hp, maxHP;
s32 barLevel;
diff --git a/src/battle_interface.c b/src/battle_interface.c
index 9ef45020d..278edb6f4 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -26,7 +26,7 @@
struct TestingBar
{
s32 maxValue;
- s32 currValue;
+ s32 oldValue;
s32 receivedValue;
u32 unkC_0:5;
u32 unk10;
@@ -37,7 +37,7 @@ enum
HEALTHBOX_GFX_0,
HEALTHBOX_GFX_1,
HEALTHBOX_GFX_2,
- HEALTHBOX_GFX_3,
+ HEALTHBOX_GFX_HP_BAR_GREEN,
HEALTHBOX_GFX_4,
HEALTHBOX_GFX_5,
HEALTHBOX_GFX_6,
@@ -55,19 +55,19 @@ enum
HEALTHBOX_GFX_18,
HEALTHBOX_GFX_19,
HEALTHBOX_GFX_20,
- HEALTHBOX_GFX_STATUS_PSN_BANK0,
+ HEALTHBOX_GFX_STATUS_PSN_BATTLER0,
HEALTHBOX_GFX_22,
HEALTHBOX_GFX_23,
- HEALTHBOX_GFX_STATUS_PRZ_BANK0,
+ HEALTHBOX_GFX_STATUS_PRZ_BATTLER0,
HEALTHBOX_GFX_25,
HEALTHBOX_GFX_26,
- HEALTHBOX_GFX_STATUS_SLP_BANK0,
+ HEALTHBOX_GFX_STATUS_SLP_BATTLER0,
HEALTHBOX_GFX_28,
HEALTHBOX_GFX_29,
- HEALTHBOX_GFX_STATUS_FRZ_BANK0,
+ HEALTHBOX_GFX_STATUS_FRZ_BATTLER0,
HEALTHBOX_GFX_31,
HEALTHBOX_GFX_32,
- HEALTHBOX_GFX_STATUS_BRN_BANK0,
+ HEALTHBOX_GFX_STATUS_BRN_BATTLER0,
HEALTHBOX_GFX_34,
HEALTHBOX_GFX_35,
HEALTHBOX_GFX_36,
@@ -81,7 +81,7 @@ enum
HEALTHBOX_GFX_44,
HEALTHBOX_GFX_45,
HEALTHBOX_GFX_46,
- HEALTHBOX_GFX_47,
+ HEALTHBOX_GFX_HP_BAR_YELLOW,
HEALTHBOX_GFX_48,
HEALTHBOX_GFX_49,
HEALTHBOX_GFX_50,
@@ -90,7 +90,7 @@ enum
HEALTHBOX_GFX_53,
HEALTHBOX_GFX_54,
HEALTHBOX_GFX_55,
- HEALTHBOX_GFX_56,
+ HEALTHBOX_GFX_HP_BAR_RED,
HEALTHBOX_GFX_57,
HEALTHBOX_GFX_58,
HEALTHBOX_GFX_59,
@@ -105,56 +105,56 @@ enum
HEALTHBOX_GFX_68,
HEALTHBOX_GFX_69,
HEALTHBOX_GFX_70,
- HEALTHBOX_GFX_STATUS_PSN_BANK1,
+ HEALTHBOX_GFX_STATUS_PSN_BATTLER1,
HEALTHBOX_GFX_72,
HEALTHBOX_GFX_73,
- HEALTHBOX_GFX_STATUS_PRZ_BANK1,
+ HEALTHBOX_GFX_STATUS_PRZ_BATTLER1,
HEALTHBOX_GFX_75,
HEALTHBOX_GFX_76,
- HEALTHBOX_GFX_STATUS_SLP_BANK1,
+ HEALTHBOX_GFX_STATUS_SLP_BATTLER1,
HEALTHBOX_GFX_78,
HEALTHBOX_GFX_79,
- HEALTHBOX_GFX_STATUS_FRZ_BANK1,
+ HEALTHBOX_GFX_STATUS_FRZ_BATTLER1,
HEALTHBOX_GFX_81,
HEALTHBOX_GFX_82,
- HEALTHBOX_GFX_STATUS_BRN_BANK1,
+ HEALTHBOX_GFX_STATUS_BRN_BATTLER1,
HEALTHBOX_GFX_84,
HEALTHBOX_GFX_85,
- HEALTHBOX_GFX_STATUS_PSN_BANK2,
+ HEALTHBOX_GFX_STATUS_PSN_BATTLER2,
HEALTHBOX_GFX_87,
HEALTHBOX_GFX_88,
- HEALTHBOX_GFX_STATUS_PRZ_BANK2,
+ HEALTHBOX_GFX_STATUS_PRZ_BATTLER2,
HEALTHBOX_GFX_90,
HEALTHBOX_GFX_91,
- HEALTHBOX_GFX_STATUS_SLP_BANK2,
+ HEALTHBOX_GFX_STATUS_SLP_BATTLER2,
HEALTHBOX_GFX_93,
HEALTHBOX_GFX_94,
- HEALTHBOX_GFX_STATUS_FRZ_BANK2,
+ HEALTHBOX_GFX_STATUS_FRZ_BATTLER2,
HEALTHBOX_GFX_96,
HEALTHBOX_GFX_97,
- HEALTHBOX_GFX_STATUS_BRN_BANK2,
+ HEALTHBOX_GFX_STATUS_BRN_BATTLER2,
HEALTHBOX_GFX_99,
HEALTHBOX_GFX_100,
- HEALTHBOX_GFX_STATUS_PSN_BANK3,
+ HEALTHBOX_GFX_STATUS_PSN_BATTLER3,
HEALTHBOX_GFX_102,
HEALTHBOX_GFX_103,
- HEALTHBOX_GFX_STATUS_PRZ_BANK3,
+ HEALTHBOX_GFX_STATUS_PRZ_BATTLER3,
HEALTHBOX_GFX_105,
HEALTHBOX_GFX_106,
- HEALTHBOX_GFX_STATUS_SLP_BANK3,
+ HEALTHBOX_GFX_STATUS_SLP_BATTLER3,
HEALTHBOX_GFX_108,
HEALTHBOX_GFX_109,
- HEALTHBOX_GFX_STATUS_FRZ_BANK3,
+ HEALTHBOX_GFX_STATUS_FRZ_BATTLER3,
HEALTHBOX_GFX_111,
HEALTHBOX_GFX_112,
- HEALTHBOX_GFX_STATUS_BRN_BANK3,
+ HEALTHBOX_GFX_STATUS_BRN_BATTLER3,
HEALTHBOX_GFX_114,
HEALTHBOX_GFX_115,
HEALTHBOX_GFX_116,
HEALTHBOX_GFX_117,
};
-extern const u8 * const gNatureNamePointers[];
+extern const u8 *const gNatureNamePointers[];
// strings
extern const u8 gText_Slash[];
@@ -179,28 +179,28 @@ static void RemoveWindowOnHealthbox(u32 windowId);
static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent);
static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId);
-static void sub_8075198(void *dest, u8 *windowTileData, s32 arg2);
-static void sub_80751E4(void *dest, u8 *windowTileData, u32 arg2);
-static void sub_8075170(void *dest, u8 *windowTileData, u32 arg2);
-static void sub_807513C(void *dest, u32 arg1, u32 arg2);
+static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 arg2);
+static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 arg2);
+static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 arg2);
+static void FillHealthboxObject(void *dest, u32 arg1, u32 arg2);
static void sub_8073E08(u8 taskId);
static void sub_8073F98(u8 taskId);
static void sub_8073E64(u8 taskId);
-static void sub_8072924(struct Sprite *sprite);
-static void sub_80728B4(struct Sprite *sprite);
+static void SpriteCB_HealthBoxOther(struct Sprite *sprite);
+static void SpriteCB_HealthBar(struct Sprite *sprite);
static void sub_8074158(struct Sprite *sprite);
static void sub_8074090(struct Sprite *sprite);
static void SpriteCB_StatusSummaryBar(struct Sprite *sprite);
static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite);
static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite);
-static u8 GetStatusIconForBankId(u8 statusElementId, u8 battlerId);
-static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5);
+static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId);
+static s32 CalcNewBarValue(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5);
static u8 GetScaledExpFraction(s32 currValue, s32 receivedValue, s32 maxValue, u8 scale);
-static void sub_8074B9C(u8 battlerId, u8 whichBar);
-static u8 sub_8074E8C(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 *arg4, u8 arg5);
+static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar);
+static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale);
static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2);
// const rom data
@@ -276,7 +276,7 @@ static const struct SpriteTemplate sHealthboxSafariSpriteTemplate =
.callback = SpriteCallbackDummy
};
-static const struct OamData sUnknown_0832C1B8 =
+static const struct OamData sOamData_Healthbar =
{
.y = 0,
.affineMode = 0,
@@ -293,43 +293,43 @@ static const struct OamData sUnknown_0832C1B8 =
.affineParam = 0,
};
-static const struct SpriteTemplate sUnknown_0832C1C0[4] =
+static const struct SpriteTemplate sHealthbarSpriteTemplates[MAX_BATTLERS_COUNT] =
{
{
- .tileTag = 0xd704,
- .paletteTag = 0xd704,
- .oam = &sUnknown_0832C1B8,
+ .tileTag = TAG_HEALTHBAR_PLAYER1_TILE,
+ .paletteTag = TAG_HEALTHBAR_PAL,
+ .oam = &sOamData_Healthbar,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80728B4
+ .callback = SpriteCB_HealthBar
},
{
- .tileTag = 0xd705,
- .paletteTag = 0xd704,
- .oam = &sUnknown_0832C1B8,
+ .tileTag = TAG_HEALTHBAR_OPPONENT1_TILE,
+ .paletteTag = TAG_HEALTHBAR_PAL,
+ .oam = &sOamData_Healthbar,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80728B4
+ .callback = SpriteCB_HealthBar
},
{
- .tileTag = 0xd706,
- .paletteTag = 0xd704,
- .oam = &sUnknown_0832C1B8,
+ .tileTag = TAG_HEALTHBAR_PLAYER2_TILE,
+ .paletteTag = TAG_HEALTHBAR_PAL,
+ .oam = &sOamData_Healthbar,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80728B4
+ .callback = SpriteCB_HealthBar
},
{
- .tileTag = 0xd707,
- .paletteTag = 0xd704,
- .oam = &sUnknown_0832C1B8,
+ .tileTag = TAG_HEALTHBAR_OPPONENT2_TILE,
+ .paletteTag = TAG_HEALTHBAR_PAL,
+ .oam = &sOamData_Healthbar,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80728B4
+ .callback = SpriteCB_HealthBar
}
};
@@ -883,112 +883,126 @@ void sub_80724A8(s16 arg0, s16 arg1, u16 *arg2)
sub_8072308(arg0, arg2 + 5, 1);
}
-// because the healthbox is too large to fit into one sprite, it is divided into two sprites
-// healthboxSpriteId_1 or healthboxSpriteId refers to the 'main' healthbox
-// healthboxSpriteId_2 refers to the other part
-// there's also one other sprite that appears to be a black square? dont fully understand its role
+// Because the healthbox is too large to fit into one sprite, it is divided into two sprites.
+// healthboxLeft or healthboxMain is the left part that is used as the 'main' sprite.
+// healthboxRight or healthboxOther is the right part of the healthbox.
+// There's also the third sprite under name of healthbarSprite that refers to the healthbar visible on the healtbox.
-u8 CreateBattlerHealthboxSprites(u8 battler)
+// data fields for healthboxMain
+// oam.affineParam holds healthboxRight spriteId
+#define hMain_HealthBarSpriteId data[5]
+#define hMain_Battler data[6]
+#define hMain_Data7 data[7]
+
+// data fields for healthboxRight
+#define hOther_HealthBoxSpriteId data[5]
+
+// data fields for healthbar
+#define hBar_HealthBoxSpriteId data[5]
+#define hBar_Data6 data[6]
+
+u8 CreateBattlerHealthboxSprites(u8 battlerId)
{
s16 data6 = 0;
- u8 healthboxSpriteId_1, healthboxSpriteId_2;
- u8 unkSpriteId;
- struct Sprite *unkSpritePtr;
+ u8 healthboxLeftSpriteId, healthboxRightSpriteId;
+ u8 healthbarSpriteId;
+ struct Sprite *healthBarSpritePtr;
if (!IsDoubleBattle())
{
- if (GetBattlerSide(battler) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
{
- healthboxSpriteId_1 = CreateSprite(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1);
- healthboxSpriteId_2 = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1);
+ healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1);
+ healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1);
- gSprites[healthboxSpriteId_1].oam.shape = 0;
+ gSprites[healthboxLeftSpriteId].oam.shape = 0;
- gSprites[healthboxSpriteId_2].oam.shape = 0;
- gSprites[healthboxSpriteId_2].oam.tileNum += 64;
+ gSprites[healthboxRightSpriteId].oam.shape = 0;
+ gSprites[healthboxRightSpriteId].oam.tileNum += 64;
}
else
{
- healthboxSpriteId_1 = CreateSprite(&sHealthboxOpponentSpriteTemplates[0], 240, 160, 1);
- healthboxSpriteId_2 = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[0], 240, 160, 1);
+ healthboxLeftSpriteId = CreateSprite(&sHealthboxOpponentSpriteTemplates[0], 240, 160, 1);
+ healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[0], 240, 160, 1);
- gSprites[healthboxSpriteId_2].oam.tileNum += 32;
+ gSprites[healthboxRightSpriteId].oam.tileNum += 32;
data6 = 2;
}
- gSprites[healthboxSpriteId_1].oam.affineParam = healthboxSpriteId_2;
- gSprites[healthboxSpriteId_2].data[5] = healthboxSpriteId_1;
- gSprites[healthboxSpriteId_2].callback = sub_8072924;
+ gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId;
+
+ gSprites[healthboxRightSpriteId].hOther_HealthBoxSpriteId = healthboxLeftSpriteId;
+ gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther;
}
else
{
- if (GetBattlerSide(battler) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
{
- healthboxSpriteId_1 = CreateSprite(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(battler) / 2], 240, 160, 1);
- healthboxSpriteId_2 = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(battler) / 2], 240, 160, 1);
+ healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(battlerId) / 2], 240, 160, 1);
+ healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[GetBattlerPosition(battlerId) / 2], 240, 160, 1);
- gSprites[healthboxSpriteId_1].oam.affineParam = healthboxSpriteId_2;
+ gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId;
- gSprites[healthboxSpriteId_2].data[5] = healthboxSpriteId_1;
- gSprites[healthboxSpriteId_2].oam.tileNum += 32;
- gSprites[healthboxSpriteId_2].callback = sub_8072924;
+ gSprites[healthboxRightSpriteId].hOther_HealthBoxSpriteId = healthboxLeftSpriteId;
+ gSprites[healthboxRightSpriteId].oam.tileNum += 32;
+ gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther;
data6 = 1;
}
else
{
- healthboxSpriteId_1 = CreateSprite(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(battler) / 2], 240, 160, 1);
- healthboxSpriteId_2 = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(battler) / 2], 240, 160, 1);
+ healthboxLeftSpriteId = CreateSprite(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(battlerId) / 2], 240, 160, 1);
+ healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxOpponentSpriteTemplates[GetBattlerPosition(battlerId) / 2], 240, 160, 1);
- gSprites[healthboxSpriteId_1].oam.affineParam = healthboxSpriteId_2;
+ gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId;
- gSprites[healthboxSpriteId_2].data[5] = healthboxSpriteId_1;
- gSprites[healthboxSpriteId_2].oam.tileNum += 32;
- gSprites[healthboxSpriteId_2].callback = sub_8072924;
+ gSprites[healthboxRightSpriteId].hOther_HealthBoxSpriteId = healthboxLeftSpriteId;
+ gSprites[healthboxRightSpriteId].oam.tileNum += 32;
+ gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther;
data6 = 2;
}
}
- unkSpriteId = CreateSpriteAtEnd(&sUnknown_0832C1C0[gBattlerPositions[battler]], 140, 60, 0);
- unkSpritePtr = &gSprites[unkSpriteId];
- SetSubspriteTables(unkSpritePtr, &sUnknown_0832C28C[GetBattlerSide(battler)]);
- unkSpritePtr->subspriteMode = 2;
- unkSpritePtr->oam.priority = 1;
+ healthbarSpriteId = CreateSpriteAtEnd(&sHealthbarSpriteTemplates[gBattlerPositions[battlerId]], 140, 60, 0);
+ healthBarSpritePtr = &gSprites[healthbarSpriteId];
+ SetSubspriteTables(healthBarSpritePtr, &sUnknown_0832C28C[GetBattlerSide(battlerId)]);
+ healthBarSpritePtr->subspriteMode = 2;
+ healthBarSpritePtr->oam.priority = 1;
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void*)(OBJ_VRAM0 + unkSpritePtr->oam.tileNum * 32), 64);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void*)(OBJ_VRAM0 + healthBarSpritePtr->oam.tileNum * 32), 64);
- gSprites[healthboxSpriteId_1].data[5] = unkSpriteId;
- gSprites[healthboxSpriteId_1].data[6] = battler;
- gSprites[healthboxSpriteId_1].invisible = 1;
+ gSprites[healthboxLeftSpriteId].hMain_HealthBarSpriteId = healthbarSpriteId;
+ gSprites[healthboxLeftSpriteId].hMain_Battler = battlerId;
+ gSprites[healthboxLeftSpriteId].invisible = 1;
- gSprites[healthboxSpriteId_2].invisible = 1;
+ gSprites[healthboxRightSpriteId].invisible = 1;
- unkSpritePtr->data[5] = healthboxSpriteId_1;
- unkSpritePtr->data[6] = data6;
- unkSpritePtr->invisible = 1;
+ healthBarSpritePtr->hBar_HealthBoxSpriteId = healthboxLeftSpriteId;
+ healthBarSpritePtr->hBar_Data6 = data6;
+ healthBarSpritePtr->invisible = 1;
- return healthboxSpriteId_1;
+ return healthboxLeftSpriteId;
}
u8 CreateSafariPlayerHealthboxSprites(void)
{
- u8 healthboxSpriteId_1, healthboxSpriteId_2;
+ u8 healthboxLeftSpriteId, healthboxRightSpriteId;
- healthboxSpriteId_1 = CreateSprite(&sHealthboxSafariSpriteTemplate, 240, 160, 1);
- healthboxSpriteId_2 = CreateSpriteAtEnd(&sHealthboxSafariSpriteTemplate, 240, 160, 1);
+ healthboxLeftSpriteId = CreateSprite(&sHealthboxSafariSpriteTemplate, 240, 160, 1);
+ healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxSafariSpriteTemplate, 240, 160, 1);
- gSprites[healthboxSpriteId_1].oam.shape = 0;
- gSprites[healthboxSpriteId_2].oam.shape = 0;
+ gSprites[healthboxLeftSpriteId].oam.shape = 0;
+ gSprites[healthboxRightSpriteId].oam.shape = 0;
- gSprites[healthboxSpriteId_2].oam.tileNum += 64;
+ gSprites[healthboxRightSpriteId].oam.tileNum += 64;
- gSprites[healthboxSpriteId_1].oam.affineParam = healthboxSpriteId_2;
- gSprites[healthboxSpriteId_2].data[5] = healthboxSpriteId_1;
+ gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId;
+ gSprites[healthboxRightSpriteId].hOther_HealthBoxSpriteId = healthboxLeftSpriteId;
- gSprites[healthboxSpriteId_2].callback = sub_8072924;
+ gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther;
- return healthboxSpriteId_1;
+ return healthboxLeftSpriteId;
}
static const u8 *GetHealthboxElementGfxPtr(u8 elementId)
@@ -996,62 +1010,63 @@ static const u8 *GetHealthboxElementGfxPtr(u8 elementId)
return gHealthboxElementsGfxTable[elementId];
}
-static void sub_80728B4(struct Sprite *sprite)
+// Syncs the position of healthbar accordingly with the healthbox.
+static void SpriteCB_HealthBar(struct Sprite *sprite)
{
- u8 var = sprite->data[5];
+ u8 healthboxSpriteId = sprite->hBar_HealthBoxSpriteId;
- switch (sprite->data[6])
+ switch (sprite->hBar_Data6)
{
case 0:
- sprite->pos1.x = gSprites[var].pos1.x + 16;
- sprite->pos1.y = gSprites[var].pos1.y;
+ sprite->pos1.x = gSprites[healthboxSpriteId].pos1.x + 16;
+ sprite->pos1.y = gSprites[healthboxSpriteId].pos1.y;
break;
case 1:
- sprite->pos1.x = gSprites[var].pos1.x + 16;
- sprite->pos1.y = gSprites[var].pos1.y;
+ sprite->pos1.x = gSprites[healthboxSpriteId].pos1.x + 16;
+ sprite->pos1.y = gSprites[healthboxSpriteId].pos1.y;
break;
case 2:
default:
- sprite->pos1.x = gSprites[var].pos1.x + 8;
- sprite->pos1.y = gSprites[var].pos1.y;
+ sprite->pos1.x = gSprites[healthboxSpriteId].pos1.x + 8;
+ sprite->pos1.y = gSprites[healthboxSpriteId].pos1.y;
break;
}
- sprite->pos2.x = gSprites[var].pos2.x;
- sprite->pos2.y = gSprites[var].pos2.y;
+ sprite->pos2.x = gSprites[healthboxSpriteId].pos2.x;
+ sprite->pos2.y = gSprites[healthboxSpriteId].pos2.y;
}
-static void sub_8072924(struct Sprite *sprite)
+static void SpriteCB_HealthBoxOther(struct Sprite *sprite)
{
- u8 otherSpriteId = sprite->data[5];
+ u8 healthboxMainSpriteId = sprite->hOther_HealthBoxSpriteId;
- sprite->pos1.x = gSprites[otherSpriteId].pos1.x + 64;
- sprite->pos1.y = gSprites[otherSpriteId].pos1.y;
+ sprite->pos1.x = gSprites[healthboxMainSpriteId].pos1.x + 64;
+ sprite->pos1.y = gSprites[healthboxMainSpriteId].pos1.y;
- sprite->pos2.x = gSprites[otherSpriteId].pos2.x;
- sprite->pos2.y = gSprites[otherSpriteId].pos2.y;
+ sprite->pos2.x = gSprites[healthboxMainSpriteId].pos2.x;
+ sprite->pos2.y = gSprites[healthboxMainSpriteId].pos2.y;
}
-void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue)
+void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldVal, s32 receivedValue)
{
gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId = healthboxSpriteId;
gBattleSpritesDataPtr->battleBars[battlerId].maxValue = maxVal;
- gBattleSpritesDataPtr->battleBars[battlerId].currentValue = currVal;
+ gBattleSpritesDataPtr->battleBars[battlerId].oldValue = oldVal;
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue = receivedValue;
- gBattleSpritesDataPtr->battleBars[battlerId].field_10 = -32768;
+ gBattleSpritesDataPtr->battleBars[battlerId].currValue = -32768;
}
void SetHealthboxSpriteInvisible(u8 healthboxSpriteId)
{
gSprites[healthboxSpriteId].invisible = 1;
- gSprites[gSprites[healthboxSpriteId].data[5]].invisible = 1;
+ gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = 1;
gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = 1;
}
void SetHealthboxSpriteVisible(u8 healthboxSpriteId)
{
gSprites[healthboxSpriteId].invisible = 0;
- gSprites[gSprites[healthboxSpriteId].data[5]].invisible = 0;
+ gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = 0;
gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = 0;
}
@@ -1064,11 +1079,11 @@ static void UpdateSpritePos(u8 spriteId, s16 x, s16 y)
void DestoryHealthboxSprite(u8 healthboxSpriteId)
{
DestroySprite(&gSprites[gSprites[healthboxSpriteId].oam.affineParam]);
- DestroySprite(&gSprites[gSprites[healthboxSpriteId].data[5]]);
+ DestroySprite(&gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId]);
DestroySprite(&gSprites[healthboxSpriteId]);
}
-void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBankOnly)
+void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBattlerOnly)
{
}
@@ -1079,13 +1094,13 @@ void UpdateOamPriorityInAllHealthboxes(u8 priority)
for (i = 0; i < gBattlersCount; i++)
{
- u8 healthboxSpriteId_1 = gHealthboxSpriteIds[i];
- u8 healthboxSpriteId_2 = gSprites[gHealthboxSpriteIds[i]].oam.affineParam;
- u8 healthboxSpriteId_3 = gSprites[gHealthboxSpriteIds[i]].data[5];
+ u8 healthboxLeftSpriteId = gHealthboxSpriteIds[i];
+ u8 healthboxRightSpriteId = gSprites[gHealthboxSpriteIds[i]].oam.affineParam;
+ u8 healthbarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId;
- gSprites[healthboxSpriteId_1].oam.priority = priority;
- gSprites[healthboxSpriteId_2].oam.priority = priority;
- gSprites[healthboxSpriteId_3].oam.priority = priority;
+ gSprites[healthboxLeftSpriteId].oam.priority = priority;
+ gSprites[healthboxRightSpriteId].oam.priority = priority;
+ gSprites[healthbarSpriteId].oam.priority = priority;
}
}
@@ -1146,7 +1161,7 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl)
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, xPos, 3, 2, &windowId);
spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * 32;
- if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER)
+ if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER)
{
objVram = (void*)(OBJ_VRAM0);
if (!IsDoubleBattle())
@@ -1159,7 +1174,7 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl)
objVram = (void*)(OBJ_VRAM0);
objVram += spriteTileNum + 0x400;
}
- sub_8075198(objVram, windowTileData, 3);
+ TextIntoHealthboxObject(objVram, windowTileData, 3);
RemoveWindowOnHealthbox(windowId);
}
@@ -1170,7 +1185,7 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent)
u8 text[32];
void *objVram;
- if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER && !IsDoubleBattle())
+ if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER && !IsDoubleBattle())
{
spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * 32;
if (maxOrCurrent != HP_CURRENT) // singles, max
@@ -1179,7 +1194,7 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent)
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 0, 5, 2, &windowId);
objVram = (void*)(OBJ_VRAM0);
objVram += spriteTileNum + 0xB40;
- sub_8075170(objVram, windowTileData, 2);
+ HpTextIntoHealthboxObject(objVram, windowTileData, 2);
RemoveWindowOnHealthbox(windowId);
}
else // singles, current
@@ -1190,20 +1205,19 @@ void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent)
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 4, 5, 2, &windowId);
objVram = (void*)(OBJ_VRAM0);
objVram += spriteTileNum + 0x3E0;
- sub_8075170(objVram, windowTileData, 1);
+ HpTextIntoHealthboxObject(objVram, windowTileData, 1);
objVram = (void*)(OBJ_VRAM0);
objVram += spriteTileNum + 0xB00;
- sub_8075170(objVram, windowTileData + 0x20, 2);
+ HpTextIntoHealthboxObject(objVram, windowTileData + 0x20, 2);
RemoveWindowOnHealthbox(windowId);
}
-
}
else
{
u8 battler;
memcpy(text, sUnknown_0832C3C4, sizeof(sUnknown_0832C3C4));
- battler = gSprites[healthboxSpriteId].data[6];
+ battler = gSprites[healthboxSpriteId].hMain_Battler;
if (IsDoubleBattle() == TRUE || GetBattlerSide(battler) == B_SIDE_OPPONENT)
{
UpdateHpTextInHealthboxInDoubles(healthboxSpriteId, value, maxOrCurrent);
@@ -1248,7 +1262,7 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
u8 text[32];
void *objVram;
- if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER)
+ if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER)
{
if (gBattleSpritesDataPtr->battlerData[gSprites[healthboxSpriteId].data[6]].hpNumbersNoBars) // don't print text if only bars are visible
{
@@ -1259,7 +1273,7 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
{
ConvertIntToDecimalStringN(text, value, STR_CONV_MODE_RIGHT_ALIGN, 3);
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 0, 5, 0, &windowId);
- sub_8075170((void*)(OBJ_VRAM0) + spriteTileNum + 0xC0, windowTileData, 2);
+ HpTextIntoHealthboxObject((void*)(OBJ_VRAM0) + spriteTileNum + 0xC0, windowTileData, 2);
RemoveWindowOnHealthbox(windowId);
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_116),
(void*)(OBJ_VRAM0 + 0x680) + (gSprites[healthboxSpriteId].oam.tileNum * 32),
@@ -1271,8 +1285,8 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
text[3] = CHAR_SLASH;
text[4] = EOS;
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, 4, 5, 0, &windowId);
- sub_807513C(objVram, 0, 3);
- sub_8075170((void*)(OBJ_VRAM0 + 0x60) + spriteTileNum, windowTileData, 3);
+ FillHealthboxObject(objVram, 0, 3); // Erases HP bar leftover.
+ HpTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x60) + spriteTileNum, windowTileData, 3);
RemoveWindowOnHealthbox(windowId);
}
}
@@ -1282,7 +1296,7 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
u8 battlerId;
memcpy(text, sUnknown_0832C3D8, sizeof(sUnknown_0832C3D8));
- battlerId = gSprites[healthboxSpriteId].data[6];
+ battlerId = gSprites[healthboxSpriteId].hMain_Battler;
if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) // don't print text if only bars are visible
{
@@ -1325,7 +1339,7 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
}
else
{
- if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) // impossible to reach part, because the battlerId is from the opponent's side
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) // Impossible to reach part, because the battlerId is from the opponent's side.
{
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_116),
(void*)(OBJ_VRAM0) + ((gSprites[healthboxSpriteId].oam.tileNum + 52) * 32),
@@ -1336,15 +1350,16 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
}
}
-static void sub_80730D4(u8 healthboxSpriteId, struct Pokemon *mon)
+// Prints mon's nature, catch and flee rate. Probably used to test pokeblock-related features.
+static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon)
{
u8 text[20];
s32 j, var2;
u8 *barFontGfx;
- u8 i, var, nature, healthboxSpriteId_2;
+ u8 i, var, nature, healthBarSpriteId;
memcpy(text, sUnknown_0832C3C4, sizeof(sUnknown_0832C3C4));
- barFontGfx = &gMonSpritesGfxPtr->barFontGfx[0x520 + (GetBattlerPosition(gSprites[healthboxSpriteId].data[6]) * 384)];
+ barFontGfx = &gMonSpritesGfxPtr->barFontGfx[0x520 + (GetBattlerPosition(gSprites[healthboxSpriteId].hMain_Battler) * 384)];
var = 5;
nature = GetNature(mon);
StringCopy(text + 6, gNatureNamePointers[nature]);
@@ -1375,26 +1390,26 @@ static void sub_80730D4(u8 healthboxSpriteId, struct Pokemon *mon)
barFontGfx += 0x20;
}
- healthboxSpriteId_2 = gSprites[healthboxSpriteId].data[5];
- ConvertIntToDecimalStringN(text + 6, gBattleStruct->field_7C, STR_CONV_MODE_RIGHT_ALIGN, 2);
- ConvertIntToDecimalStringN(text + 9, gBattleStruct->field_7B, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId;
+ ConvertIntToDecimalStringN(text + 6, gBattleStruct->safariCatchFactor, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ ConvertIntToDecimalStringN(text + 9, gBattleStruct->safariEscapeFactor, STR_CONV_MODE_RIGHT_ALIGN, 2);
text[5] = CHAR_SPACE;
text[8] = CHAR_SLASH;
RenderTextFont9(gMonSpritesGfxPtr->barFontGfx, 9, text);
- j = healthboxSpriteId_2; // needed to match for some reason
+ j = healthBarSpriteId; // Needed to match for some reason.
for (j = 0; j < 5; j++)
{
if (j <= 1)
{
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20],
- (void*)(OBJ_VRAM0) + (gSprites[healthboxSpriteId_2].oam.tileNum + 2 + j) * 32,
+ (void*)(OBJ_VRAM0) + (gSprites[healthBarSpriteId].oam.tileNum + 2 + j) * 32,
32);
}
else
{
CpuCopy32(&gMonSpritesGfxPtr->barFontGfx[0x40 * j + 0x20],
- (void*)(OBJ_VRAM0 + 0xC0) + (j + gSprites[healthboxSpriteId_2].oam.tileNum) * 32,
+ (void*)(OBJ_VRAM0 + 0xC0) + (j + gSprites[healthBarSpriteId].oam.tileNum) * 32,
32);
}
}
@@ -1403,7 +1418,7 @@ static void sub_80730D4(u8 healthboxSpriteId, struct Pokemon *mon)
void SwapHpBarsWithHpText(void)
{
s32 i;
- u8 spriteId;
+ u8 healthBarSpriteId;
for (i = 0; i < gBattlersCount; i++)
{
@@ -1424,9 +1439,9 @@ void SwapHpBarsWithHpText(void)
if (noBars == TRUE) // bars to text
{
- spriteId = gSprites[gHealthboxSpriteIds[i]].data[5];
+ healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId;
- CpuFill32(0, (void*)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100);
+ CpuFill32(0, (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * 32), 0x100);
UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_HP), HP_CURRENT);
UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), HP_MAX);
}
@@ -1443,13 +1458,14 @@ void SwapHpBarsWithHpText(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
{
- sub_80730D4(gHealthboxSpriteIds[i], &gEnemyParty[gBattlerPartyIndexes[i]]);
+ // Most likely a debug function.
+ PrintSafariMonInfo(gHealthboxSpriteIds[i], &gEnemyParty[gBattlerPartyIndexes[i]]);
}
else
{
- spriteId = gSprites[gHealthboxSpriteIds[i]].data[5];
+ healthBarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId;
- CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * 32), 0x100);
+ CpuFill32(0, (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * 32), 0x100);
UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_HP), HP_CURRENT);
UpdateHpTextInHealthboxInDoubles(gHealthboxSpriteIds[i], GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_MAX_HP), HP_MAX);
}
@@ -1462,18 +1478,24 @@ void SwapHpBarsWithHpText(void)
UpdateHealthboxAttribute(gHealthboxSpriteIds[i], &gEnemyParty[gBattlerPartyIndexes[i]], HEALTHBOX_NICK);
}
}
- gSprites[gHealthboxSpriteIds[i]].data[7] ^= 1;
+ gSprites[gHealthboxSpriteIds[i]].hMain_Data7 ^= 1;
}
}
}
+#define tBattler data[0]
+#define tSummaryBarSpriteId data[1]
+#define tBallIconSpriteId(n) data[3 + n]
+#define tIsBattleStart data[10]
+#define tData15 data[15]
+
u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart)
{
bool8 isOpponent;
s16 bar_X, bar_Y, bar_pos2_X, bar_data0;
s32 i, j, var;
- u8 barSpriteId;
- u8 ballIconSpritesIds[6];
+ u8 summaryBarSpriteId;
+ u8 ballIconSpritesIds[PARTY_SIZE];
u8 taskId;
if (!arg2 || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT)
@@ -1511,19 +1533,19 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
LoadSpritePalette(&sStatusSummaryBarSpritePal);
LoadSpritePalette(&sStatusSummaryBallsSpritePal);
- barSpriteId = CreateSprite(&sStatusSummaryBarSpriteTemplates[isOpponent], bar_X, bar_Y, 10);
- SetSubspriteTables(&gSprites[barSpriteId], sStatusSummaryBar_SubspriteTable);
- gSprites[barSpriteId].pos2.x = bar_pos2_X;
- gSprites[barSpriteId].data[0] = bar_data0;
+ summaryBarSpriteId = CreateSprite(&sStatusSummaryBarSpriteTemplates[isOpponent], bar_X, bar_Y, 10);
+ SetSubspriteTables(&gSprites[summaryBarSpriteId], sStatusSummaryBar_SubspriteTable);
+ gSprites[summaryBarSpriteId].pos2.x = bar_pos2_X;
+ gSprites[summaryBarSpriteId].data[0] = bar_data0;
if (isOpponent)
{
- gSprites[barSpriteId].pos1.x -= 96;
- gSprites[barSpriteId].oam.matrixNum = 8;
+ gSprites[summaryBarSpriteId].pos1.x -= 96;
+ gSprites[summaryBarSpriteId].oam.matrixNum = 8;
}
else
{
- gSprites[barSpriteId].pos1.x += 96;
+ gSprites[summaryBarSpriteId].pos1.x += 96;
}
for (i = 0; i < PARTY_SIZE; i++)
@@ -1539,7 +1561,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
gSprites[ballIconSpritesIds[i]].pos2.y = 0;
}
- gSprites[ballIconSpritesIds[i]].data[0] = barSpriteId;
+ gSprites[ballIconSpritesIds[i]].data[0] = summaryBarSpriteId;
if (!isOpponent)
{
@@ -1561,7 +1583,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg
{
@@ -1580,7 +1602,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
}
else
{
- for (i = 0, var = 5, j = 0; j < 6; j++)
+ for (i = 0, var = 5, j = 0; j < PARTY_SIZE; j++)
{
if (partyInfo[j].hp == 0xFFFF) // empty slot or an egg
{
@@ -1609,7 +1631,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
{
if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS))
{
- for (var = 5, i = 0; i < 6; i++)
+ for (var = 5, i = 0; i < PARTY_SIZE; i++)
{
if (partyInfo[i].hp == 0xFFFF) // empty slot or an egg
{
@@ -1629,7 +1651,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
}
else
{
- for (var = 0, i = 0, j = 0; j < 6; j++)
+ for (var = 0, i = 0, j = 0; j < PARTY_SIZE; j++)
{
if (partyInfo[j].hp == 0xFFFF) // empty slot or an egg
{
@@ -1656,13 +1678,13 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
}
taskId = CreateTask(TaskDummy, 5);
- gTasks[taskId].data[0] = battlerId;
- gTasks[taskId].data[1] = barSpriteId;
+ gTasks[taskId].tBattler = battlerId;
+ gTasks[taskId].tSummaryBarSpriteId = summaryBarSpriteId;
- for (i = 0; i < 6; i++)
- gTasks[taskId].data[3 + i] = ballIconSpritesIds[i];
+ for (i = 0; i < PARTY_SIZE; i++)
+ gTasks[taskId].tBallIconSpriteId(i) = ballIconSpritesIds[i];
- gTasks[taskId].data[10] = isBattleStart;
+ gTasks[taskId].tIsBattleStart = isBattleStart;
if (isBattleStart)
{
@@ -1673,54 +1695,54 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo,
return taskId;
}
-void sub_8073C30(u8 taskId)
+void Task_HidePartyStatusSummary(u8 taskId)
{
- u8 sp[6];
- u8 r7;
- u8 r10;
+ u8 ballIconSpriteIds[PARTY_SIZE];
+ bool8 isBattleStart;
+ u8 summaryBarSpriteId;
u8 battlerId;
s32 i;
- r7 = gTasks[taskId].data[10];
- r10 = gTasks[taskId].data[1];
- battlerId = gTasks[taskId].data[0];
+ isBattleStart = gTasks[taskId].tIsBattleStart;
+ summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId;
+ battlerId = gTasks[taskId].tBattler;
- for (i = 0; i < 6; i++)
- sp[i] = gTasks[taskId].data[3 + i];
+ for (i = 0; i < PARTY_SIZE; i++)
+ ballIconSpriteIds[i] = gTasks[taskId].tBallIconSpriteId(i);
- SetGpuReg(REG_OFFSET_BLDCNT, 0x3F40);
- SetGpuReg(REG_OFFSET_BLDALPHA, 0x10);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
- gTasks[taskId].data[15] = 16;
+ gTasks[taskId].tData15 = 16;
- for (i = 0; i < 6; i++)
- gSprites[sp[i]].oam.objMode = 1;
+ for (i = 0; i < PARTY_SIZE; i++)
+ gSprites[ballIconSpriteIds[i]].oam.objMode = 1;
- gSprites[r10].oam.objMode = 1;
+ gSprites[summaryBarSpriteId].oam.objMode = 1;
- if (r7 != 0)
+ if (isBattleStart)
{
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
{
- gSprites[sp[5 - i]].data[1] = 7 * i;
- gSprites[sp[5 - i]].data[3] = 0;
- gSprites[sp[5 - i]].data[4] = 0;
- gSprites[sp[5 - i]].callback = sub_8074158;
+ gSprites[ballIconSpriteIds[5 - i]].data[1] = 7 * i;
+ gSprites[ballIconSpriteIds[5 - i]].data[3] = 0;
+ gSprites[ballIconSpriteIds[5 - i]].data[4] = 0;
+ gSprites[ballIconSpriteIds[5 - i]].callback = sub_8074158;
}
else
{
- gSprites[sp[i]].data[1] = 7 * i;
- gSprites[sp[i]].data[3] = 0;
- gSprites[sp[i]].data[4] = 0;
- gSprites[sp[i]].callback = sub_8074158;
+ gSprites[ballIconSpriteIds[i]].data[1] = 7 * i;
+ gSprites[ballIconSpriteIds[i]].data[3] = 0;
+ gSprites[ballIconSpriteIds[i]].data[4] = 0;
+ gSprites[ballIconSpriteIds[i]].callback = sub_8074158;
}
}
- gSprites[r10].data[0] /= 2;
- gSprites[r10].data[1] = 0;
- gSprites[r10].callback = sub_8074090;
- SetSubspriteTables(&gSprites[r10], sUnknown_0832C2CC);
+ gSprites[summaryBarSpriteId].data[0] /= 2;
+ gSprites[summaryBarSpriteId].data[1] = 0;
+ gSprites[summaryBarSpriteId].callback = sub_8074090;
+ SetSubspriteTables(&gSprites[summaryBarSpriteId], sUnknown_0832C2CC);
gTasks[taskId].func = sub_8073E08;
}
else
@@ -1731,54 +1753,50 @@ void sub_8073C30(u8 taskId)
static void sub_8073E08(u8 taskId)
{
- u16 temp = gTasks[taskId].data[11]++;
-
- if (!(temp & 1))
+ if ((gTasks[taskId].data[11]++ % 2) == 0)
{
- gTasks[taskId].data[15]--;
- if (gTasks[taskId].data[15] < 0)
+ if (--gTasks[taskId].tData15 < 0)
return;
SetGpuReg(REG_OFFSET_BLDALPHA, (gTasks[taskId].data[15]) | ((16 - gTasks[taskId].data[15]) << 8));
}
- if (gTasks[taskId].data[15] == 0)
+ if (gTasks[taskId].tData15 == 0)
gTasks[taskId].func = sub_8073E64;
}
static void sub_8073E64(u8 taskId)
{
- u8 sp[6];
+ u8 ballIconSpriteIds[PARTY_SIZE];
s32 i;
- u8 battlerId = gTasks[taskId].data[0];
- gTasks[taskId].data[15]--;
- if (gTasks[taskId].data[15] == -1)
+ u8 battlerId = gTasks[taskId].tBattler;
+ if (--gTasks[taskId].tData15 == -1)
{
- u8 var = gTasks[taskId].data[1];
+ u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId;
- for (i = 0; i < 6; i++)
- sp[i] = gTasks[taskId].data[3 + i];
+ for (i = 0; i < PARTY_SIZE; i++)
+ ballIconSpriteIds[i] = gTasks[taskId].tBallIconSpriteId(i);
gBattleSpritesDataPtr->animationData->field_9_x1C--;
- if (!gBattleSpritesDataPtr->animationData->field_9_x1C)
+ if (gBattleSpritesDataPtr->animationData->field_9_x1C == 0)
{
- DestroySpriteAndFreeResources(&gSprites[var]);
- DestroySpriteAndFreeResources(&gSprites[sp[0]]);
+ DestroySpriteAndFreeResources(&gSprites[summaryBarSpriteId]);
+ DestroySpriteAndFreeResources(&gSprites[ballIconSpriteIds[0]]);
}
else
{
- FreeSpriteOamMatrix(&gSprites[var]);
- DestroySprite(&gSprites[var]);
- FreeSpriteOamMatrix(&gSprites[sp[0]]);
- DestroySprite(&gSprites[sp[0]]);
+ FreeSpriteOamMatrix(&gSprites[summaryBarSpriteId]);
+ DestroySprite(&gSprites[summaryBarSpriteId]);
+ FreeSpriteOamMatrix(&gSprites[ballIconSpriteIds[0]]);
+ DestroySprite(&gSprites[ballIconSpriteIds[0]]);
}
- for (i = 1; i < 6; i++)
- DestroySprite(&gSprites[sp[i]]);
+ for (i = 1; i < PARTY_SIZE; i++)
+ DestroySprite(&gSprites[ballIconSpriteIds[i]]);
}
- else if (gTasks[taskId].data[15] == -3)
+ else if (gTasks[taskId].tData15 == -3)
{
- gBattleSpritesDataPtr->healthBoxesData[battlerId].flag_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].partyStatusSummaryShown = 0;
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
DestroyTask(taskId);
@@ -1787,37 +1805,42 @@ static void sub_8073E64(u8 taskId)
static void sub_8073F98(u8 taskId)
{
- u8 sp[6];
+ u8 ballIconSpriteIds[PARTY_SIZE];
s32 i;
+ u8 battlerId = gTasks[taskId].tBattler;
- u8 battlerId = gTasks[taskId].data[0];
- gTasks[taskId].data[15]--;
- if (gTasks[taskId].data[15] >= 0)
+ if (--gTasks[taskId].tData15 >= 0)
{
- SetGpuReg(REG_OFFSET_BLDALPHA, (gTasks[taskId].data[15]) | ((16 - gTasks[taskId].data[15]) << 8));
+ SetGpuReg(REG_OFFSET_BLDALPHA, (gTasks[taskId].tData15) | ((16 - gTasks[taskId].tData15) << 8));
}
- else if (gTasks[taskId].data[15] == -1)
+ else if (gTasks[taskId].tData15 == -1)
{
- u8 var = gTasks[taskId].data[1];
+ u8 summaryBarSpriteId = gTasks[taskId].tSummaryBarSpriteId;
- for (i = 0; i < 6; i++)
- sp[i] = gTasks[taskId].data[3 + i];
+ for (i = 0; i < PARTY_SIZE; i++)
+ ballIconSpriteIds[i] = gTasks[taskId].tBallIconSpriteId(i);
- DestroySpriteAndFreeResources(&gSprites[var]);
- DestroySpriteAndFreeResources(&gSprites[sp[0]]);
+ DestroySpriteAndFreeResources(&gSprites[summaryBarSpriteId]);
+ DestroySpriteAndFreeResources(&gSprites[ballIconSpriteIds[0]]);
- for (i = 1; i < 6; i++)
- DestroySprite(&gSprites[sp[i]]);
+ for (i = 1; i < PARTY_SIZE; i++)
+ DestroySprite(&gSprites[ballIconSpriteIds[i]]);
}
- else if (gTasks[taskId].data[15] == -3)
+ else if (gTasks[taskId].tData15 == -3)
{
- gBattleSpritesDataPtr->healthBoxesData[battlerId].flag_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].partyStatusSummaryShown = 0;
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
DestroyTask(taskId);
}
}
+#undef tBattler
+#undef tSummaryBarSpriteId
+#undef tBallIconSpriteId
+#undef tIsBattleStart
+#undef tData15
+
static void SpriteCB_StatusSummaryBar(struct Sprite *sprite)
{
if (sprite->pos2.x != 0)
@@ -1956,17 +1979,17 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER)
{
- sub_8075198((void*)(0x6010040 + spriteTileNum), windowTileData, 6);
+ TextIntoHealthboxObject((void*)(VRAM + 0x10040 + spriteTileNum), windowTileData, 6);
ptr = (void*)(OBJ_VRAM0);
if (!IsDoubleBattle())
ptr += spriteTileNum + 0x800;
else
ptr += spriteTileNum + 0x400;
- sub_8075198(ptr, windowTileData + 0xC0, 1);
+ TextIntoHealthboxObject(ptr, windowTileData + 0xC0, 1);
}
else
{
- sub_8075198((void*)(0x6010020 + spriteTileNum), windowTileData, 7);
+ TextIntoHealthboxObject((void*)(VRAM + 0x10020 + spriteTileNum), windowTileData, 7);
}
RemoveWindowOnHealthbox(windowId);
@@ -1974,38 +1997,38 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
static void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus)
{
- u8 battlerId, healthboxSpriteId_2;
+ u8 battlerId, healthBarSpriteId;
if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
return;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
return;
- battlerId = gSprites[healthboxSpriteId].data[6];
+ battlerId = gSprites[healthboxSpriteId].hMain_Battler;
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
return;
if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES)), FLAG_GET_CAUGHT))
return;
- healthboxSpriteId_2 = gSprites[healthboxSpriteId].data[5];
+ healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId;
if (noStatus)
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_70), (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId_2].oam.tileNum + 8) * 32), 32);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_70), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * 32), 32);
else
- CpuFill32(0, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId_2].oam.tileNum + 8) * 32), 32);
+ CpuFill32(0, (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 8) * 32), 32);
}
static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
{
s32 i;
- u8 battlerId, healthboxSpriteId_2;
+ u8 battlerId, healthBarSpriteId;
u32 status, pltAdder;
const u8 *statusGfxPtr;
s16 tileNumAdder;
u8 statusPalId;
- battlerId = gSprites[healthboxSpriteId].data[6];
- healthboxSpriteId_2 = gSprites[healthboxSpriteId].data[5];
+ battlerId = gSprites[healthboxSpriteId].hMain_Battler;
+ healthBarSpriteId = gSprites[healthboxSpriteId].hMain_HealthBarSpriteId;
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
{
status = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS);
@@ -2022,27 +2045,27 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
if (status & STATUS1_SLEEP)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_SLP_BANK0, battlerId));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_SLP_BATTLER0, battlerId));
statusPalId = PAL_STATUS_SLP;
}
else if (status & STATUS1_PSN_ANY)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PSN_BANK0, battlerId));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_PSN_BATTLER0, battlerId));
statusPalId = PAL_STATUS_PSN;
}
else if (status & STATUS1_BURN)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_BRN_BANK0, battlerId));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_BRN_BATTLER0, battlerId));
statusPalId = PAL_STATUS_BRN;
}
else if (status & STATUS1_FREEZE)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_FRZ_BANK0, battlerId));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_FRZ_BATTLER0, battlerId));
statusPalId = PAL_STATUS_FRZ;
}
else if (status & STATUS1_PARALYSIS)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PRZ_BANK0, battlerId));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBattlerId(HEALTHBOX_GFX_STATUS_PRZ_BATTLER0, battlerId));
statusPalId = PAL_STATUS_PAR;
}
else
@@ -2053,7 +2076,7 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * 32), 32);
if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + gSprites[healthboxSpriteId_2].oam.tileNum * 32), 64);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * 32), 64);
TryAddPokeballIconToHealthbox(healthboxSpriteId, TRUE);
return;
@@ -2069,68 +2092,68 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
{
if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
{
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void*)(OBJ_VRAM0 + gSprites[healthboxSpriteId_2].oam.tileNum * 32), 32);
- CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId_2].oam.tileNum + 1) * 32), 32);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void*)(OBJ_VRAM0 + gSprites[healthBarSpriteId].oam.tileNum * 32), 32);
+ CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void*)(OBJ_VRAM0 + (gSprites[healthBarSpriteId].oam.tileNum + 1) * 32), 32);
}
}
TryAddPokeballIconToHealthbox(healthboxSpriteId, FALSE);
}
-static u8 GetStatusIconForBankId(u8 statusElementId, u8 battlerId)
+static u8 GetStatusIconForBattlerId(u8 statusElementId, u8 battlerId)
{
u8 ret = statusElementId;
switch (statusElementId)
{
- case HEALTHBOX_GFX_STATUS_PSN_BANK0:
+ case HEALTHBOX_GFX_STATUS_PSN_BATTLER0:
if (battlerId == 0)
- ret = HEALTHBOX_GFX_STATUS_PSN_BANK0;
+ ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER0;
else if (battlerId == 1)
- ret = HEALTHBOX_GFX_STATUS_PSN_BANK1;
+ ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER1;
else if (battlerId == 2)
- ret = HEALTHBOX_GFX_STATUS_PSN_BANK2;
+ ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER2;
else
- ret = HEALTHBOX_GFX_STATUS_PSN_BANK3;
+ ret = HEALTHBOX_GFX_STATUS_PSN_BATTLER3;
break;
- case HEALTHBOX_GFX_STATUS_PRZ_BANK0:
+ case HEALTHBOX_GFX_STATUS_PRZ_BATTLER0:
if (battlerId == 0)
- ret = HEALTHBOX_GFX_STATUS_PRZ_BANK0;
+ ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER0;
else if (battlerId == 1)
- ret = HEALTHBOX_GFX_STATUS_PRZ_BANK1;
+ ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER1;
else if (battlerId == 2)
- ret = HEALTHBOX_GFX_STATUS_PRZ_BANK2;
+ ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER2;
else
- ret = HEALTHBOX_GFX_STATUS_PRZ_BANK3;
+ ret = HEALTHBOX_GFX_STATUS_PRZ_BATTLER3;
break;
- case HEALTHBOX_GFX_STATUS_SLP_BANK0:
+ case HEALTHBOX_GFX_STATUS_SLP_BATTLER0:
if (battlerId == 0)
- ret = HEALTHBOX_GFX_STATUS_SLP_BANK0;
+ ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER0;
else if (battlerId == 1)
- ret = HEALTHBOX_GFX_STATUS_SLP_BANK1;
+ ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER1;
else if (battlerId == 2)
- ret = HEALTHBOX_GFX_STATUS_SLP_BANK2;
+ ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER2;
else
- ret = HEALTHBOX_GFX_STATUS_SLP_BANK3;
+ ret = HEALTHBOX_GFX_STATUS_SLP_BATTLER3;
break;
- case HEALTHBOX_GFX_STATUS_FRZ_BANK0:
+ case HEALTHBOX_GFX_STATUS_FRZ_BATTLER0:
if (battlerId == 0)
- ret = HEALTHBOX_GFX_STATUS_FRZ_BANK0;
+ ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER0;
else if (battlerId == 1)
- ret = HEALTHBOX_GFX_STATUS_FRZ_BANK1;
+ ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER1;
else if (battlerId == 2)
- ret = HEALTHBOX_GFX_STATUS_FRZ_BANK2;
+ ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER2;
else
- ret = HEALTHBOX_GFX_STATUS_FRZ_BANK3;
+ ret = HEALTHBOX_GFX_STATUS_FRZ_BATTLER3;
break;
- case HEALTHBOX_GFX_STATUS_BRN_BANK0:
+ case HEALTHBOX_GFX_STATUS_BRN_BATTLER0:
if (battlerId == 0)
- ret = HEALTHBOX_GFX_STATUS_BRN_BANK0;
+ ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER0;
else if (battlerId == 1)
- ret = HEALTHBOX_GFX_STATUS_BRN_BANK1;
+ ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER1;
else if (battlerId == 2)
- ret = HEALTHBOX_GFX_STATUS_BRN_BANK2;
+ ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER2;
else
- ret = HEALTHBOX_GFX_STATUS_BRN_BANK3;
+ ret = HEALTHBOX_GFX_STATUS_BRN_BATTLER3;
break;
}
return ret;
@@ -2143,8 +2166,8 @@ static void UpdateSafariBallsTextOnHealthbox(u8 healthboxSpriteId)
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gText_SafariBalls, 0, 3, 2, &windowId);
spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * 32;
- sub_8075198((void*)(OBJ_VRAM0 + 0x40) + spriteTileNum, windowTileData, 6);
- sub_8075198((void*)(OBJ_VRAM0 + 0x800) + spriteTileNum, windowTileData + 0xC0, 2);
+ TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x40) + spriteTileNum, windowTileData, 6);
+ TextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x800) + spriteTileNum, windowTileData + 0xC0, 2);
RemoveWindowOnHealthbox(windowId);
}
@@ -2160,20 +2183,20 @@ static void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId)
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, GetStringRightAlignXOffset(0, text, 0x2F), 3, 2, &windowId);
spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * 32;
- sub_80751E4((void*)(OBJ_VRAM0 + 0x2C0) + spriteTileNum, windowTileData, 2);
- sub_80751E4((void*)(OBJ_VRAM0 + 0xA00) + spriteTileNum, windowTileData + 0x40, 4);
+ SafariTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0x2C0) + spriteTileNum, windowTileData, 2);
+ SafariTextIntoHealthboxObject((void*)(OBJ_VRAM0 + 0xA00) + spriteTileNum, windowTileData + 0x40, 4);
RemoveWindowOnHealthbox(windowId);
}
void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId)
{
s32 maxHp, currHp;
- u8 battlerId = gSprites[healthboxSpriteId].data[6];
+ u8 battlerId = gSprites[healthboxSpriteId].hMain_Battler;
if (elementId == HEALTHBOX_ALL && !IsDoubleBattle())
- GetBattlerSide(battlerId); // pointless function call
+ GetBattlerSide(battlerId); // Pointless function call.
- if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER)
+ if (GetBattlerSide(gSprites[healthboxSpriteId].hMain_Battler) == B_SIDE_PLAYER)
{
u8 isDoubles;
@@ -2189,7 +2212,7 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
maxHp = GetMonData(mon, MON_DATA_MAX_HP);
currHp = GetMonData(mon, MON_DATA_HP);
SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0);
- sub_8074AA0(battlerId, healthboxSpriteId, HEALTH_BAR, 0);
+ MoveBattleBar(battlerId, healthboxSpriteId, HEALTH_BAR, 0);
}
isDoubles = IsDoubleBattle();
if (!isDoubles && (elementId == HEALTHBOX_EXP_BAR || elementId == HEALTHBOX_ALL))
@@ -2207,7 +2230,7 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
currExpBarValue = exp - currLevelExp;
maxExpBarValue = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp;
SetBattleBarStruct(battlerId, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles);
- sub_8074AA0(battlerId, healthboxSpriteId, EXP_BAR, 0);
+ MoveBattleBar(battlerId, healthboxSpriteId, EXP_BAR, 0);
}
if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL)
UpdateNickInHealthbox(healthboxSpriteId, mon);
@@ -2228,7 +2251,7 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
maxHp = GetMonData(mon, MON_DATA_MAX_HP);
currHp = GetMonData(mon, MON_DATA_HP);
SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0);
- sub_8074AA0(battlerId, healthboxSpriteId, HEALTH_BAR, 0);
+ MoveBattleBar(battlerId, healthboxSpriteId, HEALTH_BAR, 0);
}
if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL)
UpdateNickInHealthbox(healthboxSpriteId, mon);
@@ -2237,82 +2260,86 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
}
}
-s32 sub_8074AA0(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 arg3)
+#define B_EXPBAR_PIXELS 64
+#define B_HEALTHBAR_PIXELS 48
+
+s32 MoveBattleBar(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 unused)
{
- s32 var;
+ s32 currentBarValue;
if (whichBar == HEALTH_BAR) // health bar
{
- var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
- gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].oldValue,
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
- &gBattleSpritesDataPtr->battleBars[battlerId].field_10,
- 6, 1);
+ &gBattleSpritesDataPtr->battleBars[battlerId].currValue,
+ B_HEALTHBAR_PIXELS / 8, 1);
}
else // exp bar
{
- u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[battlerId].oldValue,
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
gBattleSpritesDataPtr->battleBars[battlerId].maxValue, 8);
if (expFraction == 0)
expFraction = 1;
expFraction = abs(gBattleSpritesDataPtr->battleBars[battlerId].receivedValue / expFraction);
- var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
- gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].oldValue,
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
- &gBattleSpritesDataPtr->battleBars[battlerId].field_10,
- 8, expFraction);
+ &gBattleSpritesDataPtr->battleBars[battlerId].currValue,
+ B_EXPBAR_PIXELS / 8, expFraction);
}
if (whichBar == EXP_BAR || (whichBar == HEALTH_BAR && !gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars))
- sub_8074B9C(battlerId, whichBar);
+ MoveBattleBarGraphically(battlerId, whichBar);
- if (var == -1)
- gBattleSpritesDataPtr->battleBars[battlerId].field_10 = 0;
+ if (currentBarValue == -1)
+ gBattleSpritesDataPtr->battleBars[battlerId].currValue = 0;
- return var;
+ return currentBarValue;
}
-static void sub_8074B9C(u8 battlerId, u8 whichBar)
+static void MoveBattleBarGraphically(u8 battlerId, u8 whichBar)
{
u8 array[8];
- u8 subRet, level;
+ u8 filledPixelsCount, level;
u8 barElementId;
u8 i;
switch (whichBar)
{
case HEALTH_BAR:
- subRet = sub_8074E8C(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
- gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ filledPixelsCount = CalcBarFilledPixels(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].oldValue,
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
- &gBattleSpritesDataPtr->battleBars[battlerId].field_10,
- array, 6);
- barElementId = 3;
- if (subRet <= 0x18)
- {
- barElementId = 0x38;
- if (subRet > 9)
- barElementId = 0x2F;
- }
+ &gBattleSpritesDataPtr->battleBars[battlerId].currValue,
+ array, B_HEALTHBAR_PIXELS / 8);
+
+ if (filledPixelsCount > (B_HEALTHBAR_PIXELS * 50 / 100)) // more than 50 % hp
+ barElementId = HEALTHBOX_GFX_HP_BAR_GREEN;
+ else if (filledPixelsCount > (B_HEALTHBAR_PIXELS * 20 / 100)) // more than 20% hp
+ barElementId = HEALTHBOX_GFX_HP_BAR_YELLOW;
+ else
+ barElementId = HEALTHBOX_GFX_HP_BAR_RED; // 20 % or less
+
for (i = 0; i < 6; i++)
{
- u8 healthboxSpriteId_2 = gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].data[5];
+ u8 healthbarSpriteId = gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].hMain_HealthBarSpriteId;
if (i < 2)
CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32,
- (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId_2].oam.tileNum + 2 + i) * 32), 32);
+ (void*)(OBJ_VRAM0 + (gSprites[healthbarSpriteId].oam.tileNum + 2 + i) * 32), 32);
else
CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32,
- (void*)(OBJ_VRAM0 + 64 + (i + gSprites[healthboxSpriteId_2].oam.tileNum) * 32), 32);
+ (void*)(OBJ_VRAM0 + 64 + (i + gSprites[healthbarSpriteId].oam.tileNum) * 32), 32);
}
break;
case EXP_BAR:
- sub_8074E8C(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
- gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ CalcBarFilledPixels(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].oldValue,
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
- &gBattleSpritesDataPtr->battleBars[battlerId].field_10,
- array, 8);
+ &gBattleSpritesDataPtr->battleBars[battlerId].currValue,
+ array, B_EXPBAR_PIXELS / 8);
level = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_LEVEL);
if (level == MAX_MON_LEVEL)
{
@@ -2332,166 +2359,162 @@ static void sub_8074B9C(u8 battlerId, u8 whichBar)
}
}
-static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5)
+static s32 CalcNewBarValue(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 scale, u16 toAdd)
{
- s32 r6;
- s32 ret;
- arg4 <<= 3;
+ s32 ret, newValue;
+ scale *= 8;
- if (*arg3 == -32768)
+ if (*currValue == -32768) // first function call
{
- if (maxValue < arg4)
- *arg3 = currValue << 8;
+ if (maxValue < scale)
+ *currValue = Q_24_8(oldValue);
else
- *arg3 = currValue;
+ *currValue = oldValue;
}
- currValue -= receivedValue;
- if (currValue < 0)
- currValue = 0;
- else if (currValue > maxValue)
- currValue = maxValue;
+ newValue = oldValue - receivedValue;
+ if (newValue < 0)
+ newValue = 0;
+ else if (newValue > maxValue)
+ newValue = maxValue;
- if (maxValue < arg4)
+ if (maxValue < scale)
{
- s32 var = *arg3 >> 8;
-
- r6 = *arg3;
- if (currValue == var && (r6 & 0xFF) == 0)
+ if (newValue == Q_24_8_TO_INT(*currValue) && (*currValue & 0xFF) == 0)
return -1;
}
else
{
- r6 = *arg3;
- if (currValue == r6)
+ if (newValue == *currValue) // we're done, the bar's value has been updated
return -1;
}
- if (maxValue < arg4)
+ if (maxValue < scale) // handle cases of max var having less pixels than the whole bar
{
- s32 var = (maxValue << 8) / arg4;
+ s32 toAdd = Q_24_8(maxValue) / scale;
- if (receivedValue < 0)
+ if (receivedValue < 0) // fill bar right
{
- *arg3 = r6 + var;
- ret = *arg3 >> 8;
- if (ret >= currValue)
+ *currValue += toAdd;
+ ret = Q_24_8_TO_INT(*currValue);
+ if (ret >= newValue)
{
- *arg3 = currValue << 8;
- ret = currValue;
+ *currValue = Q_24_8(newValue);
+ ret = newValue;
}
}
- else
+ else // move bar left
{
- *arg3 = r6 - var;
- ret = *arg3 >> 8;
- if ((*arg3 & 0xFF) > 0)
+ *currValue -= toAdd;
+ ret = Q_24_8_TO_INT(*currValue);
+ // try round up
+ if ((*currValue & 0xFF) > 0)
ret++;
- if (ret <= currValue)
+ if (ret <= newValue)
{
- *arg3 = currValue << 8;
- ret = currValue;
+ *currValue = Q_24_8(newValue);
+ ret = newValue;
}
}
}
else
{
- if (receivedValue < 0)
+ if (receivedValue < 0) // fill bar right
{
- *arg3 += arg5;
- if (*arg3 > currValue)
- *arg3 = currValue;
- ret = *arg3;
+ *currValue += toAdd;
+ if (*currValue > newValue)
+ *currValue = newValue;
+ ret = *currValue;
}
- else
+ else // move bar left
{
- *arg3 -= arg5;
- if (*arg3 < currValue)
- *arg3 = currValue;
- ret = *arg3;
+ *currValue -= toAdd;
+ if (*currValue < newValue)
+ *currValue = newValue;
+ ret = *currValue;
}
}
return ret;
}
-static u8 sub_8074E8C(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 *arg4, u8 arg5)
+static u8 CalcBarFilledPixels(s32 maxValue, s32 oldValue, s32 receivedValue, s32 *currValue, u8 *arg4, u8 scale)
{
- s32 r5 = currValue - receivedValue;
- u8 ret;
+ u8 pixels, filledPixels, totalPixels;
u8 i;
- u8 r2;
- if (r5 < 0)
- r5 = 0;
- else if (r5 > maxValue)
- r5 = maxValue;
+ s32 newValue = oldValue - receivedValue;
+ if (newValue < 0)
+ newValue = 0;
+ else if (newValue > maxValue)
+ newValue = maxValue;
- ret = arg5 << 3;
+ totalPixels = scale * 8;
- for (i = 0; i < arg5; i++)
+ for (i = 0; i < scale; i++)
arg4[i] = 0;
- if (maxValue < ret)
- r2 = (*arg3 * ret / maxValue) >> 8;
+ if (maxValue < totalPixels)
+ pixels = (*currValue * totalPixels / maxValue) >> 8;
else
- r2 = *arg3 * ret / maxValue;
+ pixels = *currValue * totalPixels / maxValue;
- ret = r2;
+ filledPixels = pixels;
- if (ret == 0 && r5 > 0)
+ if (filledPixels == 0 && newValue > 0)
{
arg4[0] = 1;
- ret = 1;
+ filledPixels = 1;
}
else
{
- for (i = 0; i < arg5; i++)
+ for (i = 0; i < scale; i++)
{
- if (r2 >= 8)
+ if (pixels >= 8)
{
arg4[i] = 8;
}
else
{
- arg4[i] = r2;
+ arg4[i] = pixels;
break;
}
- r2 -= 8;
+ pixels -= 8;
}
}
- return ret;
+ return filledPixels;
}
-static s16 sub_8074F28(struct TestingBar *barInfo, s32 *arg1, u16 *arg2, s32 arg3)
+// These two functions seem as if they were made for testing the health bar.
+static s16 sub_8074F28(struct TestingBar *barInfo, s32 *currValue, u16 *arg2, s32 arg3)
{
s16 ret, var;
- ret = sub_8074DB8(barInfo->maxValue,
- barInfo->currValue,
+ ret = CalcNewBarValue(barInfo->maxValue,
+ barInfo->oldValue,
barInfo->receivedValue,
- arg1, 6, 1);
- sub_8074F88(barInfo, arg1, arg2);
+ currValue, B_HEALTHBAR_PIXELS / 8, 1);
+ sub_8074F88(barInfo, currValue, arg2);
- if (barInfo->maxValue < 0x30)
- var = *arg1 >> 8;
+ if (barInfo->maxValue < B_HEALTHBAR_PIXELS)
+ var = *currValue >> 8;
else
- var = *arg1;
+ var = *currValue;
DummiedOutFunction(barInfo->maxValue, var, arg3);
return ret;
}
-static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2)
+static void sub_8074F88(struct TestingBar *barInfo, s32 *currValue, u16 *arg2)
{
u8 sp8[6];
u16 sp10[6];
u8 i;
- sub_8074E8C(barInfo->maxValue, barInfo->currValue,
- barInfo->receivedValue, arg1, sp8, 6);
+ CalcBarFilledPixels(barInfo->maxValue, barInfo->oldValue,
+ barInfo->receivedValue, currValue, sp8, B_HEALTHBAR_PIXELS / 8);
for (i = 0; i < 6; i++)
sp10[i] = (barInfo->unkC_0 << 12) | (barInfo->unk10 + sp8[i]);
@@ -2499,22 +2522,22 @@ static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2)
CpuCopy16(sp10, arg2, sizeof(sp10));
}
-static u8 GetScaledExpFraction(s32 currValue, s32 receivedValue, s32 maxValue, u8 scale)
+static u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8 scale)
{
- s32 r5, result;
- s8 r4, r0;
+ s32 newVal, result;
+ s8 oldToMax, newToMax;
scale *= 8;
- r5 = currValue - receivedValue;
+ newVal = oldValue - receivedValue;
- if (r5 < 0)
- r5 = 0;
- else if (r5 > maxValue)
- r5 = maxValue;
+ if (newVal < 0)
+ newVal = 0;
+ else if (newVal > maxValue)
+ newVal = maxValue;
- r4 = currValue * scale / maxValue;
- r0 = r5 * scale / maxValue;
- result = r4 - r0;
+ oldToMax = oldValue * scale / maxValue;
+ newToMax = newVal * scale / maxValue;
+ result = oldToMax - newToMax;
return abs(result);
}
@@ -2531,7 +2554,7 @@ u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale)
u8 GetHPBarLevel(s16 hp, s16 maxhp)
{
- s32 result;
+ u8 result;
if (hp == maxhp)
{
@@ -2539,10 +2562,10 @@ u8 GetHPBarLevel(s16 hp, s16 maxhp)
}
else
{
- u8 fraction = GetScaledHPFraction(hp, maxhp, 48);
- if (fraction > 24)
+ u8 fraction = GetScaledHPFraction(hp, maxhp, B_HEALTHBAR_PIXELS);
+ if (fraction > (B_HEALTHBAR_PIXELS * 50 / 100)) // more than 50 % hp
result = HP_BAR_GREEN;
- else if (fraction > 9)
+ else if (fraction > (B_HEALTHBAR_PIXELS * 20 / 100)) // more than 20% hp
result = HP_BAR_YELLOW;
else if (fraction > 0)
result = HP_BAR_RED;
@@ -2577,17 +2600,17 @@ static void RemoveWindowOnHealthbox(u32 windowId)
RemoveWindow(windowId);
}
-static void sub_807513C(void *dest, u32 arg1, u32 arg2)
+static void FillHealthboxObject(void *dest, u32 arg1, u32 arg2)
{
CpuFill32(0x11111111 * arg1, dest, arg2 * 32);
}
-static void sub_8075170(void *dest, u8 *windowTileData, u32 arg2)
+static void HpTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 arg2)
{
CpuCopy32(windowTileData + 256, dest, arg2 * 32);
}
-static void sub_8075198(void *dest, u8 *windowTileData, s32 arg2)
+static void TextIntoHealthboxObject(void *dest, u8 *windowTileData, s32 arg2)
{
CpuCopy32(windowTileData + 256, dest + 256, arg2 * 32);
@@ -2596,13 +2619,13 @@ static void sub_8075198(void *dest, u8 *windowTileData, s32 arg2)
do
{
CpuCopy32(windowTileData + 20, dest + 20, 12);
- dest += 32, windowTileData+= 32;
+ dest += 32, windowTileData += 32;
arg2--;
} while (arg2 != 0);
}
}
-static void sub_80751E4(void *dest, u8 *windowTileData, u32 arg2)
+static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 arg2)
{
CpuCopy32(windowTileData, dest, arg2 * 32);
CpuCopy32(windowTileData + 256, dest + 256, arg2 * 32);
diff --git a/src/battle_main.c b/src/battle_main.c
index 24d598f4a..3212d39f3 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -41,6 +41,7 @@
#include "pokedex.h"
#include "constants/abilities.h"
#include "constants/moves.h"
+#include "constants/rgb.h"
#include "evolution_scene.h"
#include "roamer.h"
#include "tv.h"
@@ -50,6 +51,7 @@
#include "decompress.h"
#include "international_string_util.h"
#include "pokeball.h"
+#include "party_menu.h"
struct UnknownPokemonStruct4
{
@@ -81,15 +83,14 @@ extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern u8 gUnknown_0203CF00[];
-extern const u16 gBattleTextboxPalette[]; // battle textbox palette
-extern const struct BgTemplate gUnknown_0831AA08[];
-extern const struct WindowTemplate * const gUnknown_0831ABA0[];
-extern const u8 gUnknown_0831ACE0[];
-extern const u8 * const gBattleScriptsForMoveEffects[];
-extern const u8 * const gBattlescriptsForBallThrow[];
-extern const u8 * const gBattlescriptsForRunningByItem[];
-extern const u8 * const gBattlescriptsForUsingItem[];
-extern const u8 * const gBattlescriptsForSafariActions[];
+extern const u16 gBattleTextboxPalette[];
+extern const struct BgTemplate gBattleBgTemplates[];
+extern const struct WindowTemplate *const gBattleWindowTemplates[];
+extern const u8 *const gBattleScriptsForMoveEffects[];
+extern const u8 *const gBattlescriptsForBallThrow[];
+extern const u8 *const gBattlescriptsForRunningByItem[];
+extern const u8 *const gBattlescriptsForUsingItem[];
+extern const u8 *const gBattlescriptsForSafariActions[];
extern const struct ScanlineEffectParams gUnknown_0831AC70;
// strings
@@ -137,13 +138,13 @@ static void sub_803980C(struct Sprite *sprite);
static void sub_8039838(struct Sprite *sprite);
static void sub_8039894(struct Sprite *sprite);
static void sub_80398D0(struct Sprite *sprite);
-static void sub_8039A48(struct Sprite *sprite);
+static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite);
static void sub_8039AF4(struct Sprite *sprite);
static void SpriteCallbackDummy_3(struct Sprite *sprite);
static void oac_poke_ally_(struct Sprite *sprite);
static void SpecialStatusesClear(void);
static void TurnValuesCleanUp(bool8 var0);
-static void SpriteCB_HealthBoxBounce(struct Sprite *sprite);
+static void SpriteCB_BounceEffect(struct Sprite *sprite);
static void BattleStartClearSetData(void);
static void BattleIntroGetMonsData(void);
static void BattleIntroPrepareBackgroundSlide(void);
@@ -162,7 +163,7 @@ static void HandleTurnActionSelectionState(void);
static void RunTurnActionsFunctions(void);
static void SetActionsAndBattlersTurnOrder(void);
static void sub_803CDF8(void);
-static bool8 sub_803CDB8(void);
+static bool8 AllAtActionConfirmed(void);
static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void);
static void FreeResetData_ReturnToOvOrDoEvolutions(void);
static void ReturnFromBattleToOverworld(void);
@@ -183,12 +184,16 @@ static void HandleAction_SafariZoneBallThrow(void);
static void HandleAction_ThrowPokeblock(void);
static void HandleAction_GoNear(void);
static void HandleAction_SafriZoneRun(void);
-static void HandleAction_Action9(void);
+static void HandleAction_WallyBallThrow(void);
static void HandleAction_Action11(void);
static void HandleAction_NothingIsFainted(void);
static void HandleAction_ActionFinished(void);
// EWRAM vars
+EWRAM_DATA u8 gDisplayedStringBattle[300] = {0};
+EWRAM_DATA u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT] = {0};
+EWRAM_DATA u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT] = {0};
+EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT] = {0};
EWRAM_DATA static u32 sUnusedUnknownArray[25] = {0};
EWRAM_DATA u32 gBattleTypeFlags = 0;
EWRAM_DATA u8 gBattleTerrain = 0;
@@ -205,7 +210,7 @@ EWRAM_DATA u8 gBattlersCount = 0;
EWRAM_DATA u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u8 gBattlerPositions[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT] = {0};
-EWRAM_DATA u8 gBattleTurnOrder[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u8 gBattlerByTurnOrder[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u8 gCurrentTurnActionNumber = 0;
EWRAM_DATA u8 gCurrentActionFuncId = 0;
EWRAM_DATA struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT] = {0};
@@ -296,6 +301,7 @@ u8 gNumberOfMovesToChoose;
u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
// rom const data
+static const s8 gUnknown_0831ACE0[] ={-32, -16, -16, -32, -32, 0, 0, 0};
// format: attacking type, defending type, damage multiplier
// the multiplier is a (decimal) fixed-point number:
@@ -515,7 +521,7 @@ static void (* const sTurnActionsFuncsTable[])(void) =
HandleAction_ThrowPokeblock, // B_ACTION_SAFARI_POKEBLOCK
HandleAction_GoNear, // B_ACTION_SAFARI_GO_NEAR
HandleAction_SafriZoneRun, // B_ACTION_SAFARI_RUN
- HandleAction_Action9, // B_ACTION_UNKNOWN9
+ HandleAction_WallyBallThrow, // B_ACTION_WALLY_THROW
HandleAction_RunBattleScript, // B_ACTION_EXEC_SCRIPT
HandleAction_Action11, // not sure about this one
HandleAction_ActionFinished, // B_ACTION_FINISHED
@@ -532,7 +538,7 @@ static void (* const sEndTurnFuncsTable[])(void) =
HandleEndTurn_FinishBattle, // B_OUTCOME_PLAYER_TELEPORTED
HandleEndTurn_MonFled, // B_OUTCOME_MON_FLED
HandleEndTurn_FinishBattle, // B_OUTCOME_CAUGHT
- HandleEndTurn_FinishBattle, // battle outcome 8
+ HandleEndTurn_FinishBattle, // B_OUTCOME_NO_SAFARI_BALLS
HandleEndTurn_FinishBattle, // B_OUTCOME_FORFEITED
HandleEndTurn_FinishBattle, // B_OUTCOME_MON_TELEPORTED
};
@@ -556,10 +562,11 @@ const u8 * const gStatusConditionStringsTable[7][2] =
{gStatusConditionString_LoveJpn, gText_Love}
};
-static const u8 sUnknown_0831BCE0[][3] = {{0, 0, 0}, {3, 5, 0}, {2, 3, 0}, {1, 2, 0}, {1, 1, 0}};
-static const u8 sUnknown_0831BCEF[] = {4, 3, 2, 1};
-static const u8 sUnknown_0831BCF3[] = {4, 4, 4, 4};
+static const u8 sPkblToEscapeFactor[][3] = {{0, 0, 0}, {3, 5, 0}, {2, 3, 0}, {1, 2, 0}, {1, 1, 0}};
+static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1};
+static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4};
+// code
void CB2_InitBattle(void)
{
MoveSaveBlocks_ResetHeap();
@@ -608,7 +615,7 @@ static void CB2_InitBattleInternal(void)
gBattle_WIN0H = 240;
- if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != STEVEN_PARTNER_ID)
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER)
{
gBattle_WIN0V = 159;
gBattle_WIN1H = 240;
@@ -652,7 +659,7 @@ static void CB2_InitBattleInternal(void)
LoadBattleTextboxAndBackground();
ResetSpriteData();
ResetTasks();
- LoadBattleEntryBackground();
+ DrawBattleEntryBackground();
FreeAllSpritePalettes();
gReservedSpritePaletteCount = 4;
SetVBlankCallback(VBlankCB_Battle);
@@ -678,7 +685,7 @@ static void CB2_InitBattleInternal(void)
gMain.inBattle = TRUE;
gSaveBlock2Ptr->frontier.field_CA9_b = 0;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
AdjustFriendship(&gPlayerParty[i], 3);
gBattleCommunication[MULTIUSE_STATE] = 0;
@@ -739,7 +746,7 @@ static void SetPlayerBerryDataInBattleStruct(void)
}
else
{
- const struct Berry* berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY));
+ const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY));
for (i = 0; i < BERRY_NAME_COUNT - 1; i++)
battleBerry->name[i] = berryData->name[i];
@@ -783,7 +790,7 @@ static void SetAllPlayersBerryData(void)
}
else
{
- const struct Berry* berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY));
+ const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY));
for (i = 0; i < BERRY_NAME_COUNT - 1; i++)
{
@@ -809,7 +816,7 @@ static void SetAllPlayersBerryData(void)
{
s32 numPlayers;
struct BattleEnigmaBerry *src;
- u8 r4;
+ u8 battlerId;
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
@@ -821,17 +828,17 @@ static void SetAllPlayersBerryData(void)
for (i = 0; i < numPlayers; i++)
{
src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2);
- r4 = gLinkPlayers[i].lp_field_18;
+ battlerId = gLinkPlayers[i].id;
for (j = 0; j < BERRY_NAME_COUNT - 1; j++)
- gEnigmaBerries[r4].name[j] = src->name[j];
- gEnigmaBerries[r4].name[j] = EOS;
+ gEnigmaBerries[battlerId].name[j] = src->name[j];
+ gEnigmaBerries[battlerId].name[j] = EOS;
for (j = 0; j < BERRY_ITEM_EFFECT_COUNT; j++)
- gEnigmaBerries[r4].itemEffect[j] = src->itemEffect[j];
+ gEnigmaBerries[battlerId].itemEffect[j] = src->itemEffect[j];
- gEnigmaBerries[r4].holdEffect = src->holdEffect;
- gEnigmaBerries[r4].holdEffectParam = src->holdEffectParam;
+ gEnigmaBerries[battlerId].holdEffect = src->holdEffect;
+ gEnigmaBerries[battlerId].holdEffectParam = src->holdEffectParam;
}
}
else
@@ -958,8 +965,8 @@ static void CB2_HandleStartBattle(void)
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
{
- gLinkPlayers[0].lp_field_18 = 0;
- gLinkPlayers[1].lp_field_18 = 1;
+ gLinkPlayers[0].id = 0;
+ gLinkPlayers[1].id = 1;
}
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_180, 32);
@@ -1146,10 +1153,10 @@ static void CB2_HandleStartMultiPartnerBattle(void)
{
u8 language;
- gLinkPlayers[0].lp_field_18 = 0;
- gLinkPlayers[1].lp_field_18 = 2;
- gLinkPlayers[2].lp_field_18 = 1;
- gLinkPlayers[3].lp_field_18 = 3;
+ gLinkPlayers[0].id = 0;
+ gLinkPlayers[1].id = 2;
+ gLinkPlayers[2].id = 1;
+ gLinkPlayers[3].id = 3;
GetFrontierTrainerName(gLinkPlayers[2].name, gTrainerBattleOpponent_A);
GetFrontierTrainerName(gLinkPlayers[3].name, gTrainerBattleOpponent_B);
sub_8165B88(&language, gTrainerBattleOpponent_A);
@@ -1207,7 +1214,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
if ((GetBlockReceivedStatus() & 3) == 3)
{
ResetBlockReceivedFlags();
- if (gLinkPlayers[playerMultiplayerId].lp_field_18 != 0)
+ if (gLinkPlayers[playerMultiplayerId].id != 0)
{
memcpy(gPlayerParty, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2);
memcpy(gPlayerParty + 3, gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon) * 2);
@@ -1231,7 +1238,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
if ((GetBlockReceivedStatus() & 3) == 3)
{
ResetBlockReceivedFlags();
- if (gLinkPlayers[playerMultiplayerId].lp_field_18 != 0)
+ if (gLinkPlayers[playerMultiplayerId].id != 0)
{
memcpy(gPlayerParty + 2, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon));
memcpy(gPlayerParty + 5, gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon));
@@ -1382,7 +1389,7 @@ static void CB2_PreInitMultiBattle(void)
u8 playerMultiplierId;
s32 numPlayers = 4;
u8 r4 = 0xF;
- u32* savedBattleTypeFlags;
+ u32 *savedBattleTypeFlags;
void (**savedCallback)(void);
if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
@@ -1422,8 +1429,8 @@ static void CB2_PreInitMultiBattle(void)
if (numPlayers == 4)
{
- if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[playerMultiplierId].lp_field_18 & 1))
- || (gLinkPlayers[i].lp_field_18 & 1 && gLinkPlayers[playerMultiplierId].lp_field_18 & 1))
+ if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[playerMultiplierId].id & 1))
+ || (gLinkPlayers[i].id & 1 && gLinkPlayers[playerMultiplierId].id & 1))
{
memcpy(gUnknown_02022FF8, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * 3);
}
@@ -1476,7 +1483,7 @@ static void CB2_PreInitMultiBattle(void)
static void CB2_PreInitIngamePlayerPartnerBattle(void)
{
- u32* savedBattleTypeFlags;
+ u32 *savedBattleTypeFlags;
void (**savedCallback)(void);
savedCallback = &gBattleStruct->savedCallback;
@@ -1583,7 +1590,7 @@ static void CB2_HandleStartMultiBattle(void)
for (id = 0; id < MAX_LINK_PLAYERS; id++)
{
sub_8185F90(gBlockRecvBuffer[id][1]);
- switch (gLinkPlayers[id].lp_field_18)
+ switch (gLinkPlayers[id].id)
{
case 0:
gTasks[var].data[3] |= gBlockRecvBuffer[id][1] & 0x3F;
@@ -1620,7 +1627,7 @@ static void CB2_HandleStartMultiBattle(void)
{
if (id == playerMultiplayerId)
{
- switch (gLinkPlayers[id].lp_field_18)
+ switch (gLinkPlayers[id].id)
{
case 0:
case 3:
@@ -1634,10 +1641,10 @@ static void CB2_HandleStartMultiBattle(void)
}
else
{
- if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerMultiplayerId].lp_field_18 & 1))
- || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerMultiplayerId].lp_field_18 & 1)))
+ if ((!(gLinkPlayers[id].id & 1) && !(gLinkPlayers[playerMultiplayerId].id & 1))
+ || ((gLinkPlayers[id].id & 1) && (gLinkPlayers[playerMultiplayerId].id & 1)))
{
- switch (gLinkPlayers[id].lp_field_18)
+ switch (gLinkPlayers[id].id)
{
case 0:
case 3:
@@ -1651,7 +1658,7 @@ static void CB2_HandleStartMultiBattle(void)
}
else
{
- switch (gLinkPlayers[id].lp_field_18)
+ switch (gLinkPlayers[id].id)
{
case 0:
case 3:
@@ -1683,7 +1690,7 @@ static void CB2_HandleStartMultiBattle(void)
{
if (id == playerMultiplayerId)
{
- switch (gLinkPlayers[id].lp_field_18)
+ switch (gLinkPlayers[id].id)
{
case 0:
case 3:
@@ -1697,10 +1704,10 @@ static void CB2_HandleStartMultiBattle(void)
}
else
{
- if ((!(gLinkPlayers[id].lp_field_18 & 1) && !(gLinkPlayers[playerMultiplayerId].lp_field_18 & 1))
- || ((gLinkPlayers[id].lp_field_18 & 1) && (gLinkPlayers[playerMultiplayerId].lp_field_18 & 1)))
+ if ((!(gLinkPlayers[id].id & 1) && !(gLinkPlayers[playerMultiplayerId].id & 1))
+ || ((gLinkPlayers[id].id & 1) && (gLinkPlayers[playerMultiplayerId].id & 1)))
{
- switch (gLinkPlayers[id].lp_field_18)
+ switch (gLinkPlayers[id].id)
{
case 0:
case 3:
@@ -1714,7 +1721,7 @@ static void CB2_HandleStartMultiBattle(void)
}
else
{
- switch (gLinkPlayers[id].lp_field_18)
+ switch (gLinkPlayers[id].id)
{
case 0:
case 3:
@@ -1799,7 +1806,7 @@ static void CB2_HandleStartMultiBattle(void)
SetMainCallback2(BattleMainCB2);
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
- gTrainerBattleOpponent_A = TRAINER_OPPONENT_800;
+ gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT;
gBattleTypeFlags |= BATTLE_TYPE_20;
}
}
@@ -1819,7 +1826,7 @@ void BattleMainCB2(void)
{
gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED;
ResetPaletteFadeControl();
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
SetMainCallback2(CB2_QuitRecordedBattle);
}
}
@@ -1908,7 +1915,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
s32 i, j;
u8 monsCount;
- if (trainerNum == SECRET_BASE_OPPONENT)
+ if (trainerNum == TRAINER_SECRET_BASE)
return 0;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER
@@ -2026,7 +2033,7 @@ void sub_8038A04(void) // unused
void VBlankCB_Battle(void)
{
- // change gRngSeed every vblank unless the battle could be recorded
+ // Change gRngSeed every vblank unless the battle could be recorded.
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_RECORDED)))
Random();
@@ -2088,7 +2095,7 @@ static void sub_8038B94(u8 taskId)
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
- switch (gLinkPlayers[r2].lp_field_18)
+ switch (gLinkPlayers[r2].id)
{
case 0:
case 2:
@@ -2192,7 +2199,7 @@ void sub_8038D64(void)
}
for (i = 80; i < 160; i++)
{
- asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter
+ asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter.
gScanlineEffectRegBuffers[0][i] = 0xFF10;
gScanlineEffectRegBuffers[1][i] = 0xFF10;
}
@@ -2210,10 +2217,10 @@ void sub_8038D64(void)
sub_80356D0();
LoadCompressedPalette(gBattleTextboxPalette, 0, 64);
- ApplyPlayerChosenFrameToBattleMenu();
+ LoadBattleMenuWindowGfx();
ResetSpriteData();
ResetTasks();
- LoadBattleEntryBackground();
+ DrawBattleEntryBackground();
SetGpuReg(REG_OFFSET_WINOUT, 0x37);
FreeAllSpritePalettes();
gReservedSpritePaletteCount = 4;
@@ -2255,7 +2262,7 @@ static void sub_8038F34(void)
case 1:
if (--gBattleCommunication[1] == 0)
{
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -2312,7 +2319,7 @@ static void sub_8038F34(void)
for (i = 0; i < 2; i++)
LoadChosenBattleElement(i);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
gBattleCommunication[MULTIUSE_STATE]++;
break;
case 4:
@@ -2327,7 +2334,7 @@ static void sub_8038F34(void)
if (sub_800A520() == TRUE)
{
sub_800ADF8();
- BattleHandleAddTextPrinter(gText_LinkStandby3, 0);
+ BattlePutTextOnWindow(gText_LinkStandby3, 0);
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -2363,25 +2370,25 @@ u32 sub_80391E0(u8 arrayId, u8 caseId)
switch (caseId)
{
case 0:
- ret = gUnknown_0831AA08[arrayId].bg;
+ ret = gBattleBgTemplates[arrayId].bg;
break;
case 1:
- ret = gUnknown_0831AA08[arrayId].charBaseIndex;
+ ret = gBattleBgTemplates[arrayId].charBaseIndex;
break;
case 2:
- ret = gUnknown_0831AA08[arrayId].mapBaseIndex;
+ ret = gBattleBgTemplates[arrayId].mapBaseIndex;
break;
case 3:
- ret = gUnknown_0831AA08[arrayId].screenSize;
+ ret = gBattleBgTemplates[arrayId].screenSize;
break;
case 4:
- ret = gUnknown_0831AA08[arrayId].paletteMode;
+ ret = gBattleBgTemplates[arrayId].paletteMode;
break;
case 5:
- ret = gUnknown_0831AA08[arrayId].priority;
+ ret = gBattleBgTemplates[arrayId].priority;
break;
case 6:
- ret = gUnknown_0831AA08[arrayId].baseTile;
+ ret = gBattleBgTemplates[arrayId].baseTile;
break;
}
@@ -2406,7 +2413,7 @@ static void sub_80392A8(void)
gBattle_BG3_Y = 0;
sub_80356D0();
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
- ApplyPlayerChosenFrameToBattleMenu();
+ LoadBattleMenuWindowGfx();
for (i = 0; i < 2; i++)
LoadChosenBattleElement(i);
@@ -2417,7 +2424,7 @@ static void sub_80392A8(void)
gReservedSpritePaletteCount = 4;
SetVBlankCallback(VBlankCB_Battle);
SetMainCallback2(sub_803937C);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
gBattleCommunication[MULTIUSE_STATE] = 0;
}
@@ -2453,7 +2460,7 @@ static void sub_803939C(void)
case 3:
if (!gPaletteFade.active)
{
- BattleHandleAddTextPrinter(gText_RecordBattleToPass, 0);
+ BattlePutTextOnWindow(gText_RecordBattleToPass, 0);
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -2461,7 +2468,7 @@ static void sub_803939C(void)
if (!IsTextPrinterActive(0))
{
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
- BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
+ BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC);
gBattleCommunication[CURSOR_POSITION] = 1;
BattleCreateYesNoCursorAt(1);
gBattleCommunication[MULTIUSE_STATE]++;
@@ -2515,7 +2522,7 @@ static void sub_803939C(void)
if (gMain.field_439_x4)
{
sub_800ADF8();
- BattleHandleAddTextPrinter(gText_LinkStandby3, 0);
+ BattlePutTextOnWindow(gText_LinkStandby3, 0);
}
gBattleCommunication[MULTIUSE_STATE]++;
}
@@ -2546,14 +2553,14 @@ static void sub_803939C(void)
{
PlaySE(SE_SAVE);
BattleStringExpandPlaceholdersToDisplayedString(gText_BattleRecordedOnPass);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattleCommunication[1] = 0x80;
gBattleCommunication[MULTIUSE_STATE]++;
}
else
{
BattleStringExpandPlaceholdersToDisplayedString(gText_BattleRecordCouldntBeSaved);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattleCommunication[1] = 0x80;
gBattleCommunication[MULTIUSE_STATE]++;
}
@@ -2564,7 +2571,7 @@ static void sub_803939C(void)
if (gMain.field_439_x4)
{
sub_800ADF8();
- BattleHandleAddTextPrinter(gText_LinkStandby3, 0);
+ BattlePutTextOnWindow(gText_LinkStandby3, 0);
}
gBattleCommunication[MULTIUSE_STATE]++;
}
@@ -2577,7 +2584,7 @@ static void sub_803939C(void)
{
if (sub_800A520() == TRUE)
{
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
gBattleCommunication[1] = 0x20;
gBattleCommunication[MULTIUSE_STATE] = 8;
}
@@ -2585,7 +2592,7 @@ static void sub_803939C(void)
}
else
{
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
gBattleCommunication[1] = 0x20;
gBattleCommunication[MULTIUSE_STATE] = 8;
}
@@ -2610,7 +2617,7 @@ static void TryCorrectShedinjaLanguage(struct Pokemon *mon)
u32 sub_80397C4(u32 setId, u32 tableId)
{
- return gUnknown_0831ABA0[setId][tableId].width * 8;
+ return gBattleWindowTemplates[setId][tableId].width * 8;
}
#define sBattler data[0]
@@ -2620,7 +2627,7 @@ void oac_poke_opponent(struct Sprite *sprite)
{
sprite->callback = sub_803980C;
StartSpriteAnimIfDifferent(sprite, 0);
- BeginNormalPaletteFade(0x20000, 0, 10, 10, 0x2108);
+ BeginNormalPaletteFade(0x20000, 0, 10, 10, RGB(8, 8, 8));
}
static void sub_803980C(struct Sprite *sprite)
@@ -2643,7 +2650,7 @@ static void sub_8039838(struct Sprite *sprite)
SetHealthboxSpriteVisible(gHealthboxSpriteIds[sprite->sBattler]);
sprite->callback = sub_8039894;
StartSpriteAnimIfDifferent(sprite, 0);
- BeginNormalPaletteFade(0x20000, 0, 10, 0, 0x2108);
+ BeginNormalPaletteFade(0x20000, 0, 10, 0, RGB(8, 8, 8));
}
}
@@ -2687,7 +2694,7 @@ static void sub_80398D0(struct Sprite *sprite)
extern const struct MonCoords gMonFrontPicCoords[];
extern const struct MonCoords gCastformFrontSpriteCoords[];
-void sub_8039934(struct Sprite *sprite)
+void SpriteCB_FaintOpponentMon(struct Sprite *sprite)
{
u8 battler = sprite->sBattler;
u16 species;
@@ -2698,7 +2705,7 @@ void sub_8039934(struct Sprite *sprite)
else
species = sprite->sSpeciesId;
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_PERSONALITY); // Unused return value
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_PERSONALITY); // Unused return value.
if (species == SPECIES_UNOWN)
{
@@ -2707,9 +2714,9 @@ void sub_8039934(struct Sprite *sprite)
u16 unownSpecies;
if (unownForm == 0)
- unownSpecies = SPECIES_UNOWN; // Use the A Unown form
+ unownSpecies = SPECIES_UNOWN; // Use the A Unown form.
else
- unownSpecies = NUM_SPECIES + unownForm; // Use one of the other Unown letters
+ unownSpecies = NUM_SPECIES + unownForm; // Use one of the other Unown letters.
yOffset = gMonFrontPicCoords[unownSpecies].y_offset;
}
@@ -2728,25 +2735,23 @@ void sub_8039934(struct Sprite *sprite)
sprite->data[3] = 8 - yOffset / 8;
sprite->data[4] = 1;
- sprite->callback = sub_8039A48;
+ sprite->callback = SpriteCB_AnimFaintOpponent;
}
-static void sub_8039A48(struct Sprite *sprite)
+static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite)
{
s32 i;
- sprite->data[4]--;
- if (sprite->data[4] == 0)
+ if (--sprite->data[4] == 0)
{
sprite->data[4] = 2;
- sprite->pos2.y += 8;
- sprite->data[3]--;
- if (sprite->data[3] < 0)
+ sprite->pos2.y += 8; // Move the sprite down.
+ if (--sprite->data[3] < 0)
{
FreeSpriteOamMatrix(sprite);
DestroySprite(sprite);
}
- else
+ else // Erase bottom part of the sprite to create a smooth illusion of mon falling down.
{
u8 *dst = (u8 *)gMonSpritesGfxPtr->sprites[GetBattlerPosition(sprite->sBattler)] + (gBattleMonForms[sprite->sBattler] << 11) + (sprite->data[3] << 8);
@@ -2802,7 +2807,7 @@ void sub_8039BB4(struct Sprite *sprite)
static void oac_poke_ally_(struct Sprite *sprite)
{
- if ((gIntroSlideFlags & 1) == 0)
+ if (!(gIntroSlideFlags & 1))
{
sprite->pos2.x -= 2;
if (sprite->pos2.x == 0)
@@ -2831,85 +2836,100 @@ void sub_8039C00(struct Sprite *sprite)
}
}
-void dp11b_obj_instanciate(u8 battler, u8 b, s8 c, s8 d)
+#define sSinIndex data[0]
+#define sDelta data[1]
+#define sAmplitude data[2]
+#define sBouncerSpriteId data[3]
+#define sWhich data[4]
+
+void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude)
{
- u8 bounceHealthBoxSpriteId;
- u8 spriteId2;
+ u8 invisibleSpriteId;
+ u8 bouncerSpriteId;
- if (b)
+ switch (which)
{
- if (gBattleSpritesDataPtr->healthBoxesData[battler].flag_x2)
+ case BOUNCE_HEALTHBOX:
+ default:
+ if (gBattleSpritesDataPtr->healthBoxesData[battler].healthboxIsBouncing)
return;
- }
- else
- {
- if (gBattleSpritesDataPtr->healthBoxesData[battler].flag_x4)
+ break;
+ case BOUNCE_MON:
+ if (gBattleSpritesDataPtr->healthBoxesData[battler].battlerIsBouncing)
return;
+ break;
}
- bounceHealthBoxSpriteId = CreateInvisibleSpriteWithCallback(SpriteCB_HealthBoxBounce);
- if (b == TRUE)
+ invisibleSpriteId = CreateInvisibleSpriteWithCallback(SpriteCB_BounceEffect);
+ if (which == BOUNCE_HEALTHBOX)
{
- spriteId2 = gHealthboxSpriteIds[battler];
- gBattleSpritesDataPtr->healthBoxesData[battler].field_2 = bounceHealthBoxSpriteId;
- gBattleSpritesDataPtr->healthBoxesData[battler].flag_x2 = 1;
- gSprites[bounceHealthBoxSpriteId].data[0] = 0x80;
+ bouncerSpriteId = gHealthboxSpriteIds[battler];
+ gBattleSpritesDataPtr->healthBoxesData[battler].healthboxBounceSpriteId = invisibleSpriteId;
+ gBattleSpritesDataPtr->healthBoxesData[battler].healthboxIsBouncing = 1;
+ gSprites[invisibleSpriteId].sSinIndex = 128; // 0
}
else
{
- spriteId2 = gBattlerSpriteIds[battler];
- gBattleSpritesDataPtr->healthBoxesData[battler].field_3 = bounceHealthBoxSpriteId;
- gBattleSpritesDataPtr->healthBoxesData[battler].flag_x4 = 1;
- gSprites[bounceHealthBoxSpriteId].data[0] = 0xC0;
- }
- gSprites[bounceHealthBoxSpriteId].data[1] = c;
- gSprites[bounceHealthBoxSpriteId].data[2] = d;
- gSprites[bounceHealthBoxSpriteId].data[3] = spriteId2;
- gSprites[bounceHealthBoxSpriteId].data[4] = b;
- gSprites[spriteId2].pos2.x = 0;
- gSprites[spriteId2].pos2.y = 0;
+ bouncerSpriteId = gBattlerSpriteIds[battler];
+ gBattleSpritesDataPtr->healthBoxesData[battler].battlerBounceSpriteId = invisibleSpriteId;
+ gBattleSpritesDataPtr->healthBoxesData[battler].battlerIsBouncing = 1;
+ gSprites[invisibleSpriteId].sSinIndex = 192; // -1
+ }
+ gSprites[invisibleSpriteId].sDelta = delta;
+ gSprites[invisibleSpriteId].sAmplitude = amplitude;
+ gSprites[invisibleSpriteId].sBouncerSpriteId = bouncerSpriteId;
+ gSprites[invisibleSpriteId].sWhich = which;
+ gSprites[bouncerSpriteId].pos2.x = 0;
+ gSprites[bouncerSpriteId].pos2.y = 0;
}
-void dp11b_obj_free(u8 battler, bool8 b)
+void EndBounceEffect(u8 battler, u8 which)
{
- u8 r4;
+ u8 bouncerSpriteId;
- if (b == TRUE)
+ if (which == BOUNCE_HEALTHBOX)
{
- if (!gBattleSpritesDataPtr->healthBoxesData[battler].flag_x2)
+ if (!gBattleSpritesDataPtr->healthBoxesData[battler].healthboxIsBouncing)
return;
- r4 = gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].field_2].data[3];
- DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].field_2]);
- gBattleSpritesDataPtr->healthBoxesData[battler].flag_x2 = 0;
+ bouncerSpriteId = gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].healthboxBounceSpriteId].sBouncerSpriteId;
+ DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].healthboxBounceSpriteId]);
+ gBattleSpritesDataPtr->healthBoxesData[battler].healthboxIsBouncing = 0;
}
else
{
- if (!gBattleSpritesDataPtr->healthBoxesData[battler].flag_x4)
+ if (!gBattleSpritesDataPtr->healthBoxesData[battler].battlerIsBouncing)
return;
- r4 = gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].field_3].data[3];
- DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].field_3]);
- gBattleSpritesDataPtr->healthBoxesData[battler].flag_x4 = 0;
+ bouncerSpriteId = gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].battlerBounceSpriteId].sBouncerSpriteId;
+ DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].battlerBounceSpriteId]);
+ gBattleSpritesDataPtr->healthBoxesData[battler].battlerIsBouncing = 0;
}
- gSprites[r4].pos2.x = 0;
- gSprites[r4].pos2.y = 0;
+
+ gSprites[bouncerSpriteId].pos2.x = 0;
+ gSprites[bouncerSpriteId].pos2.y = 0;
}
-static void SpriteCB_HealthBoxBounce(struct Sprite *sprite)
+static void SpriteCB_BounceEffect(struct Sprite *sprite)
{
- u8 spriteId = sprite->data[3];
- s32 var;
+ u8 bouncerSpriteId = sprite->sBouncerSpriteId;
+ s32 index;
- if (sprite->data[4] == 1)
- var = sprite->data[0];
+ if (sprite->sWhich == BOUNCE_HEALTHBOX)
+ index = sprite->sSinIndex;
else
- var = sprite->data[0];
+ index = sprite->sSinIndex;
- gSprites[spriteId].pos2.y = Sin(var, sprite->data[2]) + sprite->data[2];
- sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF;
+ gSprites[bouncerSpriteId].pos2.y = Sin(index, sprite->sAmplitude) + sprite->sAmplitude;
+ sprite->sSinIndex = (sprite->sSinIndex + sprite->sDelta) & 0xFF;
}
+#undef sSinIndex
+#undef sDelta
+#undef sAmplitude
+#undef sBouncerSpriteId
+#undef sWhich
+
void sub_8039E44(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
@@ -3032,10 +3052,10 @@ static void BattleStartClearSetData(void)
gLeveledUpInBattle = 0;
gAbsentBattlerFlags = 0;
gBattleStruct->runTries = 0;
- gBattleStruct->field_79 = 0;
- gBattleStruct->field_7A = 0;
- *(&gBattleStruct->field_7C) = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275;
- gBattleStruct->field_7B = 3;
+ gBattleStruct->safariGoNearCounter = 0;
+ gBattleStruct->safariPkblThrowCounter = 0;
+ *(&gBattleStruct->safariCatchFactor) = gBaseStats[GetMonData(&gEnemyParty[0], MON_DATA_SPECIES)].catchRate * 100 / 1275;
+ gBattleStruct->safariEscapeFactor = 3;
gBattleStruct->wildVictorySong = 0;
gBattleStruct->moneyMultiplier = 1;
@@ -3053,7 +3073,7 @@ static void BattleStartClearSetData(void)
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
- *(gBattleStruct->AI_monToSwitchIntoId + i) = 6;
+ *(gBattleStruct->AI_monToSwitchIntoId + i) = PARTY_SIZE;
}
gBattleStruct->field_DF = 0;
@@ -3065,7 +3085,7 @@ static void BattleStartClearSetData(void)
for (i = 0; i < sizeof(struct BattleResults); i++)
dataPtr[i] = 0;
- gBattleResults.unk5_6 = IsMonShiny(&gEnemyParty[0]);
+ gBattleResults.shinyWildMon = IsMonShiny(&gEnemyParty[0]);
gBattleStruct->field_2A0 = 0;
gBattleStruct->field_2A1 = 0;
@@ -3095,7 +3115,7 @@ void SwitchInClearSetData(void)
if (gBattleMoves[gCurrentMove].effect == EFFECT_BATON_PASS)
{
gBattleMons[gActiveBattler].status2 &= (STATUS2_CONFUSION | STATUS2_FOCUS_ENERGY | STATUS2_SUBSTITUTE | STATUS2_ESCAPE_PREVENTION | STATUS2_CURSED);
- gStatuses3[gActiveBattler] &= (STATUS3_LEECHSEED_BANK | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED | STATUS3_MUDSPORT | STATUS3_WATERSPORT);
+ gStatuses3[gActiveBattler] &= (STATUS3_LEECHSEED_BATTLER | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED | STATUS3_MUDSPORT | STATUS3_WATERSPORT);
for (i = 0; i < gBattlersCount; i++)
{
@@ -3213,7 +3233,7 @@ void FaintClearSetData(void)
gProtectStructs[gActiveBattler].protected = 0;
gProtectStructs[gActiveBattler].endured = 0;
- gProtectStructs[gActiveBattler].onlyStruggle = 0;
+ gProtectStructs[gActiveBattler].noValidMoves = 0;
gProtectStructs[gActiveBattler].helpingHand = 0;
gProtectStructs[gActiveBattler].bounceMove = 0;
gProtectStructs[gActiveBattler].stealMove = 0;
@@ -3413,7 +3433,7 @@ static void BattleIntroDrawTrainersOrMonsSprites(void)
static void BattleIntroDrawPartySummaryScreens(void)
{
s32 i;
- struct HpAndStatus hpStatus[6];
+ struct HpAndStatus hpStatus[PARTY_SIZE];
if (gBattleControllerExecFlags)
return;
@@ -3464,7 +3484,7 @@ static void BattleIntroDrawPartySummaryScreens(void)
// wild battles don't show the party summary.
// Still, there's no point in having dead code.
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE
|| GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG)
@@ -3834,12 +3854,12 @@ static void TryDoEventsBeforeFirstTurn(void)
if (gBattleStruct->switchInAbilitiesCounter == 0)
{
for (i = 0; i < gBattlersCount; i++)
- gBattleTurnOrder[i] = i;
+ gBattlerByTurnOrder[i] = i;
for (i = 0; i < gBattlersCount - 1; i++)
{
for (j = i + 1; j < gBattlersCount; j++)
{
- if (GetWhoStrikesFirst(gBattleTurnOrder[i], gBattleTurnOrder[j], TRUE) != 0)
+ if (GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], TRUE) != 0)
SwapTurnOrder(i, j);
}
}
@@ -3850,10 +3870,10 @@ static void TryDoEventsBeforeFirstTurn(void)
gBattleStruct->overworldWeatherDone = TRUE;
return;
}
- // check all switch in abilities happening from the fastest mon to slowest
+ // Check all switch in abilities happening from the fastest mon to slowest.
while (gBattleStruct->switchInAbilitiesCounter < gBattlersCount)
{
- if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattleTurnOrder[gBattleStruct->switchInAbilitiesCounter], 0, 0, 0) != 0)
+ if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerByTurnOrder[gBattleStruct->switchInAbilitiesCounter], 0, 0, 0) != 0)
effect++;
gBattleStruct->switchInAbilitiesCounter++;
@@ -3865,10 +3885,10 @@ static void TryDoEventsBeforeFirstTurn(void)
return;
if (AbilityBattleEffects(ABILITYEFFECT_TRACE, 0, 0, 0, 0) != 0)
return;
- // check all switch in items having effect from the fastest mon to slowest
+ // Check all switch in items having effect from the fastest mon to slowest.
while (gBattleStruct->switchInItemsCounter < gBattlersCount)
{
- if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattleTurnOrder[gBattleStruct->switchInItemsCounter], 0) != 0)
+ if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattlerByTurnOrder[gBattleStruct->switchInItemsCounter], 0) != 0)
effect++;
gBattleStruct->switchInItemsCounter++;
@@ -3878,14 +3898,14 @@ static void TryDoEventsBeforeFirstTurn(void)
}
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
- *(gBattleStruct->monToSwitchIntoId + i) = 6;
+ *(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE;
gChosenActionByBattler[i] = B_ACTION_NONE;
gChosenMoveByBattler[i] = MOVE_NONE;
}
TurnValuesCleanUp(FALSE);
SpecialStatusesClear();
*(&gBattleStruct->field_91) = gAbsentBattlerFlags;
- BattleHandleAddTextPrinter(gText_EmptyString3, 0);
+ BattlePutTextOnWindow(gText_EmptyString3, 0);
gBattleMainFunc = HandleTurnActionSelectionState;
ResetSentPokesToOpponentValue();
@@ -3944,15 +3964,15 @@ void BattleTurnPassed(void)
TurnValuesCleanUp(TRUE);
if (gBattleOutcome == 0)
{
- if (UpdateTurnCounters() != 0)
+ if (UpdateTurnCounters())
return;
- if (TurnBasedEffects() != 0)
+ if (TurnBasedEffects())
return;
}
- if (HandleFaintedMonActions() != 0)
+ if (HandleFaintedMonActions())
return;
gBattleStruct->faintedActionsState = 0;
- if (HandleWishPerishSongOnTurnEnd() != 0)
+ if (HandleWishPerishSongOnTurnEnd())
return;
TurnValuesCleanUp(FALSE);
@@ -3989,10 +4009,10 @@ void BattleTurnPassed(void)
}
for (i = 0; i < 4; i++)
- *(gBattleStruct->monToSwitchIntoId + i) = 6;
+ *(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE;
*(&gBattleStruct->field_91) = gAbsentBattlerFlags;
- BattleHandleAddTextPrinter(gText_EmptyString3, 0);
+ BattlePutTextOnWindow(gText_EmptyString3, 0);
gBattleMainFunc = HandleTurnActionSelectionState;
gRandomTurnNumber = Random();
@@ -4045,7 +4065,7 @@ u8 IsRunningFromBattleImpossible(void)
return 2;
}
}
- i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0);
+ i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0);
if (i != 0 && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL))
{
gBattleScripting.battler = i - 1;
@@ -4122,16 +4142,16 @@ static void HandleTurnActionSelectionState(void)
u8 position = GetBattlerPosition(gActiveBattler);
switch (gBattleCommunication[gActiveBattler])
{
- case STATE_TURN_START_RECORD: // recorded battle related on start of every turn
+ case STATE_TURN_START_RECORD: // Recorded battle related action on start of every turn.
RecordedBattle_CopyBattlerMoves();
gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
break;
- case STATE_BEFORE_ACTION_CHOSEN: // choose an action
- *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6;
+ case STATE_BEFORE_ACTION_CHOSEN: // Choose an action.
+ *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
if (gBattleTypeFlags & BATTLE_TYPE_MULTI
- || !(position & BIT_FLANK)
+ || (position & BIT_FLANK) == B_FLANK_LEFT
|| gBattleStruct->field_91 & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))]
- || gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] == 5)
+ || gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] == STATE_WAIT_ACTION_CONFIRMED)
{
if (gBattleStruct->field_91 & gBitTable[gActiveBattler])
{
@@ -4158,7 +4178,7 @@ static void HandleTurnActionSelectionState(void)
}
}
break;
- case STATE_WAIT_ACTION_CHOSEN: // try to perform an action
+ case STATE_WAIT_ACTION_CHOSEN: // Try to perform an action.
if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
{
RecordedBattle_SetBattlerAction(gActiveBattler, gBattleBufferB[gActiveBattler][1]);
@@ -4229,25 +4249,25 @@ static void HandleTurnActionSelectionState(void)
|| gBattleTypeFlags & BATTLE_TYPE_ARENA
|| gStatuses3[gActiveBattler] & STATUS3_ROOTED)
{
- BtlController_EmitChoosePokemon(0, 2, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_CANT_SWITCH, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
}
- else if ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_SHADOW_TAG, 0, 0))
- || ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_ARENA_TRAP, 0, 0))
+ else if ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG))
+ || ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP))
&& !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING)
&& gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE)
- || ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0))
+ || ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0))
&& IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)))
{
- BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | 4, 6, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ABILITY_PREVENTS, 6, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]);
}
else
{
if (gActiveBattler == 2 && gChosenActionByBattler[0] == B_ACTION_SWITCH)
- BtlController_EmitChoosePokemon(0, 0, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
else if (gActiveBattler == 3 && gChosenActionByBattler[1] == B_ACTION_SWITCH)
- BtlController_EmitChoosePokemon(0, 0, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
else
- BtlController_EmitChoosePokemon(0, 0, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
}
MarkBattlerForControllerExec(gActiveBattler);
break;
@@ -4266,13 +4286,13 @@ static void HandleTurnActionSelectionState(void)
MarkBattlerForControllerExec(gActiveBattler);
break;
case B_ACTION_CANCEL_PARTNER:
- gBattleCommunication[gActiveBattler] = 7;
- gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))] = 1;
+ gBattleCommunication[gActiveBattler] = STATE_WAIT_SET_BEFORE_ACTION;
+ gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))] = STATE_BEFORE_ACTION_CHOSEN;
RecordedBattle_ClearBattlerAction(gActiveBattler, 1);
if (gBattleMons[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))].status2 & STATUS2_MULTIPLETURNS
|| gBattleMons[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))].status2 & STATUS2_RECHARGE)
{
- BtlController_EmitCmd50(0);
+ BtlController_EmitEndBounceEffect(0);
MarkBattlerForControllerExec(gActiveBattler);
return;
}
@@ -4285,7 +4305,7 @@ static void HandleTurnActionSelectionState(void)
RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))), 1);
}
else if (gChosenActionByBattler[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))] == B_ACTION_USE_MOVE
- && (gProtectStructs[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))].onlyStruggle
+ && (gProtectStructs[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))].noValidMoves
|| gDisableStructs[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler)))].encoredMove))
{
RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))), 1);
@@ -4300,7 +4320,7 @@ static void HandleTurnActionSelectionState(void)
{
RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gActiveBattler))), 3);
}
- BtlController_EmitCmd50(0);
+ BtlController_EmitEndBounceEffect(0);
MarkBattlerForControllerExec(gActiveBattler);
return;
}
@@ -4310,7 +4330,7 @@ static void HandleTurnActionSelectionState(void)
&& gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN)
{
gSelectionBattleScripts[gActiveBattler] = BattleScript_AskIfWantsToForfeitMatch;
- gBattleCommunication[gActiveBattler] = 8;
+ gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT_MAY_RUN;
*(gBattleStruct->selectionScriptFinished + gActiveBattler) = FALSE;
*(gBattleStruct->stateIdAfterSelScript + gActiveBattler) = STATE_BEFORE_ACTION_CHOSEN;
return;
@@ -4320,7 +4340,7 @@ static void HandleTurnActionSelectionState(void)
&& gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN)
{
BattleScriptExecute(BattleScript_PrintCantRunFromTrainer);
- gBattleCommunication[gActiveBattler] = 1;
+ gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
}
else if (IsRunningFromBattleImpossible()
&& gBattleBufferB[gActiveBattler][1] == B_ACTION_RUN)
@@ -4362,7 +4382,7 @@ static void HandleTurnActionSelectionState(void)
sub_818603C(2);
if ((gBattleBufferB[gActiveBattler][2] | (gBattleBufferB[gActiveBattler][3] << 8)) == 0xFFFF)
{
- gBattleCommunication[gActiveBattler] = 1;
+ gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
RecordedBattle_ClearBattlerAction(gActiveBattler, 1);
}
else if (TrySetCantSelectMoveBattleScript())
@@ -4392,7 +4412,7 @@ static void HandleTurnActionSelectionState(void)
case B_ACTION_USE_ITEM:
if ((gBattleBufferB[gActiveBattler][1] | (gBattleBufferB[gActiveBattler][2] << 8)) == 0)
{
- gBattleCommunication[gActiveBattler] = 1;
+ gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
}
else
{
@@ -4401,9 +4421,9 @@ static void HandleTurnActionSelectionState(void)
}
break;
case B_ACTION_SWITCH:
- if (gBattleBufferB[gActiveBattler][1] == 6)
+ if (gBattleBufferB[gActiveBattler][1] == PARTY_SIZE)
{
- gBattleCommunication[gActiveBattler] = 1;
+ gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
RecordedBattle_ClearBattlerAction(gActiveBattler, 1);
}
else
@@ -4439,7 +4459,7 @@ static void HandleTurnActionSelectionState(void)
gHitMarker |= HITMARKER_RUN;
gBattleCommunication[gActiveBattler]++;
break;
- case B_ACTION_UNKNOWN9:
+ case B_ACTION_WALLY_THROW:
gBattleCommunication[gActiveBattler]++;
break;
}
@@ -4448,10 +4468,13 @@ static void HandleTurnActionSelectionState(void)
case STATE_WAIT_ACTION_CONFIRMED_STANDBY:
if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
{
- i = (sub_803CDB8() != 0);
+ if (AllAtActionConfirmed())
+ i = TRUE;
+ else
+ i = FALSE;
if (((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) != BATTLE_TYPE_DOUBLE)
- || (position & BIT_FLANK)
+ || (position & BIT_FLANK) != B_FLANK_LEFT
|| (*(&gBattleStruct->field_91) & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)]))
{
BtlController_EmitLinkStandbyMsg(0, 0, i);
@@ -4489,7 +4512,7 @@ static void HandleTurnActionSelectionState(void)
case STATE_WAIT_SET_BEFORE_ACTION:
if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
{
- gBattleCommunication[gActiveBattler] = 1;
+ gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
}
break;
case STATE_SELECTION_SCRIPT_MAY_RUN:
@@ -4521,7 +4544,7 @@ static void HandleTurnActionSelectionState(void)
}
}
- // check if everyone chose actions
+ // Check if everyone chose actions.
if (gBattleCommunication[ACTIONS_CONFIRMED_COUNT] == gBattlersCount)
{
sub_818603C(1);
@@ -4538,17 +4561,17 @@ static void HandleTurnActionSelectionState(void)
}
}
-static bool8 sub_803CDB8(void)
+static bool8 AllAtActionConfirmed(void)
{
- s32 i, var;
+ s32 i, count;
- for (var = 0, i = 0; i < gBattlersCount; i++)
+ for (count = 0, i = 0; i < gBattlersCount; i++)
{
- if (gBattleCommunication[i] == 5)
- var++;
+ if (gBattleCommunication[i] == STATE_WAIT_ACTION_CONFIRMED)
+ count++;
}
- if (var + 1 == gBattlersCount)
+ if (count + 1 == gBattlersCount)
return TRUE;
else
return FALSE;
@@ -4577,9 +4600,9 @@ void SwapTurnOrder(u8 id1, u8 id2)
gActionsByTurnOrder[id1] = gActionsByTurnOrder[id2];
gActionsByTurnOrder[id2] = temp;
- temp = gBattleTurnOrder[id1];
- gBattleTurnOrder[id1] = gBattleTurnOrder[id2];
- gBattleTurnOrder[id2] = temp;
+ temp = gBattlerByTurnOrder[id1];
+ gBattlerByTurnOrder[id1] = gBattlerByTurnOrder[id2];
+ gBattlerByTurnOrder[id2] = temp;
}
u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves)
@@ -4686,7 +4709,7 @@ u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves)
{
if (gChosenActionByBattler[battler1] == B_ACTION_USE_MOVE)
{
- if (gProtectStructs[battler1].onlyStruggle)
+ if (gProtectStructs[battler1].noValidMoves)
moveBattler1 = MOVE_STRUGGLE;
else
moveBattler1 = gBattleMons[battler1].moves[*(gBattleStruct->chosenMovePositions + battler1)];
@@ -4696,7 +4719,7 @@ u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves)
if (gChosenActionByBattler[battler2] == B_ACTION_USE_MOVE)
{
- if (gProtectStructs[battler2].onlyStruggle)
+ if (gProtectStructs[battler2].noValidMoves)
moveBattler2 = MOVE_STRUGGLE;
else
moveBattler2 = gBattleMons[battler2].moves[*(gBattleStruct->chosenMovePositions + battler2)];
@@ -4739,16 +4762,16 @@ u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves)
static void SetActionsAndBattlersTurnOrder(void)
{
- s32 var = 0;
+ s32 turnOrderId = 0;
s32 i, j;
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
{
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{
- gActionsByTurnOrder[var] = gChosenActionByBattler[gActiveBattler];
- gBattleTurnOrder[var] = gActiveBattler;
- var++;
+ gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
+ gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
+ turnOrderId++;
}
}
else
@@ -4759,7 +4782,7 @@ static void SetActionsAndBattlersTurnOrder(void)
{
if (gChosenActionByBattler[gActiveBattler] == B_ACTION_RUN)
{
- var = 5;
+ turnOrderId = 5;
break;
}
}
@@ -4769,27 +4792,27 @@ static void SetActionsAndBattlersTurnOrder(void)
if (gChosenActionByBattler[0] == B_ACTION_RUN)
{
gActiveBattler = 0;
- var = 5;
+ turnOrderId = 5;
}
if (gChosenActionByBattler[2] == B_ACTION_RUN)
{
gActiveBattler = 2;
- var = 5;
+ turnOrderId = 5;
}
}
- if (var == 5)
+ if (turnOrderId == 5) // One of battlers wants to run.
{
gActionsByTurnOrder[0] = gChosenActionByBattler[gActiveBattler];
- gBattleTurnOrder[0] = gActiveBattler;
- var = 1;
+ gBattlerByTurnOrder[0] = gActiveBattler;
+ turnOrderId = 1;
for (i = 0; i < gBattlersCount; i++)
{
if (i != gActiveBattler)
{
- gActionsByTurnOrder[var] = gChosenActionByBattler[i];
- gBattleTurnOrder[var] = i;
- var++;
+ gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[i];
+ gBattlerByTurnOrder[turnOrderId] = i;
+ turnOrderId++;
}
}
gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts;
@@ -4802,26 +4825,26 @@ static void SetActionsAndBattlersTurnOrder(void)
{
if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH)
{
- gActionsByTurnOrder[var] = gChosenActionByBattler[gActiveBattler];
- gBattleTurnOrder[var] = gActiveBattler;
- var++;
+ gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
+ gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
+ turnOrderId++;
}
}
for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++)
{
if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH)
{
- gActionsByTurnOrder[var] = gChosenActionByBattler[gActiveBattler];
- gBattleTurnOrder[var] = gActiveBattler;
- var++;
+ gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler];
+ gBattlerByTurnOrder[turnOrderId] = gActiveBattler;
+ turnOrderId++;
}
}
for (i = 0; i < gBattlersCount - 1; i++)
{
for (j = i + 1; j < gBattlersCount; j++)
{
- u8 battler1 = gBattleTurnOrder[i];
- u8 battler2 = gBattleTurnOrder[j];
+ u8 battler1 = gBattlerByTurnOrder[i];
+ u8 battler2 = gBattlerByTurnOrder[j];
if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[j] != B_ACTION_USE_ITEM
&& gActionsByTurnOrder[i] != B_ACTION_SWITCH
@@ -4868,7 +4891,7 @@ static void TurnValuesCleanUp(bool8 var0)
}
if (gDisableStructs[gActiveBattler].substituteHP == 0)
- gBattleMons[gActiveBattler].status2 &= ~(STATUS2_SUBSTITUTE);
+ gBattleMons[gActiveBattler].status2 &= ~(STATUS2_SUBSTITUTE);
}
gSideTimers[0].followmeTimer = 0;
@@ -4898,7 +4921,7 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void)
if (gChosenMoveByBattler[gActiveBattler] == MOVE_FOCUS_PUNCH
&& !(gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
&& !(gDisableStructs[gBattlerAttacker].truantCounter)
- && !(gProtectStructs[gActiveBattler].onlyStruggle))
+ && !(gProtectStructs[gActiveBattler].noValidMoves))
{
BattleScriptExecute(BattleScript_FocusPunchSetUp);
return;
@@ -4963,7 +4986,7 @@ static void HandleEndTurn_BattleWon(void)
BattleStopLowHpSound();
gBattlescriptCurrInstr = BattleScript_FrontierTrainerBattleWon;
- if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_3FE)
+ if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
PlayBGM(MUS_KACHI3);
else
PlayBGM(MUS_KACHI1);
@@ -5122,7 +5145,7 @@ static void HandleEndTurn_FinishBattle(void)
| BATTLE_TYPE_FRONTIER
| BATTLE_TYPE_EREADER_TRAINER
| BATTLE_TYPE_WALLY_TUTORIAL))
- && gBattleResults.unk5_6)
+ && gBattleResults.shinyWildMon)
{
sub_80EE184();
}
@@ -5254,7 +5277,7 @@ static void HandleAction_UseMove(void)
u8 side;
u8 var = 4;
- gBattlerAttacker = gBattleTurnOrder[gCurrentTurnActionNumber];
+ gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
if (*(&gBattleStruct->field_91) & gBitTable[gBattlerAttacker])
{
@@ -5271,9 +5294,9 @@ static void HandleAction_UseMove(void)
gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerAttacker);
// choose move
- if (gProtectStructs[gBattlerAttacker].onlyStruggle)
+ if (gProtectStructs[gBattlerAttacker].noValidMoves)
{
- gProtectStructs[gBattlerAttacker].onlyStruggle = 0;
+ gProtectStructs[gBattlerAttacker].noValidMoves = 0;
gCurrentMove = gChosenMove = MOVE_STRUGGLE;
gHitMarker |= HITMARKER_NO_PPDEDUCT;
*(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(MOVE_STRUGGLE, 0);
@@ -5386,7 +5409,7 @@ static void HandleAction_UseMove(void)
}
else
{
- gActiveBattler = gBattleTurnOrder[var];
+ gActiveBattler = gBattlerByTurnOrder[var];
RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability);
gSpecialStatuses[gActiveBattler].lightningRodRedirected = 1;
gBattlerTarget = gActiveBattler;
@@ -5468,7 +5491,7 @@ static void HandleAction_UseMove(void)
static void HandleAction_Switch(void)
{
- gBattlerAttacker = gBattleTurnOrder[gCurrentTurnActionNumber];
+ gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
gActionSelectionCursor[gBattlerAttacker] = 0;
@@ -5486,7 +5509,7 @@ static void HandleAction_Switch(void)
static void HandleAction_UseItem(void)
{
- gBattlerAttacker = gBattlerTarget = gBattleTurnOrder[gCurrentTurnActionNumber];
+ gBattlerAttacker = gBattlerTarget = gBattlerByTurnOrder[gCurrentTurnActionNumber];
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
ClearFuryCutterDestinyBondGrudge(gBattlerAttacker);
@@ -5645,7 +5668,7 @@ bool8 TryRunFromBattle(u8 battler)
static void HandleAction_Run(void)
{
- gBattlerAttacker = gBattleTurnOrder[gCurrentTurnActionNumber];
+ gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
{
@@ -5699,7 +5722,7 @@ static void HandleAction_Run(void)
static void HandleAction_WatchesCarefully(void)
{
- gBattlerAttacker = gBattleTurnOrder[gCurrentTurnActionNumber];
+ gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
gBattlescriptCurrInstr = gBattlescriptsForSafariActions[0];
@@ -5708,7 +5731,7 @@ static void HandleAction_WatchesCarefully(void)
static void HandleAction_SafariZoneBallThrow(void)
{
- gBattlerAttacker = gBattleTurnOrder[gCurrentTurnActionNumber];
+ gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
gNumSafariBalls--;
@@ -5719,22 +5742,22 @@ static void HandleAction_SafariZoneBallThrow(void)
static void HandleAction_ThrowPokeblock(void)
{
- gBattlerAttacker = gBattleTurnOrder[gCurrentTurnActionNumber];
+ gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
gBattleCommunication[MULTISTRING_CHOOSER] = gBattleBufferB[gBattlerAttacker][1] - 1;
gLastUsedItem = gBattleBufferB[gBattlerAttacker][2];
- if (gBattleResults.field_1F < 0xFF)
- gBattleResults.field_1F++;
- if (gBattleStruct->field_7A < 3)
- gBattleStruct->field_7A++;
- if (gBattleStruct->field_7B > 1)
+ if (gBattleResults.pokeblockThrows < 0xFF)
+ gBattleResults.pokeblockThrows++;
+ if (gBattleStruct->safariPkblThrowCounter < 3)
+ gBattleStruct->safariPkblThrowCounter++;
+ if (gBattleStruct->safariEscapeFactor > 1)
{
- if (gBattleStruct->field_7B < sUnknown_0831BCE0[gBattleStruct->field_7A][gBattleCommunication[MULTISTRING_CHOOSER]])
- gBattleStruct->field_7B = 1;
+ if (gBattleStruct->safariEscapeFactor < sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]])
+ gBattleStruct->safariEscapeFactor = 1;
else
- gBattleStruct->field_7B -= sUnknown_0831BCE0[gBattleStruct->field_7A][gBattleCommunication[MULTISTRING_CHOOSER]];
+ gBattleStruct->safariEscapeFactor -= sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]];
}
gBattlescriptCurrInstr = gBattlescriptsForSafariActions[2];
@@ -5743,26 +5766,26 @@ static void HandleAction_ThrowPokeblock(void)
static void HandleAction_GoNear(void)
{
- gBattlerAttacker = gBattleTurnOrder[gCurrentTurnActionNumber];
+ gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
- gBattleStruct->field_7C += sUnknown_0831BCEF[gBattleStruct->field_79];
- if (gBattleStruct->field_7C > 20)
- gBattleStruct->field_7C = 20;
+ gBattleStruct->safariCatchFactor += sGoNearCounterToCatchFactor[gBattleStruct->safariGoNearCounter];
+ if (gBattleStruct->safariCatchFactor > 20)
+ gBattleStruct->safariCatchFactor = 20;
- gBattleStruct->field_7B +=sUnknown_0831BCF3[gBattleStruct->field_79];
- if (gBattleStruct->field_7B > 20)
- gBattleStruct->field_7B = 20;
+ gBattleStruct->safariEscapeFactor += sGoNearCounterToEscapeFactor[gBattleStruct->safariGoNearCounter];
+ if (gBattleStruct->safariEscapeFactor > 20)
+ gBattleStruct->safariEscapeFactor = 20;
- if (gBattleStruct->field_79 < 3)
+ if (gBattleStruct->safariGoNearCounter < 3)
{
- gBattleStruct->field_79++;
+ gBattleStruct->safariGoNearCounter++;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
}
else
{
- gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1; // Can't get closer.
}
gBattlescriptCurrInstr = gBattlescriptsForSafariActions[1];
gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT;
@@ -5770,15 +5793,15 @@ static void HandleAction_GoNear(void)
static void HandleAction_SafriZoneRun(void)
{
- gBattlerAttacker = gBattleTurnOrder[gCurrentTurnActionNumber];
+ gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
PlaySE(SE_NIGERU);
gCurrentTurnActionNumber = gBattlersCount;
gBattleOutcome = B_OUTCOME_RAN;
}
-static void HandleAction_Action9(void)
+static void HandleAction_WallyBallThrow(void)
{
- gBattlerAttacker = gBattleTurnOrder[gCurrentTurnActionNumber];
+ gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
@@ -5811,7 +5834,7 @@ static void HandleAction_NothingIsFainted(void)
static void HandleAction_ActionFinished(void)
{
- *(gBattleStruct->monToSwitchIntoId + gBattleTurnOrder[gCurrentTurnActionNumber]) = 6;
+ *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = 6;
gCurrentTurnActionNumber++;
gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber];
SpecialStatusesClear();
diff --git a/src/battle_message.c b/src/battle_message.c
index 1f338db92..13502d6f2 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -6,6 +6,7 @@
#include "text.h"
#include "string_util.h"
#include "constants/items.h"
+#include "constants/trainers.h"
#include "event_data.h"
#include "link.h"
#include "item.h"
@@ -17,11 +18,23 @@
#include "recorded_battle.h"
#include "international_string_util.h"
-extern u8 gBattlerAbilities[MAX_BATTLERS_COUNT];
+struct BattleWindowText
+{
+ u8 fillValue;
+ u8 fontId;
+ u8 x;
+ u8 y;
+ u8 letterSpacing;
+ u8 lineSpacing;
+ u8 speed;
+ u8 fgColor;
+ u8 bgColor;
+ u8 shadowColor;
+};
+
extern u8 gUnknown_0203C7B4;
-extern struct StringInfoBattle *gStringInfo;
-extern const u8 gMoveNames[LAST_MOVE_INDEX + 1][13];
+extern const u8 gMoveNames[MOVES_COUNT][13];
extern const u8 gTrainerClassNames[][13];
extern const u16 gUnknown_08D85620[];
@@ -31,12 +44,11 @@ extern const u8 gText_PkmnBoxLanettesPCFull[];
extern const u8 gText_PkmnTransferredSomeonesPC[];
extern const u8 gText_PkmnTransferredLanettesPC[];
-extern u16 sub_8068BB0(void); // pokemon_1
-extern u8 sub_81A4D00(void); // battle_frontier_2
+extern u8 GetFrontierBrainTrainerClass(void); // battle_frontier_2
extern u8 GetFrontierOpponentClass(u16 trainerId); // battle_tower
extern u8 sub_81D5530(u16 trainerId); // pokenav
extern u8 GetEreaderTrainerClassId(void); // battle_tower
-extern void sub_81A4D50(u8 *txtPtr); // battle_frontier_2
+extern void CopyFrontierBrainTrainerName(u8 *txtPtr); // battle_frontier_2
extern void sub_81D5554(u8 *txtPtr, u16 trainerId); // pokenav
extern void GetEreaderTrainerName(u8 *txtPtr);
extern void sub_81A36D0(u8 arg0, u16 trainerId); // battle_frontier_2
@@ -44,15 +56,13 @@ extern void sub_81D572C(u8 arg0, u16 trainerId); // pokenav
extern void GetFrontierTrainerName(u8 *dst, u16 trainerId);
// this file's functions
-static void sub_814F8F8(u8 *textPtr);
-static void sub_814F950(u8 *dst);
+static void ChooseMoveUsedParticle(u8 *textPtr);
+static void ChooseTypeOfMoveUsedString(u8 *dst);
static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst);
-// ewram variables
-EWRAM_DATA u8 gDisplayedStringBattle[300] = {0};
-EWRAM_DATA u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT] = {0};
-EWRAM_DATA u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT] = {0};
-EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT] = {0};
+// EWRAM vars
+static EWRAM_DATA u8 sBattlerAbilities[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA struct BattleMsgData *gBattleMsgDataPtr = NULL;
// const rom data
// todo: make some of those names less vague: attacker/target vs pkmn, etc.
@@ -1187,7 +1197,14 @@ const u8 * const gStatNamesTable2[] =
};
const u8 gText_SafariBalls[] = _("{HIGHLIGHT DARK_GREY}SAFARI BALLS");
-const u8 gText_SafariBallLeft[] = _("{HIGHLIGHT DARK_GREY}Left: $" "{HIGHLIGHT DARK_GREY}");const u8 gText_Sleep[] = _( "sleep");const u8 gText_Poison[] = _( "poison");const u8 gText_Burn[] = _( "burn");const u8 gText_Paralysis[] = _( "paralysis");const u8 gText_Ice[] = _( "ice");const u8 gText_Confusion[] = _( "confusion");const u8 gText_Love[] = _( "love");
+const u8 gText_SafariBallLeft[] = _("{HIGHLIGHT DARK_GREY}Left: $" "{HIGHLIGHT DARK_GREY}");
+const u8 gText_Sleep[] = _("sleep");
+const u8 gText_Poison[] = _("poison");
+const u8 gText_Burn[] = _("burn");
+const u8 gText_Paralysis[] = _("paralysis");
+const u8 gText_Ice[] = _("ice");
+const u8 gText_Confusion[] = _("confusion");
+const u8 gText_Love[] = _("love");
const u8 gText_SpaceAndSpace[] = _(" and ");
const u8 gText_CommaSpace[] = _(", ");
const u8 gText_Space2[] = _(" ");
@@ -1308,8 +1325,8 @@ static const u8 sText_LinkTrainerWantsToBattlePause[] = _("{B_20}\nwants to batt
static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("{B_20} and {B_21}\nwant to battle!{PAUSE 49}");
// This is four lists of moves which use a different attack string in Japanese
-// to the default. See the documentation for sub_814F950 for more detail.
-static const u16 sUnknownMoveTable[] =
+// to the default. See the documentation for ChooseTypeOfMoveUsedString for more detail.
+static const u16 sGrammarMoveUsedTable[] =
{
MOVE_SWORDS_DANCE, MOVE_STRENGTH, MOVE_GROWTH,
MOVE_HARDEN, MOVE_MINIMIZE, MOVE_SMOKESCREEN,
@@ -1351,86 +1368,609 @@ static const u16 sUnknownMoveTable[] =
static const u8 sDummyWeirdStatusString[] = {EOS, EOS, EOS, EOS, EOS, EOS, EOS, EOS, 0, 0};
-static const u8 sUnknown_085CD42C[] =
-{
- 0xFF, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0xF, 0x6, 0x0, 0x0, 0xFF, 0x1,
- 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0xF, 0x6, 0x0, 0x0, 0xEE, 0x1, 0x0, 0x1, 0x0,
- 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0,
- 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0, 0xD,
- 0xE, 0xF, 0x0, 0x0, 0xEE, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE,
- 0xF, 0x0, 0x0, 0xEE, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF,
- 0x0, 0x0, 0xEE, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0, 0xC, 0xE, 0xB, 0x0, 0x0,
- 0xEE, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE,
- 0x1, 0x2, 0x1, 0x0, 0x0, 0x0, 0xC, 0xE, 0xB, 0x0, 0x0, 0xEE, 0x7, 0x0,
- 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x7, 0x0, 0x1, 0x0,
- 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
- 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0xD,
- 0xE, 0xF, 0x0, 0x0, 0x0, 0x1, 0x20, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2,
- 0x0, 0x0, 0xEE, 0x1, 0xFF, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0,
- 0x0, 0xEE, 0x1, 0xFF, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0,
- 0xEE, 0x1, 0xFF, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE,
- 0x1, 0xFF, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x1,
- 0xFF, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x1, 0xFF,
- 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0x0, 0x1, 0xFF, 0x1, 0x0,
- 0x0, 0x0, 0x1, 0x0, 0x6, 0x0, 0x0, 0x0, 0x1, 0xFF, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0,
- 0x6, 0x0, 0x0, 0x0, 0x1, 0xFF, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x6, 0x0, 0x0
+static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
+{
+ { // 0
+ .fillValue = 0xFF,
+ .fontId = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 1,
+ .fgColor = 1,
+ .bgColor = 15,
+ .shadowColor = 6,
+ },
+ { // 1
+ .fillValue = 0xFF,
+ .fontId = 1,
+ .x = 1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 1,
+ .bgColor = 15,
+ .shadowColor = 6,
+ },
+ { // 2
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 3
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 4
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 5
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 6
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 7
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 12,
+ .bgColor = 14,
+ .shadowColor = 11,
+ },
+ { // 8
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 9
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = 2,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 12,
+ .bgColor = 14,
+ .shadowColor = 11,
+ },
+ { // 10
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 11
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 12
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 13
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 14
+ .fillValue = 0x0,
+ .fontId = 1,
+ .x = 32,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 1,
+ .bgColor = 0,
+ .shadowColor = 2,
+ },
+ { // 15
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 16
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 17
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 18
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 19
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 20
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 21
+ .fillValue = 0x0,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 1,
+ .bgColor = 0,
+ .shadowColor = 6,
+ },
+ { // 22
+ .fillValue = 0x0,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 1,
+ .bgColor = 0,
+ .shadowColor = 6,
+ },
+ { // 23
+ .fillValue = 0x0,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 1,
+ .bgColor = 0,
+ .shadowColor = 6,
+ },
};
-static const u8 sUnknown_085CD54C[] =
-{
- 0xFF, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0xF, 0x6, 0x0, 0x0, 0xFF, 0x1,
- 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0xF, 0x6, 0x0, 0x0, 0xEE, 0x1, 0x0, 0x1, 0x0,
- 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0,
- 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0, 0xD,
- 0xE, 0xF, 0x0, 0x0, 0xEE, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE,
- 0xF, 0x0, 0x0, 0xEE, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF,
- 0x0, 0x0, 0xEE, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0, 0xC, 0xE, 0xB, 0x0, 0x0,
- 0xEE, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE,
- 0x1, 0x2, 0x1, 0x0, 0x0, 0x0, 0xC, 0xE, 0xB, 0x0, 0x0, 0xEE, 0x7, 0x0,
- 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x7, 0x0, 0x1, 0x0,
- 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0,
- 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0xD,
- 0xE, 0xF, 0x0, 0x0, 0x0, 0x1, 0x20, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2,
- 0x0, 0x0, 0xEE, 0x1, 0xFF, 0x1, 0x0, 0x0, 0x0, 0x1, 0xE, 0xF, 0x0,
- 0x0, 0xEE, 0x1, 0xFF, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0,
- 0xEE, 0x1, 0xFF, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE,
- 0x1, 0xFF, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x1,
- 0xFF, 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x1, 0xFF,
- 0x1, 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0xEE, 0x1, 0xFF, 0x1,
- 0x0, 0x0, 0x0, 0xD, 0xE, 0xF, 0x0, 0x0, 0x11, 0x1, 0x0, 0x1, 0x0, 0x0,
- 0x1, 0x2, 0x1, 0x3, 0x0, 0x0
+static const struct BattleWindowText sTextOnWindowsInfo_Arena[] =
+{
+ { // 0
+ .fillValue = 0xFF,
+ .fontId = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 1,
+ .fgColor = 1,
+ .bgColor = 15,
+ .shadowColor = 6,
+ },
+ { // 1
+ .fillValue = 0xFF,
+ .fontId = 1,
+ .x = 1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 1,
+ .bgColor = 15,
+ .shadowColor = 6,
+ },
+ { // 2
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 3
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 4
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 5
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 6
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 7
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 12,
+ .bgColor = 14,
+ .shadowColor = 11,
+ },
+ { // 8
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 9
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = 2,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 12,
+ .bgColor = 14,
+ .shadowColor = 11,
+ },
+ { // 10
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 11
+ .fillValue = 0xEE,
+ .fontId = 7,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 12
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 13
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 14
+ .fillValue = 0x0,
+ .fontId = 1,
+ .x = 32,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 1,
+ .bgColor = 0,
+ .shadowColor = 2,
+ },
+ { // 15
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 1,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 16
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 17
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 18
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 19
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 20
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 21
+ .fillValue = 0xEE,
+ .fontId = 1,
+ .x = -1,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = 13,
+ .bgColor = 14,
+ .shadowColor = 15,
+ },
+ { // 22
+ .fillValue = 0x11,
+ .fontId = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 1,
+ .fgColor = 2,
+ .bgColor = 1,
+ .shadowColor = 3,
+ },
};
-static const u8 * const gUnknown_085CD660[] =
+static const struct BattleWindowText *const sBattleTextOnWindowsInfo[] =
{
- sUnknown_085CD42C, sUnknown_085CD54C
+ sTextOnWindowsInfo_Normal, sTextOnWindowsInfo_Arena
};
static const u8 sRecordedBattleTextSpeeds[] = {8, 4, 1, 0};
+// code
void BufferStringBattle(u16 stringID)
{
s32 i;
- const u8* stringPtr = NULL;
+ const u8 *stringPtr = NULL;
- gStringInfo = (struct StringInfoBattle*)(&gBattleBufferA[gActiveBattler][4]);
- gLastUsedItem = gStringInfo->lastItem;
- gLastUsedAbility = gStringInfo->lastAbility;
- gBattleScripting.battler = gStringInfo->scrActive;
- *(&gBattleStruct->field_52) = gStringInfo->unk1605E;
- *(&gBattleStruct->hpScale) = gStringInfo->hpScale;
- gPotentialItemEffectBattler = gStringInfo->StringBank;
- *(&gBattleStruct->stringMoveType) = gStringInfo->moveType;
+ gBattleMsgDataPtr = (struct BattleMsgData*)(&gBattleBufferA[gActiveBattler][4]);
+ gLastUsedItem = gBattleMsgDataPtr->lastItem;
+ gLastUsedAbility = gBattleMsgDataPtr->lastAbility;
+ gBattleScripting.battler = gBattleMsgDataPtr->scrActive;
+ *(&gBattleStruct->field_52) = gBattleMsgDataPtr->unk1605E;
+ *(&gBattleStruct->hpScale) = gBattleMsgDataPtr->hpScale;
+ gPotentialItemEffectBattler = gBattleMsgDataPtr->itemEffectBattler;
+ *(&gBattleStruct->stringMoveType) = gBattleMsgDataPtr->moveType;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
- gBattlerAbilities[i] = gStringInfo->abilities[i];
+ sBattlerAbilities[i] = gBattleMsgDataPtr->abilities[i];
}
for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; i++)
{
- gBattleTextBuff1[i] = gStringInfo->textBuffs[0][i];
- gBattleTextBuff2[i] = gStringInfo->textBuffs[1][i];
- gBattleTextBuff3[i] = gStringInfo->textBuffs[2][i];
+ gBattleTextBuff1[i] = gBattleMsgDataPtr->textBuffs[0][i];
+ gBattleTextBuff2[i] = gBattleMsgDataPtr->textBuffs[1][i];
+ gBattleTextBuff3[i] = gBattleMsgDataPtr->textBuffs[2][i];
}
switch (stringID)
@@ -1542,7 +2082,7 @@ void BufferStringBattle(u16 stringID)
}
else
{
- if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_800 || gBattleTypeFlags & BATTLE_TYPE_x2000000)
+ if (gTrainerBattleOpponent_A == TRAINER_LINK_OPPONENT || gBattleTypeFlags & BATTLE_TYPE_x2000000)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
stringPtr = sText_LinkTrainer2WithdrewPkmn;
@@ -1605,14 +2145,14 @@ void BufferStringBattle(u16 stringID)
}
break;
case STRINGID_USEDMOVE: // pokemon used a move msg
- sub_814F8F8(gBattleTextBuff1); // buff1 doesn't appear in the string, leftover from japanese move names?
+ ChooseMoveUsedParticle(gBattleTextBuff1); // buff1 doesn't appear in the string, leftover from japanese move names
- if (gStringInfo->currentMove > LAST_MOVE_INDEX)
+ if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT)
StringCopy(gBattleTextBuff2, sATypeMove_Table[*(&gBattleStruct->stringMoveType)]);
else
- StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]);
+ StringCopy(gBattleTextBuff2, gMoveNames[gBattleMsgDataPtr->currentMove]);
- sub_814F950(gBattleTextBuff2);
+ ChooseTypeOfMoveUsedString(gBattleTextBuff2);
stringPtr = sText_AttackerUsedX;
break;
case STRINGID_BATTLEEND: // battle end
@@ -1843,25 +2383,25 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
toCpy = text;
break;
case B_TXT_LINK_PLAYER_MON1_NAME: // link first player poke name
- GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].lp_field_18]],
+ GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].id]],
MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case B_TXT_LINK_OPPONENT_MON1_NAME: // link first opponent poke name
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].lp_field_18 ^ 1]],
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].id ^ 1]],
MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case B_TXT_LINK_PLAYER_MON2_NAME: // link second player poke name
- GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].lp_field_18 ^ 2]],
+ GetMonData(&gPlayerParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].id ^ 2]],
MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
break;
case B_TXT_LINK_OPPONENT_MON2_NAME: // link second opponent poke name
- GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].lp_field_18 ^ 3]],
+ GetMonData(&gEnemyParty[gBattlerPartyIndexes[gLinkPlayers[multiplayerID].id ^ 3]],
MON_DATA_NICKNAME, text);
StringGetEnd10(text);
toCpy = text;
@@ -1895,16 +2435,16 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, gBattlerPartyIndexes[gBattleScripting.battler])
break;
case B_TXT_CURRENT_MOVE: // current move name
- if (gStringInfo->currentMove > LAST_MOVE_INDEX)
+ if (gBattleMsgDataPtr->currentMove >= MOVES_COUNT)
toCpy = sATypeMove_Table[gBattleStruct->stringMoveType];
else
- toCpy = gMoveNames[gStringInfo->currentMove];
+ toCpy = gMoveNames[gBattleMsgDataPtr->currentMove];
break;
case B_TXT_LAST_MOVE: // originally used move name
- if (gStringInfo->originallyUsedMove > LAST_MOVE_INDEX)
+ if (gBattleMsgDataPtr->originallyUsedMove >= MOVES_COUNT)
toCpy = sATypeMove_Table[gBattleStruct->stringMoveType];
else
- toCpy = gMoveNames[gStringInfo->originallyUsedMove];
+ toCpy = gMoveNames[gBattleMsgDataPtr->originallyUsedMove];
break;
case B_TXT_LAST_ITEM: // last used item
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
@@ -1927,7 +2467,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
}
else
{
- if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler)
+ if (gLinkPlayers[gBattleScripting.multiplayerId].id == gPotentialItemEffectBattler)
{
StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
StringAppend(text, sText_BerrySuffix);
@@ -1953,24 +2493,24 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
toCpy = gAbilityNames[gLastUsedAbility];
break;
case B_TXT_ATK_ABILITY: // attacker ability
- toCpy = gAbilityNames[gBattlerAbilities[gBattlerAttacker]];
+ toCpy = gAbilityNames[sBattlerAbilities[gBattlerAttacker]];
break;
case B_TXT_DEF_ABILITY: // target ability
- toCpy = gAbilityNames[gBattlerAbilities[gBattlerTarget]];
+ toCpy = gAbilityNames[sBattlerAbilities[gBattlerTarget]];
break;
case B_TXT_SCR_ACTIVE_ABILITY: // scripting active ability
- toCpy = gAbilityNames[gBattlerAbilities[gBattleScripting.battler]];
+ toCpy = gAbilityNames[sBattlerAbilities[gBattleScripting.battler]];
break;
case B_TXT_EFF_ABILITY: // effect battlerId ability
- toCpy = gAbilityNames[gBattlerAbilities[gEffectBattler]];
+ toCpy = gAbilityNames[sBattlerAbilities[gEffectBattler]];
break;
case B_TXT_TRAINER1_CLASS: // trainer class name
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()];
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
toCpy = gTrainerClassNames[sub_8068BB0()];
- else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_3FE)
- toCpy = gTrainerClassNames[sub_81A4D00()];
+ else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
+ toCpy = gTrainerClassNames[GetFrontierBrainTrainerClass()];
else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
toCpy = gTrainerClassNames[GetFrontierOpponentClass(gTrainerBattleOpponent_A)];
else if (gBattleTypeFlags & BATTLE_TYPE_x4000000)
@@ -1993,9 +2533,9 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
{
toCpy = gLinkPlayers[multiplayerID ^ BIT_SIDE].name;
}
- else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_3FE)
+ else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
{
- sub_81A4D50(text);
+ CopyFrontierBrainTrainerName(text);
toCpy = text;
}
else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
@@ -2022,13 +2562,13 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
toCpy = gLinkPlayers[multiplayerID].name;
break;
case B_TXT_1F: // link partner name?
- toCpy = gLinkPlayers[GetBattlerMultiplayerId(2 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
+ toCpy = gLinkPlayers[GetBattlerMultiplayerId(2 ^ gLinkPlayers[multiplayerID].id)].name;
break;
case B_TXT_20: // link opponent 1 name?
- toCpy = gLinkPlayers[GetBattlerMultiplayerId(1 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
+ toCpy = gLinkPlayers[GetBattlerMultiplayerId(1 ^ gLinkPlayers[multiplayerID].id)].name;
break;
case B_TXT_21: // link opponent 2 name?
- toCpy = gLinkPlayers[GetBattlerMultiplayerId(3 ^ gLinkPlayers[multiplayerID].lp_field_18)].name;
+ toCpy = gLinkPlayers[GetBattlerMultiplayerId(3 ^ gLinkPlayers[multiplayerID].id)].name;
break;
case B_TXT_22: // link scripting active name
toCpy = gLinkPlayers[GetBattlerMultiplayerId(gBattleScripting.battler)].name;
@@ -2203,10 +2743,6 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
return dstID;
}
-// TODO: move these to a general header like util.h
-#define ByteRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
-#define ByteRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24)
-
static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
{
u32 srcID = 1;
@@ -2220,7 +2756,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
switch (src[srcID])
{
case B_BUFF_STRING: // battle string
- hword = ByteRead16(&src[srcID + 1]);
+ hword = T1_READ_16(&src[srcID + 1]);
StringAppend(dst, gBattleStringsTable[hword - BATTLESTRINGS_ID_ADDER]);
srcID += 3;
break;
@@ -2231,17 +2767,17 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
value = src[srcID + 3];
break;
case 2:
- value = ByteRead16(&src[srcID + 3]);
+ value = T1_READ_16(&src[srcID + 3]);
break;
case 4:
- value = ByteRead32(&src[srcID + 3]);
+ value = T1_READ_32(&src[srcID + 3]);
break;
}
ConvertIntToDecimalStringN(dst, value, 0, src[srcID + 2]);
srcID += src[srcID + 1] + 3;
break;
case B_BUFF_MOVE: // move name
- StringAppend(dst, gMoveNames[ByteRead16(&src[srcID + 1])]);
+ StringAppend(dst, gMoveNames[T1_READ_16(&src[srcID + 1])]);
srcID += 3;
break;
case B_BUFF_TYPE: // type name
@@ -2271,7 +2807,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
srcID += 2;
break;
case B_BUFF_SPECIES: // species name
- GetSpeciesName(dst, ByteRead16(&src[srcID + 1]));
+ GetSpeciesName(dst, T1_READ_16(&src[srcID + 1]));
srcID += 3;
break;
case B_BUFF_MON_NICK: // poke nick without prefix
@@ -2291,24 +2827,30 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
srcID += 2;
break;
case B_BUFF_ITEM: // item name
- hword = ByteRead16(&src[srcID + 1]);
+ hword = T1_READ_16(&src[srcID + 1]);
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
{
if (hword == ITEM_ENIGMA_BERRY)
{
- if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler)
+ if (gLinkPlayers[gBattleScripting.multiplayerId].id == gPotentialItemEffectBattler)
{
StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name);
StringAppend(dst, sText_BerrySuffix);
}
else
+ {
StringAppend(dst, sText_EnigmaBerry);
+ }
}
else
+ {
CopyItemName(hword, dst);
+ }
}
else
+ {
CopyItemName(hword, dst);
+ }
srcID += 3;
break;
}
@@ -2317,18 +2859,18 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
// Loads one of two text strings into the provided buffer. This is functionally
// unused, since the value loaded into the buffer is not read; it loaded one of
-// two particles (either "は" or "の") which works in tandem with sub_814F950
+// two particles (either "は" or "の") which works in tandem with ChooseTypeOfMoveUsedString
// below to effect changes in the meaning of the line.
-static void sub_814F8F8(u8* textBuff)
+static void ChooseMoveUsedParticle(u8* textBuff)
{
s32 counter = 0;
u32 i = 0;
while (counter != 4)
{
- if (sUnknownMoveTable[i] == 0)
+ if (sGrammarMoveUsedTable[i] == 0)
counter++;
- if (sUnknownMoveTable[i++] == gStringInfo->currentMove)
+ if (sGrammarMoveUsedTable[i++] == gBattleMsgDataPtr->currentMove)
break;
}
@@ -2342,7 +2884,7 @@ static void sub_814F8F8(u8* textBuff)
}
// Appends "!" to the text buffer `dst`. In the original Japanese this looked
-// into the table of moves at sUnknownMoveTable and varied the line accordingly.
+// into the table of moves at sGrammarMoveUsedTable and varied the line accordingly.
//
// sText_ExclamationMark was a plain "!", used for any attack not on the list.
// It resulted in the translation "<NAME>'s <ATTACK>!".
@@ -2359,7 +2901,7 @@ static void sub_814F8F8(u8* textBuff)
//
// sText_ExclamationMark5 was " こうげき!" This resulted in a translation of
// "<NAME>'s <ATTACK> attack!".
-static void sub_814F950(u8* dst)
+static void ChooseTypeOfMoveUsedString(u8* dst)
{
s32 counter = 0;
s32 i = 0;
@@ -2369,9 +2911,9 @@ static void sub_814F950(u8* dst)
while (counter != 4)
{
- if (sUnknownMoveTable[i] == MOVE_NONE)
+ if (sGrammarMoveUsedTable[i] == MOVE_NONE)
counter++;
- if (sUnknownMoveTable[i++] == gStringInfo->currentMove)
+ if (sGrammarMoveUsedTable[i++] == gBattleMsgDataPtr->currentMove)
break;
}
@@ -2395,47 +2937,46 @@ static void sub_814F950(u8* dst)
}
}
-void BattleHandleAddTextPrinter(const u8 *text, u8 arg1)
+void BattlePutTextOnWindow(const u8 *text, u8 windowId)
{
- const u8 *r8 = gUnknown_085CD660[gBattleScripting.field_24];
- bool32 r9;
+ const struct BattleWindowText *textInfo = sBattleTextOnWindowsInfo[gBattleScripting.windowsType];
+ bool32 copyToVram;
struct TextSubPrinter textSubPrinter;
u8 speed;
- if (arg1 & 0x80)
+ if (windowId & 0x80)
{
- arg1 &= ~(0x80);
- r9 = FALSE;
+ windowId &= ~(0x80);
+ copyToVram = FALSE;
}
else
{
- FillWindowPixelBuffer(arg1, r8[12 * arg1]);
- r9 = TRUE;
+ FillWindowPixelBuffer(windowId, textInfo[windowId].fillValue);
+ copyToVram = TRUE;
}
textSubPrinter.current_text_offset = text;
- textSubPrinter.windowId = arg1;
- textSubPrinter.fontId = r8[(12 * arg1) + 1];
- textSubPrinter.x = r8[(12 * arg1) + 2];
- textSubPrinter.y = r8[(12 * arg1) + 3];
+ textSubPrinter.windowId = windowId;
+ textSubPrinter.fontId = textInfo[windowId].fontId;
+ textSubPrinter.x = textInfo[windowId].x;
+ textSubPrinter.y = textInfo[windowId].y;
textSubPrinter.currentX = textSubPrinter.x;
textSubPrinter.currentY = textSubPrinter.y;
- textSubPrinter.letterSpacing = r8[(12 * arg1) + 4];
- textSubPrinter.lineSpacing = r8[(12 * arg1) + 5];
+ textSubPrinter.letterSpacing = textInfo[windowId].letterSpacing;
+ textSubPrinter.lineSpacing = textInfo[windowId].lineSpacing;
textSubPrinter.fontColor_l = 0;
- textSubPrinter.fgColor = r8[(12 * arg1) + 7];
- textSubPrinter.bgColor = r8[(12 * arg1) + 8];
- textSubPrinter.shadowColor = r8[(12 * arg1) + 9];
+ textSubPrinter.fgColor = textInfo[windowId].fgColor;
+ textSubPrinter.bgColor = textInfo[windowId].bgColor;
+ textSubPrinter.shadowColor = textInfo[windowId].shadowColor;
if (textSubPrinter.x == 0xFF)
{
- s32 var2;
- u32 var = sub_80397C4(gBattleScripting.field_24, arg1);
- var2 = GetStringCenterAlignXOffsetWithLetterSpacing(textSubPrinter.fontId, textSubPrinter.current_text_offset, var, textSubPrinter.letterSpacing);
- textSubPrinter.x = textSubPrinter.currentX = var2;
+ u32 width = sub_80397C4(gBattleScripting.windowsType, windowId);
+ s32 alignX = GetStringCenterAlignXOffsetWithLetterSpacing(textSubPrinter.fontId, textSubPrinter.current_text_offset, width, textSubPrinter.letterSpacing);
+ textSubPrinter.x = textSubPrinter.currentX = alignX;
}
- if (arg1 == 0x16)
+ if (windowId == 0x16)
gTextFlags.flag_1 = 0;
else
gTextFlags.flag_1 = 1;
@@ -2445,7 +2986,7 @@ void BattleHandleAddTextPrinter(const u8 *text, u8 arg1)
else
gTextFlags.flag_2 = 0;
- if (arg1 == 0 || arg1 == 0x16)
+ if (windowId == 0 || windowId == 0x16)
{
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
speed = 1;
@@ -2458,16 +2999,16 @@ void BattleHandleAddTextPrinter(const u8 *text, u8 arg1)
}
else
{
- speed = r8[(12 * arg1) + 6];
+ speed = textInfo[windowId].speed;
gTextFlags.flag_0 = 0;
}
AddTextPrinter(&textSubPrinter, speed, NULL);
- if (r9)
+ if (copyToVram)
{
- PutWindowTilemap(arg1);
- CopyWindowToVram(arg1, 3);
+ PutWindowTilemap(windowId);
+ CopyWindowToVram(windowId, 3);
}
}
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 89fee825e..3af03a5e0 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -19,6 +19,7 @@
#include "constants/songs.h"
#include "constants/trainers.h"
#include "constants/battle_anim.h"
+#include "constants/map_types.h"
#include "text.h"
#include "sound.h"
#include "pokedex.h"
@@ -40,6 +41,7 @@
#include "constants/battle_string_ids.h"
#include "battle_setup.h"
#include "overworld.h"
+#include "party_menu.h"
extern u16 gBattle_BG1_X;
extern u16 gBattle_BG1_Y;
@@ -67,7 +69,6 @@ extern bool8 sub_81B1250(void); // ?
extern bool8 InBattlePike(void);
extern bool8 InBattlePyramid(void);
extern u16 GetBattlePyramidPickupItemId(void);
-extern u8 Overworld_GetMapTypeOfSaveblockLocation(void);
extern u8 sub_813B21C(void);
extern u16 get_unknown_box_id(void);
@@ -185,10 +186,10 @@ static void atk5B_yesnoboxstoplearningmove(void);
static void atk5C_hitanimation(void);
static void atk5D_getmoneyreward(void);
static void atk5E(void);
-static void atk5F(void);
+static void atk5F_swapattackerwithtarget(void);
static void atk60_incrementgamestat(void);
static void atk61_drawpartystatussummary(void);
-static void atk62(void);
+static void atk62_hidepartystatussummary(void);
static void atk63_jumptorandomattack(void);
static void atk64_statusanimation(void);
static void atk65_status2animation(void);
@@ -327,7 +328,7 @@ static void atkE9_setweatherballtype(void);
static void atkEA_tryrecycleitem(void);
static void atkEB_settypetoterrain(void);
static void atkEC_pursuitrelated(void);
-static void atkEF_snatchsetbanks(void);
+static void atkEF_snatchsetbattlers(void);
static void atkEE_removelightscreenreflect(void);
static void atkEF_handleballthrow(void);
static void atkF0_givecaughtmon(void);
@@ -437,10 +438,10 @@ void (* const gBattleScriptingCommandsTable[])(void) =
atk5C_hitanimation,
atk5D_getmoneyreward,
atk5E,
- atk5F,
+ atk5F_swapattackerwithtarget,
atk60_incrementgamestat,
atk61_drawpartystatussummary,
- atk62,
+ atk62_hidepartystatussummary,
atk63_jumptorandomattack,
atk64_statusanimation,
atk65_status2animation,
@@ -579,7 +580,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
atkEA_tryrecycleitem,
atkEB_settypetoterrain,
atkEC_pursuitrelated,
- atkEF_snatchsetbanks,
+ atkEF_snatchsetbattlers,
atkEE_removelightscreenreflect,
atkEF_handleballthrow,
atkF0_givecaughtmon,
@@ -989,11 +990,11 @@ static void atk00_attackcanceler(void)
for (i = 0; i < gBattlersCount; i++)
{
- if ((gProtectStructs[gBattleTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED)
+ if ((gProtectStructs[gBattlerByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED)
{
- PressurePPLose(gBattlerAttacker, gBattleTurnOrder[i], MOVE_SNATCH);
- gProtectStructs[gBattleTurnOrder[i]].stealMove = 0;
- gBattleScripting.battler = gBattleTurnOrder[i];
+ PressurePPLose(gBattlerAttacker, gBattlerByTurnOrder[i], MOVE_SNATCH);
+ gProtectStructs[gBattlerByTurnOrder[i]].stealMove = 0;
+ gBattleScripting.battler = gBattlerByTurnOrder[i];
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_SnatchedMove;
return;
@@ -1172,7 +1173,7 @@ static void atk01_accuracycheck(void)
calc = (calc * 130) / 100; // 1.3 compound eyes boost
if (WEATHER_HAS_EFFECT && gBattleMons[gBattlerTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORM_ANY)
calc = (calc * 80) / 100; // 1.2 sand veil loss
- if (gBattleMons[gBattlerAttacker].ability == ABILITY_HUSTLE && type < 9)
+ if (gBattleMons[gBattlerAttacker].ability == ABILITY_HUSTLE && IS_TYPE_PHYSICAL(type))
calc = (calc * 80) / 100; // 1.2 hustle loss
if (gBattleMons[gBattlerTarget].item == ITEM_ENIGMA_BERRY)
@@ -1944,7 +1945,7 @@ static void atk0C_datahpupdate(void)
if (!gSpecialStatuses[gActiveBattler].dmg && !(gHitMarker & HITMARKER_x100000))
gSpecialStatuses[gActiveBattler].dmg = gHpDealt;
- if (IS_MOVE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT)
+ if (IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT)
{
gProtectStructs[gActiveBattler].physicalDmg = gHpDealt;
gSpecialStatuses[gActiveBattler].physicalDmg = gHpDealt;
@@ -1959,7 +1960,7 @@ static void atk0C_datahpupdate(void)
gSpecialStatuses[gActiveBattler].physicalBattlerId = gBattlerTarget;
}
}
- else if (!IS_MOVE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000))
+ else if (!IS_TYPE_PHYSICAL(moveType) && !(gHitMarker & HITMARKER_x100000))
{
gProtectStructs[gActiveBattler].specialDmg = gHpDealt;
gSpecialStatuses[gActiveBattler].specialDmg = gHpDealt;
@@ -2216,7 +2217,7 @@ u8 GetBattlerTurnOrderNum(u8 battlerId)
s32 i;
for (i = 0; i < gBattlersCount; i++)
{
- if (gBattleTurnOrder[i] == battlerId)
+ if (gBattlerByTurnOrder[i] == battlerId)
break;
}
return i;
@@ -3112,7 +3113,7 @@ static void atk1E_jumpifability(void)
if (gBattlescriptCurrInstr[1] == BS_ATTACKER_SIDE)
{
- battlerId = AbilityBattleEffects(ABILITYEFFECT_CHECK_BANK_SIDE, gBattlerAttacker, ability, 0, 0);
+ battlerId = AbilityBattleEffects(ABILITYEFFECT_CHECK_BATTLER_SIDE, gBattlerAttacker, ability, 0, 0);
if (battlerId)
{
gLastUsedAbility = ability;
@@ -3448,7 +3449,7 @@ static void atk23_getexp(void)
if (gBattleControllerExecFlags == 0)
{
gActiveBattler = gBattleStruct->expGetterBattlerId;
- if (gBattleBufferB[gActiveBattler][0] == CONTROLLER_TWORETURNVALUES && gBattleBufferB[gActiveBattler][1] == RET_VALUE_LEVELLED_UP)
+ if (gBattleBufferB[gActiveBattler][0] == CONTROLLER_TWORETURNVALUES && gBattleBufferB[gActiveBattler][1] == RET_VALUE_LEVELED_UP)
{
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId)
HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler);
@@ -3534,7 +3535,7 @@ static void atk24(void)
if (gBattleControllerExecFlags)
return;
- if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId == STEVEN_PARTNER_ID)
+ if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
{
for (i = 0; i < 3; i++)
{
@@ -4648,14 +4649,14 @@ static void atk49_moveend(void)
BtlController_EmitSpriteInvisibility(0, FALSE);
MarkBattlerForControllerExec(gActiveBattler);
gStatuses3[gBattlerAttacker] &= ~(STATUS3_SEMI_INVULNERABLE);
- gSpecialStatuses[gBattlerAttacker].restoredBankSprite = 1;
+ gSpecialStatuses[gBattlerAttacker].restoredBattlerSprite = 1;
gBattleScripting.atk49_state++;
return;
}
gBattleScripting.atk49_state++;
break;
case 10: // make target sprite visible
- if (!gSpecialStatuses[gBattlerTarget].restoredBankSprite && gBattlerTarget < gBattlersCount
+ if (!gSpecialStatuses[gBattlerTarget].restoredBattlerSprite && gBattlerTarget < gBattlersCount
&& !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE))
{
gActiveBattler = gBattlerTarget;
@@ -4676,12 +4677,12 @@ static void atk49_moveend(void)
gBattleScripting.atk49_state++;
break;
case 14: // This case looks interesting, although I am not certain what it does. Probably fine tunes edge cases.
- if (gHitMarker & HITMARKER_PURSUIT_TRAP)
+ if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET)
{
gActiveBattler = gBattlerAttacker;
gBattlerAttacker = gBattlerTarget;
gBattlerTarget = gActiveBattler;
- gHitMarker &= ~(HITMARKER_PURSUIT_TRAP);
+ gHitMarker &= ~(HITMARKER_SWAP_ATTACKER_TARGET);
}
if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED)
{
@@ -5034,7 +5035,7 @@ static void atk4F_jumpifcantswitch(void)
party = gPlayerParty;
i = 0;
- if (sub_806D82C(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
+ if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
i = 3;
}
else
@@ -5055,7 +5056,7 @@ static void atk4F_jumpifcantswitch(void)
party = gPlayerParty;
i = 0;
- if (sub_806D82C(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
+ if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
i = 3;
}
@@ -5144,7 +5145,7 @@ static void sub_804CF10(u8 arg0)
*(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6;
gBattleStruct->field_93 &= ~(gBitTable[gActiveBattler]);
- BtlController_EmitChoosePokemon(0, 1, arg0, 0, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_MUST_CHOOSE_MON, arg0, 0, gBattleStruct->field_60[gActiveBattler]);
MarkBattlerForControllerExec(gActiveBattler);
}
@@ -5167,7 +5168,7 @@ static void atk50_openpartyscreen(void)
{
if (gHitMarker & HITMARKER_FAINTED(gActiveBattler))
{
- if (sub_80423F4(gActiveBattler, 6, 6))
+ if (HasNoMonsToSwitch(gActiveBattler, 6, 6))
{
gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5196,7 +5197,7 @@ static void atk50_openpartyscreen(void)
if (gBitTable[0] & hitmarkerFaintBits)
{
gActiveBattler = 0;
- if (sub_80423F4(0, 6, 6))
+ if (HasNoMonsToSwitch(0, 6, 6))
{
gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5218,7 +5219,7 @@ static void atk50_openpartyscreen(void)
if (gBitTable[2] & hitmarkerFaintBits && !(gBitTable[0] & hitmarkerFaintBits))
{
gActiveBattler = 2;
- if (sub_80423F4(2, 6, 6))
+ if (HasNoMonsToSwitch(2, 6, 6))
{
gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5239,7 +5240,7 @@ static void atk50_openpartyscreen(void)
if (gBitTable[1] & hitmarkerFaintBits)
{
gActiveBattler = 1;
- if (sub_80423F4(1, 6, 6))
+ if (HasNoMonsToSwitch(1, 6, 6))
{
gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5261,7 +5262,7 @@ static void atk50_openpartyscreen(void)
if (gBitTable[3] & hitmarkerFaintBits && !(gBitTable[1] & hitmarkerFaintBits))
{
gActiveBattler = 3;
- if (sub_80423F4(3, 6, 6))
+ if (HasNoMonsToSwitch(3, 6, 6))
{
gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5324,7 +5325,7 @@ static void atk50_openpartyscreen(void)
if (gBitTable[2] & hitmarkerFaintBits && gBitTable[0] & hitmarkerFaintBits)
{
gActiveBattler = 2;
- if (sub_80423F4(2, gBattleBufferB[0][1], 6))
+ if (HasNoMonsToSwitch(2, gBattleBufferB[0][1], 6))
{
gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5340,7 +5341,7 @@ static void atk50_openpartyscreen(void)
if (gBitTable[3] & hitmarkerFaintBits && hitmarkerFaintBits & gBitTable[1])
{
gActiveBattler = 3;
- if (sub_80423F4(3, gBattleBufferB[1][1], 6))
+ if (HasNoMonsToSwitch(3, gBattleBufferB[1][1], 6))
{
gAbsentBattlerFlags |= gBitTable[gActiveBattler];
gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler));
@@ -5383,16 +5384,16 @@ static void atk50_openpartyscreen(void)
else
{
if (gBattlescriptCurrInstr[1] & 0x80)
- hitmarkerFaintBits = 0; // used here as the caseId for the EmitChoose function
+ hitmarkerFaintBits = PARTY_CHOOSE_MON; // Used here as the caseId for the EmitChoose function.
else
- hitmarkerFaintBits = 1;
+ hitmarkerFaintBits = PARTY_MUST_CHOOSE_MON;
battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(0x80));
if (gSpecialStatuses[battlerId].flag40)
{
gBattlescriptCurrInstr += 6;
}
- else if (sub_80423F4(battlerId, 6, 6))
+ else if (HasNoMonsToSwitch(battlerId, 6, 6))
{
gActiveBattler = battlerId;
gAbsentBattlerFlags |= gBitTable[gActiveBattler];
@@ -5556,7 +5557,7 @@ static void atk52_switchineffects(void)
for (i = 0; i < gBattlersCount; i++)
{
- if (gBattleTurnOrder[i] == gActiveBattler)
+ if (gBattlerByTurnOrder[i] == gActiveBattler)
gActionsByTurnOrder[i] = B_ACTION_CANCEL_PARTNER;
}
@@ -5687,7 +5688,7 @@ static void atk5A_yesnoboxlearnmove(void)
{
case 0:
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
- BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
+ BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC);
gBattleScripting.learnMoveState++;
gBattleCommunication[CURSOR_POSITION] = 0;
BattleCreateYesNoCursorAt(0);
@@ -5804,7 +5805,7 @@ static void atk5B_yesnoboxstoplearningmove(void)
{
case 0:
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
- BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
+ BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC);
gBattleScripting.learnMoveState++;
gBattleCommunication[CURSOR_POSITION] = 0;
BattleCreateYesNoCursorAt(0);
@@ -5871,7 +5872,7 @@ static u32 GetTrainerMoneyToGive(u16 trainerId)
u32 lastMonLevel = 0;
u32 moneyReward = 0;
- if (trainerId == SECRET_BASE_OPPONENT)
+ if (trainerId == TRAINER_SECRET_BASE)
{
moneyReward = 20 * gBattleResources->secretBase->party.levels[0] * gBattleStruct->moneyMultiplier;
}
@@ -5950,7 +5951,7 @@ static void atk5E(void)
if (gBattleControllerExecFlags == 0)
{
s32 i;
- struct BattlePokemon* bufferPoke = (struct BattlePokemon*) &gBattleBufferB[gActiveBattler][4];
+ struct BattlePokemon *bufferPoke = (struct BattlePokemon*) &gBattleBufferB[gActiveBattler][4];
for (i = 0; i < 4; i++)
{
gBattleMons[gActiveBattler].moves[i] = bufferPoke->moves[i];
@@ -5962,16 +5963,16 @@ static void atk5E(void)
}
}
-static void atk5F(void)
+static void atk5F_swapattackerwithtarget(void)
{
gActiveBattler = gBattlerAttacker;
gBattlerAttacker = gBattlerTarget;
gBattlerTarget = gActiveBattler;
- if (gHitMarker & HITMARKER_PURSUIT_TRAP)
- gHitMarker &= ~(HITMARKER_PURSUIT_TRAP);
+ if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET)
+ gHitMarker &= ~(HITMARKER_SWAP_ATTACKER_TARGET);
else
- gHitMarker |= HITMARKER_PURSUIT_TRAP;
+ gHitMarker |= HITMARKER_SWAP_ATTACKER_TARGET;
gBattlescriptCurrInstr++;
}
@@ -5987,8 +5988,8 @@ static void atk60_incrementgamestat(void)
static void atk61_drawpartystatussummary(void)
{
s32 i;
- struct Pokemon* party;
- struct HpAndStatus hpStatuses[6];
+ struct Pokemon *party;
+ struct HpAndStatus hpStatuses[PARTY_SIZE];
if (gBattleControllerExecFlags)
return;
@@ -6000,7 +6001,7 @@ static void atk61_drawpartystatussummary(void)
else
party = gEnemyParty;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE
|| GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG)
@@ -6021,10 +6022,10 @@ static void atk61_drawpartystatussummary(void)
gBattlescriptCurrInstr += 2;
}
-static void atk62(void)
+static void atk62_hidepartystatussummary(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- BtlController_EmitCmd49(0);
+ BtlController_EmitHidePartyStatusSummary(0);
MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 2;
@@ -6100,7 +6101,7 @@ static void atk67_yesnobox(void)
{
case 0:
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
- BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
+ BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC);
gBattleCommunication[0]++;
gBattleCommunication[CURSOR_POSITION] = 0;
BattleCreateYesNoCursorAt(0);
@@ -6631,7 +6632,7 @@ static void atk76_various(void)
gBattleCommunication[0] = 0;
break;
case VARIOUS_RESET_INTIMIDATE_TRACE_BITS:
- gSpecialStatuses[gActiveBattler].intimidatedPoke = 0;
+ gSpecialStatuses[gActiveBattler].intimidatedMon = 0;
gSpecialStatuses[gActiveBattler].traced = 0;
break;
case VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP:
@@ -6720,7 +6721,7 @@ static void atk76_various(void)
break;
case 16:
BattleStringExpandPlaceholdersToDisplayedString(gRefereeStringsTable[gBattlescriptCurrInstr[1]]);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0x16);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0x16);
break;
case 17:
if (IsTextPrinterActive(0x16))
@@ -7507,7 +7508,7 @@ static void atk8F_forcerandomswitch(void)
else if ((gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
|| (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_x2000000))
{
- if (sub_806D82C(GetBattlerMultiplayerId(gBattlerTarget)) == 1)
+ if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gBattlerTarget)) == 1)
{
firstMonId = 3;
lastMonId = 6;
@@ -8125,7 +8126,7 @@ static void atk9E_metronome(void)
s32 i;
gCurrentMove = (Random() & 0x1FF) + 1;
- if (gCurrentMove > LAST_MOVE_INDEX)
+ if (gCurrentMove >= MOVES_COUNT)
continue;
for (i = 0; i < 4; i++); // ?
@@ -8595,7 +8596,7 @@ static void atkAE_healpartystatus(void)
if (gCurrentMove == MOVE_HEAL_BELL)
{
- struct Pokemon* party;
+ struct Pokemon *party;
s32 i;
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
@@ -8633,7 +8634,7 @@ static void atkAE_healpartystatus(void)
}
}
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
u16 species = GetMonData(&party[i], MON_DATA_SPECIES2);
u8 abilityBit = GetMonData(&party[i], MON_DATA_ALT_ABILITY);
@@ -8957,7 +8958,7 @@ static void atkBA_jumpifnopursuitswitchdmg(void)
for (i = 0; i < gBattlersCount; i++)
{
- if (gBattleTurnOrder[i] == gBattlerTarget)
+ if (gBattlerByTurnOrder[i] == gBattlerTarget)
gActionsByTurnOrder[i] = 11;
}
@@ -9045,7 +9046,7 @@ static void atkBE_rapidspinfree(void)
else if (gStatuses3[gBattlerAttacker] & STATUS3_LEECHSEED)
{
gStatuses3[gBattlerAttacker] &= ~(STATUS3_LEECHSEED);
- gStatuses3[gBattlerAttacker] &= ~(STATUS3_LEECHSEED_BANK);
+ gStatuses3[gBattlerAttacker] &= ~(STATUS3_LEECHSEED_BATTLER);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_LeechSeedFree;
}
@@ -9761,7 +9762,7 @@ static void atkE1_trygetintimidatetarget(void)
{
u8 side;
- gBattleScripting.battler = gBattleStruct->intimidateBank;
+ gBattleScripting.battler = gBattleStruct->intimidateBattler;
side = GetBattlerSide(gBattleScripting.battler);
PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gBattleMons[gBattleScripting.battler].ability)
@@ -10053,7 +10054,7 @@ static void atkEC_pursuitrelated(void)
}
}
-static void atkEF_snatchsetbanks(void)
+static void atkEF_snatchsetbattlers(void)
{
gEffectBattler = gBattlerAttacker;
@@ -10116,7 +10117,7 @@ static void atkEF_handleballthrow(void)
u8 catchRate;
if (gLastUsedItem == ITEM_SAFARI_BALL)
- catchRate = gBattleStruct->field_7C * 1275 / 100;
+ catchRate = gBattleStruct->safariCatchFactor * 1275 / 100;
else
catchRate = gBaseStats[gBattleMons[gBattlerTarget].species].catchRate;
@@ -10131,7 +10132,7 @@ static void atkEF_handleballthrow(void)
ballMultiplier = 10;
break;
case ITEM_DIVE_BALL:
- if (Overworld_GetMapTypeOfSaveblockLocation() == 5)
+ if (Overworld_GetMapTypeOfSaveblockLocation() == MAP_TYPE_UNDERWATER)
ballMultiplier = 35;
else
ballMultiplier = 10;
@@ -10406,7 +10407,7 @@ static void atkF3_trygivecaughtmonnick(void)
{
case 0:
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
- BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
+ BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC);
gBattleCommunication[MULTIUSE_STATE]++;
gBattleCommunication[CURSOR_POSITION] = 0;
BattleCreateYesNoCursorAt(0);
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 294256fb6..e478af936 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -32,6 +32,7 @@
#include "overworld.h"
#include "field_weather.h"
#include "gym_leader_rematch.h"
+#include "constants/map_types.h"
enum
{
@@ -798,7 +799,7 @@ static u8 GetTrainerBattleTransition(void)
u8 enemyLevel;
u8 playerLevel;
- if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT)
+ if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
return B_TRANSITION_CHAMPION;
if (gTrainers[gTrainerBattleOpponent_A].trainerClass == TRAINER_CLASS_ELITE_FOUR)
@@ -1088,14 +1089,14 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
switch (sTrainerBattleMode)
{
- case 3:
+ case TRAINER_BATTLE_NORMAL_NO_INTRO_TEXT:
TrainerBattleLoadArgs(sOrdinaryNoIntroBattleParams, data);
return EventScript_2713C2;
- case 4:
+ case TRAINER_BATTLE_DOUBLE:
TrainerBattleLoadArgs(sDoubleBattleParams, data);
SetMapVarsToTrainer();
return EventScript_TryDoDoubleTrainerBattle;
- case 2:
+ case TRAINER_BATTLE_CONTINUE_SCRIPT:
if (gApproachingTrainerId == 0)
{
TrainerBattleLoadArgs(sContinueScriptBattleParams, data);
@@ -1106,26 +1107,26 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
TrainerBattleLoadArgs(sTrainerBContinueScriptBattleParams, data);
}
return EventScript_271362;
- case 1:
+ case TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC:
TrainerBattleLoadArgs(sContinueScriptBattleParams, data);
SetMapVarsToTrainer();
return EventScript_271362;
- case 6:
- case 8:
+ case TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE:
+ case TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC:
TrainerBattleLoadArgs(sContinueScriptDoubleBattleParams, data);
SetMapVarsToTrainer();
return EventScript_TryDoDoubleTrainerBattle;
- case 7:
+ case TRAINER_BATTLE_REMATCH_DOUBLE:
TrainerBattleLoadArgs(sDoubleBattleParams, data);
SetMapVarsToTrainer();
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
return EventScript_TryDoDoubleRematchBattle;
- case 5:
+ case TRAINER_BATTLE_REMATCH:
TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
SetMapVarsToTrainer();
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
return EventScript_2713D1;
- case 9:
+ case TRAINER_BATTLE_9:
if (gApproachingTrainerId == 0)
{
TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
@@ -1138,13 +1139,13 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
gTrainerBattleOpponent_B = sub_81A9AA8(gSpecialVar_LastTalked);
}
return EventScript_271362;
- case 10:
+ case TRAINER_BATTLE_SET_TRAINER_A:
TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
return NULL;
- case 11:
+ case TRAINER_BATTLE_SET_TRAINER_B:
TrainerBattleLoadArgs(sTrainerBOrdinaryBattleParams, data);
return NULL;
- case 12:
+ case TRAINER_BATTLE_12:
if (gApproachingTrainerId == 0)
{
TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
@@ -1305,7 +1306,7 @@ void BattleSetup_StartTrainerBattle(void)
static void CB2_EndTrainerBattle(void)
{
- if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT)
+ if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
{
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
@@ -1329,7 +1330,7 @@ static void CB2_EndTrainerBattle(void)
static void CB2_EndRematchBattle(void)
{
- if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT)
+ if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
{
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
@@ -1497,7 +1498,7 @@ const u8 *GetTrainerALoseText(void)
{
const u8 *string;
- if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT)
+ if (gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
string = GetSecretBaseTrainerLoseText();
else
string = sTrainerADefeatSpeech;
@@ -1591,11 +1592,11 @@ static bool32 UpdateRandomTrainerRematches(const struct RematchTrainer *table, u
{
if (gSaveBlock1Ptr->trainerRematches[i] != 0)
{
- // Trainer already wants a rematch. Don't bother updating it
+ // Trainer already wants a rematch. Don't bother updating it.
ret = TRUE;
}
else if (FlagGet(FLAG_MATCH_CALL_REGISTERED + i)
- && (Random() % 100) <= 30) // 31% chance of getting a rematch
+ && (Random() % 100) <= 30) // 31% chance of getting a rematch.
{
SetRematchIdForTrainer(table, i);
ret = TRUE;
diff --git a/src/battle_tv.c b/src/battle_tv.c
index e5d97be30..6f9ee414e 100644
--- a/src/battle_tv.c
+++ b/src/battle_tv.c
@@ -9,8 +9,6 @@
#include "battle_message.h"
#include "tv.h"
-extern struct StringInfoBattle *gStringInfo;
-
// this file's functions
static bool8 sub_817E0B8(u16 stringId);
static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3);
@@ -223,7 +221,7 @@ void BattleTv_SetDataBasedOnString(u16 stringId)
atkSide = GetBattlerSide(gBattlerAttacker);
defSide = GetBattlerSide(gBattlerTarget);
effSide = GetBattlerSide(gEffectBattler);
- scriptingSide = GetBattlerSide(gStringInfo->scrActive);
+ scriptingSide = GetBattlerSide(gBattleMsgDataPtr->scrActive);
if (atkSide == B_SIDE_PLAYER)
atkMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]];
@@ -235,7 +233,7 @@ void BattleTv_SetDataBasedOnString(u16 stringId)
else
defMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]];
- moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, gStringInfo->currentMove);
+ moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, gBattleMsgDataPtr->currentMove);
if (moveSlot >= 4 && sub_817E0B8(stringId) && stringId > BATTLESTRINGS_ID_ADDER)
{
@@ -480,8 +478,8 @@ void BattleTv_SetDataBasedOnString(u16 stringId)
break;
case STRINGID_PKMNFASTASLEEP:
if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMonId != 0
- && gStringInfo->currentMove != MOVE_SNORE
- && gStringInfo->currentMove != MOVE_SLEEP_TALK)
+ && gBattleMsgDataPtr->currentMove != MOVE_SNORE
+ && gBattleMsgDataPtr->currentMove != MOVE_SLEEP_TALK)
AddMovePoints(9, 3, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMoveSlot);
break;
case STRINGID_PKMNWASFROZEN:
@@ -798,8 +796,8 @@ void TryPutLinkBattleTvShowOnAir(void)
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
- if ((playerBestMonId < 3 && !sub_806D82C(gBattleScripting.multiplayerId))
- || (playerBestMonId >= 3 && sub_806D82C(gBattleScripting.multiplayerId)))
+ if ((playerBestMonId < 3 && !GetLinkTrainerFlankId(gBattleScripting.multiplayerId))
+ || (playerBestMonId >= 3 && GetLinkTrainerFlankId(gBattleScripting.multiplayerId)))
{
j = (opponentBestMonId < 3) ? 0 : 1;
PutBattleUpdateOnTheAir(sub_806EF84(j, gBattleScripting.multiplayerId), moveId, playerBestSpecies, opponentBestSpecies);
@@ -1080,7 +1078,7 @@ _0817E5C8:\n\
ldr r0, =gBattleScripting\n\
adds r0, 0x25\n\
ldrb r0, [r0]\n\
- bl sub_806D82C\n\
+ bl GetLinkTrainerFlankId\n\
lsls r0, 16\n\
cmp r0, 0\n\
beq _0817E630\n\
@@ -1090,7 +1088,7 @@ _0817E620:\n\
ldr r0, =gBattleScripting\n\
adds r0, 0x25\n\
ldrb r0, [r0]\n\
- bl sub_806D82C\n\
+ bl GetLinkTrainerFlankId\n\
lsls r0, 16\n\
cmp r0, 0\n\
beq _0817E670\n\
diff --git a/src/battle_util.c b/src/battle_util.c
index 172ec6659..c739c648c 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -46,7 +46,7 @@ u8 GetBattlerForBattleScript(u8 caseId)
case BS_EFFECT_BATTLER:
ret = gEffectBattler;
break;
- case BS_BANK_0:
+ case BS_BATTLER_0:
ret = 0;
break;
case BS_SCRIPTING:
@@ -292,7 +292,7 @@ void sub_803FA70(u8 battler)
}
}
-void BattleScriptPush(const u8* bsPtr)
+void BattleScriptPush(const u8 *bsPtr)
{
gBattleResources->battleScriptsStack->ptr[gBattleResources->battleScriptsStack->size++] = bsPtr;
}
@@ -453,14 +453,14 @@ bool8 AreAllMovesUnusable(void)
u8 unusable;
unusable = CheckMoveLimitations(gActiveBattler, 0, 0xFF);
- if (unusable == 0xF) // all moves are unusable
+ if (unusable == 0xF) // All moves are unusable.
{
- gProtectStructs[gActiveBattler].onlyStruggle = 1;
+ gProtectStructs[gActiveBattler].noValidMoves = 1;
gSelectionBattleScripts[gActiveBattler] = BattleScript_NoMovesLeft;
}
else
{
- gProtectStructs[gActiveBattler].onlyStruggle = 0;
+ gProtectStructs[gActiveBattler].noValidMoves = 0;
}
return (unusable == 0xF);
@@ -470,11 +470,11 @@ u8 GetImprisonedMovesCount(u8 battlerId, u16 move)
{
s32 i;
u8 imprisionedMoves = 0;
- u8 bankSide = GetBattlerSide(battlerId);
+ u8 battlerSide = GetBattlerSide(battlerId);
for (i = 0; i < gBattlersCount; i++)
{
- if (bankSide != GetBattlerSide(i) && gStatuses3[i] & STATUS3_IMPRISONED_OTHERS)
+ if (battlerSide != GetBattlerSide(i) && gStatuses3[i] & STATUS3_IMPRISONED_OTHERS)
{
s32 j;
for (j = 0; j < 4; j++)
@@ -504,21 +504,21 @@ u8 UpdateTurnCounters(void)
do
{
- u8 sideBank;
+ u8 side;
switch (gBattleStruct->turnCountersTracker)
{
case 0:
for (i = 0; i < gBattlersCount; i++)
{
- gBattleTurnOrder[i] = i;
+ gBattlerByTurnOrder[i] = i;
}
for (i = 0; i < gBattlersCount - 1; i++)
{
s32 j;
for (j = i + 1; j < gBattlersCount; j++)
{
- if (GetWhoStrikesFirst(gBattleTurnOrder[i], gBattleTurnOrder[j], 0))
+ if (GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], 0))
SwapTurnOrder(i, j);
}
}
@@ -533,13 +533,13 @@ u8 UpdateTurnCounters(void)
case 1:
while (gBattleStruct->turnSideTracker < 2)
{
- sideBank = gBattleStruct->turnSideTracker;
- gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].reflectBattlerId;
- if (gSideStatuses[sideBank] & SIDE_STATUS_REFLECT)
+ side = gBattleStruct->turnSideTracker;
+ gActiveBattler = gBattlerAttacker = gSideTimers[side].reflectBattlerId;
+ if (gSideStatuses[side] & SIDE_STATUS_REFLECT)
{
- if (--gSideTimers[sideBank].reflectTimer == 0)
+ if (--gSideTimers[side].reflectTimer == 0)
{
- gSideStatuses[sideBank] &= ~SIDE_STATUS_REFLECT;
+ gSideStatuses[side] &= ~SIDE_STATUS_REFLECT;
BattleScriptExecute(BattleScript_SideStatusWoreOff);
PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_REFLECT);
effect++;
@@ -558,15 +558,15 @@ u8 UpdateTurnCounters(void)
case 2:
while (gBattleStruct->turnSideTracker < 2)
{
- sideBank = gBattleStruct->turnSideTracker;
- gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].lightscreenBattlerId;
- if (gSideStatuses[sideBank] & SIDE_STATUS_LIGHTSCREEN)
+ side = gBattleStruct->turnSideTracker;
+ gActiveBattler = gBattlerAttacker = gSideTimers[side].lightscreenBattlerId;
+ if (gSideStatuses[side] & SIDE_STATUS_LIGHTSCREEN)
{
- if (--gSideTimers[sideBank].lightscreenTimer == 0)
+ if (--gSideTimers[side].lightscreenTimer == 0)
{
- gSideStatuses[sideBank] &= ~SIDE_STATUS_LIGHTSCREEN;
+ gSideStatuses[side] &= ~SIDE_STATUS_LIGHTSCREEN;
BattleScriptExecute(BattleScript_SideStatusWoreOff);
- gBattleCommunication[MULTISTRING_CHOOSER] = sideBank;
+ gBattleCommunication[MULTISTRING_CHOOSER] = side;
PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_LIGHT_SCREEN);
effect++;
}
@@ -584,14 +584,14 @@ u8 UpdateTurnCounters(void)
case 3:
while (gBattleStruct->turnSideTracker < 2)
{
- sideBank = gBattleStruct->turnSideTracker;
- gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].mistBattlerId;
- if (gSideTimers[sideBank].mistTimer != 0
- && --gSideTimers[sideBank].mistTimer == 0)
+ side = gBattleStruct->turnSideTracker;
+ gActiveBattler = gBattlerAttacker = gSideTimers[side].mistBattlerId;
+ if (gSideTimers[side].mistTimer != 0
+ && --gSideTimers[side].mistTimer == 0)
{
- gSideStatuses[sideBank] &= ~SIDE_STATUS_MIST;
+ gSideStatuses[side] &= ~SIDE_STATUS_MIST;
BattleScriptExecute(BattleScript_SideStatusWoreOff);
- gBattleCommunication[MULTISTRING_CHOOSER] = sideBank;
+ gBattleCommunication[MULTISTRING_CHOOSER] = side;
PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_MIST);
effect++;
}
@@ -608,13 +608,13 @@ u8 UpdateTurnCounters(void)
case 4:
while (gBattleStruct->turnSideTracker < 2)
{
- sideBank = gBattleStruct->turnSideTracker;
- gActiveBattler = gBattlerAttacker = gSideTimers[sideBank].safeguardBattlerId;
- if (gSideStatuses[sideBank] & SIDE_STATUS_SAFEGUARD)
+ side = gBattleStruct->turnSideTracker;
+ gActiveBattler = gBattlerAttacker = gSideTimers[side].safeguardBattlerId;
+ if (gSideStatuses[side] & SIDE_STATUS_SAFEGUARD)
{
- if (--gSideTimers[sideBank].safeguardTimer == 0)
+ if (--gSideTimers[side].safeguardTimer == 0)
{
- gSideStatuses[sideBank] &= ~SIDE_STATUS_SAFEGUARD;
+ gSideStatuses[side] &= ~SIDE_STATUS_SAFEGUARD;
BattleScriptExecute(BattleScript_SafeguardEnds);
effect++;
}
@@ -632,7 +632,7 @@ u8 UpdateTurnCounters(void)
case 5:
while (gBattleStruct->turnSideTracker < gBattlersCount)
{
- gActiveBattler = gBattleTurnOrder[gBattleStruct->turnSideTracker];
+ gActiveBattler = gBattlerByTurnOrder[gBattleStruct->turnSideTracker];
if (gWishFutureKnock.wishCounter[gActiveBattler] != 0
&& --gWishFutureKnock.wishCounter[gActiveBattler] == 0
&& gBattleMons[gActiveBattler].hp != 0)
@@ -755,7 +755,7 @@ u8 TurnBasedEffects(void)
gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20);
while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= TURNBASED_MAX_CASE)
{
- gActiveBattler = gBattlerAttacker = gBattleTurnOrder[gBattleStruct->turnEffectsBattlerId];
+ gActiveBattler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->turnEffectsBattlerId];
if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
{
gBattleStruct->turnEffectsBattlerId++;
@@ -795,10 +795,10 @@ u8 TurnBasedEffects(void)
break;
case 3: // leech seed
if ((gStatuses3[gActiveBattler] & STATUS3_LEECHSEED)
- && gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BANK].hp != 0
+ && gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER].hp != 0
&& gBattleMons[gActiveBattler].hp != 0)
{
- gBattlerTarget = gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BANK; //funny how the 'target' is actually the battlerId that receives HP
+ gBattlerTarget = gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver.
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
@@ -848,8 +848,8 @@ u8 TurnBasedEffects(void)
case 7: // spooky nightmares
if ((gBattleMons[gActiveBattler].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBattler].hp != 0)
{
- // R/S does not perform this sleep check, which causes the nighmare effect to
- // persist even after the affected Pokemon has been awakened by Shed Skin
+ // R/S does not perform this sleep check, which causes the nightmare effect to
+ // persist even after the affected Pokemon has been awakened by Shed Skin.
if (gBattleMons[gActiveBattler].status1 & STATUS1_SLEEP)
{
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4;
@@ -983,7 +983,7 @@ u8 TurnBasedEffects(void)
case 12: // disable
if (gDisableStructs[gActiveBattler].disableTimer1 != 0)
{
- int i;
+ s32 i;
for (i = 0; i < 4; i++)
{
if (gDisableStructs[gActiveBattler].disabledMove == gBattleMons[gActiveBattler].moves[i])
@@ -1121,7 +1121,7 @@ bool8 HandleWishPerishSongOnTurnEnd(void)
case 1:
while (gBattleStruct->wishPerishSongBattlerId < gBattlersCount)
{
- gActiveBattler = gBattlerAttacker = gBattleTurnOrder[gBattleStruct->wishPerishSongBattlerId];
+ gActiveBattler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->wishPerishSongBattlerId];
if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
{
gBattleStruct->wishPerishSongBattlerId++;
@@ -1184,7 +1184,7 @@ bool8 HandleFaintedMonActions(void)
return FALSE;
do
{
- int i;
+ s32 i;
switch (gBattleStruct->faintedActionsState)
{
case 0:
@@ -1192,7 +1192,7 @@ bool8 HandleFaintedMonActions(void)
gBattleStruct->faintedActionsState++;
for (i = 0; i < gBattlersCount; i++)
{
- if (gAbsentBattlerFlags & gBitTable[i] && !sub_80423F4(i, 6, 6))
+ if (gAbsentBattlerFlags & gBitTable[i] && !HasNoMonsToSwitch(i, 6, 6))
gAbsentBattlerFlags &= ~(gBitTable[i]);
}
// fall through
@@ -1256,7 +1256,7 @@ bool8 HandleFaintedMonActions(void)
void TryClearRageStatuses(void)
{
- int i;
+ s32 i;
for (i = 0; i < gBattlersCount; i++)
{
if ((gBattleMons[i].status2 & STATUS2_RAGE) && gChosenMoveByBattler[i] != MOVE_RAGE)
@@ -1467,7 +1467,9 @@ u8 AtkCanceller_UnableToUseMove(void)
{
gBattleScripting.battler = CountTrailingZeroBits((gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) >> 0x10);
if (Random() & 1)
+ {
BattleScriptPushCursor();
+ }
else
{
BattleScriptPush(BattleScript_MoveUsedIsParalyzedCantAttack);
@@ -1485,7 +1487,9 @@ u8 AtkCanceller_UnableToUseMove(void)
{
gBattleMons[gBattlerAttacker].status2 -= 0x100;
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE)
+ {
gBattlescriptCurrInstr = BattleScript_BideStoringEnergy;
+ }
else
{
// This is removed in Emerald for some reason
@@ -1500,7 +1504,9 @@ u8 AtkCanceller_UnableToUseMove(void)
gBattlescriptCurrInstr = BattleScript_BideAttack;
}
else
+ {
gBattlescriptCurrInstr = BattleScript_BideNoEnergyToAttack;
+ }
}
effect = 1;
}
@@ -1535,29 +1541,31 @@ u8 AtkCanceller_UnableToUseMove(void)
return effect;
}
-bool8 sub_80423F4(u8 battler, u8 r1, u8 r2)
+bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2)
{
- struct Pokemon* party;
- u8 r7;
- u8 r6;
+ struct Pokemon *party;
+ u8 id1, id2;
s32 i;
+
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
return FALSE;
+
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
- r6 = ((battler & 2) / 2);
- for (i = r6 * 3; i < r6 * 3 + 3; i++)
+
+ id1 = ((battler & BIT_FLANK) / 2);
+ for (i = id1 * 3; i < id1 * 3 + 3; i++)
{
if (GetMonData(&party[i], MON_DATA_HP) != 0
- && GetMonData(&party[i], MON_DATA_SPECIES2) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
break;
}
- return (i == r6 * 3 + 3);
+ return (i == id1 * 3 + 3);
}
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
@@ -1566,86 +1574,95 @@ bool8 sub_80423F4(u8 battler, u8 r1, u8 r2)
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
{
party = gPlayerParty;
- r7 = GetBattlerMultiplayerId(battler);
- r6 = sub_806D82C(r7);
+ id2 = GetBattlerMultiplayerId(battler);
+ id1 = GetLinkTrainerFlankId(id2);
}
else
{
- // FIXME: Compiler insists on moving r4 into r1 before doing the eor
+ // FIXME: Compiler insists on moving r4 into r1 before doing the eor.
#ifndef NONMATCHING
- register u32 var asm("r1");
+ register u32 var asm("r1");
#else
- u32 var;
+ u32 var;
#endif // NONMATCHING
party = gEnemyParty;
- var = battler ^ 1;
- r6 = (var != 0) ? 1 : 0;
+ var = battler ^ BIT_SIDE;
+ if (var == 0)
+ id1 = 0;
+ else
+ id1 = 1;
}
}
else
{
- r7 = GetBattlerMultiplayerId(battler);
+ id2 = GetBattlerMultiplayerId(battler);
+
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
- r6 = sub_806D82C(r7);
+
+ id1 = GetLinkTrainerFlankId(id2);
}
- for (i = r6 * 3; i < r6 * 3 + 3; i++)
+
+ for (i = id1 * 3; i < id1 * 3 + 3; i++)
{
if (GetMonData(&party[i], MON_DATA_HP) != 0
- && GetMonData(&party[i], MON_DATA_SPECIES2) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
break;
}
- return (i == r6 * 3 + 3);
+ return (i == id1 * 3 + 3);
}
else if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && GetBattlerSide(battler) == B_SIDE_OPPONENT)
{
party = gEnemyParty;
if (battler == 1)
- r6 = 0;
+ id1 = 0;
else
- r6 = 3;
- for (i = r6; i < r6 + 3; i++)
+ id1 = 3;
+
+ for (i = id1; i < id1 + 3; i++)
{
if (GetMonData(&party[i], MON_DATA_HP) != 0
- && GetMonData(&party[i], MON_DATA_SPECIES2) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG)
break;
}
- return (i == r6 + 3);
+ return (i == id1 + 3);
}
else
{
if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
{
- r7 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- r6 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ id2 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ id1 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
party = gEnemyParty;
}
else
{
- r7 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
- r6 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ id2 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ id1 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
party = gPlayerParty;
}
- if (r1 == 6)
- r1 = gBattlerPartyIndexes[r7];
- if (r2 == 6)
- r2 = gBattlerPartyIndexes[r6];
- for (i = 0; i < 6; i++)
+
+ if (partyIdBattlerOn1 == PARTY_SIZE)
+ partyIdBattlerOn1 = gBattlerPartyIndexes[id2];
+ if (partyIdBattlerOn2 == PARTY_SIZE)
+ partyIdBattlerOn2 = gBattlerPartyIndexes[id1];
+
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&party[i], MON_DATA_HP) != 0
- && GetMonData(&party[i], MON_DATA_SPECIES2) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE
&& GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG
- // FIXME: Using index[array] instead of array[index] is BAD!
- && i != r1 && i != r2 && i != r7[gBattleStruct->monToSwitchIntoId] && i != r6[gBattleStruct->monToSwitchIntoId])
+ && i != partyIdBattlerOn1 && i != partyIdBattlerOn2
+ && i != *(gBattleStruct->monToSwitchIntoId + id2) && i != id1[gBattleStruct->monToSwitchIntoId])
break;
}
- return (i == 6);
+ return (i == PARTY_SIZE);
}
}
@@ -1706,6 +1723,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (gBattlerAttacker >= gBattlersCount)
gBattlerAttacker = battler;
+
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
pokeAtk = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]];
else
@@ -1713,6 +1731,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (gBattlerTarget >= gBattlersCount)
gBattlerTarget = battler;
+
if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
pokeDef = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]];
else
@@ -1724,7 +1743,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
speciesDef = GetMonData(pokeDef, MON_DATA_SPECIES);
pidDef = GetMonData(pokeDef, MON_DATA_PERSONALITY);
- if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) // why isn't that check done at the beginning?
+ if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) // Why isn't that check done at the beginning?
{
u8 moveType;
s32 i;
@@ -1821,10 +1840,10 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
}
break;
case ABILITY_INTIMIDATE:
- if (!(gSpecialStatuses[battler].intimidatedPoke))
+ if (!(gSpecialStatuses[battler].intimidatedMon))
{
gStatuses3[battler] |= STATUS3_INTIMIDATE_POKES;
- gSpecialStatuses[battler].intimidatedPoke = 1;
+ gSpecialStatuses[battler].intimidatedMon = 1;
}
break;
case ABILITY_FORECAST:
@@ -2271,7 +2290,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
gLastUsedAbility = ABILITY_INTIMIDATE;
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
BattleScriptPushCursorAndCallback(BattleScript_82DB4B8);
- gBattleStruct->intimidateBank = i;
+ gBattleStruct->intimidateBattler = i;
effect++;
break;
}
@@ -2343,7 +2362,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_82DB4C1;
- gBattleStruct->intimidateBank = i;
+ gBattleStruct->intimidateBattler = i;
effect++;
break;
}
@@ -2360,7 +2379,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
}
}
break;
- case ABILITYEFFECT_CHECK_BANK_SIDE: // 13
+ case ABILITYEFFECT_CHECK_BATTLER_SIDE: // 13
side = GetBattlerSide(battler);
for (i = 0; i < gBattlersCount; i++)
{
@@ -2410,7 +2429,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
}
}
break;
- case ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK: // 15
+ case ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER: // 15
for (i = 0; i < gBattlersCount; i++)
{
if (gBattleMons[i].ability == ability && i != battler)
@@ -2431,7 +2450,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
}
}
break;
- case ABILITYEFFECT_COUNT_BANK_SIDE: // 17
+ case ABILITYEFFECT_COUNT_BATTLER_SIDE: // 17
side = GetBattlerSide(battler);
for (i = 0; i < gBattlersCount; i++)
{
@@ -2492,32 +2511,32 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
int i = 0;
u8 effect = ITEM_NO_EFFECT;
u8 changedPP = 0;
- u8 bankHoldEffect, atkHoldEffect, defHoldEffect;
- u8 bankQuality, atkQuality, defQuality;
+ u8 battlerHoldEffect, atkHoldEffect, defHoldEffect;
+ u8 battlerHoldEffectParam, atkHoldEffectParam, defHoldEffectParam;
u16 atkItem, defItem;
gLastUsedItem = gBattleMons[battlerId].item;
if (gLastUsedItem == ITEM_ENIGMA_BERRY)
{
- bankHoldEffect = gEnigmaBerries[battlerId].holdEffect;
- bankQuality = gEnigmaBerries[battlerId].holdEffectParam;
+ battlerHoldEffect = gEnigmaBerries[battlerId].holdEffect;
+ battlerHoldEffectParam = gEnigmaBerries[battlerId].holdEffectParam;
}
else
{
- bankHoldEffect = ItemId_GetHoldEffect(gLastUsedItem);
- bankQuality = ItemId_GetHoldEffectParam(gLastUsedItem);
+ battlerHoldEffect = ItemId_GetHoldEffect(gLastUsedItem);
+ battlerHoldEffectParam = ItemId_GetHoldEffectParam(gLastUsedItem);
}
atkItem = gBattleMons[gBattlerAttacker].item;
if (atkItem == ITEM_ENIGMA_BERRY)
{
atkHoldEffect = gEnigmaBerries[gBattlerAttacker].holdEffect;
- atkQuality = gEnigmaBerries[gBattlerAttacker].holdEffectParam;
+ atkHoldEffectParam = gEnigmaBerries[gBattlerAttacker].holdEffectParam;
}
else
{
atkHoldEffect = ItemId_GetHoldEffect(atkItem);
- atkQuality = ItemId_GetHoldEffectParam(atkItem);
+ atkHoldEffectParam = ItemId_GetHoldEffectParam(atkItem);
}
// def variables are unused
@@ -2525,18 +2544,18 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
if (defItem == ITEM_ENIGMA_BERRY)
{
defHoldEffect = gEnigmaBerries[gBattlerTarget].holdEffect;
- defQuality = gEnigmaBerries[gBattlerTarget].holdEffectParam;
+ defHoldEffectParam = gEnigmaBerries[gBattlerTarget].holdEffectParam;
}
else
{
defHoldEffect = ItemId_GetHoldEffect(defItem);
- defQuality = ItemId_GetHoldEffectParam(defItem);
+ defHoldEffectParam = ItemId_GetHoldEffectParam(defItem);
}
switch (caseID)
{
case ITEMEFFECT_ON_SWITCH_IN:
- switch (bankHoldEffect)
+ switch (battlerHoldEffect)
{
case HOLD_EFFECT_DOUBLE_PRIZE:
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
@@ -2564,13 +2583,13 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
case 1:
if (gBattleMons[battlerId].hp)
{
- switch (bankHoldEffect)
+ switch (battlerHoldEffect)
{
case HOLD_EFFECT_RESTORE_HP:
if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / 2 && !moveTurn)
{
- gBattleMoveDamage = bankQuality;
- if (gBattleMons[battlerId].hp + bankQuality > gBattleMons[battlerId].maxHP)
+ gBattleMoveDamage = battlerHoldEffectParam;
+ if (gBattleMons[battlerId].hp + battlerHoldEffectParam > gBattleMons[battlerId].maxHP)
gBattleMoveDamage = gBattleMons[battlerId].maxHP - gBattleMons[battlerId].hp;
gBattleMoveDamage *= -1;
BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem);
@@ -2599,10 +2618,10 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
if (i != 4)
{
u8 maxPP = CalculatePPWithBonus(move, ppBonuses, i);
- if (changedPP + bankQuality > maxPP)
+ if (changedPP + battlerHoldEffectParam > maxPP)
changedPP = maxPP;
else
- changedPP = changedPP + bankQuality;
+ changedPP = changedPP + battlerHoldEffectParam;
PREPARE_MOVE_BUFFER(gBattleTextBuff1, move);
@@ -2641,7 +2660,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
gBattleMoveDamage *= -1;
BattleScriptExecute(BattleScript_ItemHealHP_End2);
effect = ITEM_HP_CHANGE;
- RecordItemEffectBattle(battlerId, bankHoldEffect);
+ RecordItemEffectBattle(battlerId, battlerHoldEffect);
}
break;
// nice copy/paste there gamefreak, making a function for confuse berries was too much eh?
@@ -2650,7 +2669,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SPICY);
- gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality;
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
@@ -2668,7 +2687,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_DRY);
- gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality;
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
@@ -2686,7 +2705,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SWEET);
- gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality;
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
@@ -2704,7 +2723,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_BITTER);
- gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality;
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
@@ -2722,7 +2741,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{
PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, FLAVOR_SOUR);
- gBattleMoveDamage = gBattleMons[battlerId].maxHP / bankQuality;
+ gBattleMoveDamage = gBattleMons[battlerId].maxHP / battlerHoldEffectParam;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
if (gBattleMons[battlerId].hp + gBattleMoveDamage > gBattleMons[battlerId].maxHP)
@@ -2737,7 +2756,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
break;
// copy/paste again, smh
case HOLD_EFFECT_ATTACK_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_ATK] < 0xC)
{
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK);
PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_STATROSE);
@@ -2751,7 +2770,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_DEFENSE_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_DEF] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_DEF] < 0xC)
{
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_DEF);
@@ -2764,7 +2783,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_SPEED_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPEED] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPEED] < 0xC)
{
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPEED);
@@ -2777,7 +2796,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_SP_ATTACK_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPATK] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPATK] < 0xC)
{
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK);
@@ -2790,7 +2809,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_SP_DEFENSE_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPDEF] < 0xC)
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && gBattleMons[battlerId].statStages[STAT_SPDEF] < 0xC)
{
PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPDEF);
@@ -2803,7 +2822,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_CRITICAL_UP:
- if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality && !moveTurn && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY))
+ if (gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam && !moveTurn && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY))
{
gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY;
BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2);
@@ -2811,7 +2830,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
break;
case HOLD_EFFECT_RANDOM_STAT_UP:
- if (!moveTurn && gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / bankQuality)
+ if (!moveTurn && gBattleMons[battlerId].hp <= gBattleMons[battlerId].maxHP / battlerHoldEffectParam)
{
for (i = 0; i < 5; i++)
{
@@ -2977,15 +2996,15 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
gLastUsedItem = gBattleMons[battlerId].item;
if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY)
{
- bankHoldEffect = gEnigmaBerries[battlerId].holdEffect;
- bankQuality = gEnigmaBerries[battlerId].holdEffectParam;
+ battlerHoldEffect = gEnigmaBerries[battlerId].holdEffect;
+ battlerHoldEffectParam = gEnigmaBerries[battlerId].holdEffectParam;
}
else
{
- bankHoldEffect = ItemId_GetHoldEffect(gLastUsedItem);
- bankQuality = ItemId_GetHoldEffectParam(gLastUsedItem);
+ battlerHoldEffect = ItemId_GetHoldEffect(gLastUsedItem);
+ battlerHoldEffectParam = ItemId_GetHoldEffectParam(gLastUsedItem);
}
- switch (bankHoldEffect)
+ switch (battlerHoldEffect)
{
case HOLD_EFFECT_CURE_PAR:
if (gBattleMons[battlerId].status1 & STATUS1_PARALYSIS)
@@ -3127,7 +3146,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
case HOLD_EFFECT_FLINCH:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& TARGET_TURN_DAMAGED
- && (Random() % 100) < atkQuality
+ && (Random() % 100) < atkHoldEffectParam
&& gBattleMoves[gCurrentMove].flags & FLAG_KINGSROCK_AFFECTED
&& gBattleMons[gBattlerTarget].hp)
{
@@ -3148,7 +3167,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
gLastUsedItem = atkItem;
gPotentialItemEffectBattler = gBattlerAttacker;
gBattleScripting.battler = gBattlerAttacker;
- gBattleMoveDamage = (gSpecialStatuses[gBattlerTarget].dmg / atkQuality) * -1;
+ gBattleMoveDamage = (gSpecialStatuses[gBattlerTarget].dmg / atkHoldEffectParam) * -1;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = -1;
gSpecialStatuses[gBattlerTarget].dmg = 0;
@@ -3180,7 +3199,7 @@ void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands
u8 GetMoveTarget(u16 move, u8 setTarget)
{
- u8 targetBank = 0;
+ u8 targetBattler = 0;
u8 moveTarget;
u8 side;
@@ -3194,21 +3213,21 @@ u8 GetMoveTarget(u16 move, u8 setTarget)
case MOVE_TARGET_SELECTED:
side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp)
- targetBank = gSideTimers[side].followmeTarget;
+ targetBattler = gSideTimers[side].followmeTarget;
else
{
side = GetBattlerSide(gBattlerAttacker);
do
{
- targetBank = Random() % gBattlersCount;
- } while (targetBank == gBattlerAttacker || side == GetBattlerSide(targetBank) || gAbsentBattlerFlags & gBitTable[targetBank]);
+ targetBattler = Random() % gBattlersCount;
+ } while (targetBattler == gBattlerAttacker || side == GetBattlerSide(targetBattler) || gAbsentBattlerFlags & gBitTable[targetBattler]);
if (gBattleMoves[move].type == TYPE_ELECTRIC
&& AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIDE, gBattlerAttacker, ABILITY_LIGHTNING_ROD, 0, 0)
- && gBattleMons[targetBank].ability != ABILITY_LIGHTNING_ROD)
+ && gBattleMons[targetBattler].ability != ABILITY_LIGHTNING_ROD)
{
- targetBank ^= BIT_FLANK;
- RecordAbilityBattle(targetBank, gBattleMons[targetBank].ability);
- gSpecialStatuses[targetBank].lightningRodRedirected = 1;
+ targetBattler ^= BIT_FLANK;
+ RecordAbilityBattle(targetBattler, gBattleMons[targetBattler].ability);
+ gSpecialStatuses[targetBattler].lightningRodRedirected = 1;
}
}
break;
@@ -3216,45 +3235,45 @@ u8 GetMoveTarget(u16 move, u8 setTarget)
case MOVE_TARGET_BOTH:
case MOVE_TARGET_FOES_AND_ALLY:
case MOVE_TARGET_OPPONENTS_FIELD:
- targetBank = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE);
- if (gAbsentBattlerFlags & gBitTable[targetBank])
- targetBank ^= BIT_FLANK;
+ targetBattler = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE);
+ if (gAbsentBattlerFlags & gBitTable[targetBattler])
+ targetBattler ^= BIT_FLANK;
break;
case MOVE_TARGET_RANDOM:
side = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp)
- targetBank = gSideTimers[side].followmeTarget;
+ targetBattler = gSideTimers[side].followmeTarget;
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & MOVE_TARGET_RANDOM)
{
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
{
if (Random() & 1)
- targetBank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ targetBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
else
- targetBank = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ targetBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
}
else
{
if (Random() & 1)
- targetBank = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ targetBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
else
- targetBank = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ targetBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
}
- if (gAbsentBattlerFlags & gBitTable[targetBank])
- targetBank ^= BIT_FLANK;
+ if (gAbsentBattlerFlags & gBitTable[targetBattler])
+ targetBattler ^= BIT_FLANK;
}
else
- targetBank = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE);
+ targetBattler = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE);
break;
case MOVE_TARGET_USER_OR_SELECTED:
case MOVE_TARGET_USER:
- targetBank = gBattlerAttacker;
+ targetBattler = gBattlerAttacker;
break;
}
- *(gBattleStruct->moveTarget + gBattlerAttacker) = targetBank;
+ *(gBattleStruct->moveTarget + gBattlerAttacker) = targetBattler;
- return targetBank;
+ return targetBattler;
}
static bool32 HasObedientBitSet(u8 battlerId)
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 4127befbd..257c7233f 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -15,6 +15,7 @@
#include "malloc.h"
#include "gpu_regs.h"
#include "text.h"
+#include "text_window.h"
#include "event_data.h"
#include "main.h"
#include "link.h"
@@ -153,8 +154,6 @@ extern const u8 gText_234Players[];
extern void sub_800A418(void);
extern u8 sub_800A9D8(void);
-extern void LoadUserWindowBorderGfx(u8, u16, u8);
-extern void copy_textbox_border_tile_patterns_to_vram(u8, u16, u8);
extern void sub_81AABF0(void (*callback)(void));
extern void sub_800B4C0(void);
extern void ClearLinkCallback(void);
@@ -928,7 +927,7 @@ static void sub_807FAC8(void)
SetBgTilemapBuffer(1, sBerryBlenderData->tilemapBuffers[0]);
SetBgTilemapBuffer(2, sBerryBlenderData->tilemapBuffers[1]);
LoadUserWindowBorderGfx(0, 1, 0xD0);
- copy_textbox_border_tile_patterns_to_vram(0, 0x14, 0xF0);
+ LoadMessageBoxGfx(0, 0x14, 0xF0);
InitBerryBlenderWindows();
sBerryBlenderData->mainState++;
@@ -1330,9 +1329,8 @@ static void sub_8080588(void)
SetBgTilemapBuffer(1, sBerryBlenderData->tilemapBuffers[0]);
SetBgTilemapBuffer(2, sBerryBlenderData->tilemapBuffers[1]);
-
LoadUserWindowBorderGfx(0, 1, 0xD0);
- copy_textbox_border_tile_patterns_to_vram(0, 0x14, 0xF0);
+ LoadMessageBoxGfx(0, 0x14, 0xF0);
InitBerryBlenderWindows();
sBerryBlenderData->field_44 = 0;
diff --git a/src/bike.c b/src/bike.c
index 87110b87b..6ffd479f7 100644
--- a/src/bike.c
+++ b/src/bike.c
@@ -9,6 +9,7 @@
#include "overworld.h"
#include "constants/songs.h"
#include "sound.h"
+#include "constants/map_types.h"
extern bool8 gBikeCyclingChallenge;
extern u8 gBikeCollisions;
diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c
index 35277fe87..b7ed1f713 100644
--- a/src/braille_puzzles.c
+++ b/src/braille_puzzles.c
@@ -7,6 +7,7 @@
#include "task.h"
#include "field_effect.h"
#include "constants/flags.h"
+#include "constants/maps.h"
extern void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatileId); // fieldmap
extern void DrawWholeMapView(); // field_camera
@@ -14,7 +15,6 @@ extern void SetCameraPanningCallback(void ( *callback)()); // field_camera
extern void InstallCameraPanAheadCallback(void);
extern void SetCameraPanning(s16 x, s16 y);
extern u8 GetCursorSelectionMonId(void);
-extern void FieldEffectActiveListRemove(u8 id); // field_effect
extern u8 oei_task_add(void);
// why do this, GF?
@@ -24,7 +24,8 @@ enum
FLY_PUZZLE
};
-extern u8 gBraillePuzzleCallbackFlag;
+EWRAM_DATA static u8 sBraillePuzzleCallbackFlag = 0;
+
extern const u8 gUnknown_085EFE74[][2];
void SealedChamberShakingEffect(u8);
@@ -205,14 +206,25 @@ void SealedChamberShakingEffect(u8 taskId)
// moved later in the function because it was rewritten.
bool8 ShouldDoBrailleStrengthEffect(void)
{
- if (!FlagGet(FLAG_SYS_BRAILLE_STRENGTH) && (gSaveBlock1Ptr->location.mapGroup == 0x18 && gSaveBlock1Ptr->location.mapNum == 0x06))
+ if (!FlagGet(FLAG_SYS_BRAILLE_STRENGTH)
+ && gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(DESERT_RUINS)
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(DESERT_RUINS))
{
if (gSaveBlock1Ptr->pos.x == 6 && gSaveBlock1Ptr->pos.y == 23)
- { gBraillePuzzleCallbackFlag = STRENGTH_PUZZLE; return TRUE; }
+ {
+ sBraillePuzzleCallbackFlag = STRENGTH_PUZZLE;
+ return TRUE;
+ }
else if (gSaveBlock1Ptr->pos.x == 5 && gSaveBlock1Ptr->pos.y == 23)
- { gBraillePuzzleCallbackFlag = STRENGTH_PUZZLE; return TRUE; }
+ {
+ sBraillePuzzleCallbackFlag = STRENGTH_PUZZLE;
+ return TRUE;
+ }
else if (gSaveBlock1Ptr->pos.x == 7 && gSaveBlock1Ptr->pos.y == 23)
- { gBraillePuzzleCallbackFlag = STRENGTH_PUZZLE; return TRUE; }
+ {
+ sBraillePuzzleCallbackFlag = STRENGTH_PUZZLE;
+ return TRUE;
+ }
}
return FALSE;
@@ -249,7 +261,7 @@ bool8 ShouldDoBrailleFlyEffect(void)
if (!FlagGet(FLAG_SYS_BRAILLE_FLY) && (gSaveBlock1Ptr->location.mapGroup == 0x18 && gSaveBlock1Ptr->location.mapNum == 0x44))
{
if (gSaveBlock1Ptr->pos.x == 8 && gSaveBlock1Ptr->pos.y == 25)
- { gBraillePuzzleCallbackFlag = FLY_PUZZLE; return TRUE; }
+ { sBraillePuzzleCallbackFlag = FLY_PUZZLE; return TRUE; }
}
return FALSE;
}
@@ -362,7 +374,7 @@ bool8 FldEff_UsePuzzleEffect(void)
{
u8 taskId = oei_task_add();
- if (gBraillePuzzleCallbackFlag == FLY_PUZZLE)
+ if (sBraillePuzzleCallbackFlag == FLY_PUZZLE)
{
gTasks[taskId].data[8] = (u32)UseFlyAncientTomb_Callback >> 16;
gTasks[taskId].data[9] = (u32)UseFlyAncientTomb_Callback;
diff --git a/src/data/text/move_names.h b/src/data/text/move_names.h
new file mode 100644
index 000000000..3df7c886b
--- /dev/null
+++ b/src/data/text/move_names.h
@@ -0,0 +1,357 @@
+const u8 gMoveNames[][13] = {
+ [MOVE_NONE] = _("-"),
+ [MOVE_POUND] = _("POUND"),
+ [MOVE_KARATE_CHOP] = _("KARATE CHOP"),
+ [MOVE_DOUBLE_SLAP] = _("DOUBLESLAP"),
+ [MOVE_COMET_PUNCH] = _("COMET PUNCH"),
+ [MOVE_MEGA_PUNCH] = _("MEGA PUNCH"),
+ [MOVE_PAY_DAY] = _("PAY DAY"),
+ [MOVE_FIRE_PUNCH] = _("FIRE PUNCH"),
+ [MOVE_ICE_PUNCH] = _("ICE PUNCH"),
+ [MOVE_THUNDER_PUNCH] = _("THUNDERPUNCH"),
+ [MOVE_SCRATCH] = _("SCRATCH"),
+ [MOVE_VICE_GRIP] = _("VICEGRIP"),
+ [MOVE_GUILLOTINE] = _("GUILLOTINE"),
+ [MOVE_RAZOR_WIND] = _("RAZOR WIND"),
+ [MOVE_SWORDS_DANCE] = _("SWORDS DANCE"),
+ [MOVE_CUT] = _("CUT"),
+ [MOVE_GUST] = _("GUST"),
+ [MOVE_WING_ATTACK] = _("WING ATTACK"),
+ [MOVE_WHIRLWIND] = _("WHIRLWIND"),
+ [MOVE_FLY] = _("FLY"),
+ [MOVE_BIND] = _("BIND"),
+ [MOVE_SLAM] = _("SLAM"),
+ [MOVE_VINE_WHIP] = _("VINE WHIP"),
+ [MOVE_STOMP] = _("STOMP"),
+ [MOVE_DOUBLE_KICK] = _("DOUBLE KICK"),
+ [MOVE_MEGA_KICK] = _("MEGA KICK"),
+ [MOVE_JUMP_KICK] = _("JUMP KICK"),
+ [MOVE_ROLLING_KICK] = _("ROLLING KICK"),
+ [MOVE_SAND_ATTACK] = _("SAND-ATTACK"),
+ [MOVE_HEADBUTT] = _("HEADBUTT"),
+ [MOVE_HORN_ATTACK] = _("HORN ATTACK"),
+ [MOVE_FURY_ATTACK] = _("FURY ATTACK"),
+ [MOVE_HORN_DRILL] = _("HORN DRILL"),
+ [MOVE_TACKLE] = _("TACKLE"),
+ [MOVE_BODY_SLAM] = _("BODY SLAM"),
+ [MOVE_WRAP] = _("WRAP"),
+ [MOVE_TAKE_DOWN] = _("TAKE DOWN"),
+ [MOVE_THRASH] = _("THRASH"),
+ [MOVE_DOUBLE_EDGE] = _("DOUBLE-EDGE"),
+ [MOVE_TAIL_WHIP] = _("TAIL WHIP"),
+ [MOVE_POISON_STING] = _("POISON STING"),
+ [MOVE_TWINEEDLE] = _("TWINEEDLE"),
+ [MOVE_PIN_MISSILE] = _("PIN MISSILE"),
+ [MOVE_LEER] = _("LEER"),
+ [MOVE_BITE] = _("BITE"),
+ [MOVE_GROWL] = _("GROWL"),
+ [MOVE_ROAR] = _("ROAR"),
+ [MOVE_SING] = _("SING"),
+ [MOVE_SUPERSONIC] = _("SUPERSONIC"),
+ [MOVE_SONIC_BOOM] = _("SONICBOOM"),
+ [MOVE_DISABLE] = _("DISABLE"),
+ [MOVE_ACID] = _("ACID"),
+ [MOVE_EMBER] = _("EMBER"),
+ [MOVE_FLAMETHROWER] = _("FLAMETHROWER"),
+ [MOVE_MIST] = _("MIST"),
+ [MOVE_WATER_GUN] = _("WATER GUN"),
+ [MOVE_HYDRO_PUMP] = _("HYDRO PUMP"),
+ [MOVE_SURF] = _("SURF"),
+ [MOVE_ICE_BEAM] = _("ICE BEAM"),
+ [MOVE_BLIZZARD] = _("BLIZZARD"),
+ [MOVE_PSYBEAM] = _("PSYBEAM"),
+ [MOVE_BUBBLE_BEAM] = _("BUBBLEBEAM"),
+ [MOVE_AURORA_BEAM] = _("AURORA BEAM"),
+ [MOVE_HYPER_BEAM] = _("HYPER BEAM"),
+ [MOVE_PECK] = _("PECK"),
+ [MOVE_DRILL_PECK] = _("DRILL PECK"),
+ [MOVE_SUBMISSION] = _("SUBMISSION"),
+ [MOVE_LOW_KICK] = _("LOW KICK"),
+ [MOVE_COUNTER] = _("COUNTER"),
+ [MOVE_SEISMIC_TOSS] = _("SEISMIC TOSS"),
+ [MOVE_STRENGTH] = _("STRENGTH"),
+ [MOVE_ABSORB] = _("ABSORB"),
+ [MOVE_MEGA_DRAIN] = _("MEGA DRAIN"),
+ [MOVE_LEECH_SEED] = _("LEECH SEED"),
+ [MOVE_GROWTH] = _("GROWTH"),
+ [MOVE_RAZOR_LEAF] = _("RAZOR LEAF"),
+ [MOVE_SOLAR_BEAM] = _("SOLARBEAM"),
+ [MOVE_POISON_POWDER] = _("POISONPOWDER"),
+ [MOVE_STUN_SPORE] = _("STUN SPORE"),
+ [MOVE_SLEEP_POWDER] = _("SLEEP POWDER"),
+ [MOVE_PETAL_DANCE] = _("PETAL DANCE"),
+ [MOVE_STRING_SHOT] = _("STRING SHOT"),
+ [MOVE_DRAGON_RAGE] = _("DRAGON RAGE"),
+ [MOVE_FIRE_SPIN] = _("FIRE SPIN"),
+ [MOVE_THUNDER_SHOCK] = _("THUNDERSHOCK"),
+ [MOVE_THUNDERBOLT] = _("THUNDERBOLT"),
+ [MOVE_THUNDER_WAVE] = _("THUNDER WAVE"),
+ [MOVE_THUNDER] = _("THUNDER"),
+ [MOVE_ROCK_THROW] = _("ROCK THROW"),
+ [MOVE_EARTHQUAKE] = _("EARTHQUAKE"),
+ [MOVE_FISSURE] = _("FISSURE"),
+ [MOVE_DIG] = _("DIG"),
+ [MOVE_TOXIC] = _("TOXIC"),
+ [MOVE_CONFUSION] = _("CONFUSION"),
+ [MOVE_PSYCHIC] = _("PSYCHIC"),
+ [MOVE_HYPNOSIS] = _("HYPNOSIS"),
+ [MOVE_MEDITATE] = _("MEDITATE"),
+ [MOVE_AGILITY] = _("AGILITY"),
+ [MOVE_QUICK_ATTACK] = _("QUICK ATTACK"),
+ [MOVE_RAGE] = _("RAGE"),
+ [MOVE_TELEPORT] = _("TELEPORT"),
+ [MOVE_NIGHT_SHADE] = _("NIGHT SHADE"),
+ [MOVE_MIMIC] = _("MIMIC"),
+ [MOVE_SCREECH] = _("SCREECH"),
+ [MOVE_DOUBLE_TEAM] = _("DOUBLE TEAM"),
+ [MOVE_RECOVER] = _("RECOVER"),
+ [MOVE_HARDEN] = _("HARDEN"),
+ [MOVE_MINIMIZE] = _("MINIMIZE"),
+ [MOVE_SMOKESCREEN] = _("SMOKESCREEN"),
+ [MOVE_CONFUSE_RAY] = _("CONFUSE RAY"),
+ [MOVE_WITHDRAW] = _("WITHDRAW"),
+ [MOVE_DEFENSE_CURL] = _("DEFENSE CURL"),
+ [MOVE_BARRIER] = _("BARRIER"),
+ [MOVE_LIGHT_SCREEN] = _("LIGHT SCREEN"),
+ [MOVE_HAZE] = _("HAZE"),
+ [MOVE_REFLECT] = _("REFLECT"),
+ [MOVE_FOCUS_ENERGY] = _("FOCUS ENERGY"),
+ [MOVE_BIDE] = _("BIDE"),
+ [MOVE_METRONOME] = _("METRONOME"),
+ [MOVE_MIRROR_MOVE] = _("MIRROR MOVE"),
+ [MOVE_SELF_DESTRUCT] = _("SELFDESTRUCT"),
+ [MOVE_EGG_BOMB] = _("EGG BOMB"),
+ [MOVE_LICK] = _("LICK"),
+ [MOVE_SMOG] = _("SMOG"),
+ [MOVE_SLUDGE] = _("SLUDGE"),
+ [MOVE_BONE_CLUB] = _("BONE CLUB"),
+ [MOVE_FIRE_BLAST] = _("FIRE BLAST"),
+ [MOVE_WATERFALL] = _("WATERFALL"),
+ [MOVE_CLAMP] = _("CLAMP"),
+ [MOVE_SWIFT] = _("SWIFT"),
+ [MOVE_SKULL_BASH] = _("SKULL BASH"),
+ [MOVE_SPIKE_CANNON] = _("SPIKE CANNON"),
+ [MOVE_CONSTRICT] = _("CONSTRICT"),
+ [MOVE_AMNESIA] = _("AMNESIA"),
+ [MOVE_KINESIS] = _("KINESIS"),
+ [MOVE_SOFT_BOILED] = _("SOFTBOILED"),
+ [MOVE_HI_JUMP_KICK] = _("HI JUMP KICK"),
+ [MOVE_GLARE] = _("GLARE"),
+ [MOVE_DREAM_EATER] = _("DREAM EATER"),
+ [MOVE_POISON_GAS] = _("POISON GAS"),
+ [MOVE_BARRAGE] = _("BARRAGE"),
+ [MOVE_LEECH_LIFE] = _("LEECH LIFE"),
+ [MOVE_LOVELY_KISS] = _("LOVELY KISS"),
+ [MOVE_SKY_ATTACK] = _("SKY ATTACK"),
+ [MOVE_TRANSFORM] = _("TRANSFORM"),
+ [MOVE_BUBBLE] = _("BUBBLE"),
+ [MOVE_DIZZY_PUNCH] = _("DIZZY PUNCH"),
+ [MOVE_SPORE] = _("SPORE"),
+ [MOVE_FLASH] = _("FLASH"),
+ [MOVE_PSYWAVE] = _("PSYWAVE"),
+ [MOVE_SPLASH] = _("SPLASH"),
+ [MOVE_ACID_ARMOR] = _("ACID ARMOR"),
+ [MOVE_CRABHAMMER] = _("CRABHAMMER"),
+ [MOVE_EXPLOSION] = _("EXPLOSION"),
+ [MOVE_FURY_SWIPES] = _("FURY SWIPES"),
+ [MOVE_BONEMERANG] = _("BONEMERANG"),
+ [MOVE_REST] = _("REST"),
+ [MOVE_ROCK_SLIDE] = _("ROCK SLIDE"),
+ [MOVE_HYPER_FANG] = _("HYPER FANG"),
+ [MOVE_SHARPEN] = _("SHARPEN"),
+ [MOVE_CONVERSION] = _("CONVERSION"),
+ [MOVE_TRI_ATTACK] = _("TRI ATTACK"),
+ [MOVE_SUPER_FANG] = _("SUPER FANG"),
+ [MOVE_SLASH] = _("SLASH"),
+ [MOVE_SUBSTITUTE] = _("SUBSTITUTE"),
+ [MOVE_STRUGGLE] = _("STRUGGLE"),
+ [MOVE_SKETCH] = _("SKETCH"),
+ [MOVE_TRIPLE_KICK] = _("TRIPLE KICK"),
+ [MOVE_THIEF] = _("THIEF"),
+ [MOVE_SPIDER_WEB] = _("SPIDER WEB"),
+ [MOVE_MIND_READER] = _("MIND READER"),
+ [MOVE_NIGHTMARE] = _("NIGHTMARE"),
+ [MOVE_FLAME_WHEEL] = _("FLAME WHEEL"),
+ [MOVE_SNORE] = _("SNORE"),
+ [MOVE_CURSE] = _("CURSE"),
+ [MOVE_FLAIL] = _("FLAIL"),
+ [MOVE_CONVERSION_2] = _("CONVERSION 2"),
+ [MOVE_AEROBLAST] = _("AEROBLAST"),
+ [MOVE_COTTON_SPORE] = _("COTTON SPORE"),
+ [MOVE_REVERSAL] = _("REVERSAL"),
+ [MOVE_SPITE] = _("SPITE"),
+ [MOVE_POWDER_SNOW] = _("POWDER SNOW"),
+ [MOVE_PROTECT] = _("PROTECT"),
+ [MOVE_MACH_PUNCH] = _("MACH PUNCH"),
+ [MOVE_SCARY_FACE] = _("SCARY FACE"),
+ [MOVE_FAINT_ATTACK] = _("FAINT ATTACK"),
+ [MOVE_SWEET_KISS] = _("SWEET KISS"),
+ [MOVE_BELLY_DRUM] = _("BELLY DRUM"),
+ [MOVE_SLUDGE_BOMB] = _("SLUDGE BOMB"),
+ [MOVE_MUD_SLAP] = _("MUD-SLAP"),
+ [MOVE_OCTAZOOKA] = _("OCTAZOOKA"),
+ [MOVE_SPIKES] = _("SPIKES"),
+ [MOVE_ZAP_CANNON] = _("ZAP CANNON"),
+ [MOVE_FORESIGHT] = _("FORESIGHT"),
+ [MOVE_DESTINY_BOND] = _("DESTINY BOND"),
+ [MOVE_PERISH_SONG] = _("PERISH SONG"),
+ [MOVE_ICY_WIND] = _("ICY WIND"),
+ [MOVE_DETECT] = _("DETECT"),
+ [MOVE_BONE_RUSH] = _("BONE RUSH"),
+ [MOVE_LOCK_ON] = _("LOCK-ON"),
+ [MOVE_OUTRAGE] = _("OUTRAGE"),
+ [MOVE_SANDSTORM] = _("SANDSTORM"),
+ [MOVE_GIGA_DRAIN] = _("GIGA DRAIN"),
+ [MOVE_ENDURE] = _("ENDURE"),
+ [MOVE_CHARM] = _("CHARM"),
+ [MOVE_ROLLOUT] = _("ROLLOUT"),
+ [MOVE_FALSE_SWIPE] = _("FALSE SWIPE"),
+ [MOVE_SWAGGER] = _("SWAGGER"),
+ [MOVE_MILK_DRINK] = _("MILK DRINK"),
+ [MOVE_SPARK] = _("SPARK"),
+ [MOVE_FURY_CUTTER] = _("FURY CUTTER"),
+ [MOVE_STEEL_WING] = _("STEEL WING"),
+ [MOVE_MEAN_LOOK] = _("MEAN LOOK"),
+ [MOVE_ATTRACT] = _("ATTRACT"),
+ [MOVE_SLEEP_TALK] = _("SLEEP TALK"),
+ [MOVE_HEAL_BELL] = _("HEAL BELL"),
+ [MOVE_RETURN] = _("RETURN"),
+ [MOVE_PRESENT] = _("PRESENT"),
+ [MOVE_FRUSTRATION] = _("FRUSTRATION"),
+ [MOVE_SAFEGUARD] = _("SAFEGUARD"),
+ [MOVE_PAIN_SPLIT] = _("PAIN SPLIT"),
+ [MOVE_SACRED_FIRE] = _("SACRED FIRE"),
+ [MOVE_MAGNITUDE] = _("MAGNITUDE"),
+ [MOVE_DYNAMIC_PUNCH] = _("DYNAMICPUNCH"),
+ [MOVE_MEGAHORN] = _("MEGAHORN"),
+ [MOVE_DRAGON_BREATH] = _("DRAGONBREATH"),
+ [MOVE_BATON_PASS] = _("BATON PASS"),
+ [MOVE_ENCORE] = _("ENCORE"),
+ [MOVE_PURSUIT] = _("PURSUIT"),
+ [MOVE_RAPID_SPIN] = _("RAPID SPIN"),
+ [MOVE_SWEET_SCENT] = _("SWEET SCENT"),
+ [MOVE_IRON_TAIL] = _("IRON TAIL"),
+ [MOVE_METAL_CLAW] = _("METAL CLAW"),
+ [MOVE_VITAL_THROW] = _("VITAL THROW"),
+ [MOVE_MORNING_SUN] = _("MORNING SUN"),
+ [MOVE_SYNTHESIS] = _("SYNTHESIS"),
+ [MOVE_MOONLIGHT] = _("MOONLIGHT"),
+ [MOVE_HIDDEN_POWER] = _("HIDDEN POWER"),
+ [MOVE_CROSS_CHOP] = _("CROSS CHOP"),
+ [MOVE_TWISTER] = _("TWISTER"),
+ [MOVE_RAIN_DANCE] = _("RAIN DANCE"),
+ [MOVE_SUNNY_DAY] = _("SUNNY DAY"),
+ [MOVE_CRUNCH] = _("CRUNCH"),
+ [MOVE_MIRROR_COAT] = _("MIRROR COAT"),
+ [MOVE_PSYCH_UP] = _("PSYCH UP"),
+ [MOVE_EXTREME_SPEED] = _("EXTREMESPEED"),
+ [MOVE_ANCIENT_POWER] = _("ANCIENTPOWER"),
+ [MOVE_SHADOW_BALL] = _("SHADOW BALL"),
+ [MOVE_FUTURE_SIGHT] = _("FUTURE SIGHT"),
+ [MOVE_ROCK_SMASH] = _("ROCK SMASH"),
+ [MOVE_WHIRLPOOL] = _("WHIRLPOOL"),
+ [MOVE_BEAT_UP] = _("BEAT UP"),
+ [MOVE_FAKE_OUT] = _("FAKE OUT"),
+ [MOVE_UPROAR] = _("UPROAR"),
+ [MOVE_STOCKPILE] = _("STOCKPILE"),
+ [MOVE_SPIT_UP] = _("SPIT UP"),
+ [MOVE_SWALLOW] = _("SWALLOW"),
+ [MOVE_HEAT_WAVE] = _("HEAT WAVE"),
+ [MOVE_HAIL] = _("HAIL"),
+ [MOVE_TORMENT] = _("TORMENT"),
+ [MOVE_FLATTER] = _("FLATTER"),
+ [MOVE_WILL_O_WISP] = _("WILL-O-WISP"),
+ [MOVE_MEMENTO] = _("MEMENTO"),
+ [MOVE_FACADE] = _("FACADE"),
+ [MOVE_FOCUS_PUNCH] = _("FOCUS PUNCH"),
+ [MOVE_SMELLING_SALT] = _("SMELLINGSALT"),
+ [MOVE_FOLLOW_ME] = _("FOLLOW ME"),
+ [MOVE_NATURE_POWER] = _("NATURE POWER"),
+ [MOVE_CHARGE] = _("CHARGE"),
+ [MOVE_TAUNT] = _("TAUNT"),
+ [MOVE_HELPING_HAND] = _("HELPING HAND"),
+ [MOVE_TRICK] = _("TRICK"),
+ [MOVE_ROLE_PLAY] = _("ROLE PLAY"),
+ [MOVE_WISH] = _("WISH"),
+ [MOVE_ASSIST] = _("ASSIST"),
+ [MOVE_INGRAIN] = _("INGRAIN"),
+ [MOVE_SUPERPOWER] = _("SUPERPOWER"),
+ [MOVE_MAGIC_COAT] = _("MAGIC COAT"),
+ [MOVE_RECYCLE] = _("RECYCLE"),
+ [MOVE_REVENGE] = _("REVENGE"),
+ [MOVE_BRICK_BREAK] = _("BRICK BREAK"),
+ [MOVE_YAWN] = _("YAWN"),
+ [MOVE_KNOCK_OFF] = _("KNOCK OFF"),
+ [MOVE_ENDEAVOR] = _("ENDEAVOR"),
+ [MOVE_ERUPTION] = _("ERUPTION"),
+ [MOVE_SKILL_SWAP] = _("SKILL SWAP"),
+ [MOVE_IMPRISON] = _("IMPRISON"),
+ [MOVE_REFRESH] = _("REFRESH"),
+ [MOVE_GRUDGE] = _("GRUDGE"),
+ [MOVE_SNATCH] = _("SNATCH"),
+ [MOVE_SECRET_POWER] = _("SECRET POWER"),
+ [MOVE_DIVE] = _("DIVE"),
+ [MOVE_ARM_THRUST] = _("ARM THRUST"),
+ [MOVE_CAMOUFLAGE] = _("CAMOUFLAGE"),
+ [MOVE_TAIL_GLOW] = _("TAIL GLOW"),
+ [MOVE_LUSTER_PURGE] = _("LUSTER PURGE"),
+ [MOVE_MIST_BALL] = _("MIST BALL"),
+ [MOVE_FEATHER_DANCE] = _("FEATHERDANCE"),
+ [MOVE_TEETER_DANCE] = _("TEETER DANCE"),
+ [MOVE_BLAZE_KICK] = _("BLAZE KICK"),
+ [MOVE_MUD_SPORT] = _("MUD SPORT"),
+ [MOVE_ICE_BALL] = _("ICE BALL"),
+ [MOVE_NEEDLE_ARM] = _("NEEDLE ARM"),
+ [MOVE_SLACK_OFF] = _("SLACK OFF"),
+ [MOVE_HYPER_VOICE] = _("HYPER VOICE"),
+ [MOVE_POISON_FANG] = _("POISON FANG"),
+ [MOVE_CRUSH_CLAW] = _("CRUSH CLAW"),
+ [MOVE_BLAST_BURN] = _("BLAST BURN"),
+ [MOVE_HYDRO_CANNON] = _("HYDRO CANNON"),
+ [MOVE_METEOR_MASH] = _("METEOR MASH"),
+ [MOVE_ASTONISH] = _("ASTONISH"),
+ [MOVE_WEATHER_BALL] = _("WEATHER BALL"),
+ [MOVE_AROMATHERAPY] = _("AROMATHERAPY"),
+ [MOVE_FAKE_TEARS] = _("FAKE TEARS"),
+ [MOVE_AIR_CUTTER] = _("AIR CUTTER"),
+ [MOVE_OVERHEAT] = _("OVERHEAT"),
+ [MOVE_ODOR_SLEUTH] = _("ODOR SLEUTH"),
+ [MOVE_ROCK_TOMB] = _("ROCK TOMB"),
+ [MOVE_SILVER_WIND] = _("SILVER WIND"),
+ [MOVE_METAL_SOUND] = _("METAL SOUND"),
+ [MOVE_GRASS_WHISTLE] = _("GRASSWHISTLE"),
+ [MOVE_TICKLE] = _("TICKLE"),
+ [MOVE_COSMIC_POWER] = _("COSMIC POWER"),
+ [MOVE_WATER_SPOUT] = _("WATER SPOUT"),
+ [MOVE_SIGNAL_BEAM] = _("SIGNAL BEAM"),
+ [MOVE_SHADOW_PUNCH] = _("SHADOW PUNCH"),
+ [MOVE_EXTRASENSORY] = _("EXTRASENSORY"),
+ [MOVE_SKY_UPPERCUT] = _("SKY UPPERCUT"),
+ [MOVE_SAND_TOMB] = _("SAND TOMB"),
+ [MOVE_SHEER_COLD] = _("SHEER COLD"),
+ [MOVE_MUDDY_WATER] = _("MUDDY WATER"),
+ [MOVE_BULLET_SEED] = _("BULLET SEED"),
+ [MOVE_AERIAL_ACE] = _("AERIAL ACE"),
+ [MOVE_ICICLE_SPEAR] = _("ICICLE SPEAR"),
+ [MOVE_IRON_DEFENSE] = _("IRON DEFENSE"),
+ [MOVE_BLOCK] = _("BLOCK"),
+ [MOVE_HOWL] = _("HOWL"),
+ [MOVE_DRAGON_CLAW] = _("DRAGON CLAW"),
+ [MOVE_FRENZY_PLANT] = _("FRENZY PLANT"),
+ [MOVE_BULK_UP] = _("BULK UP"),
+ [MOVE_BOUNCE] = _("BOUNCE"),
+ [MOVE_MUD_SHOT] = _("MUD SHOT"),
+ [MOVE_POISON_TAIL] = _("POISON TAIL"),
+ [MOVE_COVET] = _("COVET"),
+ [MOVE_VOLT_TACKLE] = _("VOLT TACKLE"),
+ [MOVE_MAGICAL_LEAF] = _("MAGICAL LEAF"),
+ [MOVE_WATER_SPORT] = _("WATER SPORT"),
+ [MOVE_CALM_MIND] = _("CALM MIND"),
+ [MOVE_LEAF_BLADE] = _("LEAF BLADE"),
+ [MOVE_DRAGON_DANCE] = _("DRAGON DANCE"),
+ [MOVE_ROCK_BLAST] = _("ROCK BLAST"),
+ [MOVE_SHOCK_WAVE] = _("SHOCK WAVE"),
+ [MOVE_WATER_PULSE] = _("WATER PULSE"),
+ [MOVE_DOOM_DESIRE] = _("DOOM DESIRE"),
+ [MOVE_PSYCHO_BOOST] = _("PSYCHO BOOST"),
+};
diff --git a/src/data/text/species_names.h b/src/data/text/species_names.h
new file mode 100644
index 000000000..840beb22b
--- /dev/null
+++ b/src/data/text/species_names.h
@@ -0,0 +1,414 @@
+const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = {
+ [SPECIES_NONE] = _("??????????"),
+ [SPECIES_BULBASAUR] = _("BULBASAUR"),
+ [SPECIES_IVYSAUR] = _("IVYSAUR"),
+ [SPECIES_VENUSAUR] = _("VENUSAUR"),
+ [SPECIES_CHARMANDER] = _("CHARMANDER"),
+ [SPECIES_CHARMELEON] = _("CHARMELEON"),
+ [SPECIES_CHARIZARD] = _("CHARIZARD"),
+ [SPECIES_SQUIRTLE] = _("SQUIRTLE"),
+ [SPECIES_WARTORTLE] = _("WARTORTLE"),
+ [SPECIES_BLASTOISE] = _("BLASTOISE"),
+ [SPECIES_CATERPIE] = _("CATERPIE"),
+ [SPECIES_METAPOD] = _("METAPOD"),
+ [SPECIES_BUTTERFREE] = _("BUTTERFREE"),
+ [SPECIES_WEEDLE] = _("WEEDLE"),
+ [SPECIES_KAKUNA] = _("KAKUNA"),
+ [SPECIES_BEEDRILL] = _("BEEDRILL"),
+ [SPECIES_PIDGEY] = _("PIDGEY"),
+ [SPECIES_PIDGEOTTO] = _("PIDGEOTTO"),
+ [SPECIES_PIDGEOT] = _("PIDGEOT"),
+ [SPECIES_RATTATA] = _("RATTATA"),
+ [SPECIES_RATICATE] = _("RATICATE"),
+ [SPECIES_SPEAROW] = _("SPEAROW"),
+ [SPECIES_FEAROW] = _("FEAROW"),
+ [SPECIES_EKANS] = _("EKANS"),
+ [SPECIES_ARBOK] = _("ARBOK"),
+ [SPECIES_PIKACHU] = _("PIKACHU"),
+ [SPECIES_RAICHU] = _("RAICHU"),
+ [SPECIES_SANDSHREW] = _("SANDSHREW"),
+ [SPECIES_SANDSLASH] = _("SANDSLASH"),
+ [SPECIES_NIDORAN_F] = _("NIDORAN♀"),
+ [SPECIES_NIDORINA] = _("NIDORINA"),
+ [SPECIES_NIDOQUEEN] = _("NIDOQUEEN"),
+ [SPECIES_NIDORAN_M] = _("NIDORAN♂"),
+ [SPECIES_NIDORINO] = _("NIDORINO"),
+ [SPECIES_NIDOKING] = _("NIDOKING"),
+ [SPECIES_CLEFAIRY] = _("CLEFAIRY"),
+ [SPECIES_CLEFABLE] = _("CLEFABLE"),
+ [SPECIES_VULPIX] = _("VULPIX"),
+ [SPECIES_NINETALES] = _("NINETALES"),
+ [SPECIES_JIGGLYPUFF] = _("JIGGLYPUFF"),
+ [SPECIES_WIGGLYTUFF] = _("WIGGLYTUFF"),
+ [SPECIES_ZUBAT] = _("ZUBAT"),
+ [SPECIES_GOLBAT] = _("GOLBAT"),
+ [SPECIES_ODDISH] = _("ODDISH"),
+ [SPECIES_GLOOM] = _("GLOOM"),
+ [SPECIES_VILEPLUME] = _("VILEPLUME"),
+ [SPECIES_PARAS] = _("PARAS"),
+ [SPECIES_PARASECT] = _("PARASECT"),
+ [SPECIES_VENONAT] = _("VENONAT"),
+ [SPECIES_VENOMOTH] = _("VENOMOTH"),
+ [SPECIES_DIGLETT] = _("DIGLETT"),
+ [SPECIES_DUGTRIO] = _("DUGTRIO"),
+ [SPECIES_MEOWTH] = _("MEOWTH"),
+ [SPECIES_PERSIAN] = _("PERSIAN"),
+ [SPECIES_PSYDUCK] = _("PSYDUCK"),
+ [SPECIES_GOLDUCK] = _("GOLDUCK"),
+ [SPECIES_MANKEY] = _("MANKEY"),
+ [SPECIES_PRIMEAPE] = _("PRIMEAPE"),
+ [SPECIES_GROWLITHE] = _("GROWLITHE"),
+ [SPECIES_ARCANINE] = _("ARCANINE"),
+ [SPECIES_POLIWAG] = _("POLIWAG"),
+ [SPECIES_POLIWHIRL] = _("POLIWHIRL"),
+ [SPECIES_POLIWRATH] = _("POLIWRATH"),
+ [SPECIES_ABRA] = _("ABRA"),
+ [SPECIES_KADABRA] = _("KADABRA"),
+ [SPECIES_ALAKAZAM] = _("ALAKAZAM"),
+ [SPECIES_MACHOP] = _("MACHOP"),
+ [SPECIES_MACHOKE] = _("MACHOKE"),
+ [SPECIES_MACHAMP] = _("MACHAMP"),
+ [SPECIES_BELLSPROUT] = _("BELLSPROUT"),
+ [SPECIES_WEEPINBELL] = _("WEEPINBELL"),
+ [SPECIES_VICTREEBEL] = _("VICTREEBEL"),
+ [SPECIES_TENTACOOL] = _("TENTACOOL"),
+ [SPECIES_TENTACRUEL] = _("TENTACRUEL"),
+ [SPECIES_GEODUDE] = _("GEODUDE"),
+ [SPECIES_GRAVELER] = _("GRAVELER"),
+ [SPECIES_GOLEM] = _("GOLEM"),
+ [SPECIES_PONYTA] = _("PONYTA"),
+ [SPECIES_RAPIDASH] = _("RAPIDASH"),
+ [SPECIES_SLOWPOKE] = _("SLOWPOKE"),
+ [SPECIES_SLOWBRO] = _("SLOWBRO"),
+ [SPECIES_MAGNEMITE] = _("MAGNEMITE"),
+ [SPECIES_MAGNETON] = _("MAGNETON"),
+ [SPECIES_FARFETCHD] = _("FARFETCH’D"),
+ [SPECIES_DODUO] = _("DODUO"),
+ [SPECIES_DODRIO] = _("DODRIO"),
+ [SPECIES_SEEL] = _("SEEL"),
+ [SPECIES_DEWGONG] = _("DEWGONG"),
+ [SPECIES_GRIMER] = _("GRIMER"),
+ [SPECIES_MUK] = _("MUK"),
+ [SPECIES_SHELLDER] = _("SHELLDER"),
+ [SPECIES_CLOYSTER] = _("CLOYSTER"),
+ [SPECIES_GASTLY] = _("GASTLY"),
+ [SPECIES_HAUNTER] = _("HAUNTER"),
+ [SPECIES_GENGAR] = _("GENGAR"),
+ [SPECIES_ONIX] = _("ONIX"),
+ [SPECIES_DROWZEE] = _("DROWZEE"),
+ [SPECIES_HYPNO] = _("HYPNO"),
+ [SPECIES_KRABBY] = _("KRABBY"),
+ [SPECIES_KINGLER] = _("KINGLER"),
+ [SPECIES_VOLTORB] = _("VOLTORB"),
+ [SPECIES_ELECTRODE] = _("ELECTRODE"),
+ [SPECIES_EXEGGCUTE] = _("EXEGGCUTE"),
+ [SPECIES_EXEGGUTOR] = _("EXEGGUTOR"),
+ [SPECIES_CUBONE] = _("CUBONE"),
+ [SPECIES_MAROWAK] = _("MAROWAK"),
+ [SPECIES_HITMONLEE] = _("HITMONLEE"),
+ [SPECIES_HITMONCHAN] = _("HITMONCHAN"),
+ [SPECIES_LICKITUNG] = _("LICKITUNG"),
+ [SPECIES_KOFFING] = _("KOFFING"),
+ [SPECIES_WEEZING] = _("WEEZING"),
+ [SPECIES_RHYHORN] = _("RHYHORN"),
+ [SPECIES_RHYDON] = _("RHYDON"),
+ [SPECIES_CHANSEY] = _("CHANSEY"),
+ [SPECIES_TANGELA] = _("TANGELA"),
+ [SPECIES_KANGASKHAN] = _("KANGASKHAN"),
+ [SPECIES_HORSEA] = _("HORSEA"),
+ [SPECIES_SEADRA] = _("SEADRA"),
+ [SPECIES_GOLDEEN] = _("GOLDEEN"),
+ [SPECIES_SEAKING] = _("SEAKING"),
+ [SPECIES_STARYU] = _("STARYU"),
+ [SPECIES_STARMIE] = _("STARMIE"),
+ [SPECIES_MR_MIME] = _("MR. MIME"),
+ [SPECIES_SCYTHER] = _("SCYTHER"),
+ [SPECIES_JYNX] = _("JYNX"),
+ [SPECIES_ELECTABUZZ] = _("ELECTABUZZ"),
+ [SPECIES_MAGMAR] = _("MAGMAR"),
+ [SPECIES_PINSIR] = _("PINSIR"),
+ [SPECIES_TAUROS] = _("TAUROS"),
+ [SPECIES_MAGIKARP] = _("MAGIKARP"),
+ [SPECIES_GYARADOS] = _("GYARADOS"),
+ [SPECIES_LAPRAS] = _("LAPRAS"),
+ [SPECIES_DITTO] = _("DITTO"),
+ [SPECIES_EEVEE] = _("EEVEE"),
+ [SPECIES_VAPOREON] = _("VAPOREON"),
+ [SPECIES_JOLTEON] = _("JOLTEON"),
+ [SPECIES_FLAREON] = _("FLAREON"),
+ [SPECIES_PORYGON] = _("PORYGON"),
+ [SPECIES_OMANYTE] = _("OMANYTE"),
+ [SPECIES_OMASTAR] = _("OMASTAR"),
+ [SPECIES_KABUTO] = _("KABUTO"),
+ [SPECIES_KABUTOPS] = _("KABUTOPS"),
+ [SPECIES_AERODACTYL] = _("AERODACTYL"),
+ [SPECIES_SNORLAX] = _("SNORLAX"),
+ [SPECIES_ARTICUNO] = _("ARTICUNO"),
+ [SPECIES_ZAPDOS] = _("ZAPDOS"),
+ [SPECIES_MOLTRES] = _("MOLTRES"),
+ [SPECIES_DRATINI] = _("DRATINI"),
+ [SPECIES_DRAGONAIR] = _("DRAGONAIR"),
+ [SPECIES_DRAGONITE] = _("DRAGONITE"),
+ [SPECIES_MEWTWO] = _("MEWTWO"),
+ [SPECIES_MEW] = _("MEW"),
+ [SPECIES_CHIKORITA] = _("CHIKORITA"),
+ [SPECIES_BAYLEEF] = _("BAYLEEF"),
+ [SPECIES_MEGANIUM] = _("MEGANIUM"),
+ [SPECIES_CYNDAQUIL] = _("CYNDAQUIL"),
+ [SPECIES_QUILAVA] = _("QUILAVA"),
+ [SPECIES_TYPHLOSION] = _("TYPHLOSION"),
+ [SPECIES_TOTODILE] = _("TOTODILE"),
+ [SPECIES_CROCONAW] = _("CROCONAW"),
+ [SPECIES_FERALIGATR] = _("FERALIGATR"),
+ [SPECIES_SENTRET] = _("SENTRET"),
+ [SPECIES_FURRET] = _("FURRET"),
+ [SPECIES_HOOTHOOT] = _("HOOTHOOT"),
+ [SPECIES_NOCTOWL] = _("NOCTOWL"),
+ [SPECIES_LEDYBA] = _("LEDYBA"),
+ [SPECIES_LEDIAN] = _("LEDIAN"),
+ [SPECIES_SPINARAK] = _("SPINARAK"),
+ [SPECIES_ARIADOS] = _("ARIADOS"),
+ [SPECIES_CROBAT] = _("CROBAT"),
+ [SPECIES_CHINCHOU] = _("CHINCHOU"),
+ [SPECIES_LANTURN] = _("LANTURN"),
+ [SPECIES_PICHU] = _("PICHU"),
+ [SPECIES_CLEFFA] = _("CLEFFA"),
+ [SPECIES_IGGLYBUFF] = _("IGGLYBUFF"),
+ [SPECIES_TOGEPI] = _("TOGEPI"),
+ [SPECIES_TOGETIC] = _("TOGETIC"),
+ [SPECIES_NATU] = _("NATU"),
+ [SPECIES_XATU] = _("XATU"),
+ [SPECIES_MAREEP] = _("MAREEP"),
+ [SPECIES_FLAAFFY] = _("FLAAFFY"),
+ [SPECIES_AMPHAROS] = _("AMPHAROS"),
+ [SPECIES_BELLOSSOM] = _("BELLOSSOM"),
+ [SPECIES_MARILL] = _("MARILL"),
+ [SPECIES_AZUMARILL] = _("AZUMARILL"),
+ [SPECIES_SUDOWOODO] = _("SUDOWOODO"),
+ [SPECIES_POLITOED] = _("POLITOED"),
+ [SPECIES_HOPPIP] = _("HOPPIP"),
+ [SPECIES_SKIPLOOM] = _("SKIPLOOM"),
+ [SPECIES_JUMPLUFF] = _("JUMPLUFF"),
+ [SPECIES_AIPOM] = _("AIPOM"),
+ [SPECIES_SUNKERN] = _("SUNKERN"),
+ [SPECIES_SUNFLORA] = _("SUNFLORA"),
+ [SPECIES_YANMA] = _("YANMA"),
+ [SPECIES_WOOPER] = _("WOOPER"),
+ [SPECIES_QUAGSIRE] = _("QUAGSIRE"),
+ [SPECIES_ESPEON] = _("ESPEON"),
+ [SPECIES_UMBREON] = _("UMBREON"),
+ [SPECIES_MURKROW] = _("MURKROW"),
+ [SPECIES_SLOWKING] = _("SLOWKING"),
+ [SPECIES_MISDREAVUS] = _("MISDREAVUS"),
+ [SPECIES_UNOWN] = _("UNOWN"),
+ [SPECIES_WOBBUFFET] = _("WOBBUFFET"),
+ [SPECIES_GIRAFARIG] = _("GIRAFARIG"),
+ [SPECIES_PINECO] = _("PINECO"),
+ [SPECIES_FORRETRESS] = _("FORRETRESS"),
+ [SPECIES_DUNSPARCE] = _("DUNSPARCE"),
+ [SPECIES_GLIGAR] = _("GLIGAR"),
+ [SPECIES_STEELIX] = _("STEELIX"),
+ [SPECIES_SNUBBULL] = _("SNUBBULL"),
+ [SPECIES_GRANBULL] = _("GRANBULL"),
+ [SPECIES_QWILFISH] = _("QWILFISH"),
+ [SPECIES_SCIZOR] = _("SCIZOR"),
+ [SPECIES_SHUCKLE] = _("SHUCKLE"),
+ [SPECIES_HERACROSS] = _("HERACROSS"),
+ [SPECIES_SNEASEL] = _("SNEASEL"),
+ [SPECIES_TEDDIURSA] = _("TEDDIURSA"),
+ [SPECIES_URSARING] = _("URSARING"),
+ [SPECIES_SLUGMA] = _("SLUGMA"),
+ [SPECIES_MAGCARGO] = _("MAGCARGO"),
+ [SPECIES_SWINUB] = _("SWINUB"),
+ [SPECIES_PILOSWINE] = _("PILOSWINE"),
+ [SPECIES_CORSOLA] = _("CORSOLA"),
+ [SPECIES_REMORAID] = _("REMORAID"),
+ [SPECIES_OCTILLERY] = _("OCTILLERY"),
+ [SPECIES_DELIBIRD] = _("DELIBIRD"),
+ [SPECIES_MANTINE] = _("MANTINE"),
+ [SPECIES_SKARMORY] = _("SKARMORY"),
+ [SPECIES_HOUNDOUR] = _("HOUNDOUR"),
+ [SPECIES_HOUNDOOM] = _("HOUNDOOM"),
+ [SPECIES_KINGDRA] = _("KINGDRA"),
+ [SPECIES_PHANPY] = _("PHANPY"),
+ [SPECIES_DONPHAN] = _("DONPHAN"),
+ [SPECIES_PORYGON2] = _("PORYGON2"),
+ [SPECIES_STANTLER] = _("STANTLER"),
+ [SPECIES_SMEARGLE] = _("SMEARGLE"),
+ [SPECIES_TYROGUE] = _("TYROGUE"),
+ [SPECIES_HITMONTOP] = _("HITMONTOP"),
+ [SPECIES_SMOOCHUM] = _("SMOOCHUM"),
+ [SPECIES_ELEKID] = _("ELEKID"),
+ [SPECIES_MAGBY] = _("MAGBY"),
+ [SPECIES_MILTANK] = _("MILTANK"),
+ [SPECIES_BLISSEY] = _("BLISSEY"),
+ [SPECIES_RAIKOU] = _("RAIKOU"),
+ [SPECIES_ENTEI] = _("ENTEI"),
+ [SPECIES_SUICUNE] = _("SUICUNE"),
+ [SPECIES_LARVITAR] = _("LARVITAR"),
+ [SPECIES_PUPITAR] = _("PUPITAR"),
+ [SPECIES_TYRANITAR] = _("TYRANITAR"),
+ [SPECIES_LUGIA] = _("LUGIA"),
+ [SPECIES_HO_OH] = _("HO-OH"),
+ [SPECIES_CELEBI] = _("CELEBI"),
+ [SPECIES_OLD_UNOWN_B] = _("?"),
+ [SPECIES_OLD_UNOWN_C] = _("?"),
+ [SPECIES_OLD_UNOWN_D] = _("?"),
+ [SPECIES_OLD_UNOWN_E] = _("?"),
+ [SPECIES_OLD_UNOWN_F] = _("?"),
+ [SPECIES_OLD_UNOWN_G] = _("?"),
+ [SPECIES_OLD_UNOWN_H] = _("?"),
+ [SPECIES_OLD_UNOWN_I] = _("?"),
+ [SPECIES_OLD_UNOWN_J] = _("?"),
+ [SPECIES_OLD_UNOWN_K] = _("?"),
+ [SPECIES_OLD_UNOWN_L] = _("?"),
+ [SPECIES_OLD_UNOWN_M] = _("?"),
+ [SPECIES_OLD_UNOWN_N] = _("?"),
+ [SPECIES_OLD_UNOWN_O] = _("?"),
+ [SPECIES_OLD_UNOWN_P] = _("?"),
+ [SPECIES_OLD_UNOWN_Q] = _("?"),
+ [SPECIES_OLD_UNOWN_R] = _("?"),
+ [SPECIES_OLD_UNOWN_S] = _("?"),
+ [SPECIES_OLD_UNOWN_T] = _("?"),
+ [SPECIES_OLD_UNOWN_U] = _("?"),
+ [SPECIES_OLD_UNOWN_V] = _("?"),
+ [SPECIES_OLD_UNOWN_W] = _("?"),
+ [SPECIES_OLD_UNOWN_X] = _("?"),
+ [SPECIES_OLD_UNOWN_Y] = _("?"),
+ [SPECIES_OLD_UNOWN_Z] = _("?"),
+ [SPECIES_TREECKO] = _("TREECKO"),
+ [SPECIES_GROVYLE] = _("GROVYLE"),
+ [SPECIES_SCEPTILE] = _("SCEPTILE"),
+ [SPECIES_TORCHIC] = _("TORCHIC"),
+ [SPECIES_COMBUSKEN] = _("COMBUSKEN"),
+ [SPECIES_BLAZIKEN] = _("BLAZIKEN"),
+ [SPECIES_MUDKIP] = _("MUDKIP"),
+ [SPECIES_MARSHTOMP] = _("MARSHTOMP"),
+ [SPECIES_SWAMPERT] = _("SWAMPERT"),
+ [SPECIES_POOCHYENA] = _("POOCHYENA"),
+ [SPECIES_MIGHTYENA] = _("MIGHTYENA"),
+ [SPECIES_ZIGZAGOON] = _("ZIGZAGOON"),
+ [SPECIES_LINOONE] = _("LINOONE"),
+ [SPECIES_WURMPLE] = _("WURMPLE"),
+ [SPECIES_SILCOON] = _("SILCOON"),
+ [SPECIES_BEAUTIFLY] = _("BEAUTIFLY"),
+ [SPECIES_CASCOON] = _("CASCOON"),
+ [SPECIES_DUSTOX] = _("DUSTOX"),
+ [SPECIES_LOTAD] = _("LOTAD"),
+ [SPECIES_LOMBRE] = _("LOMBRE"),
+ [SPECIES_LUDICOLO] = _("LUDICOLO"),
+ [SPECIES_SEEDOT] = _("SEEDOT"),
+ [SPECIES_NUZLEAF] = _("NUZLEAF"),
+ [SPECIES_SHIFTRY] = _("SHIFTRY"),
+ [SPECIES_NINCADA] = _("NINCADA"),
+ [SPECIES_NINJASK] = _("NINJASK"),
+ [SPECIES_SHEDINJA] = _("SHEDINJA"),
+ [SPECIES_TAILLOW] = _("TAILLOW"),
+ [SPECIES_SWELLOW] = _("SWELLOW"),
+ [SPECIES_SHROOMISH] = _("SHROOMISH"),
+ [SPECIES_BRELOOM] = _("BRELOOM"),
+ [SPECIES_SPINDA] = _("SPINDA"),
+ [SPECIES_WINGULL] = _("WINGULL"),
+ [SPECIES_PELIPPER] = _("PELIPPER"),
+ [SPECIES_SURSKIT] = _("SURSKIT"),
+ [SPECIES_MASQUERAIN] = _("MASQUERAIN"),
+ [SPECIES_WAILMER] = _("WAILMER"),
+ [SPECIES_WAILORD] = _("WAILORD"),
+ [SPECIES_SKITTY] = _("SKITTY"),
+ [SPECIES_DELCATTY] = _("DELCATTY"),
+ [SPECIES_KECLEON] = _("KECLEON"),
+ [SPECIES_BALTOY] = _("BALTOY"),
+ [SPECIES_CLAYDOL] = _("CLAYDOL"),
+ [SPECIES_NOSEPASS] = _("NOSEPASS"),
+ [SPECIES_TORKOAL] = _("TORKOAL"),
+ [SPECIES_SABLEYE] = _("SABLEYE"),
+ [SPECIES_BARBOACH] = _("BARBOACH"),
+ [SPECIES_WHISCASH] = _("WHISCASH"),
+ [SPECIES_LUVDISC] = _("LUVDISC"),
+ [SPECIES_CORPHISH] = _("CORPHISH"),
+ [SPECIES_CRAWDAUNT] = _("CRAWDAUNT"),
+ [SPECIES_FEEBAS] = _("FEEBAS"),
+ [SPECIES_MILOTIC] = _("MILOTIC"),
+ [SPECIES_CARVANHA] = _("CARVANHA"),
+ [SPECIES_SHARPEDO] = _("SHARPEDO"),
+ [SPECIES_TRAPINCH] = _("TRAPINCH"),
+ [SPECIES_VIBRAVA] = _("VIBRAVA"),
+ [SPECIES_FLYGON] = _("FLYGON"),
+ [SPECIES_MAKUHITA] = _("MAKUHITA"),
+ [SPECIES_HARIYAMA] = _("HARIYAMA"),
+ [SPECIES_ELECTRIKE] = _("ELECTRIKE"),
+ [SPECIES_MANECTRIC] = _("MANECTRIC"),
+ [SPECIES_NUMEL] = _("NUMEL"),
+ [SPECIES_CAMERUPT] = _("CAMERUPT"),
+ [SPECIES_SPHEAL] = _("SPHEAL"),
+ [SPECIES_SEALEO] = _("SEALEO"),
+ [SPECIES_WALREIN] = _("WALREIN"),
+ [SPECIES_CACNEA] = _("CACNEA"),
+ [SPECIES_CACTURNE] = _("CACTURNE"),
+ [SPECIES_SNORUNT] = _("SNORUNT"),
+ [SPECIES_GLALIE] = _("GLALIE"),
+ [SPECIES_LUNATONE] = _("LUNATONE"),
+ [SPECIES_SOLROCK] = _("SOLROCK"),
+ [SPECIES_AZURILL] = _("AZURILL"),
+ [SPECIES_SPOINK] = _("SPOINK"),
+ [SPECIES_GRUMPIG] = _("GRUMPIG"),
+ [SPECIES_PLUSLE] = _("PLUSLE"),
+ [SPECIES_MINUN] = _("MINUN"),
+ [SPECIES_MAWILE] = _("MAWILE"),
+ [SPECIES_MEDITITE] = _("MEDITITE"),
+ [SPECIES_MEDICHAM] = _("MEDICHAM"),
+ [SPECIES_SWABLU] = _("SWABLU"),
+ [SPECIES_ALTARIA] = _("ALTARIA"),
+ [SPECIES_WYNAUT] = _("WYNAUT"),
+ [SPECIES_DUSKULL] = _("DUSKULL"),
+ [SPECIES_DUSCLOPS] = _("DUSCLOPS"),
+ [SPECIES_ROSELIA] = _("ROSELIA"),
+ [SPECIES_SLAKOTH] = _("SLAKOTH"),
+ [SPECIES_VIGOROTH] = _("VIGOROTH"),
+ [SPECIES_SLAKING] = _("SLAKING"),
+ [SPECIES_GULPIN] = _("GULPIN"),
+ [SPECIES_SWALOT] = _("SWALOT"),
+ [SPECIES_TROPIUS] = _("TROPIUS"),
+ [SPECIES_WHISMUR] = _("WHISMUR"),
+ [SPECIES_LOUDRED] = _("LOUDRED"),
+ [SPECIES_EXPLOUD] = _("EXPLOUD"),
+ [SPECIES_CLAMPERL] = _("CLAMPERL"),
+ [SPECIES_HUNTAIL] = _("HUNTAIL"),
+ [SPECIES_GOREBYSS] = _("GOREBYSS"),
+ [SPECIES_ABSOL] = _("ABSOL"),
+ [SPECIES_SHUPPET] = _("SHUPPET"),
+ [SPECIES_BANETTE] = _("BANETTE"),
+ [SPECIES_SEVIPER] = _("SEVIPER"),
+ [SPECIES_ZANGOOSE] = _("ZANGOOSE"),
+ [SPECIES_RELICANTH] = _("RELICANTH"),
+ [SPECIES_ARON] = _("ARON"),
+ [SPECIES_LAIRON] = _("LAIRON"),
+ [SPECIES_AGGRON] = _("AGGRON"),
+ [SPECIES_CASTFORM] = _("CASTFORM"),
+ [SPECIES_VOLBEAT] = _("VOLBEAT"),
+ [SPECIES_ILLUMISE] = _("ILLUMISE"),
+ [SPECIES_LILEEP] = _("LILEEP"),
+ [SPECIES_CRADILY] = _("CRADILY"),
+ [SPECIES_ANORITH] = _("ANORITH"),
+ [SPECIES_ARMALDO] = _("ARMALDO"),
+ [SPECIES_RALTS] = _("RALTS"),
+ [SPECIES_KIRLIA] = _("KIRLIA"),
+ [SPECIES_GARDEVOIR] = _("GARDEVOIR"),
+ [SPECIES_BAGON] = _("BAGON"),
+ [SPECIES_SHELGON] = _("SHELGON"),
+ [SPECIES_SALAMENCE] = _("SALAMENCE"),
+ [SPECIES_BELDUM] = _("BELDUM"),
+ [SPECIES_METANG] = _("METANG"),
+ [SPECIES_METAGROSS] = _("METAGROSS"),
+ [SPECIES_REGIROCK] = _("REGIROCK"),
+ [SPECIES_REGICE] = _("REGICE"),
+ [SPECIES_REGISTEEL] = _("REGISTEEL"),
+ [SPECIES_KYOGRE] = _("KYOGRE"),
+ [SPECIES_GROUDON] = _("GROUDON"),
+ [SPECIES_RAYQUAZA] = _("RAYQUAZA"),
+ [SPECIES_LATIAS] = _("LATIAS"),
+ [SPECIES_LATIOS] = _("LATIOS"),
+ [SPECIES_JIRACHI] = _("JIRACHI"),
+ [SPECIES_DEOXYS] = _("DEOXYS"),
+ [SPECIES_CHIMECHO] = _("CHIMECHO"),
+};
diff --git a/src/data/text/trainer_class_names.h b/src/data/text/trainer_class_names.h
new file mode 100644
index 000000000..7a126a128
--- /dev/null
+++ b/src/data/text/trainer_class_names.h
@@ -0,0 +1,73 @@
+#ifndef GUARD_TRAINER_CLASS_NAMES_H
+#define GUARD_TRAINER_CLASS_NAMES_H
+
+const u8 gTrainerClassNames[][13] = {
+ _("{PKMN} TRAINER"),
+ _("{PKMN} TRAINER"),
+ _("HIKER"),
+ _("TEAM AQUA"),
+ _("{PKMN} BREEDER"),
+ _("COOLTRAINER"),
+ _("BIRD KEEPER"),
+ _("COLLECTOR"),
+ _("SWIMMER♂"),
+ _("TEAM MAGMA"),
+ _("EXPERT"),
+ _("AQUA ADMIN"),
+ _("BLACK BELT"),
+ _("AQUA LEADER"),
+ _("HEX MANIAC"),
+ _("AROMA LADY"),
+ _("RUIN MANIAC"),
+ _("INTERVIEWER"),
+ _("TUBER"),
+ _("TUBER"),
+ _("LADY"),
+ _("BEAUTY"),
+ _("RICH BOY"),
+ _("POKéMANIAC"),
+ _("GUITARIST"),
+ _("KINDLER"),
+ _("CAMPER"),
+ _("PICNICKER"),
+ _("BUG MANIAC"),
+ _("PSYCHIC"),
+ _("GENTLEMAN"),
+ _("ELITE FOUR"),
+ _("LEADER"),
+ _("SCHOOL KID"),
+ _("SR. AND JR."),
+ _("WINSTRATE"),
+ _("POKéFAN"),
+ _("YOUNGSTER"),
+ _("CHAMPION"),
+ _("FISHERMAN"),
+ _("TRIATHLETE"),
+ _("DRAGON TAMER"),
+ _("NINJA BOY"),
+ _("BATTLE GIRL"),
+ _("PARASOL LADY"),
+ _("SWIMMER♀"),
+ _("TWINS"),
+ _("SAILOR"),
+ _("COOLTRAINER"),
+ _("MAGMA ADMIN"),
+ _("{PKMN} TRAINER"),
+ _("BUG CATCHER"),
+ _("{PKMN} RANGER"),
+ _("MAGMA LEADER"),
+ _("LASS"),
+ _("YOUNG COUPLE"),
+ _("OLD COUPLE"),
+ _("SIS AND BRO"),
+ _("SALON MAIDEN"),
+ _("DOME ACE"),
+ _("PALACE MAVEN"),
+ _("ARENA TYCOON"),
+ _("FACTORY HEAD"),
+ _("PIKE QUEEN"),
+ _("PYRAMID KING"),
+ _("{PKMN} TRAINER"),
+};
+
+#endif
diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h
new file mode 100644
index 000000000..4993186d2
--- /dev/null
+++ b/src/data/trainer_parties.h
@@ -0,0 +1,12437 @@
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Sawyer1[] = {
+ {
+ .iv = 0,
+ .lvl = 21,
+ .species = SPECIES_GEODUDE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt1[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_POOCHYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt2[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_ZUBAT,
+ },
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt3[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt4[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt5[] = {
+ {
+ .iv = 0,
+ .lvl = 36,
+ .species = SPECIES_POOCHYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt6[] = {
+ {
+ .iv = 0,
+ .lvl = 36,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt7[] = {
+ {
+ .iv = 0,
+ .lvl = 36,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Gabrielle1[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_SKITTY,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_POOCHYENA,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_ZIGZAGOON,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_LOTAD,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_SEEDOT,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_TAILLOW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt8[] = {
+ {
+ .iv = 0,
+ .lvl = 9,
+ .species = SPECIES_POOCHYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Marcel[] = {
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_MANECTRIC,
+ },
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_SHIFTRY,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Alberto[] = {
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_XATU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ed[] = {
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_ZANGOOSE,
+ },
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_SEVIPER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt9[] = {
+ {
+ .iv = 0,
+ .lvl = 36,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Declan[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_GYARADOS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt10[] = {
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_POOCHYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt11[] = {
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_ZUBAT,
+ },
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_POOCHYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt12[] = {
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_POOCHYENA,
+ },
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt13[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_POOCHYENA,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_ZUBAT,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt14[] = {
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt15[] = {
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_ZUBAT,
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt16[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt17[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt18[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt19[] = {
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_POOCHYENA,
+ },
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt20[] = {
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt21[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt22[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Fredrick[] = {
+ {
+ .iv = 100,
+ .lvl = 30,
+ .species = SPECIES_MAKUHITA,
+ },
+ {
+ .iv = 100,
+ .lvl = 30,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Matt[] = {
+ {
+ .iv = 50,
+ .lvl = 34,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 50,
+ .lvl = 34,
+ .species = SPECIES_GOLBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Zander[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Shelly1[] = {
+ {
+ .iv = 50,
+ .lvl = 28,
+ .species = SPECIES_CARVANHA,
+ },
+ {
+ .iv = 50,
+ .lvl = 28,
+ .species = SPECIES_MIGHTYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Shelly2[] = {
+ {
+ .iv = 100,
+ .lvl = 37,
+ .species = SPECIES_SHARPEDO,
+ },
+ {
+ .iv = 100,
+ .lvl = 37,
+ .species = SPECIES_MIGHTYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Archie[] = {
+ {
+ .iv = 150,
+ .lvl = 41,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 150,
+ .lvl = 41,
+ .species = SPECIES_CROBAT,
+ },
+ {
+ .iv = 150,
+ .lvl = 43,
+ .species = SPECIES_SHARPEDO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Leah[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_SPOINK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Daisy[] = {
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Rose1[] = {
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_ROSELIA,
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Felix[] = {
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_MEDICHAM,
+ .moves = MOVE_PSYCHIC, MOVE_NONE, MOVE_NONE, MOVE_NONE
+ },
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_CLAYDOL,
+ .moves = MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Violet[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_ROSELIA,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_GLOOM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Rose2[] = {
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Rose3[] = {
+ {
+ .iv = 20,
+ .lvl = 28,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 20,
+ .lvl = 28,
+ .species = SPECIES_GLOOM,
+ },
+ {
+ .iv = 20,
+ .lvl = 28,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Rose4[] = {
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_GLOOM,
+ },
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Rose5[] = {
+ {
+ .iv = 40,
+ .lvl = 34,
+ .species = SPECIES_BRELOOM,
+ },
+ {
+ .iv = 40,
+ .lvl = 34,
+ .species = SPECIES_GLOOM,
+ },
+ {
+ .iv = 40,
+ .lvl = 34,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Dusty1[] = {
+ {
+ .iv = 50,
+ .lvl = 23,
+ .species = SPECIES_SANDSLASH,
+ .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Chip[] = {
+ {
+ .iv = 50,
+ .lvl = 27,
+ .species = SPECIES_BALTOY,
+ .moves = MOVE_PSYBEAM, MOVE_SELF_DESTRUCT, MOVE_SANDSTORM, MOVE_ANCIENT_POWER
+ },
+ {
+ .iv = 50,
+ .lvl = 27,
+ .species = SPECIES_SANDSHREW,
+ .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ },
+ {
+ .iv = 50,
+ .lvl = 27,
+ .species = SPECIES_SANDSLASH,
+ .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Foster[] = {
+ {
+ .iv = 100,
+ .lvl = 25,
+ .species = SPECIES_SANDSHREW,
+ .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ },
+ {
+ .iv = 100,
+ .lvl = 25,
+ .species = SPECIES_SANDSLASH,
+ .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Dusty2[] = {
+ {
+ .iv = 60,
+ .lvl = 27,
+ .species = SPECIES_SANDSLASH,
+ .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Dusty3[] = {
+ {
+ .iv = 70,
+ .lvl = 30,
+ .species = SPECIES_SANDSLASH,
+ .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Dusty4[] = {
+ {
+ .iv = 80,
+ .lvl = 33,
+ .species = SPECIES_SANDSLASH,
+ .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Dusty5[] = {
+ {
+ .iv = 90,
+ .lvl = 36,
+ .species = SPECIES_SANDSLASH,
+ .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_GabbyAndTy1[] = {
+ {
+ .iv = 50,
+ .lvl = 17,
+ .species = SPECIES_MAGNEMITE,
+ },
+ {
+ .iv = 50,
+ .lvl = 17,
+ .species = SPECIES_WHISMUR,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_GabbyAndTy2[] = {
+ {
+ .iv = 100,
+ .lvl = 27,
+ .species = SPECIES_MAGNEMITE,
+ },
+ {
+ .iv = 100,
+ .lvl = 27,
+ .species = SPECIES_LOUDRED,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_GabbyAndTy3[] = {
+ {
+ .iv = 150,
+ .lvl = 30,
+ .species = SPECIES_MAGNETON,
+ },
+ {
+ .iv = 150,
+ .lvl = 30,
+ .species = SPECIES_LOUDRED,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_GabbyAndTy4[] = {
+ {
+ .iv = 200,
+ .lvl = 33,
+ .species = SPECIES_MAGNETON,
+ },
+ {
+ .iv = 200,
+ .lvl = 33,
+ .species = SPECIES_LOUDRED,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_GabbyAndTy5[] = {
+ {
+ .iv = 250,
+ .lvl = 36,
+ .species = SPECIES_MAGNETON,
+ },
+ {
+ .iv = 250,
+ .lvl = 36,
+ .species = SPECIES_LOUDRED,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_GabbyAndTy6[] = {
+ {
+ .iv = 250,
+ .lvl = 39,
+ .species = SPECIES_MAGNETON,
+ .moves = MOVE_SONIC_BOOM, MOVE_THUNDER_WAVE, MOVE_METAL_SOUND, MOVE_THUNDERBOLT
+ },
+ {
+ .iv = 250,
+ .lvl = 39,
+ .species = SPECIES_EXPLOUD,
+ .moves = MOVE_ASTONISH, MOVE_STOMP, MOVE_SUPERSONIC, MOVE_HYPER_VOICE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lola1[] = {
+ {
+ .iv = 10,
+ .lvl = 12,
+ .species = SPECIES_AZURILL,
+ },
+ {
+ .iv = 10,
+ .lvl = 12,
+ .species = SPECIES_AZURILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Austina[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Gwen[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lola2[] = {
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_MARILL,
+ },
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lola3[] = {
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_MARILL,
+ },
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lola4[] = {
+ {
+ .iv = 30,
+ .lvl = 32,
+ .species = SPECIES_MARILL,
+ },
+ {
+ .iv = 30,
+ .lvl = 32,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lola5[] = {
+ {
+ .iv = 40,
+ .lvl = 35,
+ .species = SPECIES_AZUMARILL,
+ },
+ {
+ .iv = 40,
+ .lvl = 35,
+ .species = SPECIES_AZUMARILL,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Ricky1[] = {
+ {
+ .iv = 10,
+ .lvl = 13,
+ .species = SPECIES_ZIGZAGOON,
+ .moves = MOVE_SAND_ATTACK, MOVE_HEADBUTT, MOVE_TAIL_WHIP, MOVE_SURF
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Simon[] = {
+ {
+ .iv = 0,
+ .lvl = 12,
+ .species = SPECIES_AZURILL,
+ },
+ {
+ .iv = 0,
+ .lvl = 12,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Charlie[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Ricky2[] = {
+ {
+ .iv = 10,
+ .lvl = 27,
+ .species = SPECIES_LINOONE,
+ .moves = MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Ricky3[] = {
+ {
+ .iv = 20,
+ .lvl = 30,
+ .species = SPECIES_LINOONE,
+ .moves = MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Ricky4[] = {
+ {
+ .iv = 30,
+ .lvl = 33,
+ .species = SPECIES_LINOONE,
+ .moves = MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Ricky5[] = {
+ {
+ .iv = 40,
+ .lvl = 36,
+ .species = SPECIES_LINOONE,
+ .moves = MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Randall[] = {
+ {
+ .iv = 255,
+ .lvl = 26,
+ .species = SPECIES_SWELLOW,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_QUICK_ATTACK, MOVE_AGILITY, MOVE_WING_ATTACK, MOVE_NONE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Parker[] = {
+ {
+ .iv = 255,
+ .lvl = 26,
+ .species = SPECIES_SPINDA,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_FOCUS_PUNCH, MOVE_NONE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_George[] = {
+ {
+ .iv = 255,
+ .lvl = 26,
+ .species = SPECIES_SLAKOTH,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SLACK_OFF, MOVE_COUNTER, MOVE_SHADOW_BALL, MOVE_NONE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Berke[] = {
+ {
+ .iv = 255,
+ .lvl = 26,
+ .species = SPECIES_VIGOROTH,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FOCUS_ENERGY, MOVE_SLASH, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Braxton[] = {
+ {
+ .iv = 100,
+ .lvl = 28,
+ .species = SPECIES_SWELLOW,
+ .moves = MOVE_FOCUS_ENERGY, MOVE_QUICK_ATTACK, MOVE_WING_ATTACK, MOVE_ENDEAVOR
+ },
+ {
+ .iv = 100,
+ .lvl = 28,
+ .species = SPECIES_TRAPINCH,
+ .moves = MOVE_BITE, MOVE_DIG, MOVE_FAINT_ATTACK, MOVE_SAND_TOMB
+ },
+ {
+ .iv = 100,
+ .lvl = 28,
+ .species = SPECIES_WAILMER,
+ .moves = MOVE_ROLLOUT, MOVE_WHIRLPOOL, MOVE_ASTONISH, MOVE_WATER_PULSE
+ },
+ {
+ .iv = 100,
+ .lvl = 28,
+ .species = SPECIES_MAGNETON,
+ .moves = MOVE_THUNDERBOLT, MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, MOVE_SONIC_BOOM
+ },
+ {
+ .iv = 100,
+ .lvl = 28,
+ .species = SPECIES_SHIFTRY,
+ .moves = MOVE_GIGA_DRAIN, MOVE_FAINT_ATTACK, MOVE_DOUBLE_TEAM, MOVE_SWAGGER
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Vincent[] = {
+ {
+ .iv = 100,
+ .lvl = 44,
+ .species = SPECIES_SABLEYE,
+ },
+ {
+ .iv = 100,
+ .lvl = 44,
+ .species = SPECIES_MEDICHAM,
+ },
+ {
+ .iv = 100,
+ .lvl = 44,
+ .species = SPECIES_SHARPEDO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Leroy[] = {
+ {
+ .iv = 100,
+ .lvl = 46,
+ .species = SPECIES_MAWILE,
+ },
+ {
+ .iv = 100,
+ .lvl = 46,
+ .species = SPECIES_STARMIE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Wilton1[] = {
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_ELECTRIKE,
+ },
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Edgar[] = {
+ {
+ .iv = 100,
+ .lvl = 43,
+ .species = SPECIES_CACTURNE,
+ },
+ {
+ .iv = 100,
+ .lvl = 43,
+ .species = SPECIES_PELIPPER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Albert[] = {
+ {
+ .iv = 100,
+ .lvl = 43,
+ .species = SPECIES_MAGNETON,
+ },
+ {
+ .iv = 100,
+ .lvl = 43,
+ .species = SPECIES_MUK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Samuel[] = {
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_MAWILE,
+ },
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_KADABRA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Vito[] = {
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_DODRIO,
+ },
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_KADABRA,
+ },
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_ELECTRODE,
+ },
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_SHIFTRY,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Owen[] = {
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_KECLEON,
+ },
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_GRAVELER,
+ },
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_WAILORD,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Wilton2[] = {
+ {
+ .iv = 110,
+ .lvl = 26,
+ .species = SPECIES_ELECTRIKE,
+ },
+ {
+ .iv = 110,
+ .lvl = 26,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 110,
+ .lvl = 26,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Wilton3[] = {
+ {
+ .iv = 120,
+ .lvl = 29,
+ .species = SPECIES_MANECTRIC,
+ },
+ {
+ .iv = 120,
+ .lvl = 29,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 120,
+ .lvl = 29,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Wilton4[] = {
+ {
+ .iv = 130,
+ .lvl = 32,
+ .species = SPECIES_MANECTRIC,
+ },
+ {
+ .iv = 130,
+ .lvl = 32,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 130,
+ .lvl = 32,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Wilton5[] = {
+ {
+ .iv = 140,
+ .lvl = 35,
+ .species = SPECIES_MANECTRIC,
+ },
+ {
+ .iv = 140,
+ .lvl = 35,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 140,
+ .lvl = 35,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Warren[] = {
+ {
+ .iv = 100,
+ .lvl = 33,
+ .species = SPECIES_GRAVELER,
+ },
+ {
+ .iv = 100,
+ .lvl = 33,
+ .species = SPECIES_LUDICOLO,
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Mary[] = {
+ {
+ .iv = 255,
+ .lvl = 26,
+ .species = SPECIES_DELCATTY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FAINT_ATTACK, MOVE_SHOCK_WAVE, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Alexia[] = {
+ {
+ .iv = 255,
+ .lvl = 26,
+ .species = SPECIES_WIGGLYTUFF,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_NONE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Jody[] = {
+ {
+ .iv = 255,
+ .lvl = 26,
+ .species = SPECIES_ZANGOOSE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SWORDS_DANCE, MOVE_SLASH, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Wendy[] = {
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_MAWILE,
+ .moves = MOVE_BATON_PASS, MOVE_FAINT_ATTACK, MOVE_FAKE_TEARS, MOVE_BITE
+ },
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_ROSELIA,
+ .moves = MOVE_MEGA_DRAIN, MOVE_MAGICAL_LEAF, MOVE_GRASS_WHISTLE, MOVE_LEECH_SEED
+ },
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_PELIPPER,
+ .moves = MOVE_FLY, MOVE_WATER_GUN, MOVE_MIST, MOVE_PROTECT
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Keira[] = {
+ {
+ .iv = 100,
+ .lvl = 45,
+ .species = SPECIES_LAIRON,
+ },
+ {
+ .iv = 100,
+ .lvl = 45,
+ .species = SPECIES_MANECTRIC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brooke1[] = {
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_NUMEL,
+ },
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jennifer[] = {
+ {
+ .iv = 200,
+ .lvl = 30,
+ .species = SPECIES_SABLEYE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Hope[] = {
+ {
+ .iv = 100,
+ .lvl = 45,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Shannon[] = {
+ {
+ .iv = 100,
+ .lvl = 45,
+ .species = SPECIES_CLAYDOL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Michelle[] = {
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_TORKOAL,
+ },
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_MEDICHAM,
+ },
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_LUDICOLO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Caroline[] = {
+ {
+ .iv = 100,
+ .lvl = 43,
+ .species = SPECIES_SKARMORY,
+ },
+ {
+ .iv = 100,
+ .lvl = 43,
+ .species = SPECIES_SABLEYE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Julie[] = {
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_SANDSLASH,
+ },
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_NINETALES,
+ },
+ {
+ .iv = 100,
+ .lvl = 42,
+ .species = SPECIES_TROPIUS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brooke2[] = {
+ {
+ .iv = 110,
+ .lvl = 26,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 110,
+ .lvl = 26,
+ .species = SPECIES_NUMEL,
+ },
+ {
+ .iv = 110,
+ .lvl = 26,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brooke3[] = {
+ {
+ .iv = 120,
+ .lvl = 29,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 120,
+ .lvl = 29,
+ .species = SPECIES_NUMEL,
+ },
+ {
+ .iv = 120,
+ .lvl = 29,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brooke4[] = {
+ {
+ .iv = 130,
+ .lvl = 32,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 130,
+ .lvl = 32,
+ .species = SPECIES_NUMEL,
+ },
+ {
+ .iv = 130,
+ .lvl = 32,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brooke5[] = {
+ {
+ .iv = 140,
+ .lvl = 34,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 140,
+ .lvl = 34,
+ .species = SPECIES_CAMERUPT,
+ },
+ {
+ .iv = 140,
+ .lvl = 34,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Patricia[] = {
+ {
+ .iv = 0,
+ .lvl = 41,
+ .species = SPECIES_BANETTE,
+ },
+ {
+ .iv = 0,
+ .lvl = 41,
+ .species = SPECIES_LUNATONE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Kindra[] = {
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_DUSKULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_SHUPPET,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tammy[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_DUSKULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_SHUPPET,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Valerie1[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_SABLEYE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tasha[] = {
+ {
+ .iv = 50,
+ .lvl = 32,
+ .species = SPECIES_SHUPPET,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Valerie2[] = {
+ {
+ .iv = 10,
+ .lvl = 31,
+ .species = SPECIES_SABLEYE,
+ },
+ {
+ .iv = 10,
+ .lvl = 31,
+ .species = SPECIES_SPOINK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Valerie3[] = {
+ {
+ .iv = 20,
+ .lvl = 35,
+ .species = SPECIES_SPOINK,
+ },
+ {
+ .iv = 20,
+ .lvl = 35,
+ .species = SPECIES_SABLEYE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Valerie4[] = {
+ {
+ .iv = 30,
+ .lvl = 40,
+ .species = SPECIES_SPOINK,
+ },
+ {
+ .iv = 30,
+ .lvl = 40,
+ .species = SPECIES_SABLEYE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Valerie5[] = {
+ {
+ .iv = 40,
+ .lvl = 42,
+ .species = SPECIES_DUSKULL,
+ },
+ {
+ .iv = 40,
+ .lvl = 42,
+ .species = SPECIES_SABLEYE,
+ },
+ {
+ .iv = 40,
+ .lvl = 42,
+ .species = SPECIES_GRUMPIG,
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Cindy1[] = {
+ {
+ .iv = 0,
+ .lvl = 7,
+ .species = SPECIES_ZIGZAGOON,
+ .heldItem = ITEM_NUGGET
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Daphne[] = {
+ {
+ .iv = 100,
+ .lvl = 39,
+ .species = SPECIES_LUVDISC,
+ .heldItem = ITEM_NUGGET,
+ .moves = MOVE_ATTRACT, MOVE_SWEET_KISS, MOVE_FLAIL, MOVE_WATER_PULSE
+ },
+ {
+ .iv = 100,
+ .lvl = 39,
+ .species = SPECIES_LUVDISC,
+ .heldItem = ITEM_NUGGET,
+ .moves = MOVE_ATTRACT, MOVE_SAFEGUARD, MOVE_TAKE_DOWN, MOVE_WATER_PULSE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt23[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Cindy2[] = {
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_ZIGZAGOON,
+ .heldItem = ITEM_NUGGET,
+ .moves = MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Brianna[] = {
+ {
+ .iv = 150,
+ .lvl = 40,
+ .species = SPECIES_SEAKING,
+ .heldItem = ITEM_NUGGET
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Naomi[] = {
+ {
+ .iv = 100,
+ .lvl = 45,
+ .species = SPECIES_ROSELIA,
+ .heldItem = ITEM_NUGGET
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Cindy3[] = {
+ {
+ .iv = 10,
+ .lvl = 27,
+ .species = SPECIES_LINOONE,
+ .heldItem = ITEM_NUGGET
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Cindy4[] = {
+ {
+ .iv = 20,
+ .lvl = 30,
+ .species = SPECIES_LINOONE,
+ .heldItem = ITEM_NUGGET
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Cindy5[] = {
+ {
+ .iv = 30,
+ .lvl = 33,
+ .species = SPECIES_LINOONE,
+ .heldItem = ITEM_NUGGET
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Cindy6[] = {
+ {
+ .iv = 40,
+ .lvl = 36,
+ .species = SPECIES_LINOONE,
+ .heldItem = ITEM_NUGGET,
+ .moves = MOVE_FURY_SWIPES, MOVE_MUD_SPORT, MOVE_ODOR_SLEUTH, MOVE_SAND_ATTACK
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Melissa[] = {
+ {
+ .iv = 0,
+ .lvl = 21,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Sheila[] = {
+ {
+ .iv = 0,
+ .lvl = 21,
+ .species = SPECIES_SHROOMISH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Shirley[] = {
+ {
+ .iv = 0,
+ .lvl = 21,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Jessica1[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_KECLEON,
+ .moves = MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK
+ },
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_SEVIPER,
+ .moves = MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Connie[] = {
+ {
+ .iv = 100,
+ .lvl = 40,
+ .species = SPECIES_GOLDEEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Bridget[] = {
+ {
+ .iv = 150,
+ .lvl = 40,
+ .species = SPECIES_AZUMARILL,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Olivia[] = {
+ {
+ .iv = 100,
+ .lvl = 35,
+ .species = SPECIES_CLAMPERL,
+ .moves = MOVE_IRON_DEFENSE, MOVE_WHIRLPOOL, MOVE_RAIN_DANCE, MOVE_WATER_PULSE
+ },
+ {
+ .iv = 100,
+ .lvl = 37,
+ .species = SPECIES_CORPHISH,
+ .moves = MOVE_TAUNT, MOVE_CRABHAMMER, MOVE_WATER_PULSE, MOVE_NONE
+ },
+ {
+ .iv = 100,
+ .lvl = 39,
+ .species = SPECIES_LOMBRE,
+ .moves = MOVE_UPROAR, MOVE_FURY_SWIPES, MOVE_FAKE_OUT, MOVE_WATER_PULSE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tiffany[] = {
+ {
+ .iv = 100,
+ .lvl = 39,
+ .species = SPECIES_CARVANHA,
+ },
+ {
+ .iv = 100,
+ .lvl = 39,
+ .species = SPECIES_SHARPEDO,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Jessica2[] = {
+ {
+ .iv = 10,
+ .lvl = 35,
+ .species = SPECIES_KECLEON,
+ .moves = MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK
+ },
+ {
+ .iv = 10,
+ .lvl = 35,
+ .species = SPECIES_SEVIPER,
+ .moves = MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Jessica3[] = {
+ {
+ .iv = 20,
+ .lvl = 38,
+ .species = SPECIES_KECLEON,
+ .moves = MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK
+ },
+ {
+ .iv = 20,
+ .lvl = 38,
+ .species = SPECIES_SEVIPER,
+ .moves = MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Jessica4[] = {
+ {
+ .iv = 30,
+ .lvl = 41,
+ .species = SPECIES_KECLEON,
+ .moves = MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK
+ },
+ {
+ .iv = 30,
+ .lvl = 41,
+ .species = SPECIES_SEVIPER,
+ .moves = MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Jessica5[] = {
+ {
+ .iv = 40,
+ .lvl = 44,
+ .species = SPECIES_KECLEON,
+ .moves = MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK
+ },
+ {
+ .iv = 40,
+ .lvl = 44,
+ .species = SPECIES_SEVIPER,
+ .moves = MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Winston1[] = {
+ {
+ .iv = 0,
+ .lvl = 7,
+ .species = SPECIES_ZIGZAGOON,
+ .heldItem = ITEM_NUGGET
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Mollie[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_WHISCASH,
+ },
+ {
+ .iv = 200,
+ .lvl = 33,
+ .species = SPECIES_MEDITITE,
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Garret[] = {
+ {
+ .iv = 0,
+ .lvl = 45,
+ .species = SPECIES_AZUMARILL,
+ .heldItem = ITEM_NUGGET
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Winston2[] = {
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_LINOONE,
+ .heldItem = ITEM_NUGGET
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Winston3[] = {
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_LINOONE,
+ .heldItem = ITEM_NUGGET
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Winston4[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_LINOONE,
+ .heldItem = ITEM_NUGGET
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Winston5[] = {
+ {
+ .iv = 0,
+ .lvl = 36,
+ .species = SPECIES_LINOONE,
+ .heldItem = ITEM_NUGGET,
+ .moves = MOVE_FURY_SWIPES, MOVE_MUD_SPORT, MOVE_ODOR_SLEUTH, MOVE_SAND_ATTACK
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Steve1[] = {
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_ARON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Thalia1[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_HORSEA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Mark[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_RHYHORN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt24[] = {
+ {
+ .iv = 0,
+ .lvl = 20,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Steve2[] = {
+ {
+ .iv = 10,
+ .lvl = 27,
+ .species = SPECIES_LAIRON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Steve3[] = {
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_LAIRON,
+ },
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_RHYHORN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Steve4[] = {
+ {
+ .iv = 30,
+ .lvl = 32,
+ .species = SPECIES_LAIRON,
+ },
+ {
+ .iv = 30,
+ .lvl = 32,
+ .species = SPECIES_RHYHORN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Steve5[] = {
+ {
+ .iv = 40,
+ .lvl = 35,
+ .species = SPECIES_AGGRON,
+ },
+ {
+ .iv = 40,
+ .lvl = 35,
+ .species = SPECIES_RHYDON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Luis[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dominik[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_TENTACOOL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Douglas[] = {
+ {
+ .iv = 10,
+ .lvl = 24,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 10,
+ .lvl = 24,
+ .species = SPECIES_TENTACOOL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Darrin[] = {
+ {
+ .iv = 10,
+ .lvl = 24,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 10,
+ .lvl = 24,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 10,
+ .lvl = 24,
+ .species = SPECIES_TENTACOOL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tony1[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jerome[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_TENTACRUEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Matthew[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_David[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Spencer[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_WINGULL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Roland[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nolen[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_TENTACRUEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Stan[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_HORSEA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Barry[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_GYARADOS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dean[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_CARVANHA,
+ },
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Rodney[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_GYARADOS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Richard[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_PELIPPER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Herman[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_TENTACRUEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Santiago[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_TENTACRUEL,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_WAILMER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Gilbert[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_SHARPEDO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Franklin[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_SEALEO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Kevin[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_SPHEAL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jack[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_GYARADOS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dudley[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_TENTACRUEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Chad[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_WAILMER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tony2[] = {
+ {
+ .iv = 10,
+ .lvl = 30,
+ .species = SPECIES_SHARPEDO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tony3[] = {
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_SHARPEDO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tony4[] = {
+ {
+ .iv = 30,
+ .lvl = 34,
+ .species = SPECIES_STARYU,
+ },
+ {
+ .iv = 30,
+ .lvl = 36,
+ .species = SPECIES_SHARPEDO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tony5[] = {
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_STARMIE,
+ },
+ {
+ .iv = 40,
+ .lvl = 39,
+ .species = SPECIES_SHARPEDO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Takao[] = {
+ {
+ .iv = 127,
+ .lvl = 13,
+ .species = SPECIES_MACHOP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Hitoshi[] = {
+ {
+ .iv = 50,
+ .lvl = 32,
+ .species = SPECIES_MACHOP,
+ },
+ {
+ .iv = 200,
+ .lvl = 32,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Kiyo[] = {
+ {
+ .iv = 100,
+ .lvl = 34,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Koichi[] = {
+ {
+ .iv = 100,
+ .lvl = 24,
+ .species = SPECIES_MACHOP,
+ },
+ {
+ .iv = 150,
+ .lvl = 28,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nob1[] = {
+ {
+ .iv = 100,
+ .lvl = 19,
+ .species = SPECIES_MACHOP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nob2[] = {
+ {
+ .iv = 110,
+ .lvl = 27,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nob3[] = {
+ {
+ .iv = 120,
+ .lvl = 29,
+ .species = SPECIES_MACHOP,
+ },
+ {
+ .iv = 120,
+ .lvl = 29,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nob4[] = {
+ {
+ .iv = 130,
+ .lvl = 31,
+ .species = SPECIES_MACHOP,
+ },
+ {
+ .iv = 130,
+ .lvl = 31,
+ .species = SPECIES_MACHOKE,
+ },
+ {
+ .iv = 130,
+ .lvl = 31,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Nob5[] = {
+ {
+ .iv = 140,
+ .lvl = 33,
+ .species = SPECIES_MACHOP,
+ .heldItem = ITEM_NONE
+ },
+ {
+ .iv = 140,
+ .lvl = 33,
+ .species = SPECIES_MACHOKE,
+ .heldItem = ITEM_NONE
+ },
+ {
+ .iv = 140,
+ .lvl = 33,
+ .species = SPECIES_MACHOKE,
+ .heldItem = ITEM_NONE
+ },
+ {
+ .iv = 140,
+ .lvl = 33,
+ .species = SPECIES_MACHAMP,
+ .heldItem = ITEM_BLACK_BELT
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Yuji[] = {
+ {
+ .iv = 100,
+ .lvl = 26,
+ .species = SPECIES_MAKUHITA,
+ },
+ {
+ .iv = 100,
+ .lvl = 26,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Daisuke[] = {
+ {
+ .iv = 100,
+ .lvl = 19,
+ .species = SPECIES_MACHOP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Atsushi[] = {
+ {
+ .iv = 100,
+ .lvl = 32,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Kirk[] = {
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_ELECTRIKE,
+ .moves = MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_SPARK, MOVE_LEER
+ },
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_VOLTORB,
+ .moves = MOVE_CHARGE, MOVE_SHOCK_WAVE, MOVE_SCREECH, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt25[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_POOCHYENA,
+ },
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt26[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Shawn[] = {
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_VOLTORB,
+ },
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_MAGNEMITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Fernando1[] = {
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_ELECTRIKE,
+ },
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_LOUDRED,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dalton1[] = {
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_MAGNEMITE,
+ },
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_WHISMUR,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dalton2[] = {
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_MAGNEMITE,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_WHISMUR,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_MAGNEMITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dalton3[] = {
+ {
+ .iv = 20,
+ .lvl = 28,
+ .species = SPECIES_MAGNEMITE,
+ },
+ {
+ .iv = 20,
+ .lvl = 28,
+ .species = SPECIES_LOUDRED,
+ },
+ {
+ .iv = 20,
+ .lvl = 28,
+ .species = SPECIES_MAGNEMITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dalton4[] = {
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_MAGNETON,
+ },
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_LOUDRED,
+ },
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_MAGNETON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dalton5[] = {
+ {
+ .iv = 40,
+ .lvl = 34,
+ .species = SPECIES_MAGNETON,
+ },
+ {
+ .iv = 40,
+ .lvl = 34,
+ .species = SPECIES_EXPLOUD,
+ },
+ {
+ .iv = 40,
+ .lvl = 34,
+ .species = SPECIES_MAGNETON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cole[] = {
+ {
+ .iv = 100,
+ .lvl = 23,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jeff[] = {
+ {
+ .iv = 100,
+ .lvl = 22,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 100,
+ .lvl = 22,
+ .species = SPECIES_SLUGMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Axle[] = {
+ {
+ .iv = 100,
+ .lvl = 23,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jace[] = {
+ {
+ .iv = 100,
+ .lvl = 23,
+ .species = SPECIES_SLUGMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Keegan[] = {
+ {
+ .iv = 120,
+ .lvl = 23,
+ .species = SPECIES_SLUGMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Bernie1[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_WINGULL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Bernie2[] = {
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_WINGULL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Bernie3[] = {
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_PELIPPER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Bernie4[] = {
+ {
+ .iv = 30,
+ .lvl = 32,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 30,
+ .lvl = 32,
+ .species = SPECIES_PELIPPER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Bernie5[] = {
+ {
+ .iv = 40,
+ .lvl = 35,
+ .species = SPECIES_MAGCARGO,
+ },
+ {
+ .iv = 40,
+ .lvl = 35,
+ .species = SPECIES_PELIPPER,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Drew[] = {
+ {
+ .iv = 0,
+ .lvl = 23,
+ .species = SPECIES_SANDSHREW,
+ .moves = MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Beau[] = {
+ {
+ .iv = 0,
+ .lvl = 21,
+ .species = SPECIES_BALTOY,
+ .moves = MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, MOVE_ROCK_TOMB
+ },
+ {
+ .iv = 0,
+ .lvl = 21,
+ .species = SPECIES_SANDSHREW,
+ .moves = MOVE_POISON_STING, MOVE_SAND_ATTACK, MOVE_SCRATCH, MOVE_DIG
+ },
+ {
+ .iv = 0,
+ .lvl = 21,
+ .species = SPECIES_BALTOY,
+ .moves = MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, MOVE_ROCK_TOMB
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Larry[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_NUZLEAF,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Shane[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_SANDSHREW,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_NUZLEAF,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Justin[] = {
+ {
+ .iv = 0,
+ .lvl = 24,
+ .species = SPECIES_KECLEON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ethan1[] = {
+ {
+ .iv = 0,
+ .lvl = 20,
+ .species = SPECIES_ZIGZAGOON,
+ },
+ {
+ .iv = 0,
+ .lvl = 20,
+ .species = SPECIES_TAILLOW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Autumn[] = {
+ {
+ .iv = 0,
+ .lvl = 21,
+ .species = SPECIES_SHROOMISH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Travis[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_SANDSHREW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ethan2[] = {
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_ZIGZAGOON,
+ },
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_TAILLOW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ethan3[] = {
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_LINOONE,
+ },
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_SWELLOW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ethan4[] = {
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_SANDSHREW,
+ },
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_LINOONE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ethan5[] = {
+ {
+ .iv = 40,
+ .lvl = 34,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 40,
+ .lvl = 34,
+ .species = SPECIES_SANDSLASH,
+ },
+ {
+ .iv = 40,
+ .lvl = 34,
+ .species = SPECIES_LINOONE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brent[] = {
+ {
+ .iv = 100,
+ .lvl = 26,
+ .species = SPECIES_SURSKIT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Donald[] = {
+ {
+ .iv = 100,
+ .lvl = 24,
+ .species = SPECIES_WURMPLE,
+ },
+ {
+ .iv = 100,
+ .lvl = 24,
+ .species = SPECIES_SILCOON,
+ },
+ {
+ .iv = 100,
+ .lvl = 24,
+ .species = SPECIES_BEAUTIFLY,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Taylor[] = {
+ {
+ .iv = 100,
+ .lvl = 27,
+ .species = SPECIES_WURMPLE,
+ },
+ {
+ .iv = 100,
+ .lvl = 27,
+ .species = SPECIES_CASCOON,
+ },
+ {
+ .iv = 100,
+ .lvl = 27,
+ .species = SPECIES_DUSTOX,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jeffrey1[] = {
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_SURSKIT,
+ },
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_SURSKIT,
+ },
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_SURSKIT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Derek[] = {
+ {
+ .iv = 150,
+ .lvl = 16,
+ .species = SPECIES_DUSTOX,
+ },
+ {
+ .iv = 150,
+ .lvl = 16,
+ .species = SPECIES_BEAUTIFLY,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jeffrey2[] = {
+ {
+ .iv = 10,
+ .lvl = 31,
+ .species = SPECIES_SURSKIT,
+ },
+ {
+ .iv = 10,
+ .lvl = 31,
+ .species = SPECIES_SURSKIT,
+ },
+ {
+ .iv = 10,
+ .lvl = 31,
+ .species = SPECIES_SURSKIT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jeffrey3[] = {
+ {
+ .iv = 20,
+ .lvl = 34,
+ .species = SPECIES_SURSKIT,
+ },
+ {
+ .iv = 20,
+ .lvl = 34,
+ .species = SPECIES_SURSKIT,
+ },
+ {
+ .iv = 20,
+ .lvl = 34,
+ .species = SPECIES_MASQUERAIN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jeffrey4[] = {
+ {
+ .iv = 30,
+ .lvl = 36,
+ .species = SPECIES_SURSKIT,
+ },
+ {
+ .iv = 30,
+ .lvl = 36,
+ .species = SPECIES_WURMPLE,
+ },
+ {
+ .iv = 30,
+ .lvl = 36,
+ .species = SPECIES_SURSKIT,
+ },
+ {
+ .iv = 30,
+ .lvl = 36,
+ .species = SPECIES_MASQUERAIN,
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Jeffrey5[] = {
+ {
+ .iv = 40,
+ .lvl = 38,
+ .species = SPECIES_SURSKIT,
+ .heldItem = ITEM_NONE
+ },
+ {
+ .iv = 40,
+ .lvl = 38,
+ .species = SPECIES_DUSTOX,
+ .heldItem = ITEM_NONE
+ },
+ {
+ .iv = 40,
+ .lvl = 38,
+ .species = SPECIES_SURSKIT,
+ .heldItem = ITEM_NONE
+ },
+ {
+ .iv = 40,
+ .lvl = 38,
+ .species = SPECIES_MASQUERAIN,
+ .heldItem = ITEM_SILVER_POWDER
+ },
+ {
+ .iv = 40,
+ .lvl = 38,
+ .species = SPECIES_BEAUTIFLY,
+ .heldItem = ITEM_NONE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Edward[] = {
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_ABRA,
+ .moves = MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Preston[] = {
+ {
+ .iv = 100,
+ .lvl = 36,
+ .species = SPECIES_KIRLIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Virgil[] = {
+ {
+ .iv = 100,
+ .lvl = 36,
+ .species = SPECIES_RALTS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Blake[] = {
+ {
+ .iv = 100,
+ .lvl = 36,
+ .species = SPECIES_GIRAFARIG,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_William[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_RALTS,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_RALTS,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_KIRLIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Joshua[] = {
+ {
+ .iv = 0,
+ .lvl = 41,
+ .species = SPECIES_KADABRA,
+ },
+ {
+ .iv = 0,
+ .lvl = 41,
+ .species = SPECIES_SOLROCK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cameron1[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_SOLROCK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cameron2[] = {
+ {
+ .iv = 10,
+ .lvl = 33,
+ .species = SPECIES_KADABRA,
+ },
+ {
+ .iv = 10,
+ .lvl = 33,
+ .species = SPECIES_SOLROCK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cameron3[] = {
+ {
+ .iv = 20,
+ .lvl = 38,
+ .species = SPECIES_KADABRA,
+ },
+ {
+ .iv = 20,
+ .lvl = 38,
+ .species = SPECIES_SOLROCK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cameron4[] = {
+ {
+ .iv = 30,
+ .lvl = 41,
+ .species = SPECIES_KADABRA,
+ },
+ {
+ .iv = 30,
+ .lvl = 41,
+ .species = SPECIES_SOLROCK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cameron5[] = {
+ {
+ .iv = 40,
+ .lvl = 45,
+ .species = SPECIES_SOLROCK,
+ },
+ {
+ .iv = 40,
+ .lvl = 45,
+ .species = SPECIES_ALAKAZAM,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Jaclyn[] = {
+ {
+ .iv = 0,
+ .lvl = 16,
+ .species = SPECIES_ABRA,
+ .moves = MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Hannah[] = {
+ {
+ .iv = 100,
+ .lvl = 36,
+ .species = SPECIES_KIRLIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Samantha[] = {
+ {
+ .iv = 100,
+ .lvl = 36,
+ .species = SPECIES_XATU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Maura[] = {
+ {
+ .iv = 100,
+ .lvl = 36,
+ .species = SPECIES_KADABRA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Kayla[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_WOBBUFFET,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_NATU,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_KADABRA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Alexis[] = {
+ {
+ .iv = 0,
+ .lvl = 41,
+ .species = SPECIES_KIRLIA,
+ },
+ {
+ .iv = 0,
+ .lvl = 41,
+ .species = SPECIES_XATU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jacki1[] = {
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_KADABRA,
+ },
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_LUNATONE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jacki2[] = {
+ {
+ .iv = 10,
+ .lvl = 34,
+ .species = SPECIES_KADABRA,
+ },
+ {
+ .iv = 10,
+ .lvl = 34,
+ .species = SPECIES_LUNATONE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jacki3[] = {
+ {
+ .iv = 20,
+ .lvl = 37,
+ .species = SPECIES_KADABRA,
+ },
+ {
+ .iv = 20,
+ .lvl = 37,
+ .species = SPECIES_LUNATONE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jacki4[] = {
+ {
+ .iv = 30,
+ .lvl = 40,
+ .species = SPECIES_KADABRA,
+ },
+ {
+ .iv = 30,
+ .lvl = 40,
+ .species = SPECIES_LUNATONE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jacki5[] = {
+ {
+ .iv = 40,
+ .lvl = 43,
+ .species = SPECIES_LUNATONE,
+ },
+ {
+ .iv = 40,
+ .lvl = 43,
+ .species = SPECIES_ALAKAZAM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Walter1[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_MANECTRIC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Micah[] = {
+ {
+ .iv = 0,
+ .lvl = 44,
+ .species = SPECIES_MANECTRIC,
+ },
+ {
+ .iv = 0,
+ .lvl = 44,
+ .species = SPECIES_MANECTRIC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Thomas[] = {
+ {
+ .iv = 0,
+ .lvl = 45,
+ .species = SPECIES_ZANGOOSE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Walter2[] = {
+ {
+ .iv = 10,
+ .lvl = 34,
+ .species = SPECIES_MANECTRIC,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Walter3[] = {
+ {
+ .iv = 20,
+ .lvl = 36,
+ .species = SPECIES_LINOONE,
+ .moves = MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, MOVE_FURY_SWIPES
+ },
+ {
+ .iv = 20,
+ .lvl = 36,
+ .species = SPECIES_MANECTRIC,
+ .moves = MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, MOVE_ROAR
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Walter4[] = {
+ {
+ .iv = 30,
+ .lvl = 39,
+ .species = SPECIES_LINOONE,
+ .moves = MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, MOVE_FURY_SWIPES
+ },
+ {
+ .iv = 30,
+ .lvl = 39,
+ .species = SPECIES_MANECTRIC,
+ .moves = MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Walter5[] = {
+ {
+ .iv = 40,
+ .lvl = 41,
+ .species = SPECIES_LINOONE,
+ .moves = MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, MOVE_FURY_SWIPES
+ },
+ {
+ .iv = 40,
+ .lvl = 41,
+ .species = SPECIES_GOLDUCK,
+ .moves = MOVE_FURY_SWIPES, MOVE_DISABLE, MOVE_CONFUSION, MOVE_PSYCH_UP
+ },
+ {
+ .iv = 40,
+ .lvl = 41,
+ .species = SPECIES_MANECTRIC,
+ .moves = MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, MOVE_ROAR
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Sidney[] = {
+ {
+ .iv = 250,
+ .lvl = 46,
+ .species = SPECIES_MIGHTYENA,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_ROAR, MOVE_DOUBLE_EDGE, MOVE_SAND_ATTACK, MOVE_CRUNCH
+ },
+ {
+ .iv = 250,
+ .lvl = 48,
+ .species = SPECIES_SHIFTRY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_TORMENT, MOVE_DOUBLE_TEAM, MOVE_SWAGGER, MOVE_EXTRASENSORY
+ },
+ {
+ .iv = 250,
+ .lvl = 46,
+ .species = SPECIES_CACTURNE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_LEECH_SEED, MOVE_FAINT_ATTACK, MOVE_NEEDLE_ARM, MOVE_COTTON_SPORE
+ },
+ {
+ .iv = 250,
+ .lvl = 48,
+ .species = SPECIES_CRAWDAUNT,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SURF, MOVE_SWORDS_DANCE, MOVE_STRENGTH, MOVE_FACADE
+ },
+ {
+ .iv = 255,
+ .lvl = 49,
+ .species = SPECIES_ABSOL,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, MOVE_SLASH
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Phoebe[] = {
+ {
+ .iv = 250,
+ .lvl = 48,
+ .species = SPECIES_DUSCLOPS,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SHADOW_PUNCH, MOVE_CONFUSE_RAY, MOVE_CURSE, MOVE_PROTECT
+ },
+ {
+ .iv = 250,
+ .lvl = 49,
+ .species = SPECIES_BANETTE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SHADOW_BALL, MOVE_GRUDGE, MOVE_WILL_O_WISP, MOVE_FAINT_ATTACK
+ },
+ {
+ .iv = 250,
+ .lvl = 50,
+ .species = SPECIES_SABLEYE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SHADOW_BALL, MOVE_DOUBLE_TEAM, MOVE_NIGHT_SHADE, MOVE_FAINT_ATTACK
+ },
+ {
+ .iv = 250,
+ .lvl = 49,
+ .species = SPECIES_BANETTE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FACADE
+ },
+ {
+ .iv = 255,
+ .lvl = 51,
+ .species = SPECIES_DUSCLOPS,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SHADOW_BALL, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Glacia[] = {
+ {
+ .iv = 250,
+ .lvl = 50,
+ .species = SPECIES_SEALEO,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_HAIL, MOVE_ICE_BALL
+ },
+ {
+ .iv = 250,
+ .lvl = 50,
+ .species = SPECIES_GLALIE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_LIGHT_SCREEN, MOVE_CRUNCH, MOVE_ICY_WIND, MOVE_ICE_BEAM
+ },
+ {
+ .iv = 250,
+ .lvl = 52,
+ .species = SPECIES_SEALEO,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_ATTRACT, MOVE_DOUBLE_EDGE, MOVE_HAIL, MOVE_BLIZZARD
+ },
+ {
+ .iv = 250,
+ .lvl = 52,
+ .species = SPECIES_GLALIE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SHADOW_BALL, MOVE_EXPLOSION, MOVE_HAIL, MOVE_ICE_BEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 53,
+ .species = SPECIES_WALREIN,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SURF, MOVE_BODY_SLAM, MOVE_ICE_BEAM, MOVE_SHEER_COLD
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Drake[] = {
+ {
+ .iv = 250,
+ .lvl = 52,
+ .species = SPECIES_SHELGON,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_ROCK_TOMB, MOVE_DRAGON_CLAW, MOVE_PROTECT, MOVE_DOUBLE_EDGE
+ },
+ {
+ .iv = 250,
+ .lvl = 54,
+ .species = SPECIES_ALTARIA,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_DOUBLE_EDGE, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE
+ },
+ {
+ .iv = 250,
+ .lvl = 53,
+ .species = SPECIES_KINGDRA,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SMOKESCREEN, MOVE_DRAGON_DANCE, MOVE_SURF, MOVE_BODY_SLAM
+ },
+ {
+ .iv = 250,
+ .lvl = 53,
+ .species = SPECIES_FLYGON,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_DRAGON_BREATH, MOVE_EARTHQUAKE
+ },
+ {
+ .iv = 255,
+ .lvl = 55,
+ .species = SPECIES_SALAMENCE,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_ROCK_SLIDE, MOVE_CRUNCH
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Roxanne1[] = {
+ {
+ .iv = 100,
+ .lvl = 12,
+ .species = SPECIES_GEODUDE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_ROCK_THROW, MOVE_ROCK_TOMB
+ },
+ {
+ .iv = 100,
+ .lvl = 12,
+ .species = SPECIES_GEODUDE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_ROCK_THROW, MOVE_ROCK_TOMB
+ },
+ {
+ .iv = 200,
+ .lvl = 15,
+ .species = SPECIES_NOSEPASS,
+ .heldItem = ITEM_ORAN_BERRY,
+ .moves = MOVE_BLOCK, MOVE_HARDEN, MOVE_TACKLE, MOVE_ROCK_TOMB
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Brawly1[] = {
+ {
+ .iv = 100,
+ .lvl = 16,
+ .species = SPECIES_MACHOP,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_KARATE_CHOP, MOVE_LOW_KICK, MOVE_SEISMIC_TOSS, MOVE_BULK_UP
+ },
+ {
+ .iv = 100,
+ .lvl = 16,
+ .species = SPECIES_MEDITITE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_BULK_UP
+ },
+ {
+ .iv = 200,
+ .lvl = 19,
+ .species = SPECIES_MAKUHITA,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_ARM_THRUST, MOVE_VITAL_THROW, MOVE_REVERSAL, MOVE_BULK_UP
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Wattson1[] = {
+ {
+ .iv = 200,
+ .lvl = 20,
+ .species = SPECIES_VOLTORB,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_ROLLOUT, MOVE_SPARK, MOVE_SELF_DESTRUCT, MOVE_SHOCK_WAVE
+ },
+ {
+ .iv = 200,
+ .lvl = 20,
+ .species = SPECIES_ELECTRIKE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SHOCK_WAVE, MOVE_LEER, MOVE_QUICK_ATTACK, MOVE_HOWL
+ },
+ {
+ .iv = 220,
+ .lvl = 22,
+ .species = SPECIES_MAGNETON,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SUPERSONIC, MOVE_SHOCK_WAVE, MOVE_THUNDER_WAVE, MOVE_SONIC_BOOM
+ },
+ {
+ .iv = 250,
+ .lvl = 24,
+ .species = SPECIES_MANECTRIC,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_SHOCK_WAVE, MOVE_HOWL
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Flannery1[] = {
+ {
+ .iv = 200,
+ .lvl = 24,
+ .species = SPECIES_NUMEL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_OVERHEAT, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, MOVE_SUNNY_DAY
+ },
+ {
+ .iv = 200,
+ .lvl = 24,
+ .species = SPECIES_SLUGMA,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_OVERHEAT, MOVE_SMOG, MOVE_LIGHT_SCREEN, MOVE_SUNNY_DAY
+ },
+ {
+ .iv = 250,
+ .lvl = 26,
+ .species = SPECIES_CAMERUPT,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_OVERHEAT, MOVE_TACKLE, MOVE_SUNNY_DAY, MOVE_ATTRACT
+ },
+ {
+ .iv = 250,
+ .lvl = 29,
+ .species = SPECIES_TORKOAL,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_BODY_SLAM, MOVE_ATTRACT
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Norman1[] = {
+ {
+ .iv = 200,
+ .lvl = 27,
+ .species = SPECIES_SPINDA,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_TEETER_DANCE, MOVE_PSYBEAM, MOVE_FACADE, MOVE_ENCORE
+ },
+ {
+ .iv = 200,
+ .lvl = 27,
+ .species = SPECIES_VIGOROTH,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SLASH, MOVE_FACADE, MOVE_ENCORE, MOVE_FAINT_ATTACK
+ },
+ {
+ .iv = 200,
+ .lvl = 29,
+ .species = SPECIES_LINOONE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SLASH, MOVE_BELLY_DRUM, MOVE_FACADE, MOVE_HEADBUTT
+ },
+ {
+ .iv = 250,
+ .lvl = 31,
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_COUNTER, MOVE_YAWN, MOVE_FACADE, MOVE_FAINT_ATTACK
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Winona1[] = {
+ {
+ .iv = 210,
+ .lvl = 29,
+ .species = SPECIES_SWABLU,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PERISH_SONG, MOVE_MIRROR_MOVE, MOVE_SAFEGUARD, MOVE_AERIAL_ACE
+ },
+ {
+ .iv = 210,
+ .lvl = 29,
+ .species = SPECIES_TROPIUS,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_SYNTHESIS
+ },
+ {
+ .iv = 210,
+ .lvl = 30,
+ .species = SPECIES_PELIPPER,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_WATER_GUN, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE
+ },
+ {
+ .iv = 220,
+ .lvl = 31,
+ .species = SPECIES_SKARMORY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SAND_ATTACK, MOVE_FURY_ATTACK, MOVE_STEEL_WING, MOVE_AERIAL_ACE
+ },
+ {
+ .iv = 255,
+ .lvl = 33,
+ .species = SPECIES_ALTARIA,
+ .heldItem = ITEM_ORAN_BERRY,
+ .moves = MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_TateAndLiza1[] = {
+ {
+ .iv = 250,
+ .lvl = 41,
+ .species = SPECIES_CLAYDOL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN
+ },
+ {
+ .iv = 250,
+ .lvl = 41,
+ .species = SPECIES_XATU,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PSYCHIC, MOVE_SUNNY_DAY, MOVE_CONFUSE_RAY, MOVE_CALM_MIND
+ },
+ {
+ .iv = 250,
+ .lvl = 42,
+ .species = SPECIES_LUNATONE,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_CALM_MIND
+ },
+ {
+ .iv = 250,
+ .lvl = 42,
+ .species = SPECIES_SOLROCK,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Juan1[] = {
+ {
+ .iv = 200,
+ .lvl = 41,
+ .species = SPECIES_LUVDISC,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_WATER_PULSE, MOVE_ATTRACT, MOVE_SWEET_KISS, MOVE_FLAIL
+ },
+ {
+ .iv = 200,
+ .lvl = 41,
+ .species = SPECIES_WHISCASH,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_AMNESIA, MOVE_EARTHQUAKE
+ },
+ {
+ .iv = 200,
+ .lvl = 43,
+ .species = SPECIES_SEALEO,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_AURORA_BEAM, MOVE_WATER_PULSE
+ },
+ {
+ .iv = 200,
+ .lvl = 43,
+ .species = SPECIES_CRAWDAUNT,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_WATER_PULSE, MOVE_CRABHAMMER, MOVE_TAUNT, MOVE_LEER
+ },
+ {
+ .iv = 250,
+ .lvl = 46,
+ .species = SPECIES_KINGDRA,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jerry1[] = {
+ {
+ .iv = 10,
+ .lvl = 9,
+ .species = SPECIES_RALTS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ted[] = {
+ {
+ .iv = 10,
+ .lvl = 17,
+ .species = SPECIES_RALTS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Paul[] = {
+ {
+ .iv = 10,
+ .lvl = 15,
+ .species = SPECIES_NUMEL,
+ },
+ {
+ .iv = 10,
+ .lvl = 15,
+ .species = SPECIES_ODDISH,
+ },
+ {
+ .iv = 10,
+ .lvl = 15,
+ .species = SPECIES_WINGULL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jerry2[] = {
+ {
+ .iv = 20,
+ .lvl = 26,
+ .species = SPECIES_RALTS,
+ },
+ {
+ .iv = 20,
+ .lvl = 26,
+ .species = SPECIES_MEDITITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jerry3[] = {
+ {
+ .iv = 30,
+ .lvl = 29,
+ .species = SPECIES_KIRLIA,
+ },
+ {
+ .iv = 30,
+ .lvl = 29,
+ .species = SPECIES_MEDITITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jerry4[] = {
+ {
+ .iv = 40,
+ .lvl = 32,
+ .species = SPECIES_KIRLIA,
+ },
+ {
+ .iv = 40,
+ .lvl = 32,
+ .species = SPECIES_MEDICHAM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jerry5[] = {
+ {
+ .iv = 50,
+ .lvl = 34,
+ .species = SPECIES_KIRLIA,
+ },
+ {
+ .iv = 50,
+ .lvl = 34,
+ .species = SPECIES_BANETTE,
+ },
+ {
+ .iv = 50,
+ .lvl = 34,
+ .species = SPECIES_MEDICHAM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Karen1[] = {
+ {
+ .iv = 10,
+ .lvl = 9,
+ .species = SPECIES_SHROOMISH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Georgia[] = {
+ {
+ .iv = 10,
+ .lvl = 16,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 10,
+ .lvl = 16,
+ .species = SPECIES_BEAUTIFLY,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Karen2[] = {
+ {
+ .iv = 20,
+ .lvl = 26,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 20,
+ .lvl = 26,
+ .species = SPECIES_WHISMUR,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Karen3[] = {
+ {
+ .iv = 30,
+ .lvl = 29,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 30,
+ .lvl = 29,
+ .species = SPECIES_LOUDRED,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Karen4[] = {
+ {
+ .iv = 40,
+ .lvl = 32,
+ .species = SPECIES_BRELOOM,
+ },
+ {
+ .iv = 40,
+ .lvl = 32,
+ .species = SPECIES_LOUDRED,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Karen5[] = {
+ {
+ .iv = 50,
+ .lvl = 35,
+ .species = SPECIES_BRELOOM,
+ },
+ {
+ .iv = 50,
+ .lvl = 35,
+ .species = SPECIES_EXPLOUD,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_KateAndJoy[] = {
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_SPINDA,
+ .moves = MOVE_HYPNOSIS, MOVE_PSYBEAM, MOVE_DIZZY_PUNCH, MOVE_TEETER_DANCE
+ },
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_SLAKING,
+ .moves = MOVE_FOCUS_PUNCH, MOVE_YAWN, MOVE_SLACK_OFF, MOVE_FAINT_ATTACK
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_AnnaAndMeg1[] = {
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_ZIGZAGOON,
+ .moves = MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH
+ },
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_MAKUHITA,
+ .moves = MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_AnnaAndMeg2[] = {
+ {
+ .iv = 10,
+ .lvl = 28,
+ .species = SPECIES_ZIGZAGOON,
+ .moves = MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH
+ },
+ {
+ .iv = 10,
+ .lvl = 30,
+ .species = SPECIES_MAKUHITA,
+ .moves = MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_AnnaAndMeg3[] = {
+ {
+ .iv = 20,
+ .lvl = 31,
+ .species = SPECIES_ZIGZAGOON,
+ .moves = MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH
+ },
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_MAKUHITA,
+ .moves = MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_AnnaAndMeg4[] = {
+ {
+ .iv = 30,
+ .lvl = 34,
+ .species = SPECIES_LINOONE,
+ .moves = MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH
+ },
+ {
+ .iv = 30,
+ .lvl = 36,
+ .species = SPECIES_MAKUHITA,
+ .moves = MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_AnnaAndMeg5[] = {
+ {
+ .iv = 40,
+ .lvl = 36,
+ .species = SPECIES_LINOONE,
+ .moves = MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH
+ },
+ {
+ .iv = 40,
+ .lvl = 38,
+ .species = SPECIES_HARIYAMA,
+ .moves = MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Victor[] = {
+ {
+ .iv = 25,
+ .lvl = 16,
+ .species = SPECIES_TAILLOW,
+ .heldItem = ITEM_ORAN_BERRY
+ },
+ {
+ .iv = 25,
+ .lvl = 16,
+ .species = SPECIES_ZIGZAGOON,
+ .heldItem = ITEM_ORAN_BERRY
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Miguel1[] = {
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_SKITTY,
+ .heldItem = ITEM_ORAN_BERRY
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Colton[] = {
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_SKITTY,
+ .heldItem = ITEM_ORAN_BERRY,
+ .moves = MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL
+ },
+ {
+ .iv = 0,
+ .lvl = 36,
+ .species = SPECIES_SKITTY,
+ .heldItem = ITEM_ORAN_BERRY,
+ .moves = MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL
+ },
+ {
+ .iv = 0,
+ .lvl = 40,
+ .species = SPECIES_SKITTY,
+ .heldItem = ITEM_ORAN_BERRY,
+ .moves = MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL
+ },
+ {
+ .iv = 0,
+ .lvl = 12,
+ .species = SPECIES_SKITTY,
+ .heldItem = ITEM_ORAN_BERRY,
+ .moves = MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL
+ },
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_SKITTY,
+ .heldItem = ITEM_ORAN_BERRY,
+ .moves = MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL
+ },
+ {
+ .iv = 0,
+ .lvl = 42,
+ .species = SPECIES_DELCATTY,
+ .heldItem = ITEM_ORAN_BERRY,
+ .moves = MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Miguel2[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_SKITTY,
+ .heldItem = ITEM_ORAN_BERRY
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Miguel3[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_SKITTY,
+ .heldItem = ITEM_ORAN_BERRY
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Miguel4[] = {
+ {
+ .iv = 0,
+ .lvl = 35,
+ .species = SPECIES_DELCATTY,
+ .heldItem = ITEM_ORAN_BERRY
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Miguel5[] = {
+ {
+ .iv = 0,
+ .lvl = 38,
+ .species = SPECIES_DELCATTY,
+ .heldItem = ITEM_SITRUS_BERRY
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Victoria[] = {
+ {
+ .iv = 50,
+ .lvl = 17,
+ .species = SPECIES_ROSELIA,
+ .heldItem = ITEM_ORAN_BERRY
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Vanessa[] = {
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_PIKACHU,
+ .heldItem = ITEM_ORAN_BERRY
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Bethany[] = {
+ {
+ .iv = 100,
+ .lvl = 35,
+ .species = SPECIES_AZURILL,
+ .heldItem = ITEM_ORAN_BERRY
+ },
+ {
+ .iv = 100,
+ .lvl = 37,
+ .species = SPECIES_MARILL,
+ .heldItem = ITEM_ORAN_BERRY
+ },
+ {
+ .iv = 100,
+ .lvl = 39,
+ .species = SPECIES_AZUMARILL,
+ .heldItem = ITEM_ORAN_BERRY
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Isabel1[] = {
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_PLUSLE,
+ .heldItem = ITEM_ORAN_BERRY
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_MINUN,
+ .heldItem = ITEM_ORAN_BERRY
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Isabel2[] = {
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_PLUSLE,
+ .heldItem = ITEM_ORAN_BERRY
+ },
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_MINUN,
+ .heldItem = ITEM_ORAN_BERRY
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Isabel3[] = {
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_PLUSLE,
+ .heldItem = ITEM_ORAN_BERRY
+ },
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_MINUN,
+ .heldItem = ITEM_ORAN_BERRY
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Isabel4[] = {
+ {
+ .iv = 30,
+ .lvl = 32,
+ .species = SPECIES_PLUSLE,
+ .heldItem = ITEM_ORAN_BERRY
+ },
+ {
+ .iv = 30,
+ .lvl = 32,
+ .species = SPECIES_MINUN,
+ .heldItem = ITEM_ORAN_BERRY
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Isabel5[] = {
+ {
+ .iv = 40,
+ .lvl = 35,
+ .species = SPECIES_PLUSLE,
+ .heldItem = ITEM_SITRUS_BERRY
+ },
+ {
+ .iv = 40,
+ .lvl = 35,
+ .species = SPECIES_MINUN,
+ .heldItem = ITEM_SITRUS_BERRY
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Timothy1[] = {
+ {
+ .iv = 200,
+ .lvl = 27,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Timothy2[] = {
+ {
+ .iv = 210,
+ .lvl = 33,
+ .species = SPECIES_HARIYAMA,
+ .moves = MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, MOVE_DIG
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Timothy3[] = {
+ {
+ .iv = 220,
+ .lvl = 36,
+ .species = SPECIES_HARIYAMA,
+ .moves = MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, MOVE_DIG
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Timothy4[] = {
+ {
+ .iv = 230,
+ .lvl = 39,
+ .species = SPECIES_HARIYAMA,
+ .moves = MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, MOVE_DIG
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Timothy5[] = {
+ {
+ .iv = 240,
+ .lvl = 42,
+ .species = SPECIES_HARIYAMA,
+ .moves = MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, MOVE_DIG
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Vicky[] = {
+ {
+ .iv = 200,
+ .lvl = 18,
+ .species = SPECIES_MEDITITE,
+ .moves = MOVE_HI_JUMP_KICK, MOVE_MEDITATE, MOVE_CONFUSION, MOVE_DETECT
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Shelby1[] = {
+ {
+ .iv = 200,
+ .lvl = 21,
+ .species = SPECIES_MEDITITE,
+ },
+ {
+ .iv = 200,
+ .lvl = 21,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Shelby2[] = {
+ {
+ .iv = 210,
+ .lvl = 30,
+ .species = SPECIES_MEDITITE,
+ },
+ {
+ .iv = 210,
+ .lvl = 30,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Shelby3[] = {
+ {
+ .iv = 220,
+ .lvl = 33,
+ .species = SPECIES_MEDICHAM,
+ },
+ {
+ .iv = 220,
+ .lvl = 33,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Shelby4[] = {
+ {
+ .iv = 230,
+ .lvl = 36,
+ .species = SPECIES_MEDICHAM,
+ },
+ {
+ .iv = 230,
+ .lvl = 36,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Shelby5[] = {
+ {
+ .iv = 240,
+ .lvl = 39,
+ .species = SPECIES_MEDICHAM,
+ },
+ {
+ .iv = 240,
+ .lvl = 39,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Calvin1[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_POOCHYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Billy[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_ZIGZAGOON,
+ },
+ {
+ .iv = 0,
+ .lvl = 7,
+ .species = SPECIES_SEEDOT,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Josh[] = {
+ {
+ .iv = 100,
+ .lvl = 10,
+ .species = SPECIES_GEODUDE,
+ .moves = MOVE_TACKLE, MOVE_NONE, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tommy[] = {
+ {
+ .iv = 110,
+ .lvl = 8,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 120,
+ .lvl = 8,
+ .species = SPECIES_GEODUDE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Joey[] = {
+ {
+ .iv = 0,
+ .lvl = 9,
+ .species = SPECIES_MACHOP,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Ben[] = {
+ {
+ .iv = 150,
+ .lvl = 17,
+ .species = SPECIES_ZIGZAGOON,
+ .moves = MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_GROWL, MOVE_THUNDERBOLT
+ },
+ {
+ .iv = 150,
+ .lvl = 17,
+ .species = SPECIES_GULPIN,
+ .moves = MOVE_AMNESIA, MOVE_SLUDGE, MOVE_YAWN, MOVE_POUND
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Quincy[] = {
+ {
+ .iv = 100,
+ .lvl = 43,
+ .species = SPECIES_SLAKING,
+ .moves = MOVE_ATTRACT, MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_FLAMETHROWER
+ },
+ {
+ .iv = 100,
+ .lvl = 43,
+ .species = SPECIES_DUSCLOPS,
+ .moves = MOVE_SKILL_SWAP, MOVE_PROTECT, MOVE_WILL_O_WISP, MOVE_TOXIC
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Katelynn[] = {
+ {
+ .iv = 100,
+ .lvl = 43,
+ .species = SPECIES_GARDEVOIR,
+ .moves = MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_CALM_MIND
+ },
+ {
+ .iv = 100,
+ .lvl = 43,
+ .species = SPECIES_SLAKING,
+ .moves = MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_BRICK_BREAK
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jaylen[] = {
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_TRAPINCH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dillon[] = {
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_ARON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Calvin2[] = {
+ {
+ .iv = 10,
+ .lvl = 27,
+ .species = SPECIES_MIGHTYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Calvin3[] = {
+ {
+ .iv = 20,
+ .lvl = 28,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 20,
+ .lvl = 30,
+ .species = SPECIES_MIGHTYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Calvin4[] = {
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 30,
+ .lvl = 29,
+ .species = SPECIES_LINOONE,
+ },
+ {
+ .iv = 30,
+ .lvl = 33,
+ .species = SPECIES_MIGHTYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Calvin5[] = {
+ {
+ .iv = 40,
+ .lvl = 34,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 40,
+ .lvl = 32,
+ .species = SPECIES_LINOONE,
+ },
+ {
+ .iv = 40,
+ .lvl = 36,
+ .species = SPECIES_MIGHTYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Eddie[] = {
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_ZIGZAGOON,
+ },
+ {
+ .iv = 0,
+ .lvl = 16,
+ .species = SPECIES_ZIGZAGOON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Allen[] = {
+ {
+ .iv = 0,
+ .lvl = 4,
+ .species = SPECIES_ZIGZAGOON,
+ },
+ {
+ .iv = 0,
+ .lvl = 3,
+ .species = SPECIES_TAILLOW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Timmy[] = {
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_ARON,
+ },
+ {
+ .iv = 0,
+ .lvl = 13,
+ .species = SPECIES_ELECTRIKE,
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Wallace[] = {
+ {
+ .iv = 255,
+ .lvl = 57,
+ .species = SPECIES_WAILORD,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_RAIN_DANCE, MOVE_WATER_SPOUT, MOVE_DOUBLE_EDGE, MOVE_BLIZZARD
+ },
+ {
+ .iv = 255,
+ .lvl = 55,
+ .species = SPECIES_TENTACRUEL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_TOXIC, MOVE_HYDRO_PUMP, MOVE_SLUDGE_BOMB, MOVE_ICE_BEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 56,
+ .species = SPECIES_LUDICOLO,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_GIGA_DRAIN, MOVE_SURF, MOVE_LEECH_SEED, MOVE_DOUBLE_TEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 56,
+ .species = SPECIES_WHISCASH,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_EARTHQUAKE, MOVE_SURF, MOVE_AMNESIA, MOVE_HYPER_BEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 56,
+ .species = SPECIES_GYARADOS,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE, MOVE_HYPER_BEAM, MOVE_SURF
+ },
+ {
+ .iv = 255,
+ .lvl = 58,
+ .species = SPECIES_MILOTIC,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_RECOVER, MOVE_SURF, MOVE_ICE_BEAM, MOVE_TOXIC
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Andrew[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_MAGIKARP,
+ },
+ {
+ .iv = 0,
+ .lvl = 10,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_MAGIKARP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ivan[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_MAGIKARP,
+ },
+ {
+ .iv = 0,
+ .lvl = 6,
+ .species = SPECIES_MAGIKARP,
+ },
+ {
+ .iv = 0,
+ .lvl = 7,
+ .species = SPECIES_MAGIKARP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Claude[] = {
+ {
+ .iv = 0,
+ .lvl = 16,
+ .species = SPECIES_MAGIKARP,
+ },
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_GOLDEEN,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_BARBOACH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Elliot1[] = {
+ {
+ .iv = 0,
+ .lvl = 10,
+ .species = SPECIES_MAGIKARP,
+ },
+ {
+ .iv = 0,
+ .lvl = 7,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 10,
+ .species = SPECIES_MAGIKARP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ned[] = {
+ {
+ .iv = 10,
+ .lvl = 11,
+ .species = SPECIES_TENTACOOL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dale[] = {
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_WAILMER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nolan[] = {
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_BARBOACH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Barny[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Wade[] = {
+ {
+ .iv = 0,
+ .lvl = 16,
+ .species = SPECIES_TENTACOOL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Carter[] = {
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_TENTACRUEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Elliot2[] = {
+ {
+ .iv = 10,
+ .lvl = 24,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 10,
+ .lvl = 27,
+ .species = SPECIES_GYARADOS,
+ },
+ {
+ .iv = 10,
+ .lvl = 27,
+ .species = SPECIES_GYARADOS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Elliot3[] = {
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_GYARADOS,
+ },
+ {
+ .iv = 20,
+ .lvl = 26,
+ .species = SPECIES_CARVANHA,
+ },
+ {
+ .iv = 20,
+ .lvl = 26,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_GYARADOS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Elliot4[] = {
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_GYARADOS,
+ },
+ {
+ .iv = 30,
+ .lvl = 30,
+ .species = SPECIES_CARVANHA,
+ },
+ {
+ .iv = 30,
+ .lvl = 30,
+ .species = SPECIES_TENTACRUEL,
+ },
+ {
+ .iv = 31,
+ .lvl = 31,
+ .species = SPECIES_GYARADOS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Elliot5[] = {
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_GYARADOS,
+ },
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_SHARPEDO,
+ },
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_GYARADOS,
+ },
+ {
+ .iv = 40,
+ .lvl = 35,
+ .species = SPECIES_TENTACRUEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ronald[] = {
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_MAGIKARP,
+ },
+ {
+ .iv = 0,
+ .lvl = 21,
+ .species = SPECIES_GYARADOS,
+ },
+ {
+ .iv = 0,
+ .lvl = 23,
+ .species = SPECIES_GYARADOS,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_GYARADOS,
+ },
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_GYARADOS,
+ },
+ {
+ .iv = 0,
+ .lvl = 35,
+ .species = SPECIES_GYARADOS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jacob[] = {
+ {
+ .iv = 20,
+ .lvl = 6,
+ .species = SPECIES_VOLTORB,
+ },
+ {
+ .iv = 20,
+ .lvl = 6,
+ .species = SPECIES_VOLTORB,
+ },
+ {
+ .iv = 200,
+ .lvl = 14,
+ .species = SPECIES_MAGNEMITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Anthony[] = {
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_MAGNEMITE,
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_MAGNEMITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Benjamin1[] = {
+ {
+ .iv = 0,
+ .lvl = 16,
+ .species = SPECIES_MAGNEMITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Benjamin2[] = {
+ {
+ .iv = 10,
+ .lvl = 30,
+ .species = SPECIES_MAGNEMITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Benjamin3[] = {
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_MAGNEMITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Benjamin4[] = {
+ {
+ .iv = 30,
+ .lvl = 36,
+ .species = SPECIES_MAGNETON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Benjamin5[] = {
+ {
+ .iv = 40,
+ .lvl = 39,
+ .species = SPECIES_MAGNETON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Abigail1[] = {
+ {
+ .iv = 0,
+ .lvl = 16,
+ .species = SPECIES_MAGNEMITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jasmine[] = {
+ {
+ .iv = 80,
+ .lvl = 14,
+ .species = SPECIES_MAGNEMITE,
+ },
+ {
+ .iv = 80,
+ .lvl = 14,
+ .species = SPECIES_MAGNEMITE,
+ },
+ {
+ .iv = 0,
+ .lvl = 6,
+ .species = SPECIES_VOLTORB,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Abigail2[] = {
+ {
+ .iv = 10,
+ .lvl = 28,
+ .species = SPECIES_MAGNEMITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Abigail3[] = {
+ {
+ .iv = 20,
+ .lvl = 31,
+ .species = SPECIES_MAGNEMITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Abigail4[] = {
+ {
+ .iv = 30,
+ .lvl = 34,
+ .species = SPECIES_MAGNETON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Abigail5[] = {
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_MAGNETON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dylan1[] = {
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_DODUO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dylan2[] = {
+ {
+ .iv = 10,
+ .lvl = 28,
+ .species = SPECIES_DODUO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dylan3[] = {
+ {
+ .iv = 20,
+ .lvl = 31,
+ .species = SPECIES_DODUO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dylan4[] = {
+ {
+ .iv = 30,
+ .lvl = 34,
+ .species = SPECIES_DODRIO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dylan5[] = {
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_DODRIO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Maria1[] = {
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_DODUO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Maria2[] = {
+ {
+ .iv = 10,
+ .lvl = 28,
+ .species = SPECIES_DODUO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Maria3[] = {
+ {
+ .iv = 20,
+ .lvl = 31,
+ .species = SPECIES_DODUO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Maria4[] = {
+ {
+ .iv = 30,
+ .lvl = 34,
+ .species = SPECIES_DODRIO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Maria5[] = {
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_DODRIO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Camden[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_STARYU,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Demetrius[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_ZIGZAGOON,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_ELECTRIKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Isaiah1[] = {
+ {
+ .iv = 0,
+ .lvl = 35,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Pablo1[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_STARYU,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Chase[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 80,
+ .lvl = 34,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Isaiah2[] = {
+ {
+ .iv = 10,
+ .lvl = 39,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Isaiah3[] = {
+ {
+ .iv = 20,
+ .lvl = 42,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Isaiah4[] = {
+ {
+ .iv = 30,
+ .lvl = 45,
+ .species = SPECIES_STARMIE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Isaiah5[] = {
+ {
+ .iv = 40,
+ .lvl = 48,
+ .species = SPECIES_STARMIE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Isobel[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Donny[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 160,
+ .lvl = 34,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Talia[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Katelyn1[] = {
+ {
+ .iv = 0,
+ .lvl = 35,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Allison[] = {
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 240,
+ .lvl = 33,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Katelyn2[] = {
+ {
+ .iv = 10,
+ .lvl = 39,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Katelyn3[] = {
+ {
+ .iv = 20,
+ .lvl = 42,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Katelyn4[] = {
+ {
+ .iv = 30,
+ .lvl = 45,
+ .species = SPECIES_STARMIE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Katelyn5[] = {
+ {
+ .iv = 40,
+ .lvl = 48,
+ .species = SPECIES_STARMIE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nicolas1[] = {
+ {
+ .iv = 100,
+ .lvl = 37,
+ .species = SPECIES_ALTARIA,
+ },
+ {
+ .iv = 100,
+ .lvl = 37,
+ .species = SPECIES_ALTARIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nicolas2[] = {
+ {
+ .iv = 110,
+ .lvl = 41,
+ .species = SPECIES_ALTARIA,
+ },
+ {
+ .iv = 110,
+ .lvl = 41,
+ .species = SPECIES_ALTARIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nicolas3[] = {
+ {
+ .iv = 120,
+ .lvl = 44,
+ .species = SPECIES_ALTARIA,
+ },
+ {
+ .iv = 120,
+ .lvl = 44,
+ .species = SPECIES_ALTARIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nicolas4[] = {
+ {
+ .iv = 130,
+ .lvl = 46,
+ .species = SPECIES_BAGON,
+ },
+ {
+ .iv = 130,
+ .lvl = 46,
+ .species = SPECIES_ALTARIA,
+ },
+ {
+ .iv = 130,
+ .lvl = 46,
+ .species = SPECIES_ALTARIA,
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Nicolas5[] = {
+ {
+ .iv = 140,
+ .lvl = 49,
+ .species = SPECIES_ALTARIA,
+ .heldItem = ITEM_NONE
+ },
+ {
+ .iv = 140,
+ .lvl = 49,
+ .species = SPECIES_ALTARIA,
+ .heldItem = ITEM_NONE
+ },
+ {
+ .iv = 140,
+ .lvl = 49,
+ .species = SPECIES_SHELGON,
+ .heldItem = ITEM_DRAGON_FANG
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Aaron[] = {
+ {
+ .iv = 255,
+ .lvl = 34,
+ .species = SPECIES_BAGON,
+ .moves = MOVE_DRAGON_BREATH, MOVE_HEADBUTT, MOVE_FOCUS_ENERGY, MOVE_EMBER
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Perry[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_WINGULL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Hugh[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_TROPIUS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Phil[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_SWELLOW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jared[] = {
+ {
+ .iv = 100,
+ .lvl = 27,
+ .species = SPECIES_DODUO,
+ },
+ {
+ .iv = 100,
+ .lvl = 27,
+ .species = SPECIES_SKARMORY,
+ },
+ {
+ .iv = 100,
+ .lvl = 27,
+ .species = SPECIES_TROPIUS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Humberto[] = {
+ {
+ .iv = 250,
+ .lvl = 30,
+ .species = SPECIES_SKARMORY,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Presley[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_TROPIUS,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_XATU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Edwardo[] = {
+ {
+ .iv = 150,
+ .lvl = 29,
+ .species = SPECIES_DODUO,
+ },
+ {
+ .iv = 150,
+ .lvl = 29,
+ .species = SPECIES_PELIPPER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Colin[] = {
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_NATU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Robert1[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_SWABLU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Benny[] = {
+ {
+ .iv = 0,
+ .lvl = 36,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 0,
+ .lvl = 36,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 0,
+ .lvl = 36,
+ .species = SPECIES_XATU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Chester[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_TAILLOW,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_SWELLOW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Robert2[] = {
+ {
+ .iv = 10,
+ .lvl = 32,
+ .species = SPECIES_NATU,
+ },
+ {
+ .iv = 10,
+ .lvl = 32,
+ .species = SPECIES_SWABLU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Robert3[] = {
+ {
+ .iv = 20,
+ .lvl = 35,
+ .species = SPECIES_NATU,
+ },
+ {
+ .iv = 20,
+ .lvl = 35,
+ .species = SPECIES_ALTARIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Robert4[] = {
+ {
+ .iv = 30,
+ .lvl = 38,
+ .species = SPECIES_NATU,
+ },
+ {
+ .iv = 30,
+ .lvl = 38,
+ .species = SPECIES_ALTARIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Robert5[] = {
+ {
+ .iv = 40,
+ .lvl = 41,
+ .species = SPECIES_ALTARIA,
+ },
+ {
+ .iv = 40,
+ .lvl = 41,
+ .species = SPECIES_XATU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Alex[] = {
+ {
+ .iv = 150,
+ .lvl = 33,
+ .species = SPECIES_NATU,
+ },
+ {
+ .iv = 150,
+ .lvl = 33,
+ .species = SPECIES_SWELLOW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Beck[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_TROPIUS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Yasu[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_NINJASK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Takashi[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_NINJASK,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_KOFFING,
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Dianne[] = {
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_CLAYDOL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE
+ },
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_LANTURN,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jani[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Lao1[] = {
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SMOG, MOVE_SELF_DESTRUCT
+ },
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SMOG, MOVE_SELF_DESTRUCT
+ },
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lung[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_KOFFING,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_NINJASK,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Lao2[] = {
+ {
+ .iv = 0,
+ .lvl = 24,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ },
+ {
+ .iv = 0,
+ .lvl = 24,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE
+ },
+ {
+ .iv = 0,
+ .lvl = 24,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Lao3[] = {
+ {
+ .iv = 20,
+ .lvl = 27,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ },
+ {
+ .iv = 20,
+ .lvl = 27,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ },
+ {
+ .iv = 20,
+ .lvl = 27,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE
+ },
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Lao4[] = {
+ {
+ .iv = 30,
+ .lvl = 30,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE
+ },
+ {
+ .iv = 30,
+ .lvl = 30,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE
+ },
+ {
+ .iv = 30,
+ .lvl = 30,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE
+ },
+ {
+ .iv = 30,
+ .lvl = 32,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Lao5[] = {
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_KOFFING,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE
+ },
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_KOFFING,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ },
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_KOFFING,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ },
+ {
+ .iv = 40,
+ .lvl = 35,
+ .species = SPECIES_WEEZING,
+ .heldItem = ITEM_SMOKE_BALL,
+ .moves = MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jocelyn[] = {
+ {
+ .iv = 127,
+ .lvl = 13,
+ .species = SPECIES_MEDITITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Laura[] = {
+ {
+ .iv = 150,
+ .lvl = 13,
+ .species = SPECIES_MEDITITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cyndy1[] = {
+ {
+ .iv = 100,
+ .lvl = 18,
+ .species = SPECIES_MEDITITE,
+ },
+ {
+ .iv = 100,
+ .lvl = 18,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cora[] = {
+ {
+ .iv = 100,
+ .lvl = 27,
+ .species = SPECIES_MEDITITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Paula[] = {
+ {
+ .iv = 100,
+ .lvl = 27,
+ .species = SPECIES_BRELOOM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cyndy2[] = {
+ {
+ .iv = 110,
+ .lvl = 26,
+ .species = SPECIES_MEDITITE,
+ },
+ {
+ .iv = 110,
+ .lvl = 26,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cyndy3[] = {
+ {
+ .iv = 120,
+ .lvl = 29,
+ .species = SPECIES_MEDITITE,
+ },
+ {
+ .iv = 120,
+ .lvl = 29,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cyndy4[] = {
+ {
+ .iv = 130,
+ .lvl = 32,
+ .species = SPECIES_MEDICHAM,
+ },
+ {
+ .iv = 130,
+ .lvl = 32,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cyndy5[] = {
+ {
+ .iv = 140,
+ .lvl = 35,
+ .species = SPECIES_MEDICHAM,
+ },
+ {
+ .iv = 140,
+ .lvl = 35,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Madeline1[] = {
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_NUMEL,
+ .moves = MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, MOVE_SUNNY_DAY
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Clarissa[] = {
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_ROSELIA,
+ },
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_WAILMER,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Angelica[] = {
+ {
+ .iv = 50,
+ .lvl = 30,
+ .species = SPECIES_CASTFORM,
+ .moves = MOVE_RAIN_DANCE, MOVE_WEATHER_BALL, MOVE_THUNDER, MOVE_WATER_PULSE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Madeline2[] = {
+ {
+ .iv = 10,
+ .lvl = 29,
+ .species = SPECIES_NUMEL,
+ .moves = MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, MOVE_SUNNY_DAY
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Madeline3[] = {
+ {
+ .iv = 20,
+ .lvl = 32,
+ .species = SPECIES_NUMEL,
+ .moves = MOVE_EMBER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, MOVE_SUNNY_DAY
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Madeline4[] = {
+ {
+ .iv = 30,
+ .lvl = 34,
+ .species = SPECIES_ROSELIA,
+ .moves = MOVE_LEECH_SEED, MOVE_MEGA_DRAIN, MOVE_GRASS_WHISTLE, MOVE_SUNNY_DAY
+ },
+ {
+ .iv = 30,
+ .lvl = 34,
+ .species = SPECIES_NUMEL,
+ .moves = MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, MOVE_SUNNY_DAY
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Madeline5[] = {
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_ROSELIA,
+ .moves = MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY
+ },
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_CAMERUPT,
+ .moves = MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_EARTHQUAKE, MOVE_SUNNY_DAY
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Beverly[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_WAILMER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Imani[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Kyla[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_WAILMER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Denise[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_GOLDEEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Beth[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_GOLDEEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tara[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_HORSEA,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Missy[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_GOLDEEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Alice[] = {
+ {
+ .iv = 0,
+ .lvl = 24,
+ .species = SPECIES_GOLDEEN,
+ },
+ {
+ .iv = 0,
+ .lvl = 24,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 24,
+ .species = SPECIES_GOLDEEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jenny1[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_WAILMER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grace[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tanya[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_LUVDISC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Sharon[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_SEAKING,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nikki[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_MARILL,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_SPHEAL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brenda[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_GOLDEEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Katie[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_GOLDEEN,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_SPHEAL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Susie[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_LUVDISC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Kara[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_SEAKING,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dana[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_AZUMARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Sienna[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_LUVDISC,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_LUVDISC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Debra[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_SEAKING,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Linda[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_HORSEA,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_SEADRA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Kaylee[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_LANTURN,
+ },
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_PELIPPER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Laurel[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_LUVDISC,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_LUVDISC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Carlee[] = {
+ {
+ .iv = 0,
+ .lvl = 35,
+ .species = SPECIES_SEAKING,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jenny2[] = {
+ {
+ .iv = 0,
+ .lvl = 38,
+ .species = SPECIES_WAILMER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jenny3[] = {
+ {
+ .iv = 0,
+ .lvl = 41,
+ .species = SPECIES_WAILMER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jenny4[] = {
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_STARYU,
+ },
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_WAILMER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jenny5[] = {
+ {
+ .iv = 0,
+ .lvl = 45,
+ .species = SPECIES_LUVDISC,
+ },
+ {
+ .iv = 0,
+ .lvl = 45,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 0,
+ .lvl = 45,
+ .species = SPECIES_STARMIE,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Heidi[] = {
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_SANDSHREW,
+ .moves = MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH
+ },
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_BALTOY,
+ .moves = MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, MOVE_ROCK_TOMB
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Becky[] = {
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_SANDSHREW,
+ .moves = MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH, MOVE_DIG
+ },
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_MARILL,
+ .moves = MOVE_ROLLOUT, MOVE_BUBBLE_BEAM, MOVE_TAIL_WHIP, MOVE_DEFENSE_CURL
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Carol[] = {
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_TAILLOW,
+ },
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_LOMBRE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nancy[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_MARILL,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_LOMBRE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Martha[] = {
+ {
+ .iv = 0,
+ .lvl = 23,
+ .species = SPECIES_SKITTY,
+ },
+ {
+ .iv = 0,
+ .lvl = 23,
+ .species = SPECIES_SWABLU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Diana1[] = {
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_ODDISH,
+ },
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_SWABLU,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Cedric[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_WOBBUFFET,
+ .moves = MOVE_DESTINY_BOND, MOVE_SAFEGUARD, MOVE_COUNTER, MOVE_MIRROR_COAT
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Irene[] = {
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Diana2[] = {
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_GLOOM,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_SWABLU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Diana3[] = {
+ {
+ .iv = 20,
+ .lvl = 28,
+ .species = SPECIES_BRELOOM,
+ },
+ {
+ .iv = 20,
+ .lvl = 28,
+ .species = SPECIES_GLOOM,
+ },
+ {
+ .iv = 20,
+ .lvl = 28,
+ .species = SPECIES_SWABLU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Diana4[] = {
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_BRELOOM,
+ },
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_GLOOM,
+ },
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_SWABLU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Diana5[] = {
+ {
+ .iv = 40,
+ .lvl = 40,
+ .species = SPECIES_BRELOOM,
+ },
+ {
+ .iv = 40,
+ .lvl = 40,
+ .species = SPECIES_VILEPLUME,
+ },
+ {
+ .iv = 40,
+ .lvl = 40,
+ .species = SPECIES_ALTARIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_AmyAndLiv1[] = {
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_PLUSLE,
+ },
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_MINUN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_AmyAndLiv2[] = {
+ {
+ .iv = 10,
+ .lvl = 27,
+ .species = SPECIES_PLUSLE,
+ },
+ {
+ .iv = 10,
+ .lvl = 27,
+ .species = SPECIES_MINUN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_GinaAndMia1[] = {
+ {
+ .iv = 0,
+ .lvl = 6,
+ .species = SPECIES_SEEDOT,
+ },
+ {
+ .iv = 0,
+ .lvl = 6,
+ .species = SPECIES_LOTAD,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_MiuAndYuki[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_BEAUTIFLY,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_DUSTOX,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_AmyAndLiv3[] = {
+ {
+ .iv = 0,
+ .lvl = 9,
+ .species = SPECIES_PLUSLE,
+ },
+ {
+ .iv = 0,
+ .lvl = 9,
+ .species = SPECIES_MINUN,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_GinaAndMia2[] = {
+ {
+ .iv = 0,
+ .lvl = 10,
+ .species = SPECIES_DUSKULL,
+ .moves = MOVE_NIGHT_SHADE, MOVE_DISABLE, MOVE_NONE, MOVE_NONE
+ },
+ {
+ .iv = 0,
+ .lvl = 10,
+ .species = SPECIES_SHROOMISH,
+ .moves = MOVE_ABSORB, MOVE_LEECH_SEED, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_AmyAndLiv4[] = {
+ {
+ .iv = 20,
+ .lvl = 30,
+ .species = SPECIES_PLUSLE,
+ },
+ {
+ .iv = 20,
+ .lvl = 30,
+ .species = SPECIES_MINUN,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_AmyAndLiv5[] = {
+ {
+ .iv = 30,
+ .lvl = 33,
+ .species = SPECIES_PLUSLE,
+ .moves = MOVE_SPARK, MOVE_CHARGE, MOVE_FAKE_TEARS, MOVE_HELPING_HAND
+ },
+ {
+ .iv = 30,
+ .lvl = 33,
+ .species = SPECIES_MINUN,
+ .moves = MOVE_SPARK, MOVE_CHARGE, MOVE_CHARM, MOVE_HELPING_HAND
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_AmyAndLiv6[] = {
+ {
+ .iv = 40,
+ .lvl = 36,
+ .species = SPECIES_PLUSLE,
+ .moves = MOVE_THUNDER, MOVE_CHARGE, MOVE_FAKE_TEARS, MOVE_HELPING_HAND
+ },
+ {
+ .iv = 40,
+ .lvl = 36,
+ .species = SPECIES_MINUN,
+ .moves = MOVE_THUNDER, MOVE_CHARGE, MOVE_CHARM, MOVE_HELPING_HAND
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Huey[] = {
+ {
+ .iv = 10,
+ .lvl = 12,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 10,
+ .lvl = 12,
+ .species = SPECIES_MACHOP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Edmond[] = {
+ {
+ .iv = 0,
+ .lvl = 13,
+ .species = SPECIES_WINGULL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ernest1[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dwayne[] = {
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_MACHOP,
+ },
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_TENTACOOL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Phillip[] = {
+ {
+ .iv = 0,
+ .lvl = 44,
+ .species = SPECIES_TENTACRUEL,
+ },
+ {
+ .iv = 0,
+ .lvl = 44,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Leonard[] = {
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_MACHOP,
+ },
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Duncan[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_SPHEAL,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ernest2[] = {
+ {
+ .iv = 10,
+ .lvl = 36,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 10,
+ .lvl = 36,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 10,
+ .lvl = 36,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ernest3[] = {
+ {
+ .iv = 20,
+ .lvl = 39,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 20,
+ .lvl = 39,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 20,
+ .lvl = 39,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ernest4[] = {
+ {
+ .iv = 30,
+ .lvl = 42,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 30,
+ .lvl = 42,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 30,
+ .lvl = 42,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ernest5[] = {
+ {
+ .iv = 40,
+ .lvl = 45,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 40,
+ .lvl = 45,
+ .species = SPECIES_MACHOKE,
+ },
+ {
+ .iv = 40,
+ .lvl = 45,
+ .species = SPECIES_TENTACRUEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Eli[] = {
+ {
+ .iv = 100,
+ .lvl = 23,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Annika[] = {
+ {
+ .iv = 100,
+ .lvl = 39,
+ .species = SPECIES_FEEBAS,
+ .heldItem = ITEM_ORAN_BERRY,
+ .moves = MOVE_FLAIL, MOVE_WATER_PULSE, MOVE_RETURN, MOVE_ATTRACT
+ },
+ {
+ .iv = 100,
+ .lvl = 39,
+ .species = SPECIES_FEEBAS,
+ .heldItem = ITEM_ORAN_BERRY,
+ .moves = MOVE_FLAIL, MOVE_WATER_PULSE, MOVE_RETURN, MOVE_ATTRACT
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jazmyn[] = {
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_ABSOL,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Jonas[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_TOXIC, MOVE_THUNDER, MOVE_SELF_DESTRUCT, MOVE_SLUDGE_BOMB
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Kayley[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_CASTFORM,
+ .moves = MOVE_SUNNY_DAY, MOVE_WEATHER_BALL, MOVE_FLAMETHROWER, MOVE_SOLAR_BEAM
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Auron[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_MANECTRIC,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_MACHAMP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Kelvin[] = {
+ {
+ .iv = 150,
+ .lvl = 33,
+ .species = SPECIES_MACHOKE,
+ },
+ {
+ .iv = 150,
+ .lvl = 33,
+ .species = SPECIES_SPHEAL,
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Marley[] = {
+ {
+ .iv = 255,
+ .lvl = 34,
+ .species = SPECIES_MANECTRIC,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_BITE, MOVE_ROAR, MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Reyna[] = {
+ {
+ .iv = 50,
+ .lvl = 33,
+ .species = SPECIES_MEDITITE,
+ },
+ {
+ .iv = 200,
+ .lvl = 33,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Hudson[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_WAILMER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Conor[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_CHINCHOU,
+ },
+ {
+ .iv = 200,
+ .lvl = 33,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Edwin1[] = {
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_NUZLEAF,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Hector[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_ZANGOOSE,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_SEVIPER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tabitha1[] = {
+ {
+ .iv = 100,
+ .lvl = 36,
+ .species = SPECIES_CAMERUPT,
+ },
+ {
+ .iv = 100,
+ .lvl = 38,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 100,
+ .lvl = 40,
+ .species = SPECIES_GOLBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Edwin2[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_NUZLEAF,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Edwin3[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_NUZLEAF,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Edwin4[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_NUZLEAF,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Edwin5[] = {
+ {
+ .iv = 0,
+ .lvl = 35,
+ .species = SPECIES_LUDICOLO,
+ },
+ {
+ .iv = 0,
+ .lvl = 35,
+ .species = SPECIES_SHIFTRY,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Wally1[] = {
+ {
+ .iv = 150,
+ .lvl = 44,
+ .species = SPECIES_ALTARIA,
+ .moves = MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE
+ },
+ {
+ .iv = 150,
+ .lvl = 43,
+ .species = SPECIES_DELCATTY,
+ .moves = MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK
+ },
+ {
+ .iv = 150,
+ .lvl = 44,
+ .species = SPECIES_ROSELIA,
+ .moves = MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC
+ },
+ {
+ .iv = 150,
+ .lvl = 41,
+ .species = SPECIES_MAGNETON,
+ .moves = MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH
+ },
+ {
+ .iv = 250,
+ .lvl = 45,
+ .species = SPECIES_GARDEVOIR,
+ .moves = MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan1[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_TREECKO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan2[] = {
+ {
+ .iv = 50,
+ .lvl = 18,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 50,
+ .lvl = 18,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 100,
+ .lvl = 20,
+ .species = SPECIES_GROVYLE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan3[] = {
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 150,
+ .lvl = 31,
+ .species = SPECIES_GROVYLE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan4[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_TORCHIC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan5[] = {
+ {
+ .iv = 50,
+ .lvl = 18,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 50,
+ .lvl = 18,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 100,
+ .lvl = 20,
+ .species = SPECIES_COMBUSKEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan6[] = {
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 150,
+ .lvl = 31,
+ .species = SPECIES_COMBUSKEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan7[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_MUDKIP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan8[] = {
+ {
+ .iv = 50,
+ .lvl = 18,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 50,
+ .lvl = 18,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 100,
+ .lvl = 20,
+ .species = SPECIES_MARSHTOMP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan9[] = {
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 150,
+ .lvl = 31,
+ .species = SPECIES_MARSHTOMP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May1[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_TREECKO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May2[] = {
+ {
+ .iv = 50,
+ .lvl = 18,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 50,
+ .lvl = 18,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 100,
+ .lvl = 20,
+ .species = SPECIES_GROVYLE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May3[] = {
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 150,
+ .lvl = 31,
+ .species = SPECIES_GROVYLE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May4[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_TORCHIC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May5[] = {
+ {
+ .iv = 50,
+ .lvl = 18,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 50,
+ .lvl = 18,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 100,
+ .lvl = 20,
+ .species = SPECIES_COMBUSKEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May6[] = {
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 150,
+ .lvl = 31,
+ .species = SPECIES_COMBUSKEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May7[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_MUDKIP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May8[] = {
+ {
+ .iv = 50,
+ .lvl = 18,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 50,
+ .lvl = 18,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 100,
+ .lvl = 20,
+ .species = SPECIES_MARSHTOMP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May9[] = {
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 150,
+ .lvl = 31,
+ .species = SPECIES_MARSHTOMP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Isaac1[] = {
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_WHISMUR,
+ },
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_ZIGZAGOON,
+ },
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_ARON,
+ },
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_POOCHYENA,
+ },
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_TAILLOW,
+ },
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Davis[] = {
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_PINSIR,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Mitchell[] = {
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_LUNATONE,
+ .moves = MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_PSYCHIC
+ },
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_SOLROCK,
+ .moves = MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_SHADOW_BALL
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Isaac2[] = {
+ {
+ .iv = 10,
+ .lvl = 22,
+ .species = SPECIES_LOUDRED,
+ },
+ {
+ .iv = 10,
+ .lvl = 22,
+ .species = SPECIES_LINOONE,
+ },
+ {
+ .iv = 10,
+ .lvl = 22,
+ .species = SPECIES_ARON,
+ },
+ {
+ .iv = 10,
+ .lvl = 22,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 10,
+ .lvl = 22,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 10,
+ .lvl = 22,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Isaac3[] = {
+ {
+ .iv = 20,
+ .lvl = 25,
+ .species = SPECIES_LOUDRED,
+ },
+ {
+ .iv = 20,
+ .lvl = 25,
+ .species = SPECIES_LINOONE,
+ },
+ {
+ .iv = 20,
+ .lvl = 25,
+ .species = SPECIES_ARON,
+ },
+ {
+ .iv = 20,
+ .lvl = 25,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 20,
+ .lvl = 25,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 20,
+ .lvl = 25,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Isaac4[] = {
+ {
+ .iv = 30,
+ .lvl = 28,
+ .species = SPECIES_LOUDRED,
+ },
+ {
+ .iv = 30,
+ .lvl = 28,
+ .species = SPECIES_LINOONE,
+ },
+ {
+ .iv = 30,
+ .lvl = 28,
+ .species = SPECIES_ARON,
+ },
+ {
+ .iv = 30,
+ .lvl = 28,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 30,
+ .lvl = 28,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 30,
+ .lvl = 28,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Isaac5[] = {
+ {
+ .iv = 40,
+ .lvl = 31,
+ .species = SPECIES_LOUDRED,
+ },
+ {
+ .iv = 40,
+ .lvl = 31,
+ .species = SPECIES_LINOONE,
+ },
+ {
+ .iv = 40,
+ .lvl = 31,
+ .species = SPECIES_LAIRON,
+ },
+ {
+ .iv = 40,
+ .lvl = 31,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 40,
+ .lvl = 31,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 40,
+ .lvl = 31,
+ .species = SPECIES_HARIYAMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lydia1[] = {
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_MARILL,
+ },
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_ROSELIA,
+ },
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_SKITTY,
+ },
+ {
+ .iv = 0,
+ .lvl = 11,
+ .species = SPECIES_GOLDEEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Halle[] = {
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_SABLEYE,
+ },
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_ABSOL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Garrison[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_SANDSLASH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lydia2[] = {
+ {
+ .iv = 10,
+ .lvl = 22,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 10,
+ .lvl = 22,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 10,
+ .lvl = 22,
+ .species = SPECIES_MARILL,
+ },
+ {
+ .iv = 10,
+ .lvl = 22,
+ .species = SPECIES_ROSELIA,
+ },
+ {
+ .iv = 10,
+ .lvl = 22,
+ .species = SPECIES_SKITTY,
+ },
+ {
+ .iv = 10,
+ .lvl = 22,
+ .species = SPECIES_GOLDEEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lydia3[] = {
+ {
+ .iv = 20,
+ .lvl = 25,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 20,
+ .lvl = 25,
+ .species = SPECIES_BRELOOM,
+ },
+ {
+ .iv = 20,
+ .lvl = 25,
+ .species = SPECIES_MARILL,
+ },
+ {
+ .iv = 20,
+ .lvl = 25,
+ .species = SPECIES_ROSELIA,
+ },
+ {
+ .iv = 20,
+ .lvl = 25,
+ .species = SPECIES_DELCATTY,
+ },
+ {
+ .iv = 20,
+ .lvl = 25,
+ .species = SPECIES_GOLDEEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lydia4[] = {
+ {
+ .iv = 30,
+ .lvl = 28,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 30,
+ .lvl = 28,
+ .species = SPECIES_BRELOOM,
+ },
+ {
+ .iv = 30,
+ .lvl = 28,
+ .species = SPECIES_MARILL,
+ },
+ {
+ .iv = 30,
+ .lvl = 28,
+ .species = SPECIES_ROSELIA,
+ },
+ {
+ .iv = 30,
+ .lvl = 28,
+ .species = SPECIES_DELCATTY,
+ },
+ {
+ .iv = 30,
+ .lvl = 28,
+ .species = SPECIES_GOLDEEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lydia5[] = {
+ {
+ .iv = 40,
+ .lvl = 31,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 40,
+ .lvl = 31,
+ .species = SPECIES_BRELOOM,
+ },
+ {
+ .iv = 40,
+ .lvl = 31,
+ .species = SPECIES_AZUMARILL,
+ },
+ {
+ .iv = 40,
+ .lvl = 31,
+ .species = SPECIES_ROSELIA,
+ },
+ {
+ .iv = 40,
+ .lvl = 31,
+ .species = SPECIES_DELCATTY,
+ },
+ {
+ .iv = 40,
+ .lvl = 31,
+ .species = SPECIES_SEAKING,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jackson1[] = {
+ {
+ .iv = 50,
+ .lvl = 27,
+ .species = SPECIES_BRELOOM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lorenzo[] = {
+ {
+ .iv = 50,
+ .lvl = 28,
+ .species = SPECIES_SEEDOT,
+ },
+ {
+ .iv = 50,
+ .lvl = 28,
+ .species = SPECIES_NUZLEAF,
+ },
+ {
+ .iv = 50,
+ .lvl = 28,
+ .species = SPECIES_LOMBRE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Sebastian[] = {
+ {
+ .iv = 50,
+ .lvl = 39,
+ .species = SPECIES_CACTURNE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jackson2[] = {
+ {
+ .iv = 60,
+ .lvl = 31,
+ .species = SPECIES_BRELOOM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jackson3[] = {
+ {
+ .iv = 70,
+ .lvl = 34,
+ .species = SPECIES_BRELOOM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jackson4[] = {
+ {
+ .iv = 80,
+ .lvl = 37,
+ .species = SPECIES_BRELOOM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jackson5[] = {
+ {
+ .iv = 90,
+ .lvl = 39,
+ .species = SPECIES_KECLEON,
+ },
+ {
+ .iv = 90,
+ .lvl = 39,
+ .species = SPECIES_BRELOOM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Catherine1[] = {
+ {
+ .iv = 50,
+ .lvl = 26,
+ .species = SPECIES_GLOOM,
+ },
+ {
+ .iv = 50,
+ .lvl = 26,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jenna[] = {
+ {
+ .iv = 50,
+ .lvl = 28,
+ .species = SPECIES_LOTAD,
+ },
+ {
+ .iv = 50,
+ .lvl = 28,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 50,
+ .lvl = 28,
+ .species = SPECIES_NUZLEAF,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Sophia[] = {
+ {
+ .iv = 50,
+ .lvl = 38,
+ .species = SPECIES_SWABLU,
+ },
+ {
+ .iv = 50,
+ .lvl = 38,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Catherine2[] = {
+ {
+ .iv = 60,
+ .lvl = 30,
+ .species = SPECIES_GLOOM,
+ },
+ {
+ .iv = 60,
+ .lvl = 30,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Catherine3[] = {
+ {
+ .iv = 70,
+ .lvl = 33,
+ .species = SPECIES_GLOOM,
+ },
+ {
+ .iv = 70,
+ .lvl = 33,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Catherine4[] = {
+ {
+ .iv = 80,
+ .lvl = 36,
+ .species = SPECIES_GLOOM,
+ },
+ {
+ .iv = 80,
+ .lvl = 36,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Catherine5[] = {
+ {
+ .iv = 90,
+ .lvl = 39,
+ .species = SPECIES_BELLOSSOM,
+ },
+ {
+ .iv = 90,
+ .lvl = 39,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Julio[] = {
+ {
+ .iv = 0,
+ .lvl = 21,
+ .species = SPECIES_MAGNEMITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt27[] = {
+ {
+ .iv = 50,
+ .lvl = 35,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 50,
+ .lvl = 35,
+ .species = SPECIES_GOLBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt28[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt29[] = {
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt30[] = {
+ {
+ .iv = 50,
+ .lvl = 22,
+ .species = SPECIES_POOCHYENA,
+ },
+ {
+ .iv = 50,
+ .lvl = 22,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Marc[] = {
+ {
+ .iv = 120,
+ .lvl = 8,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 130,
+ .lvl = 8,
+ .species = SPECIES_GEODUDE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brenden[] = {
+ {
+ .iv = 100,
+ .lvl = 13,
+ .species = SPECIES_MACHOP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lilith[] = {
+ {
+ .iv = 150,
+ .lvl = 13,
+ .species = SPECIES_MEDITITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cristian[] = {
+ {
+ .iv = 200,
+ .lvl = 13,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Sylvia[] = {
+ {
+ .iv = 100,
+ .lvl = 36,
+ .species = SPECIES_MEDITITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Leonardo[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Athena[] = {
+ {
+ .iv = 100,
+ .lvl = 32,
+ .species = SPECIES_MANECTRIC,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, MOVE_NONE
+ },
+ {
+ .iv = 100,
+ .lvl = 32,
+ .species = SPECIES_LINOONE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SURF, MOVE_THIEF, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Harrison[] = {
+ {
+ .iv = 0,
+ .lvl = 35,
+ .species = SPECIES_TENTACRUEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt31[] = {
+ {
+ .iv = 0,
+ .lvl = 20,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Clarence[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_SHARPEDO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Terry[] = {
+ {
+ .iv = 0,
+ .lvl = 37,
+ .species = SPECIES_GIRAFARIG,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nate[] = {
+ {
+ .iv = 100,
+ .lvl = 36,
+ .species = SPECIES_SPOINK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Kathleen[] = {
+ {
+ .iv = 100,
+ .lvl = 36,
+ .species = SPECIES_KADABRA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Clifford[] = {
+ {
+ .iv = 0,
+ .lvl = 36,
+ .species = SPECIES_GIRAFARIG,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Nicholas[] = {
+ {
+ .iv = 0,
+ .lvl = 36,
+ .species = SPECIES_WOBBUFFET,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt32[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_ZUBAT,
+ },
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_POOCHYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt33[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_BALTOY,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt34[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt35[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_MIGHTYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt36[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_BALTOY,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Macey[] = {
+ {
+ .iv = 0,
+ .lvl = 36,
+ .species = SPECIES_NATU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan10[] = {
+ {
+ .iv = 25,
+ .lvl = 13,
+ .species = SPECIES_LOTAD,
+ },
+ {
+ .iv = 50,
+ .lvl = 15,
+ .species = SPECIES_TORCHIC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan11[] = {
+ {
+ .iv = 25,
+ .lvl = 13,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 50,
+ .lvl = 15,
+ .species = SPECIES_TREECKO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Paxton[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_BRELOOM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Isabella[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt37[] = {
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_ZUBAT,
+ },
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_POOCHYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tabitha2[] = {
+ {
+ .iv = 50,
+ .lvl = 18,
+ .species = SPECIES_NUMEL,
+ },
+ {
+ .iv = 50,
+ .lvl = 20,
+ .species = SPECIES_POOCHYENA,
+ },
+ {
+ .iv = 50,
+ .lvl = 22,
+ .species = SPECIES_NUMEL,
+ },
+ {
+ .iv = 50,
+ .lvl = 22,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jonathan[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_KECLEON,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_LOUDRED,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan12[] = {
+ {
+ .iv = 25,
+ .lvl = 13,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 50,
+ .lvl = 15,
+ .species = SPECIES_MUDKIP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May10[] = {
+ {
+ .iv = 25,
+ .lvl = 13,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 50,
+ .lvl = 15,
+ .species = SPECIES_TREECKO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Maxie1[] = {
+ {
+ .iv = 150,
+ .lvl = 37,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 150,
+ .lvl = 38,
+ .species = SPECIES_CROBAT,
+ },
+ {
+ .iv = 150,
+ .lvl = 39,
+ .species = SPECIES_CAMERUPT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Maxie2[] = {
+ {
+ .iv = 150,
+ .lvl = 24,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 150,
+ .lvl = 24,
+ .species = SPECIES_ZUBAT,
+ },
+ {
+ .iv = 150,
+ .lvl = 25,
+ .species = SPECIES_CAMERUPT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tiana[] = {
+ {
+ .iv = 0,
+ .lvl = 4,
+ .species = SPECIES_ZIGZAGOON,
+ },
+ {
+ .iv = 0,
+ .lvl = 4,
+ .species = SPECIES_SHROOMISH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Haley1[] = {
+ {
+ .iv = 0,
+ .lvl = 6,
+ .species = SPECIES_LOTAD,
+ },
+ {
+ .iv = 0,
+ .lvl = 6,
+ .species = SPECIES_SHROOMISH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Janice[] = {
+ {
+ .iv = 0,
+ .lvl = 9,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Vivi[] = {
+ {
+ .iv = 100,
+ .lvl = 15,
+ .species = SPECIES_MARILL,
+ },
+ {
+ .iv = 100,
+ .lvl = 15,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 100,
+ .lvl = 15,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Haley2[] = {
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_SHROOMISH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Haley3[] = {
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_BRELOOM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Haley4[] = {
+ {
+ .iv = 30,
+ .lvl = 32,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 30,
+ .lvl = 32,
+ .species = SPECIES_BRELOOM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Haley5[] = {
+ {
+ .iv = 40,
+ .lvl = 34,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 40,
+ .lvl = 34,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 40,
+ .lvl = 34,
+ .species = SPECIES_BRELOOM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Sally[] = {
+ {
+ .iv = 0,
+ .lvl = 16,
+ .species = SPECIES_ODDISH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Robin[] = {
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_SKITTY,
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Andrea[] = {
+ {
+ .iv = 100,
+ .lvl = 40,
+ .species = SPECIES_LUVDISC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Crissy[] = {
+ {
+ .iv = 100,
+ .lvl = 39,
+ .species = SPECIES_GOLDEEN,
+ },
+ {
+ .iv = 100,
+ .lvl = 39,
+ .species = SPECIES_WAILMER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Rick[] = {
+ {
+ .iv = 0,
+ .lvl = 4,
+ .species = SPECIES_WURMPLE,
+ },
+ {
+ .iv = 0,
+ .lvl = 4,
+ .species = SPECIES_WURMPLE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lyle[] = {
+ {
+ .iv = 0,
+ .lvl = 3,
+ .species = SPECIES_WURMPLE,
+ },
+ {
+ .iv = 0,
+ .lvl = 3,
+ .species = SPECIES_WURMPLE,
+ },
+ {
+ .iv = 0,
+ .lvl = 3,
+ .species = SPECIES_WURMPLE,
+ },
+ {
+ .iv = 0,
+ .lvl = 3,
+ .species = SPECIES_WURMPLE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jose[] = {
+ {
+ .iv = 50,
+ .lvl = 8,
+ .species = SPECIES_WURMPLE,
+ },
+ {
+ .iv = 50,
+ .lvl = 8,
+ .species = SPECIES_NINCADA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Doug[] = {
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_NINCADA,
+ },
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_NINJASK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Greg[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_VOLBEAT,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_ILLUMISE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Kent[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_NINJASK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_James1[] = {
+ {
+ .iv = 0,
+ .lvl = 6,
+ .species = SPECIES_NINCADA,
+ },
+ {
+ .iv = 0,
+ .lvl = 6,
+ .species = SPECIES_NINCADA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_James2[] = {
+ {
+ .iv = 10,
+ .lvl = 27,
+ .species = SPECIES_NINJASK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_James3[] = {
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_DUSTOX,
+ },
+ {
+ .iv = 20,
+ .lvl = 29,
+ .species = SPECIES_NINJASK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_James4[] = {
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_SURSKIT,
+ },
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_DUSTOX,
+ },
+ {
+ .iv = 30,
+ .lvl = 31,
+ .species = SPECIES_NINJASK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_James5[] = {
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_SURSKIT,
+ },
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_NINJASK,
+ },
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_DUSTOX,
+ },
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_NINJASK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brice[] = {
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_NUMEL,
+ },
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_MACHOP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Trent1[] = {
+ {
+ .iv = 0,
+ .lvl = 16,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 0,
+ .lvl = 16,
+ .species = SPECIES_GEODUDE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lenny[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_MACHOP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lucas1[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Alan[] = {
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_NOSEPASS,
+ },
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_GRAVELER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Clark[] = {
+ {
+ .iv = 0,
+ .lvl = 8,
+ .species = SPECIES_GEODUDE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Eric[] = {
+ {
+ .iv = 0,
+ .lvl = 20,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 0,
+ .lvl = 20,
+ .species = SPECIES_BALTOY,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Lucas2[] = {
+ {
+ .iv = 0,
+ .lvl = 9,
+ .species = SPECIES_WAILMER,
+ .moves = MOVE_SPLASH, MOVE_WATER_GUN, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Mike1[] = {
+ {
+ .iv = 0,
+ .lvl = 10,
+ .species = SPECIES_PELIPPER,
+ .moves = MOVE_GUST, MOVE_GROWL, MOVE_NONE, MOVE_NONE
+ },
+ {
+ .iv = 0,
+ .lvl = 10,
+ .species = SPECIES_POOCHYENA,
+ .moves = MOVE_BITE, MOVE_SCARY_FACE, MOVE_NONE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Mike2[] = {
+ {
+ .iv = 0,
+ .lvl = 16,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 0,
+ .lvl = 16,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 0,
+ .lvl = 16,
+ .species = SPECIES_MACHOP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Trent2[] = {
+ {
+ .iv = 10,
+ .lvl = 24,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 10,
+ .lvl = 24,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 10,
+ .lvl = 24,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 10,
+ .lvl = 24,
+ .species = SPECIES_GRAVELER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Trent3[] = {
+ {
+ .iv = 20,
+ .lvl = 27,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 20,
+ .lvl = 27,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 20,
+ .lvl = 27,
+ .species = SPECIES_GRAVELER,
+ },
+ {
+ .iv = 20,
+ .lvl = 27,
+ .species = SPECIES_GRAVELER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Trent4[] = {
+ {
+ .iv = 30,
+ .lvl = 30,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 30,
+ .lvl = 30,
+ .species = SPECIES_GRAVELER,
+ },
+ {
+ .iv = 30,
+ .lvl = 30,
+ .species = SPECIES_GRAVELER,
+ },
+ {
+ .iv = 30,
+ .lvl = 30,
+ .species = SPECIES_GRAVELER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Trent5[] = {
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_GRAVELER,
+ },
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_GRAVELER,
+ },
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_GRAVELER,
+ },
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_GOLEM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_DezAndLuke[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_DELCATTY,
+ },
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_MANECTRIC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_LeaAndJed[] = {
+ {
+ .iv = 0,
+ .lvl = 45,
+ .species = SPECIES_LUVDISC,
+ },
+ {
+ .iv = 0,
+ .lvl = 45,
+ .species = SPECIES_LUVDISC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_KiraAndDan1[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_VOLBEAT,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_ILLUMISE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_KiraAndDan2[] = {
+ {
+ .iv = 10,
+ .lvl = 30,
+ .species = SPECIES_VOLBEAT,
+ },
+ {
+ .iv = 10,
+ .lvl = 30,
+ .species = SPECIES_ILLUMISE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_KiraAndDan3[] = {
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_VOLBEAT,
+ },
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_ILLUMISE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_KiraAndDan4[] = {
+ {
+ .iv = 30,
+ .lvl = 36,
+ .species = SPECIES_VOLBEAT,
+ },
+ {
+ .iv = 30,
+ .lvl = 36,
+ .species = SPECIES_ILLUMISE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_KiraAndDan5[] = {
+ {
+ .iv = 40,
+ .lvl = 39,
+ .species = SPECIES_VOLBEAT,
+ },
+ {
+ .iv = 40,
+ .lvl = 39,
+ .species = SPECIES_ILLUMISE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Johanna[] = {
+ {
+ .iv = 0,
+ .lvl = 13,
+ .species = SPECIES_GOLDEEN,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Gerald[] = {
+ {
+ .iv = 100,
+ .lvl = 23,
+ .species = SPECIES_KECLEON,
+ .moves = MOVE_FLAMETHROWER, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK, MOVE_BIND
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Vivian[] = {
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_MEDITITE,
+ .moves = MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, MOVE_THUNDER_PUNCH
+ },
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_MEDITITE,
+ .moves = MOVE_THUNDER_PUNCH, MOVE_DETECT, MOVE_CONFUSION, MOVE_MEDITATE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Danielle[] = {
+ {
+ .iv = 100,
+ .lvl = 23,
+ .species = SPECIES_MEDITITE,
+ .moves = MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, MOVE_FIRE_PUNCH
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Hideo[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, MOVE_SMOKESCREEN
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_TACKLE, MOVE_POISON_GAS, MOVE_SLUDGE, MOVE_SMOKESCREEN
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Keigo[] = {
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_POISON_GAS, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, MOVE_SMOKESCREEN
+ },
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_NINJASK,
+ .moves = MOVE_SAND_ATTACK, MOVE_DOUBLE_TEAM, MOVE_FURY_CUTTER, MOVE_SWORDS_DANCE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Riley[] = {
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_NINCADA,
+ .moves = MOVE_LEECH_LIFE, MOVE_FURY_SWIPES, MOVE_MIND_READER, MOVE_DIG
+ },
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_KOFFING,
+ .moves = MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, MOVE_SMOKESCREEN
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Flint[] = {
+ {
+ .iv = 150,
+ .lvl = 29,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 150,
+ .lvl = 29,
+ .species = SPECIES_XATU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ashley[] = {
+ {
+ .iv = 100,
+ .lvl = 27,
+ .species = SPECIES_SWABLU,
+ },
+ {
+ .iv = 100,
+ .lvl = 27,
+ .species = SPECIES_SWABLU,
+ },
+ {
+ .iv = 100,
+ .lvl = 27,
+ .species = SPECIES_SWABLU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Wally2[] = {
+ {
+ .iv = 30,
+ .lvl = 16,
+ .species = SPECIES_RALTS,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Wally3[] = {
+ {
+ .iv = 150,
+ .lvl = 47,
+ .species = SPECIES_ALTARIA,
+ .moves = MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE
+ },
+ {
+ .iv = 150,
+ .lvl = 46,
+ .species = SPECIES_DELCATTY,
+ .moves = MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK
+ },
+ {
+ .iv = 150,
+ .lvl = 47,
+ .species = SPECIES_ROSELIA,
+ .moves = MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC
+ },
+ {
+ .iv = 150,
+ .lvl = 44,
+ .species = SPECIES_MAGNETON,
+ .moves = MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH
+ },
+ {
+ .iv = 250,
+ .lvl = 48,
+ .species = SPECIES_GARDEVOIR,
+ .moves = MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Wally4[] = {
+ {
+ .iv = 150,
+ .lvl = 50,
+ .species = SPECIES_ALTARIA,
+ .moves = MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE
+ },
+ {
+ .iv = 150,
+ .lvl = 49,
+ .species = SPECIES_DELCATTY,
+ .moves = MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK
+ },
+ {
+ .iv = 150,
+ .lvl = 50,
+ .species = SPECIES_ROSELIA,
+ .moves = MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC
+ },
+ {
+ .iv = 150,
+ .lvl = 47,
+ .species = SPECIES_MAGNETON,
+ .moves = MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH
+ },
+ {
+ .iv = 250,
+ .lvl = 51,
+ .species = SPECIES_GARDEVOIR,
+ .moves = MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Wally5[] = {
+ {
+ .iv = 150,
+ .lvl = 53,
+ .species = SPECIES_ALTARIA,
+ .moves = MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE
+ },
+ {
+ .iv = 150,
+ .lvl = 52,
+ .species = SPECIES_DELCATTY,
+ .moves = MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK
+ },
+ {
+ .iv = 150,
+ .lvl = 53,
+ .species = SPECIES_ROSELIA,
+ .moves = MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC
+ },
+ {
+ .iv = 150,
+ .lvl = 50,
+ .species = SPECIES_MAGNETON,
+ .moves = MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH
+ },
+ {
+ .iv = 250,
+ .lvl = 54,
+ .species = SPECIES_GARDEVOIR,
+ .moves = MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Wally6[] = {
+ {
+ .iv = 150,
+ .lvl = 56,
+ .species = SPECIES_ALTARIA,
+ .moves = MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE
+ },
+ {
+ .iv = 150,
+ .lvl = 55,
+ .species = SPECIES_DELCATTY,
+ .moves = MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK
+ },
+ {
+ .iv = 150,
+ .lvl = 56,
+ .species = SPECIES_ROSELIA,
+ .moves = MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC
+ },
+ {
+ .iv = 150,
+ .lvl = 53,
+ .species = SPECIES_MAGNETON,
+ .moves = MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH
+ },
+ {
+ .iv = 250,
+ .lvl = 57,
+ .species = SPECIES_GARDEVOIR,
+ .moves = MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan13[] = {
+ {
+ .iv = 150,
+ .lvl = 31,
+ .species = SPECIES_TROPIUS,
+ },
+ {
+ .iv = 150,
+ .lvl = 32,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 150,
+ .lvl = 32,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 200,
+ .lvl = 34,
+ .species = SPECIES_GROVYLE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan14[] = {
+ {
+ .iv = 150,
+ .lvl = 31,
+ .species = SPECIES_TROPIUS,
+ },
+ {
+ .iv = 150,
+ .lvl = 32,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 150,
+ .lvl = 32,
+ .species = SPECIES_LUDICOLO,
+ },
+ {
+ .iv = 200,
+ .lvl = 34,
+ .species = SPECIES_COMBUSKEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan15[] = {
+ {
+ .iv = 150,
+ .lvl = 31,
+ .species = SPECIES_TROPIUS,
+ },
+ {
+ .iv = 150,
+ .lvl = 32,
+ .species = SPECIES_LUDICOLO,
+ },
+ {
+ .iv = 150,
+ .lvl = 32,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 200,
+ .lvl = 34,
+ .species = SPECIES_MARSHTOMP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May11[] = {
+ {
+ .iv = 150,
+ .lvl = 31,
+ .species = SPECIES_TROPIUS,
+ },
+ {
+ .iv = 150,
+ .lvl = 32,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 150,
+ .lvl = 32,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 200,
+ .lvl = 34,
+ .species = SPECIES_GROVYLE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May12[] = {
+ {
+ .iv = 150,
+ .lvl = 31,
+ .species = SPECIES_TROPIUS,
+ },
+ {
+ .iv = 150,
+ .lvl = 32,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 150,
+ .lvl = 32,
+ .species = SPECIES_LUDICOLO,
+ },
+ {
+ .iv = 200,
+ .lvl = 34,
+ .species = SPECIES_COMBUSKEN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May13[] = {
+ {
+ .iv = 150,
+ .lvl = 31,
+ .species = SPECIES_TROPIUS,
+ },
+ {
+ .iv = 150,
+ .lvl = 32,
+ .species = SPECIES_LUDICOLO,
+ },
+ {
+ .iv = 150,
+ .lvl = 32,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 200,
+ .lvl = 34,
+ .species = SPECIES_MARSHTOMP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jonah[] = {
+ {
+ .iv = 0,
+ .lvl = 30,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_SHARPEDO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Henry[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_CARVANHA,
+ },
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_TENTACRUEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Roger[] = {
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_MAGIKARP,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_MAGIKARP,
+ },
+ {
+ .iv = 0,
+ .lvl = 35,
+ .species = SPECIES_GYARADOS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Alexa[] = {
+ {
+ .iv = 100,
+ .lvl = 34,
+ .species = SPECIES_GLOOM,
+ },
+ {
+ .iv = 100,
+ .lvl = 34,
+ .species = SPECIES_AZUMARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Ruben[] = {
+ {
+ .iv = 100,
+ .lvl = 34,
+ .species = SPECIES_SHIFTRY,
+ },
+ {
+ .iv = 100,
+ .lvl = 34,
+ .species = SPECIES_NOSEPASS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Koji1[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Wayne[] = {
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 31,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 36,
+ .species = SPECIES_WAILMER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Aidan[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_SKARMORY,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Reed[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_SPHEAL,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_SHARPEDO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tisha[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_CHINCHOU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_ToriAndTia[] = {
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_SPINDA,
+ },
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_SPINDA,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_KimAndIris[] = {
+ {
+ .iv = 0,
+ .lvl = 32,
+ .species = SPECIES_SWABLU,
+ .moves = MOVE_SING, MOVE_FURY_ATTACK, MOVE_SAFEGUARD, MOVE_AERIAL_ACE
+ },
+ {
+ .iv = 0,
+ .lvl = 35,
+ .species = SPECIES_NUMEL,
+ .moves = MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_REST, MOVE_EARTHQUAKE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_TyraAndIvy[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_ROSELIA,
+ .moves = MOVE_GROWTH, MOVE_STUN_SPORE, MOVE_MEGA_DRAIN, MOVE_LEECH_SEED
+ },
+ {
+ .iv = 0,
+ .lvl = 20,
+ .species = SPECIES_GRAVELER,
+ .moves = MOVE_DEFENSE_CURL, MOVE_ROLLOUT, MOVE_MUD_SPORT, MOVE_ROCK_THROW
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_MelAndPaul[] = {
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_DUSTOX,
+ .moves = MOVE_GUST, MOVE_PSYBEAM, MOVE_TOXIC, MOVE_PROTECT
+ },
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_BEAUTIFLY,
+ .moves = MOVE_GUST, MOVE_MEGA_DRAIN, MOVE_ATTRACT, MOVE_STUN_SPORE
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_JohnAndJay1[] = {
+ {
+ .iv = 200,
+ .lvl = 39,
+ .species = SPECIES_MEDICHAM,
+ .moves = MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT
+ },
+ {
+ .iv = 200,
+ .lvl = 39,
+ .species = SPECIES_HARIYAMA,
+ .moves = MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_JohnAndJay2[] = {
+ {
+ .iv = 210,
+ .lvl = 43,
+ .species = SPECIES_MEDICHAM,
+ .moves = MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT
+ },
+ {
+ .iv = 210,
+ .lvl = 43,
+ .species = SPECIES_HARIYAMA,
+ .moves = MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_JohnAndJay3[] = {
+ {
+ .iv = 220,
+ .lvl = 46,
+ .species = SPECIES_MEDICHAM,
+ .moves = MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT
+ },
+ {
+ .iv = 220,
+ .lvl = 46,
+ .species = SPECIES_HARIYAMA,
+ .moves = MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_JohnAndJay4[] = {
+ {
+ .iv = 230,
+ .lvl = 49,
+ .species = SPECIES_MEDICHAM,
+ .moves = MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT
+ },
+ {
+ .iv = 230,
+ .lvl = 49,
+ .species = SPECIES_HARIYAMA,
+ .moves = MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_JohnAndJay5[] = {
+ {
+ .iv = 240,
+ .lvl = 52,
+ .species = SPECIES_MEDICHAM,
+ .moves = MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT
+ },
+ {
+ .iv = 240,
+ .lvl = 52,
+ .species = SPECIES_HARIYAMA,
+ .moves = MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_ReliAndIan[] = {
+ {
+ .iv = 0,
+ .lvl = 35,
+ .species = SPECIES_AZUMARILL,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_WINGULL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_LilaAndRoy1[] = {
+ {
+ .iv = 0,
+ .lvl = 34,
+ .species = SPECIES_CHINCHOU,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_LilaAndRoy2[] = {
+ {
+ .iv = 0,
+ .lvl = 42,
+ .species = SPECIES_CHINCHOU,
+ },
+ {
+ .iv = 0,
+ .lvl = 40,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_LilaAndRoy3[] = {
+ {
+ .iv = 0,
+ .lvl = 45,
+ .species = SPECIES_LANTURN,
+ },
+ {
+ .iv = 0,
+ .lvl = 43,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_LilaAndRoy4[] = {
+ {
+ .iv = 0,
+ .lvl = 48,
+ .species = SPECIES_LANTURN,
+ },
+ {
+ .iv = 0,
+ .lvl = 46,
+ .species = SPECIES_SHARPEDO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_LilaAndRoy5[] = {
+ {
+ .iv = 0,
+ .lvl = 51,
+ .species = SPECIES_LANTURN,
+ },
+ {
+ .iv = 0,
+ .lvl = 49,
+ .species = SPECIES_SHARPEDO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_LisaAndRay[] = {
+ {
+ .iv = 0,
+ .lvl = 27,
+ .species = SPECIES_GOLDEEN,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_TENTACOOL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Chris[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_MAGIKARP,
+ },
+ {
+ .iv = 0,
+ .lvl = 20,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_FEEBAS,
+ },
+ {
+ .iv = 0,
+ .lvl = 23,
+ .species = SPECIES_CARVANHA,
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Dawson[] = {
+ {
+ .iv = 0,
+ .lvl = 8,
+ .species = SPECIES_ZIGZAGOON,
+ .heldItem = ITEM_NUGGET
+ },
+ {
+ .iv = 0,
+ .lvl = 8,
+ .species = SPECIES_POOCHYENA,
+ .heldItem = ITEM_NONE
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Sarah[] = {
+ {
+ .iv = 0,
+ .lvl = 8,
+ .species = SPECIES_LOTAD,
+ .heldItem = ITEM_NONE
+ },
+ {
+ .iv = 0,
+ .lvl = 8,
+ .species = SPECIES_ZIGZAGOON,
+ .heldItem = ITEM_NUGGET
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Darian[] = {
+ {
+ .iv = 0,
+ .lvl = 9,
+ .species = SPECIES_MAGIKARP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Hailey[] = {
+ {
+ .iv = 0,
+ .lvl = 13,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Chandler[] = {
+ {
+ .iv = 0,
+ .lvl = 12,
+ .species = SPECIES_TENTACOOL,
+ },
+ {
+ .iv = 0,
+ .lvl = 12,
+ .species = SPECIES_TENTACOOL,
+ }
+};
+
+const struct TrainerMonItemDefaultMoves gTrainerParty_Kaleb[] = {
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_MINUN,
+ .heldItem = ITEM_ORAN_BERRY
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_PLUSLE,
+ .heldItem = ITEM_ORAN_BERRY
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Joseph[] = {
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_ELECTRIKE,
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_VOLTORB,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Alyssa[] = {
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_MAGNEMITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Marcos[] = {
+ {
+ .iv = 100,
+ .lvl = 15,
+ .species = SPECIES_VOLTORB,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Rhett[] = {
+ {
+ .iv = 100,
+ .lvl = 15,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tyron[] = {
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_SANDSHREW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Celina[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Bianca[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_SHROOMISH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Hayden[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Sophie[] = {
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_MARILL,
+ },
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_LOMBRE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Coby[] = {
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_SKARMORY,
+ },
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_SWELLOW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lawrence[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_BALTOY,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_SANDSHREW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Wyatt[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_ARON,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_ARON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Angelina[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Kai[] = {
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_BARBOACH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Charlotte[] = {
+ {
+ .iv = 0,
+ .lvl = 19,
+ .species = SPECIES_NUZLEAF,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Deandre[] = {
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_ZIGZAGOON,
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_ARON,
+ },
+ {
+ .iv = 0,
+ .lvl = 14,
+ .species = SPECIES_ELECTRIKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt38[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt39[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_POOCHYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt40[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt41[] = {
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_BALTOY,
+ },
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt42[] = {
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_BALTOY,
+ },
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt43[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_MIGHTYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt44[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt45[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_POOCHYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt46[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt47[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_MIGHTYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt48[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_BALTOY,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt49[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt50[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_ZUBAT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt51[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_MIGHTYENA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt52[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Grunt53[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_BALTOY,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tabitha3[] = {
+ {
+ .iv = 75,
+ .lvl = 26,
+ .species = SPECIES_NUMEL,
+ },
+ {
+ .iv = 75,
+ .lvl = 28,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 75,
+ .lvl = 30,
+ .species = SPECIES_ZUBAT,
+ },
+ {
+ .iv = 75,
+ .lvl = 33,
+ .species = SPECIES_CAMERUPT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Darcy[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_CAMERUPT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Maxie3[] = {
+ {
+ .iv = 150,
+ .lvl = 42,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 150,
+ .lvl = 43,
+ .species = SPECIES_CROBAT,
+ },
+ {
+ .iv = 150,
+ .lvl = 44,
+ .species = SPECIES_CAMERUPT,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Pete[] = {
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_TENTACOOL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Isabelle[] = {
+ {
+ .iv = 0,
+ .lvl = 15,
+ .species = SPECIES_MARILL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Andres1[] = {
+ {
+ .iv = 50,
+ .lvl = 25,
+ .species = SPECIES_SANDSHREW,
+ },
+ {
+ .iv = 50,
+ .lvl = 25,
+ .species = SPECIES_SANDSHREW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Josue[] = {
+ {
+ .iv = 50,
+ .lvl = 25,
+ .species = SPECIES_TAILLOW,
+ },
+ {
+ .iv = 50,
+ .lvl = 25,
+ .species = SPECIES_WINGULL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Camron[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cory1[] = {
+ {
+ .iv = 0,
+ .lvl = 24,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 0,
+ .lvl = 24,
+ .species = SPECIES_MACHOP,
+ },
+ {
+ .iv = 0,
+ .lvl = 24,
+ .species = SPECIES_TENTACOOL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Carolina[] = {
+ {
+ .iv = 50,
+ .lvl = 24,
+ .species = SPECIES_MANECTRIC,
+ },
+ {
+ .iv = 50,
+ .lvl = 24,
+ .species = SPECIES_SWELLOW,
+ },
+ {
+ .iv = 50,
+ .lvl = 24,
+ .species = SPECIES_MANECTRIC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Elijah[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_SKARMORY,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_SKARMORY,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Celia[] = {
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_MARILL,
+ },
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_LOMBRE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Bryan[] = {
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_SANDSHREW,
+ },
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_SANDSLASH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Branden[] = {
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_TAILLOW,
+ },
+ {
+ .iv = 0,
+ .lvl = 22,
+ .species = SPECIES_NUZLEAF,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Bryant[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_NUMEL,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_SLUGMA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Shayla[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_ROSELIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Kyra[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_DODUO,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_DODRIO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Jaiden[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_NINJASK,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_GULPIN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Alix[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_KADABRA,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_KIRLIA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Helene[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_MEDITITE,
+ },
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Marlene[] = {
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_MEDITITE,
+ },
+ {
+ .iv = 0,
+ .lvl = 18,
+ .species = SPECIES_SPOINK,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Devan[] = {
+ {
+ .iv = 0,
+ .lvl = 8,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 0,
+ .lvl = 8,
+ .species = SPECIES_GEODUDE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Johnson[] = {
+ {
+ .iv = 0,
+ .lvl = 8,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 0,
+ .lvl = 8,
+ .species = SPECIES_LOTAD,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Melina[] = {
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_DODUO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brandi[] = {
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_RALTS,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Aisha[] = {
+ {
+ .iv = 0,
+ .lvl = 17,
+ .species = SPECIES_MEDITITE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Makayla[] = {
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_ROSELIA,
+ },
+ {
+ .iv = 0,
+ .lvl = 33,
+ .species = SPECIES_MEDICHAM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Fabian[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_MANECTRIC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Dayton[] = {
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_SLUGMA,
+ },
+ {
+ .iv = 0,
+ .lvl = 25,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Rachel[] = {
+ {
+ .iv = 0,
+ .lvl = 26,
+ .species = SPECIES_GOLDEEN,
+ }
+};
+
+const struct TrainerMonNoItemCustomMoves gTrainerParty_Leonel[] = {
+ {
+ .iv = 100,
+ .lvl = 30,
+ .species = SPECIES_MANECTRIC,
+ .moves = MOVE_THUNDER, MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Callie[] = {
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_MEDITITE,
+ },
+ {
+ .iv = 0,
+ .lvl = 28,
+ .species = SPECIES_MAKUHITA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cale[] = {
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_DUSTOX,
+ },
+ {
+ .iv = 0,
+ .lvl = 29,
+ .species = SPECIES_BEAUTIFLY,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Myles[] = {
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_MAKUHITA,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_TROPIUS,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_ZIGZAGOON,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_ELECTRIKE,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Pat[] = {
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_POOCHYENA,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_SHROOMISH,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_ELECTRIKE,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_MARILL,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_SANDSHREW,
+ },
+ {
+ .iv = 10,
+ .lvl = 25,
+ .species = SPECIES_GULPIN,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cristin1[] = {
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_LOUDRED,
+ },
+ {
+ .iv = 100,
+ .lvl = 29,
+ .species = SPECIES_VIGOROTH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May14[] = {
+ {
+ .iv = 25,
+ .lvl = 13,
+ .species = SPECIES_LOTAD,
+ },
+ {
+ .iv = 50,
+ .lvl = 15,
+ .species = SPECIES_TORCHIC,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May15[] = {
+ {
+ .iv = 25,
+ .lvl = 13,
+ .species = SPECIES_TORKOAL,
+ },
+ {
+ .iv = 50,
+ .lvl = 15,
+ .species = SPECIES_MUDKIP,
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Roxanne2[] = {
+ {
+ .iv = 255,
+ .lvl = 32,
+ .species = SPECIES_GOLEM,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, MOVE_EXPLOSION
+ },
+ {
+ .iv = 255,
+ .lvl = 35,
+ .species = SPECIES_KABUTO,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE
+ },
+ {
+ .iv = 255,
+ .lvl = 35,
+ .species = SPECIES_ONIX,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE
+ },
+ {
+ .iv = 255,
+ .lvl = 37,
+ .species = SPECIES_NOSEPASS,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Roxanne3[] = {
+ {
+ .iv = 255,
+ .lvl = 37,
+ .species = SPECIES_OMANYTE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF
+ },
+ {
+ .iv = 255,
+ .lvl = 37,
+ .species = SPECIES_GOLEM,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, MOVE_EXPLOSION
+ },
+ {
+ .iv = 255,
+ .lvl = 40,
+ .species = SPECIES_KABUTOPS,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE
+ },
+ {
+ .iv = 255,
+ .lvl = 40,
+ .species = SPECIES_ONIX,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE
+ },
+ {
+ .iv = 255,
+ .lvl = 42,
+ .species = SPECIES_NOSEPASS,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Roxanne4[] = {
+ {
+ .iv = 255,
+ .lvl = 42,
+ .species = SPECIES_OMASTAR,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF
+ },
+ {
+ .iv = 255,
+ .lvl = 42,
+ .species = SPECIES_GOLEM,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PROTECT, MOVE_ROLLOUT, MOVE_EARTHQUAKE, MOVE_EXPLOSION
+ },
+ {
+ .iv = 255,
+ .lvl = 45,
+ .species = SPECIES_KABUTOPS,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE
+ },
+ {
+ .iv = 255,
+ .lvl = 45,
+ .species = SPECIES_ONIX,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE
+ },
+ {
+ .iv = 255,
+ .lvl = 47,
+ .species = SPECIES_NOSEPASS,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Roxanne5[] = {
+ {
+ .iv = 255,
+ .lvl = 47,
+ .species = SPECIES_AERODACTYL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_ROCK_SLIDE, MOVE_HYPER_BEAM, MOVE_SUPERSONIC, MOVE_PROTECT
+ },
+ {
+ .iv = 255,
+ .lvl = 47,
+ .species = SPECIES_GOLEM,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FOCUS_PUNCH, MOVE_ROLLOUT, MOVE_EARTHQUAKE, MOVE_EXPLOSION
+ },
+ {
+ .iv = 255,
+ .lvl = 47,
+ .species = SPECIES_OMASTAR,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF
+ },
+ {
+ .iv = 255,
+ .lvl = 50,
+ .species = SPECIES_KABUTOPS,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE
+ },
+ {
+ .iv = 255,
+ .lvl = 50,
+ .species = SPECIES_STEELIX,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE
+ },
+ {
+ .iv = 255,
+ .lvl = 52,
+ .species = SPECIES_NOSEPASS,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Brawly2[] = {
+ {
+ .iv = 255,
+ .lvl = 33,
+ .species = SPECIES_MACHAMP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP
+ },
+ {
+ .iv = 255,
+ .lvl = 33,
+ .species = SPECIES_MEDITITE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOCUS_PUNCH
+ },
+ {
+ .iv = 255,
+ .lvl = 35,
+ .species = SPECIES_HITMONTOP,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK
+ },
+ {
+ .iv = 255,
+ .lvl = 37,
+ .species = SPECIES_HARIYAMA,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, MOVE_EARTHQUAKE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Brawly3[] = {
+ {
+ .iv = 255,
+ .lvl = 38,
+ .species = SPECIES_MACHAMP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP
+ },
+ {
+ .iv = 255,
+ .lvl = 38,
+ .species = SPECIES_MEDICHAM,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOCUS_PUNCH
+ },
+ {
+ .iv = 255,
+ .lvl = 40,
+ .species = SPECIES_HITMONTOP,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK
+ },
+ {
+ .iv = 255,
+ .lvl = 42,
+ .species = SPECIES_HARIYAMA,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, MOVE_EARTHQUAKE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Brawly4[] = {
+ {
+ .iv = 255,
+ .lvl = 40,
+ .species = SPECIES_HITMONCHAN,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH
+ },
+ {
+ .iv = 255,
+ .lvl = 43,
+ .species = SPECIES_MACHAMP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP
+ },
+ {
+ .iv = 255,
+ .lvl = 43,
+ .species = SPECIES_MEDICHAM,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_PSYCHIC
+ },
+ {
+ .iv = 255,
+ .lvl = 45,
+ .species = SPECIES_HITMONTOP,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK
+ },
+ {
+ .iv = 255,
+ .lvl = 47,
+ .species = SPECIES_HARIYAMA,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, MOVE_EARTHQUAKE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Brawly5[] = {
+ {
+ .iv = 255,
+ .lvl = 46,
+ .species = SPECIES_HITMONLEE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_MEGA_KICK, MOVE_FOCUS_PUNCH, MOVE_EARTHQUAKE, MOVE_BULK_UP
+ },
+ {
+ .iv = 255,
+ .lvl = 46,
+ .species = SPECIES_HITMONCHAN,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH
+ },
+ {
+ .iv = 255,
+ .lvl = 48,
+ .species = SPECIES_MACHAMP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP
+ },
+ {
+ .iv = 255,
+ .lvl = 48,
+ .species = SPECIES_MEDICHAM,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_PSYCHIC
+ },
+ {
+ .iv = 255,
+ .lvl = 50,
+ .species = SPECIES_HITMONTOP,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK
+ },
+ {
+ .iv = 255,
+ .lvl = 52,
+ .species = SPECIES_HARIYAMA,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, MOVE_EARTHQUAKE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Wattson2[] = {
+ {
+ .iv = 255,
+ .lvl = 36,
+ .species = SPECIES_MAREEP,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN
+ },
+ {
+ .iv = 255,
+ .lvl = 36,
+ .species = SPECIES_ELECTRODE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE
+ },
+ {
+ .iv = 255,
+ .lvl = 38,
+ .species = SPECIES_MAGNETON,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE
+ },
+ {
+ .iv = 255,
+ .lvl = 40,
+ .species = SPECIES_MANECTRIC,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PROTECT
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Wattson3[] = {
+ {
+ .iv = 255,
+ .lvl = 39,
+ .species = SPECIES_PIKACHU,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, MOVE_SHOCK_WAVE
+ },
+ {
+ .iv = 255,
+ .lvl = 41,
+ .species = SPECIES_FLAAFFY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN
+ },
+ {
+ .iv = 255,
+ .lvl = 41,
+ .species = SPECIES_ELECTRODE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE
+ },
+ {
+ .iv = 255,
+ .lvl = 43,
+ .species = SPECIES_MAGNETON,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE
+ },
+ {
+ .iv = 255,
+ .lvl = 45,
+ .species = SPECIES_MANECTRIC,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PROTECT
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Wattson4[] = {
+ {
+ .iv = 255,
+ .lvl = 44,
+ .species = SPECIES_RAICHU,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, MOVE_PROTECT
+ },
+ {
+ .iv = 255,
+ .lvl = 46,
+ .species = SPECIES_AMPHAROS,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN
+ },
+ {
+ .iv = 255,
+ .lvl = 46,
+ .species = SPECIES_ELECTRODE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE
+ },
+ {
+ .iv = 255,
+ .lvl = 48,
+ .species = SPECIES_MAGNETON,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE
+ },
+ {
+ .iv = 255,
+ .lvl = 50,
+ .species = SPECIES_MANECTRIC,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PROTECT
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Wattson5[] = {
+ {
+ .iv = 255,
+ .lvl = 50,
+ .species = SPECIES_ELECTABUZZ,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SWIFT, MOVE_FOCUS_PUNCH, MOVE_THUNDER_PUNCH, MOVE_LIGHT_SCREEN
+ },
+ {
+ .iv = 255,
+ .lvl = 51,
+ .species = SPECIES_RAICHU,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, MOVE_PROTECT
+ },
+ {
+ .iv = 255,
+ .lvl = 51,
+ .species = SPECIES_AMPHAROS,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN
+ },
+ {
+ .iv = 255,
+ .lvl = 53,
+ .species = SPECIES_ELECTRODE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE
+ },
+ {
+ .iv = 255,
+ .lvl = 53,
+ .species = SPECIES_MAGNETON,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE
+ },
+ {
+ .iv = 255,
+ .lvl = 55,
+ .species = SPECIES_MANECTRIC,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PROTECT
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Flannery2[] = {
+ {
+ .iv = 255,
+ .lvl = 38,
+ .species = SPECIES_MAGCARGO,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE
+ },
+ {
+ .iv = 255,
+ .lvl = 36,
+ .species = SPECIES_PONYTA,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE
+ },
+ {
+ .iv = 255,
+ .lvl = 38,
+ .species = SPECIES_CAMERUPT,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT
+ },
+ {
+ .iv = 255,
+ .lvl = 40,
+ .species = SPECIES_TORKOAL,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_ATTRACT
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Flannery3[] = {
+ {
+ .iv = 255,
+ .lvl = 41,
+ .species = SPECIES_GROWLITHE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_ROAR, MOVE_SUNNY_DAY
+ },
+ {
+ .iv = 255,
+ .lvl = 43,
+ .species = SPECIES_MAGCARGO,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE
+ },
+ {
+ .iv = 255,
+ .lvl = 41,
+ .species = SPECIES_PONYTA,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE
+ },
+ {
+ .iv = 255,
+ .lvl = 43,
+ .species = SPECIES_CAMERUPT,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT
+ },
+ {
+ .iv = 255,
+ .lvl = 45,
+ .species = SPECIES_TORKOAL,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_ATTRACT
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Flannery4[] = {
+ {
+ .iv = 255,
+ .lvl = 46,
+ .species = SPECIES_HOUNDOUR,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, MOVE_SUNNY_DAY
+ },
+ {
+ .iv = 255,
+ .lvl = 46,
+ .species = SPECIES_GROWLITHE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, MOVE_ROAR
+ },
+ {
+ .iv = 255,
+ .lvl = 48,
+ .species = SPECIES_MAGCARGO,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE
+ },
+ {
+ .iv = 255,
+ .lvl = 46,
+ .species = SPECIES_RAPIDASH,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE
+ },
+ {
+ .iv = 255,
+ .lvl = 48,
+ .species = SPECIES_CAMERUPT,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT
+ },
+ {
+ .iv = 255,
+ .lvl = 50,
+ .species = SPECIES_TORKOAL,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_ATTRACT
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Flannery5[] = {
+ {
+ .iv = 255,
+ .lvl = 51,
+ .species = SPECIES_ARCANINE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, MOVE_ROAR
+ },
+ {
+ .iv = 255,
+ .lvl = 53,
+ .species = SPECIES_MAGCARGO,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE
+ },
+ {
+ .iv = 255,
+ .lvl = 51,
+ .species = SPECIES_HOUNDOOM,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, MOVE_SUNNY_DAY
+ },
+ {
+ .iv = 255,
+ .lvl = 51,
+ .species = SPECIES_RAPIDASH,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE
+ },
+ {
+ .iv = 255,
+ .lvl = 53,
+ .species = SPECIES_CAMERUPT,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT
+ },
+ {
+ .iv = 255,
+ .lvl = 55,
+ .species = SPECIES_TORKOAL,
+ .heldItem = ITEM_WHITE_HERB,
+ .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_ATTRACT
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Norman2[] = {
+ {
+ .iv = 255,
+ .lvl = 42,
+ .species = SPECIES_CHANSEY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH
+ },
+ {
+ .iv = 255,
+ .lvl = 42,
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST
+ },
+ {
+ .iv = 255,
+ .lvl = 43,
+ .species = SPECIES_SPINDA,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS
+ },
+ {
+ .iv = 255,
+ .lvl = 45,
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_BALL
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Norman3[] = {
+ {
+ .iv = 255,
+ .lvl = 47,
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST
+ },
+ {
+ .iv = 255,
+ .lvl = 47,
+ .species = SPECIES_CHANSEY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH
+ },
+ {
+ .iv = 255,
+ .lvl = 45,
+ .species = SPECIES_KANGASKHAN,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, MOVE_REVERSAL
+ },
+ {
+ .iv = 255,
+ .lvl = 48,
+ .species = SPECIES_SPINDA,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS
+ },
+ {
+ .iv = 255,
+ .lvl = 50,
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_BALL
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Norman4[] = {
+ {
+ .iv = 255,
+ .lvl = 52,
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST
+ },
+ {
+ .iv = 255,
+ .lvl = 52,
+ .species = SPECIES_BLISSEY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH
+ },
+ {
+ .iv = 255,
+ .lvl = 50,
+ .species = SPECIES_KANGASKHAN,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, MOVE_REVERSAL
+ },
+ {
+ .iv = 255,
+ .lvl = 53,
+ .species = SPECIES_SPINDA,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS
+ },
+ {
+ .iv = 255,
+ .lvl = 55,
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_BALL
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Norman5[] = {
+ {
+ .iv = 255,
+ .lvl = 57,
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST
+ },
+ {
+ .iv = 255,
+ .lvl = 57,
+ .species = SPECIES_BLISSEY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_PROTECT, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH
+ },
+ {
+ .iv = 255,
+ .lvl = 55,
+ .species = SPECIES_KANGASKHAN,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, MOVE_REVERSAL
+ },
+ {
+ .iv = 255,
+ .lvl = 57,
+ .species = SPECIES_TAUROS,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_TAKE_DOWN, MOVE_PROTECT, MOVE_FIRE_BLAST, MOVE_EARTHQUAKE
+ },
+ {
+ .iv = 255,
+ .lvl = 58,
+ .species = SPECIES_SPINDA,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS
+ },
+ {
+ .iv = 255,
+ .lvl = 60,
+ .species = SPECIES_SLAKING,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_BALL
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Winona2[] = {
+ {
+ .iv = 255,
+ .lvl = 40,
+ .species = SPECIES_DRATINI,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_ICE_BEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 38,
+ .species = SPECIES_TROPIUS,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE
+ },
+ {
+ .iv = 255,
+ .lvl = 41,
+ .species = SPECIES_PELIPPER,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE
+ },
+ {
+ .iv = 255,
+ .lvl = 43,
+ .species = SPECIES_SKARMORY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE
+ },
+ {
+ .iv = 255,
+ .lvl = 45,
+ .species = SPECIES_ALTARIA,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Winona3[] = {
+ {
+ .iv = 255,
+ .lvl = 43,
+ .species = SPECIES_HOOTHOOT,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_DREAM_EATER
+ },
+ {
+ .iv = 255,
+ .lvl = 43,
+ .species = SPECIES_TROPIUS,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE
+ },
+ {
+ .iv = 255,
+ .lvl = 45,
+ .species = SPECIES_DRAGONAIR,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_ICE_BEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 46,
+ .species = SPECIES_PELIPPER,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE
+ },
+ {
+ .iv = 255,
+ .lvl = 48,
+ .species = SPECIES_SKARMORY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE
+ },
+ {
+ .iv = 255,
+ .lvl = 50,
+ .species = SPECIES_ALTARIA,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Winona4[] = {
+ {
+ .iv = 255,
+ .lvl = 48,
+ .species = SPECIES_NOCTOWL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_DREAM_EATER
+ },
+ {
+ .iv = 255,
+ .lvl = 49,
+ .species = SPECIES_TROPIUS,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE
+ },
+ {
+ .iv = 255,
+ .lvl = 50,
+ .species = SPECIES_DRAGONAIR,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_ICE_BEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 51,
+ .species = SPECIES_PELIPPER,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE
+ },
+ {
+ .iv = 255,
+ .lvl = 53,
+ .species = SPECIES_SKARMORY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE
+ },
+ {
+ .iv = 255,
+ .lvl = 55,
+ .species = SPECIES_ALTARIA,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Winona5[] = {
+ {
+ .iv = 255,
+ .lvl = 53,
+ .species = SPECIES_NOCTOWL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_DREAM_EATER
+ },
+ {
+ .iv = 255,
+ .lvl = 54,
+ .species = SPECIES_TROPIUS,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE
+ },
+ {
+ .iv = 255,
+ .lvl = 55,
+ .species = SPECIES_PELIPPER,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE
+ },
+ {
+ .iv = 255,
+ .lvl = 55,
+ .species = SPECIES_DRAGONITE,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_HYPER_BEAM, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_ICE_BEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 58,
+ .species = SPECIES_SKARMORY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE
+ },
+ {
+ .iv = 255,
+ .lvl = 60,
+ .species = SPECIES_ALTARIA,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_SKY_ATTACK, MOVE_REST, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_TateAndLiza2[] = {
+ {
+ .iv = 255,
+ .lvl = 48,
+ .species = SPECIES_SLOWPOKE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT
+ },
+ {
+ .iv = 255,
+ .lvl = 49,
+ .species = SPECIES_CLAYDOL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN
+ },
+ {
+ .iv = 255,
+ .lvl = 49,
+ .species = SPECIES_XATU,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND
+ },
+ {
+ .iv = 255,
+ .lvl = 50,
+ .species = SPECIES_LUNATONE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND
+ },
+ {
+ .iv = 255,
+ .lvl = 50,
+ .species = SPECIES_SOLROCK,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_TateAndLiza3[] = {
+ {
+ .iv = 255,
+ .lvl = 53,
+ .species = SPECIES_DROWZEE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, MOVE_PROTECT
+ },
+ {
+ .iv = 255,
+ .lvl = 53,
+ .species = SPECIES_SLOWPOKE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT
+ },
+ {
+ .iv = 255,
+ .lvl = 54,
+ .species = SPECIES_CLAYDOL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN
+ },
+ {
+ .iv = 255,
+ .lvl = 54,
+ .species = SPECIES_XATU,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND
+ },
+ {
+ .iv = 255,
+ .lvl = 55,
+ .species = SPECIES_LUNATONE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND
+ },
+ {
+ .iv = 255,
+ .lvl = 55,
+ .species = SPECIES_SOLROCK,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_TateAndLiza4[] = {
+ {
+ .iv = 255,
+ .lvl = 58,
+ .species = SPECIES_HYPNO,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, MOVE_PROTECT
+ },
+ {
+ .iv = 255,
+ .lvl = 59,
+ .species = SPECIES_CLAYDOL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN
+ },
+ {
+ .iv = 255,
+ .lvl = 58,
+ .species = SPECIES_SLOWPOKE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT
+ },
+ {
+ .iv = 255,
+ .lvl = 59,
+ .species = SPECIES_XATU,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND
+ },
+ {
+ .iv = 255,
+ .lvl = 60,
+ .species = SPECIES_LUNATONE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND
+ },
+ {
+ .iv = 255,
+ .lvl = 60,
+ .species = SPECIES_SOLROCK,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_TateAndLiza5[] = {
+ {
+ .iv = 255,
+ .lvl = 63,
+ .species = SPECIES_HYPNO,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, MOVE_PROTECT
+ },
+ {
+ .iv = 255,
+ .lvl = 64,
+ .species = SPECIES_CLAYDOL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN
+ },
+ {
+ .iv = 255,
+ .lvl = 63,
+ .species = SPECIES_SLOWKING,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT
+ },
+ {
+ .iv = 255,
+ .lvl = 64,
+ .species = SPECIES_XATU,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND
+ },
+ {
+ .iv = 255,
+ .lvl = 65,
+ .species = SPECIES_LUNATONE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND
+ },
+ {
+ .iv = 255,
+ .lvl = 65,
+ .species = SPECIES_SOLROCK,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Juan2[] = {
+ {
+ .iv = 255,
+ .lvl = 46,
+ .species = SPECIES_POLIWAG,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, MOVE_HYDRO_PUMP
+ },
+ {
+ .iv = 255,
+ .lvl = 46,
+ .species = SPECIES_WHISCASH,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE
+ },
+ {
+ .iv = 255,
+ .lvl = 48,
+ .species = SPECIES_WALREIN,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_ICE_BEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 48,
+ .species = SPECIES_CRAWDAUNT,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_REST, MOVE_CRABHAMMER, MOVE_TAUNT, MOVE_DOUBLE_TEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 51,
+ .species = SPECIES_KINGDRA,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Juan3[] = {
+ {
+ .iv = 255,
+ .lvl = 50,
+ .species = SPECIES_POLIWHIRL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, MOVE_HYDRO_PUMP
+ },
+ {
+ .iv = 255,
+ .lvl = 51,
+ .species = SPECIES_WHISCASH,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE
+ },
+ {
+ .iv = 255,
+ .lvl = 53,
+ .species = SPECIES_WALREIN,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_ICE_BEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 53,
+ .species = SPECIES_CRAWDAUNT,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, MOVE_DOUBLE_TEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 56,
+ .species = SPECIES_KINGDRA,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Juan4[] = {
+ {
+ .iv = 255,
+ .lvl = 56,
+ .species = SPECIES_LAPRAS,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, MOVE_CONFUSE_RAY
+ },
+ {
+ .iv = 255,
+ .lvl = 58,
+ .species = SPECIES_WHISCASH,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE
+ },
+ {
+ .iv = 255,
+ .lvl = 56,
+ .species = SPECIES_POLIWHIRL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, MOVE_HYDRO_PUMP
+ },
+ {
+ .iv = 255,
+ .lvl = 58,
+ .species = SPECIES_WALREIN,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_ICE_BEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 58,
+ .species = SPECIES_CRAWDAUNT,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, MOVE_DOUBLE_TEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 61,
+ .species = SPECIES_KINGDRA,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Juan5[] = {
+ {
+ .iv = 255,
+ .lvl = 61,
+ .species = SPECIES_LAPRAS,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, MOVE_CONFUSE_RAY
+ },
+ {
+ .iv = 255,
+ .lvl = 63,
+ .species = SPECIES_WHISCASH,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE
+ },
+ {
+ .iv = 255,
+ .lvl = 61,
+ .species = SPECIES_POLITOED,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_HYDRO_PUMP, MOVE_PERISH_SONG
+ },
+ {
+ .iv = 255,
+ .lvl = 63,
+ .species = SPECIES_WALREIN,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_SHEER_COLD
+ },
+ {
+ .iv = 255,
+ .lvl = 63,
+ .species = SPECIES_CRAWDAUNT,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, MOVE_DOUBLE_TEAM
+ },
+ {
+ .iv = 255,
+ .lvl = 66,
+ .species = SPECIES_KINGDRA,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .moves = MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Angelo[] = {
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_ILLUMISE,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SHOCK_WAVE, MOVE_QUICK_ATTACK, MOVE_CHARM, MOVE_NONE
+ },
+ {
+ .iv = 100,
+ .lvl = 17,
+ .species = SPECIES_VOLBEAT,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_SHOCK_WAVE, MOVE_QUICK_ATTACK, MOVE_CONFUSE_RAY, MOVE_NONE
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Darius[] = {
+ {
+ .iv = 200,
+ .lvl = 30,
+ .species = SPECIES_TROPIUS,
+ }
+};
+
+const struct TrainerMonItemCustomMoves gTrainerParty_Steven[] = {
+ {
+ .iv = 255,
+ .lvl = 77,
+ .species = SPECIES_SKARMORY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_SPIKES, MOVE_STEEL_WING
+ },
+ {
+ .iv = 255,
+ .lvl = 75,
+ .species = SPECIES_CLAYDOL,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_ANCIENT_POWER, MOVE_EARTHQUAKE
+ },
+ {
+ .iv = 255,
+ .lvl = 76,
+ .species = SPECIES_AGGRON,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_THUNDER, MOVE_EARTHQUAKE, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW
+ },
+ {
+ .iv = 255,
+ .lvl = 76,
+ .species = SPECIES_CRADILY,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_GIGA_DRAIN, MOVE_ANCIENT_POWER, MOVE_INGRAIN, MOVE_CONFUSE_RAY
+ },
+ {
+ .iv = 255,
+ .lvl = 76,
+ .species = SPECIES_ARMALDO,
+ .heldItem = ITEM_NONE,
+ .moves = MOVE_WATER_PULSE, MOVE_ANCIENT_POWER, MOVE_AERIAL_ACE, MOVE_SLASH
+ },
+ {
+ .iv = 255,
+ .lvl = 78,
+ .species = SPECIES_METAGROSS,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .moves = MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_METEOR_MASH, MOVE_SHADOW_BALL
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Anabel[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_BELDUM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Tucker[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_BELDUM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Spenser[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_BELDUM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Greta[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_BELDUM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Noland[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_BELDUM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Lucy[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_BELDUM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brandon[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_BELDUM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Andres2[] = {
+ {
+ .iv = 10,
+ .lvl = 31,
+ .species = SPECIES_SANDSHREW,
+ },
+ {
+ .iv = 10,
+ .lvl = 31,
+ .species = SPECIES_SANDSHREW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Andres3[] = {
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_NOSEPASS,
+ },
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_SANDSHREW,
+ },
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_SANDSHREW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Andres4[] = {
+ {
+ .iv = 30,
+ .lvl = 35,
+ .species = SPECIES_NOSEPASS,
+ },
+ {
+ .iv = 30,
+ .lvl = 35,
+ .species = SPECIES_SANDSHREW,
+ },
+ {
+ .iv = 30,
+ .lvl = 35,
+ .species = SPECIES_SANDSHREW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Andres5[] = {
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_NOSEPASS,
+ },
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_SANDSLASH,
+ },
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_SANDSLASH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cory2[] = {
+ {
+ .iv = 10,
+ .lvl = 30,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 10,
+ .lvl = 30,
+ .species = SPECIES_MACHOP,
+ },
+ {
+ .iv = 10,
+ .lvl = 30,
+ .species = SPECIES_TENTACOOL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cory3[] = {
+ {
+ .iv = 20,
+ .lvl = 32,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 20,
+ .lvl = 32,
+ .species = SPECIES_MACHOP,
+ },
+ {
+ .iv = 20,
+ .lvl = 32,
+ .species = SPECIES_TENTACOOL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cory4[] = {
+ {
+ .iv = 30,
+ .lvl = 34,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 30,
+ .lvl = 34,
+ .species = SPECIES_MACHOP,
+ },
+ {
+ .iv = 30,
+ .lvl = 34,
+ .species = SPECIES_TENTACRUEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cory5[] = {
+ {
+ .iv = 40,
+ .lvl = 36,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 40,
+ .lvl = 36,
+ .species = SPECIES_MACHOKE,
+ },
+ {
+ .iv = 40,
+ .lvl = 36,
+ .species = SPECIES_TENTACRUEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Pablo2[] = {
+ {
+ .iv = 10,
+ .lvl = 37,
+ .species = SPECIES_STARYU,
+ },
+ {
+ .iv = 10,
+ .lvl = 37,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Pablo3[] = {
+ {
+ .iv = 20,
+ .lvl = 39,
+ .species = SPECIES_WINGULL,
+ },
+ {
+ .iv = 20,
+ .lvl = 39,
+ .species = SPECIES_STARYU,
+ },
+ {
+ .iv = 20,
+ .lvl = 39,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Pablo4[] = {
+ {
+ .iv = 30,
+ .lvl = 41,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 30,
+ .lvl = 41,
+ .species = SPECIES_STARYU,
+ },
+ {
+ .iv = 30,
+ .lvl = 41,
+ .species = SPECIES_STARYU,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Pablo5[] = {
+ {
+ .iv = 40,
+ .lvl = 43,
+ .species = SPECIES_PELIPPER,
+ },
+ {
+ .iv = 40,
+ .lvl = 43,
+ .species = SPECIES_STARMIE,
+ },
+ {
+ .iv = 40,
+ .lvl = 43,
+ .species = SPECIES_STARMIE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Koji2[] = {
+ {
+ .iv = 10,
+ .lvl = 37,
+ .species = SPECIES_MACHOKE,
+ },
+ {
+ .iv = 10,
+ .lvl = 37,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Koji3[] = {
+ {
+ .iv = 20,
+ .lvl = 39,
+ .species = SPECIES_MAKUHITA,
+ },
+ {
+ .iv = 20,
+ .lvl = 39,
+ .species = SPECIES_MACHOKE,
+ },
+ {
+ .iv = 20,
+ .lvl = 39,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Koji4[] = {
+ {
+ .iv = 30,
+ .lvl = 41,
+ .species = SPECIES_HARIYAMA,
+ },
+ {
+ .iv = 30,
+ .lvl = 41,
+ .species = SPECIES_MACHOKE,
+ },
+ {
+ .iv = 30,
+ .lvl = 41,
+ .species = SPECIES_MACHOKE,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Koji5[] = {
+ {
+ .iv = 40,
+ .lvl = 43,
+ .species = SPECIES_HARIYAMA,
+ },
+ {
+ .iv = 40,
+ .lvl = 43,
+ .species = SPECIES_MACHAMP,
+ },
+ {
+ .iv = 40,
+ .lvl = 43,
+ .species = SPECIES_MACHAMP,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cristin2[] = {
+ {
+ .iv = 110,
+ .lvl = 35,
+ .species = SPECIES_LOUDRED,
+ },
+ {
+ .iv = 110,
+ .lvl = 35,
+ .species = SPECIES_VIGOROTH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cristin3[] = {
+ {
+ .iv = 120,
+ .lvl = 37,
+ .species = SPECIES_SPINDA,
+ },
+ {
+ .iv = 120,
+ .lvl = 37,
+ .species = SPECIES_LOUDRED,
+ },
+ {
+ .iv = 120,
+ .lvl = 37,
+ .species = SPECIES_VIGOROTH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cristin4[] = {
+ {
+ .iv = 130,
+ .lvl = 39,
+ .species = SPECIES_SPINDA,
+ },
+ {
+ .iv = 130,
+ .lvl = 39,
+ .species = SPECIES_LOUDRED,
+ },
+ {
+ .iv = 100,
+ .lvl = 39,
+ .species = SPECIES_VIGOROTH,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Cristin5[] = {
+ {
+ .iv = 140,
+ .lvl = 41,
+ .species = SPECIES_SPINDA,
+ },
+ {
+ .iv = 140,
+ .lvl = 41,
+ .species = SPECIES_EXPLOUD,
+ },
+ {
+ .iv = 140,
+ .lvl = 41,
+ .species = SPECIES_SLAKING,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Fernando2[] = {
+ {
+ .iv = 10,
+ .lvl = 35,
+ .species = SPECIES_ELECTRIKE,
+ },
+ {
+ .iv = 10,
+ .lvl = 35,
+ .species = SPECIES_ELECTRIKE,
+ },
+ {
+ .iv = 10,
+ .lvl = 35,
+ .species = SPECIES_LOUDRED,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Fernando3[] = {
+ {
+ .iv = 20,
+ .lvl = 37,
+ .species = SPECIES_ELECTRIKE,
+ },
+ {
+ .iv = 20,
+ .lvl = 37,
+ .species = SPECIES_MANECTRIC,
+ },
+ {
+ .iv = 20,
+ .lvl = 37,
+ .species = SPECIES_LOUDRED,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Fernando4[] = {
+ {
+ .iv = 30,
+ .lvl = 39,
+ .species = SPECIES_MANECTRIC,
+ },
+ {
+ .iv = 30,
+ .lvl = 39,
+ .species = SPECIES_MANECTRIC,
+ },
+ {
+ .iv = 30,
+ .lvl = 39,
+ .species = SPECIES_LOUDRED,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Fernando5[] = {
+ {
+ .iv = 40,
+ .lvl = 41,
+ .species = SPECIES_MANECTRIC,
+ },
+ {
+ .iv = 40,
+ .lvl = 41,
+ .species = SPECIES_MANECTRIC,
+ },
+ {
+ .iv = 40,
+ .lvl = 41,
+ .species = SPECIES_EXPLOUD,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Sawyer2[] = {
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_GEODUDE,
+ },
+ {
+ .iv = 10,
+ .lvl = 26,
+ .species = SPECIES_NUMEL,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Sawyer3[] = {
+ {
+ .iv = 20,
+ .lvl = 28,
+ .species = SPECIES_MACHOP,
+ },
+ {
+ .iv = 20,
+ .lvl = 28,
+ .species = SPECIES_NUMEL,
+ },
+ {
+ .iv = 20,
+ .lvl = 28,
+ .species = SPECIES_GRAVELER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Sawyer4[] = {
+ {
+ .iv = 30,
+ .lvl = 30,
+ .species = SPECIES_MACHOP,
+ },
+ {
+ .iv = 30,
+ .lvl = 30,
+ .species = SPECIES_NUMEL,
+ },
+ {
+ .iv = 30,
+ .lvl = 30,
+ .species = SPECIES_GRAVELER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Sawyer5[] = {
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_MACHOKE,
+ },
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_CAMERUPT,
+ },
+ {
+ .iv = 40,
+ .lvl = 33,
+ .species = SPECIES_GOLEM,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Gabrielle2[] = {
+ {
+ .iv = 10,
+ .lvl = 31,
+ .species = SPECIES_SKITTY,
+ },
+ {
+ .iv = 10,
+ .lvl = 31,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 10,
+ .lvl = 31,
+ .species = SPECIES_ZIGZAGOON,
+ },
+ {
+ .iv = 10,
+ .lvl = 31,
+ .species = SPECIES_LOTAD,
+ },
+ {
+ .iv = 10,
+ .lvl = 31,
+ .species = SPECIES_SEEDOT,
+ },
+ {
+ .iv = 10,
+ .lvl = 31,
+ .species = SPECIES_TAILLOW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Gabrielle3[] = {
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_SKITTY,
+ },
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_LINOONE,
+ },
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_NUZLEAF,
+ },
+ {
+ .iv = 20,
+ .lvl = 33,
+ .species = SPECIES_TAILLOW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Gabrielle4[] = {
+ {
+ .iv = 30,
+ .lvl = 35,
+ .species = SPECIES_DELCATTY,
+ },
+ {
+ .iv = 30,
+ .lvl = 35,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 30,
+ .lvl = 35,
+ .species = SPECIES_LINOONE,
+ },
+ {
+ .iv = 30,
+ .lvl = 35,
+ .species = SPECIES_LOMBRE,
+ },
+ {
+ .iv = 30,
+ .lvl = 35,
+ .species = SPECIES_NUZLEAF,
+ },
+ {
+ .iv = 30,
+ .lvl = 35,
+ .species = SPECIES_SWELLOW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Gabrielle5[] = {
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_DELCATTY,
+ },
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_MIGHTYENA,
+ },
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_LINOONE,
+ },
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_LUDICOLO,
+ },
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_SHIFTRY,
+ },
+ {
+ .iv = 40,
+ .lvl = 37,
+ .species = SPECIES_SWELLOW,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Thalia2[] = {
+ {
+ .iv = 10,
+ .lvl = 34,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 10,
+ .lvl = 34,
+ .species = SPECIES_HORSEA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Thalia3[] = {
+ {
+ .iv = 20,
+ .lvl = 36,
+ .species = SPECIES_LUVDISC,
+ },
+ {
+ .iv = 20,
+ .lvl = 36,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 20,
+ .lvl = 36,
+ .species = SPECIES_SEADRA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Thalia4[] = {
+ {
+ .iv = 30,
+ .lvl = 38,
+ .species = SPECIES_LUVDISC,
+ },
+ {
+ .iv = 30,
+ .lvl = 38,
+ .species = SPECIES_WAILMER,
+ },
+ {
+ .iv = 30,
+ .lvl = 38,
+ .species = SPECIES_SEADRA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Thalia5[] = {
+ {
+ .iv = 40,
+ .lvl = 40,
+ .species = SPECIES_LUVDISC,
+ },
+ {
+ .iv = 40,
+ .lvl = 40,
+ .species = SPECIES_WAILORD,
+ },
+ {
+ .iv = 40,
+ .lvl = 40,
+ .species = SPECIES_KINGDRA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Mariela[] = {
+ {
+ .iv = 0,
+ .lvl = 41,
+ .species = SPECIES_CHIMECHO,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Alvaro[] = {
+ {
+ .iv = 0,
+ .lvl = 41,
+ .species = SPECIES_BANETTE,
+ },
+ {
+ .iv = 0,
+ .lvl = 41,
+ .species = SPECIES_KADABRA,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Everett[] = {
+ {
+ .iv = 0,
+ .lvl = 41,
+ .species = SPECIES_WOBBUFFET,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Red[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_CHARMANDER,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Leaf[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_BULBASAUR,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_Brendan16[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_GROUDON,
+ }
+};
+
+const struct TrainerMonNoItemDefaultMoves gTrainerParty_May16[] = {
+ {
+ .iv = 0,
+ .lvl = 5,
+ .species = SPECIES_KYOGRE,
+ }
+};
+
diff --git a/src/data/trainers.h b/src/data/trainers.h
new file mode 100644
index 000000000..19e210acc
--- /dev/null
+++ b/src/data/trainers.h
@@ -0,0 +1,11971 @@
+const struct Trainer gTrainers[] = {
+ [TRAINER_NONE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _(""),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 0,
+ .party = {.NoItemDefaultMoves = NULL }
+ },
+
+ [TRAINER_SAWYER_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("SAWYER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Sawyer1 }
+ },
+
+ [TRAINER_GRUNT_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt1 }
+ },
+
+ [TRAINER_GRUNT_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt2 }
+ },
+
+ [TRAINER_GRUNT_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt3 }
+ },
+
+ [TRAINER_GRUNT_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt4 }
+ },
+
+ [TRAINER_GRUNT_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt5 }
+ },
+
+ [TRAINER_GRUNT_6] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt6 }
+ },
+
+ [TRAINER_GRUNT_7] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt7 }
+ },
+
+ [TRAINER_GABRIELLE_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
+ .trainerName = _("GABRIELLE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Gabrielle1 }
+ },
+
+ [TRAINER_GRUNT_8] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt8 }
+ },
+
+ [TRAINER_MARCEL] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("MARCEL"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Marcel }
+ },
+
+ [TRAINER_ALBERTO] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("ALBERTO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Alberto }
+ },
+
+ [TRAINER_ED] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COLLECTOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_COLLECTOR,
+ .trainerName = _("ED"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ed }
+ },
+
+ [TRAINER_GRUNT_9] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt9 }
+ },
+
+ [TRAINER_DECLAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("DECLAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Declan }
+ },
+
+ [TRAINER_GRUNT_10] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt10 }
+ },
+
+ [TRAINER_GRUNT_11] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt11 }
+ },
+
+ [TRAINER_GRUNT_12] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt12 }
+ },
+
+ [TRAINER_GRUNT_13] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt13 }
+ },
+
+ [TRAINER_GRUNT_14] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt14 }
+ },
+
+ [TRAINER_GRUNT_15] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt15 }
+ },
+
+ [TRAINER_GRUNT_16] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt16 }
+ },
+
+ [TRAINER_GRUNT_17] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt17 }
+ },
+
+ [TRAINER_GRUNT_18] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt18 }
+ },
+
+ [TRAINER_GRUNT_19] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt19 }
+ },
+
+ [TRAINER_GRUNT_20] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt20 }
+ },
+
+ [TRAINER_GRUNT_21] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt21 }
+ },
+
+ [TRAINER_GRUNT_22] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt22 }
+ },
+
+ [TRAINER_FREDRICK] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_M,
+ .trainerName = _("FREDRICK"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Fredrick }
+ },
+
+ [TRAINER_MATT] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_AQUA_ADMIN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_ADMIN_M,
+ .trainerName = _("MATT"),
+ .items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Matt }
+ },
+
+ [TRAINER_ZANDER] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("ZANDER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Zander }
+ },
+
+ [TRAINER_SHELLY_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_AQUA_ADMIN,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_ADMIN_F,
+ .trainerName = _("SHELLY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Shelly1 }
+ },
+
+ [TRAINER_SHELLY_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_AQUA_ADMIN,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_ADMIN_F,
+ .trainerName = _("SHELLY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Shelly2 }
+ },
+
+ [TRAINER_ARCHIE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_AQUA_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_LEADER_ARCHIE,
+ .trainerName = _("ARCHIE"),
+ .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Archie }
+ },
+
+ [TRAINER_LEAH] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HEX_MANIAC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_HEX_MANIAC,
+ .trainerName = _("LEAH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Leah }
+ },
+
+ [TRAINER_DAISY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_AROMA_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_AROMA_LADY,
+ .trainerName = _("DAISY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Daisy }
+ },
+
+ [TRAINER_ROSE_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_AROMA_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_AROMA_LADY,
+ .trainerName = _("ROSE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Rose1 }
+ },
+
+ [TRAINER_FELIX] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("FELIX"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Felix }
+ },
+
+ [TRAINER_VIOLET] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_AROMA_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_AROMA_LADY,
+ .trainerName = _("VIOLET"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Violet }
+ },
+
+ [TRAINER_ROSE_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_AROMA_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_AROMA_LADY,
+ .trainerName = _("ROSE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Rose2 }
+ },
+
+ [TRAINER_ROSE_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_AROMA_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_AROMA_LADY,
+ .trainerName = _("ROSE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Rose3 }
+ },
+
+ [TRAINER_ROSE_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_AROMA_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_AROMA_LADY,
+ .trainerName = _("ROSE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Rose4 }
+ },
+
+ [TRAINER_ROSE_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_AROMA_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_AROMA_LADY,
+ .trainerName = _("ROSE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Rose5 }
+ },
+
+ [TRAINER_DUSTY_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("DUSTY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Dusty1 }
+ },
+
+ [TRAINER_CHIP] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("CHIP"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemCustomMoves = gTrainerParty_Chip }
+ },
+
+ [TRAINER_FOSTER] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("FOSTER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Foster }
+ },
+
+ [TRAINER_DUSTY_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("DUSTY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Dusty2 }
+ },
+
+ [TRAINER_DUSTY_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("DUSTY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Dusty3 }
+ },
+
+ [TRAINER_DUSTY_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("DUSTY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Dusty4 }
+ },
+
+ [TRAINER_DUSTY_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("DUSTY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Dusty5 }
+ },
+
+ [TRAINER_GABBY_AND_TY_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_INTERVIEWER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER,
+ .trainerPic = TRAINER_PIC_INTERVIEWER,
+ .trainerName = _("GABBY & TY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_GabbyAndTy1 }
+ },
+
+ [TRAINER_GABBY_AND_TY_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_INTERVIEWER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER,
+ .trainerPic = TRAINER_PIC_INTERVIEWER,
+ .trainerName = _("GABBY & TY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_GabbyAndTy2 }
+ },
+
+ [TRAINER_GABBY_AND_TY_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_INTERVIEWER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER,
+ .trainerPic = TRAINER_PIC_INTERVIEWER,
+ .trainerName = _("GABBY & TY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_GabbyAndTy3 }
+ },
+
+ [TRAINER_GABBY_AND_TY_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_INTERVIEWER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER,
+ .trainerPic = TRAINER_PIC_INTERVIEWER,
+ .trainerName = _("GABBY & TY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_GabbyAndTy4 }
+ },
+
+ [TRAINER_GABBY_AND_TY_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_INTERVIEWER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER,
+ .trainerPic = TRAINER_PIC_INTERVIEWER,
+ .trainerName = _("GABBY & TY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_GabbyAndTy5 }
+ },
+
+ [TRAINER_GABBY_AND_TY_6] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_INTERVIEWER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTERVIEWER,
+ .trainerPic = TRAINER_PIC_INTERVIEWER,
+ .trainerName = _("GABBY & TY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_GabbyAndTy6 }
+ },
+
+ [TRAINER_LOLA_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TUBER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_F,
+ .trainerName = _("LOLA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lola1 }
+ },
+
+ [TRAINER_AUSTINA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TUBER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_F,
+ .trainerName = _("AUSTINA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Austina }
+ },
+
+ [TRAINER_GWEN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TUBER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_F,
+ .trainerName = _("GWEN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Gwen }
+ },
+
+ [TRAINER_LOLA_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TUBER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_F,
+ .trainerName = _("LOLA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lola2 }
+ },
+
+ [TRAINER_LOLA_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TUBER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_F,
+ .trainerName = _("LOLA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lola3 }
+ },
+
+ [TRAINER_LOLA_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TUBER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_F,
+ .trainerName = _("LOLA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lola4 }
+ },
+
+ [TRAINER_LOLA_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TUBER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_F,
+ .trainerName = _("LOLA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lola5 }
+ },
+
+ [TRAINER_RICKY_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_TUBER_2,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_M,
+ .trainerName = _("RICKY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Ricky1 }
+ },
+
+ [TRAINER_SIMON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TUBER_2,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_M,
+ .trainerName = _("SIMON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Simon }
+ },
+
+ [TRAINER_CHARLIE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TUBER_2,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_M,
+ .trainerName = _("CHARLIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Charlie }
+ },
+
+ [TRAINER_RICKY_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_TUBER_2,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_M,
+ .trainerName = _("RICKY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Ricky2 }
+ },
+
+ [TRAINER_RICKY_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_TUBER_2,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_M,
+ .trainerName = _("RICKY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Ricky3 }
+ },
+
+ [TRAINER_RICKY_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_TUBER_2,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_M,
+ .trainerName = _("RICKY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Ricky4 }
+ },
+
+ [TRAINER_RICKY_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_TUBER_2,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_M,
+ .trainerName = _("RICKY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Ricky5 }
+ },
+
+ [TRAINER_RANDALL] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("RANDALL"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.ItemCustomMoves = gTrainerParty_Randall }
+ },
+
+ [TRAINER_PARKER] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("PARKER"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.ItemCustomMoves = gTrainerParty_Parker }
+ },
+
+ [TRAINER_GEORGE] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("GEORGE"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.ItemCustomMoves = gTrainerParty_George }
+ },
+
+ [TRAINER_BERKE] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("BERKE"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.ItemCustomMoves = gTrainerParty_Berke }
+ },
+
+ [TRAINER_BRAXTON] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("BRAXTON"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.NoItemCustomMoves = gTrainerParty_Braxton }
+ },
+
+ [TRAINER_VINCENT] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("VINCENT"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Vincent }
+ },
+
+ [TRAINER_LEROY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("LEROY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Leroy }
+ },
+
+ [TRAINER_WILTON_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("WILTON"),
+ .items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Wilton1 }
+ },
+
+ [TRAINER_EDGAR] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("EDGAR"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Edgar }
+ },
+
+ [TRAINER_ALBERT] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("ALBERT"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Albert }
+ },
+
+ [TRAINER_SAMUEL] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("SAMUEL"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Samuel }
+ },
+
+ [TRAINER_VITO] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("VITO"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Vito }
+ },
+
+ [TRAINER_OWEN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("OWEN"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Owen }
+ },
+
+ [TRAINER_WILTON_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("WILTON"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Wilton2 }
+ },
+
+ [TRAINER_WILTON_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("WILTON"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Wilton3 }
+ },
+
+ [TRAINER_WILTON_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("WILTON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Wilton4 }
+ },
+
+ [TRAINER_WILTON_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("WILTON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Wilton5 }
+ },
+
+ [TRAINER_WARREN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("WARREN"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Warren }
+ },
+
+ [TRAINER_MARY] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("MARY"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.ItemCustomMoves = gTrainerParty_Mary }
+ },
+
+ [TRAINER_ALEXIA] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("ALEXIA"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.ItemCustomMoves = gTrainerParty_Alexia }
+ },
+
+ [TRAINER_JODY] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("JODY"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0xb,
+ .partySize = 1,
+ .party = {.ItemCustomMoves = gTrainerParty_Jody }
+ },
+
+ [TRAINER_WENDY] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("WENDY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0xb,
+ .partySize = 3,
+ .party = {.NoItemCustomMoves = gTrainerParty_Wendy }
+ },
+
+ [TRAINER_KEIRA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("KEIRA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0xb,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Keira }
+ },
+
+ [TRAINER_BROOKE_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("BROOKE"),
+ .items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brooke1 }
+ },
+
+ [TRAINER_JENNIFER] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("JENNIFER"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jennifer }
+ },
+
+ [TRAINER_HOPE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("HOPE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Hope }
+ },
+
+ [TRAINER_SHANNON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("SHANNON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Shannon }
+ },
+
+ [TRAINER_MICHELLE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("MICHELLE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Michelle }
+ },
+
+ [TRAINER_CAROLINE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("CAROLINE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Caroline }
+ },
+
+ [TRAINER_JULIE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("JULIE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Julie }
+ },
+
+ [TRAINER_BROOKE_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("BROOKE"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brooke2 }
+ },
+
+ [TRAINER_BROOKE_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("BROOKE"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brooke3 }
+ },
+
+ [TRAINER_BROOKE_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("BROOKE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brooke4 }
+ },
+
+ [TRAINER_BROOKE_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("BROOKE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brooke5 }
+ },
+
+ [TRAINER_PATRICIA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HEX_MANIAC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_HEX_MANIAC,
+ .trainerName = _("PATRICIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Patricia }
+ },
+
+ [TRAINER_KINDRA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HEX_MANIAC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_HEX_MANIAC,
+ .trainerName = _("KINDRA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Kindra }
+ },
+
+ [TRAINER_TAMMY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HEX_MANIAC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_HEX_MANIAC,
+ .trainerName = _("TAMMY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tammy }
+ },
+
+ [TRAINER_VALERIE_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HEX_MANIAC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_HEX_MANIAC,
+ .trainerName = _("VALERIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Valerie1 }
+ },
+
+ [TRAINER_TASHA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HEX_MANIAC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_HEX_MANIAC,
+ .trainerName = _("TASHA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tasha }
+ },
+
+ [TRAINER_VALERIE_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HEX_MANIAC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_HEX_MANIAC,
+ .trainerName = _("VALERIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Valerie2 }
+ },
+
+ [TRAINER_VALERIE_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HEX_MANIAC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_HEX_MANIAC,
+ .trainerName = _("VALERIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Valerie3 }
+ },
+
+ [TRAINER_VALERIE_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HEX_MANIAC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_HEX_MANIAC,
+ .trainerName = _("VALERIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Valerie4 }
+ },
+
+ [TRAINER_VALERIE_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HEX_MANIAC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_HEX_MANIAC,
+ .trainerName = _("VALERIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Valerie5 }
+ },
+
+ [TRAINER_CINDY_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LADY,
+ .trainerName = _("CINDY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Cindy1 }
+ },
+
+ [TRAINER_DAPHNE] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LADY,
+ .trainerName = _("DAPHNE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.ItemCustomMoves = gTrainerParty_Daphne }
+ },
+
+ [TRAINER_GRUNT_23] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt23 }
+ },
+
+ [TRAINER_CINDY_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LADY,
+ .trainerName = _("CINDY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemCustomMoves = gTrainerParty_Cindy2 }
+ },
+
+ [TRAINER_BRIANNA] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LADY,
+ .trainerName = _("BRIANNA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Brianna }
+ },
+
+ [TRAINER_NAOMI] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LADY,
+ .trainerName = _("NAOMI"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Naomi }
+ },
+
+ [TRAINER_CINDY_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LADY,
+ .trainerName = _("CINDY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Cindy3 }
+ },
+
+ [TRAINER_CINDY_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LADY,
+ .trainerName = _("CINDY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Cindy4 }
+ },
+
+ [TRAINER_CINDY_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LADY,
+ .trainerName = _("CINDY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Cindy5 }
+ },
+
+ [TRAINER_CINDY_6] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LADY,
+ .trainerName = _("CINDY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemCustomMoves = gTrainerParty_Cindy6 }
+ },
+
+ [TRAINER_MELISSA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("MELISSA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Melissa }
+ },
+
+ [TRAINER_SHEILA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("SHEILA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Sheila }
+ },
+
+ [TRAINER_SHIRLEY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("SHIRLEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Shirley }
+ },
+
+ [TRAINER_JESSICA_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("JESSICA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Jessica1 }
+ },
+
+ [TRAINER_CONNIE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("CONNIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Connie }
+ },
+
+ [TRAINER_BRIDGET] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("BRIDGET"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Bridget }
+ },
+
+ [TRAINER_OLIVIA] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("OLIVIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemCustomMoves = gTrainerParty_Olivia }
+ },
+
+ [TRAINER_TIFFANY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("TIFFANY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tiffany }
+ },
+
+ [TRAINER_JESSICA_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("JESSICA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Jessica2 }
+ },
+
+ [TRAINER_JESSICA_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("JESSICA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Jessica3 }
+ },
+
+ [TRAINER_JESSICA_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("JESSICA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Jessica4 }
+ },
+
+ [TRAINER_JESSICA_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("JESSICA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Jessica5 }
+ },
+
+ [TRAINER_WINSTON_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_RICH_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_RICH_BOY,
+ .trainerName = _("WINSTON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Winston1 }
+ },
+
+ [TRAINER_MOLLIE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_F,
+ .trainerName = _("MOLLIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Mollie }
+ },
+
+ [TRAINER_GARRET] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_RICH_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_RICH_BOY,
+ .trainerName = _("GARRET"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Garret }
+ },
+
+ [TRAINER_WINSTON_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_RICH_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_RICH_BOY,
+ .trainerName = _("WINSTON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Winston2 }
+ },
+
+ [TRAINER_WINSTON_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_RICH_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_RICH_BOY,
+ .trainerName = _("WINSTON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Winston3 }
+ },
+
+ [TRAINER_WINSTON_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_RICH_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_RICH_BOY,
+ .trainerName = _("WINSTON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Winston4 }
+ },
+
+ [TRAINER_WINSTON_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_RICH_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_RICH_BOY,
+ .trainerName = _("WINSTON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemCustomMoves = gTrainerParty_Winston5 }
+ },
+
+ [TRAINER_STEVE_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_POKEMANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_POKEMANIAC,
+ .trainerName = _("STEVE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Steve1 }
+ },
+
+ [TRAINER_THALIA_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("THALIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Thalia1 }
+ },
+
+ [TRAINER_MARK] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_POKEMANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_POKEMANIAC,
+ .trainerName = _("MARK"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Mark }
+ },
+
+ [TRAINER_GRUNT_24] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt24 }
+ },
+
+ [TRAINER_STEVE_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_POKEMANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_POKEMANIAC,
+ .trainerName = _("STEVE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Steve2 }
+ },
+
+ [TRAINER_STEVE_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_POKEMANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_POKEMANIAC,
+ .trainerName = _("STEVE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Steve3 }
+ },
+
+ [TRAINER_STEVE_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_POKEMANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_POKEMANIAC,
+ .trainerName = _("STEVE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Steve4 }
+ },
+
+ [TRAINER_STEVE_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_POKEMANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_POKEMANIAC,
+ .trainerName = _("STEVE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Steve5 }
+ },
+
+ [TRAINER_LUIS] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("LUIS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Luis }
+ },
+
+ [TRAINER_DOMINIK] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("DOMINIK"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dominik }
+ },
+
+ [TRAINER_DOUGLAS] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("DOUGLAS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Douglas }
+ },
+
+ [TRAINER_DARRIN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("DARRIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Darrin }
+ },
+
+ [TRAINER_TONY_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("TONY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tony1 }
+ },
+
+ [TRAINER_JEROME] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("JEROME"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jerome }
+ },
+
+ [TRAINER_MATTHEW] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("MATTHEW"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Matthew }
+ },
+
+ [TRAINER_DAVID] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("DAVID"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_David }
+ },
+
+ [TRAINER_SPENCER] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("SPENCER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Spencer }
+ },
+
+ [TRAINER_ROLAND] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("ROLAND"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Roland }
+ },
+
+ [TRAINER_NOLEN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("NOLEN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nolen }
+ },
+
+ [TRAINER_STAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("STAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Stan }
+ },
+
+ [TRAINER_BARRY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("BARRY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Barry }
+ },
+
+ [TRAINER_DEAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("DEAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dean }
+ },
+
+ [TRAINER_RODNEY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("RODNEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Rodney }
+ },
+
+ [TRAINER_RICHARD] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("RICHARD"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Richard }
+ },
+
+ [TRAINER_HERMAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("HERMAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Herman }
+ },
+
+ [TRAINER_SANTIAGO] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("SANTIAGO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Santiago }
+ },
+
+ [TRAINER_GILBERT] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("GILBERT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Gilbert }
+ },
+
+ [TRAINER_FRANKLIN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("FRANKLIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Franklin }
+ },
+
+ [TRAINER_KEVIN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("KEVIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Kevin }
+ },
+
+ [TRAINER_JACK] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("JACK"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jack }
+ },
+
+ [TRAINER_DUDLEY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("DUDLEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dudley }
+ },
+
+ [TRAINER_CHAD] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("CHAD"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Chad }
+ },
+
+ [TRAINER_TONY_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("TONY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tony2 }
+ },
+
+ [TRAINER_TONY_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("TONY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tony3 }
+ },
+
+ [TRAINER_TONY_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("TONY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tony4 }
+ },
+
+ [TRAINER_TONY_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("TONY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tony5 }
+ },
+
+ [TRAINER_TAKAO] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("TAKAO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Takao }
+ },
+
+ [TRAINER_HITOSHI] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("HITOSHI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Hitoshi }
+ },
+
+ [TRAINER_KIYO] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("KIYO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Kiyo }
+ },
+
+ [TRAINER_KOICHI] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("KOICHI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Koichi }
+ },
+
+ [TRAINER_NOB_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("NOB"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nob1 }
+ },
+
+ [TRAINER_NOB_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("NOB"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nob2 }
+ },
+
+ [TRAINER_NOB_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("NOB"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nob3 }
+ },
+
+ [TRAINER_NOB_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("NOB"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nob4 }
+ },
+
+ [TRAINER_NOB_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("NOB"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 4,
+ .party = {.ItemDefaultMoves = gTrainerParty_Nob5 }
+ },
+
+ [TRAINER_YUJI] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("YUJI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Yuji }
+ },
+
+ [TRAINER_DAISUKE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("DAISUKE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Daisuke }
+ },
+
+ [TRAINER_ATSUSHI] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("ATSUSHI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Atsushi }
+ },
+
+ [TRAINER_KIRK] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("KIRK"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Kirk }
+ },
+
+ [TRAINER_GRUNT_25] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt25 }
+ },
+
+ [TRAINER_GRUNT_26] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt26 }
+ },
+
+ [TRAINER_SHAWN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("SHAWN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Shawn }
+ },
+
+ [TRAINER_FERNANDO_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("FERNANDO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Fernando1 }
+ },
+
+ [TRAINER_DALTON_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("DALTON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dalton1 }
+ },
+
+ [TRAINER_DALTON_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("DALTON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dalton2 }
+ },
+
+ [TRAINER_DALTON_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("DALTON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dalton3 }
+ },
+
+ [TRAINER_DALTON_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("DALTON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dalton4 }
+ },
+
+ [TRAINER_DALTON_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("DALTON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dalton5 }
+ },
+
+ [TRAINER_COLE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_KINDLER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_KINDLER,
+ .trainerName = _("COLE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cole }
+ },
+
+ [TRAINER_JEFF] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_KINDLER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_KINDLER,
+ .trainerName = _("JEFF"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jeff }
+ },
+
+ [TRAINER_AXLE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_KINDLER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_KINDLER,
+ .trainerName = _("AXLE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Axle }
+ },
+
+ [TRAINER_JACE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_KINDLER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_KINDLER,
+ .trainerName = _("JACE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jace }
+ },
+
+ [TRAINER_KEEGAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_KINDLER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_KINDLER,
+ .trainerName = _("KEEGAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Keegan }
+ },
+
+ [TRAINER_BERNIE_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_KINDLER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_KINDLER,
+ .trainerName = _("BERNIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Bernie1 }
+ },
+
+ [TRAINER_BERNIE_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_KINDLER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_KINDLER,
+ .trainerName = _("BERNIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Bernie2 }
+ },
+
+ [TRAINER_BERNIE_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_KINDLER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_KINDLER,
+ .trainerName = _("BERNIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Bernie3 }
+ },
+
+ [TRAINER_BERNIE_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_KINDLER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_KINDLER,
+ .trainerName = _("BERNIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Bernie4 }
+ },
+
+ [TRAINER_BERNIE_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_KINDLER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_KINDLER,
+ .trainerName = _("BERNIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Bernie5 }
+ },
+
+ [TRAINER_DREW] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("DREW"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Drew }
+ },
+
+ [TRAINER_BEAU] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("BEAU"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemCustomMoves = gTrainerParty_Beau }
+ },
+
+ [TRAINER_LARRY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("LARRY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Larry }
+ },
+
+ [TRAINER_SHANE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("SHANE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Shane }
+ },
+
+ [TRAINER_JUSTIN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("JUSTIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Justin }
+ },
+
+ [TRAINER_ETHAN_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("ETHAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ethan1 }
+ },
+
+ [TRAINER_AUTUMN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("AUTUMN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Autumn }
+ },
+
+ [TRAINER_TRAVIS] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("TRAVIS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Travis }
+ },
+
+ [TRAINER_ETHAN_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("ETHAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ethan2 }
+ },
+
+ [TRAINER_ETHAN_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("ETHAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ethan3 }
+ },
+
+ [TRAINER_ETHAN_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("ETHAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ethan4 }
+ },
+
+ [TRAINER_ETHAN_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("ETHAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ethan5 }
+ },
+
+ [TRAINER_BRENT] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_BUG_MANIAC,
+ .trainerName = _("BRENT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brent }
+ },
+
+ [TRAINER_DONALD] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_BUG_MANIAC,
+ .trainerName = _("DONALD"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Donald }
+ },
+
+ [TRAINER_TAYLOR] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_BUG_MANIAC,
+ .trainerName = _("TAYLOR"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Taylor }
+ },
+
+ [TRAINER_JEFFREY_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_BUG_MANIAC,
+ .trainerName = _("JEFFREY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jeffrey1 }
+ },
+
+ [TRAINER_DEREK] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_BUG_MANIAC,
+ .trainerName = _("DEREK"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Derek }
+ },
+
+ [TRAINER_JEFFREY_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_BUG_MANIAC,
+ .trainerName = _("JEFFREY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jeffrey2 }
+ },
+
+ [TRAINER_JEFFREY_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_BUG_MANIAC,
+ .trainerName = _("JEFFREY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jeffrey3 }
+ },
+
+ [TRAINER_JEFFREY_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_BUG_MANIAC,
+ .trainerName = _("JEFFREY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jeffrey4 }
+ },
+
+ [TRAINER_JEFFREY_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_BUG_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_BUG_MANIAC,
+ .trainerName = _("JEFFREY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 5,
+ .party = {.ItemDefaultMoves = gTrainerParty_Jeffrey5 }
+ },
+
+ [TRAINER_EDWARD] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("EDWARD"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Edward }
+ },
+
+ [TRAINER_PRESTON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("PRESTON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Preston }
+ },
+
+ [TRAINER_VIRGIL] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("VIRGIL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Virgil }
+ },
+
+ [TRAINER_BLAKE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("BLAKE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Blake }
+ },
+
+ [TRAINER_WILLIAM] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("WILLIAM"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_William }
+ },
+
+ [TRAINER_JOSHUA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("JOSHUA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Joshua }
+ },
+
+ [TRAINER_CAMERON_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("CAMERON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cameron1 }
+ },
+
+ [TRAINER_CAMERON_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("CAMERON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cameron2 }
+ },
+
+ [TRAINER_CAMERON_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("CAMERON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cameron3 }
+ },
+
+ [TRAINER_CAMERON_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("CAMERON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cameron4 }
+ },
+
+ [TRAINER_CAMERON_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("CAMERON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cameron5 }
+ },
+
+ [TRAINER_JACLYN] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("JACLYN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Jaclyn }
+ },
+
+ [TRAINER_HANNAH] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("HANNAH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Hannah }
+ },
+
+ [TRAINER_SAMANTHA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("SAMANTHA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Samantha }
+ },
+
+ [TRAINER_MAURA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("MAURA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Maura }
+ },
+
+ [TRAINER_KAYLA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("KAYLA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Kayla }
+ },
+
+ [TRAINER_ALEXIS] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("ALEXIS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Alexis }
+ },
+
+ [TRAINER_JACKI_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("JACKI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jacki1 }
+ },
+
+ [TRAINER_JACKI_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("JACKI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jacki2 }
+ },
+
+ [TRAINER_JACKI_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("JACKI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jacki3 }
+ },
+
+ [TRAINER_JACKI_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("JACKI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jacki4 }
+ },
+
+ [TRAINER_JACKI_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("JACKI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jacki5 }
+ },
+
+ [TRAINER_WALTER_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GENTLEMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_GENTLEMAN,
+ .trainerName = _("WALTER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Walter1 }
+ },
+
+ [TRAINER_MICAH] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GENTLEMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_GENTLEMAN,
+ .trainerName = _("MICAH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Micah }
+ },
+
+ [TRAINER_THOMAS] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GENTLEMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_GENTLEMAN,
+ .trainerName = _("THOMAS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Thomas }
+ },
+
+ [TRAINER_WALTER_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GENTLEMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_GENTLEMAN,
+ .trainerName = _("WALTER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Walter2 }
+ },
+
+ [TRAINER_WALTER_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_GENTLEMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_GENTLEMAN,
+ .trainerName = _("WALTER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Walter3 }
+ },
+
+ [TRAINER_WALTER_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_GENTLEMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_GENTLEMAN,
+ .trainerName = _("WALTER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Walter4 }
+ },
+
+ [TRAINER_WALTER_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_GENTLEMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_GENTLEMAN,
+ .trainerName = _("WALTER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemCustomMoves = gTrainerParty_Walter5 }
+ },
+
+ [TRAINER_SIDNEY] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_ELITE_FOUR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR,
+ .trainerPic = TRAINER_PIC_ELITE_FOUR_SIDNEY,
+ .trainerName = _("SIDNEY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0xf,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Sidney }
+ },
+
+ [TRAINER_PHOEBE] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_ELITE_FOUR,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR,
+ .trainerPic = TRAINER_PIC_ELITE_FOUR_PHOEBE,
+ .trainerName = _("PHOEBE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Phoebe }
+ },
+
+ [TRAINER_GLACIA] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_ELITE_FOUR,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR,
+ .trainerPic = TRAINER_PIC_ELITE_FOUR_GLACIA,
+ .trainerName = _("GLACIA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Glacia }
+ },
+
+ [TRAINER_DRAKE] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_ELITE_FOUR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR,
+ .trainerPic = TRAINER_PIC_ELITE_FOUR_DRAKE,
+ .trainerName = _("DRAKE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Drake }
+ },
+
+ [TRAINER_ROXANNE_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_ROXANNE,
+ .trainerName = _("ROXANNE"),
+ .items = {ITEM_POTION, ITEM_POTION, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.ItemCustomMoves = gTrainerParty_Roxanne1 }
+ },
+
+ [TRAINER_BRAWLY_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_BRAWLY,
+ .trainerName = _("BRAWLY"),
+ .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.ItemCustomMoves = gTrainerParty_Brawly1 }
+ },
+
+ [TRAINER_WATTSON_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_WATTSON,
+ .trainerName = _("WATTSON"),
+ .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.ItemCustomMoves = gTrainerParty_Wattson1 }
+ },
+
+ [TRAINER_FLANNERY_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_FLANNERY,
+ .trainerName = _("FLANNERY"),
+ .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.ItemCustomMoves = gTrainerParty_Flannery1 }
+ },
+
+ [TRAINER_NORMAN_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_NORMAN,
+ .trainerName = _("NORMAN"),
+ .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.ItemCustomMoves = gTrainerParty_Norman1 }
+ },
+
+ [TRAINER_WINONA_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_WINONA,
+ .trainerName = _("WINONA"),
+ .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x17,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Winona1 }
+ },
+
+ [TRAINER_TATE_AND_LIZA_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA,
+ .trainerName = _("TATE&LIZA"),
+ .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.ItemCustomMoves = gTrainerParty_TateAndLiza1 }
+ },
+
+ [TRAINER_JUAN_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_JUAN,
+ .trainerName = _("JUAN"),
+ .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Juan1 }
+ },
+
+ [TRAINER_JERRY_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SCHOOL_KID,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SCHOOL_KID_M,
+ .trainerName = _("JERRY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jerry1 }
+ },
+
+ [TRAINER_TED] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SCHOOL_KID,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SCHOOL_KID_M,
+ .trainerName = _("TED"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ted }
+ },
+
+ [TRAINER_PAUL] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SCHOOL_KID,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SCHOOL_KID_M,
+ .trainerName = _("PAUL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Paul }
+ },
+
+ [TRAINER_JERRY_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SCHOOL_KID,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SCHOOL_KID_M,
+ .trainerName = _("JERRY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jerry2 }
+ },
+
+ [TRAINER_JERRY_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SCHOOL_KID,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SCHOOL_KID_M,
+ .trainerName = _("JERRY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jerry3 }
+ },
+
+ [TRAINER_JERRY_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SCHOOL_KID,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SCHOOL_KID_M,
+ .trainerName = _("JERRY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jerry4 }
+ },
+
+ [TRAINER_JERRY_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SCHOOL_KID,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SCHOOL_KID_M,
+ .trainerName = _("JERRY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jerry5 }
+ },
+
+ [TRAINER_KAREN_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SCHOOL_KID,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_SCHOOL_KID_F,
+ .trainerName = _("KAREN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Karen1 }
+ },
+
+ [TRAINER_GEORGIA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SCHOOL_KID,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_SCHOOL_KID_F,
+ .trainerName = _("GEORGIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Georgia }
+ },
+
+ [TRAINER_KAREN_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SCHOOL_KID,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_SCHOOL_KID_F,
+ .trainerName = _("KAREN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Karen2 }
+ },
+
+ [TRAINER_KAREN_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SCHOOL_KID,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_SCHOOL_KID_F,
+ .trainerName = _("KAREN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Karen3 }
+ },
+
+ [TRAINER_KAREN_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SCHOOL_KID,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_SCHOOL_KID_F,
+ .trainerName = _("KAREN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Karen4 }
+ },
+
+ [TRAINER_KAREN_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SCHOOL_KID,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_SCHOOL_KID_F,
+ .trainerName = _("KAREN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Karen5 }
+ },
+
+ [TRAINER_KATE_AND_JOY] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_SR_AND_JR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_SR_AND_JR,
+ .trainerName = _("KATE & JOY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_KateAndJoy }
+ },
+
+ [TRAINER_ANNA_AND_MEG_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_SR_AND_JR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_SR_AND_JR,
+ .trainerName = _("ANNA & MEG"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_AnnaAndMeg1 }
+ },
+
+ [TRAINER_ANNA_AND_MEG_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_SR_AND_JR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_SR_AND_JR,
+ .trainerName = _("ANNA & MEG"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_AnnaAndMeg2 }
+ },
+
+ [TRAINER_ANNA_AND_MEG_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_SR_AND_JR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_SR_AND_JR,
+ .trainerName = _("ANNA & MEG"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_AnnaAndMeg3 }
+ },
+
+ [TRAINER_ANNA_AND_MEG_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_SR_AND_JR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_SR_AND_JR,
+ .trainerName = _("ANNA & MEG"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_AnnaAndMeg4 }
+ },
+
+ [TRAINER_ANNA_AND_MEG_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_SR_AND_JR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_SR_AND_JR,
+ .trainerName = _("ANNA & MEG"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_AnnaAndMeg5 }
+ },
+
+ [TRAINER_VICTOR] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_WINSTRATE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_M,
+ .trainerName = _("VICTOR"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.ItemDefaultMoves = gTrainerParty_Victor }
+ },
+
+ [TRAINER_MIGUEL_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_M,
+ .trainerName = _("MIGUEL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Miguel1 }
+ },
+
+ [TRAINER_COLTON] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_M,
+ .trainerName = _("COLTON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Colton }
+ },
+
+ [TRAINER_MIGUEL_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_M,
+ .trainerName = _("MIGUEL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Miguel2 }
+ },
+
+ [TRAINER_MIGUEL_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_M,
+ .trainerName = _("MIGUEL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Miguel3 }
+ },
+
+ [TRAINER_MIGUEL_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_M,
+ .trainerName = _("MIGUEL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Miguel4 }
+ },
+
+ [TRAINER_MIGUEL_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_M,
+ .trainerName = _("MIGUEL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Miguel5 }
+ },
+
+ [TRAINER_VICTORIA] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_WINSTRATE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_F,
+ .trainerName = _("VICTORIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x3,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Victoria }
+ },
+
+ [TRAINER_VANESSA] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_F,
+ .trainerName = _("VANESSA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.ItemDefaultMoves = gTrainerParty_Vanessa }
+ },
+
+ [TRAINER_BETHANY] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_F,
+ .trainerName = _("BETHANY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.ItemDefaultMoves = gTrainerParty_Bethany }
+ },
+
+ [TRAINER_ISABEL_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_F,
+ .trainerName = _("ISABEL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.ItemDefaultMoves = gTrainerParty_Isabel1 }
+ },
+
+ [TRAINER_ISABEL_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_F,
+ .trainerName = _("ISABEL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.ItemDefaultMoves = gTrainerParty_Isabel2 }
+ },
+
+ [TRAINER_ISABEL_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_F,
+ .trainerName = _("ISABEL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.ItemDefaultMoves = gTrainerParty_Isabel3 }
+ },
+
+ [TRAINER_ISABEL_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_F,
+ .trainerName = _("ISABEL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.ItemDefaultMoves = gTrainerParty_Isabel4 }
+ },
+
+ [TRAINER_ISABEL_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_F,
+ .trainerName = _("ISABEL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.ItemDefaultMoves = gTrainerParty_Isabel5 }
+ },
+
+ [TRAINER_TIMOTHY_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_M,
+ .trainerName = _("TIMOTHY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Timothy1 }
+ },
+
+ [TRAINER_TIMOTHY_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_M,
+ .trainerName = _("TIMOTHY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Timothy2 }
+ },
+
+ [TRAINER_TIMOTHY_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_M,
+ .trainerName = _("TIMOTHY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Timothy3 }
+ },
+
+ [TRAINER_TIMOTHY_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_M,
+ .trainerName = _("TIMOTHY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Timothy4 }
+ },
+
+ [TRAINER_TIMOTHY_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_M,
+ .trainerName = _("TIMOTHY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Timothy5 }
+ },
+
+ [TRAINER_VICKY] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_WINSTRATE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_F,
+ .trainerName = _("VICKY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Vicky }
+ },
+
+ [TRAINER_SHELBY_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_F,
+ .trainerName = _("SHELBY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Shelby1 }
+ },
+
+ [TRAINER_SHELBY_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_F,
+ .trainerName = _("SHELBY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Shelby2 }
+ },
+
+ [TRAINER_SHELBY_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_F,
+ .trainerName = _("SHELBY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Shelby3 }
+ },
+
+ [TRAINER_SHELBY_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_F,
+ .trainerName = _("SHELBY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Shelby4 }
+ },
+
+ [TRAINER_SHELBY_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_F,
+ .trainerName = _("SHELBY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Shelby5 }
+ },
+
+ [TRAINER_CALVIN_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("CALVIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Calvin1 }
+ },
+
+ [TRAINER_BILLY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("BILLY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Billy }
+ },
+
+ [TRAINER_JOSH] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("JOSH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Josh }
+ },
+
+ [TRAINER_TOMMY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("TOMMY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tommy }
+ },
+
+ [TRAINER_JOEY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("JOEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Joey }
+ },
+
+ [TRAINER_BEN] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("BEN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Ben }
+ },
+
+ [TRAINER_QUINCY] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("QUINCY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Quincy }
+ },
+
+ [TRAINER_KATELYNN] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("KATELYNN"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Katelynn }
+ },
+
+ [TRAINER_JAYLEN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("JAYLEN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jaylen }
+ },
+
+ [TRAINER_DILLON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("DILLON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dillon }
+ },
+
+ [TRAINER_CALVIN_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("CALVIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Calvin2 }
+ },
+
+ [TRAINER_CALVIN_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("CALVIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Calvin3 }
+ },
+
+ [TRAINER_CALVIN_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("CALVIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Calvin4 }
+ },
+
+ [TRAINER_CALVIN_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("CALVIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Calvin5 }
+ },
+
+ [TRAINER_EDDIE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("EDDIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Eddie }
+ },
+
+ [TRAINER_ALLEN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("ALLEN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Allen }
+ },
+
+ [TRAINER_TIMMY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("TIMMY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Timmy }
+ },
+
+ [TRAINER_WALLACE] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_CHAMPION,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CHAMPION_WALLACE,
+ .trainerName = _("WALLACE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Wallace }
+ },
+
+ [TRAINER_ANDREW] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("ANDREW"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Andrew }
+ },
+
+ [TRAINER_IVAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("IVAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ivan }
+ },
+
+ [TRAINER_CLAUDE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("CLAUDE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Claude }
+ },
+
+ [TRAINER_ELLIOT_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("ELLIOT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Elliot1 }
+ },
+
+ [TRAINER_NED] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("NED"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ned }
+ },
+
+ [TRAINER_DALE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("DALE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dale }
+ },
+
+ [TRAINER_NOLAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("NOLAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nolan }
+ },
+
+ [TRAINER_BARNY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("BARNY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Barny }
+ },
+
+ [TRAINER_WADE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("WADE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Wade }
+ },
+
+ [TRAINER_CARTER] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("CARTER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Carter }
+ },
+
+ [TRAINER_ELLIOT_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("ELLIOT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Elliot2 }
+ },
+
+ [TRAINER_ELLIOT_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("ELLIOT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Elliot3 }
+ },
+
+ [TRAINER_ELLIOT_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("ELLIOT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Elliot4 }
+ },
+
+ [TRAINER_ELLIOT_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("ELLIOT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x3,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Elliot5 }
+ },
+
+ [TRAINER_RONALD] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("RONALD"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ronald }
+ },
+
+ [TRAINER_JACOB] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
+ .trainerName = _("JACOB"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jacob }
+ },
+
+ [TRAINER_ANTHONY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
+ .trainerName = _("ANTHONY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Anthony }
+ },
+
+ [TRAINER_BENJAMIN_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
+ .trainerName = _("BENJAMIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Benjamin1 }
+ },
+
+ [TRAINER_BENJAMIN_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
+ .trainerName = _("BENJAMIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Benjamin2 }
+ },
+
+ [TRAINER_BENJAMIN_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
+ .trainerName = _("BENJAMIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Benjamin3 }
+ },
+
+ [TRAINER_BENJAMIN_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
+ .trainerName = _("BENJAMIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Benjamin4 }
+ },
+
+ [TRAINER_BENJAMIN_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
+ .trainerName = _("BENJAMIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Benjamin5 }
+ },
+
+ [TRAINER_ABIGAIL_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
+ .trainerName = _("ABIGAIL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Abigail1 }
+ },
+
+ [TRAINER_JASMINE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
+ .trainerName = _("JASMINE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jasmine }
+ },
+
+ [TRAINER_ABIGAIL_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
+ .trainerName = _("ABIGAIL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Abigail2 }
+ },
+
+ [TRAINER_ABIGAIL_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
+ .trainerName = _("ABIGAIL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Abigail3 }
+ },
+
+ [TRAINER_ABIGAIL_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
+ .trainerName = _("ABIGAIL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Abigail4 }
+ },
+
+ [TRAINER_ABIGAIL_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
+ .trainerName = _("ABIGAIL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Abigail5 }
+ },
+
+ [TRAINER_DYLAN_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M,
+ .trainerName = _("DYLAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dylan1 }
+ },
+
+ [TRAINER_DYLAN_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M,
+ .trainerName = _("DYLAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dylan2 }
+ },
+
+ [TRAINER_DYLAN_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M,
+ .trainerName = _("DYLAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dylan3 }
+ },
+
+ [TRAINER_DYLAN_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M,
+ .trainerName = _("DYLAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dylan4 }
+ },
+
+ [TRAINER_DYLAN_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M,
+ .trainerName = _("DYLAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dylan5 }
+ },
+
+ [TRAINER_MARIA_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
+ .trainerName = _("MARIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Maria1 }
+ },
+
+ [TRAINER_MARIA_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
+ .trainerName = _("MARIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Maria2 }
+ },
+
+ [TRAINER_MARIA_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
+ .trainerName = _("MARIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Maria3 }
+ },
+
+ [TRAINER_MARIA_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
+ .trainerName = _("MARIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Maria4 }
+ },
+
+ [TRAINER_MARIA_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
+ .trainerName = _("MARIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Maria5 }
+ },
+
+ [TRAINER_CAMDEN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("CAMDEN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Camden }
+ },
+
+ [TRAINER_DEMETRIUS] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("DEMETRIUS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Demetrius }
+ },
+
+ [TRAINER_ISAIAH_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("ISAIAH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Isaiah1 }
+ },
+
+ [TRAINER_PABLO_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("PABLO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Pablo1 }
+ },
+
+ [TRAINER_CHASE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("CHASE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Chase }
+ },
+
+ [TRAINER_ISAIAH_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("ISAIAH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Isaiah2 }
+ },
+
+ [TRAINER_ISAIAH_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("ISAIAH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Isaiah3 }
+ },
+
+ [TRAINER_ISAIAH_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("ISAIAH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Isaiah4 }
+ },
+
+ [TRAINER_ISAIAH_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("ISAIAH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Isaiah5 }
+ },
+
+ [TRAINER_ISOBEL] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("ISOBEL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Isobel }
+ },
+
+ [TRAINER_DONNY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("DONNY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Donny }
+ },
+
+ [TRAINER_TALIA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("TALIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Talia }
+ },
+
+ [TRAINER_KATELYN_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("KATELYN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Katelyn1 }
+ },
+
+ [TRAINER_ALLISON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("ALLISON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Allison }
+ },
+
+ [TRAINER_KATELYN_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("KATELYN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Katelyn2 }
+ },
+
+ [TRAINER_KATELYN_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("KATELYN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Katelyn3 }
+ },
+
+ [TRAINER_KATELYN_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("KATELYN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Katelyn4 }
+ },
+
+ [TRAINER_KATELYN_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("KATELYN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Katelyn5 }
+ },
+
+ [TRAINER_NICOLAS_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_DRAGON_TAMER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_DRAGON_TAMER,
+ .trainerName = _("NICOLAS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nicolas1 }
+ },
+
+ [TRAINER_NICOLAS_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_DRAGON_TAMER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_DRAGON_TAMER,
+ .trainerName = _("NICOLAS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nicolas2 }
+ },
+
+ [TRAINER_NICOLAS_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_DRAGON_TAMER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_DRAGON_TAMER,
+ .trainerName = _("NICOLAS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nicolas3 }
+ },
+
+ [TRAINER_NICOLAS_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_DRAGON_TAMER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_DRAGON_TAMER,
+ .trainerName = _("NICOLAS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nicolas4 }
+ },
+
+ [TRAINER_NICOLAS_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_DRAGON_TAMER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_DRAGON_TAMER,
+ .trainerName = _("NICOLAS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.ItemDefaultMoves = gTrainerParty_Nicolas5 }
+ },
+
+ [TRAINER_AARON] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_DRAGON_TAMER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_DRAGON_TAMER,
+ .trainerName = _("AARON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Aaron }
+ },
+
+ [TRAINER_PERRY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("PERRY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Perry }
+ },
+
+ [TRAINER_HUGH] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("HUGH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Hugh }
+ },
+
+ [TRAINER_PHIL] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("PHIL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Phil }
+ },
+
+ [TRAINER_JARED] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("JARED"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jared }
+ },
+
+ [TRAINER_HUMBERTO] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("HUMBERTO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Humberto }
+ },
+
+ [TRAINER_PRESLEY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("PRESLEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Presley }
+ },
+
+ [TRAINER_EDWARDO] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("EDWARDO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Edwardo }
+ },
+
+ [TRAINER_COLIN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("COLIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Colin }
+ },
+
+ [TRAINER_ROBERT_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("ROBERT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Robert1 }
+ },
+
+ [TRAINER_BENNY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("BENNY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Benny }
+ },
+
+ [TRAINER_CHESTER] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("CHESTER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Chester }
+ },
+
+ [TRAINER_ROBERT_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("ROBERT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Robert2 }
+ },
+
+ [TRAINER_ROBERT_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("ROBERT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Robert3 }
+ },
+
+ [TRAINER_ROBERT_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("ROBERT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Robert4 }
+ },
+
+ [TRAINER_ROBERT_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("ROBERT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Robert5 }
+ },
+
+ [TRAINER_ALEX] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("ALEX"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Alex }
+ },
+
+ [TRAINER_BECK] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("BECK"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Beck }
+ },
+
+ [TRAINER_YASU] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_NINJA_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_NINJA_BOY,
+ .trainerName = _("YASU"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x3,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Yasu }
+ },
+
+ [TRAINER_TAKASHI] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_NINJA_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_NINJA_BOY,
+ .trainerName = _("TAKASHI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x3,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Takashi }
+ },
+
+ [TRAINER_DIANNE] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("DIANNE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 2,
+ .party = {.ItemCustomMoves = gTrainerParty_Dianne }
+ },
+
+ [TRAINER_JANI] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TUBER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_F,
+ .trainerName = _("JANI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jani }
+ },
+
+ [TRAINER_LAO_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_NINJA_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_NINJA_BOY,
+ .trainerName = _("LAO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 3,
+ .party = {.NoItemCustomMoves = gTrainerParty_Lao1 }
+ },
+
+ [TRAINER_LUNG] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_NINJA_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_NINJA_BOY,
+ .trainerName = _("LUNG"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lung }
+ },
+
+ [TRAINER_LAO_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_NINJA_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_NINJA_BOY,
+ .trainerName = _("LAO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 4,
+ .party = {.NoItemCustomMoves = gTrainerParty_Lao2 }
+ },
+
+ [TRAINER_LAO_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_NINJA_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_NINJA_BOY,
+ .trainerName = _("LAO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 4,
+ .party = {.NoItemCustomMoves = gTrainerParty_Lao3 }
+ },
+
+ [TRAINER_LAO_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_NINJA_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_NINJA_BOY,
+ .trainerName = _("LAO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 4,
+ .party = {.NoItemCustomMoves = gTrainerParty_Lao4 }
+ },
+
+ [TRAINER_LAO_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_NINJA_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_NINJA_BOY,
+ .trainerName = _("LAO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 4,
+ .party = {.ItemCustomMoves = gTrainerParty_Lao5 }
+ },
+
+ [TRAINER_JOCELYN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("JOCELYN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jocelyn }
+ },
+
+ [TRAINER_LAURA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("LAURA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Laura }
+ },
+
+ [TRAINER_CYNDY_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("CYNDY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cyndy1 }
+ },
+
+ [TRAINER_CORA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("CORA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cora }
+ },
+
+ [TRAINER_PAULA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("PAULA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Paula }
+ },
+
+ [TRAINER_CYNDY_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("CYNDY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cyndy2 }
+ },
+
+ [TRAINER_CYNDY_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("CYNDY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cyndy3 }
+ },
+
+ [TRAINER_CYNDY_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("CYNDY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cyndy4 }
+ },
+
+ [TRAINER_CYNDY_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("CYNDY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cyndy5 }
+ },
+
+ [TRAINER_MADELINE_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PARASOL_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_PARASOL_LADY,
+ .trainerName = _("MADELINE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Madeline1 }
+ },
+
+ [TRAINER_CLARISSA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PARASOL_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_PARASOL_LADY,
+ .trainerName = _("CLARISSA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Clarissa }
+ },
+
+ [TRAINER_ANGELICA] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PARASOL_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_PARASOL_LADY,
+ .trainerName = _("ANGELICA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Angelica }
+ },
+
+ [TRAINER_MADELINE_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PARASOL_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_PARASOL_LADY,
+ .trainerName = _("MADELINE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Madeline2 }
+ },
+
+ [TRAINER_MADELINE_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PARASOL_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_PARASOL_LADY,
+ .trainerName = _("MADELINE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Madeline3 }
+ },
+
+ [TRAINER_MADELINE_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PARASOL_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_PARASOL_LADY,
+ .trainerName = _("MADELINE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Madeline4 }
+ },
+
+ [TRAINER_MADELINE_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PARASOL_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_PARASOL_LADY,
+ .trainerName = _("MADELINE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Madeline5 }
+ },
+
+ [TRAINER_BEVERLY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("BEVERLY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Beverly }
+ },
+
+ [TRAINER_IMANI] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("IMANI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Imani }
+ },
+
+ [TRAINER_KYLA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("KYLA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Kyla }
+ },
+
+ [TRAINER_DENISE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("DENISE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Denise }
+ },
+
+ [TRAINER_BETH] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("BETH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Beth }
+ },
+
+ [TRAINER_TARA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("TARA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tara }
+ },
+
+ [TRAINER_MISSY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("MISSY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Missy }
+ },
+
+ [TRAINER_ALICE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("ALICE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Alice }
+ },
+
+ [TRAINER_JENNY_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("JENNY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jenny1 }
+ },
+
+ [TRAINER_GRACE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("GRACE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grace }
+ },
+
+ [TRAINER_TANYA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("TANYA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tanya }
+ },
+
+ [TRAINER_SHARON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("SHARON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Sharon }
+ },
+
+ [TRAINER_NIKKI] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("NIKKI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nikki }
+ },
+
+ [TRAINER_BRENDA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("BRENDA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brenda }
+ },
+
+ [TRAINER_KATIE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("KATIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Katie }
+ },
+
+ [TRAINER_SUSIE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("SUSIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Susie }
+ },
+
+ [TRAINER_KARA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("KARA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Kara }
+ },
+
+ [TRAINER_DANA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("DANA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dana }
+ },
+
+ [TRAINER_SIENNA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("SIENNA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Sienna }
+ },
+
+ [TRAINER_DEBRA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("DEBRA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Debra }
+ },
+
+ [TRAINER_LINDA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("LINDA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Linda }
+ },
+
+ [TRAINER_KAYLEE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("KAYLEE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Kaylee }
+ },
+
+ [TRAINER_LAUREL] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("LAUREL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Laurel }
+ },
+
+ [TRAINER_CARLEE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("CARLEE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Carlee }
+ },
+
+ [TRAINER_JENNY_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("JENNY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jenny2 }
+ },
+
+ [TRAINER_JENNY_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("JENNY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jenny3 }
+ },
+
+ [TRAINER_JENNY_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("JENNY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jenny4 }
+ },
+
+ [TRAINER_JENNY_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("JENNY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jenny5 }
+ },
+
+ [TRAINER_HEIDI] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("HEIDI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Heidi }
+ },
+
+ [TRAINER_BECKY] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("BECKY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Becky }
+ },
+
+ [TRAINER_CAROL] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("CAROL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Carol }
+ },
+
+ [TRAINER_NANCY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("NANCY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nancy }
+ },
+
+ [TRAINER_MARTHA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("MARTHA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Martha }
+ },
+
+ [TRAINER_DIANA_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("DIANA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Diana1 }
+ },
+
+ [TRAINER_CEDRIC] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("CEDRIC"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Cedric }
+ },
+
+ [TRAINER_IRENE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("IRENE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Irene }
+ },
+
+ [TRAINER_DIANA_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("DIANA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Diana2 }
+ },
+
+ [TRAINER_DIANA_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("DIANA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Diana3 }
+ },
+
+ [TRAINER_DIANA_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("DIANA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Diana4 }
+ },
+
+ [TRAINER_DIANA_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("DIANA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Diana5 }
+ },
+
+ [TRAINER_AMY_AND_LIV_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TWINS,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_TWINS,
+ .trainerName = _("AMY & LIV"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_AmyAndLiv1 }
+ },
+
+ [TRAINER_AMY_AND_LIV_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TWINS,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_TWINS,
+ .trainerName = _("AMY & LIV"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_AmyAndLiv2 }
+ },
+
+ [TRAINER_GINA_AND_MIA_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TWINS,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_TWINS,
+ .trainerName = _("GINA & MIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_GinaAndMia1 }
+ },
+
+ [TRAINER_MIU_AND_YUKI] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TWINS,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_TWINS,
+ .trainerName = _("MIU & YUKI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_MiuAndYuki }
+ },
+
+ [TRAINER_AMY_AND_LIV_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TWINS,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_TWINS,
+ .trainerName = _("AMY & LIV"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_AmyAndLiv3 }
+ },
+
+ [TRAINER_GINA_AND_MIA_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_TWINS,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_TWINS,
+ .trainerName = _("GINA & MIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_GinaAndMia2 }
+ },
+
+ [TRAINER_AMY_AND_LIV_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TWINS,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_TWINS,
+ .trainerName = _("AMY & LIV"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_AmyAndLiv4 }
+ },
+
+ [TRAINER_AMY_AND_LIV_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_TWINS,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_TWINS,
+ .trainerName = _("AMY & LIV"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_AmyAndLiv5 }
+ },
+
+ [TRAINER_AMY_AND_LIV_6] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_TWINS,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_TWINS,
+ .trainerName = _("AMY & LIV"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_AmyAndLiv6 }
+ },
+
+ [TRAINER_HUEY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("HUEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Huey }
+ },
+
+ [TRAINER_EDMOND] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("EDMOND"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Edmond }
+ },
+
+ [TRAINER_ERNEST_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("ERNEST"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ernest1 }
+ },
+
+ [TRAINER_DWAYNE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("DWAYNE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dwayne }
+ },
+
+ [TRAINER_PHILLIP] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("PHILLIP"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Phillip }
+ },
+
+ [TRAINER_LEONARD] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("LEONARD"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Leonard }
+ },
+
+ [TRAINER_DUNCAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("DUNCAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Duncan }
+ },
+
+ [TRAINER_ERNEST_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("ERNEST"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ernest2 }
+ },
+
+ [TRAINER_ERNEST_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("ERNEST"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ernest3 }
+ },
+
+ [TRAINER_ERNEST_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("ERNEST"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ernest4 }
+ },
+
+ [TRAINER_ERNEST_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("ERNEST"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ernest5 }
+ },
+
+ [TRAINER_ELI] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("ELI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Eli }
+ },
+
+ [TRAINER_ANNIKA] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_F,
+ .trainerName = _("ANNIKA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.ItemCustomMoves = gTrainerParty_Annika }
+ },
+
+ [TRAINER_JAZMYN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_2,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("JAZMYN"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jazmyn }
+ },
+
+ [TRAINER_JONAS] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_NINJA_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_NINJA_BOY,
+ .trainerName = _("JONAS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Jonas }
+ },
+
+ [TRAINER_KAYLEY] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PARASOL_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_PARASOL_LADY,
+ .trainerName = _("KAYLEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Kayley }
+ },
+
+ [TRAINER_AURON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_M,
+ .trainerName = _("AURON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Auron }
+ },
+
+ [TRAINER_KELVIN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("KELVIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Kelvin }
+ },
+
+ [TRAINER_MARLEY] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("MARLEY"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.ItemCustomMoves = gTrainerParty_Marley }
+ },
+
+ [TRAINER_REYNA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("REYNA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Reyna }
+ },
+
+ [TRAINER_HUDSON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("HUDSON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Hudson }
+ },
+
+ [TRAINER_CONOR] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_M,
+ .trainerName = _("CONOR"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Conor }
+ },
+
+ [TRAINER_EDWIN_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COLLECTOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_COLLECTOR,
+ .trainerName = _("EDWIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Edwin1 }
+ },
+
+ [TRAINER_HECTOR] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COLLECTOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_COLLECTOR,
+ .trainerName = _("HECTOR"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Hector }
+ },
+
+ [TRAINER_TABITHA_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_MAGMA_ADMIN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_ADMIN,
+ .trainerName = _("TABITHA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tabitha1 }
+ },
+
+ [TRAINER_EDWIN_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COLLECTOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_COLLECTOR,
+ .trainerName = _("EDWIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Edwin2 }
+ },
+
+ [TRAINER_EDWIN_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COLLECTOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_COLLECTOR,
+ .trainerName = _("EDWIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Edwin3 }
+ },
+
+ [TRAINER_EDWIN_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COLLECTOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_COLLECTOR,
+ .trainerName = _("EDWIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Edwin4 }
+ },
+
+ [TRAINER_EDWIN_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COLLECTOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_COLLECTOR,
+ .trainerName = _("EDWIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Edwin5 }
+ },
+
+ [TRAINER_WALLY_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_WALLY,
+ .trainerName = _("WALLY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.NoItemCustomMoves = gTrainerParty_Wally1 }
+ },
+
+ [TRAINER_BRENDAN_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan1 }
+ },
+
+ [TRAINER_BRENDAN_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan2 }
+ },
+
+ [TRAINER_BRENDAN_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan3 }
+ },
+
+ [TRAINER_BRENDAN_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0xb,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan4 }
+ },
+
+ [TRAINER_BRENDAN_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan5 }
+ },
+
+ [TRAINER_BRENDAN_6] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan6 }
+ },
+
+ [TRAINER_BRENDAN_7] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan7 }
+ },
+
+ [TRAINER_BRENDAN_8] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan8 }
+ },
+
+ [TRAINER_BRENDAN_9] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan9 }
+ },
+
+ [TRAINER_MAY_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May1 }
+ },
+
+ [TRAINER_MAY_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May2 }
+ },
+
+ [TRAINER_MAY_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May3 }
+ },
+
+ [TRAINER_MAY_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May4 }
+ },
+
+ [TRAINER_MAY_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May5 }
+ },
+
+ [TRAINER_MAY_6] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May6 }
+ },
+
+ [TRAINER_MAY_7] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May7 }
+ },
+
+ [TRAINER_MAY_8] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May8 }
+ },
+
+ [TRAINER_MAY_9] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May9 }
+ },
+
+ [TRAINER_ISAAC_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M,
+ .trainerName = _("ISAAC"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Isaac1 }
+ },
+
+ [TRAINER_DAVIS] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_CATCHER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BUG_CATCHER,
+ .trainerName = _("DAVIS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Davis }
+ },
+
+ [TRAINER_MITCHELL] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("MITCHELL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Mitchell }
+ },
+
+ [TRAINER_ISAAC_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M,
+ .trainerName = _("ISAAC"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Isaac2 }
+ },
+
+ [TRAINER_ISAAC_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M,
+ .trainerName = _("ISAAC"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Isaac3 }
+ },
+
+ [TRAINER_ISAAC_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M,
+ .trainerName = _("ISAAC"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Isaac4 }
+ },
+
+ [TRAINER_ISAAC_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M,
+ .trainerName = _("ISAAC"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Isaac5 }
+ },
+
+ [TRAINER_LYDIA_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
+ .trainerName = _("LYDIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lydia1 }
+ },
+
+ [TRAINER_HALLE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("HALLE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Halle }
+ },
+
+ [TRAINER_GARRISON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("GARRISON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Garrison }
+ },
+
+ [TRAINER_LYDIA_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
+ .trainerName = _("LYDIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lydia2 }
+ },
+
+ [TRAINER_LYDIA_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
+ .trainerName = _("LYDIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lydia3 }
+ },
+
+ [TRAINER_LYDIA_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
+ .trainerName = _("LYDIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lydia4 }
+ },
+
+ [TRAINER_LYDIA_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
+ .trainerName = _("LYDIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lydia5 }
+ },
+
+ [TRAINER_JACKSON_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
+ .trainerName = _("JACKSON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jackson1 }
+ },
+
+ [TRAINER_LORENZO] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
+ .trainerName = _("LORENZO"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lorenzo }
+ },
+
+ [TRAINER_SEBASTIAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
+ .trainerName = _("SEBASTIAN"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Sebastian }
+ },
+
+ [TRAINER_JACKSON_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
+ .trainerName = _("JACKSON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0xb,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jackson2 }
+ },
+
+ [TRAINER_JACKSON_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
+ .trainerName = _("JACKSON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jackson3 }
+ },
+
+ [TRAINER_JACKSON_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
+ .trainerName = _("JACKSON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0xb,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jackson4 }
+ },
+
+ [TRAINER_JACKSON_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_M,
+ .trainerName = _("JACKSON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jackson5 }
+ },
+
+ [TRAINER_CATHERINE_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
+ .trainerName = _("CATHERINE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0xb,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Catherine1 }
+ },
+
+ [TRAINER_JENNA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
+ .trainerName = _("JENNA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0xb,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jenna }
+ },
+
+ [TRAINER_SOPHIA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
+ .trainerName = _("SOPHIA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Sophia }
+ },
+
+ [TRAINER_CATHERINE_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
+ .trainerName = _("CATHERINE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0xb,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Catherine2 }
+ },
+
+ [TRAINER_CATHERINE_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
+ .trainerName = _("CATHERINE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Catherine3 }
+ },
+
+ [TRAINER_CATHERINE_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
+ .trainerName = _("CATHERINE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0xb,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Catherine4 }
+ },
+
+ [TRAINER_CATHERINE_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_RANGER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_POKEMON_RANGER_F,
+ .trainerName = _("CATHERINE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Catherine5 }
+ },
+
+ [TRAINER_JULIO] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M,
+ .trainerName = _("JULIO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Julio }
+ },
+
+ [TRAINER_GRUNT_27] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt27 }
+ },
+
+ [TRAINER_GRUNT_28] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt28 }
+ },
+
+ [TRAINER_GRUNT_29] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt29 }
+ },
+
+ [TRAINER_GRUNT_30] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt30 }
+ },
+
+ [TRAINER_MARC] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("MARC"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Marc }
+ },
+
+ [TRAINER_BRENDEN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("BRENDEN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brenden }
+ },
+
+ [TRAINER_LILITH] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("LILITH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lilith }
+ },
+
+ [TRAINER_CRISTIAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("CRISTIAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cristian }
+ },
+
+ [TRAINER_SYLVIA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HEX_MANIAC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_HEX_MANIAC,
+ .trainerName = _("SYLVIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Sylvia }
+ },
+
+ [TRAINER_LEONARDO] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("LEONARDO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Leonardo }
+ },
+
+ [TRAINER_ATHENA] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("ATHENA"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.ItemCustomMoves = gTrainerParty_Athena }
+ },
+
+ [TRAINER_HARRISON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("HARRISON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Harrison }
+ },
+
+ [TRAINER_GRUNT_31] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt31 }
+ },
+
+ [TRAINER_CLARENCE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("CLARENCE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Clarence }
+ },
+
+ [TRAINER_TERRY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("TERRY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Terry }
+ },
+
+ [TRAINER_NATE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GENTLEMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_GENTLEMAN,
+ .trainerName = _("NATE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nate }
+ },
+
+ [TRAINER_KATHLEEN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HEX_MANIAC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_HEX_MANIAC,
+ .trainerName = _("KATHLEEN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Kathleen }
+ },
+
+ [TRAINER_CLIFFORD] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GENTLEMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_GENTLEMAN,
+ .trainerName = _("CLIFFORD"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Clifford }
+ },
+
+ [TRAINER_NICHOLAS] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("NICHOLAS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Nicholas }
+ },
+
+ [TRAINER_GRUNT_32] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt32 }
+ },
+
+ [TRAINER_GRUNT_33] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt33 }
+ },
+
+ [TRAINER_GRUNT_34] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt34 }
+ },
+
+ [TRAINER_GRUNT_35] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt35 }
+ },
+
+ [TRAINER_GRUNT_36] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt36 }
+ },
+
+ [TRAINER_MACEY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("MACEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Macey }
+ },
+
+ [TRAINER_BRENDAN_10] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan10 }
+ },
+
+ [TRAINER_BRENDAN_11] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan11 }
+ },
+
+ [TRAINER_PAXTON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_M,
+ .trainerName = _("PAXTON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Paxton }
+ },
+
+ [TRAINER_ISABELLA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("ISABELLA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Isabella }
+ },
+
+ [TRAINER_GRUNT_37] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_AQUA,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_AQUA,
+ .trainerPic = TRAINER_PIC_AQUA_GRUNT_F,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt37 }
+ },
+
+ [TRAINER_TABITHA_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_MAGMA_ADMIN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_ADMIN,
+ .trainerName = _("TABITHA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tabitha2 }
+ },
+
+ [TRAINER_JONATHAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("JONATHAN"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0xb,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jonathan }
+ },
+
+ [TRAINER_BRENDAN_12] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan12 }
+ },
+
+ [TRAINER_MAY_10] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0xb,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May10 }
+ },
+
+ [TRAINER_MAXIE_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_MAGMA_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE,
+ .trainerName = _("MAXIE"),
+ .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Maxie1 }
+ },
+
+ [TRAINER_MAXIE_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_MAGMA_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE,
+ .trainerName = _("MAXIE"),
+ .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Maxie2 }
+ },
+
+ [TRAINER_TIANA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_LASS,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LASS,
+ .trainerName = _("TIANA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tiana }
+ },
+
+ [TRAINER_HALEY_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_LASS,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LASS,
+ .trainerName = _("HALEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Haley1 }
+ },
+
+ [TRAINER_JANICE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_LASS,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LASS,
+ .trainerName = _("JANICE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Janice }
+ },
+
+ [TRAINER_VIVI] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_WINSTRATE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LASS,
+ .trainerName = _("VIVI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Vivi }
+ },
+
+ [TRAINER_HALEY_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_LASS,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LASS,
+ .trainerName = _("HALEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Haley2 }
+ },
+
+ [TRAINER_HALEY_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_LASS,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LASS,
+ .trainerName = _("HALEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Haley3 }
+ },
+
+ [TRAINER_HALEY_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_LASS,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LASS,
+ .trainerName = _("HALEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Haley4 }
+ },
+
+ [TRAINER_HALEY_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_LASS,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LASS,
+ .trainerName = _("HALEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Haley5 }
+ },
+
+ [TRAINER_SALLY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_LASS,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LASS,
+ .trainerName = _("SALLY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Sally }
+ },
+
+ [TRAINER_ROBIN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_LASS,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LASS,
+ .trainerName = _("ROBIN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Robin }
+ },
+
+ [TRAINER_ANDREA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_LASS,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LASS,
+ .trainerName = _("ANDREA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Andrea }
+ },
+
+ [TRAINER_CRISSY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_LASS,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LASS,
+ .trainerName = _("CRISSY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Crissy }
+ },
+
+ [TRAINER_RICK] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_CATCHER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BUG_CATCHER,
+ .trainerName = _("RICK"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Rick }
+ },
+
+ [TRAINER_LYLE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_CATCHER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BUG_CATCHER,
+ .trainerName = _("LYLE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lyle }
+ },
+
+ [TRAINER_JOSE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_CATCHER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BUG_CATCHER,
+ .trainerName = _("JOSE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jose }
+ },
+
+ [TRAINER_DOUG] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_CATCHER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BUG_CATCHER,
+ .trainerName = _("DOUG"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Doug }
+ },
+
+ [TRAINER_GREG] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_CATCHER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BUG_CATCHER,
+ .trainerName = _("GREG"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Greg }
+ },
+
+ [TRAINER_KENT] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_CATCHER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BUG_CATCHER,
+ .trainerName = _("KENT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Kent }
+ },
+
+ [TRAINER_JAMES_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_CATCHER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BUG_CATCHER,
+ .trainerName = _("JAMES"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_James1 }
+ },
+
+ [TRAINER_JAMES_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_CATCHER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BUG_CATCHER,
+ .trainerName = _("JAMES"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_James2 }
+ },
+
+ [TRAINER_JAMES_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_CATCHER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BUG_CATCHER,
+ .trainerName = _("JAMES"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_James3 }
+ },
+
+ [TRAINER_JAMES_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_CATCHER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BUG_CATCHER,
+ .trainerName = _("JAMES"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_James4 }
+ },
+
+ [TRAINER_JAMES_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_CATCHER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BUG_CATCHER,
+ .trainerName = _("JAMES"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_James5 }
+ },
+
+ [TRAINER_BRICE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("BRICE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brice }
+ },
+
+ [TRAINER_TRENT_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("TRENT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Trent1 }
+ },
+
+ [TRAINER_LENNY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("LENNY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lenny }
+ },
+
+ [TRAINER_LUCAS_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("LUCAS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lucas1 }
+ },
+
+ [TRAINER_ALAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("ALAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Alan }
+ },
+
+ [TRAINER_CLARK] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("CLARK"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Clark }
+ },
+
+ [TRAINER_ERIC] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("ERIC"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Eric }
+ },
+
+ [TRAINER_LUCAS_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("LUCAS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Lucas2 }
+ },
+
+ [TRAINER_MIKE_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("MIKE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Mike1 }
+ },
+
+ [TRAINER_MIKE_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("MIKE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Mike2 }
+ },
+
+ [TRAINER_TRENT_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("TRENT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Trent2 }
+ },
+
+ [TRAINER_TRENT_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("TRENT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Trent3 }
+ },
+
+ [TRAINER_TRENT_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("TRENT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Trent4 }
+ },
+
+ [TRAINER_TRENT_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("TRENT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Trent5 }
+ },
+
+ [TRAINER_DEZ_AND_LUKE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_YOUNG_COUPLE,
+ .trainerName = _("DEZ & LUKE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_DezAndLuke }
+ },
+
+ [TRAINER_LEA_AND_JED] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_YOUNG_COUPLE,
+ .trainerName = _("LEA & JED"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_LeaAndJed }
+ },
+
+ [TRAINER_KIRA_AND_DAN_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_YOUNG_COUPLE,
+ .trainerName = _("KIRA & DAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_KiraAndDan1 }
+ },
+
+ [TRAINER_KIRA_AND_DAN_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_YOUNG_COUPLE,
+ .trainerName = _("KIRA & DAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_KiraAndDan2 }
+ },
+
+ [TRAINER_KIRA_AND_DAN_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_YOUNG_COUPLE,
+ .trainerName = _("KIRA & DAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_KiraAndDan3 }
+ },
+
+ [TRAINER_KIRA_AND_DAN_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_YOUNG_COUPLE,
+ .trainerName = _("KIRA & DAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_KiraAndDan4 }
+ },
+
+ [TRAINER_KIRA_AND_DAN_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_YOUNG_COUPLE,
+ .trainerName = _("KIRA & DAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_KiraAndDan5 }
+ },
+
+ [TRAINER_JOHANNA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("JOHANNA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Johanna }
+ },
+
+ [TRAINER_GERALD] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("GERALD"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Gerald }
+ },
+
+ [TRAINER_VIVIAN] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("VIVIAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Vivian }
+ },
+
+ [TRAINER_DANIELLE] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("DANIELLE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Danielle }
+ },
+
+ [TRAINER_HIDEO] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_NINJA_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_NINJA_BOY,
+ .trainerName = _("HIDEO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x3,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Hideo }
+ },
+
+ [TRAINER_KEIGO] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_NINJA_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_NINJA_BOY,
+ .trainerName = _("KEIGO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x3,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Keigo }
+ },
+
+ [TRAINER_RILEY] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_NINJA_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_NINJA_BOY,
+ .trainerName = _("RILEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x3,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_Riley }
+ },
+
+ [TRAINER_FLINT] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("FLINT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Flint }
+ },
+
+ [TRAINER_ASHLEY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("ASHLEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ashley }
+ },
+
+ [TRAINER_WALLY_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_WALLY,
+ .trainerName = _("WALLY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Wally2 }
+ },
+
+ [TRAINER_WALLY_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_WALLY,
+ .trainerName = _("WALLY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.NoItemCustomMoves = gTrainerParty_Wally3 }
+ },
+
+ [TRAINER_WALLY_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_WALLY,
+ .trainerName = _("WALLY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.NoItemCustomMoves = gTrainerParty_Wally4 }
+ },
+
+ [TRAINER_WALLY_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_WALLY,
+ .trainerName = _("WALLY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.NoItemCustomMoves = gTrainerParty_Wally5 }
+ },
+
+ [TRAINER_WALLY_6] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_WALLY,
+ .trainerName = _("WALLY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.NoItemCustomMoves = gTrainerParty_Wally6 }
+ },
+
+ [TRAINER_BRENDAN_13] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan13 }
+ },
+
+ [TRAINER_BRENDAN_14] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan14 }
+ },
+
+ [TRAINER_BRENDAN_15] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan15 }
+ },
+
+ [TRAINER_MAY_11] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May11 }
+ },
+
+ [TRAINER_MAY_12] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May12 }
+ },
+
+ [TRAINER_MAY_13] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May13 }
+ },
+
+ [TRAINER_JONAH] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("JONAH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jonah }
+ },
+
+ [TRAINER_HENRY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("HENRY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Henry }
+ },
+
+ [TRAINER_ROGER] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("ROGER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Roger }
+ },
+
+ [TRAINER_ALEXA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("ALEXA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Alexa }
+ },
+
+ [TRAINER_RUBEN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("RUBEN"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Ruben }
+ },
+
+ [TRAINER_KOJI_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("KOJI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Koji1 }
+ },
+
+ [TRAINER_WAYNE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("WAYNE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Wayne }
+ },
+
+ [TRAINER_AIDAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("AIDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Aidan }
+ },
+
+ [TRAINER_REED] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("REED"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Reed }
+ },
+
+ [TRAINER_TISHA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("TISHA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tisha }
+ },
+
+ [TRAINER_TORI_AND_TIA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TWINS,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_TWINS,
+ .trainerName = _("TORI & TIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_ToriAndTia }
+ },
+
+ [TRAINER_KIM_AND_IRIS] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_SR_AND_JR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_SR_AND_JR,
+ .trainerName = _("KIM & IRIS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_KimAndIris }
+ },
+
+ [TRAINER_TYRA_AND_IVY] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_SR_AND_JR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_SR_AND_JR,
+ .trainerName = _("TYRA & IVY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_TyraAndIvy }
+ },
+
+ [TRAINER_MEL_AND_PAUL] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_YOUNG_COUPLE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_YOUNG_COUPLE,
+ .trainerName = _("MEL & PAUL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_MelAndPaul }
+ },
+
+ [TRAINER_JOHN_AND_JAY_1] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_OLD_COUPLE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_OLD_COUPLE,
+ .trainerName = _("JOHN & JAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_JohnAndJay1 }
+ },
+
+ [TRAINER_JOHN_AND_JAY_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_OLD_COUPLE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_OLD_COUPLE,
+ .trainerName = _("JOHN & JAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_JohnAndJay2 }
+ },
+
+ [TRAINER_JOHN_AND_JAY_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_OLD_COUPLE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_OLD_COUPLE,
+ .trainerName = _("JOHN & JAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_JohnAndJay3 }
+ },
+
+ [TRAINER_JOHN_AND_JAY_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_OLD_COUPLE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_OLD_COUPLE,
+ .trainerName = _("JOHN & JAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0xb,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_JohnAndJay4 }
+ },
+
+ [TRAINER_JOHN_AND_JAY_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_OLD_COUPLE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_OLD_COUPLE,
+ .trainerName = _("JOHN & JAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemCustomMoves = gTrainerParty_JohnAndJay5 }
+ },
+
+ [TRAINER_RELI_AND_IAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SIS_AND_BRO,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SIS_AND_BRO,
+ .trainerName = _("RELI & IAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_ReliAndIan }
+ },
+
+ [TRAINER_LILA_AND_ROY_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SIS_AND_BRO,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SIS_AND_BRO,
+ .trainerName = _("LILA & ROY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_LilaAndRoy1 }
+ },
+
+ [TRAINER_LILA_AND_ROY_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SIS_AND_BRO,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SIS_AND_BRO,
+ .trainerName = _("LILA & ROY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_LilaAndRoy2 }
+ },
+
+ [TRAINER_LILA_AND_ROY_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SIS_AND_BRO,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SIS_AND_BRO,
+ .trainerName = _("LILA & ROY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_LilaAndRoy3 }
+ },
+
+ [TRAINER_LILA_AND_ROY_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SIS_AND_BRO,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SIS_AND_BRO,
+ .trainerName = _("LILA & ROY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_LilaAndRoy4 }
+ },
+
+ [TRAINER_LILA_AND_ROY_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SIS_AND_BRO,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SIS_AND_BRO,
+ .trainerName = _("LILA & ROY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_LilaAndRoy5 }
+ },
+
+ [TRAINER_LISA_AND_RAY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SIS_AND_BRO,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SIS_AND_BRO,
+ .trainerName = _("LISA & RAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_LisaAndRay }
+ },
+
+ [TRAINER_CHRIS] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("CHRIS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Chris }
+ },
+
+ [TRAINER_DAWSON] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_RICH_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_RICH_BOY,
+ .trainerName = _("DAWSON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.ItemDefaultMoves = gTrainerParty_Dawson }
+ },
+
+ [TRAINER_SARAH] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LADY,
+ .trainerName = _("SARAH"),
+ .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.ItemDefaultMoves = gTrainerParty_Sarah }
+ },
+
+ [TRAINER_DARIAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("DARIAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Darian }
+ },
+
+ [TRAINER_HAILEY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TUBER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_F,
+ .trainerName = _("HAILEY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Hailey }
+ },
+
+ [TRAINER_CHANDLER] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TUBER_2,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_TUBER_M,
+ .trainerName = _("CHANDLER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Chandler }
+ },
+
+ [TRAINER_KALEB] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM,
+ .trainerClass = TRAINER_CLASS_POKEFAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_TWINS,
+ .trainerPic = TRAINER_PIC_WINSTRATE_M,
+ .trainerName = _("KALEB"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.ItemDefaultMoves = gTrainerParty_Kaleb }
+ },
+
+ [TRAINER_JOSEPH] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("JOSEPH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Joseph }
+ },
+
+ [TRAINER_ALYSSA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F,
+ .trainerName = _("ALYSSA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Alyssa }
+ },
+
+ [TRAINER_MARCOS] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("MARCOS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Marcos }
+ },
+
+ [TRAINER_RHETT] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("RHETT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Rhett }
+ },
+
+ [TRAINER_TYRON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("TYRON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tyron }
+ },
+
+ [TRAINER_CELINA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_AROMA_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_AROMA_LADY,
+ .trainerName = _("CELINA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Celina }
+ },
+
+ [TRAINER_BIANCA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("BIANCA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Bianca }
+ },
+
+ [TRAINER_HAYDEN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_KINDLER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_KINDLER,
+ .trainerName = _("HAYDEN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Hayden }
+ },
+
+ [TRAINER_SOPHIE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("SOPHIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Sophie }
+ },
+
+ [TRAINER_COBY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("COBY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Coby }
+ },
+
+ [TRAINER_LAWRENCE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("LAWRENCE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lawrence }
+ },
+
+ [TRAINER_WYATT] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_POKEMANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_POKEMANIAC,
+ .trainerName = _("WYATT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Wyatt }
+ },
+
+ [TRAINER_ANGELINA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("ANGELINA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Angelina }
+ },
+
+ [TRAINER_KAI] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FISHERMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_FISHERMAN,
+ .trainerName = _("KAI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Kai }
+ },
+
+ [TRAINER_CHARLOTTE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("CHARLOTTE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Charlotte }
+ },
+
+ [TRAINER_DEANDRE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("DEANDRE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Deandre }
+ },
+
+ [TRAINER_GRUNT_38] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt38 }
+ },
+
+ [TRAINER_GRUNT_39] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt39 }
+ },
+
+ [TRAINER_GRUNT_40] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt40 }
+ },
+
+ [TRAINER_GRUNT_41] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt41 }
+ },
+
+ [TRAINER_GRUNT_42] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt42 }
+ },
+
+ [TRAINER_GRUNT_43] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt43 }
+ },
+
+ [TRAINER_GRUNT_44] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt44 }
+ },
+
+ [TRAINER_GRUNT_45] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt45 }
+ },
+
+ [TRAINER_GRUNT_46] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt46 }
+ },
+
+ [TRAINER_GRUNT_47] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt47 }
+ },
+
+ [TRAINER_GRUNT_48] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt48 }
+ },
+
+ [TRAINER_GRUNT_49] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt49 }
+ },
+
+ [TRAINER_GRUNT_50] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt50 }
+ },
+
+ [TRAINER_GRUNT_51] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt51 }
+ },
+
+ [TRAINER_GRUNT_52] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt52 }
+ },
+
+ [TRAINER_GRUNT_53] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TEAM_MAGMA,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F,
+ .trainerName = _("GRUNT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Grunt53 }
+ },
+
+ [TRAINER_TABITHA_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_MAGMA_ADMIN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_ADMIN,
+ .trainerName = _("TABITHA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 4,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tabitha3 }
+ },
+
+ [TRAINER_DARCY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("DARCY"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Darcy }
+ },
+
+ [TRAINER_MAXIE_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_MAGMA_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MAGMA,
+ .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE,
+ .trainerName = _("MAXIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Maxie3 }
+ },
+
+ [TRAINER_PETE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_M,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_M,
+ .trainerName = _("PETE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Pete }
+ },
+
+ [TRAINER_ISABELLE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SWIMMER_F,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMER_F,
+ .trainerName = _("ISABELLE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Isabelle }
+ },
+
+ [TRAINER_ANDRES_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("ANDRES"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Andres1 }
+ },
+
+ [TRAINER_JOSUE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("JOSUE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Josue }
+ },
+
+ [TRAINER_CAMRON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("CAMRON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Camron }
+ },
+
+ [TRAINER_CORY_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("CORY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cory1 }
+ },
+
+ [TRAINER_CAROLINA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("CAROLINA"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Carolina }
+ },
+
+ [TRAINER_ELIJAH] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("ELIJAH"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Elijah }
+ },
+
+ [TRAINER_CELIA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PICNICKER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_GIRL,
+ .trainerPic = TRAINER_PIC_PICNICKER,
+ .trainerName = _("CELIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Celia }
+ },
+
+ [TRAINER_BRYAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("BRYAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Bryan }
+ },
+
+ [TRAINER_BRANDEN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_CAMPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_CAMPER,
+ .trainerName = _("BRANDEN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Branden }
+ },
+
+ [TRAINER_BRYANT] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_KINDLER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_KINDLER,
+ .trainerName = _("BRYANT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Bryant }
+ },
+
+ [TRAINER_SHAYLA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_AROMA_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_AROMA_LADY,
+ .trainerName = _("SHAYLA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Shayla }
+ },
+
+ [TRAINER_KYRA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
+ .trainerName = _("KYRA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Kyra }
+ },
+
+ [TRAINER_JAIDEN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_NINJA_BOY,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_NINJA_BOY,
+ .trainerName = _("JAIDEN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Jaiden }
+ },
+
+ [TRAINER_ALIX] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("ALIX"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Alix }
+ },
+
+ [TRAINER_HELENE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("HELENE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Helene }
+ },
+
+ [TRAINER_MARLENE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("MARLENE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Marlene }
+ },
+
+ [TRAINER_DEVAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("DEVAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Devan }
+ },
+
+ [TRAINER_JOHNSON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_YOUNGSTER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_YOUNGSTER,
+ .trainerName = _("JOHNSON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Johnson }
+ },
+
+ [TRAINER_MELINA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F,
+ .trainerName = _("MELINA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Melina }
+ },
+
+ [TRAINER_BRANDI] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("BRANDI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brandi }
+ },
+
+ [TRAINER_AISHA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("AISHA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Aisha }
+ },
+
+ [TRAINER_MAKAYLA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_EXPERT,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_EXPERT_F,
+ .trainerName = _("MAKAYLA"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Makayla }
+ },
+
+ [TRAINER_FABIAN] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("FABIAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Fabian }
+ },
+
+ [TRAINER_DAYTON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_KINDLER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_KINDLER,
+ .trainerName = _("DAYTON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Dayton }
+ },
+
+ [TRAINER_RACHEL] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PARASOL_LADY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_PARASOL_LADY,
+ .trainerName = _("RACHEL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Rachel }
+ },
+
+ [TRAINER_LEONEL] =
+ {
+ .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_M,
+ .trainerName = _("LEONEL"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemCustomMoves = gTrainerParty_Leonel }
+ },
+
+ [TRAINER_CALLIE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BATTLE_GIRL,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BATTLE_GIRL,
+ .trainerName = _("CALLIE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Callie }
+ },
+
+ [TRAINER_CALE] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BUG_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_BUG_MANIAC,
+ .trainerName = _("CALE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cale }
+ },
+
+ [TRAINER_MYLES] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M,
+ .trainerName = _("MYLES"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Myles }
+ },
+
+ [TRAINER_PAT] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
+ .trainerName = _("PAT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Pat }
+ },
+
+ [TRAINER_CRISTIN_1] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("CRISTIN"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cristin1 }
+ },
+
+ [TRAINER_MAY_14] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May14 }
+ },
+
+ [TRAINER_MAY_15] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May15 }
+ },
+
+ [TRAINER_ROXANNE_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_ROXANNE,
+ .trainerName = _("ROXANNE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.ItemCustomMoves = gTrainerParty_Roxanne2 }
+ },
+
+ [TRAINER_ROXANNE_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_ROXANNE,
+ .trainerName = _("ROXANNE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Roxanne3 }
+ },
+
+ [TRAINER_ROXANNE_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_ROXANNE,
+ .trainerName = _("ROXANNE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Roxanne4 }
+ },
+
+ [TRAINER_ROXANNE_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_ROXANNE,
+ .trainerName = _("ROXANNE"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Roxanne5 }
+ },
+
+ [TRAINER_BRAWLY_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_BRAWLY,
+ .trainerName = _("BRAWLY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.ItemCustomMoves = gTrainerParty_Brawly2 }
+ },
+
+ [TRAINER_BRAWLY_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_BRAWLY,
+ .trainerName = _("BRAWLY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.ItemCustomMoves = gTrainerParty_Brawly3 }
+ },
+
+ [TRAINER_BRAWLY_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_BRAWLY,
+ .trainerName = _("BRAWLY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Brawly4 }
+ },
+
+ [TRAINER_BRAWLY_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_BRAWLY,
+ .trainerName = _("BRAWLY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Brawly5 }
+ },
+
+ [TRAINER_WATTSON_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_WATTSON,
+ .trainerName = _("WATTSON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.ItemCustomMoves = gTrainerParty_Wattson2 }
+ },
+
+ [TRAINER_WATTSON_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_WATTSON,
+ .trainerName = _("WATTSON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Wattson3 }
+ },
+
+ [TRAINER_WATTSON_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_WATTSON,
+ .trainerName = _("WATTSON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Wattson4 }
+ },
+
+ [TRAINER_WATTSON_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_WATTSON,
+ .trainerName = _("WATTSON"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Wattson5 }
+ },
+
+ [TRAINER_FLANNERY_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_FLANNERY,
+ .trainerName = _("FLANNERY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.ItemCustomMoves = gTrainerParty_Flannery2 }
+ },
+
+ [TRAINER_FLANNERY_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_FLANNERY,
+ .trainerName = _("FLANNERY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Flannery3 }
+ },
+
+ [TRAINER_FLANNERY_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_FLANNERY,
+ .trainerName = _("FLANNERY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Flannery4 }
+ },
+
+ [TRAINER_FLANNERY_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_FLANNERY,
+ .trainerName = _("FLANNERY"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Flannery5 }
+ },
+
+ [TRAINER_NORMAN_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_NORMAN,
+ .trainerName = _("NORMAN"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 4,
+ .party = {.ItemCustomMoves = gTrainerParty_Norman2 }
+ },
+
+ [TRAINER_NORMAN_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_NORMAN,
+ .trainerName = _("NORMAN"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Norman3 }
+ },
+
+ [TRAINER_NORMAN_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_NORMAN,
+ .trainerName = _("NORMAN"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Norman4 }
+ },
+
+ [TRAINER_NORMAN_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_NORMAN,
+ .trainerName = _("NORMAN"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Norman5 }
+ },
+
+ [TRAINER_WINONA_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_WINONA,
+ .trainerName = _("WINONA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x17,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Winona2 }
+ },
+
+ [TRAINER_WINONA_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_WINONA,
+ .trainerName = _("WINONA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x17,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Winona3 }
+ },
+
+ [TRAINER_WINONA_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_WINONA,
+ .trainerName = _("WINONA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x17,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Winona4 }
+ },
+
+ [TRAINER_WINONA_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_WINONA,
+ .trainerName = _("WINONA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x17,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Winona5 }
+ },
+
+ [TRAINER_TATE_AND_LIZA_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA,
+ .trainerName = _("TATE&LIZA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_TateAndLiza2 }
+ },
+
+ [TRAINER_TATE_AND_LIZA_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA,
+ .trainerName = _("TATE&LIZA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_TateAndLiza3 }
+ },
+
+ [TRAINER_TATE_AND_LIZA_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA,
+ .trainerName = _("TATE&LIZA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_TateAndLiza4 }
+ },
+
+ [TRAINER_TATE_AND_LIZA_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA,
+ .trainerName = _("TATE&LIZA"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_TateAndLiza5 }
+ },
+
+ [TRAINER_JUAN_2] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_JUAN,
+ .trainerName = _("JUAN"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Juan2 }
+ },
+
+ [TRAINER_JUAN_3] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_JUAN,
+ .trainerName = _("JUAN"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 5,
+ .party = {.ItemCustomMoves = gTrainerParty_Juan3 }
+ },
+
+ [TRAINER_JUAN_4] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_JUAN,
+ .trainerName = _("JUAN"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Juan4 }
+ },
+
+ [TRAINER_JUAN_5] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_LEADER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEADER_JUAN,
+ .trainerName = _("JUAN"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE},
+ .doubleBattle = TRUE,
+ .aiFlags = 0x7,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Juan5 }
+ },
+
+ [TRAINER_ANGELO] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_BUG_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS,
+ .trainerPic = TRAINER_PIC_BUG_MANIAC,
+ .trainerName = _("ANGELO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.ItemCustomMoves = gTrainerParty_Angelo }
+ },
+
+ [TRAINER_DARIUS] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BIRD_KEEPER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_BIRD_KEEPER,
+ .trainerName = _("DARIUS"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Darius }
+ },
+
+ [TRAINER_STEVEN] =
+ {
+ .partyFlags = F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_STEVEN,
+ .trainerName = _("STEVEN"),
+ .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 6,
+ .party = {.ItemCustomMoves = gTrainerParty_Steven }
+ },
+
+ [TRAINER_ANABEL] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SALON_MAIDEN,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SALON_MAIDEN_ANABEL,
+ .trainerName = _("ANABEL"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Anabel }
+ },
+
+ [TRAINER_TUCKER] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_DOME_ACE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_DOME_ACE_TUCKER,
+ .trainerName = _("TUCKER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Tucker }
+ },
+
+ [TRAINER_SPENSER] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PALACE_MAVEN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_PALACE_MAVEN_SPENSER,
+ .trainerName = _("SPENSER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Spenser }
+ },
+
+ [TRAINER_GRETA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_ARENA_TYCOON,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_ARENA_TYCOON_GRETA,
+ .trainerName = _("GRETA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Greta }
+ },
+
+ [TRAINER_NOLAND] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_FACTORY_HEAD,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_FACTORY_HEAD_NOLAND,
+ .trainerName = _("NOLAND"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Noland }
+ },
+
+ [TRAINER_LUCY] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PIKE_QUEEN,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_PIKE_QUEEN_LUCY,
+ .trainerName = _("LUCY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Lucy }
+ },
+
+ [TRAINER_BRANDON] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PYRAMID_KING,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_PYRAMID_KING_BRANDON,
+ .trainerName = _("BRANDON"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brandon }
+ },
+
+ [TRAINER_ANDRES_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("ANDRES"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Andres2 }
+ },
+
+ [TRAINER_ANDRES_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("ANDRES"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Andres3 }
+ },
+
+ [TRAINER_ANDRES_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("ANDRES"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Andres4 }
+ },
+
+ [TRAINER_ANDRES_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_RUIN_MANIAC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_RUIN_MANIAC,
+ .trainerName = _("ANDRES"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Andres5 }
+ },
+
+ [TRAINER_CORY_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("CORY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cory2 }
+ },
+
+ [TRAINER_CORY_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("CORY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cory3 }
+ },
+
+ [TRAINER_CORY_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("CORY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cory4 }
+ },
+
+ [TRAINER_CORY_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_SAILOR,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_SAILOR,
+ .trainerName = _("CORY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cory5 }
+ },
+
+ [TRAINER_PABLO_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("PABLO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Pablo2 }
+ },
+
+ [TRAINER_PABLO_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("PABLO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Pablo3 }
+ },
+
+ [TRAINER_PABLO_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("PABLO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Pablo4 }
+ },
+
+ [TRAINER_PABLO_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_TRIATHLETE,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_SWIMMER,
+ .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("PABLO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Pablo5 }
+ },
+
+ [TRAINER_KOJI_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("KOJI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Koji2 }
+ },
+
+ [TRAINER_KOJI_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("KOJI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Koji3 }
+ },
+
+ [TRAINER_KOJI_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("KOJI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Koji4 }
+ },
+
+ [TRAINER_KOJI_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_BLACK_BELT,
+ .trainerName = _("KOJI"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Koji5 }
+ },
+
+ [TRAINER_CRISTIN_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("CRISTIN"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cristin2 }
+ },
+
+ [TRAINER_CRISTIN_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("CRISTIN"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cristin3 }
+ },
+
+ [TRAINER_CRISTIN_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("CRISTIN"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cristin4 }
+ },
+
+ [TRAINER_CRISTIN_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_COOLTRAINER_1,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL,
+ .trainerPic = TRAINER_PIC_COOL_TRAINER_F,
+ .trainerName = _("CRISTIN"),
+ .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Cristin5 }
+ },
+
+ [TRAINER_FERNANDO_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("FERNANDO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Fernando2 }
+ },
+
+ [TRAINER_FERNANDO_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("FERNANDO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Fernando3 }
+ },
+
+ [TRAINER_FERNANDO_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("FERNANDO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Fernando4 }
+ },
+
+ [TRAINER_FERNANDO_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GUITARIST,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_GUITARIST,
+ .trainerName = _("FERNANDO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Fernando5 }
+ },
+
+ [TRAINER_SAWYER_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("SAWYER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Sawyer2 }
+ },
+
+ [TRAINER_SAWYER_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("SAWYER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Sawyer3 }
+ },
+
+ [TRAINER_SAWYER_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("SAWYER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Sawyer4 }
+ },
+
+ [TRAINER_SAWYER_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_HIKER,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_HIKER,
+ .trainerPic = TRAINER_PIC_HIKER,
+ .trainerName = _("SAWYER"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x7,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Sawyer5 }
+ },
+
+ [TRAINER_GABRIELLE_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
+ .trainerName = _("GABRIELLE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Gabrielle2 }
+ },
+
+ [TRAINER_GABRIELLE_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
+ .trainerName = _("GABRIELLE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Gabrielle3 }
+ },
+
+ [TRAINER_GABRIELLE_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
+ .trainerName = _("GABRIELLE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Gabrielle4 }
+ },
+
+ [TRAINER_GABRIELLE_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_BREEDER,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F,
+ .trainerName = _("GABRIELLE"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 6,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Gabrielle5 }
+ },
+
+ [TRAINER_THALIA_2] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("THALIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Thalia2 }
+ },
+
+ [TRAINER_THALIA_3] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("THALIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Thalia3 }
+ },
+
+ [TRAINER_THALIA_4] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("THALIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Thalia4 }
+ },
+
+ [TRAINER_THALIA_5] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_BEAUTY,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_FEMALE,
+ .trainerPic = TRAINER_PIC_BEAUTY,
+ .trainerName = _("THALIA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x1,
+ .partySize = 3,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Thalia5 }
+ },
+
+ [TRAINER_MARIELA] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_F,
+ .trainerName = _("MARIELA"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Mariela }
+ },
+
+ [TRAINER_ALVARO] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PSYCHIC,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_INTENSE,
+ .trainerPic = TRAINER_PIC_PSYCHIC_M,
+ .trainerName = _("ALVARO"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 2,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Alvaro }
+ },
+
+ [TRAINER_EVERETT] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_GENTLEMAN,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_RICH,
+ .trainerPic = TRAINER_PIC_GENTLEMAN,
+ .trainerName = _("EVERETT"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Everett }
+ },
+
+ [TRAINER_RED] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_RED,
+ .trainerName = _("RED"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Red }
+ },
+
+ [TRAINER_LEAF] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_LEAF,
+ .trainerName = _("LEAF"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Leaf }
+ },
+
+ [TRAINER_BRENDAN_16] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_4,
+ .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_RUBY_SAPPHIRE_BRENDAN,
+ .trainerName = _("BRENDAN"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_Brendan16 }
+ },
+
+ [TRAINER_MAY_16] =
+ {
+ .partyFlags = 0,
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_4,
+ .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE,
+ .trainerPic = TRAINER_PIC_RUBY_SAPPHIRE_MAY,
+ .trainerName = _("MAY"),
+ .items = {ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE},
+ .doubleBattle = FALSE,
+ .aiFlags = 0x0,
+ .partySize = 1,
+ .party = {.NoItemDefaultMoves = gTrainerParty_May16 }
+ },
+};
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 575050ca5..64ec47537 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -57,12 +57,10 @@ extern const u8 gText_NickHatchPrompt[];
extern u8 sav1_map_get_name(void);
extern void TVShowConvertInternationalString(u8* str1, u8* str2, u8);
-extern void sub_806A068(u16, u8);
extern void FadeScreen(u8, u8);
extern void overworld_free_bg_tilemaps(void);
extern void sub_80AF168(void);
extern void ScanlineEffect_Stop(void);
-extern void CB2_ReturnToField(void);
extern void play_some_sound(void);
extern void DoNamingScreen(u8, const u8*, u16, u8, u32, MainCallback);
extern u16 sub_80D22D0(void);
@@ -437,8 +435,8 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc
}
break;
case 1:
- sub_806A068(GetMonSpritePalStruct(mon)->tag, r5);
- spriteID = CreateSprite(&gUnknown_0202499C, 120, 75, 6);
+ SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, r5);
+ spriteID = CreateSprite(&gMultiuseSpriteTemplate, 120, 75, 6);
gSprites[spriteID].invisible = 1;
gSprites[spriteID].callback = SpriteCallbackDummy;
break;
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index 8095c23ba..5fdceb4c3 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -21,6 +21,7 @@
#include "sprite.h"
#include "trainer_see.h"
#include "util.h"
+#include "constants/event_object_movement_constants.h"
#include "constants/event_objects.h"
// this file was known as evobjmv.c in Game Freak's original source
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index 1d350c83a..f039c5f24 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -62,7 +62,6 @@ extern const u8 gText_CommunicationStandby5[];
extern void sub_80356D0(void);
extern void sub_807B154(void);
-extern void sub_806A068(u16, u8);
extern void sub_807F19C(void);
extern void sub_807B140(void);
extern void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
@@ -280,9 +279,9 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo,
pokePal = GetMonSpritePalStructFromOtIdPersonality(currSpecies, trainerId, personality);
LoadCompressedPalette(pokePal->data, 0x110, 0x20);
- sub_806A068(currSpecies, 1);
- gUnknown_0202499C.affineAnims = gDummySpriteAffineAnimTable;
- sEvoStructPtr->preEvoSpriteID = ID = CreateSprite(&gUnknown_0202499C, 120, 64, 30);
+ SetMultiuseSpriteTemplateToPokemon(currSpecies, 1);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->preEvoSpriteID = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
gSprites[ID].callback = SpriteCallbackDummy_2;
gSprites[ID].oam.paletteNum = 1;
@@ -295,9 +294,9 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo,
pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality);
LoadCompressedPalette(pokePal->data, 0x120, 0x20);
- sub_806A068(speciesToEvolve, 3);
- gUnknown_0202499C.affineAnims = gDummySpriteAffineAnimTable;
- sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gUnknown_0202499C, 120, 64, 30);
+ SetMultiuseSpriteTemplateToPokemon(speciesToEvolve, 3);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
gSprites[ID].callback = SpriteCallbackDummy_2;
gSprites[ID].oam.paletteNum = 2;
gSprites[ID].invisible = 1;
@@ -373,9 +372,9 @@ static void CB2_EvolutionSceneLoadGraphics(void)
LoadCompressedPalette(pokePal->data, 0x120, 0x20);
- sub_806A068(postEvoSpecies, 3);
- gUnknown_0202499C.affineAnims = gDummySpriteAffineAnimTable;
- sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gUnknown_0202499C, 120, 64, 30);
+ SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, 3);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
gSprites[ID].callback = SpriteCallbackDummy_2;
gSprites[ID].oam.paletteNum = 2;
@@ -450,9 +449,9 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
{
u8 ID;
- sub_806A068(postEvoSpecies, 1);
- gUnknown_0202499C.affineAnims = gDummySpriteAffineAnimTable;
- sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gUnknown_0202499C, 120, 64, 30);
+ SetMultiuseSpriteTemplateToPokemon(postEvoSpecies, 1);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
gSprites[ID].callback = SpriteCallbackDummy_2;
gSprites[ID].oam.paletteNum = 2;
@@ -509,9 +508,9 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri
pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality);
LoadCompressedPalette(pokePal->data, 0x120, 0x20);
- sub_806A068(speciesToEvolve, 1);
- gUnknown_0202499C.affineAnims = gDummySpriteAffineAnimTable;
- sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gUnknown_0202499C, 120, 64, 30);
+ SetMultiuseSpriteTemplateToPokemon(speciesToEvolve, 1);
+ gMultiuseSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoStructPtr->postEvoSpriteID = ID = CreateSprite(&gMultiuseSpriteTemplate, 120, 64, 30);
gSprites[ID].callback = SpriteCallbackDummy_2;
gSprites[ID].oam.paletteNum = 2;
@@ -635,7 +634,7 @@ static void Task_EvolutionScene(u8 taskID)
if (!gPaletteFade.active)
{
StringExpandPlaceholders(gStringVar4, gText_PkmnIsEvolving);
- BattleHandleAddTextPrinter(gStringVar4, 0);
+ BattlePutTextOnWindow(gStringVar4, 0);
gTasks[taskID].tState++;
}
break;
@@ -731,7 +730,7 @@ static void Task_EvolutionScene(u8 taskID)
if (IsCryFinished())
{
StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
- BattleHandleAddTextPrinter(gStringVar4, 0);
+ BattlePutTextOnWindow(gStringVar4, 0);
PlayBGM(MUS_FANFA5);
gTasks[taskID].tState++;
SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies));
@@ -818,7 +817,7 @@ static void Task_EvolutionScene(u8 taskID)
else // Fire Red leftover probably
StringExpandPlaceholders(gStringVar4, gText_PkmnStoppedEvolving);
- BattleHandleAddTextPrinter(gStringVar4, 0);
+ BattlePutTextOnWindow(gStringVar4, 0);
gTasks[taskID].tEvoWasStopped = TRUE;
gTasks[taskID].tState = 15;
}
@@ -829,7 +828,7 @@ static void Task_EvolutionScene(u8 taskID)
BufferMoveToLearnIntoBattleTextBuff2();
PlayFanfare(MUS_FANFA1);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
gTasks[taskID].tState++;
}
@@ -846,7 +845,7 @@ static void Task_EvolutionScene(u8 taskID)
{
BufferMoveToLearnIntoBattleTextBuff2();
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_ID_ADDER]);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tLearnMoveState++;
}
break;
@@ -854,7 +853,7 @@ static void Task_EvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_ID_ADDER]);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tLearnMoveState++;
}
break;
@@ -862,7 +861,7 @@ static void Task_EvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_ID_ADDER]);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tData7 = 5;
gTasks[taskID].tData8 = 10;
gTasks[taskID].tLearnMoveState++;
@@ -871,7 +870,7 @@ static void Task_EvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
HandleBattleWindow(0x18, 8, 0x1D, 0xD, 0);
- BattleHandleAddTextPrinter(gText_BattleYesNoChoice, 0xC);
+ BattlePutTextOnWindow(gText_BattleYesNoChoice, 0xC);
gTasks[taskID].tLearnMoveState++;
sEvoCursorPos = 0;
BattleCreateYesNoCursorAt(0);
@@ -939,7 +938,7 @@ static void Task_EvolutionScene(u8 taskID)
if (IsHMMove2(move))
{
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_ID_ADDER]);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tLearnMoveState = 12;
}
else
@@ -955,14 +954,14 @@ static void Task_EvolutionScene(u8 taskID)
break;
case 7:
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_ID_ADDER]);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tLearnMoveState++;
break;
case 8:
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_ID_ADDER]);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tLearnMoveState++;
}
break;
@@ -970,20 +969,20 @@ static void Task_EvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_ID_ADDER]);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tState = 20;
}
break;
case 10:
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tData7 = 11;
gTasks[taskID].tData8 = 0;
gTasks[taskID].tLearnMoveState = 3;
break;
case 11:
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]);
- BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
+ BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gTasks[taskID].tState = 15;
break;
case 12:
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 2561bceb7..f57c4b48f 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -380,7 +380,7 @@ u8 MapGridGetZCoordAt(int x, int y)
{
return 0;
}
-
+
return block >> 12;
}
@@ -559,7 +559,7 @@ void mapdata_from_sav2(void)
a0 = 1;
else
a0 = -1;
-
+
for (j = x; j < x + 15; j++)
{
if (!sub_8088BF0(&gUnknown_02032318[j + width * i], width, a0))
@@ -922,7 +922,7 @@ bool8 sub_8088BF0(u16* a0, u16 a1, u8 a2)
{
if (a2 == 0xFF)
return FALSE;
-
+
if (a2 == 0)
a0 -= a1;
else
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index e6b20f807..f5c4ba491 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -33,12 +33,12 @@ struct HallofFameMon
u32 personality;
u16 species:9;
u16 lvl:7;
- u8 nick[10];
+ u8 nick[POKEMON_NAME_LENGTH];
};
struct HallofFameTeam
{
- struct HallofFameMon mon[6];
+ struct HallofFameMon mon[PARTY_SIZE];
};
struct HofGfx
@@ -49,11 +49,11 @@ struct HofGfx
u8 tilemap2[0x1000];
};
+static EWRAM_DATA u32 sUnknown_0203BCD4 = 0;
static EWRAM_DATA struct HallofFameTeam *sHofMonPtr = NULL;
static EWRAM_DATA struct HofGfx *sHofGfxPtr = NULL;
extern bool8 gHasHallOfFameRecords;
-extern u32 gUnknown_0203BCD4;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern MainCallback gGameContinueCallback;
extern u32 gDamagedSaveSectors;
@@ -490,7 +490,7 @@ static void Task_Hof_InitMonData(u8 taskId)
}
}
- gUnknown_0203BCD4 = 0;
+ sUnknown_0203BCD4 = 0;
gTasks[taskId].tDisplayedMonId = 0;
gTasks[taskId].tPlayerSpriteID = 0xFF;
@@ -648,11 +648,11 @@ static void Task_Hof_TryDisplayAnotherMon(u8 taskId)
}
else
{
- gUnknown_0203BCD4 |= (0x10000 << gSprites[gTasks[taskId].tMonSpriteId(currPokeID)].oam.paletteNum);
+ sUnknown_0203BCD4 |= (0x10000 << gSprites[gTasks[taskId].tMonSpriteId(currPokeID)].oam.paletteNum);
if (gTasks[taskId].tDisplayedMonId <= 4 && currMon[1].species != SPECIES_NONE) // there is another pokemon to display
{
gTasks[taskId].tDisplayedMonId++;
- BeginNormalPaletteFade(gUnknown_0203BCD4, 0, 12, 12, 0x63B0);
+ BeginNormalPaletteFade(sUnknown_0203BCD4, 0, 12, 12, 0x63B0);
gSprites[gTasks[taskId].tMonSpriteId(currPokeID)].oam.priority = 1;
gTasks[taskId].func = Task_Hof_DisplayMon;
}
@@ -696,7 +696,7 @@ static void sub_8173DC0(u8 taskId)
if (gTasks[taskId].tMonSpriteId(i) != 0xFF)
gSprites[gTasks[taskId].tMonSpriteId(i)].oam.priority = 1;
}
- BeginNormalPaletteFade(gUnknown_0203BCD4, 0, 12, 12, 0x63B0);
+ BeginNormalPaletteFade(sUnknown_0203BCD4, 0, 12, 12, 0x63B0);
FillWindowPixelBuffer(0, 0);
CopyWindowToVram(0, 3);
gTasks[taskId].tFrameCount = 7;
@@ -923,7 +923,7 @@ static void Task_HofPC_DrawSpritesPrintText(u8 taskId)
savedTeams++;
currMon = &savedTeams->mon[0];
- gUnknown_0203BCD4 = 0;
+ sUnknown_0203BCD4 = 0;
gTasks[taskId].tCurrMonId = 0;
gTasks[taskId].tMonNo = 0;
@@ -998,8 +998,8 @@ static void Task_HofPC_PrintMonInfo(u8 taskId)
currMonID = gTasks[taskId].tMonSpriteId(gTasks[taskId].tCurrMonId);
gSprites[currMonID].oam.priority = 0;
- gUnknown_0203BCD4 = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000;
- BlendPalettesUnfaded(gUnknown_0203BCD4, 0xC, 0x63B0);
+ sUnknown_0203BCD4 = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000;
+ BlendPalettesUnfaded(sUnknown_0203BCD4, 0xC, 0x63B0);
currMon = &savedTeams->mon[gTasks[taskId].tCurrMonId];
if (currMon->species != SPECIES_EGG)
diff --git a/src/item.c b/src/item.c
index 30710d08a..c94f29910 100644
--- a/src/item.c
+++ b/src/item.c
@@ -1024,7 +1024,7 @@ bool8 RemovePyramidBagItem(u16 itemId, u16 count)
static u16 SanitizeItemId(u16 itemId)
{
- if (itemId >= ITEM_LAST_ID + 1)
+ if (itemId >= ITEMS_COUNT)
return ITEM_NONE;
else
return itemId;
diff --git a/src/item_icon.c b/src/item_icon.c
index d6fedf892..68ec1daf0 100644
--- a/src/item_icon.c
+++ b/src/item_icon.c
@@ -162,7 +162,7 @@ const void *GetItemIconPicOrPalette(u16 itemId, u8 which)
{
if (itemId == 0xFFFF)
itemId = ITEM_FIELD_ARROW;
- else if (itemId > ITEM_LAST_ID)
+ else if (itemId >= ITEMS_COUNT)
itemId = 0;
return gItemIconTable[itemId][which];
diff --git a/src/item_menu.c b/src/item_menu.c
index d1179b18e..d134e6375 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -2104,7 +2104,7 @@ void setup_bag_menu_textboxes(void)
InitWindows(gUnknown_08614174);
DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 1, -32);
- copy_textbox_border_tile_patterns_to_vram(0, 10, -48);
+ LoadMessageBoxGfx(0, 10, -48);
sub_819A2BC(-64, 1);
LoadPalette(&gUnknown_0860F074, 0xF0, 0x20);
for (i = 0; i < 3; i++)
diff --git a/src/item_use.c b/src/item_use.c
index 6bdfe1c54..9031338dd 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -5,6 +5,7 @@
#include "berry.h"
#include "bike.h"
#include "coins.h"
+#include "constants/bg_event_constants.h"
#include "constants/flags.h"
#include "constants/items.h"
#include "constants/songs.h"
@@ -371,7 +372,7 @@ bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *events, u8 taskId)
gTasks[taskId].data[2] = FALSE;
for (i = 0; i < events->bgEventCount; i++)
{
- if (events->bgEvents[i].kind == 7 && !FlagGet(events->bgEvents[i].bgUnion.hiddenItem.hiddenItemId + 0x1F4))
+ if (events->bgEvents[i].kind == BG_EVENT_HIDDEN_ITEM && !FlagGet(events->bgEvents[i].bgUnion.hiddenItem.hiddenItemId + 0x1F4))
{
distanceX = (u16)events->bgEvents[i].x + 7;
newDistanceX = distanceX - x;
@@ -398,7 +399,7 @@ bool8 sub_80FD6D4(const struct MapEvents *events, s16 x, s16 y)
for (i = 0; i < bgEventCount; i++)
{
- if (bgEvent[i].kind == 7 && x == (u16)bgEvent[i].x && y == (u16)bgEvent[i].y) // hidden item and coordinates matches x and y passed?
+ if (bgEvent[i].kind == BG_EVENT_HIDDEN_ITEM && x == (u16)bgEvent[i].x && y == (u16)bgEvent[i].y) // hidden item and coordinates matches x and y passed?
{
if (!FlagGet(bgEvent[i].bgUnion.hiddenItem.hiddenItemId + 0x1F4))
return TRUE;
diff --git a/src/link.c b/src/link.c
index ca9a5bb13..b729f86eb 100644
--- a/src/link.c
+++ b/src/link.c
@@ -304,7 +304,7 @@ void LinkTestScreen(void)
void sub_8009628(u8 a0)
{
- gLocalLinkPlayer.lp_field_18 = a0;
+ gLocalLinkPlayer.id = a0;
}
static void InitLocalLinkPlayer(void)
diff --git a/src/link_rfu.c b/src/link_rfu.c
index 37aa20950..29256899d 100644
--- a/src/link_rfu.c
+++ b/src/link_rfu.c
@@ -2126,7 +2126,7 @@ void sub_800DD94(struct UnkLinkRfuStruct_02022B14 *data, u8 r9, bool32 r2, int r
for (i = 0; i < 2; i++)
{
- data->playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
+ data->unk_00.playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
}
for (i = 0; i < 4; i++)
{
@@ -2136,14 +2136,14 @@ void sub_800DD94(struct UnkLinkRfuStruct_02022B14 *data, u8 r9, bool32 r2, int r
data->playerGender = gSaveBlock2Ptr->playerGender;
data->unk_0a_0 = r9;
data->unk_0a_7 = r2;
- data->unk_00_0 = 2;
- data->unk_01_2 = 3;
- data->unk_00_4 = 0;
- data->unk_00_5 = 0;
- data->unk_00_6 = 0;
- data->unk_00_7 = FlagGet(FLAG_0x87F);
- data->unk_01_0 = IsNationalPokedexEnabled();
- data->unk_01_1 = FlagGet(FLAG_SYS_GAME_CLEAR);
+ data->unk_00.unk_00_0 = 2;
+ data->unk_00.unk_01_2 = 3;
+ data->unk_00.unk_00_4 = 0;
+ data->unk_00.unk_00_5 = 0;
+ data->unk_00.unk_00_6 = 0;
+ data->unk_00.unk_00_7 = FlagGet(FLAG_0x87F);
+ data->unk_00.unk_01_0 = IsNationalPokedexEnabled();
+ data->unk_00.unk_01_1 = FlagGet(FLAG_SYS_GAME_CLEAR);
}
bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx)
@@ -2155,12 +2155,12 @@ bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx)
retVal = TRUE;
if (sub_8010454(gUnknown_03007890->unk_14[idx].unk_04) && ((gUnknown_03007890->unk_07 >> idx) & 1))
{
- memcpy(buff1, &gUnknown_03007890->unk_14[idx].unk_06, sizeof(gUnknown_03007890->unk_14[idx].unk_06));
+ memcpy(buff1, &gUnknown_03007890->unk_14[idx].unk_06, 0xD);
memcpy(buff2, gUnknown_03007890->unk_14[idx].unk_15, sizeof(gUnknown_03007890->unk_14[idx].unk_15));
}
else
{
- memset(buff1, 0, sizeof(gUnknown_03007890->unk_14[idx].unk_06));
+ memset(buff1, 0, 0xD);
memset(buff2, 0, sizeof(gUnknown_03007890->unk_14[idx].unk_15));
}
}
@@ -2169,12 +2169,12 @@ bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx)
retVal = FALSE;
if (sub_8010454(gUnknown_03007890->unk_14[idx].unk_04))
{
- memcpy(buff1, &gUnknown_03007890->unk_14[idx].unk_06, sizeof(gUnknown_03007890->unk_14[idx].unk_06));
+ memcpy(buff1, &gUnknown_03007890->unk_14[idx].unk_06, 0xD);
memcpy(buff2, gUnknown_03007890->unk_14[idx].unk_15, sizeof(gUnknown_03007890->unk_14[idx].unk_15));
}
else
{
- memset(buff1, 0, sizeof(gUnknown_03007890->unk_14[idx].unk_06));
+ memset(buff1, 0, 0xD);
memset(buff2, 0, sizeof(gUnknown_03007890->unk_14[idx].unk_15));
}
}
@@ -2850,7 +2850,7 @@ void sub_800EF38(void)
gUnknown_03005000.unk_ce7 = gUnknown_03004140.unk_00;
}
-bool8 sub_800EF58(bool32 a0)
+bool32 sub_800EF58(bool32 a0)
{
if (gUnknown_03005000.unk_04 == 17 || a0)
{
@@ -4104,7 +4104,7 @@ bool8 sub_8010540(void)
return retval;
}
-bool8 sub_80105EC(void)
+bool32 sub_80105EC(void)
{
u8 flags = 0;
int i;
@@ -4129,7 +4129,7 @@ bool8 sub_80105EC(void)
return FALSE;
}
-bool8 sub_801064C(u16 a0, const u8 *a1)
+bool32 sub_801064C(u16 a0, const u8 *a1)
{
u8 r1 = sub_8011CE4(a1, a0);
if (r1 == 0xFF)
@@ -4154,14 +4154,14 @@ void sub_80106D4(void)
rfu_NI_setSendData(1 << gUnknown_03005000.unk_c3e, 8, &gUnknown_03005000.unk_c85, 1);
}
-u8 sub_8010714(u16 a0, const u8 *a1)
+u32 sub_8010714(u16 a0, const u8 *a1)
{
u8 r0 = sub_8011CE4(a1, a0);
if (r0 == 0xff)
return 2;
if (gUnknown_03007880[r0]->unk_0 == 0)
- return TRUE;
- return FALSE;
+ return 1;
+ return 0;
}
void sub_8010750(void)
@@ -4512,14 +4512,14 @@ void sub_8010F84(u8 a0, u32 a1, u32 a2)
void sub_8010FA0(bool32 a0, bool32 a1)
{
- gUnknown_02022B14.unk_00_4 = a0;
- gUnknown_02022B14.unk_00_5 = a1;
+ gUnknown_02022B14.unk_00.unk_00_4 = a0;
+ gUnknown_02022B14.unk_00.unk_00_5 = a1;
}
void sub_8010FCC(u32 a0, u32 a1, u32 a2)
{
- gUnknown_02022B14.unk_09_2 = a0;
- gUnknown_02022B14.unk_08_0 = a1;
+ gUnknown_02022B14.type = a0;
+ gUnknown_02022B14.species = a1;
gUnknown_02022B14.unk_0b_1 = a2;
}
diff --git a/src/load_save.c b/src/load_save.c
index 0c6df7662..005af7c42 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -38,7 +38,7 @@ EWRAM_DATA struct PokemonStorage gPokemonStorage = {0};
EWRAM_DATA u8 gSaveblock3_DMA[SAVEBLOCK_MOVE_RANGE] = {0};
EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0};
-EWRAM_DATA u32 gLastEncryptionKey = {0};
+EWRAM_DATA u32 gLastEncryptionKey = 0;
// IWRAM common
IWRAM_DATA bool32 gFlashMemoryPresent;
diff --git a/src/main_menu.c b/src/main_menu.c
index 91a5eba53..87673c9b2 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -1066,7 +1066,7 @@ void task_new_game_prof_birch_speech_3(u8 taskId)
{
InitWindows(gUnknown_082FF080);
LoadMainMenuWindowFrameTiles(0, 0xF3);
- copy_textbox_border_tile_patterns_to_vram(0, 0xFC, 0xF0);
+ LoadMessageBoxGfx(0, 0xFC, 0xF0);
unknown_rbox_to_vram(0, 1);
PutWindowTilemap(0);
CopyWindowToVram(0, 2);
@@ -1593,7 +1593,7 @@ void new_game_prof_birch_speech_part2_start(void)
SetMainCallback2(CB2_MainMenu);
InitWindows(gUnknown_082FF080);
LoadMainMenuWindowFrameTiles(0, 0xF3);
- copy_textbox_border_tile_patterns_to_vram(0, 0xFC, 0xF0);
+ LoadMessageBoxGfx(0, 0xFC, 0xF0);
PutWindowTilemap(0);
CopyWindowToVram(0, 3);
}
diff --git a/src/menu.c b/src/menu.c
index 2f21dbe52..96dda3075 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -193,7 +193,7 @@ void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonP
void sub_81973A4(void)
{
- copy_textbox_border_tile_patterns_to_vram(0, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM * 0x10);
+ LoadMessageBoxGfx(0, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM * 0x10);
LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, STD_WINDOW_PALETTE_NUM * 0x10);
}
@@ -412,7 +412,7 @@ void SetStandardWindowBorderStyle(u8 windowId, bool8 copyToVram)
void sub_819786C(u8 windowId, bool8 copyToVram)
{
- copy_textbox_border_tile_patterns_to_vram(windowId, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM * 0x10);
+ LoadMessageBoxGfx(windowId, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM * 0x10);
sub_8197B1C(windowId, copyToVram, DLG_WINDOW_BASE_TILE_NUM, 0xF);
}
diff --git a/src/overworld.c b/src/overworld.c
index 3f1219eb1..772f8a057 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -57,6 +57,7 @@
#include "malloc.h"
#include "gpu_regs.h"
#include "link_rfu.h"
+#include "constants/map_types.h"
// event scripts
extern const u8 EventScript_WhiteOut[];
diff --git a/src/pokeball.c b/src/pokeball.c
index 8173c4a90..3dbbb2967 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -665,7 +665,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
gTasks[taskId].tCryTaskState = wantedCry + 1;
break;
case 1:
- if (ShouldPlayNormalPokeCry(mon) == TRUE)
+ if (ShouldPlayNormalMonCry(mon) == TRUE)
PlayCry3(species, pan, 0);
else
PlayCry3(species, pan, 11);
@@ -680,7 +680,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
case 20:
if (gTasks[taskId].tCryTaskFrames == 0)
{
- if (ShouldPlayNormalPokeCry(mon) == TRUE)
+ if (ShouldPlayNormalMonCry(mon) == TRUE)
PlayCry4(species, pan, 1);
else
PlayCry4(species, pan, 12);
@@ -719,7 +719,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
gTasks[taskId].tCryTaskFrames--;
break;
}
- if (ShouldPlayNormalPokeCry(mon) == TRUE)
+ if (ShouldPlayNormalMonCry(mon) == TRUE)
PlayCry4(species, pan, 0);
else
PlayCry4(species, pan, 11);
diff --git a/src/pokeblock.c b/src/pokeblock.c
index 36f2c8293..7dd20b237 100644
--- a/src/pokeblock.c
+++ b/src/pokeblock.c
@@ -3,6 +3,7 @@
#include "bg.h"
#include "strings.h"
#include "text.h"
+#include "text_window.h"
#include "menu.h"
#include "task.h"
#include "menu_helpers.h"
@@ -75,8 +76,6 @@ extern const u16 gUnknown_0860F074[];
extern void CB2_ReturnToField(void);
extern bool8 sub_81221EC(void);
-extern void LoadUserWindowBorderGfx(u8, u16, u8);
-extern void copy_textbox_border_tile_patterns_to_vram(u8, u16, u8);
extern void sub_80AF168(void);
// this file's functions
@@ -567,7 +566,7 @@ static void HandleInitWindows(void)
InitWindows(sWindowTemplatesForPokeblockMenu);
DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 1, 0xE0);
- copy_textbox_border_tile_patterns_to_vram(0, 0xA, 0xD0);
+ LoadMessageBoxGfx(0, 0xA, 0xD0);
LoadPalette(gUnknown_0860F074, 0xF0, 0x20);
for (i = 0; i < ARRAY_COUNT(sWindowTemplatesForPokeblockMenu) - 1; i++)
diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c
index 463e821e5..5f06ed7e8 100644
--- a/src/pokeblock_feed.c
+++ b/src/pokeblock_feed.c
@@ -21,6 +21,7 @@
#include "sound.h"
#include "trig.h"
#include "graphics.h"
+#include "text_window.h"
#include "battle.h" // to get rid of once gMonSpritesGfxPtr is put elsewhere
struct PokeblockFeedStruct
@@ -58,8 +59,6 @@ extern const struct CompressedSpriteSheet gMonFrontPicTable[];
extern const u16 gUnknown_0860F074[];
extern bool8 sub_81221EC(void);
-extern void sub_806A068(u16, u8);
-extern void LoadUserWindowBorderGfx(u8, u16, u8);
// this file's functions
static void HandleInitBackgrounds(void);
@@ -661,7 +660,7 @@ static bool8 LoadMonAndSceneGfx(struct Pokemon *mon)
palette = GetMonSpritePalStructFromOtIdPersonality(species, trainerId, personality);
LoadCompressedObjectPalette(palette);
- sub_806A068(palette->tag, 1);
+ SetMultiuseSpriteTemplateToPokemon(palette->tag, 1);
sPokeblockFeed->loadGfxState++;
break;
case 2:
@@ -827,7 +826,7 @@ static void Task_PaletteFadeToReturn(u8 taskId)
static u8 CreateMonSprite(struct Pokemon* mon)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES2);
- u8 spriteId = CreateSprite(&gUnknown_0202499C, 48, 80, 2);
+ u8 spriteId = CreateSprite(&gMultiuseSpriteTemplate, 48, 80, 2);
sPokeblockFeed->species = species;
sPokeblockFeed->monSpriteId_ = spriteId;
diff --git a/src/pokemon.c b/src/pokemon.c
index 2a6a5a1a2..cd7e45758 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -63,7 +63,7 @@ extern const struct SpriteFrameImage gUnknown_082FF4F8[];
extern const struct SpriteFrameImage gUnknown_082FF518[];
extern const union AffineAnimCmd *const gUnknown_082FF618[];
extern const union AffineAnimCmd *const gUnknown_082FF694[];
-extern const union AnimCmd *gUnknown_082FF70C[];
+extern const union AnimCmd *gPlayerMonSpriteAnimsTable[];
extern const union AnimCmd *const *const gMonAnimationsSpriteAnimsPtrTable[];
extern const union AnimCmd *const *const gUnknown_08305D0C[];
extern const union AnimCmd *const *const gUnknown_0830536C[];
@@ -105,7 +105,7 @@ EWRAM_DATA u8 gPlayerPartyCount = 0;
EWRAM_DATA u8 gEnemyPartyCount = 0;
EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {0};
EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {0};
-EWRAM_DATA struct SpriteTemplate gUnknown_0202499C = {0};
+EWRAM_DATA struct SpriteTemplate gMultiuseSpriteTemplate = {0};
EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL};
// const rom data
@@ -1752,7 +1752,7 @@ bool8 sub_80688F8(u8 caseId, u8 battlerId)
return FALSE;
if (!gMain.inBattle)
return FALSE;
- if (gLinkPlayers[GetMultiplayerId()].lp_field_18 == battlerId)
+ if (gLinkPlayers[GetMultiplayerId()].id == battlerId)
return FALSE;
break;
case 2:
@@ -1774,7 +1774,7 @@ bool8 sub_80688F8(u8 caseId, u8 battlerId)
return FALSE;
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
- if (gLinkPlayers[GetMultiplayerId()].lp_field_18 == battlerId)
+ if (gLinkPlayers[GetMultiplayerId()].id == battlerId)
return FALSE;
}
else
@@ -1964,11 +1964,11 @@ void CalculateMonStats(struct Pokemon *mon)
SetMonData(mon, MON_DATA_MAX_HP, &newMaxHP);
- CALC_STAT(baseAttack, attackIV, attackEV, 1, MON_DATA_ATK)
- CALC_STAT(baseDefense, defenseIV, defenseEV, 2, MON_DATA_DEF)
- CALC_STAT(baseSpeed, speedIV, speedEV, 3, MON_DATA_SPEED)
- CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, 4, MON_DATA_SPATK)
- CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, 5, MON_DATA_SPDEF)
+ CALC_STAT(baseAttack, attackIV, attackEV, STAT_ATK, MON_DATA_ATK)
+ CALC_STAT(baseDefense, defenseIV, defenseEV, STAT_DEF, MON_DATA_DEF)
+ CALC_STAT(baseSpeed, speedIV, speedEV, STAT_SPEED, MON_DATA_SPEED)
+ CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, STAT_SPATK, MON_DATA_SPATK)
+ CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, STAT_SPDEF, MON_DATA_SPDEF)
if (species == SPECIES_SHEDINJA)
{
@@ -2265,7 +2265,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (attackerHoldEffect == sHoldEffectToType[i][0]
&& type == sHoldEffectToType[i][1])
{
- if (type <= 8)
+ if (IS_TYPE_PHYSICAL(type))
attack = (attack * (attackerHoldEffectParam + 100)) / 100;
else
spAttack = (spAttack * (attackerHoldEffectParam + 100)) / 100;
@@ -2293,9 +2293,9 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
spAttack /= 2;
if (attacker->ability == ABILITY_HUSTLE)
attack = (150 * attack) / 100;
- if (attacker->ability == ABILITY_PLUS && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_MINUS, 0, 0))
+ if (attacker->ability == ABILITY_PLUS && ABILITY_ON_FIELD2(ABILITY_MINUS))
spAttack = (150 * spAttack) / 100;
- if (attacker->ability == ABILITY_MINUS && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_PLUS, 0, 0))
+ if (attacker->ability == ABILITY_MINUS && ABILITY_ON_FIELD2(ABILITY_PLUS))
spAttack = (150 * spAttack) / 100;
if (attacker->ability == ABILITY_GUTS && attacker->status1)
attack = (150 * attack) / 100;
@@ -2316,7 +2316,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION)
defense /= 2;
- if (type < TYPE_MYSTERY) // is physical
+ if (IS_TYPE_PHYSICAL(type))
{
if (gCritMultiplier == 2)
{
@@ -2366,7 +2366,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (type == TYPE_MYSTERY)
damage = 0; // is ??? type. does 0 damage.
- if (type > TYPE_MYSTERY) // is special?
+ if (IS_TYPE_SPECIAL(type))
{
if (gCritMultiplier == 2)
{
@@ -2406,8 +2406,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
damage /= 2;
// are effects of weather negated with cloud nine or air lock
- if (!AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_CLOUD_NINE, 0, 0)
- && !AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_AIR_LOCK, 0, 0))
+ if (WEATHER_HAS_EFFECT2)
{
if (gBattleWeather & WEATHER_RAIN_TEMPORARY)
{
@@ -2486,13 +2485,14 @@ static bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battlerId)
{
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_x2000000 | BATTLE_TYPE_FRONTIER))
return FALSE;
- if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
return FALSE;
- if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT)
+ else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gTrainerBattleOpponent_A == TRAINER_SECRET_BASE)
return FALSE;
- if (FlagGet(badgeFlag))
+ else if (FlagGet(badgeFlag))
return TRUE;
- return FALSE;
+ else
+ return FALSE;
}
u8 GetDefaultMoveTarget(u8 battlerId)
@@ -2561,53 +2561,53 @@ u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality)
return MON_MALE;
}
-void sub_806A068(u16 species, u8 battlerPosition)
+void SetMultiuseSpriteTemplateToPokemon(u16 species, u8 battlerPosition)
{
if (gMonSpritesGfxPtr != NULL)
- gUnknown_0202499C = gMonSpritesGfxPtr->templates[battlerPosition];
+ gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
else if (gUnknown_020249B4[0])
- gUnknown_0202499C = gUnknown_020249B4[0]->templates[battlerPosition];
+ gMultiuseSpriteTemplate = gUnknown_020249B4[0]->templates[battlerPosition];
else if (gUnknown_020249B4[1])
- gUnknown_0202499C = gUnknown_020249B4[1]->templates[battlerPosition];
+ gMultiuseSpriteTemplate = gUnknown_020249B4[1]->templates[battlerPosition];
else
- gUnknown_0202499C = gUnknown_08329D98[battlerPosition];
+ gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition];
- gUnknown_0202499C.paletteTag = species;
- if (battlerPosition == 0 || battlerPosition == 2)
- gUnknown_0202499C.anims = gUnknown_082FF70C;
+ gMultiuseSpriteTemplate.paletteTag = species;
+ if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
+ gMultiuseSpriteTemplate.anims = gPlayerMonSpriteAnimsTable;
else if (species > 500)
- gUnknown_0202499C.anims = gMonAnimationsSpriteAnimsPtrTable[species - 500];
+ gMultiuseSpriteTemplate.anims = gMonAnimationsSpriteAnimsPtrTable[species - 500];
else
- gUnknown_0202499C.anims = gMonAnimationsSpriteAnimsPtrTable[species];
+ gMultiuseSpriteTemplate.anims = gMonAnimationsSpriteAnimsPtrTable[species];
}
-void sub_806A12C(u16 trainerSpriteId, u8 battlerPosition)
+void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosition)
{
- gUnknown_0202499C.paletteTag = trainerSpriteId;
+ gMultiuseSpriteTemplate.paletteTag = trainerSpriteId;
if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
{
- gUnknown_0202499C = gUnknown_08329DF8[trainerSpriteId];
- gUnknown_0202499C.anims = gUnknown_08305D0C[trainerSpriteId];
+ gMultiuseSpriteTemplate = gUnknown_08329DF8[trainerSpriteId];
+ gMultiuseSpriteTemplate.anims = gUnknown_08305D0C[trainerSpriteId];
}
else
{
if (gMonSpritesGfxPtr != NULL)
- gUnknown_0202499C = gMonSpritesGfxPtr->templates[battlerPosition];
+ gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
else
- gUnknown_0202499C = gUnknown_08329D98[battlerPosition];
- gUnknown_0202499C.anims = gUnknown_0830536C[trainerSpriteId];
+ gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition];
+ gMultiuseSpriteTemplate.anims = gUnknown_0830536C[trainerSpriteId];
}
}
-void sub_806A1C0(u16 arg0, u8 battlerPosition)
+void SetMultiuseSpriteTemplateToTrainerFront(u16 arg0, u8 battlerPosition)
{
if (gMonSpritesGfxPtr != NULL)
- gUnknown_0202499C = gMonSpritesGfxPtr->templates[battlerPosition];
+ gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
else
- gUnknown_0202499C = gUnknown_08329D98[battlerPosition];
+ gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition];
- gUnknown_0202499C.paletteTag = arg0;
- gUnknown_0202499C.anims = gUnknown_0830536C[arg0];
+ gMultiuseSpriteTemplate.paletteTag = arg0;
+ gMultiuseSpriteTemplate.anims = gUnknown_0830536C[arg0];
}
static void EncryptBoxMon(struct BoxPokemon *boxMon)
@@ -3136,7 +3136,8 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg)
{
- const u8* data = dataArg;
+ const u8 *data = dataArg;
+
switch (field)
{
case MON_DATA_STATUS:
@@ -3179,7 +3180,7 @@ void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg)
void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
{
- const u8* data = dataArg;
+ const u8 *data = dataArg;
struct PokemonSubstruct0 *substruct0 = NULL;
struct PokemonSubstruct1 *substruct1 = NULL;
@@ -4511,8 +4512,8 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
else
holdEffect = ItemId_GetHoldEffect(heldItem);
- if (holdEffect == 38 && type != 3)
- return 0;
+ if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE && type != 3)
+ return SPECIES_NONE;
switch (type)
{
@@ -4520,7 +4521,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
level = GetMonData(mon, MON_DATA_LEVEL, 0);
friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
- for (i = 0; i < 5; i++)
+ for (i = 0; i < EVOS_PER_MON; i++)
{
switch (gEvolutionTable[species][i].method)
{
@@ -4577,7 +4578,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
}
break;
case 1:
- for (i = 0; i < 5; i++)
+ for (i = 0; i < EVOS_PER_MON; i++)
{
switch (gEvolutionTable[species][i].method)
{
@@ -4597,7 +4598,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
break;
case 2:
case 3:
- for (i = 0; i < 5; i++)
+ for (i = 0; i < EVOS_PER_MON; i++)
{
if (gEvolutionTable[species][i].method == EVO_ITEM
&& gEvolutionTable[species][i].param == evolutionItem)
@@ -4805,7 +4806,7 @@ void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies)
bool8 sub_806D7EC(void)
{
bool8 retVal = FALSE;
- switch (gLinkPlayers[GetMultiplayerId()].lp_field_18)
+ switch (gLinkPlayers[GetMultiplayerId()].id)
{
case 0:
case 3:
@@ -4819,28 +4820,28 @@ bool8 sub_806D7EC(void)
return retVal;
}
-bool16 sub_806D82C(u8 id)
+u16 GetLinkTrainerFlankId(u8 linkPlayerId)
{
- bool16 retVal = FALSE;
- switch (gLinkPlayers[id].lp_field_18)
+ u16 flankId = 0;
+ switch (gLinkPlayers[linkPlayerId].id)
{
case 0:
case 3:
- retVal = FALSE;
+ flankId = 0;
break;
case 1:
case 2:
- retVal = TRUE;
+ flankId = 1;
break;
}
- return retVal;
+ return flankId;
}
s32 GetBattlerMultiplayerId(u16 a1)
{
s32 id;
for (id = 0; id < MAX_LINK_PLAYERS; id++)
- if (gLinkPlayers[id].lp_field_18 == a1)
+ if (gLinkPlayers[id].id == a1)
break;
return id;
}
@@ -4849,16 +4850,17 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId)
{
if (InBattlePyramid())
return GetTrainerEncounterMusicIdInBattlePyramind(trainerOpponentId);
- if (sub_81D5C18())
+ else if (sub_81D5C18())
return sub_81D63C8(trainerOpponentId);
- return TRAINER_ENCOUNTER_MUSIC(trainerOpponentId);
+ else
+ return TRAINER_ENCOUNTER_MUSIC(trainerOpponentId);
}
u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex)
{
if (statIndex < 1 || statIndex > 5)
{
- // should just be "return n", but it wouldn't match without this
+ // Should just be "return n", but it wouldn't match without this.
u16 retVal = n;
retVal++;
retVal--;
@@ -5165,7 +5167,7 @@ void PartySpreadPokerus(struct Pokemon *party)
{
if (pokerus & 0xF)
{
- // spread to adjacent party members
+ // Spread to adjacent party members.
if (i != 0 && !(GetMonData(&party[i - 1], MON_DATA_POKERUS, 0) & 0xF0))
SetMonData(&party[i - 1], MON_DATA_POKERUS, &curPokerus);
if (i != (PARTY_SIZE - 1) && !(GetMonData(&party[i + 1], MON_DATA_POKERUS, 0) & 0xF0))
@@ -5365,11 +5367,11 @@ u16 GetBattleBGM(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON)
return MUS_BATTLE34;
- if (gBattleTypeFlags & BATTLE_TYPE_REGI)
+ else if (gBattleTypeFlags & BATTLE_TYPE_REGI)
return MUS_BATTLE36;
- if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
+ else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
return MUS_BATTLE20;
- if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
u8 trainerClass;
@@ -5414,7 +5416,8 @@ u16 GetBattleBGM(void)
return MUS_BATTLE20;
}
}
- return MUS_BATTLE27;
+ else
+ return MUS_BATTLE27;
}
void PlayBattleBGM(void)
@@ -5578,19 +5581,19 @@ void BoxMonRestorePP(struct BoxPokemon *boxMon)
}
}
-void sub_806E994(void)
+void SetMonPreventsSwitchingString(void)
{
- gLastUsedAbility = gBattleStruct->field_B0;
+ gLastUsedAbility = gBattleStruct->abilityPreventingSwitchout;
gBattleTextBuff1[0] = B_BUFF_PLACEHOLDER_BEGIN;
gBattleTextBuff1[1] = B_BUFF_MON_NICK_WITH_PREFIX;
- gBattleTextBuff1[2] = gBattleStruct->field_49;
+ gBattleTextBuff1[2] = gBattleStruct->battlerPreventingSwitchout;
gBattleTextBuff1[4] = B_BUFF_EOS;
- if (!GetBattlerSide(gBattleStruct->field_49))
- gBattleTextBuff1[3] = pokemon_order_func(gBattlerPartyIndexes[gBattleStruct->field_49]);
+ if (GetBattlerSide(gBattleStruct->battlerPreventingSwitchout) == B_SIDE_PLAYER)
+ gBattleTextBuff1[3] = pokemon_order_func(gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout]);
else
- gBattleTextBuff1[3] = gBattlerPartyIndexes[gBattleStruct->field_49];
+ gBattleTextBuff1[3] = gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout];
PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId]))
@@ -5678,7 +5681,7 @@ const u8 *GetTrainerPartnerName(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{
- if (gPartnerTrainerId == STEVEN_PARTNER_ID)
+ if (gPartnerTrainerId == TRAINER_STEVEN_PARTNER)
{
return gTrainers[TRAINER_STEVEN].trainerName;
}
@@ -5691,7 +5694,7 @@ const u8 *GetTrainerPartnerName(void)
else
{
u8 id = GetMultiplayerId();
- return gLinkPlayers[GetBattlerMultiplayerId(gLinkPlayers[id].lp_field_18 ^ 2)].name;
+ return gLinkPlayers[GetBattlerMultiplayerId(gLinkPlayers[id].id ^ 2)].name;
}
}
@@ -5821,7 +5824,7 @@ u8 sub_806EF08(u8 arg0)
s32 i;
s32 var = 0;
u8 multiplayerId = GetMultiplayerId();
- switch (gLinkPlayers[multiplayerId].lp_field_18)
+ switch (gLinkPlayers[multiplayerId].id)
{
case 0:
case 2:
@@ -5834,7 +5837,7 @@ u8 sub_806EF08(u8 arg0)
}
for (i = 0; i < 4; i++)
{
- if (gLinkPlayers[i].lp_field_18 == (s16)(var))
+ if (gLinkPlayers[i].id == (s16)(var))
break;
}
return i;
@@ -5844,7 +5847,7 @@ u8 sub_806EF84(u8 arg0, u8 arg1)
{
s32 i;
s32 var = 0;
- switch (gLinkPlayers[arg1].lp_field_18)
+ switch (gLinkPlayers[arg1].id)
{
case 0:
case 2:
@@ -5857,7 +5860,7 @@ u8 sub_806EF84(u8 arg0, u8 arg1)
}
for (i = 0; i < 4; i++)
{
- if (gLinkPlayers[i].lp_field_18 == (s16)(var))
+ if (gLinkPlayers[i].id == (s16)(var))
break;
}
return i;
@@ -5891,15 +5894,15 @@ void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality)
const u8 *GetTrainerClassNameFromId(u16 trainerId)
{
- if (trainerId > NO_OF_TRAINERS)
- trainerId = 0;
+ if (trainerId >= TRAINERS_COUNT)
+ trainerId = TRAINER_NONE;
return gTrainerClassNames[gTrainers[trainerId].trainerClass];
}
const u8 *GetTrainerNameFromId(u16 trainerId)
{
- if (trainerId > NO_OF_TRAINERS)
- trainerId = 0;
+ if (trainerId >= TRAINERS_COUNT)
+ trainerId = TRAINER_NONE;
return gTrainers[trainerId].trainerName;
}
@@ -5948,7 +5951,7 @@ static void sub_806F1FC(struct Unknown_806F160_Struct* structPtr)
structPtr->frameImages[i * structPtr->field_0_0 + j].data = &structPtr->byteArrays[i][j * 0x800];
}
structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->field_0_0];
- structPtr->templates[i].anims = gUnknown_082FF70C;
+ structPtr->templates[i].anims = gPlayerMonSpriteAnimsTable;
structPtr->templates[i].paletteTag = i;
}
}
diff --git a/src/recorded_battle.c b/src/recorded_battle.c
index eb8d0e060..45b07ca7a 100644
--- a/src/recorded_battle.c
+++ b/src/recorded_battle.c
@@ -58,8 +58,8 @@ struct RecordedBattleSave
u8 field_4FC;
u8 field_4FD;
u8 field_4FE;
- u8 battleStyle : 1;
- u8 textSpeed : 3;
+ u8 battleStyle:1;
+ u8 textSpeed:3;
u32 AI_scripts;
u8 field_504[8];
u8 field_50C;
@@ -79,19 +79,19 @@ EWRAM_DATA static u16 sUnknown_0203C79C[4] = {0};
EWRAM_DATA static u16 sUnknown_0203C7A4[4] = {0};
EWRAM_DATA static u8 sUnknown_0203C7AC = 0;
EWRAM_DATA static u8 sUnknown_0203C7AD = 0;
-EWRAM_DATA static u8 sUnknown_0203C7AE = 0;
+EWRAM_DATA static u8 sFrontierFacility = 0;
EWRAM_DATA static u8 sUnknown_0203C7AF = 0;
EWRAM_DATA static MainCallback sCallback2_AfterRecordedBattle = NULL;
EWRAM_DATA u8 gUnknown_0203C7B4 = 0;
EWRAM_DATA static u8 sUnknown_0203C7B5 = 0;
-EWRAM_DATA static u8 sRecordedBattle_BattleStyle = 0;
-EWRAM_DATA static u8 sRecordedBattle_TextSpeed = 0;
-EWRAM_DATA static u32 sRecordedBattle_BattleFlags = 0;
-EWRAM_DATA static u32 sRecordedBattle_AI_Scripts = 0;
+EWRAM_DATA static u8 sBattleStyle = 0;
+EWRAM_DATA static u8 sTextSpeed = 0;
+EWRAM_DATA static u32 sBattleFlags = 0;
+EWRAM_DATA static u32 sAI_Scripts = 0;
EWRAM_DATA static struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0};
EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0};
-EWRAM_DATA static u16 sRecordedBattle_PlayerMonMoves[2][4] = {0};
-EWRAM_DATA static struct PlayerInfo sRecordedBattle_Players[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA static u16 sPlayerMonMoves[2][4] = {0};
+EWRAM_DATA static struct PlayerInfo sPlayers[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA static u8 sUnknown_0203CCD0 = 0;
EWRAM_DATA static u8 sUnknown_0203CCD1[8] = {0};
EWRAM_DATA static u8 sUnknown_0203CCD9 = 0;
@@ -126,8 +126,8 @@ void sub_8184DA4(u8 arg0)
{
sBattleRecords[i][j] |= 0xFF;
}
- sRecordedBattle_BattleFlags = gBattleTypeFlags;
- sRecordedBattle_AI_Scripts = gBattleResources->ai->aiFlags;
+ sBattleFlags = gBattleTypeFlags;
+ sAI_Scripts = gBattleResources->ai->aiFlags;
}
}
}
@@ -139,7 +139,7 @@ void sub_8184E58(void)
if (sUnknown_0203C7AC == 1)
{
gRecordedBattleRngSeed = gRngValue;
- sUnknown_0203C7AE = VarGet(VAR_FRONTIER_FACILITY);
+ sFrontierFacility = VarGet(VAR_FRONTIER_FACILITY);
sUnknown_0203C7AF = sub_81A513C();
}
else if (sUnknown_0203C7AC == 2)
@@ -157,37 +157,37 @@ void sub_8184E58(void)
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
- sRecordedBattle_Players[i].trainerId = gLinkPlayers[i].trainerId;
- sRecordedBattle_Players[i].gender = gLinkPlayers[i].gender;
- sRecordedBattle_Players[i].battlerId = gLinkPlayers[i].lp_field_18;
- sRecordedBattle_Players[i].language = gLinkPlayers[i].language;
+ sPlayers[i].trainerId = gLinkPlayers[i].trainerId;
+ sPlayers[i].gender = gLinkPlayers[i].gender;
+ sPlayers[i].battlerId = gLinkPlayers[i].id;
+ sPlayers[i].language = gLinkPlayers[i].language;
if (i < linkPlayersCount)
{
StringCopy(text, gLinkPlayers[i].name);
StripExtCtrlCodes(text);
- StringCopy(sRecordedBattle_Players[i].name, text);
+ StringCopy(sPlayers[i].name, text);
}
else
{
for (j = 0; j < PLAYER_NAME_LENGTH; j++)
- sRecordedBattle_Players[i].name[j] = gLinkPlayers[i].name[j];
+ sPlayers[i].name[j] = gLinkPlayers[i].name[j];
}
}
}
else
{
- sRecordedBattle_Players[0].trainerId = (gSaveBlock2Ptr->playerTrainerId[0])
+ sPlayers[0].trainerId = (gSaveBlock2Ptr->playerTrainerId[0])
| (gSaveBlock2Ptr->playerTrainerId[1] << 8)
| (gSaveBlock2Ptr->playerTrainerId[2] << 16)
| (gSaveBlock2Ptr->playerTrainerId[3] << 24);
- sRecordedBattle_Players[0].gender = gSaveBlock2Ptr->playerGender;
- sRecordedBattle_Players[0].battlerId = 0;
- sRecordedBattle_Players[0].language = gGameLanguage;
+ sPlayers[0].gender = gSaveBlock2Ptr->playerGender;
+ sPlayers[0].battlerId = 0;
+ sPlayers[0].language = gGameLanguage;
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
- sRecordedBattle_Players[0].name[i] = gSaveBlock2Ptr->playerName[i];
+ sPlayers[0].name[i] = gSaveBlock2Ptr->playerName[i];
}
}
@@ -214,7 +214,7 @@ void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear)
u8 RecordedBattle_GetBattlerAction(u8 battlerId)
{
- // trying to read past array or invalid action byte, battle is over
+ // Trying to read past array or invalid action byte, battle is over.
if (sRecordedBytesNo[battlerId] >= BATTLER_RECORD_SIZE || sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == 0xFF)
{
gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; // hah
@@ -345,37 +345,37 @@ u32 MoveRecordedBattleToSaveData(void)
{
for (j = 0; j < PLAYER_NAME_LENGTH; j++)
{
- battleSave->playersName[i][j] = sRecordedBattle_Players[i].name[j];
+ battleSave->playersName[i][j] = sPlayers[i].name[j];
}
- battleSave->playersGender[i] = sRecordedBattle_Players[i].gender;
- battleSave->playersLanguage[i] = sRecordedBattle_Players[i].language;
- battleSave->playersBattlers[i] = sRecordedBattle_Players[i].battlerId;
- battleSave->playersTrainerId[i] = sRecordedBattle_Players[i].trainerId;
+ battleSave->playersGender[i] = sPlayers[i].gender;
+ battleSave->playersLanguage[i] = sPlayers[i].language;
+ battleSave->playersBattlers[i] = sPlayers[i].battlerId;
+ battleSave->playersTrainerId[i] = sPlayers[i].trainerId;
}
battleSave->rngSeed = gRecordedBattleRngSeed;
- if (sRecordedBattle_BattleFlags & BATTLE_TYPE_LINK)
+ if (sBattleFlags & BATTLE_TYPE_LINK)
{
- battleSave->battleFlags = (sRecordedBattle_BattleFlags & ~(BATTLE_TYPE_LINK | BATTLE_TYPE_20));
+ battleSave->battleFlags = (sBattleFlags & ~(BATTLE_TYPE_LINK | BATTLE_TYPE_20));
battleSave->battleFlags |= BATTLE_TYPE_x2000000;
- if (sRecordedBattle_BattleFlags & BATTLE_TYPE_WILD)
+ if (sBattleFlags & BATTLE_TYPE_WILD)
{
battleSave->battleFlags |= BATTLE_TYPE_x80000000;
}
- else if (sRecordedBattle_BattleFlags & BATTLE_TYPE_MULTI)
+ else if (sBattleFlags & BATTLE_TYPE_MULTI)
{
- switch (sRecordedBattle_Players[0].battlerId)
+ switch (sPlayers[0].battlerId)
{
case 0:
case 2:
- if (!(sRecordedBattle_Players[gUnknown_0203C7B4].battlerId & 1))
+ if (!(sPlayers[gUnknown_0203C7B4].battlerId & 1))
battleSave->battleFlags |= BATTLE_TYPE_x80000000;
break;
case 1:
case 3:
- if ((sRecordedBattle_Players[gUnknown_0203C7B4].battlerId & 1))
+ if ((sPlayers[gUnknown_0203C7B4].battlerId & 1))
battleSave->battleFlags |= BATTLE_TYPE_x80000000;
break;
}
@@ -383,19 +383,19 @@ u32 MoveRecordedBattleToSaveData(void)
}
else
{
- battleSave->battleFlags = sRecordedBattle_BattleFlags;
+ battleSave->battleFlags = sBattleFlags;
}
battleSave->opponentA = gTrainerBattleOpponent_A;
battleSave->opponentB = gTrainerBattleOpponent_B;
battleSave->partnerId = gPartnerTrainerId;
battleSave->field_4FA = gUnknown_0203C7B4;
- battleSave->field_4FC = gSaveBlock2Ptr->frontier.field_CA9_b;
- battleSave->field_4FD = sUnknown_0203C7AE;
+ battleSave->field_4FC = gSaveBlock2Ptr->field_CA9_b;
+ battleSave->field_4FD = sFrontierFacility;
battleSave->field_4FE = sUnknown_0203C7AF;
battleSave->battleStyle = gSaveBlock2Ptr->optionsBattleStyle;
battleSave->textSpeed = gSaveBlock2Ptr->optionsTextSpeed;
- battleSave->AI_scripts = sRecordedBattle_AI_Scripts;
+ battleSave->AI_scripts = sAI_Scripts;
/* Can't match it without proper knowledge of the Saveblock 2.
if (gTrainerBattleOpponent_A >= 300 && gTrainerBattleOpponent_A <= 399)
@@ -525,7 +525,7 @@ _0818535E:\n\
lsls r3, 3\n\
adds r3, r7, r3\n\
str r3, [sp, 0x8]\n\
- ldr r5, =sRecordedBattle_Players\n\
+ ldr r5, =sPlayers\n\
mov r8, r6\n\
mov r12, r6\n\
movs r4, 0x96\n\
@@ -536,7 +536,7 @@ _0818535E:\n\
adds r4, r7, r0\n\
_081853AC:\n\
lsls r1, r6, 3\n\
- ldr r0, =sRecordedBattle_Players\n\
+ ldr r0, =sPlayers\n\
adds r0, 0x4\n\
mov r3, r8\n\
adds r2, r3, r0\n\
@@ -578,7 +578,7 @@ _081853BA:\n\
ldr r5, =gRecordedBattleRngSeed\n\
ldr r0, [r5]\n\
str r0, [r1]\n\
- ldr r0, =sRecordedBattle_BattleFlags\n\
+ ldr r0, =sBattleFlags\n\
ldr r2, [r0]\n\
movs r0, 0x2\n\
ands r0, r2\n\
@@ -608,7 +608,7 @@ _08185454:\n\
ands r2, r0\n\
cmp r2, 0\n\
beq _081854E2\n\
- ldr r2, =sRecordedBattle_Players\n\
+ ldr r2, =sPlayers\n\
ldrh r0, [r2, 0xE]\n\
cmp r0, 0x1\n\
beq _081854A8\n\
@@ -630,7 +630,7 @@ _0818547E:\n\
lsls r0, r1, 2\n\
adds r0, r1\n\
lsls r0, 2\n\
- ldr r4, =sRecordedBattle_Players\n\
+ ldr r4, =sPlayers\n\
adds r0, r4\n\
ldrh r1, [r0, 0xE]\n\
movs r0, 0x1\n\
@@ -647,7 +647,7 @@ _081854A8:\n\
lsls r0, r1, 2\n\
adds r0, r1\n\
lsls r0, 2\n\
- ldr r1, =sRecordedBattle_Players\n\
+ ldr r1, =sPlayers\n\
adds r0, r1\n\
ldrh r1, [r0, 0xE]\n\
movs r0, 0x1\n\
@@ -700,7 +700,7 @@ _081854E2:\n\
ldr r5, =0x000004fc\n\
adds r1, r7, r5\n\
strb r0, [r1]\n\
- ldr r0, =sUnknown_0203C7AE\n\
+ ldr r0, =sFrontierFacility\n\
ldrb r1, [r0]\n\
adds r2, 0x3\n\
adds r0, r7, r2\n\
@@ -735,7 +735,7 @@ _081854E2:\n\
movs r2, 0xA0\n\
lsls r2, 3\n\
adds r1, r7, r2\n\
- ldr r3, =sRecordedBattle_AI_Scripts\n\
+ ldr r3, =sAI_Scripts\n\
ldr r0, [r3]\n\
str r0, [r1]\n\
ldr r4, =0xfffffed4\n\
@@ -1340,7 +1340,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src)
}
gLinkPlayers[i].gender = src->playersGender[i];
gLinkPlayers[i].language = src->playersLanguage[i];
- gLinkPlayers[i].lp_field_18 = src->playersBattlers[i];
+ gLinkPlayers[i].id = src->playersBattlers[i];
gLinkPlayers[i].trainerId = src->playersTrainerId[i];
if (var)
@@ -1354,11 +1354,11 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src)
gPartnerTrainerId = src->partnerId;
gUnknown_0203C7B4 = src->field_4FA;
sUnknown_0203C7AD = gSaveBlock2Ptr->frontier.chosenLvl;
- sUnknown_0203C7AE = src->field_4FD;
+ sFrontierFacility = src->field_4FD;
sUnknown_0203C7AF = src->field_4FE;
- sRecordedBattle_BattleStyle = src->battleStyle;
- sRecordedBattle_TextSpeed = src->textSpeed;
- sRecordedBattle_AI_Scripts = src->AI_scripts;
+ sBattleStyle = src->battleStyle;
+ sTextSpeed = src->textSpeed;
+ sAI_Scripts = src->AI_scripts;
for (i = 0; i < 8; i++)
{
@@ -1415,9 +1415,9 @@ static void CB2_RecordedBattle(void)
RunTasks();
}
-u8 sub_8185EA0(void)
+u8 GetRecordedBattleFrontierFacility(void)
{
- return sUnknown_0203C7AE;
+ return sFrontierFacility;
}
u8 sub_8185EAC(void)
@@ -1453,7 +1453,7 @@ u8 GetActiveBattlerLinkPlayerGender(void)
for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
- if (gLinkPlayers[i].lp_field_18 == gActiveBattler)
+ if (gLinkPlayers[i].id == gActiveBattler)
break;
}
@@ -1480,12 +1480,12 @@ u8 sub_8185FAC(void)
u8 GetBattleStyleInRecordedBattle(void)
{
- return sRecordedBattle_BattleStyle;
+ return sBattleStyle;
}
u8 GetTextSpeedInRecordedBattle(void)
{
- return sRecordedBattle_TextSpeed;
+ return sTextSpeed;
}
void RecordedBattle_CopyBattlerMoves(void)
@@ -1501,7 +1501,7 @@ void RecordedBattle_CopyBattlerMoves(void)
for (i = 0; i < 4; i++)
{
- sRecordedBattle_PlayerMonMoves[gActiveBattler / 2][i] = gBattleMons[gActiveBattler].moves[i];
+ sPlayerMonMoves[gActiveBattler / 2][i] = gBattleMons[gActiveBattler].moves[i];
}
}
@@ -1522,7 +1522,7 @@ void sub_818603C(u8 arg0)
{
for (j = 0; j < 4; j++)
{
- if (gBattleMons[battlerId].moves[j] != sRecordedBattle_PlayerMonMoves[battlerId / 2][j])
+ if (gBattleMons[battlerId].moves[j] != sPlayerMonMoves[battlerId / 2][j])
break;
}
if (j != 4) // player's mon's move has been changed
@@ -1532,7 +1532,7 @@ void sub_818603C(u8 arg0)
{
for (k = 0; k < 4; k++)
{
- if (gBattleMons[battlerId].moves[j] == sRecordedBattle_PlayerMonMoves[battlerId / 2][k])
+ if (gBattleMons[battlerId].moves[j] == sPlayerMonMoves[battlerId / 2][k])
{
RecordedBattle_SetBattlerAction(battlerId, k);
break;
@@ -1612,7 +1612,7 @@ void sub_818603C(u8 arg0)
u32 GetAiScriptsInRecordedBattle(void)
{
- return sRecordedBattle_AI_Scripts;
+ return sAI_Scripts;
}
void sub_8186444(void)
diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c
index 45f0f5a9e..60580ef2d 100644
--- a/src/reshow_battle_screen.c
+++ b/src/reshow_battle_screen.c
@@ -11,6 +11,7 @@
#include "link.h"
#include "sprite.h"
#include "constants/species.h"
+#include "constants/trainers.h"
#include "battle_interface.h"
#include "battle_anim.h"
#include "data2.h"
@@ -26,8 +27,7 @@ extern u16 gBattle_BG3_Y;
extern const union AnimCmd * const * const gMonAnimationsSpriteAnimsPtrTable[];
-extern void sub_806A068(u16 species, u8 battlerPosition);
-extern void sub_806A12C(u16 backPicId, u8 battlerPosition);
+extern void SetMultiuseSpriteTemplateToTrainerBack(u16 backPicId, u8 battlerPosition);
// this file's functions
static void CB2_ReshowBattleScreenAfterMenu(void);
@@ -58,7 +58,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void)
{
case 0:
ScanlineEffect_Clear();
- sub_8035658();
+ BattleInitBgsAndWindows();
SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
ShowBg(0);
@@ -144,20 +144,20 @@ static void CB2_ReshowBattleScreenAfterMenu(void)
break;
case 19:
{
- u8 opponentBank;
+ u8 opponentBattler;
u16 species;
LoadAndCreateEnemyShadowSprites();
- opponentBank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[opponentBank]], MON_DATA_SPECIES);
- SetBattlerShadowSpriteCallback(opponentBank, species);
+ opponentBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[opponentBattler]], MON_DATA_SPECIES);
+ SetBattlerShadowSpriteCallback(opponentBattler, species);
if (IsDoubleBattle())
{
- opponentBank = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
- species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[opponentBank]], MON_DATA_SPECIES);
- SetBattlerShadowSpriteCallback(opponentBank, species);
+ opponentBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[opponentBattler]], MON_DATA_SPECIES);
+ SetBattlerShadowSpriteCallback(opponentBattler, species);
}
ActionSelectionCreateCursorAt(gActionSelectionCursor[gBattlerInMenuId], 0);
@@ -204,10 +204,10 @@ static bool8 LoadBattlerSpriteGfx(u8 battler)
else
BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE);
}
- else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == 0)
+ else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler.
DecompressTrainerBackPic(gSaveBlock2Ptr->playerGender, battler);
- else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && battler == 0)
- DecompressTrainerBackPic(BACK_PIC_WALLY, battler);
+ else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler.
+ DecompressTrainerBackPic(TRAINER_BACK_PIC_WALLY, battler);
else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute)
BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
else
@@ -234,8 +234,8 @@ static void CreateBattlerSprite(u8 battler)
if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0)
return;
- sub_806A068(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
- gBattlerSpriteIds[battler] = CreateSprite(&gUnknown_0202499C, GetBattlerSpriteCoord(battler, 2), posY, sub_80A82E4(battler));
+ SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, sub_80A82E4(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
@@ -245,21 +245,21 @@ static void CreateBattlerSprite(u8 battler)
if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies == SPECIES_CASTFORM)
gSprites[gBattlerSpriteIds[battler]].anims = gMonAnimationsSpriteAnimsPtrTable[SPECIES_CASTFORM];
}
- else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == 0)
+ else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT)
{
- sub_806A12C(gSaveBlock2Ptr->playerGender, GetBattlerPosition(B_POSITION_PLAYER_LEFT));
- gBattlerSpriteIds[battler] = CreateSprite(&gUnknown_0202499C, 0x50,
+ SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(B_POSITION_PLAYER_LEFT));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50,
(8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].coords) * 4 + 80,
sub_80A82E4(0));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
}
- else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && battler == 0)
+ else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && battler == B_POSITION_PLAYER_LEFT)
{
- sub_806A12C(BACK_PIC_WALLY, GetBattlerPosition(0));
- gBattlerSpriteIds[battler] = CreateSprite(&gUnknown_0202499C, 0x50,
- (8 - gTrainerBackPicCoords[BACK_PIC_WALLY].coords) * 4 + 80,
+ SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_WALLY, GetBattlerPosition(0));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50,
+ (8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_WALLY].coords) * 4 + 80,
sub_80A82E4(0));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
@@ -270,8 +270,8 @@ static void CreateBattlerSprite(u8 battler)
if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0)
return;
- sub_806A068(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
- gBattlerSpriteIds[battler] = CreateSprite(&gUnknown_0202499C, GetBattlerSpriteCoord(battler, 2), posY, sub_80A82E4(battler));
+ SetMultiuseSpriteTemplateToPokemon(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, sub_80A82E4(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
@@ -292,9 +292,9 @@ static void CreateHealthboxSprite(u8 battler)
{
u8 healthboxSpriteId;
- if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == 0)
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT)
healthboxSpriteId = CreateSafariPlayerHealthboxSprites();
- else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && battler == 0)
+ else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && battler == B_POSITION_PLAYER_LEFT)
return;
else
healthboxSpriteId = CreateBattlerHealthboxSprites(battler);
diff --git a/src/rom6.c b/src/rom6.c
index 78cbbe2de..cc146fc94 100644
--- a/src/rom6.c
+++ b/src/rom6.c
@@ -15,6 +15,7 @@
#include "sound.h"
#include "sprite.h"
#include "task.h"
+#include "constants/map_types.h"
// static functions
static void task08_080C9820(u8 taskId);
diff --git a/src/rom_8011DC0.c b/src/rom_8011DC0.c
index 9076b611a..55e3fe32b 100644
--- a/src/rom_8011DC0.c
+++ b/src/rom_8011DC0.c
@@ -1,18 +1,3264 @@
-
-// Includes
#include "global.h"
+#include "window.h"
+#include "bg.h"
+#include "string_util.h"
+#include "task.h"
+#include "event_data.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "librfu.h"
+#include "malloc.h"
+#include "menu.h"
+#include "list_menu.h"
+#include "menu_helpers.h"
+#include "script.h"
+#include "sound.h"
+#include "constants/songs.h"
+#include "constants/game_stat.h"
+#include "constants/maps.h"
+#include "constants/species.h"
+#include "constants/rgb.h"
+#include "trade.h"
+#include "trainer_card.h"
+#include "overworld.h"
+#include "battle.h"
+#include "load_save.h"
+#include "cable_club.h"
+#include "field_control_avatar.h"
+#include "party_menu.h"
+#include "field_weather.h"
+#include "palette.h"
+#include "decompress.h"
+#include "start_menu.h"
+#include "data2.h"
+#include "field_screen.h"
+
+extern void HealPlayerParty(void);
+
+struct UnkStruct_Shared
+{
+ struct UnkLinkRfuStruct_02022B14 field_0;
+ u8 needingPadding[3];
+ u8 playerName[PLAYER_NAME_LENGTH];
+};
+
+struct UnkStruct_x1C
+{
+ struct UnkStruct_Shared unk0;
+ u8 unk18;
+};
+
+struct UnkStruct_x20
+{
+ struct UnkStruct_Shared unk;
+ u16 field_18;
+ u8 field_1A_0:2;
+ u8 field_1A_1:1;
+ u8 field_1B;
+ u8 field_1D;
+ u8 field_1E;
+ u8 field_1F;
+};
+
+struct UnkStruct_Main0
+{
+ struct UnkStruct_x20 arr[5];
+};
+
+struct UnkStruct_Main4
+{
+ struct UnkStruct_x1C arr[5];
+};
+
+struct UnkStruct_Main8
+{
+ struct UnkStruct_x20 arr[5];
+};
+
+struct UnkStruct_Leader
+{
+ struct UnkStruct_Main0 *field_0;
+ struct UnkStruct_Main4 *field_4;
+ struct UnkStruct_Main8 *field_8;
+ u8 state;
+ u8 textState;
+ u8 field_E;
+ u8 listWindowId;
+ u8 field_10;
+ u8 field_11;
+ u8 listTaskId;
+ u8 field_13;
+ u8 field_14;
+ u8 field_15;
+ u8 field_16;
+ u8 field_17;
+ u8 field_18;
+ u8 field_19;
+ u16 field_1A;
+};
+
+struct UnkStruct_Group
+{
+ struct UnkStruct_Main0 *field_0;
+ struct UnkStruct_Main4 *field_4;
+ u8 state;
+ u8 textState;
+ u8 field_A;
+ u8 listWindowId;
+ u8 field_C;
+ u8 field_D;
+ u8 listTaskId;
+ u8 field_F;
+ u8 field_10;
+ u8 field_11;
+ u8 field_12;
+ u8 field_13;
+ u8 field_14;
+ u8 field_15;
+};
+
+struct UnkStruct_8019BA8
+{
+ u8 field_0;
+ u8 field_1;
+ u8 field_2;
+ u8 field_3;
+};
+
+struct UnkStruct_URoom
+{
+ struct UnkStruct_Main0 *field_0;
+ struct UnkStruct_Main4 *field_4;
+ struct UnkStruct_Main0 *field_8;
+ struct UnkStruct_Main4 *field_C;
+ u16 field_10;
+ u16 field_12;
+ u8 state;
+ u8 stateAfterPrint;
+ u8 textState;
+ u8 field_17;
+ u8 field_18;
+ u8 field_19;
+ u8 field_1A;
+ u8 field_1B;
+ u8 field_1C;
+ u8 field_1D;
+ u8 field_1E;
+ u8 field_1F;
+ u8 field_20;
+ u8 spriteIds[40];
+ u8 field_49;
+ u8 field_4A;
+ u16 field_4C[6];
+ u8 field_58[0x98 - 0x58];
+ u16 field_98;
+ u16 field_9A;
+ u16 field_9C;
+ u16 field_9E;
+ struct UnkStruct_8019BA8 field_A0[8];
+};
-// Static type declarations
+union UnkUnion_Main
+{
+ struct UnkStruct_Leader *leader;
+ struct UnkStruct_Group *group;
+ struct UnkStruct_URoom *uRoom;
+};
-// Static RAM declarations
-IWRAM_DATA u32 gUnknown_03000DA0;
-IWRAM_DATA u32 gUnknown_03000DA4;
-IWRAM_DATA void *gUnknown_03000DA8;
+struct TradeUnkStruct
+{
+ u16 field_0;
+ u16 field_2;
+ u32 field_4;
+ u8 field_8;
+ u8 field_9;
+ u16 field_A;
+ u16 field_C;
+ u16 species;
+ u16 level;
+ u16 field_12;
+ u32 personality;
+};
+
+extern struct TradeUnkStruct gUnknown_02022C40;
+
+extern union UnkUnion_Main gUnknown_02022C30;
+
+extern u8 gUnknown_02022C2C;
+extern u8 gUnknown_02022C2D;
+extern u8 gUnknown_02022C3E;
+extern u16 gUnknown_02022C3C;
+extern struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38;
+
+extern u8 gFieldLinkPlayerCount;
+extern u8 gUnknown_03005DB4;
+
+// IWRAM vars
+IWRAM_DATA struct UnkStruct_Leader *gUnknown_03000DA0;
+IWRAM_DATA struct UnkStruct_Group *gUnknown_03000DA4;
+IWRAM_DATA struct UnkStruct_URoom *gUnknown_03000DA8;
IWRAM_DATA void *gUnknown_03000DAC;
IWRAM_DATA bool32 gUnknown_03000DB0;
-// Static ROM declarations
+// this file's functions
+void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5);
+u16 ReadAsU16(const u8 *ptr);
+void sub_8012780(u8 taskId);
+void sub_80134E8(u8 taskId);
+void sub_8013C7C(u8 taskId);
+void sub_8014A40(u8 taskId);
+void sub_8014F48(u8 taskId);
+void sub_80152F4(u8 taskId);
+void sub_80156E0(u8 taskId);
+void sub_80175EC(struct UnkStruct_Main4 *arg0, u8 count);
+void sub_8017580(struct UnkStruct_Main0 *arg0, u8 count);
+u8 sub_8016FC0(struct UnkStruct_Main4 *arg0, u32 arg1);
+u8 sub_8016FF0(struct UnkStruct_Main4 *arg0, u32 arg1);
+bool8 PrintOnTextbox(u8 *textState, const u8 *str);
+bool8 sub_801320C(struct UnkStruct_Leader *data, u32 arg1, u32 arg2);
+u8 sub_8013398(struct UnkStruct_Main0 *arg0);
+s8 sub_80170B8(u8 *arg0, bool32 arg1);
+void sub_8018404(u8 *dest, struct UnkStruct_x20 *arg1);
+void sub_8012F64(struct UnkStruct_Leader *data);
+void sub_80149C4(void);
+u8 sub_80132D4(struct UnkStruct_Main0 *arg0);
+void sub_80178A0(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id);
+u32 sub_80176E4(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1);
+u8 sub_8017734(struct UnkStruct_x20 *arg0, struct UnkStruct_Shared *arg1, u8 arg2);
+u8 sub_8013E44(void);
+u32 sub_8013B8C(struct UnkStruct_Group *arg0, s32 id);
+void sub_8013BD8(struct UnkStruct_Group *arg0, s32 id);
+void sub_80173D4(void);
+void sub_80177B8(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id);
+bool32 sub_8017678(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1);
+u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId);
+void sub_801807C(struct TradeUnkStruct *arg0);
+void sub_801B940(void);
+void sub_801B94C(u16);
+u16 sub_801B39C(void);
+void sub_801AC54(void);
+void sub_801DD98(void);
+void sub_802A9A8(u8 monId, MainCallback callback);
+void sub_802493C(u8 monId, MainCallback callback);
+void sub_8020C70(MainCallback callback);
+void sub_80149D8(void);
+u16 sub_8019930(void);
+void sub_8018784(u8 windowId);
+void sub_8018884(const u8 *src);
+bool32 mevent_0814257C(u8 *textState, const u8 *str);
+s8 sub_8018B08(u8 *textState, u8 *arg1, u8 arg2, const u8 *str);
+bool32 sub_8016F1C(struct UnkStruct_x20 *arg0, s16 arg1);
+u8 sub_8016DF0(struct UnkStruct_Main4 *arg0, struct UnkStruct_Main4 *arg1, u32 arg2);
+void sub_8019F2C(void);
+void sub_8019E70(u8 *arg0, s32 arg1);
+bool32 sub_80180A0(u8 monId, struct TradeUnkStruct *arg1);
+void sub_80180E8(u8 monId, struct TradeUnkStruct *arg1);
+bool32 sub_801A2A8(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3);
+void sub_80181CC(void);
+bool32 sub_8017940(void);
+u8 sub_8016B00(void);
+void sub_801A274(struct UnkStruct_URoom *arg0);
+void sub_801A284(struct UnkStruct_URoom *arg0);
+bool32 sub_8017FD8(struct UnkStruct_URoom *arg0);
+void sub_801689C(struct UnkStruct_URoom *arg0);
+u8 sub_80181DC(struct UnkStruct_URoom *arg0);
+bool32 sub_80168DC(struct UnkStruct_URoom *arg0);
+bool32 sub_801704C(void);
+u32 sub_8017CF8(u32 arg1, struct UnkStruct_Main0 *arg0);
+s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender);
+void sub_801818C(bool32 arg0);
+void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2);
+s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate);
+s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6);
+bool32 sub_8018024(void);
+u32 sub_8017984(u32 arg0);
+void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2);
+void sub_8017D9C(u8 *dst, u32 arg1, u32 playerGender);
+u32 sub_80179AC(struct UnkStruct_x20 *arg0);
+void sub_8017E00(u8 *dst, u8 arg1);
+void sub_8019F04(u8 *spriteIds);
+void sub_8019E3C(void);
+void sub_80173B0(void);
+s32 sub_8017D04(u32 type, u32 species);
+void sub_8017020(const u8 *src);
+void sub_8019BA8();
+
+// const rom data
+extern const u8 *const gUnknown_082EDB60[][5];
+
+extern const u8 gText_UnkCtrlCodeF907[];
+extern const u8 gUnknown_082EDBC4[];
+extern const u8 gText_AwaitingCommunication[];
+extern const u8 gText_AwaitingLink[];
+extern const u8 gUnknown_082EDC5C[];
+extern const u8 gUnknown_082EDC9C[];
+extern const u8 gUnknown_082EDC78[];
+extern const u8 gUnknown_082EDD58[];
+extern const u8 gUnknown_082EDBE8[];
+extern const u8 gUnknown_082EDC0C[];
+extern const u8 gUnknown_082EDC34[];
+extern const u8 gUnknown_082EE560[];
+extern const u8 gUnknown_082EE57C[];
+extern const u8 gUnknown_082EFC54[];
+extern const u8 gUnknown_082EFC3C[];
+extern const u8 gUnknown_082EDE0C[];
+extern const u8 gUnknown_082EDDF4[];
+extern const u8 gUnknown_082EF7DC[];
+extern const u8 gUnknown_082EDE48[];
+extern const u8 gUnknown_082EDE64[];
+extern const u8 gUnknown_082EDF40[];
+extern const u8 gText_PleaseStartOver[];
+extern const u8 gUnknown_082EF7F8[];
+extern const u8 gUnknown_082EFBC8[];
+extern const u8 gUnknown_082EFC90[];
+extern const u8 gUnknown_082EDEC4[];
+extern const u8 gUnknown_082EDF04[];
+extern const u8 gText_WirelessSearchCanceled[];
+extern const u8 gUnknown_082EF4FC[];
+extern const u8 gUnknown_082EF520[];
+extern const u8 gUnknown_082EF5B8[];
+extern const u8 gUnknown_082EF1EC[];
+extern const u8 gUnknown_082EF544[];
+extern const u8 gUnknown_082EF47C[];
+extern const u8 gUnknown_082EE6C8[];
+extern const u8 gUnknown_082EE004[];
+extern const u8 gUnknown_082EEBD0[];
+extern const u8 gUnknown_082EEB88[];
+extern const u8 gUnknown_082EE598[];
+extern const u8 gUnknown_082EEC14[];
+extern const u8 gUnknown_082EF590[];
+extern const u8 gUnknown_082EF20C[];
+extern const u8 gUnknown_082EF564[];
+extern const u8 gUnknown_082EF4C4[];
+extern const u8 gUnknown_082EF298[];
+extern const u8 gUnknown_082EF65C[];
+extern const u8 gUnknown_082EF6E4[];
+extern const u8 gUnknown_082EF718[];
+
+extern const u32 gUnknown_082F00C4[];
+
+extern const u8 gUnknown_082F0530[];
+
+extern const struct WindowTemplate gUnknown_082F00BC;
+extern const struct WindowTemplate gUnknown_082F0124;
+extern const struct WindowTemplate gUnknown_082F012C;
+extern const struct WindowTemplate gUnknown_082F011C;
+extern const struct WindowTemplate gUnknown_082F0174;
+extern const struct WindowTemplate gUnknown_082F017C;
+extern const struct WindowTemplate gUnknown_082F021C;
+extern const struct WindowTemplate gUnknown_082F025C;
+extern const struct WindowTemplate gUnknown_082F0294;
+extern const struct WindowTemplate gUnknown_082F034C;
+
+extern const struct ListMenuTemplate gUnknown_082F015C;
+extern const struct ListMenuTemplate gUnknown_082F0204;
+extern const struct ListMenuTemplate gUnknown_082F0244;
+extern const struct ListMenuTemplate gUnknown_082F027C;
+extern const struct ListMenuTemplate gUnknown_082F032C;
+extern const struct ListMenuTemplate gUnknown_082F03A4;
+
+extern const u8 *const gUnknown_082F0048[];
+extern const u8 *const gUnknown_082EDDC4[];
+extern const u8 *const gUnknown_082EFB70[];
+extern const u8 *const gUnknown_082EDD50[];
+extern const u8 *const gUnknown_082EDE9C[];
+extern const u8 *const gUnknown_082EDF80[];
+extern const u8 *const gUnknown_082EFD58[];
+extern const u8 *const gUnknown_082EEB80[];
+extern const u8 *const gUnknown_082EE378[];
+extern const u8 *const gUnknown_082EEC9C[];
+extern const u8 *const gUnknown_082EED3C[];
+extern const u8 *const gUnknown_082EE324[];
+extern const u8 *const gUnknown_082EE17C[];
+
+extern const u8 *const gUnknown_082EE82C[][4];
+
+extern const u8 *const gUnknown_082EE24C[][2];
+
+extern const struct UnkStruct_Shared gUnknown_082F045C[];
+
+// code
+void nullsub_89(void)
+{
+
+}
+
+void sub_80124EC(u8 windowId, u8 arg1, u8 stringId)
+{
+ FillWindowPixelBuffer(windowId, 0x11);
+ switch (arg1 << 8)
+ {
+ case 0x200:
+ sub_80173E0(windowId, 1, gUnknown_082EDB60[0][stringId - 1], 0, 1, 0);
+ break;
+ case 0x400:
+ sub_80173E0(windowId, 1, gUnknown_082EDB60[1][stringId - 1], 0, 1, 0);
+ break;
+ case 0x2500:
+ sub_80173E0(windowId, 1, gUnknown_082EDB60[2][stringId - 1], 0, 1, 0);
+ break;
+ case 0x3500:
+ sub_80173E0(windowId, 1, gUnknown_082EDB60[3][stringId - 1], 0, 1, 0);
+ break;
+ case 0x2400:
+ sub_80173E0(windowId, 1, gUnknown_082EDB60[4][stringId - 1], 0, 1, 0);
+ break;
+ }
+
+ CopyWindowToVram(windowId, 2);
+}
+
+void sub_80125BC(u8 windowId)
+{
+ u8 text[30];
+ u8 *txtPtr;
+
+ sub_80173E0(windowId, 1, gSaveBlock2Ptr->playerName, 0, 1, 0);
+ txtPtr = StringCopy(text, gText_UnkCtrlCodeF907);
+ ConvertIntToDecimalStringN(txtPtr, ReadAsU16(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5);
+ sub_80173E0(windowId, 1, text, 0, 0x11, 0);
+}
+
+void sub_801262C(u8 *dst, u8 caseId)
+{
+ switch (caseId)
+ {
+ case 1 ... 4:
+ case 9 ... 11:
+ case 14 ... 16:
+ case 21 ... 28:
+ // UB: argument *dst isn't used, instead it always prints to gStringVar4
+ StringExpandPlaceholders(gStringVar4, gText_AwaitingCommunication);
+ break;
+ }
+}
+
+bool32 sub_80126CC(u32 caseId)
+{
+ switch (caseId)
+ {
+ case 9 ... 11:
+ case 15 ... 16:
+ case 23 ... 27:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+void BerryBlenderLinkBecomeLeader(void)
+{
+ u8 taskId;
+ struct UnkStruct_Leader *dataPtr;
+
+ taskId = CreateTask(sub_8012780, 0);
+ gUnknown_02022C30.leader = dataPtr = (void*)(gTasks[taskId].data);
+ gUnknown_03000DA0 = dataPtr;
+
+ dataPtr->state = 0;
+ dataPtr->textState = 0;
+ gSpecialVar_Result = 0;
+}
+
+void sub_8012780(u8 taskId)
+{
+ u32 id, val;
+ struct UnkStruct_Leader *data = gUnknown_02022C30.leader;
+
+ switch (data->state)
+ {
+ case 0:
+ if (gSpecialVar_0x8004 == 20 && gSaveBlock2Ptr->frontier.chosenLvl == 1)
+ gSpecialVar_0x8004++;
+ gUnknown_02022C2C = gUnknown_082F00C4[gSpecialVar_0x8004];
+ gUnknown_02022C2D = gUnknown_082F00C4[gSpecialVar_0x8004] >> 8;
+ sub_8010F84(gUnknown_02022C2C, 0, 0);
+ sub_800B488();
+ OpenLink();
+ sub_8011C10(gUnknown_02022C2D & 0xF);
+ data->state = 3;
+ break;
+ case 3:
+ data->field_4 = AllocZeroed(0x70);
+ data->field_0 = AllocZeroed(0xA0);
+ data->field_8 = AllocZeroed(0xA0);
+ sub_80175EC(data->field_4, 4);
+ sub_8017580(data->field_0, 5);
+ sub_800DF90(&data->field_0->arr[0].unk.field_0, data->field_0->arr[0].unk.playerName);
+ data->field_0->arr[0].field_18 = 0;
+ data->field_0->arr[0].field_1A_0 = 1;
+ data->field_0->arr[0].field_1A_1 = 0;
+ data->field_0->arr[0].field_1B = 0;
+ data->field_17 = sub_8016FC0(data->field_4, 0xFF);
+ data->field_10 = AddWindow(&gUnknown_082F00BC);
+ switch (gUnknown_02022C2D & 0xF)
+ {
+ case 2:
+ case 3:
+ case 4:
+ data->listWindowId = AddWindow(&gUnknown_082F011C);
+ break;
+ case 5:
+ data->listWindowId = AddWindow(&gUnknown_082F0124);
+ break;
+ }
+ data->field_11 = AddWindow(&gUnknown_082F012C);
+
+ FillWindowPixelBuffer(data->field_10, 0x22);
+ sub_80173E0(data->field_10, 0, gUnknown_082EDBC4, 8, 1, 4);
+ PutWindowTilemap(data->field_10);
+ CopyWindowToVram(data->field_10, 2);
+
+ NewMenuHelpers_DrawStdWindowFrame(data->listWindowId, FALSE);
+ gMultiuseListMenuTemplate = gUnknown_082F015C;
+ gMultiuseListMenuTemplate.windowId = data->listWindowId;
+ data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+
+ NewMenuHelpers_DrawStdWindowFrame(data->field_11, FALSE);
+ PutWindowTilemap(data->field_11);
+ CopyWindowToVram(data->field_11, 2);
+
+ CopyBgTilemapBufferToVram(0);
+ data->field_13 = 1;
+ data->state = 4;
+ break;
+ case 4:
+ StringCopy(gStringVar1, gUnknown_082F0048[gUnknown_02022C2C]);
+ if ((gUnknown_02022C2D >> 4) != 0)
+ {
+ if (data->field_13 > (gUnknown_02022C2D >> 4) - 1 && (gUnknown_02022C2D & 0xF) != 0)
+ StringExpandPlaceholders(gStringVar4, gText_AwaitingLink);
+ else
+ StringExpandPlaceholders(gStringVar4, gText_AwaitingCommunication);
+ }
+ else
+ {
+ sub_801262C(gStringVar4, gUnknown_02022C2C);
+ }
+
+ sub_80124EC(data->field_11, gUnknown_02022C2D, data->field_13);
+ data->state = 5;
+ break;
+ case 5:
+ if (PrintOnTextbox(&data->textState, gStringVar4))
+ data->state = 6;
+ break;
+ case 6:
+ sub_801320C(data, 7, 10);
+ if (gMain.newKeys & B_BUTTON)
+ {
+ if (data->field_13 == 1)
+ data->state = 23;
+ else if ((gUnknown_02022C2D & 0xF0) != 0)
+ data->state = 30;
+ else
+ data->state = 19;
+ }
+ if ((gUnknown_02022C2D >> 4) != 0
+ && data->field_13 > (gUnknown_02022C2D >> 4) - 1
+ && (gUnknown_02022C2D & 0xF) != 0
+ && sub_8012240()
+ && gMain.newKeys & START_BUTTON)
+ {
+ data->state = 15;
+ sub_800EF38();
+ }
+ if (data->state == 6 && sub_80105EC())
+ {
+ data->state = 9;
+ }
+ break;
+ case 9:
+ if (!sub_80105EC())
+ {
+ data->state = 6;
+ data->field_13 = sub_8013398(data->field_0);
+ }
+ break;
+ case 10:
+ id = ((gUnknown_02022C2C & 0xF) == 2) ? 1 : 0;
+ if (PrintOnTextbox(&data->textState, gUnknown_082EDDC4[id]))
+ {
+ data->field_13 = sub_8013398(data->field_0);
+ RedrawListMenu(data->listTaskId);
+ data->state = 4;
+ }
+ break;
+ case 29:
+ id = ((gUnknown_02022C2D & 0xF) == 2) ? 0 : 1;
+ if (PrintOnTextbox(&data->textState, gUnknown_082EDDC4[id]))
+ {
+ data->state = 21;
+ }
+ break;
+ case 7:
+ if (PrintOnTextbox(&data->textState, gStringVar4))
+ {
+ data->state = 11;
+ }
+ break;
+ case 11:
+ switch (sub_80170B8(&data->textState, sub_801064C(ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName)))
+ {
+ case 0:
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ data->field_19 = 5;
+ sub_8010688(5, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ data->state = 12;
+ break;
+ case 1:
+ case -1:
+ data->field_19 = 6;
+ sub_8010688(6, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ data->state = 12;
+ break;
+ case -3:
+ data->state = 9;
+ break;
+ }
+ break;
+ case 12:
+ val = sub_8010714(ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ if (val == 1)
+ {
+ if (data->field_19 == 5)
+ {
+ data->field_0->arr[data->field_13].field_1B = 0;
+ RedrawListMenu(data->listTaskId);
+ data->field_13++;
+ if (data->field_13 == (gUnknown_02022C2D & 0xF))
+ {
+ if ((gUnknown_02022C2D & 0xF0) != 0 || data->field_13 == 4)
+ {
+ data->state = 15;
+ }
+ else
+ {
+ sub_8018404(gStringVar1, &data->field_0->arr[data->field_13 - 1]);
+ StringExpandPlaceholders(gStringVar4, gUnknown_082EDC9C);
+ data->state = 13;
+ }
+
+ sub_800EF38();
+ sub_80124EC(data->field_11, gUnknown_02022C2D, data->field_13);
+ }
+ else
+ {
+ data->state = 4;
+ }
+ }
+ else
+ {
+ sub_8011DC0(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId));
+ data->field_0->arr[data->field_13].field_1A_0 = 0;
+ sub_8013398(data->field_0);
+ RedrawListMenu(data->listTaskId);
+ data->state = 4;
+ }
+
+ data->field_19 = 0;
+ }
+ else if (val == 2)
+ {
+ sub_8011A64(0, 0);
+ data->state = 4;
+ }
+ break;
+ case 13:
+ if (PrintOnTextbox(&data->textState, gStringVar4))
+ data->state = 14;
+ break;
+ case 14:
+ if (++data->field_E > 120)
+ data->state = 17;
+ break;
+ case 15:
+ if (PrintOnTextbox(&data->textState, gUnknown_082EDC5C))
+ data->state = 16;
+ break;
+ case 16:
+ switch (sub_80170B8(&data->textState, FALSE))
+ {
+ case 0:
+ data->state = 17;
+ break;
+ case 1:
+ case -1:
+ if ((gUnknown_02022C2D & 0xF0) != 0)
+ data->state = 30;
+ else
+ data->state = 19;
+ break;
+ }
+ break;
+ case 19:
+ if (PrintOnTextbox(&data->textState, gUnknown_082EDC78))
+ data->state = 20;
+ break;
+ case 20:
+ switch (sub_80170B8(&data->textState, FALSE))
+ {
+ case 0:
+ data->state = 23;
+ break;
+ case 1:
+ case -1:
+ if ((gUnknown_02022C2D & 0xF0) != 0)
+ data->state = 15;
+ else if (data->field_13 == (gUnknown_02022C2D & 0xF))
+ data->state = 15;
+ else
+ data->state = 4;
+ break;
+ }
+ break;
+ case 17:
+ if (!sub_801320C(data, 7, 29))
+ data->state = 18;
+ break;
+ case 18:
+ if (sub_800EF1C())
+ {
+ if (sub_800EF58(FALSE))
+ {
+ data->state = 26;
+ }
+ else
+ {
+ if (++data->field_1A > 300)
+ {
+ data->state = 29;
+ data->textState = 0;
+ }
+ }
+ }
+ else
+ {
+ data->state = 29;
+ data->textState = 0;
+ }
+ break;
+ case 30:
+ if (PrintOnTextbox(&data->textState, gUnknown_082EDD58))
+ data->state = 23;
+ break;
+ case 21:
+ case 23:
+ sub_800E084();
+ sub_800EDD4();
+ sub_8012F64(data);
+ data->state++;
+ break;
+ case 24:
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ gSpecialVar_Result = 5;
+ break;
+ case 22:
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ gSpecialVar_Result = 8;
+ break;
+ case 26:
+ if (sub_8011A80())
+ {
+ data->state = 29;
+ }
+ else
+ {
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ if (sub_80126CC(gUnknown_02022C2C))
+ sub_801103C();
+ sub_8011068(1);
+ sub_80149C4();
+ sub_8012F64(data);
+ DestroyTask(taskId);
+ }
+ }
+ break;
+ }
+}
+
+void sub_8012F64(struct UnkStruct_Leader *data)
+{
+ ClearWindowTilemap(data->field_11);
+ sub_819746C(data->field_11, FALSE);
+ DestroyListMenuTask(data->listTaskId, 0, 0);
+ ClearWindowTilemap(data->field_10);
+ sub_819746C(data->listWindowId, FALSE);
+ CopyBgTilemapBufferToVram(0);
+ RemoveWindow(data->field_11);
+ RemoveWindow(data->listWindowId);
+ RemoveWindow(data->field_10);
+ DestroyTask(data->field_17);
+
+ Free(data->field_8);
+ Free(data->field_0);
+ Free(data->field_4);
+}
+
+void sub_8012FC4(u8 *dst, u8 caseId)
+{
+ switch (caseId)
+ {
+ case 1:
+ case 2:
+ case 4:
+ case 14:
+ case 28:
+ StringExpandPlaceholders(dst, gUnknown_082EDBE8);
+ break;
+ case 21:
+ case 22:
+ StringExpandPlaceholders(dst, gUnknown_082EDC0C);
+ break;
+ case 3:
+ case 9:
+ case 10:
+ case 11:
+ case 15:
+ case 16:
+ case 23:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ StringExpandPlaceholders(dst, gUnknown_082EDC34);
+ break;
+ }
+}
+
+void sub_8013078(u8 *dst, u8 caseId)
+{
+ switch (caseId)
+ {
+ case 65:
+ case 68:
+ StringExpandPlaceholders(dst, gUnknown_082EE560);
+ break;
+ case 69:
+ case 72:
+ StringExpandPlaceholders(dst, gUnknown_082EE57C);
+ break;
+ }
+}
+
+void sub_80130B4(u8 *dst, u8 caseId)
+{
+ switch (caseId)
+ {
+ case 1:
+ case 2:
+ case 4:
+ case 14:
+ case 21:
+ case 22:
+ case 28:
+ StringExpandPlaceholders(dst, gUnknown_082EFC3C);
+ break;
+ case 3:
+ case 9:
+ case 10:
+ case 11:
+ case 15:
+ case 16:
+ case 23:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ StringExpandPlaceholders(dst, gUnknown_082EFC54);
+ break;
+ }
+}
+
+void sub_8013160(u8 *dst, u8 caseId)
+{
+ switch (caseId)
+ {
+ case 1:
+ case 2:
+ case 4:
+ case 14:
+ case 21:
+ case 22:
+ case 28:
+ StringExpandPlaceholders(dst, gUnknown_082EDDF4);
+ break;
+ case 3:
+ case 9:
+ case 10:
+ case 11:
+ case 15:
+ case 16:
+ case 23:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ StringExpandPlaceholders(dst, gUnknown_082EDE0C);
+ break;
+ }
+}
+
+bool8 sub_801320C(struct UnkStruct_Leader *data, u32 arg1, u32 arg2)
+{
+ switch (sub_80132D4(data->field_0))
+ {
+ case 1:
+ PlaySE(SE_PC_LOGIN);
+ RedrawListMenu(data->listTaskId);
+ sub_8018404(gStringVar2, &data->field_0->arr[data->field_13]);
+ sub_8012FC4(gStringVar4, gUnknown_02022C2C);
+ data->state = arg1;
+ break;
+ case 2:
+ sub_8011A64(0, 0);
+ RedrawListMenu(data->listTaskId);
+ data->state = arg2;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void sub_8013278(u8 arg0, u32 id, u8 arg2)
+{
+ struct UnkStruct_Leader *data = gUnknown_02022C30.leader;
+ u8 var = 0;
+
+ switch (data->field_0->arr[id].field_1A_0)
+ {
+ case 1:
+ if (data->field_0->arr[id].field_1B != 0)
+ var = 2;
+ break;
+ case 2:
+ var = 1;
+ break;
+ }
+
+ sub_80178A0(arg0, 0, arg2, &data->field_0->arr[id], var, id);
+}
+
+u8 sub_80132D4(struct UnkStruct_Main0 *arg0)
+{
+ struct UnkStruct_Leader *data = gUnknown_02022C30.leader;
+ u8 ret = 0;
+ u8 i;
+ s32 id;
+
+ for (i = 1; i < 5; i++)
+ {
+ u16 var = data->field_0->arr[i].field_1A_0;
+ if (var == 1)
+ {
+ id = sub_80176E4(&data->field_0->arr[i], data->field_4->arr);
+ if (id != 0xFF)
+ {
+ data->field_0->arr[i].unk = data->field_4->arr[id].unk0;
+ data->field_0->arr[i].field_18 = var;
+ }
+ else
+ {
+ data->field_0->arr[i].field_1A_0 = 2;
+ ret = 2;
+ }
+ }
+ }
+
+ for (id = 0; id < 4; id++)
+ sub_8017734(data->field_0->arr, &data->field_4->arr[id].unk0, 5);
+
+ if (ret != 2)
+ {
+ for (id = 0; id < 5; id++)
+ {
+ if (data->field_0->arr[id].field_1B != 0)
+ ret = 1;
+ }
+ }
+
+ return ret;
+}
+
+u8 sub_8013398(struct UnkStruct_Main0 *arg0)
+{
+ struct UnkStruct_Leader *data = gUnknown_02022C30.leader;
+ u8 copiedCount;
+ s32 i;
+ u8 ret;
+
+ for (i = 0; i < 5; i++)
+ data->field_8->arr[i] = data->field_0->arr[i];
+
+ copiedCount = 0;
+ for (i = 0; i < 5; i++)
+ {
+ if (data->field_8->arr[i].field_1A_0 == 1)
+ {
+ data->field_0->arr[copiedCount] = data->field_8->arr[i];
+ copiedCount++;
+ }
+ }
+
+ ret = copiedCount;
+ for (; copiedCount < 5; copiedCount++)
+ {
+ data->field_0->arr[copiedCount].unk = gUnknown_082F045C[0];
+ data->field_0->arr[copiedCount].field_18 = 0;
+ data->field_0->arr[copiedCount].field_1A_0 = 0;
+ data->field_0->arr[copiedCount].field_1A_1 = 0;
+ data->field_0->arr[copiedCount].field_1B = 0;
+ }
+
+ for (i = 0; i < 5; i++)
+ {
+ if (data->field_0->arr[i].field_1A_0 != 1)
+ continue;
+ if (data->field_0->arr[i].field_1B != 0x40)
+ continue;
+
+ ret = i;
+ break;
+ }
+
+ return ret;
+}
+
+void BerryBlenderLinkJoinGroup(void)
+{
+ u8 taskId;
+ struct UnkStruct_Group *dataPtr;
+
+ taskId = CreateTask(sub_80134E8, 0);
+ gUnknown_02022C30.group = dataPtr = (void*)(gTasks[taskId].data);
+ gUnknown_03000DA4 = dataPtr;
+
+ dataPtr->state = 0;
+ dataPtr->textState = 0;
+ gSpecialVar_Result = 0;
+}
+
+void sub_80134E8(u8 taskId)
+{
+ s32 id;
+ struct UnkStruct_Group *data = gUnknown_02022C30.group;
+
+ switch (data->state)
+ {
+ case 0:
+ if (gSpecialVar_0x8004 == 20 && gSaveBlock2Ptr->frontier.chosenLvl == 1)
+ gSpecialVar_0x8004++;
+ gUnknown_02022C2C = gUnknown_082F0530[gSpecialVar_0x8004];
+ sub_8010F84(gUnknown_02022C2C, 0, 0);
+ sub_800B488();
+ OpenLink();
+ sub_8011C5C();
+ data->field_4 = AllocZeroed(0x70);
+ data->field_0 = AllocZeroed(0x200);
+ data->state = 1;
+ break;
+ case 1:
+ if (PrintOnTextbox(&data->textState, gUnknown_082EFB70[gSpecialVar_0x8004]))
+ data->state = 2;
+ break;
+ case 2:
+ sub_80175EC(data->field_4, 4);
+ sub_8017580(data->field_0, 16);
+ data->field_11 = sub_8016FC0(data->field_4, gSpecialVar_0x8004);
+ data->field_C = AddWindow(&gUnknown_082F00BC);
+ data->listWindowId = AddWindow(&gUnknown_082F0174);
+ data->field_D = AddWindow(&gUnknown_082F017C);
+
+ FillWindowPixelBuffer(data->field_C, 0x22);
+ sub_80173E0(data->field_C, 0, gUnknown_082EF7DC, 8, 1, 4);
+ PutWindowTilemap(data->field_C);
+ CopyWindowToVram(data->field_C, 2);
+
+ NewMenuHelpers_DrawStdWindowFrame(data->listWindowId, FALSE);
+ gMultiuseListMenuTemplate = gUnknown_082F0204;
+ gMultiuseListMenuTemplate.windowId = data->listWindowId;
+ data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+
+ NewMenuHelpers_DrawStdWindowFrame(data->field_D, FALSE);
+ PutWindowTilemap(data->field_D);
+ sub_80125BC(data->field_D);
+ CopyWindowToVram(data->field_D, 2);
+
+ CopyBgTilemapBufferToVram(0);
+ data->field_F = 0;
+ data->state = 3;
+ break;
+ case 3:
+ id = sub_8013E44();
+ switch (id)
+ {
+ case 1:
+ PlaySE(SE_PC_LOGIN);
+ RedrawListMenu(data->listTaskId);
+ break;
+ case 0:
+ id = ListMenuHandleInputGetItemId(data->listTaskId);
+ if (gMain.newKeys & A_BUTTON && id != -1)
+ {
+ // this unused variable along with the assignment is needed to match
+ u32 unusedVar;
+ unusedVar = data->field_0->arr[id].unk.field_0.unk_0a_0;
+
+ if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.field_0.unk_0a_7)
+ {
+ u32 var = sub_8013B8C(data, id);
+ if (var == 0)
+ {
+ sub_8013BD8(data, id);
+ data->state = 5;
+ PlaySE(SE_PN_ON);
+ }
+ else
+ {
+ StringCopy(gStringVar4, gUnknown_082EDD50[var - 1]);
+ data->state = 18;
+ PlaySE(SE_PN_ON);
+ }
+ }
+ else
+ {
+ PlaySE(SE_WALL_HIT);
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ data->state = 10;
+ }
+ break;
+ default:
+ RedrawListMenu(data->listTaskId);
+ break;
+ }
+ break;
+ case 5:
+ sub_80130B4(gStringVar4, gUnknown_02022C2C);
+ if (PrintOnTextbox(&data->textState, gStringVar4))
+ {
+ sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
+ data->state = 6;
+ }
+ break;
+ case 6:
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ gUnknown_02022C2C = data->field_0->arr[data->field_F].unk.field_0.unk_0a_0;
+ sub_8011A64(0, 0);
+ switch (gUnknown_02022C2C)
+ {
+ case 1 ... 5:
+ case 9 ... 11:
+ case 13 ... 16:
+ case 21 ... 28:
+ data->state = 20;
+ return;
+ }
+ }
+
+ switch (sub_8011A74())
+ {
+ case 1:
+ data->state = 12;
+ break;
+ case 2:
+ case 6:
+ case 9:
+ data->state = 14;
+ break;
+ case 5:
+ sub_8013160(gStringVar4, gUnknown_02022C2C);
+ if (PrintOnTextbox(&data->textState, gStringVar4))
+ {
+ if (gUnknown_02022C2C == 28 || gUnknown_02022C2C == 14)
+ {
+ sub_8011A64(12, 0);
+ }
+ else
+ {
+ sub_8011A64(7, 0);
+ StringCopy(gStringVar1, gUnknown_082F0048[gUnknown_02022C2C]);
+ StringExpandPlaceholders(gStringVar4, gUnknown_082EDE48);
+ }
+ }
+ break;
+ case 7:
+ if (data->field_15 > 0xF0)
+ {
+ if (PrintOnTextbox(&data->textState, gStringVar4))
+ {
+ sub_8011A64(12, 0);
+ data->field_15 = 0;
+ }
+ }
+ else
+ {
+ switch (gUnknown_02022C2C)
+ {
+ case 1:
+ case 2:
+ case 4:
+ case 14:
+ case 28:
+ break;
+ default:
+ data->field_15++;
+ break;
+ }
+ }
+ break;
+ }
+
+ if (!sub_8011A74() && gMain.newKeys & B_BUTTON)
+ data->state = 7;
+ break;
+ case 7:
+ if (PrintOnTextbox(&data->textState, gUnknown_082EDE64))
+ data->state = 8;
+ break;
+ case 8:
+ switch (sub_80170B8(&data->textState, sub_8011A74()))
+ {
+ case 0:
+ sub_80106D4();
+ data->state = 9;
+ RedrawListMenu(data->listTaskId);
+ break;
+ case 1:
+ case -1:
+ data->state = 5;
+ RedrawListMenu(data->listTaskId);
+ break;
+ case -3:
+ data->state = 6;
+ RedrawListMenu(data->listTaskId);
+ break;
+ }
+ break;
+ case 9:
+ if (sub_8011A74())
+ data->state = 6;
+ break;
+ case 10:
+ case 12:
+ case 14:
+ case 18:
+ case 20:
+ ClearWindowTilemap(data->field_D);
+ sub_819746C(data->field_D, FALSE);
+ DestroyListMenuTask(data->listTaskId, 0, 0);
+ ClearWindowTilemap(data->field_C);
+ sub_819746C(data->listWindowId, FALSE);
+ CopyBgTilemapBufferToVram(0);
+ RemoveWindow(data->field_D);
+ RemoveWindow(data->listWindowId);
+ RemoveWindow(data->field_C);
+ DestroyTask(data->field_11);
+ Free(data->field_0);
+ Free(data->field_4);
+ data->state++;
+ break;
+ case 13:
+ sub_800E084();
+ if (PrintOnTextbox(&data->textState, gUnknown_082EDE9C[sub_8011A74()]))
+ {
+ gSpecialVar_Result = 6;
+ data->state = 23;
+ }
+ break;
+ case 11:
+ sub_800E084();
+ gSpecialVar_Result = 5;
+ data->state = 23;
+ break;
+ case 15:
+ sub_800E084();
+ if (PrintOnTextbox(&data->textState, gUnknown_082EDE9C[sub_8011A74()]))
+ {
+ gSpecialVar_Result = 8;
+ data->state = 23;
+ }
+ break;
+ case 19:
+ if (PrintOnTextbox(&data->textState, gStringVar4))
+ {
+ gSpecialVar_Result = 8;
+ data->state = 23;
+ }
+ break;
+ case 23:
+ DestroyTask(taskId);
+ sub_80173D4();
+ sub_800EDD4();
+ break;
+ case 21:
+ sub_80149C4();
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+u32 sub_8013B8C(struct UnkStruct_Group *arg0, s32 id)
+{
+ struct UnkStruct_x20 *structPtr = &arg0->field_0->arr[id];
+
+ if (gUnknown_02022C2C == 4 && structPtr->unk.field_0.unk_00.unk_01_2 != 3)
+ {
+ if (!(gSaveBlock2Ptr->specialSaveWarp & 0x80))
+ return 1;
+ else if (structPtr->unk.field_0.unk_00.unk_00_7)
+ return 0;
+ }
+ else
+ {
+ return 0;
+ }
+
+ return 2;
+}
+
+void sub_8013BD8(struct UnkStruct_Group *data, s32 id)
+{
+ data->field_F = id;
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ RedrawListMenu(data->listTaskId);
+ sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
+ sub_8011090(gUnknown_082F0530[gSpecialVar_0x8004], 0, 1);
+ sub_8011FC8(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId));
+}
+
+u8 sub_8013C40(void)
+{
+ u8 taskId;
+ struct UnkStruct_Group *dataPtr;
+
+ taskId = CreateTask(sub_8013C7C, 0);
+ gUnknown_02022C30.group = dataPtr = (void*)(gTasks[taskId].data);
+
+ dataPtr->state = 0;
+ dataPtr->textState = 0;
+
+ gUnknown_03000DA4 = dataPtr;
+
+ return taskId;
+}
+
+void sub_8013C7C(u8 taskId)
+{
+ struct UnkStruct_Group *data = gUnknown_02022C30.group;
+
+ switch (data->state)
+ {
+ case 0:
+ sub_8010F84(0, 0, 0);
+ sub_800B488();
+ OpenLink();
+ sub_8011C5C();
+ sub_80111B0(TRUE);
+ data->field_4 = AllocZeroed(0x70);
+ data->field_0 = AllocZeroed(0x200);
+ data->state = 2;
+ break;
+ case 2:
+ sub_80175EC(data->field_4, 4);
+ sub_8017580(data->field_0, 16);
+ data->field_11 = sub_8016FC0(data->field_4, 0xFF);
+ data->field_F = 0;
+ data->state = 3;
+ break;
+ case 3:
+ if (sub_8013E44() == 1)
+ PlaySE(SE_PC_LOGIN);
+ if (gTasks[taskId].data[15] == 0xFF)
+ data->state = 10;
+ break;
+ case 10:
+ DestroyTask(data->field_11);
+ Free(data->field_0);
+ Free(data->field_4);
+ sub_800EDD4();
+ data->state++;
+ break;
+ case 11:
+ sub_800EDD4();
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+extern const u8 *const gUnknown_082F04D8[22];
+
+bool32 sub_8013D88(u32 arg0, u32 id)
+{
+ if (id == 0xFF)
+ return TRUE;
+
+ if (id <= ARRAY_COUNT(gUnknown_082F04D8)) // UB: <= may access data outside the array
+ {
+ const u8 *bytes = gUnknown_082F04D8[id];
+
+ while ((*(bytes) != 0xFF))
+ {
+ if ((*bytes) == arg0)
+ return TRUE;
+ bytes++;
+ }
+ }
+
+ return FALSE;
+}
+
+u8 sub_8013DBC(struct UnkStruct_Group *data, u32 id)
+{
+ if (data->field_0->arr[id].field_1A_0 == 1)
+ {
+ if (data->field_0->arr[id].unk.field_0.unk_0a_7)
+ return 3;
+ else if (data->field_0->arr[id].field_1A_1 != 0)
+ return 1;
+ else if (data->field_0->arr[id].field_1B != 0)
+ return 2;
+ }
+
+ return 0;
+}
+
+void sub_8013DF4(u8 arg0, u32 id, u8 arg2)
+{
+ struct UnkStruct_Group *data = gUnknown_02022C30.group;
+ u8 var = sub_8013DBC(data, id);
+
+ sub_80177B8(arg0, 8, arg2, &data->field_0->arr[id], var, id);
+}
+
+u8 sub_8013E44(void)
+{
+ struct UnkStruct_Group *data = gUnknown_02022C30.group;
+ u8 ret = 0;
+ u8 i;
+ s32 id;
+
+ for (i = 0; i < 16; i++)
+ {
+ if (data->field_0->arr[i].field_1A_0 != 0)
+ {
+ id = sub_80176E4(&data->field_0->arr[i], data->field_4->arr);
+ if (id != 0xFF)
+ {
+ if (data->field_0->arr[i].field_1A_0 == 1)
+ {
+ if (sub_8017678(&data->field_0->arr[i], &data->field_4->arr[id]))
+ {
+ data->field_0->arr[i].unk = data->field_4->arr[id].unk0;
+ data->field_0->arr[i].field_1B = 0x40;
+ ret = 1;
+ }
+ else
+ {
+ if (data->field_0->arr[i].field_1B != 0)
+ {
+ data->field_0->arr[i].field_1B--;
+ if (data->field_0->arr[i].field_1B == 0)
+ ret = 2;
+ }
+ }
+ }
+ else
+ {
+ data->field_0->arr[i].field_1A_0 = 1;
+ data->field_0->arr[i].field_1B = 0x40;
+ ret = 1;
+ }
+
+ data->field_0->arr[i].field_18 = 0;
+ }
+ else
+ {
+ if (data->field_0->arr[i].field_1A_0 != 2)
+ {
+ data->field_0->arr[i].field_18++;
+ if (data->field_0->arr[i].field_18 >= 300)
+ {
+ data->field_0->arr[i].field_1A_0 = 2;
+ ret = 2;
+ }
+ }
+ }
+ }
+ }
+
+ for (id = 0; id < 4; id++)
+ {
+ if (sub_8017734(data->field_0->arr, &data->field_4->arr[id].unk0, 16) != 0xFF)
+ ret = 1;
+ }
+
+ return ret;
+}
+
+void sub_8013F60(u8 taskId)
+{
+ sub_80773AC();
+ DestroyTask(taskId);
+}
+
+u8 sub_8013F78(void)
+{
+ u8 taskId = CreateTask(sub_8013F60, 0);
+
+ return taskId;
+}
+
+extern struct MailStruct gUnknown_020321C0[PARTY_SIZE];
+extern u8 gUnknown_02032298[2];
+
+void sub_8013F90(u8 taskId)
+{
+ u32 monId = sub_8018120(&gUnknown_02022C40, GetMultiplayerId());
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ gTasks[taskId].data[0]++;
+ SendBlock(0, &gPlayerParty[monId], sizeof(struct Pokemon));
+ break;
+ case 1:
+ if (GetBlockReceivedStatus() == 3)
+ {
+ gEnemyParty[0] = *(struct Pokemon*)(gBlockRecvBuffer[GetMultiplayerId() ^ 1]);
+ IncrementGameStat(GAME_STAT_50);
+ ResetBlockReceivedFlags();
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, sizeof(struct MailStruct) * PARTY_SIZE + 4);
+ if (SendBlock(0, gBlockSendBuffer, sizeof(struct MailStruct) * PARTY_SIZE + 4))
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ if (GetBlockReceivedStatus() == 3)
+ {
+ memcpy(gUnknown_020321C0, gBlockRecvBuffer[GetMultiplayerId() ^ 1], sizeof(struct MailStruct) * PARTY_SIZE);
+ ResetBlockReceivedFlags();
+ gUnknown_02032298[0] = monId;
+ gUnknown_02032298[1] = 6;
+ gMain.savedCallback = CB2_ReturnToField;
+ SetMainCallback2(sub_807AE50);
+ sub_801807C(&gUnknown_02022C40);
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_80140E0(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (GetMultiplayerId() == 0)
+ sub_800A4D8(2);
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (GetBlockReceivedStatus() == sub_800A9D8())
+ {
+ s32 i;
+ u16 *recvBuff;
+
+ for (i = 0; i < GetLinkPlayerCount(); i++)
+ {
+ recvBuff = gBlockRecvBuffer[i];
+ sub_80C3120(&gTrainerCards[i], recvBuff, gLinkPlayers[i].version);
+ }
+
+ if (GetLinkPlayerCount() == 2)
+ {
+ recvBuff = gBlockRecvBuffer[GetMultiplayerId() ^ 1];
+ sub_801B94C(recvBuff[48]);
+ }
+ else
+ {
+ sub_801B940();
+ }
+
+ ResetBlockReceivedFlags();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_80141A4(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ CreateTask(sub_80140E0, 5);
+ gMain.state++;
+ break;
+ case 1:
+ if (!FuncIsActiveTask(sub_80140E0))
+ sub_80C4E74(GetMultiplayerId() ^ 1, CB2_ReturnToField);
+ break;
+ }
+
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+}
+
+void sub_8014210(u16 battleFlags)
+{
+ HealPlayerParty();
+ SavePlayerParty();
+ LoadPlayerBag();
+ gLinkPlayers[0].linkType = 0x2211;
+ gLinkPlayers[GetMultiplayerId()].id = GetMultiplayerId();
+ gLinkPlayers[GetMultiplayerId() ^ 1].id = GetMultiplayerId() ^ 1;
+ gMain.savedCallback = sub_80B360C;
+ gBattleTypeFlags = battleFlags;
+ PlayBattleBGM();
+}
+
+void sub_8014290(u16 arg0, u16 x, u16 y)
+{
+ VarSet(VAR_0x4087, arg0);
+ Overworld_SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y);
+ saved_warp2_set_2(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y);
+ warp_in();
+}
+
+void sub_8014304(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 arg4)
+{
+ gSpecialVar_0x8004 = arg4;
+ VarSet(VAR_0x4087, arg4);
+ gFieldLinkPlayerCount = GetLinkPlayerCount();
+ gUnknown_03005DB4 = GetMultiplayerId();
+ sub_809D2BC();
+ Overworld_SetWarpDestination(mapGroup, mapNum, -1, x, y);
+ warp_in();
+}
+
+void sub_8014384(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ CreateTask(sub_80140E0, 5);
+ gMain.state++;
+ break;
+ case 1:
+ if (!FuncIsActiveTask(sub_80140E0))
+ SetMainCallback2(sub_8086074);
+ break;
+ }
+
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+}
+
+void sub_80143E4(void *arg0, bool32 arg1)
+{
+ u16 *argAsU16Ptr = arg0;
+
+ sub_80C30A4(argAsU16Ptr);
+ if (arg1)
+ argAsU16Ptr[48] = sub_801B39C();
+ else
+ argAsU16Ptr[48] = 0;
+}
+
+void sub_801440C(u8 taskId)
+{
+ sub_801B940();
+ switch (gUnknown_02022C2C)
+ {
+ case 1 ... 4:
+ case 9 ... 11:
+ case 13:
+ case 15:
+ sub_800E3A8();
+ break;
+ }
+
+ switch (gUnknown_02022C2C)
+ {
+ case 65:
+ case 81:
+ overworld_free_bg_tilemaps();
+ gMain.savedCallback = sub_801AC54;
+ sub_81B8518(3);
+ break;
+ case 1:
+ overworld_free_bg_tilemaps();
+ sub_80143E4(gBlockSendBuffer, TRUE);
+ HealPlayerParty();
+ SavePlayerParty();
+ LoadPlayerBag();
+ sub_8014304(MAP_GROUP(SINGLE_BATTLE_COLOSSEUM), MAP_NUM(SINGLE_BATTLE_COLOSSEUM), 6, 8, 1);
+ SetMainCallback2(sub_8014384);
+ break;
+ case 2:
+ overworld_free_bg_tilemaps();
+ HealPlayerParty();
+ SavePlayerParty();
+ LoadPlayerBag();
+ sub_80143E4(gBlockSendBuffer, TRUE);
+ sub_8014304(MAP_GROUP(SINGLE_BATTLE_COLOSSEUM), MAP_NUM(SINGLE_BATTLE_COLOSSEUM), 6, 8, 2);
+ SetMainCallback2(sub_8014384);
+ break;
+ case 3:
+ overworld_free_bg_tilemaps();
+ HealPlayerParty();
+ SavePlayerParty();
+ LoadPlayerBag();
+ sub_80143E4(gBlockSendBuffer, TRUE);
+ sub_8014304(MAP_GROUP(DOUBLE_BATTLE_COLOSSEUM), MAP_NUM(DOUBLE_BATTLE_COLOSSEUM), 5, 8, 5);
+ SetMainCallback2(sub_8014384);
+ break;
+ case 4:
+ sub_80143E4(gBlockSendBuffer, TRUE);
+ overworld_free_bg_tilemaps();
+ sub_8014304(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, 3);
+ SetMainCallback2(sub_8014384);
+ break;
+ case 15:
+ sub_80143E4(gBlockSendBuffer, TRUE);
+ overworld_free_bg_tilemaps();
+ sub_8014304(MAP_GROUP(RECORD_CORNER), MAP_NUM(RECORD_CORNER), 8, 9, 4);
+ SetMainCallback2(sub_8014384);
+ break;
+ case 68:
+ overworld_free_bg_tilemaps();
+ CreateTask(sub_8013F90, 0);
+ break;
+ case 5:
+ case 69:
+ if (GetMultiplayerId() == 0)
+ {
+ sub_800ED10();
+ }
+ else
+ {
+ sub_800ED28();
+ sub_8010F84(69, 0, 1);
+ }
+ sub_801DD98();
+ break;
+ case 8:
+ case 72:
+ sub_80143E4(gBlockSendBuffer, FALSE);
+ SetMainCallback2(sub_80141A4);
+ break;
+ case 9:
+ sub_8014290(8, 5, 1);
+ sub_802A9A8(GetCursorSelectionMonId(), CB2_LoadMap);
+ break;
+ case 10:
+ sub_8014290(7, 9, 1);
+ sub_8020C70(CB2_LoadMap);
+ break;
+ case 11:
+ sub_8014290(8, 5, 1);
+ sub_802493C(GetCursorSelectionMonId(), CB2_LoadMap);
+ break;
+ }
+
+ DestroyTask(taskId);
+ gSpecialVar_Result = 1;
+ if (gUnknown_02022C2C != 68)
+ ScriptContext2_Disable();
+}
+
+extern u8 gUnknown_0203CEF8[];
+
+void sub_8014790(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u16 *sendBuff = (u16*)(gBlockSendBuffer);
+
+ switch (data[0])
+ {
+ case 0:
+ gSpecialVar_Result = 1;
+ switch (gUnknown_02022C2C)
+ {
+ case 14:
+ case 28:
+ gLinkPlayers[0].linkType = 0x2211;
+ gLinkPlayers[0].id = 0;
+ gLinkPlayers[1].id = 2;
+ sendBuff[0] = GetMonData(&gPlayerParty[gUnknown_0203CEF8[0] - 1], MON_DATA_SPECIES);
+ sendBuff[1] = GetMonData(&gPlayerParty[gUnknown_0203CEF8[1] - 1], MON_DATA_SPECIES, NULL);
+ gMain.savedCallback = NULL;
+ data[0] = 4;
+ sub_800E3A8();
+ ResetBlockReceivedFlags();
+ break;
+ case 16:
+ case 23 ... 27:
+ sub_800E3A8();
+ DestroyTask(taskId);
+ default:
+ EnableBothScriptContexts();
+ data[0] = 1;
+ break;
+ }
+ break;
+ case 1:
+ if (!ScriptContext1_IsScriptSetUp())
+ {
+ FadeScreen(1, 0);
+ data[0] = 2;
+ }
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ {
+ if (gUnknown_02022C2C == 29)
+ {
+ DestroyTask(taskId);
+ SetMainCallback2(sub_80773AC);
+ }
+ else
+ {
+ sub_800ADF8();
+ data[0] = 3;
+ }
+ }
+ break;
+ case 3:
+ if (sub_800A520())
+ {
+ DestroyTask(taskId);
+ sub_80149D8();
+ }
+ break;
+ case 4:
+ if (SendBlock(0, gBlockSendBuffer, 0xE))
+ data[0] = 5;
+ break;
+ case 5:
+ if (GetBlockReceivedStatus() == 3)
+ {
+ ResetBlockReceivedFlags();
+ if (sub_80B2AF4(gBlockRecvBuffer[0], gBlockRecvBuffer[1]))
+ {
+ gSpecialVar_Result = 11;
+ data[0] = 7;
+ }
+ else
+ {
+ data[0] = 6;
+ }
+ }
+ break;
+ case 6:
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ break;
+ case 7:
+ sub_800AC34();
+ data[0] = 8;
+ break;
+ case 8:
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ sub_800E084();
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_80149C4(void)
+{
+ CreateTask(sub_8014790, 0);
+}
+
+void sub_80149D8(void)
+{
+ u8 taskId = CreateTask(sub_801440C, 0);
+ gTasks[taskId].data[0] = 0;
+}
+
+void sub_8014A00(u32 arg0)
+{
+ u8 taskId;
+ struct UnkStruct_Leader *dataPtr;
+
+ taskId = CreateTask(sub_8014A40, 0);
+ gUnknown_02022C30.leader = dataPtr = (void*)(gTasks[taskId].data);
+
+ dataPtr->state = 0;
+ dataPtr->textState = 0;
+ dataPtr->field_18 = arg0;
+ gSpecialVar_Result = 0;
+}
+
+void sub_8014A40(u8 taskId)
+{
+ struct UnkStruct_Leader *data = gUnknown_02022C30.leader;
+ struct WindowTemplate winTemplate;
+ s32 val;
+
+ switch (data->state)
+ {
+ case 0:
+ gUnknown_02022C2C = data->field_18;
+ gUnknown_02022C2D = 2;
+ sub_8010F84(data->field_18, 0, 0);
+ sub_8010FA0(FALSE, FALSE);
+ sub_800B488();
+ OpenLink();
+ sub_8011C10(2);
+ data->state = 1;
+ break;
+ case 1:
+ data->field_4 = AllocZeroed(0x70);
+ data->field_0 = AllocZeroed(0xA0);
+ data->field_8 = AllocZeroed(0xA0);
+ sub_80175EC(data->field_4, 4);
+ sub_8017580(data->field_0, 5);
+ sub_800DF90(&data->field_0->arr[0].unk.field_0, data->field_0->arr[0].unk.playerName);
+ data->field_0->arr[0].field_18 = 0;
+ data->field_0->arr[0].field_1A_0 = 1;
+ data->field_0->arr[0].field_1A_1 = 0;
+ data->field_0->arr[0].field_1B = 0;
+ data->field_17 = sub_8016FC0(data->field_4, 0xFF);
+
+ winTemplate = gUnknown_082F011C;
+ winTemplate.baseBlock = sub_8019930();
+ winTemplate.paletteNum = 0xC;
+ data->listWindowId = AddWindow(&winTemplate);
+ sub_8018784(data->listWindowId);
+ gMultiuseListMenuTemplate = gUnknown_082F015C;
+ gMultiuseListMenuTemplate.windowId = data->listWindowId;
+ data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+
+ CopyBgTilemapBufferToVram(0);
+ data->field_13 = 1;
+ data->state = 2;
+ break;
+ case 2:
+ StringCopy(gStringVar1, gUnknown_082F0048[gUnknown_02022C2C]);
+ sub_801262C(gStringVar4, gUnknown_02022C2C);
+ data->state = 3;
+ break;
+ case 3:
+ sub_8018884(gStringVar4);
+ data->state = 4;
+ break;
+ case 4:
+ sub_801320C(data, 5, 6);
+ if (gMain.newKeys & B_BUTTON)
+ {
+ data->state = 13;
+ sub_800E084();
+ }
+ break;
+ case 6:
+ if (mevent_0814257C(&data->textState, gUnknown_082EDF40))
+ {
+ data->field_13 = sub_8013398(data->field_0);
+ RedrawListMenu(data->listTaskId);
+ data->state = 2;
+ }
+ break;
+ case 5:
+ data->state = 7;
+ break;
+ case 7:
+ switch (sub_8018B08(&data->textState, &data->field_14, 0, gStringVar4))
+ {
+ case 0:
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ data->field_0->arr[data->field_13].field_1B = 0;
+ RedrawListMenu(data->listTaskId);
+ data->field_19 = 5;
+ sub_8010688(5, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ data->state = 8;
+ break;
+ case 1:
+ case -1:
+ data->field_19 = 6;
+ sub_8010688(6, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ data->state = 8;
+ break;
+ }
+ break;
+ case 8:
+ val = sub_8010714(ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ if (val == 1)
+ {
+ if (data->field_19 == 5)
+ {
+ data->field_0->arr[data->field_13].field_1B = 0;
+ RedrawListMenu(data->listTaskId);
+ data->field_13++;
+ sub_8018404(gStringVar1, &data->field_0->arr[data->field_13 - 1]);
+ StringExpandPlaceholders(gStringVar4, gUnknown_082EDC9C);
+ data->state = 9;
+ sub_800EF38();
+ }
+ else
+ {
+ sub_8011DC0(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.unk_00.playerTrainerId));
+ data->field_0->arr[data->field_13].field_1A_0 = 0;
+ sub_8013398(data->field_0);
+ RedrawListMenu(data->listTaskId);
+ data->state = 2;
+ }
+
+ data->field_19 = 0;
+ }
+ else if (val == 2)
+ {
+ sub_8011A64(0, 0);
+ data->state = 2;
+ }
+ break;
+ case 9:
+ sub_8018884(gStringVar4);
+ data->state = 10;
+ break;
+ case 10:
+ if (++data->field_E > 120)
+ data->state = 11;
+ break;
+ case 11:
+ if (!sub_801320C(data, 5, 6))
+ data->state = 12;
+ break;
+ case 12:
+ if (sub_800EF1C())
+ {
+ sub_800EF58(FALSE);
+ data->state = 15;
+ }
+ else
+ {
+ data->state = 6;
+ }
+ break;
+ case 13:
+ sub_800E084();
+ sub_800EDD4();
+ DestroyListMenuTask(data->listTaskId, 0, 0);
+ CopyBgTilemapBufferToVram(0);
+ RemoveWindow(data->listWindowId);
+ DestroyTask(data->field_17);
+ Free(data->field_8);
+ Free(data->field_0);
+ Free(data->field_4);
+ data->state++;
+ break;
+ case 14:
+ if (mevent_0814257C(&data->textState, gText_PleaseStartOver))
+ {
+ DestroyTask(taskId);
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 15:
+ if (sub_8011A74() == 1 || sub_8011A74() == 2)
+ {
+ data->state = 13;
+ }
+ else if (gReceivedRemoteLinkPlayers != 0)
+ {
+ sub_8011068(1);
+ data->state++;
+ }
+ break;
+ case 16:
+ DestroyListMenuTask(data->listTaskId, 0, 0);
+ CopyBgTilemapBufferToVram(0);
+ RemoveWindow(data->listWindowId);
+ DestroyTask(data->field_17);
+ Free(data->field_8);
+ Free(data->field_0);
+ Free(data->field_4);
+ sub_800ADF8();
+ data->state++;
+ break;
+ case 17:
+ if (sub_800A520())
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void sub_8014EFC(u32 arg0)
+{
+ u8 taskId;
+ struct UnkStruct_Group *dataPtr;
+
+ taskId = CreateTask(sub_8014F48, 0);
+ gUnknown_02022C30.group = dataPtr = (void*)(gTasks[taskId].data);
+ gUnknown_03000DA4 = dataPtr;
+
+ dataPtr->state = 0;
+ dataPtr->textState = 0;
+ dataPtr->field_12 = arg0 - 21;
+ gSpecialVar_Result = 0;
+}
+
+void sub_8014F48(u8 taskId)
+{
+ s32 id;
+ struct WindowTemplate winTemplate1, winTemplate2;
+ struct UnkStruct_Group *data = gUnknown_02022C30.group;
+
+ switch (data->state)
+ {
+ case 0:
+ sub_8010F84(data->field_12 + 21, 0, 0);
+ sub_800B488();
+ OpenLink();
+ sub_8011C5C();
+ data->field_4 = AllocZeroed(0x70);
+ data->field_0 = AllocZeroed(0x200);
+ data->state = 1;
+ break;
+ case 1:
+ sub_8018884(gUnknown_082EF7F8);
+ data->state = 2;
+ break;
+ case 2:
+ sub_80175EC(data->field_4, 4);
+ sub_8017580(data->field_0, 16);
+ data->field_11 = sub_8016FC0(data->field_4, data->field_12 + 7);
+
+ winTemplate1 = gUnknown_082F0174;
+ winTemplate1.baseBlock = sub_8019930();
+ winTemplate1.paletteNum = 0xC;
+ data->listWindowId = AddWindow(&winTemplate1);
+
+ winTemplate2 = gUnknown_082F017C;
+ winTemplate2.paletteNum = 0xC;
+ data->field_D = AddWindow(&winTemplate2);
+
+ sub_8018784(data->listWindowId);
+ gMultiuseListMenuTemplate = gUnknown_082F0204;
+ gMultiuseListMenuTemplate.windowId = data->listWindowId;
+ data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+
+ sub_8018784(data->field_D);
+ FillWindowPixelBuffer(data->field_D, 0x11);
+ PutWindowTilemap(data->field_D);
+ sub_80125BC(data->field_D);
+ CopyWindowToVram(data->field_D, 2);
+
+ CopyBgTilemapBufferToVram(0);
+ data->field_F = 0;
+ data->state = 3;
+ break;
+ case 3:
+ id = sub_8013E44();
+ switch (id)
+ {
+ case 1:
+ PlaySE(SE_PC_LOGIN);
+ default:
+ RedrawListMenu(data->listTaskId);
+ break;
+ case 0:
+ id = ListMenuHandleInputGetItemId(data->listTaskId);
+ if (gMain.newKeys & A_BUTTON && id != -1)
+ {
+ // this unused variable along with the assignment is needed to match
+ u32 unusedVar;
+ unusedVar = data->field_0->arr[id].unk.field_0.unk_0a_0;
+
+ if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.field_0.unk_0a_7)
+ {
+ data->field_F = id;
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ RedrawListMenu(data->listTaskId);
+ sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
+ sub_8011FC8(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.field_0.unk_00.playerTrainerId));
+ PlaySE(SE_PN_ON);
+ data->state = 4;
+ }
+ else
+ {
+ PlaySE(SE_WALL_HIT);
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ data->state = 6;
+ }
+ break;
+ }
+ break;
+ case 4:
+ sub_8018884(gUnknown_082EFC3C);
+ sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
+ data->state = 5;
+ break;
+ case 5:
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ gUnknown_02022C2C = data->field_0->arr[data->field_F].unk.field_0.unk_0a_0;
+ data->state = 10;
+ }
+
+ switch (sub_8011A74())
+ {
+ case 1:
+ case 2:
+ case 6:
+ data->state = 8;
+ break;
+ case 5:
+ sub_8018884(gUnknown_082EDDF4);
+ sub_8011A64(0, 0);
+ break;
+ }
+ break;
+ case 6:
+ case 8:
+ case 10:
+ DestroyListMenuTask(data->listTaskId, 0, 0);
+ CopyBgTilemapBufferToVram(0);
+ RemoveWindow(data->field_D);
+ RemoveWindow(data->listWindowId);
+ DestroyTask(data->field_11);
+ Free(data->field_0);
+ Free(data->field_4);
+ data->state++;
+ break;
+ case 9:
+ if (mevent_0814257C(&data->textState, gUnknown_082EDF80[sub_8011A74()]))
+ {
+ sub_800E084();
+ DestroyTask(taskId);
+ sub_800EDD4();
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 7:
+ sub_800E084();
+ sub_8018884(gText_PleaseStartOver);
+ DestroyTask(taskId);
+ sub_800EDD4();
+ gSpecialVar_Result = 5;
+ break;
+ case 11:
+ data->state++;
+ sub_800ADF8();
+ break;
+ case 12:
+ if (sub_800A520())
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void sub_80152A8(u32 arg0)
+{
+ u8 taskId;
+ struct UnkStruct_Group *dataPtr;
+
+ taskId = CreateTask(sub_80152F4, 0);
+ gUnknown_02022C30.group = dataPtr = (void*)(gTasks[taskId].data);
+ gUnknown_03000DA4 = dataPtr;
+
+ dataPtr->state = 0;
+ dataPtr->textState = 0;
+ dataPtr->field_12 = arg0 - 21;
+ gSpecialVar_Result = 0;
+}
+
+void sub_80152F4(u8 taskId)
+{
+ s32 id;
+ struct WindowTemplate winTemplate;
+ struct UnkStruct_Group *data = gUnknown_02022C30.group;
+
+ switch (data->state)
+ {
+ case 0:
+ sub_8010F84(0, 0, 0);
+ sub_800B488();
+ OpenLink();
+ sub_8011C5C();
+ data->field_4 = AllocZeroed(0x70);
+ data->field_0 = AllocZeroed(0x200);
+ data->state = 1;
+ break;
+ case 1:
+ sub_8018884(gUnknown_082EFBC8);
+ data->state = 2;
+ break;
+ case 2:
+ sub_80175EC(data->field_4, 4);
+ sub_8017580(data->field_0, 16);
+ data->field_11 = sub_8016FF0(data->field_4, data->field_12 + 7);
+
+ if (data->field_13 != 0)
+ {
+ winTemplate = gUnknown_082F0174;
+ winTemplate.baseBlock = sub_8019930();
+ data->listWindowId = AddWindow(&winTemplate);
+
+ sub_8018784(data->listWindowId);
+ gMultiuseListMenuTemplate = gUnknown_082F0204;
+ gMultiuseListMenuTemplate.windowId = data->listWindowId;
+ data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+
+ CopyBgTilemapBufferToVram(0);
+ }
+
+ data->field_F = 0;
+ data->state = 3;
+ break;
+ case 3:
+ id = sub_8013E44();
+ switch (id)
+ {
+ case 1:
+ PlaySE(SE_PC_LOGIN);
+ default:
+ if (data->field_13 != 0)
+ RedrawListMenu(data->listTaskId);
+ break;
+ case 0:
+ if (data->field_13 != 0)
+ id = ListMenuHandleInputGetItemId(data->listTaskId);
+ if (data->field_14 > 120)
+ {
+ if (data->field_0->arr[0].field_1A_0 == 1 && !data->field_0->arr[0].unk.field_0.unk_0a_7)
+ {
+ if (sub_8016F1C(&data->field_0->arr[0], data->field_12 + 7))
+ {
+ data->field_F = 0;
+ data->field_14 = 0;
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ sub_8011FC8(data->field_0->arr[0].unk.playerName, ReadAsU16(data->field_0->arr[0].unk.field_0.unk_00.playerTrainerId));
+ PlaySE(SE_PN_ON);
+ data->state = 4;
+ }
+ else
+ {
+ PlaySE(SE_BOO);
+ data->state = 10;
+ }
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ data->state = 6;
+ data->field_14 = 0;
+ }
+ data->field_14++;
+ break;
+ }
+ break;
+ case 4:
+ sub_8018884(gUnknown_082EFC90);
+ sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
+ data->state = 5;
+ break;
+ case 5:
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ gUnknown_02022C2C = data->field_0->arr[data->field_F].unk.field_0.unk_0a_0;
+ data->state = 12;
+ }
+
+ switch (sub_8011A74())
+ {
+ case 1:
+ case 2:
+ case 6:
+ data->state = 8;
+ break;
+ case 5:
+ sub_8018884(gUnknown_082EDEC4);
+ sub_8011A64(0, 0);
+ break;
+ }
+ break;
+ case 6:
+ case 8:
+ case 10:
+ case 12:
+ if (data->field_13 != 0)
+ {
+ DestroyListMenuTask(data->listTaskId, 0, 0);
+ CopyBgTilemapBufferToVram(0);
+ RemoveWindow(data->listWindowId);
+ }
+ DestroyTask(data->field_11);
+ Free(data->field_0);
+ Free(data->field_4);
+ data->state++;
+ break;
+ case 9:
+ if (mevent_0814257C(&data->textState, gUnknown_082EDF04))
+ {
+ sub_800E084();
+ DestroyTask(taskId);
+ sub_800EDD4();
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 7:
+ if (mevent_0814257C(&data->textState, gText_WirelessSearchCanceled))
+ {
+ sub_800E084();
+ DestroyTask(taskId);
+ sub_800EDD4();
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 11:
+ if (mevent_0814257C(&data->textState, gUnknown_082EFD58[data->field_12]))
+ {
+ sub_800E084();
+ DestroyTask(taskId);
+ sub_800EDD4();
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 13:
+ data->state++;
+ sub_800ADF8();
+ break;
+ case 14:
+ if (sub_800A520())
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void UnionRoomSpecial(void)
+{
+ struct UnkStruct_URoom *dataPtr;
+
+ sub_8010F60();
+ CreateTask(sub_80156E0, 10);
+
+ // dumb line needed to match
+ gUnknown_02022C30.uRoom = gUnknown_02022C30.uRoom;
+
+ dataPtr = AllocZeroed(0x26C);
+ gUnknown_02022C30.uRoom = dataPtr;
+ gUnknown_03000DA8 = dataPtr;
+
+ dataPtr->state = 0;
+ dataPtr->textState = 0;
+ dataPtr->field_10 = 0;
+ dataPtr->field_12 = 0;
+
+ gSpecialVar_Result = 0;
+ sub_819A2BC(0xD0, 1);
+}
+
+u16 ReadAsU16(const u8 *ptr)
+{
+ return (ptr[1] << 8) | (ptr[0]);
+}
+
+void sub_8015664(u32 arg0, const u8 *src)
+{
+ struct UnkStruct_URoom *data = gUnknown_02022C30.uRoom;
+
+ data->state = 8;
+ data->stateAfterPrint = arg0;
+ if (src != gStringVar4)
+ StringExpandPlaceholders(gStringVar4, src);
+}
+
+void sub_801568C(const u8 *src)
+{
+ struct UnkStruct_URoom *data = gUnknown_02022C30.uRoom;
+
+ data->state = 26;
+ if (src != gStringVar4)
+ StringExpandPlaceholders(gStringVar4, src);
+}
+
+void sub_80156B0(struct UnkStruct_URoom *data)
+{
+ memcpy(&gDecompressionBuffer[0x3F00], data->field_0, 0x100);
+}
+
+void sub_80156C8(struct UnkStruct_URoom *data)
+{
+ memcpy(data->field_0, &gDecompressionBuffer[0x3F00], 0x100);
+}
+
+// Cannot match, please fix later.
+/*
+void sub_80156E0(u8 taskId)
+{
+ u32 id = 0;
+ s32 var5 = 0;
+ u32 playerGender = 0;
+ struct UnkStruct_URoom *data = gUnknown_02022C30.uRoom;
+ s16 *taskData = gTasks[taskId].data;
+
+ switch (data->state)
+ {
+ case 0:
+ data->field_4 = AllocZeroed(0x70);
+ data->field_C = AllocZeroed(0x70);
+ data->field_0 = AllocZeroed(0x100);
+ data->field_8 = AllocZeroed(0x20);
+ sub_8017580(data->field_0, 8);
+ gUnknown_02022C2C = 0x40;
+ data->field_20 = sub_8016DF0(data->field_C, data->field_4, 9);
+ sub_8019BA8(data->field_A0);
+ sub_8019F2C();
+ data->state = 1;
+ break;
+ case 1:
+ sub_8019E70(data->spriteIds, taskData[0]);
+ if (++taskData[0] == 8)
+ data->state = 2;
+ break;
+ case 2:
+ sub_8010F84(0x40, 0, 0);
+ sub_8010FCC(gUnknown_02022C40.field_2, gUnknown_02022C40.field_A, gUnknown_02022C40.field_C);
+ sub_800B488();
+ OpenLink();
+ sub_8011C84();
+ sub_8017580(data->field_8, 1);
+ sub_80175EC(data->field_4, 4);
+ sub_80175EC(data->field_C, 4);
+ gSpecialVar_Result = 0;
+ data->state = 3;
+ break;
+ case 3:
+ if ((sub_81B1360() == 8 || sub_81B1360() == 9) && gUnknown_02022C40.field_0 != 0)
+ {
+ id = GetCursorSelectionMonId();
+ switch (gUnknown_02022C40.field_0)
+ {
+ case 1:
+ sub_8011090(0x54, 0, 1);
+ if (id >= PARTY_SIZE)
+ {
+ sub_801807C(&gUnknown_02022C40);
+ sub_8010FCC(0, 0, 0);
+ sub_801568C(gUnknown_082EF4FC);
+ }
+ else if (!sub_80180A0(GetCursorSelectionMonId(), &gUnknown_02022C40))
+ {
+ sub_8015664(0x34, gUnknown_082EF47C);
+ }
+ else
+ {
+ data->state = 55;
+ }
+ break;
+ case 2:
+ sub_80156C8(data);
+ taskData[1] = gUnknown_02022C40.field_8;
+ if (id >= PARTY_SIZE)
+ {
+ sub_801568C(gUnknown_082EF544);
+ }
+ else
+ {
+ sub_8011090(0x54, 0, 1);
+ gUnknown_02022C2C = 0x44;
+ sub_80180E8(GetCursorSelectionMonId(), &gUnknown_02022C40);
+ data->state = 51;
+ }
+ break;
+ }
+ gUnknown_02022C40.field_0 = 0;
+ }
+ else
+ {
+ data->state = 4;
+ }
+ break;
+ case 4:
+ if (gSpecialVar_Result != 0)
+ {
+ if (gSpecialVar_Result == 9)
+ {
+ sub_8011090(0x54, 0, 1);
+ PlaySE(SE_PC_LOGIN);
+ StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
+ data->state = 42;
+ gSpecialVar_Result = 0;
+ }
+ else if (gSpecialVar_Result == 11)
+ {
+ sub_8011090(0x54, 0, 1);
+ data->state = 23;
+ gSpecialVar_Result = 0;
+ }
+ else
+ {
+ taskData[0] = 0;
+ taskData[1] = gSpecialVar_Result - 1;
+ data->state = 24;
+ gSpecialVar_Result = 0;
+ }
+ }
+ else if (ScriptContext2_IsEnabled() != TRUE)
+ {
+ if (gMain.newKeys & A_BUTTON)
+ {
+ if (sub_801A2A8(data->field_0, &taskData[0], &taskData[1], data->spriteIds))
+ {
+ PlaySE(SE_SELECT);
+ sub_80181CC();
+ data->state = 24;
+ break;
+ }
+ else if (sub_8017940())
+ {
+ sub_8011090(0x54, 0, 1);
+ PlaySE(SE_PC_LOGIN);
+ sub_80181CC();
+ StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
+ data->state = 45;
+ break;
+ }
+ }
+
+ switch (sub_8016B00())
+ {
+ case 1:
+ PlaySE(SE_PC_LOGIN);
+ case 2:
+ sub_801A274(data);
+ break;
+ case 4:
+ data->state = 11;
+ sub_80181CC();
+ sub_8010FCC(0, 0, 0);
+ sub_8011090(0x53, sub_80181DC(data), 0);
+ break;
+ }
+ sub_801A284(data);
+ }
+ break;
+ case 23:
+ if (!FuncIsActiveTask(sub_809FA34))
+ {
+ sub_8011090(0x40, 0, 0);
+ data->state = 4;
+ }
+ break;
+ case 24:
+ sub_801704C();
+ playerGender = sub_8017CF8(taskData[1], data->field_0);
+ sub_8011090(0x54, 0, 1);
+ switch (sub_80179D4(data->field_0, taskData[0], taskData[1], playerGender))
+ {
+ case 0:
+ data->state = 26;
+ break;
+ case 1:
+ sub_8012188(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, gUnknown_02022C2C);
+ data->field_12 = id;
+ data->state = 25;
+ break;
+ case 2:
+ sub_8015664(0x13, gStringVar4);
+ break;
+ }
+ break;
+ case 25:
+ sub_801704C();
+ switch (sub_8011A74())
+ {
+ case 4:
+ sub_801818C(TRUE);
+ data->state = 4;
+ break;
+ case 1:
+ case 2:
+ if (sub_8011B90() == TRUE)
+ sub_801568C(gUnknown_082EE6C8);
+ else
+ sub_8015664(30, gUnknown_082EE6C8);
+
+ gUnknown_02022C2C = 0x40;
+ break;
+ }
+
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ sub_80143E4(gBlockSendBuffer, TRUE);
+ CreateTask(sub_80140E0, 5);
+ data->state = 38;
+ }
+ break;
+ case 38:
+ if (!FuncIsActiveTask(sub_80140E0))
+ {
+ if (gUnknown_02022C2C == 0x44)
+ sub_8015664(31, gUnknown_082EE004);
+ else
+ data->state = 5;
+ }
+ break;
+ case 30:
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ sub_801818C(FALSE);
+ sub_801A3D0(taskData[0], taskData[1], data->field_0);
+ data->state = 2;
+ }
+ break;
+ case 6:
+ var5 = sub_8017178(&data->textState, &data->field_1B, &data->field_1C, &gUnknown_082F021C, &gUnknown_082F0244);
+ if (var5 != -1)
+ {
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ data->state = 28;
+ }
+ else
+ {
+ data->field_98 = 0;
+ playerGender = sub_8017CF8(taskData[1], data->field_0);
+ switch (var5)
+ {
+ case -2:
+ case 0x40:
+ data->field_4C[0] = 0x40;
+ sub_800FE50(data->field_4C);
+ StringCopy(gStringVar4, gUnknown_082EEB80[gLinkPlayers[0].gender]);
+ data->state = 32;
+ break;
+ default:
+ gUnknown_02022C2C = var5;
+ gUnknown_02022C2D = (u32)(var5) >> 8;
+ if (gUnknown_02022C2C == 0x41 && !sub_8018024())
+ {
+ sub_8015664(5, gUnknown_082EEBD0);
+ }
+ else
+ {
+ data->field_4C[0] = gUnknown_02022C2C | 0x40;
+ sub_800FE50(data->field_4C);
+ data->state = 27;
+ }
+ break;
+ }
+ }
+ }
+ break;
+ case 28:
+ StringCopy(gStringVar4, gUnknown_082EEB88);
+ data->state = 36;
+ break;
+ case 27:
+ sub_8017FD8(data);
+ playerGender = sub_8017CF8(taskData[1], data->field_0);
+ id = sub_8017984(data->field_4C[0] & 0x3F);
+ if (PrintOnTextbox(&data->textState, gUnknown_082EE82C[playerGender][id]))
+ {
+ taskData[3] = 0;
+ data->state = 29;
+ }
+ break;
+ case 32:
+ sub_800AC34();
+ data->state = 36;
+ break;
+ case 31:
+ data->field_4C[0] = 0x44;
+ data->field_4C[1] = gUnknown_02022C40.species;
+ data->field_4C[2] = gUnknown_02022C40.level;
+ sub_800FE50(data->field_4C);
+ data->state = 29;
+ break;
+ case 29:
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ StringCopy(gStringVar4, gUnknown_082EEB88);
+ data->state = 28;
+ }
+ else
+ {
+ sub_8017FD8(data);
+ if (data->field_98 == 0x51)
+ {
+ if (gUnknown_02022C2C == 8)
+ {
+ sub_8018220(gStringVar4, data, FALSE);
+ data->state = 40;
+ }
+ else
+ {
+ data->state = 13;
+ }
+ }
+ else if (data->field_98 == 0x52)
+ {
+ data->state = 32;
+ sub_8017D9C(gStringVar4, gUnknown_02022C2C | 0x40, gLinkPlayers[0].gender);
+ gUnknown_02022C2C = 0;
+ }
+ }
+ break;
+ case 5:
+ case 7:
+ id = sub_80179AC(&data->field_0->arr[taskData[1]]);
+ playerGender = sub_8017CF8(taskData[1], data->field_0);
+ sub_8015664(6, gUnknown_082EE24C[id][playerGender]);
+ break;
+ case 40:
+ if (PrintOnTextbox(&data->textState, gStringVar4))
+ {
+ data->state = 41;
+ sub_800ADF8();
+ data->field_98 = 0;
+ data->field_9A = 0;
+ }
+ break;
+ case 41:
+ if (sub_800A520())
+ {
+ if (GetMultiplayerId() == 0)
+ {
+ StringCopy(gStringVar1, gLinkPlayers[GetMultiplayerId() ^ 1].name);
+ id = sub_800E540(gLinkPlayers[1].trainerId, gLinkPlayers[1].name);
+ StringExpandPlaceholders(gStringVar4, gUnknown_082EE378[id]);
+ data->state = 33;
+ }
+ else
+ {
+ data->state = 7;
+ }
+ }
+ break;
+ case 19:
+ switch (sub_80170B8(&data->textState, FALSE))
+ {
+ case 0:
+ CopyBgTilemapBufferToVram(0);
+ gUnknown_02022C2C = 0x45;
+ sub_8011090(0x45, 0, 1);
+ sub_8012188(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, gUnknown_02022C2C);
+ data->field_12 = taskData[1];
+ data->state = 20;
+ taskData[3] = 0;
+ break;
+ case 1:
+ case -1:
+ playerGender = sub_8017CF8(taskData[1], data->field_0);
+ sub_801568C(gUnknown_082EEC9C[playerGender]);
+ break;
+ }
+ break;
+ case 20:
+ if (++taskData[2] > 60)
+ {
+ data->state = 21;
+ taskData[2] = 0;
+ }
+ break;
+ case 21:
+ switch (sub_8011A74())
+ {
+ case 4:
+ sub_801818C(TRUE);
+ data->state = 4;
+ break;
+ case 1:
+ case 2:
+ playerGender = sub_8017CF8(taskData[1], data->field_0);
+ sub_8011090(0x54, 0, 1);
+ if (sub_8011B90() == TRUE)
+ sub_801568C(gUnknown_082EED3C[playerGender]);
+ else
+ sub_8015664(30, gUnknown_082EED3C[playerGender]);
+ break;
+ case 3:
+ data->state = 22;
+ break;
+ }
+ taskData[3]++;
+ break;
+ case 22:
+ if (sub_8011A80())
+ {
+ playerGender = sub_8017CF8(taskData[1], data->field_0);
+ sub_8011090(0x54, 0, 1);
+ if (sub_8011B90() == TRUE)
+ sub_801568C(gUnknown_082EED3C[playerGender]);
+ else
+ sub_8015664(30, gUnknown_082EED3C[playerGender]);
+ }
+ if (gReceivedRemoteLinkPlayers != 0)
+ data->state = 16;
+ break;
+ case 11:
+ PlaySE(SE_PINPON);
+ sub_800EF7C();
+ data->state = 12;
+ data->field_9A = 0;
+ break;
+ case 12:
+ if (sub_8011A80())
+ {
+ sub_801818C(FALSE);
+ data->state = 2;
+ }
+ else if (gReceivedRemoteLinkPlayers != 0)
+ {
+ sub_80143E4(gBlockSendBuffer, TRUE);
+ CreateTask(sub_80140E0, 5);
+ data->state = 39;
+ }
+ break;
+ case 39:
+ sub_801689C(data);
+ if (!FuncIsActiveTask(sub_80140E0))
+ {
+ data->state = 33;
+ StringCopy(gStringVar1, gLinkPlayers[1].name);
+ id = sub_800E540(gLinkPlayers[1].trainerId, gLinkPlayers[1].name);
+ StringExpandPlaceholders(gStringVar4, gUnknown_082EE324[id]);
+ }
+ break;
+ case 33:
+ sub_801689C(data);
+ if (PrintOnTextbox(&data->textState, gStringVar4))
+ data->state = 34;
+ break;
+ case 34:
+ sub_801689C(data);
+ if (sub_80168DC(data) && gMain.newKeys & B_BUTTON)
+ {
+ sub_8011DE0(1);
+ StringCopy(gStringVar4, gUnknown_082EE598);
+ data->state = 36;
+ }
+ break;
+ case 35:
+ sub_8015664(9, gStringVar4);
+ break;
+ case 9:
+ switch (sub_80170B8(&data->textState, FALSE))
+ {
+ case 0:
+ data->field_4C[0] = 0x51;
+ if (gUnknown_02022C2C == 0x45)
+ sub_8011090(gUnknown_02022C2C | 0x40, sub_801100C(1), 0);
+ else
+ sub_8011090(gUnknown_02022C2C | 0x40, sub_801100C(1), 1);
+
+ data->field_8->arr[0].field_1B = 0;
+ taskData[3] = 0;
+ if (gUnknown_02022C2C == 0x41)
+ {
+ if (!sub_8018024())
+ {
+ data->field_4C[0] = 0x52;
+ sub_800FE50(data->field_4C);
+ data->state = 10;
+ StringCopy(gStringVar4, gUnknown_082EEC14);
+ }
+ else
+ {
+ sub_800FE50(data->field_4C);
+ data->state = 13;
+ }
+ }
+ else if (gUnknown_02022C2C == 0x48)
+ {
+ sub_800FE50(data->field_4C);
+ sub_8018220(gStringVar4, data, 1);
+ data->state = 40;
+ }
+ else
+ {
+ sub_800FE50(data->field_4C);
+ data->state = 13;
+ }
+ break;
+ case 1:
+ case -1:
+ data->field_4C[0] = 0x52;
+ sub_800FE50(data->field_4C);
+ data->state = 10;
+ sub_8013078(gStringVar4, gUnknown_02022C2C);
+ break;
+ }
+ break;
+ case 10:
+ sub_800AC34();
+ data->state = 36;
+ break;
+ case 36:
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ gUnknown_02022C2C = 0x40;
+ sub_8015664(0x25, gStringVar4);
+ memset(data->field_4C, 0, sizeof(data->field_4C));
+ data->field_9A = 0;
+ data->field_98 = 0;
+ }
+ break;
+ case 37:
+ data->state = 2;
+ sub_801818C(FALSE);
+ break;
+ case 13:
+ sub_8017E00(gStringVar4, gUnknown_02022C2C | 0x40);
+ sub_8015664(0xE, gStringVar4);
+ break;
+ case 14:
+ sub_800ADF8();
+ data->state = 15;
+ break;
+ case 15:
+ if (sub_800A520())
+ data->state = 16;
+ break;
+ case 16:
+ Free(data->field_8);
+ Free(data->field_0);
+ Free(data->field_C);
+ Free(data->field_4);
+ DestroyTask(data->field_20);
+ sub_8019F04(data->spriteIds);
+ data->state = 17;
+ break;
+ case 17:
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, RGB_BLACK);
+ data->state = 18;
+ break;
+ case 18:
+ if (!UpdatePaletteFade())
+ {
+ sub_8019E3C();
+ DestroyTask(taskId);
+ Free(gUnknown_02022C30.uRoom);
+ sub_80149D8();
+ }
+ break;
+ case 42:
+ if (sub_800F7DC()->species == SPECIES_NONE)
+ {
+ data->state = 43;
+ }
+ else
+ {
+ if (sub_800F7DC()->species == SPECIES_EGG)
+ {
+ StringCopy(gStringVar4, gUnknown_082EF590);
+ }
+ else
+ {
+ StringCopy(gStringVar1, gSpeciesNames[sub_800F7DC()->species]);
+ ConvertIntToDecimalStringN(gStringVar2, sub_800F7DC()->unk_0b_1, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringExpandPlaceholders(gStringVar4, gUnknown_082EF564);
+ }
+ sub_8015664(44, gStringVar4);
+ }
+ break;
+ case 43:
+ if (PrintOnTextbox(&data->textState, gUnknown_082EF20C))
+ data->state = 47;
+ break;
+ case 47:
+ var5 = sub_8017178(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_082F025C, &gUnknown_082F027C);
+ if (var5 != -1)
+ {
+ if (var5 == -2 || var5 == 3)
+ {
+ data->state = 4;
+ sub_801818C(TRUE);
+ }
+ else
+ {
+ switch (var5)
+ {
+ case 1:
+ sub_8015664(53, gUnknown_082EF4C4);
+ break;
+ case 2:
+ sub_8015664(47, gUnknown_082EF298);
+ break;
+ }
+ }
+ }
+ break;
+ case 53:
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ data->state = 54;
+ break;
+ case 54:
+ if (!gPaletteFade.active)
+ {
+ gUnknown_02022C40.field_0 = 1;
+ gFieldCallback = sub_80AF128;
+ sub_81B8904(8, CB2_ReturnToField);
+ }
+ break;
+ case 52:
+ var5 = sub_8017178(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_082F0294, &gUnknown_082F032C);
+ if (var5 != -1)
+ {
+ switch (var5)
+ {
+ case -2:
+ case 18:
+ sub_801807C(&gUnknown_02022C40);
+ sub_8010FCC(0, 0, 0);
+ sub_801568C(gUnknown_082EF4FC);
+ break;
+ default:
+ gUnknown_02022C40.field_2 = var5;
+ data->state = 55;
+ break;
+ }
+ }
+ break;
+ case 55:
+ sub_8010FCC(gUnknown_02022C40.field_2, gUnknown_02022C40.field_A, gUnknown_02022C40.field_C);
+ sub_801568C(gUnknown_082EF520);
+ break;
+ case 44:
+ switch (sub_80170B8(&data->textState, FALSE))
+ {
+ case 0:
+ data->state = 56;
+ break;
+ case 1:
+ case -1:
+ sub_801818C(TRUE);
+ data->state = 4;
+ break;
+ }
+ break;
+ case 56:
+ if (PrintOnTextbox(&data->textState, gUnknown_082EF5B8))
+ {
+ sub_8010FCC(0, 0, 0);
+ sub_801807C(&gUnknown_02022C40);
+ sub_801818C(TRUE);
+ data->state = 4;
+ }
+ break;
+ case 45:
+ if (PrintOnTextbox(&data->textState, gUnknown_082EF1EC))
+ data->state = 46;
+ break;
+ case 46:
+ sub_80173B0();
+ data->state = 48;
+ break;
+ case 48:
+ var5 = sub_80172A0(&data->textState, &data->field_1D, &data->field_4A, &data->field_1E, &gUnknown_082F034C, &gUnknown_082F03A4, data->field_0);
+ if (var5 != -1)
+ {
+ switch (var5)
+ {
+ case -2:
+ case 8:
+ sub_801818C(TRUE);
+ data->state = 4;
+ break;
+ default:
+ sub_80173B0();
+ switch (sub_8017D04(data->field_0->arr[var5].unk.field_0.type, data->field_0->arr[var5].unk.field_0.species))
+ {
+ case 0:
+ sub_8018404(gStringVar1, &data->field_0->arr[var5]);
+ sub_8015664(49, gUnknown_082EF65C);
+ taskData[1] = var5;
+ break;
+ case 1:
+ sub_8018404(gStringVar1, &data->field_0->arr[var5]);
+ StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]);
+ sub_8015664(46, gUnknown_082EF6E4);
+ break;
+ case 2:
+ sub_8018404(gStringVar1, &data->field_0->arr[var5]);
+ StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]);
+ sub_8015664(46, gUnknown_082EF718);
+ break;
+ }
+ break;
+ }
+ }
+ break;
+ case 49:
+ switch (sub_80170B8(&data->textState, FALSE))
+ {
+ case 0:
+ data->state = 50;
+ break;
+ case -1:
+ case 1:
+ sub_801818C(TRUE);
+ data->state = 4;
+ break;
+ }
+ break;
+ case 50:
+ if (PrintOnTextbox(&data->textState, gUnknown_082EF4C4))
+ {
+ gUnknown_02022C40.field_0 = 2;
+ memcpy(&gUnknown_02022C38, &data->field_0->arr[taskData[1]].unk.field_0.unk_00, sizeof(gUnknown_02022C38));
+ gUnknown_02022C3E = data->field_0->arr[taskData[1]].unk.field_0.type;
+ gUnknown_02022C3C = data->field_0->arr[taskData[1]].unk.field_0.species;
+ gFieldCallback = sub_80AF128;
+ sub_81B8904(9, CB2_ReturnToField);
+ sub_80156B0(data);
+ gUnknown_02022C40.field_8 = taskData[1];
+ }
+ break;
+ case 51:
+ gUnknown_02022C2C = 0x44;
+ sub_8012188(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, 0x44);
+ sub_8018404(gStringVar1, &data->field_0->arr[taskData[1]]);
+ sub_8017020(gUnknown_082EE17C[2]);
+ data->state = 25;
+ break;
+ case 26:
+ if (PrintOnTextbox(&data->textState, gStringVar4))
+ {
+ sub_801818C(TRUE);
+ sub_801A3D0(taskData[0], taskData[1], data->field_0);
+ data->state = 4;
+ }
+ break;
+ case 8:
+ if (PrintOnTextbox(&data->textState, gStringVar4))
+ data->state = data->stateAfterPrint;
+ break;
+ }
+}
-// .rodata
+void var_800D_set_xB(void)
+{
+ if (InUnionRoom() == TRUE)
+ gSpecialVar_Result = 11;
+}
-// .text
+*/
diff --git a/src/safari_zone.c b/src/safari_zone.c
index 4e69a06a3..01d72fa13 100644
--- a/src/safari_zone.c
+++ b/src/safari_zone.c
@@ -42,7 +42,7 @@ extern void PlayerGetDestCoords(s16* x, s16* y);
EWRAM_DATA u8 gNumSafariBalls = 0;
EWRAM_DATA static u16 sSafariZoneStepCounter = 0;
EWRAM_DATA static u8 sSafariZoneCaughtMons = 0;
-EWRAM_DATA static u8 sSafariZoneFleedMons = 0;
+EWRAM_DATA static u8 sSafariZonePkblkUses = 0;
EWRAM_DATA static struct PokeblockFeeder sPokeblockFeeders[NUM_POKEBLOCK_FEEDERS] = {0};
static void ClearAllPokeblockFeeders(void);
@@ -71,12 +71,12 @@ void EnterSafariMode(void)
gNumSafariBalls = 30;
sSafariZoneStepCounter = 500;
sSafariZoneCaughtMons = 0;
- sSafariZoneFleedMons = 0;
+ sSafariZonePkblkUses = 0;
}
void ExitSafariMode(void)
{
- sub_80EE44C(sSafariZoneCaughtMons, sSafariZoneFleedMons);
+ sub_80EE44C(sSafariZoneCaughtMons, sSafariZonePkblkUses);
ResetSafariZoneFlag();
ClearAllPokeblockFeeders();
gNumSafariBalls = 0;
@@ -107,7 +107,7 @@ void SafariZoneRetirePrompt(void)
void CB2_EndSafariBattle(void)
{
- sSafariZoneFleedMons += gBattleResults.field_1F;
+ sSafariZonePkblkUses += gBattleResults.pokeblockThrows;
if (gBattleOutcome == B_OUTCOME_CAUGHT)
sSafariZoneCaughtMons++;
if (gNumSafariBalls != 0)
@@ -172,7 +172,7 @@ void GetPokeblockFeederWithinRange(void)
{
if (gSaveBlock1Ptr->location.mapNum == sPokeblockFeeders[i].mapNum)
{
- //Get absolute value of x and y distance from Pokeblock feeder on current map
+ // Get absolute value of x and y distance from Pokeblock feeder on current map.
x -= sPokeblockFeeders[i].x;
y -= sPokeblockFeeders[i].y;
if (x < 0)
diff --git a/src/secret_base.c b/src/secret_base.c
index ea2b3b614..c71f7ed23 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -1,6 +1,7 @@
// Includes
#include "global.h"
+#include "constants/bg_event_constants.h"
#include "constants/decorations.h"
#include "malloc.h"
#include "main.h"
@@ -38,6 +39,7 @@
#include "link.h"
#include "tv.h"
#include "secret_base.h"
+#include "constants/map_types.h"
extern void mapldr_default(void);
@@ -335,7 +337,7 @@ void sub_80E8EE0(struct MapEvents const *events)
for (bgEventIndex = 0; bgEventIndex < events->bgEventCount; bgEventIndex ++)
{
- if (events->bgEvents[bgEventIndex].kind == 8)
+ if (events->bgEvents[bgEventIndex].kind == BG_EVENT_SECRET_BASE)
{
for (j = 0; j < 20; j ++)
{
@@ -600,7 +602,7 @@ void sub_80E9608(struct Coords16 *coords, struct MapEvents *events)
for (bgEventIdx = 0; bgEventIdx < events->bgEventCount; bgEventIdx ++)
{
- if (events->bgEvents[bgEventIdx].kind == 8 && coords->x == events->bgEvents[bgEventIdx].x + 7 && coords->y == events->bgEvents[bgEventIdx].y + 7)
+ if (events->bgEvents[bgEventIdx].kind == BG_EVENT_SECRET_BASE && coords->x == events->bgEvents[bgEventIdx].x + 7 && coords->y == events->bgEvents[bgEventIdx].y + 7)
{
sCurSecretBaseId = events->bgEvents[bgEventIdx].bgUnion.secretBaseId;
break;
@@ -780,7 +782,7 @@ void sub_80E9AD0(void)
events = gMapHeader.events;
for (i = 0; i < events->bgEventCount; i ++)
{
- if (events->bgEvents[i].kind == 8 && gSaveBlock1Ptr->secretBases[0].secretBaseId == events->bgEvents[i].bgUnion.secretBaseId)
+ if (events->bgEvents[i].kind == BG_EVENT_SECRET_BASE && gSaveBlock1Ptr->secretBases[0].secretBaseId == events->bgEvents[i].bgUnion.secretBaseId)
{
tile = MapGridGetMetatileIdAt(events->bgEvents[i].x + 7, events->bgEvents[i].y + 7);
for (j = 0; j < 7; j ++)
diff --git a/src/start_menu.c b/src/start_menu.c
index 7e343e031..7591d3b57 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -1208,7 +1208,7 @@ static bool32 sub_80A03E4(u8 *par1)
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sUnknown_085105A8, ARRAY_COUNT(sUnknown_085105A8));
InitWindows(sUnknown_085105AC);
- box_border_load_tiles_and_pal(0, 8, 224);
+ LoadUserWindowBorderGfx_(0, 8, 224);
sub_81978B0(240);
break;
case 3:
diff --git a/src/starter_choose.c b/src/starter_choose.c
index 14592dac1..b55b0fbc5 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -9,6 +9,7 @@
#include "main.h"
#include "window.h"
#include "text.h"
+#include "text_window.h"
#include "decompress.h"
#include "menu.h"
#include "sound.h"
@@ -18,6 +19,7 @@
#include "data2.h"
#include "international_string_util.h"
#include "trig.h"
+#include "scanline_effect.h"
#define STARTER_MON_COUNT 3
@@ -46,13 +48,10 @@ extern const u8 gStarterChoose_LabelCoords[][2];
extern const u8 gUnknown_085B1E0C[];
extern const u8 gUnknown_085B1E28[][2];
-extern void LoadUserWindowBorderGfx(u8, u16, u8);
-extern void ScanlineEffect_Stop(void);
extern void clear_scheduled_bg_copies_to_vram(void);
extern void dp13_810BB8C(void);
extern void do_scheduled_bg_tilemap_copies_to_vram(void);
extern u16 sub_818D820(u16);
-extern const u16 *GetOverworldTextboxPalettePtr(void);
extern u8 sub_818D3E4(u16 species, u32 trainerId, u32 personality, u8 flags, s16 x, s16 y, u8, u16);
// this file's functions
diff --git a/src/text_window.c b/src/text_window.c
index 54bae6055..e7e8f0ca6 100644
--- a/src/text_window.c
+++ b/src/text_window.c
@@ -91,13 +91,13 @@ const struct TilesPal *GetWindowFrameTilesPal(u8 id)
return &sWindowFrames[id];
}
-void copy_textbox_border_tile_patterns_to_vram(u8 windowId, u16 destOffset, u8 palOffset)
+void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset)
{
LoadBgTiles(GetWindowAttribute(windowId, WINDOW_PRIORITY), gMessageBox_Gfx, 0x1C0, destOffset);
LoadPalette(GetOverworldTextboxPalettePtr(), palOffset, 0x20);
}
-void box_border_load_tiles_and_pal(u8 windowId, u16 destOffset, u8 palOffset)
+void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset)
{
LoadUserWindowBorderGfx(windowId, destOffset, palOffset);
}
diff --git a/src/walda_phrase.c b/src/walda_phrase.c
index 0aa6f5aca..4a82be14f 100644
--- a/src/walda_phrase.c
+++ b/src/walda_phrase.c
@@ -13,7 +13,6 @@ extern const u8 gText_Peekaboo[];
extern u8 *GetWaldaPhrasePtr(void);
extern bool32 IsWaldaPhraseEmpty(void);
extern void sub_80AF168(void);
-extern void CB2_ReturnToField(void);
extern void SetWaldaPhrase(const u8 *src);
extern void SetWaldaWallpaperPatternId(u8 patternId);
extern void SetWaldaWallpaperIconId(u8 iconId);