From 74bb0f05f529535fccaec42cff1cd66d7f1f6eb3 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 24 Nov 2023 16:19:32 +0100 Subject: [PATCH] Battle Dome Automation (#3596) * MOVE_POINTS_STRONG * MOVE_POINTS_POWERFUL * MOVE_POINTS_LOW_PP * MOVE_POINTS_STAT_RAISE * Removed duplicate function * MOVE_POINTS_STAT_LOWER * MOVE_POINTS_DMG * MOVE_POINTS_ACCURATE * MOVE_POINTS_HEAL * MOVE_POINTS_DEF * MOVE_POINTS_RISKY * MOVE_POINTS_EFFECT * MOVE_POINTS_LUCK * MOVE_POINTS_POPULAR * MOVE_POINTS_STATUS * MOVE_POINTS_RARE * MOVE_POINTS_COMBO * Apply review suggestions * More implemented review suggestions --------- Co-authored-by: Eduardo Quezada --- include/constants/battle_dome.h | 28 +- src/battle_ai_main.c | 10 +- src/battle_ai_util.c | 26 +- src/battle_dome.c | 660 ++++++++++++++------------------ src/battle_main.c | 23 +- 5 files changed, 319 insertions(+), 428 deletions(-) diff --git a/include/constants/battle_dome.h b/include/constants/battle_dome.h index adac0a938d..c855c1ab57 100644 --- a/include/constants/battle_dome.h +++ b/include/constants/battle_dome.h @@ -105,22 +105,22 @@ #define DOME_TEXT_SPEED 12 #define DOME_TEXT_SPATK 14 -// Move point indexes for sBattleStyleMovePoints[][], to determine Battle Dome trainers battle styles -#define MOVE_POINTS_COMBO 0 // Moves that work well in combination (e.g. Rain Dance + Hydro Pump) +// Determine Battle Dome trainers battle styles +#define MOVE_POINTS_COMBO 0 // Moves that work well in combination: moves that cause or are affected by weather/terrain, Stockpile+, entry hazards, sleep inflictions & effects benefiting from it, offensive boosts of a single stat with at least two stages or at least two stats, and several other effects #define MOVE_POINTS_STAT_RAISE 1 #define MOVE_POINTS_STAT_LOWER 2 -#define MOVE_POINTS_RARE 3 // Uncommon moves. Mostly arbitrary -#define MOVE_POINTS_HEAL 4 -#define MOVE_POINTS_RISKY 5 -#define MOVE_POINTS_STATUS 6 -#define MOVE_POINTS_DMG 7 -#define MOVE_POINTS_DEF 8 // Defensive moves, like Amnesia, Light Screen, or accuracy-lowers -#define MOVE_POINTS_ACCURATE 9 -#define MOVE_POINTS_POWERFUL 10 // Most of the moves that are >= 100 power -#define MOVE_POINTS_POPULAR 11 // Group seems arbitrary. All using it are TM/HMs, but its only 11/58 -#define MOVE_POINTS_LUCK 12 -#define MOVE_POINTS_STRONG 13 // Most of the moves that are >= 90 power -#define MOVE_POINTS_LOW_PP 14 +#define MOVE_POINTS_RARE 3 // Moves that appear in less than 5% of levelup learnsets +#define MOVE_POINTS_HEAL 4 // Moves that heal +#define MOVE_POINTS_RISKY 5 // Move effects deemed risky by the Emerald developers (excluding High Jump Kick and others for some reason) +#define MOVE_POINTS_STATUS 6 // Moves that cause status effects without dealing damage +#define MOVE_POINTS_DMG 7 // Moves that deal damage (BP > 0) +#define MOVE_POINTS_DEF 8 // Moves like screens, accuracy-lowers or evasiveness-raisers, (special) defense raisers, protect etc. +#define MOVE_POINTS_ACCURATE 9 // Moves with 100% accuracy (or that are guaranteed hits) +#define MOVE_POINTS_POWERFUL 10 // Moves with 100 BP or more +#define MOVE_POINTS_POPULAR 11 // TM/HM moves with 90 BP or more or those that raise a single offensive stat by at least 2 stages +#define MOVE_POINTS_LUCK 12 // Move effects that depend on luck and moves with Accuracy of <= 50% +#define MOVE_POINTS_STRONG 13 // Moves with 90 BP or more +#define MOVE_POINTS_LOW_PP 14 // Moves with 5 PP or less #define MOVE_POINTS_EFFECT 15 // Moves with additional effects #define NUM_MOVE_POINT_TYPES 16 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index ea789a79a6..4f7d04438b 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -850,7 +850,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) RETURN_SCORE_MINUS(10); break; case ABILITY_FLOWER_VEIL: - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringMoveEffect(moveEffect))) + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringEffect(moveEffect))) RETURN_SCORE_MINUS(10); break; case ABILITY_MAGIC_BOUNCE: @@ -858,13 +858,13 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) RETURN_SCORE_MINUS(20); break; case ABILITY_CONTRARY: - if (IsStatLoweringMoveEffect(moveEffect)) + if (IsStatLoweringEffect(moveEffect)) RETURN_SCORE_MINUS(20); break; case ABILITY_CLEAR_BODY: case ABILITY_FULL_METAL_BODY: case ABILITY_WHITE_SMOKE: - if (IsStatLoweringMoveEffect(moveEffect)) + if (IsStatLoweringEffect(moveEffect)) RETURN_SCORE_MINUS(10); break; case ABILITY_HYPER_CUTTER: @@ -886,7 +886,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case ABILITY_DEFIANT: case ABILITY_COMPETITIVE: - if (IsStatLoweringMoveEffect(moveEffect) && !IS_TARGETING_PARTNER(battlerAtk, battlerDef)) + if (IsStatLoweringEffect(moveEffect) && !IS_TARGETING_PARTNER(battlerAtk, battlerDef)) RETURN_SCORE_MINUS(8); break; case ABILITY_COMATOSE: @@ -927,7 +927,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) RETURN_SCORE_MINUS(20); break; case ABILITY_FLOWER_VEIL: - if ((IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringMoveEffect(moveEffect))) + if ((IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringEffect(moveEffect))) RETURN_SCORE_MINUS(10); break; case ABILITY_AROMA_VEIL: diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 255da22cd2..0ff7b403c2 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1422,30 +1422,6 @@ bool32 IsConfusionMoveEffect(u32 moveEffect) } } -bool32 IsStatLoweringMoveEffect(u32 moveEffect) -{ - switch (moveEffect) - { - case EFFECT_ATTACK_DOWN: - case EFFECT_DEFENSE_DOWN: - case EFFECT_SPEED_DOWN: - case EFFECT_SPECIAL_ATTACK_DOWN: - case EFFECT_SPECIAL_DEFENSE_DOWN: - case EFFECT_ACCURACY_DOWN: - case EFFECT_EVASION_DOWN: - case EFFECT_ATTACK_DOWN_2: - case EFFECT_DEFENSE_DOWN_2: - case EFFECT_SPEED_DOWN_2: - case EFFECT_SPECIAL_ATTACK_DOWN_2: - case EFFECT_SPECIAL_DEFENSE_DOWN_2: - case EFFECT_ACCURACY_DOWN_2: - case EFFECT_EVASION_DOWN_2: - return TRUE; - default: - return FALSE; - } -} - bool32 IsHazardMoveEffect(u32 moveEffect) { switch (moveEffect) @@ -2055,6 +2031,8 @@ bool32 IsHealingMoveEffect(u32 effect) case EFFECT_HEAL_PULSE: case EFFECT_REST: case EFFECT_JUNGLE_HEALING: + case EFFECT_ABSORB: + case EFFECT_DREAM_EATER: return TRUE; default: return FALSE; diff --git a/src/battle_dome.c b/src/battle_dome.c index 24bad30f6b..5657d4a3ed 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle_dome.h" #include "battle.h" +#include "battle_ai_util.h" #include "battle_main.h" #include "battle_setup.h" #include "battle_tower.h" @@ -32,6 +33,7 @@ #include "script_pokemon_util.h" #include "graphics.h" #include "constants/battle_dome.h" +#include "constants/battle_move_effects.h" #include "constants/frontier_util.h" #include "constants/moves.h" #include "constants/trainers.h" @@ -162,367 +164,6 @@ static void InitDomeTrainers(void); static EWRAM_DATA struct TourneyTreeInfoCard *sInfoCard = {0}; static EWRAM_DATA u8 *sTilemapBuffer = NULL; -// Each move has an array of points for different move characteristics which contribute to a tourney trainers listed battle style (see sBattleStyleThresholds) -// All move points are either 1 or 0, so theyre essentially flags saying whether or not the move has that characteristic -static const u8 sBattleStyleMovePoints[MOVES_COUNT][NUM_MOVE_POINT_TYPES] = -{ - [MOVE_NONE] = {0}, - [MOVE_POUND] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_KARATE_CHOP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_DOUBLE_SLAP] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_COMET_PUNCH] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_MEGA_PUNCH] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_PAY_DAY] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_FIRE_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_ICE_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_THUNDER_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SCRATCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_VISE_GRIP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_GUILLOTINE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_RAZOR_WIND] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_SWORDS_DANCE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_POPULAR] = 1}, - [MOVE_CUT] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_GUST] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_WING_ATTACK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_WHIRLWIND] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_FLY] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_BIND] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SLAM] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_VINE_WHIP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_STOMP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_DOUBLE_KICK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_MEGA_KICK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_JUMP_KICK] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_ROLLING_KICK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SAND_ATTACK] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_HEADBUTT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_HORN_ATTACK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_FURY_ATTACK] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_HORN_DRILL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_TACKLE] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_BODY_SLAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_WRAP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_TAKE_DOWN] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_THRASH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_DOUBLE_EDGE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_TAIL_WHIP] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_POISON_STING] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_TWINEEDLE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_PIN_MISSILE] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_LEER] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_BITE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_GROWL] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_ROAR] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_SING] = {[MOVE_POINTS_STATUS] = 1}, - [MOVE_SUPERSONIC] = {[MOVE_POINTS_STATUS] = 1}, - [MOVE_SONIC_BOOM] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_DISABLE] = {[MOVE_POINTS_STATUS] = 1}, - [MOVE_ACID] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_EMBER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_FLAMETHROWER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_MIST] = {0}, - [MOVE_WATER_GUN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_HYDRO_PUMP] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_SURF] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1}, - [MOVE_ICE_BEAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_BLIZZARD] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_PSYBEAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_BUBBLE_BEAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_AURORA_BEAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_HYPER_BEAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_PECK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_DRILL_PECK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_SUBMISSION] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_LOW_KICK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_COUNTER] = {[MOVE_POINTS_DEF] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LUCK] = 1}, - [MOVE_SEISMIC_TOSS] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_STRENGTH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_ABSORB] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_MEGA_DRAIN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_LEECH_SEED] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STATUS] = 1}, - [MOVE_GROWTH] = {[MOVE_POINTS_STAT_RAISE] = 1}, - [MOVE_RAZOR_LEAF] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_SOLAR_BEAM] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1}, - [MOVE_POISON_POWDER] = {[MOVE_POINTS_STATUS] = 1}, - [MOVE_STUN_SPORE] = {[MOVE_POINTS_STATUS] = 1}, - [MOVE_SLEEP_POWDER] = {[MOVE_POINTS_STATUS] = 1}, - [MOVE_PETAL_DANCE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_STRING_SHOT] = {[MOVE_POINTS_STAT_LOWER] = 1}, - [MOVE_DRAGON_RAGE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_FIRE_SPIN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_THUNDER_SHOCK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_THUNDERBOLT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_THUNDER_WAVE] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_THUNDER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_ROCK_THROW] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_EARTHQUAKE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1}, - [MOVE_FISSURE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LUCK] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_DIG] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_TOXIC] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_CONFUSION] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_PSYCHIC] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_HYPNOSIS] = {[MOVE_POINTS_COMBO] = 1}, - [MOVE_MEDITATE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STAT_RAISE] = 1}, - [MOVE_AGILITY] = {[MOVE_POINTS_STAT_RAISE] = 1}, - [MOVE_QUICK_ATTACK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_RAGE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_TELEPORT] = {0}, - [MOVE_NIGHT_SHADE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_MIMIC] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_SCREECH] = {[MOVE_POINTS_STAT_LOWER] = 1}, - [MOVE_DOUBLE_TEAM] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1}, - [MOVE_RECOVER] = {0}, - [MOVE_HARDEN] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1}, - [MOVE_MINIMIZE] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1}, - [MOVE_SMOKESCREEN] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_DEF] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_CONFUSE_RAY] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_WITHDRAW] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1}, - [MOVE_DEFENSE_CURL] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1}, - [MOVE_BARRIER] = {[MOVE_POINTS_DEF] = 1}, - [MOVE_LIGHT_SCREEN] = {[MOVE_POINTS_DEF] = 1}, - [MOVE_HAZE] = {0}, - [MOVE_REFLECT] = {[MOVE_POINTS_DEF] = 1}, - [MOVE_FOCUS_ENERGY] = {[MOVE_POINTS_COMBO] = 1}, - [MOVE_BIDE] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_METRONOME] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_LUCK] = 1}, - [MOVE_MIRROR_MOVE] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_LUCK] = 1}, - [MOVE_SELF_DESTRUCT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_EGG_BOMB] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1}, - [MOVE_LICK] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SMOG] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SLUDGE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_BONE_CLUB] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_FIRE_BLAST] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_WATERFALL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_CLAMP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SWIFT] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_SKULL_BASH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1}, - [MOVE_SPIKE_CANNON] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_CONSTRICT] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_AMNESIA] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1}, - [MOVE_KINESIS] = {[MOVE_POINTS_STAT_LOWER] = 1}, - [MOVE_SOFT_BOILED] = {[MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_HIGH_JUMP_KICK] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_GLARE] = {[MOVE_POINTS_STAT_LOWER] = 1}, - [MOVE_DREAM_EATER] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_RARE] = 1, [MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1}, - [MOVE_POISON_GAS] = {[MOVE_POINTS_STATUS] = 1}, - [MOVE_BARRAGE] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_LEECH_LIFE] = {[MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_LOVELY_KISS] = {[MOVE_POINTS_STATUS] = 1}, - [MOVE_SKY_ATTACK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_TRANSFORM] = {[MOVE_POINTS_RARE] = 1}, - [MOVE_BUBBLE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_DIZZY_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SPORE] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_FLASH] = {0}, - [MOVE_PSYWAVE] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_SPLASH] = {[MOVE_POINTS_RARE] = 1}, - [MOVE_ACID_ARMOR] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1}, - [MOVE_CRABHAMMER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_STRONG] = 1}, - [MOVE_EXPLOSION] = {[MOVE_POINTS_RISKY] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_FURY_SWIPES] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_BONEMERANG] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_REST] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_HEAL] = 1}, - [MOVE_ROCK_SLIDE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_HYPER_FANG] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SHARPEN] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1}, - [MOVE_CONVERSION] = {[MOVE_POINTS_DEF] = 1}, - [MOVE_TRI_ATTACK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SUPER_FANG] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_SLASH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_SUBSTITUTE] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DEF] = 1}, - [MOVE_STRUGGLE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1}, // Odd that this is assigned qualities - [MOVE_SKETCH] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_LUCK] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_TRIPLE_KICK] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_THIEF] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SPIDER_WEB] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_MIND_READER] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_NIGHTMARE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_FLAME_WHEEL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SNORE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_CURSE] = {[MOVE_POINTS_STATUS] = 1}, - [MOVE_FLAIL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_CONVERSION_2] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_AEROBLAST] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_COTTON_SPORE] = {[MOVE_POINTS_STAT_LOWER] = 1}, - [MOVE_REVERSAL] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_SPITE] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_RISKY] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_POWDER_SNOW] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_PROTECT] = {[MOVE_POINTS_DEF] = 1, [MOVE_POINTS_POPULAR] = 1}, - [MOVE_MACH_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_SCARY_FACE] = {0}, - [MOVE_FEINT_ATTACK] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_SWEET_KISS] = {0}, - [MOVE_BELLY_DRUM] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STAT_RAISE] = 1}, - [MOVE_SLUDGE_BOMB] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_MUD_SLAP] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_OCTAZOOKA] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SPIKES] = {[MOVE_POINTS_COMBO] = 1}, - [MOVE_ZAP_CANNON] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_LUCK] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_FORESIGHT] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_DESTINY_BOND] = {[MOVE_POINTS_RISKY] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_PERISH_SONG] = {[MOVE_POINTS_RISKY] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_ICY_WIND] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_DETECT] = {[MOVE_POINTS_DEF] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_BONE_RUSH] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_LOCK_ON] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_OUTRAGE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SANDSTORM] = {0}, - [MOVE_GIGA_DRAIN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_ENDURE] = {[MOVE_POINTS_DEF] = 1}, - [MOVE_CHARM] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_ROLLOUT] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_FALSE_SWIPE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_SWAGGER] = {[MOVE_POINTS_EFFECT] = 1}, - [MOVE_MILK_DRINK] = {[MOVE_POINTS_HEAL] = 1}, - [MOVE_SPARK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_FURY_CUTTER] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_STEEL_WING] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_MEAN_LOOK] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_ATTRACT] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_SLEEP_TALK] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_LUCK] = 1}, - [MOVE_HEAL_BELL] = {[MOVE_POINTS_LOW_PP] = 1}, - [MOVE_RETURN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_PRESENT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LUCK] = 1}, - [MOVE_FRUSTRATION] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_SAFEGUARD] = {[MOVE_POINTS_DEF] = 1}, - [MOVE_PAIN_SPLIT] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_SACRED_FIRE] = {[MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_MAGNITUDE] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_DYNAMIC_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LUCK] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_MEGAHORN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_STRONG] = 1}, - [MOVE_DRAGON_BREATH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_BATON_PASS] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_RARE] = 1}, - [MOVE_ENCORE] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_PURSUIT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_RAPID_SPIN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_SWEET_SCENT] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_IRON_TAIL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_METAL_CLAW] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_VITAL_THROW] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_MORNING_SUN] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_SYNTHESIS] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_MOONLIGHT] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_HIDDEN_POWER] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_CROSS_CHOP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_TWISTER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_RAIN_DANCE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_SUNNY_DAY] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_CRUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_MIRROR_COAT] = {[MOVE_POINTS_DEF] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_PSYCH_UP] = {[MOVE_POINTS_STAT_RAISE] = 1}, - [MOVE_EXTREME_SPEED] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_ANCIENT_POWER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SHADOW_BALL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_FUTURE_SIGHT] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DMG] = 1}, - [MOVE_ROCK_SMASH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_WHIRLPOOL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_BEAT_UP] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_FAKE_OUT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_UPROAR] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_STOCKPILE] = {[MOVE_POINTS_COMBO] = 1}, - [MOVE_SPIT_UP] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1}, - [MOVE_SWALLOW] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_HEAL] = 1}, - [MOVE_HEAT_WAVE] = {[MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_HAIL] = {0}, - [MOVE_TORMENT] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_FLATTER] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_WILL_O_WISP] = {[MOVE_POINTS_STATUS] = 1}, - [MOVE_MEMENTO] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_FACADE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_FOCUS_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1}, - [MOVE_SMELLING_SALTS] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_FOLLOW_ME] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_NATURE_POWER] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_CHARGE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_TAUNT] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_HELPING_HAND] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_TRICK] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_ROLE_PLAY] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_WISH] = {[MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_ASSIST] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LUCK] = 1}, - [MOVE_INGRAIN] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_DEF] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_SUPERPOWER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_MAGIC_COAT] = {[MOVE_POINTS_DEF] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LUCK] = 1}, - [MOVE_RECYCLE] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_REVENGE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LUCK] = 1}, - [MOVE_BRICK_BREAK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_YAWN] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_KNOCK_OFF] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_ENDEAVOR] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_ERUPTION] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_SKILL_SWAP] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_IMPRISON] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LUCK] = 1}, - [MOVE_REFRESH] = {[MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_GRUDGE] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_SNATCH] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LUCK] = 1}, - [MOVE_SECRET_POWER] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_DIVE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_ARM_THRUST] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_CAMOUFLAGE] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_TAIL_GLOW] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_LUSTER_PURGE] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_MIST_BALL] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_FEATHER_DANCE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_TEETER_DANCE] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_BLAZE_KICK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_MUD_SPORT] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_ICE_BALL] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_NEEDLE_ARM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SLACK_OFF] = {[MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_HYPER_VOICE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1}, - [MOVE_POISON_FANG] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_CRUSH_CLAW] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_BLAST_BURN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_HYDRO_CANNON] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_METEOR_MASH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_ASTONISH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_WEATHER_BALL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_AROMATHERAPY] = {[MOVE_POINTS_LOW_PP] = 1}, - [MOVE_FAKE_TEARS] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_AIR_CUTTER] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_OVERHEAT] = {[MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_ODOR_SLEUTH] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_ROCK_TOMB] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SILVER_WIND] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_METAL_SOUND] = {0}, - [MOVE_GRASS_WHISTLE] = {0}, - [MOVE_TICKLE] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_COSMIC_POWER] = {0}, - [MOVE_WATER_SPOUT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_SIGNAL_BEAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SHADOW_PUNCH] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_EXTRASENSORY] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SKY_UPPERCUT] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_SAND_TOMB] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_SHEER_COLD] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LUCK] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_MUDDY_WATER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_BULLET_SEED] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_AERIAL_ACE] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_ICICLE_SPEAR] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_IRON_DEFENSE] = {[MOVE_POINTS_DEF] = 1}, - [MOVE_BLOCK] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_HOWL] = {0}, - [MOVE_DRAGON_CLAW] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_FRENZY_PLANT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_BULK_UP] = {[MOVE_POINTS_COMBO] = 1}, - [MOVE_BOUNCE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_MUD_SHOT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_POISON_TAIL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_COVET] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_VOLT_TACKLE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1}, - [MOVE_MAGICAL_LEAF] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_WATER_SPORT] = {[MOVE_POINTS_ACCURATE] = 1}, - [MOVE_CALM_MIND] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STAT_RAISE] = 1}, - [MOVE_LEAF_BLADE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1}, - [MOVE_DRAGON_DANCE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STAT_RAISE] = 1}, - [MOVE_ROCK_BLAST] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_SHOCK_WAVE] = {[MOVE_POINTS_DMG] = 1}, - [MOVE_WATER_PULSE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1}, - [MOVE_DOOM_DESIRE] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1}, - [MOVE_PSYCHO_BOOST] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1}, -}; - // This array is searched in-order to determine what battle style a tourney trainer uses. // If the sum of the points for the party's moves meets/exceeds all the point totals of an element, then they use that battle style static const u8 sBattleStyleThresholds[NUM_BATTLE_STYLES - 1][NUM_MOVE_POINT_TYPES] = @@ -4287,6 +3928,244 @@ static u8 Task_GetInfoCardInput(u8 taskId) #undef tUsingAlternateSlot +static bool32 IsDomeHealingMoveEffect(u32 effect) +{ + if (IsHealingMoveEffect(effect)) + return TRUE; + // Check extra effects not considered plain healing by AI + switch(effect) + { + case EFFECT_INGRAIN: + case EFFECT_REFRESH: + case EFFECT_AQUA_RING: + return TRUE; + default: + return FALSE; + } +} + +static bool32 IsDomeDefensiveMoveEffect(u32 effect) +{ + switch(effect) + { + case EFFECT_COUNTER: + case EFFECT_EVASION_UP: + case EFFECT_DEFENSE_UP: + case EFFECT_DEFENSE_UP_2: + case EFFECT_SPECIAL_DEFENSE_UP: + case EFFECT_SPECIAL_DEFENSE_UP_2: + case EFFECT_MINIMIZE: + case EFFECT_ACCURACY_DOWN: + case EFFECT_DEFENSE_CURL: + case EFFECT_LIGHT_SCREEN: + case EFFECT_REFLECT: + case EFFECT_AURORA_VEIL: + case EFFECT_CONVERSION: + case EFFECT_PROTECT: + case EFFECT_MAT_BLOCK: + case EFFECT_ENDURE: + case EFFECT_SAFEGUARD: + case EFFECT_MIRROR_COAT: + case EFFECT_MAGIC_COAT: + case EFFECT_INGRAIN: + case EFFECT_AQUA_RING: + case EFFECT_SUBSTITUTE: + return TRUE; + default: + return FALSE; + } +} + +static bool32 IsDomeRiskyMoveEffect(u32 effect) +{ + switch(effect) + { + case EFFECT_EXPLOSION: + case EFFECT_SPITE: + case EFFECT_DESTINY_BOND: + case EFFECT_PERISH_SONG: + return TRUE; + default: + return FALSE; + } +} + +static bool32 IsDomeLuckyMove(u32 move) +{ + if (gBattleMoves[move].accuracy <= 50) + return TRUE; + switch(gBattleMoves[move].effect) + { + case EFFECT_COUNTER: + case EFFECT_OHKO: // Technically redundant because of the above accuracy check + case EFFECT_METRONOME: + case EFFECT_MIRROR_MOVE: + case EFFECT_SKETCH: + case EFFECT_SLEEP_TALK: + case EFFECT_PRESENT: + case EFFECT_ASSIST: + case EFFECT_MAGIC_COAT: + case EFFECT_REVENGE: + case EFFECT_IMPRISON: + case EFFECT_SNATCH: + return TRUE; + default: + return FALSE; + } +} + +static bool32 IsDomePopularMove(u32 move) +{ + u8 i; + for (i = 0; i < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; i++) + { + if (ItemIdToBattleMoveId(ITEM_TM01 + i) == move) + return TRUE; + } + if (i == NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES) + return FALSE; + // Filter in TMs/HMs + if (gBattleMoves[move].power >= 90) + return TRUE; + + switch(gBattleMoves[move].effect) + { + case EFFECT_PROTECT: + case EFFECT_MAT_BLOCK: + case EFFECT_ATTACK_UP_2: + case EFFECT_SPECIAL_ATTACK_UP_2: + case EFFECT_SPECIAL_ATTACK_UP_3: + return TRUE; + default: + return FALSE; + } +} + +static bool32 IsDomeStatusMoveEffect(u32 effect) +{ + switch(effect) + { + case EFFECT_TRAP: + case EFFECT_SLEEP: + case EFFECT_CONFUSE: + case EFFECT_DISABLE: + case EFFECT_POISON: + case EFFECT_PARALYZE: + case EFFECT_TOXIC: + case EFFECT_LEECH_SEED: + case EFFECT_TAUNT: + case EFFECT_TORMENT: + case EFFECT_WILL_O_WISP: + case EFFECT_ENCORE: + case EFFECT_ATTRACT: + case EFFECT_NIGHTMARE: + case EFFECT_YAWN: + case EFFECT_CURSE: + return TRUE; + default: + return FALSE; + } +} + +static bool32 IsDomeRareMove(u32 move) +{ + u16 i, j; + u16 species = 0; + for(i = 0; i < NUM_SPECIES; i++) + { + for(j = 0; gLevelUpLearnsets[i][j].move != LEVEL_UP_MOVE_END; j++) + { + if (gLevelUpLearnsets[i][j].move == move) + { + species++; + break; + } + } + if (species >= NUM_SPECIES / 20) // At least 5% of all mons can learn this move + return FALSE; + } + return TRUE; +} + +static bool32 IsDomeComboMoveEffect(u32 effect) +{ + switch(effect) + { + // Weather moves + case EFFECT_SUNNY_DAY: + case EFFECT_RAIN_DANCE: + case EFFECT_SANDSTORM: + case EFFECT_HAIL: + case EFFECT_SNOWSCAPE: + // Terrain moves + case EFFECT_GRASSY_TERRAIN: + case EFFECT_ELECTRIC_TERRAIN: + case EFFECT_MISTY_TERRAIN: + case EFFECT_PSYCHIC_TERRAIN: + // Moves dependent on weather + case EFFECT_SYNTHESIS: + case EFFECT_MORNING_SUN: + case EFFECT_MOONLIGHT: + case EFFECT_SHORE_UP: + case EFFECT_THUNDER: + case EFFECT_HURRICANE: + //case EFFECT_BLIZZARD: (needs a unique effect in gBattleMoves!) + case EFFECT_SOLAR_BEAM: + case EFFECT_GROWTH: + case EFFECT_AURORA_VEIL: + case EFFECT_WEATHER_BALL: + // Moves dependent on terrain + case EFFECT_EXPANDING_FORCE: + case EFFECT_GRASSY_GLIDE: + //case EFFECT_MISTY_EXPLOSION: (needs a unique effect in gBattleMoves!) + case EFFECT_PSYBLADE: + case EFFECT_RISING_VOLTAGE: + case EFFECT_TERRAIN_PULSE: + // Stockpile group + case EFFECT_STOCKPILE: + case EFFECT_SPIT_UP: + case EFFECT_SWALLOW: + // Entry hazards & cleaners + case EFFECT_SPIKES: + case EFFECT_TOXIC_SPIKES: + case EFFECT_STEALTH_ROCK: + case EFFECT_STICKY_WEB: + // Inflicting sleep & related effects + case EFFECT_SLEEP: + case EFFECT_YAWN: + case EFFECT_DREAM_EATER: + case EFFECT_NIGHTMARE: + case EFFECT_REST: + case EFFECT_SLEEP_TALK: + case EFFECT_SNORE: + // Anything that ups offensive stats by more than one + case EFFECT_ATTACK_UP: + case EFFECT_ATTACK_UP_2: + case EFFECT_ATTACK_SPATK_UP: + case EFFECT_SPECIAL_ATTACK_UP: + case EFFECT_SPECIAL_ATTACK_UP_2: + case EFFECT_SPECIAL_ATTACK_UP_3: + case EFFECT_CALM_MIND: + case EFFECT_DRAGON_DANCE: + case EFFECT_BELLY_DRUM: + case EFFECT_CHARGE: + case EFFECT_BULK_UP: + case EFFECT_ATTACK_ACCURACY_UP: + // Others + case EFFECT_FOCUS_ENERGY: + case EFFECT_LOCK_ON: + case EFFECT_FLAIL: + case EFFECT_BATON_PASS: + case EFFECT_INGRAIN: + case EFFECT_AQUA_RING: + case EFFECT_LEECH_SEED: + case EFFECT_ROAR: + return TRUE; + default: + return FALSE; + } +} + // allocatedArray below needs to be large enough to hold stat totals for each mon, or totals of each type of move points #define ALLOC_ARRAY_SIZE max(NUM_STATS * FRONTIER_PARTY_SIZE, NUM_MOVE_POINT_TYPES) @@ -4456,12 +4335,65 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) { for (k = 0; k < NUM_MOVE_POINT_TYPES; k++) { + u16 move; if (trainerId == TRAINER_FRONTIER_BRAIN) - allocatedArray[k] += sBattleStyleMovePoints[GetFrontierBrainMonMove(i, j)][k]; + move = GetFrontierBrainMonMove(i, j); else if (trainerId == TRAINER_PLAYER) - allocatedArray[k] += sBattleStyleMovePoints[gSaveBlock2Ptr->frontier.domePlayerPartyData[i].moves[j]][k]; + move = gSaveBlock2Ptr->frontier.domePlayerPartyData[i].moves[j]; else - allocatedArray[k] += sBattleStyleMovePoints[gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].moves[j]][k]; + move = gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].moves[j]; + + switch (k) + { + case MOVE_POINTS_COMBO: + allocatedArray[k] = IsDomeComboMoveEffect(gBattleMoves[move].effect) ? 1 : 0; + break; + case MOVE_POINTS_STAT_RAISE: + allocatedArray[k] = IsStatRaisingEffect(gBattleMoves[move].effect) ? 1 : 0; + break; + case MOVE_POINTS_STAT_LOWER: + allocatedArray[k] = IsStatLoweringEffect(gBattleMoves[move].effect) ? 1 : 0; + break; + case MOVE_POINTS_RARE: + allocatedArray[k] = IsDomeRareMove(move) ? 1 : 0; + break; + case MOVE_POINTS_HEAL: + allocatedArray[k] = IsDomeHealingMoveEffect(gBattleMoves[move].effect) ? 1 : 0; + break; + case MOVE_POINTS_RISKY: + allocatedArray[k] = IsDomeRiskyMoveEffect(gBattleMoves[move].effect) ? 1 : 0; + break; + case MOVE_POINTS_STATUS: + allocatedArray[k] = IsDomeStatusMoveEffect(gBattleMoves[move].effect) ? 1 : 0; + break; + case MOVE_POINTS_DMG: + allocatedArray[k] = (gBattleMoves[move].power != 0) ? 1 : 0; + break; + case MOVE_POINTS_DEF: + allocatedArray[k] = IsDomeDefensiveMoveEffect(gBattleMoves[move].effect) ? 1 : 0; + break; + case MOVE_POINTS_ACCURATE: + allocatedArray[k] = (gBattleMoves[move].accuracy == 0 || gBattleMoves[move].accuracy == 100) ? 1 : 0; + break; + case MOVE_POINTS_POWERFUL: + allocatedArray[k] = (gBattleMoves[move].power >= 100) ? 1 : 0; + break; + case MOVE_POINTS_POPULAR: + allocatedArray[k] = IsDomePopularMove(move) ? 1 : 0; + break; + case MOVE_POINTS_LUCK: + allocatedArray[k] = IsDomeLuckyMove(move) ? 1 : 0; + break; + case MOVE_POINTS_STRONG: + allocatedArray[k] = (gBattleMoves[move].power >= 90) ? 1 : 0; + break; + case MOVE_POINTS_LOW_PP: + allocatedArray[k] = (gBattleMoves[move].pp <= 5) ? 1 : 0; + break; + case MOVE_POINTS_EFFECT: + allocatedArray[k] = (gBattleMoves[move].secondaryEffectChance > 0) ? 1 : 0; + break; + } } } } diff --git a/src/battle_main.c b/src/battle_main.c index 28484a7061..d204dfa568 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4703,27 +4703,8 @@ s8 GetMovePriority(u32 battler, u16 move) { priority++; } - else if (ability == ABILITY_TRIAGE) - { - switch (gBattleMoves[move].effect) - { - case EFFECT_RESTORE_HP: - case EFFECT_REST: - case EFFECT_MORNING_SUN: - case EFFECT_MOONLIGHT: - case EFFECT_SYNTHESIS: - case EFFECT_HEAL_PULSE: - case EFFECT_HEALING_WISH: - case EFFECT_SWALLOW: - case EFFECT_WISH: - case EFFECT_SOFTBOILED: - case EFFECT_ABSORB: - case EFFECT_ROOST: - case EFFECT_JUNGLE_HEALING: - priority += 3; - break; - } - } + else if (ability == ABILITY_TRIAGE && IsHealingMoveEffect(gBattleMoves[move].effect)) + priority += 3; if (gProtectStructs[battler].quash) priority = -8;