first round with eslint --fix .

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

View File

@ -1,5 +1,5 @@
import { bypassLogin } from "./battle-scene"; import { bypassLogin } from './battle-scene';
import * as Utils from "./utils"; import * as Utils from './utils';
export interface UserInfo { export interface UserInfo {
username: string; username: string;
@ -46,4 +46,4 @@ export function updateUserInfo(): Promise<[boolean, integer]> {
resolve([ false, 500 ]); resolve([ false, 500 ]);
}); });
}); });
} }

File diff suppressed because it is too large Load Diff

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,270 +34,270 @@ 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
} }
export default class Battle { export default class Battle {
protected gameMode: GameMode; protected gameMode: GameMode;
public waveIndex: integer; public waveIndex: integer;
public battleType: BattleType; public battleType: BattleType;
public battleSpec: BattleSpec; public battleSpec: BattleSpec;
public trainer: Trainer; public trainer: Trainer;
public enemyLevels: integer[]; public enemyLevels: integer[];
public enemyParty: EnemyPokemon[]; public enemyParty: EnemyPokemon[];
public seenEnemyPartyMemberIds: Set<integer>; public seenEnemyPartyMemberIds: Set<integer>;
public double: boolean; public double: boolean;
public started: boolean; public started: boolean;
public enemySwitchCounter: integer; public enemySwitchCounter: integer;
public turn: integer; public turn: integer;
public turnCommands: TurnCommands; public turnCommands: TurnCommands;
public playerParticipantIds: Set<integer>; public playerParticipantIds: Set<integer>;
public battleScore: integer; public battleScore: integer;
public postBattleLoot: PokemonHeldItemModifier[]; public postBattleLoot: PokemonHeldItemModifier[];
public escapeAttempts: integer; public escapeAttempts: integer;
public lastMove: Moves; public lastMove: Moves;
public battleSeed: string; public battleSeed: string;
private battleSeedState: string; private battleSeedState: string;
public moneyScattered: number; public moneyScattered: number;
public lastUsedPokeball: PokeballType; public lastUsedPokeball: PokeballType;
private rngCounter: integer = 0; private rngCounter: integer = 0;
constructor(gameMode: GameMode, waveIndex: integer, battleType: BattleType, trainer: Trainer, double: boolean) { constructor(gameMode: GameMode, waveIndex: integer, battleType: BattleType, trainer: Trainer, double: boolean) {
this.gameMode = gameMode; this.gameMode = gameMode;
this.waveIndex = waveIndex; this.waveIndex = waveIndex;
this.battleType = battleType; this.battleType = battleType;
this.trainer = trainer; this.trainer = trainer;
this.initBattleSpec(); this.initBattleSpec();
this.enemyLevels = battleType !== BattleType.TRAINER this.enemyLevels = battleType !== BattleType.TRAINER
? new Array(double ? 2 : 1).fill(null).map(() => this.getLevelForWave()) ? new Array(double ? 2 : 1).fill(null).map(() => this.getLevelForWave())
: trainer.getPartyLevels(this.waveIndex); : trainer.getPartyLevels(this.waveIndex);
this.enemyParty = []; this.enemyParty = [];
this.seenEnemyPartyMemberIds = new Set<integer>(); this.seenEnemyPartyMemberIds = new Set<integer>();
this.double = double; this.double = double;
this.enemySwitchCounter = 0; this.enemySwitchCounter = 0;
this.turn = 0; this.turn = 0;
this.playerParticipantIds = new Set<integer>(); this.playerParticipantIds = new Set<integer>();
this.battleScore = 0; this.battleScore = 0;
this.postBattleLoot = []; this.postBattleLoot = [];
this.escapeAttempts = 0; this.escapeAttempts = 0;
this.started = false; this.started = false;
this.battleSeed = Utils.randomString(16, true); this.battleSeed = Utils.randomString(16, true);
this.battleSeedState = null; this.battleSeedState = null;
this.moneyScattered = 0; this.moneyScattered = 0;
this.lastUsedPokeball = null; this.lastUsedPokeball = null;
}
private initBattleSpec(): void {
let spec = BattleSpec.DEFAULT;
if (this.gameMode.isClassic) {
if (this.waveIndex === 200)
spec = BattleSpec.FINAL_BOSS;
}
this.battleSpec = spec;
}
private getLevelForWave(): integer {
const levelWaveIndex = this.gameMode.getWaveForDifficulty(this.waveIndex);
const baseLevel = 1 + levelWaveIndex / 2 + Math.pow(levelWaveIndex / 25, 2);
const bossMultiplier = 1.2;
if (!(this.waveIndex % 10)) {
const ret = Math.floor(baseLevel * bossMultiplier);
if (this.battleSpec === BattleSpec.FINAL_BOSS || !(this.waveIndex % 250))
return Math.ceil(ret / 25) * 25;
let levelOffset = 0;
if (!this.gameMode.isWaveFinal(this.waveIndex))
levelOffset = Math.round(Phaser.Math.RND.realInRange(-1, 1) * Math.floor(levelWaveIndex / 10));
return ret + levelOffset;
} }
private initBattleSpec(): void { let levelOffset = 0;
let spec = BattleSpec.DEFAULT;
if (this.gameMode.isClassic) {
if (this.waveIndex === 200)
spec = BattleSpec.FINAL_BOSS;
}
this.battleSpec = spec;
}
private getLevelForWave(): integer {
let levelWaveIndex = this.gameMode.getWaveForDifficulty(this.waveIndex);
let baseLevel = 1 + levelWaveIndex / 2 + Math.pow(levelWaveIndex / 25, 2);
const bossMultiplier = 1.2;
if (!(this.waveIndex % 10)) {
const ret = Math.floor(baseLevel * bossMultiplier);
if (this.battleSpec === BattleSpec.FINAL_BOSS || !(this.waveIndex % 250))
return Math.ceil(ret / 25) * 25;
let levelOffset = 0;
if (!this.gameMode.isWaveFinal(this.waveIndex))
levelOffset = Math.round(Phaser.Math.RND.realInRange(-1, 1) * Math.floor(levelWaveIndex / 10));
return ret + levelOffset;
}
let levelOffset = 0;
const deviation = 10 / levelWaveIndex; const deviation = 10 / levelWaveIndex;
levelOffset = Math.abs(this.randSeedGaussForLevel(deviation)); levelOffset = Math.abs(this.randSeedGaussForLevel(deviation));
return Math.max(Math.round(baseLevel + levelOffset), 1); return Math.max(Math.round(baseLevel + levelOffset), 1);
} }
randSeedGaussForLevel(value: number): number { randSeedGaussForLevel(value: number): number {
let rand = 0; let rand = 0;
for (let i = value; i > 0; i--) for (let i = value; i > 0; i--)
rand += Phaser.Math.RND.realInRange(0, 1); rand += Phaser.Math.RND.realInRange(0, 1);
return rand / value; return rand / value;
} }
getBattlerCount(): integer { getBattlerCount(): integer {
return this.double ? 2 : 1; return this.double ? 2 : 1;
} }
incrementTurn(scene: BattleScene): void { incrementTurn(scene: BattleScene): void {
this.turn++; this.turn++;
this.turnCommands = Object.fromEntries(Utils.getEnumValues(BattlerIndex).map(bt => [ bt, null ])); this.turnCommands = Object.fromEntries(Utils.getEnumValues(BattlerIndex).map(bt => [ bt, null ]));
this.battleSeedState = null; this.battleSeedState = null;
} }
addParticipant(playerPokemon: PlayerPokemon): void { addParticipant(playerPokemon: PlayerPokemon): void {
this.playerParticipantIds.add(playerPokemon.id); this.playerParticipantIds.add(playerPokemon.id);
} }
removeFaintedParticipant(playerPokemon: PlayerPokemon): void { removeFaintedParticipant(playerPokemon: PlayerPokemon): void {
this.playerParticipantIds.delete(playerPokemon.id); this.playerParticipantIds.delete(playerPokemon.id);
} }
addPostBattleLoot(enemyPokemon: EnemyPokemon): void { addPostBattleLoot(enemyPokemon: EnemyPokemon): void {
this.postBattleLoot.push(...enemyPokemon.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === enemyPokemon.id && m.getTransferrable(false), false).map(i => { this.postBattleLoot.push(...enemyPokemon.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === enemyPokemon.id && m.getTransferrable(false), false).map(i => {
const ret = i as PokemonHeldItemModifier; const ret = i as PokemonHeldItemModifier;
ret.pokemonId = null; ret.pokemonId = null;
return ret; return ret;
})); }));
} }
pickUpScatteredMoney(scene: BattleScene): void { pickUpScatteredMoney(scene: BattleScene): void {
const moneyAmount = new Utils.IntegerHolder(scene.currentBattle.moneyScattered); const moneyAmount = new Utils.IntegerHolder(scene.currentBattle.moneyScattered);
scene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); scene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount);
scene.addMoney(moneyAmount.value); scene.addMoney(moneyAmount.value);
scene.queueMessage(`You picked up ₽${moneyAmount.value.toLocaleString('en-US')}!`, null, true); scene.queueMessage(`You picked up ₽${moneyAmount.value.toLocaleString('en-US')}!`, null, true);
scene.currentBattle.moneyScattered = 0; scene.currentBattle.moneyScattered = 0;
}
addBattleScore(scene: BattleScene): void {
let partyMemberTurnMultiplier = scene.getEnemyParty().length / 2 + 0.5;
if (this.double)
partyMemberTurnMultiplier /= 1.5;
for (const p of scene.getEnemyParty()) {
if (p.isBoss())
partyMemberTurnMultiplier *= (p.bossSegments / 1.5) / scene.getEnemyParty().length;
}
const turnMultiplier = Phaser.Tweens.Builders.GetEaseFunction('Sine.easeIn')(1 - Math.min(this.turn - 2, 10 * partyMemberTurnMultiplier) / (10 * partyMemberTurnMultiplier));
const finalBattleScore = Math.ceil(this.battleScore * turnMultiplier);
scene.score += finalBattleScore;
console.log(`Battle Score: ${finalBattleScore} (${this.turn - 1} Turns x${Math.floor(turnMultiplier * 100) / 100})`);
console.log(`Total Score: ${scene.score}`);
scene.updateScoreText();
}
getBgmOverride(scene: BattleScene): string {
const battlers = this.enemyParty.slice(0, this.getBattlerCount());
if (this.battleType === BattleType.TRAINER) {
if (!this.started && this.trainer.config.encounterBgm && this.trainer.getEncounterMessages()?.length)
return `encounter_${this.trainer.getEncounterBgm()}`;
return this.trainer.getBattleBgm();
} else if (this.gameMode.isClassic && this.waveIndex > 195 && this.battleSpec !== BattleSpec.FINAL_BOSS)
return 'end_summit';
for (const pokemon of battlers) {
if (this.battleSpec === BattleSpec.FINAL_BOSS) {
if (pokemon.formIndex)
return 'battle_final';
return 'battle_final_encounter';
}
if (pokemon.species.legendary || pokemon.species.subLegendary || pokemon.species.mythical) {
if (pokemon.species.speciesId === Species.REGIROCK || pokemon.species.speciesId === Species.REGICE || pokemon.species.speciesId === Species.REGISTEEL || pokemon.species.speciesId === Species.REGIGIGAS || pokemon.species.speciesId === Species.REGIELEKI || pokemon.species.speciesId === Species.REGIDRAGO)
return 'battle_legendary_regis';
if (pokemon.species.speciesId === Species.COBALION || pokemon.species.speciesId === Species.TERRAKION || pokemon.species.speciesId === Species.VIRIZION || pokemon.species.speciesId === Species.TORNADUS || pokemon.species.speciesId === Species.THUNDURUS || pokemon.species.speciesId === Species.LANDORUS || pokemon.species.speciesId === Species.KELDEO || pokemon.species.speciesId === Species.MELOETTA || pokemon.species.speciesId === Species.GENESECT)
return 'battle_legendary_unova';
if (pokemon.species.speciesId === Species.RESHIRAM || pokemon.species.speciesId === Species.ZEKROM)
return 'battle_legendary_res_zek';
if (pokemon.species.speciesId === Species.KYUREM)
return 'battle_legendary_kyurem';
if (pokemon.species.legendary)
return 'battle_legendary_res_zek';
return 'battle_legendary_unova';
}
} }
addBattleScore(scene: BattleScene): void { if (scene.gameMode.isClassic && this.waveIndex <= 4)
let partyMemberTurnMultiplier = scene.getEnemyParty().length / 2 + 0.5; return 'battle_wild';
if (this.double)
partyMemberTurnMultiplier /= 1.5; return null;
for (let p of scene.getEnemyParty()) { }
if (p.isBoss())
partyMemberTurnMultiplier *= (p.bossSegments / 1.5) / scene.getEnemyParty().length; randSeedInt(scene: BattleScene, range: integer, min: integer = 0): integer {
} if (range <= 1)
const turnMultiplier = Phaser.Tweens.Builders.GetEaseFunction('Sine.easeIn')(1 - Math.min(this.turn - 2, 10 * partyMemberTurnMultiplier) / (10 * partyMemberTurnMultiplier)); return min;
const finalBattleScore = Math.ceil(this.battleScore * turnMultiplier); let ret: integer;
scene.score += finalBattleScore; const tempRngCounter = scene.rngCounter;
console.log(`Battle Score: ${finalBattleScore} (${this.turn - 1} Turns x${Math.floor(turnMultiplier * 100) / 100})`); const tempSeedOverride = scene.rngSeedOverride;
console.log(`Total Score: ${scene.score}`); const state = Phaser.Math.RND.state();
scene.updateScoreText(); if (this.battleSeedState)
} Phaser.Math.RND.state(this.battleSeedState);
else {
getBgmOverride(scene: BattleScene): string { Phaser.Math.RND.sow([ Utils.shiftCharCodes(this.battleSeed, this.turn << 6) ]);
const battlers = this.enemyParty.slice(0, this.getBattlerCount()); console.log('Battle Seed:', this.battleSeed);
if (this.battleType === BattleType.TRAINER) {
if (!this.started && this.trainer.config.encounterBgm && this.trainer.getEncounterMessages()?.length)
return `encounter_${this.trainer.getEncounterBgm()}`;
return this.trainer.getBattleBgm();
} else if (this.gameMode.isClassic && this.waveIndex > 195 && this.battleSpec !== BattleSpec.FINAL_BOSS)
return 'end_summit';
for (let pokemon of battlers) {
if (this.battleSpec === BattleSpec.FINAL_BOSS) {
if (pokemon.formIndex)
return 'battle_final';
return 'battle_final_encounter';
}
if (pokemon.species.legendary || pokemon.species.subLegendary || pokemon.species.mythical) {
if (pokemon.species.speciesId === Species.REGIROCK || pokemon.species.speciesId === Species.REGICE || pokemon.species.speciesId === Species.REGISTEEL || pokemon.species.speciesId === Species.REGIGIGAS || pokemon.species.speciesId === Species.REGIELEKI || pokemon.species.speciesId === Species.REGIDRAGO)
return 'battle_legendary_regis';
if (pokemon.species.speciesId === Species.COBALION || pokemon.species.speciesId === Species.TERRAKION || pokemon.species.speciesId === Species.VIRIZION || pokemon.species.speciesId === Species.TORNADUS || pokemon.species.speciesId === Species.THUNDURUS || pokemon.species.speciesId === Species.LANDORUS || pokemon.species.speciesId === Species.KELDEO || pokemon.species.speciesId === Species.MELOETTA || pokemon.species.speciesId === Species.GENESECT)
return 'battle_legendary_unova';
if (pokemon.species.speciesId === Species.RESHIRAM || pokemon.species.speciesId === Species.ZEKROM)
return 'battle_legendary_res_zek';
if (pokemon.species.speciesId === Species.KYUREM)
return 'battle_legendary_kyurem';
if (pokemon.species.legendary)
return 'battle_legendary_res_zek';
return 'battle_legendary_unova';
}
}
if (scene.gameMode.isClassic && this.waveIndex <= 4)
return 'battle_wild';
return null;
}
randSeedInt(scene: BattleScene, range: integer, min: integer = 0): integer {
if (range <= 1)
return min;
let ret: integer;
const tempRngCounter = scene.rngCounter;
const tempSeedOverride = scene.rngSeedOverride;
const state = Phaser.Math.RND.state();
if (this.battleSeedState)
Phaser.Math.RND.state(this.battleSeedState);
else {
Phaser.Math.RND.sow([ Utils.shiftCharCodes(this.battleSeed, this.turn << 6) ]);
console.log('Battle Seed:', this.battleSeed);
}
scene.rngCounter = this.rngCounter++;
scene.rngSeedOverride = this.battleSeed;
ret = Utils.randSeedInt(range, min);
this.battleSeedState = Phaser.Math.RND.state();
Phaser.Math.RND.state(state);
scene.rngCounter = tempRngCounter;
scene.rngSeedOverride = tempSeedOverride;
return ret;
} }
scene.rngCounter = this.rngCounter++;
scene.rngSeedOverride = this.battleSeed;
ret = Utils.randSeedInt(range, min);
this.battleSeedState = Phaser.Math.RND.state();
Phaser.Math.RND.state(state);
scene.rngCounter = tempRngCounter;
scene.rngSeedOverride = tempSeedOverride;
return ret;
}
} }
export class FixedBattle extends Battle { export class FixedBattle extends Battle {
constructor(scene: BattleScene, waveIndex: integer, config: FixedBattleConfig) { constructor(scene: BattleScene, waveIndex: integer, config: FixedBattleConfig) {
super(scene.gameMode, waveIndex, config.battleType, config.battleType === BattleType.TRAINER ? config.getTrainer(scene) : null, config.double); super(scene.gameMode, waveIndex, config.battleType, config.battleType === BattleType.TRAINER ? config.getTrainer(scene) : null, config.double);
if (config.getEnemyParty) if (config.getEnemyParty)
this.enemyParty = config.getEnemyParty(scene); this.enemyParty = config.getEnemyParty(scene);
} }
} }
type GetTrainerFunc = (scene: BattleScene) => Trainer; type GetTrainerFunc = (scene: BattleScene) => Trainer;
type GetEnemyPartyFunc = (scene: BattleScene) => EnemyPokemon[]; type GetEnemyPartyFunc = (scene: BattleScene) => EnemyPokemon[];
export class FixedBattleConfig { export class FixedBattleConfig {
public battleType: BattleType; public battleType: BattleType;
public double: boolean; public double: boolean;
public getTrainer: GetTrainerFunc; public getTrainer: GetTrainerFunc;
public getEnemyParty: GetEnemyPartyFunc; public getEnemyParty: GetEnemyPartyFunc;
public seedOffsetWaveIndex: integer; public seedOffsetWaveIndex: integer;
setBattleType(battleType: BattleType): FixedBattleConfig { setBattleType(battleType: BattleType): FixedBattleConfig {
this.battleType = battleType; this.battleType = battleType;
return this; return this;
} }
setDouble(double: boolean): FixedBattleConfig { setDouble(double: boolean): FixedBattleConfig {
this.double = double; this.double = double;
return this; return this;
} }
setGetTrainerFunc(getTrainerFunc: GetTrainerFunc): FixedBattleConfig { setGetTrainerFunc(getTrainerFunc: GetTrainerFunc): FixedBattleConfig {
this.getTrainer = getTrainerFunc; this.getTrainer = getTrainerFunc;
return this; return this;
} }
setGetEnemyPartyFunc(getEnemyPartyFunc: GetEnemyPartyFunc): FixedBattleConfig { setGetEnemyPartyFunc(getEnemyPartyFunc: GetEnemyPartyFunc): FixedBattleConfig {
this.getEnemyParty = getEnemyPartyFunc; this.getEnemyParty = getEnemyPartyFunc;
return this; return this;
} }
setSeedOffsetWave(seedOffsetWaveIndex: integer): FixedBattleConfig { setSeedOffsetWave(seedOffsetWaveIndex: integer): FixedBattleConfig {
this.seedOffsetWaveIndex = seedOffsetWaveIndex; this.seedOffsetWaveIndex = seedOffsetWaveIndex;
return this; return this;
} }
} }
function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[]): GetTrainerFunc { function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[]): GetTrainerFunc {
return (scene: BattleScene) => { return (scene: BattleScene) => {
const rand = Utils.randSeedInt(trainerPool.length); const rand = Utils.randSeedInt(trainerPool.length);
const trainerTypes: TrainerType[] = []; const trainerTypes: TrainerType[] = [];
for (let trainerPoolEntry of trainerPool) { for (const trainerPoolEntry of trainerPool) {
const trainerType = Array.isArray(trainerPoolEntry) const trainerType = Array.isArray(trainerPoolEntry)
? Utils.randSeedItem(trainerPoolEntry) ? Utils.randSeedItem(trainerPoolEntry)
: trainerPoolEntry; : trainerPoolEntry;
trainerTypes.push(trainerType); trainerTypes.push(trainerType);
} }
return new Trainer(scene, trainerTypes[rand], TrainerVariant.DEFAULT); return new Trainer(scene, trainerTypes[rand], TrainerVariant.DEFAULT);
}; };
} }
interface FixedBattleConfigs { interface FixedBattleConfigs {
@ -305,28 +305,28 @@ interface FixedBattleConfigs {
} }
export const fixedBattles: FixedBattleConfigs = { export const fixedBattles: FixedBattleConfigs = {
[5]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [5]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.YOUNGSTER, Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.YOUNGSTER, Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[8]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [8]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[25]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [25]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_2, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_2, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[55]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [55]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_3, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_3, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[95]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [95]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_4, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_4, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_5, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_5, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[182]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [182]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, [ TrainerType.HALA, TrainerType.MOLAYNE ], TrainerType.RIKA, TrainerType.CRISPIN ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, [ TrainerType.HALA, TrainerType.MOLAYNE ], TrainerType.RIKA, TrainerType.CRISPIN ])),
[184]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182) [184]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.BRUNO, TrainerType.KOGA, TrainerType.PHOEBE, TrainerType.BERTHA, TrainerType.MARSHAL, TrainerType.SIEBOLD, TrainerType.OLIVIA, TrainerType.POPPY, TrainerType.AMARYS ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.BRUNO, TrainerType.KOGA, TrainerType.PHOEBE, TrainerType.BERTHA, TrainerType.MARSHAL, TrainerType.SIEBOLD, TrainerType.OLIVIA, TrainerType.POPPY, TrainerType.AMARYS ])),
[186]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182) [186]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.AGATHA, TrainerType.BRUNO, TrainerType.GLACIA, TrainerType.FLINT, TrainerType.GRIMSLEY, TrainerType.WIKSTROM, TrainerType.ACEROLA, TrainerType.LARRY_ELITE, TrainerType.LACEY ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.AGATHA, TrainerType.BRUNO, TrainerType.GLACIA, TrainerType.FLINT, TrainerType.GRIMSLEY, TrainerType.WIKSTROM, TrainerType.ACEROLA, TrainerType.LARRY_ELITE, TrainerType.LACEY ])),
[188]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182) [188]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI, TrainerType.HASSEL, TrainerType.DRAYTON ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI, TrainerType.HASSEL, TrainerType.DRAYTON ])),
[190]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182) [190]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.BLUE, [ TrainerType.RED, TrainerType.LANCE_CHAMPION ], [ TrainerType.STEVEN, TrainerType.WALLACE ], TrainerType.CYNTHIA, [ TrainerType.ALDER, TrainerType.IRIS ], TrainerType.DIANTHA, TrainerType.HAU, [ TrainerType.GEETA, TrainerType.NEMONA ], TrainerType.KIERAN, TrainerType.LEON ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.BLUE, [ TrainerType.RED, TrainerType.LANCE_CHAMPION ], [ TrainerType.STEVEN, TrainerType.WALLACE ], TrainerType.CYNTHIA, [ TrainerType.ALDER, TrainerType.IRIS ], TrainerType.DIANTHA, TrainerType.HAU, [ TrainerType.GEETA, TrainerType.NEMONA ], TrainerType.KIERAN, TrainerType.LEON ])),
[195]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [195]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_6, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_6, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT))
}; };

View File

@ -2,28 +2,28 @@
* Dualshock mapping * Dualshock mapping
*/ */
const pad_dualshock = { const pad_dualshock = {
padID: 'Dualshock', padID: 'Dualshock',
padType: 'Sony', padType: 'Sony',
gamepadMapping: { gamepadMapping: {
RC_S: 0, RC_S: 0,
RC_E: 1, RC_E: 1,
RC_W: 2, RC_W: 2,
RC_N: 3, RC_N: 3,
START: 9, // Options START: 9, // Options
SELECT: 8, // Share SELECT: 8, // Share
LB: 4, LB: 4,
RB: 5, RB: 5,
LT: 6, LT: 6,
RT: 7, RT: 7,
LS: 10, LS: 10,
RS: 11, RS: 11,
LC_N: 12, LC_N: 12,
LC_S: 13, LC_S: 13,
LC_W: 14, LC_W: 14,
LC_E: 15, LC_E: 15,
MENU: 16, MENU: 16,
TOUCH: 17 TOUCH: 17
}, },
}; };
export default pad_dualshock; export default pad_dualshock;

View File

@ -2,26 +2,26 @@
* Generic pad mapping * Generic pad mapping
*/ */
const pad_generic = { const pad_generic = {
padID: 'Generic', padID: 'Generic',
padType: 'generic', padType: 'generic',
gamepadMapping: { gamepadMapping: {
RC_S: 0, RC_S: 0,
RC_E: 1, RC_E: 1,
RC_W: 2, RC_W: 2,
RC_N: 3, RC_N: 3,
START: 9, START: 9,
SELECT: 8, SELECT: 8,
LB: 4, LB: 4,
RB: 5, RB: 5,
LT: 6, LT: 6,
RT: 7, RT: 7,
LS: 10, LS: 10,
RS: 11, RS: 11,
LC_N: 12, LC_N: 12,
LC_S: 13, LC_S: 13,
LC_W: 14, LC_W: 14,
LC_E: 15 LC_E: 15
}, },
}; };
export default pad_generic; export default pad_generic;

View File

@ -2,22 +2,22 @@
* 081f-e401 - UnlicensedSNES * 081f-e401 - UnlicensedSNES
*/ */
const pad_unlicensedSNES = { const pad_unlicensedSNES = {
padID: '081f-e401', padID: '081f-e401',
padType: 'snes', padType: 'snes',
gamepadMapping : { gamepadMapping : {
RC_S: 2, RC_S: 2,
RC_E: 1, RC_E: 1,
RC_W: 3, RC_W: 3,
RC_N: 0, RC_N: 0,
START: 9, START: 9,
SELECT: 8, SELECT: 8,
LB: 4, LB: 4,
RB: 5, RB: 5,
LC_N: 12, LC_N: 12,
LC_S: 13, LC_S: 13,
LC_W: 14, LC_W: 14,
LC_E: 15 LC_E: 15
} }
}; };
export default pad_unlicensedSNES; export default pad_unlicensedSNES;

View File

@ -2,27 +2,27 @@
* Generic pad mapping * Generic pad mapping
*/ */
const pad_xbox360 = { const pad_xbox360 = {
padID: 'Xbox 360 controller (XInput STANDARD GAMEPAD)', padID: 'Xbox 360 controller (XInput STANDARD GAMEPAD)',
padType: 'xbox', padType: 'xbox',
gamepadMapping: { gamepadMapping: {
RC_S: 0, RC_S: 0,
RC_E: 1, RC_E: 1,
RC_W: 2, RC_W: 2,
RC_N: 3, RC_N: 3,
START: 9, START: 9,
SELECT: 8, SELECT: 8,
LB: 4, LB: 4,
RB: 5, RB: 5,
LT: 6, LT: 6,
RT: 7, RT: 7,
LS: 10, LS: 10,
RS: 11, RS: 11,
LC_N: 12, LC_N: 12,
LC_S: 13, LC_S: 13,
LC_W: 14, LC_W: 14,
LC_E: 15, LC_E: 15,
MENU: 16 MENU: 16
}, },
}; };
export default pad_xbox360; export default pad_xbox360;

View File

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

View File

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

View File

