idk how to work with git
This commit is contained in:
0zuzu 2024-05-18 00:35:35 +01:00
commit abf46f5b96
82 changed files with 2180 additions and 1387 deletions

BIN
public/images/cg/end_f.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
public/images/cg/end_m.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -1013,6 +1013,7 @@ export default class BattleScene extends SceneBase {
case Species.FURFROU: case Species.FURFROU:
case Species.ORICORIO: case Species.ORICORIO:
case Species.MAGEARNA: case Species.MAGEARNA:
case Species.ZARUDE:
case Species.SQUAWKABILLY: case Species.SQUAWKABILLY:
case Species.TATSUGIRI: case Species.TATSUGIRI:
case Species.PALDEA_TAUROS: case Species.PALDEA_TAUROS:

View File

@ -14,7 +14,7 @@ import { BattlerTagType } from "./enums/battler-tag-type";
import { TerrainType } from "./terrain"; import { TerrainType } from "./terrain";
import { WeatherType } from "./weather"; import { WeatherType } from "./weather";
import { BattleStat } from "./battle-stat"; import { BattleStat } from "./battle-stat";
import { allAbilities } from "./ability" import { allAbilities } from "./ability";
export enum BattlerTagLapseType { export enum BattlerTagLapseType {
FAINT, FAINT,
@ -117,7 +117,10 @@ 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);
return !isTrapped && !isGhost;
} }
onAdd(pokemon: Pokemon): void { onAdd(pokemon: Pokemon): void {
@ -498,11 +501,26 @@ export class HelpingHandTag extends BattlerTag {
} }
} }
/**
* Applies the Ingrain tag to a pokemon
* @extends TrappedTag
*/
export class IngrainTag extends TrappedTag { export class IngrainTag extends TrappedTag {
constructor(sourceId: integer) { constructor(sourceId: integer) {
super(BattlerTagType.INGRAIN, BattlerTagLapseType.TURN_END, 1, Moves.INGRAIN, sourceId); super(BattlerTagType.INGRAIN, BattlerTagLapseType.TURN_END, 1, Moves.INGRAIN, sourceId);
} }
/**
* Check if the Ingrain tag can be added to the pokemon
* @param pokemon {@linkcode Pokemon} The pokemon to check if the tag can be added to
* @returns boolean True if the tag can be added, false otherwise
*/
canAdd(pokemon: Pokemon): boolean {
const isTrapped = pokemon.getTag(BattlerTagType.TRAPPED);
return !isTrapped;
}
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType);

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

@ -909,7 +909,8 @@ export const trainerTypeDialogue = {
}, },
[TrainerType.MORTY]: { [TrainerType.MORTY]: {
encounter: [ encounter: [
`With a little more, I could see a future in which I meet the legendary Pokémon. You're going to help me reach that level!`, `With a little more, I could see a future in which I meet the legendary Pokémon.
$You're going to help me reach that level!`,
`It's said that a rainbow-hued Pokémon will come down to appear before a truly powerful Trainer. `It's said that a rainbow-hued Pokémon will come down to appear before a truly powerful Trainer.
$I believed that tale, so I have secretly trained here all my life. As a result, I can now see what others cannot. $I believed that tale, so I have secretly trained here all my life. As a result, I can now see what others cannot.
$I see a shadow of the person who will make the Pokémon appear. $I see a shadow of the person who will make the Pokémon appear.
@ -924,7 +925,8 @@ export const trainerTypeDialogue = {
`I see… Your journey has taken you to far-away places and you have witnessed much more than I. `I see… Your journey has taken you to far-away places and you have witnessed much more than I.
$I envy you for that`, $I envy you for that`,
`How is this possible…`, `How is this possible…`,
`I don't think our potentials are so different. But you seem to have something more than that… So be it.`, `I don't think our potentials are so different.
$But you seem to have something more than that So be it.`,
`Guess I need more training.`, `Guess I need more training.`,
`That's a shame.` `That's a shame.`
], ],
@ -2290,6 +2292,25 @@ export const battleSpecDialogue = {
} }
}; };
export const miscDialogue = {
ending: [
`@c{smile}Oh? You won?@d{96} @c{smile_eclosed}I guess I should've known.\nBut, you're back now.
$@c{smile}It's over.@d{64} You ended the loop.
$@c{serious_smile_fists}You fulfilled your dream too, didn't you?\nYou didn't lose even once.
$@c{neutral}I'm the only one who'll remember what you did.@d{96}\nI guess that's okay, isn't it?
$@c{serious_smile_fists}Your legend will always live on in our hearts.
$@c{smile_eclosed}Anyway, I've had about enough of this place, haven't you? Let's head home.
$@c{serious_smile_fists}Maybe when we get back, we can have another battle?\nIf you're up to it.`,
`@c{shock}You're back?@d{32} Does that mean…@d{96} you won?!\n@c{smile_ehalf}I should have known you had it in you.
$@c{smile_eclosed}Of course I always had that feeling.\n@c{smile}It's over now, right? You ended the loop.
$@c{smile_ehalf}You fulfilled your dream too, didn't you?\nYou didn't lose even once.
$I'll be the only one to remember what you did.\n@c{angry_mopen}I'll try not to forget!
$@c{smile_wave_wink}Just kidding!@d{64} @c{smile}I'd never forget.@d{32}\nYour legend will live on in our hearts.
$@c{smile_wave}Anyway,@d{64} it's getting late…@d{96} I think?\nIt's hard to tell in this place.
$Let's go home. @c{smile_wave_wink}Maybe tomorrow, we can have another battle, for old time's sake?`
]
}
export function getCharVariantFromDialogue(message: string): string { export function getCharVariantFromDialogue(message: string): string {
const variantMatch = /@c\{(.*?)\}/.exec(message); const variantMatch = /@c\{(.*?)\}/.exec(message);
if (variantMatch) if (variantMatch)

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

@ -13,22 +13,22 @@ export function getStatName(stat: Stat, shorten: boolean = false) {
let ret: string; let ret: string;
switch (stat) { switch (stat) {
case Stat.HP: case Stat.HP:
ret = !shorten ? i18next.t('pokemonStat:HP') : i18next.t('pokemonStat:HPshortened'); ret = !shorten ? i18next.t('pokemonInfo:Stat.HP') : i18next.t('pokemonInfo:Stat.HPshortened');
break; break;
case Stat.ATK: case Stat.ATK:
ret = !shorten ? i18next.t('pokemonStat:ATK') : i18next.t('pokemonStat:ATKshortened'); ret = !shorten ? i18next.t('pokemonInfo:Stat.ATK') : i18next.t('pokemonInfo:Stat.ATKshortened');
break; break;
case Stat.DEF: case Stat.DEF:
ret = !shorten ? i18next.t('pokemonStat:DEF') : i18next.t('pokemonStat:DEFshortened'); ret = !shorten ? i18next.t('pokemonInfo:Stat.DEF') : i18next.t('pokemonInfo:Stat.DEFshortened');
break; break;
case Stat.SPATK: case Stat.SPATK:
ret = !shorten ? i18next.t('pokemonStat:SPATK') : i18next.t('pokemonStat:SPATKshortened'); ret = !shorten ? i18next.t('pokemonInfo:Stat.SPATK') : i18next.t('pokemonInfo:Stat.SPATKshortened');
break; break;
case Stat.SPDEF: case Stat.SPDEF:
ret = !shorten ? i18next.t('pokemonStat:SPDEF') : i18next.t('pokemonStat:SPDEFshortened'); ret = !shorten ? i18next.t('pokemonInfo:Stat.SPDEF') : i18next.t('pokemonInfo:Stat.SPDEFshortened');
break; break;
case Stat.SPD: case Stat.SPD:
ret = !shorten ? i18next.t('pokemonStat:SPD') : i18next.t('pokemonStat:SPDshortened'); ret = !shorten ? i18next.t('pokemonInfo:Stat.SPD') : i18next.t('pokemonInfo:Stat.SPDshortened');
break; break;
} }
return ret; return ret;

View File

@ -8,14 +8,14 @@ export function getSplashMessages(): string[] {
const splashMessages = Array(10).fill(getBattleCountSplashMessage()); const splashMessages = Array(10).fill(getBattleCountSplashMessage());
splashMessages.push(...[ splashMessages.push(...[
i18next.t('splashMessages:joinTheDiscord'), i18next.t('splashMessages:joinTheDiscord'),
i18next.t('splashMessages:infiniteLevel'), i18next.t('splashMessages:infiniteLevels'),
i18next.t('splashMessages:everythingStacks'), i18next.t('splashMessages:everythingStacks'),
i18next.t('splashMessages:optionalSaveScumming'), i18next.t('splashMessages:optionalSaveScumming'),
i18next.t('splashMessages:biomes'), i18next.t('splashMessages:biomes'),
i18next.t('splashMessages:openSource'), i18next.t('splashMessages:openSource'),
i18next.t('splashMessages:playWith5xSpeed'), i18next.t('splashMessages:playWithSpeed'),
i18next.t('splashMessages:liveBugTesting'), i18next.t('splashMessages:liveBugTesting'),
i18next.t('splashMessages:heavyRoR2Influence'), i18next.t('splashMessages:heavyInfluence'),
i18next.t('splashMessages:pokemonRiskAndPokemonRain'), i18next.t('splashMessages:pokemonRiskAndPokemonRain'),
i18next.t('splashMessages:nowWithMoreSalt'), i18next.t('splashMessages:nowWithMoreSalt'),
i18next.t('splashMessages:infiniteFusionAtHome'), i18next.t('splashMessages:infiniteFusionAtHome'),

View File

@ -1,5 +1,5 @@
import { Biome } from "./enums/biome"; import { Biome } from "./enums/biome";
import { getPokemonMessage } from "../messages"; import { getPokemonMessage, getPokemonPrefix } from "../messages";
import Pokemon from "../field/pokemon"; import Pokemon from "../field/pokemon";
import { Type } from "./type"; import { Type } from "./type";
import Move, { AttackMove } from "./move"; import Move, { AttackMove } from "./move";
@ -172,9 +172,9 @@ export function getWeatherLapseMessage(weatherType: WeatherType): string {
export function getWeatherDamageMessage(weatherType: WeatherType, pokemon: Pokemon): string { export function getWeatherDamageMessage(weatherType: WeatherType, pokemon: Pokemon): string {
switch (weatherType) { switch (weatherType) {
case WeatherType.SANDSTORM: case WeatherType.SANDSTORM:
return getPokemonMessage(pokemon, ' is buffeted\nby the sandstorm!'); return i18next.t('weather:sandstormDamageMessage', {pokemonPrefix: getPokemonPrefix(pokemon), pokemonName: pokemon.name});
case WeatherType.HAIL: case WeatherType.HAIL:
return getPokemonMessage(pokemon, ' is pelted\nby the hail!'); return i18next.t('weather:hailDamageMessage', {pokemonPrefix: getPokemonPrefix(pokemon), pokemonName: pokemon.name});
} }
return null; return null;

View File

@ -1096,8 +1096,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
let shinyThreshold = new Utils.IntegerHolder(32); let shinyThreshold = new Utils.IntegerHolder(32);
if (thresholdOverride === undefined) { if (thresholdOverride === undefined) {
if (!this.hasTrainer()) if (!this.hasTrainer()) {
if (new Date() < new Date('2024-05-21'))
shinyThreshold.value *= 3;
this.scene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); this.scene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold);
}
} else } else
shinyThreshold.value = thresholdOverride; shinyThreshold.value = thresholdOverride;

View File

@ -370,6 +370,34 @@ export default class Trainer extends Phaser.GameObjects.Container {
this.getTintSprites().map((tintSprite, i) => tintSprite.setTexture(this.getKey(!!i)).setFrame(0)); this.getTintSprites().map((tintSprite, i) => tintSprite.setTexture(this.getKey(!!i)).setFrame(0));
} }
/**
* Attempts to animate a given set of {@linkcode Phaser.GameObjects.Sprite}
* @see {@linkcode Phaser.GameObjects.Sprite.play}
* @param sprite {@linkcode Phaser.GameObjects.Sprite} to animate
* @param tintSprite {@linkcode Phaser.GameObjects.Sprite} placed on top of the sprite to add a color tint
* @param animConfig {@linkcode Phaser.Types.Animations.PlayAnimationConfig} to pass to {@linkcode Phaser.GameObjects.Sprite.play}
* @returns true if the sprite was able to be animated
*/
tryPlaySprite(sprite: Phaser.GameObjects.Sprite, tintSprite: Phaser.GameObjects.Sprite, animConfig: Phaser.Types.Animations.PlayAnimationConfig): boolean {
// Show an error in the console if there isn't a texture loaded
if (sprite.texture.key === '__MISSING') {
console.error(`No texture found for '${animConfig.key}'!`);
return false;
}
// Don't try to play an animation when there isn't one
if (sprite.texture.frameTotal <= 1) {
console.warn(`No animation found for '${animConfig.key}'. Is this intentional?`);
return false;
}
sprite.play(animConfig);
tintSprite.play(animConfig);
return true;
}
playAnim(): void { playAnim(): void {
const trainerAnimConfig = { const trainerAnimConfig = {
key: this.getKey(), key: this.getKey(),
@ -378,16 +406,18 @@ 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); this.tryPlaySprite(sprites[0], tintSprites[0], trainerAnimConfig);
// Queue an animation for the second trainer if this is a double battle against two separate trainers
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); this.tryPlaySprite(sprites[1], tintSprites[1], partnerTrainerAnimConfig);
} }
} }

View File

@ -209,6 +209,9 @@ export class LoadingScene extends SceneBase {
this.loadImage('egg_list_bg', 'ui'); this.loadImage('egg_list_bg', 'ui');
this.loadImage('end_m', 'cg');
this.loadImage('end_f', 'cg');
for (let i = 0; i < 10; i++) { for (let i = 0; i < 10; i++) {
this.loadAtlas(`pokemon_icons_${i}`, ''); this.loadAtlas(`pokemon_icons_${i}`, '');
if (i) if (i)

View File

@ -0,0 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battleMessageUiHandler: SimpleTranslationEntries = {
"ivBest": "Sensationell",
"ivFantastic": "Fantastisch",
"ivVeryGood": "Sehr Gut",
"ivPrettyGood": "Gut",
"ivDecent": "Nicht Übel",
"ivNoGood": "Schlecht",
} as const;

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: "Tsitrubeere",
effect: "Stellt 25% der KP wieder her, wenn die KP unter 50% sind"
},
"LUM": {
name: "Prunusbeere",
effect: "Heilt jede nichtflüchtige Statusveränderung und Verwirrung"
},
"ENIGMA": {
name: "Enigmabeere",
effect: "Stellt 25% der KP wieder her, wenn der Träger von einer sehr effektiven Attacke getroffen wird",
},
"LIECHI": {
name: "Lydzibeere",
effect: "Steigert den Angriff, wenn die KP unter 25% sind"
},
"GANLON": {
name: "Linganbeere",
effect: "Steigert die Verteidigung, wenn die KP unter 25% sind"
},
"PETAYA": {
name: "Tahaybeere",
effect: "Steigert den Spezial-Angriff, wenn die KP unter 25% sind"
},
"APICOT": {
name: "Apikobeere",
effect: "Steigert die Spezial-Verteidigung, wenn die KP unter 25% sind"
},
"SALAC": {
name: "Salkabeere",
effect: "Steigert die Initiative, wenn die KP unter 25% sind"
},
"LANSAT": {
name: "Lansatbeere",
effect: "Erhöht die Volltrefferchance, wenn die KP unter 25% sind"
},
"STARF": {
name: "Krambobeere",
effect: "Erhöht eine Statuswert stark, wenn die KP unter 25% sind"
},
"LEPPA": {
name: "Jonagobeere",
effect: "Stellt 10 AP für eine Attacke wieder her, wenn deren AP auf 0 fallen"
},
} as const;

View File

@ -12,12 +12,14 @@ import { move } from "./move";
import { nature } from "./nature"; import { nature } from "./nature";
import { pokeball } from "./pokeball"; import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon"; import { pokemon } from "./pokemon";
import { pokemonStat } from "./pokemon-stat"; import { pokemonInfo } from "./pokemon-info";
import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { titles,trainerClasses,trainerNames } from "./trainers"; import { weather } from "./weather";
import { splashMessages } from "./splash-messages" import { battleMessageUiHandler } from "./battle-message-ui-handler";
import { berry } from "./berry";
export const deConfig = { export const deConfig = {
ability: ability, ability: ability,
@ -26,19 +28,22 @@ export const deConfig = {
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
egg: egg, egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
menuUiHandler: menuUiHandler, growth: growth,
menu: menu, menu: menu,
menuUiHandler: menuUiHandler,
modifierType: modifierType,
move: move, move: move,
nature: nature,
pokeball: pokeball, pokeball: pokeball,
pokemonStat: pokemonStat,
pokemon: pokemon, pokemon: pokemon,
pokemonInfo: pokemonInfo,
splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler, starterSelectUiHandler: starterSelectUiHandler,
titles: titles, titles: titles,
trainerClasses: trainerClasses, trainerClasses: trainerClasses,
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
splashMessages: splashMessages, weather: weather,
nature: nature, battleMessageUiHandler: battleMessageUiHandler,
growth: growth, berry: berry,
modifierType: modifierType, }
}

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

@ -385,26 +385,4 @@ export const modifierType: ModifierTypeTranslationEntries = {
"CHILL_DRIVE": "Gefriermodul", "CHILL_DRIVE": "Gefriermodul",
"DOUSE_DRIVE": "Aquamodul", "DOUSE_DRIVE": "Aquamodul",
}, },
TeraType: {
"UNKNOWN": "Unbekannt",
"NORMAL": "Normal",
"FIGHTING": "Kampf",
"FLYING": "Flug",
"POISON": "Gift",
"GROUND": "Boden",
"ROCK": "Gestein",
"BUG": "Käfer",
"GHOST": "Geist",
"STEEL": "Stahl",
"FIRE": "Feuer",
"WATER": "Wasser",
"GRASS": "Pflanze",
"ELECTRIC": "Elektro",
"PSYCHIC": "Psycho",
"ICE": "Eis",
"DRAGON": "Drache",
"DARK": "Unlicht",
"FAIRY": "Fee",
"STELLAR": "Stellar",
},
} as const; } as const;

View File

@ -0,0 +1,41 @@
import { PokemonInfoTranslationEntries } from "#app/plugins/i18n";
export const pokemonInfo: PokemonInfoTranslationEntries = {
Stat: {
"HP": "Max. KP",
"HPshortened": "MaxKP",
"ATK": "Angriff",
"ATKshortened": "Ang",
"DEF": "Verteidigung",
"DEFshortened": "Vert",
"SPATK": "Sp. Ang",
"SPATKshortened": "SpAng",
"SPDEF": "Sp. Vert",
"SPDEFshortened": "SpVert",
"SPD": "Initiative",
"SPDshortened": "Init",
},
Type: {
"UNKNOWN": "Unbekannt",
"NORMAL": "Normal",
"FIGHTING": "Kampf",
"FLYING": "Flug",
"POISON": "Gift",
"GROUND": "Boden",
"ROCK": "Gestein",
"BUG": "Käfer",
"GHOST": "Geist",
"STEEL": "Stahl",
"FIRE": "Feuer",
"WATER": "Wasser",
"GRASS": "Pflanze",
"ELECTRIC": "Elektro",
"PSYCHIC": "Psycho",
"ICE": "Eis",
"DRAGON": "Drache",
"DARK": "Unlicht",
"FAIRY": "Fee",
"STELLAR": "Stellar",
},
} as const;

View File

@ -1,16 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const pokemonStat: SimpleTranslationEntries = {
"HP": "Max. KP",
"HPshortened": "MaxKP",
"ATK": "Angriff",
"ATKshortened": "Ang",
"DEF": "Verteidigung",
"DEFshortened": "Vert",
"SPATK": "Sp. Ang",
"SPATKshortened": "SpAng",
"SPDEF": "Sp. Vert",
"SPDEFshortened": "SpVert",
"SPD": "Initiative",
"SPDshortened": "Init"
} as const;

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": "Kämpfe gewonnen!",
"joinTheDiscord": "Join the Discord!", "joinTheDiscord": "Tritt dem Discord bei!",
"infiniteLevels": "Infinite Levels!", "infiniteLevels": "Unendliche Level!",
"everythingStacks": "Everything Stacks!", "everythingStacks": "Alles stapelt sich!",
"optionalSaveScumming": "Optional Save Scumming!", "optionalSaveScumming": "Optionales Save Scumming!",
"biomes": "35 Biomes!", "biomes": "35 Biome!",
"openSource": "Open Source!", "openSource": "Open Source!",
"playWithSpeed": "Play with 5x Speed!", "playWithSpeed": "Spiele mit fünffacher Geschwindigkeit!",
"liveBugTesting": "Live Bug Testing!", "liveBugTesting": "Live-Bug-Tests!",
"heavyInfluence": "Heavy RoR2 Influence!", "heavyInfluence": "Starker RoR2-Einfluss!",
"pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!", "pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!",
"nowWithMoreSalt": "Now with 33% More Salt!", "nowWithMoreSalt": "Jetzt mit 33% mehr Salz!",
"infiniteFusionAtHome": "Infinite Fusion at Home!", "infiniteFusionAtHome": "Wir haben Infinite Fusionen zu Hause!",
"brokenEggMoves": "Broken Egg Moves!", "brokenEggMoves": "Übermächtige Ei-Attacken!",
"magnificent": "Magnificent!", "magnificent": "Herrlich!",
"mubstitute": "Mubstitute!", "mubstitute": "Melegator!",
"thatsCrazy": "That\'s Crazy!", "thatsCrazy": "Das ist verrückt!",
"oranceJuice": "Orance Juice!", "oranceJuice": "Orangensaft!",
"questionableBalancing": "Questionable Balancing!", "questionableBalancing": "Fragwürdiges Balancing!",
"coolShaders": "Cool Shaders!", "coolShaders": "Coole Shader!",
"aiFree": "AI-Free!", "aiFree": "Ohne KI!",
"suddenDifficultySpikes": "Sudden Difficulty Spikes!", "suddenDifficultySpikes": "Plötzliche Schwierigkeitsspitzen!",
"basedOnAnUnfinishedFlashGame": "Based on an Unfinished Flash Game!", "basedOnAnUnfinishedFlashGame": "Basierend auf einem unfertigen Flash-Spiel!",
"moreAddictiveThanIntended": "More Addictive than Intended!", "moreAddictiveThanIntended": "Süchtig machender als beabsichtigt!",
"mostlyConsistentSeeds": "Mostly Consistent Seeds!", "mostlyConsistentSeeds": "Meistens konsistente Seeds!",
"achievementPointsDontDoAnything": "Achievement Points Don\'t Do Anything!", "achievementPointsDontDoAnything": "Erungenschaftspunkte tun nichts!",
"youDoNotStartAtLevel": "You Do Not Start at Level 2000!", "youDoNotStartAtLevel": "Du startest nicht auf Level 2000!",
"dontTalkAboutTheManaphyEggIncident": "Don\'t Talk About the Manaphy Egg Incident!", "dontTalkAboutTheManaphyEggIncident": "Wir reden nicht über den Manaphy-Ei-Vorfall!",
"alsoTryPokengine": "Also Try Pokéngine!", "alsoTryPokengine": "Versuche auch Pokéngine!",
"alsoTryEmeraldRogue": "Also Try Emerald Rogue!", "alsoTryEmeraldRogue": "Versuche auch Emerald Rogue!",
"alsoTryRadicalRed": "Also Try Radical Red!", "alsoTryRadicalRed": "Versuche auch Radical Red!",
"eeveeExpo": "Eevee Expo!", "eeveeExpo": "Evoli-Expo!",
"ynoproject": "YNOproject!", "ynoproject": "YNO-Projekt!",
} 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",

View File

@ -4,41 +4,41 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n";
* The weather namespace holds text displayed when weather is active during a battle * The weather namespace holds text displayed when weather is active during a battle
*/ */
export const weather: SimpleTranslationEntries = { export const weather: SimpleTranslationEntries = {
"sunnyStartMessage": "Die Sonne hellt auf!", "sunnyStartMessage": "Die Sonnenlicht wird stärker!",
"sunnyLapseMessage": "Die Sonne blendet.", "sunnyLapseMessage": "Die Sonnenlicht ist stark.",
"sunnyClearMessage": "Die Sonne schwächt ab.", "sunnyClearMessage": "Die Sonnenlicht verliert wieder an Intensität.",
"rainStartMessage": "Es fängt an zu regnen!", "rainStartMessage": "Es fängt an zu regnen!",
"rainLapseMessage": "Es regnet weiterhin.", "rainLapseMessage": "Es regnet weiter.",
"rainClearMessage": "Es hört auf zu regnen.", "rainClearMessage": "Der Regen lässt nach.",
"sandstormStartMessage": "Ein Sandsturm braut sich zusammen!", "sandstormStartMessage": "Ein Sandsturm kommt auf!",
"sandstormLapseMessage": "Der Sandsturm tobt.", "sandstormLapseMessage": "Der Sandsturm tobt.",
"sandstormClearMessage": "Der Sandsturm lässt nach.", "sandstormClearMessage": "Der Sandsturm legt sich.",
"sandstormDamageMessage": "{{pokemonPrefix}}{{pokemonName}} ist vom\nSandsturm beeinträchtigt!", "sandstormDamageMessage": " Der Sandsturm fügt {{pokemonPrefix}}{{pokemonName}} Schaden zu!",
"hailStartMessage": "Es fängt an zu hageln!", "hailStartMessage": "Es fängt an zu hageln!",
"hailLapseMessage": "Es hagelt weiterhin.", "hailLapseMessage": "Der Hagelsturm tobt.",
"hailClearMessage": "Es hört auf zu hageln.", "hailClearMessage": "Der Hagelsturm legt sich.",
"hailDamageMessage": "{{pokemonPrefix}}{{pokemonName}} ist vom\nHagel beeinträchtigt!", "hailDamageMessage": "{{pokemonPrefix}}{{pokemonName}} wird von Hagelkörnern getroffen!",
"snowStartMessage": "Es fängt an zu schneien!", "snowStartMessage": "Es fängt an zu schneien!",
"snowLapseMessage": "Es schneit weiterhin.", "snowLapseMessage": "Der Schneesturm tobt.",
"snowClearMessage": "Es hört auf zu schneien.", "snowClearMessage": "Der Schneesturm legt sich.",
"fogStartMessage": "Es fängt an zu nebeln!", "fogStartMessage": "Am Boden breitet sich dichter Nebel aus!",
"fogLapseMessage": "Es nebelt weiterhin.", "fogLapseMessage": "Der Nebel bleibt dicht.",
"fogClearMessage": "Es hört auf zu nebeln.", "fogClearMessage": "Der Nebel lichtet sich.",
"heavyRainStartMessage": "Ein Starkregen beginnt!", "heavyRainStartMessage": "Es fängt an, in Strömen zu regnen!",
"heavyRainLapseMessage": "Der Starkregen hält an.", "heavyRainLapseMessage": "Der strömende Regen hält an.",
"heavyRainClearMessage": "Der Starkregen lässt nach.", "heavyRainClearMessage": "Der strömende Regen lässt nach.",
"harshSunStartMessage": "Das Sonnenlicht wird wärmer!", "harshSunStartMessage": "Das Sonnenlicht wird sehr viel stärker!",
"harshSunLapseMessage": "Das Sonnenlicht brennt.", "harshSunLapseMessage": "Das Sonnenlicht ist sehr stark.",
"harshSunClearMessage": "Das Sonnenlicht schwächt ab.", "harshSunClearMessage": "Das Sonnenlicht verliert an Intensität.",
"strongWindsStartMessage": "Ein starker Wind zieht auf!", "strongWindsStartMessage": "Alle Flug-Pokémon werden von rätselhaften Luftströmungen geschützt!",
"strongWindsLapseMessage": "Der starke Wind tobt.", "strongWindsLapseMessage": "Die rätselhafte Luftströmung hält an.",
"strongWindsClearMessage": "Der starke Wind legt sich." "strongWindsClearMessage": "Die rätselhafte Luftströmung hat sich wieder geleget.",
} }

View File

@ -0,0 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battleMessageUiHandler: SimpleTranslationEntries = {
"ivBest": "Best",
"ivFantastic": "Fantastic",
"ivVeryGood": "Very Good",
"ivPrettyGood": "Pretty Good",
"ivDecent": "Decent",
"ivNoGood": "No Good",
} as const;

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

@ -12,13 +12,14 @@ import { move } from "./move";
import { nature } from "./nature"; import { nature } from "./nature";
import { pokeball } from "./pokeball"; import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon"; import { pokemon } from "./pokemon";
import { pokemonStat } from "./pokemon-stat"; import { pokemonInfo } from "./pokemon-info";
import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { titles,trainerClasses,trainerNames } from "./trainers";
import { splashMessages } from "./splash-messages"
import { weather } from "./weather"; import { weather } from "./weather";
import { battleMessageUiHandler } from "./battle-message-ui-handler";
import { berry } from "./berry";
export const enConfig = { export const enConfig = {
ability: ability, ability: ability,
@ -27,20 +28,22 @@ export const enConfig = {
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
egg: egg, egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
menuUiHandler: menuUiHandler, growth: growth,
menu: menu, menu: menu,
menuUiHandler: menuUiHandler,
modifierType: modifierType,
move: move, move: move,
nature: nature,
pokeball: pokeball, pokeball: pokeball,
pokemonStat: pokemonStat,
pokemon: pokemon, pokemon: pokemon,
pokemonInfo: pokemonInfo,
splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler, starterSelectUiHandler: starterSelectUiHandler,
titles: titles, titles: titles,
trainerClasses: trainerClasses, trainerClasses: trainerClasses,
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
splashMessages: splashMessages,
nature: nature,
growth: growth,
weather: weather, weather: weather,
modifierType: modifierType, battleMessageUiHandler: battleMessageUiHandler,
} berry: berry,
}

View File

@ -384,26 +384,4 @@ export const modifierType: ModifierTypeTranslationEntries = {
"CHILL_DRIVE": "Chill Drive", "CHILL_DRIVE": "Chill Drive",
"DOUSE_DRIVE": "Douse Drive", "DOUSE_DRIVE": "Douse Drive",
}, },
TeraType: {
"UNKNOWN": "Unknown",
"NORMAL": "Normal",
"FIGHTING": "Fighting",
"FLYING": "Flying",
"POISON": "Poison",
"GROUND": "Ground",
"ROCK": "Rock",
"BUG": "Bug",
"GHOST": "Ghost",
"STEEL": "Steel",
"FIRE": "Fire",
"WATER": "Water",
"GRASS": "Grass",
"ELECTRIC": "Electric",
"PSYCHIC": "Psychic",
"ICE": "Ice",
"DRAGON": "Dragon",
"DARK": "Dark",
"FAIRY": "Fairy",
"STELLAR": "Stellar",
},
} as const; } as const;

View File

@ -0,0 +1,41 @@
import { PokemonInfoTranslationEntries } from "#app/plugins/i18n";
export const pokemonInfo: PokemonInfoTranslationEntries = {
Stat: {
"HP": "Max. HP",
"HPshortened": "MaxHP",
"ATK": "Attack",
"ATKshortened": "Atk",
"DEF": "Defense",
"DEFshortened": "Def",
"SPATK": "Sp. Atk",
"SPATKshortened": "SpAtk",
"SPDEF": "Sp. Def",
"SPDEFshortened": "SpDef",
"SPD": "Speed",
"SPDshortened": "Spd"
},
Type: {
"UNKNOWN": "Unknown",
"NORMAL": "Normal",
"FIGHTING": "Fighting",
"FLYING": "Flying",
"POISON": "Poison",
"GROUND": "Ground",
"ROCK": "Rock",
"BUG": "Bug",
"GHOST": "Ghost",
"STEEL": "Steel",
"FIRE": "Fire",
"WATER": "Water",
"GRASS": "Grass",
"ELECTRIC": "Electric",
"PSYCHIC": "Psychic",
"ICE": "Ice",
"DRAGON": "Dragon",
"DARK": "Dark",
"FAIRY": "Fairy",
"STELLAR": "Stellar",
},
} as const;

View File

@ -1,16 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const pokemonStat: SimpleTranslationEntries = {
"HP": "Max. HP",
"HPshortened": "MaxHP",
"ATK": "Attack",
"ATKshortened": "Atk",
"DEF": "Defense",
"DEFshortened": "Def",
"SPATK": "Sp. Atk",
"SPATKshortened": "SpAtk",
"SPDEF": "Sp. Def",
"SPDEFshortened": "SpDef",
"SPD": "Speed",
"SPDshortened": "Spd"
} as const;

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,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battleMessageUiHandler: SimpleTranslationEntries = {
"ivBest": "Best",
"ivFantastic": "Fantastic",
"ivVeryGood": "Very Good",
"ivPrettyGood": "Pretty Good",
"ivDecent": "Decent",
"ivNoGood": "No Good",
} as const;

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

@ -12,13 +12,14 @@ import { move } from "./move";
import { nature } from "./nature"; import { nature } from "./nature";
import { pokeball } from "./pokeball"; import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon"; import { pokemon } from "./pokemon";
import { pokemonStat } from "./pokemon-stat"; import { pokemonInfo } from "./pokemon-info";
import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { titles,trainerClasses,trainerNames } from "./trainers";
import { splashMessages } from "./splash-messages"
import { weather } from "./weather"; import { weather } from "./weather";
import { battleMessageUiHandler } from "./battle-message-ui-handler";
import { berry } from "./berry";
export const esConfig = { export const esConfig = {
ability: ability, ability: ability,
@ -27,20 +28,22 @@ export const esConfig = {
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
egg: egg, egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
menuUiHandler: menuUiHandler, growth: growth,
menu: menu, menu: menu,
menuUiHandler: menuUiHandler,
modifierType: modifierType,
move: move, move: move,
nature: nature,
pokeball: pokeball, pokeball: pokeball,
pokemonStat: pokemonStat,
pokemon: pokemon, pokemon: pokemon,
pokemonInfo: pokemonInfo,
splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler, starterSelectUiHandler: starterSelectUiHandler,
titles: titles, titles: titles,
trainerClasses: trainerClasses, trainerClasses: trainerClasses,
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
splashMessages: splashMessages,
nature: nature,
growth: growth,
weather: weather, weather: weather,
modifierType: modifierType, battleMessageUiHandler: battleMessageUiHandler,
} berry: berry,
}

View File

@ -384,26 +384,4 @@ export const modifierType: ModifierTypeTranslationEntries = {
"CHILL_DRIVE": "Chill Drive", "CHILL_DRIVE": "Chill Drive",
"DOUSE_DRIVE": "Douse Drive", "DOUSE_DRIVE": "Douse Drive",
}, },
TeraType: {
"UNKNOWN": "Unknown",
"NORMAL": "Normal",
"FIGHTING": "Fighting",
"FLYING": "Flying",
"POISON": "Poison",
"GROUND": "Ground",
"ROCK": "Rock",
"BUG": "Bug",
"GHOST": "Ghost",
"STEEL": "Steel",
"FIRE": "Fire",
"WATER": "Water",
"GRASS": "Grass",
"ELECTRIC": "Electric",
"PSYCHIC": "Psychic",
"ICE": "Ice",
"DRAGON": "Dragon",
"DARK": "Dark",
"FAIRY": "Fairy",
"STELLAR": "Stellar",
},
} as const; } as const;

