Add passive secondary abilities for bosses

pull/88/head
Flashfyre 2024-04-11 09:24:03 -04:00
parent 75075c6fab
commit 31050a5181
12 changed files with 1127 additions and 521 deletions

View File

@ -19,7 +19,8 @@ import { } from "./data/move";
import { initMoves } from './data/move';
import { ModifierPoolType, getDefaultModifierTypeForTier, getEnemyModifierTypesForWave } from './modifier/modifier-type';
import AbilityBar from './ui/ability-bar';
import { Abilities, BlockItemTheftAbAttr, DoubleBattleChanceAbAttr, IncrementMovePriorityAbAttr, applyAbAttrs, initAbilities } from './data/ability';
import { BlockItemTheftAbAttr, DoubleBattleChanceAbAttr, IncrementMovePriorityAbAttr, applyAbAttrs, initAbilities } from './data/ability';
import { Abilities } from "./data/enums/abilities";
import Battle, { BattleType, FixedBattleConfig, fixedBattles } from './battle';
import { GameMode, GameModes, gameModes } from './game-mode';
import FieldSpritePipeline from './pipelines/field-sprite';

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,8 @@ import fs from 'vite-plugin-fs/browser';
import PokemonSpecies, { PokemonForm, SpeciesFormKey, allSpecies } from './pokemon-species';
import { GrowthRate } from './exp';
import { Type } from './type';
import { Abilities, allAbilities } from './ability';
import { allAbilities } from './ability';
import { Abilities } from "./enums/abilities";
import { Species } from './enums/species';
import { pokemonFormLevelMoves } from './pokemon-level-moves';
import { tmSpecies } from './tms';

View File

