Compare commits

..

No commits in common. "8a8a2e128a8ca8630d66deeb7b22ef72bb5d3f60" and "5fe69fff9ce1b6ec3c790a79ec7f66c21c4ac69d" have entirely different histories.

24 changed files with 160 additions and 365 deletions

3
.gitignore vendored
View File

@ -24,9 +24,6 @@ dist-ssr
*.sln *.sln
*.sw? *.sw?
# Docummentation
docs/*
public/images/trainer/convert/* public/images/trainer/convert/*
public/images/battle_anims/input/*.png public/images/battle_anims/input/*.png
public/images/pokemon/input/*.png public/images/pokemon/input/*.png

View File

@ -1,7 +1,7 @@
{ {
"textures": [ "textures": [
{ {
"image": "school_kid_f.png", "image": "student_f.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 192, "w": 192,

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -1,7 +1,7 @@
{ {
"textures": [ "textures": [
{ {
"image": "school_kid_m.png", "image": "student_m.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": {
"w": 178, "w": 178,

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -1,6 +1,6 @@
import { Moves } from "./enums/moves"; import { Moves } from "./enums/moves";
import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from "./battle-anims"; import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from "./battle-anims";
import { BattleEndPhase, MoveEffectPhase, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases"; import { BattleEndPhase, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases";
import { BattleStat, getBattleStatName } from "./battle-stat"; import { BattleStat, getBattleStatName } from "./battle-stat";
import { EncoreTag } from "./battler-tags"; import { EncoreTag } from "./battler-tags";
import { BattlerTagType } from "./enums/battler-tag-type"; import { BattlerTagType } from "./enums/battler-tag-type";
@ -33,26 +33,20 @@ export enum MoveCategory {
} }
export enum MoveTarget { export enum MoveTarget {
/** {@link https://bulbapedia.bulbagarden.net/wiki/Category:Moves_that_target_the_user Moves that target the User} */
USER, USER,
OTHER, OTHER,
ALL_OTHERS, ALL_OTHERS,
NEAR_OTHER, NEAR_OTHER,
/** {@link https://bulbapedia.bulbagarden.net/wiki/Category:Moves_that_target_all_adjacent_Pok%C3%A9mon Moves that target all adjacent Pokemon} */
ALL_NEAR_OTHERS, ALL_NEAR_OTHERS,
NEAR_ENEMY, NEAR_ENEMY,
/** {@link https://bulbapedia.bulbagarden.net/wiki/Category:Moves_that_target_all_adjacent_foes Moves that taret all adjacent foes} */
ALL_NEAR_ENEMIES, ALL_NEAR_ENEMIES,
RANDOM_NEAR_ENEMY, RANDOM_NEAR_ENEMY,
ALL_ENEMIES, ALL_ENEMIES,
/** {@link https://bulbapedia.bulbagarden.net/wiki/Category:Counterattacks Counterattacks} */
ATTACKER, ATTACKER,
/** {@link https://bulbapedia.bulbagarden.net/wiki/Category:Moves_that_target_one_adjacent_ally Moves that target one adjacent ally} */
NEAR_ALLY, NEAR_ALLY,
ALLY, ALLY,
USER_OR_NEAR_ALLY, USER_OR_NEAR_ALLY,
USER_AND_ALLIES, USER_AND_ALLIES,
/** {@link https://bulbapedia.bulbagarden.net/wiki/Category:Moves_that_target_all_Pok%C3%A9mon Moves that target all Pokemon} */
ALL, ALL,
USER_SIDE, USER_SIDE,
ENEMY_SIDE, ENEMY_SIDE,
@ -73,8 +67,8 @@ export enum MoveFlags {
PUNCHING_MOVE = 1 << 8, PUNCHING_MOVE = 1 << 8,
SLICING_MOVE = 1 << 9, SLICING_MOVE = 1 << 9,
/** /**
* Indicates a move should be affected by {@linkcode Abilities.RECKLESS} * Indicates a move should be affected by {@link Abilities.RECKLESS}
* @see {@linkcode Move.recklessMove()} * @see {@link Move.recklessMove()}
*/ */
RECKLESS_MOVE = 1 << 10, RECKLESS_MOVE = 1 << 10,
BALLBOMB_MOVE = 1 << 11, BALLBOMB_MOVE = 1 << 11,
@ -283,10 +277,10 @@ export default class Move implements Localizable {
} }
/** /**
* Sets the {@linkcode MoveFlags.RECKLESS_MOVE} flag for the calling Move * Sets the {@link MoveFlags.RECKLESS_MOVE} flag for the calling Move
* @see {@linkcode Abilities.RECKLESS} * @see {@link Abilities.RECKLESS}
* @param recklessMove The value to set the flag to * @param {boolean} recklessMove The value to set the flag to
* @returns The {@linkcode Move} that called this function * @returns {Move} The {@link Move} that called this function
*/ */
recklessMove(recklessMove?: boolean): this { recklessMove(recklessMove?: boolean): this {
this.setFlag(MoveFlags.RECKLESS_MOVE, recklessMove); this.setFlag(MoveFlags.RECKLESS_MOVE, recklessMove);
@ -441,12 +435,11 @@ export class SelfStatusMove extends Move {
} }
/** /**
* Base class defining all {@linkcode Move} Attributes * Base class defining all {@link Move} Attributes
* @abstract * @abstract
* @see {@linkcode apply}
*/ */
export abstract class MoveAttr { export abstract class MoveAttr {
/** Should this {@linkcode Move} target the user? */ /** Should this {@link Move} target the user? */
public selfTarget: boolean; public selfTarget: boolean;
constructor(selfTarget: boolean = false) { constructor(selfTarget: boolean = false) {
@ -455,13 +448,13 @@ export abstract class MoveAttr {
/** /**
* Applies move attributes * Applies move attributes
* @see {@linkcode applyMoveAttrsInternal} * @see {@link applyMoveAttrsInternal}
* @virtual * @virtual
* @param user {@linkcode Pokemon} using the move * @param user The {@link Pokemon} using the move
* @param target {@linkcode Pokemon} target of the move * @param target The target {@link Pokemon} of the move
* @param move {@linkcode Move} with this attribute * @param move The {@link Move} being used
* @param args Set of unique arguments needed by this attribute * @param args Set of unique arguments needed by this attribute
* @returns true if application of the ability succeeds * @returns true if the application succeeds
*/ */
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean | Promise<boolean> { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean | Promise<boolean> {
return true; return true;
@ -469,7 +462,7 @@ export abstract class MoveAttr {
/** /**
* @virtual * @virtual
* @returns the {@linkcode MoveCondition} or {@linkcode MoveConditionFunc} for this {@linkcode Move} * @returns the {@link MoveCondition} or {@link MoveConditionFunc} for this {@link Move}
*/ */
getCondition(): MoveCondition | MoveConditionFunc { getCondition(): MoveCondition | MoveConditionFunc {
return null; return null;
@ -477,11 +470,11 @@ export abstract class MoveAttr {
/** /**
* @virtual * @virtual
* @param user {@linkcode Pokemon} using the move * @param user The {@link Pokemon} using the move
* @param target {@linkcode Pokemon} target of the move * @param target The target {@link Pokemon} of the move
* @param move {@linkcode Move} with this attribute * @param move The {@link Move} being used
* @param cancelled {@linkcode Utils.BooleanHolder} which stores if the move should fail * @param cancelled A {@link Utils.BooleanHolder} which stores if the move should fail
* @returns the string representing failure of this {@linkcode Move} * @returns the string representing failure of this {@link Move}
*/ */
getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null { getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null {
return null; return null;
@ -489,7 +482,7 @@ export abstract class MoveAttr {
/** /**
* Used by the Enemy AI to rank an attack based on a given user * Used by the Enemy AI to rank an attack based on a given user
* @see {@linkcode EnemyPokemon.getNextMove} * @see {@link EnemyPokemon.getNextMove}
* @virtual * @virtual
*/ */
getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer {
@ -498,7 +491,7 @@ export abstract class MoveAttr {
/** /**
* Used by the Enemy AI to rank an attack based on a given target * Used by the Enemy AI to rank an attack based on a given target
* @see {@linkcode EnemyPokemon.getNextMove} * @see {@link EnemyPokemon.getNextMove}
* @virtual * @virtual
*/ */
getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer {
@ -516,14 +509,9 @@ export enum MoveEffectTrigger {
/** Base class defining all Move Effect Attributes /** Base class defining all Move Effect Attributes
* @extends MoveAttr * @extends MoveAttr
* @see {@linkcode apply}
*/ */
export class MoveEffectAttr extends MoveAttr { export class MoveEffectAttr extends MoveAttr {
/** Defines when this effect should trigger in the move's effect order
* @see {@linkcode MoveEffectPhase.start}
*/
public trigger: MoveEffectTrigger; public trigger: MoveEffectTrigger;
/** Should this effect only apply on the first hit? */
public firstHitOnly: boolean; public firstHitOnly: boolean;
constructor(selfTarget?: boolean, trigger?: MoveEffectTrigger, firstHitOnly: boolean = false) { constructor(selfTarget?: boolean, trigger?: MoveEffectTrigger, firstHitOnly: boolean = false) {
@ -533,20 +521,20 @@ export class MoveEffectAttr extends MoveAttr {
} }
/** /**
* Determines whether the {@linkcode Move}'s effects are valid to {@linkcode apply} * Determines whether the {@link Move}'s effects are valid to {@link apply}
* @virtual * @virtual
* @param user {@linkcode Pokemon} using the move * @param user The {@link Pokemon} using the move
* @param target {@linkcode Pokemon} target of the move * @param target The target {@link Pokemon} of the move
* @param move {@linkcode Move} with this attribute * @param move The {@link Move} being used
* @param args Set of unique arguments needed by this attribute * @param args Set of unique arguments needed by this attribute
* @returns true if basic application of the ability attribute should be possible * @returns true if the application succeeds
*/ */
canApply(user: Pokemon, target: Pokemon, move: Move, args: any[]) { canApply(user: Pokemon, target: Pokemon, move: Move, args: any[]) {
return !!(this.selfTarget ? user.hp && !user.getTag(BattlerTagType.FRENZY) : target.hp) return !!(this.selfTarget ? user.hp && !user.getTag(BattlerTagType.FRENZY) : target.hp)
&& (this.selfTarget || !target.getTag(BattlerTagType.PROTECTED) || move.hasFlag(MoveFlags.IGNORE_PROTECT)); && (this.selfTarget || !target.getTag(BattlerTagType.PROTECTED) || move.hasFlag(MoveFlags.IGNORE_PROTECT));
} }
/** Applies move effects so long as they are able based on {@linkcode canApply} */ /** Applies move effects so long as they are able based on {@link canApply} */
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean | Promise<boolean> { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean | Promise<boolean> {
return this.canApply(user, target, move, args); return this.canApply(user, target, move, args);
} }
@ -804,7 +792,7 @@ export class RecoilAttr extends MoveEffectAttr {
/** /**
* Attribute used for moves which self KO the user regardless if the move hits a target * Attribute used for moves which self KO the user regardless if the move hits a target
* @extends MoveEffectAttr * @extends MoveEffectAttr
* @see {@linkcode apply} * @see {@link apply}
**/ **/
export class SacrificialAttr extends MoveEffectAttr { export class SacrificialAttr extends MoveEffectAttr {
constructor() { constructor() {
@ -813,9 +801,9 @@ export class SacrificialAttr extends MoveEffectAttr {
/** /**
* Deals damage to the user equal to their current hp * Deals damage to the user equal to their current hp
* @param user {@linkcode Pokemon} that used the move * @param user Pokemon that used the move
* @param target {@linkcode Pokemon} target of the move * @param target The target of the move
* @param move {@linkcode Move} with this attribute * @param move Move with this attribute
* @param args N/A * @param args N/A
* @returns true if the function succeeds * @returns true if the function succeeds
**/ **/
@ -836,7 +824,7 @@ export class SacrificialAttr extends MoveEffectAttr {
/** /**
* Attribute used for moves which self KO the user but only if the move hits a target * Attribute used for moves which self KO the user but only if the move hits a target
* @extends MoveEffectAttr * @extends MoveEffectAttr
* @see {@linkcode apply} * @see {@link apply}
**/ **/
export class SacrificialAttrOnHit extends MoveEffectAttr { export class SacrificialAttrOnHit extends MoveEffectAttr {
constructor() { constructor() {
@ -845,13 +833,14 @@ export class SacrificialAttrOnHit extends MoveEffectAttr {
/** /**
* Deals damage to the user equal to their current hp if the move lands * Deals damage to the user equal to their current hp if the move lands
* @param user {@linkcode Pokemon} that used the move * @param user Pokemon that used the move
* @param target {@linkcode Pokemon} target of the move * @param target The target of the move
* @param move {@linkcode Move} with this attribute * @param move Move with this attribute
* @param args N/A * @param args N/A
* @returns true if the function succeeds * @returns true if the function succeeds
**/ **/
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
// If the move fails to hit a target, then the user does not faint and the function returns false // If the move fails to hit a target, then the user does not faint and the function returns false
if (!super.apply(user, target, move, args)) if (!super.apply(user, target, move, args))
return false; return false;
@ -871,9 +860,7 @@ export class SacrificialAttrOnHit extends MoveEffectAttr {
/** /**
* Attribute used for moves which cut the user's Max HP in half. * Attribute used for moves which cut the user's Max HP in half.
* Triggers using {@linkcode MoveEffectTrigger.POST_TARGET}. * Triggers using POST_TARGET.
* @extends MoveEffectAttr
* @see {@linkcode apply}
*/ */
export class HalfSacrificialAttr extends MoveEffectAttr { export class HalfSacrificialAttr extends MoveEffectAttr {
constructor() { constructor() {
@ -882,9 +869,9 @@ export class HalfSacrificialAttr extends MoveEffectAttr {
/** /**
* Cut's the user's Max HP in half and displays the appropriate recoil message * Cut's the user's Max HP in half and displays the appropriate recoil message
* @param user {@linkcode Pokemon} that used the move * @param user Pokemon that used the move
* @param target N/A * @param target N/A
* @param move {@linkcode Move} with this attribute * @param move Move with this attribute
* @param args N/A * @param args N/A
* @returns true if the function succeeds * @returns true if the function succeeds
*/ */
@ -918,12 +905,12 @@ export enum MultiHitType {
} }
/** /**
* Heals the user or target by {@linkcode healRatio} depending on the value of {@linkcode selfTarget} * Heals the user or target by {@link healRatio} depending on the value of {@link selfTarget}
* @extends MoveEffectAttr * @extends MoveEffectAttr
* @see {@linkcode apply} * @see {@link apply}
*/ */
export class HealAttr extends MoveEffectAttr { export class HealAttr extends MoveEffectAttr {
/** The percentage of {@linkcode Stat.HP} to heal */ /** The percentage of {@link Stat.HP} to heal */
private healRatio: number; private healRatio: number;
/** Should an animation be shown? */ /** Should an animation be shown? */
private showAnim: boolean; private showAnim: boolean;
@ -941,7 +928,7 @@ export class HealAttr extends MoveEffectAttr {
} }
/** /**
* Creates a new {@linkcode PokemonHealPhase}. * Creates a new {@link PokemonHealPhase}.
* This heals the target and shows the appropriate message. * This heals the target and shows the appropriate message.
*/ */
addHealPhase(target: Pokemon, healRatio: number) { addHealPhase(target: Pokemon, healRatio: number) {
@ -957,13 +944,11 @@ export class HealAttr extends MoveEffectAttr {
/** /**
* Cures the user's party of non-volatile status conditions, ie. Heal Bell, Aromatherapy * Cures the user's party of non-volatile status conditions, ie. Heal Bell, Aromatherapy
* @extends MoveEffectAttr * @param {string} message Message to display after using move
* @see {@linkcode apply} * @param {Abilities} abilityCondition Skips mons with this ability, ie. Soundproof
*/ */
export class PartyStatusCureAttr extends MoveEffectAttr { export class PartyStatusCureAttr extends MoveEffectAttr {
/** Message to display after using move */
private message: string; private message: string;
/** Skips mons with this ability, ie. Soundproof */
private abilityCondition: Abilities; private abilityCondition: Abilities;
constructor(message: string, abilityCondition: Abilities) { constructor(message: string, abilityCondition: Abilities) {
@ -1015,23 +1000,19 @@ export class SacrificialFullRestoreAttr extends SacrificialAttr {
/** /**
* Attribute used for moves which ignore type-based debuffs from weather, namely Hydro Steam. * Attribute used for moves which ignore type-based debuffs from weather, namely Hydro Steam.
* Called during damage calculation after getting said debuff from getAttackTypeMultiplier in the Pokemon class. * Called during damage calculation after getting said debuff from getAttackTypeMultiplier in the Pokemon class.
* @extends MoveAttr
* @see {@linkcode apply}
*/ */
export class IgnoreWeatherTypeDebuffAttr extends MoveAttr { export class IgnoreWeatherTypeDebuffAttr extends MoveAttr {
/** The {@linkcode WeatherType} this move ignores */
public weather: WeatherType; public weather: WeatherType;
constructor(weather: WeatherType){ constructor(weather: WeatherType){
super(); super();
this.weather = weather; this.weather = weather;
} }
/** /**
* Changes the type-based weather modifier if this move's power would be reduced by it * Changes the type-based weather modifier if this move's power would be reduced by it
* @param user {@linkcode Pokemon} that used the move * @param user Pokemon that used the move
* @param target N/A * @param target N/A
* @param move {@linkcode Move} with this attribute * @param move Move with this attribute
* @param args [0] {@linkcode Utils.NumberHolder} for arenaAttackTypeMultiplier * @param args [0] Utils.NumberHolder for arenaAttackTypeMultiplier
* @returns true if the function succeeds * @returns true if the function succeeds
*/ */
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
@ -1091,15 +1072,15 @@ export class SandHealAttr extends WeatherHealAttr {
} }
/** /**
* Heals the target or the user by either {@linkcode normalHealRatio} or {@linkcode boostedHealRatio} * Heals the target or the user by either {@link normalHealRatio} or {@link boostedHealRatio}
* depending on the evaluation of {@linkcode condition} * depending on the evaluation of {@link condition}
* @extends HealAttr * @extends HealAttr
* @see {@linkcode apply} * @see {@link apply}
*/ */
export class BoostHealAttr extends HealAttr { export class BoostHealAttr extends HealAttr {
/** Healing received when {@linkcode condition} is false */ /** Healing received when {@link condition} is false */
private normalHealRatio?: number; private normalHealRatio?: number;
/** Healing received when {@linkcode condition} is true */ /** Healing received when {@link condition} is true */
private boostedHealRatio?: number; private boostedHealRatio?: number;
/** The lambda expression to check against when boosting the healing value */ /** The lambda expression to check against when boosting the healing value */
private condition?: MoveConditionFunc; private condition?: MoveConditionFunc;
@ -1112,9 +1093,9 @@ export class BoostHealAttr extends HealAttr {
} }
/** /**
* @param user {@linkcode Pokemon} using the move * @param user The Pokemon using this move
* @param target {@linkcode Pokemon} target of the move * @param target The target Pokemon of this move
* @param move {@linkcode Move} with this attribute * @param move This move
* @param args N/A * @param args N/A
* @returns true if the move was successful * @returns true if the move was successful
*/ */
@ -1483,17 +1464,15 @@ export class BypassSleepAttr extends MoveAttr {
/** /**
* Attribute used for moves that bypass the burn damage reduction of physical moves, currently only facade * Attribute used for moves that bypass the burn damage reduction of physical moves, currently only facade
* Called during damage calculation * Called during damage calculation
* @extends MoveAttr
* @see {@linkcode apply}
*/
export class BypassBurnDamageReductionAttr extends MoveAttr {
/** Prevents the move's damage from being reduced by burn
* @param user N/A * @param user N/A
* @param target N/A * @param target N/A
* @param move {@linkcode Move} with this attribute * @param move Move with this attribute
* @param args [0] {@linkcode Utils.BooleanHolder} for burnDamageReductionCancelled * @param args Utils.BooleanHolder for burnDamageReductionCancelled
* @returns true if the function succeeds * @returns true if the function succeeds
*/ */
export class BypassBurnDamageReductionAttr extends MoveAttr {
/** Prevents the move's damage from being reduced by burn */
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
(args[0] as Utils.BooleanHolder).value = true; (args[0] as Utils.BooleanHolder).value = true;
@ -2503,19 +2482,16 @@ export class ThunderAccuracyAttr extends VariableAccuracyAttr {
/** /**
* Attribute used for moves which never miss * Attribute used for moves which never miss
* against Pokemon with the {@linkcode BattlerTagType.MINIMIZED} * against Pokemon with the {@link BattlerTagType.MINIMIZED}
* @extends VariableAccuracyAttr * @see {@link apply}
* @see {@linkcode apply}
*/
export class MinimizeAccuracyAttr extends VariableAccuracyAttr {
/**
* @see {@linkcode apply}
* @param user N/A * @param user N/A
* @param target {@linkcode Pokemon} target of the move * @param target Target of the move
* @param move N/A * @param move N/A
* @param args [0] Accuracy of the move to be modified * @param args [0] Accuracy of the move to be modified
* @returns true if the function succeeds * @returns true if the function succeeds
*/ */
export class MinimizeAccuracyAttr extends VariableAccuracyAttr{
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
if (target.getTag(BattlerTagType.MINIMIZED)){ if (target.getTag(BattlerTagType.MINIMIZED)){
const accuracy = args[0] as Utils.NumberHolder const accuracy = args[0] as Utils.NumberHolder
@ -3283,14 +3259,11 @@ export class FaintCountdownAttr extends AddBattlerTagAttr {
} }
} }
/** /** Attribute used when a move hits a {@link BattlerTagType} for double damage */
* Attribute used when a move hits a {@linkcode BattlerTagType} for double damage
* @extends MoveAttr
*/
export class HitsTagAttr extends MoveAttr { export class HitsTagAttr extends MoveAttr {
/** The {@linkcode BattlerTagType} this move hits */ /** The {@link BattlerTagType} this move hits */
public tagType: BattlerTagType; public tagType: BattlerTagType;
/** Should this move deal double damage against {@linkcode HitsTagAttr.tagType}? */ /** Should this move deal double damage against {@link HitsTagAttr.tagType}? */
public doubleDamage: boolean; public doubleDamage: boolean;
constructor(tagType: BattlerTagType, doubleDamage?: boolean) { constructor(tagType: BattlerTagType, doubleDamage?: boolean) {

View File

@ -229,16 +229,18 @@ export class TrainerConfig {
} }
setName(name: string): TrainerConfig { setName(name: string): TrainerConfig {
if (name === 'Finn') { if (name === 'Finn' || name === 'Ivy') {
// Give the rival a localized name // Give the rival a localized name
// First check if i18n is initialized // First check if i18n is initialized
if (!getIsInitialized()) { if (!getIsInitialized()) {
initI18n(); initI18n();
} }
if (name === 'Finn') { if (name === 'Finn') {
name = i18next.t('trainerNames:rival'); this.name = i18next.t('trainerNames:rival');
}
if (name === 'Ivy') {
this.name = i18next.t('trainerNames:rival_female');
} }
} }
this.name = name; this.name = name;
@ -282,18 +284,8 @@ export class TrainerConfig {
} }
setHasGenders(nameFemale?: string, femaleEncounterBgm?: TrainerType | string): TrainerConfig { setHasGenders(nameFemale?: string, femaleEncounterBgm?: TrainerType | string): TrainerConfig {
if (nameFemale === 'Ivy') {
// Give the rival a localized name
// First check if i18n is initialized
if (!getIsInitialized()) {
initI18n();
}
this.nameFemale = i18next.t('trainerNames:rival_female');
} else {
this.nameFemale = nameFemale;
}
this.hasGenders = true; this.hasGenders = true;
this.nameFemale = nameFemale;
if (femaleEncounterBgm) if (femaleEncounterBgm)
this.femaleEncounterBgm = typeof femaleEncounterBgm === 'number' ? TrainerType[femaleEncounterBgm].toString().replace(/\_/g, ' ').toLowerCase() : femaleEncounterBgm; this.femaleEncounterBgm = typeof femaleEncounterBgm === 'number' ? TrainerType[femaleEncounterBgm].toString().replace(/\_/g, ' ').toLowerCase() : femaleEncounterBgm;
return this; return this;
@ -399,9 +391,6 @@ export class TrainerConfig {
} }
initForGymLeader(signatureSpecies: (Species | Species[])[], ...specialtyTypes: Type[]): TrainerConfig { initForGymLeader(signatureSpecies: (Species | Species[])[], ...specialtyTypes: Type[]): TrainerConfig {
if (!getIsInitialized()) {
initI18n();
}
this.setPartyTemplateFunc(getGymLeaderPartyTemplate); this.setPartyTemplateFunc(getGymLeaderPartyTemplate);
signatureSpecies.forEach((speciesPool, s) => { signatureSpecies.forEach((speciesPool, s) => {
@ -434,9 +423,7 @@ export class TrainerConfig {
} }
initForEliteFour(signatureSpecies: (Species | Species[])[], ...specialtyTypes: Type[]): TrainerConfig { initForEliteFour(signatureSpecies: (Species | Species[])[], ...specialtyTypes: Type[]): TrainerConfig {
if (!getIsInitialized()) {
initI18n();
}
this.setPartyTemplates(trainerPartyTemplates.ELITE_FOUR); this.setPartyTemplates(trainerPartyTemplates.ELITE_FOUR);
signatureSpecies.forEach((speciesPool, s) => { signatureSpecies.forEach((speciesPool, s) => {
@ -464,9 +451,7 @@ export class TrainerConfig {
} }
initForChampion(signatureSpecies: (Species | Species[])[]): TrainerConfig { initForChampion(signatureSpecies: (Species | Species[])[]): TrainerConfig {
if (!getIsInitialized()) {
initI18n();
}
this.setPartyTemplates(trainerPartyTemplates.CHAMPION); this.setPartyTemplates(trainerPartyTemplates.CHAMPION);
signatureSpecies.forEach((speciesPool, s) => { signatureSpecies.forEach((speciesPool, s) => {
if (!Array.isArray(speciesPool)) if (!Array.isArray(speciesPool))
@ -736,7 +721,7 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.SMASHER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.SMASHER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST),
[TrainerType.SNOW_WORKER]: new TrainerConfig(++t).setName('Worker').setHasGenders().setHasDouble('Workers').setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => s.isOfType(Type.ICE) || s.isOfType(Type.STEEL)), [TrainerType.SNOW_WORKER]: new TrainerConfig(++t).setName('Worker').setHasGenders().setHasDouble('Workers').setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => s.isOfType(Type.ICE) || s.isOfType(Type.STEEL)),
[TrainerType.STRIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.STRIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST),
[TrainerType.SCHOOL_KID]: new TrainerConfig(++t).setMoneyMultiplier(0.75).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders(undefined, 'lass').setHasDouble('School Kids') [TrainerType.SCHOOL_KID]: new TrainerConfig(++t).setMoneyMultiplier(0.75).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders(undefined, 'lass').setHasDouble('Students')
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.ODDISH, Species.EXEGGCUTE, Species.TEDDIURSA, Species.WURMPLE, Species.RALTS, Species.SHROOMISH, Species.FLETCHLING ], [TrainerPoolTier.COMMON]: [ Species.ODDISH, Species.EXEGGCUTE, Species.TEDDIURSA, Species.WURMPLE, Species.RALTS, Species.SHROOMISH, Species.FLETCHLING ],
[TrainerPoolTier.UNCOMMON]: [ Species.VOLTORB, Species.WHISMUR, Species.MEDITITE, Species.MIME_JR, Species.NYMBLE ], [TrainerPoolTier.UNCOMMON]: [ Species.VOLTORB, Species.WHISMUR, Species.MEDITITE, Species.MIME_JR, Species.NYMBLE ],

View File

@ -3,7 +3,6 @@ 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!",
"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}}!",
@ -34,7 +33,7 @@ export const battle: SimpleTranslationEntries = {
"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 Levellimit\nhat sich zu {{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!",

View File

@ -16,29 +16,22 @@ export const titles: SimpleTranslationEntries = {
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",
"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",
"baker": "Bäckerin", "baker": "Bäckerin",
"battle_girl": "Kämpferin", "battle_girl": "Kämpferin",
"beauty": "Schönheit", "beauty": "Schönheit",
"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",
"clerk": "Angestellter", "clerk": "Angestellter",
"clerk_female": "Angestellte", "clerk_female": "Angestellte",
"colleagues": "Geschäftspartner",
"crush_kin": "Mühlensippe",
"cyclist": "Biker", "cyclist": "Biker",
"cyclist_female": "Bikerin", "cyclist_female": "Bikerin",
"cyclists": "Biker",
"dancer": "Tänzer", "dancer": "Tänzer",
"dancer_female": "Tänzerin", "dancer_female": "Tänzerin",
"depot_agent": "Bahnangestellter", "depot_agent": "Bahnangestellter",
@ -46,7 +39,6 @@ export const trainerClasses: SimpleTranslationEntries = {
"doctor_female": "Ärztin", "doctor_female": "Ärztin",
"fishermen": "Angler", "fishermen": "Angler",
"fishermen_female": "Angler", // Seems to be the same in german but exists in other languages like italian "fishermen_female": "Angler", // Seems to be the same in german but exists in other languages like italian
"gentleman": "Gentleman",
"guitarist": "Gitarrist", "guitarist": "Gitarrist",
"guitarist_female": "Gitarristin", "guitarist_female": "Gitarristin",
"harlequin": "Kasper", "harlequin": "Kasper",
@ -60,7 +52,6 @@ export const trainerClasses: SimpleTranslationEntries = {
"linebacker": "Footballer", "linebacker": "Footballer",
"maid": "Zofe", "maid": "Zofe",
"madame": "Madam", "madame": "Madam",
"medical_team": "Mediziner",
"musican": "Musiker", "musican": "Musiker",
"hex_maniac": "Hexe", "hex_maniac": "Hexe",
"nurse": "Pflegerin", "nurse": "Pflegerin",
@ -68,45 +59,35 @@ export const trainerClasses: SimpleTranslationEntries = {
"officer": "Polizist", "officer": "Polizist",
"parasol_lady": "Schirmdame", "parasol_lady": "Schirmdame",
"pilot": "Pilot", "pilot": "Pilot",
"poké_fan": "Pokéfan", "pokefan": "Pokéfan",
"poké_fan_family": "Pokéfan-Pärchen",
"preschooler": "Vorschüler", "preschooler": "Vorschüler",
"preschooler_female": "Vorschülerin", "preschooler_female": "Vorschülerin",
"preschoolers": "Vorschüler",
"psychic": "Seher", "psychic": "Seher",
"psychic_female": "Seherin", "psychic_female": "Seherin",
"psychics": "Seher",
"pokémon_ranger": "Pokémon-Ranger",
"pokémon_rangers": "Pokémon-Ranger",
"ranger": "Ranger", "ranger": "Ranger",
"restaurant_staff": "Restaurant Angestellte", "rich": "Gentleman", // Gentleman is the english name but the trainerType is rich
"rich_boy": "Schnösel", "rich_kid": "Schnösel",
"rich_couple": "Reiches Paar",
"rich_kids": "Schnösel",
"roughneck": "Raufbold", "roughneck": "Raufbold",
"scientist": "Forscher", "scientist": "Forscher",
"scientist_female": "Forscherin", "scientist_female": "Forscherin",
"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",
"swimmer": "Schwimmer", "swimmer": "Schwimmer",
"swimmer_female": "Schwimmerin", "swimmer_female": "Schwimmerin",
"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",
"waiter": "Servierer", "waiter": "Servierer",
"waitress": "Serviererin", "waitress": "Serviererin",
"worker": "Arbeiter", "worker": "Arbeiter",
"worker_female": "Arbeiterin", "worker_female": "Arbeiterin",
"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

View File

@ -3,7 +3,6 @@ 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!",
"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}}!",

View File

@ -16,29 +16,22 @@ export const titles: SimpleTranslationEntries = {
export const trainerClasses: SimpleTranslationEntries = { export const trainerClasses: SimpleTranslationEntries = {
"ace_trainer": "Ace Trainer", "ace_trainer": "Ace Trainer",
"ace_trainer_female": "Ace Trainer", "ace_trainer_female": "Ace Trainer",
"ace_duo": "Ace Duo",
"artist": "Artist", "artist": "Artist",
"artist_female": "Artist", "artist_female": "Artist",
"backers": "Backers", "backers": "Backers",
"backpacker": "Backpacker", "backpacker": "Backpacker",
"backpacker_female": "Backpacker", "backpacker_female": "Backpacker",
"backpackers": "Backpackers",
"baker": "Baker", "baker": "Baker",
"battle_girl": "Battle Girl", "battle_girl": "Battle Girl",
"beauty": "Beauty", "beauty": "Beauty",
"beginners": "Beginners",
"biker": "Biker", "biker": "Biker",
"black_belt": "Black Belt", "black_belt": "Black Belt",
"breeder": "Breeder", "breeder": "Breeder",
"breeder_female": "Breeder", "breeder_female": "Breeder",
"breeders": "Breeders",
"clerk": "Clerk", "clerk": "Clerk",
"clerk_female": "Clerk", "clerk_female": "Clerk",
"colleagues": "Colleagues",
"crush_kin": "Crush Kin",
"cyclist": "Cyclist", "cyclist": "Cyclist",
"cyclist_female": "Cyclist", "cyclist_female": "Cyclist",
"cyclists": "Cyclists",
"dancer": "Dancer", "dancer": "Dancer",
"dancer_female": "Dancer", "dancer_female": "Dancer",
"depot_agent": "Depot Agent", "depot_agent": "Depot Agent",
@ -46,7 +39,6 @@ export const trainerClasses: SimpleTranslationEntries = {
"doctor_female": "Doctor", "doctor_female": "Doctor",
"fishermen": "Fishermen", "fishermen": "Fishermen",
"fishermen_female": "Fishermen", "fishermen_female": "Fishermen",
"gentleman": "Gentleman",
"guitarist": "Guitarist", "guitarist": "Guitarist",
"guitarist_female": "Guitarist", "guitarist_female": "Guitarist",
"harlequin": "Harlequin", "harlequin": "Harlequin",
@ -60,7 +52,6 @@ export const trainerClasses: SimpleTranslationEntries = {
"linebacker": "Linebacker", "linebacker": "Linebacker",
"maid": "Maid", "maid": "Maid",
"madame": "Madame", "madame": "Madame",
"medical_team": "Medical Team",
"musican": "Musician", "musican": "Musician",
"hex_maniac": "Hex Maniac", "hex_maniac": "Hex Maniac",
"nurse": "Nurse", "nurse": "Nurse",
@ -68,44 +59,32 @@ export const trainerClasses: SimpleTranslationEntries = {
"officer": "Officer", "officer": "Officer",
"parasol_lady": "Parasol Lady", "parasol_lady": "Parasol Lady",
"pilot": "Pilot", "pilot": "Pilot",
"poké_fan": "Poké Fan", "pokefan": "Poké Fan",
"poké_fan_family": "Poké Fan Family",
"preschooler": "Preschooler", "preschooler": "Preschooler",
"preschooler_female": "Preschooler", "preschooler_female": "Preschooler",
"preschoolers": "Preschoolers",
"psychic": "Psychic", "psychic": "Psychic",
"psychic_female": "Psychic", "psychic_female": "Psychic",
"psychics": "Psychics",
"pokémon_ranger": "Pokémon Ranger",
"pokémon_rangers": "Pokémon Ranger",
"ranger": "Ranger", "ranger": "Ranger",
"restaurant_staff": "Restaurant Staff", "rich": "Gentleman", // Gentleman is the english name but the trainerType is rich
"rich_boy": "Rich Boy", "rich_kid": "Rich Boy",
"rich_couple": "Rich Couple",
"rich_kids": "Rich Kids",
"roughneck": "Roughneck", "roughneck": "Roughneck",
"scientist": "Scientist", "scientist": "Scientist",
"scientist_female": "Scientist", "scientist_female": "Scientist",
"scientists": "Scientists",
"smasher": "Smasher", "smasher": "Smasher",
"snow_worker": "Snow Worker", "snow_worker": "Snow Worker",
"snow_worker_female": "Snow Worker", "snow_worker_female": "Snow Worker",
"striker": "Striker", "striker": "Striker",
"school_kid": "School Kid", "school_kid": "School Kid",
"school_kid_female": "School Kid", "school_kid_female": "School Kid",
"school_kids": "School Kids",
"swimmer": "Swimmer", "swimmer": "Swimmer",
"swimmer_female": "Swimmer", "swimmer_female": "Swimmer",
"swimmers": "Swimmers",
"twins": "Twins", "twins": "Twins",
"veteran": "Veteran", "veteran": "Veteran",
"veteran_female": "Veteran", "veteran_female": "Veteran",
"veteran_duo": "Veteran Duo",
"waiter": "Waiter", "waiter": "Waiter",
"waitress": "Waitress", "waitress": "Waitress",
"worker": "Worker", "worker": "Worker",
"worker_female": "Worker", "worker_female": "Worker",
"workers": "Workers",
"youngster": "Youngster" "youngster": "Youngster"
} as const; } as const;

View File

@ -3,7 +3,6 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battle: SimpleTranslationEntries = { export const battle: SimpleTranslationEntries = {
"bossAppeared": "¡{{bossName}} te corta el paso!", "bossAppeared": "¡{{bossName}} te corta el paso!",
"trainerAppeared": "¡{{trainerName}}\nte desafía!", "trainerAppeared": "¡{{trainerName}}\nte desafía!",
"trainerAppearedDouble": "{{trainerName}}\nwould like to battle!",
"singleWildAppeared": "¡Un {{pokemonName}} salvaje te corta el paso!", "singleWildAppeared": "¡Un {{pokemonName}} salvaje te corta el paso!",
"multiWildAppeared": "¡Un {{pokemonName1}} y un {{pokemonName2}} salvajes\nte cortan el paso!", "multiWildAppeared": "¡Un {{pokemonName1}} y un {{pokemonName2}} salvajes\nte cortan el paso!",
"playerComeBack": "¡{{pokemonName}}, ven aquí!", "playerComeBack": "¡{{pokemonName}}, ven aquí!",

View File

@ -16,29 +16,22 @@ export const titles: SimpleTranslationEntries = {
export const trainerClasses: SimpleTranslationEntries = { export const trainerClasses: SimpleTranslationEntries = {
"ace_trainer": "Ace Trainer", "ace_trainer": "Ace Trainer",
"ace_trainer_female": "Ace Trainer", "ace_trainer_female": "Ace Trainer",
"ace_duo": "Ace Duo",
"artist": "Artist", "artist": "Artist",
"artist_female": "Artist", "artist_female": "Artist",
"backers": "Backers", "backers": "Backers",
"backpacker": "Backpacker", "backpacker": "Backpacker",
"backpacker_female": "Backpacker", "backpacker_female": "Backpacker",
"backpackers": "Backpackers",
"baker": "Baker", "baker": "Baker",
"battle_girl": "Battle Girl", "battle_girl": "Battle Girl",
"beauty": "Beauty", "beauty": "Beauty",
"beginners": "Beginners",
"biker": "Biker", "biker": "Biker",
"black_belt": "Black Belt", "black_belt": "Black Belt",
"breeder": "Breeder", "breeder": "Breeder",
"breeder_female": "Breeder", "breeder_female": "Breeder",
"breeders": "Breeders",
"clerk": "Clerk", "clerk": "Clerk",
"clerk_female": "Clerk", "clerk_female": "Clerk",
"colleagues": "Colleagues",
"crush_kin": "Crush Kin",
"cyclist": "Cyclist", "cyclist": "Cyclist",
"cyclist_female": "Cyclist", "cyclist_female": "Cyclist",
"cyclists": "Cyclists",
"dancer": "Dancer", "dancer": "Dancer",
"dancer_female": "Dancer", "dancer_female": "Dancer",
"depot_agent": "Depot Agent", "depot_agent": "Depot Agent",
@ -46,7 +39,6 @@ export const trainerClasses: SimpleTranslationEntries = {
"doctor_female": "Doctor", "doctor_female": "Doctor",
"fishermen": "Fishermen", "fishermen": "Fishermen",
"fishermen_female": "Fishermen", "fishermen_female": "Fishermen",
"gentleman": "Gentleman",
"guitarist": "Guitarist", "guitarist": "Guitarist",
"guitarist_female": "Guitarist", "guitarist_female": "Guitarist",
"harlequin": "Harlequin", "harlequin": "Harlequin",
@ -60,7 +52,6 @@ export const trainerClasses: SimpleTranslationEntries = {
"linebacker": "Linebacker", "linebacker": "Linebacker",
"maid": "Maid", "maid": "Maid",
"madame": "Madame", "madame": "Madame",
"medical_team": "Medical Team",
"musican": "Musician", "musican": "Musician",
"hex_maniac": "Hex Maniac", "hex_maniac": "Hex Maniac",
"nurse": "Nurse", "nurse": "Nurse",
@ -68,44 +59,32 @@ export const trainerClasses: SimpleTranslationEntries = {
"officer": "Officer", "officer": "Officer",
"parasol_lady": "Parasol Lady", "parasol_lady": "Parasol Lady",
"pilot": "Pilot", "pilot": "Pilot",
"poké_fan": "Poké Fan", "pokefan": "Poké Fan",
"poké_fan_family": "Poké Fan Family",
"preschooler": "Preschooler", "preschooler": "Preschooler",
"preschooler_female": "Preschooler", "preschooler_female": "Preschooler",
"preschoolers": "Preschoolers",
"psychic": "Psychic", "psychic": "Psychic",
"psychic_female": "Psychic", "psychic_female": "Psychic",
"psychics": "Psychics",
"pokémon_ranger": "Pokémon Ranger",
"pokémon_rangers": "Pokémon Ranger",
"ranger": "Ranger", "ranger": "Ranger",
"restaurant_staff": "Restaurant Staff", "rich": "Gentleman", // Gentleman is the english name but the trainerType is rich
"rich_boy": "Rich Boy", "rich_kid": "Rich Boy",
"rich_couple": "Rich Couple",
"rich_kids": "Rich Kids",
"roughneck": "Roughneck", "roughneck": "Roughneck",
"scientist": "Scientist", "scientist": "Scientist",
"scientist_female": "Scientist", "scientist_female": "Scientist",
"scientists": "Scientists",
"smasher": "Smasher", "smasher": "Smasher",
"snow_worker": "Snow Worker", "snow_worker": "Snow Worker",
"snow_worker_female": "Snow Worker", "snow_worker_female": "Snow Worker",
"striker": "Striker", "striker": "Striker",
"school_kid": "School Kid", "school_kid": "School Kid",
"school_kid_female": "School Kid", "school_kid_female": "School Kid",
"school_kids": "School Kids",
"swimmer": "Swimmer", "swimmer": "Swimmer",
"swimmer_female": "Swimmer", "swimmer_female": "Swimmer",
"swimmers": "Swimmers",
"twins": "Twins", "twins": "Twins",
"veteran": "Veteran", "veteran": "Veteran",
"veteran_female": "Veteran", "veteran_female": "Veteran",
"veteran_duo": "Veteran Duo",
"waiter": "Waiter", "waiter": "Waiter",
"waitress": "Waitress", "waitress": "Waitress",
"worker": "Worker", "worker": "Worker",
"worker_female": "Worker", "worker_female": "Worker",
"workers": "Workers",
"youngster": "Youngster" "youngster": "Youngster"
} as const; } as const;

View File

@ -1109,7 +1109,7 @@ export const ability: AbilityTranslationEntries = {
name: "Turbine Éolienne", name: "Turbine Éolienne",
description: "Si le Pokémon est touché par une capacité faisant appel au vent, il se charge en électricité.", description: "Si le Pokémon est touché par une capacité faisant appel au vent, il se charge en électricité.",
}, },
zeroToHero: { zerotoHero: {
name: "Supermutation", name: "Supermutation",
description: "Le Pokémon prend sa Forme Super en quittant le combat.", description: "Le Pokémon prend sa Forme Super en quittant le combat.",
}, },
@ -1129,23 +1129,23 @@ export const ability: AbilityTranslationEntries = {
name: "Charge Quantique", name: "Charge Quantique",
description: "Quand un champ électrifié est actif ou que le Pokémon tient une capsule dÉnergie Booster, sa stat la plus élevée augmente.", description: "Quand un champ électrifié est actif ou que le Pokémon tient une capsule dÉnergie Booster, sa stat la plus élevée augmente.",
}, },
goodAsGold: { goodasGold: {
name: "Corps en Or", name: "Corps en Or",
description: "Le corps en or pur et robuste du Pokémon limmunise contre les capacités de statut des autres Pokémon.", description: "Le corps en or pur et robuste du Pokémon limmunise contre les capacités de statut des autres Pokémon.",
}, },
vesselOfRuin: { vesselofRuin: {
name: "Urne du Fléau", name: "Urne du Fléau",
description: "Le pouvoir de lurne qui appelle le fléau affaiblit lAttaque Spéciale de tous les autres Pokémon.", description: "Le pouvoir de lurne qui appelle le fléau affaiblit lAttaque Spéciale de tous les autres Pokémon.",
}, },
swordOfRuin: { swordofRuin: {
name: "Épée du Fléau", name: "Épée du Fléau",
description: "Le pouvoir de lépée qui appelle le fléau affaiblit la Défense de tous les autres Pokémon.", description: "Le pouvoir de lépée qui appelle le fléau affaiblit la Défense de tous les autres Pokémon.",
}, },
tabletsOfRuin: { tabletsofRuin: {
name: "Bois du Fléau", name: "Bois du Fléau",
description: "Le pouvoir du bois qui appelle le fléau affaiblit lAttaque de tous les autres Pokémon.", description: "Le pouvoir du bois qui appelle le fléau affaiblit lAttaque de tous les autres Pokémon.",
}, },
beadsOfRuin: { beadsofRuin: {
name: "Perles du Fléau", name: "Perles du Fléau",
description: "Le pouvoir des perles qui appellent le fléau affaiblit la Défense Spéciale de tous les autres Pokémon.", description: "Le pouvoir des perles qui appellent le fléau affaiblit la Défense Spéciale de tous les autres Pokémon.",
}, },

View File

@ -1,12 +1,11 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battle: SimpleTranslationEntries = { export const battle: SimpleTranslationEntries = {
"bossAppeared": "Un {{bossName}} apparait.", "bossAppeared": "Un {{bossName}} apparaît.",
"trainerAppeared": "Un combat est lancé\npar {{trainerName}} !", "trainerAppeared": "Un combat est lancé\npar {{trainerName}} !",
"trainerAppearedDouble": "Un combat est lancé\npar {{trainerName}} !", "singleWildAppeared": "Un {{pokemonName}} sauvage apparaît !",
"singleWildAppeared": "Un {{pokemonName}} sauvage apparait !",
"multiWildAppeared": "Un {{pokemonName1}} et un {{pokemonName2}}\nsauvages apparaissent !", "multiWildAppeared": "Un {{pokemonName1}} et un {{pokemonName2}}\nsauvages apparaissent !",
"playerComeBack": "{{pokemonName}} !\nReviens !", "playerComeBack": "{{pokemonName}}, on change !\nReviens !",
"trainerComeBack": "{{trainerName}} retire {{pokemonName}} !", "trainerComeBack": "{{trainerName}} retire {{pokemonName}} !",
"playerGo": "{{pokemonName}} ! Go !", "playerGo": "{{pokemonName}} ! Go !",
"trainerGo": "{{pokemonName}} est envoyé par\n{{trainerName}} !", "trainerGo": "{{pokemonName}} est envoyé par\n{{trainerName}} !",

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": "combats gagnés !", "battlesWon": "Battles Won!",
"joinTheDiscord": "Rejoins le Discord !", "joinTheDiscord": "Join the Discord!",
"infiniteLevels": "Niveaux infinis !", "infiniteLevels": "Infinite Levels!",
"everythingStacks": "Tout se cumule !", "everythingStacks": "Everything Stacks!",
"optionalSaveScumming": "Optional Save Scumming!", "optionalSaveScumming": "Optional Save Scumming!",
"biomes": "35 biomes !", "biomes": "35 Biomes!",
"openSource": "Open Source!", "openSource": "Open Source!",
"playWithSpeed": "Joue en vitesse x5 !", "playWithSpeed": "Play with 5x Speed!",
"liveBugTesting": "Tests de bugs en direct !", "liveBugTesting": "Live Bug Testing!",
"heavyInfluence": "Grosse influence de RoR2 !", "heavyInfluence": "Heavy RoR2 Influence!",
"pokemonRiskAndPokemonRain": "Pokémon Risk et Pokémon Rain !", "pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!",
"nowWithMoreSalt": "Désormais avec 33% de sel en plus !", "nowWithMoreSalt": "Now with 33% More Salt!",
"infiniteFusionAtHome": "Infinite Fusion, chez vous !", "infiniteFusionAtHome": "Infinite Fusion at Home!",
"brokenEggMoves": "Des Capacités Œuf craquées !", "brokenEggMoves": "Broken Egg Moves!",
"magnificent": "Magnifique !", "magnificent": "Magnificent!",
"mubstitute": "Mubstitute!", "mubstitute": "Mubstitute!",
"thatsCrazy": "Cest une dinguerie !", "thatsCrazy": "That\'s Crazy!",
"oranceJuice": "Jus dorange !", "oranceJuice": "Orance Juice!",
"questionableBalancing": "Équilibrage douteux !", "questionableBalancing": "Questionable Balancing!",
"coolShaders": "Cool shaders !", "coolShaders": "Cool Shaders!",
"aiFree": "Garanti sans IA !", "aiFree": "AI-Free!",
"suddenDifficultySpikes": "De soudains pics de difficultés !", "suddenDifficultySpikes": "Sudden Difficulty Spikes!",
"basedOnAnUnfinishedFlashGame": "Basé sur un jeu Flash abandonné !", "basedOnAnUnfinishedFlashGame": "Based on an Unfinished Flash Game!",
"moreAddictiveThanIntended": "Plus addictif que prévu !", "moreAddictiveThanIntended": "More Addictive than Intended!",
"mostlyConsistentSeeds": "Des seeds à peu près stables !", "mostlyConsistentSeeds": "Mostly Consistent Seeds!",
"achievementPointsDontDoAnything": "Les Points de Succès servent à rien !", "achievementPointsDontDoAnything": "Achievement Points Don\'t Do Anything!",
"youDoNotStartAtLevel": "Ne commence pas au Niveau 2000 !", "youDoNotStartAtLevel": "You Do Not Start at Level 2000!",
"dontTalkAboutTheManaphyEggIncident": "Ne parle pas de l'incident de lŒuf de Manaphy !", "dontTalkAboutTheManaphyEggIncident": "Don\'t Talk About the Manaphy Egg Incident!",
"alsoTryPokengine": "Essaye aussi Pokéngine !", "alsoTryPokengine": "Also Try Pokéngine!",
"alsoTryEmeraldRogue": "Essaye aussi Emerald Rogue!", "alsoTryEmeraldRogue": "Also Try Emerald Rogue!",
"alsoTryRadicalRed": "Essaye aussi Radical Red !", "alsoTryRadicalRed": "Also Try Radical Red!",
"eeveeExpo": "Eevee Expo!", "eeveeExpo": "Eevee Expo!",
"ynoproject": "YNOproject!", "ynoproject": "YNOproject!",
} as const; } as const;

View File

@ -16,29 +16,22 @@ export const titles: SimpleTranslationEntries = {
export const trainerClasses: SimpleTranslationEntries = { export const trainerClasses: SimpleTranslationEntries = {
"ace_trainer": "Topdresseur", "ace_trainer": "Topdresseur",
"ace_trainer_female": "Topdresseuse", "ace_trainer_female": "Topdresseuse",
"ace_duo": "Topdresseurs",
"artist": "Artiste", "artist": "Artiste",
"artist_female": "Artiste", "artist_female": "Artiste",
"backers": "Pompom Girls", "backers": "Pompom Girls",
"backpacker": "Randonneur", "backpacker": "Randonneur",
"backpacker_female": "Randonneuse", "backpacker_female": "Randonneuse",
"backpackers": "Randonneurs",
"baker": "Boulangère", "baker": "Boulangère",
"battle_girl": "Combattante", "battle_girl": "Combattante",
"beauty": "Canon", "beauty": "Canon",
"beginners": "Beginners",
"biker": "Motard", "biker": "Motard",
"black_belt": "Karatéka", "black_belt": "Karatéka",
"breeder": "Éleveur", "breeder": "Éleveur",
"breeder_female": "Éleveuse", "breeder_female": "Éleveuse",
"breeders": "Éleveurs",
"clerk": "Employé", "clerk": "Employé",
"clerk_female": "Employée", "clerk_female": "Employée",
"colleagues": "Collègues de Bureau",
"crush_kin": "Crush Kin",
"cyclist": "Cycliste", "cyclist": "Cycliste",
"cyclist_female": "Cycliste", "cyclist_female": "Cycliste",
"cyclists": "Cyclistes",
"dancer": "Danseur", "dancer": "Danseur",
"dancer_female": "Danseuse", "dancer_female": "Danseuse",
"depot_agent": "Cheminot", "depot_agent": "Cheminot",
@ -46,7 +39,6 @@ export const trainerClasses: SimpleTranslationEntries = {
"doctor_female": "Docteure", "doctor_female": "Docteure",
"fishermen": "Pêcheur", "fishermen": "Pêcheur",
"fishermen_female": "Pêcheuse", "fishermen_female": "Pêcheuse",
"gentleman": "Gentleman",
"guitarist": "Guitariste", "guitarist": "Guitariste",
"guitarist_female": "Guitariste", "guitarist_female": "Guitariste",
"harlequin": "Clown", "harlequin": "Clown",
@ -61,51 +53,38 @@ export const trainerClasses: SimpleTranslationEntries = {
"maid": "Gouvernante", "maid": "Gouvernante",
"madame": "Mondaine", "madame": "Mondaine",
"musican": "Musicien", "musican": "Musicien",
"medical_team": "Médecins", "hex_maniac": "Hex Maniac",
"hex_maniac": "Mystimaniac",
"nurse": " Infirmière", "nurse": " Infirmière",
"nursery_aide": "Institutrice", "nursery_aide": "Institutrice",
"officer": "Policier", "officer": "Policier",
"parasol_lady": "Sœur Parasol", "parasol_lady": "Sœur Parasol",
"pilot": "Pilote", "pilot": "Pilote",
"poké_fan": "Poké Fan", "pokefan": "Pokéfan",
"poké_fan_family": "Couple de Pokéfans",
"preschooler": "Petit", "preschooler": "Petit",
"preschooler_female": "Petite", "preschooler_female": "Petite",
"preschoolers": "Petits",
"psychic": "Kinésiste", "psychic": "Kinésiste",
"psychic_female": "Kinésiste", "psychic_female": "Kinésiste",
"psychics": "Kinésistes",
"pokémon_ranger": "Pokémon Ranger",
"pokémon_rangers": "Pokémon Rangers",
"ranger": "Ranger", "ranger": "Ranger",
"restaurant_staff": "Serveurs", "rich": "Gentleman", // Gentleman is the english name but the trainerType is rich
"rich_boy": "Richard", "rich_kid": "Richard",
"rich_couple": "Couple de Bourgeois",
"rich_kids": "Richards",
"roughneck": "Loubard", "roughneck": "Loubard",
"scientist": "Scientifique", "scientist": "Scientifique",
"scientist_female": "Scientifique", "scientist_female": "Scientifique",
"scientists": "Scientifiques",
"smasher": "Tenniswoman", "smasher": "Tenniswoman",
"snow_worker": "Ouvrier Alpin", "snow_worker": "Ouvrier Alpin",
"snow_worker_female": "Ouvrière Alpine", "snow_worker_female": "Ouvrière Alpine",
"striker": "Footballeur", "striker": "Footballeur",
"school_kid": "Élève", "school_kid": "Élève",
"school_kid_female": "Élève", "school_kid_female": "Élève",
"school_kids": "Élèves",
"swimmer": "Nageur", "swimmer": "Nageur",
"swimmer_female": "Nageuse", "swimmer_female": "Nageuse",
"swimmers": "Nageurs",
"twins": "Jumelles", "twins": "Jumelles",
"veteran": "Vénérable", "veteran": "Vénérable",
"veteran_female": "Vénérable", "veteran_female": "Vénérable",
"veteran_duo": "Vénérables",
"waiter": "Serveur", "waiter": "Serveur",
"waitress": "Serveuse", "waitress": "Serveuse",
"worker": "Ouvrier", "worker": "Ouvrier",
"worker_female": "Ouvrière", "worker_female": "Ouvrière",
"workers": "Ouvriers",
"youngster": "Gamin" "youngster": "Gamin"
} as const; } as const;

View File

@ -3,7 +3,6 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battle: SimpleTranslationEntries = { export const battle: SimpleTranslationEntries = {
"bossAppeared": "{{bossName}} è apparso.", "bossAppeared": "{{bossName}} è apparso.",
"trainerAppeared": "{{trainerName}}\nvuole combattere!", "trainerAppeared": "{{trainerName}}\nvuole combattere!",
"trainerAppearedDouble": "{{trainerName}}\nwould like to battle!",
"singleWildAppeared": "Appare {{pokemonName}} selvatico!", "singleWildAppeared": "Appare {{pokemonName}} selvatico!",
"multiWildAppeared": "Appaiono {{pokemonName1}}\ne {{pokemonName2}} salvatici!", "multiWildAppeared": "Appaiono {{pokemonName1}}\ne {{pokemonName2}} salvatici!",
"playerComeBack": "Rientra, {{pokemonName}}!", "playerComeBack": "Rientra, {{pokemonName}}!",

View File

@ -16,29 +16,22 @@ export const titles: SimpleTranslationEntries = {
export const trainerClasses: SimpleTranslationEntries = { export const trainerClasses: SimpleTranslationEntries = {
"ace_trainer": "Ace Trainer", "ace_trainer": "Ace Trainer",
"ace_trainer_female": "Ace Trainer", "ace_trainer_female": "Ace Trainer",
"ace_duo": "Ace Duo",
"artist": "Artist", "artist": "Artist",
"artist_female": "Artist", "artist_female": "Artist",
"backers": "Backers", "backers": "Backers",
"backpacker": "Backpacker", "backpacker": "Backpacker",
"backpacker_female": "Backpacker", "backpacker_female": "Backpacker",
"backpackers": "Backpackers",
"baker": "Baker", "baker": "Baker",
"battle_girl": "Battle Girl", "battle_girl": "Battle Girl",
"beauty": "Beauty", "beauty": "Beauty",
"beginners": "Beginners",
"biker": "Biker", "biker": "Biker",
"black_belt": "Black Belt", "black_belt": "Black Belt",
"breeder": "Breeder", "breeder": "Breeder",
"breeder_female": "Breeder", "breeder_female": "Breeder",
"breeders": "Breeders",
"clerk": "Clerk", "clerk": "Clerk",
"clerk_female": "Clerk", "clerk_female": "Clerk",
"colleagues": "Colleagues",
"crush_kin": "Crush Kin",
"cyclist": "Cyclist", "cyclist": "Cyclist",
"cyclist_female": "Cyclist", "cyclist_female": "Cyclist",
"cyclists": "Cyclists",
"dancer": "Dancer", "dancer": "Dancer",
"dancer_female": "Dancer", "dancer_female": "Dancer",
"depot_agent": "Depot Agent", "depot_agent": "Depot Agent",
@ -46,7 +39,6 @@ export const trainerClasses: SimpleTranslationEntries = {
"doctor_female": "Doctor", "doctor_female": "Doctor",
"fishermen": "Fishermen", "fishermen": "Fishermen",
"fishermen_female": "Fishermen", "fishermen_female": "Fishermen",
"gentleman": "Gentleman",
"guitarist": "Guitarist", "guitarist": "Guitarist",
"guitarist_female": "Guitarist", "guitarist_female": "Guitarist",
"harlequin": "Harlequin", "harlequin": "Harlequin",
@ -60,7 +52,6 @@ export const trainerClasses: SimpleTranslationEntries = {
"linebacker": "Linebacker", "linebacker": "Linebacker",
"maid": "Maid", "maid": "Maid",
"madame": "Madame", "madame": "Madame",
"medical_team": "Medical Team",
"musican": "Musician", "musican": "Musician",
"hex_maniac": "Hex Maniac", "hex_maniac": "Hex Maniac",
"nurse": "Nurse", "nurse": "Nurse",
@ -68,44 +59,32 @@ export const trainerClasses: SimpleTranslationEntries = {
"officer": "Officer", "officer": "Officer",
"parasol_lady": "Parasol Lady", "parasol_lady": "Parasol Lady",
"pilot": "Pilot", "pilot": "Pilot",
"poké_fan": "Poké Fan", "pokefan": "Poké Fan",
"poké_fan_family": "Poké Fan Family",
"preschooler": "Preschooler", "preschooler": "Preschooler",
"preschooler_female": "Preschooler", "preschooler_female": "Preschooler",
"preschoolers": "Preschoolers",
"psychic": "Psychic", "psychic": "Psychic",
"psychic_female": "Psychic", "psychic_female": "Psychic",
"psychics": "Psychics",
"pokémon_ranger": "Pokémon Ranger",
"pokémon_rangers": "Pokémon Ranger",
"ranger": "Ranger", "ranger": "Ranger",
"restaurant_staff": "Restaurant Staff", "rich": "Gentleman", // Gentleman is the english name but the trainerType is rich
"rich_boy": "Rich Boy", "rich_kid": "Rich Boy",
"rich_couple": "Rich Couple",
"rich_kids": "Rich Kids",
"roughneck": "Roughneck", "roughneck": "Roughneck",
"scientist": "Scientist", "scientist": "Scientist",
"scientist_female": "Scientist", "scientist_female": "Scientist",
"scientists": "Scientists",
"smasher": "Smasher", "smasher": "Smasher",
"snow_worker": "Snow Worker", "snow_worker": "Snow Worker",
"snow_worker_female": "Snow Worker", "snow_worker_female": "Snow Worker",
"striker": "Striker", "striker": "Striker",
"school_kid": "School Kid", "school_kid": "School Kid",
"school_kid_female": "School Kid", "school_kid_female": "School Kid",
"school_kids": "School Kids",
"swimmer": "Swimmer", "swimmer": "Swimmer",
"swimmer_female": "Swimmer", "swimmer_female": "Swimmer",
"swimmers": "Swimmers",
"twins": "Twins", "twins": "Twins",
"veteran": "Veteran", "veteran": "Veteran",
"veteran_female": "Veteran", "veteran_female": "Veteran",
"veteran_duo": "Veteran Duo",
"waiter": "Waiter", "waiter": "Waiter",
"waitress": "Waitress", "waitress": "Waitress",
"worker": "Worker", "worker": "Worker",
"worker_female": "Worker", "worker_female": "Worker",
"workers": "Workers",
"youngster": "Youngster" "youngster": "Youngster"
} as const; } as const;

View File

@ -3,7 +3,6 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battle: SimpleTranslationEntries = { export const battle: SimpleTranslationEntries = {
"bossAppeared": "{{bossName}} apareceu.", "bossAppeared": "{{bossName}} apareceu.",
"trainerAppeared": "{{trainerName}}\nquer batalhar!", "trainerAppeared": "{{trainerName}}\nquer batalhar!",
"trainerAppearedDouble": "{{trainerName}}\nwould like to battle!",
"singleWildAppeared": "Um {{pokemonName}} selvagem apareceu!", "singleWildAppeared": "Um {{pokemonName}} selvagem apareceu!",
"multiWildAppeared": "Um {{pokemonName1}} e um {{pokemonName2}} selvagens\napareceram!", "multiWildAppeared": "Um {{pokemonName1}} e um {{pokemonName2}} selvagens\napareceram!",
"playerComeBack": "{{pokemonName}}, retorne!", "playerComeBack": "{{pokemonName}}, retorne!",

View File

@ -16,29 +16,22 @@ export const titles: SimpleTranslationEntries = {
export const trainerClasses: SimpleTranslationEntries = { export const trainerClasses: SimpleTranslationEntries = {
"ace_trainer": "Trinador Ás", "ace_trainer": "Trinador Ás",
"ace_trainer_female": "Trinadora Ás", "ace_trainer_female": "Trinadora Ás",
"ace_duo": "Ace Duo",
"artist": "Artista", "artist": "Artista",
"artist_female": "Artista", "artist_female": "Artista",
"backpackers": "Backpackers",
"backers": "Torcedores", "backers": "Torcedores",
"backpacker": "Mochileiro", "backpacker": "Mochileiro",
"backpacker_female": "Mochileira", "backpacker_female": "Mochileira",
"baker": "Padeira", "baker": "Padeira",
"battle_girl": "Lutadora", "battle_girl": "Lutadora",
"beauty": "Modelo", "beauty": "Modelo",
"beginners": "Beginners",
"biker": "Motoqueiro", "biker": "Motoqueiro",
"black_belt": "Faixa Preta", "black_belt": "Faixa Preta",
"breeder": "Criador", "breeder": "Criador",
"breeder_female": "Criadora", "breeder_female": "Criadora",
"breeders": "Breeders",
"clerk": "Funcionário", "clerk": "Funcionário",
"clerk_female": "Funcionária", "clerk_female": "Funcionária",
"colleagues": "Colleagues",
"crush_kin": "Crush Kin",
"cyclist": "Ciclista", "cyclist": "Ciclista",
"cyclist_female": "Ciclista", "cyclist_female": "Ciclista",
"cyclists": "Cyclists",
"dancer": "Dançarino", "dancer": "Dançarino",
"dancer_female": "Dançarina", "dancer_female": "Dançarina",
"depot_agent": "Ferroviário", "depot_agent": "Ferroviário",
@ -46,7 +39,6 @@ export const trainerClasses: SimpleTranslationEntries = {
"doctor_female": "Doutora", "doctor_female": "Doutora",
"fishermen": "Pescador", "fishermen": "Pescador",
"fishermen_female": "Pescadora", "fishermen_female": "Pescadora",
"gentleman": "Gentleman",
"guitarist": "Guitarrista", "guitarist": "Guitarrista",
"guitarist_female": "Guitarrista", "guitarist_female": "Guitarrista",
"harlequin": "Arlequim", "harlequin": "Arlequim",
@ -61,51 +53,38 @@ export const trainerClasses: SimpleTranslationEntries = {
"maid": "Doméstica", "maid": "Doméstica",
"madame": "Madame", "madame": "Madame",
"musican": "Músico", "musican": "Músico",
"medical_team": "Medical Team",
"hex_maniac": "Ocultista", "hex_maniac": "Ocultista",
"nurse": "Enfermeira", "nurse": "Enfermeira",
"nursery_aide": "Professora do Berçário", "nursery_aide": "Professora do Berçário",
"officer": "Policial", "officer": "Policial",
"parasol_lady": "Moça de Sombrinha", "parasol_lady": "Moça de Sombrinha",
"pilot": "Piloto", "pilot": "Piloto",
"poké_fan": "Pokefã", "pokefan": "Pokefã",
"poké_fan_family": "Poké Fan Family",
"preschooler": "Menino do Prezinho", "preschooler": "Menino do Prezinho",
"preschooler_female": "Menina do Prezinho", "preschooler_female": "Menina do Prezinho",
"preschoolers": "Preschoolers",
"psychic": "Médium", "psychic": "Médium",
"psychic_female": "Médium", "psychic_female": "Médium",
"psychics": "Psychics",
"pokémon_ranger": "Pokémon Ranger",
"pokémon_rangers": "Pokémon Ranger",
"ranger": "Guarda", "ranger": "Guarda",
"restaurant_staff": "Restaurant Staff", "rich": "Cavalheira", // Gentleman is the english name but the trainerType is rich
"rich_boy": "Rich Boy", "rich_kid": "Riquinho",
"rich_couple": "Rich Couple",
"rich_kids": "Rich Kids",
"roughneck": "Arruaceiro", "roughneck": "Arruaceiro",
"scientist": "Cientista", "scientist": "Cientista",
"scientist_female": "Cientista", "scientist_female": "Cientista",
"scientists": "Scientists",
"smasher": "Tenista", "smasher": "Tenista",
"snow_worker": "Operário da Neve", "snow_worker": "Operário da Neve",
"snow_worker_female": "Operária da Neve", "snow_worker_female": "Operária da Neve",
"striker": "Atacante", "striker": "Atacante",
"school_kid": "Estudante", "school_kid": "Estudante",
"school_kid_female": "Estudante", "school_kid_female": "Estudante",
"school_kids": "School Kids",
"swimmer": "Nadador", "swimmer": "Nadador",
"swimmer_female": "Nadadora", "swimmer_female": "Nadadora",
"swimmers": "Swimmers",
"twins": "Gêmeos", "twins": "Gêmeos",
"veteran": "Veterano", "veteran": "Veterano",
"veteran_female": "Veterana", "veteran_female": "Veterana",
"veteran_duo": "Veteran Duo",
"waiter": "Garçom", "waiter": "Garçom",
"waitress": "Garçonete", "waitress": "Garçonete",
"worker": "Operário", "worker": "Operário",
"worker_female": "Operária", "worker_female": "Operária",
"workers": "Workers",
"youngster": "Jovem", "youngster": "Jovem",
} as const; } as const;

View File

@ -3,7 +3,6 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battle: SimpleTranslationEntries = { export const battle: SimpleTranslationEntries = {
"bossAppeared": "{{bossName}} 出现了。", "bossAppeared": "{{bossName}} 出现了。",
"trainerAppeared": "{{trainerName}}\n想要和你对战!", "trainerAppeared": "{{trainerName}}\n想要和你对战!",
"trainerAppearedDouble": "{{trainerName}}\nwould like to battle!",
"singleWildAppeared": "一只野生 {{pokemonName}} 出现了。!", "singleWildAppeared": "一只野生 {{pokemonName}} 出现了。!",
"multiWildAppeared": "野生的 {{pokemonName1}}\n和 {{pokemonName2}} 出现了。!", "multiWildAppeared": "野生的 {{pokemonName1}}\n和 {{pokemonName2}} 出现了。!",
"playerComeBack": "回来吧, {{pokemonName}}!", "playerComeBack": "回来吧, {{pokemonName}}!",

View File

@ -16,29 +16,22 @@ export const titles: SimpleTranslationEntries = {
export const trainerClasses: SimpleTranslationEntries = { export const trainerClasses: SimpleTranslationEntries = {
"ace_trainer": "Ace Trainer", "ace_trainer": "Ace Trainer",
"ace_trainer_female": "Ace Trainer", "ace_trainer_female": "Ace Trainer",
"ace_duo": "Ace Duo",
"artist": "Artist", "artist": "Artist",
"artist_female": "Artist", "artist_female": "Artist",
"backers": "Backers", "backers": "Backers",
"backpacker": "Backpacker", "backpacker": "Backpacker",
"backpacker_female": "Backpacker", "backpacker_female": "Backpacker",
"backpackers": "Backpackers",
"baker": "Baker", "baker": "Baker",
"battle_girl": "Battle Girl", "battle_girl": "Battle Girl",
"beauty": "Beauty", "beauty": "Beauty",
"beginners": "Beginners",
"biker": "Biker", "biker": "Biker",
"black_belt": "Black Belt", "black_belt": "Black Belt",
"breeder": "Breeder", "breeder": "Breeder",
"breeder_female": "Breeder", "breeder_female": "Breeder",
"breeders": "Breeders",
"clerk": "Clerk", "clerk": "Clerk",
"clerk_female": "Clerk", "clerk_female": "Clerk",
"colleagues": "Colleagues",
"crush_kin": "Crush Kin",
"cyclist": "Cyclist", "cyclist": "Cyclist",
"cyclist_female": "Cyclist", "cyclist_female": "Cyclist",
"cyclists": "Cyclists",
"dancer": "Dancer", "dancer": "Dancer",
"dancer_female": "Dancer", "dancer_female": "Dancer",
"depot_agent": "Depot Agent", "depot_agent": "Depot Agent",
@ -46,7 +39,6 @@ export const trainerClasses: SimpleTranslationEntries = {
"doctor_female": "Doctor", "doctor_female": "Doctor",
"fishermen": "Fishermen", "fishermen": "Fishermen",
"fishermen_female": "Fishermen", "fishermen_female": "Fishermen",
"gentleman": "Gentleman",
"guitarist": "Guitarist", "guitarist": "Guitarist",
"guitarist_female": "Guitarist", "guitarist_female": "Guitarist",
"harlequin": "Harlequin", "harlequin": "Harlequin",
@ -60,7 +52,6 @@ export const trainerClasses: SimpleTranslationEntries = {
"linebacker": "Linebacker", "linebacker": "Linebacker",
"maid": "Maid", "maid": "Maid",
"madame": "Madame", "madame": "Madame",
"medical_team": "Medical Team",
"musican": "Musician", "musican": "Musician",
"hex_maniac": "Hex Maniac", "hex_maniac": "Hex Maniac",
"nurse": "Nurse", "nurse": "Nurse",
@ -68,44 +59,32 @@ export const trainerClasses: SimpleTranslationEntries = {
"officer": "Officer", "officer": "Officer",
"parasol_lady": "Parasol Lady", "parasol_lady": "Parasol Lady",
"pilot": "Pilot", "pilot": "Pilot",
"poké_fan": "Poké Fan", "pokefan": "Poké Fan",
"poké_fan_family": "Poké Fan Family",
"preschooler": "Preschooler", "preschooler": "Preschooler",
"preschooler_female": "Preschooler", "preschooler_female": "Preschooler",
"preschoolers": "Preschoolers",
"psychic": "Psychic", "psychic": "Psychic",
"psychic_female": "Psychic", "psychic_female": "Psychic",
"psychics": "Psychics",
"pokémon_ranger": "Pokémon Ranger",
"pokémon_rangers": "Pokémon Ranger",
"ranger": "Ranger", "ranger": "Ranger",
"restaurant_staff": "Restaurant Staff", "rich": "Gentleman", // Gentleman is the english name but the trainerType is rich
"rich_boy": "Rich Boy", "rich_kid": "Rich Boy",
"rich_couple": "Rich Couple",
"rich_kids": "Rich Kids",
"roughneck": "Roughneck", "roughneck": "Roughneck",
"scientist": "Scientist", "scientist": "Scientist",
"scientist_female": "Scientist", "scientist_female": "Scientist",
"scientists": "Scientists",
"smasher": "Smasher", "smasher": "Smasher",
"snow_worker": "Snow Worker", "snow_worker": "Snow Worker",
"snow_worker_female": "Snow Worker", "snow_worker_female": "Snow Worker",
"striker": "Striker", "striker": "Striker",
"school_kid": "School Kid", "school_kid": "School Kid",
"school_kid_female": "School Kid", "school_kid_female": "School Kid",
"school_kids": "School Kids",
"swimmer": "Swimmer", "swimmer": "Swimmer",
"swimmer_female": "Swimmer", "swimmer_female": "Swimmer",
"swimmers": "Swimmers",
"twins": "Twins", "twins": "Twins",
"veteran": "Veteran", "veteran": "Veteran",
"veteran_female": "Veteran", "veteran_female": "Veteran",
"veteran_duo": "Veteran Duo",
"waiter": "Waiter", "waiter": "Waiter",
"waitress": "Waitress", "waitress": "Waitress",
"worker": "Worker", "worker": "Worker",
"worker_female": "Worker", "worker_female": "Worker",
"workers": "Workers",
"youngster": "Youngster" "youngster": "Youngster"
} as const; } as const;
@ -235,6 +214,5 @@ export const trainerNames: SimpleTranslationEntries = {
"nemona": "Nemona", "nemona": "Nemona",
"kieran": "Kieran", "kieran": "Kieran",
"leon": "Leon", "leon": "Leon",
"rival": "Finn", "rival": "Rival",
"rival_female": "Ivy",
} as const; } as const;

View File

@ -841,15 +841,8 @@ export class EncounterPhase extends BattlePhase {
if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS)
return i18next.t('battle:bossAppeared', {bossName: enemyField[0].name}); return i18next.t('battle:bossAppeared', {bossName: enemyField[0].name});
if (this.scene.currentBattle.battleType === BattleType.TRAINER) { if (this.scene.currentBattle.battleType === BattleType.TRAINER)
if (this.scene.currentBattle.double) {
return i18next.t('battle:trainerAppearedDouble', {trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true)});
}
else {
return i18next.t('battle:trainerAppeared', {trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true)}); return i18next.t('battle:trainerAppeared', {trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true)});
}
}
return enemyField.length === 1 return enemyField.length === 1
? i18next.t('battle:singleWildAppeared', {pokemonName: enemyField[0].name}) ? i18next.t('battle:singleWildAppeared', {pokemonName: enemyField[0].name})