View File

@ -0,0 +1,41 @@
import { PokemonInfoTranslationEntries } from "#app/plugins/i18n";
export const pokemonInfo: PokemonInfoTranslationEntries = {
Stat: {
"HP": "PV",
"HPshortened": "PV",
"ATK": "Ataque",
"ATKshortened": "Ata",
"DEF": "Defensa",
"DEFshortened": "Def",
"SPATK": "At. Esp.",
"SPATKshortened": "AtEsp",
"SPDEF": "Def. Esp.",
"SPDEFshortened": "DefEsp",
"SPD": "Velocidad",
"SPDshortened": "Veloc."
},
Type: {
"UNKNOWN": "Unknown",
"NORMAL": "Normal",
"FIGHTING": "Fighting",
"FLYING": "Flying",
"POISON": "Poison",
"GROUND": "Ground",
"ROCK": "Rock",
"BUG": "Bug",
"GHOST": "Ghost",
"STEEL": "Steel",
"FIRE": "Fire",
"WATER": "Water",
"GRASS": "Grass",
"ELECTRIC": "Electric",
"PSYCHIC": "Psychic",
"ICE": "Ice",
"DRAGON": "Dragon",
"DARK": "Dark",
"FAIRY": "Fairy",
"STELLAR": "Stellar",
},
} as const;

View File

@ -1,16 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const pokemonStat: SimpleTranslationEntries = {
"HP": "PV",
"HPshortened": "PV",
"ATK": "Ataque",
"ATKshortened": "Ata",
"DEF": "Defensa",
"DEFshortened": "Def",
"SPATK": "At. Esp.",
"SPATKshortened": "AtEsp",
"SPDEF": "Def. Esp.",
"SPDEFshortened": "DefEsp",
"SPD": "Velocidad",
"SPDshortened": "Veloc."
} as const;

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,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battleMessageUiHandler: SimpleTranslationEntries = {
"ivBest": "Exceptionnel",
"ivFantastic": "Fantastique",
"ivVeryGood": "Très bon",
"ivPrettyGood": "Bon",
"ivDecent": "Passable…",
"ivNoGood": "Pas top…",
} as const;

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: "Baie Sitrus",
effect: "Restaure 25% des PV sils sont inférieurs à 50%",
},
"LUM": {
name: "Baie Prine",
effect: "Soigne tout problème de statut permanant et la confusion",
},
"ENIGMA": {
name: "Baie Enigma",
effect: "Restaure 25% des PV si touché par une capacité super efficace",
},
"LIECHI": {
name: "Baie Lichii",
effect: "Augmente lAttaque si les PV sont inférieurs à 25%",
},
"GANLON": {
name: "Baie Lingan",
effect: "Augmente la Défense si les PV sont inférieurs à 25%",
},
"PETAYA": {
name: "Baie Pitaye",
effect: "Augmente lAtq. Spé. si les PV sont inférieurs à 25%",
},
"APICOT": {
name: "Baie Abriko",
effect: "Augmente la Déf. Spé. si les PV sont inférieurs à 25%",
},
"SALAC": {
name: "Baie Sailak",
effect: "Augmente la Vitesse si les PV sont inférieurs à 25%",
},
"LANSAT": {
name: "Baie Lansat",
effect: "Augmente le taux de coups critiques si les PV sont inférieurs à 25%",
},
"STARF": {
name: "Baie Frista",
effect: "Augmente énormément une statistique au hasard si les PV sont inférieurs à 25%",
},
"LEPPA": {
name: "Baie Mepo",
effect: "Restaure 10 PP à une capacité dès que ses PP tombent à 0",
},
} as const;

View File