@ -8,11 +8,13 @@ import * as Utils from "../utils";
import { Moves } from "./enums/moves";
import { ChargeAttr, MoveFlags, allMoves } from "./move";
import { Type } from "./type";
import { Abilities, BlockNonDirectDamageAbAttr, FlinchEffectAbAttr, applyAbAttrs } from "./ability";
import { BlockNonDirectDamageAbAttr, FlinchEffectAbAttr, applyAbAttrs } from "./ability";
import { Abilities } from "./enums/abilities";
import { BattlerTagType } from "./enums/battler-tag-type";
import { TerrainType } from "./terrain";
import { WeatherType } from "./weather";
import { BattleStat } from "./battle-stat";
import { allAbilities } from "./ability"
export enum BattlerTagLapseType {
FAINT,
@ -797,14 +799,15 @@ export class TruantTag extends AbilityBattlerTag {
}
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
if (pokemon.getAbility().id !== Abilities.TRUANT)
if ((!pokemon.canApplyAbility() || pokemon.getAbility().id !== Abilities.TRUANT) && (!pokemon.canApplyAbility(true) || pokemon.getPassiveAbility().id !== Abilities.TRUANT))
return super.lapse(pokemon, lapseType);
const passive = pokemon.getAbility().id !== Abilities.TRUANT;
const lastMove = pokemon.getLastXMoves().find(() => true);
if (lastMove && lastMove.move !== Moves.NONE) {
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
pokemon.scene.unshiftPhase(new ShowAbilityPhase(pokemon.scene, pokemon.id));
pokemon.scene.unshiftPhase(new ShowAbilityPhase(pokemon.scene, pokemon.id, passive));
pokemon.scene.queueMessage(getPokemonMessage(pokemon, ' is\nloafing around!'));
}
@ -824,7 +827,7 @@ export class SlowStartTag extends AbilityBattlerTag {
}
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
if (pokemon.getAbility().id !== this.ability)
if (pokemon.getAbility().id !== this.ability && (pokemon.canApplyAbility(true) && pokemon.getPassiveAbility().id !== this.ability))
this.turnCount = 1;
return super.lapse(pokemon, lapseType);
@ -875,7 +878,7 @@ export class HighestStatBoostTag extends AbilityBattlerTag {
onRemove(pokemon: Pokemon): void {
super.onRemove(pokemon);
pokemon.scene.queueMessage(`The effects of ${getPokemonMessage(pokemon, `'s\n${pokemon.getAbility().name} wore off!`)}`);
pokemon.scene.queueMessage(`The effects of ${getPokemonMessage(pokemon, `'s\n${allAbilities[this.ability].name} wore off!`)}`);
}
}

313
src/data/enums/abilities.ts Normal file
View File

@ -0,0 +1,313 @@
export enum Abilities {
NONE,
STENCH,
DRIZZLE,
SPEED_BOOST,
BATTLE_ARMOR,
STURDY,
DAMP,
LIMBER,
SAND_VEIL,
STATIC,
VOLT_ABSORB,
WATER_ABSORB,
OBLIVIOUS,
CLOUD_NINE,
COMPOUND_EYES,
INSOMNIA,
COLOR_CHANGE,
IMMUNITY,
FLASH_FIRE,
SHIELD_DUST,
OWN_TEMPO,
SUCTION_CUPS,
INTIMIDATE,
SHADOW_TAG,
ROUGH_SKIN,
WONDER_GUARD,
LEVITATE,
EFFECT_SPORE,
SYNCHRONIZE,
CLEAR_BODY,
NATURAL_CURE,
LIGHTNING_ROD,
SERENE_GRACE,
SWIFT_SWIM,
CHLOROPHYLL,
ILLUMINATE,
TRACE,
HUGE_POWER,
POISON_POINT,
INNER_FOCUS,
MAGMA_ARMOR,
WATER_VEIL,
MAGNET_PULL,
SOUNDPROOF,
RAIN_DISH,
SAND_STREAM,
PRESSURE,
THICK_FAT,
EARLY_BIRD,
FLAME_BODY,
RUN_AWAY,
KEEN_EYE,
HYPER_CUTTER,
PICKUP,
TRUANT,
HUSTLE,
CUTE_CHARM,
PLUS,
MINUS,
FORECAST,
STICKY_HOLD,
SHED_SKIN,
GUTS,
MARVEL_SCALE,
LIQUID_OOZE,
OVERGROW,
BLAZE,
TORRENT,
SWARM,
ROCK_HEAD,
DROUGHT,
ARENA_TRAP,
VITAL_SPIRIT,
WHITE_SMOKE,
PURE_POWER,
SHELL_ARMOR,
AIR_LOCK,
TANGLED_FEET,
MOTOR_DRIVE,
RIVALRY,
STEADFAST,
SNOW_CLOAK,
GLUTTONY,
ANGER_POINT,
UNBURDEN,
HEATPROOF,
SIMPLE,
DRY_SKIN,
DOWNLOAD,
IRON_FIST,
POISON_HEAL,
ADAPTABILITY,
SKILL_LINK,
HYDRATION,
SOLAR_POWER,
QUICK_FEET,
NORMALIZE,
SNIPER,
MAGIC_GUARD,
NO_GUARD,
STALL,
TECHNICIAN,
LEAF_GUARD,
KLUTZ,
MOLD_BREAKER,
SUPER_LUCK,
AFTERMATH,
ANTICIPATION,
FOREWARN,
UNAWARE,
TINTED_LENS,
FILTER,
SLOW_START,
SCRAPPY,
STORM_DRAIN,
ICE_BODY,
SOLID_ROCK,
SNOW_WARNING,
HONEY_GATHER,
FRISK,
RECKLESS,
MULTITYPE,
FLOWER_GIFT,
BAD_DREAMS,
PICKPOCKET,
SHEER_FORCE,
CONTRARY,
UNNERVE,
DEFIANT,
DEFEATIST,
CURSED_BODY,
HEALER,
FRIEND_GUARD,
WEAK_ARMOR,
HEAVY_METAL,
LIGHT_METAL,
MULTISCALE,
TOXIC_BOOST,
FLARE_BOOST,
HARVEST,
TELEPATHY,
MOODY,
OVERCOAT,
POISON_TOUCH,
REGENERATOR,
BIG_PECKS,
SAND_RUSH,
WONDER_SKIN,
ANALYTIC,
ILLUSION,
IMPOSTER,
INFILTRATOR,
MUMMY,
MOXIE,
JUSTIFIED,
RATTLED,
MAGIC_BOUNCE,
SAP_SIPPER,
PRANKSTER,
SAND_FORCE,
IRON_BARBS,
ZEN_MODE,
VICTORY_STAR,
TURBOBLAZE,
TERAVOLT,
AROMA_VEIL,
FLOWER_VEIL,
CHEEK_POUCH,
PROTEAN,
FUR_COAT,
MAGICIAN,
BULLETPROOF,
COMPETITIVE,
STRONG_JAW,
REFRIGERATE,
SWEET_VEIL,
STANCE_CHANGE,
GALE_WINGS,
MEGA_LAUNCHER,
GRASS_PELT,
SYMBIOSIS,
TOUGH_CLAWS,
PIXILATE,
GOOEY,
AERILATE,
PARENTAL_BOND,
DARK_AURA,
FAIRY_AURA,
AURA_BREAK,
PRIMORDIAL_SEA,
DESOLATE_LAND,
DELTA_STREAM,
STAMINA,
WIMP_OUT,
EMERGENCY_EXIT,
WATER_COMPACTION,
MERCILESS,
SHIELDS_DOWN,
STAKEOUT,
WATER_BUBBLE,
STEELWORKER,
BERSERK,
SLUSH_RUSH,
LONG_REACH,
LIQUID_VOICE,
TRIAGE,
GALVANIZE,
SURGE_SURFER,
SCHOOLING,
DISGUISE,
BATTLE_BOND,
POWER_CONSTRUCT,
CORROSION,
COMATOSE,
QUEENLY_MAJESTY,
INNARDS_OUT,
DANCER,
BATTERY,
FLUFFY,
DAZZLING,
SOUL_HEART,
TANGLING_HAIR,
RECEIVER,
POWER_OF_ALCHEMY,
BEAST_BOOST,
RKS_SYSTEM,
ELECTRIC_SURGE,
PSYCHIC_SURGE,
MISTY_SURGE,
GRASSY_SURGE,
FULL_METAL_BODY,
SHADOW_SHIELD,
PRISM_ARMOR,
NEUROFORCE,
INTREPID_SWORD,
DAUNTLESS_SHIELD,
LIBERO,
BALL_FETCH,
COTTON_DOWN,
PROPELLER_TAIL,
MIRROR_ARMOR,
GULP_MISSILE,
STALWART,
STEAM_ENGINE,
PUNK_ROCK,
SAND_SPIT,
ICE_SCALES,
RIPEN,
ICE_FACE,
POWER_SPOT,
MIMICRY,
SCREEN_CLEANER,
STEELY_SPIRIT,
PERISH_BODY,
WANDERING_SPIRIT,
GORILLA_TACTICS,
NEUTRALIZING_GAS,
PASTEL_VEIL,
HUNGER_SWITCH,
QUICK_DRAW,
UNSEEN_FIST,
CURIOUS_MEDICINE,
TRANSISTOR,
DRAGONS_MAW,
CHILLING_NEIGH,
GRIM_NEIGH,
AS_ONE_GLASTRIER,
AS_ONE_SPECTRIER,
LINGERING_AROMA,
SEED_SOWER,
THERMAL_EXCHANGE,
ANGER_SHELL,
PURIFYING_SALT,
WELL_BAKED_BODY,
WIND_RIDER,
GUARD_DOG,
ROCKY_PAYLOAD,
WIND_POWER,
ZERO_TO_HERO,
COMMANDER,
ELECTROMORPHOSIS,
PROTOSYNTHESIS,
QUARK_DRIVE,
GOOD_AS_GOLD,
VESSEL_OF_RUIN,
SWORD_OF_RUIN,
TABLETS_OF_RUIN,
BEADS_OF_RUIN,
ORICHALCUM_PULSE,
HADRON_ENGINE,
OPPORTUNIST,
CUD_CHEW,
SHARPNESS,
SUPREME_OVERLORD,
COSTAR,
TOXIC_DEBRIS,
ARMOR_TAIL,
EARTH_EATER,
MYCELIUM_MIGHT,
MINDS_EYE,
SUPERSWEET_SYRUP,
HOSPITALITY,
TOXIC_CHAIN,
EMBODY_ASPECT_TEAL,
EMBODY_ASPECT_WELLSPRING,
EMBODY_ASPECT_HEARTHFLAME,
EMBODY_ASPECT_CORNERSTONE,
TERA_SHIFT,
TERA_SHELL,
TERAFORM_ZERO,
POISON_PUPPETEER
}

View File

@ -12,7 +12,8 @@ import * as Utils from "../utils";
import { WeatherType } from "./weather";
import { ArenaTagSide, ArenaTrapTag } from "./arena-tag";
import { ArenaTagType } from "./enums/arena-tag-type";
import { Abilities, ProtectAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPreSwitchOutAbAttrs, PreSwitchOutAbAttr } from "./ability";
import { ProtectAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPreSwitchOutAbAttrs, PreSwitchOutAbAttr } from "./ability";
import { Abilities } from "./enums/abilities";
import { PokemonHeldItemModifier } from "../modifier/modifier";
import { BattlerIndex } from "../battle";
import { Stat } from "./pokemon-stat";
@ -271,7 +272,7 @@ export default class Move {
checkFlag(flag: MoveFlags, user: Pokemon, target: Pokemon): boolean {
switch (flag) {
case MoveFlags.MAKES_CONTACT:
if (user.getAbility().hasAttr(IgnoreContactAbAttr))
if ((user.canApplyAbility() && user.getAbility().hasAttr(IgnoreContactAbAttr)) || (user.canApplyAbility(true) && user.getPassiveAbility().hasAttr(IgnoreContactAbAttr)))
return false;
break;
}
@ -4504,9 +4505,9 @@ export function initMoves() {
.attr(StatChangeAttr, [ BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD ], 2, true)
.ignoresVirtual(),
new StatusMove(Moves.MAGNETIC_FLUX, "Magnetic Flux", Type.ELECTRIC, -1, 20, "The user manipulates magnetic fields, which raises the Defense and Sp. Def stats of ally Pokémon with the Plus or Minus Ability.", -1, 0, 6)
.attr(StatChangeAttr, [ BattleStat.DEF, BattleStat.SPDEF ], 1, false, (user, target, move) => !![ Abilities.PLUS, Abilities.MINUS].find(a => a === user.getAbility().id))
.attr(StatChangeAttr, [ BattleStat.DEF, BattleStat.SPDEF ], 1, false, (user, target, move) => !![ Abilities.PLUS, Abilities.MINUS].find(a => a === user.getAbility().id || (user.canApplyAbility(true) && a === user.getPassiveAbility().id)))
.target(MoveTarget.USER_AND_ALLIES)
.condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ Abilities.PLUS, Abilities.MINUS].find(a => a === p.getAbility().id))),
.condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ Abilities.PLUS, Abilities.MINUS].find(a => a === p.getAbility().id || (user.canApplyAbility(true) && a === user.getPassiveAbility().id)))),
new StatusMove(Moves.HAPPY_HOUR, "Happy Hour (N)", Type.NORMAL, -1, 30, "Using Happy Hour doubles the amount of prize money received after battle.", -1, 0, 6) // No animation
.target(MoveTarget.USER_SIDE),
new StatusMove(Moves.ELECTRIC_TERRAIN, "Electric Terrain", Type.ELECTRIC, -1, 10, "The user electrifies the ground for five turns, powering up Electric-type moves. Pokémon on the ground no longer fall asleep.", -1, 0, 6)
@ -4631,9 +4632,9 @@ export function initMoves() {
.attr(StatChangeAttr, BattleStat.SPD, -1),
new SelfStatusMove(Moves.LASER_FOCUS, "Laser Focus (N)", Type.NORMAL, -1, 30, "The user concentrates intensely. The attack on the next turn always results in a critical hit.", -1, 0, 7),
new StatusMove(Moves.GEAR_UP, "Gear Up", Type.STEEL, -1, 20, "The user engages its gears to raise the Attack and Sp. Atk stats of ally Pokémon with the Plus or Minus Ability.", -1, 0, 7)
.attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], 1, false, (user, target, move) => [ Abilities.PLUS, Abilities.MINUS ].indexOf(target.getAbility().id) > -1)
.attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], 1, false, (user, target, move) => [ Abilities.PLUS, Abilities.MINUS ].includes(target.getAbility().id) || (target.canApplyAbility(true) && [ Abilities.PLUS, Abilities.MINUS ].includes(target.getPassiveAbility().id)))
.target(MoveTarget.USER_AND_ALLIES)
.condition((user, target, move) => !![ user, user.getAlly() ].find(p => p && [ Abilities.PLUS, Abilities.MINUS ].indexOf(p.getAbility().id) > -1)),
.condition((user, target, move) => !![ user, user.getAlly() ].find(p => p && [ Abilities.PLUS, Abilities.MINUS ].includes(p.getAbility().id) || (target.canApplyAbility(true) && [ Abilities.PLUS, Abilities.MINUS ].includes(target.getPassiveAbility().id)))),
new AttackMove(Moves.THROAT_CHOP, "Throat Chop (P)", Type.DARK, MoveCategory.PHYSICAL, 80, 100, 15, "The user attacks the target's throat, and the resultant suffering prevents the target from using moves that emit sound for two turns.", 100, 0, 7),
new AttackMove(Moves.POLLEN_PUFF, "Pollen Puff (P)", Type.BUG, MoveCategory.SPECIAL, 90, 100, 15, "The user attacks the enemy with a pollen puff that explodes. If the target is an ally, it gives the ally a pollen puff that restores its HP instead.", -1, 0, 7)
.ballBombMove(),

