merge conflicts

This commit is contained in:
Lylian 2024-08-25 12:30:49 +02:00
commit 964692fd05
1174 changed files with 105981 additions and 121422 deletions

45
.github/CODEOWNERS vendored Normal file
View File

@ -0,0 +1,45 @@
# Order is important; the last matching pattern takes the most precedence.
# everything (whole code-base) - Junior Devs
* @pagefaultgames/junior-dev-team
# github actions/templates etc. - Dev Leads
/.github @pagefaultgames/dev-leads
# --- Translations ---
# all translations - Translation Leads
/src/locales @pagefaultgames/translation-leads
# Catalan (Spain/Spanish)
/src/locales/ca_ES @pagefaultgames/catalan-translation-team
# German
/src/locales/de @pagefaultgames/german-translation-team
# English
/src/locales/en @pagefaultgames/english-translation-team
# Spanish
/src/locales/es @pagefaultgames/spanish-translation-team
# French
/src/locales/fr @pagefaultgames/french-translation-team
# Italian
/src/locales/it @pagefaultgames/italian-translation-team
# Japenese
/src/locales/ja @pagefaultgames/japanese-translation-team
# Korean
/src/locales/ko @pagefaultgames/korean-translation-team
# Brasilian (Brasil/Portuguese)
/src/locales/pt_BR @pagefaultgames/portuguese_br-translation-team
# Chinese (simplified)
/src/locales/zh_CN @pagefaultgames/chinese_simplified-translation-team
# Chinese (traditional)
/src/locales/zh_TW @pagefaultgames/chinese_traditional-translation-team

1
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1 @@
github: patapancakes

View File

@ -1,7 +1,7 @@
name: Feature Request name: Feature Request
description: Suggest an idea for this project description: Suggest an idea for this project
title: "[Feature] " title: "[Feature] "
labels: ["enhancement"] labels: ["Enhancement"]
body: body:
- type: markdown - type: markdown
attributes: attributes:

View File

@ -30,7 +30,7 @@
- [ ] The PR is self-contained and cannot be split into smaller PRs? - [ ] The PR is self-contained and cannot be split into smaller PRs?
- [ ] Have I provided a clear explanation of the changes? - [ ] Have I provided a clear explanation of the changes?
- [ ] Have I considered writing automated tests for the issue? - [ ] Have I considered writing automated tests for the issue?
- [ ] If I have text, did I add placeholders for them in locales? - [ ] If I have text, did I add make it translatable and added a key in the English language?
- [ ] Have I tested the changes (manually)? - [ ] Have I tested the changes (manually)?
- [ ] Are all unit tests still passing? (`npm run test`) - [ ] Are all unit tests still passing? (`npm run test`)
- [ ] Are the changes visual? - [ ] Are the changes visual?

View File

@ -53,6 +53,7 @@ Check out [Github Issues](https://github.com/pagefaultgames/pokerogue/issues) to
- Pokémon Sun/Moon - Pokémon Sun/Moon
- Pokémon Ultra Sun/Ultra Moon - Pokémon Ultra Sun/Ultra Moon
- Pokémon Sword/Shield - Pokémon Sword/Shield
- Pokémon Legends: Arceus
- Pokémon Scarlet/Violet - Pokémon Scarlet/Violet
- Firel (Custom Laboratory, Metropolis, Seabed, and Space biome music) - Firel (Custom Laboratory, Metropolis, Seabed, and Space biome music)
- Lmz (Custom Jungle biome music) - Lmz (Custom Jungle biome music)

View File

@ -38,7 +38,8 @@ export default [
"ignoreComments": false // Enforces the rule on lines containing comments "ignoreComments": false // Enforces the rule on lines containing comments
}], }],
"space-before-blocks": ["error", "always"], // Enforces a space before blocks "space-before-blocks": ["error", "always"], // Enforces a space before blocks
"keyword-spacing": ["error", { "before": true, "after": true }] // Enforces spacing before and after keywords "keyword-spacing": ["error", { "before": true, "after": true }], // Enforces spacing before and after keywords
"comma-spacing": ["error", { "before": false, "after": true }] // Enforces spacing after comma
} }
} }
] ]

View File

@ -17,6 +17,12 @@ body {
background: #484050; background: #484050;
} }
@media (display-mode: fullscreen) {
body {
background: #000000;
}
}
#links { #links {
width: 90%; width: 90%;
text-align: center; text-align: center;

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,9 +1,18 @@
import { type enConfig } from "#app/locales/en/config.js"; import { type enConfig } from "#app/locales/en/config.js";
import { TOptions } from "i18next";
//TODO: this needs to be type properly in the future
// Module declared to make referencing keys in the localization files type-safe. // Module declared to make referencing keys in the localization files type-safe.
declare module "i18next" { declare module "i18next" {
interface CustomTypeOptions { interface CustomTypeOptions {
defaultNS: "menu", // needed here as well for typedoc defaultNS: "menu", // needed here as well for typedoc
resources: typeof enConfig resources: typeof enConfig
} }
interface TFunction {
(
key: string | string[],
options?: TOptions & Record<string, unknown>
): string;
}
} }

View File

@ -83,6 +83,7 @@ import { SwitchPhase } from "./phases/switch-phase";
import { TitlePhase } from "./phases/title-phase"; import { TitlePhase } from "./phases/title-phase";
import { ToggleDoublePositionPhase } from "./phases/toggle-double-position-phase"; import { ToggleDoublePositionPhase } from "./phases/toggle-double-position-phase";
import { TurnInitPhase } from "./phases/turn-init-phase"; import { TurnInitPhase } from "./phases/turn-init-phase";
import { ShopCursorTarget } from "./enums/shop-cursor-target";
export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1";
@ -127,6 +128,7 @@ export default class BattleScene extends SceneBase {
public gameSpeed: integer = 1; public gameSpeed: integer = 1;
public damageNumbersMode: integer = 0; public damageNumbersMode: integer = 0;
public reroll: boolean = false; public reroll: boolean = false;
public shopCursorTarget: number = ShopCursorTarget.CHECK_TEAM;
public showMovesetFlyout: boolean = true; public showMovesetFlyout: boolean = true;
public showArenaFlyout: boolean = true; public showArenaFlyout: boolean = true;
public showTimeOfDayWidget: boolean = true; public showTimeOfDayWidget: boolean = true;
@ -1895,6 +1897,8 @@ export default class BattleScene extends SceneBase {
return 22.770; return 22.770;
case "battle_legendary_dia_pal": //ORAS Dialga & Palkia Battle case "battle_legendary_dia_pal": //ORAS Dialga & Palkia Battle
return 16.009; return 16.009;
case "battle_legendary_origin_forme": //LA Origin Dialga & Palkia Battle
return 18.961;
case "battle_legendary_giratina": //ORAS Giratina Battle case "battle_legendary_giratina": //ORAS Giratina Battle
return 10.451; return 10.451;
case "battle_legendary_arceus": //HGSS Arceus Battle case "battle_legendary_arceus": //HGSS Arceus Battle
@ -1923,6 +1927,8 @@ export default class BattleScene extends SceneBase {
return 12.503; return 12.503;
case "battle_legendary_calyrex": //SWSH Calyrex Battle case "battle_legendary_calyrex": //SWSH Calyrex Battle
return 50.641; return 50.641;
case "battle_legendary_riders": //SWSH Ice & Shadow Rider Calyrex Battle
return 18.155;
case "battle_legendary_birds_galar": //SWSH Galarian Legendary Birds Battle case "battle_legendary_birds_galar": //SWSH Galarian Legendary Birds Battle
return 0.175; return 0.175;
case "battle_legendary_ruinous": //SV Treasures of Ruin Battle case "battle_legendary_ruinous": //SV Treasures of Ruin Battle
@ -2666,7 +2672,8 @@ export default class BattleScene extends SceneBase {
wave: this.currentBattle?.waveIndex || 0, wave: this.currentBattle?.waveIndex || 0,
party: this.party ? this.party.map(p => { party: this.party ? this.party.map(p => {
return { name: p.name, level: p.level }; return { name: p.name, level: p.level };
}) : [] }) : [],
modeChain: this.ui?.getModeChain() ?? [],
}; };
(window as any).gameInfo = gameInfo; (window as any).gameInfo = gameInfo;
} }

View File

@ -275,8 +275,13 @@ export default class Battle {
return "battle_legendary_sinnoh"; return "battle_legendary_sinnoh";
} }
if (pokemon.species.speciesId === Species.DIALGA || pokemon.species.speciesId === Species.PALKIA) { if (pokemon.species.speciesId === Species.DIALGA || pokemon.species.speciesId === Species.PALKIA) {
if (pokemon.getFormKey() === "") {
return "battle_legendary_dia_pal"; return "battle_legendary_dia_pal";
} }
if (pokemon.getFormKey() === "origin") {
return "battle_legendary_origin_forme";
}
}
if (pokemon.species.speciesId === Species.GIRATINA) { if (pokemon.species.speciesId === Species.GIRATINA) {
return "battle_legendary_giratina"; return "battle_legendary_giratina";
} }
@ -319,8 +324,13 @@ export default class Battle {
return "battle_legendary_glas_spec"; return "battle_legendary_glas_spec";
} }
if (pokemon.species.speciesId === Species.CALYREX) { if (pokemon.species.speciesId === Species.CALYREX) {
if (pokemon.getFormKey() === "") {
return "battle_legendary_calyrex"; return "battle_legendary_calyrex";
} }
if (pokemon.getFormKey() === "ice" || pokemon.getFormKey() === "shadow") {
return "battle_legendary_riders";
}
}
if (pokemon.species.speciesId === Species.GALAR_ARTICUNO || pokemon.species.speciesId === Species.GALAR_ZAPDOS || pokemon.species.speciesId === Species.GALAR_MOLTRES) { if (pokemon.species.speciesId === Species.GALAR_ARTICUNO || pokemon.species.speciesId === Species.GALAR_ZAPDOS || pokemon.species.speciesId === Species.GALAR_MOLTRES) {
return "battle_legendary_birds_galar"; return "battle_legendary_birds_galar";
} }

View File

