Document contest AI scripts

This commit is contained in:
GriffinR 2020-08-21 14:47:55 -04:00
parent 469ec5f248
commit fbb70b3727
8 changed files with 824 additions and 689 deletions

View File

@ -510,6 +510,14 @@
.4byte \destination .4byte \destination
.endm .endm
.macro if_used_combo_starter mon:req, destination:req
if_used_combo_starter_eq \mon, TRUE, \destination
.endm
.macro if_not_used_combo_starter mon:req, destination:req
if_used_combo_starter_eq \mon, FALSE, \destination
.endm
@ whether the mon can make an appeal @ whether the mon can make an appeal
.macro check_can_participate mon:req .macro check_can_participate mon:req
@ -803,7 +811,7 @@
.4byte \destination .4byte \destination
.endm .endm
@ NOTE: Random is broken (see ContestAICmd_if_random_less_than) @ NOTE: The random commands are broken (see ContestAICmd_if_random_less_than)
.macro if_random_less_than num:req, destination:req .macro if_random_less_than num:req, destination:req
.byte 0x7D .byte 0x7D
.byte \num .byte \num
@ -844,6 +852,7 @@
.4byte \destination .4byte \destination
.endm .endm
@ This is used incorrectly to check for an effect; see ContestAICmd_check_user_has_move
.macro check_user_has_move move:req .macro check_user_has_move move:req
.byte 0x85 .byte 0x85
.2byte \move .2byte \move
@ -855,8 +864,8 @@
.4byte \destination .4byte \destination
.endm .endm
.macro if_effect_in_user_moveset effect:req, destination:req .macro if_user_doesnt_have_move move:req, destination:req
.byte 0x87 .byte 0x87
.2byte \effect .2byte \move
.4byte \destination .4byte \destination
.endm .endm

File diff suppressed because it is too large Load Diff

View File

@ -52,6 +52,37 @@
#define CONTEST_AI_CHECK_ORDER (1 << 4) #define CONTEST_AI_CHECK_ORDER (1 << 4)
#define CONTEST_AI_CHECK_GOOD_MOVE (1 << 5) #define CONTEST_AI_CHECK_GOOD_MOVE (1 << 5)
#define CONTEST_AI_ERRATIC (1 << 6) #define CONTEST_AI_ERRATIC (1 << 6)
#define CONTEST_AI_DUMMY_1 (1 << 7)
#define CONTEST_AI_DUMMY_2 (1 << 8)
#define CONTEST_AI_DUMMY_3 (1 << 9)
#define CONTEST_AI_DUMMY_4 (1 << 10)
#define CONTEST_AI_DUMMY_5 (1 << 11)
#define CONTEST_AI_DUMMY_6 (1 << 12)
#define CONTEST_AI_DUMMY_7 (1 << 13)
#define CONTEST_AI_DUMMY_8 (1 << 14)
#define CONTEST_AI_DUMMY_9 (1 << 15)
#define CONTEST_AI_DUMMY_10 (1 << 16)
#define CONTEST_AI_DUMMY_11 (1 << 17)
#define CONTEST_AI_DUMMY_12 (1 << 18)
#define CONTEST_AI_DUMMY_13 (1 << 19)
#define CONTEST_AI_DUMMY_14 (1 << 20)
#define CONTEST_AI_DUMMY_15 (1 << 21)
#define CONTEST_AI_DUMMY_16 (1 << 22)
#define CONTEST_AI_DUMMY_17 (1 << 23)
#define CONTEST_AI_DUMMY_18 (1 << 24)
#define CONTEST_AI_DUMMY_19 (1 << 25)
#define CONTEST_AI_DUMMY_20 (1 << 26)
#define CONTEST_AI_DUMMY_21 (1 << 27)
#define CONTEST_AI_DUMMY_22 (1 << 28)
#define CONTEST_AI_DUMMY_23 (1 << 29)
#define CONTEST_AI_DUMMY_24 (1 << 30)
#define CONTEST_AI_DUMMY_25 (1 << 31)
// The below scripts are used by every AI contest opponent
// It includes every non-dummy script
#define CONTEST_AI_COMMON (CONTEST_AI_CHECK_BAD_MOVE | CONTEST_AI_CHECK_COMBO | CONTEST_AI_CHECK_BORING | \
CONTEST_AI_CHECK_EXCITEMENT | CONTEST_AI_CHECK_ORDER | CONTEST_AI_CHECK_GOOD_MOVE | CONTEST_AI_ERRATIC | \
CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5)
#define CONTEST_EFFECT_HIGHLY_APPEALING 0 #define CONTEST_EFFECT_HIGHLY_APPEALING 0
#define CONTEST_EFFECT_USER_MORE_EASILY_STARTLED 1 #define CONTEST_EFFECT_USER_MORE_EASILY_STARTLED 1
@ -102,6 +133,16 @@
#define CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED 46 #define CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED 46
#define CONTEST_EFFECT_DONT_EXCITE_AUDIENCE 47 #define CONTEST_EFFECT_DONT_EXCITE_AUDIENCE 47
// Each of the above effects is grouped into one of these effect type categories
// Only a few of these get checked by the AI, the rest go unused
#define CONTEST_EFFECT_TYPE_APPEAL 0
#define CONTEST_EFFECT_TYPE_AVOID_STARTLE 1
#define CONTEST_EFFECT_TYPE_STARTLE_MON 2
#define CONTEST_EFFECT_TYPE_STARTLE_MONS 3
#define CONTEST_EFFECT_TYPE_WORSEN 4
#define CONTEST_EFFECT_TYPE_SPECIAL_APPEAL 5
#define CONTEST_EFFECT_TYPE_TURN_ORDER 6
#define COMBO_STARTER_RAIN_DANCE 1 #define COMBO_STARTER_RAIN_DANCE 1
#define COMBO_STARTER_RAGE 2 #define COMBO_STARTER_RAGE 2
#define COMBO_STARTER_FOCUS_ENERGY 3 #define COMBO_STARTER_FOCUS_ENERGY 3

View File

@ -90,7 +90,7 @@ struct ContestPokemon
u8 nickname[POKEMON_NAME_LENGTH + 1]; u8 nickname[POKEMON_NAME_LENGTH + 1];
u8 trainerName[PLAYER_NAME_LENGTH + 1]; u8 trainerName[PLAYER_NAME_LENGTH + 1];
u8 trainerGfxId; u8 trainerGfxId;
u32 aiChecks; u32 aiFlags;
u8 whichRank:2; u8 whichRank:2;
u8 aiPool_Cool:1; u8 aiPool_Cool:1;
u8 aiPool_Beauty:1; u8 aiPool_Beauty:1;
@ -231,8 +231,8 @@ struct ContestAIInfo
/*0x05*/ u8 moveScores[MAX_MON_MOVES]; /*0x05*/ u8 moveScores[MAX_MON_MOVES];
/*0x09*/ u8 aiAction; /*0x09*/ u8 aiAction;
/*0x0A*/ u8 filler[6]; /*0x0A*/ u8 filler[6];
/*0x10*/ u8 currentAICheck; /*0x10*/ u8 currentAIFlag;
/*0x14*/ u32 aiChecks; /*0x14*/ u32 aiFlags;
/*0x18*/ s16 scriptResult; /*0x18*/ s16 scriptResult;
/*0x1A*/ s16 vars[3]; /*0x1A*/ s16 vars[3];
/*0x20*/ const u8 *stack[8]; /*0x20*/ const u8 *stack[8];