View File

@ -6,7 +6,7 @@ import { SpeciesFormKey } from "./pokemon-species";
import { Species } from "./enums/species";
import { StatusEffect } from "./status-effect";
import { MoveCategory, allMoves } from "./move";
import { Abilities } from "./ability";
import { Abilities } from "./enums/abilities";
export enum FormChangeItem {
NONE,

View File

@ -1,4 +1,4 @@
import { Abilities } from './ability';
import { Abilities } from "./enums/abilities";
import BattleScene, { AnySound } from '../battle-scene';
import { GrowthRate } from './exp';
import { SpeciesWildEvolutionDelay, pokemonEvolutions, pokemonPrevolutions } from './pokemon-evolutions';
@ -3053,6 +3053,578 @@ export const noStarterFormKeys: string[] = [
SpeciesFormKey.ETERNAMAX
].map(k => k.toString());
export const starterPassiveAbilities = {
[Species.BULBASAUR]: Abilities.SOLAR_POWER,
[Species.CHARMANDER]: Abilities.INTIMIDATE,
[Species.SQUIRTLE]: Abilities.DAUNTLESS_SHIELD,
[Species.CATERPIE]: Abilities.MAGICIAN,
[Species.WEEDLE]: Abilities.POISON_TOUCH,
[Species.PIDGEY]: Abilities.TECHNICIAN,
[Species.RATTATA]: Abilities.STRONG_JAW,
[Species.SPEAROW]: Abilities.MOXIE,
[Species.EKANS]: Abilities.ROUGH_SKIN,
[Species.SANDSHREW]: Abilities.IRON_BARBS,
[Species.NIDORAN_F]: Abilities.QUEENLY_MAJESTY,
[Species.NIDORAN_M]: Abilities.SUPREME_OVERLORD,
[Species.VULPIX]: Abilities.CURSED_BODY,
[Species.ZUBAT]: Abilities.WIND_RIDER,
[Species.ODDISH]: Abilities.LINGERING_AROMA,
[Species.PARAS]: Abilities.POISON_HEAL,
[Species.VENONAT]: Abilities.TECHNICIAN,
[Species.DIGLETT]: Abilities.STURDY,
[Species.MEOWTH]: Abilities.NORMALIZE,
[Species.PSYDUCK]: Abilities.SIMPLE,
[Species.MANKEY]: Abilities.STAMINA,
[Species.GROWLITHE]: Abilities.BALL_FETCH,
[Species.POLIWAG]: Abilities.WATER_BUBBLE,
[Species.ABRA]: Abilities.TECHNICIAN,
[Species.MACHOP]: Abilities.IRON_FIST,
[Species.BELLSPROUT]: Abilities.CORROSION,
[Species.TENTACOOL]: Abilities.INNARDS_OUT,
[Species.GEODUDE]: Abilities.ROCKY_PAYLOAD,
[Species.PONYTA]: Abilities.PIXILATE,
[Species.SLOWPOKE]: Abilities.UNAWARE,
[Species.MAGNEMITE]: Abilities.MOTOR_DRIVE,
[Species.FARFETCHD]: Abilities.PURE_POWER,
[Species.DODUO]: Abilities.RECKLESS,
[Species.SEEL]: Abilities.REGENERATOR,
[Species.GRIMER]: Abilities.GOOEY,
[Species.SHELLDER]: Abilities.MOXIE,
[Species.GASTLY]: Abilities.PERISH_BODY,
[Species.ONIX]: Abilities.ROCKY_PAYLOAD,
[Species.DROWZEE]: Abilities.BAD_DREAMS,
[Species.KRABBY]: Abilities.ANGER_SHELL,
[Species.VOLTORB]: Abilities.GALVANIZE,
[Species.EXEGGCUTE]: Abilities.PARENTAL_BOND,
[Species.CUBONE]: Abilities.MOODY,
[Species.LICKITUNG]: Abilities.EARTH_EATER,
[Species.KOFFING]: Abilities.FLARE_BOOST,
[Species.RHYHORN]: Abilities.FILTER,
[Species.TANGELA]: Abilities.TANGLING_HAIR,
[Species.KANGASKHAN]: Abilities.IRON_FIST,
[Species.HORSEA]: Abilities.DRIZZLE,
[Species.GOLDEEN]: Abilities.VOLT_ABSORB,
[Species.STARYU]: Abilities.REGENERATOR,
[Species.SCYTHER]: Abilities.SPEED_BOOST,
[Species.PINSIR]: Abilities.SAP_SIPPER,
[Species.TAUROS]: Abilities.ROCK_HEAD,
[Species.MAGIKARP]: Abilities.BERSERK,
[Species.LAPRAS]: Abilities.LIQUID_VOICE,
[Species.DITTO]: Abilities.GOOEY,
[Species.EEVEE]: Abilities.PROTEAN,
[Species.PORYGON]: Abilities.QUARK_DRIVE,
[Species.OMANYTE]: Abilities.ANGER_SHELL,
[Species.KABUTO]: Abilities.SHARPNESS,
[Species.AERODACTYL]: Abilities.PROTOSYNTHESIS,
[Species.ARTICUNO]: Abilities.SNOW_WARNING,
[Species.ZAPDOS]: Abilities.DRIZZLE,
[Species.MOLTRES]: Abilities.DROUGHT,
[Species.DRATINI]: Abilities.DELTA_STREAM,
[Species.MEWTWO]: Abilities.BERSERK,
[Species.MEW]: Abilities.PROTEAN,
[Species.CHIKORITA]: Abilities.TRIAGE,
[Species.CYNDAQUIL]: Abilities.TURBOBLAZE,
[Species.TOTODILE]: Abilities.STRONG_JAW,
[Species.SENTRET]: Abilities.FLUFFY,
[Species.HOOTHOOT]: Abilities.CURSED_BODY,
[Species.LEDYBA]: Abilities.SCREEN_CLEANER,
[Species.SPINARAK]: Abilities.PRANKSTER,
[Species.CHINCHOU]: Abilities.REGENERATOR,
[Species.PICHU]: Abilities.TRANSISTOR,
[Species.CLEFFA]: Abilities.TRIAGE,
[Species.IGGLYBUFF]: Abilities.SERENE_GRACE,
[Species.TOGEPI]: Abilities.OPPORTUNIST,
[Species.NATU]: Abilities.TINTED_LENS,
[Species.MAREEP]: Abilities.FLUFFY,
[Species.HOPPIP]: Abilities.PRANKSTER,
[Species.AIPOM]: Abilities.SCRAPPY,
[Species.SUNKERN]: Abilities.DROUGHT,
[Species.YANMA]: Abilities.TECHNICIAN,
[Species.WOOPER]: Abilities.SIMPLE,
[Species.MURKROW]: Abilities.DEFIANT,
[Species.MISDREAVUS]: Abilities.DAZZLING,
[Species.UNOWN]: Abilities.PICKUP,
[Species.GIRAFARIG]: Abilities.PARENTAL_BOND,
[Species.PINECO]: Abilities.IRON_BARBS,
[Species.DUNSPARCE]: Abilities.MARVEL_SCALE,
[Species.GLIGAR]: Abilities.MERCILESS,
[Species.SNUBBULL]: Abilities.BALL_FETCH,
[Species.QWILFISH]: Abilities.LIQUID_OOZE,
[Species.SHUCKLE]: Abilities.WELL_BAKED_BODY,
[Species.HERACROSS]: Abilities.QUICK_FEET,
[Species.SNEASEL]: Abilities.MOXIE,
[Species.TEDDIURSA]: Abilities.GLUTTONY,
[Species.SLUGMA]: Abilities.DESOLATE_LAND,
[Species.SWINUB]: Abilities.SLUSH_RUSH,
[Species.CORSOLA]: Abilities.STORM_DRAIN,
[Species.REMORAID]: Abilities.SKILL_LINK,
[Species.DELIBIRD]: Abilities.PRANKSTER,
[Species.SKARMORY]: Abilities.OBLIVIOUS,
[Species.HOUNDOUR]: Abilities.INTIMIDATE,
[Species.PHANPY]: Abilities.ROCK_HEAD,
[Species.STANTLER]: Abilities.MAGIC_GUARD,
[Species.SMEARGLE]: Abilities.TRACE,
[Species.TYROGUE]: Abilities.STAMINA,
[Species.SMOOCHUM]: Abilities.CUTE_CHARM,
[Species.ELEKID]: Abilities.ADAPTABILITY,
[Species.MAGBY]: Abilities.CONTRARY,
[Species.MILTANK]: Abilities.GLUTTONY,
[Species.RAIKOU]: Abilities.FLARE_BOOST,
[Species.ENTEI]: Abilities.TOXIC_BOOST,
[Species.SUICUNE]: Abilities.SPEED_BOOST,
[Species.LARVITAR]: Abilities.SAND_FORCE,
[Species.LUGIA]: Abilities.STORM_DRAIN,
[Species.HO_OH]: Abilities.FLASH_FIRE,
[Species.CELEBI]: Abilities.TRIAGE,
[Species.TREECKO]: Abilities.GRASSY_SURGE,
[Species.TORCHIC]: Abilities.RECKLESS,
[Species.MUDKIP]: Abilities.REGENERATOR,
[Species.POOCHYENA]: Abilities.STRONG_JAW,
[Species.ZIGZAGOON]: Abilities.PICKPOCKET,
[Species.WURMPLE]: Abilities.TINTED_LENS,
[Species.LOTAD]: Abilities.DRIZZLE,
[Species.SEEDOT]: Abilities.DISGUISE,
[Species.TAILLOW]: Abilities.KEEN_EYE,
[Species.WINGULL]: Abilities.HYDRATION,
[Species.RALTS]: Abilities.PSYCHIC_SURGE,
[Species.SURSKIT]: Abilities.WATER_ABSORB,
[Species.SHROOMISH]: Abilities.GUTS,
[Species.SLAKOTH]: Abilities.GUTS,
[Species.NINCADA]: Abilities.OVERCOAT,
[Species.WHISMUR]: Abilities.PUNK_ROCK,
[Species.MAKUHITA]: Abilities.CONTRARY,
[Species.AZURILL]: Abilities.UNNERVE,
[Species.NOSEPASS]: Abilities.LEVITATE,
[Species.SKITTY]: Abilities.SCRAPPY,
[Species.SABLEYE]: Abilities.UNNERVE,
[Species.MAWILE]: Abilities.MOLD_BREAKER,
[Species.ARON]: Abilities.SOLID_ROCK,
[Species.MEDITITE]: Abilities.OWN_TEMPO,
[Species.ELECTRIKE]: Abilities.SPEED_BOOST,
[Species.PLUSLE]: Abilities.MINUS,
[Species.MINUN]: Abilities.PLUS,
[Species.VOLBEAT]: Abilities.TINTED_LENS,
[Species.ILLUMISE]: Abilities.SWARM,
[Species.GULPIN]: Abilities.POISON_TOUCH,
[Species.CARVANHA]: Abilities.STAKEOUT,
[Species.WAILMER]: Abilities.LEVITATE,
[Species.NUMEL]: Abilities.TURBOBLAZE,
[Species.TORKOAL]: Abilities.PROTOSYNTHESIS,
[Species.SPOINK]: Abilities.PSYCHIC_SURGE,
[Species.SPINDA]: Abilities.SIMPLE,
[Species.TRAPINCH]: Abilities.ADAPTABILITY,
[Species.CACNEA]: Abilities.SAND_RUSH,
[Species.SWABLU]: Abilities.WHITE_SMOKE,
[Species.ZANGOOSE]: Abilities.SUPER_LUCK,
[Species.SEVIPER]: Abilities.MOLD_BREAKER,
[Species.LUNATONE]: Abilities.SHADOW_SHIELD,
[Species.SOLROCK]: Abilities.FULL_METAL_BODY,
[Species.BARBOACH]: Abilities.BALL_FETCH,
[Species.CORPHISH]: Abilities.WATER_BUBBLE,
[Species.BALTOY]: Abilities.OWN_TEMPO,
[Species.LILEEP]: Abilities.WATER_ABSORB,
[Species.ANORITH]: Abilities.WATER_ABSORB,
[Species.FEEBAS]: Abilities.PASTEL_VEIL,
[Species.CASTFORM]: Abilities.ADAPTABILITY,
[Species.KECLEON]: Abilities.ADAPTABILITY,
[Species.SHUPPET]: Abilities.MUMMY,
[Species.DUSKULL]: Abilities.UNNERVE,
[Species.TROPIUS]: Abilities.CUD_CHEW,
[Species.ABSOL]: Abilities.DARK_AURA,
[Species.WYNAUT]: Abilities.STAMINA,
[Species.SNORUNT]: Abilities.SNOW_WARNING,
[Species.SPHEAL]: Abilities.SLUSH_RUSH,
[Species.CLAMPERL]: Abilities.SIMPLE,
[Species.RELICANTH]: Abilities.SOLID_ROCK,
[Species.LUVDISC]: Abilities.PICKUP,
[Species.BAGON]: Abilities.GALE_WINGS,
[Species.BELDUM]: Abilities.IRON_FIST,
[Species.REGIROCK]: Abilities.REGENERATOR,
[Species.REGICE]: Abilities.ICE_SCALES,
[Species.REGISTEEL]: Abilities.STEELY_SPIRIT,
[Species.LATIAS]: Abilities.SERENE_GRACE,
[Species.LATIOS]: Abilities.SERENE_GRACE,
[Species.KYOGRE]: Abilities.HYDRATION,
[Species.GROUDON]: Abilities.LEAF_GUARD,
[Species.RAYQUAZA]: Abilities.STEADFAST,
[Species.JIRACHI]: Abilities.COMATOSE,
[Species.DEOXYS]: Abilities.STICKY_HOLD,
[Species.TURTWIG]: Abilities.HARVEST,
[Species.CHIMCHAR]: Abilities.DEFIANT,
[Species.PIPLUP]: Abilities.BATTLE_ARMOR,
[Species.STARLY]: Abilities.ROCK_HEAD,
[Species.BIDOOF]: Abilities.NEUROFORCE,
[Species.KRICKETOT]: Abilities.SOUNDPROOF,
[Species.SHINX]: Abilities.VOLT_ABSORB,
[Species.BUDEW]: Abilities.CUTE_CHARM,
[Species.CRANIDOS]: Abilities.ROCK_HEAD,
[Species.SHIELDON]: Abilities.SOLID_ROCK,
[Species.BURMY]: Abilities.STURDY,
[Species.COMBEE]: Abilities.QUEENLY_MAJESTY,
[Species.PACHIRISU]: Abilities.BALL_FETCH,
[Species.BUIZEL]: Abilities.HYDRATION,
[Species.CHERUBI]: Abilities.DROUGHT,
[Species.SHELLOS]: Abilities.SHELL_ARMOR,
[Species.DRIFLOON]: Abilities.PICKPOCKET,
[Species.BUNEARY]: Abilities.OBLIVIOUS,
[Species.GLAMEOW]: Abilities.PICKUP,
[Species.CHINGLING]: Abilities.VICTORY_STAR,
[Species.STUNKY]: Abilities.MERCILESS,
[Species.BRONZOR]: Abilities.SOUNDPROOF,
[Species.BONSLY]: Abilities.SAP_SIPPER,
[Species.MIME_JR]: Abilities.MAGIC_BOUNCE,
[Species.HAPPINY]: Abilities.TRIAGE,
[Species.CHATOT]: Abilities.PUNK_ROCK,
[Species.SPIRITOMB]: Abilities.REGENERATOR,
[Species.GIBLE]: Abilities.SAND_STREAM,
[Species.MUNCHLAX]: Abilities.CUD_CHEW,
[Species.RIOLU]: Abilities.MEGA_LAUNCHER,
[Species.HIPPOPOTAS]: Abilities.SAND_VEIL,
[Species.SKORUPI]: Abilities.SUPER_LUCK,
[Species.CROAGUNK]: Abilities.PICKPOCKET,
[Species.CARNIVINE]: Abilities.EFFECT_SPORE,
[Species.FINNEON]: Abilities.DRIZZLE,
[Species.MANTYKE]: Abilities.STORM_DRAIN,
[Species.SNOVER]: Abilities.SNOW_CLOAK,
[Species.ROTOM]: Abilities.ELECTRIC_SURGE,
[Species.UXIE]: Abilities.ILLUSION,
[Species.MESPRIT]: Abilities.MOODY,
[Species.AZELF]: Abilities.NEUROFORCE,
[Species.DIALGA]: Abilities.SPEED_BOOST,
[Species.PALKIA]: Abilities.MAGIC_BOUNCE,
[Species.HEATRAN]: Abilities.ROUGH_SKIN,
[Species.REGIGIGAS]: Abilities.IRON_FIST,
[Species.GIRATINA]: Abilities.SHADOW_TAG,
[Species.CRESSELIA]: Abilities.MAGIC_BOUNCE,
[Species.PHIONE]: Abilities.SWIFT_SWIM,
[Species.MANAPHY]: Abilities.SIMPLE,
[Species.DARKRAI]: Abilities.UNNERVE,
[Species.SHAYMIN]: Abilities.FLOWER_VEIL,
[Species.ARCEUS]: Abilities.ADAPTABILITY,
[Species.VICTINI]: Abilities.SUPER_LUCK,
[Species.SNIVY]: Abilities.MULTISCALE,
[Species.TEPIG]: Abilities.SAND_RUSH,
[Species.OSHAWOTT]: Abilities.LIGHTNING_ROD,
[Species.PATRAT]: Abilities.STAKEOUT,
[Species.LILLIPUP]: Abilities.BALL_FETCH,
[Species.PURRLOIN]: Abilities.DEFIANT,
[Species.PANSAGE]: Abilities.SAP_SIPPER,
[Species.PANSEAR]: Abilities.FLASH_FIRE,
[Species.PANPOUR]: Abilities.STORM_DRAIN,
[Species.MUNNA]: Abilities.NEUTRALIZING_GAS,
[Species.PIDOVE]: Abilities.OPPORTUNIST,
[Species.BLITZLE]: Abilities.FLARE_BOOST,
[Species.ROGGENROLA]: Abilities.SOLID_ROCK,
[Species.WOOBAT]: Abilities.SOUL_HEART,
[Species.DRILBUR]: Abilities.SAND_STREAM,
[Species.AUDINO]: Abilities.SERENE_GRACE,
[Species.TIMBURR]: Abilities.STAMINA,
[Species.TYMPOLE]: Abilities.MOODY,
[Species.THROH]: Abilities.SIMPLE,
[Species.SAWK]: Abilities.DEFIANT,
[Species.SEWADDLE]: Abilities.SHARPNESS,
[Species.VENIPEDE]: Abilities.INTIMIDATE,
[Species.COTTONEE]: Abilities.MISTY_SURGE,
[Species.PETILIL]: Abilities.ORICHALCUM_PULSE,
[Species.BASCULIN]: Abilities.ROCK_HEAD,
[Species.SANDILE]: Abilities.STRONG_JAW,
[Species.DARUMAKA]: Abilities.IRON_FIST,
[Species.MARACTUS]: Abilities.IRON_BARBS,
[Species.DWEBBLE]: Abilities.STAMINA,
[Species.SCRAGGY]: Abilities.ROCK_HEAD,
[Species.SIGILYPH]: Abilities.MAGICIAN,
[Species.YAMASK]: Abilities.GOOD_AS_GOLD,
[Species.TIRTOUGA]: Abilities.SHELL_ARMOR,
[Species.ARCHEN]: Abilities.ROCKY_PAYLOAD,
[Species.TRUBBISH]: Abilities.GOOEY,
[Species.ZORUA]: Abilities.ADAPTABILITY,
[Species.MINCCINO]: Abilities.SCRAPPY,
[Species.GOTHITA]: Abilities.PRESSURE,
[Species.SOLOSIS]: Abilities.GOOEY,
[Species.DUCKLETT]: Abilities.GALE_WINGS,
[Species.VANILLITE]: Abilities.REFRIGERATE,
[Species.DEERLING]: Abilities.JUSTIFIED,
[Species.EMOLGA]: Abilities.WIND_POWER,
[Species.KARRABLAST]: Abilities.NO_GUARD,
[Species.FOONGUS]: Abilities.ADAPTABILITY,
[Species.FRILLISH]: Abilities.MUMMY,
[Species.ALOMOMOLA]: Abilities.MULTISCALE,
[Species.JOLTIK]: Abilities.VOLT_ABSORB,
[Species.FERROSEED]: Abilities.SKILL_LINK,
[Species.KLINK]: Abilities.STEELWORKER,
[Species.TYNAMO]: Abilities.SWIFT_SWIM,
[Species.ELGYEM]: Abilities.COMMANDER,
[Species.LITWICK]: Abilities.SOUL_HEART,
[Species.AXEW]: Abilities.SHEER_FORCE,
[Species.CUBCHOO]: Abilities.INTIMIDATE,
[Species.CRYOGONAL]: Abilities.DAZZLING,
[Species.SHELMET]: Abilities.DISGUISE,
[Species.STUNFISK]: Abilities.STORM_DRAIN,
[Species.MIENFOO]: Abilities.NO_GUARD,
[Species.DRUDDIGON]: Abilities.INTIMIDATE,
[Species.GOLETT]: Abilities.JUSTIFIED,
[Species.PAWNIARD]: Abilities.SHARPNESS,
[Species.BOUFFALANT]: Abilities.THICK_FAT,
[Species.RUFFLET]: Abilities.RECKLESS,
[Species.VULLABY]: Abilities.THICK_FAT,
[Species.HEATMOR]: Abilities.CONTRARY,
[Species.DURANT]: Abilities.TOUGH_CLAWS,
[Species.DEINO]: Abilities.BERSERK,
[Species.LARVESTA]: Abilities.DROUGHT,
[Species.COBALION]: Abilities.INTREPID_SWORD,
[Species.TERRAKION]: Abilities.ROCKY_PAYLOAD,
[Species.VIRIZION]: Abilities.SYMBIOSIS,
[Species.TORNADUS]: Abilities.DELTA_STREAM,
[Species.THUNDURUS]: Abilities.DRIZZLE,
[Species.RESHIRAM]: Abilities.ORICHALCUM_PULSE,
[Species.ZEKROM]: Abilities.HADRON_ENGINE,
[Species.LANDORUS]: Abilities.PRANKSTER,
[Species.KYUREM]: Abilities.SNOW_WARNING,
[Species.KELDEO]: Abilities.HUGE_POWER,
[Species.MELOETTA]: Abilities.PUNK_ROCK,
[Species.GENESECT]: Abilities.MEGA_LAUNCHER,
[Species.CHESPIN]: Abilities.IRON_BARBS,
[Species.FENNEKIN]: Abilities.MAGIC_GUARD,
[Species.FROAKIE]: Abilities.MERCILESS,
[Species.BUNNELBY]: Abilities.GUTS,
[Species.FLETCHLING]: Abilities.RECKLESS,
[Species.SCATTERBUG]: Abilities.PRANKSTER,
[Species.LITLEO]: Abilities.INTIMIDATE,
[Species.FLABEBE]: Abilities.GRASSY_SURGE,
[Species.SKIDDO]: Abilities.FUR_COAT,
[Species.PANCHAM]: Abilities.FLUFFY,
[Species.FURFROU]: Abilities.BALL_FETCH,
[Species.ESPURR]: Abilities.PSYCHIC_SURGE,
[Species.HONEDGE]: Abilities.SHARPNESS,
[Species.SPRITZEE]: Abilities.UNAWARE,
[Species.SWIRLIX]: Abilities.PIXILATE,
[Species.INKAY]: Abilities.SUPREME_OVERLORD,
[Species.BINACLE]: Abilities.SOLID_ROCK,
[Species.SKRELP]: Abilities.CORROSION,
[Species.CLAUNCHER]: Abilities.SWIFT_SWIM,
[Species.HELIOPTILE]: Abilities.NO_GUARD,
[Species.TYRUNT]: Abilities.SHEER_FORCE,
[Species.AMAURA]: Abilities.SERENE_GRACE,
[Species.HAWLUCHA]: Abilities.RECKLESS,
[Species.DEDENNE]: Abilities.SIMPLE,
[Species.CARBINK]: Abilities.OBLIVIOUS,
[Species.GOOMY]: Abilities.POISON_HEAL,
[Species.KLEFKI]: Abilities.TRIAGE,
[Species.PHANTUMP]: Abilities.UNNERVE,
[Species.PUMPKABOO]: Abilities.FLARE_BOOST,
[Species.BERGMITE]: Abilities.MIRROR_ARMOR,
[Species.NOIBAT]: Abilities.PUNK_ROCK,
[Species.XERNEAS]: Abilities.COMPETITIVE,
[Species.YVELTAL]: Abilities.DEFIANT,
[Species.ZYGARDE]: Abilities.REGENERATOR,
[Species.DIANCIE]: Abilities.QUEENLY_MAJESTY,
[Species.HOOPA]: Abilities.TRACE,
[Species.VOLCANION]: Abilities.FILTER,
[Species.ROWLET]: Abilities.SNIPER,
[Species.LITTEN]: Abilities.PRANKSTER,
[Species.POPPLIO]: Abilities.PUNK_ROCK,
[Species.PIKIPEK]: Abilities.ANGER_POINT,
[Species.YUNGOOS]: Abilities.HUGE_POWER,
[Species.GRUBBIN]: Abilities.GALVANIZE,
[Species.CRABRAWLER]: Abilities.REFRIGERATE,
[Species.ORICORIO]: Abilities.ADAPTABILITY,
[Species.CUTIEFLY]: Abilities.FRIEND_GUARD,
[Species.ROCKRUFF]: Abilities.ROCKY_PAYLOAD,
[Species.WISHIWASHI]: Abilities.PARENTAL_BOND,
[Species.MAREANIE]: Abilities.TOXIC_DEBRIS,
[Species.MUDBRAY]: Abilities.CUD_CHEW,
[Species.DEWPIDER]: Abilities.STRONG_JAW,
[Species.FOMANTIS]: Abilities.MIMICRY,
[Species.MORELULL]: Abilities.PERISH_BODY,
[Species.SALANDIT]: Abilities.DAZZLING,
[Species.STUFFUL]: Abilities.HOSPITALITY,
[Species.BOUNSWEET]: Abilities.RIPEN,
[Species.COMFEY]: Abilities.FRIEND_GUARD,
[Species.ORANGURU]: Abilities.HOSPITALITY,
[Species.PASSIMIAN]: Abilities.COSTAR,
[Species.WIMPOD]: Abilities.BATTLE_ARMOR,
[Species.SANDYGAST]: Abilities.DAUNTLESS_SHIELD,
[Species.PYUKUMUKU]: Abilities.IRON_BARBS,
[Species.TYPE_NULL]: Abilities.ADAPTABILITY,
[Species.MINIOR]: Abilities.ANGER_SHELL,
[Species.KOMALA]: Abilities.GUTS,
[Species.TURTONATOR]: Abilities.ANGER_SHELL,
[Species.TOGEDEMARU]: Abilities.STATIC,
[Species.MIMIKYU]: Abilities.MIMICRY,
[Species.BRUXISH]: Abilities.MULTISCALE,
[Species.DRAMPA]: Abilities.FLASH_FIRE,
[Species.DHELMISE]: Abilities.INFILTRATOR,
[Species.JANGMO_O]: Abilities.DANCER,
[Species.TAPU_KOKO]: Abilities.GALVANIZE,
[Species.TAPU_LELE]: Abilities.BERSERK,
[Species.TAPU_BULU]: Abilities.FLOWER_VEIL,
[Species.TAPU_FINI]: Abilities.FAIRY_AURA,
[Species.COSMOG]: Abilities.BEAST_BOOST,
[Species.NIHILEGO]: Abilities.POISON_PUPPETEER,
[Species.BUZZWOLE]: Abilities.MOXIE,
[Species.PHEROMOSA]: Abilities.MOXIE,
[Species.XURKITREE]: Abilities.LIGHTNING_ROD,
[Species.CELESTEELA]: Abilities.CHLOROPHYLL,
[Species.KARTANA]: Abilities.INTREPID_SWORD,
[Species.GUZZLORD]: Abilities.GLUTTONY,
[Species.NECROZMA]: Abilities.BEAST_BOOST,
[Species.MAGEARNA]: Abilities.STEELY_SPIRIT,
[Species.MARSHADOW]: Abilities.IRON_FIST,
[Species.POIPOLE]: Abilities.MERCILESS,
[Species.STAKATAKA]: Abilities.DAUNTLESS_SHIELD,
[Species.BLACEPHALON]: Abilities.REGENERATOR,
[Species.ZERAORA]: Abilities.MOTOR_DRIVE,
[Species.MELTAN]: Abilities.FULL_METAL_BODY,
[Species.GROOKEY]: Abilities.SOLID_ROCK,
[Species.SCORBUNNY]: Abilities.RECKLESS,
[Species.SOBBLE]: Abilities.MIMICRY,
[Species.SKWOVET]: Abilities.HONEY_GATHER,
[Species.ROOKIDEE]: Abilities.JUSTIFIED,
[Species.BLIPBUG]: Abilities.TINTED_LENS,
[Species.NICKIT]: Abilities.INTIMIDATE,
[Species.GOSSIFLEUR]: Abilities.STORM_DRAIN,
[Species.WOOLOO]: Abilities.ROCK_HEAD,
[Species.CHEWTLE]: Abilities.ROCK_HEAD,
[Species.YAMPER]: Abilities.SPEED_BOOST,
[Species.ROLYCOLY]: Abilities.EARTH_EATER,
[Species.APPLIN]: Abilities.DRAGONS_MAW,
[Species.SILICOBRA]: Abilities.SAND_RUSH,
[Species.CRAMORANT]: Abilities.STORM_DRAIN,
[Species.ARROKUDA]: Abilities.STRONG_JAW,
[Species.TOXEL]: Abilities.GALVANIZE,
[Species.SIZZLIPEDE]: Abilities.DEFIANT,
[Species.CLOBBOPUS]: Abilities.SWIFT_SWIM,
[Species.SINISTEA]: Abilities.WATER_ABSORB,
[Species.HATENNA]: Abilities.MAGIC_GUARD,
[Species.IMPIDIMP]: Abilities.TANGLING_HAIR,
[Species.MILCERY]: Abilities.WELL_BAKED_BODY,
[Species.FALINKS]: Abilities.MOXIE,
[Species.PINCURCHIN]: Abilities.IRON_BARBS,
[Species.SNOM]: Abilities.SNOW_WARNING,
[Species.STONJOURNER]: Abilities.SOLID_ROCK,
[Species.EISCUE]: Abilities.SLUSH_RUSH,
[Species.INDEEDEE]: Abilities.MAGIC_BOUNCE,
[Species.MORPEKO]: Abilities.GLUTTONY,
[Species.CUFANT]: Abilities.HEATPROOF,
[Species.DRACOZOLT]: Abilities.SLUSH_RUSH,
[Species.ARCTOZOLT]: Abilities.SAND_RUSH,
[Species.DRACOVISH]: Abilities.HUSTLE,
[Species.ARCTOVISH]: Abilities.STRONG_JAW,
[Species.DURALUDON]: Abilities.MEGA_LAUNCHER,
[Species.DREEPY]: Abilities.PARENTAL_BOND,
[Species.ZACIAN]: Abilities.SHARPNESS,
[Species.ZAMAZENTA]: Abilities.GUARD_DOG,
[Species.ETERNATUS]: Abilities.SUPREME_OVERLORD,
[Species.KUBFU]: Abilities.IRON_FIST,
[Species.ZARUDE]: Abilities.PRANKSTER,
[Species.REGIELEKI]: Abilities.LEVITATE,
[Species.REGIDRAGO]: Abilities.INTIMIDATE,
[Species.GLASTRIER]: Abilities.FILTER,
[Species.SPECTRIER]: Abilities.PERISH_BODY,
[Species.CALYREX]: Abilities.HARVEST,
[Species.ENAMORUS]: Abilities.MISTY_SURGE,
[Species.SPRIGATITO]: Abilities.MAGICIAN,
[Species.FUECOCO]: Abilities.EARTH_EATER,
[Species.QUAXLY]: Abilities.DANCER,
[Species.LECHONK]: Abilities.SIMPLE,
[Species.TAROUNTULA]: Abilities.PICKUP,
[Species.NYMBLE]: Abilities.TECHNICIAN,
[Species.PAWMI]: Abilities.FLUFFY,
[Species.TANDEMAUS]: Abilities.PARENTAL_BOND,
[Species.FIDOUGH]: Abilities.WATER_ABSORB,
[Species.SMOLIV]: Abilities.RIPEN,
[Species.SQUAWKABILLY]: Abilities.GALE_WINGS,
[Species.NACLI]: Abilities.EARTH_EATER,
[Species.CHARCADET]: Abilities.CONTRARY,
[Species.TADBULB]: Abilities.TRANSISTOR,
[Species.WATTREL]: Abilities.GALE_WINGS,
[Species.MASCHIFF]: Abilities.STRONG_JAW,
[Species.SHROODLE]: Abilities.CORROSION,
[Species.BRAMBLIN]: Abilities.WANDERING_SPIRIT,
[Species.TOEDSCOOL]: Abilities.PRANKSTER,
[Species.KLAWF]: Abilities.WATER_ABSORB,
[Species.CAPSAKID]: Abilities.PARENTAL_BOND,
[Species.RELLOR]: Abilities.MAGIC_GUARD,
[Species.FLITTLE]: Abilities.COMPETITIVE,
[Species.TINKATINK]: Abilities.HUGE_POWER,
[Species.WIGLETT]: Abilities.STORM_DRAIN,
[Species.BOMBIRDIER]: Abilities.UNAWARE,
[Species.FINIZEN]: Abilities.LIQUID_VOICE,
[Species.VAROOM]: Abilities.SPEED_BOOST,
[Species.CYCLIZAR]: Abilities.PROTEAN,
[Species.ORTHWORM]: Abilities.HEATPROOF,
[Species.GLIMMET]: Abilities.SYMBIOSIS,
[Species.GREAVARD]: Abilities.FUR_COAT,
[Species.FLAMIGO]: Abilities.MOXIE,
[Species.CETODDLE]: Abilities.GLUTTONY,
[Species.VELUZA]: Abilities.SIMPLE,
[Species.DONDOZO]: Abilities.GLUTTONY,
[Species.TATSUGIRI]: Abilities.WATER_BUBBLE,
[Species.GREAT_TUSK]: Abilities.INTIMIDATE,
[Species.SCREAM_TAIL]: Abilities.PIXILATE,
[Species.BRUTE_BONNET]: Abilities.ADAPTABILITY,
[Species.FLUTTER_MANE]: Abilities.DAZZLING,
[Species.SLITHER_WING]: Abilities.SCRAPPY,
[Species.SANDY_SHOCKS]: Abilities.EARTH_EATER,
[Species.IRON_TREADS]: Abilities.STEAM_ENGINE,
[Species.IRON_BUNDLE]: Abilities.SNOW_WARNING,
[Species.IRON_HANDS]: Abilities.IRON_FIST,
[Species.IRON_JUGULIS]: Abilities.NO_GUARD,
[Species.IRON_MOTH]: Abilities.TINTED_LENS,
[Species.IRON_THORNS]: Abilities.SAND_STREAM,
[Species.FRIGIBAX]: Abilities.THICK_FAT,
[Species.GIMMIGHOUL]: Abilities.SUPER_LUCK,
[Species.WO_CHIEN]: Abilities.TRIAGE,
[Species.CHIEN_PAO]: Abilities.REFRIGERATE,
[Species.TING_LU]: Abilities.STAMINA,
[Species.CHI_YU]: Abilities.BLAZE,
[Species.ROARING_MOON]: Abilities.AERILATE,
[Species.IRON_VALIANT]: Abilities.DOWNLOAD,
[Species.KORAIDON]: Abilities.PROTOSYNTHESIS,
[Species.MIRAIDON]: Abilities.QUARK_DRIVE,
[Species.WALKING_WAKE]: Abilities.BEAST_BOOST,
[Species.IRON_LEAVES]: Abilities.SHARPNESS,
[Species.POLTCHAGEIST]: Abilities.FLAME_BODY,
[Species.OKIDOGI]: Abilities.STICKY_HOLD,
[Species.MUNKIDORI]: Abilities.PRANKSTER,
[Species.FEZANDIPITI]: Abilities.DAZZLING,
[Species.OGERPON]: Abilities.DISGUISE,
[Species.GOUGING_FIRE]: Abilities.BEAST_BOOST,
[Species.RAGING_BOLT]: Abilities.BEAST_BOOST,
[Species.IRON_BOULDER]: Abilities.SHARPNESS,
[Species.IRON_CROWN]: Abilities.SHARPNESS,
[Species.TERAPAGOS]: Abilities.PROTEAN,
[Species.PECHARUNT]: Abilities.CORROSION,
[Species.ALOLA_RATTATA]: Abilities.CHEEK_POUCH,
[Species.ALOLA_SANDSHREW]: Abilities.ICE_BODY,
[Species.ALOLA_VULPIX]: Abilities.ICE_BODY,
[Species.ALOLA_DIGLETT]: Abilities.CUTE_CHARM,
[Species.ALOLA_MEOWTH]: Abilities.UNNERVE,
[Species.ALOLA_GEODUDE]: Abilities.ELECTROMORPHOSIS,
[Species.ALOLA_GRIMER]: Abilities.MERCILESS,
[Species.ETERNAL_FLOETTE]: Abilities.MAGIC_GUARD,
[Species.GALAR_MEOWTH]: Abilities.SUPER_LUCK,
[Species.GALAR_PONYTA]: Abilities.MAGIC_GUARD,
[Species.GALAR_SLOWPOKE]: Abilities.POISON_TOUCH,
[Species.GALAR_FARFETCHD]: Abilities.SUPER_LUCK,
[Species.GALAR_ARTICUNO]: Abilities.SERENE_GRACE,
[Species.GALAR_ZAPDOS]: Abilities.TOUGH_CLAWS,
[Species.GALAR_MOLTRES]: Abilities.REGENERATOR,
[Species.GALAR_CORSOLA]: Abilities.SHADOW_TAG,
[Species.GALAR_ZIGZAGOON]: Abilities.PICKPOCKET,
[Species.GALAR_DARUMAKA]: Abilities.FLASH_FIRE,
[Species.GALAR_YAMASK]: Abilities.SOLID_ROCK,
[Species.GALAR_STUNFISK]: Abilities.IRON_BARBS,
[Species.HISUI_GROWLITHE]: Abilities.STRONG_JAW,
[Species.HISUI_VOLTORB]: Abilities.HADRON_ENGINE,
[Species.HISUI_QWILFISH]: Abilities.MERCILESS,
[Species.HISUI_SNEASEL]: Abilities.SCRAPPY,
[Species.HISUI_ZORUA]: Abilities.DARK_AURA,
[Species.PALDEA_TAUROS]: Abilities.RATTLED,
[Species.PALDEA_WOOPER]: Abilities.THICK_FAT,
[Species.BLOODMOON_URSALUNA]: Abilities.BERSERK
};
// TODO: Remove
{
//setTimeout(() => {

View File

@ -106,7 +106,9 @@ export class Weather {
const field = scene.getField(true);
for (let pokemon of field) {
const suppressWeatherEffectAbAttr = pokemon.getAbility().getAttrs(SuppressWeatherEffectAbAttr).find(() => true) as SuppressWeatherEffectAbAttr;
let suppressWeatherEffectAbAttr = pokemon.canApplyAbility(false) ? pokemon.getAbility().getAttrs(SuppressWeatherEffectAbAttr).find(() => true) as SuppressWeatherEffectAbAttr : null;
if (!suppressWeatherEffectAbAttr)
suppressWeatherEffectAbAttr = pokemon.canApplyAbility(true) ? pokemon.getPassiveAbility().getAttrs(SuppressWeatherEffectAbAttr).find(() => true) as SuppressWeatherEffectAbAttr : null;
if (suppressWeatherEffectAbAttr && (!this.isImmutable() || suppressWeatherEffectAbAttr.affectsImmutable))
return true;
}

View File

@ -3,7 +3,7 @@ import BattleScene, { ABILITY_OVERRIDE, AnySound, MOVE_OVERRIDE, OPP_ABILITY_OVE
import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info';
import { Moves } from "../data/enums/moves";
import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveTypeAttr, VariableMoveCategoryAttr } from "../data/move";
import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm } from '../data/pokemon-species';
import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, starterPassiveAbilities } from '../data/pokemon-species';
import * as Utils from '../utils';
import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from '../data/type';
import { getLevelTotalExp } from '../data/exp';
@ -25,7 +25,8 @@ import { TempBattleStat } from '../data/temp-battle-stat';
import { ArenaTagSide, WeakenMoveScreenTag, WeakenMoveTypeTag } from '../data/arena-tag';
import { ArenaTagType } from "../data/enums/arena-tag-type";
import { Biome } from "../data/enums/biome";
import { Abilities, Ability, BattleStatMultiplierAbAttr, BlockCritAbAttr, BypassBurnDamageReductionAbAttr, FieldVariableMovePowerAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, NonSuperEffectiveImmunityAbAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, VariableMoveTypeAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPostDefendAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs } from '../data/ability';
import { Ability, BattleStatMultiplierAbAttr, BlockCritAbAttr, BypassBurnDamageReductionAbAttr, FieldVariableMovePowerAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, NonSuperEffectiveImmunityAbAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, VariableMoveTypeAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPostDefendAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs } from '../data/ability';
import { Abilities } from "#app/data/enums/abilities";
import PokemonData from '../system/pokemon-data';
import { BattlerIndex } from '../battle';
import { BattleSpec } from "../enums/battle-spec";
@ -556,7 +557,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
let value = Math.floor(((2 * baseStat + this.ivs[s]) * this.level) * 0.01);
if (isHp) {
value = value + this.level + 10;
if (this.getAbility().hasAttr(NonSuperEffectiveImmunityAbAttr))
if ((this.canApplyAbility() && this.getAbility().hasAttr(NonSuperEffectiveImmunityAbAttr)) || (this.canApplyAbility(true) && this.getPassiveAbility().hasAttr(NonSuperEffectiveImmunityAbAttr)))
value = 1;
if (this.hp > value || this.hp === undefined)
this.hp = value;
@ -716,11 +717,20 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
return allAbilities[abilityId];
}
canApplyAbility(): boolean {
const ability = this.getAbility();
getPassiveAbility(): Ability {
let starterSpeciesId = this.species.speciesId;
while (pokemonPrevolutions.hasOwnProperty(starterSpeciesId))
starterSpeciesId = pokemonPrevolutions[starterSpeciesId];
return allAbilities[starterPassiveAbilities[starterSpeciesId]];
}
canApplyAbility(passive: boolean = false): boolean {
if (passive && !this.isBoss())
return false;
const ability = (!passive ? this.getAbility() : this.getPassiveAbility());
if (ability.isIgnorable && this.scene.arena.ignoreAbilities)
return false;
return (this.hp || ability.isPassive) && !this.getAbility().conditions.find(condition => !condition(this));
return (this.hp || ability.isBypassFaint) && !ability.conditions.find(condition => !condition(this));
}
getWeight(): number {

View File

@ -30,7 +30,8 @@ import { Weather, WeatherType, getRandomWeatherType, getTerrainBlockMessage, get
import { TempBattleStat } from "./data/temp-battle-stat";
import { ArenaTagSide, ArenaTrapTag, MistTag, TrickRoomTag } from "./data/arena-tag";
import { ArenaTagType } from "./data/enums/arena-tag-type";
import { Abilities, CheckTrappedAbAttr, MoveAbilityBypassAbAttr, IgnoreOpponentStatChangesAbAttr, PostAttackAbAttr, PostBattleAbAttr, PostDefendAbAttr, PostSummonAbAttr, PostTurnAbAttr, PostWeatherLapseAbAttr, PreSwitchOutAbAttr, PreWeatherDamageAbAttr, ProtectStatAbAttr, RedirectMoveAbAttr, RunSuccessAbAttr, StatChangeMultiplierAbAttr, SuppressWeatherEffectAbAttr, SyncEncounterNatureAbAttr, applyAbAttrs, applyCheckTrappedAbAttrs, applyPostAttackAbAttrs, applyPostBattleAbAttrs, applyPostDefendAbAttrs, applyPostSummonAbAttrs, applyPostTurnAbAttrs, applyPostWeatherLapseAbAttrs, applyPreStatChangeAbAttrs, applyPreSwitchOutAbAttrs, applyPreWeatherEffectAbAttrs, BattleStatMultiplierAbAttr, applyBattleStatMultiplierAbAttrs, IncrementMovePriorityAbAttr, applyPostVictoryAbAttrs, PostVictoryAbAttr, applyPostBattleInitAbAttrs, PostBattleInitAbAttr, BlockNonDirectDamageAbAttr as BlockNonDirectDamageAbAttr, applyPostKnockOutAbAttrs, PostKnockOutAbAttr, PostBiomeChangeAbAttr, applyPostFaintAbAttrs, PostFaintAbAttr } from "./data/ability";
import { CheckTrappedAbAttr, MoveAbilityBypassAbAttr, IgnoreOpponentStatChangesAbAttr, PostAttackAbAttr, PostBattleAbAttr, PostDefendAbAttr, PostSummonAbAttr, PostTurnAbAttr, PostWeatherLapseAbAttr, PreSwitchOutAbAttr, PreWeatherDamageAbAttr, ProtectStatAbAttr, RedirectMoveAbAttr, RunSuccessAbAttr, StatChangeMultiplierAbAttr, SuppressWeatherEffectAbAttr, SyncEncounterNatureAbAttr, applyAbAttrs, applyCheckTrappedAbAttrs, applyPostAttackAbAttrs, applyPostBattleAbAttrs, applyPostDefendAbAttrs, applyPostSummonAbAttrs, applyPostTurnAbAttrs, applyPostWeatherLapseAbAttrs, applyPreStatChangeAbAttrs, applyPreSwitchOutAbAttrs, applyPreWeatherEffectAbAttrs, BattleStatMultiplierAbAttr, applyBattleStatMultiplierAbAttrs, IncrementMovePriorityAbAttr, applyPostVictoryAbAttrs, PostVictoryAbAttr, applyPostBattleInitAbAttrs, PostBattleInitAbAttr, BlockNonDirectDamageAbAttr as BlockNonDirectDamageAbAttr, applyPostKnockOutAbAttrs, PostKnockOutAbAttr, PostBiomeChangeAbAttr, applyPostFaintAbAttrs, PostFaintAbAttr, IncreasePpAbAttr } from "./data/ability";
import { Abilities } from "./data/enums/abilities";
import { Unlockables, getUnlockableName } from "./system/unlockables";
import { getBiomeKey } from "./field/arena";
import { BattleType, BattlerIndex, TurnCommand } from "./battle";
@ -1207,7 +1208,7 @@ export class SummonPhase extends PartyMemberPokemonPhase {
pokemon.resetTurnData();
if (!this.loaded) {
if (!this.loaded || this.scene.currentBattle.battleType === BattleType.TRAINER || (this.scene.currentBattle.waveIndex % 10) === 1) {
this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true);
this.queuePostSummon();
@ -2131,7 +2132,7 @@ export class MovePhase extends BattlePhase {
for (let opponent of targetedOpponents) {
if (this.move.ppUsed === this.move.getMove().pp)
break;
if (opponent.getAbility().id === Abilities.PRESSURE)
if ((opponent.canApplyAbility() && opponent.getAbility().hasAttr(IncreasePpAbAttr)) || (opponent.canApplyAbility(true) && opponent.getPassiveAbility().hasAttr(IncreasePpAbAttr)))
this.move.ppUsed = Math.min(this.move.ppUsed + 1, this.move.getMovePp());
}
}
@ -2502,14 +2503,18 @@ export class MoveAnimTestPhase extends BattlePhase {
}
export class ShowAbilityPhase extends PokemonPhase {
constructor(scene: BattleScene, battlerIndex: BattlerIndex) {
private passive: boolean;
constructor(scene: BattleScene, battlerIndex: BattlerIndex, passive: boolean = false) {
super(scene, battlerIndex);
this.passive = passive;
}
start() {
super.start();
this.scene.abilityBar.showAbility(this.getPokemon());
this.scene.abilityBar.showAbility(this.getPokemon(), this.passive);
this.end();
}
@ -2904,11 +2909,9 @@ export class FaintPhase extends PokemonPhase {
this.scene.queueMessage(getPokemonMessage(pokemon, ' fainted!'), null, true);
if (pokemon.getAbility().hasAttr(PostFaintAbAttr)) {
if (pokemon.turnData?.attacksReceived?.length) {
const lastAttack = pokemon.turnData.attacksReceived[0];
applyPostFaintAbAttrs(PostFaintAbAttr,pokemon, this.scene.getPokemonById(lastAttack.sourceId), new PokemonMove(lastAttack.move), lastAttack.result);
}
if (pokemon.turnData?.attacksReceived?.length) {
const lastAttack = pokemon.turnData.attacksReceived[0];
applyPostFaintAbAttrs(PostFaintAbAttr, pokemon, this.scene.getPokemonById(lastAttack.sourceId), new PokemonMove(lastAttack.move), lastAttack.result);
}
const alivePlayField = this.scene.getField(true);

View File

@ -38,9 +38,9 @@ export default class AbilityBar extends Phaser.GameObjects.Container {
this.shown = false;
}
showAbility(pokemon: Pokemon): void {
this.pokemonNameText.setText(`${pokemon.name}'s`);
this.abilityNameText.setText(pokemon.getAbility().name);
showAbility(pokemon: Pokemon, passive: boolean = false): void {
this.pokemonNameText.setText(`${pokemon.name}'s${passive ? ' Passive' : ''}`);
this.abilityNameText.setText((!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name);
if (this.shown)
return;