first round with eslint --fix .

This commit is contained in:
Greenlamp 2024-05-22 01:10:40 +02:00
parent 8eb6f8a2e6
commit 77a88e0895
308 changed files with 53947 additions and 53947 deletions

View File

@ -1,5 +1,5 @@
import { bypassLogin } from "./battle-scene"; import { bypassLogin } from './battle-scene';
import * as Utils from "./utils"; import * as Utils from './utils';
export interface UserInfo { export interface UserInfo {
username: string; username: string;

View File

@ -9,19 +9,19 @@ import { PokeballType } from './data/pokeball';
import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets, populateAnims } from './data/battle-anims'; import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets, populateAnims } from './data/battle-anims';
import { Phase } from './phase'; import { Phase } from './phase';
import { initGameSpeed } from './system/game-speed'; import { initGameSpeed } from './system/game-speed';
import { Biome } from "./data/enums/biome"; import { Biome } from './data/enums/biome';
import { Arena, ArenaBase } from './field/arena'; import { Arena, ArenaBase } from './field/arena';
import { GameData, PlayerGender } from './system/game-data'; import { GameData, PlayerGender } from './system/game-data';
import StarterSelectUiHandler from './ui/starter-select-ui-handler'; import StarterSelectUiHandler from './ui/starter-select-ui-handler';
import { TextStyle, addTextObject } from './ui/text'; import { TextStyle, addTextObject } from './ui/text';
import { Moves } from "./data/enums/moves"; import { Moves } from './data/enums/moves';
import { allMoves } from "./data/move"; import { allMoves } from './data/move';
import { initMoves } from './data/move'; import { initMoves } from './data/move';
import { ModifierPoolType, getDefaultModifierTypeForTier, getEnemyModifierTypesForWave, getLuckString, getLuckTextTint, getModifierPoolForType, getPartyLuckValue } from './modifier/modifier-type'; import { ModifierPoolType, getDefaultModifierTypeForTier, getEnemyModifierTypesForWave, getLuckString, getLuckTextTint, getModifierPoolForType, getPartyLuckValue } from './modifier/modifier-type';
import AbilityBar from './ui/ability-bar'; import AbilityBar from './ui/ability-bar';
import { BlockItemTheftAbAttr, DoubleBattleChanceAbAttr, IncrementMovePriorityAbAttr, applyAbAttrs, initAbilities } from './data/ability'; import { BlockItemTheftAbAttr, DoubleBattleChanceAbAttr, IncrementMovePriorityAbAttr, applyAbAttrs, initAbilities } from './data/ability';
import { Abilities } from "./data/enums/abilities"; import { Abilities } from './data/enums/abilities';
import { allAbilities } from "./data/ability"; import { allAbilities } from './data/ability';
import Battle, { BattleType, FixedBattleConfig, fixedBattles } from './battle'; import Battle, { BattleType, FixedBattleConfig, fixedBattles } from './battle';
import { GameMode, GameModes, gameModes } from './game-mode'; import { GameMode, GameModes, gameModes } from './game-mode';
import FieldSpritePipeline from './pipelines/field-sprite'; import FieldSpritePipeline from './pipelines/field-sprite';
@ -60,10 +60,10 @@ import CandyBar from './ui/candy-bar';
import { Variant, variantData } from './data/variant'; import { Variant, variantData } from './data/variant';
import { Localizable } from './plugins/i18n'; import { Localizable } from './plugins/i18n';
import * as Overrides from './overrides'; import * as Overrides from './overrides';
import {InputsController} from "./inputs-controller"; import {InputsController} from './inputs-controller';
import {UiInputs} from "./ui-inputs"; import {UiInputs} from './ui-inputs';
export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === '1';
const DEBUG_RNG = false; const DEBUG_RNG = false;
@ -95,7 +95,7 @@ export default class BattleScene extends SceneBase {
public gameSpeed: integer = 1; public gameSpeed: integer = 1;
public damageNumbersMode: integer = 0; public damageNumbersMode: integer = 0;
public showLevelUpStats: boolean = true; public showLevelUpStats: boolean = true;
public enableTutorials: boolean = import.meta.env.VITE_BYPASS_TUTORIAL === "1"; public enableTutorials: boolean = import.meta.env.VITE_BYPASS_TUTORIAL === '1';
public enableRetries: boolean = false; public enableRetries: boolean = false;
public uiTheme: UiTheme = UiTheme.DEFAULT; public uiTheme: UiTheme = UiTheme.DEFAULT;
public windowType: integer = 0; public windowType: integer = 0;
@ -175,7 +175,7 @@ export default class BattleScene extends SceneBase {
public waveCycleOffset: integer; public waveCycleOffset: integer;
public offsetGym: boolean; public offsetGym: boolean;
public damageNumberHandler: DamageNumberHandler public damageNumberHandler: DamageNumberHandler;
private spriteSparkleHandler: PokemonSpriteSparkleHandler; private spriteSparkleHandler: PokemonSpriteSparkleHandler;
public fieldSpritePipeline: FieldSpritePipeline; public fieldSpritePipeline: FieldSpritePipeline;
@ -207,7 +207,7 @@ export default class BattleScene extends SceneBase {
loadPokemonAtlas(key: string, atlasPath: string, experimental?: boolean) { loadPokemonAtlas(key: string, atlasPath: string, experimental?: boolean) {
if (experimental === undefined) if (experimental === undefined)
experimental = this.experimentalSprites; experimental = this.experimentalSprites;
let variant = atlasPath.includes('variant/') || /_[0-3]$/.test(atlasPath); const variant = atlasPath.includes('variant/') || /_[0-3]$/.test(atlasPath);
if (experimental) if (experimental)
experimental = this.hasExpSprite(key); experimental = this.hasExpSprite(key);
if (variant) if (variant)
@ -385,7 +385,7 @@ export default class BattleScene extends SceneBase {
this.party = []; this.party = [];
let loadPokemonAssets = []; const loadPokemonAssets = [];
this.arenaPlayer = new ArenaBase(this, true); this.arenaPlayer = new ArenaBase(this, true);
this.arenaPlayerTransition = new ArenaBase(this, true); this.arenaPlayerTransition = new ArenaBase(this, true);
@ -654,7 +654,7 @@ export default class BattleScene extends SceneBase {
icon.setFrame(pokemon.getIconId(true)); icon.setFrame(pokemon.getIconId(true));
// Temporary fix to show pokemon's default icon if variant icon doesn't exist // Temporary fix to show pokemon's default icon if variant icon doesn't exist
if (icon.frame.name != pokemon.getIconId(true)) { if (icon.frame.name != pokemon.getIconId(true)) {
console.log(`${pokemon.name}'s variant icon does not exist. Replacing with default.`) console.log(`${pokemon.name}'s variant icon does not exist. Replacing with default.`);
const temp = pokemon.shiny; const temp = pokemon.shiny;
pokemon.shiny = false; pokemon.shiny = false;
icon.setTexture(pokemon.getIconAtlasKey(ignoreOverride)); icon.setTexture(pokemon.getIconAtlasKey(ignoreOverride));
@ -667,7 +667,7 @@ export default class BattleScene extends SceneBase {
if (pokemon.isFusion()) { if (pokemon.isFusion()) {
const fusionIcon = this.add.sprite(0, 0, pokemon.getFusionIconAtlasKey(ignoreOverride)); const fusionIcon = this.add.sprite(0, 0, pokemon.getFusionIconAtlasKey(ignoreOverride));
fusionIcon.setOrigin(0.5, 0) fusionIcon.setOrigin(0.5, 0);
fusionIcon.setFrame(pokemon.getFusionIconId(true)); fusionIcon.setFrame(pokemon.getFusionIconId(true));
const originalWidth = icon.width; const originalWidth = icon.width;
@ -755,10 +755,10 @@ export default class BattleScene extends SceneBase {
this.modifierBar.removeAll(true); this.modifierBar.removeAll(true);
this.enemyModifierBar.removeAll(true); this.enemyModifierBar.removeAll(true);
for (let p of this.getParty()) for (const p of this.getParty())
p.destroy(); p.destroy();
this.party = []; this.party = [];
for (let p of this.getEnemyParty()) for (const p of this.getEnemyParty())
p.destroy(); p.destroy();
this.currentBattle = null; this.currentBattle = null;
@ -799,7 +799,7 @@ export default class BattleScene extends SceneBase {
...allAbilities, ...allAbilities,
...Utils.getEnumValues(ModifierPoolType).map(mpt => getModifierPoolForType(mpt)).map(mp => Object.values(mp).flat().map(mt => mt.modifierType).filter(mt => 'localize' in mt).map(lpb => lpb as unknown as Localizable)).flat() ...Utils.getEnumValues(ModifierPoolType).map(mpt => getModifierPoolForType(mpt)).map(mp => Object.values(mp).flat().map(mt => mt.modifierType).filter(mt => 'localize' in mt).map(lpb => lpb as unknown as Localizable)).flat()
]; ];
for (let item of localizable) for (const item of localizable)
item.localize(); item.localize();
} }
@ -825,7 +825,7 @@ export default class BattleScene extends SceneBase {
} }
newBattle(waveIndex?: integer, battleType?: BattleType, trainerData?: TrainerData, double?: boolean): Battle { newBattle(waveIndex?: integer, battleType?: BattleType, trainerData?: TrainerData, double?: boolean): Battle {
let newWaveIndex = waveIndex || ((this.currentBattle?.waveIndex || (startingWave - 1)) + 1); const newWaveIndex = waveIndex || ((this.currentBattle?.waveIndex || (startingWave - 1)) + 1);
let newDouble: boolean; let newDouble: boolean;
let newBattleType: BattleType; let newBattleType: BattleType;
let newTrainer: Trainer; let newTrainer: Trainer;
@ -928,7 +928,7 @@ export default class BattleScene extends SceneBase {
playerField.forEach((_, p) => this.unshiftPhase(new ReturnPhase(this, p))); playerField.forEach((_, p) => this.unshiftPhase(new ReturnPhase(this, p)));
this.unshiftPhase(new ShowTrainerPhase(this)); this.unshiftPhase(new ShowTrainerPhase(this));
} }
for (let pokemon of this.getParty()) { for (const pokemon of this.getParty()) {
if (pokemon) { if (pokemon) {
if (resetArenaState) if (resetArenaState)
pokemon.resetBattleData(); pokemon.resetBattleData();
@ -1213,7 +1213,7 @@ export default class BattleScene extends SceneBase {
labels.map(t => { labels.map(t => {
t.setAlpha(0); t.setAlpha(0);
t.setVisible(true); t.setVisible(true);
}) });
const luckValue = getPartyLuckValue(this.getParty()); const luckValue = getPartyLuckValue(this.getParty());
this.luckText.setText(getLuckString(luckValue)); this.luckText.setText(getLuckString(luckValue));
if (luckValue < 14) if (luckValue < 14)
@ -1290,14 +1290,14 @@ export default class BattleScene extends SceneBase {
.map((_, i: integer) => ((1 - Math.min(Math.abs((i / (maxDepth - 1)) - (relWave / 250)) + 0.25, 1)) / 0.75) * 250); .map((_, i: integer) => ((1 - Math.min(Math.abs((i / (maxDepth - 1)) - (relWave / 250)) + 0.25, 1)) / 0.75) * 250);
const biomeThresholds: integer[] = []; const biomeThresholds: integer[] = [];
let totalWeight = 0; let totalWeight = 0;
for (let biome of biomes) { for (const biome of biomes) {
totalWeight += Math.ceil(depthWeights[biomeDepths[biome][0] - 1] / biomeDepths[biome][1]); totalWeight += Math.ceil(depthWeights[biomeDepths[biome][0] - 1] / biomeDepths[biome][1]);
biomeThresholds.push(totalWeight); biomeThresholds.push(totalWeight);
} }
const randInt = Utils.randSeedInt(totalWeight); const randInt = Utils.randSeedInt(totalWeight);
for (let biome of biomes) { for (const biome of biomes) {
if (randInt < biomeThresholds[biome]) if (randInt < biomeThresholds[biome])
return biome; return biome;
} }
@ -1379,7 +1379,7 @@ export default class BattleScene extends SceneBase {
updateSoundVolume(): void { updateSoundVolume(): void {
if (this.sound) { if (this.sound) {
for (let sound of this.sound.getAllPlaying()) for (const sound of this.sound.getAllPlaying())
(sound as AnySound).setVolume(this.masterVolume * (this.bgmCache.has(sound.key) ? this.bgmVolume : this.seVolume)); (sound as AnySound).setVolume(this.masterVolume * (this.bgmCache.has(sound.key) ? this.bgmVolume : this.seVolume));
} }
} }
@ -1640,7 +1640,7 @@ export default class BattleScene extends SceneBase {
return this.addModifier(defaultModifierType.newModifier(), ignoreUpdate, playSound, false, instant).then(success => resolve(success)); return this.addModifier(defaultModifierType.newModifier(), ignoreUpdate, playSound, false, instant).then(success => resolve(success));
} }
for (let rm of modifiersToRemove) for (const rm of modifiersToRemove)
this.removeModifier(rm); this.removeModifier(rm);
if (!ignoreUpdate && !virtual) if (!ignoreUpdate && !virtual)
@ -1650,7 +1650,7 @@ export default class BattleScene extends SceneBase {
this.playSound(soundName); this.playSound(soundName);
if (modifier instanceof ConsumablePokemonModifier) { if (modifier instanceof ConsumablePokemonModifier) {
for (let p in this.party) { for (const p in this.party) {
const pokemon = this.party[p]; const pokemon = this.party[p];
const args: any[] = [ pokemon ]; const args: any[] = [ pokemon ];
@ -1698,7 +1698,7 @@ export default class BattleScene extends SceneBase {
if ((modifier as PersistentModifier).add(this.enemyModifiers, false, this)) { if ((modifier as PersistentModifier).add(this.enemyModifiers, false, this)) {
if (modifier instanceof PokemonFormChangeItemModifier || modifier instanceof TerastallizeModifier) if (modifier instanceof PokemonFormChangeItemModifier || modifier instanceof TerastallizeModifier)
modifier.apply([ this.getPokemonById(modifier.pokemonId), true ]); modifier.apply([ this.getPokemonById(modifier.pokemonId), true ]);
for (let rm of modifiersToRemove) for (const rm of modifiersToRemove)
this.removeModifier(rm, true); this.removeModifier(rm, true);
} }
if (!ignoreUpdate) if (!ignoreUpdate)
@ -1757,7 +1757,7 @@ export default class BattleScene extends SceneBase {
return new Promise(resolve => { return new Promise(resolve => {
const pokemonId = this.getParty()[partyMemberIndex].id; const pokemonId = this.getParty()[partyMemberIndex].id;
const modifiersToRemove = this.modifiers.filter(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === pokemonId); const modifiersToRemove = this.modifiers.filter(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === pokemonId);
for (let m of modifiersToRemove) for (const m of modifiersToRemove)
this.modifiers.splice(this.modifiers.indexOf(m), 1); this.modifiers.splice(this.modifiers.indexOf(m), 1);
this.updateModifiers().then(() => resolve()); this.updateModifiers().then(() => resolve());
}); });
@ -1777,7 +1777,7 @@ export default class BattleScene extends SceneBase {
if (this.currentBattle.trainer) { if (this.currentBattle.trainer) {
const modifiers = this.currentBattle.trainer.genModifiers(party); const modifiers = this.currentBattle.trainer.genModifiers(party);
for (let modifier of modifiers) for (const modifier of modifiers)
this.addEnemyModifier(modifier, true, true); this.addEnemyModifier(modifier, true, true);
} }
@ -1812,7 +1812,7 @@ export default class BattleScene extends SceneBase {
*/ */
clearEnemyModifiers(): void { clearEnemyModifiers(): void {
const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PersistentModifier); const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PersistentModifier);
for (let m of modifiersToRemove) for (const m of modifiersToRemove)
this.enemyModifiers.splice(this.enemyModifiers.indexOf(m), 1); this.enemyModifiers.splice(this.enemyModifiers.indexOf(m), 1);
this.updateModifiers(false).then(() => this.updateUIPositions()); this.updateModifiers(false).then(() => this.updateUIPositions());
} }
@ -1822,7 +1822,7 @@ export default class BattleScene extends SceneBase {
*/ */
clearEnemyHeldItemModifiers(): void { clearEnemyHeldItemModifiers(): void {
const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PokemonHeldItemModifier); const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PokemonHeldItemModifier);
for (let m of modifiersToRemove) for (const m of modifiersToRemove)
this.enemyModifiers.splice(this.enemyModifiers.indexOf(m), 1); this.enemyModifiers.splice(this.enemyModifiers.indexOf(m), 1);
this.updateModifiers(false).then(() => this.updateUIPositions()); this.updateModifiers(false).then(() => this.updateUIPositions());
} }
@ -1841,13 +1841,13 @@ export default class BattleScene extends SceneBase {
if (modifier instanceof PokemonHeldItemModifier && !this.getPokemonById((modifier as PokemonHeldItemModifier).pokemonId)) if (modifier instanceof PokemonHeldItemModifier && !this.getPokemonById((modifier as PokemonHeldItemModifier).pokemonId))
modifiers.splice(m--, 1); modifiers.splice(m--, 1);
} }
for (let modifier of modifiers) { for (const modifier of modifiers) {
if (modifier instanceof PersistentModifier) if (modifier instanceof PersistentModifier)
(modifier as PersistentModifier).virtualStackCount = 0; (modifier as PersistentModifier).virtualStackCount = 0;
} }
const modifiersClone = modifiers.slice(0); const modifiersClone = modifiers.slice(0);
for (let modifier of modifiersClone) { for (const modifier of modifiersClone) {
if (!modifier.getStackCount()) if (!modifier.getStackCount())
modifiers.splice(modifiers.indexOf(modifier), 1); modifiers.splice(modifiers.indexOf(modifier), 1);
} }
@ -1917,7 +1917,7 @@ export default class BattleScene extends SceneBase {
applyModifiersInternal(modifiers: PersistentModifier[], player: boolean, args: any[]): PersistentModifier[] { applyModifiersInternal(modifiers: PersistentModifier[], player: boolean, args: any[]): PersistentModifier[] {
const appliedModifiers: PersistentModifier[] = []; const appliedModifiers: PersistentModifier[] = [];
for (let modifier of modifiers) { for (const modifier of modifiers) {
if (modifier.apply(args)) { if (modifier.apply(args)) {
console.log('Applied', modifier.type.name, !player ? '(enemy)' : ''); console.log('Applied', modifier.type.name, !player ? '(enemy)' : '');
appliedModifiers.push(modifier); appliedModifiers.push(modifier);
@ -1929,7 +1929,7 @@ export default class BattleScene extends SceneBase {
applyModifier(modifierType: { new(...args: any[]): Modifier }, player: boolean = true, ...args: any[]): PersistentModifier { applyModifier(modifierType: { new(...args: any[]): Modifier }, player: boolean = true, ...args: any[]): PersistentModifier {
const modifiers = (player ? this.modifiers : this.enemyModifiers).filter(m => m instanceof modifierType && m.shouldApply(args)); const modifiers = (player ? this.modifiers : this.enemyModifiers).filter(m => m instanceof modifierType && m.shouldApply(args));
for (let modifier of modifiers) { for (const modifier of modifiers) {
if (modifier.apply(args)) { if (modifier.apply(args)) {
console.log('Applied', modifier.type.name, !player ? '(enemy)' : ''); console.log('Applied', modifier.type.name, !player ? '(enemy)' : '');
return modifier; return modifier;
@ -1963,7 +1963,7 @@ export default class BattleScene extends SceneBase {
validateAchvs(achvType: { new(...args: any[]): Achv }, ...args: any[]): void { validateAchvs(achvType: { new(...args: any[]): Achv }, ...args: any[]): void {
const filteredAchvs = Object.values(achvs).filter(a => a instanceof achvType); const filteredAchvs = Object.values(achvs).filter(a => a instanceof achvType);
for (let achv of filteredAchvs) for (const achv of filteredAchvs)
this.validateAchv(achv, args); this.validateAchv(achv, args);
} }

View File

@ -1,17 +1,17 @@
import BattleScene from "./battle-scene"; import BattleScene from './battle-scene';
import { EnemyPokemon, PlayerPokemon, QueuedMove } from "./field/pokemon"; import { EnemyPokemon, PlayerPokemon, QueuedMove } from './field/pokemon';
import { Command } from "./ui/command-ui-handler"; import { Command } from './ui/command-ui-handler';
import * as Utils from "./utils"; import * as Utils from './utils';
import Trainer, { TrainerVariant } from "./field/trainer"; import Trainer, { TrainerVariant } from './field/trainer';
import { Species } from "./data/enums/species"; import { Species } from './data/enums/species';
import { Moves } from "./data/enums/moves"; import { Moves } from './data/enums/moves';
import { TrainerType } from "./data/enums/trainer-type"; import { TrainerType } from './data/enums/trainer-type';
import { GameMode } from "./game-mode"; import { GameMode } from './game-mode';
import { BattleSpec } from "./enums/battle-spec"; import { BattleSpec } from './enums/battle-spec';
import { PlayerGender } from "./system/game-data"; import { PlayerGender } from './system/game-data';
import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/modifier"; import { MoneyMultiplierModifier, PokemonHeldItemModifier } from './modifier/modifier';
import { MoneyAchv } from "./system/achv"; import { MoneyAchv } from './system/achv';
import { PokeballType } from "./data/pokeball"; import { PokeballType } from './data/pokeball';
export enum BattleType { export enum BattleType {
WILD, WILD,
@ -34,7 +34,7 @@ export interface TurnCommand {
targets?: BattlerIndex[]; targets?: BattlerIndex[];
skip?: boolean; skip?: boolean;
args?: any[]; args?: any[];
}; }
interface TurnCommands { interface TurnCommands {
[key: integer]: TurnCommand [key: integer]: TurnCommand
@ -101,8 +101,8 @@ export default class Battle {
} }
private getLevelForWave(): integer { private getLevelForWave(): integer {
let levelWaveIndex = this.gameMode.getWaveForDifficulty(this.waveIndex); const levelWaveIndex = this.gameMode.getWaveForDifficulty(this.waveIndex);
let baseLevel = 1 + levelWaveIndex / 2 + Math.pow(levelWaveIndex / 25, 2); const baseLevel = 1 + levelWaveIndex / 2 + Math.pow(levelWaveIndex / 25, 2);
const bossMultiplier = 1.2; const bossMultiplier = 1.2;
if (!(this.waveIndex % 10)) { if (!(this.waveIndex % 10)) {
@ -171,7 +171,7 @@ export default class Battle {
let partyMemberTurnMultiplier = scene.getEnemyParty().length / 2 + 0.5; let partyMemberTurnMultiplier = scene.getEnemyParty().length / 2 + 0.5;
if (this.double) if (this.double)
partyMemberTurnMultiplier /= 1.5; partyMemberTurnMultiplier /= 1.5;
for (let p of scene.getEnemyParty()) { for (const p of scene.getEnemyParty()) {
if (p.isBoss()) if (p.isBoss())
partyMemberTurnMultiplier *= (p.bossSegments / 1.5) / scene.getEnemyParty().length; partyMemberTurnMultiplier *= (p.bossSegments / 1.5) / scene.getEnemyParty().length;
} }
@ -191,7 +191,7 @@ export default class Battle {
return this.trainer.getBattleBgm(); return this.trainer.getBattleBgm();
} else if (this.gameMode.isClassic && this.waveIndex > 195 && this.battleSpec !== BattleSpec.FINAL_BOSS) } else if (this.gameMode.isClassic && this.waveIndex > 195 && this.battleSpec !== BattleSpec.FINAL_BOSS)
return 'end_summit'; return 'end_summit';
for (let pokemon of battlers) { for (const pokemon of battlers) {
if (this.battleSpec === BattleSpec.FINAL_BOSS) { if (this.battleSpec === BattleSpec.FINAL_BOSS) {
if (pokemon.formIndex) if (pokemon.formIndex)
return 'battle_final'; return 'battle_final';
@ -290,7 +290,7 @@ function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[]): Get
return (scene: BattleScene) => { return (scene: BattleScene) => {
const rand = Utils.randSeedInt(trainerPool.length); const rand = Utils.randSeedInt(trainerPool.length);
const trainerTypes: TrainerType[] = []; const trainerTypes: TrainerType[] = [];
for (let trainerPoolEntry of trainerPool) { for (const trainerPoolEntry of trainerPool) {
const trainerType = Array.isArray(trainerPoolEntry) const trainerType = Array.isArray(trainerPoolEntry)
? Utils.randSeedItem(trainerPoolEntry) ? Utils.randSeedItem(trainerPoolEntry)
: trainerPoolEntry; : trainerPoolEntry;

View File

@ -1,28 +1,28 @@
import Pokemon, { HitResult, PokemonMove } from "../field/pokemon"; import Pokemon, { HitResult, PokemonMove } from '../field/pokemon';
import { Type } from "./type"; import { Type } from './type';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { BattleStat, getBattleStatName } from "./battle-stat"; import { BattleStat, getBattleStatName } from './battle-stat';
import { PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../phases"; import { PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from '../phases';
import { getPokemonMessage, getPokemonPrefix } from "../messages"; import { getPokemonMessage, getPokemonPrefix } from '../messages';
import { Weather, WeatherType } from "./weather"; import { Weather, WeatherType } from './weather';
import { BattlerTag } from "./battler-tags"; import { BattlerTag } from './battler-tags';
import { BattlerTagType } from "./enums/battler-tag-type"; import { BattlerTagType } from './enums/battler-tag-type';
import { StatusEffect, getStatusEffectDescriptor, getStatusEffectHealText } from "./status-effect"; import { StatusEffect, getStatusEffectDescriptor, getStatusEffectHealText } from './status-effect';
import { Gender } from "./gender"; import { Gender } from './gender';
import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, RecoilAttr, StatusMoveTypeImmunityAttr, FlinchAttr, OneHitKOAttr, HitHealAttr, StrengthSapHealAttr, allMoves, StatusMove, VariablePowerAttr, applyMoveAttrs, IncrementMovePriorityAttr } from "./move"; import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, RecoilAttr, StatusMoveTypeImmunityAttr, FlinchAttr, OneHitKOAttr, HitHealAttr, StrengthSapHealAttr, allMoves, StatusMove, VariablePowerAttr, applyMoveAttrs, IncrementMovePriorityAttr } from './move';
import { ArenaTagSide, ArenaTrapTag } from "./arena-tag"; import { ArenaTagSide, ArenaTrapTag } from './arena-tag';
import { ArenaTagType } from "./enums/arena-tag-type"; import { ArenaTagType } from './enums/arena-tag-type';
import { Stat } from "./pokemon-stat"; import { Stat } from './pokemon-stat';
import { PokemonHeldItemModifier } from "../modifier/modifier"; import { PokemonHeldItemModifier } from '../modifier/modifier';
import { Moves } from "./enums/moves"; import { Moves } from './enums/moves';
import { TerrainType } from "./terrain"; import { TerrainType } from './terrain';
import { SpeciesFormChangeManualTrigger } from "./pokemon-forms"; import { SpeciesFormChangeManualTrigger } from './pokemon-forms';
import { Abilities } from "./enums/abilities"; import { Abilities } from './enums/abilities';
import i18next, { Localizable } from "#app/plugins/i18n.js"; import i18next, { Localizable } from '#app/plugins/i18n.js';
import { Command } from "../ui/command-ui-handler"; import { Command } from '../ui/command-ui-handler';
import Battle from "#app/battle.js"; import Battle from '#app/battle.js';
import { ability } from "#app/locales/en/ability.js"; import { ability } from '#app/locales/en/ability.js';
import { PokeballType, getPokeballName } from "./pokeball"; import { PokeballType, getPokeballName } from './pokeball';
export class Ability implements Localizable { export class Ability implements Localizable {
public id: Abilities; public id: Abilities;
@ -206,11 +206,11 @@ export class PostBattleInitStatChangeAbAttr extends PostBattleInitAbAttr {
if (this.selfTarget) if (this.selfTarget)
statChangePhases.push(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, this.stats, this.levels)); statChangePhases.push(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, this.stats, this.levels));
else { else {
for (let opponent of pokemon.getOpponents()) for (const opponent of pokemon.getOpponents())
statChangePhases.push(new StatChangePhase(pokemon.scene, opponent.getBattlerIndex(), false, this.stats, this.levels)); statChangePhases.push(new StatChangePhase(pokemon.scene, opponent.getBattlerIndex(), false, this.stats, this.levels));
} }
for (let statChangePhase of statChangePhases) { for (const statChangePhase of statChangePhases) {
if (!this.selfTarget && !statChangePhase.getPokemon().summonData) if (!this.selfTarget && !statChangePhase.getPokemon().summonData)
pokemon.scene.pushPhase(statChangePhase); // TODO: This causes the ability bar to be shown at the wrong time pokemon.scene.pushPhase(statChangePhase); // TODO: This causes the ability bar to be shown at the wrong time
else else
@ -256,7 +256,7 @@ export class PreDefendFullHpEndureAbAttr extends PreDefendAbAttr {
return pokemon.addTag(BattlerTagType.STURDY, 1); return pokemon.addTag(BattlerTagType.STURDY, 1);
} }
return false return false;
} }
} }
@ -547,7 +547,7 @@ export class MoveImmunityStatChangeAbAttr extends MoveImmunityAbAttr {
} }
applyPreDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, cancelled: Utils.BooleanHolder, args: any[]): boolean { applyPreDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, cancelled: Utils.BooleanHolder, args: any[]): boolean {
const ret = super.applyPreDefend(pokemon, passive, attacker, move, cancelled, args) const ret = super.applyPreDefend(pokemon, passive, attacker, move, cancelled, args);
if (ret) { if (ret) {
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ this.stat ], this.levels)); pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ this.stat ], this.levels));
} }
@ -559,7 +559,7 @@ export class MoveImmunityStatChangeAbAttr extends MoveImmunityAbAttr {
export class ReverseDrainAbAttr extends PostDefendAbAttr { export class ReverseDrainAbAttr extends PostDefendAbAttr {
applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean { applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean {
if (!!move.getMove().getAttrs(HitHealAttr).length || !!move.getMove().getAttrs(StrengthSapHealAttr).length ) { if (!!move.getMove().getAttrs(HitHealAttr).length || !!move.getMove().getAttrs(StrengthSapHealAttr).length ) {
pokemon.scene.queueMessage(getPokemonMessage(attacker, ` sucked up the liquid ooze!`)); pokemon.scene.queueMessage(getPokemonMessage(attacker, ' sucked up the liquid ooze!'));
return true; return true;
} }
return false; return false;
@ -586,8 +586,8 @@ export class PostDefendStatChangeAbAttr extends PostDefendAbAttr {
applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean { applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean {
if (this.condition(pokemon, attacker, move.getMove())) { if (this.condition(pokemon, attacker, move.getMove())) {
if (this.allOthers) { if (this.allOthers) {
let otherPokemon = pokemon.getAlly() ? pokemon.getOpponents().concat([ pokemon.getAlly() ]) : pokemon.getOpponents(); const otherPokemon = pokemon.getAlly() ? pokemon.getOpponents().concat([ pokemon.getAlly() ]) : pokemon.getOpponents();
for (let other of otherPokemon) { for (const other of otherPokemon) {
other.scene.unshiftPhase(new StatChangePhase(other.scene, (other).getBattlerIndex(), false, [ this.stat ], this.levels)); other.scene.unshiftPhase(new StatChangePhase(other.scene, (other).getBattlerIndex(), false, [ this.stat ], this.levels));
} }
return true; return true;
@ -618,8 +618,8 @@ export class PostDefendHpGatedStatChangeAbAttr extends PostDefendAbAttr {
} }
applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean { applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean {
const hpGateFlat: integer = Math.ceil(pokemon.getMaxHp() * this.hpGate) const hpGateFlat: integer = Math.ceil(pokemon.getMaxHp() * this.hpGate);
const lastAttackReceived = pokemon.turnData.attacksReceived[pokemon.turnData.attacksReceived.length - 1] const lastAttackReceived = pokemon.turnData.attacksReceived[pokemon.turnData.attacksReceived.length - 1];
if (this.condition(pokemon, attacker, move.getMove()) && (pokemon.hp <= hpGateFlat && (pokemon.hp + lastAttackReceived.damage) > hpGateFlat)) { if (this.condition(pokemon, attacker, move.getMove()) && (pokemon.hp <= hpGateFlat && (pokemon.hp + lastAttackReceived.damage) > hpGateFlat)) {
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, (this.selfTarget ? pokemon : attacker).getBattlerIndex(), true, this.stats, this.levels)); pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, (this.selfTarget ? pokemon : attacker).getBattlerIndex(), true, this.stats, this.levels));
return true; return true;
@ -842,7 +842,7 @@ export class PostDefendAbilitySwapAbAttr extends PostDefendAbAttr {
} }
getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string {
return getPokemonMessage(pokemon, ` swapped\nabilities with its target!`); return getPokemonMessage(pokemon, ' swapped\nabilities with its target!');
} }
} }
@ -1378,10 +1378,10 @@ export class PostIntimidateStatChangeAbAttr extends AbAttr {
private overwrites: boolean; private overwrites: boolean;
constructor(stats: BattleStat[], levels: integer, overwrites?: boolean) { constructor(stats: BattleStat[], levels: integer, overwrites?: boolean) {
super(true) super(true);
this.stats = stats this.stats = stats;
this.levels = levels this.levels = levels;
this.overwrites = !!overwrites this.overwrites = !!overwrites;
} }
apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean {
@ -1469,8 +1469,8 @@ export class PostSummonStatChangeAbAttr extends PostSummonAbAttr {
pokemon.scene.pushPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, this.stats, this.levels)); pokemon.scene.pushPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, this.stats, this.levels));
return true; return true;
} }
for (let opponent of pokemon.getOpponents()) { for (const opponent of pokemon.getOpponents()) {
const cancelled = new Utils.BooleanHolder(false) const cancelled = new Utils.BooleanHolder(false);
if (this.intimidate) { if (this.intimidate) {
applyAbAttrs(IntimidateImmunityAbAttr, opponent, cancelled); applyAbAttrs(IntimidateImmunityAbAttr, opponent, cancelled);
applyAbAttrs(PostIntimidateStatChangeAbAttr, opponent, cancelled); applyAbAttrs(PostIntimidateStatChangeAbAttr, opponent, cancelled);
@ -1526,7 +1526,7 @@ export class PostSummonClearAllyStatsAbAttr extends PostSummonAbAttr {
for (let s = 0; s < target.summonData.battleStats.length; s++) for (let s = 0; s < target.summonData.battleStats.length; s++)
target.summonData.battleStats[s] = 0; target.summonData.battleStats[s] = 0;
target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere removed!`)); target.scene.queueMessage(getPokemonMessage(target, '\'s stat changes\nwere removed!'));
return true; return true;
} }
@ -1544,7 +1544,7 @@ export class DownloadAbAttr extends PostSummonAbAttr {
this.enemyDef = 0; this.enemyDef = 0;
this.enemySpDef = 0; this.enemySpDef = 0;
for (let opponent of pokemon.getOpponents()) { for (const opponent of pokemon.getOpponents()) {
this.enemyDef += opponent.stats[BattleStat.DEF]; this.enemyDef += opponent.stats[BattleStat.DEF];
this.enemySpDef += opponent.stats[BattleStat.SPDEF]; this.enemySpDef += opponent.stats[BattleStat.SPDEF];
} }
@ -1950,8 +1950,8 @@ function getWeatherCondition(...weatherTypes: WeatherType[]): AbAttrCondition {
function getAnticipationCondition(): AbAttrCondition { function getAnticipationCondition(): AbAttrCondition {
return (pokemon: Pokemon) => { return (pokemon: Pokemon) => {
for (let opponent of pokemon.getOpponents()) { for (const opponent of pokemon.getOpponents()) {
for (let move of opponent.moveset) { for (const move of opponent.moveset) {
// move is super effective // move is super effective
if (move.getMove() instanceof AttackMove && pokemon.getAttackTypeEffectiveness(move.getMove().type, opponent) >= 2) { if (move.getMove() instanceof AttackMove && pokemon.getAttackTypeEffectiveness(move.getMove().type, opponent) >= 2) {
return true; return true;
@ -1995,7 +1995,7 @@ function getAnticipationCondition(): AbAttrCondition {
function getOncePerBattleCondition(ability: Abilities): AbAttrCondition { function getOncePerBattleCondition(ability: Abilities): AbAttrCondition {
return (pokemon: Pokemon) => { return (pokemon: Pokemon) => {
return !pokemon.battleData?.abilitiesApplied.includes(ability); return !pokemon.battleData?.abilitiesApplied.includes(ability);
} };
} }
export class ForewarnAbAttr extends PostSummonAbAttr { export class ForewarnAbAttr extends PostSummonAbAttr {
@ -2005,10 +2005,10 @@ export class ForewarnAbAttr extends PostSummonAbAttr {
applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean {
let maxPowerSeen = 0; let maxPowerSeen = 0;
let maxMove = ""; let maxMove = '';
let movePower = 0; let movePower = 0;
for (let opponent of pokemon.getOpponents()) { for (const opponent of pokemon.getOpponents()) {
for (let move of opponent.moveset) { for (const move of opponent.moveset) {
if (move.getMove() instanceof StatusMove) { if (move.getMove() instanceof StatusMove) {
movePower = 1; movePower = 1;
} else if (move.getMove().findAttr(attr => attr instanceof OneHitKOAttr)) { } else if (move.getMove().findAttr(attr => attr instanceof OneHitKOAttr)) {
@ -2027,7 +2027,7 @@ export class ForewarnAbAttr extends PostSummonAbAttr {
} }
} }
} }
pokemon.scene.queueMessage(getPokemonMessage(pokemon, " was forewarned about " + maxMove + "!")); pokemon.scene.queueMessage(getPokemonMessage(pokemon, ' was forewarned about ' + maxMove + '!'));
return true; return true;
} }
} }
@ -2038,8 +2038,8 @@ export class FriskAbAttr extends PostSummonAbAttr {
} }
applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean {
for (let opponent of pokemon.getOpponents()) { for (const opponent of pokemon.getOpponents()) {
pokemon.scene.queueMessage(getPokemonMessage(pokemon, " frisked " + opponent.name + "\'s " + opponent.getAbility().name + "!")); pokemon.scene.queueMessage(getPokemonMessage(pokemon, ' frisked ' + opponent.name + '\'s ' + opponent.getAbility().name + '!'));
} }
return true; return true;
} }
@ -2212,17 +2212,17 @@ export class MoodyAbAttr extends PostTurnAbAttr {
} }
applyPostTurn(pokemon: Pokemon, passive: boolean, args: any[]): boolean { applyPostTurn(pokemon: Pokemon, passive: boolean, args: any[]): boolean {
let selectableStats = [BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD]; const selectableStats = [BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD];
let increaseStatArray = selectableStats.filter(s => pokemon.summonData.battleStats[s] < 6); const increaseStatArray = selectableStats.filter(s => pokemon.summonData.battleStats[s] < 6);
let decreaseStatArray = selectableStats.filter(s => pokemon.summonData.battleStats[s] > -6); let decreaseStatArray = selectableStats.filter(s => pokemon.summonData.battleStats[s] > -6);
if (increaseStatArray.length > 0) { if (increaseStatArray.length > 0) {
let increaseStat = increaseStatArray[Utils.randInt(increaseStatArray.length)]; const increaseStat = increaseStatArray[Utils.randInt(increaseStatArray.length)];
decreaseStatArray = decreaseStatArray.filter(s => s !== increaseStat); decreaseStatArray = decreaseStatArray.filter(s => s !== increaseStat);
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [increaseStat], 2)); pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [increaseStat], 2));
} }
if (decreaseStatArray.length > 0) { if (decreaseStatArray.length > 0) {
let decreaseStat = selectableStats[Utils.randInt(selectableStats.length)]; const decreaseStat = selectableStats[Utils.randInt(selectableStats.length)];
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [decreaseStat], -1)); pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [decreaseStat], -1));
} }
return true; return true;
@ -2297,7 +2297,7 @@ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr {
*/ */
applyPostTurn(pokemon: Pokemon, passive: boolean, args: any[]): boolean | Promise<boolean> { applyPostTurn(pokemon: Pokemon, passive: boolean, args: any[]): boolean | Promise<boolean> {
let hadEffect: boolean = false; let hadEffect: boolean = false;
for(let opp of pokemon.getOpponents()) { for(const opp of pokemon.getOpponents()) {
if(opp.status !== undefined && opp.status.effect === StatusEffect.SLEEP) { if(opp.status !== undefined && opp.status.effect === StatusEffect.SLEEP) {
opp.damageAndUpdate(Math.floor(Math.max(1, opp.getMaxHp() / 8)), HitResult.OTHER); opp.damageAndUpdate(Math.floor(Math.max(1, opp.getMaxHp() / 8)), HitResult.OTHER);
pokemon.scene.queueMessage(i18next.t('abilityTriggers:badDreams', {pokemonName: `${getPokemonPrefix(opp)}${opp.name}`})); pokemon.scene.queueMessage(i18next.t('abilityTriggers:badDreams', {pokemonName: `${getPokemonPrefix(opp)}${opp.name}`}));
@ -2326,7 +2326,7 @@ export class FetchBallAbAttr extends PostTurnAbAttr {
* @returns true if player has used a pokeball and this pokemon is owned by the player * @returns true if player has used a pokeball and this pokemon is owned by the player
*/ */
applyPostTurn(pokemon: Pokemon, passive: boolean, args: any[]): boolean { applyPostTurn(pokemon: Pokemon, passive: boolean, args: any[]): boolean {
let lastUsed = pokemon.scene.currentBattle.lastUsedPokeball; const lastUsed = pokemon.scene.currentBattle.lastUsedPokeball;
if(lastUsed != null && pokemon.isPlayer) { if(lastUsed != null && pokemon.isPlayer) {
pokemon.scene.pokeballCounts[lastUsed]++; pokemon.scene.pokeballCounts[lastUsed]++;
pokemon.scene.currentBattle.lastUsedPokeball = null; pokemon.scene.currentBattle.lastUsedPokeball = null;
@ -2526,7 +2526,7 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr {
applyPostFaint(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean { applyPostFaint(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean {
if (move.getMove().checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon)) { if (move.getMove().checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon)) {
const cancelled = new Utils.BooleanHolder(false); const cancelled = new Utils.BooleanHolder(false);
pokemon.scene.getField(true).map(p=>applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled)) pokemon.scene.getField(true).map(p=>applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled));
if (cancelled) { if (cancelled) {
return false; return false;
} }
@ -3217,7 +3217,7 @@ export function initAbilities() {
.ignorable(), .ignorable(),
new Ability(Abilities.AIR_LOCK, 3) new Ability(Abilities.AIR_LOCK, 3)
.attr(SuppressWeatherEffectAbAttr, true) .attr(SuppressWeatherEffectAbAttr, true)
.attr(PostSummonUnnamedMessageAbAttr, "The effects of the weather disappeared."), .attr(PostSummonUnnamedMessageAbAttr, 'The effects of the weather disappeared.'),
new Ability(Abilities.TANGLED_FEET, 4) new Ability(Abilities.TANGLED_FEET, 4)
.conditionalAttr(pokemon => !!pokemon.getTag(BattlerTagType.CONFUSED), BattleStatMultiplierAbAttr, BattleStat.EVA, 2) .conditionalAttr(pokemon => !!pokemon.getTag(BattlerTagType.CONFUSED), BattleStatMultiplierAbAttr, BattleStat.EVA, 2)
.ignorable(), .ignorable(),
@ -3288,7 +3288,7 @@ export function initAbilities() {
.attr(MovePowerBoostAbAttr, (user, target, move) => { .attr(MovePowerBoostAbAttr, (user, target, move) => {
const power = new Utils.NumberHolder(move.power); const power = new Utils.NumberHolder(move.power);
applyMoveAttrs(VariablePowerAttr, user, target, move, power); applyMoveAttrs(VariablePowerAttr, user, target, move, power);
return power.value <= 60 return power.value <= 60;
}, 1.5), }, 1.5),
new Ability(Abilities.LEAF_GUARD, 4) new Ability(Abilities.LEAF_GUARD, 4)
.attr(StatusEffectImmunityAbAttr) .attr(StatusEffectImmunityAbAttr)

View File

@ -6,7 +6,7 @@ import PokemonSpecies, { PokemonForm, SpeciesFormKey, allSpecies } from './pokem
import { GrowthRate } from './exp'; import { GrowthRate } from './exp';
import { Type } from './type'; import { Type } from './type';
import { allAbilities } from './ability'; import { allAbilities } from './ability';
import { Abilities } from "./enums/abilities"; import { Abilities } from './enums/abilities';
import { Species } from './enums/species'; import { Species } from './enums/species';
import { pokemonFormLevelMoves } from './pokemon-level-moves'; import { pokemonFormLevelMoves } from './pokemon-level-moves';
import { tmSpecies } from './tms'; import { tmSpecies } from './tms';
@ -93,16 +93,16 @@ export async function printPokemon() {
const useExistingTmList = true; const useExistingTmList = true;
let enumStr = `export enum Species {\n`; let enumStr = 'export enum Species {\n';
let pokemonSpeciesStr = `\tallSpecies.push(\n`; let pokemonSpeciesStr = '\tallSpecies.push(\n';
const speciesLevelMoves: SpeciesLevelMoves = {}; const speciesLevelMoves: SpeciesLevelMoves = {};
const speciesFormLevelMoves: SpeciesFormLevelMoves = {}; const speciesFormLevelMoves: SpeciesFormLevelMoves = {};
const moveTmSpecies: TmSpecies = {}; const moveTmSpecies: TmSpecies = {};
let pokemonArr: NamedAPIResource[] = []; let pokemonArr: NamedAPIResource[] = [];
let offset = 0; const offset = 0;
let pokemonResponse = await api.pokemon.listPokemons(offset, 2000) const pokemonResponse = await api.pokemon.listPokemons(offset, 2000);
pokemonArr = pokemonResponse.results; pokemonArr = pokemonResponse.results;
@ -111,7 +111,7 @@ export async function printPokemon() {
const pokemonSpeciesList: PokemonSpecies[] = []; const pokemonSpeciesList: PokemonSpecies[] = [];
for (let p of pokemonArr) { for (const p of pokemonArr) {
const pokemon = await api.pokemon.getPokemonByName(p.name); const pokemon = await api.pokemon.getPokemonByName(p.name);
let region: string = ''; let region: string = '';
@ -133,7 +133,7 @@ export async function printPokemon() {
if (ignoredForms.filter(f => formName.indexOf(f) > -1).length) if (ignoredForms.filter(f => formName.indexOf(f) > -1).length)
continue; continue;
let shortFormName = formName.indexOf('-') > -1 const shortFormName = formName.indexOf('-') > -1
? formName.slice(0, formName.indexOf('-')) ? formName.slice(0, formName.indexOf('-'))
: formName; : formName;
@ -143,7 +143,7 @@ export async function printPokemon() {
const formBaseStats: integer[] = []; const formBaseStats: integer[] = [];
let formBaseTotal = 0; let formBaseTotal = 0;
// Assume correct stat order in API result // Assume correct stat order in API result
for (let stat of pokemon.stats) { for (const stat of pokemon.stats) {
formBaseStats.push(stat.base_stat); formBaseStats.push(stat.base_stat);
formBaseTotal += stat.base_stat; formBaseTotal += stat.base_stat;
} }
@ -168,7 +168,7 @@ export async function printPokemon() {
speciesFormLevelMoves[speciesKey] = []; speciesFormLevelMoves[speciesKey] = [];
speciesFormLevelMoves[speciesKey][pokemonForm.formIndex] = []; speciesFormLevelMoves[speciesKey][pokemonForm.formIndex] = [];
for (let version of versions) { for (const version of versions) {
if (pokemon.moves.find(m => m.version_group_details.find(v => v.version_group.name === version && v.move_learn_method.name === 'level-up'))) { if (pokemon.moves.find(m => m.version_group_details.find(v => v.version_group.name === version && v.move_learn_method.name === 'level-up'))) {
moveVer = version; moveVer = version;
break; break;
@ -235,7 +235,7 @@ export async function printPokemon() {
const baseStats: integer[] = []; const baseStats: integer[] = [];
let baseTotal = 0; let baseTotal = 0;
// Assume correct stat order in API result // Assume correct stat order in API result
for (let stat of pokemon.stats) { for (const stat of pokemon.stats) {
baseStats.push(stat.base_stat); baseStats.push(stat.base_stat);
baseTotal += stat.base_stat; baseTotal += stat.base_stat;
} }
@ -262,7 +262,7 @@ export async function printPokemon() {
speciesLevelMoves[speciesKey] = []; speciesLevelMoves[speciesKey] = [];
for (let version of versions) { for (const version of versions) {
if (pokemon.moves.find(m => m.version_group_details.find(v => v.version_group.name === version && v.move_learn_method.name === 'level-up'))) { if (pokemon.moves.find(m => m.version_group_details.find(v => v.version_group.name === version && v.move_learn_method.name === 'level-up'))) {
moveVer = version; moveVer = version;
break; break;
@ -298,7 +298,7 @@ export async function printPokemon() {
}); });
} }
for (let f of pokemon.forms) { for (const f of pokemon.forms) {
const form = await api.pokemon.getPokemonFormByName(f.name); const form = await api.pokemon.getPokemonFormByName(f.name);
const formIndex = pokemonSpecies.forms.length; const formIndex = pokemonSpecies.forms.length;
@ -321,7 +321,7 @@ export async function printPokemon() {
pokemonForm.generation = pokemonSpecies.generation; pokemonForm.generation = pokemonSpecies.generation;
if (!pokemonForm.formIndex && speciesTmMoves.length) { if (!pokemonForm.formIndex && speciesTmMoves.length) {
for (let moveId of speciesTmMoves) { for (const moveId of speciesTmMoves) {
const speciesIndex = moveTmSpecies[moveId].findIndex(s => s === speciesKey); const speciesIndex = moveTmSpecies[moveId].findIndex(s => s === speciesKey);
moveTmSpecies[moveId][speciesIndex] = [ moveTmSpecies[moveId][speciesIndex] = [
speciesKey, speciesKey,
@ -336,25 +336,25 @@ export async function printPokemon() {
console.log(pokemonSpecies.name, pokemonSpecies); console.log(pokemonSpecies.name, pokemonSpecies);
} }
for (let pokemonSpecies of pokemonSpeciesList) { for (const pokemonSpecies of pokemonSpeciesList) {
const speciesKey = (pokemonSpecies as any).key as string; const speciesKey = (pokemonSpecies as any).key as string;
enumStr += ` ${speciesKey}${pokemonSpecies.speciesId >= 2000 ? ` = ${pokemonSpecies.speciesId}` : ''},\n`; enumStr += ` ${speciesKey}${pokemonSpecies.speciesId >= 2000 ? ` = ${pokemonSpecies.speciesId}` : ''},\n`;
pokemonSpeciesStr += ` new PokemonSpecies(Species.${speciesKey}, "${pokemonSpecies.name}", ${pokemonSpecies.generation}, ${pokemonSpecies.subLegendary}, ${pokemonSpecies.legendary}, ${pokemonSpecies.mythical}, "${pokemonSpecies.species}", Type.${Type[pokemonSpecies.type1]}, ${pokemonSpecies.type2 ? `Type.${Type[pokemonSpecies.type2]}` : 'null'}, ${pokemonSpecies.height}, ${pokemonSpecies.weight}, Abilities.${Abilities[pokemonSpecies.ability1]}, Abilities.${Abilities[pokemonSpecies.ability2]}, Abilities.${Abilities[pokemonSpecies.abilityHidden]}, ${pokemonSpecies.baseTotal}, ${pokemonSpecies.baseStats[0]}, ${pokemonSpecies.baseStats[1]}, ${pokemonSpecies.baseStats[2]}, ${pokemonSpecies.baseStats[3]}, ${pokemonSpecies.baseStats[4]}, ${pokemonSpecies.baseStats[5]}, ${pokemonSpecies.catchRate}, ${pokemonSpecies.baseFriendship}, ${pokemonSpecies.baseExp}, GrowthRate.${GrowthRate[pokemonSpecies.growthRate]}, ${pokemonSpecies.malePercent}, ${pokemonSpecies.genderDiffs}`; pokemonSpeciesStr += ` new PokemonSpecies(Species.${speciesKey}, "${pokemonSpecies.name}", ${pokemonSpecies.generation}, ${pokemonSpecies.subLegendary}, ${pokemonSpecies.legendary}, ${pokemonSpecies.mythical}, "${pokemonSpecies.species}", Type.${Type[pokemonSpecies.type1]}, ${pokemonSpecies.type2 ? `Type.${Type[pokemonSpecies.type2]}` : 'null'}, ${pokemonSpecies.height}, ${pokemonSpecies.weight}, Abilities.${Abilities[pokemonSpecies.ability1]}, Abilities.${Abilities[pokemonSpecies.ability2]}, Abilities.${Abilities[pokemonSpecies.abilityHidden]}, ${pokemonSpecies.baseTotal}, ${pokemonSpecies.baseStats[0]}, ${pokemonSpecies.baseStats[1]}, ${pokemonSpecies.baseStats[2]}, ${pokemonSpecies.baseStats[3]}, ${pokemonSpecies.baseStats[4]}, ${pokemonSpecies.baseStats[5]}, ${pokemonSpecies.catchRate}, ${pokemonSpecies.baseFriendship}, ${pokemonSpecies.baseExp}, GrowthRate.${GrowthRate[pokemonSpecies.growthRate]}, ${pokemonSpecies.malePercent}, ${pokemonSpecies.genderDiffs}`;
if (pokemonSpecies.forms.length > 1) { if (pokemonSpecies.forms.length > 1) {
pokemonSpeciesStr += `, ${pokemonSpecies.canChangeForm},`; pokemonSpeciesStr += `, ${pokemonSpecies.canChangeForm},`;
for (let form of pokemonSpecies.forms) for (const form of pokemonSpecies.forms)
pokemonSpeciesStr += `\n new PokemonForm("${form.formName}", "${form.formName}", Type.${Type[form.type1]}, ${form.type2 ? `Type.${Type[form.type2]}` : 'null'}, ${form.height}, ${form.weight}, Abilities.${Abilities[form.ability1]}, Abilities.${Abilities[form.ability2]}, Abilities.${Abilities[form.abilityHidden]}, ${form.baseTotal}, ${form.baseStats[0]}, ${form.baseStats[1]}, ${form.baseStats[2]}, ${form.baseStats[3]}, ${form.baseStats[4]}, ${form.baseStats[5]}, ${form.catchRate}, ${form.baseFriendship}, ${form.baseExp}${form.genderDiffs ? ', true' : ''}),`; pokemonSpeciesStr += `\n new PokemonForm("${form.formName}", "${form.formName}", Type.${Type[form.type1]}, ${form.type2 ? `Type.${Type[form.type2]}` : 'null'}, ${form.height}, ${form.weight}, Abilities.${Abilities[form.ability1]}, Abilities.${Abilities[form.ability2]}, Abilities.${Abilities[form.abilityHidden]}, ${form.baseTotal}, ${form.baseStats[0]}, ${form.baseStats[1]}, ${form.baseStats[2]}, ${form.baseStats[3]}, ${form.baseStats[4]}, ${form.baseStats[5]}, ${form.catchRate}, ${form.baseFriendship}, ${form.baseExp}${form.genderDiffs ? ', true' : ''}),`;
pokemonSpeciesStr += '\n '; pokemonSpeciesStr += '\n ';
} }
pokemonSpeciesStr += `),\n`; pokemonSpeciesStr += '),\n';
} }
let speciesLevelMovesStr = `export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {\n`; let speciesLevelMovesStr = 'export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {\n';
let speciesFormLevelMovesStr = `export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {\n`; let speciesFormLevelMovesStr = 'export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {\n';
let tmSpeciesStr = `export const tmSpecies: TmSpecies = {\n`; let tmSpeciesStr = 'export const tmSpecies: TmSpecies = {\n';
for (let species of Object.keys(speciesLevelMoves)) { for (const species of Object.keys(speciesLevelMoves)) {
speciesLevelMovesStr += ` [Species.${species}]: [\n`; speciesLevelMovesStr += ` [Species.${species}]: [\n`;
const orderedLevelMoves = speciesLevelMoves[species].sort((a: LevelMove, b: LevelMove) => { const orderedLevelMoves = speciesLevelMoves[species].sort((a: LevelMove, b: LevelMove) => {
@ -363,16 +363,16 @@ export async function printPokemon() {
return a[1] < b[1] ? -1 : 1; return a[1] < b[1] ? -1 : 1;
}); });
for (let lm of orderedLevelMoves) for (const lm of orderedLevelMoves)
speciesLevelMovesStr += ` [ ${lm[0]}, Moves.${Moves[lm[1]]} ],\n`; speciesLevelMovesStr += ` [ ${lm[0]}, Moves.${Moves[lm[1]]} ],\n`;
speciesLevelMovesStr += ` ],\n`; speciesLevelMovesStr += ' ],\n';
} }
for (let species of Object.keys(speciesFormLevelMoves)) { for (const species of Object.keys(speciesFormLevelMoves)) {
speciesFormLevelMovesStr += ` [Species.${species}]: {\n`; speciesFormLevelMovesStr += ` [Species.${species}]: {\n`;
for (let f of Object.keys(speciesFormLevelMoves[species])) { for (const f of Object.keys(speciesFormLevelMoves[species])) {
speciesFormLevelMovesStr += ` ${f}: [\n`; speciesFormLevelMovesStr += ` ${f}: [\n`;
const orderedLevelMoves = speciesFormLevelMoves[species][f].sort((a: LevelMove, b: LevelMove) => { const orderedLevelMoves = speciesFormLevelMoves[species][f].sort((a: LevelMove, b: LevelMove) => {
@ -381,18 +381,18 @@ export async function printPokemon() {
return a[1] < b[1] ? -1 : 1; return a[1] < b[1] ? -1 : 1;
}); });
for (let lm of orderedLevelMoves) for (const lm of orderedLevelMoves)
speciesFormLevelMovesStr += ` [ ${lm[0]}, Moves.${Moves[lm[1]]} ],\n`; speciesFormLevelMovesStr += ` [ ${lm[0]}, Moves.${Moves[lm[1]]} ],\n`;
speciesFormLevelMovesStr += ` ],\n`; speciesFormLevelMovesStr += ' ],\n';
} }
speciesFormLevelMovesStr += ` },\n`; speciesFormLevelMovesStr += ' },\n';
} }
for (let moveId of Object.keys(moveTmSpecies)) { for (const moveId of Object.keys(moveTmSpecies)) {
tmSpeciesStr += ` [Moves.${Moves[parseInt(moveId)]}]: [\n`; tmSpeciesStr += ` [Moves.${Moves[parseInt(moveId)]}]: [\n`;
for (let species of moveTmSpecies[moveId]) { for (const species of moveTmSpecies[moveId]) {
if (typeof species === 'string') if (typeof species === 'string')
tmSpeciesStr += ` Species.${species},\n`; tmSpeciesStr += ` Species.${species},\n`;
else { else {
@ -402,20 +402,20 @@ export async function printPokemon() {
tmSpeciesStr += ` Species.${species[0]},\n`; tmSpeciesStr += ` Species.${species[0]},\n`;
else { else {
tmSpeciesStr += ` [\n Species.${species[0]},\n`; tmSpeciesStr += ` [\n Species.${species[0]},\n`;
for (let form of forms) for (const form of forms)
tmSpeciesStr += ` '${form}',\n`; tmSpeciesStr += ` '${form}',\n`;
tmSpeciesStr += ` ],\n`; tmSpeciesStr += ' ],\n';
} }
} }
} }
tmSpeciesStr += ` ],\n`; tmSpeciesStr += ' ],\n';
} }
enumStr += `\n};`; enumStr += '\n};';
pokemonSpeciesStr += ` );`; pokemonSpeciesStr += ' );';
speciesLevelMovesStr += `\n};`; speciesLevelMovesStr += '\n};';
speciesFormLevelMovesStr += `\n};`; speciesFormLevelMovesStr += '\n};';
tmSpeciesStr += `\n};`; tmSpeciesStr += '\n};';
console.log(enumStr); console.log(enumStr);
console.log(pokemonSpeciesStr); console.log(pokemonSpeciesStr);
@ -423,7 +423,7 @@ export async function printPokemon() {
console.log(speciesFormLevelMovesStr); console.log(speciesFormLevelMovesStr);
console.log(tmSpeciesStr); console.log(tmSpeciesStr);
console.log(moveTmSpecies) console.log(moveTmSpecies);
} }
export async function printAbilities() { export async function printAbilities() {
@ -433,17 +433,17 @@ export async function printAbilities() {
const api = new MainClient(); const api = new MainClient();
let enumStr = `export enum Abilities {\n NONE,`; let enumStr = 'export enum Abilities {\n NONE,';
let abilityStr = ' allAbilities.push('; let abilityStr = ' allAbilities.push(';
abilityContent = abilityContent.slice(abilityContent.indexOf(abilityStr)); abilityContent = abilityContent.slice(abilityContent.indexOf(abilityStr));
let abilities: NamedAPIResource[] = []; let abilities: NamedAPIResource[] = [];
let offset = 0; const offset = 0;
let abilitiesResponse = await api.pokemon.listAbilities(offset, 2000); const abilitiesResponse = await api.pokemon.listAbilities(offset, 2000);
abilities = abilitiesResponse.results; abilities = abilitiesResponse.results;
for (let a of abilities) { for (const a of abilities) {
const ability = await api.pokemon.getAbilityByName(a.name); const ability = await api.pokemon.getAbilityByName(a.name);
const abilityEnumName = ability.name.toUpperCase().replace(/\_/g, '').replace(/\-/g, '_'); const abilityEnumName = ability.name.toUpperCase().replace(/\_/g, '').replace(/\-/g, '_');
enumStr += `\n ${abilityEnumName},`; enumStr += `\n ${abilityEnumName},`;
@ -465,7 +465,7 @@ export async function printAbilities() {
let flavorText: string; let flavorText: string;
if (!matchingLine || replaceText) { if (!matchingLine || replaceText) {
for (let version of versions) { for (const version of versions) {
if ((flavorText = ability.flavor_text_entries.find(fte => fte.language.name === 'en' && fte.version_group.name === version)?.flavor_text) || '') { if ((flavorText = ability.flavor_text_entries.find(fte => fte.language.name === 'en' && fte.version_group.name === version)?.flavor_text) || '') {
if (flavorText.indexOf('forgotten') > -1) if (flavorText.indexOf('forgotten') > -1)
continue; continue;
@ -483,8 +483,8 @@ export async function printAbilities() {
abilityStr += ','; abilityStr += ',';
} }
enumStr += `\n};`; enumStr += '\n};';
abilityStr += `\n);`; abilityStr += '\n);';
console.log(enumStr); console.log(enumStr);
console.log(abilityStr); console.log(abilityStr);
@ -497,19 +497,19 @@ export async function printMoves() {
const api = new MainClient(); const api = new MainClient();
let enumStr = `export enum Moves {\n NONE,`; let enumStr = 'export enum Moves {\n NONE,';
let moveStr = ' allMoves.push('; let moveStr = ' allMoves.push(';
moveContent = moveContent.slice(moveContent.indexOf(moveStr)); moveContent = moveContent.slice(moveContent.indexOf(moveStr));
let moves: NamedAPIResource[] = []; let moves: NamedAPIResource[] = [];
let offset = 0; const offset = 0;
let movesResponse = await api.move.listMoves(offset, 2000); const movesResponse = await api.move.listMoves(offset, 2000);
moves = movesResponse.results; moves = movesResponse.results;
console.log(moves); console.log(moves);
for (let m of moves) { for (const m of moves) {
const move = await api.move.getMoveByName(m.name); const move = await api.move.getMoveByName(m.name);
const moveEnumName = move.name.toUpperCase().replace(/\_/g, '').replace(/\-/g, '_'); const moveEnumName = move.name.toUpperCase().replace(/\_/g, '').replace(/\-/g, '_');
enumStr += `\n ${moveEnumName},`; enumStr += `\n ${moveEnumName},`;
@ -531,7 +531,7 @@ export async function printMoves() {
let flavorText: string; let flavorText: string;
if (!matchingLine || replaceText) { if (!matchingLine || replaceText) {
for (let version of versions) { for (const version of versions) {
if ((flavorText = move.flavor_text_entries.find(fte => fte.language.name === 'en' && fte.version_group.name === version)?.flavor_text) || '') { if ((flavorText = move.flavor_text_entries.find(fte => fte.language.name === 'en' && fte.version_group.name === version)?.flavor_text) || '') {
if (flavorText.indexOf('forgotten') > -1) if (flavorText.indexOf('forgotten') > -1)
continue; continue;
@ -546,7 +546,7 @@ export async function printMoves() {
if (matchingLine && matchingLine.length > 1) { if (matchingLine && matchingLine.length > 1) {
const newLineIndex = matchingLine.indexOf('\n'); const newLineIndex = matchingLine.indexOf('\n');
if (newLineIndex > -1) { if (newLineIndex > -1) {
console.log(matchingLine.slice(newLineIndex).replace(/(?:\r)?\n[ \t]+.target\(.*?\)/g, ''), newLineIndex) console.log(matchingLine.slice(newLineIndex).replace(/(?:\r)?\n[ \t]+.target\(.*?\)/g, ''), newLineIndex);
moveStr += matchingLine.slice(newLineIndex).replace(/(?:\r)?\n[ \t]+.target\(.*?\)/g, ''); moveStr += matchingLine.slice(newLineIndex).replace(/(?:\r)?\n[ \t]+.target\(.*?\)/g, '');
} }
} }
@ -555,8 +555,8 @@ export async function printMoves() {
moveStr += ','; moveStr += ',';
} }
enumStr += `\n};`; enumStr += '\n};';
moveStr += `\n);`; moveStr += '\n);';
console.log(enumStr); console.log(enumStr);
console.log(moveStr); console.log(moveStr);
@ -569,17 +569,17 @@ export async function printTmSpecies() {
const moveIds = Object.keys(tmSpecies).map(k => parseInt(k) as Moves); const moveIds = Object.keys(tmSpecies).map(k => parseInt(k) as Moves);
for (let moveId of moveIds) { for (const moveId of moveIds) {
const move = await api.move.getMoveById(moveId); const move = await api.move.getMoveById(moveId);
moveTmSpecies[moveId] = []; moveTmSpecies[moveId] = [];
for (let species of move.learned_by_pokemon) { for (const species of move.learned_by_pokemon) {
const dexIdMatch = /\/(\d+)\//.exec(species.url); const dexIdMatch = /\/(\d+)\//.exec(species.url);
if (!dexIdMatch) if (!dexIdMatch)
continue; continue;
let dexId = parseInt(dexIdMatch[1]); const dexId = parseInt(dexIdMatch[1]);
let matchingSpecies: PokemonSpecies; let matchingSpecies: PokemonSpecies;
let formKey = ''; let formKey = '';
@ -629,11 +629,11 @@ export async function printTmSpecies() {
} }
} }
let tmSpeciesStr = `export const tmSpecies: TmSpecies = {\n`; let tmSpeciesStr = 'export const tmSpecies: TmSpecies = {\n';
for (let moveId of Object.keys(moveTmSpecies)) { for (const moveId of Object.keys(moveTmSpecies)) {
tmSpeciesStr += ` [Moves.${Moves[parseInt(moveId)]}]: [\n`; tmSpeciesStr += ` [Moves.${Moves[parseInt(moveId)]}]: [\n`;
for (let species of moveTmSpecies[moveId]) { for (const species of moveTmSpecies[moveId]) {
if (typeof species === 'string') if (typeof species === 'string')
tmSpeciesStr += ` Species.${species},\n`; tmSpeciesStr += ` Species.${species},\n`;
else { else {
@ -643,16 +643,16 @@ export async function printTmSpecies() {
tmSpeciesStr += ` Species.${species[0]},\n`; tmSpeciesStr += ` Species.${species[0]},\n`;
else { else {
tmSpeciesStr += ` [\n Species.${species[0]},\n`; tmSpeciesStr += ` [\n Species.${species[0]},\n`;
for (let form of forms) for (const form of forms)
tmSpeciesStr += ` '${form}',\n`; tmSpeciesStr += ` '${form}',\n`;
tmSpeciesStr += ` ],\n`; tmSpeciesStr += ' ],\n';
} }
} }
} }
tmSpeciesStr += ` ],\n`; tmSpeciesStr += ' ],\n';
} }
tmSpeciesStr += `\n};`; tmSpeciesStr += '\n};';
console.log(tmSpeciesStr); console.log(tmSpeciesStr);
} }

View File

@ -1,16 +1,16 @@
import { Arena } from "../field/arena"; import { Arena } from '../field/arena';
import { Type } from "./type"; import { Type } from './type';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { MoveCategory, allMoves } from "./move"; import { MoveCategory, allMoves } from './move';
import { getPokemonMessage } from "../messages"; import { getPokemonMessage } from '../messages';
import Pokemon, { HitResult, PokemonMove } from "../field/pokemon"; import Pokemon, { HitResult, PokemonMove } from '../field/pokemon';
import { MoveEffectPhase, PokemonHealPhase, StatChangePhase} from "../phases"; import { MoveEffectPhase, PokemonHealPhase, StatChangePhase} from '../phases';
import { StatusEffect } from "./status-effect"; import { StatusEffect } from './status-effect';
import { BattlerIndex } from "../battle"; import { BattlerIndex } from '../battle';
import { Moves } from "./enums/moves"; import { Moves } from './enums/moves';
import { ArenaTagType } from "./enums/arena-tag-type"; import { ArenaTagType } from './enums/arena-tag-type';
import { BlockNonDirectDamageAbAttr, ProtectStatAbAttr, applyAbAttrs } from "./ability"; import { BlockNonDirectDamageAbAttr, ProtectStatAbAttr, applyAbAttrs } from './ability';
import { BattleStat } from "./battle-stat"; import { BattleStat } from './battle-stat';
export enum ArenaTagSide { export enum ArenaTagSide {
BOTH, BOTH,
@ -65,7 +65,7 @@ export class MistTag extends ArenaTag {
super.onAdd(arena); super.onAdd(arena);
const source = arena.scene.getPokemonById(this.sourceId); const source = arena.scene.getPokemonById(this.sourceId);
arena.scene.queueMessage(getPokemonMessage(source, `'s team became\nshrouded in mist!`)); arena.scene.queueMessage(getPokemonMessage(source, '\'s team became\nshrouded in mist!'));
} }
apply(arena: Arena, args: any[]): boolean { apply(arena: Arena, args: any[]): boolean {

View File

@ -1,12 +1,12 @@
//import { battleAnimRawData } from "./battle-anim-raw-data"; //import { battleAnimRawData } from "./battle-anim-raw-data";
import BattleScene from "../battle-scene"; import BattleScene from '../battle-scene';
import { AttackMove, ChargeAttr, DelayedAttackAttr, MoveFlags, SelfStatusMove, allMoves } from "./move"; import { AttackMove, ChargeAttr, DelayedAttackAttr, MoveFlags, SelfStatusMove, allMoves } from './move';
import Pokemon from "../field/pokemon"; import Pokemon from '../field/pokemon';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { BattlerIndex } from "../battle"; import { BattlerIndex } from '../battle';
import stringify, { Element } from "json-stable-stringify"; import stringify, { Element } from 'json-stable-stringify';
import { Moves } from "./enums/moves"; import { Moves } from './enums/moves';
import { getTypeRgb } from "./type"; import { getTypeRgb } from './type';
//import fs from 'vite-plugin-fs/browser'; //import fs from 'vite-plugin-fs/browser';
export enum AnimFrameTarget { export enum AnimFrameTarget {
@ -125,9 +125,9 @@ export class AnimConfig {
this.frames = frames; this.frames = frames;
const frameTimedEvents = source.frameTimedEvents; const frameTimedEvents = source.frameTimedEvents;
for (let fte of Object.keys(frameTimedEvents)) { for (const fte of Object.keys(frameTimedEvents)) {
const timedEvents: AnimTimedEvent[] = []; const timedEvents: AnimTimedEvent[] = [];
for (let te of frameTimedEvents[fte]) { for (const te of frameTimedEvents[fte]) {
let timedEvent: AnimTimedEvent; let timedEvent: AnimTimedEvent;
switch (te.eventType) { switch (te.eventType) {
case 'AnimTimedSoundEvent': case 'AnimTimedSoundEvent':
@ -154,8 +154,8 @@ export class AnimConfig {
getSoundResourceNames(): string[] { getSoundResourceNames(): string[] {
const sounds = new Set<string>(); const sounds = new Set<string>();
for (let ftes of this.frameTimedEvents.values()) { for (const ftes of this.frameTimedEvents.values()) {
for (let fte of ftes) { for (const fte of ftes) {
if (fte instanceof AnimTimedSoundEvent && fte.resourceName) if (fte instanceof AnimTimedSoundEvent && fte.resourceName)
sounds.add(fte.resourceName); sounds.add(fte.resourceName);
} }
@ -167,8 +167,8 @@ export class AnimConfig {
getBackgroundResourceNames(): string[] { getBackgroundResourceNames(): string[] {
const backgrounds = new Set<string>(); const backgrounds = new Set<string>();
for (let ftes of this.frameTimedEvents.values()) { for (const ftes of this.frameTimedEvents.values()) {
for (let fte of ftes) { for (const fte of ftes) {
if (fte instanceof AnimTimedAddBgEvent && fte.resourceName) if (fte instanceof AnimTimedAddBgEvent && fte.resourceName)
backgrounds.add(fte.resourceName); backgrounds.add(fte.resourceName);
} }
@ -445,7 +445,7 @@ export function initMoveAnim(scene: BattleScene, move: Moves): Promise<void> {
if (moveAnims.get(move) !== null) if (moveAnims.get(move) !== null)
resolve(); resolve();
else { else {
let loadedCheckTimer = setInterval(() => { const loadedCheckTimer = setInterval(() => {
if (moveAnims.get(move) !== null) { if (moveAnims.get(move) !== null) {
const chargeAttr = allMoves[move].getAttrs(ChargeAttr).find(() => true) as ChargeAttr || allMoves[move].getAttrs(DelayedAttackAttr).find(() => true) as DelayedAttackAttr; const chargeAttr = allMoves[move].getAttrs(ChargeAttr).find(() => true) as ChargeAttr || allMoves[move].getAttrs(DelayedAttackAttr).find(() => true) as DelayedAttackAttr;
if (chargeAttr && chargeAnims.get(chargeAttr.chargeAnim) === null) if (chargeAttr && chargeAnims.get(chargeAttr.chargeAnim) === null)
@ -493,7 +493,7 @@ export function initMoveChargeAnim(scene: BattleScene, chargeAnim: ChargeAnim):
if (chargeAnims.get(chargeAnim) !== null) if (chargeAnims.get(chargeAnim) !== null)
resolve(); resolve();
else { else {
let loadedCheckTimer = setInterval(() => { const loadedCheckTimer = setInterval(() => {
if (chargeAnims.get(chargeAnim) !== null) { if (chargeAnims.get(chargeAnim) !== null) {
clearInterval(loadedCheckTimer); clearInterval(loadedCheckTimer);
resolve(); resolve();
@ -543,7 +543,7 @@ export function loadCommonAnimAssets(scene: BattleScene, startLoad?: boolean): P
export function loadMoveAnimAssets(scene: BattleScene, moveIds: Moves[], startLoad?: boolean): Promise<void> { export function loadMoveAnimAssets(scene: BattleScene, moveIds: Moves[], startLoad?: boolean): Promise<void> {
return new Promise(resolve => { return new Promise(resolve => {
const moveAnimations = moveIds.map(m => moveAnims.get(m) as AnimConfig).flat(); const moveAnimations = moveIds.map(m => moveAnims.get(m) as AnimConfig).flat();
for (let moveId of moveIds) { for (const moveId of moveIds) {
const chargeAttr = allMoves[moveId].getAttrs(ChargeAttr).find(() => true) as ChargeAttr || allMoves[moveId].getAttrs(DelayedAttackAttr).find(() => true) as DelayedAttackAttr; const chargeAttr = allMoves[moveId].getAttrs(ChargeAttr).find(() => true) as ChargeAttr || allMoves[moveId].getAttrs(DelayedAttackAttr).find(() => true) as DelayedAttackAttr;
if (chargeAttr) { if (chargeAttr) {
const moveChargeAnims = chargeAnims.get(chargeAttr.chargeAnim); const moveChargeAnims = chargeAnims.get(chargeAttr.chargeAnim);
@ -560,21 +560,21 @@ function loadAnimAssets(scene: BattleScene, anims: AnimConfig[], startLoad?: boo
return new Promise(resolve => { return new Promise(resolve => {
const backgrounds = new Set<string>(); const backgrounds = new Set<string>();
const sounds = new Set<string>(); const sounds = new Set<string>();
for (let a of anims) { for (const a of anims) {
if (!a.frames?.length) if (!a.frames?.length)
continue; continue;
const animSounds = a.getSoundResourceNames(); const animSounds = a.getSoundResourceNames();
for (let ms of animSounds) for (const ms of animSounds)
sounds.add(ms); sounds.add(ms);
const animBackgrounds = a.getBackgroundResourceNames(); const animBackgrounds = a.getBackgroundResourceNames();
for (let abg of animBackgrounds) for (const abg of animBackgrounds)
backgrounds.add(abg); backgrounds.add(abg);
if (a.graphic) if (a.graphic)
scene.loadSpritesheet(a.graphic, 'battle_anims', 96); scene.loadSpritesheet(a.graphic, 'battle_anims', 96);
} }
for (let bg of backgrounds) for (const bg of backgrounds)
scene.loadImage(bg, 'battle_anims'); scene.loadImage(bg, 'battle_anims');
for (let s of sounds) for (const s of sounds)
scene.loadSe(s, 'battle_anims', s); scene.loadSe(s, 'battle_anims', s);
if (startLoad) { if (startLoad) {
scene.load.once(Phaser.Loader.Events.COMPLETE, () => resolve()); scene.load.once(Phaser.Loader.Events.COMPLETE, () => resolve());
@ -680,11 +680,11 @@ export abstract class BattleAnim {
let u = 0; let u = 0;
let t = 0; let t = 0;
for (let frame of frames) { for (const frame of frames) {
let x = frame.x + 106; let x = frame.x + 106;
let y = frame.y + 116; let y = frame.y + 116;
let scaleX = (frame.zoomX / 100) * (!frame.mirror ? 1 : -1); let scaleX = (frame.zoomX / 100) * (!frame.mirror ? 1 : -1);
let scaleY = (frame.zoomY / 100); const scaleY = (frame.zoomY / 100);
switch (frame.focus) { switch (frame.focus) {
case AnimFocus.TARGET: case AnimFocus.TARGET:
x += targetInitialX - targetFocusX; x += targetInitialX - targetFocusX;
@ -747,7 +747,7 @@ export abstract class BattleAnim {
userSprite.setVisible(true); userSprite.setVisible(true);
if (!this.isHideTarget() && (targetSprite !== userSprite || !this.isHideUser())) if (!this.isHideTarget() && (targetSprite !== userSprite || !this.isHideUser()))
targetSprite.setVisible(true); targetSprite.setVisible(true);
for (let ms of Object.values(spriteCache).flat()) { for (const ms of Object.values(spriteCache).flat()) {
if (ms) if (ms)
ms.destroy(); ms.destroy();
} }
@ -787,7 +787,7 @@ export abstract class BattleAnim {
let u = 0; let u = 0;
let t = 0; let t = 0;
let g = 0; let g = 0;
for (let frame of spriteFrames) { for (const frame of spriteFrames) {
if (frame.target !== AnimFrameTarget.GRAPHIC) { if (frame.target !== AnimFrameTarget.GRAPHIC) {
const isUser = frame.target === AnimFrameTarget.USER; const isUser = frame.target === AnimFrameTarget.USER;
if (isUser && target === user) if (isUser && target === user)
@ -824,7 +824,7 @@ export abstract class BattleAnim {
} else { } else {
const sprites = spriteCache[AnimFrameTarget.GRAPHIC]; const sprites = spriteCache[AnimFrameTarget.GRAPHIC];
if (g === sprites.length) { if (g === sprites.length) {
let newSprite: Phaser.GameObjects.Sprite = scene.addFieldSprite(0, 0, anim.graphic, 1); const newSprite: Phaser.GameObjects.Sprite = scene.addFieldSprite(0, 0, anim.graphic, 1);
sprites.push(newSprite); sprites.push(newSprite);
scene.field.add(newSprite); scene.field.add(newSprite);
spritePriorities.push(1); spritePriorities.push(1);
@ -891,15 +891,15 @@ export abstract class BattleAnim {
} }
} }
if (anim.frameTimedEvents.has(f)) { if (anim.frameTimedEvents.has(f)) {
for (let event of anim.frameTimedEvents.get(f)) for (const event of anim.frameTimedEvents.get(f))
r = Math.max((anim.frames.length - f) + event.execute(scene, this), r); r = Math.max((anim.frames.length - f) + event.execute(scene, this), r);
} }
const targets = Utils.getEnumValues(AnimFrameTarget); const targets = Utils.getEnumValues(AnimFrameTarget);
for (let i of targets) { for (const i of targets) {
const count = i === AnimFrameTarget.GRAPHIC ? g : i === AnimFrameTarget.USER ? u : t; const count = i === AnimFrameTarget.GRAPHIC ? g : i === AnimFrameTarget.USER ? u : t;
if (count < spriteCache[i].length) { if (count < spriteCache[i].length) {
const spritesToRemove = spriteCache[i].slice(count, spriteCache[i].length); const spritesToRemove = spriteCache[i].slice(count, spriteCache[i].length);
for (let rs of spritesToRemove) { for (const rs of spritesToRemove) {
if (!rs.getData('locked') as boolean) { if (!rs.getData('locked') as boolean) {
const spriteCacheIndex = spriteCache[i].indexOf(rs); const spriteCacheIndex = spriteCache[i].indexOf(rs);
spriteCache[i].splice(spriteCacheIndex, 1); spriteCache[i].splice(spriteCacheIndex, 1);
@ -914,7 +914,7 @@ export abstract class BattleAnim {
r--; r--;
}, },
onComplete: () => { onComplete: () => {
for (let ms of Object.values(spriteCache).flat()) { for (const ms of Object.values(spriteCache).flat()) {
if (ms && !ms.getData('locked')) if (ms && !ms.getData('locked'))
ms.destroy(); ms.destroy();
} }
@ -1005,7 +1005,7 @@ export async function populateAnims() {
const chargeAnimIds = Utils.getEnumValues(ChargeAnim) as ChargeAnim[]; const chargeAnimIds = Utils.getEnumValues(ChargeAnim) as ChargeAnim[];
const commonNamePattern = /name: (?:Common:)?(Opp )?(.*)/; const commonNamePattern = /name: (?:Common:)?(Opp )?(.*)/;
const moveNameToId = {}; const moveNameToId = {};
for (let move of Utils.getEnumValues(Moves).slice(1)) { for (const move of Utils.getEnumValues(Moves).slice(1)) {
const moveName = Moves[move].toUpperCase().replace(/\_/g, ''); const moveName = Moves[move].toUpperCase().replace(/\_/g, '');
moveNameToId[moveName] = move; moveNameToId[moveName] = move;
} }
@ -1035,7 +1035,7 @@ export async function populateAnims() {
const animName = nameField.slice(nameIndex, nameField.indexOf('\n', nameIndex)); const animName = nameField.slice(nameIndex, nameField.indexOf('\n', nameIndex));
if (!moveNameToId.hasOwnProperty(animName) && !commonAnimId && !chargeAnimId) if (!moveNameToId.hasOwnProperty(animName) && !commonAnimId && !chargeAnimId)
continue; continue;
let anim = commonAnimId || chargeAnimId ? new AnimConfig() : new AnimConfig(); const anim = commonAnimId || chargeAnimId ? new AnimConfig() : new AnimConfig();
if (anim instanceof AnimConfig) if (anim instanceof AnimConfig)
(anim as AnimConfig).id = moveNameToId[animName]; (anim as AnimConfig).id = moveNameToId[animName];
if (commonAnimId) if (commonAnimId)
@ -1066,7 +1066,7 @@ export async function populateAnims() {
} }
break; break;
case 'graphic': case 'graphic':
const graphic = fieldData !== "''" ? fieldData : ''; const graphic = fieldData !== '\'\'' ? fieldData : '';
anim.graphic = graphic.indexOf('.') > -1 anim.graphic = graphic.indexOf('.') > -1
? graphic.slice(0, fieldData.indexOf('.')) ? graphic.slice(0, fieldData.indexOf('.'))
: graphic; : graphic;
@ -1077,7 +1077,7 @@ export async function populateAnims() {
const timingData = timingEntries[t].replace(/\n/g, ' ').replace(/[ ]{2,}/g, ' ').replace(/[a-z]+: ! '', /ig, '').replace(/name: (.*?),/, 'name: "$1",') const timingData = timingEntries[t].replace(/\n/g, ' ').replace(/[ ]{2,}/g, ' ').replace(/[a-z]+: ! '', /ig, '').replace(/name: (.*?),/, 'name: "$1",')
.replace(/flashColor: !ruby\/object:Color { alpha: ([\d\.]+), blue: ([\d\.]+), green: ([\d\.]+), red: ([\d\.]+)}/, 'flashRed: $4, flashGreen: $3, flashBlue: $2, flashAlpha: $1'); .replace(/flashColor: !ruby\/object:Color { alpha: ([\d\.]+), blue: ([\d\.]+), green: ([\d\.]+), red: ([\d\.]+)}/, 'flashRed: $4, flashGreen: $3, flashBlue: $2, flashAlpha: $1');
const frameIndex = parseInt(/frame: (\d+)/.exec(timingData)[1]); const frameIndex = parseInt(/frame: (\d+)/.exec(timingData)[1]);
let resourceName = /name: "(.*?)"/.exec(timingData)[1].replace("''", ''); let resourceName = /name: "(.*?)"/.exec(timingData)[1].replace('\'\'', '');
const timingType = parseInt(/timingType: (\d)/.exec(timingData)[1]); const timingType = parseInt(/timingType: (\d)/.exec(timingData)[1]);
let timedEvent: AnimTimedEvent; let timedEvent: AnimTimedEvent;
switch (timingType) { switch (timingType) {
@ -1167,13 +1167,13 @@ export async function populateAnims() {
const animComparator = (a: Element, b: Element) => { const animComparator = (a: Element, b: Element) => {
let props: string[]; let props: string[];
let p = 0; const p = 0;
for (let p = 0; p < propSets.length; p++) { for (let p = 0; p < propSets.length; p++) {
props = propSets[p]; props = propSets[p];
let ai = props.indexOf(a.key); const ai = props.indexOf(a.key);
if (ai === -1) if (ai === -1)
continue; continue;
let bi = props.indexOf(b.key); const bi = props.indexOf(b.key);
return ai < bi ? -1 : ai > bi ? 1 : 0; return ai < bi ? -1 : ai > bi ? 1 : 0;
} }

View File

@ -1,20 +1,20 @@
import { CommonAnim, CommonBattleAnim } from "./battle-anims"; import { CommonAnim, CommonBattleAnim } from './battle-anims';
import { CommonAnimPhase, MoveEffectPhase, MovePhase, PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../phases"; import { CommonAnimPhase, MoveEffectPhase, MovePhase, PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from '../phases';
import { getPokemonMessage, getPokemonPrefix } from "../messages"; import { getPokemonMessage, getPokemonPrefix } from '../messages';
import Pokemon, { MoveResult, HitResult } from "../field/pokemon"; import Pokemon, { MoveResult, HitResult } from '../field/pokemon';
import { Stat, getStatName } from "./pokemon-stat"; import { Stat, getStatName } from './pokemon-stat';
import { StatusEffect } from "./status-effect"; import { StatusEffect } from './status-effect';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { Moves } from "./enums/moves"; import { Moves } from './enums/moves';
import { ChargeAttr, MoveFlags, allMoves } from "./move"; import { ChargeAttr, MoveFlags, allMoves } from './move';
import { Type } from "./type"; import { Type } from './type';
import { BlockNonDirectDamageAbAttr, FlinchEffectAbAttr, ReverseDrainAbAttr, applyAbAttrs } from "./ability"; import { BlockNonDirectDamageAbAttr, FlinchEffectAbAttr, ReverseDrainAbAttr, applyAbAttrs } from './ability';
import { Abilities } from "./enums/abilities"; import { Abilities } from './enums/abilities';
import { BattlerTagType } from "./enums/battler-tag-type"; import { BattlerTagType } from './enums/battler-tag-type';
import { TerrainType } from "./terrain"; import { TerrainType } from './terrain';
import { WeatherType } from "./weather"; import { WeatherType } from './weather';
import { BattleStat } from "./battle-stat"; import { BattleStat } from './battle-stat';
import { allAbilities } from "./ability"; import { allAbilities } from './ability';
export enum BattlerTagLapseType { export enum BattlerTagLapseType {
FAINT, FAINT,
@ -97,7 +97,7 @@ export class RechargingTag extends BattlerTag {
onAdd(pokemon: Pokemon): void { onAdd(pokemon: Pokemon): void {
super.onAdd(pokemon); super.onAdd(pokemon);
pokemon.getMoveQueue().push({ move: Moves.NONE, targets: [] }) pokemon.getMoveQueue().push({ move: Moves.NONE, targets: [] });
} }
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
@ -179,24 +179,24 @@ export class FlinchedTag extends BattlerTag {
export class InterruptedTag extends BattlerTag { export class InterruptedTag extends BattlerTag {
constructor(sourceMove: Moves){ constructor(sourceMove: Moves){
super(BattlerTagType.INTERRUPTED, BattlerTagLapseType.PRE_MOVE, 0, sourceMove) super(BattlerTagType.INTERRUPTED, BattlerTagLapseType.PRE_MOVE, 0, sourceMove);
} }
canAdd(pokemon: Pokemon): boolean { canAdd(pokemon: Pokemon): boolean {
return !!pokemon.getTag(BattlerTagType.FLYING) return !!pokemon.getTag(BattlerTagType.FLYING);
} }
onAdd(pokemon: Pokemon): void { onAdd(pokemon: Pokemon): void {
super.onAdd(pokemon); super.onAdd(pokemon);
pokemon.getMoveQueue().shift() pokemon.getMoveQueue().shift();
pokemon.pushMoveHistory({move: Moves.NONE, result: MoveResult.OTHER}) pokemon.pushMoveHistory({move: Moves.NONE, result: MoveResult.OTHER});
} }
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
super.lapse(pokemon, lapseType); super.lapse(pokemon, lapseType);
(pokemon.scene.getCurrentPhase() as MovePhase).cancel(); (pokemon.scene.getCurrentPhase() as MovePhase).cancel();
return true return true;
} }
} }
@ -526,7 +526,7 @@ export class IngrainTag extends TrappedTag {
if (ret) if (ret)
pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), Math.floor(pokemon.getMaxHp() / 16), pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), Math.floor(pokemon.getMaxHp() / 16),
getPokemonMessage(pokemon, ` absorbed\nnutrients with its roots!`), true)); getPokemonMessage(pokemon, ' absorbed\nnutrients with its roots!'), true));
return ret; return ret;
} }
@ -579,7 +579,7 @@ export class MinimizeTag extends BattlerTag {
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
//If a pokemon dynamaxes they lose minimized status //If a pokemon dynamaxes they lose minimized status
if(pokemon.isMax()){ if(pokemon.isMax()){
return false return false;
} }
return lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); return lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType);
} }
@ -651,7 +651,7 @@ export abstract class DamagingTrapTag extends TrappedTag {
applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled);
if (!cancelled.value) if (!cancelled.value)
pokemon.damageAndUpdate(Math.ceil(pokemon.getMaxHp() / 8)) pokemon.damageAndUpdate(Math.ceil(pokemon.getMaxHp() / 8));
} }
return ret; return ret;
@ -726,7 +726,7 @@ export class MagmaStormTag extends DamagingTrapTag {
} }
getTrapMessage(pokemon: Pokemon): string { getTrapMessage(pokemon: Pokemon): string {
return getPokemonMessage(pokemon, ` became trapped\nby swirling magma!`); return getPokemonMessage(pokemon, ' became trapped\nby swirling magma!');
} }
} }
@ -736,7 +736,7 @@ export class SnapTrapTag extends DamagingTrapTag {
} }
getTrapMessage(pokemon: Pokemon): string { getTrapMessage(pokemon: Pokemon): string {
return getPokemonMessage(pokemon, ` got trapped\nby a snap trap!`); return getPokemonMessage(pokemon, ' got trapped\nby a snap trap!');
} }
} }

View File

@ -1,12 +1,12 @@
import { PokemonHealPhase, StatChangePhase } from "../phases"; import { PokemonHealPhase, StatChangePhase } from '../phases';
import { getPokemonMessage } from "../messages"; import { getPokemonMessage } from '../messages';
import Pokemon, { HitResult } from "../field/pokemon"; import Pokemon, { HitResult } from '../field/pokemon';
import { getBattleStatName } from "./battle-stat"; import { getBattleStatName } from './battle-stat';
import { BattleStat } from "./battle-stat"; import { BattleStat } from './battle-stat';
import { BattlerTagType } from "./enums/battler-tag-type"; import { BattlerTagType } from './enums/battler-tag-type';
import { getStatusEffectHealText } from "./status-effect"; import { getStatusEffectHealText } from './status-effect';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { DoubleBerryEffectAbAttr, ReduceBerryUseThresholdAbAttr, applyAbAttrs } from "./ability"; import { DoubleBerryEffectAbAttr, ReduceBerryUseThresholdAbAttr, applyAbAttrs } from './ability';
import i18next from '../plugins/i18n'; import i18next from '../plugins/i18n';
export enum BerryType { export enum BerryType {

View File

@ -1,11 +1,11 @@
import { Species } from "./enums/species"; import { Species } from './enums/species';
import { Type } from './type'; import { Type } from './type';
import * as Utils from '../utils'; import * as Utils from '../utils';
import beautify from 'json-beautify'; import beautify from 'json-beautify';
import { TrainerType } from "./enums/trainer-type"; import { TrainerType } from './enums/trainer-type';
import { TimeOfDay } from "./enums/time-of-day"; import { TimeOfDay } from './enums/time-of-day';
import { Biome } from "./enums/biome"; import { Biome } from './enums/biome';
import { SpeciesFormEvolution } from "./pokemon-evolutions"; import { SpeciesFormEvolution } from './pokemon-evolutions';
export function getBiomeName(biome: Biome | -1) { export function getBiomeName(biome: Biome | -1) {
if (biome === -1) if (biome === -1)
@ -83,7 +83,7 @@ export enum BiomePoolTier {
BOSS_RARE, BOSS_RARE,
BOSS_SUPER_RARE, BOSS_SUPER_RARE,
BOSS_ULTRA_RARE BOSS_ULTRA_RARE
}; }
export const uncatchableSpecies: Species[] = []; export const uncatchableSpecies: Species[] = [];
@ -7659,7 +7659,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
const linkedBiomes: (Biome | [ Biome, integer ])[] = Array.isArray(biomeLinks[biome]) const linkedBiomes: (Biome | [ Biome, integer ])[] = Array.isArray(biomeLinks[biome])
? biomeLinks[biome] as (Biome | [ Biome, integer ])[] ? biomeLinks[biome] as (Biome | [ Biome, integer ])[]
: [ biomeLinks[biome] as Biome ]; : [ biomeLinks[biome] as Biome ];
for (let linkedBiomeEntry of linkedBiomes) { for (const linkedBiomeEntry of linkedBiomes) {
const linkedBiome = !Array.isArray(linkedBiomeEntry) const linkedBiome = !Array.isArray(linkedBiomeEntry)
? linkedBiomeEntry as Biome ? linkedBiomeEntry as Biome
: linkedBiomeEntry[0]; : linkedBiomeEntry[0];
@ -7678,20 +7678,20 @@ export const biomeTrainerPools: BiomeTrainerPools = {
import('./pokemon-evolutions').then(pe => { import('./pokemon-evolutions').then(pe => {
const pokemonEvolutions = pe.pokemonEvolutions; const pokemonEvolutions = pe.pokemonEvolutions;
for (let biome of Utils.getEnumValues(Biome)) { for (const biome of Utils.getEnumValues(Biome)) {
biomePokemonPools[biome] = {}; biomePokemonPools[biome] = {};
biomeTrainerPools[biome] = {}; biomeTrainerPools[biome] = {};
for (let tier of Utils.getEnumValues(BiomePoolTier)) { for (const tier of Utils.getEnumValues(BiomePoolTier)) {
biomePokemonPools[biome][tier] = {}; biomePokemonPools[biome][tier] = {};
biomeTrainerPools[biome][tier] = []; biomeTrainerPools[biome][tier] = [];
for (let tod of Utils.getEnumValues(TimeOfDay)) for (const tod of Utils.getEnumValues(TimeOfDay))
biomePokemonPools[biome][tier][tod] = []; biomePokemonPools[biome][tier][tod] = [];
} }
} }
for (let pb of pokemonBiomes) { for (const pb of pokemonBiomes) {
const speciesId = pb[0] as Species; const speciesId = pb[0] as Species;
const biomeEntries = pb[3] as (Biome | BiomePoolTier)[][]; const biomeEntries = pb[3] as (Biome | BiomePoolTier)[][];
@ -7702,7 +7702,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
if (!biomeEntries.filter(b => b[0] !== Biome.END).length && !speciesEvolutions.filter(es => !!((pokemonBiomes.find(p => p[0] === es.speciesId))[3] as any[]).filter(b => b[0] !== Biome.END).length).length) if (!biomeEntries.filter(b => b[0] !== Biome.END).length && !speciesEvolutions.filter(es => !!((pokemonBiomes.find(p => p[0] === es.speciesId))[3] as any[]).filter(b => b[0] !== Biome.END).length).length)
uncatchableSpecies.push(speciesId); uncatchableSpecies.push(speciesId);
for (let b of biomeEntries) { for (const b of biomeEntries) {
const biome = b[0]; const biome = b[0];
const tier = b[1]; const tier = b[1];
const timesOfDay = b.length > 2 const timesOfDay = b.length > 2
@ -7711,7 +7711,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
: [ b[2] ] : [ b[2] ]
: [ TimeOfDay.ALL ]; : [ TimeOfDay.ALL ];
for (let tod of timesOfDay) { for (const tod of timesOfDay) {
if (!biomePokemonPools.hasOwnProperty(biome) || !biomePokemonPools[biome].hasOwnProperty(tier) || !biomePokemonPools[biome][tier].hasOwnProperty(tod)) if (!biomePokemonPools.hasOwnProperty(biome) || !biomePokemonPools[biome].hasOwnProperty(tier) || !biomePokemonPools[biome][tier].hasOwnProperty(tod))
continue; continue;
@ -7746,10 +7746,10 @@ export const biomeTrainerPools: BiomeTrainerPools = {
} }
} }
for (let b of Object.keys(biomePokemonPools)) { for (const b of Object.keys(biomePokemonPools)) {
for (let t of Object.keys(biomePokemonPools[b])) { for (const t of Object.keys(biomePokemonPools[b])) {
const tier = parseInt(t) as BiomePoolTier; const tier = parseInt(t) as BiomePoolTier;
for (let tod of Object.keys(biomePokemonPools[b][t])) { for (const tod of Object.keys(biomePokemonPools[b][t])) {
const biomeTierTimePool = biomePokemonPools[b][t][tod]; const biomeTierTimePool = biomePokemonPools[b][t][tod];
for (let e = 0; e < biomeTierTimePool.length; e++) { for (let e = 0; e < biomeTierTimePool.length; e++) {
const entry = biomeTierTimePool[e]; const entry = biomeTierTimePool[e];
@ -7775,11 +7775,11 @@ export const biomeTrainerPools: BiomeTrainerPools = {
} }
} }
for (let tb of trainerBiomes) { for (const tb of trainerBiomes) {
const trainerType = tb[0] as TrainerType; const trainerType = tb[0] as TrainerType;
const biomeEntries = tb[1] as BiomePoolTier[][]; const biomeEntries = tb[1] as BiomePoolTier[][];
for (let b of biomeEntries) { for (const b of biomeEntries) {
const biome = b[0]; const biome = b[0];
const tier = b[1]; const tier = b[1];
@ -7798,28 +7798,28 @@ export const biomeTrainerPools: BiomeTrainerPools = {
const pokemonOutput = {}; const pokemonOutput = {};
const trainerOutput = {}; const trainerOutput = {};
for (let b of Object.keys(biomePokemonPools)) { for (const b of Object.keys(biomePokemonPools)) {
const biome = Biome[b]; const biome = Biome[b];
pokemonOutput[biome] = {}; pokemonOutput[biome] = {};
trainerOutput[biome] = {}; trainerOutput[biome] = {};
for (let t of Object.keys(biomePokemonPools[b])) { for (const t of Object.keys(biomePokemonPools[b])) {
const tier = BiomePoolTier[t]; const tier = BiomePoolTier[t];
pokemonOutput[biome][tier] = {}; pokemonOutput[biome][tier] = {};
for (let tod of Object.keys(biomePokemonPools[b][t])) { for (const tod of Object.keys(biomePokemonPools[b][t])) {
const timeOfDay = TimeOfDay[tod]; const timeOfDay = TimeOfDay[tod];
pokemonOutput[biome][tier][timeOfDay] = []; pokemonOutput[biome][tier][timeOfDay] = [];
for (let f of biomePokemonPools[b][t][tod]) { for (const f of biomePokemonPools[b][t][tod]) {
if (typeof f === 'number') if (typeof f === 'number')
pokemonOutput[biome][tier][timeOfDay].push(Species[f]); pokemonOutput[biome][tier][timeOfDay].push(Species[f]);
else { else {
const tree = {}; const tree = {};
for (let l of Object.keys(f)) { for (const l of Object.keys(f)) {
tree[l] = f[l].map(s => Species[s]); tree[l] = f[l].map(s => Species[s]);
} }
@ -7830,12 +7830,12 @@ export const biomeTrainerPools: BiomeTrainerPools = {
} }
} }
for (let t of Object.keys(biomeTrainerPools[b])) { for (const t of Object.keys(biomeTrainerPools[b])) {
const tier = BiomePoolTier[t]; const tier = BiomePoolTier[t];
trainerOutput[biome][tier] = []; trainerOutput[biome][tier] = [];
for (let f of biomeTrainerPools[b][t]) for (const f of biomeTrainerPools[b][t])
trainerOutput[biome][tier].push(TrainerType[f]); trainerOutput[biome][tier].push(TrainerType[f]);
} }
} }

View File

@ -1,11 +1,11 @@
import BattleScene from "../battle-scene"; import BattleScene from '../battle-scene';
import { PlayerPokemon } from "../field/pokemon"; import { PlayerPokemon } from '../field/pokemon';
import { GameModes, gameModes } from "../game-mode"; import { GameModes, gameModes } from '../game-mode';
import { Starter } from "../ui/starter-select-ui-handler"; import { Starter } from '../ui/starter-select-ui-handler';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { Species } from "./enums/species"; import { Species } from './enums/species';
import PokemonSpecies, { PokemonSpeciesForm, getPokemonSpecies, getPokemonSpeciesForm, speciesStarters } from "./pokemon-species"; import PokemonSpecies, { PokemonSpeciesForm, getPokemonSpecies, getPokemonSpeciesForm, speciesStarters } from './pokemon-species';
import { PartyMemberStrength } from "./enums/party-member-strength"; import { PartyMemberStrength } from './enums/party-member-strength';
export interface DailyRunConfig { export interface DailyRunConfig {
seed: integer; seed: integer;

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
import { Moves } from "./enums/moves"; import { Moves } from './enums/moves';
import { Species } from "./enums/species"; import { Species } from './enums/species';
import { allMoves } from "./move"; import { allMoves } from './move';
import * as Utils from "../utils"; import * as Utils from '../utils';
export const speciesEggMoves = { export const speciesEggMoves = {
@ -588,7 +588,7 @@ function parseEggMoves(content: string): void {
const enumSpeciesName = cols[0].toUpperCase().replace(/[ -]/g, '_'); const enumSpeciesName = cols[0].toUpperCase().replace(/[ -]/g, '_');
const species = speciesValues[speciesNames.findIndex(s => s === enumSpeciesName)]; const species = speciesValues[speciesNames.findIndex(s => s === enumSpeciesName)];
let eggMoves: Moves[] = []; const eggMoves: Moves[] = [];
for (let m = 0; m < 4; m++) { for (let m = 0; m < 4; m++) {
const moveName = cols[m + 1].trim(); const moveName = cols[m + 1].trim();
@ -606,7 +606,7 @@ function parseEggMoves(content: string): void {
console.log(output); console.log(output);
} }
const eggMovesStr = ``; const eggMovesStr = '';
if (eggMovesStr) { if (eggMovesStr) {
setTimeout(() => { setTimeout(() => {
parseEggMoves(eggMovesStr); parseEggMoves(eggMovesStr);

View File

@ -1,9 +1,9 @@
import { Type } from "./type"; import { Type } from './type';
import * as Utils from "../utils"; import * as Utils from '../utils';
import BattleScene from "../battle-scene"; import BattleScene from '../battle-scene';
import { Species } from "./enums/species"; import { Species } from './enums/species';
import { getPokemonSpecies, speciesStarters } from "./pokemon-species"; import { getPokemonSpecies, speciesStarters } from './pokemon-species';
import { EggTier } from "./enums/egg-type"; import { EggTier } from './enums/egg-type';
import i18next from '../plugins/i18n'; import i18next from '../plugins/i18n';
export const EGG_SEED = 1073741824; export const EGG_SEED = 1073741824;
@ -101,7 +101,7 @@ export function getLegendaryGachaSpeciesForTimestamp(scene: BattleScene, timesta
const dayDate = new Date(Date.UTC(timeDate.getUTCFullYear(), timeDate.getUTCMonth(), timeDate.getUTCDate())); const dayDate = new Date(Date.UTC(timeDate.getUTCFullYear(), timeDate.getUTCMonth(), timeDate.getUTCDate()));
const dayTimestamp = timeDate.getTime(); // Timestamp of current week const dayTimestamp = timeDate.getTime(); // Timestamp of current week
const offset = Math.floor(Math.floor(dayTimestamp / 86400000) / legendarySpecies.length); // Cycle number const offset = Math.floor(Math.floor(dayTimestamp / 86400000) / legendarySpecies.length); // Cycle number
const index = Math.floor(dayTimestamp / 86400000) % legendarySpecies.length // Index within cycle const index = Math.floor(dayTimestamp / 86400000) % legendarySpecies.length; // Index within cycle
scene.executeWithSeedOffset(() => { scene.executeWithSeedOffset(() => {
ret = Phaser.Math.RND.shuffle(legendarySpecies)[index]; ret = Phaser.Math.RND.shuffle(legendarySpecies)[index];

View File

@ -1,20 +1,20 @@
export enum ArenaTagType { export enum ArenaTagType {
NONE = "NONE", NONE = 'NONE',
MUD_SPORT = "MUD_SPORT", MUD_SPORT = 'MUD_SPORT',
WATER_SPORT = "WATER_SPORT", WATER_SPORT = 'WATER_SPORT',
SPIKES = "SPIKES", SPIKES = 'SPIKES',
TOXIC_SPIKES = "TOXIC_SPIKES", TOXIC_SPIKES = 'TOXIC_SPIKES',
MIST = "MIST", MIST = 'MIST',
FUTURE_SIGHT = "FUTURE_SIGHT", FUTURE_SIGHT = 'FUTURE_SIGHT',
DOOM_DESIRE = "DOOM_DESIRE", DOOM_DESIRE = 'DOOM_DESIRE',
WISH = "WISH", WISH = 'WISH',
STEALTH_ROCK = "STEALTH_ROCK", STEALTH_ROCK = 'STEALTH_ROCK',
STICKY_WEB = "STICKY_WEB", STICKY_WEB = 'STICKY_WEB',
TRICK_ROOM = "TRICK_ROOM", TRICK_ROOM = 'TRICK_ROOM',
GRAVITY = "GRAVITY", GRAVITY = 'GRAVITY',
REFLECT = "REFLECT", REFLECT = 'REFLECT',
LIGHT_SCREEN = "LIGHT_SCREEN", LIGHT_SCREEN = 'LIGHT_SCREEN',
AURORA_VEIL = "AURORA_VEIL", AURORA_VEIL = 'AURORA_VEIL',
TAILWIND = "TAILWIND" TAILWIND = 'TAILWIND'
} }

View File

@ -1,60 +1,60 @@
export enum BattlerTagType { export enum BattlerTagType {
NONE = "NONE", NONE = 'NONE',
RECHARGING = "RECHARGING", RECHARGING = 'RECHARGING',
FLINCHED = "FLINCHED", FLINCHED = 'FLINCHED',
INTERRUPTED = "INTERRUPTED", INTERRUPTED = 'INTERRUPTED',
CONFUSED = "CONFUSED", CONFUSED = 'CONFUSED',
INFATUATED = "INFATUATED", INFATUATED = 'INFATUATED',
SEEDED = "SEEDED", SEEDED = 'SEEDED',
NIGHTMARE = "NIGHTMARE", NIGHTMARE = 'NIGHTMARE',
FRENZY = "FRENZY", FRENZY = 'FRENZY',
CHARGING = "CHARGING", CHARGING = 'CHARGING',
ENCORE = "ENCORE", ENCORE = 'ENCORE',
HELPING_HAND = "HELPING_HAND", HELPING_HAND = 'HELPING_HAND',
INGRAIN = "INGRAIN", INGRAIN = 'INGRAIN',
AQUA_RING = "AQUA_RING", AQUA_RING = 'AQUA_RING',
DROWSY = "DROWSY", DROWSY = 'DROWSY',
TRAPPED = "TRAPPED", TRAPPED = 'TRAPPED',
BIND = "BIND", BIND = 'BIND',
WRAP = "WRAP", WRAP = 'WRAP',
FIRE_SPIN = "FIRE_SPIN", FIRE_SPIN = 'FIRE_SPIN',
WHIRLPOOL = "WHIRLPOOL", WHIRLPOOL = 'WHIRLPOOL',
CLAMP = "CLAMP", CLAMP = 'CLAMP',
SAND_TOMB = "SAND_TOMB", SAND_TOMB = 'SAND_TOMB',
MAGMA_STORM = "MAGMA_STORM", MAGMA_STORM = 'MAGMA_STORM',
SNAP_TRAP = "SNAP_TRAP", SNAP_TRAP = 'SNAP_TRAP',
THUNDER_CAGE = "THUNDER_CAGE", THUNDER_CAGE = 'THUNDER_CAGE',
INFESTATION = "INFESTATION", INFESTATION = 'INFESTATION',
PROTECTED = "PROTECTED", PROTECTED = 'PROTECTED',
SPIKY_SHIELD = "SPIKY_SHIELD", SPIKY_SHIELD = 'SPIKY_SHIELD',
KINGS_SHIELD = "KINGS_SHIELD", KINGS_SHIELD = 'KINGS_SHIELD',
OBSTRUCT = "OBSTRUCT", OBSTRUCT = 'OBSTRUCT',
SILK_TRAP = "SILK_TRAP", SILK_TRAP = 'SILK_TRAP',
BANEFUL_BUNKER = "BANEFUL_BUNKER", BANEFUL_BUNKER = 'BANEFUL_BUNKER',
BURNING_BULWARK = "BURNING_BULWARK", BURNING_BULWARK = 'BURNING_BULWARK',
ENDURING = "ENDURING", ENDURING = 'ENDURING',
STURDY = "STURDY", STURDY = 'STURDY',
PERISH_SONG = "PERISH_SONG", PERISH_SONG = 'PERISH_SONG',
TRUANT = "TRUANT", TRUANT = 'TRUANT',
SLOW_START = "SLOW_START", SLOW_START = 'SLOW_START',
PROTOSYNTHESIS = "PROTOSYNTHESIS", PROTOSYNTHESIS = 'PROTOSYNTHESIS',
QUARK_DRIVE = "QUARK_DRIVE", QUARK_DRIVE = 'QUARK_DRIVE',
FLYING = "FLYING", FLYING = 'FLYING',
UNDERGROUND = "UNDERGROUND", UNDERGROUND = 'UNDERGROUND',
UNDERWATER = "UNDERWATER", UNDERWATER = 'UNDERWATER',
HIDDEN = "HIDDEN", HIDDEN = 'HIDDEN',
FIRE_BOOST = "FIRE_BOOST", FIRE_BOOST = 'FIRE_BOOST',
CRIT_BOOST = "CRIT_BOOST", CRIT_BOOST = 'CRIT_BOOST',
ALWAYS_CRIT = "ALWAYS_CRIT", ALWAYS_CRIT = 'ALWAYS_CRIT',
NO_CRIT = "NO_CRIT", NO_CRIT = 'NO_CRIT',
IGNORE_ACCURACY = "IGNORE_ACCURACY", IGNORE_ACCURACY = 'IGNORE_ACCURACY',
BYPASS_SLEEP = "BYPASS_SLEEP", BYPASS_SLEEP = 'BYPASS_SLEEP',
IGNORE_FLYING = "IGNORE_FLYING", IGNORE_FLYING = 'IGNORE_FLYING',
SALT_CURED = "SALT_CURED", SALT_CURED = 'SALT_CURED',
CURSED = "CURSED", CURSED = 'CURSED',
CHARGED = "CHARGED", CHARGED = 'CHARGED',
GROUNDED = "GROUNDED", GROUNDED = 'GROUNDED',
MAGNET_RISEN = "MAGNET_RISEN", MAGNET_RISEN = 'MAGNET_RISEN',
MINIMIZED = "MINIMIZED" MINIMIZED = 'MINIMIZED'
} }

View File

@ -1872,4 +1872,4 @@ export enum Moves {
UPPER_HAND, UPPER_HAND,
/**{@link https://bulbapedia.bulbagarden.net/wiki/Malignant_Chain_(move) | Source} */ /**{@link https://bulbapedia.bulbagarden.net/wiki/Malignant_Chain_(move) | Source} */
MALIGNANT_CHAIN, MALIGNANT_CHAIN,
}; }

View File

@ -2163,7 +2163,7 @@ export enum Species {
PALDEA_WOOPER = 8194, PALDEA_WOOPER = 8194,
/**{@link https://bulbapedia.bulbagarden.net/wiki/Ursaluna_(Pokémon) | Source} */ /**{@link https://bulbapedia.bulbagarden.net/wiki/Ursaluna_(Pokémon) | Source} */
BLOODMOON_URSALUNA = 8901, BLOODMOON_URSALUNA = 8901,
}; }
export const defaultStarterSpecies: Species[] = [ export const defaultStarterSpecies: Species[] = [
Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE,

View File

@ -5,7 +5,7 @@ export enum GrowthRate {
MEDIUM_SLOW, MEDIUM_SLOW,
SLOW, SLOW,
FLUCTUATING FLUCTUATING
}; }
const expLevels = [ const expLevels = [
[ 0, 15, 52, 122, 237, 406, 637, 942, 1326, 1800, 2369, 3041, 3822, 4719, 5737, 6881, 8155, 9564, 11111, 12800, 14632, 16610, 18737, 21012, 23437, 26012, 28737, 31610, 34632, 37800, 41111, 44564, 48155, 51881, 55737, 59719, 63822, 68041, 72369, 76800, 81326, 85942, 90637, 95406, 100237, 105122, 110052, 115015, 120001, 125000, 131324, 137795, 144410, 151165, 158056, 165079, 172229, 179503, 186894, 194400, 202013, 209728, 217540, 225443, 233431, 241496, 249633, 257834, 267406, 276458, 286328, 296358, 305767, 316074, 326531, 336255, 346965, 357812, 367807, 378880, 390077, 400293, 411686, 423190, 433572, 445239, 457001, 467489, 479378, 491346, 501878, 513934, 526049, 536557, 548720, 560922, 571333, 583539, 591882, 600000 ], [ 0, 15, 52, 122, 237, 406, 637, 942, 1326, 1800, 2369, 3041, 3822, 4719, 5737, 6881, 8155, 9564, 11111, 12800, 14632, 16610, 18737, 21012, 23437, 26012, 28737, 31610, 34632, 37800, 41111, 44564, 48155, 51881, 55737, 59719, 63822, 68041, 72369, 76800, 81326, 85942, 90637, 95406, 100237, 105122, 110052, 115015, 120001, 125000, 131324, 137795, 144410, 151165, 158056, 165079, 172229, 179503, 186894, 194400, 202013, 209728, 217540, 225443, 233431, 241496, 249633, 257834, 267406, 276458, 286328, 296358, 305767, 316074, 326531, 336255, 346965, 357812, 367807, 378880, 390077, 400293, 411686, 423190, 433572, 445239, 457001, 467489, 479378, 491346, 501878, 513934, 526049, 536557, 548720, 560922, 571333, 583539, 591882, 600000 ],

View File

@ -1,29 +1,29 @@
import { Moves } from "./enums/moves"; import { Moves } from './enums/moves';
import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from "./battle-anims"; import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from './battle-anims';
import { BattleEndPhase, MoveEffectPhase, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase, ToggleDoublePositionPhase } from "../phases"; import { BattleEndPhase, MoveEffectPhase, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase, ToggleDoublePositionPhase } from '../phases';
import { BattleStat, getBattleStatName } from "./battle-stat"; import { BattleStat, getBattleStatName } from './battle-stat';
import { EncoreTag } from "./battler-tags"; import { EncoreTag } from './battler-tags';
import { BattlerTagType } from "./enums/battler-tag-type"; import { BattlerTagType } from './enums/battler-tag-type';
import { getPokemonMessage } from "../messages"; import { getPokemonMessage } from '../messages';
import Pokemon, { AttackMoveResult, EnemyPokemon, HitResult, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "../field/pokemon"; import Pokemon, { AttackMoveResult, EnemyPokemon, HitResult, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from '../field/pokemon';
import { StatusEffect, getStatusEffectHealText } from "./status-effect"; import { StatusEffect, getStatusEffectHealText } from './status-effect';
import { Type } from "./type"; import { Type } from './type';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { WeatherType } from "./weather"; import { WeatherType } from './weather';
import { ArenaTagSide, ArenaTrapTag } from "./arena-tag"; import { ArenaTagSide, ArenaTrapTag } from './arena-tag';
import { ArenaTagType } from "./enums/arena-tag-type"; import { ArenaTagType } from './enums/arena-tag-type';
import { UnswappableAbilityAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, NoTransformAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPreSwitchOutAbAttrs, PreSwitchOutAbAttr, applyPostDefendAbAttrs, PostDefendContactApplyStatusEffectAbAttr, MoveAbilityBypassAbAttr, ReverseDrainAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr, PreventBerryUseAbAttr, BlockItemTheftAbAttr } from "./ability"; import { UnswappableAbilityAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, NoTransformAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPreSwitchOutAbAttrs, PreSwitchOutAbAttr, applyPostDefendAbAttrs, PostDefendContactApplyStatusEffectAbAttr, MoveAbilityBypassAbAttr, ReverseDrainAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr, PreventBerryUseAbAttr, BlockItemTheftAbAttr } from './ability';
import { Abilities } from "./enums/abilities"; import { Abilities } from './enums/abilities';
import { allAbilities } from './ability'; import { allAbilities } from './ability';
import { PokemonHeldItemModifier, BerryModifier, PreserveBerryModifier } from "../modifier/modifier"; import { PokemonHeldItemModifier, BerryModifier, PreserveBerryModifier } from '../modifier/modifier';
import { BattlerIndex } from "../battle"; import { BattlerIndex } from '../battle';
import { Stat } from "./pokemon-stat"; import { Stat } from './pokemon-stat';
import { TerrainType } from "./terrain"; import { TerrainType } from './terrain';
import { SpeciesFormChangeActiveTrigger } from "./pokemon-forms"; import { SpeciesFormChangeActiveTrigger } from './pokemon-forms';
import { Species } from "./enums/species"; import { Species } from './enums/species';
import { ModifierPoolType } from "#app/modifier/modifier-type"; import { ModifierPoolType } from '#app/modifier/modifier-type';
import { Command } from "../ui/command-ui-handler"; import { Command } from '../ui/command-ui-handler';
import { Biome } from "./enums/biome"; import { Biome } from './enums/biome';
import i18next, { Localizable } from '../plugins/i18n'; import i18next, { Localizable } from '../plugins/i18n';
import { BerryType, BerryEffectFunc, getBerryEffectFunc } from './berry'; import { BerryType, BerryEffectFunc, getBerryEffectFunc } from './berry';
@ -345,7 +345,7 @@ export default class Move implements Localizable {
} }
applyConditions(user: Pokemon, target: Pokemon, move: Move): boolean { applyConditions(user: Pokemon, target: Pokemon, move: Move): boolean {
for (let condition of this.conditions) { for (const condition of this.conditions) {
if (!condition.apply(user, target, move)) if (!condition.apply(user, target, move))
return false; return false;
} }
@ -354,8 +354,8 @@ export default class Move implements Localizable {
} }
getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null { getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null {
for (let attr of this.attrs) { for (const attr of this.attrs) {
let failedText = attr.getFailedText(user, target, move, cancelled); const failedText = attr.getFailedText(user, target, move, cancelled);
if (failedText !== null) if (failedText !== null)
return failedText; return failedText;
} }
@ -365,10 +365,10 @@ export default class Move implements Localizable {
getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer {
let score = 0; let score = 0;
for (let attr of this.attrs) for (const attr of this.attrs)
score += attr.getUserBenefitScore(user, target, move); score += attr.getUserBenefitScore(user, target, move);
for (let condition of this.conditions) for (const condition of this.conditions)
score += condition.getUserBenefitScore(user, target, move); score += condition.getUserBenefitScore(user, target, move);
return score; return score;
@ -377,7 +377,7 @@ export default class Move implements Localizable {
getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer {
let score = 0; let score = 0;
for (let attr of this.attrs) for (const attr of this.attrs)
score += attr.getTargetBenefitScore(user, !attr.selfTarget ? target : user, move) * (target !== user && attr.selfTarget ? -1 : 1); score += attr.getTargetBenefitScore(user, !attr.selfTarget ? target : user, move) * (target !== user && attr.selfTarget ? -1 : 1);
return score; return score;
@ -954,7 +954,7 @@ export class HealAttr extends MoveEffectAttr {
} }
getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer {
let score = ((1 - (this.selfTarget ? user : target).getHpRatio()) * 20) - this.healRatio * 10; const score = ((1 - (this.selfTarget ? user : target).getHpRatio()) * 20) - this.healRatio * 10;
return Math.round(score / (1 - this.healRatio / 2)); return Math.round(score / (1 - this.healRatio / 2));
} }
} }
@ -1143,7 +1143,7 @@ export class HitHealAttr extends MoveEffectAttr {
const reverseDrain = user.hasAbilityWithAttr(ReverseDrainAbAttr); const reverseDrain = user.hasAbilityWithAttr(ReverseDrainAbAttr);
user.scene.unshiftPhase(new PokemonHealPhase(user.scene, user.getBattlerIndex(), user.scene.unshiftPhase(new PokemonHealPhase(user.scene, user.getBattlerIndex(),
!reverseDrain ? healAmount : healAmount * -1, !reverseDrain ? healAmount : healAmount * -1,
!reverseDrain ? getPokemonMessage(target, ` had its\nenergy drained!`) : undefined, !reverseDrain ? getPokemonMessage(target, ' had its\nenergy drained!') : undefined,
false, true)); false, true));
if (reverseDrain) user.turnData.damageTaken += healAmount; if (reverseDrain) user.turnData.damageTaken += healAmount;
return true; return true;
@ -1164,7 +1164,7 @@ export class StrengthSapHealAttr extends MoveEffectAttr {
const reverseDrain = user.hasAbilityWithAttr(ReverseDrainAbAttr); const reverseDrain = user.hasAbilityWithAttr(ReverseDrainAbAttr);
user.scene.unshiftPhase(new PokemonHealPhase(user.scene, user.getBattlerIndex(), user.scene.unshiftPhase(new PokemonHealPhase(user.scene, user.getBattlerIndex(),
!reverseDrain ? healAmount : healAmount * -1, !reverseDrain ? healAmount : healAmount * -1,
!reverseDrain ? getPokemonMessage(user, ` regained\nhealth!`) : undefined, !reverseDrain ? getPokemonMessage(user, ' regained\nhealth!') : undefined,
false, true)); false, true));
return true; return true;
} }
@ -1217,8 +1217,8 @@ export class MultiHitAttr extends MoveAttr {
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
let hitTimes: integer; let hitTimes: integer;
const hitType = new Utils.IntegerHolder(this.multiHitType) const hitType = new Utils.IntegerHolder(this.multiHitType);
applyMoveAttrs(ChangeMultiHitTypeAttr, user, target, move, hitType) applyMoveAttrs(ChangeMultiHitTypeAttr, user, target, move, hitType);
switch (hitType.value) { switch (hitType.value) {
case MultiHitType._2_TO_5: case MultiHitType._2_TO_5:
{ {
@ -1275,7 +1275,7 @@ export class MultiHitAttr extends MoveAttr {
case MultiHitType.BEAT_UP: case MultiHitType.BEAT_UP:
// No status means the ally pokemon can contribute to Beat Up // No status means the ally pokemon can contribute to Beat Up
hitTimes = user.scene.getParty().reduce((total, pokemon) => { hitTimes = user.scene.getParty().reduce((total, pokemon) => {
return total + (pokemon.id === user.id ? 1 : pokemon?.status && pokemon.status.effect !== StatusEffect.NONE ? 0 : 1) return total + (pokemon.id === user.id ? 1 : pokemon?.status && pokemon.status.effect !== StatusEffect.NONE ? 0 : 1);
}, 0); }, 0);
} }
(args[0] as Utils.IntegerHolder).value = hitTimes; (args[0] as Utils.IntegerHolder).value = hitTimes;
@ -1297,7 +1297,7 @@ export class ChangeMultiHitTypeAttr extends MoveAttr {
export class WaterShurikenMultiHitTypeAttr extends ChangeMultiHitTypeAttr { export class WaterShurikenMultiHitTypeAttr extends ChangeMultiHitTypeAttr {
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
if (user.species.speciesId == Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex == 2) { if (user.species.speciesId == Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex == 2) {
(args[0] as Utils.IntegerHolder).value = MultiHitType._3 (args[0] as Utils.IntegerHolder).value = MultiHitType._3;
return true; return true;
} }
return false; return false;
@ -1369,7 +1369,7 @@ export class PsychoShiftEffectAttr extends MoveEffectAttr {
return false; return false;
} }
if (!target.status || (target.status.effect === statusToApply && move.chance < 0)) { if (!target.status || (target.status.effect === statusToApply && move.chance < 0)) {
var statusAfflictResult = target.trySetStatus(statusToApply, true, user); const statusAfflictResult = target.trySetStatus(statusToApply, true, user);
if (statusAfflictResult) { if (statusAfflictResult) {
user.scene.queueMessage(getPokemonMessage(user, getStatusEffectHealText(user.status.effect))); user.scene.queueMessage(getPokemonMessage(user, getStatusEffectHealText(user.status.effect)));
user.resetStatus(); user.resetStatus();
@ -1718,7 +1718,7 @@ export class OneHitKOAttr extends MoveAttr {
const cancelled = new Utils.BooleanHolder(false); const cancelled = new Utils.BooleanHolder(false);
applyAbAttrs(BlockOneHitKOAbAttr, target, cancelled); applyAbAttrs(BlockOneHitKOAbAttr, target, cancelled);
return !cancelled.value && user.level >= target.level; return !cancelled.value && user.level >= target.level;
} };
} }
} }
@ -1901,8 +1901,8 @@ export class StatChangeAttr extends MoveEffectAttr {
getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer {
let ret = 0; let ret = 0;
let moveLevels = this.getLevels(user); const moveLevels = this.getLevels(user);
for (let stat of this.stats) { for (const stat of this.stats) {
let levels = moveLevels; let levels = moveLevels;
if (levels > 0) if (levels > 0)
levels = Math.min(target.summonData.battleStats[stat] + levels, 6) - target.summonData.battleStats[stat]; levels = Math.min(target.summonData.battleStats[stat] + levels, 6) - target.summonData.battleStats[stat];
@ -1967,7 +1967,7 @@ export class AcupressureStatChangeAttr extends MoveEffectAttr {
let randStats = [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD, BattleStat.ACC, BattleStat.EVA ]; let randStats = [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD, BattleStat.ACC, BattleStat.EVA ];
randStats = randStats.filter(s => target.summonData.battleStats[s] < 6); randStats = randStats.filter(s => target.summonData.battleStats[s] < 6);
if (randStats.length > 0) { if (randStats.length > 0) {
let boostStat = [randStats[Utils.randInt(randStats.length)]]; const boostStat = [randStats[Utils.randInt(randStats.length)]];
user.scene.unshiftPhase(new StatChangePhase(user.scene, target.getBattlerIndex(), this.selfTarget, boostStat, 2)); user.scene.unshiftPhase(new StatChangePhase(user.scene, target.getBattlerIndex(), this.selfTarget, boostStat, 2));
return true; return true;
} }
@ -2055,7 +2055,7 @@ export class CopyStatsAttr extends MoveEffectAttr {
target.updateInfo(); target.updateInfo();
user.updateInfo(); user.updateInfo();
target.scene.queueMessage(getPokemonMessage(user, ' copied\n') + getPokemonMessage(target, `'s stat changes!`)); target.scene.queueMessage(getPokemonMessage(user, ' copied\n') + getPokemonMessage(target, '\'s stat changes!'));
return true; return true;
} }
@ -2071,7 +2071,7 @@ export class InvertStatsAttr extends MoveEffectAttr {
target.updateInfo(); target.updateInfo();
user.updateInfo(); user.updateInfo();
target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere all reversed!`)); target.scene.queueMessage(getPokemonMessage(target, '\'s stat changes\nwere all reversed!'));
return true; return true;
} }
@ -2087,7 +2087,7 @@ export class ResetStatsAttr extends MoveEffectAttr {
target.updateInfo(); target.updateInfo();
user.updateInfo(); user.updateInfo();
target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere eliminated!`)); target.scene.queueMessage(getPokemonMessage(target, '\'s stat changes\nwere eliminated!'));
return true; return true;
} }
@ -2178,7 +2178,7 @@ export class LessPPMorePowerAttr extends VariablePowerAttr {
*/ */
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
const ppMax = move.pp; const ppMax = move.pp;
let ppUsed = user.moveset.find((m) => m.moveId === move.id).ppUsed; const ppUsed = user.moveset.find((m) => m.moveId === move.id).ppUsed;
let ppRemains = ppMax - ppUsed; let ppRemains = ppMax - ppUsed;
/** Reduce to 0 to avoid negative numbers if user has 1PP before attack and target has Ability.PRESSURE */ /** Reduce to 0 to avoid negative numbers if user has 1PP before attack and target has Ability.PRESSURE */
@ -2243,7 +2243,7 @@ const beatUpFunc = (user: Pokemon, allyIndex: number): number => {
} }
return (pokemon.species.getBaseStat(Stat.ATK) / 10) + 5; return (pokemon.species.getBaseStat(Stat.ATK) / 10) + 5;
} }
} };
export class BeatUpAttr extends VariablePowerAttr { export class BeatUpAttr extends VariablePowerAttr {
@ -2266,7 +2266,7 @@ export class BeatUpAttr extends VariablePowerAttr {
const doublePowerChanceMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => { const doublePowerChanceMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => {
let message: string = null; let message: string = null;
user.scene.executeWithSeedOffset(() => { user.scene.executeWithSeedOffset(() => {
let rand = Utils.randSeedInt(100); const rand = Utils.randSeedInt(100);
if (rand < move.chance) if (rand < move.chance)
message = getPokemonMessage(user, ' is going all out for this attack!'); message = getPokemonMessage(user, ' is going all out for this attack!');
}, user.scene.currentBattle.turn << 6, user.scene.waveSeed); }, user.scene.currentBattle.turn << 6, user.scene.waveSeed);
@ -2644,7 +2644,7 @@ export class KnockOffPowerAttr extends VariablePowerAttr {
export class WaterShurikenPowerAttr extends VariablePowerAttr { export class WaterShurikenPowerAttr extends VariablePowerAttr {
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
if (user.species.speciesId == Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex == 2) { if (user.species.speciesId == Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex == 2) {
(args[0] as Utils.IntegerHolder).value = 20 (args[0] as Utils.IntegerHolder).value = 20;
return true; return true;
} }
return false; return false;
@ -2751,7 +2751,7 @@ export class MinimizeAccuracyAttr extends VariableAccuracyAttr {
*/ */
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
if (target.getTag(BattlerTagType.MINIMIZED)){ if (target.getTag(BattlerTagType.MINIMIZED)){
const accuracy = args[0] as Utils.NumberHolder const accuracy = args[0] as Utils.NumberHolder;
accuracy.value = -1; accuracy.value = -1;
return true; return true;
@ -3405,7 +3405,7 @@ export class CurseAttr extends MoveEffectAttr {
user.scene.queueMessage('But it failed!'); user.scene.queueMessage('But it failed!');
return false; return false;
} }
let curseRecoilDamage = Math.max(1, Math.floor(user.getMaxHp() / 2)); const curseRecoilDamage = Math.max(1, Math.floor(user.getMaxHp() / 2));
user.damageAndUpdate(curseRecoilDamage, HitResult.OTHER, false, true, true); user.damageAndUpdate(curseRecoilDamage, HitResult.OTHER, false, true, true);
user.scene.queueMessage(getPokemonMessage(user, ` cut its own HP\nand laid a curse on the ${target.name}!`)); user.scene.queueMessage(getPokemonMessage(user, ` cut its own HP\nand laid a curse on the ${target.name}!`));
target.addTag(BattlerTagType.CURSED, 0, move.id, user.id); target.addTag(BattlerTagType.CURSED, 0, move.id, user.id);
@ -3431,7 +3431,7 @@ export class LapseBattlerTagAttr extends MoveEffectAttr {
if (!super.apply(user, target, move, args)) if (!super.apply(user, target, move, args))
return false; return false;
for (let tagType of this.tagTypes) for (const tagType of this.tagTypes)
(this.selfTarget ? user : target).lapseTag(tagType); (this.selfTarget ? user : target).lapseTag(tagType);
return true; return true;
@ -3451,7 +3451,7 @@ export class RemoveBattlerTagAttr extends MoveEffectAttr {
if (!super.apply(user, target, move, args)) if (!super.apply(user, target, move, args))
return false; return false;
for (let tagType of this.tagTypes) for (const tagType of this.tagTypes)
(this.selfTarget ? user : target).removeTag(tagType); (this.selfTarget ? user : target).removeTag(tagType);
return true; return true;
@ -3718,7 +3718,7 @@ export class RevivalBlessingAttr extends MoveEffectAttr {
if(user instanceof PlayerPokemon if(user instanceof PlayerPokemon
&& user.scene.getParty().findIndex(p => p.isFainted())>-1) { && user.scene.getParty().findIndex(p => p.isFainted())>-1) {
(user as PlayerPokemon).revivalBlessing().then(() => { (user as PlayerPokemon).revivalBlessing().then(() => {
resolve(true) resolve(true);
}); });
// If user is enemy, checks that it is a trainer, and it has fainted non-boss pokemon in party // If user is enemy, checks that it is a trainer, and it has fainted non-boss pokemon in party
} else if(user instanceof EnemyPokemon } else if(user instanceof EnemyPokemon
@ -3742,10 +3742,10 @@ export class RevivalBlessingAttr extends MoveEffectAttr {
} }
resolve(true); resolve(true);
} else { } else {
user.scene.queueMessage(`But it failed!`); user.scene.queueMessage('But it failed!');
resolve(false); resolve(false);
} }
}) });
} }
getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer {
@ -3830,7 +3830,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null { getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null {
const blockedByAbility = new Utils.BooleanHolder(false); const blockedByAbility = new Utils.BooleanHolder(false);
applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility);
return blockedByAbility.value ? getPokemonMessage(target, ` can't be switched out!`) : null; return blockedByAbility.value ? getPokemonMessage(target, ' can\'t be switched out!') : null;
} }
getSwitchOutCondition(): MoveConditionFunc { getSwitchOutCondition(): MoveConditionFunc {
@ -3885,7 +3885,7 @@ export class RemoveTypeAttr extends MoveEffectAttr {
if(user.isTerastallized && user.getTeraType() == this.removedType) // active tera types cannot be removed if(user.isTerastallized && user.getTeraType() == this.removedType) // active tera types cannot be removed
return false; return false;
const userTypes = user.getTypes(true) const userTypes = user.getTypes(true);
const modifiedTypes = userTypes.filter(type => type !== this.removedType); const modifiedTypes = userTypes.filter(type => type !== this.removedType);
user.summonData.types = modifiedTypes; user.summonData.types = modifiedTypes;
user.updateInfo(); user.updateInfo();
@ -3998,7 +3998,7 @@ export class FirstMoveTypeAttr extends MoveEffectAttr {
if (!super.apply(user, target, move, args)) if (!super.apply(user, target, move, args))
return false; return false;
const firstMoveType = target.getMoveset()[0].getMove().type const firstMoveType = target.getMoveset()[0].getMove().type;
user.summonData.types = [ firstMoveType ]; user.summonData.types = [ firstMoveType ];
@ -4081,7 +4081,7 @@ export class RandomMoveAttr extends OverrideMoveEffectAttr {
export class NaturePowerAttr extends OverrideMoveEffectAttr { export class NaturePowerAttr extends OverrideMoveEffectAttr {
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
return new Promise(resolve => { return new Promise(resolve => {
var moveId; let moveId;
switch (user.scene.arena.getTerrainType()) { switch (user.scene.arena.getTerrainType()) {
// this allows terrains to 'override' the biome move // this allows terrains to 'override' the biome move
case TerrainType.NONE: case TerrainType.NONE:
@ -4432,11 +4432,11 @@ export class AbilityCopyAttr extends MoveEffectAttr {
user.summonData.ability = target.getAbility().id; user.summonData.ability = target.getAbility().id;
user.scene.queueMessage(getPokemonMessage(user, ` copied the `) + getPokemonMessage(target, `'s\n${allAbilities[target.getAbility().id].name}!`)); user.scene.queueMessage(getPokemonMessage(user, ' copied the ') + getPokemonMessage(target, `'s\n${allAbilities[target.getAbility().id].name}!`));
if (this.copyToPartner && user.scene.currentBattle?.double && user.getAlly().hp) { if (this.copyToPartner && user.scene.currentBattle?.double && user.getAlly().hp) {
user.getAlly().summonData.ability = target.getAbility().id; user.getAlly().summonData.ability = target.getAbility().id;
user.getAlly().scene.queueMessage(getPokemonMessage(user.getAlly(), ` copied the `) + getPokemonMessage(target, `'s\n${allAbilities[target.getAbility().id].name}!`)); user.getAlly().scene.queueMessage(getPokemonMessage(user.getAlly(), ' copied the ') + getPokemonMessage(target, `'s\n${allAbilities[target.getAbility().id].name}!`));
} }
return true; return true;
@ -4486,7 +4486,7 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr {
user.summonData.ability = target.getAbility().id; user.summonData.ability = target.getAbility().id;
target.summonData.ability = tempAbilityId; target.summonData.ability = tempAbilityId;
user.scene.queueMessage(getPokemonMessage(user, ` swapped\nabilities with its target!`)); user.scene.queueMessage(getPokemonMessage(user, ' swapped\nabilities with its target!'));
return true; return true;
} }
@ -4503,7 +4503,7 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr {
target.summonData.abilitySuppressed = true; target.summonData.abilitySuppressed = true;
target.scene.queueMessage(getPokemonMessage(target, ` ability\nwas suppressed!`)); target.scene.queueMessage(getPokemonMessage(target, ' ability\nwas suppressed!'));
return true; return true;
} }
@ -4559,7 +4559,7 @@ export class MoneyAttr extends MoveEffectAttr {
apply(user: Pokemon, target: Pokemon, move: Move): boolean { apply(user: Pokemon, target: Pokemon, move: Move): boolean {
user.scene.currentBattle.moneyScattered += user.scene.getWaveMoneyAmount(0.2); user.scene.currentBattle.moneyScattered += user.scene.getWaveMoneyAmount(0.2);
user.scene.queueMessage("Coins were scattered everywhere!") user.scene.queueMessage('Coins were scattered everywhere!');
return true; return true;
} }
} }
@ -4607,7 +4607,7 @@ const failIfDampCondition: MoveConditionFunc = (user, target, move) => {
if (cancelled.value) if (cancelled.value)
user.scene.queueMessage(getPokemonMessage(user, ` cannot use ${move.name}!`)); user.scene.queueMessage(getPokemonMessage(user, ` cannot use ${move.name}!`));
return !cancelled.value; return !cancelled.value;
} };
export type MoveAttrFilter = (attr: MoveAttr) => boolean; export type MoveAttrFilter = (attr: MoveAttr) => boolean;
@ -4615,7 +4615,7 @@ function applyMoveAttrsInternal(attrFilter: MoveAttrFilter, user: Pokemon, targe
return new Promise(resolve => { return new Promise(resolve => {
const attrPromises: Promise<boolean>[] = []; const attrPromises: Promise<boolean>[] = [];
const moveAttrs = move.attrs.filter(a => attrFilter(a)); const moveAttrs = move.attrs.filter(a => attrFilter(a));
for (let attr of moveAttrs) { for (const attr of moveAttrs) {
const result = attr.apply(user, target, move, args); const result = attr.apply(user, target, move, args);
if (result instanceof Promise) if (result instanceof Promise)
attrPromises.push(result); attrPromises.push(result);
@ -4674,7 +4674,7 @@ const unknownTypeCondition: MoveConditionFunc = (user, target, move) => !user.ge
export type MoveTargetSet = { export type MoveTargetSet = {
targets: BattlerIndex[]; targets: BattlerIndex[];
multiple: boolean; multiple: boolean;
} };
export function getMoveTargets(user: Pokemon, move: Moves): MoveTargetSet { export function getMoveTargets(user: Pokemon, move: Moves): MoveTargetSet {
const variableTarget = new Utils.NumberHolder(0); const variableTarget = new Utils.NumberHolder(0);
@ -4696,7 +4696,7 @@ export function getMoveTargets(user: Pokemon, move: Moves): MoveTargetSet {
case MoveTarget.ALL_NEAR_OTHERS: case MoveTarget.ALL_NEAR_OTHERS:
case MoveTarget.ALL_OTHERS: case MoveTarget.ALL_OTHERS:
set = (opponents.concat([ user.getAlly() ])); set = (opponents.concat([ user.getAlly() ]));
multiple = moveTarget === MoveTarget.ALL_NEAR_OTHERS || moveTarget === MoveTarget.ALL_OTHERS multiple = moveTarget === MoveTarget.ALL_NEAR_OTHERS || moveTarget === MoveTarget.ALL_OTHERS;
break; break;
case MoveTarget.NEAR_ENEMY: case MoveTarget.NEAR_ENEMY:
case MoveTarget.ALL_NEAR_ENEMIES: case MoveTarget.ALL_NEAR_ENEMIES:
@ -5323,7 +5323,7 @@ export function initMoves() {
.condition((user, target, move) => user.status?.effect === StatusEffect.SLEEP) .condition((user, target, move) => user.status?.effect === StatusEffect.SLEEP)
.ignoresVirtual(), .ignoresVirtual(),
new StatusMove(Moves.HEAL_BELL, Type.NORMAL, -1, 5, -1, 0, 2) new StatusMove(Moves.HEAL_BELL, Type.NORMAL, -1, 5, -1, 0, 2)
.attr(PartyStatusCureAttr, "A bell chimed!", Abilities.SOUNDPROOF) .attr(PartyStatusCureAttr, 'A bell chimed!', Abilities.SOUNDPROOF)
.soundBased() .soundBased()
.target(MoveTarget.PARTY), .target(MoveTarget.PARTY),
new AttackMove(Moves.RETURN, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 2) new AttackMove(Moves.RETURN, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 20, -1, 0, 2)
@ -5598,7 +5598,7 @@ export function initMoves() {
.attr(MovePowerMultiplierAttr, (user, target, move) => [WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN].includes(user.scene.arena.weather?.weatherType) && !user.scene.arena.weather?.isEffectSuppressed(user.scene) ? 2 : 1) .attr(MovePowerMultiplierAttr, (user, target, move) => [WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN].includes(user.scene.arena.weather?.weatherType) && !user.scene.arena.weather?.isEffectSuppressed(user.scene) ? 2 : 1)
.ballBombMove(), .ballBombMove(),
new StatusMove(Moves.AROMATHERAPY, Type.GRASS, -1, 5, -1, 0, 3) new StatusMove(Moves.AROMATHERAPY, Type.GRASS, -1, 5, -1, 0, 3)
.attr(PartyStatusCureAttr, "A soothing aroma wafted through the area!", Abilities.SAP_SIPPER) .attr(PartyStatusCureAttr, 'A soothing aroma wafted through the area!', Abilities.SAP_SIPPER)
.target(MoveTarget.PARTY), .target(MoveTarget.PARTY),
new StatusMove(Moves.FAKE_TEARS, Type.DARK, 100, 20, -1, 0, 3) new StatusMove(Moves.FAKE_TEARS, Type.DARK, 100, 20, -1, 0, 3)
.attr(StatChangeAttr, BattleStat.SPDEF, -2), .attr(StatChangeAttr, BattleStat.SPDEF, -2),
@ -6396,7 +6396,7 @@ export function initMoves() {
.powderMove() .powderMove()
.unimplemented(), .unimplemented(),
new SelfStatusMove(Moves.GEOMANCY, Type.FAIRY, -1, 10, -1, 0, 6) new SelfStatusMove(Moves.GEOMANCY, Type.FAIRY, -1, 10, -1, 0, 6)
.attr(ChargeAttr, ChargeAnim.GEOMANCY_CHARGING, "is charging its power!") .attr(ChargeAttr, ChargeAnim.GEOMANCY_CHARGING, 'is charging its power!')
.attr(StatChangeAttr, [ BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD ], 2, true) .attr(StatChangeAttr, [ BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD ], 2, true)
.ignoresVirtual(), .ignoresVirtual(),
new StatusMove(Moves.MAGNETIC_FLUX, Type.ELECTRIC, -1, 20, -1, 0, 6) new StatusMove(Moves.MAGNETIC_FLUX, Type.ELECTRIC, -1, 20, -1, 0, 6)
@ -6599,7 +6599,7 @@ export function initMoves() {
.condition((user, target, move) => target.summonData.battleStats[BattleStat.ATK] > -6) .condition((user, target, move) => target.summonData.battleStats[BattleStat.ATK] > -6)
.triageMove(), .triageMove(),
new AttackMove(Moves.SOLAR_BLADE, Type.GRASS, MoveCategory.PHYSICAL, 125, 100, 10, -1, 0, 7) new AttackMove(Moves.SOLAR_BLADE, Type.GRASS, MoveCategory.PHYSICAL, 125, 100, 10, -1, 0, 7)
.attr(SunlightChargeAttr, ChargeAnim.SOLAR_BLADE_CHARGING, "is glowing!") .attr(SunlightChargeAttr, ChargeAnim.SOLAR_BLADE_CHARGING, 'is glowing!')
.attr(AntiSunlightPowerDecreaseAttr) .attr(AntiSunlightPowerDecreaseAttr)
.slicingMove(), .slicingMove(),
new AttackMove(Moves.LEAFAGE, Type.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 7) new AttackMove(Moves.LEAFAGE, Type.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 7)
@ -6638,7 +6638,7 @@ export function initMoves() {
}) })
.attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE)
.attr(RemoveTypeAttr, Type.FIRE, (user) => { .attr(RemoveTypeAttr, Type.FIRE, (user) => {
user.scene.queueMessage(getPokemonMessage(user, ` burned itself out!`)); user.scene.queueMessage(getPokemonMessage(user, ' burned itself out!'));
}), }),
new StatusMove(Moves.SPEED_SWAP, Type.PSYCHIC, -1, 10, -1, 0, 7) new StatusMove(Moves.SPEED_SWAP, Type.PSYCHIC, -1, 10, -1, 0, 7)
.unimplemented(), .unimplemented(),
@ -6657,7 +6657,7 @@ export function initMoves() {
new StatusMove(Moves.INSTRUCT, Type.PSYCHIC, -1, 15, -1, 0, 7) new StatusMove(Moves.INSTRUCT, Type.PSYCHIC, -1, 15, -1, 0, 7)
.unimplemented(), .unimplemented(),
new AttackMove(Moves.BEAK_BLAST, Type.FLYING, MoveCategory.PHYSICAL, 100, 100, 15, -1, 5, 7) new AttackMove(Moves.BEAK_BLAST, Type.FLYING, MoveCategory.PHYSICAL, 100, 100, 15, -1, 5, 7)
.attr(ChargeAttr, ChargeAnim.BEAK_BLAST_CHARGING, "started\nheating up its beak!", undefined, false, true, -3) .attr(ChargeAttr, ChargeAnim.BEAK_BLAST_CHARGING, 'started\nheating up its beak!', undefined, false, true, -3)
.ballBombMove() .ballBombMove()
.makesContact(false) .makesContact(false)
.partial(), .partial(),
@ -7271,7 +7271,7 @@ export function initMoves() {
new AttackMove(Moves.LAST_RESPECTS, Type.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) new AttackMove(Moves.LAST_RESPECTS, Type.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9)
.attr(MovePowerMultiplierAttr, (user, target, move) => { .attr(MovePowerMultiplierAttr, (user, target, move) => {
return user.scene.getParty().reduce((acc, pokemonInParty) => acc + (pokemonInParty.status?.effect == StatusEffect.FAINT ? 1 : 0), return user.scene.getParty().reduce((acc, pokemonInParty) => acc + (pokemonInParty.status?.effect == StatusEffect.FAINT ? 1 : 0),
1,) 1,);
}) })
.makesContact(false), .makesContact(false),
new AttackMove(Moves.LUMINA_CRASH, Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) new AttackMove(Moves.LUMINA_CRASH, Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9)
@ -7393,7 +7393,7 @@ export function initMoves() {
return userTypes.includes(Type.ELECTRIC); return userTypes.includes(Type.ELECTRIC);
}) })
.attr(RemoveTypeAttr, Type.ELECTRIC, (user) => { .attr(RemoveTypeAttr, Type.ELECTRIC, (user) => {
user.scene.queueMessage(getPokemonMessage(user, ` used up all its electricity!`)); user.scene.queueMessage(getPokemonMessage(user, ' used up all its electricity!'));
}), }),
new AttackMove(Moves.GIGATON_HAMMER, Type.STEEL, MoveCategory.PHYSICAL, 160, 100, 5, -1, 0, 9) new AttackMove(Moves.GIGATON_HAMMER, Type.STEEL, MoveCategory.PHYSICAL, 160, 100, 5, -1, 0, 9)
.makesContact(false) .makesContact(false)

View File

@ -1,7 +1,7 @@
import { Stat, getStatName } from "./pokemon-stat"; import { Stat, getStatName } from './pokemon-stat';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { TextStyle, getBBCodeFrag } from "../ui/text"; import { TextStyle, getBBCodeFrag } from '../ui/text';
import { UiTheme } from "#app/enums/ui-theme"; import { UiTheme } from '#app/enums/ui-theme';
import i18next from 'i18next'; import i18next from 'i18next';
export enum Nature { export enum Nature {
@ -36,13 +36,13 @@ export function getNatureName(nature: Nature, includeStatEffects: boolean = fals
let ret = Utils.toReadableString(Nature[nature]); let ret = Utils.toReadableString(Nature[nature]);
//Translating nature //Translating nature
if(i18next.exists('nature:' + ret)){ if(i18next.exists('nature:' + ret)){
ret = i18next.t('nature:' + ret as any) ret = i18next.t('nature:' + ret as any);
} }
if (includeStatEffects) { if (includeStatEffects) {
const stats = Utils.getEnumValues(Stat).slice(1); const stats = Utils.getEnumValues(Stat).slice(1);
let increasedStat: Stat = null; let increasedStat: Stat = null;
let decreasedStat: Stat = null; let decreasedStat: Stat = null;
for (let stat of stats) { for (const stat of stats) {
const multiplier = getNatureStatMultiplier(nature, stat); const multiplier = getNatureStatMultiplier(nature, stat);
if (multiplier > 1) if (multiplier > 1)
increasedStat = stat; increasedStat = stat;

View File

@ -1,4 +1,4 @@
import BattleScene from "../battle-scene"; import BattleScene from '../battle-scene';
import i18next from '../plugins/i18n'; import i18next from '../plugins/i18n';
export enum PokeballType { export enum PokeballType {
@ -8,7 +8,7 @@ export enum PokeballType {
ROGUE_BALL, ROGUE_BALL,
MASTER_BALL, MASTER_BALL,
LUXURY_BALL LUXURY_BALL
}; }
export function getPokeballAtlasKey(type: PokeballType): string { export function getPokeballAtlasKey(type: PokeballType): string {
switch (type) { switch (type) {
@ -90,7 +90,7 @@ export function doPokeballBounceAnim(scene: BattleScene, pokeball: Phaser.GameOb
let bouncePower = 1; let bouncePower = 1;
let bounceYOffset = y1; let bounceYOffset = y1;
let bounceY = y2; let bounceY = y2;
let yd = y2 - y1; const yd = y2 - y1;
const doBounce = () => { const doBounce = () => {
scene.tweens.add({ scene.tweens.add({

View File

@ -1,17 +1,17 @@
import { Gender } from "./gender"; import { Gender } from './gender';
import { AttackTypeBoosterModifier, FlinchChanceModifier } from "../modifier/modifier"; import { AttackTypeBoosterModifier, FlinchChanceModifier } from '../modifier/modifier';
import { Moves } from "./enums/moves"; import { Moves } from './enums/moves';
import { PokeballType } from "./pokeball"; import { PokeballType } from './pokeball';
import Pokemon from "../field/pokemon"; import Pokemon from '../field/pokemon';
import { Stat } from "./pokemon-stat"; import { Stat } from './pokemon-stat';
import { Species } from "./enums/species"; import { Species } from './enums/species';
import { Type } from "./type"; import { Type } from './type';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { SpeciesFormKey } from "./pokemon-species"; import { SpeciesFormKey } from './pokemon-species';
import { WeatherType } from "./weather"; import { WeatherType } from './weather';
import { Biome } from "./enums/biome"; import { Biome } from './enums/biome';
import { TimeOfDay } from "./enums/time-of-day"; import { TimeOfDay } from './enums/time-of-day';
import { Nature } from "./nature"; import { Nature } from './nature';
export enum SpeciesWildEvolutionDelay { export enum SpeciesWildEvolutionDelay {
NONE, NONE,
@ -1623,7 +1623,7 @@ export const pokemonPrevolutions: PokemonPrevolutions = {};
const prevolutionKeys = Object.keys(pokemonEvolutions); const prevolutionKeys = Object.keys(pokemonEvolutions);
prevolutionKeys.forEach(pk => { prevolutionKeys.forEach(pk => {
const evolutions = pokemonEvolutions[pk]; const evolutions = pokemonEvolutions[pk];
for (let ev of evolutions) { for (const ev of evolutions) {
if (ev.evoFormKey && megaFormKeys.indexOf(ev.evoFormKey) > -1) if (ev.evoFormKey && megaFormKeys.indexOf(ev.evoFormKey) > -1)
continue; continue;
pokemonPrevolutions[ev.speciesId] = parseInt(pk) as Species; pokemonPrevolutions[ev.speciesId] = parseInt(pk) as Species;

View File

@ -1,12 +1,12 @@
import { TimeOfDay } from "./enums/time-of-day"; import { TimeOfDay } from './enums/time-of-day';
import { PokemonFormChangeItemModifier } from "../modifier/modifier"; import { PokemonFormChangeItemModifier } from '../modifier/modifier';
import Pokemon from "../field/pokemon"; import Pokemon from '../field/pokemon';
import { Moves } from "./enums/moves"; import { Moves } from './enums/moves';
import { SpeciesFormKey } from "./pokemon-species"; import { SpeciesFormKey } from './pokemon-species';
import { Species } from "./enums/species"; import { Species } from './enums/species';
import { StatusEffect } from "./status-effect"; import { StatusEffect } from './status-effect';
import { MoveCategory, allMoves } from "./move"; import { MoveCategory, allMoves } from './move';
import { Abilities } from "./enums/abilities"; import { Abilities } from './enums/abilities';
export enum FormChangeItem { export enum FormChangeItem {
NONE, NONE,
@ -123,7 +123,7 @@ export class SpeciesFormChange {
if (formKeys[pokemon.formIndex] === this.formKey) if (formKeys[pokemon.formIndex] === this.formKey)
return false; return false;
for (let condition of this.conditions) { for (const condition of this.conditions) {
if (!condition.predicate(pokemon)) if (!condition.predicate(pokemon))
return false; return false;
} }
@ -138,7 +138,7 @@ export class SpeciesFormChange {
if (!this.trigger.hasTriggerType(triggerType)) if (!this.trigger.hasTriggerType(triggerType))
return null; return null;
let trigger = this.trigger; const trigger = this.trigger;
if (trigger instanceof SpeciesFormChangeCompoundTrigger) if (trigger instanceof SpeciesFormChangeCompoundTrigger)
return trigger.triggers.find(t => t.hasTriggerType(triggerType)); return trigger.triggers.find(t => t.hasTriggerType(triggerType));
@ -181,7 +181,7 @@ export class SpeciesFormChangeCompoundTrigger {
} }
canChange(pokemon: Pokemon): boolean { canChange(pokemon: Pokemon): boolean {
for (let trigger of this.triggers) { for (const trigger of this.triggers) {
if (!trigger.canChange(pokemon)) if (!trigger.canChange(pokemon))
return false; return false;
} }
@ -719,8 +719,8 @@ export const pokemonFormChanges: PokemonFormChanges = {
const formChangeKeys = Object.keys(pokemonFormChanges); const formChangeKeys = Object.keys(pokemonFormChanges);
formChangeKeys.forEach(pk => { formChangeKeys.forEach(pk => {
const formChanges = pokemonFormChanges[pk]; const formChanges = pokemonFormChanges[pk];
let newFormChanges: SpeciesFormChange[] = []; const newFormChanges: SpeciesFormChange[] = [];
for (let fc of formChanges) { for (const fc of formChanges) {
const itemTrigger = fc.findTrigger(SpeciesFormChangeItemTrigger) as SpeciesFormChangeItemTrigger; const itemTrigger = fc.findTrigger(SpeciesFormChangeItemTrigger) as SpeciesFormChangeItemTrigger;
if (itemTrigger && !formChanges.find(c => fc.formKey === c.preFormKey && fc.preFormKey === c.formKey)) if (itemTrigger && !formChanges.find(c => fc.formKey === c.preFormKey && fc.preFormKey === c.formKey))
newFormChanges.push(new SpeciesFormChange(fc.speciesId, fc.formKey, fc.preFormKey, new SpeciesFormChangeItemTrigger(itemTrigger.item, false))); newFormChanges.push(new SpeciesFormChange(fc.speciesId, fc.formKey, fc.preFormKey, new SpeciesFormChangeItemTrigger(itemTrigger.item, false)));

View File

@ -1,5 +1,5 @@
import { Moves } from "./enums/moves"; import { Moves } from './enums/moves';
import { Species } from "./enums/species"; import { Species } from './enums/species';
export type LevelMoves = ([integer, Moves])[]; export type LevelMoves = ([integer, Moves])[];

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@ export enum Stat {
SPATK, SPATK,
SPDEF, SPDEF,
SPD SPD
}; }
export function getStatName(stat: Stat, shorten: boolean = false) { export function getStatName(stat: Stat, shorten: boolean = false) {
let ret: string; let ret: string;

View File

@ -1,4 +1,4 @@
import i18next from "../plugins/i18n"; import i18next from '../plugins/i18n';
export function getBattleCountSplashMessage(): string { export function getBattleCountSplashMessage(): string {
return `{COUNT} ${i18next.t('splashMessages:battlesWon')}`; return `{COUNT} ${i18next.t('splashMessages:battlesWon')}`;
@ -41,5 +41,5 @@ export function getSplashMessages(): string[] {
i18next.t('splashMessages:ynoproject'), i18next.t('splashMessages:ynoproject'),
]); ]);
return splashMessages return splashMessages;
} }

View File

@ -1,4 +1,4 @@
import * as Utils from "../utils"; import * as Utils from '../utils';
export enum StatusEffect { export enum StatusEffect {
NONE, NONE,

View File

@ -1,4 +1,4 @@
import { BattleStat, getBattleStatName } from "./battle-stat"; import { BattleStat, getBattleStatName } from './battle-stat';
export enum TempBattleStat { export enum TempBattleStat {
ATK, ATK,

View File

@ -1,10 +1,10 @@
import Pokemon from "../field/pokemon"; import Pokemon from '../field/pokemon';
import Move from "./move"; import Move from './move';
import { Type } from "./type"; import { Type } from './type';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { IncrementMovePriorityAbAttr, applyAbAttrs } from "./ability"; import { IncrementMovePriorityAbAttr, applyAbAttrs } from './ability';
import { ProtectAttr } from "./move"; import { ProtectAttr } from './move';
import { BattlerIndex } from "#app/battle.js"; import { BattlerIndex } from '#app/battle.js';
export enum TerrainType { export enum TerrainType {
NONE, NONE,

View File

@ -1,6 +1,6 @@
import { ModifierTier } from "../modifier/modifier-tier"; import { ModifierTier } from '../modifier/modifier-tier';
import { Moves } from "./enums/moves"; import { Moves } from './enums/moves';
import { Species } from "./enums/species"; import { Species } from './enums/species';
interface TmSpecies { interface TmSpecies {
[key: integer]: Array<Species | Array<Species | string>> [key: integer]: Array<Species | Array<Species | string>>

View File

@ -1,21 +1,21 @@
import BattleScene, {startingWave} from "../battle-scene"; import BattleScene, {startingWave} from '../battle-scene';
import {ModifierTypeFunc, modifierTypes} from "../modifier/modifier-type"; import {ModifierTypeFunc, modifierTypes} from '../modifier/modifier-type';
import {EnemyPokemon} from "../field/pokemon"; import {EnemyPokemon} from '../field/pokemon';
import * as Utils from "../utils"; import * as Utils from '../utils';
import {TrainerType} from "./enums/trainer-type"; import {TrainerType} from './enums/trainer-type';
import {Moves} from "./enums/moves"; import {Moves} from './enums/moves';
import {PokeballType} from "./pokeball"; import {PokeballType} from './pokeball';
import {pokemonEvolutions, pokemonPrevolutions} from "./pokemon-evolutions"; import {pokemonEvolutions, pokemonPrevolutions} from './pokemon-evolutions';
import PokemonSpecies, {PokemonSpeciesFilter, getPokemonSpecies} from "./pokemon-species"; import PokemonSpecies, {PokemonSpeciesFilter, getPokemonSpecies} from './pokemon-species';
import {Species} from "./enums/species"; import {Species} from './enums/species';
import {tmSpecies} from "./tms"; import {tmSpecies} from './tms';
import {Type} from "./type"; import {Type} from './type';
import {initTrainerTypeDialogue} from "./dialogue"; import {initTrainerTypeDialogue} from './dialogue';
import {PersistentModifier} from "../modifier/modifier"; import {PersistentModifier} from '../modifier/modifier';
import {TrainerVariant} from "../field/trainer"; import {TrainerVariant} from '../field/trainer';
import {PartyMemberStrength} from "./enums/party-member-strength"; import {PartyMemberStrength} from './enums/party-member-strength';
import i18next from "i18next"; import i18next from 'i18next';
import {getIsInitialized, initI18n} from "#app/plugins/i18n"; import {getIsInitialized, initI18n} from '#app/plugins/i18n';
export enum TrainerPoolTier { export enum TrainerPoolTier {
COMMON, COMMON,
@ -74,7 +74,7 @@ export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate {
getStrength(index: integer): PartyMemberStrength { getStrength(index: integer): PartyMemberStrength {
let t = 0; let t = 0;
for (let template of this.templates) { for (const template of this.templates) {
if (t + template.size > index) if (t + template.size > index)
return template.getStrength(index - t); return template.getStrength(index - t);
t += template.size; t += template.size;
@ -85,7 +85,7 @@ export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate {
isSameSpecies(index: integer): boolean { isSameSpecies(index: integer): boolean {
let t = 0; let t = 0;
for (let template of this.templates) { for (const template of this.templates) {
if (t + template.size > index) if (t + template.size > index)
return template.isSameSpecies(index - t); return template.isSameSpecies(index - t);
t += template.size; t += template.size;
@ -96,7 +96,7 @@ export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate {
isBalanced(index: integer): boolean { isBalanced(index: integer): boolean {
let t = 0; let t = 0;
for (let template of this.templates) { for (const template of this.templates) {
if (t + template.size > index) if (t + template.size > index)
return template.isBalanced(index - t); return template.isBalanced(index - t);
t += template.size; t += template.size;
@ -569,7 +569,7 @@ export class TrainerConfig {
* @returns {string} - The title of the trainer. * @returns {string} - The title of the trainer.
**/ **/
getTitle(trainerSlot: TrainerSlot = TrainerSlot.NONE, variant: TrainerVariant): string { getTitle(trainerSlot: TrainerSlot = TrainerSlot.NONE, variant: TrainerVariant): string {
let ret = this.name; const ret = this.name;
// Check if the variant is double and the name for double exists // Check if the variant is double and the name for double exists
if (!trainerSlot && variant === TrainerVariant.DOUBLE && this.nameDouble) if (!trainerSlot && variant === TrainerVariant.DOUBLE && this.nameDouble)
@ -591,7 +591,7 @@ export class TrainerConfig {
// Check if the female version exists in the i18n file // Check if the female version exists in the i18n file
if (i18next.exists(`trainerClasses:${this.name.toLowerCase().replace()}`)) { if (i18next.exists(`trainerClasses:${this.name.toLowerCase().replace()}`)) {
// If it does, return // If it does, return
return ret + "_female"; return ret + '_female';
} else { } else {
// If it doesn't, we do not do anything and go to the normal return // If it doesn't, we do not do anything and go to the normal return
// This is to prevent the game from displaying an error if a female version of the trainer does not exist in the localization // This is to prevent the game from displaying an error if a female version of the trainer does not exist in the localization
@ -615,9 +615,9 @@ export class TrainerConfig {
// Ignore warnings for missing frames, because there will be a lot // Ignore warnings for missing frames, because there will be a lot
console.warn = () => { console.warn = () => {
}; };
const frameNames = scene.anims.generateFrameNames(trainerKey, {zeroPad: 4,suffix: ".png",start: 1,end: 128}); const frameNames = scene.anims.generateFrameNames(trainerKey, {zeroPad: 4,suffix: '.png',start: 1,end: 128});
const partnerFrameNames = isDouble const partnerFrameNames = isDouble
? scene.anims.generateFrameNames(partnerTrainerKey, {zeroPad: 4,suffix: ".png",start: 1,end: 128}) ? scene.anims.generateFrameNames(partnerTrainerKey, {zeroPad: 4,suffix: '.png',start: 1,end: 128})
: null; : null;
console.warn = originalWarn; console.warn = originalWarn;
scene.anims.create({ scene.anims.create({
@ -691,8 +691,8 @@ export const trainerConfigs: TrainerConfigs = {
.setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.THREE_WEAK_BALANCED, trainerPartyTemplates.FOUR_WEAK_BALANCED, trainerPartyTemplates.FIVE_WEAK_BALANCED, trainerPartyTemplates.SIX_WEAK_BALANCED)), .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.THREE_WEAK_BALANCED, trainerPartyTemplates.FOUR_WEAK_BALANCED, trainerPartyTemplates.FIVE_WEAK_BALANCED, trainerPartyTemplates.SIX_WEAK_BALANCED)),
[TrainerType.ARTIST]: new TrainerConfig(++t).setEncounterBgm(TrainerType.RICH).setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.THREE_AVG) [TrainerType.ARTIST]: new TrainerConfig(++t).setEncounterBgm(TrainerType.RICH).setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.THREE_AVG)
.setSpeciesPools([ Species.SMEARGLE ]), .setSpeciesPools([ Species.SMEARGLE ]),
[TrainerType.BACKERS]: new TrainerConfig(++t).setHasGenders("Backers").setDoubleOnly().setEncounterBgm(TrainerType.CYCLIST), [TrainerType.BACKERS]: new TrainerConfig(++t).setHasGenders('Backers').setDoubleOnly().setEncounterBgm(TrainerType.CYCLIST),
[TrainerType.BACKPACKER]: new TrainerConfig(++t).setHasGenders("Backpacker Female").setHasDouble('Backpackers').setSpeciesFilter(s => s.isOfType(Type.FLYING) || s.isOfType(Type.ROCK)).setEncounterBgm(TrainerType.BACKPACKER) [TrainerType.BACKPACKER]: new TrainerConfig(++t).setHasGenders('Backpacker Female').setHasDouble('Backpackers').setSpeciesFilter(s => s.isOfType(Type.FLYING) || s.isOfType(Type.ROCK)).setEncounterBgm(TrainerType.BACKPACKER)
.setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.ONE_WEAK_ONE_STRONG, trainerPartyTemplates.ONE_AVG_ONE_STRONG) .setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.ONE_WEAK_ONE_STRONG, trainerPartyTemplates.ONE_AVG_ONE_STRONG)
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.RHYHORN, Species.AIPOM, Species.MAKUHITA, Species.MAWILE, Species.NUMEL, Species.LILLIPUP, Species.SANDILE, Species.WOOLOO ], [TrainerPoolTier.COMMON]: [ Species.RHYHORN, Species.AIPOM, Species.MAKUHITA, Species.MAWILE, Species.NUMEL, Species.LILLIPUP, Species.SANDILE, Species.WOOLOO ],
@ -712,17 +712,17 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerPoolTier.SUPER_RARE]: [ Species.HITMONTOP, Species.INFERNAPE, Species.GALLADE, Species.HAWLUCHA, Species.HAKAMO_O ], [TrainerPoolTier.SUPER_RARE]: [ Species.HITMONTOP, Species.INFERNAPE, Species.GALLADE, Species.HAWLUCHA, Species.HAKAMO_O ],
[TrainerPoolTier.ULTRA_RARE]: [ Species.KUBFU ] [TrainerPoolTier.ULTRA_RARE]: [ Species.KUBFU ]
}), }),
[TrainerType.BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(1.325).setEncounterBgm(TrainerType.POKEFAN).setHasGenders("Breeder Female").setHasDouble('Breeders') [TrainerType.BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(1.325).setEncounterBgm(TrainerType.POKEFAN).setHasGenders('Breeder Female').setHasDouble('Breeders')
.setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.FIVE_WEAKER, trainerPartyTemplates.SIX_WEAKER)) .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.FIVE_WEAKER, trainerPartyTemplates.SIX_WEAKER))
.setSpeciesFilter(s => s.baseTotal < 450), .setSpeciesFilter(s => s.baseTotal < 450),
[TrainerType.CLERK]: new TrainerConfig(++t).setHasGenders("Clerk Female").setHasDouble('Colleagues').setEncounterBgm(TrainerType.CLERK) [TrainerType.CLERK]: new TrainerConfig(++t).setHasGenders('Clerk Female').setHasDouble('Colleagues').setEncounterBgm(TrainerType.CLERK)
.setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG)
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.MEOWTH, Species.PSYDUCK, Species.BUDEW, Species.PIDOVE, Species.CINCCINO, Species.LITLEO ], [TrainerPoolTier.COMMON]: [ Species.MEOWTH, Species.PSYDUCK, Species.BUDEW, Species.PIDOVE, Species.CINCCINO, Species.LITLEO ],
[TrainerPoolTier.UNCOMMON]: [ Species.JIGGLYPUFF, Species.MAGNEMITE, Species.MARILL, Species.COTTONEE, Species.SKIDDO ], [TrainerPoolTier.UNCOMMON]: [ Species.JIGGLYPUFF, Species.MAGNEMITE, Species.MARILL, Species.COTTONEE, Species.SKIDDO ],
[TrainerPoolTier.RARE]: [ Species.BUIZEL, Species.SNEASEL, Species.KLEFKI, Species.INDEEDEE ] [TrainerPoolTier.RARE]: [ Species.BUIZEL, Species.SNEASEL, Species.KLEFKI, Species.INDEEDEE ]
}), }),
[TrainerType.CYCLIST]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setHasGenders("Cyclist Female").setHasDouble('Cyclists').setEncounterBgm(TrainerType.CYCLIST) [TrainerType.CYCLIST]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setHasGenders('Cyclist Female').setHasDouble('Cyclists').setEncounterBgm(TrainerType.CYCLIST)
.setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG)
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.PICHU, Species.STARLY, Species.TAILLOW, Species.BOLTUND ], [TrainerPoolTier.COMMON]: [ Species.PICHU, Species.STARLY, Species.TAILLOW, Species.BOLTUND ],
@ -781,9 +781,9 @@ export const trainerConfigs: TrainerConfigs = {
}), }),
[TrainerType.PARASOL_LADY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY).setSpeciesFilter(s => s.isOfType(Type.WATER)), [TrainerType.PARASOL_LADY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY).setSpeciesFilter(s => s.isOfType(Type.WATER)),
[TrainerType.PILOT]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1), [TrainerType.PILOT]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1),
[TrainerType.POKEFAN]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setName('PokéFan').setHasGenders("PokéFan Female").setHasDouble('PokéFan Family').setEncounterBgm(TrainerType.POKEFAN) [TrainerType.POKEFAN]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setName('PokéFan').setHasGenders('PokéFan Female').setHasDouble('PokéFan Family').setEncounterBgm(TrainerType.POKEFAN)
.setPartyTemplates(trainerPartyTemplates.SIX_WEAKER, trainerPartyTemplates.FOUR_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.FOUR_WEAK_SAME, trainerPartyTemplates.FIVE_WEAK, trainerPartyTemplates.SIX_WEAKER_SAME), .setPartyTemplates(trainerPartyTemplates.SIX_WEAKER, trainerPartyTemplates.FOUR_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.FOUR_WEAK_SAME, trainerPartyTemplates.FIVE_WEAK, trainerPartyTemplates.SIX_WEAKER_SAME),
[TrainerType.PRESCHOOLER]: new TrainerConfig(++t).setMoneyMultiplier(0.2).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("Preschooler Female", 'lass').setHasDouble('Preschoolers') [TrainerType.PRESCHOOLER]: new TrainerConfig(++t).setMoneyMultiplier(0.2).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders('Preschooler Female', 'lass').setHasDouble('Preschoolers')
.setPartyTemplates(trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.FIVE_WEAKER) .setPartyTemplates(trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.FIVE_WEAKER)
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.CATERPIE, Species.PICHU, Species.SANDSHREW, Species.LEDYBA, Species.BUDEW, Species.BURMY, Species.WOOLOO, Species.PAWMI, Species.SMOLIV ], [TrainerPoolTier.COMMON]: [ Species.CATERPIE, Species.PICHU, Species.SANDSHREW, Species.LEDYBA, Species.BUDEW, Species.BURMY, Species.WOOLOO, Species.PAWMI, Species.SMOLIV ],
@ -791,7 +791,7 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerPoolTier.RARE]: [ Species.RALTS, Species.RIOLU, Species.JOLTIK, Species.TANDEMAUS ], [TrainerPoolTier.RARE]: [ Species.RALTS, Species.RIOLU, Species.JOLTIK, Species.TANDEMAUS ],
[TrainerPoolTier.SUPER_RARE]: [ Species.DARUMAKA, Species.TINKATINK ], [TrainerPoolTier.SUPER_RARE]: [ Species.DARUMAKA, Species.TINKATINK ],
}), }),
[TrainerType.PSYCHIC]: new TrainerConfig(++t).setHasGenders("Psychic Female").setHasDouble('Psychics').setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.PSYCHIC) [TrainerType.PSYCHIC]: new TrainerConfig(++t).setHasGenders('Psychic Female').setHasDouble('Psychics').setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.PSYCHIC)
.setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.TWO_WEAK_SAME_TWO_WEAK_SAME, trainerPartyTemplates.ONE_STRONGER) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.TWO_WEAK_SAME_TWO_WEAK_SAME, trainerPartyTemplates.ONE_STRONGER)
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.ABRA, Species.DROWZEE, Species.RALTS, Species.SPOINK, Species.GOTHITA, Species.SOLOSIS, Species.BLIPBUG, Species.ESPURR, Species.HATENNA ], [TrainerPoolTier.COMMON]: [ Species.ABRA, Species.DROWZEE, Species.RALTS, Species.SPOINK, Species.GOTHITA, Species.SOLOSIS, Species.BLIPBUG, Species.ESPURR, Species.HATENNA ],
@ -799,7 +799,7 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerPoolTier.RARE]: [ Species.ELGYEM, Species.SIGILYPH, Species.BALTOY, Species.GIRAFARIG, Species.MEOWSTIC ], [TrainerPoolTier.RARE]: [ Species.ELGYEM, Species.SIGILYPH, Species.BALTOY, Species.GIRAFARIG, Species.MEOWSTIC ],
[TrainerPoolTier.SUPER_RARE]: [ Species.BELDUM, Species.ESPEON, Species.STANTLER ], [TrainerPoolTier.SUPER_RARE]: [ Species.BELDUM, Species.ESPEON, Species.STANTLER ],
}), }),
[TrainerType.RANGER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setName('Pokémon Ranger').setEncounterBgm(TrainerType.BACKPACKER).setHasGenders("Pokémon Ranger Female").setHasDouble('Pokémon Rangers') [TrainerType.RANGER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setName('Pokémon Ranger').setEncounterBgm(TrainerType.BACKPACKER).setHasGenders('Pokémon Ranger Female').setHasDouble('Pokémon Rangers')
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.PICHU, Species.GROWLITHE, Species.PONYTA, Species.ZIGZAGOON, Species.SEEDOT, Species.BIDOOF, Species.RIOLU, Species.SEWADDLE, Species.SKIDDO, Species.SALANDIT, Species.YAMPER ], [TrainerPoolTier.COMMON]: [ Species.PICHU, Species.GROWLITHE, Species.PONYTA, Species.ZIGZAGOON, Species.SEEDOT, Species.BIDOOF, Species.RIOLU, Species.SEWADDLE, Species.SKIDDO, Species.SALANDIT, Species.YAMPER ],
[TrainerPoolTier.UNCOMMON]: [ Species.AZURILL, Species.TAUROS, Species.MAREEP, Species.FARFETCHD, Species.TEDDIURSA, Species.SHROOMISH, Species.ELECTRIKE, Species.BUDEW, Species.BUIZEL, Species.MUDBRAY, Species.STUFFUL ], [TrainerPoolTier.UNCOMMON]: [ Species.AZURILL, Species.TAUROS, Species.MAREEP, Species.FARFETCHD, Species.TEDDIURSA, Species.SHROOMISH, Species.ELECTRIKE, Species.BUDEW, Species.BUIZEL, Species.MUDBRAY, Species.STUFFUL ],
@ -809,7 +809,7 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.RICH]: new TrainerConfig(++t).setMoneyMultiplier(5).setName('Gentleman').setHasGenders('Madame').setHasDouble('Rich Couple'), [TrainerType.RICH]: new TrainerConfig(++t).setMoneyMultiplier(5).setName('Gentleman').setHasGenders('Madame').setHasDouble('Rich Couple'),
[TrainerType.RICH_KID]: new TrainerConfig(++t).setMoneyMultiplier(3.75).setName('Rich Boy').setHasGenders('Lady').setHasDouble('Rich Kids').setEncounterBgm(TrainerType.RICH), [TrainerType.RICH_KID]: new TrainerConfig(++t).setMoneyMultiplier(3.75).setName('Rich Boy').setHasGenders('Lady').setHasDouble('Rich Kids').setEncounterBgm(TrainerType.RICH),
[TrainerType.ROUGHNECK]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.DARK)), [TrainerType.ROUGHNECK]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.DARK)),
[TrainerType.SCIENTIST]: new TrainerConfig(++t).setHasGenders("Scientist Female").setHasDouble('Scientists').setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.SCIENTIST) [TrainerType.SCIENTIST]: new TrainerConfig(++t).setHasGenders('Scientist Female').setHasDouble('Scientists').setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.SCIENTIST)
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.MAGNEMITE, Species.GRIMER, Species.DROWZEE, Species.VOLTORB, Species.KOFFING ], [TrainerPoolTier.COMMON]: [ Species.MAGNEMITE, Species.GRIMER, Species.DROWZEE, Species.VOLTORB, Species.KOFFING ],
[TrainerPoolTier.UNCOMMON]: [ Species.BALTOY, Species.BRONZOR, Species.FERROSEED, Species.KLINK, Species.CHARJABUG, Species.BLIPBUG, Species.HELIOPTILE ], [TrainerPoolTier.UNCOMMON]: [ Species.BALTOY, Species.BRONZOR, Species.FERROSEED, Species.KLINK, Species.CHARJABUG, Species.BLIPBUG, Species.HELIOPTILE ],
@ -818,29 +818,29 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerPoolTier.ULTRA_RARE]: [ Species.ROTOM, Species.MELTAN ] [TrainerPoolTier.ULTRA_RARE]: [ Species.ROTOM, Species.MELTAN ]
}), }),
[TrainerType.SMASHER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.SMASHER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST),
[TrainerType.SNOW_WORKER]: new TrainerConfig(++t).setName('Worker').setHasGenders("Worker Female").setHasDouble('Workers').setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => s.isOfType(Type.ICE) || s.isOfType(Type.STEEL)), [TrainerType.SNOW_WORKER]: new TrainerConfig(++t).setName('Worker').setHasGenders('Worker Female').setHasDouble('Workers').setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => s.isOfType(Type.ICE) || s.isOfType(Type.STEEL)),
[TrainerType.STRIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.STRIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST),
[TrainerType.SCHOOL_KID]: new TrainerConfig(++t).setMoneyMultiplier(0.75).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("School Kid Female", 'lass').setHasDouble('School Kids') [TrainerType.SCHOOL_KID]: new TrainerConfig(++t).setMoneyMultiplier(0.75).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders('School Kid Female', 'lass').setHasDouble('School Kids')
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.ODDISH, Species.EXEGGCUTE, Species.TEDDIURSA, Species.WURMPLE, Species.RALTS, Species.SHROOMISH, Species.FLETCHLING ], [TrainerPoolTier.COMMON]: [ Species.ODDISH, Species.EXEGGCUTE, Species.TEDDIURSA, Species.WURMPLE, Species.RALTS, Species.SHROOMISH, Species.FLETCHLING ],
[TrainerPoolTier.UNCOMMON]: [ Species.VOLTORB, Species.WHISMUR, Species.MEDITITE, Species.MIME_JR, Species.NYMBLE ], [TrainerPoolTier.UNCOMMON]: [ Species.VOLTORB, Species.WHISMUR, Species.MEDITITE, Species.MIME_JR, Species.NYMBLE ],
[TrainerPoolTier.RARE]: [ Species.TANGELA, Species.EEVEE, Species.YANMA ], [TrainerPoolTier.RARE]: [ Species.TANGELA, Species.EEVEE, Species.YANMA ],
[TrainerPoolTier.SUPER_RARE]: [ Species.TADBULB ] [TrainerPoolTier.SUPER_RARE]: [ Species.TADBULB ]
}), }),
[TrainerType.SWIMMER]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm(TrainerType.PARASOL_LADY).setHasGenders("Swimmer Female").setHasDouble('Swimmers').setSpecialtyTypes(Type.WATER).setSpeciesFilter(s => s.isOfType(Type.WATER)), [TrainerType.SWIMMER]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm(TrainerType.PARASOL_LADY).setHasGenders('Swimmer Female').setHasDouble('Swimmers').setSpecialtyTypes(Type.WATER).setSpeciesFilter(s => s.isOfType(Type.WATER)),
[TrainerType.TWINS]: new TrainerConfig(++t).setDoubleOnly().setMoneyMultiplier(0.65).setUseSameSeedForAllMembers() [TrainerType.TWINS]: new TrainerConfig(++t).setDoubleOnly().setMoneyMultiplier(0.65).setUseSameSeedForAllMembers()
.setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_STRONG)) .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_STRONG))
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PLUSLE, Species.VOLBEAT, Species.PACHIRISU, Species.SILCOON, Species.METAPOD, Species.IGGLYBUFF, Species.PETILIL, Species.EEVEE ])) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PLUSLE, Species.VOLBEAT, Species.PACHIRISU, Species.SILCOON, Species.METAPOD, Species.IGGLYBUFF, Species.PETILIL, Species.EEVEE ]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MINUN, Species.ILLUMISE, Species.EMOLGA, Species.CASCOON, Species.KAKUNA, Species.CLEFFA, Species.COTTONEE, Species.EEVEE ], TrainerSlot.TRAINER_PARTNER)) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MINUN, Species.ILLUMISE, Species.EMOLGA, Species.CASCOON, Species.KAKUNA, Species.CLEFFA, Species.COTTONEE, Species.EEVEE ], TrainerSlot.TRAINER_PARTNER))
.setEncounterBgm(TrainerType.TWINS), .setEncounterBgm(TrainerType.TWINS),
[TrainerType.VETERAN]: new TrainerConfig(++t).setHasGenders("Veteran Female").setHasDouble('Veteran Duo').setMoneyMultiplier(2.5).setEncounterBgm(TrainerType.ACE_TRAINER).setSpeciesFilter(s => s.isOfType(Type.DRAGON)), [TrainerType.VETERAN]: new TrainerConfig(++t).setHasGenders('Veteran Female').setHasDouble('Veteran Duo').setMoneyMultiplier(2.5).setEncounterBgm(TrainerType.ACE_TRAINER).setSpeciesFilter(s => s.isOfType(Type.DRAGON)),
[TrainerType.WAITER]: new TrainerConfig(++t).setHasGenders('Waitress').setHasDouble('Restaurant Staff').setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.CLERK) [TrainerType.WAITER]: new TrainerConfig(++t).setHasGenders('Waitress').setHasDouble('Restaurant Staff').setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.CLERK)
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.CLEFFA, Species.CHATOT, Species.PANSAGE, Species.PANSEAR, Species.PANPOUR, Species.MINCCINO ], [TrainerPoolTier.COMMON]: [ Species.CLEFFA, Species.CHATOT, Species.PANSAGE, Species.PANSEAR, Species.PANPOUR, Species.MINCCINO ],
[TrainerPoolTier.UNCOMMON]: [ Species.TROPIUS, Species.PETILIL, Species.BOUNSWEET, Species.INDEEDEE ], [TrainerPoolTier.UNCOMMON]: [ Species.TROPIUS, Species.PETILIL, Species.BOUNSWEET, Species.INDEEDEE ],
[TrainerPoolTier.RARE]: [ Species.APPLIN, Species.SINISTEA, Species.POLTCHAGEIST ] [TrainerPoolTier.RARE]: [ Species.APPLIN, Species.SINISTEA, Species.POLTCHAGEIST ]
}), }),
[TrainerType.WORKER]: new TrainerConfig(++t).setHasGenders("Worker Female").setHasDouble('Workers').setEncounterBgm(TrainerType.CLERK).setMoneyMultiplier(1.7).setSpeciesFilter(s => s.isOfType(Type.ROCK) || s.isOfType(Type.STEEL)), [TrainerType.WORKER]: new TrainerConfig(++t).setHasGenders('Worker Female').setHasDouble('Workers').setEncounterBgm(TrainerType.CLERK).setMoneyMultiplier(1.7).setSpeciesFilter(s => s.isOfType(Type.ROCK) || s.isOfType(Type.STEEL)),
[TrainerType.YOUNGSTER]: new TrainerConfig(++t).setMoneyMultiplier(0.5).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders('Lass', 'lass').setHasDouble('Beginners').setPartyTemplates(trainerPartyTemplates.TWO_WEAKER) [TrainerType.YOUNGSTER]: new TrainerConfig(++t).setMoneyMultiplier(0.5).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders('Lass', 'lass').setHasDouble('Beginners').setPartyTemplates(trainerPartyTemplates.TWO_WEAKER)
.setSpeciesPools( .setSpeciesPools(
[ Species.CATERPIE, Species.WEEDLE, Species.RATTATA, Species.SENTRET, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.BIDOOF, Species.PATRAT, Species.LILLIPUP ] [ Species.CATERPIE, Species.WEEDLE, Species.RATTATA, Species.SENTRET, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.BIDOOF, Species.PATRAT, Species.LILLIPUP ]
@ -915,7 +915,7 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.BRASSIUS]: new TrainerConfig(++t).initForGymLeader([ Species.SMOLIV, Species.SHROOMISH, Species.ODDISH ], Type.GRASS), [TrainerType.BRASSIUS]: new TrainerConfig(++t).initForGymLeader([ Species.SMOLIV, Species.SHROOMISH, Species.ODDISH ], Type.GRASS),
[TrainerType.IONO]: new TrainerConfig(++t).initForGymLeader([ Species.TADBULB, Species.WATTREL, Species.VOLTORB ], Type.ELECTRIC), [TrainerType.IONO]: new TrainerConfig(++t).initForGymLeader([ Species.TADBULB, Species.WATTREL, Species.VOLTORB ], Type.ELECTRIC),
[TrainerType.KOFU]: new TrainerConfig(++t).initForGymLeader([ Species.VELUZA, Species.WIGLETT, Species.WINGULL ], Type.WATER), [TrainerType.KOFU]: new TrainerConfig(++t).initForGymLeader([ Species.VELUZA, Species.WIGLETT, Species.WINGULL ], Type.WATER),
[TrainerType.LARRY]: new TrainerConfig(++t).setName("Larry").initForGymLeader([ Species.STARLY, Species.DUNSPARCE, Species.KOMALA ], Type.NORMAL), [TrainerType.LARRY]: new TrainerConfig(++t).setName('Larry').initForGymLeader([ Species.STARLY, Species.DUNSPARCE, Species.KOMALA ], Type.NORMAL),
[TrainerType.RYME]: new TrainerConfig(++t).initForGymLeader([ Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU ], Type.GHOST), [TrainerType.RYME]: new TrainerConfig(++t).initForGymLeader([ Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU ], Type.GHOST),
[TrainerType.TULIP]: new TrainerConfig(++t).initForGymLeader([ Species.GIRAFARIG, Species.FLITTLE, Species.RALTS ], Type.PSYCHIC), [TrainerType.TULIP]: new TrainerConfig(++t).initForGymLeader([ Species.GIRAFARIG, Species.FLITTLE, Species.RALTS ], Type.PSYCHIC),
[TrainerType.GRUSHA]: new TrainerConfig(++t).initForGymLeader([ Species.CETODDLE, Species.ALOLA_VULPIX, Species.CUBCHOO ], Type.ICE), [TrainerType.GRUSHA]: new TrainerConfig(++t).initForGymLeader([ Species.CETODDLE, Species.ALOLA_VULPIX, Species.CUBCHOO ], Type.ICE),
@ -923,7 +923,7 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.LORELEI]: new TrainerConfig((t = TrainerType.LORELEI)).initForEliteFour([ Species.SLOWBRO, Species.LAPRAS, Species.DEWGONG, Species.ALOLA_SANDSLASH ], Type.ICE), [TrainerType.LORELEI]: new TrainerConfig((t = TrainerType.LORELEI)).initForEliteFour([ Species.SLOWBRO, Species.LAPRAS, Species.DEWGONG, Species.ALOLA_SANDSLASH ], Type.ICE),
[TrainerType.BRUNO]: new TrainerConfig(++t).initForEliteFour([ Species.ONIX, Species.HITMONCHAN, Species.HITMONLEE, Species.ALOLA_GOLEM ], Type.FIGHTING), [TrainerType.BRUNO]: new TrainerConfig(++t).initForEliteFour([ Species.ONIX, Species.HITMONCHAN, Species.HITMONLEE, Species.ALOLA_GOLEM ], Type.FIGHTING),
[TrainerType.AGATHA]: new TrainerConfig(++t).initForEliteFour([ Species.GENGAR, Species.ARBOK, Species.CROBAT, Species.ALOLA_MAROWAK ], Type.GHOST), [TrainerType.AGATHA]: new TrainerConfig(++t).initForEliteFour([ Species.GENGAR, Species.ARBOK, Species.CROBAT, Species.ALOLA_MAROWAK ], Type.GHOST),
[TrainerType.LANCE]: new TrainerConfig(++t).setName("Lance").initForEliteFour([ Species.DRAGONITE, Species.GYARADOS, Species.AERODACTYL, Species.ALOLA_EXEGGUTOR ], Type.DRAGON), [TrainerType.LANCE]: new TrainerConfig(++t).setName('Lance').initForEliteFour([ Species.DRAGONITE, Species.GYARADOS, Species.AERODACTYL, Species.ALOLA_EXEGGUTOR ], Type.DRAGON),
[TrainerType.WILL]: new TrainerConfig(++t).initForEliteFour([ Species.XATU, Species.JYNX, Species.SLOWBRO, Species.EXEGGUTOR ], Type.PSYCHIC), [TrainerType.WILL]: new TrainerConfig(++t).initForEliteFour([ Species.XATU, Species.JYNX, Species.SLOWBRO, Species.EXEGGUTOR ], Type.PSYCHIC),
[TrainerType.KOGA]: new TrainerConfig(++t).initForEliteFour([ Species.WEEZING, Species.VENOMOTH, Species.CROBAT, Species.TENTACRUEL ], Type.POISON), [TrainerType.KOGA]: new TrainerConfig(++t).initForEliteFour([ Species.WEEZING, Species.VENOMOTH, Species.CROBAT, Species.TENTACRUEL ], Type.POISON),
[TrainerType.KAREN]: new TrainerConfig(++t).initForEliteFour([ Species.UMBREON, Species.HONCHKROW, Species.HOUNDOOM, Species.WEAVILE ], Type.DARK), [TrainerType.KAREN]: new TrainerConfig(++t).initForEliteFour([ Species.UMBREON, Species.HONCHKROW, Species.HOUNDOOM, Species.WEAVILE ], Type.DARK),
@ -950,7 +950,7 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.KAHILI]: new TrainerConfig(++t).initForEliteFour([ Species.BRAVIARY, Species.HAWLUCHA, Species.ORICORIO, Species.TOUCANNON ], Type.FLYING), [TrainerType.KAHILI]: new TrainerConfig(++t).initForEliteFour([ Species.BRAVIARY, Species.HAWLUCHA, Species.ORICORIO, Species.TOUCANNON ], Type.FLYING),
[TrainerType.RIKA]: new TrainerConfig(++t).initForEliteFour([ Species. WHISCASH, Species.DONPHAN, Species.CAMERUPT, Species.CLODSIRE ], Type.GROUND), [TrainerType.RIKA]: new TrainerConfig(++t).initForEliteFour([ Species. WHISCASH, Species.DONPHAN, Species.CAMERUPT, Species.CLODSIRE ], Type.GROUND),
[TrainerType.POPPY]: new TrainerConfig(++t).initForEliteFour([ Species.COPPERAJAH, Species.BRONZONG, Species.CORVIKNIGHT, Species.TINKATON ], Type.STEEL), [TrainerType.POPPY]: new TrainerConfig(++t).initForEliteFour([ Species.COPPERAJAH, Species.BRONZONG, Species.CORVIKNIGHT, Species.TINKATON ], Type.STEEL),
[TrainerType.LARRY_ELITE]: new TrainerConfig(++t).setName("Larry").initForEliteFour([ Species.STARAPTOR, Species.FLAMIGO, Species.ALTARIA, Species.TROPIUS ], Type.NORMAL, Type.FLYING), [TrainerType.LARRY_ELITE]: new TrainerConfig(++t).setName('Larry').initForEliteFour([ Species.STARAPTOR, Species.FLAMIGO, Species.ALTARIA, Species.TROPIUS ], Type.NORMAL, Type.FLYING),
[TrainerType.HASSEL]: new TrainerConfig(++t).initForEliteFour([ Species.NOIVERN, Species.HAXORUS, Species.DRAGALGE, Species.BAXCALIBUR ], Type.DRAGON), [TrainerType.HASSEL]: new TrainerConfig(++t).initForEliteFour([ Species.NOIVERN, Species.HAXORUS, Species.DRAGALGE, Species.BAXCALIBUR ], Type.DRAGON),
[TrainerType.CRISPIN]: new TrainerConfig(++t).initForEliteFour([ Species.TALONFLAME, Species.CAMERUPT, Species.MAGMORTAR, Species.BLAZIKEN ], Type.FIRE), [TrainerType.CRISPIN]: new TrainerConfig(++t).initForEliteFour([ Species.TALONFLAME, Species.CAMERUPT, Species.MAGMORTAR, Species.BLAZIKEN ], Type.FIRE),
[TrainerType.AMARYS]: new TrainerConfig(++t).initForEliteFour([ Species.SKARMORY, Species.EMPOLEON, Species.SCIZOR, Species.METAGROSS ], Type.STEEL), [TrainerType.AMARYS]: new TrainerConfig(++t).initForEliteFour([ Species.SKARMORY, Species.EMPOLEON, Species.SCIZOR, Species.METAGROSS ], Type.STEEL),
@ -959,7 +959,7 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.BLUE]: new TrainerConfig((t = TrainerType.BLUE)).initForChampion([ Species.GYARADOS, Species.MEWTWO, Species.ARCANINE, Species.ALAKAZAM, Species.PIDGEOT ]).setBattleBgm('battle_kanto_champion'), [TrainerType.BLUE]: new TrainerConfig((t = TrainerType.BLUE)).initForChampion([ Species.GYARADOS, Species.MEWTWO, Species.ARCANINE, Species.ALAKAZAM, Species.PIDGEOT ]).setBattleBgm('battle_kanto_champion'),
[TrainerType.RED]: new TrainerConfig(++t).initForChampion([ Species.CHARIZARD, [ Species.LUGIA, Species.HO_OH ], Species.SNORLAX, Species.RAICHU, Species.ESPEON ]).setBattleBgm('battle_johto_champion'), [TrainerType.RED]: new TrainerConfig(++t).initForChampion([ Species.CHARIZARD, [ Species.LUGIA, Species.HO_OH ], Species.SNORLAX, Species.RAICHU, Species.ESPEON ]).setBattleBgm('battle_johto_champion'),
[TrainerType.LANCE_CHAMPION]: new TrainerConfig(++t).setName("Lance").initForChampion([ Species.DRAGONITE, Species.ZYGARDE, Species.AERODACTYL, Species.KINGDRA, Species.ALOLA_EXEGGUTOR ]).setBattleBgm('battle_johto_champion'), [TrainerType.LANCE_CHAMPION]: new TrainerConfig(++t).setName('Lance').initForChampion([ Species.DRAGONITE, Species.ZYGARDE, Species.AERODACTYL, Species.KINGDRA, Species.ALOLA_EXEGGUTOR ]).setBattleBgm('battle_johto_champion'),
[TrainerType.STEVEN]: new TrainerConfig(++t).initForChampion([ Species.METAGROSS, [ Species.DIALGA, Species.PALKIA ], Species.SKARMORY, Species.AGGRON, Species.CARBINK ]).setBattleBgm('battle_hoenn_champion'), [TrainerType.STEVEN]: new TrainerConfig(++t).initForChampion([ Species.METAGROSS, [ Species.DIALGA, Species.PALKIA ], Species.SKARMORY, Species.AGGRON, Species.CARBINK ]).setBattleBgm('battle_hoenn_champion'),
[TrainerType.WALLACE]: new TrainerConfig(++t).initForChampion([ Species.MILOTIC, Species.KYOGRE, Species.WHISCASH, Species.WALREIN, Species.LUDICOLO ]).setBattleBgm('battle_hoenn_champion'), [TrainerType.WALLACE]: new TrainerConfig(++t).initForChampion([ Species.MILOTIC, Species.KYOGRE, Species.WHISCASH, Species.WALREIN, Species.LUDICOLO ]).setBattleBgm('battle_hoenn_champion'),
[TrainerType.CYNTHIA]: new TrainerConfig(++t).initForChampion([ Species.SPIRITOMB, Species.GIRATINA, Species.GARCHOMP, Species.MILOTIC, Species.LUCARIO, Species.TOGEKISS ]).setBattleBgm('battle_sinnoh_champion'), [TrainerType.CYNTHIA]: new TrainerConfig(++t).initForChampion([ Species.SPIRITOMB, Species.GIRATINA, Species.GARCHOMP, Species.MILOTIC, Species.LUCARIO, Species.TOGEKISS ]).setBattleBgm('battle_sinnoh_champion'),

View File

@ -1,5 +1,5 @@
import { TrainerType } from "./enums/trainer-type"; import { TrainerType } from './enums/trainer-type';
import * as Utils from "../utils"; import * as Utils from '../utils';
class TrainerNameConfig { class TrainerNameConfig {
public urls: string[]; public urls: string[];
@ -71,54 +71,54 @@ const trainerNameConfigs: TrainerNameConfigs = {
}; };
export const trainerNamePools = { export const trainerNamePools = {
[TrainerType.ACE_TRAINER]: [["Aaron","Allen","Blake","Brian","Gaven","Jake","Kevin","Mike","Nick","Paul","Ryan","Sean","Darin","Albert","Berke","Clyde","Edgar","George","Leroy","Owen","Parker","Randall","Ruben","Samuel","Vincent","Warren","Wilton","Zane","Alfred","Braxton","Felix","Gerald","Jonathan","Leonel","Marcel","Mitchell","Quincy","Roderick","Colby","Rolando","Yuji","Abel","Anton","Arthur","Cesar","Dalton","Dennis","Ernest","Garrett","Graham","Henry","Isaiah","Jonah","Jose","Keenan","Micah","Omar","Quinn","Rodolfo","Saul","Sergio","Skylar","Stefan","Zachery","Alton","Arabella","Bonita","Cal","Cody","French","Kobe","Paulo","Shaye","Austin","Beckett","Charlie","Corky","David","Dwayne","Elmer","Jesse","Jared","Johan","Jordan","Kipp","Lou","Terry","Tom","Webster","Billy","Doyle","Enzio","Geoff","Grant","Kelsey","Miguel","Pierce","Ray","Santino","Shel","Adelbert","Bence","Emil","Evan","Mathis","Maxim","Neil","Rico","Robbie","Theo","Viktor","Benedict","Cornelius","Hisato","Leopold","Neville","Vito","Chase","Cole","Hiroshi","Jackson","Jim","Kekoa","Makana","Yuki","Elwood","Seth","Alvin","Arjun","Arnold","Cameron","Carl","Carlton","Christopher","Dave","Dax","Dominic","Edmund","Finn","Fred","Garret","Grayson","Jace","Jaxson","Jay","Jirard","Johnson","Kayden","Kite","Louis","Mac","Marty","Percy","Raymond","Ronnie","Satch","Tim","Zach","Conner","Vince","Bedro","Boda","Botan","Daras","Dury","Herton","Rewn","Stum","Tock","Trilo","Berki","Cruik","Dazon","Desid","Dillot","Farfin","Forgon","Hebel","Morfon","Moril","Shadd","Vanhub","Bardo","Carben","Degin","Gorps","Klept","Lask","Malex","Mopar","Niled","Noxon","Teslor","Tetil"],["Beth","Carol","Cybil","Emma","Fran","Gwen","Irene","Jenn","Joyce","Kate","Kelly","Lois","Lola","Megan","Quinn","Reena","Cara","Alexa","Brooke","Caroline","Elaine","Hope","Jennifer","Jody","Julie","Lori","Mary","Michelle","Shannon","Wendy","Alexia","Alicia","Athena","Carolina","Cristin","Darcy","Dianne","Halle","Jazmyn","Katelynn","Keira","Marley","Allyson","Kathleen","Naomi","Alyssa","Ariana","Brandi","Breanna","Brenda","Brenna","Catherine","Clarice","Dana","Deanna","Destiny","Jamie","Jasmin","Kassandra","Laura","Maria","Mariah","Maya","Meagan","Mikayla","Monique","Natasha","Olivia","Sandra","Savannah","Sydney","Moira","Piper","Salma","Allison","Beverly","Cathy","Cheyenne","Clara","Dara","Eileen","Glinda","Junko","Lena","Lucille","Mariana","Olwen","Shanta","Stella","Angi","Belle","Chandra","Cora","Eve","Jacqueline","Jeanne","Juliet","Kathrine","Layla","Lucca","Melina","Miki","Nina","Sable","Shelly","Summer","Trish","Vicki","Alanza","Cordelia","Hilde","Imelda","Michele","Mireille","Claudia","Constance","Harriet","Honor","Melba","Portia","Alexis","Angela","Karla","Lindsey","Tori","Sheri","Jada","Kailee","Amanda","Annie","Kindra","Kyla","Sofia","Yvette","Becky","Flora","Gloria","Buna","Ferda","Lehan","Liqui","Lomen","Neira","Atilo","Detta","Gilly","Gosney","Levens","Moden","Rask","Rateis","Rosno","Tynan","Veron","Zoel","Cida","Dibsin","Dodin","Ebson","Equin","Flostin","Gabsen","Halsion","Hileon","Quelor","Rapeel","Roze","Tensin"]], [TrainerType.ACE_TRAINER]: [['Aaron','Allen','Blake','Brian','Gaven','Jake','Kevin','Mike','Nick','Paul','Ryan','Sean','Darin','Albert','Berke','Clyde','Edgar','George','Leroy','Owen','Parker','Randall','Ruben','Samuel','Vincent','Warren','Wilton','Zane','Alfred','Braxton','Felix','Gerald','Jonathan','Leonel','Marcel','Mitchell','Quincy','Roderick','Colby','Rolando','Yuji','Abel','Anton','Arthur','Cesar','Dalton','Dennis','Ernest','Garrett','Graham','Henry','Isaiah','Jonah','Jose','Keenan','Micah','Omar','Quinn','Rodolfo','Saul','Sergio','Skylar','Stefan','Zachery','Alton','Arabella','Bonita','Cal','Cody','French','Kobe','Paulo','Shaye','Austin','Beckett','Charlie','Corky','David','Dwayne','Elmer','Jesse','Jared','Johan','Jordan','Kipp','Lou','Terry','Tom','Webster','Billy','Doyle','Enzio','Geoff','Grant','Kelsey','Miguel','Pierce','Ray','Santino','Shel','Adelbert','Bence','Emil','Evan','Mathis','Maxim','Neil','Rico','Robbie','Theo','Viktor','Benedict','Cornelius','Hisato','Leopold','Neville','Vito','Chase','Cole','Hiroshi','Jackson','Jim','Kekoa','Makana','Yuki','Elwood','Seth','Alvin','Arjun','Arnold','Cameron','Carl','Carlton','Christopher','Dave','Dax','Dominic','Edmund','Finn','Fred','Garret','Grayson','Jace','Jaxson','Jay','Jirard','Johnson','Kayden','Kite','Louis','Mac','Marty','Percy','Raymond','Ronnie','Satch','Tim','Zach','Conner','Vince','Bedro','Boda','Botan','Daras','Dury','Herton','Rewn','Stum','Tock','Trilo','Berki','Cruik','Dazon','Desid','Dillot','Farfin','Forgon','Hebel','Morfon','Moril','Shadd','Vanhub','Bardo','Carben','Degin','Gorps','Klept','Lask','Malex','Mopar','Niled','Noxon','Teslor','Tetil'],['Beth','Carol','Cybil','Emma','Fran','Gwen','Irene','Jenn','Joyce','Kate','Kelly','Lois','Lola','Megan','Quinn','Reena','Cara','Alexa','Brooke','Caroline','Elaine','Hope','Jennifer','Jody','Julie','Lori','Mary','Michelle','Shannon','Wendy','Alexia','Alicia','Athena','Carolina','Cristin','Darcy','Dianne','Halle','Jazmyn','Katelynn','Keira','Marley','Allyson','Kathleen','Naomi','Alyssa','Ariana','Brandi','Breanna','Brenda','Brenna','Catherine','Clarice','Dana','Deanna','Destiny','Jamie','Jasmin','Kassandra','Laura','Maria','Mariah','Maya','Meagan','Mikayla','Monique','Natasha','Olivia','Sandra','Savannah','Sydney','Moira','Piper','Salma','Allison','Beverly','Cathy','Cheyenne','Clara','Dara','Eileen','Glinda','Junko','Lena','Lucille','Mariana','Olwen','Shanta','Stella','Angi','Belle','Chandra','Cora','Eve','Jacqueline','Jeanne','Juliet','Kathrine','Layla','Lucca','Melina','Miki','Nina','Sable','Shelly','Summer','Trish','Vicki','Alanza','Cordelia','Hilde','Imelda','Michele','Mireille','Claudia','Constance','Harriet','Honor','Melba','Portia','Alexis','Angela','Karla','Lindsey','Tori','Sheri','Jada','Kailee','Amanda','Annie','Kindra','Kyla','Sofia','Yvette','Becky','Flora','Gloria','Buna','Ferda','Lehan','Liqui','Lomen','Neira','Atilo','Detta','Gilly','Gosney','Levens','Moden','Rask','Rateis','Rosno','Tynan','Veron','Zoel','Cida','Dibsin','Dodin','Ebson','Equin','Flostin','Gabsen','Halsion','Hileon','Quelor','Rapeel','Roze','Tensin']],
[TrainerType.ARTIST]: [["Ismael","William","Horton","Pierre","Zach","Gough","Salvador","Vincent","Duncan"],["Georgia"]], [TrainerType.ARTIST]: [['Ismael','William','Horton','Pierre','Zach','Gough','Salvador','Vincent','Duncan'],['Georgia']],
[TrainerType.BACKERS]: [["Alf & Fred","Hawk & Dar","Joe & Ross","Les & Web","Masa & Yas","Stu & Art"],["Ai & Ciel","Ami & Eira","Cam & Abby","Fey & Sue","Kat & Phae","Kay & Ali","Ava & Aya","Cleo & Rio","May & Mal"]], [TrainerType.BACKERS]: [['Alf & Fred','Hawk & Dar','Joe & Ross','Les & Web','Masa & Yas','Stu & Art'],['Ai & Ciel','Ami & Eira','Cam & Abby','Fey & Sue','Kat & Phae','Kay & Ali','Ava & Aya','Cleo & Rio','May & Mal']],
[TrainerType.BACKPACKER]: [["Alexander","Carlos","Herman","Jerome","Keane","Kelsey","Kiyo","Michael","Nate","Peter","Sam","Stephen","Talon","Terrance","Toru","Waylon","Boone","Clifford","Ivan","Kendall","Lowell","Randall","Reece","Roland","Shane","Walt","Farid","Heike","Joren","Lane","Roderick","Darnell","Deon","Emory","Graeme","Grayson","Ashley","Mikiko","Kiana","Perdy","Maria","Yuho","Peren","Barbara","Diane","Ruth","Aitor","Alex","Arturo","Asier","Jaime","Jonathan","Julio","Kevin","Kosuke","Lander","Markel","Mateo","Nil","Pau","Samuel"],["Anna","Corin","Elaine","Emi","Jill","Kumiko","Liz","Lois","Lora","Molly","Patty","Ruth","Vicki","Annie","Blossom","Clara","Eileen","Mae","Myra","Rachel","Tami"]], [TrainerType.BACKPACKER]: [['Alexander','Carlos','Herman','Jerome','Keane','Kelsey','Kiyo','Michael','Nate','Peter','Sam','Stephen','Talon','Terrance','Toru','Waylon','Boone','Clifford','Ivan','Kendall','Lowell','Randall','Reece','Roland','Shane','Walt','Farid','Heike','Joren','Lane','Roderick','Darnell','Deon','Emory','Graeme','Grayson','Ashley','Mikiko','Kiana','Perdy','Maria','Yuho','Peren','Barbara','Diane','Ruth','Aitor','Alex','Arturo','Asier','Jaime','Jonathan','Julio','Kevin','Kosuke','Lander','Markel','Mateo','Nil','Pau','Samuel'],['Anna','Corin','Elaine','Emi','Jill','Kumiko','Liz','Lois','Lora','Molly','Patty','Ruth','Vicki','Annie','Blossom','Clara','Eileen','Mae','Myra','Rachel','Tami']],
[TrainerType.BAKER]: ["Chris","Jenn","Lilly"], [TrainerType.BAKER]: ['Chris','Jenn','Lilly'],
[TrainerType.BEAUTY]: ["Cassie","Julia","Olivia","Samantha","Valerie","Victoria","Bridget","Connie","Jessica","Johanna","Melissa","Sheila","Shirley","Tiffany","Namiko","Thalia","Grace","Lola","Lori","Maura","Tamia","Cyndy","Devon","Gabriella","Harley","Lindsay","Nicola","Callie","Charlotte","Kassandra","December","Fleming","Nikola","Aimee","Anais","Brigitte","Cassandra","Andrea","Brittney","Carolyn","Krystal","Alexis","Alice","Aina","Anya","Arianna","Aubrey","Beverly","Camille","Beauty","Evette","Hansol","Haruka","Jill","Jo","Lana","Lois","Lucy","Mai","Nickie","Nicole","Prita","Rose","Shelly","Suzy","Tessa","Anita","Alissa","Rita","Cudsy","Eloff","Miru","Minot","Nevah","Niven","Ogoin"], [TrainerType.BEAUTY]: ['Cassie','Julia','Olivia','Samantha','Valerie','Victoria','Bridget','Connie','Jessica','Johanna','Melissa','Sheila','Shirley','Tiffany','Namiko','Thalia','Grace','Lola','Lori','Maura','Tamia','Cyndy','Devon','Gabriella','Harley','Lindsay','Nicola','Callie','Charlotte','Kassandra','December','Fleming','Nikola','Aimee','Anais','Brigitte','Cassandra','Andrea','Brittney','Carolyn','Krystal','Alexis','Alice','Aina','Anya','Arianna','Aubrey','Beverly','Camille','Beauty','Evette','Hansol','Haruka','Jill','Jo','Lana','Lois','Lucy','Mai','Nickie','Nicole','Prita','Rose','Shelly','Suzy','Tessa','Anita','Alissa','Rita','Cudsy','Eloff','Miru','Minot','Nevah','Niven','Ogoin'],
[TrainerType.BIKER]: ["Charles","Dwayne","Glenn","Harris","Joel","Riley","Zeke","Alex","Billy","Ernest","Gerald","Hideo","Isaac","Jared","Jaren","Jaxon","Jordy","Lao","Lukas","Malik","Nikolas","Ricardo","Ruben","Virgil","William","Aiden","Dale","Dan","Jacob","Markey","Reese","Teddy","Theron","Jeremy","Morgann","Phillip","Philip","Stanley","Dillon"], [TrainerType.BIKER]: ['Charles','Dwayne','Glenn','Harris','Joel','Riley','Zeke','Alex','Billy','Ernest','Gerald','Hideo','Isaac','Jared','Jaren','Jaxon','Jordy','Lao','Lukas','Malik','Nikolas','Ricardo','Ruben','Virgil','William','Aiden','Dale','Dan','Jacob','Markey','Reese','Teddy','Theron','Jeremy','Morgann','Phillip','Philip','Stanley','Dillon'],
[TrainerType.BLACK_BELT]: [["Kenji","Lao","Lung","Nob","Wai","Yoshi","Atsushi","Daisuke","Hideki","Hitoshi","Kiyo","Koichi","Koji","Yuji","Cristian","Rhett","Takao","Theodore","Zander","Aaron","Hugh","Mike","Nicolas","Shea","Takashi","Adam","Carl","Colby","Darren","David","Davon","Derek","Eddie","Gregory","Griffin","Jarrett","Jeffery","Kendal","Kyle","Luke","Miles","Nathaniel","Philip","Rafael","Ray","Ricky","Sean","Willie","Ander","Manford","Benjamin","Corey","Edward","Grant","Jay","Kendrew","Kentaro","Ryder","Teppei","Thomas","Tyrone","Andrey","Donny","Drago","Gordon","Grigor","Jeriel","Kenneth","Martell","Mathis","Rich","Rocky","Rodrigo","Wesley","Zachery","Alonzo","Cadoc","Gunnar","Igor","Killian","Markus","Ricardo","Yanis","Banting","Clayton","Duane","Earl","Greg","Roy","Terry","Tracy","Walter","Alvaro","Curtis","Francis","Ross","Brice","Cheng","Dudley","Eric","Kano","Masahiro","Randy","Ryuji","Steve","Tadashi","Wong","Yuen","Brian","Carter","Reece","Nick","Yang"],["Cora","Cyndy","Jill","Laura","Sadie","Tessa","Vivian","Aisha","Callie","Danielle","Helene","Jocelyn","Lilith","Paula","Reyna","Helen","Kelsey","Tyler","Amy","Chandra","Hillary","Janie","Lee","Maggie","Mikiko","Miriam","Sharon","Susie","Xiao","Alize","Azra","Brenda","Chalina","Chan","Glinda","Maki","Tia","Tiffany","Wendy","Andrea","Gabrielle","Gerardine","Hailey","Hedvig","Justine","Kinsey","Sigrid","Veronique","Tess"]], [TrainerType.BLACK_BELT]: [['Kenji','Lao','Lung','Nob','Wai','Yoshi','Atsushi','Daisuke','Hideki','Hitoshi','Kiyo','Koichi','Koji','Yuji','Cristian','Rhett','Takao','Theodore','Zander','Aaron','Hugh','Mike','Nicolas','Shea','Takashi','Adam','Carl','Colby','Darren','David','Davon','Derek','Eddie','Gregory','Griffin','Jarrett','Jeffery','Kendal','Kyle','Luke','Miles','Nathaniel','Philip','Rafael','Ray','Ricky','Sean','Willie','Ander','Manford','Benjamin','Corey','Edward','Grant','Jay','Kendrew','Kentaro','Ryder','Teppei','Thomas','Tyrone','Andrey','Donny','Drago','Gordon','Grigor','Jeriel','Kenneth','Martell','Mathis','Rich','Rocky','Rodrigo','Wesley','Zachery','Alonzo','Cadoc','Gunnar','Igor','Killian','Markus','Ricardo','Yanis','Banting','Clayton','Duane','Earl','Greg','Roy','Terry','Tracy','Walter','Alvaro','Curtis','Francis','Ross','Brice','Cheng','Dudley','Eric','Kano','Masahiro','Randy','Ryuji','Steve','Tadashi','Wong','Yuen','Brian','Carter','Reece','Nick','Yang'],['Cora','Cyndy','Jill','Laura','Sadie','Tessa','Vivian','Aisha','Callie','Danielle','Helene','Jocelyn','Lilith','Paula','Reyna','Helen','Kelsey','Tyler','Amy','Chandra','Hillary','Janie','Lee','Maggie','Mikiko','Miriam','Sharon','Susie','Xiao','Alize','Azra','Brenda','Chalina','Chan','Glinda','Maki','Tia','Tiffany','Wendy','Andrea','Gabrielle','Gerardine','Hailey','Hedvig','Justine','Kinsey','Sigrid','Veronique','Tess']],
[TrainerType.BREEDER]: [["Isaac","Myles","Salvadore","Albert","Kahlil","Eustace","Galen","Owen","Addison","Marcus","Foster","Cory","Glenn","Jay","Wesley","William","Adrian","Bradley","Jaime"],["Allison","Alize","Bethany","Lily","Lydia","Gabrielle","Jayden","Pat","Veronica","Amber","Jennifer","Kaylee","Adelaide","Brooke","Ethel","April","Irene","Magnolia","Amala","Mercy","Amanda","Ikue","Savannah","Yuka","Chloe","Debra","Denise","Elena"]], [TrainerType.BREEDER]: [['Isaac','Myles','Salvadore','Albert','Kahlil','Eustace','Galen','Owen','Addison','Marcus','Foster','Cory','Glenn','Jay','Wesley','William','Adrian','Bradley','Jaime'],['Allison','Alize','Bethany','Lily','Lydia','Gabrielle','Jayden','Pat','Veronica','Amber','Jennifer','Kaylee','Adelaide','Brooke','Ethel','April','Irene','Magnolia','Amala','Mercy','Amanda','Ikue','Savannah','Yuka','Chloe','Debra','Denise','Elena']],
[TrainerType.CLERK]: [["Chaz","Clemens","Doug","Fredric","Ivan","Isaac","Nelson","Wade","Warren","Augustin","Gilligan","Cody","Jeremy","Shane","Dugal","Royce","Ronald"],["Alberta","Ingrid","Katie","Piper","Trisha","Wren","Britney","Lana","Jessica","Kristen","Michelle","Gabrielle"]], [TrainerType.CLERK]: [['Chaz','Clemens','Doug','Fredric','Ivan','Isaac','Nelson','Wade','Warren','Augustin','Gilligan','Cody','Jeremy','Shane','Dugal','Royce','Ronald'],['Alberta','Ingrid','Katie','Piper','Trisha','Wren','Britney','Lana','Jessica','Kristen','Michelle','Gabrielle']],
[TrainerType.CYCLIST]: [["Axel","James","John","Ryan","Hector","Jeremiah"],["Kayla","Megan","Nicole","Rachel","Krissa","Adelaide"]], [TrainerType.CYCLIST]: [['Axel','James','John','Ryan','Hector','Jeremiah'],['Kayla','Megan','Nicole','Rachel','Krissa','Adelaide']],
[TrainerType.DANCER]: ["Brian","Davey","Dirk","Edmond","Mickey","Raymond","Cara","Julia","Maika","Mireille","Ronda","Zoe"], [TrainerType.DANCER]: ['Brian','Davey','Dirk','Edmond','Mickey','Raymond','Cara','Julia','Maika','Mireille','Ronda','Zoe'],
[TrainerType.DEPOT_AGENT]: ["Josh","Hank","Vincent"], [TrainerType.DEPOT_AGENT]: ['Josh','Hank','Vincent'],
[TrainerType.DOCTOR]: [["Hank","Jerry","Jules","Logan","Wayne","Braid","Derek","Heath","Julius","Kit","Graham"],["Kirsten","Sachiko","Shery","Carol","Dixie","Mariah"]], [TrainerType.DOCTOR]: [['Hank','Jerry','Jules','Logan','Wayne','Braid','Derek','Heath','Julius','Kit','Graham'],['Kirsten','Sachiko','Shery','Carol','Dixie','Mariah']],
[TrainerType.FISHERMAN]: ["Andre","Arnold","Barney","Chris","Edgar","Henry","Jonah","Justin","Kyle","Martin","Marvin","Ralph","Raymond","Scott","Stephen","Wilton","Tully","Andrew","Barny","Carter","Claude","Dale","Elliot","Eugene","Ivan","Ned","Nolan","Roger","Ronald","Wade","Wayne","Darian","Kai","Chip","Hank","Kaden","Tommy","Tylor","Alec","Brett","Cameron","Cody","Cole","Cory","Erick","George","Joseph","Juan","Kenneth","Luc","Miguel","Travis","Walter","Zachary","Josh","Gideon","Kyler","Liam","Murphy","Bruce","Damon","Devon","Hubert","Jones","Lydon","Mick","Pete","Sean","Sid","Vince","Bucky","Dean","Eustace","Kenzo","Leroy","Mack","Ryder","Ewan","Finn","Murray","Seward","Shad","Wharton","Finley","Fisher","Fisk","River","Sheaffer","Timin","Carl","Ernest","Hal","Herbert","Hisato","Mike","Vernon","Harriet","Marina","Chase"], [TrainerType.FISHERMAN]: ['Andre','Arnold','Barney','Chris','Edgar','Henry','Jonah','Justin','Kyle','Martin','Marvin','Ralph','Raymond','Scott','Stephen','Wilton','Tully','Andrew','Barny','Carter','Claude','Dale','Elliot','Eugene','Ivan','Ned','Nolan','Roger','Ronald','Wade','Wayne','Darian','Kai','Chip','Hank','Kaden','Tommy','Tylor','Alec','Brett','Cameron','Cody','Cole','Cory','Erick','George','Joseph','Juan','Kenneth','Luc','Miguel','Travis','Walter','Zachary','Josh','Gideon','Kyler','Liam','Murphy','Bruce','Damon','Devon','Hubert','Jones','Lydon','Mick','Pete','Sean','Sid','Vince','Bucky','Dean','Eustace','Kenzo','Leroy','Mack','Ryder','Ewan','Finn','Murray','Seward','Shad','Wharton','Finley','Fisher','Fisk','River','Sheaffer','Timin','Carl','Ernest','Hal','Herbert','Hisato','Mike','Vernon','Harriet','Marina','Chase'],
[TrainerType.GUITARIST]: ["Anna","Beverly","January","Tina","Alicia","Claudia","Julia","Lidia","Mireia","Noelia","Sara","Sheila","Tatiana"], [TrainerType.GUITARIST]: ['Anna','Beverly','January','Tina','Alicia','Claudia','Julia','Lidia','Mireia','Noelia','Sara','Sheila','Tatiana'],
[TrainerType.HARLEQUIN]: ["Charley","Ian","Jack","Kerry","Louis","Pat","Paul","Rick","Anders","Clarence","Gary"], [TrainerType.HARLEQUIN]: ['Charley','Ian','Jack','Kerry','Louis','Pat','Paul','Rick','Anders','Clarence','Gary'],
[TrainerType.HIKER]: ["Anthony","Bailey","Benjamin","Daniel","Erik","Jim","Kenny","Leonard","Michael","Parry","Phillip","Russell","Sidney","Tim","Timothy","Alan","Brice","Clark","Eric","Lenny","Lucas","Mike","Trent","Devan","Eli","Marc","Sawyer","Allen","Daryl","Dudley","Earl","Franklin","Jeremy","Marcos","Nob","Oliver","Wayne","Alexander","Damon","Jonathan","Justin","Kevin","Lorenzo","Louis","Maurice","Nicholas","Reginald","Robert","Theodore","Bruce","Clarke","Devin","Dwight","Edwin","Eoin","Noland","Russel","Andy","Bret","Darrell","Gene","Hardy","Hugh","Jebediah","Jeremiah","Kit","Neil","Terrell","Don","Doug","Hunter","Jared","Jerome","Keith","Manuel","Markus","Otto","Shelby","Stephen","Teppei","Tobias","Wade","Zaiem","Aaron","Alain","Bergin","Bernard","Brent","Corwin","Craig","Delmon","Dunstan","Orestes","Ross","Davian","Calhoun","David","Gabriel","Ryan","Thomas","Travis","Zachary","Anuhea","Barnaby","Claus","Collin","Colson","Dexter","Dillan","Eugine","Farkas","Hisato","Julius","Kenji","Irwin","Lionel","Paul","Richter","Valentino","Donald","Douglas","Kevyn","Angela","Carla","Celia","Daniela","Estela","Fatima","Helena","Leire","Lucia","Luna","Manuela","Mar","Marina","Miyu","Nancy","Nerea","Paula","Rocio","Yanira","Chester"], [TrainerType.HIKER]: ['Anthony','Bailey','Benjamin','Daniel','Erik','Jim','Kenny','Leonard','Michael','Parry','Phillip','Russell','Sidney','Tim','Timothy','Alan','Brice','Clark','Eric','Lenny','Lucas','Mike','Trent','Devan','Eli','Marc','Sawyer','Allen','Daryl','Dudley','Earl','Franklin','Jeremy','Marcos','Nob','Oliver','Wayne','Alexander','Damon','Jonathan','Justin','Kevin','Lorenzo','Louis','Maurice','Nicholas','Reginald','Robert','Theodore','Bruce','Clarke','Devin','Dwight','Edwin','Eoin','Noland','Russel','Andy','Bret','Darrell','Gene','Hardy','Hugh','Jebediah','Jeremiah','Kit','Neil','Terrell','Don','Doug','Hunter','Jared','Jerome','Keith','Manuel','Markus','Otto','Shelby','Stephen','Teppei','Tobias','Wade','Zaiem','Aaron','Alain','Bergin','Bernard','Brent','Corwin','Craig','Delmon','Dunstan','Orestes','Ross','Davian','Calhoun','David','Gabriel','Ryan','Thomas','Travis','Zachary','Anuhea','Barnaby','Claus','Collin','Colson','Dexter','Dillan','Eugine','Farkas','Hisato','Julius','Kenji','Irwin','Lionel','Paul','Richter','Valentino','Donald','Douglas','Kevyn','Angela','Carla','Celia','Daniela','Estela','Fatima','Helena','Leire','Lucia','Luna','Manuela','Mar','Marina','Miyu','Nancy','Nerea','Paula','Rocio','Yanira','Chester'],
[TrainerType.HOOLIGANS]: ["Jim & Cas","Rob & Sal"], [TrainerType.HOOLIGANS]: ['Jim & Cas','Rob & Sal'],
[TrainerType.HOOPSTER]: ["Bobby","John","Lamarcus","Derrick","Nicolas"], [TrainerType.HOOPSTER]: ['Bobby','John','Lamarcus','Derrick','Nicolas'],
[TrainerType.INFIELDER]: ["Alex","Connor","Todd"], [TrainerType.INFIELDER]: ['Alex','Connor','Todd'],
[TrainerType.JANITOR]: ["Caleb","Geoff","Brady","Felix","Orville","Melvin","Shawn"], [TrainerType.JANITOR]: ['Caleb','Geoff','Brady','Felix','Orville','Melvin','Shawn'],
[TrainerType.LINEBACKER]: ["Bob","Dan","Jonah"], [TrainerType.LINEBACKER]: ['Bob','Dan','Jonah'],
[TrainerType.MAID]: ["Belinda","Sophie","Emily","Elena","Clare","Alica","Tanya","Tammy"], [TrainerType.MAID]: ['Belinda','Sophie','Emily','Elena','Clare','Alica','Tanya','Tammy'],
[TrainerType.MUSICIAN]: ["Boris","Preston","Charles","Clyde","Vincent","Dalton","Kirk","Shawn","Fabian","Fernando","Joseph","Marcos","Arturo","Jerry","Lonnie","Tony"], [TrainerType.MUSICIAN]: ['Boris','Preston','Charles','Clyde','Vincent','Dalton','Kirk','Shawn','Fabian','Fernando','Joseph','Marcos','Arturo','Jerry','Lonnie','Tony'],
[TrainerType.NURSERY_AIDE]: ["Autumn","Briana","Leah","Miho","Ethel","Hollie","Ilse","June","Kimya","Rosalyn"], [TrainerType.NURSERY_AIDE]: ['Autumn','Briana','Leah','Miho','Ethel','Hollie','Ilse','June','Kimya','Rosalyn'],
[TrainerType.OFFICER]: ["Dirk","Keith","Alex","Bobby","Caleb","Danny","Dylan","Thomas","Daniel","Jeff","Braven","Dell","Neagle","Haruki","Mitchell","Raymond"], [TrainerType.OFFICER]: ['Dirk','Keith','Alex','Bobby','Caleb','Danny','Dylan','Thomas','Daniel','Jeff','Braven','Dell','Neagle','Haruki','Mitchell','Raymond'],
[TrainerType.PARASOL_LADY]: ["Angelica","Clarissa","Madeline","Akari","Annabell","Kayley","Rachel","Alexa","Sabrina","April","Gwyneth","Laura","Lumi","Mariah","Melita","Nicole","Tihana","Ingrid","Tyra"], [TrainerType.PARASOL_LADY]: ['Angelica','Clarissa','Madeline','Akari','Annabell','Kayley','Rachel','Alexa','Sabrina','April','Gwyneth','Laura','Lumi','Mariah','Melita','Nicole','Tihana','Ingrid','Tyra'],
[TrainerType.PILOT]: ["Chase","Leonard","Ted","Elron","Ewing","Flynn","Winslow"], [TrainerType.PILOT]: ['Chase','Leonard','Ted','Elron','Ewing','Flynn','Winslow'],
[TrainerType.POKEFAN]: [["Alex","Allan","Brandon","Carter","Colin","Derek","Jeremy","Joshua","Rex","Robert","Trevor","William","Colton","Miguel","Francisco","Kaleb","Leonard","Boone","Elliot","Jude","Norbert","Corey","Gabe","Baxter"],["Beverly","Georgia","Jaime","Ruth","Isabel","Marissa","Vanessa","Annika","Bethany","Kimberly","Meredith","Rebekah","Eleanor","Darcy","Lydia","Sachiko","Abigail","Agnes","Lydie","Roisin","Tara","Carmen","Janet"]], [TrainerType.POKEFAN]: [['Alex','Allan','Brandon','Carter','Colin','Derek','Jeremy','Joshua','Rex','Robert','Trevor','William','Colton','Miguel','Francisco','Kaleb','Leonard','Boone','Elliot','Jude','Norbert','Corey','Gabe','Baxter'],['Beverly','Georgia','Jaime','Ruth','Isabel','Marissa','Vanessa','Annika','Bethany','Kimberly','Meredith','Rebekah','Eleanor','Darcy','Lydia','Sachiko','Abigail','Agnes','Lydie','Roisin','Tara','Carmen','Janet']],
[TrainerType.PRESCHOOLER]: [["Billy","Doyle","Evan","Homer","Tully","Albert","Buster","Greg","Ike","Jojo","Tyrone","Adrian","Oliver","Hayden","Hunter","Kaleb","Liam","Dylan"],["Juliet","Mia","Sarah","Wendy","Winter","Chrissy","Eva","Lin","Samantha","Ella","Lily","Natalie","Ailey","Hannah","Malia","Kindra","Nancy"]], [TrainerType.PRESCHOOLER]: [['Billy','Doyle','Evan','Homer','Tully','Albert','Buster','Greg','Ike','Jojo','Tyrone','Adrian','Oliver','Hayden','Hunter','Kaleb','Liam','Dylan'],['Juliet','Mia','Sarah','Wendy','Winter','Chrissy','Eva','Lin','Samantha','Ella','Lily','Natalie','Ailey','Hannah','Malia','Kindra','Nancy']],
[TrainerType.PSYCHIC]: [["Fidel","Franklin","Gilbert","Greg","Herman","Jared","Mark","Nathan","Norman","Phil","Richard","Rodney","Cameron","Edward","Fritz","Joshua","Preston","Virgil","William","Alvaro","Blake","Cedric","Keenan","Nicholas","Dario","Johan","Lorenzo","Tyron","Bryce","Corbin","Deandre","Elijah","Kody","Landon","Maxwell","Mitchell","Sterling","Eli","Nelson","Vernon","Gaven","Gerard","Low","Micki","Perry","Rudolf","Tommy","Al","Nandor","Tully","Arthur","Emanuel","Franz","Harry","Paschal","Robert","Sayid","Angelo","Anton","Arin","Avery","Danny","Frasier","Harrison","Jaime","Ross","Rui","Vlad","Mason"],["Alexis","Hannah","Jacki","Jaclyn","Kayla","Maura","Samantha","Alix","Brandi","Edie","Macey","Mariella","Marlene","Laura","Rodette","Abigail","Brittney","Chelsey","Daisy","Desiree","Kendra","Lindsey","Rachael","Valencia","Belle","Cybil","Doreen","Dua","Future","Lin","Madhu","Alia","Ena","Joyce","Lynette","Olesia","Sarah"]], [TrainerType.PSYCHIC]: [['Fidel','Franklin','Gilbert','Greg','Herman','Jared','Mark','Nathan','Norman','Phil','Richard','Rodney','Cameron','Edward','Fritz','Joshua','Preston','Virgil','William','Alvaro','Blake','Cedric','Keenan','Nicholas','Dario','Johan','Lorenzo','Tyron','Bryce','Corbin','Deandre','Elijah','Kody','Landon','Maxwell','Mitchell','Sterling','Eli','Nelson','Vernon','Gaven','Gerard','Low','Micki','Perry','Rudolf','Tommy','Al','Nandor','Tully','Arthur','Emanuel','Franz','Harry','Paschal','Robert','Sayid','Angelo','Anton','Arin','Avery','Danny','Frasier','Harrison','Jaime','Ross','Rui','Vlad','Mason'],['Alexis','Hannah','Jacki','Jaclyn','Kayla','Maura','Samantha','Alix','Brandi','Edie','Macey','Mariella','Marlene','Laura','Rodette','Abigail','Brittney','Chelsey','Daisy','Desiree','Kendra','Lindsey','Rachael','Valencia','Belle','Cybil','Doreen','Dua','Future','Lin','Madhu','Alia','Ena','Joyce','Lynette','Olesia','Sarah']],
[TrainerType.RANGER]: [["Carlos","Jackson","Sebastian","Gav","Lorenzo","Logan","Nicolas","Trenton","Deshawn","Dwayne","Jeffery","Kyler","Taylor","Alain","Claude","Crofton","Forrest","Harry","Jaden","Keith","Lewis","Miguel","Pedro","Ralph","Richard","Bret","Daryl","Eddie","Johan","Leaf","Louis","Maxwell","Parker","Rick","Steve","Bjorn","Chaise","Dean","Lee","Maurice","Nash","Ralf","Reed","Shinobu","Silas"],["Catherine","Jenna","Sophia","Merdith","Nora","Beth","Chelsea","Katelyn","Madeline","Allison","Ashlee","Felicia","Krista","Annie","Audra","Brenda","Chloris","Eliza","Heidi","Irene","Mary","Mylene","Shanti","Shelly","Thalia","Anja","Briana","Dianna","Elaine","Elle","Hillary","Katie","Lena","Lois","Malory","Melita","Mikiko","Naoko","Serenity","Ambre","Brooke","Clementine","Melina","Petra","Twiggy"]], [TrainerType.RANGER]: [['Carlos','Jackson','Sebastian','Gav','Lorenzo','Logan','Nicolas','Trenton','Deshawn','Dwayne','Jeffery','Kyler','Taylor','Alain','Claude','Crofton','Forrest','Harry','Jaden','Keith','Lewis','Miguel','Pedro','Ralph','Richard','Bret','Daryl','Eddie','Johan','Leaf','Louis','Maxwell','Parker','Rick','Steve','Bjorn','Chaise','Dean','Lee','Maurice','Nash','Ralf','Reed','Shinobu','Silas'],['Catherine','Jenna','Sophia','Merdith','Nora','Beth','Chelsea','Katelyn','Madeline','Allison','Ashlee','Felicia','Krista','Annie','Audra','Brenda','Chloris','Eliza','Heidi','Irene','Mary','Mylene','Shanti','Shelly','Thalia','Anja','Briana','Dianna','Elaine','Elle','Hillary','Katie','Lena','Lois','Malory','Melita','Mikiko','Naoko','Serenity','Ambre','Brooke','Clementine','Melina','Petra','Twiggy']],
[TrainerType.RICH]: [["Alfred","Edward","Gregory","Preston","Thomas","Tucker","Walter","Clifford","Everett","Micah","Nate","Pierre","Terrance","Arthur","Brooks","Emanuel","Lamar","Jeremy","Leonardo","Milton","Frederic","Renaud","Robert","Yan","Daniel","Sheldon","Stonewall","Gerald","Ronald","Smith","Stanley","Reginald","Orson","Wilco","Caden","Glenn"],["Rebecca","Reina","Cassandra","Emilia","Grace","Marian","Elizabeth","Kathleen","Sayuri","Caroline","Judy"]], [TrainerType.RICH]: [['Alfred','Edward','Gregory','Preston','Thomas','Tucker','Walter','Clifford','Everett','Micah','Nate','Pierre','Terrance','Arthur','Brooks','Emanuel','Lamar','Jeremy','Leonardo','Milton','Frederic','Renaud','Robert','Yan','Daniel','Sheldon','Stonewall','Gerald','Ronald','Smith','Stanley','Reginald','Orson','Wilco','Caden','Glenn'],['Rebecca','Reina','Cassandra','Emilia','Grace','Marian','Elizabeth','Kathleen','Sayuri','Caroline','Judy']],
[TrainerType.RICH_KID]: [["Garret","Winston","Dawson","Enrique","Jason","Roman","Trey","Liam","Anthony","Brad","Cody","Manuel","Martin","Pierce","Rolan","Keenan","Filbert","Antoin","Cyus","Diek","Dugo","Flitz","Jurek","Lond","Perd","Quint","Basto","Benit","Brot","Denc","Guyit","Marcon","Perc","Puros","Roex","Sainz","Symin","Tark","Venak"],["Anette","Brianna","Cindy","Colleen","Daphne","Elizabeth","Naomi","Sarah","Charlotte","Gillian","Jacki","Lady","Melissa","Celeste","Colette","Elizandra","Isabel","Lynette","Magnolia","Sophie","Lina","Dulcie","Auro","Brin","Caril","Eloos","Gwin","Illa","Kowly","Rima","Ristin","Vesey","Brena","Deasy","Denslon","Kylet","Nemi","Rene","Sanol","Stouner","Sturk","Talmen","Zoila"]], [TrainerType.RICH_KID]: [['Garret','Winston','Dawson','Enrique','Jason','Roman','Trey','Liam','Anthony','Brad','Cody','Manuel','Martin','Pierce','Rolan','Keenan','Filbert','Antoin','Cyus','Diek','Dugo','Flitz','Jurek','Lond','Perd','Quint','Basto','Benit','Brot','Denc','Guyit','Marcon','Perc','Puros','Roex','Sainz','Symin','Tark','Venak'],['Anette','Brianna','Cindy','Colleen','Daphne','Elizabeth','Naomi','Sarah','Charlotte','Gillian','Jacki','Lady','Melissa','Celeste','Colette','Elizandra','Isabel','Lynette','Magnolia','Sophie','Lina','Dulcie','Auro','Brin','Caril','Eloos','Gwin','Illa','Kowly','Rima','Ristin','Vesey','Brena','Deasy','Denslon','Kylet','Nemi','Rene','Sanol','Stouner','Sturk','Talmen','Zoila']],
[TrainerType.ROUGHNECK]: ["Camron","Corey","Gabriel","Isaiah","Jamal","Koji","Luke","Paxton","Raul","Zeek","Kirby","Chance","Dave","Fletcher","Johnny","Reese","Joey","Ricky","Silvester","Martin"], [TrainerType.ROUGHNECK]: ['Camron','Corey','Gabriel','Isaiah','Jamal','Koji','Luke','Paxton','Raul','Zeek','Kirby','Chance','Dave','Fletcher','Johnny','Reese','Joey','Ricky','Silvester','Martin'],
[TrainerType.SCIENTIST]: [["Jed","Marc","Mitch","Rich","Ross","Beau","Braydon","Connor","Ed","Ivan","Jerry","Jose","Joshua","Parker","Rodney","Taylor","Ted","Travis","Zackery","Darrius","Emilio","Fredrick","Shaun","Stefano","Travon","Daniel","Garett","Gregg","Linden","Lowell","Trenton","Dudley","Luke","Markus","Nathan","Orville","Randall","Ron","Ronald","Simon","Steve","William","Franklin","Clarke","Jacques","Terrance","Ernst","Justus","Ikaika","Jayson","Kyle","Reid","Tyrone","Adam","Albert","Alphonse","Cory","Donnie","Elton","Francis","Gordon","Herbert","Humphrey","Jordan","Julian","Keaton","Levi","Melvin","Murray","West","Craig","Coren","Dubik","Kotan","Lethco","Mante","Mort","Myron","Odlow","Ribek","Roeck","Vogi","Vonder","Zogo","Doimo","Doton","Durel","Hildon","Kukla","Messa","Nanot","Platen","Raburn","Reman","Acrod","Coffy","Elrok","Foss","Hardig","Hombol","Hospel","Kaller","Klots","Krilok","Limar","Loket","Mesak","Morbit","Newin","Orill","Tabor","Tekot"],["Blythe","Chan","Kathrine","Marie","Maria","Naoko","Samantha","Satomi","Shannon","Athena","Caroline","Lumi","Lumina","Marissa","Sonia"]], [TrainerType.SCIENTIST]: [['Jed','Marc','Mitch','Rich','Ross','Beau','Braydon','Connor','Ed','Ivan','Jerry','Jose','Joshua','Parker','Rodney','Taylor','Ted','Travis','Zackery','Darrius','Emilio','Fredrick','Shaun','Stefano','Travon','Daniel','Garett','Gregg','Linden','Lowell','Trenton','Dudley','Luke','Markus','Nathan','Orville','Randall','Ron','Ronald','Simon','Steve','William','Franklin','Clarke','Jacques','Terrance','Ernst','Justus','Ikaika','Jayson','Kyle','Reid','Tyrone','Adam','Albert','Alphonse','Cory','Donnie','Elton','Francis','Gordon','Herbert','Humphrey','Jordan','Julian','Keaton','Levi','Melvin','Murray','West','Craig','Coren','Dubik','Kotan','Lethco','Mante','Mort','Myron','Odlow','Ribek','Roeck','Vogi','Vonder','Zogo','Doimo','Doton','Durel','Hildon','Kukla','Messa','Nanot','Platen','Raburn','Reman','Acrod','Coffy','Elrok','Foss','Hardig','Hombol','Hospel','Kaller','Klots','Krilok','Limar','Loket','Mesak','Morbit','Newin','Orill','Tabor','Tekot'],['Blythe','Chan','Kathrine','Marie','Maria','Naoko','Samantha','Satomi','Shannon','Athena','Caroline','Lumi','Lumina','Marissa','Sonia']],
[TrainerType.SMASHER]: ["Aspen","Elena","Mari","Amy","Lizzy"], [TrainerType.SMASHER]: ['Aspen','Elena','Mari','Amy','Lizzy'],
[TrainerType.SNOW_WORKER]: [["Braden","Brendon","Colin","Conrad","Dillan","Gary","Gerardo","Holden","Jackson","Mason","Quentin","Willy","Noel","Arnold","Brady","Brand","Cairn","Cliff","Don","Eddie","Felix","Filipe","Glenn","Gus","Heath","Matthew","Patton","Rich","Rob","Ryan","Scott","Shelby","Sterling","Tyler","Victor","Zack","Friedrich","Herman","Isaac","Leo","Maynard","Mitchell","Morgann","Nathan","Niel","Pasqual","Paul","Tavarius","Tibor","Dimitri","Narek","Yusif","Frank","Jeff","Vaclav","Ovid","Francis","Keith","Russel","Sangon","Toway","Bomber","Chean","Demit","Hubor","Kebile","Laber","Ordo","Retay","Ronix","Wagel","Dobit","Kaster","Lobel","Releo","Saken","Rustix"],["Georgia","Sandra","Yvonne"]], [TrainerType.SNOW_WORKER]: [['Braden','Brendon','Colin','Conrad','Dillan','Gary','Gerardo','Holden','Jackson','Mason','Quentin','Willy','Noel','Arnold','Brady','Brand','Cairn','Cliff','Don','Eddie','Felix','Filipe','Glenn','Gus','Heath','Matthew','Patton','Rich','Rob','Ryan','Scott','Shelby','Sterling','Tyler','Victor','Zack','Friedrich','Herman','Isaac','Leo','Maynard','Mitchell','Morgann','Nathan','Niel','Pasqual','Paul','Tavarius','Tibor','Dimitri','Narek','Yusif','Frank','Jeff','Vaclav','Ovid','Francis','Keith','Russel','Sangon','Toway','Bomber','Chean','Demit','Hubor','Kebile','Laber','Ordo','Retay','Ronix','Wagel','Dobit','Kaster','Lobel','Releo','Saken','Rustix'],['Georgia','Sandra','Yvonne']],
[TrainerType.STRIKER]: ["Marco","Roberto","Tony"], [TrainerType.STRIKER]: ['Marco','Roberto','Tony'],
[TrainerType.SCHOOL_KID]: [["Alan","Billy","Chad","Danny","Dudley","Jack","Joe","Johnny","Kipp","Nate","Ricky","Tommy","Jerry","Paul","Ted","Chance","Esteban","Forrest","Harrison","Connor","Sherman","Torin","Travis","Al","Carter","Edgar","Jem","Sammy","Shane","Shayne","Alvin","Keston","Neil","Seymour","William","Carson","Clark","Nolan"],["Georgia","Karen","Meiko","Christine","Mackenzie","Tiera","Ann","Gina","Lydia","Marsha","Millie","Sally","Serena","Silvia","Alberta","Cassie","Mara","Rita","Georgie","Meena","Nitzel"]], [TrainerType.SCHOOL_KID]: [['Alan','Billy','Chad','Danny','Dudley','Jack','Joe','Johnny','Kipp','Nate','Ricky','Tommy','Jerry','Paul','Ted','Chance','Esteban','Forrest','Harrison','Connor','Sherman','Torin','Travis','Al','Carter','Edgar','Jem','Sammy','Shane','Shayne','Alvin','Keston','Neil','Seymour','William','Carson','Clark','Nolan'],['Georgia','Karen','Meiko','Christine','Mackenzie','Tiera','Ann','Gina','Lydia','Marsha','Millie','Sally','Serena','Silvia','Alberta','Cassie','Mara','Rita','Georgie','Meena','Nitzel']],
[TrainerType.SWIMMER]: [["Berke","Cameron","Charlie","George","Harold","Jerome","Kirk","Mathew","Parker","Randall","Seth","Simon","Tucker","Austin","Barry","Chad","Cody","Darrin","David","Dean","Douglas","Franklin","Gilbert","Herman","Jack","Luis","Matthew","Reed","Richard","Rodney","Roland","Spencer","Stan","Tony","Clarence","Declan","Dominik","Harrison","Kevin","Leonardo","Nolen","Pete","Santiago","Axle","Braden","Finn","Garrett","Mymo","Reece","Samir","Toby","Adrian","Colton","Dillon","Erik","Evan","Francisco","Glenn","Kurt","Oscar","Ricardo","Sam","Sheltin","Troy","Vincent","Wade","Wesley","Duane","Elmo","Esteban","Frankie","Ronald","Tyson","Bart","Matt","Tim","Wright","Jeffery","Kyle","Alessandro","Estaban","Kieran","Ramses","Casey","Dakota","Jared","Kalani","Keoni","Lawrence","Logan","Robert","Roddy","Yasu","Derek","Jacob","Bruce","Clayton"],["Briana","Dawn","Denise","Diana","Elaine","Kara","Kaylee","Lori","Nicole","Nikki","Paula","Susie","Wendy","Alice","Beth","Beverly","Brenda","Dana","Debra","Grace","Jenny","Katie","Laurel","Linda","Missy","Sharon","Tanya","Tara","Tisha","Carlee","Imani","Isabelle","Kyla","Sienna","Abigail","Amara","Anya","Connie","Maria","Melissa","Nora","Shirley","Shania","Tiffany","Aubree","Cassandra","Claire","Crystal","Erica","Gabrielle","Haley","Jessica","Joanna","Lydia","Mallory","Mary","Miranda","Paige","Sophia","Vanessa","Chelan","Debbie","Joy","Kendra","Leona","Mina","Caroline","Joyce","Larissa","Rebecca","Tyra","Dara","Desiree","Kaoru","Ruth","Coral","Genevieve","Isla","Marissa","Romy","Sheryl","Alexandria","Alicia","Chelsea","Jade","Kelsie","Laura","Portia","Shelby","Sara","Tiare","Kyra","Natasha","Layla","Scarlett","Cora"]], [TrainerType.SWIMMER]: [['Berke','Cameron','Charlie','George','Harold','Jerome','Kirk','Mathew','Parker','Randall','Seth','Simon','Tucker','Austin','Barry','Chad','Cody','Darrin','David','Dean','Douglas','Franklin','Gilbert','Herman','Jack','Luis','Matthew','Reed','Richard','Rodney','Roland','Spencer','Stan','Tony','Clarence','Declan','Dominik','Harrison','Kevin','Leonardo','Nolen','Pete','Santiago','Axle','Braden','Finn','Garrett','Mymo','Reece','Samir','Toby','Adrian','Colton','Dillon','Erik','Evan','Francisco','Glenn','Kurt','Oscar','Ricardo','Sam','Sheltin','Troy','Vincent','Wade','Wesley','Duane','Elmo','Esteban','Frankie','Ronald','Tyson','Bart','Matt','Tim','Wright','Jeffery','Kyle','Alessandro','Estaban','Kieran','Ramses','Casey','Dakota','Jared','Kalani','Keoni','Lawrence','Logan','Robert','Roddy','Yasu','Derek','Jacob','Bruce','Clayton'],['Briana','Dawn','Denise','Diana','Elaine','Kara','Kaylee','Lori','Nicole','Nikki','Paula','Susie','Wendy','Alice','Beth','Beverly','Brenda','Dana','Debra','Grace','Jenny','Katie','Laurel','Linda','Missy','Sharon','Tanya','Tara','Tisha','Carlee','Imani','Isabelle','Kyla','Sienna','Abigail','Amara','Anya','Connie','Maria','Melissa','Nora','Shirley','Shania','Tiffany','Aubree','Cassandra','Claire','Crystal','Erica','Gabrielle','Haley','Jessica','Joanna','Lydia','Mallory','Mary','Miranda','Paige','Sophia','Vanessa','Chelan','Debbie','Joy','Kendra','Leona','Mina','Caroline','Joyce','Larissa','Rebecca','Tyra','Dara','Desiree','Kaoru','Ruth','Coral','Genevieve','Isla','Marissa','Romy','Sheryl','Alexandria','Alicia','Chelsea','Jade','Kelsie','Laura','Portia','Shelby','Sara','Tiare','Kyra','Natasha','Layla','Scarlett','Cora']],
[TrainerType.TWINS]: ["Amy & May","Jo & Zoe","Meg & Peg","Ann & Anne","Lea & Pia","Amy & Liv","Gina & Mia","Miu & Yuki","Tori & Tia","Eli & Anne","Jen & Kira","Joy & Meg","Kiri & Jan","Miu & Mia","Emma & Lil","Liv & Liz","Teri & Tia","Amy & Mimi","Clea & Gil","Day & Dani","Kay & Tia","Tori & Til","Saya & Aya","Emy & Lin","Kumi & Amy","Mayo & May","Ally & Amy","Lia & Lily","Rae & Ula","Sola & Ana","Tara & Val","Faith & Joy","Nana & Nina"], [TrainerType.TWINS]: ['Amy & May','Jo & Zoe','Meg & Peg','Ann & Anne','Lea & Pia','Amy & Liv','Gina & Mia','Miu & Yuki','Tori & Tia','Eli & Anne','Jen & Kira','Joy & Meg','Kiri & Jan','Miu & Mia','Emma & Lil','Liv & Liz','Teri & Tia','Amy & Mimi','Clea & Gil','Day & Dani','Kay & Tia','Tori & Til','Saya & Aya','Emy & Lin','Kumi & Amy','Mayo & May','Ally & Amy','Lia & Lily','Rae & Ula','Sola & Ana','Tara & Val','Faith & Joy','Nana & Nina'],
[TrainerType.VETERAN]: [["Armando","Brenden","Brian","Clayton","Edgar","Emanuel","Grant","Harlan","Terrell","Arlen","Chester","Hugo","Martell","Ray","Shaun","Abraham","Carter","Claude","Jerry","Lucius","Murphy","Rayne","Ron","Sinan","Sterling","Vincent","Zach","Gerard","Gilles","Louis","Timeo","Akira","Don","Eric","Harry","Leon","Roger","Angus","Aristo","Brone","Johnny"],["Julia","Karla","Kim","Sayuri","Tiffany","Cathy","Cecile","Chloris","Denae","Gina","Maya","Oriana","Portia","Rhona","Rosaline","Catrina","Inga","Trisha","Heather","Lynn","Sheri","Alonsa","Ella","Leticia","Kiara"]], [TrainerType.VETERAN]: [['Armando','Brenden','Brian','Clayton','Edgar','Emanuel','Grant','Harlan','Terrell','Arlen','Chester','Hugo','Martell','Ray','Shaun','Abraham','Carter','Claude','Jerry','Lucius','Murphy','Rayne','Ron','Sinan','Sterling','Vincent','Zach','Gerard','Gilles','Louis','Timeo','Akira','Don','Eric','Harry','Leon','Roger','Angus','Aristo','Brone','Johnny'],['Julia','Karla','Kim','Sayuri','Tiffany','Cathy','Cecile','Chloris','Denae','Gina','Maya','Oriana','Portia','Rhona','Rosaline','Catrina','Inga','Trisha','Heather','Lynn','Sheri','Alonsa','Ella','Leticia','Kiara']],
[TrainerType.WAITER]: [["Bert","Clint","Maxwell","Lou"],["Kati","Aurora","Bonita","Flo","Tia","Jan","Olwen","Paget","Paula","Talia"]], [TrainerType.WAITER]: [['Bert','Clint','Maxwell','Lou'],['Kati','Aurora','Bonita','Flo','Tia','Jan','Olwen','Paget','Paula','Talia']],
[TrainerType.WORKER]: [["Braden","Brendon","Colin","Conrad","Dillan","Gary","Gerardo","Holden","Jackson","Mason","Quentin","Willy","Noel","Arnold","Brady","Brand","Cairn","Cliff","Don","Eddie","Felix","Filipe","Glenn","Gus","Heath","Matthew","Patton","Rich","Rob","Ryan","Scott","Shelby","Sterling","Tyler","Victor","Zack","Friedrich","Herman","Isaac","Leo","Maynard","Mitchell","Morgann","Nathan","Niel","Pasqual","Paul","Tavarius","Tibor","Dimitri","Narek","Yusif","Frank","Jeff","Vaclav","Ovid","Francis","Keith","Russel","Sangon","Toway","Bomber","Chean","Demit","Hubor","Kebile","Laber","Ordo","Retay","Ronix","Wagel","Dobit","Kaster","Lobel","Releo","Saken","Rustix"],["Georgia","Sandra","Yvonne"]], [TrainerType.WORKER]: [['Braden','Brendon','Colin','Conrad','Dillan','Gary','Gerardo','Holden','Jackson','Mason','Quentin','Willy','Noel','Arnold','Brady','Brand','Cairn','Cliff','Don','Eddie','Felix','Filipe','Glenn','Gus','Heath','Matthew','Patton','Rich','Rob','Ryan','Scott','Shelby','Sterling','Tyler','Victor','Zack','Friedrich','Herman','Isaac','Leo','Maynard','Mitchell','Morgann','Nathan','Niel','Pasqual','Paul','Tavarius','Tibor','Dimitri','Narek','Yusif','Frank','Jeff','Vaclav','Ovid','Francis','Keith','Russel','Sangon','Toway','Bomber','Chean','Demit','Hubor','Kebile','Laber','Ordo','Retay','Ronix','Wagel','Dobit','Kaster','Lobel','Releo','Saken','Rustix'],['Georgia','Sandra','Yvonne']],
[TrainerType.YOUNGSTER]: [["Albert","Gordon","Ian","Jason","Jimmy","Mikey","Owen","Samuel","Warren","Allen","Ben","Billy","Calvin","Dillion","Eddie","Joey","Josh","Neal","Timmy","Tommy","Breyden","Deandre","Demetrius","Dillon","Jaylen","Johnson","Shigenobu","Chad","Cole","Cordell","Dan","Dave","Destin","Nash","Tyler","Yasu","Austin","Dallas","Darius","Donny","Jonathon","Logan","Michael","Oliver","Sebastian","Tristan","Wayne","Norman","Roland","Regis","Abe","Astor","Keita","Kenneth","Kevin","Kyle","Lester","Masao","Nicholas","Parker","Wes","Zachary","Cody","Henley","Jaye","Karl","Kenny","Masahiro","Pedro","Petey","Sinclair","Terrell","Waylon","Aidan","Anthony","David","Jacob","Jayden","Cutler","Ham","Caleb","Kai","Honus","Kenway","Bret","Chris","Cid","Dennis","Easton","Ken","Robby","Ronny","Shawn","Benjamin","Jake","Travis","Adan","Aday","Beltran","Elian","Hernan","Julen","Luka","Roi","Bernie","Dustin","Jonathan","Wyatt"],["Alice","Bridget","Carrie","Connie","Dana","Ellen","Krise","Laura","Linda","Michelle","Shannon","Andrea","Crissy","Janice","Robin","Sally","Tiana","Haley","Ali","Ann","Dalia","Dawn","Iris","Joana","Julia","Kay","Lisa","Megan","Mikaela","Miriam","Paige","Reli","Blythe","Briana","Caroline","Cassidy","Kaitlin","Madeline","Molly","Natalie","Samantha","Sarah","Cathy","Dye","Eri","Eva","Fey","Kara","Lurleen","Maki","Mali","Maya","Miki","Sibyl","Daya","Diana","Flo","Helia","Henrietta","Isabel","Mai","Persephone","Serena","Anna","Charlotte","Elin","Elsa","Lise","Sara","Suzette","Audrey","Emmy","Isabella","Madison","Rika","Rylee","Salla","Ellie","Alexandra","Amy","Lass","Brittany","Chel","Cindy","Dianne","Emily","Emma","Evelyn","Hana","Harleen","Hazel","Jocelyn","Katrina","Kimberly","Lina","Marge","Mila","Mizuki","Rena","Sal","Satoko","Summer","Tomoe","Vicky","Yue","Yumi","Lauren","Rei","Riley","Lois","Nancy","Tammy","Terry"]], [TrainerType.YOUNGSTER]: [['Albert','Gordon','Ian','Jason','Jimmy','Mikey','Owen','Samuel','Warren','Allen','Ben','Billy','Calvin','Dillion','Eddie','Joey','Josh','Neal','Timmy','Tommy','Breyden','Deandre','Demetrius','Dillon','Jaylen','Johnson','Shigenobu','Chad','Cole','Cordell','Dan','Dave','Destin','Nash','Tyler','Yasu','Austin','Dallas','Darius','Donny','Jonathon','Logan','Michael','Oliver','Sebastian','Tristan','Wayne','Norman','Roland','Regis','Abe','Astor','Keita','Kenneth','Kevin','Kyle','Lester','Masao','Nicholas','Parker','Wes','Zachary','Cody','Henley','Jaye','Karl','Kenny','Masahiro','Pedro','Petey','Sinclair','Terrell','Waylon','Aidan','Anthony','David','Jacob','Jayden','Cutler','Ham','Caleb','Kai','Honus','Kenway','Bret','Chris','Cid','Dennis','Easton','Ken','Robby','Ronny','Shawn','Benjamin','Jake','Travis','Adan','Aday','Beltran','Elian','Hernan','Julen','Luka','Roi','Bernie','Dustin','Jonathan','Wyatt'],['Alice','Bridget','Carrie','Connie','Dana','Ellen','Krise','Laura','Linda','Michelle','Shannon','Andrea','Crissy','Janice','Robin','Sally','Tiana','Haley','Ali','Ann','Dalia','Dawn','Iris','Joana','Julia','Kay','Lisa','Megan','Mikaela','Miriam','Paige','Reli','Blythe','Briana','Caroline','Cassidy','Kaitlin','Madeline','Molly','Natalie','Samantha','Sarah','Cathy','Dye','Eri','Eva','Fey','Kara','Lurleen','Maki','Mali','Maya','Miki','Sibyl','Daya','Diana','Flo','Helia','Henrietta','Isabel','Mai','Persephone','Serena','Anna','Charlotte','Elin','Elsa','Lise','Sara','Suzette','Audrey','Emmy','Isabella','Madison','Rika','Rylee','Salla','Ellie','Alexandra','Amy','Lass','Brittany','Chel','Cindy','Dianne','Emily','Emma','Evelyn','Hana','Harleen','Hazel','Jocelyn','Katrina','Kimberly','Lina','Marge','Mila','Mizuki','Rena','Sal','Satoko','Summer','Tomoe','Vicky','Yue','Yumi','Lauren','Rei','Riley','Lois','Nancy','Tammy','Terry']],
[TrainerType.HEX_MANIAC]: ["Kindra","Patricia","Tammy","Tasha","Valerie","Alaina","Kathleen","Leah","Makie","Sylvia","Anina","Arachna","Carrie","Desdemona","Josette","Luna","Melanie","Osanna","Raziah"], [TrainerType.HEX_MANIAC]: ['Kindra','Patricia','Tammy','Tasha','Valerie','Alaina','Kathleen','Leah','Makie','Sylvia','Anina','Arachna','Carrie','Desdemona','Josette','Luna','Melanie','Osanna','Raziah'],
}; };
function fetchAndPopulateTrainerNames(url: string, parser: DOMParser, trainerNames: Set<string>, femaleTrainerNames: Set<string>, forceFemale: boolean = false) { function fetchAndPopulateTrainerNames(url: string, parser: DOMParser, trainerNames: Set<string>, femaleTrainerNames: Set<string>, forceFemale: boolean = false) {
@ -138,16 +138,16 @@ function fetchAndPopulateTrainerNames(url: string, parser: DOMParser, trainerNam
const childIndex = elements.indexOf(t); const childIndex = elements.indexOf(t);
return childIndex > startChildIndex && childIndex < endChildIndex; return childIndex > startChildIndex && childIndex < endChildIndex;
}).map(t => t as Element); }).map(t => t as Element);
console.log(url, tables) console.log(url, tables);
for (let table of tables) { for (const table of tables) {
const trainerRows = [...table.querySelectorAll('tr:not(:first-child)')].filter(r => r.children.length === 9); const trainerRows = [...table.querySelectorAll('tr:not(:first-child)')].filter(r => r.children.length === 9);
for (let row of trainerRows) { for (const row of trainerRows) {
const nameCell = row.firstElementChild; const nameCell = row.firstElementChild;
const content = nameCell.innerHTML; const content = nameCell.innerHTML;
if (content.indexOf(' <a ') > -1) { if (content.indexOf(' <a ') > -1) {
const female = /♀/.test(content); const female = /♀/.test(content);
if (url === 'Twins') if (url === 'Twins')
console.log(content) console.log(content);
const nameMatch = />([a-z]+(?: &amp; [a-z]+)?)<\/a>/i.exec(content); const nameMatch = />([a-z]+(?: &amp; [a-z]+)?)<\/a>/i.exec(content);
if (nameMatch) if (nameMatch)
(female || forceFemale ? femaleTrainerNames : trainerNames).add(nameMatch[1].replace('&amp;', '&')); (female || forceFemale ? femaleTrainerNames : trainerNames).add(nameMatch[1].replace('&amp;', '&'));

View File

@ -19,7 +19,7 @@ export enum Type {
DARK, DARK,
FAIRY, FAIRY,
STELLAR STELLAR
}; }
export type TypeDamageMultiplier = 0 | 0.125 | 0.25 | 0.5 | 1 | 2 | 4 | 8; export type TypeDamageMultiplier = 0 | 0.125 | 0.25 | 0.5 | 1 | 2 | 4 | 8;

View File

@ -1,13 +1,13 @@
import { Biome } from "./enums/biome"; import { Biome } from './enums/biome';
import { getPokemonMessage, getPokemonPrefix } from "../messages"; import { getPokemonMessage, getPokemonPrefix } from '../messages';
import Pokemon from "../field/pokemon"; import Pokemon from '../field/pokemon';
import { Type } from "./type"; import { Type } from './type';
import Move, { AttackMove } from "./move"; import Move, { AttackMove } from './move';
import * as Utils from "../utils"; import * as Utils from '../utils';
import BattleScene from "../battle-scene"; import BattleScene from '../battle-scene';
import { SuppressWeatherEffectAbAttr } from "./ability"; import { SuppressWeatherEffectAbAttr } from './ability';
import { TerrainType } from "./terrain"; import { TerrainType } from './terrain';
import i18next from "i18next"; import i18next from 'i18next';
export enum WeatherType { export enum WeatherType {
NONE, NONE,
@ -107,7 +107,7 @@ export class Weather {
isEffectSuppressed(scene: BattleScene): boolean { isEffectSuppressed(scene: BattleScene): boolean {
const field = scene.getField(true); const field = scene.getField(true);
for (let pokemon of field) { for (const pokemon of field) {
let suppressWeatherEffectAbAttr = pokemon.getAbility().getAttrs(SuppressWeatherEffectAbAttr).find(() => true) as SuppressWeatherEffectAbAttr; let suppressWeatherEffectAbAttr = pokemon.getAbility().getAttrs(SuppressWeatherEffectAbAttr).find(() => true) as SuppressWeatherEffectAbAttr;
if (!suppressWeatherEffectAbAttr) if (!suppressWeatherEffectAbAttr)
suppressWeatherEffectAbAttr = pokemon.hasPassive() ? pokemon.getPassiveAbility().getAttrs(SuppressWeatherEffectAbAttr).find(() => true) as SuppressWeatherEffectAbAttr : null; suppressWeatherEffectAbAttr = pokemon.hasPassive() ? pokemon.getPassiveAbility().getAttrs(SuppressWeatherEffectAbAttr).find(() => true) as SuppressWeatherEffectAbAttr : null;
@ -233,7 +233,7 @@ export function getTerrainClearMessage(terrainType: TerrainType): string {
export function getTerrainBlockMessage(pokemon: Pokemon, terrainType: TerrainType): string { export function getTerrainBlockMessage(pokemon: Pokemon, terrainType: TerrainType): string {
if (terrainType === TerrainType.MISTY) if (terrainType === TerrainType.MISTY)
return getPokemonMessage(pokemon, ` surrounds itself with a protective mist!`); return getPokemonMessage(pokemon, ' surrounds itself with a protective mist!');
return getPokemonMessage(pokemon, ` is protected by the ${Utils.toReadableString(TerrainType[terrainType])} Terrain!`); return getPokemonMessage(pokemon, ` is protected by the ${Utils.toReadableString(TerrainType[terrainType])} Terrain!`);
} }
@ -367,7 +367,7 @@ export function getRandomWeatherType(arena: any /* Importing from arena causes a
const rand = Utils.randSeedInt(totalWeight); const rand = Utils.randSeedInt(totalWeight);
let w = 0; let w = 0;
for (let weather of weatherPool) { for (const weather of weatherPool) {
w += weather.weight; w += weather.weight;
if (rand < w) if (rand < w)
return weather.weatherType; return weather.weatherType;

View File

@ -1,17 +1,17 @@
import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import SoundFade from 'phaser3-rex-plugins/plugins/soundfade';
import { Phase } from "./phase"; import { Phase } from './phase';
import BattleScene, { AnySound } from "./battle-scene"; import BattleScene, { AnySound } from './battle-scene';
import * as Utils from "./utils"; import * as Utils from './utils';
import { Mode } from "./ui/ui"; import { Mode } from './ui/ui';
import { EGG_SEED, Egg, GachaType, getLegendaryGachaSpeciesForTimestamp } from "./data/egg"; import { EGG_SEED, Egg, GachaType, getLegendaryGachaSpeciesForTimestamp } from './data/egg';
import EggHatchSceneHandler from "./ui/egg-hatch-scene-handler"; import EggHatchSceneHandler from './ui/egg-hatch-scene-handler';
import { Species } from "./data/enums/species"; import { Species } from './data/enums/species';
import { PlayerPokemon } from "./field/pokemon"; import { PlayerPokemon } from './field/pokemon';
import { getPokemonSpecies, speciesStarters } from "./data/pokemon-species"; import { getPokemonSpecies, speciesStarters } from './data/pokemon-species';
import { achvs } from "./system/achv"; import { achvs } from './system/achv';
import { pokemonPrevolutions } from "./data/pokemon-evolutions"; import { pokemonPrevolutions } from './data/pokemon-evolutions';
import { EggTier } from "./data/enums/egg-type"; import { EggTier } from './data/enums/egg-type';
import PokemonInfoContainer from "./ui/pokemon-info-container"; import PokemonInfoContainer from './ui/pokemon-info-container';
export class EggHatchPhase extends Phase { export class EggHatchPhase extends Phase {
private egg: Egg; private egg: Egg;
@ -83,7 +83,7 @@ export class EggHatchPhase extends Phase {
this.eggHatchContainer.add(this.eggContainer); this.eggHatchContainer.add(this.eggContainer);
const getPokemonSprite = () => { const getPokemonSprite = () => {
const ret = this.scene.add.sprite(this.eggHatchBg.displayWidth / 2, this.eggHatchBg.displayHeight / 2, `pkmn__sub`); const ret = this.scene.add.sprite(this.eggHatchBg.displayWidth / 2, this.eggHatchBg.displayHeight / 2, 'pkmn__sub');
ret.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); ret.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true });
return ret; return ret;
}; };
@ -151,7 +151,7 @@ export class EggHatchPhase extends Phase {
}); });
}); });
}); });
}) });
}); });
}); });
}); });
@ -196,7 +196,7 @@ export class EggHatchPhase extends Phase {
onComplete: () => resolve() onComplete: () => resolve()
}); });
} }
}) });
} }
}); });
}); });
@ -312,8 +312,8 @@ export class EggHatchPhase extends Phase {
let f = 0; let f = 0;
let yOffset = 0; let yOffset = 0;
let speed = 3 - Utils.randInt(8); const speed = 3 - Utils.randInt(8);
let amp = 24 + Utils.randInt(32); const amp = 24 + Utils.randInt(32);
const particleTimer = this.scene.tweens.addCounter({ const particleTimer = this.scene.tweens.addCounter({
repeat: -1, repeat: -1,
@ -386,14 +386,14 @@ export class EggHatchPhase extends Phase {
const ignoredSpecies = [ Species.PHIONE, Species.MANAPHY, Species.ETERNATUS ]; const ignoredSpecies = [ Species.PHIONE, Species.MANAPHY, Species.ETERNATUS ];
let speciesPool = Object.keys(speciesStarters) const speciesPool = Object.keys(speciesStarters)
.filter(s => speciesStarters[s] >= minStarterValue && speciesStarters[s] <= maxStarterValue) .filter(s => speciesStarters[s] >= minStarterValue && speciesStarters[s] <= maxStarterValue)
.map(s => parseInt(s) as Species) .map(s => parseInt(s) as Species)
.filter(s => !pokemonPrevolutions.hasOwnProperty(s) && getPokemonSpecies(s).isObtainable() && ignoredSpecies.indexOf(s) === -1); .filter(s => !pokemonPrevolutions.hasOwnProperty(s) && getPokemonSpecies(s).isObtainable() && ignoredSpecies.indexOf(s) === -1);
let totalWeight = 0; let totalWeight = 0;
const speciesWeights = []; const speciesWeights = [];
for (let speciesId of speciesPool) { for (const speciesId of speciesPool) {
let weight = Math.floor((((maxStarterValue - speciesStarters[speciesId]) / ((maxStarterValue - minStarterValue) + 1)) * 1.5 + 1) * 100); let weight = Math.floor((((maxStarterValue - speciesStarters[speciesId]) / ((maxStarterValue - minStarterValue) + 1)) * 1.5 + 1) * 100);
const species = getPokemonSpecies(speciesId); const species = getPokemonSpecies(speciesId);
if (species.isRegional()) if (species.isRegional())

View File

@ -1,15 +1,15 @@
import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import SoundFade from 'phaser3-rex-plugins/plugins/soundfade';
import { Phase } from "./phase"; import { Phase } from './phase';
import BattleScene from "./battle-scene"; import BattleScene from './battle-scene';
import { SpeciesFormEvolution } from "./data/pokemon-evolutions"; import { SpeciesFormEvolution } from './data/pokemon-evolutions';
import EvolutionSceneHandler from "./ui/evolution-scene-handler"; import EvolutionSceneHandler from './ui/evolution-scene-handler';
import * as Utils from "./utils"; import * as Utils from './utils';
import { Mode } from "./ui/ui"; import { Mode } from './ui/ui';
import { LearnMovePhase } from "./phases"; import { LearnMovePhase } from './phases';
import { cos, sin } from "./field/anims"; import { cos, sin } from './field/anims';
import { PlayerPokemon } from "./field/pokemon"; import { PlayerPokemon } from './field/pokemon';
import { getTypeRgb } from "./data/type"; import { getTypeRgb } from './data/type';
import i18next from "i18next"; import i18next from 'i18next';
export class EvolutionPhase extends Phase { export class EvolutionPhase extends Phase {
protected pokemon: PlayerPokemon; protected pokemon: PlayerPokemon;
@ -73,7 +73,7 @@ export class EvolutionPhase extends Phase {
this.evolutionContainer.add(this.evolutionBgOverlay); this.evolutionContainer.add(this.evolutionBgOverlay);
const getPokemonSprite = () => { const getPokemonSprite = () => {
const ret = this.scene.addPokemonSprite(this.pokemon, this.evolutionBaseBg.displayWidth / 2, this.evolutionBaseBg.displayHeight / 2, `pkmn__sub`); const ret = this.scene.addPokemonSprite(this.pokemon, this.evolutionBaseBg.displayWidth / 2, this.evolutionBaseBg.displayHeight / 2, 'pkmn__sub');
ret.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true }); ret.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], ignoreTimeTint: true });
return ret; return ret;
}; };
@ -217,7 +217,7 @@ export class EvolutionPhase extends Phase {
this.pokemon.evolve(this.evolution).then(() => { this.pokemon.evolve(this.evolution).then(() => {
const levelMoves = this.pokemon.getLevelMoves(this.lastLevel + 1, true); const levelMoves = this.pokemon.getLevelMoves(this.lastLevel + 1, true);
for (let lm of levelMoves) for (const lm of levelMoves)
this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.scene.getParty().indexOf(this.pokemon), lm[1])); this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.scene.getParty().indexOf(this.pokemon), lm[1]));
this.scene.unshiftPhase(new EndEvolutionPhase(this.scene)); this.scene.unshiftPhase(new EndEvolutionPhase(this.scene));
@ -266,7 +266,7 @@ export class EvolutionPhase extends Phase {
}); });
}); });
} }
}) });
} }
}); });
}); });
@ -485,8 +485,8 @@ export class EvolutionPhase extends Phase {
let f = 0; let f = 0;
let yOffset = 0; let yOffset = 0;
let speed = 3 - Utils.randInt(8); const speed = 3 - Utils.randInt(8);
let amp = 48 + Utils.randInt(64); const amp = 48 + Utils.randInt(64);
const particleTimer = this.scene.tweens.addCounter({ const particleTimer = this.scene.tweens.addCounter({
repeat: -1, repeat: -1,

View File

@ -1,6 +1,6 @@
import BattleScene from "../battle-scene"; import BattleScene from '../battle-scene';
import { PokeballType } from "../data/pokeball"; import { PokeballType } from '../data/pokeball';
import * as Utils from "../utils"; import * as Utils from '../utils';
export function addPokeballOpenParticles(scene: BattleScene, x: number, y: number, pokeballType: PokeballType): void { export function addPokeballOpenParticles(scene: BattleScene, x: number, y: number, pokeballType: PokeballType): void {
switch (pokeballType) { switch (pokeballType) {
@ -66,7 +66,7 @@ function doDefaultPbOpenParticles(scene: BattleScene, x: number, y: number, radi
} }
function doUbOpenParticles(scene: BattleScene, x: number, y: number, frameIndex: integer) { function doUbOpenParticles(scene: BattleScene, x: number, y: number, frameIndex: integer) {
let particles: Phaser.GameObjects.Image[] = []; const particles: Phaser.GameObjects.Image[] = [];
for (let i = 0; i < 10; i++) for (let i = 0; i < 10; i++)
particles.push(doFanOutParticle(scene, i * 25, x, y, 1, 1, 5, frameIndex)); particles.push(doFanOutParticle(scene, i * 25, x, y, 1, 1, 5, frameIndex));
@ -77,14 +77,14 @@ function doUbOpenParticles(scene: BattleScene, x: number, y: number, frameIndex:
alpha: 0, alpha: 0,
ease: 'Sine.easeIn', ease: 'Sine.easeIn',
onComplete: () => { onComplete: () => {
for (let particle of particles) for (const particle of particles)
particle.destroy(); particle.destroy();
} }
}); });
} }
function doMbOpenParticles(scene: BattleScene, x: number, y: number) { function doMbOpenParticles(scene: BattleScene, x: number, y: number) {
let particles: Phaser.GameObjects.Image[] = []; const particles: Phaser.GameObjects.Image[] = [];
for (let j = 0; j < 2; j++) { for (let j = 0; j < 2; j++) {
for (let i = 0; i < 8; i++) for (let i = 0; i < 8; i++)
particles.push(doFanOutParticle(scene, i * 32, x, y, j ? 1 : 2, j ? 2 : 1, 8, 4)); particles.push(doFanOutParticle(scene, i * 32, x, y, j ? 1 : 2, j ? 2 : 1, 8, 4));
@ -96,7 +96,7 @@ function doMbOpenParticles(scene: BattleScene, x: number, y: number) {
alpha: 0, alpha: 0,
ease: 'Sine.easeIn', ease: 'Sine.easeIn',
onComplete: () => { onComplete: () => {
for (let particle of particles) for (const particle of particles)
particle.destroy(); particle.destroy();
} }
}); });

View File

@ -1,23 +1,23 @@
import BattleScene from "../battle-scene"; import BattleScene from '../battle-scene';
import { BiomePoolTier, PokemonPools, BiomeTierTrainerPools, biomePokemonPools, biomeTrainerPools } from "../data/biomes"; import { BiomePoolTier, PokemonPools, BiomeTierTrainerPools, biomePokemonPools, biomeTrainerPools } from '../data/biomes';
import { Biome } from "../data/enums/biome"; import { Biome } from '../data/enums/biome';
import * as Utils from "../utils"; import * as Utils from '../utils';
import PokemonSpecies, { getPokemonSpecies } from "../data/pokemon-species"; import PokemonSpecies, { getPokemonSpecies } from '../data/pokemon-species';
import { Species } from "../data/enums/species"; import { Species } from '../data/enums/species';
import { Weather, WeatherType, getTerrainClearMessage, getTerrainStartMessage, getWeatherClearMessage, getWeatherStartMessage } from "../data/weather"; import { Weather, WeatherType, getTerrainClearMessage, getTerrainStartMessage, getWeatherClearMessage, getWeatherStartMessage } from '../data/weather';
import { CommonAnimPhase, WeatherEffectPhase } from "../phases"; import { CommonAnimPhase, WeatherEffectPhase } from '../phases';
import { CommonAnim } from "../data/battle-anims"; import { CommonAnim } from '../data/battle-anims';
import { Type } from "../data/type"; import { Type } from '../data/type';
import Move from "../data/move"; import Move from '../data/move';
import { ArenaTag, ArenaTagSide, getArenaTag } from "../data/arena-tag"; import { ArenaTag, ArenaTagSide, getArenaTag } from '../data/arena-tag';
import { ArenaTagType } from "../data/enums/arena-tag-type"; import { ArenaTagType } from '../data/enums/arena-tag-type';
import { TrainerType } from "../data/enums/trainer-type"; import { TrainerType } from '../data/enums/trainer-type';
import { BattlerIndex } from "../battle"; import { BattlerIndex } from '../battle';
import { Moves } from "../data/enums/moves"; import { Moves } from '../data/enums/moves';
import { TimeOfDay } from "../data/enums/time-of-day"; import { TimeOfDay } from '../data/enums/time-of-day';
import { Terrain, TerrainType } from "../data/terrain"; import { Terrain, TerrainType } from '../data/terrain';
import { PostTerrainChangeAbAttr, PostWeatherChangeAbAttr, applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs } from "../data/ability"; import { PostTerrainChangeAbAttr, PostWeatherChangeAbAttr, applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs } from '../data/ability';
import Pokemon from "./pokemon"; import Pokemon from './pokemon';
import * as Overrides from '../overrides'; import * as Overrides from '../overrides';
export class Arena { export class Arena {
@ -58,7 +58,7 @@ export class Arena {
const timeOfDay = this.getTimeOfDay(); const timeOfDay = this.getTimeOfDay();
if (timeOfDay !== this.lastTimeOfDay) { if (timeOfDay !== this.lastTimeOfDay) {
this.pokemonPool = {}; this.pokemonPool = {};
for (let tier of Object.keys(biomePokemonPools[this.biomeType])) for (const tier of Object.keys(biomePokemonPools[this.biomeType]))
this.pokemonPool[tier] = Object.assign([], biomePokemonPools[this.biomeType][tier][TimeOfDay.ALL]).concat(biomePokemonPools[this.biomeType][tier][timeOfDay]); this.pokemonPool[tier] = Object.assign([], biomePokemonPools[this.biomeType][tier][TimeOfDay.ALL]).concat(biomePokemonPools[this.biomeType][tier][timeOfDay]);
this.lastTimeOfDay = timeOfDay; this.lastTimeOfDay = timeOfDay;
} }
@ -140,7 +140,7 @@ export class Arena {
randomTrainerType(waveIndex: integer): TrainerType { randomTrainerType(waveIndex: integer): TrainerType {
const isBoss = !!this.trainerPool[BiomePoolTier.BOSS].length const isBoss = !!this.trainerPool[BiomePoolTier.BOSS].length
&& this.scene.gameMode.isTrainerBoss(waveIndex, this.biomeType, this.scene.offsetGym); && this.scene.gameMode.isTrainerBoss(waveIndex, this.biomeType, this.scene.offsetGym);
console.log(isBoss, this.trainerPool) console.log(isBoss, this.trainerPool);
const tierValue = Utils.randSeedInt(!isBoss ? 512 : 64); const tierValue = Utils.randSeedInt(!isBoss ? 512 : 64);
let tier = !isBoss let tier = !isBoss
? tierValue >= 156 ? BiomePoolTier.COMMON : tierValue >= 32 ? BiomePoolTier.UNCOMMON : tierValue >= 6 ? BiomePoolTier.RARE : tierValue >= 1 ? BiomePoolTier.SUPER_RARE : BiomePoolTier.ULTRA_RARE ? tierValue >= 156 ? BiomePoolTier.COMMON : tierValue >= 32 ? BiomePoolTier.UNCOMMON : tierValue >= 6 ? BiomePoolTier.RARE : tierValue >= 1 ? BiomePoolTier.SUPER_RARE : BiomePoolTier.ULTRA_RARE
@ -276,7 +276,7 @@ export class Arena {
this.weather = new Weather(weather, 0); this.weather = new Weather(weather, 0);
this.scene.unshiftPhase(new CommonAnimPhase(this.scene, undefined, undefined, CommonAnim.SUNNY + (weather - 1))); this.scene.unshiftPhase(new CommonAnimPhase(this.scene, undefined, undefined, CommonAnim.SUNNY + (weather - 1)));
this.scene.queueMessage(getWeatherStartMessage(weather)); this.scene.queueMessage(getWeatherStartMessage(weather));
return true return true;
} }
/** /**
@ -709,7 +709,7 @@ export class ArenaBase extends Phaser.GameObjects.Container {
this.base.setTexture(baseKey); this.base.setTexture(baseKey);
if (this.base.texture.frameTotal > 1) { if (this.base.texture.frameTotal > 1) {
const baseFrameNames = this.scene.anims.generateFrameNames(baseKey, { zeroPad: 4, suffix: ".png", start: 1, end: this.base.texture.frameTotal - 1 }); const baseFrameNames = this.scene.anims.generateFrameNames(baseKey, { zeroPad: 4, suffix: '.png', start: 1, end: this.base.texture.frameTotal - 1 });
this.scene.anims.create({ this.scene.anims.create({
key: baseKey, key: baseKey,
frames: baseFrameNames, frames: baseFrameNames,
@ -733,7 +733,7 @@ export class ArenaBase extends Phaser.GameObjects.Container {
prop.setTexture(propKey); prop.setTexture(propKey);
if (hasProps && prop.texture.frameTotal > 1) { if (hasProps && prop.texture.frameTotal > 1) {
const propFrameNames = this.scene.anims.generateFrameNames(propKey, { zeroPad: 4, suffix: ".png", start: 1, end: prop.texture.frameTotal - 1 }); const propFrameNames = this.scene.anims.generateFrameNames(propKey, { zeroPad: 4, suffix: '.png', start: 1, end: prop.texture.frameTotal - 1 });
this.scene.anims.create({ this.scene.anims.create({
key: propKey, key: propKey,
frames: propFrameNames, frames: propFrameNames,

View File

@ -1,7 +1,7 @@
import { TextStyle, addTextObject } from "../ui/text"; import { TextStyle, addTextObject } from '../ui/text';
import Pokemon, { DamageResult, HitResult } from "./pokemon"; import Pokemon, { DamageResult, HitResult } from './pokemon';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { BattlerIndex } from "../battle"; import { BattlerIndex } from '../battle';
export default class DamageNumberHandler { export default class DamageNumberHandler {
private damageNumbers: Map<BattlerIndex, Phaser.GameObjects.Text[]>; private damageNumbers: Map<BattlerIndex, Phaser.GameObjects.Text[]>;

View File

@ -1,6 +1,6 @@
import BattleScene from "../battle-scene"; import BattleScene from '../battle-scene';
import Pokemon from "./pokemon"; import Pokemon from './pokemon';
import * as Utils from "../utils"; import * as Utils from '../utils';
export default class PokemonSpriteSparkleHandler { export default class PokemonSpriteSparkleHandler {
private sprites: Set<Phaser.GameObjects.Sprite>; private sprites: Set<Phaser.GameObjects.Sprite>;
@ -20,7 +20,7 @@ export default class PokemonSpriteSparkleHandler {
onLapse(): void { onLapse(): void {
Array.from(this.sprites.values()).filter(s => !s.scene).map(s => this.sprites.delete(s)); Array.from(this.sprites.values()).filter(s => !s.scene).map(s => this.sprites.delete(s));
for (let s of this.sprites.values()) { for (const s of this.sprites.values()) {
if (!s.pipelineData['teraColor'] || !(s.pipelineData['teraColor'] as number[]).find(c => c)) if (!s.pipelineData['teraColor'] || !(s.pipelineData['teraColor'] as number[]).find(c => c))
continue; continue;
if (!s.visible || (s.parentContainer instanceof Pokemon && !s.parentContainer.parentContainer)) if (!s.visible || (s.parentContainer instanceof Pokemon && !s.parentContainer.parentContainer))
@ -47,7 +47,7 @@ export default class PokemonSpriteSparkleHandler {
add(sprites: Phaser.GameObjects.Sprite | Phaser.GameObjects.Sprite[]): void { add(sprites: Phaser.GameObjects.Sprite | Phaser.GameObjects.Sprite[]): void {
if (!Array.isArray(sprites)) if (!Array.isArray(sprites))
sprites = [ sprites ]; sprites = [ sprites ];
for (let s of sprites) { for (const s of sprites) {
if (this.sprites.has(s)) if (this.sprites.has(s))
continue; continue;
this.sprites.add(s); this.sprites.add(s);
@ -57,13 +57,13 @@ export default class PokemonSpriteSparkleHandler {
remove(sprites: Phaser.GameObjects.Sprite | Phaser.GameObjects.Sprite[]): void { remove(sprites: Phaser.GameObjects.Sprite | Phaser.GameObjects.Sprite[]): void {
if (!Array.isArray(sprites)) if (!Array.isArray(sprites))
sprites = [ sprites ]; sprites = [ sprites ];
for (let s of sprites) { for (const s of sprites) {
this.sprites.delete(s); this.sprites.delete(s);
} }
} }
removeAll(): void { removeAll(): void {
for (let s of this.sprites.values()) for (const s of this.sprites.values())
this.sprites.delete(s); this.sprites.delete(s);
} }
} }

View File

@ -3,8 +3,8 @@ import BattleScene, { AnySound } from '../battle-scene';
import { Variant, VariantSet, variantColorCache } from '#app/data/variant'; import { Variant, VariantSet, variantColorCache } from '#app/data/variant';
import { variantData } from '#app/data/variant'; import { variantData } from '#app/data/variant';
import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info'; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info';
import { Moves } from "../data/enums/moves"; import { Moves } from '../data/enums/moves';
import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveTypeAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit } from "../data/move"; import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveTypeAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit } from '../data/move';
import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from '../data/pokemon-species'; import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from '../data/pokemon-species';
import * as Utils from '../utils'; import * as Utils from '../utils';
import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from '../data/type'; import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from '../data/type';
@ -20,18 +20,18 @@ import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from '../data/tms';
import { DamagePhase, FaintPhase, LearnMovePhase, ObtainStatusEffectPhase, StatChangePhase, SwitchPhase, SwitchSummonPhase, ToggleDoublePositionPhase } from '../phases'; import { DamagePhase, FaintPhase, LearnMovePhase, ObtainStatusEffectPhase, StatChangePhase, SwitchPhase, SwitchSummonPhase, ToggleDoublePositionPhase } from '../phases';
import { BattleStat } from '../data/battle-stat'; import { BattleStat } from '../data/battle-stat';
import { BattlerTag, BattlerTagLapseType, EncoreTag, HelpingHandTag, HighestStatBoostTag, TypeBoostTag, getBattlerTag } from '../data/battler-tags'; import { BattlerTag, BattlerTagLapseType, EncoreTag, HelpingHandTag, HighestStatBoostTag, TypeBoostTag, getBattlerTag } from '../data/battler-tags';
import { BattlerTagType } from "../data/enums/battler-tag-type"; import { BattlerTagType } from '../data/enums/battler-tag-type';
import { Species } from '../data/enums/species'; import { Species } from '../data/enums/species';
import { WeatherType } from '../data/weather'; import { WeatherType } from '../data/weather';
import { TempBattleStat } from '../data/temp-battle-stat'; import { TempBattleStat } from '../data/temp-battle-stat';
import { ArenaTagSide, WeakenMoveScreenTag, WeakenMoveTypeTag } from '../data/arena-tag'; import { ArenaTagSide, WeakenMoveScreenTag, WeakenMoveTypeTag } from '../data/arena-tag';
import { ArenaTagType } from "../data/enums/arena-tag-type"; import { ArenaTagType } from '../data/enums/arena-tag-type';
import { Biome } from "../data/enums/biome"; import { Biome } from '../data/enums/biome';
import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, FieldVariableMovePowerAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, MoveTypeChangeAttr, NonSuperEffectiveImmunityAbAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, VariableMoveTypeAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPostDefendAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr } from '../data/ability'; import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, FieldVariableMovePowerAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, MoveTypeChangeAttr, NonSuperEffectiveImmunityAbAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, VariableMoveTypeAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPostDefendAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr } from '../data/ability';
import { Abilities } from "#app/data/enums/abilities"; import { Abilities } from '#app/data/enums/abilities';
import PokemonData from '../system/pokemon-data'; import PokemonData from '../system/pokemon-data';
import Battle, { BattlerIndex } from '../battle'; import Battle, { BattlerIndex } from '../battle';
import { BattleSpec } from "../enums/battle-spec"; import { BattleSpec } from '../enums/battle-spec';
import { Mode } from '../ui/ui'; import { Mode } from '../ui/ui';
import PartyUiHandler, { PartyOption, PartyUiMode } from '../ui/party-ui-handler'; import PartyUiHandler, { PartyOption, PartyUiMode } from '../ui/party-ui-handler';
import SoundFade from 'phaser3-rex-plugins/plugins/soundfade'; import SoundFade from 'phaser3-rex-plugins/plugins/soundfade';
@ -301,7 +301,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
const originalWarn = console.warn; const originalWarn = console.warn;
// Ignore warnings for missing frames, because there will be a lot // Ignore warnings for missing frames, because there will be a lot
console.warn = () => {}; console.warn = () => {};
const battleFrameNames = this.scene.anims.generateFrameNames(this.getBattleSpriteKey(), { zeroPad: 4, suffix: ".png", start: 1, end: 400 }); const battleFrameNames = this.scene.anims.generateFrameNames(this.getBattleSpriteKey(), { zeroPad: 4, suffix: '.png', start: 1, end: 400 });
console.warn = originalWarn; console.warn = originalWarn;
this.scene.anims.create({ this.scene.anims.create({
key: this.getBattleSpriteKey(), key: this.getBattleSpriteKey(),
@ -336,7 +336,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
console.error(`Could not load ${res.url}!`); console.error(`Could not load ${res.url}!`);
return; return;
} }
return res.json() return res.json();
}).then(c => { }).then(c => {
variantColorCache[key] = c; variantColorCache[key] = c;
resolve(); resolve();
@ -555,8 +555,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
const newOffset = this.getFieldPositionOffset(); const newOffset = this.getFieldPositionOffset();
let relX = newOffset[0] - initialOffset[0]; const relX = newOffset[0] - initialOffset[0];
let relY = newOffset[1] - initialOffset[1]; const relY = newOffset[1] - initialOffset[1];
if (duration) { if (duration) {
this.scene.tweens.add({ this.scene.tweens.add({
@ -654,9 +654,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
} }
this.scene.applyModifiers(PokemonBaseStatModifier, this.isPlayer(), this, baseStats); this.scene.applyModifiers(PokemonBaseStatModifier, this.isPlayer(), this, baseStats);
const stats = Utils.getEnumValues(Stat); const stats = Utils.getEnumValues(Stat);
for (let s of stats) { for (const s of stats) {
const isHp = s === Stat.HP; const isHp = s === Stat.HP;
let baseStat = baseStats[s]; const baseStat = baseStats[s];
let value = Math.floor(((2 * baseStat + this.ivs[s]) * this.level) * 0.01); let value = Math.floor(((2 * baseStat + this.ivs[s]) * this.level) * 0.01);
if (isHp) { if (isHp) {
value = value + this.level + 10; value = value + this.level + 10;
@ -762,7 +762,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
if (overrideArray.length > 0) { if (overrideArray.length > 0) {
overrideArray.forEach((move: Moves, index: number) => { overrideArray.forEach((move: Moves, index: number) => {
const ppUsed = this.moveset[index]?.ppUsed || 0; const ppUsed = this.moveset[index]?.ppUsed || 0;
this.moveset[index] = new PokemonMove(move, Math.min(ppUsed, allMoves[move].pp)) this.moveset[index] = new PokemonMove(move, Math.min(ppUsed, allMoves[move].pp));
}); });
} }
@ -1025,7 +1025,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
getEvolution(): SpeciesFormEvolution { getEvolution(): SpeciesFormEvolution {
if (pokemonEvolutions.hasOwnProperty(this.species.speciesId)) { if (pokemonEvolutions.hasOwnProperty(this.species.speciesId)) {
const evolutions = pokemonEvolutions[this.species.speciesId]; const evolutions = pokemonEvolutions[this.species.speciesId];
for (let e of evolutions) { for (const e of evolutions) {
if (!e.item && this.level >= e.level && (!e.preFormKey || this.getFormKey() === e.preFormKey)) { if (!e.item && this.level >= e.level && (!e.preFormKey || this.getFormKey() === e.preFormKey)) {
if (e.condition === null || (e.condition as SpeciesEvolutionCondition).predicate(this)) if (e.condition === null || (e.condition as SpeciesEvolutionCondition).predicate(this))
return e; return e;
@ -1035,7 +1035,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
if (this.isFusion() && pokemonEvolutions.hasOwnProperty(this.fusionSpecies.speciesId)) { if (this.isFusion() && pokemonEvolutions.hasOwnProperty(this.fusionSpecies.speciesId)) {
const fusionEvolutions = pokemonEvolutions[this.fusionSpecies.speciesId].map(e => new FusionSpeciesFormEvolution(this.species.speciesId, e)); const fusionEvolutions = pokemonEvolutions[this.fusionSpecies.speciesId].map(e => new FusionSpeciesFormEvolution(this.species.speciesId, e));
for (let fe of fusionEvolutions) { for (const fe of fusionEvolutions) {
if (!fe.item && this.level >= fe.level && (!fe.preFormKey || this.getFusionFormKey() === fe.preFormKey)) { if (!fe.item && this.level >= fe.level && (!fe.preFormKey || this.getFusionFormKey() === fe.preFormKey)) {
if (fe.condition === null || (fe.condition as SpeciesEvolutionCondition).predicate(this)) if (fe.condition === null || (fe.condition as SpeciesEvolutionCondition).predicate(this))
return fe; return fe;
@ -1077,7 +1077,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
while (fusionLevelMoves.length && fusionLevelMoves[0][0] < startingLevel) while (fusionLevelMoves.length && fusionLevelMoves[0][0] < startingLevel)
fusionLevelMoves.shift(); fusionLevelMoves.shift();
if (includeEvolutionMoves) { if (includeEvolutionMoves) {
for (let elm of evolutionLevelMoves.reverse()) for (const elm of evolutionLevelMoves.reverse())
levelMoves.unshift(elm); levelMoves.unshift(elm);
} }
for (let l = includeEvolutionMoves ? 0 : startingLevel; l <= this.level; l++) { for (let l = includeEvolutionMoves ? 0 : startingLevel; l <= this.level; l++) {
@ -1097,7 +1097,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
levelMoves = newLevelMoves; levelMoves = newLevelMoves;
} }
if (levelMoves) { if (levelMoves) {
for (let lm of levelMoves) { for (const lm of levelMoves) {
const level = lm[0]; const level = lm[0];
if ((!includeEvolutionMoves || level) && level < startingLevel) if ((!includeEvolutionMoves || level) && level < startingLevel)
continue; continue;
@ -1124,7 +1124,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
const E = this.scene.gameData.trainerId ^ this.scene.gameData.secretId; const E = this.scene.gameData.trainerId ^ this.scene.gameData.secretId;
const F = rand1 ^ rand2; const F = rand1 ^ rand2;
let shinyThreshold = new Utils.IntegerHolder(32); const shinyThreshold = new Utils.IntegerHolder(32);
if (thresholdOverride === undefined) { if (thresholdOverride === undefined) {
if (!this.hasTrainer()) { if (!this.hasTrainer()) {
if (new Date() < new Date(Date.UTC(2024, 4, 22, 0))) if (new Date() < new Date(Date.UTC(2024, 4, 22, 0)))
@ -1171,7 +1171,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
&& !species.legendary && !species.legendary
&& !species.mythical && !species.mythical
&& !species.isTrainerForbidden() && !species.isTrainerForbidden()
&& species.speciesId !== this.species.speciesId && species.speciesId !== this.species.speciesId;
}; };
this.fusionSpecies = this.scene.randomSpecies(this.scene.currentBattle?.waveIndex || 0, this.level, false, filter, true); this.fusionSpecies = this.scene.randomSpecies(this.scene.currentBattle?.waveIndex || 0, this.level, false, filter, true);
@ -1234,10 +1234,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
if (this.hasTrainer()) { if (this.hasTrainer()) {
const tms = Object.keys(tmSpecies); const tms = Object.keys(tmSpecies);
for (let tm of tms) { for (const tm of tms) {
const moveId = parseInt(tm) as Moves; const moveId = parseInt(tm) as Moves;
let compatible = false; let compatible = false;
for (let p of tmSpecies[tm]) { for (const p of tmSpecies[tm]) {
if (Array.isArray(p)) { if (Array.isArray(p)) {
if (p[0] === this.species.speciesId || (this.fusionSpecies && p[0] === this.fusionSpecies.speciesId) && p.slice(1).indexOf(this.species.forms[this.formIndex]) > -1) { if (p[0] === this.species.speciesId || (this.fusionSpecies && p[0] === this.fusionSpecies.speciesId) && p.slice(1).indexOf(this.species.forms[this.formIndex]) > -1) {
compatible = true; compatible = true;
@ -1450,7 +1450,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
apply(source: Pokemon, battlerMove: PokemonMove): HitResult { apply(source: Pokemon, battlerMove: PokemonMove): HitResult {
let result: HitResult; let result: HitResult;
const move = battlerMove.getMove(); const move = battlerMove.getMove();
let damage = new Utils.NumberHolder(0); const damage = new Utils.NumberHolder(0);
const defendingSidePlayField = this.isPlayer() ? this.scene.getPlayerField() : this.scene.getEnemyField(); const defendingSidePlayField = this.isPlayer() ? this.scene.getPlayerField() : this.scene.getEnemyField();
const variableCategory = new Utils.IntegerHolder(move.category); const variableCategory = new Utils.IntegerHolder(move.category);
@ -1502,7 +1502,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
if (cancelled.value) if (cancelled.value)
result = HitResult.NO_EFFECT; result = HitResult.NO_EFFECT;
else { else {
let typeBoost = source.findTag(t => t instanceof TypeBoostTag && (t as TypeBoostTag).boostedType === type) as TypeBoostTag; const typeBoost = source.findTag(t => t instanceof TypeBoostTag && (t as TypeBoostTag).boostedType === type) as TypeBoostTag;
if (typeBoost) { if (typeBoost) {
power.value *= typeBoost.boostValue; power.value *= typeBoost.boostValue;
if (typeBoost.oneUse) { if (typeBoost.oneUse) {
@ -1559,7 +1559,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
const isTypeImmune = (typeMultiplier.value * arenaAttackTypeMultiplier.value) === 0; const isTypeImmune = (typeMultiplier.value * arenaAttackTypeMultiplier.value) === 0;
const sourceTypes = source.getTypes(); const sourceTypes = source.getTypes();
const matchesSourceType = sourceTypes[0] === type || (sourceTypes.length > 1 && sourceTypes[1] === type); const matchesSourceType = sourceTypes[0] === type || (sourceTypes.length > 1 && sourceTypes[1] === type);
let stabMultiplier = new Utils.NumberHolder(1); const stabMultiplier = new Utils.NumberHolder(1);
if (sourceTeraType === Type.UNKNOWN && matchesSourceType) if (sourceTeraType === Type.UNKNOWN && matchesSourceType)
stabMultiplier.value += 0.5; stabMultiplier.value += 0.5;
else if (sourceTeraType !== Type.UNKNOWN && sourceTeraType === type) else if (sourceTeraType !== Type.UNKNOWN && sourceTeraType === type)
@ -1666,7 +1666,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
const attackResult = { move: move.id, result: result as DamageResult, damage: damage.value, critical: isCritical, sourceId: source.id }; const attackResult = { move: move.id, result: result as DamageResult, damage: damage.value, critical: isCritical, sourceId: source.id };
this.turnData.attacksReceived.unshift(attackResult); this.turnData.attacksReceived.unshift(attackResult);
if (source.isPlayer() && !this.isPlayer()) if (source.isPlayer() && !this.isPlayer())
this.scene.applyModifiers(DamageMoneyRewardModifier, true, source, damage) this.scene.applyModifiers(DamageMoneyRewardModifier, true, source, damage);
} }
if (source.turnData.hitsLeft === 1) { if (source.turnData.hitsLeft === 1) {
@ -1716,9 +1716,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
if (!preventEndure && this.hp - damage <= 0) { if (!preventEndure && this.hp - damage <= 0) {
if(this.hp >= 1 && this.getTag(BattlerTagType.ENDURING)) if(this.hp >= 1 && this.getTag(BattlerTagType.ENDURING))
surviveDamage.value = this.lapseTag(BattlerTagType.ENDURING) surviveDamage.value = this.lapseTag(BattlerTagType.ENDURING);
else if (this.hp > 1 && this.getTag(BattlerTagType.STURDY)) else if (this.hp > 1 && this.getTag(BattlerTagType.STURDY))
surviveDamage.value = this.lapseTag(BattlerTagType.STURDY) surviveDamage.value = this.lapseTag(BattlerTagType.STURDY);
if (!surviveDamage.value) if (!surviveDamage.value)
this.scene.applyModifiers(SurviveDamageModifier, this.isPlayer(), this, surviveDamage); this.scene.applyModifiers(SurviveDamageModifier, this.isPlayer(), this, surviveDamage);
if (surviveDamage.value) if (surviveDamage.value)
@ -1844,7 +1844,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
return false; return false;
const tags = this.summonData.tags; const tags = this.summonData.tags;
const tagsToRemove = tags.filter(t => tagFilter(t)); const tagsToRemove = tags.filter(t => tagFilter(t));
for (let tag of tagsToRemove) { for (const tag of tagsToRemove) {
tag.turnCount = 0; tag.turnCount = 0;
tag.onRemove(this); tag.onRemove(this);
tags.splice(tags.indexOf(tag), 1); tags.splice(tags.indexOf(tag), 1);
@ -1865,9 +1865,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
transferSummon(source: Pokemon): void { transferSummon(source: Pokemon): void {
const battleStats = Utils.getEnumValues(BattleStat); const battleStats = Utils.getEnumValues(BattleStat);
for (let stat of battleStats) for (const stat of battleStats)
this.summonData.battleStats[stat] = source.summonData.battleStats[stat]; this.summonData.battleStats[stat] = source.summonData.battleStats[stat];
for (let tag of source.summonData.tags) for (const tag of source.summonData.tags)
this.summonData.tags.push(tag); this.summonData.tags.push(tag);
if (this instanceof PlayerPokemon && source.summonData.battleStats.find(bs => bs === 6)) if (this instanceof PlayerPokemon && source.summonData.battleStats.find(bs => bs === 6))
this.scene.validateAchv(achvs.TRANSFER_MAX_BATTLE_STAT); this.scene.validateAchv(achvs.TRANSFER_MAX_BATTLE_STAT);
@ -1992,7 +1992,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
const key = this.getSpeciesForm().getCryKey(this.formIndex); const key = this.getSpeciesForm().getCryKey(this.formIndex);
let i = 0; let i = 0;
let rate = 0.85; let rate = 0.85;
let cry = this.scene.playSound(key, { rate: rate }) as AnySound; const cry = this.scene.playSound(key, { rate: rate }) as AnySound;
const sprite = this.getSprite(); const sprite = this.getSprite();
const tintSprite = this.getTintSprite(); const tintSprite = this.getTintSprite();
let duration = cry.totalDuration * 1000; let duration = cry.totalDuration * 1000;
@ -2090,7 +2090,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
case StatusEffect.POISON: case StatusEffect.POISON:
case StatusEffect.TOXIC: case StatusEffect.TOXIC:
// Check if the Pokemon is immune to Poison/Toxic or if the source pokemon is canceling the immunity // Check if the Pokemon is immune to Poison/Toxic or if the source pokemon is canceling the immunity
let poisonImmunity = types.map(defType => { const poisonImmunity = types.map(defType => {
// Check if the Pokemon is not immune to Poison/Toxic // Check if the Pokemon is not immune to Poison/Toxic
if (defType !== Type.POISON && defType !== Type.STEEL) if (defType !== Type.POISON && defType !== Type.STEEL)
return false; return false;
@ -2104,7 +2104,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
} }
return true; return true;
}) });
if (this.isOfType(Type.POISON) || this.isOfType(Type.STEEL)) { if (this.isOfType(Type.POISON) || this.isOfType(Type.STEEL)) {
if (poisonImmunity.includes(true)) if (poisonImmunity.includes(true))
@ -2210,7 +2210,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
this.resetBattleData(); this.resetBattleData();
this.resetBattleSummonData(); this.resetBattleSummonData();
if (this.summonDataPrimer) { if (this.summonDataPrimer) {
for (let k of Object.keys(this.summonData)) { for (const k of Object.keys(this.summonData)) {
if (this.summonDataPrimer[k]) if (this.summonDataPrimer[k])
this.summonData[k] = this.summonDataPrimer[k]; this.summonData[k] = this.summonDataPrimer[k];
} }
@ -2357,7 +2357,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
for (let f = 0; f < 2; f++) { for (let f = 0; f < 2; f++) {
const variantColors = variantColorCache[!f ? spriteKey : backSpriteKey]; const variantColors = variantColorCache[!f ? spriteKey : backSpriteKey];
let variantColorSet = new Map<integer, integer[]>(); const variantColorSet = new Map<integer, integer[]>();
if (this.shiny && variantColors && variantColors[this.variant]) { if (this.shiny && variantColors && variantColors[this.variant]) {
Object.keys(variantColors[this.variant]).forEach(k => { Object.keys(variantColors[this.variant]).forEach(k => {
variantColorSet.set(Utils.rgbaToInt(Array.from(Object.values(Utils.rgbHexToRgba(k)))), Array.from(Object.values(Utils.rgbHexToRgba(variantColors[this.variant][k])))); variantColorSet.set(Utils.rgbaToInt(Array.from(Object.values(Utils.rgbHexToRgba(k)))), Array.from(Object.values(Utils.rgbHexToRgba(variantColors[this.variant][k]))));
@ -2396,7 +2396,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
const fusionPixelColors = []; const fusionPixelColors = [];
for (let f = 0; f < 2; f++) { for (let f = 0; f < 2; f++) {
const variantColors = variantColorCache[!f ? fusionSpriteKey : fusionBackSpriteKey]; const variantColors = variantColorCache[!f ? fusionSpriteKey : fusionBackSpriteKey];
let variantColorSet = new Map<integer, integer[]>(); const variantColorSet = new Map<integer, integer[]>();
if (this.fusionShiny && variantColors && variantColors[this.fusionVariant]) { if (this.fusionShiny && variantColors && variantColors[this.fusionVariant]) {
Object.keys(variantColors[this.fusionVariant]).forEach(k => { Object.keys(variantColors[this.fusionVariant]).forEach(k => {
variantColorSet.set(Utils.rgbaToInt(Array.from(Object.values(Utils.rgbHexToRgba(k)))), Array.from(Object.values(Utils.rgbHexToRgba(variantColors[this.fusionVariant][k])))); variantColorSet.set(Utils.rgbaToInt(Array.from(Object.values(Utils.rgbHexToRgba(k)))), Array.from(Object.values(Utils.rgbHexToRgba(variantColors[this.fusionVariant][k]))));
@ -2467,9 +2467,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
mappedColors.forEach((values: integer[], key: integer) => { mappedColors.forEach((values: integer[], key: integer) => {
const keyColor = rgbaColors.get(key); const keyColor = rgbaColors.get(key);
const valueColors = values.map(v => rgbaColors.get(v)); const valueColors = values.map(v => rgbaColors.get(v));
let color = keyColor.slice(0); const color = keyColor.slice(0);
let count = paletteColors.get(key); let count = paletteColors.get(key);
for (let value of values) { for (const value of values) {
const valueCount = paletteColors.get(value); const valueCount = paletteColors.get(value);
if (!valueCount) if (!valueCount)
continue; continue;
@ -2488,7 +2488,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
} }
paletteColors.delete(key); paletteColors.delete(key);
for (let value of values) { for (const value of values) {
paletteColors.delete(value); paletteColors.delete(value);
if (mappedColors.has(value)) if (mappedColors.has(value))
mappedColors.delete(value); mappedColors.delete(value);
@ -2500,7 +2500,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
keys = Array.from(paletteColors.keys()).sort((a: integer, b: integer) => paletteColors.get(a) < paletteColors.get(b) ? 1 : -1); keys = Array.from(paletteColors.keys()).sort((a: integer, b: integer) => paletteColors.get(a) < paletteColors.get(b) ? 1 : -1);
} while (mappedColors.size); } while (mappedColors.size);
return keys.map(c => Object.values(rgbaFromArgb(c))) return keys.map(c => Object.values(rgbaFromArgb(c)));
} }
); );
@ -2519,7 +2519,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
const paletteIndex = Math.min(paletteDeltas[sc].findIndex(pd => pd === delta), fusionPalette.length - 1); const paletteIndex = Math.min(paletteDeltas[sc].findIndex(pd => pd === delta), fusionPalette.length - 1);
if (delta < 255) { if (delta < 255) {
const ratio = easeFunc(delta / 255); const ratio = easeFunc(delta / 255);
let color = [ 0, 0, 0, fusionSpriteColors[sc][3] ]; const color = [ 0, 0, 0, fusionSpriteColors[sc][3] ];
for (let c = 0; c < 3; c++) for (let c = 0; c < 3; c++)
color[c] = Math.round((fusionSpriteColors[sc][c] * ratio) + (fusionPalette[paletteIndex][c] * (1 - ratio))); color[c] = Math.round((fusionSpriteColors[sc][c] * ratio) + (fusionPalette[paletteIndex][c] * (1 - ratio)));
fusionSpriteColors[sc] = color; fusionSpriteColors[sc] = color;
@ -2602,10 +2602,10 @@ export class PlayerPokemon extends Pokemon {
this.compatibleTms = []; this.compatibleTms = [];
const tms = Object.keys(tmSpecies); const tms = Object.keys(tmSpecies);
for (let tm of tms) { for (const tm of tms) {
const moveId = parseInt(tm) as Moves; const moveId = parseInt(tm) as Moves;
let compatible = false; let compatible = false;
for (let p of tmSpecies[tm]) { for (const p of tmSpecies[tm]) {
if (Array.isArray(p)) { if (Array.isArray(p)) {
if (p[0] === this.species.speciesId || (this.fusionSpecies && p[0] === this.fusionSpecies.speciesId) && p.slice(1).indexOf(this.species.forms[this.formIndex]) > -1) { if (p[0] === this.species.speciesId || (this.fusionSpecies && p[0] === this.fusionSpecies.speciesId) && p.slice(1).indexOf(this.species.forms[this.formIndex]) > -1) {
compatible = true; compatible = true;
@ -2679,7 +2679,7 @@ export class PlayerPokemon extends Pokemon {
}); });
} else { } else {
this.friendship = Math.max(this.friendship + amount.value, 0); this.friendship = Math.max(this.friendship + amount.value, 0);
for (let sd of starterData) for (const sd of starterData)
sd.friendship = Math.max((sd.friendship || 0) + starterAmount.value, 0); sd.friendship = Math.max((sd.friendship || 0) + starterAmount.value, 0);
} }
} }
@ -2716,8 +2716,8 @@ export class PlayerPokemon extends Pokemon {
} }
this.scene.ui.setMode(Mode.MESSAGE).then(() => resolve()); this.scene.ui.setMode(Mode.MESSAGE).then(() => resolve());
}, PartyUiHandler.FilterFainted) }, PartyUiHandler.FilterFainted);
}) });
} }
getPossibleEvolution(evolution: SpeciesFormEvolution): Promise<Pokemon> { getPossibleEvolution(evolution: SpeciesFormEvolution): Promise<Pokemon> {
@ -2787,7 +2787,7 @@ export class PlayerPokemon extends Pokemon {
private handleSpecialEvolutions(evolution: SpeciesFormEvolution) { private handleSpecialEvolutions(evolution: SpeciesFormEvolution) {
const isFusion = evolution instanceof FusionSpeciesFormEvolution; const isFusion = evolution instanceof FusionSpeciesFormEvolution;
const evoSpecies = (!isFusion ? this.species : this.fusionSpecies) const evoSpecies = (!isFusion ? this.species : this.fusionSpecies);
if (evoSpecies.speciesId === Species.NINCADA && evolution.speciesId === Species.NINJASK) { if (evoSpecies.speciesId === Species.NINCADA && evolution.speciesId === Species.NINJASK) {
const newEvolution = pokemonEvolutions[evoSpecies.speciesId][1]; const newEvolution = pokemonEvolutions[evoSpecies.speciesId][1];
@ -2902,7 +2902,7 @@ export class PlayerPokemon extends Pokemon {
const fusedPartyMemberHeldModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier const fusedPartyMemberHeldModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier
&& (m as PokemonHeldItemModifier).pokemonId === pokemon.id, true) as PokemonHeldItemModifier[]; && (m as PokemonHeldItemModifier).pokemonId === pokemon.id, true) as PokemonHeldItemModifier[];
const transferModifiers: Promise<boolean>[] = []; const transferModifiers: Promise<boolean>[] = [];
for (let modifier of fusedPartyMemberHeldModifiers) for (const modifier of fusedPartyMemberHeldModifiers)
transferModifiers.push(this.scene.tryTransferHeldItemModifier(modifier, this, true, false, true, true)); transferModifiers.push(this.scene.tryTransferHeldItemModifier(modifier, this, true, false, true, true));
Promise.allSettled(transferModifiers).then(() => { Promise.allSettled(transferModifiers).then(() => {
this.scene.updateModifiers(true, true).then(() => { this.scene.updateModifiers(true, true).then(() => {
@ -2929,7 +2929,7 @@ export class PlayerPokemon extends Pokemon {
/** Returns a deep copy of this Pokemon's moveset array */ /** Returns a deep copy of this Pokemon's moveset array */
copyMoveset(): PokemonMove[] { copyMoveset(): PokemonMove[] {
let newMoveset = []; const newMoveset = [];
this.moveset.forEach(move => this.moveset.forEach(move =>
newMoveset.push(new PokemonMove(move.moveId, 0, move.ppUp, move.virtual))); newMoveset.push(new PokemonMove(move.moveId, 0, move.ppUp, move.virtual)));
@ -3061,7 +3061,7 @@ export class EnemyPokemon extends Pokemon {
case AiType.SMART: case AiType.SMART:
const moveScores = movePool.map(() => 0); const moveScores = movePool.map(() => 0);
const moveTargets = Object.fromEntries(movePool.map(m => [ m.moveId, this.getNextTargets(m.moveId) ])); const moveTargets = Object.fromEntries(movePool.map(m => [ m.moveId, this.getNextTargets(m.moveId) ]));
for (let m in movePool) { for (const m in movePool) {
const pokemonMove = movePool[m]; const pokemonMove = movePool[m];
const move = pokemonMove.getMove(); const move = pokemonMove.getMove();
@ -3070,9 +3070,9 @@ export class EnemyPokemon extends Pokemon {
const moveType = variableType.value as Type; const moveType = variableType.value as Type;
let moveScore = moveScores[m]; let moveScore = moveScores[m];
let targetScores: integer[] = []; const targetScores: integer[] = [];
for (let mt of moveTargets[move.id]) { for (const mt of moveTargets[move.id]) {
// Prevent a target score from being calculated when the target is whoever attacks the user // Prevent a target score from being calculated when the target is whoever attacks the user
if (mt === BattlerIndex.ATTACKER) if (mt === BattlerIndex.ATTACKER)
break; break;
@ -3252,7 +3252,7 @@ export class EnemyPokemon extends Pokemon {
damage = Math.min(damage, this.hp - 1); damage = Math.min(damage, this.hp - 1);
} }
let ret = super.damage(damage, ignoreSegments, preventEndure); const ret = super.damage(damage, ignoreSegments, preventEndure);
if (this.isBoss()) { if (this.isBoss()) {
if (ignoreSegments) { if (ignoreSegments) {
@ -3284,14 +3284,14 @@ export class EnemyPokemon extends Pokemon {
const statWeights = new Array().fill(battleStats.length).filter((bs: BattleStat) => this.summonData.battleStats[bs] < 6).map((bs: BattleStat) => this.getStat(bs + 1)); const statWeights = new Array().fill(battleStats.length).filter((bs: BattleStat) => this.summonData.battleStats[bs] < 6).map((bs: BattleStat) => this.getStat(bs + 1));
const statThresholds: integer[] = []; const statThresholds: integer[] = [];
let totalWeight = 0; let totalWeight = 0;
for (let bs of battleStats) { for (const bs of battleStats) {
totalWeight += statWeights[bs]; totalWeight += statWeights[bs];
statThresholds.push(totalWeight); statThresholds.push(totalWeight);
} }
const randInt = Utils.randSeedInt(totalWeight); const randInt = Utils.randSeedInt(totalWeight);
for (let bs of battleStats) { for (const bs of battleStats) {
if (randInt < statThresholds[bs]) { if (randInt < statThresholds[bs]) {
boostedStat = bs; boostedStat = bs;
break; break;
@ -3319,8 +3319,8 @@ export class EnemyPokemon extends Pokemon {
heal(amount: integer): integer { heal(amount: integer): integer {
if (this.isBoss()) { if (this.isBoss()) {
let amountRatio = amount / this.getMaxHp(); const amountRatio = amount / this.getMaxHp();
let segmentBypassCount = Math.floor(amountRatio / (1 / this.bossSegments)); const segmentBypassCount = Math.floor(amountRatio / (1 / this.bossSegments));
const segmentSize = this.getMaxHp() / this.bossSegments; const segmentSize = this.getMaxHp() / this.bossSegments;
for (let s = 1; s < this.bossSegments; s++) { for (let s = 1; s < this.bossSegments; s++) {
const hpThreshold = segmentSize * s; const hpThreshold = segmentSize * s;

View File

@ -1,17 +1,17 @@
import BattleScene from "../battle-scene"; import BattleScene from '../battle-scene';
import { pokemonPrevolutions } from "../data/pokemon-evolutions"; import { pokemonPrevolutions } from '../data/pokemon-evolutions';
import PokemonSpecies, { getPokemonSpecies } from "../data/pokemon-species"; import PokemonSpecies, { getPokemonSpecies } from '../data/pokemon-species';
import { TrainerConfig, TrainerPartyCompoundTemplate, TrainerPartyTemplate, TrainerPoolTier, TrainerSlot, trainerConfigs, trainerPartyTemplates } from "../data/trainer-config"; import { TrainerConfig, TrainerPartyCompoundTemplate, TrainerPartyTemplate, TrainerPoolTier, TrainerSlot, trainerConfigs, trainerPartyTemplates } from '../data/trainer-config';
import { PartyMemberStrength } from "../data/enums/party-member-strength"; import { PartyMemberStrength } from '../data/enums/party-member-strength';
import { TrainerType } from "../data/enums/trainer-type"; import { TrainerType } from '../data/enums/trainer-type';
import { EnemyPokemon } from "./pokemon"; import { EnemyPokemon } from './pokemon';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { PersistentModifier } from "../modifier/modifier"; import { PersistentModifier } from '../modifier/modifier';
import { trainerNamePools } from "../data/trainer-names"; import { trainerNamePools } from '../data/trainer-names';
import { ArenaTagType } from "#app/data/enums/arena-tag-type"; import { ArenaTagType } from '#app/data/enums/arena-tag-type';
import { ArenaTag, ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; import { ArenaTag, ArenaTagSide, ArenaTrapTag } from '#app/data/arena-tag';
import {getIsInitialized, initI18n} from "#app/plugins/i18n"; import {getIsInitialized, initI18n} from '#app/plugins/i18n';
import i18next from "i18next"; import i18next from 'i18next';
export enum TrainerVariant { export enum TrainerVariant {
DEFAULT, DEFAULT,
@ -179,7 +179,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
const partyTemplate = this.getPartyTemplate(); const partyTemplate = this.getPartyTemplate();
const difficultyWaveIndex = this.scene.gameMode.getWaveForDifficulty(waveIndex); const difficultyWaveIndex = this.scene.gameMode.getWaveForDifficulty(waveIndex);
let baseLevel = 1 + difficultyWaveIndex / 2 + Math.pow(difficultyWaveIndex / 25, 2); const baseLevel = 1 + difficultyWaveIndex / 2 + Math.pow(difficultyWaveIndex / 25, 2);
if (this.isDouble() && partyTemplate.size < 2) if (this.isDouble() && partyTemplate.size < 2)
partyTemplate.size = 2; partyTemplate.size = 2;
@ -243,7 +243,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
let offset = 0; let offset = 0;
if (template instanceof TrainerPartyCompoundTemplate) { if (template instanceof TrainerPartyCompoundTemplate) {
for (let innerTemplate of template.templates) { for (const innerTemplate of template.templates) {
if (offset + innerTemplate.size > index) if (offset + innerTemplate.size > index)
break; break;
offset += innerTemplate.size; offset += innerTemplate.size;
@ -267,7 +267,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
let species: PokemonSpecies; let species: PokemonSpecies;
if (this.config.speciesPools) { if (this.config.speciesPools) {
const tierValue = Utils.randSeedInt(512); const tierValue = Utils.randSeedInt(512);
let tier = tierValue >= 156 ? TrainerPoolTier.COMMON : tierValue >= 32 ? TrainerPoolTier.UNCOMMON : tierValue >= 6 ? TrainerPoolTier.RARE : tierValue >= 1 ? TrainerPoolTier.SUPER_RARE : TrainerPoolTier.ULTRA_RARE let tier = tierValue >= 156 ? TrainerPoolTier.COMMON : tierValue >= 32 ? TrainerPoolTier.UNCOMMON : tierValue >= 6 ? TrainerPoolTier.RARE : tierValue >= 1 ? TrainerPoolTier.SUPER_RARE : TrainerPoolTier.ULTRA_RARE;
console.log(TrainerPoolTier[tier]); console.log(TrainerPoolTier[tier]);
while (!this.config.speciesPools.hasOwnProperty(tier) || !this.config.speciesPools[tier].length) { while (!this.config.speciesPools.hasOwnProperty(tier) || !this.config.speciesPools[tier].length) {
console.log(`Downgraded trainer Pokemon rarity tier from ${TrainerPoolTier[tier]} to ${TrainerPoolTier[tier - 1]}`); console.log(`Downgraded trainer Pokemon rarity tier from ${TrainerPoolTier[tier]} to ${TrainerPoolTier[tier - 1]}`);
@ -304,7 +304,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
} }
if (retry && (attempt || 0) < 10) { if (retry && (attempt || 0) < 10) {
console.log('Rerolling party member...') console.log('Rerolling party member...');
ret = this.genNewPartyMemberSpecies(level, strength, (attempt || 0) + 1); ret = this.genNewPartyMemberSpecies(level, strength, (attempt || 0) + 1);
} }
@ -321,7 +321,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
const playerField = this.scene.getPlayerField(); const playerField = this.scene.getPlayerField();
let score = 0; let score = 0;
let ret: [integer, integer]; let ret: [integer, integer];
for (let playerPokemon of playerField) { for (const playerPokemon of playerField) {
score += p.getMatchupScore(playerPokemon); score += p.getMatchupScore(playerPokemon);
if (playerPokemon.species.legendary) if (playerPokemon.species.legendary)
score /= 2; score /= 2;

View File

@ -1,15 +1,15 @@
import BattleScene from "./battle-scene"; import BattleScene from './battle-scene';
import * as Utils from "./utils"; import * as Utils from './utils';
import { SpeciesFormKey } from "./data/pokemon-species"; import { SpeciesFormKey } from './data/pokemon-species';
import { achvs } from "./system/achv"; import { achvs } from './system/achv';
import { SpeciesFormChange, getSpeciesFormChangeMessage } from "./data/pokemon-forms"; import { SpeciesFormChange, getSpeciesFormChangeMessage } from './data/pokemon-forms';
import { EndEvolutionPhase, EvolutionPhase } from "./evolution-phase"; import { EndEvolutionPhase, EvolutionPhase } from './evolution-phase';
import Pokemon, { EnemyPokemon, PlayerPokemon } from "./field/pokemon"; import Pokemon, { EnemyPokemon, PlayerPokemon } from './field/pokemon';
import { Mode } from "./ui/ui"; import { Mode } from './ui/ui';
import PartyUiHandler from "./ui/party-ui-handler"; import PartyUiHandler from './ui/party-ui-handler';
import { BattleSpec } from "./enums/battle-spec"; import { BattleSpec } from './enums/battle-spec';
import { BattlePhase, MovePhase, PokemonHealPhase } from "./phases"; import { BattlePhase, MovePhase, PokemonHealPhase } from './phases';
import { getTypeRgb } from "./data/type"; import { getTypeRgb } from './data/type';
export class FormChangePhase extends EvolutionPhase { export class FormChangePhase extends EvolutionPhase {
private formChange: SpeciesFormChange; private formChange: SpeciesFormChange;
@ -147,7 +147,7 @@ export class FormChangePhase extends EvolutionPhase {
}); });
}); });
} }
}) });
} }
}); });
}); });
@ -196,7 +196,7 @@ export class QuietFormChangePhase extends BattlePhase {
} }
const getPokemonSprite = () => { const getPokemonSprite = () => {
const sprite = this.scene.addPokemonSprite(this.pokemon, this.pokemon.x + this.pokemon.getSprite().x, this.pokemon.y + this.pokemon.getSprite().y, `pkmn__sub`); const sprite = this.scene.addPokemonSprite(this.pokemon, this.pokemon.x + this.pokemon.getSprite().x, this.pokemon.y + this.pokemon.getSprite().y, 'pkmn__sub');
sprite.setOrigin(0.5, 1); sprite.setOrigin(0.5, 1);
sprite.play(this.pokemon.getBattleSpriteKey()).stop(); sprite.play(this.pokemon.getBattleSpriteKey()).stop();
sprite.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: false, teraColor: getTypeRgb(this.pokemon.getTeraType()) }); sprite.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: false, teraColor: getTypeRgb(this.pokemon.getTeraType()) });
@ -207,7 +207,7 @@ export class QuietFormChangePhase extends BattlePhase {
}); });
this.scene.field.add(sprite); this.scene.field.add(sprite);
return sprite; return sprite;
} };
const [ pokemonTintSprite, pokemonFormTintSprite ] = [ getPokemonSprite(), getPokemonSprite() ]; const [ pokemonTintSprite, pokemonFormTintSprite ] = [ getPokemonSprite(), getPokemonSprite() ];

View File

@ -1,10 +1,10 @@
import { fixedBattles } from "./battle"; import { fixedBattles } from './battle';
import BattleScene from "./battle-scene"; import BattleScene from './battle-scene';
import { Biome } from "./data/enums/biome"; import { Biome } from './data/enums/biome';
import { Species } from "./data/enums/species"; import { Species } from './data/enums/species';
import PokemonSpecies, { allSpecies } from "./data/pokemon-species"; import PokemonSpecies, { allSpecies } from './data/pokemon-species';
import { Arena } from "./field/arena"; import { Arena } from './field/arena';
import * as Utils from "./utils"; import * as Utils from './utils';
import * as Overrides from './overrides'; import * as Overrides from './overrides';
export enum GameModes { export enum GameModes {

View File

@ -1,11 +1,11 @@
import Phaser, {Time} from "phaser"; import Phaser, {Time} from 'phaser';
import * as Utils from "./utils"; import * as Utils from './utils';
import {initTouchControls} from './touch-controls'; import {initTouchControls} from './touch-controls';
import pad_generic from "./configs/pad_generic"; import pad_generic from './configs/pad_generic';
import pad_unlicensedSNES from "./configs/pad_unlicensedSNES"; import pad_unlicensedSNES from './configs/pad_unlicensedSNES';
import pad_xbox360 from "./configs/pad_xbox360"; import pad_xbox360 from './configs/pad_xbox360';
import pad_dualshock from "./configs/pad_dualshock"; import pad_dualshock from './configs/pad_dualshock';
import {Button} from "./enums/buttons"; import {Button} from './enums/buttons';
export interface GamepadMapping { export interface GamepadMapping {
[key: string]: number; [key: string]: number;
@ -79,7 +79,7 @@ export class InputsController {
pressTime: false, pressTime: false,
isPressed: false, isPressed: false,
source: null, source: null,
} };
} }
// We don't want the menu key to be repeated // We don't want the menu key to be repeated
delete this.interactions[Button.MENU]; delete this.interactions[Button.MENU];
@ -98,8 +98,8 @@ export class InputsController {
init(): void { init(): void {
this.events = new Phaser.Events.EventEmitter(); this.events = new Phaser.Events.EventEmitter();
this.scene.game.events.on(Phaser.Core.Events.BLUR, () => { this.scene.game.events.on(Phaser.Core.Events.BLUR, () => {
this.loseFocus() this.loseFocus();
}) });
if (typeof this.scene.input.gamepad !== 'undefined') { if (typeof this.scene.input.gamepad !== 'undefined') {
this.scene.input.gamepad.on('connected', function (thisGamepad) { this.scene.input.gamepad.on('connected', function (thisGamepad) {
@ -199,7 +199,7 @@ export class InputsController {
* that the gamepad controls are correctly mapped to in-game actions. * that the gamepad controls are correctly mapped to in-game actions.
*/ */
setupGamepad(thisGamepad: Phaser.Input.Gamepad.Gamepad): void { setupGamepad(thisGamepad: Phaser.Input.Gamepad.Gamepad): void {
let gamepadID = thisGamepad.id.toLowerCase(); const gamepadID = thisGamepad.id.toLowerCase();
const mappedPad = this.mapGamepad(gamepadID); const mappedPad = this.mapGamepad(gamepadID);
this.player['mapping'] = mappedPad.gamepadMapping; this.player['mapping'] = mappedPad.gamepadMapping;
} }
@ -353,7 +353,7 @@ export class InputsController {
for (const b of Utils.getEnumValues(Button)) { for (const b of Utils.getEnumValues(Button)) {
const keys: Phaser.Input.Keyboard.Key[] = []; const keys: Phaser.Input.Keyboard.Key[] = [];
if (keyConfig.hasOwnProperty(b)) { if (keyConfig.hasOwnProperty(b)) {
for (let k of keyConfig[b]) for (const k of keyConfig[b])
keys.push(this.scene.input.keyboard.addKey(k, false)); keys.push(this.scene.input.keyboard.addKey(k, false));
mobileKeyConfig[Button[b]] = keys[0]; mobileKeyConfig[Button[b]] = keys[0];
} }

View File

@ -1,14 +1,14 @@
import { GachaType } from "./data/egg"; import { GachaType } from './data/egg';
import { Biome } from "./data/enums/biome"; import { Biome } from './data/enums/biome';
import { TrainerType } from "./data/enums/trainer-type"; import { TrainerType } from './data/enums/trainer-type';
import { trainerConfigs } from "./data/trainer-config"; import { trainerConfigs } from './data/trainer-config';
import { getBiomeHasProps } from "./field/arena"; import { getBiomeHasProps } from './field/arena';
import CacheBustedLoaderPlugin from "./plugins/cache-busted-loader-plugin"; import CacheBustedLoaderPlugin from './plugins/cache-busted-loader-plugin';
import { SceneBase } from "./scene-base"; import { SceneBase } from './scene-base';
import { WindowVariant, getWindowVariantSuffix } from "./ui/ui-theme"; import { WindowVariant, getWindowVariantSuffix } from './ui/ui-theme';
import { isMobile } from "./touch-controls"; import { isMobile } from './touch-controls';
import * as Utils from "./utils"; import * as Utils from './utils';
import { initI18n } from "./plugins/i18n"; import { initI18n } from './plugins/i18n';
export class LoadingScene extends SceneBase { export class LoadingScene extends SceneBase {
constructor() { constructor() {
@ -35,7 +35,7 @@ export class LoadingScene extends SceneBase {
this.loadImage('candy_overlay', 'ui'); this.loadImage('candy_overlay', 'ui');
this.loadImage('cursor', 'ui'); this.loadImage('cursor', 'ui');
this.loadImage('cursor_reverse', 'ui'); this.loadImage('cursor_reverse', 'ui');
for (let wv of Utils.getEnumValues(WindowVariant)) { for (const wv of Utils.getEnumValues(WindowVariant)) {
for (let w = 1; w <= 5; w++) for (let w = 1; w <= 5; w++)
this.loadImage(`window_${w}${getWindowVariantSuffix(wv)}`, 'ui/windows'); this.loadImage(`window_${w}${getWindowVariantSuffix(wv)}`, 'ui/windows');
} }
@ -100,7 +100,7 @@ export class LoadingScene extends SceneBase {
this.loadImage('summary_bg', 'ui'); this.loadImage('summary_bg', 'ui');
this.loadImage('summary_overlay_shiny', 'ui'); this.loadImage('summary_overlay_shiny', 'ui');
this.loadImage('summary_profile', 'ui'); this.loadImage('summary_profile', 'ui');
this.loadImage('summary_profile_prompt_z', 'ui') // The pixel Z button prompt this.loadImage('summary_profile_prompt_z', 'ui'); // The pixel Z button prompt
this.loadImage('summary_profile_prompt_a', 'ui'); // The pixel A button prompt this.loadImage('summary_profile_prompt_a', 'ui'); // The pixel A button prompt
this.loadImage('summary_profile_ability', 'ui'); // Pixel text 'ABILITY' this.loadImage('summary_profile_ability', 'ui'); // Pixel text 'ABILITY'
this.loadImage('summary_profile_passive', 'ui'); // Pixel text 'PASSIVE' this.loadImage('summary_profile_passive', 'ui'); // Pixel text 'PASSIVE'
@ -174,8 +174,8 @@ export class LoadingScene extends SceneBase {
this.loadAtlas('c_rival_f', 'character', 'rival_f'); this.loadAtlas('c_rival_f', 'character', 'rival_f');
// Load pokemon-related images // Load pokemon-related images
this.loadImage(`pkmn__back__sub`, 'pokemon/back', 'sub.png'); this.loadImage('pkmn__back__sub', 'pokemon/back', 'sub.png');
this.loadImage(`pkmn__sub`, 'pokemon', 'sub.png'); this.loadImage('pkmn__sub', 'pokemon', 'sub.png');
this.loadAtlas('battle_stats', 'effects'); this.loadAtlas('battle_stats', 'effects');
this.loadAtlas('shiny', 'effects'); this.loadAtlas('shiny', 'effects');
this.loadAtlas('shiny_2', 'effects'); this.loadAtlas('shiny_2', 'effects');
@ -310,8 +310,8 @@ export class LoadingScene extends SceneBase {
y: height / 2 - 24, y: height / 2 - 24,
text: '0%', text: '0%',
style: { style: {
font: "72px emerald", font: '72px emerald',
color: "#ffffff", color: '#ffffff',
}, },
}); });
percentText.setOrigin(0.5, 0.5); percentText.setOrigin(0.5, 0.5);
@ -319,10 +319,10 @@ export class LoadingScene extends SceneBase {
const assetText = this.make.text({ const assetText = this.make.text({
x: width / 2, x: width / 2,
y: height / 2 + 48, y: height / 2 + 48,
text: "", text: '',
style: { style: {
font: "48px emerald", font: '48px emerald',
color: "#ffffff", color: '#ffffff',
}, },
}); });
assetText.setOrigin(0.5, 0.5); assetText.setOrigin(0.5, 0.5);
@ -331,7 +331,7 @@ export class LoadingScene extends SceneBase {
intro.setOrigin(0, 0); intro.setOrigin(0, 0);
intro.setScale(3); intro.setScale(3);
this.load.on("progress", (value: string) => { this.load.on('progress', (value: string) => {
const parsedValue = parseFloat(value); const parsedValue = parseFloat(value);
percentText.setText(`${Math.floor(parsedValue * 100)}%`); percentText.setText(`${Math.floor(parsedValue * 100)}%`);
progressBar.clear(); progressBar.clear();
@ -339,7 +339,7 @@ export class LoadingScene extends SceneBase {
progressBar.fillRect(width / 2 - 320, 360, 640 * parsedValue, 64); progressBar.fillRect(width / 2 - 320, 360, 640 * parsedValue, 64);
}); });
this.load.on("fileprogress", file => { this.load.on('fileprogress', file => {
assetText.setText(`Loading asset: ${file.key}`); assetText.setText(`Loading asset: ${file.key}`);
}); });
@ -386,7 +386,7 @@ export class LoadingScene extends SceneBase {
} }
}); });
this.load.on("complete", () => destroyLoadingAssets()); this.load.on('complete', () => destroyLoadingAssets());
} }
get gameHeight() { get gameHeight() {
@ -398,6 +398,6 @@ export class LoadingScene extends SceneBase {
} }
async create() { async create() {
this.scene.start("battle"); this.scene.start('battle');
} }
} }

View File

@ -1,6 +1,6 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const abilityTriggers: SimpleTranslationEntries = { export const abilityTriggers: SimpleTranslationEntries = {
'blockRecoilDamage' : `{{pokemonName}} wurde durch {{abilityName}}\nvor Rückstoß geschützt!`, 'blockRecoilDamage' : '{{pokemonName}} wurde durch {{abilityName}}\nvor Rückstoß geschützt!',
'badDreams': `{{pokemonName}} ist in einem Alptraum gefangen!`, 'badDreams': '{{pokemonName}} ist in einem Alptraum gefangen!',
} as const; } as const;

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const battleMessageUiHandler: SimpleTranslationEntries = { export const battleMessageUiHandler: SimpleTranslationEntries = {
"ivBest": "Sensationell", 'ivBest': 'Sensationell',
"ivFantastic": "Fantastisch", 'ivFantastic': 'Fantastisch',
"ivVeryGood": "Sehr Gut", 'ivVeryGood': 'Sehr Gut',
"ivPrettyGood": "Gut", 'ivPrettyGood': 'Gut',
"ivDecent": "Nicht Übel", 'ivDecent': 'Nicht Übel',
"ivNoGood": "Schlecht", 'ivNoGood': 'Schlecht',
} as const; } as const;

View File

@ -1,56 +1,56 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const battle: SimpleTranslationEntries = { export const battle: SimpleTranslationEntries = {
"bossAppeared": "{{bossName}} erscheint.", 'bossAppeared': '{{bossName}} erscheint.',
"trainerAppeared": "{{trainerName}}\nmöchte kämpfen!", 'trainerAppeared': '{{trainerName}}\nmöchte kämpfen!',
"trainerAppearedDouble": "{{trainerName}}\nmöchten kämpfen!", 'trainerAppearedDouble': '{{trainerName}}\nmöchten kämpfen!',
"singleWildAppeared": "Ein wildes {{pokemonName}} erscheint!", 'singleWildAppeared': 'Ein wildes {{pokemonName}} erscheint!',
"multiWildAppeared": "Ein wildes {{pokemonName1}}\nund {{pokemonName2}} erscheinen!", 'multiWildAppeared': 'Ein wildes {{pokemonName1}}\nund {{pokemonName2}} erscheinen!',
"playerComeBack": "Komm zurück, {{pokemonName}}!", 'playerComeBack': 'Komm zurück, {{pokemonName}}!',
"trainerComeBack": "{{trainerName}} ruft {{pokemonName}} zurück!", 'trainerComeBack': '{{trainerName}} ruft {{pokemonName}} zurück!',
"playerGo": "Los! {{pokemonName}}!", 'playerGo': 'Los! {{pokemonName}}!',
"trainerGo": "{{trainerName}} sendet {{pokemonName}} raus!", 'trainerGo': '{{trainerName}} sendet {{pokemonName}} raus!',
"switchQuestion": "Möchtest du\n{{pokemonName}} auswechseln?", 'switchQuestion': 'Möchtest du\n{{pokemonName}} auswechseln?',
"trainerDefeated": `{{trainerName}}\nwurde besiegt!`, 'trainerDefeated': '{{trainerName}}\nwurde besiegt!',
"pokemonCaught": "{{pokemonName}} wurde gefangen!", 'pokemonCaught': '{{pokemonName}} wurde gefangen!',
"pokemon": "Pokémon", 'pokemon': 'Pokémon',
"sendOutPokemon": "Los, {{pokemonName}}!", 'sendOutPokemon': 'Los, {{pokemonName}}!',
"hitResultCriticalHit": "Ein Volltreffer!", 'hitResultCriticalHit': 'Ein Volltreffer!',
"hitResultSuperEffective": "Das ist sehr effektiv!", 'hitResultSuperEffective': 'Das ist sehr effektiv!',
"hitResultNotVeryEffective": "Das ist nicht sehr effektiv…", 'hitResultNotVeryEffective': 'Das ist nicht sehr effektiv…',
"hitResultNoEffect": "Es hat keine Wirkung auf {{pokemonName}}…", 'hitResultNoEffect': 'Es hat keine Wirkung auf {{pokemonName}}…',
"hitResultOneHitKO": "Ein K.O.-Treffer!", 'hitResultOneHitKO': 'Ein K.O.-Treffer!',
"attackFailed": "Es ist fehlgeschlagen!", 'attackFailed': 'Es ist fehlgeschlagen!',
"attackHitsCount": `{{count}}-mal getroffen!`, 'attackHitsCount': '{{count}}-mal getroffen!',
"expGain": "{{pokemonName}} erhält\n{{exp}} Erfahrungspunkte!", 'expGain': '{{pokemonName}} erhält\n{{exp}} Erfahrungspunkte!',
"levelUp": "{{pokemonName}} erreicht\nLv. {{level}}!", 'levelUp': '{{pokemonName}} erreicht\nLv. {{level}}!',
"learnMove": "{{pokemonName}} erlernt\n{{moveName}}!", 'learnMove': '{{pokemonName}} erlernt\n{{moveName}}!',
"learnMovePrompt": "{{pokemonName}} versucht, {{moveName}} zu erlernen.", 'learnMovePrompt': '{{pokemonName}} versucht, {{moveName}} zu erlernen.',
"learnMoveLimitReached": "Aber {{pokemonName}} kann nur\nmaximal vier Attacken erlernen.", 'learnMoveLimitReached': 'Aber {{pokemonName}} kann nur\nmaximal vier Attacken erlernen.',
"learnMoveReplaceQuestion": "Soll eine bekannte Attacke durch\n{{moveName}} ersetzt werden?", 'learnMoveReplaceQuestion': 'Soll eine bekannte Attacke durch\n{{moveName}} ersetzt werden?',
"learnMoveStopTeaching": "{{moveName}} nicht\nerlernen?", 'learnMoveStopTeaching': '{{moveName}} nicht\nerlernen?',
"learnMoveNotLearned": "{{pokemonName}} hat\n{{moveName}} nicht erlernt.", 'learnMoveNotLearned': '{{pokemonName}} hat\n{{moveName}} nicht erlernt.',
"learnMoveForgetQuestion": "Welche Attacke soll vergessen werden?", 'learnMoveForgetQuestion': 'Welche Attacke soll vergessen werden?',
"learnMoveForgetSuccess": "{{pokemonName}} hat\n{{moveName}} vergessen.", 'learnMoveForgetSuccess': '{{pokemonName}} hat\n{{moveName}} vergessen.',
"countdownPoof": "@d{32}Eins, @d{15}zwei @d{15}und@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}schwupp!", 'countdownPoof': '@d{32}Eins, @d{15}zwei @d{15}und@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}schwupp!',
"learnMoveAnd": "Und…", 'learnMoveAnd': 'Und…',
"levelCapUp": "Das Levelbeschränkung\nwurde auf {{levelCap}} erhöht!", 'levelCapUp': 'Das Levelbeschränkung\nwurde auf {{levelCap}} erhöht!',
"moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.", 'moveNotImplemented': '{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.',
"moveNoPP": "Es sind keine AP für\ndiese Attacke mehr übrig!", 'moveNoPP': 'Es sind keine AP für\ndiese Attacke mehr übrig!',
"moveDisabled": "{{moveName}} ist deaktiviert!", 'moveDisabled': '{{moveName}} ist deaktiviert!',
"noPokeballForce": "Eine unsichtbare Kraft\nverhindert die Nutzung von Pokébällen.", 'noPokeballForce': 'Eine unsichtbare Kraft\nverhindert die Nutzung von Pokébällen.',
"noPokeballTrainer": "Du kannst das Pokémon\neines anderen Trainers nicht fangen!", 'noPokeballTrainer': 'Du kannst das Pokémon\neines anderen Trainers nicht fangen!',
"noPokeballMulti": "Du kannst erst einen Pokéball werfen,\nwenn nur noch ein Pokémon übrig ist!", 'noPokeballMulti': 'Du kannst erst einen Pokéball werfen,\nwenn nur noch ein Pokémon übrig ist!',
"noPokeballStrong": "Das Ziel-Pokémon ist zu stark, um gefangen zu werden!\nDu musst es zuerst schwächen!", 'noPokeballStrong': 'Das Ziel-Pokémon ist zu stark, um gefangen zu werden!\nDu musst es zuerst schwächen!',
"noEscapeForce": "Eine unsichtbare Kraft\nverhindert die Flucht.", 'noEscapeForce': 'Eine unsichtbare Kraft\nverhindert die Flucht.',
"noEscapeTrainer": "Du kannst nicht\naus einem Trainerkampf fliehen!", 'noEscapeTrainer': 'Du kannst nicht\naus einem Trainerkampf fliehen!',
"noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nverhindert {{escapeVerb}}!", 'noEscapePokemon': '{{pokemonName}}\'s {{moveName}}\nverhindert {{escapeVerb}}!',
"runAwaySuccess": "Du bist entkommen!", 'runAwaySuccess': 'Du bist entkommen!',
"runAwayCannotEscape": 'Flucht gescheitert!', 'runAwayCannotEscape': 'Flucht gescheitert!',
"escapeVerbSwitch": "auswechseln", 'escapeVerbSwitch': 'auswechseln',
"escapeVerbFlee": "flucht", 'escapeVerbFlee': 'flucht',
"skipItemQuestion": "Bist du sicher, dass du kein Item nehmen willst?", 'skipItemQuestion': 'Bist du sicher, dass du kein Item nehmen willst?',
"notDisabled": "{{pokemonName}}'s {{moveName}} ist\nnicht mehr deaktiviert!", 'notDisabled': '{{pokemonName}}\'s {{moveName}} ist\nnicht mehr deaktiviert!',
"eggHatching": "Oh?", 'eggHatching': 'Oh?',
"ivScannerUseQuestion": "IV-Scanner auf {{pokemonName}} benutzen?" 'ivScannerUseQuestion': 'IV-Scanner auf {{pokemonName}} benutzen?'
} as const; } as const;

View File

@ -1,48 +1,48 @@
import { BerryTranslationEntries } from "#app/plugins/i18n"; import { BerryTranslationEntries } from '#app/plugins/i18n';
export const berry: BerryTranslationEntries = { export const berry: BerryTranslationEntries = {
"SITRUS": { 'SITRUS': {
name: "Tsitrubeere", name: 'Tsitrubeere',
effect: "Stellt 25% der KP wieder her, wenn die KP unter 50% sind" effect: 'Stellt 25% der KP wieder her, wenn die KP unter 50% sind'
}, },
"LUM": { 'LUM': {
name: "Prunusbeere", name: 'Prunusbeere',
effect: "Heilt jede nichtflüchtige Statusveränderung und Verwirrung" effect: 'Heilt jede nichtflüchtige Statusveränderung und Verwirrung'
}, },
"ENIGMA": { 'ENIGMA': {
name: "Enigmabeere", name: 'Enigmabeere',
effect: "Stellt 25% der KP wieder her, wenn der Träger von einer sehr effektiven Attacke getroffen wird", effect: 'Stellt 25% der KP wieder her, wenn der Träger von einer sehr effektiven Attacke getroffen wird',
}, },
"LIECHI": { 'LIECHI': {
name: "Lydzibeere", name: 'Lydzibeere',
effect: "Steigert den Angriff, wenn die KP unter 25% sind" effect: 'Steigert den Angriff, wenn die KP unter 25% sind'
}, },
"GANLON": { 'GANLON': {
name: "Linganbeere", name: 'Linganbeere',
effect: "Steigert die Verteidigung, wenn die KP unter 25% sind" effect: 'Steigert die Verteidigung, wenn die KP unter 25% sind'
}, },
"PETAYA": { 'PETAYA': {
name: "Tahaybeere", name: 'Tahaybeere',
effect: "Steigert den Spezial-Angriff, wenn die KP unter 25% sind" effect: 'Steigert den Spezial-Angriff, wenn die KP unter 25% sind'
}, },
"APICOT": { 'APICOT': {
name: "Apikobeere", name: 'Apikobeere',
effect: "Steigert die Spezial-Verteidigung, wenn die KP unter 25% sind" effect: 'Steigert die Spezial-Verteidigung, wenn die KP unter 25% sind'
}, },
"SALAC": { 'SALAC': {
name: "Salkabeere", name: 'Salkabeere',
effect: "Steigert die Initiative, wenn die KP unter 25% sind" effect: 'Steigert die Initiative, wenn die KP unter 25% sind'
}, },
"LANSAT": { 'LANSAT': {
name: "Lansatbeere", name: 'Lansatbeere',
effect: "Erhöht die Volltrefferchance, wenn die KP unter 25% sind" effect: 'Erhöht die Volltrefferchance, wenn die KP unter 25% sind'
}, },
"STARF": { 'STARF': {
name: "Krambobeere", name: 'Krambobeere',
effect: "Erhöht eine Statuswert stark, wenn die KP unter 25% sind" effect: 'Erhöht eine Statuswert stark, wenn die KP unter 25% sind'
}, },
"LEPPA": { 'LEPPA': {
name: "Jonagobeere", name: 'Jonagobeere',
effect: "Stellt 10 AP für eine Attacke wieder her, wenn deren AP auf 0 fallen" effect: 'Stellt 10 AP für eine Attacke wieder her, wenn deren AP auf 0 fallen'
}, },
} as const; } as const;

View File

@ -1,9 +1,9 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const commandUiHandler: SimpleTranslationEntries = { export const commandUiHandler: SimpleTranslationEntries = {
"fight": "Kampf", 'fight': 'Kampf',
"ball": "Ball", 'ball': 'Ball',
"pokemon": "Pokémon", 'pokemon': 'Pokémon',
"run": "Fliehen", 'run': 'Fliehen',
"actionMessage": "Was soll\n{{pokemonName}} tun?", 'actionMessage': 'Was soll\n{{pokemonName}} tun?',
} as const; } as const;

View File

@ -1,26 +1,26 @@
import { ability } from "./ability"; import { ability } from './ability';
import { abilityTriggers } from "./ability-trigger"; import { abilityTriggers } from './ability-trigger';
import { battle } from "./battle"; import { battle } from './battle';
import { commandUiHandler } from "./command-ui-handler"; import { commandUiHandler } from './command-ui-handler';
import { egg } from "./egg"; import { egg } from './egg';
import { fightUiHandler } from "./fight-ui-handler"; import { fightUiHandler } from './fight-ui-handler';
import { growth } from "./growth"; import { growth } from './growth';
import { menu } from "./menu"; import { menu } from './menu';
import { menuUiHandler } from "./menu-ui-handler"; import { menuUiHandler } from './menu-ui-handler';
import { modifierType } from "./modifier-type"; import { modifierType } from './modifier-type';
import { move } from "./move"; import { move } from './move';
import { nature } from "./nature"; import { nature } from './nature';
import { pokeball } from "./pokeball"; import { pokeball } from './pokeball';
import { pokemon } from "./pokemon"; import { pokemon } from './pokemon';
import { pokemonInfo } from "./pokemon-info"; import { pokemonInfo } from './pokemon-info';
import { splashMessages } from "./splash-messages"; import { splashMessages } from './splash-messages';
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from './starter-select-ui-handler';
import { titles, trainerClasses, trainerNames } from "./trainers"; import { titles, trainerClasses, trainerNames } from './trainers';
import { tutorial } from "./tutorial"; import { tutorial } from './tutorial';
import { weather } from "./weather"; import { weather } from './weather';
import { battleMessageUiHandler } from "./battle-message-ui-handler"; import { battleMessageUiHandler } from './battle-message-ui-handler';
import { berry } from "./berry"; import { berry } from './berry';
import { voucher } from "./voucher"; import { voucher } from './voucher';
export const deConfig = { export const deConfig = {
ability: ability, ability: ability,
@ -48,4 +48,4 @@ export const deConfig = {
battleMessageUiHandler: battleMessageUiHandler, battleMessageUiHandler: battleMessageUiHandler,
berry: berry, berry: berry,
voucher: voucher, voucher: voucher,
} };

View File

@ -1,21 +1,21 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const egg: SimpleTranslationEntries = { export const egg: SimpleTranslationEntries = {
"egg": "Ei", 'egg': 'Ei',
"greatTier": "Selten", 'greatTier': 'Selten',
"ultraTier": "Episch", 'ultraTier': 'Episch',
"masterTier": "Legendär", 'masterTier': 'Legendär',
"defaultTier": "Gewöhnlich", 'defaultTier': 'Gewöhnlich',
"hatchWavesMessageSoon": "Man kann schon etwas hören! Es wird wohl bald schlüpfen!", 'hatchWavesMessageSoon': 'Man kann schon etwas hören! Es wird wohl bald schlüpfen!',
"hatchWavesMessageClose": "Manchmal bewegt es sich! Es braucht wohl noch ein Weilchen.", 'hatchWavesMessageClose': 'Manchmal bewegt es sich! Es braucht wohl noch ein Weilchen.',
"hatchWavesMessageNotClose": "Was wird da wohl schlüpfen? Es wird sicher noch lange dauern.", 'hatchWavesMessageNotClose': 'Was wird da wohl schlüpfen? Es wird sicher noch lange dauern.',
"hatchWavesMessageLongTime": "Dieses Ei braucht sicher noch sehr viel Zeit.", 'hatchWavesMessageLongTime': 'Dieses Ei braucht sicher noch sehr viel Zeit.',
"gachaTypeLegendary": "Erhöhte Chance auf legendäre Eier", 'gachaTypeLegendary': 'Erhöhte Chance auf legendäre Eier',
"gachaTypeMove": "Erhöhte Chance auf Eier mit seltenen Attacken", 'gachaTypeMove': 'Erhöhte Chance auf Eier mit seltenen Attacken',
"gachaTypeShiny": "Erhöhte Chance auf schillernde Eier", 'gachaTypeShiny': 'Erhöhte Chance auf schillernde Eier',
"selectMachine": "Wähle eine Maschine", 'selectMachine': 'Wähle eine Maschine',
"notEnoughVouchers": "Du hast nicht genug Ei-Gutscheine!", 'notEnoughVouchers': 'Du hast nicht genug Ei-Gutscheine!',
"tooManyEggs": "Du hast schon zu viele Eier!", 'tooManyEggs': 'Du hast schon zu viele Eier!',
"pull": "Pull", 'pull': 'Pull',
"pulls": "Pulls" 'pulls': 'Pulls'
} as const; } as const;

View File

@ -1,7 +1,7 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const fightUiHandler: SimpleTranslationEntries = { export const fightUiHandler: SimpleTranslationEntries = {
"pp": "AP", 'pp': 'AP',
"power": "Stärke", 'power': 'Stärke',
"accuracy": "Genauigkeit", 'accuracy': 'Genauigkeit',
} as const; } as const;

View File

@ -1,10 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const growth: SimpleTranslationEntries = { export const growth: SimpleTranslationEntries = {
"Erratic": "Unregelmäßig", 'Erratic': 'Unregelmäßig',
"Fast": "Schnell", 'Fast': 'Schnell',
"Medium_Fast": "Schneller", 'Medium_Fast': 'Schneller',
"Medium_Slow": "Langsamer", 'Medium_Slow': 'Langsamer',
"Slow": "Langsam", 'Slow': 'Langsam',
"Fluctuating": "Schwankend" 'Fluctuating': 'Schwankend'
} as const; } as const;

View File

@ -1,23 +1,23 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const menuUiHandler: SimpleTranslationEntries = { export const menuUiHandler: SimpleTranslationEntries = {
"GAME_SETTINGS": 'Spieleinstellungen', 'GAME_SETTINGS': 'Spieleinstellungen',
"ACHIEVEMENTS": "Erfolge", 'ACHIEVEMENTS': 'Erfolge',
"STATS": "Statistiken", 'STATS': 'Statistiken',
"VOUCHERS": "Gutscheine", 'VOUCHERS': 'Gutscheine',
"EGG_LIST": "Eierliste", 'EGG_LIST': 'Eierliste',
"EGG_GACHA": "Eier-Gacha", 'EGG_GACHA': 'Eier-Gacha',
"MANAGE_DATA": "Daten verwalten", 'MANAGE_DATA': 'Daten verwalten',
"COMMUNITY": "Community", 'COMMUNITY': 'Community',
"SAVE_AND_QUIT": "Speichern und Beenden", 'SAVE_AND_QUIT': 'Speichern und Beenden',
"LOG_OUT": "Abmelden", 'LOG_OUT': 'Abmelden',
"slot": "Slot {{slotNumber}}", 'slot': 'Slot {{slotNumber}}',
"importSession": "Sitzung importieren", 'importSession': 'Sitzung importieren',
"importSlotSelect": "Wähle einen Slot zum Importieren.", 'importSlotSelect': 'Wähle einen Slot zum Importieren.',
"exportSession": "Sitzung exportieren", 'exportSession': 'Sitzung exportieren',
"exportSlotSelect": "Wähle einen Slot zum Exportieren.", 'exportSlotSelect': 'Wähle einen Slot zum Exportieren.',
"importData": "Daten importieren", 'importData': 'Daten importieren',
"exportData": "Daten exportieren", 'exportData': 'Daten exportieren',
"cancel": "Abbrechen", 'cancel': 'Abbrechen',
"losingProgressionWarning": "Du wirst jeglichen Fortschritt seit Anfang dieses Kampfes verlieren. Fortfahren?" 'losingProgressionWarning': 'Du wirst jeglichen Fortschritt seit Anfang dieses Kampfes verlieren. Fortfahren?'
} as const; } as const;

View File

@ -1,4 +1,4 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
/** /**
* The menu namespace holds most miscellaneous text that isn't directly part of the game's * The menu namespace holds most miscellaneous text that isn't directly part of the game's
@ -6,46 +6,46 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n";
* account interactions, descriptive text, etc. * account interactions, descriptive text, etc.
*/ */
export const menu: SimpleTranslationEntries = { export const menu: SimpleTranslationEntries = {
"cancel": "Abbrechen", 'cancel': 'Abbrechen',
"continue": "Fortfahren", 'continue': 'Fortfahren',
"dailyRun": "Täglicher Run (Beta)", 'dailyRun': 'Täglicher Run (Beta)',
"loadGame": "Spiel laden", 'loadGame': 'Spiel laden',
"newGame": "Neues Spiel", 'newGame': 'Neues Spiel',
"selectGameMode": "Wähle einen Spielmodus", 'selectGameMode': 'Wähle einen Spielmodus',
"logInOrCreateAccount": "Melde dich an oder erstelle einen Account zum starten. Keine Email nötig!", 'logInOrCreateAccount': 'Melde dich an oder erstelle einen Account zum starten. Keine Email nötig!',
"username": "Benutzername", 'username': 'Benutzername',
"password": "Passwort", 'password': 'Passwort',
"login": "Anmelden", 'login': 'Anmelden',
"register": "Registrieren", 'register': 'Registrieren',
"emptyUsername": "Benutzername darf nicht leer sein", 'emptyUsername': 'Benutzername darf nicht leer sein',
"invalidLoginUsername": "Der eingegebene Benutzername ist ungültig", 'invalidLoginUsername': 'Der eingegebene Benutzername ist ungültig',
"invalidRegisterUsername": "Benutzername darf nur Buchstaben, Zahlen oder Unterstriche enthalten", 'invalidRegisterUsername': 'Benutzername darf nur Buchstaben, Zahlen oder Unterstriche enthalten',
"invalidLoginPassword": "Das eingegebene Passwort ist ungültig", 'invalidLoginPassword': 'Das eingegebene Passwort ist ungültig',
"invalidRegisterPassword": "Passwort muss 6 Zeichen oder länger sein", 'invalidRegisterPassword': 'Passwort muss 6 Zeichen oder länger sein',
"usernameAlreadyUsed": "Der eingegebene Benutzername wird bereits verwendet", 'usernameAlreadyUsed': 'Der eingegebene Benutzername wird bereits verwendet',
"accountNonExistent": "Der eingegebene Benutzer existiert nicht", 'accountNonExistent': 'Der eingegebene Benutzer existiert nicht',
"unmatchingPassword": "Das eingegebene Passwort stimmt nicht überein", 'unmatchingPassword': 'Das eingegebene Passwort stimmt nicht überein',
"passwordNotMatchingConfirmPassword": "Passwort muss mit Bestätigungspasswort übereinstimmen", 'passwordNotMatchingConfirmPassword': 'Passwort muss mit Bestätigungspasswort übereinstimmen',
"confirmPassword": "Bestätige Passwort", 'confirmPassword': 'Bestätige Passwort',
"registrationAgeWarning": "Mit der Registrierung bestätigen Sie, dass Sie 13 Jahre oder älter sind.", 'registrationAgeWarning': 'Mit der Registrierung bestätigen Sie, dass Sie 13 Jahre oder älter sind.',
"backToLogin": "Zurück zur Anmeldung", 'backToLogin': 'Zurück zur Anmeldung',
"failedToLoadSaveData": "Speicherdaten konnten nicht geladen werden. Bitte laden Sie die Seite neu.\nWenn dies weiterhin der Fall ist, wenden Sie sich bitte an den Administrator.", 'failedToLoadSaveData': 'Speicherdaten konnten nicht geladen werden. Bitte laden Sie die Seite neu.\nWenn dies weiterhin der Fall ist, wenden Sie sich bitte an den Administrator.',
"sessionSuccess": "Sitzung erfolgreich geladen.", 'sessionSuccess': 'Sitzung erfolgreich geladen.',
"failedToLoadSession": "Ihre Sitzungsdaten konnten nicht geladen werden.\nSie könnten beschädigt sein.", 'failedToLoadSession': 'Ihre Sitzungsdaten konnten nicht geladen werden.\nSie könnten beschädigt sein.',
"boyOrGirl": "Bist du ein Junge oder ein Mädchen?", 'boyOrGirl': 'Bist du ein Junge oder ein Mädchen?',
"boy": "Junge", 'boy': 'Junge',
"girl": "Mädchen", 'girl': 'Mädchen',
"evolving": "Nanu?\n{{pokemonName}} entwickelt sich!", 'evolving': 'Nanu?\n{{pokemonName}} entwickelt sich!',
"stoppedEvolving": "Hm? {{pokemonName}} hat die Entwicklung \nabgebrochen.", // "Hm? Entwicklung wurde abgebrochen!" without naming the pokemon seems to be the original. 'stoppedEvolving': 'Hm? {{pokemonName}} hat die Entwicklung \nabgebrochen.', // "Hm? Entwicklung wurde abgebrochen!" without naming the pokemon seems to be the original.
"pauseEvolutionsQuestion": "Die Entwicklung von {{pokemonName}} vorübergehend pausieren?\nEntwicklungen können im Gruppenmenü wieder aktiviert werden.", 'pauseEvolutionsQuestion': 'Die Entwicklung von {{pokemonName}} vorübergehend pausieren?\nEntwicklungen können im Gruppenmenü wieder aktiviert werden.',
"evolutionsPaused": "Entwicklung von {{pokemonName}} pausiert.", 'evolutionsPaused': 'Entwicklung von {{pokemonName}} pausiert.',
"evolutionDone": "Glückwunsch!\nDein {{pokemonName}} entwickelte sich zu {{evolvedPokemonName}}!", 'evolutionDone': 'Glückwunsch!\nDein {{pokemonName}} entwickelte sich zu {{evolvedPokemonName}}!',
"dailyRankings": "Tägliche Rangliste", 'dailyRankings': 'Tägliche Rangliste',
"weeklyRankings": "Wöchentliche Rangliste", 'weeklyRankings': 'Wöchentliche Rangliste',
"noRankings": "Keine Rangliste", 'noRankings': 'Keine Rangliste',
"loading": "Lade…", 'loading': 'Lade…',
"playersOnline": "Spieler Online", 'playersOnline': 'Spieler Online',
"empty":"Leer", 'empty':'Leer',
"yes":"Ja", 'yes':'Ja',
"no":"Nein", 'no':'Nein',
} as const; } as const;

View File

@ -1,388 +1,388 @@
import { ModifierTypeTranslationEntries } from "#app/plugins/i18n"; import { ModifierTypeTranslationEntries } from '#app/plugins/i18n';
export const modifierType: ModifierTypeTranslationEntries = { export const modifierType: ModifierTypeTranslationEntries = {
ModifierType: { ModifierType: {
"AddPokeballModifierType": { 'AddPokeballModifierType': {
name: "{{modifierCount}}x {{pokeballName}}", name: '{{modifierCount}}x {{pokeballName}}',
description: "Erhalte {{pokeballName}} x{{modifierCount}} (Inventar: {{pokeballAmount}}) \nFangrate: {{catchRate}}", description: 'Erhalte {{pokeballName}} x{{modifierCount}} (Inventar: {{pokeballAmount}}) \nFangrate: {{catchRate}}',
}, },
"AddVoucherModifierType": { 'AddVoucherModifierType': {
name: "{{modifierCount}}x {{voucherTypeName}}", name: '{{modifierCount}}x {{voucherTypeName}}',
description: "Erhalte {{voucherTypeName}} x{{modifierCount}}", description: 'Erhalte {{voucherTypeName}} x{{modifierCount}}',
}, },
"PokemonHeldItemModifierType": { 'PokemonHeldItemModifierType': {
extra: { extra: {
"inoperable": "{{pokemonName}} kann dieses\nItem nicht nehmen!", 'inoperable': '{{pokemonName}} kann dieses\nItem nicht nehmen!',
"tooMany": "{{pokemonName}} hat zu viele\nvon diesem Item!", 'tooMany': '{{pokemonName}} hat zu viele\nvon diesem Item!',
} }
}, },
"PokemonHpRestoreModifierType": { 'PokemonHpRestoreModifierType': {
description: "Füllt {{restorePoints}} KP oder {{restorePercent}}% der KP für ein Pokémon auf. Je nachdem, welcher Wert höher ist", description: 'Füllt {{restorePoints}} KP oder {{restorePercent}}% der KP für ein Pokémon auf. Je nachdem, welcher Wert höher ist',
extra: { extra: {
"fully": "Füllt die KP eines Pokémon wieder vollständig auf.", 'fully': 'Füllt die KP eines Pokémon wieder vollständig auf.',
"fullyWithStatus": "Füllt die KP eines Pokémon wieder vollständig auf und behebt alle Statusprobleme", 'fullyWithStatus': 'Füllt die KP eines Pokémon wieder vollständig auf und behebt alle Statusprobleme',
} }
}, },
"PokemonReviveModifierType": { 'PokemonReviveModifierType': {
description: "Belebt ein kampunfähiges Pokémon wieder und stellt {{restorePercent}}% KP wieder her", description: 'Belebt ein kampunfähiges Pokémon wieder und stellt {{restorePercent}}% KP wieder her',
}, },
"PokemonStatusHealModifierType": { 'PokemonStatusHealModifierType': {
description: "Behebt alle Statusprobleme eines Pokémon", description: 'Behebt alle Statusprobleme eines Pokémon',
}, },
"PokemonPpRestoreModifierType": { 'PokemonPpRestoreModifierType': {
description: "Füllt {{restorePoints}} AP der ausgewählten Attacke eines Pokémon auf", description: 'Füllt {{restorePoints}} AP der ausgewählten Attacke eines Pokémon auf',
extra: { extra: {
"fully": "Füllt alle AP der ausgewählten Attacke eines Pokémon auf", 'fully': 'Füllt alle AP der ausgewählten Attacke eines Pokémon auf',
} }
}, },
"PokemonAllMovePpRestoreModifierType": { 'PokemonAllMovePpRestoreModifierType': {
description: "Stellt {{restorePoints}} AP für alle Attacken eines Pokémon auf", description: 'Stellt {{restorePoints}} AP für alle Attacken eines Pokémon auf',
extra: { extra: {
"fully": "Füllt alle AP für alle Attacken eines Pokémon auf", 'fully': 'Füllt alle AP für alle Attacken eines Pokémon auf',
} }
}, },
"PokemonPpUpModifierType": { 'PokemonPpUpModifierType': {
description: "Erhöht die maximale Anzahl der AP der ausgewählten Attacke um {{upPoints}} für jede 5 maximale AP (maximal 3)", description: 'Erhöht die maximale Anzahl der AP der ausgewählten Attacke um {{upPoints}} für jede 5 maximale AP (maximal 3)',
}, },
"PokemonNatureChangeModifierType": { 'PokemonNatureChangeModifierType': {
name: "{{natureName}} Minze", name: '{{natureName}} Minze',
description: "Ändert das Wesen zu {{natureName}}. Schaltet dieses Wesen permanent für diesen Starter frei.", description: 'Ändert das Wesen zu {{natureName}}. Schaltet dieses Wesen permanent für diesen Starter frei.',
}, },
"DoubleBattleChanceBoosterModifierType": { 'DoubleBattleChanceBoosterModifierType': {
description: "Verdoppelt die Wahrscheinlichkeit, dass die nächsten {{battleCount}} Begegnungen mit wilden Pokémon ein Doppelkampf sind.", description: 'Verdoppelt die Wahrscheinlichkeit, dass die nächsten {{battleCount}} Begegnungen mit wilden Pokémon ein Doppelkampf sind.',
}, },
"TempBattleStatBoosterModifierType": { 'TempBattleStatBoosterModifierType': {
description: "Erhöht die {{tempBattleStatName}} aller Teammitglieder für 5 Kämpfe um eine Stufe", description: 'Erhöht die {{tempBattleStatName}} aller Teammitglieder für 5 Kämpfe um eine Stufe',
}, },
"AttackTypeBoosterModifierType": { 'AttackTypeBoosterModifierType': {
description: "Erhöht die Stärke aller {{moveType}}-Attacken eines Pokémon um 20%", description: 'Erhöht die Stärke aller {{moveType}}-Attacken eines Pokémon um 20%',
}, },
"PokemonLevelIncrementModifierType": { 'PokemonLevelIncrementModifierType': {
description: "Erhöht das Level eines Pokémon um 1", description: 'Erhöht das Level eines Pokémon um 1',
}, },
"AllPokemonLevelIncrementModifierType": { 'AllPokemonLevelIncrementModifierType': {
description: "Erhöht das Level aller Teammitglieder um 1", description: 'Erhöht das Level aller Teammitglieder um 1',
}, },
"PokemonBaseStatBoosterModifierType": { 'PokemonBaseStatBoosterModifierType': {
description: "Erhöht den {{statName}} Basiswert des Trägers um 10%. Das Stapellimit erhöht sich, je höher dein IS-Wert ist.", description: 'Erhöht den {{statName}} Basiswert des Trägers um 10%. Das Stapellimit erhöht sich, je höher dein IS-Wert ist.',
}, },
"AllPokemonFullHpRestoreModifierType": { 'AllPokemonFullHpRestoreModifierType': {
description: "Stellt 100% der KP aller Pokémon her", description: 'Stellt 100% der KP aller Pokémon her',
}, },
"AllPokemonFullReviveModifierType": { 'AllPokemonFullReviveModifierType': {
description: "Belebt alle kampunfähigen Pokémon wieder und stellt ihre KP vollständig wieder her", description: 'Belebt alle kampunfähigen Pokémon wieder und stellt ihre KP vollständig wieder her',
}, },
"MoneyRewardModifierType": { 'MoneyRewardModifierType': {
description:"Gewährt einen {{moneyMultiplier}} Geldbetrag von (₽{{moneyAmount}})", description:'Gewährt einen {{moneyMultiplier}} Geldbetrag von (₽{{moneyAmount}})',
extra: { extra: {
"small": "kleinen", 'small': 'kleinen',
"moderate": "moderaten", 'moderate': 'moderaten',
"large": "großen", 'large': 'großen',
}, },
}, },
"ExpBoosterModifierType": { 'ExpBoosterModifierType': {
description: "Erhöht die erhaltenen Erfahrungspunkte um {{boostPercent}}%", description: 'Erhöht die erhaltenen Erfahrungspunkte um {{boostPercent}}%',
}, },
"PokemonExpBoosterModifierType": { 'PokemonExpBoosterModifierType': {
description: "Erhöht die Menge der erhaltenen Erfahrungspunkte für den Träger um {{boostPercent}}%", description: 'Erhöht die Menge der erhaltenen Erfahrungspunkte für den Träger um {{boostPercent}}%',
}, },
"PokemonFriendshipBoosterModifierType": { 'PokemonFriendshipBoosterModifierType': {
description: "Erhöht den Freundschaftszuwachs pro Sieg um 50%.", description: 'Erhöht den Freundschaftszuwachs pro Sieg um 50%.',
}, },
"PokemonMoveAccuracyBoosterModifierType": { 'PokemonMoveAccuracyBoosterModifierType': {
description: "Erhöht die Genauigkeit der Angriffe um {{accuracyAmount}} (maximal 100)", description: 'Erhöht die Genauigkeit der Angriffe um {{accuracyAmount}} (maximal 100)',
}, },
"PokemonMultiHitModifierType": { 'PokemonMultiHitModifierType': {
description: "Attacken treffen ein weiteres mal mit einer Reduktion von 60/75/82,5% der Stärke", description: 'Attacken treffen ein weiteres mal mit einer Reduktion von 60/75/82,5% der Stärke',
}, },
"TmModifierType": { 'TmModifierType': {
name: "TM{{moveId}} - {{moveName}}", name: 'TM{{moveId}} - {{moveName}}',
description: "Bringt einem Pokémon {{moveName}} bei", description: 'Bringt einem Pokémon {{moveName}} bei',
}, },
"EvolutionItemModifierType": { 'EvolutionItemModifierType': {
description: "Erlaubt es bestimmten Pokémon sich zu entwickeln", description: 'Erlaubt es bestimmten Pokémon sich zu entwickeln',
}, },
"FormChangeItemModifierType": { 'FormChangeItemModifierType': {
description: "Erlaubt es bestimmten Pokémon ihre Form zu ändern", description: 'Erlaubt es bestimmten Pokémon ihre Form zu ändern',
}, },
"FusePokemonModifierType": { 'FusePokemonModifierType': {
description: "Fusioniert zwei Pokémon (überträgt die Fähigkeit, teilt Basiswerte und Typ auf, gemeinsamer Attackenpool)", description: 'Fusioniert zwei Pokémon (überträgt die Fähigkeit, teilt Basiswerte und Typ auf, gemeinsamer Attackenpool)',
}, },
"TerastallizeModifierType": { 'TerastallizeModifierType': {
name: "{{teraType}} Terra-Stück", name: '{{teraType}} Terra-Stück',
description: "{{teraType}} Terakristallisiert den Träger für bis zu 10 Kämpfe", description: '{{teraType}} Terakristallisiert den Träger für bis zu 10 Kämpfe',
}, },
"ContactHeldItemTransferChanceModifierType": { 'ContactHeldItemTransferChanceModifierType': {
description:"Beim Angriff besteht eine {{chancePercent}}%ige Chance, dass das getragene Item des Gegners gestohlen wird." description:'Beim Angriff besteht eine {{chancePercent}}%ige Chance, dass das getragene Item des Gegners gestohlen wird.'
}, },
"TurnHeldItemTransferModifierType": { 'TurnHeldItemTransferModifierType': {
description: "Jede Runde erhält der Träger ein getragenes Item des Gegners", description: 'Jede Runde erhält der Träger ein getragenes Item des Gegners',
}, },
"EnemyAttackStatusEffectChanceModifierType": { 'EnemyAttackStatusEffectChanceModifierType': {
description: "Fügt Angriffen eine {{chancePercent}}%ige Chance hinzu, {{statusEffect}} zu verursachen", description: 'Fügt Angriffen eine {{chancePercent}}%ige Chance hinzu, {{statusEffect}} zu verursachen',
}, },
"EnemyEndureChanceModifierType": { 'EnemyEndureChanceModifierType': {
description: "Gibt den Träger eine {{chancePercent}}%ige Chance, einen Angriff zu überleben", description: 'Gibt den Träger eine {{chancePercent}}%ige Chance, einen Angriff zu überleben',
}, },
"RARE_CANDY": { name: "Sonderbonbon" }, 'RARE_CANDY': { name: 'Sonderbonbon' },
"RARER_CANDY": { name: "Supersondererbonbon" }, 'RARER_CANDY': { name: 'Supersondererbonbon' },
"MEGA_BRACELET": { name: "Mega-Armband", description: "Mega-Steine werden verfügbar" }, 'MEGA_BRACELET': { name: 'Mega-Armband', description: 'Mega-Steine werden verfügbar' },
"DYNAMAX_BAND": { name: "Dynamax-Band", description: "Dyna-Pilze werden verfügbar" }, 'DYNAMAX_BAND': { name: 'Dynamax-Band', description: 'Dyna-Pilze werden verfügbar' },
"TERA_ORB": { name: "Terakristall-Orb", description: "Tera-Stücke werden verfügbar" }, 'TERA_ORB': { name: 'Terakristall-Orb', description: 'Tera-Stücke werden verfügbar' },
"MAP": { name: "Karte", description: "Ermöglicht es dir, an einer Kreuzung dein Ziel zu wählen." }, 'MAP': { name: 'Karte', description: 'Ermöglicht es dir, an einer Kreuzung dein Ziel zu wählen.' },
"POTION": { name: "Trank" }, 'POTION': { name: 'Trank' },
"SUPER_POTION": { name: "Supertrank" }, 'SUPER_POTION': { name: 'Supertrank' },
"HYPER_POTION": { name: "Hypertrank" }, 'HYPER_POTION': { name: 'Hypertrank' },
"MAX_POTION": { name: "Top-Trank" }, 'MAX_POTION': { name: 'Top-Trank' },
"FULL_RESTORE": { name: "Top-Genesung" }, 'FULL_RESTORE': { name: 'Top-Genesung' },
"REVIVE": { name: "Beleber" }, 'REVIVE': { name: 'Beleber' },
"MAX_REVIVE": { name: "Top-Beleber" }, 'MAX_REVIVE': { name: 'Top-Beleber' },
"FULL_HEAL": { name: "Hyperheiler" }, 'FULL_HEAL': { name: 'Hyperheiler' },
"SACRED_ASH": { name: "Zauberasche" }, 'SACRED_ASH': { name: 'Zauberasche' },
"REVIVER_SEED": { name: "Belebersamen", description: "Belebt den Träger mit der Hälfte seiner KP wieder sollte er kampfunfähig werden" }, 'REVIVER_SEED': { name: 'Belebersamen', description: 'Belebt den Träger mit der Hälfte seiner KP wieder sollte er kampfunfähig werden' },
"ETHER": { name: "Äther" }, 'ETHER': { name: 'Äther' },
"MAX_ETHER": { name: "Top-Äther" }, 'MAX_ETHER': { name: 'Top-Äther' },
"ELIXIR": { name: "Elixir" }, 'ELIXIR': { name: 'Elixir' },
"MAX_ELIXIR": { name: "Top-Elixir" }, 'MAX_ELIXIR': { name: 'Top-Elixir' },
"PP_UP": { name: "AP-Plus" }, 'PP_UP': { name: 'AP-Plus' },
"PP_MAX": { name: "AP-Top" }, 'PP_MAX': { name: 'AP-Top' },
"LURE": { name: "Lockparfüm" }, 'LURE': { name: 'Lockparfüm' },
"SUPER_LURE": { name: "Super-Lockparfüm" }, 'SUPER_LURE': { name: 'Super-Lockparfüm' },
"MAX_LURE": { name: "Top-Lockparfüm" }, 'MAX_LURE': { name: 'Top-Lockparfüm' },
"MEMORY_MUSHROOM": { name: "Erinnerungspilz", description: "Lässt ein Pokémon eine vergessene Attacke wiedererlernen" }, 'MEMORY_MUSHROOM': { name: 'Erinnerungspilz', description: 'Lässt ein Pokémon eine vergessene Attacke wiedererlernen' },
"EXP_SHARE": { name: "EP-Teiler", description: "Pokémon, die nicht am Kampf teilgenommen haben, bekommen 20% der Erfahrungspunkte eines Kampfteilnehmers" }, 'EXP_SHARE': { name: 'EP-Teiler', description: 'Pokémon, die nicht am Kampf teilgenommen haben, bekommen 20% der Erfahrungspunkte eines Kampfteilnehmers' },
"EXP_BALANCE": { name: "EP-Ausgleicher", description: "Gewichtet die in Kämpfen erhaltenen Erfahrungspunkte auf niedrigstufigere Gruppenmitglieder." }, 'EXP_BALANCE': { name: 'EP-Ausgleicher', description: 'Gewichtet die in Kämpfen erhaltenen Erfahrungspunkte auf niedrigstufigere Gruppenmitglieder.' },
"OVAL_CHARM": { name: "Ovalpin", description: "Wenn mehrere Pokémon am Kampf teilnehmen, erhählt jeder von ihnen 10% extra Erfahrungspunkte" }, 'OVAL_CHARM': { name: 'Ovalpin', description: 'Wenn mehrere Pokémon am Kampf teilnehmen, erhählt jeder von ihnen 10% extra Erfahrungspunkte' },
"EXP_CHARM": { name: "EP-Pin" }, 'EXP_CHARM': { name: 'EP-Pin' },
"SUPER_EXP_CHARM": { name: "Super-EP-Pin" }, 'SUPER_EXP_CHARM': { name: 'Super-EP-Pin' },
"GOLDEN_EXP_CHARM": { name: "Goldener EP-Pin" }, 'GOLDEN_EXP_CHARM': { name: 'Goldener EP-Pin' },
"LUCKY_EGG": { name: "Glücks-Ei" }, 'LUCKY_EGG': { name: 'Glücks-Ei' },
"GOLDEN_EGG": { name: "Goldenes Ei" }, 'GOLDEN_EGG': { name: 'Goldenes Ei' },
"SOOTHE_BELL": { name: "Sanftglocke" }, 'SOOTHE_BELL': { name: 'Sanftglocke' },
"SOUL_DEW": { name: "Seelentau", description: "Erhöht den Einfluss des Wesens eines Pokemon auf seine Werte um 10% (additiv)" }, 'SOUL_DEW': { name: 'Seelentau', description: 'Erhöht den Einfluss des Wesens eines Pokemon auf seine Werte um 10% (additiv)' },
"NUGGET": { name: "Nugget" }, 'NUGGET': { name: 'Nugget' },
"BIG_NUGGET": { name: "Riesennugget" }, 'BIG_NUGGET': { name: 'Riesennugget' },
"RELIC_GOLD": { name: "Alter Dukat" }, 'RELIC_GOLD': { name: 'Alter Dukat' },
"AMULET_COIN": { name: "Münzamulett", description: "Erhöht das Preisgeld um 20%" }, 'AMULET_COIN': { name: 'Münzamulett', description: 'Erhöht das Preisgeld um 20%' },
"GOLDEN_PUNCH": { name: "Goldschlag", description: "Gewährt Geld in Höhe von 50% des zugefügten Schadens" }, 'GOLDEN_PUNCH': { name: 'Goldschlag', description: 'Gewährt Geld in Höhe von 50% des zugefügten Schadens' },
"COIN_CASE": { name: "Münzkorb", description: "Erhalte nach jedem 10ten Kampf 10% Zinsen auf dein Geld" }, 'COIN_CASE': { name: 'Münzkorb', description: 'Erhalte nach jedem 10ten Kampf 10% Zinsen auf dein Geld' },
"LOCK_CAPSULE": { name: "Tresorkapsel", description: "Erlaubt es die Seltenheitsstufe der Items festzusetzen wenn diese neu gerollt werden" }, 'LOCK_CAPSULE': { name: 'Tresorkapsel', description: 'Erlaubt es die Seltenheitsstufe der Items festzusetzen wenn diese neu gerollt werden' },
"GRIP_CLAW": { name: "Griffklaue" }, 'GRIP_CLAW': { name: 'Griffklaue' },
"WIDE_LENS": { name: "Großlinse" }, 'WIDE_LENS': { name: 'Großlinse' },
"MULTI_LENS": { name: "Mehrfachlinse" }, 'MULTI_LENS': { name: 'Mehrfachlinse' },
"HEALING_CHARM": { name: "Heilungspin", description: "Erhöht die Effektivität von Heilungsattacken sowie Heilitems um 10% (Beleber ausgenommen)" }, 'HEALING_CHARM': { name: 'Heilungspin', description: 'Erhöht die Effektivität von Heilungsattacken sowie Heilitems um 10% (Beleber ausgenommen)' },
"CANDY_JAR": { name: "Bonbonglas", description: "Erhöht die Anzahl der Level die ein Sonderbonbon erhöht um 1" }, 'CANDY_JAR': { name: 'Bonbonglas', description: 'Erhöht die Anzahl der Level die ein Sonderbonbon erhöht um 1' },
"BERRY_POUCH": { name: "Beerentüte", description: "Fügt eine 25% Chance hinzu, dass Beeren nicht verbraucht werden" }, 'BERRY_POUCH': { name: 'Beerentüte', description: 'Fügt eine 25% Chance hinzu, dass Beeren nicht verbraucht werden' },
"FOCUS_BAND": { name: "Fokusband", description: "Fügt eine 10% Chance hinzu, dass Angriffe die zur Kampfunfähigkeit führen mit 1 KP überlebt werden" }, 'FOCUS_BAND': { name: 'Fokusband', description: 'Fügt eine 10% Chance hinzu, dass Angriffe die zur Kampfunfähigkeit führen mit 1 KP überlebt werden' },
"QUICK_CLAW": { name: "Quick Claw", description: "Fügt eine 10% Change hinzu als erster anzugreifen. (Nach Prioritätsangriffen)" }, 'QUICK_CLAW': { name: 'Quick Claw', description: 'Fügt eine 10% Change hinzu als erster anzugreifen. (Nach Prioritätsangriffen)' },
"KINGS_ROCK": { name: "King-Stein", description: "Fügt eine 10% Chance hinzu, dass der Gegner nach einem Angriff zurückschreckt" }, 'KINGS_ROCK': { name: 'King-Stein', description: 'Fügt eine 10% Chance hinzu, dass der Gegner nach einem Angriff zurückschreckt' },
"LEFTOVERS": { name: "Überreste", description: "Heilt 1/16 der maximalen KP eines Pokémon pro Runde" }, 'LEFTOVERS': { name: 'Überreste', description: 'Heilt 1/16 der maximalen KP eines Pokémon pro Runde' },
"SHELL_BELL": { name: "Muschelglocke", description: "Heilt den Anwender um 1/8 des von ihm zugefügten Schadens" }, 'SHELL_BELL': { name: 'Muschelglocke', description: 'Heilt den Anwender um 1/8 des von ihm zugefügten Schadens' },
"BATON": { name: "Stab", description: "Ermöglicht das Weitergeben von Effekten beim Wechseln von Pokémon, wodurch auch Fallen umgangen werden." }, 'BATON': { name: 'Stab', description: 'Ermöglicht das Weitergeben von Effekten beim Wechseln von Pokémon, wodurch auch Fallen umgangen werden.' },
"SHINY_CHARM": { name: "Schillerpin", description: "Erhöht die Chance deutlich, dass ein wildes Pokémon ein schillernd ist" }, 'SHINY_CHARM': { name: 'Schillerpin', description: 'Erhöht die Chance deutlich, dass ein wildes Pokémon ein schillernd ist' },
"ABILITY_CHARM": { name: "Ability Charm", description: "Erhöht die Chance deutlich, dass ein wildes Pokémon eine versteckte Fähigkeit hat" }, 'ABILITY_CHARM': { name: 'Ability Charm', description: 'Erhöht die Chance deutlich, dass ein wildes Pokémon eine versteckte Fähigkeit hat' },
"IV_SCANNER": { name: "IS-Scanner", description: "Erlaubt es die IS-Werte von wilden Pokémon zu scannen.\n(2 IS-Werte pro Staplung. Die besten IS-Werte zuerst)" }, 'IV_SCANNER': { name: 'IS-Scanner', description: 'Erlaubt es die IS-Werte von wilden Pokémon zu scannen.\n(2 IS-Werte pro Staplung. Die besten IS-Werte zuerst)' },
"DNA_SPLICERS": { name: "DNS-Keil" }, 'DNA_SPLICERS': { name: 'DNS-Keil' },
"MINI_BLACK_HOLE": { name: "Mini schwarzes Loch" }, 'MINI_BLACK_HOLE': { name: 'Mini schwarzes Loch' },
"GOLDEN_POKEBALL": { name: "Goldener Pokéball", description: "Fügt eine zusätzliche Item-Auswahlmöglichkeit nach jedem Kampf hinzu" }, 'GOLDEN_POKEBALL': { name: 'Goldener Pokéball', description: 'Fügt eine zusätzliche Item-Auswahlmöglichkeit nach jedem Kampf hinzu' },
"ENEMY_DAMAGE_BOOSTER": { name: "Schadensmarke", description: "Erhöht den Schaden um 5%" }, 'ENEMY_DAMAGE_BOOSTER': { name: 'Schadensmarke', description: 'Erhöht den Schaden um 5%' },
"ENEMY_DAMAGE_REDUCTION": { name: "Schutzmarke", description: "Verringert den erhaltenen Schaden um 2,5%" }, 'ENEMY_DAMAGE_REDUCTION': { name: 'Schutzmarke', description: 'Verringert den erhaltenen Schaden um 2,5%' },
"ENEMY_HEAL": { name: "Wiederherstellungsmarke", description: "Heilt 2% der maximalen KP pro Runde" }, 'ENEMY_HEAL': { name: 'Wiederherstellungsmarke', description: 'Heilt 2% der maximalen KP pro Runde' },
"ENEMY_ATTACK_POISON_CHANCE": { name: "Giftmarke" }, 'ENEMY_ATTACK_POISON_CHANCE': { name: 'Giftmarke' },
"ENEMY_ATTACK_PARALYZE_CHANCE": { "name": "Lähmungsmarke" }, 'ENEMY_ATTACK_PARALYZE_CHANCE': { 'name': 'Lähmungsmarke' },
"ENEMY_ATTACK_SLEEP_CHANCE": { "name": "Schlafmarke" }, 'ENEMY_ATTACK_SLEEP_CHANCE': { 'name': 'Schlafmarke' },
"ENEMY_ATTACK_FREEZE_CHANCE": { "name": "Gefriermarke" }, 'ENEMY_ATTACK_FREEZE_CHANCE': { 'name': 'Gefriermarke' },
"ENEMY_ATTACK_BURN_CHANCE": { "name": "Brandmarke" }, 'ENEMY_ATTACK_BURN_CHANCE': { 'name': 'Brandmarke' },
"ENEMY_STATUS_EFFECT_HEAL_CHANCE": { "name": "Vollheilungsmarke", "description": "Fügt eine 10%ige Chance hinzu, jede Runde einen Statuszustand zu heilen" }, 'ENEMY_STATUS_EFFECT_HEAL_CHANCE': { 'name': 'Vollheilungsmarke', 'description': 'Fügt eine 10%ige Chance hinzu, jede Runde einen Statuszustand zu heilen' },
"ENEMY_ENDURE_CHANCE": { "name": "Ausdauer-Marke" }, 'ENEMY_ENDURE_CHANCE': { 'name': 'Ausdauer-Marke' },
"ENEMY_FUSED_CHANCE": { "name": "Fusionsmarke", "description": "Fügt eine 1%ige Chance hinzu, dass ein wildes Pokémon eine Fusion ist" }, 'ENEMY_FUSED_CHANCE': { 'name': 'Fusionsmarke', 'description': 'Fügt eine 1%ige Chance hinzu, dass ein wildes Pokémon eine Fusion ist' },
}, },
TempBattleStatBoosterItem: { TempBattleStatBoosterItem: {
"x_attack": "X-Angriff", 'x_attack': 'X-Angriff',
"x_defense": "X-Verteidigung", 'x_defense': 'X-Verteidigung',
"x_sp_atk": "X-Sp.-Ang.", 'x_sp_atk': 'X-Sp.-Ang.',
"x_sp_def": "X-Sp.-Vert.", 'x_sp_def': 'X-Sp.-Vert.',
"x_speed": "X-Tempo", 'x_speed': 'X-Tempo',
"x_accuracy": "X-Treffer", 'x_accuracy': 'X-Treffer',
"dire_hit": "X-Volltreffer", 'dire_hit': 'X-Volltreffer',
}, },
AttackTypeBoosterItem: { AttackTypeBoosterItem: {
"silk_scarf": "Seidenschal", 'silk_scarf': 'Seidenschal',
"black_belt": "Schwarzgurt", 'black_belt': 'Schwarzgurt',
"sharp_beak": "Spitzer Schnabel", 'sharp_beak': 'Spitzer Schnabel',
"poison_barb": "Giftstich", 'poison_barb': 'Giftstich',
"soft_sand": "Pudersand", 'soft_sand': 'Pudersand',
"hard_stone": "Granitstein", 'hard_stone': 'Granitstein',
"silver_powder": "Silberstaub", 'silver_powder': 'Silberstaub',
"spell_tag": "Bannsticker", 'spell_tag': 'Bannsticker',
"metal_coat": "Metallmantel", 'metal_coat': 'Metallmantel',
"charcoal": "Holzkohle", 'charcoal': 'Holzkohle',
"mystic_water": "Zauberwasser", 'mystic_water': 'Zauberwasser',
"miracle_seed": "Wundersaat", 'miracle_seed': 'Wundersaat',
"magnet": "Magnet", 'magnet': 'Magnet',
"twisted_spoon": "Krümmlöffel", 'twisted_spoon': 'Krümmlöffel',
"never_melt_ice": "Ewiges Eis", 'never_melt_ice': 'Ewiges Eis',
"dragon_fang": "Drachenzahn", 'dragon_fang': 'Drachenzahn',
"black_glasses": "Schattenbrille", 'black_glasses': 'Schattenbrille',
"fairy_feather": "Feendaune", 'fairy_feather': 'Feendaune',
}, },
BaseStatBoosterItem: { BaseStatBoosterItem: {
"hp_up": "KP-Plus", 'hp_up': 'KP-Plus',
"protein": "Protein", 'protein': 'Protein',
"iron": "Eisen", 'iron': 'Eisen',
"calcium": "Kalzium", 'calcium': 'Kalzium',
"zinc": "Zink", 'zinc': 'Zink',
"carbos": "Carbon", 'carbos': 'Carbon',
}, },
EvolutionItem: { EvolutionItem: {
"NONE": "Keins", 'NONE': 'Keins',
"LINKING_CORD": "Linkkabel", 'LINKING_CORD': 'Linkkabel',
"SUN_STONE": "Sonnenstein", 'SUN_STONE': 'Sonnenstein',
"MOON_STONE": "Mondstein", 'MOON_STONE': 'Mondstein',
"LEAF_STONE": "Blattstein", 'LEAF_STONE': 'Blattstein',
"FIRE_STONE": "Feuerstein", 'FIRE_STONE': 'Feuerstein',
"WATER_STONE": "Wasserstein", 'WATER_STONE': 'Wasserstein',
"THUNDER_STONE": "Donnerstein", 'THUNDER_STONE': 'Donnerstein',
"ICE_STONE": "Eisstein", 'ICE_STONE': 'Eisstein',
"DUSK_STONE": "Finsterstein", 'DUSK_STONE': 'Finsterstein',
"DAWN_STONE": "Funkelstein", 'DAWN_STONE': 'Funkelstein',
"SHINY_STONE": "Leuchtstein", 'SHINY_STONE': 'Leuchtstein',
"CRACKED_POT": "Rissige Kanne", 'CRACKED_POT': 'Rissige Kanne',
"SWEET_APPLE": "Süßer Apfel", 'SWEET_APPLE': 'Süßer Apfel',
"TART_APPLE": "Saurer Apfel", 'TART_APPLE': 'Saurer Apfel',
"STRAWBERRY_SWEET": "Zucker-Erdbeere", 'STRAWBERRY_SWEET': 'Zucker-Erdbeere',
"UNREMARKABLE_TEACUP": "Simple Teeschale", 'UNREMARKABLE_TEACUP': 'Simple Teeschale',
"CHIPPED_POT": "Löchrige Kanne", 'CHIPPED_POT': 'Löchrige Kanne',
"BLACK_AUGURITE": "Schwarzaugit", 'BLACK_AUGURITE': 'Schwarzaugit',
"GALARICA_CUFF": "Galarnuss-Reif", 'GALARICA_CUFF': 'Galarnuss-Reif',
"GALARICA_WREATH": "Galarnuss-Kranz", 'GALARICA_WREATH': 'Galarnuss-Kranz',
"PEAT_BLOCK": "Torfblock", 'PEAT_BLOCK': 'Torfblock',
"AUSPICIOUS_ARMOR": "Glorienrüstung", 'AUSPICIOUS_ARMOR': 'Glorienrüstung',
"MALICIOUS_ARMOR": "Fluchrüstung", 'MALICIOUS_ARMOR': 'Fluchrüstung',
"MASTERPIECE_TEACUP": "Edle Teeschale", 'MASTERPIECE_TEACUP': 'Edle Teeschale',
"METAL_ALLOY": "Legierungsmetall", 'METAL_ALLOY': 'Legierungsmetall',
"SCROLL_OF_DARKNESS": "Unlicht-Schriftrolle", 'SCROLL_OF_DARKNESS': 'Unlicht-Schriftrolle',
"SCROLL_OF_WATERS": "Wasser-Schriftrolle", 'SCROLL_OF_WATERS': 'Wasser-Schriftrolle',
"SYRUPY_APPLE": "Saftiger Apfel", 'SYRUPY_APPLE': 'Saftiger Apfel',
}, },
FormChangeItem: { FormChangeItem: {
"NONE": "Keins", 'NONE': 'Keins',
"ABOMASITE": "Rexblisarnit", 'ABOMASITE': 'Rexblisarnit',
"ABSOLITE": "Absolnit", 'ABSOLITE': 'Absolnit',
"AERODACTYLITE": "Aerodactylonit", 'AERODACTYLITE': 'Aerodactylonit',
"AGGRONITE": "Stollossnit", 'AGGRONITE': 'Stollossnit',
"ALAKAZITE": "Simsalanit", 'ALAKAZITE': 'Simsalanit',
"ALTARIANITE": "Altarianit", 'ALTARIANITE': 'Altarianit',
"AMPHAROSITE": "Ampharosnit", 'AMPHAROSITE': 'Ampharosnit',
"AUDINITE": "Ohrdochnit", 'AUDINITE': 'Ohrdochnit',
"BANETTITE": "Banetteonit", 'BANETTITE': 'Banetteonit',
"BEEDRILLITE": "Bibornit", 'BEEDRILLITE': 'Bibornit',
"BLASTOISINITE": "Turtoknit", 'BLASTOISINITE': 'Turtoknit',
"BLAZIKENITE": "Lohgocknit", 'BLAZIKENITE': 'Lohgocknit',
"CAMERUPTITE": "Cameruptnit", 'CAMERUPTITE': 'Cameruptnit',
"CHARIZARDITE_X": "Gluraknit X", 'CHARIZARDITE_X': 'Gluraknit X',
"CHARIZARDITE_Y": "Gluraknit Y", 'CHARIZARDITE_Y': 'Gluraknit Y',
"DIANCITE": "Diancienit", 'DIANCITE': 'Diancienit',
"GALLADITE": "Galagladinit", 'GALLADITE': 'Galagladinit',
"GARCHOMPITE": "Knakracknit", 'GARCHOMPITE': 'Knakracknit',
"GARDEVOIRITE": "Guardevoirnit", 'GARDEVOIRITE': 'Guardevoirnit',
"GENGARITE": "Gengarnit ", 'GENGARITE': 'Gengarnit ',
"GLALITITE": "Firnontornit", 'GLALITITE': 'Firnontornit',
"GYARADOSITE": "Garadosnit", 'GYARADOSITE': 'Garadosnit',
"HERACRONITE": "Skarabornit", 'HERACRONITE': 'Skarabornit',
"HOUNDOOMINITE": "Hundemonit ", 'HOUNDOOMINITE': 'Hundemonit ',
"KANGASKHANITE": "Kangamanit", 'KANGASKHANITE': 'Kangamanit',
"LATIASITE": "Latiasnit", 'LATIASITE': 'Latiasnit',
"LATIOSITE": "Latiosnit", 'LATIOSITE': 'Latiosnit',
"LOPUNNITE": "Schlapornit", 'LOPUNNITE': 'Schlapornit',
"LUCARIONITE": "Lucarionit", 'LUCARIONITE': 'Lucarionit',
"MANECTITE": "Voltensonit", 'MANECTITE': 'Voltensonit',
"MAWILITE": "Flunkifernit", 'MAWILITE': 'Flunkifernit',
"MEDICHAMITE": "Meditalisnit", 'MEDICHAMITE': 'Meditalisnit',
"METAGROSSITE": "Metagrossnit", 'METAGROSSITE': 'Metagrossnit',
"MEWTWONITE_X": "Mewtunit X", 'MEWTWONITE_X': 'Mewtunit X',
"MEWTWONITE_Y": "Mewtunit Y", 'MEWTWONITE_Y': 'Mewtunit Y',
"PIDGEOTITE": "Taubossnit", 'PIDGEOTITE': 'Taubossnit',
"PINSIRITE": "Pinsirnit", 'PINSIRITE': 'Pinsirnit',
"RAYQUAZITE": "Rayquazanit", 'RAYQUAZITE': 'Rayquazanit',
"SABLENITE": "Zobirisnit", 'SABLENITE': 'Zobirisnit',
"SALAMENCITE": "Brutalandanit", 'SALAMENCITE': 'Brutalandanit',
"SCEPTILITE": "Gewaldronit", 'SCEPTILITE': 'Gewaldronit',
"SCIZORITE": "Scheroxnit", 'SCIZORITE': 'Scheroxnit',
"SHARPEDONITE": "Tohaidonit", 'SHARPEDONITE': 'Tohaidonit',
"SLOWBRONITE": "Lahmusnit", 'SLOWBRONITE': 'Lahmusnit',
"STEELIXITE": "Stahlosnit", 'STEELIXITE': 'Stahlosnit',
"SWAMPERTITE": "Sumpexnit", 'SWAMPERTITE': 'Sumpexnit',
"TYRANITARITE": "Despotarnit", 'TYRANITARITE': 'Despotarnit',
"VENUSAURITE": "Bisaflornit", 'VENUSAURITE': 'Bisaflornit',
"BLUE_ORB": "Blauer Edelstein", 'BLUE_ORB': 'Blauer Edelstein',
"RED_ORB": "Roter Edelstein", 'RED_ORB': 'Roter Edelstein',
"SHARP_METEORITE": "Scharfer Meteorit", 'SHARP_METEORITE': 'Scharfer Meteorit',
"HARD_METEORITE": "Harter Meteorit", 'HARD_METEORITE': 'Harter Meteorit',
"SMOOTH_METEORITE": "Glatter Meteorit", 'SMOOTH_METEORITE': 'Glatter Meteorit',
"ADAMANT_CRYSTAL": "Adamantkristall", 'ADAMANT_CRYSTAL': 'Adamantkristall',
"LUSTROUS_ORB": "Weiß-Orb", 'LUSTROUS_ORB': 'Weiß-Orb',
"GRISEOUS_CORE": "Platinumkristall", 'GRISEOUS_CORE': 'Platinumkristall',
"REVEAL_GLASS": "Wahrspiegel", 'REVEAL_GLASS': 'Wahrspiegel',
"GRACIDEA": "Gracidea", 'GRACIDEA': 'Gracidea',
"MAX_MUSHROOMS": "Dyna-Pilz", 'MAX_MUSHROOMS': 'Dyna-Pilz',
"DARK_STONE": "Dunkelstein", 'DARK_STONE': 'Dunkelstein',
"LIGHT_STONE": "Lichtstein", 'LIGHT_STONE': 'Lichtstein',
"PRISON_BOTTLE": "Banngefäß", 'PRISON_BOTTLE': 'Banngefäß',
"N_LUNARIZER": "Necrolun", 'N_LUNARIZER': 'Necrolun',
"N_SOLARIZER": "Necrosol", 'N_SOLARIZER': 'Necrosol',
"RUSTED_SWORD": "Rostiges Schwert", 'RUSTED_SWORD': 'Rostiges Schwert',
"RUSTED_SHIELD": "Rostiges Schild", 'RUSTED_SHIELD': 'Rostiges Schild',
"ICY_REINS_OF_UNITY": "eisige Zügel des Bundes", 'ICY_REINS_OF_UNITY': 'eisige Zügel des Bundes',
"SHADOW_REINS_OF_UNITY": "schattige Zügel des Bundes", 'SHADOW_REINS_OF_UNITY': 'schattige Zügel des Bundes',
"WELLSPRING_MASK": "Brunnenmaske", 'WELLSPRING_MASK': 'Brunnenmaske',
"HEARTHFLAME_MASK": "Ofenmaske", 'HEARTHFLAME_MASK': 'Ofenmaske',
"CORNERSTONE_MASK": "Fundamentmaske", 'CORNERSTONE_MASK': 'Fundamentmaske',
"SHOCK_DRIVE": "Blitzmodul", 'SHOCK_DRIVE': 'Blitzmodul',
"BURN_DRIVE": "Flammenmodul", 'BURN_DRIVE': 'Flammenmodul',
"CHILL_DRIVE": "Gefriermodul", 'CHILL_DRIVE': 'Gefriermodul',
"DOUSE_DRIVE": "Aquamodul", 'DOUSE_DRIVE': 'Aquamodul',
}, },
} as const; } as const;

File diff suppressed because it is too large Load Diff

View File

@ -1,29 +1,29 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const nature: SimpleTranslationEntries = { export const nature: SimpleTranslationEntries = {
"Hardy": "Robust", 'Hardy': 'Robust',
"Lonely": "Solo", 'Lonely': 'Solo',
"Brave": "Mutig", 'Brave': 'Mutig',
"Adamant": "Hart", 'Adamant': 'Hart',
"Naughty": "Frech", 'Naughty': 'Frech',
"Bold": "Kühn", 'Bold': 'Kühn',
"Docile": "Sanft", 'Docile': 'Sanft',
"Relaxed": "Locker", 'Relaxed': 'Locker',
"Impish": "Pfiffig", 'Impish': 'Pfiffig',
"Lax": "Lasch", 'Lax': 'Lasch',
"Timid": "Scheu", 'Timid': 'Scheu',
"Hasty": "Hastig", 'Hasty': 'Hastig',
"Serious": "Ernst", 'Serious': 'Ernst',
"Jolly": "Froh", 'Jolly': 'Froh',
"Naive": "Naiv", 'Naive': 'Naiv',
"Modest": "Mäßig", 'Modest': 'Mäßig',
"Mild": "Mild", 'Mild': 'Mild',
"Quiet": "Ruhig", 'Quiet': 'Ruhig',
"Bashful": "Zaghaft", 'Bashful': 'Zaghaft',
"Rash": "Hitzig", 'Rash': 'Hitzig',
"Calm": "Still", 'Calm': 'Still',
"Gentle": "Zart", 'Gentle': 'Zart',
"Sassy": "Forsch", 'Sassy': 'Forsch',
"Careful": "Sacht", 'Careful': 'Sacht',
"Quirky": "Kauzig" 'Quirky': 'Kauzig'
} as const; } as const;

View File

@ -1,10 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const pokeball: SimpleTranslationEntries = { export const pokeball: SimpleTranslationEntries = {
"pokeBall": "Pokéball", 'pokeBall': 'Pokéball',
"greatBall": "Superball", 'greatBall': 'Superball',
"ultraBall": "Hyperball", 'ultraBall': 'Hyperball',
"rogueBall": "Rogueball", 'rogueBall': 'Rogueball',
"masterBall": "Meisterball", 'masterBall': 'Meisterball',
"luxuryBall": "Luxusball", 'luxuryBall': 'Luxusball',
} as const; } as const;

View File

@ -1,41 +1,41 @@
import { PokemonInfoTranslationEntries } from "#app/plugins/i18n"; import { PokemonInfoTranslationEntries } from '#app/plugins/i18n';
export const pokemonInfo: PokemonInfoTranslationEntries = { export const pokemonInfo: PokemonInfoTranslationEntries = {
Stat: { Stat: {
"HP": "Max. KP", 'HP': 'Max. KP',
"HPshortened": "MaxKP", 'HPshortened': 'MaxKP',
"ATK": "Angriff", 'ATK': 'Angriff',
"ATKshortened": "Ang", 'ATKshortened': 'Ang',
"DEF": "Verteidigung", 'DEF': 'Verteidigung',
"DEFshortened": "Vert", 'DEFshortened': 'Vert',
"SPATK": "Sp. Ang", 'SPATK': 'Sp. Ang',
"SPATKshortened": "SpAng", 'SPATKshortened': 'SpAng',
"SPDEF": "Sp. Vert", 'SPDEF': 'Sp. Vert',
"SPDEFshortened": "SpVert", 'SPDEFshortened': 'SpVert',
"SPD": "Initiative", 'SPD': 'Initiative',
"SPDshortened": "Init", 'SPDshortened': 'Init',
}, },
Type: { Type: {
"UNKNOWN": "Unbekannt", 'UNKNOWN': 'Unbekannt',
"NORMAL": "Normal", 'NORMAL': 'Normal',
"FIGHTING": "Kampf", 'FIGHTING': 'Kampf',
"FLYING": "Flug", 'FLYING': 'Flug',
"POISON": "Gift", 'POISON': 'Gift',
"GROUND": "Boden", 'GROUND': 'Boden',
"ROCK": "Gestein", 'ROCK': 'Gestein',
"BUG": "Käfer", 'BUG': 'Käfer',
"GHOST": "Geist", 'GHOST': 'Geist',
"STEEL": "Stahl", 'STEEL': 'Stahl',
"FIRE": "Feuer", 'FIRE': 'Feuer',
"WATER": "Wasser", 'WATER': 'Wasser',
"GRASS": "Pflanze", 'GRASS': 'Pflanze',
"ELECTRIC": "Elektro", 'ELECTRIC': 'Elektro',
"PSYCHIC": "Psycho", 'PSYCHIC': 'Psycho',
"ICE": "Eis", 'ICE': 'Eis',
"DRAGON": "Drache", 'DRAGON': 'Drache',
"DARK": "Unlicht", 'DARK': 'Unlicht',
"FAIRY": "Fee", 'FAIRY': 'Fee',
"STELLAR": "Stellar", 'STELLAR': 'Stellar',
}, },
} as const; } as const;

File diff suppressed because it is too large Load Diff

View File

@ -1,37 +1,37 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const splashMessages: SimpleTranslationEntries = { export const splashMessages: SimpleTranslationEntries = {
"battlesWon": "Kämpfe gewonnen!", 'battlesWon': 'Kämpfe gewonnen!',
"joinTheDiscord": "Tritt dem Discord bei!", 'joinTheDiscord': 'Tritt dem Discord bei!',
"infiniteLevels": "Unendliche Level!", 'infiniteLevels': 'Unendliche Level!',
"everythingStacks": "Alles stapelt sich!", 'everythingStacks': 'Alles stapelt sich!',
"optionalSaveScumming": "Optionales Save Scumming!", 'optionalSaveScumming': 'Optionales Save Scumming!',
"biomes": "35 Biome!", 'biomes': '35 Biome!',
"openSource": "Open Source!", 'openSource': 'Open Source!',
"playWithSpeed": "Spiele mit fünffacher Geschwindigkeit!", 'playWithSpeed': 'Spiele mit fünffacher Geschwindigkeit!',
"liveBugTesting": "Live-Bug-Tests!", 'liveBugTesting': 'Live-Bug-Tests!',
"heavyInfluence": "Starker RoR2-Einfluss!", 'heavyInfluence': 'Starker RoR2-Einfluss!',
"pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!", 'pokemonRiskAndPokemonRain': 'Pokémon Risk and Pokémon Rain!',
"nowWithMoreSalt": "Jetzt mit 33% mehr Salz!", 'nowWithMoreSalt': 'Jetzt mit 33% mehr Salz!',
"infiniteFusionAtHome": "Wir haben Infinite Fusionen zu Hause!", 'infiniteFusionAtHome': 'Wir haben Infinite Fusionen zu Hause!',
"brokenEggMoves": "Übermächtige Ei-Attacken!", 'brokenEggMoves': 'Übermächtige Ei-Attacken!',
"magnificent": "Herrlich!", 'magnificent': 'Herrlich!',
"mubstitute": "Melegator!", 'mubstitute': 'Melegator!',
"thatsCrazy": "Das ist verrückt!", 'thatsCrazy': 'Das ist verrückt!',
"oranceJuice": "Orangensaft!", 'oranceJuice': 'Orangensaft!',
"questionableBalancing": "Fragwürdiges Balancing!", 'questionableBalancing': 'Fragwürdiges Balancing!',
"coolShaders": "Coole Shader!", 'coolShaders': 'Coole Shader!',
"aiFree": "Ohne KI!", 'aiFree': 'Ohne KI!',
"suddenDifficultySpikes": "Plötzliche Schwierigkeitsspitzen!", 'suddenDifficultySpikes': 'Plötzliche Schwierigkeitsspitzen!',
"basedOnAnUnfinishedFlashGame": "Basierend auf einem unfertigen Flash-Spiel!", 'basedOnAnUnfinishedFlashGame': 'Basierend auf einem unfertigen Flash-Spiel!',
"moreAddictiveThanIntended": "Süchtig machender als beabsichtigt!", 'moreAddictiveThanIntended': 'Süchtig machender als beabsichtigt!',
"mostlyConsistentSeeds": "Meistens konsistente Seeds!", 'mostlyConsistentSeeds': 'Meistens konsistente Seeds!',
"achievementPointsDontDoAnything": "Erungenschaftspunkte tun nichts!", 'achievementPointsDontDoAnything': 'Erungenschaftspunkte tun nichts!',
"youDoNotStartAtLevel": "Du startest nicht auf Level 2000!", 'youDoNotStartAtLevel': 'Du startest nicht auf Level 2000!',
"dontTalkAboutTheManaphyEggIncident": "Wir reden nicht über den Manaphy-Ei-Vorfall!", 'dontTalkAboutTheManaphyEggIncident': 'Wir reden nicht über den Manaphy-Ei-Vorfall!',
"alsoTryPokengine": "Versuche auch Pokéngine!", 'alsoTryPokengine': 'Versuche auch Pokéngine!',
"alsoTryEmeraldRogue": "Versuche auch Emerald Rogue!", 'alsoTryEmeraldRogue': 'Versuche auch Emerald Rogue!',
"alsoTryRadicalRed": "Versuche auch Radical Red!", 'alsoTryRadicalRed': 'Versuche auch Radical Red!',
"eeveeExpo": "Evoli-Expo!", 'eeveeExpo': 'Evoli-Expo!',
"ynoproject": "YNO-Projekt!", 'ynoproject': 'YNO-Projekt!',
} as const; } as const;

View File

@ -1,4 +1,4 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
/** /**
* The menu namespace holds most miscellaneous text that isn't directly part of the game's * The menu namespace holds most miscellaneous text that isn't directly part of the game's
@ -6,39 +6,39 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n";
* account interactions, descriptive text, etc. * account interactions, descriptive text, etc.
*/ */
export const starterSelectUiHandler: SimpleTranslationEntries = { export const starterSelectUiHandler: SimpleTranslationEntries = {
"confirmStartTeam": "Mit diesen Pokémon losziehen?", 'confirmStartTeam': 'Mit diesen Pokémon losziehen?',
"gen1": "I", 'gen1': 'I',
"gen2": "II", 'gen2': 'II',
"gen3": "III", 'gen3': 'III',
"gen4": "IV", 'gen4': 'IV',
"gen5": "V", 'gen5': 'V',
"gen6": "VI", 'gen6': 'VI',
"gen7": "VII", 'gen7': 'VII',
"gen8": "VIII", 'gen8': 'VIII',
"gen9": "IX", 'gen9': 'IX',
"growthRate": "Wachstum:", 'growthRate': 'Wachstum:',
"ability": "Fähgkeit:", 'ability': 'Fähgkeit:',
"passive": "Passiv:", 'passive': 'Passiv:',
"nature": "Wesen:", 'nature': 'Wesen:',
"eggMoves": "Ei-Attacken", 'eggMoves': 'Ei-Attacken',
"start": "Start", 'start': 'Start',
"addToParty": "Zum Team hinzufügen", 'addToParty': 'Zum Team hinzufügen',
"toggleIVs": "DVs anzeigen/verbergen", 'toggleIVs': 'DVs anzeigen/verbergen',
"manageMoves": "Attacken ändern", 'manageMoves': 'Attacken ändern',
"useCandies": "Bonbons verwenden", 'useCandies': 'Bonbons verwenden',
"selectMoveSwapOut": "Wähle die zu ersetzende Attacke.", 'selectMoveSwapOut': 'Wähle die zu ersetzende Attacke.',
"selectMoveSwapWith": "Wähle die gewünschte Attacke.", 'selectMoveSwapWith': 'Wähle die gewünschte Attacke.',
"unlockPassive": "Passiv-Skill freischalten", 'unlockPassive': 'Passiv-Skill freischalten',
"reduceCost": "Preis reduzieren", 'reduceCost': 'Preis reduzieren',
"cycleShiny": "R: Schillernd Ja/Nein", 'cycleShiny': 'R: Schillernd Ja/Nein',
"cycleForm": "F: Form ändern", 'cycleForm': 'F: Form ändern',
"cycleGender": "G: Geschlecht ändern", 'cycleGender': 'G: Geschlecht ändern',
"cycleAbility": "E: Fähigkeit ändern", 'cycleAbility': 'E: Fähigkeit ändern',
"cycleNature": "N: Wesen Ändern", 'cycleNature': 'N: Wesen Ändern',
"cycleVariant": "V: Seltenheit ändern", 'cycleVariant': 'V: Seltenheit ändern',
"enablePassive": "Passiv-Skill aktivieren", 'enablePassive': 'Passiv-Skill aktivieren',
"disablePassive": "Passiv-Skill deaktivieren", 'disablePassive': 'Passiv-Skill deaktivieren',
"locked": "Gesperrt", 'locked': 'Gesperrt',
"disabled": "Deaktiviert", 'disabled': 'Deaktiviert',
"uncaught": "Ungefangen" 'uncaught': 'Ungefangen'
} };

View File

@ -1,244 +1,244 @@
import {SimpleTranslationEntries} from "#app/plugins/i18n"; import {SimpleTranslationEntries} from '#app/plugins/i18n';
// Titles of special trainers like gym leaders, elite four, and the champion // Titles of special trainers like gym leaders, elite four, and the champion
export const titles: SimpleTranslationEntries = { export const titles: SimpleTranslationEntries = {
"elite_four": "Top Vier", 'elite_four': 'Top Vier',
"gym_leader": "Arenaleiter", 'gym_leader': 'Arenaleiter',
"gym_leader_female": "Arenaleiterin", 'gym_leader_female': 'Arenaleiterin',
"champion": "Champion", 'champion': 'Champion',
"rival": "Rivale", 'rival': 'Rivale',
"professor": "Professor", 'professor': 'Professor',
"frontier_brain": "Kampfkoryphäen", 'frontier_brain': 'Kampfkoryphäen',
// Maybe if we add the evil teams we can add "Team Rocket" and "Team Aqua" etc. here as well as "Team Rocket Boss" and "Team Aqua Admin" etc. // Maybe if we add the evil teams we can add "Team Rocket" and "Team Aqua" etc. here as well as "Team Rocket Boss" and "Team Aqua Admin" etc.
} as const; } as const;
// Titles of trainers like "Youngster" or "Lass" // Titles of trainers like "Youngster" or "Lass"
export const trainerClasses: SimpleTranslationEntries = { export const trainerClasses: SimpleTranslationEntries = {
"ace_trainer": "Ass-Trainer", 'ace_trainer': 'Ass-Trainer',
"ace_trainer_female": "Ass-Trainerin", 'ace_trainer_female': 'Ass-Trainerin',
"ace_duo": "Ass-Duo", 'ace_duo': 'Ass-Duo',
"artist": "Künstler", 'artist': 'Künstler',
"artist_female": "Künstlerin", 'artist_female': 'Künstlerin',
"backers": "Anhänger", 'backers': 'Anhänger',
"backpacker": "Backpacker", 'backpacker': 'Backpacker',
"backpacker_female": "Backpackerin", 'backpacker_female': 'Backpackerin',
"backpackers": "Backpacker", 'backpackers': 'Backpacker',
"baker": "Bäckerin", 'baker': 'Bäckerin',
"battle_girl": "Kämpferin", 'battle_girl': 'Kämpferin',
"beauty": "Schönheit", 'beauty': 'Schönheit',
"beginners": "Anfänger", 'beginners': 'Anfänger',
"biker": "Rowdy", 'biker': 'Rowdy',
"black_belt": "Schwarzgurt", 'black_belt': 'Schwarzgurt',
"breeder": "Pokémon Züchter", 'breeder': 'Pokémon Züchter',
"breeder_female": "Pokémon Züchterin", 'breeder_female': 'Pokémon Züchterin',
"breeders": "Pokémon Züchter", 'breeders': 'Pokémon Züchter',
"clerk": "Angestellter", 'clerk': 'Angestellter',
"clerk_female": "Angestellte", 'clerk_female': 'Angestellte',
"colleagues": "Geschäftspartner", 'colleagues': 'Geschäftspartner',
"crush_kin": "Mühlensippe", 'crush_kin': 'Mühlensippe',
"cyclist": "Biker", 'cyclist': 'Biker',
"cyclist_female": "Bikerin", 'cyclist_female': 'Bikerin',
"cyclists": "Biker", 'cyclists': 'Biker',
"dancer": "Tänzer", 'dancer': 'Tänzer',
"dancer_female": "Tänzerin", 'dancer_female': 'Tänzerin',
"depot_agent": "Bahnangestellter", 'depot_agent': 'Bahnangestellter',
"doctor": "Arzt", 'doctor': 'Arzt',
"doctor_female": "Ärztin", 'doctor_female': 'Ärztin',
"fisherman": "Angler", 'fisherman': 'Angler',
"fisherman_female": "Angler", // Seems to be the same in german but exists in other languages like italian 'fisherman_female': 'Angler', // Seems to be the same in german but exists in other languages like italian
"gentleman": "Gentleman", 'gentleman': 'Gentleman',
"guitarist": "Gitarrist", 'guitarist': 'Gitarrist',
"guitarist_female": "Gitarristin", 'guitarist_female': 'Gitarristin',
"harlequin": "Kasper", 'harlequin': 'Kasper',
"hiker": "Wanderer", 'hiker': 'Wanderer',
"hooligans": "Rabauken", 'hooligans': 'Rabauken',
"hoopster": "Basketballer", 'hoopster': 'Basketballer',
"infielder": "Baseballer", 'infielder': 'Baseballer',
"janitor": "Hausmeister", 'janitor': 'Hausmeister',
"lady": "Lady", 'lady': 'Lady',
"lass": "Göre", 'lass': 'Göre',
"linebacker": "Footballer", 'linebacker': 'Footballer',
"maid": "Zofe", 'maid': 'Zofe',
"madame": "Madam", 'madame': 'Madam',
"medical_team": "Mediziner", 'medical_team': 'Mediziner',
"musician": "Musiker", 'musician': 'Musiker',
"hex_maniac": "Hexe", 'hex_maniac': 'Hexe',
"nurse": "Pflegerin", 'nurse': 'Pflegerin',
"nursery_aide": "Erzieherin", 'nursery_aide': 'Erzieherin',
"officer": "Polizist", 'officer': 'Polizist',
"parasol_lady": "Schirmdame", 'parasol_lady': 'Schirmdame',
"pilot": "Pilot", 'pilot': 'Pilot',
"pokéfan": "Pokéfan", 'pokéfan': 'Pokéfan',
"pokéfan_female": "Pokéfan", 'pokéfan_female': 'Pokéfan',
"pokéfan_family": "Pokéfan-Pärchen", 'pokéfan_family': 'Pokéfan-Pärchen',
"preschooler": "Vorschüler", 'preschooler': 'Vorschüler',
"preschooler_female": "Vorschülerin", 'preschooler_female': 'Vorschülerin',
"preschoolers": "Vorschüler", 'preschoolers': 'Vorschüler',
"psychic": "Seher", 'psychic': 'Seher',
"psychic_female": "Seherin", 'psychic_female': 'Seherin',
"psychics": "Seher", 'psychics': 'Seher',
"pokémon_ranger": "Pokémon-Ranger", 'pokémon_ranger': 'Pokémon-Ranger',
"pokémon_ranger_female": "Pokémon-Ranger", 'pokémon_ranger_female': 'Pokémon-Ranger',
"pokémon_rangers": "Pokémon-Ranger", 'pokémon_rangers': 'Pokémon-Ranger',
"ranger": "Ranger", 'ranger': 'Ranger',
"restaurant_staff": "Restaurant Angestellte", 'restaurant_staff': 'Restaurant Angestellte',
"rich": "Rich", 'rich': 'Rich',
"rich_female": "Rich", 'rich_female': 'Rich',
"rich_boy": "Schnösel", 'rich_boy': 'Schnösel',
"rich_couple": "Reiches Paar", 'rich_couple': 'Reiches Paar',
"rich_kid": "Rich Kid", 'rich_kid': 'Rich Kid',
"rich_kid_female": "Rich Kid", 'rich_kid_female': 'Rich Kid',
"rich_kids": "Schnösel", 'rich_kids': 'Schnösel',
"roughneck": "Raufbold", 'roughneck': 'Raufbold',
"scientist": "Forscher", 'scientist': 'Forscher',
"scientist_female": "Forscherin", 'scientist_female': 'Forscherin',
"scientists": "Forscher", 'scientists': 'Forscher',
"smasher": "Tennis-Ass", 'smasher': 'Tennis-Ass',
"snow_worker": "Schneearbeiter", // There is a trainer type for this but no actual trainer class? They seem to be just workers but dressed differently 'snow_worker': 'Schneearbeiter', // There is a trainer type for this but no actual trainer class? They seem to be just workers but dressed differently
"snow_worker_female": "Schneearbeiterin", 'snow_worker_female': 'Schneearbeiterin',
"striker": "Fußballer", 'striker': 'Fußballer',
"school_kid": "Schulkind", 'school_kid': 'Schulkind',
"school_kid_female": "Schulkind", // Same in german but different in italian 'school_kid_female': 'Schulkind', // Same in german but different in italian
"school_kids": "Schüler", 'school_kids': 'Schüler',
"swimmer": "Schwimmer", 'swimmer': 'Schwimmer',
"swimmer_female": "Schwimmerin", 'swimmer_female': 'Schwimmerin',
"swimmers": "Schwimmerpaar", 'swimmers': 'Schwimmerpaar',
"twins": "Zwillinge", 'twins': 'Zwillinge',
"veteran": "Veteran", 'veteran': 'Veteran',
"veteran_female": "Veteran", // same in german, different in other languages 'veteran_female': 'Veteran', // same in german, different in other languages
"veteran_duo": "Veteranen", 'veteran_duo': 'Veteranen',
"waiter": "Servierer", 'waiter': 'Servierer',
"waitress": "Serviererin", 'waitress': 'Serviererin',
"worker": "Arbeiter", 'worker': 'Arbeiter',
"worker_female": "Arbeiterin", 'worker_female': 'Arbeiterin',
"workers": "Arbeiter", 'workers': 'Arbeiter',
"youngster": "Knirps" 'youngster': 'Knirps'
} as const; } as const;
// Names of special trainers like gym leaders, elite four, and the champion // Names of special trainers like gym leaders, elite four, and the champion
export const trainerNames: SimpleTranslationEntries = { export const trainerNames: SimpleTranslationEntries = {
"brock": "Rocko", 'brock': 'Rocko',
"misty": "Misty", 'misty': 'Misty',
"lt_surge": "Major Bob", 'lt_surge': 'Major Bob',
"erika": "Erika", 'erika': 'Erika',
"janine": "Janina", 'janine': 'Janina',
"sabrina": "Sabrina", 'sabrina': 'Sabrina',
"blaine": "Pyro", 'blaine': 'Pyro',
"giovanni": "Giovanni", 'giovanni': 'Giovanni',
"falkner": "Falk", 'falkner': 'Falk',
"bugsy": "Kai", 'bugsy': 'Kai',
"whitney": "Bianka", 'whitney': 'Bianka',
"morty": "Jens", 'morty': 'Jens',
"chuck": "Hartwig", 'chuck': 'Hartwig',
"jasmine": "Jasmin", 'jasmine': 'Jasmin',
"pryce": "Norbert", 'pryce': 'Norbert',
"clair": "Sandra", 'clair': 'Sandra',
"roxanne": "Felizia", 'roxanne': 'Felizia',
"brawly": "Kamillo", 'brawly': 'Kamillo',
"wattson": "Walter", 'wattson': 'Walter',
"flannery": "Flavia", 'flannery': 'Flavia',
"norman": "Norman", 'norman': 'Norman',
"winona": "Wibke", 'winona': 'Wibke',
"tate": "Ben", 'tate': 'Ben',
"liza": "Svenja", 'liza': 'Svenja',
"juan": "Juan", 'juan': 'Juan',
"roark": "Veit", 'roark': 'Veit',
"gardenia": "Silvana", 'gardenia': 'Silvana',
"maylene": "Hilda", 'maylene': 'Hilda',
"crasher_wake": "Wellenbrecher Marinus", 'crasher_wake': 'Wellenbrecher Marinus',
"fantina": "Lamina", 'fantina': 'Lamina',
"byron": "Adam", 'byron': 'Adam',
"candice": "Frida", 'candice': 'Frida',
"volkner": "Volkner", 'volkner': 'Volkner',
"cilan": "Benny", 'cilan': 'Benny',
"chili": "Maik", 'chili': 'Maik',
"cress": "Colin", 'cress': 'Colin',
"cheren": "Cheren", 'cheren': 'Cheren',
"lenora": "Aloe", 'lenora': 'Aloe',
"roxie": "Mica", 'roxie': 'Mica',
"burgh": "Artie", 'burgh': 'Artie',
"elesa": "Kamilla", 'elesa': 'Kamilla',
"clay": "Turner", 'clay': 'Turner',
"skyla": "Géraldine", 'skyla': 'Géraldine',
"brycen": "Sandro", 'brycen': 'Sandro',
"drayden": "Lysander", 'drayden': 'Lysander',
"marlon": "Benson", 'marlon': 'Benson',
"viola": "Viola", 'viola': 'Viola',
"grant": "Lino", 'grant': 'Lino',
"korrina": "Connie", 'korrina': 'Connie',
"ramos": "Amaro", 'ramos': 'Amaro',
"clemont": "Citro", 'clemont': 'Citro',
"valerie": "Valerie", 'valerie': 'Valerie',
"olympia": "Astrid", 'olympia': 'Astrid',
"wulfric": "Galantho", 'wulfric': 'Galantho',
"milo": "Yarro", 'milo': 'Yarro',
"nessa": "Kate", 'nessa': 'Kate',
"kabu": "Kabu", 'kabu': 'Kabu',
"bea": "Saida", 'bea': 'Saida',
"allister": "Nio", 'allister': 'Nio',
"opal": "Papella", 'opal': 'Papella',
"bede": "Betys", 'bede': 'Betys',
"gordie": "Mac", 'gordie': 'Mac',
"melony": "Mel", 'melony': 'Mel',
"piers": "Nezz", 'piers': 'Nezz',
"marnie": "Mary", 'marnie': 'Mary',
"raihan": "Roy", 'raihan': 'Roy',
"katy": "Ronah", 'katy': 'Ronah',
"brassius": "Colzo", 'brassius': 'Colzo',
"iono": "Enigmara", 'iono': 'Enigmara',
"kofu": "Kombu", 'kofu': 'Kombu',
"larry": "Aoki", 'larry': 'Aoki',
"ryme": "Etta", 'ryme': 'Etta',
"tulip": "Tulia", 'tulip': 'Tulia',
"grusha": "Grusha", 'grusha': 'Grusha',
"lorelei": "Lorelei", 'lorelei': 'Lorelei',
"bruno": "Bruno", 'bruno': 'Bruno',
"agatha": "Agathe", 'agatha': 'Agathe',
"lance": "Siegfried", 'lance': 'Siegfried',
"will": "Willi", 'will': 'Willi',
"koga": "Koga", 'koga': 'Koga',
"karen": "Melanie", 'karen': 'Melanie',
"sidney": "Ulrich", 'sidney': 'Ulrich',
"phoebe": "Antonia", 'phoebe': 'Antonia',
"glacia": "Frosina", 'glacia': 'Frosina',
"drake": "Dragan", 'drake': 'Dragan',
"aaron": "Herbaro", 'aaron': 'Herbaro',
"bertha": "Teresa", 'bertha': 'Teresa',
"flint": "Ignaz", 'flint': 'Ignaz',
"lucian": "Lucian", 'lucian': 'Lucian',
"shauntal": "Anissa", 'shauntal': 'Anissa',
"marshal": "Eugen", 'marshal': 'Eugen',
"grimsley": "Astor", 'grimsley': 'Astor',
"caitlin": "Kattlea", 'caitlin': 'Kattlea',
"malva": "Pachira", 'malva': 'Pachira',
"siebold": "Narcisse", 'siebold': 'Narcisse',
"wikstrom": "Thymelot", 'wikstrom': 'Thymelot',
"drasna": "Dracena", 'drasna': 'Dracena',
"hala": "Hala", 'hala': 'Hala',
"molayne": "Marlon", 'molayne': 'Marlon',
"olivia": "Mayla", 'olivia': 'Mayla',
"acerola": "Lola", 'acerola': 'Lola',
"kahili": "Kahili", 'kahili': 'Kahili',
"rika": "Cay", 'rika': 'Cay',
"poppy": "Poppy", 'poppy': 'Poppy',
"hassel": "Sinius", 'hassel': 'Sinius',
"crispin": "Matt", 'crispin': 'Matt',
"amarys": "Erin", 'amarys': 'Erin',
"lacey": "Tara", 'lacey': 'Tara',
"drayton": "Levy", 'drayton': 'Levy',
"blue": "Blau", 'blue': 'Blau',
"red": "Rot", 'red': 'Rot',
"steven": "Troy", 'steven': 'Troy',
"wallace": "Wassili", 'wallace': 'Wassili',
"cynthia": "Cynthia", 'cynthia': 'Cynthia',
"alder": "Lauro", 'alder': 'Lauro',
"iris": "Lilia", 'iris': 'Lilia',
"diantha": "Diantha", 'diantha': 'Diantha',
"hau": "Tali", 'hau': 'Tali',
"geeta": "Sagaria", 'geeta': 'Sagaria',
"nemona": "Nemila", 'nemona': 'Nemila',
"kieran": "Jo", 'kieran': 'Jo',
"leon": "Delion", 'leon': 'Delion',
"rival": "Finn", 'rival': 'Finn',
"rival_female": "Ivy", 'rival_female': 'Ivy',
} as const; } as const;

View File

@ -1,34 +1,34 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const tutorial: SimpleTranslationEntries = { export const tutorial: SimpleTranslationEntries = {
"intro": `Willkommen bei PokéRogue! Dies ist ein kampforientiertes Pokémon-Fangame mit Roguelite-Elementen. 'intro': `Willkommen bei PokéRogue! Dies ist ein kampforientiertes Pokémon-Fangame mit Roguelite-Elementen.
$Dieses Spiel ist nicht monetarisiert. $Dieses Spiel ist nicht monetarisiert.
$Wir erheben keinen Eigentumsanspruch an Pokémon oder\nverwendeten, urheberrechtlich geschützten Inhalten. $Wir erheben keinen Eigentumsanspruch an Pokémon oder\nverwendeten, urheberrechtlich geschützten Inhalten.
$Das Spiel befindet sich noch in der Entwicklung, ist aber voll spielbar. $Das Spiel befindet sich noch in der Entwicklung, ist aber voll spielbar.
$Für Fehlerberichte nutze bitte den PokéRogue Discord-Server. $Für Fehlerberichte nutze bitte den PokéRogue Discord-Server.
$Sollte das Spiel langsam laufen, überprüfe, ob in deinem Browser "Hardwarebeschleunigung" aktiviert ist.`, $Sollte das Spiel langsam laufen, überprüfe, ob in deinem Browser "Hardwarebeschleunigung" aktiviert ist.`,
"accessMenu": `Nutze M oder Esc, um das Menü zu öffnen. Dort hast du Zugriff auf die Einstellungen und andere Funktionen.`, 'accessMenu': 'Nutze M oder Esc, um das Menü zu öffnen. Dort hast du Zugriff auf die Einstellungen und andere Funktionen.',
"menu": `In diesem Menü hast du Zugriff auf die Einstellungen. 'menu': `In diesem Menü hast du Zugriff auf die Einstellungen.
$Dort kannst du u. A. die Spielgeschwin-\ndigkeit und das Fensterdesign ändern. $Dort kannst du u. A. die Spielgeschwin-\ndigkeit und das Fensterdesign ändern.
$Das Menü verbirgt noch andere Funktionen - probier' sie gerne aus!`, $Das Menü verbirgt noch andere Funktionen - probier' sie gerne aus!`,
"starterSelect": `Hier kannst du deine Starter-Pokémon auswählen.\nSie begleiten dich am Anfang deines Abenteuers. 'starterSelect': `Hier kannst du deine Starter-Pokémon auswählen.\nSie begleiten dich am Anfang deines Abenteuers.
$Jeder Starter hat einen Preis. Dein Team kann bis zu sechs\nMitglieder haben, solange der Gesamtpreis max. 10 beträgt. $Jeder Starter hat einen Preis. Dein Team kann bis zu sechs\nMitglieder haben, solange der Gesamtpreis max. 10 beträgt.
$Du kannst Geschlecht, Fähigkeit und Form beliebig auswählen,\nsobald du sie mindestens einmal gefangen hast. $Du kannst Geschlecht, Fähigkeit und Form beliebig auswählen,\nsobald du sie mindestens einmal gefangen hast.
$Die DVs ergeben sich aus den Höchstwerten aller Pokémon,\ndie du bereits gefangen hast. $Die DVs ergeben sich aus den Höchstwerten aller Pokémon,\ndie du bereits gefangen hast.
$Es lohnt sich also, das selbe Pokémon mehrmals zu fangen!`, $Es lohnt sich also, das selbe Pokémon mehrmals zu fangen!`,
"pokerus": `Jeden Tag haben drei zufällige Pokémon einen lila Rahmen. 'pokerus': `Jeden Tag haben drei zufällige Pokémon einen lila Rahmen.
$Wenn du eins von ihnen besitzt, $Wenn du eins von ihnen besitzt,
$nimm es doch mal mit und sieh dir seinen Bericht an!`, $nimm es doch mal mit und sieh dir seinen Bericht an!`,
"statChange": `Statuswertveränderungen halten solange an, wie dein Pokémon auf dem Feld bleibt. 'statChange': `Statuswertveränderungen halten solange an, wie dein Pokémon auf dem Feld bleibt.
$Pokémon werden am Anfang eines Trainerkampfes oder bei einem Arealwechsel automatisch zurückgerufen. $Pokémon werden am Anfang eines Trainerkampfes oder bei einem Arealwechsel automatisch zurückgerufen.
$Nutze C oder Shift, um aktuelle Statuswertveränderungen anzuzeigen.`, $Nutze C oder Shift, um aktuelle Statuswertveränderungen anzuzeigen.`,
"selectItem": `Nach jedem Kampf kannst du aus 3 zufälligen Items exakt eines auswählen. 'selectItem': `Nach jedem Kampf kannst du aus 3 zufälligen Items exakt eines auswählen.
$Es gibt u. A. Heilitems, tragbare Items und Basis-Items, die dir einen permanenten Vorteil verschaffen. $Es gibt u. A. Heilitems, tragbare Items und Basis-Items, die dir einen permanenten Vorteil verschaffen.
$Die meisten tragbaren und permanenten Items werden stärker, wenn du sie mehrfach sammelst. $Die meisten tragbaren und permanenten Items werden stärker, wenn du sie mehrfach sammelst.
$Manche Items, wie Entwicklungssteine, tauchen nur auf, wenn du sie auch nutzen kannst. $Manche Items, wie Entwicklungssteine, tauchen nur auf, wenn du sie auch nutzen kannst.
@ -37,7 +37,7 @@ export const tutorial: SimpleTranslationEntries = {
$Du kannst Heilitems auch gegen Geld erwerben. Je weiter du kommst, desto mehr stehen dir zur Auswahl. $Du kannst Heilitems auch gegen Geld erwerben. Je weiter du kommst, desto mehr stehen dir zur Auswahl.
$Erledige deine Einkäufe als erstes, denn sobald du dein zufälliges Item auswählst, beginnt der nächste Kampf.`, $Erledige deine Einkäufe als erstes, denn sobald du dein zufälliges Item auswählst, beginnt der nächste Kampf.`,
"eggGacha": `Hier kannst du deine Gutscheine gegen Pokémon-Eier\ntauschen. 'eggGacha': `Hier kannst du deine Gutscheine gegen Pokémon-Eier\ntauschen.
$Eier schlüpfen, nachdem du eine gewisse Anzahl Kämpfe\nabsolviert hast. Je seltener das Ei, desto länger dauert es. $Eier schlüpfen, nachdem du eine gewisse Anzahl Kämpfe\nabsolviert hast. Je seltener das Ei, desto länger dauert es.
$Geschlüpfte Pokémon werden nicht deinem Team hinzugefügt,\nsondern deinen verfügbaren Startern. $Geschlüpfte Pokémon werden nicht deinem Team hinzugefügt,\nsondern deinen verfügbaren Startern.
$In der Regel haben sie bessere DVs als in der Wildnis\ngefangene Pokémon. $In der Regel haben sie bessere DVs als in der Wildnis\ngefangene Pokémon.

View File

@ -1,11 +1,11 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const voucher: SimpleTranslationEntries = { export const voucher: SimpleTranslationEntries = {
"vouchers": "Vouchers", 'vouchers': 'Vouchers',
"eggVoucher": "Egg Voucher", 'eggVoucher': 'Egg Voucher',
"eggVoucherPlus": "Egg Voucher Plus", 'eggVoucherPlus': 'Egg Voucher Plus',
"eggVoucherPremium": "Egg Voucher Premium", 'eggVoucherPremium': 'Egg Voucher Premium',
"eggVoucherGold": "Egg Voucher Gold", 'eggVoucherGold': 'Egg Voucher Gold',
"locked": "Locked", 'locked': 'Locked',
"defeatTrainer": "Defeat {{trainerName}}" 'defeatTrainer': 'Defeat {{trainerName}}'
} as const; } as const;

View File

@ -1,44 +1,44 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
/** /**
* The weather namespace holds text displayed when weather is active during a battle * The weather namespace holds text displayed when weather is active during a battle
*/ */
export const weather: SimpleTranslationEntries = { export const weather: SimpleTranslationEntries = {
"sunnyStartMessage": "Die Sonnenlicht wird stärker!", 'sunnyStartMessage': 'Die Sonnenlicht wird stärker!',
"sunnyLapseMessage": "Die Sonnenlicht ist stark.", 'sunnyLapseMessage': 'Die Sonnenlicht ist stark.',
"sunnyClearMessage": "Die Sonnenlicht verliert wieder an Intensität.", 'sunnyClearMessage': 'Die Sonnenlicht verliert wieder an Intensität.',
"rainStartMessage": "Es fängt an zu regnen!", 'rainStartMessage': 'Es fängt an zu regnen!',
"rainLapseMessage": "Es regnet weiter.", 'rainLapseMessage': 'Es regnet weiter.',
"rainClearMessage": "Der Regen lässt nach.", 'rainClearMessage': 'Der Regen lässt nach.',
"sandstormStartMessage": "Ein Sandsturm kommt auf!", 'sandstormStartMessage': 'Ein Sandsturm kommt auf!',
"sandstormLapseMessage": "Der Sandsturm tobt.", 'sandstormLapseMessage': 'Der Sandsturm tobt.',
"sandstormClearMessage": "Der Sandsturm legt sich.", 'sandstormClearMessage': 'Der Sandsturm legt sich.',
"sandstormDamageMessage": " Der Sandsturm fügt {{pokemonPrefix}}{{pokemonName}} Schaden zu!", 'sandstormDamageMessage': ' Der Sandsturm fügt {{pokemonPrefix}}{{pokemonName}} Schaden zu!',
"hailStartMessage": "Es fängt an zu hageln!", 'hailStartMessage': 'Es fängt an zu hageln!',
"hailLapseMessage": "Der Hagelsturm tobt.", 'hailLapseMessage': 'Der Hagelsturm tobt.',
"hailClearMessage": "Der Hagelsturm legt sich.", 'hailClearMessage': 'Der Hagelsturm legt sich.',
"hailDamageMessage": "{{pokemonPrefix}}{{pokemonName}} wird von Hagelkörnern getroffen!", 'hailDamageMessage': '{{pokemonPrefix}}{{pokemonName}} wird von Hagelkörnern getroffen!',
"snowStartMessage": "Es fängt an zu schneien!", 'snowStartMessage': 'Es fängt an zu schneien!',
"snowLapseMessage": "Der Schneesturm tobt.", 'snowLapseMessage': 'Der Schneesturm tobt.',
"snowClearMessage": "Der Schneesturm legt sich.", 'snowClearMessage': 'Der Schneesturm legt sich.',
"fogStartMessage": "Am Boden breitet sich dichter Nebel aus!", 'fogStartMessage': 'Am Boden breitet sich dichter Nebel aus!',
"fogLapseMessage": "Der Nebel bleibt dicht.", 'fogLapseMessage': 'Der Nebel bleibt dicht.',
"fogClearMessage": "Der Nebel lichtet sich.", 'fogClearMessage': 'Der Nebel lichtet sich.',
"heavyRainStartMessage": "Es fängt an, in Strömen zu regnen!", 'heavyRainStartMessage': 'Es fängt an, in Strömen zu regnen!',
"heavyRainLapseMessage": "Der strömende Regen hält an.", 'heavyRainLapseMessage': 'Der strömende Regen hält an.',
"heavyRainClearMessage": "Der strömende Regen lässt nach.", 'heavyRainClearMessage': 'Der strömende Regen lässt nach.',
"harshSunStartMessage": "Das Sonnenlicht wird sehr viel stärker!", 'harshSunStartMessage': 'Das Sonnenlicht wird sehr viel stärker!',
"harshSunLapseMessage": "Das Sonnenlicht ist sehr stark.", 'harshSunLapseMessage': 'Das Sonnenlicht ist sehr stark.',
"harshSunClearMessage": "Das Sonnenlicht verliert an Intensität.", 'harshSunClearMessage': 'Das Sonnenlicht verliert an Intensität.',
"strongWindsStartMessage": "Alle Flug-Pokémon werden von rätselhaften Luftströmungen geschützt!", 'strongWindsStartMessage': 'Alle Flug-Pokémon werden von rätselhaften Luftströmungen geschützt!',
"strongWindsLapseMessage": "Die rätselhafte Luftströmung hält an.", 'strongWindsLapseMessage': 'Die rätselhafte Luftströmung hält an.',
"strongWindsClearMessage": "Die rätselhafte Luftströmung hat sich wieder geleget.", 'strongWindsClearMessage': 'Die rätselhafte Luftströmung hat sich wieder geleget.',
} };

View File

@ -1,6 +1,6 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const abilityTriggers: SimpleTranslationEntries = { export const abilityTriggers: SimpleTranslationEntries = {
'blockRecoilDamage' : `{{pokemonName}}'s {{abilityName}}\nprotected it from recoil!`, 'blockRecoilDamage' : '{{pokemonName}}\'s {{abilityName}}\nprotected it from recoil!',
'badDreams': `{{pokemonName}} is tormented!`, 'badDreams': '{{pokemonName}} is tormented!',
} as const; } as const;

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const battleMessageUiHandler: SimpleTranslationEntries = { export const battleMessageUiHandler: SimpleTranslationEntries = {
"ivBest": "Best", 'ivBest': 'Best',
"ivFantastic": "Fantastic", 'ivFantastic': 'Fantastic',
"ivVeryGood": "Very Good", 'ivVeryGood': 'Very Good',
"ivPrettyGood": "Pretty Good", 'ivPrettyGood': 'Pretty Good',
"ivDecent": "Decent", 'ivDecent': 'Decent',
"ivNoGood": "No Good", 'ivNoGood': 'No Good',
} as const; } as const;

View File

@ -1,56 +1,56 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const battle: SimpleTranslationEntries = { export const battle: SimpleTranslationEntries = {
"bossAppeared": "{{bossName}} appeared.", 'bossAppeared': '{{bossName}} appeared.',
"trainerAppeared": "{{trainerName}}\nwould like to battle!", 'trainerAppeared': '{{trainerName}}\nwould like to battle!',
"trainerAppearedDouble": "{{trainerName}}\nwould like to battle!", 'trainerAppearedDouble': '{{trainerName}}\nwould like to battle!',
"singleWildAppeared": "A wild {{pokemonName}} appeared!", 'singleWildAppeared': 'A wild {{pokemonName}} appeared!',
"multiWildAppeared": "A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!", 'multiWildAppeared': 'A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!',
"playerComeBack": "Come back, {{pokemonName}}!", 'playerComeBack': 'Come back, {{pokemonName}}!',
"trainerComeBack": "{{trainerName}} withdrew {{pokemonName}}!", 'trainerComeBack': '{{trainerName}} withdrew {{pokemonName}}!',
"playerGo": "Go! {{pokemonName}}!", 'playerGo': 'Go! {{pokemonName}}!',
"trainerGo": "{{trainerName}} sent out {{pokemonName}}!", 'trainerGo': '{{trainerName}} sent out {{pokemonName}}!',
"switchQuestion": "Will you switch\n{{pokemonName}}?", 'switchQuestion': 'Will you switch\n{{pokemonName}}?',
"trainerDefeated": `You defeated\n{{trainerName}}!`, 'trainerDefeated': 'You defeated\n{{trainerName}}!',
"pokemonCaught": "{{pokemonName}} was caught!", 'pokemonCaught': '{{pokemonName}} was caught!',
"pokemon": "Pokémon", 'pokemon': 'Pokémon',
"sendOutPokemon": "Go! {{pokemonName}}!", 'sendOutPokemon': 'Go! {{pokemonName}}!',
"hitResultCriticalHit": "A critical hit!", 'hitResultCriticalHit': 'A critical hit!',
"hitResultSuperEffective": "It's super effective!", 'hitResultSuperEffective': 'It\'s super effective!',
"hitResultNotVeryEffective": "It's not very effective…", 'hitResultNotVeryEffective': 'It\'s not very effective…',
"hitResultNoEffect": "It doesn't affect {{pokemonName}}!", 'hitResultNoEffect': 'It doesn\'t affect {{pokemonName}}!',
"hitResultOneHitKO": "It's a one-hit KO!", 'hitResultOneHitKO': 'It\'s a one-hit KO!',
"attackFailed": "But it failed!", 'attackFailed': 'But it failed!',
"attackHitsCount": `Hit {{count}} time(s)!`, 'attackHitsCount': 'Hit {{count}} time(s)!',
"expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!", 'expGain': '{{pokemonName}} gained\n{{exp}} EXP. Points!',
"levelUp": "{{pokemonName}} grew to\nLv. {{level}}!", 'levelUp': '{{pokemonName}} grew to\nLv. {{level}}!',
"learnMove": "{{pokemonName}} learned\n{{moveName}}!", 'learnMove': '{{pokemonName}} learned\n{{moveName}}!',
"learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.", 'learnMovePrompt': '{{pokemonName}} wants to learn the\nmove {{moveName}}.',
"learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.", 'learnMoveLimitReached': 'However, {{pokemonName}} already\nknows four moves.',
"learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?", 'learnMoveReplaceQuestion': 'Should a move be forgotten and\nreplaced with {{moveName}}?',
"learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?", 'learnMoveStopTeaching': 'Stop trying to teach\n{{moveName}}?',
"learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.", 'learnMoveNotLearned': '{{pokemonName}} did not learn the\nmove {{moveName}}.',
"learnMoveForgetQuestion": "Which move should be forgotten?", 'learnMoveForgetQuestion': 'Which move should be forgotten?',
"learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.", 'learnMoveForgetSuccess': '{{pokemonName}} forgot how to\nuse {{moveName}}.',
"countdownPoof": "@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Poof!", 'countdownPoof': '@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Poof!',
"learnMoveAnd": "And…", 'learnMoveAnd': 'And…',
"levelCapUp": "The level cap\nhas increased to {{levelCap}}!", 'levelCapUp': 'The level cap\nhas increased to {{levelCap}}!',
"moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.", 'moveNotImplemented': '{{moveName}} is not yet implemented and cannot be selected.',
"moveNoPP": "There's no PP left for\nthis move!", 'moveNoPP': 'There\'s no PP left for\nthis move!',
"moveDisabled": "{{moveName}} is disabled!", 'moveDisabled': '{{moveName}} is disabled!',
"noPokeballForce": "An unseen force\nprevents using Poké Balls.", 'noPokeballForce': 'An unseen force\nprevents using Poké Balls.',
"noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!", 'noPokeballTrainer': 'You can\'t catch\nanother trainer\'s Pokémon!',
"noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!", 'noPokeballMulti': 'You can only throw a Poké Ball\nwhen there is one Pokémon remaining!',
"noPokeballStrong": "The target Pokémon is too strong to be caught!\nYou need to weaken it first!", 'noPokeballStrong': 'The target Pokémon is too strong to be caught!\nYou need to weaken it first!',
"noEscapeForce": "An unseen force\nprevents escape.", 'noEscapeForce': 'An unseen force\nprevents escape.',
"noEscapeTrainer": "You can't run\nfrom a trainer battle!", 'noEscapeTrainer': 'You can\'t run\nfrom a trainer battle!',
"noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nprevents {{escapeVerb}}!", 'noEscapePokemon': '{{pokemonName}}\'s {{moveName}}\nprevents {{escapeVerb}}!',
"runAwaySuccess": "You got away safely!", 'runAwaySuccess': 'You got away safely!',
"runAwayCannotEscape": 'You can\'t escape!', 'runAwayCannotEscape': 'You can\'t escape!',
"escapeVerbSwitch": "switching", 'escapeVerbSwitch': 'switching',
"escapeVerbFlee": "fleeing", 'escapeVerbFlee': 'fleeing',
"notDisabled": "{{pokemonName}}'s {{moveName}} is disabled\nno more!", 'notDisabled': '{{pokemonName}}\'s {{moveName}} is disabled\nno more!',
"skipItemQuestion": "Are you sure you want to skip taking an item?", 'skipItemQuestion': 'Are you sure you want to skip taking an item?',
"eggHatching": "Oh?", 'eggHatching': 'Oh?',
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?" 'ivScannerUseQuestion': 'Use IV Scanner on {{pokemonName}}?'
} as const; } as const;

View File

@ -1,48 +1,48 @@
import { BerryTranslationEntries } from "#app/plugins/i18n"; import { BerryTranslationEntries } from '#app/plugins/i18n';
export const berry: BerryTranslationEntries = { export const berry: BerryTranslationEntries = {
"SITRUS": { 'SITRUS': {
name: "Sitrus Berry", name: 'Sitrus Berry',
effect: "Restores 25% HP if HP is below 50%", effect: 'Restores 25% HP if HP is below 50%',
}, },
"LUM": { 'LUM': {
name: "Lum Berry", name: 'Lum Berry',
effect: "Cures any non-volatile status condition and confusion", effect: 'Cures any non-volatile status condition and confusion',
}, },
"ENIGMA": { 'ENIGMA': {
name: "Enigma Berry", name: 'Enigma Berry',
effect: "Restores 25% HP if hit by a super effective move", effect: 'Restores 25% HP if hit by a super effective move',
}, },
"LIECHI": { 'LIECHI': {
name: "Liechi Berry", name: 'Liechi Berry',
effect: "Raises Attack if HP is below 25%", effect: 'Raises Attack if HP is below 25%',
}, },
"GANLON": { 'GANLON': {
name: "Ganlon Berry", name: 'Ganlon Berry',
effect: "Raises Defense if HP is below 25%", effect: 'Raises Defense if HP is below 25%',
}, },
"PETAYA": { 'PETAYA': {
name: "Petaya Berry", name: 'Petaya Berry',
effect: "Raises Sp. Atk if HP is below 25%", effect: 'Raises Sp. Atk if HP is below 25%',
}, },
"APICOT": { 'APICOT': {
name: "Apicot Berry", name: 'Apicot Berry',
effect: "Raises Sp. Def if HP is below 25%", effect: 'Raises Sp. Def if HP is below 25%',
}, },
"SALAC": { 'SALAC': {
name: "Salac Berry", name: 'Salac Berry',
effect: "Raises Speed if HP is below 25%", effect: 'Raises Speed if HP is below 25%',
}, },
"LANSAT": { 'LANSAT': {
name: "Lansat Berry", name: 'Lansat Berry',
effect: "Raises critical hit ratio if HP is below 25%", effect: 'Raises critical hit ratio if HP is below 25%',
}, },
"STARF": { 'STARF': {
name: "Starf Berry", name: 'Starf Berry',
effect: "Sharply raises a random stat if HP is below 25%", effect: 'Sharply raises a random stat if HP is below 25%',
}, },
"LEPPA": { 'LEPPA': {
name: "Leppa Berry", name: 'Leppa Berry',
effect: "Restores 10 PP to a move if its PP reaches 0", effect: 'Restores 10 PP to a move if its PP reaches 0',
}, },
} as const; } as const;

View File

@ -1,9 +1,9 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const commandUiHandler: SimpleTranslationEntries = { export const commandUiHandler: SimpleTranslationEntries = {
"fight": "Fight", 'fight': 'Fight',
"ball": "Ball", 'ball': 'Ball',
"pokemon": "Pokémon", 'pokemon': 'Pokémon',
"run": "Run", 'run': 'Run',
"actionMessage": "What will\n{{pokemonName}} do?", 'actionMessage': 'What will\n{{pokemonName}} do?',
} as const; } as const;

View File

@ -1,26 +1,26 @@
import { ability } from "./ability"; import { ability } from './ability';
import { abilityTriggers } from "./ability-trigger"; import { abilityTriggers } from './ability-trigger';
import { battle } from "./battle"; import { battle } from './battle';
import { commandUiHandler } from "./command-ui-handler"; import { commandUiHandler } from './command-ui-handler';
import { egg } from "./egg"; import { egg } from './egg';
import { fightUiHandler } from "./fight-ui-handler"; import { fightUiHandler } from './fight-ui-handler';
import { growth } from "./growth"; import { growth } from './growth';
import { menu } from "./menu"; import { menu } from './menu';
import { menuUiHandler } from "./menu-ui-handler"; import { menuUiHandler } from './menu-ui-handler';
import { modifierType } from "./modifier-type"; import { modifierType } from './modifier-type';
import { move } from "./move"; import { move } from './move';
import { nature } from "./nature"; import { nature } from './nature';
import { pokeball } from "./pokeball"; import { pokeball } from './pokeball';
import { pokemon } from "./pokemon"; import { pokemon } from './pokemon';
import { pokemonInfo } from "./pokemon-info"; import { pokemonInfo } from './pokemon-info';
import { splashMessages } from "./splash-messages"; import { splashMessages } from './splash-messages';
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from './starter-select-ui-handler';
import { titles, trainerClasses, trainerNames } from "./trainers"; import { titles, trainerClasses, trainerNames } from './trainers';
import { tutorial } from "./tutorial"; import { tutorial } from './tutorial';
import { weather } from "./weather"; import { weather } from './weather';
import { battleMessageUiHandler } from "./battle-message-ui-handler"; import { battleMessageUiHandler } from './battle-message-ui-handler';
import { berry } from "./berry"; import { berry } from './berry';
import { voucher } from "./voucher"; import { voucher } from './voucher';
export const enConfig = { export const enConfig = {
ability: ability, ability: ability,
@ -48,4 +48,4 @@ export const enConfig = {
battleMessageUiHandler: battleMessageUiHandler, battleMessageUiHandler: battleMessageUiHandler,
berry: berry, berry: berry,
voucher: voucher, voucher: voucher,
} };

View File

@ -1,21 +1,21 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const egg: SimpleTranslationEntries = { export const egg: SimpleTranslationEntries = {
"egg": "Egg", 'egg': 'Egg',
"greatTier": "Rare", 'greatTier': 'Rare',
"ultraTier": "Epic", 'ultraTier': 'Epic',
"masterTier": "Legendary", 'masterTier': 'Legendary',
"defaultTier": "Common", 'defaultTier': 'Common',
"hatchWavesMessageSoon": "Sounds can be heard coming from inside! It will hatch soon!", 'hatchWavesMessageSoon': 'Sounds can be heard coming from inside! It will hatch soon!',
"hatchWavesMessageClose": "It appears to move occasionally. It may be close to hatching.", 'hatchWavesMessageClose': 'It appears to move occasionally. It may be close to hatching.',
"hatchWavesMessageNotClose": "What will hatch from this? It doesn't seem close to hatching.", 'hatchWavesMessageNotClose': 'What will hatch from this? It doesn\'t seem close to hatching.',
"hatchWavesMessageLongTime": "It looks like this Egg will take a long time to hatch.", 'hatchWavesMessageLongTime': 'It looks like this Egg will take a long time to hatch.',
"gachaTypeLegendary": "Legendary Rate Up", 'gachaTypeLegendary': 'Legendary Rate Up',
"gachaTypeMove": "Rare Egg Move Rate Up", 'gachaTypeMove': 'Rare Egg Move Rate Up',
"gachaTypeShiny": "Shiny Rate Up", 'gachaTypeShiny': 'Shiny Rate Up',
"selectMachine": "Select a machine.", 'selectMachine': 'Select a machine.',
"notEnoughVouchers": "You don't have enough vouchers!", 'notEnoughVouchers': 'You don\'t have enough vouchers!',
"tooManyEggs": "You have too many eggs!", 'tooManyEggs': 'You have too many eggs!',
"pull": "Pull", 'pull': 'Pull',
"pulls": "Pulls" 'pulls': 'Pulls'
} as const; } as const;

View File

@ -1,7 +1,7 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const fightUiHandler: SimpleTranslationEntries = { export const fightUiHandler: SimpleTranslationEntries = {
"pp": "PP", 'pp': 'PP',
"power": "Power", 'power': 'Power',
"accuracy": "Accuracy", 'accuracy': 'Accuracy',
} as const; } as const;

View File

@ -1,10 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const growth: SimpleTranslationEntries = { export const growth: SimpleTranslationEntries = {
"Erratic": "Erratic", 'Erratic': 'Erratic',
"Fast": "Fast", 'Fast': 'Fast',
"Medium_Fast": "Medium Fast", 'Medium_Fast': 'Medium Fast',
"Medium_Slow": "Medium Slow", 'Medium_Slow': 'Medium Slow',
"Slow": "Slow", 'Slow': 'Slow',
"Fluctuating": "Fluctuating" 'Fluctuating': 'Fluctuating'
} as const; } as const;

View File

@ -1,23 +1,23 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const menuUiHandler: SimpleTranslationEntries = { export const menuUiHandler: SimpleTranslationEntries = {
"GAME_SETTINGS": 'Game Settings', 'GAME_SETTINGS': 'Game Settings',
"ACHIEVEMENTS": "Achievements", 'ACHIEVEMENTS': 'Achievements',
"STATS": "Stats", 'STATS': 'Stats',
"VOUCHERS": "Vouchers", 'VOUCHERS': 'Vouchers',
"EGG_LIST": "Egg List", 'EGG_LIST': 'Egg List',
"EGG_GACHA": "Egg Gacha", 'EGG_GACHA': 'Egg Gacha',
"MANAGE_DATA": "Manage Data", 'MANAGE_DATA': 'Manage Data',
"COMMUNITY": "Community", 'COMMUNITY': 'Community',
"SAVE_AND_QUIT": "Save and Quit", 'SAVE_AND_QUIT': 'Save and Quit',
"LOG_OUT": "Log Out", 'LOG_OUT': 'Log Out',
"slot": "Slot {{slotNumber}}", 'slot': 'Slot {{slotNumber}}',
"importSession": "Import Session", 'importSession': 'Import Session',
"importSlotSelect": "Select a slot to import to.", 'importSlotSelect': 'Select a slot to import to.',
"exportSession": "Export Session", 'exportSession': 'Export Session',
"exportSlotSelect": "Select a slot to export from.", 'exportSlotSelect': 'Select a slot to export from.',
"importData": "Import Data", 'importData': 'Import Data',
"exportData": "Export Data", 'exportData': 'Export Data',
"cancel": "Cancel", 'cancel': 'Cancel',
"losingProgressionWarning": "You will lose any progress since the beginning of the battle. Proceed?" 'losingProgressionWarning': 'You will lose any progress since the beginning of the battle. Proceed?'
} as const; } as const;

View File

@ -1,4 +1,4 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
/** /**
* The menu namespace holds most miscellaneous text that isn't directly part of the game's * The menu namespace holds most miscellaneous text that isn't directly part of the game's
@ -6,46 +6,46 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n";
* account interactions, descriptive text, etc. * account interactions, descriptive text, etc.
*/ */
export const menu: SimpleTranslationEntries = { export const menu: SimpleTranslationEntries = {
"cancel": "Cancel", 'cancel': 'Cancel',
"continue": "Continue", 'continue': 'Continue',
"dailyRun": "Daily Run (Beta)", 'dailyRun': 'Daily Run (Beta)',
"loadGame": "Load Game", 'loadGame': 'Load Game',
"newGame": "New Game", 'newGame': 'New Game',
"selectGameMode": "Select a game mode.", 'selectGameMode': 'Select a game mode.',
"logInOrCreateAccount": "Log in or create an account to start. No email required!", 'logInOrCreateAccount': 'Log in or create an account to start. No email required!',
"username": "Username", 'username': 'Username',
"password": "Password", 'password': 'Password',
"login": "Login", 'login': 'Login',
"register": "Register", 'register': 'Register',
"emptyUsername": "Username must not be empty", 'emptyUsername': 'Username must not be empty',
"invalidLoginUsername": "The provided username is invalid", 'invalidLoginUsername': 'The provided username is invalid',
"invalidRegisterUsername": "Username must only contain letters, numbers, or underscores", 'invalidRegisterUsername': 'Username must only contain letters, numbers, or underscores',
"invalidLoginPassword": "The provided password is invalid", 'invalidLoginPassword': 'The provided password is invalid',
"invalidRegisterPassword": "Password must be 6 characters or longer", 'invalidRegisterPassword': 'Password must be 6 characters or longer',
"usernameAlreadyUsed": "The provided username is already in use", 'usernameAlreadyUsed': 'The provided username is already in use',
"accountNonExistent": "The provided user does not exist", 'accountNonExistent': 'The provided user does not exist',
"unmatchingPassword": "The provided password does not match", 'unmatchingPassword': 'The provided password does not match',
"passwordNotMatchingConfirmPassword": "Password must match confirm password", 'passwordNotMatchingConfirmPassword': 'Password must match confirm password',
"confirmPassword": "Confirm Password", 'confirmPassword': 'Confirm Password',
"registrationAgeWarning": "By registering, you confirm you are of 13 years of age or older.", 'registrationAgeWarning': 'By registering, you confirm you are of 13 years of age or older.',
"backToLogin": "Back to Login", 'backToLogin': 'Back to Login',
"failedToLoadSaveData": "Failed to load save data. Please reload the page.\nIf this continues, please contact the administrator.", 'failedToLoadSaveData': 'Failed to load save data. Please reload the page.\nIf this continues, please contact the administrator.',
"sessionSuccess": "Session loaded successfully.", 'sessionSuccess': 'Session loaded successfully.',
"failedToLoadSession": "Your session data could not be loaded.\nIt may be corrupted.", 'failedToLoadSession': 'Your session data could not be loaded.\nIt may be corrupted.',
"boyOrGirl": "Are you a boy or a girl?", 'boyOrGirl': 'Are you a boy or a girl?',
"boy": "Boy", 'boy': 'Boy',
"girl": "Girl", 'girl': 'Girl',
"evolving": "What?\n{{pokemonName}} is evolving!", 'evolving': 'What?\n{{pokemonName}} is evolving!',
"stoppedEvolving": "{{pokemonName}} stopped evolving.", 'stoppedEvolving': '{{pokemonName}} stopped evolving.',
"pauseEvolutionsQuestion": "Would you like to pause evolutions for {{pokemonName}}?\nEvolutions can be re-enabled from the party screen.", 'pauseEvolutionsQuestion': 'Would you like to pause evolutions for {{pokemonName}}?\nEvolutions can be re-enabled from the party screen.',
"evolutionsPaused": "Evolutions have been paused for {{pokemonName}}.", 'evolutionsPaused': 'Evolutions have been paused for {{pokemonName}}.',
"evolutionDone": "Congratulations!\nYour {{pokemonName}} evolved into {{evolvedPokemonName}}!", 'evolutionDone': 'Congratulations!\nYour {{pokemonName}} evolved into {{evolvedPokemonName}}!',
"dailyRankings": "Daily Rankings", 'dailyRankings': 'Daily Rankings',
"weeklyRankings": "Weekly Rankings", 'weeklyRankings': 'Weekly Rankings',
"noRankings": "No Rankings", 'noRankings': 'No Rankings',
"loading": "Loading…", 'loading': 'Loading…',
"playersOnline": "Players Online", 'playersOnline': 'Players Online',
"empty":"Empty", 'empty':'Empty',
"yes":"Yes", 'yes':'Yes',
"no":"No", 'no':'No',
} as const; } as const;

View File

@ -1,387 +1,387 @@
import { ModifierTypeTranslationEntries } from "#app/plugins/i18n"; import { ModifierTypeTranslationEntries } from '#app/plugins/i18n';
export const modifierType: ModifierTypeTranslationEntries = { export const modifierType: ModifierTypeTranslationEntries = {
ModifierType: { ModifierType: {
"AddPokeballModifierType": { 'AddPokeballModifierType': {
name: "{{modifierCount}}x {{pokeballName}}", name: '{{modifierCount}}x {{pokeballName}}',
description: "Receive {{pokeballName}} x{{modifierCount}} (Inventory: {{pokeballAmount}}) \nCatch Rate: {{catchRate}}", description: 'Receive {{pokeballName}} x{{modifierCount}} (Inventory: {{pokeballAmount}}) \nCatch Rate: {{catchRate}}',
}, },
"AddVoucherModifierType": { 'AddVoucherModifierType': {
name: "{{modifierCount}}x {{voucherTypeName}}", name: '{{modifierCount}}x {{voucherTypeName}}',
description: "Receive {{voucherTypeName}} x{{modifierCount}}", description: 'Receive {{voucherTypeName}} x{{modifierCount}}',
}, },
"PokemonHeldItemModifierType": { 'PokemonHeldItemModifierType': {
extra: { extra: {
"inoperable": "{{pokemonName}} can't take\nthis item!", 'inoperable': '{{pokemonName}} can\'t take\nthis item!',
"tooMany": "{{pokemonName}} has too many\nof this item!", 'tooMany': '{{pokemonName}} has too many\nof this item!',
} }
}, },
"PokemonHpRestoreModifierType": { 'PokemonHpRestoreModifierType': {
description: "Restores {{restorePoints}} HP or {{restorePercent}}% HP for one Pokémon, whichever is higher", description: 'Restores {{restorePoints}} HP or {{restorePercent}}% HP for one Pokémon, whichever is higher',
extra: { extra: {
"fully": "Fully restores HP for one Pokémon", 'fully': 'Fully restores HP for one Pokémon',
"fullyWithStatus": "Fully restores HP for one Pokémon and heals any status ailment", 'fullyWithStatus': 'Fully restores HP for one Pokémon and heals any status ailment',
} }
}, },
"PokemonReviveModifierType": { 'PokemonReviveModifierType': {
description: "Revives one Pokémon and restores {{restorePercent}}% HP", description: 'Revives one Pokémon and restores {{restorePercent}}% HP',
}, },
"PokemonStatusHealModifierType": { 'PokemonStatusHealModifierType': {
description: "Heals any status ailment for one Pokémon", description: 'Heals any status ailment for one Pokémon',
}, },
"PokemonPpRestoreModifierType": { 'PokemonPpRestoreModifierType': {
description: "Restores {{restorePoints}} PP for one Pokémon move", description: 'Restores {{restorePoints}} PP for one Pokémon move',
extra: { extra: {
"fully": "Restores all PP for one Pokémon move", 'fully': 'Restores all PP for one Pokémon move',
} }
}, },
"PokemonAllMovePpRestoreModifierType": { 'PokemonAllMovePpRestoreModifierType': {
description: "Restores {{restorePoints}} PP for all of one Pokémon's moves", description: 'Restores {{restorePoints}} PP for all of one Pokémon\'s moves',
extra: { extra: {
"fully": "Restores all PP for all of one Pokémon's moves", 'fully': 'Restores all PP for all of one Pokémon\'s moves',
} }
}, },
"PokemonPpUpModifierType": { 'PokemonPpUpModifierType': {
description: "Permanently increases PP for one Pokémon move by {{upPoints}} for every 5 maximum PP (maximum 3)", description: 'Permanently increases PP for one Pokémon move by {{upPoints}} for every 5 maximum PP (maximum 3)',
}, },
"PokemonNatureChangeModifierType": { 'PokemonNatureChangeModifierType': {
name: "{{natureName}} Mint", name: '{{natureName}} Mint',
description: "Changes a Pokémon's nature to {{natureName}} and permanently unlocks the nature for the starter.", description: 'Changes a Pokémon\'s nature to {{natureName}} and permanently unlocks the nature for the starter.',
}, },
"DoubleBattleChanceBoosterModifierType": { 'DoubleBattleChanceBoosterModifierType': {
description: "Doubles the chance of an encounter being a double battle for {{battleCount}} battles", description: 'Doubles the chance of an encounter being a double battle for {{battleCount}} battles',
}, },
"TempBattleStatBoosterModifierType": { 'TempBattleStatBoosterModifierType': {
description: "Increases the {{tempBattleStatName}} of all party members by 1 stage for 5 battles", description: 'Increases the {{tempBattleStatName}} of all party members by 1 stage for 5 battles',
}, },
"AttackTypeBoosterModifierType": { 'AttackTypeBoosterModifierType': {
description: "Increases the power of a Pokémon's {{moveType}}-type moves by 20%", description: 'Increases the power of a Pokémon\'s {{moveType}}-type moves by 20%',
}, },
"PokemonLevelIncrementModifierType": { 'PokemonLevelIncrementModifierType': {
description: "Increases a Pokémon's level by 1", description: 'Increases a Pokémon\'s level by 1',
}, },
"AllPokemonLevelIncrementModifierType": { 'AllPokemonLevelIncrementModifierType': {
description: "Increases all party members' level by 1", description: 'Increases all party members\' level by 1',
}, },
"PokemonBaseStatBoosterModifierType": { 'PokemonBaseStatBoosterModifierType': {
description: "Increases the holder's base {{statName}} by 10%. The higher your IVs, the higher the stack limit.", description: 'Increases the holder\'s base {{statName}} by 10%. The higher your IVs, the higher the stack limit.',
}, },
"AllPokemonFullHpRestoreModifierType": { 'AllPokemonFullHpRestoreModifierType': {
description: "Restores 100% HP for all Pokémon", description: 'Restores 100% HP for all Pokémon',
}, },
"AllPokemonFullReviveModifierType": { 'AllPokemonFullReviveModifierType': {
description: "Revives all fainted Pokémon, fully restoring HP", description: 'Revives all fainted Pokémon, fully restoring HP',
}, },
"MoneyRewardModifierType": { 'MoneyRewardModifierType': {
description: "Grants a {{moneyMultiplier}} amount of money (₽{{moneyAmount}})", description: 'Grants a {{moneyMultiplier}} amount of money (₽{{moneyAmount}})',
extra: { extra: {
"small": "small", 'small': 'small',
"moderate": "moderate", 'moderate': 'moderate',
"large": "large", 'large': 'large',
}, },
}, },
"ExpBoosterModifierType": { 'ExpBoosterModifierType': {
description: "Increases gain of EXP. Points by {{boostPercent}}%", description: 'Increases gain of EXP. Points by {{boostPercent}}%',
}, },
"PokemonExpBoosterModifierType": { 'PokemonExpBoosterModifierType': {
description: "Increases the holder's gain of EXP. Points by {{boostPercent}}%", description: 'Increases the holder\'s gain of EXP. Points by {{boostPercent}}%',
}, },
"PokemonFriendshipBoosterModifierType": { 'PokemonFriendshipBoosterModifierType': {
description: "Increases friendship gain per victory by 50%", description: 'Increases friendship gain per victory by 50%',
}, },
"PokemonMoveAccuracyBoosterModifierType": { 'PokemonMoveAccuracyBoosterModifierType': {
description: "Increases move accuracy by {{accuracyAmount}} (maximum 100)", description: 'Increases move accuracy by {{accuracyAmount}} (maximum 100)',
}, },
"PokemonMultiHitModifierType": { 'PokemonMultiHitModifierType': {
description: "Attacks hit one additional time at the cost of a 60/75/82.5% power reduction per stack respectively", description: 'Attacks hit one additional time at the cost of a 60/75/82.5% power reduction per stack respectively',
}, },
"TmModifierType": { 'TmModifierType': {
name: "TM{{moveId}} - {{moveName}}", name: 'TM{{moveId}} - {{moveName}}',
description: "Teach {{moveName}} to a Pokémon", description: 'Teach {{moveName}} to a Pokémon',
}, },
"EvolutionItemModifierType": { 'EvolutionItemModifierType': {
description: "Causes certain Pokémon to evolve", description: 'Causes certain Pokémon to evolve',
}, },
"FormChangeItemModifierType": { 'FormChangeItemModifierType': {
description: "Causes certain Pokémon to change form", description: 'Causes certain Pokémon to change form',
}, },
"FusePokemonModifierType": { 'FusePokemonModifierType': {
description: "Combines two Pokémon (transfers Ability, splits base stats and types, shares move pool)", description: 'Combines two Pokémon (transfers Ability, splits base stats and types, shares move pool)',
}, },
"TerastallizeModifierType": { 'TerastallizeModifierType': {
name: "{{teraType}} Tera Shard", name: '{{teraType}} Tera Shard',
description: "{{teraType}} Terastallizes the holder for up to 10 battles", description: '{{teraType}} Terastallizes the holder for up to 10 battles',
}, },
"ContactHeldItemTransferChanceModifierType": { 'ContactHeldItemTransferChanceModifierType': {
description: "Upon attacking, there is a {{chancePercent}}% chance the foe's held item will be stolen", description: 'Upon attacking, there is a {{chancePercent}}% chance the foe\'s held item will be stolen',
}, },
"TurnHeldItemTransferModifierType": { 'TurnHeldItemTransferModifierType': {
description: "Every turn, the holder acquires one held item from the foe", description: 'Every turn, the holder acquires one held item from the foe',
}, },
"EnemyAttackStatusEffectChanceModifierType": { 'EnemyAttackStatusEffectChanceModifierType': {
description: "Adds a {{chancePercent}}% chance to inflict {{statusEffect}} with attack moves", description: 'Adds a {{chancePercent}}% chance to inflict {{statusEffect}} with attack moves',
}, },
"EnemyEndureChanceModifierType": { 'EnemyEndureChanceModifierType': {
description: "Adds a {{chancePercent}}% chance of enduring a hit", description: 'Adds a {{chancePercent}}% chance of enduring a hit',
}, },
"RARE_CANDY": { name: "Rare Candy" }, 'RARE_CANDY': { name: 'Rare Candy' },
"RARER_CANDY": { name: "Rarer Candy" }, 'RARER_CANDY': { name: 'Rarer Candy' },
"MEGA_BRACELET": { name: "Mega Bracelet", description: "Mega Stones become available" }, 'MEGA_BRACELET': { name: 'Mega Bracelet', description: 'Mega Stones become available' },
"DYNAMAX_BAND": { name: "Dynamax Band", description: "Max Mushrooms become available" }, 'DYNAMAX_BAND': { name: 'Dynamax Band', description: 'Max Mushrooms become available' },
"TERA_ORB": { name: "Tera Orb", description: "Tera Shards become available" }, 'TERA_ORB': { name: 'Tera Orb', description: 'Tera Shards become available' },
"MAP": { name: "Map", description: "Allows you to choose your destination at a crossroads" }, 'MAP': { name: 'Map', description: 'Allows you to choose your destination at a crossroads' },
"POTION": { name: "Potion" }, 'POTION': { name: 'Potion' },
"SUPER_POTION": { name: "Super Potion" }, 'SUPER_POTION': { name: 'Super Potion' },
"HYPER_POTION": { name: "Hyper Potion" }, 'HYPER_POTION': { name: 'Hyper Potion' },
"MAX_POTION": { name: "Max Potion" }, 'MAX_POTION': { name: 'Max Potion' },
"FULL_RESTORE": { name: "Full Restore" }, 'FULL_RESTORE': { name: 'Full Restore' },
"REVIVE": { name: "Revive" }, 'REVIVE': { name: 'Revive' },
"MAX_REVIVE": { name: "Max Revive" }, 'MAX_REVIVE': { name: 'Max Revive' },
"FULL_HEAL": { name: "Full Heal" }, 'FULL_HEAL': { name: 'Full Heal' },
"SACRED_ASH": { name: "Sacred Ash" }, 'SACRED_ASH': { name: 'Sacred Ash' },
"REVIVER_SEED": { name: "Reviver Seed", description: "Revives the holder for 1/2 HP upon fainting" }, 'REVIVER_SEED': { name: 'Reviver Seed', description: 'Revives the holder for 1/2 HP upon fainting' },
"ETHER": { name: "Ether" }, 'ETHER': { name: 'Ether' },
"MAX_ETHER": { name: "Max Ether" }, 'MAX_ETHER': { name: 'Max Ether' },
"ELIXIR": { name: "Elixir" }, 'ELIXIR': { name: 'Elixir' },
"MAX_ELIXIR": { name: "Max Elixir" }, 'MAX_ELIXIR': { name: 'Max Elixir' },
"PP_UP": { name: "PP Up" }, 'PP_UP': { name: 'PP Up' },
"PP_MAX": { name: "PP Max" }, 'PP_MAX': { name: 'PP Max' },
"LURE": { name: "Lure" }, 'LURE': { name: 'Lure' },
"SUPER_LURE": { name: "Super Lure" }, 'SUPER_LURE': { name: 'Super Lure' },
"MAX_LURE": { name: "Max Lure" }, 'MAX_LURE': { name: 'Max Lure' },
"MEMORY_MUSHROOM": { name: "Memory Mushroom", description: "Recall one Pokémon's forgotten move" }, 'MEMORY_MUSHROOM': { name: 'Memory Mushroom', description: 'Recall one Pokémon\'s forgotten move' },
"EXP_SHARE": { name: "EXP. All", description: "Non-participants receive 20% of a single participant's EXP. Points" }, 'EXP_SHARE': { name: 'EXP. All', description: 'Non-participants receive 20% of a single participant\'s EXP. Points' },
"EXP_BALANCE": { name: "EXP. Balance", description: "Weighs EXP. Points received from battles towards lower-leveled party members" }, 'EXP_BALANCE': { name: 'EXP. Balance', description: 'Weighs EXP. Points received from battles towards lower-leveled party members' },
"OVAL_CHARM": { name: "Oval Charm", description: "When multiple Pokémon participate in a battle, each gets an extra 10% of the total EXP" }, 'OVAL_CHARM': { name: 'Oval Charm', description: 'When multiple Pokémon participate in a battle, each gets an extra 10% of the total EXP' },
"EXP_CHARM": { name: "EXP. Charm" }, 'EXP_CHARM': { name: 'EXP. Charm' },
"SUPER_EXP_CHARM": { name: "Super EXP. Charm" }, 'SUPER_EXP_CHARM': { name: 'Super EXP. Charm' },
"GOLDEN_EXP_CHARM": { name: "Golden EXP. Charm" }, 'GOLDEN_EXP_CHARM': { name: 'Golden EXP. Charm' },
"LUCKY_EGG": { name: "Lucky Egg" }, 'LUCKY_EGG': { name: 'Lucky Egg' },
"GOLDEN_EGG": { name: "Golden Egg" }, 'GOLDEN_EGG': { name: 'Golden Egg' },
"SOOTHE_BELL": { name: "Soothe Bell" }, 'SOOTHE_BELL': { name: 'Soothe Bell' },
"SOUL_DEW": { name: "Soul Dew", description: "Increases the influence of a Pokémon's nature on its stats by 10% (additive)" }, 'SOUL_DEW': { name: 'Soul Dew', description: 'Increases the influence of a Pokémon\'s nature on its stats by 10% (additive)' },
"NUGGET": { name: "Nugget" }, 'NUGGET': { name: 'Nugget' },
"BIG_NUGGET": { name: "Big Nugget" }, 'BIG_NUGGET': { name: 'Big Nugget' },
"RELIC_GOLD": { name: "Relic Gold" }, 'RELIC_GOLD': { name: 'Relic Gold' },
"AMULET_COIN": { name: "Amulet Coin", description: "Increases money rewards by 20%" }, 'AMULET_COIN': { name: 'Amulet Coin', description: 'Increases money rewards by 20%' },
"GOLDEN_PUNCH": { name: "Golden Punch", description: "Grants 50% of damage inflicted as money" }, 'GOLDEN_PUNCH': { name: 'Golden Punch', description: 'Grants 50% of damage inflicted as money' },
"COIN_CASE": { name: "Coin Case", description: "After every 10th battle, receive 10% of your money in interest" }, 'COIN_CASE': { name: 'Coin Case', description: 'After every 10th battle, receive 10% of your money in interest' },
"LOCK_CAPSULE": { name: "Lock Capsule", description: "Allows you to lock item rarities when rerolling items" }, 'LOCK_CAPSULE': { name: 'Lock Capsule', description: 'Allows you to lock item rarities when rerolling items' },
"GRIP_CLAW": { name: "Grip Claw" }, 'GRIP_CLAW': { name: 'Grip Claw' },
"WIDE_LENS": { name: "Wide Lens" }, 'WIDE_LENS': { name: 'Wide Lens' },
"MULTI_LENS": { name: "Multi Lens" }, 'MULTI_LENS': { name: 'Multi Lens' },
"HEALING_CHARM": { name: "Healing Charm", description: "Increases the effectiveness of HP restoring moves and items by 10% (excludes Revives)" }, 'HEALING_CHARM': { name: 'Healing Charm', description: 'Increases the effectiveness of HP restoring moves and items by 10% (excludes Revives)' },
"CANDY_JAR": { name: "Candy Jar", description: "Increases the number of levels added by Rare Candy items by 1" }, 'CANDY_JAR': { name: 'Candy Jar', description: 'Increases the number of levels added by Rare Candy items by 1' },
"BERRY_POUCH": { name: "Berry Pouch", description: "Adds a 25% chance that a used berry will not be consumed" }, 'BERRY_POUCH': { name: 'Berry Pouch', description: 'Adds a 25% chance that a used berry will not be consumed' },
"FOCUS_BAND": { name: "Focus Band", description: "Adds a 10% chance to survive with 1 HP after being damaged enough to faint" }, 'FOCUS_BAND': { name: 'Focus Band', description: 'Adds a 10% chance to survive with 1 HP after being damaged enough to faint' },
"QUICK_CLAW": { name: "Quick Claw", description: "Adds a 10% chance to move first regardless of speed (after priority)" }, 'QUICK_CLAW': { name: 'Quick Claw', description: 'Adds a 10% chance to move first regardless of speed (after priority)' },
"KINGS_ROCK": { name: "King's Rock", description: "Adds a 10% chance an attack move will cause the opponent to flinch" }, 'KINGS_ROCK': { name: 'King\'s Rock', description: 'Adds a 10% chance an attack move will cause the opponent to flinch' },
"LEFTOVERS": { name: "Leftovers", description: "Heals 1/16 of a Pokémon's maximum HP every turn" }, 'LEFTOVERS': { name: 'Leftovers', description: 'Heals 1/16 of a Pokémon\'s maximum HP every turn' },
"SHELL_BELL": { name: "Shell Bell", description: "Heals 1/8 of a Pokémon's dealt damage" }, 'SHELL_BELL': { name: 'Shell Bell', description: 'Heals 1/8 of a Pokémon\'s dealt damage' },
"BATON": { name: "Baton", description: "Allows passing along effects when switching Pokémon, which also bypasses traps" }, 'BATON': { name: 'Baton', description: 'Allows passing along effects when switching Pokémon, which also bypasses traps' },
"SHINY_CHARM": { name: "Shiny Charm", description: "Dramatically increases the chance of a wild Pokémon being Shiny" }, 'SHINY_CHARM': { name: 'Shiny Charm', description: 'Dramatically increases the chance of a wild Pokémon being Shiny' },
"ABILITY_CHARM": { name: "Ability Charm", description: "Dramatically increases the chance of a wild Pokémon having a Hidden Ability" }, 'ABILITY_CHARM': { name: 'Ability Charm', description: 'Dramatically increases the chance of a wild Pokémon having a Hidden Ability' },
"IV_SCANNER": { name: "IV Scanner", description: "Allows scanning the IVs of wild Pokémon. 2 IVs are revealed per stack. The best IVs are shown first" }, 'IV_SCANNER': { name: 'IV Scanner', description: 'Allows scanning the IVs of wild Pokémon. 2 IVs are revealed per stack. The best IVs are shown first' },
"DNA_SPLICERS": { name: "DNA Splicers" }, 'DNA_SPLICERS': { name: 'DNA Splicers' },
"MINI_BLACK_HOLE": { name: "Mini Black Hole" }, 'MINI_BLACK_HOLE': { name: 'Mini Black Hole' },
"GOLDEN_POKEBALL": { name: "Golden Poké Ball", description: "Adds 1 extra item option at the end of every battle" }, 'GOLDEN_POKEBALL': { name: 'Golden Poké Ball', description: 'Adds 1 extra item option at the end of every battle' },
"ENEMY_DAMAGE_BOOSTER": { name: "Damage Token", description: "Increases damage by 5%" }, 'ENEMY_DAMAGE_BOOSTER': { name: 'Damage Token', description: 'Increases damage by 5%' },
"ENEMY_DAMAGE_REDUCTION": { name: "Protection Token", description: "Reduces incoming damage by 2.5%" }, 'ENEMY_DAMAGE_REDUCTION': { name: 'Protection Token', description: 'Reduces incoming damage by 2.5%' },
"ENEMY_HEAL": { name: "Recovery Token", description: "Heals 2% of max HP every turn" }, 'ENEMY_HEAL': { name: 'Recovery Token', description: 'Heals 2% of max HP every turn' },
"ENEMY_ATTACK_POISON_CHANCE": { name: "Poison Token" }, 'ENEMY_ATTACK_POISON_CHANCE': { name: 'Poison Token' },
"ENEMY_ATTACK_PARALYZE_CHANCE": { name: "Paralyze Token" }, 'ENEMY_ATTACK_PARALYZE_CHANCE': { name: 'Paralyze Token' },
"ENEMY_ATTACK_SLEEP_CHANCE": { name: "Sleep Token" }, 'ENEMY_ATTACK_SLEEP_CHANCE': { name: 'Sleep Token' },
"ENEMY_ATTACK_FREEZE_CHANCE": { name: "Freeze Token" }, 'ENEMY_ATTACK_FREEZE_CHANCE': { name: 'Freeze Token' },
"ENEMY_ATTACK_BURN_CHANCE": { name: "Burn Token" }, 'ENEMY_ATTACK_BURN_CHANCE': { name: 'Burn Token' },
"ENEMY_STATUS_EFFECT_HEAL_CHANCE": { name: "Full Heal Token", description: "Adds a 10% chance every turn to heal a status condition" }, 'ENEMY_STATUS_EFFECT_HEAL_CHANCE': { name: 'Full Heal Token', description: 'Adds a 10% chance every turn to heal a status condition' },
"ENEMY_ENDURE_CHANCE": { name: "Endure Token" }, 'ENEMY_ENDURE_CHANCE': { name: 'Endure Token' },
"ENEMY_FUSED_CHANCE": { name: "Fusion Token", description: "Adds a 1% chance that a wild Pokémon will be a fusion" }, 'ENEMY_FUSED_CHANCE': { name: 'Fusion Token', description: 'Adds a 1% chance that a wild Pokémon will be a fusion' },
}, },
TempBattleStatBoosterItem: { TempBattleStatBoosterItem: {
"x_attack": "X Attack", 'x_attack': 'X Attack',
"x_defense": "X Defense", 'x_defense': 'X Defense',
"x_sp_atk": "X Sp. Atk", 'x_sp_atk': 'X Sp. Atk',
"x_sp_def": "X Sp. Def", 'x_sp_def': 'X Sp. Def',
"x_speed": "X Speed", 'x_speed': 'X Speed',
"x_accuracy": "X Accuracy", 'x_accuracy': 'X Accuracy',
"dire_hit": "Dire Hit", 'dire_hit': 'Dire Hit',
}, },
AttackTypeBoosterItem: { AttackTypeBoosterItem: {
"silk_scarf": "Silk Scarf", 'silk_scarf': 'Silk Scarf',
"black_belt": "Black Belt", 'black_belt': 'Black Belt',
"sharp_beak": "Sharp Beak", 'sharp_beak': 'Sharp Beak',
"poison_barb": "Poison Barb", 'poison_barb': 'Poison Barb',
"soft_sand": "Soft Sand", 'soft_sand': 'Soft Sand',
"hard_stone": "Hard Stone", 'hard_stone': 'Hard Stone',
"silver_powder": "Silver Powder", 'silver_powder': 'Silver Powder',
"spell_tag": "Spell Tag", 'spell_tag': 'Spell Tag',
"metal_coat": "Metal Coat", 'metal_coat': 'Metal Coat',
"charcoal": "Charcoal", 'charcoal': 'Charcoal',
"mystic_water": "Mystic Water", 'mystic_water': 'Mystic Water',
"miracle_seed": "Miracle Seed", 'miracle_seed': 'Miracle Seed',
"magnet": "Magnet", 'magnet': 'Magnet',
"twisted_spoon": "Twisted Spoon", 'twisted_spoon': 'Twisted Spoon',
"never_melt_ice": "Never-Melt Ice", 'never_melt_ice': 'Never-Melt Ice',
"dragon_fang": "Dragon Fang", 'dragon_fang': 'Dragon Fang',
"black_glasses": "Black Glasses", 'black_glasses': 'Black Glasses',
"fairy_feather": "Fairy Feather", 'fairy_feather': 'Fairy Feather',
}, },
BaseStatBoosterItem: { BaseStatBoosterItem: {
"hp_up": "HP Up", 'hp_up': 'HP Up',
"protein": "Protein", 'protein': 'Protein',
"iron": "Iron", 'iron': 'Iron',
"calcium": "Calcium", 'calcium': 'Calcium',
"zinc": "Zinc", 'zinc': 'Zinc',
"carbos": "Carbos", 'carbos': 'Carbos',
}, },
EvolutionItem: { EvolutionItem: {
"NONE": "None", 'NONE': 'None',
"LINKING_CORD": "Linking Cord", 'LINKING_CORD': 'Linking Cord',
"SUN_STONE": "Sun Stone", 'SUN_STONE': 'Sun Stone',
"MOON_STONE": "Moon Stone", 'MOON_STONE': 'Moon Stone',
"LEAF_STONE": "Leaf Stone", 'LEAF_STONE': 'Leaf Stone',
"FIRE_STONE": "Fire Stone", 'FIRE_STONE': 'Fire Stone',
"WATER_STONE": "Water Stone", 'WATER_STONE': 'Water Stone',
"THUNDER_STONE": "Thunder Stone", 'THUNDER_STONE': 'Thunder Stone',
"ICE_STONE": "Ice Stone", 'ICE_STONE': 'Ice Stone',
"DUSK_STONE": "Dusk Stone", 'DUSK_STONE': 'Dusk Stone',
"DAWN_STONE": "Dawn Stone", 'DAWN_STONE': 'Dawn Stone',
"SHINY_STONE": "Shiny Stone", 'SHINY_STONE': 'Shiny Stone',
"CRACKED_POT": "Cracked Pot", 'CRACKED_POT': 'Cracked Pot',
"SWEET_APPLE": "Sweet Apple", 'SWEET_APPLE': 'Sweet Apple',
"TART_APPLE": "Tart Apple", 'TART_APPLE': 'Tart Apple',
"STRAWBERRY_SWEET": "Strawberry Sweet", 'STRAWBERRY_SWEET': 'Strawberry Sweet',
"UNREMARKABLE_TEACUP": "Unremarkable Teacup", 'UNREMARKABLE_TEACUP': 'Unremarkable Teacup',
"CHIPPED_POT": "Chipped Pot", 'CHIPPED_POT': 'Chipped Pot',
"BLACK_AUGURITE": "Black Augurite", 'BLACK_AUGURITE': 'Black Augurite',
"GALARICA_CUFF": "Galarica Cuff", 'GALARICA_CUFF': 'Galarica Cuff',
"GALARICA_WREATH": "Galarica Wreath", 'GALARICA_WREATH': 'Galarica Wreath',
"PEAT_BLOCK": "Peat Block", 'PEAT_BLOCK': 'Peat Block',
"AUSPICIOUS_ARMOR": "Auspicious Armor", 'AUSPICIOUS_ARMOR': 'Auspicious Armor',
"MALICIOUS_ARMOR": "Malicious Armor", 'MALICIOUS_ARMOR': 'Malicious Armor',
"MASTERPIECE_TEACUP": "Masterpiece Teacup", 'MASTERPIECE_TEACUP': 'Masterpiece Teacup',
"METAL_ALLOY": "Metal Alloy", 'METAL_ALLOY': 'Metal Alloy',
"SCROLL_OF_DARKNESS": "Scroll Of Darkness", 'SCROLL_OF_DARKNESS': 'Scroll Of Darkness',
"SCROLL_OF_WATERS": "Scroll Of Waters", 'SCROLL_OF_WATERS': 'Scroll Of Waters',
"SYRUPY_APPLE": "Syrupy Apple", 'SYRUPY_APPLE': 'Syrupy Apple',
}, },
FormChangeItem: { FormChangeItem: {
"NONE": "None", 'NONE': 'None',
"ABOMASITE": "Abomasite", 'ABOMASITE': 'Abomasite',
"ABSOLITE": "Absolite", 'ABSOLITE': 'Absolite',
"AERODACTYLITE": "Aerodactylite", 'AERODACTYLITE': 'Aerodactylite',
"AGGRONITE": "Aggronite", 'AGGRONITE': 'Aggronite',
"ALAKAZITE": "Alakazite", 'ALAKAZITE': 'Alakazite',
"ALTARIANITE": "Altarianite", 'ALTARIANITE': 'Altarianite',
"AMPHAROSITE": "Ampharosite", 'AMPHAROSITE': 'Ampharosite',
"AUDINITE": "Audinite", 'AUDINITE': 'Audinite',
"BANETTITE": "Banettite", 'BANETTITE': 'Banettite',
"BEEDRILLITE": "Beedrillite", 'BEEDRILLITE': 'Beedrillite',
"BLASTOISINITE": "Blastoisinite", 'BLASTOISINITE': 'Blastoisinite',
"BLAZIKENITE": "Blazikenite", 'BLAZIKENITE': 'Blazikenite',
"CAMERUPTITE": "Cameruptite", 'CAMERUPTITE': 'Cameruptite',
"CHARIZARDITE_X": "Charizardite X", 'CHARIZARDITE_X': 'Charizardite X',
"CHARIZARDITE_Y": "Charizardite Y", 'CHARIZARDITE_Y': 'Charizardite Y',
"DIANCITE": "Diancite", 'DIANCITE': 'Diancite',
"GALLADITE": "Galladite", 'GALLADITE': 'Galladite',
"GARCHOMPITE": "Garchompite", 'GARCHOMPITE': 'Garchompite',
"GARDEVOIRITE": "Gardevoirite", 'GARDEVOIRITE': 'Gardevoirite',
"GENGARITE": "Gengarite", 'GENGARITE': 'Gengarite',
"GLALITITE": "Glalitite", 'GLALITITE': 'Glalitite',
"GYARADOSITE": "Gyaradosite", 'GYARADOSITE': 'Gyaradosite',
"HERACRONITE": "Heracronite", 'HERACRONITE': 'Heracronite',
"HOUNDOOMINITE": "Houndoominite", 'HOUNDOOMINITE': 'Houndoominite',
"KANGASKHANITE": "Kangaskhanite", 'KANGASKHANITE': 'Kangaskhanite',
"LATIASITE": "Latiasite", 'LATIASITE': 'Latiasite',
"LATIOSITE": "Latiosite", 'LATIOSITE': 'Latiosite',
"LOPUNNITE": "Lopunnite", 'LOPUNNITE': 'Lopunnite',
"LUCARIONITE": "Lucarionite", 'LUCARIONITE': 'Lucarionite',
"MANECTITE": "Manectite", 'MANECTITE': 'Manectite',
"MAWILITE": "Mawilite", 'MAWILITE': 'Mawilite',
"MEDICHAMITE": "Medichamite", 'MEDICHAMITE': 'Medichamite',
"METAGROSSITE": "Metagrossite", 'METAGROSSITE': 'Metagrossite',
"MEWTWONITE_X": "Mewtwonite X", 'MEWTWONITE_X': 'Mewtwonite X',
"MEWTWONITE_Y": "Mewtwonite Y", 'MEWTWONITE_Y': 'Mewtwonite Y',
"PIDGEOTITE": "Pidgeotite", 'PIDGEOTITE': 'Pidgeotite',
"PINSIRITE": "Pinsirite", 'PINSIRITE': 'Pinsirite',
"RAYQUAZITE": "Rayquazite", 'RAYQUAZITE': 'Rayquazite',
"SABLENITE": "Sablenite", 'SABLENITE': 'Sablenite',
"SALAMENCITE": "Salamencite", 'SALAMENCITE': 'Salamencite',
"SCEPTILITE": "Sceptilite", 'SCEPTILITE': 'Sceptilite',
"SCIZORITE": "Scizorite", 'SCIZORITE': 'Scizorite',
"SHARPEDONITE": "Sharpedonite", 'SHARPEDONITE': 'Sharpedonite',
"SLOWBRONITE": "Slowbronite", 'SLOWBRONITE': 'Slowbronite',
"STEELIXITE": "Steelixite", 'STEELIXITE': 'Steelixite',
"SWAMPERTITE": "Swampertite", 'SWAMPERTITE': 'Swampertite',
"TYRANITARITE": "Tyranitarite", 'TYRANITARITE': 'Tyranitarite',
"VENUSAURITE": "Venusaurite", 'VENUSAURITE': 'Venusaurite',
"BLUE_ORB": "Blue Orb", 'BLUE_ORB': 'Blue Orb',
"RED_ORB": "Red Orb", 'RED_ORB': 'Red Orb',
"SHARP_METEORITE": "Sharp Meteorite", 'SHARP_METEORITE': 'Sharp Meteorite',
"HARD_METEORITE": "Hard Meteorite", 'HARD_METEORITE': 'Hard Meteorite',
"SMOOTH_METEORITE": "Smooth Meteorite", 'SMOOTH_METEORITE': 'Smooth Meteorite',
"ADAMANT_CRYSTAL": "Adamant Crystal", 'ADAMANT_CRYSTAL': 'Adamant Crystal',
"LUSTROUS_ORB": "Lustrous Orb", 'LUSTROUS_ORB': 'Lustrous Orb',
"GRISEOUS_CORE": "Griseous Core", 'GRISEOUS_CORE': 'Griseous Core',
"REVEAL_GLASS": "Reveal Glass", 'REVEAL_GLASS': 'Reveal Glass',
"GRACIDEA": "Gracidea", 'GRACIDEA': 'Gracidea',
"MAX_MUSHROOMS": "Max Mushrooms", 'MAX_MUSHROOMS': 'Max Mushrooms',
"DARK_STONE": "Dark Stone", 'DARK_STONE': 'Dark Stone',
"LIGHT_STONE": "Light Stone", 'LIGHT_STONE': 'Light Stone',
"PRISON_BOTTLE": "Prison Bottle", 'PRISON_BOTTLE': 'Prison Bottle',
"N_LUNARIZER": "N Lunarizer", 'N_LUNARIZER': 'N Lunarizer',
"N_SOLARIZER": "N Solarizer", 'N_SOLARIZER': 'N Solarizer',
"RUSTED_SWORD": "Rusted Sword", 'RUSTED_SWORD': 'Rusted Sword',
"RUSTED_SHIELD": "Rusted Shield", 'RUSTED_SHIELD': 'Rusted Shield',
"ICY_REINS_OF_UNITY": "Icy Reins Of Unity", 'ICY_REINS_OF_UNITY': 'Icy Reins Of Unity',
"SHADOW_REINS_OF_UNITY": "Shadow Reins Of Unity", 'SHADOW_REINS_OF_UNITY': 'Shadow Reins Of Unity',
"WELLSPRING_MASK": "Wellspring Mask", 'WELLSPRING_MASK': 'Wellspring Mask',
"HEARTHFLAME_MASK": "Hearthflame Mask", 'HEARTHFLAME_MASK': 'Hearthflame Mask',
"CORNERSTONE_MASK": "Cornerstone Mask", 'CORNERSTONE_MASK': 'Cornerstone Mask',
"SHOCK_DRIVE": "Shock Drive", 'SHOCK_DRIVE': 'Shock Drive',
"BURN_DRIVE": "Burn Drive", 'BURN_DRIVE': 'Burn Drive',
"CHILL_DRIVE": "Chill Drive", 'CHILL_DRIVE': 'Chill Drive',
"DOUSE_DRIVE": "Douse Drive", 'DOUSE_DRIVE': 'Douse Drive',
}, },
} as const; } as const;

File diff suppressed because it is too large Load Diff

View File

@ -1,29 +1,29 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const nature: SimpleTranslationEntries = { export const nature: SimpleTranslationEntries = {
"Hardy": "Hardy", 'Hardy': 'Hardy',
"Lonely": "Lonely", 'Lonely': 'Lonely',
"Brave": "Brave", 'Brave': 'Brave',
"Adamant": "Adamant", 'Adamant': 'Adamant',
"Naughty": "Naughty", 'Naughty': 'Naughty',
"Bold": "Bold", 'Bold': 'Bold',
"Docile": "Docile", 'Docile': 'Docile',
"Relaxed": "Relaxed", 'Relaxed': 'Relaxed',
"Impish": "Impish", 'Impish': 'Impish',
"Lax": "Lax", 'Lax': 'Lax',
"Timid": "Timid", 'Timid': 'Timid',
"Hasty": "Hasty", 'Hasty': 'Hasty',
"Serious": "Serious", 'Serious': 'Serious',
"Jolly": "Jolly", 'Jolly': 'Jolly',
"Naive": "Naive", 'Naive': 'Naive',
"Modest": "Modest", 'Modest': 'Modest',
"Mild": "Mild", 'Mild': 'Mild',
"Quiet": "Quiet", 'Quiet': 'Quiet',
"Bashful": "Bashful", 'Bashful': 'Bashful',
"Rash": "Rash", 'Rash': 'Rash',
"Calm": "Calm", 'Calm': 'Calm',
"Gentle": "Gentle", 'Gentle': 'Gentle',
"Sassy": "Sassy", 'Sassy': 'Sassy',
"Careful": "Careful", 'Careful': 'Careful',
"Quirky": "Quirky" 'Quirky': 'Quirky'
} as const; } as const;

View File

@ -1,10 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const pokeball: SimpleTranslationEntries = { export const pokeball: SimpleTranslationEntries = {
"pokeBall": "Poké Ball", 'pokeBall': 'Poké Ball',
"greatBall": "Great Ball", 'greatBall': 'Great Ball',
"ultraBall": "Ultra Ball", 'ultraBall': 'Ultra Ball',
"rogueBall": "Rogue Ball", 'rogueBall': 'Rogue Ball',
"masterBall": "Master Ball", 'masterBall': 'Master Ball',
"luxuryBall": "Luxury Ball", 'luxuryBall': 'Luxury Ball',
} as const; } as const;

View File

@ -1,41 +1,41 @@
import { PokemonInfoTranslationEntries } from "#app/plugins/i18n"; import { PokemonInfoTranslationEntries } from '#app/plugins/i18n';
export const pokemonInfo: PokemonInfoTranslationEntries = { export const pokemonInfo: PokemonInfoTranslationEntries = {
Stat: { Stat: {
"HP": "Max. HP", 'HP': 'Max. HP',
"HPshortened": "MaxHP", 'HPshortened': 'MaxHP',
"ATK": "Attack", 'ATK': 'Attack',
"ATKshortened": "Atk", 'ATKshortened': 'Atk',
"DEF": "Defense", 'DEF': 'Defense',
"DEFshortened": "Def", 'DEFshortened': 'Def',
"SPATK": "Sp. Atk", 'SPATK': 'Sp. Atk',
"SPATKshortened": "SpAtk", 'SPATKshortened': 'SpAtk',
"SPDEF": "Sp. Def", 'SPDEF': 'Sp. Def',
"SPDEFshortened": "SpDef", 'SPDEFshortened': 'SpDef',
"SPD": "Speed", 'SPD': 'Speed',
"SPDshortened": "Spd" 'SPDshortened': 'Spd'
}, },
Type: { Type: {
"UNKNOWN": "Unknown", 'UNKNOWN': 'Unknown',
"NORMAL": "Normal", 'NORMAL': 'Normal',
"FIGHTING": "Fighting", 'FIGHTING': 'Fighting',
"FLYING": "Flying", 'FLYING': 'Flying',
"POISON": "Poison", 'POISON': 'Poison',
"GROUND": "Ground", 'GROUND': 'Ground',
"ROCK": "Rock", 'ROCK': 'Rock',
"BUG": "Bug", 'BUG': 'Bug',
"GHOST": "Ghost", 'GHOST': 'Ghost',
"STEEL": "Steel", 'STEEL': 'Steel',
"FIRE": "Fire", 'FIRE': 'Fire',
"WATER": "Water", 'WATER': 'Water',
"GRASS": "Grass", 'GRASS': 'Grass',
"ELECTRIC": "Electric", 'ELECTRIC': 'Electric',
"PSYCHIC": "Psychic", 'PSYCHIC': 'Psychic',
"ICE": "Ice", 'ICE': 'Ice',
"DRAGON": "Dragon", 'DRAGON': 'Dragon',
"DARK": "Dark", 'DARK': 'Dark',
"FAIRY": "Fairy", 'FAIRY': 'Fairy',
"STELLAR": "Stellar", 'STELLAR': 'Stellar',
}, },
} as const; } as const;

File diff suppressed because it is too large Load Diff

View File

@ -1,37 +1,37 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const splashMessages: SimpleTranslationEntries = { export const splashMessages: SimpleTranslationEntries = {
"battlesWon": "Battles Won!", 'battlesWon': 'Battles Won!',
"joinTheDiscord": "Join the Discord!", 'joinTheDiscord': 'Join the Discord!',
"infiniteLevels": "Infinite Levels!", 'infiniteLevels': 'Infinite Levels!',
"everythingStacks": "Everything Stacks!", 'everythingStacks': 'Everything Stacks!',
"optionalSaveScumming": "Optional Save Scumming!", 'optionalSaveScumming': 'Optional Save Scumming!',
"biomes": "35 Biomes!", 'biomes': '35 Biomes!',
"openSource": "Open Source!", 'openSource': 'Open Source!',
"playWithSpeed": "Play with 5x Speed!", 'playWithSpeed': 'Play with 5x Speed!',
"liveBugTesting": "Live Bug Testing!", 'liveBugTesting': 'Live Bug Testing!',
"heavyInfluence": "Heavy RoR2 Influence!", 'heavyInfluence': 'Heavy RoR2 Influence!',
"pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!", 'pokemonRiskAndPokemonRain': 'Pokémon Risk and Pokémon Rain!',
"nowWithMoreSalt": "Now with 33% More Salt!", 'nowWithMoreSalt': 'Now with 33% More Salt!',
"infiniteFusionAtHome": "Infinite Fusion at Home!", 'infiniteFusionAtHome': 'Infinite Fusion at Home!',
"brokenEggMoves": "Broken Egg Moves!", 'brokenEggMoves': 'Broken Egg Moves!',
"magnificent": "Magnificent!", 'magnificent': 'Magnificent!',
"mubstitute": "Mubstitute!", 'mubstitute': 'Mubstitute!',
"thatsCrazy": "That\'s Crazy!", 'thatsCrazy': 'That\'s Crazy!',
"oranceJuice": "Orance Juice!", 'oranceJuice': 'Orance Juice!',
"questionableBalancing": "Questionable Balancing!", 'questionableBalancing': 'Questionable Balancing!',
"coolShaders": "Cool Shaders!", 'coolShaders': 'Cool Shaders!',
"aiFree": "AI-Free!", 'aiFree': 'AI-Free!',
"suddenDifficultySpikes": "Sudden Difficulty Spikes!", 'suddenDifficultySpikes': 'Sudden Difficulty Spikes!',
"basedOnAnUnfinishedFlashGame": "Based on an Unfinished Flash Game!", 'basedOnAnUnfinishedFlashGame': 'Based on an Unfinished Flash Game!',
"moreAddictiveThanIntended": "More Addictive than Intended!", 'moreAddictiveThanIntended': 'More Addictive than Intended!',
"mostlyConsistentSeeds": "Mostly Consistent Seeds!", 'mostlyConsistentSeeds': 'Mostly Consistent Seeds!',
"achievementPointsDontDoAnything": "Achievement Points Don\'t Do Anything!", 'achievementPointsDontDoAnything': 'Achievement Points Don\'t Do Anything!',
"youDoNotStartAtLevel": "You Do Not Start at Level 2000!", 'youDoNotStartAtLevel': 'You Do Not Start at Level 2000!',
"dontTalkAboutTheManaphyEggIncident": "Don\'t Talk About the Manaphy Egg Incident!", 'dontTalkAboutTheManaphyEggIncident': 'Don\'t Talk About the Manaphy Egg Incident!',
"alsoTryPokengine": "Also Try Pokéngine!", 'alsoTryPokengine': 'Also Try Pokéngine!',
"alsoTryEmeraldRogue": "Also Try Emerald Rogue!", 'alsoTryEmeraldRogue': 'Also Try Emerald Rogue!',
"alsoTryRadicalRed": "Also Try Radical Red!", 'alsoTryRadicalRed': 'Also Try Radical Red!',
"eeveeExpo": "Eevee Expo!", 'eeveeExpo': 'Eevee Expo!',
"ynoproject": "YNOproject!", 'ynoproject': 'YNOproject!',
} as const; } as const;

View File

@ -1,4 +1,4 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
/** /**
* The menu namespace holds most miscellaneous text that isn't directly part of the game's * The menu namespace holds most miscellaneous text that isn't directly part of the game's
@ -6,39 +6,39 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n";
* account interactions, descriptive text, etc. * account interactions, descriptive text, etc.
*/ */
export const starterSelectUiHandler: SimpleTranslationEntries = { export const starterSelectUiHandler: SimpleTranslationEntries = {
"confirmStartTeam":'Begin with these Pokémon?', 'confirmStartTeam':'Begin with these Pokémon?',
"gen1": "I", 'gen1': 'I',
"gen2": "II", 'gen2': 'II',
"gen3": "III", 'gen3': 'III',
"gen4": "IV", 'gen4': 'IV',
"gen5": "V", 'gen5': 'V',
"gen6": "VI", 'gen6': 'VI',
"gen7": "VII", 'gen7': 'VII',
"gen8": "VIII", 'gen8': 'VIII',
"gen9": "IX", 'gen9': 'IX',
"growthRate": "Growth Rate:", 'growthRate': 'Growth Rate:',
"ability": "Ability:", 'ability': 'Ability:',
"passive": "Passive:", 'passive': 'Passive:',
"nature": "Nature:", 'nature': 'Nature:',
"eggMoves": 'Egg Moves', 'eggMoves': 'Egg Moves',
"start": "Start", 'start': 'Start',
"addToParty": "Add to Party", 'addToParty': 'Add to Party',
"toggleIVs": 'Toggle IVs', 'toggleIVs': 'Toggle IVs',
"manageMoves": 'Manage Moves', 'manageMoves': 'Manage Moves',
"useCandies": 'Use Candies', 'useCandies': 'Use Candies',
"selectMoveSwapOut": "Select a move to swap out.", 'selectMoveSwapOut': 'Select a move to swap out.',
"selectMoveSwapWith": "Select a move to swap with", 'selectMoveSwapWith': 'Select a move to swap with',
"unlockPassive": "Unlock Passive", 'unlockPassive': 'Unlock Passive',
"reduceCost": "Reduce Cost", 'reduceCost': 'Reduce Cost',
"cycleShiny": "R: Cycle Shiny", 'cycleShiny': 'R: Cycle Shiny',
"cycleForm": 'F: Cycle Form', 'cycleForm': 'F: Cycle Form',
"cycleGender": 'G: Cycle Gender', 'cycleGender': 'G: Cycle Gender',
"cycleAbility": 'E: Cycle Ability', 'cycleAbility': 'E: Cycle Ability',
"cycleNature": 'N: Cycle Nature', 'cycleNature': 'N: Cycle Nature',
"cycleVariant": 'V: Cycle Variant', 'cycleVariant': 'V: Cycle Variant',
"enablePassive": "Enable Passive", 'enablePassive': 'Enable Passive',
"disablePassive": "Disable Passive", 'disablePassive': 'Disable Passive',
"locked": "Locked", 'locked': 'Locked',
"disabled": "Disabled", 'disabled': 'Disabled',
"uncaught": "Uncaught" 'uncaught': 'Uncaught'
} };

View File

@ -1,244 +1,244 @@
import {SimpleTranslationEntries} from "#app/plugins/i18n"; import {SimpleTranslationEntries} from '#app/plugins/i18n';
// Titles of special trainers like gym leaders, elite four, and the champion // Titles of special trainers like gym leaders, elite four, and the champion
export const titles: SimpleTranslationEntries = { export const titles: SimpleTranslationEntries = {
"elite_four": "Elite Four", 'elite_four': 'Elite Four',
"gym_leader": "Gym Leader", 'gym_leader': 'Gym Leader',
"gym_leader_female": "Gym Leader", 'gym_leader_female': 'Gym Leader',
"champion": "Champion", 'champion': 'Champion',
"rival": "Rival", 'rival': 'Rival',
"professor": "Professor", 'professor': 'Professor',
"frontier_brain": "Frontier Brain", 'frontier_brain': 'Frontier Brain',
// Maybe if we add the evil teams we can add "Team Rocket" and "Team Aqua" etc. here as well as "Team Rocket Boss" and "Team Aqua Admin" etc. // Maybe if we add the evil teams we can add "Team Rocket" and "Team Aqua" etc. here as well as "Team Rocket Boss" and "Team Aqua Admin" etc.
} as const; } as const;
// Titles of trainers like "Youngster" or "Lass" // Titles of trainers like "Youngster" or "Lass"
export const trainerClasses: SimpleTranslationEntries = { export const trainerClasses: SimpleTranslationEntries = {
"ace_trainer": "Ace Trainer", 'ace_trainer': 'Ace Trainer',
"ace_trainer_female": "Ace Trainer", 'ace_trainer_female': 'Ace Trainer',
"ace_duo": "Ace Duo", 'ace_duo': 'Ace Duo',
"artist": "Artist", 'artist': 'Artist',
"artist_female": "Artist", 'artist_female': 'Artist',
"backers": "Backers", 'backers': 'Backers',
"backpacker": "Backpacker", 'backpacker': 'Backpacker',
"backpacker_female": "Backpacker", 'backpacker_female': 'Backpacker',
"backpackers": "Backpackers", 'backpackers': 'Backpackers',
"baker": "Baker", 'baker': 'Baker',
"battle_girl": "Battle Girl", 'battle_girl': 'Battle Girl',
"beauty": "Beauty", 'beauty': 'Beauty',
"beginners": "Beginners", 'beginners': 'Beginners',
"biker": "Biker", 'biker': 'Biker',
"black_belt": "Black Belt", 'black_belt': 'Black Belt',
"breeder": "Breeder", 'breeder': 'Breeder',
"breeder_female": "Breeder", 'breeder_female': 'Breeder',
"breeders": "Breeders", 'breeders': 'Breeders',
"clerk": "Clerk", 'clerk': 'Clerk',
"clerk_female": "Clerk", 'clerk_female': 'Clerk',
"colleagues": "Colleagues", 'colleagues': 'Colleagues',
"crush_kin": "Crush Kin", 'crush_kin': 'Crush Kin',
"cyclist": "Cyclist", 'cyclist': 'Cyclist',
"cyclist_female": "Cyclist", 'cyclist_female': 'Cyclist',
"cyclists": "Cyclists", 'cyclists': 'Cyclists',
"dancer": "Dancer", 'dancer': 'Dancer',
"dancer_female": "Dancer", 'dancer_female': 'Dancer',
"depot_agent": "Depot Agent", 'depot_agent': 'Depot Agent',
"doctor": "Doctor", 'doctor': 'Doctor',
"doctor_female": "Doctor", 'doctor_female': 'Doctor',
"fisherman": "Fisherman", 'fisherman': 'Fisherman',
"fisherman_female": "Fisherman", 'fisherman_female': 'Fisherman',
"gentleman": "Gentleman", 'gentleman': 'Gentleman',
"guitarist": "Guitarist", 'guitarist': 'Guitarist',
"guitarist_female": "Guitarist", 'guitarist_female': 'Guitarist',
"harlequin": "Harlequin", 'harlequin': 'Harlequin',
"hiker": "Hiker", 'hiker': 'Hiker',
"hooligans": "Hooligans", 'hooligans': 'Hooligans',
"hoopster": "Hoopster", 'hoopster': 'Hoopster',
"infielder": "Infielder", 'infielder': 'Infielder',
"janitor": "Janitor", 'janitor': 'Janitor',
"lady": "Lady", 'lady': 'Lady',
"lass": "Lass", 'lass': 'Lass',
"linebacker": "Linebacker", 'linebacker': 'Linebacker',
"maid": "Maid", 'maid': 'Maid',
"madame": "Madame", 'madame': 'Madame',
"medical_team": "Medical Team", 'medical_team': 'Medical Team',
"musician": "Musician", 'musician': 'Musician',
"hex_maniac": "Hex Maniac", 'hex_maniac': 'Hex Maniac',
"nurse": "Nurse", 'nurse': 'Nurse',
"nursery_aide": "Nursery Aide", 'nursery_aide': 'Nursery Aide',
"officer": "Officer", 'officer': 'Officer',
"parasol_lady": "Parasol Lady", 'parasol_lady': 'Parasol Lady',
"pilot": "Pilot", 'pilot': 'Pilot',
"pokéfan": "Poké Fan", 'pokéfan': 'Poké Fan',
"pokéfan_female": "Poké Fan", 'pokéfan_female': 'Poké Fan',
"pokéfan_family": "Poké Fan Family", 'pokéfan_family': 'Poké Fan Family',
"preschooler": "Preschooler", 'preschooler': 'Preschooler',
"preschooler_female": "Preschooler", 'preschooler_female': 'Preschooler',
"preschoolers": "Preschoolers", 'preschoolers': 'Preschoolers',
"psychic": "Psychic", 'psychic': 'Psychic',
"psychic_female": "Psychic", 'psychic_female': 'Psychic',
"psychics": "Psychics", 'psychics': 'Psychics',
"pokémon_ranger": "Pokémon Ranger", 'pokémon_ranger': 'Pokémon Ranger',
"pokémon_ranger_female": "Pokémon Ranger", 'pokémon_ranger_female': 'Pokémon Ranger',
"pokémon_rangers": "Pokémon Ranger", 'pokémon_rangers': 'Pokémon Ranger',
"ranger": "Ranger", 'ranger': 'Ranger',
"restaurant_staff": "Restaurant Staff", 'restaurant_staff': 'Restaurant Staff',
"rich": "Rich", 'rich': 'Rich',
"rich_female": "Rich", 'rich_female': 'Rich',
"rich_boy": "Rich Boy", 'rich_boy': 'Rich Boy',
"rich_couple": "Rich Couple", 'rich_couple': 'Rich Couple',
"rich_kid": "Rich Kid", 'rich_kid': 'Rich Kid',
"rich_kid_female": "Rich Kid", 'rich_kid_female': 'Rich Kid',
"rich_kids": "Rich Kids", 'rich_kids': 'Rich Kids',
"roughneck": "Roughneck", 'roughneck': 'Roughneck',
"scientist": "Scientist", 'scientist': 'Scientist',
"scientist_female": "Scientist", 'scientist_female': 'Scientist',
"scientists": "Scientists", 'scientists': 'Scientists',
"smasher": "Smasher", 'smasher': 'Smasher',
"snow_worker": "Snow Worker", 'snow_worker': 'Snow Worker',
"snow_worker_female": "Snow Worker", 'snow_worker_female': 'Snow Worker',
"striker": "Striker", 'striker': 'Striker',
"school_kid": "School Kid", 'school_kid': 'School Kid',
"school_kid_female": "School Kid", 'school_kid_female': 'School Kid',
"school_kids": "School Kids", 'school_kids': 'School Kids',
"swimmer": "Swimmer", 'swimmer': 'Swimmer',
"swimmer_female": "Swimmer", 'swimmer_female': 'Swimmer',
"swimmers": "Swimmers", 'swimmers': 'Swimmers',
"twins": "Twins", 'twins': 'Twins',
"veteran": "Veteran", 'veteran': 'Veteran',
"veteran_female": "Veteran", 'veteran_female': 'Veteran',
"veteran_duo": "Veteran Duo", 'veteran_duo': 'Veteran Duo',
"waiter": "Waiter", 'waiter': 'Waiter',
"waitress": "Waitress", 'waitress': 'Waitress',
"worker": "Worker", 'worker': 'Worker',
"worker_female": "Worker", 'worker_female': 'Worker',
"workers": "Workers", 'workers': 'Workers',
"youngster": "Youngster" 'youngster': 'Youngster'
} as const; } as const;
// Names of special trainers like gym leaders, elite four, and the champion // Names of special trainers like gym leaders, elite four, and the champion
export const trainerNames: SimpleTranslationEntries = { export const trainerNames: SimpleTranslationEntries = {
"brock": "Brock", 'brock': 'Brock',
"misty": "Misty", 'misty': 'Misty',
"lt_surge": "Lt Surge", 'lt_surge': 'Lt Surge',
"erika": "Erika", 'erika': 'Erika',
"janine": "Janine", 'janine': 'Janine',
"sabrina": "Sabrina", 'sabrina': 'Sabrina',
"blaine": "Blaine", 'blaine': 'Blaine',
"giovanni": "Giovanni", 'giovanni': 'Giovanni',
"falkner": "Falkner", 'falkner': 'Falkner',
"bugsy": "Bugsy", 'bugsy': 'Bugsy',
"whitney": "Whitney", 'whitney': 'Whitney',
"morty": "Morty", 'morty': 'Morty',
"chuck": "Chuck", 'chuck': 'Chuck',
"jasmine": "Jasmine", 'jasmine': 'Jasmine',
"pryce": "Pryce", 'pryce': 'Pryce',
"clair": "Clair", 'clair': 'Clair',
"roxanne": "Roxanne", 'roxanne': 'Roxanne',
"brawly": "Brawly", 'brawly': 'Brawly',
"wattson": "Wattson", 'wattson': 'Wattson',
"flannery": "Flannery", 'flannery': 'Flannery',
"norman": "Norman", 'norman': 'Norman',
"winona": "Winona", 'winona': 'Winona',
"tate": "Tate", 'tate': 'Tate',
"liza": "Liza", 'liza': 'Liza',
"juan": "Juan", 'juan': 'Juan',
"roark": "Roark", 'roark': 'Roark',
"gardenia": "Gardenia", 'gardenia': 'Gardenia',
"maylene": "Maylene", 'maylene': 'Maylene',
"crasher_wake": "Crasher Wake", 'crasher_wake': 'Crasher Wake',
"fantina": "Fantina", 'fantina': 'Fantina',
"byron": "Byron", 'byron': 'Byron',
"candice": "Candice", 'candice': 'Candice',
"volkner": "Volkner", 'volkner': 'Volkner',
"cilan": "Cilan", 'cilan': 'Cilan',
"chili": "Chili", 'chili': 'Chili',
"cress": "Cress", 'cress': 'Cress',
"cheren": "Cheren", 'cheren': 'Cheren',
"lenora": "Lenora", 'lenora': 'Lenora',
"roxie": "Roxie", 'roxie': 'Roxie',
"burgh": "Burgh", 'burgh': 'Burgh',
"elesa": "Elesa", 'elesa': 'Elesa',
"clay": "Clay", 'clay': 'Clay',
"skyla": "Skyla", 'skyla': 'Skyla',
"brycen": "Brycen", 'brycen': 'Brycen',
"drayden": "Drayden", 'drayden': 'Drayden',
"marlon": "Marlon", 'marlon': 'Marlon',
"viola": "Viola", 'viola': 'Viola',
"grant": "Grant", 'grant': 'Grant',
"korrina": "Korrina", 'korrina': 'Korrina',
"ramos": "Ramos", 'ramos': 'Ramos',
"clemont": "Clemont", 'clemont': 'Clemont',
"valerie": "Valerie", 'valerie': 'Valerie',
"olympia": "Olympia", 'olympia': 'Olympia',
"wulfric": "Wulfric", 'wulfric': 'Wulfric',
"milo": "Milo", 'milo': 'Milo',
"nessa": "Nessa", 'nessa': 'Nessa',
"kabu": "Kabu", 'kabu': 'Kabu',
"bea": "Bea", 'bea': 'Bea',
"allister": "Allister", 'allister': 'Allister',
"opal": "Opal", 'opal': 'Opal',
"bede": "Bede", 'bede': 'Bede',
"gordie": "Gordie", 'gordie': 'Gordie',
"melony": "Melony", 'melony': 'Melony',
"piers": "Piers", 'piers': 'Piers',
"marnie": "Marnie", 'marnie': 'Marnie',
"raihan": "Raihan", 'raihan': 'Raihan',
"katy": "Katy", 'katy': 'Katy',
"brassius": "Brassius", 'brassius': 'Brassius',
"iono": "Iono", 'iono': 'Iono',
"kofu": "Kofu", 'kofu': 'Kofu',
"larry": "Larry", 'larry': 'Larry',
"ryme": "Ryme", 'ryme': 'Ryme',
"tulip": "Tulip", 'tulip': 'Tulip',
"grusha": "Grusha", 'grusha': 'Grusha',
"lorelei": "Lorelei", 'lorelei': 'Lorelei',
"bruno": "Bruno", 'bruno': 'Bruno',
"agatha": "Agatha", 'agatha': 'Agatha',
"lance": "Lance", 'lance': 'Lance',
"will": "Will", 'will': 'Will',
"koga": "Koga", 'koga': 'Koga',
"karen": "Karen", 'karen': 'Karen',
"sidney": "Sidney", 'sidney': 'Sidney',
"phoebe": "Phoebe", 'phoebe': 'Phoebe',
"glacia": "Glacia", 'glacia': 'Glacia',
"drake": "Drake", 'drake': 'Drake',
"aaron": "Aaron", 'aaron': 'Aaron',
"bertha": "Bertha", 'bertha': 'Bertha',
"flint": "Flint", 'flint': 'Flint',
"lucian": "Lucian", 'lucian': 'Lucian',
"shauntal": "Shauntal", 'shauntal': 'Shauntal',
"marshal": "Marshal", 'marshal': 'Marshal',
"grimsley": "Grimsley", 'grimsley': 'Grimsley',
"caitlin": "Caitlin", 'caitlin': 'Caitlin',
"malva": "Malva", 'malva': 'Malva',
"siebold": "Siebold", 'siebold': 'Siebold',
"wikstrom": "Wikstrom", 'wikstrom': 'Wikstrom',
"drasna": "Drasna", 'drasna': 'Drasna',
"hala": "Hala", 'hala': 'Hala',
"molayne": "Molayne", 'molayne': 'Molayne',
"olivia": "Olivia", 'olivia': 'Olivia',
"acerola": "Acerola", 'acerola': 'Acerola',
"kahili": "Kahili", 'kahili': 'Kahili',
"rika": "Rika", 'rika': 'Rika',
"poppy": "Poppy", 'poppy': 'Poppy',
"hassel": "Hassel", 'hassel': 'Hassel',
"crispin": "Crispin", 'crispin': 'Crispin',
"amarys": "Amarys", 'amarys': 'Amarys',
"lacey": "Lacey", 'lacey': 'Lacey',
"drayton": "Drayton", 'drayton': 'Drayton',
"blue": "Blue", 'blue': 'Blue',
"red": "Red", 'red': 'Red',
"steven": "Steven", 'steven': 'Steven',
"wallace": "Wallace", 'wallace': 'Wallace',
"cynthia": "Cynthia", 'cynthia': 'Cynthia',
"alder": "Alder", 'alder': 'Alder',
"iris": "Iris", 'iris': 'Iris',
"diantha": "Diantha", 'diantha': 'Diantha',
"hau": "Hau", 'hau': 'Hau',
"geeta": "Geeta", 'geeta': 'Geeta',
"nemona": "Nemona", 'nemona': 'Nemona',
"kieran": "Kieran", 'kieran': 'Kieran',
"leon": "Leon", 'leon': 'Leon',
"rival": "Finn", 'rival': 'Finn',
"rival_female": "Ivy", 'rival_female': 'Ivy',
} as const; } as const;

View File

@ -1,30 +1,30 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const tutorial: SimpleTranslationEntries = { export const tutorial: SimpleTranslationEntries = {
"intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. 'intro': `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements.
$This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. $This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used.
$The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. $The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community.
$If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, $If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`,
"accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, 'accessMenu': 'To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.',
"menu": `From this menu you can access the settings. 'menu': `From this menu you can access the settings.
$From the settings you can change game speed, window style, and other options. $From the settings you can change game speed, window style, and other options.
$There are also various other features here, so be sure to check them all!`, $There are also various other features here, so be sure to check them all!`,
"starterSelect": `From this screen, you can select your starters.\nThese are your initial party members. 'starterSelect': `From this screen, you can select your starters.\nThese are your initial party members.
$Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. $Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10.
$You can also select gender, ability, and form depending on\nthe variants you've caught or hatched. $You can also select gender, ability, and form depending on\nthe variants you've caught or hatched.
$The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`, $The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`,
"pokerus": `A daily random 3 selectable starters have a purple border. 'pokerus': `A daily random 3 selectable starters have a purple border.
$If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`,
"statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. 'statChange': `Stat changes persist across battles as long as your Pokémon aren't recalled.
$Your Pokémon are recalled before a trainer battle and before entering a new biome. $Your Pokémon are recalled before a trainer battle and before entering a new biome.
$You can also view the stat changes for the Pokémon on the field by holding C or Shift.`, $You can also view the stat changes for the Pokémon on the field by holding C or Shift.`,
"selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. 'selectItem': `After every battle, you are given a choice of 3 random items.\nYou may only pick one.
$These range from consumables, to Pokémon held items, to passive permanent items. $These range from consumables, to Pokémon held items, to passive permanent items.
$Most non-consumable item effects will stack in various ways. $Most non-consumable item effects will stack in various ways.
$Some items will only show up if they can be used, such as evolution items. $Some items will only show up if they can be used, such as evolution items.
@ -33,7 +33,7 @@ export const tutorial: SimpleTranslationEntries = {
$You may purchase consumable items with money, and a larger variety will be available the further you get. $You may purchase consumable items with money, and a larger variety will be available the further you get.
$Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`, $Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`,
"eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs. 'eggGacha': `From this screen, you can redeem your vouchers for\nPokémon eggs.
$Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. $Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch.
$Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. $Hatched Pokémon also won't be added to your party, they will\nbe added to your starters.
$Pokémon hatched from eggs generally have better IVs than\nwild Pokémon. $Pokémon hatched from eggs generally have better IVs than\nwild Pokémon.

View File

@ -1,11 +1,11 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const voucher: SimpleTranslationEntries = { export const voucher: SimpleTranslationEntries = {
"vouchers": "Vouchers", 'vouchers': 'Vouchers',
"eggVoucher": "Egg Voucher", 'eggVoucher': 'Egg Voucher',
"eggVoucherPlus": "Egg Voucher Plus", 'eggVoucherPlus': 'Egg Voucher Plus',
"eggVoucherPremium": "Egg Voucher Premium", 'eggVoucherPremium': 'Egg Voucher Premium',
"eggVoucherGold": "Egg Voucher Gold", 'eggVoucherGold': 'Egg Voucher Gold',
"locked": "Locked", 'locked': 'Locked',
"defeatTrainer": "Defeat {{trainerName}}" 'defeatTrainer': 'Defeat {{trainerName}}'
} as const; } as const;

View File

@ -1,44 +1,44 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
/** /**
* The weather namespace holds text displayed when weather is active during a battle * The weather namespace holds text displayed when weather is active during a battle
*/ */
export const weather: SimpleTranslationEntries = { export const weather: SimpleTranslationEntries = {
"sunnyStartMessage": "The sunlight got bright!", 'sunnyStartMessage': 'The sunlight got bright!',
"sunnyLapseMessage": "The sunlight is strong.", 'sunnyLapseMessage': 'The sunlight is strong.',
"sunnyClearMessage": "The sunlight faded.", 'sunnyClearMessage': 'The sunlight faded.',
"rainStartMessage": "A downpour started!", 'rainStartMessage': 'A downpour started!',
"rainLapseMessage": "The downpour continues.", 'rainLapseMessage': 'The downpour continues.',
"rainClearMessage": "The rain stopped.", 'rainClearMessage': 'The rain stopped.',
"sandstormStartMessage": "A sandstorm brewed!", 'sandstormStartMessage': 'A sandstorm brewed!',
"sandstormLapseMessage": "The sandstorm rages.", 'sandstormLapseMessage': 'The sandstorm rages.',
"sandstormClearMessage": "The sandstorm subsided.", 'sandstormClearMessage': 'The sandstorm subsided.',
"sandstormDamageMessage": "{{pokemonPrefix}}{{pokemonName}} is buffeted\nby the sandstorm!", 'sandstormDamageMessage': '{{pokemonPrefix}}{{pokemonName}} is buffeted\nby the sandstorm!',
"hailStartMessage": "It started to hail!", 'hailStartMessage': 'It started to hail!',
"hailLapseMessage": "Hail continues to fall.", 'hailLapseMessage': 'Hail continues to fall.',
"hailClearMessage": "The hail stopped.", 'hailClearMessage': 'The hail stopped.',
"hailDamageMessage": "{{pokemonPrefix}}{{pokemonName}} is pelted\nby the hail!", 'hailDamageMessage': '{{pokemonPrefix}}{{pokemonName}} is pelted\nby the hail!',
"snowStartMessage": "It started to snow!", 'snowStartMessage': 'It started to snow!',
"snowLapseMessage": "The snow is falling down.", 'snowLapseMessage': 'The snow is falling down.',
"snowClearMessage": "The snow stopped.", 'snowClearMessage': 'The snow stopped.',
"fogStartMessage": "A thick fog emerged!", 'fogStartMessage': 'A thick fog emerged!',
"fogLapseMessage": "The fog continues.", 'fogLapseMessage': 'The fog continues.',
"fogClearMessage": "The fog disappeared.", 'fogClearMessage': 'The fog disappeared.',
"heavyRainStartMessage": "A heavy downpour started!", 'heavyRainStartMessage': 'A heavy downpour started!',
"heavyRainLapseMessage": "The heavy downpour continues.", 'heavyRainLapseMessage': 'The heavy downpour continues.',
"heavyRainClearMessage": "The heavy rain stopped.", 'heavyRainClearMessage': 'The heavy rain stopped.',
"harshSunStartMessage": "The sunlight got hot!", 'harshSunStartMessage': 'The sunlight got hot!',
"harshSunLapseMessage": "The sun is scorching hot.", 'harshSunLapseMessage': 'The sun is scorching hot.',
"harshSunClearMessage": "The harsh sunlight faded.", 'harshSunClearMessage': 'The harsh sunlight faded.',
"strongWindsStartMessage": "A heavy wind began!", 'strongWindsStartMessage': 'A heavy wind began!',
"strongWindsLapseMessage": "The wind blows intensely.", 'strongWindsLapseMessage': 'The wind blows intensely.',
"strongWindsClearMessage": "The heavy wind stopped." 'strongWindsClearMessage': 'The heavy wind stopped.'
} };

View File

@ -1,6 +1,6 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const abilityTriggers: SimpleTranslationEntries = { export const abilityTriggers: SimpleTranslationEntries = {
'blockRecoilDamage' : `{{pokemonName}}'s {{abilityName}}\nprotected it from recoil!`, 'blockRecoilDamage' : '{{pokemonName}}\'s {{abilityName}}\nprotected it from recoil!',
'badDreams': `{{pokemonName}} Está atormentado!` 'badDreams': '{{pokemonName}} Está atormentado!'
} as const; } as const;

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const battleMessageUiHandler: SimpleTranslationEntries = { export const battleMessageUiHandler: SimpleTranslationEntries = {
"ivBest": "Best", 'ivBest': 'Best',
"ivFantastic": "Fantastic", 'ivFantastic': 'Fantastic',
"ivVeryGood": "Very Good", 'ivVeryGood': 'Very Good',
"ivPrettyGood": "Pretty Good", 'ivPrettyGood': 'Pretty Good',
"ivDecent": "Decent", 'ivDecent': 'Decent',
"ivNoGood": "No Good", 'ivNoGood': 'No Good',
} as const; } as const;

View File

@ -1,56 +1,56 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from '#app/plugins/i18n';
export const battle: SimpleTranslationEntries = { export const battle: SimpleTranslationEntries = {
"bossAppeared": "¡{{bossName}} te corta el paso!", 'bossAppeared': '¡{{bossName}} te corta el paso!',
"trainerAppeared": "¡{{trainerName}}\nte desafía!", 'trainerAppeared': '¡{{trainerName}}\nte desafía!',
"trainerAppearedDouble": "{{trainerName}}\nwould like to battle!", 'trainerAppearedDouble': '{{trainerName}}\nwould like to battle!',
"singleWildAppeared": "¡Un {{pokemonName}} salvaje te corta el paso!", 'singleWildAppeared': '¡Un {{pokemonName}} salvaje te corta el paso!',
"multiWildAppeared": "¡Un {{pokemonName1}} y un {{pokemonName2}} salvajes\nte cortan el paso!", 'multiWildAppeared': '¡Un {{pokemonName1}} y un {{pokemonName2}} salvajes\nte cortan el paso!',
"playerComeBack": "¡{{pokemonName}}, ven aquí!", 'playerComeBack': '¡{{pokemonName}}, ven aquí!',
"trainerComeBack": "¡{{trainerName}} retira a {{pokemonName}} del combate!", 'trainerComeBack': '¡{{trainerName}} retira a {{pokemonName}} del combate!',
"playerGo": "¡Adelante, {{pokemonName}}!", 'playerGo': '¡Adelante, {{pokemonName}}!',
"trainerGo": "¡{{trainerName}} saca a {{pokemonName}}!", 'trainerGo': '¡{{trainerName}} saca a {{pokemonName}}!',
"switchQuestion": "¿Quieres cambiar a\n{{pokemonName}}?", 'switchQuestion': '¿Quieres cambiar a\n{{pokemonName}}?',
"trainerDefeated": "¡Has derrotado a\n{{trainerName}}!", 'trainerDefeated': '¡Has derrotado a\n{{trainerName}}!',
"pokemonCaught": "¡{{pokemonName}} atrapado!", 'pokemonCaught': '¡{{pokemonName}} atrapado!',
"pokemon": "Pokémon", 'pokemon': 'Pokémon',
"sendOutPokemon": "¡Adelante, {{pokemonName}}!", 'sendOutPokemon': '¡Adelante, {{pokemonName}}!',
"hitResultCriticalHit": "!Un golpe crítico!", 'hitResultCriticalHit': '!Un golpe crítico!',
"hitResultSuperEffective": "!Es supereficaz!", 'hitResultSuperEffective': '!Es supereficaz!',
"hitResultNotVeryEffective": "No es muy eficaz…", 'hitResultNotVeryEffective': 'No es muy eficaz…',
"hitResultNoEffect": "No afecta a {{pokemonName}}!", 'hitResultNoEffect': 'No afecta a {{pokemonName}}!',
"hitResultOneHitKO": "!KO en 1 golpe!", 'hitResultOneHitKO': '!KO en 1 golpe!',
"attackFailed": "¡Pero ha fallado!", 'attackFailed': '¡Pero ha fallado!',
"attackHitsCount": `N.º de golpes: {{count}}.`, 'attackHitsCount': 'N.º de golpes: {{count}}.',
"expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.", 'expGain': '{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.',
"levelUp": "¡{{pokemonName}} ha subido al \nNv. {{level}}!", 'levelUp': '¡{{pokemonName}} ha subido al \nNv. {{level}}!',
"learnMove": "¡{{pokemonName}} ha aprendido {{moveName}}!", 'learnMove': '¡{{pokemonName}} ha aprendido {{moveName}}!',
"learnMovePrompt": "{{pokemonName}} quiere aprender\n{{moveName}}.", 'learnMovePrompt': '{{pokemonName}} quiere aprender\n{{moveName}}.',
"learnMoveLimitReached": "Pero, {{pokemonName}} ya conoce\ncuatro movimientos.", 'learnMoveLimitReached': 'Pero, {{pokemonName}} ya conoce\ncuatro movimientos.',
"learnMoveReplaceQuestion": "¿Quieres sustituir uno de sus movimientos por {{moveName}}?", 'learnMoveReplaceQuestion': '¿Quieres sustituir uno de sus movimientos por {{moveName}}?',
"learnMoveStopTeaching": "¿Prefieres que no aprenda\n{{moveName}}?", 'learnMoveStopTeaching': '¿Prefieres que no aprenda\n{{moveName}}?',
"learnMoveNotLearned": "{{pokemonName}} no ha aprendido {{moveName}}.", 'learnMoveNotLearned': '{{pokemonName}} no ha aprendido {{moveName}}.',
"learnMoveForgetQuestion": "¿Qué movimiento quieres que olvide?", 'learnMoveForgetQuestion': '¿Qué movimiento quieres que olvide?',
"learnMoveForgetSuccess": "{{pokemonName}} ha olvidado cómo utilizar {{moveName}}.", 'learnMoveForgetSuccess': '{{pokemonName}} ha olvidado cómo utilizar {{moveName}}.',
"countdownPoof": "@d{32}1, @d{15}2, @d{15}y@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}¡Puf!", 'countdownPoof': '@d{32}1, @d{15}2, @d{15}y@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}¡Puf!',
"learnMoveAnd": "Y…", 'learnMoveAnd': 'Y…',
"levelCapUp": "¡Se ha incrementado el\nnivel máximo a {{levelCap}}!", 'levelCapUp': '¡Se ha incrementado el\nnivel máximo a {{levelCap}}!',
"moveNotImplemented": "{{moveName}} aún no está implementado y no se puede seleccionar.", 'moveNotImplemented': '{{moveName}} aún no está implementado y no se puede seleccionar.',
"moveNoPP": "There's no PP left for\nthis move!", 'moveNoPP': 'There\'s no PP left for\nthis move!',
"moveDisabled": "!No puede usar {{moveName}} porque ha sido anulado!", 'moveDisabled': '!No puede usar {{moveName}} porque ha sido anulado!',
"noPokeballForce": "Una fuerza misteriosa\nte impide usar Poké Balls.", 'noPokeballForce': 'Una fuerza misteriosa\nte impide usar Poké Balls.',
"noPokeballTrainer": "¡No puedes atrapar a los\nPokémon de los demás!", 'noPokeballTrainer': '¡No puedes atrapar a los\nPokémon de los demás!',
"noPokeballMulti": "¡No se pueden lanzar Poké Balls\ncuando hay más de un Pokémon!", 'noPokeballMulti': '¡No se pueden lanzar Poké Balls\ncuando hay más de un Pokémon!',
"noPokeballStrong": "¡Este Pokémon es demasiado fuerte para ser capturado!\nNecesitas bajarle los PS primero!", 'noPokeballStrong': '¡Este Pokémon es demasiado fuerte para ser capturado!\nNecesitas bajarle los PS primero!',
"noEscapeForce": "Una fuerza misteriosa\nte impide huir.", 'noEscapeForce': 'Una fuerza misteriosa\nte impide huir.',
"noEscapeTrainer": "¡No puedes huir de los\ncombates contra Entrenadores!", 'noEscapeTrainer': '¡No puedes huir de los\ncombates contra Entrenadores!',
"noEscapePokemon": "¡El movimiento {{moveName}} de {{pokemonName}} impide la huida!", 'noEscapePokemon': '¡El movimiento {{moveName}} de {{pokemonName}} impide la huida!',
"runAwaySuccess": "¡Escapas sin problemas!", 'runAwaySuccess': '¡Escapas sin problemas!',
"runAwayCannotEscape": "¡No has podido escapar!", 'runAwayCannotEscape': '¡No has podido escapar!',
"escapeVerbSwitch": "cambiar", 'escapeVerbSwitch': 'cambiar',
"escapeVerbFlee": "huir", 'escapeVerbFlee': 'huir',
"notDisabled": "¡El movimiento {{moveName}} de {{pokemonName}}\nya no está anulado!", 'notDisabled': '¡El movimiento {{moveName}} de {{pokemonName}}\nya no está anulado!',
"skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?", 'skipItemQuestion': '¿Estás seguro de que no quieres coger un objeto?',
"eggHatching": "¿Y esto?", 'eggHatching': '¿Y esto?',
"ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?" 'ivScannerUseQuestion': '¿Quieres usar el Escáner de IVs en {{pokemonName}}?'
} as const; } as const;

Some files were not shown because too many files have changed in this diff Show More