@ -12,14 +12,14 @@ import { move } from "./move";
import { nature } from "./nature"; import { nature } from "./nature";
import { pokeball } from "./pokeball"; import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon"; import { pokemon } from "./pokemon";
import { pokemonStat } from "./pokemon-stat"; import { pokemonInfo } from "./pokemon-info";
import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { titles,trainerClasses,trainerNames } from "./trainers";
import { splashMessages } from "./splash-messages"
import { weather } from "./weather"; import { weather } from "./weather";
import { battleMessageUiHandler } from "./battle-message-ui-handler";
import { berry } from "./berry";
export const frConfig = { export const frConfig = {
ability: ability, ability: ability,
@ -28,21 +28,22 @@ export const frConfig = {
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
egg: egg, egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
menuUiHandler: menuUiHandler, growth: growth,
menu: menu, menu: menu,
menuUiHandler: menuUiHandler,
modifierType: modifierType,
move: move, move: move,
nature: nature,
pokeball: pokeball, pokeball: pokeball,
pokemonStat: pokemonStat,
pokemon: pokemon, pokemon: pokemon,
pokemonInfo: pokemonInfo,
splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler, starterSelectUiHandler: starterSelectUiHandler,
titles: titles, titles: titles,
trainerClasses: trainerClasses, trainerClasses: trainerClasses,
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
splashMessages: splashMessages,
nature: nature,
growth: growth,
weather: weather, weather: weather,
modifierType: modifierType, battleMessageUiHandler: battleMessageUiHandler,
} berry: berry,
}

View File

@ -3,407 +3,385 @@ import { ModifierTypeTranslationEntries } from "#app/plugins/i18n";
export const modifierType: ModifierTypeTranslationEntries = { export const modifierType: ModifierTypeTranslationEntries = {
ModifierType: { ModifierType: {
"AddPokeballModifierType": { "AddPokeballModifierType": {
name: "{{modifierCount}}x {{pokeballName}}", name: "{{pokeballName}} x{{modifierCount}}",
description: "Receive {{pokeballName}} x{{modifierCount}} (Inventory: {{pokeballAmount}}) \nCatch Rate: {{catchRate}}", description: "Recevez {{modifierCount}} {{pokeballName}}s (Inventaire : {{pokeballAmount}}) \nTaux de capture : {{catchRate}}",
}, },
"AddVoucherModifierType": { "AddVoucherModifierType": {
name: "{{modifierCount}}x {{voucherTypeName}}", name: "{{voucherTypeName}} x{{modifierCount}}",
description: "Receive {{voucherTypeName}} x{{modifierCount}}", description: "Recevez {{modifierCount}} {{voucherTypeName}}",
}, },
"PokemonHeldItemModifierType": { "PokemonHeldItemModifierType": {
extra: { extra: {
"inoperable": "{{pokemonName}} can't take\nthis item!", "inoperable": "{{pokemonName}} ne peut pas\nporter cet objet !",
"tooMany": "{{pokemonName}} has too many\nof this item!", "tooMany": "{{pokemonName}} possède trop\ndexemplaires de cet objet !",
} }
}, },
"PokemonHpRestoreModifierType": { "PokemonHpRestoreModifierType": {
description: "Restores {{restorePoints}} HP or {{restorePercent}}% HP for one Pokémon, whichever is higher", description: "Restaure {{restorePoints}} PV ou {{restorePercent}}% des PV totaux dun Pokémon, en fonction duquel des deux est le plus élevé",
extra: { extra: {
"fully": "Fully restores HP for one Pokémon", "fully": "Restaure tous les PV dun Pokémon",
"fullyWithStatus": "Fully restores HP for one Pokémon and heals any status ailment", "fullyWithStatus": "Restaure tous les PV dun Pokémon et soigne tous ses problèmes de statut",
} }
}, },
"PokemonReviveModifierType": { "PokemonReviveModifierType": {
description: "Revives one Pokémon and restores {{restorePercent}}% HP", description: "Réanime un Pokémon et restaure {{restorePercent}}% de ses PV",
}, },
"PokemonStatusHealModifierType": { "PokemonStatusHealModifierType": {
description: "Heals any status ailment for one Pokémon", description: "Soigne tous les problèmes de statut dun Pokémon",
}, },
"PokemonPpRestoreModifierType": { "PokemonPpRestoreModifierType": {
description: "Restores {{restorePoints}} PP for one Pokémon move", description: "Restaure {{restorePoints}} PP à une capacité dun Pokémon",
extra: { extra: {
"fully": "Restores all PP for one Pokémon move", "fully": "Restaure tous les PP à une capacité dun Pokémon",
} }
}, },
"PokemonAllMovePpRestoreModifierType": { "PokemonAllMovePpRestoreModifierType": {
description: "Restores {{restorePoints}} PP for all of one Pokémon's moves", description: "Restaure {{restorePoints}} PP à toutes les capacités dun Pokémon",
extra: { extra: {
"fully": "Restores all PP for all of one Pokémon's moves", "fully": "Restaure tous les PP à toutes les capacités dun Pokémon",
} }
}, },
"PokemonPpUpModifierType": { "PokemonPpUpModifierType": {
description: "Permanently increases PP for one Pokémon move by {{upPoints}} for every 5 maximum PP (maximum 3)", description: "Augmente le max de PP de {{upPoints}} à une capacité dun Pokémon pour chaque 5 PP max (max : 3)",
}, },
"PokemonNatureChangeModifierType": { "PokemonNatureChangeModifierType": {
name: "{{natureName}} Mint", name: "Aromate {{natureName}}",
description: "Changes a Pokémon's nature to {{natureName}} and permanently unlocks the nature for the starter.", description: "Donne la nature {{natureName}} à un Pokémon et la débloque pour le starter lui étant lié.",
}, },
"DoubleBattleChanceBoosterModifierType": { "DoubleBattleChanceBoosterModifierType": {
description: "Doubles the chance of an encounter being a double battle for {{battleCount}} battles", description: "Double les chances de tomber sur un combat double pendant {{battleCount}} combats",
}, },
"TempBattleStatBoosterModifierType": { "TempBattleStatBoosterModifierType": {
description: "Increases the {{tempBattleStatName}} of all party members by 1 stage for 5 battles", description: "Augmente d1 cran {{tempBattleStatName}} pour toute léquipe pendant 5 combats",
}, },
"AttackTypeBoosterModifierType": { "AttackTypeBoosterModifierType": {
description: "Increases the power of a Pokémon's {{moveType}}-type moves by 20%", description: "Augmente de 20% la puissance des capacités de type {{moveType}} dun Pokémon",
}, },
"PokemonLevelIncrementModifierType": { "PokemonLevelIncrementModifierType": {
description: "Increases a Pokémon's level by 1", description: "Fait monter un Pokémon d1 niveau",
}, },
"AllPokemonLevelIncrementModifierType": { "AllPokemonLevelIncrementModifierType": {
description: "Increases all party members' level by 1", description: "Fait monter toute léquipe d1 niveau",
}, },
"PokemonBaseStatBoosterModifierType": { "PokemonBaseStatBoosterModifierType": {
description: "Increases the holder's base {{statName}} by 10%. The higher your IVs, the higher the stack limit.", description: "Augmente de 10% {{statName}} de base de son porteur. Plus les IV sont hauts, plus il peut en porter.",
}, },
"AllPokemonFullHpRestoreModifierType": { "AllPokemonFullHpRestoreModifierType": {
description: "Restores 100% HP for all Pokémon", description: "Restaure tous les PV de toute l'équipe",
}, },
"AllPokemonFullReviveModifierType": { "AllPokemonFullReviveModifierType": {
description: "Revives all fainted Pokémon, fully restoring HP", description: "Réanime et restaure tous les PV de tous les Pokémon K.O.",
}, },
"MoneyRewardModifierType": { "MoneyRewardModifierType": {
description: "Grants a {{moneyMultiplier}} amount of money (₽{{moneyAmount}})", description: "Octroie une {{moneyMultiplier}} somme dargent ({{moneyAmount}}₽)",
extra: { extra: {
"small": "small", "small": "petite",
"moderate": "moderate", "moderate": "moyenne",
"large": "large", "large": "grande",
}, },
}, },
"ExpBoosterModifierType": { "ExpBoosterModifierType": {
description: "Increases gain of EXP. Points by {{boostPercent}}%", description: "Augmente de {{boostPercent}}% le gain de Points dExp",
}, },
"PokemonExpBoosterModifierType": { "PokemonExpBoosterModifierType": {
description: "Increases the holder's gain of EXP. Points by {{boostPercent}}%", description: "Augmente de {{boostPercent}}% le gain de Points dExp du porteur",
}, },
"PokemonFriendshipBoosterModifierType": { "PokemonFriendshipBoosterModifierType": {
description: "Increases friendship gain per victory by 50%", description: "Augmente le gain damitié de 50% par victoire",
}, },
"PokemonMoveAccuracyBoosterModifierType": { "PokemonMoveAccuracyBoosterModifierType": {
description: "Increases move accuracy by {{accuracyAmount}} (maximum 100)", description: "Augmente de {{accuracyAmount}} la précision des capacités (maximum 100)",
}, },
"PokemonMultiHitModifierType": { "PokemonMultiHitModifierType": {
description: "Attacks hit one additional time at the cost of a 60/75/82.5% power reduction per stack respectively", description: "Frappe une fois de plus en échange dune baisse de puissance de respectivement 60/75/82,5% par cumul",
}, },
"TmModifierType": { "TmModifierType": {
name: "TM{{moveId}} - {{moveName}}", name: "CT{{moveId}} - {{moveName}}",
description: "Teach {{moveName}} to a Pokémon", description: "Apprend la capacité {{moveName}} à un Pokémon",
}, },
"EvolutionItemModifierType": { "EvolutionItemModifierType": {
description: "Causes certain Pokémon to evolve", description: "Permet à certains Pokémon dévoluer",
}, },
"FormChangeItemModifierType": { "FormChangeItemModifierType": {
description: "Causes certain Pokémon to change form", description: "Permet à certains Pokémon de changer de forme",
}, },
"FusePokemonModifierType": { "FusePokemonModifierType": {
description: "Combines two Pokémon (transfers Ability, splits base stats and types, shares move pool)", description: "Fusionne deux Pokémon (transfère le Talent, sépare les stats de base et les types, partage le movepool)",
}, },
"TerastallizeModifierType": { "TerastallizeModifierType": {
name: "{{teraType}} Tera Shard", name: "Téra-Éclat {{teraType}}",
description: "{{teraType}} Terastallizes the holder for up to 10 battles", description: "{{teraType}} Téracristallise son porteur pendant 10 combats",
}, },
"ContactHeldItemTransferChanceModifierType": { "ContactHeldItemTransferChanceModifierType": {
description: "Upon attacking, there is a {{chancePercent}}% chance the foe's held item will be stolen", description: "{{chancePercent}}% de chances de voler un objet de ladversaire en lattaquant",
}, },
"TurnHeldItemTransferModifierType": { "TurnHeldItemTransferModifierType": {
description: "Every turn, the holder acquires one held item from the foe", description: "À chaque tour, son porteur obtient un objet de son adversaire",
}, },
"EnemyAttackStatusEffectChanceModifierType": { "EnemyAttackStatusEffectChanceModifierType": {
description: "Adds a {{chancePercent}}% chance to inflict {{statusEffect}} with attack moves", description: "Ajoute {{chancePercent}}% de chances dinfliger le statut {{statusEffect}} avec des capacités offensives",
}, },
"EnemyEndureChanceModifierType": { "EnemyEndureChanceModifierType": {
description: "Adds a {{chancePercent}}% chance of enduring a hit", description: "Ajoute {{chancePercent}}% de chances dencaisser un coup",
}, },
"RARE_CANDY": { name: "Rare Candy" }, "RARE_CANDY": { name: "Super Bonbon" },
"RARER_CANDY": { name: "Rarer Candy" }, "RARER_CANDY": { name: "Hyper Bonbon" },
"MEGA_BRACELET": { name: "Mega Bracelet", description: "Mega Stones become available" }, "MEGA_BRACELET": { name: "Méga-Bracelet", description: "Débloque les Méga-Gemmes" },
"DYNAMAX_BAND": { name: "Dynamax Band", description: "Max Mushrooms become available" }, "DYNAMAX_BAND": { name: "Poignet Dynamax", description: "Débloque le Dynamax" },
"TERA_ORB": { name: "Tera Orb", description: "Tera Shards become available" }, "TERA_ORB": { name: "Orbe Téracristal", description: "Débloque les Téra-Éclats" },
"MAP": { name: "Map", description: "Allows you to choose your destination at a crossroads" }, "MAP": { name: "Carte", description: "Vous permet de choisir votre destination à un croisement" },
"POTION": { name: "Potion" }, "POTION": { name: "Potion" },
"SUPER_POTION": { name: "Super Potion" }, "SUPER_POTION": { name: "Super Potion" },
"HYPER_POTION": { name: "Hyper Potion" }, "HYPER_POTION": { name: "Hyper Potion" },
"MAX_POTION": { name: "Max Potion" }, "MAX_POTION": { name: "Potion Max" },
"FULL_RESTORE": { name: "Full Restore" }, "FULL_RESTORE": { name: "Guérison" },
"REVIVE": { name: "Revive" }, "REVIVE": { name: "Rappel" },
"MAX_REVIVE": { name: "Max Revive" }, "MAX_REVIVE": { name: "Rappel Max" },
"FULL_HEAL": { name: "Full Heal" }, "FULL_HEAL": { name: "Total Soin" },
"SACRED_ASH": { name: "Sacred Ash" }, "SACRED_ASH": { name: "Cendres Sacrées" },
"REVIVER_SEED": { name: "Reviver Seed", description: "Revives the holder for 1/2 HP upon fainting" }, "REVIVER_SEED": { name: "Résugraine", description: "Réanime et restaure la moitié des PV de son porteur sil tombe K.O." },
"ETHER": { name: "Ether" }, "ETHER": { name: "Huile" },
"MAX_ETHER": { name: "Max Ether" }, "MAX_ETHER": { name: "Huile Max" },
"ELIXIR": { name: "Elixir" }, "ELIXIR": { name: "Élixir" },
"MAX_ELIXIR": { name: "Max Elixir" }, "MAX_ELIXIR": { name: "Élixir Max" },
"PP_UP": { name: "PP Up" }, "PP_UP": { name: "PP Plus" },
"PP_MAX": { name: "PP Max" }, "PP_MAX": { name: "PP Max" },
"LURE": { name: "Lure" }, "LURE": { name: "Parfum" },
"SUPER_LURE": { name: "Super Lure" }, "SUPER_LURE": { name: "Super Parfum" },
"MAX_LURE": { name: "Max Lure" }, "MAX_LURE": { name: "Parfum Max" },
"MEMORY_MUSHROOM": { name: "Memory Mushroom", description: "Recall one Pokémon's forgotten move" }, "MEMORY_MUSHROOM": { name: "Champi Mémoriel", description: "Remémore une capacité à un Pokémon" },
"EXP_SHARE": { name: "EXP. All", description: "Non-participants receive 20% of a single participant's EXP. Points" }, "EXP_SHARE": { name: "Multi Exp", description: "Tous les non-participants reçoivent 20% des Points dExp dun participant" },
"EXP_BALANCE": { name: "EXP. Balance", description: "Weighs EXP. Points received from battles towards lower-leveled party members" }, "EXP_BALANCE": { name: "ÉquilibrExp", description: "Équilibre les Points dExp à lavantage des membres de léquipe aux plus bas niveaux" },
"OVAL_CHARM": { name: "Oval Charm", description: "When multiple Pokémon participate in a battle, each gets an extra 10% of the total EXP" }, "OVAL_CHARM": { name: "Charme Ovale", description: "Quand plusieurs Pokémon sont en combat, chacun gagne 10% supplémentaires du total dExp" },
"EXP_CHARM": { name: "EXP. Charm" }, "EXP_CHARM": { name: "Charme Exp" },
"SUPER_EXP_CHARM": { name: "Super EXP. Charm" }, "SUPER_EXP_CHARM": { name: "Super Charme Exp" },
"GOLDEN_EXP_CHARM": { name: "Golden EXP. Charm" }, "GOLDEN_EXP_CHARM": { name: "Charme Exp Doré" },
"LUCKY_EGG": { name: "Lucky Egg" }, "LUCKY_EGG": { name: "Œuf Chance" },
"GOLDEN_EGG": { name: "Golden Egg" }, "GOLDEN_EGG": { name: "Œuf dOr" },
"SOOTHE_BELL": { name: "Soothe Bell" }, "SOOTHE_BELL": { name: "Grelot Zen" },
"SOUL_DEW": { name: "Soul Dew", description: "Increases the influence of a Pokémon's nature on its stats by 10% (additive)" }, "SOUL_DEW": { name: "Rosée Âme", description: "Augmente de 10% linfluence de la nature dun Pokémon sur ses statistiques (cumulatif)" },
"NUGGET": { name: "Nugget" }, "NUGGET": { name: "Pépite" },
"BIG_NUGGET": { name: "Big Nugget" }, "BIG_NUGGET": { name: "Maxi Pépite" },
"RELIC_GOLD": { name: "Relic Gold" }, "RELIC_GOLD": { name: "Vieux Ducat" },
"AMULET_COIN": { name: "Amulet Coin", description: "Increases money rewards by 20%" }, "AMULET_COIN": { name: "Pièce Rune", description: "Augmente de 20% les gains dargent" },
"GOLDEN_PUNCH": { name: "Golden Punch", description: "Grants 50% of damage inflicted as money" }, "GOLDEN_PUNCH": { name: "Poing Doré", description: "50% des dégâts infligés sont convertis en argent" },
"COIN_CASE": { name: "Coin Case", description: "After every 10th battle, receive 10% of your money in interest" }, "COIN_CASE": { name: "Boite Jetons", description: "Tous les 10 combats, recevez 10% de votre argent en intérêts" },
"LOCK_CAPSULE": { name: "Lock Capsule", description: "Allows you to lock item rarities when rerolling items" }, "LOCK_CAPSULE": { name: "Poké Écrin", description: "Permet de verrouiller des objets rares si vous relancez les objets proposés" },
"GRIP_CLAW": { name: "Grip Claw" }, "GRIP_CLAW": { name: "Accro Griffe" },
"WIDE_LENS": { name: "Wide Lens" }, "WIDE_LENS": { name: "Loupe" },
"MULTI_LENS": { name: "Multi Lens" }, "MULTI_LENS": { name: "Multi Loupe" },
"HEALING_CHARM": { name: "Healing Charm", description: "Increases the effectiveness of HP restoring moves and items by 10% (excludes Revives)" }, "HEALING_CHARM": { name: "Charme Soin", description: "Augmente de 10% lefficacité des capacités et objets de soin de PV (hors Rappels)" },
"CANDY_JAR": { name: "Candy Jar", description: "Increases the number of levels added by Rare Candy items by 1" }, "CANDY_JAR": { name: "Jarre de Bonbons", description: "Augmente de 1 le nombre de niveaux gagnés à lutilisation dun Super Bonbon" },
"BERRY_POUCH": { name: "Berry Pouch", description: "Adds a 25% chance that a used berry will not be consumed" }, "BERRY_POUCH": { name: "Sac à Baies", description: "Ajoute 25% de chances quune Baie utilisée ne soit pas consommée" },
"FOCUS_BAND": { name: "Focus Band", description: "Adds a 10% chance to survive with 1 HP after being damaged enough to faint" }, "FOCUS_BAND": { name: "Bandeau", description: "Ajoute 10% de chances de survivre avec 1 PV si les dégâts reçus pouvaient mettre K.O." },
"QUICK_CLAW": { name: "Quick Claw", description: "Adds a 10% chance to move first regardless of speed (after priority)" }, "QUICK_CLAW": { name: "Vive Griffe", description: "Ajoute 10% de chances dagir en premier, indépendamment de la vitesse (après la priorité)" },
"KINGS_ROCK": { name: "King's Rock", description: "Adds a 10% chance an attack move will cause the opponent to flinch" }, "KINGS_ROCK": { name: "Roche Royale", description: "Ajoute 10% de chances quune capacité offensive apeure ladversaire" },
"LEFTOVERS": { name: "Leftovers", description: "Heals 1/16 of a Pokémon's maximum HP every turn" }, "LEFTOVERS": { name: "Restes", description: "Soigne à chaque tour 1/16 des PV max dun Pokémon" },
"SHELL_BELL": { name: "Shell Bell", description: "Heals 1/8 of a Pokémon's dealt damage" }, "SHELL_BELL": { name: "Grelot Coque", description: "Soigne 1/8 des dégâts infligés par un Pokémon" },
"BATON": { name: "Baton", description: "Allows passing along effects when switching Pokémon, which also bypasses traps" }, "BATON": { name: "Bâton", description: "Permet de transmettre les effets en cas de changement de Pokémon. Ignore les pièges." },
"SHINY_CHARM": { name: "Shiny Charm", description: "Dramatically increases the chance of a wild Pokémon being Shiny" }, "SHINY_CHARM": { name: "Charme Chroma", description: "Augmente énormément les chances de rencontrer un Pokémon sauvage chromatique" },
"ABILITY_CHARM": { name: "Ability Charm", description: "Dramatically increases the chance of a wild Pokémon having a Hidden Ability" }, "ABILITY_CHARM": { name: "Charme Talent", description: "Augmente énormément les chances de rencontrer un Pokémon sauvage avec un Talent Caché" },
"IV_SCANNER": { name: "IV Scanner", description: "Allows scanning the IVs of wild Pokémon. 2 IVs are revealed per stack. The best IVs are shown first" }, "IV_SCANNER": { name: "Scanner dIV", description: "Scanne les IV dun Pokémon sauvage. 2 IV sont révélés par Scanner. Les meilleurs sont montrés en 1er." },
"DNA_SPLICERS": { name: "DNA Splicers" }, "DNA_SPLICERS": { name: "Pointeau ADN" },
"MINI_BLACK_HOLE": { name: "Mini Black Hole" }, "MINI_BLACK_HOLE": { name: "Mini Trou Noir" },
"GOLDEN_POKEBALL": { name: "Golden Poké Ball", description: "Adds 1 extra item option at the end of every battle" }, "GOLDEN_POKEBALL": { name: "Poké Ball Dorée", description: "Ajoute 1 choix dobjet à la fin de chaque combat" },
"ENEMY_DAMAGE_BOOSTER": { name: "Damage Token", description: "Increases damage by 5%" }, "ENEMY_DAMAGE_BOOSTER": { name: "Jeton Dégâts", description: "Augmente les dégâts de 5%" },
"ENEMY_DAMAGE_REDUCTION": { name: "Protection Token", description: "Reduces incoming damage by 2.5%" }, "ENEMY_DAMAGE_REDUCTION": { name: "Jeton Protection", description: "Diminue les dégâts reçus de 2,5%" },
"ENEMY_HEAL": { name: "Recovery Token", description: "Heals 2% of max HP every turn" }, "ENEMY_HEAL": { name: "Jeton Soin", description: "Soigne 2% des PV max à chaque tour" },
"ENEMY_ATTACK_POISON_CHANCE": { name: "Poison Token" }, "ENEMY_ATTACK_POISON_CHANCE": { name: "Jeton Poison" },
"ENEMY_ATTACK_PARALYZE_CHANCE": { name: "Paralyze Token" }, "ENEMY_ATTACK_PARALYZE_CHANCE": { name: "Jeton Paralysie" },
"ENEMY_ATTACK_SLEEP_CHANCE": { name: "Sleep Token" }, "ENEMY_ATTACK_SLEEP_CHANCE": { name: "Jeton Sommeil" },
"ENEMY_ATTACK_FREEZE_CHANCE": { name: "Freeze Token" }, "ENEMY_ATTACK_FREEZE_CHANCE": { name: "Jeton Gel" },
"ENEMY_ATTACK_BURN_CHANCE": { name: "Burn Token" }, "ENEMY_ATTACK_BURN_CHANCE": { name: "Jeton Brulure" },
"ENEMY_STATUS_EFFECT_HEAL_CHANCE": { name: "Full Heal Token", description: "Adds a 10% chance every turn to heal a status condition" }, "ENEMY_STATUS_EFFECT_HEAL_CHANCE": { name: "Jeton Total Soin", description: "Ajoute 10% de chances à chaque tour de se soigner dun problème de statut." },
"ENEMY_ENDURE_CHANCE": { name: "Endure Token" }, "ENEMY_ENDURE_CHANCE": { name: "Jeton Ténacité" },
"ENEMY_FUSED_CHANCE": { name: "Fusion Token", description: "Adds a 1% chance that a wild Pokémon will be a fusion" }, "ENEMY_FUSED_CHANCE": { name: "Jeton Fusion", description: "Ajoute 1% de chances quun Pokémon sauvage soit une fusion." },
}, },
TempBattleStatBoosterItem: { TempBattleStatBoosterItem: {
"x_attack": "X Attack", "x_attack": "Attaque +",
"x_defense": "X Defense", "x_defense": "Défense +",
"x_sp_atk": "X Sp. Atk", "x_sp_atk": "Atq. Spé. +",
"x_sp_def": "X Sp. Def", "x_sp_def": "Déf. Spé. +",
"x_speed": "X Speed", "x_speed": "Vitesse +",
"x_accuracy": "X Accuracy", "x_accuracy": "Précision +",
"dire_hit": "Dire Hit", "dire_hit": "Muscle +",
}, },
AttackTypeBoosterItem: { AttackTypeBoosterItem: {
"silk_scarf": "Silk Scarf", "silk_scarf": "Mouchoir Soie",
"black_belt": "Black Belt", "black_belt": "Ceinture Noire",
"sharp_beak": "Sharp Beak", "sharp_beak": "Bec Pointu",
"poison_barb": "Poison Barb", "poison_barb": "Pic Venin",
"soft_sand": "Soft Sand", "soft_sand": "Sable Doux",
"hard_stone": "Hard Stone", "hard_stone": "Pierre Dure",
"silver_powder": "Silver Powder", "silver_powder": "Poudre Argentée",
"spell_tag": "Spell Tag", "spell_tag": "Rune Sort",
"metal_coat": "Metal Coat", "metal_coat": "Peau Métal",
"charcoal": "Charcoal", "charcoal": "Charbon",
"mystic_water": "Mystic Water", "mystic_water": "Eau Mystique",
"miracle_seed": "Miracle Seed", "miracle_seed": "Graine Miracle",
"magnet": "Magnet", "magnet": "Aimant",
"twisted_spoon": "Twisted Spoon", "twisted_spoon": "Cuillère Tordue",
"never_melt_ice": "Never-Melt Ice", "never_melt_ice": "Glace Éternelle",
"dragon_fang": "Dragon Fang", "dragon_fang": "Croc Dragon",
"black_glasses": "Black Glasses", "black_glasses": "Lunettes Noires",
"fairy_feather": "Fairy Feather", "fairy_feather": "Plume Enchantée",
}, },
BaseStatBoosterItem: { BaseStatBoosterItem: {
"hp_up": "HP Up", "hp_up": "PV Plus",
"protein": "Protein", "protein": "Protéine",
"iron": "Iron", "iron": "Fer",
"calcium": "Calcium", "calcium": "Calcium",
"zinc": "Zinc", "zinc": "Zinc",
"carbos": "Carbos", "carbos": "Carbone",
}, },
EvolutionItem: { EvolutionItem: {
"NONE": "None", "NONE": "Aucun",
"LINKING_CORD": "Linking Cord", "LINKING_CORD": "Fil de Liaison",
"SUN_STONE": "Sun Stone", "SUN_STONE": "Pierre Soleil",
"MOON_STONE": "Moon Stone", "MOON_STONE": "Pierre Lune",
"LEAF_STONE": "Leaf Stone", "LEAF_STONE": "Pierre Plante",
"FIRE_STONE": "Fire Stone", "FIRE_STONE": "Pierre Feu",
"WATER_STONE": "Water Stone", "WATER_STONE": "Pierre Eau",
"THUNDER_STONE": "Thunder Stone", "THUNDER_STONE": "Pierre Foudre",
"ICE_STONE": "Ice Stone", "ICE_STONE": "Pierre Glace",
"DUSK_STONE": "Dusk Stone", "DUSK_STONE": "Pierre Nuit",
"DAWN_STONE": "Dawn Stone", "DAWN_STONE": "Pierre Aube",
"SHINY_STONE": "Shiny Stone", "SHINY_STONE": "Pierre Éclat",
"CRACKED_POT": "Cracked Pot", "CRACKED_POT": "Théière Fêlée",
"SWEET_APPLE": "Sweet Apple", "SWEET_APPLE": "Pomme Sucrée",
"TART_APPLE": "Tart Apple", "TART_APPLE": "Pomme Acidulée",
"STRAWBERRY_SWEET": "Strawberry Sweet", "STRAWBERRY_SWEET": "Fraise en Sucre",
"UNREMARKABLE_TEACUP": "Unremarkable Teacup", "UNREMARKABLE_TEACUP": "Bol Médiocre",
"CHIPPED_POT": "Chipped Pot", "CHIPPED_POT": "Théière Ébréchée",
"BLACK_AUGURITE": "Black Augurite", "BLACK_AUGURITE": "Obsidienne",
"GALARICA_CUFF": "Galarica Cuff", "GALARICA_CUFF": "Bracelet Galanoa",
"GALARICA_WREATH": "Galarica Wreath", "GALARICA_WREATH": "Couronne Galanoa",
"PEAT_BLOCK": "Peat Block", "PEAT_BLOCK": "Bloc de Tourbe",
"AUSPICIOUS_ARMOR": "Auspicious Armor", "AUSPICIOUS_ARMOR": "Armure de la Fortune",
"MALICIOUS_ARMOR": "Malicious Armor", "MALICIOUS_ARMOR": "Armure de la Rancune",
"MASTERPIECE_TEACUP": "Masterpiece Teacup", "MASTERPIECE_TEACUP": "Bol Exceptionnel",
"METAL_ALLOY": "Metal Alloy", "METAL_ALLOY": "Métal Composite",
"SCROLL_OF_DARKNESS": "Scroll Of Darkness", "SCROLL_OF_DARKNESS": "Rouleau des Ténèbres",
"SCROLL_OF_WATERS": "Scroll Of Waters", "SCROLL_OF_WATERS": "Rouleau de lEau",
"SYRUPY_APPLE": "Syrupy Apple", "SYRUPY_APPLE": "Pomme Nectar",
}, },
FormChangeItem: { FormChangeItem: {
"NONE": "None", "NONE": "Aucun",
"ABOMASITE": "Abomasite", "ABOMASITE": "Blizzarite",
"ABSOLITE": "Absolite", "ABSOLITE": "Absolite",
"AERODACTYLITE": "Aerodactylite", "AERODACTYLITE": "Ptéraïte",
"AGGRONITE": "Aggronite", "AGGRONITE": "Galekingite",
"ALAKAZITE": "Alakazite", "ALAKAZITE": "Alakazamite",
"ALTARIANITE": "Altarianite", "ALTARIANITE": "Altarite",
"AMPHAROSITE": "Ampharosite", "AMPHAROSITE": "Pharampite",
"AUDINITE": "Audinite", "AUDINITE": "Nanméouïte",
"BANETTITE": "Banettite", "BANETTITE": "Branettite",
"BEEDRILLITE": "Beedrillite", "BEEDRILLITE": "Dardargnite",
"BLASTOISINITE": "Blastoisinite", "BLASTOISINITE": "Tortankite",
"BLAZIKENITE": "Blazikenite", "BLAZIKENITE": "Braségalite",
"CAMERUPTITE": "Cameruptite", "CAMERUPTITE": "Caméruptite",
"CHARIZARDITE_X": "Charizardite X", "CHARIZARDITE_X": "Dracaufite X",
"CHARIZARDITE_Y": "Charizardite Y", "CHARIZARDITE_Y": "Dracaufite Y",
"DIANCITE": "Diancite", "DIANCITE": "Diancite",
"GALLADITE": "Galladite", "GALLADITE": "Gallamite",
"GARCHOMPITE": "Garchompite", "GARCHOMPITE": "Carchacrokite",
"GARDEVOIRITE": "Gardevoirite", "GARDEVOIRITE": "Gardevoirite",
"GENGARITE": "Gengarite", "GENGARITE": "Ectoplasmite",
"GLALITITE": "Glalitite", "GLALITITE": "Oniglalite",
"GYARADOSITE": "Gyaradosite", "GYARADOSITE": "Léviatorite",
"HERACRONITE": "Heracronite", "HERACRONITE": "Scarhinoïte",
"HOUNDOOMINITE": "Houndoominite", "HOUNDOOMINITE": "Démolossite",
"KANGASKHANITE": "Kangaskhanite", "KANGASKHANITE": "Kangourexite",
"LATIASITE": "Latiasite", "LATIASITE": "Latiasite",
"LATIOSITE": "Latiosite", "LATIOSITE": "Latiosite",
"LOPUNNITE": "Lopunnite", "LOPUNNITE": "Lockpinite",
"LUCARIONITE": "Lucarionite", "LUCARIONITE": "Lucarite",
"MANECTITE": "Manectite", "MANECTITE": "Élecsprintite",
"MAWILITE": "Mawilite", "MAWILITE": "Mysdibulite",
"MEDICHAMITE": "Medichamite", "MEDICHAMITE": "Charminite",
"METAGROSSITE": "Metagrossite", "METAGROSSITE": "Métalossite",
"MEWTWONITE_X": "Mewtwonite X", "MEWTWONITE_X": "Mewtwoïte X",
"MEWTWONITE_Y": "Mewtwonite Y", "MEWTWONITE_Y": "Mewtwoïte Y",
"PIDGEOTITE": "Pidgeotite", "PIDGEOTITE": "Roucarnagite",
"PINSIRITE": "Pinsirite", "PINSIRITE": "Scarabruite",
"RAYQUAZITE": "Rayquazite", "RAYQUAZITE": "Rayquazite",
"SABLENITE": "Sablenite", "SABLENITE": "Ténéfixite",
"SALAMENCITE": "Salamencite", "SALAMENCITE": "Drattakite",
"SCEPTILITE": "Sceptilite", "SCEPTILITE": "Jungkite",
"SCIZORITE": "Scizorite", "SCIZORITE": "Cizayoxite",
"SHARPEDONITE": "Sharpedonite", "SHARPEDONITE": "Sharpedite",
"SLOWBRONITE": "Slowbronite", "SLOWBRONITE": "Flagadossite",
"STEELIXITE": "Steelixite", "STEELIXITE": "Steelixite",
"SWAMPERTITE": "Swampertite", "SWAMPERTITE": "Laggronite",
"TYRANITARITE": "Tyranitarite", "TYRANITARITE": "Tyranocivite",
"VENUSAURITE": "Venusaurite", "VENUSAURITE": "Florizarrite",
"BLUE_ORB": "Blue Orb", "BLUE_ORB": "Gemme Bleue",
"RED_ORB": "Red Orb", "RED_ORB": "Gemme Rouge",
"SHARP_METEORITE": "Sharp Meteorite", "SHARP_METEORITE": "Méteorite Aiguisée",
"HARD_METEORITE": "Hard Meteorite", "HARD_METEORITE": "Méteorite Solide",
"SMOOTH_METEORITE": "Smooth Meteorite", "SMOOTH_METEORITE": "Méteorite Lisse",
"ADAMANT_CRYSTAL": "Adamant Crystal", "ADAMANT_CRYSTAL": "Globe Adamant",
"LUSTROUS_ORB": "Lustrous Orb", "LUSTROUS_ORB": "Orbe Perlé",
"GRISEOUS_CORE": "Griseous Core", "GRISEOUS_CORE": "Globe Platiné",
"REVEAL_GLASS": "Reveal Glass", "REVEAL_GLASS": "Miroir Sacré",
"GRACIDEA": "Gracidea", "GRACIDEA": "Gracidée",
"MAX_MUSHROOMS": "Max Mushrooms", "MAX_MUSHROOMS": "Maxi Champis",
"DARK_STONE": "Dark Stone", "DARK_STONE": "Galet Noir",
"LIGHT_STONE": "Light Stone", "LIGHT_STONE": "Galet Blanc",
"PRISON_BOTTLE": "Prison Bottle", "PRISON_BOTTLE": "Vase Scellé",
"N_LUNARIZER": "N Lunarizer", "N_LUNARIZER": "Necroluna",
"N_SOLARIZER": "N Solarizer", "N_SOLARIZER": "Necrosol",
"RUSTED_SWORD": "Rusted Sword", "RUSTED_SWORD": "Épée Rouillée",
"RUSTED_SHIELD": "Rusted Shield", "RUSTED_SHIELD": "Bouclier Rouillé",
"ICY_REINS_OF_UNITY": "Icy Reins Of Unity", "ICY_REINS_OF_UNITY": "Rênes de lUnité du Froid",
"SHADOW_REINS_OF_UNITY": "Shadow Reins Of Unity", "SHADOW_REINS_OF_UNITY": "Rênes de lUnité dEffroi",
"WELLSPRING_MASK": "Wellspring Mask", "WELLSPRING_MASK": "Masque du Puits",
"HEARTHFLAME_MASK": "Hearthflame Mask", "HEARTHFLAME_MASK": "Masque du Fourneau",
"CORNERSTONE_MASK": "Cornerstone Mask", "CORNERSTONE_MASK": "Masque de la Pierre",
"SHOCK_DRIVE": "Shock Drive", "SHOCK_DRIVE": "Module Choc",
"BURN_DRIVE": "Burn Drive", "BURN_DRIVE": "Module Pyro",
"CHILL_DRIVE": "Chill Drive", "CHILL_DRIVE": "Module Aqua",
"DOUSE_DRIVE": "Douse Drive", "DOUSE_DRIVE": "Module Choc",
}, },
TeraType: { } as const;
"UNKNOWN": "Unknown",
"NORMAL": "Normal",
"FIGHTING": "Fighting",
"FLYING": "Flying",
"POISON": "Poison",
"GROUND": "Ground",
"ROCK": "Rock",
"BUG": "Bug",
"GHOST": "Ghost",
"STEEL": "Steel",
"FIRE": "Fire",
"WATER": "Water",
"GRASS": "Grass",
"ELECTRIC": "Electric",
"PSYCHIC": "Psychic",
"ICE": "Ice",
"DRAGON": "Dragon",
"DARK": "Dark",
"FAIRY": "Fairy",
"STELLAR": "Stellar",
},
} as const;

View File

@ -0,0 +1,41 @@
import { PokemonInfoTranslationEntries } from "#app/plugins/i18n";
export const pokemonInfo: PokemonInfoTranslationEntries = {
Stat: {
"HP": "PV",
"HPshortened": "PV",
"ATK": "Attaque",
"ATKshortened": "Atq",
"DEF": "Défense",
"DEFshortened": "Déf",
"SPATK": "Atq. Spé.",
"SPATKshortened": "AtqSp",
"SPDEF": "Déf. Spé.",
"SPDEFshortened": "DéfSp",
"SPD": "Vitesse",
"SPDshortened": "Vit"
},
Type: {
"UNKNOWN": "Inconnu",
"NORMAL": "Normal",
"FIGHTING": "Combat",
"FLYING": "Vol",
"POISON": "Poison",
"GROUND": "Sol",
"ROCK": "Roche",
"BUG": "Insecte",
"GHOST": "Spectre",
"STEEL": "Acier",
"FIRE": "Feu",
"WATER": "Eau",
"GRASS": "Plante",
"ELECTRIC": "Électrik",
"PSYCHIC": "Psy",
"ICE": "Glace",
"DRAGON": "Dragon",
"DARK": "Ténèbres",
"FAIRY": "Fée",
"STELLAR": "Stellaire",
},
} as const;

View File

@ -1,16 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const pokemonStat: SimpleTranslationEntries = {
"HP": "PV",
"HPshortened": "PV",
"ATK": "Attaque",
"ATKshortened": "Atq",
"DEF": "Défense",
"DEFshortened": "Déf",
"SPATK": "Atq. Spé.",
"SPATKshortened": "AtqSp",
"SPDEF": "Déf. Spé.",
"SPDEFshortened": "DéfSp",
"SPD": "Vitesse",
"SPDshortened": "Vit"
} as const;

View File

@ -35,7 +35,7 @@ export const trainerClasses: SimpleTranslationEntries = {
"clerk": "Employé", "clerk": "Employé",
"clerk_female": "Employée", "clerk_female": "Employée",
"colleagues": "Collègues de Bureau", "colleagues": "Collègues de Bureau",
"crush_kin": "Crush Kin", "crush_kin": "Duo Baston",
"cyclist": "Cycliste", "cyclist": "Cycliste",
"cyclist_female": "Cycliste", "cyclist_female": "Cycliste",
"cyclists": "Cyclistes", "cyclists": "Cyclistes",
@ -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",

View File

@ -39,6 +39,6 @@ export const weather: SimpleTranslationEntries = {
"harshSunClearMessage": "Les rayons du soleil saffaiblissent !", "harshSunClearMessage": "Les rayons du soleil saffaiblissent !",
"strongWindsStartMessage": "Un vent mystérieux se lève !", "strongWindsStartMessage": "Un vent mystérieux se lève !",
"strongWindsLapseMessage": "Le vent mystérieux violemment !", "strongWindsLapseMessage": "Le vent mystérieux souffle violemment !",
"strongWindsClearMessage": "Le vent mystérieux sest dissipé…" "strongWindsClearMessage": "Le vent mystérieux sest dissipé…"
} }

View File

@ -0,0 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battleMessageUiHandler: SimpleTranslationEntries = {
"ivBest": "Stellare",
"ivFantastic": "Eccellente",
"ivVeryGood": "Notevole",
"ivPrettyGood": "Normale",
"ivDecent": "Sufficiente",
"ivNoGood": "Mediocre",
} as const;

View File

@ -23,16 +23,16 @@ export const battle: SimpleTranslationEntries = {
"attackFailed": "Ma ha fallito!", "attackFailed": "Ma ha fallito!",
"attackHitsCount": `Colpito {{count}} volta/e!`, "attackHitsCount": `Colpito {{count}} volta/e!`,
"expGain": "{{pokemonName}} ha guadagnato\n{{exp}} Punti Esperienza!", "expGain": "{{pokemonName}} ha guadagnato\n{{exp}} Punti Esperienza!",
"levelUp": "{{pokemonName}} è salito al \nlivello {{level}}!", "levelUp": "{{pokemonName}} è salito al\nlivello {{level}}!",
"learnMove": "{{pokemonName}} impara \n{{moveName}}!", "learnMove": "{{pokemonName}} impara\n{{moveName}}!",
"learnMovePrompt": "{{pokemonName}} vorrebbe imparare\n{{moveName}}.", "learnMovePrompt": "{{pokemonName}} vorrebbe imparare\n{{moveName}}.",
"learnMoveLimitReached": "Tuttavia, {{pokemonName}} \nconosce già quattro mosse.", "learnMoveLimitReached": "Tuttavia, {{pokemonName}}\nconosce già quattro mosse.",
"learnMoveReplaceQuestion": "Vuoi che ne dimentichi una e al suo \nposto la sostituisca con {{moveName}}?", "learnMoveReplaceQuestion": "Vuoi che ne dimentichi una e al suo\nposto apprenda {{moveName}}?",
"learnMoveStopTeaching": "Vuoi smettere di fargli imparare \n{{moveName}}?", "learnMoveStopTeaching": "Vuoi smettere di fargli imparare\n{{moveName}}?",
"learnMoveNotLearned": "{{pokemonName}} non ha imparato\n{{moveName}}.", "learnMoveNotLearned": "{{pokemonName}} non ha imparato\n{{moveName}}.",
"learnMoveForgetQuestion": "Quale mossa deve dimenticare?", "learnMoveForgetQuestion": "Quale mossa deve dimenticare?",
"learnMoveForgetSuccess": "{{pokemonName}} ha dimenticato la mossa\n{{moveName}}.", "learnMoveForgetSuccess": "{{pokemonName}} ha dimenticato la mossa\n{{moveName}}.",
"countdownPoof": "@d{32}1, @d{15}2, @d{15}e@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Puff!", "countdownPoof": "@d{32}1, @d{15}2, @d{15}e@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}ta-daaaa!",
"learnMoveAnd": "E…", "learnMoveAnd": "E…",
"levelCapUp": "Il livello massimo\nè aumentato a {{levelCap}}!", "levelCapUp": "Il livello massimo\nè aumentato a {{levelCap}}!",
"moveNotImplemented": "{{moveName}} non è ancora implementata e non può essere selezionata.", "moveNotImplemented": "{{moveName}} non è ancora implementata e non può essere selezionata.",
@ -51,6 +51,6 @@ export const battle: SimpleTranslationEntries = {
"escapeVerbFlee": "fuggendo", "escapeVerbFlee": "fuggendo",
"notDisabled": "{{pokemonName}}'s {{moveName}} non è più\ndisabilitata!", "notDisabled": "{{pokemonName}}'s {{moveName}} non è più\ndisabilitata!",
"skipItemQuestion": "Sei sicuro di non voler prendere nessun oggetto?", "skipItemQuestion": "Sei sicuro di non voler prendere nessun oggetto?",
"eggHatching": "Oh?", "eggHatching": "Oh!",
"ivScannerUseQuestion": "Vuoi usare lo scanner di IV su {{pokemonName}}?" "ivScannerUseQuestion": "Vuoi usare lo scanner di IV su {{pokemonName}}?"
} as const; } as const;

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: "Baccacedro",
effect: "Restituisce il 25% dei PS se i PS sono sotto il 50%",
},
"LUM": {
name: "Baccaprugna",
effect: "Se tenuta da un Pokémon risolve qualsiasi problema di stato",
},
"ENIGMA": {
name: "Baccaenigma",
effect: "Restituisce il 25% dei PS se viene colpito da una mossa superefficace",
},
"LIECHI": {
name: "Baccalici",
effect: "Aumenta l'Attacco se i PS sono sotto il 25%",
},
"GANLON": {
name: "Baccalongan",
effect: "Aumenta la Difesa se i PS sono sotto il 25%",
},
"PETAYA": {
name: "Baccapitaya",
effect: "Aumenta l'Attacco Speciale se i PS sono sotto il 25%",
},
"APICOT": {
name: "Baccacocca",
effect: "Aumenta la Difesa Speciale se i PS sono sotto il 25%",
},
"SALAC": {
name: "Baccasalak",
effect: "Aumenta la Velocità se i PS sono sotto il 25%",
},
"LANSAT": {
name: "Baccalangsa",
effect: "Aumenta la probabilità di Colpo Critico se i PS sono sotto il 25%",
},
"STARF": {
name: "Baccambola",
effect: "Aumenta drasticamente una statistica casuale se i PS sono sotto il 25%",
},
"LEPPA": {
name: "Baccamela",
effect: "Ripristina 10 PP a una mossa se i suoi PP raggiungono lo 0",
},
} as const;