@ -1,16 +1,16 @@
import { Arena } from "../field/arena"; import { Arena } from '../field/arena';
import { Type } from "./type"; import { Type } from './type';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { MoveCategory, allMoves } from "./move"; import { MoveCategory, allMoves } from './move';
import { getPokemonMessage } from "../messages"; import { getPokemonMessage } from '../messages';
import Pokemon, { HitResult, PokemonMove } from "../field/pokemon"; import Pokemon, { HitResult, PokemonMove } from '../field/pokemon';
import { MoveEffectPhase, PokemonHealPhase, StatChangePhase} from "../phases"; import { MoveEffectPhase, PokemonHealPhase, StatChangePhase} from '../phases';
import { StatusEffect } from "./status-effect"; import { StatusEffect } from './status-effect';
import { BattlerIndex } from "../battle"; import { BattlerIndex } from '../battle';
import { Moves } from "./enums/moves"; import { Moves } from './enums/moves';
import { ArenaTagType } from "./enums/arena-tag-type"; import { ArenaTagType } from './enums/arena-tag-type';
import { BlockNonDirectDamageAbAttr, ProtectStatAbAttr, applyAbAttrs } from "./ability"; import { BlockNonDirectDamageAbAttr, ProtectStatAbAttr, applyAbAttrs } from './ability';
import { BattleStat } from "./battle-stat"; import { BattleStat } from './battle-stat';
export enum ArenaTagSide { export enum ArenaTagSide {
BOTH, BOTH,
@ -65,7 +65,7 @@ export class MistTag extends ArenaTag {
super.onAdd(arena); super.onAdd(arena);
const source = arena.scene.getPokemonById(this.sourceId); const source = arena.scene.getPokemonById(this.sourceId);
arena.scene.queueMessage(getPokemonMessage(source, `'s team became\nshrouded in mist!`)); arena.scene.queueMessage(getPokemonMessage(source, '\'s team became\nshrouded in mist!'));
} }
apply(arena: Arena, args: any[]): boolean { apply(arena: Arena, args: any[]): boolean {
@ -372,24 +372,24 @@ class StealthRockTag extends ArenaTrapTag {
let damageHpRatio: number; let damageHpRatio: number;
switch (effectiveness) { switch (effectiveness) {
case 0: case 0:
damageHpRatio = 0; damageHpRatio = 0;
break; break;
case 0.25: case 0.25:
damageHpRatio = 0.03125; damageHpRatio = 0.03125;
break; break;
case 0.5: case 0.5:
damageHpRatio = 0.0625; damageHpRatio = 0.0625;
break; break;
case 1: case 1:
damageHpRatio = 0.125; damageHpRatio = 0.125;
break; break;
case 2: case 2:
damageHpRatio = 0.25; damageHpRatio = 0.25;
break; break;
case 4: case 4:
damageHpRatio = 0.5; damageHpRatio = 0.5;
break; break;
} }
return damageHpRatio; return damageHpRatio;
@ -498,36 +498,36 @@ class TailwindTag extends ArenaTag {
export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves, sourceId: integer, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag { export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves, sourceId: integer, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag {
switch (tagType) { switch (tagType) {
case ArenaTagType.MIST: case ArenaTagType.MIST:
return new MistTag(turnCount, sourceId, side); return new MistTag(turnCount, sourceId, side);
case ArenaTagType.MUD_SPORT: case ArenaTagType.MUD_SPORT:
return new MudSportTag(turnCount, sourceId); return new MudSportTag(turnCount, sourceId);
case ArenaTagType.WATER_SPORT: case ArenaTagType.WATER_SPORT:
return new WaterSportTag(turnCount, sourceId); return new WaterSportTag(turnCount, sourceId);
case ArenaTagType.SPIKES: case ArenaTagType.SPIKES:
return new SpikesTag(sourceId, side); return new SpikesTag(sourceId, side);
case ArenaTagType.TOXIC_SPIKES: case ArenaTagType.TOXIC_SPIKES:
return new ToxicSpikesTag(sourceId, side); return new ToxicSpikesTag(sourceId, side);
case ArenaTagType.FUTURE_SIGHT: case ArenaTagType.FUTURE_SIGHT:
case ArenaTagType.DOOM_DESIRE: case ArenaTagType.DOOM_DESIRE:
return new DelayedAttackTag(tagType, sourceMove, sourceId, targetIndex); return new DelayedAttackTag(tagType, sourceMove, sourceId, targetIndex);
case ArenaTagType.WISH: case ArenaTagType.WISH:
return new WishTag(turnCount, sourceId, side); return new WishTag(turnCount, sourceId, side);
case ArenaTagType.STEALTH_ROCK: case ArenaTagType.STEALTH_ROCK:
return new StealthRockTag(sourceId, side); return new StealthRockTag(sourceId, side);
case ArenaTagType.STICKY_WEB: case ArenaTagType.STICKY_WEB:
return new StickyWebTag(sourceId, side); return new StickyWebTag(sourceId, side);
case ArenaTagType.TRICK_ROOM: case ArenaTagType.TRICK_ROOM:
return new TrickRoomTag(turnCount, sourceId); return new TrickRoomTag(turnCount, sourceId);
case ArenaTagType.GRAVITY: case ArenaTagType.GRAVITY:
return new GravityTag(turnCount); return new GravityTag(turnCount);
case ArenaTagType.REFLECT: case ArenaTagType.REFLECT:
return new ReflectTag(turnCount, sourceId, side); return new ReflectTag(turnCount, sourceId, side);
case ArenaTagType.LIGHT_SCREEN: case ArenaTagType.LIGHT_SCREEN:
return new LightScreenTag(turnCount, sourceId, side); return new LightScreenTag(turnCount, sourceId, side);
case ArenaTagType.AURORA_VEIL: case ArenaTagType.AURORA_VEIL:
return new AuroraVeilTag(turnCount, sourceId, side); return new AuroraVeilTag(turnCount, sourceId, side);
case ArenaTagType.TAILWIND: case ArenaTagType.TAILWIND:
return new TailwindTag(turnCount, sourceId, side); return new TailwindTag(turnCount, sourceId, side);
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -11,53 +11,53 @@ export enum BattleStat {
export function getBattleStatName(stat: BattleStat) { export function getBattleStatName(stat: BattleStat) {
switch (stat) { switch (stat) {
case BattleStat.ATK: case BattleStat.ATK:
return 'Attack'; return 'Attack';
case BattleStat.DEF: case BattleStat.DEF:
return 'Defense'; return 'Defense';
case BattleStat.SPATK: case BattleStat.SPATK:
return 'Sp. Atk'; return 'Sp. Atk';
case BattleStat.SPDEF: case BattleStat.SPDEF:
return 'Sp. Def'; return 'Sp. Def';
case BattleStat.SPD: case BattleStat.SPD:
return 'Speed'; return 'Speed';
case BattleStat.ACC: case BattleStat.ACC:
return 'Accuracy'; return 'Accuracy';
case BattleStat.EVA: case BattleStat.EVA:
return 'Evasiveness'; return 'Evasiveness';
default: default:
return '???'; return '???';
} }
} }
export function getBattleStatLevelChangeDescription(levels: integer, up: boolean) { export function getBattleStatLevelChangeDescription(levels: integer, up: boolean) {
if (up) { if (up) {
switch (levels) { switch (levels) {
case 1: case 1:
return 'rose'; return 'rose';
case 2: case 2:
return 'sharply rose'; return 'sharply rose';
case 3: case 3:
case 4: case 4:
case 5: case 5:
case 6: case 6:
return 'rose drastically'; return 'rose drastically';
default: default:
return 'won\'t go any higher'; return 'won\'t go any higher';
} }
} else { } else {
switch (levels) { switch (levels) {
case 1: case 1:
return 'fell'; return 'fell';
case 2: case 2:
return 'harshly fell'; return 'harshly fell';
case 3: case 3:
case 4: case 4:
case 5: case 5:
case 6: case 6:
return 'severely fell'; return 'severely fell';
default: default:
return 'won\'t go any lower'; return 'won\'t go any lower';
} }
} }
} }

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;
} }
} }
@ -450,14 +450,14 @@ export class EncoreTag extends BattlerTag {
return false; return false;
switch (repeatableMove.move) { switch (repeatableMove.move) {
case Moves.MIMIC: case Moves.MIMIC:
case Moves.MIRROR_MOVE: case Moves.MIRROR_MOVE:
case Moves.TRANSFORM: case Moves.TRANSFORM:
case Moves.STRUGGLE: case Moves.STRUGGLE:
case Moves.SKETCH: case Moves.SKETCH:
case Moves.SLEEP_TALK: case Moves.SLEEP_TALK:
case Moves.ENCORE: case Moves.ENCORE:
return false; return false;
} }
if (allMoves[repeatableMove.move].getAttrs(ChargeAttr).length && repeatableMove.result === MoveResult.OTHER) if (allMoves[repeatableMove.move].getAttrs(ChargeAttr).length && repeatableMove.result === MoveResult.OTHER)
@ -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!');
} }
} }
@ -1049,12 +1049,12 @@ export class HighestStatBoostTag extends AbilityBattlerTag {
this.stat = highestStat; this.stat = highestStat;
switch (this.stat) { switch (this.stat) {
case Stat.SPD: case Stat.SPD:
this.multiplier = 1.5; this.multiplier = 1.5;
break; break;
default: default:
this.multiplier = 1.3; this.multiplier = 1.3;
break; break;
} }
pokemon.scene.queueMessage(getPokemonMessage(pokemon, `'s ${getStatName(highestStat)}\nwas heightened!`), null, false, null, true); pokemon.scene.queueMessage(getPokemonMessage(pokemon, `'s ${getStatName(highestStat)}\nwas heightened!`), null, false, null, true);
@ -1296,118 +1296,118 @@ export class CursedTag extends BattlerTag {
export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourceMove: Moves, sourceId: integer): BattlerTag { export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourceMove: Moves, sourceId: integer): BattlerTag {
switch (tagType) { switch (tagType) {
case BattlerTagType.RECHARGING: case BattlerTagType.RECHARGING:
return new RechargingTag(sourceMove); return new RechargingTag(sourceMove);
case BattlerTagType.FLINCHED: case BattlerTagType.FLINCHED:
return new FlinchedTag(sourceMove); return new FlinchedTag(sourceMove);
case BattlerTagType.INTERRUPTED: case BattlerTagType.INTERRUPTED:
return new InterruptedTag(sourceMove); return new InterruptedTag(sourceMove);
case BattlerTagType.CONFUSED: case BattlerTagType.CONFUSED:
return new ConfusedTag(turnCount, sourceMove); return new ConfusedTag(turnCount, sourceMove);
case BattlerTagType.INFATUATED: case BattlerTagType.INFATUATED:
return new InfatuatedTag(sourceMove, sourceId); return new InfatuatedTag(sourceMove, sourceId);
case BattlerTagType.SEEDED: case BattlerTagType.SEEDED:
return new SeedTag(sourceId); return new SeedTag(sourceId);
case BattlerTagType.NIGHTMARE: case BattlerTagType.NIGHTMARE:
return new NightmareTag(); return new NightmareTag();
case BattlerTagType.FRENZY: case BattlerTagType.FRENZY:
return new FrenzyTag(sourceMove, sourceId); return new FrenzyTag(sourceMove, sourceId);
case BattlerTagType.CHARGING: case BattlerTagType.CHARGING:
return new ChargingTag(sourceMove, sourceId); return new ChargingTag(sourceMove, sourceId);
case BattlerTagType.ENCORE: case BattlerTagType.ENCORE:
return new EncoreTag(sourceId); return new EncoreTag(sourceId);
case BattlerTagType.HELPING_HAND: case BattlerTagType.HELPING_HAND:
return new HelpingHandTag(sourceId); return new HelpingHandTag(sourceId);
case BattlerTagType.INGRAIN: case BattlerTagType.INGRAIN:
return new IngrainTag(sourceId); return new IngrainTag(sourceId);
case BattlerTagType.AQUA_RING: case BattlerTagType.AQUA_RING:
return new AquaRingTag(); return new AquaRingTag();
case BattlerTagType.DROWSY: case BattlerTagType.DROWSY:
return new DrowsyTag(); return new DrowsyTag();
case BattlerTagType.TRAPPED: case BattlerTagType.TRAPPED:
return new TrappedTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); return new TrappedTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId);
case BattlerTagType.BIND: case BattlerTagType.BIND:
return new BindTag(turnCount, sourceId); return new BindTag(turnCount, sourceId);
case BattlerTagType.WRAP: case BattlerTagType.WRAP:
return new WrapTag(turnCount, sourceId); return new WrapTag(turnCount, sourceId);
case BattlerTagType.FIRE_SPIN: case BattlerTagType.FIRE_SPIN:
return new FireSpinTag(turnCount, sourceId); return new FireSpinTag(turnCount, sourceId);
case BattlerTagType.WHIRLPOOL: case BattlerTagType.WHIRLPOOL:
return new WhirlpoolTag(turnCount, sourceId); return new WhirlpoolTag(turnCount, sourceId);
case BattlerTagType.CLAMP: case BattlerTagType.CLAMP:
return new ClampTag(turnCount, sourceId); return new ClampTag(turnCount, sourceId);
case BattlerTagType.SAND_TOMB: case BattlerTagType.SAND_TOMB:
return new SandTombTag(turnCount, sourceId); return new SandTombTag(turnCount, sourceId);
case BattlerTagType.MAGMA_STORM: case BattlerTagType.MAGMA_STORM:
return new MagmaStormTag(turnCount, sourceId); return new MagmaStormTag(turnCount, sourceId);
case BattlerTagType.SNAP_TRAP: case BattlerTagType.SNAP_TRAP:
return new SnapTrapTag(turnCount, sourceId); return new SnapTrapTag(turnCount, sourceId);
case BattlerTagType.THUNDER_CAGE: case BattlerTagType.THUNDER_CAGE:
return new ThunderCageTag(turnCount, sourceId); return new ThunderCageTag(turnCount, sourceId);
case BattlerTagType.INFESTATION: case BattlerTagType.INFESTATION:
return new InfestationTag(turnCount, sourceId); return new InfestationTag(turnCount, sourceId);
case BattlerTagType.PROTECTED: case BattlerTagType.PROTECTED:
return new ProtectedTag(sourceMove); return new ProtectedTag(sourceMove);
case BattlerTagType.SPIKY_SHIELD: case BattlerTagType.SPIKY_SHIELD:
return new ContactDamageProtectedTag(sourceMove, 8); return new ContactDamageProtectedTag(sourceMove, 8);
case BattlerTagType.KINGS_SHIELD: case BattlerTagType.KINGS_SHIELD:
return new ContactStatChangeProtectedTag(sourceMove, tagType, BattleStat.ATK, -1); return new ContactStatChangeProtectedTag(sourceMove, tagType, BattleStat.ATK, -1);
case BattlerTagType.OBSTRUCT: case BattlerTagType.OBSTRUCT:
return new ContactStatChangeProtectedTag(sourceMove, tagType, BattleStat.DEF, -2); return new ContactStatChangeProtectedTag(sourceMove, tagType, BattleStat.DEF, -2);
case BattlerTagType.SILK_TRAP: case BattlerTagType.SILK_TRAP:
return new ContactStatChangeProtectedTag(sourceMove, tagType, BattleStat.SPD, -1); return new ContactStatChangeProtectedTag(sourceMove, tagType, BattleStat.SPD, -1);
case BattlerTagType.BANEFUL_BUNKER: case BattlerTagType.BANEFUL_BUNKER:
return new ContactPoisonProtectedTag(sourceMove); return new ContactPoisonProtectedTag(sourceMove);
case BattlerTagType.BURNING_BULWARK: case BattlerTagType.BURNING_BULWARK:
return new ContactBurnProtectedTag(sourceMove); return new ContactBurnProtectedTag(sourceMove);
case BattlerTagType.ENDURING: case BattlerTagType.ENDURING:
return new EnduringTag(sourceMove); return new EnduringTag(sourceMove);
case BattlerTagType.STURDY: case BattlerTagType.STURDY:
return new SturdyTag(sourceMove); return new SturdyTag(sourceMove);
case BattlerTagType.PERISH_SONG: case BattlerTagType.PERISH_SONG:
return new PerishSongTag(turnCount); return new PerishSongTag(turnCount);
case BattlerTagType.TRUANT: case BattlerTagType.TRUANT:
return new TruantTag(); return new TruantTag();
case BattlerTagType.SLOW_START: case BattlerTagType.SLOW_START:
return new SlowStartTag(); return new SlowStartTag();
case BattlerTagType.PROTOSYNTHESIS: case BattlerTagType.PROTOSYNTHESIS:
return new WeatherHighestStatBoostTag(tagType, Abilities.PROTOSYNTHESIS, WeatherType.SUNNY, WeatherType.HARSH_SUN); return new WeatherHighestStatBoostTag(tagType, Abilities.PROTOSYNTHESIS, WeatherType.SUNNY, WeatherType.HARSH_SUN);
case BattlerTagType.QUARK_DRIVE: case BattlerTagType.QUARK_DRIVE:
return new TerrainHighestStatBoostTag(tagType, Abilities.QUARK_DRIVE, TerrainType.ELECTRIC); return new TerrainHighestStatBoostTag(tagType, Abilities.QUARK_DRIVE, TerrainType.ELECTRIC);
case BattlerTagType.FLYING: case BattlerTagType.FLYING:
case BattlerTagType.UNDERGROUND: case BattlerTagType.UNDERGROUND:
case BattlerTagType.UNDERWATER: case BattlerTagType.UNDERWATER:
case BattlerTagType.HIDDEN: case BattlerTagType.HIDDEN:
return new HideSpriteTag(tagType, turnCount, sourceMove); return new HideSpriteTag(tagType, turnCount, sourceMove);
case BattlerTagType.FIRE_BOOST: case BattlerTagType.FIRE_BOOST:
return new TypeBoostTag(tagType, sourceMove, Type.FIRE, 1.5, false); return new TypeBoostTag(tagType, sourceMove, Type.FIRE, 1.5, false);
case BattlerTagType.CRIT_BOOST: case BattlerTagType.CRIT_BOOST:
return new CritBoostTag(tagType, sourceMove); return new CritBoostTag(tagType, sourceMove);
case BattlerTagType.ALWAYS_CRIT: case BattlerTagType.ALWAYS_CRIT:
return new AlwaysCritTag(sourceMove); return new AlwaysCritTag(sourceMove);
case BattlerTagType.NO_CRIT: case BattlerTagType.NO_CRIT:
return new BattlerTag(tagType, BattlerTagLapseType.AFTER_MOVE, turnCount, sourceMove); return new BattlerTag(tagType, BattlerTagLapseType.AFTER_MOVE, turnCount, sourceMove);
case BattlerTagType.IGNORE_ACCURACY: case BattlerTagType.IGNORE_ACCURACY:
return new IgnoreAccuracyTag(sourceMove); return new IgnoreAccuracyTag(sourceMove);
case BattlerTagType.BYPASS_SLEEP: case BattlerTagType.BYPASS_SLEEP:
return new BattlerTag(BattlerTagType.BYPASS_SLEEP, BattlerTagLapseType.TURN_END, turnCount, sourceMove); return new BattlerTag(BattlerTagType.BYPASS_SLEEP, BattlerTagLapseType.TURN_END, turnCount, sourceMove);
case BattlerTagType.IGNORE_FLYING: case BattlerTagType.IGNORE_FLYING:
return new BattlerTag(tagType, BattlerTagLapseType.TURN_END, turnCount, sourceMove); return new BattlerTag(tagType, BattlerTagLapseType.TURN_END, turnCount, sourceMove);
case BattlerTagType.GROUNDED: case BattlerTagType.GROUNDED:
return new BattlerTag(tagType, BattlerTagLapseType.TURN_END, turnCount - 1, sourceMove); return new BattlerTag(tagType, BattlerTagLapseType.TURN_END, turnCount - 1, sourceMove);
case BattlerTagType.SALT_CURED: case BattlerTagType.SALT_CURED:
return new SaltCuredTag(sourceId); return new SaltCuredTag(sourceId);
case BattlerTagType.CURSED: case BattlerTagType.CURSED:
return new CursedTag(sourceId); return new CursedTag(sourceId);
case BattlerTagType.CHARGED: case BattlerTagType.CHARGED:
return new TypeBoostTag(tagType, sourceMove, Type.ELECTRIC, 2, true); return new TypeBoostTag(tagType, sourceMove, Type.ELECTRIC, 2, true);
case BattlerTagType.MAGNET_RISEN: case BattlerTagType.MAGNET_RISEN:
return new MagnetRisenTag(tagType, sourceMove); return new MagnetRisenTag(tagType, sourceMove);
case BattlerTagType.MINIMIZED: case BattlerTagType.MINIMIZED:
return new MinimizeTag(); return new MinimizeTag();
case BattlerTagType.NONE: case BattlerTagType.NONE:
default: default:
return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId);
} }
} }

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 {
@ -35,41 +35,41 @@ export type BerryPredicate = (pokemon: Pokemon) => boolean;
export function getBerryPredicate(berryType: BerryType): BerryPredicate { export function getBerryPredicate(berryType: BerryType): BerryPredicate {
switch (berryType) { switch (berryType) {
case BerryType.SITRUS: case BerryType.SITRUS:
return (pokemon: Pokemon) => pokemon.getHpRatio() < 0.5; return (pokemon: Pokemon) => pokemon.getHpRatio() < 0.5;
case BerryType.LUM: case BerryType.LUM:
return (pokemon: Pokemon) => !!pokemon.status || !!pokemon.getTag(BattlerTagType.CONFUSED); return (pokemon: Pokemon) => !!pokemon.status || !!pokemon.getTag(BattlerTagType.CONFUSED);
case BerryType.ENIGMA: case BerryType.ENIGMA:
return (pokemon: Pokemon) => !!pokemon.turnData.attacksReceived.filter(a => a.result === HitResult.SUPER_EFFECTIVE).length; return (pokemon: Pokemon) => !!pokemon.turnData.attacksReceived.filter(a => a.result === HitResult.SUPER_EFFECTIVE).length;
case BerryType.LIECHI: case BerryType.LIECHI:
case BerryType.GANLON: case BerryType.GANLON:
case BerryType.PETAYA: case BerryType.PETAYA:
case BerryType.APICOT: case BerryType.APICOT:
case BerryType.SALAC: case BerryType.SALAC:
return (pokemon: Pokemon) => { return (pokemon: Pokemon) => {
const threshold = new Utils.NumberHolder(0.25); const threshold = new Utils.NumberHolder(0.25);
const battleStat = (berryType - BerryType.LIECHI) as BattleStat; const battleStat = (berryType - BerryType.LIECHI) as BattleStat;
applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, threshold); applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, threshold);
return pokemon.getHpRatio() < threshold.value && pokemon.summonData.battleStats[battleStat] < 6; return pokemon.getHpRatio() < threshold.value && pokemon.summonData.battleStats[battleStat] < 6;
}; };
case BerryType.LANSAT: case BerryType.LANSAT:
return (pokemon: Pokemon) => { return (pokemon: Pokemon) => {
const threshold = new Utils.NumberHolder(0.25); const threshold = new Utils.NumberHolder(0.25);
applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, threshold); applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, threshold);
return pokemon.getHpRatio() < 0.25 && !pokemon.getTag(BattlerTagType.CRIT_BOOST); return pokemon.getHpRatio() < 0.25 && !pokemon.getTag(BattlerTagType.CRIT_BOOST);
}; };
case BerryType.STARF: case BerryType.STARF:
return (pokemon: Pokemon) => { return (pokemon: Pokemon) => {
const threshold = new Utils.NumberHolder(0.25); const threshold = new Utils.NumberHolder(0.25);
applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, threshold); applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, threshold);
return pokemon.getHpRatio() < 0.25; return pokemon.getHpRatio() < 0.25;
}; };
case BerryType.LEPPA: case BerryType.LEPPA:
return (pokemon: Pokemon) => { return (pokemon: Pokemon) => {
const threshold = new Utils.NumberHolder(0.25); const threshold = new Utils.NumberHolder(0.25);
applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, threshold); applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, threshold);
return !!pokemon.getMoveset().find(m => !m.getPpRatio()); return !!pokemon.getMoveset().find(m => !m.getPpRatio());
}; };
} }
} }
@ -77,64 +77,64 @@ export type BerryEffectFunc = (pokemon: Pokemon) => void;
export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc {
switch (berryType) { switch (berryType) {
case BerryType.SITRUS: case BerryType.SITRUS:
case BerryType.ENIGMA: case BerryType.ENIGMA:
return (pokemon: Pokemon) => { return (pokemon: Pokemon) => {
if (pokemon.battleData) if (pokemon.battleData)
pokemon.battleData.berriesEaten.push(berryType); pokemon.battleData.berriesEaten.push(berryType);
const hpHealed = new Utils.NumberHolder(Math.floor(pokemon.getMaxHp() / 4)); const hpHealed = new Utils.NumberHolder(Math.floor(pokemon.getMaxHp() / 4));
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, hpHealed); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, hpHealed);
pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(),
hpHealed.value, getPokemonMessage(pokemon, `'s ${getBerryName(berryType)}\nrestored its HP!`), true)); hpHealed.value, getPokemonMessage(pokemon, `'s ${getBerryName(berryType)}\nrestored its HP!`), true));
}; };
case BerryType.LUM: case BerryType.LUM:
return (pokemon: Pokemon) => { return (pokemon: Pokemon) => {
if (pokemon.battleData) if (pokemon.battleData)
pokemon.battleData.berriesEaten.push(berryType); pokemon.battleData.berriesEaten.push(berryType);
if (pokemon.status) { if (pokemon.status) {
pokemon.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect))); pokemon.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect)));
pokemon.resetStatus(); pokemon.resetStatus();
pokemon.updateInfo(); pokemon.updateInfo();
} }
if (pokemon.getTag(BattlerTagType.CONFUSED)) if (pokemon.getTag(BattlerTagType.CONFUSED))
pokemon.lapseTag(BattlerTagType.CONFUSED); pokemon.lapseTag(BattlerTagType.CONFUSED);
}; };
case BerryType.LIECHI: case BerryType.LIECHI:
case BerryType.GANLON: case BerryType.GANLON:
case BerryType.PETAYA: case BerryType.PETAYA:
case BerryType.APICOT: case BerryType.APICOT:
case BerryType.SALAC: case BerryType.SALAC:
return (pokemon: Pokemon) => { return (pokemon: Pokemon) => {
if (pokemon.battleData) if (pokemon.battleData)
pokemon.battleData.berriesEaten.push(berryType); pokemon.battleData.berriesEaten.push(berryType);
const battleStat = (berryType - BerryType.LIECHI) as BattleStat; const battleStat = (berryType - BerryType.LIECHI) as BattleStat;
const statLevels = new Utils.NumberHolder(1); const statLevels = new Utils.NumberHolder(1);
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels);
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ battleStat ], statLevels.value)); pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ battleStat ], statLevels.value));
}; };
case BerryType.LANSAT: case BerryType.LANSAT:
return (pokemon: Pokemon) => { return (pokemon: Pokemon) => {
if (pokemon.battleData) if (pokemon.battleData)
pokemon.battleData.berriesEaten.push(berryType); pokemon.battleData.berriesEaten.push(berryType);
pokemon.addTag(BattlerTagType.CRIT_BOOST); pokemon.addTag(BattlerTagType.CRIT_BOOST);
}; };
case BerryType.STARF: case BerryType.STARF:
return (pokemon: Pokemon) => { return (pokemon: Pokemon) => {
if (pokemon.battleData) if (pokemon.battleData)
pokemon.battleData.berriesEaten.push(berryType); pokemon.battleData.berriesEaten.push(berryType);
const statLevels = new Utils.NumberHolder(2); const statLevels = new Utils.NumberHolder(2);
applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels);
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ BattleStat.RAND ], statLevels.value)); pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ BattleStat.RAND ], statLevels.value));
}; };
case BerryType.LEPPA: case BerryType.LEPPA:
return (pokemon: Pokemon) => { return (pokemon: Pokemon) => {
if (pokemon.battleData) if (pokemon.battleData)
pokemon.battleData.berriesEaten.push(berryType); pokemon.battleData.berriesEaten.push(berryType);
const ppRestoreMove = pokemon.getMoveset().find(m => !m.getPpRatio()) ? pokemon.getMoveset().find(m => !m.getPpRatio()) : pokemon.getMoveset().find(m => m.getPpRatio() < 1); const ppRestoreMove = pokemon.getMoveset().find(m => !m.getPpRatio()) ? pokemon.getMoveset().find(m => !m.getPpRatio()) : pokemon.getMoveset().find(m => m.getPpRatio() < 1);
if(ppRestoreMove !== undefined){ if(ppRestoreMove !== undefined){
ppRestoreMove.ppUsed = Math.max(ppRestoreMove.ppUsed - 10, 0); ppRestoreMove.ppUsed = Math.max(ppRestoreMove.ppUsed - 10, 0);
pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` restored PP to its move ${ppRestoreMove.getName()}\nusing its ${getBerryName(berryType)}!`)); pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` restored PP to its move ${ppRestoreMove.getName()}\nusing its ${getBerryName(berryType)}!`));
} }
}; };
} }
} }

