Compare commits

..

35 Commits

Author SHA1 Message Date
Jannik Tappert c78a95d5ae
Merge 16533b189f into 6030b780f2 2024-09-18 07:26:29 +00:00
Jannik Tappert 16533b189f
Update src/locales/de/pokemon-form.json 2024-09-18 09:26:27 +02:00
Jannik Tappert 22a5edd590
Update src/locales/de/pokemon-form.json 2024-09-18 09:25:04 +02:00
Jannik Tappert 2ce7c4a74e
Update src/locales/de/pokemon-form.json 2024-09-18 09:21:44 +02:00
Jannik Tappert b4c6c8c12b
Update src/locales/de/pokemon-form.json 2024-09-18 09:20:58 +02:00
Jannik Tappert 10c21fcd91
Update src/locales/de/pokemon-form.json 2024-09-18 09:20:22 +02:00
Jannik Tappert b2c1ebd961
Update src/locales/de/pokemon-form.json 2024-09-18 09:19:34 +02:00
Jannik Tappert 57d8af9093
Update src/locales/de/pokemon-form.json 2024-09-18 09:18:39 +02:00
Jannik Tappert 90fdf9cea7
Update src/locales/de/pokemon-form.json 2024-09-18 09:17:52 +02:00
Jannik Tappert 752e1c8c1b
Update src/locales/de/pokemon-form.json 2024-09-18 09:15:59 +02:00
Jannik Tappert 405ef19299
Update src/locales/de/pokemon-form.json 2024-09-18 09:15:32 +02:00
Jannik Tappert 71a79f3002
Update src/locales/de/pokemon-form.json 2024-09-18 09:14:14 +02:00
Jannik Tappert 75e24ef876
Update src/locales/de/pokemon-form.json 2024-09-18 09:13:36 +02:00
Jannik Tappert 96378c2a88
Update src/locales/de/pokemon-form.json 2024-09-18 09:09:18 +02:00
Jannik Tappert 0e36275199
Update src/locales/de/pokemon-form.json 2024-09-18 09:08:26 +02:00
Jannik Tappert 59f366d9f2
Update src/locales/de/pokemon-form.json 2024-09-18 09:06:32 +02:00
Jannik Tappert 5d858376ac
Update src/locales/de/pokemon-form.json 2024-09-18 09:05:26 +02:00
Jannik Tappert 0d2f6fb995
Update src/locales/de/pokemon-form.json 2024-09-18 09:05:06 +02:00
Jannik Tappert da8c11c5e8
Update src/locales/de/pokemon-form.json 2024-09-18 09:04:31 +02:00
Jannik Tappert 6cd4ff42eb
Update src/locales/de/pokemon-form.json 2024-09-18 09:04:01 +02:00
Jannik Tappert 30feeee5bd
Update src/locales/de/pokemon-form.json 2024-09-18 09:02:48 +02:00
flx-sta 6030b780f2
[Move][Mirror] Update HitTagAttr attributes v2 (#4297)
* [Move] Updated HitAttr tags

Affects Whirlwind/Fly, Steamroller/Minimize, and Malicious Moonsault/Minimize

* [Move] Update for MinimizeAccuracyAttr

Affects Steamroller and Malicious Moonsault

* add: whirlwind test

* add: steamroller test

* rename: `AlwaysHitMinimizeAttr` (from `MinimizeAccuracyAttr`)

* rename: `DealsDoubleDamageToTagAttr` (from `HitsTagAttr`)

---------

Co-authored-by: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com>
2024-09-17 22:41:46 -04:00
Jannik Tappert e386504977
[BUG][Beta] Fix English Status Symbols (#4293)
* Have English Status Symbols show up again :)

* It now uses the function instead

---------

Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>
2024-09-17 22:26:47 -04:00
podar 106ed6b27b
[Bug] Using default animation for errors that occur. (#4266)
* Using default animation for errors that occur.

* Renaming function to make it clear that logging happens

* Updating logging for missing animations

* Missed committing linter changes

* Update src/data/battle-anims.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update src/data/battle-anims.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

* Update src/data/battle-anims.ts

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>

---------

Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com>
2024-09-17 22:15:47 -04:00
flx-sta 4389bff5d0
[Bug] Fix stat-protection-attribute not taking inverts (e.g. Contrary) into account (#4031)
* add generic types to`Pokemon.getAbilityAttrs()`

* add invert check to `ProtectStatAbAttr.apply...`

This makes sure that a stat is only protected if no other ability inverts the change. E.g. `Contrary` inverts any decrease to an increase

* migrate contrary.test.ts to game.classicMode

* move `StatStageChangeMultiplierAbAttr` resolve above `ProtectStatAbAttr`

The effect of StatStageChangeMultiplierAbAttr is now applied before resolving any ProtectStatAbAttr. Thus the stage (level) of the BattleStat change was properly altered at the time of resolving the protection

* revert ability.ts changes

* add automated tests for `Clear Body` + `Contrary`

* StateStageChangePhase replace ~~`IntegerHolder`~~ with `NumberHolder`

Update Utils import and replace all occurcences of `Utils.`

* contrary.test.ts: remove `js` import
2024-09-17 19:14:41 -07:00
Lugiad 1a3485ed43
Merge branch 'beta' into formChangeLocale 2024-09-18 02:17:03 +02:00
Lugiad 8fdae0f0ef
Update pokemon-form.json 2024-09-18 02:02:09 +02:00
Lugiad 82f6215806
Update pokemon-form.json 2024-09-18 02:02:06 +02:00
Lugiad 4181f078ae
Update pokemon-form.json 2024-09-18 02:02:02 +02:00
Lugiad 6409fe83b5
Update pokemon-form.json 2024-09-18 02:01:59 +02:00
Lugiad e5180cc89a
Update pokemon-form.json 2024-09-18 02:01:55 +02:00
Lugiad b5a83b689e
Update pokemon-form.json 2024-09-18 02:01:51 +02:00
Lugiad 36e14196de
Update pokemon-form.json 2024-09-18 02:01:47 +02:00
Lugiad a5e27bc3a7
Update pokemon-form.json 2024-09-18 02:01:43 +02:00
Madmadness65 00ba2eebc8
Add new biome BGM by Firel (#4301) 2024-09-17 21:57:34 +01:00
29 changed files with 995 additions and 74 deletions

View File

@ -55,7 +55,7 @@ Check out [Github Issues](https://github.com/pagefaultgames/pokerogue/issues) to
- Pokémon Sword/Shield - Pokémon Sword/Shield
- Pokémon Legends: Arceus - Pokémon Legends: Arceus
- Pokémon Scarlet/Violet - Pokémon Scarlet/Violet
- Firel (Custom Laboratory, Metropolis, Seabed, and Space biome music) - Firel (Custom Ice Cave, Laboratory, Metropolis, Plains, Power Plant, Seabed, Space, and Volcano biome music)
- Lmz (Custom Jungle biome music) - Lmz (Custom Jungle biome music)
- Andr06 (Custom Slum and Sea biome music) - Andr06 (Custom Slum and Sea biome music)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -2625,7 +2625,11 @@ export class PreStatStageChangeAbAttr extends AbAttr {
} }
} }
/**
* Protect one or all {@linkcode BattleStat} from reductions caused by other Pokémon's moves and Abilities
*/
export class ProtectStatAbAttr extends PreStatStageChangeAbAttr { export class ProtectStatAbAttr extends PreStatStageChangeAbAttr {
/** {@linkcode BattleStat} to protect or `undefined` if **all** {@linkcode BattleStat} are protected */
private protectedStat?: BattleStat; private protectedStat?: BattleStat;
constructor(protectedStat?: BattleStat) { constructor(protectedStat?: BattleStat) {
@ -2634,7 +2638,17 @@ export class ProtectStatAbAttr extends PreStatStageChangeAbAttr {
this.protectedStat = protectedStat; this.protectedStat = protectedStat;
} }
applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, simulated: boolean, stat: BattleStat, cancelled: Utils.BooleanHolder, _args: any[]): boolean { /**
* Apply the {@linkcode ProtectedStatAbAttr} to an interaction
* @param _pokemon
* @param _passive
* @param simulated
* @param stat the {@linkcode BattleStat} being affected
* @param cancelled The {@linkcode Utils.BooleanHolder} that will be set to true if the stat is protected
* @param _args
* @returns true if the stat is protected, false otherwise
*/
applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, stat: BattleStat, cancelled: Utils.BooleanHolder, _args: any[]): boolean {
if (Utils.isNullOrUndefined(this.protectedStat) || stat === this.protectedStat) { if (Utils.isNullOrUndefined(this.protectedStat) || stat === this.protectedStat) {
cancelled.value = true; cancelled.value = true;
return true; return true;
@ -3757,7 +3771,7 @@ export class StatStageChangeMultiplierAbAttr extends AbAttr {
this.multiplier = multiplier; this.multiplier = multiplier;
} }
apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean {
(args[0] as Utils.IntegerHolder).value *= this.multiplier; (args[0] as Utils.IntegerHolder).value *= this.multiplier;
return true; return true;

View File

@ -488,14 +488,14 @@ export function initMoveAnim(scene: BattleScene, move: Moves): Promise<void> {
} else { } else {
moveAnims.set(move, null); moveAnims.set(move, null);
const defaultMoveAnim = allMoves[move] instanceof AttackMove ? Moves.TACKLE : allMoves[move] instanceof SelfStatusMove ? Moves.FOCUS_ENERGY : Moves.TAIL_WHIP; const defaultMoveAnim = allMoves[move] instanceof AttackMove ? Moves.TACKLE : allMoves[move] instanceof SelfStatusMove ? Moves.FOCUS_ENERGY : Moves.TAIL_WHIP;
const moveName = Moves[move].toLowerCase().replace(/\_/g, "-");
const fetchAnimAndResolve = (move: Moves) => { const fetchAnimAndResolve = (move: Moves) => {
scene.cachedFetch(`./battle-anims/${moveName}.json`) scene.cachedFetch(`./battle-anims/${Utils.animationFileName(move)}.json`)
.then(response => { .then(response => {
const contentType = response.headers.get("content-type"); const contentType = response.headers.get("content-type");
if (!response.ok || contentType?.indexOf("application/json") === -1) { if (!response.ok || contentType?.indexOf("application/json") === -1) {
console.error(`Could not load animation file for move '${moveName}'`, response.status, response.statusText); useDefaultAnim(move, defaultMoveAnim);
populateMoveAnim(move, moveAnims.get(defaultMoveAnim)); logMissingMoveAnim(move, response.status, response.statusText);
return resolve(); return resolve();
} }
return response.json(); return response.json();
@ -515,6 +515,11 @@ export function initMoveAnim(scene: BattleScene, move: Moves): Promise<void> {
} else { } else {
resolve(); resolve();
} }
})
.catch(error => {
useDefaultAnim(move, defaultMoveAnim);
logMissingMoveAnim(move, error);
return resolve();
}); });
}; };
fetchAnimAndResolve(move); fetchAnimAndResolve(move);
@ -522,6 +527,29 @@ export function initMoveAnim(scene: BattleScene, move: Moves): Promise<void> {
}); });
} }
/**
* Populates the default animation for the given move.
*
* @param move the move to populate an animation for
* @param defaultMoveAnim the move to use as the default animation
*/
function useDefaultAnim(move: Moves, defaultMoveAnim: Moves) {
populateMoveAnim(move, moveAnims.get(defaultMoveAnim));
}
/**
* Helper method for printing a warning to the console when a move animation is missing.
*
* @param move the move to populate an animation for
* @param optionalParams parameters to add to the error logging
*
* @remarks use {@linkcode useDefaultAnim} to use a default animation
*/
function logMissingMoveAnim(move: Moves, ...optionalParams: any[]) {
const moveName = Utils.animationFileName(move);
console.warn(`Could not load animation file for move '${moveName}'`, ...optionalParams);
}
/** /**
* Fetches animation configs to be used in a Mystery Encounter * Fetches animation configs to be used in a Mystery Encounter
* @param scene * @param scene

View File

@ -3839,7 +3839,7 @@ export class StormAccuracyAttr extends VariableAccuracyAttr {
* @extends VariableAccuracyAttr * @extends VariableAccuracyAttr
* @see {@linkcode apply} * @see {@linkcode apply}
*/ */
export class MinimizeAccuracyAttr extends VariableAccuracyAttr { export class AlwaysHitMinimizeAttr extends VariableAccuracyAttr {
/** /**
* @see {@linkcode apply} * @see {@linkcode apply}
* @param user N/A * @param user N/A
@ -4855,10 +4855,10 @@ export class RemoveAllSubstitutesAttr extends MoveEffectAttr {
* Attribute used when a move hits a {@linkcode BattlerTagType} for double damage * Attribute used when a move hits a {@linkcode BattlerTagType} for double damage
* @extends MoveAttr * @extends MoveAttr
*/ */
export class HitsTagAttr extends MoveAttr { export class DealsDoubleDamageToTagAttr extends MoveAttr {
/** The {@linkcode BattlerTagType} this move hits */ /** The {@linkcode BattlerTagType} this move hits */
public tagType: BattlerTagType; public tagType: BattlerTagType;
/** Should this move deal double damage against {@linkcode HitsTagAttr.tagType}? */ /** Should this move deal double damage against {@linkcode DealsDoubleDamageToTagAttr.tagType}? */
public doubleDamage: boolean; public doubleDamage: boolean;
constructor(tagType: BattlerTagType, doubleDamage?: boolean) { constructor(tagType: BattlerTagType, doubleDamage?: boolean) {
@ -6752,12 +6752,11 @@ export function initMoves() {
new AttackMove(Moves.CUT, Type.NORMAL, MoveCategory.PHYSICAL, 50, 95, 30, -1, 0, 1) new AttackMove(Moves.CUT, Type.NORMAL, MoveCategory.PHYSICAL, 50, 95, 30, -1, 0, 1)
.slicingMove(), .slicingMove(),
new AttackMove(Moves.GUST, Type.FLYING, MoveCategory.SPECIAL, 40, 100, 35, -1, 0, 1) new AttackMove(Moves.GUST, Type.FLYING, MoveCategory.SPECIAL, 40, 100, 35, -1, 0, 1)
.attr(HitsTagAttr, BattlerTagType.FLYING, true) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING, true)
.windMove(), .windMove(),
new AttackMove(Moves.WING_ATTACK, Type.FLYING, MoveCategory.PHYSICAL, 60, 100, 35, -1, 0, 1), new AttackMove(Moves.WING_ATTACK, Type.FLYING, MoveCategory.PHYSICAL, 60, 100, 35, -1, 0, 1),
new StatusMove(Moves.WHIRLWIND, Type.NORMAL, -1, 20, -1, -6, 1) new StatusMove(Moves.WHIRLWIND, Type.NORMAL, -1, 20, -1, -6, 1)
.attr(ForceSwitchOutAttr) .attr(ForceSwitchOutAttr)
.attr(HitsTagAttr, BattlerTagType.FLYING, false)
.ignoresSubstitute() .ignoresSubstitute()
.hidesTarget() .hidesTarget()
.windMove(), .windMove(),
@ -6770,8 +6769,8 @@ export function initMoves() {
new AttackMove(Moves.SLAM, Type.NORMAL, MoveCategory.PHYSICAL, 80, 75, 20, -1, 0, 1), new AttackMove(Moves.SLAM, Type.NORMAL, MoveCategory.PHYSICAL, 80, 75, 20, -1, 0, 1),
new AttackMove(Moves.VINE_WHIP, Type.GRASS, MoveCategory.PHYSICAL, 45, 100, 25, -1, 0, 1), new AttackMove(Moves.VINE_WHIP, Type.GRASS, MoveCategory.PHYSICAL, 45, 100, 25, -1, 0, 1),
new AttackMove(Moves.STOMP, Type.NORMAL, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 1) new AttackMove(Moves.STOMP, Type.NORMAL, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 1)
.attr(MinimizeAccuracyAttr) .attr(AlwaysHitMinimizeAttr)
.attr(HitsTagAttr, BattlerTagType.MINIMIZED, true) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true)
.attr(FlinchAttr), .attr(FlinchAttr),
new AttackMove(Moves.DOUBLE_KICK, Type.FIGHTING, MoveCategory.PHYSICAL, 30, 100, 30, -1, 0, 1) new AttackMove(Moves.DOUBLE_KICK, Type.FIGHTING, MoveCategory.PHYSICAL, 30, 100, 30, -1, 0, 1)
.attr(MultiHitAttr, MultiHitType._2), .attr(MultiHitAttr, MultiHitType._2),
@ -6795,8 +6794,8 @@ export function initMoves() {
.attr(OneHitKOAccuracyAttr), .attr(OneHitKOAccuracyAttr),
new AttackMove(Moves.TACKLE, Type.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1), new AttackMove(Moves.TACKLE, Type.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1),
new AttackMove(Moves.BODY_SLAM, Type.NORMAL, MoveCategory.PHYSICAL, 85, 100, 15, 30, 0, 1) new AttackMove(Moves.BODY_SLAM, Type.NORMAL, MoveCategory.PHYSICAL, 85, 100, 15, 30, 0, 1)
.attr(MinimizeAccuracyAttr) .attr(AlwaysHitMinimizeAttr)
.attr(HitsTagAttr, BattlerTagType.MINIMIZED, true) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true)
.attr(StatusEffectAttr, StatusEffect.PARALYSIS), .attr(StatusEffectAttr, StatusEffect.PARALYSIS),
new AttackMove(Moves.WRAP, Type.NORMAL, MoveCategory.PHYSICAL, 15, 90, 20, -1, 0, 1) new AttackMove(Moves.WRAP, Type.NORMAL, MoveCategory.PHYSICAL, 15, 90, 20, -1, 0, 1)
.attr(TrapAttr, BattlerTagType.WRAP), .attr(TrapAttr, BattlerTagType.WRAP),
@ -6864,7 +6863,7 @@ export function initMoves() {
new AttackMove(Moves.HYDRO_PUMP, Type.WATER, MoveCategory.SPECIAL, 110, 80, 5, -1, 0, 1), new AttackMove(Moves.HYDRO_PUMP, Type.WATER, MoveCategory.SPECIAL, 110, 80, 5, -1, 0, 1),
new AttackMove(Moves.SURF, Type.WATER, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 1) new AttackMove(Moves.SURF, Type.WATER, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 1)
.target(MoveTarget.ALL_NEAR_OTHERS) .target(MoveTarget.ALL_NEAR_OTHERS)
.attr(HitsTagAttr, BattlerTagType.UNDERWATER, true) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.UNDERWATER, true)
.attr(GulpMissileTagAttr), .attr(GulpMissileTagAttr),
new AttackMove(Moves.ICE_BEAM, Type.ICE, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 1) new AttackMove(Moves.ICE_BEAM, Type.ICE, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 1)
.attr(StatusEffectAttr, StatusEffect.FREEZE), .attr(StatusEffectAttr, StatusEffect.FREEZE),
@ -6947,18 +6946,18 @@ export function initMoves() {
new AttackMove(Moves.THUNDER, Type.ELECTRIC, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 1) new AttackMove(Moves.THUNDER, Type.ELECTRIC, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 1)
.attr(StatusEffectAttr, StatusEffect.PARALYSIS) .attr(StatusEffectAttr, StatusEffect.PARALYSIS)
.attr(ThunderAccuracyAttr) .attr(ThunderAccuracyAttr)
.attr(HitsTagAttr, BattlerTagType.FLYING, false), .attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING, false),
new AttackMove(Moves.ROCK_THROW, Type.ROCK, MoveCategory.PHYSICAL, 50, 90, 15, -1, 0, 1) new AttackMove(Moves.ROCK_THROW, Type.ROCK, MoveCategory.PHYSICAL, 50, 90, 15, -1, 0, 1)
.makesContact(false), .makesContact(false),
new AttackMove(Moves.EARTHQUAKE, Type.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1) new AttackMove(Moves.EARTHQUAKE, Type.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1)
.attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.UNDERGROUND, true)
.attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1)
.makesContact(false) .makesContact(false)
.target(MoveTarget.ALL_NEAR_OTHERS), .target(MoveTarget.ALL_NEAR_OTHERS),
new AttackMove(Moves.FISSURE, Type.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) new AttackMove(Moves.FISSURE, Type.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1)
.attr(OneHitKOAttr) .attr(OneHitKOAttr)
.attr(OneHitKOAccuracyAttr) .attr(OneHitKOAccuracyAttr)
.attr(HitsTagAttr, BattlerTagType.UNDERGROUND, false) .attr(DealsDoubleDamageToTagAttr, 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, i18next.t("moveTriggers:dugAHole", {pokemonName: "{USER}"}), BattlerTagType.UNDERGROUND) .attr(ChargeAttr, ChargeAnim.DIG_CHARGING, i18next.t("moveTriggers:dugAHole", {pokemonName: "{USER}"}), BattlerTagType.UNDERGROUND)
@ -7347,7 +7346,7 @@ export function initMoves() {
.attr(PreMoveMessageAttr, magnitudeMessageFunc) .attr(PreMoveMessageAttr, magnitudeMessageFunc)
.attr(MagnitudePowerAttr) .attr(MagnitudePowerAttr)
.attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1)
.attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.UNDERGROUND, true)
.makesContact(false) .makesContact(false)
.target(MoveTarget.ALL_NEAR_OTHERS), .target(MoveTarget.ALL_NEAR_OTHERS),
new AttackMove(Moves.DYNAMIC_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 100, 50, 5, 100, 0, 2) new AttackMove(Moves.DYNAMIC_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 100, 50, 5, 100, 0, 2)
@ -7403,7 +7402,7 @@ export function initMoves() {
new AttackMove(Moves.CROSS_CHOP, Type.FIGHTING, MoveCategory.PHYSICAL, 100, 80, 5, -1, 0, 2) new AttackMove(Moves.CROSS_CHOP, Type.FIGHTING, MoveCategory.PHYSICAL, 100, 80, 5, -1, 0, 2)
.attr(HighCritAttr), .attr(HighCritAttr),
new AttackMove(Moves.TWISTER, Type.DRAGON, MoveCategory.SPECIAL, 40, 100, 20, 20, 0, 2) new AttackMove(Moves.TWISTER, Type.DRAGON, MoveCategory.SPECIAL, 40, 100, 20, 20, 0, 2)
.attr(HitsTagAttr, BattlerTagType.FLYING, true) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING, true)
.attr(FlinchAttr) .attr(FlinchAttr)
.windMove() .windMove()
.target(MoveTarget.ALL_NEAR_ENEMIES), .target(MoveTarget.ALL_NEAR_ENEMIES),
@ -7435,7 +7434,7 @@ export function initMoves() {
.attr(StatStageChangeAttr, [ Stat.DEF ], -1), .attr(StatStageChangeAttr, [ Stat.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)
.attr(TrapAttr, BattlerTagType.WHIRLPOOL) .attr(TrapAttr, BattlerTagType.WHIRLPOOL)
.attr(HitsTagAttr, BattlerTagType.UNDERWATER, true), .attr(DealsDoubleDamageToTagAttr, BattlerTagType.UNDERWATER, true),
new AttackMove(Moves.BEAT_UP, Type.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 2) new AttackMove(Moves.BEAT_UP, Type.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 2)
.attr(MultiHitAttr, MultiHitType.BEAT_UP) .attr(MultiHitAttr, MultiHitType.BEAT_UP)
.attr(BeatUpAttr) .attr(BeatUpAttr)
@ -7658,7 +7657,7 @@ export function initMoves() {
new AttackMove(Moves.EXTRASENSORY, Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 20, 10, 0, 3) new AttackMove(Moves.EXTRASENSORY, Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 20, 10, 0, 3)
.attr(FlinchAttr), .attr(FlinchAttr),
new AttackMove(Moves.SKY_UPPERCUT, Type.FIGHTING, MoveCategory.PHYSICAL, 85, 90, 15, -1, 0, 3) new AttackMove(Moves.SKY_UPPERCUT, Type.FIGHTING, MoveCategory.PHYSICAL, 85, 90, 15, -1, 0, 3)
.attr(HitsTagAttr, BattlerTagType.FLYING) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING)
.punchingMove(), .punchingMove(),
new AttackMove(Moves.SAND_TOMB, Type.GROUND, MoveCategory.PHYSICAL, 35, 85, 15, -1, 0, 3) new AttackMove(Moves.SAND_TOMB, Type.GROUND, MoveCategory.PHYSICAL, 35, 85, 15, -1, 0, 3)
.attr(TrapAttr, BattlerTagType.SAND_TOMB) .attr(TrapAttr, BattlerTagType.SAND_TOMB)
@ -7889,8 +7888,8 @@ export function initMoves() {
new AttackMove(Moves.DRAGON_PULSE, Type.DRAGON, MoveCategory.SPECIAL, 85, 100, 10, -1, 0, 4) new AttackMove(Moves.DRAGON_PULSE, Type.DRAGON, MoveCategory.SPECIAL, 85, 100, 10, -1, 0, 4)
.pulseMove(), .pulseMove(),
new AttackMove(Moves.DRAGON_RUSH, Type.DRAGON, MoveCategory.PHYSICAL, 100, 75, 10, 20, 0, 4) new AttackMove(Moves.DRAGON_RUSH, Type.DRAGON, MoveCategory.PHYSICAL, 100, 75, 10, 20, 0, 4)
.attr(MinimizeAccuracyAttr) .attr(AlwaysHitMinimizeAttr)
.attr(HitsTagAttr, BattlerTagType.MINIMIZED, true) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true)
.attr(FlinchAttr), .attr(FlinchAttr),
new AttackMove(Moves.POWER_GEM, Type.ROCK, MoveCategory.SPECIAL, 80, 100, 20, -1, 0, 4), new AttackMove(Moves.POWER_GEM, Type.ROCK, MoveCategory.SPECIAL, 80, 100, 20, -1, 0, 4),
new AttackMove(Moves.DRAIN_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 4) new AttackMove(Moves.DRAIN_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 4)
@ -8087,7 +8086,7 @@ export function initMoves() {
.attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 1, 1, true) .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 1, 1, true)
.attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED)
.attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN]) .attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN])
.attr(HitsTagAttr, BattlerTagType.FLYING, false) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING, false)
.makesContact(false), .makesContact(false),
new AttackMove(Moves.STORM_THROW, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) new AttackMove(Moves.STORM_THROW, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5)
.attr(CritOnlyAttr), .attr(CritOnlyAttr),
@ -8100,9 +8099,9 @@ export function initMoves() {
.attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true) .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true)
.danceMove(), .danceMove(),
new AttackMove(Moves.HEAVY_SLAM, Type.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5) new AttackMove(Moves.HEAVY_SLAM, Type.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5)
.attr(MinimizeAccuracyAttr) .attr(AlwaysHitMinimizeAttr)
.attr(CompareWeightPowerAttr) .attr(CompareWeightPowerAttr)
.attr(HitsTagAttr, BattlerTagType.MINIMIZED, true), .attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true),
new AttackMove(Moves.SYNCHRONOISE, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5) new AttackMove(Moves.SYNCHRONOISE, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5)
.target(MoveTarget.ALL_NEAR_OTHERS) .target(MoveTarget.ALL_NEAR_OTHERS)
.condition(unknownTypeCondition) .condition(unknownTypeCondition)
@ -8253,12 +8252,14 @@ export function initMoves() {
.attr(StatStageChangeAttr, [ Stat.DEF ], -1) .attr(StatStageChangeAttr, [ Stat.DEF ], -1)
.slicingMove(), .slicingMove(),
new AttackMove(Moves.HEAT_CRASH, Type.FIRE, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5) new AttackMove(Moves.HEAT_CRASH, Type.FIRE, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 5)
.attr(MinimizeAccuracyAttr) .attr(AlwaysHitMinimizeAttr)
.attr(CompareWeightPowerAttr) .attr(CompareWeightPowerAttr)
.attr(HitsTagAttr, BattlerTagType.MINIMIZED, true), .attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true),
new AttackMove(Moves.LEAF_TORNADO, Type.GRASS, MoveCategory.SPECIAL, 65, 90, 10, 50, 0, 5) new AttackMove(Moves.LEAF_TORNADO, Type.GRASS, MoveCategory.SPECIAL, 65, 90, 10, 50, 0, 5)
.attr(StatStageChangeAttr, [ Stat.ACC ], -1), .attr(StatStageChangeAttr, [ Stat.ACC ], -1),
new AttackMove(Moves.STEAMROLLER, Type.BUG, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 5) new AttackMove(Moves.STEAMROLLER, Type.BUG, MoveCategory.PHYSICAL, 65, 100, 20, 30, 0, 5)
.attr(AlwaysHitMinimizeAttr)
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true)
.attr(FlinchAttr), .attr(FlinchAttr),
new SelfStatusMove(Moves.COTTON_GUARD, Type.GRASS, -1, 10, -1, 0, 5) new SelfStatusMove(Moves.COTTON_GUARD, Type.GRASS, -1, 10, -1, 0, 5)
.attr(StatStageChangeAttr, [ Stat.DEF ], 3, true), .attr(StatStageChangeAttr, [ Stat.DEF ], 3, true),
@ -8271,7 +8272,7 @@ export function initMoves() {
new AttackMove(Moves.HURRICANE, Type.FLYING, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 5) new AttackMove(Moves.HURRICANE, Type.FLYING, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 5)
.attr(ThunderAccuracyAttr) .attr(ThunderAccuracyAttr)
.attr(ConfuseAttr) .attr(ConfuseAttr)
.attr(HitsTagAttr, BattlerTagType.FLYING, false) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING, false)
.windMove(), .windMove(),
new AttackMove(Moves.HEAD_CHARGE, Type.NORMAL, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 5) new AttackMove(Moves.HEAD_CHARGE, Type.NORMAL, MoveCategory.PHYSICAL, 120, 100, 15, -1, 0, 5)
.attr(RecoilAttr) .attr(RecoilAttr)
@ -8325,9 +8326,9 @@ export function initMoves() {
.attr(LastMoveDoublePowerAttr, Moves.FUSION_FLARE) .attr(LastMoveDoublePowerAttr, Moves.FUSION_FLARE)
.makesContact(false), .makesContact(false),
new AttackMove(Moves.FLYING_PRESS, Type.FIGHTING, MoveCategory.PHYSICAL, 100, 95, 10, -1, 0, 6) new AttackMove(Moves.FLYING_PRESS, Type.FIGHTING, MoveCategory.PHYSICAL, 100, 95, 10, -1, 0, 6)
.attr(MinimizeAccuracyAttr) .attr(AlwaysHitMinimizeAttr)
.attr(FlyingTypeMultiplierAttr) .attr(FlyingTypeMultiplierAttr)
.attr(HitsTagAttr, BattlerTagType.MINIMIZED, true) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true)
.condition(failOnGravityCondition), .condition(failOnGravityCondition),
new StatusMove(Moves.MAT_BLOCK, Type.FIGHTING, -1, 10, -1, 0, 6) new StatusMove(Moves.MAT_BLOCK, Type.FIGHTING, -1, 10, -1, 0, 6)
.target(MoveTarget.USER_SIDE) .target(MoveTarget.USER_SIDE)
@ -8498,8 +8499,8 @@ export function initMoves() {
new AttackMove(Moves.THOUSAND_ARROWS, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) new AttackMove(Moves.THOUSAND_ARROWS, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6)
.attr(NeutralDamageAgainstFlyingTypeMultiplierAttr) .attr(NeutralDamageAgainstFlyingTypeMultiplierAttr)
.attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 1, 1, true) .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 1, 1, true)
.attr(HitsTagAttr, BattlerTagType.FLYING, false) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.FLYING, false)
.attr(HitsTagAttr, BattlerTagType.MAGNET_RISEN, false) .attr(DealsDoubleDamageToTagAttr, BattlerTagType.MAGNET_RISEN, false)
.attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED)
.attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN]) .attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN])
.makesContact(false) .makesContact(false)
@ -8756,6 +8757,8 @@ export function initMoves() {
.partial() .partial()
.ignoresVirtual(), .ignoresVirtual(),
new AttackMove(Moves.MALICIOUS_MOONSAULT, Type.DARK, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7) new AttackMove(Moves.MALICIOUS_MOONSAULT, Type.DARK, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7)
.attr(AlwaysHitMinimizeAttr)
.attr(DealsDoubleDamageToTagAttr, BattlerTagType.MINIMIZED, true)
.partial() .partial()
.ignoresVirtual(), .ignoresVirtual(),
new AttackMove(Moves.OCEANIC_OPERETTA, Type.WATER, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7) new AttackMove(Moves.OCEANIC_OPERETTA, Type.WATER, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7)

View File

@ -746,7 +746,7 @@ export class Arena {
case Biome.TOWN: case Biome.TOWN:
return 7.288; return 7.288;
case Biome.PLAINS: case Biome.PLAINS:
return 7.693; return 17.485;
case Biome.GRASS: case Biome.GRASS:
return 1.995; return 1.995;
case Biome.TALL_GRASS: case Biome.TALL_GRASS:
@ -774,13 +774,13 @@ export class Arena {
case Biome.DESERT: case Biome.DESERT:
return 1.143; return 1.143;
case Biome.ICE_CAVE: case Biome.ICE_CAVE:
return 15.010; return 0.000;
case Biome.MEADOW: case Biome.MEADOW:
return 3.891; return 3.891;
case Biome.POWER_PLANT: case Biome.POWER_PLANT:
return 2.810; return 9.447;
case Biome.VOLCANO: case Biome.VOLCANO:
return 5.116; return 17.637;
case Biome.GRAVEYARD: case Biome.GRAVEYARD:
return 3.232; return 3.232;
case Biome.DOJO: case Biome.DOJO:

View File

@ -3,7 +3,7 @@ import BattleScene, { AnySound } from "../battle-scene";
import { Variant, VariantSet, variantColorCache } from "#app/data/variant"; import { Variant, VariantSet, variantColorCache } from "#app/data/variant";
import { variantData } from "#app/data/variant"; import { variantData } from "#app/data/variant";
import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "../ui/battle-info"; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "../ui/battle-info";
import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatStagesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatStageChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr, MoveTarget } from "../data/move"; import Move, { HighCritAttr, DealsDoubleDamageToTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatStagesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatStageChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr, MoveTarget } from "../data/move";
import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from "../data/pokemon-species"; import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from "../data/pokemon-species";
import { Constructor, isNullOrUndefined, randSeedInt } from "#app/utils"; import { Constructor, isNullOrUndefined, randSeedInt } from "#app/utils";
import * as Utils from "../utils"; import * as Utils from "../utils";
@ -1273,13 +1273,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
* @param attrType {@linkcode AbAttr} The ability attribute to check for. * @param attrType {@linkcode AbAttr} The ability attribute to check for.
* @param canApply {@linkcode Boolean} If false, it doesn't check whether the ability is currently active * @param canApply {@linkcode Boolean} If false, it doesn't check whether the ability is currently active
* @param ignoreOverride {@linkcode Boolean} If true, it ignores ability changing effects * @param ignoreOverride {@linkcode Boolean} If true, it ignores ability changing effects
* @returns {AbAttr[]} A list of all the ability attributes on this ability. * @returns A list of all the ability attributes on this ability.
*/ */
getAbilityAttrs(attrType: { new(...args: any[]): AbAttr }, canApply: boolean = true, ignoreOverride?: boolean): AbAttr[] { getAbilityAttrs<T extends AbAttr = AbAttr>(attrType: { new(...args: any[]): T }, canApply: boolean = true, ignoreOverride?: boolean): T[] {
const abilityAttrs: AbAttr[] = []; const abilityAttrs: T[] = [];
if (!canApply || this.canApplyAbility()) { if (!canApply || this.canApplyAbility()) {
abilityAttrs.push(...this.getAbility(ignoreOverride).getAttrs(attrType)); abilityAttrs.push(...this.getAbility(ignoreOverride).getAttrs<T>(attrType));
} }
if (!canApply || this.canApplyAbility(true)) { if (!canApply || this.canApplyAbility(true)) {
@ -1513,7 +1513,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
const immuneTags = this.findTags(tag => tag instanceof TypeImmuneTag && tag.immuneType === moveType); const immuneTags = this.findTags(tag => tag instanceof TypeImmuneTag && tag.immuneType === moveType);
for (const tag of immuneTags) { for (const tag of immuneTags) {
if (move && !move.getAttrs(HitsTagAttr).some(attr => attr.tagType === tag.tagType)) { if (move && !move.getAttrs(DealsDoubleDamageToTagAttr).some(attr => attr.tagType === tag.tagType)) {
typeMultiplier.value = 0; typeMultiplier.value = 0;
break; break;
} }
@ -2489,13 +2489,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
this.scene.arena.applyTagsForSide(WeakenMoveScreenTag, defendingSide, move.category, this.scene.currentBattle.double, screenMultiplier); this.scene.arena.applyTagsForSide(WeakenMoveScreenTag, defendingSide, move.category, this.scene.currentBattle.double, screenMultiplier);
/** /**
* For each {@linkcode HitsTagAttr} the move has, doubles the damage of the move if: * For each {@linkcode DealsDoubleDamageToTagAttr} the move has, doubles the damage of the move if:
* The target has a {@linkcode BattlerTagType} that this move interacts with * The target has a {@linkcode BattlerTagType} that this move interacts with
* AND * AND
* The move doubles damage when used against that tag * The move doubles damage when used against that tag
*/ */
const hitsTagMultiplier = new Utils.NumberHolder(1); const hitsTagMultiplier = new Utils.NumberHolder(1);
move.getAttrs(HitsTagAttr).filter(hta => hta.doubleDamage).forEach(hta => { move.getAttrs(DealsDoubleDamageToTagAttr).filter(hta => hta.doubleDamage).forEach(hta => {
if (this.getTag(hta.tagType)) { if (this.getTag(hta.tagType)) {
hitsTagMultiplier.value *= 2; hitsTagMultiplier.value *= 2;
} }

View File

@ -40,9 +40,14 @@
"castformRainy": "Regenform", "castformRainy": "Regenform",
"castformSnowy": "Schneeform", "castformSnowy": "Schneeform",
"deoxysNormal": "Normalform", "deoxysNormal": "Normalform",
"deoxysAttack": "Angriffsform",
"deoxysDefense": "Verteidigungsform",
"deoxysSpeed": "Initiativeform",
"burmyPlant": "Pflanzenumhang", "burmyPlant": "Pflanzenumhang",
"burmySandy": "Sandumhang", "burmySandy": "Sandumhang",
"burmyTrash": "Lumpenumhang", "burmyTrash": "Lumpenumhang",
"cheribiOvercast": "Wolkenform",
"cheribiSunshine": "Sonnenform",
"shellosEast": "Östliches Meer", "shellosEast": "Östliches Meer",
"shellosWest": "Westliches Meer", "shellosWest": "Westliches Meer",
"rotomHeat": "Hitze-Rotom", "rotomHeat": "Hitze-Rotom",
@ -50,21 +55,36 @@
"rotomFrost": "Frost-Rotom", "rotomFrost": "Frost-Rotom",
"rotomFan": "Wirbel-Rotom", "rotomFan": "Wirbel-Rotom",
"rotomMow": "Schneid-Rotom", "rotomMow": "Schneid-Rotom",
"dialgaOrigin": "Urform",
"palkiaOrigin": "Urform",
"giratinaAltered": "Wandelform", "giratinaAltered": "Wandelform",
"giratinaOrigin": "Urform",
"shayminLand": "Landform", "shayminLand": "Landform",
"shayminSky": "Zenitform",
"basculinRedStriped": "Rotlinige Form", "basculinRedStriped": "Rotlinige Form",
"basculinBlueStriped": "Blaulinige Form", "basculinBlueStriped": "Blaulinige Form",
"basculinWhiteStriped": "Weißlinige Form", "basculinWhiteStriped": "Weißlinige Form",
"darumakaZen": "Trance-Modus",
"deerlingSpring": "Frühlingsform", "deerlingSpring": "Frühlingsform",
"deerlingSummer": "Sommerform", "deerlingSummer": "Sommerform",
"deerlingAutumn": "Herbstform", "deerlingAutumn": "Herbstform",
"deerlingWinter": "Winterform", "deerlingWinter": "Winterform",
"tornadusIncarnate": "Inkarnationsform", "tornadusIncarnate": "Inkarnationsform",
"tornadusTherian": "Tiergeistform",
"thundurusIncarnate": "Inkarnationsform", "thundurusIncarnate": "Inkarnationsform",
"thundurusTherian": "Tiergeistform",
"landorusIncarnate": "Inkarnationsform", "landorusIncarnate": "Inkarnationsform",
"landorusTherian": "Tiergeistform",
"kyuremBlack": "Schwarzes Kyurem",
"kyuremWhite": "Weißes Kyurem",
"keldeoOrdinary": "Standardform", "keldeoOrdinary": "Standardform",
"keldeoResolute": "Resolutform",
"meloettaAria": "Gesangsform", "meloettaAria": "Gesangsform",
"meloettaPirouette": "Tanzform", "meloettaPirouette": "Tanzform",
"genesectShock": "Blitzmodul",
"genesectBurn": "Flammenmodul",
"genesectChill": "Gefriermodul",
"genesectDouse": "Aquamodul",
"froakieBattleBond": "Ash-Form", "froakieBattleBond": "Ash-Form",
"scatterbugMeadow": "Blumenmeermuster", "scatterbugMeadow": "Blumenmeermuster",
"scatterbugIcySnow": "Frostmuster", "scatterbugIcySnow": "Frostmuster",
@ -100,6 +120,10 @@
"furfrouLaReine": "Königinnenschnitt", "furfrouLaReine": "Königinnenschnitt",
"furfrouKabuki": "Kabuki-Schnitt", "furfrouKabuki": "Kabuki-Schnitt",
"furfrouPharaoh": "Herrscherschnitt", "furfrouPharaoh": "Herrscherschnitt",
"espurrMale": "männlich",
"espurrFemale": "weiblich",
"honedgeShiled": "Schildform",
"honedgeBlade": "Klingenform",
"pumpkabooSmall": "Größe S", "pumpkabooSmall": "Größe S",
"pumpkabooLarge": "Größe L", "pumpkabooLarge": "Größe L",
"pumpkabooSuper": "Größe XL", "pumpkabooSuper": "Größe XL",
@ -110,11 +134,34 @@
"zygarde50Pc": "50% Form Scharwandel", "zygarde50Pc": "50% Form Scharwandel",
"zygarde10Pc": "10% Form Scharwandel", "zygarde10Pc": "10% Form Scharwandel",
"zygardeComplete": "Optimum-Form", "zygardeComplete": "Optimum-Form",
"hoopaUnbound": "Entfesseltes Hoopa",
"oricorioBaile": "Flamenco-Stil", "oricorioBaile": "Flamenco-Stil",
"oricorioPompom": "Cheerleading-Stil", "oricorioPompom": "Cheerleading-Stil",
"oricorioPau": "Hula-Stil", "oricorioPau": "Hula-Stil",
"oricorioSensu": "Buyo-Stil", "oricorioSensu": "Buyo-Stil",
"rockruffOwnTempo": "Gleichmut", "rockruffOwnTempo": "Gleichmut",
"rockruffMidday": "Tagform",
"rockruffMidnight": "Nachtform",
"rockruffMidnight": "Zwielichtform",
"wishiwashiSchool": "Schwarmform",
"typeNullNormal": "Typ:Normal",
"typeNullFighting": "Typ:Kampf",
"typeNullFlying": "Typ:Flug",
"typeNullPoison": "Typ:Gift",
"typeNullGround": "Typ:Boden",
"typeNullRock": "Typ:Gestein",
"typeNullBug": "Typ:Käfer",
"typeNullGhost": "Typ:Geist",
"typeNullSteel": "Typ:Stahl",
"typeNullFire": "Typ:Feuer",
"typeNullWater": "Typ:Wasser",
"typeNullGrass": "Typ:Pflanze",
"typeNullElectric": "Typ:Elektro",
"typeNullPsychic": "Typ:Psycho",
"typeNullIce": "Typ:Eis",
"typeNullDragon": "Typ:Drache",
"typeNullDark": "Typ:Unlicht",
"typeNullFairy": "Typ:Fee",
"miniorRedMeteor": "Rote-Meteorform", "miniorRedMeteor": "Rote-Meteorform",
"miniorOrangeMeteor": "Oranger-Meteorform", "miniorOrangeMeteor": "Oranger-Meteorform",
"miniorYellowMeteor": "Gelber-Meteorform", "miniorYellowMeteor": "Gelber-Meteorform",
@ -131,25 +178,55 @@
"miniorViolet": "Violetter Kern", "miniorViolet": "Violetter Kern",
"mimikyuDisguised": "Verkleidete Form", "mimikyuDisguised": "Verkleidete Form",
"mimikyuBusted": "Entlarvte Form", "mimikyuBusted": "Entlarvte Form",
"necrozmaDuskMane": "Abendmähne",
"necrozmaDawnWings": "Morgenschwingen",
"necrozmaUltra": "Ultra-Necrozma",
"magearnaOriginal": "Originalfarbe", "magearnaOriginal": "Originalfarbe",
"marshadowZenith": "Zenitform", "marshadowZenith": "Zenitform",
"sinisteaPhony": "Fälschungsform", "sinisteaPhony": "Fälschungsform",
"sinisteaAntique": "Originalform", "sinisteaAntique": "Originalform",
"milceryVanillaCream": "Vanille-Creme",
"milceryRubyCream": "Ruby-Creme",
"milceryMatchaCream": "Matcha-Creme",
"milceryMintCream": "Minz-Creme",
"milceryLemonCream": "Zitronen-Creme",
"milcerySaltedCream": "Salz-Creme",
"milceryRubySwirl": "Ruby-Mix",
"milceryCaramelSwirl": "Karamell-Mix",
"milceryRainbowSwirl": "Trio-Mix",
"eiscueNoIce": "Wohlfühlkopf", "eiscueNoIce": "Wohlfühlkopf",
"indeedeeMale": "männlich", "indeedeeMale": "männlich",
"indeedeeFemale": "weiblich", "indeedeeFemale": "weiblich",
"morpekoFullBelly": "Pappsattmuster", "morpekoFullBelly": "Pappsattmuster",
"morpekoHangry": "Kohldampfmuster",
"zacianHeroOfManyBattles": "Heldenhafter Krieger", "zacianHeroOfManyBattles": "Heldenhafter Krieger",
"zacianCrowned": "König des Schwertes",
"zamazentaHeroOfManyBattles": "Heldenhafter Krieger", "zamazentaHeroOfManyBattles": "Heldenhafter Krieger",
"zamazentaCrowned": "König des Schildes",
"kubfuSingleStrike": "Fokussierter Stil",
"kubfuRapidStrike": "Fließender Stil",
"zarudeDada": "Papa", "zarudeDada": "Papa",
"calyrexIce": "Schimmelreiter",
"calyrexShadow": "Rappenreiter",
"basculinMale": "männlich",
"basculinFemale": "weiblich",
"enamorusIncarnate": "Inkarnationsform", "enamorusIncarnate": "Inkarnationsform",
"enamorusTherian": "Tiergeistform",
"lechonkMale": "männlich",
"lechonkFemale": "weiblich",
"tandemausFour": "Dreierfamilie",
"tandemausThree": "Viererfamilie",
"squawkabillyGreenPlumage": "Grüngefiedert", "squawkabillyGreenPlumage": "Grüngefiedert",
"squawkabillyBluePlumage": "Blaugefiedert", "squawkabillyBluePlumage": "Blaugefiedert",
"squawkabillyYellowPlumage": "Gelbgefiedert", "squawkabillyYellowPlumage": "Gelbgefiedert",
"squawkabillyWhitePlumage": "Weißgefiedert", "squawkabillyWhitePlumage": "Weißgefiedert",
"finizenZero": "Alltagsform",
"finizenZero": "Heldenform",
"tatsugiriCurly": "Gebogene Form", "tatsugiriCurly": "Gebogene Form",
"tatsugiriDroopy": "Hängende Form", "tatsugiriDroopy": "Hängende Form",
"tatsugiriStretchy": "Gestrekte Form", "tatsugiriStretchy": "Gestrekte Form",
"dunsparceTwo": "Zweisegmentform",
"dunsparceThree": "Dreisegmentform",
"gimmighoulChest": "Truhenform", "gimmighoulChest": "Truhenform",
"gimmighoulRoaming": "Wanderform", "gimmighoulRoaming": "Wanderform",
"koraidonApexBuild": "Vollkommene Gestalt", "koraidonApexBuild": "Vollkommene Gestalt",
@ -164,7 +241,20 @@
"miraidonGlideMode": "Gleitmodus", "miraidonGlideMode": "Gleitmodus",
"poltchageistCounterfeit": "Imitationsform", "poltchageistCounterfeit": "Imitationsform",
"poltchageistArtisan": "Kostbarkeitsform", "poltchageistArtisan": "Kostbarkeitsform",
"poltchageistUnremarkable": "Simple Form",
"poltchageistMasterpiece": "Edle Form",
"ogerponTealMask": "Türkisgrüne Maske",
"ogerponTealMaskTera": "Türkisgrüne Maske (Terakristallisiert)",
"ogerponWellspringMask": "Brunnenmaske",
"ogerponWellspringMaskTera": "Brunnenmaske (Terakristallisiert)",
"ogerponHearthflameMask": "Ofenmaske",
"ogerponHearthflameMaskTera": "Ofenmaske (Terakristallisiert)",
"ogerponCornerstoneMask": "Fundamentmaske",
"ogerponCornerstoneMaskTera": "Fundamentmaske (Terakristallisiert)",
"terpagosTerastal": "Terakristall-Form",
"terpagosStellar": "Stellarform",
"galarDarumakaZen": "Trance-Modus",
"paldeaTaurosCombat": "Gefechtsvariante", "paldeaTaurosCombat": "Gefechtsvariante",
"paldeaTaurosBlaze": "Flammenvariante", "paldeaTaurosBlaze": "Flammenvariante",
"paldeaTaurosAqua": "Flutenvariante" "paldeaTaurosAqua": "Flutenvariante"
} }

View File

@ -108,7 +108,7 @@
"forest": "PMD EoS Dusk Forest", "forest": "PMD EoS Dusk Forest",
"grass": "PMD EoS Apple Woods", "grass": "PMD EoS Apple Woods",
"graveyard": "PMD EoS Mystifying Forest", "graveyard": "PMD EoS Mystifying Forest",
"ice_cave": "PMD EoS Vast Ice Mountain", "ice_cave": "Firel - -60F",
"island": "PMD EoS Craggy Coast", "island": "PMD EoS Craggy Coast",
"jungle": "Lmz - Jungle", "jungle": "Lmz - Jungle",
"laboratory": "Firel - Laboratory", "laboratory": "Firel - Laboratory",
@ -116,8 +116,8 @@
"meadow": "PMD EoS Sky Peak Forest", "meadow": "PMD EoS Sky Peak Forest",
"metropolis": "Firel - Metropolis", "metropolis": "Firel - Metropolis",
"mountain": "PMD EoS Mt. Horn", "mountain": "PMD EoS Mt. Horn",
"plains": "PMD EoS Sky Peak Prairie", "plains": "Firel - Route 888",
"power_plant": "PMD EoS Far Amp Plains", "power_plant": "Firel - The Klink",
"ruins": "PMD EoS Deep Sealed Ruin", "ruins": "PMD EoS Deep Sealed Ruin",
"sea": "Andr06 - Marine Mystique", "sea": "Andr06 - Marine Mystique",
"seabed": "Firel - Seabed", "seabed": "Firel - Seabed",
@ -128,7 +128,7 @@
"tall_grass": "PMD EoS Foggy Forest", "tall_grass": "PMD EoS Foggy Forest",
"temple": "PMD EoS Aegis Cave", "temple": "PMD EoS Aegis Cave",
"town": "PMD EoS Random Dungeon Theme 3", "town": "PMD EoS Random Dungeon Theme 3",
"volcano": "PMD EoS Steam Cave", "volcano": "Firel - Twisturn Volcano",
"wasteland": "PMD EoS Hidden Highland", "wasteland": "PMD EoS Hidden Highland",
"encounter_ace_trainer": "BW Trainers' Eyes Meet (Ace Trainer)", "encounter_ace_trainer": "BW Trainers' Eyes Meet (Ace Trainer)",
"encounter_backpacker": "BW Trainers' Eyes Meet (Backpacker)", "encounter_backpacker": "BW Trainers' Eyes Meet (Backpacker)",

View File

@ -40,9 +40,14 @@
"castformRainy": "Lluvia", "castformRainy": "Lluvia",
"castformSnowy": "Nieve", "castformSnowy": "Nieve",
"deoxysNormal": "Normal", "deoxysNormal": "Normal",
"deoxysAttack": "Attack",
"deoxysDefense": "Defense",
"deoxysSpeed": "Speed",
"burmyPlant": "Planta", "burmyPlant": "Planta",
"burmySandy": "Arena", "burmySandy": "Arena",
"burmyTrash": "Basura", "burmyTrash": "Basura",
"cheribiOvercast": "Overcast",
"cheribiSunshine": "Sunshine",
"shellosEast": "Este", "shellosEast": "Este",
"shellosWest": "Oeste", "shellosWest": "Oeste",
"rotomHeat": "Calor", "rotomHeat": "Calor",
@ -50,21 +55,36 @@
"rotomFrost": "Frío", "rotomFrost": "Frío",
"rotomFan": "Ventilador", "rotomFan": "Ventilador",
"rotomMow": "Corte", "rotomMow": "Corte",
"dialgaOrigin": "Origin",
"palkiaOrigin": "Origin",
"giratinaAltered": "Modificada", "giratinaAltered": "Modificada",
"giratinaOrigin": "Origin",
"shayminLand": "Tierra", "shayminLand": "Tierra",
"shayminSky": "Sky",
"basculinRedStriped": "Raya Roja", "basculinRedStriped": "Raya Roja",
"basculinBlueStriped": "Raya Azul", "basculinBlueStriped": "Raya Azul",
"basculinWhiteStriped": "Raya Blanca", "basculinWhiteStriped": "Raya Blanca",
"darumakaZen": "Zen",
"deerlingSpring": "Primavera", "deerlingSpring": "Primavera",
"deerlingSummer": "Verano", "deerlingSummer": "Verano",
"deerlingAutumn": "Otoño", "deerlingAutumn": "Otoño",
"deerlingWinter": "Invierno", "deerlingWinter": "Invierno",
"tornadusIncarnate": "Avatar", "tornadusIncarnate": "Avatar",
"tornadusTherian": "Therian",
"thundurusIncarnate": "Avatar", "thundurusIncarnate": "Avatar",
"thundurusTherian": "Therian",
"landorusIncarnate": "Avatar", "landorusIncarnate": "Avatar",
"landorusTherian": "Therian",
"kyuremBlack": "Black",
"kyuremWhite": "White",
"keldeoOrdinary": "Habitual", "keldeoOrdinary": "Habitual",
"keldeoResolute": "Resolute",
"meloettaAria": "Lírica", "meloettaAria": "Lírica",
"meloettaPirouette": "Danza", "meloettaPirouette": "Danza",
"genesectShock": "Shock Drive",
"genesectBurn": "Burn Drive",
"genesectChill": "Chill Drive",
"genesectDouse": "Douse Drive",
"froakieBattleBond": "Fuerte Afecto", "froakieBattleBond": "Fuerte Afecto",
"scatterbugMeadow": "Floral", "scatterbugMeadow": "Floral",
"scatterbugIcySnow": "Polar", "scatterbugIcySnow": "Polar",
@ -100,6 +120,10 @@
"furfrouLaReine": "Aristócrata", "furfrouLaReine": "Aristócrata",
"furfrouKabuki": "Kabuki", "furfrouKabuki": "Kabuki",
"furfrouPharaoh": "Faraónico", "furfrouPharaoh": "Faraónico",
"espurrMale": "Male",
"espurrFemale": "Female",
"honedgeShiled": "Shield",
"honedgeBlade": "Blade",
"pumpkabooSmall": "Pequeño", "pumpkabooSmall": "Pequeño",
"pumpkabooLarge": "Grande", "pumpkabooLarge": "Grande",
"pumpkabooSuper": "Enorme", "pumpkabooSuper": "Enorme",
@ -110,11 +134,34 @@
"zygarde50Pc": "Zygarde al 50%", "zygarde50Pc": "Zygarde al 50%",
"zygarde10Pc": "Zygarde al 10%", "zygarde10Pc": "Zygarde al 10%",
"zygardeComplete": "Zygarde Completo", "zygardeComplete": "Zygarde Completo",
"hoopaUnbound": "Unbound",
"oricorioBaile": "Apasionado", "oricorioBaile": "Apasionado",
"oricorioPompom": "Animado", "oricorioPompom": "Animado",
"oricorioPau": "Plácido", "oricorioPau": "Plácido",
"oricorioSensu": "Refinado", "oricorioSensu": "Refinado",
"rockruffOwnTempo": "Ritmo Propio", "rockruffOwnTempo": "Ritmo Propio",
"rockruffMidday": "Midday",
"rockruffMidnight": "Midnight",
"rockruffMidnight": "Dusk",
"wishiwashiSchool": "School",
"typeNullNormal": "Type: Normal",
"typeNullFighting": "Type: Fighting",
"typeNullFlying": "Type: Flying",
"typeNullPoison": "Type: Poison",
"typeNullGround": "Type: Ground",
"typeNullRock": "Type: Rock",
"typeNullBug": "Type: Bug",
"typeNullGhost": "Type: Ghost",
"typeNullSteel": "Type: Steel",
"typeNullFire": "Type: Fire",
"typeNullWater": "Type: Water",
"typeNullGrass": "Type: Grass",
"typeNullElectric": "Type: Electric",
"typeNullPsychic": "Type: Psychic",
"typeNullIce": "Type: Ice",
"typeNullDragon": "Type: Dragon",
"typeNullDark": "Type: Dark",
"typeNullFairy": "Type: Fairy",
"miniorRedMeteor": "Núcleo Rojo", "miniorRedMeteor": "Núcleo Rojo",
"miniorOrangeMeteor": "Núcleo Naranja", "miniorOrangeMeteor": "Núcleo Naranja",
"miniorYellowMeteor": "Núcleo Amarillo", "miniorYellowMeteor": "Núcleo Amarillo",
@ -131,25 +178,55 @@
"miniorViolet": "Violeta", "miniorViolet": "Violeta",
"mimikyuDisguised": "Encubierta", "mimikyuDisguised": "Encubierta",
"mimikyuBusted": "Descubierta", "mimikyuBusted": "Descubierta",
"necrozmaDuskMane": "Dusk Mane",
"necrozmaDawnWings": "Dawn Wings",
"necrozmaUltra": "Ultra",
"magearnaOriginal": "Vetusto", "magearnaOriginal": "Vetusto",
"marshadowZenith": "Cénit", "marshadowZenith": "Cénit",
"sinisteaPhony": "Falsificada", "sinisteaPhony": "Falsificada",
"sinisteaAntique": "Genuina", "sinisteaAntique": "Genuina",
"milceryVanillaCream": "Vanilla Cream",
"milceryRubyCream": "Ruby Cream",
"milceryMatchaCream": "Matcha Cream",
"milceryMintCream": "Mint Cream",
"milceryLemonCream": "Lemon Cream",
"milcerySaltedCream": "Salted Cream",
"milceryRubySwirl": "Ruby Swirl",
"milceryCaramelSwirl": "Caramel Swirl",
"milceryRainbowSwirl": "Rainbow Swirl",
"eiscueNoIce": "Cara Deshielo", "eiscueNoIce": "Cara Deshielo",
"indeedeeMale": "Macho", "indeedeeMale": "Macho",
"indeedeeFemale": "Hembra", "indeedeeFemale": "Hembra",
"morpekoFullBelly": "Saciada", "morpekoFullBelly": "Saciada",
"morpekoHangry": "Hangry",
"zacianHeroOfManyBattles": "Guerrero avezado", "zacianHeroOfManyBattles": "Guerrero avezado",
"zacianCrowned": "Crowned",
"zamazentaHeroOfManyBattles": "Guerrero avezado", "zamazentaHeroOfManyBattles": "Guerrero avezado",
"zamazentaCrowned": "Crowned",
"kubfuSingleStrike": "Single Strike",
"kubfuRapidStrike": "Rapid Strike",
"zarudeDada": "Papá", "zarudeDada": "Papá",
"calyrexIce": "Ice Rider",
"calyrexShadow": "Shadow Rider",
"basculinMale": "Male",
"basculinFemale": "Female",
"enamorusIncarnate": "Avatar", "enamorusIncarnate": "Avatar",
"enamorusTherian": "Therian",
"lechonkMale": "Male",
"lechonkFemale": "Female",
"tandemausFour": "Family of Four",
"tandemausThree": "Family of Three",
"squawkabillyGreenPlumage": "Plumaje Verde", "squawkabillyGreenPlumage": "Plumaje Verde",
"squawkabillyBluePlumage": "Plumaje Azul", "squawkabillyBluePlumage": "Plumaje Azul",
"squawkabillyYellowPlumage": "Plumaje Amarillo", "squawkabillyYellowPlumage": "Plumaje Amarillo",
"squawkabillyWhitePlumage": "Plumaje Blanco", "squawkabillyWhitePlumage": "Plumaje Blanco",
"finizenZero": "Zero",
"finizenZero": "Hero",
"tatsugiriCurly": "Curvada", "tatsugiriCurly": "Curvada",
"tatsugiriDroopy": "Lánguida", "tatsugiriDroopy": "Lánguida",
"tatsugiriStretchy": "Estirada", "tatsugiriStretchy": "Estirada",
"dunsparceTwo": "Two-Segment",
"dunsparceThree": "Three-Segment",
"gimmighoulChest": "Cofre", "gimmighoulChest": "Cofre",
"gimmighoulRoaming": "Andante", "gimmighoulRoaming": "Andante",
"koraidonApexBuild": "Forma Plena", "koraidonApexBuild": "Forma Plena",
@ -164,6 +241,19 @@
"miraidonGlideMode": "Modo Planeo", "miraidonGlideMode": "Modo Planeo",
"poltchageistCounterfeit": "Fraudulenta", "poltchageistCounterfeit": "Fraudulenta",
"poltchageistArtisan": "Opulenta", "poltchageistArtisan": "Opulenta",
"poltchageistUnremarkable": "Unremarkable",
"poltchageistMasterpiece": "Masterpiece",
"ogerponTealMask": "Teal Mask",
"ogerponTealMaskTera": "Teal Mask Terastallized",
"ogerponWellspringMask": "Wellspring Mask",
"ogerponWellspringMaskTera": "Wellspring Mask Terastallized",
"ogerponHearthflameMask": "Hearthflame Mask",
"ogerponHearthflameMaskTera": "Hearthflame Mask Terastallized",
"ogerponCornerstoneMask": "Cornerstone Mask",
"ogerponCornerstoneMaskTera": "Cornerstone Mask Terastallized",
"terpagosTerastal": "Terastal",
"terpagosStellar": "Stellar",
"galarDarumakaZen": "Zen",
"paldeaTaurosCombat": "Combatiente", "paldeaTaurosCombat": "Combatiente",
"paldeaTaurosBlaze": "Ardiente", "paldeaTaurosBlaze": "Ardiente",
"paldeaTaurosAqua": "Acuático" "paldeaTaurosAqua": "Acuático"

View File

@ -40,9 +40,14 @@
"castformRainy": "Pioggia", "castformRainy": "Pioggia",
"castformSnowy": "Nuvola di neve", "castformSnowy": "Nuvola di neve",
"deoxysNormal": "Normale", "deoxysNormal": "Normale",
"deoxysAttack": "Attack",
"deoxysDefense": "Defense",
"deoxysSpeed": "Speed",
"burmyPlant": "Pianta", "burmyPlant": "Pianta",
"burmySandy": "Sabbia", "burmySandy": "Sabbia",
"burmyTrash": "Scarti", "burmyTrash": "Scarti",
"cheribiOvercast": "Overcast",
"cheribiSunshine": "Sunshine",
"shellosEast": "Est", "shellosEast": "Est",
"shellosWest": "Ovest", "shellosWest": "Ovest",
"rotomHeat": "Calore", "rotomHeat": "Calore",
@ -50,21 +55,36 @@
"rotomFrost": "Gelo", "rotomFrost": "Gelo",
"rotomFan": "Vortice", "rotomFan": "Vortice",
"rotomMow": "Taglio", "rotomMow": "Taglio",
"dialgaOrigin": "Origin",
"palkiaOrigin": "Origin",
"giratinaAltered": "Alterata", "giratinaAltered": "Alterata",
"giratinaOrigin": "Origin",
"shayminLand": "Terra", "shayminLand": "Terra",
"shayminSky": "Sky",
"basculinRedStriped": "Linearossa", "basculinRedStriped": "Linearossa",
"basculinBlueStriped": "Lineablu", "basculinBlueStriped": "Lineablu",
"basculinWhiteStriped": "Lineabianca", "basculinWhiteStriped": "Lineabianca",
"darumakaZen": "Zen",
"deerlingSpring": "Primavera", "deerlingSpring": "Primavera",
"deerlingSummer": "Estate", "deerlingSummer": "Estate",
"deerlingAutumn": "Autunno", "deerlingAutumn": "Autunno",
"deerlingWinter": "Inverno", "deerlingWinter": "Inverno",
"tornadusIncarnate": "Incarnazione", "tornadusIncarnate": "Incarnazione",
"tornadusTherian": "Therian",
"thundurusIncarnate": "Incarnazione", "thundurusIncarnate": "Incarnazione",
"thundurusTherian": "Therian",
"landorusIncarnate": "Incarnazione", "landorusIncarnate": "Incarnazione",
"landorusTherian": "Therian",
"kyuremBlack": "Black",
"kyuremWhite": "White",
"keldeoOrdinary": "Normale", "keldeoOrdinary": "Normale",
"keldeoResolute": "Resolute",
"meloettaAria": "Canto", "meloettaAria": "Canto",
"meloettaPirouette": "Danza", "meloettaPirouette": "Danza",
"genesectShock": "Shock Drive",
"genesectBurn": "Burn Drive",
"genesectChill": "Chill Drive",
"genesectDouse": "Douse Drive",
"froakieBattleBond": "Morfosintonia", "froakieBattleBond": "Morfosintonia",
"scatterbugMeadow": "Giardinfiore", "scatterbugMeadow": "Giardinfiore",
"scatterbugIcySnow": "Nevi perenni", "scatterbugIcySnow": "Nevi perenni",
@ -100,6 +120,10 @@
"furfrouLaReine": "Regina", "furfrouLaReine": "Regina",
"furfrouKabuki": "Kabuki", "furfrouKabuki": "Kabuki",
"furfrouPharaoh": "Faraone", "furfrouPharaoh": "Faraone",
"espurrMale": "Male",
"espurrFemale": "Female",
"honedgeShiled": "Shield",
"honedgeBlade": "Blade",
"pumpkabooSmall": "Mini", "pumpkabooSmall": "Mini",
"pumpkabooLarge": "Grande", "pumpkabooLarge": "Grande",
"pumpkabooSuper": "Maxi", "pumpkabooSuper": "Maxi",
@ -110,11 +134,34 @@
"zygarde50Pc": "Forma 50% Sciamefusione", "zygarde50Pc": "Forma 50% Sciamefusione",
"zygarde10Pc": "Forma 10% Sciamefusione", "zygarde10Pc": "Forma 10% Sciamefusione",
"zygardeComplete": "Forma perfetta", "zygardeComplete": "Forma perfetta",
"hoopaUnbound": "Unbound",
"oricorioBaile": "Flamenco", "oricorioBaile": "Flamenco",
"oricorioPompom": "Cheerdance", "oricorioPompom": "Cheerdance",
"oricorioPau": "Hula", "oricorioPau": "Hula",
"oricorioSensu": "Buyō", "oricorioSensu": "Buyō",
"rockruffOwnTempo": "Mentelocale", "rockruffOwnTempo": "Mentelocale",
"rockruffMidday": "Midday",
"rockruffMidnight": "Midnight",
"rockruffMidnight": "Dusk",
"wishiwashiSchool": "School",
"typeNullNormal": "Type: Normal",
"typeNullFighting": "Type: Fighting",
"typeNullFlying": "Type: Flying",
"typeNullPoison": "Type: Poison",
"typeNullGround": "Type: Ground",
"typeNullRock": "Type: Rock",
"typeNullBug": "Type: Bug",
"typeNullGhost": "Type: Ghost",
"typeNullSteel": "Type: Steel",
"typeNullFire": "Type: Fire",
"typeNullWater": "Type: Water",
"typeNullGrass": "Type: Grass",
"typeNullElectric": "Type: Electric",
"typeNullPsychic": "Type: Psychic",
"typeNullIce": "Type: Ice",
"typeNullDragon": "Type: Dragon",
"typeNullDark": "Type: Dark",
"typeNullFairy": "Type: Fairy",
"miniorRedMeteor": "Nucleo Rosso", "miniorRedMeteor": "Nucleo Rosso",
"miniorOrangeMeteor": "Nucleo Arancione", "miniorOrangeMeteor": "Nucleo Arancione",
"miniorYellowMeteor": "Nucleo Giallo", "miniorYellowMeteor": "Nucleo Giallo",
@ -131,25 +178,55 @@
"miniorViolet": "Violetto", "miniorViolet": "Violetto",
"mimikyuDisguised": "Mascherata", "mimikyuDisguised": "Mascherata",
"mimikyuBusted": "Smascherata", "mimikyuBusted": "Smascherata",
"necrozmaDuskMane": "Dusk Mane",
"necrozmaDawnWings": "Dawn Wings",
"necrozmaUltra": "Ultra",
"magearnaOriginal": "Colore Antico", "magearnaOriginal": "Colore Antico",
"marshadowZenith": "Zenith", "marshadowZenith": "Zenith",
"sinisteaPhony": "Contraffatta", "sinisteaPhony": "Contraffatta",
"sinisteaAntique": "Autentica", "sinisteaAntique": "Autentica",
"milceryVanillaCream": "Vanilla Cream",
"milceryRubyCream": "Ruby Cream",
"milceryMatchaCream": "Matcha Cream",
"milceryMintCream": "Mint Cream",
"milceryLemonCream": "Lemon Cream",
"milcerySaltedCream": "Salted Cream",
"milceryRubySwirl": "Ruby Swirl",
"milceryCaramelSwirl": "Caramel Swirl",
"milceryRainbowSwirl": "Rainbow Swirl",
"eiscueNoIce": "Liquefaccia", "eiscueNoIce": "Liquefaccia",
"indeedeeMale": "Maschio", "indeedeeMale": "Maschio",
"indeedeeFemale": "Femmina", "indeedeeFemale": "Femmina",
"morpekoFullBelly": "Panciapiena", "morpekoFullBelly": "Panciapiena",
"morpekoHangry": "Hangry",
"zacianHeroOfManyBattles": "Eroe di Mille Lotte", "zacianHeroOfManyBattles": "Eroe di Mille Lotte",
"zacianCrowned": "Crowned",
"zamazentaHeroOfManyBattles": "Eroe di Mille Lotte", "zamazentaHeroOfManyBattles": "Eroe di Mille Lotte",
"zamazentaCrowned": "Crowned",
"kubfuSingleStrike": "Single Strike",
"kubfuRapidStrike": "Rapid Strike",
"zarudeDada": "Papà", "zarudeDada": "Papà",
"calyrexIce": "Ice Rider",
"calyrexShadow": "Shadow Rider",
"basculinMale": "Male",
"basculinFemale": "Female",
"enamorusIncarnate": "Incarnazione", "enamorusIncarnate": "Incarnazione",
"enamorusTherian": "Therian",
"lechonkMale": "Male",
"lechonkFemale": "Female",
"tandemausFour": "Family of Four",
"tandemausThree": "Family of Three",
"squawkabillyGreenPlumage": "Piume Verdi", "squawkabillyGreenPlumage": "Piume Verdi",
"squawkabillyBluePlumage": "Piume Azzurre", "squawkabillyBluePlumage": "Piume Azzurre",
"squawkabillyYellowPlumage": "Piume Gialle", "squawkabillyYellowPlumage": "Piume Gialle",
"squawkabillyWhitePlumage": "Piume Bianche", "squawkabillyWhitePlumage": "Piume Bianche",
"finizenZero": "Zero",
"finizenZero": "Hero",
"tatsugiriCurly": "Arcuata", "tatsugiriCurly": "Arcuata",
"tatsugiriDroopy": "Adagiata", "tatsugiriDroopy": "Adagiata",
"tatsugiriStretchy": "Tesa", "tatsugiriStretchy": "Tesa",
"dunsparceTwo": "Two-Segment",
"dunsparceThree": "Three-Segment",
"gimmighoulChest": "Scrigno", "gimmighoulChest": "Scrigno",
"gimmighoulRoaming": "Ambulante", "gimmighoulRoaming": "Ambulante",
"koraidonApexBuild": "Foggia Integrale", "koraidonApexBuild": "Foggia Integrale",
@ -164,7 +241,20 @@
"miraidonGlideMode": "Assetto Planata", "miraidonGlideMode": "Assetto Planata",
"poltchageistCounterfeit": "Taroccata", "poltchageistCounterfeit": "Taroccata",
"poltchageistArtisan": "Pregiata", "poltchageistArtisan": "Pregiata",
"poltchageistUnremarkable": "Unremarkable",
"poltchageistMasterpiece": "Masterpiece",
"ogerponTealMask": "Teal Mask",
"ogerponTealMaskTera": "Teal Mask Terastallized",
"ogerponWellspringMask": "Wellspring Mask",
"ogerponWellspringMaskTera": "Wellspring Mask Terastallized",
"ogerponHearthflameMask": "Hearthflame Mask",
"ogerponHearthflameMaskTera": "Hearthflame Mask Terastallized",
"ogerponCornerstoneMask": "Cornerstone Mask",
"ogerponCornerstoneMaskTera": "Cornerstone Mask Terastallized",
"terpagosTerastal": "Terastal",
"terpagosStellar": "Stellar",
"galarDarumakaZen": "Zen",
"paldeaTaurosCombat": "Combattiva", "paldeaTaurosCombat": "Combattiva",
"paldeaTaurosBlaze": "Infuocata", "paldeaTaurosBlaze": "Infuocata",
"paldeaTaurosAqua": "Acquatica" "paldeaTaurosAqua": "Acquatica"
} }

View File

@ -40,9 +40,14 @@
"castformRainy": "あまみず", "castformRainy": "あまみず",
"castformSnowy": "ゆきぐも", "castformSnowy": "ゆきぐも",
"deoxysNormal": "ノーマル", "deoxysNormal": "ノーマル",
"deoxysAttack": "Attack",
"deoxysDefense": "Defense",
"deoxysSpeed": "Speed",
"burmyPlant": "くさき", "burmyPlant": "くさき",
"burmySandy": "すなち", "burmySandy": "すなち",
"burmyTrash": "ゴミ", "burmyTrash": "ゴミ",
"cheribiOvercast": "Overcast",
"cheribiSunshine": "Sunshine",
"shellosEast": "ひがし", "shellosEast": "ひがし",
"shellosWest": "にし", "shellosWest": "にし",
"rotomHeat": "ヒート", "rotomHeat": "ヒート",
@ -50,21 +55,36 @@
"rotomFrost": "フロスト", "rotomFrost": "フロスト",
"rotomFan": "スピン", "rotomFan": "スピン",
"rotomMow": "カット", "rotomMow": "カット",
"dialgaOrigin": "Origin",
"palkiaOrigin": "Origin",
"giratinaAltered": "アナザー", "giratinaAltered": "アナザー",
"giratinaOrigin": "Origin",
"shayminLand": "ランド", "shayminLand": "ランド",
"shayminSky": "Sky",
"basculinRedStriped": "赤筋", "basculinRedStriped": "赤筋",
"basculinBlueStriped": "青筋", "basculinBlueStriped": "青筋",
"basculinWhiteStriped": "白筋", "basculinWhiteStriped": "白筋",
"darumakaZen": "Zen",
"deerlingSpring": "春", "deerlingSpring": "春",
"deerlingSummer": "夏", "deerlingSummer": "夏",
"deerlingAutumn": "秋", "deerlingAutumn": "秋",
"deerlingWinter": "冬", "deerlingWinter": "冬",
"tornadusIncarnate": "けしん", "tornadusIncarnate": "けしん",
"tornadusTherian": "Therian",
"thundurusIncarnate": "けしん", "thundurusIncarnate": "けしん",
"thundurusTherian": "Therian",
"landorusIncarnate": "けしん", "landorusIncarnate": "けしん",
"landorusTherian": "Therian",
"kyuremBlack": "Black",
"kyuremWhite": "White",
"keldeoOrdinary": "いつも", "keldeoOrdinary": "いつも",
"keldeoResolute": "Resolute",
"meloettaAria": "ボイス", "meloettaAria": "ボイス",
"meloettaPirouette": "ステップ", "meloettaPirouette": "ステップ",
"genesectShock": "Shock Drive",
"genesectBurn": "Burn Drive",
"genesectChill": "Chill Drive",
"genesectDouse": "Douse Drive",
"froakieBattleBond": "きずなへんげ", "froakieBattleBond": "きずなへんげ",
"scatterbugMeadow": "はなぞの", "scatterbugMeadow": "はなぞの",
"scatterbugIcySnow": "ひょうせつ", "scatterbugIcySnow": "ひょうせつ",
@ -100,6 +120,10 @@
"furfrouLaReine": "クイーン", "furfrouLaReine": "クイーン",
"furfrouKabuki": "カブキ", "furfrouKabuki": "カブキ",
"furfrouPharaoh": "キングダム", "furfrouPharaoh": "キングダム",
"espurrMale": "Male",
"espurrFemale": "Female",
"honedgeShiled": "Shield",
"honedgeBlade": "Blade",
"pumpkabooSmall": "ちいさい", "pumpkabooSmall": "ちいさい",
"pumpkabooLarge": "おおきい", "pumpkabooLarge": "おおきい",
"pumpkabooSuper": "とくだい", "pumpkabooSuper": "とくだい",
@ -110,11 +134,34 @@
"zygarde50Pc": "50%フォルム スワームチェンジ", "zygarde50Pc": "50%フォルム スワームチェンジ",
"zygarde10Pc": "10%フォルム スワームチェンジ", "zygarde10Pc": "10%フォルム スワームチェンジ",
"zygardeComplete": "パーフェクトフォルム", "zygardeComplete": "パーフェクトフォルム",
"hoopaUnbound": "Unbound",
"oricorioBaile": "めらめら", "oricorioBaile": "めらめら",
"oricorioPompom": "ぱちぱち", "oricorioPompom": "ぱちぱち",
"oricorioPau": "ふらふら", "oricorioPau": "ふらふら",
"oricorioSensu": "まいまい", "oricorioSensu": "まいまい",
"rockruffOwnTempo": "マイペース", "rockruffOwnTempo": "マイペース",
"rockruffMidday": "Midday",
"rockruffMidnight": "Midnight",
"rockruffMidnight": "Dusk",
"wishiwashiSchool": "School",
"typeNullNormal": "Type: Normal",
"typeNullFighting": "Type: Fighting",
"typeNullFlying": "Type: Flying",
"typeNullPoison": "Type: Poison",
"typeNullGround": "Type: Ground",
"typeNullRock": "Type: Rock",
"typeNullBug": "Type: Bug",
"typeNullGhost": "Type: Ghost",
"typeNullSteel": "Type: Steel",
"typeNullFire": "Type: Fire",
"typeNullWater": "Type: Water",
"typeNullGrass": "Type: Grass",
"typeNullElectric": "Type: Electric",
"typeNullPsychic": "Type: Psychic",
"typeNullIce": "Type: Ice",
"typeNullDragon": "Type: Dragon",
"typeNullDark": "Type: Dark",
"typeNullFairy": "Type: Fairy",
"miniorRedMeteor": "赤 りゅうせい", "miniorRedMeteor": "赤 りゅうせい",
"miniorOrangeMeteor": "オレンジ りゅうせい", "miniorOrangeMeteor": "オレンジ りゅうせい",
"miniorYellowMeteor": "黄 りゅうせい", "miniorYellowMeteor": "黄 りゅうせい",
@ -131,22 +178,52 @@
"miniorViolet": "紫", "miniorViolet": "紫",
"mimikyuDisguised": "ばけたすがた", "mimikyuDisguised": "ばけたすがた",
"mimikyuBusted": "ばれたすがた", "mimikyuBusted": "ばれたすがた",
"necrozmaDuskMane": "Dusk Mane",
"necrozmaDawnWings": "Dawn Wings",
"necrozmaUltra": "Ultra",
"magearnaOriginal": "500ねんまえ", "magearnaOriginal": "500ねんまえ",
"marshadowZenith": "Zパワー", "marshadowZenith": "Zパワー",
"sinisteaPhony": "がんさく", "sinisteaPhony": "がんさく",
"sinisteaAntique": "しんさく", "sinisteaAntique": "しんさく",
"milceryVanillaCream": "Vanilla Cream",
"milceryRubyCream": "Ruby Cream",
"milceryMatchaCream": "Matcha Cream",
"milceryMintCream": "Mint Cream",
"milceryLemonCream": "Lemon Cream",
"milcerySaltedCream": "Salted Cream",
"milceryRubySwirl": "Ruby Swirl",
"milceryCaramelSwirl": "Caramel Swirl",
"milceryRainbowSwirl": "Rainbow Swirl",
"eiscueNoIce": "ナイスなし", "eiscueNoIce": "ナイスなし",
"indeedeeMale": "オス", "indeedeeMale": "オス",
"indeedeeFemale": "メス", "indeedeeFemale": "メス",
"morpekoFullBelly": "まんぷく", "morpekoFullBelly": "まんぷく",
"morpekoHangry": "Hangry",
"zacianHeroOfManyBattles": "れきせんのゆうしゃ", "zacianHeroOfManyBattles": "れきせんのゆうしゃ",
"zacianCrowned": "Crowned",
"zamazentaHeroOfManyBattles": "れきせんのゆうしゃ", "zamazentaHeroOfManyBattles": "れきせんのゆうしゃ",
"zamazentaCrowned": "Crowned",
"kubfuSingleStrike": "Single Strike",
"kubfuRapidStrike": "Rapid Strike",
"zarudeDada": "とうちゃん", "zarudeDada": "とうちゃん",
"calyrexIce": "Ice Rider",
"calyrexShadow": "Shadow Rider",
"basculinMale": "Male",
"basculinFemale": "Female",
"enamorusIncarnate": "けしん", "enamorusIncarnate": "けしん",
"enamorusTherian": "Therian",
"lechonkMale": "Male",
"lechonkFemale": "Female",
"tandemausFour": "Family of Four",
"tandemausThree": "Family of Three",
"squawkabillyGreenPlumage": "グリーンフェザー", "squawkabillyGreenPlumage": "グリーンフェザー",
"squawkabillyBluePlumage": "ブルーフェザー", "squawkabillyBluePlumage": "ブルーフェザー",
"squawkabillyYellowPlumage": "イエローフェザー", "squawkabillyYellowPlumage": "イエローフェザー",
"squawkabillyWhitePlumage": "ホワイトフェザー", "squawkabillyWhitePlumage": "ホワイトフェザー",
"dunsparceTwo": "Two-Segment",
"dunsparceThree": "Three-Segment",
"finizenZero": "Zero",
"finizenZero": "Hero",
"tatsugiriCurly": "そったすがた", "tatsugiriCurly": "そったすがた",
"tatsugiriDroopy": "たれたすがた", "tatsugiriDroopy": "たれたすがた",
"tatsugiriStretchy": "のびたすがた", "tatsugiriStretchy": "のびたすがた",
@ -164,7 +241,20 @@
"miraidonGlideMode":"グライドモード", "miraidonGlideMode":"グライドモード",
"poltchageistCounterfeit": "マガイモノ", "poltchageistCounterfeit": "マガイモノ",
"poltchageistArtisan": "タカイモノ", "poltchageistArtisan": "タカイモノ",
"poltchageistUnremarkable": "Unremarkable",
"poltchageistMasterpiece": "Masterpiece",
"ogerponTealMask": "Teal Mask",
"ogerponTealMaskTera": "Teal Mask Terastallized",
"ogerponWellspringMask": "Wellspring Mask",
"ogerponWellspringMaskTera": "Wellspring Mask Terastallized",
"ogerponHearthflameMask": "Hearthflame Mask",
"ogerponHearthflameMaskTera": "Hearthflame Mask Terastallized",
"ogerponCornerstoneMask": "Cornerstone Mask",
"ogerponCornerstoneMaskTera": "Cornerstone Mask Terastallized",
"terpagosTerastal": "Terastal",
"terpagosStellar": "Stellar",
"galarDarumakaZen": "Zen",
"paldeaTaurosCombat": "コンバット", "paldeaTaurosCombat": "コンバット",
"paldeaTaurosBlaze": "ブレイズ", "paldeaTaurosBlaze": "ブレイズ",
"paldeaTaurosAqua": "ウォーター" "paldeaTaurosAqua": "ウォーター"
} }

View File

@ -40,9 +40,14 @@
"castformRainy": "빗방울의 모습", "castformRainy": "빗방울의 모습",
"castformSnowy": "설운의 모습", "castformSnowy": "설운의 모습",
"deoxysNormal": "노말폼", "deoxysNormal": "노말폼",
"deoxysAttack": "Attack",
"deoxysDefense": "Defense",
"deoxysSpeed": "Speed",
"burmyPlant": "초목도롱", "burmyPlant": "초목도롱",
"burmySandy": "모래땅도롱", "burmySandy": "모래땅도롱",
"burmyTrash": "슈레도롱", "burmyTrash": "슈레도롱",
"cheribiOvercast": "Overcast",
"cheribiSunshine": "Sunshine",
"shellosEast": "동쪽바다의 모습", "shellosEast": "동쪽바다의 모습",
"shellosWest": "서쪽바다의 모습", "shellosWest": "서쪽바다의 모습",
"rotomHeat": "히트", "rotomHeat": "히트",
@ -50,21 +55,36 @@
"rotomFrost": "프로스트", "rotomFrost": "프로스트",
"rotomFan": "스핀", "rotomFan": "스핀",
"rotomMow": "커트", "rotomMow": "커트",
"dialgaOrigin": "Origin",
"palkiaOrigin": "Origin",
"giratinaAltered": "어나더폼", "giratinaAltered": "어나더폼",
"giratinaOrigin": "Origin",
"shayminLand": "랜드폼", "shayminLand": "랜드폼",
"shayminSky": "Sky",
"basculinRedStriped": "적색근의 모습", "basculinRedStriped": "적색근의 모습",
"basculinBlueStriped": "청색근의 모습", "basculinBlueStriped": "청색근의 모습",
"basculinWhiteStriped": "백색근의 모습", "basculinWhiteStriped": "백색근의 모습",
"darumakaZen": "Zen",
"deerlingSpring": "봄의 모습", "deerlingSpring": "봄의 모습",
"deerlingSummer": "여름의 모습", "deerlingSummer": "여름의 모습",
"deerlingAutumn": "가을의 모습", "deerlingAutumn": "가을의 모습",
"deerlingWinter": "겨울의 모습", "deerlingWinter": "겨울의 모습",
"tornadusIncarnate": "화신폼", "tornadusIncarnate": "화신폼",
"tornadusTherian": "Therian",
"thundurusIncarnate": "화신폼", "thundurusIncarnate": "화신폼",
"thundurusTherian": "Therian",
"landorusIncarnate": "화신폼", "landorusIncarnate": "화신폼",
"landorusTherian": "Therian",
"kyuremBlack": "Black",
"kyuremWhite": "White",
"keldeoOrdinary": "평상시 모습", "keldeoOrdinary": "평상시 모습",
"keldeoResolute": "Resolute",
"meloettaAria": "보이스폼", "meloettaAria": "보이스폼",
"meloettaPirouette": "스텝폼", "meloettaPirouette": "스텝폼",
"genesectShock": "Shock Drive",
"genesectBurn": "Burn Drive",
"genesectChill": "Chill Drive",
"genesectDouse": "Douse Drive",
"froakieBattleBond": "유대변화", "froakieBattleBond": "유대변화",
"scatterbugMeadow": "화원의 모양", "scatterbugMeadow": "화원의 모양",
"scatterbugIcySnow": "빙설의 모양", "scatterbugIcySnow": "빙설의 모양",
@ -100,6 +120,10 @@
"furfrouLaReine": "퀸컷", "furfrouLaReine": "퀸컷",
"furfrouKabuki": "가부키컷", "furfrouKabuki": "가부키컷",
"furfrouPharaoh": "킹덤컷", "furfrouPharaoh": "킹덤컷",
"espurrMale": "Male",
"espurrFemale": "Female",
"honedgeShiled": "Shield",
"honedgeBlade": "Blade",
"pumpkabooSmall": "작은 사이즈", "pumpkabooSmall": "작은 사이즈",
"pumpkabooLarge": "큰 사이즈", "pumpkabooLarge": "큰 사이즈",
"pumpkabooSuper": "특대 사이즈", "pumpkabooSuper": "특대 사이즈",
@ -110,11 +134,34 @@
"zygarde50Pc": "스웜체인지 50%폼", "zygarde50Pc": "스웜체인지 50%폼",
"zygarde10Pc": "스웜체인지 10%폼", "zygarde10Pc": "스웜체인지 10%폼",
"zygardeComplete": "퍼펙트폼", "zygardeComplete": "퍼펙트폼",
"hoopaUnbound": "Unbound",
"oricorioBaile": "이글이글스타일", "oricorioBaile": "이글이글스타일",
"oricorioPompom": "파칙파칙스타일", "oricorioPompom": "파칙파칙스타일",
"oricorioPau": "훌라훌라스타일", "oricorioPau": "훌라훌라스타일",
"oricorioSensu": "하늘하늘스타일", "oricorioSensu": "하늘하늘스타일",
"rockruffOwnTempo": "마이페이스", "rockruffOwnTempo": "마이페이스",
"rockruffMidday": "Midday",
"rockruffMidnight": "Midnight",
"rockruffMidnight": "Dusk",
"wishiwashiSchool": "School",
"typeNullNormal": "Type: Normal",
"typeNullFighting": "Type: Fighting",
"typeNullFlying": "Type: Flying",
"typeNullPoison": "Type: Poison",
"typeNullGround": "Type: Ground",
"typeNullRock": "Type: Rock",
"typeNullBug": "Type: Bug",
"typeNullGhost": "Type: Ghost",
"typeNullSteel": "Type: Steel",
"typeNullFire": "Type: Fire",
"typeNullWater": "Type: Water",
"typeNullGrass": "Type: Grass",
"typeNullElectric": "Type: Electric",
"typeNullPsychic": "Type: Psychic",
"typeNullIce": "Type: Ice",
"typeNullDragon": "Type: Dragon",
"typeNullDark": "Type: Dark",
"typeNullFairy": "Type: Fairy",
"miniorRedMeteor": "유성의 모습(빨강)", "miniorRedMeteor": "유성의 모습(빨강)",
"miniorOrangeMeteor": "유성의 모습(주황)", "miniorOrangeMeteor": "유성의 모습(주황)",
"miniorYellowMeteor": "유성의 모습(노랑)", "miniorYellowMeteor": "유성의 모습(노랑)",
@ -131,25 +178,55 @@
"miniorViolet": "보라색 코어", "miniorViolet": "보라색 코어",
"mimikyuDisguised": "둔갑한 모습", "mimikyuDisguised": "둔갑한 모습",
"mimikyuBusted": "들킨 모습", "mimikyuBusted": "들킨 모습",
"necrozmaDuskMane": "Dusk Mane",
"necrozmaDawnWings": "Dawn Wings",
"necrozmaUltra": "Ultra",
"magearnaOriginal": "500년 전의 색", "magearnaOriginal": "500년 전의 색",
"marshadowZenith": "투지를 불태운 마샤도", "marshadowZenith": "투지를 불태운 마샤도",
"sinisteaPhony": "위작품", "sinisteaPhony": "위작품",
"sinisteaAntique": "진작품", "sinisteaAntique": "진작품",
"milceryVanillaCream": "Vanilla Cream",
"milceryRubyCream": "Ruby Cream",
"milceryMatchaCream": "Matcha Cream",
"milceryMintCream": "Mint Cream",
"milceryLemonCream": "Lemon Cream",
"milcerySaltedCream": "Salted Cream",
"milceryRubySwirl": "Ruby Swirl",
"milceryCaramelSwirl": "Caramel Swirl",
"milceryRainbowSwirl": "Rainbow Swirl",
"eiscueNoIce": "나이스페이스", "eiscueNoIce": "나이스페이스",
"indeedeeMale": "수컷의 모습", "indeedeeMale": "수컷의 모습",
"indeedeeFemale": "암컷의 모습", "indeedeeFemale": "암컷의 모습",
"morpekoFullBelly": "배부른 모양", "morpekoFullBelly": "배부른 모양",
"morpekoHangry": "Hangry",
"zacianHeroOfManyBattles": "역전의 용사", "zacianHeroOfManyBattles": "역전의 용사",
"zacianCrowned": "Crowned",
"zamazentaHeroOfManyBattles": "역전의 용사", "zamazentaHeroOfManyBattles": "역전의 용사",
"zamazentaCrowned": "Crowned",
"kubfuSingleStrike": "Single Strike",
"kubfuRapidStrike": "Rapid Strike",
"zarudeDada": "아빠", "zarudeDada": "아빠",
"calyrexIce": "Ice Rider",
"calyrexShadow": "Shadow Rider",
"basculinMale": "Male",
"basculinFemale": "Female",
"enamorusIncarnate": "화신폼", "enamorusIncarnate": "화신폼",
"enamorusTherian": "Therian",
"lechonkMale": "Male",
"lechonkFemale": "Female",
"tandemausFour": "Family of Four",
"tandemausThree": "Family of Three",
"squawkabillyGreenPlumage": "그린 페더", "squawkabillyGreenPlumage": "그린 페더",
"squawkabillyBluePlumage": "블루 페더", "squawkabillyBluePlumage": "블루 페더",
"squawkabillyYellowPlumage": "옐로 페더", "squawkabillyYellowPlumage": "옐로 페더",
"squawkabillyWhitePlumage": "화이트 페더", "squawkabillyWhitePlumage": "화이트 페더",
"finizenZero": "Zero",
"finizenZero": "Hero",
"tatsugiriCurly": "젖힌 모습", "tatsugiriCurly": "젖힌 모습",
"tatsugiriDroopy": "늘어진 모습", "tatsugiriDroopy": "늘어진 모습",
"tatsugiriStretchy": "뻗은 모습", "tatsugiriStretchy": "뻗은 모습",
"dunsparceTwo": "Two-Segment",
"dunsparceThree": "Three-Segment",
"gimmighoulChest": "상자폼", "gimmighoulChest": "상자폼",
"gimmighoulRoaming": "도보폼", "gimmighoulRoaming": "도보폼",
"koraidonApexBuild": "완전형태", "koraidonApexBuild": "완전형태",
@ -164,7 +241,20 @@
"miraidonGlideMode": "글라이드모드", "miraidonGlideMode": "글라이드모드",
"poltchageistCounterfeit": "가짜배기의 모습", "poltchageistCounterfeit": "가짜배기의 모습",
"poltchageistArtisan": "알짜배기의 모습", "poltchageistArtisan": "알짜배기의 모습",
"poltchageistUnremarkable": "Unremarkable",
"poltchageistMasterpiece": "Masterpiece",
"ogerponTealMask": "Teal Mask",
"ogerponTealMaskTera": "Teal Mask Terastallized",
"ogerponWellspringMask": "Wellspring Mask",
"ogerponWellspringMaskTera": "Wellspring Mask Terastallized",
"ogerponHearthflameMask": "Hearthflame Mask",
"ogerponHearthflameMaskTera": "Hearthflame Mask Terastallized",
"ogerponCornerstoneMask": "Cornerstone Mask",
"ogerponCornerstoneMaskTera": "Cornerstone Mask Terastallized",
"terpagosTerastal": "Terastal",
"terpagosStellar": "Stellar",
"galarDarumakaZen": "Zen",
"paldeaTaurosCombat": "컴뱃종", "paldeaTaurosCombat": "컴뱃종",
"paldeaTaurosBlaze": "블레이즈종", "paldeaTaurosBlaze": "블레이즈종",
"paldeaTaurosAqua": "워터종" "paldeaTaurosAqua": "워터종"
} }

View File

@ -40,9 +40,14 @@
"castformRainy": "Chuvoso", "castformRainy": "Chuvoso",
"castformSnowy": "Nevado", "castformSnowy": "Nevado",
"deoxysNormal": "Normal", "deoxysNormal": "Normal",
"deoxysAttack": "Attack",
"deoxysDefense": "Defense",
"deoxysSpeed": "Speed",
"burmyPlant": "Vegetal", "burmyPlant": "Vegetal",
"burmySandy": "Arenoso", "burmySandy": "Arenoso",
"burmyTrash": "Lixo", "burmyTrash": "Lixo",
"cheribiOvercast": "Overcast",
"cheribiSunshine": "Sunshine",
"shellosEast": "Leste", "shellosEast": "Leste",
"shellosWest": "Oeste", "shellosWest": "Oeste",
"rotomHeat": "Calor", "rotomHeat": "Calor",
@ -50,21 +55,36 @@
"rotomFrost": "Congelante", "rotomFrost": "Congelante",
"rotomFan": "Ventilador", "rotomFan": "Ventilador",
"rotomMow": "Corte", "rotomMow": "Corte",
"dialgaOrigin": "Origin",
"palkiaOrigin": "Origin",
"giratinaAltered": "Alterado", "giratinaAltered": "Alterado",
"giratinaOrigin": "Origin",
"shayminLand": "Terrestre", "shayminLand": "Terrestre",
"shayminSky": "Sky",
"basculinRedStriped": "Listras Vermelhas", "basculinRedStriped": "Listras Vermelhas",
"basculinBlueStriped": "Listras Azuis", "basculinBlueStriped": "Listras Azuis",
"basculinWhiteStriped": "Listras Brancas", "basculinWhiteStriped": "Listras Brancas",
"darumakaZen": "Zen",
"deerlingSpring": "Primavera", "deerlingSpring": "Primavera",
"deerlingSummer": "Verão", "deerlingSummer": "Verão",
"deerlingAutumn": "Outono", "deerlingAutumn": "Outono",
"deerlingWinter": "Inverno", "deerlingWinter": "Inverno",
"tornadusIncarnate": "Materializado", "tornadusIncarnate": "Materializado",
"tornadusTherian": "Therian",
"thundurusIncarnate": "Materializado", "thundurusIncarnate": "Materializado",
"thundurusTherian": "Therian",
"landorusIncarnate": "Materializado", "landorusIncarnate": "Materializado",
"landorusTherian": "Therian",
"kyuremBlack": "Black",
"kyuremWhite": "White",
"keldeoOrdinary": "Comum", "keldeoOrdinary": "Comum",
"keldeoResolute": "Resolute",
"meloettaAria": "Ária", "meloettaAria": "Ária",
"meloettaPirouette": "Pirueta", "meloettaPirouette": "Pirueta",
"genesectShock": "Shock Drive",
"genesectBurn": "Burn Drive",
"genesectChill": "Chill Drive",
"genesectDouse": "Douse Drive",
"froakieBattleBond": "Vínculo de Batalha", "froakieBattleBond": "Vínculo de Batalha",
"scatterbugMeadow": "Prado", "scatterbugMeadow": "Prado",
"scatterbugIcySnow": "Neve Congelada", "scatterbugIcySnow": "Neve Congelada",
@ -100,6 +120,10 @@
"furfrouLaReine": "Aristocrático", "furfrouLaReine": "Aristocrático",
"furfrouKabuki": "Kabuki", "furfrouKabuki": "Kabuki",
"furfrouPharaoh": "Faraó", "furfrouPharaoh": "Faraó",
"espurrMale": "Male",
"espurrFemale": "Female",
"honedgeShiled": "Shield",
"honedgeBlade": "Blade",
"pumpkabooSmall": "Pequeno", "pumpkabooSmall": "Pequeno",
"pumpkabooLarge": "Grande", "pumpkabooLarge": "Grande",
"pumpkabooSuper": "Extragrande", "pumpkabooSuper": "Extragrande",
@ -110,11 +134,34 @@
"zygarde50Pc": "Forma 50% Agrupada", "zygarde50Pc": "Forma 50% Agrupada",
"zygarde10Pc": "Forma 10% Agrupada", "zygarde10Pc": "Forma 10% Agrupada",
"zygardeComplete": "Forma Completa", "zygardeComplete": "Forma Completa",
"hoopaUnbound": "Unbound",
"oricorioBaile": "Flamenco", "oricorioBaile": "Flamenco",
"oricorioPompom": "Pompom", "oricorioPompom": "Pompom",
"oricorioPau": "Hula", "oricorioPau": "Hula",
"oricorioSensu": "Leque", "oricorioSensu": "Leque",
"rockruffOwnTempo": "Próprio Tempo", "rockruffOwnTempo": "Próprio Tempo",
"rockruffMidday": "Midday",
"rockruffMidnight": "Midnight",
"rockruffMidnight": "Dusk",
"wishiwashiSchool": "School",
"typeNullNormal": "Type: Normal",
"typeNullFighting": "Type: Fighting",
"typeNullFlying": "Type: Flying",
"typeNullPoison": "Type: Poison",
"typeNullGround": "Type: Ground",
"typeNullRock": "Type: Rock",
"typeNullBug": "Type: Bug",
"typeNullGhost": "Type: Ghost",
"typeNullSteel": "Type: Steel",
"typeNullFire": "Type: Fire",
"typeNullWater": "Type: Water",
"typeNullGrass": "Type: Grass",
"typeNullElectric": "Type: Electric",
"typeNullPsychic": "Type: Psychic",
"typeNullIce": "Type: Ice",
"typeNullDragon": "Type: Dragon",
"typeNullDark": "Type: Dark",
"typeNullFairy": "Type: Fairy",
"miniorRedMeteor": "Meteoro Vermelho", "miniorRedMeteor": "Meteoro Vermelho",
"miniorOrangeMeteor": "Meteoro Laranja", "miniorOrangeMeteor": "Meteoro Laranja",
"miniorYellowMeteor": "Meteoro Amarelo", "miniorYellowMeteor": "Meteoro Amarelo",
@ -131,25 +178,55 @@
"miniorViolet": "Violeta", "miniorViolet": "Violeta",
"mimikyuDisguised": "Disfarçado", "mimikyuDisguised": "Disfarçado",
"mimikyuBusted": "Descoberto", "mimikyuBusted": "Descoberto",
"necrozmaDuskMane": "Dusk Mane",
"necrozmaDawnWings": "Dawn Wings",
"necrozmaUltra": "Ultra",
"magearnaOriginal": "Original", "magearnaOriginal": "Original",
"marshadowZenith": "Zênite", "marshadowZenith": "Zênite",
"sinisteaPhony": "Falsificado", "sinisteaPhony": "Falsificado",
"sinisteaAntique": "Autêntico", "sinisteaAntique": "Autêntico",
"milceryVanillaCream": "Vanilla Cream",
"milceryRubyCream": "Ruby Cream",
"milceryMatchaCream": "Matcha Cream",
"milceryMintCream": "Mint Cream",
"milceryLemonCream": "Lemon Cream",
"milcerySaltedCream": "Salted Cream",
"milceryRubySwirl": "Ruby Swirl",
"milceryCaramelSwirl": "Caramel Swirl",
"milceryRainbowSwirl": "Rainbow Swirl",
"eiscueNoIce": "Descongelado", "eiscueNoIce": "Descongelado",
"indeedeeMale": "Macho", "indeedeeMale": "Macho",
"indeedeeFemale": "Fêmea", "indeedeeFemale": "Fêmea",
"morpekoFullBelly": "Saciado", "morpekoFullBelly": "Saciado",
"morpekoHangry": "Hangry",
"zacianHeroOfManyBattles": "Herói Veterano", "zacianHeroOfManyBattles": "Herói Veterano",
"zacianCrowned": "Crowned",
"zamazentaHeroOfManyBattles": "Herói Veterano", "zamazentaHeroOfManyBattles": "Herói Veterano",
"zamazentaCrowned": "Crowned",
"kubfuSingleStrike": "Single Strike",
"kubfuRapidStrike": "Rapid Strike",
"zarudeDada": "Papa", "zarudeDada": "Papa",
"calyrexIce": "Ice Rider",
"calyrexShadow": "Shadow Rider",
"basculinMale": "Male",
"basculinFemale": "Female",
"enamorusIncarnate": "Materializado", "enamorusIncarnate": "Materializado",
"enamorusTherian": "Therian",
"lechonkMale": "Male",
"lechonkFemale": "Female",
"tandemausFour": "Family of Four",
"tandemausThree": "Family of Three",
"squawkabillyGreenPlumage": "Plumas Verdes", "squawkabillyGreenPlumage": "Plumas Verdes",
"squawkabillyBluePlumage": "Plumas Azuis", "squawkabillyBluePlumage": "Plumas Azuis",
"squawkabillyYellowPlumage": "Plumas Amarelas", "squawkabillyYellowPlumage": "Plumas Amarelas",
"squawkabillyWhitePlumage": "Plumas Brancas", "squawkabillyWhitePlumage": "Plumas Brancas",
"finizenZero": "Zero",
"finizenZero": "Hero",
"tatsugiriCurly": "Curvado", "tatsugiriCurly": "Curvado",
"tatsugiriDroopy": "Caído", "tatsugiriDroopy": "Caído",
"tatsugiriStretchy": "Reto", "tatsugiriStretchy": "Reto",
"dunsparceTwo": "Two-Segment",
"dunsparceThree": "Three-Segment",
"gimmighoulChest": "Baú", "gimmighoulChest": "Baú",
"gimmighoulRoaming": "Perambulante", "gimmighoulRoaming": "Perambulante",
"koraidonApexBuild": "Forma Plena", "koraidonApexBuild": "Forma Plena",
@ -164,6 +241,19 @@
"miraidonGlideMode": "Modo Aéreo", "miraidonGlideMode": "Modo Aéreo",
"poltchageistCounterfeit": "Imitação", "poltchageistCounterfeit": "Imitação",
"poltchageistArtisan": "Artesão", "poltchageistArtisan": "Artesão",
"poltchageistUnremarkable": "Unremarkable",
"poltchageistMasterpiece": "Masterpiece",
"ogerponTealMask": "Teal Mask",
"ogerponTealMaskTera": "Teal Mask Terastallized",
"ogerponWellspringMask": "Wellspring Mask",
"ogerponWellspringMaskTera": "Wellspring Mask Terastallized",
"ogerponHearthflameMask": "Hearthflame Mask",
"ogerponHearthflameMaskTera": "Hearthflame Mask Terastallized",
"ogerponCornerstoneMask": "Cornerstone Mask",
"ogerponCornerstoneMaskTera": "Cornerstone Mask Terastallized",
"terpagosTerastal": "Terastal",
"terpagosStellar": "Stellar",
"galarDarumakaZen": "Zen",
"paldeaTaurosCombat": "Combate", "paldeaTaurosCombat": "Combate",
"paldeaTaurosBlaze": "Chamas", "paldeaTaurosBlaze": "Chamas",
"paldeaTaurosAqua": "Aquático" "paldeaTaurosAqua": "Aquático"

View File

@ -40,9 +40,14 @@
"castformRainy": "雨天", "castformRainy": "雨天",
"castformSnowy": "雪天", "castformSnowy": "雪天",
"deoxysNormal": "普通", "deoxysNormal": "普通",
"deoxysAttack": "Attack",
"deoxysDefense": "Defense",
"deoxysSpeed": "Speed",
"burmyPlant": "草木蓑衣", "burmyPlant": "草木蓑衣",
"burmySandy": "砂土蓑衣", "burmySandy": "砂土蓑衣",
"burmyTrash": "垃圾蓑衣", "burmyTrash": "垃圾蓑衣",
"cheribiOvercast": "Overcast",
"cheribiSunshine": "Sunshine",
"shellosEast": "东海", "shellosEast": "东海",
"shellosWest": "西海", "shellosWest": "西海",
"rotomHeat": "加热", "rotomHeat": "加热",
@ -50,21 +55,36 @@
"rotomFrost": "结冰", "rotomFrost": "结冰",
"rotomFan": "旋转", "rotomFan": "旋转",
"rotomMow": "切割", "rotomMow": "切割",
"dialgaOrigin": "Origin",
"palkiaOrigin": "Origin",
"giratinaAltered": "别种", "giratinaAltered": "别种",
"giratinaOrigin": "Origin",
"shayminLand": "陆上", "shayminLand": "陆上",
"shayminSky": "Sky",
"basculinRedStriped": "红条纹", "basculinRedStriped": "红条纹",
"basculinBlueStriped": "蓝条纹", "basculinBlueStriped": "蓝条纹",
"basculinWhiteStriped": "白条纹", "basculinWhiteStriped": "白条纹",
"darumakaZen": "Zen",
"deerlingSpring": "春天", "deerlingSpring": "春天",
"deerlingSummer": "夏天", "deerlingSummer": "夏天",
"deerlingAutumn": "秋天", "deerlingAutumn": "秋天",
"deerlingWinter": "冬天", "deerlingWinter": "冬天",
"tornadusIncarnate": "化身", "tornadusIncarnate": "化身",
"tornadusTherian": "Therian",
"thundurusIncarnate": "化身", "thundurusIncarnate": "化身",
"thundurusTherian": "Therian",
"landorusIncarnate": "化身", "landorusIncarnate": "化身",
"landorusTherian": "Therian",
"kyuremBlack": "Black",
"kyuremWhite": "White",
"keldeoOrdinary": "通常", "keldeoOrdinary": "通常",
"keldeoResolute": "Resolute",
"meloettaAria": "歌声", "meloettaAria": "歌声",
"meloettaPirouette": "舞步形态", "meloettaPirouette": "舞步形态",
"genesectShock": "Shock Drive",
"genesectBurn": "Burn Drive",
"genesectChill": "Chill Drive",
"genesectDouse": "Douse Drive",
"froakieBattleBond": "牵绊变身", "froakieBattleBond": "牵绊变身",
"scatterbugMeadow": "花园花纹", "scatterbugMeadow": "花园花纹",
"scatterbugIcySnow": "冰雪花纹", "scatterbugIcySnow": "冰雪花纹",
@ -100,6 +120,10 @@
"furfrouLaReine": "女王造型", "furfrouLaReine": "女王造型",
"furfrouKabuki": "歌舞伎造型", "furfrouKabuki": "歌舞伎造型",
"furfrouPharaoh": "国王造型", "furfrouPharaoh": "国王造型",
"espurrMale": "Male",
"espurrFemale": "Female",
"honedgeShiled": "Shield",
"honedgeBlade": "Blade",
"pumpkabooSmall": "小尺寸", "pumpkabooSmall": "小尺寸",
"pumpkabooLarge": "大尺寸", "pumpkabooLarge": "大尺寸",
"pumpkabooSuper": "特大尺寸", "pumpkabooSuper": "特大尺寸",
@ -110,11 +134,34 @@
"zygarde50Pc": "50%形态 群聚变形", "zygarde50Pc": "50%形态 群聚变形",
"zygarde10Pc": "10%形态 群聚变形", "zygarde10Pc": "10%形态 群聚变形",
"zygardeComplete": "完全体形态", "zygardeComplete": "完全体形态",
"hoopaUnbound": "Unbound",
"oricorioBaile": "热辣热辣风格", "oricorioBaile": "热辣热辣风格",
"oricorioPompom": "啪滋啪滋风格", "oricorioPompom": "啪滋啪滋风格",
"oricorioPau": "呼拉呼拉风格", "oricorioPau": "呼拉呼拉风格",
"oricorioSensu": "轻盈轻盈风格", "oricorioSensu": "轻盈轻盈风格",
"rockruffOwnTempo": "特殊岩狗狗", "rockruffOwnTempo": "特殊岩狗狗",
"rockruffMidday": "Midday",
"rockruffMidnight": "Midnight",
"rockruffMidnight": "Dusk",
"wishiwashiSchool": "School",
"typeNullNormal": "Type: Normal",
"typeNullFighting": "Type: Fighting",
"typeNullFlying": "Type: Flying",
"typeNullPoison": "Type: Poison",
"typeNullGround": "Type: Ground",
"typeNullRock": "Type: Rock",
"typeNullBug": "Type: Bug",
"typeNullGhost": "Type: Ghost",
"typeNullSteel": "Type: Steel",
"typeNullFire": "Type: Fire",
"typeNullWater": "Type: Water",
"typeNullGrass": "Type: Grass",
"typeNullElectric": "Type: Electric",
"typeNullPsychic": "Type: Psychic",
"typeNullIce": "Type: Ice",
"typeNullDragon": "Type: Dragon",
"typeNullDark": "Type: Dark",
"typeNullFairy": "Type: Fairy",
"miniorRedMeteor": "红色核心", "miniorRedMeteor": "红色核心",
"miniorOrangeMeteor": "橙色核心", "miniorOrangeMeteor": "橙色核心",
"miniorYellowMeteor": "黄色核心", "miniorYellowMeteor": "黄色核心",
@ -131,25 +178,55 @@
"miniorViolet": "紫色", "miniorViolet": "紫色",
"mimikyuDisguised": "化形", "mimikyuDisguised": "化形",
"mimikyuBusted": "现形", "mimikyuBusted": "现形",
"necrozmaDuskMane": "Dusk Mane",
"necrozmaDawnWings": "Dawn Wings",
"necrozmaUltra": "Ultra",
"magearnaOriginal": "500年前的颜色", "magearnaOriginal": "500年前的颜色",
"marshadowZenith": "全力", "marshadowZenith": "全力",
"sinisteaPhony": "赝品", "sinisteaPhony": "赝品",
"sinisteaAntique": "真品", "sinisteaAntique": "真品",
"milceryVanillaCream": "Vanilla Cream",
"milceryRubyCream": "Ruby Cream",
"milceryMatchaCream": "Matcha Cream",
"milceryMintCream": "Mint Cream",
"milceryLemonCream": "Lemon Cream",
"milcerySaltedCream": "Salted Cream",
"milceryRubySwirl": "Ruby Swirl",
"milceryCaramelSwirl": "Caramel Swirl",
"milceryRainbowSwirl": "Rainbow Swirl",
"eiscueNoIce": "解冻头", "eiscueNoIce": "解冻头",
"indeedeeMale": "雄性", "indeedeeMale": "雄性",
"indeedeeFemale": "雌性", "indeedeeFemale": "雌性",
"morpekoFullBelly": "满腹花纹", "morpekoFullBelly": "满腹花纹",
"morpekoHangry": "Hangry",
"zacianHeroOfManyBattles": "百战勇者", "zacianHeroOfManyBattles": "百战勇者",
"zacianCrowned": "Crowned",
"zamazentaHeroOfManyBattles": "百战勇者", "zamazentaHeroOfManyBattles": "百战勇者",
"zamazentaCrowned": "Crowned",
"kubfuSingleStrike": "Single Strike",
"kubfuRapidStrike": "Rapid Strike",
"zarudeDada": "老爹", "zarudeDada": "老爹",
"calyrexIce": "Ice Rider",
"calyrexShadow": "Shadow Rider",
"basculinMale": "Male",
"basculinFemale": "Female",
"enamorusIncarnate": "化身", "enamorusIncarnate": "化身",
"enamorusTherian": "Therian",
"lechonkMale": "Male",
"lechonkFemale": "Female",
"tandemausFour": "Family of Four",
"tandemausThree": "Family of Three",
"squawkabillyGreenPlumage": "绿羽毛", "squawkabillyGreenPlumage": "绿羽毛",
"squawkabillyBluePlumage": "蓝羽毛", "squawkabillyBluePlumage": "蓝羽毛",
"squawkabillyYellowPlumage": "黄羽毛", "squawkabillyYellowPlumage": "黄羽毛",
"squawkabillyWhitePlumage": "白羽毛", "squawkabillyWhitePlumage": "白羽毛",
"finizenZero": "Zero",
"finizenZero": "Hero",
"tatsugiriCurly": "上弓姿势", "tatsugiriCurly": "上弓姿势",
"tatsugiriDroopy": "下垂姿势", "tatsugiriDroopy": "下垂姿势",
"tatsugiriStretchy": "平挺姿势", "tatsugiriStretchy": "平挺姿势",
"dunsparceTwo": "Two-Segment",
"dunsparceThree": "Three-Segment",
"gimmighoulChest": "宝箱形态", "gimmighoulChest": "宝箱形态",
"gimmighoulRoaming": "徒步形态", "gimmighoulRoaming": "徒步形态",
"koraidonApexBuild": "顶尖形态", "koraidonApexBuild": "顶尖形态",
@ -164,6 +241,19 @@
"miraidonGlideMode": "滑翔模式", "miraidonGlideMode": "滑翔模式",
"poltchageistCounterfeit": "冒牌货", "poltchageistCounterfeit": "冒牌货",
"poltchageistArtisan": "高档货", "poltchageistArtisan": "高档货",
"poltchageistUnremarkable": "Unremarkable",
"poltchageistMasterpiece": "Masterpiece",
"ogerponTealMask": "Teal Mask",
"ogerponTealMaskTera": "Teal Mask Terastallized",
"ogerponWellspringMask": "Wellspring Mask",
"ogerponWellspringMaskTera": "Wellspring Mask Terastallized",
"ogerponHearthflameMask": "Hearthflame Mask",
"ogerponHearthflameMaskTera": "Hearthflame Mask Terastallized",
"ogerponCornerstoneMask": "Cornerstone Mask",
"ogerponCornerstoneMaskTera": "Cornerstone Mask Terastallized",
"terpagosTerastal": "Terastal",
"terpagosStellar": "Stellar",
"galarDarumakaZen": "Zen",
"paldeaTaurosCombat": "斗战种", "paldeaTaurosCombat": "斗战种",
"paldeaTaurosBlaze": "火炽种", "paldeaTaurosBlaze": "火炽种",
"paldeaTaurosAqua": "水澜种" "paldeaTaurosAqua": "水澜种"

View File

@ -40,9 +40,14 @@
"castformRainy": "雨天", "castformRainy": "雨天",
"castformSnowy": "雪天", "castformSnowy": "雪天",
"deoxysNormal": "普通", "deoxysNormal": "普通",
"deoxysAttack": "Attack",
"deoxysDefense": "Defense",
"deoxysSpeed": "Speed",
"burmyPlant": "草木蓑衣", "burmyPlant": "草木蓑衣",
"burmySandy": "砂土蓑衣", "burmySandy": "砂土蓑衣",
"burmyTrash": "垃圾蓑衣", "burmyTrash": "垃圾蓑衣",
"cheribiOvercast": "Overcast",
"cheribiSunshine": "Sunshine",
"shellosEast": "東海", "shellosEast": "東海",
"shellosWest": "西海", "shellosWest": "西海",
"rotomHeat": "加熱", "rotomHeat": "加熱",
@ -50,21 +55,36 @@
"rotomFrost": "結冰", "rotomFrost": "結冰",
"rotomFan": "旋轉", "rotomFan": "旋轉",
"rotomMow": "切割", "rotomMow": "切割",
"dialgaOrigin": "Origin",
"palkiaOrigin": "Origin",
"giratinaAltered": "別種", "giratinaAltered": "別種",
"giratinaOrigin": "Origin",
"shayminLand": "陸上", "shayminLand": "陸上",
"shayminSky": "Sky",
"basculinRedStriped": "紅條紋", "basculinRedStriped": "紅條紋",
"basculinBlueStriped": "藍條紋", "basculinBlueStriped": "藍條紋",
"basculinWhiteStriped": "白條紋", "basculinWhiteStriped": "白條紋",
"darumakaZen": "Zen",
"deerlingSpring": "春天", "deerlingSpring": "春天",
"deerlingSummer": "夏天", "deerlingSummer": "夏天",
"deerlingAutumn": "秋天", "deerlingAutumn": "秋天",
"deerlingWinter": "冬天", "deerlingWinter": "冬天",
"tornadusIncarnate": "化身", "tornadusIncarnate": "化身",
"tornadusTherian": "Therian",
"thundurusIncarnate": "化身", "thundurusIncarnate": "化身",
"thundurusTherian": "Therian",
"landorusIncarnate": "化身", "landorusIncarnate": "化身",
"landorusTherian": "Therian",
"kyuremBlack": "Black",
"kyuremWhite": "White",
"keldeoOrdinary": "通常", "keldeoOrdinary": "通常",
"keldeoResolute": "Resolute",
"meloettaAria": "歌聲", "meloettaAria": "歌聲",
"meloettaPirouette": "舞步形態", "meloettaPirouette": "舞步形態",
"genesectShock": "Shock Drive",
"genesectBurn": "Burn Drive",
"genesectChill": "Chill Drive",
"genesectDouse": "Douse Drive",
"froakieBattleBond": "牽絆變身", "froakieBattleBond": "牽絆變身",
"scatterbugMeadow": "花園花紋", "scatterbugMeadow": "花園花紋",
"scatterbugIcySnow": "冰雪花紋", "scatterbugIcySnow": "冰雪花紋",
@ -100,6 +120,10 @@
"furfrouLaReine": "女王造型", "furfrouLaReine": "女王造型",
"furfrouKabuki": "歌舞伎造型", "furfrouKabuki": "歌舞伎造型",
"furfrouPharaoh": "國王造型", "furfrouPharaoh": "國王造型",
"espurrMale": "Male",
"espurrFemale": "Female",
"honedgeShiled": "Shield",
"honedgeBlade": "Blade",
"pumpkabooSmall": "小尺寸", "pumpkabooSmall": "小尺寸",
"pumpkabooLarge": "大尺寸", "pumpkabooLarge": "大尺寸",
"pumpkabooSuper": "特大尺寸", "pumpkabooSuper": "特大尺寸",
@ -110,11 +134,34 @@
"zygarde50Pc": "50%形態 群聚變形", "zygarde50Pc": "50%形態 群聚變形",
"zygarde10Pc": "10%形態 群聚變形", "zygarde10Pc": "10%形態 群聚變形",
"zygardeComplete": "完全體形態", "zygardeComplete": "完全體形態",
"hoopaUnbound": "Unbound",
"oricorioBaile": "熱辣熱辣風格", "oricorioBaile": "熱辣熱辣風格",
"oricorioPompom": "啪滋啪滋風格", "oricorioPompom": "啪滋啪滋風格",
"oricorioPau": "呼拉呼拉風格", "oricorioPau": "呼拉呼拉風格",
"oricorioSensu": "輕盈輕盈風格", "oricorioSensu": "輕盈輕盈風格",
"rockruffOwnTempo": "特殊岩狗狗", "rockruffOwnTempo": "特殊岩狗狗",
"rockruffMidday": "Midday",
"rockruffMidnight": "Midnight",
"rockruffMidnight": "Dusk",
"wishiwashiSchool": "School",
"typeNullNormal": "Type: Normal",
"typeNullFighting": "Type: Fighting",
"typeNullFlying": "Type: Flying",
"typeNullPoison": "Type: Poison",
"typeNullGround": "Type: Ground",
"typeNullRock": "Type: Rock",
"typeNullBug": "Type: Bug",
"typeNullGhost": "Type: Ghost",
"typeNullSteel": "Type: Steel",
"typeNullFire": "Type: Fire",
"typeNullWater": "Type: Water",
"typeNullGrass": "Type: Grass",
"typeNullElectric": "Type: Electric",
"typeNullPsychic": "Type: Psychic",
"typeNullIce": "Type: Ice",
"typeNullDragon": "Type: Dragon",
"typeNullDark": "Type: Dark",
"typeNullFairy": "Type: Fairy",
"miniorRedMeteor": "紅色核心", "miniorRedMeteor": "紅色核心",
"miniorOrangeMeteor": "橙色核心", "miniorOrangeMeteor": "橙色核心",
"miniorYellowMeteor": "黃色核心", "miniorYellowMeteor": "黃色核心",
@ -131,25 +178,55 @@
"miniorViolet": "紫色", "miniorViolet": "紫色",
"mimikyuDisguised": "化形", "mimikyuDisguised": "化形",
"mimikyuBusted": "現形", "mimikyuBusted": "現形",
"necrozmaDuskMane": "Dusk Mane",
"necrozmaDawnWings": "Dawn Wings",
"necrozmaUltra": "Ultra",
"magearnaOriginal": "500年前的顔色", "magearnaOriginal": "500年前的顔色",
"marshadowZenith": "全力", "marshadowZenith": "全力",
"sinisteaPhony": "赝品", "sinisteaPhony": "赝品",
"sinisteaAntique": "真品", "sinisteaAntique": "真品",
"milceryVanillaCream": "Vanilla Cream",
"milceryRubyCream": "Ruby Cream",
"milceryMatchaCream": "Matcha Cream",
"milceryMintCream": "Mint Cream",
"milceryLemonCream": "Lemon Cream",
"milcerySaltedCream": "Salted Cream",
"milceryRubySwirl": "Ruby Swirl",
"milceryCaramelSwirl": "Caramel Swirl",
"milceryRainbowSwirl": "Rainbow Swirl",
"eiscueNoIce": "解凍頭", "eiscueNoIce": "解凍頭",
"indeedeeMale": "雄性", "indeedeeMale": "雄性",
"indeedeeFemale": "雌性", "indeedeeFemale": "雌性",
"morpekoFullBelly": "滿腹花紋", "morpekoFullBelly": "滿腹花紋",
"morpekoHangry": "Hangry",
"zacianHeroOfManyBattles": "百戰勇者", "zacianHeroOfManyBattles": "百戰勇者",
"zacianCrowned": "Crowned",
"zamazentaHeroOfManyBattles": "百戰勇者", "zamazentaHeroOfManyBattles": "百戰勇者",
"zamazentaCrowned": "Crowned",
"kubfuSingleStrike": "Single Strike",
"kubfuRapidStrike": "Rapid Strike",
"zarudeDada": "老爹", "zarudeDada": "老爹",
"calyrexIce": "Ice Rider",
"calyrexShadow": "Shadow Rider",
"basculinMale": "Male",
"basculinFemale": "Female",
"enamorusIncarnate": "化身", "enamorusIncarnate": "化身",
"enamorusTherian": "Therian",
"lechonkMale": "Male",
"lechonkFemale": "Female",
"tandemausFour": "Family of Four",
"tandemausThree": "Family of Three",
"squawkabillyGreenPlumage": "綠羽毛", "squawkabillyGreenPlumage": "綠羽毛",
"squawkabillyBluePlumage": "藍羽毛", "squawkabillyBluePlumage": "藍羽毛",
"squawkabillyYellowPlumage": "黃羽毛", "squawkabillyYellowPlumage": "黃羽毛",
"squawkabillyWhitePlumage": "白羽毛", "squawkabillyWhitePlumage": "白羽毛",
"finizenZero": "Zero",
"finizenZero": "Hero",
"tatsugiriCurly": "上弓姿勢", "tatsugiriCurly": "上弓姿勢",
"tatsugiriDroopy": "下垂姿勢", "tatsugiriDroopy": "下垂姿勢",
"tatsugiriStretchy": "平挺姿勢", "tatsugiriStretchy": "平挺姿勢",
"dunsparceTwo": "Two-Segment",
"dunsparceThree": "Three-Segment",
"gimmighoulChest": "寶箱形態", "gimmighoulChest": "寶箱形態",
"gimmighoulRoaming": "徒步形態", "gimmighoulRoaming": "徒步形態",
"koraidonApexBuild": "頂尖形態", "koraidonApexBuild": "頂尖形態",
@ -164,6 +241,19 @@
"miraidonGlideMode":"滑翔模式", "miraidonGlideMode":"滑翔模式",
"poltchageistCounterfeit": "冒牌貨", "poltchageistCounterfeit": "冒牌貨",
"poltchageistArtisan": "高檔貨", "poltchageistArtisan": "高檔貨",
"poltchageistUnremarkable": "Unremarkable",
"poltchageistMasterpiece": "Masterpiece",
"ogerponTealMask": "Teal Mask",
"ogerponTealMaskTera": "Teal Mask Terastallized",
"ogerponWellspringMask": "Wellspring Mask",
"ogerponWellspringMaskTera": "Wellspring Mask Terastallized",
"ogerponHearthflameMask": "Hearthflame Mask",
"ogerponHearthflameMaskTera": "Hearthflame Mask Terastallized",
"ogerponCornerstoneMask": "Cornerstone Mask",
"ogerponCornerstoneMaskTera": "Cornerstone Mask Terastallized",
"terpagosTerastal": "Terastal",
"terpagosStellar": "Stellar",
"galarDarumakaZen": "Zen",
"paldeaTaurosCombat": "鬥戰種", "paldeaTaurosCombat": "鬥戰種",
"paldeaTaurosBlaze": "火熾種", "paldeaTaurosBlaze": "火熾種",
"paldeaTaurosAqua": "水瀾種" "paldeaTaurosAqua": "水瀾種"

View File

@ -4,7 +4,7 @@ import { applyPreAttackAbAttrs, AddSecondStrikeAbAttr, IgnoreMoveEffectsAbAttr,
import { ArenaTagSide, ConditionalProtectTag } from "#app/data/arena-tag"; import { ArenaTagSide, ConditionalProtectTag } from "#app/data/arena-tag";
import { MoveAnim } from "#app/data/battle-anims"; import { MoveAnim } from "#app/data/battle-anims";
import { BattlerTagLapseType, DamageProtectedTag, ProtectedTag, SemiInvulnerableTag, SubstituteTag } from "#app/data/battler-tags"; import { BattlerTagLapseType, DamageProtectedTag, ProtectedTag, SemiInvulnerableTag, SubstituteTag } from "#app/data/battler-tags";
import { MoveTarget, applyMoveAttrs, OverrideMoveEffectAttr, MultiHitAttr, AttackMove, FixedDamageAttr, VariableTargetAttr, MissEffectAttr, MoveFlags, applyFilteredMoveAttrs, MoveAttr, MoveEffectAttr, MoveEffectTrigger, ChargeAttr, MoveCategory, NoEffectAttr, HitsTagAttr } from "#app/data/move"; import { MoveTarget, applyMoveAttrs, OverrideMoveEffectAttr, MultiHitAttr, AttackMove, FixedDamageAttr, VariableTargetAttr, MissEffectAttr, MoveFlags, applyFilteredMoveAttrs, MoveAttr, MoveEffectAttr, MoveEffectTrigger, ChargeAttr, MoveCategory, NoEffectAttr, DealsDoubleDamageToTagAttr } from "#app/data/move";
import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms";
import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BattlerTagType } from "#app/enums/battler-tag-type";
import { Moves } from "#app/enums/moves"; import { Moves } from "#app/enums/moves";
@ -394,7 +394,7 @@ export class MoveEffectPhase extends PokemonPhase {
} }
const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); const semiInvulnerableTag = target.getTag(SemiInvulnerableTag);
if (semiInvulnerableTag && !this.move.getMove().getAttrs(HitsTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType)) { if (semiInvulnerableTag && !this.move.getMove().getAttrs(DealsDoubleDamageToTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType)) {
return false; return false;
} }

View File

@ -6,7 +6,7 @@ import Pokemon from "#app/field/pokemon";
import { getPokemonNameWithAffix } from "#app/messages"; import { getPokemonNameWithAffix } from "#app/messages";
import { ResetNegativeStatStageModifier } from "#app/modifier/modifier"; import { ResetNegativeStatStageModifier } from "#app/modifier/modifier";
import { handleTutorial, Tutorial } from "#app/tutorial"; import { handleTutorial, Tutorial } from "#app/tutorial";
import * as Utils from "#app/utils"; import { NumberHolder, BooleanHolder } from "#app/utils";
import i18next from "i18next"; import i18next from "i18next";
import { PokemonPhase } from "./pokemon-phase"; import { PokemonPhase } from "./pokemon-phase";
import { Stat, type BattleStat, getStatKey, getStatStageChangeDescriptionKey } from "#enums/stat"; import { Stat, type BattleStat, getStatKey, getStatStageChangeDescriptionKey } from "#enums/stat";
@ -42,17 +42,23 @@ export class StatStageChangePhase extends PokemonPhase {
return this.end(); return this.end();
} }
const stages = new NumberHolder(this.stages);
if (!this.ignoreAbilities) {
applyAbAttrs(StatStageChangeMultiplierAbAttr, pokemon, null, false, stages);
}
let simulate = false; let simulate = false;
const filteredStats = this.stats.filter(stat => { const filteredStats = this.stats.filter(stat => {
const cancelled = new Utils.BooleanHolder(false); const cancelled = new BooleanHolder(false);
if (!this.selfTarget && this.stages < 0) { if (!this.selfTarget && stages.value < 0) {
// TODO: Include simulate boolean when tag applications can be simulated // TODO: Include simulate boolean when tag applications can be simulated
this.scene.arena.applyTagsForSide(MistTag, pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, cancelled); this.scene.arena.applyTagsForSide(MistTag, pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, cancelled);
} }
if (!cancelled.value && !this.selfTarget && this.stages < 0) { if (!cancelled.value && !this.selfTarget && stages.value < 0) {
applyPreStatStageChangeAbAttrs(ProtectStatAbAttr, pokemon, stat, cancelled, simulate); applyPreStatStageChangeAbAttrs(ProtectStatAbAttr, pokemon, stat, cancelled, simulate);
} }
@ -64,12 +70,6 @@ export class StatStageChangePhase extends PokemonPhase {
return !cancelled.value; return !cancelled.value;
}); });
const stages = new Utils.IntegerHolder(this.stages);
if (!this.ignoreAbilities) {
applyAbAttrs(StatStageChangeMultiplierAbAttr, pokemon, null, false, stages);
}
const relLevels = filteredStats.map(s => (stages.value >= 1 ? Math.min(pokemon.getStatStage(s) + stages.value, 6) : Math.max(pokemon.getStatStage(s) + stages.value, -6)) - pokemon.getStatStage(s)); const relLevels = filteredStats.map(s => (stages.value >= 1 ? Math.min(pokemon.getStatStage(s) + stages.value, 6) : Math.max(pokemon.getStatStage(s) + stages.value, -6)) - pokemon.getStatStage(s));
this.onChange && this.onChange(this.getPokemon(), filteredStats, relLevels); this.onChange && this.onChange(this.getPokemon(), filteredStats, relLevels);

View File

@ -31,7 +31,7 @@ describe("Abilities - Contrary", () => {
}); });
it("should invert stat changes when applied", async() => { it("should invert stat changes when applied", async() => {
await game.startBattle([ await game.classicMode.startBattle([
Species.SLOWBRO Species.SLOWBRO
]); ]);
@ -39,4 +39,39 @@ describe("Abilities - Contrary", () => {
expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1);
}, 20000); }, 20000);
describe("With Clear Body", () => {
it("should apply positive effects", async () => {
game.override
.enemyPassiveAbility(Abilities.CLEAR_BODY)
.moveset([Moves.TAIL_WHIP]);
await game.classicMode.startBattle([Species.SLOWBRO]);
const enemyPokemon = game.scene.getEnemyPokemon()!;
expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1);
game.move.select(Moves.TAIL_WHIP);
await game.phaseInterceptor.to("TurnEndPhase");
expect(enemyPokemon.getStatStage(Stat.DEF)).toBe(1);
});
it("should block negative effects", async () => {
game.override
.enemyPassiveAbility(Abilities.CLEAR_BODY)
.enemyMoveset([Moves.HOWL, Moves.HOWL, Moves.HOWL, Moves.HOWL])
.moveset([Moves.SPLASH]);
await game.classicMode.startBattle([Species.SLOWBRO]);
const enemyPokemon = game.scene.getEnemyPokemon()!;
expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1);
game.move.select(Moves.SPLASH);
await game.phaseInterceptor.to("TurnEndPhase");
expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1);
});
});
}); });