@ -13,7 +13,7 @@ import { ArenaTagSide, ArenaTrapTag } from "./arena-tag";
import { Stat, getStatName } from "./pokemon-stat"; import { Stat, getStatName } from "./pokemon-stat";
import { BerryModifier, PokemonHeldItemModifier } from "../modifier/modifier"; import { BerryModifier, PokemonHeldItemModifier } from "../modifier/modifier";
import { TerrainType } from "./terrain"; import { TerrainType } from "./terrain";
import { SpeciesFormChangeManualTrigger } from "./pokemon-forms"; import { SpeciesFormChangeManualTrigger, SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger } from "./pokemon-forms";
import i18next from "i18next"; import i18next from "i18next";
import { Localizable } from "#app/interfaces/locales.js"; import { Localizable } from "#app/interfaces/locales.js";
import { Command } from "../ui/command-ui-handler"; import { Command } from "../ui/command-ui-handler";
@ -25,10 +25,11 @@ import { ArenaTagType } from "#enums/arena-tag-type";
import { BattlerTagType } from "#enums/battler-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type";
import { Moves } from "#enums/moves"; import { Moves } from "#enums/moves";
import { Species } from "#enums/species"; import { Species } from "#enums/species";
import { MovePhase } from "#app/phases/move-phase.js"; import { MovePhase } from "#app/phases/move-phase";
import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase.js"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase";
import { ShowAbilityPhase } from "#app/phases/show-ability-phase.js"; import { ShowAbilityPhase } from "#app/phases/show-ability-phase";
import { StatChangePhase } from "#app/phases/stat-change-phase.js"; import { StatChangePhase } from "#app/phases/stat-change-phase";
import BattleScene from "#app/battle-scene";
export class Ability implements Localizable { export class Ability implements Localizable {
public id: Abilities; public id: Abilities;
@ -2371,6 +2372,73 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr {
} }
} }
/**
* Reverts weather-based forms to their normal forms when the user is summoned.
* Used by Cloud Nine and Air Lock.
* @extends PostSummonAbAttr
*/
export class PostSummonWeatherSuppressedFormChangeAbAttr extends PostSummonAbAttr {
/**
* Triggers {@linkcode Arena.triggerWeatherBasedFormChangesToNormal | triggerWeatherBasedFormChangesToNormal}
* @param {Pokemon} pokemon the Pokemon with this ability
* @param passive n/a
* @param args n/a
* @returns whether a Pokemon was reverted to its normal form
*/
applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]) {
const pokemonToTransform = getPokemonWithWeatherBasedForms(pokemon.scene);
if (pokemonToTransform.length < 1) {
return false;
}
if (!simulated) {
pokemon.scene.arena.triggerWeatherBasedFormChangesToNormal();
}
return true;
}
}
/**
* Triggers weather-based form change when summoned into an active weather.
* Used by Forecast.
* @extends PostSummonAbAttr
*/
export class PostSummonFormChangeByWeatherAbAttr extends PostSummonAbAttr {
private ability: Abilities;
constructor(ability: Abilities) {
super(false);
this.ability = ability;
}
/**
* Calls the {@linkcode BattleScene.triggerPokemonFormChange | triggerPokemonFormChange} for both
* {@linkcode SpeciesFormChange.SpeciesFormChangeWeatherTrigger | SpeciesFormChangeWeatherTrigger} and
* {@linkcode SpeciesFormChange.SpeciesFormChangeWeatherTrigger | SpeciesFormChangeRevertWeatherFormTrigger} if it
* is the specific Pokemon and ability
* @param {Pokemon} pokemon the Pokemon with this ability
* @param passive n/a
* @param args n/a
* @returns whether the form change was triggered
*/
applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean {
if (pokemon.species.speciesId === Species.CASTFORM && this.ability === Abilities.FORECAST) {
if (simulated) {
return simulated;
}
pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeWeatherTrigger);
pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeRevertWeatherFormTrigger);
queueShowAbility(pokemon, passive);
return true;
}
return false;
}
}
export class PreSwitchOutAbAttr extends AbAttr { export class PreSwitchOutAbAttr extends AbAttr {
constructor() { constructor() {
super(true); super(true);
@ -3024,6 +3092,49 @@ export class PostWeatherChangeAbAttr extends AbAttr {
} }
} }
/**
* Triggers weather-based form change when weather changes.
* Used by Forecast.
* @extends PostWeatherChangeAbAttr
*/
export class PostWeatherChangeFormChangeAbAttr extends PostWeatherChangeAbAttr {
private ability: Abilities;
constructor(ability: Abilities) {
super(false);
this.ability = ability;
}
/**
* Calls {@linkcode Arena.triggerWeatherBasedFormChangesToNormal | triggerWeatherBasedFormChangesToNormal} when the
* weather changed to form-reverting weather, otherwise calls {@linkcode Arena.triggerWeatherBasedFormChanges | triggerWeatherBasedFormChanges}
* @param {Pokemon} pokemon the Pokemon that changed the weather
* @param passive n/a
* @param weather n/a
* @param args n/a
* @returns whether the form change was triggered
*/
applyPostWeatherChange(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: WeatherType, args: any[]): boolean {
if (pokemon.species.speciesId === Species.CASTFORM && this.ability === Abilities.FORECAST) {
if (simulated) {
return simulated;
}
const formRevertingWeathers: WeatherType[] = [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ];
const weatherType = pokemon.scene.arena.weather?.weatherType;
if (weatherType && formRevertingWeathers.includes(weatherType)) {
pokemon.scene.arena.triggerWeatherBasedFormChangesToNormal();
} else {
pokemon.scene.arena.triggerWeatherBasedFormChanges();
}
return true;
}
return false;
}
}
export class PostWeatherChangeAddBattlerTagAttr extends PostWeatherChangeAbAttr { export class PostWeatherChangeAddBattlerTagAttr extends PostWeatherChangeAbAttr {
private tagType: BattlerTagType; private tagType: BattlerTagType;
private turnCount: integer; private turnCount: integer;
@ -3309,11 +3420,25 @@ export class PostTurnLootAbAttr extends PostTurnAbAttr {
} }
} }
/**
* Attribute used for {@linkcode Abilities.MOODY}
*/
export class MoodyAbAttr extends PostTurnAbAttr { export class MoodyAbAttr extends PostTurnAbAttr {
constructor() { constructor() {
super(true); super(true);
} }
/**
* Randomly increases one BattleStat by 2 stages and decreases a different BattleStat by 1 stage
* @param {Pokemon} pokemon Pokemon that has this ability
* @param passive N/A
* @param simulated true if applying in a simulated call.
* @param args N/A
* @returns true
*
* Any BattleStats at +6 or -6 are excluded from being increased or decreased, respectively
* If the pokemon already has all BattleStats raised to stage 6, it will only decrease one BattleStat by 1 stage
* If the pokemon already has all BattleStats lowered to stage -6, it will only increase one BattleStat by 2 stages
*/
applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean {
const selectableStats = [BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD]; const selectableStats = [BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD];
const increaseStatArray = selectableStats.filter(s => pokemon.summonData.battleStats[s] < 6); const increaseStatArray = selectableStats.filter(s => pokemon.summonData.battleStats[s] < 6);
@ -3325,7 +3450,7 @@ export class MoodyAbAttr extends PostTurnAbAttr {
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [increaseStat], 2)); pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [increaseStat], 2));
} }
if (!simulated && decreaseStatArray.length > 0) { if (!simulated && decreaseStatArray.length > 0) {
const decreaseStat = selectableStats[Utils.randInt(selectableStats.length)]; const decreaseStat = decreaseStatArray[Utils.randInt(decreaseStatArray.length)];
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [decreaseStat], -1)); pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [decreaseStat], -1));
} }
return true; return true;
@ -3780,6 +3905,38 @@ export class PostFaintAbAttr extends AbAttr {
} }
} }
/**
* Used for weather suppressing abilities to trigger weather-based form changes upon being fainted.
* Used by Cloud Nine and Air Lock.
* @extends PostFaintAbAttr
*/
export class PostFaintUnsuppressedWeatherFormChangeAbAttr extends PostFaintAbAttr {
/**
* Triggers {@linkcode Arena.triggerWeatherBasedFormChanges | triggerWeatherBasedFormChanges}
* when the user of the ability faints
* @param {Pokemon} pokemon the fainted Pokemon
* @param passive n/a
* @param attacker n/a
* @param move n/a
* @param hitResult n/a
* @param args n/a
* @returns whether the form change was triggered
*/
applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean {
const pokemonToTransform = getPokemonWithWeatherBasedForms(pokemon.scene);
if (pokemonToTransform.length < 1) {
return false;
}
if (!simulated) {
pokemon.scene.arena.triggerWeatherBasedFormChanges();
}
return true;
}
}
/** /**
* Clears Desolate Land/Primordial Sea/Delta Stream upon the Pokemon fainting * Clears Desolate Land/Primordial Sea/Delta Stream upon the Pokemon fainting
*/ */
@ -4239,7 +4396,7 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr {
(args[0] as Utils.NumberHolder).value = this.multiplier; (args[0] as Utils.NumberHolder).value = this.multiplier;
pokemon.removeTag(this.tagType); pokemon.removeTag(this.tagType);
if (this.recoilDamageFunc) { if (this.recoilDamageFunc) {
pokemon.damageAndUpdate(this.recoilDamageFunc(pokemon), HitResult.OTHER); pokemon.damageAndUpdate(this.recoilDamageFunc(pokemon), HitResult.OTHER, false, false, true, true);
} }
} }
return true; return true;
@ -4652,6 +4809,16 @@ function setAbilityRevealed(pokemon: Pokemon): void {
} }
} }
/**
* Returns the Pokemon with weather-based forms
* @param {BattleScene} scene - The current scene
*/
function getPokemonWithWeatherBasedForms(scene: BattleScene) {
return scene.getField(true).filter(p =>
p.hasAbility(Abilities.FORECAST) && p.species.speciesId === Species.CASTFORM
);
}
export const allAbilities = [ new Ability(Abilities.NONE, 3) ]; export const allAbilities = [ new Ability(Abilities.NONE, 3) ];
export function initAbilities() { export function initAbilities() {
@ -4698,7 +4865,10 @@ export function initAbilities() {
.ignorable(), .ignorable(),
new Ability(Abilities.CLOUD_NINE, 3) new Ability(Abilities.CLOUD_NINE, 3)
.attr(SuppressWeatherEffectAbAttr, true) .attr(SuppressWeatherEffectAbAttr, true)
.attr(PostSummonUnnamedMessageAbAttr, "The effects of the weather disappeared."), .attr(PostSummonUnnamedMessageAbAttr, i18next.t("abilityTriggers:weatherEffectDisappeared"))
.attr(PostSummonWeatherSuppressedFormChangeAbAttr)
.attr(PostFaintUnsuppressedWeatherFormChangeAbAttr)
.bypassFaint(),
new Ability(Abilities.COMPOUND_EYES, 3) new Ability(Abilities.COMPOUND_EYES, 3)
.attr(BattleStatMultiplierAbAttr, BattleStat.ACC, 1.3), .attr(BattleStatMultiplierAbAttr, BattleStat.ACC, 1.3),
new Ability(Abilities.INSOMNIA, 3) new Ability(Abilities.INSOMNIA, 3)
@ -4843,7 +5013,8 @@ export function initAbilities() {
new Ability(Abilities.FORECAST, 3) new Ability(Abilities.FORECAST, 3)
.attr(UncopiableAbilityAbAttr) .attr(UncopiableAbilityAbAttr)
.attr(NoFusionAbilityAbAttr) .attr(NoFusionAbilityAbAttr)
.unimplemented(), .attr(PostSummonFormChangeByWeatherAbAttr, Abilities.FORECAST)
.attr(PostWeatherChangeFormChangeAbAttr, Abilities.FORECAST),
new Ability(Abilities.STICKY_HOLD, 3) new Ability(Abilities.STICKY_HOLD, 3)
.attr(BlockItemTheftAbAttr) .attr(BlockItemTheftAbAttr)
.bypassFaint() .bypassFaint()
@ -4893,7 +5064,10 @@ export function initAbilities() {
.ignorable(), .ignorable(),
new Ability(Abilities.AIR_LOCK, 3) new Ability(Abilities.AIR_LOCK, 3)
.attr(SuppressWeatherEffectAbAttr, true) .attr(SuppressWeatherEffectAbAttr, true)
.attr(PostSummonUnnamedMessageAbAttr, "The effects of the weather disappeared."), .attr(PostSummonUnnamedMessageAbAttr, i18next.t("abilityTriggers:weatherEffectDisappeared"))
.attr(PostSummonWeatherSuppressedFormChangeAbAttr)
.attr(PostFaintUnsuppressedWeatherFormChangeAbAttr)
.bypassFaint(),
new Ability(Abilities.TANGLED_FEET, 4) new Ability(Abilities.TANGLED_FEET, 4)
.conditionalAttr(pokemon => !!pokemon.getTag(BattlerTagType.CONFUSED), BattleStatMultiplierAbAttr, BattleStat.EVA, 2) .conditionalAttr(pokemon => !!pokemon.getTag(BattlerTagType.CONFUSED), BattleStatMultiplierAbAttr, BattleStat.EVA, 2)
.ignorable(), .ignorable(),

View File

@ -26,16 +26,17 @@ import { BattlerTagType } from "#enums/battler-tag-type";
import { Biome } from "#enums/biome"; import { Biome } from "#enums/biome";
import { Moves } from "#enums/moves"; import { Moves } from "#enums/moves";
import { Species } from "#enums/species"; import { Species } from "#enums/species";
import { MoveUsedEvent } from "#app/events/battle-scene.js"; import { MoveUsedEvent } from "#app/events/battle-scene";
import { PartyStatusCurePhase } from "#app/phases/party-status-cure-phase.js"; import { PartyStatusCurePhase } from "#app/phases/party-status-cure-phase";
import { BattleEndPhase } from "#app/phases/battle-end-phase.js"; import { BattleEndPhase } from "#app/phases/battle-end-phase";
import { MoveEndPhase } from "#app/phases/move-end-phase.js"; import { MoveEndPhase } from "#app/phases/move-end-phase";
import { MovePhase } from "#app/phases/move-phase.js"; import { MovePhase } from "#app/phases/move-phase";
import { NewBattlePhase } from "#app/phases/new-battle-phase.js"; import { NewBattlePhase } from "#app/phases/new-battle-phase";
import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase.js"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase";
import { StatChangePhase } from "#app/phases/stat-change-phase.js"; import { StatChangePhase } from "#app/phases/stat-change-phase";
import { SwitchPhase } from "#app/phases/switch-phase.js"; import { SwitchPhase } from "#app/phases/switch-phase";
import { SwitchSummonPhase } from "#app/phases/switch-summon-phase.js"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase";
import { SpeciesFormChangeRevertWeatherFormTrigger } from "./pokemon-forms";
export enum MoveCategory { export enum MoveCategory {
PHYSICAL, PHYSICAL,
@ -4946,7 +4947,7 @@ export class RevivalBlessingAttr extends MoveEffectAttr {
const slotIndex = user.scene.getEnemyParty().findIndex(p => pokemon.id === p.id); const slotIndex = user.scene.getEnemyParty().findIndex(p => pokemon.id === p.id);
pokemon.resetStatus(); pokemon.resetStatus();
pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp()));
user.scene.queueMessage(`${getPokemonNameWithAffix(pokemon)} was revived!`,0,true); user.scene.queueMessage(i18next.t("moveTriggers:revivalBlessing", {pokemonName: getPokemonNameWithAffix(pokemon)}), 0, true);
if (user.scene.currentBattle.double && user.scene.getEnemyParty().length > 1) { if (user.scene.currentBattle.double && user.scene.getEnemyParty().length > 1) {
const allyPokemon = user.getAlly(); const allyPokemon = user.getAlly();
@ -5739,8 +5740,10 @@ export class AbilityChangeAttr extends MoveEffectAttr {
return false; return false;
} }
const moveTarget = this.selfTarget ? user : target;
const pokemon: Pokemon = this.selfTarget ? user : target; const pokemon: Pokemon = this.selfTarget ? user : target;
pokemon.summonData.ability = this.ability; pokemon.summonData.ability = this.ability;
user.scene.triggerPokemonFormChange(moveTarget, SpeciesFormChangeRevertWeatherFormTrigger);
if (pokemon.breakIllusion()) { if (pokemon.breakIllusion()) {
pokemon.scene.queueMessage(i18next.t("abilityTriggers:illusionBreak", { pokemonName: getPokemonNameWithAffix(pokemon) })); pokemon.scene.queueMessage(i18next.t("abilityTriggers:illusionBreak", { pokemonName: getPokemonNameWithAffix(pokemon) }));
} }
@ -5827,6 +5830,10 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr {
target.summonData.ability = tempAbilityId; target.summonData.ability = tempAbilityId;
user.scene.queueMessage(i18next.t("moveTriggers:swappedAbilitiesWithTarget", {pokemonName: getPokemonNameWithAffix(user)})); user.scene.queueMessage(i18next.t("moveTriggers:swappedAbilitiesWithTarget", {pokemonName: getPokemonNameWithAffix(user)}));
// Swaps Forecast from Castform
user.scene.arena.triggerWeatherBasedFormChangesToNormal();
// Swaps Forecast to Castform (edge case)
user.scene.arena.triggerWeatherBasedFormChanges();
return true; return true;
} }
@ -5852,6 +5859,7 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr {
} }
target.summonData.abilitySuppressed = true; target.summonData.abilitySuppressed = true;
target.scene.arena.triggerWeatherBasedFormChangesToNormal();
target.scene.queueMessage(i18next.t("moveTriggers:suppressAbilities", {pokemonName: getPokemonNameWithAffix(target)})); target.scene.queueMessage(i18next.t("moveTriggers:suppressAbilities", {pokemonName: getPokemonNameWithAffix(target)}));

View File

@ -10,6 +10,7 @@ import { Species } from "#enums/species";
import { TimeOfDay } from "#enums/time-of-day"; import { TimeOfDay } from "#enums/time-of-day";
import { getPokemonNameWithAffix } from "#app/messages.js"; import { getPokemonNameWithAffix } from "#app/messages.js";
import i18next from "i18next"; import i18next from "i18next";
import { WeatherType } from "./weather";
export enum FormChangeItem { export enum FormChangeItem {
NONE, NONE,
@ -356,6 +357,78 @@ export class SpeciesDefaultFormMatchTrigger extends SpeciesFormChangeTrigger {
} }
} }
/**
* Class used for triggering form changes based on weather.
* Used by Castform.
* @extends SpeciesFormChangeTrigger
*/
export class SpeciesFormChangeWeatherTrigger extends SpeciesFormChangeTrigger {
/** The ability that triggers the form change */
public ability: Abilities;
/** The list of weathers that trigger the form change */
public weathers: WeatherType[];
constructor(ability: Abilities, weathers: WeatherType[]) {
super();
this.ability = ability;
this.weathers = weathers;
}
/**
* Checks if the Pokemon has the required ability and is in the correct weather while
* the weather or ability is also not suppressed.
* @param {Pokemon} pokemon the pokemon that is trying to do the form change
* @returns `true` if the Pokemon can change forms, `false` otherwise
*/
canChange(pokemon: Pokemon): boolean {
const currentWeather = pokemon.scene.arena.weather?.weatherType ?? WeatherType.NONE;
const isWeatherSuppressed = pokemon.scene.arena.weather?.isEffectSuppressed(pokemon.scene);
const isAbilitySuppressed = pokemon.summonData.abilitySuppressed;
return !isAbilitySuppressed && !isWeatherSuppressed && (pokemon.hasAbility(this.ability) && this.weathers.includes(currentWeather));
}
}
/**
* Class used for reverting to the original form when the weather runs out
* or when the user loses the ability/is suppressed.
* Used by Castform.
* @extends SpeciesFormChangeTrigger
*/
export class SpeciesFormChangeRevertWeatherFormTrigger extends SpeciesFormChangeTrigger {
/** The ability that triggers the form change*/
public ability: Abilities;
/** The list of weathers that will also trigger a form change to original form */
public weathers: WeatherType[];
constructor(ability: Abilities, weathers: WeatherType[]) {
super();
this.ability = ability;
this.weathers = weathers;
}
/**
* Checks if the Pokemon has the required ability and the weather is one that will revert
* the Pokemon to its original form or the weather or ability is suppressed
* @param {Pokemon} pokemon the pokemon that is trying to do the form change
* @returns `true` if the Pokemon will revert to its original form, `false` otherwise
*/
canChange(pokemon: Pokemon): boolean {
if (pokemon.hasAbility(this.ability, false, true)) {
const currentWeather = pokemon.scene.arena.weather?.weatherType ?? WeatherType.NONE;
const isWeatherSuppressed = pokemon.scene.arena.weather?.isEffectSuppressed(pokemon.scene);
const isAbilitySuppressed = pokemon.summonData.abilitySuppressed;
const summonDataAbility = pokemon.summonData.ability;
const isAbilityChanged = summonDataAbility !== this.ability && summonDataAbility !== Abilities.NONE;
if (this.weathers.includes(currentWeather) || isWeatherSuppressed || isAbilitySuppressed || isAbilityChanged) {
return true;
}
}
return false;
}
}
export function getSpeciesFormChangeMessage(pokemon: Pokemon, formChange: SpeciesFormChange, preName: string): string { export function getSpeciesFormChangeMessage(pokemon: Pokemon, formChange: SpeciesFormChange, preName: string): string {
const isMega = formChange.formKey.indexOf(SpeciesFormKey.MEGA) > -1; const isMega = formChange.formKey.indexOf(SpeciesFormKey.MEGA) > -1;
const isGmax = formChange.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) > -1; const isGmax = formChange.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) > -1;
@ -839,7 +912,24 @@ export const pokemonFormChanges: PokemonFormChanges = {
new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeManualTrigger, true), new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeManualTrigger, true),
new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeActiveTrigger(false), true), new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeActiveTrigger(false), true),
new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeActiveTrigger(false), true), new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeActiveTrigger(false), true),
] ],
[Species.CASTFORM]: [
new SpeciesFormChange(Species.CASTFORM, "", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.SUNNY, WeatherType.HARSH_SUN]), true),
new SpeciesFormChange(Species.CASTFORM, "rainy", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.SUNNY, WeatherType.HARSH_SUN]), true),
new SpeciesFormChange(Species.CASTFORM, "snowy", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.SUNNY, WeatherType.HARSH_SUN]), true),
new SpeciesFormChange(Species.CASTFORM, "", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.RAIN, WeatherType.HEAVY_RAIN]), true),
new SpeciesFormChange(Species.CASTFORM, "sunny", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.RAIN, WeatherType.HEAVY_RAIN]), true),
new SpeciesFormChange(Species.CASTFORM, "snowy", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.RAIN, WeatherType.HEAVY_RAIN]), true),
new SpeciesFormChange(Species.CASTFORM, "", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.HAIL, WeatherType.SNOW]), true),
new SpeciesFormChange(Species.CASTFORM, "sunny", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.HAIL, WeatherType.SNOW]), true),
new SpeciesFormChange(Species.CASTFORM, "rainy", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.HAIL, WeatherType.SNOW]), true),
new SpeciesFormChange(Species.CASTFORM, "sunny", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG]), true),
new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG]), true),
new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG]), true),
new SpeciesFormChange(Species.CASTFORM, "sunny", "", new SpeciesFormChangeActiveTrigger(), true),
new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeActiveTrigger(), true),
new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeActiveTrigger(), true),
],
}; };
export function initPokemonForms() { export function initPokemonForms() {

View File

@ -2581,7 +2581,7 @@ export function initSpecies() {
), ),
new PokemonSpecies(Species.WALKING_WAKE, 9, false, false, false, "Paradox Pokémon", Type.WATER, Type.DRAGON, 3.5, 280, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 590, 99, 83, 91, 125, 83, 109, 5, 0, 295, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.WALKING_WAKE, 9, false, false, false, "Paradox Pokémon", Type.WATER, Type.DRAGON, 3.5, 280, Abilities.PROTOSYNTHESIS, Abilities.NONE, Abilities.NONE, 590, 99, 83, 91, 125, 83, 109, 5, 0, 295, GrowthRate.SLOW, null, false),
new PokemonSpecies(Species.IRON_LEAVES, 9, false, false, false, "Paradox Pokémon", Type.GRASS, Type.PSYCHIC, 1.5, 125, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 590, 90, 130, 88, 70, 108, 104, 5, 0, 295, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.IRON_LEAVES, 9, false, false, false, "Paradox Pokémon", Type.GRASS, Type.PSYCHIC, 1.5, 125, Abilities.QUARK_DRIVE, Abilities.NONE, Abilities.NONE, 590, 90, 130, 88, 70, 108, 104, 5, 0, 295, GrowthRate.SLOW, null, false),
new PokemonSpecies(Species.DIPPLIN, 9, false, false, false, "Candy Apple Pokémon", Type.GRASS, Type.DRAGON, 0.4, 9.7, Abilities.SUPERSWEET_SYRUP, Abilities.GLUTTONY, Abilities.STICKY_HOLD, 485, 80, 80, 110, 95, 80, 40, 45, 50, 170, GrowthRate.ERRATIC, null, false), new PokemonSpecies(Species.DIPPLIN, 9, false, false, false, "Candy Apple Pokémon", Type.GRASS, Type.DRAGON, 0.4, 9.7, Abilities.SUPERSWEET_SYRUP, Abilities.GLUTTONY, Abilities.STICKY_HOLD, 485, 80, 80, 110, 95, 80, 40, 45, 50, 170, GrowthRate.ERRATIC, 50, false),
new PokemonSpecies(Species.POLTCHAGEIST, 9, false, false, false, "Matcha Pokémon", Type.GRASS, Type.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.SLOW, null, false, false, new PokemonSpecies(Species.POLTCHAGEIST, 9, false, false, false, "Matcha Pokémon", Type.GRASS, Type.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.SLOW, null, false, false,
new PokemonForm("Counterfeit Form", "counterfeit", Type.GRASS, Type.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, true), new PokemonForm("Counterfeit Form", "counterfeit", Type.GRASS, Type.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, true),
new PokemonForm("Artisan Form", "artisan", Type.GRASS, Type.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, true), new PokemonForm("Artisan Form", "artisan", Type.GRASS, Type.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, true),
@ -3317,6 +3317,28 @@ export function getStarterValueFriendshipCap(value: integer): integer {
} }
} }
/**
* Method to get the daily list of starters with Pokerus.
* @param scene {@linkcode BattleScene} used as part of RNG
* @returns A list of starters with Pokerus
*/
export function getPokerusStarters(scene: BattleScene): PokemonSpecies[] {
const pokerusStarters: PokemonSpecies[] = [];
const date = new Date();
const starterCount = 3; //for easy future adjustment!
date.setUTCHours(0, 0, 0, 0);
scene.executeWithSeedOffset(() => {
while (pokerusStarters.length < starterCount) {
const randomSpeciesId = parseInt(Utils.randSeedItem(Object.keys(speciesStarters)), 10);
const species = getPokemonSpecies(randomSpeciesId);
if (!pokerusStarters.includes(species)) {
pokerusStarters.push(species);
}
}
}, 0, date.getTime().toString());
return pokerusStarters;
}
export const starterPassiveAbilities = { export const starterPassiveAbilities = {
[Species.BULBASAUR]: Abilities.GRASSY_SURGE, [Species.BULBASAUR]: Abilities.GRASSY_SURGE,
[Species.CHARMANDER]: Abilities.BEAST_BOOST, [Species.CHARMANDER]: Abilities.BEAST_BOOST,

View File

@ -47576,6 +47576,7 @@ export const tmSpecies: TmSpecies = {
Species.PIGNITE, Species.PIGNITE,
Species.EMBOAR, Species.EMBOAR,
Species.PANSEAR, Species.PANSEAR,
Species.SIMISEAR,
Species.DARUMAKA, Species.DARUMAKA,
Species.DARMANITAN, Species.DARMANITAN,
Species.LITWICK, Species.LITWICK,
@ -47617,6 +47618,7 @@ export const tmSpecies: TmSpecies = {
Species.CHI_YU, Species.CHI_YU,
Species.KORAIDON, Species.KORAIDON,
Species.GOUGING_FIRE, Species.GOUGING_FIRE,
Species.TERAPAGOS,
Species.ALOLA_MAROWAK, Species.ALOLA_MAROWAK,
Species.GALAR_DARUMAKA, Species.GALAR_DARUMAKA,
Species.GALAR_DARMANITAN, Species.GALAR_DARMANITAN,
@ -50733,6 +50735,7 @@ export const tmSpecies: TmSpecies = {
Species.KECLEON, Species.KECLEON,
Species.SHUPPET, Species.SHUPPET,
Species.BANETTE, Species.BANETTE,
Species.DEOXYS,
Species.CHIMCHAR, Species.CHIMCHAR,
Species.MONFERNO, Species.MONFERNO,
Species.INFERNAPE, Species.INFERNAPE,
@ -50761,8 +50764,11 @@ export const tmSpecies: TmSpecies = {
Species.PURRLOIN, Species.PURRLOIN,
Species.LIEPARD, Species.LIEPARD,
Species.PANSAGE, Species.PANSAGE,
Species.SIMISAGE,
Species.PANSEAR, Species.PANSEAR,
Species.SIMISEAR,
Species.PANPOUR, Species.PANPOUR,
Species.SIMIPOUR,
Species.WOOBAT, Species.WOOBAT,
Species.SWOOBAT, Species.SWOOBAT,
Species.YAMASK, Species.YAMASK,
@ -55614,8 +55620,14 @@ export const tmSpecies: TmSpecies = {
Species.HISUI_DECIDUEYE, Species.HISUI_DECIDUEYE,
], ],
[Moves.ACID_SPRAY]: [ [Moves.ACID_SPRAY]: [
Species.BULBASAUR,
Species.IVYSAUR,
Species.VENUSAUR,
Species.EKANS, Species.EKANS,
Species.ARBOK, Species.ARBOK,
Species.ODDISH,
Species.GLOOM,
Species.VILEPLUME,
Species.VENONAT, Species.VENONAT,
Species.VENOMOTH, Species.VENOMOTH,
Species.BELLSPROUT, Species.BELLSPROUT,
@ -55630,13 +55642,17 @@ export const tmSpecies: TmSpecies = {
Species.GENGAR, Species.GENGAR,
Species.KOFFING, Species.KOFFING,
Species.WEEZING, Species.WEEZING,
Species.MAGMAR,
Species.MEW, Species.MEW,
Species.SPINARAK, Species.SPINARAK,
Species.ARIADOS, Species.ARIADOS,
Species.BELLOSSOM,
Species.WOOPER, Species.WOOPER,
Species.QUAGSIRE, Species.QUAGSIRE,
Species.QWILFISH, Species.QWILFISH,
Species.REMORAID, Species.REMORAID,
Species.OCTILLERY,
Species.MAGBY,
Species.GULPIN, Species.GULPIN,
Species.SWALOT, Species.SWALOT,
Species.SEVIPER, Species.SEVIPER,
@ -55645,13 +55661,16 @@ export const tmSpecies: TmSpecies = {
Species.CROAGUNK, Species.CROAGUNK,
Species.TOXICROAK, Species.TOXICROAK,
Species.CARNIVINE, Species.CARNIVINE,
Species.MAGMORTAR,
Species.ARCEUS, Species.ARCEUS,
Species.SCRAGGY, Species.SCRAGGY,
Species.SCRAFTY,
Species.TRUBBISH, Species.TRUBBISH,
Species.GARBODOR, Species.GARBODOR,
Species.KARRABLAST, Species.KARRABLAST,
Species.ESCAVALIER, Species.ESCAVALIER,
Species.FERROSEED, Species.FERROSEED,
Species.FERROTHORN,
Species.EELEKTRIK, Species.EELEKTRIK,
Species.EELEKTROSS, Species.EELEKTROSS,
Species.ACCELGOR, Species.ACCELGOR,
@ -55667,6 +55686,7 @@ export const tmSpecies: TmSpecies = {
Species.FLAPPLE, Species.FLAPPLE,
Species.TOXTRICITY, Species.TOXTRICITY,
Species.SNEASLER, Species.SNEASLER,
Species.OVERQWIL,
Species.ARMAROUGE, Species.ARMAROUGE,
Species.TADBULB, Species.TADBULB,
Species.BELLIBOLT, Species.BELLIBOLT,
@ -60261,6 +60281,7 @@ export const tmSpecies: TmSpecies = {
Species.CHIMECHO, Species.CHIMECHO,
Species.GOREBYSS, Species.GOREBYSS,
Species.LUVDISC, Species.LUVDISC,
Species.LATIAS,
Species.CHERUBI, Species.CHERUBI,
Species.CHERRIM, Species.CHERRIM,
Species.MISMAGIUS, Species.MISMAGIUS,
@ -63878,6 +63899,8 @@ export const tmSpecies: TmSpecies = {
Species.ALAKAZAM, Species.ALAKAZAM,
Species.SLOWPOKE, Species.SLOWPOKE,
Species.SLOWBRO, Species.SLOWBRO,
Species.DROWZEE,
Species.HYPNO,
Species.EXEGGUTOR, Species.EXEGGUTOR,
Species.STARMIE, Species.STARMIE,
Species.MR_MIME, Species.MR_MIME,
@ -63888,12 +63911,18 @@ export const tmSpecies: TmSpecies = {
Species.XATU, Species.XATU,
Species.ESPEON, Species.ESPEON,
Species.SLOWKING, Species.SLOWKING,
Species.GIRAFARIG,
Species.CELEBI, Species.CELEBI,
Species.RALTS, Species.RALTS,
Species.KIRLIA, Species.KIRLIA,
Species.GARDEVOIR, Species.GARDEVOIR,
Species.MEDITITE,
Species.MEDICHAM,
Species.SPOINK,
Species.GRUMPIG,
Species.BALTOY, Species.BALTOY,
Species.CLAYDOL, Species.CLAYDOL,
Species.CHIMECHO,
Species.METANG, Species.METANG,
Species.METAGROSS, Species.METAGROSS,
Species.JIRACHI, Species.JIRACHI,
@ -63920,11 +63949,14 @@ export const tmSpecies: TmSpecies = {
Species.REUNICLUS, Species.REUNICLUS,
Species.ELGYEM, Species.ELGYEM,
Species.BEHEEYEM, Species.BEHEEYEM,
Species.DELPHOX,
Species.ESPURR, Species.ESPURR,
Species.MEOWSTIC, Species.MEOWSTIC,
Species.INKAY, Species.INKAY,
Species.MALAMAR, Species.MALAMAR,
Species.HOOPA,
Species.ORANGURU, Species.ORANGURU,
Species.BRUXISH,
Species.SOLGALEO, Species.SOLGALEO,
Species.LUNALA, Species.LUNALA,
Species.NECROZMA, Species.NECROZMA,
@ -63954,6 +63986,7 @@ export const tmSpecies: TmSpecies = {
Species.GALAR_MR_MIME, Species.GALAR_MR_MIME,
Species.GALAR_ARTICUNO, Species.GALAR_ARTICUNO,
Species.GALAR_SLOWKING, Species.GALAR_SLOWKING,
Species.HISUI_BRAVIARY,
], ],
[Moves.STEEL_ROLLER]: [ [Moves.STEEL_ROLLER]: [
Species.SANDSHREW, Species.SANDSHREW,

View File

@ -1577,11 +1577,11 @@ export const trainerConfigs: TrainerConfigs = {
})), })),
[TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL) [TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL)
.setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE, () => modifierTypes.SHINY_CHARM, () => modifierTypes.ABILITY_CHARM) .setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY], TrainerSlot.TRAINER, true))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEY, Species.HOOTHOOT, Species.TAILLOW, Species.STARLY, Species.PIDOVE, Species.FLETCHLING, Species.PIKIPEK, Species.ROOKIDEE, Species.WATTREL], TrainerSlot.TRAINER, true)), .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEY, Species.HOOTHOOT, Species.TAILLOW, Species.STARLY, Species.PIDOVE, Species.FLETCHLING, Species.PIKIPEK, Species.ROOKIDEE, Species.WATTREL], TrainerSlot.TRAINER, true)),
[TrainerType.RIVAL_2]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_2) [TrainerType.RIVAL_2]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_2)
.setModifierRewardFuncs(() => modifierTypes.EXP_SHARE, () => modifierTypes.SHINY_CHARM) .setModifierRewardFuncs(() => modifierTypes.EXP_SHARE)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.IVYSAUR, Species.CHARMELEON, Species.WARTORTLE, Species.BAYLEEF, Species.QUILAVA, Species.CROCONAW, Species.GROVYLE, Species.COMBUSKEN, Species.MARSHTOMP, Species.GROTLE, Species.MONFERNO, Species.PRINPLUP, Species.SERVINE, Species.PIGNITE, Species.DEWOTT, Species.QUILLADIN, Species.BRAIXEN, Species.FROGADIER, Species.DARTRIX, Species.TORRACAT, Species.BRIONNE, Species.THWACKEY, Species.RABOOT, Species.DRIZZILE, Species.FLORAGATO, Species.CROCALOR, Species.QUAXWELL], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.IVYSAUR, Species.CHARMELEON, Species.WARTORTLE, Species.BAYLEEF, Species.QUILAVA, Species.CROCONAW, Species.GROVYLE, Species.COMBUSKEN, Species.MARSHTOMP, Species.GROTLE, Species.MONFERNO, Species.PRINPLUP, Species.SERVINE, Species.PIGNITE, Species.DEWOTT, Species.QUILLADIN, Species.BRAIXEN, Species.FROGADIER, Species.DARTRIX, Species.TORRACAT, Species.BRIONNE, Species.THWACKEY, Species.RABOOT, Species.DRIZZILE, Species.FLORAGATO, Species.CROCALOR, Species.QUAXWELL], TrainerSlot.TRAINER, true))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOTTO, Species.HOOTHOOT, Species.TAILLOW, Species.STARAVIA, Species.TRANQUILL, Species.FLETCHINDER, Species.TRUMBEAK, Species.CORVISQUIRE, Species.WATTREL], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOTTO, Species.HOOTHOOT, Species.TAILLOW, Species.STARAVIA, Species.TRANQUILL, Species.FLETCHINDER, Species.TRUMBEAK, Species.CORVISQUIRE, Species.WATTREL], TrainerSlot.TRAINER, true))
.setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)), .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)),

