Merge remote-tracking branch 'upstream/main' into summaryOption1

This commit is contained in:
Frutescens 2024-07-06 13:14:12 -07:00
commit 4c565958da
144 changed files with 4948 additions and 7508 deletions

3
.env.beta Normal file
View File

@ -0,0 +1,3 @@
VITE_BYPASS_LOGIN=0
VITE_BYPASS_TUTORIAL=0
VITE_SERVER_URL=https://api.beta.pokerogue.net

3
.env.production Normal file
View File

@ -0,0 +1,3 @@
VITE_BYPASS_LOGIN=0
VITE_BYPASS_TUTORIAL=0
VITE_SERVER_URL=https://api.pokerogue.net

33
.github/workflows/deploy-beta.yml vendored Normal file
View File

@ -0,0 +1,33 @@
name: Deploy Beta
on:
push: {}
pull_request: {}
jobs:
deploy:
if: github.repository == 'pagefaultgames/pokerogue'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build:beta
env:
NODE_ENV: production
- name: Set up SSH
if: github.event_name == 'push' && github.ref_name == github.event.repository.default_branch
run: |
mkdir ~/.ssh
echo "${{ secrets.BETA_SSH_PUBLIC_KEY }}" > ~/.ssh/id_ed25519.pub
echo "${{ secrets.BETA_SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/*
ssh-keyscan -H ${{ secrets.BETA_SSH_HOST }} >> ~/.ssh/known_hosts
- name: Deploy build on server
if: github.event_name == 'push' && github.ref_name == github.event.repository.default_branch
run: |
rsync --del --no-times --checksum -vrm dist/* ${{ secrets.BETA_SSH_USER }}@${{ secrets.BETA_SSH_HOST }}:${{ secrets.BETA_DESTINATION_DIR }}

View File

@ -7,6 +7,7 @@
"start": "vite", "start": "vite",
"start:dev": "vite --mode development", "start:dev": "vite --mode development",
"build": "vite build", "build": "vite build",
"build:beta": "vite build --mode beta",
"preview": "vite preview", "preview": "vite preview",
"test": "vitest run", "test": "vitest run",
"test:cov": "vitest run --coverage", "test:cov": "vitest run --coverage",

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@ -3,42 +3,42 @@
"7b4a7b": "204024", "7b4a7b": "204024",
"101010": "101010", "101010": "101010",
"efbdef": "bddd9e", "efbdef": "bddd9e",
"e6a5d6": "6c9e63", "e7a5d6": "6c9e63",
"b57bb5": "416240", "b57bb5": "416240",
"314273": "a86a2c", "314273": "a86a2c",
"4a73b5": "ffb554", "4a73b5": "ffb554",
"c52152": "ffa80e", "c62152": "ffa80e",
"ffffff": "ffffff", "ffffff": "ffffff",
"8c2152": "c54200", "8c2152": "c54200",
"8463b5": "ffa72a", "8463b5": "ffa72a",
"c5c5c5": "c5c5c5" "c6c6c6": "c5c5c5"
}, },
"1": { "1": {
"7b4a7b": "581747", "7b4a7b": "581747",
"101010": "101010", "101010": "101010",
"efbdef": "e99eae", "efbdef": "e99eae",
"e6a5d6": "d1759c", "e7a5d6": "d1759c",
"b57bb5": "953b6c", "b57bb5": "953b6c",
"314273": "537fde", "314273": "537fde",
"4a73b5": "90b7f9", "4a73b5": "90b7f9",
"c52152": "31d9ff", "c62152": "31d9ff",
"ffffff": "ffffff", "ffffff": "ffffff",
"8c2152": "15a7d2", "8c2152": "15a7d2",
"8463b5": "1662bf", "8463b5": "1662bf",
"c5c5c5": "c5c5c5" "c6c6c6": "c5c5c5"
}, },
"2": { "2": {
"7b4a7b": "9b5250", "7b4a7b": "9b5250",
"101010": "101010", "101010": "101010",
"efbdef": "f5f3e1", "efbdef": "f5f3e1",
"e6a5d6": "ded0af", "e7a5d6": "ded0af",
"b57bb5": "ce987a", "b57bb5": "ce987a",
"314273": "194540", "314273": "194540",
"4a73b5": "39816d", "4a73b5": "39816d",
"c52152": "00de92", "c62152": "00de92",
"ffffff": "ffffff", "ffffff": "ffffff",
"8c2152": "00ad7f", "8c2152": "00ad7f",
"8463b5": "006b5b", "8463b5": "006b5b",
"c5c5c5": "c5c5c5" "c6c6c6": "c5c5c5"
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -66,6 +66,7 @@ import { PlayerGender } from "#enums/player-gender";
import { Species } from "#enums/species"; import { Species } from "#enums/species";
import { UiTheme } from "#enums/ui-theme"; import { UiTheme } from "#enums/ui-theme";
import { TimedEventManager } from "#app/timed-event-manager.js"; import { TimedEventManager } from "#app/timed-event-manager.js";
import i18next from "i18next";
export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1";
@ -463,7 +464,7 @@ export default class BattleScene extends SceneBase {
this.luckText.setVisible(false); this.luckText.setVisible(false);
this.fieldUI.add(this.luckText); this.fieldUI.add(this.luckText);
this.luckLabelText = addTextObject(this, (this.game.canvas.width / 6) - 2, 0, "Luck:", TextStyle.PARTY, { fontSize: "54px" }); this.luckLabelText = addTextObject(this, (this.game.canvas.width / 6) - 2, 0, i18next.t("common:luckIndicator"), TextStyle.PARTY, { fontSize: "54px" });
this.luckLabelText.setName("text-luck-label"); this.luckLabelText.setName("text-luck-label");
this.luckLabelText.setOrigin(1, 0.5); this.luckLabelText.setOrigin(1, 0.5);
this.luckLabelText.setVisible(false); this.luckLabelText.setVisible(false);
@ -1226,6 +1227,7 @@ export default class BattleScene extends SceneBase {
case Species.ZARUDE: case Species.ZARUDE:
case Species.SQUAWKABILLY: case Species.SQUAWKABILLY:
case Species.TATSUGIRI: case Species.TATSUGIRI:
case Species.GIMMIGHOUL:
case Species.PALDEA_TAUROS: case Species.PALDEA_TAUROS:
return Utils.randSeedInt(species.forms.length); return Utils.randSeedInt(species.forms.length);
case Species.PIKACHU: case Species.PIKACHU:

View File

@ -879,7 +879,7 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr {
} }
applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean {
if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon)) { if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) {
attacker.damageAndUpdate(Math.ceil(attacker.getMaxHp() * (1 / this.damageRatio)), HitResult.OTHER); attacker.damageAndUpdate(Math.ceil(attacker.getMaxHp() * (1 / this.damageRatio)), HitResult.OTHER);
attacker.turnData.damageTaken += Math.ceil(attacker.getMaxHp() * (1 / this.damageRatio)); attacker.turnData.damageTaken += Math.ceil(attacker.getMaxHp() * (1 / this.damageRatio));
return true; return true;
@ -1296,6 +1296,7 @@ export class AddSecondStrikeAbAttr extends PreAttackAbAttr {
const multiplier = args[2] as Utils.NumberHolder; const multiplier = args[2] as Utils.NumberHolder;
if (this.canApplyPreAttack(move, numTargets)) { if (this.canApplyPreAttack(move, numTargets)) {
this.showAbility = !!hitCount?.value;
if (!!hitCount?.value) { if (!!hitCount?.value) {
hitCount.value *= 2; hitCount.value *= 2;
} }

View File

@ -934,9 +934,11 @@ export class ContactDamageProtectedTag extends ProtectedTag {
const effectPhase = pokemon.scene.getCurrentPhase(); const effectPhase = pokemon.scene.getCurrentPhase();
if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) {
const attacker = effectPhase.getPokemon(); const attacker = effectPhase.getPokemon();
if (!attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) {
attacker.damageAndUpdate(Math.ceil(attacker.getMaxHp() * (1 / this.damageRatio)), HitResult.OTHER); attacker.damageAndUpdate(Math.ceil(attacker.getMaxHp() * (1 / this.damageRatio)), HitResult.OTHER);
} }
} }
}
return ret; return ret;
} }

View File

@ -1155,7 +1155,7 @@ export class SacrificialAttr extends MoveEffectAttr {
**/ **/
export class SacrificialAttrOnHit extends MoveEffectAttr { export class SacrificialAttrOnHit extends MoveEffectAttr {
constructor() { constructor() {
super(true, MoveEffectTrigger.POST_TARGET); super(true, MoveEffectTrigger.HIT);
} }
/** /**

View File

@ -1618,7 +1618,8 @@ export const pokemonEvolutions: PokemonEvolutions = {
new SpeciesEvolution(Species.FROSMOTH, 1, null, new SpeciesFriendshipEvolutionCondition(90, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.MEDIUM) new SpeciesEvolution(Species.FROSMOTH, 1, null, new SpeciesFriendshipEvolutionCondition(90, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.MEDIUM)
], ],
[Species.GIMMIGHOUL]: [ [Species.GIMMIGHOUL]: [
new SpeciesEvolution(Species.GHOLDENGO, 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.VERY_LONG) new SpeciesFormEvolution(Species.GHOLDENGO, "chest", "", 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.VERY_LONG),
new SpeciesFormEvolution(Species.GHOLDENGO, "roaming", "", 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.VERY_LONG)
] ]
}; };

File diff suppressed because it is too large Load Diff

View File

@ -779,7 +779,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali
} }
// This could definitely be written better and more accurate to the getSpeciesForLevel logic, but it is only for generating movesets for evolved Pokemon // This could definitely be written better and more accurate to the getSpeciesForLevel logic, but it is only for generating movesets for evolved Pokemon
getSimulatedEvolutionChain(currentLevel: integer, forTrainer: boolean = false, isBoss: boolean = false, player: boolean = false) { getSimulatedEvolutionChain(currentLevel: integer, forTrainer: boolean = false, isBoss: boolean = false, player: boolean = false): [Species, integer][] {
const ret = []; const ret = [];
if (pokemonPrevolutions.hasOwnProperty(this.speciesId)) { if (pokemonPrevolutions.hasOwnProperty(this.speciesId)) {
const prevolutionLevels = this.getPrevolutionLevels().reverse(); const prevolutionLevels = this.getPrevolutionLevels().reverse();

View File

@ -38685,6 +38685,8 @@ export const tmSpecies: TmSpecies = {
Species.GOLDEEN, Species.GOLDEEN,
Species.SEAKING, Species.SEAKING,
Species.SCYTHER, Species.SCYTHER,
Species.ELECTABUZZ,
Species.MAGMAR,
Species.PINSIR, Species.PINSIR,
Species.OMANYTE, Species.OMANYTE,
Species.OMASTAR, Species.OMASTAR,
@ -38692,6 +38694,8 @@ export const tmSpecies: TmSpecies = {
Species.KABUTOPS, Species.KABUTOPS,
Species.MEWTWO, Species.MEWTWO,
Species.MEW, Species.MEW,
Species.BAYLEEF,
Species.MEGANIUM,
Species.SENTRET, Species.SENTRET,
Species.FURRET, Species.FURRET,
Species.LEDYBA, Species.LEDYBA,
@ -38708,8 +38712,10 @@ export const tmSpecies: TmSpecies = {
Species.SNEASEL, Species.SNEASEL,
Species.PHANPY, Species.PHANPY,
Species.DONPHAN, Species.DONPHAN,
Species.ELEKID,
Species.TYRANITAR, Species.TYRANITAR,
Species.BLAZIKEN, Species.BLAZIKEN,
Species.SWAMPERT,
Species.LOMBRE, Species.LOMBRE,
Species.LUDICOLO, Species.LUDICOLO,
Species.NUZLEAF, Species.NUZLEAF,
@ -38740,12 +38746,7 @@ export const tmSpecies: TmSpecies = {
Species.CHIMECHO, Species.CHIMECHO,
Species.ABSOL, Species.ABSOL,
Species.METAGROSS, Species.METAGROSS,
[
Species.DEOXYS, Species.DEOXYS,
"",
"defense",
"speed",
],
Species.CHIMCHAR, Species.CHIMCHAR,
Species.MONFERNO, Species.MONFERNO,
Species.INFERNAPE, Species.INFERNAPE,
@ -38767,6 +38768,8 @@ export const tmSpecies: TmSpecies = {
Species.WEAVILE, Species.WEAVILE,
Species.LICKILICKY, Species.LICKILICKY,
Species.TANGROWTH, Species.TANGROWTH,
Species.ELECTIVIRE,
Species.MAGMORTAR,
Species.LEAFEON, Species.LEAFEON,
Species.GLISCOR, Species.GLISCOR,
Species.MAMOSWINE, Species.MAMOSWINE,
@ -38781,6 +38784,8 @@ export const tmSpecies: TmSpecies = {
Species.SNIVY, Species.SNIVY,
Species.SERVINE, Species.SERVINE,
Species.SERPERIOR, Species.SERPERIOR,
Species.PIGNITE,
Species.EMBOAR,
Species.OSHAWOTT, Species.OSHAWOTT,
Species.DEWOTT, Species.DEWOTT,
Species.SAMUROTT, Species.SAMUROTT,
@ -38837,6 +38842,8 @@ export const tmSpecies: TmSpecies = {
Species.ACCELGOR, Species.ACCELGOR,
Species.MIENFOO, Species.MIENFOO,
Species.MIENSHAO, Species.MIENSHAO,
Species.GOLETT,
Species.GOLURK,
Species.PAWNIARD, Species.PAWNIARD,
Species.BISHARP, Species.BISHARP,
Species.VULLABY, Species.VULLABY,
@ -38873,6 +38880,7 @@ export const tmSpecies: TmSpecies = {
Species.SALAZZLE, Species.SALAZZLE,
Species.STEENEE, Species.STEENEE,
Species.TSAREENA, Species.TSAREENA,
Species.COMFEY,
Species.ORANGURU, Species.ORANGURU,
Species.PASSIMIAN, Species.PASSIMIAN,
Species.GOLISOPOD, Species.GOLISOPOD,
@ -38945,6 +38953,7 @@ export const tmSpecies: TmSpecies = {
Species.GALAR_FARFETCHD, Species.GALAR_FARFETCHD,
Species.GALAR_ZAPDOS, Species.GALAR_ZAPDOS,
Species.GALAR_ZIGZAGOON, Species.GALAR_ZIGZAGOON,
Species.GALAR_LINOONE,
Species.HISUI_SAMUROTT, Species.HISUI_SAMUROTT,
Species.HISUI_ZORUA, Species.HISUI_ZORUA,
Species.HISUI_ZOROARK, Species.HISUI_ZOROARK,
@ -61853,6 +61862,7 @@ export const tmSpecies: TmSpecies = {
Species.METANG, Species.METANG,
Species.METAGROSS, Species.METAGROSS,
Species.JIRACHI, Species.JIRACHI,
Species.DEOXYS,
Species.BRONZOR, Species.BRONZOR,
Species.BRONZONG, Species.BRONZONG,
Species.GALLADE, Species.GALLADE,

View File

@ -849,8 +849,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
return ret; return ret;
} }
/**
* All moves that could be relearned by this pokemon at this point. Used for memory mushrooms.
* @returns {Moves[]} The valid moves
*/
getLearnableLevelMoves(): Moves[] { getLearnableLevelMoves(): Moves[] {
return this.getLevelMoves(1, true).map(lm => lm[1]).filter(lm => !this.moveset.filter(m => m.moveId === lm).length).filter((move: Moves, i: integer, array: Moves[]) => array.indexOf(move) === i); return this.getLevelMoves(1, true, false, true).map(lm => lm[1]).filter(lm => !this.moveset.filter(m => m.moveId === lm).length).filter((move: Moves, i: integer, array: Moves[]) => array.indexOf(move) === i);
} }
/** /**
@ -1158,7 +1162,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
return (!cancelled.value ? Number(typeMultiplier.value) : 0) as TypeDamageMultiplier; return (!cancelled.value ? Number(typeMultiplier.value) : 0) as TypeDamageMultiplier;
} }
getAttackTypeEffectiveness(moveType: Type, source?: Pokemon, ignoreStrongWinds: boolean = false): TypeDamageMultiplier { /**
* Calculates the type effectiveness multiplier for an attack type
* @param moveType Type of the move
* @param source the Pokemon using the move
* @param ignoreStrongWinds whether or not this ignores strong winds (anticipation, forewarn, stealth rocks)
* @param simulated tag to only apply the strong winds effect message when the move is used
* @returns a multiplier for the type effectiveness
*/
getAttackTypeEffectiveness(moveType: Type, source?: Pokemon, ignoreStrongWinds: boolean = false, simulated: boolean = true): TypeDamageMultiplier {
if (moveType === Type.STELLAR) { if (moveType === Type.STELLAR) {
return this.isTerastallized() ? 2 : 1; return this.isTerastallized() ? 2 : 1;
} }
@ -1179,8 +1191,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
}).reduce((acc, cur) => acc * cur, 1) as TypeDamageMultiplier; }).reduce((acc, cur) => acc * cur, 1) as TypeDamageMultiplier;
// Handle strong winds lowering effectiveness of types super effective against pure flying // Handle strong winds lowering effectiveness of types super effective against pure flying
if (!ignoreStrongWinds && this.scene.arena.weather?.weatherType === WeatherType.STRONG_WINDS && !this.scene.arena.weather.isEffectSuppressed(this.scene) && multiplier >= 2 && this.isOfType(Type.FLYING) && getTypeDamageMultiplier(moveType, Type.FLYING) === 2) { if (!ignoreStrongWinds && this.scene.arena.weather?.weatherType === WeatherType.STRONG_WINDS && !this.scene.arena.weather.isEffectSuppressed(this.scene) && this.isOfType(Type.FLYING) && getTypeDamageMultiplier(moveType, Type.FLYING) === 2) {
multiplier /= 2; multiplier /= 2;
if (!simulated) {
this.scene.queueMessage(i18next.t("weather:strongWindsEffectMessage"));
}
} }
if (!!this.summonData?.tags.find((tag) => tag instanceof TypeImmuneTag && tag.immuneType === moveType)) { if (!!this.summonData?.tags.find((tag) => tag instanceof TypeImmuneTag && tag.immuneType === moveType)) {
@ -1235,7 +1250,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
return null; return null;
} }
getLevelMoves(startingLevel?: integer, includeEvolutionMoves: boolean = false, simulateEvolutionChain: boolean = false): LevelMoves { /**
* Gets all level up moves in a given range for a particular pokemon.
* @param {integer} startingLevel Don't include moves below this level
* @param {boolean} includeEvolutionMoves Whether to include evolution moves
* @param {boolean} simulateEvolutionChain Whether to include moves from prior evolutions
* @param {boolean} includeRelearnerMoves Whether to include moves that would require a relearner. Note the move relearner inherently allows evolution moves
* @returns {LevelMoves} A list of moves and the levels they can be learned at
*/
getLevelMoves(startingLevel?: integer, includeEvolutionMoves: boolean = false, simulateEvolutionChain: boolean = false, includeRelearnerMoves: boolean = false): LevelMoves {
const ret: LevelMoves = []; const ret: LevelMoves = [];
let levelMoves: LevelMoves = []; let levelMoves: LevelMoves = [];
if (!startingLevel) { if (!startingLevel) {
@ -1246,7 +1269,30 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
for (let e = 0; e < evolutionChain.length; e++) { for (let e = 0; e < evolutionChain.length; e++) {
// TODO: Might need to pass specific form index in simulated evolution chain // TODO: Might need to pass specific form index in simulated evolution chain
const speciesLevelMoves = getPokemonSpeciesForm(evolutionChain[e][0] as Species, this.formIndex).getLevelMoves(); const speciesLevelMoves = getPokemonSpeciesForm(evolutionChain[e][0] as Species, this.formIndex).getLevelMoves();
levelMoves.push(...speciesLevelMoves.filter(lm => (includeEvolutionMoves && !lm[0]) || ((!e || lm[0] > 1) && (e === evolutionChain.length - 1 || lm[0] <= evolutionChain[e + 1][1])))); if (includeRelearnerMoves) {
levelMoves.push(...speciesLevelMoves);
} else {
levelMoves.push(...speciesLevelMoves.filter(lm => (includeEvolutionMoves && lm[0] === 0) || ((!e || lm[0] > 1) && (e === evolutionChain.length - 1 || lm[0] <= evolutionChain[e + 1][1]))));
}
}
} else {
levelMoves = this.getSpeciesForm(true).getLevelMoves().filter(lm => (includeEvolutionMoves && lm[0] === 0) || (includeRelearnerMoves && lm[0] === -1) || lm[0] > 0);
}
if (this.fusionSpecies) {
if (simulateEvolutionChain) {
const fusionEvolutionChain = this.fusionSpecies.getSimulatedEvolutionChain(this.level, this.hasTrainer(), this.isBoss(), this.isPlayer());
for (let e = 0; e < fusionEvolutionChain.length; e++) {
// TODO: Might need to pass specific form index in simulated evolution chain
const speciesLevelMoves = getPokemonSpeciesForm(fusionEvolutionChain[e][0] as Species, this.fusionFormIndex).getLevelMoves();
if (includeRelearnerMoves) {
levelMoves.push(...speciesLevelMoves.filter(lm => (includeEvolutionMoves && lm[0] === 0) || lm[0] !== 0));
} else {
levelMoves.push(...speciesLevelMoves.filter(lm => (includeEvolutionMoves && lm[0] === 0) || ((!e || lm[0] > 1) && (e === fusionEvolutionChain.length - 1 || lm[0] <= fusionEvolutionChain[e + 1][1]))));
}
}
} else {
levelMoves.push(...this.getFusionSpeciesForm(true).getLevelMoves().filter(lm => (includeEvolutionMoves && lm[0] === 0) || (includeRelearnerMoves && lm[0] === -1) || lm[0] > 0));
}
} }
levelMoves.sort((lma: [integer, integer], lmb: [integer, integer]) => lma[0] > lmb[0] ? 1 : lma[0] < lmb[0] ? -1 : 0); levelMoves.sort((lma: [integer, integer], lmb: [integer, integer]) => lma[0] > lmb[0] ? 1 : lma[0] < lmb[0] ? -1 : 0);
const uniqueMoves: Moves[] = []; const uniqueMoves: Moves[] = [];
@ -1257,51 +1303,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
uniqueMoves.push(lm[1]); uniqueMoves.push(lm[1]);
return true; return true;
}); });
} else {
levelMoves = this.getSpeciesForm(true).getLevelMoves();
}
if (this.fusionSpecies) {
const evolutionLevelMoves = levelMoves.slice(0, Math.max(levelMoves.findIndex(lm => !!lm[0]), 0));
const fusionLevelMoves = this.getFusionSpeciesForm(true).getLevelMoves();
const fusionEvolutionLevelMoves = fusionLevelMoves.slice(0, Math.max(fusionLevelMoves.findIndex(flm => !!flm[0]), 0));
const newLevelMoves: LevelMoves = [];
while (levelMoves.length && levelMoves[0][0] < startingLevel) {
levelMoves.shift();
}
while (fusionLevelMoves.length && fusionLevelMoves[0][0] < startingLevel) {
fusionLevelMoves.shift();
}
if (includeEvolutionMoves) {
for (const elm of evolutionLevelMoves.reverse()) {
levelMoves.unshift(elm);
}
for (const felm of fusionEvolutionLevelMoves.reverse()) {
fusionLevelMoves.unshift(felm);
}
}
for (let l = includeEvolutionMoves ? 0 : startingLevel; l <= this.level; l++) {
if (l === 1 && startingLevel > 1) {
l = startingLevel;
}
while (levelMoves.length && levelMoves[0][0] === l) {
const levelMove = levelMoves.shift();
if (!newLevelMoves.find(lm => lm[1] === levelMove[1])) {
newLevelMoves.push(levelMove);
}
}
while (fusionLevelMoves.length && fusionLevelMoves[0][0] === l) {
const fusionLevelMove = fusionLevelMoves.shift();
if (!newLevelMoves.find(lm => lm[1] === fusionLevelMove[1])) {
newLevelMoves.push(fusionLevelMove);
}
}
}
levelMoves = newLevelMoves;
}
if (levelMoves) { if (levelMoves) {
for (const lm of levelMoves) { for (const lm of levelMoves) {
const level = lm[0]; const level = lm[0];
if ((!includeEvolutionMoves || level) && level < startingLevel) { if (!includeRelearnerMoves && ((level > 0 && level < startingLevel) || (!includeEvolutionMoves && level === 0) || level < 0)) {
continue; continue;
} else if (level > this.level) { } else if (level > this.level) {
break; break;
@ -1744,7 +1750,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
const cancelled = new Utils.BooleanHolder(false); const cancelled = new Utils.BooleanHolder(false);
const typeless = move.hasAttr(TypelessAttr); const typeless = move.hasAttr(TypelessAttr);
const typeMultiplier = new Utils.NumberHolder(!typeless && (moveCategory !== MoveCategory.STATUS || move.getAttrs(StatusMoveTypeImmunityAttr).find(attr => types.includes(attr.immuneType))) const typeMultiplier = new Utils.NumberHolder(!typeless && (moveCategory !== MoveCategory.STATUS || move.getAttrs(StatusMoveTypeImmunityAttr).find(attr => types.includes(attr.immuneType)))
? this.getAttackTypeEffectiveness(move.type, source) ? this.getAttackTypeEffectiveness(move.type, source, false, false)
: 1); : 1);
applyMoveAttrs(VariableMoveTypeMultiplierAttr, source, this, move, typeMultiplier); applyMoveAttrs(VariableMoveTypeMultiplierAttr, source, this, move, typeMultiplier);
if (typeless) { if (typeless) {
@ -3117,7 +3123,7 @@ export class PlayerPokemon extends Pokemon {
fusionStarterSpeciesId ? this.scene.gameData.starterData[fusionStarterSpeciesId] : null fusionStarterSpeciesId ? this.scene.gameData.starterData[fusionStarterSpeciesId] : null
].filter(d => d); ].filter(d => d);
const amount = new Utils.IntegerHolder(friendship); const amount = new Utils.IntegerHolder(friendship);
const starterAmount = new Utils.IntegerHolder(Math.floor(friendship * (this.scene.gameMode.isClassic ? 2 : 1) / (fusionStarterSpeciesId ? 2 : 1))); const starterAmount = new Utils.IntegerHolder(Math.floor(friendship * (this.scene.gameMode.isClassic && friendship > 0 ? 2 : 1) / (fusionStarterSpeciesId ? 2 : 1)));
if (amount.value > 0) { if (amount.value > 0) {
this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount); this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount);
this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, starterAmount); this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, starterAmount);

View File

@ -280,7 +280,6 @@ export class QuietFormChangePhase extends BattlePhase {
end(): void { end(): void {
if (this.pokemon.scene?.currentBattle.battleSpec === BattleSpec.FINAL_BOSS && this.pokemon instanceof EnemyPokemon) { if (this.pokemon.scene?.currentBattle.battleSpec === BattleSpec.FINAL_BOSS && this.pokemon instanceof EnemyPokemon) {
this.scene.playBgm(); this.scene.playBgm();
this.pokemon.summonData.battleStats = [ 0, 0, 0, 0, 0, 0, 0 ];
this.scene.unshiftPhase(new PokemonHealPhase(this.scene, this.pokemon.getBattlerIndex(), this.pokemon.getMaxHp(), null, false, false, false, true)); this.scene.unshiftPhase(new PokemonHealPhase(this.scene, this.pokemon.getBattlerIndex(), this.pokemon.getMaxHp(), null, false, false, false, true));
this.pokemon.findAndRemoveTags(() => true); this.pokemon.findAndRemoveTags(() => true);
this.pokemon.bossSegments = 5; this.pokemon.bossSegments = 5;

View File

@ -78,6 +78,7 @@ export class LoadingScene extends SceneBase {
this.loadImage("overlay_exp", "ui"); this.loadImage("overlay_exp", "ui");
this.loadImage("icon_owned", "ui"); this.loadImage("icon_owned", "ui");
this.loadImage("ability_bar_left", "ui"); this.loadImage("ability_bar_left", "ui");
this.loadImage("bgm_bar", "ui");
this.loadImage("party_exp_bar", "ui"); this.loadImage("party_exp_bar", "ui");
this.loadImage("achv_bar", "ui"); this.loadImage("achv_bar", "ui");
this.loadImage("achv_bar_2", "ui"); this.loadImage("achv_bar_2", "ui");

View File

@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = {
"hitResultNoEffect": "Es hat keine Wirkung auf {{pokemonName}}…", "hitResultNoEffect": "Es hat keine Wirkung auf {{pokemonName}}…",
"hitResultOneHitKO": "Ein K.O.-Treffer!", "hitResultOneHitKO": "Ein K.O.-Treffer!",
"attackFailed": "Es ist fehlgeschlagen!", "attackFailed": "Es ist fehlgeschlagen!",
"attackMissed": "Die Attacke hat {{pokemonNameWithAffix}} verfehlt!",
"attackHitsCount": "{{count}}-mal getroffen!", "attackHitsCount": "{{count}}-mal getroffen!",
"rewardGain": "Du erhältst\n{{modifierName}}!", "rewardGain": "Du erhältst\n{{modifierName}}!",
"expGain": "{{pokemonName}} erhält\n{{exp}} Erfahrungspunkte!", "expGain": "{{pokemonName}} erhält\n{{exp}} Erfahrungspunkte!",

View File

@ -1,7 +1,7 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales"; import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const bgmName: SimpleTranslationEntries = { export const bgmName: SimpleTranslationEntries = {
"music": "Musik", "music": "Musik: ",
"missing_entries" : "{{name}}", "missing_entries" : "{{name}}",
"battle_kanto_champion": "S2W2 Vs. Kanto Champion", "battle_kanto_champion": "S2W2 Vs. Kanto Champion",
"battle_johto_champion": "S2W2 Vs. Johto Champion", "battle_johto_champion": "S2W2 Vs. Johto Champion",

View File

@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const common: SimpleTranslationEntries = { export const common: SimpleTranslationEntries = {
"start": "Start", "start": "Start",
"luckIndicator": "Glück:",
"shinyOnHover": "Schillernd",
"commonShiny": "Gewöhnlich",
"rareShiny": "Selten",
"epicShiny": "Episch",
} as const; } as const;

View File

@ -43,6 +43,7 @@ import { weather } from "./weather";
import { partyUiHandler } from "./party-ui-handler"; import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
export const deConfig = { export const deConfig = {
ability: ability, ability: ability,
@ -90,5 +91,6 @@ export const deConfig = {
tutorial: tutorial, tutorial: tutorial,
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler
}; };

View File

@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = {
"hatchFromTheEgg": "Ein {{pokemonName}} ist aus dem Ei geschlüpft!", "hatchFromTheEgg": "Ein {{pokemonName}} ist aus dem Ei geschlüpft!",
"eggMoveUnlock": "Ei-Attacke freigeschaltet: {{moveName}}", "eggMoveUnlock": "Ei-Attacke freigeschaltet: {{moveName}}",
"rareEggMoveUnlock": "Seltene Ei-Attacke freigeschaltet: {{moveName}}", "rareEggMoveUnlock": "Seltene Ei-Attacke freigeschaltet: {{moveName}}",
"moveUPGacha": "Mehr\nEi-Attacken!",
"shinyUPGacha": "Mehr\nSchillernde!",
"legendaryUPGacha": "erscheint\nöfter!",
} as const; } as const;

View File

@ -53,6 +53,5 @@ export const menu: SimpleTranslationEntries = {
"no":"Nein", "no":"Nein",
"disclaimer": "HAFTUNGSAUSSCHLUSS", "disclaimer": "HAFTUNGSAUSSCHLUSS",
"disclaimerDescription": "Dieses Spiel ist ein unfertiges Produkt. Es kann spielbeinträchtigende Fehler (bis hin zum Verlust des Speicherstandes)\n aufweisen, sich ohne Vorankündigung ändern und es gibt keine Garantie dass es weiterentwickelt oder fertiggestellt wird.", "disclaimerDescription": "Dieses Spiel ist ein unfertiges Produkt. Es kann spielbeinträchtigende Fehler (bis hin zum Verlust des Speicherstandes)\n aufweisen, sich ohne Vorankündigung ändern und es gibt keine Garantie dass es weiterentwickelt oder fertiggestellt wird.",
"choosePokemon": "Wähle ein Pokémon.",
"errorServerDown": "Ups! Es gab einen Fehler beim Versuch\nden Server zu kontaktieren\nLasse dieses Fenster offen\nDu wirst automatisch neu verbunden.", "errorServerDown": "Ups! Es gab einen Fehler beim Versuch\nden Server zu kontaktieren\nLasse dieses Fenster offen\nDu wirst automatisch neu verbunden.",
} as const; } as const;

View File

@ -0,0 +1,14 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const modifierSelectUiHandler: SimpleTranslationEntries = {
"transfer": "Übertragen",
"reroll": "Neu rollen",
"lockRarities": "Seltenheit festsetzen",
"checkTeam": "Team überprüfen",
"transferDesc": "Übertrage ein gehaltenes Item zu einem anderen Pokémon.",
"rerollDesc": "Nutze Geld um die Items neu zu rollen.",
"lockRaritiesDesc": "Setze die Seltenheit der Items fest. (Beeinflusst die Rollkosten).",
"checkTeamDesc": "Überprüfe dein Team or nutze Formänderungsitems.",
"rerollCost": "{{formattedMoney}}₽",
"itemCost": "{{formattedMoney}}₽"
} as const;

View File

@ -6,5 +6,48 @@ export const partyUiHandler: SimpleTranslationEntries = {
"CANCEL": "Abbrechen", "CANCEL": "Abbrechen",
"RELEASE": "Freilassen", "RELEASE": "Freilassen",
"APPLY": "Anwenden", "APPLY": "Anwenden",
"TEACH": "Erlernen" "TEACH": "Erlernen",
"SPLICE": "Fusionieren",
"UNSPLICE": "Defusionieren",
"ACTIVATE": "Aktivieren",
"DEACTIVATE": "Deaktivieren",
"TRANSFER": "Übertragen",
"ALL": "Alle",
"PASS_BATON": "Stafette nutzen",
"UNPAUSE_EVOLUTION": "Entwicklung fortsetzen",
"REVIVE": "Wiederbeleben",
"choosePokemon": "Wähle ein Pokémon.",
"doWhatWithThisPokemon": "Was soll mit diesem Pokémon geschehen?",
"noEnergy": "{{pokemonName}} ist nicht fit genug, um zu kämpfen!",
"hasEnergy": "{{pokemonName}} steckt noch voller Energie",
"cantBeUsed": "{{pokemonName}} kann in dieser Herausforderung nicht verwendet werden!",
"tooManyItems": "{{pokemonName}} trägt bereits zu viele dieser Items!",
"anyEffect": "Das würde keine Wirkung zeigen.",
"unpausedEvolutions": "Entwicklungen für {{pokemonName}} wurden wieder aktiviert.",
"unspliceConfirmation": "Willst du wirklich {{fusionName}} von {{pokemonName}} defusionieren? {{fusionName}} wird freigelassen.",
"wasReverted": "{{fusionName}} verwandelt sich in {{pokemonName}} zurück.",
"releaseConfirmation": "Möchtest du {{pokemonName}} wirklich freilassen?",
"releaseInBattle": "Pokémon, die aktuell im Kampf sind, können nicht freigelassen werden.",
"selectAMove": "Wähle eine Attacke.",
"changeQuantity": "Wähle ein getragenes Item aus, das übertragen werden soll. Nutze < und > um die Anzahl zu ändern.",
"selectAnotherPokemonToSplice": "Wähle ein anderes Pokémon mit dem fusioniert werden soll aus.",
"cancel": "Abbrechen",
// Slot TM text
"able": "Erlernbar!",
"notAble": "Nicht erlernbar",
"learned": "Bereits erlernt!",
// Releasing messages
"goodbye": "Auf wiedersehen, {{pokemonName}}!",
"byebye": "Byebye, {{pokemonName}}!",
"farewell": "Machs gut, {{pokemonName}}!",
"soLong": "Bis dann, {{pokemonName}}!",
"thisIsWhereWePart": "Nun heißt es Abschied nehmen, {{pokemonName}}!",
"illMissYou": "Ich werde dich vermissen, {{pokemonName}}!",
"illNeverForgetYou": "Ich werde dich niemals vergessen, {{pokemonName}}!",
"untilWeMeetAgain": "Bis wir uns wiedersehen, {{pokemonName}}!",
"sayonara": "Sayonara, {{pokemonName}}!",
"smellYaLater": "Also dann, man riecht sich! Ciao!, {{pokemonName}}!",
} as const; } as const;

View File

@ -5,7 +5,4 @@ export const pokemonInfoContainer: SimpleTranslationEntries = {
"gender": "Geschlecht:", "gender": "Geschlecht:",
"ability": "Fähigkeit:", "ability": "Fähigkeit:",
"nature": "Wesen:", "nature": "Wesen:",
"epic": "Episch",
"rare": "Selten",
"common": "Gewöhnlich"
} as const; } as const;

View File

@ -40,5 +40,6 @@ export const weather: SimpleTranslationEntries = {
"strongWindsStartMessage": "Alle Flug-Pokémon werden von rätselhaften Luftströmungen geschützt!", "strongWindsStartMessage": "Alle Flug-Pokémon werden von rätselhaften Luftströmungen geschützt!",
"strongWindsLapseMessage": "Die rätselhafte Luftströmung hält an.", "strongWindsLapseMessage": "Die rätselhafte Luftströmung hält an.",
"strongWindsEffectMessage": "Rätselhafte Luftströmungen haben den Angriff abgeschwächt!",
"strongWindsClearMessage": "Die rätselhafte Luftströmung hat sich wieder geleget.", "strongWindsClearMessage": "Die rätselhafte Luftströmung hat sich wieder geleget.",
}; };

View File

@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = {
"hitResultNoEffect": "It doesn't affect {{pokemonName}}!", "hitResultNoEffect": "It doesn't affect {{pokemonName}}!",
"hitResultOneHitKO": "It's a one-hit KO!", "hitResultOneHitKO": "It's a one-hit KO!",
"attackFailed": "But it failed!", "attackFailed": "But it failed!",
"attackMissed": "{{pokemonNameWithAffix}} avoided the attack!",
"attackHitsCount": "Hit {{count}} time(s)!", "attackHitsCount": "Hit {{count}} time(s)!",
"rewardGain": "You received\n{{modifierName}}!", "rewardGain": "You received\n{{modifierName}}!",
"expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!", "expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!",

View File

@ -1,7 +1,7 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales"; import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const bgmName: SimpleTranslationEntries = { export const bgmName: SimpleTranslationEntries = {
"music": "Music", "music": "Music: ",
"missing_entries" : "{{name}}", "missing_entries" : "{{name}}",
"battle_kanto_champion": "B2W2 Kanto Champion Battle", "battle_kanto_champion": "B2W2 Kanto Champion Battle",
"battle_johto_champion": "B2W2 Johto Champion Battle", "battle_johto_champion": "B2W2 Johto Champion Battle",

View File

@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const common: SimpleTranslationEntries = { export const common: SimpleTranslationEntries = {
"start": "Start", "start": "Start",
"luckIndicator": "Luck:",
"shinyOnHover": "Shiny",
"commonShiny": "Common",
"rareShiny": "Rare",
"epicShiny": "Epic",
} as const; } as const;

View File

@ -43,6 +43,7 @@ import { titles, trainerClasses, trainerNames } from "./trainers";
import { tutorial } from "./tutorial"; import { tutorial } from "./tutorial";
import { voucher } from "./voucher"; import { voucher } from "./voucher";
import { weather } from "./weather"; import { weather } from "./weather";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
export const enConfig = { export const enConfig = {
ability: ability, ability: ability,
@ -91,4 +92,5 @@ export const enConfig = {
tutorial: tutorial, tutorial: tutorial,
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
modifierSelectUiHandler: modifierSelectUiHandler
}; };

View File

@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = {
"hatchFromTheEgg": "{{pokemonName}} hatched from the egg!", "hatchFromTheEgg": "{{pokemonName}} hatched from the egg!",
"eggMoveUnlock": "Egg Move unlocked: {{moveName}}", "eggMoveUnlock": "Egg Move unlocked: {{moveName}}",
"rareEggMoveUnlock": "Rare Egg Move unlocked: {{moveName}}", "rareEggMoveUnlock": "Rare Egg Move unlocked: {{moveName}}",
"moveUPGacha": "Move UP!",
"shinyUPGacha": "Shiny UP!",
"legendaryUPGacha": "UP!",
} as const; } as const;

View File

@ -53,6 +53,5 @@ export const menu: SimpleTranslationEntries = {
"no":"No", "no":"No",
"disclaimer": "DISCLAIMER", "disclaimer": "DISCLAIMER",
"disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed.", "disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed.",
"choosePokemon": "Choose a Pokémon.",
"errorServerDown": "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect.", "errorServerDown": "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect.",
} as const; } as const;

View File

@ -0,0 +1,14 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const modifierSelectUiHandler: SimpleTranslationEntries = {
"transfer": "Transfer",
"reroll": "Reroll",
"lockRarities": "Lock Rarities",
"checkTeam": "Check Team",
"transferDesc": "Transfer a held item from one Pokémon to another.",
"rerollDesc": "Spend money to reroll your item options.",
"lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).",
"checkTeamDesc": "Check your team or use a form changing item.",
"rerollCost": "₽{{formattedMoney}}",
"itemCost": "₽{{formattedMoney}}"
} as const;

View File

@ -1,11 +1,53 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales"; import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const partyUiHandler: SimpleTranslationEntries = { export const partyUiHandler: SimpleTranslationEntries = {
"ALL": "All",
"SEND_OUT": "Send Out", "SEND_OUT": "Send Out",
"SUMMARY": "Summary", "SUMMARY": "Summary",
"CANCEL": "Cancel", "CANCEL": "Cancel",
"RELEASE": "Release", "RELEASE": "Release",
"APPLY": "Apply", "APPLY": "Apply",
"TEACH": "Teach" "TEACH": "Teach",
"SPLICE": "Splice",
"UNSPLICE": "Unsplice",
"ACTIVATE": "Activate",
"DEACTIVATE": "Deactivate",
"TRANSFER": "Transfer",
"ALL": "All",
"PASS_BATON": "Pass Baton",
"UNPAUSE_EVOLUTION": "Unpause Evolution",
"REVIVE": "Revive",
"choosePokemon": "Choose a Pokémon.",
"doWhatWithThisPokemon": "Do what with this Pokémon?",
"noEnergy": "{{pokemonName}} has no energy\nleft to battle!",
"hasEnergy": "{{pokemonName}} still has energy\nto battle!",
"cantBeUsed": "{{pokemonName}} can't be used in\nthis challenge!",
"tooManyItems": "{{pokemonName}} has too many\nof this item!",
"anyEffect": "It won't have any effect.",
"unpausedEvolutions": "Evolutions have been unpaused for {{pokemonName}}.",
"unspliceConfirmation": "Do you really want to unsplice {{fusionName}}\nfrom {{pokemonName}}? {{fusionName}} will be lost.",
"wasReverted": "{{fusionName}} was reverted to {{pokemonName}}.",
"releaseConfirmation": "Do you really want to release {{pokemonName}}?",
"releaseInBattle": "You can't release a Pokémon that's in battle!",
"selectAMove": "Select a move.",
"changeQuantity": "Select a held item to transfer.\nUse < and > to change the quantity.",
"selectAnotherPokemonToSplice": "Select another Pokémon to splice.",
"cancel": "Cancel",
// Slot TM text
"able": "Able",
"notAble": "Not able",
"learned": "Learned",
// Releasing messages
"goodbye": "Goodbye, {{pokemonName}}!",
"byebye": "Byebye, {{pokemonName}}!",
"farewell": "Farewell, {{pokemonName}}!",
"soLong": "So long, {{pokemonName}}!",
"thisIsWhereWePart": "This is where we part, {{pokemonName}}!",
"illMissYou": "I'll miss you, {{pokemonName}}!",
"illNeverForgetYou": "I'll never forget you, {{pokemonName}}!",
"untilWeMeetAgain": "Until we meet again, {{pokemonName}}!",
"sayonara": "Sayonara, {{pokemonName}}!",
"smellYaLater": "Smell ya later, {{pokemonName}}!",
} as const; } as const;

View File

@ -5,8 +5,5 @@ export const pokemonInfoContainer: SimpleTranslationEntries = {
"gender": "Gender:", "gender": "Gender:",
"ability": "Ability:", "ability": "Ability:",
"nature": "Nature:", "nature": "Nature:",
"epic": "Epic",
"rare": "Rare",
"common": "Common",
"form": "Form:" "form": "Form:"
} as const; } as const;

View File

@ -40,5 +40,6 @@ export const weather: SimpleTranslationEntries = {
"strongWindsStartMessage": "A heavy wind began!", "strongWindsStartMessage": "A heavy wind began!",
"strongWindsLapseMessage": "The wind blows intensely.", "strongWindsLapseMessage": "The wind blows intensely.",
"strongWindsEffectMessage": "The mysterious air current weakened the attack!",
"strongWindsClearMessage": "The heavy wind stopped." "strongWindsClearMessage": "The heavy wind stopped."
}; };

View File

@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = {
"hitResultNoEffect": "No afecta a {{pokemonName}}!", "hitResultNoEffect": "No afecta a {{pokemonName}}!",
"hitResultOneHitKO": "¡KO en 1 golpe!", "hitResultOneHitKO": "¡KO en 1 golpe!",
"attackFailed": "¡Pero ha fallado!", "attackFailed": "¡Pero ha fallado!",
"attackMissed": "¡{{pokemonNameWithAffix}}\nha evitado el ataque!",
"attackHitsCount": "N.º de golpes: {{count}}.", "attackHitsCount": "N.º de golpes: {{count}}.",
"rewardGain": "¡Has obtenido\n{{modifierName}}!", "rewardGain": "¡Has obtenido\n{{modifierName}}!",
"expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.", "expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.",

View File

@ -1,7 +1,7 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales"; import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const bgmName: SimpleTranslationEntries = { export const bgmName: SimpleTranslationEntries = {
"music": "Música", "music": "Música: ",
"missing_entries" : "{{name}}", "missing_entries" : "{{name}}",
"battle_kanto_champion": "B2W2 - ¡Vs Campeón de Kanto!", "battle_kanto_champion": "B2W2 - ¡Vs Campeón de Kanto!",
"battle_johto_champion": "B2W2 - ¡Vs Campeón de Johto!", "battle_johto_champion": "B2W2 - ¡Vs Campeón de Johto!",

View File

@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const common: SimpleTranslationEntries = { export const common: SimpleTranslationEntries = {
"start": "Start", "start": "Start",
"luckIndicator": "Suerte:",
"shinyOnHover": "Shiny",
"commonShiny": "Común",
"rareShiny": "Raro",
"epicShiny": "Épico",
} as const; } as const;

View File

@ -43,6 +43,7 @@ import { weather } from "./weather";
import { partyUiHandler } from "./party-ui-handler"; import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
export const esConfig = { export const esConfig = {
ability: ability, ability: ability,
@ -90,5 +91,6 @@ export const esConfig = {
tutorial: tutorial, tutorial: tutorial,
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler
}; };

View File

@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = {
"hatchFromTheEgg": "¡Ha salido un {{pokemonName}} del Huevo!", "hatchFromTheEgg": "¡Ha salido un {{pokemonName}} del Huevo!",
"eggMoveUnlock": "Mov. Huevo desbloqueado:\n{{moveName}}", "eggMoveUnlock": "Mov. Huevo desbloqueado:\n{{moveName}}",
"rareEggMoveUnlock": "Mov. Huevo Raro desbloqueado:\n{{moveName}}", "rareEggMoveUnlock": "Mov. Huevo Raro desbloqueado:\n{{moveName}}",
"moveUPGacha": "¡Más Mov.\nHuevo Raro!",
"shinyUPGacha": "¡Más Shiny!",
"legendaryUPGacha": ", ¡mayor\nprob.!",
} as const; } as const;

View File

@ -53,6 +53,5 @@ export const menu: SimpleTranslationEntries = {
"no":"No", "no":"No",
"disclaimer": "AVISO", "disclaimer": "AVISO",
"disclaimerDescription": "Este juego es un producto inacabado; puede tener problemas de jugabilidad (incluyendo la posible pérdida\n de datos de guardado),cambiar sin avisar, y puede o no puede ser actualizado hasta ser completado.", "disclaimerDescription": "Este juego es un producto inacabado; puede tener problemas de jugabilidad (incluyendo la posible pérdida\n de datos de guardado),cambiar sin avisar, y puede o no puede ser actualizado hasta ser completado.",
"choosePokemon": "Choose a Pokémon.",
"errorServerDown": "¡Ups! Ha habido un problema al contactar con el servidor.\n\nPuedes mantener esta ventana abierta,\nel juego se reconectará automáticamente.", "errorServerDown": "¡Ups! Ha habido un problema al contactar con el servidor.\n\nPuedes mantener esta ventana abierta,\nel juego se reconectará automáticamente.",
} as const; } as const;

View File

@ -0,0 +1,15 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const modifierSelectUiHandler: SimpleTranslationEntries = {
"transfer": "Transferir",
"reroll": "Actualizar",
"lockRarities": "Bloquear rarezas",
"checkTeam": "Ver Equipo",
"transferDesc": "Transfiere un objeto que lleva un Pokémon a otro.",
"rerollDesc": "Gasta dinero para actualizar las opciones de objetos.",
"lockRaritiesDesc": "Bloquea las rarezas de los objetos al actualizar (afecta el costo de actualización).",
"checkTeamDesc": "Revisa tu equipo o usa un objeto que cambia de forma.",
"rerollCost": "{{formattedMoney}} ₽",
"itemCost": "{{formattedMoney}} ₽"
} as const;

View File

@ -6,5 +6,48 @@ export const partyUiHandler: SimpleTranslationEntries = {
"CANCEL": "Cancel", "CANCEL": "Cancel",
"RELEASE": "Release", "RELEASE": "Release",
"APPLY": "Apply", "APPLY": "Apply",
"TEACH": "Teach" "TEACH": "Enseñar",
"SPLICE": "Fusionar",
"UNSPLICE": "Separar",
"ACTIVATE": "Activar",
"DEACTIVATE": "Desactivar",
"TRANSFER": "Transferir",
"ALL": "Todo",
"PASS_BATON": "Relevo",
"UNPAUSE_EVOLUTION": "Reanudar Evolución",
"REVIVE": "Revivir",
"choosePokemon": "Elige a un Pokémon.",
"doWhatWithThisPokemon": "¿Que quieres hacer con este Pokémon?",
"noEnergy": "¡A {{pokemonName}} no le quedan\nfuerzas para luchar!",
"hasEnergy": "¡A {{pokemonName}} le quedan\nfuerzas para luchar!",
"cantBeUsed": "¡{{pokemonName}} no puede usarse\nen este desafío!",
"tooManyItems": "¡{{pokemonName}} tiene demasiados\nde este objeto!",
"anyEffect": "No tendría ningún efecto.",
"unpausedEvolutions": "Se reanudó las evoluciones de {{pokemonName}}.",
"unspliceConfirmation": "¿Seguro que quiere separar a {{fusionName}}\nde {{pokemonName}}? {{fusionName}} se perderá.",
"wasReverted": "{{fusionName}} se revirtió a {{pokemonName}}.",
"releaseConfirmation": "¿Quieres liberar a {{pokemonName}}?",
"releaseInBattle": "¡No puedes liberar un Pokémon que está en batalla!",
"selectAMove": "Selecciona un movimiento.",
"changeQuantity": "Selecciona un objeto equipado para transferir.\nUsa < y > para cambiar la cantidad.",
"selectAnotherPokemonToSplice": "Selecciona otro Pokémon para fusionar.",
"cancel": "Salir",
// Slot TM text
"able": "Apto",
"notAble": "No apto",
"learned": "Aprendido",
// Releasing messages
"goodbye": "¡Adiós, {{pokemonName}}!",
"byebye": "¡Chao, {{pokemonName}}!",
"farewell": "¡Hasta luego, {{pokemonName}}!",
"soLong": "¡Nos vemos, {{pokemonName}}!",
"thisIsWhereWePart": "¡Aquí es donde nos despedimos, {{pokemonName}}!",
"illMissYou": "¡Te echaré de menos, {{pokemonName}}!",
"illNeverForgetYou": "¡Nunca te olvidaré, {{pokemonName}}!",
"untilWeMeetAgain": "¡Hasta que nos volvamos a encontrar, {{pokemonName}}!",
"sayonara": "¡Sayonara, {{pokemonName}}!",
"smellYaLater": "¡Nos vemos luego, {{pokemonName}}!",
} as const; } as const;

View File

@ -5,7 +5,4 @@ export const pokemonInfoContainer: SimpleTranslationEntries = {
"gender": "Género:", "gender": "Género:",
"ability": "Habilid:", "ability": "Habilid:",
"nature": "Natur:", "nature": "Natur:",
"epic": "Épico",
"rare": "Raro",
"common": "Común"
} as const; } as const;

View File

@ -40,5 +40,6 @@ export const weather: SimpleTranslationEntries = {
"strongWindsStartMessage": "¡Comenzó un fuerte viento!", "strongWindsStartMessage": "¡Comenzó un fuerte viento!",
"strongWindsLapseMessage": "El viento sopla intensamente.", "strongWindsLapseMessage": "El viento sopla intensamente.",
"strongWindsEffectMessage": "¡Las misteriosas turbulencias atenúan el ataque!",
"strongWindsClearMessage": "El fuerte viento cesó." "strongWindsClearMessage": "El fuerte viento cesó."
}; };

View File

@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = {
"hitResultNoEffect": "Ça naffecte pas {{pokemonName}}…", "hitResultNoEffect": "Ça naffecte pas {{pokemonName}}…",
"hitResultOneHitKO": "K.O. en un coup !", "hitResultOneHitKO": "K.O. en un coup !",
"attackFailed": "Mais cela échoue !", "attackFailed": "Mais cela échoue !",
"attackMissed": "{{pokemonNameWithAffix}}\névite lattaque!",
"attackHitsCount": "Touché {{count}} fois !", "attackHitsCount": "Touché {{count}} fois !",
"rewardGain": "Vous recevez\n{{modifierName}} !", "rewardGain": "Vous recevez\n{{modifierName}} !",
"expGain": "{{pokemonName}} gagne\n{{exp}} Points dExp !", "expGain": "{{pokemonName}} gagne\n{{exp}} Points dExp !",

View File

@ -3,46 +3,46 @@ import { BerryTranslationEntries } from "#app/interfaces/locales";
export const berry: BerryTranslationEntries = { export const berry: BerryTranslationEntries = {
"SITRUS": { "SITRUS": {
name: "Baie Sitrus", name: "Baie Sitrus",
effect: "Restaure 25% des PV sils sont inférieurs à 50%", effect: "Restaure 25% des PV sils sont inférieurs à 50%.",
}, },
"LUM": { "LUM": {
name: "Baie Prine", name: "Baie Prine",
effect: "Soigne tout problème de statut permanant et la confusion", effect: "Soigne tout problème de statut permanant et la confusion.",
}, },
"ENIGMA": { "ENIGMA": {
name: "Baie Enigma", name: "Baie Enigma",
effect: "Restaure 25% des PV si touché par une capacité super efficace", effect: "Restaure 25% des PV si touché par une capacité super efficace.",
}, },
"LIECHI": { "LIECHI": {
name: "Baie Lichii", name: "Baie Lichii",
effect: "Augmente lAttaque si les PV sont inférieurs à 25%", effect: "Augmente lAttaque si les PV sont inférieurs à 25%.",
}, },
"GANLON": { "GANLON": {
name: "Baie Lingan", name: "Baie Lingan",
effect: "Augmente la Défense si les PV sont inférieurs à 25%", effect: "Augmente la Défense si les PV sont inférieurs à 25%.",
}, },
"PETAYA": { "PETAYA": {
name: "Baie Pitaye", name: "Baie Pitaye",
effect: "Augmente lAtq. Spé. si les PV sont inférieurs à 25%", effect: "Augmente lAtq. Spé. si les PV sont inférieurs à 25%.",
}, },
"APICOT": { "APICOT": {
name: "Baie Abriko", name: "Baie Abriko",
effect: "Augmente la Déf. Spé. si les PV sont inférieurs à 25%", effect: "Augmente la Déf. Spé. si les PV sont inférieurs à 25%.",
}, },
"SALAC": { "SALAC": {
name: "Baie Sailak", name: "Baie Sailak",
effect: "Augmente la Vitesse si les PV sont inférieurs à 25%", effect: "Augmente la Vitesse si les PV sont inférieurs à 25%.",
}, },
"LANSAT": { "LANSAT": {
name: "Baie Lansat", name: "Baie Lansat",
effect: "Augmente le taux de coups critiques si les PV sont inférieurs à 25%", effect: "Augmente le taux de coups critiques si les PV sont inférieurs à 25%.",
}, },
"STARF": { "STARF": {
name: "Baie Frista", name: "Baie Frista",
effect: "Augmente énormément une statistique au hasard si les PV sont inférieurs à 25%", effect: "Augmente énormément une statistique au hasard si les PV sont inférieurs à 25%.",
}, },
"LEPPA": { "LEPPA": {
name: "Baie Mepo", name: "Baie Mepo",
effect: "Restaure 10 PP à une capacité dès que ses PP tombent à 0", effect: "Restaure 10 PP à une capacité dès que ses PP tombent à 0.",
}, },
} as const; } as const;

View File

@ -1,7 +1,7 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales"; import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const bgmName: SimpleTranslationEntries = { export const bgmName: SimpleTranslationEntries = {
"music": "Musique ", "music": "Musique : ",
"missing_entries" : "{{name}}", "missing_entries" : "{{name}}",
"battle_kanto_champion": "N2B2 - Vs. Maitre de Kanto", "battle_kanto_champion": "N2B2 - Vs. Maitre de Kanto",
"battle_johto_champion": "N2B2 - Vs. Maitre de Johto", "battle_johto_champion": "N2B2 - Vs. Maitre de Johto",

View File

@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const common: SimpleTranslationEntries = { export const common: SimpleTranslationEntries = {
"start": "Lancer", "start": "Lancer",
"luckIndicator": "Chance :",
"shinyOnHover": "Chromatique",
"commonShiny": "Commun",
"rareShiny": "Rare",
"epicShiny": "Épique",
} as const; } as const;

View File

@ -43,6 +43,7 @@ import { weather } from "./weather";
import { partyUiHandler } from "./party-ui-handler"; import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
export const frConfig = { export const frConfig = {
ability: ability, ability: ability,
@ -90,5 +91,6 @@ export const frConfig = {
tutorial: tutorial, tutorial: tutorial,
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler
}; };

File diff suppressed because it is too large Load Diff

View File

@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = {
"hatchFromTheEgg": "{{pokemonName}} sort de lŒuf !", "hatchFromTheEgg": "{{pokemonName}} sort de lŒuf !",
"eggMoveUnlock": "Capacité Œuf débloquée :\n{{moveName}}", "eggMoveUnlock": "Capacité Œuf débloquée :\n{{moveName}}",
"rareEggMoveUnlock": "Capacité Œuf Rare débloquée :\n{{moveName}}", "rareEggMoveUnlock": "Capacité Œuf Rare débloquée :\n{{moveName}}",
"moveUPGacha": "Bonus Capacité\nŒuf Rare !",
"shinyUPGacha": "Bonus\nChromatique !",
"legendaryUPGacha": "Bonus !",
} as const; } as const;

View File

@ -20,5 +20,5 @@ export const menuUiHandler: SimpleTranslationEntries = {
"exportData": "Exporter données", "exportData": "Exporter données",
"cancel": "Retour", "cancel": "Retour",
"losingProgressionWarning": "Vous allez perdre votre progression depuis le début du combat. Continuer ?", "losingProgressionWarning": "Vous allez perdre votre progression depuis le début du combat. Continuer ?",
"noEggs": "You are not hatching\nany eggs at the moment!" "noEggs": "Vous ne faites actuellement\néclore aucun Œuf !"
} as const; } as const;

View File

@ -48,6 +48,5 @@ export const menu: SimpleTranslationEntries = {
"no":"Non", "no":"Non",
"disclaimer": "AVERTISSEMENT", "disclaimer": "AVERTISSEMENT",
"disclaimerDescription": "Ce jeu nest pas un produit fini et peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait ou non encore être mis à jour ou terminé.", "disclaimerDescription": "Ce jeu nest pas un produit fini et peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait ou non encore être mis à jour ou terminé.",
"choosePokemon": "Sélectionnez un Pokémon.",
"errorServerDown": "Oupsi ! Un problème de connexion au serveur est survenu.\n\nVous pouvez garder cette fenêtre ouverte,\nle jeu se reconnectera automatiquement.", "errorServerDown": "Oupsi ! Un problème de connexion au serveur est survenu.\n\nVous pouvez garder cette fenêtre ouverte,\nle jeu se reconnectera automatiquement.",
} as const; } as const;

