Merge branch 'beta' into egg-rng-fix
2
.github/pull_request_template.md
vendored
@ -30,7 +30,7 @@
|
||||
- [ ] The PR is self-contained and cannot be split into smaller PRs?
|
||||
- [ ] Have I provided a clear explanation of the changes?
|
||||
- [ ] Have I considered writing automated tests for the issue?
|
||||
- [ ] If I have text, did I add make it translatable and added a key in the English language?
|
||||
- [ ] If I have text, did I make it translatable and add a key in the English locale file(s)?
|
||||
- [ ] Have I tested the changes (manually)?
|
||||
- [ ] Are all unit tests still passing? (`npm run test`)
|
||||
- [ ] Are the changes visual?
|
||||
|
101
create-test-boilerplate.js
Normal file
@ -0,0 +1,101 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
/**
|
||||
* This script creates a test boilerplate file for a move or ability.
|
||||
* @param {string} type - The type of test to create. Either "move" or "ability".
|
||||
* @param {string} fileName - The name of the file to create.
|
||||
* @example npm run create-test move tackle
|
||||
*/
|
||||
|
||||
// Get the directory name of the current module file
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
// Get the arguments from the command line
|
||||
const args = process.argv.slice(2);
|
||||
const type = args[0]; // "move" or "ability"
|
||||
let fileName = args[1]; // The file name
|
||||
|
||||
if (!type || !fileName) {
|
||||
console.error('Please provide both a type ("move" or "ability") and a file name.');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Convert fileName from to snake_case if camelCase is given
|
||||
fileName = fileName.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase();
|
||||
|
||||
// Format the description for the test case
|
||||
const formattedName = fileName
|
||||
.replace(/_/g, ' ')
|
||||
.replace(/\b\w/g, char => char.toUpperCase());
|
||||
|
||||
// Determine the directory based on the type
|
||||
let dir;
|
||||
let description;
|
||||
if (type === 'move') {
|
||||
dir = path.join(__dirname, 'src', 'test', 'moves');
|
||||
description = `Moves - ${formattedName}`;
|
||||
} else if (type === 'ability') {
|
||||
dir = path.join(__dirname, 'src', 'test', 'abilities');
|
||||
description = `Abilities - ${formattedName}`;
|
||||
} else {
|
||||
console.error('Invalid type. Please use "move" or "ability".');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Ensure the directory exists
|
||||
if (!fs.existsSync(dir)) {
|
||||
fs.mkdirSync(dir, { recursive: true });
|
||||
}
|
||||
|
||||
// Create the file with the given name
|
||||
const filePath = path.join(dir, `${fileName}.test.ts`);
|
||||
|
||||
if (fs.existsSync(filePath)) {
|
||||
console.error(`File "${fileName}.test.ts" already exists.`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Define the content template
|
||||
const content = `import { Abilities } from "#enums/abilities";
|
||||
import GameManager from "#test/utils/gameManager";
|
||||
import { SPLASH_ONLY } from "#test/utils/testUtils";
|
||||
import Phaser from "phaser";
|
||||
import { afterEach, beforeAll, beforeEach, describe, it } from "vitest";
|
||||
|
||||
describe("${description}", () => {
|
||||
let phaserGame: Phaser.Game;
|
||||
let game: GameManager;
|
||||
const TIMEOUT = 20 * 1000;
|
||||
|
||||
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(SPLASH_ONLY);
|
||||
});
|
||||
|
||||
it("test case", async () => {
|
||||
// await game.classicMode.startBattle();
|
||||
// game.move.select();
|
||||
}, TIMEOUT);
|
||||
});
|
||||
`;
|
||||
|
||||
// Write the template content to the file
|
||||
fs.writeFileSync(filePath, content, 'utf8');
|
||||
|
||||
console.log(`File created at: ${filePath}`);
|
@ -148,10 +148,10 @@ input:-internal-autofill-selected {
|
||||
|
||||
/* Show cycle buttons only on STARTER_SELECT and on touch configuration panel */
|
||||
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadOpenFilters,
|
||||
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleForm,
|
||||
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleShiny,
|
||||
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='RUN_INFO']) #apadCycleForm,
|
||||
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='RUN_INFO']) #apadCycleShiny,
|
||||
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleNature,
|
||||
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleAbility,
|
||||
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='RUN_INFO']) #apadCycleAbility,
|
||||
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleGender,
|
||||
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleVariant {
|
||||
display: none;
|
||||
|
@ -18,7 +18,8 @@
|
||||
"eslint-ci": "eslint .",
|
||||
"docs": "typedoc",
|
||||
"depcruise": "depcruise src",
|
||||
"depcruise:graph": "depcruise src --output-type dot | node dependency-graph.js > dependency-graph.svg"
|
||||
"depcruise:graph": "depcruise src --output-type dot | node dependency-graph.js > dependency-graph.svg",
|
||||
"create-test": "node ./create-test-boilerplate.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.3.0",
|
||||
|
BIN
public/images/events/september-update-de.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
public/images/events/september-update-en.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
public/images/events/september-update-es.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
public/images/events/september-update-fr.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
public/images/events/september-update-it.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
public/images/events/september-update-ja.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
public/images/events/september-update-ko.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
public/images/events/september-update-pt_BR.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
public/images/events/september-update-zh_CN.png
Normal file
After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 2.9 KiB |
@ -1792,6 +1792,7 @@ export default class BattleScene extends SceneBase {
|
||||
config = config ?? {};
|
||||
try {
|
||||
const keyDetails = key.split("/");
|
||||
config["volume"] = config["volume"] ?? 1;
|
||||
switch (keyDetails[0]) {
|
||||
case "level_up_fanfare":
|
||||
case "item_fanfare":
|
||||
@ -1801,11 +1802,11 @@ export default class BattleScene extends SceneBase {
|
||||
case "evolution_fanfare":
|
||||
// These sounds are loaded in as BGM, but played as sound effects
|
||||
// When these sounds are updated in updateVolume(), they are treated as BGM however because they are placed in the BGM Cache through being called by playSoundWithoutBGM()
|
||||
config["volume"] = this.masterVolume * this.bgmVolume;
|
||||
config["volume"] *= (this.masterVolume * this.bgmVolume);
|
||||
break;
|
||||
case "battle_anims":
|
||||
case "cry":
|
||||
config["volume"] = this.masterVolume * this.fieldVolume;
|
||||
config["volume"] *= (this.masterVolume * this.fieldVolume);
|
||||
//PRSFX sound files are unusually loud
|
||||
if (keyDetails[1].startsWith("PRSFX- ")) {
|
||||
config["volume"] *= 0.5;
|
||||
@ -1813,10 +1814,10 @@ export default class BattleScene extends SceneBase {
|
||||
break;
|
||||
case "ui":
|
||||
//As of, right now this applies to the "select", "menu_open", "error" sound effects
|
||||
config["volume"] = this.masterVolume * this.uiVolume;
|
||||
config["volume"] *= (this.masterVolume * this.uiVolume);
|
||||
break;
|
||||
case "se":
|
||||
config["volume"] = this.masterVolume * this.seVolume;
|
||||
config["volume"] *= (this.masterVolume * this.seVolume);
|
||||
break;
|
||||
}
|
||||
this.sound.play(key, config);
|
||||
|
@ -8,7 +8,7 @@ import { Weather, WeatherType } from "./weather";
|
||||
import { BattlerTag, GroundedTag, GulpMissileTag, SemiInvulnerableTag } from "./battler-tags";
|
||||
import { StatusEffect, getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText } from "./status-effect";
|
||||
import { Gender } from "./gender";
|
||||
import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, IncrementMovePriorityAttr, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, MoveAttr, MultiHitAttr, ChargeAttr, SacrificialAttr, SacrificialAttrOnHit, NeutralDamageAgainstFlyingTypeMultiplierAttr } from "./move";
|
||||
import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, IncrementMovePriorityAttr, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, MoveAttr, MultiHitAttr, ChargeAttr, SacrificialAttr, SacrificialAttrOnHit, NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr } from "./move";
|
||||
import { ArenaTagSide, ArenaTrapTag } from "./arena-tag";
|
||||
import { Stat, getStatName } from "./pokemon-stat";
|
||||
import { BerryModifier, PokemonHeldItemModifier } from "../modifier/modifier";
|
||||
@ -475,6 +475,47 @@ export class NonSuperEffectiveImmunityAbAttr extends TypeImmunityAbAttr {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attribute implementing the effects of {@link https://bulbapedia.bulbagarden.net/wiki/Tera_Shell_(Ability) | Tera Shell}
|
||||
* When the source is at full HP, incoming attacks will have a maximum 0.5x type effectiveness multiplier.
|
||||
* @extends PreDefendAbAttr
|
||||
*/
|
||||
export class FullHpResistTypeAbAttr extends PreDefendAbAttr {
|
||||
/**
|
||||
* Reduces a type multiplier to 0.5 if the source is at full HP.
|
||||
* @param pokemon {@linkcode Pokemon} the Pokemon with this ability
|
||||
* @param passive n/a
|
||||
* @param simulated n/a (this doesn't change game state)
|
||||
* @param attacker n/a
|
||||
* @param move {@linkcode Move} the move being used on the source
|
||||
* @param cancelled n/a
|
||||
* @param args `[0]` a container for the move's current type effectiveness multiplier
|
||||
* @returns `true` if the move's effectiveness is reduced; `false` otherwise
|
||||
*/
|
||||
applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: Utils.BooleanHolder | null, args: any[]): boolean | Promise<boolean> {
|
||||
const typeMultiplier = args[0];
|
||||
if (!(typeMultiplier && typeMultiplier instanceof Utils.NumberHolder)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (move && move.hasAttr(FixedDamageAttr)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pokemon.isFullHp() && typeMultiplier.value > 0.5) {
|
||||
typeMultiplier.value = 0.5;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string {
|
||||
return i18next.t("abilityTriggers:fullHpResistType", {
|
||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class PostDefendAbAttr extends AbAttr {
|
||||
applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean | Promise<boolean> {
|
||||
return false;
|
||||
@ -809,7 +850,7 @@ export class PostDefendTerrainChangeAbAttr extends PostDefendAbAttr {
|
||||
}
|
||||
|
||||
export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr {
|
||||
private chance: integer;
|
||||
public chance: integer;
|
||||
private effects: StatusEffect[];
|
||||
|
||||
constructor(chance: integer, ...effects: StatusEffect[]) {
|
||||
@ -2387,7 +2428,7 @@ export class PostSummonWeatherSuppressedFormChangeAbAttr extends PostSummonAbAtt
|
||||
|
||||
/**
|
||||
* Triggers weather-based form change when summoned into an active weather.
|
||||
* Used by Forecast.
|
||||
* Used by Forecast and Flower Gift.
|
||||
* @extends PostSummonAbAttr
|
||||
*/
|
||||
export class PostSummonFormChangeByWeatherAbAttr extends PostSummonAbAttr {
|
||||
@ -2410,7 +2451,10 @@ export class PostSummonFormChangeByWeatherAbAttr extends PostSummonAbAttr {
|
||||
* @returns whether the form change was triggered
|
||||
*/
|
||||
applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean {
|
||||
if (pokemon.species.speciesId === Species.CASTFORM && this.ability === Abilities.FORECAST) {
|
||||
const isCastformWithForecast = (pokemon.species.speciesId === Species.CASTFORM && this.ability === Abilities.FORECAST);
|
||||
const isCherrimWithFlowerGift = (pokemon.species.speciesId === Species.CHERRIM && this.ability === Abilities.FLOWER_GIFT);
|
||||
|
||||
if (isCastformWithForecast || isCherrimWithFlowerGift) {
|
||||
if (simulated) {
|
||||
return simulated;
|
||||
}
|
||||
@ -3083,37 +3127,41 @@ export class PostWeatherChangeAbAttr extends AbAttr {
|
||||
|
||||
/**
|
||||
* Triggers weather-based form change when weather changes.
|
||||
* Used by Forecast.
|
||||
* Used by Forecast and Flower Gift.
|
||||
* @extends PostWeatherChangeAbAttr
|
||||
*/
|
||||
export class PostWeatherChangeFormChangeAbAttr extends PostWeatherChangeAbAttr {
|
||||
private ability: Abilities;
|
||||
private formRevertingWeathers: WeatherType[];
|
||||
|
||||
constructor(ability: Abilities) {
|
||||
constructor(ability: Abilities, formRevertingWeathers: WeatherType[]) {
|
||||
super(false);
|
||||
|
||||
this.ability = ability;
|
||||
this.formRevertingWeathers = formRevertingWeathers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls {@linkcode Arena.triggerWeatherBasedFormChangesToNormal | triggerWeatherBasedFormChangesToNormal} when the
|
||||
* weather changed to form-reverting weather, otherwise calls {@linkcode Arena.triggerWeatherBasedFormChanges | triggerWeatherBasedFormChanges}
|
||||
* @param {Pokemon} pokemon the Pokemon that changed the weather
|
||||
* @param {Pokemon} pokemon the Pokemon with this ability
|
||||
* @param passive n/a
|
||||
* @param weather n/a
|
||||
* @param args n/a
|
||||
* @returns whether the form change was triggered
|
||||
*/
|
||||
applyPostWeatherChange(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: WeatherType, args: any[]): boolean {
|
||||
if (pokemon.species.speciesId === Species.CASTFORM && this.ability === Abilities.FORECAST) {
|
||||
const isCastformWithForecast = (pokemon.species.speciesId === Species.CASTFORM && this.ability === Abilities.FORECAST);
|
||||
const isCherrimWithFlowerGift = (pokemon.species.speciesId === Species.CHERRIM && this.ability === Abilities.FLOWER_GIFT);
|
||||
|
||||
if (isCastformWithForecast || isCherrimWithFlowerGift) {
|
||||
if (simulated) {
|
||||
return simulated;
|
||||
}
|
||||
|
||||
const formRevertingWeathers: WeatherType[] = [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ];
|
||||
const weatherType = pokemon.scene.arena.weather?.weatherType;
|
||||
|
||||
if (weatherType && formRevertingWeathers.includes(weatherType)) {
|
||||
if (weatherType && this.formRevertingWeathers.includes(weatherType)) {
|
||||
pokemon.scene.arena.triggerWeatherBasedFormChangesToNormal();
|
||||
} else {
|
||||
pokemon.scene.arena.triggerWeatherBasedFormChanges();
|
||||
@ -3647,10 +3695,10 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr {
|
||||
// If the move is an AttackMove or a StatusMove the Dancer must replicate the move on the source of the Dance
|
||||
if (move.getMove() instanceof AttackMove || move.getMove() instanceof StatusMove) {
|
||||
const target = this.getTarget(dancer, source, targets);
|
||||
dancer.scene.unshiftPhase(new MovePhase(dancer.scene, dancer, target, move, true));
|
||||
dancer.scene.unshiftPhase(new MovePhase(dancer.scene, dancer, target, move, true, true));
|
||||
} else if (move.getMove() instanceof SelfStatusMove) {
|
||||
// If the move is a SelfStatusMove (ie. Swords Dance) the Dancer should replicate it on itself
|
||||
dancer.scene.unshiftPhase(new MovePhase(dancer.scene, dancer, [dancer.getBattlerIndex()], move, true));
|
||||
dancer.scene.unshiftPhase(new MovePhase(dancer.scene, dancer, [dancer.getBattlerIndex()], move, true, true));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@ -4703,7 +4751,8 @@ function setAbilityRevealed(pokemon: Pokemon): void {
|
||||
*/
|
||||
function getPokemonWithWeatherBasedForms(scene: BattleScene) {
|
||||
return scene.getField(true).filter(p =>
|
||||
p.hasAbility(Abilities.FORECAST) && p.species.speciesId === Species.CASTFORM
|
||||
(p.hasAbility(Abilities.FORECAST) && p.species.speciesId === Species.CASTFORM)
|
||||
|| (p.hasAbility(Abilities.FLOWER_GIFT) && p.species.speciesId === Species.CHERRIM)
|
||||
);
|
||||
}
|
||||
|
||||
@ -4902,7 +4951,7 @@ export function initAbilities() {
|
||||
.attr(UncopiableAbilityAbAttr)
|
||||
.attr(NoFusionAbilityAbAttr)
|
||||
.attr(PostSummonFormChangeByWeatherAbAttr, Abilities.FORECAST)
|
||||
.attr(PostWeatherChangeFormChangeAbAttr, Abilities.FORECAST),
|
||||
.attr(PostWeatherChangeFormChangeAbAttr, Abilities.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]),
|
||||
new Ability(Abilities.STICKY_HOLD, 3)
|
||||
.attr(BlockItemTheftAbAttr)
|
||||
.bypassFaint()
|
||||
@ -5025,7 +5074,7 @@ export function initAbilities() {
|
||||
.attr(AlwaysHitAbAttr)
|
||||
.attr(DoubleBattleChanceAbAttr),
|
||||
new Ability(Abilities.STALL, 4)
|
||||
.attr(ChangeMovePriorityAbAttr, (pokemon, move: Move) => true, -0.5),
|
||||
.attr(ChangeMovePriorityAbAttr, (pokemon, move: Move) => true, -0.2),
|
||||
new Ability(Abilities.TECHNICIAN, 4)
|
||||
.attr(MovePowerBoostAbAttr, (user, target, move) => {
|
||||
const power = new Utils.NumberHolder(move.power);
|
||||
@ -5095,8 +5144,10 @@ export function initAbilities() {
|
||||
.conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), BattleStatMultiplierAbAttr, BattleStat.SPDEF, 1.5)
|
||||
.attr(UncopiableAbilityAbAttr)
|
||||
.attr(NoFusionAbilityAbAttr)
|
||||
.ignorable()
|
||||
.partial(),
|
||||
.attr(PostSummonFormChangeByWeatherAbAttr, Abilities.FLOWER_GIFT)
|
||||
.attr(PostWeatherChangeFormChangeAbAttr, Abilities.FLOWER_GIFT, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG, WeatherType.HAIL, WeatherType.HEAVY_RAIN, WeatherType.SNOW, WeatherType.RAIN ])
|
||||
.partial() // Should also boosts stats of ally
|
||||
.ignorable(),
|
||||
new Ability(Abilities.BAD_DREAMS, 4)
|
||||
.attr(PostTurnHurtIfSleepingAbAttr),
|
||||
new Ability(Abilities.PICKPOCKET, 5)
|
||||
@ -5713,7 +5764,7 @@ export function initAbilities() {
|
||||
.partial() // Healing not blocked by Heal Block
|
||||
.ignorable(),
|
||||
new Ability(Abilities.MYCELIUM_MIGHT, 9)
|
||||
.attr(ChangeMovePriorityAbAttr, (pokemon, move) => move.category === MoveCategory.STATUS, -0.5)
|
||||
.attr(ChangeMovePriorityAbAttr, (pokemon, move) => move.category === MoveCategory.STATUS, -0.2)
|
||||
.attr(PreventBypassSpeedChanceAbAttr, (pokemon, move) => move.category === MoveCategory.STATUS)
|
||||
.attr(MoveAbilityBypassAbAttr, (pokemon, move: Move) => move.category === MoveCategory.STATUS),
|
||||
new Ability(Abilities.MINDS_EYE, 9)
|
||||
@ -5761,10 +5812,10 @@ export function initAbilities() {
|
||||
.attr(NoTransformAbilityAbAttr)
|
||||
.attr(NoFusionAbilityAbAttr),
|
||||
new Ability(Abilities.TERA_SHELL, 9)
|
||||
.attr(FullHpResistTypeAbAttr)
|
||||
.attr(UncopiableAbilityAbAttr)
|
||||
.attr(UnswappableAbilityAbAttr)
|
||||
.ignorable()
|
||||
.unimplemented(),
|
||||
.ignorable(),
|
||||
new Ability(Abilities.TERAFORM_ZERO, 9)
|
||||
.attr(UncopiableAbilityAbAttr)
|
||||
.attr(UnswappableAbilityAbAttr)
|
||||
|
@ -905,6 +905,21 @@ class HappyHourTag extends ArenaTag {
|
||||
}
|
||||
}
|
||||
|
||||
class SafeguardTag extends ArenaTag {
|
||||
constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) {
|
||||
super(ArenaTagType.SAFEGUARD, turnCount, Moves.SAFEGUARD, sourceId, side);
|
||||
}
|
||||
|
||||
onAdd(arena: Arena): void {
|
||||
arena.scene.queueMessage(i18next.t(`arenaTag:safeguardOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`));
|
||||
}
|
||||
|
||||
onRemove(arena: Arena): void {
|
||||
arena.scene.queueMessage(i18next.t(`arenaTag:safeguardOnRemove${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves | undefined, sourceId: integer, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag | null {
|
||||
switch (tagType) {
|
||||
case ArenaTagType.MIST:
|
||||
@ -950,6 +965,8 @@ export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMov
|
||||
return new TailwindTag(turnCount, sourceId, side);
|
||||
case ArenaTagType.HAPPY_HOUR:
|
||||
return new HappyHourTag(turnCount, sourceId, side);
|
||||
case ArenaTagType.SAFEGUARD:
|
||||
return new SafeguardTag(turnCount, sourceId, side);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
@ -788,10 +788,10 @@ export abstract class BattleAnim {
|
||||
targetSprite.pipelineData["tone"] = [ 0.0, 0.0, 0.0, 0.0 ];
|
||||
targetSprite.setAngle(0);
|
||||
if (!this.isHideUser() && userSprite) {
|
||||
userSprite.setVisible(true);
|
||||
this.user?.getSprite().setVisible(true); // using this.user to fix context loss due to isOppAnim swap (#481)
|
||||
}
|
||||
if (!this.isHideTarget() && (targetSprite !== userSprite || !this.isHideUser())) {
|
||||
targetSprite.setVisible(true);
|
||||
this.target?.getSprite().setVisible(true); // using this.target to fix context loss due to isOppAnim swap (#481)
|
||||
}
|
||||
for (const ms of Object.values(spriteCache).flat()) {
|
||||
if (ms) {
|
||||
|
@ -212,7 +212,7 @@ export class TrappedTag extends BattlerTag {
|
||||
|
||||
canAdd(pokemon: Pokemon): boolean {
|
||||
const isGhost = pokemon.isOfType(Type.GHOST);
|
||||
const isTrapped = pokemon.getTag(BattlerTagType.TRAPPED);
|
||||
const isTrapped = pokemon.getTag(TrappedTag);
|
||||
|
||||
return !isTrapped && !isGhost;
|
||||
}
|
||||
@ -245,6 +245,23 @@ export class TrappedTag extends BattlerTag {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* BattlerTag implementing No Retreat's trapping effect.
|
||||
* This is treated separately from other trapping effects to prevent
|
||||
* Ghost-type Pokemon from being able to reuse the move.
|
||||
* @extends TrappedTag
|
||||
*/
|
||||
class NoRetreatTag extends TrappedTag {
|
||||
constructor(sourceId: number) {
|
||||
super(BattlerTagType.NO_RETREAT, BattlerTagLapseType.CUSTOM, 0, Moves.NO_RETREAT, sourceId);
|
||||
}
|
||||
|
||||
/** overrides {@linkcode TrappedTag.apply}, removing the Ghost-type condition */
|
||||
canAdd(pokemon: Pokemon): boolean {
|
||||
return !pokemon.getTag(TrappedTag);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* BattlerTag that represents the {@link https://bulbapedia.bulbagarden.net/wiki/Flinch Flinch} status condition
|
||||
*/
|
||||
@ -750,7 +767,7 @@ export class OctolockTag extends TrappedTag {
|
||||
const shouldLapse = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType);
|
||||
|
||||
if (shouldLapse) {
|
||||
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [BattleStat.DEF, BattleStat.SPDEF], -1));
|
||||
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), false, [BattleStat.DEF, BattleStat.SPDEF], -1));
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -864,7 +881,7 @@ export abstract class DamagingTrapTag extends TrappedTag {
|
||||
}
|
||||
|
||||
canAdd(pokemon: Pokemon): boolean {
|
||||
return !pokemon.isOfType(Type.GHOST) && !pokemon.findTag(t => t instanceof DamagingTrapTag);
|
||||
return !pokemon.getTag(TrappedTag);
|
||||
}
|
||||
|
||||
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||
@ -1507,6 +1524,25 @@ export class CritBoostTag extends BattlerTag {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tag for the effects of Dragon Cheer, which boosts the critical hit ratio of the user's allies.
|
||||
* @extends {CritBoostTag}
|
||||
*/
|
||||
export class DragonCheerTag extends CritBoostTag {
|
||||
/** The types of the user's ally when the tag is added */
|
||||
public typesOnAdd: Type[];
|
||||
|
||||
constructor() {
|
||||
super(BattlerTagType.CRIT_BOOST, Moves.DRAGON_CHEER);
|
||||
}
|
||||
|
||||
onAdd(pokemon: Pokemon): void {
|
||||
super.onAdd(pokemon);
|
||||
|
||||
this.typesOnAdd = pokemon.getTypes(true);
|
||||
}
|
||||
}
|
||||
|
||||
export class SaltCuredTag extends BattlerTag {
|
||||
private sourceIndex: number;
|
||||
|
||||
@ -1864,6 +1900,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source
|
||||
return new DrowsyTag();
|
||||
case BattlerTagType.TRAPPED:
|
||||
return new TrappedTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId);
|
||||
case BattlerTagType.NO_RETREAT:
|
||||
return new NoRetreatTag(sourceId);
|
||||
case BattlerTagType.BIND:
|
||||
return new BindTag(turnCount, sourceId);
|
||||
case BattlerTagType.WRAP:
|
||||
@ -1923,6 +1961,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source
|
||||
return new TypeBoostTag(tagType, sourceMove, Type.FIRE, 1.5, false);
|
||||
case BattlerTagType.CRIT_BOOST:
|
||||
return new CritBoostTag(tagType, sourceMove);
|
||||
case BattlerTagType.DRAGON_CHEER:
|
||||
return new DragonCheerTag();
|
||||
case BattlerTagType.ALWAYS_CRIT:
|
||||
case BattlerTagType.IGNORE_ACCURACY:
|
||||
return new BattlerTag(tagType, BattlerTagLapseType.TURN_END, 2, sourceMove);
|
||||
|
@ -35,18 +35,18 @@ interface BiomeDepths {
|
||||
export const biomeLinks: BiomeLinks = {
|
||||
[Biome.TOWN]: Biome.PLAINS,
|
||||
[Biome.PLAINS]: [ Biome.GRASS, Biome.METROPOLIS, Biome.LAKE ],
|
||||
[Biome.GRASS]: [ Biome.TALL_GRASS, [ Biome.CONSTRUCTION_SITE, 2 ] ],
|
||||
[Biome.GRASS]: Biome.TALL_GRASS,
|
||||
[Biome.TALL_GRASS]: [ Biome.FOREST, Biome.CAVE ],
|
||||
[Biome.SLUM]: Biome.CONSTRUCTION_SITE,
|
||||
[Biome.SLUM]: [ Biome.CONSTRUCTION_SITE, [ Biome.SWAMP, 2 ] ],
|
||||
[Biome.FOREST]: [ Biome.JUNGLE, Biome.MEADOW ],
|
||||
[Biome.SEA]: [ Biome.SEABED, Biome.ICE_CAVE ],
|
||||
[Biome.SWAMP]: [ Biome.GRAVEYARD, Biome.TALL_GRASS ],
|
||||
[Biome.BEACH]: [ Biome.SEA, [ Biome.ISLAND, 3 ] ],
|
||||
[Biome.BEACH]: [ Biome.SEA, [ Biome.ISLAND, 2 ] ],
|
||||
[Biome.LAKE]: [ Biome.BEACH, Biome.SWAMP, Biome.CONSTRUCTION_SITE ],
|
||||
[Biome.SEABED]: [ Biome.CAVE, [ Biome.VOLCANO, 3 ] ],
|
||||
[Biome.MOUNTAIN]: [ Biome.VOLCANO, [ Biome.DOJO, 2] [ Biome.WASTELAND, 2 ] ],
|
||||
[Biome.MOUNTAIN]: [ Biome.VOLCANO, [ Biome.WASTELAND, 2 ], [ Biome.SPACE, 3 ] ],
|
||||
[Biome.BADLANDS]: [ Biome.DESERT, Biome.MOUNTAIN ],
|
||||
[Biome.CAVE]: [ Biome.BADLANDS, Biome.LAKE ],
|
||||
[Biome.CAVE]: [ Biome.BADLANDS, Biome.LAKE [ Biome.LABORATORY, 2 ] ],
|
||||
[Biome.DESERT]: [ Biome.RUINS, [ Biome.CONSTRUCTION_SITE, 2 ] ],
|
||||
[Biome.ICE_CAVE]: Biome.SNOWY_FOREST,
|
||||
[Biome.MEADOW]: [ Biome.PLAINS, Biome.FAIRY_CAVE ],
|
||||
@ -54,17 +54,17 @@ export const biomeLinks: BiomeLinks = {
|
||||
[Biome.VOLCANO]: [ Biome.BEACH, [ Biome.ICE_CAVE, 3 ] ],
|
||||
[Biome.GRAVEYARD]: Biome.ABYSS,
|
||||
[Biome.DOJO]: [ Biome.PLAINS, [ Biome.JUNGLE, 2], [ Biome.TEMPLE, 2 ] ],
|
||||
[Biome.FACTORY]: [ Biome.TALL_GRASS, [ Biome.LABORATORY, 3 ] ],
|
||||
[Biome.RUINS]: [ Biome.FOREST ],
|
||||
[Biome.FACTORY]: [ Biome.PLAINS, [ Biome.LABORATORY, 2 ] ],
|
||||
[Biome.RUINS]: [ Biome.MOUNTAIN, [ Biome.FOREST, 2 ] ],
|
||||
[Biome.WASTELAND]: Biome.BADLANDS,
|
||||
[Biome.ABYSS]: [ Biome.CAVE, [ Biome.SPACE, 3 ], [ Biome.WASTELAND, 3 ] ],
|
||||
[Biome.ABYSS]: [ Biome.CAVE, [ Biome.SPACE, 2 ], [ Biome.WASTELAND, 2 ] ],
|
||||
[Biome.SPACE]: Biome.RUINS,
|
||||
[Biome.CONSTRUCTION_SITE]: [ Biome.POWER_PLANT, [ Biome.DOJO, 2 ] ],
|
||||
[Biome.JUNGLE]: [ Biome.TEMPLE ],
|
||||
[Biome.FAIRY_CAVE]: [ Biome.ICE_CAVE, [ Biome.SPACE, 2 ] ],
|
||||
[Biome.TEMPLE]: [ Biome.DESERT, [ Biome.SWAMP, 2 ], [ Biome.RUINS, 2 ] ],
|
||||
[Biome.METROPOLIS]: Biome.SLUM,
|
||||
[Biome.SNOWY_FOREST]: [ Biome.FOREST, Biome.MOUNTAIN, [ Biome.LAKE, 2 ] ],
|
||||
[Biome.SNOWY_FOREST]: [ Biome.FOREST, [ Biome.MOUNTAIN, 2 ], [ Biome.LAKE, 2 ] ],
|
||||
[Biome.ISLAND]: Biome.SEA,
|
||||
[Biome.LABORATORY]: Biome.CONSTRUCTION_SITE
|
||||
};
|
||||
@ -7666,7 +7666,7 @@ export function initBiomes() {
|
||||
if (biome === Biome.END) {
|
||||
const biomeList = Object.keys(Biome).filter(key => !isNaN(Number(key)));
|
||||
biomeList.pop(); // Removes Biome.END from the list
|
||||
const randIndex = Utils.randInt(biomeList.length, 2); // Will never be Biome.TOWN or Biome.PLAINS
|
||||
const randIndex = Utils.randInt(biomeList.length, 1); // Will never be Biome.TOWN
|
||||
biome = Biome[biomeList[randIndex]];
|
||||
}
|
||||
const linkedBiomes: (Biome | [ Biome, integer ])[] = Array.isArray(biomeLinks[biome])
|
||||
|
@ -1953,6 +1953,13 @@ export class StatusEffectAttr extends MoveEffectAttr {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (user !== target && target.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY)) {
|
||||
if (move.category === MoveCategory.STATUS) {
|
||||
user.scene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target)}));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if ((!pokemon.status || (pokemon.status.effect === this.effect && moveChance < 0))
|
||||
&& pokemon.trySetStatus(this.effect, true, user, this.cureTurn)) {
|
||||
applyPostAttackAbAttrs(ConfusionOnStatusEffectAbAttr, user, target, move, null, false, this.effect);
|
||||
@ -4659,6 +4666,17 @@ export class ConfuseAttr extends AddBattlerTagAttr {
|
||||
constructor(selfTarget?: boolean) {
|
||||
super(BattlerTagType.CONFUSED, selfTarget, false, 2, 5);
|
||||
}
|
||||
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||
if (!this.selfTarget && target.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY)) {
|
||||
if (move.category === MoveCategory.STATUS) {
|
||||
user.scene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target)}));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return super.apply(user, target, move, args);
|
||||
}
|
||||
}
|
||||
|
||||
export class RechargeAttr extends AddBattlerTagAttr {
|
||||
@ -5888,9 +5906,9 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr {
|
||||
target.summonData.ability = tempAbilityId;
|
||||
|
||||
user.scene.queueMessage(i18next.t("moveTriggers:swappedAbilitiesWithTarget", {pokemonName: getPokemonNameWithAffix(user)}));
|
||||
// Swaps Forecast from Castform
|
||||
// Swaps Forecast/Flower Gift from Castform/Cherrim
|
||||
user.scene.arena.triggerWeatherBasedFormChangesToNormal();
|
||||
// Swaps Forecast to Castform (edge case)
|
||||
// Swaps Forecast/Flower Gift to Castform/Cherrim (edge case)
|
||||
user.scene.arena.triggerWeatherBasedFormChanges();
|
||||
|
||||
return true;
|
||||
@ -6037,6 +6055,57 @@ export class DestinyBondAttr extends MoveEffectAttr {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attribute to apply a battler tag to the target if they have had their stats boosted this turn.
|
||||
* @extends AddBattlerTagAttr
|
||||
*/
|
||||
export class AddBattlerTagIfBoostedAttr extends AddBattlerTagAttr {
|
||||
constructor(tag: BattlerTagType) {
|
||||
super(tag, false, false, 2, 5);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param user {@linkcode Pokemon} using this move
|
||||
* @param target {@linkcode Pokemon} target of this move
|
||||
* @param move {@linkcode Move} being used
|
||||
* @param {any[]} args N/A
|
||||
* @returns true
|
||||
*/
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||
if (target.turnData.battleStatsIncreased) {
|
||||
super.apply(user, target, move, args);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attribute to apply a status effect to the target if they have had their stats boosted this turn.
|
||||
* @extends MoveEffectAttr
|
||||
*/
|
||||
export class StatusIfBoostedAttr extends MoveEffectAttr {
|
||||
public effect: StatusEffect;
|
||||
|
||||
constructor(effect: StatusEffect) {
|
||||
super(true, MoveEffectTrigger.HIT);
|
||||
this.effect = effect;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param user {@linkcode Pokemon} using this move
|
||||
* @param target {@linkcode Pokemon} target of this move
|
||||
* @param move {@linkcode Move} N/A
|
||||
* @param {any[]} args N/A
|
||||
* @returns true
|
||||
*/
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||
if (target.turnData.battleStatsIncreased) {
|
||||
target.trySetStatus(this.effect, true, user);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
export class LastResortAttr extends MoveAttr {
|
||||
getCondition(): MoveConditionFunc {
|
||||
return (user: Pokemon, target: Pokemon, move: Move) => {
|
||||
@ -6963,7 +7032,7 @@ export function initMoves() {
|
||||
.attr(FriendshipPowerAttr, true),
|
||||
new StatusMove(Moves.SAFEGUARD, Type.NORMAL, -1, 25, -1, 0, 2)
|
||||
.target(MoveTarget.USER_SIDE)
|
||||
.unimplemented(),
|
||||
.attr(AddArenaTagAttr, ArenaTagType.SAFEGUARD, 5, true, true),
|
||||
new StatusMove(Moves.PAIN_SPLIT, Type.NORMAL, -1, 20, -1, 0, 2)
|
||||
.attr(HpSplitAttr)
|
||||
.condition(failOnBossCondition),
|
||||
@ -7152,7 +7221,7 @@ export function initMoves() {
|
||||
.attr(RemoveScreensAttr),
|
||||
new StatusMove(Moves.YAWN, Type.NORMAL, -1, 10, -1, 0, 3)
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.DROWSY, false, true)
|
||||
.condition((user, target, move) => !target.status),
|
||||
.condition((user, target, move) => !target.status && !target.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY)),
|
||||
new AttackMove(Moves.KNOCK_OFF, Type.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3)
|
||||
.attr(MovePowerMultiplierAttr, (user, target, move) => target.getHeldItems().filter(i => i.isTransferrable).length > 0 ? 1.5 : 1)
|
||||
.attr(RemoveHeldItemAttr, false),
|
||||
@ -8502,7 +8571,7 @@ export function initMoves() {
|
||||
.partial(),
|
||||
new SelfStatusMove(Moves.NO_RETREAT, Type.FIGHTING, -1, 5, -1, 0, 8)
|
||||
.attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD ], 1, true)
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, true, false, 1)
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.NO_RETREAT, true, false)
|
||||
.condition((user, target, move) => user.getTag(TrappedTag)?.sourceMove !== Moves.NO_RETREAT), // fails if the user is currently trapped by No Retreat
|
||||
new StatusMove(Moves.TAR_SHOT, Type.ROCK, 100, 15, -1, 0, 8)
|
||||
.attr(StatChangeAttr, BattleStat.SPD, -1)
|
||||
@ -8694,10 +8763,10 @@ export function initMoves() {
|
||||
new AttackMove(Moves.SKITTER_SMACK, Type.BUG, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8)
|
||||
.attr(StatChangeAttr, BattleStat.SPATK, -1),
|
||||
new AttackMove(Moves.BURNING_JEALOUSY, Type.FIRE, MoveCategory.SPECIAL, 70, 100, 5, 100, 0, 8)
|
||||
.target(MoveTarget.ALL_NEAR_ENEMIES)
|
||||
.partial(),
|
||||
.attr(StatusIfBoostedAttr, StatusEffect.BURN)
|
||||
.target(MoveTarget.ALL_NEAR_ENEMIES),
|
||||
new AttackMove(Moves.LASH_OUT, Type.DARK, MoveCategory.PHYSICAL, 75, 100, 5, -1, 0, 8)
|
||||
.partial(),
|
||||
.attr(MovePowerMultiplierAttr, (user, target, move) => user.turnData.battleStatsDecreased ? 2 : 1),
|
||||
new AttackMove(Moves.POLTERGEIST, Type.GHOST, MoveCategory.PHYSICAL, 110, 90, 5, -1, 0, 8)
|
||||
.attr(AttackedByItemAttr)
|
||||
.makesContact(false),
|
||||
@ -9143,12 +9212,11 @@ export function initMoves() {
|
||||
new AttackMove(Moves.HARD_PRESS, Type.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 9)
|
||||
.attr(OpponentHighHpPowerAttr, 100),
|
||||
new StatusMove(Moves.DRAGON_CHEER, Type.DRAGON, -1, 15, -1, 0, 9)
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.CRIT_BOOST, false, true)
|
||||
.target(MoveTarget.NEAR_ALLY)
|
||||
.partial(),
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.DRAGON_CHEER, false, true)
|
||||
.target(MoveTarget.NEAR_ALLY),
|
||||
new AttackMove(Moves.ALLURING_VOICE, Type.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 9)
|
||||
.soundBased()
|
||||
.partial(),
|
||||
.attr(AddBattlerTagIfBoostedAttr, BattlerTagType.CONFUSED)
|
||||
.soundBased(),
|
||||
new AttackMove(Moves.TEMPER_FLARE, Type.FIRE, MoveCategory.PHYSICAL, 75, 100, 10, -1, 0, 9)
|
||||
.attr(MovePowerMultiplierAttr, (user, target, move) => user.getLastXMoves(2)[1]?.result === MoveResult.MISS || user.getLastXMoves(2)[1]?.result === MoveResult.FAIL ? 2 : 1),
|
||||
new AttackMove(Moves.SUPERCELL_SLAM, Type.ELECTRIC, MoveCategory.PHYSICAL, 100, 95, 15, -1, 0, 9)
|
||||
|
@ -359,7 +359,7 @@ export class SpeciesDefaultFormMatchTrigger extends SpeciesFormChangeTrigger {
|
||||
|
||||
/**
|
||||
* Class used for triggering form changes based on weather.
|
||||
* Used by Castform.
|
||||
* Used by Castform and Cherrim.
|
||||
* @extends SpeciesFormChangeTrigger
|
||||
*/
|
||||
export class SpeciesFormChangeWeatherTrigger extends SpeciesFormChangeTrigger {
|
||||
@ -392,7 +392,7 @@ export class SpeciesFormChangeWeatherTrigger extends SpeciesFormChangeTrigger {
|
||||
/**
|
||||
* Class used for reverting to the original form when the weather runs out
|
||||
* or when the user loses the ability/is suppressed.
|
||||
* Used by Castform.
|
||||
* Used by Castform and Cherrim.
|
||||
* @extends SpeciesFormChangeTrigger
|
||||
*/
|
||||
export class SpeciesFormChangeRevertWeatherFormTrigger extends SpeciesFormChangeTrigger {
|
||||
@ -930,6 +930,11 @@ export const pokemonFormChanges: PokemonFormChanges = {
|
||||
new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeActiveTrigger(), true),
|
||||
new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeActiveTrigger(), true),
|
||||
],
|
||||
[Species.CHERRIM]: [
|
||||
new SpeciesFormChange(Species.CHERRIM, "overcast", "sunshine", new SpeciesFormChangeWeatherTrigger(Abilities.FLOWER_GIFT, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true),
|
||||
new SpeciesFormChange(Species.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FLOWER_GIFT, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG, WeatherType.HAIL, WeatherType.HEAVY_RAIN, WeatherType.SNOW, WeatherType.RAIN ]), true),
|
||||
new SpeciesFormChange(Species.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeActiveTrigger(), true),
|
||||
],
|
||||
};
|
||||
|
||||
export function initPokemonForms() {
|
||||
|
@ -1132,7 +1132,7 @@ export function initSpecies() {
|
||||
),
|
||||
new PokemonSpecies(Species.SNORLAX, 1, false, false, false, "Sleeping Pokémon", Type.NORMAL, null, 2.1, 460, Abilities.IMMUNITY, Abilities.THICK_FAT, Abilities.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, GrowthRate.SLOW, 87.5, false, true,
|
||||
new PokemonForm("Normal", "", Type.NORMAL, null, 2.1, 460, Abilities.IMMUNITY, Abilities.THICK_FAT, Abilities.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, false, null, true),
|
||||
new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.NORMAL, null, 35, 460, Abilities.THICK_FAT, Abilities.THICK_FAT, Abilities.THICK_FAT, 640, 200, 135, 85, 80, 125, 15, 25, 50, 189),
|
||||
new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.NORMAL, null, 35, 460, Abilities.HARVEST, Abilities.HARVEST, Abilities.HARVEST, 640, 200, 135, 80, 80, 125, 20, 25, 50, 189),
|
||||
),
|
||||
new PokemonSpecies(Species.ARTICUNO, 1, true, false, false, "Freeze Pokémon", Type.ICE, Type.FLYING, 1.7, 55.4, Abilities.PRESSURE, Abilities.NONE, Abilities.SNOW_CLOAK, 580, 90, 85, 100, 95, 125, 85, 3, 35, 290, GrowthRate.SLOW, null, false),
|
||||
new PokemonSpecies(Species.ZAPDOS, 1, true, false, false, "Electric Pokémon", Type.ELECTRIC, Type.FLYING, 1.6, 52.6, Abilities.PRESSURE, Abilities.NONE, Abilities.STATIC, 580, 90, 90, 85, 125, 90, 100, 3, 35, 290, GrowthRate.SLOW, null, false),
|
||||
@ -3573,7 +3573,7 @@ export const starterPassiveAbilities = {
|
||||
[Species.CHATOT]: Abilities.PUNK_ROCK,
|
||||
[Species.SPIRITOMB]: Abilities.VESSEL_OF_RUIN,
|
||||
[Species.GIBLE]: Abilities.SAND_STREAM,
|
||||
[Species.MUNCHLAX]: Abilities.HARVEST,
|
||||
[Species.MUNCHLAX]: Abilities.RIPEN,
|
||||
[Species.RIOLU]: Abilities.MINDS_EYE,
|
||||
[Species.HIPPOPOTAS]: Abilities.UNAWARE,
|
||||
[Species.SKORUPI]: Abilities.SUPER_LUCK,
|
||||
|
@ -22,5 +22,6 @@ export enum ArenaTagType {
|
||||
CRAFTY_SHIELD = "CRAFTY_SHIELD",
|
||||
TAILWIND = "TAILWIND",
|
||||
HAPPY_HOUR = "HAPPY_HOUR",
|
||||
SAFEGUARD = "SAFEGUARD",
|
||||
NO_CRIT = "NO_CRIT"
|
||||
}
|
||||
|
@ -69,5 +69,7 @@ export enum BattlerTagType {
|
||||
GULP_MISSILE_ARROKUDA = "GULP_MISSILE_ARROKUDA",
|
||||
GULP_MISSILE_PIKACHU = "GULP_MISSILE_PIKACHU",
|
||||
BEAK_BLAST_CHARGING = "BEAK_BLAST_CHARGING",
|
||||
SHELL_TRAP = "SHELL_TRAP"
|
||||
SHELL_TRAP = "SHELL_TRAP",
|
||||
DRAGON_CHEER = "DRAGON_CHEER",
|
||||
NO_RETREAT = "NO_RETREAT",
|
||||
}
|
||||
|
@ -339,7 +339,10 @@ export class Arena {
|
||||
*/
|
||||
triggerWeatherBasedFormChanges(): void {
|
||||
this.scene.getField(true).forEach( p => {
|
||||
if (p.hasAbility(Abilities.FORECAST) && p.species.speciesId === Species.CASTFORM) {
|
||||
const isCastformWithForecast = (p.hasAbility(Abilities.FORECAST) && p.species.speciesId === Species.CASTFORM);
|
||||
const isCherrimWithFlowerGift = (p.hasAbility(Abilities.FLOWER_GIFT) && p.species.speciesId === Species.CHERRIM);
|
||||
|
||||
if (isCastformWithForecast || isCherrimWithFlowerGift) {
|
||||
new ShowAbilityPhase(this.scene, p.getBattlerIndex());
|
||||
this.scene.triggerPokemonFormChange(p, SpeciesFormChangeWeatherTrigger);
|
||||
}
|
||||
@ -351,7 +354,10 @@ export class Arena {
|
||||
*/
|
||||
triggerWeatherBasedFormChangesToNormal(): void {
|
||||
this.scene.getField(true).forEach( p => {
|
||||
if (p.hasAbility(Abilities.FORECAST, false, true) && p.species.speciesId === Species.CASTFORM) {
|
||||
const isCastformWithForecast = (p.hasAbility(Abilities.FORECAST, false, true) && p.species.speciesId === Species.CASTFORM);
|
||||
const isCherrimWithFlowerGift = (p.hasAbility(Abilities.FLOWER_GIFT, false, true) && p.species.speciesId === Species.CHERRIM);
|
||||
|
||||
if (isCastformWithForecast || isCherrimWithFlowerGift) {
|
||||
new ShowAbilityPhase(this.scene, p.getBattlerIndex());
|
||||
return this.scene.triggerPokemonFormChange(p, SpeciesFormChangeRevertWeatherFormTrigger);
|
||||
}
|
||||
|
@ -18,11 +18,11 @@ import { Status, StatusEffect, getRandomStatus } from "../data/status-effect";
|
||||
import { pokemonEvolutions, pokemonPrevolutions, SpeciesFormEvolution, SpeciesEvolutionCondition, FusionSpeciesFormEvolution } from "../data/pokemon-evolutions";
|
||||
import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "../data/tms";
|
||||
import { BattleStat } from "../data/battle-stat";
|
||||
import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, ExposedTag } from "../data/battler-tags";
|
||||
import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag } from "../data/battler-tags";
|
||||
import { WeatherType } from "../data/weather";
|
||||
import { TempBattleStat } from "../data/temp-battle-stat";
|
||||
import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "../data/arena-tag";
|
||||
import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldBattleStatMultiplierAbAttrs, FieldMultiplyBattleStatAbAttr, AddSecondStrikeAbAttr, IgnoreOpponentEvasionAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr } from "../data/ability";
|
||||
import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldBattleStatMultiplierAbAttrs, FieldMultiplyBattleStatAbAttr, AddSecondStrikeAbAttr, IgnoreOpponentEvasionAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr } from "../data/ability";
|
||||
import PokemonData from "../system/pokemon-data";
|
||||
import { BattlerIndex } from "../battle";
|
||||
import { Mode } from "../ui/ui";
|
||||
@ -133,9 +133,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
this.scene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance);
|
||||
}
|
||||
|
||||
const hasHiddenAbility = !Utils.randSeedInt(hiddenAbilityChance.value);
|
||||
const randAbilityIndex = Utils.randSeedInt(2);
|
||||
|
||||
this.species = species;
|
||||
this.pokeball = dataSource?.pokeball || PokeballType.POKEBALL;
|
||||
this.level = level;
|
||||
@ -146,6 +143,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
this.abilityIndex = abilityIndex; // Use the provided ability index if it is defined
|
||||
} else {
|
||||
// If abilityIndex is not provided, determine it based on species and hidden ability
|
||||
const hasHiddenAbility = !Utils.randSeedInt(hiddenAbilityChance.value);
|
||||
const randAbilityIndex = Utils.randSeedInt(2);
|
||||
if (species.abilityHidden && hasHiddenAbility) {
|
||||
// If the species has a hidden ability and the hidden ability is present
|
||||
this.abilityIndex = 2;
|
||||
@ -1210,6 +1209,28 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
return !!this.getTag(GroundedTag) || (!this.isOfType(Type.FLYING, true, true) && !this.hasAbility(Abilities.LEVITATE) && !this.getTag(BattlerTagType.MAGNET_RISEN) && !this.getTag(SemiInvulnerableTag));
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether this Pokemon is prevented from running or switching due
|
||||
* to effects from moves and/or abilities.
|
||||
* @param trappedAbMessages `string[]` If defined, ability trigger messages
|
||||
* (e.g. from Shadow Tag) are forwarded through this array.
|
||||
* @param simulated `boolean` if `true`, applies abilities via simulated calls.
|
||||
* @returns
|
||||
*/
|
||||
isTrapped(trappedAbMessages: string[] = [], simulated: boolean = true): boolean {
|
||||
if (this.isOfType(Type.GHOST)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const trappedByAbility = new Utils.BooleanHolder(false);
|
||||
|
||||
this.scene.getEnemyField()!.forEach(enemyPokemon =>
|
||||
applyCheckTrappedAbAttrs(CheckTrappedAbAttr, enemyPokemon, trappedByAbility, this, trappedAbMessages, simulated)
|
||||
);
|
||||
|
||||
return (trappedByAbility.value || !!this.getTag(TrappedTag));
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the type of a move when used by this Pokemon after
|
||||
* type-changing move and ability attributes have applied.
|
||||
@ -1276,6 +1297,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
}
|
||||
}
|
||||
|
||||
// Apply Tera Shell's effect to attacks after all immunities are accounted for
|
||||
if (!ignoreAbility && move.category !== MoveCategory.STATUS) {
|
||||
applyPreDefendAbAttrs(FullHpResistTypeAbAttr, this, source, move, cancelledHolder, simulated, typeMultiplier);
|
||||
}
|
||||
|
||||
return (!cancelledHolder.value ? typeMultiplier.value : 0) as TypeDamageMultiplier;
|
||||
}
|
||||
|
||||
@ -1501,13 +1527,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
}
|
||||
|
||||
/**
|
||||
* Function that tries to set a Pokemon shiny based on the trainer's trainer ID and secret ID
|
||||
* Function that tries to set a Pokemon shiny based on the trainer's trainer ID and secret ID.
|
||||
* Endless Pokemon in the end biome are unable to be set to shiny
|
||||
*
|
||||
* The exact mechanic is that it calculates E as the XOR of the player's trainer ID and secret ID
|
||||
* F is calculated as the XOR of the first 16 bits of the Pokemon's ID with the last 16 bits
|
||||
* The XOR of E and F are then compared to the thresholdOverride (default case 32) to see whether or not to generate a shiny
|
||||
* @param thresholdOverride number that is divided by 2^16 (65536) to get the shiny chance
|
||||
* The exact mechanic is that it calculates E as the XOR of the player's trainer ID and secret ID.
|
||||
* F is calculated as the XOR of the first 16 bits of the Pokemon's ID with the last 16 bits.
|
||||
* The XOR of E and F are then compared to the {@linkcode shinyThreshold} (or {@linkcode thresholdOverride} if set) to see whether or not to generate a shiny.
|
||||
* The base shiny odds are {@linkcode baseShinyChance} / 65536
|
||||
* @param thresholdOverride number that is divided by 2^16 (65536) to get the shiny chance, overrides {@linkcode shinyThreshold} if set (bypassing shiny rate modifiers such as Shiny Charm)
|
||||
* @returns true if the Pokemon has been set as a shiny, false otherwise
|
||||
*/
|
||||
trySetShiny(thresholdOverride?: integer): boolean {
|
||||
@ -1522,7 +1549,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
const E = this.scene.gameData.trainerId ^ this.scene.gameData.secretId;
|
||||
const F = rand1 ^ rand2;
|
||||
|
||||
const shinyThreshold = new Utils.IntegerHolder(32);
|
||||
/** `64/65536 -> 1/1024` */
|
||||
const baseShinyChance = 64;
|
||||
const shinyThreshold = new Utils.IntegerHolder(baseShinyChance);
|
||||
if (thresholdOverride === undefined) {
|
||||
if (this.scene.eventManager.isEventActive()) {
|
||||
shinyThreshold.value *= this.scene.eventManager.getShinyMultiplier();
|
||||
@ -1535,9 +1564,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
}
|
||||
|
||||
this.shiny = (E ^ F) < shinyThreshold.value;
|
||||
if ((E ^ F) < 32) {
|
||||
console.log("REAL SHINY!!");
|
||||
}
|
||||
|
||||
if (this.shiny) {
|
||||
this.initShinySparkle();
|
||||
@ -2064,9 +2090,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
critLevel.value += 1;
|
||||
}
|
||||
}
|
||||
if (source.getTag(BattlerTagType.CRIT_BOOST)) {
|
||||
|
||||
const critBoostTag = source.getTag(CritBoostTag);
|
||||
if (critBoostTag) {
|
||||
if (critBoostTag instanceof DragonCheerTag) {
|
||||
critLevel.value += critBoostTag.typesOnAdd.includes(Type.DRAGON) ? 2 : 1;
|
||||
} else {
|
||||
critLevel.value += 2;
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`crit stage: +${critLevel.value}`);
|
||||
const critChance = [24, 8, 2, 1][Math.max(0, Math.min(critLevel.value, 3))];
|
||||
isCritical = critChance === 1 || !this.scene.randBattleSeedInt(critChance);
|
||||
@ -2754,6 +2787,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
|
||||
const types = this.getTypes(true, true);
|
||||
|
||||
const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY;
|
||||
if (sourcePokemon && sourcePokemon !== this && this.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, defendingSide)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (effect) {
|
||||
case StatusEffect.POISON:
|
||||
case StatusEffect.TOXIC:
|
||||
@ -4274,7 +4312,7 @@ export interface TurnMove {
|
||||
targets?: BattlerIndex[];
|
||||
result: MoveResult;
|
||||
virtual?: boolean;
|
||||
turn?: integer;
|
||||
turn?: number;
|
||||
}
|
||||
|
||||
export interface QueuedMove {
|
||||
@ -4286,17 +4324,17 @@ export interface QueuedMove {
|
||||
export interface AttackMoveResult {
|
||||
move: Moves;
|
||||
result: DamageResult;
|
||||
damage: integer;
|
||||
damage: number;
|
||||
critical: boolean;
|
||||
sourceId: integer;
|
||||
sourceId: number;
|
||||
sourceBattlerIndex: BattlerIndex;
|
||||
}
|
||||
|
||||
export class PokemonSummonData {
|
||||
public battleStats: integer[] = [ 0, 0, 0, 0, 0, 0, 0 ];
|
||||
public battleStats: number[] = [ 0, 0, 0, 0, 0, 0, 0 ];
|
||||
public moveQueue: QueuedMove[] = [];
|
||||
public disabledMove: Moves = Moves.NONE;
|
||||
public disabledTurns: integer = 0;
|
||||
public disabledTurns: number = 0;
|
||||
public tags: BattlerTag[] = [];
|
||||
public abilitySuppressed: boolean = false;
|
||||
public abilitiesApplied: Abilities[] = [];
|
||||
@ -4306,14 +4344,14 @@ export class PokemonSummonData {
|
||||
public ability: Abilities = Abilities.NONE;
|
||||
public gender: Gender;
|
||||
public fusionGender: Gender;
|
||||
public stats: integer[];
|
||||
public stats: number[];
|
||||
public moveset: (PokemonMove | null)[];
|
||||
// If not initialized this value will not be populated from save data.
|
||||
public types: Type[] = [];
|
||||
}
|
||||
|
||||
export class PokemonBattleData {
|
||||
public hitCount: integer = 0;
|
||||
public hitCount: number = 0;
|
||||
public endured: boolean = false;
|
||||
public berriesEaten: BerryType[] = [];
|
||||
public abilitiesApplied: Abilities[] = [];
|
||||
@ -4322,21 +4360,23 @@ export class PokemonBattleData {
|
||||
|
||||
export class PokemonBattleSummonData {
|
||||
/** The number of turns the pokemon has passed since entering the battle */
|
||||
public turnCount: integer = 1;
|
||||
public turnCount: number = 1;
|
||||
/** The list of moves the pokemon has used since entering the battle */
|
||||
public moveHistory: TurnMove[] = [];
|
||||
}
|
||||
|
||||
export class PokemonTurnData {
|
||||
public flinched: boolean;
|
||||
public acted: boolean;
|
||||
public hitCount: integer;
|
||||
public hitsLeft: integer;
|
||||
public damageDealt: integer = 0;
|
||||
public currDamageDealt: integer = 0;
|
||||
public damageTaken: integer = 0;
|
||||
public flinched: boolean = false;
|
||||
public acted: boolean = false;
|
||||
public hitCount: number;
|
||||
public hitsLeft: number;
|
||||
public damageDealt: number = 0;
|
||||
public currDamageDealt: number = 0;
|
||||
public damageTaken: number = 0;
|
||||
public attacksReceived: AttackMoveResult[] = [];
|
||||
public order: number;
|
||||
public battleStatsIncreased: boolean = false;
|
||||
public battleStatsDecreased: boolean = false;
|
||||
}
|
||||
|
||||
export enum AiType {
|
||||
|
@ -41,8 +41,6 @@ export class LoadingScene extends SceneBase {
|
||||
|
||||
this.loadImage("loading_bg", "arenas");
|
||||
this.loadImage("logo", "");
|
||||
// this.loadImage("pride-update", "events");
|
||||
this.loadImage("august-variant-update", "events");
|
||||
|
||||
// Load menu images
|
||||
this.loadAtlas("bg", "ui");
|
||||
@ -246,7 +244,12 @@ export class LoadingScene extends SceneBase {
|
||||
} else {
|
||||
this.loadAtlas("types", "");
|
||||
}
|
||||
|
||||
const availableLangs = ["en", "de", "it", "fr", "ja", "ko", "es", "pt_BR", "zh_CN"];
|
||||
if (lang && availableLangs.includes(lang)) {
|
||||
this.loadImage("september-update-"+lang, "events");
|
||||
} else {
|
||||
this.loadImage("september-update-en", "events");
|
||||
}
|
||||
|
||||
this.loadAtlas("statuses", "");
|
||||
this.loadAtlas("categories", "");
|
||||
|
@ -47,5 +47,11 @@
|
||||
"tailwindOnRemovePlayer": "Der Rückenwind auf deiner Seite hat sich gelegt!",
|
||||
"tailwindOnRemoveEnemy": "Der Rückenwind auf gegnerischer Seite hat sich gelegt!",
|
||||
"happyHourOnAdd": "Goldene Zeiten sind angebrochen!",
|
||||
"happyHourOnRemove": "Die goldenen Zeiten sind vorbei!"
|
||||
"happyHourOnRemove": "Die goldenen Zeiten sind vorbei!",
|
||||
"safeguardOnAdd": "Das ganze Feld wird von einem Schleier umhüllt!",
|
||||
"safeguardOnAddPlayer": "Das Team des Anwenders wird von einem Schleier umhüllt!",
|
||||
"safeguardOnAddEnemy": "Das gegnerische Team wird von einem Schleier umhüllt!",
|
||||
"safeguardOnRemove": "Der mystische Schleier, der das ganze Feld umgab, hat sich gelüftet!",
|
||||
"safeguardOnRemovePlayer": "Der mystische Schleier, der dein Team umgab, hat sich gelüftet!",
|
||||
"safeguardOnRemoveEnemy": "Der mystische Schleier, der das gegnerische Team umgab, hat sich gelüftet!"
|
||||
}
|
@ -1403,19 +1403,19 @@
|
||||
"1": "Ich muss dein Potenzial als Trainer und die Stärke der Pokémon sehen, die mit dir kämpfen!",
|
||||
"2": "Los geht's! Dies sind meine Gesteins-Pokémon, mein ganzer Stolz!",
|
||||
"3": "Gesteins-Pokémon sind einfach die besten!",
|
||||
"4": "Ich muss dein Potenzial als Trainer und die Stärke der Pokémon sehen, die mit dir kämpfen!"
|
||||
"4": "Tag für Tag grabe ich hier nach Fossilien.\n$Die viele Arbeit hat meine Pokémon felsenfest gemacht\nund das wirst du jetzt im Kampf zu spüren bekommen!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "W-was? Das kann nicht sein! Meine total tranierten Pokémon!",
|
||||
"2": "…Wir haben die Kontrolle verloren. Beim nächsten Mal fordere ich dich\n$zu einem Fossilien-Ausgrabungswettbewerb heraus.",
|
||||
"3": "Mit deinem Können ist es nur natürlich, dass du gewinnst.",
|
||||
"4": "W-was?! Das kann nicht sein! Selbst das war nicht genug?",
|
||||
"5": "Ich habe es vermasselt."
|
||||
"4": "W-was?! Das kann nicht sein! Selbst das war nicht genug?"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Siehst du? Ich bin stolz auf meinen steinigen Kampfstil!",
|
||||
"2": "Danke! Der Kampf hat mir Vertrauen gegeben, dass ich vielleicht meinen Vater besiegen kann!",
|
||||
"3": "Ich fühle mich, als hätte ich gerade einen wirklich hartnäckigen Felsen durchbrochen!"
|
||||
"3": "Na, was sagst du jetzt? Meine felsenfesten Pokémon waren hart genug für dich, was?",
|
||||
"4": "Ich wusste, dass ich gewinnen würde!"
|
||||
}
|
||||
},
|
||||
"morty": {
|
||||
|
@ -61,5 +61,6 @@
|
||||
"suppressAbilities": "Die Fähigkeit von {{pokemonName}} wirkt nicht mehr!",
|
||||
"revivalBlessing": "{{pokemonName}} ist wieder fit und kampfbereit!",
|
||||
"swapArenaTags": "{{pokemonName}} hat die Effekte, die auf den beiden Seiten des Kampffeldes wirken, miteinander getauscht!",
|
||||
"exposedMove": "{{pokemonName}} erkennt {{targetPokemonName}}!"
|
||||
"exposedMove": "{{pokemonName}} erkennt {{targetPokemonName}}!",
|
||||
"safeguard": "{{targetName}} wird durch Bodyguard geschützt!"
|
||||
}
|
@ -12,6 +12,7 @@
|
||||
"blockItemTheft": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents item theft!",
|
||||
"typeImmunityHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!",
|
||||
"nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}} avoided damage\nwith {{abilityName}}!",
|
||||
"fullHpResistType": "{{pokemonNameWithAffix}} made its shell gleam!\nIt's distorting type matchups!",
|
||||
"moveImmunity": "It doesn't affect {{pokemonNameWithAffix}}!",
|
||||
"reverseDrain": "{{pokemonNameWithAffix}} sucked up the liquid ooze!",
|
||||
"postDefendTypeChange": "{{pokemonNameWithAffix}}'s {{abilityName}}\nmade it the {{typeName}} type!",
|
||||
|
@ -10,19 +10,19 @@
|
||||
},
|
||||
"10K_MONEY": {
|
||||
"name": "Money Haver",
|
||||
"name_female": null
|
||||
"name_female": "Money Haver"
|
||||
},
|
||||
"100K_MONEY": {
|
||||
"name": "Rich",
|
||||
"name_female": null
|
||||
"name_female": "Rich"
|
||||
},
|
||||
"1M_MONEY": {
|
||||
"name": "Millionaire",
|
||||
"name_female": null
|
||||
"name_female": "Millionaire"
|
||||
},
|
||||
"10M_MONEY": {
|
||||
"name": "One Percenter",
|
||||
"name_female": null
|
||||
"name_female": "One Percenter"
|
||||
},
|
||||
"DamageAchv": {
|
||||
"description": "Inflict {{damageAmount}} damage in one hit"
|
||||
@ -32,11 +32,11 @@
|
||||
},
|
||||
"1000_DMG": {
|
||||
"name": "Harder Hitter",
|
||||
"name_female": null
|
||||
"name_female": "Harder Hitter"
|
||||
},
|
||||
"2500_DMG": {
|
||||
"name": "That's a Lotta Damage!",
|
||||
"name_female": null
|
||||
"name_female": "That's a Lotta Damage!"
|
||||
},
|
||||
"10000_DMG": {
|
||||
"name": "One Punch Man",
|
||||
@ -47,19 +47,19 @@
|
||||
},
|
||||
"250_HEAL": {
|
||||
"name": "Novice Healer",
|
||||
"name_female": null
|
||||
"name_female": "Novice Healer"
|
||||
},
|
||||
"1000_HEAL": {
|
||||
"name": "Big Healer",
|
||||
"name_female": null
|
||||
"name_female": "Big Healer"
|
||||
},
|
||||
"2500_HEAL": {
|
||||
"name": "Cleric",
|
||||
"name_female": null
|
||||
"name_female": "Cleric"
|
||||
},
|
||||
"10000_HEAL": {
|
||||
"name": "Recovery Master",
|
||||
"name_female": null
|
||||
"name_female": "Recovery Master"
|
||||
},
|
||||
"LevelAchv": {
|
||||
"description": "Level up a Pokémon to Lv{{level}}"
|
||||
@ -69,7 +69,7 @@
|
||||
},
|
||||
"LV_250": {
|
||||
"name": "Elite",
|
||||
"name_female": null
|
||||
"name_female": "Elite"
|
||||
},
|
||||
"LV_1000": {
|
||||
"name": "To Go Even Further Beyond"
|
||||
@ -79,23 +79,23 @@
|
||||
},
|
||||
"10_RIBBONS": {
|
||||
"name": "Pokémon League Champion",
|
||||
"name_female": null
|
||||
"name_female": "Pokémon League Champion"
|
||||
},
|
||||
"25_RIBBONS": {
|
||||
"name": "Great League Champion",
|
||||
"name_female": null
|
||||
"name_female": "Great League Champion"
|
||||
},
|
||||
"50_RIBBONS": {
|
||||
"name": "Ultra League Champion",
|
||||
"name_female": null
|
||||
"name_female": "Ultra League Champion"
|
||||
},
|
||||
"75_RIBBONS": {
|
||||
"name": "Rogue League Champion",
|
||||
"name_female": null
|
||||
"name_female": "Rogue League Champion"
|
||||
},
|
||||
"100_RIBBONS": {
|
||||
"name": "Master League Champion",
|
||||
"name_female": null
|
||||
"name_female": "Master League Champion"
|
||||
},
|
||||
"TRANSFER_MAX_BATTLE_STAT": {
|
||||
"name": "Teamwork",
|
||||
@ -147,7 +147,7 @@
|
||||
},
|
||||
"SHINY_PARTY": {
|
||||
"name": "That's Dedication",
|
||||
"name_female": null,
|
||||
"name_female": "That's Dedication",
|
||||
"description": "Have a full party of shiny Pokémon"
|
||||
},
|
||||
"HATCH_MYTHICAL": {
|
||||
@ -176,7 +176,7 @@
|
||||
},
|
||||
"CLASSIC_VICTORY": {
|
||||
"name": "Undefeated",
|
||||
"name_female": null,
|
||||
"name_female": "Undefeated",
|
||||
"description": "Beat the game in classic mode"
|
||||
},
|
||||
"UNEVOLVED_CLASSIC_VICTORY": {
|
||||
|
@ -1,6 +1,7 @@
|
||||
{
|
||||
"title": "Challenge Modifiers",
|
||||
"illegalEvolution": "{{pokemon}} changed into an ineligble pokémon\nfor this challenge!",
|
||||
"noneSelected": "None Selected",
|
||||
"singleGeneration": {
|
||||
"name": "Mono Gen",
|
||||
"desc": "You can only use Pokémon from Generation {{gen}}.",
|
||||
|
@ -58,7 +58,7 @@
|
||||
"iris_alder_double": {
|
||||
"encounter": {
|
||||
"1": "Iris: Welcome Challenger! I am THE Unova Champion!\n$Alder: Iris, aren't you a bit too excited?",
|
||||
"1_female": null
|
||||
"1_female": "Iris: Welcome Challenger! I am THE Unova Champion!\n$Alder: Iris, aren't you a bit too excited?"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Iris: A loss like this is not easy to take...\n$Alder: But we will only get stronger with every loss!"
|
||||
@ -75,7 +75,7 @@
|
||||
"marnie_piers_double": {
|
||||
"encounter": {
|
||||
"1": "Piers: Ready for a concert?\n$Marnie: Brother... They are here to fight, not to sing...",
|
||||
"1_female": null
|
||||
"1_female": "Piers: Ready for a concert?\n$Marnie: Brother... They are here to fight, not to sing..."
|
||||
},
|
||||
"victory": {
|
||||
"1": "Piers: Now that was a great concert!\n$Marnie: Brother..."
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"encounter": "It appears the time has finally come once again.\nYou know why you have come here, do you not?\n$You were drawn here, because you have been here before.\nCountless times.\n$Though, perhaps it can be counted.\nTo be precise, this is in fact your {{cycleCount}} cycle.\n$Each cycle your mind reverts to its former state.\nEven so, somehow, remnants of your former selves remain.\n$Until now you have yet to succeed, but I sense a different presence in you this time.\n\n$You are the only one here, though it is as if there is… another.\n$Will you finally prove a formidable challenge to me?\nThe challenge I have longed after for millennia?\n$We begin.",
|
||||
"encounter_female": null,
|
||||
"encounter_female": "It appears the time has finally come once again.\nYou know why you have come here, do you not?\n$You were drawn here, because you have been here before.\nCountless times.\n$Though, perhaps it can be counted.\nTo be precise, this is in fact your {{cycleCount}} cycle.\n$Each cycle your mind reverts to its former state.\nEven so, somehow, remnants of your former selves remain.\n$Until now you have yet to succeed, but I sense a different presence in you this time.\n\n$You are the only one here, though it is as if there is… another.\n$Will you finally prove a formidable challenge to me?\nThe challenge I have longed after for millennia?\n$We begin.",
|
||||
"firstStageWin": "I see. The presence I felt was indeed real.\nIt appears I no longer need to hold back.\n$Do not disappoint me.",
|
||||
"secondStageWin": "…Magnificent.",
|
||||
"key_ordinal_one": "st",
|
||||
|
@ -3,31 +3,31 @@
|
||||
"encounter": {
|
||||
"1": "Hey, wanna battle?",
|
||||
"2": "Are you a new trainer too?",
|
||||
"2_female": null,
|
||||
"2_female": "Are you a new trainer too?",
|
||||
"3": "Hey, I haven't seen you before. Let's battle!",
|
||||
"4": "I just lost, so I'm trying to find more Pokémon.\nWait! You look weak! Come on, let's battle!",
|
||||
"4_female": null,
|
||||
"4_female": "I just lost, so I'm trying to find more Pokémon.\nWait! You look weak! Come on, let's battle!",
|
||||
"5": "Have we met or not? I don't really remember. Well, I guess it's nice to meet you anyway!",
|
||||
"6": "All right! Let's go!",
|
||||
"7": "All right! Here I come! I'll show you my power!",
|
||||
"8": "Haw haw haw... I'll show you how hawesome my Pokémon are!",
|
||||
"9": "No need to waste time saying hello. Bring it on whenever you're ready!",
|
||||
"9_female": null,
|
||||
"9_female": "No need to waste time saying hello. Bring it on whenever you're ready!",
|
||||
"10": "Don't let your guard down, or you may be crying when a kid beats you.",
|
||||
"11": "I've raised my Pokémon with great care. You're not allowed to hurt them!",
|
||||
"12": "Glad you made it! It won't be an easy job from here.",
|
||||
"12_female": null,
|
||||
"12_female": "Glad you made it! It won't be an easy job from here.",
|
||||
"13": "The battles continue forever! Welcome to the world with no end!",
|
||||
"13_female": null
|
||||
"13_female": "The battles continue forever! Welcome to the world with no end!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Wow! You're strong!",
|
||||
"1_female": null,
|
||||
"1_female": "Wow! You're strong!",
|
||||
"2": "I didn't stand a chance, huh?",
|
||||
"3": "I'll find you again when I'm older and beat you!",
|
||||
"4": "Ugh. I don't have any more Pokémon.",
|
||||
"5": "No way… NO WAY! How could I lose again…",
|
||||
"5_female": null,
|
||||
"5_female": "No way… NO WAY! How could I lose again…",
|
||||
"6": "No! I lost!",
|
||||
"7": "Whoa! You are incredible! I'm amazed and surprised!",
|
||||
"8": "Could it be… How… My Pokémon and I are the strongest, though…",
|
||||
@ -42,12 +42,12 @@
|
||||
"encounter": {
|
||||
"1": "Let's have a battle, shall we?",
|
||||
"2": "You look like a new trainer. Let's have a battle!",
|
||||
"2_female": null,
|
||||
"2_female": "You look like a new trainer. Let's have a battle!",
|
||||
"3": "I don't recognize you. How about a battle?",
|
||||
"4": "Let's have a fun Pokémon battle!",
|
||||
"5": "I'll show you the ropes of how to really use Pokémon!",
|
||||
"6": "A serious battle starts from a serious beginning! Are you sure you're ready?",
|
||||
"6_female": null,
|
||||
"6_female": "A serious battle starts from a serious beginning! Are you sure you're ready?",
|
||||
"7": "You're only young once. And you only get one shot at a given battle. Soon, you'll be nothing but a memory.",
|
||||
"8": "You'd better go easy on me, OK? Though I'll be seriously fighting!",
|
||||
"9": "School is boring. I've got nothing to do. Yawn. I'm only battling to kill the time."
|
||||
@ -55,15 +55,15 @@
|
||||
"victory": {
|
||||
"1": "That was impressive! I've got a lot to learn.",
|
||||
"2": "I didn't think you'd beat me that bad…",
|
||||
"2_female": null,
|
||||
"2_female": "I didn't think you'd beat me that bad…",
|
||||
"3": "I hope we get to have a rematch some day.",
|
||||
"4": "That was pretty amazingly fun! You've totally exhausted me…",
|
||||
"5": "You actually taught me a lesson! You're pretty amazing!",
|
||||
"6": "Seriously, I lost. That is, like, seriously depressing, but you were seriously cool.",
|
||||
"6_female": null,
|
||||
"6_female": "Seriously, I lost. That is, like, seriously depressing, but you were seriously cool.",
|
||||
"7": "I don't need memories like this. Deleting memory…",
|
||||
"8": "Hey! I told you to go easy on me! Still, you're pretty cool when you're serious.",
|
||||
"8_female": null,
|
||||
"8_female": "Hey! I told you to go easy on me! Still, you're pretty cool when you're serious.",
|
||||
"9": "I'm actually getting tired of battling… There's gotta be something new to do…"
|
||||
}
|
||||
},
|
||||
@ -154,7 +154,7 @@
|
||||
"ace_trainer": {
|
||||
"encounter": {
|
||||
"1": "You seem quite confident.",
|
||||
"1_female": null,
|
||||
"1_female": "You seem quite confident.",
|
||||
"2": "Your Pokémon… Show them to me…",
|
||||
"3": "Because I'm an Ace Trainer, people think I'm strong.",
|
||||
"4": "Are you aware of what it takes to be an Ace Trainer?"
|
||||
@ -163,9 +163,9 @@
|
||||
"1": "Yes… You have good Pokémon…",
|
||||
"2": "What?! But I'm a battling genius!",
|
||||
"3": "Of course, you are the main character!",
|
||||
"3_female": null,
|
||||
"3_female": "Of course, you are the main character!",
|
||||
"4": "OK! OK! You could be an Ace Trainer!",
|
||||
"4_female": null
|
||||
"4_female": "OK! OK! You could be an Ace Trainer!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "I am devoting my body and soul to Pokémon battles!",
|
||||
@ -187,7 +187,7 @@
|
||||
"1": "Get ready, because when we team up, it's double the trouble!",
|
||||
"2": "Two hearts, one strategy – let's see if you can keep up with our twin power!",
|
||||
"3": "Hope you're ready for double trouble, because we're about to bring the heat!",
|
||||
"3_female": null
|
||||
"3_female": "Hope you're ready for double trouble, because we're about to bring the heat!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "We may have lost this round, but our bond remains unbreakable!",
|
||||
@ -216,7 +216,7 @@
|
||||
"encounter": {
|
||||
"1": "I praise your courage in challenging me! For I am the one with the strongest kick!",
|
||||
"2": "Oh, I see. Would you like to be cut to pieces? Or do you prefer the role of punching bag?",
|
||||
"2_female": null
|
||||
"2_female": "Oh, I see. Would you like to be cut to pieces? Or do you prefer the role of punching bag?"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Oh. The Pokémon did the fighting. My strong kick didn't help a bit.",
|
||||
@ -328,7 +328,7 @@
|
||||
"defeat": {
|
||||
"1": "New age simply refers to twentieth century classical composers, right?",
|
||||
"2": "Don't get hung up on sadness or frustration. You can use your grudges to motivate yourself.",
|
||||
"2_female": null
|
||||
"2_female": "Don't get hung up on sadness or frustration. You can use your grudges to motivate yourself."
|
||||
}
|
||||
},
|
||||
"psychic": {
|
||||
@ -360,7 +360,7 @@
|
||||
"baker": {
|
||||
"encounter": {
|
||||
"1": "Hope you're ready to taste defeat!",
|
||||
"1_female": null
|
||||
"1_female": "Hope you're ready to taste defeat!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "I'll bake a comeback."
|
||||
@ -391,7 +391,7 @@
|
||||
"1": "Matey, you're walking the plank if you lose!",
|
||||
"2": "Come on then! My sailor's pride is at stake!",
|
||||
"3": "Ahoy there! Are you seasick?",
|
||||
"3_female": null
|
||||
"3_female": "Ahoy there! Are you seasick?"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Argh! Beaten by a kid!",
|
||||
@ -419,7 +419,7 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "Tch, you really are strong. It's too bad.\n$If you were to join Team Rocket, you could become an Executive.",
|
||||
"1_female": null,
|
||||
"1_female": "Tch, you really are strong. It's too bad.\n$If you were to join Team Rocket, you could become an Executive.",
|
||||
"2": "I... I'm shattered...",
|
||||
"3": "Aaaieeeee! This can't be happening! I fought hard, but I still lost…"
|
||||
}
|
||||
@ -458,7 +458,7 @@
|
||||
"1": "Hehehe! You might have beaten me, but you don't stand a chance against the boss!\n$If you get lost now, you won't have to face a sound whipping!",
|
||||
"2": "Hehehe... So, I lost, too...",
|
||||
"3": "Ahya! How could this be? For an Admin like me to lose to some random trainer...",
|
||||
"3_female": null
|
||||
"3_female": "Ahya! How could this be? For an Admin like me to lose to some random trainer..."
|
||||
}
|
||||
},
|
||||
"courtney": {
|
||||
@ -478,13 +478,13 @@
|
||||
"1": "Ahahahaha! You're going to meddle in Team Aqua's affairs?\n$You're either absolutely fearless, simply ignorant, or both!\n$You're so cute, you're disgusting! I'll put you down",
|
||||
"2": "What's this? Who's this spoiled brat?",
|
||||
"3": "Cool your jets. Be patient. I'll crush you shortly.",
|
||||
"3_female": null
|
||||
"3_female": "Cool your jets. Be patient. I'll crush you shortly."
|
||||
},
|
||||
"victory": {
|
||||
"1": "Ahahahaha! We got meddled with unexpectedly! We're out of options.\n$We'll have to pull out. But this isn't the last you'll see of Team Aqua!\n$We have other plans! Don't you forget it!",
|
||||
"2": "Ahhh?! Did I go too easy on you?!",
|
||||
"3": "Uh. Are you telling me you've upped your game even more during the fight?\n$You're a brat with a bright future… My Pokémon and I don't have any strength left to fight…\n$Go on… Go and be destroyed by Archie.",
|
||||
"3_female": null
|
||||
"3_female": "Uh. Are you telling me you've upped your game even more during the fight?\n$You're a brat with a bright future… My Pokémon and I don't have any strength left to fight…\n$Go on… Go and be destroyed by Archie."
|
||||
}
|
||||
},
|
||||
"matt": {
|
||||
@ -497,7 +497,7 @@
|
||||
"1": "Muwuhahaha! That battle was fun even though I lost!",
|
||||
"2": "I can feel it! I can feel it, all right! The strength coming offa you!\n$More! I still want more! But looks like we're outta time...",
|
||||
"3": "Oho! That's a loss I can be proud of!",
|
||||
"3_female": null
|
||||
"3_female": "Oho! That's a loss I can be proud of!"
|
||||
}
|
||||
},
|
||||
"mars": {
|
||||
@ -505,7 +505,7 @@
|
||||
"1": "I'm Mars, one of Team Galactic's top Commanders.",
|
||||
"2": "Team Galactic's vision for the future is unwavering. Opposition will be crushed without mercy!",
|
||||
"3": "Feeling nervous? You should be!",
|
||||
"3_female": null
|
||||
"3_female": "Feeling nervous? You should be!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "This can't be happening! How did I lose?!",
|
||||
@ -540,25 +540,25 @@
|
||||
"zinzolin": {
|
||||
"encounter": {
|
||||
"1": "You could become a threat to Team Plasma, so we will eliminate you here and now!",
|
||||
"1_female": null,
|
||||
"1_female": "You could become a threat to Team Plasma, so we will eliminate you here and now!",
|
||||
"2": "You don't have the sense to know when to quit, it seems. It's an act of mercy on my part to bring an end to this now!",
|
||||
"3": "You're an impressive Trainer to have made it this far. But it ends here.",
|
||||
"3_female": null
|
||||
"3_female": "You're an impressive Trainer to have made it this far. But it ends here."
|
||||
},
|
||||
"victory": {
|
||||
"1": "Ghetsis... I have failed you...",
|
||||
"2": "It's bitter cold. I'm shivering. I'm suffering. Yet, we will stand victorious.",
|
||||
"3": "Hmph. You're a smarter Trainer than I expected, but not smart enough.",
|
||||
"3_female": null
|
||||
"3_female": "Hmph. You're a smarter Trainer than I expected, but not smart enough."
|
||||
}
|
||||
},
|
||||
"rood": {
|
||||
"encounter": {
|
||||
"1": "You are a threat to Team Plasma. We cannot let you walk away from here and now!",
|
||||
"1_female": null,
|
||||
"1_female": "You are a threat to Team Plasma. We cannot let you walk away from here and now!",
|
||||
"2": "It seems you don't know when to give up. I'll make sure no one interferes with our plans!",
|
||||
"3": "You are a remarkable Trainer to have made it this far. But this is where it ends.",
|
||||
"3_female": null
|
||||
"3_female": "You are a remarkable Trainer to have made it this far. But this is where it ends."
|
||||
},
|
||||
"victory": {
|
||||
"1": "Ghetsis... I have failed my mission...",
|
||||
@ -569,15 +569,15 @@
|
||||
"xerosic": {
|
||||
"encounter": {
|
||||
"1": "Ah ha ha! It would be my pleasure. Come on, little Trainer! Let's see what you've got!",
|
||||
"1_female": null,
|
||||
"1_female": "Ah ha ha! It would be my pleasure. Come on, little Trainer! Let's see what you've got!",
|
||||
"2": "Hmm... You're more powerful than you look. I wonder how much energy there is inside you.",
|
||||
"2_female": null,
|
||||
"2_female": "Hmm... You're more powerful than you look. I wonder how much energy there is inside you.",
|
||||
"3": "I've been waiting for you! I need to do a little research on you! Come, let us begin!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Ah, you're quite strong. Oh yes—very strong, indeed.",
|
||||
"2": "Ding-ding-ding! You did it! To the victor go the spoils!",
|
||||
"2_female": null,
|
||||
"2_female": "Ding-ding-ding! You did it! To the victor go the spoils!",
|
||||
"3": "Wonderful! Amazing! You have tremendous skill and bravery!"
|
||||
}
|
||||
},
|
||||
@ -585,7 +585,7 @@
|
||||
"encounter": {
|
||||
"1": "I am Bryony, and it would be my pleasure to battle you. Show me what you've got.",
|
||||
"2": "Impressive... You're more powerful than you appear. Let's see the true extent of your energy.",
|
||||
"2_female": null,
|
||||
"2_female": "Impressive... You're more powerful than you appear. Let's see the true extent of your energy.",
|
||||
"3": "I've anticipated your arrival. It's time for a little test. Shall we begin?"
|
||||
},
|
||||
"victory": {
|
||||
@ -598,11 +598,11 @@
|
||||
"encounter": {
|
||||
"1": "Prepare for trouble!",
|
||||
"2": "We're pulling a big job here! Get lost, kid!",
|
||||
"2_female": null,
|
||||
"2_female": "We're pulling a big job here! Get lost, kid!",
|
||||
"3": "Hand over your Pokémon, or face the wrath of Team Rocket!",
|
||||
"4": "You're about to experience the true terror of Team Rocket!",
|
||||
"5": "Hey, kid! Me am a Team Rocket member kind of guy!",
|
||||
"5_female": null
|
||||
"5_female": "Hey, kid! Me am a Team Rocket member kind of guy!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Team Rocket blasting off again!",
|
||||
@ -624,7 +624,7 @@
|
||||
"1": "Huh? I lost?!",
|
||||
"2": "I can't believe I lost! I even skipped lunch for this",
|
||||
"3": "No way! You're just a kid!",
|
||||
"3_female": null,
|
||||
"3_female": "No way! You're just a kid!",
|
||||
"4": "Urrrgh... I should've ducked into our hideout right away...",
|
||||
"5": "You beat me... Do you think the boss will dock my pay for this?"
|
||||
}
|
||||
@ -652,7 +652,7 @@
|
||||
"3": "In the name of Team Galactic, I'll eliminate anyone who stands in our way!",
|
||||
"4": "Get ready to lose!",
|
||||
"5": "Hope you're ready for a cosmic beatdown!",
|
||||
"5_female": null
|
||||
"5_female": "Hope you're ready for a cosmic beatdown!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Shut down...",
|
||||
@ -682,7 +682,7 @@
|
||||
"encounter": {
|
||||
"1": "Your Pokémon are no match for the elegance of Team Flare.",
|
||||
"2": "Hope you brought your sunglasses, because things are about to get bright!",
|
||||
"2_female": null,
|
||||
"2_female": "Hope you brought your sunglasses, because things are about to get bright!",
|
||||
"3": "Team Flare will cleanse the world of imperfection!",
|
||||
"4": "Prepare to face the brilliance of Team Flare!",
|
||||
"5": "Fashion is most important to us!"
|
||||
@ -742,7 +742,7 @@
|
||||
"plumeria": {
|
||||
"encounter": {
|
||||
"1": " ...Hmph. You don't look like anything special to me.",
|
||||
"2": "It takes these dumb Grunts way too long to deal with you kids..",
|
||||
"2": "It takes these dumb Grunts way too long to deal with you kids...",
|
||||
"3": "Mess with anyone in Team Skull, and I'll show you how serious I can get."
|
||||
},
|
||||
"victory": {
|
||||
@ -784,7 +784,7 @@
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Mark my words. Not being able to measure your own strength shows that you are still a child.",
|
||||
"1_female": null
|
||||
"1_female": "Mark my words. Not being able to measure your own strength shows that you are still a child."
|
||||
}
|
||||
},
|
||||
"rocket_boss_giovanni_2": {
|
||||
@ -845,7 +845,7 @@
|
||||
"galactic_boss_cyrus_1": {
|
||||
"encounter": {
|
||||
"1": "You were compelled to come here by such vacuous sentimentality.\n$I will make you regret paying heed to your heart!",
|
||||
"1_female": null
|
||||
"1_female": "You were compelled to come here by such vacuous sentimentality.\n$I will make you regret paying heed to your heart!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Interesting. And quite curious."
|
||||
@ -995,7 +995,7 @@
|
||||
"misty": {
|
||||
"encounter": {
|
||||
"1": "My policy is an all out offensive with Water-type Pokémon!",
|
||||
"1_female": null,
|
||||
"1_female": "My policy is an all out offensive with Water-type Pokémon!",
|
||||
"2": "Hiya, I'll show you the strength of my aquatic Pokémon!",
|
||||
"3": "My dream was to go on a journey and battle powerful trainers…\nWill you be a sufficient challenge?"
|
||||
},
|
||||
@ -1013,14 +1013,14 @@
|
||||
"lt_surge": {
|
||||
"encounter": {
|
||||
"1": "My Electric Pokémon saved me during the war! I'll show you how!",
|
||||
"1_female": null,
|
||||
"1_female": "My Electric Pokémon saved me during the war! I'll show you how!",
|
||||
"2": "Ten-hut! I'll shock you into surrender!",
|
||||
"3": "I'll zap you just like I do to all my enemies in battle!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Whoa! Your team's the real deal, kid!",
|
||||
"2": "Aaargh, you're strong! Even my electric tricks lost against you.",
|
||||
"2_female": null,
|
||||
"2_female": "Aaargh, you're strong! Even my electric tricks lost against you.",
|
||||
"3": "That was an absolutely shocking loss!"
|
||||
},
|
||||
"defeat": {
|
||||
@ -1045,7 +1045,7 @@
|
||||
"defeat": {
|
||||
"1": "I was afraid I would doze off…",
|
||||
"2": "Oh my, it seems my Grass Pokémon overwhelmed you.",
|
||||
"2_female": null,
|
||||
"2_female": "Oh my, it seems my Grass Pokémon overwhelmed you.",
|
||||
"3": "That battle was such a soothing experience.",
|
||||
"4": "Oh… Is that all?"
|
||||
}
|
||||
@ -1106,7 +1106,7 @@
|
||||
"1": "I, the leader of Team Rocket, will make you feel a world of pain!",
|
||||
"2": "My training here will be vital before I am to face my old associates again.",
|
||||
"3": "I do not think you are prepared for the level of failure you are about to experience!",
|
||||
"3_female": null
|
||||
"3_female": "I do not think you are prepared for the level of failure you are about to experience!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "WHAT! Me, lose?! There is nothing I wish to say to you!",
|
||||
@ -1139,7 +1139,7 @@
|
||||
"brawly": {
|
||||
"encounter": {
|
||||
"1": "Oh man, a challenger!\nLet's see what you can do!",
|
||||
"1_female": null,
|
||||
"1_female": "Oh man, a challenger!\nLet's see what you can do!",
|
||||
"2": "You seem like a big splash.\nLet's battle!",
|
||||
"3": "Time to create a storm!\nLet's go!"
|
||||
},
|
||||
@ -1167,7 +1167,7 @@
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Recharge your batteries and challenge me again sometime!\nWahahahaha!",
|
||||
"1_female": null,
|
||||
"1_female": "Recharge your batteries and challenge me again sometime!\nWahahahaha!",
|
||||
"2": "I hope you found our battle electrifying!\nWahahahaha!",
|
||||
"3": "Aren't you shocked I won?\nWahahahaha!"
|
||||
}
|
||||
@ -1214,7 +1214,7 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "You're the first Trainer I've seen with more grace than I.\nExcellently played.",
|
||||
"1_female": null,
|
||||
"1_female": "You're the first Trainer I've seen with more grace than I.\nExcellently played.",
|
||||
"2": "Oh, my Flying Pokémon have plummeted!\nVery well.",
|
||||
"3": "Though I may have fallen, my Pokémon will continue to fly!"
|
||||
},
|
||||
@ -1227,7 +1227,7 @@
|
||||
"tate": {
|
||||
"encounter": {
|
||||
"1": "Hehehe…\nWere you surprised to see me without my sister?",
|
||||
"1_female": null,
|
||||
"1_female": "Hehehe…\nWere you surprised to see me without my sister?",
|
||||
"2": "I can see what you're thinking…\nYou want to battle!",
|
||||
"3": "How can you defeat someone…\nWho knows your every move?"
|
||||
},
|
||||
@ -1245,7 +1245,7 @@
|
||||
"liza": {
|
||||
"encounter": {
|
||||
"1": "Fufufu…\nWere you surprised to see me without my brother?",
|
||||
"1_female": null,
|
||||
"1_female": "Fufufu…\nWere you surprised to see me without my brother?",
|
||||
"2": "I can determine what you desire…\nYou want to battle, don't you?",
|
||||
"3": "How can you defeat someone…\nWho's one with their Pokémon?"
|
||||
},
|
||||
@ -1317,10 +1317,10 @@
|
||||
"nessa": {
|
||||
"encounter": {
|
||||
"1": "No matter what kind of plan your refined mind may be plotting, my partner and I will be sure to sink it.",
|
||||
"1_female": null,
|
||||
"1_female": "No matter what kind of plan your refined mind may be plotting, my partner and I will be sure to sink it.",
|
||||
"2": "I'm not here to chat. I'm here to win!",
|
||||
"3": "This is a little gift from my Pokémon… I hope you can take it!",
|
||||
"3_female": null
|
||||
"3_female": "This is a little gift from my Pokémon… I hope you can take it!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "You and your Pokémon are just too much…",
|
||||
@ -1341,7 +1341,7 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "You… You're pretty good, huh?",
|
||||
"1_female": null,
|
||||
"1_female": "You… You're pretty good, huh?",
|
||||
"2": "If you find Gordie around, be sure to give him a right trashing, would you?",
|
||||
"3": "I think you took breaking the ice a little too literally…"
|
||||
},
|
||||
@ -1355,12 +1355,12 @@
|
||||
"encounter": {
|
||||
"1": "You look strong! Shoots! Let's start!",
|
||||
"2": "I'm strong like the ocean's wide. You're gonna get swept away, fo' sho'.",
|
||||
"2_female": null,
|
||||
"2_female": "I'm strong like the ocean's wide. You're gonna get swept away, fo' sho'.",
|
||||
"3": "Oh ho, so I'm facing you! That's off the wall."
|
||||
},
|
||||
"victory": {
|
||||
"1": "You totally rocked that! You're raising some wicked Pokémon. You got this Trainer thing down!",
|
||||
"1_female": null,
|
||||
"1_female": "You totally rocked that! You're raising some wicked Pokémon. You got this Trainer thing down!",
|
||||
"2": "You don't just look strong, you're strong fo' reals! Eh, I was swept away, too!",
|
||||
"3": "You're strong as a gnarly wave!"
|
||||
},
|
||||
@ -1373,7 +1373,7 @@
|
||||
"shauntal": {
|
||||
"encounter": {
|
||||
"1": "Excuse me. You're a challenger, right?\nI'm the Elite Four's Ghost-type Pokémon user, Shauntal, and I shall be your opponent.",
|
||||
"1_female": null,
|
||||
"1_female": "Excuse me. You're a challenger, right?\nI'm the Elite Four's Ghost-type Pokémon user, Shauntal, and I shall be your opponent.",
|
||||
"2": "I absolutely love writing about Trainers who come here and the Pokémon they train.\nCould I use you and your Pokémon as a subject?",
|
||||
"3": "Every person who works with Pokémon has a story to tell.\nWhat story is about to be told?"
|
||||
},
|
||||
@ -1391,7 +1391,7 @@
|
||||
"marshal": {
|
||||
"encounter": {
|
||||
"1": "My mentor, Alder, sees your potential as a Trainer and is taking an interest in you.\nIt is my intention to test you--to take you to the limits of your strength. Kiai!",
|
||||
"1_female": null,
|
||||
"1_female": "My mentor, Alder, sees your potential as a Trainer and is taking an interest in you.\nIt is my intention to test you--to take you to the limits of your strength. Kiai!",
|
||||
"2": "Victory, decisive victory, is my intention! Challenger, here I come!",
|
||||
"3": "In myself, I seek to develop the strength of a fighter and shatter any weakness in myself!\nPrevailing with the force of my convictions!"
|
||||
},
|
||||
@ -1411,7 +1411,7 @@
|
||||
"1": "You remind me of an old friend. That makes me excited about this Pokémon battle!",
|
||||
"2": "Pokémon battles have no meaning if you don't think why you battle.\n$Or better said, it makes battling together with Pokémon meaningless.",
|
||||
"3": "My name's Cheren! I'm a Gym Leader and a teacher! Pleasure to meet you.",
|
||||
"3_female": null
|
||||
"3_female": "My name's Cheren! I'm a Gym Leader and a teacher! Pleasure to meet you."
|
||||
},
|
||||
"victory": {
|
||||
"1": "Thank you! I saw what was missing in me.",
|
||||
@ -1427,73 +1427,73 @@
|
||||
"chili": {
|
||||
"encounter": {
|
||||
"1": "Yeeeeooow! Time to play with FIRE!! I'm the strongest of us brothers!",
|
||||
"1_female": null,
|
||||
"1_female": "Yeeeeooow! Time to play with FIRE!! I'm the strongest of us brothers!",
|
||||
"2": "Ta-da! The Fire-type scorcher Chili--that's me--will be your opponent!",
|
||||
"2_female": null,
|
||||
"2_female": "Ta-da! The Fire-type scorcher Chili--that's me--will be your opponent!",
|
||||
"3": "I'm going to show you what me and my blazing Fire types can do!",
|
||||
"3_female": null
|
||||
"3_female": "I'm going to show you what me and my blazing Fire types can do!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "You got me. I am… burned… out…",
|
||||
"1_female": null,
|
||||
"1_female": "You got me. I am… burned… out…",
|
||||
"2": "Whoa ho! You're on fire!",
|
||||
"2_female": null,
|
||||
"2_female": "Whoa ho! You're on fire!",
|
||||
"3": "Augh! You got me!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "I'm on fire! Play with me, and you'll get burned!",
|
||||
"1_female": null,
|
||||
"1_female": "I'm on fire! Play with me, and you'll get burned!",
|
||||
"2": "When you play with fire, you get burned!",
|
||||
"3": "I mean, c'mon, your opponent was me! You didn't have a chance!",
|
||||
"3_female": null
|
||||
"3_female": "I mean, c'mon, your opponent was me! You didn't have a chance!"
|
||||
}
|
||||
},
|
||||
"cilan": {
|
||||
"encounter": {
|
||||
"1": "Nothing personal... No hard feelings... Me and my Grass-type Pokémon will...\n$Um... We're gonna battle come what may.",
|
||||
"1_female": null,
|
||||
"1_female": "Nothing personal... No hard feelings... Me and my Grass-type Pokémon will...\n$Um... We're gonna battle come what may.",
|
||||
"2": "So, um, if you're OK with me, I'll, um, put everything I've got into being, er, you know, your opponent.",
|
||||
"2_female": null,
|
||||
"2_female": "So, um, if you're OK with me, I'll, um, put everything I've got into being, er, you know, your opponent.",
|
||||
"3": "OK… So, um, I'm Cilan, I like Grass-type Pokémon.",
|
||||
"3_female": null
|
||||
"3_female": "OK… So, um, I'm Cilan, I like Grass-type Pokémon."
|
||||
},
|
||||
"victory": {
|
||||
"1": "Er… Is it over now?",
|
||||
"1_female": null,
|
||||
"1_female": "Er… Is it over now?",
|
||||
"2": "…What a surprise. You are very strong, aren't you? \n$I guess my brothers wouldn't have been able to defeat you either…",
|
||||
"2_female": null,
|
||||
"2_female": "…What a surprise. You are very strong, aren't you? \n$I guess my brothers wouldn't have been able to defeat you either…",
|
||||
"3": "…Huh. Looks like my timing was, um, off?"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Huh? Did I win?",
|
||||
"1_female": null,
|
||||
"1_female": "Huh? Did I win?",
|
||||
"2": "I guess… \n$I suppose I won, because I've been competing with my brothers Chili and Cress, and we all were able to get tougher.",
|
||||
"2_female": null,
|
||||
"2_female": "I guess… \n$I suppose I won, because I've been competing with my brothers Chili and Cress, and we all were able to get tougher.",
|
||||
"3": "It…it was quite a thrilling experience…",
|
||||
"3_female": null
|
||||
"3_female": "It…it was quite a thrilling experience…"
|
||||
}
|
||||
},
|
||||
"roark": {
|
||||
"encounter": {
|
||||
"1": "I need to see your potential as a Trainer. And, I'll need to see the toughness of the Pokémon that battle with you!",
|
||||
"1_female": null,
|
||||
"1_female": "I need to see your potential as a Trainer. And, I'll need to see the toughness of the Pokémon that battle with you!",
|
||||
"2": "Here goes! These are my rocking Pokémon, my pride and joy!",
|
||||
"3": "Rock-type Pokémon are simply the best!",
|
||||
"4": "I need to see your potential as a Trainer. And, I'll need to see the toughness of the Pokémon that battle with you!",
|
||||
"4_female": null
|
||||
"4": "Every day, I toughened up my Pokémon by digging up Fossils nonstop.\n$Could I show you how tough I made them in a battle?",
|
||||
"4_female": "Every day, I toughened up my Pokémon by digging up Fossils nonstop.\n$Could I show you how tough I made them in a battle?"
|
||||
},
|
||||
"victory": {
|
||||
"1": "W-what? That can't be! My buffed-up Pokémon!",
|
||||
"2": "…We lost control there. Next time I'd like to challenge you to a Fossil-digging race underground.",
|
||||
"2_female": null,
|
||||
"2_female": "…We lost control there. Next time I'd like to challenge you to a Fossil-digging race underground.",
|
||||
"3": "With skill like yours, it's natural for you to win.",
|
||||
"4": "Wh-what?! It can't be! Even that wasn't enough?",
|
||||
"5": "I blew it."
|
||||
"4": "Wh-what?! It can't be! Even that wasn't enough?"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "See? I'm proud of my rocking battle style!",
|
||||
"2": "Thanks! The battle gave me confidence that I may be able to beat my dad!",
|
||||
"3": "I feel like I just smashed through a really stubborn boulder!"
|
||||
"3": "See? These are my rocking Pokémon, my pride and joy!",
|
||||
"4": "I knew I would win!"
|
||||
}
|
||||
},
|
||||
"morty": {
|
||||
@ -1508,7 +1508,7 @@
|
||||
"victory": {
|
||||
"1": "I'm not good enough yet…",
|
||||
"2": "I see… Your journey has taken you to far-away places and you have witnessed much more than I.\n$I envy you for that…",
|
||||
"2_female": null,
|
||||
"2_female": "I see… Your journey has taken you to far-away places and you have witnessed much more than I.\n$I envy you for that…",
|
||||
"3": "How is this possible…",
|
||||
"4": "I don't think our potentials are so different.\n$But you seem to have something more than that… So be it.",
|
||||
"5": "Guess I need more training.",
|
||||
@ -1568,13 +1568,13 @@
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Heh heh! Don't mind me, just scooping up a W over here. I get it if you're upset, but don't go full Kieran on me, OK?",
|
||||
"1_female": null
|
||||
"1_female": "Heh heh! Don't mind me, just scooping up a W over here. I get it if you're upset, but don't go full Kieran on me, OK?"
|
||||
}
|
||||
},
|
||||
"ramos": {
|
||||
"encounter": {
|
||||
"1": "Did yeh enjoy the garden playground I made with all these sturdy plants o' mine?\n$Their strength is a sign o' my strength as a gardener and a Gym Leader! Yeh sure yer up to facing all that?",
|
||||
"1_female": null
|
||||
"1_female": "Did yeh enjoy the garden playground I made with all these sturdy plants o' mine?\n$Their strength is a sign o' my strength as a gardener and a Gym Leader! Yeh sure yer up to facing all that?"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Yeh believe in yer Pokémon… And they believe in yeh, too… It was a fine battle, sprout."
|
||||
@ -1605,7 +1605,7 @@
|
||||
"victory": {
|
||||
"1": "I must say, I'm warmed up to you! I might even admire you a little.",
|
||||
"2": "Wow! You're great! You've earned my respect! \n$I think your focus and will bowled us over totally. ",
|
||||
"2_female": null
|
||||
"2_female": "Wow! You're great! You've earned my respect! \n$I think your focus and will bowled us over totally. "
|
||||
},
|
||||
"defeat": {
|
||||
"1": "I sensed your will to win, but I don't lose!",
|
||||
@ -1618,7 +1618,7 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "Amazing! You're very good, aren't you?",
|
||||
"1_female": null
|
||||
"1_female": "Amazing! You're very good, aren't you?"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Yes! My Pokémon and I are perfectly good!"
|
||||
@ -1660,7 +1660,7 @@
|
||||
"clay": {
|
||||
"encounter": {
|
||||
"1": "Harrumph! Kept me waitin', didn't ya, kid? All right, time to see what ya can do!",
|
||||
"1_female": null
|
||||
"1_female": "Harrumph! Kept me waitin', didn't ya, kid? All right, time to see what ya can do!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Man oh man… It feels good to go all out and still be defeated!"
|
||||
@ -1675,7 +1675,7 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "Vaultin' Veluza! Yer a lively one, aren't ya! A little TOO lively, if I do say so myself!",
|
||||
"1_female": null
|
||||
"1_female": "Vaultin' Veluza! Yer a lively one, aren't ya! A little TOO lively, if I do say so myself!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "You come back to see me again now, ya hear?"
|
||||
@ -1742,7 +1742,7 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "Bravo. I realize now your authenticity and magnificence as a Pokémon Trainer. \n$I find much joy in having met you and your Pokémon. You have proven yourself worthy.",
|
||||
"1_female": null
|
||||
"1_female": "Bravo. I realize now your authenticity and magnificence as a Pokémon Trainer. \n$I find much joy in having met you and your Pokémon. You have proven yourself worthy."
|
||||
},
|
||||
"defeat": {
|
||||
"1": "A grand illusion!"
|
||||
@ -1751,14 +1751,14 @@
|
||||
"lorelei": {
|
||||
"encounter": {
|
||||
"1": "No one can best me when it comes to icy Pokémon! Freezing moves are powerful!\n$Your Pokémon will be at my mercy when they are frozen solid! Hahaha! Are you ready?",
|
||||
"1_female": null
|
||||
"1_female": "No one can best me when it comes to icy Pokémon! Freezing moves are powerful!\n$Your Pokémon will be at my mercy when they are frozen solid! Hahaha! Are you ready?"
|
||||
},
|
||||
"victory": {
|
||||
"1": "How dare you!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "There's nothing you can do once you're frozen.",
|
||||
"1_female": null
|
||||
"1_female": "There's nothing you can do once you're frozen."
|
||||
}
|
||||
},
|
||||
"will": {
|
||||
@ -1775,11 +1775,11 @@
|
||||
"malva": {
|
||||
"encounter": {
|
||||
"1": "I feel like my heart might just burst into flames. \n$I'm burning up with my hatred for you, runt!",
|
||||
"1_female": null
|
||||
"1_female": "I feel like my heart might just burst into flames. \n$I'm burning up with my hatred for you, runt!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "What news… So a new challenger has defeated Malva!",
|
||||
"1_female": null
|
||||
"1_female": "What news… So a new challenger has defeated Malva!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "I am delighted! Yes, delighted that I could squash you beneath my heel."
|
||||
@ -1802,7 +1802,7 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "I certainly found an interesting Trainer to face!",
|
||||
"1_female": null
|
||||
"1_female": "I certainly found an interesting Trainer to face!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Ahaha. What an interesting battle."
|
||||
@ -1814,11 +1814,11 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "Not bad, kiddo.",
|
||||
"1_female": null
|
||||
"1_female": "Not bad, kiddo."
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Nahahaha! You really are something else, kiddo!",
|
||||
"1_female": null
|
||||
"1_female": "Nahahaha! You really are something else, kiddo!"
|
||||
}
|
||||
},
|
||||
"bruno": {
|
||||
@ -1838,7 +1838,7 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win.",
|
||||
"1_female": null
|
||||
"1_female": "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win."
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Thanks! Thanks to our battle, I was also able to make progress in my research!"
|
||||
@ -1869,11 +1869,11 @@
|
||||
"lenora": {
|
||||
"encounter": {
|
||||
"1": "Well then, challenger, I'm going to research how you battle with the Pokémon you've so lovingly raised!",
|
||||
"1_female": null
|
||||
"1_female": "Well then, challenger, I'm going to research how you battle with the Pokémon you've so lovingly raised!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "My theory about you was correct. You're more than just talented… You're motivated! I salute you!",
|
||||
"1_female": null
|
||||
"1_female": "My theory about you was correct. You're more than just talented… You're motivated! I salute you!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Ah ha ha! If you lose, make sure to analyze why, and use that knowledge in your next battle!"
|
||||
@ -1899,7 +1899,7 @@
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Hey, c'mon! Get serious! You gotta put more out there!",
|
||||
"1_female": null
|
||||
"1_female": "Hey, c'mon! Get serious! You gotta put more out there!"
|
||||
}
|
||||
},
|
||||
"olivia": {
|
||||
@ -1938,7 +1938,7 @@
|
||||
"flint": {
|
||||
"encounter": {
|
||||
"1": "Hope you're warmed up, cause here comes the Big Bang!",
|
||||
"1_female": null
|
||||
"1_female": "Hope you're warmed up, cause here comes the Big Bang!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Incredible! Your moves are so hot, they make mine look lukewarm!"
|
||||
@ -1961,7 +1961,7 @@
|
||||
"caitlin": {
|
||||
"encounter": {
|
||||
"1": "It's me who appeared when the flower opened up. You who have been waiting…\n$You look like a Pokémon Trainer with refined strength and deepened kindness. \n$What I look for in my opponent is superb strength… \n$Please unleash your power to the fullest!",
|
||||
"1_female": null
|
||||
"1_female": "It's me who appeared when the flower opened up. You who have been waiting…\n$You look like a Pokémon Trainer with refined strength and deepened kindness. \n$What I look for in my opponent is superb strength… \n$Please unleash your power to the fullest!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "My Pokémon and I learned so much! I offer you my thanks."
|
||||
@ -1984,15 +1984,15 @@
|
||||
"wikstrom": {
|
||||
"encounter": {
|
||||
"1": "Well met, young challenger! Verily am I the famed blade of hardened steel, Duke Wikstrom! \n$Let the battle begin! En garde!",
|
||||
"1_female": null
|
||||
"1_female": "Well met, young challenger! Verily am I the famed blade of hardened steel, Duke Wikstrom! \n$Let the battle begin! En garde!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Glorious! The trust that you share with your honorable Pokémon surpasses even mine!",
|
||||
"1_female": null
|
||||
"1_female": "Glorious! The trust that you share with your honorable Pokémon surpasses even mine!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "What manner of magic is this? My heart, it doth hammer ceaselessly in my breast! \n$Winning against such a worthy opponent doth give my soul wings--thus do I soar!",
|
||||
"1_female": null
|
||||
"1_female": "What manner of magic is this? My heart, it doth hammer ceaselessly in my breast! \n$Winning against such a worthy opponent doth give my soul wings--thus do I soar!"
|
||||
}
|
||||
},
|
||||
"acerola": {
|
||||
@ -2024,14 +2024,14 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "You got me. You are magnificent!",
|
||||
"1_female": null,
|
||||
"1_female": "You got me. You are magnificent!",
|
||||
"2": "I never expected another trainer to beat me… I'm surprised.",
|
||||
"2_female": null
|
||||
"2_female": "I never expected another trainer to beat me… I'm surprised."
|
||||
},
|
||||
"defeat": {
|
||||
"1": "That was close. Want to try again?",
|
||||
"2": "It's not that you are weak. Don't let it bother you.",
|
||||
"2_female": null
|
||||
"2_female": "It's not that you are weak. Don't let it bother you."
|
||||
}
|
||||
},
|
||||
"karen": {
|
||||
@ -2057,7 +2057,7 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "The power of Grass has wilted… What an incredible Challenger!",
|
||||
"1_female": null
|
||||
"1_female": "The power of Grass has wilted… What an incredible Challenger!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "This'll really leave you in shock and awe."
|
||||
@ -2077,7 +2077,7 @@
|
||||
"drasna": {
|
||||
"encounter": {
|
||||
"1": "You must be a strong Trainer. Yes, quite strong indeed…\n$That's just wonderful news! Facing opponents like you and your team will make my Pokémon grow like weeds!",
|
||||
"1_female": null
|
||||
"1_female": "You must be a strong Trainer. Yes, quite strong indeed…\n$That's just wonderful news! Facing opponents like you and your team will make my Pokémon grow like weeds!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Oh, dear me. That sure was a quick battle… I do hope you'll come back again sometime!"
|
||||
@ -2111,7 +2111,7 @@
|
||||
"blue": {
|
||||
"encounter": {
|
||||
"1": "You must be pretty good to get this far.",
|
||||
"1_female": null
|
||||
"1_female": "You must be pretty good to get this far."
|
||||
},
|
||||
"victory": {
|
||||
"1": "I've only lost to him and now to you… Him? Hee, hee…"
|
||||
@ -2159,7 +2159,7 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "This is the emergence of a new Champion.",
|
||||
"1_female": null
|
||||
"1_female": "This is the emergence of a new Champion."
|
||||
},
|
||||
"defeat": {
|
||||
"1": "I successfully defended my Championship."
|
||||
@ -2248,7 +2248,7 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "Waaah! Waaah! You're so mean!",
|
||||
"1_female": null
|
||||
"1_female": "Waaah! Waaah! You're so mean!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "And that's that!"
|
||||
@ -2257,7 +2257,7 @@
|
||||
"chuck": {
|
||||
"encounter": {
|
||||
"1": "Hah! You want to challenge me? Are you brave or just ignorant?",
|
||||
"1_female": null
|
||||
"1_female": "Hah! You want to challenge me? Are you brave or just ignorant?"
|
||||
},
|
||||
"victory": {
|
||||
"1": "You're strong! Would you please make me your apprentice?"
|
||||
@ -2269,7 +2269,7 @@
|
||||
"katy": {
|
||||
"encounter": {
|
||||
"1": "Don't let your guard down unless you would like to find yourself knocked off your feet!",
|
||||
"1_female": null
|
||||
"1_female": "Don't let your guard down unless you would like to find yourself knocked off your feet!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "All of my sweet little Pokémon dropped like flies!"
|
||||
@ -2303,7 +2303,7 @@
|
||||
"maylene": {
|
||||
"encounter": {
|
||||
"1": "I've come to challenge you now, and I won't hold anything back. \n$Please prepare yourself for battle!",
|
||||
"1_female": null
|
||||
"1_female": "I've come to challenge you now, and I won't hold anything back. \n$Please prepare yourself for battle!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "I admit defeat…"
|
||||
@ -2326,7 +2326,7 @@
|
||||
"byron": {
|
||||
"encounter": {
|
||||
"1": "Trainer! You're young, just like my son, Roark. \n$With more young Trainers taking charge, the future of Pokémon is bright! \n$So, as a wall for young people, I'll take your challenge!",
|
||||
"1_female": null
|
||||
"1_female": "Trainer! You're young, just like my son, Roark. \n$With more young Trainers taking charge, the future of Pokémon is bright! \n$So, as a wall for young people, I'll take your challenge!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Hmm! My sturdy Pokémon--defeated!"
|
||||
@ -2349,7 +2349,7 @@
|
||||
"volkner": {
|
||||
"encounter": {
|
||||
"1": "Since you've come this far, you must be quite strong…\n$I hope you're the Trainer who'll make me remember how fun it is to battle!",
|
||||
"1_female": null
|
||||
"1_female": "Since you've come this far, you must be quite strong…\n$I hope you're the Trainer who'll make me remember how fun it is to battle!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "You've got me beat…\n$Your desire and the noble way your Pokémon battled for you… \n$I even felt thrilled during our match. That was a very good battle."
|
||||
@ -2452,7 +2452,7 @@
|
||||
"valerie": {
|
||||
"encounter": {
|
||||
"1": "Oh, if it isn't a young Trainer… It is lovely to get to meet you like this. \n$Then I suppose you have earned yourself the right to a battle, as a reward for your efforts. \n$The elusive Fairy may appear frail as the breeze and delicate as a bloom, but it is strong.",
|
||||
"1_female": null
|
||||
"1_female": "Oh, if it isn't a young Trainer… It is lovely to get to meet you like this. \n$Then I suppose you have earned yourself the right to a battle, as a reward for your efforts. \n$The elusive Fairy may appear frail as the breeze and delicate as a bloom, but it is strong."
|
||||
},
|
||||
"victory": {
|
||||
"1": "I hope that you will find things worth smiling about tomorrow…"
|
||||
@ -2500,7 +2500,7 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "Your pink is still lacking, but you're an excellent Trainer with excellent Pokémon.",
|
||||
"1_female": null
|
||||
"1_female": "Your pink is still lacking, but you're an excellent Trainer with excellent Pokémon."
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Too bad for you, I guess."
|
||||
@ -2509,7 +2509,7 @@
|
||||
"bede": {
|
||||
"encounter": {
|
||||
"1": "I suppose I should prove beyond doubt just how pathetic you are and how strong I am.",
|
||||
"1_female": null
|
||||
"1_female": "I suppose I should prove beyond doubt just how pathetic you are and how strong I am."
|
||||
},
|
||||
"victory": {
|
||||
"1": "I see… Well, that's fine. I wasn't really trying all that hard anyway."
|
||||
@ -2554,7 +2554,7 @@
|
||||
"brassius": {
|
||||
"encounter": {
|
||||
"1": "I assume you are ready? Let our collaborative work of art begin!",
|
||||
"1_female": null
|
||||
"1_female": "I assume you are ready? Let our collaborative work of art begin!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Ahhh…vant-garde!"
|
||||
@ -2566,11 +2566,11 @@
|
||||
"iono": {
|
||||
"encounter": {
|
||||
"1": "How're ya feelin' about this battle?\n$...\n$Let's get this show on the road! How strong is our challenger? \n$I 'unno! Let's find out together!",
|
||||
"1_female": null
|
||||
"1_female": "How're ya feelin' about this battle?\n$...\n$Let's get this show on the road! How strong is our challenger? \n$I 'unno! Let's find out together!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "You're as flashy and bright as a 10,000,000-volt Thunderbolt, friendo!",
|
||||
"1_female": null
|
||||
"1_female": "You're as flashy and bright as a 10,000,000-volt Thunderbolt, friendo!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Your eyeballs are MINE!"
|
||||
@ -2593,7 +2593,7 @@
|
||||
},
|
||||
"victory": {
|
||||
"1": "You're cool, my friend—you move my SOUL!",
|
||||
"1_female": null
|
||||
"1_female": "You're cool, my friend—you move my SOUL!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Later, baby!"
|
||||
@ -2627,9 +2627,9 @@
|
||||
"nessa_elite": {
|
||||
"encounter": {
|
||||
"1": "The tides are turning in my favor. Ready to get swept away?",
|
||||
"1_female": null,
|
||||
"1_female": "The tides are turning in my favor. Ready to get swept away?",
|
||||
"2": "Let's make some waves with this battle! I hope you're prepared!",
|
||||
"2_female": null
|
||||
"2_female": "Let's make some waves with this battle! I hope you're prepared!"
|
||||
},
|
||||
"victory": {
|
||||
"1": "You navigated those waters perfectly... Well done!",
|
||||
@ -2657,7 +2657,7 @@
|
||||
"allister_elite": {
|
||||
"encounter": {
|
||||
"1": "Shadows fall... Are you ready to face your fears?",
|
||||
"1_female": null,
|
||||
"1_female": "Shadows fall... Are you ready to face your fears?",
|
||||
"2": "Let's see if you can handle the darkness that I command."
|
||||
},
|
||||
"victory": {
|
||||
@ -2681,7 +2681,7 @@
|
||||
"defeat": {
|
||||
"1": "Another storm weathered, another victory claimed! Well fought!",
|
||||
"2": "You got caught in my storm! Better luck next time!",
|
||||
"2_female": null
|
||||
"2_female": "You got caught in my storm! Better luck next time!"
|
||||
}
|
||||
},
|
||||
"alder": {
|
||||
|
@ -209,7 +209,7 @@
|
||||
},
|
||||
"pickup": {
|
||||
"name": "Recogida",
|
||||
"description": "Puede recoger objetos que otros Pokémon hayan usado, o bien aquellos que encuentre en plena aventura."
|
||||
"description": "Puede que recoja un objeto del enemigo tras cada batalla, al azar."
|
||||
},
|
||||
"truant": {
|
||||
"name": "Pereza",
|
||||
@ -217,7 +217,7 @@
|
||||
},
|
||||
"hustle": {
|
||||
"name": "Entusiasmo",
|
||||
"description": "Aumenta su Ataque, pero reduce su Precisión."
|
||||
"description": "Aumenta su ataque, pero reduce su precisión."
|
||||
},
|
||||
"cuteCharm": {
|
||||
"name": "Gran Encanto",
|
||||
@ -225,11 +225,11 @@
|
||||
},
|
||||
"plus": {
|
||||
"name": "Más",
|
||||
"description": "Aumenta su Ataque Especial si un Pokémon aliado tiene la habilidad Más o la habilidad Menos."
|
||||
"description": "Aumenta su ataque especial si un Pokémon aliado tiene la habilidad Más o la habilidad Menos."
|
||||
},
|
||||
"minus": {
|
||||
"name": "Menos",
|
||||
"description": "Aumenta su Ataque Especial si un Pokémon aliado tiene la habilidad Más o la habilidad Menos."
|
||||
"description": "Aumenta su ataque especial si un Pokémon aliado tiene la habilidad Más o la habilidad Menos."
|
||||
},
|
||||
"forecast": {
|
||||
"name": "Predicción",
|
||||
@ -245,11 +245,11 @@
|
||||
},
|
||||
"guts": {
|
||||
"name": "Agallas",
|
||||
"description": "Si sufre un problema de estado, se arma de valor y aumenta su Ataque."
|
||||
"description": "Si sufre un problema de estado, se arma de valor y aumenta su ataque."
|
||||
},
|
||||
"marvelScale": {
|
||||
"name": "Escama Especial",
|
||||
"description": "Si sufre un problema de estado, sus escamas especiales reaccionan y aumenta su Defensa."
|
||||
"description": "Si sufre un problema de estado, sus escamas especiales reaccionan y aumenta su defensa."
|
||||
},
|
||||
"liquidOoze": {
|
||||
"name": "Viscosecreción",
|
||||
@ -305,11 +305,11 @@
|
||||
},
|
||||
"tangledFeet": {
|
||||
"name": "Tumbos",
|
||||
"description": "Aumenta su Evasión si está confuso."
|
||||
"description": "Aumenta su evasión si está confuso."
|
||||
},
|
||||
"motorDrive": {
|
||||
"name": "Electromotor",
|
||||
"description": "Si lo alcanza un movimiento de tipo Eléctrico, aumenta su Velocidad en vez de sufrir daño."
|
||||
"description": "Si lo alcanza un movimiento de tipo Eléctrico, aumenta su velocidad en vez de sufrir daño."
|
||||
},
|
||||
"rivalry": {
|
||||
"name": "Rivalidad",
|
||||
@ -317,11 +317,11 @@
|
||||
},
|
||||
"steadfast": {
|
||||
"name": "Impasible",
|
||||
"description": "Cada vez que se amedrenta, aumenta su Velocidad debido a su voluntad inquebrantable."
|
||||
"description": "Cada vez que se amedrenta, aumenta su velocidad debido a su voluntad inquebrantable."
|
||||
},
|
||||
"snowCloak": {
|
||||
"name": "Manto Níveo",
|
||||
"description": "Aumenta su Evasión cuando nieva."
|
||||
"description": "Aumenta su evasión cuando nieva."
|
||||
},
|
||||
"gluttony": {
|
||||
"name": "Gula",
|
||||
@ -329,11 +329,11 @@
|
||||
},
|
||||
"angerPoint": {
|
||||
"name": "Irascible",
|
||||
"description": "Si recibe un golpe crítico, monta en cólera y su Ataque aumenta al máximo."
|
||||
"description": "Si recibe un golpe crítico, monta en cólera y su ataque aumenta al máximo."
|
||||
},
|
||||
"unburden": {
|
||||
"name": "Liviano",
|
||||
"description": "Aumenta su Velocidad si usa o pierde el objeto que lleva."
|
||||
"description": "Aumenta su velocidad si usa o pierde el objeto que lleva."
|
||||
},
|
||||
"heatproof": {
|
||||
"name": "Ignífugo",
|
||||
@ -349,7 +349,7 @@
|
||||
},
|
||||
"download": {
|
||||
"name": "Descarga",
|
||||
"description": "Compara la Defensa y la Defensa Especial del rival para ver cuál es inferior y aumenta su propio Ataque o Ataque Especial según sea lo más eficaz."
|
||||
"description": "Compara la defensa y la defensa especial del rival para ver cuál es inferior y aumenta su propio ataque o ataque especial según sea lo más eficaz."
|
||||
},
|
||||
"ironFist": {
|
||||
"name": "Puño Férreo",
|
||||
@ -373,11 +373,11 @@
|
||||
},
|
||||
"solarPower": {
|
||||
"name": "Poder Solar",
|
||||
"description": "Si hace sol, aumenta su Ataque Especial, pero pierde PS en cada turno."
|
||||
"description": "Si hace sol, aumenta su ataque especial, pero pierde PS en cada turno."
|
||||
},
|
||||
"quickFeet": {
|
||||
"name": "Pies Rápidos",
|
||||
"description": "Aumenta su Velocidad si sufre problemas de estado."
|
||||
"description": "Aumenta su velocidad si sufre problemas de estado."
|
||||
},
|
||||
"normalize": {
|
||||
"name": "Normalidad",
|
||||
@ -445,7 +445,7 @@
|
||||
},
|
||||
"slowStart": {
|
||||
"name": "Inicio Lento",
|
||||
"description": "Reduce a la mitad su Ataque y su Velocidad durante cinco turnos."
|
||||
"description": "Reduce a la mitad su ataque y su velocidad durante cinco turnos."
|
||||
},
|
||||
"scrappy": {
|
||||
"name": "Intrépido",
|
||||
@ -453,7 +453,7 @@
|
||||
},
|
||||
"stormDrain": {
|
||||
"name": "Colector",
|
||||
"description": "Atrae y neutraliza los movimientos de tipo Agua, que además le aumentan el Ataque Especial."
|
||||
"description": "Atrae y neutraliza los movimientos de tipo Agua, que además le aumentan el ataque especial."
|
||||
},
|
||||
"iceBody": {
|
||||
"name": "Gélido",
|
||||
@ -469,7 +469,7 @@
|
||||
},
|
||||
"honeyGather": {
|
||||
"name": "Recogemiel",
|
||||
"description": "The Pokémon gathers Honey after a battle. The Honey is then sold for money."
|
||||
"description": "El Pokémon recoge miel tras cada batalla. La miel se vende inmediatamente por ₽."
|
||||
},
|
||||
"frisk": {
|
||||
"name": "Cacheo",
|
||||
@ -485,7 +485,7 @@
|
||||
},
|
||||
"flowerGift": {
|
||||
"name": "Don Floral",
|
||||
"description": "Si hace sol, aumenta su Ataque y su Defensa Especial, así como los de sus aliados."
|
||||
"description": "Si hace sol, aumenta su ataque y su defensa Especial, así como los de sus aliados."
|
||||
},
|
||||
"badDreams": {
|
||||
"name": "Mal Sueño",
|
||||
@ -509,11 +509,11 @@
|
||||
},
|
||||
"defiant": {
|
||||
"name": "Competitivo",
|
||||
"description": "Aumenta mucho su Ataque cuando el rival le reduce cualquiera de sus características."
|
||||
"description": "Aumenta mucho su ataque cuando el rival le reduce cualquiera de sus características."
|
||||
},
|
||||
"defeatist": {
|
||||
"name": "Flaqueza",
|
||||
"description": "Cuando sus PS se ven reducidos a la mitad, se cansa tanto que su Ataque y su Ataque Especial también se ven reducidos a la mitad."
|
||||
"description": "Cuando sus PS se ven reducidos a la mitad, se cansa tanto que su ataque y su ataque Especial también se ven reducidos a la mitad."
|
||||
},
|
||||
"cursedBody": {
|
||||
"name": "Cuerpo Maldito",
|
||||
@ -529,7 +529,7 @@
|
||||
},
|
||||
"weakArmor": {
|
||||
"name": "Armadura Frágil",
|
||||
"description": "Al recibir daño de un ataque físico, se reduce su Defensa, pero aumenta mucho su Velocidad."
|
||||
"description": "Al recibir daño de un ataque físico, se reduce su defensa, pero aumenta mucho su velocidad."
|
||||
},
|
||||
"heavyMetal": {
|
||||
"name": "Metal Pesado",
|
||||
@ -577,11 +577,11 @@
|
||||
},
|
||||
"bigPecks": {
|
||||
"name": "Sacapecho",
|
||||
"description": "Impide que otros Pokémon le reduzcan la Defensa."
|
||||
"description": "Impide que otros Pokémon le reduzcan la defensa."
|
||||
},
|
||||
"sandRush": {
|
||||
"name": "Ímpetu Arena",
|
||||
"description": "Aumenta su Velocidad durante las tormentas de arena."
|
||||
"description": "Aumenta su velocidad durante las tormentas de arena."
|
||||
},
|
||||
"wonderSkin": {
|
||||
"name": "Piel Milagro",
|
||||
@ -609,15 +609,15 @@
|
||||
},
|
||||
"moxie": {
|
||||
"name": "Autoestima",
|
||||
"description": "Al debilitar a un objetivo, su confianza se refuerza de tal manera que aumenta su Ataque."
|
||||
"description": "Al debilitar a un objetivo, su confianza se refuerza de tal manera que aumenta su ataque."
|
||||
},
|
||||
"justified": {
|
||||
"name": "Justiciero",
|
||||
"description": "Si lo alcanza un movimiento de tipo Siniestro, aumenta el Ataque debido a su integridad."
|
||||
"description": "Si lo alcanza un movimiento de tipo Siniestro, aumenta el ataque debido a su integridad."
|
||||
},
|
||||
"rattled": {
|
||||
"name": "Cobardía",
|
||||
"description": "Si lo alcanza un ataque de tipo Siniestro, Bicho o Fantasma, o si sufre los efectos de Intimidación, el miedo hace que aumente su Velocidad."
|
||||
"description": "Si lo alcanza un ataque de tipo Siniestro, Bicho o Fantasma, o si sufre los efectos de Intimidación, el miedo hace que aumente su velocidad."
|
||||
},
|
||||
"magicBounce": {
|
||||
"name": "Espejo Mágico",
|
||||
@ -625,7 +625,7 @@
|
||||
},
|
||||
"sapSipper": {
|
||||
"name": "Herbívoro",
|
||||
"description": "Si lo alcanza un movimiento de tipo Planta, aumenta su Ataque en vez de sufrir daño."
|
||||
"description": "Si lo alcanza un movimiento de tipo Planta, aumenta su ataque en vez de sufrir daño."
|
||||
},
|
||||
"prankster": {
|
||||
"name": "Bromista",
|
||||
@ -645,7 +645,7 @@
|
||||
},
|
||||
"victoryStar": {
|
||||
"name": "Tinovictoria",
|
||||
"description": "Aumenta su Precisión y la de sus aliados."
|
||||
"description": "Aumenta su precisión y la de sus aliados."
|
||||
},
|
||||
"turboblaze": {
|
||||
"name": "Turbollama",
|
||||
@ -685,7 +685,7 @@
|
||||
},
|
||||
"competitive": {
|
||||
"name": "Tenacidad",
|
||||
"description": "Aumenta mucho su Ataque Especial cuando el rival le reduce cualquiera de sus características."
|
||||
"description": "Aumenta mucho su ataque especial cuando el rival le reduce cualquiera de sus características."
|
||||
},
|
||||
"strongJaw": {
|
||||
"name": "Mandíbula Fuerte",
|
||||
@ -713,7 +713,7 @@
|
||||
},
|
||||
"grassPelt": {
|
||||
"name": "Manto Frondoso",
|
||||
"description": "Aumenta su Defensa si hay un campo de hierba en el terreno de combate."
|
||||
"description": "Aumenta su defensa si hay un campo de hierba en el terreno de combate."
|
||||
},
|
||||
"symbiosis": {
|
||||
"name": "Simbiosis",
|
||||
@ -729,7 +729,7 @@
|
||||
},
|
||||
"gooey": {
|
||||
"name": "Baba",
|
||||
"description": "Reduce la Velocidad del Pokémon que lo ataque con un movimiento de contacto."
|
||||
"description": "Reduce la velocidad del Pokémon que lo ataque con un movimiento de contacto."
|
||||
},
|
||||
"aerilate": {
|
||||
"name": "Piel Celeste",
|
||||
@ -765,7 +765,7 @@
|
||||
},
|
||||
"stamina": {
|
||||
"name": "Firmeza",
|
||||
"description": "Aumenta su Defensa al recibir un ataque."
|
||||
"description": "Aumenta su defensa al recibir un ataque."
|
||||
},
|
||||
"wimpOut": {
|
||||
"name": "Huida",
|
||||
@ -777,7 +777,7 @@
|
||||
},
|
||||
"waterCompaction": {
|
||||
"name": "Hidrorrefuerzo",
|
||||
"description": "Aumenta mucho su Defensa si lo alcanza un movimiento de tipo Agua."
|
||||
"description": "Aumenta mucho su defensa si lo alcanza un movimiento de tipo Agua."
|
||||
},
|
||||
"merciless": {
|
||||
"name": "Ensañamiento",
|
||||
@ -801,11 +801,11 @@
|
||||
},
|
||||
"berserk": {
|
||||
"name": "Cólera",
|
||||
"description": "Aumenta su Ataque Especial si sus PS se ven reducidos a la mitad debido a algún ataque."
|
||||
"description": "Aumenta su ataque especial si sus PS se ven reducidos a la mitad debido a algún ataque."
|
||||
},
|
||||
"slushRush": {
|
||||
"name": "Quitanieves",
|
||||
"description": "Aumenta su Velocidad cuando nieva."
|
||||
"description": "Aumenta su velocidad cuando nieva."
|
||||
},
|
||||
"longReach": {
|
||||
"name": "Remoto",
|
||||
@ -825,7 +825,7 @@
|
||||
},
|
||||
"surgeSurfer": {
|
||||
"name": "Cola Surf",
|
||||
"description": "Duplica su Velocidad si hay un campo eléctrico en el terreno de combate."
|
||||
"description": "Duplica su velocidad si hay un campo eléctrico en el terreno de combate."
|
||||
},
|
||||
"schooling": {
|
||||
"name": "Banco",
|
||||
@ -837,7 +837,7 @@
|
||||
},
|
||||
"battleBond": {
|
||||
"name": "Fuerte Afecto",
|
||||
"description": "Al derrotar a un Pokémon, los vínculos con su Entrenador se refuerzan y aumentan su Ataque, su Ataque Especial y su Velocidad."
|
||||
"description": "Al derrotar a un Pokémon, los vínculos con su Entrenador se refuerzan y aumentan su ataque, su ataque especial y su velocidad."
|
||||
},
|
||||
"powerConstruct": {
|
||||
"name": "Agrupamiento",
|
||||
@ -877,11 +877,11 @@
|
||||
},
|
||||
"soulHeart": {
|
||||
"name": "Coránima",
|
||||
"description": "Aumenta su Ataque Especial cada vez que un Pokémon cae debilitado."
|
||||
"description": "Aumenta su ataque especial cada vez que un Pokémon cae debilitado."
|
||||
},
|
||||
"tanglingHair": {
|
||||
"name": "Rizos Rebeldes",
|
||||
"description": "Reduce la Velocidad del Pokémon que lo ataque con un movimiento de contacto."
|
||||
"description": "Reduce la velocidad del Pokémon que lo ataque con un movimiento de contacto."
|
||||
},
|
||||
"receiver": {
|
||||
"name": "Receptor",
|
||||
@ -933,11 +933,11 @@
|
||||
},
|
||||
"intrepidSword": {
|
||||
"name": "Espada Indómita",
|
||||
"description": "Aumenta su Ataque al entrar en combate por primera vez."
|
||||
"description": "Aumenta su ataque al entrar en combate por primera vez."
|
||||
},
|
||||
"dauntlessShield": {
|
||||
"name": "Escudo Recio",
|
||||
"description": "Aumenta su Defensa al entrar en combate por primera vez."
|
||||
"description": "Aumenta su defensa al entrar en combate por primera vez."
|
||||
},
|
||||
"libero": {
|
||||
"name": "Líbero",
|
||||
@ -945,11 +945,11 @@
|
||||
},
|
||||
"ballFetch": {
|
||||
"name": "Recogebolas",
|
||||
"description": "Si no lleva equipado ningún objeto, recupera la Poké Ball del primer intento de captura fallido."
|
||||
"description": "Recupera la Poké Ball del primer intento de captura fallido."
|
||||
},
|
||||
"cottonDown": {
|
||||
"name": "Pelusa",
|
||||
"description": "Al ser alcanzado por un ataque, suelta una pelusa de algodón que reduce la Velocidad de todos los demás Pokémon."
|
||||
"description": "Al ser alcanzado por un ataque, suelta una pelusa de algodón que reduce la velocidad de todos los demás Pokémon."
|
||||
},
|
||||
"propellerTail": {
|
||||
"name": "Hélice Caudal",
|
||||
@ -969,7 +969,7 @@
|
||||
},
|
||||
"steamEngine": {
|
||||
"name": "Combustible",
|
||||
"description": "Si lo alcanza un movimiento de tipo Fuego o Agua, aumenta muchísimo su Velocidad."
|
||||
"description": "Si lo alcanza un movimiento de tipo Fuego o Agua, aumenta muchísimo su velocidad."
|
||||
},
|
||||
"punkRock": {
|
||||
"name": "Punk Rock",
|
||||
@ -1017,7 +1017,7 @@
|
||||
},
|
||||
"gorillaTactics": {
|
||||
"name": "Monotema",
|
||||
"description": "Aumenta su Ataque, pero solo puede usar el primer movimiento escogido."
|
||||
"description": "Aumenta su ataque, pero solo puede usar el primer movimiento escogido."
|
||||
},
|
||||
"neutralizingGas": {
|
||||
"name": "Gas Reactivo",
|
||||
@ -1053,11 +1053,11 @@
|
||||
},
|
||||
"chillingNeigh": {
|
||||
"name": "Relincho Blanco",
|
||||
"description": "Al derrotar a un objetivo, emite un relincho gélido y aumenta su Ataque."
|
||||
"description": "Al derrotar a un objetivo, emite un relincho gélido y aumenta su ataque."
|
||||
},
|
||||
"grimNeigh": {
|
||||
"name": "Relincho Negro",
|
||||
"description": "Al derrotar a un objetivo, emite un relincho aterrador y aumenta su Ataque Especial."
|
||||
"description": "Al derrotar a un objetivo, emite un relincho aterrador y aumenta su ataque especial."
|
||||
},
|
||||
"asOneGlastrier": {
|
||||
"name": "Unidad Ecuestre",
|
||||
@ -1077,11 +1077,11 @@
|
||||
},
|
||||
"thermalExchange": {
|
||||
"name": "Termoconversión",
|
||||
"description": "Evita las quemaduras y, si lo alcanza un movimiento de tipo Fuego, aumenta su Ataque."
|
||||
"description": "Evita las quemaduras y, si lo alcanza un movimiento de tipo Fuego, aumenta su ataque."
|
||||
},
|
||||
"angerShell": {
|
||||
"name": "Coraza Ira",
|
||||
"description": "Cuando un ataque reduce sus PS a la mitad, un arrebato de cólera reduce su Defensa y su Defensa Especial, pero aumenta su Ataque, su Ataque Especial y su Velocidad."
|
||||
"description": "Cuando un ataque reduce sus PS a la mitad, un arrebato de cólera reduce su defensa y su defensa especial, pero aumenta su ataque, su ataque especial y su velocidad."
|
||||
},
|
||||
"purifyingSalt": {
|
||||
"name": "Sal Purificadora",
|
||||
@ -1089,15 +1089,15 @@
|
||||
},
|
||||
"wellBakedBody": {
|
||||
"name": "Cuerpo Horneado",
|
||||
"description": "Si lo alcanza un movimiento de tipo Fuego, aumenta mucho su Defensa en vez de sufrir daño."
|
||||
"description": "Si lo alcanza un movimiento de tipo Fuego, aumenta mucho su defensa en vez de sufrir daño."
|
||||
},
|
||||
"windRider": {
|
||||
"name": "Surcavientos",
|
||||
"description": "Si sopla un Viento Afín o lo alcanza un movimiento que usa viento, aumenta su Ataque. Tampoco recibe daño de este último."
|
||||
"description": "Si sopla un Viento Afín o lo alcanza un movimiento que usa viento, aumenta su ataque. Tampoco recibe daño de este último."
|
||||
},
|
||||
"guardDog": {
|
||||
"name": "Perro Guardián",
|
||||
"description": "Aumenta su Ataque si sufre los efectos de Intimidación. También anula movimientos y objetos que fuercen el cambio de Pokémon."
|
||||
"description": "Aumenta su ataque si sufre los efectos de Intimidación. También anula movimientos y objetos que fuercen el cambio de Pokémon."
|
||||
},
|
||||
"rockyPayload": {
|
||||
"name": "Transportarrocas",
|
||||
@ -1133,27 +1133,27 @@
|
||||
},
|
||||
"vesselOfRuin": {
|
||||
"name": "Caldero Debacle",
|
||||
"description": "Reduce el Ataque Especial de todos los demás Pokémon con el poder de su caldero maldito."
|
||||
"description": "Reduce el ataque especial de todos los demás Pokémon con el poder de su caldero maldito."
|
||||
},
|
||||
"swordOfRuin": {
|
||||
"name": "Espada Debacle",
|
||||
"description": "Reduce la Defensa de todos los demás Pokémon con el poder de su espada maldita."
|
||||
"description": "Reduce la defensa de todos los demás Pokémon con el poder de su espada maldita."
|
||||
},
|
||||
"tabletsOfRuin": {
|
||||
"name": "Tablilla Debacle",
|
||||
"description": "Reduce el Ataque de todos los demás Pokémon con el poder de sus tablillas malditas."
|
||||
"description": "Reduce el ataque de todos los demás Pokémon con el poder de sus tablillas malditas."
|
||||
},
|
||||
"beadsOfRuin": {
|
||||
"name": "Abalorio Debacle",
|
||||
"description": "Reduce la Defensa Especial de todos los demás Pokémon con el poder de sus abalorios malditos."
|
||||
"description": "Reduce la defensa especial de todos los demás Pokémon con el poder de sus abalorios malditos."
|
||||
},
|
||||
"orichalcumPulse": {
|
||||
"name": "Latido Oricalco",
|
||||
"description": "El tiempo pasa a ser soleado cuando entra en combate. Si hace mucho sol, su Ataque aumenta gracias a su pulso primigenio."
|
||||
"description": "El tiempo pasa a ser soleado cuando entra en combate. Si hace mucho sol, su ataque aumenta gracias a su pulso primigenio."
|
||||
},
|
||||
"hadronEngine": {
|
||||
"name": "Motor Hadrónico",
|
||||
"description": "Crea un campo eléctrico al entrar en combate. Si hay un campo eléctrico, su Ataque Especial aumenta gracias a su motor futurista."
|
||||
"description": "Crea un campo eléctrico al entrar en combate. Si hay un campo eléctrico, su ataque especial aumenta gracias a su motor futurista."
|
||||
},
|
||||
"opportunist": {
|
||||
"name": "Oportunista",
|
||||
@ -1169,7 +1169,7 @@
|
||||
},
|
||||
"supremeOverlord": {
|
||||
"name": "General Supremo",
|
||||
"description": "Al entrar en combate, su Ataque y su Ataque Especial aumentan un poco por cada miembro del equipo que haya sido derrotado hasta el momento."
|
||||
"description": "Al entrar en combate, su ataque y su ataque especial aumentan un poco por cada miembro del equipo que haya sido derrotado hasta el momento."
|
||||
},
|
||||
"costar": {
|
||||
"name": "Unísono",
|
||||
@ -1193,11 +1193,11 @@
|
||||
},
|
||||
"mindsEye": {
|
||||
"name": "Ojo Mental",
|
||||
"description": "Alcanza a Pokémon de tipo Fantasma con movimientos de tipo Normal o Lucha. Su Precisión no se puede reducir e ignora los cambios en la Evasión del objetivo."
|
||||
"description": "Alcanza a Pokémon de tipo Fantasma con movimientos de tipo Normal o Lucha. Su precisión no se puede reducir e ignora los cambios en la evasión del objetivo."
|
||||
},
|
||||
"supersweetSyrup": {
|
||||
"name": "Néctar Dulce",
|
||||
"description": "Al entrar en combate por primera vez, esparce un aroma dulzón a néctar que reduce la Evasión del rival."
|
||||
"description": "Al entrar en combate por primera vez, esparce un aroma dulzón a néctar que reduce la evasión del rival."
|
||||
},
|
||||
"hospitality": {
|
||||
"name": "Hospitalidad",
|
||||
@ -1209,19 +1209,19 @@
|
||||
},
|
||||
"embodyAspectTeal": {
|
||||
"name": "Evocarrecuerdos",
|
||||
"description": "Al evocar viejos recuerdos, el Pokémon hace brillar la Máscara Cimiento y aumenta su Defensa."
|
||||
"description": "Al evocar viejos recuerdos, el Pokémon hace brillar la máscara turquesa y aumenta su velocidad."
|
||||
},
|
||||
"embodyAspectWellspring": {
|
||||
"name": "Evocarrecuerdos",
|
||||
"description": "Al evocar viejos recuerdos, el Pokémon hace brillar la Máscara Cimiento y aumenta su Defensa."
|
||||
"description": "Al evocar viejos recuerdos, el Pokémon hace brillar la máscara fuente y aumenta su defensa especial."
|
||||
},
|
||||
"embodyAspectHearthflame": {
|
||||
"name": "Evocarrecuerdos",
|
||||
"description": "Al evocar viejos recuerdos, el Pokémon hace brillar la Máscara Cimiento y aumenta su Defensa."
|
||||
"description": "Al evocar viejos recuerdos, el Pokémon hace brillar la máscara horno y aumenta su ataque."
|
||||
},
|
||||
"embodyAspectCornerstone": {
|
||||
"name": "Evocarrecuerdos",
|
||||
"description": "Al evocar viejos recuerdos, el Pokémon hace brillar la Máscara Cimiento y aumenta su Defensa."
|
||||
"description": "Al evocar viejos recuerdos, el Pokémon hace brillar la máscara cimiento y aumenta su defensa."
|
||||
},
|
||||
"teraShift": {
|
||||
"name": "Teracambio",
|
||||
|
@ -1 +1,8 @@
|
||||
{}
|
||||
{
|
||||
"safeguardOnAdd": "¡Todos los Pokémon están protegidos por Velo Sagrado!",
|
||||
"safeguardOnAddPlayer": "¡Tu equipo se ha protegido con Velo Sagrado!",
|
||||
"safeguardOnAddEnemy": "¡El equipo enemigo se ha protegido con Velo Sagrado!",
|
||||
"safeguardOnRemove": "¡Velo Sagrado dejó de hacer efecto!",
|
||||
"safeguardOnRemovePlayer": "El efecto de Velo Sagrado en tu equipo se ha disipado.",
|
||||
"safeguardOnRemoveEnemy": "El efecto de Velo Sagrado en el equipo enemigo se ha disipado."
|
||||
}
|
@ -1,95 +1,99 @@
|
||||
{
|
||||
"music": "Música: ",
|
||||
"missing_entries": "{{name}}",
|
||||
"battle_kanto_champion": "B2W2 - ¡Vs Campeón de Kanto!",
|
||||
"battle_johto_champion": "B2W2 - ¡Vs Campeón de Johto!",
|
||||
"battle_hoenn_champion_g5": "B2W2 - ¡Vs Campeón de Hoenn!",
|
||||
"battle_hoenn_champion_g6": "ORAS - ¡Vs Campeón de Hoenn!",
|
||||
"battle_sinnoh_champion": "B2W2 - ¡Vs Campeón de Sinnoh!",
|
||||
"battle_champion_alder": "BW - ¡Vs Campeón de Teselia!",
|
||||
"battle_champion_iris": "B2W2 - ¡Vs Campeón de Teselia!",
|
||||
"battle_kalos_champion": "XY - ¡Vs Campeón de Kalos!",
|
||||
"battle_alola_champion": "USUM - ¡Vs Campeón de Alola!",
|
||||
"battle_galar_champion": "SWSH - ¡Vs Campeón de Galar!",
|
||||
"battle_champion_geeta": "SV - ¡Vs Campeona Ságita!",
|
||||
"battle_champion_nemona": "SV - ¡Vs Campeona Mencía!",
|
||||
"battle_champion_kieran": "SV - ¡Vs Campeón Cass!",
|
||||
"battle_hoenn_elite": "ORAS - ¡Vs Alto Mando!",
|
||||
"battle_unova_elite": "BW - ¡Vs Alto Mando!",
|
||||
"battle_kalos_elite": "XY - ¡Vs Alto Mando!",
|
||||
"battle_alola_elite": "SM - ¡Vs Alto Mando!",
|
||||
"battle_galar_elite": "SWSH - Torneo de Finalistas",
|
||||
"battle_paldea_elite": "SV - ¡Vs Alto Mando!",
|
||||
"battle_bb_elite": "SV - ¡Vs Alto Mando de la Academia Arándano!",
|
||||
"battle_kanto_champion": "B2W2 - ¡Vs. Campeón de Kanto!",
|
||||
"battle_johto_champion": "B2W2 - ¡Vs. Campeón de Johto!",
|
||||
"battle_hoenn_champion_g5": "B2W2 - ¡Vs. Campeón de Hoenn!",
|
||||
"battle_hoenn_champion_g6": "ORAS - ¡Vs. Campeón de Hoenn!",
|
||||
"battle_sinnoh_champion": "B2W2 - ¡Vs. Campeón de Sinnoh!",
|
||||
"battle_champion_alder": "BW - ¡Vs. Campeón de Teselia!",
|
||||
"battle_champion_iris": "B2W2 - ¡Vs. Campeón de Teselia!",
|
||||
"battle_kalos_champion": "XY - ¡Vs. Campeón de Kalos!",
|
||||
"battle_alola_champion": "USUM - ¡Vs. Campeón de Alola!",
|
||||
"battle_galar_champion": "SWSH - ¡Vs. Campeón de Galar!",
|
||||
"battle_champion_geeta": "SV - ¡Vs. Campeona Ságita!",
|
||||
"battle_champion_nemona": "SV - ¡Vs. Campeona Mencía!",
|
||||
"battle_champion_kieran": "SV - ¡Vs. Campeón Cass!",
|
||||
"battle_hoenn_elite": "ORAS - ¡Vs. Alto Mando!",
|
||||
"battle_unova_elite": "BW - ¡Vs. Alto Mando!",
|
||||
"battle_kalos_elite": "XY - ¡Vs. Alto Mando!",
|
||||
"battle_alola_elite": "SM - ¡Vs. Alto Mando!",
|
||||
"battle_galar_elite": "SWSH - Torneo de finalistas",
|
||||
"battle_paldea_elite": "SV - ¡Vs. Alto Mando!",
|
||||
"battle_bb_elite": "SV - ¡Vs. Alto Mando de la Academia Arándano!",
|
||||
"battle_final_encounter": "PMD RTDX - Dominio de Rayquaza",
|
||||
"battle_final": "BW - ¡Vs Ghechis!",
|
||||
"battle_kanto_gym": "B2W2 - ¡Vs Líder de Kanto!",
|
||||
"battle_johto_gym": "B2W2 - ¡Vs Líder de Johto!",
|
||||
"battle_hoenn_gym": "B2W2 - ¡Vs Líder de Hoenn!",
|
||||
"battle_sinnoh_gym": "B2W2 - ¡Vs Líder de Sinnoh!",
|
||||
"battle_unova_gym": "BW - ¡Vs Líder de Teselia!",
|
||||
"battle_kalos_gym": "XY - ¡Vs Líder de Kalos!",
|
||||
"battle_galar_gym": "SWSH - ¡Vs Líder de Galar!",
|
||||
"battle_paldea_gym": "SV - ¡Vs Líder de Paldea!",
|
||||
"battle_legendary_kanto": "XY - ¡Vs Legendarios de Kanto!",
|
||||
"battle_legendary_raikou": "HGSS - ¡Vs Raikou!",
|
||||
"battle_legendary_entei": "HGSS - ¡Vs Entei!",
|
||||
"battle_legendary_suicune": "HGSS - ¡Vs Suicune!",
|
||||
"battle_legendary_lugia": "HGSS - ¡Vs Lugia!",
|
||||
"battle_legendary_ho_oh": "HGSS - ¡Vs Ho-oh!",
|
||||
"battle_legendary_regis_g5": "B2W2 - ¡Vs Regis!",
|
||||
"battle_legendary_regis_g6": "ORAS - ¡Vs Regis!",
|
||||
"battle_legendary_gro_kyo": "ORAS - ¡Vs Groudon/Kyogre!",
|
||||
"battle_legendary_rayquaza": "ORAS - ¡Vs Rayquaza!",
|
||||
"battle_legendary_deoxys": "ORAS - ¡Vs Deoxys!",
|
||||
"battle_legendary_lake_trio": "ORAS - ¡Vs Trío del Lago!",
|
||||
"battle_legendary_sinnoh": "ORAS - ¡Vs Legendarios de Sinnoh!",
|
||||
"battle_legendary_dia_pal": "ORAS - ¡Vs Dialga/Palkia!",
|
||||
"battle_legendary_giratina": "ORAS - ¡Vs Giratina!",
|
||||
"battle_legendary_arceus": "HGSS - ¡Vs Arceus!",
|
||||
"battle_legendary_unova": "BW - ¡Vs Legendarios de Teselia!",
|
||||
"battle_legendary_kyurem": "BW - ¡Vs Kyurem!",
|
||||
"battle_legendary_res_zek": "BW - ¡Vs Reshiram/Zekrom!",
|
||||
"battle_legendary_xern_yvel": "XY - ¡Vs Xerneas/Yveltal!",
|
||||
"battle_legendary_tapu": "SM - ¡Vs Tapus!",
|
||||
"battle_legendary_sol_lun": "SM - ¡Vs Solgaleo/Lunala!",
|
||||
"battle_legendary_ub": "SM - ¡Vs Ultraentes!",
|
||||
"battle_legendary_dusk_dawn": "USUM - ¡Vs Necrozma Melena Crepuscular/Alas del Alba!",
|
||||
"battle_legendary_ultra_nec": "USUM - ¡Vs Ultra-Necrozma!",
|
||||
"battle_legendary_zac_zam": "SWSH - ¡Vs Zacian/Zamazenta!",
|
||||
"battle_legendary_glas_spec": "SWSH - ¡Vs Glastrier/Spectrier!",
|
||||
"battle_legendary_calyrex": "SWSH - ¡Vs Calyrex!",
|
||||
"battle_legendary_birds_galar": "SWSH - ¡Vs Aves Legendarias de Galar!",
|
||||
"battle_legendary_ruinous": "SV - ¡Vs Tesoros Funestos!",
|
||||
"battle_legendary_kor_mir": "SV Depths of Area Zero Battle",
|
||||
"battle_legendary_loyal_three": "SV - ¡Vs Compatrones!",
|
||||
"battle_legendary_ogerpon": "SV - ¡Vs Ogerpon!",
|
||||
"battle_legendary_terapagos": "SV - ¡Vs Terapagos!",
|
||||
"battle_legendary_pecharunt": "SV - ¡Vs Pecharunt!",
|
||||
"battle_rival": "BW - ¡Vs Rival!",
|
||||
"battle_final": "BW - ¡Vs. Ghechis!",
|
||||
"battle_kanto_gym": "B2W2 - ¡Vs. Líder de Kanto!",
|
||||
"battle_johto_gym": "B2W2 - ¡Vs. Líder de Johto!",
|
||||
"battle_hoenn_gym": "B2W2 - ¡Vs. Líder de Hoenn!",
|
||||
"battle_sinnoh_gym": "B2W2 - ¡Vs. Líder de Sinnoh!",
|
||||
"battle_unova_gym": "BW - ¡Vs. Líder de Teselia!",
|
||||
"battle_kalos_gym": "XY - ¡Vs. Líder de Kalos!",
|
||||
"battle_galar_gym": "SWSH - ¡Vs. Líder de Galar!",
|
||||
"battle_paldea_gym": "SV - ¡Vs. Líder de Paldea!",
|
||||
"battle_legendary_kanto": "XY - ¡Vs. Legendarios de Kanto!",
|
||||
"battle_legendary_raikou": "HGSS - ¡Vs. Raikou!",
|
||||
"battle_legendary_entei": "HGSS - ¡Vs. Entei!",
|
||||
"battle_legendary_suicune": "HGSS - ¡Vs. Suicune!",
|
||||
"battle_legendary_lugia": "HGSS - ¡Vs. Lugia!",
|
||||
"battle_legendary_ho_oh": "HGSS - ¡Vs. Ho-oh!",
|
||||
"battle_legendary_regis_g5": "B2W2 - ¡Vs. Regis!",
|
||||
"battle_legendary_regis_g6": "ORAS - ¡Vs. Regis!",
|
||||
"battle_legendary_gro_kyo": "ORAS - ¡Vs. Groudon/Kyogre!",
|
||||
"battle_legendary_rayquaza": "ORAS - ¡Vs. Rayquaza!",
|
||||
"battle_legendary_deoxys": "ORAS - ¡Vs. Deoxys!",
|
||||
"battle_legendary_lake_trio": "ORAS - ¡Vs. trío del Lago!",
|
||||
"battle_legendary_sinnoh": "ORAS - ¡Vs. legendarios de Sinnoh!",
|
||||
"battle_legendary_dia_pal": "ORAS - ¡Vs. Dialga/Palkia!",
|
||||
"battle_legendary_origin_forme": "LA - ¡Vs. Dialga & Palkia, Forma Origen!",
|
||||
"battle_legendary_giratina": "ORAS - ¡Vs. Giratina!",
|
||||
"battle_legendary_arceus": "HGSS - ¡Vs. Arceus!",
|
||||
"battle_legendary_unova": "BW - ¡Vs. legendarios de Teselia!",
|
||||
"battle_legendary_kyurem": "BW - ¡Vs. Kyurem!",
|
||||
"battle_legendary_res_zek": "BW - ¡Vs. Reshiram/Zekrom!",
|
||||
"battle_legendary_xern_yvel": "XY - ¡Vs. Xerneas/Yveltal!",
|
||||
"battle_legendary_tapu": "SM - ¡Vs. Tapus!",
|
||||
"battle_legendary_sol_lun": "SM - ¡Vs. Solgaleo/Lunala!",
|
||||
"battle_legendary_ub": "SM - ¡Vs. Ultraentes!",
|
||||
"battle_legendary_dusk_dawn": "USUM - ¡Vs. Necrozma Melena Crepuscular/Alas del Alba!",
|
||||
"battle_legendary_ultra_nec": "USUM - ¡Vs. Ultra-Necrozma!",
|
||||
"battle_legendary_zac_zam": "SWSH - ¡Vs. Zacian/Zamazenta!",
|
||||
"battle_legendary_glas_spec": "SWSH - ¡Vs. Glastrier/Spectrier!",
|
||||
"battle_legendary_calyrex": "SWSH - ¡Vs. Calyrex!",
|
||||
"battle_legendary_riders": "SWSH - ¡Vs. Calyrex Jinete!",
|
||||
"battle_legendary_birds_galar": "SWSH - ¡Vs. Aves Legendarias de Galar!",
|
||||
"battle_legendary_ruinous": "SV - ¡Vs. Tesoros Funestos!",
|
||||
"battle_legendary_kor_mir": "SV - ¡Batalla en el área Zero!",
|
||||
"battle_legendary_loyal_three": "SV - ¡Vs. Compatrones!",
|
||||
"battle_legendary_ogerpon": "SV - ¡Vs. Ogerpon!",
|
||||
"battle_legendary_terapagos": "SV - ¡Vs. Terapagos!",
|
||||
"battle_legendary_pecharunt": "SV - ¡Vs. Pecharunt!",
|
||||
"battle_rival": "BW - ¡Vs. Rival!",
|
||||
"battle_rival_2": "BW - ¡Vs N!",
|
||||
"battle_rival_3": "BW - ¡Vs N (Liga Pokémon)!",
|
||||
"battle_trainer": "BW - ¡Vs Entrenador!",
|
||||
"battle_wild": "BW - ¡Vs Pokémon Salvaje!",
|
||||
"battle_wild_strong": "BW - ¡Vs Pokémon Salvaje Raro!",
|
||||
"end_summit": "PMD RTDX - Techo del Cielo",
|
||||
"battle_rocket_grunt": "HGSS Team Rocket Battle",
|
||||
"battle_aqua_magma_grunt": "ORAS Team Aqua & Magma Battle",
|
||||
"battle_galactic_grunt": "BDSP Team Galactic Battle",
|
||||
"battle_rival_3": "BW - ¡Vs. N (Liga Pokémon)!",
|
||||
"battle_trainer": "BW - ¡Vs. entrenador!",
|
||||
"battle_wild": "BW - ¡Vs. Pokémon salvaje!",
|
||||
"battle_wild_strong": "BW - ¡Vs. Pokémon salvaje raro!",
|
||||
"end_summit": "PMD RTDX - Techo del cielo",
|
||||
"battle_rocket_grunt": "HGSS - ¡Vs. Team Rocket!",
|
||||
"battle_aqua_magma_grunt": "ORAS - ¡Vs. Equipo Aqua & Magma!",
|
||||
"battle_galactic_grunt": "BDSP - ¡Vs. Equipo Galaxia!",
|
||||
"battle_plasma_grunt": "BW - ¡Vs Equipo Plasma!",
|
||||
"battle_flare_grunt": "XY Team Flare Battle",
|
||||
"battle_aether_grunt": "SM Aether Foundation Battle",
|
||||
"battle_skull_grunt": "SM Team Skull Battle",
|
||||
"battle_macro_grunt": "SWSH Trainer Battle",
|
||||
"battle_galactic_admin": "BDSP Team Galactic Admin Battle",
|
||||
"battle_skull_admin": "SM Team Skull Admin Battle",
|
||||
"battle_oleana": "SWSH Oleana Battle",
|
||||
"battle_rocket_boss": "USUM Giovanni Battle",
|
||||
"battle_aqua_magma_boss": "ORAS Archie & Maxie Battle",
|
||||
"battle_galactic_boss": "BDSP Cyrus Battle",
|
||||
"battle_plasma_boss": "B2W2 Ghetsis Battle",
|
||||
"battle_flare_boss": "XY Lysandre Battle",
|
||||
|
||||
"battle_flare_grunt": "XY - ¡Vs. Team Flare!",
|
||||
"battle_aether_grunt": "SM - ¡Vs. Fundación Æther!",
|
||||
"battle_skull_grunt": "SM - ¡Vs. Team Skull!",
|
||||
"battle_macro_grunt": "SWSH - ¡Vs. entrenador!",
|
||||
"battle_galactic_admin": "BDSP - ¡Vs. Comandante del Equipo Galaxia!",
|
||||
"battle_skull_admin": "SM - ¡Vs. Comandante del Team Skull!",
|
||||
"battle_oleana": "SWSH - ¡Vs. Olivia!",
|
||||
"battle_rocket_boss": "USUM - ¡Vs. Giovanni!",
|
||||
"battle_aqua_magma_boss": "ORAS - ¡Vs. Aquiles & Magno!",
|
||||
"battle_galactic_boss": "BDSP - ¡Vs. Helio!",
|
||||
"battle_plasma_boss": "B2W2 - ¡Vs. Ghechis Armonia!",
|
||||
"battle_flare_boss": "XY - ¡Vs. Lysson!",
|
||||
"battle_aether_boss": "SM - ¡Vs. Samina!",
|
||||
"battle_skull_boss": "SM - ¡Vs. Guzmán!",
|
||||
"battle_macro_boss": "SWSH - ¡Vs. Rose!",
|
||||
"abyss": "PMD EoS - Cráter Oscuro",
|
||||
"badlands": "PMD EoS - Valle Desolado",
|
||||
"beach": "PMD EoS - Risco Calado",
|
||||
@ -105,40 +109,40 @@
|
||||
"graveyard": "PMD EoS - Bosque Misterio",
|
||||
"ice_cave": "PMD EoS - Gran Iceberg",
|
||||
"island": "PMD EoS - Costa Escarpada",
|
||||
"jungle": "Lmz - Jungle",
|
||||
"laboratory": "Firel - Laboratory",
|
||||
"jungle": "Lmz - Jungla",
|
||||
"laboratory": "Firel - Laboratorio",
|
||||
"lake": "PMD EoS - Cueva Cristal",
|
||||
"meadow": "PMD EoS - Bosque de la Cumbre del Cielo",
|
||||
"metropolis": "Firel - Metropolis",
|
||||
"metropolis": "Firel - Metrópolis",
|
||||
"mountain": "PMD EoS - Monte Cuerno",
|
||||
"plains": "PMD EoS - Pradera de la Cumbre del Cielo",
|
||||
"power_plant": "PMD EoS - Pradera Destello",
|
||||
"ruins": "PMD EoS - Sima Hermética",
|
||||
"sea": "Andr06 - Marine Mystique",
|
||||
"seabed": "Firel - Seabed",
|
||||
"slum": "Andr06 - Sneaky Snom",
|
||||
"sea": "Andr06 - Misticismo marino",
|
||||
"seabed": "Firel - Lecho del mar",
|
||||
"slum": "Andr06 - Snom sigiloso",
|
||||
"snowy_forest": "PMD EoS - Campo nevado de la Cumbre del Cielo",
|
||||
"space": "Firel - Aether",
|
||||
"space": "Firel - Æther ",
|
||||
"swamp": "PMD EoS - Mar Circundante",
|
||||
"tall_grass": "PMD EoS - Bosque Niebla",
|
||||
"temple": "PMD EoS - Cueva Regia",
|
||||
"town": "PMD EoS - Tema del territorio aleatorio 3",
|
||||
"volcano": "PMD EoS - Cueva Vapor",
|
||||
"wasteland": "PMD EoS - Corazón Tierra Oculta",
|
||||
"encounter_ace_trainer": "BW - Desafío Combate (Entrenador Guay)",
|
||||
"encounter_backpacker": "BW - Desafío Combate (Mochilero)",
|
||||
"encounter_clerk": "BW - Desafío Combate (Empresario)",
|
||||
"encounter_cyclist": "BW - Desafío Combate (Ciclista)",
|
||||
"encounter_lass": "BW - Desafío Combate (Chica)",
|
||||
"encounter_parasol_lady": "BW - Desafío Combate (Dama parasol)",
|
||||
"encounter_pokefan": "BW - Desafío Combate (Pokéfan)",
|
||||
"encounter_psychic": "BW - Desafío Combate (Médium)",
|
||||
"encounter_rich": "BW - Desafío Combate (Aristócrata)",
|
||||
"encounter_rival": "BW - Desafío Combate (Cheren)",
|
||||
"encounter_roughneck": "BW - Desafío Combate (Calvo)",
|
||||
"encounter_scientist": "BW - Desafío Combate (Científico)",
|
||||
"encounter_twins": "BW - Desafío Combate (Gemelas)",
|
||||
"encounter_youngster": "BW - Desafío Combate (Joven)",
|
||||
"encounter_ace_trainer": "BW - ¡Vs. entrenador guay!",
|
||||
"encounter_backpacker": "BW - ¡Vs. mochilero!",
|
||||
"encounter_clerk": "BW - ¡Vs. empresario!",
|
||||
"encounter_cyclist": "BW - ¡Vs. ciclista!",
|
||||
"encounter_lass": "BW - ¡Vs. chica joven!",
|
||||
"encounter_parasol_lady": "BW - ¡Vs. dama parasol!",
|
||||
"encounter_pokefan": "BW - ¡Vs. poké-fan!",
|
||||
"encounter_psychic": "BW -¡Vs. médium!",
|
||||
"encounter_rich": "BW - ¡Vs. aristócrata!",
|
||||
"encounter_rival": "BW - ¡Vs. Cheren!",
|
||||
"encounter_roughneck": "BW - ¡Vs. tío chungo!",
|
||||
"encounter_scientist": "BW - ¡Vs. científico!",
|
||||
"encounter_twins": "BW - ¡Vs. gemelas!",
|
||||
"encounter_youngster": "BW - ¡Vs. chico joven!",
|
||||
"heal": "BW - Cura Pokémon",
|
||||
"menu": "PMD EoS - ¡Bienvenidos al mundo de los Pokémon!",
|
||||
"title": "PMD EoS - Tema del menú principal"
|
||||
|
@ -1,3 +1,12 @@
|
||||
{
|
||||
"bypassSpeedChanceApply": "¡Gracias {{itemName}} {{pokemonName}} puede tener prioridad!"
|
||||
"surviveDamageApply": "{{pokemonNameWithAffix}} ha usado {{typeName}} y ha logrado resistir!",
|
||||
"turnHealApply": "{{pokemonNameWithAffix}} ha recuperado unos pocos PS gracias a {{typeName}}!",
|
||||
"hitHealApply": "{{pokemonNameWithAffix}} ha recuperado unos pocos PS gracias a {{typeName}}!",
|
||||
"pokemonInstantReviveApply": "{{pokemonNameWithAffix}} ha sido revivido gracias a su {{typeName}}!",
|
||||
"pokemonResetNegativeStatStageApply": "Las estadísticas bajadas de {{pokemonNameWithAffix}} fueron restauradas gracias a {{typeName}}!",
|
||||
"moneyInterestApply": "Recibiste intereses de ₽{{moneyAmount}}\ngracias a {{typeName}}!",
|
||||
"turnHeldItemTransferApply": "{{pokemonNameWithAffix}}'s {{itemName}} fue absorbido\npor {{pokemonName}}'s {{typeName}}!",
|
||||
"contactHeldItemTransferApply": "{{pokemonNameWithAffix}}'s {{itemName}} fue robado por {{pokemonName}}'s {{typeName}}!",
|
||||
"enemyTurnHealApply": "¡{{pokemonNameWithAffix}}\nrecuperó algunos PS!",
|
||||
"bypassSpeedChanceApply": "¡Gracias a su {{itemName}}, {{pokemonName}} puede tener prioridad!"
|
||||
}
|
@ -7,5 +7,6 @@
|
||||
"usedUpAllElectricity": "¡{{pokemonName}} ha descargado toda su electricidad!",
|
||||
"stoleItem": "¡{{pokemonName}} robó el objeto\n{{itemName}} de {{targetName}}!",
|
||||
"statEliminated": "¡Los cambios en estadísticas fueron eliminados!",
|
||||
"revivalBlessing": "¡{{pokemonName}} ha revivido!"
|
||||
"revivalBlessing": "¡{{pokemonName}} ha revivido!",
|
||||
"safeguard": "¡{{targetName}} está protegido por Velo Sagrado!"
|
||||
}
|
@ -4,5 +4,11 @@
|
||||
"mega-y": "Mega {{pokemonName}} Y",
|
||||
"primal": "{{pokemonName}} Primigenio",
|
||||
"gigantamax": "G-Max {{pokemonName}}",
|
||||
"eternamax": "E-Max {{pokemonName}}"
|
||||
"eternamax": "E-Max {{pokemonName}}",
|
||||
"megaChange": "¡{{preName}} ha mega-evolucionado a {{pokemonName}}!",
|
||||
"gigantamaxChange": "¡{{preName}} ha gigamaxizado a {{pokemonName}}!",
|
||||
"eternamaxChange": "¡{{preName}} ha eternamaxizado a {{pokemonName}}!",
|
||||
"revertChange": "¡{{pokemonName}} ha revertido a su forma original!",
|
||||
"formChange": "¡{{preName}} ha cambiado de forma!",
|
||||
"disguiseChange": "¡El disfraz ha actuado como señuelo!\t"
|
||||
}
|
@ -7,6 +7,7 @@
|
||||
"pikachuToughCosplay": "Enmascarada",
|
||||
"pikachuPartner": "Compañero",
|
||||
"eeveePartner": "Compañero",
|
||||
"pichuSpiky": "Picoreja",
|
||||
"unownA": "A",
|
||||
"unownB": "B",
|
||||
"unownC": "C",
|
||||
@ -49,6 +50,8 @@
|
||||
"rotomFrost": "Frío",
|
||||
"rotomFan": "Ventilador",
|
||||
"rotomMow": "Corte",
|
||||
"giratinaAltered": "Modificada",
|
||||
"shayminLand": "Tierra",
|
||||
"basculinRedStriped": "Raya Roja",
|
||||
"basculinBlueStriped": "Raya Azul",
|
||||
"basculinWhiteStriped": "Raya Blanca",
|
||||
@ -56,6 +59,10 @@
|
||||
"deerlingSummer": "Verano",
|
||||
"deerlingAutumn": "Otoño",
|
||||
"deerlingWinter": "Invierno",
|
||||
"tornadusIncarnate": "Avatar",
|
||||
"thundurusIncarnate": "Avatar",
|
||||
"landorusIncarnate": "Avatar",
|
||||
"keldeoOrdinary": "Habitual",
|
||||
"meloettaAria": "Lírica",
|
||||
"meloettaPirouette": "Danza",
|
||||
"froakieBattleBond": "Fuerte Afecto",
|
||||
@ -87,12 +94,12 @@
|
||||
"furfrouHeart": "Corazón",
|
||||
"furfrouStar": "Estrella",
|
||||
"furfrouDiamond": "Diamante",
|
||||
"furfrouDebutante": "Debutante",
|
||||
"furfrouMatron": "Matrón",
|
||||
"furfrouDandy": "Dandi",
|
||||
"furfrouLaReine": "La Reine",
|
||||
"furfrouDebutante": "Señorita",
|
||||
"furfrouMatron": "Dama",
|
||||
"furfrouDandy": "Caballero",
|
||||
"furfrouLaReine": "Aristócrata",
|
||||
"furfrouKabuki": "Kabuki",
|
||||
"furfrouPharaoh": "Faraón",
|
||||
"furfrouPharaoh": "Faraónico",
|
||||
"pumpkabooSmall": "Pequeño",
|
||||
"pumpkabooLarge": "Grande",
|
||||
"pumpkabooSuper": "Enorme",
|
||||
@ -127,11 +134,15 @@
|
||||
"magearnaOriginal": "Vetusto",
|
||||
"marshadowZenith": "Cénit",
|
||||
"sinisteaPhony": "Falsificada",
|
||||
"sinisteaAntique": "Auténtica",
|
||||
"sinisteaAntique": "Genuina",
|
||||
"eiscueNoIce": "Cara Deshielo",
|
||||
"indeedeeMale": "Macho",
|
||||
"indeedeeFemale": "Hembra",
|
||||
"morpekoFullBelly": "Saciada",
|
||||
"zacianHeroOfManyBattles": "Guerrero avezado",
|
||||
"zamazentaHeroOfManyBattles": "Guerrero avezado",
|
||||
"zarudeDada": "Papá",
|
||||
"enamorusIncarnate": "Avatar",
|
||||
"squawkabillyGreenPlumage": "Plumaje Verde",
|
||||
"squawkabillyBluePlumage": "Plumaje Azul",
|
||||
"squawkabillyYellowPlumage": "Plumaje Amarillo",
|
||||
@ -141,8 +152,18 @@
|
||||
"tatsugiriStretchy": "Estirada",
|
||||
"gimmighoulChest": "Cofre",
|
||||
"gimmighoulRoaming": "Andante",
|
||||
"poltchageistCounterfeit": "Imitación",
|
||||
"poltchageistArtisan": "Original",
|
||||
"koraidonApexBuild": "Forma Plena",
|
||||
"koraidonLimitedBuild": "Forma Limitada",
|
||||
"koraidonSprintingBuild": "Forma Carrera",
|
||||
"koraidonSwimmingBuild": "Forma Nado",
|
||||
"koraidonGlidingBuild": "Forma Planeo",
|
||||
"miraidonUltimateMode": "Modo Pleno",
|
||||
"miraidonLowPowerMode": "Modo Limitado",
|
||||
"miraidonDriveMode": "Modo Conducción",
|
||||
"miraidonAquaticMode": "Modo Flote",
|
||||
"miraidonGlideMode": "Modo Planeo",
|
||||
"poltchageistCounterfeit": "Fraudulenta",
|
||||
"poltchageistArtisan": "Opulenta",
|
||||
"paldeaTaurosCombat": "Combatiente",
|
||||
"paldeaTaurosBlaze": "Ardiente",
|
||||
"paldeaTaurosAqua": "Acuático"
|
||||
|
@ -3,12 +3,12 @@
|
||||
"joinTheDiscord": "¡Únete al Discord!",
|
||||
"infiniteLevels": "¡Niveles infinitos!",
|
||||
"everythingStacks": "¡Todo se acumula!",
|
||||
"optionalSaveScumming": "¡Trampas guardando (¡opcionales!)!",
|
||||
"optionalSaveScumming": "¡Trampas de guardado opcionales!",
|
||||
"biomes": "¡35 biomas!",
|
||||
"openSource": "¡Código abierto!",
|
||||
"playWithSpeed": "¡Juega a velocidad 5x!",
|
||||
"liveBugTesting": "¡Arreglo de bugs sobre la marcha!",
|
||||
"heavyInfluence": "¡Influencia Alta en RoR2!",
|
||||
"liveBugTesting": "¡Testeo de bugs en directo!",
|
||||
"heavyInfluence": "¡Mucha Influencia de RoR2!",
|
||||
"pokemonRiskAndPokemonRain": "¡Pokémon Risk y Pokémon Rain!",
|
||||
"nowWithMoreSalt": "¡Con un 33% más de polémica!",
|
||||
"infiniteFusionAtHome": "¡Infinite Fusion en casa!",
|
||||
@ -17,16 +17,16 @@
|
||||
"mubstitute": "¡Mubstituto!",
|
||||
"thatsCrazy": "¡De locos!",
|
||||
"oranceJuice": "¡Zumo de narancia!",
|
||||
"questionableBalancing": "¡Balance cuestionable!",
|
||||
"questionableBalancing": "¡Cambios en balance cuestionables!",
|
||||
"coolShaders": "¡Shaders impresionantes!",
|
||||
"aiFree": "¡Libre de IA!",
|
||||
"suddenDifficultySpikes": "¡Saltos de dificultad repentinos!",
|
||||
"basedOnAnUnfinishedFlashGame": "¡Basado en un juego Flash inacabado!",
|
||||
"moreAddictiveThanIntended": "¡Más adictivo de la cuenta!",
|
||||
"moreAddictiveThanIntended": "¡Más adictivo de lo previsto!",
|
||||
"mostlyConsistentSeeds": "¡Semillas CASI consistentes!",
|
||||
"achievementPointsDontDoAnything": "¡Los Puntos de Logro no hacen nada!",
|
||||
"youDoNotStartAtLevel": "¡No empiezas al nivel 2000!",
|
||||
"dontTalkAboutTheManaphyEggIncident": "¡No hablen del incidente del Huevo Manaphy!",
|
||||
"dontTalkAboutTheManaphyEggIncident": "¡No se habla del Incidente Manaphy!",
|
||||
"alsoTryPokengine": "¡Prueba también Pokéngine!",
|
||||
"alsoTryEmeraldRogue": "¡Prueba también Emerald Rogue!",
|
||||
"alsoTryRadicalRed": "¡Prueba también Radical Red!",
|
||||
|
@ -1 +1,16 @@
|
||||
{}
|
||||
{
|
||||
"misty": "Niebla",
|
||||
"mistyStartMessage": "¡La niebla ha envuelto el terreno de combate!",
|
||||
"mistyClearMessage": "La niebla se ha disipado.",
|
||||
"mistyBlockMessage": "¡El campo de niebla ha protegido a {{pokemonNameWithAffix}} ",
|
||||
"electric": "Eléctrico",
|
||||
"electricStartMessage": "¡Se ha formado un campo de corriente eléctrica en el terreno\nde combate!",
|
||||
"electricClearMessage": "El campo de corriente eléctrica ha desaparecido.\t",
|
||||
"grassy": "Hierba",
|
||||
"grassyStartMessage": "¡El terreno de combate se ha cubierto de hierba!",
|
||||
"grassyClearMessage": "La hierba ha desaparecido.",
|
||||
"psychic": "Psíquico",
|
||||
"psychicStartMessage": "¡El terreno de combate se ha vuelto muy extraño!",
|
||||
"psychicClearMessage": "Ha desaparecido la extraña sensación que se percibía en el terreno\nde combate.",
|
||||
"defaultBlockMessage": "¡El campo {{terrainName}} ha protegido a {{pokemonNameWithAffix}} "
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"brock": "Brock",
|
||||
"misty": "Misty",
|
||||
"lt_surge": "Tt. Surge",
|
||||
"lt_surge": "Teniente Surge",
|
||||
"erika": "Erika",
|
||||
"janine": "Sachiko",
|
||||
"sabrina": "Sabrina",
|
||||
@ -23,7 +23,7 @@
|
||||
"winona": "Alana",
|
||||
"tate": "Vito",
|
||||
"liza": "Leti",
|
||||
"juan": "Galán",
|
||||
"juan": "Galano",
|
||||
"roark": "Roco",
|
||||
"gardenia": "Gardenia",
|
||||
"maylene": "Brega",
|
||||
@ -34,7 +34,7 @@
|
||||
"volkner": "Lectro",
|
||||
"cilan": "Millo",
|
||||
"chili": "Zeo",
|
||||
"cress": "Maiz",
|
||||
"cress": "Maíz",
|
||||
"cheren": "Cheren",
|
||||
"lenora": "Aloe",
|
||||
"roxie": "Hiedra",
|
||||
@ -57,7 +57,7 @@
|
||||
"nessa": "Cathy",
|
||||
"kabu": "Naboru",
|
||||
"bea": "Judith",
|
||||
"allister": "Allistair",
|
||||
"allister": "Alistair",
|
||||
"opal": "Sally",
|
||||
"bede": "Berto",
|
||||
"gordie": "Morris",
|
||||
@ -123,30 +123,28 @@
|
||||
"leon": "Lionel",
|
||||
"rival": "Finn",
|
||||
"rival_female": "Ivy",
|
||||
"archer": "Archer",
|
||||
"ariana": "Ariana",
|
||||
"proton": "Proton",
|
||||
"archer": "Atlas",
|
||||
"ariana": "Atenea",
|
||||
"proton": "Protón",
|
||||
"petrel": "Petrel",
|
||||
"tabitha": "Tabitha",
|
||||
"courtney": "Courtney",
|
||||
"shelly": "Shelly",
|
||||
"matt": "Matt",
|
||||
"mars": "Mars",
|
||||
"jupiter": "Jupiter",
|
||||
"saturn": "Saturn",
|
||||
"zinzolin": "Zinzolin",
|
||||
"rood": "Rood",
|
||||
"xerosic": "Xerosic",
|
||||
"bryony": "Bryony",
|
||||
"tabitha": "Tatiano",
|
||||
"courtney": "Carola",
|
||||
"shelly": "Silvina",
|
||||
"matt": "Matías",
|
||||
"mars": "Venus",
|
||||
"jupiter": "Ceres",
|
||||
"saturn": "Saturno",
|
||||
"zinzolin": "Menek",
|
||||
"rood": "Ruga",
|
||||
"xerosic": "Xero",
|
||||
"bryony": "Begonia",
|
||||
"maxie": "Magno",
|
||||
"archie": "Aquiles",
|
||||
"cyrus": "Helio",
|
||||
"ghetsis": "Ghechis",
|
||||
"lysandre": "Lysson",
|
||||
"faba": "Fabio",
|
||||
|
||||
"maxie": "Maxie",
|
||||
"archie": "Archie",
|
||||
"cyrus": "Cyrus",
|
||||
"ghetsis": "Ghetsis",
|
||||
"lysandre": "Lysandre",
|
||||
"lusamine": "Samina",
|
||||
|
||||
"blue_red_double": "Azul y Rojo",
|
||||
"red_blue_double": "Rojo y Azul",
|
||||
"tate_liza_double": "Vito y Leti",
|
||||
|
@ -47,5 +47,11 @@
|
||||
"tailwindOnRemovePlayer": "Le vent arrière soufflant\nsur votre équipe s’arrête !",
|
||||
"tailwindOnRemoveEnemy": "Le vent arrière soufflant\nsur l’équipe ennemie s’arrête !",
|
||||
"happyHourOnAdd": "L’ambiance est euphorique !",
|
||||
"happyHourOnRemove": "L’ambiance se calme !"
|
||||
"happyHourOnRemove": "L’ambiance se calme !",
|
||||
"safeguardOnAdd": "Un voile mystérieux recouvre\ntout le terrain !",
|
||||
"safeguardOnAddPlayer": "Un voile mystérieux recouvre\nvotre équipe !",
|
||||
"safeguardOnAddEnemy": "Un voile mystérieux recouvre\nl’équipe ennemie !",
|
||||
"safeguardOnRemove": "Le terrain n’est plus protégé\npar le voile mystérieux !",
|
||||
"safeguardOnRemovePlayer": "Votre équipe n’est plus protégée\npar le voile mystérieux !",
|
||||
"safeguardOnRemoveEnemy": "L’équipe ennemie n’est plus protégée\npar le voile mystérieux !"
|
||||
}
|
@ -1,4 +1,6 @@
|
||||
{
|
||||
"ending": "@c{smile}Oh ? T’as gagné ?@d{96} @c{smile_eclosed}J’aurais dû le savoir.\nMais de voilà de retour.\n$@c{smile}C’est terminé.@d{64} T’as brisé ce cycle infernal.\n$@c{serious_smile_fists}T’as aussi accompli ton rêve non ?\nTu n’as pas connu la moindre défaite.\n$@c{neutral}Je suis le seul à me souvenir de ce que t’as fait.@d{96}\nJe pense que ça ira, non ?\n$@c{serious_smile_fists}Ta légende vivra à jamais dans nos cœurs.\n$@c{smile_eclosed}Bref, j’en ai un peu marre de ce endroit, pas toi ? Rentrons à la maison.\n$@c{serious_smile_fists}On se fera un p’tit combat une fois rentrés ?\nSi t’es d’accord.",
|
||||
"ending_female": "@c{shock}T’es revenu ?@d{32} Ça veut dire…@d{96} que t’as gagné ?!\n@c{smile_ehalf}J’aurais dû le savoir.\n$@c{smile_eclosed}Bien sûr… J’ai toujours eu ce sentiment.\n@c{smile}C’est fini maitenant hein ? T’as brisé ce cycle.\n$@c{smile_ehalf}T’as aussi accompli ton rêve non ?\nTu n’as pas connu la moindre défaite.\n$Je serai la seule à me souvenir de ce que t’as fait.\n@c{angry_mopen}Je tâcherai de ne pas oublier !\n$@c{smile_wave_wink}J’déconne !@d{64} @c{smile}Jamais j’oublierai.@d{32}\nTa légende vivra à jamais dans nos cœurs.\n$@c{smile_wave}Bon,@d{64} il se fait tard…@d{96} je crois ?\nDifficile à dire ici.\n$Rentrons, @c{smile_wave_wink}et demain on se fera un p’tit combat, comme au bon vieux temps ?"
|
||||
"ending_female": "@c{shock}T’es revenu ?@d{32} Ça veut dire…@d{96} que t’as gagné ?!\n@c{smile_ehalf}J’aurais dû le savoir.\n$@c{smile_eclosed}Bien sûr… J’ai toujours eu ce sentiment.\n@c{smile}C’est fini maitenant hein ? T’as brisé ce cycle.\n$@c{smile_ehalf}T’as aussi accompli ton rêve non ?\nTu n’as pas connu la moindre défaite.\n$Je serai la seule à me souvenir de ce que t’as fait.\n@c{angry_mopen}Je tâcherai de ne pas oublier !\n$@c{smile_wave_wink}J’déconne !@d{64} @c{smile}Jamais j’oublierai.@d{32}\nTa légende vivra à jamais dans nos cœurs.\n$@c{smile_wave}Bon,@d{64} il se fait tard…@d{96} je crois ?\nDifficile à dire ici.\n$Rentrons, @c{smile_wave_wink}et demain on se fera un p’tit combat, comme au bon vieux temps ?",
|
||||
"ending_endless": "Félicitations ! Vous avez atteint la fin actuelle.\nPlus de contenu à venir bientôt !",
|
||||
"ending_name": "Les devs"
|
||||
}
|
@ -61,5 +61,6 @@
|
||||
"suppressAbilities": "Le talent de {{pokemonName}}\na été rendu inactif !",
|
||||
"revivalBlessing": "{{pokemonName}} a repris connaissance\net est prêt à se battre de nouveau !",
|
||||
"swapArenaTags": "Les effets affectant chaque côté du terrain\nont été échangés par {{pokemonName}} !",
|
||||
"exposedMove": "{{targetPokemonName}} est identifié\npar {{pokemonName}} !"
|
||||
"exposedMove": "{{targetPokemonName}} est identifié\npar {{pokemonName}} !",
|
||||
"safeguard": "{{targetName}} est protégé\npar la capacité Rune Protect !"
|
||||
}
|
@ -13,7 +13,8 @@
|
||||
"SPD": "Vitesse",
|
||||
"SPDshortened": "Vit",
|
||||
"ACC": "Précison",
|
||||
"EVA": "Esquive"
|
||||
"EVA": "Esquive",
|
||||
"HPStat": "PV"
|
||||
},
|
||||
"Type": {
|
||||
"UNKNOWN": "Inconnu",
|
||||
|
@ -13,5 +13,32 @@
|
||||
"metFragment": {
|
||||
"normal": "rencontré au N.{{level}},\n{{biome}}.",
|
||||
"apparently": "apparemment rencontré au N.{{level}},\n{{biome}}."
|
||||
},
|
||||
"natureFragment": {
|
||||
"Hardy": "{{nature}}",
|
||||
"Lonely": "{{nature}}",
|
||||
"Brave": "{{nature}}",
|
||||
"Adamant": "{{nature}}",
|
||||
"Naughty": "{{nature}}",
|
||||
"Bold": "{{nature}}",
|
||||
"Docile": "{{nature}}",
|
||||
"Relaxed": "{{nature}}",
|
||||
"Impish": "{{nature}}",
|
||||
"Lax": "{{nature}}",
|
||||
"Timid": "{{nature}}",
|
||||
"Hasty": "{{nature}}",
|
||||
"Serious": "{{nature}}",
|
||||
"Jolly": "{{nature}}",
|
||||
"Naive": "{{nature}}",
|
||||
"Modest": "{{nature}}",
|
||||
"Mild": "{{nature}}",
|
||||
"Quiet": "{{nature}}",
|
||||
"Bashful": "{{nature}}",
|
||||
"Rash": "{{nature}}",
|
||||
"Calm": "{{nature}}",
|
||||
"Gentle": "{{nature}}",
|
||||
"Sassy": "{{nature}}",
|
||||
"Careful": "{{nature}}",
|
||||
"Quirky": "{{nature}}"
|
||||
}
|
||||
}
|
@ -101,8 +101,8 @@
|
||||
"workers": "Ouvriers",
|
||||
"youngster": "Gamin",
|
||||
"rocket_grunt": "Sbire de la Team Rocket",
|
||||
"rocket_grunt_female": "Sbire de la Team Rocket",
|
||||
"rocket_grunts": "Sbires de la Team Rocket",
|
||||
"rocket_grunt_female": "Sbire de la Team Rocket",
|
||||
"magma_grunt": "Sbire de la Team Magma",
|
||||
"magma_grunt_female": "Sbire de la Team Magma",
|
||||
"magma_grunts": "Sbires de la Team Magma",
|
||||
@ -123,6 +123,7 @@
|
||||
"aether_grunts": "Employés de la Fondation Æther",
|
||||
"skull_grunt": "Sbire de la Team Skull",
|
||||
"skull_grunt_female": "Sbire de la Team Skull",
|
||||
"skull_grunts": "Sbires de la Team Skull",
|
||||
"macro_grunt": "Employé de Macro Cosmos",
|
||||
"macro_grunt_female": "Employée de Macro Cosmos",
|
||||
"macro_grunts": "Employés de Macro Cosmos"
|
||||
|
@ -1 +1,8 @@
|
||||
{}
|
||||
{
|
||||
"safeguardOnAdd": "Un velo mistico ricopre il campo!",
|
||||
"safeguardOnAddPlayer": "Un velo mistico ricopre la tua squadra!",
|
||||
"safeguardOnAddEnemy": "Un velo mistico ricopre la squadra avversaria!",
|
||||
"safeguardOnRemove": "Il campo non è più protetto da Salvaguardia!",
|
||||
"safeguardOnRemovePlayer": "La tua squadra non è più protetta da Salvaguardia!",
|
||||
"safeguardOnRemoveEnemy": "La squadra avversaria non è più protetta da Salvaguardia!"
|
||||
}
|
@ -61,5 +61,6 @@
|
||||
"suppressAbilities": "L’abilità di {{pokemonName}}\nperde ogni efficacia!",
|
||||
"revivalBlessing": "{{pokemonName}} torna in forze!",
|
||||
"swapArenaTags": "{{pokemonName}} ha invertito gli effetti attivi\nnelle due metà del campo!",
|
||||
"exposedMove": "{{pokemonName}} ha identificato\n{{targetPokemonName}}!"
|
||||
"exposedMove": "{{pokemonName}} ha identificato\n{{targetPokemonName}}!",
|
||||
"safeguard": "Salvaguardia protegge {{targetName}}!"
|
||||
}
|
@ -31,6 +31,9 @@
|
||||
"changeQuantity": "Scegli un oggetto da trasferire.\nUsa < e > per cambiarne la quantità.",
|
||||
"selectAnotherPokemonToSplice": "Scegli un altro Pokémon da unire.",
|
||||
"cancel": "Annulla",
|
||||
"able": "Sì!",
|
||||
"notAble": "No!",
|
||||
"learned": "La conosce!",
|
||||
"goodbye": "Addio, {{pokemonName}}!",
|
||||
"byebye": "Ciao ciao, {{pokemonName}}!",
|
||||
"farewell": "Arrivederci, {{pokemonName}}!",
|
||||
@ -38,5 +41,7 @@
|
||||
"thisIsWhereWePart": "Le nostre strade si dividono, {{pokemonName}}!",
|
||||
"illMissYou": "Mi mancherai, {{pokemonName}}!",
|
||||
"illNeverForgetYou": "Non ti dimenticherò, {{pokemonName}}!",
|
||||
"untilWeMeetAgain": "Alla prossima, {{pokemonName}}!"
|
||||
"untilWeMeetAgain": "Alla prossima, {{pokemonName}}!",
|
||||
"sayonara": "Sayonara, {{pokemonName}}!",
|
||||
"smellYaLater": "Ci becchiamo, {{pokemonName}}!"
|
||||
}
|
@ -2,5 +2,6 @@
|
||||
"moveset": "Set di mosse",
|
||||
"gender": "Genere:",
|
||||
"ability": "Abilità:",
|
||||
"nature": "Natura:"
|
||||
"nature": "Natura:",
|
||||
"form": "Forma:"
|
||||
}
|
@ -1 +1,23 @@
|
||||
{}
|
||||
{
|
||||
"type_null": "Tipo Zero",
|
||||
"great_tusk": "Grandizanne",
|
||||
"scream_tail": "Codaurlante",
|
||||
"brute_bonnet": "Fungofurioso",
|
||||
"flutter_mane": "Crinealato",
|
||||
"slither_wing": "Alirasenti",
|
||||
"sandy_shocks": "Peldisabbia",
|
||||
"iron_treads": "Solcoferreo",
|
||||
"iron_bundle": "Saccoferreo",
|
||||
"iron_hands": "Manoferrea",
|
||||
"iron_jugulis": "Colloferreo",
|
||||
"iron_moth": "Falenaferrea",
|
||||
"iron_thorns": "Spineferree",
|
||||
"roaring_moon": "Lunaruggente",
|
||||
"iron_valiant": "Eroeferreo",
|
||||
"walking_wake": "Acquecrespe",
|
||||
"iron_leaves": "Fogliaferrea",
|
||||
"gouging_fire": "Vampeaguzze",
|
||||
"raging_bolt": "Furiatonante",
|
||||
"iron_boulder": "Massoferreo",
|
||||
"iron_crown": "Capoferreo"
|
||||
}
|
||||
|
@ -12,7 +12,6 @@
|
||||
"blockItemTheft": "{{pokemonNameWithAffix}}の {{abilityName}}で\n道具を うばわれない!",
|
||||
"typeImmunityHeal": "{{pokemonNameWithAffix}}は {{abilityName}}で\n体力を 回復した!",
|
||||
"nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}}は {{abilityName}}で\nダメージを 受けない。",
|
||||
"postDefendDisguise": "{{pokemonNameWithAffix}}の\nばけのかわが はがれた!",
|
||||
"moveImmunity": "{{pokemonNameWithAffix}}には\n効果が ないようだ…",
|
||||
"reverseDrain": "{{pokemonNameWithAffix}}は\nヘドロえきを 吸い取った!",
|
||||
"postDefendTypeChange": "{{pokemonNameWithAffix}}は {{abilityName}}で\n{{typeName}}タイプに なった!",
|
||||
|
@ -6,7 +6,7 @@
|
||||
"name": "なし"
|
||||
},
|
||||
"MoneyAchv": {
|
||||
"description": "一回の ランで ₽{{moneyAmount}}を 稼ぐ"
|
||||
"description": "一回の ランで {{moneyAmount}}円を 稼ぐ"
|
||||
},
|
||||
"10K_MONEY": {
|
||||
"name": "お金を持つ人"
|
||||
@ -21,7 +21,7 @@
|
||||
"name": "超富裕層"
|
||||
},
|
||||
"DamageAchv": {
|
||||
"description": "一撃で {{damageAmount}}ダメージを 与える"
|
||||
"description": "一撃で HP{{damageAmount}}の ダメージを 与える"
|
||||
},
|
||||
"250_DMG": {
|
||||
"name": "力持ち"
|
||||
@ -33,10 +33,11 @@
|
||||
"name": "カカロット"
|
||||
},
|
||||
"10000_DMG": {
|
||||
"name": "ワンパンマン"
|
||||
"name": "ワンパンマン",
|
||||
"name_female": "ワンパンウーマン"
|
||||
},
|
||||
"HealAchv": {
|
||||
"description": "一つの 技や 特性や 持っているアイテムで {{healAmount}}{{HP}}を 一気に 回復する"
|
||||
"description": "一つの 技や 特性や 持っているアイテムで\n{{healAmount}}{{HP}}を 一気に 回復する"
|
||||
},
|
||||
"250_HEAL": {
|
||||
"name": "回復発見者"
|
||||
@ -82,7 +83,7 @@
|
||||
},
|
||||
"TRANSFER_MAX_BATTLE_STAT": {
|
||||
"name": "同力",
|
||||
"description": "少なくとも 一つの 能力を 最大まで あげて 他の 手持ちポケモンに バトンタッチする"
|
||||
"description": "少なくとも 一つの 能力を 最大まで あげて\n他の 手持ちポケモンに バトンタッチする"
|
||||
},
|
||||
"MAX_FRIENDSHIP": {
|
||||
"name": "マブ達",
|
||||
@ -106,7 +107,7 @@
|
||||
},
|
||||
"SPLICE": {
|
||||
"name": "インフィニット・フュジョン",
|
||||
"description": "いでんしのくさびで 二つの ポケモンを 吸収合体させる"
|
||||
"description": "遺伝子のくさびで 二つの ポケモンを 吸収合体させる"
|
||||
},
|
||||
"MINI_BLACK_HOLE": {
|
||||
"name": "アイテムホーリック",
|
||||
@ -161,8 +162,8 @@
|
||||
"description": "クラシックモードを クリアする"
|
||||
},
|
||||
"UNEVOLVED_CLASSIC_VICTORY": {
|
||||
"name": "Bring Your Child To Work Day",
|
||||
"description": "Beat the game in Classic Mode with at least one unevolved party member."
|
||||
"name": "はじめてのおつかい",
|
||||
"description": "少なくとも 一つの 進化していない 手持ちポケモンで\nクラシックモードを クリアする"
|
||||
},
|
||||
"MONO_GEN_ONE": {
|
||||
"name": "原始",
|
||||
@ -260,5 +261,9 @@
|
||||
"FRESH_START": {
|
||||
"name": "一発で!",
|
||||
"description": "出直しチャレンジを クリアする"
|
||||
},
|
||||
"INVERSE_BATTLE": {
|
||||
"name": "カガミよミガカ",
|
||||
"description": "反転バトルチャレンジを クリアする\nるすアリク をジンレャチルトバ転反"
|
||||
}
|
||||
}
|
@ -1,4 +1,12 @@
|
||||
{
|
||||
"trappedDesc": "捕らわれること",
|
||||
"flinchedDesc": "ひるむこと",
|
||||
"confusedDesc": "混乱",
|
||||
"infatuatedDesc": "メロメロ",
|
||||
"seedDesc": "種を植えつくこと",
|
||||
"nightmareDesc": "あくむ",
|
||||
"ingrainDesc": "根",
|
||||
"drowsyDesc": "ねむけ",
|
||||
"rechargingLapse": "{{pokemonNameWithAffix}}は 攻撃の 反動で 動けない!",
|
||||
"trappedOnAdd": "{{pokemonNameWithAffix}}は もう 逃げられない!",
|
||||
"trappedOnRemove": "{{pokemonNameWithAffix}}は\n{{moveName}}の 効果が 解けた!",
|
||||
@ -13,9 +21,9 @@
|
||||
"infatuatedOnAdd": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に メロメロに なった!",
|
||||
"infatuatedOnOverlap": "{{pokemonNameWithAffix}}は すでに メロメロだ!",
|
||||
"infatuatedLapse": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に メロメロだ!",
|
||||
"infatuatedLapseImmobilize": "{{pokemonNameWithAffix}}は\nメロメロで わざが 出せなかった!",
|
||||
"infatuatedLapseImmobilize": "{{pokemonNameWithAffix}}は メロメロで 技が出せなかった!",
|
||||
"infatuatedOnRemove": "{{pokemonNameWithAffix}}は メロメロ状態が 治った!",
|
||||
"seededOnAdd": "{{pokemonNameWithAffix}}に 種を 植(う)えつけた!",
|
||||
"seededOnAdd": "{{pokemonNameWithAffix}}に 種を 植えつけた!",
|
||||
"seededLapse": "やどりぎが {{pokemonNameWithAffix}}の 体力を うばう!",
|
||||
"seededLapseShed": "{{pokemonNameWithAffix}}は ヘドロえきを 吸い取った!",
|
||||
"nightmareOnAdd": "{{pokemonNameWithAffix}}は あくむを 見始めた!",
|
||||
|
@ -1,46 +1,46 @@
|
||||
{
|
||||
"SITRUS": {
|
||||
"name": "オボンのみ",
|
||||
"effect": "HP 50%いかのとき HPを 25パーセント かいふくする"
|
||||
"effect": "持たせると HPが 50%以下になるとき HPを 25% 回復する"
|
||||
},
|
||||
"LUM": {
|
||||
"name": "ラムのみ",
|
||||
"effect": "すべての じょうたい いじょうと こんらんを かいふくする"
|
||||
"effect": "持たせると 状態異常や 混乱になるとき 回復する\n"
|
||||
},
|
||||
"ENIGMA": {
|
||||
"name": "ナゾのみ",
|
||||
"effect": "こうかばつぐんの わざを うけたとき HPを 25パーセント かいふくする"
|
||||
"effect": "持たせると 効果バツグンの 技を 受けたとき HPを 25%回復する"
|
||||
},
|
||||
"LIECHI": {
|
||||
"name": "チイラのみ",
|
||||
"effect": "HP 25%いかのとき こうげきが あがる"
|
||||
"effect": "持たせると HPが 25%以下に なるとき 攻撃が あがる"
|
||||
},
|
||||
"GANLON": {
|
||||
"name": "リュガのみ",
|
||||
"effect": "HP 25%いかのとき ぼうぎょが あがる"
|
||||
"effect": "持たせると HPが 25%以下に なるとき 防御が あがる\n"
|
||||
},
|
||||
"PETAYA": {
|
||||
"name": "ヤタピのみ",
|
||||
"effect": "HP 25%いかのとき とくこうが あがる"
|
||||
"effect": "持たせると HPが 25%以下に なるとき 特攻が あがる\n"
|
||||
},
|
||||
"APICOT": {
|
||||
"name": "ズアのみ",
|
||||
"effect": "HP 25%いかのとき とくぼうが あがる"
|
||||
"effect": "持たせると HPが 25%以下に なるとき 特防が あがる\n"
|
||||
},
|
||||
"SALAC": {
|
||||
"name": "カムラのみ",
|
||||
"effect": "HP 25%いかのとき すばやさが あがる"
|
||||
"effect": "持たせると HPが 25%以下に なるとき 素早さが あがる"
|
||||
},
|
||||
"LANSAT": {
|
||||
"name": "サンのみ",
|
||||
"effect": "HP 25%いかのとき こうげきが きゅうしょに あたりやすくなる"
|
||||
"effect": "持たせると HPが 25%以下に なるとき 攻撃が 急所に 当たりやすくなる"
|
||||
},
|
||||
"STARF": {
|
||||
"name": "スターのみ",
|
||||
"effect": "HP 25%いかのとき のうりょくの どれか 1つが ぐーんと あがる"
|
||||
"effect": "持たせると HPが 25%以下に なるとき どれか 1つの 能力が ぐーんと あがる"
|
||||
},
|
||||
"LEPPA": {
|
||||
"name": "ヒメリのみ",
|
||||
"effect": "PPが 0に なった わざの PPを 10だけ かいふくする"
|
||||
"effect": "持たせると PPが 0になる 技のPPを 10回復する"
|
||||
}
|
||||
}
|
@ -1,10 +1,10 @@
|
||||
{
|
||||
"title": "チャレンジを 設定",
|
||||
"title": "チャレンジを 設定",
|
||||
"illegalEvolution": "{{pokemon}}は このチャレンジで\n対象外の ポケモンに なってしまった!",
|
||||
"singleGeneration": {
|
||||
"name": "単一世代",
|
||||
"desc": "{{gen}}世代からの ポケモンしか 使えません",
|
||||
"desc_default": "選んだ 世代からの ポケモンしか 使えません",
|
||||
"desc": "{{gen}}世代からの ポケモンしか 使えません",
|
||||
"desc_default": "選んだ 世代からの ポケモンしか 使えません",
|
||||
"gen_1": "1",
|
||||
"gen_2": "2",
|
||||
"gen_3": "3",
|
||||
@ -17,13 +17,19 @@
|
||||
},
|
||||
"singleType": {
|
||||
"name": "単一タイプ",
|
||||
"desc": "{{type}}タイプの ポケモンしか 使えません",
|
||||
"desc_default": "選んだ タイプの ポケモンしか 使えません"
|
||||
"desc": "{{type}}タイプの ポケモンしか 使えません",
|
||||
"desc_default": "選んだ タイプの ポケモンしか 使えません"
|
||||
},
|
||||
"freshStart": {
|
||||
"name": "出直し",
|
||||
"shortName": "出直し",
|
||||
"desc": "ポケローグを 始めた ばかりの ような ままで ゲーム開始の 最初のパートナーしか 使えません",
|
||||
"desc": "ポケローグを 始めた ばかりの ような ままで ゲーム開始の スターターしか 使えません",
|
||||
"value.0": "オフ",
|
||||
"value.1": "オン"
|
||||
},
|
||||
"inverseBattle": {
|
||||
"name": "反転バトル",
|
||||
"shortName": "反バ",
|
||||
"desc": "タイプ相性が 反転で、なんの タイプも 「効果はなし」が ありません\n他の チャレンジの 実績が 無効に されます",
|
||||
"value.0": "オフ",
|
||||
"value.1": "オン"
|
||||
}
|
||||
|
@ -3,5 +3,5 @@
|
||||
"ball": "ボール",
|
||||
"pokemon": "ポケモン",
|
||||
"run": "にげる",
|
||||
"actionMessage": "{{pokemonName}}は どうする?"
|
||||
"actionMessage": "{{pokemonName}}は どうする?"
|
||||
}
|
@ -4,23 +4,23 @@
|
||||
"ultraTier": "超レア",
|
||||
"masterTier": "伝説",
|
||||
"defaultTier": "ふつう",
|
||||
"hatchWavesMessageSoon": "なかから おとが きこえてくる! もうすぐ うまれそう!",
|
||||
"hatchWavesMessageClose": "ときどき うごいている みたい。 うまれるまで もう ちょっとかな?",
|
||||
"hatchWavesMessageNotClose": "なにが うまれてくるのかな? うまれるまで まだまだ じかんが かかりそう。",
|
||||
"hatchWavesMessageLongTime": "この タマゴは うまれるまで かなり じかんが かかりそう。",
|
||||
"hatchWavesMessageSoon": "中から 音が 聞こえてくる! もうすぐ 生まれそう!",
|
||||
"hatchWavesMessageClose": "時々 動いている みたい。生まれるまで もう ちょっとかな?",
|
||||
"hatchWavesMessageNotClose": "なにが 生まれてくるのかな? 生まれるまで まだまだ 時間が かかりそう。",
|
||||
"hatchWavesMessageLongTime": "この タマゴは 生まれるまで かなり 時間が かかりそう。",
|
||||
"gachaTypeLegendary": "伝説確率アップ",
|
||||
"gachaTypeMove": "レアなタマゴわざ確率アップ",
|
||||
"gachaTypeMove": "レアなタマゴ技確率アップ",
|
||||
"gachaTypeShiny": "色違い確率アップ",
|
||||
"selectMachine": "ガチャマシンを選択",
|
||||
"notEnoughVouchers": "タマゴクーポンが足りません!",
|
||||
"tooManyEggs": "タマゴが一杯です!",
|
||||
"pull": "回引く",
|
||||
"pulls": "回引く",
|
||||
"sameSpeciesEgg": "{{species}}は このタマゴから うまれる!",
|
||||
"hatchFromTheEgg": "{{pokemonName}}は タマゴから うまれた!",
|
||||
"eggMoveUnlock": "タマゴわざ {{moveName}}を おぼえた!",
|
||||
"rareEggMoveUnlock": "レアなタマゴわざ {{moveName}}を おぼえた!!",
|
||||
"moveUPGacha": "わざ UP!",
|
||||
"sameSpeciesEgg": "{{species}}は このタマゴから 生まれる!",
|
||||
"hatchFromTheEgg": "{{pokemonName}}は タマゴから 生まれた!",
|
||||
"eggMoveUnlock": "タマゴ技: {{moveName}}を 覚えた!",
|
||||
"rareEggMoveUnlock": "レアなタマゴ技: {{moveName}}を 覚えた!!",
|
||||
"moveUPGacha": "技 UP!",
|
||||
"shinyUPGacha": "色違い UP!",
|
||||
"legendaryUPGacha": "UP!"
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
{
|
||||
"classic": "クラシック",
|
||||
"endless": "エンドレス",
|
||||
"endlessSpliced": "エンドレス (Spliced)",
|
||||
"endlessSpliced": "エンドレス(吸収合体)",
|
||||
"dailyRun": "デイリーラン",
|
||||
"unknown": "Unknown",
|
||||
"unknown": "???",
|
||||
"challenge": "チャレンジ"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"stats": "統計",
|
||||
"playTime": "プレー時間",
|
||||
"playTime": "プレイ時間",
|
||||
"totalBattles": "合計バトル数",
|
||||
"starters": "スターター数",
|
||||
"shinyStarters": "色違いスターター数",
|
||||
@ -12,27 +12,27 @@
|
||||
"dailyRunAttempts": "デイリーラン",
|
||||
"dailyRunWins": "デイリーラン勝利",
|
||||
"endlessRuns": "エンドレスラン",
|
||||
"highestWaveEndless": "エンドレス最高ウェーブ",
|
||||
"highestWaveEndless": "エンドレス最高波",
|
||||
"highestMoney": "最大貯金",
|
||||
"highestDamage": "最大ダメージ",
|
||||
"highestHPHealed": "最大HP回復",
|
||||
"pokemonEncountered": "遭遇したポケモン",
|
||||
"pokemonDefeated": "倒したポケモン",
|
||||
"pokemonCaught": "捕まえたポケモン",
|
||||
"eggsHatched": "ふかしたタマゴ",
|
||||
"subLegendsSeen": "見つけた順伝説",
|
||||
"subLegendsCaught": "捕まえた順伝説",
|
||||
"subLegendsHatched": "ふかした順伝説",
|
||||
"legendsSeen": "見つけた伝説",
|
||||
"legendsCaught": "捕まえた伝説",
|
||||
"legendsHatched": "ふかした伝説",
|
||||
"eggsHatched": "孵化したタマゴ",
|
||||
"subLegendsSeen": "見つけた順伝説ポケモン",
|
||||
"subLegendsCaught": "捕まえた準伝説ポケモン",
|
||||
"subLegendsHatched": "孵化した準伝説ポケモン",
|
||||
"legendsSeen": "見つけた伝説ポケモン",
|
||||
"legendsCaught": "捕まえた伝説ポケモン",
|
||||
"legendsHatched": "孵化した伝説ポケモン",
|
||||
"mythicalsSeen": "見つけた幻ポケモン",
|
||||
"mythicalsCaught": "捕まえた幻ポケモン",
|
||||
"mythicalsHatched": "ふかした幻ポケモン",
|
||||
"shiniesSeen": "見つけた色違い",
|
||||
"shiniesCaught": "捕まえた色違い",
|
||||
"shiniesHatched": "ふかした色違い",
|
||||
"pokemonFused": "合体したポケモン",
|
||||
"mythicalsHatched": "孵化した幻ポケモン",
|
||||
"shiniesSeen": "見つけた色違いポケモン",
|
||||
"shiniesCaught": "捕まえた色違いポケモン",
|
||||
"shiniesHatched": "孵化した色違いポケモン",
|
||||
"pokemonFused": "吸収合体したポケモン",
|
||||
"trainersDefeated": "倒したトレーナー",
|
||||
"eggsPulled": "引いたタマゴ",
|
||||
"rareEggsPulled": "引いたレアタマゴ",
|
||||
|
@ -2,19 +2,22 @@
|
||||
"GAME_SETTINGS": "設定",
|
||||
"ACHIEVEMENTS": "実績",
|
||||
"STATS": "統計",
|
||||
"RUN_HISTORY": "ラン歴",
|
||||
"EGG_LIST": "タマゴリスト",
|
||||
"EGG_GACHA": "タマゴガチャ",
|
||||
"MANAGE_DATA": "データ管理",
|
||||
"COMMUNITY": "コミュニティ",
|
||||
"SAVE_AND_QUIT": "保存して終了",
|
||||
"SAVE_AND_QUIT": "セーブして終了",
|
||||
"LOG_OUT": "ログアウト",
|
||||
"slot": "スロット {{slotNumber}}",
|
||||
"importSession": "セッションのインポート",
|
||||
"importSession": "セッションをインポート",
|
||||
"importSlotSelect": "インポート先の スロットを 選んでください",
|
||||
"exportSession": "セッションのエクスポート",
|
||||
"exportSession": "セッションをエクスポート",
|
||||
"exportSlotSelect": "エクスポート元の スロットを 選んでください",
|
||||
"importData": "データのインポート",
|
||||
"exportData": "データのエクスポート",
|
||||
"importRunHistory": "ラン歴をインポート",
|
||||
"exportRunHistory": "ラン歴をエクスポート",
|
||||
"importData": "データをインポート",
|
||||
"exportData": "データをエクスポート",
|
||||
"consentPreferences": "同意設定",
|
||||
"linkDiscord": "Discord連携",
|
||||
"unlinkDiscord": "Discord連携解除",
|
||||
@ -22,5 +25,5 @@
|
||||
"unlinkGoogle": "Google連携解除",
|
||||
"cancel": "キャンセル",
|
||||
"losingProgressionWarning": "戦闘開始からの データが 保存されません。\nよろしいですか?",
|
||||
"noEggs": "現在 タマゴを ふかしていません!"
|
||||
"noEggs": "現在は タマゴを 孵化していません!"
|
||||
}
|
@ -1,38 +1,55 @@
|
||||
{
|
||||
"cancel": "キャンセル",
|
||||
"continue": "つづきから",
|
||||
"loadGame": "ロードセーブ",
|
||||
"dailyRun": "日替わりラン(ベータ版)",
|
||||
"loadGame": "セーブを読み込む",
|
||||
"newGame": "はじめから",
|
||||
"username": "ユーザーめい",
|
||||
"settings": "設定",
|
||||
"selectGameMode": "ゲームモードを 選んでください。",
|
||||
"logInOrCreateAccount": "始めるには、ログイン、または 登録して ください。\nメールアドレスは 必要が ありません!",
|
||||
"username": "ユーザー名",
|
||||
"password": "パスワード",
|
||||
"login": "ログイン",
|
||||
"orUse": "Or use",
|
||||
"register": "かいいん とうろく",
|
||||
"emptyUsername": "ユーザー名は空にできません",
|
||||
"invalidLoginUsername": "入力したユーザー名は無効です",
|
||||
"invalidRegisterUsername": "ユーザー名には英文字、数字、アンダースコアのみを含める必要があります",
|
||||
"orUse": "他の\nログイン方法",
|
||||
"register": "登録",
|
||||
"emptyUsername": "ユーザー名を 空にする ことは できません",
|
||||
"invalidLoginUsername": "入力されたユーザー名は無効です",
|
||||
"invalidRegisterUsername": "ユーザー名には 英文字、 数字、 アンダースコアのみを 含くむ必要が あります",
|
||||
"invalidLoginPassword": "入力したパスワードは無効です",
|
||||
"invalidRegisterPassword": "パスワードは 6文字以上 でなければなりません",
|
||||
"usernameAlreadyUsed": "ユーザー名は既に使用されています",
|
||||
"accountNonExistent": "ユーザーは存在しません",
|
||||
"unmatchingPassword": "パスワードが一致しません",
|
||||
"passwordNotMatchingConfirmPassword": "パスワードは確認パスワードと一致する必要があります",
|
||||
"usernameAlreadyUsed": "入力したユーザー名は すでに 使用されています",
|
||||
"accountNonExistent": "入力したユーザーは 存在しません",
|
||||
"unmatchingPassword": "入力したパスワードが 一致しません",
|
||||
"passwordNotMatchingConfirmPassword": "パスワードは パスワード確認と 一致する 必要があります",
|
||||
"confirmPassword": "パスワード確認",
|
||||
"registrationAgeWarning": "登録することで、あなたが13歳以上であることを確認します。",
|
||||
"registrationAgeWarning": "登録では 13歳以上 であることを 確認します。",
|
||||
"backToLogin": "ログインへ",
|
||||
"failedToLoadSaveData": "保存データの読み込みに失敗しました。ページを再読み込みしてください。\nこれが続く場合は、管理者に連絡してください。",
|
||||
"sessionSuccess": "セッションが正常に読み込まれました。",
|
||||
"failedToLoadSession": "セッションデータを読み込むことができませんでした。\nデータが破損している可能性があります。",
|
||||
"boyOrGirl": "おとこのこ?\nそれとも おんなのこ?",
|
||||
"evolving": "…おや!?\n{{pokemonName}}のようすが…!",
|
||||
"stoppedEvolving": "{{pokemonName}}のへんかがとまった",
|
||||
"evolutionDone": "おめでとう!\n{{pokemonName}}は{{evolvedPokemonName}}にしんかした!",
|
||||
"dailyRankings": "ほんじつのランキング",
|
||||
"weeklyRankings": "しゅうのランキング",
|
||||
"failedToLoadSaveData": "セーブデータの 読み込みは 不可能でした。ページを 再読み込み してください。\n長い間に続く 場合は 管理者に 連絡してください。",
|
||||
"sessionSuccess": "セッションが 正常に 読み込まれました。",
|
||||
"failedToLoadSession": "セッションデータを 読み込むことが できませんでした。\nデータが 破損している 可能性が あります。",
|
||||
"boyOrGirl": "男の子?\nそれとも 女の子?",
|
||||
"evolving": "…おや!?\n{{pokemonName}}の 様子が…!",
|
||||
"stoppedEvolving": "あれ…? {{pokemonName}}の 変化が 止まった!",
|
||||
"pauseEvolutionsQuestion": "{{pokemonName}}の 進化を 休止しますか?\n後で 手持ち画面から 進化を また 可能にできます。",
|
||||
"evolutionsPaused": "{{pokemonName}}の 進化を 休止しました。",
|
||||
"evolutionDone": "おめでとう!\n{{pokemonName}}は {{evolvedPokemonName}}に 進化した!",
|
||||
"dailyRankings": "今日のランキング",
|
||||
"weeklyRankings": "今週のランキング",
|
||||
"noRankings": "ランキングなし",
|
||||
"positionIcon": "#",
|
||||
"loading": "よみこみちゅう…",
|
||||
"usernameScoreboard": "ユーザー名",
|
||||
"score": "スコア",
|
||||
"wave": "波",
|
||||
"loading": "読み込み中…",
|
||||
"loadingAsset": "読み込み中:{{assetName}}",
|
||||
"playersOnline": "オンラインのプレイヤー",
|
||||
"yes": "はい",
|
||||
"no": "いいえ"
|
||||
"no": "いいえ",
|
||||
"disclaimer": "免責",
|
||||
"disclaimerDescription": "このゲームは 未完成作品です。\nセーブデータの 損失を含める ゲーム性に関する 問題が 起きる可能性が あります。\nなお、ゲームは 予告なく変更される 可能性もあり、さらに更新され、完成されるとも 限りません。",
|
||||
"choosePokemon": "ポケモンを選ぶ",
|
||||
"renamePokemon": "ニックネームを変える",
|
||||
"rename": "変える",
|
||||
"nickname": "ニックネーム",
|
||||
"errorServerDown": "おや!\nサーバーとの 接続中に 問題が 発生しました。\nゲームは 自動的に 再接続されます から\nウィンドウは 開いたままに しておいても よろしいです。"
|
||||
}
|
@ -1,12 +1,12 @@
|
||||
{
|
||||
"transfer": "アイテム移行",
|
||||
"reroll": "選択肢変更",
|
||||
"lockRarities": "レア度の固定",
|
||||
"checkTeam": "チームを確認",
|
||||
"transferDesc": "ポケモンの 手持ちアイテムを 移行する",
|
||||
"lockRarities": "レア度を固定",
|
||||
"checkTeam": "手持ちを確認",
|
||||
"transferDesc": "手持ちポケモンの 持たせるアイテムを 移行する",
|
||||
"rerollDesc": "お金を 使って アイテムの 選択肢を 変更する",
|
||||
"lockRaritiesDesc": "選択肢を 変更するときの レア度を 固定する\n(選択肢変更金額を影響する)",
|
||||
"checkTeamDesc": "チームの 状態を 確認する\nフォルムチェンジアイテムを 有効・無効にする",
|
||||
"lockRaritiesDesc": "選択肢を 変更するときの レア度を 固定する\n(選択肢変更の価格は変わる)",
|
||||
"checkTeamDesc": "手持ちポケモンの 状態を 確認する\nフォルムチェンジアイテムを 有効・無効にする",
|
||||
"rerollCost": "{{formattedMoney}}円",
|
||||
"itemCost": "{{formattedMoney}}円"
|
||||
}
|
||||
|
@ -2,21 +2,22 @@
|
||||
"Stat": {
|
||||
"HP": "HP",
|
||||
"HPshortened": "HP",
|
||||
"ATK": "こうげき",
|
||||
"ATKshortened": "こうげき",
|
||||
"DEF": "ぼうぎょ",
|
||||
"DEFshortened": "ぼうぎょ",
|
||||
"SPATK": "とくこう",
|
||||
"SPATKshortened": "とくこう",
|
||||
"SPDEF": "とくぼう",
|
||||
"SPDEFshortened": "とくぼう",
|
||||
"SPD": "すばやさ",
|
||||
"SPDshortened": "すばやさ",
|
||||
"ACC": "めいちゅう",
|
||||
"EVA": "かいひ"
|
||||
"ATK": "攻撃",
|
||||
"ATKshortened": "攻撃",
|
||||
"DEF": "防御",
|
||||
"DEFshortened": "防御",
|
||||
"SPATK": "特攻",
|
||||
"SPATKshortened": "特攻",
|
||||
"SPDEF": "特防",
|
||||
"SPDEFshortened": "特防",
|
||||
"SPD": "素早さ",
|
||||
"SPDshortened": "素早さ",
|
||||
"ACC": "命中",
|
||||
"EVA": "回避",
|
||||
"HPStat": "HP"
|
||||
},
|
||||
"Type": {
|
||||
"UNKNOWN": "Unknown",
|
||||
"UNKNOWN": "???",
|
||||
"NORMAL": "ノーマル",
|
||||
"FIGHTING": "かくとう",
|
||||
"FLYING": "ひこう",
|
||||
|
@ -437,7 +437,7 @@
|
||||
"bronzor": "ドーミラー",
|
||||
"bronzong": "ドータクン",
|
||||
"bonsly": "ウソハチ",
|
||||
"mime_jr.": "マネネ",
|
||||
"mime_jr": "マネネ",
|
||||
"happiny": "ピンプク",
|
||||
"chatot": "ペラップ",
|
||||
"spiritomb": "ミカルゲ",
|
||||
@ -770,7 +770,7 @@
|
||||
"sandygast": "スナバァ",
|
||||
"palossand": "シロデスナ",
|
||||
"pyukumuku": "ナマコブシ",
|
||||
"type:_null": "タイプ:ヌル",
|
||||
"type_null": "タイプ:ヌル",
|
||||
"silvally": "シルヴァディ",
|
||||
"minior": "メテノ",
|
||||
"komala": "ネッコアラ",
|
||||
@ -863,7 +863,7 @@
|
||||
"obstagoon": "タチフサグマ",
|
||||
"perrserker": "ニャイキング",
|
||||
"cursola": "サニゴーン",
|
||||
"sirfetch_d": "ネギガナイト",
|
||||
"sirfetchd": "ネギガナイト",
|
||||
"mr_rime": "バリコオル",
|
||||
"runerigus": "デスバーン",
|
||||
"milcery": "マホミル",
|
||||
|
@ -6,12 +6,14 @@
|
||||
"audio": "音声",
|
||||
"gamepad": "コントローラー",
|
||||
"keyboard": "キーボード",
|
||||
"gameSpeed": "ゲームスピード",
|
||||
"hpBarSpeed": "HPバーの増減スピード",
|
||||
"expGainsSpeed": "EXPバーの増加スピード",
|
||||
"expPartyDisplay": "パーティの経験値取得表示",
|
||||
"gameSpeed": "ゲームの速さ",
|
||||
"hpBarSpeed": "HPバー増減の速さ",
|
||||
"expGainsSpeed": "経験値バー増加の速さ",
|
||||
"expPartyDisplay": "手持ちの経験値取得表示",
|
||||
"skipSeenDialogues": "もう見た話をスキップ",
|
||||
"battleStyle": "試合のルール",
|
||||
"enableRetries": "リトライを有効にする",
|
||||
"enableRetries": "再挑戦を有効にする",
|
||||
"hideIvs": "個体値スキャナーを隠す",
|
||||
"tutorials": "チュートリアル",
|
||||
"touchControls": "タッチ操作",
|
||||
"vibrations": "振動",
|
||||
@ -35,33 +37,71 @@
|
||||
"moneyFormat": "お金の表示形式",
|
||||
"damageNumbers": "ダメージ表示",
|
||||
"simple": "シンプル",
|
||||
"fancy": "Fancy",
|
||||
"fancy": "オシャレ",
|
||||
"abbreviated": "省略",
|
||||
"moveAnimations": "戦闘アニメ",
|
||||
"moveAnimations": "戦闘アニメーション",
|
||||
"showStatsOnLevelUp": "レベルアップ時のステータス表示",
|
||||
"candyUpgradeNotification": "飴アプグレ通知",
|
||||
"passivesOnly": "パッシブのみ",
|
||||
"candyUpgradeDisplay": "飴アプグレ表示",
|
||||
"icon": "アイコン",
|
||||
"animation": "アニメーション",
|
||||
"moveInfo": "技の情報表示",
|
||||
"moveInfo": "技情報",
|
||||
"showMovesetFlyout": "技情報表示",
|
||||
"showArenaFlyout": "戦場情報表示",
|
||||
"showTimeOfDayWidget": "時刻指標",
|
||||
"timeOfDayAnimation": "時刻指標アニメーション",
|
||||
"bounce": "跳ねる",
|
||||
"timeOfDay_back": "跳ね返る",
|
||||
"spriteSet": "スプライト設定",
|
||||
"consistent": "一貫",
|
||||
"mixedAnimated": "アニメーションミックス",
|
||||
"fusionPaletteSwaps": "吸収合体ポケモンの色違い",
|
||||
"playerGender": "プレイヤーの性別",
|
||||
"typeHints": "相性のヒント",
|
||||
"typeHints": "タイプ相性ヒント",
|
||||
"masterVolume": "マスターボリューム",
|
||||
"bgmVolume": "BGMのボリューム",
|
||||
"seVolume": "SEのボリューム",
|
||||
"bgmVolume": "BGMボリューム",
|
||||
"fieldVolume": "フィールドボリューム",
|
||||
"seVolume": "SEボリューム",
|
||||
"uiVolume": "UIボリューム",
|
||||
"musicPreference": "BGM設定",
|
||||
"mixed": "ミックス",
|
||||
"gamepadPleasePlug": "コントローラーを 接続してください\nまたは、ボタンを 押してください",
|
||||
"delete": "削除",
|
||||
"keyboardPleasePress": "キーを押してください",
|
||||
"reset": "リセット",
|
||||
"requireReload": "再読み込みが必要",
|
||||
"action": "決定",
|
||||
"back": "戻る",
|
||||
"pressToBind": "押下でキーバインド",
|
||||
"pressButton": "ボタンを押してください",
|
||||
"buttonUp": "上",
|
||||
"buttonDown": "下",
|
||||
"buttonLeft": "左",
|
||||
"buttonRight": "右",
|
||||
"buttonAction": "決定",
|
||||
"buttonMenu": "メニュー",
|
||||
"buttonSubmit": "Submit",
|
||||
"buttonSubmit": "提出",
|
||||
"buttonCancel": "キャンセル",
|
||||
"alt": " (代替)",
|
||||
"buttonStats": "能力変化表示",
|
||||
"buttonCycleForm": "フォルム変更",
|
||||
"buttonCycleShiny": "色違い変更",
|
||||
"buttonCycleGender": "性別変更",
|
||||
"buttonCycleAbility": "特性変更",
|
||||
"buttonCycleNature": "性格変更",
|
||||
"buttonCycleVariant": "色変更",
|
||||
"buttonSpeedUp": "速さを上げる",
|
||||
"buttonSlowDown": "速さを下げる",
|
||||
"alt": "(代替)",
|
||||
"mute": "ミュート",
|
||||
"controller": "コントローラー",
|
||||
"gamepadSupport": "コントローラーサポート"
|
||||
"gamepadSupport": "コントローラーサポート",
|
||||
"showBgmBar": "BGMの名前を表示",
|
||||
"moveTouchControls": "タッチ移動操作",
|
||||
"shopOverlayOpacity": "ショップオーバレイ不透明度",
|
||||
"shopCursorTarget": "ショップカーソル初位置",
|
||||
"items": "アイテム",
|
||||
"reroll": "選択肢変更",
|
||||
"shop": "ショップ",
|
||||
"checkTeam": "手持ちを確認"
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"confirmStartTeam": "この条件で チャレンジを 始めますか?",
|
||||
"confirmStartTeam": "この手持ちで 始めますか?",
|
||||
"confirmExit": "終了しますか?",
|
||||
"invalidParty": "手持ちは チャレンジの 条件で 認められない!",
|
||||
"gen1": "1世代",
|
||||
@ -16,8 +16,8 @@
|
||||
"passive": "パッシブ:",
|
||||
"nature": "性格:",
|
||||
"eggMoves": "タマゴ技",
|
||||
"start": "始める",
|
||||
"addToParty": "手持ちに入れる",
|
||||
"removeFromParty": "手持ちから除く",
|
||||
"toggleIVs": "個体値を表示",
|
||||
"manageMoves": "技を並び替える",
|
||||
"manageNature": "性格を変える",
|
||||
@ -36,9 +36,10 @@
|
||||
"cycleAbility": ": 特性変更",
|
||||
"cycleNature": ": 性格変更",
|
||||
"cycleVariant": ": 色変更",
|
||||
"goFilter": ": フィルタ へ ",
|
||||
"enablePassive": "パッシブ - オン",
|
||||
"disablePassive": "パッシブ - オフ",
|
||||
"locked": "開放されていない",
|
||||
"locked": "非開放",
|
||||
"disabled": "無効",
|
||||
"uncaught": "捕まっていない"
|
||||
}
|
@ -225,7 +225,7 @@
|
||||
"name": "독침붕처럼 쏴라"
|
||||
},
|
||||
"MONO_GHOST": {
|
||||
"name": "누굴 부를 거야?"
|
||||
"name": "무서운 게 딱 좋아!"
|
||||
},
|
||||
"MONO_STEEL": {
|
||||
"name": "강철 심장"
|
||||
|
@ -47,5 +47,11 @@
|
||||
"tailwindOnRemovePlayer": "우리 편의\n순풍이 멈췄다!",
|
||||
"tailwindOnRemoveEnemy": "상대의\n순풍이 멈췄다!",
|
||||
"happyHourOnAdd": "모두 행복한 기분에\n휩싸였다!",
|
||||
"happyHourOnRemove": "기분이 원래대로 돌아왔다."
|
||||
"happyHourOnRemove": "기분이 원래대로 돌아왔다.",
|
||||
"safeguardOnAdd": "필드 전체가 신비의 베일에 둘러싸였다!",
|
||||
"safeguardOnAddPlayer": "우리 편은 신비의 베일에 둘러싸였다!",
|
||||
"safeguardOnAddEnemy": "상대 편은 신비의 베일에 둘러싸였다!",
|
||||
"safeguardOnRemove": "필드를 감싸던 신비의 베일이 없어졌다!",
|
||||
"safeguardOnRemovePlayer": "우리 편을 감싸던 신비의 베일이 없어졌다!",
|
||||
"safeguardOnRemoveEnemy": "상대 편을 감싸던 신비의 베일이 없어졌다!"
|
||||
}
|
@ -61,5 +61,6 @@
|
||||
"suppressAbilities": "{{pokemonName}}의\n특성이 효과를 발휘하지 못하게 되었다!",
|
||||
"revivalBlessing": "{{pokemonName}}[[는]]\n정신을 차려 싸울 수 있게 되었다!",
|
||||
"swapArenaTags": "{{pokemonName}}[[는]]\n서로의 필드 효과를 교체했다!",
|
||||
"exposedMove": "{{pokemonName}}[[는]]\n{{targetPokemonName}}의 정체를 꿰뚫어 보았다!"
|
||||
"exposedMove": "{{pokemonName}}[[는]]\n{{targetPokemonName}}의 정체를 꿰뚫어 보았다!",
|
||||
"safeguard": "{{targetName}}[[는]] 신비의 베일이 지켜 주고 있다!"
|
||||
}
|
@ -47,5 +47,11 @@
|
||||
"tailwindOnRemovePlayer": "O Tailwind de sua equipe acabou!",
|
||||
"tailwindOnRemoveEnemy": "O Tailwind da equipe adversária acabou!",
|
||||
"happyHourOnAdd": "Todos foram envolvidos por uma atmosfera alegre!",
|
||||
"happyHourOnRemove": "A atmosfera retornou ao normal."
|
||||
"happyHourOnRemove": "A atmosfera retornou ao normal.",
|
||||
"safeguardOnAdd": "O campo de batalha está envolto num véu místico!",
|
||||
"safeguardOnAddPlayer": "Sua equipe se envolveu num véu místico!",
|
||||
"safeguardOnAddEnemy": "A equipe adversária se envolveu num véu místico!",
|
||||
"safeguardOnRemove": "O campo não está mais protegido por Safeguard!",
|
||||
"safeguardOnRemovePlayer": "Sua equipe não está mais protegido por Safeguard!",
|
||||
"safeguardOnRemoveEnemy": "A equipe adversária não está mais protegido por Safeguard!"
|
||||
}
|
@ -25,5 +25,5 @@
|
||||
"unlinkGoogle": "Desconectar Google",
|
||||
"cancel": "Cancelar",
|
||||
"losingProgressionWarning": "Você vai perder todo o progresso desde o início da batalha. Confirmar?",
|
||||
"noEggs": "Você não está chocando\nnenhum ovo no momento!"
|
||||
"noEggs": "Você não está chocando nenhum ovo\nno momento!"
|
||||
}
|
@ -61,5 +61,6 @@
|
||||
"suppressAbilities": "A habilidade de {{pokemonName}}\nfoi suprimida!",
|
||||
"revivalBlessing": "{{pokemonName}} foi reanimado!",
|
||||
"swapArenaTags": "{{pokemonName}} trocou os efeitos de batalha que afetam cada lado do campo!",
|
||||
"exposedMove": "{{pokemonName}} identificou\n{{targetPokemonName}}!"
|
||||
"exposedMove": "{{pokemonName}} identificou\n{{targetPokemonName}}!",
|
||||
"safeguard": "{{targetName}} está protegido por Safeguard!"
|
||||
}
|
@ -13,5 +13,32 @@
|
||||
"metFragment": {
|
||||
"normal": "encontrado no Nv.{{level}},\n{{biome}}.",
|
||||
"apparently": "aparentemente encontrado no Nv.{{level}},\n{{biome}}."
|
||||
},
|
||||
"natureFragment": {
|
||||
"Hardy": "{{nature}}",
|
||||
"Lonely": "{{nature}}",
|
||||
"Brave": "{{nature}}",
|
||||
"Adamant": "{{nature}}",
|
||||
"Naughty": "{{nature}}",
|
||||
"Bold": "{{nature}}",
|
||||
"Docile": "{{nature}}",
|
||||
"Relaxed": "{{nature}}",
|
||||
"Impish": "{{nature}}",
|
||||
"Lax": "{{nature}}",
|
||||
"Timid": "{{nature}}",
|
||||
"Hasty": "{{nature}}",
|
||||
"Serious": "{{nature}}",
|
||||
"Jolly": "{{nature}}",
|
||||
"Naive": "{{nature}}",
|
||||
"Modest": "{{nature}}",
|
||||
"Mild": "{{nature}}",
|
||||
"Quiet": "{{nature}}",
|
||||
"Bashful": "{{nature}}",
|
||||
"Rash": "{{nature}}",
|
||||
"Calm": "{{nature}}",
|
||||
"Gentle": "{{nature}}",
|
||||
"Sassy": "{{nature}}",
|
||||
"Careful": "{{nature}}",
|
||||
"Quirky": "{{nature}}"
|
||||
}
|
||||
}
|
@ -1,10 +1,10 @@
|
||||
{
|
||||
"intro": "Bem-vindo ao PokéRogue! Este é um jogo Pokémon feito por fãs focado em batalhas com elementos roguelite.\n$Este jogo não é monetizado e não reivindicamos propriedade de Pokémon nem dos ativos protegidos\n$por direitos autorais usados.\n$O jogo é um trabalho em andamento, mas é totalmente jogável.\n$Para relatórios de bugs, use a comunidade no Discord.\n$Se o jogo estiver rodando lentamente, certifique-se de que a 'Aceleração de hardware' esteja ativada \n$nas configurações do seu navegador.",
|
||||
"intro": "Bem-vindo ao PokéRogue!\n$Este é um fangame Pokémon focado em batalhas com elementos roguelite.\n$Este jogo não é monetizado e não reivindicamos propriedade do Pokémon nem dos ativos protegidos$por direitos autorais usados.\n$O jogo é um trabalho em andamento,\nmas totalmente jogável.\n$Para relatórios de bugs, use a comunidade do Discord.\n$Se o jogo rodar lentamente, certifique-se de que\na 'Aceleração de Hardware' esteja ativada$nas configurações do seu navegador.",
|
||||
"accessMenu": "Para acessar o menu, pressione M ou Esc.\n$O menu contém configurações e diversas funções.",
|
||||
"menu": "A partir deste menu, você pode acessar as configurações. \n$Nas configurações, você pode alterar a velocidade do jogo,\n$o estilo da janela, entre outras opções. \n$Existem também vários outros recursos disponíveis aqui.\n$Não deixe de conferir todos eles!",
|
||||
"starterSelect": "Aqui você pode escolher seus iniciais apertando a tecla Z ou\na Barra de Espaço.\n$Esses serão os primeiro Pokémon da sua equipe.\n$Cada inicial tem seu custo. Sua equipe pode ter até 6\nmembros, desde que a soma dos custos não ultrapasse 10. \n$Você pode escolher o gênero, a habilidade\ne até a forma do seu inicial.\n$Essas opções dependem das variantes dessa\nespécie que você já capturou ou chocou. \n$Os IVs de cada inicial são os melhores de todos os Pokémon\ndaquela espécie que você já capturou ou chocou.\n$Sempre capture vários Pokémon de várias espécies!",
|
||||
"menu": "A partir deste menu, você pode\\nacessar as configurações.\n$A partir das configurações, você\npode alterar a velocidade do jogo,\n$o estilo da janela e outras opções.\n$Há também vários outros recursos aqui.\nCertifique-se de verificar todos eles!",
|
||||
"starterSelect": "Nesta tela, você pode selecionar seus iniciais\npressionando Z ou a barra de espaço.\n$Esses serão os primeiros membros da sua equipe.\n$Cada inicial tem um custo. Sua equipe pode ter até 6 membros,\ndesde que desde que o custo total não exceda 10.\n$Você pode escolher o gênero, a habilidade\ne até a forma do seu inicial.\n$Essas opções dependem das variantes dessa\nespécie que você já capturou ou chocou.\n$Os IVs de cada inicial são os melhores de todos os Pokémon\ndaquela espécie que você já capturou ou chocou.\n$Sempre capture vários Pokémon de todas as espécies!",
|
||||
"pokerus": "Todo dia, 3 Pokémon iniciais ficam com uma borda roxa.\n$Caso veja um inicial que você possui com uma dessa, tente\nadicioná-lo a sua equipe. Lembre-se de olhar seu sumário!",
|
||||
"statChange": "As mudanças de atributos se mantém após a batalha desde que o Pokémon não seja trocado.\n$Seus Pokémon voltam a suas Poké Bolas antes de batalhas contra treinadores e de entrar em um novo bioma.\n$Para ver as mudanças de atributos dos Pokémon em campo, mantena C ou Shift pressionado durante a batalha.",
|
||||
"selectItem": "Após cada batalha, você pode escolher entre 3 itens aleatórios.\n$Você pode escolher apenas um deles.\n$Esses itens variam entre consumíveis, itens de segurar e itens passivos permanentes.\n$A maioria dos efeitos de itens não consumíveis podem ser acumulados.\n$Alguns itens só aparecerão se puderem ser usados, como os itens de evolução.\n$Você também pode transferir itens de segurar entre os Pokémon utilizando a opção \"Alterar\".\n$A opção de transferir irá aparecer no canto inferior direito assim que você obter um item de segurar.\n$Você pode comprar itens consumíveis com dinheiro, e sua variedade aumentará conforme você for mais longe.\n$Certifique-se de comprá-los antes de escolher seu item aleatório. Ao escolhê-lo, a próxima batalha começará.",
|
||||
"eggGacha": "Aqui você pode trocar seus vouchers\npor ovos de Pokémon.\n$Ovos ficam mais próximos de chocar após cada batalha.\nOvos mais raros demoram mais para chocar.\n$Pokémon chocados não serão adicionados a sua equipe,\nmas sim aos seus iniciais.\n$Pokémon chocados geralmente possuem IVs melhores\nque Pokémon selvagens.\n$Alguns Pokémon só podem ser obtidos através de seus ovos.\n$Temos 3 máquinas, cada uma com seu bônus específico,\nentão escolha a que mais lhe convém!"
|
||||
"eggGacha": "Nesta tela, você pode trocar seus vouchers por ovos\nde Pokémon.\n$Ovos ficam mais próximos de chocar após cada batalha.\nOvos mais raros demoram mais tempo para chocar.\n$Pokémon chocados não serão adicionados a sua equipe,\nmas sim aos seus iniciais.\n$Pokémon chocados de ovos geralmente têm IVs melhores\ndo que Pokémon selvagens.\n$Alguns Pokémon só podem ser obtidos através de ovos.\n$Existem 3 máquinas para usar com diferentes bônus, então\nescolha a que mais lhe convém!"
|
||||
}
|
||||
|
@ -47,5 +47,11 @@
|
||||
"tailwindOnRemovePlayer": "我方的顺风停止了!",
|
||||
"tailwindOnRemoveEnemy": "敌方的顺风停止了!",
|
||||
"happyHourOnAdd": "大家被欢乐的\n气氛包围了!",
|
||||
"happyHourOnRemove": "气氛回复到平常了。"
|
||||
"happyHourOnRemove": "气氛回复到平常了。",
|
||||
"safeguardOnAdd": "整个场地被\n神秘之幕包围了!",
|
||||
"safeguardOnAddPlayer": "我方被\n神秘之幕包围了!",
|
||||
"safeguardOnAddEnemy": "对手被\n神秘之幕包围了!",
|
||||
"safeguardOnRemove": "包围整个场地的\n神秘之幕消失了!",
|
||||
"safeguardOnRemovePlayer": "包围我方的\n神秘之幕消失了!",
|
||||
"safeguardOnRemoveEnemy": "包围对手的\n神秘之幕消失了!"
|
||||
}
|
@ -61,5 +61,6 @@
|
||||
"suppressAbilities": "{{pokemonName}}的特性\n变得无效了!",
|
||||
"revivalBlessing": "{{pokemonName}}复活了!",
|
||||
"swapArenaTags": "{{pokemonName}}\n交换了双方的场地效果!",
|
||||
"exposedMove": "{{pokemonName}}识破了\n{{targetPokemonName}}的原型!"
|
||||
"exposedMove": "{{pokemonName}}识破了\n{{targetPokemonName}}的原型!",
|
||||
"safeguard": "{{targetName}}\n正受到神秘之幕的保护!"
|
||||
}
|
@ -1,5 +1,11 @@
|
||||
{
|
||||
"noCritOnAddPlayer": "{{moveName}}保護了你的\n隊伍不被擊中要害!",
|
||||
"noCritOnAddEnemy": "{{moveName}}保護了對方的\n隊伍不被擊中要害!",
|
||||
"noCritOnRemove": "{{pokemonNameWithAffix}}的{{moveName}}\n效果消失了!"
|
||||
"noCritOnRemove": "{{pokemonNameWithAffix}}的{{moveName}}\n效果消失了!",
|
||||
"safeguardOnAdd": "整個場地被\n神秘之幕包圍了!",
|
||||
"safeguardOnAddPlayer": "我方被\n神秘之幕包圍了!",
|
||||
"safeguardOnAddEnemy": "對手被\n神秘之幕包圍了!",
|
||||
"safeguardOnRemove": "包圍整個場地的\n神秘之幕消失了!",
|
||||
"safeguardOnRemovePlayer": "包圍我方的\n神秘之幕消失了!",
|
||||
"safeguardOnRemoveEnemy": "包圍對手的\n神秘之幕消失了!"
|
||||
}
|
@ -61,5 +61,6 @@
|
||||
"suppressAbilities": "{{pokemonName}}的特性\n變得無效了!",
|
||||
"revivalBlessing": "{{pokemonName}}復活了!",
|
||||
"swapArenaTags": "{{pokemonName}}\n交換了雙方的場地效果!",
|
||||
"exposedMove": "{{pokemonName}}識破了\n{{targetPokemonName}}的原形!"
|
||||
"exposedMove": "{{pokemonName}}識破了\n{{targetPokemonName}}的原形!",
|
||||
"safeguard": "{{targetName}}\n正受到神秘之幕的保護!"
|
||||
}
|
@ -2193,7 +2193,7 @@ export class ShinyRateBoosterModifier extends PersistentModifier {
|
||||
}
|
||||
|
||||
apply(args: any[]): boolean {
|
||||
(args[0] as Utils.IntegerHolder).value *= Math.pow(2, 2 + this.getStackCount());
|
||||
(args[0] as Utils.IntegerHolder).value *= Math.pow(2, 1 + this.getStackCount());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -23,12 +23,6 @@ export class BattleEndPhase extends BattlePhase {
|
||||
this.scene.unshiftPhase(new GameOverPhase(this.scene, true));
|
||||
}
|
||||
|
||||
for (const pokemon of this.scene.getField()) {
|
||||
if (pokemon) {
|
||||
pokemon.resetBattleSummonData();
|
||||
}
|
||||
}
|
||||
|
||||
for (const pokemon of this.scene.getParty().filter(p => p.isAllowedInBattle())) {
|
||||
applyPostBattleAbAttrs(PostBattleAbAttr, pokemon);
|
||||
}
|
||||
|
@ -1,21 +1,18 @@
|
||||
import BattleScene from "#app/battle-scene.js";
|
||||
import { TurnCommand, BattleType } from "#app/battle.js";
|
||||
import { applyCheckTrappedAbAttrs, CheckTrappedAbAttr } from "#app/data/ability.js";
|
||||
import { TrappedTag, EncoreTag } from "#app/data/battler-tags.js";
|
||||
import { MoveTargetSet, getMoveTargets } from "#app/data/move.js";
|
||||
import { speciesStarters } from "#app/data/pokemon-species.js";
|
||||
import { Type } from "#app/data/type.js";
|
||||
import { Abilities } from "#app/enums/abilities.js";
|
||||
import { BattlerTagType } from "#app/enums/battler-tag-type.js";
|
||||
import { Biome } from "#app/enums/biome.js";
|
||||
import { Moves } from "#app/enums/moves.js";
|
||||
import { PokeballType } from "#app/enums/pokeball.js";
|
||||
import { FieldPosition, PlayerPokemon } from "#app/field/pokemon.js";
|
||||
import { getPokemonNameWithAffix } from "#app/messages.js";
|
||||
import { Command } from "#app/ui/command-ui-handler.js";
|
||||
import { Mode } from "#app/ui/ui.js";
|
||||
import BattleScene from "#app/battle-scene";
|
||||
import { TurnCommand, BattleType } from "#app/battle";
|
||||
import { TrappedTag, EncoreTag } from "#app/data/battler-tags";
|
||||
import { MoveTargetSet, getMoveTargets } from "#app/data/move";
|
||||
import { speciesStarters } from "#app/data/pokemon-species";
|
||||
import { Abilities } from "#app/enums/abilities";
|
||||
import { BattlerTagType } from "#app/enums/battler-tag-type";
|
||||
import { Biome } from "#app/enums/biome";
|
||||
import { Moves } from "#app/enums/moves";
|
||||
import { PokeballType } from "#app/enums/pokeball";
|
||||
import { FieldPosition, PlayerPokemon } from "#app/field/pokemon";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
import { Command } from "#app/ui/command-ui-handler";
|
||||
import { Mode } from "#app/ui/ui";
|
||||
import i18next from "i18next";
|
||||
import * as Utils from "#app/utils.js";
|
||||
import { FieldPhase } from "./field-phase";
|
||||
import { SelectTargetPhase } from "./select-target-phase";
|
||||
|
||||
@ -77,7 +74,6 @@ export class CommandPhase extends FieldPhase {
|
||||
|
||||
handleCommand(command: Command, cursor: integer, ...args: any[]): boolean {
|
||||
const playerPokemon = this.scene.getPlayerField()[this.fieldIndex];
|
||||
const enemyField = this.scene.getEnemyField();
|
||||
let success: boolean;
|
||||
|
||||
switch (command) {
|
||||
@ -184,14 +180,9 @@ export class CommandPhase extends FieldPhase {
|
||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||
}, null, true);
|
||||
} else {
|
||||
const trapTag = playerPokemon.findTag(t => t instanceof TrappedTag) as TrappedTag;
|
||||
const trapped = new Utils.BooleanHolder(false);
|
||||
const batonPass = isSwitch && args[0] as boolean;
|
||||
const trappedAbMessages: string[] = [];
|
||||
if (!batonPass) {
|
||||
enemyField.forEach(enemyPokemon => applyCheckTrappedAbAttrs(CheckTrappedAbAttr, enemyPokemon, trapped, playerPokemon, trappedAbMessages, true));
|
||||
}
|
||||
if (batonPass || (!trapTag && !trapped.value)) {
|
||||
if (batonPass || !playerPokemon.isTrapped(trappedAbMessages)) {
|
||||
this.scene.currentBattle.turnCommands[this.fieldIndex] = isSwitch
|
||||
? { command: Command.POKEMON, cursor: cursor, args: args }
|
||||
: { command: Command.RUN };
|
||||
@ -199,14 +190,27 @@ export class CommandPhase extends FieldPhase {
|
||||
if (!isSwitch && this.fieldIndex) {
|
||||
this.scene.currentBattle.turnCommands[this.fieldIndex - 1]!.skip = true;
|
||||
}
|
||||
} else if (trapTag) {
|
||||
if (trapTag.sourceMove === Moves.INGRAIN && trapTag.sourceId && this.scene.getPokemonById(trapTag.sourceId)?.isOfType(Type.GHOST)) {
|
||||
success = true;
|
||||
} else if (trappedAbMessages.length > 0) {
|
||||
if (!isSwitch) {
|
||||
this.scene.ui.setMode(Mode.MESSAGE);
|
||||
}
|
||||
this.scene.ui.showText(trappedAbMessages[0], null, () => {
|
||||
this.scene.ui.showText("", 0);
|
||||
if (!isSwitch) {
|
||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||
}
|
||||
}, null, true);
|
||||
} else {
|
||||
const trapTag = playerPokemon.getTag(TrappedTag);
|
||||
|
||||
// trapTag should be defined at this point, but just in case...
|
||||
if (!trapTag) {
|
||||
this.scene.currentBattle.turnCommands[this.fieldIndex] = isSwitch
|
||||
? { command: Command.POKEMON, cursor: cursor, args: args }
|
||||
: { command: Command.RUN };
|
||||
break;
|
||||
}
|
||||
|
||||
if (!isSwitch) {
|
||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||
this.scene.ui.setMode(Mode.MESSAGE);
|
||||
@ -224,16 +228,6 @@ export class CommandPhase extends FieldPhase {
|
||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||
}
|
||||
}, null, true);
|
||||
} else if (trapped.value && trappedAbMessages.length > 0) {
|
||||
if (!isSwitch) {
|
||||
this.scene.ui.setMode(Mode.MESSAGE);
|
||||
}
|
||||
this.scene.ui.showText(trappedAbMessages[0], null, () => {
|
||||
this.scene.ui.showText("", 0);
|
||||
if (!isSwitch) {
|
||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||
}
|
||||
}, null, true);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1,9 +1,6 @@
|
||||
import BattleScene from "#app/battle-scene.js";
|
||||
import { BattlerIndex } from "#app/battle.js";
|
||||
import { applyCheckTrappedAbAttrs, CheckTrappedAbAttr } from "#app/data/ability.js";
|
||||
import { TrappedTag } from "#app/data/battler-tags.js";
|
||||
import { Command } from "#app/ui/command-ui-handler.js";
|
||||
import * as Utils from "#app/utils.js";
|
||||
import BattleScene from "#app/battle-scene";
|
||||
import { BattlerIndex } from "#app/battle";
|
||||
import { Command } from "#app/ui/command-ui-handler";
|
||||
import { FieldPhase } from "./field-phase";
|
||||
|
||||
/**
|
||||
@ -45,10 +42,7 @@ export class EnemyCommandPhase extends FieldPhase {
|
||||
if (trainer && !enemyPokemon.getMoveQueue().length) {
|
||||
const opponents = enemyPokemon.getOpponents();
|
||||
|
||||
const trapTag = enemyPokemon.findTag(t => t instanceof TrappedTag) as TrappedTag;
|
||||
const trapped = new Utils.BooleanHolder(false);
|
||||
opponents.forEach(playerPokemon => applyCheckTrappedAbAttrs(CheckTrappedAbAttr, playerPokemon, trapped, enemyPokemon, [""], true));
|
||||
if (!trapTag && !trapped.value) {
|
||||
if (!enemyPokemon.isTrapped()) {
|
||||
const partyMemberScores = trainer.getPartyMemberMatchupScores(enemyPokemon.trainerSlot, true);
|
||||
|
||||
if (partyMemberScores.length) {
|
||||
|
@ -1,42 +1,9 @@
|
||||
import { BattlerIndex } from "#app/battle.js";
|
||||
import { TrickRoomTag } from "#app/data/arena-tag.js";
|
||||
import { Stat } from "#app/enums/stat.js";
|
||||
import Pokemon from "#app/field/pokemon.js";
|
||||
import { BattlePhase } from "./battle-phase";
|
||||
import * as Utils from "#app/utils.js";
|
||||
import Pokemon from "#app/field/pokemon";
|
||||
|
||||
type PokemonFunc = (pokemon: Pokemon) => void;
|
||||
|
||||
export abstract class FieldPhase extends BattlePhase {
|
||||
getOrder(): BattlerIndex[] {
|
||||
const playerField = this.scene.getPlayerField().filter(p => p.isActive()) as Pokemon[];
|
||||
const enemyField = this.scene.getEnemyField().filter(p => p.isActive()) as Pokemon[];
|
||||
|
||||
// We shuffle the list before sorting so speed ties produce random results
|
||||
let orderedTargets: Pokemon[] = playerField.concat(enemyField);
|
||||
// We seed it with the current turn to prevent an inconsistency where it
|
||||
// was varying based on how long since you last reloaded
|
||||
this.scene.executeWithSeedOffset(() => {
|
||||
orderedTargets = Utils.randSeedShuffle(orderedTargets);
|
||||
}, this.scene.currentBattle.turn, this.scene.waveSeed);
|
||||
|
||||
orderedTargets.sort((a: Pokemon, b: Pokemon) => {
|
||||
const aSpeed = a?.getBattleStat(Stat.SPD) || 0;
|
||||
const bSpeed = b?.getBattleStat(Stat.SPD) || 0;
|
||||
|
||||
return bSpeed - aSpeed;
|
||||
});
|
||||
|
||||
const speedReversed = new Utils.BooleanHolder(false);
|
||||
this.scene.arena.applyTags(TrickRoomTag, speedReversed);
|
||||
|
||||
if (speedReversed.value) {
|
||||
orderedTargets = orderedTargets.reverse();
|
||||
}
|
||||
|
||||
return orderedTargets.map(t => t.getFieldIndex() + (!t.isPlayer() ? BattlerIndex.ENEMY : 0));
|
||||
}
|
||||
|
||||
executeForAll(func: PokemonFunc): void {
|
||||
const field = this.scene.getField(true).filter(p => p.summonData);
|
||||
field.forEach(pokemon => func(pokemon));
|
||||
|
@ -1,9 +1,9 @@
|
||||
import BattleScene from "#app/battle-scene.js";
|
||||
import { BattlerIndex } from "#app/battle.js";
|
||||
import { applyAbAttrs, RedirectMoveAbAttr, BlockRedirectAbAttr, IncreasePpAbAttr, applyPreAttackAbAttrs, PokemonTypeChangeAbAttr, applyPostMoveUsedAbAttrs, PostMoveUsedAbAttr } from "#app/data/ability.js";
|
||||
import { applyAbAttrs, applyPostMoveUsedAbAttrs, applyPreAttackAbAttrs, BlockRedirectAbAttr, IncreasePpAbAttr, PokemonTypeChangeAbAttr, PostMoveUsedAbAttr, RedirectMoveAbAttr } from "#app/data/ability.js";
|
||||
import { CommonAnim } from "#app/data/battle-anims.js";
|
||||
import { CenterOfAttentionTag, BattlerTagLapseType } from "#app/data/battler-tags.js";
|
||||
import { MoveFlags, BypassRedirectAttr, allMoves, CopyMoveAttr, applyMoveAttrs, BypassSleepAttr, HealStatusEffectAttr, ChargeAttr, PreMoveMessageAttr } from "#app/data/move.js";
|
||||
import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags.js";
|
||||
import { allMoves, applyMoveAttrs, BypassRedirectAttr, BypassSleepAttr, ChargeAttr, CopyMoveAttr, HealStatusEffectAttr, MoveFlags, PreMoveMessageAttr } from "#app/data/move.js";
|
||||
import { SpeciesFormChangePreMoveTrigger } from "#app/data/pokemon-forms.js";
|
||||
import { getStatusEffectActivationText, getStatusEffectHealText } from "#app/data/status-effect.js";
|
||||
import { Type } from "#app/data/type.js";
|
||||
@ -13,10 +13,10 @@ import { BattlerTagType } from "#app/enums/battler-tag-type.js";
|
||||
import { Moves } from "#app/enums/moves.js";
|
||||
import { StatusEffect } from "#app/enums/status-effect.js";
|
||||
import { MoveUsedEvent } from "#app/events/battle-scene.js";
|
||||
import Pokemon, { PokemonMove, MoveResult, TurnMove } from "#app/field/pokemon.js";
|
||||
import Pokemon, { MoveResult, PokemonMove, TurnMove } from "#app/field/pokemon.js";
|
||||
import { getPokemonNameWithAffix } from "#app/messages.js";
|
||||
import i18next from "i18next";
|
||||
import * as Utils from "#app/utils.js";
|
||||
import i18next from "i18next";
|
||||
import { BattlePhase } from "./battle-phase";
|
||||
import { CommonAnimPhase } from "./common-anim-phase";
|
||||
import { MoveEffectPhase } from "./move-effect-phase";
|
||||
@ -38,8 +38,8 @@ export class MovePhase extends BattlePhase {
|
||||
this.pokemon = pokemon;
|
||||
this.targets = targets;
|
||||
this.move = move;
|
||||
this.followUp = !!followUp;
|
||||
this.ignorePp = !!ignorePp;
|
||||
this.followUp = followUp ?? false;
|
||||
this.ignorePp = ignorePp ?? false;
|
||||
this.failed = false;
|
||||
this.cancelled = false;
|
||||
}
|
||||
@ -194,7 +194,7 @@ export class MovePhase extends BattlePhase {
|
||||
return this.end();
|
||||
}
|
||||
|
||||
if (!moveQueue.length || !moveQueue.shift()?.ignorePP) { // using .shift here clears out two turn moves once they've been used
|
||||
if ((!moveQueue.length || !moveQueue.shift()?.ignorePP) && !this.ignorePp) { // using .shift here clears out two turn moves once they've been used
|
||||
this.move.usePp(ppUsed);
|
||||
this.scene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), this.move.ppUsed));
|
||||
}
|
||||
|
@ -1,14 +1,14 @@
|
||||
import BattleScene from "#app/battle-scene.js";
|
||||
import { BattlerIndex } from "#app/battle.js";
|
||||
import { applyPreStatChangeAbAttrs, ProtectStatAbAttr, applyAbAttrs, StatChangeMultiplierAbAttr, StatChangeCopyAbAttr, applyPostStatChangeAbAttrs, PostStatChangeAbAttr } from "#app/data/ability.js";
|
||||
import { MistTag, ArenaTagSide } from "#app/data/arena-tag.js";
|
||||
import { BattleStat, getBattleStatName, getBattleStatLevelChangeDescription } from "#app/data/battle-stat.js";
|
||||
import Pokemon from "#app/field/pokemon.js";
|
||||
import { getPokemonNameWithAffix } from "#app/messages.js";
|
||||
import { PokemonResetNegativeStatStageModifier } from "#app/modifier/modifier.js";
|
||||
import { handleTutorial, Tutorial } from "#app/tutorial.js";
|
||||
import { BattlerIndex } from "#app/battle";
|
||||
import BattleScene from "#app/battle-scene";
|
||||
import { applyAbAttrs, applyPostStatChangeAbAttrs, applyPreStatChangeAbAttrs, PostStatChangeAbAttr, ProtectStatAbAttr, StatChangeCopyAbAttr, StatChangeMultiplierAbAttr } from "#app/data/ability";
|
||||
import { ArenaTagSide, MistTag } from "#app/data/arena-tag";
|
||||
import { BattleStat, getBattleStatLevelChangeDescription, getBattleStatName } from "#app/data/battle-stat";
|
||||
import Pokemon from "#app/field/pokemon";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
import { PokemonResetNegativeStatStageModifier } from "#app/modifier/modifier";
|
||||
import { handleTutorial, Tutorial } from "#app/tutorial";
|
||||
import * as Utils from "#app/utils";
|
||||
import i18next from "i18next";
|
||||
import * as Utils from "#app/utils.js";
|
||||
import { PokemonPhase } from "./pokemon-phase";
|
||||
|
||||
export type StatChangeCallback = (target: Pokemon | null, changed: BattleStat[], relativeChanges: number[]) => void;
|
||||
@ -72,7 +72,7 @@ export class StatChangePhase extends PokemonPhase {
|
||||
}
|
||||
|
||||
const battleStats = this.getPokemon().summonData.battleStats;
|
||||
const relLevels = filteredStats.map(stat => (levels.value >= 1 ? Math.min(battleStats![stat] + levels.value, 6) : Math.max(battleStats![stat] + levels.value, -6)) - battleStats![stat]);
|
||||
const relLevels = filteredStats.map(stat => (levels.value >= 1 ? Math.min(battleStats[stat] + levels.value, 6) : Math.max(battleStats[stat] + levels.value, -6)) - battleStats[stat]);
|
||||
|
||||
this.onChange && this.onChange(this.getPokemon(), filteredStats, relLevels);
|
||||
|
||||
@ -85,6 +85,20 @@ export class StatChangePhase extends PokemonPhase {
|
||||
}
|
||||
|
||||
for (const stat of filteredStats) {
|
||||
if (levels.value > 0 && pokemon.summonData.battleStats[stat] < 6) {
|
||||
if (!pokemon.turnData) {
|
||||
// Temporary fix for missing turn data struct on turn 1
|
||||
pokemon.resetTurnData();
|
||||
}
|
||||
pokemon.turnData.battleStatsIncreased = true;
|
||||
} else if (levels.value < 0 && pokemon.summonData.battleStats[stat] > -6) {
|
||||
if (!pokemon.turnData) {
|
||||
// Temporary fix for missing turn data struct on turn 1
|
||||
pokemon.resetTurnData();
|
||||
}
|
||||
pokemon.turnData.battleStatsDecreased = true;
|
||||
}
|
||||
|
||||
pokemon.summonData.battleStats[stat] = Math.max(Math.min(pokemon.summonData.battleStats[stat] + levels.value, 6), -6);
|
||||
}
|
||||
|
||||
|
@ -1,12 +1,12 @@
|
||||
import BattleScene from "#app/battle-scene.js";
|
||||
import { applyAbAttrs, BypassSpeedChanceAbAttr, PreventBypassSpeedChanceAbAttr, ChangeMovePriorityAbAttr } from "#app/data/ability.js";
|
||||
import { allMoves, applyMoveAttrs, IncrementMovePriorityAttr, MoveHeaderAttr } from "#app/data/move.js";
|
||||
import { Abilities } from "#app/enums/abilities.js";
|
||||
import { Stat } from "#app/enums/stat.js";
|
||||
import { PokemonMove } from "#app/field/pokemon.js";
|
||||
import { BypassSpeedChanceModifier } from "#app/modifier/modifier.js";
|
||||
import { Command } from "#app/ui/command-ui-handler.js";
|
||||
import * as Utils from "#app/utils.js";
|
||||
import BattleScene from "#app/battle-scene";
|
||||
import { applyAbAttrs, BypassSpeedChanceAbAttr, PreventBypassSpeedChanceAbAttr, ChangeMovePriorityAbAttr } from "#app/data/ability";
|
||||
import { allMoves, applyMoveAttrs, IncrementMovePriorityAttr, MoveHeaderAttr } from "#app/data/move";
|
||||
import { Abilities } from "#app/enums/abilities";
|
||||
import { Stat } from "#app/enums/stat";
|
||||
import Pokemon, { PokemonMove } from "#app/field/pokemon";
|
||||
import { BypassSpeedChanceModifier } from "#app/modifier/modifier";
|
||||
import { Command } from "#app/ui/command-ui-handler";
|
||||
import * as Utils from "#app/utils";
|
||||
import { AttemptCapturePhase } from "./attempt-capture-phase";
|
||||
import { AttemptRunPhase } from "./attempt-run-phase";
|
||||
import { BerryPhase } from "./berry-phase";
|
||||
@ -17,18 +17,59 @@ import { PostTurnStatusEffectPhase } from "./post-turn-status-effect-phase";
|
||||
import { SwitchSummonPhase } from "./switch-summon-phase";
|
||||
import { TurnEndPhase } from "./turn-end-phase";
|
||||
import { WeatherEffectPhase } from "./weather-effect-phase";
|
||||
import { BattlerIndex } from "#app/battle";
|
||||
import { TrickRoomTag } from "#app/data/arena-tag";
|
||||
|
||||
export class TurnStartPhase extends FieldPhase {
|
||||
constructor(scene: BattleScene) {
|
||||
super(scene);
|
||||
}
|
||||
|
||||
start() {
|
||||
super.start();
|
||||
/**
|
||||
* This orders the active Pokemon on the field by speed into an BattlerIndex array and returns that array.
|
||||
* It also checks for Trick Room and reverses the array if it is present.
|
||||
* @returns {@linkcode BattlerIndex[]} the battle indices of all pokemon on the field ordered by speed
|
||||
*/
|
||||
getSpeedOrder(): BattlerIndex[] {
|
||||
const playerField = this.scene.getPlayerField().filter(p => p.isActive()) as Pokemon[];
|
||||
const enemyField = this.scene.getEnemyField().filter(p => p.isActive()) as Pokemon[];
|
||||
|
||||
const field = this.scene.getField();
|
||||
const order = this.getOrder();
|
||||
// We shuffle the list before sorting so speed ties produce random results
|
||||
let orderedTargets: Pokemon[] = playerField.concat(enemyField);
|
||||
// We seed it with the current turn to prevent an inconsistency where it
|
||||
// was varying based on how long since you last reloaded
|
||||
this.scene.executeWithSeedOffset(() => {
|
||||
orderedTargets = Utils.randSeedShuffle(orderedTargets);
|
||||
}, this.scene.currentBattle.turn, this.scene.waveSeed);
|
||||
|
||||
orderedTargets.sort((a: Pokemon, b: Pokemon) => {
|
||||
const aSpeed = a?.getBattleStat(Stat.SPD) || 0;
|
||||
const bSpeed = b?.getBattleStat(Stat.SPD) || 0;
|
||||
|
||||
return bSpeed - aSpeed;
|
||||
});
|
||||
|
||||
// Next, a check for Trick Room is applied. If Trick Room is present, the order is reversed.
|
||||
const speedReversed = new Utils.BooleanHolder(false);
|
||||
this.scene.arena.applyTags(TrickRoomTag, speedReversed);
|
||||
|
||||
if (speedReversed.value) {
|
||||
orderedTargets = orderedTargets.reverse();
|
||||
}
|
||||
|
||||
return orderedTargets.map(t => t.getFieldIndex() + (!t.isPlayer() ? BattlerIndex.ENEMY : BattlerIndex.PLAYER));
|
||||
}
|
||||
|
||||
/**
|
||||
* This takes the result of getSpeedOrder and applies priority / bypass speed attributes to it.
|
||||
* This also considers the priority levels of various commands and changes the result of getSpeedOrder based on such.
|
||||
* @returns {@linkcode BattlerIndex[]} the final sequence of commands for this turn
|
||||
*/
|
||||
getCommandOrder(): BattlerIndex[] {
|
||||
let moveOrder = this.getSpeedOrder();
|
||||
// The creation of the battlerBypassSpeed object contains checks for the ability Quick Draw and the held item Quick Claw
|
||||
// The ability Mycelium Might disables Quick Claw's activation when using a status move
|
||||
// This occurs before the main loop because of battles with more than two Pokemon
|
||||
const battlerBypassSpeed = {};
|
||||
|
||||
this.scene.getField(true).filter(p => p.summonData).map(p => {
|
||||
@ -42,8 +83,9 @@ export class TurnStartPhase extends FieldPhase {
|
||||
battlerBypassSpeed[p.getBattlerIndex()] = bypassSpeed;
|
||||
});
|
||||
|
||||
const moveOrder = order.slice(0);
|
||||
|
||||
// The function begins sorting orderedTargets based on command priority, move priority, and possible speed bypasses.
|
||||
// Non-FIGHT commands (SWITCH, BALL, RUN) have a higher command priority and will always occur before any FIGHT commands.
|
||||
moveOrder = moveOrder.slice(0);
|
||||
moveOrder.sort((a, b) => {
|
||||
const aCommand = this.scene.currentBattle.turnCommands[a];
|
||||
const bCommand = this.scene.currentBattle.turnCommands[b];
|
||||
@ -55,37 +97,50 @@ export class TurnStartPhase extends FieldPhase {
|
||||
return -1;
|
||||
}
|
||||
} else if (aCommand?.command === Command.FIGHT) {
|
||||
const aMove = allMoves[aCommand.move!.move];//TODO: is the bang correct here?
|
||||
const bMove = allMoves[bCommand!.move!.move];//TODO: is the bang correct here?
|
||||
const aMove = allMoves[aCommand.move!.move];
|
||||
const bMove = allMoves[bCommand!.move!.move];
|
||||
|
||||
// The game now considers priority and applies the relevant move and ability attributes
|
||||
const aPriority = new Utils.IntegerHolder(aMove.priority);
|
||||
const bPriority = new Utils.IntegerHolder(bMove.priority);
|
||||
|
||||
applyMoveAttrs(IncrementMovePriorityAttr, this.scene.getField().find(p => p?.isActive() && p.getBattlerIndex() === a)!, null, aMove, aPriority); //TODO: is the bang correct here?
|
||||
applyMoveAttrs(IncrementMovePriorityAttr, this.scene.getField().find(p => p?.isActive() && p.getBattlerIndex() === b)!, null, bMove, bPriority); //TODO: is the bang correct here?
|
||||
applyMoveAttrs(IncrementMovePriorityAttr, this.scene.getField().find(p => p?.isActive() && p.getBattlerIndex() === a)!, null, aMove, aPriority);
|
||||
applyMoveAttrs(IncrementMovePriorityAttr, this.scene.getField().find(p => p?.isActive() && p.getBattlerIndex() === b)!, null, bMove, bPriority);
|
||||
|
||||
applyAbAttrs(ChangeMovePriorityAbAttr, this.scene.getField().find(p => p?.isActive() && p.getBattlerIndex() === a)!, null, false, aMove, aPriority); //TODO: is the bang correct here?
|
||||
applyAbAttrs(ChangeMovePriorityAbAttr, this.scene.getField().find(p => p?.isActive() && p.getBattlerIndex() === b)!, null, false, bMove, bPriority); //TODO: is the bang correct here?
|
||||
applyAbAttrs(ChangeMovePriorityAbAttr, this.scene.getField().find(p => p?.isActive() && p.getBattlerIndex() === a)!, null, false, aMove, aPriority);
|
||||
applyAbAttrs(ChangeMovePriorityAbAttr, this.scene.getField().find(p => p?.isActive() && p.getBattlerIndex() === b)!, null, false, bMove, bPriority);
|
||||
|
||||
// The game now checks for differences in priority levels.
|
||||
// If the moves share the same original priority bracket, it can check for differences in battlerBypassSpeed and return the result.
|
||||
// This conditional is used to ensure that Quick Claw can still activate with abilities like Stall and Mycelium Might (attack moves only)
|
||||
// Otherwise, the game returns the user of the move with the highest priority.
|
||||
const isSameBracket = Math.ceil(aPriority.value) - Math.ceil(bPriority.value) === 0;
|
||||
if (aPriority.value !== bPriority.value) {
|
||||
const bracketDifference = Math.ceil(aPriority.value) - Math.ceil(bPriority.value);
|
||||
const hasSpeedDifference = battlerBypassSpeed[a].value !== battlerBypassSpeed[b].value;
|
||||
if (bracketDifference === 0 && hasSpeedDifference) {
|
||||
if (isSameBracket && battlerBypassSpeed[a].value !== battlerBypassSpeed[b].value) {
|
||||
return battlerBypassSpeed[a].value ? -1 : 1;
|
||||
}
|
||||
return aPriority.value < bPriority.value ? 1 : -1;
|
||||
}
|
||||
}
|
||||
|
||||
// If there is no difference between the move's calculated priorities, the game checks for differences in battlerBypassSpeed and returns the result.
|
||||
if (battlerBypassSpeed[a].value !== battlerBypassSpeed[b].value) {
|
||||
return battlerBypassSpeed[a].value ? -1 : 1;
|
||||
}
|
||||
|
||||
const aIndex = order.indexOf(a);
|
||||
const bIndex = order.indexOf(b);
|
||||
const aIndex = moveOrder.indexOf(a);
|
||||
const bIndex = moveOrder.indexOf(b);
|
||||
|
||||
return aIndex < bIndex ? -1 : aIndex > bIndex ? 1 : 0;
|
||||
});
|
||||
return moveOrder;
|
||||
}
|
||||
|
||||
start() {
|
||||
super.start();
|
||||
|
||||
const field = this.scene.getField();
|
||||
const moveOrder = this.getCommandOrder();
|
||||
|
||||
let orderIndex = 0;
|
||||
|
||||
@ -150,10 +205,9 @@ export class TurnStartPhase extends FieldPhase {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.scene.pushPhase(new WeatherEffectPhase(this.scene));
|
||||
|
||||
for (const o of order) {
|
||||
for (const o of moveOrder) {
|
||||
if (field[o].status && field[o].status.isPostTurn()) {
|
||||
this.scene.pushPhase(new PostTurnStatusEffectPhase(this.scene, o));
|
||||
}
|
||||
|
@ -1,13 +1,11 @@
|
||||
import { BattleStyle } from "#app/enums/battle-style";
|
||||
import { CommandPhase } from "#app/phases/command-phase";
|
||||
import { MessagePhase } from "#app/phases/message-phase";
|
||||
import { TurnInitPhase } from "#app/phases/turn-init-phase";
|
||||
import i18next, { initI18n } from "#app/plugins/i18n";
|
||||
import { Mode } from "#app/ui/ui";
|
||||
import { Abilities } from "#enums/abilities";
|
||||
import { Moves } from "#enums/moves";
|
||||
import { Species } from "#enums/species";
|
||||
import GameManager from "#test/utils/gameManager";
|
||||
import { SPLASH_ONLY } from "#test/utils/testUtils";
|
||||
import Phaser from "phaser";
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||
|
||||
@ -28,19 +26,18 @@ describe("Ability Timing", () => {
|
||||
|
||||
beforeEach(() => {
|
||||
game = new GameManager(phaserGame);
|
||||
game.override.battleType("single");
|
||||
|
||||
game.override.enemySpecies(Species.PIDGEY);
|
||||
game.override.enemyAbility(Abilities.INTIMIDATE);
|
||||
game.override.enemyMoveset(SPLASH_ONLY);
|
||||
|
||||
game.override.ability(Abilities.BALL_FETCH);
|
||||
game.override.moveset([Moves.SPLASH, Moves.ICE_BEAM]);
|
||||
game.override
|
||||
.battleType("single")
|
||||
.enemySpecies(Species.MAGIKARP)
|
||||
.enemyAbility(Abilities.INTIMIDATE)
|
||||
.ability(Abilities.BALL_FETCH);
|
||||
});
|
||||
|
||||
it("should trigger after switch check", async () => {
|
||||
initI18n();
|
||||
i18next.changeLanguage("en");
|
||||
game.settings.battleStyle = BattleStyle.SWITCH;
|
||||
await game.classicMode.runToSummon([Species.EEVEE, Species.FEEBAS]);
|
||||
|
||||
game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => {
|
||||
@ -48,7 +45,7 @@ describe("Ability Timing", () => {
|
||||
game.endPhase();
|
||||
}, () => game.isCurrentPhase(CommandPhase) || game.isCurrentPhase(TurnInitPhase));
|
||||
|
||||
await game.phaseInterceptor.to(MessagePhase);
|
||||
await game.phaseInterceptor.to("MessagePhase");
|
||||
const message = game.textInterceptor.getLatestMessage();
|
||||
expect(message).toContain("Attack fell");
|
||||
}, 5000);
|
||||
|
64
src/test/abilities/dancer.test.ts
Normal file
@ -0,0 +1,64 @@
|
||||
import { BattlerIndex } from "#app/battle";
|
||||
import { MovePhase } from "#app/phases/move-phase";
|
||||
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 } from "vitest";
|
||||
|
||||
const TIMEOUT = 20 * 1000;
|
||||
|
||||
describe("Abilities - Dancer", () => {
|
||||
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("double")
|
||||
.moveset([Moves.SWORDS_DANCE, Moves.SPLASH])
|
||||
.enemySpecies(Species.MAGIKARP)
|
||||
.enemyAbility(Abilities.DANCER)
|
||||
.enemyMoveset(Array(4).fill(Moves.VICTORY_DANCE));
|
||||
});
|
||||
|
||||
// Reference Link: https://bulbapedia.bulbagarden.net/wiki/Dancer_(Ability)
|
||||
|
||||
it("triggers when dance moves are used, doesn't consume extra PP", async () => {
|
||||
await game.classicMode.startBattle([Species.ORICORIO, Species.FEEBAS]);
|
||||
|
||||
const [oricorio] = game.scene.getPlayerField();
|
||||
|
||||
game.move.select(Moves.SPLASH);
|
||||
game.move.select(Moves.SWORDS_DANCE, 1);
|
||||
await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]);
|
||||
await game.phaseInterceptor.to("MovePhase");
|
||||
// immediately copies ally move
|
||||
await game.phaseInterceptor.to("MovePhase", false);
|
||||
let currentPhase = game.scene.getCurrentPhase() as MovePhase;
|
||||
expect(currentPhase.pokemon).toBe(oricorio);
|
||||
expect(currentPhase.move.moveId).toBe(Moves.SWORDS_DANCE);
|
||||
await game.phaseInterceptor.to("MoveEndPhase");
|
||||
await game.phaseInterceptor.to("MovePhase");
|
||||
// immediately copies enemy move
|
||||
await game.phaseInterceptor.to("MovePhase", false);
|
||||
currentPhase = game.scene.getCurrentPhase() as MovePhase;
|
||||
expect(currentPhase.pokemon).toBe(oricorio);
|
||||
expect(currentPhase.move.moveId).toBe(Moves.VICTORY_DANCE);
|
||||
await game.phaseInterceptor.to("BerryPhase");
|
||||
|
||||
// doesn't use PP if copied move is also in moveset
|
||||
expect(oricorio.moveset[0]?.ppUsed).toBe(0);
|
||||
}, TIMEOUT);
|
||||
});
|
@ -1,11 +1,5 @@
|
||||
import { BattleStat } from "#app/data/battle-stat";
|
||||
import { StatusEffect } from "#app/data/status-effect";
|
||||
import { CommandPhase } from "#app/phases/command-phase";
|
||||
import { MoveEffectPhase } from "#app/phases/move-effect-phase";
|
||||
import { MoveEndPhase } from "#app/phases/move-end-phase";
|
||||
import { TurnEndPhase } from "#app/phases/turn-end-phase";
|
||||
import { TurnInitPhase } from "#app/phases/turn-init-phase";
|
||||
import { Mode } from "#app/ui/ui";
|
||||
import { toDmgValue } from "#app/utils";
|
||||
import { Moves } from "#enums/moves";
|
||||
import { Species } from "#enums/species";
|
||||
@ -33,13 +27,12 @@ describe("Abilities - Disguise", () => {
|
||||
|
||||
beforeEach(() => {
|
||||
game = new GameManager(phaserGame);
|
||||
game.override.battleType("single");
|
||||
|
||||
game.override.enemySpecies(Species.MIMIKYU);
|
||||
game.override.enemyMoveset(SPLASH_ONLY);
|
||||
|
||||
game.override.starterSpecies(Species.REGIELEKI);
|
||||
game.override.moveset([Moves.SHADOW_SNEAK, Moves.VACUUM_WAVE, Moves.TOXIC_THREAD, Moves.SPLASH]);
|
||||
game.override
|
||||
.battleType("single")
|
||||
.enemySpecies(Species.MIMIKYU)
|
||||
.enemyMoveset(SPLASH_ONLY)
|
||||
.starterSpecies(Species.REGIELEKI)
|
||||
.moveset([Moves.SHADOW_SNEAK, Moves.VACUUM_WAVE, Moves.TOXIC_THREAD, Moves.SPLASH]);
|
||||
}, TIMEOUT);
|
||||
|
||||
it("takes no damage from attacking move and transforms to Busted form, takes 1/8 max HP damage from the disguise breaking", async () => {
|
||||
@ -53,7 +46,7 @@ describe("Abilities - Disguise", () => {
|
||||
|
||||
game.move.select(Moves.SHADOW_SNEAK);
|
||||
|
||||
await game.phaseInterceptor.to(MoveEndPhase);
|
||||
await game.phaseInterceptor.to("MoveEndPhase");
|
||||
|
||||
expect(mimikyu.hp).equals(maxHp - disguiseDamage);
|
||||
expect(mimikyu.formIndex).toBe(bustedForm);
|
||||
@ -68,7 +61,7 @@ describe("Abilities - Disguise", () => {
|
||||
|
||||
game.move.select(Moves.VACUUM_WAVE);
|
||||
|
||||
await game.phaseInterceptor.to(MoveEndPhase);
|
||||
await game.phaseInterceptor.to("MoveEndPhase");
|
||||
|
||||
expect(mimikyu.formIndex).toBe(disguisedForm);
|
||||
}, TIMEOUT);
|
||||
@ -87,12 +80,12 @@ describe("Abilities - Disguise", () => {
|
||||
game.move.select(Moves.SURGING_STRIKES);
|
||||
|
||||
// First hit
|
||||
await game.phaseInterceptor.to(MoveEffectPhase);
|
||||
await game.phaseInterceptor.to("MoveEffectPhase");
|
||||
expect(mimikyu.hp).equals(maxHp - disguiseDamage);
|
||||
expect(mimikyu.formIndex).toBe(disguisedForm);
|
||||
|
||||
// Second hit
|
||||
await game.phaseInterceptor.to(MoveEffectPhase);
|
||||
await game.phaseInterceptor.to("MoveEffectPhase");
|
||||
expect(mimikyu.hp).lessThan(maxHp - disguiseDamage);
|
||||
expect(mimikyu.formIndex).toBe(bustedForm);
|
||||
}, TIMEOUT);
|
||||
@ -105,7 +98,7 @@ describe("Abilities - Disguise", () => {
|
||||
|
||||
game.move.select(Moves.TOXIC_THREAD);
|
||||
|
||||
await game.phaseInterceptor.to(TurnEndPhase);
|
||||
await game.phaseInterceptor.to("TurnEndPhase");
|
||||
|
||||
expect(mimikyu.formIndex).toBe(disguisedForm);
|
||||
expect(mimikyu.status?.effect).toBe(StatusEffect.POISON);
|
||||
@ -125,7 +118,7 @@ describe("Abilities - Disguise", () => {
|
||||
|
||||
game.move.select(Moves.SPLASH);
|
||||
|
||||
await game.phaseInterceptor.to(TurnEndPhase);
|
||||
await game.phaseInterceptor.to("TurnEndPhase");
|
||||
|
||||
expect(mimikyu.formIndex).toBe(bustedForm);
|
||||
expect(mimikyu.hp).equals(maxHp - disguiseDamage);
|
||||
@ -133,7 +126,7 @@ describe("Abilities - Disguise", () => {
|
||||
await game.toNextTurn();
|
||||
game.doSwitchPokemon(1);
|
||||
|
||||
await game.phaseInterceptor.to(TurnEndPhase);
|
||||
await game.phaseInterceptor.to("TurnEndPhase");
|
||||
|
||||
expect(mimikyu.formIndex).toBe(bustedForm);
|
||||
}, TIMEOUT);
|
||||
@ -194,15 +187,6 @@ describe("Abilities - Disguise", () => {
|
||||
await game.toNextTurn();
|
||||
game.move.select(Moves.SPLASH);
|
||||
await game.doKillOpponents();
|
||||
game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { // TODO: Make tests run in set mode instead of switch mode
|
||||
game.setMode(Mode.MESSAGE);
|
||||
game.endPhase();
|
||||
}, () => game.isCurrentPhase(CommandPhase) || game.isCurrentPhase(TurnInitPhase));
|
||||
|
||||
game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => {
|
||||
game.setMode(Mode.MESSAGE);
|
||||
game.endPhase();
|
||||
}, () => game.isCurrentPhase(CommandPhase) || game.isCurrentPhase(TurnInitPhase));
|
||||
await game.phaseInterceptor.to("PartyHealPhase");
|
||||
|
||||
expect(mimikyu1.formIndex).toBe(disguisedForm);
|
||||
|
154
src/test/abilities/flower_gift.test.ts
Normal file
@ -0,0 +1,154 @@
|
||||
import { BattlerIndex } from "#app/battle";
|
||||
import { Abilities } from "#app/enums/abilities";
|
||||
import { Stat } from "#app/enums/stat";
|
||||
import { WeatherType } from "#app/enums/weather-type";
|
||||
import { Moves } from "#enums/moves";
|
||||
import { Species } from "#enums/species";
|
||||
import GameManager from "#test/utils/gameManager";
|
||||
import { SPLASH_ONLY } from "#test/utils/testUtils";
|
||||
import Phaser from "phaser";
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||
|
||||
describe("Abilities - Flower Gift", () => {
|
||||
let phaserGame: Phaser.Game;
|
||||
let game: GameManager;
|
||||
const OVERCAST_FORM = 0;
|
||||
const SUNSHINE_FORM = 1;
|
||||
|
||||
/**
|
||||
* Tests reverting to normal form when Cloud Nine/Air Lock is active on the field
|
||||
* @param {GameManager} game The game manager instance
|
||||
* @param {Abilities} ability The ability that is active on the field
|
||||
*/
|
||||
const testRevertFormAgainstAbility = async (game: GameManager, ability: Abilities) => {
|
||||
game.override.starterForms({ [Species.CASTFORM]: SUNSHINE_FORM }).enemyAbility(ability);
|
||||
await game.classicMode.startBattle([Species.CASTFORM]);
|
||||
|
||||
game.move.select(Moves.SPLASH);
|
||||
|
||||
expect(game.scene.getPlayerPokemon()?.formIndex).toBe(OVERCAST_FORM);
|
||||
};
|
||||
|
||||
beforeAll(() => {
|
||||
phaserGame = new Phaser.Game({
|
||||
type: Phaser.HEADLESS,
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
game.phaseInterceptor.restoreOg();
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
game = new GameManager(phaserGame);
|
||||
game.override
|
||||
.moveset([Moves.SPLASH, Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.SKILL_SWAP])
|
||||
.enemySpecies(Species.MAGIKARP)
|
||||
.enemyMoveset(SPLASH_ONLY)
|
||||
.enemyAbility(Abilities.BALL_FETCH);
|
||||
});
|
||||
|
||||
// TODO: Uncomment expect statements when the ability is implemented - currently does not increase stats of allies
|
||||
it("increases the Attack and Special Defense stats of the Pokémon with this Ability and its allies by 1.5× during Harsh Sunlight", async () => {
|
||||
game.override.battleType("double");
|
||||
await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]);
|
||||
|
||||
const [ cherrim ] = game.scene.getPlayerField();
|
||||
const cherrimAtkStat = cherrim.getBattleStat(Stat.ATK);
|
||||
const cherrimSpDefStat = cherrim.getBattleStat(Stat.SPDEF);
|
||||
|
||||
// const magikarpAtkStat = magikarp.getBattleStat(Stat.ATK);;
|
||||
// const magikarpSpDefStat = magikarp.getBattleStat(Stat.SPDEF);
|
||||
|
||||
game.move.select(Moves.SUNNY_DAY, 0);
|
||||
game.move.select(Moves.SPLASH, 1);
|
||||
|
||||
await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]);
|
||||
await game.phaseInterceptor.to("TurnEndPhase");
|
||||
|
||||
expect(cherrim.formIndex).toBe(SUNSHINE_FORM);
|
||||
expect(cherrim.getBattleStat(Stat.ATK)).toBe(Math.floor(cherrimAtkStat * 1.5));
|
||||
expect(cherrim.getBattleStat(Stat.SPDEF)).toBe(Math.floor(cherrimSpDefStat * 1.5));
|
||||
// expect(magikarp.getBattleStat(Stat.ATK)).toBe(Math.floor(magikarpAtkStat * 1.5));
|
||||
// expect(magikarp.getBattleStat(Stat.SPDEF)).toBe(Math.floor(magikarpSpDefStat * 1.5));
|
||||
});
|
||||
|
||||
it("changes the Pokemon's form during Harsh Sunlight", async () => {
|
||||
game.override.weather(WeatherType.HARSH_SUN);
|
||||
await game.classicMode.startBattle([Species.CHERRIM]);
|
||||
|
||||
const cherrim = game.scene.getPlayerPokemon()!;
|
||||
expect(cherrim.formIndex).toBe(SUNSHINE_FORM);
|
||||
|
||||
game.move.select(Moves.SPLASH);
|
||||
});
|
||||
|
||||
it("reverts to Overcast Form if a Pokémon on the field has Air Lock", async () => {
|
||||
await testRevertFormAgainstAbility(game, Abilities.AIR_LOCK);
|
||||
});
|
||||
|
||||
it("reverts to Overcast Form if a Pokémon on the field has Cloud Nine", async () => {
|
||||
await testRevertFormAgainstAbility(game, Abilities.CLOUD_NINE);
|
||||
});
|
||||
|
||||
it("reverts to Overcast Form when the Pokémon loses Flower Gift, changes form under Harsh Sunlight/Sunny when it regains it", async () => {
|
||||
game.override.enemyMoveset(Array(4).fill(Moves.SKILL_SWAP)).weather(WeatherType.HARSH_SUN);
|
||||
|
||||
await game.classicMode.startBattle([Species.CHERRIM]);
|
||||
|
||||
const cherrim = game.scene.getPlayerPokemon()!;
|
||||
|
||||
game.move.select(Moves.SKILL_SWAP);
|
||||
|
||||
await game.phaseInterceptor.to("TurnStartPhase");
|
||||
expect(cherrim.formIndex).toBe(SUNSHINE_FORM);
|
||||
|
||||
await game.phaseInterceptor.to("MoveEndPhase");
|
||||
expect(cherrim.formIndex).toBe(OVERCAST_FORM);
|
||||
|
||||
await game.phaseInterceptor.to("MoveEndPhase");
|
||||
expect(cherrim.formIndex).toBe(SUNSHINE_FORM);
|
||||
});
|
||||
|
||||
it("reverts to Overcast Form when the Flower Gift is suppressed, changes form under Harsh Sunlight/Sunny when it regains it", async () => {
|
||||
game.override.enemyMoveset(Array(4).fill(Moves.GASTRO_ACID)).weather(WeatherType.HARSH_SUN);
|
||||
|
||||
await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]);
|
||||
|
||||
const cherrim = game.scene.getPlayerPokemon()!;
|
||||
|
||||
expect(cherrim.formIndex).toBe(SUNSHINE_FORM);
|
||||
|
||||
game.move.select(Moves.SPLASH);
|
||||
await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
|
||||
await game.phaseInterceptor.to("TurnEndPhase");
|
||||
|
||||
expect(cherrim.summonData.abilitySuppressed).toBe(true);
|
||||
expect(cherrim.formIndex).toBe(OVERCAST_FORM);
|
||||
|
||||
await game.toNextTurn();
|
||||
|
||||
game.doSwitchPokemon(1);
|
||||
await game.toNextTurn();
|
||||
|
||||
game.doSwitchPokemon(1);
|
||||
await game.phaseInterceptor.to("MovePhase");
|
||||
|
||||
expect(cherrim.summonData.abilitySuppressed).toBe(false);
|
||||
expect(cherrim.formIndex).toBe(SUNSHINE_FORM);
|
||||
});
|
||||
|
||||
it("should be in Overcast Form after the user is switched out", async () => {
|
||||
game.override.weather(WeatherType.SUNNY);
|
||||
|
||||
await game.classicMode.startBattle([Species.CASTFORM, Species.MAGIKARP]);
|
||||
const cherrim = game.scene.getPlayerPokemon()!;
|
||||
|
||||
expect(cherrim.formIndex).toBe(SUNSHINE_FORM);
|
||||
|
||||
game.doSwitchPokemon(1);
|
||||
await game.toNextTurn();
|
||||
|
||||
expect(cherrim.formIndex).toBe(OVERCAST_FORM);
|
||||
});
|
||||
});
|