View File

@ -12,13 +12,14 @@ import { move } from "./move";
import { nature } from "./nature"; import { nature } from "./nature";
import { pokeball } from "./pokeball"; import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon"; import { pokemon } from "./pokemon";
import { pokemonStat } from "./pokemon-stat"; import { pokemonInfo } from "./pokemon-info";
import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { titles,trainerClasses,trainerNames } from "./trainers";
import { splashMessages } from "./splash-messages"
import { weather } from "./weather"; import { weather } from "./weather";
import { battleMessageUiHandler } from "./battle-message-ui-handler";
import { berry } from "./berry";
export const itConfig = { export const itConfig = {
ability: ability, ability: ability,
@ -27,20 +28,22 @@ export const itConfig = {
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
egg: egg, egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
menuUiHandler: menuUiHandler, growth: growth,
menu: menu, menu: menu,
menuUiHandler: menuUiHandler,
modifierType: modifierType,
move: move, move: move,
nature: nature,
pokeball: pokeball, pokeball: pokeball,
pokemonStat: pokemonStat,
pokemon: pokemon, pokemon: pokemon,
pokemonInfo: pokemonInfo,
splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler, starterSelectUiHandler: starterSelectUiHandler,
titles: titles, titles: titles,
trainerClasses: trainerClasses, trainerClasses: trainerClasses,
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
splashMessages: splashMessages,
nature: nature,
growth: growth,
weather: weather, weather: weather,
modifierType: modifierType, battleMessageUiHandler: battleMessageUiHandler,
} berry: berry,
}

View File

@ -384,26 +384,4 @@ export const modifierType: ModifierTypeTranslationEntries = {
"CHILL_DRIVE": "Gelomodulo", "CHILL_DRIVE": "Gelomodulo",
"DOUSE_DRIVE": "Idromodulo", "DOUSE_DRIVE": "Idromodulo",
}, },
TeraType: {
"UNKNOWN": "Sconosciuto",
"NORMAL": "Normale",
"FIGHTING": "Lotta",
"FLYING": "Volante",
"POISON": "Veleno",
"GROUND": "Terra",
"ROCK": "Roccia",
"BUG": "Coleottero",
"GHOST": "Spettro",
"STEEL": "Acciaio",
"FIRE": "Fuoco",
"WATER": "Acqua",
"GRASS": "Erba",
"ELECTRIC": "Elettro",
"PSYCHIC": "Psico",
"ICE": "Ghiaccio",
"DRAGON": "Drago",
"DARK": "Buio",
"FAIRY": "Folletto",
"STELLAR": "Astrale",
},
} as const; } as const;

View File

@ -0,0 +1,41 @@
import { PokemonInfoTranslationEntries } from "#app/plugins/i18n";
export const pokemonInfo: PokemonInfoTranslationEntries = {
Stat: {
"HP": "PS Max",
"HPshortened": "PS",
"ATK": "Attacco",
"ATKshortened": "Att",
"DEF": "Difesa",
"DEFshortened": "Dif",
"SPATK": "Att. Sp.",
"SPATKshortened": "AttSp",
"SPDEF": "Dif. Sp.",
"SPDEFshortened": "DifSp",
"SPD": "Velocità",
"SPDshortened": "Vel"
},
Type: {
"UNKNOWN": "Sconosciuto",
"NORMAL": "Normale",
"FIGHTING": "Lotta",
"FLYING": "Volante",
"POISON": "Veleno",
"GROUND": "Terra",
"ROCK": "Roccia",
"BUG": "Coleottero",
"GHOST": "Spettro",
"STEEL": "Acciaio",
"FIRE": "Fuoco",
"WATER": "Acqua",
"GRASS": "Erba",
"ELECTRIC": "Elettro",
"PSYCHIC": "Psico",
"ICE": "Ghiaccio",
"DRAGON": "Drago",
"DARK": "Buio",
"FAIRY": "Folletto",
"STELLAR": "Astrale",
},
} as const;

View File

@ -1,16 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const pokemonStat: SimpleTranslationEntries = {
"HP": "PS Max",
"HPshortened": "PS",
"ATK": "Attacco",
"ATKshortened": "Att",
"DEF": "Difesa",
"DEFshortened": "Dif",
"SPATK": "Att. Sp.",
"SPATKshortened": "AttSp",
"SPDEF": "Dif. Sp.",
"SPDEFshortened": "DifSp",
"SPD": "Velocità",
"SPDshortened": "Vel"
} as const;

View File

@ -2,13 +2,13 @@ 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": "Superquattro",
"gym_leader": "Gym Leader", "gym_leader": "Capopalestra",
"gym_leader_female": "Gym Leader", "gym_leader_female": "Capopalestra",
"champion": "Champion", "champion": "Campione",
"rival": "Rival", "rival": "Rivale",
"professor": "Professor", "professor": "Professore",
"frontier_brain": "Frontier Brain", "frontier_brain": "Asso Lotta",
// 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;
@ -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,5 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const abilityTriggers: SimpleTranslationEntries = {
'blockRecoilDamage' : `{{abilityName}} de {{pokemonName}}\nprotegeu-o do dano de recuo!`,
} as const;

View File

@ -0,0 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battleMessageUiHandler: SimpleTranslationEntries = {
"ivBest": "Melhor",
"ivFantastic": "Fantástico",
"ivVeryGood": "Muito Bom",
"ivPrettyGood": "Bom",
"ivDecent": "Regular",
"ivNoGood": "Ruim",
} as const;

View File

@ -3,13 +3,13 @@ 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!", "trainerAppearedDouble": "{{trainerName}}\nquerem batalhar!",
"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!",
"trainerComeBack": "{{trainerName}} retirou {{pokemonName}} da batalha!", "trainerComeBack": "{{trainerName}} retirou {{pokemonName}} da batalha!",
"playerGo": "{{pokemonName}}, eu escolho você!", "playerGo": "{{pokemonName}}, eu escolho você!",
"trainerGo": "{{trainerName}} enviou {{pokemonName}}!", "trainerGo": "{{trainerName}} escolheu {{pokemonName}}!",
"switchQuestion": "Quer trocar\nde {{pokemonName}}?", "switchQuestion": "Quer trocar\nde {{pokemonName}}?",
"trainerDefeated": "Você derrotou\n{{trainerName}}!", "trainerDefeated": "Você derrotou\n{{trainerName}}!",
"pokemonCaught": "{{pokemonName}} foi capturado!", "pokemonCaught": "{{pokemonName}} foi capturado!",

View File

@ -0,0 +1,48 @@
import { BerryTranslationEntries } from "#app/plugins/i18n";
export const berry: BerryTranslationEntries = {
"SITRUS": {
name: "Fruta Sitrus",
effect: "Restaura 25% dos PS se os PS estiverem abaixo de 50%",
},
"LUM": {
name: "Fruta Lum",
effect: "Cura qualquer mudança de estado ou confusão",
},
"ENIGMA": {
name: "Fruta Enigma",
effect: "Restaura 25% dos PS se atingido por um golpe supereficaz",
},
"LIECHI": {
name: "Fruta Liechi",
effect: "Aumenta o Ataque se os PS estiverem abaixo de 25%",
},
"GANLON": {
name: "Fruta Ganlon",
effect: "Aumenta a Defesa se os PS estiverem abaixo de 25%",
},
"PETAYA": {
name: "Fruta Petaya",
effect: "Aumenta o Ataque Especial se os PS estiverem abaixo de 25%",
},
"APICOT": {
name: "Fruta Apicot",
effect: "Aumenta a Defesa Especial se os PS estiverem abaixo de 25%",
},
"SALAC": {
name: "Fruta Salac",
effect: "Aumenta a Velocidade se os PS estiverem abaixo de 25%",
},
"LANSAT": {
name: "Fruta Lansat",
effect: "Aumenta a chance de acerto crítico se os PS estiverem abaixo de 25%",
},
"STARF": {
name: "Fruta Starf",
effect: "Aumenta drasticamente um atributo aleatório se os PS estiverem abaixo de 25%",
},
"LEPPA": {
name: "Fruta Leppa",
effect: "Restaura 10 PP de um movimento se seus PP acabarem",
},
} as const;