View File

@ -6,5 +6,6 @@ export enum GameDataType {
SESSION, SESSION,
SETTINGS, SETTINGS,
TUTORIALS, TUTORIALS,
SEEN_DIALOGUES SEEN_DIALOGUES,
RUN_HISTORY
} }

View File

@ -0,0 +1,13 @@
/**
* Determines the cursor target when entering the shop phase.
*/
export enum ShopCursorTarget {
/** Cursor points to Reroll */
REROLL,
/** Cursor points to Items */
ITEMS,
/** Cursor points to Shop */
SHOP,
/** Cursor points to Check Team */
CHECK_TEAM
}

View File

@ -20,7 +20,10 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species"; import { Species } from "#enums/species";
import { TimeOfDay } from "#enums/time-of-day"; import { TimeOfDay } from "#enums/time-of-day";
import { TrainerType } from "#enums/trainer-type"; import { TrainerType } from "#enums/trainer-type";
import { CommonAnimPhase } from "#app/phases/common-anim-phase.js"; import { Abilities } from "#app/enums/abilities";
import { SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger } from "#app/data/pokemon-forms";
import { CommonAnimPhase } from "#app/phases/common-anim-phase";
import { ShowAbilityPhase } from "#app/phases/show-ability-phase";
export class Arena { export class Arena {
public scene: BattleScene; public scene: BattleScene;
@ -331,6 +334,30 @@ export class Arena {
return true; return true;
} }
/**
* Function to trigger all weather based form changes
*/
triggerWeatherBasedFormChanges(): void {
this.scene.getField(true).forEach( p => {
if (p.hasAbility(Abilities.FORECAST) && p.species.speciesId === Species.CASTFORM) {
new ShowAbilityPhase(this.scene, p.getBattlerIndex());
this.scene.triggerPokemonFormChange(p, SpeciesFormChangeWeatherTrigger);
}
});
}
/**
* Function to trigger all weather based form changes back into their normal forms
*/
triggerWeatherBasedFormChangesToNormal(): void {
this.scene.getField(true).forEach( p => {
if (p.hasAbility(Abilities.FORECAST, false, true) && p.species.speciesId === Species.CASTFORM) {
new ShowAbilityPhase(this.scene, p.getBattlerIndex());
return this.scene.triggerPokemonFormChange(p, SpeciesFormChangeRevertWeatherFormTrigger);
}
});
}
trySetTerrain(terrain: TerrainType, hasPokemonSource: boolean, ignoreAnim: boolean = false): boolean { trySetTerrain(terrain: TerrainType, hasPokemonSource: boolean, ignoreAnim: boolean = false): boolean {
if (this.terrain?.terrainType === (terrain || undefined)) { if (this.terrain?.terrainType === (terrain || undefined)) {
return false; return false;

View File

@ -135,6 +135,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
const hasHiddenAbility = !Utils.randSeedInt(hiddenAbilityChance.value); const hasHiddenAbility = !Utils.randSeedInt(hiddenAbilityChance.value);
const randAbilityIndex = Utils.randSeedInt(2); const randAbilityIndex = Utils.randSeedInt(2);
this.battleData = new PokemonBattleData();
this.species = species; this.species = species;
this.pokeball = dataSource?.pokeball || PokeballType.POKEBALL; this.pokeball = dataSource?.pokeball || PokeballType.POKEBALL;
@ -1330,7 +1331,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
* effects which can affect whether an ability will be present or in effect, and both passive and * effects which can affect whether an ability will be present or in effect, and both passive and
* non-passive. This is the primary way to check whether a pokemon has a particular ability. * non-passive. This is the primary way to check whether a pokemon has a particular ability.
* @param {Abilities} ability The ability to check for * @param {Abilities} ability The ability to check for
* @param {boolean} canApply If false, it doesn't check whether the abiltiy is currently active * @param {boolean} canApply If false, it doesn't check whether the ability is currently active
* @param {boolean} ignoreOverride If true, it ignores ability changing effects * @param {boolean} ignoreOverride If true, it ignores ability changing effects
* @returns {boolean} Whether the ability is present and active * @returns {boolean} Whether the ability is present and active
*/ */
@ -2421,7 +2422,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
this.scene.queueMessage(i18next.t("battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(this) })); this.scene.queueMessage(i18next.t("battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(this) }));
break; break;
case HitResult.IMMUNE: case HitResult.IMMUNE:
this.scene.queueMessage(`${this.name} is unaffected!`); this.scene.queueMessage(i18next.t("battle:hitResultImmune", { pokemonName: this.name }));
break; break;
case HitResult.ONE_HIT_KO: case HitResult.ONE_HIT_KO:
this.scene.queueMessage(i18next.t("battle:hitResultOneHitKO")); this.scene.queueMessage(i18next.t("battle:hitResultOneHitKO"));
@ -3649,7 +3650,7 @@ export class PlayerPokemon extends Pokemon {
pokemon.resetTurnData(); pokemon.resetTurnData();
pokemon.resetStatus(); pokemon.resetStatus();
pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp()));
this.scene.queueMessage(`${pokemon.name} was revived!`,0,true); this.scene.queueMessage(i18next.t("moveTriggers:revivalBlessing", {pokemonName: pokemon.name}), 0, true);
if (this.scene.currentBattle.double && this.scene.getParty().length > 1) { if (this.scene.currentBattle.double && this.scene.getParty().length > 1) {
const allyPokemon = this.getAlly(); const allyPokemon = this.getAlly();

View File

@ -51,21 +51,6 @@ export interface InterfaceConfig {
const repeatInputDelayMillis = 250; const repeatInputDelayMillis = 250;
// Phaser.Input.Gamepad.GamepadPlugin#refreshPads
declare module "phaser" {
namespace Input {
namespace Gamepad {
interface GamepadPlugin {
/**
* Refreshes the list of connected Gamepads.
* This is called automatically when a gamepad is connected or disconnected, and during the update loop.
*/
refreshPads(): void;
}
}
}
}
/** /**
* Manages and handles all input controls for the game, including keyboard and gamepad interactions. * Manages and handles all input controls for the game, including keyboard and gamepad interactions.
* *

View File

@ -0,0 +1 @@
{}

View File

@ -1,64 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const abilityTriggers: SimpleTranslationEntries = {
"blockRecoilDamage": "{{pokemonName}}'s {{abilityName}}\nprotected it from recoil!",
"badDreams": "{{pokemonName}} is tormented!",
"costar": "{{pokemonName}} copied {{allyName}}'s stat changes!",
"iceFaceAvoidedDamage": "{{pokemonName}} avoided\ndamage with {{abilityName}}!",
"perishBody": "{{pokemonName}}'s {{abilityName}}\nwill faint both pokemon in 3 turns!",
"poisonHeal": "{{pokemonName}}'s {{abilityName}}\nrestored its HP a little!",
"trace": "{{pokemonName}} copied {{targetName}}'s\n{{abilityName}}!",
"windPowerCharged": "Being hit by {{moveName}} charged {{pokemonName}} with power!",
"quickDraw": "{{pokemonName}} can act faster than normal, thanks to its Quick Draw!",
"disguiseAvoidedDamage" : "{{pokemonNameWithAffix}}'s disguise was busted!",
"blockItemTheft": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents item theft!",
"typeImmunityHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!",
"nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}} avoided damage\nwith {{abilityName}}!",
"postDefendDisguise": "{{pokemonNameWithAffix}}'s disguise was busted!",
"moveImmunity": "It doesn't affect {{pokemonNameWithAffix}}!",
"reverseDrain": "{{pokemonNameWithAffix}} sucked up the liquid ooze!",
"postDefendTypeChange": "{{pokemonNameWithAffix}}'s {{abilityName}}\nmade it the {{typeName}} type!",
"postDefendContactDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!",
"postDefendAbilitySwap": "{{pokemonNameWithAffix}} swapped\nabilities with its target!",
"postDefendAbilityGive": "{{pokemonNameWithAffix}} gave its target\n{{abilityName}}!",
"postDefendMoveDisable": "{{pokemonNameWithAffix}}'s {{moveName}}\nwas disabled!",
"pokemonTypeChange": "{{pokemonNameWithAffix}} transformed into the {{moveType}} type!",
"postAttackStealHeldItem": "{{pokemonNameWithAffix}} stole\n{{defenderName}}'s {{stolenItemType}}!",
"postDefendStealHeldItem": "{{pokemonNameWithAffix}} stole\n{{attackerName}}'s {{stolenItemType}}!",
"copyFaintedAllyAbility": "{{pokemonNameWithAffix}}'s {{abilityName}} was taken over!",
"intimidateImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}} prevented it from being Intimidated!",
"postSummonAllyHeal": "{{pokemonNameWithAffix}} drank down all the\nmatcha that {{pokemonName}} made!",
"postSummonClearAllyStats": "{{pokemonNameWithAffix}}'s stat changes\nwere removed!",
"postSummonTransform": "{{pokemonNameWithAffix}} transformed\ninto {{targetName}}!",
"protectStat": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents lowering its {{statName}}!",
"statusEffectImmunityWithName": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents {{statusEffectName}}!",
"statusEffectImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents status problems!",
"battlerTagImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents {{battlerTagName}}!",
"forewarn": "{{pokemonNameWithAffix}} was forewarned about {{moveName}}!",
"frisk": "{{pokemonNameWithAffix}} frisked {{opponentName}}'s {{opponentAbilityName}}!",
"postWeatherLapseHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!",
"postWeatherLapseDamage": "{{pokemonNameWithAffix}} is hurt\nby its {{abilityName}}!",
"postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}} harvested one {{berryName}}!",
"postTurnHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!",
"fetchBall": "{{pokemonNameWithAffix}} found a\n{{pokeballName}}!",
"healFromBerryUse": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP!",
"arenaTrap": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents switching!",
"postBattleLoot": "{{pokemonNameWithAffix}} picked up\n{{itemName}}!",
"postFaintContactDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!",
"postFaintHpDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!",
"postSummonPressure": "{{pokemonNameWithAffix}} is exerting its Pressure!",
"postSummonMoldBreaker": "{{pokemonNameWithAffix}} breaks the mold!",
"postSummonAnticipation": "{{pokemonNameWithAffix}} shuddered!",
"postSummonTurboblaze": "{{pokemonNameWithAffix}} is radiating a blazing aura!",
"postSummonTeravolt": "{{pokemonNameWithAffix}} is radiating a bursting aura!",
"postSummonDarkAura": "{{pokemonNameWithAffix}} is radiating a Dark Aura!",
"postSummonFairyAura": "{{pokemonNameWithAffix}} is radiating a Fairy Aura!",
"postSummonNeutralizingGas": "{{pokemonNameWithAffix}}'s Neutralizing Gas filled the area!",
"postSummonAsOneGlastrier": "{{pokemonNameWithAffix}} has two Abilities!",
"postSummonAsOneSpectrier": "{{pokemonNameWithAffix}} has two Abilities!",
"postSummonVesselOfRuin": "{{pokemonNameWithAffix}}'s Vessel of Ruin lowered the {{statName}}\nof all surrounding Pokémon!",
"postSummonSwordOfRuin": "{{pokemonNameWithAffix}}'s Sword of Ruin lowered the {{statName}}\nof all surrounding Pokémon!",
"postSummonTabletsOfRuin": "{{pokemonNameWithAffix}}'s Tablets of Ruin lowered the {{statName}}\nof all surrounding Pokémon!",
"postSummonBeadsOfRuin": "{{pokemonNameWithAffix}}'s Beads of Ruin lowered the {{statName}}\nof all surrounding Pokémon!",
"preventBerryUse": "{{pokemonNameWithAffix}} is too\nnervous to eat berries!",
} as const;

View File

@ -0,0 +1 @@
{}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -1,278 +0,0 @@
import { AchievementTranslationEntries } from "#app/interfaces/locales.js";
// Achievement translations for the when the player character is male
export const PGMachv: AchievementTranslationEntries = {
"Achievements": {
name: "Achievements",
},
"Locked": {
name: "Locked",
},
"MoneyAchv": {
description: "Accumulate a total of ₽{{moneyAmount}}",
},
"10K_MONEY": {
name: "Money Haver",
},
"100K_MONEY": {
name: "Rich",
},
"1M_MONEY": {
name: "Millionaire",
},
"10M_MONEY": {
name: "One Percenter",
},
"DamageAchv": {
description: "Inflict {{damageAmount}} damage in one hit",
},
"250_DMG": {
name: "Hard Hitter",
},
"1000_DMG": {
name: "Harder Hitter",
},
"2500_DMG": {
name: "That's a Lotta Damage!",
},
"10000_DMG": {
name: "One Punch Man",
},
"HealAchv": {
description: "Heal {{healAmount}} {{HP}} at once with a move, ability, or held item",
},
"250_HEAL": {
name: "Novice Healer",
},
"1000_HEAL": {
name: "Big Healer",
},
"2500_HEAL": {
name: "Cleric",
},
"10000_HEAL": {
name: "Recovery Master",
},
"LevelAchv": {
description: "Level up a Pokémon to Lv{{level}}",
},
"LV_100": {
name: "But Wait, There's More!",
},
"LV_250": {
name: "Elite",
},
"LV_1000": {
name: "To Go Even Further Beyond",
},
"RibbonAchv": {
description: "Accumulate a total of {{ribbonAmount}} Ribbons",
},
"10_RIBBONS": {
name: "Pokémon League Champion",
},
"25_RIBBONS": {
name: "Great League Champion",
},
"50_RIBBONS": {
name: "Ultra League Champion",
},
"75_RIBBONS": {
name: "Rogue League Champion",
},
"100_RIBBONS": {
name: "Master League Champion",
},
"TRANSFER_MAX_BATTLE_STAT": {
name: "Teamwork",
description: "Baton pass to another party member with at least one stat maxed out",
},
"MAX_FRIENDSHIP": {
name: "Friendmaxxing",
description: "Reach max friendship on a Pokémon",
},
"MEGA_EVOLVE": {
name: "Megamorph",
description: "Mega evolve a Pokémon",
},
"GIGANTAMAX": {
name: "Absolute Unit",
description: "Gigantamax a Pokémon",
},
"TERASTALLIZE": {
name: "STAB Enthusiast",
description: "Terastallize a Pokémon",
},
"STELLAR_TERASTALLIZE": {
name: "The Hidden Type",
description: "Stellar Terastallize a Pokémon",
},
"SPLICE": {
name: "Infinite Fusion",
description: "Splice two Pokémon together with DNA Splicers",
},
"MINI_BLACK_HOLE": {
name: "A Hole Lot of Items",
description: "Acquire a Mini Black Hole",
},
"CATCH_MYTHICAL": {
name: "Mythical",
description: "Catch a mythical Pokémon",
},
"CATCH_SUB_LEGENDARY": {
name: "(Sub-)Legendary",
description: "Catch a sub-legendary Pokémon",
},
"CATCH_LEGENDARY": {
name: "Legendary",
description: "Catch a legendary Pokémon",
},
"SEE_SHINY": {
name: "Shiny",
description: "Find a shiny Pokémon in the wild",
},
"SHINY_PARTY": {
name: "That's Dedication",
description: "Have a full party of shiny Pokémon",
},
"HATCH_MYTHICAL": {
name: "Mythical Egg",
description: "Hatch a mythical Pokémon from an egg",
},
"HATCH_SUB_LEGENDARY": {
name: "Sub-Legendary Egg",
description: "Hatch a sub-legendary Pokémon from an egg",
},
"HATCH_LEGENDARY": {
name: "Legendary Egg",
description: "Hatch a legendary Pokémon from an egg",
},
"HATCH_SHINY": {
name: "Shiny Egg",
description: "Hatch a shiny Pokémon from an egg",
},
"HIDDEN_ABILITY": {
name: "Hidden Potential",
description: "Catch a Pokémon with a hidden ability",
},
"PERFECT_IVS": {
name: "Certificate of Authenticity",
description: "Get perfect IVs on a Pokémon",
},
"CLASSIC_VICTORY": {
name: "Undefeated",
description: "Beat the game in classic mode",
},
"UNEVOLVED_CLASSIC_VICTORY": {
name: "Bring Your Child To Work Day",
description: "Beat the game in Classic Mode with at least one unevolved party member."
},
"MONO_GEN_ONE": {
name: "The Original Rival",
description: "Complete the generation one only challenge.",
},
"MONO_GEN_TWO": {
name: "Generation 1.5",
description: "Complete the generation two only challenge.",
},
"MONO_GEN_THREE": {
name: "Too much water?",
description: "Complete the generation three only challenge.",
},
"MONO_GEN_FOUR": {
name: "Is she really the hardest?",
description: "Complete the generation four only challenge.",
},
"MONO_GEN_FIVE": {
name: "All Original",
description: "Complete the generation five only challenge.",
},
"MONO_GEN_SIX": {
name: "Almost Royalty",
description: "Complete the generation six only challenge.",
},
"MONO_GEN_SEVEN": {
name: "Only Technically",
description: "Complete the generation seven only challenge.",
},
"MONO_GEN_EIGHT": {
name: "A Champion Time!",
description: "Complete the generation eight only challenge.",
},
"MONO_GEN_NINE": {
name: "She was going easy on you",
description: "Complete the generation nine only challenge.",
},
"MonoType": {
description: "Complete the {{type}} monotype challenge.",
},
"MONO_NORMAL": {
name: "Extra Ordinary",
},
"MONO_FIGHTING": {
name: "I Know Kung Fu",
},
"MONO_FLYING": {
name: "Angry Birds",
},
"MONO_POISON": {
name: "Kanto's Favourite",
},
"MONO_GROUND": {
name: "Forecast: Earthquakes",
},
"MONO_ROCK": {
name: "Brock Hard",
},
"MONO_BUG": {
name: "You Like Jazz?",
},
"MONO_GHOST": {
name: "Who You Gonna Call?",
},
"MONO_STEEL": {
name: "Iron Giant",
},
"MONO_FIRE": {
name: "I Cast Fireball!",
},
"MONO_WATER": {
name: "When It Rains, It Pours",
},
"MONO_GRASS": {
name: "Can't Touch This",
},
"MONO_ELECTRIC": {
name: "Aim For The Horn!",
},
"MONO_PSYCHIC": {
name: "Big Brain Energy",
},
"MONO_ICE": {
name: "Walking On Thin Ice",
},
"MONO_DRAGON": {
name: "Pseudo-Legend Club",
},
"MONO_DARK": {
name: "It's Just A Phase",
},
"MONO_FAIRY": {
name: "Hey! Listen!",
},
"FRESH_START": {
name: "First Try!",
description: "Complete the Fresh Start challenge."
}
} as const;
// Achievement translations for the when the player character is female (it for now uses the same translations as the male version)
export const PGFachv: AchievementTranslationEntries = PGMachv;

View File

@ -0,0 +1 @@
{}

View File

@ -1,49 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const arenaFlyout: SimpleTranslationEntries = {
// Title
"activeBattleEffects": "Active Battle Effects",
"player": "Player",
"neutral": "Neutral",
"enemy": "Enemy",
// WeatherType
"sunny": "Sunny",
"rain": "Rain",
"sandstorm": "Sandstorm",
"hail": "Hail",
"snow": "Snow",
"fog": "Fog",
"heavyRain": "Heavy Rain",
"harshSun": "Harsh Sun",
"strongWinds": "Strong Winds",
// TerrainType
"misty": "Misty Terrain",
"electric": "Electric Terrain",
"grassy": "Grassy Terrain",
"psychic": "Psychic Terrain",
// ArenaTagType
"mudSport": "Mud Sport",
"waterSport": "Water Sport",
"spikes": "Spikes",
"toxicSpikes": "Toxic Spikes",
"mist": "Mist",
"futureSight": "Future Sight",
"doomDesire": "Doom Desire",
"wish": "Wish",
"stealthRock": "Stealth Rock",
"stickyWeb": "Sticky Web",
"trickRoom": "Trick Room",
"gravity": "Gravity",
"reflect": "Reflect",
"lightScreen": "Light Screen",
"auroraVeil": "Aurora Veil",
"quickGuard": "Quick Guard",
"wideGuard": "Wide Guard",
"matBlock": "Mat Block",
"craftyShield": "Crafty Shield",
"tailwind": "Tailwind",
"happyHour": "Happy Hour",
};

View File

@ -0,0 +1 @@
{}

View File

@ -1,53 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const arenaTag: SimpleTranslationEntries = {
"yourTeam": "your team",
"opposingTeam": "the opposing team",
"arenaOnRemove": "{{moveName}}'s effect wore off.",
"arenaOnRemovePlayer": "{{moveName}}'s effect wore off\non your side.",
"arenaOnRemoveEnemy": "{{moveName}}'s effect wore off\non the foe's side.",
"mistOnAdd": "{{pokemonNameWithAffix}}'s team became\nshrouded in mist!",
"mistApply": "The mist prevented\nthe lowering of stats!",
"reflectOnAdd": "Reflect reduced the damage of physical moves.",
"reflectOnAddPlayer": "Reflect reduced the damage of physical moves on your side.",
"reflectOnAddEnemy": "Reflect reduced the damage of physical moves on the foe's side.",
"lightScreenOnAdd": "Light Screen reduced the damage of special moves.",
"lightScreenOnAddPlayer": "Light Screen reduced the damage of special moves on your side.",
"lightScreenOnAddEnemy": "Light Screen reduced the damage of special moves on the foe's side.",
"auroraVeilOnAdd": "Aurora Veil reduced the damage of moves.",
"auroraVeilOnAddPlayer": "Aurora Veil reduced the damage of moves on your side.",
"auroraVeilOnAddEnemy": "Aurora Veil reduced the damage of moves on the foe's side.",
"conditionalProtectOnAdd": "{{moveName}} protected team!",
"conditionalProtectOnAddPlayer": "{{moveName}} protected your team!",
"conditionalProtectOnAddEnemy": "{{moveName}} protected the\nopposing team!",
"conditionalProtectApply": "{{moveName}} protected {{pokemonNameWithAffix}}!",
"matBlockOnAdd": "{{pokemonNameWithAffix}} intends to flip up a mat\nand block incoming attacks!",
"noCritOnAddPlayer": "The {{moveName}} shielded your\nteam from critical hits!",
"noCritOnAddEnemy": "The {{moveName}} shielded the opposing\nteam from critical hits!",
"noCritOnRemove": "{{pokemonNameWithAffix}}'s {{moveName}}\nwore off!",
"wishTagOnAdd": "{{pokemonNameWithAffix}}'s wish\ncame true!",
"mudSportOnAdd": "Electricity's power was weakened!",
"mudSportOnRemove": "The effects of Mud Sport\nhave faded.",
"waterSportOnAdd": "Fire's power was weakened!",
"waterSportOnRemove": "The effects of Water Sport\nhave faded.",
"spikesOnAdd": "{{moveName}} were scattered\nall around {{opponentDesc}}'s feet!",
"spikesActivateTrap": "{{pokemonNameWithAffix}} is hurt\nby the spikes!",
"toxicSpikesOnAdd": "{{moveName}} were scattered\nall around {{opponentDesc}}'s feet!",
"toxicSpikesActivateTrapPoison": "{{pokemonNameWithAffix}} absorbed the {{moveName}}!",
"stealthRockOnAdd": "Pointed stones float in the air\naround {{opponentDesc}}!",
"stealthRockActivateTrap": "Pointed stones dug into\n{{pokemonNameWithAffix}}!",
"stickyWebOnAdd": "A {{moveName}} has been laid out on the ground around the opposing team!",
"stickyWebActivateTrap": "The opposing {{pokemonName}} was caught in a sticky web!",
"trickRoomOnAdd": "{{pokemonNameWithAffix}} twisted\nthe dimensions!",
"trickRoomOnRemove": "The twisted dimensions\nreturned to normal!",
"gravityOnAdd": "Gravity intensified!",
"gravityOnRemove": "Gravity returned to normal!",
"tailwindOnAdd": "The Tailwind blew from behind team!",
"tailwindOnAddPlayer": "The Tailwind blew from behind\nyour team!",
"tailwindOnAddEnemy": "The Tailwind blew from behind\nthe opposing team!",
"tailwindOnRemove": "Team's Tailwind petered out!",
"tailwindOnRemovePlayer": "Your team's Tailwind petered out!",
"tailwindOnRemoveEnemy": "The opposing team's Tailwind petered out!",
"happyHourOnAdd": "Everyone is caught up in the happy atmosphere!",
"happyHourOnRemove": "The atmosphere returned to normal.",
} as const;

View File

@ -0,0 +1 @@
{}

View File

@ -1,5 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const battleInfo: SimpleTranslationEntries = {
"generation": "Generation {{generation}}",
} as const;

View File

@ -0,0 +1 @@
{}

View File

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

View File

@ -0,0 +1 @@
{}

View File

@ -1,5 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const battleScene: SimpleTranslationEntries = {
"moneyOwned": "₽{{formattedMoney}}"
} as const;

View File

@ -0,0 +1 @@
{}

View File

@ -1,99 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const battle: SimpleTranslationEntries = {
"bossAppeared": "{{bossName}} appeared.",
"trainerAppeared": "{{trainerName}}\nwould like to battle!",
"trainerAppearedDouble": "{{trainerName}}\nwould like to battle!",
"trainerSendOut": "{{trainerName}} sent out\n{{pokemonName}}!",
"singleWildAppeared": "A wild {{pokemonName}} appeared!",
"multiWildAppeared": "A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!",
"playerComeBack": "Come back, {{pokemonName}}!",
"trainerComeBack": "{{trainerName}} withdrew {{pokemonName}}!",
"playerGo": "Go! {{pokemonName}}!",
"trainerGo": "{{trainerName}} sent out {{pokemonName}}!",
"switchQuestion": "Will you switch\n{{pokemonName}}?",
"trainerDefeated": "You defeated\n{{trainerName}}!",
"moneyWon": "You got\n₽{{moneyAmount}} for winning!",
"moneyPickedUp": "You picked up ₽{{moneyAmount}}!",
"pokemonCaught": "{{pokemonName}} was caught!",
"addedAsAStarter": "{{pokemonName}} has been\nadded as a starter!",
"partyFull": "Your party is full.\nRelease a Pokémon to make room for {{pokemonName}}?",
"pokemon": "Pokémon",
"sendOutPokemon": "Go! {{pokemonName}}!",
"hitResultCriticalHit": "A critical hit!",
"hitResultSuperEffective": "It's super effective!",
"hitResultNotVeryEffective": "It's not very effective…",
"hitResultNoEffect": "It doesn't affect {{pokemonName}}!",
"hitResultOneHitKO": "It's a one-hit KO!",
"attackFailed": "But it failed!",
"attackMissed": "{{pokemonNameWithAffix}} avoided the attack!",
"attackHitsCount": "Hit {{count}} time(s)!",
"rewardGain": "You received\n{{modifierName}}!",
"expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!",
"levelUp": "{{pokemonName}} grew to\nLv. {{level}}!",
"learnMove": "{{pokemonName}} learned\n{{moveName}}!",
"learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.",
"learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.",
"learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?",
"learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?",
"learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.",
"learnMoveForgetQuestion": "Which move should be forgotten?",
"learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.",
"countdownPoof": "@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Poof!",
"learnMoveAnd": "And…",
"levelCapUp": "The level cap\nhas increased to {{levelCap}}!",
"moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.",
"moveNoPP": "There's no PP left for\nthis move!",
"moveDisabled": "{{moveName}} is disabled!",
"noPokeballForce": "An unseen force\nprevents using Poké Balls.",
"noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!",
"noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!",
"noPokeballStrong": "The target Pokémon is too strong to be caught!\nYou need to weaken it first!",
"noEscapeForce": "An unseen force\nprevents escape.",
"noEscapeTrainer": "You can't run\nfrom a trainer battle!",
"noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nprevents {{escapeVerb}}!",
"runAwaySuccess": "You got away safely!",
"runAwayCannotEscape": "You can't escape!",
"escapeVerbSwitch": "switching",
"escapeVerbFlee": "fleeing",
"notDisabled": "{{pokemonName}}'s {{moveName}} is disabled\nno more!",
"turnEndHpRestore": "{{pokemonName}}'s HP was restored.",
"hpIsFull": "{{pokemonName}}'s\nHP is full!",
"skipItemQuestion": "Are you sure you want to skip taking an item?",
"itemStackFull": "The stack for {{fullItemName}} is full.\nYou will receive {{itemName}} instead.",
"eggHatching": "Oh?",
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?",
"wildPokemonWithAffix": "Wild {{pokemonName}}",
"foePokemonWithAffix": "Foe {{pokemonName}}",
"useMove": "{{pokemonNameWithAffix}} used {{moveName}}!",
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
"regainHealth": "{{pokemonName}} regained\nhealth!",
"stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!",
"ppHealBerry": "{{pokemonNameWithAffix}} restored PP to its move {{moveName}}\nusing its {{berryName}}!",
"hpHealBerry": "{{pokemonNameWithAffix}} restored its health using\nits {{berryName}}!",
"fainted": "{{pokemonNameWithAffix}} fainted!",
"statsAnd": "and",
"stats": "Stats",
"statRose_one": "{{pokemonNameWithAffix}}'s {{stats}} rose!",
"statRose_other": "{{pokemonNameWithAffix}}'s {{stats}} rose!",
"statSharplyRose_one": "{{pokemonNameWithAffix}}'s {{stats}} sharply rose!",
"statSharplyRose_other": "{{pokemonNameWithAffix}}'s {{stats}} sharply rose!",
"statRoseDrastically_one": "{{pokemonNameWithAffix}}'s {{stats}} rose drastically!",
"statRoseDrastically_other": "{{pokemonNameWithAffix}}'s {{stats}} rose drastically!",
"statWontGoAnyHigher_one": "{{pokemonNameWithAffix}}'s {{stats}} won't go any higher!",
"statWontGoAnyHigher_other": "{{pokemonNameWithAffix}}'s {{stats}} won't go any higher!",
"statFell_one": "{{pokemonNameWithAffix}}'s {{stats}} fell!",
"statFell_other": "{{pokemonNameWithAffix}}'s {{stats}} fell!",
"statHarshlyFell_one": "{{pokemonNameWithAffix}}'s {{stats}} harshly fell!",
"statHarshlyFell_other": "{{pokemonNameWithAffix}}'s {{stats}} harshly fell!",
"statSeverelyFell_one": "{{pokemonNameWithAffix}}'s {{stats}} severely fell!",
"statSeverelyFell_other": "{{pokemonNameWithAffix}}'s {{stats}} severely fell!",
"statWontGoAnyLower_one": "{{pokemonNameWithAffix}}'s {{stats}} won't go any lower!",
"statWontGoAnyLower_other": "{{pokemonNameWithAffix}}'s {{stats}} won't go any lower!",
"transformedIntoType": "{{pokemonName}} transformed\ninto the {{type}} type!",
"retryBattle": "Would you like to retry from the start of the battle?",
"unlockedSomething": "{{unlockedThing}}\nhas been unlocked.",
"congratulations": "Congratulations!",
"beatModeFirstTime": "{{speciesName}} beat {{gameMode}} Mode for the first time!\nYou received {{newModifier}}!",
"ppReduced": "It reduced the PP of {{targetName}}'s\n{{moveName}} by {{reduction}}!",
} as const;

View File

@ -0,0 +1 @@
{}

View File

@ -1,73 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const battlerTags: SimpleTranslationEntries = {
"trappedDesc": "trapping",
"flinchedDesc": "flinching",
"confusedDesc": "confusion",
"infatuatedDesc": "infatuation",
"seedDesc": "seeding",
"nightmareDesc": "nightmares",
"ingrainDesc": "roots",
"drowsyDesc": "drowsiness",
"rechargingLapse": "{{pokemonNameWithAffix}} must\nrecharge!",
"trappedOnAdd": "{{pokemonNameWithAffix}} can no\nlonger escape!",
"trappedOnRemove": "{{pokemonNameWithAffix}} was freed\nfrom {{moveName}}!",
"flinchedLapse": "{{pokemonNameWithAffix}} flinched!",
"confusedOnAdd": "{{pokemonNameWithAffix}} became\nconfused!",
"confusedOnRemove": "{{pokemonNameWithAffix}} snapped\nout of confusion!",
"confusedOnOverlap": "{{pokemonNameWithAffix}} is\nalready confused!",
"confusedLapse": "{{pokemonNameWithAffix}} is\nconfused!",
"confusedLapseHurtItself": "It hurt itself in its\nconfusion!",
"destinyBondLapseIsBoss": "{{pokemonNameWithAffix}} is unaffected\nby the effects of Destiny Bond.",
"destinyBondLapse": "{{pokemonNameWithAffix}} took\n{{pokemonNameWithAffix2}} down with it!",
"infatuatedOnAdd": "{{pokemonNameWithAffix}} fell in love\nwith {{sourcePokemonName}}!",
"infatuatedOnOverlap": "{{pokemonNameWithAffix}} is\nalready in love!",
"infatuatedLapse": "{{pokemonNameWithAffix}} is in love\nwith {{sourcePokemonName}}!",
"infatuatedLapseImmobilize": "{{pokemonNameWithAffix}} is\nimmobilized by love!",
"infatuatedOnRemove": "{{pokemonNameWithAffix}} got over\nits infatuation.",
"seededOnAdd": "{{pokemonNameWithAffix}} was seeded!",
"seededLapse": "{{pokemonNameWithAffix}}'s health is\nsapped by Leech Seed!",
"seededLapseShed": "{{pokemonNameWithAffix}}'s Leech Seed\nsucked up the liquid ooze!",
"nightmareOnAdd": "{{pokemonNameWithAffix}} began\nhaving a Nightmare!",
"nightmareOnOverlap": "{{pokemonNameWithAffix}} is\nalready locked in a Nightmare!",
"nightmareLapse": "{{pokemonNameWithAffix}} is locked\nin a Nightmare!",
"encoreOnAdd": "{{pokemonNameWithAffix}} got\nan Encore!",
"encoreOnRemove": "{{pokemonNameWithAffix}}'s Encore\nended!",
"helpingHandOnAdd": "{{pokemonNameWithAffix}} is ready to\nhelp {{pokemonName}}!",
"ingrainLapse": "{{pokemonNameWithAffix}} absorbed\nnutrients with its roots!",
"ingrainOnTrap": "{{pokemonNameWithAffix}} planted its roots!",
"aquaRingOnAdd": "{{pokemonNameWithAffix}} surrounded\nitself with a veil of water!",
"aquaRingLapse": "{{moveName}} restored\n{{pokemonName}}'s HP!",
"drowsyOnAdd": "{{pokemonNameWithAffix}} grew drowsy!",
"damagingTrapLapse": "{{pokemonNameWithAffix}} is hurt\nby {{moveName}}!",
"bindOnTrap": "{{pokemonNameWithAffix}} was squeezed by\n{{sourcePokemonName}}'s {{moveName}}!",
"wrapOnTrap": "{{pokemonNameWithAffix}} was Wrapped\nby {{sourcePokemonName}}!",
"vortexOnTrap": "{{pokemonNameWithAffix}} was trapped\nin the vortex!",
"clampOnTrap": "{{sourcePokemonNameWithAffix}} Clamped\n{{pokemonName}}!",
"sandTombOnTrap": "{{pokemonNameWithAffix}} became trapped\nby {{moveName}}!",
"magmaStormOnTrap": "{{pokemonNameWithAffix}} became trapped\nby swirling magma!",
"snapTrapOnTrap": "{{pokemonNameWithAffix}} got trapped\nby a snap trap!",
"thunderCageOnTrap": "{{sourcePokemonNameWithAffix}} trapped\n{{pokemonNameWithAffix}}!",
"infestationOnTrap": "{{pokemonNameWithAffix}} has been afflicted \nwith an infestation by {{sourcePokemonNameWithAffix}}!",
"protectedOnAdd": "{{pokemonNameWithAffix}}\nprotected itself!",
"protectedLapse": "{{pokemonNameWithAffix}}\nprotected itself!",
"enduringOnAdd": "{{pokemonNameWithAffix}} braced\nitself!",
"enduringLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
"sturdyLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
"perishSongLapse": "{{pokemonNameWithAffix}}'s perish count fell to {{turnCount}}.",
"centerOfAttentionOnAdd": "{{pokemonNameWithAffix}} became the center\nof attention!",
"truantLapse": "{{pokemonNameWithAffix}} is\nloafing around!",
"slowStartOnAdd": "{{pokemonNameWithAffix}} can't\nget it going!",
"slowStartOnRemove": "{{pokemonNameWithAffix}} finally\ngot its act together!",
"highestStatBoostOnAdd": "{{pokemonNameWithAffix}}'s {{statName}}\nwas heightened!",
"highestStatBoostOnRemove": "The effects of {{pokemonNameWithAffix}}'s\n{{abilityName}} wore off!",
"magnetRisenOnAdd": "{{pokemonNameWithAffix}} levitated with electromagnetism!",
"magnetRisenOnRemove": "{{pokemonNameWithAffix}}'s electromagnetism wore off!",
"critBoostOnAdd": "{{pokemonNameWithAffix}} is getting\npumped!",
"critBoostOnRemove": "{{pokemonNameWithAffix}} relaxed.",
"saltCuredOnAdd": "{{pokemonNameWithAffix}} is being salt cured!",
"saltCuredLapse": "{{pokemonNameWithAffix}} is hurt by {{moveName}}!",
"cursedOnAdd": "{{pokemonNameWithAffix}} cut its own HP and put a curse on the {{pokemonName}}!",
"cursedLapse": "{{pokemonNameWithAffix}} is afflicted by the Curse!",
"stockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!",
} as const;

View File

@ -0,0 +1 @@
{}

View File

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

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -1,40 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const biome: SimpleTranslationEntries = {
"unknownLocation": "Somewhere you can\'t remember",
"TOWN": "Town",
"PLAINS": "Plains",
"GRASS": "Grassy Field",
"TALL_GRASS": "Tall Grass",
"METROPOLIS": "Metropolis",
"FOREST": "Forest",
"SEA": "Sea",
"SWAMP": "Swamp",
"BEACH": "Beach",
"LAKE": "Lake",
"SEABED": "Seabed",
"MOUNTAIN": "Mountain",
"BADLANDS": "Badlands",
"CAVE": "Cave",
"DESERT": "Desert",
"ICE_CAVE": "Ice Cave",
"MEADOW": "Meadow",
"POWER_PLANT": "Power Plant",
"VOLCANO": "Volcano",
"GRAVEYARD": "Graveyard",
"DOJO": "Dojo",
"FACTORY": "Factory",
"RUINS": "Ancient Ruins",
"WASTELAND": "Wasteland",
"ABYSS": "Abyss",
"SPACE": "Space",
"CONSTRUCTION_SITE": "Construction Site",
"JUNGLE": "Jungle",
"FAIRY_CAVE": "Fairy Cave",
"TEMPLE": "Temple",
"SLUM": "Slum",
"SNOWY_FOREST": "Snowy Forest",
"ISLAND": "Island",
"LABORATORY": "Laboratory",
"END": "???",
} as const;

View File

@ -0,0 +1 @@
{}

View File

@ -1,32 +0,0 @@
import { TranslationEntries } from "#app/interfaces/locales.js";
export const challenges: TranslationEntries = {
"title": "Challenge Modifiers",
"illegalEvolution": "{{pokemon}} changed into an ineligble pokémon\nfor this challenge!",
"singleGeneration": {
"name": "Mono Gen",
"desc": "You can only use Pokémon from Generation {{gen}}.",
"desc_default": "You can only use Pokémon from the chosen generation.",
"gen_1": "one",
"gen_2": "two",
"gen_3": "three",
"gen_4": "four",
"gen_5": "five",
"gen_6": "six",
"gen_7": "seven",
"gen_8": "eight",
"gen_9": "nine",
},
"singleType": {
"name": "Mono Type",
"desc": "You can only use Pokémon with the {{type}} type.",
"desc_default": "You can only use Pokémon of the chosen type."
//types in pokemon-info
},
"freshStart": {
"name": "Fresh Start",
"desc": "You can only use the original starters, and only as if you had just started PokéRogue.",
"value.0": "Off",
"value.1": "On",
}
} as const;

View File

@ -0,0 +1 @@
{}

View File

@ -1,9 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const commandUiHandler: SimpleTranslationEntries = {
"fight": "Fight",
"ball": "Ball",
"pokemon": "Pokémon",
"run": "Run",
"actionMessage": "What will\n{{pokemonName}} do?",
} as const;

View File

@ -0,0 +1 @@
{}

View File

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

View File

@ -1,118 +1,123 @@
import { common } from "./common.js"; import common from "./common.json";
import { settings } from "./settings.js"; import settings from "./settings.json";
import { ability } from "./ability"; import ability from "./ability.json";
import { abilityTriggers } from "./ability-trigger"; import abilityTriggers from "./ability-trigger.json";
import { arenaFlyout } from "./arena-flyout"; import arenaFlyout from "./arena-flyout.json";
import { arenaTag } from "./arena-tag"; import arenaTag from "./arena-tag.json";
import { PGFachv, PGMachv } from "./achv"; import achvMale from "./achv-male.json";
import { battle } from "./battle"; import achvFemale from "./achv-female.json";
import { battleScene } from "./battle-scene"; import battle from "./battle.json";
import { battleInfo } from "./battle-info"; import battleScene from "./battle-scene.json";
import { battleMessageUiHandler } from "./battle-message-ui-handler"; import battleInfo from "./battle-info.json";
import { battlerTags } from "./battler-tags"; import battleMessageUiHandler from "./battle-message-ui-handler.json";
import { berry } from "./berry"; import battlerTags from "./battler-tags.json";
import { bgmName } from "./bgm-name"; import berry from "./berry.json";
import { biome } from "./biome"; import bgmName from "./bgm-name.json";
import { challenges } from "./challenges"; import biome from "./biome.json";
import { commandUiHandler } from "./command-ui-handler"; import challenges from "./challenges.json";
import { import commandUiHandler from "./command-ui-handler.json";
PGFbattleSpecDialogue, import dialogueMale from "./dialogue-male.json";
PGFdialogue, import dialogueFemale from "./dialogue-female.json";
PGFdoubleBattleDialogue, import dialogueEndbossMale from "./dialogue-final-boss-male.json";
PGFmiscDialogue, import dialogueEndbossFemale from "./dialogue-final-boss-female.json";
PGMbattleSpecDialogue, import dialogueMiscMale from "./dialogue-misc-male.json";
PGMdialogue, import dialogueMiscFemale from "./dialogue-misc-female.json";
PGMdoubleBattleDialogue, import dialogueDoubleBattleMale from "./dialogue-double-battle-male.json";
PGMmiscDialogue import dialogueDoubleBattleFemale from "./dialogue-double-battle-female.json";
} from "./dialogue"; import egg from "./egg.json";
import { egg } from "./egg"; import fightUiHandler from "./fight-ui-handler.json";
import { fightUiHandler } from "./fight-ui-handler"; import filterBar from "./filter-bar.json";
import { filterBar } from "./filter-bar"; import gameMode from "./game-mode.json";
import { gameMode } from "./game-mode"; import gameStatsUiHandler from "./game-stats-ui-handler.json";
import { gameStatsUiHandler } from "./game-stats-ui-handler"; import growth from "./growth.json";
import { growth } from "./growth"; import menu from "./menu.json";
import { menu } from "./menu"; import menuUiHandler from "./menu-ui-handler.json";
import { menuUiHandler } from "./menu-ui-handler"; import modifier from "./modifier.json";
import { modifier } from "./modifier"; import modifierType from "./modifier-type.json";
import { modifierType } from "./modifier-type"; import move from "./move.json";
import { move } from "./move"; import nature from "./nature.json";
import { nature } from "./nature"; import partyUiHandler from "./party-ui-handler.json";
import { partyUiHandler } from "./party-ui-handler"; import pokeball from "./pokeball.json";
import { pokeball } from "./pokeball"; import pokemon from "./pokemon.json";
import { pokemon } from "./pokemon"; import pokemonForm from "./pokemon-form.json";
import { pokemonForm, battlePokemonForm } from "./pokemon-form"; import battlePokemonForm from "./pokemon-form-battle.json";
import { pokemonInfo } from "./pokemon-info"; import pokemonInfo from "./pokemon-info.json";
import { pokemonInfoContainer } from "./pokemon-info-container"; import pokemonInfoContainer from "./pokemon-info-container.json";
import { pokemonSummary } from "./pokemon-summary"; import pokemonSummary from "./pokemon-summary.json";
import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import saveSlotSelectUiHandler from "./save-slot-select-ui-handler.json";
import { splashMessages } from "./splash-messages"; import splashMessages from "./splash-messages.json";
import { starterSelectUiHandler } from "./starter-select-ui-handler"; import starterSelectUiHandler from "./starter-select-ui-handler.json";
import { statusEffect } from "./status-effect"; import statusEffect from "./status-effect.json";
import { titles, trainerClasses, trainerNames } from "./trainers"; import trainerTitles from "./trainer-titles.json";
import { tutorial } from "./tutorial"; import trainerClasses from "./trainer-classes.json";
import { voucher } from "./voucher"; import trainerNames from "./trainer-names.json";
import { terrain, weather } from "./weather"; import tutorial from "./tutorial.json";
import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; import voucher from "./voucher.json";
import { moveTriggers } from "./move-trigger"; import weather from "./weather.json";
import terrain from "./terrain.json";
import modifierSelectUiHandler from "./modifier-select-ui-handler.json";
import moveTriggers from "./move-trigger.json";
import runHistory from "./run-history-ui-handler.json";
export const caESConfig = { export const caEsConfig = {
ability: ability, ability,
abilityTriggers: abilityTriggers, abilityTriggers,
arenaFlyout: arenaFlyout, arenaFlyout,
arenaTag: arenaTag, arenaTag,
battle: battle, battle,
battleScene: battleScene, battleScene,
battleInfo: battleInfo, battleInfo,
battleMessageUiHandler: battleMessageUiHandler, battleMessageUiHandler,
battlePokemonForm: battlePokemonForm, battlePokemonForm,
battlerTags: battlerTags, battlerTags,
berry: berry, berry,
bgmName: bgmName, bgmName,
biome: biome, biome,
challenges: challenges, challenges,
commandUiHandler: commandUiHandler, commandUiHandler,
common: common, common,
PGMachv: PGMachv, PGMachv: achvMale,
PGFachv: PGFachv, PGFachv: achvFemale,
PGMdialogue: PGMdialogue, PGMdialogue: dialogueMale,
PGFdialogue: PGFdialogue, PGFdialogue: dialogueFemale,
PGMbattleSpecDialogue: PGMbattleSpecDialogue, PGMbattleSpecDialogue: dialogueEndbossMale,
PGFbattleSpecDialogue: PGFbattleSpecDialogue, PGFbattleSpecDialogue: dialogueEndbossFemale,
PGMmiscDialogue: PGMmiscDialogue, PGMmiscDialogue: dialogueMiscMale,
PGFmiscDialogue: PGFmiscDialogue, PGFmiscDialogue: dialogueMiscFemale,
PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, PGMdoubleBattleDialogue: dialogueDoubleBattleMale,
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, PGFdoubleBattleDialogue: dialogueDoubleBattleFemale,
egg: egg, egg,
fightUiHandler: fightUiHandler, fightUiHandler,
filterBar: filterBar, filterBar,
gameMode: gameMode, gameMode,
gameStatsUiHandler: gameStatsUiHandler, gameStatsUiHandler,
growth: growth, growth,
menu: menu, menu,
menuUiHandler: menuUiHandler, menuUiHandler,
modifier: modifier, modifier,
modifierType: modifierType, modifierType,
move: move, move,
nature: nature, nature,
pokeball: pokeball, pokeball,
pokemon: pokemon, pokemon,
pokemonForm: pokemonForm, pokemonForm,
pokemonInfo: pokemonInfo, pokemonInfo,
pokemonInfoContainer: pokemonInfoContainer, pokemonInfoContainer,
pokemonSummary: pokemonSummary, pokemonSummary,
saveSlotSelectUiHandler: saveSlotSelectUiHandler, saveSlotSelectUiHandler,
settings: settings, settings,
splashMessages: splashMessages, splashMessages,
starterSelectUiHandler: starterSelectUiHandler, starterSelectUiHandler,
statusEffect: statusEffect, statusEffect,
terrain: terrain, terrain,
titles: titles, titles: trainerTitles,
trainerClasses: trainerClasses, trainerClasses,
trainerNames: trainerNames, trainerNames,
tutorial: tutorial, tutorial,
voucher: voucher, voucher,
weather: weather, weather,
partyUiHandler: partyUiHandler, partyUiHandler,
modifierSelectUiHandler: modifierSelectUiHandler, modifierSelectUiHandler,
moveTriggers: moveTriggers moveTriggers,
runHistory,
}; };

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -1,9 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const fightUiHandler: SimpleTranslationEntries = {
"pp": "PP",
"power": "Power",
"accuracy": "Accuracy",
"abilityFlyInText": " {{pokemonName}}'s {{passive}}{{abilityName}}",
"passive": "Passive ", // The space at the end is important
} as const;

View File

@ -0,0 +1 @@
{}

View File

@ -1,40 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const filterBar: SimpleTranslationEntries = {
"genFilter": "Gen",
"typeFilter": "Type",
"caughtFilter": "Caught",
"unlocksFilter": "Unlocks",
"miscFilter": "Misc",
"sortFilter": "Sort",
"all": "All",
"normal": "Not Shiny",
"uncaught": "Uncaught",
"passive": "Passive",
"passiveUnlocked": "Passive - Yes",
"passiveLocked": "Passive - No",
"passiveUnlockable": "Passive - Can Unlock",
"costReduction": "Cost Reduction",
"costReductionUnlocked": "Cost Reduction - Yes",
"costReductionLocked": "Cost Reduction - No",
"costReductionUnlockable": "Cost Reduction - Can Unlock",
"favorite": "Favorite",
"isFavorite": "Favorite - Yes",
"notFavorite": "Favorite - No",
"ribbon": "Ribbon",
"hasWon": "Ribbon - Yes",
"hasNotWon": "Ribbon - No",
"hiddenAbility": "Hidden Ability",
"hasHiddenAbility": "Hidden Ability - Yes",
"noHiddenAbility": "Hidden Ability - No",
"egg": "Egg",
"eggPurchasable": "Purchasable Egg",
"pokerus": "Pokérus",
"hasPokerus": "Pokérus - Yes",
"noPokerus": "Pokérus - No",
"sortByNumber": "No.",
"sortByCost": "Cost",
"sortByCandies": "Candy Count",
"sortByIVs": "IVs",
"sortByName": "Name",
};

View File

@ -0,0 +1 @@
{}

View File

@ -1,10 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const gameMode: SimpleTranslationEntries = {
"classic": "Classic",
"endless": "Endless",
"endlessSpliced": "Endless (Spliced)",
"dailyRun": "Daily Run",
"unknown": "Unknown",
"challenge": "Challenge",
} as const;

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -1,457 +0,0 @@
import { ModifierTypeTranslationEntries } from "#app/interfaces/locales";
export const modifierType: ModifierTypeTranslationEntries = {
ModifierType: {
"AddPokeballModifierType": {
name: "{{modifierCount}}x {{pokeballName}}",
description: "Receive {{pokeballName}} x{{modifierCount}} (Inventory: {{pokeballAmount}}) \nCatch Rate: {{catchRate}}",
},
"AddVoucherModifierType": {
name: "{{modifierCount}}x {{voucherTypeName}}",
description: "Receive {{voucherTypeName}} x{{modifierCount}}.",
},
"PokemonHeldItemModifierType": {
extra: {
"inoperable": "{{pokemonName}} can't take\nthis item!",
"tooMany": "{{pokemonName}} has too many\nof this item!",
}
},
"PokemonHpRestoreModifierType": {
description: "Restores {{restorePoints}} HP or {{restorePercent}}% HP for one Pokémon, whichever is higher.",
extra: {
"fully": "Fully restores HP for one Pokémon.",
"fullyWithStatus": "Fully restores HP for one Pokémon and heals any status ailment.",
}
},
"PokemonReviveModifierType": {
description: "Revives one Pokémon and restores {{restorePercent}}% HP.",
},
"PokemonStatusHealModifierType": {
description: "Heals any status ailment for one Pokémon.",
},
"PokemonPpRestoreModifierType": {
description: "Restores {{restorePoints}} PP for one Pokémon move.",
extra: {
"fully": "Restores all PP for one Pokémon move.",
}
},
"PokemonAllMovePpRestoreModifierType": {
description: "Restores {{restorePoints}} PP for all of one Pokémon's moves.",
extra: {
"fully": "Restores all PP for all of one Pokémon's moves.",
}
},
"PokemonPpUpModifierType": {
description: "Permanently increases PP for one Pokémon move by {{upPoints}} for every 5 maximum PP (maximum 3).",
},
"PokemonNatureChangeModifierType": {
name: "{{natureName}} Mint",
description: "Changes a Pokémon's nature to {{natureName}} and permanently unlocks the nature for the starter.",
},
"DoubleBattleChanceBoosterModifierType": {
description: "Doubles the chance of an encounter being a double battle for {{battleCount}} battles.",
},
"TempBattleStatBoosterModifierType": {
description: "Increases the {{tempBattleStatName}} of all party members by 1 stage for 5 battles.",
},
"AttackTypeBoosterModifierType": {
description: "Increases the power of a Pokémon's {{moveType}}-type moves by 20%.",
},
"PokemonLevelIncrementModifierType": {
description: "Increases a Pokémon's level by {{levels}}.",
},
"AllPokemonLevelIncrementModifierType": {
description: "Increases all party members' level by {{levels}}.",
},
"PokemonBaseStatBoosterModifierType": {
description: "Increases the holder's base {{statName}} by 10%. The higher your IVs, the higher the stack limit.",
},
"AllPokemonFullHpRestoreModifierType": {
description: "Restores 100% HP for all Pokémon.",
},
"AllPokemonFullReviveModifierType": {
description: "Revives all fainted Pokémon, fully restoring HP.",
},
"MoneyRewardModifierType": {
description: "Grants a {{moneyMultiplier}} amount of money (₽{{moneyAmount}}).",
extra: {
"small": "small",
"moderate": "moderate",
"large": "large",
},
},
"ExpBoosterModifierType": {
description: "Increases gain of EXP. Points by {{boostPercent}}%.",
},
"PokemonExpBoosterModifierType": {
description: "Increases the holder's gain of EXP. Points by {{boostPercent}}%.",
},
"PokemonFriendshipBoosterModifierType": {
description: "Increases friendship gain per victory by 50%.",
},
"PokemonMoveAccuracyBoosterModifierType": {
description: "Increases move accuracy by {{accuracyAmount}} (maximum 100).",
},
"PokemonMultiHitModifierType": {
description: "Attacks hit one additional time at the cost of a 60/75/82.5% power reduction per stack respectively.",
},
"TmModifierType": {
name: "TM{{moveId}} - {{moveName}}",
description: "Teach {{moveName}} to a Pokémon.",
},
"TmModifierTypeWithInfo": {
name: "TM{{moveId}} - {{moveName}}",
description: "Teach {{moveName}} to a Pokémon\n(Hold C or Shift for more info).",
},
"EvolutionItemModifierType": {
description: "Causes certain Pokémon to evolve.",
},
"FormChangeItemModifierType": {
description: "Causes certain Pokémon to change form.",
},
"FusePokemonModifierType": {
description: "Combines two Pokémon (transfers Ability, splits base stats and types, shares move pool).",
},
"TerastallizeModifierType": {
name: "{{teraType}} Tera Shard",
description: "{{teraType}} Terastallizes the holder for up to 10 battles.",
},
"ContactHeldItemTransferChanceModifierType": {
description: "Upon attacking, there is a {{chancePercent}}% chance the foe's held item will be stolen.",
},
"TurnHeldItemTransferModifierType": {
description: "Every turn, the holder acquires one held item from the foe.",
},
"EnemyAttackStatusEffectChanceModifierType": {
description: "Adds a {{chancePercent}}% chance to inflict {{statusEffect}} with attack moves.",
},
"EnemyEndureChanceModifierType": {
description: "Adds a {{chancePercent}}% chance of enduring a hit.",
},
"RARE_CANDY": { name: "Rare Candy" },
"RARER_CANDY": { name: "Rarer Candy" },
"MEGA_BRACELET": { name: "Mega Bracelet", description: "Mega Stones become available." },
"DYNAMAX_BAND": { name: "Dynamax Band", description: "Max Mushrooms become available." },
"TERA_ORB": { name: "Tera Orb", description: "Tera Shards become available." },
"MAP": { name: "Map", description: "Allows you to choose your destination at a crossroads." },
"POTION": { name: "Potion" },
"SUPER_POTION": { name: "Super Potion" },
"HYPER_POTION": { name: "Hyper Potion" },
"MAX_POTION": { name: "Max Potion" },
"FULL_RESTORE": { name: "Full Restore" },
"REVIVE": { name: "Revive" },
"MAX_REVIVE": { name: "Max Revive" },
"FULL_HEAL": { name: "Full Heal" },
"SACRED_ASH": { name: "Sacred Ash" },
"REVIVER_SEED": { name: "Reviver Seed", description: "Revives the holder for 1/2 HP upon fainting from a direct hit." },
"WHITE_HERB": { name: "White Herb", description: "An item to be held by a Pokémon. It will restore any lowered stat in battle." },
"ETHER": { name: "Ether" },
"MAX_ETHER": { name: "Max Ether" },
"ELIXIR": { name: "Elixir" },
"MAX_ELIXIR": { name: "Max Elixir" },
"PP_UP": { name: "PP Up" },
"PP_MAX": { name: "PP Max" },
"LURE": { name: "Lure" },
"SUPER_LURE": { name: "Super Lure" },
"MAX_LURE": { name: "Max Lure" },
"MEMORY_MUSHROOM": { name: "Memory Mushroom", description: "Recall one Pokémon's forgotten move." },
"EXP_SHARE": { name: "EXP. All", description: "Non-participants receive 20% of a single participant's EXP. Points." },
"EXP_BALANCE": { name: "EXP. Balance", description: "Weighs EXP. Points received from battles towards lower-leveled party members." },
"OVAL_CHARM": { name: "Oval Charm", description: "When multiple Pokémon participate in a battle, each gets an extra 10% of the total EXP." },
"EXP_CHARM": { name: "EXP. Charm" },
"SUPER_EXP_CHARM": { name: "Super EXP. Charm" },
"GOLDEN_EXP_CHARM": { name: "Golden EXP. Charm" },
"LUCKY_EGG": { name: "Lucky Egg" },
"GOLDEN_EGG": { name: "Golden Egg" },
"SOOTHE_BELL": { name: "Soothe Bell" },
"SCOPE_LENS": { name: "Scope Lens", description: "It's a lens for scoping out weak points. It boosts the holder's critical-hit ratio."},
"LEEK": { name: "Leek", description: "This very long and stiff stalk of leek boosts the critical-hit ratio of Farfetch'd's moves."},
"EVIOLITE": { name: "Eviolite", description: "This mysterious evolutionary lump boosts the Defense and Sp. Def stats when held by a Pokémon that can still evolve." },
"SOUL_DEW": { name: "Soul Dew", description: "Increases the influence of a Pokémon's nature on its stats by 10% (additive)." },
"NUGGET": { name: "Nugget" },
"BIG_NUGGET": { name: "Big Nugget" },
"RELIC_GOLD": { name: "Relic Gold" },
"AMULET_COIN": { name: "Amulet Coin", description: "Increases money rewards by 20%." },
"GOLDEN_PUNCH": { name: "Golden Punch", description: "Grants 50% of direct damage inflicted as money." },
"COIN_CASE": { name: "Coin Case", description: "After every 10th battle, receive 10% of your money in interest." },
"LOCK_CAPSULE": { name: "Lock Capsule", description: "Allows you to lock item rarities when rerolling items." },
"GRIP_CLAW": { name: "Grip Claw" },
"WIDE_LENS": { name: "Wide Lens" },
"MULTI_LENS": { name: "Multi Lens" },
"HEALING_CHARM": { name: "Healing Charm", description: "Increases the effectiveness of HP restoring moves and items by 10% (excludes Revives)." },
"CANDY_JAR": { name: "Candy Jar", description: "Increases the number of levels added by Rare Candy items by 1." },
"BERRY_POUCH": { name: "Berry Pouch", description: "Adds a 30% chance that a used berry will not be consumed." },
"FOCUS_BAND": { name: "Focus Band", description: "Adds a 10% chance to survive with 1 HP after being damaged enough to faint." },
"QUICK_CLAW": { name: "Quick Claw", description: "Adds a 10% chance to move first regardless of speed (after priority)." },
"KINGS_ROCK": { name: "King's Rock", description: "Adds a 10% chance an attack move will cause the opponent to flinch." },
"LEFTOVERS": { name: "Leftovers", description: "Heals 1/16 of a Pokémon's maximum HP every turn." },
"SHELL_BELL": { name: "Shell Bell", description: "Heals 1/8 of a Pokémon's dealt damage." },
"TOXIC_ORB": { name: "Toxic Orb", description: "It's a bizarre orb that exudes toxins when touched and will badly poison the holder during battle." },
"FLAME_ORB": { name: "Flame Orb", description: "It's a bizarre orb that gives off heat when touched and will affect the holder with a burn during battle." },
"BATON": { name: "Baton", description: "Allows passing along effects when switching Pokémon, which also bypasses traps." },
"SHINY_CHARM": { name: "Shiny Charm", description: "Dramatically increases the chance of a wild Pokémon being Shiny." },
"ABILITY_CHARM": { name: "Ability Charm", description: "Dramatically increases the chance of a wild Pokémon having a Hidden Ability." },
"IV_SCANNER": { name: "IV Scanner", description: "Allows scanning the IVs of wild Pokémon. 2 IVs are revealed per stack. The best IVs are shown first." },
"DNA_SPLICERS": { name: "DNA Splicers" },
"MINI_BLACK_HOLE": { name: "Mini Black Hole" },
"GOLDEN_POKEBALL": { name: "Golden Poké Ball", description: "Adds 1 extra item option at the end of every battle." },
"ENEMY_DAMAGE_BOOSTER": { name: "Damage Token", description: "Increases damage by 5%." },
"ENEMY_DAMAGE_REDUCTION": { name: "Protection Token", description: "Reduces incoming damage by 2.5%." },
"ENEMY_HEAL": { name: "Recovery Token", description: "Heals 2% of max HP every turn." },
"ENEMY_ATTACK_POISON_CHANCE": { name: "Poison Token" },
"ENEMY_ATTACK_PARALYZE_CHANCE": { name: "Paralyze Token" },
"ENEMY_ATTACK_BURN_CHANCE": { name: "Burn Token" },
"ENEMY_STATUS_EFFECT_HEAL_CHANCE": { name: "Full Heal Token", description: "Adds a 2.5% chance every turn to heal a status condition." },
"ENEMY_ENDURE_CHANCE": { name: "Endure Token" },
"ENEMY_FUSED_CHANCE": { name: "Fusion Token", description: "Adds a 1% chance that a wild Pokémon will be a fusion." },
},
SpeciesBoosterItem: {
"LIGHT_BALL": { name: "Light Ball", description: "It's a mysterious orb that boosts Pikachu's Attack and Sp. Atk stats." },
"THICK_CLUB": { name: "Thick Club", description: "This hard bone of unknown origin boosts Cubone or Marowak's Attack stat." },
"METAL_POWDER": { name: "Metal Powder", description: "Extremely fine yet hard, this odd powder boosts Ditto's Defense stat." },
"QUICK_POWDER": { name: "Quick Powder", description: "Extremely fine yet hard, this odd powder boosts Ditto's Speed stat." }
},
TempBattleStatBoosterItem: {
"x_attack": "X Attack",
"x_defense": "X Defense",
"x_sp_atk": "X Sp. Atk",
"x_sp_def": "X Sp. Def",
"x_speed": "X Speed",
"x_accuracy": "X Accuracy",
"dire_hit": "Dire Hit",
},
TempBattleStatBoosterStatName: {
"ATK": "Attack",
"DEF": "Defense",
"SPATK": "Sp. Atk",
"SPDEF": "Sp. Def",
"SPD": "Speed",
"ACC": "Accuracy",
"CRIT": "Critical Hit Ratio",
"EVA": "Evasiveness",
"DEFAULT": "???",
},
AttackTypeBoosterItem: {
"silk_scarf": "Silk Scarf",
"black_belt": "Black Belt",
"sharp_beak": "Sharp Beak",
"poison_barb": "Poison Barb",
"soft_sand": "Soft Sand",
"hard_stone": "Hard Stone",
"silver_powder": "Silver Powder",
"spell_tag": "Spell Tag",
"metal_coat": "Metal Coat",
"charcoal": "Charcoal",
"mystic_water": "Mystic Water",
"miracle_seed": "Miracle Seed",
"magnet": "Magnet",
"twisted_spoon": "Twisted Spoon",
"never_melt_ice": "Never-Melt Ice",
"dragon_fang": "Dragon Fang",
"black_glasses": "Black Glasses",
"fairy_feather": "Fairy Feather",
},
BaseStatBoosterItem: {
"hp_up": "HP Up",
"protein": "Protein",
"iron": "Iron",
"calcium": "Calcium",
"zinc": "Zinc",
"carbos": "Carbos",
},
EvolutionItem: {
"NONE": "None",
"LINKING_CORD": "Linking Cord",
"SUN_STONE": "Sun Stone",
"MOON_STONE": "Moon Stone",
"LEAF_STONE": "Leaf Stone",
"FIRE_STONE": "Fire Stone",
"WATER_STONE": "Water Stone",
"THUNDER_STONE": "Thunder Stone",
"ICE_STONE": "Ice Stone",
"DUSK_STONE": "Dusk Stone",
"DAWN_STONE": "Dawn Stone",
"SHINY_STONE": "Shiny Stone",
"CRACKED_POT": "Cracked Pot",
"SWEET_APPLE": "Sweet Apple",
"TART_APPLE": "Tart Apple",
"STRAWBERRY_SWEET": "Strawberry Sweet",
"UNREMARKABLE_TEACUP": "Unremarkable Teacup",
"CHIPPED_POT": "Chipped Pot",
"BLACK_AUGURITE": "Black Augurite",
"GALARICA_CUFF": "Galarica Cuff",
"GALARICA_WREATH": "Galarica Wreath",
"PEAT_BLOCK": "Peat Block",
"AUSPICIOUS_ARMOR": "Auspicious Armor",
"MALICIOUS_ARMOR": "Malicious Armor",
"MASTERPIECE_TEACUP": "Masterpiece Teacup",
"METAL_ALLOY": "Metal Alloy",
"SCROLL_OF_DARKNESS": "Scroll Of Darkness",
"SCROLL_OF_WATERS": "Scroll Of Waters",
"SYRUPY_APPLE": "Syrupy Apple",
},
FormChangeItem: {
"NONE": "None",
"ABOMASITE": "Abomasite",
"ABSOLITE": "Absolite",
"AERODACTYLITE": "Aerodactylite",
"AGGRONITE": "Aggronite",
"ALAKAZITE": "Alakazite",
"ALTARIANITE": "Altarianite",
"AMPHAROSITE": "Ampharosite",
"AUDINITE": "Audinite",
"BANETTITE": "Banettite",
"BEEDRILLITE": "Beedrillite",
"BLASTOISINITE": "Blastoisinite",
"BLAZIKENITE": "Blazikenite",
"CAMERUPTITE": "Cameruptite",
"CHARIZARDITE_X": "Charizardite X",
"CHARIZARDITE_Y": "Charizardite Y",
"DIANCITE": "Diancite",
"GALLADITE": "Galladite",
"GARCHOMPITE": "Garchompite",
"GARDEVOIRITE": "Gardevoirite",
"GENGARITE": "Gengarite",
"GLALITITE": "Glalitite",
"GYARADOSITE": "Gyaradosite",
"HERACRONITE": "Heracronite",
"HOUNDOOMINITE": "Houndoominite",
"KANGASKHANITE": "Kangaskhanite",
"LATIASITE": "Latiasite",
"LATIOSITE": "Latiosite",
"LOPUNNITE": "Lopunnite",
"LUCARIONITE": "Lucarionite",
"MANECTITE": "Manectite",
"MAWILITE": "Mawilite",
"MEDICHAMITE": "Medichamite",
"METAGROSSITE": "Metagrossite",
"MEWTWONITE_X": "Mewtwonite X",
"MEWTWONITE_Y": "Mewtwonite Y",
"PIDGEOTITE": "Pidgeotite",
"PINSIRITE": "Pinsirite",
"RAYQUAZITE": "Rayquazite",
"SABLENITE": "Sablenite",
"SALAMENCITE": "Salamencite",
"SCEPTILITE": "Sceptilite",
"SCIZORITE": "Scizorite",
"SHARPEDONITE": "Sharpedonite",
"SLOWBRONITE": "Slowbronite",
"STEELIXITE": "Steelixite",
"SWAMPERTITE": "Swampertite",
"TYRANITARITE": "Tyranitarite",
"VENUSAURITE": "Venusaurite",
"BLUE_ORB": "Blue Orb",
"RED_ORB": "Red Orb",
"SHARP_METEORITE": "Sharp Meteorite",
"HARD_METEORITE": "Hard Meteorite",
"SMOOTH_METEORITE": "Smooth Meteorite",
"ADAMANT_CRYSTAL": "Adamant Crystal",
"LUSTROUS_GLOBE": "Lustrous Globe",
"GRISEOUS_CORE": "Griseous Core",
"REVEAL_GLASS": "Reveal Glass",
"GRACIDEA": "Gracidea",
"MAX_MUSHROOMS": "Max Mushrooms",
"DARK_STONE": "Dark Stone",
"LIGHT_STONE": "Light Stone",
"PRISON_BOTTLE": "Prison Bottle",
"N_LUNARIZER": "N Lunarizer",
"N_SOLARIZER": "N Solarizer",
"RUSTED_SWORD": "Rusted Sword",
"RUSTED_SHIELD": "Rusted Shield",
"ICY_REINS_OF_UNITY": "Icy Reins Of Unity",
"SHADOW_REINS_OF_UNITY": "Shadow Reins Of Unity",
"WELLSPRING_MASK": "Wellspring Mask",
"HEARTHFLAME_MASK": "Hearthflame Mask",
"CORNERSTONE_MASK": "Cornerstone Mask",
"SHOCK_DRIVE": "Shock Drive",
"BURN_DRIVE": "Burn Drive",
"CHILL_DRIVE": "Chill Drive",
"DOUSE_DRIVE": "Douse Drive",
"ULTRANECROZIUM_Z": "Ultranecrozium Z",
"FIST_PLATE": "Fist Plate",
"SKY_PLATE": "Sky Plate",
"TOXIC_PLATE": "Toxic Plate",
"EARTH_PLATE": "Earth Plate",
"STONE_PLATE": "Stone Plate",
"INSECT_PLATE": "Insect Plate",
"SPOOKY_PLATE": "Spooky Plate",
"IRON_PLATE": "Iron Plate",
"FLAME_PLATE": "Flame Plate",
"SPLASH_PLATE": "Splash Plate",
"MEADOW_PLATE": "Meadow Plate",
"ZAP_PLATE": "Zap Plate",
"MIND_PLATE": "Mind Plate",
"ICICLE_PLATE": "Icicle Plate",
"DRACO_PLATE": "Draco Plate",
"DREAD_PLATE": "Dread Plate",
"PIXIE_PLATE": "Pixie Plate",
"BLANK_PLATE": "Blank Plate",
"LEGEND_PLATE": "Legend Plate",
"FIGHTING_MEMORY": "Fighting Memory",
"FLYING_MEMORY": "Flying Memory",
"POISON_MEMORY": "Poison Memory",
"GROUND_MEMORY": "Ground Memory",
"ROCK_MEMORY": "Rock Memory",
"BUG_MEMORY": "Bug Memory",
"GHOST_MEMORY": "Ghost Memory",
"STEEL_MEMORY": "Steel Memory",
"FIRE_MEMORY": "Fire Memory",
"WATER_MEMORY": "Water Memory",
"GRASS_MEMORY": "Grass Memory",
"ELECTRIC_MEMORY": "Electric Memory",
"PSYCHIC_MEMORY": "Psychic Memory",
"ICE_MEMORY": "Ice Memory",
"DRAGON_MEMORY": "Dragon Memory",
"DARK_MEMORY": "Dark Memory",
"FAIRY_MEMORY": "Fairy Memory",
"BLANK_MEMORY": "Blank Memory",
},
} as const;

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -1,66 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const moveTriggers: SimpleTranslationEntries = {
"hitWithRecoil" : "{{pokemonName}} was damaged by the recoil!",
"cutHpPowerUpMove": "{{pokemonName}} cut its own HP to power up its move!",
"absorbedElectricity": "{{pokemonName}} absorbed electricity!",
"switchedStatChanges": "{{pokemonName}} switched stat changes with the target!",
"goingAllOutForAttack": "{{pokemonName}} is going all out for this attack!",
"regainedHealth": "{{pokemonName}} regained\nhealth!",
"keptGoingAndCrashed": "{{pokemonName}} kept going\nand crashed!",
"fled": "{{pokemonName}} fled!",
"cannotBeSwitchedOut": "{{pokemonName}} can't be switched out!",
"swappedAbilitiesWithTarget": "{{pokemonName}} swapped\nabilities with its target!",
"coinsScatteredEverywhere": "Coins were scattered everywhere!",
"attackedByItem": "{{pokemonName}} is about to be attacked by its {{itemName}}!",
"whippedUpAWhirlwind": "{{pokemonName}} whipped\nup a whirlwind!",
"flewUpHigh": "{{pokemonName}} flew\nup high!",
"tookInSunlight": "{{pokemonName}} absorbed light!",
"dugAHole": "{{pokemonName}} burrowed its way under the ground!",
"loweredItsHead": "{{pokemonName}} tucked in its head!",
"isGlowing": "{{pokemonName}} became cloaked in a harsh light!",
"bellChimed": "A bell chimed!",
"foresawAnAttack": "{{pokemonName}} foresaw\nan attack!",
"isTighteningFocus": "{{pokemonName}} is\ntightening its focus!",
"hidUnderwater": "{{pokemonName}} hid\nunderwater!",
"soothingAromaWaftedThroughArea": "A soothing aroma wafted through the area!",
"sprangUp": "{{pokemonName}} sprang up!",
"choseDoomDesireAsDestiny": "{{pokemonName}} chose\nDoom Desire as its destiny!",
"vanishedInstantly": "{{pokemonName}} vanished\ninstantly!",
"tookTargetIntoSky": "{{pokemonName}} took {{targetName}}\ninto the sky!",
"becameCloakedInFreezingLight": "{{pokemonName}} became cloaked\nin a freezing light!",
"becameCloakedInFreezingAir": "{{pokemonName}} became cloaked\nin freezing air!",
"isChargingPower": "{{pokemonName}} is absorbing power!",
"burnedItselfOut": "{{pokemonName}} burned itself out!",
"startedHeatingUpBeak": "{{pokemonName}} started\nheating up its beak!",
"setUpShellTrap": "{{pokemonName}} set a shell trap!",
"isOverflowingWithSpacePower": "{{pokemonName}} is overflowing\nwith space power!",
"usedUpAllElectricity": "{{pokemonName}} used up all its electricity!",
"stoleItem": "{{pokemonName}} stole\n{{targetName}}'s {{itemName}}!",
"incineratedItem": "{{pokemonName}} incinerated\n{{targetName}}'s {{itemName}}!",
"knockedOffItem": "{{pokemonName}} knocked off\n{{targetName}}'s {{itemName}}!",
"tookMoveAttack": "{{pokemonName}} took\nthe {{moveName}} attack!",
"cutOwnHpAndMaximizedStat": "{{pokemonName}} cut its own HP\nand maximized its {{statName}}!",
"copiedStatChanges": "{{pokemonName}} copied\n{{targetName}}'s stat changes!",
"magnitudeMessage": "Magnitude {{magnitude}}!",
"tookAimAtTarget": "{{pokemonName}} took aim\nat {{targetName}}!",
"transformedIntoType": "{{pokemonName}} transformed\ninto the {{typeName}} type!",
"copiedMove": "{{pokemonName}} copied\n{{moveName}}!",
"sketchedMove": "{{pokemonName}} sketched\n{{moveName}}!",
"acquiredAbility": "The {{pokemonName}} acquired\n{{abilityName}}!",
"copiedTargetAbility": "{{pokemonName}} copied the {{targetName}}'s\n{{abilityName}}!",
"transformedIntoTarget": "{{pokemonName}} transformed\ninto {{targetName}}!",
"tryingToTakeFoeDown": "{{pokemonName}} is hoping to take its attacker down with it!",
"addType": "{{typeName}} was added to\n{{pokemonName}}!",
"cannotUseMove": "{{pokemonName}} cannot use {{moveName}}!",
"healHp": "{{pokemonName}} had its HP restored.",
"sacrificialFullRestore": "{{pokemonName}}'s Healing Wish\nwas granted!",
"invertStats": "{{pokemonName}}'s stat changes\nwere all reversed!",
"resetStats": "{{pokemonName}}'s stat changes\nwere eliminated!",
"statEliminated": "All stat changes were eliminated!",
"faintCountdown": "{{pokemonName}}\nwill faint in {{turnCount}} turns.",
"copyType": "{{pokemonName}}'s type became the same as\n{{targetPokemonName}}'s type!",
"suppressAbilities": "{{pokemonName}}'s ability\nwas suppressed!",
"swapArenaTags": "{{pokemonName}} swapped the battle effects affecting each side of the field!",
"exposedMove": "{{pokemonName}} identified\n{{targetPokemonName}}!",
} as const;

View File

@ -0,0 +1 @@
{}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
{}

View File

@ -1,29 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const nature: SimpleTranslationEntries = {
"Hardy": "Hardy",
"Lonely": "Lonely",
"Brave": "Brave",
"Adamant": "Adamant",
"Naughty": "Naughty",
"Bold": "Bold",
"Docile": "Docile",
"Relaxed": "Relaxed",
"Impish": "Impish",
"Lax": "Lax",
"Timid": "Timid",
"Hasty": "Hasty",
"Serious": "Serious",
"Jolly": "Jolly",
"Naive": "Naive",
"Modest": "Modest",
"Mild": "Mild",
"Quiet": "Quiet",
"Bashful": "Bashful",
"Rash": "Rash",
"Calm": "Calm",
"Gentle": "Gentle",
"Sassy": "Sassy",
"Careful": "Careful",
"Quirky": "Quirky"
} as const;

View File

@ -0,0 +1 @@
{}

View File

@ -1,54 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const partyUiHandler: SimpleTranslationEntries = {
"SEND_OUT": "Send Out",
"SUMMARY": "Summary",
"CANCEL": "Cancel",
"RELEASE": "Release",
"APPLY": "Apply",
"TEACH": "Teach",
"SPLICE": "Splice",
"UNSPLICE": "Unsplice",
"ACTIVATE": "Activate",
"DEACTIVATE": "Deactivate",
"TRANSFER": "Transfer",
"ALL": "All",
"PASS_BATON": "Pass Baton",
"UNPAUSE_EVOLUTION": "Unpause Evolution",
"REVIVE": "Revive",
"RENAME": "Rename",
"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;

View File

@ -0,0 +1 @@
{}

View File

@ -1,10 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const pokeball: SimpleTranslationEntries = {
"pokeBall": "Poké Ball",
"greatBall": "Great Ball",
"ultraBall": "Ultra Ball",
"rogueBall": "Rogue Ball",
"masterBall": "Master Ball",
"luxuryBall": "Luxury Ball",
} as const;

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1 @@
{}

View File

@ -1,198 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const battlePokemonForm: SimpleTranslationEntries = {
"mega": "Mega {{pokemonName}}",
"mega-x": "Mega {{pokemonName}} X",
"mega-y": "Mega {{pokemonName}} Y",
"primal": "Primal {{pokemonName}}",
"gigantamax": "G-Max {{pokemonName}}",
"eternamax": "E-Max {{pokemonName}}",
"megaChange": "{{preName}} Mega Evolved\ninto {{pokemonName}}!",
"gigantamaxChange": "{{preName}} Gigantamaxed\ninto {{pokemonName}}!",
"eternamaxChange": "{{preName}} Eternamaxed\ninto {{pokemonName}}!",
"revertChange": "{{pokemonName}} reverted\nto its original form!",
"formChange": "{{preName}} changed form!",
"disguiseChange": "Its disguise served it as a decoy!",
} as const;
export const pokemonForm: SimpleTranslationEntries = {
// Starters forms
// 1G
"pikachuCosplay": "Cosplay",
"pikachuCoolCosplay": "Cool Cosplay",
"pikachuBeautyCosplay": "Beauty Cosplay",
"pikachuCuteCosplay": "Cute Cosplay",
"pikachuSmartCosplay": "Smart Cosplay",
"pikachuToughCosplay": "Tough Cosplay",
"pikachuPartner": "Partner",
"eeveePartner": "Partner",
// 2G
"pichuSpiky": "Spiky",
"unownA": "A",
"unownB": "B",
"unownC": "C",
"unownD": "D",
"unownE": "E",
"unownF": "F",
"unownG": "G",
"unownH": "H",
"unownI": "I",
"unownJ": "J",
"unownK": "K",
"unownL": "L",
"unownM": "M",
"unownN": "N",
"unownO": "O",
"unownP": "P",
"unownQ": "Q",
"unownR": "R",
"unownS": "S",
"unownT": "T",
"unownU": "U",
"unownV": "V",
"unownW": "W",
"unownX": "X",
"unownY": "Y",
"unownZ": "Z",
"unownExclamation": "!",
"unownQuestion": "?",
// 3G
"castformSunny": "Sunny",
"castformRainy": "Rainy",
"castformSnowy": "Snowy",
"deoxysNormal": "Normal",
// 4G
"burmyPlant": "Plant",
"burmySandy": "Sandy",
"burmyTrash": "Trash",
"shellosEast": "East",
"shellosWest": "West",
"rotomHeat": "Heat",
"rotomWash": "Wash",
"rotomFrost": "Frost",
"rotomFan": "Fan",
"rotomMow": "Mow",
"giratinaAltered": "Altered",
"shayminLand": "Land",
// 5G
"basculinRedStriped": "Red Striped",
"basculinBlueStriped": "Blue Striped",
"basculinWhiteStriped": "White Striped",
"deerlingSpring": "Spring",
"deerlingSummer": "Summer",
"deerlingAutumn": "Autumn",
"deerlingWinter": "Winter",
"tornadusIncarnate": "Incarnate",
"thundurusIncarnate": "Incarnate",
"landorusIncarnate": "Incarnate",
"keldeoOrdinary": "Ordinary",
"meloettaAria": "Aria",
// 6G
"froakieBattleBond": "Battle Bond",
"scatterbugMeadow": "Meadow",
"scatterbugIcySnow": "Icy Snow",
"scatterbugPolar": "Polar",
"scatterbugTundra": "Tundra",
"scatterbugContinental": "Continental",
"scatterbugGarden": "Garden",
"scatterbugElegant": "Elegant",
"scatterbugModern": "Modern",
"scatterbugMarine": "Marine",
"scatterbugArchipelago": "Archipelago",
"scatterbugHighPlains": "High Plains",
"scatterbugSandstorm": "Sandstorm",
"scatterbugRiver": "River",
"scatterbugMonsoon": "Monsoon",
"scatterbugSavanna": "Savanna",
"scatterbugSun": "Sun",
"scatterbugOcean": "Ocean",
"scatterbugJungle": "Jungle",
"scatterbugFancy": "Fancy",
"scatterbugPokeBall": "Poké Ball",
"flabebeRed": "Red",
"flabebeYellow": "Yellow",
"flabebeOrange": "Orange",
"flabebeBlue": "Blue",
"flabebeWhite": "White",
"furfrouHeart": "Heart",
"furfrouStar": "Star",
"furfrouDiamond": "Diamond",
"furfrouDebutante": "Debutante",
"furfrouMatron": "Matron",
"furfrouDandy": "Dandy",
"furfrouLaReine": "La Reine",
"furfrouKabuki": "Kabuki",
"furfrouPharaoh": "Pharaoh",
"pumpkabooSmall": "Small",
"pumpkabooLarge": "Large",
"pumpkabooSuper": "Super",
"xerneasNeutral": "Neutral",
"xerneasActive": "Active",
"zygarde50": "50% Forme",
"zygarde10": "10% Forme",
"zygarde50Pc": "50% Forme Power Construct",
"zygarde10Pc": "10% Forme Power Construct",
"zygardeComplete": "Complete Forme",
// 7G
"oricorioBaile": "Baile",
"oricorioPompom": "Pom-Pom",
"oricorioPau": "Pau",
"oricorioSensu": "Sensu",
"rockruffOwnTempo": "Own Tempo",
"miniorRedMeteor": "Red Meteor",
"miniorOrangeMeteor": "Orange Meteor",
"miniorYellowMeteor": "Yellow Meteor",
"miniorGreenMeteor": "Green Meteor",
"miniorBlueMeteor": "Blue Meteor",
"miniorIndigoMeteor": "Indigo Meteor",
"miniorVioletMeteor": "Violet Meteor",
"miniorRed": "Red",
"miniorOrange": "Orange",
"miniorYellow": "Yellow",
"miniorGreen": "Green",
"miniorBlue": "Blue",
"miniorIndigo": "Indigo",
"miniorViolet": "Violet",
"mimikyuDisguised": "Disguised",
"mimikyuBusted": "Busted",
"magearnaOriginal": "Original",
"marshadowZenith": "Zenith",
// 8G
"sinisteaPhony": "Phony",
"sinisteaAntique": "Antique",
"eiscueNoIce": "No Ice",
"indeedeeMale": "Male",
"indeedeeFemale": "Female",
"morpekoFullBelly": "Full Belly",
"zacianHeroOfManyBattles": "Hero Of Many Battles",
"zamazentaHeroOfManyBattles": "Hero Of Many Battles",
"zarudeDada": "Dada",
"enamorusIncarnate": "Incarnate",
// 9G
"squawkabillyGreenPlumage": "Green Plumage",
"squawkabillyBluePlumage": "Blue Plumage",
"squawkabillyYellowPlumage": "Yellow Plumage",
"squawkabillyWhitePlumage": "White Plumage",
"tatsugiriCurly": "Curly",
"tatsugiriDroopy": "Droopy",
"tatsugiriStretchy": "Stretchy",
"gimmighoulChest": "Chest",
"gimmighoulRoaming": "Roaming",
"koraidonApexBuild": "Apex Build",
"koraidonLimitedBuild":"Limited Build",
"koraidonSprintingBuild":"Sprinting Build",
"koraidonSwimmingBuild":"Swimming Build",
"koraidonGlidingBuild":"Gliding Build",
"miraidonUltimateMode":"Ultimate Mode",
"miraidonLowPowerMode":"Low Power Mode",
"miraidonDriveMode":"Drive Mode",
"miraidonAquaticMode":"Aquatic Mode",
"miraidonGlideMode":"Glide Mode",
"poltchageistCounterfeit": "Counterfeit",
"poltchageistArtisan": "Artisan",
"paldeaTaurosCombat": "Combat",
"paldeaTaurosBlaze": "Blaze",
"paldeaTaurosAqua": "Aqua",
} as const;

View File

@ -0,0 +1 @@
{}

View File

@ -1,9 +0,0 @@
import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const pokemonInfoContainer: SimpleTranslationEntries = {
"moveset": "Moveset",
"gender": "Gender:",
"ability": "Ability:",
"nature": "Nature:",
"form": "Form:"
} as const;

View File

@ -0,0 +1 @@
{}

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