View File

@ -0,0 +1,14 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const modifierSelectUiHandler: SimpleTranslationEntries = {
"transfer": "Transférer",
"reroll": "Relancer",
"lockRarities": "Bloquer la rareté",
"checkTeam": "Consulter Équipe",
"transferDesc": "Transférer un objet tenu par un Pokémon vers un autre.",
"rerollDesc": "Payer pour relancer les objets gratuits proposés.",
"lockRaritiesDesc": "Assure la relance de proposer des objets gratuits de rareté égale ou supérieure. Affecte le cout de relance.",
"checkTeamDesc": "Consulter votre équipe ou utiliser un objet\nde changement de forme.",
"rerollCost": "{{formattedMoney}} ₽",
"itemCost": "{{formattedMoney}} ₽"
} as const;

View File

@ -4,7 +4,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
ModifierType: { ModifierType: {
"AddPokeballModifierType": { "AddPokeballModifierType": {
name: "{{pokeballName}} x{{modifierCount}}", name: "{{pokeballName}} x{{modifierCount}}",
description: "Recevez {{modifierCount}} {{pokeballName}}·s (Inventaire : {{pokeballAmount}})\nTaux de capture : {{catchRate}}.", description: "Recevez {{modifierCount}} {{pokeballName}}·s. (Inventaire : {{pokeballAmount}})\nTaux de capture : {{catchRate}}",
}, },
"AddVoucherModifierType": { "AddVoucherModifierType": {
name: "{{voucherTypeName}} x{{modifierCount}}", name: "{{voucherTypeName}} x{{modifierCount}}",
@ -101,7 +101,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
}, },
"TmModifierTypeWithInfo": { "TmModifierTypeWithInfo": {
name: "CT{{moveId}} - {{moveName}}", name: "CT{{moveId}} - {{moveName}}",
description: "Apprend la capacité {{moveName}} à un Pokémon\n(Maintenez C ou Maj pour plus dinfos).", description: "Apprend la capacité {{moveName}} à un Pokémon.\n(Maintenez C ou Maj pour plus dinfos)",
}, },
"EvolutionItemModifierType": { "EvolutionItemModifierType": {
description: "Permet à certains Pokémon dévoluer.", description: "Permet à certains Pokémon dévoluer.",

View File

@ -1,11 +1,53 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales"; import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const partyUiHandler: SimpleTranslationEntries = { export const partyUiHandler: SimpleTranslationEntries = {
"ALL": "Tout",
"SEND_OUT": "Envoyer", "SEND_OUT": "Envoyer",
"SUMMARY": "Résumé", "SUMMARY": "Résumé",
"CANCEL": "Annuler", "CANCEL": "Annuler",
"RELEASE": "Relâcher", "RELEASE": "Relâcher",
"APPLY": "Appliquer", "APPLY": "Appliquer",
"TEACH": "Apprendre" "TEACH": "Apprendre",
"SPLICE": "Fusionner",
"UNSPLICE": "Séparer",
"ACTIVATE": "Activer",
"DEACTIVATE": "Désactiver",
"TRANSFER": "Transférer",
"ALL": "Tout",
"PASS_BATON": "Relais",
"UNPAUSE_EVOLUTION": "Réactiver Évolution",
"REVIVE": "Ranimer",
"choosePokemon": "Sélectionnez un Pokémon.",
"doWhatWithThisPokemon": "Que faire avec ce Pokémon ?",
"noEnergy": "{{pokemonName}} na plus lénergie\nde se battre !",
"hasEnergy": "{{pokemonName}} peut toujours\nse battre !",
"cantBeUsed": "{{pokemonName}} ne peut pas\nse battre pour ce challenge !",
"tooManyItems": "{{pokemonName}} porte trop\ndexemplaires de cet objet !",
"anyEffect": "Cela naura aucun effet.",
"unpausedEvolutions": "{{pokemonName}} peut de nouveau évoluer.",
"unspliceConfirmation": "Voulez-vous vraiment séparer {{fusionName}}\nde {{pokemonName}} ? {{fusionName}} sera perdu.",
"wasReverted": "{{fusionName}} est redevenu {{pokemonName}}.",
"releaseConfirmation": "Voulez-vous relâcher {{pokemonName}} ?",
"releaseInBattle": "Vous ne pouvez pas relâcher un Pokémon en combat !",
"selectAMove": "Sélectionnez une capacité.",
"changeQuantity": "Sélect. un objet à transférer.\nChangez la quantité avec < et >.",
"selectAnotherPokemonToSplice": "Sélectionnez un autre Pokémon à séparer.",
"cancel": "Sortir",
// Slot TM text
"able": "Apte",
"notAble": "Pas Apte",
"learned": "Appris",
// Releasing messages
"goodbye": "Au revoir, {{pokemonName}} !",
"byebye": "Bye-bye, {{pokemonName}} !",
"farewell": "Adieu, {{pokemonName}} !",
"soLong": "Salut, {{pokemonName}} !",
"thisIsWhereWePart": "Cest là quon se sépare, {{pokemonName}} !",
"illMissYou": "Tu vas me manquer, {{pokemonName}} !",
"illNeverForgetYou": "Je ne toublierai pas, {{pokemonName}} !",
"untilWeMeetAgain": "À la prochaine, {{pokemonName}} !",
"sayonara": "Sayonara, {{pokemonName}} !",
"smellYaLater": "À la revoyure, {{pokemonName}} !",
} as const; } as const;

View File

@ -5,8 +5,5 @@ export const pokemonInfoContainer: SimpleTranslationEntries = {
"gender": "Sexe :", "gender": "Sexe :",
"ability": "Talent :", "ability": "Talent :",
"nature": "Nature :", "nature": "Nature :",
"epic": "Épique",
"rare": "Rare",
"common": "Commun",
"form": "Forme :" "form": "Forme :"
} as const; } as const;

View File

@ -14,8 +14,8 @@ export const pokemonInfo: PokemonInfoTranslationEntries = {
"SPDEFshortened": "DéfSp", "SPDEFshortened": "DéfSp",
"SPD": "Vitesse", "SPD": "Vitesse",
"SPDshortened": "Vit", "SPDshortened": "Vit",
"ACC": "Accuracy", "ACC": "Précison",
"EVA": "Evasiveness" "EVA": "Esquive"
}, },
Type: { Type: {

View File

@ -31,7 +31,7 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"selectMoveSwapWith": "Sélectionnez laquelle échanger avec", "selectMoveSwapWith": "Sélectionnez laquelle échanger avec",
"unlockPassive": "Débloquer Passif", "unlockPassive": "Débloquer Passif",
"reduceCost": "Diminuer le cout", "reduceCost": "Diminuer le cout",
"sameSpeciesEgg": "Buy an Egg", "sameSpeciesEgg": "Acheter un Œuf",
"cycleShiny": ": » Chromatiques", "cycleShiny": ": » Chromatiques",
"cycleForm": ": » Formes", "cycleForm": ": » Formes",
"cycleGender": ": » Sexes", "cycleGender": ": » Sexes",

View File

@ -40,5 +40,6 @@ export const weather: SimpleTranslationEntries = {
"strongWindsStartMessage": "Un vent mystérieux se lève !", "strongWindsStartMessage": "Un vent mystérieux se lève !",
"strongWindsLapseMessage": "Le vent mystérieux souffle violemment !", "strongWindsLapseMessage": "Le vent mystérieux souffle violemment !",
"strongWindsEffectMessage": "Le courant aérien mystérieux affaiblit lattaque!",
"strongWindsClearMessage": "Le vent mystérieux sest dissipé…" "strongWindsClearMessage": "Le vent mystérieux sest dissipé…"
}; };

View File

@ -5,8 +5,8 @@ export const battle: SimpleTranslationEntries = {
"trainerAppeared": "{{trainerName}}\nvuole combattere!", "trainerAppeared": "{{trainerName}}\nvuole combattere!",
"trainerAppearedDouble": "{{trainerName}}\nvogliono combattere!", "trainerAppearedDouble": "{{trainerName}}\nvogliono combattere!",
"trainerSendOut": "{{trainerName}} manda in campo\n{{pokemonName}}!", "trainerSendOut": "{{trainerName}} manda in campo\n{{pokemonName}}!",
"singleWildAppeared": "Appare {{pokemonName}} selvatico!", "singleWildAppeared": "È apparso {{pokemonName}} selvatico!",
"multiWildAppeared": "Appaiono {{pokemonName1}}\ne {{pokemonName2}} salvatici!", "multiWildAppeared": "Sono apparsi {{pokemonName1}}\ne {{pokemonName2}} salvatici!",
"playerComeBack": "Rientra, {{pokemonName}}!", "playerComeBack": "Rientra, {{pokemonName}}!",
"trainerComeBack": "{{trainerName}} ha ritirato {{pokemonName}}!", "trainerComeBack": "{{trainerName}} ha ritirato {{pokemonName}}!",
"playerGo": "Vai! {{pokemonName}}!", "playerGo": "Vai! {{pokemonName}}!",
@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = {
"hitResultNoEffect": "Non ha effetto su {{pokemonName}}!", "hitResultNoEffect": "Non ha effetto su {{pokemonName}}!",
"hitResultOneHitKO": "KO con un colpo!", "hitResultOneHitKO": "KO con un colpo!",
"attackFailed": "Ma ha fallito!", "attackFailed": "Ma ha fallito!",
"attackMissed": "{{pokemonNameWithAffix}}\nevita lattacco!",
"attackHitsCount": "Colpito {{count}} volta/e!", "attackHitsCount": "Colpito {{count}} volta/e!",
"rewardGain": "You received\n{{modifierName}}!", "rewardGain": "You received\n{{modifierName}}!",
"expGain": "{{pokemonName}} ha guadagnato\n{{exp}} Punti Esperienza!", "expGain": "{{pokemonName}} ha guadagnato\n{{exp}} Punti Esperienza!",
@ -43,10 +44,10 @@ export const battle: SimpleTranslationEntries = {
"moveNotImplemented": "{{moveName}} non è ancora implementata e non può essere selezionata.", "moveNotImplemented": "{{moveName}} non è ancora implementata e non può essere selezionata.",
"moveNoPP": "Non ci sono PP rimanenti\nper questa mossa!", "moveNoPP": "Non ci sono PP rimanenti\nper questa mossa!",
"moveDisabled": "{{moveName}} è disabilitata!", "moveDisabled": "{{moveName}} è disabilitata!",
"noPokeballForce": "Una forza misteriosa\nimpedisce l'uso dell Poké Ball.", "noPokeballForce": "Una forza misteriosa\nimpedisce l'uso delle Poké Ball.",
"noPokeballTrainer": "Non puoi catturare\nPokémon di altri allenatori!", "noPokeballTrainer": "Non puoi catturare\nPokémon di altri allenatori!",
"noPokeballMulti": "Puoi lanciare una Poké Ball\nquando rimane un solo Pokémon!", "noPokeballMulti": "Puoi lanciare una Poké Ball\nsolo quando rimane un singolo Pokémon!",
"noPokeballStrong": "Il Pokémon avversario è troppo forte per essere catturato!\nDevi prima indebolirlo!", "noPokeballStrong": "Il Pokémon avversario è troppo forte per essere catturato!\nDevi prima indebolirlo.",
"noEscapeForce": "Una forza misteriosa\nimpedisce la fuga.", "noEscapeForce": "Una forza misteriosa\nimpedisce la fuga.",
"noEscapeTrainer": "Non puoi sottrarti\nalla lotta con un'allenatore!", "noEscapeTrainer": "Non puoi sottrarti\nalla lotta con un'allenatore!",
"noEscapePokemon": "{{moveName}} di {{pokemonName}}\npreviene la {{escapeVerb}}!", "noEscapePokemon": "{{moveName}} di {{pokemonName}}\npreviene la {{escapeVerb}}!",
@ -54,11 +55,11 @@ export const battle: SimpleTranslationEntries = {
"runAwayCannotEscape": "Non puoi fuggire!", "runAwayCannotEscape": "Non puoi fuggire!",
"escapeVerbSwitch": "cambiando", "escapeVerbSwitch": "cambiando",
"escapeVerbFlee": "fuggendo", "escapeVerbFlee": "fuggendo",
"notDisabled": "{{pokemonName}}'s {{moveName}} non è più\ndisabilitata!", "notDisabled": "{{moveName}} di {{pokemonName}} non è più\ndisabilitata!",
"turnEndHpRestore": "{{pokemonName}}'s HP was restored.", "turnEndHpRestore": "{{pokemonName}}'s HP was restored.",
"hpIsFull": "{{pokemonName}}'s\nHP is full!", "hpIsFull": "{{pokemonName}}'s\nHP is full!",
"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}}?",
"stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!",
"wildPokemonWithAffix": "{{pokemonName}} selvatico", "wildPokemonWithAffix": "{{pokemonName}} selvatico",

View File

@ -1,7 +1,7 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales"; import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const bgmName: SimpleTranslationEntries = { export const bgmName: SimpleTranslationEntries = {
"music": "Music", "music": "Music: ",
"missing_entries" : "{{name}}", "missing_entries" : "{{name}}",
"battle_kanto_champion": "B2W2 Kanto Champion Battle", "battle_kanto_champion": "B2W2 Kanto Champion Battle",
"battle_johto_champion": "B2W2 Johto Champion Battle", "battle_johto_champion": "B2W2 Johto Champion Battle",

View File

@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const common: SimpleTranslationEntries = { export const common: SimpleTranslationEntries = {
"start": "Inizia", "start": "Inizia",
"luckIndicator": "Luck:",
"shinyOnHover": "Shiny",
"commonShiny": "Comune",
"rareShiny": "Raro",
"epicShiny": "Epico",
} as const; } as const;

View File

@ -43,6 +43,7 @@ import { weather } from "./weather";
import { partyUiHandler } from "./party-ui-handler"; import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
export const itConfig = { export const itConfig = {
ability: ability, ability: ability,
@ -90,5 +91,6 @@ export const itConfig = {
tutorial: tutorial, tutorial: tutorial,
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler
}; };

View File

@ -6,20 +6,23 @@ export const egg: SimpleTranslationEntries = {
"greatTier": "Raro", "greatTier": "Raro",
"ultraTier": "Epico", "ultraTier": "Epico",
"masterTier": "Leggendario", "masterTier": "Leggendario",
"hatchWavesMessageSoon": "Si sentono dei suoni provenienti dall'interno! Si schiuderà presto!", "hatchWavesMessageSoon": "Si sentono dei rumori provenienti dall'interno. Si schiuderà presto!",
"hatchWavesMessageClose": "Sembra muoversi di tanto in tanto. Potrebbe essere prossimo alla schiusa.", "hatchWavesMessageClose": "Sembra muoversi di tanto in tanto. Potrebbe essere prossimo alla schiusa.",
"hatchWavesMessageNotClose": "Cosa uscirà da qui? Non sembra si schiuderà presto.", "hatchWavesMessageNotClose": "Cosa uscirà da qui? Pare che non si schiuderà presto.",
"hatchWavesMessageLongTime": "Sembra che questo uovo impiegherà molto tempo per schiudersi.", "hatchWavesMessageLongTime": "Sembra che questo uovo impiegherà ancora molto tempo per schiudersi.",
"gachaTypeLegendary": "Tasso dei Leggendari Aumentato", "gachaTypeLegendary": "Tasso dei leggendari aumentato",
"gachaTypeMove": "Tasso delle Mosse Rare delle Uova Aumentato", "gachaTypeMove": "Tasso delle mosse rare da uova aumentato",
"gachaTypeShiny": "Tasso degli Shiny Aumentato", "gachaTypeShiny": "Tasso degli shiny aumentato",
"selectMachine": "Seleziona un distributore.", "selectMachine": "Seleziona un macchinario.",
"notEnoughVouchers": "Non hai abbastanza Biglietti!", "notEnoughVouchers": "Non hai abbastanza biglietti!",
"tooManyEggs": "Hai troppe Uova!", "tooManyEggs": "Hai troppe uova!",
"pull": "Tiro", "pull": "Estrazione",
"pulls": "Tiri", "pulls": "Estrazioni",
"sameSpeciesEgg": "{{species}} will hatch from this egg!", "sameSpeciesEgg": "{{species}} will hatch from this egg!",
"hatchFromTheEgg": "DallUovo è nato {{pokemonName}}!", "hatchFromTheEgg": "DallUovo è nato {{pokemonName}}!",
"eggMoveUnlock": "Egg Move unlocked: {{moveName}}", "eggMoveUnlock": "Egg Move unlocked: {{moveName}}",
"rareEggMoveUnlock": "Rare Egg Move unlocked: {{moveName}}", "rareEggMoveUnlock": "Rare Egg Move unlocked: {{moveName}}",
"moveUPGacha": "Move UP!",
"shinyUPGacha": "Shiny UP!",
"legendaryUPGacha": "UP!",
} as const; } as const;

View File

@ -2,23 +2,23 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const menuUiHandler: SimpleTranslationEntries = { export const menuUiHandler: SimpleTranslationEntries = {
"GAME_SETTINGS": "Impostazioni", "GAME_SETTINGS": "Impostazioni",
"ACHIEVEMENTS": "Trofei", "ACHIEVEMENTS": "Obiettivi",
"STATS": "Statistiche", "STATS": "Statistiche",
"VOUCHERS": "Biglietti", "VOUCHERS": "Biglietti",
"EGG_LIST": "Lista Uova", "EGG_LIST": "Lista uova",
"EGG_GACHA": "Gacha Uova", "EGG_GACHA": "Macchine uova",
"MANAGE_DATA": "Gestisci Dati", "MANAGE_DATA": "Gestisci dati",
"COMMUNITY": "Community", "COMMUNITY": "Community",
"SAVE_AND_QUIT": "Salva ed Esci", "SAVE_AND_QUIT": "Salva ed esci",
"LOG_OUT": "Disconnettiti", "LOG_OUT": "Disconnettiti",
"slot": "Slot {{slotNumber}}", "slot": "Slot {{slotNumber}}",
"importSession": "Importa Sessione", "importSession": "Importa sessione",
"importSlotSelect": "Seleziona uno slot in cui importare.", "importSlotSelect": "Seleziona uno slot in cui importare.",
"exportSession": "Esporta Sessione", "exportSession": "Esporta sessione",
"exportSlotSelect": "Seleziona uno slot da cui esportare.", "exportSlotSelect": "Seleziona uno slot da cui esportare.",
"importData": "Importa Dati", "importData": "Importa dati",
"exportData": "Esporta Dati", "exportData": "Esporta dati",
"cancel": "Annulla", "cancel": "Annulla",
"losingProgressionWarning": "Perderai tutti i progressi dall'inizio della battaglia. Procedere?", "losingProgressionWarning": "Perderai tutti i progressi dall'inizio della battaglia. Confermi?",
"noEggs": "You are not hatching\nany eggs at the moment!" "noEggs": "You are not hatching\nany eggs at the moment!"
} as const; } as const;

View File

@ -53,6 +53,5 @@ export const menu: SimpleTranslationEntries = {
"no":"No", "no":"No",
"disclaimer": "DISCLAIMER", "disclaimer": "DISCLAIMER",
"disclaimerDescription": "Questo gioco è un prodotto incompleto; si potrebbero riscontrare errori (inclusa la perdita dei dati di salvataggio),\ncambiamenti impercettibili, e non è detto che venga aggiornato nel tempo o mai completato del tutto.", "disclaimerDescription": "Questo gioco è un prodotto incompleto; si potrebbero riscontrare errori (inclusa la perdita dei dati di salvataggio),\ncambiamenti impercettibili, e non è detto che venga aggiornato nel tempo o mai completato del tutto.",
"choosePokemon": "Choose a Pokémon.",
"errorServerDown": "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect.", "errorServerDown": "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect.",
} as const; } as const;

View File

@ -0,0 +1,14 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const modifierSelectUiHandler: SimpleTranslationEntries = {
"transfer": "Trasferisci",
"reroll": "Rerolla",
"lockRarities": "Blocca le rarità",
"checkTeam": "Stato squadra",
"transferDesc": "Trasferisci un oggetto da un Pokémon ad un altro.",
"rerollDesc": "Spendi soldi per rerollare le ricompense.",
"lockRaritiesDesc": "Blocca le rarità al reroll (influisce sui costi).",
"checkTeamDesc": "Controlla la squadra Pokémon.",
"rerollCost": "{{formattedMoney}}₽",
"itemCost": "{{formattedMoney}}₽"
} as const;

View File

@ -13,18 +13,18 @@ export const modifierType: ModifierTypeTranslationEntries = {
"PokemonHeldItemModifierType": { "PokemonHeldItemModifierType": {
extra: { extra: {
"inoperable": "{{pokemonName}} non può prendere\nquesto oggetto!", "inoperable": "{{pokemonName}} non può prendere\nquesto oggetto!",
"tooMany": "{{pokemonName}} ne ha troppi\ndi questo oggetto!", "tooMany": "{{pokemonName}} possiede già\nquesto oggetto in abbondanza.",
} }
}, },
"PokemonHpRestoreModifierType": { "PokemonHpRestoreModifierType": {
description: "Restituisce {{restorePoints}} PS o {{restorePercent}}% PS ad un Pokémon, a seconda del valore più alto.", description: "Restituisce {{restorePoints}} PS o {{restorePercent}}% PS ad un Pokémon, a seconda del valore più alto.",
extra: { extra: {
"fully": "Restituisce tutti i PS ad un Pokémon.", "fully": "Restituisce tutti i PS ad un Pokémon.",
"fullyWithStatus": "Restituisce tutti i PS ad un Pokémon e lo cura da ogni stato.", "fullyWithStatus": "Restituisce tutti i PS ad un Pokémon e lo cura da ogni problema di stato.",
} }
}, },
"PokemonReviveModifierType": { "PokemonReviveModifierType": {
description: "Rianima un Pokémon esausto e gli restituisce il {{restorePercent}}% PS.", description: "Rianima un Pokémon esausto e gli restituisce il {{restorePercent}}% dei PS totali.",
}, },
"PokemonStatusHealModifierType": { "PokemonStatusHealModifierType": {
description: "Cura tutti i problemi di stato di un Pokémon.", description: "Cura tutti i problemi di stato di un Pokémon.",
@ -46,7 +46,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
}, },
"PokemonNatureChangeModifierType": { "PokemonNatureChangeModifierType": {
name: "Menta {{natureName}}.", name: "Menta {{natureName}}.",
description: "Cambia la natura del Pokémon in {{natureName}} e sblocca la natura per il Pokémon iniziale.", description: "Cambia la natura del Pokémon in {{natureName}} e sblocca la natura nel menu degli starter.",
}, },
"DoubleBattleChanceBoosterModifierType": { "DoubleBattleChanceBoosterModifierType": {
description: "Raddoppia la possibilità di imbattersi in doppie battaglie per {{battleCount}} battaglie.", description: "Raddoppia la possibilità di imbattersi in doppie battaglie per {{battleCount}} battaglie.",
@ -67,7 +67,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
description: "Aumenta {{statName}} di base del possessore del 10%.", description: "Aumenta {{statName}} di base del possessore del 10%.",
}, },
"AllPokemonFullHpRestoreModifierType": { "AllPokemonFullHpRestoreModifierType": {
description: "Recupera il 100% dei PS per tutti i Pokémon.", description: "Restituisce il 100% dei PS a tutti i Pokémon.",
}, },
"AllPokemonFullReviveModifierType": { "AllPokemonFullReviveModifierType": {
description: "Rianima tutti i Pokémon esausti restituendogli tutti i PS.", description: "Rianima tutti i Pokémon esausti restituendogli tutti i PS.",
@ -75,7 +75,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
"MoneyRewardModifierType": { "MoneyRewardModifierType": {
description: "Garantisce una {{moneyMultiplier}} quantità di soldi (₽{{moneyAmount}}).", description: "Garantisce una {{moneyMultiplier}} quantità di soldi (₽{{moneyAmount}}).",
extra: { extra: {
"small": "poca", "small": "contenuta",
"moderate": "moderata", "moderate": "moderata",
"large": "grande", "large": "grande",
}, },
@ -90,7 +90,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
description: "Aumenta del 50% il guadagno di amicizia per vittoria.", description: "Aumenta del 50% il guadagno di amicizia per vittoria.",
}, },
"PokemonMoveAccuracyBoosterModifierType": { "PokemonMoveAccuracyBoosterModifierType": {
description: "Aumenta l'accuratezza delle mosse di {{accuracyAmount}} (massimo 100).", description: "Aumenta la precisione delle mosse di {{accuracyAmount}} (massimo 100).",
}, },
"PokemonMultiHitModifierType": { "PokemonMultiHitModifierType": {
description: "Gli attacchi colpiscono una volta in più al costo di una riduzione di potenza del 60/75/82,5% per mossa.", description: "Gli attacchi colpiscono una volta in più al costo di una riduzione di potenza del 60/75/82,5% per mossa.",
@ -117,7 +117,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
description: "Teracristallizza in {{teraType}} il possessore per massimo 10 battaglie.", description: "Teracristallizza in {{teraType}} il possessore per massimo 10 battaglie.",
}, },
"ContactHeldItemTransferChanceModifierType": { "ContactHeldItemTransferChanceModifierType": {
description: "Quando si attacca, c'è una probabilità del {{chancePercent}}% che l'oggetto in possesso del nemico venga rubato.", description: "Quando il possessore attacca, c'è una probabilità del {{chancePercent}}% che l'oggetto in possesso del nemico gli venga rubato.",
}, },
"TurnHeldItemTransferModifierType": { "TurnHeldItemTransferModifierType": {
description: "Ogni turno, il possessore acquisisce un oggetto posseduto dal nemico.", description: "Ogni turno, il possessore acquisisce un oggetto posseduto dal nemico.",
@ -129,72 +129,71 @@ export const modifierType: ModifierTypeTranslationEntries = {
description: "Aggiunge una probabilità del {{probabilitàPercent}}% di resistere ad un colpo.", description: "Aggiunge una probabilità del {{probabilitàPercent}}% di resistere ad un colpo.",
}, },
"RARE_CANDY": { name: "Caramella Rara" }, "RARE_CANDY": { name: "Caramella rara" },
"RARER_CANDY": { name: "Caramella Molto Rara" }, "RARER_CANDY": { name: "Caramella molto rara" },
"MEGA_BRACELET": { name: "Megapolsiera", description: "Le Megapietre sono disponibili." }, "MEGA_BRACELET": { name: "Megapolsiera", description: "Le megapietre diventano disponibili." },
"DYNAMAX_BAND": { name: "Polsino Dynamax", description: "I Fungomax sono disponibili." }, "DYNAMAX_BAND": { name: "Polsino Dynamax", description: "I fungomax diventano disponibili." },
"TERA_ORB": { name: "Terasfera", description: "I Teraliti sono disponibili." }, "TERA_ORB": { name: "Terasfera", description: "I teraliti diventano disponibili." },
"MAP": { name: "Mappa", description: "Permette di scegliere la propria strada a un bivio." }, "MAP": { name: "Mappa", description: "Permette di scegliere la propria strada a un bivio." },
"POTION": { name: "Pozione" }, "POTION": { name: "Pozione" },
"SUPER_POTION": { name: "Superpozione" }, "SUPER_POTION": { name: "Superpozione" },
"HYPER_POTION": { name: "Iperpozione" }, "HYPER_POTION": { name: "Iperpozione" },
"MAX_POTION": { name: "Pozione Max" }, "MAX_POTION": { name: "Pozione max" },
"FULL_RESTORE": { name: "Ricarica Totale" }, "FULL_RESTORE": { name: "Ricarica totale" },
"REVIVE": { name: "Revitalizzante" }, "REVIVE": { name: "Revitalizzante" },
"MAX_REVIVE": { name: "Revitalizzante Max" }, "MAX_REVIVE": { name: "Revitalizzante max" },
"FULL_HEAL": { name: "Cura Totale" }, "FULL_HEAL": { name: "Cura totale" },
"SACRED_ASH": { name: "Cenere Magica" }, "SACRED_ASH": { name: "Cenere magica" },
"REVIVER_SEED": { name: "Revitalseme", description: "Il possessore recupera 1/2 di PS in caso di svenimento." }, "REVIVER_SEED": { name: "Revitalseme", description: "Il possessore recupera 1/2 di PS in caso di KO." },
"ETHER": { name: "Etere" }, "ETHER": { name: "Etere" },
"MAX_ETHER": { name: "Etere Max" }, "MAX_ETHER": { name: "Etere max" },
"ELIXIR": { name: "Elisir" }, "ELIXIR": { name: "Elisir" },
"MAX_ELIXIR": { name: "Elisir Max" }, "MAX_ELIXIR": { name: "Elisir max" },
"PP_UP": { name: "PP-su" }, "PP_UP": { name: "PP-su" },
"PP_MAX": { name: "PP-max" }, "PP_MAX": { name: "PP-max" },
"LURE": { name: "Profumo Invito" }, "LURE": { name: "Esca" },
"SUPER_LURE": { name: "Profumo Invito Super" }, "SUPER_LURE": { name: "Super esca" },
"MAX_LURE": { name: "Profumo Invito Max" }, "MAX_LURE": { name: "Esca max" },
"MEMORY_MUSHROOM": { name: "Fungo della Memoria", description: "Ricorda la mossa dimenticata di un Pokémon." }, "MEMORY_MUSHROOM": { name: "Fungo della memoria", description: "Permette di insegnare nuovamente una mossa dimenticata ad un Pokémon." },
"EXP_SHARE": { name: "Condividi Esperienza", description: "Tutti i Pokémon della squadra ricevono il 20% dei Punti Esperienza dalla lotta anche se non vi hanno partecipato." }, "EXP_SHARE": { name: "Condividi esperienza", description: "Tutti i Pokémon della squadra ricevono il 20% dei Punti Esperienza dalla lotta, anche se non vi hanno partecipato." },
"EXP_BALANCE": { name: "Bilancia Esperienza", description: "Bilancia i Punti Esperienza ricevuti verso i Pokémon del gruppo di livello inferiore." }, "EXP_BALANCE": { name: "Bilancia esperienza", description: "Bilancia i Punti Esperienza ricevuti verso i Pokémon della squadra di livello inferiore." },
"OVAL_CHARM": { name: "Ovamuleto", description: "Quando più Pokémon partecipano a una battaglia, ognuno di essi riceve il 10% in più dell'esperienza totale." }, "OVAL_CHARM": { name: "Ovamuleto", description: "Quando più Pokémon partecipano a una battaglia, ognuno di essi riceve il 10% in più dell'esperienza totale." },
"EXP_CHARM": { name: "Esperienzamuleto" }, "EXP_CHARM": { name: "Esperienzamuleto" },
"SUPER_EXP_CHARM": { name: "Esperienzamuleto Super" }, "SUPER_EXP_CHARM": { name: "Esperienzamuleto super" },
"GOLDEN_EXP_CHARM": { name: "Esperienzamuleto Oro" }, "GOLDEN_EXP_CHARM": { name: "Esperienzamuleto dorato" },
"LUCKY_EGG": { name: "Uovo Fortunato" }, "LUCKY_EGG": { name: "Fortunuovo" },
"GOLDEN_EGG": { name: "Uovo d'Oro" }, "GOLDEN_EGG": { name: "Uovo dorato" },
"SOOTHE_BELL": { name: "Calmanella" }, "SOOTHE_BELL": { name: "Calmanella" },
"EVIOLITE": { name: "Evolcondensa", description: "Misteriosa materia evolutiva. Aumenta la Difesa e la Difesa Speciale di un Pokémon che può ancora evolversi." }, "EVIOLITE": { name: "Evolcondensa", description: "Misteriosa materia evolutiva. Aumenta la Difesa e la Difesa Speciale di un Pokémon che può ancora evolversi." },
"SOUL_DEW": { name: "Cuorugiada", description: "Aumenta del 10% l'influenza della natura di un Pokémon sulle sue statistiche (Aggiuntivo)." }, "SOUL_DEW": { name: "Cuorugiada", description: "Aumenta del 10% l'influenza della natura di un Pokémon sulle sue statistiche (cumulativo)." },
"NUGGET": { name: "Pepita" }, "NUGGET": { name: "Pepita" },
"BIG_NUGGET": { name: "Granpepita" }, "BIG_NUGGET": { name: "Granpepita" },
"RELIC_GOLD": { name: "Dobloantico" }, "RELIC_GOLD": { name: "Dobloantico" },
"AMULET_COIN": { name: "Monetamuleto", description: "Aumenta le ricompense in denaro del 20%." }, "AMULET_COIN": { name: "Monetamuleto", description: "Aumenta le ricompense in denaro del 20%." },
"GOLDEN_PUNCH": { name: "Pugno Dorato", description: "Garantisce il 50% dei danni inflitti come denaro." }, "GOLDEN_PUNCH": { name: "Pugno dorato", description: "Fornisce il 50% dei danni inflitti sottoforma di denaro." },
"COIN_CASE": { name: " Salvadanaio", description: "Dopo ogni 10° battaglia, riceverete il 10% del vostro denaro in interessi." }, "COIN_CASE": { name: "Salvadanaio", description: "Dopo ogni 10° battaglia, fornisce il 10% del proprio denaro in interessi." },
"LOCK_CAPSULE": { name: "Capsula Scrigno", description: "Permette di bloccare le rarità degli oggetti quando si fa un reroll degli oggetti." }, "LOCK_CAPSULE": { name: "Capsula scrigno", description: "Permette di bloccare le rarità degli oggetti quando si fa un reroll (i costi variano in base alle rarità)." },
"GRIP_CLAW": { name: "Presartigli" }, "GRIP_CLAW": { name: "Presartigli" },
"WIDE_LENS": { name: "Grandelente" }, "WIDE_LENS": { name: "Grandelente" },
@ -202,18 +201,18 @@ export const modifierType: ModifierTypeTranslationEntries = {
"MULTI_LENS": { name: "Multilente" }, "MULTI_LENS": { name: "Multilente" },
"HEALING_CHARM": { name: "Curamuleto", description: "Aumenta del 10% l'efficacia delle mosse e degli oggetti che ripristinano i PS (escluse le rianimazioni)." }, "HEALING_CHARM": { name: "Curamuleto", description: "Aumenta del 10% l'efficacia delle mosse e degli oggetti che ripristinano i PS (escluse le rianimazioni)." },
"CANDY_JAR": { name: "Barattolo di caramelle", description: "Aumenta di 1 il numero di livelli aggiunti dalle Caramelle Rare." }, "CANDY_JAR": { name: "Barattolo di caramelle", description: "Aumenta di 1 il numero di livelli aggiunti dalle caramelle rare." },
"BERRY_POUCH": { name: "Porta Bacche", description: "Aggiunge il 30% di possibilità che una bacca usata non venga consumata." }, "BERRY_POUCH": { name: "Porta bacche", description: "Aggiunge il 30% di possibilità che una bacca usata non venga consumata." },
"FOCUS_BAND": { name: "Bandana", description: "Chi ce l'ha ottiene il 10% di possibilità aggiuntivo di evitare un potenziale KO e rimanere con un solo PS." }, "FOCUS_BAND": { name: "Bandana", description: "Il possessore ottiene il 10% di possibilità aggiuntivo di evitare un potenziale KO e rimanere con un solo PS." },
"QUICK_CLAW": { name: "Rapidartigli", description: "Aggiunge una probabilità del 10% di muoversi per primi, indipendentemente dalla velocità (dopo la priorità)." }, "QUICK_CLAW": { name: "Rapidartigli", description: "Aggiunge una probabilità del 10% di muoversi per primi, indipendentemente dalla velocità (priorità escluse)." },
"KINGS_ROCK": { name: "Roccia di re", description: "Aggiunge il 10% di possibilità che una mossa d'attacco faccia tentennare l'avversario." }, "KINGS_ROCK": { name: "Roccia di re", description: "Aggiunge il 10% di possibilità che una mossa d'attacco faccia tentennare l'avversario." },
"LEFTOVERS": { name: "Avanzi", description: "Ripristina 1/16 dei PS massimi di un Pokémon ogni turno." }, "LEFTOVERS": { name: "Avanzi", description: "Ripristina 1/16 dei PS massimi di un Pokémon ogni turno." },
"SHELL_BELL": { name: "Conchinella", description: "Guarisce 1/8 del danno inflitto a un Pokémon." }, "SHELL_BELL": { name: "Conchinella", description: "Cura il possessore di 1/8 del danno inflitto ad un Pokémon." },
"TOXIC_ORB": { name: "Tossicsfera", description: "Sfera bizzarra che iperavvelena chi lha con sé in una lotta." }, "TOXIC_ORB": { name: "Tossicsfera", description: "Sfera bizzarra che iperavvelena chi lha con sé in una lotta." },
"FLAME_ORB": { name: "Fiammosfera", description: "Sfera bizzarra che procura una scottatura a chi lha con sé in una lotta." }, "FLAME_ORB": { name: "Fiammosfera", description: "Sfera bizzarra che procura una scottatura a chi lha con sé in una lotta." },
@ -223,22 +222,22 @@ export const modifierType: ModifierTypeTranslationEntries = {
"SHINY_CHARM": { name: "Cromamuleto", description: "Misterioso amuleto luminoso che aumenta la probabilità di incontrare Pokémon cromatici." }, "SHINY_CHARM": { name: "Cromamuleto", description: "Misterioso amuleto luminoso che aumenta la probabilità di incontrare Pokémon cromatici." },
"ABILITY_CHARM": { name: "Abilitamuleto", description: "Aumenta drasticamente la possibilità che un Pokémon selvatico abbia un'abilità nascosta." }, "ABILITY_CHARM": { name: "Abilitamuleto", description: "Aumenta drasticamente la possibilità che un Pokémon selvatico abbia un'abilità nascosta." },
"IV_SCANNER": { name: "Scanner IV", description: "Permette di scansionare gli IV dei Pokémon selvatici. Vengono rivelati 2 IV per pila. I migliori IV vengono mostrati per primi." }, "IV_SCANNER": { name: "Scanner IV", description: "Permette di scansionare gli IV dei Pokémon selvatici. Vengono rivelati 2 IV per ogni scanner. I migliori IV vengono mostrati per primi." },
"DNA_SPLICERS": { name: "Cuneo DNA" }, "DNA_SPLICERS": { name: "Cuneo DNA" },
"MINI_BLACK_HOLE": { name: "Piccolo Buco Nero" }, "MINI_BLACK_HOLE": { name: "Piccolo buco nero" },
"GOLDEN_POKEBALL": { name: "Poké Ball Oro", description: "Aggiunge 1 opzione di oggetto extra alla fine di ogni battaglia." }, "GOLDEN_POKEBALL": { name: "Poké Ball dorata", description: "Aggiunge 1 opzione di oggetto extra alla fine di ogni battaglia." },
"ENEMY_DAMAGE_BOOSTER": { name: "Gettone del Danno", description: "Aumenta il danno del 5%." }, "ENEMY_DAMAGE_BOOSTER": { name: "Gettone del danno", description: "Aumenta i danni inflitti del 5%." },
"ENEMY_DAMAGE_REDUCTION": { name: "Gettone della Protezione", description: "Riduce i danni ricevuti del 2.5%." }, "ENEMY_DAMAGE_REDUCTION": { name: "Gettone della protezione", description: "Riduce i danni ricevuti del 2.5%." },
"ENEMY_HEAL": { name: "Gettone del Recupero", description: "Cura il 2% dei PS massimi ogni turno." }, "ENEMY_HEAL": { name: "Gettone del recupero", description: "Cura il 2% dei PS massimi ogni turno." },
"ENEMY_ATTACK_POISON_CHANCE": { name: "Gettone del Veleno" }, "ENEMY_ATTACK_POISON_CHANCE": { name: "Gettone del veleno" },
"ENEMY_ATTACK_PARALYZE_CHANCE": { name: "Gettone della Paralisi" }, "ENEMY_ATTACK_PARALYZE_CHANCE": { name: "Gettone della paralisi" },
"ENEMY_ATTACK_BURN_CHANCE": { name: "Gettone della Bruciatura" }, "ENEMY_ATTACK_BURN_CHANCE": { name: "Gettone della bruciatura" },
"ENEMY_STATUS_EFFECT_HEAL_CHANCE": { name: "Gettone Guarigione Completa", description: "Aggiunge una probabilità del 2.5% a ogni turno di curare una condizione di stato." }, "ENEMY_STATUS_EFFECT_HEAL_CHANCE": { name: "Gettone guarigione completa", description: "Aggiunge una probabilità del 2.5% a ogni turno di guarire da un problema di stato." },
"ENEMY_ENDURE_CHANCE": { name: "Gettone di Resistenza" }, "ENEMY_ENDURE_CHANCE": { name: "Gettone di resistenza" },
"ENEMY_FUSED_CHANCE": { name: "Gettone della fusione", description: "Aggiunge l'1% di possibilità che un Pokémon selvatico sia una fusione." }, "ENEMY_FUSED_CHANCE": { name: "Gettone della fusione", description: "Aggiunge l'1% di possibilità che un Pokémon selvatico sia una fusione." },
}, },
SpeciesBoosterItem: { SpeciesBoosterItem: {
@ -258,14 +257,14 @@ export const modifierType: ModifierTypeTranslationEntries = {
}, },
TempBattleStatBoosterStatName: { TempBattleStatBoosterStatName: {
"ATK": "Attack", "ATK": "Attacco",
"DEF": "Defense", "DEF": "Difesa",
"SPATK": "Sp. Atk", "SPATK": "Att. Speciale",
"SPDEF": "Sp. Def", "SPDEF": "Dif. Speciale",
"SPD": "Speed", "SPD": "Velocità",
"ACC": "Accuracy", "ACC": "Precisione",
"CRIT": "Critical Hit Ratio", "CRIT": "Tasso di brutti colpi",
"EVA": "Evasiveness", "EVA": "Elusione",
"DEFAULT": "???", "DEFAULT": "???",
}, },

View File

@ -6,5 +6,48 @@ export const partyUiHandler: SimpleTranslationEntries = {
"CANCEL": "Annulla", "CANCEL": "Annulla",
"RELEASE": "Rilascia", "RELEASE": "Rilascia",
"APPLY": "Applica", "APPLY": "Applica",
"TEACH": "Insegna" "TEACH": "Insegna",
"SPLICE": "Splice",
"UNSPLICE": "Unsplice",
"ACTIVATE": "Activate",
"DEACTIVATE": "Deactivate",
"TRANSFER": "Transfer",
"ALL": "All",
"PASS_BATON": "Pass Baton",
"UNPAUSE_EVOLUTION": "Unpause Evolution",
"REVIVE": "Revive",
"choosePokemon": "Choose a Pokémon.",
"doWhatWithThisPokemon": "Do what with this Pokémon?",
"noEnergy": "{{pokemonName}} has no energy\nleft to battle!",
"hasEnergy": "{{pokemonName}} still has energy\nto battle!",
"cantBeUsed": "{{pokemonName}} can't be used in\nthis challenge!",
"tooManyItems": "{{pokemonName}} has too many\nof this item!",
"anyEffect": "It won't have any effect.",
"unpausedEvolutions": "Evolutions have been unpaused for {{pokemonName}}.",
"unspliceConfirmation": "Do you really want to unsplice {{fusionName}}\nfrom {{pokemonName}}? {{fusionName}} will be lost.",
"wasReverted": "{{fusionName}} was reverted to {{pokemonName}}.",
"releaseConfirmation": "Do you really want to release {{pokemonName}}?",
"releaseInBattle": "You can't release a Pokémon that's in battle!",
"selectAMove": "Select a move.",
"changeQuantity": "Select a held item to transfer.\nUse < and > to change the quantity.",
"selectAnotherPokemonToSplice": "Select another Pokémon to splice.",
"cancel": "Cancel",
// Slot TM text
"able": "Able",
"notAble": "Not able",
"learned": "Learned",
// Releasing messages
"goodbye": "Goodbye, {{pokemonName}}!",
"byebye": "Byebye, {{pokemonName}}!",
"farewell": "Farewell, {{pokemonName}}!",
"soLong": "So long, {{pokemonName}}!",
"thisIsWhereWePart": "This is where we part, {{pokemonName}}!",
"illMissYou": "I'll miss you, {{pokemonName}}!",
"illNeverForgetYou": "I'll never forget you, {{pokemonName}}!",
"untilWeMeetAgain": "Until we meet again, {{pokemonName}}!",
"sayonara": "Sayonara, {{pokemonName}}!",
"smellYaLater": "Smell ya later, {{pokemonName}}!",
} as const; } as const;

View File

@ -5,7 +5,4 @@ export const pokemonInfoContainer: SimpleTranslationEntries = {
"gender": "Genere:", "gender": "Genere:",
"ability": "Abilità:", "ability": "Abilità:",
"nature": "Natura:", "nature": "Natura:",
"epic": "Epico",
"rare": "Raro",
"common": "Comune"
} as const; } as const;

View File

@ -40,5 +40,6 @@ export const weather: SimpleTranslationEntries = {
"strongWindsStartMessage": "È apparsa una corrente d'aria misteriosa!", "strongWindsStartMessage": "È apparsa una corrente d'aria misteriosa!",
"strongWindsLapseMessage": "La corrente d'aria soffia intensamente.", "strongWindsLapseMessage": "La corrente d'aria soffia intensamente.",
"strongWindsEffectMessage": "La corrente misteriosa indebolisce lattacco!",
"strongWindsClearMessage": "La corrente d'aria è cessata." "strongWindsClearMessage": "La corrente d'aria è cessata."
}; };

View File

@ -24,7 +24,8 @@ export const battle: SimpleTranslationEntries = {
"hitResultNotVeryEffective": "효과가 별로인 듯하다…", "hitResultNotVeryEffective": "효과가 별로인 듯하다…",
"hitResultNoEffect": "{{pokemonName}}에게는\n효과가 없는 것 같다…", "hitResultNoEffect": "{{pokemonName}}에게는\n효과가 없는 것 같다…",
"hitResultOneHitKO": "일격필살!", "hitResultOneHitKO": "일격필살!",
"attackFailed": "하지만 실패했다!", "attackFailed": "그러나 실패하고 말았다!!",
"attackMissed": "{{pokemonNameWithAffix}}에게는\n맞지 않았다!",
"attackHitsCount": "{{count}}번 맞았다!", "attackHitsCount": "{{count}}번 맞았다!",
"rewardGain": "{{modifierName}}[[를]] 받았다!", "rewardGain": "{{modifierName}}[[를]] 받았다!",
"expGain": "{{pokemonName}}[[는]]\n{{exp}} 경험치를 얻었다!", "expGain": "{{pokemonName}}[[는]]\n{{exp}} 경험치를 얻었다!",

View File

@ -1,7 +1,7 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales"; import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const bgmName: SimpleTranslationEntries = { export const bgmName: SimpleTranslationEntries = {
"music": "Music", "music": "Music: ",
"missing_entries" : "{{name}}", "missing_entries" : "{{name}}",
"battle_kanto_champion": "BW2 관동 챔피언 배틀", "battle_kanto_champion": "BW2 관동 챔피언 배틀",
"battle_johto_champion": "BW2 성도 챔피언 배틀", "battle_johto_champion": "BW2 성도 챔피언 배틀",
@ -62,7 +62,7 @@ export const bgmName: SimpleTranslationEntries = {
"battle_legendary_calyrex": "SWSH 버드렉스 배틀", "battle_legendary_calyrex": "SWSH 버드렉스 배틀",
"battle_legendary_birds_galar": "SWSH 가라르 전설의 새 배틀", "battle_legendary_birds_galar": "SWSH 가라르 전설의 새 배틀",
"battle_legendary_ruinous": "SV 재앙의 보물 배틀", "battle_legendary_ruinous": "SV 재앙의 보물 배틀",
"battle_legendary_kor_mir": "SV Depths of Area Zero Battle", "battle_legendary_kor_mir": "SV 에리어 제로 배틀",
"battle_legendary_loyal_three": "SV 세벗들 배틀", "battle_legendary_loyal_three": "SV 세벗들 배틀",
"battle_legendary_ogerpon": "SV 오거폰 배틀", "battle_legendary_ogerpon": "SV 오거폰 배틀",
"battle_legendary_terapagos": "SV 테라파고스 배틀", "battle_legendary_terapagos": "SV 테라파고스 배틀",
@ -74,16 +74,16 @@ export const bgmName: SimpleTranslationEntries = {
"battle_wild": "BW 야생 포켓몬 배틀", "battle_wild": "BW 야생 포켓몬 배틀",
"battle_wild_strong": "BW 강한 야생 포켓몬 조우 배틀", "battle_wild_strong": "BW 강한 야생 포켓몬 조우 배틀",
"end_summit": "불가사의 던전 구조대 DX 천공의 탑 꼭대기", "end_summit": "불가사의 던전 구조대 DX 천공의 탑 꼭대기",
"battle_rocket_grunt": "HGSS Team Rocket Battle", "battle_rocket_grunt": "HGSS 로켓단 배틀",
"battle_aqua_magma_grunt": "ORAS Team Aqua & Magma Battle", "battle_aqua_magma_grunt": "ORAS 아쿠아단 & 마그마단 배틀",
"battle_galactic_grunt": "BDSP Team Galactic Battle", "battle_galactic_grunt": "BDSP 갤럭시단 배틀",
"battle_plasma_grunt": "BW 플라스마단 배틀", "battle_plasma_grunt": "BW 플라스마단 배틀",
"battle_flare_grunt": "XY Team Flare Battle", "battle_flare_grunt": "XY 플레어단 배틀",
"battle_rocket_boss": "USUM Giovanni Battle", "battle_rocket_boss": "USUM 비주기 배틀",
"battle_aqua_magma_boss": "ORAS Archie & Maxie Battle", "battle_aqua_magma_boss": "ORAS 아강 & 마적 배틀",
"battle_galactic_boss": "BDSP Cyrus Battle", "battle_galactic_boss": "BDSP 태홍 배틀",
"battle_plasma_boss": "B2W2 Ghetsis Battle", "battle_plasma_boss": "B2W2 게치스 배틀",
"battle_flare_boss": "XY Lysandre Battle", "battle_flare_boss": "XY 플라드리 배틀",
// Biome Music // Biome Music
"abyss": "불가사의 던전 하늘의 탐험대 어둠의 화구", "abyss": "불가사의 던전 하늘의 탐험대 어둠의 화구",

View File

@ -2,7 +2,7 @@ import { TranslationEntries } from "#app/interfaces/locales";
export const challenges: TranslationEntries = { export const challenges: TranslationEntries = {
"title": "챌린지 조건 설정", "title": "챌린지 조건 설정",
"illegalEvolution": "{{pokemon}} changed into an ineligble pokémon\nfor this challenge!", "illegalEvolution": "{{pokemon}}[[는]] 현재의 챌린지에\n부적합한 포켓몬이 되었습니다!",
"singleGeneration": { "singleGeneration": {
"name": "단일 세대", "name": "단일 세대",
"desc": "{{gen}}의 포켓몬만 사용할 수 있습니다.", "desc": "{{gen}}의 포켓몬만 사용할 수 있습니다.",

View File

@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const common: SimpleTranslationEntries = { export const common: SimpleTranslationEntries = {
"start": "시작", "start": "시작",
"luckIndicator": "행운:",
"shinyOnHover": "색이 다른",
"commonShiny": "커먼",
"rareShiny": "레어",
"epicShiny": "에픽",
} as const; } as const;

View File

@ -43,6 +43,7 @@ import { weather } from "./weather";
import { partyUiHandler } from "./party-ui-handler"; import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
export const koConfig = { export const koConfig = {
ability: ability, ability: ability,
@ -90,5 +91,6 @@ export const koConfig = {
tutorial: tutorial, tutorial: tutorial,
voucher: voucher, voucher: voucher,
weather: weather, weather: weather,
partyUiHandler: partyUiHandler partyUiHandler: partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler
}; };

View File

@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = {
"hatchFromTheEgg": "알이 부화해서\n{{pokemonName}}[[가]] 태어났다!", "hatchFromTheEgg": "알이 부화해서\n{{pokemonName}}[[가]] 태어났다!",
"eggMoveUnlock": "알 기술 {{moveName}}[[를]]\n사용할 수 있게 되었다!", "eggMoveUnlock": "알 기술 {{moveName}}[[를]]\n사용할 수 있게 되었다!",
"rareEggMoveUnlock": "레어 알 기술 {{moveName}}[[를]]\n사용할 수 있게 되었다!", "rareEggMoveUnlock": "레어 알 기술 {{moveName}}[[를]]\n사용할 수 있게 되었다!",
"moveUPGacha": "기술 UP!",
"shinyUPGacha": "특별색 UP!",
"legendaryUPGacha": "UP!",
} as const; } as const;

View File

@ -20,5 +20,5 @@ export const menuUiHandler: SimpleTranslationEntries = {
"exportData": "데이터 내보내기", "exportData": "데이터 내보내기",
"cancel": "취소", "cancel": "취소",
"losingProgressionWarning": "전투 시작으로부터의 진행 상황을 잃게 됩니다. 계속하시겠습니까?", "losingProgressionWarning": "전투 시작으로부터의 진행 상황을 잃게 됩니다. 계속하시겠습니까?",
"noEggs": "You are not hatching\nany eggs at the moment!" "noEggs": "부화중인 알이 없습니다!"
} as const; } as const;

View File

@ -53,6 +53,5 @@ export const menu: SimpleTranslationEntries = {
"no":"아니오", "no":"아니오",
"disclaimer": "면책 조항", "disclaimer": "면책 조항",
"disclaimerDescription": "이 게임은 완전히 개발되지 않았습니다- (세이브 데이터 소실을 포함) 플레이에 지장을 주는 문제가 생길 수 있으며,\n공지 없이 업데이트가 진행 혹은 중지될 수 있습니다.", "disclaimerDescription": "이 게임은 완전히 개발되지 않았습니다- (세이브 데이터 소실을 포함) 플레이에 지장을 주는 문제가 생길 수 있으며,\n공지 없이 업데이트가 진행 혹은 중지될 수 있습니다.",
"choosePokemon": "포켓몬을 선택하세요.",
"errorServerDown": "서버 연결 중 문제가 발생했습니다.\n\n이 창을 종료하지 않고 두면,\n게임은 자동으로 재접속됩니다.", "errorServerDown": "서버 연결 중 문제가 발생했습니다.\n\n이 창을 종료하지 않고 두면,\n게임은 자동으로 재접속됩니다.",
} as const; } as const;

View File

@ -0,0 +1,14 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const modifierSelectUiHandler: SimpleTranslationEntries = {
"transfer": "건네주기",
"reroll": "갱신",
"lockRarities": "희귀도 고정",
"checkTeam": "파티 확인",
"transferDesc": "지닌 물건을 다른 포켓몬에게 건네줍니다.",
"rerollDesc": "돈을 소모하여 아이템 목록을 새로 고칩니다.",
"lockRaritiesDesc": "갱신되는 아이템의 희귀도가 고정됩니다(갱신 비용 증가).",
"checkTeamDesc": "파티를 확인하거나 폼 변경 아이템을 사용합니다.",
"rerollCost": "₽{{formattedMoney}}",
"itemCost": "₽{{formattedMoney}}"
} as const;

View File

@ -42,7 +42,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
} }
}, },
"PokemonPpUpModifierType": { "PokemonPpUpModifierType": {
description: "포켓몬이 기억하고 있는 기술 중 1개의 PP 최대치를 5마다 {{upPoints}}씩 상승시킨다 (최대 3).", description: "포켓몬이 기억하고 있는 기술 중 1개의 PP 최대치를 5마다 {{upPoints}}씩 상승시킨다. (최대 3)",
}, },
"PokemonNatureChangeModifierType": { "PokemonNatureChangeModifierType": {
name: "{{natureName}}민트", name: "{{natureName}}민트",
@ -73,7 +73,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
description: "기절해 버린 포켓몬 전원의 HP를 완전히 회복한다.", description: "기절해 버린 포켓몬 전원의 HP를 완전히 회복한다.",
}, },
"MoneyRewardModifierType": { "MoneyRewardModifierType": {
description: "{{moneyMultiplier}} 양의 돈을 획득한다 (₽{{moneyAmount}}).", description: "{{moneyMultiplier}} 양의 돈을 획득한다. (₽{{moneyAmount}})",
extra: { extra: {
"small": "적은", "small": "적은",
"moderate": "적당한", "moderate": "적당한",
@ -90,7 +90,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
description: "배틀 승리로 얻는 친밀도가 50% 증가한다.", description: "배틀 승리로 얻는 친밀도가 50% 증가한다.",
}, },
"PokemonMoveAccuracyBoosterModifierType": { "PokemonMoveAccuracyBoosterModifierType": {
description: "기술의 명중률이 {{accuracyAmount}} 증가한다 (최대 100).", description: "기술의 명중률이 {{accuracyAmount}} 증가한다. (최대 100)",
}, },
"PokemonMultiHitModifierType": { "PokemonMultiHitModifierType": {
description: "지닌 개수(최대 3개)마다 추가 공격을 하는 대신, 공격력이 60%(1개)/75%(2개)/82.5%(3개)만큼 감소합니다.", description: "지닌 개수(최대 3개)마다 추가 공격을 하는 대신, 공격력이 60%(1개)/75%(2개)/82.5%(3개)만큼 감소합니다.",
@ -101,7 +101,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
}, },
"TmModifierTypeWithInfo": { "TmModifierTypeWithInfo": {
name: "No.{{moveId}} {{moveName}}", name: "No.{{moveId}} {{moveName}}",
description: "포켓몬에게 {{moveName}}를(을) 가르침\n(C 또는 Shift를 꾹 눌러 정보 확인).", description: "포켓몬에게 {{moveName}}를(을) 가르침.\n(C 또는 Shift를 꾹 눌러 정보 확인)",
}, },
"EvolutionItemModifierType": { "EvolutionItemModifierType": {
description: "어느 특정 포켓몬을 진화시킨다.", description: "어느 특정 포켓몬을 진화시킨다.",
@ -110,7 +110,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
description: "어느 특정 포켓몬을 폼 체인지시킨다.", description: "어느 특정 포켓몬을 폼 체인지시킨다.",
}, },
"FusePokemonModifierType": { "FusePokemonModifierType": {
description: "두 포켓몬을 결합시킨다 (특성 변환, 종족값과 타입 분배, 기술폭 공유).", description: "두 포켓몬을 결합시킨다. (특성 변환, 종족값과 타입 분배, 기술폭 공유)",
}, },
"TerastallizeModifierType": { "TerastallizeModifierType": {
name: "테라피스 {{teraType}}", name: "테라피스 {{teraType}}",
@ -184,7 +184,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
"EVIOLITE": { name: "진화의휘석", description: "진화의 이상한 덩어리. 지니게 하면 진화 전 포켓몬의 방어와 특수방어가 올라간다." }, "EVIOLITE": { name: "진화의휘석", description: "진화의 이상한 덩어리. 지니게 하면 진화 전 포켓몬의 방어와 특수방어가 올라간다." },
"SOUL_DEW": { name: "마음의물방울", description: "지닌 포켓몬의 성격의 효과가 10% 증가한다 (합연산)." }, "SOUL_DEW": { name: "마음의물방울", description: "지닌 포켓몬의 성격의 효과가 10% 증가한다. (합연산)" },
"NUGGET": { name: "금구슬" }, "NUGGET": { name: "금구슬" },
"BIG_NUGGET": { name: "큰금구슬" }, "BIG_NUGGET": { name: "큰금구슬" },
@ -201,14 +201,14 @@ export const modifierType: ModifierTypeTranslationEntries = {
"MULTI_LENS": { name: "멀티렌즈" }, "MULTI_LENS": { name: "멀티렌즈" },
"HEALING_CHARM": { name: "치유의부적", description: "HP를 회복하는 기술이나 도구를 썼을 때 효율이 10% 증가한다 (부활 제외)." }, "HEALING_CHARM": { name: "치유의부적", description: "HP를 회복하는 기술이나 도구를 썼을 때 효율이 10% 증가한다. (부활 제외)" },
"CANDY_JAR": { name: "사탕단지", description: "이상한사탕 종류의 아이템이 올려주는 레벨이 1 증가한다." }, "CANDY_JAR": { name: "사탕단지", description: "이상한사탕 종류의 아이템이 올려주는 레벨이 1 증가한다." },
"BERRY_POUCH": { name: "열매주머니", description: "사용한 나무열매가 소모되지 않을 확률이 30% 추가된다." }, "BERRY_POUCH": { name: "열매주머니", description: "사용한 나무열매가 소모되지 않을 확률이 30% 추가된다." },
"FOCUS_BAND": { name: "기합의머리띠", description: "기절할 듯한 데미지를 받아도 HP를 1 남겨서 견딜 확률이 10% 추가된다." }, "FOCUS_BAND": { name: "기합의머리띠", description: "기절할 듯한 데미지를 받아도 HP를 1 남겨서 견딜 확률이 10% 추가된다." },
"QUICK_CLAW": { name: "선제공격손톱", description: "상대보다 먼저 행동할 수 있게 될 확률이 10% 추가된다 (우선도 처리 이후)." }, "QUICK_CLAW": { name: "선제공격손톱", description: "상대보다 먼저 행동할 수 있게 될 확률이 10% 추가된다. (우선도 처리 이후)" },
"KINGS_ROCK": { name: "왕의징표석", description: "공격해서 데미지를 줄 때 상대를 풀죽일 확률이 10% 추가된다." }, "KINGS_ROCK": { name: "왕의징표석", description: "공격해서 데미지를 줄 때 상대를 풀죽일 확률이 10% 추가된다." },

View File

@ -6,5 +6,48 @@ export const partyUiHandler: SimpleTranslationEntries = {
"CANCEL": "그만둔다", "CANCEL": "그만둔다",
"RELEASE": "놓아준다", "RELEASE": "놓아준다",
"APPLY": "사용한다", "APPLY": "사용한다",
"TEACH": "가르친다" "TEACH": "가르친다",
"SPLICE": "융합",
"UNSPLICE": "융합 해제",
"ACTIVATE": "발동",
"DEACTIVATE": "해제",
"TRANSFER": "건넨다",
"ALL": "전부",
"PASS_BATON": "배턴터치한다",
"UNPAUSE_EVOLUTION": "진화 재개",
"REVIVE": "되살린다",
"choosePokemon": "포켓몬을 선택하세요.",
"doWhatWithThisPokemon": "포켓몬을 어떻게 하겠습니까?",
"noEnergy": "{{pokemonName}}[[는]] 싸울 수 있는\n기력이 남아 있지 않습니다!",
"hasEnergy": "{{pokemonName}}[[는]]\n아직도 힘이 넘친다!",
"cantBeUsed": "{{pokemonName}}[[는]] 이 챌린지에서는\n쓸 수 없습니다.",
"tooManyItems": "{{pokemonName}}[[는]] 지닌 도구의 수가\n너무 많습니다",
"anyEffect": "써도 효과가 없다.",
"unpausedEvolutions": "{{pokemonName}}의 진화가 재개되었다.",
"unspliceConfirmation": "{{pokemonName}}로부터 {{fusionName}}의 융합을 해제하시겠습니까?\n{{fusionName}}는 사라지게 됩니다.",
"wasReverted": "{{fusionName}}은 {{pokemonName}}의 모습으로 돌아갔습니다!",
"releaseConfirmation": "{{pokemonName}}[[를]]\n정말 놓아주겠습니까?",
"releaseInBattle": "전투 중인 포켓몬은\n놓아줄 수 없습니다.",
"selectAMove": "기술을 선택해 주십시오",
"changeQuantity": "건네줄 지닌 도구를 선택해 주십시오.\n< 와 > 로 수량을 변경할 수 있습니다.",
"selectAnotherPokemonToSplice": "융합할 포켓몬을 선택해 주십시오.",
"cancel": "그만둔다",
// Slot TM text
"able": "배운다!",
"notAble": "배우지 못함",
"learned": "알고 있다",
// Releasing messages
"goodbye": "잘 가, {{pokemonName}}!",
"byebye": "바이바이, {{pokemonName}}!",
"farewell": "작별이야, {{pokemonName}}!",
"soLong": "안녕, {{pokemonName}}!",
"thisIsWhereWePart": "여기서 헤어지자, {{pokemonName}}!",
"illMissYou": "보고 싶을거야, {{pokemonName}}!",
"illNeverForgetYou": "잊지 못할거야, {{pokemonName}}!",
"untilWeMeetAgain": "다시 만날 때까지, {{pokemonName}}!",
"sayonara": "사요나라, {{pokemonName}}!",
"smellYaLater": "또 보자, {{pokemonName}}!",
} as const; } as const;

View File

@ -5,8 +5,5 @@ export const pokemonInfoContainer: SimpleTranslationEntries = {
"gender": "성별:", "gender": "성별:",
"ability": "특성:", "ability": "특성:",
"nature": "성격:", "nature": "성격:",
"epic": "에픽",
"rare": "레어",
"common": "커먼",
"form": "폼:" "form": "폼:"
} as const; } as const;

View File

@ -41,5 +41,6 @@ export const weather: SimpleTranslationEntries = {
"strongWindsStartMessage": "수수께끼의 난기류가\n비행포켓몬을 지킨다!", "strongWindsStartMessage": "수수께끼의 난기류가\n비행포켓몬을 지킨다!",
"strongWindsLapseMessage": "수수께끼의 난기류가 강렬하게 불고 있다", "strongWindsLapseMessage": "수수께끼의 난기류가 강렬하게 불고 있다",
"strongWindsEffectMessage": "수수께끼의 난기류가 공격을 약하게 만들었다!",
"strongWindsClearMessage": "수수께끼의 난기류가 멈췄다!" // 임의번역 "strongWindsClearMessage": "수수께끼의 난기류가 멈췄다!" // 임의번역
}; };

View File

@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = {
"hitResultNoEffect": "Isso não afeta {{pokemonName}}!", "hitResultNoEffect": "Isso não afeta {{pokemonName}}!",
"hitResultOneHitKO": "Foi um nocaute de um golpe!", "hitResultOneHitKO": "Foi um nocaute de um golpe!",
"attackFailed": "Mas falhou!", "attackFailed": "Mas falhou!",
"attackMissed": "{{pokemonNameWithAffix}} desviou do ataque!",
"attackHitsCount": "Acertou {{count}} vezes.", "attackHitsCount": "Acertou {{count}} vezes.",
"rewardGain": "Você recebeu\n{{modifierName}}!", "rewardGain": "Você recebeu\n{{modifierName}}!",
"expGain": "{{pokemonName}} ganhou\n{{exp}} pontos de experiência.", "expGain": "{{pokemonName}} ganhou\n{{exp}} pontos de experiência.",

View File

@ -1,7 +1,7 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales"; import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const bgmName: SimpleTranslationEntries = { export const bgmName: SimpleTranslationEntries = {
"music": "Music", "music": "Music: ",
"missing_entries" : "{{name}}", "missing_entries" : "{{name}}",
"battle_kanto_champion": "B2W2 Kanto Champion Battle", "battle_kanto_champion": "B2W2 Kanto Champion Battle",
"battle_johto_champion": "B2W2 Johto Champion Battle", "battle_johto_champion": "B2W2 Johto Champion Battle",

View File

@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const common: SimpleTranslationEntries = { export const common: SimpleTranslationEntries = {
"start": "Iniciar", "start": "Iniciar",
"luckIndicator": "Sorte:",
"shinyOnHover": "Shiny",
"commonShiny": "Comum",
"rareShiny": "Raro",
"epicShiny": "Épico",
} as const; } as const;

View File

@ -43,6 +43,7 @@ import { weather } from "./weather";
import { partyUiHandler } from "./party-ui-handler"; import { partyUiHandler } from "./party-ui-handler";
import { settings } from "./settings.js"; import { settings } from "./settings.js";
import { common } from "./common.js"; import { common } from "./common.js";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler";
export const ptBrConfig = { export const ptBrConfig = {
ability: ability, ability: ability,
@ -90,5 +91,6 @@ export const ptBrConfig = {
trainerNames: trainerNames, trainerNames: trainerNames,
tutorial: tutorial, tutorial: tutorial,
voucher: voucher, voucher: voucher,
weather: weather weather: weather,
modifierSelectUiHandler: modifierSelectUiHandler
}; };

View File

@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = {
"hatchFromTheEgg": "{{pokemonName}} nasceu do ovo!", "hatchFromTheEgg": "{{pokemonName}} nasceu do ovo!",
"eggMoveUnlock": "Movimento de Ovo desbloqueado: {{moveName}}", "eggMoveUnlock": "Movimento de Ovo desbloqueado: {{moveName}}",
"rareEggMoveUnlock": "Movimento Raro de Ovo desbloqueado: {{moveName}}", "rareEggMoveUnlock": "Movimento Raro de Ovo desbloqueado: {{moveName}}",
"moveUPGacha": "Movimento\nde Ovo Bônus!",
"shinyUPGacha": "Shiny Bônus!",
"legendaryUPGacha": "Bônus!",
} as const; } as const;

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