View File

@ -0,0 +1,58 @@
import { BattlerIndex } from "#app/battle";
import { allMoves } from "#app/data/move";
import { BattlerTagType } from "#app/enums/battler-tag-type";
import { DamageCalculationResult } from "#app/field/pokemon";
import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
describe("Moves - Steamroller", () => {
let phaserGame: Phaser.Game;
let game: GameManager;
beforeAll(() => {
phaserGame = new Phaser.Game({
type: Phaser.HEADLESS,
});
});
afterEach(() => {
game.phaseInterceptor.restoreOg();
});
beforeEach(() => {
game = new GameManager(phaserGame);
game.override.moveset([Moves.STEAMROLLER]).battleType("single").enemyAbility(Abilities.BALL_FETCH);
});
it("should always hit a minimzed target with double damage", async () => {
game.override.enemySpecies(Species.DITTO).enemyMoveset(Moves.MINIMIZE);
await game.classicMode.startBattle([Species.IRON_BOULDER]);
const ditto = game.scene.getEnemyPokemon()!;
vi.spyOn(ditto, "getAttackDamage");
ditto.hp = 5000;
const steamroller = allMoves[Moves.STEAMROLLER];
vi.spyOn(steamroller, "calculateBattleAccuracy");
const ironBoulder = game.scene.getPlayerPokemon()!;
vi.spyOn(ironBoulder, "getAccuracyMultiplier");
// Turn 1
game.move.select(Moves.STEAMROLLER);
await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]);
await game.toNextTurn();
// Turn 2
game.move.select(Moves.STEAMROLLER);
await game.toNextTurn();
const [dmgCalcTurn1, dmgCalcTurn2]: DamageCalculationResult[] = vi
.mocked(ditto.getAttackDamage)
.mock.results.map((r) => r.value);
expect(dmgCalcTurn2.damage).toBeGreaterThanOrEqual(dmgCalcTurn1.damage * 2);
expect(ditto.getTag(BattlerTagType.MINIMIZED)).toBeDefined();
expect(steamroller.calculateBattleAccuracy).toHaveReturnedWith(-1);
});
});