View File

@ -1,6 +1,8 @@
import { ability } from "./ability"; import { ability } from "./ability";
import { abilityTriggers } from "./ability-trigger";
import { battle } from "./battle"; import { battle } from "./battle";
import { commandUiHandler } from "./command-ui-handler"; import { commandUiHandler } from "./command-ui-handler";
import { egg } from "./egg";
import { fightUiHandler } from "./fight-ui-handler"; import { fightUiHandler } from "./fight-ui-handler";
import { growth } from "./growth"; import { growth } from "./growth";
import { menu } from "./menu"; import { menu } from "./menu";
@ -10,27 +12,37 @@ import { move } from "./move";
import { nature } from "./nature"; import { nature } from "./nature";
import { pokeball } from "./pokeball"; import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon"; import { pokemon } from "./pokemon";
import { pokemonStat } from "./pokemon-stat"; import { pokemonInfo } from "./pokemon-info";
import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers";
import { 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 = {
ability: ability, ability: ability,
abilityTriggers: abilityTriggers,
battle: battle, battle: battle,
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
menuUiHandler: menuUiHandler, menuUiHandler: menuUiHandler,
menu: menu, menu: menu,
move: move, move: move,
pokeball: pokeball, pokeball: pokeball,
pokemonStat: pokemonStat, pokemonInfo: pokemonInfo,
pokemon: pokemon, pokemon: pokemon,
starterSelectUiHandler: starterSelectUiHandler, starterSelectUiHandler: starterSelectUiHandler,
titles: titles,
trainerClasses: trainerClasses,
trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
splashMessages: splashMessages,
nature: nature, nature: nature,
growth: growth, growth: growth,
weather: weather, weather: weather,
modifierType: modifierType, modifierType: modifierType,
} berry: berry,
}

21
src/locales/pt_BR/egg.ts Normal file
View File

@ -0,0 +1,21 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const egg: SimpleTranslationEntries = {
"egg": "Ovo",
"greatTier": "Raro",
"ultraTier": "Épico",
"masterTier": "Lendário",
"defaultTier": "Comum",
"hatchWavesMessageSoon": "Barulhos podem ser ouvidos vindo de dentro! Vai chocar em breve!",
"hatchWavesMessageClose": "Parece se mover ocasionalmente. Pode estar perto de chocar.",
"hatchWavesMessageNotClose": "O que vai nascer disso? Não parece estar perto de chocar.",
"hatchWavesMessageLongTime": "Parece que este ovo vai demorar bastante para chocar.",
"gachaTypeLegendary": "Chance de Lendário Aumentada",
"gachaTypeMove": "Chance de Movimento de Ovo Raro Aumentada",
"gachaTypeShiny": "Chance de Shiny Aumentada",
"selectMachine": "Escolha uma máquina.",
"notEnoughVouchers": "Você não tem vouchers suficientes!",
"tooManyEggs": "Você já tem muitos ovos!",
"pull": "Prêmio",
"pulls": "Prêmios"
} as const;

View File

@ -4,406 +4,384 @@ export const modifierType: ModifierTypeTranslationEntries = {
ModifierType: { ModifierType: {
"AddPokeballModifierType": { "AddPokeballModifierType": {
name: "{{modifierCount}}x {{pokeballName}}", name: "{{modifierCount}}x {{pokeballName}}",
description: "Receive {{pokeballName}} x{{modifierCount}} (Inventory: {{pokeballAmount}}) \nCatch Rate: {{catchRate}}", description: "Ganhe x{{modifierCount}} {{pokeballName}} (Mochila: {{pokeballAmount}}) \nChance de captura: {{catchRate}}",
}, },
"AddVoucherModifierType": { "AddVoucherModifierType": {
name: "{{modifierCount}}x {{voucherTypeName}}", name: "{{modifierCount}}x {{voucherTypeName}}",
description: "Receive {{voucherTypeName}} x{{modifierCount}}", description: "Ganhe x{{modifierCount}} {{voucherTypeName}}",
}, },
"PokemonHeldItemModifierType": { "PokemonHeldItemModifierType": {
extra: { extra: {
"inoperable": "{{pokemonName}} can't take\nthis item!", "inoperable": "{{pokemonName}} não pode\nsegurar esse item!",
"tooMany": "{{pokemonName}} has too many\nof this item!", "tooMany": "{{pokemonName}} tem muitos\nmuitos deste item!",
} }
}, },
"PokemonHpRestoreModifierType": { "PokemonHpRestoreModifierType": {
description: "Restores {{restorePoints}} HP or {{restorePercent}}% HP for one Pokémon, whichever is higher", description: "Restaura {{restorePoints}} PS ou {{restorePercent}}% PS de um Pokémon, o que for maior",
extra: { extra: {
"fully": "Fully restores HP for one Pokémon", "fully": "Restaura totalmente os PS de um Pokémon",
"fullyWithStatus": "Fully restores HP for one Pokémon and heals any status ailment", "fullyWithStatus": "Restaura totalmente os PS de um Pokémon e cura qualquer mudança de estado",
} }
}, },
"PokemonReviveModifierType": { "PokemonReviveModifierType": {
description: "Revives one Pokémon and restores {{restorePercent}}% HP", description: "Reanima um Pokémon e restaura {{restorePercent}}% PS",
}, },
"PokemonStatusHealModifierType": { "PokemonStatusHealModifierType": {
description: "Heals any status ailment for one Pokémon", description: "Cura uma mudança de estado de um Pokémon",
}, },
"PokemonPpRestoreModifierType": { "PokemonPpRestoreModifierType": {
description: "Restores {{restorePoints}} PP for one Pokémon move", description: "Restaura {{restorePoints}} PP para um movimento de um Pokémon",
extra: { extra: {
"fully": "Restores all PP for one Pokémon move", "fully": "Restaura todos os PP para um movimento de um Pokémon",
} }
}, },
"PokemonAllMovePpRestoreModifierType": { "PokemonAllMovePpRestoreModifierType": {
description: "Restores {{restorePoints}} PP for all of one Pokémon's moves", description: "Restaura {{restorePoints}} PP para todos os movimentos de um Pokémon",
extra: { extra: {
"fully": "Restores all PP for all of one Pokémon's moves", "fully": "Restaura todos os PP para todos os movimentos de um Pokémon",
} }
}, },
"PokemonPpUpModifierType": { "PokemonPpUpModifierType": {
description: "Permanently increases PP for one Pokémon move by {{upPoints}} for every 5 maximum PP (maximum 3)", description: "Aumenta permanentemente os PP para o movimento de um Pokémon em {{upPoints}} para cada 5 PP máximos (máximo 3)",
}, },
"PokemonNatureChangeModifierType": { "PokemonNatureChangeModifierType": {
name: "{{natureName}} Mint", name: "{{natureName}} Mint",
description: "Changes a Pokémon's nature to {{natureName}} and permanently unlocks the nature for the starter.", description: "Muda a natureza de um Pokémon para {{natureName}} e a desbloqueia permanentemente para seu inicial",
}, },
"DoubleBattleChanceBoosterModifierType": { "DoubleBattleChanceBoosterModifierType": {
description: "Doubles the chance of an encounter being a double battle for {{battleCount}} battles", description: "Dobra as chances de encontrar uma batalha em dupla por {{battleCount}} batalhas",
}, },
"TempBattleStatBoosterModifierType": { "TempBattleStatBoosterModifierType": {
description: "Increases the {{tempBattleStatName}} of all party members by 1 stage for 5 battles", description: "Aumenta o atributo de {{tempBattleStatName}} para todos os membros da equipe por 5 batalhas",
}, },
"AttackTypeBoosterModifierType": { "AttackTypeBoosterModifierType": {
description: "Increases the power of a Pokémon's {{moveType}}-type moves by 20%", description: "Aumenta o poder dos ataques do tipo {{moveType}} de um Pokémon em 20%",
}, },
"PokemonLevelIncrementModifierType": { "PokemonLevelIncrementModifierType": {
description: "Increases a Pokémon's level by 1", description: "Aumenta em 1 o nível de um Pokémon",
}, },
"AllPokemonLevelIncrementModifierType": { "AllPokemonLevelIncrementModifierType": {
description: "Increases all party members' level by 1", description: "Aumenta em 1 os níveis de todos os Pokémon",
}, },
"PokemonBaseStatBoosterModifierType": { "PokemonBaseStatBoosterModifierType": {
description: "Increases the holder's base {{statName}} by 10%. The higher your IVs, the higher the stack limit.", description: "Aumenta o atributo base de {{statName}} em 10%. Quanto maior os IVs, maior o limite de aumento",
}, },
"AllPokemonFullHpRestoreModifierType": { "AllPokemonFullHpRestoreModifierType": {
description: "Restores 100% HP for all Pokémon", description: "Restaura totalmente os PS de todos os Pokémon",
}, },
"AllPokemonFullReviveModifierType": { "AllPokemonFullReviveModifierType": {
description: "Revives all fainted Pokémon, fully restoring HP", description: "Reanima todos os Pokémon, restaurando totalmente seus PS",
}, },
"MoneyRewardModifierType": { "MoneyRewardModifierType": {
description: "Grants a {{moneyMultiplier}} amount of money (₽{{moneyAmount}})", description: "Garante uma quantidade {{moneyMultiplier}} de dinheiro (₽{{moneyAmount}})",
extra: { extra: {
"small": "small", "small": "pequena",
"moderate": "moderate", "moderate": "moderada",
"large": "large", "large": "grande",
}, },
}, },
"ExpBoosterModifierType": { "ExpBoosterModifierType": {
description: "Increases gain of EXP. Points by {{boostPercent}}%", description: "Aumenta o ganho de pontos de experiência em {{boostPercent}}%",
}, },
"PokemonExpBoosterModifierType": { "PokemonExpBoosterModifierType": {
description: "Increases the holder's gain of EXP. Points by {{boostPercent}}%", description: "Aumenta o ganho de pontos de experiência de quem segura em {{boostPercent}}%",
}, },
"PokemonFriendshipBoosterModifierType": { "PokemonFriendshipBoosterModifierType": {
description: "Increases friendship gain per victory by 50%", description: "Aumenta o ganho de amizade por vitória em 50%",
}, },
"PokemonMoveAccuracyBoosterModifierType": { "PokemonMoveAccuracyBoosterModifierType": {
description: "Increases move accuracy by {{accuracyAmount}} (maximum 100)", description: "Aumenta a precisão dos movimentos em {{accuracyAmount}} (máximo 100)",
}, },
"PokemonMultiHitModifierType": { "PokemonMultiHitModifierType": {
description: "Attacks hit one additional time at the cost of a 60/75/82.5% power reduction per stack respectively", description: "Ataques acertam uma vez adicional ao custo de uma redução de poder de 60/75/82.5% por item, respectivamente",
}, },
"TmModifierType": { "TmModifierType": {
name: "TM{{moveId}} - {{moveName}}", name: "TM{{moveId}} - {{moveName}}",
description: "Teach {{moveName}} to a Pokémon", description: "Ensina {{moveName}} a um Pokémon",
}, },
"EvolutionItemModifierType": { "EvolutionItemModifierType": {
description: "Causes certain Pokémon to evolve", description: "Faz certos Pokémon evoluírem",
}, },
"FormChangeItemModifierType": { "FormChangeItemModifierType": {
description: "Causes certain Pokémon to change form", description: "Faz certos Pokémon mudarem de forma",
}, },
"FusePokemonModifierType": { "FusePokemonModifierType": {
description: "Combines two Pokémon (transfers Ability, splits base stats and types, shares move pool)", description: "Combina dois Pokémon (transfere Habilidade, divide os atributos base e tipos, compartilha os movimentos)",
}, },
"TerastallizeModifierType": { "TerastallizeModifierType": {
name: "{{teraType}} Tera Shard", name: "{{teraType}} Fragmento Tera",
description: "{{teraType}} Terastallizes the holder for up to 10 battles", description: "{{teraType}} Terastaliza um Pokémon por até 10 batalhas",
}, },
"ContactHeldItemTransferChanceModifierType": { "ContactHeldItemTransferChanceModifierType": {
description: "Upon attacking, there is a {{chancePercent}}% chance the foe's held item will be stolen", description: "Quando atacar, tem {{chancePercent}}% de chance de roubar um item do oponente",
}, },
"TurnHeldItemTransferModifierType": { "TurnHeldItemTransferModifierType": {
description: "Every turn, the holder acquires one held item from the foe", description: "Todo turno, o Pokémon ganha um item aleatório do oponente",
}, },
"EnemyAttackStatusEffectChanceModifierType": { "EnemyAttackStatusEffectChanceModifierType": {
description: "Adds a {{chancePercent}}% chance to inflict {{statusEffect}} with attack moves", description: "Ganha {{chancePercent}}% de chance de infligir {{statusEffect}} com ataques",
}, },
"EnemyEndureChanceModifierType": { "EnemyEndureChanceModifierType": {
description: "Adds a {{chancePercent}}% chance of enduring a hit", description: "Ganha {{chancePercent}}% de chance de sobreviver a um ataque que o faria desmaiar",
}, },
"RARE_CANDY": { name: "Rare Candy" }, "RARE_CANDY": { name: "Doce Raro" },
"RARER_CANDY": { name: "Rarer Candy" }, "RARER_CANDY": { name: "Doce Raríssimo" },
"MEGA_BRACELET": { name: "Mega Bracelet", description: "Mega Stones become available" }, "MEGA_BRACELET": { name: "Mega Bracelete", description: "Mega Stones become available" },
"DYNAMAX_BAND": { name: "Dynamax Band", description: "Max Mushrooms become available" }, "DYNAMAX_BAND": { name: "Bracelete Dynamax", description: "Max Mushrooms become available" },
"TERA_ORB": { name: "Tera Orb", description: "Tera Shards become available" }, "TERA_ORB": { name: "Orbe Tera", description: "Fragmentos Tera ficam disponíveis" },
"MAP": { name: "Map", description: "Allows you to choose your destination at a crossroads" }, "MAP": { name: "Mapa", description: "Permite escolher a próxima rota" },
"POTION": { name: "Potion" }, "POTION": { name: "Poção" },
"SUPER_POTION": { name: "Super Potion" }, "SUPER_POTION": { name: "Super Poção" },
"HYPER_POTION": { name: "Hyper Potion" }, "HYPER_POTION": { name: "Hiper Poção" },
"MAX_POTION": { name: "Max Potion" }, "MAX_POTION": { name: "Poção Máxima" },
"FULL_RESTORE": { name: "Full Restore" }, "FULL_RESTORE": { name: "Restaurador" },
"REVIVE": { name: "Revive" }, "REVIVE": { name: "Reanimador" },
"MAX_REVIVE": { name: "Max Revive" }, "MAX_REVIVE": { name: "Reanimador Máximo" },
"FULL_HEAL": { name: "Full Heal" }, "FULL_HEAL": { name: "Cura Total" },
"SACRED_ASH": { name: "Sacred Ash" }, "SACRED_ASH": { name: "Cinza Sagrada" },
"REVIVER_SEED": { name: "Reviver Seed", description: "Revives the holder for 1/2 HP upon fainting" }, "REVIVER_SEED": { name: "Semente Reanimadora", description: "Após desmaiar, reanima com 50% de PS" },
"ETHER": { name: "Ether" }, "ETHER": { name: "Éter" },
"MAX_ETHER": { name: "Max Ether" }, "MAX_ETHER": { name: "Éter Máximo" },
"ELIXIR": { name: "Elixir" }, "ELIXIR": { name: "Elixir" },
"MAX_ELIXIR": { name: "Max Elixir" }, "MAX_ELIXIR": { name: "Elixir Máximo" },
"PP_UP": { name: "PP Up" }, "PP_UP": { name: "Mais PP" },
"PP_MAX": { name: "PP Max" }, "PP_MAX": { name: "PP Máximo" },
"LURE": { name: "Lure" }, "LURE": { name: "Incenso" },
"SUPER_LURE": { name: "Super Lure" }, "SUPER_LURE": { name: "Super Incenso" },
"MAX_LURE": { name: "Max Lure" }, "MAX_LURE": { name: "Incenso Máximo" },
"MEMORY_MUSHROOM": { name: "Memory Mushroom", description: "Recall one Pokémon's forgotten move" }, "MEMORY_MUSHROOM": { name: "Cogumemória", description: "Relembra um movimento esquecido" },
"EXP_SHARE": { name: "EXP. All", description: "Non-participants receive 20% of a single participant's EXP. Points" }, "EXP_SHARE": { name: "Compart. de Exp.", description: "Distribui pontos de experiência para todos os membros da equipe" },
"EXP_BALANCE": { name: "EXP. Balance", description: "Weighs EXP. Points received from battles towards lower-leveled party members" }, "EXP_BALANCE": { name: "Balanceador de Exp.", description: "Distribui pontos de experiência principalmente para os Pokémon mais fracos" },
"OVAL_CHARM": { name: "Oval Charm", description: "When multiple Pokémon participate in a battle, each gets an extra 10% of the total EXP" }, "OVAL_CHARM": { name: "Amuleto Oval", description: "Quando vários Pokémon participam de uma batalha, cada um recebe 10% extra de pontos de experiência" },
"EXP_CHARM": { name: "EXP. Charm" }, "EXP_CHARM": { name: "Amuleto de Exp." },
"SUPER_EXP_CHARM": { name: "Super EXP. Charm" }, "SUPER_EXP_CHARM": { name: "Super Amuleto de Exp." },
"GOLDEN_EXP_CHARM": { name: "Golden EXP. Charm" }, "GOLDEN_EXP_CHARM": { name: "Amuleto de Exp. Dourado" },
"LUCKY_EGG": { name: "Lucky Egg" }, "LUCKY_EGG": { name: "Ovo da Sorte" },
"GOLDEN_EGG": { name: "Golden Egg" }, "GOLDEN_EGG": { name: "Ovo Dourado" },
"SOOTHE_BELL": { name: "Soothe Bell" }, "SOOTHE_BELL": { name: "Guizo" },
"SOUL_DEW": { name: "Soul Dew", description: "Increases the influence of a Pokémon's nature on its stats by 10% (additive)" }, "SOUL_DEW": { name: "Joia da Alma", description: "Aumenta a influência da natureza de um Pokémon em seus atributos em 10% (cumulativo)" },
"NUGGET": { name: "Nugget" }, "NUGGET": { name: "Pepita" },
"BIG_NUGGET": { name: "Big Nugget" }, "BIG_NUGGET": { name: "Pepita Grande" },
"RELIC_GOLD": { name: "Relic Gold" }, "RELIC_GOLD": { name: "Relíquia de Ouro" },
"AMULET_COIN": { name: "Amulet Coin", description: "Increases money rewards by 20%" }, "AMULET_COIN": { name: "Moeda Amuleto", description: "Aumenta a recompensa de dinheiro em 50%" },
"GOLDEN_PUNCH": { name: "Golden Punch", description: "Grants 50% of damage inflicted as money" }, "GOLDEN_PUNCH": { name: "Soco Dourado", description: "Concede 50% do dano causado em dinheiro" },
"COIN_CASE": { name: "Coin Case", description: "After every 10th battle, receive 10% of your money in interest" }, "COIN_CASE": { name: "Moedeira", description: "Após cada 10ª batalha, recebe 10% de seu dinheiro em juros" },
"LOCK_CAPSULE": { name: "Lock Capsule", description: "Allows you to lock item rarities when rerolling items" }, "LOCK_CAPSULE": { name: "Cápsula de Travamento", description: "Permite que você trave raridades de itens ao rolar novamente" },
"GRIP_CLAW": { name: "Grip Claw" }, "GRIP_CLAW": { name: "Garra-Aperto" },
"WIDE_LENS": { name: "Wide Lens" }, "WIDE_LENS": { name: "Lente Ampla" },
"MULTI_LENS": { name: "Multi Lens" }, "MULTI_LENS": { name: "Multi Lentes" },
"HEALING_CHARM": { name: "Healing Charm", description: "Increases the effectiveness of HP restoring moves and items by 10% (excludes Revives)" }, "HEALING_CHARM": { name: "Amuleto de Cura", description: "Aumenta a eficácia dos movimentos e itens que restauram PS em 10% (exceto Reanimador)" },
"CANDY_JAR": { name: "Candy Jar", description: "Increases the number of levels added by Rare Candy items by 1" }, "CANDY_JAR": { name: "Pote de Doces", description: "Aumenta o número de níveis adicionados pelo Doce Raro em 1" },
"BERRY_POUCH": { name: "Berry Pouch", description: "Adds a 25% chance that a used berry will not be consumed" }, "BERRY_POUCH": { name: "Bolsa de Berries", description: "Adiciona uma chance de 25% de que uma berry usada não seja consumida" },
"FOCUS_BAND": { name: "Focus Band", description: "Adds a 10% chance to survive with 1 HP after being damaged enough to faint" }, "FOCUS_BAND": { name: "Bandana", description: "Adiciona uma chance de 10% de sobreviver com 1 PS após ser danificado o suficiente para desmaiar" },
"QUICK_CLAW": { name: "Quick Claw", description: "Adds a 10% chance to move first regardless of speed (after priority)" }, "QUICK_CLAW": { name: "Garra Rápida", description: "Adiciona uma chance de 10% de atacar primeiro, ignorando sua velocidade (após prioridades)" },
"KINGS_ROCK": { name: "King's Rock", description: "Adds a 10% chance an attack move will cause the opponent to flinch" }, "KINGS_ROCK": { name: "Pedra do Rei", description: "Adiciona uma chance de 10% de movimentos fazerem o oponente hesitar" },
"LEFTOVERS": { name: "Leftovers", description: "Heals 1/16 of a Pokémon's maximum HP every turn" }, "LEFTOVERS": { name: "Sobras", description: "Cura 1/16 dos PS máximos de um Pokémon a cada turno" },
"SHELL_BELL": { name: "Shell Bell", description: "Heals 1/8 of a Pokémon's dealt damage" }, "SHELL_BELL": { name: "Concha-Sino", description: "Cura 1/8 do dano causado por um Pokémon" },
"BATON": { name: "Baton", description: "Allows passing along effects when switching Pokémon, which also bypasses traps" }, "BATON": { name: "Bastão", description: "Permite passar mudanças de atributo ao trocar Pokémon, ignorando armadilhas" },
"SHINY_CHARM": { name: "Shiny Charm", description: "Dramatically increases the chance of a wild Pokémon being Shiny" }, "SHINY_CHARM": { name: "Amuleto Brilhante", description: "Aumenta drasticamente a chance de um Pokémon selvagem ser Shiny" },
"ABILITY_CHARM": { name: "Ability Charm", description: "Dramatically increases the chance of a wild Pokémon having a Hidden Ability" }, "ABILITY_CHARM": { name: "Amuleto de Habilidade", description: "Aumenta drasticamente a chance de um Pokémon selvagem ter uma Habilidade Oculta" },
"IV_SCANNER": { name: "IV Scanner", description: "Allows scanning the IVs of wild Pokémon. 2 IVs are revealed per stack. The best IVs are shown first" }, "IV_SCANNER": { name: "Scanner de IVs", description: "Permite escanear os IVs de Pokémon selvagens. 2 IVs são revelados por item. Os melhores IVs são mostrados primeiro" },
"DNA_SPLICERS": { name: "DNA Splicers" }, "DNA_SPLICERS": { name: "Splicer de DNA" },
"MINI_BLACK_HOLE": { name: "Mini Black Hole" }, "MINI_BLACK_HOLE": { name: "Mini Buraco Negro" },
"GOLDEN_POKEBALL": { name: "Golden Poké Ball", description: "Adds 1 extra item option at the end of every battle" }, "GOLDEN_POKEBALL": { name: "Poké Bola Dourada", description: "Adiciona 1 opção de item extra ao final de cada batalha" },
"ENEMY_DAMAGE_BOOSTER": { name: "Damage Token", description: "Increases damage by 5%" }, "ENEMY_DAMAGE_BOOSTER": { name: "Token de Dano", description: "Aumenta o dano em 5%" },
"ENEMY_DAMAGE_REDUCTION": { name: "Protection Token", description: "Reduces incoming damage by 2.5%" }, "ENEMY_DAMAGE_REDUCTION": { name: "Token de Proteção", description: "Reduz o dano recebido em 2,5%" },
"ENEMY_HEAL": { name: "Recovery Token", description: "Heals 2% of max HP every turn" }, "ENEMY_HEAL": { name: "Token de Recuperação", description: "Cura 2% dos PS máximos a cada turno" },
"ENEMY_ATTACK_POISON_CHANCE": { name: "Poison Token" }, "ENEMY_ATTACK_POISON_CHANCE": { name: "Token de Veneno" },
"ENEMY_ATTACK_PARALYZE_CHANCE": { name: "Paralyze Token" }, "ENEMY_ATTACK_PARALYZE_CHANCE": { name: "Token de Paralisia" },
"ENEMY_ATTACK_SLEEP_CHANCE": { name: "Sleep Token" }, "ENEMY_ATTACK_SLEEP_CHANCE": { name: "Token de Sono" },
"ENEMY_ATTACK_FREEZE_CHANCE": { name: "Freeze Token" }, "ENEMY_ATTACK_FREEZE_CHANCE": { name: "Token de Congelamento" },
"ENEMY_ATTACK_BURN_CHANCE": { name: "Burn Token" }, "ENEMY_ATTACK_BURN_CHANCE": { name: "Token de Queimadura" },
"ENEMY_STATUS_EFFECT_HEAL_CHANCE": { name: "Full Heal Token", description: "Adds a 10% chance every turn to heal a status condition" }, "ENEMY_STATUS_EFFECT_HEAL_CHANCE": { name: "Token de Cura Total", description: "Adiciona uma chance de 10% a cada turno de curar uma condição de status" },
"ENEMY_ENDURE_CHANCE": { name: "Endure Token" }, "ENEMY_ENDURE_CHANCE": { name: "Token de Persistência" },
"ENEMY_FUSED_CHANCE": { name: "Fusion Token", description: "Adds a 1% chance that a wild Pokémon will be a fusion" }, "ENEMY_FUSED_CHANCE": { name: "Token de Fusão", description: "Adiciona uma chance de 1% de que um Pokémon selvagem seja uma fusão" },
}, },
TempBattleStatBoosterItem: { TempBattleStatBoosterItem: {
"x_attack": "X Attack", "x_attack": "Ataque X",
"x_defense": "X Defense", "x_defense": "Defesa X",
"x_sp_atk": "X Sp. Atk", "x_sp_atk": "Ataque Esp. X",
"x_sp_def": "X Sp. Def", "x_sp_def": "Defesa Esp. X",
"x_speed": "X Speed", "x_speed": "Velocidade X",
"x_accuracy": "X Accuracy", "x_accuracy": "Precisão X",
"dire_hit": "Dire Hit", "dire_hit": "Direto",
}, },
AttackTypeBoosterItem: { AttackTypeBoosterItem: {
"silk_scarf": "Silk Scarf", "silk_scarf": "Lenço de Seda",
"black_belt": "Black Belt", "black_belt": "Faixa Preta",
"sharp_beak": "Sharp Beak", "sharp_beak": "Bico Afiado",
"poison_barb": "Poison Barb", "poison_barb": "Farpa Venenosa",
"soft_sand": "Soft Sand", "soft_sand": "Areia Macia",
"hard_stone": "Hard Stone", "hard_stone": "Pedra Dura",
"silver_powder": "Silver Powder", "silver_powder": "Pó de Prata",
"spell_tag": "Spell Tag", "spell_tag": "Talismã de Feitiço",
"metal_coat": "Metal Coat", "metal_coat": "Revestimento Metálico",
"charcoal": "Charcoal", "charcoal": "Carvão",
"mystic_water": "Mystic Water", "mystic_water": "Água Mística",
"miracle_seed": "Miracle Seed", "miracle_seed": "Semente Milagrosa",
"magnet": "Magnet", "magnet": "Ímã",
"twisted_spoon": "Twisted Spoon", "twisted_spoon": "Colher Torcida",
"never_melt_ice": "Never-Melt Ice", "never_melt_ice": "Gelo Eterno",
"dragon_fang": "Dragon Fang", "dragon_fang": "Presa de Dragão",
"black_glasses": "Black Glasses", "black_glasses": "Óculos Escuros",
"fairy_feather": "Fairy Feather", "fairy_feather": "Pena de Fada",
}, },
BaseStatBoosterItem: { BaseStatBoosterItem: {
"hp_up": "HP Up", "hp_up": "Mais PS",
"protein": "Protein", "protein": "Proteína",
"iron": "Iron", "iron": "Ferro",
"calcium": "Calcium", "calcium": "Cálcio",
"zinc": "Zinc", "zinc": "Zinco",
"carbos": "Carbos", "carbos": "Carboidrato",
}, },
EvolutionItem: { EvolutionItem: {
"NONE": "None", "NONE": "None",
"LINKING_CORD": "Linking Cord", "LINKING_CORD": "Cabo de Conexão",
"SUN_STONE": "Sun Stone", "SUN_STONE": "Pedra do Sol",
"MOON_STONE": "Moon Stone", "MOON_STONE": "Pedra da Lua",
"LEAF_STONE": "Leaf Stone", "LEAF_STONE": "Pedra da Folha",
"FIRE_STONE": "Fire Stone", "FIRE_STONE": "Pedra do Fogo",
"WATER_STONE": "Water Stone", "WATER_STONE": "Pedra da Água",
"THUNDER_STONE": "Thunder Stone", "THUNDER_STONE": "Pedra do Trovão",
"ICE_STONE": "Ice Stone", "ICE_STONE": "Pedra do Gelo",
"DUSK_STONE": "Dusk Stone", "DUSK_STONE": "Pedra do Crepúsculo",
"DAWN_STONE": "Dawn Stone", "DAWN_STONE": "Pedra da Alvorada",
"SHINY_STONE": "Shiny Stone", "SHINY_STONE": "Pedra Brilhante",
"CRACKED_POT": "Cracked Pot", "CRACKED_POT": "Vaso Quebrado",
"SWEET_APPLE": "Sweet Apple", "SWEET_APPLE": "Maçã Doce",
"TART_APPLE": "Tart Apple", "TART_APPLE": "Maçã Azeda",
"STRAWBERRY_SWEET": "Strawberry Sweet", "STRAWBERRY_SWEET": "Doce de Morango",
"UNREMARKABLE_TEACUP": "Unremarkable Teacup", "UNREMARKABLE_TEACUP": "Xícara Comum",
"CHIPPED_POT": "Chipped Pot", "CHIPPED_POT": "Pote Lascado",
"BLACK_AUGURITE": "Black Augurite", "BLACK_AUGURITE": "Mineral Negro",
"GALARICA_CUFF": "Galarica Cuff", "GALARICA_CUFF": "Bracelete de Galar",
"GALARICA_WREATH": "Galarica Wreath", "GALARICA_WREATH": "Coroa de Galar",
"PEAT_BLOCK": "Peat Block", "PEAT_BLOCK": "Bloco de Turfa",
"AUSPICIOUS_ARMOR": "Auspicious Armor", "AUSPICIOUS_ARMOR": "Armadura Prometida",
"MALICIOUS_ARMOR": "Malicious Armor", "MALICIOUS_ARMOR": "Armadura Maldita",
"MASTERPIECE_TEACUP": "Masterpiece Teacup", "MASTERPIECE_TEACUP": "Xícara Excepcional",
"METAL_ALLOY": "Metal Alloy", "METAL_ALLOY": "Liga de Metal",
"SCROLL_OF_DARKNESS": "Scroll Of Darkness", "SCROLL_OF_DARKNESS": "Pergaminho da Escuridão",
"SCROLL_OF_WATERS": "Scroll Of Waters", "SCROLL_OF_WATERS": "Pergaminho da Água",
"SYRUPY_APPLE": "Syrupy Apple", "SYRUPY_APPLE": "Xarope de Maçã",
}, },
FormChangeItem: { FormChangeItem: {
"NONE": "None", "NONE": "None",
"ABOMASITE": "Abomasite", "ABOMASITE": "Abomasita",
"ABSOLITE": "Absolite", "ABSOLITE": "Absolita",
"AERODACTYLITE": "Aerodactylite", "AERODACTYLITE": "Aerodactylita",
"AGGRONITE": "Aggronite", "AGGRONITE": "Aggronita",
"ALAKAZITE": "Alakazite", "ALAKAZITE": "Alakazita",
"ALTARIANITE": "Altarianite", "ALTARIANITE": "Altarianita",
"AMPHAROSITE": "Ampharosite", "AMPHAROSITE": "Ampharosita",
"AUDINITE": "Audinite", "AUDINITE": "Audinita",
"BANETTITE": "Banettite", "BANETTITE": "Banettita",
"BEEDRILLITE": "Beedrillite", "BEEDRILLITE": "Beedrillita",
"BLASTOISINITE": "Blastoisinite", "BLASTOISINITE": "Blastoisinita",
"BLAZIKENITE": "Blazikenite", "BLAZIKENITE": "Blazikenita",
"CAMERUPTITE": "Cameruptite", "CAMERUPTITE": "Cameruptita",
"CHARIZARDITE_X": "Charizardite X", "CHARIZARDITE X": "Charizardita X",
"CHARIZARDITE_Y": "Charizardite Y", "CHARIZARDITE Y": "Charizardita Y",
"DIANCITE": "Diancite", "DIANCITE": "Diancita",
"GALLADITE": "Galladite", "GALLADITE": "Galladita",
"GARCHOMPITE": "Garchompite", "GARCHOMPITE": "Garchompita",
"GARDEVOIRITE": "Gardevoirite", "GARDEVOIRITE": "Gardevoirita",
"GENGARITE": "Gengarite", "GENGARITE": "Gengarita",
"GLALITITE": "Glalitite", "GLALITITE": "Glalitita",
"GYARADOSITE": "Gyaradosite", "GYARADOSITE": "Gyaradosita",
"HERACRONITE": "Heracronite", "HERACRONITE": "Heracronita",
"HOUNDOOMINITE": "Houndoominite", "HOUNDOOMINITE": "Houndoominita",
"KANGASKHANITE": "Kangaskhanite", "KANGASKHANITE": "Kangaskhanita",
"LATIASITE": "Latiasite", "LATIASITE": "Latiasita",
"LATIOSITE": "Latiosite", "LATIOSITE": "Latiosita",
"LOPUNNITE": "Lopunnite", "LOPUNNITE": "Lopunnita",
"LUCARIONITE": "Lucarionite", "LUCARIONITE": "Lucarionita",
"MANECTITE": "Manectite", "MANECTITE": "Manectita",
"MAWILITE": "Mawilite", "MAWILITE": "Mawilita",
"MEDICHAMITE": "Medichamite", "MEDICHAMITE": "Medichamita",
"METAGROSSITE": "Metagrossite", "METAGROSSITE": "Metagrossita",
"MEWTWONITE_X": "Mewtwonite X", "MEWTWONITE X": "Mewtwonita X",
"MEWTWONITE_Y": "Mewtwonite Y", "MEWTWONITE Y": "Mewtwonita Y",
"PIDGEOTITE": "Pidgeotite", "PIDGEOTITE": "Pidgeotita",
"PINSIRITE": "Pinsirite", "PINSIRITE": "Pinsirita",
"RAYQUAZITE": "Rayquazite", "SABLENITE": "Sablenita",
"SABLENITE": "Sablenite", "RAYQUAZITE": "Rayquazita",
"SALAMENCITE": "Salamencite", "SALAMENCITE": "Salamencita",
"SCEPTILITE": "Sceptilite", "SCEPTILITE": "Sceptilita",
"SCIZORITE": "Scizorite", "SCIZORITE": "Scizorita",
"SHARPEDONITE": "Sharpedonite", "SHARPEDONITE": "Sharpedonita",
"SLOWBRONITE": "Slowbronite", "SLOWBRONITE": "Slowbronita",
"STEELIXITE": "Steelixite", "STEELIXITE": "Steelixita",
"SWAMPERTITE": "Swampertite", "SWAMPERTITE": "Swampertita",
"TYRANITARITE": "Tyranitarite", "TYRANITARITE": "Tyranitarita",
"VENUSAURITE": "Venusaurite", "VENUSAURITE": "Venusaurita",
"BLUE_ORB": "Blue Orb", "BLUE_ORB": "Orbe Azul",
"RED_ORB": "Red Orb", "RED_ORB": "Orbe Vermelha",
"SHARP_METEORITE": "Sharp Meteorite", "SHARP_METEORITE": "Meteorito Afiado",
"HARD_METEORITE": "Hard Meteorite", "HARD_METEORITE": "Meteorito Duro",
"SMOOTH_METEORITE": "Smooth Meteorite", "SMOOTH_METEORITE": " Meteorito Liso",
"ADAMANT_CRYSTAL": "Adamant Crystal", "ADAMANT_CRYSTAL": "Cristal Adamante",
"LUSTROUS_ORB": "Lustrous Orb", "LUSTROUS_ORB": "Orbe Pérola",
"GRISEOUS_CORE": "Griseous Core", "GRISEOUS_CORE": "Núcleo Platinado",
"REVEAL_GLASS": "Reveal Glass", "REVEAL_GLASS": "Espelho da Verdade",
"GRACIDEA": "Gracidea", "GRACIDEA": "Gracídea",
"MAX_MUSHROOMS": "Max Mushrooms", "MAX_MUSHROOMS": "Cogumax",
"DARK_STONE": "Dark Stone", "DARK_STONE": "Pedra das Trevas",
"LIGHT_STONE": "Light Stone", "LIGHT_STONE": "Pedra da Luz",
"PRISON_BOTTLE": "Prison Bottle", "PRISON_BOTTLE": "Garrafa Prisão",
"N_LUNARIZER": "N Lunarizer", "N_LUNARIZER": "Lunarizador N",
"N_SOLARIZER": "N Solarizer", "N_SOLARIZER": "Solarizador N",
"RUSTED_SWORD": "Rusted Sword", "RUSTED_SWORD": "Espada Enferrujada",
"RUSTED_SHIELD": "Rusted Shield", "RUSTED_SHIELD": "Escudo Enferrujado",
"ICY_REINS_OF_UNITY": "Icy Reins Of Unity", "ICY_REINS_OF_UNITY": "Rédeas de Gelo da União",
"SHADOW_REINS_OF_UNITY": "Shadow Reins Of Unity", "SHADOW_REINS_OF_UNITY": "Rédeas Sombrias da União",
"WELLSPRING_MASK": "Wellspring Mask", "WELLSPRING_MASK": "Máscara Nascente",
"HEARTHFLAME_MASK": "Hearthflame Mask", "HEARTHFLAME_MASK": "Máscara Fornalha",
"CORNERSTONE_MASK": "Cornerstone Mask", "CORNERSTONE_MASK": "Máscara Alicerce",
"SHOCK_DRIVE": "Shock Drive", "SHOCK_DRIVE": "MagneDisco",
"BURN_DRIVE": "Burn Drive", "BURN_DRIVE": "IgneDisco",
"CHILL_DRIVE": "Chill Drive", "CHILL_DRIVE": "CrioDisco",
"DOUSE_DRIVE": "Douse Drive", "DOUSE_DRIVE": "HidroDisco",
},
TeraType: {
"UNKNOWN": "Unknown",
"NORMAL": "Normal",
"FIGHTING": "Fighting",
"FLYING": "Flying",
"POISON": "Poison",
"GROUND": "Ground",
"ROCK": "Rock",
"BUG": "Bug",
"GHOST": "Ghost",
"STEEL": "Steel",
"FIRE": "Fire",
"WATER": "Water",
"GRASS": "Grass",
"ELECTRIC": "Electric",
"PSYCHIC": "Psychic",
"ICE": "Ice",
"DRAGON": "Dragon",
"DARK": "Dark",
"FAIRY": "Fairy",
"STELLAR": "Stellar",
}, },
} as const; } as const;

