diff --git a/package-lock.json b/package-lock.json
index 739ce18496d..453a525581b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "pokemon-rogue-battle",
- "version": "1.7.0",
+ "version": "1.7.6",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "pokemon-rogue-battle",
- "version": "1.7.0",
+ "version": "1.7.6",
"hasInstallScript": true,
"dependencies": {
"@material/material-color-utilities": "^0.2.7",
diff --git a/package.json b/package.json
index 5a191b3ec99..4c9204f60f9 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "pokemon-rogue-battle",
"private": true,
- "version": "1.7.0",
+ "version": "1.7.6",
"type": "module",
"scripts": {
"start": "vite",
diff --git a/public/images/events/pkmnday2025event-de.png b/public/images/events/pkmnday2025event-de.png
new file mode 100644
index 00000000000..4cc53546752
Binary files /dev/null and b/public/images/events/pkmnday2025event-de.png differ
diff --git a/public/images/events/pkmnday2025event-en.png b/public/images/events/pkmnday2025event-en.png
new file mode 100644
index 00000000000..e9caa9e19d6
Binary files /dev/null and b/public/images/events/pkmnday2025event-en.png differ
diff --git a/public/images/events/pkmnday2025event-es-ES.png b/public/images/events/pkmnday2025event-es-ES.png
new file mode 100644
index 00000000000..e1ab096dffc
Binary files /dev/null and b/public/images/events/pkmnday2025event-es-ES.png differ
diff --git a/public/images/events/pkmnday2025event-fr.png b/public/images/events/pkmnday2025event-fr.png
new file mode 100644
index 00000000000..037d1e06e61
Binary files /dev/null and b/public/images/events/pkmnday2025event-fr.png differ
diff --git a/public/images/events/pkmnday2025event-it.png b/public/images/events/pkmnday2025event-it.png
new file mode 100644
index 00000000000..f38a60330fa
Binary files /dev/null and b/public/images/events/pkmnday2025event-it.png differ
diff --git a/public/images/events/pkmnday2025event-ja.png b/public/images/events/pkmnday2025event-ja.png
new file mode 100644
index 00000000000..94b02ad93a0
Binary files /dev/null and b/public/images/events/pkmnday2025event-ja.png differ
diff --git a/public/images/events/pkmnday2025event-ko.png b/public/images/events/pkmnday2025event-ko.png
new file mode 100644
index 00000000000..aed9ee3fb28
Binary files /dev/null and b/public/images/events/pkmnday2025event-ko.png differ
diff --git a/public/images/events/pkmnday2025event-pt-BR.png b/public/images/events/pkmnday2025event-pt-BR.png
new file mode 100644
index 00000000000..2190bbac535
Binary files /dev/null and b/public/images/events/pkmnday2025event-pt-BR.png differ
diff --git a/public/images/events/pkmnday2025event-zh-CN.png b/public/images/events/pkmnday2025event-zh-CN.png
new file mode 100644
index 00000000000..a3430482dd0
Binary files /dev/null and b/public/images/events/pkmnday2025event-zh-CN.png differ
diff --git a/public/images/pokemon/656.png b/public/images/pokemon/656.png
index 6acfe282dca..06a9cd58268 100644
Binary files a/public/images/pokemon/656.png and b/public/images/pokemon/656.png differ
diff --git a/public/images/pokemon/variant/656.json b/public/images/pokemon/variant/656.json
index 68743a4c9f1..5037f86f22a 100644
--- a/public/images/pokemon/variant/656.json
+++ b/public/images/pokemon/variant/656.json
@@ -3,12 +3,12 @@
"838394": "4d7dc5",
"62ace6": "8363af",
"7bcdff": "9c75c2",
- "ffec8c": "ddfff9",
+ "fdea88": "ddfff9",
"a1a1c4": "7ab7ec",
"c9b241": "97d6e2",
- "dfcf77": "bae7e8",
+ "ccbd70": "bae7e8",
"174592": "37408c",
- "fdfdfd": "b1e5ff",
+ "f8f8f8": "b1e5ff",
"9c9cc5": "5385c7",
"cdcde6": "7eb7e8",
"396a83": "362864",
@@ -18,12 +18,12 @@
"838394": "cc6845",
"62ace6": "c44848",
"7bcdff": "dd6155",
- "ffec8c": "ddfff9",
+ "fdea88": "ddfff9",
"a1a1c4": "f7c685",
"c9b241": "97d6e2",
- "dfcf77": "bae7e8",
+ "ccbd70": "bae7e8",
"174592": "198158",
- "fdfdfd": "fff4bd",
+ "f8f8f8": "fff4bd",
"9c9cc5": "c96a48",
"cdcde6": "f7b785",
"396a83": "5c0d33",
diff --git a/public/images/pokemon/variant/back/656.json b/public/images/pokemon/variant/back/656.json
index 34b11bfab78..f41398f3154 100644
--- a/public/images/pokemon/variant/back/656.json
+++ b/public/images/pokemon/variant/back/656.json
@@ -1,17 +1,17 @@
{
"1": {
- "838394": "4d7dc5",
+ "848496": "4d7dc5",
"7bcdff": "9c75c2",
"62ace6": "8363af",
"ffffff": "b1e5ff",
"396a83": "362864",
"9c9cc5": "5385c7",
"cdcde6": "7eb7e8",
- "174592": "198158",
+ "174592": "37408c",
"5a94cd": "7054a4"
},
"2": {
- "838394": "cc6845",
+ "848496": "cc6845",
"7bcdff": "dd6155",
"62ace6": "c44848",
"ffffff": "fff4bd",
diff --git a/public/images/ui/cursor_tera.png b/public/images/ui/cursor_tera.png
new file mode 100644
index 00000000000..34cbe095895
Binary files /dev/null and b/public/images/ui/cursor_tera.png differ
diff --git a/public/images/ui/legacy/cursor_tera.png b/public/images/ui/legacy/cursor_tera.png
new file mode 100644
index 00000000000..f2e77046137
Binary files /dev/null and b/public/images/ui/legacy/cursor_tera.png differ
diff --git a/public/locales b/public/locales
index ef43efffe5f..0e5c6096ba2 160000
--- a/public/locales
+++ b/public/locales
@@ -1 +1 @@
-Subproject commit ef43efffe5fe454862c350f1b9393c3ad755bcc2
+Subproject commit 0e5c6096ba26f6b87aed1aab3fe9b0b23f6cbb7b
diff --git a/src/battle-scene.ts b/src/battle-scene.ts
index 962b9c8ca91..996c3b0de87 100644
--- a/src/battle-scene.ts
+++ b/src/battle-scene.ts
@@ -1865,6 +1865,58 @@ export default class BattleScene extends SceneBase {
this.getCurrentPhase()?.constructor.name ?? "",
);
+ if ( // Give trainers with specialty types an appropriately-typed form for Wormadam, Rotom, Arceus, Oricorio, Silvally, or Paldean Tauros.
+ !isEggPhase &&
+ this.currentBattle?.battleType === BattleType.TRAINER && !isNullOrUndefined(this.currentBattle.trainer) &&
+ this.currentBattle.trainer.config.hasSpecialtyType()
+ ) {
+ if (species.speciesId === Species.WORMADAM) {
+ switch (this.currentBattle.trainer.config.specialtyType) {
+ case Type.GROUND:
+ return 1; // Sandy Cloak
+ case Type.STEEL:
+ return 2; // Trash Cloak
+ case Type.GRASS:
+ return 0; // Plant Cloak
+ }
+ } else if (species.speciesId === Species.ROTOM) {
+ switch (this.currentBattle.trainer.config.specialtyType) {
+ case Type.FLYING:
+ return 4; // Fan Rotom
+ case Type.GHOST:
+ return 0; // Lightbulb Rotom
+ case Type.FIRE:
+ return 1; // Heat Rotom
+ case Type.GRASS:
+ return 5; // Mow Rotom
+ case Type.WATER:
+ return 2; // Wash Rotom
+ case Type.ICE:
+ return 3; // Frost Rotom
+ }
+ } else if (species.speciesId === Species.ORICORIO) {
+ switch (this.currentBattle.trainer.config.specialtyType) {
+ case Type.GHOST:
+ return 3; // Sensu Style
+ case Type.FIRE:
+ return 0; // Baile Style
+ case Type.ELECTRIC:
+ return 1; // Pom-Pom Style
+ case Type.PSYCHIC:
+ return 2; // Pa'u Style
+ }
+ } else if (species.speciesId === Species.PALDEA_TAUROS) {
+ switch (this.currentBattle.trainer.config.specialtyType) {
+ case Type.FIRE:
+ return 1; // Blaze Breed
+ case Type.WATER:
+ return 2; // Aqua Breed
+ }
+ } else if (species.speciesId === Species.SILVALLY || species.speciesId === Species.ARCEUS) { // Would probably never happen, but might as well
+ return this.currentBattle.trainer.config.specialtyType;
+ }
+ }
+
switch (species.speciesId) {
case Species.UNOWN:
case Species.SHELLOS:
@@ -1872,8 +1924,6 @@ export default class BattleScene extends SceneBase {
case Species.BASCULIN:
case Species.DEERLING:
case Species.SAWSBUCK:
- case Species.FROAKIE:
- case Species.FROGADIER:
case Species.SCATTERBUG:
case Species.SPEWPA:
case Species.VIVILLON:
@@ -1907,9 +1957,14 @@ export default class BattleScene extends SceneBase {
return 0; // No Partner Eevee for Wave 12 Preschoolers
}
return Utils.randSeedInt(2);
+ case Species.FROAKIE:
+ case Species.FROGADIER:
case Species.GRENINJA:
- if (this.currentBattle?.battleType === BattleType.TRAINER) {
- return 0; // Don't give trainers Battle Bond Greninja
+ if (
+ this.currentBattle?.battleType === BattleType.TRAINER &&
+ !isEggPhase
+ ) {
+ return 0; // Don't give trainers Battle Bond Greninja, Froakie or Frogadier
}
return Utils.randSeedInt(2);
case Species.URSHIFU:
@@ -3448,8 +3503,6 @@ export default class BattleScene extends SceneBase {
for (const modifier of modifiers) {
this.addEnemyModifier(modifier, true, true);
}
-
- this.currentBattle.trainer.genAI(party);
}
party.forEach((enemyPokemon: EnemyPokemon, i: number) => {
diff --git a/src/data/ability.ts b/src/data/ability.ts
index 8de0c68a8e7..2b73fea60bc 100644
--- a/src/data/ability.ts
+++ b/src/data/ability.ts
@@ -12,7 +12,7 @@ import { getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffect
import { Gender } from "./gender";
import type Move from "./move";
import { AttackMove, MoveCategory, MoveFlags, MoveTarget, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr } from "./move";
-import type { ArenaTrapTag } from "./arena-tag";
+import type { ArenaTrapTag, SuppressAbilitiesTag } from "./arena-tag";
import { ArenaTagSide } from "./arena-tag";
import { BerryModifier, HitHealModifier, PokemonHeldItemModifier } from "../modifier/modifier";
import { TerrainType } from "./terrain";
@@ -2197,6 +2197,34 @@ export class PostSummonRemoveArenaTagAbAttr extends PostSummonAbAttr {
}
}
+/**
+ * Generic class to add an arena tag upon switching in
+ */
+export class PostSummonAddArenaTagAbAttr extends PostSummonAbAttr {
+ private readonly tagType: ArenaTagType;
+ private readonly turnCount: number;
+ private readonly side?: ArenaTagSide;
+ private readonly quiet?: boolean;
+ private sourceId: number;
+
+
+ constructor(tagType: ArenaTagType, turnCount: number, side?: ArenaTagSide, quiet?: boolean) {
+ super(false);
+ this.tagType = tagType;
+ this.turnCount = turnCount;
+ this.side = side;
+ this.quiet = quiet;
+ }
+
+ public override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean {
+ this.sourceId = pokemon.id;
+ if (!simulated) {
+ globalScene.arena.addTag(this.tagType, this.turnCount, undefined, this.sourceId, this.side, this.quiet);
+ }
+ return true;
+ }
+}
+
export class PostSummonMessageAbAttr extends PostSummonAbAttr {
private messageFunc: (pokemon: Pokemon) => string;
@@ -2941,6 +2969,26 @@ export class PreLeaveFieldClearWeatherAbAttr extends PreLeaveFieldAbAttr {
}
}
+/**
+ * Updates the active {@linkcode SuppressAbilitiesTag} when a pokemon with {@linkcode Abilities.NEUTRALIZING_GAS} leaves the field
+ */
+export class PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr extends PreLeaveFieldAbAttr {
+ constructor() {
+ super(false);
+ }
+
+ public override applyPreLeaveField(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean {
+ if (!simulated) {
+ const suppressTag = globalScene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS) as SuppressAbilitiesTag;
+ if (suppressTag) {
+ suppressTag.onSourceLeave(globalScene.arena);
+ return true;
+ }
+ }
+ return simulated;
+ }
+}
+
export class PreStatStageChangeAbAttr extends AbAttr {
applyPreStatStageChange(
pokemon: Pokemon | null,
@@ -4692,21 +4740,6 @@ export class MoveAbilityBypassAbAttr extends AbAttr {
}
}
-export class SuppressFieldAbilitiesAbAttr extends AbAttr {
- constructor() {
- super(false);
- }
-
- apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean {
- const ability = (args[0] as Ability);
- if (!ability.hasAttr(UnsuppressableAbilityAbAttr) && !ability.hasAttr(SuppressFieldAbilitiesAbAttr)) {
- cancelled.value = true;
- return true;
- }
- return false;
- }
-}
-
export class AlwaysHitAbAttr extends AbAttr { }
/** Attribute for abilities that allow moves that make contact to ignore protection (i.e. Unseen Fist) */
@@ -5021,7 +5054,7 @@ export class PreventBypassSpeedChanceAbAttr extends AbAttr {
const turnCommand = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()];
const isCommandFight = turnCommand?.command === Command.FIGHT;
const move = turnCommand?.move?.move ? allMoves[turnCommand.move.move] : null;
- if (this.condition(pokemon, move!) && isCommandFight) {
+ if (isCommandFight && this.condition(pokemon, move!)) {
bypassSpeed.value = false;
canCheckHeldItems.value = false;
return false;
@@ -5119,6 +5152,10 @@ function applySingleAbAttrs
(
showAbilityInstant: boolean = false,
messages: string[] = []
) {
+ if (!pokemon?.canApplyAbility(passive) || (passive && (pokemon.getPassiveAbility().id === pokemon.getAbility().id))) {
+ return;
+ }
+
const ability = passive ? pokemon.getPassiveAbility() : pokemon.getAbility();
if (gainedMidTurn && ability.getAttrs(attrType).some(attr => attr instanceof PostSummonAbAttr && !attr.shouldActivateOnGain())) {
return;
@@ -5412,12 +5449,10 @@ function applyAbAttrsInternal(
gainedMidTurn: boolean = false
) {
for (const passive of [ false, true ]) {
- if (!pokemon?.canApplyAbility(passive) || (passive && (pokemon.getPassiveAbility().id === pokemon.getAbility().id))) {
- continue;
+ if (pokemon) {
+ applySingleAbAttrs(pokemon, passive, attrType, applyFunc, args, gainedMidTurn, simulated, showAbilityInstant, messages);
+ globalScene.clearPhaseQueueSplice();
}
-
- applySingleAbAttrs(pokemon, passive, attrType, applyFunc, args, gainedMidTurn, simulated, showAbilityInstant, messages);
- globalScene.clearPhaseQueueSplice();
}
}
@@ -5946,10 +5981,10 @@ export function applyOnGainAbAttrs(pokemon: Pokemon, passive: boolean = false, s
}
/**
- * Clears primal weather during the turn if {@linkcode pokemon}'s ability corresponds to one
+ * Clears primal weather/neutralizing gas during the turn if {@linkcode pokemon}'s ability corresponds to one
*/
-export function applyOnLoseClearWeatherAbAttrs(pokemon: Pokemon, passive: boolean = false, simulated: boolean = false, ...args: any[]): void {
- applySingleAbAttrs(pokemon, passive, PreLeaveFieldClearWeatherAbAttr, (attr, passive) => attr.applyPreLeaveField(pokemon, passive, simulated, [ ...args, true ]), args, true, simulated);
+export function applyOnLoseAbAttrs(pokemon: Pokemon, passive: boolean = false, simulated: boolean = false, ...args: any[]): void {
+ applySingleAbAttrs(pokemon, passive, PreLeaveFieldAbAttr, (attr, passive) => attr.applyPreLeaveField(pokemon, passive, simulated, [ ...args, true ]), args, true, simulated);
}
function queueShowAbility(pokemon: Pokemon, passive: boolean): void {
globalScene.unshiftPhase(new ShowAbilityPhase(pokemon.id, passive));
@@ -6838,12 +6873,12 @@ export function initAbilities() {
new Ability(Abilities.GORILLA_TACTICS, 8)
.attr(GorillaTacticsAbAttr),
new Ability(Abilities.NEUTRALIZING_GAS, 8)
- .attr(SuppressFieldAbilitiesAbAttr)
+ .attr(PostSummonAddArenaTagAbAttr, ArenaTagType.NEUTRALIZING_GAS, 0)
+ .attr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr)
.attr(UncopiableAbilityAbAttr)
.attr(UnswappableAbilityAbAttr)
.attr(NoTransformAbilityAbAttr)
- .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonNeutralizingGas", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }))
- .partial(), // A bunch of weird interactions with other abilities being suppressed then unsuppressed
+ .bypassFaint(),
new Ability(Abilities.PASTEL_VEIL, 8)
.attr(PostSummonUserFieldRemoveStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC)
.attr(UserFieldStatusEffectImmunityAbAttr, StatusEffect.POISON, StatusEffect.TOXIC)
diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts
index 2fa4593fd6c..580ede9596c 100644
--- a/src/data/arena-tag.ts
+++ b/src/data/arena-tag.ts
@@ -8,7 +8,7 @@ import type Pokemon from "#app/field/pokemon";
import { HitResult, PokemonMove } from "#app/field/pokemon";
import { StatusEffect } from "#enums/status-effect";
import type { BattlerIndex } from "#app/battle";
-import { BlockNonDirectDamageAbAttr, InfiltratorAbAttr, ProtectStatAbAttr, applyAbAttrs } from "#app/data/ability";
+import { BlockNonDirectDamageAbAttr, InfiltratorAbAttr, PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, ProtectStatAbAttr, applyAbAttrs, applyOnGainAbAttrs, applyOnLoseAbAttrs } from "#app/data/ability";
import { Stat } from "#enums/stat";
import { CommonAnim, CommonBattleAnim } from "#app/data/battle-anims";
import i18next from "i18next";
@@ -1221,6 +1221,76 @@ export class FairyLockTag extends ArenaTag {
}
+/**
+ * Arena tag class for {@link https://bulbapedia.bulbagarden.net/wiki/Neutralizing_Gas_(Ability) Neutralizing Gas}
+ *
+ * Keeps track of the number of pokemon on the field with Neutralizing Gas - If it drops to zero, the effect is ended and abilities are reactivated
+ *
+ * Additionally ends onLose abilities when it is activated
+ */
+export class SuppressAbilitiesTag extends ArenaTag {
+ private sourceCount: number;
+ private beingRemoved: boolean;
+
+ constructor(sourceId: number) {
+ super(ArenaTagType.NEUTRALIZING_GAS, 0, undefined, sourceId);
+ this.sourceCount = 1;
+ this.beingRemoved = false;
+ }
+
+ public override onAdd(arena: Arena): void {
+ const pokemon = this.getSourcePokemon();
+ if (pokemon) {
+ globalScene.queueMessage(i18next.t("arenaTag:neutralizingGasOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
+
+ for (const fieldPokemon of globalScene.getField()) {
+ if (fieldPokemon && fieldPokemon.id !== pokemon.id) {
+ [ true, false ].forEach((passive) => applyOnLoseAbAttrs(fieldPokemon, passive));
+ }
+ }
+ }
+ }
+
+ public override onOverlap(arena: Arena): void {
+ this.sourceCount++;
+ }
+
+ public onSourceLeave(arena: Arena): void {
+ this.sourceCount--;
+ if (this.sourceCount <= 0) {
+ arena.removeTag(ArenaTagType.NEUTRALIZING_GAS);
+ } else if (this.sourceCount === 1) {
+ // With 1 source left, that pokemon's other abilities should reactivate
+ // This may be confusing for players but would be the most accurate gameplay-wise
+ // Could have a custom message that plays when a specific pokemon's NG ends? This entire thing exists due to passives after all
+ const setter = globalScene.getField().filter((p) => p && p.hasAbilityWithAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, false))[0];
+ applyOnGainAbAttrs(setter, setter.getAbility().hasAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr));
+ }
+ }
+
+ public override onRemove(arena: Arena, quiet: boolean = false) {
+ this.beingRemoved = true;
+ if (!quiet) {
+ globalScene.queueMessage(i18next.t("arenaTag:neutralizingGasOnRemove"));
+ }
+
+ for (const pokemon of globalScene.getField()) {
+ // There is only one pokemon with this attr on the field on removal, so its abilities are already active
+ if (pokemon && !pokemon.hasAbilityWithAttr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, false)) {
+ [ true, false ].forEach((passive) => applyOnGainAbAttrs(pokemon, passive));
+ }
+ }
+ }
+
+ public shouldApplyToSelf(): boolean {
+ return this.sourceCount > 1;
+ }
+
+ public isBeingRemoved() {
+ return this.beingRemoved;
+ }
+}
+
// TODO: swap `sourceMove` and `sourceId` and make `sourceMove` an optional parameter
export function getArenaTag(tagType: ArenaTagType, turnCount: number, sourceMove: Moves | undefined, sourceId: number, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag | null {
switch (tagType) {
@@ -1281,6 +1351,8 @@ export function getArenaTag(tagType: ArenaTagType, turnCount: number, sourceMove
return new GrassWaterPledgeTag(sourceId, side);
case ArenaTagType.FAIRY_LOCK:
return new FairyLockTag(turnCount, sourceId);
+ case ArenaTagType.NEUTRALIZING_GAS:
+ return new SuppressAbilitiesTag(sourceId);
default:
return null;
}
diff --git a/src/data/balance/egg-moves.ts b/src/data/balance/egg-moves.ts
index 35ec6f934a4..ae61acbd32e 100644
--- a/src/data/balance/egg-moves.ts
+++ b/src/data/balance/egg-moves.ts
@@ -46,7 +46,7 @@ export const speciesEggMoves = {
[Species.DROWZEE]: [ Moves.BADDY_BAD, Moves.STRENGTH_SAP, Moves.LUMINA_CRASH, Moves.DARK_VOID ],
[Species.KRABBY]: [ Moves.DIRE_CLAW, Moves.DRAGON_HAMMER, Moves.IVY_CUDGEL, Moves.JET_PUNCH ],
[Species.VOLTORB]: [ Moves.NASTY_PLOT, Moves.FUSION_FLARE, Moves.FROST_BREATH, Moves.ELECTRO_DRIFT ],
- [Species.EXEGGCUTE]: [ Moves.FICKLE_BEAM, Moves.APPLE_ACID, Moves.TRICK_ROOM, Moves.LUMINA_CRASH ],
+ [Species.EXEGGCUTE]: [ Moves.FICKLE_BEAM, Moves.APPLE_ACID, Moves.HEAT_WAVE, Moves.LUMINA_CRASH ],
[Species.CUBONE]: [ Moves.HEAD_SMASH, Moves.WOOD_HAMMER, Moves.SHADOW_SNEAK, Moves.BITTER_BLADE ],
[Species.LICKITUNG]: [ Moves.CRUSH_GRIP, Moves.FIRE_LASH, Moves.SLACK_OFF, Moves.MAGICAL_TORQUE ],
[Species.KOFFING]: [ Moves.SCALD, Moves.RECOVER, Moves.BODY_PRESS, Moves.MALIGNANT_CHAIN ],
@@ -59,7 +59,7 @@ export const speciesEggMoves = {
[Species.SCYTHER]: [ Moves.MIGHTY_CLEAVE, Moves.GEAR_GRIND, Moves.STORM_THROW, Moves.BITTER_BLADE ],
[Species.PINSIR]: [ Moves.HEADLONG_RUSH, Moves.LEECH_LIFE, Moves.CRUSH_GRIP, Moves.EXTREME_SPEED ],
[Species.TAUROS]: [ Moves.SWORDS_DANCE, Moves.FIRE_LASH, Moves.WICKED_TORQUE, Moves.COLLISION_COURSE ],
- [Species.MAGIKARP]: [ Moves.FLIP_TURN, Moves.ICE_SPINNER, Moves.DRAGON_ASCENT, Moves.SURGING_STRIKES ],
+ [Species.MAGIKARP]: [ Moves.FLIP_TURN, Moves.ICE_SPINNER, Moves.KNOCK_OFF, Moves.DRAGON_ASCENT ],
[Species.LAPRAS]: [ Moves.RECOVER, Moves.FREEZE_DRY, Moves.SCALD, Moves.SHELL_SMASH ],
[Species.DITTO]: [ Moves.MIMIC, Moves.SKETCH, Moves.METRONOME, Moves.IMPRISON ],
[Species.EEVEE]: [ Moves.WISH, Moves.NO_RETREAT, Moves.ZIPPY_ZAP, Moves.BOOMBURST ],
@@ -76,7 +76,7 @@ export const speciesEggMoves = {
[Species.CHIKORITA]: [ Moves.SAPPY_SEED, Moves.STONE_AXE, Moves.DRAGON_DANCE, Moves.SPORE ],
[Species.CYNDAQUIL]: [ Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.FIERY_DANCE, Moves.ELECTRO_DRIFT ],
- [Species.TOTODILE]: [ Moves.THUNDER_PUNCH, Moves.DRAGON_DANCE, Moves.TRIPLE_AXEL, Moves.SURGING_STRIKES ],
+ [Species.TOTODILE]: [ Moves.THUNDER_PUNCH, Moves.DRAGON_DANCE, Moves.PLAY_ROUGH, Moves.SURGING_STRIKES ],
[Species.SENTRET]: [ Moves.TIDY_UP, Moves.FAKE_OUT, Moves.NUZZLE, Moves.EXTREME_SPEED ],
[Species.HOOTHOOT]: [ Moves.CALM_MIND, Moves.ESPER_WING, Moves.AEROBLAST, Moves.BOOMBURST ],
[Species.LEDYBA]: [ Moves.POLLEN_PUFF, Moves.MAT_BLOCK, Moves.PARTING_SHOT, Moves.SPORE ],
@@ -159,7 +159,7 @@ export const speciesEggMoves = {
[Species.VOLBEAT]: [ Moves.BATON_PASS, Moves.STICKY_WEB, Moves.DECORATE, Moves.VICTORY_DANCE ],
[Species.ILLUMISE]: [ Moves.PARTING_SHOT, Moves.GLITZY_GLOW, Moves.POWDER, Moves.QUIVER_DANCE ],
[Species.GULPIN]: [ Moves.MALIGNANT_CHAIN, Moves.EARTH_POWER, Moves.CALM_MIND, Moves.STRENGTH_SAP ],
- [Species.CARVANHA]: [ Moves.THUNDER_FANG, Moves.SWORDS_DANCE, Moves.OBSTRUCT, Moves.SURGING_STRIKES ],
+ [Species.CARVANHA]: [ Moves.THUNDER_FANG, Moves.GUNK_SHOT, Moves.OBSTRUCT, Moves.SURGING_STRIKES ],
[Species.WAILMER]: [ Moves.TAKE_HEART, Moves.COMEUPPANCE, Moves.SLACK_OFF, Moves.STEAM_ERUPTION ],
[Species.NUMEL]: [ Moves.TRICK_ROOM, Moves.ENERGY_BALL, Moves.SLACK_OFF, Moves.BLUE_FLARE ],
[Species.TORKOAL]: [ Moves.MORNING_SUN, Moves.BURNING_BULWARK, Moves.BODY_PRESS, Moves.HYDRO_STEAM ],
@@ -235,7 +235,7 @@ export const speciesEggMoves = {
[Species.RIOLU]: [ Moves.THUNDEROUS_KICK, Moves.TACHYON_CUTTER, Moves.TRIPLE_AXEL, Moves.SUNSTEEL_STRIKE ],
[Species.HIPPOPOTAS]: [ Moves.SHORE_UP, Moves.STONE_AXE, Moves.BULK_UP, Moves.SALT_CURE ],
[Species.SKORUPI]: [ Moves.COIL, Moves.DIRE_CLAW, Moves.CRABHAMMER, Moves.WICKED_BLOW ],
- [Species.CROAGUNK]: [ Moves.DIRE_CLAW, Moves.ICE_SPINNER, Moves.THUNDEROUS_KICK, Moves.VICTORY_DANCE ],
+ [Species.CROAGUNK]: [ Moves.DIRE_CLAW, Moves.TRIPLE_AXEL, Moves.THUNDEROUS_KICK, Moves.VICTORY_DANCE ],
[Species.CARNIVINE]: [ Moves.STRENGTH_SAP, Moves.FIRE_LASH, Moves.COIL, Moves.SAPPY_SEED ],
[Species.FINNEON]: [ Moves.QUIVER_DANCE, Moves.SPLISHY_SPLASH, Moves.FREEZE_DRY, Moves.OBLIVION_WING ],
[Species.MANTYKE]: [ Moves.SPLISHY_SPLASH, Moves.FREEZY_FROST, Moves.NASTY_PLOT, Moves.OBLIVION_WING ],
@@ -267,7 +267,7 @@ export const speciesEggMoves = {
[Species.PANSEAR]: [ Moves.NASTY_PLOT, Moves.HYDRO_STEAM, Moves.EARTH_POWER, Moves.ERUPTION ],
[Species.PANPOUR]: [ Moves.NASTY_PLOT, Moves.ENERGY_BALL, Moves.EARTH_POWER, Moves.WATER_SPOUT ],
[Species.MUNNA]: [ Moves.COSMIC_POWER, Moves.AURA_SPHERE, Moves.LUNAR_BLESSING, Moves.MYSTICAL_POWER ],
- [Species.PIDOVE]: [ Moves.GUNK_SHOT, Moves.TIDY_UP, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS ],
+ [Species.PIDOVE]: [ Moves.SLASH, Moves.TIDY_UP, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS ],
[Species.BLITZLE]: [ Moves.HORN_LEECH, Moves.SWORDS_DANCE, Moves.FLARE_BLITZ, Moves.BOLT_STRIKE ],
[Species.ROGGENROLA]: [ Moves.BODY_PRESS, Moves.CURSE, Moves.SHORE_UP, Moves.DIAMOND_STORM ],
[Species.WOOBAT]: [ Moves.ESPER_WING, Moves.STORED_POWER, Moves.MYSTICAL_FIRE, Moves.OBLIVION_WING ],
@@ -282,7 +282,7 @@ export const speciesEggMoves = {
[Species.COTTONEE]: [ Moves.POLLEN_PUFF, Moves.PARTING_SHOT, Moves.SLEEP_POWDER, Moves.SEED_FLARE ],
[Species.PETILIL]: [ Moves.THUNDEROUS_KICK, Moves.SPARKLING_ARIA, Moves.FIERY_DANCE, Moves.FLOWER_TRICK ],
[Species.BASCULIN]: [ Moves.LAST_RESPECTS, Moves.CLOSE_COMBAT, Moves.SPLISHY_SPLASH, Moves.NO_RETREAT ],
- [Species.SANDILE]: [ Moves.DIRE_CLAW, Moves.HEADLONG_RUSH, Moves.FIRE_LASH, Moves.WICKED_BLOW ],
+ [Species.SANDILE]: [ Moves.DIRE_CLAW, Moves.SUCKER_PUNCH, Moves.FIRE_LASH, Moves.HEADLONG_RUSH ],
[Species.DARUMAKA]: [ Moves.DRAIN_PUNCH, Moves.ZIPPY_ZAP, Moves.HEADLONG_RUSH, Moves.PYRO_BALL ],
[Species.MARACTUS]: [ Moves.EARTH_POWER, Moves.QUIVER_DANCE, Moves.FIERY_DANCE, Moves.SEED_FLARE ],
[Species.DWEBBLE]: [ Moves.CRABHAMMER, Moves.STONE_AXE, Moves.LEECH_LIFE, Moves.MIGHTY_CLEAVE ],
@@ -327,8 +327,8 @@ export const speciesEggMoves = {
[Species.DEINO]: [ Moves.FIERY_WRATH, Moves.ESPER_WING, Moves.SLUDGE_BOMB, Moves.FICKLE_BEAM ],
[Species.LARVESTA]: [ Moves.THUNDERBOLT, Moves.DAZZLING_GLEAM, Moves.EARTH_POWER, Moves.HYDRO_STEAM ],
[Species.COBALION]: [ Moves.BEHEMOTH_BLADE, Moves.MIGHTY_CLEAVE, Moves.CEASELESS_EDGE, Moves.VICTORY_DANCE ],
- [Species.TERRAKION]: [ Moves.MIGHTY_CLEAVE, Moves.HEADLONG_RUSH, Moves.CEASELESS_EDGE, Moves.VICTORY_DANCE ],
- [Species.VIRIZION]: [ Moves.SAPPY_SEED, Moves.PSYBLADE, Moves.CEASELESS_EDGE, Moves.VICTORY_DANCE ],
+ [Species.TERRAKION]: [ Moves.MIGHTY_CLEAVE, Moves.HEADLONG_RUSH, Moves.KNOCK_OFF, Moves.VICTORY_DANCE ],
+ [Species.VIRIZION]: [ Moves.SAPPY_SEED, Moves.PSYBLADE, Moves.STONE_AXE, Moves.VICTORY_DANCE ],
[Species.TORNADUS]: [ Moves.SANDSEAR_STORM, Moves.PARTING_SHOT, Moves.SPLISHY_SPLASH, Moves.OBLIVION_WING ],
[Species.THUNDURUS]: [ Moves.SANDSEAR_STORM, Moves.HURRICANE, Moves.FROST_BREATH, Moves.ELECTRO_SHOT ],
[Species.RESHIRAM]: [ Moves.ENERGY_BALL, Moves.TAKE_HEART, Moves.FICKLE_BEAM, Moves.ERUPTION ],
@@ -342,7 +342,7 @@ export const speciesEggMoves = {
[Species.CHESPIN]: [ Moves.COMBAT_TORQUE, Moves.SYNTHESIS, Moves.CEASELESS_EDGE, Moves.SAPPY_SEED ],
[Species.FENNEKIN]: [ Moves.TWIN_BEAM, Moves.FIERY_DANCE, Moves.THUNDERBOLT, Moves.SPARKLY_SWIRL ],
[Species.FROAKIE]: [ Moves.MOONBLAST, Moves.SHELL_SIDE_ARM, Moves.FIERY_WRATH, Moves.STEAM_ERUPTION ],
- [Species.BUNNELBY]: [ Moves.DRAIN_PUNCH, Moves.TIDY_UP, Moves.FACADE, Moves.EXTREME_SPEED ],
+ [Species.BUNNELBY]: [ Moves.DRAIN_PUNCH, Moves.TIDY_UP, Moves.LANDS_WRATH, Moves.EXTREME_SPEED ],
[Species.FLETCHLING]: [ Moves.DRILL_RUN, Moves.BURNING_BULWARK, Moves.HEAD_SMASH, Moves.VOLT_TACKLE ],
[Species.SCATTERBUG]: [ Moves.FOCUS_BLAST, Moves.AFTER_YOU, Moves.DECORATE, Moves.BLIZZARD ],
[Species.LITLEO]: [ Moves.EARTH_POWER, Moves.NASTY_PLOT, Moves.BURNING_BULWARK, Moves.BLUE_FLARE ],
@@ -372,7 +372,7 @@ export const speciesEggMoves = {
[Species.NOIBAT]: [ Moves.AEROBLAST, Moves.OVERDRIVE, Moves.NASTY_PLOT, Moves.CLANGING_SCALES ],
[Species.XERNEAS]: [ Moves.EARTH_POWER, Moves.SPRINGTIDE_STORM, Moves.STRENGTH_SAP, Moves.TAIL_GLOW ],
[Species.YVELTAL]: [ Moves.SLUDGE_WAVE, Moves.POWER_TRIP, Moves.FIERY_WRATH, Moves.CLANGOROUS_SOUL ],
- [Species.ZYGARDE]: [ Moves.DRAGON_DARTS, Moves.HEAL_ORDER, Moves.CLANGOROUS_SOUL, Moves.DOUBLE_IRON_BASH ],
+ [Species.ZYGARDE]: [ Moves.DRAGON_DARTS, Moves.V_CREATE, Moves.CLANGOROUS_SOUL, Moves.HEAL_ORDER ],
[Species.DIANCIE]: [ Moves.MAGICAL_TORQUE, Moves.FIERY_DANCE, Moves.SHORE_UP, Moves.GEOMANCY ],
[Species.HOOPA]: [ Moves.PHOTON_GEYSER, Moves.SECRET_SWORD, Moves.FIERY_WRATH, Moves.SHELL_SMASH ],
[Species.VOLCANION]: [ Moves.HYDRO_STEAM, Moves.CALM_MIND, Moves.SEARING_SHOT, Moves.THUNDERCLAP ],
@@ -415,7 +415,7 @@ export const speciesEggMoves = {
[Species.JANGMO_O]: [ Moves.BODY_PRESS, Moves.SHELL_SIDE_ARM, Moves.SECRET_SWORD, Moves.GLAIVE_RUSH ],
[Species.TAPU_KOKO]: [ Moves.MAGICAL_TORQUE, Moves.TRIPLE_AXEL, Moves.SWORDS_DANCE, Moves.BOLT_STRIKE ],
[Species.TAPU_LELE]: [ Moves.MOONLIGHT, Moves.NASTY_PLOT, Moves.HEAT_WAVE, Moves.EXPANDING_FORCE ],
- [Species.TAPU_BULU]: [ Moves.SAPPY_SEED, Moves.DRAIN_PUNCH, Moves.MAGICAL_TORQUE, Moves.VICTORY_DANCE ],
+ [Species.TAPU_BULU]: [ Moves.SAPPY_SEED, Moves.LANDS_WRATH, Moves.MAGICAL_TORQUE, Moves.VICTORY_DANCE ],
[Species.TAPU_FINI]: [ Moves.SPRINGTIDE_STORM, Moves.EARTH_POWER, Moves.RECOVER, Moves.QUIVER_DANCE ],
[Species.COSMOG]: [ Moves.PHOTON_GEYSER, Moves.PRECIPICE_BLADES, Moves.SACRED_FIRE, Moves.ASTRAL_BARRAGE ],
[Species.NIHILEGO]: [ Moves.STRENGTH_SAP, Moves.MALIGNANT_CHAIN, Moves.EARTH_POWER, Moves.QUIVER_DANCE ],
@@ -505,7 +505,7 @@ export const speciesEggMoves = {
[Species.HISUI_VOLTORB]: [ Moves.FROST_BREATH, Moves.NASTY_PLOT, Moves.APPLE_ACID, Moves.ELECTRO_DRIFT ],
[Species.HISUI_QWILFISH]: [ Moves.CEASELESS_EDGE, Moves.KNOCK_OFF, Moves.RECOVER, Moves.FISHIOUS_REND ],
[Species.HISUI_SNEASEL]: [ Moves.DRAIN_PUNCH, Moves.KNOCK_OFF, Moves.PSYCHIC_FANGS, Moves.TRIPLE_AXEL ],
- [Species.HISUI_ZORUA]: [ Moves.MOONBLAST, Moves.HYPER_VOICE, Moves.PARTING_SHOT, Moves.BLOOD_MOON ],
+ [Species.HISUI_ZORUA]: [ Moves.MOONBLAST, Moves.SECRET_SWORD, Moves.PARTING_SHOT, Moves.BLOOD_MOON ],
[Species.SPRIGATITO]: [ Moves.FIRE_LASH, Moves.TRIPLE_AXEL, Moves.SUCKER_PUNCH, Moves.WICKED_BLOW ],
[Species.FUECOCO]: [ Moves.ALLURING_VOICE, Moves.SLACK_OFF, Moves.OVERDRIVE, Moves.MOONGEIST_BEAM ],
@@ -538,7 +538,7 @@ export const speciesEggMoves = {
[Species.CYCLIZAR]: [ Moves.PARTING_SHOT, Moves.FIRE_LASH, Moves.MAGICAL_TORQUE, Moves.GLAIVE_RUSH ],
[Species.ORTHWORM]: [ Moves.SIZZLY_SLIDE, Moves.COIL, Moves.BODY_PRESS, Moves.SHORE_UP ],
[Species.GLIMMET]: [ Moves.CALM_MIND, Moves.GIGA_DRAIN, Moves.FIERY_DANCE, Moves.MALIGNANT_CHAIN ],
- [Species.GREAVARD]: [ Moves.SHADOW_BONE, Moves.YAWN, Moves.SHORE_UP, Moves.COLLISION_COURSE ],
+ [Species.GREAVARD]: [ Moves.SHADOW_BONE, Moves.SIZZLY_SLIDE, Moves.SHORE_UP, Moves.COLLISION_COURSE ],
[Species.FLAMIGO]: [ Moves.THUNDEROUS_KICK, Moves.TRIPLE_AXEL, Moves.FLOATY_FALL, Moves.VICTORY_DANCE ],
[Species.CETODDLE]: [ Moves.ZING_ZAP, Moves.HIGH_HORSEPOWER, Moves.SLACK_OFF, Moves.DRAGON_DANCE ],
[Species.VELUZA]: [ Moves.PSYBLADE, Moves.LEAF_BLADE, Moves.CEASELESS_EDGE, Moves.BITTER_BLADE ],
@@ -550,7 +550,7 @@ export const speciesEggMoves = {
[Species.FLUTTER_MANE]: [ Moves.MOONLIGHT, Moves.NASTY_PLOT, Moves.EARTH_POWER, Moves.MOONGEIST_BEAM ],
[Species.SLITHER_WING]: [ Moves.MIGHTY_CLEAVE, Moves.THUNDEROUS_KICK, Moves.FIRE_LASH, Moves.VICTORY_DANCE ],
[Species.SANDY_SHOCKS]: [ Moves.MORNING_SUN, Moves.ICE_BEAM, Moves.NASTY_PLOT, Moves.THUNDERCLAP ],
- [Species.IRON_TREADS]: [ Moves.FUSION_BOLT, Moves.BULK_UP, Moves.SHORE_UP, Moves.SUNSTEEL_STRIKE ],
+ [Species.IRON_TREADS]: [ Moves.FUSION_BOLT, Moves.SHIFT_GEAR, Moves.SHORE_UP, Moves.SUNSTEEL_STRIKE ],
[Species.IRON_BUNDLE]: [ Moves.EARTH_POWER, Moves.SPLISHY_SPLASH, Moves.VOLT_SWITCH, Moves.NASTY_PLOT ],
[Species.IRON_HANDS]: [ Moves.DRAIN_PUNCH, Moves.BULK_UP, Moves.PLASMA_FISTS, Moves.ICE_HAMMER ],
[Species.IRON_JUGULIS]: [ Moves.FIERY_WRATH, Moves.ROOST, Moves.NASTY_PLOT, Moves.OBLIVION_WING ],
@@ -562,7 +562,7 @@ export const speciesEggMoves = {
[Species.CHIEN_PAO]: [ Moves.KNOCK_OFF, Moves.PARTING_SHOT, Moves.TRIPLE_AXEL, Moves.BITTER_BLADE ],
[Species.TING_LU]: [ Moves.SHORE_UP, Moves.CEASELESS_EDGE, Moves.SAPPY_SEED, Moves.PRECIPICE_BLADES ],
[Species.CHI_YU]: [ Moves.FIERY_WRATH, Moves.HYDRO_STEAM, Moves.MORNING_SUN, Moves.BLUE_FLARE ],
- [Species.ROARING_MOON]: [ Moves.FIRE_LASH, Moves.DRAGON_HAMMER, Moves.SUCKER_PUNCH, Moves.WICKED_BLOW ],
+ [Species.ROARING_MOON]: [ Moves.FIRE_LASH, Moves.DRAGON_HAMMER, Moves.METEOR_MASH, Moves.DRAGON_ASCENT ],
[Species.IRON_VALIANT]: [ Moves.PLASMA_FISTS, Moves.NO_RETREAT, Moves.SECRET_SWORD, Moves.MAGICAL_TORQUE ],
[Species.KORAIDON]: [ Moves.SUNSTEEL_STRIKE, Moves.SOLAR_BLADE, Moves.DRAGON_DARTS, Moves.BITTER_BLADE ],
[Species.MIRAIDON]: [ Moves.ICE_BEAM, Moves.CLANGOROUS_SOUL, Moves.CORE_ENFORCER, Moves.RISING_VOLTAGE ],
@@ -577,7 +577,7 @@ export const speciesEggMoves = {
[Species.RAGING_BOLT]: [ Moves.NASTY_PLOT, Moves.FLAMETHROWER, Moves.MORNING_SUN, Moves.ELECTRO_DRIFT ],
[Species.IRON_BOULDER]: [ Moves.PSYBLADE, Moves.KOWTOW_CLEAVE, Moves.STONE_AXE, Moves.BITTER_BLADE ],
[Species.IRON_CROWN]: [ Moves.NASTY_PLOT, Moves.SECRET_SWORD, Moves.PSYSTRIKE, Moves.ELECTRO_DRIFT ],
- [Species.TERAPAGOS]: [ Moves.MOONBLAST, Moves.RECOVER, Moves.ICE_BEAM, Moves.SHELL_SMASH ],
+ [Species.TERAPAGOS]: [ Moves.MOONBLAST, Moves.NASTY_PLOT, Moves.ASTRAL_BARRAGE, Moves.RECOVER ],
[Species.PECHARUNT]: [ Moves.TAKE_HEART, Moves.BODY_PRESS, Moves.SAPPY_SEED, Moves.ASTRAL_BARRAGE ],
[Species.PALDEA_TAUROS]: [ Moves.NO_RETREAT, Moves.BLAZING_TORQUE, Moves.AQUA_STEP, Moves.THUNDEROUS_KICK ],
[Species.PALDEA_WOOPER]: [ Moves.STONE_AXE, Moves.RECOVER, Moves.BANEFUL_BUNKER, Moves.BARB_BARRAGE ],
diff --git a/src/data/balance/passives.ts b/src/data/balance/passives.ts
index df347909d49..c613be0137b 100644
--- a/src/data/balance/passives.ts
+++ b/src/data/balance/passives.ts
@@ -555,7 +555,7 @@ export const starterPassiveAbilities: StarterPassiveAbilities = {
[Species.FLUTTER_MANE]: { 0: Abilities.DAZZLING },
[Species.SLITHER_WING]: { 0: Abilities.SCRAPPY },
[Species.SANDY_SHOCKS]: { 0: Abilities.ELECTRIC_SURGE },
- [Species.IRON_TREADS]: { 0: Abilities.STEELY_SPIRIT },
+ [Species.IRON_TREADS]: { 0: Abilities.DAUNTLESS_SHIELD },
[Species.IRON_BUNDLE]: { 0: Abilities.SNOW_WARNING },
[Species.IRON_HANDS]: { 0: Abilities.IRON_FIST },
[Species.IRON_JUGULIS]: { 0: Abilities.LIGHTNING_ROD },
@@ -567,7 +567,7 @@ export const starterPassiveAbilities: StarterPassiveAbilities = {
[Species.CHIEN_PAO]: { 0: Abilities.INTIMIDATE },
[Species.TING_LU]: { 0: Abilities.STAMINA },
[Species.CHI_YU]: { 0: Abilities.BERSERK },
- [Species.ROARING_MOON]: { 0: Abilities.TOUGH_CLAWS },
+ [Species.ROARING_MOON]: { 0: Abilities.INTIMIDATE },
[Species.IRON_VALIANT]: { 0: Abilities.NEUROFORCE },
[Species.KORAIDON]: { 0: Abilities.OPPORTUNIST },
[Species.MIRAIDON]: { 0: Abilities.OPPORTUNIST },
@@ -582,7 +582,7 @@ export const starterPassiveAbilities: StarterPassiveAbilities = {
[Species.RAGING_BOLT]: { 0: Abilities.BEAST_BOOST },
[Species.IRON_BOULDER]: { 0: Abilities.SHARPNESS },
[Species.IRON_CROWN]: { 0: Abilities.SHARPNESS },
- [Species.TERAPAGOS]: { 0: Abilities.SOUL_HEART },
+ [Species.TERAPAGOS]: { 0: Abilities.SHIELD_DUST },
[Species.PECHARUNT]: { 0: Abilities.TOXIC_CHAIN },
[Species.PALDEA_TAUROS]: { 0: Abilities.ADAPTABILITY },
[Species.PALDEA_WOOPER]: { 0: Abilities.THICK_FAT },
diff --git a/src/data/balance/starters.ts b/src/data/balance/starters.ts
index dcf0766d005..3468163c988 100644
--- a/src/data/balance/starters.ts
+++ b/src/data/balance/starters.ts
@@ -290,7 +290,7 @@ export const speciesStarterCosts = {
[Species.SHAYMIN]: 6,
[Species.ARCEUS]: 9,
- [Species.VICTINI]: 7,
+ [Species.VICTINI]: 6,
[Species.SNIVY]: 3,
[Species.TEPIG]: 3,
[Species.OSHAWOTT]: 3,
@@ -461,7 +461,7 @@ export const speciesStarterCosts = {
[Species.GUZZLORD]: 6,
[Species.NECROZMA]: 8,
[Species.MAGEARNA]: 7,
- [Species.MARSHADOW]: 7,
+ [Species.MARSHADOW]: 8,
[Species.POIPOLE]: 8,
[Species.STAKATAKA]: 6,
[Species.BLACEPHALON]: 7,
@@ -611,7 +611,7 @@ export const speciesStarterCosts = {
[Species.RAGING_BOLT]: 7,
[Species.IRON_BOULDER]: 7,
[Species.IRON_CROWN]: 7,
- [Species.TERAPAGOS]: 8,
+ [Species.TERAPAGOS]: 9,
[Species.PECHARUNT]: 6,
[Species.PALDEA_TAUROS]: 5,
[Species.PALDEA_WOOPER]: 3,
diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts
index a179f3a3e9b..a42779563f2 100644
--- a/src/data/battle-anims.ts
+++ b/src/data/battle-anims.ts
@@ -1,7 +1,20 @@
import { globalScene } from "#app/global-scene";
-import { AttackMove, BeakBlastHeaderAttr, DelayedAttackAttr, MoveFlags, SelfStatusMove, allMoves } from "./move";
+import {
+ AttackMove,
+ BeakBlastHeaderAttr,
+ DelayedAttackAttr,
+ MoveFlags,
+ SelfStatusMove,
+ allMoves,
+} from "./move";
import type Pokemon from "../field/pokemon";
-import * as Utils from "../utils";
+import {
+ type nil,
+ getFrameMs,
+ getEnumKeys,
+ getEnumValues,
+ animationFileName,
+} from "../utils";
import type { BattlerIndex } from "../battle";
import type { Element } from "json-stable-stringify";
import { Moves } from "#enums/moves";
@@ -401,7 +414,7 @@ class AnimTimedUpdateBgEvent extends AnimTimedBgEvent {
if (Object.keys(tweenProps).length) {
globalScene.tweens.add(Object.assign({
targets: moveAnim.bgSprite,
- duration: Utils.getFrameMs(this.duration * 3)
+ duration: getFrameMs(this.duration * 3)
}, tweenProps));
}
return this.duration * 2;
@@ -437,7 +450,7 @@ class AnimTimedAddBgEvent extends AnimTimedBgEvent {
globalScene.tweens.add({
targets: moveAnim.bgSprite,
- duration: Utils.getFrameMs(this.duration * 3)
+ duration: getFrameMs(this.duration * 3)
});
return this.duration * 2;
@@ -455,8 +468,8 @@ export const encounterAnims = new Map();
export function initCommonAnims(): Promise {
return new Promise(resolve => {
- const commonAnimNames = Utils.getEnumKeys(CommonAnim);
- const commonAnimIds = Utils.getEnumValues(CommonAnim);
+ const commonAnimNames = getEnumKeys(CommonAnim);
+ const commonAnimIds = getEnumValues(CommonAnim);
const commonAnimFetches: Promise