View File

@ -0,0 +1,53 @@
import { BattlerIndex } from "#app/battle";
import { allMoves } from "#app/data/move";
import { BattlerTagType } from "#app/enums/battler-tag-type";
import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest";
describe("Moves - Whirlwind", () => {
let phaserGame: Phaser.Game;
let game: GameManager;
beforeAll(() => {
phaserGame = new Phaser.Game({
type: Phaser.HEADLESS,
});
});
afterEach(() => {
game.phaseInterceptor.restoreOg();
});
beforeEach(() => {
game = new GameManager(phaserGame);
game.override
.battleType("single")
.enemyAbility(Abilities.BALL_FETCH)
.enemyMoveset(Moves.WHIRLWIND)
.enemySpecies(Species.PIDGEY);
});
it.each([
{ move: Moves.FLY, name: "Fly" },
{ move: Moves.BOUNCE, name: "Bounce" },
{ move: Moves.SKY_DROP, name: "Sky Drop" },
])("should not hit a flying target: $name (=$move)", async ({ move }) => {
game.override.moveset([move]);
await game.classicMode.startBattle([Species.STARAPTOR]);
const staraptor = game.scene.getPlayerPokemon()!;
const whirlwind = allMoves[Moves.WHIRLWIND];
vi.spyOn(whirlwind, "getFailedText");
game.move.select(move);
await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]);
await game.toNextTurn();
expect(staraptor.findTag((t) => t.tagType === BattlerTagType.FLYING)).toBeDefined();
expect(whirlwind.getFailedText).toHaveBeenCalledOnce();
});
});