View File

@ -3583,7 +3583,7 @@ export const move: MoveTranslationEntries = {
}, },
"revivalBlessing": { "revivalBlessing": {
name: "Revival Blessing", name: "Revival Blessing",
effect: "O usuário concede uma bênção amorosa, revivendo um Pokémon da equipe que tenha desmaiado e restaurando metade do máximo de PS desse Pokémon." effect: "O usuário concede uma bênção amorosa, reanimando um Pokémon da equipe que tenha desmaiado e restaurando metade do máximo de PS desse Pokémon."
}, },
"saltCure": { "saltCure": {
name: "Salt Cure", name: "Salt Cure",

View File

@ -4,7 +4,7 @@ export const pokeball: SimpleTranslationEntries = {
"pokeBall": "Poké Bola", "pokeBall": "Poké Bola",
"greatBall": "Grande Bola", "greatBall": "Grande Bola",
"ultraBall": "Ultra Bola", "ultraBall": "Ultra Bola",
"rogueBall": "Rogue Bola", "rogueBall": "Bola Rogue",
"masterBall": "Master Bola", "masterBall": "Bola Mestra",
"luxuryBall": "Bola de Luxo", "luxuryBall": "Bola Luxo",
} as const; } as const;

View File

@ -0,0 +1,41 @@
import { PokemonInfoTranslationEntries } from "#app/plugins/i18n";
export const pokemonInfo: PokemonInfoTranslationEntries = {
Stat: {
"HP": "PS",
"HPshortened": "PS",
"ATK": "Ataque",
"ATKshortened": "Ata",
"DEF": "Defesa",
"DEFshortened": "Def",
"SPATK": "At. Esp.",
"SPATKshortened": "AtEsp",
"SPDEF": "Def. Esp.",
"SPDEFshortened": "DefEsp",
"SPD": "Veloc.",
"SPDshortened": "Veloc."
},
Type: {
"UNKNOWN": "Desconhecido",
"NORMAL": "Normal",
"FIGHTING": "Lutador",
"FLYING": "Voador",
"POISON": "Veneno",
"GROUND": "Terra",
"ROCK": "Pedra",
"BUG": "Inseto",
"GHOST": "Fantasma",
"STEEL": "Aço",
"FIRE": "Fogo",
"WATER": "Água",
"GRASS": "Grama",
"ELECTRIC": "Elétrico",
"PSYCHIC": "Psíquico",
"ICE": "Gelo",
"DRAGON": "Dragão",
"DARK": "Sombrio",
"FAIRY": "Fada",
"STELLAR": "Estelar"
},
} as const;

View File

@ -1,16 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const pokemonStat: SimpleTranslationEntries = {
"HP": "PS",
"HPshortened": "PS",
"ATK": "Ataque",
"ATKshortened": "Ata",
"DEF": "Defesa",
"DEFshortened": "Def",
"SPATK": "At. Esp.",
"SPATKshortened": "AtEsp",
"SPDEF": "Def. Esp.",
"SPDEFshortened": "DefEsp",
"SPD": "Veloc.",
"SPDshortened": "Veloc."
} as const;

View File

@ -0,0 +1,37 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const splashMessages: SimpleTranslationEntries = {
"battlesWon": "Batalhas Ganhas!",
"joinTheDiscord": "Junte-se ao Discord!",
"infiniteLevels": "Níveis Infinitos!",
"everythingStacks": "Tudo Acumula!",
"optionalSaveScumming": "Você Pode Dar F5!",
"biomes": "35 Biomas!",
"openSource": "Código Aberto!",
"playWithSpeed": "Jogue na Velocidade 5x!",
"liveBugTesting": "Testamos os Bugs Ao Vivo!",
"heavyInfluence": "Grande Influência de RoR2!",
"pokemonRiskAndPokemonRain": "Pokémon Risk e Pokémon Rain!",
"nowWithMoreSalt": "O Choro é Livre!",
"infiniteFusionAtHome": "Infinite Fusion da Shopee!",
"brokenEggMoves": "Mov. de Ovo Apelões!",
"magnificent": "Magnífico!",
"mubstitute": "Mubstituto!",
"thatsCrazy": "Que Doidera!",
"oranceJuice": "Suco de Laranja!",
"questionableBalancing": "Balanceamento Questionável!",
"coolShaders": "Shader Maneiros!",
"aiFree": "Livre de IA!",
"suddenDifficultySpikes": "Ficou Difícil do Nada!",
"basedOnAnUnfinishedFlashGame": "Baseado num Jogo Online Inacabado!",
"moreAddictiveThanIntended": "Mais Viciante do que Planejado!",
"mostlyConsistentSeeds": "Consistente (na Maioria das Vezes)!",
"achievementPointsDontDoAnything": "Pontos de Conquista Não Fazem Nada!",
"youDoNotStartAtLevel": "Você Não Começa no Nível 2000!",
"dontTalkAboutTheManaphyEggIncident": "Não Fale do Incidente do Ovo de Manaphy!",
"alsoTryPokengine": "Também Jogue Pokéngine!",
"alsoTryEmeraldRogue": "Também Jogue Emerald Rogue!",
"alsoTryRadicalRed": "Também Jogue Radical Red!",
"eeveeExpo": "Eevee Expo!",
"ynoproject": "YNOproject!",
} as const;

View File

@ -16,10 +16,10 @@ 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", "ace_duo": "Dupla Ás",
"artist": "Artista", "artist": "Artista",
"artist_female": "Artista", "artist_female": "Artista",
"backpackers": "Backpackers", "backpackers": "Mochileiros",
"backers": "Torcedores", "backers": "Torcedores",
"backpacker": "Mochileiro", "backpacker": "Mochileiro",
"backpacker_female": "Mochileira", "backpacker_female": "Mochileira",
@ -31,14 +31,14 @@ export const trainerClasses: SimpleTranslationEntries = {
"black_belt": "Faixa Preta", "black_belt": "Faixa Preta",
"breeder": "Criador", "breeder": "Criador",
"breeder_female": "Criadora", "breeder_female": "Criadora",
"breeders": "Breeders", "breeders": "Criadores",
"clerk": "Funcionário", "clerk": "Funcionário",
"clerk_female": "Funcionária", "clerk_female": "Funcionária",
"colleagues": "Colleagues", "colleagues": "Funcionários",
"crush_kin": "Crush Kin", "crush_kin": "Casal Lutador",
"cyclist": "Ciclista", "cyclist": "Ciclista",
"cyclist_female": "Ciclista", "cyclist_female": "Ciclista",
"cyclists": "Cyclists", "cyclists": "Ciclistas",
"dancer": "Dançarino", "dancer": "Dançarino",
"dancer_female": "Dançarina", "dancer_female": "Dançarina",
"depot_agent": "Ferroviário", "depot_agent": "Ferroviário",
@ -46,22 +46,22 @@ export const trainerClasses: SimpleTranslationEntries = {
"doctor_female": "Doutora", "doctor_female": "Doutora",
"fishermen": "Pescador", "fishermen": "Pescador",
"fishermen_female": "Pescadora", "fishermen_female": "Pescadora",
"gentleman": "Gentleman", "gentleman": "Cavalheiro",
"guitarist": "Guitarrista", "guitarist": "Guitarrista",
"guitarist_female": "Guitarrista", "guitarist_female": "Guitarrista",
"harlequin": "Arlequim", "harlequin": "Arlequim",
"hiker": "Montanhista", "hiker": "Montanhista",
"hooligans": "Bandoleiro", "hooligans": "Bandoleiro",
"hoopster": "Jogador de basquete", "hoopster": "Jogador de Basquete",
"infielder": "Jogador de baseball", "infielder": "Jogador de Baseball",
"janitor": "Faxineiro", "janitor": "Faxineiro",
"lady": "Dama", "lady": "Dama",
"lass": "Senhorita", "lass": "Senhorita",
"linebacker": "Zagueiro", "linebacker": "Zagueiro",
"maid": "Doméstica", "maid": "Doméstica",
"madame": "Madame", "madame": "Madame",
"musican": "Músico", "medical_team": "Equipe Médica",
"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",
@ -69,43 +69,47 @@ export const trainerClasses: SimpleTranslationEntries = {
"parasol_lady": "Moça de Sombrinha", "parasol_lady": "Moça de Sombrinha",
"pilot": "Piloto", "pilot": "Piloto",
"poké_fan": "Pokefã", "poké_fan": "Pokefã",
"poké_fan_family": "Poké Fan Family", "poké_fan_family": "Família Pokefã",
"preschooler": "Menino do Prezinho", "preschooler": "Menino do Prezinho",
"preschooler_female": "Menina do Prezinho", "preschooler_female": "Menina do Prezinho",
"preschoolers": "Preschoolers", "preschoolers": "Alunos do Prezinho",
"psychic": "Médium", "psychic": "Médium",
"psychic_female": "Médium", "psychic_female": "Médium",
"psychics": "Psychics", "psychics": "Médiuns",
"pokémon_ranger": "Pokémon Ranger", "pokémon_ranger": "Guarda Pokémon",
"pokémon_rangers": "Pokémon Ranger", "pokémon_rangers": "Guardas Pokémon",
"ranger": "Guarda", "ranger": "Guarda",
"restaurant_staff": "Restaurant Staff", "restaurant_staff": "Equipe do Restaurante",
"rich_boy": "Rich Boy", "rich": "Burguês",
"rich_couple": "Rich Couple", "rich_female": "Burguesa",
"rich_kids": "Rich Kids", "rich_boy": "Riquinho",
"rich_couple": "Casal Burguês",
"rich_kid": "Garoto Rico",
"rich_kid_female": "Garota Rica",
"rich_kids": "Garotos Ricos",
"roughneck": "Arruaceiro", "roughneck": "Arruaceiro",
"scientist": "Cientista", "scientist": "Cientista",
"scientist_female": "Cientista", "scientist_female": "Cientista",
"scientists": "Scientists", "scientists": "Cientistas",
"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", "school_kids": "Estudantes",
"swimmer": "Nadador", "swimmer": "Nadador",
"swimmer_female": "Nadadora", "swimmer_female": "Nadadora",
"swimmers": "Swimmers", "swimmers": "Nadadores",
"twins": "Gêmeos", "twins": "Gêmeos",
"veteran": "Veterano", "veteran": "Veterano",
"veteran_female": "Veterana", "veteran_female": "Veterana",
"veteran_duo": "Veteran Duo", "veteran_duo": "Dupla Veterana",
"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", "workers": "Operários",
"youngster": "Jovem", "youngster": "Jovem",
} as const; } as const;

View File

@ -0,0 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const battleMessageUiHandler: SimpleTranslationEntries = {
"ivBest": "Best",
"ivFantastic": "Fantastic",
"ivVeryGood": "Very Good",
"ivPrettyGood": "Pretty Good",
"ivDecent": "Decent",
"ivNoGood": "No Good",
} as const;

View File

@ -0,0 +1,48 @@
import { BerryTranslationEntries } from "#app/plugins/i18n";
export const berry: BerryTranslationEntries = {
"SITRUS": {
name: "文柚果",
effect: "HP低于50%时回复最大HP的25%",
},
"LUM": {
name: "木子果",
effect: "治愈任何异常状态和混乱状态",
},
"ENIGMA": {
name: "谜芝果",
effect: "受到效果绝佳的招式攻击时回复25%最大HP",
},
"LIECHI": {
name: "枝荔果",
effect: "HP低于25%时,攻击提升一个等级",
},
"GANLON": {
name: "龙睛果",
effect: "HP低于25%时,防御提升一个等级",
},
"PETAYA": {
name: "龙火果",
effect: "HP低于25%时,特攻提升一个等级",
},
"APICOT": {
name: "杏仔果",
effect: "HP低于25%时,特防提升一个等级",
},
"SALAC": {
name: "沙鳞果",
effect: "HP低于25%时,速度提升一个等级",
},
"LANSAT": {
name: "兰萨果",
effect: "HP低于25%时,击中要害率提升两个等级",
},
"STARF": {
name: "星桃果",
effect: "HP低于25%时,提高随机一项能力两个等级",
},
"LEPPA": {
name: "苹野果",
effect: "有招式的PP降到0时恢复该招式10PP",
},
} as const;

View File

@ -2,20 +2,24 @@ import { ability } from "./ability";
import { abilityTriggers } from "./ability-trigger"; import { abilityTriggers } from "./ability-trigger";
import { battle } from "./battle"; import { battle } from "./battle";
import { commandUiHandler } from "./command-ui-handler"; import { commandUiHandler } from "./command-ui-handler";
// import { egg } from "./egg";
import { fightUiHandler } from "./fight-ui-handler"; import { fightUiHandler } from "./fight-ui-handler";
import { growth } from "./growth";
import { menu } from "./menu"; import { menu } from "./menu";
import { menuUiHandler } from "./menu-ui-handler"; import { menuUiHandler } from "./menu-ui-handler";
import { modifierType } from "./modifier-type";
import { move } from "./move"; import { move } from "./move";
import { nature } from "./nature";
import { pokeball } from "./pokeball"; import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon"; import { pokemon } from "./pokemon";
import { pokemonStat } from "./pokemon-stat"; import { pokemonInfo } from "./pokemon-info";
// import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { titles,trainerClasses,trainerNames } from "./trainers";
import { nature } from "./nature";
import { weather } from "./weather"; import { weather } from "./weather";
import { modifierType } from "./modifier-type"; import { battleMessageUiHandler } from "./battle-message-ui-handler";
import { growth } from "./growth"; import { berry } from "./berry";
export const zhCnConfig = { export const zhCnConfig = {
@ -23,21 +27,24 @@ export const zhCnConfig = {
abilityTriggers: abilityTriggers, abilityTriggers: abilityTriggers,
battle: battle, battle: battle,
commandUiHandler: commandUiHandler, commandUiHandler: commandUiHandler,
// egg: egg,
fightUiHandler: fightUiHandler, fightUiHandler: fightUiHandler,
menuUiHandler: menuUiHandler, growth: growth,
menu: menu, menu: menu,
menuUiHandler: menuUiHandler,
modifierType: modifierType,
move: move, move: move,
pokeball: pokeball,
pokemonStat: pokemonStat,
pokemon: pokemon,
starterSelectUiHandler: starterSelectUiHandler,
nature: nature, nature: nature,
pokeball: pokeball,
pokemon: pokemon,
pokemonInfo: pokemonInfo,
// splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler,
titles: titles, titles: titles,
trainerClasses: trainerClasses, trainerClasses: trainerClasses,
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
nature: nature,
growth: growth,
weather: weather, weather: weather,
modifierType: modifierType, battleMessageUiHandler: battleMessageUiHandler,
} berry: berry,
}

View File

@ -1,7 +1,7 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const fightUiHandler: SimpleTranslationEntries = { export const fightUiHandler: SimpleTranslationEntries = {
"pp": "PP", "pp": "PP",
"power": "威力", "power": "威力",
"accuracy": "命中", "accuracy": "命中",
} as const; } as const;

View File

@ -1,10 +1,10 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n"; import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const growth: SimpleTranslationEntries = { export const growth: SimpleTranslationEntries = {
"Erratic": "最快", "Erratic": "最快",
"Fast": "快", "Fast": "快",
"Medium_Fast": "快", "Medium_Fast": "快",
"Medium_Slow": "慢", "Medium_Slow": "慢",
"Slow": "慢", "Slow": "慢",
"Fluctuating": "最慢" "Fluctuating": "最慢"
} as const; } as const;

View File

@ -20,7 +20,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
description: "为一只宝可梦回复 {{restorePoints}} HP 或 {{restorePercent}}% HP取最大值", description: "为一只宝可梦回复 {{restorePoints}} HP 或 {{restorePercent}}% HP取最大值",
extra: { extra: {
"fully": "为一只宝可梦回复全部HP", "fully": "为一只宝可梦回复全部HP",
"fullyWithStatus": "为一只宝可梦回复全部HP并消除所有负面状态", "fullyWithStatus": "为一只宝可梦回复全部HP并消除所有负面\n状态",
} }
}, },
"PokemonReviveModifierType": { "PokemonReviveModifierType": {
@ -42,11 +42,11 @@ export const modifierType: ModifierTypeTranslationEntries = {
} }
}, },
"PokemonPpUpModifierType": { "PokemonPpUpModifierType": {
description: "为一只宝可梦的一个招式永久增加{{upPoints}}点PP每5点当前最大PP (最多3点)", description: "为一只宝可梦的一个招式永久增加{{upPoints}}点\nPP每5点当前最大PP (最多3点)",
}, },
"PokemonNatureChangeModifierType": { "PokemonNatureChangeModifierType": {
name: "{{natureName}}薄荷", name: "{{natureName}}薄荷",
description: "将一只宝可梦的性格改为{{natureName}}并为该宝可梦永久解锁该性格.", description: "将一只宝可梦的性格改为{{natureName}}并为该宝可\n梦永久解锁该性格.",
}, },
"DoubleBattleChanceBoosterModifierType": { "DoubleBattleChanceBoosterModifierType": {
description: "接下来的{{battleCount}}场战斗是双打的概率翻倍", description: "接下来的{{battleCount}}场战斗是双打的概率翻倍",
@ -64,7 +64,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
description: "所有成员宝可梦等级提升1级", description: "所有成员宝可梦等级提升1级",
}, },
"PokemonBaseStatBoosterModifierType": { "PokemonBaseStatBoosterModifierType": {
description: "增加持有者的{{statName}}10%. 个体值越高堆叠上限越高.", description: "增加持有者的{{statName}}10%,个体值越高堆叠\n上限越高.",
}, },
"AllPokemonFullHpRestoreModifierType": { "AllPokemonFullHpRestoreModifierType": {
description: "所有宝可梦完全回复HP", description: "所有宝可梦完全回复HP",
@ -81,10 +81,10 @@ export const modifierType: ModifierTypeTranslationEntries = {
}, },
}, },
"ExpBoosterModifierType": { "ExpBoosterModifierType": {
description: "EXP.获取量增加{{boostPercent}}%", description: "经验值获取量增加{{boostPercent}}%",
}, },
"PokemonExpBoosterModifierType": { "PokemonExpBoosterModifierType": {
description: "持有者EXP.获取量增加{{boostPercent}}%", description: "持有者经验值获取量增加{{boostPercent}}%",
}, },
"PokemonFriendshipBoosterModifierType": { "PokemonFriendshipBoosterModifierType": {
description: "每场战斗获得的好感度提升50%", description: "每场战斗获得的好感度提升50%",
@ -93,7 +93,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
description: "招式命中率增加{{accuracyAmount}} (最大100)", description: "招式命中率增加{{accuracyAmount}} (最大100)",
}, },
"PokemonMultiHitModifierType": { "PokemonMultiHitModifierType": {
description: "攻击造成一次额外伤害,每次堆叠额外伤害分别衰减60/75/82.5%", description: "攻击造成一次额外伤害,每次堆叠额外伤害\n分别衰减60/75/82.5%",
}, },
"TmModifierType": { "TmModifierType": {
name: "招式学习器 {{moveId}} - {{moveName}}", name: "招式学习器 {{moveId}} - {{moveName}}",
@ -106,7 +106,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
description: "使某些宝可梦更改形态", description: "使某些宝可梦更改形态",
}, },
"FusePokemonModifierType": { "FusePokemonModifierType": {
description: "融合两只宝可梦 (改变特性, 平分基础点数和属性, 共享招式池)", description: "融合两只宝可梦 (改变特性, 平分基础点数\n和属性, 共享招式池)",
}, },
"TerastallizeModifierType": { "TerastallizeModifierType": {
name: "{{teraType}}太晶碎块", name: "{{teraType}}太晶碎块",
@ -128,9 +128,9 @@ export const modifierType: ModifierTypeTranslationEntries = {
"RARE_CANDY": { name: "神奇糖果" }, "RARE_CANDY": { name: "神奇糖果" },
"RARER_CANDY": { name: "超神奇糖果" }, "RARER_CANDY": { name: "超神奇糖果" },
"MEGA_BRACELET": { name: "超级手镯", description: "能让携带着超级石战斗的宝可梦进行超级进化" }, "MEGA_BRACELET": { name: "超级手镯", description: "能让携带着超级石战斗的宝可梦进行\n超级进化" },
"DYNAMAX_BAND": { name: "极巨腕带", description: "能让携带着极巨菇菇战斗的宝可梦进行极巨化" }, "DYNAMAX_BAND": { name: "极巨腕带", description: "能让携带着极巨菇菇战斗的宝可梦进行\n极巨化" },
"TERA_ORB": { name: "太晶珠", description: "能让携带着太晶碎块战斗的宝可梦进行太晶化" }, "TERA_ORB": { name: "太晶珠", description: "能让携带着太晶碎块战斗的宝可梦进行\n太晶化" },
"MAP": { name: "地图", description: "允许你在切换宝可梦群落时选择目的地"}, "MAP": { name: "地图", description: "允许你在切换宝可梦群落时选择目的地"},
@ -165,9 +165,9 @@ export const modifierType: ModifierTypeTranslationEntries = {
"MEMORY_MUSHROOM": { name: "回忆蘑菇", description: "回忆一个宝可梦已经遗忘的招式" }, "MEMORY_MUSHROOM": { name: "回忆蘑菇", description: "回忆一个宝可梦已经遗忘的招式" },
"EXP_SHARE": { name: "学习装置", description: "未参加对战的宝可梦获得20%的经验值" }, "EXP_SHARE": { name: "学习装置", description: "未参加对战的宝可梦获得20%的经验值" },
"EXP_BALANCE": { name: "均衡型学习装置", description: "增加战斗中获得的EXP.分配给低级成员宝可梦的权重" }, "EXP_BALANCE": { name: "均衡型学习装置", description: "队伍中的低级宝可梦获得更多经验值" },
"OVAL_CHARM": { name: "圆形护符", description: "当多只宝可梦参与战斗, 分别获得总EXP.10%的额外EXP." }, "OVAL_CHARM": { name: "圆形护符", description: "当多只宝可梦参与战斗,分别获得总经验值\n10%的额外经验值" },
"EXP_CHARM": { name: "经验护符" }, "EXP_CHARM": { name: "经验护符" },
"SUPER_EXP_CHARM": { name: "超级经验护符" }, "SUPER_EXP_CHARM": { name: "超级经验护符" },
@ -200,21 +200,21 @@ export const modifierType: ModifierTypeTranslationEntries = {
"BERRY_POUCH": { name: "树果袋", description: "使用树果时有25%的几率不会消耗树果" }, "BERRY_POUCH": { name: "树果袋", description: "使用树果时有25%的几率不会消耗树果" },
"FOCUS_BAND": { name: "气势头带", description: "携带该道具的宝可梦有10%几率在受到攻击而将陷入濒死状态时保留1点HP不陷入濒死状态" }, "FOCUS_BAND": { name: "气势头带", description: "携带该道具的宝可梦有10%几率在受到\n攻击而将陷入濒死状态时保留1点HP不陷入濒死状态" },
"QUICK_CLAW": { name: "先制之爪", description: "有10%的几率无视速度优先使出招式 (先制技能优先)" }, "QUICK_CLAW": { name: "先制之爪", description: "有10%的几率无视速度优先使出招式\n(先制技能优先)" },
"KINGS_ROCK": { name: "王者之证", description: "携带该道具的宝可梦使用任意原本不会造成畏缩状态的攻击招式并造成伤害时有10%几率使目标陷入畏缩状态" }, "KINGS_ROCK": { name: "王者之证", description: "携带该道具的宝可梦使用任意原本不会造成\n畏缩状态的攻击招式并造成伤害时,有\n10%几率使目标陷入畏缩状态" },
"LEFTOVERS": { name: "吃剩的东西", description: "携带该道具的宝可梦在每个回合结束时恢复最大HP的1/16" }, "LEFTOVERS": { name: "吃剩的东西", description: "携带该道具的宝可梦在每个回合结束时恢复\n最大HP的1/16" },
"SHELL_BELL": { name: "贝壳之铃", description: "携带该道具的宝可梦在攻击对方成功造成伤害时携带者的HP会恢复其所造成伤害的1/8" }, "SHELL_BELL": { name: "贝壳之铃", description: "携带该道具的宝可梦在攻击对方成功造成伤\n害时携带者的HP会恢复其所造成伤害\n的1/8" },
"BATON": { name: "接力棒", description: "允许在切换宝可梦时保留能力变化, 对陷阱同样生效" }, "BATON": { name: "接力棒", description: "允许在切换宝可梦时保留能力变化, 对陷阱\n同样生效" },
"SHINY_CHARM": { name: "闪耀护符", description: "显著增加野生宝可梦的闪光概率" }, "SHINY_CHARM": { name: "闪耀护符", description: "显著增加野生宝可梦的闪光概率" },
"ABILITY_CHARM": { name: "特性护符", description: "显著增加野生宝可梦有隐藏特性的概率" }, "ABILITY_CHARM": { name: "特性护符", description: "显著增加野生宝可梦有隐藏特性的概率" },
"IV_SCANNER": { name: "个体值探测器", description: "允许扫描野生宝可梦的个体值。 每个次显示2个个体值. 最好的个体值优先显示" }, "IV_SCANNER": { name: "个体值探测器", description: "允许扫描野生宝可梦的个体值。 每个次显示\n2个个体值. 最好的个体值优先显示" },
"DNA_SPLICERS": { name: "基因之楔" }, "DNA_SPLICERS": { name: "基因之楔" },
@ -384,26 +384,4 @@ export const modifierType: ModifierTypeTranslationEntries = {
"CHILL_DRIVE": "冰冻卡带", "CHILL_DRIVE": "冰冻卡带",
"DOUSE_DRIVE": "水流卡带", "DOUSE_DRIVE": "水流卡带",
}, },
TeraType: {
"UNKNOWN": "Unknown",
"NORMAL": "一般",
"FIGHTING": "格斗",
"FLYING": "飞行",
"POISON": "毒",
"GROUND": "地面",
"ROCK": "岩石",
"BUG": "虫",
"GHOST": "幽灵",
"STEEL": "钢",
"FIRE": "火",
"WATER": "水",
"GRASS": "草",
"ELECTRIC": "电",
"PSYCHIC": "超能力",
"ICE": "冰",
"DRAGON": "龙",
"DARK": "恶",
"FAIRY": "妖精",
"STELLAR": "星晶",
},
} as const; } as const;

View File

@ -0,0 +1,41 @@
import { PokemonInfoTranslationEntries } from "#app/plugins/i18n";
export const pokemonInfo: PokemonInfoTranslationEntries = {
Stat: {
"HP": "最大HP",
"HPshortened": "最大HP",
"ATK": "攻击",
"ATKshortened": "攻击",
"DEF": "防御",
"DEFshortened": "防御",
"SPATK": "特攻",
"SPATKshortened": "特攻",
"SPDEF": "特防",
"SPDEFshortened": "特防",
"SPD": "速度",
"SPDshortened": "速度"
},
Type: {
"UNKNOWN": "未知",
"NORMAL": "一般",
"FIGHTING": "格斗",
"FLYING": "飞行",
"POISON": "毒",
"GROUND": "地面",
"ROCK": "岩石",
"BUG": "虫",
"GHOST": "幽灵",
"STEEL": "钢",
"FIRE": "火",
"WATER": "水",
"GRASS": "草",
"ELECTRIC": "电",
"PSYCHIC": "超能力",
"ICE": "冰",
"DRAGON": "龙",
"DARK": "恶",
"FAIRY": "妖精",
"STELLAR": "星晶",
},
} as const;

View File

@ -1,16 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const pokemonStat: SimpleTranslationEntries = {
"HP": "最大HP",
"HPshortened": "最大HP",
"ATK": "攻击",
"ATKshortened": "攻击",
"DEF": "防御",
"DEFshortened": "防御",
"SPATK": "特攻",
"SPATKshortened": "特攻",
"SPDEF": "特防",
"SPDEFshortened": "特防",
"SPD": "速度",
"SPDshortened": "速度"
} as const;

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

@ -511,7 +511,7 @@ export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType i
getDescription(scene: BattleScene): string { getDescription(scene: BattleScene): string {
// TODO: Need getTypeName? // TODO: Need getTypeName?
return i18next.t(`modifierType:ModifierType.AttackTypeBoosterModifierType.description`, { moveType: Utils.toReadableString(Type[this.moveType]) }); return i18next.t(`modifierType:ModifierType.AttackTypeBoosterModifierType.description`, { moveType: i18next.t(`pokemonInfo:Type.${Type[this.moveType]}`) });
} }
getPregenArgs(): any[] { getPregenArgs(): any[] {
@ -898,11 +898,11 @@ export class TerastallizeModifierType extends PokemonHeldItemModifierType implem
} }
get name(): string { get name(): string {
return i18next.t(`modifierType:ModifierType.TerastallizeModifierType.name`, { teraType: i18next.t(`modifierType:TeraType.${Type[this.teraType]}`) }); return i18next.t(`modifierType:ModifierType.TerastallizeModifierType.name`, { teraType: i18next.t(`pokemonInfo:Type.${Type[this.teraType]}`) });
} }
getDescription(scene: BattleScene): string { getDescription(scene: BattleScene): string {
return i18next.t(`modifierType:ModifierType.TerastallizeModifierType.description`, { teraType: i18next.t(`modifierType:TeraType.${Type[this.teraType]}`) }); return i18next.t(`modifierType:ModifierType.TerastallizeModifierType.description`, { teraType: i18next.t(`pokemonInfo:Type.${Type[this.teraType]}`) });
} }
getPregenArgs(): any[] { getPregenArgs(): any[] {
@ -1194,11 +1194,11 @@ const modifierPool: ModifierPool = {
return thresholdPartyMemberCount; return thresholdPartyMemberCount;
}, 3), }, 3),
new WeightedModifierType(modifierTypes.ETHER, (party: Pokemon[]) => { new WeightedModifierType(modifierTypes.ETHER, (party: Pokemon[]) => {
const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => (m.getMove().pp - m.ppUsed) <= 5).length).length, 3); const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => (m.getMovePp() - m.ppUsed) <= 5).length).length, 3);
return thresholdPartyMemberCount * 3; return thresholdPartyMemberCount * 3;
}, 9), }, 9),
new WeightedModifierType(modifierTypes.MAX_ETHER, (party: Pokemon[]) => { new WeightedModifierType(modifierTypes.MAX_ETHER, (party: Pokemon[]) => {
const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => (m.getMove().pp - m.ppUsed) <= 5).length).length, 3); const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => (m.getMovePp() - m.ppUsed) <= 5).length).length, 3);
return thresholdPartyMemberCount; return thresholdPartyMemberCount;
}, 3), }, 3),
new WeightedModifierType(modifierTypes.LURE, 2), new WeightedModifierType(modifierTypes.LURE, 2),
@ -1237,11 +1237,11 @@ const modifierPool: ModifierPool = {
return thresholdPartyMemberCount; return thresholdPartyMemberCount;
}, 3), }, 3),
new WeightedModifierType(modifierTypes.ELIXIR, (party: Pokemon[]) => { new WeightedModifierType(modifierTypes.ELIXIR, (party: Pokemon[]) => {
const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => (m.getMove().pp - m.ppUsed) <= 5).length).length, 3); const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => (m.getMovePp() - m.ppUsed) <= 5).length).length, 3);
return thresholdPartyMemberCount * 3; return thresholdPartyMemberCount * 3;
}, 9), }, 9),
new WeightedModifierType(modifierTypes.MAX_ELIXIR, (party: Pokemon[]) => { new WeightedModifierType(modifierTypes.MAX_ELIXIR, (party: Pokemon[]) => {
const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => (m.getMove().pp - m.ppUsed) <= 5).length).length, 3); const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => (m.getMovePp() - m.ppUsed) <= 5).length).length, 3);
return thresholdPartyMemberCount; return thresholdPartyMemberCount;
}, 3), }, 3),
new WeightedModifierType(modifierTypes.DIRE_HIT, 4), new WeightedModifierType(modifierTypes.DIRE_HIT, 4),