File diff suppressed because it is too large Load Diff

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;
@ -21,7 +21,7 @@ export function fetchDailyRunSeed(): Promise<string> {
} }
return response.text(); return response.text();
}).then(seed => resolve(seed)) }).then(seed => resolve(seed))
.catch(err => reject(err)); .catch(err => reject(err));
}); });
} }
@ -72,4 +72,4 @@ function getDailyRunStarter(scene: BattleScene, starterSpeciesForm: PokemonSpeci
}; };
pokemon.destroy(); pokemon.destroy();
return starter; return starter;
} }

File diff suppressed because it is too large Load Diff

View File

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

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;
@ -42,12 +42,12 @@ export class Egg {
export function getEggTierDefaultHatchWaves(tier: EggTier): integer { export function getEggTierDefaultHatchWaves(tier: EggTier): integer {
switch (tier) { switch (tier) {
case EggTier.COMMON: case EggTier.COMMON:
return 10; return 10;
case EggTier.GREAT: case EggTier.GREAT:
return 25; return 25;
case EggTier.ULTRA: case EggTier.ULTRA:
return 50; return 50;
} }
return 100; return 100;
} }
@ -56,14 +56,14 @@ export function getEggDescriptor(egg: Egg): string {
if (egg.isManaphyEgg()) if (egg.isManaphyEgg())
return 'Manaphy'; return 'Manaphy';
switch (egg.tier) { switch (egg.tier) {
case EggTier.GREAT: case EggTier.GREAT:
return i18next.t('egg:greatTier'); return i18next.t('egg:greatTier');
case EggTier.ULTRA: case EggTier.ULTRA:
return i18next.t('egg:ultraTier'); return i18next.t('egg:ultraTier');
case EggTier.MASTER: case EggTier.MASTER:
return i18next.t('egg:masterTier'); return i18next.t('egg:masterTier');
default: default:
return i18next.t('egg:defaultTier'); return i18next.t('egg:defaultTier');
} }
} }
@ -79,12 +79,12 @@ export function getEggHatchWavesMessage(hatchWaves: integer): string {
export function getEggGachaTypeDescriptor(scene: BattleScene, egg: Egg): string { export function getEggGachaTypeDescriptor(scene: BattleScene, egg: Egg): string {
switch (egg.gachaType) { switch (egg.gachaType) {
case GachaType.LEGENDARY: case GachaType.LEGENDARY:
return `${i18next.t('egg:gachaTypeLegendary')} (${getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(scene, egg.timestamp)).getName()})`; return `${i18next.t('egg:gachaTypeLegendary')} (${getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(scene, egg.timestamp)).getName()})`;
case GachaType.MOVE: case GachaType.MOVE:
return i18next.t('egg:gachaTypeMove'); return i18next.t('egg:gachaTypeMove');
case GachaType.SHINY: case GachaType.SHINY:
return i18next.t('egg:gachaTypeShiny'); return i18next.t('egg:gachaTypeShiny');
} }
} }
@ -101,11 +101,11 @@ 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];
}, offset, EGG_SEED.toString()); }, offset, EGG_SEED.toString());
return ret; return ret;
} }

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