View File

@ -162,7 +162,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
this.splicedIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); this.splicedIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains);
this.add(this.splicedIcon); this.add(this.splicedIcon);
this.statusIndicator = this.scene.add.sprite(0, 0, `statuses_${i18next.resolvedLanguage}`); this.statusIndicator = this.scene.add.sprite(0, 0, Utils.getLocalizedSpriteKey("statuses"));
this.statusIndicator.setName("icon_status"); this.statusIndicator.setName("icon_status");
this.statusIndicator.setVisible(false); this.statusIndicator.setVisible(false);
this.statusIndicator.setOrigin(0, 0); this.statusIndicator.setOrigin(0, 0);

View File

@ -91,7 +91,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem
valuesBg.setOrigin(0, 0); valuesBg.setOrigin(0, 0);
this.val.add(valuesBg); this.val.add(valuesBg);
this.typ = this.scene.add.sprite(25, EFF_HEIGHT - 35, `types${Utils.verifyLang(i18next.language) ? `_${i18next.language}` : ""}`, "unknown"); this.typ = this.scene.add.sprite(25, EFF_HEIGHT - 35, Utils.getLocalizedSpriteKey("types"), "unknown");
this.typ.setScale(0.8); this.typ.setScale(0.8);
this.val.add(this.typ); this.val.add(this.typ);
@ -138,7 +138,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem
this.pow.setText(move.power >= 0 ? move.power.toString() : "---"); this.pow.setText(move.power >= 0 ? move.power.toString() : "---");
this.acc.setText(move.accuracy >= 0 ? move.accuracy.toString() : "---"); this.acc.setText(move.accuracy >= 0 ? move.accuracy.toString() : "---");
this.pp.setText(move.pp >= 0 ? move.pp.toString() : "---"); this.pp.setText(move.pp >= 0 ? move.pp.toString() : "---");
this.typ.setTexture(`types${Utils.verifyLang(i18next.language) ? `_${i18next.language}` : ""}`, Type[move.type].toLowerCase()); this.typ.setTexture(Utils.getLocalizedSpriteKey("types"), Type[move.type].toLowerCase());
this.cat.setFrame(MoveCategory[move.category].toLowerCase()); this.cat.setFrame(MoveCategory[move.category].toLowerCase());
this.desc.setText(move?.effect || ""); this.desc.setText(move?.effect || "");

