[Localization]Localized move-trigger text (#2913)

* [Localization]Localized move-trigger text

* [Localization]Localized zh-cn move-trigger text

* [Localization]fix typo

* [Localization]fix typo

* Update src/locales/pt_BR/move-trigger.ts

Co-authored-by: José Ricardo Fleury Oliveira <josefleury@discente.ufg.br>

* [Localization]add pokemonName to move-trigger.ts

* [Localization]add pokemonName to move-trigger.ts

* Update zh_TW move-trigger.ts

* Update zh_CN move-trigger.ts

* Update move.ts

* Update src/locales/ko/move-trigger.ts

Co-authored-by: Enoch <enoch.jwsong@gmail.com>

* Update src/locales/ko/move-trigger.ts

Co-authored-by: Enoch <enoch.jwsong@gmail.com>

* Update move-trigger.ts

* Update src/locales/de/move-trigger.ts

Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com>

* [Localization]add affix to target pokemon names

* Update src/locales/fr/move-trigger.ts

Co-authored-by: Lugiad' <adrien.grivel@hotmail.fr>

* localized type

---------

Co-authored-by: José Ricardo Fleury Oliveira <josefleury@discente.ufg.br>
Co-authored-by: Enoch <enoch.jwsong@gmail.com>
Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com>
Co-authored-by: Lugiad' <adrien.grivel@hotmail.fr>
This commit is contained in:
mercurius-00 2024-07-13 00:23:28 +08:00 committed by GitHub
parent 1965f2b147
commit 39bdfea0c8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 562 additions and 69 deletions

View File

@ -1103,7 +1103,7 @@ export class RecoilAttr extends MoveEffectAttr {
} }
user.damageAndUpdate(recoilDamage, HitResult.OTHER, false, true, true); user.damageAndUpdate(recoilDamage, HitResult.OTHER, false, true, true);
user.scene.queueMessage(getPokemonMessage(user, " is hit\nwith recoil!")); user.scene.queueMessage(i18next.t("moveTriggers:hitWithRecoil", {pokemonName: getPokemonNameWithAffix(user)}));
user.turnData.damageTaken += recoilDamage; user.turnData.damageTaken += recoilDamage;
return true; return true;
@ -1215,7 +1215,7 @@ export class HalfSacrificialAttr extends MoveEffectAttr {
applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled);
if (!cancelled.value) { if (!cancelled.value) {
user.damageAndUpdate(Math.ceil(user.getMaxHp()/2), HitResult.OTHER, false, true, true); user.damageAndUpdate(Math.ceil(user.getMaxHp()/2), HitResult.OTHER, false, true, true);
user.scene.queueMessage(getPokemonMessage(user, " cut its own HP to power up its move!")); // Queue recoil message user.scene.queueMessage(i18next.t("moveTriggers:cutHpPowerUpMove", {pokemonName: getPokemonNameWithAffix(user)})); // Queue recoil message
} }
return true; return true;
} }
@ -1804,7 +1804,7 @@ export class StealHeldItemChanceAttr extends MoveEffectAttr {
const stolenItem = tierHeldItems[user.randSeedInt(tierHeldItems.length)]; const stolenItem = tierHeldItems[user.randSeedInt(tierHeldItems.length)];
user.scene.tryTransferHeldItemModifier(stolenItem, user, false).then(success => { user.scene.tryTransferHeldItemModifier(stolenItem, user, false).then(success => {
if (success) { if (success) {
user.scene.queueMessage(getPokemonMessage(user, ` stole\n${target.name}'s ${stolenItem.type.name}!`)); user.scene.queueMessage(i18next.t("moveTriggers:stoleItem", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), ItemName: stolenItem.type.name}));
} }
resolve(success); resolve(success);
}); });
@ -1883,9 +1883,9 @@ export class RemoveHeldItemAttr extends MoveEffectAttr {
target.scene.updateModifiers(target.isPlayer()); target.scene.updateModifiers(target.isPlayer());
if (this.berriesOnly) { if (this.berriesOnly) {
user.scene.queueMessage(getPokemonMessage(user, ` incinerated\n${target.name}'s ${removedItem.type.name}!`)); user.scene.queueMessage(i18next.t("moveTriggers:incineratedItem", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name}));
} else { } else {
user.scene.queueMessage(getPokemonMessage(user, ` knocked off\n${target.name}'s ${removedItem.type.name}!`)); user.scene.queueMessage(i18next.t("moveTriggers:knockedOffItem", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name}));
} }
} }
@ -2205,7 +2205,7 @@ export class ChargeAttr extends OverrideMoveEffectAttr {
if (!lastMove || lastMove.move !== move.id || (lastMove.result !== MoveResult.OTHER && (this.sameTurn || lastMove.turn !== user.scene.currentBattle.turn))) { if (!lastMove || lastMove.move !== move.id || (lastMove.result !== MoveResult.OTHER && (this.sameTurn || lastMove.turn !== user.scene.currentBattle.turn))) {
(args[0] as Utils.BooleanHolder).value = true; (args[0] as Utils.BooleanHolder).value = true;
new MoveChargeAnim(this.chargeAnim, move.id, user).play(user.scene, () => { new MoveChargeAnim(this.chargeAnim, move.id, user).play(user.scene, () => {
user.scene.queueMessage(getPokemonMessage(user, ` ${this.chargeText.replace("{TARGET}", target.name)}`)); user.scene.queueMessage(this.chargeText.replace("{TARGET}", getPokemonNameWithAffix(target)).replace("{USER}", getPokemonNameWithAffix(user)));
if (this.tagType) { if (this.tagType) {
user.addTag(this.tagType, 1, move.id, user.id); user.addTag(this.tagType, 1, move.id, user.id);
} }
@ -2257,7 +2257,7 @@ export class SunlightChargeAttr extends ChargeAttr {
export class ElectroShotChargeAttr extends ChargeAttr { export class ElectroShotChargeAttr extends ChargeAttr {
private statIncreaseApplied: boolean; private statIncreaseApplied: boolean;
constructor() { constructor() {
super(ChargeAnim.ELECTRO_SHOT_CHARGING, "absorbed electricity!", null, true); super(ChargeAnim.ELECTRO_SHOT_CHARGING, i18next.t("moveTriggers:absorbedElectricity"), null, true);
// Add a flag because ChargeAttr skills use themselves twice instead of once over one-to-two turns // Add a flag because ChargeAttr skills use themselves twice instead of once over one-to-two turns
this.statIncreaseApplied = false; this.statIncreaseApplied = false;
} }
@ -2316,7 +2316,7 @@ export class DelayedAttackAttr extends OverrideMoveEffectAttr {
resolve(true); resolve(true);
}); });
} else { } else {
user.scene.ui.showText(getPokemonMessage(user.scene.getPokemonById(target.id), ` took\nthe ${move.name} attack!`), null, () => resolve(true)); user.scene.ui.showText(i18next.t("moveTriggers:tookMoveAttack", {pokemonName: getPokemonNameWithAffix(user.scene.getPokemonById(target.id)), moveName: move.name}), null, () => resolve(true));
} }
}); });
} }
@ -2469,7 +2469,7 @@ export class HalfHpStatMaxAttr extends StatChangeAttr {
} }
user.updateInfo().then(() => { user.updateInfo().then(() => {
const ret = super.apply(user, target, move, args); const ret = super.apply(user, target, move, args);
user.scene.queueMessage(getPokemonMessage(user, ` cut its own HP\nand maximized its ${getBattleStatName(this.stats[0])}!`)); user.scene.queueMessage(i18next.t("moveTriggers:cutOwnHpAndMaximizedStat", {pokemonName: getPokemonNameWithAffix(user), stateName: getBattleStatName(this.stats[0])}));
resolve(ret); resolve(ret);
}); });
}); });
@ -2525,8 +2525,7 @@ export class CopyStatsAttr extends MoveEffectAttr {
} }
target.updateInfo(); target.updateInfo();
user.updateInfo(); user.updateInfo();
target.scene.queueMessage(i18next.t("moveTriggers:copiedStatChanges", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target)}));
target.scene.queueMessage(getPokemonMessage(user, " copied\n") + getPokemonMessage(target, "'s stat changes!"));
return true; return true;
} }
@ -2592,7 +2591,7 @@ export class SwapStatsAttr extends MoveEffectAttr {
} }
target.updateInfo(); target.updateInfo();
user.updateInfo(); user.updateInfo();
target.scene.queueMessage(getPokemonMessage(user, " switched stat changes with the target!")); target.scene.queueMessage(i18next.t("moveTriggers:switchedStatChanges", {pokemonName: getPokemonNameWithAffix(user)}));
return true; return true;
} }
} }
@ -2748,7 +2747,7 @@ const doublePowerChanceMessageFunc = (user: Pokemon, target: Pokemon, move: Move
user.scene.executeWithSeedOffset(() => { user.scene.executeWithSeedOffset(() => {
const rand = Utils.randSeedInt(100); const rand = Utils.randSeedInt(100);
if (rand < move.chance) { if (rand < move.chance) {
message = getPokemonMessage(user, " is going all out for this attack!"); message = i18next.t("moveTriggers:goingAllOutForAttack", {pokemonName: getPokemonNameWithAffix(user)});
} }
}, user.scene.currentBattle.turn << 6, user.scene.waveSeed); }, user.scene.currentBattle.turn << 6, user.scene.waveSeed);
return message; return message;
@ -3027,7 +3026,7 @@ const magnitudeMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => {
} }
} }
message = `Magnitude ${m + 4}!`; message = i18next.t("moveTriggers:magnitudeMessage", {magnitude: m + 4});
}, user.scene.currentBattle.turn << 6, user.scene.waveSeed); }, user.scene.currentBattle.turn << 6, user.scene.waveSeed);
return message; return message;
}; };
@ -3177,7 +3176,7 @@ export class PresentPowerAttr extends VariablePowerAttr {
// If this move is multi-hit, disable all other hits // If this move is multi-hit, disable all other hits
user.stopMultiHit(); user.stopMultiHit();
target.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(), target.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(),
Math.max(Math.floor(target.getMaxHp() / 4), 1), getPokemonMessage(target, " regained\nhealth!"), true)); Math.max(Math.floor(target.getMaxHp() / 4), 1), i18next.t("moveTriggers:regainedHealth", {pokemonName: getPokemonNameWithAffix(target)}), true));
} }
return true; return true;
@ -3811,7 +3810,7 @@ const crashDamageFunc = (user: Pokemon, move: Move) => {
} }
user.damageAndUpdate(Math.floor(user.getMaxHp() / 2), HitResult.OTHER, false, true); user.damageAndUpdate(Math.floor(user.getMaxHp() / 2), HitResult.OTHER, false, true);
user.scene.queueMessage(getPokemonMessage(user, " kept going\nand crashed!")); user.scene.queueMessage(i18next.t("moveTriggers:keptGoingAndCrashed", {pokemonName: getPokemonNameWithAffix(user)}));
user.turnData.damageTaken += Math.floor(user.getMaxHp() / 2); user.turnData.damageTaken += Math.floor(user.getMaxHp() / 2);
return true; return true;
@ -4151,7 +4150,7 @@ export class IgnoreAccuracyAttr extends AddBattlerTagAttr {
return false; return false;
} }
user.scene.queueMessage(getPokemonMessage(user, ` took aim\nat ${target.name}!`)); user.scene.queueMessage(i18next.t("moveTriggers:tookAimAtTarget", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target)}));
return true; return true;
} }
@ -4167,7 +4166,7 @@ export class AlwaysCritsAttr extends AddBattlerTagAttr {
return false; return false;
} }
user.scene.queueMessage(getPokemonMessage(user, ` took aim\nat ${target.name}!`)); user.scene.queueMessage(i18next.t("moveTriggers:tookAimAtTarget", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target)}));
return true; return true;
} }
@ -4541,7 +4540,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
if (switchOutTarget.hp) { if (switchOutTarget.hp) {
switchOutTarget.hideInfo().then(() => switchOutTarget.destroy()); switchOutTarget.hideInfo().then(() => switchOutTarget.destroy());
switchOutTarget.scene.field.remove(switchOutTarget); switchOutTarget.scene.field.remove(switchOutTarget);
user.scene.queueMessage(getPokemonMessage(switchOutTarget, " fled!"), null, true, 500); user.scene.queueMessage(i18next.t("moveTriggers:fled", {pokemonName: getPokemonNameWithAffix(switchOutTarget)}), null, true, 500);
} }
if (!switchOutTarget.getAlly()?.isActive(true)) { if (!switchOutTarget.getAlly()?.isActive(true)) {
@ -4565,7 +4564,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null { getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null {
const blockedByAbility = new Utils.BooleanHolder(false); const blockedByAbility = new Utils.BooleanHolder(false);
applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility);
return blockedByAbility.value ? getPokemonMessage(target, " can't be switched out!") : null; return blockedByAbility.value ? i18next.t("moveTriggers:cannotBeSwitchedOut", {pokemonName: getPokemonNameWithAffix(target)}) : null;
} }
getSwitchOutCondition(): MoveConditionFunc { getSwitchOutCondition(): MoveConditionFunc {
@ -4678,7 +4677,7 @@ export class CopyBiomeTypeAttr extends MoveEffectAttr {
user.summonData.types = [ biomeType ]; user.summonData.types = [ biomeType ];
user.updateInfo(); user.updateInfo();
user.scene.queueMessage(getPokemonMessage(user, ` transformed\ninto the ${Utils.toReadableString(Type[biomeType])} type!`)); user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoType", {pokemonName: getPokemonNameWithAffix(user), typeName: i18next.t(`pokemonInfo:Type.${Type[biomeType]}`)}));
return true; return true;
} }
@ -4697,7 +4696,7 @@ export class ChangeTypeAttr extends MoveEffectAttr {
target.summonData.types = [this.type]; target.summonData.types = [this.type];
target.updateInfo(); target.updateInfo();
user.scene.queueMessage(getPokemonMessage(target, ` transformed\ninto the ${Utils.toReadableString(Type[this.type])} type!`)); user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoType", {pokemonName: getPokemonNameWithAffix(target), typeName: i18next.t(`pokemonInfo:Type.${Type[this.type]}`)}));
return true; return true;
} }
@ -4724,7 +4723,7 @@ export class AddTypeAttr extends MoveEffectAttr {
target.summonData.types = types; target.summonData.types = types;
target.updateInfo(); target.updateInfo();
user.scene.queueMessage(`${Utils.toReadableString(Type[this.type])} was added to\n` + getPokemonMessage(target, "!")); user.scene.queueMessage(`${i18next.t(`pokemonInfo:Type.${Type[this.type]}`)} was added to\n` + getPokemonMessage(target, "!"));
return true; return true;
} }
@ -4748,7 +4747,7 @@ export class FirstMoveTypeAttr extends MoveEffectAttr {
user.summonData.types = [ firstMoveType ]; user.summonData.types = [ firstMoveType ];
user.scene.queueMessage(getPokemonMessage(user, ` transformed\ninto to the ${Utils.toReadableString(Type[firstMoveType])} type!`)); user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoType", {pokemonName: getPokemonNameWithAffix(user), typeName: i18next.t(`pokemonInfo:Type.${Type[firstMoveType]}`)}));
return true; return true;
} }
@ -5150,7 +5149,7 @@ export class MovesetCopyMoveAttr extends OverrideMoveEffectAttr {
user.summonData.moveset = user.getMoveset().slice(0); user.summonData.moveset = user.getMoveset().slice(0);
user.summonData.moveset[thisMoveIndex] = new PokemonMove(copiedMove.id, 0, 0); user.summonData.moveset[thisMoveIndex] = new PokemonMove(copiedMove.id, 0, 0);
user.scene.queueMessage(getPokemonMessage(user, ` copied\n${copiedMove.name}!`)); user.scene.queueMessage(i18next.t("moveTriggers: copiedMove", {pokemonName: getPokemonNameWithAffix(user), moveName: copiedMove.name}));
return true; return true;
} }
@ -5185,7 +5184,7 @@ export class SketchAttr extends MoveEffectAttr {
user.setMove(sketchIndex, sketchedMove.id); user.setMove(sketchIndex, sketchedMove.id);
user.scene.queueMessage(getPokemonMessage(user, ` sketched\n${sketchedMove.name}!`)); user.scene.queueMessage(i18next.t("moveTriggers:sketchedMove", {pokemonName: getPokemonNameWithAffix(user), moveName: sketchedMove.name}));
return true; return true;
} }
@ -5228,7 +5227,7 @@ export class AbilityChangeAttr extends MoveEffectAttr {
(this.selfTarget ? user : target).summonData.ability = this.ability; (this.selfTarget ? user : target).summonData.ability = this.ability;
user.scene.queueMessage("The " + getPokemonMessage((this.selfTarget ? user : target), ` acquired\n${allAbilities[this.ability].name}!`)); user.scene.queueMessage(i18next.t("moveTriggers:acquiredAbility", {pokemonName: getPokemonNameWithAffix((this.selfTarget ? user : target)), abilityName: allAbilities[this.ability].name}));
return true; return true;
} }
@ -5254,11 +5253,11 @@ export class AbilityCopyAttr extends MoveEffectAttr {
user.summonData.ability = target.getAbility().id; user.summonData.ability = target.getAbility().id;
user.scene.queueMessage(getPokemonMessage(user, " copied the ") + getPokemonMessage(target, `'s\n${allAbilities[target.getAbility().id].name}!`)); user.scene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name}));
if (this.copyToPartner && user.scene.currentBattle?.double && user.getAlly().hp) { if (this.copyToPartner && user.scene.currentBattle?.double && user.getAlly().hp) {
user.getAlly().summonData.ability = target.getAbility().id; user.getAlly().summonData.ability = target.getAbility().id;
user.getAlly().scene.queueMessage(getPokemonMessage(user.getAlly(), " copied the ") + getPokemonMessage(target, `'s\n${allAbilities[target.getAbility().id].name}!`)); user.getAlly().scene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", {pokemonName: getPokemonNameWithAffix(user.getAlly()), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name}));
} }
return true; return true;
@ -5291,7 +5290,7 @@ export class AbilityGiveAttr extends MoveEffectAttr {
target.summonData.ability = user.getAbility().id; target.summonData.ability = user.getAbility().id;
user.scene.queueMessage("The" + getPokemonMessage(target, `\nacquired ${allAbilities[user.getAbility().id].name}!`)); user.scene.queueMessage(i18next.t("moveTriggers:acquiredAbility", {pokemonName: getPokemonNameWithAffix(target), abilityName: allAbilities[user.getAbility().id].name}));
return true; return true;
} }
@ -5311,7 +5310,7 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr {
user.summonData.ability = target.getAbility().id; user.summonData.ability = target.getAbility().id;
target.summonData.ability = tempAbilityId; target.summonData.ability = tempAbilityId;
user.scene.queueMessage(getPokemonMessage(user, " swapped\nabilities with its target!")); user.scene.queueMessage(i18next.t("moveTriggers:swappedAbilitiesWithTarget", {pokemonName: getPokemonNameWithAffix(user)}));
return true; return true;
} }
@ -5395,7 +5394,7 @@ export class TransformAttr extends MoveEffectAttr {
user.summonData.moveset = target.getMoveset().map(m => new PokemonMove(m.moveId, m.ppUsed, m.ppUp)); user.summonData.moveset = target.getMoveset().map(m => new PokemonMove(m.moveId, m.ppUsed, m.ppUp));
user.summonData.types = target.getTypes(); user.summonData.types = target.getTypes();
user.scene.queueMessage(getPokemonMessage(user, ` transformed\ninto ${target.name}!`)); user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoTarget", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target)}));
user.loadAssets(false).then(() => { user.loadAssets(false).then(() => {
user.playAnim(); user.playAnim();
@ -5426,7 +5425,7 @@ export class MoneyAttr extends MoveEffectAttr {
apply(user: Pokemon, target: Pokemon, move: Move): boolean { apply(user: Pokemon, target: Pokemon, move: Move): boolean {
user.scene.currentBattle.moneyScattered += user.scene.getWaveMoneyAmount(0.2); user.scene.currentBattle.moneyScattered += user.scene.getWaveMoneyAmount(0.2);
user.scene.queueMessage("Coins were scattered everywhere!"); user.scene.queueMessage(i18next.t("moveTriggers:coinsScatteredEverywhere"));
return true; return true;
} }
} }
@ -5450,7 +5449,7 @@ export class DestinyBondAttr extends MoveEffectAttr {
* @returns true * @returns true
*/ */
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
user.scene.queueMessage(`${getPokemonMessage(user, " is trying\nto take its foe down with it!")}`); user.scene.queueMessage(`${i18next.t("moveTriggers:tryingToTakeFoeDown", {pokemonName: getPokemonNameWithAffix(user)})}`);
user.addTag(BattlerTagType.DESTINY_BOND, undefined, move.id, user.id); user.addTag(BattlerTagType.DESTINY_BOND, undefined, move.id, user.id);
return true; return true;
} }
@ -5489,8 +5488,7 @@ export class AttackedByItemAttr extends MoveAttr {
} }
const itemName = heldItems[0]?.type?.name ?? "item"; const itemName = heldItems[0]?.type?.name ?? "item";
const attackedByItemString = ` is about to be attacked by its ${itemName}!`; target.scene.queueMessage(i18next.t("moveTriggers:attackedByItem", {pokemoneName: getPokemonNameWithAffix(target), itemName: itemName}));
target.scene.queueMessage(getPokemonMessage(target, attackedByItemString));
return true; return true;
}; };
@ -5524,7 +5522,7 @@ const failIfDampCondition: MoveConditionFunc = (user, target, move) => {
user.scene.getField(true).map(p=>applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled)); user.scene.getField(true).map(p=>applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled));
// Queue a message if an ability prevented usage of the move // Queue a message if an ability prevented usage of the move
if (cancelled.value) { if (cancelled.value) {
user.scene.queueMessage(getPokemonMessage(user, ` cannot use ${move.name}!`)); user.scene.queueMessage(i18next.t("moveTriggers:cannotUseMove", {pokemonName: getPokemonNameWithAffix(user), moveName: move.name}));
} }
return !cancelled.value; return !cancelled.value;
}; };
@ -5692,7 +5690,7 @@ export function initMoves() {
.attr(OneHitKOAttr) .attr(OneHitKOAttr)
.attr(OneHitKOAccuracyAttr), .attr(OneHitKOAccuracyAttr),
new AttackMove(Moves.RAZOR_WIND, Type.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 1) new AttackMove(Moves.RAZOR_WIND, Type.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 1)
.attr(ChargeAttr, ChargeAnim.RAZOR_WIND_CHARGING, "whipped\nup a whirlwind!") .attr(ChargeAttr, ChargeAnim.RAZOR_WIND_CHARGING, i18next.t("moveTriggers:whippedUpAWhirlwind", {pokemonName: "{USER}"}))
.attr(HighCritAttr) .attr(HighCritAttr)
.windMove() .windMove()
.ignoresVirtual() .ignoresVirtual()
@ -5712,7 +5710,7 @@ export function initMoves() {
.hidesTarget() .hidesTarget()
.windMove(), .windMove(),
new AttackMove(Moves.FLY, Type.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, 0, 1) new AttackMove(Moves.FLY, Type.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, 0, 1)
.attr(ChargeAttr, ChargeAnim.FLY_CHARGING, "flew\nup high!", BattlerTagType.FLYING) .attr(ChargeAttr, ChargeAnim.FLY_CHARGING, i18next.t("moveTriggers:flewUpHigh", {pokemonName: "{USER}"}), BattlerTagType.FLYING)
.condition(failOnGravityCondition) .condition(failOnGravityCondition)
.ignoresVirtual(), .ignoresVirtual(),
new AttackMove(Moves.BIND, Type.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) new AttackMove(Moves.BIND, Type.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1)
@ -5859,7 +5857,7 @@ export function initMoves() {
.slicingMove() .slicingMove()
.target(MoveTarget.ALL_NEAR_ENEMIES), .target(MoveTarget.ALL_NEAR_ENEMIES),
new AttackMove(Moves.SOLAR_BEAM, Type.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) new AttackMove(Moves.SOLAR_BEAM, Type.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1)
.attr(SunlightChargeAttr, ChargeAnim.SOLAR_BEAM_CHARGING, "took\nin sunlight!") .attr(SunlightChargeAttr, ChargeAnim.SOLAR_BEAM_CHARGING, i18next.t("moveTriggers:tookInSunlight", {pokemonName: "{USER}"}))
.attr(AntiSunlightPowerDecreaseAttr) .attr(AntiSunlightPowerDecreaseAttr)
.ignoresVirtual(), .ignoresVirtual(),
new StatusMove(Moves.POISON_POWDER, Type.POISON, 75, 35, -1, 0, 1) new StatusMove(Moves.POISON_POWDER, Type.POISON, 75, 35, -1, 0, 1)
@ -5907,7 +5905,7 @@ export function initMoves() {
.attr(HitsTagAttr, BattlerTagType.UNDERGROUND, false) .attr(HitsTagAttr, BattlerTagType.UNDERGROUND, false)
.makesContact(false), .makesContact(false),
new AttackMove(Moves.DIG, Type.GROUND, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1) new AttackMove(Moves.DIG, Type.GROUND, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1)
.attr(ChargeAttr, ChargeAnim.DIG_CHARGING, "dug a hole!", BattlerTagType.UNDERGROUND) .attr(ChargeAttr, ChargeAnim.DIG_CHARGING, i18next.t("moveTriggers:dugAHole", {pokemonName: "{USER}"}), BattlerTagType.UNDERGROUND)
.ignoresVirtual(), .ignoresVirtual(),
new StatusMove(Moves.TOXIC, Type.POISON, 90, 10, -1, 0, 1) new StatusMove(Moves.TOXIC, Type.POISON, 90, 10, -1, 0, 1)
.attr(StatusEffectAttr, StatusEffect.TOXIC) .attr(StatusEffectAttr, StatusEffect.TOXIC)
@ -6003,7 +6001,7 @@ export function initMoves() {
new AttackMove(Moves.SWIFT, Type.NORMAL, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 1) new AttackMove(Moves.SWIFT, Type.NORMAL, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 1)
.target(MoveTarget.ALL_NEAR_ENEMIES), .target(MoveTarget.ALL_NEAR_ENEMIES),
new AttackMove(Moves.SKULL_BASH, Type.NORMAL, MoveCategory.PHYSICAL, 130, 100, 10, -1, 0, 1) new AttackMove(Moves.SKULL_BASH, Type.NORMAL, MoveCategory.PHYSICAL, 130, 100, 10, -1, 0, 1)
.attr(ChargeAttr, ChargeAnim.SKULL_BASH_CHARGING, "lowered\nits head!", null, true) .attr(ChargeAttr, ChargeAnim.SKULL_BASH_CHARGING, i18next.t("moveTriggers:loweredItsHead", {pokemonName: "{USER}"}), null, true)
.attr(StatChangeAttr, BattleStat.DEF, 1, true) .attr(StatChangeAttr, BattleStat.DEF, 1, true)
.ignoresVirtual(), .ignoresVirtual(),
new AttackMove(Moves.SPIKE_CANNON, Type.NORMAL, MoveCategory.PHYSICAL, 20, 100, 15, -1, 0, 1) new AttackMove(Moves.SPIKE_CANNON, Type.NORMAL, MoveCategory.PHYSICAL, 20, 100, 15, -1, 0, 1)
@ -6042,7 +6040,7 @@ export function initMoves() {
new StatusMove(Moves.LOVELY_KISS, Type.NORMAL, 75, 10, -1, 0, 1) new StatusMove(Moves.LOVELY_KISS, Type.NORMAL, 75, 10, -1, 0, 1)
.attr(StatusEffectAttr, StatusEffect.SLEEP), .attr(StatusEffectAttr, StatusEffect.SLEEP),
new AttackMove(Moves.SKY_ATTACK, Type.FLYING, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 1) new AttackMove(Moves.SKY_ATTACK, Type.FLYING, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 1)
.attr(ChargeAttr, ChargeAnim.SKY_ATTACK_CHARGING, "is glowing!") .attr(ChargeAttr, ChargeAnim.SKY_ATTACK_CHARGING, i18next.t("moveTriggers:isGlowing", {pokemonName: "{USER}"}))
.attr(HighCritAttr) .attr(HighCritAttr)
.attr(FlinchAttr) .attr(FlinchAttr)
.makesContact(false) .makesContact(false)
@ -6245,7 +6243,7 @@ export function initMoves() {
.target(MoveTarget.ALL_ENEMIES) .target(MoveTarget.ALL_ENEMIES)
.ignoresVirtual(), .ignoresVirtual(),
new StatusMove(Moves.HEAL_BELL, Type.NORMAL, -1, 5, -1, 0, 2) new StatusMove(Moves.HEAL_BELL, Type.NORMAL, -1, 5, -1, 0, 2)
.attr(PartyStatusCureAttr, "A bell chimed!", Abilities.SOUNDPROOF) .attr(PartyStatusCureAttr, i18next.t("moveTriggers:bellChimed"), Abilities.SOUNDPROOF)
.soundBased() .soundBased()
.target(MoveTarget.PARTY), .target(MoveTarget.PARTY),
new AttackMove(Moves.RETURN, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 2) new AttackMove(Moves.RETURN, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 2)
@ -6348,7 +6346,7 @@ export function initMoves() {
.attr(StatChangeAttr, BattleStat.SPDEF, -1) .attr(StatChangeAttr, BattleStat.SPDEF, -1)
.ballBombMove(), .ballBombMove(),
new AttackMove(Moves.FUTURE_SIGHT, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 2) new AttackMove(Moves.FUTURE_SIGHT, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 2)
.attr(DelayedAttackAttr, ArenaTagType.FUTURE_SIGHT, ChargeAnim.FUTURE_SIGHT_CHARGING, "foresaw\nan attack!"), .attr(DelayedAttackAttr, ArenaTagType.FUTURE_SIGHT, ChargeAnim.FUTURE_SIGHT_CHARGING, i18next.t("moveTriggers:foresawAnAttack", {pokemonName: "{USER}"})),
new AttackMove(Moves.ROCK_SMASH, Type.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 15, 50, 0, 2) new AttackMove(Moves.ROCK_SMASH, Type.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 15, 50, 0, 2)
.attr(StatChangeAttr, BattleStat.DEF, -1), .attr(StatChangeAttr, BattleStat.DEF, -1),
new AttackMove(Moves.WHIRLPOOL, Type.WATER, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 2) new AttackMove(Moves.WHIRLPOOL, Type.WATER, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 2)
@ -6464,7 +6462,7 @@ export function initMoves() {
.makesContact(false) .makesContact(false)
.partial(), .partial(),
new AttackMove(Moves.DIVE, Type.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 3) new AttackMove(Moves.DIVE, Type.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 3)
.attr(ChargeAttr, ChargeAnim.DIVE_CHARGING, "hid\nunderwater!", BattlerTagType.UNDERWATER) .attr(ChargeAttr, ChargeAnim.DIVE_CHARGING, i18next.t("moveTriggers:hidUnderwater", {pokemonName: "{USER}"}), BattlerTagType.UNDERWATER)
.ignoresVirtual(), .ignoresVirtual(),
new AttackMove(Moves.ARM_THRUST, Type.FIGHTING, MoveCategory.PHYSICAL, 15, 100, 20, -1, 0, 3) new AttackMove(Moves.ARM_THRUST, Type.FIGHTING, MoveCategory.PHYSICAL, 15, 100, 20, -1, 0, 3)
.attr(MultiHitAttr), .attr(MultiHitAttr),
@ -6520,7 +6518,7 @@ export function initMoves() {
.attr(MovePowerMultiplierAttr, (user, target, move) => [WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN].includes(user.scene.arena.weather?.weatherType) && !user.scene.arena.weather?.isEffectSuppressed(user.scene) ? 2 : 1) .attr(MovePowerMultiplierAttr, (user, target, move) => [WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN].includes(user.scene.arena.weather?.weatherType) && !user.scene.arena.weather?.isEffectSuppressed(user.scene) ? 2 : 1)
.ballBombMove(), .ballBombMove(),
new StatusMove(Moves.AROMATHERAPY, Type.GRASS, -1, 5, -1, 0, 3) new StatusMove(Moves.AROMATHERAPY, Type.GRASS, -1, 5, -1, 0, 3)
.attr(PartyStatusCureAttr, "A soothing aroma wafted through the area!", Abilities.SAP_SIPPER) .attr(PartyStatusCureAttr, i18next.t("moveTriggers:soothingAromaWaftedThroughArea"), Abilities.SAP_SIPPER)
.target(MoveTarget.PARTY), .target(MoveTarget.PARTY),
new StatusMove(Moves.FAKE_TEARS, Type.DARK, 100, 20, -1, 0, 3) new StatusMove(Moves.FAKE_TEARS, Type.DARK, 100, 20, -1, 0, 3)
.attr(StatChangeAttr, BattleStat.SPDEF, -2), .attr(StatChangeAttr, BattleStat.SPDEF, -2),
@ -6595,7 +6593,7 @@ export function initMoves() {
new SelfStatusMove(Moves.BULK_UP, Type.FIGHTING, -1, 20, -1, 0, 3) new SelfStatusMove(Moves.BULK_UP, Type.FIGHTING, -1, 20, -1, 0, 3)
.attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.DEF ], 1, true), .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.DEF ], 1, true),
new AttackMove(Moves.BOUNCE, Type.FLYING, MoveCategory.PHYSICAL, 85, 85, 5, 30, 0, 3) new AttackMove(Moves.BOUNCE, Type.FLYING, MoveCategory.PHYSICAL, 85, 85, 5, 30, 0, 3)
.attr(ChargeAttr, ChargeAnim.BOUNCE_CHARGING, "sprang up!", BattlerTagType.FLYING) .attr(ChargeAttr, ChargeAnim.BOUNCE_CHARGING, i18next.t("moveTriggers:sprangUp", {pokemonName: "{USER}"}), BattlerTagType.FLYING)
.attr(StatusEffectAttr, StatusEffect.PARALYSIS) .attr(StatusEffectAttr, StatusEffect.PARALYSIS)
.condition(failOnGravityCondition) .condition(failOnGravityCondition)
.ignoresVirtual(), .ignoresVirtual(),
@ -6631,7 +6629,7 @@ export function initMoves() {
.attr(ConfuseAttr) .attr(ConfuseAttr)
.pulseMove(), .pulseMove(),
new AttackMove(Moves.DOOM_DESIRE, Type.STEEL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 3) new AttackMove(Moves.DOOM_DESIRE, Type.STEEL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 3)
.attr(DelayedAttackAttr, ArenaTagType.DOOM_DESIRE, ChargeAnim.DOOM_DESIRE_CHARGING, "chose\nDoom Desire as its destiny!"), .attr(DelayedAttackAttr, ArenaTagType.DOOM_DESIRE, ChargeAnim.DOOM_DESIRE_CHARGING, i18next.t("moveTriggers:choseDoomDesireAsDestiny", {pokemonName: "{USER}"})),
new AttackMove(Moves.PSYCHO_BOOST, Type.PSYCHIC, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 3) new AttackMove(Moves.PSYCHO_BOOST, Type.PSYCHIC, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 3)
.attr(StatChangeAttr, BattleStat.SPATK, -2, true), .attr(StatChangeAttr, BattleStat.SPATK, -2, true),
new SelfStatusMove(Moves.ROOST, Type.FLYING, -1, 5, -1, 0, 4) new SelfStatusMove(Moves.ROOST, Type.FLYING, -1, 5, -1, 0, 4)
@ -6943,7 +6941,7 @@ export function initMoves() {
.attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD ], 1, true) .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD ], 1, true)
.windMove(), .windMove(),
new AttackMove(Moves.SHADOW_FORCE, Type.GHOST, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) new AttackMove(Moves.SHADOW_FORCE, Type.GHOST, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4)
.attr(ChargeAttr, ChargeAnim.SHADOW_FORCE_CHARGING, "vanished\ninstantly!", BattlerTagType.HIDDEN) .attr(ChargeAttr, ChargeAnim.SHADOW_FORCE_CHARGING, i18next.t("moveTriggers:vanishedInstantly", {pokemonName: "{USER}"}), BattlerTagType.HIDDEN)
.ignoresProtect() .ignoresProtect()
.ignoresVirtual(), .ignoresVirtual(),
new SelfStatusMove(Moves.HONE_CLAWS, Type.DARK, -1, 15, -1, 0, 5) new SelfStatusMove(Moves.HONE_CLAWS, Type.DARK, -1, 15, -1, 0, 5)
@ -7058,7 +7056,7 @@ export function initMoves() {
MovePowerMultiplierAttr, MovePowerMultiplierAttr,
(user, target, move) => target.status || target.hasAbility(Abilities.COMATOSE)? 2 : 1), (user, target, move) => target.status || target.hasAbility(Abilities.COMATOSE)? 2 : 1),
new AttackMove(Moves.SKY_DROP, Type.FLYING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) new AttackMove(Moves.SKY_DROP, Type.FLYING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5)
.attr(ChargeAttr, ChargeAnim.SKY_DROP_CHARGING, "took {TARGET}\ninto the sky!", BattlerTagType.FLYING) // TODO: Add 2nd turn message .attr(ChargeAttr, ChargeAnim.SKY_DROP_CHARGING, i18next.t("moveTriggers:tookTargetIntoSky", {pokemonName: "{USER}", targetName: "{TARGET}"}), BattlerTagType.FLYING) // TODO: Add 2nd turn message
.condition(failOnGravityCondition) .condition(failOnGravityCondition)
.ignoresVirtual(), .ignoresVirtual(),
new SelfStatusMove(Moves.SHIFT_GEAR, Type.STEEL, -1, 10, -1, 0, 5) new SelfStatusMove(Moves.SHIFT_GEAR, Type.STEEL, -1, 10, -1, 0, 5)
@ -7178,11 +7176,11 @@ export function initMoves() {
.attr(StatChangeAttr, BattleStat.SPATK, 1, true) .attr(StatChangeAttr, BattleStat.SPATK, 1, true)
.danceMove(), .danceMove(),
new AttackMove(Moves.FREEZE_SHOCK, Type.ICE, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 5) new AttackMove(Moves.FREEZE_SHOCK, Type.ICE, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 5)
.attr(ChargeAttr, ChargeAnim.FREEZE_SHOCK_CHARGING, "became cloaked\nin a freezing light!") .attr(ChargeAttr, ChargeAnim.FREEZE_SHOCK_CHARGING, i18next.t("moveTriggers:becameCloakedInFreezingLight", {pokemonName: "{USER}"}))
.attr(StatusEffectAttr, StatusEffect.PARALYSIS) .attr(StatusEffectAttr, StatusEffect.PARALYSIS)
.makesContact(false), .makesContact(false),
new AttackMove(Moves.ICE_BURN, Type.ICE, MoveCategory.SPECIAL, 140, 90, 5, 30, 0, 5) new AttackMove(Moves.ICE_BURN, Type.ICE, MoveCategory.SPECIAL, 140, 90, 5, 30, 0, 5)
.attr(ChargeAttr, ChargeAnim.ICE_BURN_CHARGING, "became cloaked\nin freezing air!") .attr(ChargeAttr, ChargeAnim.ICE_BURN_CHARGING, i18next.t("moveTriggers:becameCloakedInFreezingAir", {pokemonName: "{USER}"}))
.attr(StatusEffectAttr, StatusEffect.BURN) .attr(StatusEffectAttr, StatusEffect.BURN)
.ignoresVirtual(), .ignoresVirtual(),
new AttackMove(Moves.SNARL, Type.DARK, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5) new AttackMove(Moves.SNARL, Type.DARK, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5)
@ -7224,7 +7222,7 @@ export function initMoves() {
new AttackMove(Moves.FELL_STINGER, Type.BUG, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 6) new AttackMove(Moves.FELL_STINGER, Type.BUG, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 6)
.attr(PostVictoryStatChangeAttr, BattleStat.ATK, 3, true ), .attr(PostVictoryStatChangeAttr, BattleStat.ATK, 3, true ),
new AttackMove(Moves.PHANTOM_FORCE, Type.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) new AttackMove(Moves.PHANTOM_FORCE, Type.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6)
.attr(ChargeAttr, ChargeAnim.PHANTOM_FORCE_CHARGING, "vanished\ninstantly!", BattlerTagType.HIDDEN) .attr(ChargeAttr, ChargeAnim.PHANTOM_FORCE_CHARGING, i18next.t("moveTriggers:vanishedInstantly", {pokemonName: "{USER}"}), BattlerTagType.HIDDEN)
.ignoresProtect() .ignoresProtect()
.ignoresVirtual(), .ignoresVirtual(),
new StatusMove(Moves.TRICK_OR_TREAT, Type.GHOST, 100, 20, -1, 0, 6) new StatusMove(Moves.TRICK_OR_TREAT, Type.GHOST, 100, 20, -1, 0, 6)
@ -7326,7 +7324,7 @@ export function initMoves() {
.powderMove() .powderMove()
.unimplemented(), .unimplemented(),
new SelfStatusMove(Moves.GEOMANCY, Type.FAIRY, -1, 10, -1, 0, 6) new SelfStatusMove(Moves.GEOMANCY, Type.FAIRY, -1, 10, -1, 0, 6)
.attr(ChargeAttr, ChargeAnim.GEOMANCY_CHARGING, "is charging its power!") .attr(ChargeAttr, ChargeAnim.GEOMANCY_CHARGING, i18next.t("moveTriggers:isChargingPower", {pokemonName: "{USER}"}))
.attr(StatChangeAttr, [ BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD ], 2, true) .attr(StatChangeAttr, [ BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD ], 2, true)
.ignoresVirtual(), .ignoresVirtual(),
new StatusMove(Moves.MAGNETIC_FLUX, Type.ELECTRIC, -1, 20, -1, 0, 6) new StatusMove(Moves.MAGNETIC_FLUX, Type.ELECTRIC, -1, 20, -1, 0, 6)
@ -7531,7 +7529,7 @@ export function initMoves() {
.condition((user, target, move) => target.summonData.battleStats[BattleStat.ATK] > -6) .condition((user, target, move) => target.summonData.battleStats[BattleStat.ATK] > -6)
.triageMove(), .triageMove(),
new AttackMove(Moves.SOLAR_BLADE, Type.GRASS, MoveCategory.PHYSICAL, 125, 100, 10, -1, 0, 7) new AttackMove(Moves.SOLAR_BLADE, Type.GRASS, MoveCategory.PHYSICAL, 125, 100, 10, -1, 0, 7)
.attr(SunlightChargeAttr, ChargeAnim.SOLAR_BLADE_CHARGING, "is glowing!") .attr(SunlightChargeAttr, ChargeAnim.SOLAR_BLADE_CHARGING, i18next.t("moveTriggers:isGlowing", {pokemonName: "{USER}"}))
.attr(AntiSunlightPowerDecreaseAttr) .attr(AntiSunlightPowerDecreaseAttr)
.slicingMove(), .slicingMove(),
new AttackMove(Moves.LEAFAGE, Type.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 7) new AttackMove(Moves.LEAFAGE, Type.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 7)
@ -7571,7 +7569,7 @@ export function initMoves() {
}) })
.attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE)
.attr(RemoveTypeAttr, Type.FIRE, (user) => { .attr(RemoveTypeAttr, Type.FIRE, (user) => {
user.scene.queueMessage(getPokemonMessage(user, " burned itself out!")); user.scene.queueMessage(i18next.t("moveTriggers:burnedItselfOut", {pokemonName: getPokemonNameWithAffix(user)}));
}), }),
new StatusMove(Moves.SPEED_SWAP, Type.PSYCHIC, -1, 10, -1, 0, 7) new StatusMove(Moves.SPEED_SWAP, Type.PSYCHIC, -1, 10, -1, 0, 7)
.unimplemented(), .unimplemented(),
@ -7593,7 +7591,7 @@ export function initMoves() {
new StatusMove(Moves.INSTRUCT, Type.PSYCHIC, -1, 15, -1, 0, 7) new StatusMove(Moves.INSTRUCT, Type.PSYCHIC, -1, 15, -1, 0, 7)
.unimplemented(), .unimplemented(),
new AttackMove(Moves.BEAK_BLAST, Type.FLYING, MoveCategory.PHYSICAL, 100, 100, 15, -1, 5, 7) new AttackMove(Moves.BEAK_BLAST, Type.FLYING, MoveCategory.PHYSICAL, 100, 100, 15, -1, 5, 7)
.attr(ChargeAttr, ChargeAnim.BEAK_BLAST_CHARGING, "started\nheating up its beak!", undefined, false, true, -3) .attr(ChargeAttr, ChargeAnim.BEAK_BLAST_CHARGING, i18next.t("moveTriggers:startedHeatingUpBeak", {pokemonName: "{USER}"}), undefined, false, true, -3)
.ballBombMove() .ballBombMove()
.makesContact(false) .makesContact(false)
.partial(), .partial(),
@ -7950,7 +7948,7 @@ export function initMoves() {
.makesContact(false) .makesContact(false)
.partial(), .partial(),
new AttackMove(Moves.METEOR_BEAM, Type.ROCK, MoveCategory.SPECIAL, 120, 90, 10, 100, 0, 8) new AttackMove(Moves.METEOR_BEAM, Type.ROCK, MoveCategory.SPECIAL, 120, 90, 10, 100, 0, 8)
.attr(ChargeAttr, ChargeAnim.METEOR_BEAM_CHARGING, "is overflowing\nwith space power!", null, true) .attr(ChargeAttr, ChargeAnim.METEOR_BEAM_CHARGING, i18next.t("moveTriggers:isOverflowingWithSpacePower", {pokemonName: "{USER}"}), null, true)
.attr(StatChangeAttr, BattleStat.SPATK, 1, true) .attr(StatChangeAttr, BattleStat.SPATK, 1, true)
.ignoresVirtual(), .ignoresVirtual(),
new AttackMove(Moves.SHELL_SIDE_ARM, Type.POISON, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8) new AttackMove(Moves.SHELL_SIDE_ARM, Type.POISON, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8)
@ -8342,7 +8340,7 @@ export function initMoves() {
return userTypes.includes(Type.ELECTRIC); return userTypes.includes(Type.ELECTRIC);
}) })
.attr(RemoveTypeAttr, Type.ELECTRIC, (user) => { .attr(RemoveTypeAttr, Type.ELECTRIC, (user) => {
user.scene.queueMessage(getPokemonMessage(user, " used up all its electricity!")); user.scene.queueMessage(i18next.t("moveTriggers:usedUpAllElectricity", {pokemonName: getPokemonNameWithAffix(user)}));
}), }),
new AttackMove(Moves.GIGATON_HAMMER, Type.STEEL, MoveCategory.PHYSICAL, 160, 100, 5, -1, 0, 9) new AttackMove(Moves.GIGATON_HAMMER, Type.STEEL, MoveCategory.PHYSICAL, 160, 100, 5, -1, 0, 9)
.makesContact(false) .makesContact(false)

View File

@ -47,6 +47,7 @@ import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
import { moveTriggers } from "./move-trigger";
export const deConfig = { export const deConfig = {
ability: ability, ability: ability,
@ -99,5 +100,6 @@ export const deConfig = {
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler, partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler modifierSelectUiHandler: modifierSelectUiHandler,
moveTriggers: moveTriggers
}; };

View File

@ -0,0 +1,53 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const moveTriggers: SimpleTranslationEntries = {
"hitWithRecoil" : "{{pokemonName}} erleidet Schaden durch Rückstoß!",
"cutHpPowerUpMove": "{{pokemonName}} nutzt seine KP um seine Attacke zu verstärken!",
"absorbedElectricity": "{{pokemonName}} absorbiert elektrische Energie!",
"switchedStatChanges": "{{pokemonName}}tauschte die Statuswerteveränderungen mit dem Ziel!",
"goingAllOutForAttack": "{{pokemonName}}legt sich ins Zeug!",
"regainedHealth": "{{pokemonName}} erholt sich!",
"keptGoingAndCrashed": "{{pokemonName}} springt daneben und verletzt sich!",
"fled": "{{pokemonName}} ist geflüchtet!",
"cannotBeSwitchedOut": "{{pokemonName}} kann nicht ausgewechselt werden!",
"swappedAbilitiesWithTarget": "{{pokemonName}} tauscht Fähigkeiten mit dem Ziel!",
"coinsScatteredEverywhere": "Es sind überall Münzen verstreut!",
"attackedByItem": "{{pokemonName}} wird von seinem Item {{itemName}} angegriffen!",
"whippedUpAWhirlwind": "{{pokemonName}} erzeugt eine Windböe!",
"flewUpHigh": "{{pokemonName}} fliegt hoch empor!",
"tookInSunlight": "{{pokemonName}} absorbiert Sonnenlicht!",
"dugAHole": "{{pokemonName}} vergräbt sich in der Erde!",
"loweredItsHead": "{{pokemonName}} zieht seinen Kopf ein!",
"isGlowing": "{{pokemonName}} leuchtet grell!",
"bellChimed": "Eine Glocke läutet!",
"foresawAnAttack": "{{pokemonName}} sieht einen Angriff voraus!",
"hidUnderwater": "{{pokemonName}} taucht unter!",
"soothingAromaWaftedThroughArea": "Ein wohltuendes Aroma breitet sich aus!",
"sprangUp": "{{pokemonName}} springt hoch in die Luft!",
"choseDoomDesireAsDestiny": "{{pokemonName}} äußert einen Kismetwunsch für die Zukunft!",
"vanishedInstantly": "{{pokemonName}} verschwindet augenblicklich!",
"tookTargetIntoSky": "{{pokemonName}} entführt {{targetName}} in luftige Höhen!",
"becameCloakedInFreezingLight": "{{pokemonName}} wird von einem kühlen Licht umhüllt!",
"becameCloakedInFreezingAir": "{{pokemonName}} wird in klirrend kalte Luft gehüllt!",
"isChargingPower": "{{pokemonName}} saugt Kraft in sich auf!",
"burnedItselfOut": "{{pokemonName}} braucht sein Feuer komplett auf!",
"startedHeatingUpBeak": "{{pokemonName}} erhitzt seinen Schnabel!",
"isOverflowingWithSpacePower": "Kosmische Kräfte strömen aus {{pokemonName}}!",
"usedUpAllElectricity": "{{pokemonName}} braucht seinen Strom komplett auf!",
"stoleItem": "{{pokemonName}} hat {{targetName}} das Item {{itemName}} geklaut!",
"incineratedItem": "{{itemName}} von {{targetName}} ist verbrannt und somit nutzlos geworden!",
"knockedOffItem": "{{pokemonName}} schlägt das Item {{itemName}} von {{targetName}} weg!",
"tookMoveAttack": "{{pokemonName}} wurde von {{moveName}} getroffen!",
"cutOwnHpAndMaximizedStat": "{{pokemonName}} nutzt seine KP und maximiert dadurch seinen {{stateName}}-Wert!",
"copiedStatChanges": "{{pokemonName}} kopiert die Statusveränderungen von {{targetName}}!",
"magnitudeMessage": "Intensität {{magnitude}}!",
"tookAimAtTarget": "{{pokemonName}} zielt auf {{targetName}}!",
"transformedIntoType": "{{pokemonName}} nimmt den Typ {{typeName}} an!",
"copiedMove": "{{pokemonName}} kopiert {{moveName}}!",
"sketchedMove": "{{pokemonName}} ahmt die Attacke {{moveName}} nach!",
"acquiredAbility": "The {{pokemonName}} nimmt die Fähigkeit {{abilityName}} an!",
"copiedTargetAbility": "{{pokemonName}} kopiert{{abilityName}} von {{targerName}}!",
"transformedIntoTarget": "{{pokemonName}} verwandelt sich in {{targetName}}!",
"tryingToTakeFoeDown": "{{pokemonName}} versucht, den Angreifer mit sich zu nehmen!",
"cannotUseMove": "{{pokemonName}} kann {{moveName}} nicht einsetzen!"
} as const;

View File

@ -47,6 +47,7 @@ import { tutorial } from "./tutorial";
import { voucher } from "./voucher"; import { voucher } from "./voucher";
import { terrain, weather } from "./weather"; import { terrain, weather } from "./weather";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
import { moveTriggers } from "./move-trigger";
export const enConfig = { export const enConfig = {
ability: ability, ability: ability,
@ -99,5 +100,6 @@ export const enConfig = {
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler, partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler modifierSelectUiHandler: modifierSelectUiHandler,
moveTriggers: moveTriggers
}; };

View File

@ -0,0 +1,53 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const moveTriggers: SimpleTranslationEntries = {
"hitWithRecoil" : "{{pokemonName}} was damaged by the recoil!",
"cutHpPowerUpMove": "{{pokemonName}} cut its own HP to power up its move!",
"absorbedElectricity": "{{pokemonName}} absorbed electricity!",
"switchedStatChanges": "{{pokemonName}} switched stat changes with the target!",
"goingAllOutForAttack": "{{pokemonName}} is going all out for this attack!",
"regainedHealth": "{{pokemonName}} regained\nhealth!",
"keptGoingAndCrashed": "{{pokemonName}} kept going\nand crashed!",
"fled": "{{pokemonName}} fled!",
"cannotBeSwitchedOut": "{{pokemonName}} can't be switched out!",
"swappedAbilitiesWithTarget": "{{pokemonName}} swapped\nabilities with its target!",
"coinsScatteredEverywhere": "Coins were scattered everywhere!",
"attackedByItem": "{{pokemonName}} is about to be attacked by its {{itemName}}!",
"whippedUpAWhirlwind": "{{pokemonName}} whipped\nup a whirlwind!",
"flewUpHigh": "{{pokemonName}} flew\nup high!",
"tookInSunlight": "{{pokemonName}} absorbed light!",
"dugAHole": "{{pokemonName}} burrowed its way under the ground!",
"loweredItsHead": "{{pokemonName}} tucked in its head!",
"isGlowing": "{{pokemonName}} became cloaked in a harsh light!",
"bellChimed": "A bell chimed!",
"foresawAnAttack": "{{pokemonName}} foresaw\nan attack!",
"hidUnderwater": "{{pokemonName}} hid\nunderwater!",
"soothingAromaWaftedThroughArea": "A soothing aroma wafted through the area!",
"sprangUp": "{{pokemonName}} sprang up!",
"choseDoomDesireAsDestiny": "{{pokemonName}} chose\nDoom Desire as its destiny!",
"vanishedInstantly": "{{pokemonName}} vanished\ninstantly!",
"tookTargetIntoSky": "{{pokemonName}} took {{targetName}}\ninto the sky!",
"becameCloakedInFreezingLight": "{{pokemonName}} became cloaked\nin a freezing light!",
"becameCloakedInFreezingAir": "{{pokemonName}} became cloaked\nin freezing air!",
"isChargingPower": "{{pokemonName}} is absorbing power!",
"burnedItselfOut": "{{pokemonName}} burned itself out!",
"startedHeatingUpBeak": "{{pokemonName}} started\nheating up its beak!",
"isOverflowingWithSpacePower": "{{pokemonName}} is overflowing\nwith space power!",
"usedUpAllElectricity": "{{pokemonName}} used up all its electricity!",
"stoleItem": "{{pokemonName}} stole\n{{targetName}}'s {{itemName}}!",
"incineratedItem": "{{pokemonName}} incinerated\n{{targetName}}'s {{itemName}}!",
"knockedOffItem": "{{pokemonName}} knocked off\n{{targetName}}'s {{itemName}}!",
"tookMoveAttack": "{{pokemonName}} took\nthe {{moveName}} attack!",
"cutOwnHpAndMaximizedStat": "{{pokemonName}} cut its own HP\nand maximized its {{stateName}}!",
"copiedStatChanges": "{{pokemonName}} copied\n{{targetName}}'s stat changes!",
"magnitudeMessage": "Magnitude {{magnitude}}!",
"tookAimAtTarget": "{{pokemonName}} took aim\nat {{targetName}}!",
"transformedIntoType": "{{pokemonName}} transformed\ninto the {{typeName}} type!",
"copiedMove": "{{pokemonName}} copied\n{{moveName}}!",
"sketchedMove": "{{pokemonName}} sketched\n{{moveName}}!",
"acquiredAbility": "The {{pokemonName}} acquired\n{{abilityName}}!",
"copiedTargetAbility": "{{pokemonName}} copied the {{targerName}}'s\n{{abilityName}}!",
"transformedIntoTarget": "{{pokemonName}} transformed\ninto {{targetName}}!",
"tryingToTakeFoeDown": "{{pokemonName}} is hoping to take its attacker down with it!",
"cannotUseMove": "{{pokemonName}} cannot use {{moveName}}!"
} as const;

View File

@ -47,6 +47,7 @@ import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
import { moveTriggers } from "./move-trigger";
export const esConfig = { export const esConfig = {
ability: ability, ability: ability,
@ -99,5 +100,6 @@ export const esConfig = {
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler, partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler modifierSelectUiHandler: modifierSelectUiHandler,
moveTriggers: moveTriggers
}; };

View File

@ -0,0 +1,53 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const moveTriggers: SimpleTranslationEntries = {
"hitWithRecoil" : "{{pokemonName}} was damaged by the recoil!",
"cutHpPowerUpMove": "{{pokemonName}} cut its own HP to power up its move!",
"absorbedElectricity": "{{pokemonName}} absorbed electricity!",
"switchedStatChanges": "{{pokemonName}} switched stat changes with the target!",
"goingAllOutForAttack": "{{pokemonName}} is going all out for this attack!",
"regainedHealth": "{{pokemonName}} regained\nhealth!",
"keptGoingAndCrashed": "{{pokemonName}} kept going\nand crashed!",
"fled": "{{pokemonName}} fled!",
"cannotBeSwitchedOut": "{{pokemonName}} can't be switched out!",
"swappedAbilitiesWithTarget": "{{pokemonName}} swapped\nabilities with its target!",
"coinsScatteredEverywhere": "Coins were scattered everywhere!",
"attackedByItem": "{{pokemonName}} is about to be attacked by its {{itemName}}!",
"whippedUpAWhirlwind": "{{pokemonName}} whipped\nup a whirlwind!",
"flewUpHigh": "{{pokemonName}} flew\nup high!",
"tookInSunlight": "{{pokemonName}} absorbed light!",
"dugAHole": "{{pokemonName}} burrowed its way under the ground!",
"loweredItsHead": "{{pokemonName}} tucked in its head!",
"isGlowing": "{{pokemonName}} became cloaked in a harsh light!",
"bellChimed": "A bell chimed!",
"foresawAnAttack": "{{pokemonName}} foresaw\nan attack!",
"hidUnderwater": "{{pokemonName}} hid\nunderwater!",
"soothingAromaWaftedThroughArea": "A soothing aroma wafted through the area!",
"sprangUp": "{{pokemonName}} sprang up!",
"choseDoomDesireAsDestiny": "{{pokemonName}} chose\nDoom Desire as its destiny!",
"vanishedInstantly": "{{pokemonName}} vanished\ninstantly!",
"tookTargetIntoSky": "{{pokemonName}} took {{targetName}}\ninto the sky!",
"becameCloakedInFreezingLight": "{{pokemonName}} became cloaked\nin a freezing light!",
"becameCloakedInFreezingAir": "{{pokemonName}} became cloaked\nin freezing air!",
"isChargingPower": "{{pokemonName}} is absorbing power!",
"burnedItselfOut": "{{pokemonName}} burned itself out!",
"startedHeatingUpBeak": "{{pokemonName}} started\nheating up its beak!",
"isOverflowingWithSpacePower": "{{pokemonName}} is overflowing\nwith space power!",
"usedUpAllElectricity": "{{pokemonName}} used up all its electricity!",
"stoleItem": "{{pokemonName}} stole\n{{targetName}}'s {{itemName}}!",
"incineratedItem": "{{pokemonName}} incinerated\n{{targetName}}'s {{itemName}}!",
"knockedOffItem": "{{pokemonName}} knocked off\n{{targetName}}'s {{itemName}}!",
"tookMoveAttack": "{{pokemonName}} took\nthe {{moveName}} attack!",
"cutOwnHpAndMaximizedStat": "{{pokemonName}} cut its own HP\nand maximized its {{stateName}}!",
"copiedStatChanges": "{{pokemonName}} copied\n{{targetName}}'s stat changes!",
"magnitudeMessage": "Magnitude {{magnitude}}!",
"tookAimAtTarget": "{{pokemonName}} took aim\nat {{targetName}}!",
"transformedIntoType": "{{pokemonName}} transformed\ninto the {{typeName}} type!",
"copiedMove": "{{pokemonName}} copied\n{{moveName}}!",
"sketchedMove": "{{pokemonName}} sketched\n{{moveName}}!",
"acquiredAbility": "The {{pokemonName}} acquired\n{{abilityName}}!",
"copiedTargetAbility": "{{pokemonName}} copied the {{targerName}}'s\n{{abilityName}}!",
"transformedIntoTarget": "{{pokemonName}} transformed\ninto {{targetName}}!",
"tryingToTakeFoeDown": "{{pokemonName}} is hoping to take its attacker down with it!",
"cannotUseMove": "{{pokemonName}} cannot use {{moveName}}!"
} as const;

View File

@ -47,6 +47,7 @@ import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
import { moveTriggers } from "./move-trigger";
export const frConfig = { export const frConfig = {
ability: ability, ability: ability,
@ -99,5 +100,6 @@ export const frConfig = {
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler, partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler modifierSelectUiHandler: modifierSelectUiHandler,
moveTriggers: moveTriggers
}; };

View File

@ -0,0 +1,53 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const moveTriggers: SimpleTranslationEntries = {
"hitWithRecoil" : "{{pokemonName}} est blessé par le contrecoup !",
"cutHpPowerUpMove": "{{pokemonName}} sacrifie des PV\net augmente la puissance ses capacités !",
"absorbedElectricity": "{{pokemonName}} absorbe de lélectricité !",
"switchedStatChanges": "{{pokemonName}} permute\nles changements de stats avec ceux de sa cible !",
"goingAllOutForAttack": "{{pokemonName}} a pris\ncette capacité au sérieux !",
"regainedHealth": "{{pokemonName}}\nrécupère des PV !",
"keptGoingAndCrashed": "{{pokemonName}}\nsécrase au sol !",
"fled": "{{pokemonName}}\nprend la fuite !",
"cannotBeSwitchedOut": "Impossible de rappeler {{pokemonName}}\nau combat.",
"swappedAbilitiesWithTarget": "{{pokemonName}} et sa cible\néchangent leurs talents !",
"coinsScatteredEverywhere": "Il pleut des pièces !",
"attackedByItem": "{{pokemonName}} est attaqué\npar son propre objet {{itemName}} !",
"whippedUpAWhirlwind": "{{pokemonName}}se prépare\nà lancer une bourrasque !",
"flewUpHigh": "{{pokemonName}} senvole !",
"tookInSunlight": "{{pokemonName}}\nabsorbe la lumière !",
"dugAHole": "{{pokemonName}}\nse cache dans le sol !",
"loweredItsHead": "{{pokemonName}}\nbaisse la tête !",
"isGlowing": "{{pokemonName}} est entouré\ndune lumière intense !",
"bellChimed": "Un grelot sonne !",
"foresawAnAttack": "{{pokemonName}\nprévoit une attaque !",
"hidUnderwater": "{{pokemonName}}\nse cache sous leau !",
"soothingAromaWaftedThroughArea": "Une odeur apaisante flotte dans lair !",
"sprangUp": "{{pokemonName}}\nse propulse dans les airs !",
"choseDoomDesireAsDestiny": "{{pokemonName}}souhaite\nle déclenchement de la capacité Vœu Destructeur !",
"vanishedInstantly": "{{pokemonName}}\ndisparait instantanément !",
"tookTargetIntoSky": "{{pokemonName}} emporte\n{{targetName}} haut dans le ciel !",
"becameCloakedInFreezingLight": "{{pokemonName}} est baigné\ndune lumière blafarde !",
"becameCloakedInFreezingAir": "{{pokemonName}} est entouré\ndun air glacial !",
"isChargingPower": "{{pokemonName}}\nconcentre son énergie !",
"burnedItselfOut": "Le feu intérieur de {{pokemonName}}\nsest entièrement consumé !",
"startedHeatingUpBeak": "{{pokemonName}}\nfait chauffer son bec !",
"isOverflowingWithSpacePower": "La puissance du cosmos afflue dans le corps\nde {{pokemonName}} !",
"usedUpAllElectricity": "{{pokemonName}}a utilisé\ntoute son électricité !",
"stoleItem": "{{pokemonName}} vole\nlobjet {{itemName}} de {{targetName}} !",
"incineratedItem": "{{pokemonName}} brule\nla {{itemName}} de {{targetName}} !",
"knockedOffItem": "{{pokemonName}} fait tomber\nlobjet {{itemName}} de {{targetName}} !",
"tookMoveAttack": "{{pokemonName}}\nsubit lattaque {{moveName}} !",
"cutOwnHpAndMaximizedStat": "{{pokemonName}} sacrifie des PV\net monte son {{stateName}} au maximum !",
"copiedStatChanges": "{{pokemonName}} copie\nles changements de stats de {{targetName}} !",
"magnitudeMessage": "Ampleur {{magnitude}} !",
"tookAimAtTarget": "{{pokemonName}} vise\n{{targetName}} !",
"transformedIntoType": "{{pokemonName}} prend\nle type {{typeName}} !",
"copiedMove": "{{pokemonName}} copie\nla capacité {{moveName}} !",
"sketchedMove": "{{pokemonName}} utilise Gribouille\npour copier {{moveName}} !",
"acquiredAbility": "Le talent de {{pokemonName}}\ndevient {{abilityName}} !",
"copiedTargetAbility": "{{pokemonName}} copie le talent\n{{abilityName}} de {{targerName}} !",
"transformedIntoTarget": "{{pokemonName}} prend\nlapparence de {{targetName}} !",
"tryingToTakeFoeDown": "{{pokemonName}} veut entrainer\nson assaillant dans sa chute !",
"cannotUseMove": "{{pokemonName}} ne peut pas\nutiliser la capacité {{moveName}} !"
} as const;

View File

@ -47,6 +47,7 @@ import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
import { moveTriggers } from "./move-trigger";
export const itConfig = { export const itConfig = {
ability: ability, ability: ability,
@ -99,5 +100,6 @@ export const itConfig = {
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler, partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler modifierSelectUiHandler: modifierSelectUiHandler,
moveTriggers: moveTriggers
}; };

View File

@ -0,0 +1,53 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const moveTriggers: SimpleTranslationEntries = {
"hitWithRecoil" : "{{pokemonName}} was damaged by the recoil!",
"cutHpPowerUpMove": "{{pokemonName}} cut its own HP to power up its move!",
"absorbedElectricity": "{{pokemonName}} absorbed electricity!",
"switchedStatChanges": "{{pokemonName}} switched stat changes with the target!",
"goingAllOutForAttack": "{{pokemonName}} is going all out for this attack!",
"regainedHealth": "{{pokemonName}} regained\nhealth!",
"keptGoingAndCrashed": "{{pokemonName}} kept going\nand crashed!",
"fled": "{{pokemonName}} fled!",
"cannotBeSwitchedOut": "{{pokemonName}} can't be switched out!",
"swappedAbilitiesWithTarget": "{{pokemonName}} swapped\nabilities with its target!",
"coinsScatteredEverywhere": "Coins were scattered everywhere!",
"attackedByItem": "{{pokemonName}} is about to be attacked by its {{itemName}}!",
"whippedUpAWhirlwind": "{{pokemonName}} whipped\nup a whirlwind!",
"flewUpHigh": "{{pokemonName}} flew\nup high!",
"tookInSunlight": "{{pokemonName}} absorbed light!",
"dugAHole": "{{pokemonName}} burrowed its way under the ground!",
"loweredItsHead": "{{pokemonName}} tucked in its head!",
"isGlowing": "{{pokemonName}} became cloaked in a harsh light!",
"bellChimed": "A bell chimed!",
"foresawAnAttack": "{{pokemonName}} foresaw\nan attack!",
"hidUnderwater": "{{pokemonName}} hid\nunderwater!",
"soothingAromaWaftedThroughArea": "A soothing aroma wafted through the area!",
"sprangUp": "{{pokemonName}} sprang up!",
"choseDoomDesireAsDestiny": "{{pokemonName}} chose\nDoom Desire as its destiny!",
"vanishedInstantly": "{{pokemonName}} vanished\ninstantly!",
"tookTargetIntoSky": "{{pokemonName}} took {{targetName}}\ninto the sky!",
"becameCloakedInFreezingLight": "{{pokemonName}} became cloaked\nin a freezing light!",
"becameCloakedInFreezingAir": "{{pokemonName}} became cloaked\nin freezing air!",
"isChargingPower": "{{pokemonName}} is absorbing power!",
"burnedItselfOut": "{{pokemonName}} burned itself out!",
"startedHeatingUpBeak": "{{pokemonName}} started\nheating up its beak!",
"isOverflowingWithSpacePower": "{{pokemonName}} is overflowing\nwith space power!",
"usedUpAllElectricity": "{{pokemonName}} used up all its electricity!",
"stoleItem": "{{pokemonName}} stole\n{{targetName}}'s {{itemName}}!",
"incineratedItem": "{{pokemonName}} incinerated\n{{targetName}}'s {{itemName}}!",
"knockedOffItem": "{{pokemonName}} knocked off\n{{targetName}}'s {{itemName}}!",
"tookMoveAttack": "{{pokemonName}} took\nthe {{moveName}} attack!",
"cutOwnHpAndMaximizedStat": "{{pokemonName}} cut its own HP\nand maximized its {{stateName}}!",
"copiedStatChanges": "{{pokemonName}} copied\n{{targetName}}'s stat changes!",
"magnitudeMessage": "Magnitude {{magnitude}}!",
"tookAimAtTarget": "{{pokemonName}} took aim\nat {{targetName}}!",
"transformedIntoType": "{{pokemonName}} transformed\ninto the {{typeName}} type!",
"copiedMove": "{{pokemonName}} copied\n{{moveName}}!",
"sketchedMove": "{{pokemonName}} sketched\n{{moveName}}!",
"acquiredAbility": "The {{pokemonName}} acquired\n{{abilityName}}!",
"copiedTargetAbility": "{{pokemonName}} copied the {{targerName}}'s\n{{abilityName}}!",
"transformedIntoTarget": "{{pokemonName}} transformed\ninto {{targetName}}!",
"tryingToTakeFoeDown": "{{pokemonName}} is hoping to take its attacker down with it!",
"cannotUseMove": "{{pokemonName}} cannot use {{moveName}}!"
} as const;

View File

@ -47,6 +47,7 @@ import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
import { moveTriggers } from "./move-trigger";
export const koConfig = { export const koConfig = {
ability: ability, ability: ability,
@ -99,5 +100,6 @@ export const koConfig = {
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler, partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler modifierSelectUiHandler: modifierSelectUiHandler,
moveTriggers: moveTriggers
}; };

View File

@ -0,0 +1,53 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const moveTriggers: SimpleTranslationEntries = {
"hitWithRecoil" : "{{pokemonName}}[[는]]\n반동으로 데미지를 입었다!",
"cutHpPowerUpMove": "{{pokemonName}}[[는]]\n체력을 깎아서 자신의 기술을 강화했다!",
"absorbedElectricity": "{{pokemonName}}[[는]]\n전기를 흡수했다!",
"switchedStatChanges": "{{pokemonName}}[[는]] 상대와 자신의\n능력 변화를 바꿨다!",
"goingAllOutForAttack": "{{pokemonName}}[[는]]\n전력을 다하기 시작했다!",
"regainedHealth": "{{pokemonName}}[[는]]\n기력을 회복했다!",
"keptGoingAndCrashed": "{{pokemonName}}[[는]]\n의욕이 넘쳐서 땅에 부딪쳤다!",
"fled": "{{pokemonName}}[[는]]\N도망쳤다!",
"cannotBeSwitchedOut": "{{pokemonName}}[[를]]\n돌아오게 할 수 없습니다!",
"swappedAbilitiesWithTarget": "{{pokemonName}}[[는]]\n서로의 특성을 교체했다!",
"coinsScatteredEverywhere": "돈이 주위에 흩어졌다!",
"attackedByItem": "{{itemName}}[[가]]\n{{pokemonName}}에게 덤벼들었다!",
"whippedUpAWhirlwind": "{{pokemonName}}의 주위에서\n공기가 소용돌이친다!",
"flewUpHigh": "{{pokemonName}}[[는]]\n하늘 높이 날아올랐다!",
"tookInSunlight": "{{pokemonName}}[[는]]\n빛을 흡수했다!",
"dugAHole": "{{pokemonName}}[[는]]\n땅으로 파고들었다!",
"loweredItsHead": "{{pokemonName}}[[는]]\n목을 움츠렸다!",
"isGlowing": "{{pokemonName}}[[를]]\n강렬한 빛이 감쌌다!",
"bellChimed": "방울소리가 울려 퍼졌다!",
"foresawAnAttack": "{{pokemonName}}[[는]]\n미래의 공격을 예지했다!",
"hidUnderwater": "{{pokemonName}}[[는]]\n물속에 몸을 숨겼다!",
"soothingAromaWaftedThroughArea": "기분 좋은 향기가 퍼졌다!",
"sprangUp": "{{pokemonName}}[[는]]\n높이 뛰어올랐다!",
"choseDoomDesireAsDestiny": "{{pokemonName}}[[는]]\n파멸의소원을 미래에 맡겼다!",
"vanishedInstantly": "{{pokemonName}}의 모습이\n일순간에 사라졌다!",
"tookTargetIntoSky": "{{pokemonName}}[[는]] {{targetName}}[[를]]\n상공으로 데려갔다!",
"becameCloakedInFreezingLight": "{{pokemonName}}[[는]]\n차가운 빛에 둘러싸였다!",
"becameCloakedInFreezingAir": "{{pokemonName}}[[는]]\n차디찬 공기에 둘러싸였다!",
"isChargingPower": "{{pokemonName}}[[는]]\n파워를 모으고 있다!",
"burnedItselfOut": "{{pokemonName}}의 불꽃은 다 타 버렸다!",
"startedHeatingUpBeak": "{{pokemonName}}[[는]]\n부리를 가열하기 시작했다!",
"isOverflowingWithSpacePower": "{{pokemonName}}에게서\n우주의 힘이 넘쳐난다!",
"usedUpAllElectricity": "{{pokemonName}}[[는]]\n전기를 다 써 버렸다!",
"stoleItem": "{{pokemonName}}[[는]] {{targetName}}[[로]]부터\n{{itemName}}[[을]] 빼앗았다!",
"incineratedItem": "{{pokemonName}}[[는]] {{targetName}}의\n{{itemName}}[[를]] 불태워서 없애버렸다!",
"knockedOffItem": "{{pokemonName}}[[는]] {{targetName}}의\n{{itemName}}[[를]] 탁 쳐서 떨구었다!",
"tookMoveAttack": "{{pokemonName}}[[는]]\n{{moveName}} 공격을 끌어들였다!",
"cutOwnHpAndMaximizedStat": "{{pokemonName}}[[는]] 체력을 깎아서\n{{stateName}}[[를]] 풀 파워로 만들었다!",
"copiedStatChanges": "{{pokemonName}}[[는]] {{targetName}}의\n능력 변화를 복사했다!",
"magnitudeMessage": "매그니튜드{{magnitude}}!",
"tookAimAtTarget": "{{pokemonName}}[[는]] 목표를\n{{targetName}}[[로]] 결정했다!",
"transformedIntoType": "{{pokemonName}}[[는]]\n{{typeName}}타입이 됐다!",
"copiedMove": "{{pokemonName}}[[는]]\n{{moveName}}[[를]] 복사했다!",
"sketchedMove": "{{pokemonName}}[[는]]\n{{moveName}}[[를]] 스케치했다!",
"acquiredAbility": "{{pokemonName}}[[는]]\n{{abilityName}}[[가]] 되었다!",
"copiedTargetAbility": "{{pokemonName}}[[는]] {{targerName}}의\n{{abilityName}}[[를]] 복사했다!",
"transformedIntoTarget": "{{pokemonName}}[[는]]\n{{targetName}}[[로]] 변신했다!",
"tryingToTakeFoeDown": "{{pokemonName}}[[는]] 상대를\n길동무로 삼으려 하고 있다!",
"cannotUseMove": "{{pokemonName}}[[는]]\n{{moveName}}[[를]] 쓸 수 없다!"
} as const;

View File

@ -47,6 +47,7 @@ import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
import { moveTriggers } from "./move-trigger";
export const ptBrConfig = { export const ptBrConfig = {
ability: ability, ability: ability,
@ -99,5 +100,6 @@ export const ptBrConfig = {
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler, partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler modifierSelectUiHandler: modifierSelectUiHandler,
moveTriggers: moveTriggers
}; };

View File

@ -0,0 +1,53 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const moveTriggers: SimpleTranslationEntries = {
"hitWithRecoil" : "{{pokemonName}} foi ferido pelo dano reverso!",
"cutHpPowerUpMove": "{{pokemonName}} diminuiu seus PS para aumentar o poder do ataque!",
"absorbedElectricity": "{{pokemonName}} absorveu eletricidade!",
"switchedStatChanges": "{{pokemonName}} trocou as mudanças de atributo com o alvo!",
"goingAllOutForAttack": "{{pokemonName}} está arriscando tudo nesse ataque!",
"regainedHealth": "{{pokemonName}} recuperou/nsaúde!",
"keptGoingAndCrashed": "{{pokemonName}} continuou/nindo e bateu!",
"fled": "{{pokemonName}} fugiu!",
"cannotBeSwitchedOut": "{{pokemonName}} não pode ser trocado!",
"swappedAbilitiesWithTarget": "{{pokemonName}} trocou/nde habilidades com o alvo!",
"coinsScatteredEverywhere": "Moedas foram espalhadas por toda parte!",
"attackedByItem": "{{pokemonName}} está prestes a ser atacado por {{itemName}}!",
"whippedUpAWhirlwind": "{{pokemonName}} criou\num redemoinho de vento!",
"flewUpHigh": "{{pokemonName}} voou\nbem alto!",
"tookInSunlight": "{{pokemonName}} absorveu a luz do sol!",
"dugAHole": "{{pokemonName}} cavou um buraco no chão!",
"loweredItsHead": "{{pokemonName}} abaixou sua cabeça!",
"isGlowing": "{{pokemonName}} ficou envolto em uma luz forte!",
"bellChimed": "Um sino tocou!",
"foresawAnAttack": "{{pokemonName}} previu/num ataque!",
"hidUnderwater": "{{pokemonName}} se escondeu/nembaixo d'água!",
"soothingAromaWaftedThroughArea": "Um aroma suave se espalhou pelo ambiente!",
"sprangUp": "{{pokemonName}} se levantou!",
"choseDoomDesireAsDestiny": "{{pokemonName}} escolheu\no Desejo da Perdição como seu destino!",
"vanishedInstantly": "{{pokemonName}} desapareceu/nde repente!",
"tookTargetIntoSky": "{{pokemonName}} levou {{targetName}}\npara o céu!",
"becameCloakedInFreezingLight": "{{pokemonName}} ficou envolto/nem uma luz congelante!",
"becameCloakedInFreezingAir": "{{pokemonName}} ficou envolto/nem ar congelante!",
"isChargingPower": "{{pokemonName}} está absorvendo energia!",
"burnedItselfOut": "{{pokemonName}} apagou seu próprio fogo!",
"startedHeatingUpBeak": "{{pokemonName}} começou\na esquentar seu bico!",
"isOverflowingWithSpacePower": "{{pokemonName}} está sobrecarregado\ncom energia espacial!",
"usedUpAllElectricity": "{{pokemonName}} usou toda a sua eletricidade!",
"stoleItem": "{{pokemonName}} roubou/no(a) {{itemName}} de {{targetName}}!",
"incineratedItem": "{{pokemonName}} incinerou\na {{itemName}} de {{targetName}}!",
"knockedOffItem": "{{pokemonName}} derrubou\no(a) {{itemName}} de {{targetName}}!",
"tookMoveAttack": "{{pokemonName}} pegou\no movimento {{moveName}}!",
"cutOwnHpAndMaximizedStat": "{{pokemonName}} reduziu seus PS\ne maximizou seu atributo de {{statName}}!",
"copiedStatChanges": "{{pokemonName}} copiou\nas mudanças de atributo de {{targetName}}!",
"magnitudeMessage": "Magnitude {{magnitude}}!",
"tookAimAtTarget": "{{pokemonName}} mirou\nem {{targetName}}!",
"transformedIntoType": "{{pokemonName}} se transformou\nem tipo {{typeName}}!",
"copiedMove": "{{pokemonName}} copiou\no movimento {{moveName}}!",
"sketchedMove": "{{pokemonName}} desenhou\no movimento {{moveName}}!",
"acquiredAbility": "{{pokemonName}} adquiriu\na habilidade {{abilityName}}!",
"copiedTargetAbility": "{{pokemonName}} copiou a habilidade\nde {{targetName}}!",
"transformedIntoTarget": "{{pokemonName}} se transformou\nem um(a) {{targetName}}!",
"tryingToTakeFoeDown": "{{pokemonName}} está tentando derrubar o atacante com ele!",
"cannotUseMove": "{{pokemonName}} não pode usar {{moveName}}!"
} as const;

View File

@ -47,6 +47,7 @@ import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
import { moveTriggers } from "./move-trigger";
export const zhCnConfig = { export const zhCnConfig = {
ability: ability, ability: ability,
@ -99,5 +100,6 @@ export const zhCnConfig = {
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler, partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler modifierSelectUiHandler: modifierSelectUiHandler,
moveTriggers: moveTriggers
}; };

View File

@ -0,0 +1,53 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const moveTriggers: SimpleTranslationEntries = {
"hitWithRecoil" : "{{pokemonName}}\n受到了反作用力造成的伤害",
"cutHpPowerUpMove": "{{pokemonName}}\n削减了体力并提升了招式威力",
"absorbedElectricity": "{{pokemonName}}\n吸收了电力",
"switchedStatChanges": "{{pokemonName}}和对手互换了\n自己的能力变化",
"goingAllOutForAttack": "{{pokemonName}}拿出全力了!",
"regainedHealth": "{{pokemonName}}的\n体力回复了",
"keptGoingAndCrashed": "{{pokemonName}}因势头过猛\n而撞到了地面",
"fled": "{{pokemonName}}\n逃走了",
"cannotBeSwitchedOut": "{{pokemonName}}\n无法被收回",
"swappedAbilitiesWithTarget": "{{pokemonName}}\n互换了各自的特性",
"coinsScatteredEverywhere": "金币散落一地!",
"attackedByItem": "{{pokemonName}}被\n{{itemName}}袭击了!",
"whippedUpAWhirlwind": "{{pokemonName}}周围的\n空气产生了旋涡",
"flewUpHigh": "{{pokemonName}}\n飞向了高空",
"tookInSunlight": "{{pokemonName}}\n吸收了光",
"dugAHole": "{{pokemonName}}\n钻入了地里",
"loweredItsHead": "{{pokemonName}}\n把头缩了进去",
"isGlowing": "强光包围了{{pokemonName}}\n",
"bellChimed": "铃声响彻四周!",
"foresawAnAttack": "{{pokemonName}}\n预知了未来的攻击",
"hidUnderwater": "{{pokemonName}}\n潜入了水中",
"soothingAromaWaftedThroughArea": "怡人的香气扩散了开来!",
"sprangUp": "{{pokemonName}}\n高高地跳了起来",
"choseDoomDesireAsDestiny": "{{pokemonName}}\n将破灭之愿托付给了未来",
"vanishedInstantly": "{{pokemonName}}的身影\n瞬间消失了",
"tookTargetIntoSky": "{{pokemonName}}将{{targetName}}\n带上了高空",
"becameCloakedInFreezingLight": "{{pokemonName}}\n被冷光包围了",
"becameCloakedInFreezingAir": "{{pokemonName}}\n被冰冻的空气包围了",
"isChargingPower": "{{pokemonName}}\n正在积蓄力量",
"burnedItselfOut": "{{pokemonName}}的火焰燃尽了!",
"startedHeatingUpBeak": "{{pokemonName}}\n开始给鸟嘴加热了",
"isOverflowingWithSpacePower": "{{pokemonName}}身上\n溢出了宇宙之力",
"usedUpAllElectricity": "{{pokemonName}}\n用尽电力了",
"stoleItem": "{{pokemonName}}从{{targetName}}那里\n夺取了{{itemName}}",
"incineratedItem": "{{pokemonName}}烧没了\n{{targetName}}的{{itemName}}",
"knockedOffItem": "{{pokemonName}}拍落了\n{{targetName}}的{{itemName}}",
"tookMoveAttack": "{{pokemonName}}\n受到了{{moveName}}的攻击!",
"cutOwnHpAndMaximizedStat": "{{pokemonName}}\n削减了体力并释放了全部{{stateName}}!",
"copiedStatChanges": "{{pokemonName}}复制了\n{{targetName}}的能力变化!",
"magnitudeMessage": "震级{{magnitude}}",
"tookAimAtTarget": "{{pokemonName}}将目标对准了\n{{targetName}}",
"transformedIntoType": "{{pokemonName}} \n变成了{{typeName}}属性!",
"copiedMove": "{{pokemonName}}\n复制了{{moveName}}!",
"sketchedMove": "{{pokemonName}}\n对{{moveName}}进行了写生!",
"acquiredAbility": "{{pokemonName}}的特性\n变为{{abilityName}}了!",
"copiedTargetAbility": "{{pokemonName}}复制了\n{{targerName}}的{{abilityName}}",
"transformedIntoTarget": "{{pokemonName}}\n变身成了{{targetName}}",
"tryingToTakeFoeDown": "{{pokemonName}}\n想和对手同归于尽",
"cannotUseMove": "{{pokemonName}}\n无法使用{{moveName}}"
} as const;

View File

@ -47,6 +47,7 @@ import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
import { moveTriggers } from "./move-trigger";
export const zhTwConfig = { export const zhTwConfig = {
ability: ability, ability: ability,
@ -99,5 +100,6 @@ export const zhTwConfig = {
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler, partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler modifierSelectUiHandler: modifierSelectUiHandler,
moveTriggers: moveTriggers
}; };

View File

@ -0,0 +1,53 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const moveTriggers: SimpleTranslationEntries = {
"hitWithRecoil" : "{{pokemonName}}\n受到了反作用力造成的傷害",
"cutHpPowerUpMove": "{{pokemonName}}\n削減體力並提升了招式威力",
"absorbedElectricity": "{{pokemonName}}\n吸收了电力",
"switchedStatChanges": "{{pokemonName}}和對手互換了\n自身的能力變化",
"goingAllOutForAttack": "{{pokemonName}}拿出全力了!",
"regainedHealth": "{{pokemonName}}的\n體力回復了",
"keptGoingAndCrashed": "{{pokemonName}}因勢頭過猛\n而撞到了地面",
"fled": "{{pokemonName}}\n逃走了",
"cannotBeSwitchedOut": "{{pokemonName}}\n無法被收回",
"swappedAbilitiesWithTarget": "{{pokemonName}}\n互換了各自的特性",
"coinsScatteredEverywhere": "金幣散落一地!",
"attackedByItem": "{{pokemonName}}被\n{{itemName}}襲擊了!",
"whippedUpAWhirlwind": "{{pokemonName}}周圍的\n空氣產生了旋渦",
"flewUpHigh": "{{pokemonName}}\n飛向了高空",
"tookInSunlight": "{{pokemonName}}\n吸收了光線",
"dugAHole": "{{pokemonName}}\n鑽進了地下",
"loweredItsHead": "{{pokemonName}}\n把頭縮了進去",
"isGlowing": "強光包圍了\n{{pokemonName}}",
"bellChimed": "鈴聲響徹四周!",
"foresawAnAttack": "{{pokemonName}}\n預知了未來的攻擊",
"hidUnderwater": "{{pokemonName}}\n潛入了水中",
"soothingAromaWaftedThroughArea": "怡人的香氣擴散了開來!",
"sprangUp": "{{pokemonName}}\n高高地跳了起來",
"choseDoomDesireAsDestiny": "{{pokemonName}}\n將破滅之願託付給了未來",
"vanishedInstantly": "{{pokemonName}}的身影\n瞬間消失了",
"tookTargetIntoSky": "{{pokemonName}}將{{targetName}}\n帶上了高空",
"becameCloakedInFreezingLight": "{{pokemonName}}\n被冷光包圍了",
"becameCloakedInFreezingAir": "{{pokemonName}}\n被冰凍的空氣包圍了",
"isChargingPower": "{{pokemonName}}\n正在積蓄力量",
"burnedItselfOut": "{{pokemonName}}的火焰燃盡了!",
"startedHeatingUpBeak": "{{pokemonName}}\n開始給鳥嘴加熱了",
"isOverflowingWithSpacePower": "{{pokemonName}}湧起了宇宙的力量!",
"usedUpAllElectricity": "{{pokemonName}}\n用盡了電力",
"stoleItem": "{{pokemonName}}从{{targetName}}那裏\n奪取了{{itemName}}",
"incineratedItem": "{{pokemonName}}燒掉了\n{{targetName}}的{{itemName}}",
"knockedOffItem": "{{pokemonName}}拍落了\n{{targetName}}的{{itemName}}",
"tookMoveAttack": "{{pokemonName}}\n受到了{{moveName}}的攻擊!",
"cutOwnHpAndMaximizedStat": "{{pokemonName}}\n削減體力並釋放了全部{{stateName}}!",
"copiedStatChanges": "{{pokemonName}}複製了\n{{targetName}}的能力變化!",
"magnitudeMessage": "震級{{magnitude}}",
"tookAimAtTarget": "{{pokemonName}}將目標對準了\n{{targetName}}",
"transformedIntoType": "{{pokemonName}} \n變成了{{typeName}}屬性!",
"copiedMove": "{{pokemonName}}\n複製了{{moveName}}!",
"sketchedMove": "{{pokemonName}}\n對{{moveName}}進行了寫生!",
"acquiredAbility": "{{pokemonName}}的特性\n變为{{abilityName}}了!",
"copiedTargetAbility": "{{pokemonName}}複製了\n{{targerName}}的{{abilityName}}",
"transformedIntoTarget": "{{pokemonName}}\n變身成了{{targetName}}",
"tryingToTakeFoeDown": "{{pokemonName}}\n想和對手同歸於盡",
"cannotUseMove": "{{pokemonName}}\n無法使用{{moveName}}"
} as const;