@ -3,4 +3,4 @@ export enum EggTier {
GREAT, GREAT,
ULTRA, ULTRA,
MASTER MASTER
} }

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,
@ -2175,4 +2175,4 @@ export const defaultStarterSpecies: Species[] = [
Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.ROWLET, Species.LITTEN, Species.POPPLIO,
Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE,
Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY
]; ];

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 ],
@ -27,24 +27,24 @@ export function getLevelTotalExp(level: integer, growthRate: GrowthRate): intege
let ret: integer; let ret: integer;
switch (growthRate) { switch (growthRate) {
case GrowthRate.ERRATIC: case GrowthRate.ERRATIC:
ret = (Math.pow(level, 4) + (Math.pow(level, 3) * 2000)) / 3500; ret = (Math.pow(level, 4) + (Math.pow(level, 3) * 2000)) / 3500;
break; break;
case GrowthRate.FAST: case GrowthRate.FAST:
ret = Math.pow(level, 3) * 4 / 5; ret = Math.pow(level, 3) * 4 / 5;
break; break;
case GrowthRate.MEDIUM_FAST: case GrowthRate.MEDIUM_FAST:
ret = Math.pow(level, 3); ret = Math.pow(level, 3);
break; break;
case GrowthRate.MEDIUM_SLOW: case GrowthRate.MEDIUM_SLOW:
ret = (Math.pow(level, 3) * 6 / 5) - (15 * Math.pow(level, 2)) + (100 * level) - 140; ret = (Math.pow(level, 3) * 6 / 5) - (15 * Math.pow(level, 2)) + (100 * level) - 140;
break; break;
case GrowthRate.SLOW: case GrowthRate.SLOW:
ret = Math.pow(level, 3) * 5 / 4; ret = Math.pow(level, 3) * 5 / 4;
break; break;
case GrowthRate.FLUCTUATING: case GrowthRate.FLUCTUATING:
ret = (Math.pow(level, 3) * ((level / 2) + 8)) * 4 / (100 + level); ret = (Math.pow(level, 3) * ((level / 2) + 8)) * 4 / (100 + level);
break; break;
} }
if (growthRate !== GrowthRate.MEDIUM_FAST) if (growthRate !== GrowthRate.MEDIUM_FAST)
@ -59,17 +59,17 @@ export function getLevelRelExp(level: integer, growthRate: GrowthRate): number {
export function getGrowthRateColor(growthRate: GrowthRate, shadow?: boolean) { export function getGrowthRateColor(growthRate: GrowthRate, shadow?: boolean) {
switch (growthRate) { switch (growthRate) {
case GrowthRate.ERRATIC: case GrowthRate.ERRATIC:
return !shadow ? '#f85888' : '#906060'; return !shadow ? '#f85888' : '#906060';
case GrowthRate.FAST: case GrowthRate.FAST:
return !shadow ? '#f8d030' : '#b8a038'; return !shadow ? '#f8d030' : '#b8a038';
case GrowthRate.MEDIUM_FAST: case GrowthRate.MEDIUM_FAST:
return !shadow ? '#78c850' : '#588040'; return !shadow ? '#78c850' : '#588040';
case GrowthRate.MEDIUM_SLOW: case GrowthRate.MEDIUM_SLOW:
return !shadow ? '#6890f0' : '#807870'; return !shadow ? '#6890f0' : '#807870';
case GrowthRate.SLOW: case GrowthRate.SLOW:
return !shadow ? '#f08030' : '#c03028'; return !shadow ? '#f08030' : '#c03028';
case GrowthRate.FLUCTUATING: case GrowthRate.FLUCTUATING:
return !shadow ? '#a040a0' : '#483850'; return !shadow ? '#a040a0' : '#483850';
} }
} }

View File

@ -5,21 +5,21 @@ export enum Gender {
} }
export function getGenderSymbol(gender: Gender) { export function getGenderSymbol(gender: Gender) {
switch (gender) { switch (gender) {
case Gender.MALE: case Gender.MALE:
return '♂'; return '♂';
case Gender.FEMALE: case Gender.FEMALE:
return '♀'; return '♀';
} }
return ''; return '';
} }
export function getGenderColor(gender: Gender, shadow?: boolean) { export function getGenderColor(gender: Gender, shadow?: boolean) {
switch (gender) { switch (gender) {
case Gender.MALE: case Gender.MALE:
return shadow ? '#006090' : '#40c8f8'; return shadow ? '#006090' : '#40c8f8';
case Gender.FEMALE: case Gender.FEMALE:
return shadow ? '#984038' : '#f89890'; return shadow ? '#984038' : '#f89890';
} }
return '#ffffff'; return '#ffffff';
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
import { Stat, getStatName } from "./pokemon-stat"; import { Stat, getStatName } from './pokemon-stat';
import * as Utils from "../utils"; import * as Utils from '../utils';
import { TextStyle, getBBCodeFrag } from "../ui/text"; import { TextStyle, getBBCodeFrag } from '../ui/text';
import { UiTheme } from "#app/enums/ui-theme"; import { UiTheme } from '#app/enums/ui-theme';
import i18next from 'i18next'; import i18next from 'i18next';
export enum Nature { export enum Nature {
@ -36,13 +36,13 @@ export function getNatureName(nature: Nature, includeStatEffects: boolean = fals
let ret = Utils.toReadableString(Nature[nature]); let ret = Utils.toReadableString(Nature[nature]);
//Translating nature //Translating nature
if(i18next.exists('nature:' + ret)){ if(i18next.exists('nature:' + ret)){
ret = i18next.t('nature:' + ret as any) ret = i18next.t('nature:' + ret as any);
} }
if (includeStatEffects) { if (includeStatEffects) {
const stats = Utils.getEnumValues(Stat).slice(1); const stats = Utils.getEnumValues(Stat).slice(1);
let increasedStat: Stat = null; let increasedStat: Stat = null;
let decreasedStat: Stat = null; let decreasedStat: Stat = null;
for (let stat of stats) { for (const stat of stats) {
const multiplier = getNatureStatMultiplier(nature, stat); const multiplier = getNatureStatMultiplier(nature, stat);
if (multiplier > 1) if (multiplier > 1)
increasedStat = stat; increasedStat = stat;
@ -61,77 +61,77 @@ export function getNatureName(nature: Nature, includeStatEffects: boolean = fals
export function getNatureStatMultiplier(nature: Nature, stat: Stat): number { export function getNatureStatMultiplier(nature: Nature, stat: Stat): number {
switch (stat) { switch (stat) {
case Stat.ATK: case Stat.ATK:
switch (nature) { switch (nature) {
case Nature.LONELY: case Nature.LONELY:
case Nature.BRAVE: case Nature.BRAVE:
case Nature.ADAMANT: case Nature.ADAMANT:
case Nature.NAUGHTY: case Nature.NAUGHTY:
return 1.1; return 1.1;
case Nature.BOLD: case Nature.BOLD:
case Nature.TIMID: case Nature.TIMID:
case Nature.MODEST: case Nature.MODEST:
case Nature.CALM: case Nature.CALM:
return 0.9; return 0.9;
} }
break; break;
case Stat.DEF: case Stat.DEF:
switch (nature) { switch (nature) {
case Nature.BOLD: case Nature.BOLD:
case Nature.RELAXED: case Nature.RELAXED:
case Nature.IMPISH: case Nature.IMPISH:
case Nature.LAX: case Nature.LAX:
return 1.1; return 1.1;
case Nature.LONELY: case Nature.LONELY:
case Nature.HASTY: case Nature.HASTY:
case Nature.MILD: case Nature.MILD:
case Nature.GENTLE: case Nature.GENTLE:
return 0.9; return 0.9;
} }
break; break;
case Stat.SPATK: case Stat.SPATK:
switch (nature) { switch (nature) {
case Nature.MODEST: case Nature.MODEST:
case Nature.MILD: case Nature.MILD:
case Nature.QUIET: case Nature.QUIET:
case Nature.RASH: case Nature.RASH:
return 1.1; return 1.1;
case Nature.ADAMANT: case Nature.ADAMANT:
case Nature.IMPISH: case Nature.IMPISH:
case Nature.JOLLY: case Nature.JOLLY:
case Nature.CAREFUL: case Nature.CAREFUL:
return 0.9; return 0.9;
} }
break; break;
case Stat.SPDEF: case Stat.SPDEF:
switch (nature) { switch (nature) {
case Nature.CALM: case Nature.CALM:
case Nature.GENTLE: case Nature.GENTLE:
case Nature.SASSY: case Nature.SASSY:
case Nature.CAREFUL: case Nature.CAREFUL:
return 1.1; return 1.1;
case Nature.NAUGHTY: case Nature.NAUGHTY:
case Nature.LAX: case Nature.LAX:
case Nature.NAIVE: case Nature.NAIVE:
case Nature.RASH: case Nature.RASH:
return 0.9; return 0.9;
} }
break; break;
case Stat.SPD: case Stat.SPD:
switch (nature) { switch (nature) {
case Nature.TIMID: case Nature.TIMID:
case Nature.HASTY: case Nature.HASTY:
case Nature.JOLLY: case Nature.JOLLY:
case Nature.NAIVE: case Nature.NAIVE:
return 1.1; return 1.1;
case Nature.BRAVE: case Nature.BRAVE:
case Nature.RELAXED: case Nature.RELAXED:
case Nature.QUIET: case Nature.QUIET:
case Nature.SASSY: case Nature.SASSY:
return 0.9; return 0.9;
} }
break; break;
} }
return 1; return 1;
} }

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,81 +8,81 @@ 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) {
case PokeballType.POKEBALL: case PokeballType.POKEBALL:
return 'pb'; return 'pb';
case PokeballType.GREAT_BALL: case PokeballType.GREAT_BALL:
return 'gb'; return 'gb';
case PokeballType.ULTRA_BALL: case PokeballType.ULTRA_BALL:
return 'ub'; return 'ub';
case PokeballType.ROGUE_BALL: case PokeballType.ROGUE_BALL:
return 'rb'; return 'rb';
case PokeballType.MASTER_BALL: case PokeballType.MASTER_BALL:
return 'mb'; return 'mb';
case PokeballType.LUXURY_BALL: case PokeballType.LUXURY_BALL:
return 'lb'; return 'lb';
} }
} }
export function getPokeballName(type: PokeballType): string { export function getPokeballName(type: PokeballType): string {
let ret: string; let ret: string;
switch (type) { switch (type) {
case PokeballType.POKEBALL: case PokeballType.POKEBALL:
ret = i18next.t('pokeball:pokeBall'); ret = i18next.t('pokeball:pokeBall');
break; break;
case PokeballType.GREAT_BALL: case PokeballType.GREAT_BALL:
ret = i18next.t('pokeball:greatBall'); ret = i18next.t('pokeball:greatBall');
break; break;
case PokeballType.ULTRA_BALL: case PokeballType.ULTRA_BALL:
ret = i18next.t('pokeball:ultraBall'); ret = i18next.t('pokeball:ultraBall');
break; break;
case PokeballType.ROGUE_BALL: case PokeballType.ROGUE_BALL:
ret = i18next.t('pokeball:rogueBall'); ret = i18next.t('pokeball:rogueBall');
break; break;
case PokeballType.MASTER_BALL: case PokeballType.MASTER_BALL:
ret = i18next.t('pokeball:masterBall'); ret = i18next.t('pokeball:masterBall');
break; break;
case PokeballType.LUXURY_BALL: case PokeballType.LUXURY_BALL:
ret = i18next.t('pokeball:luxuryBall'); ret = i18next.t('pokeball:luxuryBall');
break; break;
} }
return ret; return ret;
} }
export function getPokeballCatchMultiplier(type: PokeballType): number { export function getPokeballCatchMultiplier(type: PokeballType): number {
switch (type) { switch (type) {
case PokeballType.POKEBALL: case PokeballType.POKEBALL:
return 1; return 1;
case PokeballType.GREAT_BALL: case PokeballType.GREAT_BALL:
return 1.5; return 1.5;
case PokeballType.ULTRA_BALL: case PokeballType.ULTRA_BALL:
return 2; return 2;
case PokeballType.ROGUE_BALL: case PokeballType.ROGUE_BALL:
return 3; return 3;
case PokeballType.MASTER_BALL: case PokeballType.MASTER_BALL:
return -1; return -1;
case PokeballType.LUXURY_BALL: case PokeballType.LUXURY_BALL:
return 1; return 1;
} }
} }
export function getPokeballTintColor(type: PokeballType): number { export function getPokeballTintColor(type: PokeballType): number {
switch (type) { switch (type) {
case PokeballType.POKEBALL: case PokeballType.POKEBALL:
return 0xd52929; return 0xd52929;
case PokeballType.GREAT_BALL: case PokeballType.GREAT_BALL:
return 0x94b4de; return 0x94b4de;
case PokeballType.ULTRA_BALL: case PokeballType.ULTRA_BALL:
return 0xe6cd31; return 0xe6cd31;
case PokeballType.ROGUE_BALL: case PokeballType.ROGUE_BALL:
return 0xd52929; return 0xd52929;
case PokeballType.MASTER_BALL: case PokeballType.MASTER_BALL:
return 0xa441bd; return 0xa441bd;
case PokeballType.LUXURY_BALL: case PokeballType.LUXURY_BALL:
return 0xffde6a; return 0xffde6a;
} }
} }
@ -90,7 +90,7 @@ export function doPokeballBounceAnim(scene: BattleScene, pokeball: Phaser.GameOb
let bouncePower = 1; let bouncePower = 1;
let bounceYOffset = y1; let bounceYOffset = y1;
let bounceY = y2; let bounceY = y2;
let yd = y2 - y1; const yd = y2 - y1;
const doBounce = () => { const doBounce = () => {
scene.tweens.add({ scene.tweens.add({
@ -121,4 +121,4 @@ export function doPokeballBounceAnim(scene: BattleScene, pokeball: Phaser.GameOb
}; };
doBounce(); doBounce();
} }

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,
@ -1486,8 +1486,8 @@ export const pokemonEvolutions: PokemonEvolutions = {
], ],
[Species.ONIX]: [ [Species.ONIX]: [
new SpeciesEvolution(Species.STEELIX, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition( new SpeciesEvolution(Species.STEELIX, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(
p => p.moveset.filter(m => m.getMove().type === Type.STEEL).length > 0), p => p.moveset.filter(m => m.getMove().type === Type.STEEL).length > 0),
SpeciesWildEvolutionDelay.VERY_LONG) SpeciesWildEvolutionDelay.VERY_LONG)
], ],
[Species.RHYDON]: [ [Species.RHYDON]: [
new SpeciesEvolution(Species.RHYPERIOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Protector */), SpeciesWildEvolutionDelay.VERY_LONG) new SpeciesEvolution(Species.RHYPERIOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Protector */), SpeciesWildEvolutionDelay.VERY_LONG)
@ -1498,7 +1498,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
[Species.SCYTHER]: [ [Species.SCYTHER]: [
new SpeciesEvolution(Species.SCIZOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition( new SpeciesEvolution(Species.SCIZOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(
p => p.moveset.filter(m => m.getMove().type === Type.STEEL).length > 0), p => p.moveset.filter(m => m.getMove().type === Type.STEEL).length > 0),
SpeciesWildEvolutionDelay.VERY_LONG), SpeciesWildEvolutionDelay.VERY_LONG),
new SpeciesEvolution(Species.KLEAVOR, 1, EvolutionItem.BLACK_AUGURITE, null, SpeciesWildEvolutionDelay.VERY_LONG) new SpeciesEvolution(Species.KLEAVOR, 1, EvolutionItem.BLACK_AUGURITE, null, SpeciesWildEvolutionDelay.VERY_LONG)
], ],
[Species.ELECTABUZZ]: [ [Species.ELECTABUZZ]: [
@ -1623,10 +1623,10 @@ export const pokemonPrevolutions: PokemonPrevolutions = {};
const prevolutionKeys = Object.keys(pokemonEvolutions); const prevolutionKeys = Object.keys(pokemonEvolutions);
prevolutionKeys.forEach(pk => { prevolutionKeys.forEach(pk => {
const evolutions = pokemonEvolutions[pk]; const evolutions = pokemonEvolutions[pk];
for (let ev of evolutions) { for (const ev of evolutions) {
if (ev.evoFormKey && megaFormKeys.indexOf(ev.evoFormKey) > -1) if (ev.evoFormKey && megaFormKeys.indexOf(ev.evoFormKey) > -1)
continue; continue;
pokemonPrevolutions[ev.speciesId] = parseInt(pk) as Species; pokemonPrevolutions[ev.speciesId] = parseInt(pk) as Species;
} }
}); });
} }

View File

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

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,29 +7,29 @@ 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;
switch (stat) { switch (stat) {
case Stat.HP: case Stat.HP:
ret = !shorten ? i18next.t('pokemonInfo:Stat.HP') : i18next.t('pokemonInfo:Stat.HPshortened'); ret = !shorten ? i18next.t('pokemonInfo:Stat.HP') : i18next.t('pokemonInfo:Stat.HPshortened');
break; break;
case Stat.ATK: case Stat.ATK:
ret = !shorten ? i18next.t('pokemonInfo:Stat.ATK') : i18next.t('pokemonInfo:Stat.ATKshortened'); ret = !shorten ? i18next.t('pokemonInfo:Stat.ATK') : i18next.t('pokemonInfo:Stat.ATKshortened');
break; break;
case Stat.DEF: case Stat.DEF:
ret = !shorten ? i18next.t('pokemonInfo:Stat.DEF') : i18next.t('pokemonInfo:Stat.DEFshortened'); ret = !shorten ? i18next.t('pokemonInfo:Stat.DEF') : i18next.t('pokemonInfo:Stat.DEFshortened');
break; break;
case Stat.SPATK: case Stat.SPATK:
ret = !shorten ? i18next.t('pokemonInfo:Stat.SPATK') : i18next.t('pokemonInfo:Stat.SPATKshortened'); ret = !shorten ? i18next.t('pokemonInfo:Stat.SPATK') : i18next.t('pokemonInfo:Stat.SPATKshortened');
break; break;
case Stat.SPDEF: case Stat.SPDEF:
ret = !shorten ? i18next.t('pokemonInfo:Stat.SPDEF') : i18next.t('pokemonInfo:Stat.SPDEFshortened'); ret = !shorten ? i18next.t('pokemonInfo:Stat.SPDEF') : i18next.t('pokemonInfo:Stat.SPDEFshortened');
break; break;
case Stat.SPD: case Stat.SPD:
ret = !shorten ? i18next.t('pokemonInfo:Stat.SPD') : i18next.t('pokemonInfo:Stat.SPDshortened'); ret = !shorten ? i18next.t('pokemonInfo:Stat.SPD') : i18next.t('pokemonInfo:Stat.SPDshortened');
break; break;
} }
return ret; return ret;
} }

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,
@ -34,18 +34,18 @@ export class Status {
export function getStatusEffectObtainText(statusEffect: StatusEffect, sourceText?: string): string { export function getStatusEffectObtainText(statusEffect: StatusEffect, sourceText?: string): string {
const sourceClause = sourceText ? ` ${statusEffect !== StatusEffect.SLEEP ? 'by' : 'from'} ${sourceText}` : ''; const sourceClause = sourceText ? ` ${statusEffect !== StatusEffect.SLEEP ? 'by' : 'from'} ${sourceText}` : '';
switch (statusEffect) { switch (statusEffect) {
case StatusEffect.POISON: case StatusEffect.POISON:
return `\nwas poisoned${sourceClause}!`; return `\nwas poisoned${sourceClause}!`;
case StatusEffect.TOXIC: case StatusEffect.TOXIC:
return `\nwas badly poisoned${sourceClause}!`; return `\nwas badly poisoned${sourceClause}!`;
case StatusEffect.PARALYSIS: case StatusEffect.PARALYSIS:
return ` was paralyzed${sourceClause}!\nIt may be unable to move!`; return ` was paralyzed${sourceClause}!\nIt may be unable to move!`;
case StatusEffect.SLEEP: case StatusEffect.SLEEP:
return `\nfell asleep${sourceClause}!`; return `\nfell asleep${sourceClause}!`;
case StatusEffect.FREEZE: case StatusEffect.FREEZE:
return `\nwas frozen solid${sourceClause}!`; return `\nwas frozen solid${sourceClause}!`;
case StatusEffect.BURN: case StatusEffect.BURN:
return `\nwas burned${sourceClause}!`; return `\nwas burned${sourceClause}!`;
} }
return ''; return '';
@ -53,17 +53,17 @@ export function getStatusEffectObtainText(statusEffect: StatusEffect, sourceText
export function getStatusEffectActivationText(statusEffect: StatusEffect): string { export function getStatusEffectActivationText(statusEffect: StatusEffect): string {
switch (statusEffect) { switch (statusEffect) {
case StatusEffect.POISON: case StatusEffect.POISON:
case StatusEffect.TOXIC: case StatusEffect.TOXIC:
return ' is hurt\nby poison!'; return ' is hurt\nby poison!';
case StatusEffect.PARALYSIS: case StatusEffect.PARALYSIS:
return ' is paralyzed!\nIt can\'t move!'; return ' is paralyzed!\nIt can\'t move!';
case StatusEffect.SLEEP: case StatusEffect.SLEEP:
return ' is fast asleep.'; return ' is fast asleep.';
case StatusEffect.FREEZE: case StatusEffect.FREEZE:
return ' is\nfrozen solid!'; return ' is\nfrozen solid!';
case StatusEffect.BURN: case StatusEffect.BURN:
return ' is hurt\nby its burn!'; return ' is hurt\nby its burn!';
} }
return ''; return '';
@ -71,17 +71,17 @@ export function getStatusEffectActivationText(statusEffect: StatusEffect): strin
export function getStatusEffectOverlapText(statusEffect: StatusEffect): string { export function getStatusEffectOverlapText(statusEffect: StatusEffect): string {
switch (statusEffect) { switch (statusEffect) {
case StatusEffect.POISON: case StatusEffect.POISON:
case StatusEffect.TOXIC: case StatusEffect.TOXIC:
return ' is\nalready poisoned!'; return ' is\nalready poisoned!';
case StatusEffect.PARALYSIS: case StatusEffect.PARALYSIS:
return ' is\nalready paralyzed!'; return ' is\nalready paralyzed!';
case StatusEffect.SLEEP: case StatusEffect.SLEEP:
return ' is\nalready asleep!'; return ' is\nalready asleep!';
case StatusEffect.FREEZE: case StatusEffect.FREEZE:
return ' is\nalready frozen!'; return ' is\nalready frozen!';
case StatusEffect.BURN: case StatusEffect.BURN:
return ' is\nalready burned!'; return ' is\nalready burned!';
} }
return ''; return '';
@ -89,17 +89,17 @@ export function getStatusEffectOverlapText(statusEffect: StatusEffect): string {
export function getStatusEffectHealText(statusEffect: StatusEffect): string { export function getStatusEffectHealText(statusEffect: StatusEffect): string {
switch (statusEffect) { switch (statusEffect) {
case StatusEffect.POISON: case StatusEffect.POISON:
case StatusEffect.TOXIC: case StatusEffect.TOXIC:
return ' was\ncured of its poison!'; return ' was\ncured of its poison!';
case StatusEffect.PARALYSIS: case StatusEffect.PARALYSIS:
return ' was\nhealed of paralysis!'; return ' was\nhealed of paralysis!';
case StatusEffect.SLEEP: case StatusEffect.SLEEP:
return ' woke up!'; return ' woke up!';
case StatusEffect.FREEZE: case StatusEffect.FREEZE:
return ' was\ndefrosted!'; return ' was\ndefrosted!';
case StatusEffect.BURN: case StatusEffect.BURN:
return ' was\nhealed of its burn!'; return ' was\nhealed of its burn!';
} }
return ''; return '';
@ -107,30 +107,30 @@ export function getStatusEffectHealText(statusEffect: StatusEffect): string {
export function getStatusEffectDescriptor(statusEffect: StatusEffect): string { export function getStatusEffectDescriptor(statusEffect: StatusEffect): string {
switch (statusEffect) { switch (statusEffect) {
case StatusEffect.POISON: case StatusEffect.POISON:
case StatusEffect.TOXIC: case StatusEffect.TOXIC:
return 'poisoning'; return 'poisoning';
case StatusEffect.PARALYSIS: case StatusEffect.PARALYSIS:
return 'paralysis'; return 'paralysis';
case StatusEffect.SLEEP: case StatusEffect.SLEEP:
return 'sleep'; return 'sleep';
case StatusEffect.FREEZE: case StatusEffect.FREEZE:
return 'freezing'; return 'freezing';
case StatusEffect.BURN: case StatusEffect.BURN:
return 'burn'; return 'burn';
} }
} }
export function getStatusEffectCatchRateMultiplier(statusEffect: StatusEffect): number { export function getStatusEffectCatchRateMultiplier(statusEffect: StatusEffect): number {
switch (statusEffect) { switch (statusEffect) {
case StatusEffect.POISON: case StatusEffect.POISON:
case StatusEffect.TOXIC: case StatusEffect.TOXIC:
case StatusEffect.PARALYSIS: case StatusEffect.PARALYSIS:
case StatusEffect.BURN: case StatusEffect.BURN:
return 1.5; return 1.5;
case StatusEffect.SLEEP: case StatusEffect.SLEEP:
case StatusEffect.FREEZE: case StatusEffect.FREEZE:
return 2.5; return 2.5;
} }
return 1; return 1;
@ -174,4 +174,4 @@ export function getRandomStatus(statusA: Status, statusB: Status): Status {
return Utils.randIntRange(0, 2) ? statusA : statusB; return Utils.randIntRange(0, 2) ? statusA : statusB;
} }

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,
@ -18,19 +18,19 @@ export function getTempBattleStatName(tempBattleStat: TempBattleStat) {
export function getTempBattleStatBoosterItemName(tempBattleStat: TempBattleStat) { export function getTempBattleStatBoosterItemName(tempBattleStat: TempBattleStat) {
switch (tempBattleStat) { switch (tempBattleStat) {
case TempBattleStat.ATK: case TempBattleStat.ATK:
return 'X Attack'; return 'X Attack';
case TempBattleStat.DEF: case TempBattleStat.DEF:
return 'X Defense'; return 'X Defense';
case TempBattleStat.SPATK: case TempBattleStat.SPATK:
return 'X Sp. Atk'; return 'X Sp. Atk';
case TempBattleStat.SPDEF: case TempBattleStat.SPDEF:
return 'X Sp. Def'; return 'X Sp. Def';
case TempBattleStat.SPD: case TempBattleStat.SPD:
return 'X Speed'; return 'X Speed';
case TempBattleStat.ACC: case TempBattleStat.ACC:
return 'X Accuracy'; return 'X Accuracy';
case TempBattleStat.CRIT: case TempBattleStat.CRIT:
return 'Dire Hit'; return 'Dire Hit';
} }
} }

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,
@ -32,18 +32,18 @@ export class Terrain {
getAttackTypeMultiplier(attackType: Type): number { getAttackTypeMultiplier(attackType: Type): number {
switch (this.terrainType) { switch (this.terrainType) {
case TerrainType.ELECTRIC: case TerrainType.ELECTRIC:
if (attackType === Type.ELECTRIC) if (attackType === Type.ELECTRIC)
return 1.3; return 1.3;
break; break;
case TerrainType.GRASSY: case TerrainType.GRASSY:
if (attackType === Type.GRASS) if (attackType === Type.GRASS)
return 1.3; return 1.3;
break; break;
case TerrainType.PSYCHIC: case TerrainType.PSYCHIC:
if (attackType === Type.PSYCHIC) if (attackType === Type.PSYCHIC)
return 1.3; return 1.3;
break; break;
} }
return 1; return 1;
@ -51,12 +51,12 @@ export class Terrain {
isMoveTerrainCancelled(user: Pokemon, targets: BattlerIndex[], move: Move): boolean { isMoveTerrainCancelled(user: Pokemon, targets: BattlerIndex[], move: Move): boolean {
switch (this.terrainType) { switch (this.terrainType) {
case TerrainType.PSYCHIC: case TerrainType.PSYCHIC:
if (!move.getAttrs(ProtectAttr).length) { if (!move.getAttrs(ProtectAttr).length) {
const priority = new Utils.IntegerHolder(move.priority); const priority = new Utils.IntegerHolder(move.priority);
applyAbAttrs(IncrementMovePriorityAbAttr, user, null, move, priority); applyAbAttrs(IncrementMovePriorityAbAttr, user, null, move, priority);
return priority.value > 0 && user.getOpponents().filter(o => targets.includes(o.getBattlerIndex())).length > 0; return priority.value > 0 && user.getOpponents().filter(o => targets.includes(o.getBattlerIndex())).length > 0;
} }
} }
return false; return false;
@ -65,15 +65,15 @@ export class Terrain {
export function getTerrainColor(terrainType: TerrainType): [ integer, integer, integer ] { export function getTerrainColor(terrainType: TerrainType): [ integer, integer, integer ] {
switch (terrainType) { switch (terrainType) {
case TerrainType.MISTY: case TerrainType.MISTY:
return [ 232, 136, 200 ]; return [ 232, 136, 200 ];
case TerrainType.ELECTRIC: case TerrainType.ELECTRIC:
return [ 248, 248, 120 ]; return [ 248, 248, 120 ];
case TerrainType.GRASSY: case TerrainType.GRASSY:
return [ 120, 200, 80 ]; return [ 120, 200, 80 ];
case TerrainType.PSYCHIC: case TerrainType.PSYCHIC:
return [ 160, 64, 160 ]; return [ 160, 64, 160 ];
} }
return [ 0, 0, 0 ]; return [ 0, 0, 0 ];
} }

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>>
@ -64181,309 +64181,309 @@ interface TmPoolTiers {
} }
export const tmPoolTiers: TmPoolTiers = { export const tmPoolTiers: TmPoolTiers = {
[Moves.MEGA_PUNCH]: ModifierTier.GREAT, [Moves.MEGA_PUNCH]: ModifierTier.GREAT,
[Moves.PAY_DAY]: ModifierTier.ULTRA, [Moves.PAY_DAY]: ModifierTier.ULTRA,
[Moves.FIRE_PUNCH]: ModifierTier.GREAT, [Moves.FIRE_PUNCH]: ModifierTier.GREAT,
[Moves.ICE_PUNCH]: ModifierTier.GREAT, [Moves.ICE_PUNCH]: ModifierTier.GREAT,
[Moves.THUNDER_PUNCH]: ModifierTier.GREAT, [Moves.THUNDER_PUNCH]: ModifierTier.GREAT,
[Moves.SWORDS_DANCE]: ModifierTier.COMMON, [Moves.SWORDS_DANCE]: ModifierTier.COMMON,
[Moves.CUT]: ModifierTier.COMMON, [Moves.CUT]: ModifierTier.COMMON,
[Moves.FLY]: ModifierTier.COMMON, [Moves.FLY]: ModifierTier.COMMON,
[Moves.MEGA_KICK]: ModifierTier.GREAT, [Moves.MEGA_KICK]: ModifierTier.GREAT,
[Moves.BODY_SLAM]: ModifierTier.GREAT, [Moves.BODY_SLAM]: ModifierTier.GREAT,
[Moves.TAKE_DOWN]: ModifierTier.GREAT, [Moves.TAKE_DOWN]: ModifierTier.GREAT,
[Moves.DOUBLE_EDGE]: ModifierTier.ULTRA, [Moves.DOUBLE_EDGE]: ModifierTier.ULTRA,
[Moves.PIN_MISSILE]: ModifierTier.COMMON, [Moves.PIN_MISSILE]: ModifierTier.COMMON,
[Moves.ROAR]: ModifierTier.COMMON, [Moves.ROAR]: ModifierTier.COMMON,
[Moves.FLAMETHROWER]: ModifierTier.ULTRA, [Moves.FLAMETHROWER]: ModifierTier.ULTRA,
[Moves.HYDRO_PUMP]: ModifierTier.ULTRA, [Moves.HYDRO_PUMP]: ModifierTier.ULTRA,
[Moves.SURF]: ModifierTier.ULTRA, [Moves.SURF]: ModifierTier.ULTRA,
[Moves.ICE_BEAM]: ModifierTier.ULTRA, [Moves.ICE_BEAM]: ModifierTier.ULTRA,
[Moves.BLIZZARD]: ModifierTier.ULTRA, [Moves.BLIZZARD]: ModifierTier.ULTRA,
[Moves.PSYBEAM]: ModifierTier.GREAT, [Moves.PSYBEAM]: ModifierTier.GREAT,
[Moves.HYPER_BEAM]: ModifierTier.ULTRA, [Moves.HYPER_BEAM]: ModifierTier.ULTRA,
[Moves.LOW_KICK]: ModifierTier.COMMON, [Moves.LOW_KICK]: ModifierTier.COMMON,
[Moves.STRENGTH]: ModifierTier.GREAT, [Moves.STRENGTH]: ModifierTier.GREAT,
[Moves.SOLAR_BEAM]: ModifierTier.ULTRA, [Moves.SOLAR_BEAM]: ModifierTier.ULTRA,
[Moves.FIRE_SPIN]: ModifierTier.COMMON, [Moves.FIRE_SPIN]: ModifierTier.COMMON,
[Moves.THUNDERBOLT]: ModifierTier.ULTRA, [Moves.THUNDERBOLT]: ModifierTier.ULTRA,
[Moves.THUNDER_WAVE]: ModifierTier.COMMON, [Moves.THUNDER_WAVE]: ModifierTier.COMMON,
[Moves.THUNDER]: ModifierTier.ULTRA, [Moves.THUNDER]: ModifierTier.ULTRA,
[Moves.EARTHQUAKE]: ModifierTier.ULTRA, [Moves.EARTHQUAKE]: ModifierTier.ULTRA,
[Moves.DIG]: ModifierTier.GREAT, [Moves.DIG]: ModifierTier.GREAT,
[Moves.TOXIC]: ModifierTier.GREAT, [Moves.TOXIC]: ModifierTier.GREAT,
[Moves.PSYCHIC]: ModifierTier.ULTRA, [Moves.PSYCHIC]: ModifierTier.ULTRA,
[Moves.AGILITY]: ModifierTier.COMMON, [Moves.AGILITY]: ModifierTier.COMMON,
[Moves.NIGHT_SHADE]: ModifierTier.COMMON, [Moves.NIGHT_SHADE]: ModifierTier.COMMON,
[Moves.SCREECH]: ModifierTier.COMMON, [Moves.SCREECH]: ModifierTier.COMMON,
[Moves.DOUBLE_TEAM]: ModifierTier.COMMON, [Moves.DOUBLE_TEAM]: ModifierTier.COMMON,
[Moves.CONFUSE_RAY]: ModifierTier.COMMON, [Moves.CONFUSE_RAY]: ModifierTier.COMMON,
[Moves.LIGHT_SCREEN]: ModifierTier.COMMON, [Moves.LIGHT_SCREEN]: ModifierTier.COMMON,
[Moves.HAZE]: ModifierTier.COMMON, [Moves.HAZE]: ModifierTier.COMMON,
[Moves.REFLECT]: ModifierTier.COMMON, [Moves.REFLECT]: ModifierTier.COMMON,
[Moves.FOCUS_ENERGY]: ModifierTier.COMMON, [Moves.FOCUS_ENERGY]: ModifierTier.COMMON,
[Moves.METRONOME]: ModifierTier.COMMON, [Moves.METRONOME]: ModifierTier.COMMON,
[Moves.SELF_DESTRUCT]: ModifierTier.GREAT, [Moves.SELF_DESTRUCT]: ModifierTier.GREAT,
[Moves.FIRE_BLAST]: ModifierTier.ULTRA, [Moves.FIRE_BLAST]: ModifierTier.ULTRA,
[Moves.WATERFALL]: ModifierTier.GREAT, [Moves.WATERFALL]: ModifierTier.GREAT,
[Moves.SWIFT]: ModifierTier.COMMON, [Moves.SWIFT]: ModifierTier.COMMON,
[Moves.AMNESIA]: ModifierTier.COMMON, [Moves.AMNESIA]: ModifierTier.COMMON,
[Moves.DREAM_EATER]: ModifierTier.GREAT, [Moves.DREAM_EATER]: ModifierTier.GREAT,
[Moves.LEECH_LIFE]: ModifierTier.ULTRA, [Moves.LEECH_LIFE]: ModifierTier.ULTRA,
[Moves.FLASH]: ModifierTier.COMMON, [Moves.FLASH]: ModifierTier.COMMON,
[Moves.EXPLOSION]: ModifierTier.GREAT, [Moves.EXPLOSION]: ModifierTier.GREAT,
[Moves.REST]: ModifierTier.COMMON, [Moves.REST]: ModifierTier.COMMON,
[Moves.ROCK_SLIDE]: ModifierTier.GREAT, [Moves.ROCK_SLIDE]: ModifierTier.GREAT,
[Moves.TRI_ATTACK]: ModifierTier.ULTRA, [Moves.TRI_ATTACK]: ModifierTier.ULTRA,
[Moves.SUPER_FANG]: ModifierTier.COMMON, [Moves.SUPER_FANG]: ModifierTier.COMMON,
[Moves.SUBSTITUTE]: ModifierTier.COMMON, [Moves.SUBSTITUTE]: ModifierTier.COMMON,
[Moves.THIEF]: ModifierTier.GREAT, [Moves.THIEF]: ModifierTier.GREAT,
[Moves.SNORE]: ModifierTier.COMMON, [Moves.SNORE]: ModifierTier.COMMON,
[Moves.CURSE]: ModifierTier.COMMON, [Moves.CURSE]: ModifierTier.COMMON,
[Moves.REVERSAL]: ModifierTier.COMMON, [Moves.REVERSAL]: ModifierTier.COMMON,
[Moves.SPITE]: ModifierTier.COMMON, [Moves.SPITE]: ModifierTier.COMMON,
[Moves.PROTECT]: ModifierTier.COMMON, [Moves.PROTECT]: ModifierTier.COMMON,
[Moves.SCARY_FACE]: ModifierTier.COMMON, [Moves.SCARY_FACE]: ModifierTier.COMMON,
[Moves.SLUDGE_BOMB]: ModifierTier.GREAT, [Moves.SLUDGE_BOMB]: ModifierTier.GREAT,
[Moves.MUD_SLAP]: ModifierTier.COMMON, [Moves.MUD_SLAP]: ModifierTier.COMMON,
[Moves.SPIKES]: ModifierTier.COMMON, [Moves.SPIKES]: ModifierTier.COMMON,
[Moves.ICY_WIND]: ModifierTier.GREAT, [Moves.ICY_WIND]: ModifierTier.GREAT,
[Moves.OUTRAGE]: ModifierTier.ULTRA, [Moves.OUTRAGE]: ModifierTier.ULTRA,
[Moves.SANDSTORM]: ModifierTier.COMMON, [Moves.SANDSTORM]: ModifierTier.COMMON,
[Moves.GIGA_DRAIN]: ModifierTier.ULTRA, [Moves.GIGA_DRAIN]: ModifierTier.ULTRA,
[Moves.ENDURE]: ModifierTier.COMMON, [Moves.ENDURE]: ModifierTier.COMMON,
[Moves.CHARM]: ModifierTier.COMMON, [Moves.CHARM]: ModifierTier.COMMON,
[Moves.FALSE_SWIPE]: ModifierTier.COMMON, [Moves.FALSE_SWIPE]: ModifierTier.COMMON,
[Moves.SWAGGER]: ModifierTier.COMMON, [Moves.SWAGGER]: ModifierTier.COMMON,
[Moves.STEEL_WING]: ModifierTier.GREAT, [Moves.STEEL_WING]: ModifierTier.GREAT,
[Moves.ATTRACT]: ModifierTier.COMMON, [Moves.ATTRACT]: ModifierTier.COMMON,
[Moves.SLEEP_TALK]: ModifierTier.COMMON, [Moves.SLEEP_TALK]: ModifierTier.COMMON,
[Moves.RETURN]: ModifierTier.ULTRA, [Moves.RETURN]: ModifierTier.ULTRA,
[Moves.FRUSTRATION]: ModifierTier.COMMON, [Moves.FRUSTRATION]: ModifierTier.COMMON,
[Moves.SAFEGUARD]: ModifierTier.COMMON, [Moves.SAFEGUARD]: ModifierTier.COMMON,
[Moves.PAIN_SPLIT]: ModifierTier.COMMON, [Moves.PAIN_SPLIT]: ModifierTier.COMMON,
[Moves.MEGAHORN]: ModifierTier.ULTRA, [Moves.MEGAHORN]: ModifierTier.ULTRA,
[Moves.BATON_PASS]: ModifierTier.COMMON, [Moves.BATON_PASS]: ModifierTier.COMMON,
[Moves.ENCORE]: ModifierTier.COMMON, [Moves.ENCORE]: ModifierTier.COMMON,
[Moves.IRON_TAIL]: ModifierTier.GREAT, [Moves.IRON_TAIL]: ModifierTier.GREAT,
[Moves.METAL_CLAW]: ModifierTier.COMMON, [Moves.METAL_CLAW]: ModifierTier.COMMON,
[Moves.HIDDEN_POWER]: ModifierTier.GREAT, [Moves.HIDDEN_POWER]: ModifierTier.GREAT,
[Moves.RAIN_DANCE]: ModifierTier.COMMON, [Moves.RAIN_DANCE]: ModifierTier.COMMON,
[Moves.SUNNY_DAY]: ModifierTier.COMMON, [Moves.SUNNY_DAY]: ModifierTier.COMMON,
[Moves.CRUNCH]: ModifierTier.GREAT, [Moves.CRUNCH]: ModifierTier.GREAT,
[Moves.PSYCH_UP]: ModifierTier.COMMON, [Moves.PSYCH_UP]: ModifierTier.COMMON,
[Moves.SHADOW_BALL]: ModifierTier.ULTRA, [Moves.SHADOW_BALL]: ModifierTier.ULTRA,
[Moves.FUTURE_SIGHT]: ModifierTier.GREAT, [Moves.FUTURE_SIGHT]: ModifierTier.GREAT,
[Moves.ROCK_SMASH]: ModifierTier.COMMON, [Moves.ROCK_SMASH]: ModifierTier.COMMON,
[Moves.WHIRLPOOL]: ModifierTier.COMMON, [Moves.WHIRLPOOL]: ModifierTier.COMMON,
[Moves.BEAT_UP]: ModifierTier.COMMON, [Moves.BEAT_UP]: ModifierTier.COMMON,
[Moves.UPROAR]: ModifierTier.GREAT, [Moves.UPROAR]: ModifierTier.GREAT,
[Moves.HEAT_WAVE]: ModifierTier.ULTRA, [Moves.HEAT_WAVE]: ModifierTier.ULTRA,
[Moves.HAIL]: ModifierTier.COMMON, [Moves.HAIL]: ModifierTier.COMMON,
[Moves.TORMENT]: ModifierTier.COMMON, [Moves.TORMENT]: ModifierTier.COMMON,
[Moves.WILL_O_WISP]: ModifierTier.COMMON, [Moves.WILL_O_WISP]: ModifierTier.COMMON,
[Moves.FACADE]: ModifierTier.GREAT, [Moves.FACADE]: ModifierTier.GREAT,
[Moves.FOCUS_PUNCH]: ModifierTier.COMMON, [Moves.FOCUS_PUNCH]: ModifierTier.COMMON,
[Moves.NATURE_POWER]: ModifierTier.COMMON, [Moves.NATURE_POWER]: ModifierTier.COMMON,
[Moves.CHARGE]: ModifierTier.COMMON, [Moves.CHARGE]: ModifierTier.COMMON,
[Moves.TAUNT]: ModifierTier.COMMON, [Moves.TAUNT]: ModifierTier.COMMON,
[Moves.HELPING_HAND]: ModifierTier.COMMON, [Moves.HELPING_HAND]: ModifierTier.COMMON,
[Moves.TRICK]: ModifierTier.COMMON, [Moves.TRICK]: ModifierTier.COMMON,
[Moves.SUPERPOWER]: ModifierTier.ULTRA, [Moves.SUPERPOWER]: ModifierTier.ULTRA,
[Moves.REVENGE]: ModifierTier.GREAT, [Moves.REVENGE]: ModifierTier.GREAT,
[Moves.BRICK_BREAK]: ModifierTier.GREAT, [Moves.BRICK_BREAK]: ModifierTier.GREAT,
[Moves.KNOCK_OFF]: ModifierTier.GREAT, [Moves.KNOCK_OFF]: ModifierTier.GREAT,
[Moves.ENDEAVOR]: ModifierTier.COMMON, [Moves.ENDEAVOR]: ModifierTier.COMMON,
[Moves.SKILL_SWAP]: ModifierTier.COMMON, [Moves.SKILL_SWAP]: ModifierTier.COMMON,
[Moves.IMPRISON]: ModifierTier.COMMON, [Moves.IMPRISON]: ModifierTier.COMMON,
[Moves.DIVE]: ModifierTier.GREAT, [Moves.DIVE]: ModifierTier.GREAT,
[Moves.FEATHER_DANCE]: ModifierTier.COMMON, [Moves.FEATHER_DANCE]: ModifierTier.COMMON,
[Moves.BLAZE_KICK]: ModifierTier.GREAT, [Moves.BLAZE_KICK]: ModifierTier.GREAT,
[Moves.HYPER_VOICE]: ModifierTier.ULTRA, [Moves.HYPER_VOICE]: ModifierTier.ULTRA,
[Moves.BLAST_BURN]: ModifierTier.ULTRA, [Moves.BLAST_BURN]: ModifierTier.ULTRA,
[Moves.HYDRO_CANNON]: ModifierTier.ULTRA, [Moves.HYDRO_CANNON]: ModifierTier.ULTRA,
[Moves.WEATHER_BALL]: ModifierTier.COMMON, [Moves.WEATHER_BALL]: ModifierTier.COMMON,
[Moves.FAKE_TEARS]: ModifierTier.COMMON, [Moves.FAKE_TEARS]: ModifierTier.COMMON,
[Moves.AIR_CUTTER]: ModifierTier.GREAT, [Moves.AIR_CUTTER]: ModifierTier.GREAT,
[Moves.OVERHEAT]: ModifierTier.ULTRA, [Moves.OVERHEAT]: ModifierTier.ULTRA,
[Moves.ROCK_TOMB]: ModifierTier.GREAT, [Moves.ROCK_TOMB]: ModifierTier.GREAT,
[Moves.METAL_SOUND]: ModifierTier.COMMON, [Moves.METAL_SOUND]: ModifierTier.COMMON,
[Moves.COSMIC_POWER]: ModifierTier.COMMON, [Moves.COSMIC_POWER]: ModifierTier.COMMON,
[Moves.SIGNAL_BEAM]: ModifierTier.GREAT, [Moves.SIGNAL_BEAM]: ModifierTier.GREAT,
[Moves.SAND_TOMB]: ModifierTier.COMMON, [Moves.SAND_TOMB]: ModifierTier.COMMON,
[Moves.MUDDY_WATER]: ModifierTier.GREAT, [Moves.MUDDY_WATER]: ModifierTier.GREAT,
[Moves.BULLET_SEED]: ModifierTier.GREAT, [Moves.BULLET_SEED]: ModifierTier.GREAT,
[Moves.AERIAL_ACE]: ModifierTier.GREAT, [Moves.AERIAL_ACE]: ModifierTier.GREAT,
[Moves.ICICLE_SPEAR]: ModifierTier.GREAT, [Moves.ICICLE_SPEAR]: ModifierTier.GREAT,
[Moves.IRON_DEFENSE]: ModifierTier.GREAT, [Moves.IRON_DEFENSE]: ModifierTier.GREAT,
[Moves.DRAGON_CLAW]: ModifierTier.ULTRA, [Moves.DRAGON_CLAW]: ModifierTier.ULTRA,
[Moves.FRENZY_PLANT]: ModifierTier.ULTRA, [Moves.FRENZY_PLANT]: ModifierTier.ULTRA,
[Moves.BULK_UP]: ModifierTier.COMMON, [Moves.BULK_UP]: ModifierTier.COMMON,
[Moves.BOUNCE]: ModifierTier.GREAT, [Moves.BOUNCE]: ModifierTier.GREAT,
[Moves.MUD_SHOT]: ModifierTier.GREAT, [Moves.MUD_SHOT]: ModifierTier.GREAT,
[Moves.POISON_TAIL]: ModifierTier.GREAT, [Moves.POISON_TAIL]: ModifierTier.GREAT,
[Moves.MAGICAL_LEAF]: ModifierTier.GREAT, [Moves.MAGICAL_LEAF]: ModifierTier.GREAT,
[Moves.CALM_MIND]: ModifierTier.GREAT, [Moves.CALM_MIND]: ModifierTier.GREAT,
[Moves.LEAF_BLADE]: ModifierTier.ULTRA, [Moves.LEAF_BLADE]: ModifierTier.ULTRA,
[Moves.DRAGON_DANCE]: ModifierTier.GREAT, [Moves.DRAGON_DANCE]: ModifierTier.GREAT,
[Moves.ROCK_BLAST]: ModifierTier.GREAT, [Moves.ROCK_BLAST]: ModifierTier.GREAT,
[Moves.WATER_PULSE]: ModifierTier.GREAT, [Moves.WATER_PULSE]: ModifierTier.GREAT,
[Moves.ROOST]: ModifierTier.GREAT, [Moves.ROOST]: ModifierTier.GREAT,
[Moves.GRAVITY]: ModifierTier.COMMON, [Moves.GRAVITY]: ModifierTier.COMMON,
[Moves.GYRO_BALL]: ModifierTier.COMMON, [Moves.GYRO_BALL]: ModifierTier.COMMON,
[Moves.BRINE]: ModifierTier.GREAT, [Moves.BRINE]: ModifierTier.GREAT,
[Moves.TAILWIND]: ModifierTier.GREAT, [Moves.TAILWIND]: ModifierTier.GREAT,
[Moves.U_TURN]: ModifierTier.GREAT, [Moves.U_TURN]: ModifierTier.GREAT,
[Moves.CLOSE_COMBAT]: ModifierTier.ULTRA, [Moves.CLOSE_COMBAT]: ModifierTier.ULTRA,
[Moves.PAYBACK]: ModifierTier.COMMON, [Moves.PAYBACK]: ModifierTier.COMMON,
[Moves.ASSURANCE]: ModifierTier.COMMON, [Moves.ASSURANCE]: ModifierTier.COMMON,
[Moves.EMBARGO]: ModifierTier.COMMON, [Moves.EMBARGO]: ModifierTier.COMMON,
[Moves.FLING]: ModifierTier.COMMON, [Moves.FLING]: ModifierTier.COMMON,
[Moves.POWER_SWAP]: ModifierTier.COMMON, [Moves.POWER_SWAP]: ModifierTier.COMMON,
[Moves.GUARD_SWAP]: ModifierTier.COMMON, [Moves.GUARD_SWAP]: ModifierTier.COMMON,
[Moves.TOXIC_SPIKES]: ModifierTier.GREAT, [Moves.TOXIC_SPIKES]: ModifierTier.GREAT,
[Moves.FLARE_BLITZ]: ModifierTier.ULTRA, [Moves.FLARE_BLITZ]: ModifierTier.ULTRA,
[Moves.AURA_SPHERE]: ModifierTier.GREAT, [Moves.AURA_SPHERE]: ModifierTier.GREAT,
[Moves.ROCK_POLISH]: ModifierTier.COMMON, [Moves.ROCK_POLISH]: ModifierTier.COMMON,
[Moves.POISON_JAB]: ModifierTier.GREAT, [Moves.POISON_JAB]: ModifierTier.GREAT,
[Moves.DARK_PULSE]: ModifierTier.GREAT, [Moves.DARK_PULSE]: ModifierTier.GREAT,
[Moves.SEED_BOMB]: ModifierTier.GREAT, [Moves.SEED_BOMB]: ModifierTier.GREAT,
[Moves.AIR_SLASH]: ModifierTier.GREAT, [Moves.AIR_SLASH]: ModifierTier.GREAT,
[Moves.X_SCISSOR]: ModifierTier.GREAT, [Moves.X_SCISSOR]: ModifierTier.GREAT,
[Moves.BUG_BUZZ]: ModifierTier.GREAT, [Moves.BUG_BUZZ]: ModifierTier.GREAT,
[Moves.DRAGON_PULSE]: ModifierTier.GREAT, [Moves.DRAGON_PULSE]: ModifierTier.GREAT,
[Moves.POWER_GEM]: ModifierTier.GREAT, [Moves.POWER_GEM]: ModifierTier.GREAT,
[Moves.DRAIN_PUNCH]: ModifierTier.GREAT, [Moves.DRAIN_PUNCH]: ModifierTier.GREAT,
[Moves.VACUUM_WAVE]: ModifierTier.COMMON, [Moves.VACUUM_WAVE]: ModifierTier.COMMON,
[Moves.FOCUS_BLAST]: ModifierTier.GREAT, [Moves.FOCUS_BLAST]: ModifierTier.GREAT,
[Moves.ENERGY_BALL]: ModifierTier.GREAT, [Moves.ENERGY_BALL]: ModifierTier.GREAT,
[Moves.BRAVE_BIRD]: ModifierTier.ULTRA, [Moves.BRAVE_BIRD]: ModifierTier.ULTRA,
[Moves.EARTH_POWER]: ModifierTier.ULTRA, [Moves.EARTH_POWER]: ModifierTier.ULTRA,
[Moves.GIGA_IMPACT]: ModifierTier.GREAT, [Moves.GIGA_IMPACT]: ModifierTier.GREAT,
[Moves.NASTY_PLOT]: ModifierTier.COMMON, [Moves.NASTY_PLOT]: ModifierTier.COMMON,
[Moves.AVALANCHE]: ModifierTier.GREAT, [Moves.AVALANCHE]: ModifierTier.GREAT,
[Moves.SHADOW_CLAW]: ModifierTier.GREAT, [Moves.SHADOW_CLAW]: ModifierTier.GREAT,
[Moves.THUNDER_FANG]: ModifierTier.GREAT, [Moves.THUNDER_FANG]: ModifierTier.GREAT,
[Moves.ICE_FANG]: ModifierTier.GREAT, [Moves.ICE_FANG]: ModifierTier.GREAT,
[Moves.FIRE_FANG]: ModifierTier.GREAT, [Moves.FIRE_FANG]: ModifierTier.GREAT,
[Moves.PSYCHO_CUT]: ModifierTier.GREAT, [Moves.PSYCHO_CUT]: ModifierTier.GREAT,
[Moves.ZEN_HEADBUTT]: ModifierTier.GREAT, [Moves.ZEN_HEADBUTT]: ModifierTier.GREAT,
[Moves.FLASH_CANNON]: ModifierTier.GREAT, [Moves.FLASH_CANNON]: ModifierTier.GREAT,
[Moves.ROCK_CLIMB]: ModifierTier.GREAT, [Moves.ROCK_CLIMB]: ModifierTier.GREAT,
[Moves.DEFOG]: ModifierTier.COMMON, [Moves.DEFOG]: ModifierTier.COMMON,
[Moves.TRICK_ROOM]: ModifierTier.COMMON, [Moves.TRICK_ROOM]: ModifierTier.COMMON,
[Moves.DRACO_METEOR]: ModifierTier.ULTRA, [Moves.DRACO_METEOR]: ModifierTier.ULTRA,
[Moves.LEAF_STORM]: ModifierTier.ULTRA, [Moves.LEAF_STORM]: ModifierTier.ULTRA,
[Moves.POWER_WHIP]: ModifierTier.ULTRA, [Moves.POWER_WHIP]: ModifierTier.ULTRA,
[Moves.CROSS_POISON]: ModifierTier.GREAT, [Moves.CROSS_POISON]: ModifierTier.GREAT,
[Moves.GUNK_SHOT]: ModifierTier.ULTRA, [Moves.GUNK_SHOT]: ModifierTier.ULTRA,
[Moves.IRON_HEAD]: ModifierTier.GREAT, [Moves.IRON_HEAD]: ModifierTier.GREAT,
[Moves.STONE_EDGE]: ModifierTier.ULTRA, [Moves.STONE_EDGE]: ModifierTier.ULTRA,
[Moves.STEALTH_ROCK]: ModifierTier.COMMON, [Moves.STEALTH_ROCK]: ModifierTier.COMMON,
[Moves.GRASS_KNOT]: ModifierTier.ULTRA, [Moves.GRASS_KNOT]: ModifierTier.ULTRA,
[Moves.BUG_BITE]: ModifierTier.GREAT, [Moves.BUG_BITE]: ModifierTier.GREAT,
[Moves.CHARGE_BEAM]: ModifierTier.GREAT, [Moves.CHARGE_BEAM]: ModifierTier.GREAT,
[Moves.HONE_CLAWS]: ModifierTier.COMMON, [Moves.HONE_CLAWS]: ModifierTier.COMMON,
[Moves.WONDER_ROOM]: ModifierTier.COMMON, [Moves.WONDER_ROOM]: ModifierTier.COMMON,
[Moves.PSYSHOCK]: ModifierTier.GREAT, [Moves.PSYSHOCK]: ModifierTier.GREAT,
[Moves.VENOSHOCK]: ModifierTier.GREAT, [Moves.VENOSHOCK]: ModifierTier.GREAT,
[Moves.MAGIC_ROOM]: ModifierTier.COMMON, [Moves.MAGIC_ROOM]: ModifierTier.COMMON,
[Moves.SMACK_DOWN]: ModifierTier.COMMON, [Moves.SMACK_DOWN]: ModifierTier.COMMON,
[Moves.SLUDGE_WAVE]: ModifierTier.GREAT, [Moves.SLUDGE_WAVE]: ModifierTier.GREAT,
[Moves.HEAVY_SLAM]: ModifierTier.GREAT, [Moves.HEAVY_SLAM]: ModifierTier.GREAT,
[Moves.ELECTRO_BALL]: ModifierTier.GREAT, [Moves.ELECTRO_BALL]: ModifierTier.GREAT,
[Moves.FLAME_CHARGE]: ModifierTier.GREAT, [Moves.FLAME_CHARGE]: ModifierTier.GREAT,
[Moves.LOW_SWEEP]: ModifierTier.GREAT, [Moves.LOW_SWEEP]: ModifierTier.GREAT,
[Moves.ACID_SPRAY]: ModifierTier.COMMON, [Moves.ACID_SPRAY]: ModifierTier.COMMON,
[Moves.FOUL_PLAY]: ModifierTier.ULTRA, [Moves.FOUL_PLAY]: ModifierTier.ULTRA,
[Moves.ROUND]: ModifierTier.COMMON, [Moves.ROUND]: ModifierTier.COMMON,
[Moves.ECHOED_VOICE]: ModifierTier.COMMON, [Moves.ECHOED_VOICE]: ModifierTier.COMMON,
[Moves.STORED_POWER]: ModifierTier.COMMON, [Moves.STORED_POWER]: ModifierTier.COMMON,
[Moves.ALLY_SWITCH]: ModifierTier.COMMON, [Moves.ALLY_SWITCH]: ModifierTier.COMMON,
[Moves.SCALD]: ModifierTier.GREAT, [Moves.SCALD]: ModifierTier.GREAT,
[Moves.HEX]: ModifierTier.GREAT, [Moves.HEX]: ModifierTier.GREAT,
[Moves.SKY_DROP]: ModifierTier.GREAT, [Moves.SKY_DROP]: ModifierTier.GREAT,
[Moves.QUASH]: ModifierTier.COMMON, [Moves.QUASH]: ModifierTier.COMMON,
[Moves.ACROBATICS]: ModifierTier.GREAT, [Moves.ACROBATICS]: ModifierTier.GREAT,
[Moves.RETALIATE]: ModifierTier.GREAT, [Moves.RETALIATE]: ModifierTier.GREAT,
[Moves.WATER_PLEDGE]: ModifierTier.GREAT, [Moves.WATER_PLEDGE]: ModifierTier.GREAT,
[Moves.FIRE_PLEDGE]: ModifierTier.GREAT, [Moves.FIRE_PLEDGE]: ModifierTier.GREAT,
[Moves.GRASS_PLEDGE]: ModifierTier.GREAT, [Moves.GRASS_PLEDGE]: ModifierTier.GREAT,
[Moves.VOLT_SWITCH]: ModifierTier.GREAT, [Moves.VOLT_SWITCH]: ModifierTier.GREAT,
[Moves.STRUGGLE_BUG]: ModifierTier.COMMON, [Moves.STRUGGLE_BUG]: ModifierTier.COMMON,
[Moves.BULLDOZE]: ModifierTier.GREAT, [Moves.BULLDOZE]: ModifierTier.GREAT,
[Moves.FROST_BREATH]: ModifierTier.GREAT, [Moves.FROST_BREATH]: ModifierTier.GREAT,
[Moves.DRAGON_TAIL]: ModifierTier.GREAT, [Moves.DRAGON_TAIL]: ModifierTier.GREAT,
[Moves.WORK_UP]: ModifierTier.COMMON, [Moves.WORK_UP]: ModifierTier.COMMON,
[Moves.ELECTROWEB]: ModifierTier.GREAT, [Moves.ELECTROWEB]: ModifierTier.GREAT,
[Moves.WILD_CHARGE]: ModifierTier.GREAT, [Moves.WILD_CHARGE]: ModifierTier.GREAT,
[Moves.DRILL_RUN]: ModifierTier.GREAT, [Moves.DRILL_RUN]: ModifierTier.GREAT,
[Moves.SACRED_SWORD]: ModifierTier.ULTRA, [Moves.SACRED_SWORD]: ModifierTier.ULTRA,
[Moves.RAZOR_SHELL]: ModifierTier.GREAT, [Moves.RAZOR_SHELL]: ModifierTier.GREAT,
[Moves.HEAT_CRASH]: ModifierTier.GREAT, [Moves.HEAT_CRASH]: ModifierTier.GREAT,
[Moves.TAIL_SLAP]: ModifierTier.GREAT, [Moves.TAIL_SLAP]: ModifierTier.GREAT,
[Moves.HURRICANE]: ModifierTier.ULTRA, [Moves.HURRICANE]: ModifierTier.ULTRA,
[Moves.SNARL]: ModifierTier.COMMON, [Moves.SNARL]: ModifierTier.COMMON,
[Moves.PHANTOM_FORCE]: ModifierTier.ULTRA, [Moves.PHANTOM_FORCE]: ModifierTier.ULTRA,
[Moves.PETAL_BLIZZARD]: ModifierTier.GREAT, [Moves.PETAL_BLIZZARD]: ModifierTier.GREAT,
[Moves.DISARMING_VOICE]: ModifierTier.GREAT, [Moves.DISARMING_VOICE]: ModifierTier.GREAT,
[Moves.DRAINING_KISS]: ModifierTier.GREAT, [Moves.DRAINING_KISS]: ModifierTier.GREAT,
[Moves.GRASSY_TERRAIN]: ModifierTier.COMMON, [Moves.GRASSY_TERRAIN]: ModifierTier.COMMON,
[Moves.MISTY_TERRAIN]: ModifierTier.COMMON, [Moves.MISTY_TERRAIN]: ModifierTier.COMMON,
[Moves.PLAY_ROUGH]: ModifierTier.GREAT, [Moves.PLAY_ROUGH]: ModifierTier.GREAT,
[Moves.CONFIDE]: ModifierTier.COMMON, [Moves.CONFIDE]: ModifierTier.COMMON,
[Moves.MYSTICAL_FIRE]: ModifierTier.GREAT, [Moves.MYSTICAL_FIRE]: ModifierTier.GREAT,
[Moves.EERIE_IMPULSE]: ModifierTier.COMMON, [Moves.EERIE_IMPULSE]: ModifierTier.COMMON,
[Moves.VENOM_DRENCH]: ModifierTier.COMMON, [Moves.VENOM_DRENCH]: ModifierTier.COMMON,
[Moves.ELECTRIC_TERRAIN]: ModifierTier.COMMON, [Moves.ELECTRIC_TERRAIN]: ModifierTier.COMMON,
[Moves.DAZZLING_GLEAM]: ModifierTier.ULTRA, [Moves.DAZZLING_GLEAM]: ModifierTier.ULTRA,
[Moves.INFESTATION]: ModifierTier.COMMON, [Moves.INFESTATION]: ModifierTier.COMMON,
[Moves.DRAGON_ASCENT]: ModifierTier.ULTRA, [Moves.DRAGON_ASCENT]: ModifierTier.ULTRA,
[Moves.DARKEST_LARIAT]: ModifierTier.GREAT, [Moves.DARKEST_LARIAT]: ModifierTier.GREAT,
[Moves.HIGH_HORSEPOWER]: ModifierTier.ULTRA, [Moves.HIGH_HORSEPOWER]: ModifierTier.ULTRA,
[Moves.SOLAR_BLADE]: ModifierTier.GREAT, [Moves.SOLAR_BLADE]: ModifierTier.GREAT,
[Moves.THROAT_CHOP]: ModifierTier.GREAT, [Moves.THROAT_CHOP]: ModifierTier.GREAT,
[Moves.POLLEN_PUFF]: ModifierTier.GREAT, [Moves.POLLEN_PUFF]: ModifierTier.GREAT,
[Moves.PSYCHIC_TERRAIN]: ModifierTier.COMMON, [Moves.PSYCHIC_TERRAIN]: ModifierTier.COMMON,
[Moves.LUNGE]: ModifierTier.GREAT, [Moves.LUNGE]: ModifierTier.GREAT,
[Moves.SPEED_SWAP]: ModifierTier.COMMON, [Moves.SPEED_SWAP]: ModifierTier.COMMON,
[Moves.SMART_STRIKE]: ModifierTier.GREAT, [Moves.SMART_STRIKE]: ModifierTier.GREAT,
[Moves.BRUTAL_SWING]: ModifierTier.GREAT, [Moves.BRUTAL_SWING]: ModifierTier.GREAT,
[Moves.PSYCHIC_FANGS]: ModifierTier.GREAT, [Moves.PSYCHIC_FANGS]: ModifierTier.GREAT,
[Moves.STOMPING_TANTRUM]: ModifierTier.GREAT, [Moves.STOMPING_TANTRUM]: ModifierTier.GREAT,
[Moves.LIQUIDATION]: ModifierTier.ULTRA, [Moves.LIQUIDATION]: ModifierTier.ULTRA,
[Moves.BODY_PRESS]: ModifierTier.ULTRA, [Moves.BODY_PRESS]: ModifierTier.ULTRA,
[Moves.BREAKING_SWIPE]: ModifierTier.GREAT, [Moves.BREAKING_SWIPE]: ModifierTier.GREAT,
[Moves.STEEL_BEAM]: ModifierTier.ULTRA, [Moves.STEEL_BEAM]: ModifierTier.ULTRA,
[Moves.EXPANDING_FORCE]: ModifierTier.GREAT, [Moves.EXPANDING_FORCE]: ModifierTier.GREAT,
[Moves.STEEL_ROLLER]: ModifierTier.COMMON, [Moves.STEEL_ROLLER]: ModifierTier.COMMON,
[Moves.SCALE_SHOT]: ModifierTier.ULTRA, [Moves.SCALE_SHOT]: ModifierTier.ULTRA,
[Moves.METEOR_BEAM]: ModifierTier.GREAT, [Moves.METEOR_BEAM]: ModifierTier.GREAT,
[Moves.MISTY_EXPLOSION]: ModifierTier.COMMON, [Moves.MISTY_EXPLOSION]: ModifierTier.COMMON,
[Moves.GRASSY_GLIDE]: ModifierTier.COMMON, [Moves.GRASSY_GLIDE]: ModifierTier.COMMON,
[Moves.RISING_VOLTAGE]: ModifierTier.COMMON, [Moves.RISING_VOLTAGE]: ModifierTier.COMMON,
[Moves.TERRAIN_PULSE]: ModifierTier.COMMON, [Moves.TERRAIN_PULSE]: ModifierTier.COMMON,
[Moves.SKITTER_SMACK]: ModifierTier.GREAT, [Moves.SKITTER_SMACK]: ModifierTier.GREAT,
[Moves.BURNING_JEALOUSY]: ModifierTier.GREAT, [Moves.BURNING_JEALOUSY]: ModifierTier.GREAT,
[Moves.LASH_OUT]: ModifierTier.GREAT, [Moves.LASH_OUT]: ModifierTier.GREAT,
[Moves.POLTERGEIST]: ModifierTier.ULTRA, [Moves.POLTERGEIST]: ModifierTier.ULTRA,
[Moves.CORROSIVE_GAS]: ModifierTier.COMMON, [Moves.CORROSIVE_GAS]: ModifierTier.COMMON,
[Moves.COACHING]: ModifierTier.COMMON, [Moves.COACHING]: ModifierTier.COMMON,
[Moves.FLIP_TURN]: ModifierTier.COMMON, [Moves.FLIP_TURN]: ModifierTier.COMMON,
[Moves.TRIPLE_AXEL]: ModifierTier.COMMON, [Moves.TRIPLE_AXEL]: ModifierTier.COMMON,
[Moves.DUAL_WINGBEAT]: ModifierTier.COMMON, [Moves.DUAL_WINGBEAT]: ModifierTier.COMMON,
[Moves.SCORCHING_SANDS]: ModifierTier.GREAT, [Moves.SCORCHING_SANDS]: ModifierTier.GREAT,
[Moves.TERA_BLAST]: ModifierTier.GREAT, [Moves.TERA_BLAST]: ModifierTier.GREAT,
[Moves.ICE_SPINNER]: ModifierTier.GREAT, [Moves.ICE_SPINNER]: ModifierTier.GREAT,
[Moves.SNOWSCAPE]: ModifierTier.COMMON, [Moves.SNOWSCAPE]: ModifierTier.COMMON,
[Moves.POUNCE]: ModifierTier.COMMON, [Moves.POUNCE]: ModifierTier.COMMON,
[Moves.TRAILBLAZE]: ModifierTier.COMMON, [Moves.TRAILBLAZE]: ModifierTier.COMMON,
[Moves.CHILLING_WATER]: ModifierTier.COMMON, [Moves.CHILLING_WATER]: ModifierTier.COMMON,
[Moves.HARD_PRESS]: ModifierTier.GREAT, [Moves.HARD_PRESS]: ModifierTier.GREAT,
[Moves.DRAGON_CHEER]: ModifierTier.COMMON, [Moves.DRAGON_CHEER]: ModifierTier.COMMON,
[Moves.ALLURING_VOICE]: ModifierTier.GREAT, [Moves.ALLURING_VOICE]: ModifierTier.GREAT,
[Moves.TEMPER_FLARE]: ModifierTier.GREAT, [Moves.TEMPER_FLARE]: ModifierTier.GREAT,
[Moves.SUPERCELL_SLAM]: ModifierTier.GREAT, [Moves.SUPERCELL_SLAM]: ModifierTier.GREAT,
[Moves.PSYCHIC_NOISE]: ModifierTier.GREAT, [Moves.PSYCHIC_NOISE]: ModifierTier.GREAT,
[Moves.UPPER_HAND]: ModifierTier.COMMON, [Moves.UPPER_HAND]: ModifierTier.COMMON,
}; };

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -8,11 +8,11 @@ export const variantColorCache = {};
export function getVariantTint(variant: Variant): integer { export function getVariantTint(variant: Variant): integer {
switch (variant) { switch (variant) {
case 0: case 0:
return 0xf8c020; return 0xf8c020;
case 1: case 1:
return 0x20f8f0; return 0x20f8f0;
case 2: case 2:
return 0xe81048; return 0xe81048;
} }
} }

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,
@ -42,10 +42,10 @@ export class Weather {
isImmutable(): boolean { isImmutable(): boolean {
switch (this.weatherType) { switch (this.weatherType) {
case WeatherType.HEAVY_RAIN: case WeatherType.HEAVY_RAIN:
case WeatherType.HARSH_SUN: case WeatherType.HARSH_SUN:
case WeatherType.STRONG_WINDS: case WeatherType.STRONG_WINDS:
return true; return true;
} }
return false; return false;
@ -53,9 +53,9 @@ export class Weather {
isDamaging(): boolean { isDamaging(): boolean {
switch (this.weatherType) { switch (this.weatherType) {
case WeatherType.SANDSTORM: case WeatherType.SANDSTORM:
case WeatherType.HAIL: case WeatherType.HAIL:
return true; return true;
} }
return false; return false;
@ -63,10 +63,10 @@ export class Weather {
isTypeDamageImmune(type: Type): boolean { isTypeDamageImmune(type: Type): boolean {
switch (this.weatherType) { switch (this.weatherType) {
case WeatherType.SANDSTORM: case WeatherType.SANDSTORM:
return type === Type.GROUND || type === Type.ROCK || type === Type.STEEL; return type === Type.GROUND || type === Type.ROCK || type === Type.STEEL;
case WeatherType.HAIL: case WeatherType.HAIL:
return type === Type.ICE; return type === Type.ICE;
} }
return false; return false;
@ -74,20 +74,20 @@ export class Weather {
getAttackTypeMultiplier(attackType: Type): number { getAttackTypeMultiplier(attackType: Type): number {
switch (this.weatherType) { switch (this.weatherType) {
case WeatherType.SUNNY: case WeatherType.SUNNY:
case WeatherType.HARSH_SUN: case WeatherType.HARSH_SUN:
if (attackType === Type.FIRE) if (attackType === Type.FIRE)
return 1.5; return 1.5;
if (attackType === Type.WATER) if (attackType === Type.WATER)
return 0.5; return 0.5;
break; break;
case WeatherType.RAIN: case WeatherType.RAIN:
case WeatherType.HEAVY_RAIN: case WeatherType.HEAVY_RAIN:
if (attackType === Type.FIRE) if (attackType === Type.FIRE)
return 0.5; return 0.5;
if (attackType === Type.WATER) if (attackType === Type.WATER)
return 1.5; return 1.5;
break; break;
} }
return 1; return 1;
@ -95,10 +95,10 @@ export class Weather {
isMoveWeatherCancelled(move: Move): boolean { isMoveWeatherCancelled(move: Move): boolean {
switch (this.weatherType) { switch (this.weatherType) {
case WeatherType.HARSH_SUN: case WeatherType.HARSH_SUN:
return move instanceof AttackMove && move.type === Type.WATER; return move instanceof AttackMove && move.type === Type.WATER;
case WeatherType.HEAVY_RAIN: case WeatherType.HEAVY_RAIN:
return move instanceof AttackMove && move.type === Type.FIRE; return move instanceof AttackMove && move.type === Type.FIRE;
} }
return false; return false;
@ -107,7 +107,7 @@ export class Weather {
isEffectSuppressed(scene: BattleScene): boolean { isEffectSuppressed(scene: BattleScene): boolean {
const field = scene.getField(true); const field = scene.getField(true);
for (let pokemon of field) { for (const pokemon of field) {
let suppressWeatherEffectAbAttr = pokemon.getAbility().getAttrs(SuppressWeatherEffectAbAttr).find(() => true) as SuppressWeatherEffectAbAttr; let suppressWeatherEffectAbAttr = pokemon.getAbility().getAttrs(SuppressWeatherEffectAbAttr).find(() => true) as SuppressWeatherEffectAbAttr;
if (!suppressWeatherEffectAbAttr) if (!suppressWeatherEffectAbAttr)
suppressWeatherEffectAbAttr = pokemon.hasPassive() ? pokemon.getPassiveAbility().getAttrs(SuppressWeatherEffectAbAttr).find(() => true) as SuppressWeatherEffectAbAttr : null; suppressWeatherEffectAbAttr = pokemon.hasPassive() ? pokemon.getPassiveAbility().getAttrs(SuppressWeatherEffectAbAttr).find(() => true) as SuppressWeatherEffectAbAttr : null;
@ -121,24 +121,24 @@ export class Weather {
export function getWeatherStartMessage(weatherType: WeatherType): string { export function getWeatherStartMessage(weatherType: WeatherType): string {
switch (weatherType) { switch (weatherType) {
case WeatherType.SUNNY: case WeatherType.SUNNY:
return i18next.t('weather:sunnyStartMessage'); return i18next.t('weather:sunnyStartMessage');
case WeatherType.RAIN: case WeatherType.RAIN:
return i18next.t('weather:rainStartMessage'); return i18next.t('weather:rainStartMessage');
case WeatherType.SANDSTORM: case WeatherType.SANDSTORM:
return i18next.t('weather:sandstormStartMessage'); return i18next.t('weather:sandstormStartMessage');
case WeatherType.HAIL: case WeatherType.HAIL:
return i18next.t('weather:hailStartMessage'); return i18next.t('weather:hailStartMessage');
case WeatherType.SNOW: case WeatherType.SNOW:
return i18next.t('weather:snowStartMessage'); return i18next.t('weather:snowStartMessage');
case WeatherType.FOG: case WeatherType.FOG:
return i18next.t('weather:fogStartMessage'); return i18next.t('weather:fogStartMessage');
case WeatherType.HEAVY_RAIN: case WeatherType.HEAVY_RAIN:
return i18next.t('weather:heavyRainStartMessage'); return i18next.t('weather:heavyRainStartMessage');
case WeatherType.HARSH_SUN: case WeatherType.HARSH_SUN:
return i18next.t('weather:harshSunStartMessage'); return i18next.t('weather:harshSunStartMessage');
case WeatherType.STRONG_WINDS: case WeatherType.STRONG_WINDS:
return i18next.t('weather:strongWindsStartMessage'); return i18next.t('weather:strongWindsStartMessage');
} }
return null; return null;
@ -146,24 +146,24 @@ export function getWeatherStartMessage(weatherType: WeatherType): string {
export function getWeatherLapseMessage(weatherType: WeatherType): string { export function getWeatherLapseMessage(weatherType: WeatherType): string {
switch (weatherType) { switch (weatherType) {
case WeatherType.SUNNY: case WeatherType.SUNNY:
return i18next.t('weather:sunnyLapseMessage'); return i18next.t('weather:sunnyLapseMessage');
case WeatherType.RAIN: case WeatherType.RAIN:
return i18next.t('weather:rainLapseMessage'); return i18next.t('weather:rainLapseMessage');
case WeatherType.SANDSTORM: case WeatherType.SANDSTORM:
return i18next.t('weather:sandstormLapseMessage'); return i18next.t('weather:sandstormLapseMessage');
case WeatherType.HAIL: case WeatherType.HAIL:
return i18next.t('weather:hailLapseMessage'); return i18next.t('weather:hailLapseMessage');
case WeatherType.SNOW: case WeatherType.SNOW:
return i18next.t('weather:snowLapseMessage'); return i18next.t('weather:snowLapseMessage');
case WeatherType.FOG: case WeatherType.FOG:
return i18next.t('weather:fogLapseMessage'); return i18next.t('weather:fogLapseMessage');
case WeatherType.HEAVY_RAIN: case WeatherType.HEAVY_RAIN:
return i18next.t('weather:heavyRainLapseMessage'); return i18next.t('weather:heavyRainLapseMessage');
case WeatherType.HARSH_SUN: case WeatherType.HARSH_SUN:
return i18next.t('weather:harshSunLapseMessage'); return i18next.t('weather:harshSunLapseMessage');
case WeatherType.STRONG_WINDS: case WeatherType.STRONG_WINDS:
return i18next.t('weather:strongWindsLapseMessage'); return i18next.t('weather:strongWindsLapseMessage');
} }
return null; return null;
@ -171,10 +171,10 @@ export function getWeatherLapseMessage(weatherType: WeatherType): string {
export function getWeatherDamageMessage(weatherType: WeatherType, pokemon: Pokemon): string { export function getWeatherDamageMessage(weatherType: WeatherType, pokemon: Pokemon): string {
switch (weatherType) { switch (weatherType) {
case WeatherType.SANDSTORM: case WeatherType.SANDSTORM:
return i18next.t('weather:sandstormDamageMessage', {pokemonPrefix: getPokemonPrefix(pokemon), pokemonName: pokemon.name}); return i18next.t('weather:sandstormDamageMessage', {pokemonPrefix: getPokemonPrefix(pokemon), pokemonName: pokemon.name});
case WeatherType.HAIL: case WeatherType.HAIL:
return i18next.t('weather:hailDamageMessage', {pokemonPrefix: getPokemonPrefix(pokemon), pokemonName: pokemon.name}); return i18next.t('weather:hailDamageMessage', {pokemonPrefix: getPokemonPrefix(pokemon), pokemonName: pokemon.name});
} }
return null; return null;
@ -182,24 +182,24 @@ export function getWeatherDamageMessage(weatherType: WeatherType, pokemon: Pokem
export function getWeatherClearMessage(weatherType: WeatherType): string { export function getWeatherClearMessage(weatherType: WeatherType): string {
switch (weatherType) { switch (weatherType) {
case WeatherType.SUNNY: case WeatherType.SUNNY:
return i18next.t('weather:sunnyClearMessage'); return i18next.t('weather:sunnyClearMessage');
case WeatherType.RAIN: case WeatherType.RAIN:
return i18next.t('weather:rainClearMessage'); return i18next.t('weather:rainClearMessage');
case WeatherType.SANDSTORM: case WeatherType.SANDSTORM:
return i18next.t('weather:sandstormClearMessage'); return i18next.t('weather:sandstormClearMessage');
case WeatherType.HAIL: case WeatherType.HAIL:
return i18next.t('weather:hailClearMessage'); return i18next.t('weather:hailClearMessage');
case WeatherType.SNOW: case WeatherType.SNOW:
return i18next.t('weather:snowClearMessage'); return i18next.t('weather:snowClearMessage');
case WeatherType.FOG: case WeatherType.FOG:
return i18next.t('weather:fogClearMessage'); return i18next.t('weather:fogClearMessage');
case WeatherType.HEAVY_RAIN: case WeatherType.HEAVY_RAIN:
return i18next.t('weather:heavyRainClearMessage'); return i18next.t('weather:heavyRainClearMessage');
case WeatherType.HARSH_SUN: case WeatherType.HARSH_SUN:
return i18next.t('weather:harshSunClearMessage'); return i18next.t('weather:harshSunClearMessage');
case WeatherType.STRONG_WINDS: case WeatherType.STRONG_WINDS:
return i18next.t('weather:strongWindsClearMessage'); return i18next.t('weather:strongWindsClearMessage');
} }
return null; return null;
@ -207,33 +207,33 @@ export function getWeatherClearMessage(weatherType: WeatherType): string {
export function getTerrainStartMessage(terrainType: TerrainType): string { export function getTerrainStartMessage(terrainType: TerrainType): string {
switch (terrainType) { switch (terrainType) {
case TerrainType.MISTY: case TerrainType.MISTY:
return 'Mist swirled around the battlefield!'; return 'Mist swirled around the battlefield!';
case TerrainType.ELECTRIC: case TerrainType.ELECTRIC:
return 'An electric current ran across the battlefield!'; return 'An electric current ran across the battlefield!';
case TerrainType.GRASSY: case TerrainType.GRASSY:
return 'Grass grew to cover the battlefield!'; return 'Grass grew to cover the battlefield!';
case TerrainType.PSYCHIC: case TerrainType.PSYCHIC:
return 'The battlefield got weird!'; return 'The battlefield got weird!';
} }
} }
export function getTerrainClearMessage(terrainType: TerrainType): string { export function getTerrainClearMessage(terrainType: TerrainType): string {
switch (terrainType) { switch (terrainType) {
case TerrainType.MISTY: case TerrainType.MISTY:
return 'The mist disappeared from the battlefield.'; return 'The mist disappeared from the battlefield.';
case TerrainType.ELECTRIC: case TerrainType.ELECTRIC:
return 'The electricity disappeared from the battlefield.'; return 'The electricity disappeared from the battlefield.';
case TerrainType.GRASSY: case TerrainType.GRASSY:
return 'The grass disappeared from the battlefield.'; return 'The grass disappeared from the battlefield.';
case TerrainType.PSYCHIC: case TerrainType.PSYCHIC:
return 'The weirdness disappeared from the battlefield!'; return 'The weirdness disappeared from the battlefield!';
} }
} }
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!`);
} }
@ -246,119 +246,119 @@ export function getRandomWeatherType(arena: any /* Importing from arena causes a
let weatherPool: WeatherPoolEntry[] = []; let weatherPool: WeatherPoolEntry[] = [];
const hasSun = arena.getTimeOfDay() < 2; const hasSun = arena.getTimeOfDay() < 2;
switch (arena.biomeType) { switch (arena.biomeType) {
case Biome.GRASS: case Biome.GRASS:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.NONE, weight: 7 } { weatherType: WeatherType.NONE, weight: 7 }
]; ];
if (hasSun) if (hasSun)
weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 3 }); weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 3 });
break; break;
case Biome.TALL_GRASS: case Biome.TALL_GRASS:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.NONE, weight: 8 }, { weatherType: WeatherType.NONE, weight: 8 },
{ weatherType: WeatherType.RAIN, weight: 5 }, { weatherType: WeatherType.RAIN, weight: 5 },
]; ];
if (hasSun) if (hasSun)
weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 8 }); weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 8 });
break; break;
case Biome.FOREST: case Biome.FOREST:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.NONE, weight: 8 }, { weatherType: WeatherType.NONE, weight: 8 },
{ weatherType: WeatherType.RAIN, weight: 5 } { weatherType: WeatherType.RAIN, weight: 5 }
]; ];
break; break;
case Biome.SEA: case Biome.SEA:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.NONE, weight: 3 }, { weatherType: WeatherType.NONE, weight: 3 },
{ weatherType: WeatherType.RAIN, weight: 12 } { weatherType: WeatherType.RAIN, weight: 12 }
]; ];
break; break;
case Biome.SWAMP: case Biome.SWAMP:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.NONE, weight: 3 }, { weatherType: WeatherType.NONE, weight: 3 },
{ weatherType: WeatherType.RAIN, weight: 4 }, { weatherType: WeatherType.RAIN, weight: 4 },
{ weatherType: WeatherType.FOG, weight: 1 } { weatherType: WeatherType.FOG, weight: 1 }
]; ];
break; break;
case Biome.BEACH: case Biome.BEACH:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.NONE, weight: 8 }, { weatherType: WeatherType.NONE, weight: 8 },
{ weatherType: WeatherType.RAIN, weight: 3 } { weatherType: WeatherType.RAIN, weight: 3 }
]; ];
if (hasSun) if (hasSun)
weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 5 }); weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 5 });
break; break;
case Biome.LAKE: case Biome.LAKE:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.NONE, weight: 10 }, { weatherType: WeatherType.NONE, weight: 10 },
{ weatherType: WeatherType.RAIN, weight: 5 }, { weatherType: WeatherType.RAIN, weight: 5 },
{ weatherType: WeatherType.FOG, weight: 1 } { weatherType: WeatherType.FOG, weight: 1 }
]; ];
break; break;
case Biome.SEABED: case Biome.SEABED:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.RAIN, weight: 1 } { weatherType: WeatherType.RAIN, weight: 1 }
]; ];
break; break;
case Biome.BADLANDS: case Biome.BADLANDS:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.NONE, weight: 8 }, { weatherType: WeatherType.NONE, weight: 8 },
{ weatherType: WeatherType.SANDSTORM, weight: 2 } { weatherType: WeatherType.SANDSTORM, weight: 2 }
]; ];
if (hasSun) if (hasSun)
weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 5 }); weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 5 });
break; break;
case Biome.DESERT: case Biome.DESERT:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.SANDSTORM, weight: 2 } { weatherType: WeatherType.SANDSTORM, weight: 2 }
]; ];
if (hasSun) if (hasSun)
weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 }); weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 });
break; break;
case Biome.ICE_CAVE: case Biome.ICE_CAVE:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.NONE, weight: 3 }, { weatherType: WeatherType.NONE, weight: 3 },
{ weatherType: WeatherType.SNOW, weight: 4 }, { weatherType: WeatherType.SNOW, weight: 4 },
{ weatherType: WeatherType.HAIL, weight: 1 } { weatherType: WeatherType.HAIL, weight: 1 }
]; ];
break; break;
case Biome.MEADOW: case Biome.MEADOW:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.NONE, weight: 2 } { weatherType: WeatherType.NONE, weight: 2 }
]; ];
if (hasSun) if (hasSun)
weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 }); weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 });
case Biome.VOLCANO: case Biome.VOLCANO:
weatherPool = [ weatherPool = [
{ weatherType: hasSun ? WeatherType.SUNNY : WeatherType.NONE, weight: 1 } { weatherType: hasSun ? WeatherType.SUNNY : WeatherType.NONE, weight: 1 }
]; ];
break; break;
case Biome.GRAVEYARD: case Biome.GRAVEYARD:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.NONE, weight: 3 }, { weatherType: WeatherType.NONE, weight: 3 },
{ weatherType: WeatherType.FOG, weight: 1 } { weatherType: WeatherType.FOG, weight: 1 }
]; ];
break; break;
case Biome.JUNGLE: case Biome.JUNGLE:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.NONE, weight: 8 }, { weatherType: WeatherType.NONE, weight: 8 },
{ weatherType: WeatherType.RAIN, weight: 2 } { weatherType: WeatherType.RAIN, weight: 2 }
]; ];
break; break;
case Biome.SNOWY_FOREST: case Biome.SNOWY_FOREST:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.SNOW, weight: 7 }, { weatherType: WeatherType.SNOW, weight: 7 },
{ weatherType: WeatherType.HAIL, weight: 1 } { weatherType: WeatherType.HAIL, weight: 1 }
]; ];
break; break;
case Biome.ISLAND: case Biome.ISLAND:
weatherPool = [ weatherPool = [
{ weatherType: WeatherType.NONE, weight: 5 }, { weatherType: WeatherType.NONE, weight: 5 },
{ weatherType: WeatherType.RAIN, weight: 1 }, { weatherType: WeatherType.RAIN, weight: 1 },
]; ];
if (hasSun) if (hasSun)
weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 }); weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 });
break; break;
} }
if (weatherPool.length > 1) { if (weatherPool.length > 1) {
@ -367,7 +367,7 @@ export function getRandomWeatherType(arena: any /* Importing from arena causes a
const rand = Utils.randSeedInt(totalWeight); const rand = Utils.randSeedInt(totalWeight);
let w = 0; let w = 0;
for (let weather of weatherPool) { for (const weather of weatherPool) {
w += weather.weight; w += weather.weight;
if (rand < w) if (rand < w)
return weather.weatherType; return weather.weatherType;
@ -377,4 +377,4 @@ export function getRandomWeatherType(arena: any /* Importing from arena causes a
return weatherPool.length return weatherPool.length
? weatherPool[0].weatherType ? weatherPool[0].weatherType
: WeatherType.NONE; : WeatherType.NONE;
} }

View File

@ -10,4 +10,4 @@ export function getSession() {
if (!sessionStr) if (!sessionStr)
return null; return null;
return JSON.parse(atob(sessionStr)); return JSON.parse(atob(sessionStr));
} }

View File

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

View File

@ -1,4 +1,4 @@
export enum UiTheme { export enum UiTheme {
DEFAULT, DEFAULT,
LEGACY LEGACY
} }

View File

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

View File

@ -1,24 +1,24 @@
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) {
case PokeballType.POKEBALL: case PokeballType.POKEBALL:
doDefaultPbOpenParticles(scene, x, y, 48); doDefaultPbOpenParticles(scene, x, y, 48);
break; break;
case PokeballType.GREAT_BALL: case PokeballType.GREAT_BALL:
doDefaultPbOpenParticles(scene, x, y, 96); doDefaultPbOpenParticles(scene, x, y, 96);
break; break;
case PokeballType.ULTRA_BALL: case PokeballType.ULTRA_BALL:
doUbOpenParticles(scene, x, y, 8); doUbOpenParticles(scene, x, y, 8);
break; break;
case PokeballType.ROGUE_BALL: case PokeballType.ROGUE_BALL:
doUbOpenParticles(scene, x, y, 10); doUbOpenParticles(scene, x, y, 10);
break; break;
case PokeballType.MASTER_BALL: case PokeballType.MASTER_BALL:
doMbOpenParticles(scene, x, y); doMbOpenParticles(scene, x, y);
break; break;
} }
} }
@ -66,7 +66,7 @@ function doDefaultPbOpenParticles(scene: BattleScene, x: number, y: number, radi
} }
function doUbOpenParticles(scene: BattleScene, x: number, y: number, frameIndex: integer) { function doUbOpenParticles(scene: BattleScene, x: number, y: number, frameIndex: integer) {
let particles: Phaser.GameObjects.Image[] = []; const particles: Phaser.GameObjects.Image[] = [];
for (let i = 0; i < 10; i++) for (let i = 0; i < 10; i++)
particles.push(doFanOutParticle(scene, i * 25, x, y, 1, 1, 5, frameIndex)); particles.push(doFanOutParticle(scene, i * 25, x, y, 1, 1, 5, frameIndex));
@ -77,14 +77,14 @@ function doUbOpenParticles(scene: BattleScene, x: number, y: number, frameIndex:
alpha: 0, alpha: 0,
ease: 'Sine.easeIn', ease: 'Sine.easeIn',
onComplete: () => { onComplete: () => {
for (let particle of particles) for (const particle of particles)
particle.destroy(); particle.destroy();
} }
}); });
} }
function doMbOpenParticles(scene: BattleScene, x: number, y: number) { function doMbOpenParticles(scene: BattleScene, x: number, y: number) {
let particles: Phaser.GameObjects.Image[] = []; const particles: Phaser.GameObjects.Image[] = [];
for (let j = 0; j < 2; j++) { for (let j = 0; j < 2; j++) {
for (let i = 0; i < 8; i++) for (let i = 0; i < 8; i++)
particles.push(doFanOutParticle(scene, i * 32, x, y, j ? 1 : 2, j ? 2 : 1, 8, 4)); particles.push(doFanOutParticle(scene, i * 32, x, y, j ? 1 : 2, j ? 2 : 1, 8, 4));
@ -96,7 +96,7 @@ function doMbOpenParticles(scene: BattleScene, x: number, y: number) {
alpha: 0, alpha: 0,
ease: 'Sine.easeIn', ease: 'Sine.easeIn',
onComplete: () => { onComplete: () => {
for (let particle of particles) for (const particle of particles)
particle.destroy(); particle.destroy();
} }
}); });
@ -177,4 +177,4 @@ export function sin(index: integer, amplitude: integer): number {
export function cos(index: integer, amplitude: integer): number { export function cos(index: integer, amplitude: integer): number {
return amplitude * Math.cos(index * (Math.PI / 128)); return amplitude * Math.cos(index * (Math.PI / 128));
} }

View File

@ -1,23 +1,23 @@
import BattleScene from "../battle-scene"; import BattleScene from '../battle-scene';
import { BiomePoolTier, PokemonPools, BiomeTierTrainerPools, biomePokemonPools, biomeTrainerPools } from "../data/biomes"; import { BiomePoolTier, PokemonPools, BiomeTierTrainerPools, biomePokemonPools, biomeTrainerPools } from '../data/biomes';
import { Biome } from "../data/enums/biome"; import { Biome } from '../data/enums/biome';
import * as Utils from "../utils"; import * as Utils from '../utils';
import PokemonSpecies, { getPokemonSpecies } from "../data/pokemon-species"; import PokemonSpecies, { getPokemonSpecies } from '../data/pokemon-species';
import { Species } from "../data/enums/species"; import { Species } from '../data/enums/species';
import { Weather, WeatherType, getTerrainClearMessage, getTerrainStartMessage, getWeatherClearMessage, getWeatherStartMessage } from "../data/weather"; import { Weather, WeatherType, getTerrainClearMessage, getTerrainStartMessage, getWeatherClearMessage, getWeatherStartMessage } from '../data/weather';
import { CommonAnimPhase, WeatherEffectPhase } from "../phases"; import { CommonAnimPhase, WeatherEffectPhase } from '../phases';
import { CommonAnim } from "../data/battle-anims"; import { CommonAnim } from '../data/battle-anims';
import { Type } from "../data/type"; import { Type } from '../data/type';
import Move from "../data/move"; import Move from '../data/move';
import { ArenaTag, ArenaTagSide, getArenaTag } from "../data/arena-tag"; import { ArenaTag, ArenaTagSide, getArenaTag } from '../data/arena-tag';
import { ArenaTagType } from "../data/enums/arena-tag-type"; import { ArenaTagType } from '../data/enums/arena-tag-type';
import { TrainerType } from "../data/enums/trainer-type"; import { TrainerType } from '../data/enums/trainer-type';
import { BattlerIndex } from "../battle"; import { BattlerIndex } from '../battle';
import { Moves } from "../data/enums/moves"; import { Moves } from '../data/enums/moves';
import { TimeOfDay } from "../data/enums/time-of-day"; import { TimeOfDay } from '../data/enums/time-of-day';
import { Terrain, TerrainType } from "../data/terrain"; import { Terrain, TerrainType } from '../data/terrain';
import { PostTerrainChangeAbAttr, PostWeatherChangeAbAttr, applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs } from "../data/ability"; import { PostTerrainChangeAbAttr, PostWeatherChangeAbAttr, applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs } from '../data/ability';
import Pokemon from "./pokemon"; import Pokemon from './pokemon';
import * as Overrides from '../overrides'; import * as Overrides from '../overrides';
export class Arena { export class Arena {
@ -58,7 +58,7 @@ export class Arena {
const timeOfDay = this.getTimeOfDay(); const timeOfDay = this.getTimeOfDay();
if (timeOfDay !== this.lastTimeOfDay) { if (timeOfDay !== this.lastTimeOfDay) {
this.pokemonPool = {}; this.pokemonPool = {};
for (let tier of Object.keys(biomePokemonPools[this.biomeType])) for (const tier of Object.keys(biomePokemonPools[this.biomeType]))
this.pokemonPool[tier] = Object.assign([], biomePokemonPools[this.biomeType][tier][TimeOfDay.ALL]).concat(biomePokemonPools[this.biomeType][tier][timeOfDay]); this.pokemonPool[tier] = Object.assign([], biomePokemonPools[this.biomeType][tier][TimeOfDay.ALL]).concat(biomePokemonPools[this.biomeType][tier][timeOfDay]);
this.lastTimeOfDay = timeOfDay; this.lastTimeOfDay = timeOfDay;
} }
@ -108,18 +108,18 @@ export class Arena {
if (ret.subLegendary || ret.legendary || ret.mythical) { if (ret.subLegendary || ret.legendary || ret.mythical) {
switch (true) { switch (true) {
case (ret.baseTotal >= 720): case (ret.baseTotal >= 720):
regen = level < 90; regen = level < 90;
break; break;
case (ret.baseTotal >= 670): case (ret.baseTotal >= 670):
regen = level < 70; regen = level < 70;
break; break;
case (ret.baseTotal >= 580): case (ret.baseTotal >= 580):
regen = level < 50; regen = level < 50;
break; break;
default: default:
regen = level < 30; regen = level < 30;
break; break;
} }
} }
} }
@ -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
@ -156,41 +156,41 @@ export class Arena {
getSpeciesFormIndex(species: PokemonSpecies): integer { getSpeciesFormIndex(species: PokemonSpecies): integer {
switch (species.speciesId) { switch (species.speciesId) {
case Species.BURMY: case Species.BURMY:
case Species.WORMADAM: case Species.WORMADAM:
switch (this.biomeType) { switch (this.biomeType) {
case Biome.BEACH: case Biome.BEACH:
return 1; return 1;
case Biome.SLUM: case Biome.SLUM:
return 2; return 2;
} }
break; break;
case Species.ROTOM: case Species.ROTOM:
switch (this.biomeType) { switch (this.biomeType) {
case Biome.VOLCANO: case Biome.VOLCANO:
return 1; return 1;
case Biome.SEA: case Biome.SEA:
return 2; return 2;
case Biome.ICE_CAVE: case Biome.ICE_CAVE:
return 3; return 3;
case Biome.MOUNTAIN: case Biome.MOUNTAIN:
return 4; return 4;
case Biome.TALL_GRASS: case Biome.TALL_GRASS:
return 5; return 5;
} }
break; break;
case Species.LYCANROC: case Species.LYCANROC:
const timeOfDay = this.getTimeOfDay(); const timeOfDay = this.getTimeOfDay();
switch (timeOfDay) { switch (timeOfDay) {
case TimeOfDay.DAY: case TimeOfDay.DAY:
case TimeOfDay.DAWN: case TimeOfDay.DAWN:
return 0; return 0;
case TimeOfDay.DUSK: case TimeOfDay.DUSK:
return 2; return 2;
case TimeOfDay.NIGHT: case TimeOfDay.NIGHT:
return 1; return 1;
} }
break; break;
} }
return 0; return 0;
@ -198,70 +198,70 @@ export class Arena {
getTypeForBiome() { getTypeForBiome() {
switch (this.biomeType) { switch (this.biomeType) {
case Biome.TOWN: case Biome.TOWN:
case Biome.PLAINS: case Biome.PLAINS:
case Biome.METROPOLIS: case Biome.METROPOLIS:
return Type.NORMAL; return Type.NORMAL;
case Biome.GRASS: case Biome.GRASS:
case Biome.TALL_GRASS: case Biome.TALL_GRASS:
return Type.GRASS; return Type.GRASS;
case Biome.FOREST: case Biome.FOREST:
case Biome.JUNGLE: case Biome.JUNGLE:
return Type.BUG; return Type.BUG;
case Biome.SLUM: case Biome.SLUM:
case Biome.SWAMP: case Biome.SWAMP:
return Type.POISON; return Type.POISON;
case Biome.SEA: case Biome.SEA:
case Biome.BEACH: case Biome.BEACH:
case Biome.LAKE: case Biome.LAKE:
case Biome.SEABED: case Biome.SEABED:
return Type.WATER; return Type.WATER;
case Biome.MOUNTAIN: case Biome.MOUNTAIN:
return Type.FLYING; return Type.FLYING;
case Biome.BADLANDS: case Biome.BADLANDS:
return Type.GROUND; return Type.GROUND;
case Biome.CAVE: case Biome.CAVE:
case Biome.DESERT: case Biome.DESERT:
return Type.ROCK; return Type.ROCK;
case Biome.ICE_CAVE: case Biome.ICE_CAVE:
case Biome.SNOWY_FOREST: case Biome.SNOWY_FOREST:
return Type.ICE; return Type.ICE;
case Biome.MEADOW: case Biome.MEADOW:
case Biome.FAIRY_CAVE: case Biome.FAIRY_CAVE:
case Biome.ISLAND: case Biome.ISLAND:
return Type.FAIRY; return Type.FAIRY;
case Biome.POWER_PLANT: case Biome.POWER_PLANT:
return Type.ELECTRIC; return Type.ELECTRIC;
case Biome.VOLCANO: case Biome.VOLCANO:
return Type.FIRE; return Type.FIRE;
case Biome.GRAVEYARD: case Biome.GRAVEYARD:
case Biome.TEMPLE: case Biome.TEMPLE:
return Type.GHOST; return Type.GHOST;
case Biome.DOJO: case Biome.DOJO:
case Biome.CONSTRUCTION_SITE: case Biome.CONSTRUCTION_SITE:
return Type.FIGHTING; return Type.FIGHTING;
case Biome.FACTORY: case Biome.FACTORY:
case Biome.LABORATORY: case Biome.LABORATORY:
return Type.STEEL; return Type.STEEL;
case Biome.RUINS: case Biome.RUINS:
case Biome.SPACE: case Biome.SPACE:
return Type.PSYCHIC; return Type.PSYCHIC;
case Biome.WASTELAND: case Biome.WASTELAND:
case Biome.END: case Biome.END:
return Type.DRAGON; return Type.DRAGON;
case Biome.ABYSS: case Biome.ABYSS:
return Type.DARK; return Type.DARK;
default: default:
return Type.UNKNOWN; return Type.UNKNOWN;
} }
} }
getBgTerrainColorRatioForBiome(): number { getBgTerrainColorRatioForBiome(): number {
switch (this.biomeType) { switch (this.biomeType) {
case Biome.SPACE: case Biome.SPACE:
return 1; return 1;
case Biome.END: case Biome.END:
return 0; return 0;
} }
return 131 / 180; return 131 / 180;
@ -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;
} }
/** /**
@ -362,52 +362,52 @@ export class Arena {
getTrainerChance(): integer { getTrainerChance(): integer {
switch (this.biomeType) { switch (this.biomeType) {
case Biome.METROPOLIS: case Biome.METROPOLIS:
return 2; return 2;
case Biome.SLUM: case Biome.SLUM:
case Biome.BEACH: case Biome.BEACH:
case Biome.DOJO: case Biome.DOJO:
case Biome.CONSTRUCTION_SITE: case Biome.CONSTRUCTION_SITE:
return 4; return 4;
case Biome.PLAINS: case Biome.PLAINS:
case Biome.GRASS: case Biome.GRASS:
case Biome.LAKE: case Biome.LAKE:
case Biome.CAVE: case Biome.CAVE:
return 6; return 6;
case Biome.TALL_GRASS: case Biome.TALL_GRASS:
case Biome.FOREST: case Biome.FOREST:
case Biome.SEA: case Biome.SEA:
case Biome.SWAMP: case Biome.SWAMP:
case Biome.MOUNTAIN: case Biome.MOUNTAIN:
case Biome.BADLANDS: case Biome.BADLANDS:
case Biome.DESERT: case Biome.DESERT:
case Biome.MEADOW: case Biome.MEADOW:
case Biome.POWER_PLANT: case Biome.POWER_PLANT:
case Biome.GRAVEYARD: case Biome.GRAVEYARD:
case Biome.FACTORY: case Biome.FACTORY:
case Biome.SNOWY_FOREST: case Biome.SNOWY_FOREST:
return 8; return 8;
case Biome.ICE_CAVE: case Biome.ICE_CAVE:
case Biome.VOLCANO: case Biome.VOLCANO:
case Biome.RUINS: case Biome.RUINS:
case Biome.WASTELAND: case Biome.WASTELAND:
case Biome.JUNGLE: case Biome.JUNGLE:
case Biome.FAIRY_CAVE: case Biome.FAIRY_CAVE:
return 12; return 12;
case Biome.SEABED: case Biome.SEABED:
case Biome.ABYSS: case Biome.ABYSS:
case Biome.SPACE: case Biome.SPACE:
case Biome.TEMPLE: case Biome.TEMPLE:
return 16; return 16;
default: default:
return 0; return 0;
} }
} }
getTimeOfDay(): TimeOfDay { getTimeOfDay(): TimeOfDay {
switch (this.biomeType) { switch (this.biomeType) {
case Biome.ABYSS: case Biome.ABYSS:
return TimeOfDay.NIGHT; return TimeOfDay.NIGHT;
} }
const waveCycle = ((this.scene.currentBattle?.waveIndex || 0) + this.scene.waveCycleOffset) % 40; const waveCycle = ((this.scene.currentBattle?.waveIndex || 0) + this.scene.waveCycleOffset) % 40;
@ -426,28 +426,28 @@ export class Arena {
isOutside(): boolean { isOutside(): boolean {
switch (this.biomeType) { switch (this.biomeType) {
case Biome.SEABED: case Biome.SEABED:
case Biome.CAVE: case Biome.CAVE:
case Biome.ICE_CAVE: case Biome.ICE_CAVE:
case Biome.POWER_PLANT: case Biome.POWER_PLANT:
case Biome.DOJO: case Biome.DOJO:
case Biome.FACTORY: case Biome.FACTORY:
case Biome.ABYSS: case Biome.ABYSS:
case Biome.FAIRY_CAVE: case Biome.FAIRY_CAVE:
case Biome.TEMPLE: case Biome.TEMPLE:
case Biome.LABORATORY: case Biome.LABORATORY:
return false; return false;
default: default:
return true; return true;
} }
} }
getDayTint(): [integer, integer, integer] { getDayTint(): [integer, integer, integer] {
switch (this.biomeType) { switch (this.biomeType) {
case Biome.ABYSS: case Biome.ABYSS:
return [ 64, 64, 64 ]; return [ 64, 64, 64 ];
default: default:
return [ 128, 128, 128 ]; return [ 128, 128, 128 ];
} }
} }
@ -456,25 +456,25 @@ export class Arena {
return [ 0, 0, 0 ]; return [ 0, 0, 0 ];
switch (this.biomeType) { switch (this.biomeType) {
default: default:
return [ 98, 48, 73 ].map(c => Math.round((c + 128) / 2)) as [integer, integer, integer]; return [ 98, 48, 73 ].map(c => Math.round((c + 128) / 2)) as [integer, integer, integer];
} }
} }
getNightTint(): [integer, integer, integer] { getNightTint(): [integer, integer, integer] {
switch (this.biomeType) { switch (this.biomeType) {
case Biome.ABYSS: case Biome.ABYSS:
case Biome.SPACE: case Biome.SPACE:
case Biome.END: case Biome.END:
return this.getDayTint(); return this.getDayTint();
} }
if (!this.isOutside()) if (!this.isOutside())
return [ 64, 64, 64 ]; return [ 64, 64, 64 ];
switch (this.biomeType) { switch (this.biomeType) {
default: default:
return [ 48, 48, 98 ]; return [ 48, 48, 98 ];
} }
} }
@ -489,11 +489,11 @@ export class Arena {
if (side !== ArenaTagSide.BOTH) if (side !== ArenaTagSide.BOTH)
tags = tags.filter(t => t.side === side); tags = tags.filter(t => t.side === side);
tags.forEach(t => t.apply(this, args)); tags.forEach(t => t.apply(this, args));
} }
applyTags(tagType: ArenaTagType | { new(...args: any[]): ArenaTag }, ...args: any[]): void { applyTags(tagType: ArenaTagType | { new(...args: any[]): ArenaTag }, ...args: any[]): void {
this.applyTagsForSide(tagType, ArenaTagSide.BOTH, ...args); this.applyTagsForSide(tagType, ArenaTagSide.BOTH, ...args);
} }
addTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves, sourceId: integer, side: ArenaTagSide = ArenaTagSide.BOTH, targetIndex?: BattlerIndex): boolean { addTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves, sourceId: integer, side: ArenaTagSide = ArenaTagSide.BOTH, targetIndex?: BattlerIndex): boolean {
const existingTag = this.getTagOnSide(tagType, side); const existingTag = this.getTagOnSide(tagType, side);
@ -567,74 +567,74 @@ export class Arena {
getBgmLoopPoint(): number { getBgmLoopPoint(): number {
switch (this.biomeType) { switch (this.biomeType) {
case Biome.TOWN: case Biome.TOWN:
return 7.288; return 7.288;
case Biome.PLAINS: case Biome.PLAINS:
return 7.693; return 7.693;
case Biome.GRASS: case Biome.GRASS:
return 1.995; return 1.995;
case Biome.TALL_GRASS: case Biome.TALL_GRASS:
return 9.608; return 9.608;
case Biome.METROPOLIS: case Biome.METROPOLIS:
return 141.470; return 141.470;
case Biome.FOREST: case Biome.FOREST:
return 4.294; return 4.294;
case Biome.SEA: case Biome.SEA:
return 1.672; return 1.672;
case Biome.SWAMP: case Biome.SWAMP:
return 4.461; return 4.461;
case Biome.BEACH: case Biome.BEACH:
return 3.462; return 3.462;
case Biome.LAKE: case Biome.LAKE:
return 5.350; return 5.350;
case Biome.SEABED: case Biome.SEABED:
return 2.629; return 2.629;
case Biome.MOUNTAIN: case Biome.MOUNTAIN:
return 4.018; return 4.018;
case Biome.BADLANDS: case Biome.BADLANDS:
return 17.790; return 17.790;
case Biome.CAVE: case Biome.CAVE:
return 14.240; return 14.240;
case Biome.DESERT: case Biome.DESERT:
return 1.143; return 1.143;
case Biome.ICE_CAVE: case Biome.ICE_CAVE:
return 15.010; return 15.010;
case Biome.MEADOW: case Biome.MEADOW:
return 3.891; return 3.891;
case Biome.POWER_PLANT: case Biome.POWER_PLANT:
return 2.810; return 2.810;
case Biome.VOLCANO: case Biome.VOLCANO:
return 5.116; return 5.116;
case Biome.GRAVEYARD: case Biome.GRAVEYARD:
return 3.232; return 3.232;
case Biome.DOJO: case Biome.DOJO:
return 6.205; return 6.205;
case Biome.FACTORY: case Biome.FACTORY:
return 4.985; return 4.985;
case Biome.RUINS: case Biome.RUINS:
return 2.270; return 2.270;
case Biome.WASTELAND: case Biome.WASTELAND:
return 6.336; return 6.336;
case Biome.ABYSS: case Biome.ABYSS:
return 5.130; return 5.130;
case Biome.SPACE: case Biome.SPACE:
return 21.347; return 21.347;
case Biome.CONSTRUCTION_SITE: case Biome.CONSTRUCTION_SITE:
return 1.222; return 1.222;
case Biome.JUNGLE: case Biome.JUNGLE:
return 0.000; return 0.000;
case Biome.FAIRY_CAVE: case Biome.FAIRY_CAVE:
return 4.542; return 4.542;
case Biome.TEMPLE: case Biome.TEMPLE:
return 2.547; return 2.547;
case Biome.ISLAND: case Biome.ISLAND:
return 2.751; return 2.751;
case Biome.LABORATORY: case Biome.LABORATORY:
return 114.862; return 114.862;
case Biome.SLUM: case Biome.SLUM:
return 1.221; return 1.221;
case Biome.SNOWY_FOREST: case Biome.SNOWY_FOREST:
return 3.047; return 3.047;
} }
} }
} }
@ -645,32 +645,32 @@ export function getBiomeKey(biome: Biome): string {
export function getBiomeHasProps(biomeType: Biome): boolean { export function getBiomeHasProps(biomeType: Biome): boolean {
switch (biomeType) { switch (biomeType) {
case Biome.METROPOLIS: case Biome.METROPOLIS:
case Biome.BEACH: case Biome.BEACH:
case Biome.LAKE: case Biome.LAKE:
case Biome.SEABED: case Biome.SEABED:
case Biome.MOUNTAIN: case Biome.MOUNTAIN:
case Biome.BADLANDS: case Biome.BADLANDS:
case Biome.CAVE: case Biome.CAVE:
case Biome.DESERT: case Biome.DESERT:
case Biome.ICE_CAVE: case Biome.ICE_CAVE:
case Biome.MEADOW: case Biome.MEADOW:
case Biome.POWER_PLANT: case Biome.POWER_PLANT:
case Biome.VOLCANO: case Biome.VOLCANO:
case Biome.GRAVEYARD: case Biome.GRAVEYARD:
case Biome.FACTORY: case Biome.FACTORY:
case Biome.RUINS: case Biome.RUINS:
case Biome.WASTELAND: case Biome.WASTELAND:
case Biome.ABYSS: case Biome.ABYSS:
case Biome.CONSTRUCTION_SITE: case Biome.CONSTRUCTION_SITE:
case Biome.JUNGLE: case Biome.JUNGLE:
case Biome.FAIRY_CAVE: case Biome.FAIRY_CAVE:
case Biome.TEMPLE: case Biome.TEMPLE:
case Biome.SNOWY_FOREST: case Biome.SNOWY_FOREST:
case Biome.ISLAND: case Biome.ISLAND:
case Biome.LABORATORY: case Biome.LABORATORY:
case Biome.END: case Biome.END:
return true; return true;
} }
return false; return false;
@ -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,
@ -750,4 +750,4 @@ export class ArenaBase extends Phaser.GameObjects.Container {
}, (this.scene as BattleScene).currentBattle?.waveIndex || 0, (this.scene as BattleScene).waveSeed); }, (this.scene as BattleScene).currentBattle?.waveIndex || 0, (this.scene as BattleScene).waveSeed);
} }
} }
} }

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[]>;
@ -25,21 +25,21 @@ export default class DamageNumberHandler {
let [ textColor, shadowColor ] = [ null, null ]; let [ textColor, shadowColor ] = [ null, null ];
switch (result) { switch (result) {
case HitResult.SUPER_EFFECTIVE: case HitResult.SUPER_EFFECTIVE:
[ textColor, shadowColor ] = [ '#f8d030', '#b8a038' ]; [ textColor, shadowColor ] = [ '#f8d030', '#b8a038' ];
break; break;
case HitResult.NOT_VERY_EFFECTIVE: case HitResult.NOT_VERY_EFFECTIVE:
[ textColor, shadowColor ] = [ '#f08030', '#c03028' ]; [ textColor, shadowColor ] = [ '#f08030', '#c03028' ];
break; break;
case HitResult.ONE_HIT_KO: case HitResult.ONE_HIT_KO:
[ textColor, shadowColor ] = [ '#a040a0', '#483850' ]; [ textColor, shadowColor ] = [ '#a040a0', '#483850' ];
break; break;
case HitResult.HEAL: case HitResult.HEAL:
[ textColor, shadowColor ] = [ '#78c850', '#588040' ]; [ textColor, shadowColor ] = [ '#78c850', '#588040' ];
break; break;
default: default:
[ textColor, shadowColor ] = [ '#ffffff', '#636363' ]; [ textColor, shadowColor ] = [ '#ffffff', '#636363' ];
break; break;
} }
if (textColor) if (textColor)
@ -168,4 +168,4 @@ export default class DamageNumberHandler {
] ]
}); });
} }
} }

View File

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

File diff suppressed because it is too large Load Diff

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,
@ -49,14 +49,14 @@ export default class Trainer extends Phaser.GameObjects.Container {
} }
switch (this.variant) { switch (this.variant) {
case TrainerVariant.FEMALE: case TrainerVariant.FEMALE:
if (!this.config.hasGenders) if (!this.config.hasGenders)
variant = TrainerVariant.DEFAULT; variant = TrainerVariant.DEFAULT;
break; break;
case TrainerVariant.DOUBLE: case TrainerVariant.DOUBLE:
if (!this.config.hasDouble) if (!this.config.hasDouble)
variant = TrainerVariant.DEFAULT; variant = TrainerVariant.DEFAULT;
break; break;
} }
console.log(Object.keys(trainerPartyTemplates)[Object.values(trainerPartyTemplates).indexOf(this.getPartyTemplate())]); console.log(Object.keys(trainerPartyTemplates)[Object.values(trainerPartyTemplates).indexOf(this.getPartyTemplate())]);
@ -179,7 +179,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
const partyTemplate = this.getPartyTemplate(); const partyTemplate = this.getPartyTemplate();
const difficultyWaveIndex = this.scene.gameMode.getWaveForDifficulty(waveIndex); const difficultyWaveIndex = this.scene.gameMode.getWaveForDifficulty(waveIndex);
let baseLevel = 1 + difficultyWaveIndex / 2 + Math.pow(difficultyWaveIndex / 25, 2); const baseLevel = 1 + difficultyWaveIndex / 2 + Math.pow(difficultyWaveIndex / 25, 2);
if (this.isDouble() && partyTemplate.size < 2) if (this.isDouble() && partyTemplate.size < 2)
partyTemplate.size = 2; partyTemplate.size = 2;
@ -190,21 +190,21 @@ export default class Trainer extends Phaser.GameObjects.Container {
const strength = partyTemplate.getStrength(i); const strength = partyTemplate.getStrength(i);
switch (strength) { switch (strength) {
case PartyMemberStrength.WEAKER: case PartyMemberStrength.WEAKER:
multiplier = 0.95; multiplier = 0.95;
break; break;
case PartyMemberStrength.WEAK: case PartyMemberStrength.WEAK:
multiplier = 1.0; multiplier = 1.0;
break; break;
case PartyMemberStrength.AVERAGE: case PartyMemberStrength.AVERAGE:
multiplier = 1.1; multiplier = 1.1;
break; break;
case PartyMemberStrength.STRONG: case PartyMemberStrength.STRONG:
multiplier = 1.2; multiplier = 1.2;
break; break;
case PartyMemberStrength.STRONGER: case PartyMemberStrength.STRONGER:
multiplier = 1.25; multiplier = 1.25;
break; break;
} }
let levelOffset = 0; let levelOffset = 0;
@ -243,7 +243,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
let offset = 0; let offset = 0;
if (template instanceof TrainerPartyCompoundTemplate) { if (template instanceof TrainerPartyCompoundTemplate) {
for (let innerTemplate of template.templates) { for (const innerTemplate of template.templates) {
if (offset + innerTemplate.size > index) if (offset + innerTemplate.size > index)
break; break;
offset += innerTemplate.size; offset += innerTemplate.size;
@ -267,7 +267,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
let species: PokemonSpecies; let species: PokemonSpecies;
if (this.config.speciesPools) { if (this.config.speciesPools) {
const tierValue = Utils.randSeedInt(512); const tierValue = Utils.randSeedInt(512);
let tier = tierValue >= 156 ? TrainerPoolTier.COMMON : tierValue >= 32 ? TrainerPoolTier.UNCOMMON : tierValue >= 6 ? TrainerPoolTier.RARE : tierValue >= 1 ? TrainerPoolTier.SUPER_RARE : TrainerPoolTier.ULTRA_RARE let tier = tierValue >= 156 ? TrainerPoolTier.COMMON : tierValue >= 32 ? TrainerPoolTier.UNCOMMON : tierValue >= 6 ? TrainerPoolTier.RARE : tierValue >= 1 ? TrainerPoolTier.SUPER_RARE : TrainerPoolTier.ULTRA_RARE;
console.log(TrainerPoolTier[tier]); console.log(TrainerPoolTier[tier]);
while (!this.config.speciesPools.hasOwnProperty(tier) || !this.config.speciesPools[tier].length) { while (!this.config.speciesPools.hasOwnProperty(tier) || !this.config.speciesPools[tier].length) {
console.log(`Downgraded trainer Pokemon rarity tier from ${TrainerPoolTier[tier]} to ${TrainerPoolTier[tier - 1]}`); console.log(`Downgraded trainer Pokemon rarity tier from ${TrainerPoolTier[tier]} to ${TrainerPoolTier[tier - 1]}`);
@ -304,7 +304,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
} }
if (retry && (attempt || 0) < 10) { if (retry && (attempt || 0) < 10) {
console.log('Rerolling party member...') console.log('Rerolling party member...');
ret = this.genNewPartyMemberSpecies(level, strength, (attempt || 0) + 1); ret = this.genNewPartyMemberSpecies(level, strength, (attempt || 0) + 1);
} }
@ -321,7 +321,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
const playerField = this.scene.getPlayerField(); const playerField = this.scene.getPlayerField();
let score = 0; let score = 0;
let ret: [integer, integer]; let ret: [integer, integer];
for (let playerPokemon of playerField) { for (const playerPokemon of playerField) {
score += p.getMatchupScore(playerPokemon); score += p.getMatchupScore(playerPokemon);
if (playerPokemon.species.legendary) if (playerPokemon.species.legendary)
score /= 2; score /= 2;
@ -366,16 +366,16 @@ export default class Trainer extends Phaser.GameObjects.Container {
getPartyMemberModifierChanceMultiplier(index: integer): number { getPartyMemberModifierChanceMultiplier(index: integer): number {
switch (this.getPartyTemplate().getStrength(index)) { switch (this.getPartyTemplate().getStrength(index)) {
case PartyMemberStrength.WEAKER: case PartyMemberStrength.WEAKER:
return 0.75; return 0.75;
case PartyMemberStrength.WEAK: case PartyMemberStrength.WEAK:
return 0.675; return 0.675;
case PartyMemberStrength.AVERAGE: case PartyMemberStrength.AVERAGE:
return 0.5625; return 0.5625;
case PartyMemberStrength.STRONG: case PartyMemberStrength.STRONG:
return 0.45; return 0.45;
case PartyMemberStrength.STRONGER: case PartyMemberStrength.STRONGER:
return 0.375; return 0.375;
} }
} }
@ -507,4 +507,4 @@ export default class Trainer extends Phaser.GameObjects.Container {
export default interface Trainer { export default interface Trainer {
scene: BattleScene scene: BattleScene
} }

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() ];
@ -288,4 +288,4 @@ export class QuietFormChangePhase extends BattlePhase {
super.end(); super.end();
} }
} }

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 {
@ -55,10 +55,10 @@ export class GameMode implements GameModeConfig {
if (Overrides.STARTING_LEVEL_OVERRIDE) if (Overrides.STARTING_LEVEL_OVERRIDE)
return Overrides.STARTING_LEVEL_OVERRIDE; return Overrides.STARTING_LEVEL_OVERRIDE;
switch (this.modeId) { switch (this.modeId) {
case GameModes.DAILY: case GameModes.DAILY:
return 20; return 20;
default: default:
return 5; return 5;
} }
} }
@ -80,19 +80,19 @@ export class GameMode implements GameModeConfig {
*/ */
getStartingBiome(scene: BattleScene): Biome { getStartingBiome(scene: BattleScene): Biome {
switch (this.modeId) { switch (this.modeId) {
case GameModes.DAILY: case GameModes.DAILY:
return scene.generateRandomBiome(this.getWaveForDifficulty(1)); return scene.generateRandomBiome(this.getWaveForDifficulty(1));
default: default:
return Overrides.STARTING_BIOME_OVERRIDE || Biome.TOWN; return Overrides.STARTING_BIOME_OVERRIDE || Biome.TOWN;
} }
} }
getWaveForDifficulty(waveIndex: integer, ignoreCurveChanges: boolean = false): integer { getWaveForDifficulty(waveIndex: integer, ignoreCurveChanges: boolean = false): integer {
switch (this.modeId) { switch (this.modeId) {
case GameModes.DAILY: case GameModes.DAILY:
return waveIndex + 30 + (!ignoreCurveChanges ? Math.floor(waveIndex / 5) : 0); return waveIndex + 30 + (!ignoreCurveChanges ? Math.floor(waveIndex / 5) : 0);
default: default:
return waveIndex; return waveIndex;
} }
} }
@ -130,10 +130,10 @@ export class GameMode implements GameModeConfig {
isTrainerBoss(waveIndex: integer, biomeType: Biome, offsetGym: boolean): boolean { isTrainerBoss(waveIndex: integer, biomeType: Biome, offsetGym: boolean): boolean {
switch (this.modeId) { switch (this.modeId) {
case GameModes.DAILY: case GameModes.DAILY:
return waveIndex > 10 && waveIndex < 50 && !(waveIndex % 10); return waveIndex > 10 && waveIndex < 50 && !(waveIndex % 10);
default: default:
return (waveIndex % 30) === (offsetGym ? 0 : 20) && (biomeType !== Biome.END || this.isClassic || this.isWaveFinal(waveIndex)); return (waveIndex % 30) === (offsetGym ? 0 : 20) && (biomeType !== Biome.END || this.isClassic || this.isWaveFinal(waveIndex));
} }
} }
@ -149,46 +149,46 @@ export class GameMode implements GameModeConfig {
isWaveFinal(waveIndex: integer): boolean { isWaveFinal(waveIndex: integer): boolean {
switch (this.modeId) { switch (this.modeId) {
case GameModes.CLASSIC: case GameModes.CLASSIC:
return waveIndex === 200; return waveIndex === 200;
case GameModes.ENDLESS: case GameModes.ENDLESS:
case GameModes.SPLICED_ENDLESS: case GameModes.SPLICED_ENDLESS:
return !(waveIndex % 250); return !(waveIndex % 250);
case GameModes.DAILY: case GameModes.DAILY:
return waveIndex === 50; return waveIndex === 50;
} }
} }
getClearScoreBonus(): integer { getClearScoreBonus(): integer {
switch (this.modeId) { switch (this.modeId) {
case GameModes.CLASSIC: case GameModes.CLASSIC:
return 5000; return 5000;
case GameModes.DAILY: case GameModes.DAILY:
return 2500; return 2500;
} }
} }
getEnemyModifierChance(isBoss: boolean): integer { getEnemyModifierChance(isBoss: boolean): integer {
switch (this.modeId) { switch (this.modeId) {
case GameModes.CLASSIC: case GameModes.CLASSIC:
case GameModes.DAILY: case GameModes.DAILY:
return !isBoss ? 18 : 6; return !isBoss ? 18 : 6;
case GameModes.ENDLESS: case GameModes.ENDLESS:
case GameModes.SPLICED_ENDLESS: case GameModes.SPLICED_ENDLESS:
return !isBoss ? 12 : 4; return !isBoss ? 12 : 4;
} }
} }
getName(): string { getName(): string {
switch (this.modeId) { switch (this.modeId) {
case GameModes.CLASSIC: case GameModes.CLASSIC:
return 'Classic'; return 'Classic';
case GameModes.ENDLESS: case GameModes.ENDLESS:
return 'Endless'; return 'Endless';
case GameModes.SPLICED_ENDLESS: case GameModes.SPLICED_ENDLESS:
return 'Endless (Spliced)'; return 'Endless (Spliced)';
case GameModes.DAILY: case GameModes.DAILY:
return 'Daily Run'; return 'Daily Run';
} }
} }
} }
@ -198,4 +198,4 @@ export const gameModes = Object.freeze({
[GameModes.ENDLESS]: new GameMode(GameModes.ENDLESS, { isEndless: true, hasShortBiomes: true, hasRandomBosses: true }), [GameModes.ENDLESS]: new GameMode(GameModes.ENDLESS, { isEndless: true, hasShortBiomes: true, hasRandomBosses: true }),
[GameModes.SPLICED_ENDLESS]: new GameMode(GameModes.SPLICED_ENDLESS, { isEndless: true, hasShortBiomes: true, hasRandomBosses: true, isSplicedOnly: true }), [GameModes.SPLICED_ENDLESS]: new GameMode(GameModes.SPLICED_ENDLESS, { isEndless: true, hasShortBiomes: true, hasRandomBosses: true, isSplicedOnly: true }),
[GameModes.DAILY]: new GameMode(GameModes.DAILY, { isDaily: true, hasTrainers: true, hasNoShop: true }) [GameModes.DAILY]: new GameMode(GameModes.DAILY, { isDaily: true, hasTrainers: true, hasNoShop: true })
}); });

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;
@ -46,19 +46,19 @@ const repeatInputDelayMillis = 250;
* providing a unified interface for all input-related interactions. * providing a unified interface for all input-related interactions.
*/ */
export class InputsController { export class InputsController {
private buttonKeys: Phaser.Input.Keyboard.Key[][]; private buttonKeys: Phaser.Input.Keyboard.Key[][];
private gamepads: Array<string> = new Array(); private gamepads: Array<string> = new Array();
private scene: Phaser.Scene; private scene: Phaser.Scene;
private buttonLock: Button; private buttonLock: Button;
private buttonLock2: Button; private buttonLock2: Button;
private interactions: Map<Button, Map<string, boolean>> = new Map(); private interactions: Map<Button, Map<string, boolean>> = new Map();
private time: Time; private time: Time;
private player: Map<String, GamepadMapping> = new Map(); private player: Map<String, GamepadMapping> = new Map();
private gamepadSupport: boolean = true; private gamepadSupport: boolean = true;
/** /**
* Initializes a new instance of the game control system, setting up initial state and configurations. * Initializes a new instance of the game control system, setting up initial state and configurations.
* *
* @param scene - The Phaser scene associated with this instance. * @param scene - The Phaser scene associated with this instance.
@ -69,25 +69,25 @@ export class InputsController {
* Specific buttons like MENU and STATS are set not to repeat their actions. * Specific buttons like MENU and STATS are set not to repeat their actions.
* It concludes by calling the `init` method to complete the setup. * It concludes by calling the `init` method to complete the setup.
*/ */
constructor(scene: Phaser.Scene) { constructor(scene: Phaser.Scene) {
this.scene = scene; this.scene = scene;
this.time = this.scene.time; this.time = this.scene.time;
this.buttonKeys = []; this.buttonKeys = [];
for (const b of Utils.getEnumValues(Button)) { for (const b of Utils.getEnumValues(Button)) {
this.interactions[b] = { this.interactions[b] = {
pressTime: false, pressTime: false,
isPressed: false, isPressed: false,
source: null, source: null,
} };
}
// We don't want the menu key to be repeated
delete this.interactions[Button.MENU];
delete this.interactions[Button.STATS];
this.init();
} }
// We don't want the menu key to be repeated
delete this.interactions[Button.MENU];
delete this.interactions[Button.STATS];
this.init();
}
/** /**
* Sets up event handlers and initializes gamepad and keyboard controls. * Sets up event handlers and initializes gamepad and keyboard controls.
* *
* @remarks * @remarks
@ -95,46 +95,46 @@ export class InputsController {
* It handles gamepad connections/disconnections and button press events, and ensures keyboard controls are set up. * It handles gamepad connections/disconnections and button press events, and ensures keyboard controls are set up.
* Additionally, it manages the game's behavior when it loses focus to prevent unwanted game actions during this state. * Additionally, it manages the game's behavior when it loses focus to prevent unwanted game actions during this state.
*/ */
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) {
this.refreshGamepads(); this.refreshGamepads();
this.setupGamepad(thisGamepad); this.setupGamepad(thisGamepad);
}, this); }, this);
// Check to see if the gamepad has already been setup by the browser // Check to see if the gamepad has already been setup by the browser
this.scene.input.gamepad.refreshPads(); this.scene.input.gamepad.refreshPads();
if (this.scene.input.gamepad.total) { if (this.scene.input.gamepad.total) {
this.refreshGamepads(); this.refreshGamepads();
for (const thisGamepad of this.gamepads) { for (const thisGamepad of this.gamepads) {
this.scene.input.gamepad.emit('connected', thisGamepad); this.scene.input.gamepad.emit('connected', thisGamepad);
}
}
this.scene.input.gamepad.on('down', this.gamepadButtonDown, this);
this.scene.input.gamepad.on('up', this.gamepadButtonUp, this);
} }
}
// Keyboard this.scene.input.gamepad.on('down', this.gamepadButtonDown, this);
this.setupKeyboardControls(); this.scene.input.gamepad.on('up', this.gamepadButtonUp, this);
} }
/** // Keyboard
this.setupKeyboardControls();
}
/**
* Handles actions to take when the game loses focus, such as deactivating pressed keys. * Handles actions to take when the game loses focus, such as deactivating pressed keys.
* *
* @remarks * @remarks
* This method is triggered when the game or the browser tab loses focus. It ensures that any keys pressed are deactivated to prevent stuck keys affecting gameplay when the game is not active. * This method is triggered when the game or the browser tab loses focus. It ensures that any keys pressed are deactivated to prevent stuck keys affecting gameplay when the game is not active.
*/ */
loseFocus(): void { loseFocus(): void {
this.deactivatePressedKey(); this.deactivatePressedKey();
} }
/** /**
* Enables or disables support for gamepad input. * Enables or disables support for gamepad input.
* *
* @param value - A boolean indicating whether gamepad support should be enabled (true) or disabled (false). * @param value - A boolean indicating whether gamepad support should be enabled (true) or disabled (false).
@ -142,17 +142,17 @@ export class InputsController {
* @remarks * @remarks
* This method toggles gamepad support. If disabled, it also ensures that all currently pressed gamepad buttons are deactivated to avoid stuck inputs. * This method toggles gamepad support. If disabled, it also ensures that all currently pressed gamepad buttons are deactivated to avoid stuck inputs.
*/ */
setGamepadSupport(value: boolean): void { setGamepadSupport(value: boolean): void {
if (value) { if (value) {
this.gamepadSupport = true; this.gamepadSupport = true;
} else { } else {
this.gamepadSupport = false; this.gamepadSupport = false;
// if we disable the gamepad, we want to release every key pressed // if we disable the gamepad, we want to release every key pressed
this.deactivatePressedKey(); this.deactivatePressedKey();
}
} }
}
/** /**
* Updates the interaction handling by processing input states. * Updates the interaction handling by processing input states.
* This method gives priority to certain buttons by reversing the order in which they are checked. * This method gives priority to certain buttons by reversing the order in which they are checked.
* *
@ -165,30 +165,30 @@ export class InputsController {
* Special handling is applied if gamepad support is disabled but a gamepad source is still triggering inputs, * Special handling is applied if gamepad support is disabled but a gamepad source is still triggering inputs,
* preventing potential infinite loops by removing the last processed movement time for the button. * preventing potential infinite loops by removing the last processed movement time for the button.
*/ */
update(): void { update(): void {
for (const b of Utils.getEnumValues(Button).reverse()) { for (const b of Utils.getEnumValues(Button).reverse()) {
if ( if (
this.interactions.hasOwnProperty(b) && this.interactions.hasOwnProperty(b) &&
this.repeatInputDurationJustPassed(b) && this.repeatInputDurationJustPassed(b) &&
this.interactions[b].isPressed this.interactions[b].isPressed
) { ) {
// Prevents repeating button interactions when gamepad support is disabled. // Prevents repeating button interactions when gamepad support is disabled.
if (!this.gamepadSupport && this.interactions[b].source === 'gamepad') { if (!this.gamepadSupport && this.interactions[b].source === 'gamepad') {
// Deletes the last interaction for a button if gamepad is disabled. // Deletes the last interaction for a button if gamepad is disabled.
this.delLastProcessedMovementTime(b); this.delLastProcessedMovementTime(b);
return; return;
}
// Emits an event for the button press.
this.events.emit('input_down', {
controller_type: this.interactions[b].source,
button: b,
});
this.setLastProcessedMovementTime(b, this.interactions[b].source);
}
} }
// Emits an event for the button press.
this.events.emit('input_down', {
controller_type: this.interactions[b].source,
button: b,
});
this.setLastProcessedMovementTime(b, this.interactions[b].source);
}
} }
}
/** /**
* Configures a gamepad for use based on its device ID. * Configures a gamepad for use based on its device ID.
* *
* @param thisGamepad - The gamepad to set up. * @param thisGamepad - The gamepad to set up.
@ -198,13 +198,13 @@ export class InputsController {
* It updates the player's gamepad mapping based on the identified configuration, ensuring * It updates the player's gamepad mapping based on the identified configuration, ensuring
* that the gamepad controls are correctly mapped to in-game actions. * that the gamepad controls are correctly mapped to in-game actions.
*/ */
setupGamepad(thisGamepad: Phaser.Input.Gamepad.Gamepad): void { setupGamepad(thisGamepad: Phaser.Input.Gamepad.Gamepad): void {
let gamepadID = thisGamepad.id.toLowerCase(); const gamepadID = thisGamepad.id.toLowerCase();
const mappedPad = this.mapGamepad(gamepadID); const mappedPad = this.mapGamepad(gamepadID);
this.player['mapping'] = mappedPad.gamepadMapping; this.player['mapping'] = mappedPad.gamepadMapping;
} }
/** /**
* Refreshes and re-indexes the list of connected gamepads. * Refreshes and re-indexes the list of connected gamepads.
* *
* @remarks * @remarks
@ -212,18 +212,18 @@ export class InputsController {
* It corrects the index of each gamepad to account for any previously undefined entries, * It corrects the index of each gamepad to account for any previously undefined entries,
* ensuring that all gamepads are properly indexed and can be accurately referenced within the game. * ensuring that all gamepads are properly indexed and can be accurately referenced within the game.
*/ */
refreshGamepads(): void { refreshGamepads(): void {
// Sometimes, gamepads are undefined. For some reason. // Sometimes, gamepads are undefined. For some reason.
this.gamepads = this.scene.input.gamepad.gamepads.filter(function (el) { this.gamepads = this.scene.input.gamepad.gamepads.filter(function (el) {
return el != null; return el != null;
}); });
for (const [index, thisGamepad] of this.gamepads.entries()) { for (const [index, thisGamepad] of this.gamepads.entries()) {
thisGamepad.index = index; // Overwrite the gamepad index, in case we had undefined gamepads earlier thisGamepad.index = index; // Overwrite the gamepad index, in case we had undefined gamepads earlier
}
} }
}
/** /**
* Retrieves the current gamepad mapping for in-game actions. * Retrieves the current gamepad mapping for in-game actions.
* *
* @returns An object mapping gamepad buttons to in-game actions based on the player's current gamepad configuration. * @returns An object mapping gamepad buttons to in-game actions based on the player's current gamepad configuration.
@ -234,31 +234,31 @@ export class InputsController {
* The mapping includes directional controls, action buttons, and system commands among others, * The mapping includes directional controls, action buttons, and system commands among others,
* adjusted for any custom settings such as swapped action buttons. * adjusted for any custom settings such as swapped action buttons.
*/ */
getActionGamepadMapping(): ActionGamepadMapping { getActionGamepadMapping(): ActionGamepadMapping {
const gamepadMapping = {}; const gamepadMapping = {};
if (!this.player?.mapping) return gamepadMapping; if (!this.player?.mapping) return gamepadMapping;
gamepadMapping[this.player.mapping.LC_N] = Button.UP; gamepadMapping[this.player.mapping.LC_N] = Button.UP;
gamepadMapping[this.player.mapping.LC_S] = Button.DOWN; gamepadMapping[this.player.mapping.LC_S] = Button.DOWN;
gamepadMapping[this.player.mapping.LC_W] = Button.LEFT; gamepadMapping[this.player.mapping.LC_W] = Button.LEFT;
gamepadMapping[this.player.mapping.LC_E] = Button.RIGHT; gamepadMapping[this.player.mapping.LC_E] = Button.RIGHT;
gamepadMapping[this.player.mapping.TOUCH] = Button.SUBMIT; gamepadMapping[this.player.mapping.TOUCH] = Button.SUBMIT;
gamepadMapping[this.player.mapping.RC_S] = this.scene.abSwapped ? Button.CANCEL : Button.ACTION; gamepadMapping[this.player.mapping.RC_S] = this.scene.abSwapped ? Button.CANCEL : Button.ACTION;
gamepadMapping[this.player.mapping.RC_E] = this.scene.abSwapped ? Button.ACTION : Button.CANCEL; gamepadMapping[this.player.mapping.RC_E] = this.scene.abSwapped ? Button.ACTION : Button.CANCEL;
gamepadMapping[this.player.mapping.SELECT] = Button.STATS; gamepadMapping[this.player.mapping.SELECT] = Button.STATS;
gamepadMapping[this.player.mapping.START] = Button.MENU; gamepadMapping[this.player.mapping.START] = Button.MENU;
gamepadMapping[this.player.mapping.RB] = Button.CYCLE_SHINY; gamepadMapping[this.player.mapping.RB] = Button.CYCLE_SHINY;
gamepadMapping[this.player.mapping.LB] = Button.CYCLE_FORM; gamepadMapping[this.player.mapping.LB] = Button.CYCLE_FORM;
gamepadMapping[this.player.mapping.LT] = Button.CYCLE_GENDER; gamepadMapping[this.player.mapping.LT] = Button.CYCLE_GENDER;
gamepadMapping[this.player.mapping.RT] = Button.CYCLE_ABILITY; gamepadMapping[this.player.mapping.RT] = Button.CYCLE_ABILITY;
gamepadMapping[this.player.mapping.RC_W] = Button.CYCLE_NATURE; gamepadMapping[this.player.mapping.RC_W] = Button.CYCLE_NATURE;
gamepadMapping[this.player.mapping.RC_N] = Button.CYCLE_VARIANT; gamepadMapping[this.player.mapping.RC_N] = Button.CYCLE_VARIANT;
gamepadMapping[this.player.mapping.LS] = Button.SPEED_UP; gamepadMapping[this.player.mapping.LS] = Button.SPEED_UP;
gamepadMapping[this.player.mapping.RS] = Button.SLOW_DOWN; gamepadMapping[this.player.mapping.RS] = Button.SLOW_DOWN;
return gamepadMapping; return gamepadMapping;
} }
/** /**
* Handles the 'down' event for gamepad buttons, emitting appropriate events and updating the interaction state. * Handles the 'down' event for gamepad buttons, emitting appropriate events and updating the interaction state.
* *
* @param pad - The gamepad on which the button press occurred. * @param pad - The gamepad on which the button press occurred.
@ -271,20 +271,20 @@ export class InputsController {
* - Checks if the pressed button is mapped to a game action. * - Checks if the pressed button is mapped to a game action.
* - If mapped, emits an 'input_down' event with the controller type and button action, and updates the interaction of this button. * - If mapped, emits an 'input_down' event with the controller type and button action, and updates the interaction of this button.
*/ */
gamepadButtonDown(pad: Phaser.Input.Gamepad.Gamepad, button: Phaser.Input.Gamepad.Button, value: number): void { gamepadButtonDown(pad: Phaser.Input.Gamepad.Gamepad, button: Phaser.Input.Gamepad.Button, value: number): void {
if (!this.gamepadSupport) return; if (!this.gamepadSupport) return;
const actionMapping = this.getActionGamepadMapping(); const actionMapping = this.getActionGamepadMapping();
const buttonDown = actionMapping.hasOwnProperty(button.index) && actionMapping[button.index]; const buttonDown = actionMapping.hasOwnProperty(button.index) && actionMapping[button.index];
if (buttonDown !== undefined) { if (buttonDown !== undefined) {
this.events.emit('input_down', { this.events.emit('input_down', {
controller_type: 'gamepad', controller_type: 'gamepad',
button: buttonDown, button: buttonDown,
}); });
this.setLastProcessedMovementTime(buttonDown, 'gamepad'); this.setLastProcessedMovementTime(buttonDown, 'gamepad');
}
} }
}
/** /**
* Handles the 'up' event for gamepad buttons, emitting appropriate events and clearing the interaction state. * Handles the 'up' event for gamepad buttons, emitting appropriate events and clearing the interaction state.
* *
* @param pad - The gamepad on which the button release occurred. * @param pad - The gamepad on which the button release occurred.
@ -297,20 +297,20 @@ export class InputsController {
* - Checks if the released button is mapped to a game action. * - Checks if the released button is mapped to a game action.
* - If mapped, emits an 'input_up' event with the controller type and button action, and clears the interaction for this button. * - If mapped, emits an 'input_up' event with the controller type and button action, and clears the interaction for this button.
*/ */
gamepadButtonUp(pad: Phaser.Input.Gamepad.Gamepad, button: Phaser.Input.Gamepad.Button, value: number): void { gamepadButtonUp(pad: Phaser.Input.Gamepad.Gamepad, button: Phaser.Input.Gamepad.Button, value: number): void {
if (!this.gamepadSupport) return; if (!this.gamepadSupport) return;
const actionMapping = this.getActionGamepadMapping(); const actionMapping = this.getActionGamepadMapping();
const buttonUp = actionMapping.hasOwnProperty(button.index) && actionMapping[button.index]; const buttonUp = actionMapping.hasOwnProperty(button.index) && actionMapping[button.index];
if (buttonUp !== undefined) { if (buttonUp !== undefined) {
this.events.emit('input_up', { this.events.emit('input_up', {
controller_type: 'gamepad', controller_type: 'gamepad',
button: buttonUp, button: buttonUp,
}); });
this.delLastProcessedMovementTime(buttonUp); this.delLastProcessedMovementTime(buttonUp);
}
} }
}
/** /**
* Configures keyboard controls for the game, mapping physical keys to game actions. * Configures keyboard controls for the game, mapping physical keys to game actions.
* *
* @remarks * @remarks
@ -328,43 +328,43 @@ export class InputsController {
* Post-setup, it initializes touch controls (if applicable) and starts listening for keyboard inputs using * Post-setup, it initializes touch controls (if applicable) and starts listening for keyboard inputs using
* `listenInputKeyboard`, ensuring that all configured keys are actively monitored for player interactions. * `listenInputKeyboard`, ensuring that all configured keys are actively monitored for player interactions.
*/ */
setupKeyboardControls(): void { setupKeyboardControls(): void {
const keyCodes = Phaser.Input.Keyboard.KeyCodes; const keyCodes = Phaser.Input.Keyboard.KeyCodes;
const keyConfig = { const keyConfig = {
[Button.UP]: [keyCodes.UP, keyCodes.W], [Button.UP]: [keyCodes.UP, keyCodes.W],
[Button.DOWN]: [keyCodes.DOWN, keyCodes.S], [Button.DOWN]: [keyCodes.DOWN, keyCodes.S],
[Button.LEFT]: [keyCodes.LEFT, keyCodes.A], [Button.LEFT]: [keyCodes.LEFT, keyCodes.A],
[Button.RIGHT]: [keyCodes.RIGHT, keyCodes.D], [Button.RIGHT]: [keyCodes.RIGHT, keyCodes.D],
[Button.SUBMIT]: [keyCodes.ENTER], [Button.SUBMIT]: [keyCodes.ENTER],
[Button.ACTION]: [keyCodes.SPACE, keyCodes.Z], [Button.ACTION]: [keyCodes.SPACE, keyCodes.Z],
[Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X], [Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X],
[Button.MENU]: [keyCodes.ESC, keyCodes.M], [Button.MENU]: [keyCodes.ESC, keyCodes.M],
[Button.STATS]: [keyCodes.SHIFT, keyCodes.C], [Button.STATS]: [keyCodes.SHIFT, keyCodes.C],
[Button.CYCLE_SHINY]: [keyCodes.R], [Button.CYCLE_SHINY]: [keyCodes.R],
[Button.CYCLE_FORM]: [keyCodes.F], [Button.CYCLE_FORM]: [keyCodes.F],
[Button.CYCLE_GENDER]: [keyCodes.G], [Button.CYCLE_GENDER]: [keyCodes.G],
[Button.CYCLE_ABILITY]: [keyCodes.E], [Button.CYCLE_ABILITY]: [keyCodes.E],
[Button.CYCLE_NATURE]: [keyCodes.N], [Button.CYCLE_NATURE]: [keyCodes.N],
[Button.CYCLE_VARIANT]: [keyCodes.V], [Button.CYCLE_VARIANT]: [keyCodes.V],
[Button.SPEED_UP]: [keyCodes.PLUS], [Button.SPEED_UP]: [keyCodes.PLUS],
[Button.SLOW_DOWN]: [keyCodes.MINUS] [Button.SLOW_DOWN]: [keyCodes.MINUS]
}; };
const mobileKeyConfig = {}; const mobileKeyConfig = {};
for (const b of Utils.getEnumValues(Button)) { for (const b of Utils.getEnumValues(Button)) {
const keys: Phaser.Input.Keyboard.Key[] = []; const keys: Phaser.Input.Keyboard.Key[] = [];
if (keyConfig.hasOwnProperty(b)) { if (keyConfig.hasOwnProperty(b)) {
for (let k of keyConfig[b]) for (const k of keyConfig[b])
keys.push(this.scene.input.keyboard.addKey(k, false)); keys.push(this.scene.input.keyboard.addKey(k, false));
mobileKeyConfig[Button[b]] = keys[0]; mobileKeyConfig[Button[b]] = keys[0];
} }
this.buttonKeys[b] = keys; this.buttonKeys[b] = keys;
}
initTouchControls(mobileKeyConfig);
this.listenInputKeyboard();
} }
/** initTouchControls(mobileKeyConfig);
this.listenInputKeyboard();
}
/**
* Sets up event listeners for keyboard inputs on all registered keys. * Sets up event listeners for keyboard inputs on all registered keys.
* *
* @remarks * @remarks
@ -382,28 +382,28 @@ export class InputsController {
* This setup ensures that each key on the keyboard is monitored for press and release events, * This setup ensures that each key on the keyboard is monitored for press and release events,
* and that these events are properly communicated within the system. * and that these events are properly communicated within the system.
*/ */
listenInputKeyboard(): void { listenInputKeyboard(): void {
this.buttonKeys.forEach((row, index) => { this.buttonKeys.forEach((row, index) => {
for (const key of row) { for (const key of row) {
key.on('down', () => { key.on('down', () => {
this.events.emit('input_down', { this.events.emit('input_down', {
controller_type: 'keyboard', controller_type: 'keyboard',
button: index, button: index,
}); });
this.setLastProcessedMovementTime(index, 'keyboard'); this.setLastProcessedMovementTime(index, 'keyboard');
});
key.on('up', () => {
this.events.emit('input_up', {
controller_type: 'keyboard',
button: index,
});
this.delLastProcessedMovementTime(index);
});
}
}); });
} key.on('up', () => {
this.events.emit('input_up', {
controller_type: 'keyboard',
button: index,
});
this.delLastProcessedMovementTime(index);
});
}
});
}
/** /**
* Maps a gamepad ID to a specific gamepad configuration based on the ID's characteristics. * Maps a gamepad ID to a specific gamepad configuration based on the ID's characteristics.
* *
* @param id - The gamepad ID string, typically representing a unique identifier for a gamepad model or make. * @param id - The gamepad ID string, typically representing a unique identifier for a gamepad model or make.
@ -416,33 +416,33 @@ export class InputsController {
* - If the ID contains '054c', it is identified as a DualShock gamepad. * - If the ID contains '054c', it is identified as a DualShock gamepad.
* If no specific identifiers are recognized, a generic gamepad configuration is returned. * If no specific identifiers are recognized, a generic gamepad configuration is returned.
*/ */
mapGamepad(id: string): GamepadConfig { mapGamepad(id: string): GamepadConfig {
id = id.toLowerCase(); id = id.toLowerCase();
if (id.includes('081f') && id.includes('e401')) { if (id.includes('081f') && id.includes('e401')) {
return pad_unlicensedSNES; return pad_unlicensedSNES;
} else if (id.includes('xbox') && id.includes('360')) { } else if (id.includes('xbox') && id.includes('360')) {
return pad_xbox360; return pad_xbox360;
} else if (id.includes('054c')) { } else if (id.includes('054c')) {
return pad_dualshock; return pad_dualshock;
}
return pad_generic;
} }
/** return pad_generic;
}
/**
* repeatInputDurationJustPassed returns true if @param button has been held down long * repeatInputDurationJustPassed returns true if @param button has been held down long
* enough to fire a repeated input. A button must claim the buttonLock before * enough to fire a repeated input. A button must claim the buttonLock before
* firing a repeated input - this is to prevent multiple buttons from firing repeatedly. * firing a repeated input - this is to prevent multiple buttons from firing repeatedly.
*/ */
repeatInputDurationJustPassed(button: Button): boolean { repeatInputDurationJustPassed(button: Button): boolean {
if (!this.isButtonLocked(button)) return false; if (!this.isButtonLocked(button)) return false;
if (this.time.now - this.interactions[button].pressTime >= repeatInputDelayMillis) { if (this.time.now - this.interactions[button].pressTime >= repeatInputDelayMillis) {
return true; return true;
}
} }
}
/** /**
* This method updates the interaction state to reflect that the button is pressed. * This method updates the interaction state to reflect that the button is pressed.
* *
* @param button - The button for which to set the interaction. * @param button - The button for which to set the interaction.
@ -457,15 +457,15 @@ export class InputsController {
* *
* Additionally, this method locks the button (by calling `setButtonLock`) to prevent it from being re-processed until it is released, ensuring that each press is handled distinctly. * Additionally, this method locks the button (by calling `setButtonLock`) to prevent it from being re-processed until it is released, ensuring that each press is handled distinctly.
*/ */
setLastProcessedMovementTime(button: Button, source: String = 'keyboard'): void { setLastProcessedMovementTime(button: Button, source: String = 'keyboard'): void {
if (!this.interactions.hasOwnProperty(button)) return; if (!this.interactions.hasOwnProperty(button)) return;
this.setButtonLock(button); this.setButtonLock(button);
this.interactions[button].pressTime = this.time.now; this.interactions[button].pressTime = this.time.now;
this.interactions[button].isPressed = true; this.interactions[button].isPressed = true;
this.interactions[button].source = source; this.interactions[button].source = source;
} }
/** /**
* Clears the last interaction for a specified button. * Clears the last interaction for a specified button.
* *
* @param button - The button for which to clear the interaction. * @param button - The button for which to clear the interaction.
@ -479,15 +479,15 @@ export class InputsController {
* *
* It releases the button lock, which prevents the button from being processed repeatedly until it's explicitly released. * It releases the button lock, which prevents the button from being processed repeatedly until it's explicitly released.
*/ */
delLastProcessedMovementTime(button: Button): void { delLastProcessedMovementTime(button: Button): void {
if (!this.interactions.hasOwnProperty(button)) return; if (!this.interactions.hasOwnProperty(button)) return;
this.releaseButtonLock(button); this.releaseButtonLock(button);
this.interactions[button].pressTime = null; this.interactions[button].pressTime = null;
this.interactions[button].isPressed = false; this.interactions[button].isPressed = false;
this.interactions[button].source = null; this.interactions[button].source = null;
} }
/** /**
* Deactivates all currently pressed keys and resets their interaction states. * Deactivates all currently pressed keys and resets their interaction states.
* *
* @remarks * @remarks
@ -505,19 +505,19 @@ export class InputsController {
* *
* This method is typically called when needing to ensure that all inputs are neutralized. * This method is typically called when needing to ensure that all inputs are neutralized.
*/ */
deactivatePressedKey(): void { deactivatePressedKey(): void {
this.releaseButtonLock(this.buttonLock); this.releaseButtonLock(this.buttonLock);
this.releaseButtonLock(this.buttonLock2); this.releaseButtonLock(this.buttonLock2);
for (const b of Utils.getEnumValues(Button)) { for (const b of Utils.getEnumValues(Button)) {
if (this.interactions.hasOwnProperty(b)) { if (this.interactions.hasOwnProperty(b)) {
this.interactions[b].pressTime = null; this.interactions[b].pressTime = null;
this.interactions[b].isPressed = false; this.interactions[b].isPressed = false;
this.interactions[b].source = null; this.interactions[b].source = null;
} }
}
} }
}
/** /**
* Checks if a specific button is currently locked. * Checks if a specific button is currently locked.
* *
* @param button - The button to check for a lock status. * @param button - The button to check for a lock status.
@ -527,11 +527,11 @@ export class InputsController {
* This method is used to determine if a given button is currently prevented from being processed due to a lock. * This method is used to determine if a given button is currently prevented from being processed due to a lock.
* It checks against two separate lock variables, allowing for up to two buttons to be locked simultaneously. * It checks against two separate lock variables, allowing for up to two buttons to be locked simultaneously.
*/ */
isButtonLocked(button: Button): boolean { isButtonLocked(button: Button): boolean {
return (this.buttonLock === button || this.buttonLock2 === button); return (this.buttonLock === button || this.buttonLock2 === button);
} }
/** /**
* Sets a lock on a given button if it is not already locked. * Sets a lock on a given button if it is not already locked.
* *
* @param button - The button to lock. * @param button - The button to lock.
@ -542,15 +542,15 @@ export class InputsController {
* If not, it locks the button using the first available lock variable. * If not, it locks the button using the first available lock variable.
* This mechanism allows for up to two buttons to be locked at the same time. * This mechanism allows for up to two buttons to be locked at the same time.
*/ */
setButtonLock(button: Button): void { setButtonLock(button: Button): void {
if (this.buttonLock === button || this.buttonLock2 === button) return; if (this.buttonLock === button || this.buttonLock2 === button) return;
if (this.buttonLock === button) this.buttonLock2 = button; if (this.buttonLock === button) this.buttonLock2 = button;
else if (this.buttonLock2 === button) this.buttonLock = button; else if (this.buttonLock2 === button) this.buttonLock = button;
else if (!!this.buttonLock) this.buttonLock2 = button; else if (!!this.buttonLock) this.buttonLock2 = button;
else this.buttonLock = button; else this.buttonLock = button;
} }
/** /**
* Releases a lock on a specific button, allowing it to be processed again. * Releases a lock on a specific button, allowing it to be processed again.
* *
* @param button - The button whose lock is to be released. * @param button - The button whose lock is to be released.
@ -560,8 +560,8 @@ export class InputsController {
* If either lock matches the specified button, that lock is cleared. * If either lock matches the specified button, that lock is cleared.
* This action frees the button to be processed again, ensuring it can respond to new inputs. * This action frees the button to be processed again, ensuring it can respond to new inputs.
*/ */
releaseButtonLock(button: Button): void { releaseButtonLock(button: Button): void {
if (this.buttonLock === button) this.buttonLock = null; if (this.buttonLock === button) this.buttonLock = null;
else if (this.buttonLock2 === button) this.buttonLock2 = null; else if (this.buttonLock2 === button) this.buttonLock2 = null;
} }
} }

View File

@ -1,14 +1,14 @@
import { GachaType } from "./data/egg"; import { GachaType } from './data/egg';
import { Biome } from "./data/enums/biome"; import { Biome } from './data/enums/biome';
import { TrainerType } from "./data/enums/trainer-type"; import { TrainerType } from './data/enums/trainer-type';
import { trainerConfigs } from "./data/trainer-config"; import { trainerConfigs } from './data/trainer-config';
import { getBiomeHasProps } from "./field/arena"; import { getBiomeHasProps } from './field/arena';
import CacheBustedLoaderPlugin from "./plugins/cache-busted-loader-plugin"; import CacheBustedLoaderPlugin from './plugins/cache-busted-loader-plugin';
import { SceneBase } from "./scene-base"; import { SceneBase } from './scene-base';
import { WindowVariant, getWindowVariantSuffix } from "./ui/ui-theme"; import { WindowVariant, getWindowVariantSuffix } from './ui/ui-theme';
import { isMobile } from "./touch-controls"; import { isMobile } from './touch-controls';
import * as Utils from "./utils"; import * as Utils from './utils';
import { initI18n } from "./plugins/i18n"; import { initI18n } from './plugins/i18n';
export class LoadingScene extends SceneBase { export class LoadingScene extends SceneBase {
constructor() { constructor() {
@ -35,7 +35,7 @@ export class LoadingScene extends SceneBase {
this.loadImage('candy_overlay', 'ui'); this.loadImage('candy_overlay', 'ui');
this.loadImage('cursor', 'ui'); this.loadImage('cursor', 'ui');
this.loadImage('cursor_reverse', 'ui'); this.loadImage('cursor_reverse', 'ui');
for (let wv of Utils.getEnumValues(WindowVariant)) { for (const wv of Utils.getEnumValues(WindowVariant)) {
for (let w = 1; w <= 5; w++) for (let w = 1; w <= 5; w++)
this.loadImage(`window_${w}${getWindowVariantSuffix(wv)}`, 'ui/windows'); this.loadImage(`window_${w}${getWindowVariantSuffix(wv)}`, 'ui/windows');
} }
@ -100,7 +100,7 @@ export class LoadingScene extends SceneBase {
this.loadImage('summary_bg', 'ui'); this.loadImage('summary_bg', 'ui');
this.loadImage('summary_overlay_shiny', 'ui'); this.loadImage('summary_overlay_shiny', 'ui');
this.loadImage('summary_profile', 'ui'); this.loadImage('summary_profile', 'ui');
this.loadImage('summary_profile_prompt_z', 'ui') // The pixel Z button prompt this.loadImage('summary_profile_prompt_z', 'ui'); // The pixel Z button prompt
this.loadImage('summary_profile_prompt_a', 'ui'); // The pixel A button prompt this.loadImage('summary_profile_prompt_a', 'ui'); // The pixel A button prompt
this.loadImage('summary_profile_ability', 'ui'); // Pixel text 'ABILITY' this.loadImage('summary_profile_ability', 'ui'); // Pixel text 'ABILITY'
this.loadImage('summary_profile_passive', 'ui'); // Pixel text 'PASSIVE' this.loadImage('summary_profile_passive', 'ui'); // Pixel text 'PASSIVE'
@ -174,8 +174,8 @@ export class LoadingScene extends SceneBase {
this.loadAtlas('c_rival_f', 'character', 'rival_f'); this.loadAtlas('c_rival_f', 'character', 'rival_f');
// Load pokemon-related images // Load pokemon-related images
this.loadImage(`pkmn__back__sub`, 'pokemon/back', 'sub.png'); this.loadImage('pkmn__back__sub', 'pokemon/back', 'sub.png');
this.loadImage(`pkmn__sub`, 'pokemon', 'sub.png'); this.loadImage('pkmn__sub', 'pokemon', 'sub.png');
this.loadAtlas('battle_stats', 'effects'); this.loadAtlas('battle_stats', 'effects');
this.loadAtlas('shiny', 'effects'); this.loadAtlas('shiny', 'effects');
this.loadAtlas('shiny_2', 'effects'); this.loadAtlas('shiny_2', 'effects');
@ -310,8 +310,8 @@ export class LoadingScene extends SceneBase {
y: height / 2 - 24, y: height / 2 - 24,
text: '0%', text: '0%',
style: { style: {
font: "72px emerald", font: '72px emerald',
color: "#ffffff", color: '#ffffff',
}, },
}); });
percentText.setOrigin(0.5, 0.5); percentText.setOrigin(0.5, 0.5);
@ -319,10 +319,10 @@ export class LoadingScene extends SceneBase {
const assetText = this.make.text({ const assetText = this.make.text({
x: width / 2, x: width / 2,
y: height / 2 + 48, y: height / 2 + 48,
text: "", text: '',
style: { style: {
font: "48px emerald", font: '48px emerald',
color: "#ffffff", color: '#ffffff',
}, },
}); });
assetText.setOrigin(0.5, 0.5); assetText.setOrigin(0.5, 0.5);
@ -331,7 +331,7 @@ export class LoadingScene extends SceneBase {
intro.setOrigin(0, 0); intro.setOrigin(0, 0);
intro.setScale(3); intro.setScale(3);
this.load.on("progress", (value: string) => { this.load.on('progress', (value: string) => {
const parsedValue = parseFloat(value); const parsedValue = parseFloat(value);
percentText.setText(`${Math.floor(parsedValue * 100)}%`); percentText.setText(`${Math.floor(parsedValue * 100)}%`);
progressBar.clear(); progressBar.clear();
@ -339,7 +339,7 @@ export class LoadingScene extends SceneBase {
progressBar.fillRect(width / 2 - 320, 360, 640 * parsedValue, 64); progressBar.fillRect(width / 2 - 320, 360, 640 * parsedValue, 64);
}); });
this.load.on("fileprogress", file => { this.load.on('fileprogress', file => {
assetText.setText(`Loading asset: ${file.key}`); assetText.setText(`Loading asset: ${file.key}`);
}); });
@ -360,33 +360,33 @@ export class LoadingScene extends SceneBase {
this.load.on('filecomplete', key => { this.load.on('filecomplete', key => {
switch (key) { switch (key) {
case 'intro_dark': case 'intro_dark':
intro.load('intro_dark'); intro.load('intro_dark');
intro.on('complete', () => { intro.on('complete', () => {
this.tweens.add({ this.tweens.add({
targets: intro, targets: intro,
duration: 500, duration: 500,
alpha: 0, alpha: 0,
ease: 'Sine.easeIn' ease: 'Sine.easeIn'
});
loadingGraphics.map(g => g.setVisible(true));
}); });
intro.play(); loadingGraphics.map(g => g.setVisible(true));
break; });
case 'loading_bg': intro.play();
bg.setTexture('loading_bg'); break;
if (mobile) case 'loading_bg':
bg.setVisible(true); bg.setTexture('loading_bg');
break; if (mobile)
case 'logo': bg.setVisible(true);
logo.setTexture('logo'); break;
if (mobile) case 'logo':
logo.setVisible(true); logo.setTexture('logo');
break; if (mobile)
logo.setVisible(true);
break;
} }
}); });
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,51 +1,51 @@
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,
abilityTriggers: abilityTriggers, abilityTriggers: abilityTriggers,
battle: battle, battle: battle,
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
egg: egg, egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
growth: growth, growth: growth,
menu: menu, menu: menu,
menuUiHandler: menuUiHandler, menuUiHandler: menuUiHandler,
modifierType: modifierType, modifierType: modifierType,
move: move, move: move,
nature: nature, nature: nature,
pokeball: pokeball, pokeball: pokeball,
pokemon: pokemon, pokemon: pokemon,
pokemonInfo: pokemonInfo, pokemonInfo: pokemonInfo,
splashMessages: splashMessages, splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler, starterSelectUiHandler: starterSelectUiHandler,
titles: titles, titles: titles,
trainerClasses: trainerClasses, trainerClasses: trainerClasses,
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
weather: weather, weather: weather,
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,10 +37,10 @@ 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.
$Es gibt sogar Pokémon, die du nur aus Eiern erhalten kannst. $Es gibt sogar Pokémon, die du nur aus Eiern erhalten kannst.
$Es gibt drei Gacha-Maschinen mit je unterschiedlichen Boni,\nalso such' dir die aus, die dir am besten gefällt!`, $Es gibt drei Gacha-Maschinen mit je unterschiedlichen Boni,\nalso such' dir die aus, die dir am besten gefällt!`,
} as const; } as const;

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,51 +1,51 @@
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,
abilityTriggers: abilityTriggers, abilityTriggers: abilityTriggers,
battle: battle, battle: battle,
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
egg: egg, egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
growth: growth, growth: growth,
menu: menu, menu: menu,
menuUiHandler: menuUiHandler, menuUiHandler: menuUiHandler,
modifierType: modifierType, modifierType: modifierType,
move: move, move: move,
nature: nature, nature: nature,
pokeball: pokeball, pokeball: pokeball,
pokemon: pokemon, pokemon: pokemon,
pokemonInfo: pokemonInfo, pokemonInfo: pokemonInfo,
splashMessages: splashMessages, splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler, starterSelectUiHandler: starterSelectUiHandler,
titles: titles, titles: titles,
trainerClasses: trainerClasses, trainerClasses: trainerClasses,
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
weather: weather, weather: weather,
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

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