View File

@ -1272,7 +1272,7 @@ class PartySlot extends Phaser.GameObjects.Container {
} }
if (this.pokemon.status) { if (this.pokemon.status) {
const statusIndicator = this.scene.add.sprite(0, 0, `statuses_${i18next.resolvedLanguage}`); const statusIndicator = this.scene.add.sprite(0, 0, Utils.getLocalizedSpriteKey("statuses"));
statusIndicator.setFrame(StatusEffect[this.pokemon.status?.effect].toLowerCase()); statusIndicator.setFrame(StatusEffect[this.pokemon.status?.effect].toLowerCase());
statusIndicator.setOrigin(0, 0); statusIndicator.setOrigin(0, 0);
statusIndicator.setPositionRelative(slotLevelLabel, this.slotIndex >= battlerCount ? 43 : 55, 0); statusIndicator.setPositionRelative(slotLevelLabel, this.slotIndex >= battlerCount ? 43 : 55, 0);

View File

@ -214,7 +214,7 @@ export default class SummaryUiHandler extends UiHandler {
this.statusContainer.add(statusLabel); this.statusContainer.add(statusLabel);
this.status = this.scene.add.sprite(91, 4, `statuses_${i18next.resolvedLanguage}`); this.status = this.scene.add.sprite(91, 4, Utils.getLocalizedSpriteKey("statuses"));
this.status.setOrigin(0.5, 0); this.status.setOrigin(0.5, 0);
this.statusContainer.add(this.status); this.statusContainer.add(this.status);

View File

@ -1,4 +1,5 @@
import { MoneyFormat } from "#enums/money-format"; import { MoneyFormat } from "#enums/money-format";
import { Moves } from "#enums/moves";
import i18next from "i18next"; import i18next from "i18next";
export const MissingTextureKey = "__MISSING"; export const MissingTextureKey = "__MISSING";
@ -628,3 +629,12 @@ export function getLocalizedSpriteKey(baseKey: string) {
export function isBetween(num: number, min: number, max: number): boolean { export function isBetween(num: number, min: number, max: number): boolean {
return num >= min && num <= max; return num >= min && num <= max;
} }
/**
* Helper method to return the animation filename for a given move
*
* @param move the move for which the animation filename is needed
*/
export function animationFileName(move: Moves): string {
return Moves[move].toLowerCase().replace(/\_/g, "-");
}