diff --git a/public/images/pokemon/variant/back/383_2.png b/public/images/pokemon/variant/back/383_2.png index aea0b02b481..0d25afe7e54 100644 Binary files a/public/images/pokemon/variant/back/383_2.png and b/public/images/pokemon/variant/back/383_2.png differ diff --git a/src/data/ability.ts b/src/data/ability.ts index 662cd3715eb..22867ee131f 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -3,7 +3,7 @@ import { Type } from "./type"; import * as Utils from "../utils"; import { BattleStat, getBattleStatName } from "./battle-stat"; import { PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../phases"; -import { getPokemonMessage } from "../messages"; +import { getPokemonMessage, getPokemonPrefix } from "../messages"; import { Weather, WeatherType } from "./weather"; import { BattlerTag } from "./battler-tags"; import { BattlerTagType } from "./enums/battler-tag-type"; @@ -144,7 +144,7 @@ export class BlockRecoilDamageAttr extends AbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]) { - return getPokemonMessage(pokemon, `'s ${abilityName}\nprotected it from recoil!`); + return i18next.t('abilityTriggers:blockRecoilDamage', {pokemonName: `${getPokemonPrefix(pokemon)}${pokemon.name}`, abilityName: abilityName}); } } @@ -991,6 +991,42 @@ export class MoveTypeChangeAttr extends PreAttackAbAttr { } } +/** + * Class for abilities that boost the damage of moves + * For abilities that boost the base power of moves, see VariableMovePowerAbAttr + * @param damageMultiplier the amount to multiply the damage by + * @param condition the condition for this ability to be applied + */ +export class DamageBoostAbAttr extends PreAttackAbAttr { + private damageMultiplier: number; + private condition: PokemonAttackCondition; + + constructor(damageMultiplier: number, condition: PokemonAttackCondition){ + super(true); + this.damageMultiplier = damageMultiplier; + this.condition = condition; + } + + /** + * + * @param pokemon the attacker pokemon + * @param passive N/A + * @param defender the target pokemon + * @param move the move used by the attacker pokemon + * @param args Utils.NumberHolder as damage + * @returns true if the function succeeds + */ + applyPreAttack(pokemon: Pokemon, passive: boolean, defender: Pokemon, move: PokemonMove, args: any[]): boolean { + if (this.condition(pokemon, defender, move.getMove())) { + const power = args[0] as Utils.NumberHolder; + power.value = Math.floor(power.value * this.damageMultiplier); + return true; + } + + return false; + } +} + export class MovePowerBoostAbAttr extends VariableMovePowerAbAttr { private condition: PokemonAttackCondition; private powerMultiplier: number; @@ -1371,6 +1407,23 @@ export class PostSummonMessageAbAttr extends PostSummonAbAttr { } } +export class PostSummonUnnamedMessageAbAttr extends PostSummonAbAttr { + //Attr doesn't force pokemon name on the message + private message: string; + + constructor(message: string) { + super(true); + + this.message = message; + } + + applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + pokemon.scene.queueMessage(this.message); + + return true; + } +} + export class PostSummonAddBattlerTagAbAttr extends PostSummonAbAttr { private tagType: BattlerTagType; private turnCount: integer; @@ -3025,7 +3078,8 @@ export function initAbilities() { .attr(BlockCritAbAttr) .ignorable(), new Ability(Abilities.AIR_LOCK, 3) - .attr(SuppressWeatherEffectAbAttr, true), + .attr(SuppressWeatherEffectAbAttr, true) + .attr(PostSummonUnnamedMessageAbAttr, "The effects of the weather disappeared."), new Ability(Abilities.TANGLED_FEET, 4) .conditionalAttr(pokemon => !!pokemon.getTag(BattlerTagType.CONFUSED), BattleStatMultiplierAbAttr, BattleStat.EVA, 2) .ignorable(), @@ -3121,7 +3175,7 @@ export function initAbilities() { .attr(IgnoreOpponentStatChangesAbAttr) .ignorable(), new Ability(Abilities.TINTED_LENS, 4) - .attr(MovePowerBoostAbAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) <= 0.5, 2), + .attr(DamageBoostAbAttr, 2, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) <= 0.5), new Ability(Abilities.FILTER, 4) .attr(ReceivedMoveDamageMultiplierAbAttr,(target, user, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2, 0.75) .ignorable(), @@ -3427,9 +3481,9 @@ export function initAbilities() { .attr(UnsuppressableAbilityAbAttr) .attr(NoFusionAbilityAbAttr), new Ability(Abilities.POWER_CONSTRUCT, 7) // TODO: 10% Power Construct Zygarde isn't accounted for yet. If changed, update Zygarde's getSpeciesFormIndex entry accordingly - .attr(PostBattleInitFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2) - .attr(PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2) - .attr(PostTurnFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2) + .attr(PostBattleInitFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === 'complete' ? 4 : 2) + .attr(PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === 'complete' ? 4 : 2) + .attr(PostTurnFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === 'complete' ? 4 : 2) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(UnsuppressableAbilityAbAttr) diff --git a/src/data/move.ts b/src/data/move.ts index 2a841a40150..6a6bee468a9 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1353,6 +1353,25 @@ export class BypassSleepAttr extends MoveAttr { } } +/** + * Attribute used for moves that bypass the burn damage reduction of physical moves, currently only facade + * Called during damage calculation + * @param user N/A + * @param target N/A + * @param move Move with this attribute + * @param args Utils.BooleanHolder for burnDamageReductionCancelled + * @returns true if the function succeeds + */ +export class BypassBurnDamageReductionAttr extends MoveAttr { + + /** Prevents the move's damage from being reduced by burn */ + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + (args[0] as Utils.BooleanHolder).value = true; + + return true; + } +} + export class WeatherChangeAttr extends MoveEffectAttr { private weatherType: WeatherType; @@ -4904,7 +4923,8 @@ export function initMoves() { .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], -2), new AttackMove(Moves.FACADE, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => user.status - && (user.status.effect === StatusEffect.BURN || user.status.effect === StatusEffect.POISON || user.status.effect === StatusEffect.TOXIC || user.status.effect === StatusEffect.PARALYSIS) ? 2 : 1), + && (user.status.effect === StatusEffect.BURN || user.status.effect === StatusEffect.POISON || user.status.effect === StatusEffect.TOXIC || user.status.effect === StatusEffect.PARALYSIS) ? 2 : 1) + .attr(BypassBurnDamageReductionAttr), new AttackMove(Moves.FOCUS_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 20, -1, -3, 3) .punchingMove() .ignoresVirtual() @@ -6201,7 +6221,7 @@ export function initMoves() { .ignoresVirtual(), /* End Unused */ new AttackMove(Moves.ZIPPY_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, 100, 2, 7) - .attr(CritOnlyAttr), + .attr(StatChangeAttr, BattleStat.EVA, 1, true), new AttackMove(Moves.SPLISHY_SPLASH, Type.WATER, MoveCategory.SPECIAL, 90, 100, 15, 30, 0, 7) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .target(MoveTarget.ALL_NEAR_ENEMIES), @@ -6226,7 +6246,7 @@ export function initMoves() { new AttackMove(Moves.FREEZY_FROST, Type.ICE, MoveCategory.SPECIAL, 100, 90, 10, -1, 0, 7) .attr(ResetStatsAttr), new AttackMove(Moves.SPARKLY_SWIRL, Type.FAIRY, MoveCategory.SPECIAL, 120, 85, 5, -1, 0, 7) - .partial(), + .attr(PartyStatusCureAttr, null, Abilities.NONE), new AttackMove(Moves.VEEVEE_VOLLEY, Type.NORMAL, MoveCategory.PHYSICAL, -1, -1, 20, -1, 0, 7) .attr(FriendshipPowerAttr), new AttackMove(Moves.DOUBLE_IRON_BASH, Type.STEEL, MoveCategory.PHYSICAL, 60, 100, 5, 30, 0, 7) @@ -6821,7 +6841,7 @@ export function initMoves() { const turnMove = user.getLastXMoves(1); return !turnMove.length || turnMove[0].move !== move.id || turnMove[0].result !== MoveResult.SUCCESS; }), // TODO Add Instruct/Encore interaction - new AttackMove(Moves.COMEUPPANCE, Type.DARK, MoveCategory.PHYSICAL, 1, 100, 10, -1, 0, 9) + new AttackMove(Moves.COMEUPPANCE, Type.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 9) .attr(CounterDamageAttr, (move: Move) => (move.category === MoveCategory.PHYSICAL || move.category === MoveCategory.SPECIAL), 1.5) .target(MoveTarget.ATTACKER), new AttackMove(Moves.AQUA_CUTTER, Type.WATER, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 9) diff --git a/src/data/pokemon-evolutions.ts b/src/data/pokemon-evolutions.ts index 23495b54ee2..7511b0e4162 100644 --- a/src/data/pokemon-evolutions.ts +++ b/src/data/pokemon-evolutions.ts @@ -1385,10 +1385,10 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.HELIOLISK, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.CHARJABUG]: [ - new SpeciesEvolution(Species.VIKAVOLT, 1, EvolutionItem.THUNDER_STONE, null) + new SpeciesEvolution(Species.VIKAVOLT, 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.CRABRAWLER]: [ - new SpeciesEvolution(Species.CRABOMINABLE, 1, EvolutionItem.ICE_STONE, null) + new SpeciesEvolution(Species.CRABOMINABLE, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.ROCKRUFF]: [ new SpeciesFormEvolution(Species.LYCANROC, '', 'midday', 25, null, new SpeciesEvolutionCondition(p => (p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY) && (p.formIndex === 0)), null), diff --git a/src/data/pokemon-level-moves.ts b/src/data/pokemon-level-moves.ts index 2823170b13d..4587753d110 100644 --- a/src/data/pokemon-level-moves.ts +++ b/src/data/pokemon-level-moves.ts @@ -322,6 +322,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.ASSURANCE ], [ 1, Moves.PLUCK ], [ 1, Moves.DRILL_RUN ], + [ 1, Moves.PURSUIT ], [ 4, Moves.LEER ], [ 8, Moves.ASSURANCE ], [ 11, Moves.FURY_ATTACK ], @@ -566,6 +567,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CHARM ], [ 1, Moves.COPYCAT ], [ 1, Moves.DISARMING_VOICE ], + [ 1, Moves.SPOTLIGHT ], [ 4, Moves.STORED_POWER ], [ 8, Moves.ENCORE ], [ 12, Moves.AFTER_YOU ], @@ -600,6 +602,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.COPYCAT ], [ 1, Moves.AFTER_YOU ], [ 1, Moves.STORED_POWER ], + [ 1, Moves.SPOTLIGHT ], [ 1, Moves.DISARMING_VOICE ], ], [Species.VULPIX]: [ @@ -816,6 +819,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SUPERSONIC ], [ 1, Moves.DISABLE ], [ 1, Moves.QUIVER_DANCE ], + [ 1, Moves.SILVER_WIND ], [ 11, Moves.CONFUSION ], [ 13, Moves.POISON_POWDER ], [ 17, Moves.PSYBEAM ], @@ -850,6 +854,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TRI_ATTACK ], [ 1, Moves.ASTONISH ], [ 1, Moves.NIGHT_SLASH ], + [ 1, Moves.ROTOTILLER ], [ 12, Moves.MUD_SLAP ], [ 16, Moves.BULLDOZE ], [ 20, Moves.SUCKER_PUNCH ], @@ -895,6 +900,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.PSYDUCK]: [ [ 1, Moves.SCRATCH ], [ 1, Moves.TAIL_WHIP ], + [ 1, Moves.WATER_SPORT ], [ 3, Moves.WATER_GUN ], [ 6, Moves.CONFUSION ], [ 9, Moves.FURY_SWIPES ], @@ -914,6 +920,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.WATER_GUN ], [ 1, Moves.CONFUSION ], [ 1, Moves.AQUA_JET ], + [ 1, Moves.WATER_SPORT ], + [ 1, Moves.ME_FIRST ], [ 9, Moves.FURY_SWIPES ], [ 12, Moves.WATER_PULSE ], [ 15, Moves.DISABLE ], @@ -993,6 +1001,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.REVERSAL ], [ 1, Moves.CRUNCH ], [ 1, Moves.HELPING_HAND ], + [ 1, Moves.ODOR_SLEUTH ], [ 1, Moves.HOWL ], [ 1, Moves.FLARE_BLITZ ], [ 1, Moves.FIRE_FANG ], @@ -1003,6 +1012,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.POLIWAG]: [ [ 1, Moves.WATER_GUN ], [ 1, Moves.HYPNOSIS ], + [ 1, Moves.WATER_SPORT ], [ 6, Moves.POUND ], [ 12, Moves.MUD_SHOT ], [ 18, Moves.BUBBLE_BEAM ], @@ -1017,6 +1027,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.POUND ], [ 1, Moves.WATER_GUN ], [ 1, Moves.HYPNOSIS ], + [ 1, Moves.WATER_SPORT ], [ 1, Moves.MUD_SHOT ], [ 18, Moves.BUBBLE_BEAM ], [ 24, Moves.RAIN_DANCE ], @@ -1034,6 +1045,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.POUND ], [ 1, Moves.DOUBLE_EDGE ], [ 1, Moves.WATER_GUN ], + [ 1, Moves.WATER_SPORT ], [ 1, Moves.HYDRO_PUMP ], [ 1, Moves.BELLY_DRUM ], [ 1, Moves.RAIN_DANCE ], @@ -1098,6 +1110,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LOW_KICK ], [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.REVENGE ], + [ 1, Moves.KARATE_CHOP ], [ 12, Moves.LOW_SWEEP ], [ 16, Moves.KNOCK_OFF ], [ 20, Moves.SCARY_FACE ], @@ -1116,6 +1129,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.REVENGE ], [ 1, Moves.WIDE_GUARD ], + [ 1, Moves.KARATE_CHOP ], [ 12, Moves.LOW_SWEEP ], [ 16, Moves.KNOCK_OFF ], [ 20, Moves.SCARY_FACE ], @@ -1195,6 +1209,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.ACID ], [ 1, Moves.WATER_GUN ], [ 1, Moves.REFLECT_TYPE ], + [ 1, Moves.WRING_OUT ], [ 12, Moves.SUPERSONIC ], [ 16, Moves.WATER_PULSE ], [ 20, Moves.SCREECH ], @@ -1437,6 +1452,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.GROWL ], [ 1, Moves.ICY_WIND ], [ 1, Moves.CHARM ], + [ 1, Moves.SIGNAL_BEAM ], [ 13, Moves.ENCORE ], [ 17, Moves.ICE_SHARD ], [ 21, Moves.REST ], @@ -1580,6 +1596,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.ROCK_THROW ], [ 1, Moves.HARDEN ], + [ 1, Moves.MUD_SPORT ], [ 4, Moves.SMACK_DOWN ], [ 8, Moves.ROCK_POLISH ], [ 12, Moves.DRAGON_BREATH ], @@ -1617,6 +1634,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CONFUSION ], [ 1, Moves.HYPNOSIS ], [ 1, Moves.SWITCHEROO ], + [ 1, Moves.NIGHTMARE ], [ 13, Moves.HEADBUTT ], [ 17, Moves.POISON_GAS ], [ 21, Moves.PSYBEAM ], @@ -1631,6 +1649,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.KRABBY]: [ [ 1, Moves.LEER ], [ 1, Moves.WATER_GUN ], + [ 1, Moves.MUD_SPORT ], [ 4, Moves.HARDEN ], [ 8, Moves.METAL_CLAW ], [ 12, Moves.MUD_SHOT ], @@ -1651,6 +1670,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.METAL_CLAW ], [ 1, Moves.HAMMER_ARM ], [ 1, Moves.WIDE_GUARD ], + [ 1, Moves.MUD_SPORT ], [ 12, Moves.MUD_SHOT ], [ 16, Moves.PROTECT ], [ 20, Moves.BUBBLE_BEAM ], @@ -1704,6 +1724,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.EXEGGCUTE]: [ [ 1, Moves.ABSORB ], [ 1, Moves.HYPNOSIS ], + [ 1, Moves.BARRAGE ], [ 5, Moves.REFLECT ], [ 10, Moves.LEECH_SEED ], [ 15, Moves.MEGA_DRAIN ], @@ -1718,6 +1739,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.EXEGGUTOR]: [ [ 0, Moves.STOMP ], + [ 1, Moves.BARRAGE ], [ 1, Moves.SEED_BOMB ], [ 1, Moves.PSYSHOCK ], [ 1, Moves.WOOD_HAMMER ], @@ -1758,6 +1780,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.GROWL ], [ 1, Moves.MUD_SLAP ], [ 1, Moves.FALSE_SWIPE ], + [ 1, Moves.BONE_CLUB ], [ 12, Moves.HEADBUTT ], [ 16, Moves.RETALIATE ], [ 20, Moves.FLING ], @@ -1777,6 +1800,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.HELPING_HAND ], [ 1, Moves.FEINT ], [ 1, Moves.LOW_SWEEP ], + [ 1, Moves.JUMP_KICK ], + [ 1, Moves.ROLLING_KICK ], [ 4, Moves.DOUBLE_KICK ], [ 8, Moves.LOW_KICK ], [ 12, Moves.ENDURE ], @@ -1797,6 +1822,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.FAKE_OUT ], [ 1, Moves.HELPING_HAND ], [ 1, Moves.FEINT ], + [ 1, Moves.PURSUIT ], + [ 1, Moves.COMET_PUNCH ], [ 4, Moves.MACH_PUNCH ], [ 8, Moves.VACUUM_WAVE ], [ 12, Moves.DETECT ], @@ -1920,6 +1947,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.TANGELA]: [ [ 1, Moves.BIND ], [ 1, Moves.ABSORB ], + [ 1, Moves.CONSTRICT ], [ 4, Moves.STUN_SPORE ], [ 8, Moves.GROWTH ], [ 12, Moves.MEGA_DRAIN ], @@ -1939,6 +1967,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.KANGASKHAN]: [ [ 1, Moves.POUND ], [ 1, Moves.TAIL_WHIP ], + [ 1, Moves.COMET_PUNCH ], [ 4, Moves.GROWL ], [ 8, Moves.FAKE_OUT ], [ 12, Moves.BITE ], @@ -1986,6 +2015,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.GOLDEEN]: [ [ 1, Moves.TAIL_WHIP ], [ 1, Moves.PECK ], + [ 1, Moves.WATER_SPORT ], [ 5, Moves.SUPERSONIC ], [ 10, Moves.WATER_PULSE ], [ 15, Moves.HORN_ATTACK ], @@ -2000,6 +2030,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SEAKING]: [ [ 1, Moves.TAIL_WHIP ], [ 1, Moves.SUPERSONIC ], + [ 1, Moves.WATER_SPORT ], [ 1, Moves.PECK ], [ 1, Moves.WATER_PULSE ], [ 15, Moves.HORN_ATTACK ], @@ -2042,6 +2073,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CONFUSE_RAY ], [ 1, Moves.LIGHT_SCREEN ], [ 1, Moves.SWIFT ], + [ 1, Moves.SPOTLIGHT ], [ 1, Moves.RAPID_SPIN ], [ 1, Moves.COSMIC_POWER ], [ 1, Moves.BRINE ], @@ -2056,6 +2088,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.GUARD_SWAP ], [ 1, Moves.WIDE_GUARD ], [ 1, Moves.QUICK_GUARD ], + [ 1, Moves.BARRIER ], [ 12, Moves.CONFUSION ], [ 16, Moves.ROLE_PLAY ], [ 20, Moves.PROTECT ], @@ -2334,6 +2367,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.OMANYTE]: [ [ 1, Moves.BIND ], [ 1, Moves.WITHDRAW ], + [ 1, Moves.CONSTRICT ], [ 5, Moves.ROLLOUT ], [ 10, Moves.SAND_ATTACK ], [ 15, Moves.WATER_GUN ], @@ -2351,6 +2385,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 0, Moves.CRUNCH ], [ 1, Moves.BIND ], [ 1, Moves.SAND_ATTACK ], + [ 1, Moves.CONSTRICT ], + [ 1, Moves.SPIKE_CANNON ], [ 1, Moves.WITHDRAW ], [ 1, Moves.ROLLOUT ], [ 15, Moves.WATER_GUN ], @@ -2841,6 +2877,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SPINARAK]: [ [ 1, Moves.POISON_STING ], [ 1, Moves.STRING_SHOT ], + [ 1, Moves.CONSTRICT ], [ 5, Moves.ABSORB ], [ 8, Moves.INFESTATION ], [ 12, Moves.SCARY_FACE ], @@ -2861,6 +2898,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.POISON_STING ], [ 1, Moves.ABSORB ], [ 1, Moves.STRING_SHOT ], + [ 1, Moves.CONSTRICT ], [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.BUG_BITE ], [ 1, Moves.FELL_STINGER ], @@ -2918,6 +2956,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 0, Moves.SWALLOW ], [ 1, Moves.SUPERSONIC ], [ 1, Moves.WATER_GUN ], + [ 1, Moves.SPOTLIGHT ], [ 1, Moves.THUNDER_WAVE ], [ 1, Moves.ELECTRO_BALL ], [ 1, Moves.EERIE_IMPULSE ], @@ -3069,6 +3108,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.ZAP_CANNON ], [ 1, Moves.DRAGON_PULSE ], [ 1, Moves.MAGNETIC_FLUX ], + [ 1, Moves.ION_DELUGE ], [ 11, Moves.COTTON_SPORE ], [ 16, Moves.CHARGE ], [ 20, Moves.TAKE_DOWN ], @@ -3371,6 +3411,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.HELPING_HAND ], [ 1, Moves.COVET ], [ 1, Moves.COPYCAT ], + [ 1, Moves.PURSUIT ], [ 5, Moves.SAND_ATTACK ], [ 10, Moves.SNARL ], [ 15, Moves.QUICK_ATTACK ], @@ -3425,6 +3466,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.MISDREAVUS]: [ [ 1, Moves.GROWL ], [ 1, Moves.CONFUSION ], + [ 1, Moves.PSYWAVE ], [ 10, Moves.ASTONISH ], [ 14, Moves.CONFUSE_RAY ], [ 19, Moves.MEAN_LOOK ], @@ -3492,6 +3534,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TOXIC_SPIKES ], [ 1, Moves.MAGNET_RISE ], [ 1, Moves.BUG_BITE ], + [ 1, Moves.MIRROR_SHOT ], [ 12, Moves.TAKE_DOWN ], [ 17, Moves.RAPID_SPIN ], [ 20, Moves.ROLLOUT ], @@ -3541,6 +3584,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.ROCK_THROW ], [ 1, Moves.HARDEN ], + [ 1, Moves.MUD_SPORT ], [ 1, Moves.CRUNCH ], [ 1, Moves.ROCK_POLISH ], [ 1, Moves.THUNDER_FANG ], @@ -3638,6 +3682,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SHUCKLE]: [ [ 1, Moves.WRAP ], [ 1, Moves.WITHDRAW ], + [ 1, Moves.BIDE ], + [ 1, Moves.CONSTRICT ], [ 5, Moves.ROLLOUT ], [ 10, Moves.STRUGGLE_BUG ], [ 15, Moves.ROCK_THROW ], @@ -3758,6 +3804,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SWINUB]: [ [ 1, Moves.TACKLE ], [ 1, Moves.MUD_SLAP ], + [ 1, Moves.ODOR_SLEUTH ], [ 5, Moves.POWDER_SNOW ], [ 10, Moves.FLAIL ], [ 15, Moves.ICE_SHARD ], @@ -3775,6 +3822,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.FLAIL ], [ 1, Moves.POWDER_SNOW ], [ 1, Moves.MUD_SLAP ], + [ 1, Moves.ODOR_SLEUTH ], [ 1, Moves.ANCIENT_POWER ], [ 15, Moves.ICE_SHARD ], [ 20, Moves.MIST ], @@ -3819,6 +3867,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.OCTILLERY]: [ [ 0, Moves.OCTAZOOKA ], [ 1, Moves.WRAP ], + [ 1, Moves.CONSTRICT ], [ 1, Moves.WATER_GUN ], [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.HELPING_HAND ], @@ -3845,6 +3894,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SUPERSONIC ], [ 1, Moves.WATER_GUN ], [ 1, Moves.PSYBEAM ], + [ 1, Moves.SIGNAL_BEAM ], [ 1, Moves.BULLET_SEED ], [ 1, Moves.ROOST ], [ 12, Moves.WATER_PULSE ], @@ -3934,6 +3984,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.DEFENSE_CURL ], + [ 1, Moves.ODOR_SLEUTH ], [ 6, Moves.FLAIL ], [ 10, Moves.ROLLOUT ], [ 15, Moves.BULLDOZE ], @@ -3981,6 +4032,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.STANTLER]: [ [ 1, Moves.TACKLE ], + [ 1, Moves.ME_FIRST ], [ 3, Moves.LEER ], [ 7, Moves.ASTONISH ], [ 10, Moves.HYPNOSIS ], @@ -4015,6 +4067,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.FAKE_OUT ], [ 1, Moves.HELPING_HAND ], [ 1, Moves.FEINT ], + [ 1, Moves.PURSUIT ], + [ 1, Moves.ROLLING_KICK ], [ 4, Moves.QUICK_ATTACK ], [ 8, Moves.GYRO_BALL ], [ 12, Moves.DETECT ], @@ -4334,6 +4388,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.X_SCISSOR ], [ 1, Moves.ENERGY_BALL ], [ 1, Moves.SHED_TAIL ], + [ 1, Moves.DUAL_CHOP ], [ 5, Moves.MEGA_DRAIN ], [ 12, Moves.DETECT ], [ 15, Moves.QUICK_GUARD ], @@ -4524,6 +4579,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.GROWL ], [ 1, Moves.SWITCHEROO ], [ 1, Moves.BABY_DOLL_EYES ], + [ 1, Moves.ROTOTILLER ], [ 9, Moves.COVET ], [ 12, Moves.HEADBUTT ], [ 15, Moves.HONE_CLAWS ], @@ -4644,6 +4700,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SEEDOT]: [ [ 1, Moves.TACKLE ], [ 1, Moves.HARDEN ], + [ 1, Moves.BIDE ], [ 3, Moves.ABSORB ], [ 6, Moves.ASTONISH ], [ 9, Moves.GROWTH ], @@ -4756,6 +4813,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.WATER_GUN ], [ 1, Moves.TAILWIND ], [ 1, Moves.SUPERSONIC ], + [ 1, Moves.WATER_SPORT ], [ 15, Moves.WING_ATTACK ], [ 20, Moves.WATER_PULSE ], [ 28, Moves.STOCKPILE ], @@ -4842,6 +4900,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.SWEET_SCENT ], [ 1, Moves.SOAK ], + [ 1, Moves.OMINOUS_WIND ], [ 17, Moves.GUST ], [ 22, Moves.SCARY_FACE ], [ 22, Moves.AIR_CUTTER ], @@ -5232,6 +5291,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.MEDITITE]: [ [ 1, Moves.CONFUSION ], [ 1, Moves.WORK_UP ], + [ 1, Moves.BIDE ], [ 9, Moves.DETECT ], [ 12, Moves.ENDURE ], [ 15, Moves.FEINT ], @@ -5254,6 +5314,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CONFUSION ], [ 1, Moves.DETECT ], [ 1, Moves.WORK_UP ], + [ 1, Moves.BIDE ], [ 12, Moves.ENDURE ], [ 15, Moves.FEINT ], [ 17, Moves.FORCE_PALM ], @@ -5345,6 +5406,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.ENTRAINMENT ], ], [Species.VOLBEAT]: [ + [ 1, Moves.FLASH ], [ 1, Moves.TACKLE ], [ 5, Moves.DOUBLE_TEAM ], [ 8, Moves.CONFUSE_RAY ], @@ -5420,6 +5482,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.POUND ], [ 1, Moves.YAWN ], [ 1, Moves.POISON_GAS ], + [ 1, Moves.WRING_OUT ], [ 1, Moves.SLUDGE ], [ 12, Moves.AMNESIA ], [ 17, Moves.ACID_SPRAY ], @@ -5606,6 +5669,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.TRAPINCH]: [ [ 1, Moves.SAND_ATTACK ], [ 1, Moves.ASTONISH ], + [ 1, Moves.BIDE ], + [ 1, Moves.FEINT_ATTACK ], [ 8, Moves.BITE ], [ 12, Moves.MUD_SLAP ], [ 16, Moves.SAND_TOMB ], @@ -5629,6 +5694,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SUPERPOWER ], [ 1, Moves.ASTONISH ], [ 1, Moves.BULLDOZE ], + [ 1, Moves.BIDE ], + [ 1, Moves.FEINT_ATTACK ], [ 12, Moves.MUD_SLAP ], [ 16, Moves.SAND_TOMB ], [ 20, Moves.DRAGON_TAIL ], @@ -5655,6 +5722,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.ASTONISH ], [ 1, Moves.DRAGON_DANCE ], [ 1, Moves.FEINT ], + [ 1, Moves.BIDE ], + [ 1, Moves.FEINT_ATTACK ], [ 12, Moves.MUD_SLAP ], [ 16, Moves.SAND_TOMB ], [ 20, Moves.DRAGON_TAIL ], @@ -5932,6 +6001,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.LILEEP]: [ [ 1, Moves.WRAP ], [ 1, Moves.ASTONISH ], + [ 1, Moves.CONSTRICT ], [ 4, Moves.ACID ], [ 8, Moves.CONFUSE_RAY ], [ 12, Moves.INGRAIN ], @@ -5950,6 +6020,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LEECH_SEED ], [ 1, Moves.WRAP ], [ 1, Moves.ASTONISH ], + [ 1, Moves.CONSTRICT ], [ 1, Moves.ACID ], [ 1, Moves.CONFUSE_RAY ], [ 12, Moves.INGRAIN ], @@ -6006,6 +6077,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.WRAP ], [ 1, Moves.WATER_GUN ], + [ 1, Moves.WATER_SPORT ], [ 4, Moves.DISARMING_VOICE ], [ 8, Moves.TWISTER ], [ 12, Moves.AQUA_RING ], @@ -6145,6 +6217,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.GROWL ], [ 1, Moves.ASTONISH ], [ 1, Moves.CONFUSION ], + [ 1, Moves.SYNCHRONOISE ], [ 13, Moves.YAWN ], [ 16, Moves.STORED_POWER ], [ 19, Moves.TAKE_DOWN ], @@ -6204,7 +6277,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.HEADBUTT ], [ 1, Moves.ASTONISH ], [ 1, Moves.LEER ], - [ 1, Moves.DOUBLE_TEAM ], + [ 1, Moves.DOUBLE_TEAM ], + [ 1, Moves.ICE_BALL ], [ 15, Moves.ICE_SHARD ], [ 20, Moves.PROTECT ], [ 25, Moves.ICY_WIND ], @@ -6272,6 +6346,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 72, Moves.SHEER_COLD ], ], [Species.CLAMPERL]: [ + [ 1, Moves.CLAMP ], [ 1, Moves.WATER_GUN ], [ 1, Moves.WHIRLPOOL ], [ 1, Moves.IRON_DEFENSE ], @@ -6495,6 +6570,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.LATIAS]: [ [ 1, Moves.STORED_POWER ], [ 1, Moves.CHARM ], + [ 1, Moves.PSYWAVE ], [ 5, Moves.HELPING_HAND ], [ 10, Moves.RECOVER ], [ 15, Moves.CONFUSION ], @@ -6513,6 +6589,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.LATIOS]: [ [ 1, Moves.STORED_POWER ], [ 1, Moves.DRAGON_DANCE ], + [ 1, Moves.HEAL_BLOCK ], + [ 1, Moves.PSYWAVE ], [ 5, Moves.HELPING_HAND ], [ 10, Moves.RECOVER ], [ 15, Moves.CONFUSION ], @@ -6831,6 +6909,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.KRICKETOT]: [ [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], + [ 1, Moves.BIDE ], [ 6, Moves.STRUGGLE_BUG ], [ 16, Moves.BUG_BITE ], ], @@ -6838,6 +6917,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 0, Moves.FURY_CUTTER ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], + [ 1, Moves.BIDE ], [ 14, Moves.ABSORB ], [ 18, Moves.SING ], [ 22, Moves.FOCUS_ENERGY ], @@ -7055,11 +7135,13 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 36, Moves.TOXIC ], [ 40, Moves.ATTACK_ORDER ], [ 40, Moves.DEFEND_ORDER ], + [ 40, Moves.HEAL_ORDER ], [ 44, Moves.DESTINY_BOND ], ], [Species.PACHIRISU]: [ [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_SHOCK ], + [ 1, Moves.BIDE ], [ 5, Moves.QUICK_ATTACK ], [ 9, Moves.CHARM ], [ 13, Moves.SPARK ], @@ -7156,6 +7238,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.RECOVER ], [ 1, Moves.HARDEN ], [ 1, Moves.MUD_SLAP ], + [ 1, Moves.MUD_SPORT ], [ 15, Moves.WATER_PULSE ], [ 20, Moves.ANCIENT_POWER ], [ 25, Moves.BODY_SLAM ], @@ -7183,6 +7266,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.DRIFLOON]: [ [ 1, Moves.MINIMIZE ], [ 1, Moves.ASTONISH ], + [ 1, Moves.CONSTRICT ], [ 4, Moves.GUST ], [ 8, Moves.FOCUS_ENERGY ], [ 12, Moves.PAYBACK ], @@ -7203,6 +7287,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.MINIMIZE ], [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.ASTONISH ], + [ 1, Moves.CONSTRICT ], [ 1, Moves.STRENGTH_SAP ], [ 12, Moves.PAYBACK ], [ 16, Moves.HEX ], @@ -7217,6 +7302,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 54, Moves.EXPLOSION ], ], [Species.BUNEARY]: [ + [ 1, Moves.FRUSTRATION ], [ 1, Moves.POUND ], [ 1, Moves.SPLASH ], [ 4, Moves.DEFENSE_CURL ], @@ -7234,12 +7320,14 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.HEALING_WISH ], ], [Species.LOPUNNY]: [ + [ 0, Moves.RETURN ], [ 1, Moves.POUND ], [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.SPLASH ], [ 1, Moves.MIRROR_COAT ], [ 1, Moves.MAGIC_COAT ], [ 1, Moves.BABY_DOLL_EYES ], + [ 1, Moves.ROTOTILLER ], [ 12, Moves.AFTER_YOU ], [ 16, Moves.QUICK_ATTACK ], [ 20, Moves.DOUBLE_KICK ], @@ -7256,6 +7344,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.MISMAGIUS]: [ [ 1, Moves.GROWL ], [ 1, Moves.SPITE ], + [ 1, Moves.PSYWAVE ], + [ 1, Moves.LUCKY_CHANT ], [ 1, Moves.ASTONISH ], [ 1, Moves.MAGICAL_LEAF ], [ 1, Moves.POWER_GEM ], @@ -7269,6 +7359,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SUCKER_PUNCH ], [ 1, Moves.NIGHT_SLASH ], [ 1, Moves.QUASH ], + [ 1, Moves.PURSUIT ], [ 25, Moves.SWAGGER ], [ 35, Moves.NASTY_PLOT ], [ 45, Moves.FOUL_PLAY ], @@ -7409,6 +7500,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.MIME_JR]: [ [ 1, Moves.POUND ], [ 1, Moves.COPYCAT ], + [ 1, Moves.BARRIER ], [ 4, Moves.BATON_PASS ], [ 8, Moves.ENCORE ], [ 12, Moves.CONFUSION ], @@ -7455,6 +7547,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SPIRITOMB]: [ [ 1, Moves.NIGHT_SHADE ], [ 1, Moves.CONFUSE_RAY ], + [ 1, Moves.PURSUIT ], [ 5, Moves.SHADOW_SNEAK ], [ 10, Moves.SPITE ], [ 15, Moves.PAYBACK ], @@ -7487,6 +7580,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.DRAGON_BREATH ], [ 1, Moves.SAND_TOMB ], + [ 1, Moves.DUAL_CHOP ], [ 18, Moves.BULLDOZE ], [ 27, Moves.BITE ], [ 34, Moves.SLASH ], @@ -7502,6 +7596,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.DRAGON_BREATH ], [ 1, Moves.SAND_TOMB ], + [ 1, Moves.DUAL_CHOP ], [ 18, Moves.BULLDOZE ], [ 27, Moves.BITE ], [ 34, Moves.SLASH ], @@ -7514,6 +7609,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.MUNCHLAX]: [ [ 1, Moves.TACKLE ], [ 1, Moves.LICK ], + [ 1, Moves.ODOR_SLEUTH ], [ 4, Moves.DEFENSE_CURL ], [ 8, Moves.RECYCLE ], [ 12, Moves.COVET ], @@ -7789,6 +7885,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TAUNT ], [ 1, Moves.ASSURANCE ], [ 1, Moves.ICE_SHARD ], + [ 1, Moves.EMBARGO ], [ 18, Moves.METAL_CLAW ], [ 24, Moves.ICY_WIND ], [ 30, Moves.FURY_SWIPES ], @@ -7804,6 +7901,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SUPERSONIC ], [ 1, Moves.THUNDER_SHOCK ], [ 1, Moves.THUNDER_WAVE ], + [ 1, Moves.BARRIER ], [ 1, Moves.TRI_ATTACK ], [ 1, Moves.MIRROR_COAT ], [ 1, Moves.MAGNETIC_FLUX ], @@ -7825,6 +7923,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.LICK ], [ 1, Moves.ROLLOUT ], + [ 1, Moves.WRING_OUT ], [ 6, Moves.REST ], [ 18, Moves.WRAP ], [ 24, Moves.DISABLE ], @@ -7859,6 +7958,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.GROWTH ], [ 1, Moves.STUN_SPORE ], [ 1, Moves.BLOCK ], + [ 1, Moves.CONSTRICT ], [ 12, Moves.MEGA_DRAIN ], [ 16, Moves.VINE_WHIP ], [ 20, Moves.POISON_POWDER ], @@ -7878,6 +7978,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.THUNDER_SHOCK ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.CHARGE ], + [ 1, Moves.ION_DELUGE ], [ 12, Moves.SWIFT ], [ 16, Moves.SHOCK_WAVE ], [ 20, Moves.THUNDER_WAVE ], @@ -8024,6 +8125,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.FLAIL ], [ 1, Moves.POWDER_SNOW ], [ 1, Moves.MUD_SLAP ], + [ 1, Moves.ODOR_SLEUTH ], [ 1, Moves.ANCIENT_POWER ], [ 1, Moves.ICE_FANG ], [ 15, Moves.ICE_SHARD ], @@ -8147,6 +8249,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CRUNCH ], [ 1, Moves.ASTONISH ], [ 1, Moves.ICE_FANG ], + [ 1, Moves.OMINOUS_WIND ], [ 15, Moves.ICE_SHARD ], [ 20, Moves.DRAINING_KISS ], [ 25, Moves.ICY_WIND ], @@ -8269,6 +8372,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.REGIGIGAS]: [ [ 1, Moves.POUND ], [ 1, Moves.CONFUSE_RAY ], + [ 1, Moves.DIZZY_PUNCH ], + [ 1, Moves.FORESIGHT ], [ 6, Moves.PAYBACK ], [ 12, Moves.REVENGE ], [ 18, Moves.STOMP ], @@ -8346,6 +8451,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.DARKRAI]: [ [ 1, Moves.DISABLE ], + [ 1, Moves.OMINOUS_WIND ], [ 11, Moves.QUICK_ATTACK ], [ 20, Moves.HYPNOSIS ], [ 29, Moves.SUCKER_PUNCH ], @@ -8374,6 +8480,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.ARCEUS]: [ [ 1, Moves.SEISMIC_TOSS ], [ 1, Moves.COSMIC_POWER ], + [ 1, Moves.PUNISHMENT ], [ 10, Moves.GRAVITY ], [ 20, Moves.EARTH_POWER ], [ 30, Moves.HYPER_VOICE ], @@ -8667,6 +8774,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 40, Moves.PLAY_ROUGH ], ], [Species.LIEPARD]: [ + [ 1, Moves.ASSIST ], [ 1, Moves.SCRATCH ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.GROWL ], @@ -8755,6 +8863,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.MUNNA]: [ [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.STORED_POWER ], + [ 1, Moves.PSYWAVE ], [ 4, Moves.HYPNOSIS ], [ 8, Moves.PSYBEAM ], [ 12, Moves.IMPRISON ], @@ -8774,6 +8883,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.PSYCHIC ], [ 1, Moves.HYPNOSIS ], [ 1, Moves.DEFENSE_CURL ], + [ 1, Moves.LUCKY_CHANT ], [ 1, Moves.DREAM_EATER ], [ 1, Moves.MOONLIGHT ], [ 1, Moves.FUTURE_SIGHT ], @@ -8851,6 +8961,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.THUNDER_WAVE ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.CHARGE ], + [ 1, Moves.ION_DELUGE ], [ 11, Moves.SHOCK_WAVE ], [ 18, Moves.FLAME_CHARGE ], [ 25, Moves.SPARK ], @@ -8940,6 +9051,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.DRILBUR]: [ [ 1, Moves.MUD_SLAP ], [ 1, Moves.RAPID_SPIN ], + [ 1, Moves.MUD_SPORT ], [ 4, Moves.SCRATCH ], [ 8, Moves.HONE_CLAWS ], [ 12, Moves.FURY_SWIPES ], @@ -8958,6 +9070,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SCRATCH ], [ 1, Moves.MUD_SLAP ], [ 1, Moves.RAPID_SPIN ], + [ 1, Moves.MUD_SPORT ], + [ 1, Moves.ROTOTILLER ], [ 1, Moves.HONE_CLAWS ], [ 12, Moves.FURY_SWIPES ], [ 16, Moves.METAL_CLAW ], @@ -9010,6 +9124,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LEER ], [ 1, Moves.LOW_KICK ], [ 1, Moves.ROCK_THROW ], + [ 1, Moves.BIDE ], [ 12, Moves.FOCUS_ENERGY ], [ 16, Moves.BULK_UP ], [ 20, Moves.ROCK_SLIDE ], @@ -9026,6 +9141,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LEER ], [ 1, Moves.LOW_KICK ], [ 1, Moves.ROCK_THROW ], + [ 1, Moves.BIDE ], [ 12, Moves.FOCUS_ENERGY ], [ 16, Moves.BULK_UP ], [ 20, Moves.ROCK_SLIDE ], @@ -9090,6 +9206,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.THROH]: [ [ 1, Moves.BIND ], [ 1, Moves.LEER ], + [ 1, Moves.BIDE ], + [ 1, Moves.MAT_BLOCK ], [ 5, Moves.FOCUS_ENERGY ], [ 10, Moves.CIRCLE_THROW ], [ 15, Moves.WIDE_GUARD ], @@ -9105,6 +9223,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SAWK]: [ [ 1, Moves.LEER ], [ 1, Moves.ROCK_SMASH ], + [ 1, Moves.BIDE ], [ 5, Moves.FOCUS_ENERGY ], [ 10, Moves.DOUBLE_KICK ], [ 15, Moves.QUICK_GUARD ], @@ -9134,6 +9253,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.RAZOR_LEAF ], [ 1, Moves.STRING_SHOT ], [ 1, Moves.BUG_BITE ], + [ 1, Moves.GRASS_WHISTLE ], [ 22, Moves.STRUGGLE_BUG ], [ 29, Moves.ENDURE ], [ 31, Moves.STICKY_WEB ], @@ -9466,6 +9586,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LEER ], [ 1, Moves.LOW_KICK ], [ 1, Moves.PAYBACK ], + [ 1, Moves.FEINT_ATTACK ], [ 12, Moves.SAND_ATTACK ], [ 16, Moves.FACADE ], [ 20, Moves.PROTECT ], @@ -9538,6 +9659,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.TIRTOUGA]: [ [ 1, Moves.WATER_GUN ], [ 1, Moves.WITHDRAW ], + [ 1, Moves.BIDE ], [ 3, Moves.PROTECT ], [ 6, Moves.AQUA_JET ], [ 9, Moves.SMACK_DOWN ], @@ -9559,6 +9681,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.WITHDRAW ], [ 1, Moves.PROTECT ], [ 1, Moves.AQUA_JET ], + [ 1, Moves.BIDE ], [ 9, Moves.SMACK_DOWN ], [ 12, Moves.ANCIENT_POWER ], [ 15, Moves.BITE ], @@ -9674,6 +9797,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TORMENT ], [ 1, Moves.U_TURN ], [ 1, Moves.HONE_CLAWS ], + [ 1, Moves.PURSUIT ], [ 12, Moves.FURY_SWIPES ], [ 20, Moves.TAUNT ], [ 24, Moves.KNOCK_OFF ], @@ -9771,6 +9895,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SOLOSIS]: [ [ 1, Moves.CONFUSION ], [ 1, Moves.PROTECT ], + [ 1, Moves.PSYWAVE ], [ 4, Moves.RECOVER ], [ 8, Moves.ENDEAVOR ], [ 12, Moves.PSYBEAM ], @@ -9789,8 +9914,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.DUOSION]: [ [ 1, Moves.CONFUSION ], [ 1, Moves.RECOVER ], + [ 1, Moves.PSYWAVE ], [ 1, Moves.PROTECT ], [ 1, Moves.ENDEAVOR ], + [ 1, Moves.SNATCH ], [ 12, Moves.PSYBEAM ], [ 16, Moves.CHARM ], [ 20, Moves.PSYSHOCK ], @@ -9810,6 +9937,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.RECOVER ], [ 1, Moves.PROTECT ], [ 1, Moves.ENDEAVOR ], + [ 1, Moves.DIZZY_PUNCH ], + [ 1, Moves.PSYWAVE ], + [ 1, Moves.SNATCH ], [ 12, Moves.PSYBEAM ], [ 16, Moves.CHARM ], [ 20, Moves.PSYSHOCK ], @@ -9908,6 +10038,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.DEERLING]: [ [ 1, Moves.TACKLE ], + [ 1, Moves.CAMOUFLAGE ], [ 4, Moves.GROWL ], [ 7, Moves.SAND_ATTACK ], [ 10, Moves.DOUBLE_KICK ], @@ -9925,6 +10056,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SAND_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], + [ 1, Moves.CAMOUFLAGE ], [ 1, Moves.MEGAHORN ], [ 10, Moves.DOUBLE_KICK ], [ 13, Moves.LEECH_SEED ], @@ -9978,6 +10110,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.FURY_CUTTER ], [ 1, Moves.QUICK_GUARD ], [ 1, Moves.FELL_STINGER ], + [ 1, Moves.TWINEEDLE ], [ 12, Moves.FALSE_SWIPE ], [ 16, Moves.ACID_SPRAY ], [ 20, Moves.HEADBUTT ], @@ -10011,6 +10144,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.GROWTH ], [ 1, Moves.STUN_SPORE ], [ 1, Moves.ASTONISH ], + [ 1, Moves.BIDE ], [ 12, Moves.MEGA_DRAIN ], [ 16, Moves.SYNTHESIS ], [ 20, Moves.CLEAR_SMOG ], @@ -10025,6 +10159,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.FRILLISH]: [ [ 1, Moves.WATER_GUN ], [ 1, Moves.ABSORB ], + [ 1, Moves.WATER_SPORT ], [ 4, Moves.POISON_STING ], [ 8, Moves.NIGHT_SHADE ], [ 12, Moves.WATER_PULSE ], @@ -10041,6 +10176,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.JELLICENT]: [ [ 1, Moves.POISON_STING ], [ 1, Moves.WATER_GUN ], + [ 1, Moves.WATER_SPORT ], + [ 1, Moves.WRING_OUT ], [ 1, Moves.ABSORB ], [ 1, Moves.NIGHT_SHADE ], [ 1, Moves.ACID_ARMOR ], @@ -10058,6 +10195,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.ALOMOMOLA]: [ [ 1, Moves.POUND ], [ 1, Moves.PLAY_NICE ], + [ 1, Moves.WATER_SPORT ], [ 5, Moves.AQUA_RING ], [ 9, Moves.AQUA_JET ], [ 13, Moves.HELPING_HAND ], @@ -10075,6 +10213,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.JOLTIK]: [ [ 1, Moves.ABSORB ], [ 1, Moves.FURY_CUTTER ], + [ 1, Moves.SPIDER_WEB ], [ 4, Moves.ELECTROWEB ], [ 8, Moves.BUG_BITE ], [ 12, Moves.STRING_SHOT ], @@ -10094,6 +10233,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.FURY_CUTTER ], [ 1, Moves.BUG_BITE ], [ 1, Moves.ELECTROWEB ], + [ 1, Moves.SPIDER_WEB ], [ 12, Moves.STRING_SHOT ], [ 16, Moves.THUNDER_WAVE ], [ 20, Moves.ELECTRO_BALL ], @@ -10125,6 +10265,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.PIN_MISSILE ], [ 1, Moves.HARDEN ], [ 1, Moves.METAL_CLAW ], + [ 1, Moves.ROCK_CLIMB ], [ 15, Moves.INGRAIN ], [ 20, Moves.FLASH_CANNON ], [ 25, Moves.IRON_HEAD ], @@ -10197,6 +10338,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.THUNDER_WAVE ], [ 1, Moves.SPARK ], [ 1, Moves.CHARGE_BEAM ], + [ 1, Moves.ION_DELUGE ], [ 9, Moves.BIND ], [ 19, Moves.ACID ], [ 29, Moves.DISCHARGE ], @@ -10239,6 +10381,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.BEHEEYEM]: [ [ 1, Moves.GROWL ], [ 1, Moves.CONFUSION ], + [ 1, Moves.SYNCHRONOISE ], [ 1, Moves.TELEPORT ], [ 1, Moves.IMPRISON ], [ 1, Moves.PSYCHIC_TERRAIN ], @@ -10319,7 +10462,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 21, Moves.SCARY_FACE ], [ 24, Moves.CRUNCH ], [ 27, Moves.DRAGON_DANCE ], - [ 30, Moves.BREAKING_SWIPE ], + [ 30, Moves.DUAL_CHOP ], [ 33, Moves.FOCUS_ENERGY ], [ 36, Moves.DRAGON_PULSE ], [ 39, Moves.SWORDS_DANCE ], @@ -10332,6 +10475,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LEER ], [ 1, Moves.BITE ], [ 1, Moves.FALSE_SWIPE ], + [ 1, Moves.DUAL_CHOP ], [ 9, Moves.ASSURANCE ], [ 12, Moves.TAUNT ], [ 15, Moves.SLASH ], @@ -10352,6 +10496,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LEER ], [ 1, Moves.BITE ], [ 1, Moves.FALSE_SWIPE ], + [ 1, Moves.DUAL_CHOP ], [ 9, Moves.ASSURANCE ], [ 12, Moves.TAUNT ], [ 15, Moves.SLASH ], @@ -10393,6 +10538,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.ENDURE ], [ 1, Moves.CHARM ], [ 1, Moves.AQUA_JET ], + [ 1, Moves.BIDE ], [ 9, Moves.ICY_WIND ], [ 12, Moves.PLAY_NICE ], [ 15, Moves.BRINE ], @@ -10473,6 +10619,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.WATER_GUN ], [ 1, Moves.THUNDER_SHOCK ], [ 1, Moves.MUD_SLAP ], + [ 1, Moves.MUD_SPORT ], [ 5, Moves.ENDURE ], [ 10, Moves.MUD_SHOT ], [ 15, Moves.REVENGE ], @@ -10609,6 +10756,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.BOUFFALANT]: [ [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], + [ 1, Moves.PURSUIT ], [ 5, Moves.FOCUS_ENERGY ], [ 10, Moves.FURY_ATTACK ], [ 15, Moves.REVENGE ], @@ -11049,6 +11197,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.WOOD_HAMMER ], ], [Species.QUILLADIN]: [ + [ 0, Moves.NEEDLE_ARM ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.VINE_WHIP ], @@ -11072,6 +11221,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.ROLLOUT ], [ 1, Moves.HAMMER_ARM ], [ 1, Moves.FEINT ], + [ 1, Moves.NEEDLE_ARM ], [ 11, Moves.BITE ], [ 15, Moves.LEECH_SEED ], [ 19, Moves.PIN_MISSILE ], @@ -11178,6 +11328,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.WATER_GUN ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.HAZE ], + [ 1, Moves.MAT_BLOCK ], [ 1, Moves.ROLE_PLAY ], [ 1, Moves.NIGHT_SLASH ], [ 10, Moves.LICK ], @@ -11213,6 +11364,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LEER ], [ 1, Moves.MUD_SLAP ], [ 1, Moves.LASER_FOCUS ], + [ 1, Moves.ROTOTILLER ], [ 9, Moves.QUICK_ATTACK ], [ 12, Moves.MUD_SHOT ], [ 15, Moves.FLAIL ], @@ -11290,6 +11442,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.STUN_SPORE ], [ 1, Moves.SLEEP_POWDER ], [ 1, Moves.STRUGGLE_BUG ], + [ 1, Moves.POWDER ], [ 12, Moves.LIGHT_SCREEN ], [ 17, Moves.PSYBEAM ], [ 21, Moves.SUPERSONIC ], @@ -11372,6 +11525,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SAFEGUARD ], [ 1, Moves.SYNTHESIS ], [ 1, Moves.WISH ], + [ 1, Moves.LUCKY_CHANT ], [ 1, Moves.MAGICAL_LEAF ], [ 1, Moves.GRASS_KNOT ], [ 1, Moves.PETAL_BLIZZARD ], @@ -11533,6 +11687,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.AEGISLASH]: [ [ 0, Moves.KINGS_SHIELD ], [ 1, Moves.SWORDS_DANCE ], + [ 1, Moves.PURSUIT ], [ 1, Moves.TACKLE ], [ 1, Moves.SLASH ], [ 1, Moves.FURY_CUTTER ], @@ -11622,6 +11777,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.INKAY]: [ [ 1, Moves.TACKLE ], [ 1, Moves.PECK ], + [ 1, Moves.CONSTRICT ], [ 3, Moves.HYPNOSIS ], [ 6, Moves.WRAP ], [ 9, Moves.PAYBACK ], @@ -11640,6 +11796,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.WRAP ], [ 1, Moves.PECK ], + [ 1, Moves.CONSTRICT ], [ 1, Moves.HYPNOSIS ], [ 1, Moves.REVERSAL ], [ 9, Moves.PAYBACK ], @@ -11706,6 +11863,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.ACID ], [ 1, Moves.WATER_GUN ], [ 1, Moves.SMOKESCREEN ], + [ 1, Moves.FEINT_ATTACK ], [ 15, Moves.TAIL_WHIP ], [ 20, Moves.DOUBLE_TEAM ], [ 25, Moves.POISON_TAIL ], @@ -11766,6 +11924,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.HELIOLISK]: [ [ 1, Moves.POUND ], [ 1, Moves.TAIL_WHIP ], + [ 1, Moves.RAZOR_WIND ], [ 1, Moves.THUNDER_SHOCK ], [ 1, Moves.THUNDERBOLT ], [ 1, Moves.THUNDER_WAVE ], @@ -12161,6 +12320,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.YVELTAL]: [ [ 1, Moves.GUST ], [ 1, Moves.DOUBLE_TEAM ], + [ 1, Moves.RAZOR_WIND ], [ 5, Moves.TAUNT ], [ 10, Moves.SNARL ], [ 15, Moves.DISABLE ], @@ -12479,6 +12639,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.PAYBACK ], + [ 1, Moves.PURSUIT ], [ 13, Moves.WORK_UP ], [ 19, Moves.BITE ], [ 23, Moves.MUD_SLAP ], @@ -12539,6 +12700,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 64, Moves.ZAP_CANNON ], ], [Species.CRABRAWLER]: [ + [ 1, Moves.BUBBLE ], + [ 1, Moves.VISE_GRIP ], [ 5, Moves.ROCK_SMASH ], [ 9, Moves.LEER ], [ 13, Moves.BUBBLE_BEAM ], @@ -12557,6 +12720,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LEER ], [ 1, Moves.PROTECT ], [ 1, Moves.ROCK_SMASH ], + [ 1, Moves.BUBBLE ], + [ 1, Moves.PURSUIT ], [ 17, Moves.BUBBLE_BEAM ], [ 22, Moves.BRICK_BREAK ], [ 25, Moves.SLAM ], @@ -12725,6 +12890,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.DEWPIDER]: [ [ 1, Moves.WATER_GUN ], [ 1, Moves.INFESTATION ], + [ 1, Moves.WATER_SPORT ], [ 4, Moves.BUG_BITE ], [ 8, Moves.BITE ], [ 12, Moves.BUBBLE_BEAM ], @@ -12744,6 +12910,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.BUG_BITE ], [ 1, Moves.WIDE_GUARD ], [ 1, Moves.INFESTATION ], + [ 1, Moves.SPIDER_WEB ], [ 12, Moves.BUBBLE_BEAM ], [ 16, Moves.AQUA_RING ], [ 20, Moves.HEADBUTT ], @@ -12777,6 +12944,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.INGRAIN ], [ 1, Moves.NIGHT_SLASH ], [ 1, Moves.LEAFAGE ], + [ 1, Moves.DUAL_CHOP ], [ 15, Moves.RAZOR_LEAF ], [ 20, Moves.SWEET_SCENT ], [ 25, Moves.SLASH ], @@ -12806,6 +12974,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CONFUSE_RAY ], [ 1, Moves.INGRAIN ], [ 1, Moves.ASTONISH ], + [ 1, Moves.FLASH ], [ 12, Moves.MEGA_DRAIN ], [ 16, Moves.SLEEP_POWDER ], [ 20, Moves.MOONLIGHT ], @@ -12844,6 +13013,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TORMENT ], [ 1, Moves.KNOCK_OFF ], [ 1, Moves.ENDEAVOR ], + [ 1, Moves.CAPTIVATE ], [ 15, Moves.POISON_FANG ], [ 20, Moves.SWEET_SCENT ], [ 25, Moves.NASTY_PLOT ], @@ -12919,6 +13089,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.RAPID_SPIN ], [ 1, Moves.POWER_WHIP ], [ 1, Moves.PLAY_NICE ], + [ 1, Moves.PUNISHMENT ], [ 16, Moves.SWEET_SCENT ], [ 22, Moves.MAGICAL_LEAF ], [ 28, Moves.STOMP ], @@ -13037,6 +13208,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.PYUKUMUKU]: [ [ 1, Moves.HARDEN ], [ 1, Moves.BATON_PASS ], + [ 1, Moves.BIDE ], + [ 1, Moves.MUD_SPORT ], + [ 1, Moves.WATER_SPORT ], [ 5, Moves.HELPING_HAND ], [ 10, Moves.TAUNT ], [ 15, Moves.SAFEGUARD ], @@ -13238,10 +13412,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.OUTRAGE ], ], [Species.HAKAMO_O]: [ + [ 0, Moves.SKY_UPPERCUT ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.PROTECT ], [ 1, Moves.DRAGON_TAIL ], + [ 1, Moves.BIDE ], [ 12, Moves.SCARY_FACE ], [ 16, Moves.HEADBUTT ], [ 20, Moves.WORK_UP ], @@ -13259,6 +13435,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LEER ], [ 1, Moves.PROTECT ], [ 1, Moves.DRAGON_TAIL ], + [ 1, Moves.BIDE ], + [ 1, Moves.SKY_UPPERCUT ], [ 12, Moves.SCARY_FACE ], [ 16, Moves.HEADBUTT ], [ 20, Moves.WORK_UP ], @@ -13363,6 +13541,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.METAL_CLAW ], [ 1, Moves.COSMIC_POWER ], [ 1, Moves.NOBLE_ROAR ], + [ 1, Moves.WAKE_UP_SLAP ], [ 7, Moves.IRON_HEAD ], [ 14, Moves.METAL_SOUND ], [ 21, Moves.ZEN_HEADBUTT ], @@ -13398,6 +13577,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.NIHILEGO]: [ [ 1, Moves.POUND ], [ 1, Moves.WRAP ], + [ 1, Moves.CONSTRICT ], [ 5, Moves.ACID ], [ 10, Moves.TICKLE ], [ 15, Moves.ACID_SPRAY ], @@ -13530,6 +13710,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.MOONLIGHT ], [ 1, Moves.GRAVITY ], [ 1, Moves.CHARGE_BEAM ], + [ 1, Moves.MIRROR_SHOT ], [ 8, Moves.STEALTH_ROCK ], [ 16, Moves.SLASH ], [ 24, Moves.NIGHT_SLASH ], @@ -13569,6 +13750,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.FEINT ], [ 1, Moves.COPYCAT ], [ 1, Moves.SHADOW_SNEAK ], + [ 1, Moves.PURSUIT ], [ 9, Moves.ROLE_PLAY ], [ 18, Moves.SHADOW_PUNCH ], [ 27, Moves.FORCE_PALM ], @@ -17333,6 +17515,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.METAL_BURST ], [ 1, Moves.IRON_HEAD ], [ 1, Moves.SNOWSCAPE ], + [ 1, Moves.ICE_BALL ], ], [Species.ALOLA_VULPIX]: [ [ 1, Moves.TAIL_WHIP ], @@ -17393,6 +17576,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.METAL_CLAW ], [ 1, Moves.ASTONISH ], [ 1, Moves.NIGHT_SLASH ], + [ 1, Moves.ROTOTILLER ], [ 12, Moves.MUD_SLAP ], [ 16, Moves.BULLDOZE ], [ 20, Moves.SUCKER_PUNCH ], @@ -17528,6 +17712,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.ALOLA_EXEGGUTOR]: [ [ 0, Moves.DRAGON_HAMMER ], + [ 1, Moves.BARRAGE ], [ 1, Moves.SEED_BOMB ], [ 1, Moves.PSYSHOCK ], [ 1, Moves.WOOD_HAMMER ], @@ -17549,6 +17734,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.ALOLA_MAROWAK]: [ [ 0, Moves.SHADOW_BONE ], + [ 1, Moves.BONE_CLUB ], [ 1, Moves.HEADBUTT ], [ 1, Moves.DOUBLE_EDGE ], [ 1, Moves.TAIL_WHIP ], diff --git a/src/field/damage-number-handler.ts b/src/field/damage-number-handler.ts index f4a3d570e19..262ff8863d0 100644 --- a/src/field/damage-number-handler.ts +++ b/src/field/damage-number-handler.ts @@ -13,7 +13,7 @@ export default class DamageNumberHandler { add(target: Pokemon, amount: integer, result: DamageResult | HitResult.HEAL = HitResult.EFFECTIVE, critical: boolean = false): void { const scene = target.scene; - if (!scene.damageNumbersMode) + if (!scene?.damageNumbersMode) return; const battlerIndex = target.getBattlerIndex(); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 807be3f8d9d..fd1613df1c7 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4,7 +4,7 @@ import { Variant, VariantSet, variantColorCache } from '#app/data/variant'; import { variantData } from '#app/data/variant'; 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, CounterDamageAttr, StatChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr } from "../data/move"; +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, CounterDamageAttr, StatChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr } from "../data/move"; import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from '../data/pokemon-species'; import * as Utils from '../utils'; import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from '../data/type'; @@ -27,7 +27,7 @@ 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 { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, FieldVariableMovePowerAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, MoveTypeChangeAttr, NonSuperEffectiveImmunityAbAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, VariableMoveTypeAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPostDefendAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr } from '../data/ability'; +import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, FieldVariableMovePowerAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, MoveTypeChangeAttr, NonSuperEffectiveImmunityAbAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, VariableMoveTypeAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPostDefendAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr } from '../data/ability'; import { Abilities } from "#app/data/enums/abilities"; import PokemonData from '../system/pokemon-data'; import Battle, { BattlerIndex } from '../battle'; @@ -1225,24 +1225,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - if (this.level >= 25) { // No egg moves below level 25 + if (this.level >= 60) { // No egg moves below level 60 for (let i = 0; i < 3; i++) { const moveId = speciesEggMoves[this.species.getRootSpeciesId()][i]; if (!movePool.some(m => m[0] === moveId) && !allMoves[moveId].name.endsWith(' (N)')) movePool.push([moveId, Math.min(this.level * 0.5, 40)]); } - const moveId = speciesEggMoves[this.species.getRootSpeciesId()][3]; - if (this.level >= 60 && !movePool.some(m => m[0] === moveId) && !allMoves[moveId].name.endsWith(' (N)')) // No rare egg moves before level 60 - movePool.push([moveId, Math.min(this.level * 0.2, 20)]); if (this.fusionSpecies) { for (let i = 0; i < 3; i++) { const moveId = speciesEggMoves[this.fusionSpecies.getRootSpeciesId()][i]; if (!movePool.some(m => m[0] === moveId) && !allMoves[moveId].name.endsWith(' (N)')) movePool.push([moveId, Math.min(this.level * 0.5, 30)]); } - const moveId = speciesEggMoves[this.fusionSpecies.getRootSpeciesId()][3]; - if (this.level >= 60 && !movePool.some(m => m[0] === moveId) && !allMoves[moveId].name.endsWith(' (N)')) // No rare egg moves before level 60 - movePool.push([moveId, Math.min(this.level * 0.2, 20)]); } } } @@ -1540,11 +1534,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!isTypeImmune) { damage.value = Math.ceil(((((2 * source.level / 5 + 2) * power.value * sourceAtk.value / targetDef.value) / 50) + 2) * stabMultiplier.value * typeMultiplier.value * arenaAttackTypeMultiplier.value * screenMultiplier.value * ((this.scene.randBattleSeedInt(15) + 85) / 100) * criticalMultiplier.value); if (isPhysical && source.status && source.status.effect === StatusEffect.BURN) { - const burnDamageReductionCancelled = new Utils.BooleanHolder(false); - applyAbAttrs(BypassBurnDamageReductionAbAttr, source, burnDamageReductionCancelled); - if (!burnDamageReductionCancelled.value) - damage.value = Math.floor(damage.value / 2); + if(!move.getAttrs(BypassBurnDamageReductionAttr).length) { + const burnDamageReductionCancelled = new Utils.BooleanHolder(false); + applyAbAttrs(BypassBurnDamageReductionAbAttr, source, burnDamageReductionCancelled); + if (!burnDamageReductionCancelled.value) + damage.value = Math.floor(damage.value / 2); + } } + + applyPreAttackAbAttrs(DamageBoostAbAttr, source, this, battlerMove, damage); + move.getAttrs(HitsTagAttr).map(hta => hta as HitsTagAttr).filter(hta => hta.doubleDamage).forEach(hta => { if (this.getTag(hta.tagType)) damage.value *= 2; diff --git a/src/locales/de/ability-trigger.ts b/src/locales/de/ability-trigger.ts new file mode 100644 index 00000000000..88900741218 --- /dev/null +++ b/src/locales/de/ability-trigger.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const abilityTriggers: SimpleTranslationEntries = { + 'blockRecoilDamage' : `{{pokemonName}}'s {{abilityName}}\nprotected it from recoil!`, +} as const; \ No newline at end of file diff --git a/src/locales/de/config.ts b/src/locales/de/config.ts index 2cc7a52c8f1..a9f4cd68297 100644 --- a/src/locales/de/config.ts +++ b/src/locales/de/config.ts @@ -1,4 +1,5 @@ import { ability } from "./ability"; +import { abilityTriggers } from "./ability-trigger"; import { battle } from "./battle"; import { commandUiHandler } from "./command-ui-handler"; import { fightUiHandler } from "./fight-ui-handler"; @@ -16,6 +17,7 @@ import { tutorial } from "./tutorial"; export const deConfig = { ability: ability, + abilityTriggers: abilityTriggers, battle: battle, commandUiHandler: commandUiHandler, fightUiHandler: fightUiHandler, diff --git a/src/locales/de/move.ts b/src/locales/de/move.ts index 1880253b838..a7750942e93 100644 --- a/src/locales/de/move.ts +++ b/src/locales/de/move.ts @@ -2915,7 +2915,7 @@ export const move: MoveTranslationEntries = { }, "zippyZap": { name: "Britzelturbo", - effect: "Ein stürmischer Blitz-Angriff mit hoher Erstschlag- und Volltrefferquote." + effect: "The user attacks the target with bursts of electricity at high speed. This move always goes first and raises the user's evasiveness." }, "splishySplash": { name: "Plätschersurfer", diff --git a/src/locales/de/starter-select-ui-handler.ts b/src/locales/de/starter-select-ui-handler.ts index a982f30d84a..2e733c1a0ed 100644 --- a/src/locales/de/starter-select-ui-handler.ts +++ b/src/locales/de/starter-select-ui-handler.ts @@ -28,5 +28,8 @@ export const starterSelectUiHandler: SimpleTranslationEntries = { "cycleNature": "N: Wesen Ändern", "cycleVariant": "V: Seltenheit ändern", "enablePassive": "Passiv-Skill aktivieren", - "disablePassive": "Passiv-Skill deaktivieren" + "disablePassive": "Passiv-Skill deaktivieren", + "locked": "Gesperrt", + "disabled": "Deaktiviert", + "uncaught": "Uncaught" } \ No newline at end of file diff --git a/src/locales/en/ability-trigger.ts b/src/locales/en/ability-trigger.ts new file mode 100644 index 00000000000..88900741218 --- /dev/null +++ b/src/locales/en/ability-trigger.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const abilityTriggers: SimpleTranslationEntries = { + 'blockRecoilDamage' : `{{pokemonName}}'s {{abilityName}}\nprotected it from recoil!`, +} as const; \ No newline at end of file diff --git a/src/locales/en/config.ts b/src/locales/en/config.ts index 029791a701c..f5e8a68b09c 100644 --- a/src/locales/en/config.ts +++ b/src/locales/en/config.ts @@ -1,4 +1,5 @@ import { ability } from "./ability"; +import { abilityTriggers } from "./ability-trigger"; import { battle } from "./battle"; import { commandUiHandler } from "./command-ui-handler"; import { fightUiHandler } from "./fight-ui-handler"; @@ -14,8 +15,9 @@ import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { tutorial } from "./tutorial"; -export const enConfig = { +export const enConfig = { ability: ability, + abilityTriggers: abilityTriggers, battle: battle, commandUiHandler: commandUiHandler, fightUiHandler: fightUiHandler, diff --git a/src/locales/en/move.ts b/src/locales/en/move.ts index f0c1c623a05..11f92dda5a6 100644 --- a/src/locales/en/move.ts +++ b/src/locales/en/move.ts @@ -2915,7 +2915,7 @@ export const move: MoveTranslationEntries = { }, "zippyZap": { name: "Zippy Zap", - effect: "The user attacks the target with bursts of electricity at high speed. This move always goes first and results in a critical hit." + effect: "The user attacks the target with bursts of electricity at high speed. This move always goes first and raises the user's evasiveness." }, "splishySplash": { name: "Splishy Splash", diff --git a/src/locales/en/starter-select-ui-handler.ts b/src/locales/en/starter-select-ui-handler.ts index c7595cb2f95..2acceab69ff 100644 --- a/src/locales/en/starter-select-ui-handler.ts +++ b/src/locales/en/starter-select-ui-handler.ts @@ -28,5 +28,8 @@ export const starterSelectUiHandler: SimpleTranslationEntries = { "cycleNature": 'N: Cycle Nature', "cycleVariant": 'V: Cycle Variant', "enablePassive": "Enable Passive", - "disablePassive": "Disable Passive" + "disablePassive": "Disable Passive", + "locked": "Locked", + "disabled": "Disabled", + "uncaught": "Uncaught" } \ No newline at end of file diff --git a/src/locales/es/ability-trigger.ts b/src/locales/es/ability-trigger.ts new file mode 100644 index 00000000000..88900741218 --- /dev/null +++ b/src/locales/es/ability-trigger.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const abilityTriggers: SimpleTranslationEntries = { + 'blockRecoilDamage' : `{{pokemonName}}'s {{abilityName}}\nprotected it from recoil!`, +} as const; \ No newline at end of file diff --git a/src/locales/es/config.ts b/src/locales/es/config.ts index 564b8dd320d..c56a8d384c2 100644 --- a/src/locales/es/config.ts +++ b/src/locales/es/config.ts @@ -1,4 +1,5 @@ import { ability } from "./ability"; +import { abilityTriggers } from "./ability-trigger"; import { battle } from "./battle"; import { commandUiHandler } from "./command-ui-handler"; import { fightUiHandler } from "./fight-ui-handler"; @@ -16,6 +17,7 @@ import { tutorial } from "./tutorial"; export const esConfig = { ability: ability, + abilityTriggers: abilityTriggers, battle: battle, commandUiHandler: commandUiHandler, fightUiHandler: fightUiHandler, diff --git a/src/locales/es/move.ts b/src/locales/es/move.ts index 08aea3b456f..026e67b797f 100644 --- a/src/locales/es/move.ts +++ b/src/locales/es/move.ts @@ -2915,7 +2915,7 @@ export const move: MoveTranslationEntries = { }, zippyZap: { name: "Pikaturbo", - effect: "Ataque eléctrico a la velocidad del rayo. Este movimiento tiene prioridad alta y propina golpes críticos.", + effect: "The user attacks the target with bursts of electricity at high speed. This move always goes first and raises the user's evasiveness.", }, splishySplash: { name: "Salpikasurf", diff --git a/src/locales/es/starter-select-ui-handler.ts b/src/locales/es/starter-select-ui-handler.ts index 629e2563260..9b037209819 100644 --- a/src/locales/es/starter-select-ui-handler.ts +++ b/src/locales/es/starter-select-ui-handler.ts @@ -28,5 +28,8 @@ export const starterSelectUiHandler: SimpleTranslationEntries = { "cycleNature": 'N: Cambiar Naturaleza', "cycleVariant": 'V: Cambiar Variante', "enablePassive": "Activar Pasiva", - "disablePassive": "Desactivar Pasiva" + "disablePassive": "Desactivar Pasiva", + "locked": "Locked", + "disabled": "Disabled", + "uncaught": "Uncaught" } \ No newline at end of file diff --git a/src/locales/fr/ability-trigger.ts b/src/locales/fr/ability-trigger.ts new file mode 100644 index 00000000000..f668ee5e8ab --- /dev/null +++ b/src/locales/fr/ability-trigger.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const abilityTriggers: SimpleTranslationEntries = { + 'blockRecoilDamage' : `{{abilityName}}\nde {{pokemonName}} le protège du contrecoup !`, +} as const; diff --git a/src/locales/fr/config.ts b/src/locales/fr/config.ts index 90f9fb83c53..89669aceb73 100644 --- a/src/locales/fr/config.ts +++ b/src/locales/fr/config.ts @@ -1,4 +1,5 @@ import { ability } from "./ability"; +import { abilityTriggers } from "./ability-trigger"; import { battle } from "./battle"; import { commandUiHandler } from "./command-ui-handler"; import { fightUiHandler } from "./fight-ui-handler"; @@ -16,6 +17,7 @@ import { tutorial } from "./tutorial"; export const frConfig = { ability: ability, + abilityTriggers: abilityTriggers, battle: battle, commandUiHandler: commandUiHandler, fightUiHandler: fightUiHandler, diff --git a/src/locales/fr/move.ts b/src/locales/fr/move.ts index 2139f96d9a0..e4d7f5e03fa 100644 --- a/src/locales/fr/move.ts +++ b/src/locales/fr/move.ts @@ -2915,7 +2915,7 @@ export const move: MoveTranslationEntries = { }, "zippyZap": { name: "Pika-Sprint", - effect: "Une attaque électrique rapide comme l’éclair qui inflige un coup critique à coup sûr. Frappe en priorité." + effect: "Une attaque électrique rapide comme l’éclair qui auguemente l’esquive. Frappe en priorité." }, "splishySplash": { name: "Pika-Splash", diff --git a/src/locales/fr/starter-select-ui-handler.ts b/src/locales/fr/starter-select-ui-handler.ts index 77a79387ac6..d26fa3314b6 100644 --- a/src/locales/fr/starter-select-ui-handler.ts +++ b/src/locales/fr/starter-select-ui-handler.ts @@ -28,5 +28,8 @@ export const starterSelectUiHandler: SimpleTranslationEntries = { "cycleNature": "N: » Natures", "cycleVariant": "V: » Variants", "enablePassive": "Activer Passif", - "disablePassive": "Désactiver Passif" + "disablePassive": "Désactiver Passif", + "locked": "Verrouillé", + "disabled": "Désactivé", + "uncaught": "Uncaught" } diff --git a/src/locales/it/ability-trigger.ts b/src/locales/it/ability-trigger.ts new file mode 100644 index 00000000000..88900741218 --- /dev/null +++ b/src/locales/it/ability-trigger.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const abilityTriggers: SimpleTranslationEntries = { + 'blockRecoilDamage' : `{{pokemonName}}'s {{abilityName}}\nprotected it from recoil!`, +} as const; \ No newline at end of file diff --git a/src/locales/it/config.ts b/src/locales/it/config.ts index bbfd452dc39..6ba9aa3affa 100644 --- a/src/locales/it/config.ts +++ b/src/locales/it/config.ts @@ -1,4 +1,5 @@ import { ability } from "./ability"; +import { abilityTriggers } from "./ability-trigger"; import { battle } from "./battle"; import { commandUiHandler } from "./command-ui-handler"; import { fightUiHandler } from "./fight-ui-handler"; @@ -16,6 +17,7 @@ import { tutorial } from "./tutorial"; export const itConfig = { ability: ability, + abilityTriggers: abilityTriggers, battle: battle, commandUiHandler: commandUiHandler, fightUiHandler: fightUiHandler, diff --git a/src/locales/it/move.ts b/src/locales/it/move.ts index 116a14b5d90..85babbfd36b 100644 --- a/src/locales/it/move.ts +++ b/src/locales/it/move.ts @@ -2915,7 +2915,7 @@ export const move: MoveTranslationEntries = { }, zippyZap: { name: "Sprintaboom", - effect: "Un attacco elettrico ad altissima velocità. Questa mossa ha priorità alta e infligge sicuramente un brutto colpo.", + effect: "The user attacks the target with bursts of electricity at high speed. This move always goes first and raises the user's evasiveness.", }, splishySplash: { name: "Surfasplash", diff --git a/src/locales/it/starter-select-ui-handler.ts b/src/locales/it/starter-select-ui-handler.ts index 1a442ffe9d9..79c2e26c642 100644 --- a/src/locales/it/starter-select-ui-handler.ts +++ b/src/locales/it/starter-select-ui-handler.ts @@ -28,5 +28,8 @@ export const starterSelectUiHandler: SimpleTranslationEntries = { "cycleNature": 'N: Alterna Natura', "cycleVariant": 'V: Alterna Variante', "enablePassive": "Attiva Passiva", - "disablePassive": "Disattiva Passiva" + "disablePassive": "Disattiva Passiva", + "locked": "Locked", + "disabled": "Disabled", + "uncaught": "Uncaught" } \ No newline at end of file diff --git a/src/locales/pt_BR/battle.ts b/src/locales/pt_BR/battle.ts index 6891e3b2e9a..ed579845cd7 100644 --- a/src/locales/pt_BR/battle.ts +++ b/src/locales/pt_BR/battle.ts @@ -9,7 +9,7 @@ export const battle: SimpleTranslationEntries = { "trainerComeBack": "{{trainerName}} retirou {{pokemonName}} da batalha!", "playerGo": "{{pokemonName}}, eu escolho você!", "trainerGo": "{{trainerName}} enviou {{pokemonName}}!", - "switchQuestion": "Quer trocar\n{{pokemonName}}?", + "switchQuestion": "Quer trocar\nde {{pokemonName}}?", "trainerDefeated": "Você derrotou\n{{trainerName}}!", "pokemonCaught": "{{pokemonName}} foi capturado!", "pokemon": "Pokémon", diff --git a/src/locales/pt_BR/move.ts b/src/locales/pt_BR/move.ts index 11fa8a240b9..97f24efee37 100644 --- a/src/locales/pt_BR/move.ts +++ b/src/locales/pt_BR/move.ts @@ -2915,7 +2915,7 @@ export const move: MoveTranslationEntries = { }, zippyZap: { name: "Zippy Zap", - effect: "O usuário ataca o alvo com rajadas de eletricidade em alta velocidade. Este movimento sempre ataca primeiro e resulta em um golpe crítico." + effect: "The user attacks the target with bursts of electricity at high speed. This move always goes first and raises the user's evasiveness." }, splishySplash: { name: "Splishy Splash", diff --git a/src/locales/pt_BR/starter-select-ui-handler.ts b/src/locales/pt_BR/starter-select-ui-handler.ts index 2932768b591..ba180c2cfb2 100644 --- a/src/locales/pt_BR/starter-select-ui-handler.ts +++ b/src/locales/pt_BR/starter-select-ui-handler.ts @@ -28,5 +28,8 @@ export const starterSelectUiHandler: SimpleTranslationEntries = { "cycleNature": 'N: Mudar Nature', "cycleVariant": 'V: Mudar Variante', "enablePassive": "Ativar Passiva", - "disablePassive": "Desativar Passiva" + "disablePassive": "Desativar Passiva", + "locked": "Bloqueado", + "disabled": "Desativado", + "uncaught": "Não capturado" } \ No newline at end of file diff --git a/src/locales/pt_BR/tutorial.ts b/src/locales/pt_BR/tutorial.ts index d217cc2cde0..1f79616481f 100644 --- a/src/locales/pt_BR/tutorial.ts +++ b/src/locales/pt_BR/tutorial.ts @@ -1,43 +1,51 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const tutorial: SimpleTranslationEntries = { - "intro": `Bem-vindo ao PokéRogue! Este é um jogo de Pokémon feito por fãs focado em batalha com elementos roguelite. - $Este jogo não é monetizado e não reivindicamos propriedade de Pokémon nem dos ativos protegidos por direitos autorais usados. - $O jogo é um trabalho em andamento, mas totalmente jogável.\nPara relatórios de bugs, use a comunidade no Discord. - $Se o jogo rodar lentamente, certifique-se de que a 'Aceleração de hardware' esteja ativada nas configurações do seu navegador.`, + "intro": `Bem-vindo ao PokéRogue! Este é um jogo Pokémon feito por fãs focado em batalhas com elementos roguelite. + $Este jogo não é monetizado e não reivindicamos propriedade de Pokémon nem dos ativos protegidos + $por direitos autorais usados. + $O jogo é um trabalho em andamento, mas é totalmente jogável. + $Para relatórios de bugs, use a comunidade no Discord. + $Se o jogo estiver rodando lentamente, certifique-se de que a 'Aceleração de hardware' esteja ativada + $nas configurações do seu navegador.`, "accessMenu": `Para acessar o menu, aperte M ou Esc. $O menu contém configurações e diversas funções.`, "menu": `A partir deste menu, você pode acessar as configurações. - $Nas configurações, você pode alterar a velocidade do jogo, o estilo da janela e outras opções. - $Existem também vários outros recursos aqui, então não deixe de conferir todos eles!`, + $Nas configurações, você pode alterar a velocidade do jogo, + $o estilo da janela, entre outras opções. + $Existem também vários outros recursos disponíveis aqui. + $Não deixe de conferir todos eles!`, - "starterSelect": `Nessa tela, você pode selecionar seus iniciais.\nEsses são os Pokémon iniciais da sua equipe. - $Cada inicial tem seu próprio custo. Sua equipe pode ter até \n6 membros contando que o preço não ultrapasse 10. - $Você pode também selecionar o gênero, habilidade, e formas dependendo \ndas variantes que você capturou ou chocou. - $Os IVs da espécie são os melhores de todos que você \njá capturou ou chocou, então tente conseguir vários Pokémon da mesma espécie!`, + "starterSelect": `Aqui você pode escolher seus iniciais.\nEsses serão os primeiro Pokémon da sua equipe. + $Cada inicial tem seu custo. Sua equipe pode ter até 6\nmembros, desde que a soma dos custos não ultrapasse 10. + $Você pode escolher o gênero, a habilidade\ne até a forma do seu inicial. + $Essas opções dependem das variantes dessa\nespécie que você já capturou ou chocou. + $Os IVs de cada inicial são os melhores de todos os Pokémon\ndaquela espécie que você já capturou ou chocou. + $Sempre capture vários Pokémon de várias espécies!`, - "pokerus": `Todo dia, 3 Pokémon iniciais ficam com uma borda roxa. + "pokerus": `Todo dia, 3 Pokémon iniciais ficam com uma borda roxa. $Caso veja um inicial que você possui com uma dessa, tente\nadicioná-lo a sua equipe. Lembre-se de olhar seu sumário!`, - "statChange": `As mudanças de estatísticas se mantém depois do combate\ndesde que o Pokémon não seja trocado. + "statChange": `As mudanças de atributos se mantém após a batalha desde que o Pokémon não seja trocado. $Seus Pokémon voltam a suas Poké Bolas antes de batalhas contra treinadores e de entrar em um novo bioma. - $Também é possível ver as mudanças de estatísticas dos Pokémon em campo mantendo pressionado C ou Shift.`, + $Para ver as mudanças de atributos dos Pokémon em campo, mantena C ou Shift pressionado durante a batalha.`, - "selectItem": `Após cada batalha você pode escolher entre 3 itens aleatórios.\nVocê pode escolher apenas um. - $Esses variam entre consumíveis, itens de segurar, e itens passivos permanentes. - $A maioria dos efeitos de itens não consumíveis serão acumulados de várias maneiras. - $Alguns itens só aparecerão se puderem ser usados, por exemplo, itens de evolução. - $Você também pode transferir itens de segurar entre os Pokémon utilizando a opção de transferir. + "selectItem": `Após cada batalha, você pode escolher entre 3 itens aleatórios. + $Você pode escolher apenas um deles. + $Esses itens variam entre consumíveis, itens de segurar e itens passivos permanentes. + $A maioria dos efeitos de itens não consumíveis podem ser acumulados. + $Alguns itens só aparecerão se puderem ser usados, como os itens de evolução. + $Você também pode transferir itens de segurar entre os Pokémon utilizando a opção "Transfer". $A opção de transferir irá aparecer no canto inferior direito assim que você obter um item de segurar. - $Você pode comprar itens consumíveis com dinheiro, e uma maior variedade ficará disponível conforme você for mais longe. - $Certifique-se de comprá-los antes de escolher seu item aleatório. Ao escolher, a próxima batalha começará.`, + $Você pode comprar itens consumíveis com dinheiro, e sua variedade aumentará conforme você for mais longe. + $Certifique-se de comprá-los antes de escolher seu item aleatório. Ao escolhê-lo, a próxima batalha começará.`, - "eggGacha": `Nesta tela você pode trocar seus vouchers\npor ovos de Pokémon. - $Ovos ficam mais próximos de chocar depois de cada batalha.\nOvos raros demoram mais para chocar. + "eggGacha": `Aqui você pode trocar seus vouchers\npor ovos de Pokémon. + $Ovos ficam mais próximos de chocar após cada batalha.\nOvos mais raros demoram mais para chocar. $Pokémon chocados não serão adicionados a sua equipe,\nmas sim aos seus iniciais. $Pokémon chocados geralmente possuem IVs melhores\nque Pokémon selvagens. $Alguns Pokémon só podem ser obtidos através de seus ovos. - $Há 3 máquinas, cada uma com um bônus diferente,\nentão escolha a que mais lhe convém!`, + $Temos 3 máquinas, cada uma com seu bônus específico,\nentão escolha a que mais lhe convém!`, } as const; \ No newline at end of file diff --git a/src/locales/zh_CN/ability-trigger.ts b/src/locales/zh_CN/ability-trigger.ts new file mode 100644 index 00000000000..88900741218 --- /dev/null +++ b/src/locales/zh_CN/ability-trigger.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const abilityTriggers: SimpleTranslationEntries = { + 'blockRecoilDamage' : `{{pokemonName}}'s {{abilityName}}\nprotected it from recoil!`, +} as const; \ No newline at end of file diff --git a/src/locales/zh_CN/config.ts b/src/locales/zh_CN/config.ts index a8f5f878ba0..496fd983c06 100644 --- a/src/locales/zh_CN/config.ts +++ b/src/locales/zh_CN/config.ts @@ -1,4 +1,5 @@ import { ability } from "./ability"; +import { abilityTriggers } from "./ability-trigger"; import { battle } from "./battle"; import { commandUiHandler } from "./command-ui-handler"; import { fightUiHandler } from "./fight-ui-handler"; @@ -15,6 +16,7 @@ import { nature } from "./nature"; export const zhCnConfig = { ability: ability, + abilityTriggers: abilityTriggers, battle: battle, commandUiHandler: commandUiHandler, fightUiHandler: fightUiHandler, diff --git a/src/locales/zh_CN/move.ts b/src/locales/zh_CN/move.ts index 3c4b8eb6243..1432fde5b7f 100644 --- a/src/locales/zh_CN/move.ts +++ b/src/locales/zh_CN/move.ts @@ -2915,7 +2915,7 @@ export const move: MoveTranslationEntries = { }, "zippyZap": { name: "电电加速", - effect: "迅猛无比的电击。必定能够\n先制攻击,击中对方的要害", + effect: "The user attacks the target with bursts of electricity at high speed. This move always goes first and raises the user's evasiveness.", }, "splishySplash": { name: "滔滔冲浪", diff --git a/src/locales/zh_CN/starter-select-ui-handler.ts b/src/locales/zh_CN/starter-select-ui-handler.ts index 9d3a076e55d..ace02c1c227 100644 --- a/src/locales/zh_CN/starter-select-ui-handler.ts +++ b/src/locales/zh_CN/starter-select-ui-handler.ts @@ -28,5 +28,8 @@ export const starterSelectUiHandler: SimpleTranslationEntries = { "cycleNature": 'N: 切换性格', "cycleVariant": 'V: 切换变种', "enablePassive": "启用被动", - "disablePassive": "禁用被动" + "disablePassive": "禁用被动", + "locked": "Locked", + "disabled": "Disabled", + "uncaught": "Uncaught" } \ No newline at end of file diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 2457a705bce..6b336523014 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -554,10 +554,10 @@ export class EvolutionItemModifierType extends PokemonModifierType implements Ge super(Utils.toReadableString(EvolutionItem[evolutionItem]), `Causes certain Pokémon to evolve`, (_type, args) => new Modifiers.EvolutionItemModifier(this, (args[0] as PlayerPokemon).id), (pokemon: PlayerPokemon) => { if (pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) && pokemonEvolutions[pokemon.species.speciesId].filter(e => e.item === this.evolutionItem - && (!e.condition || e.condition.predicate(pokemon))).length) + && (!e.condition || e.condition.predicate(pokemon))).length && (pokemon.formIndex == 0)) return null; else if (pokemon.isFusion() && pokemonEvolutions.hasOwnProperty(pokemon.fusionSpecies.speciesId) && pokemonEvolutions[pokemon.fusionSpecies.speciesId].filter(e => e.item === this.evolutionItem - && (!e.condition || e.condition.predicate(pokemon))).length) + && (!e.condition || e.condition.predicate(pokemon))).length && (pokemon.fusionFormIndex == 0)) return null; return PartyUiHandler.NoEffectMessage; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index ba009cb7a8d..8a5fba17d1c 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -635,6 +635,9 @@ export class PokemonBaseStatModifier extends PokemonHeldItemModifier { } } + /** + * Applies Specific Type item boosts (e.g., Magnet) + */ export class AttackTypeBoosterModifier extends PokemonHeldItemModifier { private moveType: Type; private boostMultiplier: number; @@ -667,8 +670,15 @@ export class AttackTypeBoosterModifier extends PokemonHeldItemModifier { return super.shouldApply(args) && args.length === 3 && typeof args[1] === 'number' && args[2] instanceof Utils.NumberHolder; } + /** + * @param {Array} args Array + * - Index 0: {Pokemon} Pokemon + * - Index 1: {number} Move type + * - Index 2: {Utils.NumberHolder} Move power + * @returns {boolean} Returns true if boosts have been applied to the move. + */ apply(args: any[]): boolean { - if (args[1] === this.moveType) { + if (args[1] === this.moveType && (args[2] as Utils.NumberHolder).value >= 1) { (args[2] as Utils.NumberHolder).value = Math.floor((args[2] as Utils.NumberHolder).value * (1 + (this.getStackCount() * this.boostMultiplier))); return true; } diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 676e691ee29..82a5a51ba12 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -98,7 +98,8 @@ declare module 'i18next' { menu: SimpleTranslationEntries; menuUiHandler: SimpleTranslationEntries; move: MoveTranslationEntries; - battle: SimpleTranslationEntries, + battle: SimpleTranslationEntries; + abilityTriggers: SimpleTranslationEntries; ability: AbilityTranslationEntries; pokeball: SimpleTranslationEntries; pokemon: SimpleTranslationEntries; diff --git a/src/system/settings.ts b/src/system/settings.ts index 5107d00e2de..1b0ebc4c22c 100644 --- a/src/system/settings.ts +++ b/src/system/settings.ts @@ -212,19 +212,20 @@ export function setSetting(scene: BattleScene, setting: Setting, value: integer) label: 'Deutsch', handler: () => changeLocaleHandler('de') }, - { - label: '简体中文', - handler: () => changeLocaleHandler('zh_CN') - }, { label: 'Português (BR)', handler: () => changeLocaleHandler('pt_BR') }, + { + label: '简体中文', + handler: () => changeLocaleHandler('zh_CN') + }, { label: 'Cancel', handler: () => cancelHandler() } - ] + ], + maxOptions: 7 }); return false; } diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 2f33481d6f1..8443ed5741e 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1,34 +1,34 @@ -import BattleScene, { starterColors } from "../battle-scene"; -import PokemonSpecies, { allSpecies, getPokemonSpecies, getPokemonSpeciesForm, speciesStarters, starterPassiveAbilities, getStarterValueFriendshipCap } from "../data/pokemon-species"; -import { Species } from "../data/enums/species"; -import { TextStyle, addBBCodeTextObject, addTextObject } from "./text"; -import { Mode } from "./ui"; -import MessageUiHandler from "./message-ui-handler"; -import { Gender, getGenderColor, getGenderSymbol } from "../data/gender"; -import { allAbilities } from "../data/ability"; -import { GameModes, gameModes } from "../game-mode"; -import { GrowthRate, getGrowthRateColor } from "../data/exp"; -import { AbilityAttr, DexAttr, DexAttrProps, DexEntry, Passive as PassiveAttr, StarterFormMoveData, StarterMoveset } from "../system/game-data"; -import * as Utils from "../utils"; -import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler"; -import { StatsContainer } from "./stats-container"; -import { addWindow } from "./ui-theme"; -import { Nature, getNatureName } from "../data/nature"; -import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; -import { pokemonFormChanges } from "../data/pokemon-forms"; -import { Tutorial, handleTutorial } from "../tutorial"; -import { LevelMoves, pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "../data/pokemon-level-moves"; -import { allMoves } from "../data/move"; -import { Type } from "../data/type"; -import { Moves } from "../data/enums/moves"; -import { speciesEggMoves } from "../data/egg-moves"; -import { TitlePhase } from "../phases"; -import { argbFromRgba } from "@material/material-color-utilities"; -import { OptionSelectItem } from "./abstact-option-select-ui-handler"; import { pokemonPrevolutions } from "#app/data/pokemon-evolutions"; import { Variant, getVariantTint } from "#app/data/variant"; +import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; -import {Button} from "../enums/buttons"; +import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +import BattleScene, { starterColors } from "../battle-scene"; +import { allAbilities } from "../data/ability"; +import { speciesEggMoves } from "../data/egg-moves"; +import { Moves } from "../data/enums/moves"; +import { Species } from "../data/enums/species"; +import { GrowthRate, getGrowthRateColor } from "../data/exp"; +import { Gender, getGenderColor, getGenderSymbol } from "../data/gender"; +import { allMoves } from "../data/move"; +import { Nature, getNatureName } from "../data/nature"; +import { pokemonFormChanges } from "../data/pokemon-forms"; +import { LevelMoves, pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "../data/pokemon-level-moves"; +import PokemonSpecies, { allSpecies, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from "../data/pokemon-species"; +import { Type } from "../data/type"; +import { Button } from "../enums/buttons"; +import { GameModes, gameModes } from "../game-mode"; +import { TitlePhase } from "../phases"; +import { AbilityAttr, DexAttr, DexAttrProps, DexEntry, Passive as PassiveAttr, StarterFormMoveData, StarterMoveset } from "../system/game-data"; +import { Tutorial, handleTutorial } from "../tutorial"; +import * as Utils from "../utils"; +import { OptionSelectItem } from "./abstact-option-select-ui-handler"; +import MessageUiHandler from "./message-ui-handler"; +import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler"; +import { StatsContainer } from "./stats-container"; +import { TextStyle, addBBCodeTextObject, addTextObject } from "./text"; +import { Mode } from "./ui"; +import { addWindow } from "./ui-theme"; export type StarterSelectCallback = (starters: Starter[]) => void; @@ -241,7 +241,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonGenderText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonGenderText); - this.pokemonUncaughtText = addTextObject(this.scene, 6, 127, 'Uncaught', TextStyle.SUMMARY_ALT, { fontSize: '56px' }); + this.pokemonUncaughtText = addTextObject(this.scene, 6, 127, i18next.t("starterSelectUiHandler:uncaught"), TextStyle.SUMMARY_ALT, { fontSize: '56px' }); this.pokemonUncaughtText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonUncaughtText); @@ -357,6 +357,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { icon.setScale(0.5); icon.setOrigin(0, 0); icon.setFrame(species.getIconId(defaultProps.female, defaultProps.formIndex, defaultProps.shiny, defaultProps.variant)); + this.checkIconId(icon, species, defaultProps.female, defaultProps.formIndex, defaultProps.shiny, defaultProps.variant); icon.setTint(0); this.starterSelectGenIconContainers[g].add(icon); this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.NONE); @@ -792,6 +793,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const props = this.scene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor); this.starterIcons[this.starterCursors.length].setTexture(species.getIconAtlasKey(props.formIndex, props.shiny, props.variant)); this.starterIcons[this.starterCursors.length].setFrame(species.getIconId(props.female, props.formIndex, props.shiny, props.variant)); + this.checkIconId(this.starterIcons[this.starterCursors.length], species, props.female, props.formIndex, props.shiny, props.variant); this.starterGens.push(this.getGenCursorWithScroll()); this.starterCursors.push(this.cursor); this.starterAttr.push(this.dexAttrCursor); @@ -1306,6 +1308,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const props = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, dexAttr); const lastSpeciesIcon = (this.starterSelectGenIconContainers[this.lastSpecies.generation - 1].getAt(this.genSpecies[this.lastSpecies.generation - 1].indexOf(this.lastSpecies)) as Phaser.GameObjects.Sprite); lastSpeciesIcon.setTexture(this.lastSpecies.getIconAtlasKey(props.formIndex, props.shiny, props.variant), this.lastSpecies.getIconId(props.female, props.formIndex, props.shiny, props.variant)); + this.checkIconId(lastSpeciesIcon, this.lastSpecies, props.female, props.formIndex, props.shiny, props.variant); this.iconAnimHandler.addOrUpdate(lastSpeciesIcon, PokemonIconAnimMode.NONE); } @@ -1548,12 +1551,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { (this.starterSelectGenIconContainers[this.getGenCursorWithScroll()].getAt(this.cursor) as Phaser.GameObjects.Sprite) .setTexture(species.getIconAtlasKey(formIndex, shiny, variant), species.getIconId(female, formIndex, shiny, variant)); - // Temporary fix to show pokemon's default icon if variant icon doesn't exist - if ((this.starterSelectGenIconContainers[this.getGenCursorWithScroll()].getAt(this.cursor) as Phaser.GameObjects.Sprite).frame.name != species.getIconId(female, formIndex, shiny, variant)) { - console.log(`${species.name}'s variant icon does not exist. Replacing with default.`); - (this.starterSelectGenIconContainers[this.getGenCursorWithScroll()].getAt(this.cursor) as Phaser.GameObjects.Sprite).setTexture(species.getIconAtlasKey(formIndex, false, variant)); - (this.starterSelectGenIconContainers[this.getGenCursorWithScroll()].getAt(this.cursor) as Phaser.GameObjects.Sprite).setFrame(species.getIconId(female, formIndex, false, variant)); - } + this.checkIconId((this.starterSelectGenIconContainers[this.getGenCursorWithScroll()].getAt(this.cursor) as Phaser.GameObjects.Sprite), species, female, formIndex, shiny, variant); this.canCycleShiny = !!(dexEntry.caughtAttr & DexAttr.NON_SHINY && dexEntry.caughtAttr & DexAttr.SHINY); this.canCycleGender = !!(dexEntry.caughtAttr & DexAttr.MALE && dexEntry.caughtAttr & DexAttr.FEMALE); this.canCycleAbility = [ abilityAttr & AbilityAttr.ABILITY_1, (abilityAttr & AbilityAttr.ABILITY_2) && species.ability2, abilityAttr & AbilityAttr.ABILITY_HIDDEN ].filter(a => a).length > 1; @@ -1580,7 +1578,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonAbilityText.setShadowColor(this.getTextColor(!isHidden ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GOLD, true)); const passiveAttr = this.scene.gameData.starterData[species.speciesId].passiveAttr; - this.pokemonPassiveText.setText(passiveAttr & PassiveAttr.UNLOCKED ? passiveAttr & PassiveAttr.ENABLED ? allAbilities[starterPassiveAbilities[this.lastSpecies.speciesId]].name : 'Disabled' : 'Locked'); + this.pokemonPassiveText.setText(passiveAttr & PassiveAttr.UNLOCKED ? passiveAttr & PassiveAttr.ENABLED ? allAbilities[starterPassiveAbilities[this.lastSpecies.speciesId]].name : i18next.t("starterSelectUiHandler:disabled") : i18next.t("starterSelectUiHandler:locked")); this.pokemonPassiveText.setColor(this.getTextColor(passiveAttr === (PassiveAttr.UNLOCKED | PassiveAttr.ENABLED) ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GRAY)); this.pokemonPassiveText.setShadowColor(this.getTextColor(passiveAttr === (PassiveAttr.UNLOCKED | PassiveAttr.ENABLED) ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GRAY, true)); @@ -1827,4 +1825,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (this.statsMode) this.toggleStatsMode(false); } + + checkIconId(icon: Phaser.GameObjects.Sprite, species: PokemonSpecies, female, formIndex, shiny, variant) { + if (icon.frame.name != species.getIconId(female, formIndex, shiny, variant)) { + console.log(`${species.name}'s variant icon does not exist. Replacing with default.`); + icon.setTexture(species.getIconAtlasKey(formIndex, false, variant)); + icon.setFrame(species.getIconId(female, formIndex, false, variant)); + } + } } \ No newline at end of file