View File

@ -48,6 +48,13 @@ export const POKEBALL_OVERRIDE: { active: boolean, pokeballs: PokeballCounts } =
export const STARTER_FORM_OVERRIDE: integer = 0; export const STARTER_FORM_OVERRIDE: integer = 0;
// default 5 or 20 for Daily // default 5 or 20 for Daily
export const STARTING_LEVEL_OVERRIDE: integer = 0; export const STARTING_LEVEL_OVERRIDE: integer = 0;
/**
* SPECIES OVERRIDE
* will only apply to the first starter in your party or each enemy pokemon
* default is 0 to not override
* @example SPECIES_OVERRIDE = Species.Bulbasaur;
*/
export const STARTER_SPECIES_OVERRIDE: Species | integer = 0;
export const ABILITY_OVERRIDE: Abilities = Abilities.NONE; export const ABILITY_OVERRIDE: Abilities = Abilities.NONE;
export const PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE; export const PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE;
export const MOVESET_OVERRIDE: Array<Moves> = []; export const MOVESET_OVERRIDE: Array<Moves> = [];
@ -58,21 +65,13 @@ export const VARIANT_OVERRIDE: Variant = 0;
* OPPONENT / ENEMY OVERRIDES * OPPONENT / ENEMY OVERRIDES
*/ */
export const OPP_SPECIES_OVERRIDE: Species | integer = 0;
export const OPP_ABILITY_OVERRIDE: Abilities = Abilities.NONE; export const OPP_ABILITY_OVERRIDE: Abilities = Abilities.NONE;
export const OPP_PASSIVE_ABILITY_OVERRIDE = Abilities.NONE; export const OPP_PASSIVE_ABILITY_OVERRIDE = Abilities.NONE;
export const OPP_MOVESET_OVERRIDE: Array<Moves> = []; export const OPP_MOVESET_OVERRIDE: Array<Moves> = [];
export const OPP_SHINY_OVERRIDE: boolean = false; export const OPP_SHINY_OVERRIDE: boolean = false;
export const OPP_VARIANT_OVERRIDE: Variant = 0; export const OPP_VARIANT_OVERRIDE: Variant = 0;
/**
* SPECIES OVERRIDE
* will only apply to the first starter in your party or each enemy pokemon
* default is 0 to not override
* @example SPECIES_OVERRIDE = Species.Bulbasaur;
*/
export const STARTER_SPECIES_OVERRIDE: Species | integer = 0;
export const OPP_SPECIES_OVERRIDE: Species | integer = 0;
/** /**
* MODIFIER / ITEM OVERRIDES * MODIFIER / ITEM OVERRIDES
* if count is not provided, it will default to 1 * if count is not provided, it will default to 1

View File

@ -37,7 +37,7 @@ import { BattleType, BattlerIndex, TurnCommand } from "./battle";
import { BattleSpec } from "./enums/battle-spec"; import { BattleSpec } from "./enums/battle-spec";
import { Species } from "./data/enums/species"; import { Species } from "./data/enums/species";
import { HealAchv, LevelAchv, achvs } from "./system/achv"; import { HealAchv, LevelAchv, achvs } from "./system/achv";
import { TrainerSlot, trainerConfigs } from "./data/trainer-config"; import { TrainerConfig, TrainerSlot, trainerConfigs } from "./data/trainer-config";
import { TrainerType } from "./data/enums/trainer-type"; import { TrainerType } from "./data/enums/trainer-type";
import { EggHatchPhase } from "./egg-hatch-phase"; import { EggHatchPhase } from "./egg-hatch-phase";
import { Egg } from "./data/egg"; import { Egg } from "./data/egg";
@ -46,7 +46,7 @@ import { loggedInUser, updateUserInfo } from "./account";
import { PlayerGender, SessionSaveData } from "./system/game-data"; import { PlayerGender, SessionSaveData } from "./system/game-data";
import { addPokeballCaptureStars, addPokeballOpenParticles } from "./field/anims"; import { addPokeballCaptureStars, addPokeballOpenParticles } from "./field/anims";
import { SpeciesFormChangeActiveTrigger, SpeciesFormChangeManualTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangePreMoveTrigger } from "./data/pokemon-forms"; import { SpeciesFormChangeActiveTrigger, SpeciesFormChangeManualTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangePreMoveTrigger } from "./data/pokemon-forms";
import { battleSpecDialogue, getCharVariantFromDialogue } from "./data/dialogue"; import { battleSpecDialogue, getCharVariantFromDialogue, miscDialogue } from "./data/dialogue";
import ModifierSelectUiHandler, { SHOP_OPTIONS_ROW_LIMIT } from "./ui/modifier-select-ui-handler"; import ModifierSelectUiHandler, { SHOP_OPTIONS_ROW_LIMIT } from "./ui/modifier-select-ui-handler";
import { Setting } from "./system/settings"; import { Setting } from "./system/settings";
import { Tutorial, handleTutorial } from "./tutorial"; import { Tutorial, handleTutorial } from "./tutorial";
@ -59,6 +59,9 @@ import PokemonSpecies, { getPokemonSpecies, getPokemonSpeciesForm, speciesStarte
import i18next from './plugins/i18n'; 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 { Type } from "./data/type";
export class LoginPhase extends Phase { export class LoginPhase extends Phase {
private showText: boolean; private showText: boolean;
@ -160,7 +163,6 @@ export class TitlePhase extends Phase {
this.scene.gameData.getSession(loggedInUser.lastSessionSlot).then(sessionData => { this.scene.gameData.getSession(loggedInUser.lastSessionSlot).then(sessionData => {
if (sessionData) { if (sessionData) {
this.lastSessionData = sessionData; this.lastSessionData = sessionData;
console.log(sessionData);
const biomeKey = getBiomeKey(sessionData.arena.biome); const biomeKey = getBiomeKey(sessionData.arena.biome);
const bgTexture = `${biomeKey}_bg`; const bgTexture = `${biomeKey}_bg`;
this.scene.arenaBg.setTexture(bgTexture); this.scene.arenaBg.setTexture(bgTexture);
@ -1823,7 +1825,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);
} }
@ -3229,11 +3238,10 @@ export class FaintPhase extends PokemonPhase {
if (defeatSource?.isOnField()) { if (defeatSource?.isOnField()) {
applyPostVictoryAbAttrs(PostVictoryAbAttr, defeatSource); applyPostVictoryAbAttrs(PostVictoryAbAttr, defeatSource);
const pvmove = allMoves[pokemon.turnData.attacksReceived[0].move]; const pvmove = allMoves[pokemon.turnData.attacksReceived[0].move];
const pvattrs = pvmove.getAttrs(PostVictoryStatChangeAttr); const pvattrs = pvmove.getAttrs(PostVictoryStatChangeAttr) as PostVictoryStatChangeAttr[];
if (pvattrs.length) { if (pvattrs.length) {
for (let pvattr of pvattrs) { for (let pvattr of pvattrs)
pvattr.applyPostVictory(defeatSource, defeatSource, pvmove); pvattr.applyPostVictory(defeatSource, defeatSource, pvmove);
}
} }
} }
} }
@ -3548,10 +3556,10 @@ export class GameOverModifierRewardPhase extends ModifierRewardPhase {
this.scene.playSound('level_up_fanfare'); this.scene.playSound('level_up_fanfare');
this.scene.ui.setMode(Mode.MESSAGE); this.scene.ui.setMode(Mode.MESSAGE);
this.scene.ui.fadeIn(250).then(() => { this.scene.ui.fadeIn(250).then(() => {
this.scene.ui.showText(`You received\n${newModifier.type.name}!`, null, () => { this.scene.ui.showText(`You received\n${newModifier.type.name}!`, null, () => {
this.scene.time.delayedCall(1500, () => this.scene.arenaBg.setVisible(true)); this.scene.time.delayedCall(1500, () => this.scene.arenaBg.setVisible(true));
resolve(); resolve();
}, null, true, 1500); }, null, true, 1500);
}); });
}); });
}) })
@ -3573,11 +3581,9 @@ export class RibbonModifierRewardPhase extends ModifierRewardPhase {
this.scene.addModifier(newModifier).then(() => { this.scene.addModifier(newModifier).then(() => {
this.scene.playSound('level_up_fanfare'); this.scene.playSound('level_up_fanfare');
this.scene.ui.setMode(Mode.MESSAGE); this.scene.ui.setMode(Mode.MESSAGE);
this.scene.ui.fadeIn(250).then(() => { this.scene.ui.showText(`${this.species.name} beat ${this.scene.gameMode.getName()} Mode for the first time!\nYou received ${newModifier.type.name}!`, null, () => {
this.scene.ui.showText(`${this.species.name} beat ${this.scene.gameMode.getName()} Mode for the first time!\nYou received ${newModifier.type.name}!`, null, () => { resolve();
resolve(); }, null, true, 1500);
}, null, true, 1500);
});
}); });
}) })
} }
@ -3629,6 +3635,7 @@ export class GameOverPhase extends BattlePhase {
handleGameOver(): void { handleGameOver(): void {
const doGameOver = (newClear: boolean) => { const doGameOver = (newClear: boolean) => {
this.scene.disableMenu = true;
this.scene.time.delayedCall(1000, () => { this.scene.time.delayedCall(1000, () => {
let firstClear = false; let firstClear = false;
if (this.victory && newClear) { if (this.victory && newClear) {
@ -3650,20 +3657,40 @@ export class GameOverPhase extends BattlePhase {
const activeBattlers = this.scene.getField().filter(p => p?.isActive(true)); const activeBattlers = this.scene.getField().filter(p => p?.isActive(true));
activeBattlers.map(p => p.hideInfo()); activeBattlers.map(p => p.hideInfo());
this.scene.ui.fadeOut(fadeDuration).then(() => { this.scene.ui.fadeOut(fadeDuration).then(() => {
[ this.scene.field, ...activeBattlers ].map(a => a.setVisible(false)); activeBattlers.map(a => a.setVisible(false));
this.scene.setFieldScale(1, true); this.scene.setFieldScale(1, true);
this.scene.clearPhaseQueue(); this.scene.clearPhaseQueue();
this.scene.ui.clearText(); this.scene.ui.clearText();
if (newClear)
this.handleUnlocks(); const clear = (endCardPhase?: EndCardPhase) => {
if (this.victory && newClear) { if (newClear)
for (let species of this.firstRibbons) this.handleUnlocks();
this.scene.unshiftPhase(new RibbonModifierRewardPhase(this.scene, modifierTypes.VOUCHER_PLUS, species)); if (this.victory && newClear) {
if (!firstClear) for (let species of this.firstRibbons)
this.scene.unshiftPhase(new GameOverModifierRewardPhase(this.scene, modifierTypes.VOUCHER_PREMIUM)); this.scene.unshiftPhase(new RibbonModifierRewardPhase(this.scene, modifierTypes.VOUCHER_PLUS, species));
if (!firstClear)
this.scene.unshiftPhase(new GameOverModifierRewardPhase(this.scene, modifierTypes.VOUCHER_PREMIUM));
}
this.scene.pushPhase(new PostGameOverPhase(this.scene, endCardPhase));
this.end();
} }
this.scene.pushPhase(new PostGameOverPhase(this.scene));
this.end(); if (this.victory && this.scene.gameMode.isClassic) {
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.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.fadeOut(500).then(() => {
this.scene.charSprite.hide().then(() => {
const endCardPhase = new EndCardPhase(this.scene);
this.scene.unshiftPhase(endCardPhase);
clear(endCardPhase);
});
});
});
});
});
} else
clear();
}); });
}); });
}; };
@ -3706,6 +3733,41 @@ export class GameOverPhase extends BattlePhase {
} }
} }
export class EndCardPhase extends Phase {
public endCard: Phaser.GameObjects.Image;
public text: Phaser.GameObjects.Text;
constructor(scene: BattleScene) {
super(scene);
}
start(): void {
super.start();
this.scene.ui.getMessageHandler().bg.setVisible(false);
this.scene.ui.getMessageHandler().nameBoxContainer.setVisible(false);
this.endCard = this.scene.add.image(0, 0, `end_${this.scene.gameData.gender === PlayerGender.FEMALE ? 'f' : 'm'}`);
this.endCard.setOrigin(0);
this.endCard.setScale(0.5);
this.scene.field.add(this.endCard);
this.text = addTextObject(this.scene, this.scene.game.canvas.width / 12, (this.scene.game.canvas.height / 6) - 16, 'Congratulations!', TextStyle.SUMMARY, { fontSize: '128px' });
this.text.setOrigin(0.5);
this.scene.field.add(this.text);
this.scene.ui.clearText();
this.scene.ui.fadeIn(1000).then(() => {
this.scene.ui.showText('', null, () => {
this.scene.ui.getMessageHandler().bg.setVisible(true);
this.end();
}, null, true);
});
}
}
export class UnlockPhase extends Phase { export class UnlockPhase extends Phase {
private unlockable: Unlockables; private unlockable: Unlockables;
@ -3720,35 +3782,50 @@ export class UnlockPhase extends Phase {
this.scene.gameData.unlocks[this.unlockable] = true; this.scene.gameData.unlocks[this.unlockable] = true;
this.scene.playSound('level_up_fanfare'); this.scene.playSound('level_up_fanfare');
this.scene.ui.setMode(Mode.MESSAGE); this.scene.ui.setMode(Mode.MESSAGE);
this.scene.ui.fadeIn(250).then(() => { this.scene.ui.showText(`${getUnlockableName(this.unlockable)}\nhas been unlocked.`, null, () => {
this.scene.ui.showText(`${getUnlockableName(this.unlockable)}\nhas been unlocked.`, null, () => { this.scene.time.delayedCall(1500, () => this.scene.arenaBg.setVisible(true));
this.scene.time.delayedCall(1500, () => this.scene.arenaBg.setVisible(true)); this.end();
this.end(); }, null, true, 1500);
}, null, true, 1500);
});
}); });
} }
} }
export class PostGameOverPhase extends Phase { export class PostGameOverPhase extends Phase {
constructor(scene: BattleScene) { private endCardPhase: EndCardPhase;
constructor(scene: BattleScene, endCardPhase: EndCardPhase) {
super(scene); super(scene);
this.endCardPhase = endCardPhase;
} }
start() { start() {
super.start(); super.start();
this.scene.gameData.saveAll(this.scene, true, true, true).then(success => { const saveAndReset = () => {
if (!success) this.scene.gameData.saveAll(this.scene, true, true, true).then(success => {
return this.scene.reset(true); if (!success)
this.scene.gameData.tryClearSession(this.scene, this.scene.sessionSlotId).then((success: boolean | [boolean, boolean]) => {
if (!success[0])
return this.scene.reset(true); return this.scene.reset(true);
this.scene.reset(); this.scene.gameData.tryClearSession(this.scene, this.scene.sessionSlotId).then((success: boolean | [boolean, boolean]) => {
this.scene.unshiftPhase(new TitlePhase(this.scene)); if (!success[0])
this.end(); return this.scene.reset(true);
this.scene.reset();
this.scene.unshiftPhase(new TitlePhase(this.scene));
this.end();
});
}); });
}); };
if (this.endCardPhase) {
this.scene.ui.fadeOut(500).then(() => {
this.scene.ui.getMessageHandler().bg.setVisible(true);
this.endCardPhase.endCard.destroy();
this.endCardPhase.text.destroy();
saveAndReset();
});
} else
saveAndReset();
} }
} }

View File

@ -43,7 +43,19 @@ export interface ModifierTypeTranslationEntries {
BaseStatBoosterItem: SimpleTranslationEntries, BaseStatBoosterItem: SimpleTranslationEntries,
EvolutionItem: SimpleTranslationEntries, EvolutionItem: SimpleTranslationEntries,
FormChangeItem: SimpleTranslationEntries, FormChangeItem: SimpleTranslationEntries,
TeraType: SimpleTranslationEntries, }
export interface PokemonInfoTranslationEntries {
Stat: SimpleTranslationEntries,
Type: SimpleTranslationEntries,
}
export interface BerryTranslationEntry {
name: string,
effect: string
}
export interface BerryTranslationEntries {
[key: string]: BerryTranslationEntry
} }
export interface Localizable { export interface Localizable {
@ -125,7 +137,7 @@ declare module 'i18next' {
ability: AbilityTranslationEntries; ability: AbilityTranslationEntries;
pokeball: SimpleTranslationEntries; pokeball: SimpleTranslationEntries;
pokemon: SimpleTranslationEntries; pokemon: SimpleTranslationEntries;
pokemonStat: SimpleTranslationEntries; pokemonInfo: PokemonInfoTranslationEntries;
commandUiHandler: SimpleTranslationEntries; commandUiHandler: SimpleTranslationEntries;
fightUiHandler: SimpleTranslationEntries; fightUiHandler: SimpleTranslationEntries;
titles: SimpleTranslationEntries; titles: SimpleTranslationEntries;
@ -139,6 +151,8 @@ declare module 'i18next' {
egg: SimpleTranslationEntries; egg: SimpleTranslationEntries;
weather: SimpleTranslationEntries; weather: SimpleTranslationEntries;
modifierType: ModifierTypeTranslationEntries; modifierType: ModifierTypeTranslationEntries;
battleMessageUiHandler: SimpleTranslationEntries;
berry: BerryTranslationEntries;
}; };
} }
} }
@ -149,4 +163,4 @@ export function getIsInitialized(): boolean {
return isInitialized; return isInitialized;
} }
let isInitialized = false; let isInitialized = false;

View File

@ -260,8 +260,23 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
if (!this.player) { if (!this.player) {
const dexEntry = pokemon.scene.gameData.dexData[pokemon.species.speciesId]; const dexEntry = pokemon.scene.gameData.dexData[pokemon.species.speciesId];
this.ownedIcon.setVisible(!!dexEntry.caughtAttr); this.ownedIcon.setVisible(!!dexEntry.caughtAttr);
const dexAttr = pokemon.getDexAttr(); const opponentPokemonDexAttr = pokemon.getDexAttr();
if ((dexEntry.caughtAttr & dexAttr) < dexAttr || !(pokemon.scene.gameData.starterData[pokemon.species.getRootSpeciesId()].abilityAttr & Math.pow(2, pokemon.abilityIndex)))
// Check if Player owns all genders and forms of the Pokemon
const missingDexAttrs = ((dexEntry.caughtAttr & opponentPokemonDexAttr) < opponentPokemonDexAttr);
/**
* If the opposing Pokemon only has 1 normal ability and is using the hidden ability it should have the same behavior
* if it had 2 normal abilities. This code checks if that is the case and uses the correct opponent Pokemon abilityIndex (2)
* for calculations so it aligns with where the hidden ability is stored in the starter data's abilityAttr (4)
*/
const opponentPokemonOneNormalAbility = (pokemon.species.getAbilityCount() === 2);
const opponentPokemonAbilityIndex = (opponentPokemonOneNormalAbility && pokemon.abilityIndex === 1) ? 2 : pokemon.abilityIndex;
const opponentPokemonAbilityAttr = Math.pow(2, opponentPokemonAbilityIndex);
const rootFormHasHiddenAbility = pokemon.scene.gameData.starterData[pokemon.species.getRootSpeciesId()].abilityAttr & opponentPokemonAbilityAttr;
if (missingDexAttrs || !rootFormHasHiddenAbility)
this.ownedIcon.setTint(0x808080); this.ownedIcon.setTint(0x808080);
if (this.boss) if (this.boss)

