Revert "first round with eslint --fix ."

This reverts commit 77a88e0895.
This commit is contained in:
Greenlamp 2024-05-22 01:19:21 +02:00
parent 7633b4e353
commit 164f2920bc
308 changed files with 53952 additions and 53952 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;
const variant = atlasPath.includes('variant/') || /_[0-3]$/.test(atlasPath); let 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 = [];
const loadPokemonAssets = []; let 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 (const p of this.getParty()) for (let p of this.getParty())
p.destroy(); p.destroy();
this.party = []; this.party = [];
for (const p of this.getEnemyParty()) for (let 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 (const item of localizable) for (let 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 {
const newWaveIndex = waveIndex || ((this.currentBattle?.waveIndex || (startingWave - 1)) + 1); let 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 (const pokemon of this.getParty()) { for (let 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 (const biome of biomes) { for (let 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 (const biome of biomes) { for (let 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 (const sound of this.sound.getAllPlaying()) for (let 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 (const rm of modifiersToRemove) for (let 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 (const p in this.party) { for (let 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 (const rm of modifiersToRemove) for (let 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 (const m of modifiersToRemove) for (let 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 (const modifier of modifiers) for (let 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 (const m of modifiersToRemove) for (let 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 (const m of modifiersToRemove) for (let 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 (const modifier of modifiers) { for (let 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 (const modifier of modifiersClone) { for (let 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 (const modifier of modifiers) { for (let 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 (const modifier of modifiers) { for (let 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 (const achv of filteredAchvs) for (let 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 {
const levelWaveIndex = this.gameMode.getWaveForDifficulty(this.waveIndex); let levelWaveIndex = this.gameMode.getWaveForDifficulty(this.waveIndex);
const baseLevel = 1 + levelWaveIndex / 2 + Math.pow(levelWaveIndex / 25, 2); let 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 (const p of scene.getEnemyParty()) { for (let 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 (const pokemon of battlers) { for (let 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 (const trainerPoolEntry of trainerPool) { for (let 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 (const opponent of pokemon.getOpponents()) for (let 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 (const statChangePhase of statChangePhases) { for (let 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) {
const otherPokemon = pokemon.getAlly() ? pokemon.getOpponents().concat([ pokemon.getAlly() ]) : pokemon.getOpponents(); let otherPokemon = pokemon.getAlly() ? pokemon.getOpponents().concat([ pokemon.getAlly() ]) : pokemon.getOpponents();
for (const other of otherPokemon) { for (let 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 (const opponent of pokemon.getOpponents()) { for (let 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 (const opponent of pokemon.getOpponents()) { for (let 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 (const opponent of pokemon.getOpponents()) { for (let opponent of pokemon.getOpponents()) {
for (const move of opponent.moveset) { for (let 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 (const opponent of pokemon.getOpponents()) { for (let opponent of pokemon.getOpponents()) {
for (const move of opponent.moveset) { for (let 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 (const opponent of pokemon.getOpponents()) { for (let 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 {
const selectableStats = [BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD]; let selectableStats = [BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD];
const increaseStatArray = selectableStats.filter(s => pokemon.summonData.battleStats[s] < 6); let 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) {
const increaseStat = increaseStatArray[Utils.randInt(increaseStatArray.length)]; let 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) {
const decreaseStat = selectableStats[Utils.randInt(selectableStats.length)]; let 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(const opp of pokemon.getOpponents()) { for(let 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 {
const lastUsed = pokemon.scene.currentBattle.lastUsedPokeball; let 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[] = [];
const offset = 0; let offset = 0;
const pokemonResponse = await api.pokemon.listPokemons(offset, 2000); let 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 (const p of pokemonArr) { for (let 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;
const shortFormName = formName.indexOf('-') > -1 let 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 (const stat of pokemon.stats) { for (let 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 (const version of versions) { for (let 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 (const stat of pokemon.stats) { for (let 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 (const version of versions) { for (let 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 (const f of pokemon.forms) { for (let 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 (const moveId of speciesTmMoves) { for (let 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 (const pokemonSpecies of pokemonSpeciesList) { for (let 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 (const form of pokemonSpecies.forms) for (let 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 (const species of Object.keys(speciesLevelMoves)) { for (let 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 (const lm of orderedLevelMoves) for (let lm of orderedLevelMoves)
speciesLevelMovesStr += ` [ ${lm[0]}, Moves.${Moves[lm[1]]} ],\n`; speciesLevelMovesStr += ` [ ${lm[0]}, Moves.${Moves[lm[1]]} ],\n`;
speciesLevelMovesStr += ' ],\n'; speciesLevelMovesStr += ` ],\n`;
} }
for (const species of Object.keys(speciesFormLevelMoves)) { for (let species of Object.keys(speciesFormLevelMoves)) {
speciesFormLevelMovesStr += ` [Species.${species}]: {\n`; speciesFormLevelMovesStr += ` [Species.${species}]: {\n`;
for (const f of Object.keys(speciesFormLevelMoves[species])) { for (let 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 (const lm of orderedLevelMoves) for (let 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 (const moveId of Object.keys(moveTmSpecies)) { for (let moveId of Object.keys(moveTmSpecies)) {
tmSpeciesStr += ` [Moves.${Moves[parseInt(moveId)]}]: [\n`; tmSpeciesStr += ` [Moves.${Moves[parseInt(moveId)]}]: [\n`;
for (const species of moveTmSpecies[moveId]) { for (let 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 (const form of forms) for (let 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[] = [];
const offset = 0; let offset = 0;
const abilitiesResponse = await api.pokemon.listAbilities(offset, 2000); let abilitiesResponse = await api.pokemon.listAbilities(offset, 2000);
abilities = abilitiesResponse.results; abilities = abilitiesResponse.results;
for (const a of abilities) { for (let 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 (const version of versions) { for (let 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[] = [];
const offset = 0; let offset = 0;
const movesResponse = await api.move.listMoves(offset, 2000); let movesResponse = await api.move.listMoves(offset, 2000);
moves = movesResponse.results; moves = movesResponse.results;
console.log(moves); console.log(moves);
for (const m of moves) { for (let 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 (const version of versions) { for (let 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 (const moveId of moveIds) { for (let moveId of moveIds) {
const move = await api.move.getMoveById(moveId); const move = await api.move.getMoveById(moveId);
moveTmSpecies[moveId] = []; moveTmSpecies[moveId] = [];
for (const species of move.learned_by_pokemon) { for (let species of move.learned_by_pokemon) {
const dexIdMatch = /\/(\d+)\//.exec(species.url); const dexIdMatch = /\/(\d+)\//.exec(species.url);
if (!dexIdMatch) if (!dexIdMatch)
continue; continue;
const dexId = parseInt(dexIdMatch[1]); let 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 (const moveId of Object.keys(moveTmSpecies)) { for (let moveId of Object.keys(moveTmSpecies)) {
tmSpeciesStr += ` [Moves.${Moves[parseInt(moveId)]}]: [\n`; tmSpeciesStr += ` [Moves.${Moves[parseInt(moveId)]}]: [\n`;
for (const species of moveTmSpecies[moveId]) { for (let 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 (const form of forms) for (let 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 (const fte of Object.keys(frameTimedEvents)) { for (let fte of Object.keys(frameTimedEvents)) {
const timedEvents: AnimTimedEvent[] = []; const timedEvents: AnimTimedEvent[] = [];
for (const te of frameTimedEvents[fte]) { for (let 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 (const ftes of this.frameTimedEvents.values()) { for (let ftes of this.frameTimedEvents.values()) {
for (const fte of ftes) { for (let 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 (const ftes of this.frameTimedEvents.values()) { for (let ftes of this.frameTimedEvents.values()) {
for (const fte of ftes) { for (let 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 {
const loadedCheckTimer = setInterval(() => { let 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 {
const loadedCheckTimer = setInterval(() => { let 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 (const moveId of moveIds) { for (let 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 (const a of anims) { for (let a of anims) {
if (!a.frames?.length) if (!a.frames?.length)
continue; continue;
const animSounds = a.getSoundResourceNames(); const animSounds = a.getSoundResourceNames();
for (const ms of animSounds) for (let ms of animSounds)
sounds.add(ms); sounds.add(ms);
const animBackgrounds = a.getBackgroundResourceNames(); const animBackgrounds = a.getBackgroundResourceNames();
for (const abg of animBackgrounds) for (let 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 (const bg of backgrounds) for (let bg of backgrounds)
scene.loadImage(bg, 'battle_anims'); scene.loadImage(bg, 'battle_anims');
for (const s of sounds) for (let 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 (const frame of frames) { for (let 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);
const scaleY = (frame.zoomY / 100); let 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 (const ms of Object.values(spriteCache).flat()) { for (let 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 (const frame of spriteFrames) { for (let 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) {
const newSprite: Phaser.GameObjects.Sprite = scene.addFieldSprite(0, 0, anim.graphic, 1); let 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 (const event of anim.frameTimedEvents.get(f)) for (let 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 (const i of targets) { for (let 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 (const rs of spritesToRemove) { for (let 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 (const ms of Object.values(spriteCache).flat()) { for (let 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 (const move of Utils.getEnumValues(Moves).slice(1)) { for (let 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;
const anim = commonAnimId || chargeAnimId ? new AnimConfig() : new AnimConfig(); let 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[];
const p = 0; let p = 0;
for (let p = 0; p < propSets.length; p++) { for (let p = 0; p < propSets.length; p++) {
props = propSets[p]; props = propSets[p];
const ai = props.indexOf(a.key); let ai = props.indexOf(a.key);
if (ai === -1) if (ai === -1)
continue; continue;
const bi = props.indexOf(b.key); let 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 (const linkedBiomeEntry of linkedBiomes) { for (let 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 (const biome of Utils.getEnumValues(Biome)) { for (let biome of Utils.getEnumValues(Biome)) {
biomePokemonPools[biome] = {}; biomePokemonPools[biome] = {};
biomeTrainerPools[biome] = {}; biomeTrainerPools[biome] = {};
for (const tier of Utils.getEnumValues(BiomePoolTier)) { for (let tier of Utils.getEnumValues(BiomePoolTier)) {
biomePokemonPools[biome][tier] = {}; biomePokemonPools[biome][tier] = {};
biomeTrainerPools[biome][tier] = []; biomeTrainerPools[biome][tier] = [];
for (const tod of Utils.getEnumValues(TimeOfDay)) for (let tod of Utils.getEnumValues(TimeOfDay))
biomePokemonPools[biome][tier][tod] = []; biomePokemonPools[biome][tier][tod] = [];
} }
} }
for (const pb of pokemonBiomes) { for (let 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 (const b of biomeEntries) { for (let 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 (const tod of timesOfDay) { for (let 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 (const b of Object.keys(biomePokemonPools)) { for (let b of Object.keys(biomePokemonPools)) {
for (const t of Object.keys(biomePokemonPools[b])) { for (let t of Object.keys(biomePokemonPools[b])) {
const tier = parseInt(t) as BiomePoolTier; const tier = parseInt(t) as BiomePoolTier;
for (const tod of Object.keys(biomePokemonPools[b][t])) { for (let 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 (const tb of trainerBiomes) { for (let 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 (const b of biomeEntries) { for (let 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 (const b of Object.keys(biomePokemonPools)) { for (let b of Object.keys(biomePokemonPools)) {
const biome = Biome[b]; const biome = Biome[b];
pokemonOutput[biome] = {}; pokemonOutput[biome] = {};
trainerOutput[biome] = {}; trainerOutput[biome] = {};
for (const t of Object.keys(biomePokemonPools[b])) { for (let t of Object.keys(biomePokemonPools[b])) {
const tier = BiomePoolTier[t]; const tier = BiomePoolTier[t];
pokemonOutput[biome][tier] = {}; pokemonOutput[biome][tier] = {};
for (const tod of Object.keys(biomePokemonPools[b][t])) { for (let tod of Object.keys(biomePokemonPools[b][t])) {
const timeOfDay = TimeOfDay[tod]; const timeOfDay = TimeOfDay[tod];
pokemonOutput[biome][tier][timeOfDay] = []; pokemonOutput[biome][tier][timeOfDay] = [];
for (const f of biomePokemonPools[b][t][tod]) { for (let 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 (const l of Object.keys(f)) { for (let 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 (const t of Object.keys(biomeTrainerPools[b])) { for (let t of Object.keys(biomeTrainerPools[b])) {
const tier = BiomePoolTier[t]; const tier = BiomePoolTier[t];
trainerOutput[biome][tier] = []; trainerOutput[biome][tier] = [];
for (const f of biomeTrainerPools[b][t]) for (let 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)];
const eggMoves: Moves[] = []; let 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 (const condition of this.conditions) { for (let 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 (const attr of this.attrs) { for (let attr of this.attrs) {
const failedText = attr.getFailedText(user, target, move, cancelled); let 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 (const attr of this.attrs) for (let attr of this.attrs)
score += attr.getUserBenefitScore(user, target, move); score += attr.getUserBenefitScore(user, target, move);
for (const condition of this.conditions) for (let 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 (const attr of this.attrs) for (let 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 {
const score = ((1 - (this.selfTarget ? user : target).getHpRatio()) * 20) - this.healRatio * 10; let 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)) {
const statusAfflictResult = target.trySetStatus(statusToApply, true, user); var 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();
@ -1489,7 +1489,7 @@ export class EatBerryAttr extends MoveEffectAttr {
super(true, MoveEffectTrigger.HIT); super(true, MoveEffectTrigger.HIT);
this.chosenBerry = undefined; this.chosenBerry = undefined;
} }
/** /**
* Causes the target to eat a berry. * Causes the target to eat a berry.
* @param user {@linkcode Pokemon} Pokemon that used the move * @param user {@linkcode Pokemon} Pokemon that used the move
* @param target {@linkcode Pokemon} Pokemon that will eat a berry * @param target {@linkcode Pokemon} Pokemon that will eat a berry
@ -1517,7 +1517,7 @@ export class EatBerryAttr extends MoveEffectAttr {
if (!--this.chosenBerry.stackCount) if (!--this.chosenBerry.stackCount)
target.scene.removeModifier(this.chosenBerry, !target.isPlayer()); target.scene.removeModifier(this.chosenBerry, !target.isPlayer());
target.scene.updateModifiers(target.isPlayer()); target.scene.updateModifiers(target.isPlayer());
} }
this.chosenBerry = undefined; this.chosenBerry = undefined;
return true; return true;
@ -1537,7 +1537,7 @@ export class StealEatBerryAttr extends EatBerryAttr {
constructor() { constructor() {
super(); super();
} }
/** /**
* User steals a random berry from the target and then eats it. * User steals a random berry from the target and then eats it.
* @param {Pokemon} user Pokemon that used the move and will eat the stolen berry * @param {Pokemon} user Pokemon that used the move and will eat the stolen berry
* @param {Pokemon} target Pokemon that will have its berry stolen * @param {Pokemon} target Pokemon that will have its berry stolen
@ -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;
const moveLevels = this.getLevels(user); let moveLevels = this.getLevels(user);
for (const stat of this.stats) { for (let 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) {
const boostStat = [randStats[Utils.randInt(randStats.length)]]; let 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;
const ppUsed = user.moveset.find((m) => m.moveId === move.id).ppUsed; let 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(() => {
const rand = Utils.randSeedInt(100); let 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;
} }
const curseRecoilDamage = Math.max(1, Math.floor(user.getMaxHp() / 2)); let 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 (const tagType of this.tagTypes) for (let 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 (const tagType of this.tagTypes) for (let 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 => {
let moveId; var 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 (const attr of moveAttrs) { for (let 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 (const stat of stats) { for (let 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;
const yd = y2 - y1; let 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 (const ev of evolutions) { for (let 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 (const condition of this.conditions) { for (let 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;
const trigger = this.trigger; let 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 (const trigger of this.triggers) { for (let 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];
const newFormChanges: SpeciesFormChange[] = []; let newFormChanges: SpeciesFormChange[] = [];
for (const fc of formChanges) { for (let 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 (const template of this.templates) { for (let 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 (const template of this.templates) { for (let 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 (const template of this.templates) { for (let 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 {
const ret = this.name; let 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 (const table of tables) { for (let 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 (const row of trainerRows) { for (let 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 (const pokemon of field) { for (let 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 (const weather of weatherPool) { for (let 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;
const speed = 3 - Utils.randInt(8); let speed = 3 - Utils.randInt(8);
const amp = 24 + Utils.randInt(32); let 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 ];
const speciesPool = Object.keys(speciesStarters) let 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 (const speciesId of speciesPool) { for (let 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 (const lm of levelMoves) for (let 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;
const speed = 3 - Utils.randInt(8); let speed = 3 - Utils.randInt(8);
const amp = 48 + Utils.randInt(64); let 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) {
const particles: Phaser.GameObjects.Image[] = []; let 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 (const particle of particles) for (let particle of particles)
particle.destroy(); particle.destroy();
} }
}); });
} }
function doMbOpenParticles(scene: BattleScene, x: number, y: number) { function doMbOpenParticles(scene: BattleScene, x: number, y: number) {
const particles: Phaser.GameObjects.Image[] = []; let 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 (const particle of particles) for (let 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 (const tier of Object.keys(biomePokemonPools[this.biomeType])) for (let 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 (const s of this.sprites.values()) { for (let 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 (const s of sprites) { for (let 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 (const s of sprites) { for (let s of sprites) {
this.sprites.delete(s); this.sprites.delete(s);
} }
} }
removeAll(): void { removeAll(): void {
for (const s of this.sprites.values()) for (let 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();
const relX = newOffset[0] - initialOffset[0]; let relX = newOffset[0] - initialOffset[0];
const relY = newOffset[1] - initialOffset[1]; let 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 (const s of stats) { for (let s of stats) {
const isHp = s === Stat.HP; const isHp = s === Stat.HP;
const baseStat = baseStats[s]; let 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 (const e of evolutions) { for (let 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 (const fe of fusionEvolutions) { for (let 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 (const elm of evolutionLevelMoves.reverse()) for (let 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 (const lm of levelMoves) { for (let 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;
const shinyThreshold = new Utils.IntegerHolder(32); let 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 (const tm of tms) { for (let tm of tms) {
const moveId = parseInt(tm) as Moves; const moveId = parseInt(tm) as Moves;
let compatible = false; let compatible = false;
for (const p of tmSpecies[tm]) { for (let 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();
const damage = new Utils.NumberHolder(0); let 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 {
const typeBoost = source.findTag(t => t instanceof TypeBoostTag && (t as TypeBoostTag).boostedType === type) as TypeBoostTag; let 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);
const stabMultiplier = new Utils.NumberHolder(1); let 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 (const tag of tagsToRemove) { for (let 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 (const stat of battleStats) for (let stat of battleStats)
this.summonData.battleStats[stat] = source.summonData.battleStats[stat]; this.summonData.battleStats[stat] = source.summonData.battleStats[stat];
for (const tag of source.summonData.tags) for (let 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;
const cry = this.scene.playSound(key, { rate: rate }) as AnySound; let 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
const poisonImmunity = types.map(defType => { let 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 (const k of Object.keys(this.summonData)) { for (let 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];
const variantColorSet = new Map<integer, integer[]>(); let 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];
const variantColorSet = new Map<integer, integer[]>(); let 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));
const color = keyColor.slice(0); let color = keyColor.slice(0);
let count = paletteColors.get(key); let count = paletteColors.get(key);
for (const value of values) { for (let 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 (const value of values) { for (let 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);
const color = [ 0, 0, 0, fusionSpriteColors[sc][3] ]; let 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 (const tm of tms) { for (let tm of tms) {
const moveId = parseInt(tm) as Moves; const moveId = parseInt(tm) as Moves;
let compatible = false; let compatible = false;
for (const p of tmSpecies[tm]) { for (let 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 (const sd of starterData) for (let 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 (const modifier of fusedPartyMemberHeldModifiers) for (let 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[] {
const newMoveset = []; let 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 (const m in movePool) { for (let 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];
const targetScores: integer[] = []; let targetScores: integer[] = [];
for (const mt of moveTargets[move.id]) { for (let 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);
} }
const ret = super.damage(damage, ignoreSegments, preventEndure); let 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 (const bs of battleStats) { for (let 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 (const bs of battleStats) { for (let 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()) {
const amountRatio = amount / this.getMaxHp(); let amountRatio = amount / this.getMaxHp();
const segmentBypassCount = Math.floor(amountRatio / (1 / this.bossSegments)); let 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);
const baseLevel = 1 + difficultyWaveIndex / 2 + Math.pow(difficultyWaveIndex / 25, 2); let 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 (const innerTemplate of template.templates) { for (let 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 (const playerPokemon of playerField) { for (let 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 {
const gamepadID = thisGamepad.id.toLowerCase(); let 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 (const k of keyConfig[b]) for (let 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 (const wv of Utils.getEnumValues(WindowVariant)) { for (let 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