Compare commits

...

10 Commits

Author SHA1 Message Date
Laeticia PIERRE
a44c1587d4
Fix some fr (#1013)
* Fix some modifier-type fr

* Fix some trainers fr

* Fix DYNAMAX_BAND fr
2024-05-17 05:13:32 -05:00
FanHua
250142083a
Implements localization for BerryType (#1007) 2024-05-17 05:09:08 -05:00
Gerafique
61938869c1
Added German Translations for menu.ts (#960) 2024-05-17 04:56:11 -05:00
Jakub Hanko
b4f643f0fa
Use getBattleStat instead of getStat in BattleStatRatioPowerAttr (#742)
* Use getBattleStat instead of getStat in BattleStatRatioPowerAttr

* Change unnecessary let into const

* Refactor BattleStatRatioPowerAttr into two distinct classes

* Add TSDoc for the new classes
2024-05-17 01:42:43 -04:00
Benjamin Odom
0cd305d78a
Fix Trainer Localization Typos (#1010)
Took a look at some of the entries for trainers and adjusted accordingly. it looks like all of these trainer types were grabbed from an online source as a sort of future-proofing which is good, but resulted in some errors. Some of which have already been fixed, and some which are included here.

Also prevents an issue if there is a missing image and displays a warning in the console instead of a crash.
2024-05-17 00:01:35 -05:00
Flashfyre
f2dff2cd25 End card only shows in classic mode 2024-05-17 00:20:18 -04:00
Tempoanon
f2b5a1b6f4
Fix some Pokemon classifications (#857) 2024-05-16 22:11:53 -05:00
Charlie Giang
1bd3ec2fd6
Fix ingrain for Phantump and Trevenant (#856) (#998) 2024-05-16 22:09:40 -05:00
Vaner42
dd3d38b5d8
fixed translate 'hau'、 ‘diantha’ 、‘leon’ into Simplified Chinese. (#1009)
* Translate 'trainer' into  Simplified Chinese.

* fixed translate 'hau'、 ‘diantha’ 、‘leon’ into Simplified Chinese.

---------

Co-authored-by: Junhan <junhan.wu@nexttao.com>
2024-05-16 22:03:26 -05:00
Vaner42
e035e85811
Translate 'trainer' into Simplified Chinese. (#1006)
Co-authored-by: Junhan <junhan.wu@nexttao.com>
2024-05-16 21:42:12 -05:00
30 changed files with 812 additions and 337 deletions

View File

@ -15,6 +15,7 @@ import { TerrainType } from "./terrain";
import { WeatherType } from "./weather"; import { WeatherType } from "./weather";
import { BattleStat } from "./battle-stat"; import { BattleStat } from "./battle-stat";
import { allAbilities } from "./ability"; import { allAbilities } from "./ability";
import { Species } from "./enums/species";
export enum BattlerTagLapseType { export enum BattlerTagLapseType {
FAINT, FAINT,
@ -117,7 +118,11 @@ export class TrappedTag extends BattlerTag {
} }
canAdd(pokemon: Pokemon): boolean { canAdd(pokemon: Pokemon): boolean {
return !pokemon.isOfType(Type.GHOST) && !pokemon.getTag(BattlerTagType.TRAPPED); const isGhost = pokemon.isOfType(Type.GHOST);
const isTrapped = pokemon.getTag(BattlerTagType.TRAPPED);
const isAllowedGhostType = pokemon.species.speciesId === Species.PHANTUMP || pokemon.species.speciesId === Species.TREVENANT;
return !isTrapped && (!isGhost || isAllowedGhostType);
} }
onAdd(pokemon: Pokemon): void { onAdd(pokemon: Pokemon): void {

View File

@ -7,6 +7,7 @@ import { BattlerTagType } from "./enums/battler-tag-type";
import { getStatusEffectHealText } from "./status-effect"; import { getStatusEffectHealText } from "./status-effect";
import * as Utils from "../utils"; import * as Utils from "../utils";
import { DoubleBerryEffectAbAttr, ReduceBerryUseThresholdAbAttr, applyAbAttrs } from "./ability"; import { DoubleBerryEffectAbAttr, ReduceBerryUseThresholdAbAttr, applyAbAttrs } from "./ability";
import i18next from '../plugins/i18n';
export enum BerryType { export enum BerryType {
SITRUS, SITRUS,
@ -22,32 +23,12 @@ export enum BerryType {
LEPPA LEPPA
} }
export function getBerryName(berryType: BerryType) { export function getBerryName(berryType: BerryType): string {
return `${Utils.toReadableString(BerryType[berryType])} Berry`; return i18next.t(`berry:${BerryType[berryType]}.name`);
} }
export function getBerryEffectDescription(berryType: BerryType) { export function getBerryEffectDescription(berryType: BerryType): string {
switch (berryType) { return i18next.t(`berry:${BerryType[berryType]}.effect`);
case BerryType.SITRUS:
return 'Restores 25% HP if HP is below 50%';
case BerryType.LUM:
return 'Cures any non-volatile status condition and confusion';
case BerryType.ENIGMA:
return 'Restores 25% HP if hit by a super effective move';
case BerryType.LIECHI:
case BerryType.GANLON:
case BerryType.PETAYA:
case BerryType.APICOT:
case BerryType.SALAC:
const stat = (berryType - BerryType.LIECHI) as BattleStat;
return `Raises ${getBattleStatName(stat)} if HP is below 25%`;
case BerryType.LANSAT:
return 'Raises critical hit ratio if HP is below 25%';
case BerryType.STARF:
return 'Sharply raises a random stat if HP is below 25%';
case BerryType.LEPPA:
return 'Restores 10 PP to a move if its PP reaches 0';
}
} }
export type BerryPredicate = (pokemon: Pokemon) => boolean; export type BerryPredicate = (pokemon: Pokemon) => boolean;

View File

@ -1921,7 +1921,7 @@ export class CopyStatsAttr extends MoveEffectAttr {
target.updateInfo(); target.updateInfo();
user.updateInfo(); user.updateInfo();
target.scene.queueMessage(getPokemonMessage(user, 'copied\n') + getPokemonMessage(target, `'s stat changes!`)); target.scene.queueMessage(getPokemonMessage(user, ' copied\n') + getPokemonMessage(target, `'s stat changes!`));
return true; return true;
} }
@ -2129,36 +2129,27 @@ export class WeightPowerAttr extends VariablePowerAttr {
} }
} }
export class BattleStatRatioPowerAttr extends VariablePowerAttr { /**
private stat: Stat; * Attribute used for Electro Ball move.
private invert: boolean; * @extends VariablePowerAttr
* @see {@linkcode apply}
constructor(stat: Stat, invert: boolean = false) { **/
super(); export class ElectroBallPowerAttr extends VariablePowerAttr {
/**
this.stat = stat; * Move that deals more damage the faster {@linkcode BattleStat.SPD}
this.invert = invert; * the user is compared to the target.
} * @param user Pokemon that used the move
* @param target The target of the move
* @param move Move with this attribute
* @param args N/A
* @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 {
const power = args[0] as Utils.NumberHolder; const power = args[0] as Utils.NumberHolder;
const statRatio = target.getStat(this.stat) / user.getStat(this.stat); const statRatio = target.getBattleStat(Stat.SPD) / user.getBattleStat(Stat.SPD);
const statThresholds = [ 0.25, 1 / 3, 0.5, 1, -1 ]; const statThresholds = [ 0.25, 1 / 3, 0.5, 1, -1 ];
let statThresholdPowers = [ 150, 120, 80, 60, 40 ]; const statThresholdPowers = [ 150, 120, 80, 60, 40 ];
if (this.invert) {
// Gyro ball uses a specific formula
let userSpeed = user.getBattleStat(this.stat);
if (userSpeed < 1) {
// Gen 6+ always have 1 base power
power.value = 1;
return true;
}
let bp = Math.floor(Math.min(150, 25 * target.getBattleStat(this.stat) / userSpeed + 1));
power.value = bp;
return true;
}
let w = 0; let w = 0;
while (w < statThresholds.length - 1 && statRatio > statThresholds[w]) { while (w < statThresholds.length - 1 && statRatio > statThresholds[w]) {
@ -2167,7 +2158,36 @@ export class BattleStatRatioPowerAttr extends VariablePowerAttr {
} }
power.value = statThresholdPowers[w]; power.value = statThresholdPowers[w];
return true;
}
}
/**
* Attribute used for Gyro Ball move.
* @extends VariablePowerAttr
* @see {@linkcode apply}
**/
export class GyroBallPowerAttr extends VariablePowerAttr {
/**
* Move that deals more damage the slower {@linkcode BattleStat.SPD}
* the user is compared to the target.
* @param user Pokemon that used the move
* @param target The target of the move
* @param move Move with this attribute
* @param args N/A
* @returns true if the function succeeds
*/
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
const power = args[0] as Utils.NumberHolder;
const userSpeed = user.getBattleStat(Stat.SPD);
if (userSpeed < 1) {
// Gen 6+ always have 1 base power
power.value = 1;
return true;
}
power.value = Math.floor(Math.min(150, 25 * target.getBattleStat(Stat.SPD) / userSpeed + 1));
return true; return true;
} }
} }
@ -5388,7 +5408,7 @@ export function initMoves() {
.attr(StatChangeAttr, BattleStat.SPD, -1, true) .attr(StatChangeAttr, BattleStat.SPD, -1, true)
.punchingMove(), .punchingMove(),
new AttackMove(Moves.GYRO_BALL, Type.STEEL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) new AttackMove(Moves.GYRO_BALL, Type.STEEL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4)
.attr(BattleStatRatioPowerAttr, Stat.SPD, true) .attr(GyroBallPowerAttr)
.ballBombMove(), .ballBombMove(),
new SelfStatusMove(Moves.HEALING_WISH, Type.PSYCHIC, -1, 10, -1, 0, 4) new SelfStatusMove(Moves.HEALING_WISH, Type.PSYCHIC, -1, 10, -1, 0, 4)
.attr(SacrificialFullRestoreAttr) .attr(SacrificialFullRestoreAttr)
@ -5741,7 +5761,7 @@ export function initMoves() {
.condition(unknownTypeCondition) .condition(unknownTypeCondition)
.attr(hitsSameTypeAttr), .attr(hitsSameTypeAttr),
new AttackMove(Moves.ELECTRO_BALL, Type.ELECTRIC, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 5) new AttackMove(Moves.ELECTRO_BALL, Type.ELECTRIC, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 5)
.attr(BattleStatRatioPowerAttr, Stat.SPD) .attr(ElectroBallPowerAttr)
.ballBombMove(), .ballBombMove(),
new StatusMove(Moves.SOAK, Type.WATER, 100, 20, -1, 0, 5) new StatusMove(Moves.SOAK, Type.WATER, 100, 20, -1, 0, 5)
.attr(ChangeTypeAttr, Type.WATER), .attr(ChangeTypeAttr, Type.WATER),

View File

@ -1504,7 +1504,7 @@ export function initSpecies() {
new PokemonForm("Origin Forme", "origin", Type.WATER, Type.DRAGON, 6.3, 659, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 90, 100, 100, 150, 120, 120, 3, 0, 340), new PokemonForm("Origin Forme", "origin", Type.WATER, Type.DRAGON, 6.3, 659, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 90, 100, 100, 150, 120, 120, 3, 0, 340),
), ),
new PokemonSpecies(Species.HEATRAN, 4, true, false, false, "Lava Dome Pokémon", Type.FIRE, Type.STEEL, 1.7, 430, Abilities.FLASH_FIRE, Abilities.NONE, Abilities.FLAME_BODY, 600, 91, 90, 106, 130, 106, 77, 3, 100, 300, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.HEATRAN, 4, true, false, false, "Lava Dome Pokémon", Type.FIRE, Type.STEEL, 1.7, 430, Abilities.FLASH_FIRE, Abilities.NONE, Abilities.FLAME_BODY, 600, 91, 90, 106, 130, 106, 77, 3, 100, 300, GrowthRate.SLOW, 50, false),
new PokemonSpecies(Species.REGIGIGAS, 4, false, true, false, "Colossal Pokémon", Type.NORMAL, null, 3.7, 420, Abilities.SLOW_START, Abilities.NONE, Abilities.NORMALIZE, 670, 110, 160, 110, 80, 110, 100, 3, 0, 335, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.REGIGIGAS, 4, true, false, false, "Colossal Pokémon", Type.NORMAL, null, 3.7, 420, Abilities.SLOW_START, Abilities.NONE, Abilities.NORMALIZE, 670, 110, 160, 110, 80, 110, 100, 3, 0, 335, GrowthRate.SLOW, null, false),
new PokemonSpecies(Species.GIRATINA, 4, false, true, false, "Renegade Pokémon", Type.GHOST, Type.DRAGON, 4.5, 750, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340, GrowthRate.SLOW, null, false, true, new PokemonSpecies(Species.GIRATINA, 4, false, true, false, "Renegade Pokémon", Type.GHOST, Type.DRAGON, 4.5, 750, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340, GrowthRate.SLOW, null, false, true,
new PokemonForm("Altered Forme", "altered", Type.GHOST, Type.DRAGON, 4.5, 750, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340), new PokemonForm("Altered Forme", "altered", Type.GHOST, Type.DRAGON, 4.5, 750, Abilities.PRESSURE, Abilities.NONE, Abilities.TELEPATHY, 680, 150, 100, 120, 100, 120, 90, 3, 0, 340),
new PokemonForm("Origin Forme", "origin", Type.GHOST, Type.DRAGON, 6.9, 650, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 680, 150, 120, 100, 120, 100, 90, 3, 0, 340), new PokemonForm("Origin Forme", "origin", Type.GHOST, Type.DRAGON, 6.9, 650, Abilities.LEVITATE, Abilities.NONE, Abilities.NONE, 680, 150, 120, 100, 120, 100, 90, 3, 0, 340),
@ -1931,7 +1931,7 @@ export function initSpecies() {
new PokemonForm("Active Mode", "active", Type.FAIRY, null, 3, 215, Abilities.FAIRY_AURA, Abilities.NONE, Abilities.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340) new PokemonForm("Active Mode", "active", Type.FAIRY, null, 3, 215, Abilities.FAIRY_AURA, Abilities.NONE, Abilities.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340)
), ),
new PokemonSpecies(Species.YVELTAL, 6, false, true, false, "Destruction Pokémon", Type.DARK, Type.FLYING, 5.8, 203, Abilities.DARK_AURA, Abilities.NONE, Abilities.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.YVELTAL, 6, false, true, false, "Destruction Pokémon", Type.DARK, Type.FLYING, 5.8, 203, Abilities.DARK_AURA, Abilities.NONE, Abilities.NONE, 680, 126, 131, 95, 131, 98, 99, 45, 0, 340, GrowthRate.SLOW, null, false),
new PokemonSpecies(Species.ZYGARDE, 6, true, false, false, "Order Pokémon", Type.DRAGON, Type.GROUND, 5, 305, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, GrowthRate.SLOW, null, false, false, new PokemonSpecies(Species.ZYGARDE, 6, false, true, false, "Order Pokémon", Type.DRAGON, Type.GROUND, 5, 305, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, GrowthRate.SLOW, null, false, false,
new PokemonForm("50% Forme", "50", Type.DRAGON, Type.GROUND, 5, 305, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, ""), new PokemonForm("50% Forme", "50", Type.DRAGON, Type.GROUND, 5, 305, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, ""),
new PokemonForm("10% Forme", "10", Type.DRAGON, Type.GROUND, 1.2, 33.5, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 300), new PokemonForm("10% Forme", "10", Type.DRAGON, Type.GROUND, 1.2, 33.5, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 300),
new PokemonForm("50% Forme Power Construct", "50-pc", Type.DRAGON, Type.GROUND, 5, 305, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, ""), new PokemonForm("50% Forme Power Construct", "50-pc", Type.DRAGON, Type.GROUND, 5, 305, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, ""),
@ -2285,7 +2285,7 @@ export function initSpecies() {
new PokemonSpecies(Species.REGIDRAGO, 8, true, false, false, "Dragon Orb Pokémon", Type.DRAGON, null, 2.1, 200, Abilities.DRAGONS_MAW, Abilities.NONE, Abilities.NONE, 580, 200, 100, 50, 100, 50, 80, 3, 35, 290, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.REGIDRAGO, 8, true, false, false, "Dragon Orb Pokémon", Type.DRAGON, null, 2.1, 200, Abilities.DRAGONS_MAW, Abilities.NONE, Abilities.NONE, 580, 200, 100, 50, 100, 50, 80, 3, 35, 290, GrowthRate.SLOW, null, false),
new PokemonSpecies(Species.GLASTRIER, 8, true, false, false, "Wild Horse Pokémon", Type.ICE, null, 2.2, 800, Abilities.CHILLING_NEIGH, Abilities.NONE, Abilities.NONE, 580, 100, 145, 130, 65, 110, 30, 3, 35, 290, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.GLASTRIER, 8, true, false, false, "Wild Horse Pokémon", Type.ICE, null, 2.2, 800, Abilities.CHILLING_NEIGH, Abilities.NONE, Abilities.NONE, 580, 100, 145, 130, 65, 110, 30, 3, 35, 290, GrowthRate.SLOW, null, false),
new PokemonSpecies(Species.SPECTRIER, 8, true, false, false, "Swift Horse Pokémon", Type.GHOST, null, 2, 44.5, Abilities.GRIM_NEIGH, Abilities.NONE, Abilities.NONE, 580, 100, 65, 60, 145, 80, 130, 3, 35, 290, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.SPECTRIER, 8, true, false, false, "Swift Horse Pokémon", Type.GHOST, null, 2, 44.5, Abilities.GRIM_NEIGH, Abilities.NONE, Abilities.NONE, 580, 100, 65, 60, 145, 80, 130, 3, 35, 290, GrowthRate.SLOW, null, false),
new PokemonSpecies(Species.CALYREX, 8, true, false, false, "King Pokémon", Type.PSYCHIC, Type.GRASS, 1.1, 7.7, Abilities.UNNERVE, Abilities.NONE, Abilities.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250, GrowthRate.SLOW, null, false, true, new PokemonSpecies(Species.CALYREX, 8, false, true, false, "King Pokémon", Type.PSYCHIC, Type.GRASS, 1.1, 7.7, Abilities.UNNERVE, Abilities.NONE, Abilities.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250, GrowthRate.SLOW, null, false, true,
new PokemonForm("Normal", "", Type.PSYCHIC, Type.GRASS, 1.1, 7.7, Abilities.UNNERVE, Abilities.NONE, Abilities.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250), new PokemonForm("Normal", "", Type.PSYCHIC, Type.GRASS, 1.1, 7.7, Abilities.UNNERVE, Abilities.NONE, Abilities.NONE, 500, 100, 80, 80, 80, 80, 80, 3, 100, 250),
new PokemonForm("Ice", "ice", Type.PSYCHIC, Type.ICE, 2.4, 809.1, Abilities.AS_ONE_GLASTRIER, Abilities.NONE, Abilities.NONE, 680, 100, 165, 150, 85, 130, 50, 3, 100, 250), new PokemonForm("Ice", "ice", Type.PSYCHIC, Type.ICE, 2.4, 809.1, Abilities.AS_ONE_GLASTRIER, Abilities.NONE, Abilities.NONE, 680, 100, 165, 150, 85, 130, 50, 3, 100, 250),
new PokemonForm("Shadow", "shadow", Type.PSYCHIC, Type.GHOST, 2.4, 53.6, Abilities.AS_ONE_SPECTRIER, Abilities.NONE, Abilities.NONE, 680, 100, 85, 80, 165, 100, 150, 3, 100, 250), new PokemonForm("Shadow", "shadow", Type.PSYCHIC, Type.GHOST, 2.4, 53.6, Abilities.AS_ONE_SPECTRIER, Abilities.NONE, Abilities.NONE, 680, 100, 85, 80, 165, 100, 150, 3, 100, 250),
@ -2453,10 +2453,10 @@ export function initSpecies() {
new PokemonForm("Unremarkable Form", "unremarkable", Type.GRASS, Type.GHOST, 0.2, 2.2, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178), new PokemonForm("Unremarkable Form", "unremarkable", Type.GRASS, Type.GHOST, 0.2, 2.2, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178),
new PokemonForm("Masterpiece Form", "masterpiece", Type.GRASS, Type.GHOST, 0.2, 2.2, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178), new PokemonForm("Masterpiece Form", "masterpiece", Type.GRASS, Type.GHOST, 0.2, 2.2, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178),
), ),
new PokemonSpecies(Species.OKIDOGI, 9, false, true, false, "Retainer Pokémon", Type.POISON, Type.FIGHTING, 1.8, 92.2, Abilities.TOXIC_CHAIN, Abilities.NONE, Abilities.GUARD_DOG, 555, 88, 128, 115, 58, 86, 80, 3, 0, 276, GrowthRate.SLOW, 100, false), new PokemonSpecies(Species.OKIDOGI, 9, true, false, false, "Retainer Pokémon", Type.POISON, Type.FIGHTING, 1.8, 92.2, Abilities.TOXIC_CHAIN, Abilities.NONE, Abilities.GUARD_DOG, 555, 88, 128, 115, 58, 86, 80, 3, 0, 276, GrowthRate.SLOW, 100, false),
new PokemonSpecies(Species.MUNKIDORI, 9, false, true, false, "Retainer Pokémon", Type.POISON, Type.PSYCHIC, 1, 12.2, Abilities.TOXIC_CHAIN, Abilities.NONE, Abilities.FRISK, 555, 88, 75, 66, 130, 90, 106, 3, 0, 276, GrowthRate.SLOW, 100, false), new PokemonSpecies(Species.MUNKIDORI, 9, true, false, false, "Retainer Pokémon", Type.POISON, Type.PSYCHIC, 1, 12.2, Abilities.TOXIC_CHAIN, Abilities.NONE, Abilities.FRISK, 555, 88, 75, 66, 130, 90, 106, 3, 0, 276, GrowthRate.SLOW, 100, false),
new PokemonSpecies(Species.FEZANDIPITI, 9, false, true, false, "Retainer Pokémon", Type.POISON, Type.FAIRY, 1.4, 30.1, Abilities.TOXIC_CHAIN, Abilities.NONE, Abilities.TECHNICIAN, 555, 88, 91, 82, 70, 125, 99, 3, 0, 276, GrowthRate.SLOW, 100, false), new PokemonSpecies(Species.FEZANDIPITI, 9, true, false, false, "Retainer Pokémon", Type.POISON, Type.FAIRY, 1.4, 30.1, Abilities.TOXIC_CHAIN, Abilities.NONE, Abilities.TECHNICIAN, 555, 88, 91, 82, 70, 125, 99, 3, 0, 276, GrowthRate.SLOW, 100, false),
new PokemonSpecies(Species.OGERPON, 9, false, true, false, "Mask Pokémon", Type.GRASS, null, 1.2, 39.8, Abilities.DEFIANT, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275, GrowthRate.SLOW, 0, false, false, new PokemonSpecies(Species.OGERPON, 9, true, false, false, "Mask Pokémon", Type.GRASS, null, 1.2, 39.8, Abilities.DEFIANT, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275, GrowthRate.SLOW, 0, false, false,
new PokemonForm("Teal Mask", "teal-mask", Type.GRASS, null, 1.2, 39.8, Abilities.DEFIANT, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), new PokemonForm("Teal Mask", "teal-mask", Type.GRASS, null, 1.2, 39.8, Abilities.DEFIANT, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275),
new PokemonForm("Wellspring Mask", "wellspring-mask", Type.GRASS, Type.WATER, 1.2, 39.8, Abilities.WATER_ABSORB, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), new PokemonForm("Wellspring Mask", "wellspring-mask", Type.GRASS, Type.WATER, 1.2, 39.8, Abilities.WATER_ABSORB, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275),
new PokemonForm("Hearthflame Mask", "hearthflame-mask", Type.GRASS, Type.FIRE, 1.2, 39.8, Abilities.MOLD_BREAKER, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275), new PokemonForm("Hearthflame Mask", "hearthflame-mask", Type.GRASS, Type.FIRE, 1.2, 39.8, Abilities.MOLD_BREAKER, Abilities.NONE, Abilities.NONE, 550, 80, 120, 84, 60, 96, 110, 5, 50, 275),

View File

@ -378,16 +378,29 @@ export default class Trainer extends Phaser.GameObjects.Container {
}; };
const sprites = this.getSprites(); const sprites = this.getSprites();
const tintSprites = this.getTintSprites(); const tintSprites = this.getTintSprites();
sprites[0].play(trainerAnimConfig);
tintSprites[0].play(trainerAnimConfig); // Don't try to play an animation when there isn't one
if (sprites.length > 1) {
sprites[0].play(trainerAnimConfig);
tintSprites[0].play(trainerAnimConfig);
}
else
console.warn(`No animation found for '${this.getKey()}'. Is this intentional?`);
if (this.variant === TrainerVariant.DOUBLE && !this.config.doubleOnly) { if (this.variant === TrainerVariant.DOUBLE && !this.config.doubleOnly) {
const partnerTrainerAnimConfig = { const partnerTrainerAnimConfig = {
key: this.getKey(true), key: this.getKey(true),
repeat: 0, repeat: 0,
startFrame: 0 startFrame: 0
}; };
sprites[1].play(partnerTrainerAnimConfig);
tintSprites[1].play(partnerTrainerAnimConfig); // Don't try to play an animation when there isn't one
if (sprites.length > 1) {
sprites[1].play(partnerTrainerAnimConfig);
tintSprites[1].play(partnerTrainerAnimConfig);
}
else
console.warn(`No animation found for '${this.getKey()}'. Is this intentional?`);
} }
} }

48
src/locales/de/berry.ts Normal file
View File

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

View File

@ -18,6 +18,7 @@ import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers"; import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { weather } from "./weather"; import { weather } from "./weather";
import { berry } from "./berry";
export const deConfig = { export const deConfig = {
@ -43,4 +44,5 @@ export const deConfig = {
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
weather: weather, weather: weather,
berry: berry,
} }

View File

@ -12,10 +12,10 @@ export const menu: SimpleTranslationEntries = {
"loadGame": "Spiel laden", "loadGame": "Spiel laden",
"newGame": "Neues Spiel", "newGame": "Neues Spiel",
"selectGameMode": "Wähle einen Spielmodus", "selectGameMode": "Wähle einen Spielmodus",
"logInOrCreateAccount": "Logge dich ein oder erstelle einen Account zum starten. Keine Email nötig!", "logInOrCreateAccount": "Melde dich an oder erstelle einen Account zum starten. Keine Email nötig!",
"username": "Benutzername", "username": "Benutzername",
"password": "Passwort", "password": "Passwort",
"login": "Einloggen", "login": "Anmelden",
"register": "Registrieren", "register": "Registrieren",
"emptyUsername": "Benutzername darf nicht leer sein", "emptyUsername": "Benutzername darf nicht leer sein",
"invalidLoginUsername": "Der eingegebene Benutzername ist ungültig", "invalidLoginUsername": "Der eingegebene Benutzername ist ungültig",
@ -26,20 +26,20 @@ export const menu: SimpleTranslationEntries = {
"accountNonExistent": "Der eingegebene Benutzer existiert nicht", "accountNonExistent": "Der eingegebene Benutzer existiert nicht",
"unmatchingPassword": "Das eingegebene Passwort stimmt nicht überein", "unmatchingPassword": "Das eingegebene Passwort stimmt nicht überein",
"passwordNotMatchingConfirmPassword": "Passwort muss mit Bestätigungspasswort übereinstimmen", "passwordNotMatchingConfirmPassword": "Passwort muss mit Bestätigungspasswort übereinstimmen",
"confirmPassword": "Besätige Passwort", "confirmPassword": "Bestätige Passwort",
"registrationAgeWarning": "Mit der Registrierung bestätigen Sie, dass Sie 13 Jahre oder älter sind.", "registrationAgeWarning": "Mit der Registrierung bestätigen Sie, dass Sie 13 Jahre oder älter sind.",
"backToLogin": "Zurück zum Einloggen", "backToLogin": "Zurück zur Anmeldung",
"failedToLoadSaveData": "Speicherdaten konnten nicht geladen werden. Bitte laden Sie die Seite neu.\nWenn dies weiterhin der Fall ist, wenden Sie sich bitte an den Administrator.", "failedToLoadSaveData": "Speicherdaten konnten nicht geladen werden. Bitte laden Sie die Seite neu.\nWenn dies weiterhin der Fall ist, wenden Sie sich bitte an den Administrator.",
"sessionSuccess": "Sitzung erfolgreich geladen.", "sessionSuccess": "Sitzung erfolgreich geladen.",
"failedToLoadSession": "Ihre Sitzungsdaten konnten nicht geladen werden.\nSie könnten beschädigt sein.", "failedToLoadSession": "Ihre Sitzungsdaten konnten nicht geladen werden.\nSie könnten beschädigt sein.",
"boyOrGirl": "Bist du ein Junge oder ein Mädchen?", "boyOrGirl": "Bist du ein Junge oder ein Mädchen?",
"boy": "Junge", "boy": "Junge",
"girl": "Mädchen", "girl": "Mädchen",
"evolving": "What?\n{{pokemonName}} is evolving!", "evolving": "Nanu?\n{{pokemonName}} entwickelt sich!",
"stoppedEvolving": "{{pokemonName}} stopped evolving.", "stoppedEvolving": "Hm? {{pokemonName}} hat die Entwicklung \nabgebrochen.", // "Hm? Entwicklung wurde abgebrochen!" without naming the pokemon seems to be the original.
"pauseEvolutionsQuestion": "Would you like to pause evolutions for {{pokemonName}}?\nEvolutions can be re-enabled from the party screen.", "pauseEvolutionsQuestion": "Die Entwicklung von {{pokemonName}} vorübergehend pausieren?\nEntwicklungen können im Gruppenmenü wieder aktiviert werden.",
"evolutionsPaused": "Evolutions have been paused for {{pokemonName}}.", "evolutionsPaused": "Entwicklung von {{pokemonName}} pausiert.",
"evolutionDone": "Congratulations!\nYour {{pokemonName}} evolved into {{evolvedPokemonName}}!", "evolutionDone": "Glückwunsch!\nDein {{pokemonName}} entwickelte sich zu {{evolvedPokemonName}}!",
"dailyRankings": "Tägliche Rangliste", "dailyRankings": "Tägliche Rangliste",
"weeklyRankings": "Wöchentliche Rangliste", "weeklyRankings": "Wöchentliche Rangliste",
"noRankings": "Keine Rangliste", "noRankings": "Keine Rangliste",
@ -48,4 +48,4 @@ export const menu: SimpleTranslationEntries = {
"empty":"Leer", "empty":"Leer",
"yes":"Ja", "yes":"Ja",
"no":"Nein", "no":"Nein",
} as const; } as const;

View File

@ -44,8 +44,8 @@ export const trainerClasses: SimpleTranslationEntries = {
"depot_agent": "Bahnangestellter", "depot_agent": "Bahnangestellter",
"doctor": "Arzt", "doctor": "Arzt",
"doctor_female": "Ärztin", "doctor_female": "Ärztin",
"fishermen": "Angler", "fisherman": "Angler",
"fishermen_female": "Angler", // Seems to be the same in german but exists in other languages like italian "fisherman_female": "Angler", // Seems to be the same in german but exists in other languages like italian
"gentleman": "Gentleman", "gentleman": "Gentleman",
"guitarist": "Gitarrist", "guitarist": "Gitarrist",
"guitarist_female": "Gitarristin", "guitarist_female": "Gitarristin",
@ -61,15 +61,15 @@ export const trainerClasses: SimpleTranslationEntries = {
"maid": "Zofe", "maid": "Zofe",
"madame": "Madam", "madame": "Madam",
"medical_team": "Mediziner", "medical_team": "Mediziner",
"musican": "Musiker", "musician": "Musiker",
"hex_maniac": "Hexe", "hex_maniac": "Hexe",
"nurse": "Pflegerin", "nurse": "Pflegerin",
"nursery_aide": "Erzieherin", "nursery_aide": "Erzieherin",
"officer": "Polizist", "officer": "Polizist",
"parasol_lady": "Schirmdame", "parasol_lady": "Schirmdame",
"pilot": "Pilot", "pilot": "Pilot",
"poké_fan": "Pokéfan", "pokefan": "Pokéfan",
"poké_fan_family": "Pokéfan-Pärchen", "pokefan_family": "Pokéfan-Pärchen",
"preschooler": "Vorschüler", "preschooler": "Vorschüler",
"preschooler_female": "Vorschülerin", "preschooler_female": "Vorschülerin",
"preschoolers": "Vorschüler", "preschoolers": "Vorschüler",
@ -80,8 +80,12 @@ export const trainerClasses: SimpleTranslationEntries = {
"pokémon_rangers": "Pokémon-Ranger", "pokémon_rangers": "Pokémon-Ranger",
"ranger": "Ranger", "ranger": "Ranger",
"restaurant_staff": "Restaurant Angestellte", "restaurant_staff": "Restaurant Angestellte",
"rich": "Rich",
"rich_female": "Rich",
"rich_boy": "Schnösel", "rich_boy": "Schnösel",
"rich_couple": "Reiches Paar", "rich_couple": "Reiches Paar",
"rich_kid": "Rich Kid",
"rich_kid_female": "Rich Kid",
"rich_kids": "Schnösel", "rich_kids": "Schnösel",
"roughneck": "Raufbold", "roughneck": "Raufbold",
"scientist": "Forscher", "scientist": "Forscher",

48
src/locales/en/berry.ts Normal file
View File

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

View File

@ -18,6 +18,8 @@ import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers"; import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { weather } from "./weather"; import { weather } from "./weather";
import { berry } from "./berry";
export const enConfig = { export const enConfig = {
ability: ability, ability: ability,
@ -42,4 +44,5 @@ export const enConfig = {
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
weather: weather, weather: weather,
berry: berry,
} }

View File

@ -44,8 +44,8 @@ export const trainerClasses: SimpleTranslationEntries = {
"depot_agent": "Depot Agent", "depot_agent": "Depot Agent",
"doctor": "Doctor", "doctor": "Doctor",
"doctor_female": "Doctor", "doctor_female": "Doctor",
"fishermen": "Fishermen", "fisherman": "Fisherman",
"fishermen_female": "Fishermen", "fisherman_female": "Fisherman",
"gentleman": "Gentleman", "gentleman": "Gentleman",
"guitarist": "Guitarist", "guitarist": "Guitarist",
"guitarist_female": "Guitarist", "guitarist_female": "Guitarist",
@ -61,15 +61,15 @@ export const trainerClasses: SimpleTranslationEntries = {
"maid": "Maid", "maid": "Maid",
"madame": "Madame", "madame": "Madame",
"medical_team": "Medical Team", "medical_team": "Medical Team",
"musican": "Musician", "musician": "Musician",
"hex_maniac": "Hex Maniac", "hex_maniac": "Hex Maniac",
"nurse": "Nurse", "nurse": "Nurse",
"nursery_aide": "Nursery Aide", "nursery_aide": "Nursery Aide",
"officer": "Officer", "officer": "Officer",
"parasol_lady": "Parasol Lady", "parasol_lady": "Parasol Lady",
"pilot": "Pilot", "pilot": "Pilot",
"poké_fan": "Poké Fan", "pokefan": "Poké Fan",
"poké_fan_family": "Poké Fan Family", "pokefan_family": "Poké Fan Family",
"preschooler": "Preschooler", "preschooler": "Preschooler",
"preschooler_female": "Preschooler", "preschooler_female": "Preschooler",
"preschoolers": "Preschoolers", "preschoolers": "Preschoolers",
@ -80,8 +80,12 @@ export const trainerClasses: SimpleTranslationEntries = {
"pokémon_rangers": "Pokémon Ranger", "pokémon_rangers": "Pokémon Ranger",
"ranger": "Ranger", "ranger": "Ranger",
"restaurant_staff": "Restaurant Staff", "restaurant_staff": "Restaurant Staff",
"rich": "Rich",
"rich_female": "Rich",
"rich_boy": "Rich Boy", "rich_boy": "Rich Boy",
"rich_couple": "Rich Couple", "rich_couple": "Rich Couple",
"rich_kid": "Rich Kid",
"rich_kid_female": "Rich Kid",
"rich_kids": "Rich Kids", "rich_kids": "Rich Kids",
"roughneck": "Roughneck", "roughneck": "Roughneck",
"scientist": "Scientist", "scientist": "Scientist",

48
src/locales/es/berry.ts Normal file
View File

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

View File

@ -18,6 +18,7 @@ import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers"; import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { weather } from "./weather"; import { weather } from "./weather";
import { berry } from "./berry";
export const esConfig = { export const esConfig = {
@ -43,4 +44,5 @@ export const esConfig = {
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
weather: weather, weather: weather,
berry: berry,
} }

View File

@ -44,8 +44,8 @@ export const trainerClasses: SimpleTranslationEntries = {
"depot_agent": "Depot Agent", "depot_agent": "Depot Agent",
"doctor": "Doctor", "doctor": "Doctor",
"doctor_female": "Doctor", "doctor_female": "Doctor",
"fishermen": "Fishermen", "fisherman": "Fisherman",
"fishermen_female": "Fishermen", "fisherman_female": "Fisherman",
"gentleman": "Gentleman", "gentleman": "Gentleman",
"guitarist": "Guitarist", "guitarist": "Guitarist",
"guitarist_female": "Guitarist", "guitarist_female": "Guitarist",
@ -61,15 +61,15 @@ export const trainerClasses: SimpleTranslationEntries = {
"maid": "Maid", "maid": "Maid",
"madame": "Madame", "madame": "Madame",
"medical_team": "Medical Team", "medical_team": "Medical Team",
"musican": "Musician", "musician": "Musician",
"hex_maniac": "Hex Maniac", "hex_maniac": "Hex Maniac",
"nurse": "Nurse", "nurse": "Nurse",
"nursery_aide": "Nursery Aide", "nursery_aide": "Nursery Aide",
"officer": "Officer", "officer": "Officer",
"parasol_lady": "Parasol Lady", "parasol_lady": "Parasol Lady",
"pilot": "Pilot", "pilot": "Pilot",
"poké_fan": "Poké Fan", "pokefan": "Poké Fan",
"poké_fan_family": "Poké Fan Family", "pokefan_family": "Poké Fan Family",
"preschooler": "Preschooler", "preschooler": "Preschooler",
"preschooler_female": "Preschooler", "preschooler_female": "Preschooler",
"preschoolers": "Preschoolers", "preschoolers": "Preschoolers",
@ -80,8 +80,12 @@ export const trainerClasses: SimpleTranslationEntries = {
"pokémon_rangers": "Pokémon Ranger", "pokémon_rangers": "Pokémon Ranger",
"ranger": "Ranger", "ranger": "Ranger",
"restaurant_staff": "Restaurant Staff", "restaurant_staff": "Restaurant Staff",
"rich": "Rich",
"rich_female": "Rich",
"rich_boy": "Rich Boy", "rich_boy": "Rich Boy",
"rich_couple": "Rich Couple", "rich_couple": "Rich Couple",
"rich_kid": "Rich Kid",
"rich_kid_female": "Rich Kid",
"rich_kids": "Rich Kids", "rich_kids": "Rich Kids",
"roughneck": "Roughneck", "roughneck": "Roughneck",
"scientist": "Scientist", "scientist": "Scientist",

48
src/locales/fr/berry.ts Normal file
View File

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

View File

@ -18,6 +18,7 @@ import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers"; import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { weather } from "./weather"; import { weather } from "./weather";
import { berry } from "./berry";
export const frConfig = { export const frConfig = {
@ -43,5 +44,6 @@ export const frConfig = {
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
weather: weather, weather: weather,
berry: berry,
} }

View File

@ -52,7 +52,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
description: "Double les chances de tomber sur un combat double pendant {{battleCount}} combats", description: "Double les chances de tomber sur un combat double pendant {{battleCount}} combats",
}, },
"TempBattleStatBoosterModifierType": { "TempBattleStatBoosterModifierType": {
description: "Augmente d1 cran {{tempBattleStatName}} pour tout léquipe pendant 5 combats", description: "Augmente d1 cran {{tempBattleStatName}} pour toute léquipe pendant 5 combats",
}, },
"AttackTypeBoosterModifierType": { "AttackTypeBoosterModifierType": {
description: "Augmente de 20% la puissance des capacités de type {{moveType}} dun Pokémon", description: "Augmente de 20% la puissance des capacités de type {{moveType}} dun Pokémon",
@ -129,7 +129,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
"RARER_CANDY": { name: "Hyper Bonbon" }, "RARER_CANDY": { name: "Hyper Bonbon" },
"MEGA_BRACELET": { name: "Méga-Bracelet", description: "Débloque les Méga-Gemmes" }, "MEGA_BRACELET": { name: "Méga-Bracelet", description: "Débloque les Méga-Gemmes" },
"DYNAMAX_BAND": { name: "Poignet Dynamax", description: "Débloque les Maxi Champis" }, "DYNAMAX_BAND": { name: "Poignet Dynamax", description: "Débloque le Dynamax" },
"TERA_ORB": { name: "Orbe Téracristal", description: "Débloque les Téra-Éclats" }, "TERA_ORB": { name: "Orbe Téracristal", description: "Débloque les Téra-Éclats" },
"MAP": { name: "Carte", description: "Vous permet de choisir votre destination à un croisement" }, "MAP": { name: "Carte", description: "Vous permet de choisir votre destination à un croisement" },
@ -264,7 +264,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
"fairy_feather": "Plume Enchantée", "fairy_feather": "Plume Enchantée",
}, },
BaseStatBoosterItem: { BaseStatBoosterItem: {
"hp_up": "PP Plus", "hp_up": "PV Plus",
"protein": "Protéine", "protein": "Protéine",
"iron": "Fer", "iron": "Fer",
"calcium": "Calcium", "calcium": "Calcium",

View File

@ -44,8 +44,8 @@ export const trainerClasses: SimpleTranslationEntries = {
"depot_agent": "Cheminot", "depot_agent": "Cheminot",
"doctor": "Docteur", "doctor": "Docteur",
"doctor_female": "Docteure", "doctor_female": "Docteure",
"fishermen": "Pêcheur", "fisherman": "Pêcheur",
"fishermen_female": "Pêcheuse", "fisherman_female": "Pêcheuse",
"gentleman": "Gentleman", "gentleman": "Gentleman",
"guitarist": "Guitariste", "guitarist": "Guitariste",
"guitarist_female": "Guitariste", "guitarist_female": "Guitariste",
@ -60,16 +60,16 @@ export const trainerClasses: SimpleTranslationEntries = {
"linebacker": "Quaterback", "linebacker": "Quaterback",
"maid": "Gouvernante", "maid": "Gouvernante",
"madame": "Mondaine", "madame": "Mondaine",
"musican": "Musicien",
"medical_team": "Médecins", "medical_team": "Médecins",
"musician": "Musicien",
"hex_maniac": "Mystimaniac", "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", "pokefan_family": "Couple de Pokéfans",
"preschooler": "Petit", "preschooler": "Petit",
"preschooler_female": "Petite", "preschooler_female": "Petite",
"preschoolers": "Petits", "preschoolers": "Petits",
@ -80,8 +80,12 @@ export const trainerClasses: SimpleTranslationEntries = {
"pokémon_rangers": "Pokémon Rangers", "pokémon_rangers": "Pokémon Rangers",
"ranger": "Ranger", "ranger": "Ranger",
"restaurant_staff": "Serveurs", "restaurant_staff": "Serveurs",
"rich_boy": "Richard", "rich": "Rich",
"rich_female": "Mondaine",
"rich_boy": "Gentleman",
"rich_couple": "Couple de Bourgeois", "rich_couple": "Couple de Bourgeois",
"rich_kid": "Richard",
"rich_kid_female": "Mademoiselle",
"rich_kids": "Richards", "rich_kids": "Richards",
"roughneck": "Loubard", "roughneck": "Loubard",
"scientist": "Scientifique", "scientist": "Scientifique",

48
src/locales/it/berry.ts Normal file
View File

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

View File

@ -18,6 +18,7 @@ import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers"; import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { weather } from "./weather"; import { weather } from "./weather";
import { berry } from "./berry";
export const itConfig = { export const itConfig = {
@ -43,4 +44,5 @@ export const itConfig = {
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
weather: weather, weather: weather,
berry: berry,
} }

View File

@ -44,8 +44,8 @@ export const trainerClasses: SimpleTranslationEntries = {
"depot_agent": "Depot Agent", "depot_agent": "Depot Agent",
"doctor": "Doctor", "doctor": "Doctor",
"doctor_female": "Doctor", "doctor_female": "Doctor",
"fishermen": "Fishermen", "fisherman": "Fisherman",
"fishermen_female": "Fishermen", "fisherman_female": "Fisherman",
"gentleman": "Gentleman", "gentleman": "Gentleman",
"guitarist": "Guitarist", "guitarist": "Guitarist",
"guitarist_female": "Guitarist", "guitarist_female": "Guitarist",
@ -61,15 +61,15 @@ export const trainerClasses: SimpleTranslationEntries = {
"maid": "Maid", "maid": "Maid",
"madame": "Madame", "madame": "Madame",
"medical_team": "Medical Team", "medical_team": "Medical Team",
"musican": "Musician", "musician": "Musician",
"hex_maniac": "Hex Maniac", "hex_maniac": "Hex Maniac",
"nurse": "Nurse", "nurse": "Nurse",
"nursery_aide": "Nursery Aide", "nursery_aide": "Nursery Aide",
"officer": "Officer", "officer": "Officer",
"parasol_lady": "Parasol Lady", "parasol_lady": "Parasol Lady",
"pilot": "Pilot", "pilot": "Pilot",
"poké_fan": "Poké Fan", "pokefan": "Poké Fan",
"poké_fan_family": "Poké Fan Family", "pokefan_family": "Poké Fan Family",
"preschooler": "Preschooler", "preschooler": "Preschooler",
"preschooler_female": "Preschooler", "preschooler_female": "Preschooler",
"preschoolers": "Preschoolers", "preschoolers": "Preschoolers",
@ -80,8 +80,12 @@ export const trainerClasses: SimpleTranslationEntries = {
"pokémon_rangers": "Pokémon Ranger", "pokémon_rangers": "Pokémon Ranger",
"ranger": "Ranger", "ranger": "Ranger",
"restaurant_staff": "Restaurant Staff", "restaurant_staff": "Restaurant Staff",
"rich": "Rich",
"rich_female": "Rich",
"rich_boy": "Rich Boy", "rich_boy": "Rich Boy",
"rich_couple": "Rich Couple", "rich_couple": "Rich Couple",
"rich_kid": "Rich Kid",
"rich_kid_female": "Rich Kid",
"rich_kids": "Rich Kids", "rich_kids": "Rich Kids",
"roughneck": "Roughneck", "roughneck": "Roughneck",
"scientist": "Scientist", "scientist": "Scientist",

View File

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

View File

@ -14,6 +14,7 @@ import { pokemonStat } from "./pokemon-stat";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { weather } from "./weather"; import { weather } from "./weather";
import { berry } from "./berry";
export const ptBrConfig = { export const ptBrConfig = {
@ -33,4 +34,5 @@ export const ptBrConfig = {
growth: growth, growth: growth,
weather: weather, weather: weather,
modifierType: modifierType, modifierType: modifierType,
berry: berry,
} }

View File

@ -44,8 +44,8 @@ export const trainerClasses: SimpleTranslationEntries = {
"depot_agent": "Ferroviário", "depot_agent": "Ferroviário",
"doctor": "Doutor", "doctor": "Doutor",
"doctor_female": "Doutora", "doctor_female": "Doutora",
"fishermen": "Pescador", "fisherman": "Pescador",
"fishermen_female": "Pescadora", "fisherman_female": "Pescadora",
"gentleman": "Gentleman", "gentleman": "Gentleman",
"guitarist": "Guitarrista", "guitarist": "Guitarrista",
"guitarist_female": "Guitarrista", "guitarist_female": "Guitarrista",
@ -60,16 +60,16 @@ export const trainerClasses: SimpleTranslationEntries = {
"linebacker": "Zagueiro", "linebacker": "Zagueiro",
"maid": "Doméstica", "maid": "Doméstica",
"madame": "Madame", "madame": "Madame",
"musican": "Músico",
"medical_team": "Medical Team", "medical_team": "Medical Team",
"musician": "Músico",
"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", "pokefan_family": "Poké Fan Family",
"preschooler": "Menino do Prezinho", "preschooler": "Menino do Prezinho",
"preschooler_female": "Menina do Prezinho", "preschooler_female": "Menina do Prezinho",
"preschoolers": "Preschoolers", "preschoolers": "Preschoolers",
@ -80,8 +80,12 @@ export const trainerClasses: SimpleTranslationEntries = {
"pokémon_rangers": "Pokémon Ranger", "pokémon_rangers": "Pokémon Ranger",
"ranger": "Guarda", "ranger": "Guarda",
"restaurant_staff": "Restaurant Staff", "restaurant_staff": "Restaurant Staff",
"rich": "Rich",
"rich_female": "Rich",
"rich_boy": "Rich Boy", "rich_boy": "Rich Boy",
"rich_couple": "Rich Couple", "rich_couple": "Rich Couple",
"rich_kid": "Rich Kid",
"rich_kid_female": "Rich Kid",
"rich_kids": "Rich Kids", "rich_kids": "Rich Kids",
"roughneck": "Arruaceiro", "roughneck": "Arruaceiro",
"scientist": "Cientista", "scientist": "Cientista",

View File

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

View File

@ -18,6 +18,7 @@ import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers"; import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { weather } from "./weather"; import { weather } from "./weather";
import { berry } from "./berry";
export const zhCnConfig = { export const zhCnConfig = {
@ -43,4 +44,5 @@ export const zhCnConfig = {
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
weather: weather, weather: weather,
berry: berry,
} }

View File

@ -2,239 +2,301 @@ import {SimpleTranslationEntries} from "#app/plugins/i18n";
// Titles of special trainers like gym leaders, elite four, and the champion // Titles of special trainers like gym leaders, elite four, and the champion
export const titles: SimpleTranslationEntries = { export const titles: SimpleTranslationEntries = {
"elite_four": "Elite Four", "elite_four": "四天王",
"gym_leader": "Gym Leader", "gym_leader": "道馆馆主",
"gym_leader_female": "Gym Leader", "gym_leader_female": "道馆馆主",
"champion": "Champion", "champion": "冠军",
"rival": "Rival", "rival": "劲敌",
"professor": "Professor", "professor": "博士",
"frontier_brain": "Frontier Brain", "frontier_brain": "开拓头脑",
// Maybe if we add the evil teams we can add "Team Rocket" and "Team Aqua" etc. here as well as "Team Rocket Boss" and "Team Aqua Admin" etc. // Maybe if we add the evil teams we can add "Team Rocket" and "Team Aqua" etc. here as well as "Team Rocket Boss" and "Team Aqua Admin" etc.
} as const; } as const;
// Titles of trainers like "Youngster" or "Lass" // Titles of trainers like "Youngster" or "Lass"
export const trainerClasses: SimpleTranslationEntries = { export const trainerClasses: SimpleTranslationEntries = {
"ace_trainer": "Ace Trainer", "ace_trainer": "精英训练家",
"ace_trainer_female": "Ace Trainer", "ace_trainer_female": "精英训练家",
"ace_duo": "Ace Duo", "ace_duo": "精英组合",
"artist": "Artist", "artist": "艺术家",
"artist_female": "Artist", "artist_female": "艺术家",
"backers": "Backers", "backers": "啦啦队",
"backpacker": "Backpacker", "backpacker": "背包客",
"backpacker_female": "Backpacker", "backpacker_female": "背包客",
"backpackers": "Backpackers", "backpackers": "背包客组合",
"baker": "Baker", "baker": "面包师",
"battle_girl": "Battle Girl", "battle_girl": "对战少女",
"beauty": "Beauty", "beauty": "大姐姐",
"beginners": "Beginners", "beginners": "新人训练家组合",
"biker": "Biker", "biker": "飙车族",
"black_belt": "Black Belt", "black_belt": "空手道王",
"breeder": "Breeder", "breeder": "宝可梦培育家",
"breeder_female": "Breeder", "breeder_female": "宝可梦培育家",
"breeders": "Breeders", "breeders": "宝可梦培育家组合",
"clerk": "Clerk", "clerk": "商务人士",
"clerk_female": "Clerk", "clerk_female": "职场OL",
"colleagues": "Colleagues", "colleagues": "商务伙伴",
"crush_kin": "Crush Kin", "crush_kin": "格斗姐弟",
"cyclist": "Cyclist", "cyclist": "自行车手",
"cyclist_female": "Cyclist", "cyclist_female": "自行车手",
"cyclists": "Cyclists", "cyclists": "自行车手组合",
"dancer": "Dancer", "dancer": "舞者",
"dancer_female": "Dancer", "dancer_female": "舞者",
"depot_agent": "Depot Agent", "depot_agent": "铁路员工",
"doctor": "Doctor", "doctor": "医生",
"doctor_female": "Doctor", "doctor_female": "医生",
"fishermen": "Fishermen", "fisherman": "垂钓者",
"fishermen_female": "Fishermen", "fisherman_female": "垂钓者",
"gentleman": "Gentleman", "gentleman": "绅士",
"guitarist": "Guitarist", "guitarist": "吉他手",
"guitarist_female": "Guitarist", "guitarist_female": "吉他手",
"harlequin": "Harlequin", "harlequin": "滑稽演员",
"hiker": "Hiker", "hiker": "登山男",
"hooligans": "Hooligans", "hooligans": "坏组合",
"hoopster": "Hoopster", "hoopster": "篮球选手",
"infielder": "Infielder", "infielder": "棒球选手",
"janitor": "Janitor", "janitor": "清洁员",
"lady": "Lady", "lady": "千金小姐",
"lass": "Lass", "lass": "迷你裙",
"linebacker": "Linebacker", "linebacker": "美式橄榄球选手",
"maid": "Maid", "maid": "女仆",
"madame": "Madame", "madame": "女士",
"medical_team": "Medical Team", "medical_team": "医疗团队",
"musican": "Musician", "musician": "音乐家",
"hex_maniac": "Hex Maniac", "hex_maniac": "灵异迷",
"nurse": "Nurse", "nurse": "护士",
"nursery_aide": "Nursery Aide", "nursery_aide": "幼儿园老师",
"officer": "Officer", "officer": "警察",
"parasol_lady": "Parasol Lady", "parasol_lady": "阳伞姐姐",
"pilot": "Pilot", "pilot": "飞行员",
"poké_fan": "Poké Fan", "pokefan": "发烧友俱乐部",
"poké_fan_family": "Poké Fan Family", "pokefan_family": "同好夫妇",
"preschooler": "Preschooler", "preschooler": "幼儿园小朋友",
"preschooler_female": "Preschooler", "preschooler_female": "幼儿园小朋友",
"preschoolers": "Preschoolers", "preschoolers": "幼儿园小朋友组合",
"psychic": "Psychic", "psychic": "超能力者",
"psychic_female": "Psychic", "psychic_female": "超能力者",
"psychics": "Psychics", "psychics": "超能力者组合",
"pokémon_ranger": "Pokémon Ranger", "pokémon_ranger": "宝可梦巡护员",
"pokémon_rangers": "Pokémon Ranger", "pokémon_rangers": "宝可梦巡护员组合",
"ranger": "Ranger", "ranger": "巡护员",
"restaurant_staff": "Restaurant Staff", "restaurant_staff": "服务生组合",
"rich_boy": "Rich Boy", "rich": "Rich",
"rich_couple": "Rich Couple", "rich_female": "Rich",
"rich_kids": "Rich Kids", "rich_boy": "富家少爷",
"roughneck": "Roughneck", "rich_couple": "富豪夫妇",
"scientist": "Scientist", "rich_kid": "Rich Kid",
"scientist_female": "Scientist", "rich_kid_female": "Rich Kid",
"scientists": "Scientists", "rich_kids": "富二代组合",
"smasher": "Smasher", "roughneck": "光头男",
"snow_worker": "Snow Worker", "scientist": "研究员",
"snow_worker_female": "Snow Worker", "scientist_female": "研究员",
"striker": "Striker", "scientists": "研究员组合",
"school_kid": "School Kid", "smasher": "网球选手",
"school_kid_female": "School Kid", "snow_worker": "雪地工人",
"school_kids": "School Kids", "snow_worker_female": "雪地工人",
"swimmer": "Swimmer", "striker": "足球选手",
"swimmer_female": "Swimmer", "school_kid": "补习班学生",
"swimmers": "Swimmers", "school_kid_female": "补习班学生",
"twins": "Twins", "school_kids": "补习班学生组合",
"veteran": "Veteran", "swimmer": "泳裤小伙子",
"veteran_female": "Veteran", "swimmer_female": "比基尼大姐姐",
"veteran_duo": "Veteran Duo", "swimmers": "泳装情侣",
"waiter": "Waiter", "twins": "双胞胎",
"waitress": "Waitress", "veteran": "资深训练家",
"worker": "Worker", "veteran_female": "资深训练家",
"worker_female": "Worker", "veteran_duo": "资深组合",
"workers": "Workers", "waiter": "服务生",
"youngster": "Youngster" "waitress": "女服务生",
"worker": "工人",
"worker_female": "工人",
"workers": "工人组合",
"youngster": "短裤小子"
} as const; } as const;
// Names of special trainers like gym leaders, elite four, and the champion // Names of special trainers like gym leaders, elite four, and the champion
export const trainerNames: SimpleTranslationEntries = { export const trainerNames: SimpleTranslationEntries = {
"brock": "Brock", // ---- 馆主 Gym leader ----
"misty": "Misty", // 关都地区 Kanto Region
"lt_surge": "Lt Surge", "brock": "小刚",
"erika": "Erika", "misty": "小霞",
"janine": "Janine", "lt_surge": "马志士",
"sabrina": "Sabrina", "erika": "莉佳",
"blaine": "Blaine", "janine": "阿杏",
"giovanni": "Giovanni", "sabrina": "娜姿",
"falkner": "Falkner", "blaine": "夏伯",
"bugsy": "Bugsy", "giovanni": "坂木",
"whitney": "Whitney",
"morty": "Morty", // 城都地区 Johto Region
"chuck": "Chuck", "falkner": "阿速",
"jasmine": "Jasmine", "bugsy": "阿笔",
"pryce": "Pryce", "whitney": "小茜",
"clair": "Clair", "morty": "松叶",
"roxanne": "Roxanne", "chuck": "阿四",
"brawly": "Brawly", "jasmine": "阿蜜",
"wattson": "Wattson", "pryce": "柳伯",
"flannery": "Flannery", "clair": "小椿",
"norman": "Norman",
"winona": "Winona", // 丰缘地区 Hoenn Region
"tate": "Tate", "roxanne": "杜娟",
"liza": "Liza", "brawly": "藤树",
"juan": "Juan", "wattson": "铁旋",
"roark": "Roark", "flannery": "亚莎",
"gardenia": "Gardenia", "norman": "千里",
"maylene": "Maylene", "winona": "娜琪",
"crasher_wake": "Crasher Wake", "tate": "小枫",
"fantina": "Fantina", "liza": "小南",
"byron": "Byron", "juan": "亚当",
"candice": "Candice",
"volkner": "Volkner", // 神奥地区 Sinnoh Region
"cilan": "Cilan", "roark": "瓢太",
"chili": "Chili", "gardenia": "菜种",
"cress": "Cress", "maylene": "阿李",
"cheren": "Cheren", "crasher_wake": "吉宪",
"lenora": "Lenora", "fantina": "梅丽莎",
"roxie": "Roxie", "byron": "东瓜",
"burgh": "Burgh", "candice": "小菘",
"elesa": "Elesa", "volkner": "电次",
"clay": "Clay",
"skyla": "Skyla", // 合众地区 Unova Region
"brycen": "Brycen", "cilan": "天桐",
"drayden": "Drayden", "chili": "伯特",
"marlon": "Marlon", "cress": "寇恩",
"viola": "Viola", "cheren": "黑连",
"grant": "Grant", "lenora": "芦荟",
"korrina": "Korrina", "roxie": "霍米加",
"ramos": "Ramos", "burgh": "亚堤",
"clemont": "Clemont", "elesa": "小菊儿",
"valerie": "Valerie", "clay": "菊老大",
"olympia": "Olympia", "skyla": "风露",
"wulfric": "Wulfric", "brycen": "哈奇库",
"milo": "Milo", "drayden": "夏卡",
"nessa": "Nessa", "marlon": "西子伊",
"kabu": "Kabu",
"bea": "Bea", // 卡洛斯地区 Kalos Region
"allister": "Allister", "viola": "紫罗兰",
"opal": "Opal", "grant": "查克洛",
"bede": "Bede", "korrina": "可尔妮",
"gordie": "Gordie", "ramos": "福爷",
"melony": "Melony", "clemont": "希特隆",
"piers": "Piers", "valerie": "玛绣",
"marnie": "Marnie", "olympia": "葛吉花",
"raihan": "Raihan", "wulfric": "得抚",
"katy": "Katy",
"brassius": "Brassius", // 伽勒尔地区 Galar Region
"iono": "Iono", "milo": "亚洛",
"kofu": "Kofu", "nessa": "露璃娜",
"larry": "Larry", "kabu": "卡芜",
"ryme": "Ryme", "bea": "彩豆",
"tulip": "Tulip", "allister": "欧尼奥",
"grusha": "Grusha", "opal": "波普菈",
"lorelei": "Lorelei", "bede": "彼特",
"bruno": "Bruno", "gordie": "玛瓜",
"agatha": "Agatha", "melony": "美蓉",
"lance": "Lance", "piers": "聂梓",
"will": "Will", "marnie": "玛俐",
"koga": "Koga", "raihan": "奇巴纳",
"karen": "Karen",
"sidney": "Sidney", // 帕底亚地区 Paldea Region
"phoebe": "Phoebe", "katy": "阿枫",
"glacia": "Glacia", "brassius": "寇沙",
"drake": "Drake", "iono": "奇树",
"aaron": "Aaron", "kofu": "海岱",
"bertha": "Bertha", "larry": "青木",
"flint": "Flint", "ryme": "莱姆",
"lucian": "Lucian", "tulip": "莉普",
"shauntal": "Shauntal", "grusha": "古鲁夏",
"marshal": "Marshal",
"grimsley": "Grimsley", // ---- 四天王 Elite Four ----
"caitlin": "Caitlin", // 关都地区 Kanto Region
"malva": "Malva", "lorelei": "科拿",
"siebold": "Siebold", "bruno": "希巴",
"wikstrom": "Wikstrom", "agatha": "菊子",
"drasna": "Drasna", "lance": "阿渡",
"hala": "Hala",
"molayne": "Molayne", // 城都地区 Johto Region
"olivia": "Olivia", "will": "一树",
"acerola": "Acerola", "koga": "阿桔",
"kahili": "Kahili", "karen": "梨花",
"rika": "Rika",
"poppy": "Poppy", // 丰都地区 Hoenn Region
"larry_elite": "Larry", // Does this really need to be an extra entry? (it is in trainer-type.ts so I added it here) "sidney": "花月",
"hassel": "Hassel", "phoebe": "芙蓉",
"crispin": "Crispin", "glacia": "波妮",
"amarys": "Amarys", "drake": "源治",
"lacey": "Lacey",
"drayton": "Drayton", // 神奥地区 Sinnoh Region
"blue": "Blue", "aaron": "阿柳",
"red": "Red", "bertha": "菊野",
"lance_champion": "Lance", // Does this really need to be an extra entry? (it is in trainer-type.ts so I added it here) "flint": "大叶",
"steven": "Steven", "lucian": "悟松",
"wallace": "Wallace",
"cynthia": "Cynthia", // 合众地区 Unova Region
"alder": "Alder", "shauntal": "婉龙",
"iris": "Iris", "marshal": "连武",
"diantha": "Diantha", "grimsley": "越橘",
"hau": "Hau", "caitlin": "嘉德丽雅",
"geeta": "Geeta",
"nemona": "Nemona", // 卡洛斯地区 Kalos Region
"kieran": "Kieran", "malva": "帕琦拉",
"leon": "Leon", "siebold": "志米",
"rival": "Finn", "wikstrom": "雁铠",
"rival_female": "Ivy", "drasna": "朵拉塞娜",
// 阿罗拉地区 Alola Region
"hala": "哈拉",
"molayne": "马睿因",
"olivia": "丽姿",
"acerola": "阿塞萝拉",
"kahili": "卡希丽",
// 帕底亚地区 Paldea Region
"rika": "辛俐",
"poppy": "波琵",
"larry_elite": "青木", // Does this really need to be an extra entry? (it is in trainer-type.ts so I added it here)
"hassel": "八朔",
// 蓝莓学院 Blueberry Academy
"crispin": "赤松",
"amarys": "纳莉",
"lacey": "紫竽",
"drayton": "杜若",
// ---- 冠军 Champion ----
// 关都地区 Kanto Region
"blue": "青绿",
"red": "赤红",
// 城都地区 Johto Region
"lance_champion": "阿渡", // Does this really need to be an extra entry? (it is in trainer-type.ts so I added it here)
// 丰缘地区 Hoenn Region
"steven": "大吾",
"wallace": "米可利",
// 神奥地区 Sinnoh Region
"cynthia": "竹兰",
// 合众地区 Unova Region
"alder": "阿戴克",
"iris": "艾莉丝",
// 卡洛斯地区 Kalos Region
"diantha": "卡露妮",
// 阿罗拉地区 Alola Region
"hau": "哈乌",
// 伽勒尔地区 Galar Region
"leon": "丹帝",
// 帕底亚地区 paldea Region
"geeta": "也慈",
"nemona": "妮莫",
// 蓝莓学院 Blueberry academy
"kieran": "乌栗",
// 劲敌 rival
"rival": "芬恩",
"rival_female": "艾薇",
} as const; } as const;

View File

@ -60,6 +60,8 @@ import i18next from './plugins/i18n';
import { Abilities } from "./data/enums/abilities"; import { Abilities } from "./data/enums/abilities";
import * as Overrides from './overrides'; import * as Overrides from './overrides';
import { TextStyle, addTextObject } from "./ui/text"; import { TextStyle, addTextObject } from "./ui/text";
import { Type } from "./data/type";
export class LoginPhase extends Phase { export class LoginPhase extends Phase {
private showText: boolean; private showText: boolean;
@ -1816,7 +1818,14 @@ export class CommandPhase extends FieldPhase {
if (!isSwitch && this.fieldIndex) if (!isSwitch && this.fieldIndex)
this.scene.currentBattle.turnCommands[this.fieldIndex - 1].skip = true; this.scene.currentBattle.turnCommands[this.fieldIndex - 1].skip = true;
} else if (trapTag) { } else if (trapTag) {
if (!isSwitch) { if(trapTag.sourceMove === Moves.INGRAIN && this.scene.getPokemonById(trapTag.sourceId).isOfType(Type.GHOST)) {
success = true;
this.scene.currentBattle.turnCommands[this.fieldIndex] = isSwitch
? { command: Command.POKEMON, cursor: cursor, args: args }
: { command: Command.RUN };
break;
}
if (!isSwitch) {
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
this.scene.ui.setMode(Mode.MESSAGE); this.scene.ui.setMode(Mode.MESSAGE);
} }
@ -3654,7 +3663,7 @@ export class GameOverPhase extends BattlePhase {
this.end(); this.end();
} }
if (this.victory) { if (this.victory && this.scene.gameMode.isClassic) {
this.scene.ui.fadeIn(500).then(() => { this.scene.ui.fadeIn(500).then(() => {
this.scene.charSprite.showCharacter(`rival_${this.scene.gameData.gender === PlayerGender.FEMALE ? 'm' : 'f'}`, getCharVariantFromDialogue(miscDialogue.ending[this.scene.gameData.gender === PlayerGender.FEMALE ? 0 : 1])).then(() => { this.scene.charSprite.showCharacter(`rival_${this.scene.gameData.gender === PlayerGender.FEMALE ? 'm' : 'f'}`, getCharVariantFromDialogue(miscDialogue.ending[this.scene.gameData.gender === PlayerGender.FEMALE ? 0 : 1])).then(() => {
this.scene.ui.showDialogue(miscDialogue.ending[this.scene.gameData.gender === PlayerGender.FEMALE ? 0 : 1], this.scene.gameData.gender === PlayerGender.FEMALE ? trainerConfigs[TrainerType.RIVAL].name : trainerConfigs[TrainerType.RIVAL].nameFemale, null, () => { this.scene.ui.showDialogue(miscDialogue.ending[this.scene.gameData.gender === PlayerGender.FEMALE ? 0 : 1], this.scene.gameData.gender === PlayerGender.FEMALE ? trainerConfigs[TrainerType.RIVAL].name : trainerConfigs[TrainerType.RIVAL].nameFemale, null, () => {

View File

@ -46,6 +46,15 @@ export interface ModifierTypeTranslationEntries {
TeraType: SimpleTranslationEntries, TeraType: SimpleTranslationEntries,
} }
export interface BerryTranslationEntry {
name: string,
effect: string
}
export interface BerryTranslationEntries {
[key: string]: BerryTranslationEntry
}
export interface Localizable { export interface Localizable {
localize(): void; localize(): void;
} }
@ -139,6 +148,7 @@ declare module 'i18next' {
egg: SimpleTranslationEntries; egg: SimpleTranslationEntries;
weather: SimpleTranslationEntries; weather: SimpleTranslationEntries;
modifierType: ModifierTypeTranslationEntries; modifierType: ModifierTypeTranslationEntries;
berry: BerryTranslationEntries;
}; };
} }
} }