2025-11-14 18:24:33 +01:00

287 lines
12 KiB
C

#ifndef GUARD_CONSTANTS_CONTEST_H
#define GUARD_CONSTANTS_CONTEST_H
#define APPLAUSE_METER_SIZE 5
#define CONTEST_NUM_APPEALS 5
#define CONTEST_LAST_APPEAL (CONTEST_NUM_APPEALS - 1)
#define MAX_CONTEST_MOVE_HEARTS 8
#define CONTESTANT_NONE 0xFF
#define LINK_CONTEST_FLAG_IS_LINK (1 << 0)
#define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1)
#define LINK_CONTEST_FLAG_HAS_RS_PLAYER (1 << 2)
#define CONTEST_RANK_NORMAL 0
#define CONTEST_RANK_SUPER 1
#define CONTEST_RANK_HYPER 2
#define CONTEST_RANK_MASTER 3
#define CONTEST_RANK_LINK 4
// States for VAR_CONTEST_TYPE
#define CONTEST_TYPE_NPC_NORMAL (CONTEST_RANK_NORMAL + 1)
#define CONTEST_TYPE_NPC_SUPER (CONTEST_RANK_SUPER + 1)
#define CONTEST_TYPE_NPC_HYPER (CONTEST_RANK_HYPER + 1)
#define CONTEST_TYPE_NPC_MASTER (CONTEST_RANK_MASTER + 1)
#define CONTEST_TYPE_LINK (CONTEST_RANK_LINK + 1)
// IDs below - 1 are indexes into gSaveBlock1Ptr->contestWinners[]
// CONTEST_WINNER_ARTIST is for the winner of the most recent contest, and is not saved.
#define CONTEST_WINNER_ARTIST 0
#define CONTEST_WINNER_HALL_1 1
#define CONTEST_WINNER_HALL_2 2
#define CONTEST_WINNER_HALL_3 3
#define CONTEST_WINNER_HALL_4 4
#define CONTEST_WINNER_HALL_5 5
#define CONTEST_WINNER_HALL_6 6
#define NUM_CONTEST_HALL_WINNERS 6
#define CONTEST_WINNER_HALL_UNUSED_1 7 // These two have data for gDefaultContestWinners
#define CONTEST_WINNER_HALL_UNUSED_2 8 // but there are only 6 paintings in the Contest Hall
#define CONTEST_WINNER_MUSEUM_COOL 9
#define CONTEST_WINNER_MUSEUM_BEAUTY 10
#define CONTEST_WINNER_MUSEUM_CUTE 11
#define CONTEST_WINNER_MUSEUM_SMART 12
#define CONTEST_WINNER_MUSEUM_TOUGH 13
// NUM_CONTEST_WINNERS in constants/global.h
#define MUSEUM_CONTEST_WINNERS_START (CONTEST_WINNER_MUSEUM_COOL - 1)
#define CONTEST_SAVE_FOR_MUSEUM ((u8)-1)
#define CONTEST_SAVE_FOR_ARTIST ((u8)-2)
// The number of possible captions for a Contest painting, per category
#define NUM_PAINTING_CAPTIONS 3
#define CANT_ENTER_CONTEST 0
#define CAN_ENTER_CONTEST_EQUAL_RANK 1
#define CAN_ENTER_CONTEST_HIGH_RANK 2
#define CANT_ENTER_CONTEST_EGG 3
#define CANT_ENTER_CONTEST_FAINTED 4
#define CONTEST_AI_CHECK_BAD_MOVE (1 << 0)
#define CONTEST_AI_CHECK_COMBO (1 << 1)
#define CONTEST_AI_CHECK_BORING (1 << 2)
#define CONTEST_AI_CHECK_EXCITEMENT (1 << 3)
#define CONTEST_AI_CHECK_ORDER (1 << 4)
#define CONTEST_AI_CHECK_GOOD_MOVE (1 << 5)
#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_USER_MORE_EASILY_STARTLED 1
#define CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES 2
#define CONTEST_EFFECT_REPETITION_NOT_BORING 3
#define CONTEST_EFFECT_AVOID_STARTLE_ONCE 4
#define CONTEST_EFFECT_AVOID_STARTLE 5
#define CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY 6 // Unused
#define CONTEST_EFFECT_USER_LESS_EASILY_STARTLED 7 // Unused
#define CONTEST_EFFECT_STARTLE_FRONT_MON 8 // Unused
#define CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS 9 // Unused
#define CONTEST_EFFECT_STARTLE_PREV_MON 10
#define CONTEST_EFFECT_STARTLE_PREV_MONS 11
#define CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON 12
#define CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS 13
#define CONTEST_EFFECT_STARTLE_PREV_MON_2 14 // Unused
#define CONTEST_EFFECT_STARTLE_PREV_MONS_2 15 // Unused
#define CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION 16
#define CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION 17
#define CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN 18
#define CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL 19
#define CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL 20 // Unused
#define CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL 21 // Unused
#define CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL 22 // Unused
#define CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL 23 // Unused
#define CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL 24 // Unused
#define CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS 25 // Unused
#define CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS 26
#define CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS 27
#define CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION 28 // Unused
#define CONTEST_EFFECT_BETTER_IF_FIRST 29
#define CONTEST_EFFECT_BETTER_IF_LAST 30
#define CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES 31
#define CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE 32
#define CONTEST_EFFECT_BETTER_WHEN_LATER 33
#define CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING 34
#define CONTEST_EFFECT_BETTER_IF_SAME_TYPE 35
#define CONTEST_EFFECT_BETTER_IF_DIFF_TYPE 36 // Unused
#define CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL 37
#define CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS 38
#define CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION 39
#define CONTEST_EFFECT_NEXT_APPEAL_EARLIER 40
#define CONTEST_EFFECT_NEXT_APPEAL_LATER 41
#define CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER 42 // Unused
#define CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER 43
#define CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST 44
#define CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS 45
#define CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED 46
#define CONTEST_EFFECT_DONT_EXCITE_AUDIENCE 47
//#define CONTEST_EFFECT_QUICKLY_GROW_BORED 48 // New in Gen 6
//#define CONTEST_EFFECT_EXCITES_AUDIENCE_MORE_IF_FIRST 49 // New in Gen 6
//#define CONTEST_EFFECT_EXCITES_AUDIENCE_MORE_IF_LAST 50 // New in Gen 6
// 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 CONTEST_EFFECT_TYPE_UNKNOWN 8
enum {
COMBO_STARTER_POUND,
COMBO_STARTER_FIRE_PUNCH,
COMBO_STARTER_ICE_PUNCH,
COMBO_STARTER_THUNDER_PUNCH,
COMBO_STARTER_SCRATCH,
COMBO_STARTER_VICE_GRIP,
COMBO_STARTER_SWORDS_DANCE,
COMBO_STARTER_SAND_ATTACK,
COMBO_STARTER_HORN_ATTACK,
COMBO_STARTER_LEER,
COMBO_STARTER_SING,
COMBO_STARTER_SURF,
COMBO_STARTER_PECK,
COMBO_STARTER_LEECH_SEED,
COMBO_STARTER_GROWTH,
COMBO_STARTER_STRING_SHOT,
COMBO_STARTER_DRAGON_RAGE,
COMBO_STARTER_ROCK_THROW,
COMBO_STARTER_EARTHQUAKE,
COMBO_STARTER_TOXIC,
COMBO_STARTER_CONFUSION,
COMBO_STARTER_PSYCHIC,
COMBO_STARTER_HYPNOSIS,
COMBO_STARTER_RAGE,
COMBO_STARTER_DOUBLE_TEAM,
COMBO_STARTER_HARDEN,
COMBO_STARTER_DEFENSE_CURL,
COMBO_STARTER_FOCUS_ENERGY,
COMBO_STARTER_SMOG,
COMBO_STARTER_SLUDGE,
COMBO_STARTER_BONE_CLUB,
COMBO_STARTER_KINESIS,
COMBO_STARTER_SOFT_BOILED,
COMBO_STARTER_BONEMERANG,
COMBO_STARTER_REST,
COMBO_STARTER_MIND_READER,
COMBO_STARTER_CURSE,
COMBO_STARTER_POWDER_SNOW,
COMBO_STARTER_SCARY_FACE,
COMBO_STARTER_BELLY_DRUM,
COMBO_STARTER_SLUDGE_BOMB,
COMBO_STARTER_MUD_SLAP,
COMBO_STARTER_BONE_RUSH,
COMBO_STARTER_LOCK_ON,
COMBO_STARTER_SANDSTORM,
COMBO_STARTER_ENDURE,
COMBO_STARTER_CHARM,
COMBO_STARTER_MEAN_LOOK,
COMBO_STARTER_HEAL_BELL,
COMBO_STARTER_DRAGON_BREATH,
COMBO_STARTER_SWEET_SCENT,
COMBO_STARTER_RAIN_DANCE,
COMBO_STARTER_SUNNY_DAY,
COMBO_STARTER_FAKE_OUT,
COMBO_STARTER_STOCKPILE,
COMBO_STARTER_HAIL,
COMBO_STARTER_CHARGE,
COMBO_STARTER_TAUNT,
COMBO_STARTER_REVENGE,
COMBO_STARTER_YAWN,
COMBO_STARTER_DIVE,
COMBO_STARTER_MUD_SPORT,
COMBO_STARTER_METAL_SOUND,
COMBO_STARTER_WATER_SPORT,
COMBO_STARTER_CALM_MIND,
COMBO_STARTER_DRAGON_DANCE,
COMBO_STARTER_PAYBACK,
COMBO_STARTER_LUCKY_CHANT,
COMBO_STARTER_WORRY_SEED,
COMBO_STARTER_DRAGON_RUSH,
COMBO_STARTER_BRAVE_BIRD,
COMBO_STARTER_THUNDER_FANG,
COMBO_STARTER_ICE_FANG,
COMBO_STARTER_FIRE_FANG,
COMBO_STARTER_ATTACK_ORDER,
COMBO_STARTER_DEFEND_ORDER,
COMBO_STARTER_HEAL_ORDER,
COMBO_STARTER_SCALD,
COMBO_STARTER_DRAGON_TAIL,
COMBO_STARTER_HYPERSPACE_HOLE,
COMBO_STARTER_THOUSAND_ARROWS,
COMBO_STARTER_THOUSAND_WAVES,
COMBO_STARTER_HYPERSPACE_FURY,
COMBO_STARTER_SHADOW_BONE,
COMBO_STARTER_ELECTRIC_TERRAIN,
COMBO_STARTER_MISTY_TERRAIN,
COMBO_STARTER_GRASSY_TERRAIN,
COMBO_STARTER_PSYCHIC_TERRAIN,
COMBO_STARTER_FORCE_PALM,
COMBO_STARTER_THUNDER_WAVE,
COMBO_STARTER_AGILITY,
COMBO_STARTER_STEALTH_ROCK,
COMBO_STARTER_INFERNO,
COMBO_STARTER_WILL_O_WISP,
COMBO_STARTER_LOVELY_KISS,
COMBO_STARTER_SPORE,
COMBO_STARTER_CELEBRATE,
COMBO_STARTER_COVET,
COMBO_STARTER_HAPPY_HOUR,
COMBO_STARTER_WISH,
COMBO_STARTER_AMNESIA,
COMBO_STARTER_HONE_CLAWS,
COMBO_STARTER_ENTRAINMENT,
COMBO_STARTER_PLAY_NICE,
COMBO_STARTER_BLOCK,
COMBO_STARTER_ENCORE,
COMBO_STARTER_DARK_VOID,
COMBO_STARTER_GRASS_WHISTLE,
COMBO_STARTER_SLEEP_POWDER,
COMBO_STARTER_POISON_GAS,
COMBO_STARTER_POISON_POWDER,
COMBO_STARTER_NASTY_PLOT,
COMBO_STARTER_PARABOLIC_CHARGE,
COMBO_STARTER_SHIFT_GEAR,
COMBO_STARTER_SPIKES,
COMBO_STARTER_TOXIC_SPIKES,
COMBO_STARTER_GLARE,
COMBO_STARTER_ROCK_POLISH,
COMBO_STARTER_ROTOTILLER,
COMBO_STARTER_TORMENT,
};
#endif // GUARD_CONSTANTS_CONTEST_H