View File

@ -2789,7 +2789,7 @@ void CreateContestMonFromParty(u8 partyIndex)
gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN; gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_BRENDAN;
else else
gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_MAY; gContestMons[gContestPlayerMonIndex].trainerGfxId = OBJ_EVENT_GFX_LINK_MAY;
gContestMons[gContestPlayerMonIndex].aiChecks = 0; gContestMons[gContestPlayerMonIndex].aiFlags = 0;
gContestMons[gContestPlayerMonIndex].highestRank = 0; gContestMons[gContestPlayerMonIndex].highestRank = 0;
gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES); gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES);
GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name); GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name);
@ -5620,7 +5620,7 @@ void ClearContestWinnerPicsInContestHall(void)
s32 i; s32 i;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
gSaveBlock1Ptr->contestWinners[i] = gUnknown_08587FA4[i]; gSaveBlock1Ptr->contestWinners[i] = gDefaultContestWinners[i];
} }
static void SetContestLiveUpdateFlags(u8 contestant) static void SetContestLiveUpdateFlags(u8 contestant)

View File

@ -7,7 +7,7 @@
#include "constants/moves.h" #include "constants/moves.h"
extern const u8 *gAIScriptPtr; extern const u8 *gAIScriptPtr;
extern const u8 *gContestAIChecks[]; extern const u8 *gContestAI_ScriptsTable[];
static void ContestAICmd_score(void); static void ContestAICmd_score(void);
static void ContestAICmd_get_appeal_num(void); static void ContestAICmd_get_appeal_num(void);
@ -144,7 +144,7 @@ static void ContestAICmd_if_user_has_exciting_move(void);
static void ContestAICmd_if_user_doesnt_have_exciting_move(void); static void ContestAICmd_if_user_doesnt_have_exciting_move(void);
static void ContestAICmd_check_user_has_move(void); static void ContestAICmd_check_user_has_move(void);
static void ContestAICmd_if_user_has_move(void); static void ContestAICmd_if_user_has_move(void);
static void ContestAICmd_if_effect_in_user_moveset(void); static void ContestAICmd_if_user_doesnt_have_move(void);
typedef void (* ContestAICmdFunc)(void); typedef void (* ContestAICmdFunc)(void);
@ -285,7 +285,7 @@ static const ContestAICmdFunc sContestAICmdTable[] =
ContestAICmd_if_user_doesnt_have_exciting_move, // 0x84 ContestAICmd_if_user_doesnt_have_exciting_move, // 0x84
ContestAICmd_check_user_has_move, // 0x85 ContestAICmd_check_user_has_move, // 0x85
ContestAICmd_if_user_has_move, // 0x86 ContestAICmd_if_user_has_move, // 0x86
ContestAICmd_if_effect_in_user_moveset, // 0x87 ContestAICmd_if_user_doesnt_have_move, // 0x87
}; };
static void ContestAI_DoAIProcessing(void); static void ContestAI_DoAIProcessing(void);
@ -303,20 +303,20 @@ void ContestAI_ResetAI(u8 contestantAI)
eContestAI.contestantId = contestantAI; eContestAI.contestantId = contestantAI;
eContestAI.stackSize = 0; eContestAI.stackSize = 0;
eContestAI.aiChecks = gContestMons[eContestAI.contestantId].aiChecks; eContestAI.aiFlags = gContestMons[eContestAI.contestantId].aiFlags;
} }
u8 ContestAI_GetActionToUse(void) u8 ContestAI_GetActionToUse(void)
{ {
while (eContestAI.aiChecks != 0) while (eContestAI.aiFlags != 0)
{ {
if (eContestAI.aiChecks & 1) if (eContestAI.aiFlags & 1)
{ {
eContestAI.aiState = CONTESTAI_SETTING_UP; eContestAI.aiState = CONTESTAI_SETTING_UP;
ContestAI_DoAIProcessing(); ContestAI_DoAIProcessing();
} }
eContestAI.aiChecks >>= 1; eContestAI.aiFlags >>= 1;
eContestAI.currentAICheck++; eContestAI.currentAIFlag++;
eContestAI.nextMoveIndex = 0; eContestAI.nextMoveIndex = 0;
} }
@ -346,7 +346,7 @@ static void ContestAI_DoAIProcessing(void)
case CONTESTAI_DO_NOT_PROCESS: case CONTESTAI_DO_NOT_PROCESS:
break; break;
case CONTESTAI_SETTING_UP: case CONTESTAI_SETTING_UP:
gAIScriptPtr = gContestAIChecks[eContestAI.currentAICheck]; gAIScriptPtr = gContestAI_ScriptsTable[eContestAI.currentAIFlag];
if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == MOVE_NONE) if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == MOVE_NONE)
eContestAI.nextMove = MOVE_NONE; // don't process a move that doesn't exist. eContestAI.nextMove = MOVE_NONE; // don't process a move that doesn't exist.
@ -1627,7 +1627,8 @@ static void ContestAICmd_if_not_eq_var(void)
} }
// UB: Should just be comparing to gAIScriptPtr[1] in the functions below // UB: Should just be comparing to gAIScriptPtr[1] in the functions below
// With the values passed to if_random_less_than this goes way OOB on vars // The values passed via gAIScriptPtr[1] range from 0-255
// and vars is an s16[3], so this goes way out of bounds
static void ContestAICmd_if_random_less_than(void) static void ContestAICmd_if_random_less_than(void)
{ {
#ifndef UBFIX #ifndef UBFIX
@ -1729,6 +1730,12 @@ static void ContestAICmd_if_user_doesnt_have_exciting_move(void)
gAIScriptPtr += 4; gAIScriptPtr += 4;
} }
// BUG: This is checking if the user has a specific move, but when it's used in the AI script
// they're checking for an effect. Checking for a specific effect would make more sense,
// but given that effects are normally read as a single byte and this reads 2 bytes, it
// seems reading a move was intended and the AI script is using it incorrectly.
// In any case, to fix it to correctly check for effects replace the u16 move assignment with
// u16 move = gContestMoves[gContestMons[eContestAI.contestantId].moves[i]].effect;
static void ContestAICmd_check_user_has_move(void) static void ContestAICmd_check_user_has_move(void)
{ {
int hasMove = FALSE; int hasMove = FALSE;
@ -1759,7 +1766,7 @@ static void ContestAICmd_if_user_has_move(void)
gAIScriptPtr += 4; gAIScriptPtr += 4;
} }
static void ContestAICmd_if_effect_in_user_moveset(void) static void ContestAICmd_if_user_doesnt_have_move(void)
{ {
ContestAICmd_check_user_has_move(); ContestAICmd_check_user_has_move();

View File

@ -2838,289 +2838,289 @@ const struct ContestEffect gContestEffects[] =
{ {
[CONTEST_EFFECT_HIGHLY_APPEALING] = [CONTEST_EFFECT_HIGHLY_APPEALING] =
{ {
.effectType = 0, .effectType = CONTEST_EFFECT_TYPE_APPEAL,
.appeal = 40, .appeal = 40,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_USER_MORE_EASILY_STARTLED] = [CONTEST_EFFECT_USER_MORE_EASILY_STARTLED] =
{ {
.effectType = 0, .effectType = CONTEST_EFFECT_TYPE_APPEAL,
.appeal = 60, .appeal = 60,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES] = [CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES] =
{ {
.effectType = 0, .effectType = CONTEST_EFFECT_TYPE_APPEAL,
.appeal = 80, .appeal = 80,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_REPETITION_NOT_BORING] = [CONTEST_EFFECT_REPETITION_NOT_BORING] =
{ {
.effectType = 0, .effectType = CONTEST_EFFECT_TYPE_APPEAL,
.appeal = 30, .appeal = 30,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_AVOID_STARTLE_ONCE] = [CONTEST_EFFECT_AVOID_STARTLE_ONCE] =
{ {
.effectType = 1, .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE,
.appeal = 20, .appeal = 20,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_AVOID_STARTLE] = [CONTEST_EFFECT_AVOID_STARTLE] =
{ {
.effectType = 1, .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE,
.appeal = 10, .appeal = 10,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY] = [CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY] =
{ {
.effectType = 1, .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE,
.appeal = 30, .appeal = 30,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_USER_LESS_EASILY_STARTLED] = [CONTEST_EFFECT_USER_LESS_EASILY_STARTLED] =
{ {
.effectType = 1, .effectType = CONTEST_EFFECT_TYPE_AVOID_STARTLE,
.appeal = 30, .appeal = 30,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_STARTLE_FRONT_MON] = [CONTEST_EFFECT_STARTLE_FRONT_MON] =
{ {
.effectType = 2, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON,
.appeal = 30, .appeal = 30,
.jam = 20, .jam = 20,
}, },
[CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS] = [CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 30, .appeal = 30,
.jam = 10, .jam = 10,
}, },
[CONTEST_EFFECT_STARTLE_PREV_MON] = [CONTEST_EFFECT_STARTLE_PREV_MON] =
{ {
.effectType = 2, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON,
.appeal = 20, .appeal = 20,
.jam = 30, .jam = 30,
}, },
[CONTEST_EFFECT_STARTLE_PREV_MONS] = [CONTEST_EFFECT_STARTLE_PREV_MONS] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20, .appeal = 20,
.jam = 20, .jam = 20,
}, },
[CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON] = [CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON] =
{ {
.effectType = 2, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON,
.appeal = 10, .appeal = 10,
.jam = 40, .jam = 40,
}, },
[CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS] = [CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 10, .appeal = 10,
.jam = 30, .jam = 30,
}, },
[CONTEST_EFFECT_STARTLE_PREV_MON_2] = [CONTEST_EFFECT_STARTLE_PREV_MON_2] =
{ {
.effectType = 2, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MON,
.appeal = 30, .appeal = 30,
.jam = 20, .jam = 20,
}, },
[CONTEST_EFFECT_STARTLE_PREV_MONS_2] = [CONTEST_EFFECT_STARTLE_PREV_MONS_2] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 30, .appeal = 30,
.jam = 10, .jam = 10,
}, },
[CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION] = [CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION] =
{ {
.effectType = 4, .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 30, .appeal = 30,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION] = [CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20, .appeal = 20,
.jam = 10, .jam = 10,
}, },
[CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN] = [CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 40, .appeal = 40,
.jam = 40, .jam = 40,
}, },
[CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL] = [CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20, .appeal = 20,
.jam = 10, .jam = 10,
}, },
[CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL] = [CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20, .appeal = 20,
.jam = 10, .jam = 10,
}, },
[CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL] = [CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20, .appeal = 20,
.jam = 10, .jam = 10,
}, },
[CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL] = [CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20, .appeal = 20,
.jam = 10, .jam = 10,
}, },
[CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL] = [CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20, .appeal = 20,
.jam = 10, .jam = 10,
}, },
[CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL] = [CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20, .appeal = 20,
.jam = 10, .jam = 10,
}, },
[CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS] = [CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS] =
{ {
.effectType = 4, .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 20, .appeal = 20,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS] = [CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS] =
{ {
.effectType = 4, .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 20, .appeal = 20,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS] = [CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS] =
{ {
.effectType = 4, .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 30, .appeal = 30,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION] = [CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 30, .appeal = 30,
.jam = 10, .jam = 10,
}, },
[CONTEST_EFFECT_BETTER_IF_FIRST] = [CONTEST_EFFECT_BETTER_IF_FIRST] =
{ {
.effectType = 5, .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 20, .appeal = 20,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_BETTER_IF_LAST] = [CONTEST_EFFECT_BETTER_IF_LAST] =
{ {
.effectType = 5, .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 20, .appeal = 20,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES] = [CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES] =
{ {
.effectType = 5, .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10, .appeal = 10,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE] = [CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE] =
{ {
.effectType = 5, .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10, .appeal = 10,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_BETTER_WHEN_LATER] = [CONTEST_EFFECT_BETTER_WHEN_LATER] =
{ {
.effectType = 5, .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10, .appeal = 10,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING] = [CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING] =
{ {
.effectType = 5, .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10, .appeal = 10,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_BETTER_IF_SAME_TYPE] = [CONTEST_EFFECT_BETTER_IF_SAME_TYPE] =
{ {
.effectType = 5, .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 20, .appeal = 20,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_BETTER_IF_DIFF_TYPE] = [CONTEST_EFFECT_BETTER_IF_DIFF_TYPE] =
{ {
.effectType = 5, .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 20, .appeal = 20,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL] = [CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL] =
{ {
.effectType = 5, .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 30, .appeal = 30,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS] = [CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS] =
{ {
.effectType = 5, .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10, .appeal = 10,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION] = [CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION] =
{ {
.effectType = 5, .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10, .appeal = 10,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_NEXT_APPEAL_EARLIER] = [CONTEST_EFFECT_NEXT_APPEAL_EARLIER] =
{ {
.effectType = 6, .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER,
.appeal = 30, .appeal = 30,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_NEXT_APPEAL_LATER] = [CONTEST_EFFECT_NEXT_APPEAL_LATER] =
{ {
.effectType = 6, .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER,
.appeal = 30, .appeal = 30,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER] = [CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER] =
{ {
.effectType = 6, .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER,
.appeal = 30, .appeal = 30,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER] = [CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER] =
{ {
.effectType = 6, .effectType = CONTEST_EFFECT_TYPE_TURN_ORDER,
.appeal = 30, .appeal = 30,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST] = [CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST] =
{ {
.effectType = 5, .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10, .appeal = 10,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS] = [CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS] =
{ {
.effectType = 3, .effectType = CONTEST_EFFECT_TYPE_STARTLE_MONS,
.appeal = 20, .appeal = 20,
.jam = 10, .jam = 10,
}, },
[CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED] = [CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED] =
{ {
.effectType = 5, .effectType = CONTEST_EFFECT_TYPE_SPECIAL_APPEAL,
.appeal = 10, .appeal = 10,
.jam = 0, .jam = 0,
}, },
[CONTEST_EFFECT_DONT_EXCITE_AUDIENCE] = [CONTEST_EFFECT_DONT_EXCITE_AUDIENCE] =
{ {
.effectType = 4, .effectType = CONTEST_EFFECT_TYPE_WORSEN,
.appeal = 30, .appeal = 30,
.jam = 0, .jam = 0,
}, },

View File

@ -100,7 +100,44 @@
#define CONTEST_OPPONENT_TREY 94 #define CONTEST_OPPONENT_TREY 94
#define CONTEST_OPPONENT_LANE 95 #define CONTEST_OPPONENT_LANE 95
const struct ContestWinner gUnknown_08587FA4[] = // All contest opponents have a common set of AI flags (which contains all of the actually
// useful AI scripts, as well as some dummys) and a random combination of 2-3 dummy flags.
// Seems that like the battle AI they had more plans for this than what ended up in the final game
#define CONTEST_AI_SET_1 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_21)
#define CONTEST_AI_SET_2 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_19 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_3 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_23)
#define CONTEST_AI_SET_4 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_17 | CONTEST_AI_DUMMY_23)
#define CONTEST_AI_SET_5 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_16 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_6 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_22)
#define CONTEST_AI_SET_7 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_23)
#define CONTEST_AI_SET_8 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_13 | CONTEST_AI_DUMMY_21)
#define CONTEST_AI_SET_9 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_24)
#define CONTEST_AI_SET_A (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_11 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_B (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_10 | CONTEST_AI_DUMMY_21)
#define CONTEST_AI_SET_C (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_9 | CONTEST_AI_DUMMY_21)
#define CONTEST_AI_SET_D (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_8 | CONTEST_AI_DUMMY_22 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_E (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_24)
#define CONTEST_AI_SET_F (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_6 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_10 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_23)
#define CONTEST_AI_SET_11 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_18 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_12 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_17 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_13 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_16 | CONTEST_AI_DUMMY_22)
#define CONTEST_AI_SET_14 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_21)
#define CONTEST_AI_SET_15 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_22)
#define CONTEST_AI_SET_16 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_13 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_17 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_23 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_18 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_10 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_19 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_9 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_1A (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_8 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_1B (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_21)
#define CONTEST_AI_SET_1C (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_6 | CONTEST_AI_DUMMY_21)
#define CONTEST_AI_SET_1D (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_20 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_1E (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_15 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_1F (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_14 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_20 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_12 | CONTEST_AI_DUMMY_25)
#define CONTEST_AI_SET_21 (CONTEST_AI_COMMON | CONTEST_AI_DUMMY_7 | CONTEST_AI_DUMMY_25)
const struct ContestWinner gDefaultContestWinners[] =
{ {
{ {
.personality = 0, .personality = 0,
@ -183,7 +220,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("POOCHY"), .nickname = _("POOCHY"),
.trainerName = _("JIMMY"), .trainerName = _("JIMMY"),
.trainerGfxId = OBJ_EVENT_GFX_BOY_1, .trainerGfxId = OBJ_EVENT_GFX_BOY_1,
.aiChecks = 0xC000FFF, .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -211,7 +248,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MUSILLE"), .nickname = _("MUSILLE"),
.trainerName = _("EDITH"), .trainerName = _("EDITH"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1, .trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
.aiChecks = 0x82000FFF, .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -239,7 +276,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DUSTER"), .nickname = _("DUSTER"),
.trainerName = _("EVAN"), .trainerName = _("EVAN"),
.trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY, .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY,
.aiChecks = 0x21000FFF, .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -267,7 +304,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DOTS"), .nickname = _("DOTS"),
.trainerName = _("KELSEY"), .trainerName = _("KELSEY"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1,
.aiChecks = 0x20800FFF, .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -295,7 +332,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TATAY"), .nickname = _("TATAY"),
.trainerName = _("MADISON"), .trainerName = _("MADISON"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F, .trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
.aiChecks = 0x80400FFF, .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -323,7 +360,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("NINDA"), .nickname = _("NINDA"),
.trainerName = _("RAYMOND"), .trainerName = _("RAYMOND"),
.trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT,
.aiChecks = 0x10200FFF, .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -351,7 +388,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SMISH"), .nickname = _("SMISH"),
.trainerName = _("GRANT"), .trainerName = _("GRANT"),
.trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER,
.aiChecks = 0x20100FFF, .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -379,7 +416,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SLEAL"), .nickname = _("SLEAL"),
.trainerName = _("PAIGE"), .trainerName = _("PAIGE"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_4, .trainerGfxId = OBJ_EVENT_GFX_WOMAN_4,
.aiChecks = 0x8080FFF, .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -407,7 +444,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SLOKTH"), .nickname = _("SLOKTH"),
.trainerName = _("ALEC"), .trainerName = _("ALEC"),
.trainerGfxId = OBJ_EVENT_GFX_CAMPER, .trainerGfxId = OBJ_EVENT_GFX_CAMPER,
.aiChecks = 0x40040FFF, .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -435,7 +472,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("WHIRIS"), .nickname = _("WHIRIS"),
.trainerName = _("SYDNEY"), .trainerName = _("SYDNEY"),
.trainerGfxId = OBJ_EVENT_GFX_LASS, .trainerGfxId = OBJ_EVENT_GFX_LASS,
.aiChecks = 0x80020FFF, .aiFlags = CONTEST_AI_SET_A,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -463,7 +500,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MAHITA"), .nickname = _("MAHITA"),
.trainerName = _("MORRIS"), .trainerName = _("MORRIS"),
.trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M,
.aiChecks = 0x8010FFF, .aiFlags = CONTEST_AI_SET_B,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -491,7 +528,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RONAR"), .nickname = _("RONAR"),
.trainerName = _("MARIAH"), .trainerName = _("MARIAH"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_2, .trainerGfxId = OBJ_EVENT_GFX_GIRL_2,
.aiChecks = 0x8008FFF, .aiFlags = CONTEST_AI_SET_C,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -519,7 +556,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BATRO"), .nickname = _("BATRO"),
.trainerName = _("RUSSELL"), .trainerName = _("RUSSELL"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_3, .trainerGfxId = OBJ_EVENT_GFX_MAN_3,
.aiChecks = 0x90004FFF, .aiFlags = CONTEST_AI_SET_D,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -547,7 +584,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GULIN"), .nickname = _("GULIN"),
.trainerName = _("MELANIE"), .trainerName = _("MELANIE"),
.trainerGfxId = OBJ_EVENT_GFX_TWIN, .trainerGfxId = OBJ_EVENT_GFX_TWIN,
.aiChecks = 0x40002FFF, .aiFlags = CONTEST_AI_SET_E,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -575,7 +612,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RIKELEC"), .nickname = _("RIKELEC"),
.trainerName = _("CHANCE"), .trainerName = _("CHANCE"),
.trainerGfxId = OBJ_EVENT_GFX_RICH_BOY, .trainerGfxId = OBJ_EVENT_GFX_RICH_BOY,
.aiChecks = 0x80001FFF, .aiFlags = CONTEST_AI_SET_F,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -603,7 +640,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BULBY"), .nickname = _("BULBY"),
.trainerName = _("AGATHA"), .trainerName = _("AGATHA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2,
.aiChecks = 0xC000FFF, .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -631,7 +668,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("FUTTERBE"), .nickname = _("FUTTERBE"),
.trainerName = _("BEAU"), .trainerName = _("BEAU"),
.trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC, .trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC,
.aiChecks = 0x82000FFF, .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -659,7 +696,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("PIDEOT"), .nickname = _("PIDEOT"),
.trainerName = _("KAY"), .trainerName = _("KAY"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5,
.aiChecks = 0x21000FFF, .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -687,7 +724,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DIGLE"), .nickname = _("DIGLE"),
.trainerName = _("CALE"), .trainerName = _("CALE"),
.trainerGfxId = OBJ_EVENT_GFX_HIKER, .trainerGfxId = OBJ_EVENT_GFX_HIKER,
.aiChecks = 0x20800FFF, .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -715,7 +752,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("WAGIL"), .nickname = _("WAGIL"),
.trainerName = _("CAITLIN"), .trainerName = _("CAITLIN"),
.trainerGfxId = OBJ_EVENT_GFX_TUBER_F, .trainerGfxId = OBJ_EVENT_GFX_TUBER_F,
.aiChecks = 0x80400FFF, .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -743,7 +780,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TOTDIL"), .nickname = _("TOTDIL"),
.trainerName = _("COLBY"), .trainerName = _("COLBY"),
.trainerGfxId = OBJ_EVENT_GFX_NINJA_BOY, .trainerGfxId = OBJ_EVENT_GFX_NINJA_BOY,
.aiChecks = 0x10200FFF, .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -771,7 +808,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BALEDY"), .nickname = _("BALEDY"),
.trainerName = _("KYLIE"), .trainerName = _("KYLIE"),
.trainerGfxId = OBJ_EVENT_GFX_BEAUTY, .trainerGfxId = OBJ_EVENT_GFX_BEAUTY,
.aiChecks = 0x20100FFF, .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -799,7 +836,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BIRDLY"), .nickname = _("BIRDLY"),
.trainerName = _("LIAM"), .trainerName = _("LIAM"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_5, .trainerGfxId = OBJ_EVENT_GFX_MAN_5,
.aiChecks = 0x8080FFF, .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -827,7 +864,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TARVITAR"), .nickname = _("TARVITAR"),
.trainerName = _("MILO"), .trainerName = _("MILO"),
.trainerGfxId = OBJ_EVENT_GFX_MANIAC, .trainerGfxId = OBJ_EVENT_GFX_MANIAC,
.aiChecks = 0x40040FFF, .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_NORMAL, .whichRank = CONTEST_RANK_NORMAL,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -855,7 +892,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RELIA"), .nickname = _("RELIA"),
.trainerName = _("KARINA"), .trainerName = _("KARINA"),
.trainerGfxId = OBJ_EVENT_GFX_PICNICKER, .trainerGfxId = OBJ_EVENT_GFX_PICNICKER,
.aiChecks = 0x24000FFF, .aiFlags = CONTEST_AI_SET_10,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -883,7 +920,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DUODO"), .nickname = _("DUODO"),
.trainerName = _("BOBBY"), .trainerName = _("BOBBY"),
.trainerGfxId = OBJ_EVENT_GFX_RUNNING_TRIATHLETE_M, .trainerGfxId = OBJ_EVENT_GFX_RUNNING_TRIATHLETE_M,
.aiChecks = 0x82000FFF, .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -911,7 +948,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("PINCHIN"), .nickname = _("PINCHIN"),
.trainerName = _("CLAIRE"), .trainerName = _("CLAIRE"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1, .trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
.aiChecks = 0x81000FFF, .aiFlags = CONTEST_AI_SET_11,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -939,7 +976,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("NACAC"), .nickname = _("NACAC"),
.trainerName = _("WILLIE"), .trainerName = _("WILLIE"),
.trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY, .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY,
.aiChecks = 0x80800FFF, .aiFlags = CONTEST_AI_SET_12,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -967,7 +1004,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SHRAND"), .nickname = _("SHRAND"),
.trainerName = _("CASSIDY"), .trainerName = _("CASSIDY"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F, .trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
.aiChecks = 0x10400FFF, .aiFlags = CONTEST_AI_SET_13,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -995,7 +1032,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TOYBAL"), .nickname = _("TOYBAL"),
.trainerName = _("MORGAN"), .trainerName = _("MORGAN"),
.trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT,
.aiChecks = 0x8200FFF, .aiFlags = CONTEST_AI_SET_14,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1023,7 +1060,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CHAMCHAM"), .nickname = _("CHAMCHAM"),
.trainerName = _("SUMMER"), .trainerName = _("SUMMER"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_4, .trainerGfxId = OBJ_EVENT_GFX_WOMAN_4,
.aiChecks = 0x10100FFF, .aiFlags = CONTEST_AI_SET_15,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1051,7 +1088,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SPININ"), .nickname = _("SPININ"),
.trainerName = _("MILES"), .trainerName = _("MILES"),
.trainerGfxId = OBJ_EVENT_GFX_CAMPER, .trainerGfxId = OBJ_EVENT_GFX_CAMPER,
.aiChecks = 0x80080FFF, .aiFlags = CONTEST_AI_SET_16,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1079,7 +1116,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SWABY"), .nickname = _("SWABY"),
.trainerName = _("AUDREY"), .trainerName = _("AUDREY"),
.trainerGfxId = OBJ_EVENT_GFX_LASS, .trainerGfxId = OBJ_EVENT_GFX_LASS,
.aiChecks = 0xA0040FFF, .aiFlags = CONTEST_AI_SET_17,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1107,7 +1144,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("POINKER"), .nickname = _("POINKER"),
.trainerName = _("AVERY"), .trainerName = _("AVERY"),
.trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M,
.aiChecks = 0x80020FFF, .aiFlags = CONTEST_AI_SET_A,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1135,7 +1172,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KECON"), .nickname = _("KECON"),
.trainerName = _("ARIANA"), .trainerName = _("ARIANA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_2, .trainerGfxId = OBJ_EVENT_GFX_GIRL_2,
.aiChecks = 0x80010FFF, .aiFlags = CONTEST_AI_SET_18,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1163,7 +1200,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GOLDEN"), .nickname = _("GOLDEN"),
.trainerName = _("ASHTON"), .trainerName = _("ASHTON"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_3, .trainerGfxId = OBJ_EVENT_GFX_MAN_3,
.aiChecks = 0x80008FFF, .aiFlags = CONTEST_AI_SET_19,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1191,7 +1228,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BOBOACH"), .nickname = _("BOBOACH"),
.trainerName = _("SANDRA"), .trainerName = _("SANDRA"),
.trainerGfxId = OBJ_EVENT_GFX_TWIN, .trainerGfxId = OBJ_EVENT_GFX_TWIN,
.aiChecks = 0x80004FFF, .aiFlags = CONTEST_AI_SET_1A,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1219,7 +1256,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CORPY"), .nickname = _("CORPY"),
.trainerName = _("CARSON"), .trainerName = _("CARSON"),
.trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER,
.aiChecks = 0x8002FFF, .aiFlags = CONTEST_AI_SET_1B,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1247,7 +1284,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TADO"), .nickname = _("TADO"),
.trainerName = _("KATRINA"), .trainerName = _("KATRINA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1,
.aiChecks = 0x8001FFF, .aiFlags = CONTEST_AI_SET_1C,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1275,7 +1312,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BROWLO"), .nickname = _("BROWLO"),
.trainerName = _("LUKE"), .trainerName = _("LUKE"),
.trainerGfxId = OBJ_EVENT_GFX_FAT_MAN, .trainerGfxId = OBJ_EVENT_GFX_FAT_MAN,
.aiChecks = 0xC000FFF, .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1303,7 +1340,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("FETCHIN"), .nickname = _("FETCHIN"),
.trainerName = _("RAUL"), .trainerName = _("RAUL"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_5, .trainerGfxId = OBJ_EVENT_GFX_MAN_5,
.aiChecks = 0x82000FFF, .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1331,7 +1368,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SEELEY"), .nickname = _("SEELEY"),
.trainerName = _("JADA"), .trainerName = _("JADA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2,
.aiChecks = 0x21000FFF, .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1359,7 +1396,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DROWZIN"), .nickname = _("DROWZIN"),
.trainerName = _("ZEEK"), .trainerName = _("ZEEK"),
.trainerGfxId = OBJ_EVENT_GFX_PSYCHIC_M, .trainerGfxId = OBJ_EVENT_GFX_PSYCHIC_M,
.aiChecks = 0x20800FFF, .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1387,7 +1424,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("HITEMON"), .nickname = _("HITEMON"),
.trainerName = _("DIEGO"), .trainerName = _("DIEGO"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_M, .trainerGfxId = OBJ_EVENT_GFX_EXPERT_M,
.aiChecks = 0x80400FFF, .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1415,7 +1452,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BLISS"), .nickname = _("BLISS"),
.trainerName = _("ALIYAH"), .trainerName = _("ALIYAH"),
.trainerGfxId = OBJ_EVENT_GFX_TEALA, .trainerGfxId = OBJ_EVENT_GFX_TEALA,
.aiChecks = 0x10200FFF, .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1443,7 +1480,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KIDLEK"), .nickname = _("KIDLEK"),
.trainerName = _("NATALIA"), .trainerName = _("NATALIA"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F, .trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
.aiChecks = 0x20100FFF, .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1471,7 +1508,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SNUBBINS"), .nickname = _("SNUBBINS"),
.trainerName = _("DEVIN"), .trainerName = _("DEVIN"),
.trainerGfxId = OBJ_EVENT_GFX_GENTLEMAN, .trainerGfxId = OBJ_EVENT_GFX_GENTLEMAN,
.aiChecks = 0x8080FFF, .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1499,7 +1536,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DREAVIS"), .nickname = _("DREAVIS"),
.trainerName = _("TYLOR"), .trainerName = _("TYLOR"),
.trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC, .trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC,
.aiChecks = 0x40040FFF, .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_SUPER, .whichRank = CONTEST_RANK_SUPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1527,7 +1564,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LAIRN"), .nickname = _("LAIRN"),
.trainerName = _("RONNIE"), .trainerName = _("RONNIE"),
.trainerGfxId = OBJ_EVENT_GFX_HIKER, .trainerGfxId = OBJ_EVENT_GFX_HIKER,
.aiChecks = 0x84000FFF, .aiFlags = CONTEST_AI_SET_1D,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1555,7 +1592,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SHIFTY"), .nickname = _("SHIFTY"),
.trainerName = _("CLAUDIA"), .trainerName = _("CLAUDIA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1, .trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
.aiChecks = 0x82000FFF, .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1583,7 +1620,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("NINAS"), .nickname = _("NINAS"),
.trainerName = _("ELIAS"), .trainerName = _("ELIAS"),
.trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY, .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY,
.aiChecks = 0x81000FFF, .aiFlags = CONTEST_AI_SET_11,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1611,7 +1648,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("WELOW"), .nickname = _("WELOW"),
.trainerName = _("JADE"), .trainerName = _("JADE"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F, .trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
.aiChecks = 0x80800FFF, .aiFlags = CONTEST_AI_SET_12,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1639,7 +1676,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("YENA"), .nickname = _("YENA"),
.trainerName = _("FRANCIS"), .trainerName = _("FRANCIS"),
.trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT,
.aiChecks = 0x80400FFF, .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1667,7 +1704,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TIFLY"), .nickname = _("TIFLY"),
.trainerName = _("ALISHA"), .trainerName = _("ALISHA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_4, .trainerGfxId = OBJ_EVENT_GFX_WOMAN_4,
.aiChecks = 0x80200FFF, .aiFlags = CONTEST_AI_SET_1E,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1695,7 +1732,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KINGSEA"), .nickname = _("KINGSEA"),
.trainerName = _("SAUL"), .trainerName = _("SAUL"),
.trainerGfxId = OBJ_EVENT_GFX_CAMPER, .trainerGfxId = OBJ_EVENT_GFX_CAMPER,
.aiChecks = 0x80100FFF, .aiFlags = CONTEST_AI_SET_1F,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1723,7 +1760,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CASTER"), .nickname = _("CASTER"),
.trainerName = _("FELICIA"), .trainerName = _("FELICIA"),
.trainerGfxId = OBJ_EVENT_GFX_LASS, .trainerGfxId = OBJ_EVENT_GFX_LASS,
.aiChecks = 0x80080FFF, .aiFlags = CONTEST_AI_SET_16,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1751,7 +1788,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CHOKEM"), .nickname = _("CHOKEM"),
.trainerName = _("EMILIO"), .trainerName = _("EMILIO"),
.trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M,
.aiChecks = 0x80040FFF, .aiFlags = CONTEST_AI_SET_20,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1779,7 +1816,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LOMBE"), .nickname = _("LOMBE"),
.trainerName = _("KARLA"), .trainerName = _("KARLA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_2, .trainerGfxId = OBJ_EVENT_GFX_GIRL_2,
.aiChecks = 0x80020FFF, .aiFlags = CONTEST_AI_SET_A,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1807,7 +1844,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("VIPES"), .nickname = _("VIPES"),
.trainerName = _("DARRYL"), .trainerName = _("DARRYL"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_3, .trainerGfxId = OBJ_EVENT_GFX_MAN_3,
.aiChecks = 0x80010FFF, .aiFlags = CONTEST_AI_SET_18,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1835,7 +1872,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MERAIL"), .nickname = _("MERAIL"),
.trainerName = _("SELENA"), .trainerName = _("SELENA"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_F, .trainerGfxId = OBJ_EVENT_GFX_EXPERT_F,
.aiChecks = 0x80008FFF, .aiFlags = CONTEST_AI_SET_19,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1863,7 +1900,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KARPAG"), .nickname = _("KARPAG"),
.trainerName = _("NOEL"), .trainerName = _("NOEL"),
.trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER,
.aiChecks = 0x80004FFF, .aiFlags = CONTEST_AI_SET_1A,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1891,7 +1928,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LUNONE"), .nickname = _("LUNONE"),
.trainerName = _("LACEY"), .trainerName = _("LACEY"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1,
.aiChecks = 0x80002FFF, .aiFlags = CONTEST_AI_SET_21,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1919,7 +1956,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("ABSO"), .nickname = _("ABSO"),
.trainerName = _("CORBIN"), .trainerName = _("CORBIN"),
.trainerGfxId = OBJ_EVENT_GFX_MANIAC, .trainerGfxId = OBJ_EVENT_GFX_MANIAC,
.aiChecks = 0x80001FFF, .aiFlags = CONTEST_AI_SET_F,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -1947,7 +1984,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("EGGSOR"), .nickname = _("EGGSOR"),
.trainerName = _("GRACIE"), .trainerName = _("GRACIE"),
.trainerGfxId = OBJ_EVENT_GFX_PICNICKER, .trainerGfxId = OBJ_EVENT_GFX_PICNICKER,
.aiChecks = 0xC000FFF, .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -1975,7 +2012,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CUBIN"), .nickname = _("CUBIN"),
.trainerName = _("COLTIN"), .trainerName = _("COLTIN"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_4, .trainerGfxId = OBJ_EVENT_GFX_MAN_4,
.aiChecks = 0x82000FFF, .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2003,7 +2040,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("HITMON"), .nickname = _("HITMON"),
.trainerName = _("ELLIE"), .trainerName = _("ELLIE"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_F, .trainerGfxId = OBJ_EVENT_GFX_EXPERT_F,
.aiChecks = 0x21000FFF, .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2031,7 +2068,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SURTLE"), .nickname = _("SURTLE"),
.trainerName = _("MARCUS"), .trainerName = _("MARCUS"),
.trainerGfxId = OBJ_EVENT_GFX_SAILOR, .trainerGfxId = OBJ_EVENT_GFX_SAILOR,
.aiChecks = 0x20800FFF, .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2059,7 +2096,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("KHANKAN"), .nickname = _("KHANKAN"),
.trainerName = _("KIARA"), .trainerName = _("KIARA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_3, .trainerGfxId = OBJ_EVENT_GFX_GIRL_3,
.aiChecks = 0x80400FFF, .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2087,7 +2124,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("PINOC"), .nickname = _("PINOC"),
.trainerName = _("BRYCE"), .trainerName = _("BRYCE"),
.trainerGfxId = OBJ_EVENT_GFX_BUG_CATCHER, .trainerGfxId = OBJ_EVENT_GFX_BUG_CATCHER,
.aiChecks = 0x10200FFF, .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -2115,7 +2152,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DILTOT"), .nickname = _("DILTOT"),
.trainerName = _("JAMIE"), .trainerName = _("JAMIE"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_5, .trainerGfxId = OBJ_EVENT_GFX_WOMAN_5,
.aiChecks = 0x20100FFF, .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2143,7 +2180,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DOOMOND"), .nickname = _("DOOMOND"),
.trainerName = _("JORGE"), .trainerName = _("JORGE"),
.trainerGfxId = OBJ_EVENT_GFX_GENTLEMAN, .trainerGfxId = OBJ_EVENT_GFX_GENTLEMAN,
.aiChecks = 0x8080FFF, .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -2171,7 +2208,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MILKAN"), .nickname = _("MILKAN"),
.trainerName = _("DEVON"), .trainerName = _("DEVON"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_M, .trainerGfxId = OBJ_EVENT_GFX_POKEFAN_M,
.aiChecks = 0x40040FFF, .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_HYPER, .whichRank = CONTEST_RANK_HYPER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -2199,7 +2236,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RADOS"), .nickname = _("RADOS"),
.trainerName = _("JUSTINA"), .trainerName = _("JUSTINA"),
.trainerGfxId = OBJ_EVENT_GFX_PICNICKER, .trainerGfxId = OBJ_EVENT_GFX_PICNICKER,
.aiChecks = 0x84000FFF, .aiFlags = CONTEST_AI_SET_1D,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -2227,7 +2264,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LOUDERD"), .nickname = _("LOUDERD"),
.trainerName = _("RALPH"), .trainerName = _("RALPH"),
.trainerGfxId = OBJ_EVENT_GFX_EXPERT_M, .trainerGfxId = OBJ_EVENT_GFX_EXPERT_M,
.aiChecks = 0x82000FFF, .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2255,7 +2292,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SITTY"), .nickname = _("SITTY"),
.trainerName = _("ROSA"), .trainerName = _("ROSA"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_1, .trainerGfxId = OBJ_EVENT_GFX_GIRL_1,
.aiChecks = 0x81000FFF, .aiFlags = CONTEST_AI_SET_11,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -2283,7 +2320,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SLING"), .nickname = _("SLING"),
.trainerName = _("KEATON"), .trainerName = _("KEATON"),
.trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY, .trainerGfxId = OBJ_EVENT_GFX_LITTLE_BOY,
.aiChecks = 0x80800FFF, .aiFlags = CONTEST_AI_SET_12,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2311,7 +2348,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("TARIA"), .nickname = _("TARIA"),
.trainerName = _("MAYRA"), .trainerName = _("MAYRA"),
.trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F, .trainerGfxId = OBJ_EVENT_GFX_POKEFAN_F,
.aiChecks = 0x80400FFF, .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -2339,7 +2376,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LIRKI"), .nickname = _("LIRKI"),
.trainerName = _("LAMAR"), .trainerName = _("LAMAR"),
.trainerGfxId = OBJ_EVENT_GFX_RICH_BOY, .trainerGfxId = OBJ_EVENT_GFX_RICH_BOY,
.aiChecks = 0x80200FFF, .aiFlags = CONTEST_AI_SET_1E,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2367,7 +2404,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("BLOSSOM"), .nickname = _("BLOSSOM"),
.trainerName = _("AUBREY"), .trainerName = _("AUBREY"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_4, .trainerGfxId = OBJ_EVENT_GFX_WOMAN_4,
.aiChecks = 0x80100FFF, .aiFlags = CONTEST_AI_SET_1F,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -2395,7 +2432,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("EYESAB"), .nickname = _("EYESAB"),
.trainerName = _("NIGEL"), .trainerName = _("NIGEL"),
.trainerGfxId = OBJ_EVENT_GFX_CAMPER, .trainerGfxId = OBJ_EVENT_GFX_CAMPER,
.aiChecks = 0x80080FFF, .aiFlags = CONTEST_AI_SET_16,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2423,7 +2460,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("UTAN"), .nickname = _("UTAN"),
.trainerName = _("CAMILLE"), .trainerName = _("CAMILLE"),
.trainerGfxId = OBJ_EVENT_GFX_LASS, .trainerGfxId = OBJ_EVENT_GFX_LASS,
.aiChecks = 0x80040FFF, .aiFlags = CONTEST_AI_SET_20,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2451,7 +2488,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("PEDOS"), .nickname = _("PEDOS"),
.trainerName = _("DEON"), .trainerName = _("DEON"),
.trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M, .trainerGfxId = OBJ_EVENT_GFX_SCHOOL_KID_M,
.aiChecks = 0x80020FFF, .aiFlags = CONTEST_AI_SET_A,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2479,7 +2516,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("LUVIS"), .nickname = _("LUVIS"),
.trainerName = _("JANELLE"), .trainerName = _("JANELLE"),
.trainerGfxId = OBJ_EVENT_GFX_GIRL_2, .trainerGfxId = OBJ_EVENT_GFX_GIRL_2,
.aiChecks = 0x80010FFF, .aiFlags = CONTEST_AI_SET_18,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2507,7 +2544,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("HEROSS"), .nickname = _("HEROSS"),
.trainerName = _("HEATH"), .trainerName = _("HEATH"),
.trainerGfxId = OBJ_EVENT_GFX_MAN_3, .trainerGfxId = OBJ_EVENT_GFX_MAN_3,
.aiChecks = 0x80008FFF, .aiFlags = CONTEST_AI_SET_19,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2535,7 +2572,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("RODLECT"), .nickname = _("RODLECT"),
.trainerName = _("SASHA"), .trainerName = _("SASHA"),
.trainerGfxId = OBJ_EVENT_GFX_TWIN, .trainerGfxId = OBJ_EVENT_GFX_TWIN,
.aiChecks = 0x80004FFF, .aiFlags = CONTEST_AI_SET_1A,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -2563,7 +2600,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("CHUPY"), .nickname = _("CHUPY"),
.trainerName = _("FRANKIE"), .trainerName = _("FRANKIE"),
.trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER, .trainerGfxId = OBJ_EVENT_GFX_YOUNGSTER,
.aiChecks = 0x80002FFF, .aiFlags = CONTEST_AI_SET_21,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -2591,7 +2628,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("WOBET"), .nickname = _("WOBET"),
.trainerName = _("HELEN"), .trainerName = _("HELEN"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_1, .trainerGfxId = OBJ_EVENT_GFX_WOMAN_1,
.aiChecks = 0x80001FFF, .aiFlags = CONTEST_AI_SET_F,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -2619,7 +2656,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GAREN"), .nickname = _("GAREN"),
.trainerName = _("CAMILE"), .trainerName = _("CAMILE"),
.trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC, .trainerGfxId = OBJ_EVENT_GFX_HEX_MANIAC,
.aiChecks = 0xC000FFF, .aiFlags = CONTEST_AI_SET_1,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2647,7 +2684,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GONPOR"), .nickname = _("GONPOR"),
.trainerName = _("MARTIN"), .trainerName = _("MARTIN"),
.trainerGfxId = OBJ_EVENT_GFX_SCIENTIST_1, .trainerGfxId = OBJ_EVENT_GFX_SCIENTIST_1,
.aiChecks = 0x82000FFF, .aiFlags = CONTEST_AI_SET_2,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -2675,7 +2712,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("DRITE"), .nickname = _("DRITE"),
.trainerName = _("SERGIO"), .trainerName = _("SERGIO"),
.trainerGfxId = OBJ_EVENT_GFX_BOY_1, .trainerGfxId = OBJ_EVENT_GFX_BOY_1,
.aiChecks = 0x21000FFF, .aiFlags = CONTEST_AI_SET_3,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2703,7 +2740,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("MEOWY"), .nickname = _("MEOWY"),
.trainerName = _("KAILEY"), .trainerName = _("KAILEY"),
.trainerGfxId = OBJ_EVENT_GFX_TWIN, .trainerGfxId = OBJ_EVENT_GFX_TWIN,
.aiChecks = 0x20800FFF, .aiFlags = CONTEST_AI_SET_4,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2731,7 +2768,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("NYX"), .nickname = _("NYX"),
.trainerName = _("PERLA"), .trainerName = _("PERLA"),
.trainerGfxId = OBJ_EVENT_GFX_BEAUTY, .trainerGfxId = OBJ_EVENT_GFX_BEAUTY,
.aiChecks = 0x80400FFF, .aiFlags = CONTEST_AI_SET_5,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -2759,7 +2796,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("GEPITO"), .nickname = _("GEPITO"),
.trainerName = _("CLARA"), .trainerName = _("CLARA"),
.trainerGfxId = OBJ_EVENT_GFX_WOMAN_2, .trainerGfxId = OBJ_EVENT_GFX_WOMAN_2,
.aiChecks = 0x10200FFF, .aiFlags = CONTEST_AI_SET_6,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2787,7 +2824,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SPEON"), .nickname = _("SPEON"),
.trainerName = _("JAKOB"), .trainerName = _("JAKOB"),
.trainerGfxId = OBJ_EVENT_GFX_PSYCHIC_M, .trainerGfxId = OBJ_EVENT_GFX_PSYCHIC_M,
.aiChecks = 0x20100FFF, .aiFlags = CONTEST_AI_SET_7,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = TRUE, .aiPool_Beauty = TRUE,
@ -2815,7 +2852,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("SLOWGO"), .nickname = _("SLOWGO"),
.trainerName = _("TREY"), .trainerName = _("TREY"),
.trainerGfxId = OBJ_EVENT_GFX_SAILOR, .trainerGfxId = OBJ_EVENT_GFX_SAILOR,
.aiChecks = 0x8080FFF, .aiFlags = CONTEST_AI_SET_8,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = FALSE, .aiPool_Cool = FALSE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,
@ -2843,7 +2880,7 @@ const struct ContestPokemon gContestOpponents[] =
.nickname = _("URSING"), .nickname = _("URSING"),
.trainerName = _("LANE"), .trainerName = _("LANE"),
.trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT, .trainerGfxId = OBJ_EVENT_GFX_BLACK_BELT,
.aiChecks = 0x40040FFF, .aiFlags = CONTEST_AI_SET_9,
.whichRank = CONTEST_RANK_MASTER, .whichRank = CONTEST_RANK_MASTER,
.aiPool_Cool = TRUE, .aiPool_Cool = TRUE,
.aiPool_Beauty = FALSE, .aiPool_Beauty = FALSE,