Compare commits

...

11 Commits

Author SHA1 Message Date
Lugiad
8a8a2e128a
Corrections to French ability.ts (#979) 2024-05-16 11:09:23 -05:00
Benjamin Odom
ff086ca492 Adjust all Existing Comments to Match
Adjusted all existing comments on move.ts to match
2024-05-16 08:38:27 -04:00
Lugiad
8d83417cee
Update French trainers.ts (#970) 2024-05-16 06:55:00 -05:00
Lugiad
2aa9180745
Update French battle.ts (#969) 2024-05-16 06:54:39 -05:00
Jannik Tappert
364b19df5d
Added localisation for workers class to all languages but german (whi… (#968)
* Added localisation for workers class to all languages but german (which already had it...)

* Added missing entries to fr and br.

Now they all have the same keys.
2024-05-16 06:33:21 -05:00
Lugiad
0e84313862
Update French trainers.ts (#965) 2024-05-16 06:11:00 -05:00
Jannik Tappert
55105bf79a
Fixes that brocks name is undefined (#967)
* Brock now has a name againg (we check if i18 is initialized before localising elite4,champs and gym leaders

* Removed console log
2024-05-16 06:10:20 -05:00
Jannik Tappert
f1e97f3b38
Added difference between the "x want to fight" for double and single battle since in some languages it needs to be (like german) (#966) 2024-05-16 06:09:12 -05:00
Jannik Tappert
7f003d46ca
Added all double battle names as trainer classes. And updated/corrected errors. (in all languages but german i used the english version) (#963)
Also fixed that the rival does not have localized name
2024-05-16 05:43:31 -05:00
Lugiad
2a15e090ce
Update French splash-messages.ts (#961) 2024-05-16 05:20:50 -05:00
Frederico Santos
4a29532b5e
Rename trainer files to use "school_kid" instead of "student" (#962) 2024-05-16 05:17:50 -05:00
24 changed files with 365 additions and 160 deletions

3
.gitignore vendored
View File

@ -24,6 +24,9 @@ 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": "student_f.png", "image": "school_kid_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": "student_m.png", "image": "school_kid_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, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases"; import { BattleEndPhase, MoveEffectPhase, 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,20 +33,26 @@ 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,
@ -67,8 +73,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 {@link Abilities.RECKLESS} * Indicates a move should be affected by {@linkcode Abilities.RECKLESS}
* @see {@link Move.recklessMove()} * @see {@linkcode Move.recklessMove()}
*/ */
RECKLESS_MOVE = 1 << 10, RECKLESS_MOVE = 1 << 10,
BALLBOMB_MOVE = 1 << 11, BALLBOMB_MOVE = 1 << 11,
@ -277,10 +283,10 @@ export default class Move implements Localizable {
} }
/** /**
* Sets the {@link MoveFlags.RECKLESS_MOVE} flag for the calling Move * Sets the {@linkcode MoveFlags.RECKLESS_MOVE} flag for the calling Move
* @see {@link Abilities.RECKLESS} * @see {@linkcode Abilities.RECKLESS}
* @param {boolean} recklessMove The value to set the flag to * @param recklessMove The value to set the flag to
* @returns {Move} The {@link Move} that called this function * @returns The {@linkcode 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);
@ -435,11 +441,12 @@ export class SelfStatusMove extends Move {
} }
/** /**
* Base class defining all {@link Move} Attributes * Base class defining all {@linkcode Move} Attributes
* @abstract * @abstract
* @see {@linkcode apply}
*/ */
export abstract class MoveAttr { export abstract class MoveAttr {
/** Should this {@link Move} target the user? */ /** Should this {@linkcode Move} target the user? */
public selfTarget: boolean; public selfTarget: boolean;
constructor(selfTarget: boolean = false) { constructor(selfTarget: boolean = false) {
@ -448,13 +455,13 @@ export abstract class MoveAttr {
/** /**
* Applies move attributes * Applies move attributes
* @see {@link applyMoveAttrsInternal} * @see {@linkcode applyMoveAttrsInternal}
* @virtual * @virtual
* @param user The {@link Pokemon} using the move * @param user {@linkcode Pokemon} using the move
* @param target The target {@link Pokemon} of the move * @param target {@linkcode Pokemon} target of the move
* @param move The {@link Move} being used * @param move {@linkcode Move} with this attribute
* @param args Set of unique arguments needed by this attribute * @param args Set of unique arguments needed by this attribute
* @returns true if the application succeeds * @returns true if application of the ability 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;
@ -462,7 +469,7 @@ export abstract class MoveAttr {
/** /**
* @virtual * @virtual
* @returns the {@link MoveCondition} or {@link MoveConditionFunc} for this {@link Move} * @returns the {@linkcode MoveCondition} or {@linkcode MoveConditionFunc} for this {@linkcode Move}
*/ */
getCondition(): MoveCondition | MoveConditionFunc { getCondition(): MoveCondition | MoveConditionFunc {
return null; return null;
@ -470,11 +477,11 @@ export abstract class MoveAttr {
/** /**
* @virtual * @virtual
* @param user The {@link Pokemon} using the move * @param user {@linkcode Pokemon} using the move
* @param target The target {@link Pokemon} of the move * @param target {@linkcode Pokemon} target of the move
* @param move The {@link Move} being used * @param move {@linkcode Move} with this attribute
* @param cancelled A {@link Utils.BooleanHolder} which stores if the move should fail * @param cancelled {@linkcode Utils.BooleanHolder} which stores if the move should fail
* @returns the string representing failure of this {@link Move} * @returns the string representing failure of this {@linkcode 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;
@ -482,7 +489,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 {@link EnemyPokemon.getNextMove} * @see {@linkcode EnemyPokemon.getNextMove}
* @virtual * @virtual
*/ */
getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer {
@ -491,7 +498,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 {@link EnemyPokemon.getNextMove} * @see {@linkcode EnemyPokemon.getNextMove}
* @virtual * @virtual
*/ */
getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer {
@ -509,9 +516,14 @@ 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) {
@ -521,20 +533,20 @@ export class MoveEffectAttr extends MoveAttr {
} }
/** /**
* Determines whether the {@link Move}'s effects are valid to {@link apply} * Determines whether the {@linkcode Move}'s effects are valid to {@linkcode apply}
* @virtual * @virtual
* @param user The {@link Pokemon} using the move * @param user {@linkcode Pokemon} using the move
* @param target The target {@link Pokemon} of the move * @param target {@linkcode Pokemon} target of the move
* @param move The {@link Move} being used * @param move {@linkcode Move} with this attribute
* @param args Set of unique arguments needed by this attribute * @param args Set of unique arguments needed by this attribute
* @returns true if the application succeeds * @returns true if basic application of the ability attribute should be possible
*/ */
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 {@link canApply} */ /** Applies move effects so long as they are able based on {@linkcode 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);
} }
@ -792,7 +804,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 {@link apply} * @see {@linkcode apply}
**/ **/
export class SacrificialAttr extends MoveEffectAttr { export class SacrificialAttr extends MoveEffectAttr {
constructor() { constructor() {
@ -801,9 +813,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 Pokemon that used the move * @param user {@linkcode Pokemon} that used the move
* @param target The target of the move * @param target {@linkcode Pokemon} target of the move
* @param move Move with this attribute * @param move {@linkcode Move} with this attribute
* @param args N/A * @param args N/A
* @returns true if the function succeeds * @returns true if the function succeeds
**/ **/
@ -824,7 +836,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 {@link apply} * @see {@linkcode apply}
**/ **/
export class SacrificialAttrOnHit extends MoveEffectAttr { export class SacrificialAttrOnHit extends MoveEffectAttr {
constructor() { constructor() {
@ -833,14 +845,13 @@ 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 Pokemon that used the move * @param user {@linkcode Pokemon} that used the move
* @param target The target of the move * @param target {@linkcode Pokemon} target of the move
* @param move Move with this attribute * @param move {@linkcode 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;
@ -860,7 +871,9 @@ 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 POST_TARGET. * Triggers using {@linkcode MoveEffectTrigger.POST_TARGET}.
* @extends MoveEffectAttr
* @see {@linkcode apply}
*/ */
export class HalfSacrificialAttr extends MoveEffectAttr { export class HalfSacrificialAttr extends MoveEffectAttr {
constructor() { constructor() {
@ -869,9 +882,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 Pokemon that used the move * @param user {@linkcode Pokemon} that used the move
* @param target N/A * @param target N/A
* @param move Move with this attribute * @param move {@linkcode Move} with this attribute
* @param args N/A * @param args N/A
* @returns true if the function succeeds * @returns true if the function succeeds
*/ */
@ -905,12 +918,12 @@ export enum MultiHitType {
} }
/** /**
* Heals the user or target by {@link healRatio} depending on the value of {@link selfTarget} * Heals the user or target by {@linkcode healRatio} depending on the value of {@linkcode selfTarget}
* @extends MoveEffectAttr * @extends MoveEffectAttr
* @see {@link apply} * @see {@linkcode apply}
*/ */
export class HealAttr extends MoveEffectAttr { export class HealAttr extends MoveEffectAttr {
/** The percentage of {@link Stat.HP} to heal */ /** The percentage of {@linkcode 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;
@ -928,7 +941,7 @@ export class HealAttr extends MoveEffectAttr {
} }
/** /**
* Creates a new {@link PokemonHealPhase}. * Creates a new {@linkcode 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) {
@ -944,11 +957,13 @@ 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
* @param {string} message Message to display after using move * @extends MoveEffectAttr
* @param {Abilities} abilityCondition Skips mons with this ability, ie. Soundproof * @see {@linkcode apply}
*/ */
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) {
@ -1000,19 +1015,23 @@ 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 Pokemon that used the move * @param user {@linkcode Pokemon} that used the move
* @param target N/A * @param target N/A
* @param move Move with this attribute * @param move {@linkcode Move} with this attribute
* @param args [0] Utils.NumberHolder for arenaAttackTypeMultiplier * @param args [0] {@linkcode 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 {
@ -1072,15 +1091,15 @@ export class SandHealAttr extends WeatherHealAttr {
} }
/** /**
* Heals the target or the user by either {@link normalHealRatio} or {@link boostedHealRatio} * Heals the target or the user by either {@linkcode normalHealRatio} or {@linkcode boostedHealRatio}
* depending on the evaluation of {@link condition} * depending on the evaluation of {@linkcode condition}
* @extends HealAttr * @extends HealAttr
* @see {@link apply} * @see {@linkcode apply}
*/ */
export class BoostHealAttr extends HealAttr { export class BoostHealAttr extends HealAttr {
/** Healing received when {@link condition} is false */ /** Healing received when {@linkcode condition} is false */
private normalHealRatio?: number; private normalHealRatio?: number;
/** Healing received when {@link condition} is true */ /** Healing received when {@linkcode 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;
@ -1093,9 +1112,9 @@ export class BoostHealAttr extends HealAttr {
} }
/** /**
* @param user The Pokemon using this move * @param user {@linkcode Pokemon} using the move
* @param target The target Pokemon of this move * @param target {@linkcode Pokemon} target of the move
* @param move This move * @param move {@linkcode Move} with this attribute
* @param args N/A * @param args N/A
* @returns true if the move was successful * @returns true if the move was successful
*/ */
@ -1464,15 +1483,17 @@ 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
* @param user N/A * @extends MoveAttr
* @param target N/A * @see {@linkcode apply}
* @param move Move with this attribute
* @param args Utils.BooleanHolder for burnDamageReductionCancelled
* @returns true if the function succeeds
*/ */
export class BypassBurnDamageReductionAttr extends MoveAttr { export class BypassBurnDamageReductionAttr extends MoveAttr {
/** Prevents the move's damage from being reduced by burn
/** Prevents the move's damage from being reduced by burn */ * @param user N/A
* @param target N/A
* @param move {@linkcode Move} with this attribute
* @param args [0] {@linkcode Utils.BooleanHolder} for burnDamageReductionCancelled
* @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 {
(args[0] as Utils.BooleanHolder).value = true; (args[0] as Utils.BooleanHolder).value = true;
@ -2482,16 +2503,19 @@ export class ThunderAccuracyAttr extends VariableAccuracyAttr {
/** /**
* Attribute used for moves which never miss * Attribute used for moves which never miss
* against Pokemon with the {@link BattlerTagType.MINIMIZED} * against Pokemon with the {@linkcode BattlerTagType.MINIMIZED}
* @see {@link apply} * @extends VariableAccuracyAttr
* @param user N/A * @see {@linkcode apply}
* @param target Target of the move
* @param move N/A
* @param args [0] Accuracy of the move to be modified
* @returns true if the function succeeds
*/ */
export class MinimizeAccuracyAttr extends VariableAccuracyAttr{ export class MinimizeAccuracyAttr extends VariableAccuracyAttr {
/**
* @see {@linkcode apply}
* @param user N/A
* @param target {@linkcode Pokemon} target of the move
* @param move N/A
* @param args [0] Accuracy of the move to be modified
* @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 (target.getTag(BattlerTagType.MINIMIZED)){ if (target.getTag(BattlerTagType.MINIMIZED)){
const accuracy = args[0] as Utils.NumberHolder const accuracy = args[0] as Utils.NumberHolder
@ -3259,11 +3283,14 @@ 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 {@link BattlerTagType} this move hits */ /** The {@linkcode BattlerTagType} this move hits */
public tagType: BattlerTagType; public tagType: BattlerTagType;
/** Should this move deal double damage against {@link HitsTagAttr.tagType}? */ /** Should this move deal double damage against {@linkcode HitsTagAttr.tagType}? */
public doubleDamage: boolean; public doubleDamage: boolean;
constructor(tagType: BattlerTagType, doubleDamage?: boolean) { constructor(tagType: BattlerTagType, doubleDamage?: boolean) {

View File

@ -229,19 +229,17 @@ export class TrainerConfig {
} }
setName(name: string): TrainerConfig { setName(name: string): TrainerConfig {
if (name === 'Finn' || name === 'Ivy') { if (name === 'Finn') {
// 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') {
this.name = i18next.t('trainerNames:rival'); name = i18next.t('trainerNames:rival');
}
if (name === 'Ivy') {
this.name = i18next.t('trainerNames:rival_female');
} }
} }
this.name = name; this.name = name;
return this; return this;
@ -284,8 +282,18 @@ 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;
@ -391,6 +399,9 @@ 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) => {
@ -423,7 +434,9 @@ 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) => {
@ -451,7 +464,9 @@ 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))
@ -721,7 +736,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('Students') [TrainerType.SCHOOL_KID]: new TrainerConfig(++t).setMoneyMultiplier(0.75).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders(undefined, 'lass').setHasDouble('School Kids')
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.ODDISH, Species.EXEGGCUTE, Species.TEDDIURSA, Species.WURMPLE, Species.RALTS, Species.SHROOMISH, Species.FLETCHLING ], [TrainerPoolTier.COMMON]: [ Species.ODDISH, Species.EXEGGCUTE, Species.TEDDIURSA, Species.WURMPLE, Species.RALTS, Species.SHROOMISH, Species.FLETCHLING ],
[TrainerPoolTier.UNCOMMON]: [ Species.VOLTORB, Species.WHISMUR, Species.MEDITITE, Species.MIME_JR, Species.NYMBLE ], [TrainerPoolTier.UNCOMMON]: [ Species.VOLTORB, Species.WHISMUR, Species.MEDITITE, Species.MIME_JR, Species.NYMBLE ],

View File

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

View File

@ -16,22 +16,29 @@ 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",
@ -39,6 +46,7 @@ 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",
@ -52,6 +60,7 @@ 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",
@ -59,35 +68,45 @@ export const trainerClasses: SimpleTranslationEntries = {
"officer": "Polizist", "officer": "Polizist",
"parasol_lady": "Schirmdame", "parasol_lady": "Schirmdame",
"pilot": "Pilot", "pilot": "Pilot",
"pokefan": "Pokéfan", "poké_fan": "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",
"rich": "Gentleman", // Gentleman is the english name but the trainerType is rich "restaurant_staff": "Restaurant Angestellte",
"rich_kid": "Schnösel", "rich_boy": "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,6 +3,7 @@ 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,22 +16,29 @@ 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",
@ -39,6 +46,7 @@ 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",
@ -52,6 +60,7 @@ 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",
@ -59,32 +68,44 @@ export const trainerClasses: SimpleTranslationEntries = {
"officer": "Officer", "officer": "Officer",
"parasol_lady": "Parasol Lady", "parasol_lady": "Parasol Lady",
"pilot": "Pilot", "pilot": "Pilot",
"pokefan": "Poké Fan", "poké_fan": "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",
"rich": "Gentleman", // Gentleman is the english name but the trainerType is rich "restaurant_staff": "Restaurant Staff",
"rich_kid": "Rich Boy", "rich_boy": "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,6 +3,7 @@ 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,22 +16,29 @@ 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",
@ -39,6 +46,7 @@ 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",
@ -52,6 +60,7 @@ 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",
@ -59,32 +68,44 @@ export const trainerClasses: SimpleTranslationEntries = {
"officer": "Officer", "officer": "Officer",
"parasol_lady": "Parasol Lady", "parasol_lady": "Parasol Lady",
"pilot": "Pilot", "pilot": "Pilot",
"pokefan": "Poké Fan", "poké_fan": "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",
"rich": "Gentleman", // Gentleman is the english name but the trainerType is rich "restaurant_staff": "Restaurant Staff",
"rich_kid": "Rich Boy", "rich_boy": "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,11 +1,12 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battle: SimpleTranslationEntries = { export const battle: SimpleTranslationEntries = {
"bossAppeared": "Un {{bossName}} apparaît.", "bossAppeared": "Un {{bossName}} apparait.",
"trainerAppeared": "Un combat est lancé\npar {{trainerName}} !", "trainerAppeared": "Un combat est lancé\npar {{trainerName}} !",
"singleWildAppeared": "Un {{pokemonName}} sauvage apparaît !", "trainerAppearedDouble": "Un combat est lancé\npar {{trainerName}} !",
"singleWildAppeared": "Un {{pokemonName}} sauvage apparait !",
"multiWildAppeared": "Un {{pokemonName1}} et un {{pokemonName2}}\nsauvages apparaissent !", "multiWildAppeared": "Un {{pokemonName1}} et un {{pokemonName2}}\nsauvages apparaissent !",
"playerComeBack": "{{pokemonName}}, on change !\nReviens !", "playerComeBack": "{{pokemonName}} !\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": "Battles Won!", "battlesWon": "combats gagnés !",
"joinTheDiscord": "Join the Discord!", "joinTheDiscord": "Rejoins le Discord !",
"infiniteLevels": "Infinite Levels!", "infiniteLevels": "Niveaux infinis !",
"everythingStacks": "Everything Stacks!", "everythingStacks": "Tout se cumule !",
"optionalSaveScumming": "Optional Save Scumming!", "optionalSaveScumming": "Optional Save Scumming!",
"biomes": "35 Biomes!", "biomes": "35 biomes !",
"openSource": "Open Source!", "openSource": "Open Source !",
"playWithSpeed": "Play with 5x Speed!", "playWithSpeed": "Joue en vitesse x5 !",
"liveBugTesting": "Live Bug Testing!", "liveBugTesting": "Tests de bugs en direct !",
"heavyInfluence": "Heavy RoR2 Influence!", "heavyInfluence": "Grosse influence de RoR2 !",
"pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!", "pokemonRiskAndPokemonRain": "Pokémon Risk et Pokémon Rain !",
"nowWithMoreSalt": "Now with 33% More Salt!", "nowWithMoreSalt": "Désormais avec 33% de sel en plus !",
"infiniteFusionAtHome": "Infinite Fusion at Home!", "infiniteFusionAtHome": "Infinite Fusion, chez vous !",
"brokenEggMoves": "Broken Egg Moves!", "brokenEggMoves": "Des Capacités Œuf craquées !",
"magnificent": "Magnificent!", "magnificent": "Magnifique !",
"mubstitute": "Mubstitute!", "mubstitute": "Mubstitute !",
"thatsCrazy": "That\'s Crazy!", "thatsCrazy": "Cest une dinguerie !",
"oranceJuice": "Orance Juice!", "oranceJuice": "Jus dorange !",
"questionableBalancing": "Questionable Balancing!", "questionableBalancing": "Équilibrage douteux !",
"coolShaders": "Cool Shaders!", "coolShaders": "Cool shaders !",
"aiFree": "AI-Free!", "aiFree": "Garanti sans IA !",
"suddenDifficultySpikes": "Sudden Difficulty Spikes!", "suddenDifficultySpikes": "De soudains pics de difficultés !",
"basedOnAnUnfinishedFlashGame": "Based on an Unfinished Flash Game!", "basedOnAnUnfinishedFlashGame": "Basé sur un jeu Flash abandonné !",
"moreAddictiveThanIntended": "More Addictive than Intended!", "moreAddictiveThanIntended": "Plus addictif que prévu !",
"mostlyConsistentSeeds": "Mostly Consistent Seeds!", "mostlyConsistentSeeds": "Des seeds à peu près stables !",
"achievementPointsDontDoAnything": "Achievement Points Don\'t Do Anything!", "achievementPointsDontDoAnything": "Les Points de Succès servent à rien !",
"youDoNotStartAtLevel": "You Do Not Start at Level 2000!", "youDoNotStartAtLevel": "Ne commence pas au Niveau 2000 !",
"dontTalkAboutTheManaphyEggIncident": "Don\'t Talk About the Manaphy Egg Incident!", "dontTalkAboutTheManaphyEggIncident": "Ne parle pas de l'incident de lŒuf de Manaphy !",
"alsoTryPokengine": "Also Try Pokéngine!", "alsoTryPokengine": "Essaye aussi Pokéngine !",
"alsoTryEmeraldRogue": "Also Try Emerald Rogue!", "alsoTryEmeraldRogue": "Essaye aussi Emerald Rogue!",
"alsoTryRadicalRed": "Also Try Radical Red!", "alsoTryRadicalRed": "Essaye aussi Radical Red !",
"eeveeExpo": "Eevee Expo!", "eeveeExpo": "Eevee Expo !",
"ynoproject": "YNOproject!", "ynoproject": "YNOproject !",
} as const; } as const;

View File

@ -16,22 +16,29 @@ 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",
@ -39,6 +46,7 @@ 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",
@ -53,38 +61,51 @@ export const trainerClasses: SimpleTranslationEntries = {
"maid": "Gouvernante", "maid": "Gouvernante",
"madame": "Mondaine", "madame": "Mondaine",
"musican": "Musicien", "musican": "Musicien",
"hex_maniac": "Hex Maniac", "medical_team": "Médecins",
"nurse": " Infirmière", "hex_maniac": "Mystimaniac",
"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",
"pokefan": "Pokéfan", "poké_fan": "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",
"rich": "Gentleman", // Gentleman is the english name but the trainerType is rich "restaurant_staff": "Serveurs",
"rich_kid": "Richard", "rich_boy": "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,6 +3,7 @@ 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,22 +16,29 @@ 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",
@ -39,6 +46,7 @@ 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",
@ -52,6 +60,7 @@ 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",
@ -59,32 +68,44 @@ export const trainerClasses: SimpleTranslationEntries = {
"officer": "Officer", "officer": "Officer",
"parasol_lady": "Parasol Lady", "parasol_lady": "Parasol Lady",
"pilot": "Pilot", "pilot": "Pilot",
"pokefan": "Poké Fan", "poké_fan": "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",
"rich": "Gentleman", // Gentleman is the english name but the trainerType is rich "restaurant_staff": "Restaurant Staff",
"rich_kid": "Rich Boy", "rich_boy": "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,6 +3,7 @@ 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,22 +16,29 @@ 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",
@ -39,6 +46,7 @@ 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",
@ -53,38 +61,51 @@ 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",
"pokefan": "Pokefã", "poké_fan": "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",
"rich": "Cavalheira", // Gentleman is the english name but the trainerType is rich "restaurant_staff": "Restaurant Staff",
"rich_kid": "Riquinho", "rich_boy": "Rich Boy",
"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,6 +3,7 @@ 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,22 +16,29 @@ 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",
@ -39,6 +46,7 @@ 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",
@ -52,6 +60,7 @@ 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",
@ -59,32 +68,44 @@ export const trainerClasses: SimpleTranslationEntries = {
"officer": "Officer", "officer": "Officer",
"parasol_lady": "Parasol Lady", "parasol_lady": "Parasol Lady",
"pilot": "Pilot", "pilot": "Pilot",
"pokefan": "Poké Fan", "poké_fan": "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",
"rich": "Gentleman", // Gentleman is the english name but the trainerType is rich "restaurant_staff": "Restaurant Staff",
"rich_kid": "Rich Boy", "rich_boy": "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;
@ -214,5 +235,6 @@ export const trainerNames: SimpleTranslationEntries = {
"nemona": "Nemona", "nemona": "Nemona",
"kieran": "Kieran", "kieran": "Kieran",
"leon": "Leon", "leon": "Leon",
"rival": "Rival", "rival": "Finn",
"rival_female": "Ivy",
} as const; } as const;

View File

@ -841,8 +841,15 @@ 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) {
return i18next.t('battle:trainerAppeared', {trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true)}); 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 enemyField.length === 1 return enemyField.length === 1
? i18next.t('battle:singleWildAppeared', {pokemonName: enemyField[0].name}) ? i18next.t('battle:singleWildAppeared', {pokemonName: enemyField[0].name})