View File

@ -7,6 +7,7 @@ import { getStatName, Stat } from "../data/pokemon-stat";
import { addWindow } from "./ui-theme"; import { addWindow } from "./ui-theme";
import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
import {Button} from "../enums/buttons"; import {Button} from "../enums/buttons";
import i18next from '../plugins/i18n';
export default class BattleMessageUiHandler extends MessageUiHandler { export default class BattleMessageUiHandler extends MessageUiHandler {
private levelUpStatsContainer: Phaser.GameObjects.Container; private levelUpStatsContainer: Phaser.GameObjects.Container;
@ -31,7 +32,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
this.textCallbackTimer = null; this.textCallbackTimer = null;
const bg = this.scene.add.sprite(0, 0, 'bg', this.scene.windowType); const bg = this.scene.add.sprite(0, 0, 'bg', this.scene.windowType);
bg.setOrigin(0, 1); bg.setOrigin(0, 1);
ui.add(bg); ui.add(bg);
this.bg = bg; this.bg = bg;
@ -234,20 +235,20 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
const textStyle: TextStyle = isBetter ? TextStyle.SUMMARY_GREEN : TextStyle.SUMMARY; const textStyle: TextStyle = isBetter ? TextStyle.SUMMARY_GREEN : TextStyle.SUMMARY;
const color = getTextColor(textStyle, false, uiTheme); const color = getTextColor(textStyle, false, uiTheme);
return `[color=${color}][shadow=${getTextColor(textStyle, true, uiTheme)}]${text}[/shadow][/color]`; return `[color=${color}][shadow=${getTextColor(textStyle, true, uiTheme)}]${text}[/shadow][/color]`;
}; };
if (value > 30) if (value > 30)
return coloredText('Best', value > starterIvs[typeIv]); return coloredText(i18next.t('battleMessageUiHandler:ivBest'), value > starterIvs[typeIv]);
if (value === 30) if (value === 30)
return coloredText('Fantastic', value > starterIvs[typeIv]); return coloredText(i18next.t('battleMessageUiHandler:ivFantastic'), value > starterIvs[typeIv]);
if (value > 20) if (value > 20)
return coloredText('Very Good', value > starterIvs[typeIv]); return coloredText(i18next.t('battleMessageUiHandler:ivVeryGood'), value > starterIvs[typeIv]);
if (value > 10) if (value > 10)
return coloredText('Pretty Good', value > starterIvs[typeIv]); return coloredText(i18next.t('battleMessageUiHandler:ivPrettyGood'), value > starterIvs[typeIv]);
if (value > 0) if (value > 0)
return coloredText('Decent', value > starterIvs[typeIv]); return coloredText(i18next.t('battleMessageUiHandler:ivDecent'), value > starterIvs[typeIv]);
return coloredText('No Good', value > starterIvs[typeIv]); return coloredText(i18next.t('battleMessageUiHandler:ivNoGood'), value > starterIvs[typeIv]);
} }
showNameText(name: string): void { showNameText(name: string): void {