Compare commits

..

No commits in common. "5d698b6d38dcbbf3b075b39e6ba43c2c554e79b9" and "389c47982587f0a948932755ffc85f7fe64978f8" have entirely different histories.

163 changed files with 1072 additions and 3873 deletions

View File

@ -46,14 +46,7 @@ Check out [Github Issues](https://github.com/pagefaultgames/pokerogue/issues) to
- Keisuke Ito
- Arata Iiyoshi
- Atsuhiro Ishizuna
- Pokémon HeartGold/SoulSilver
- Pokémon Black/White 2
- Pokémon X/Y
- Pokémon Omega Ruby/Alpha Sapphire
- Pokémon Sun/Moon
- Pokémon Ultra Sun/Ultra Moon
- Pokémon Sword/Shield
- Pokémon Scarlet/Violet
- Firel (Custom Metropolis and Laboratory biome music)
- Lmz (Custom Jungle biome music)

View File

@ -11,7 +11,6 @@
"test": "vitest run",
"test:cov": "vitest run --coverage",
"test:watch": "vitest watch --coverage",
"test:silent": "vitest run --silent",
"eslint": "eslint --fix .",
"eslint-ci": "eslint .",
"docs": "typedoc"

Binary file not shown.

View File

@ -1745,27 +1745,27 @@
1
],
"641-incarnate": [
0,
1,
0,
0
],
"641-therian": [
0,
1,
0,
0
],
"642-incarnate": [
0,
1,
0,
0
],
"642-therian": [
0,
1,
0,
0
],
"645-incarnate": [
0,
1,
0,
0
],
@ -4608,32 +4608,32 @@
1
],
"641-incarnate": [
0,
1,
0,
0
],
"641-therian": [
0,
1,
0,
0
],
"642-incarnate": [
0,
1,
0,
0
],
"642-therian": [
0,
1,
0,
0
],
"645-incarnate": [
0,
1,
0,
0
],
"645-therian": [
0,
1,
0,
0
],

View File

@ -20,8 +20,8 @@ import { ModifierPoolType, getDefaultModifierTypeForTier, getEnemyModifierTypesF
import AbilityBar from "./ui/ability-bar";
import { BlockItemTheftAbAttr, DoubleBattleChanceAbAttr, IncrementMovePriorityAbAttr, PostBattleInitAbAttr, applyAbAttrs, applyPostBattleInitAbAttrs } from "./data/ability";
import { allAbilities } from "./data/ability";
import Battle, { BattleType, FixedBattleConfig } from "./battle";
import { GameMode, GameModes, getGameMode } from "./game-mode";
import Battle, { BattleType, FixedBattleConfig, fixedBattles } from "./battle";
import { GameMode, GameModes, gameModes } from "./game-mode";
import FieldSpritePipeline from "./pipelines/field-sprite";
import SpritePipeline from "./pipelines/sprite";
import PartyExpBar from "./ui/party-exp-bar";
@ -126,7 +126,6 @@ export default class BattleScene extends SceneBase {
public uiTheme: UiTheme = UiTheme.DEFAULT;
public windowType: integer = 0;
public experimentalSprites: boolean = false;
public musicPreference: integer = 0;
public moveAnimations: boolean = true;
public expGainsSpeed: integer = 0;
public skipSeenDialogues: boolean = false;
@ -155,13 +154,6 @@ export default class BattleScene extends SceneBase {
*/
public battleStyle: integer = 0;
/**
* Defines whether or not to show type effectiveness hints
* - true: No hints
* - false: Show hints for moves
*/
public typeHints: boolean = false;
public disableMenu: boolean = false;
public gameData: GameData;
@ -234,7 +226,6 @@ export default class BattleScene extends SceneBase {
public rngSeedOverride: string = "";
public rngOffset: integer = 0;
public inputMethod: string;
private infoToggles: InfoToggle[] = [];
/**
@ -861,7 +852,7 @@ export default class BattleScene extends SceneBase {
this.gameData = new GameData(this);
}
this.gameMode = getGameMode(GameModes.CLASSIC);
this.gameMode = gameModes[GameModes.CLASSIC];
this.setSeed(Overrides.SEED_OVERRIDE || Utils.randomString(24));
console.log("Seed:", this.seed);
@ -969,8 +960,8 @@ export default class BattleScene extends SceneBase {
const playerField = this.getPlayerField();
if (this.gameMode.isFixedBattle(newWaveIndex) && trainerData === undefined) {
battleConfig = this.gameMode.getFixedBattle(newWaveIndex);
if (this.gameMode.hasFixedBattles && fixedBattles.hasOwnProperty(newWaveIndex) && trainerData === undefined) {
battleConfig = fixedBattles[newWaveIndex];
newDouble = battleConfig.double;
newBattleType = battleConfig.battleType;
this.executeWithSeedOffset(() => newTrainer = battleConfig.getTrainer(this), (battleConfig.seedOffsetWaveIndex || newWaveIndex) << 8);
@ -1018,8 +1009,7 @@ export default class BattleScene extends SceneBase {
if (Overrides.DOUBLE_BATTLE_OVERRIDE) {
newDouble = true;
}
/* Override battles into single only if not fighting with trainers */
if (newBattleType !== BattleType.TRAINER && Overrides.SINGLE_BATTLE_OVERRIDE) {
if (Overrides.SINGLE_BATTLE_OVERRIDE) {
newDouble = false;
}
@ -1391,7 +1381,8 @@ export default class BattleScene extends SceneBase {
if (this.money === undefined) {
return;
}
const formattedMoney = Utils.formatMoney(this.moneyFormat, this.money);
const formattedMoney =
this.moneyFormat === MoneyFormat.ABBREVIATED ? Utils.formatFancyLargeNumber(this.money, 3) : this.money.toLocaleString();
this.moneyText.setText(`${formattedMoney}`);
this.fieldUI.moveAbove(this.moneyText, this.luckText);
if (forceVisible) {
@ -1680,145 +1671,55 @@ export default class BattleScene extends SceneBase {
getBgmLoopPoint(bgmName: string): number {
switch (bgmName) {
case "battle_kanto_champion": //B2W2 Kanto Champion Battle
case "battle_kanto_champion":
return 13.950;
case "battle_johto_champion": //B2W2 Johto Champion Battle
case "battle_johto_champion":
return 23.498;
case "battle_hoenn_champion": //B2W2 Hoenn Champion Battle
case "battle_hoenn_champion":
return 11.328;
case "battle_sinnoh_champion": //B2W2 Sinnoh Champion Battle
case "battle_sinnoh_champion":
return 12.235;
case "battle_champion_alder": //BW Unova Champion Battle
case "battle_champion_alder":
return 27.653;
case "battle_champion_iris": //B2W2 Unova Champion Battle
case "battle_champion_iris":
return 10.145;
case "battle_kalos_champion": //XY Kalos Champion Battle
return 10.380;
case "battle_alola_champion": //USUM Alola Champion Battle
return 13.025;
case "battle_galar_champion": //SWSH Galar Champion Battle
return 61.635;
case "battle_champion_geeta": //SV Champion Geeta Battle
return 37.447;
case "battle_champion_nemona": //SV Champion Nemona Battle
return 14.914;
case "battle_champion_kieran": //SV Champion Kieran Battle
return 7.206;
case "battle_hoenn_elite": //ORAS Elite Four Battle
return 11.350;
case "battle_unova_elite": //BW Elite Four Battle
case "battle_elite":
return 17.730;
case "battle_kalos_elite": //XY Elite Four Battle
return 12.340;
case "battle_alola_elite": //SM Elite Four Battle
return 19.212;
case "battle_galar_elite": //SWSH League Tournament Battle
return 164.069;
case "battle_paldea_elite": //SV Elite Four Battle
return 12.770;
case "battle_bb_elite": //SV BB League Elite Four Battle
return 19.434;
case "battle_final_encounter": //PMD RTDX Rayquaza's Domain
case "battle_final_encounter":
return 19.159;
case "battle_final": //BW Ghetsis Battle
case "battle_final":
return 16.453;
case "battle_kanto_gym": //B2W2 Kanto Gym Battle
case "battle_kanto_gym":
return 13.857;
case "battle_johto_gym": //B2W2 Johto Gym Battle
case "battle_johto_gym":
return 12.911;
case "battle_hoenn_gym": //B2W2 Hoenn Gym Battle
case "battle_hoenn_gym":
return 12.379;
case "battle_sinnoh_gym": //B2W2 Sinnoh Gym Battle
case "battle_sinnoh_gym":
return 13.122;
case "battle_unova_gym": //BW Unova Gym Battle
case "battle_unova_gym":
return 19.145;
case "battle_kalos_gym": //XY Kalos Gym Battle
return 44.810;
case "battle_galar_gym": //SWSH Galar Gym Battle
return 171.262;
case "battle_paldea_gym": //SV Paldea Gym Battle
return 127.489;
case "battle_legendary_kanto": //XY Kanto Legendary Battle
return 32.966;
case "battle_legendary_raikou": //HGSS Raikou Battle
return 12.632;
case "battle_legendary_entei": //HGSS Entei Battle
return 2.905;
case "battle_legendary_suicune": //HGSS Suicune Battle
return 12.636;
case "battle_legendary_lugia": //HGSS Lugia Battle
return 19.770;
case "battle_legendary_ho_oh": //HGSS Ho-oh Battle
return 17.668;
case "battle_legendary_regis_g5": //B2W2 Legendary Titan Battle
case "battle_legendary_regis": //B2W2 Legendary Titan Battle
return 49.500;
case "battle_legendary_regis_g6": //ORAS Legendary Titan Battle
return 21.130;
case "battle_legendary_gro_kyo": //ORAS Groudon & Kyogre Battle
return 10.547;
case "battle_legendary_rayquaza": //ORAS Rayquaza Battle
return 10.495;
case "battle_legendary_deoxys": //ORAS Deoxys Battle
return 13.333;
case "battle_legendary_lake_trio": //ORAS Lake Guardians Battle
return 16.887;
case "battle_legendary_sinnoh": //ORAS Sinnoh Legendary Battle
return 22.770;
case "battle_legendary_dia_pal": //ORAS Dialga & Palkia Battle
return 16.009;
case "battle_legendary_giratina": //ORAS Giratina Battle
return 10.451;
case "battle_legendary_arceus": //HGSS Arceus Battle
return 9.595;
case "battle_legendary_unova": //BW Unova Legendary Battle
return 13.855;
case "battle_legendary_kyurem": //BW Kyurem Battle
return 18.314;
case "battle_legendary_res_zek": //BW Reshiram & Zekrom Battle
return 18.329;
case "battle_legendary_xern_yvel": //XY Xerneas & Yveltal Battle
return 26.468;
case "battle_legendary_tapu": //SM Tapu Battle
return 0.000;
case "battle_legendary_sol_lun": //SM Solgaleo & Lunala Battle
return 6.525;
case "battle_legendary_ub": //SM Ultra Beast Battle
return 9.818;
case "battle_legendary_dusk_dawn": //USUM Dusk Mane & Dawn Wings Necrozma Battle
return 5.211;
case "battle_legendary_ultra_nec": //USUM Ultra Necrozma Battle
return 10.344;
case "battle_legendary_zac_zam": //SWSH Zacian & Zamazenta Battle
return 11.424;
case "battle_legendary_glas_spec": //SWSH Glastrier & Spectrier Battle
return 12.503;
case "battle_legendary_calyrex": //SWSH Calyrex Battle
return 50.641;
case "battle_legendary_birds_galar": //SWSH Galarian Legendary Birds Battle
return 0.175;
case "battle_legendary_ruinous": //SV Treasures of Ruin Battle
return 6.333;
case "battle_legendary_loyal_three": //SV Loyal Three Battle
return 6.500;
case "battle_legendary_ogerpon": //SV Ogerpon Battle
return 14.335;
case "battle_legendary_terapagos": //SV Terapagos Battle
return 24.377;
case "battle_legendary_pecharunt": //SV Pecharunt Battle
return 6.508;
case "battle_rival": //BW Rival Battle
case "battle_rival":
return 13.689;
case "battle_rival_2": //BW N Battle
case "battle_rival_2":
return 17.714;
case "battle_rival_3": //BW Final N Battle
case "battle_rival_3":
return 17.586;
case "battle_trainer": //BW Trainer Battle
case "battle_trainer":
return 13.686;
case "battle_wild": //BW Wild Battle
case "battle_wild":
return 12.703;
case "battle_wild_strong": //BW Strong Wild Battle
case "battle_wild_strong":
return 13.940;
case "end_summit": //PMD RTDX Sky Tower Summit
case "end_summit":
return 30.025;
}

View File

@ -197,11 +197,7 @@ export default class Battle {
if (!this.started && this.trainer.config.encounterBgm && this.trainer.getEncounterMessages()?.length) {
return `encounter_${this.trainer.getEncounterBgm()}`;
}
if (scene.musicPreference === 0) {
return this.trainer.getBattleBgm();
} else {
return this.trainer.getMixedBattleBgm();
}
} else if (this.gameMode.isClassic && this.waveIndex > 195 && this.battleSpec !== BattleSpec.FINAL_BOSS) {
return "end_summit";
}
@ -213,13 +209,15 @@ export default class Battle {
return "battle_final_encounter";
}
if (pokemon.species.legendary || pokemon.species.subLegendary || pokemon.species.mythical) {
if (scene.musicPreference === 0) {
if (pokemon.species.speciesId === Species.REGIROCK || pokemon.species.speciesId === Species.REGICE || pokemon.species.speciesId === Species.REGISTEEL || pokemon.species.speciesId === Species.REGIGIGAS || pokemon.species.speciesId === Species.REGIELEKI || pokemon.species.speciesId === Species.REGIDRAGO) {
return "battle_legendary_regis_g5";
return "battle_legendary_regis";
}
if (pokemon.species.speciesId === Species.COBALION || pokemon.species.speciesId === Species.TERRAKION || pokemon.species.speciesId === Species.VIRIZION || pokemon.species.speciesId === Species.TORNADUS || pokemon.species.speciesId === Species.THUNDURUS || pokemon.species.speciesId === Species.LANDORUS || pokemon.species.speciesId === Species.KELDEO || pokemon.species.speciesId === Species.MELOETTA || pokemon.species.speciesId === Species.GENESECT) {
return "battle_legendary_unova";
}
if (pokemon.species.speciesId === Species.RESHIRAM || pokemon.species.speciesId === Species.ZEKROM) {
return "battle_legendary_res_zek";
}
if (pokemon.species.speciesId === Species.KYUREM) {
return "battle_legendary_kyurem";
}
@ -227,102 +225,6 @@ export default class Battle {
return "battle_legendary_res_zek";
}
return "battle_legendary_unova";
} else {
if (pokemon.species.speciesId === Species.ARTICUNO || pokemon.species.speciesId === Species.ZAPDOS || pokemon.species.speciesId === Species.MOLTRES || pokemon.species.speciesId === Species.MEWTWO || pokemon.species.speciesId === Species.MEW) {
return "battle_legendary_kanto";
}
if (pokemon.species.speciesId === Species.RAIKOU) {
return "battle_legendary_raikou";
}
if (pokemon.species.speciesId === Species.ENTEI) {
return "battle_legendary_entei";
}
if (pokemon.species.speciesId === Species.SUICUNE) {
return "battle_legendary_suicune";
}
if (pokemon.species.speciesId === Species.LUGIA) {
return "battle_legendary_lugia";
}
if (pokemon.species.speciesId === Species.HO_OH) {
return "battle_legendary_ho_oh";
}
if (pokemon.species.speciesId === Species.REGIROCK || pokemon.species.speciesId === Species.REGICE || pokemon.species.speciesId === Species.REGISTEEL || pokemon.species.speciesId === Species.REGIGIGAS || pokemon.species.speciesId === Species.REGIELEKI || pokemon.species.speciesId === Species.REGIDRAGO) {
return "battle_legendary_regis_g6";
}
if (pokemon.species.speciesId === Species.GROUDON || pokemon.species.speciesId === Species.KYOGRE) {
return "battle_legendary_gro_kyo";
}
if (pokemon.species.speciesId === Species.RAYQUAZA) {
return "battle_legendary_rayquaza";
}
if (pokemon.species.speciesId === Species.DEOXYS) {
return "battle_legendary_deoxys";
}
if (pokemon.species.speciesId === Species.UXIE || pokemon.species.speciesId === Species.MESPRIT || pokemon.species.speciesId === Species.AZELF) {
return "battle_legendary_lake_trio";
}
if (pokemon.species.speciesId === Species.HEATRAN || pokemon.species.speciesId === Species.CRESSELIA || pokemon.species.speciesId === Species.DARKRAI || pokemon.species.speciesId === Species.SHAYMIN) {
return "battle_legendary_sinnoh";
}
if (pokemon.species.speciesId === Species.DIALGA || pokemon.species.speciesId === Species.PALKIA) {
return "battle_legendary_dia_pal";
}
if (pokemon.species.speciesId === Species.GIRATINA) {
return "battle_legendary_giratina";
}
if (pokemon.species.speciesId === Species.ARCEUS) {
return "battle_legendary_arceus";
}
if (pokemon.species.speciesId === Species.COBALION || pokemon.species.speciesId === Species.TERRAKION || pokemon.species.speciesId === Species.VIRIZION || pokemon.species.speciesId === Species.TORNADUS || pokemon.species.speciesId === Species.THUNDURUS || pokemon.species.speciesId === Species.LANDORUS || pokemon.species.speciesId === Species.KELDEO || pokemon.species.speciesId === Species.MELOETTA || pokemon.species.speciesId === Species.GENESECT) {
return "battle_legendary_unova";
}
if (pokemon.species.speciesId === Species.KYUREM) {
return "battle_legendary_kyurem";
}
if (pokemon.species.speciesId === Species.XERNEAS || pokemon.species.speciesId === Species.YVELTAL || pokemon.species.speciesId === Species.ZYGARDE) {
return "battle_legendary_xern_yvel";
}
if (pokemon.species.speciesId === Species.TAPU_KOKO || pokemon.species.speciesId === Species.TAPU_LELE || pokemon.species.speciesId === Species.TAPU_BULU || pokemon.species.speciesId === Species.TAPU_FINI) {
return "battle_legendary_tapu";
}
if (pokemon.species.speciesId === Species.COSMOG || pokemon.species.speciesId === Species.COSMOEM || pokemon.species.speciesId === Species.SOLGALEO || pokemon.species.speciesId === Species.LUNALA || pokemon.species.speciesId === Species.NECROZMA) {
return "battle_legendary_sol_lun";
}
if (pokemon.species.speciesId === Species.NIHILEGO || pokemon.species.speciesId === Species.BUZZWOLE || pokemon.species.speciesId === Species.PHEROMOSA || pokemon.species.speciesId === Species.XURKITREE || pokemon.species.speciesId === Species.CELESTEELA || pokemon.species.speciesId === Species.KARTANA || pokemon.species.speciesId === Species.GUZZLORD || pokemon.species.speciesId === Species.POIPOLE || pokemon.species.speciesId === Species.NAGANADEL || pokemon.species.speciesId === Species.STAKATAKA || pokemon.species.speciesId === Species.BLACEPHALON) {
return "battle_legendary_ub";
}
if (pokemon.species.speciesId === Species.ZACIAN || pokemon.species.speciesId === Species.ZAMAZENTA) {
return "battle_legendary_zac_zam";
}
if (pokemon.species.speciesId === Species.GLASTRIER || pokemon.species.speciesId === Species.SPECTRIER) {
return "battle_legendary_glas_spec";
}
if (pokemon.species.speciesId === Species.CALYREX) {
return "battle_legendary_calyrex";
}
if (pokemon.species.speciesId === Species.GALAR_ARTICUNO || pokemon.species.speciesId === Species.GALAR_ZAPDOS || pokemon.species.speciesId === Species.GALAR_MOLTRES) {
return "battle_legendary_birds_galar";
}
if (pokemon.species.speciesId === Species.WO_CHIEN || pokemon.species.speciesId === Species.CHIEN_PAO || pokemon.species.speciesId === Species.TING_LU || pokemon.species.speciesId === Species.CHI_YU) {
return "battle_legendary_ruinous";
}
if (pokemon.species.speciesId === Species.OKIDOGI || pokemon.species.speciesId === Species.MUNKIDORI || pokemon.species.speciesId === Species.FEZANDIPITI) {
return "battle_legendary_loyal_three";
}
if (pokemon.species.speciesId === Species.OGERPON) {
return "battle_legendary_ogerpon";
}
if (pokemon.species.speciesId === Species.TERAPAGOS) {
return "battle_legendary_terapagos";
}
if (pokemon.species.speciesId === Species.PECHARUNT) {
return "battle_legendary_pecharunt";
}
if (pokemon.species.legendary) {
return "battle_legendary_res_zek";
}
return "battle_legendary_unova";
}
}
}
@ -420,11 +322,11 @@ function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[]): Get
};
}
export interface FixedBattleConfigs {
interface FixedBattleConfigs {
[key: integer]: FixedBattleConfig
}
export const classicFixedBattles: FixedBattleConfigs = {
export const fixedBattles: FixedBattleConfigs = {
[5]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.YOUNGSTER, Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[8]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
@ -438,13 +340,13 @@ export const classicFixedBattles: FixedBattleConfigs = {
[145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_5, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[182]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, [ TrainerType.HALA, TrainerType.MOLAYNE ], TrainerType.MARNIE_ELITE, TrainerType.RIKA, TrainerType.CRISPIN ])),
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, [ TrainerType.HALA, TrainerType.MOLAYNE ],TrainerType.MARNIE_ELITE, TrainerType.RIKA, TrainerType.CRISPIN ])),
[184]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.BRUNO, TrainerType.KOGA, TrainerType.PHOEBE, TrainerType.BERTHA, TrainerType.MARSHAL, TrainerType.SIEBOLD, TrainerType.OLIVIA, TrainerType.NESSA_ELITE, TrainerType.POPPY, TrainerType.AMARYS ])),
[186]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.AGATHA, TrainerType.BRUNO, TrainerType.GLACIA, TrainerType.FLINT, TrainerType.GRIMSLEY, TrainerType.WIKSTROM, TrainerType.ACEROLA, [ TrainerType.BEA_ELITE, TrainerType.ALLISTER_ELITE ], TrainerType.LARRY_ELITE, TrainerType.LACEY ])),
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.AGATHA, TrainerType.BRUNO, TrainerType.GLACIA, TrainerType.FLINT, TrainerType.GRIMSLEY, TrainerType.WIKSTROM, TrainerType.ACEROLA, [TrainerType.BEA_ELITE,TrainerType.ALLISTER_ELITE], TrainerType.LARRY_ELITE, TrainerType.LACEY ])),
[188]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI, TrainerType.RAIHAN_ELITE, TrainerType.HASSEL, TrainerType.DRAYTON ])),
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI,TrainerType.RAIHAN_ELITE, TrainerType.HASSEL, TrainerType.DRAYTON ])),
[190]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.BLUE, [ TrainerType.RED, TrainerType.LANCE_CHAMPION ], [ TrainerType.STEVEN, TrainerType.WALLACE ], TrainerType.CYNTHIA, [ TrainerType.ALDER, TrainerType.IRIS ], TrainerType.DIANTHA, TrainerType.HAU, TrainerType.LEON, [ TrainerType.GEETA, TrainerType.NEMONA ], TrainerType.KIERAN ])),
[195]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)

View File

@ -2949,7 +2949,6 @@ export class ArenaTrapAbAttr extends CheckTrappedAbAttr {
/**
* Checks if enemy Pokemon is trapped by an Arena Trap-esque ability
* If the enemy is a Ghost type, it is not trapped
* If the enemy has the ability Run Away, it is not trapped.
* If the user has Magnet Pull and the enemy is not a Steel type, it is not trapped.
* If the user has Arena Trap and the enemy is not grounded, it is not trapped.
* @param pokemon The {@link Pokemon} with this {@link AbAttr}
@ -2964,9 +2963,6 @@ export class ArenaTrapAbAttr extends CheckTrappedAbAttr {
if (otherPokemon.getTypes(true).includes(Type.GHOST) || (otherPokemon.getTypes(true).includes(Type.STELLAR) && otherPokemon.getTypes().includes(Type.GHOST))) {
trapped.value = false;
return false;
} else if (otherPokemon.hasAbility(Abilities.RUN_AWAY)) {
trapped.value = false;
return false;
}
trapped.value = true;
return true;

View File

@ -1,577 +0,0 @@
import * as Utils from "../utils";
import { Challenges } from "./enums/challenges";
import i18next from "#app/plugins/i18n.js";
import { GameData } from "#app/system/game-data.js";
import PokemonSpecies, { getPokemonSpecies, speciesStarters } from "./pokemon-species";
import Pokemon from "#app/field/pokemon.js";
import { BattleType, FixedBattleConfig } from "#app/battle.js";
import { TrainerType } from "./enums/trainer-type";
import Trainer, { TrainerVariant } from "#app/field/trainer.js";
import { GameMode } from "#app/game-mode.js";
import { Species } from "./enums/species";
import { Type } from "./type";
/**
* An enum for all the challenge types. The parameter entries on these describe the
* parameters to use when calling the applyChallenges function.
*/
export enum ChallengeType {
/**
* Challenges which modify what starters you can choose
* @param args [0] {@link PokemonSpecies} The species to check
* [1] {@link Utils.BooleanHolder} Sets to false if illegal, pass in true.
*/
STARTER_CHOICE,
/**
* Challenges which modify how many starter points you have
* @param args [0] {@link Utils.NumberHolder} The amount of starter points you have
*/
STARTER_POINTS,
/**
* Challenges which modify your starters in some way
* Not Fully Implemented
*/
STARTER_MODIFY,
/**
* Challenges which limit which pokemon you can have in battle.
* @param args [0] {@link Pokemon} The pokemon to check
* [1] {@link Utils.BooleanHolder} Sets to false if illegal, pass in true.
*/
POKEMON_IN_BATTLE,
/**
* Adds or modifies the fixed battles in a run
* @param args [0] integer The wave to get a battle for
* [1] {@link FixedBattleConfig} A new fixed battle. It'll be modified if a battle exists.
*/
FIXED_BATTLES,
}
/**
* A challenge object. Exists only to serve as a base class.
*/
export abstract class Challenge {
public id: Challenges; // The id of the challenge
public value: integer; // The "strength" of the challenge, all challenges have a numerical value.
public maxValue: integer; // The maximum strength of the challenge.
public severity: integer; // The current severity of the challenge. Some challenges have multiple severities in addition to strength.
public maxSeverity: integer; // The maximum severity of the challenge.
public conditions: ChallengeCondition[];
public challengeTypes: ChallengeType[];
/**
* @param {Challenges} id The enum value for the challenge
*/
constructor(id: Challenges, maxValue: integer = Number.MAX_SAFE_INTEGER) {
this.id = id;
this.value = 0;
this.maxValue = maxValue;
this.severity = 0;
this.maxSeverity = 0;
this.conditions = [];
this.challengeTypes = [];
}
/**
* Reset the challenge to a base state.
*/
reset(): void {
this.value = 0;
this.severity = 0;
}
/**
* Gets the localisation key for the challenge
* @returns The i18n key for this challenge
*/
geti18nKey(): string {
return Challenges[this.id].split("_").map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join("");
}
/**
* Used for unlockable challenges to check if they're unlocked.
* @param {GameData} data The save data.
* @returns {boolean} Whether this challenge is unlocked.
*/
isUnlocked(data: GameData): boolean {
return this.conditions.every(f => f(data));
}
/**
* Adds an unlock condition to this challenge.
* @param {ChallengeCondition} condition The condition to add.
* @returns {Challenge} This challenge
*/
condition(condition: ChallengeCondition): Challenge {
this.conditions.push(condition);
return this;
}
/**
* If this challenge is of a particular type
* @param {ChallengeType} challengeType The challenge type to check.
* @returns {Challenge} This challenge
*/
isOfType(challengeType: ChallengeType): boolean {
return this.challengeTypes.some(c => c === challengeType);
}
/**
* Adds a challenge type to this challenge.
* @param {ChallengeType} challengeType The challenge type to add.
* @returns {Challenge} This challenge
*/
addChallengeType(challengeType: ChallengeType): Challenge {
this.challengeTypes.push(challengeType);
return this;
}
/**
* @returns {string} The localised name of this challenge.
*/
getName(): string {
return i18next.t(`challenges:${this.geti18nKey()}.name`);
}
/**
* Returns the textual representation of a challenge's current value.
* @param {value} overrideValue The value to check for. If undefined, gets the current value.
* @returns {string} The localised name for the current value.
*/
getValue(overrideValue?: integer): string {
if (overrideValue === undefined) {
overrideValue = this.value;
}
return i18next.t(`challenges:${this.geti18nKey()}.value.${this.value}`);
}
/**
* Returns the description of a challenge's current value.
* @param {value} overrideValue The value to check for. If undefined, gets the current value.
* @returns {string} The localised description for the current value.
*/
getDescription(overrideValue?: integer): string {
if (overrideValue === undefined) {
overrideValue = this.value;
}
return i18next.t(`challenges:${this.geti18nKey()}.desc.${this.value}`);
}
/**
* Increase the value of the challenge
* @returns {boolean} Returns true if the value changed
*/
increaseValue(): boolean {
if (this.value < this.maxValue) {
this.value = Math.min(this.value + 1, this.maxValue);
return true;
}
return false;
}
/**
* Decrease the value of the challenge
* @returns {boolean} Returns true if the value changed
*/
decreaseValue(): boolean {
if (this.value > 0) {
this.value = Math.max(this.value - 1, 0);
return true;
}
return false;
}
/**
* Whether to allow choosing this challenge's severity.
*/
hasSeverity(): boolean {
return this.value !== 0 && this.maxSeverity > 0;
}
/**
* Decrease the severity of the challenge
* @returns {boolean} Returns true if the value changed
*/
decreaseSeverity(): boolean {
if (this.severity > 0) {
this.severity = Math.max(this.severity - 1, 0);
return true;
}
return false;
}
/**
* Increase the severity of the challenge
* @returns {boolean} Returns true if the value changed
*/
increaseSeverity(): boolean {
if (this.severity < this.maxSeverity) {
this.severity = Math.min(this.severity + 1, this.maxSeverity);
return true;
}
return false;
}
/**
* Gets the "difficulty" value of this challenge.
* @returns {integer} The difficulty value.
*/
getDifficulty(): integer {
return this.value;
}
/**
* Gets the minimum difficulty added by this challenge.
* @returns {integer} The difficulty value.
*/
getMinDifficulty(): integer {
return 0;
}
/**
* Modifies the data or game state in some way to apply the challenge.
* @param {ChallengeType} challengeType Which challenge type this is being applied for.
* @param args Irrelevant. See the specific challenge's apply function for additional information.
*/
abstract apply(challengeType: ChallengeType, args: any[]): boolean;
/**
* Clones a challenge, either from another challenge or json. Chainable.
* @param {Challenge | any} source The source challenge of json.
* @returns {Challenge} This challenge.
*/
static loadChallenge(source: Challenge | any): Challenge {
throw new Error("Method not implemented! Use derived class");
}
}
type ChallengeCondition = (data: GameData) => boolean;
/**
* Implements a mono generation challenge.
*/
export class SingleGenerationChallenge extends Challenge {
constructor() {
super(Challenges.SINGLE_GENERATION, 9);
this.addChallengeType(ChallengeType.STARTER_CHOICE);
this.addChallengeType(ChallengeType.POKEMON_IN_BATTLE);
this.addChallengeType(ChallengeType.FIXED_BATTLES);
}
apply(challengeType: ChallengeType, args: any[]): boolean {
if (this.value === 0) {
return false;
}
/**
* We have special code below for victini because it is classed as a generation 4 pokemon in the code
* despite being a generation 5 pokemon. This is due to UI constraints, the starter select screen has
* no more room for pokemon so victini is put in the gen 4 section instead. This code just overrides the
* normal generation check to correctly treat victini as gen 5.
*/
switch (challengeType) {
case ChallengeType.STARTER_CHOICE:
const species = args[0] as PokemonSpecies;
const isValidStarter = args[1] as Utils.BooleanHolder;
const starterGeneration = species.speciesId === Species.VICTINI ? 5 : species.generation;
if (starterGeneration !== this.value) {
isValidStarter.value = false;
return true;
}
break;
case ChallengeType.POKEMON_IN_BATTLE:
const pokemon = args[0] as Pokemon;
const isValidPokemon = args[1] as Utils.BooleanHolder;
const baseGeneration = pokemon.species.speciesId === Species.VICTINI ? 5 : getPokemonSpecies(pokemon.species.speciesId).generation;
const fusionGeneration = pokemon.isFusion() ? pokemon.fusionSpecies.speciesId === Species.VICTINI ? 5 : getPokemonSpecies(pokemon.fusionSpecies.speciesId).generation : 0;
if (pokemon.isPlayer() && (baseGeneration !== this.value || (pokemon.isFusion() && fusionGeneration !== this.value))) {
isValidPokemon.value = false;
return true;
}
break;
case ChallengeType.FIXED_BATTLES:
const waveIndex = args[0] as integer;
const battleConfig = args[1] as FixedBattleConfig;
let trainerTypes: TrainerType[] = [];
switch (waveIndex) {
case 182:
trainerTypes = [ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, Utils.randSeedItem([ TrainerType.HALA, TrainerType.MOLAYNE ]),TrainerType.MARNIE_ELITE, TrainerType.RIKA ];
break;
case 184:
trainerTypes = [ TrainerType.BRUNO, TrainerType.KOGA, TrainerType.PHOEBE, TrainerType.BERTHA, TrainerType.MARSHAL, TrainerType.SIEBOLD, TrainerType.OLIVIA, TrainerType.NESSA_ELITE, TrainerType.POPPY ];
break;
case 186:
trainerTypes = [ TrainerType.AGATHA, TrainerType.BRUNO, TrainerType.GLACIA, TrainerType.FLINT, TrainerType.GRIMSLEY, TrainerType.WIKSTROM, TrainerType.ACEROLA, Utils.randSeedItem([TrainerType.BEA_ELITE,TrainerType.ALLISTER_ELITE]), TrainerType.LARRY_ELITE ];
break;
case 188:
trainerTypes = [ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI, TrainerType.RAIHAN_ELITE, TrainerType.HASSEL ];
break;
case 190:
trainerTypes = [ TrainerType.BLUE, Utils.randSeedItem([ TrainerType.RED, TrainerType.LANCE_CHAMPION ]), Utils.randSeedItem([ TrainerType.STEVEN, TrainerType.WALLACE ]), TrainerType.CYNTHIA, Utils.randSeedItem([ TrainerType.ALDER, TrainerType.IRIS ]), TrainerType.DIANTHA, TrainerType.HAU, TrainerType.LEON, Utils.randSeedItem([ TrainerType.GEETA, TrainerType.NEMONA ]) ];
break;
}
if (trainerTypes.length === 0) {
return false;
} else {
battleConfig.setBattleType(BattleType.TRAINER).setGetTrainerFunc(scene => new Trainer(scene, trainerTypes[this.value - 1], TrainerVariant.DEFAULT));
return true;
}
}
return false;
}
/**
* @overrides
*/
getDifficulty(): number {
return this.value > 0 ? 1 : 0;
}
static loadChallenge(source: SingleGenerationChallenge | any): SingleGenerationChallenge {
const newChallenge = new SingleGenerationChallenge();
newChallenge.value = source.value;
newChallenge.severity = source.severity;
return newChallenge;
}
}
interface monotypeOverride {
/** The species to override */
species: Species;
/** The type to count as */
type: Type;
/** If part of a fusion, should we check the fused species instead of the base species? */
fusion: boolean;
}
/**
* Implements a mono type challenge.
*/
export class SingleTypeChallenge extends Challenge {
private static TYPE_OVERRIDES: monotypeOverride[] = [
{species: Species.MELOETTA, type: Type.PSYCHIC, fusion: true},
{species: Species.CASTFORM, type: Type.NORMAL, fusion: false},
];
constructor() {
super(Challenges.SINGLE_TYPE, 18);
this.addChallengeType(ChallengeType.STARTER_CHOICE);
this.addChallengeType(ChallengeType.POKEMON_IN_BATTLE);
}
apply(challengeType: ChallengeType, args: any[]): boolean {
if (this.value === 0) {
return false;
}
switch (challengeType) {
case ChallengeType.STARTER_CHOICE:
const species = args[0] as PokemonSpecies;
const isValidStarter = args[1] as Utils.BooleanHolder;
if (!species.isOfType(this.value - 1)) {
isValidStarter.value = false;
return true;
}
break;
case ChallengeType.POKEMON_IN_BATTLE:
const pokemon = args[0] as Pokemon;
const isValidPokemon = args[1] as Utils.BooleanHolder;
if (pokemon.isPlayer() && !pokemon.isOfType(this.value - 1, false, false, true)
&& !SingleTypeChallenge.TYPE_OVERRIDES.some(o => o.type === (this.value - 1) && (pokemon.isFusion() && o.fusion ? pokemon.fusionSpecies : pokemon.species).speciesId === o.species)) {
isValidPokemon.value = false;
return true;
}
break;
}
return false;
}
/**
* @overrides
*/
getDifficulty(): number {
return this.value > 0 ? 1 : 0;
}
static loadChallenge(source: SingleTypeChallenge | any): SingleTypeChallenge {
const newChallenge = new SingleTypeChallenge();
newChallenge.value = source.value;
newChallenge.severity = source.severity;
return newChallenge;
}
}
/**
* Implements a fresh start challenge.
*/
export class FreshStartChallenge extends Challenge {
constructor() {
super(Challenges.FRESH_START, 1);
this.addChallengeType(ChallengeType.STARTER_CHOICE);
this.addChallengeType(ChallengeType.STARTER_MODIFY);
}
apply(challengeType: ChallengeType, args: any[]): boolean {
if (this.value === 0) {
return false;
}
switch (challengeType) {
case ChallengeType.STARTER_CHOICE:
const species = args[0] as PokemonSpecies;
const isValidStarter = args[1] as Utils.BooleanHolder;
if (species) {
isValidStarter.value = false;
return true;
}
break;
}
return false;
}
/**
* @overrides
*/
getDifficulty(): number {
return 0;
}
static loadChallenge(source: FreshStartChallenge | any): FreshStartChallenge {
const newChallenge = new FreshStartChallenge();
newChallenge.value = source.value;
newChallenge.severity = source.severity;
return newChallenge;
}
}
/**
* Lowers the amount of starter points available.
*/
export class LowerStarterMaxCostChallenge extends Challenge {
constructor() {
super(Challenges.LOWER_MAX_STARTER_COST, 9);
this.addChallengeType(ChallengeType.STARTER_CHOICE);
}
/**
* @override
*/
getValue(overrideValue?: integer): string {
if (overrideValue === undefined) {
overrideValue = this.value;
}
return (10 - overrideValue).toString();
}
apply(challengeType: ChallengeType, args: any[]): boolean {
if (this.value === 0) {
return false;
}
switch (challengeType) {
case ChallengeType.STARTER_CHOICE:
const species = args[0] as PokemonSpecies;
const isValid = args[1] as Utils.BooleanHolder;
if (speciesStarters[species.speciesId] > 10 - this.value) {
isValid.value = false;
return true;
}
}
return false;
}
static loadChallenge(source: LowerStarterMaxCostChallenge | any): LowerStarterMaxCostChallenge {
const newChallenge = new LowerStarterMaxCostChallenge();
newChallenge.value = source.value;
newChallenge.severity = source.severity;
return newChallenge;
}
}
/**
* Lowers the maximum cost of starters available.
*/
export class LowerStarterPointsChallenge extends Challenge {
constructor() {
super(Challenges.LOWER_STARTER_POINTS, 9);
this.addChallengeType(ChallengeType.STARTER_POINTS);
}
/**
* @override
*/
getValue(overrideValue?: integer): string {
if (overrideValue === undefined) {
overrideValue = this.value;
}
return (10 - overrideValue).toString();
}
apply(challengeType: ChallengeType, args: any[]): boolean {
if (this.value === 0) {
return false;
}
switch (challengeType) {
case ChallengeType.STARTER_POINTS:
const points = args[0] as Utils.NumberHolder;
points.value -= this.value;
return true;
}
return false;
}
static loadChallenge(source: LowerStarterPointsChallenge | any): LowerStarterPointsChallenge {
const newChallenge = new LowerStarterPointsChallenge();
newChallenge.value = source.value;
newChallenge.severity = source.severity;
return newChallenge;
}
}
/**
* Apply all challenges of a given challenge type.
* @param {BattleScene} scene The current scene
* @param {ChallengeType} challengeType What challenge type to apply
* @param {any[]} args Any args for that challenge type
* @returns {boolean} True if any challenge was successfully applied.
*/
export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType, ...args: any[]): boolean {
let ret = false;
gameMode.challenges.forEach(v => {
if (v.isOfType(challengeType)) {
ret ||= v.apply(challengeType, args);
}
});
return ret;
}
export function copyChallenge(source: Challenge | any): Challenge {
switch (source.id) {
case Challenges.SINGLE_GENERATION:
return SingleGenerationChallenge.loadChallenge(source);
case Challenges.SINGLE_TYPE:
return SingleTypeChallenge.loadChallenge(source);
case Challenges.LOWER_MAX_STARTER_COST:
return LowerStarterMaxCostChallenge.loadChallenge(source);
case Challenges.LOWER_STARTER_POINTS:
return LowerStarterPointsChallenge.loadChallenge(source);
}
throw new Error("Unknown challenge copied");
}
export const allChallenges: Challenge[] = [];
export function initChallenges() {
allChallenges.push(
new SingleGenerationChallenge(),
new SingleTypeChallenge(),
// new LowerStarterMaxCostChallenge(),
// new LowerStarterPointsChallenge(),
// new FreshStartChallenge()
);
}

View File

@ -1,5 +1,6 @@
import BattleScene from "../battle-scene";
import { PlayerPokemon } from "../field/pokemon";
import { GameModes, gameModes } from "../game-mode";
import { Starter } from "../ui/starter-select-ui-handler";
import * as Utils from "../utils";
import { Species } from "./enums/species";
@ -28,7 +29,7 @@ export function getDailyRunStarters(scene: BattleScene, seed: string): Starter[]
const starters: Starter[] = [];
scene.executeWithSeedOffset(() => {
const startingLevel = scene.gameMode.getStartingLevel();
const startingLevel = gameModes[GameModes.DAILY].getStartingLevel();
if (/\d{18}$/.test(seed)) {
for (let s = 0; s < 3; s++) {

View File

@ -1,7 +0,0 @@
export enum Challenges {
SINGLE_GENERATION,
SINGLE_TYPE,
LOWER_MAX_STARTER_COST,
LOWER_STARTER_POINTS,
FRESH_START
}

View File

@ -3323,10 +3323,65 @@ export class VariableMoveTypeAttr extends MoveAttr {
export class FormChangeItemTypeAttr extends VariableMoveTypeAttr {
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.ARCEUS) || [user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.SILVALLY)) {
if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.ARCEUS && Species.SILVALLY)) {
const form = user.species.speciesId === Species.ARCEUS || user.species.speciesId === Species.SILVALLY ? user.formIndex : user.fusionSpecies.formIndex;
move.type = Type[Type[form]];
switch (form) {
case 1: // Fist Plate / Fighting Memory
move.type = Type.FIGHTING;
break;
case 2: // Sky Plate / Flying Memory
move.type = Type.FLYING;
break;
case 3: // Toxic Plate / Poison Memory
move.type = Type.POISON;
break;
case 4: // Earth Plate / Ground Memory
move.type = Type.GROUND;
break;
case 5: // Stone Plate / Rock Memory
move.type = Type.ROCK;
break;
case 6: // Insect Plate / Bug Memory
move.type = Type.BUG;
break;
case 7: // Spooky Plate / Ghost Memory
move.type = Type.GHOST;
break;
case 8: // Iron Plate / Steel Memory
move.type = Type.STEEL;
break;
case 9: // Flame Plate / Fire Memory
move.type = Type.FIRE;
break;
case 10: // Splash Plate / Water Memory
move.type = Type.WATER;
break;
case 11: // Meadow Plate / Grass Memory
move.type = Type.GRASS;
break;
case 12: // Zap Plate / Electric Memory
move.type = Type.ELECTRIC;
break;
case 13: // Mind Plate / Psychic Memory
move.type = Type.PSYCHIC;
break;
case 14: // Icicle Plate / Ice Memory
move.type = Type.ICE;
break;
case 15: // Draco Plate / Dragon Memory
move.type = Type.DRAGON;
break;
case 16: // Dread Plate / Dark Memory
move.type = Type.DARK;
break;
case 17: // Pixie Plate / Fairy Memory
move.type = Type.FAIRY;
break;
default:
move.type = Type.NORMAL;
break;
}
return true;
}
@ -4429,7 +4484,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
}
const party = player ? user.scene.getParty() : user.scene.getEnemyParty();
return (!player && !user.scene.currentBattle.battleType) || party.filter(p => p.isAllowedInBattle() && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > user.scene.currentBattle.getBattlerCount();
return (!player && !user.scene.currentBattle.battleType) || party.filter(p => !p.isFainted() && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > user.scene.currentBattle.getBattlerCount();
};
}
@ -6018,7 +6073,7 @@ export function initMoves() {
], true)
.attr(RemoveArenaTrapAttr),
new StatusMove(Moves.SWEET_SCENT, Type.NORMAL, 100, 20, -1, 0, 2)
.attr(StatChangeAttr, BattleStat.EVA, -2)
.attr(StatChangeAttr, BattleStat.EVA, -1)
.target(MoveTarget.ALL_NEAR_ENEMIES),
new AttackMove(Moves.IRON_TAIL, Type.STEEL, MoveCategory.PHYSICAL, 100, 75, 15, 30, 0, 2)
.attr(StatChangeAttr, BattleStat.DEF, -1),

View File

@ -187,7 +187,6 @@ export class TrainerConfig {
public isBoss: boolean = false;
public hasStaticParty: boolean = false;
public useSameSeedForAllMembers: boolean = false;
public mixedBattleBgm: string;
public battleBgm: string;
public encounterBgm: string;
public femaleEncounterBgm: string;
@ -441,11 +440,6 @@ export class TrainerConfig {
return this;
}
setMixedBattleBgm(mixedBattleBgm: string): TrainerConfig {
this.mixedBattleBgm = mixedBattleBgm;
return this;
}
setBattleBgm(battleBgm: string): TrainerConfig {
this.battleBgm = battleBgm;
return this;
@ -611,7 +605,7 @@ export class TrainerConfig {
this.setMoneyMultiplier(3.25);
this.setBoss();
this.setStaticParty();
this.setBattleBgm("battle_unova_elite");
this.setBattleBgm("battle_elite");
this.setVictoryBgm("victory_gym");
this.setGenModifiersFunc(party => getRandomTeraModifiers(party, 2, specialtyTypes.length ? specialtyTypes : null));
@ -1148,76 +1142,76 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.BRYCEN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRYCEN"],true, Type.ICE),
[TrainerType.DRAYDEN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["DRAYDEN"],true, Type.DRAGON),
[TrainerType.MARLON]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MARLON"],true, Type.WATER),
[TrainerType.VIOLA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["VIOLA"],false, Type.BUG).setMixedBattleBgm("battle_kalos_gym"),
[TrainerType.GRANT]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GRANT"],true, Type.ROCK).setMixedBattleBgm("battle_kalos_gym"),
[TrainerType.KORRINA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KORRINA"],false, Type.FIGHTING).setMixedBattleBgm("battle_kalos_gym"),
[TrainerType.RAMOS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["RAMOS"],true, Type.GRASS).setMixedBattleBgm("battle_kalos_gym"),
[TrainerType.CLEMONT]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CLEMONT"],true, Type.ELECTRIC).setMixedBattleBgm("battle_kalos_gym"),
[TrainerType.VALERIE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["VALERIE"],false, Type.FAIRY).setMixedBattleBgm("battle_kalos_gym"),
[TrainerType.OLYMPIA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["OLYMPIA"],false, Type.PSYCHIC).setMixedBattleBgm("battle_kalos_gym"),
[TrainerType.WULFRIC]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WULFRIC"],true, Type.ICE).setMixedBattleBgm("battle_kalos_gym"),
[TrainerType.MILO]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MILO"],true, Type.GRASS).setMixedBattleBgm("battle_galar_gym"),
[TrainerType.NESSA]: new TrainerConfig(++t).setName("Nessa").initForGymLeader(signatureSpecies["NESSA"],false, Type.WATER).setMixedBattleBgm("battle_galar_gym"),
[TrainerType.KABU]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KABU"],true, Type.FIRE).setMixedBattleBgm("battle_galar_gym"),
[TrainerType.BEA]: new TrainerConfig(++t).setName("Bea").initForGymLeader(signatureSpecies["BEA"],false, Type.FIGHTING).setMixedBattleBgm("battle_galar_gym"),
[TrainerType.ALLISTER]: new TrainerConfig(++t).setName("Allister").initForGymLeader(signatureSpecies["ALLISTER"],true, Type.GHOST).setMixedBattleBgm("battle_galar_gym"),
[TrainerType.OPAL]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["OPAL"],false, Type.FAIRY).setMixedBattleBgm("battle_galar_gym"),
[TrainerType.BEDE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BEDE"],true, Type.FAIRY).setMixedBattleBgm("battle_galar_gym"),
[TrainerType.GORDIE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GORDIE"],true, Type.ROCK).setMixedBattleBgm("battle_galar_gym"),
[TrainerType.MELONY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MELONY"],false, Type.ICE).setMixedBattleBgm("battle_galar_gym"),
[TrainerType.PIERS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["PIERS"],true, Type.DARK).setHasDouble("piers_marnie_double").setDoubleTrainerType(TrainerType.MARNIE).setDoubleTitle("gym_leader_double").setMixedBattleBgm("battle_galar_gym"),
[TrainerType.MARNIE]: new TrainerConfig(++t).setName("Marnie").initForGymLeader(signatureSpecies["MARNIE"],false, Type.DARK).setHasDouble("marnie_piers_double").setDoubleTrainerType(TrainerType.PIERS).setDoubleTitle("gym_leader_double").setMixedBattleBgm("battle_galar_gym"),
[TrainerType.RAIHAN]: new TrainerConfig(++t).setName("Raihan").initForGymLeader(signatureSpecies["RAIHAN"],true, Type.DRAGON).setMixedBattleBgm("battle_galar_gym"),
[TrainerType.KATY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KATY"],false, Type.BUG).setMixedBattleBgm("battle_paldea_gym"),
[TrainerType.BRASSIUS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRASSIUS"],true, Type.GRASS).setMixedBattleBgm("battle_paldea_gym"),
[TrainerType.IONO]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["IONO"],false, Type.ELECTRIC).setMixedBattleBgm("battle_paldea_gym"),
[TrainerType.KOFU]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KOFU"],true, Type.WATER).setMixedBattleBgm("battle_paldea_gym"),
[TrainerType.LARRY]: new TrainerConfig(++t).setName("Larry").initForGymLeader(signatureSpecies["LARRY"],true, Type.NORMAL).setMixedBattleBgm("battle_paldea_gym"),
[TrainerType.RYME]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["RYME"],false, Type.GHOST).setMixedBattleBgm("battle_paldea_gym"),
[TrainerType.TULIP]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["TULIP"],false, Type.PSYCHIC).setMixedBattleBgm("battle_paldea_gym"),
[TrainerType.GRUSHA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GRUSHA"],true, Type.ICE).setMixedBattleBgm("battle_paldea_gym"),
[TrainerType.VIOLA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["VIOLA"],false, Type.BUG),
[TrainerType.GRANT]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GRANT"],true, Type.ROCK),
[TrainerType.KORRINA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KORRINA"],false, Type.FIGHTING),
[TrainerType.RAMOS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["RAMOS"],true, Type.GRASS),
[TrainerType.CLEMONT]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CLEMONT"],true, Type.ELECTRIC),
[TrainerType.VALERIE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["VALERIE"],false, Type.FAIRY),
[TrainerType.OLYMPIA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["OLYMPIA"],false, Type.PSYCHIC),
[TrainerType.WULFRIC]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WULFRIC"],true, Type.ICE),
[TrainerType.MILO]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MILO"],true, Type.GRASS),
[TrainerType.NESSA]: new TrainerConfig(++t).setName("Nessa").initForGymLeader(signatureSpecies["NESSA"],false, Type.WATER),
[TrainerType.KABU]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KABU"],true, Type.FIRE),
[TrainerType.BEA]: new TrainerConfig(++t).setName("Bea").initForGymLeader(signatureSpecies["BEA"],false, Type.FIGHTING),
[TrainerType.ALLISTER]: new TrainerConfig(++t).setName("Allister").initForGymLeader(signatureSpecies["ALLISTER"],true, Type.GHOST),
[TrainerType.OPAL]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["OPAL"],false, Type.FAIRY),
[TrainerType.BEDE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BEDE"],true, Type.FAIRY),
[TrainerType.GORDIE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GORDIE"],true, Type.ROCK),
[TrainerType.MELONY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MELONY"],false, Type.ICE),
[TrainerType.PIERS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["PIERS"],true, Type.DARK).setHasDouble("piers_marnie_double").setDoubleTrainerType(TrainerType.MARNIE).setDoubleTitle("gym_leader_double"),
[TrainerType.MARNIE]: new TrainerConfig(++t).setName("Marnie").initForGymLeader(signatureSpecies["MARNIE"],false, Type.DARK).setHasDouble("marnie_piers_double").setDoubleTrainerType(TrainerType.PIERS).setDoubleTitle("gym_leader_double"),
[TrainerType.RAIHAN]: new TrainerConfig(++t).setName("Raihan").initForGymLeader(signatureSpecies["RAIHAN"],true, Type.DRAGON),
[TrainerType.KATY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KATY"],false, Type.BUG),
[TrainerType.BRASSIUS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRASSIUS"],true, Type.GRASS),
[TrainerType.IONO]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["IONO"],false, Type.ELECTRIC),
[TrainerType.KOFU]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["KOFU"],true, Type.WATER),
[TrainerType.LARRY]: new TrainerConfig(++t).setName("Larry").initForGymLeader(signatureSpecies["LARRY"],true, Type.NORMAL),
[TrainerType.RYME]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["RYME"],false, Type.GHOST),
[TrainerType.TULIP]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["TULIP"],false, Type.PSYCHIC),
[TrainerType.GRUSHA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GRUSHA"],true, Type.ICE),
[TrainerType.LORELEI]: new TrainerConfig((t = TrainerType.LORELEI)).initForEliteFour(signatureSpecies["LORELEI"],false, Type.ICE).setBattleBgm("battle_kanto_gym"),
[TrainerType.BRUNO]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BRUNO"], true, Type.FIGHTING).setBattleBgm("battle_kanto_gym"),
[TrainerType.AGATHA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AGATHA"], false,Type.GHOST).setBattleBgm("battle_kanto_gym"),
[TrainerType.LANCE]: new TrainerConfig(++t).setName("Lance").initForEliteFour(signatureSpecies["LANCE"],true, Type.DRAGON).setBattleBgm("battle_kanto_gym"),
[TrainerType.WILL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["WILL"],true, Type.PSYCHIC).setBattleBgm("battle_johto_gym"),
[TrainerType.KOGA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KOGA"], true, Type.POISON).setBattleBgm("battle_johto_gym"),
[TrainerType.KAREN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KAREN"],false, Type.DARK).setBattleBgm("battle_johto_gym"),
[TrainerType.SIDNEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SIDNEY"],true, Type.DARK).setMixedBattleBgm("battle_hoenn_elite"),
[TrainerType.PHOEBE]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["PHOEBE"],false, Type.GHOST).setMixedBattleBgm("battle_hoenn_elite"),
[TrainerType.GLACIA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["GLACIA"],false, Type.ICE).setMixedBattleBgm("battle_hoenn_elite"),
[TrainerType.DRAKE]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRAKE"],true, Type.DRAGON).setMixedBattleBgm("battle_hoenn_elite"),
[TrainerType.AARON]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AARON"],true, Type.BUG).setBattleBgm("battle_sinnoh_gym"),
[TrainerType.BERTHA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BERTHA"],false, Type.GROUND).setBattleBgm("battle_sinnoh_gym"),
[TrainerType.FLINT]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["FLINT"],true, Type.FIRE).setBattleBgm("battle_sinnoh_gym"),
[TrainerType.LUCIAN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["LUCIAN"], true,Type.PSYCHIC).setBattleBgm("battle_sinnoh_gym"),
[TrainerType.LORELEI]: new TrainerConfig((t = TrainerType.LORELEI)).initForEliteFour(signatureSpecies["LORELEI"],false, Type.ICE),
[TrainerType.BRUNO]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BRUNO"], true, Type.FIGHTING),
[TrainerType.AGATHA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AGATHA"], false,Type.GHOST),
[TrainerType.LANCE]: new TrainerConfig(++t).setName("Lance").initForEliteFour(signatureSpecies["LANCE"],true, Type.DRAGON),
[TrainerType.WILL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["WILL"],true, Type.PSYCHIC),
[TrainerType.KOGA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KOGA"], true, Type.POISON),
[TrainerType.KAREN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KAREN"],false, Type.DARK),
[TrainerType.SIDNEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SIDNEY"],true, Type.DARK),
[TrainerType.PHOEBE]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["PHOEBE"],false, Type.GHOST),
[TrainerType.GLACIA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["GLACIA"],false, Type.ICE),
[TrainerType.DRAKE]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRAKE"],true, Type.DRAGON),
[TrainerType.AARON]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AARON"],true, Type.BUG),
[TrainerType.BERTHA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BERTHA"],false, Type.GROUND),
[TrainerType.FLINT]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["FLINT"],true, Type.FIRE),
[TrainerType.LUCIAN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["LUCIAN"], true,Type.PSYCHIC),
[TrainerType.SHAUNTAL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SHAUNTAL"],false, Type.GHOST),
[TrainerType.MARSHAL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MARSHAL"],true, Type.FIGHTING),
[TrainerType.GRIMSLEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["GRIMSLEY"],true, Type.DARK),
[TrainerType.CAITLIN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["CAITLIN"],false, Type.PSYCHIC),
[TrainerType.MALVA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MALVA"], false,Type.FIRE).setMixedBattleBgm("battle_kalos_elite"),
[TrainerType.SIEBOLD]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SIEBOLD"], true,Type.WATER).setMixedBattleBgm("battle_kalos_elite"),
[TrainerType.WIKSTROM]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["WIKSTROM"],true, Type.STEEL).setMixedBattleBgm("battle_kalos_elite"),
[TrainerType.DRASNA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRASNA"],false, Type.DRAGON).setMixedBattleBgm("battle_kalos_elite"),
[TrainerType.HALA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["HALA"],true, Type.FIGHTING).setMixedBattleBgm("battle_alola_elite"),
[TrainerType.MOLAYNE]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MOLAYNE"],true, Type.STEEL).setMixedBattleBgm("battle_alola_elite"),
[TrainerType.OLIVIA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["OLIVIA"],false, Type.ROCK).setMixedBattleBgm("battle_alola_elite"),
[TrainerType.ACEROLA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["ACEROLA"],false, Type.GHOST).setMixedBattleBgm("battle_alola_elite"),
[TrainerType.KAHILI]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KAHILI"],false, Type.FLYING).setMixedBattleBgm("battle_alola_elite"),
[TrainerType.MARNIE_ELITE]: new TrainerConfig(++t).setName("Marnie").initForEliteFour(signatureSpecies["MARNIE_ELITE"],false, Type.DARK).setMixedBattleBgm("battle_galar_elite"),
[TrainerType.NESSA_ELITE]: new TrainerConfig(++t).setName("Nessa").initForEliteFour(signatureSpecies["NESSA_ELITE"],false, Type.WATER).setMixedBattleBgm("battle_galar_elite"),
[TrainerType.BEA_ELITE]: new TrainerConfig(++t).setName("Bea").initForEliteFour(signatureSpecies["BEA_ELITE"],false, Type.FIGHTING).setMixedBattleBgm("battle_galar_elite"),
[TrainerType.ALLISTER_ELITE]: new TrainerConfig(++t).setName("Allister").initForEliteFour(signatureSpecies["ALLISTER_ELITE"],true, Type.GHOST).setMixedBattleBgm("battle_galar_elite"),
[TrainerType.RAIHAN_ELITE]: new TrainerConfig(++t).setName("Raihan").initForEliteFour(signatureSpecies["RAIHAN_ELITE"],true, Type.DRAGON).setMixedBattleBgm("battle_galar_elite"),
[TrainerType.RIKA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["RIKA"],false, Type.GROUND).setMixedBattleBgm("battle_paldea_elite"),
[TrainerType.POPPY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["POPPY"],false, Type.STEEL).setMixedBattleBgm("battle_paldea_elite"),
[TrainerType.LARRY_ELITE]: new TrainerConfig(++t).setName("Larry").initForEliteFour(signatureSpecies["LARRY_ELITE"],true, Type.NORMAL, Type.FLYING).setMixedBattleBgm("battle_paldea_elite"),
[TrainerType.HASSEL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["HASSEL"],true, Type.DRAGON).setMixedBattleBgm("battle_paldea_elite"),
[TrainerType.CRISPIN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["CRISPIN"],true, Type.FIRE).setMixedBattleBgm("battle_bb_elite"),
[TrainerType.AMARYS]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AMARYS"],false, Type.STEEL).setMixedBattleBgm("battle_bb_elite"),
[TrainerType.LACEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["LACEY"],false, Type.FAIRY).setMixedBattleBgm("battle_bb_elite"),
[TrainerType.DRAYTON]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRAYTON"],true, Type.DRAGON).setMixedBattleBgm("battle_bb_elite"),
[TrainerType.MALVA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MALVA"], false,Type.FIRE),
[TrainerType.SIEBOLD]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SIEBOLD"], true,Type.WATER),
[TrainerType.WIKSTROM]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["WIKSTROM"],true, Type.STEEL),
[TrainerType.DRASNA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRASNA"],false, Type.DRAGON),
[TrainerType.HALA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["HALA"],true, Type.FIGHTING),
[TrainerType.MOLAYNE]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MOLAYNE"],true, Type.STEEL),
[TrainerType.OLIVIA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["OLIVIA"],false, Type.ROCK),
[TrainerType.ACEROLA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["ACEROLA"],false, Type.GHOST),
[TrainerType.KAHILI]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KAHILI"],false, Type.FLYING),
[TrainerType.MARNIE_ELITE]: new TrainerConfig(++t).setName("Marnie").initForEliteFour(signatureSpecies["MARNIE_ELITE"],false, Type.DARK),
[TrainerType.NESSA_ELITE]: new TrainerConfig(++t).setName("Nessa").initForEliteFour(signatureSpecies["NESSA_ELITE"],false, Type.WATER),
[TrainerType.BEA_ELITE]: new TrainerConfig(++t).setName("Bea").initForEliteFour(signatureSpecies["BEA_ELITE"],false, Type.FIGHTING),
[TrainerType.ALLISTER_ELITE]: new TrainerConfig(++t).setName("Allister").initForEliteFour(signatureSpecies["ALLISTER_ELITE"],true, Type.GHOST),
[TrainerType.RAIHAN_ELITE]: new TrainerConfig(++t).setName("Raihan").initForEliteFour(signatureSpecies["RAIHAN_ELITE"],true, Type.DRAGON),
[TrainerType.RIKA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["RIKA"],false, Type.GROUND),
[TrainerType.POPPY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["POPPY"],false, Type.STEEL),
[TrainerType.LARRY_ELITE]: new TrainerConfig(++t).setName("Larry").initForEliteFour(signatureSpecies["LARRY_ELITE"],true, Type.NORMAL, Type.FLYING),
[TrainerType.HASSEL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["HASSEL"],true, Type.DRAGON),
[TrainerType.CRISPIN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["CRISPIN"],true, Type.FIRE),
[TrainerType.AMARYS]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AMARYS"],false, Type.STEEL),
[TrainerType.LACEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["LACEY"],false, Type.FAIRY),
[TrainerType.DRAYTON]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRAYTON"],true, Type.DRAGON),
[TrainerType.BLUE]: new TrainerConfig((t = TrainerType.BLUE)).initForChampion(signatureSpecies["BLUE"],true).setBattleBgm("battle_kanto_champion").setHasDouble("blue_red_double").setDoubleTrainerType(TrainerType.RED).setDoubleTitle("champion_double")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALAKAZAM], TrainerSlot.TRAINER, true, p => {
@ -1281,7 +1275,7 @@ export const trainerConfigs: TrainerConfigs = {
p.formIndex = 1;
p.generateAndPopulateMoveset();
})),
[TrainerType.DIANTHA]: new TrainerConfig(++t).initForChampion(signatureSpecies["DIANTHA"],false).setMixedBattleBgm("battle_kalos_champion")
[TrainerType.DIANTHA]: new TrainerConfig(++t).initForChampion(signatureSpecies["DIANTHA"],false)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GOURGEIST], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
}))
@ -1289,11 +1283,11 @@ export const trainerConfigs: TrainerConfigs = {
p.formIndex = 1;
p.generateAndPopulateMoveset();
})),
[TrainerType.HAU]: new TrainerConfig(++t).initForChampion(signatureSpecies["HAU"],true).setMixedBattleBgm("battle_alola_champion")
[TrainerType.HAU]: new TrainerConfig(++t).initForChampion(signatureSpecies["HAU"],true)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALOLA_RAICHU], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
})),
[TrainerType.LEON]: new TrainerConfig(++t).initForChampion(signatureSpecies["LEON"],true).setMixedBattleBgm("battle_galar_champion")
[TrainerType.LEON]: new TrainerConfig(++t).initForChampion(signatureSpecies["LEON"],true)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.RILLABOOM, Species.CINDERACE, Species.INTELEON], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
}))
@ -1301,15 +1295,15 @@ export const trainerConfigs: TrainerConfigs = {
p.formIndex = 3;
p.generateAndPopulateMoveset();
})),
[TrainerType.GEETA]: new TrainerConfig(++t).initForChampion(signatureSpecies["GEETA"],false).setMixedBattleBgm("battle_champion_geeta")
[TrainerType.GEETA]: new TrainerConfig(++t).initForChampion(signatureSpecies["GEETA"],false)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GLIMMORA], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
})),
[TrainerType.NEMONA]: new TrainerConfig(++t).initForChampion(signatureSpecies["NEMONA"],false).setMixedBattleBgm("battle_champion_nemona")
[TrainerType.NEMONA]: new TrainerConfig(++t).initForChampion(signatureSpecies["NEMONA"],false)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
})),
[TrainerType.KIERAN]: new TrainerConfig(++t).initForChampion(signatureSpecies["KIERAN"],true).setMixedBattleBgm("battle_champion_kieran")
[TrainerType.KIERAN]: new TrainerConfig(++t).initForChampion(signatureSpecies["KIERAN"],true)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.POLIWRATH, Species.POLITOED], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
})),

View File

@ -501,52 +501,6 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer):
}
}
/**
* Retrieve the color corresponding to a specific damage multiplier
* @returns A color or undefined if the default color should be used
*/
export function getTypeDamageMultiplierColor(multiplier: TypeDamageMultiplier, side: "defense" | "offense"): string | undefined {
if (side === "offense") {
switch (multiplier) {
case 0:
return "#929292";
case 0.125:
return "#FF5500";
case 0.25:
return "#FF7400";
case 0.5:
return "#FE8E00";
case 1:
return undefined;
case 2:
return "#4AA500";
case 4:
return "#4BB400";
case 8:
return "#52C200";
}
} else if (side === "defense") {
switch (multiplier) {
case 0:
return "#B1B100";
case 0.125:
return "#2DB4FF";
case 0.25:
return "#00A4FF";
case 0.5:
return "#0093FF";
case 1:
return undefined;
case 2:
return "#FE8E00";
case 4:
return "#FF7400";
case 8:
return "#FF5500";
}
}
}
export function getTypeRgb(type: Type): [ integer, integer, integer ] {
switch (type) {
case Type.NORMAL:

View File

@ -531,11 +531,6 @@ export class EvolutionPhase extends Phase {
}
export class EndEvolutionPhase extends Phase {
constructor(scene: BattleScene) {
super(scene);
}
start() {
super.start();

View File

@ -48,7 +48,6 @@ import { BerryType } from "../data/enums/berry-type";
import i18next from "../plugins/i18n";
import { speciesEggMoves } from "../data/egg-moves";
import { ModifierTier } from "../modifier/modifier-tier";
import { applyChallenges, ChallengeType } from "#app/data/challenge.js";
export enum FieldPosition {
CENTER,
@ -267,22 +266,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
return !this.hp && (!checkStatus || this.status?.effect === StatusEffect.FAINT);
}
/**
* Check if this pokemon is both not fainted and allowed to be in battle.
* This is frequently a better alternative to {@link isFainted}
* @returns {boolean} True if pokemon is allowed in battle
*/
isAllowedInBattle(): boolean {
const challengeAllowed = new Utils.BooleanHolder(true);
applyChallenges(this.scene.gameMode, ChallengeType.POKEMON_IN_BATTLE, this, challengeAllowed);
return !this.isFainted() && challengeAllowed.value;
}
isActive(onField?: boolean): boolean {
if (!this.scene) {
return false;
}
return this.isAllowedInBattle() && !!this.scene && (!onField || this.isOnField());
return !this.isFainted() && !!this.scene && (!onField || this.isOnField());
}
getDexAttr(): bigint {
@ -857,11 +845,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
if (!ignoreOverride && this.summonData?.types) {
this.summonData.types.forEach(t => types.push(t));
} else {
const speciesForm = this.getSpeciesForm(ignoreOverride);
const speciesForm = this.getSpeciesForm();
types.push(speciesForm.type1);
const fusionSpeciesForm = this.getFusionSpeciesForm(ignoreOverride);
const fusionSpeciesForm = this.getFusionSpeciesForm();
if (fusionSpeciesForm) {
if (fusionSpeciesForm.type2 !== null && fusionSpeciesForm.type2 !== speciesForm.type1) {
types.push(fusionSpeciesForm.type2);
@ -897,8 +885,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
return types;
}
isOfType(type: Type, includeTeraType: boolean = true, forDefend: boolean = false, ignoreOverride?: boolean): boolean {
return !!this.getTypes(includeTeraType, forDefend, ignoreOverride).some(t => t === type);
isOfType(type: Type, forDefend: boolean = false): boolean {
return !!this.getTypes(true, forDefend).find(t => t === type);
}
/**
@ -1066,18 +1054,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
}
isGrounded(): boolean {
return !this.isOfType(Type.FLYING, true, true) && !this.hasAbility(Abilities.LEVITATE);
}
/**
* @returns The type damage multiplier or undefined if it's a status move
*/
getMoveEffectiveness(source: Pokemon, move: PokemonMove): TypeDamageMultiplier | undefined {
if (move.getMove().category === MoveCategory.STATUS) {
return undefined;
}
return this.getAttackMoveEffectiveness(source, move);
return !this.isOfType(Type.FLYING, true) && !this.hasAbility(Abilities.LEVITATE);
}
getAttackMoveEffectiveness(source: Pokemon, pokemonMove: PokemonMove): TypeDamageMultiplier {
@ -1599,20 +1576,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
return this.battleInfo.updateInfo(this, instant);
}
/**
* Show or hide the type effectiveness multiplier window
* Passing undefined will hide the window
*/
updateEffectiveness(effectiveness?: string) {
this.battleInfo.updateEffectiveness(effectiveness);
}
toggleStats(visible: boolean): void {
this.battleInfo.toggleStats(visible);
}
toggleFlyout(visible: boolean): void {
this.battleInfo.toggleFlyout(visible);
this.battleInfo.flyoutMenu?.toggleFlyout(visible);
}
addExp(exp: integer) {

View File

@ -166,10 +166,6 @@ export default class Trainer extends Phaser.GameObjects.Container {
return this.config.doubleOnly || this.variant === TrainerVariant.DOUBLE;
}
getMixedBattleBgm(): string {
return this.config.mixedBattleBgm;
}
getBattleBgm(): string {
return this.config.battleBgm;
}

View File

@ -1,20 +1,17 @@
import i18next from "i18next";
import { classicFixedBattles, FixedBattleConfig, FixedBattleConfigs } from "./battle";
import { fixedBattles } from "./battle";
import BattleScene from "./battle-scene";
import { allChallenges, applyChallenges, Challenge, ChallengeType, copyChallenge } from "./data/challenge";
import { Biome } from "./data/enums/biome";
import { Species } from "./data/enums/species";
import PokemonSpecies, { allSpecies } from "./data/pokemon-species";
import { Arena } from "./field/arena";
import * as Overrides from "./overrides";
import * as Utils from "./utils";
import * as Overrides from "./overrides";
export enum GameModes {
CLASSIC,
ENDLESS,
SPLICED_ENDLESS,
DAILY,
CHALLENGE
DAILY
}
interface GameModeConfig {
@ -22,12 +19,12 @@ interface GameModeConfig {
isEndless?: boolean;
isDaily?: boolean;
hasTrainers?: boolean;
hasFixedBattles?: boolean;
hasNoShop?: boolean;
hasShortBiomes?: boolean;
hasRandomBiomes?: boolean;
hasRandomBosses?: boolean;
isSplicedOnly?: boolean;
isChallenge?: boolean;
}
export class GameMode implements GameModeConfig {
@ -36,23 +33,16 @@ export class GameMode implements GameModeConfig {
public isEndless: boolean;
public isDaily: boolean;
public hasTrainers: boolean;
public hasFixedBattles: boolean;
public hasNoShop: boolean;
public hasShortBiomes: boolean;
public hasRandomBiomes: boolean;
public hasRandomBosses: boolean;
public isSplicedOnly: boolean;
public isChallenge: boolean;
public challenges: Challenge[];
public battleConfig: FixedBattleConfigs;
constructor(modeId: GameModes, config: GameModeConfig, battleConfig?: FixedBattleConfigs) {
constructor(modeId: GameModes, config: GameModeConfig) {
this.modeId = modeId;
this.challenges = [];
Object.assign(this, config);
if (this.isChallenge) {
this.challenges = allChallenges.map(c => copyChallenge(c));
}
this.battleConfig = battleConfig || {};
}
/**
@ -122,7 +112,7 @@ export class GameMode implements GameModeConfig {
if (w === waveIndex) {
continue;
}
if ((w % 30) === (arena.scene.offsetGym ? 0 : 20) || this.isFixedBattle(waveIndex)) {
if ((w % 30) === (arena.scene.offsetGym ? 0 : 20) || fixedBattles.hasOwnProperty(w)) {
allowTrainerBattle = false;
break;
} else if (w < waveIndex) {
@ -171,7 +161,6 @@ export class GameMode implements GameModeConfig {
isWaveFinal(waveIndex: integer, modeId: GameModes = this.modeId): boolean {
switch (modeId) {
case GameModes.CLASSIC:
case GameModes.CHALLENGE:
return waveIndex === 200;
case GameModes.ENDLESS:
case GameModes.SPLICED_ENDLESS:
@ -219,36 +208,10 @@ export class GameMode implements GameModeConfig {
(this.modeId === GameModes.ENDLESS || this.modeId === GameModes.SPLICED_ENDLESS);
}
/**
* Checks whether there is a fixed battle on this gamemode on a given wave.
* @param {integer} waveIndex The wave to check.
* @returns {boolean} If this game mode has a fixed battle on this wave
*/
isFixedBattle(waveIndex: integer): boolean {
const dummyConfig = new FixedBattleConfig();
return this.battleConfig.hasOwnProperty(waveIndex) || applyChallenges(this, ChallengeType.FIXED_BATTLES, waveIndex, dummyConfig);
}
/**
* Returns the config for the fixed battle for a particular wave.
* @param {integer} waveIndex The wave to check.
* @returns {boolean} The fixed battle for this wave.
*/
getFixedBattle(waveIndex: integer): FixedBattleConfig {
const challengeConfig = new FixedBattleConfig();
if (applyChallenges(this, ChallengeType.FIXED_BATTLES, waveIndex, challengeConfig)) {
return challengeConfig;
} else {
return this.battleConfig[waveIndex];
}
}
getClearScoreBonus(): integer {
switch (this.modeId) {
case GameModes.CLASSIC:
case GameModes.CHALLENGE:
return 5000;
case GameModes.DAILY:
return 2500;
@ -258,7 +221,6 @@ export class GameMode implements GameModeConfig {
getEnemyModifierChance(isBoss: boolean): integer {
switch (this.modeId) {
case GameModes.CLASSIC:
case GameModes.CHALLENGE:
case GameModes.DAILY:
return !isBoss ? 18 : 6;
case GameModes.ENDLESS:
@ -270,45 +232,20 @@ export class GameMode implements GameModeConfig {
getName(): string {
switch (this.modeId) {
case GameModes.CLASSIC:
return i18next.t("gameMode:classic");
return "Classic";
case GameModes.ENDLESS:
return i18next.t("gameMode:endless");
return "Endless";
case GameModes.SPLICED_ENDLESS:
return i18next.t("gameMode:endlessSpliced");
return "Endless (Spliced)";
case GameModes.DAILY:
return i18next.t("gameMode:dailyRun");
case GameModes.CHALLENGE:
return i18next.t("gameMode:challenge");
}
}
static getModeName(modeId: GameModes): string {
switch (modeId) {
case GameModes.CLASSIC:
return i18next.t("gameMode:classic");
case GameModes.ENDLESS:
return i18next.t("gameMode:endless");
case GameModes.SPLICED_ENDLESS:
return i18next.t("gameMode:endlessSpliced");
case GameModes.DAILY:
return i18next.t("gameMode:dailyRun");
case GameModes.CHALLENGE:
return i18next.t("gameMode:challenge");
return "Daily Run";
}
}
}
export function getGameMode(gameMode: GameModes): GameMode {
switch (gameMode) {
case GameModes.CLASSIC:
return new GameMode(GameModes.CLASSIC, { isClassic: true, hasTrainers: true }, classicFixedBattles);
case GameModes.ENDLESS:
return new GameMode(GameModes.ENDLESS, { isEndless: true, hasShortBiomes: true, hasRandomBosses: true });
case GameModes.SPLICED_ENDLESS:
return new GameMode(GameModes.SPLICED_ENDLESS, { isEndless: true, hasShortBiomes: true, hasRandomBosses: true, isSplicedOnly: true });
case GameModes.DAILY:
return new GameMode(GameModes.DAILY, { isDaily: true, hasTrainers: true, hasNoShop: true });
case GameModes.CHALLENGE:
return new GameMode(GameModes.CHALLENGE, { isClassic: true, hasTrainers: true, isChallenge: true }, classicFixedBattles);
}
}
export const gameModes = Object.freeze({
[GameModes.CLASSIC]: new GameMode(GameModes.CLASSIC, { isClassic: true, hasTrainers: true, hasFixedBattles: true }),
[GameModes.ENDLESS]: new GameMode(GameModes.ENDLESS, { isEndless: true, hasShortBiomes: true, hasRandomBosses: true }),
[GameModes.SPLICED_ENDLESS]: new GameMode(GameModes.SPLICED_ENDLESS, { isEndless: true, hasShortBiomes: true, hasRandomBosses: true, isSplicedOnly: true }),
[GameModes.DAILY]: new GameMode(GameModes.DAILY, { isDaily: true, hasTrainers: true, hasNoShop: true })
});

View File

@ -18,10 +18,8 @@ import {initMoves} from "#app/data/move";
import {initAbilities} from "#app/data/ability";
import {initAchievements} from "#app/system/achv";
import {initTrainerTypeDialogue} from "#app/data/dialogue";
import { initChallenges } from "./data/challenge";
import i18next from "i18next";
import { initStatsKeys } from "./ui/game-stats-ui-handler";
import { initVouchers } from "./system/voucher";
export class LoadingScene extends SceneBase {
constructor() {
@ -331,7 +329,6 @@ export class LoadingScene extends SceneBase {
this.loadLoadingScreen();
initVouchers();
initAchievements();
initStatsKeys();
initPokemonPrevolutions();
@ -342,7 +339,6 @@ export class LoadingScene extends SceneBase {
initSpecies();
initMoves();
initAbilities();
initChallenges();
}
loadLoadingScreen() {
@ -436,7 +432,7 @@ export class LoadingScene extends SceneBase {
});
this.load.on("fileprogress", file => {
assetText.setText(i18next.t("menu:loadingAsset", { assetName: file.key }));
assetText.setText(`Loading asset: ${file.key}`);
});
loadingGraphics.push(bg, graphics, progressBar, progressBox, logo, percentText, assetText);

View File

@ -1,67 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const challenges: SimpleTranslationEntries = {
"title": "Challenge Modifiers",
"points": "Bad Ideas",
"confirm_start": "Proceed with these challenges?",
"singleGeneration.name": "Mono Gen",
"singleGeneration.value.0": "Off",
"singleGeneration.desc.0": "You can only use pokemon from the chosen generation.",
"singleGeneration.value.1": "Gen 1",
"singleGeneration.desc.1": "You can only use pokemon from generation one.",
"singleGeneration.value.2": "Gen 2",
"singleGeneration.desc.2": "You can only use pokemon from generation two.",
"singleGeneration.value.3": "Gen 3",
"singleGeneration.desc.3": "You can only use pokemon from generation three.",
"singleGeneration.value.4": "Gen 4",
"singleGeneration.desc.4": "You can only use pokemon from generation four.",
"singleGeneration.value.5": "Gen 5",
"singleGeneration.desc.5": "You can only use pokemon from generation five.",
"singleGeneration.value.6": "Gen 6",
"singleGeneration.desc.6": "You can only use pokemon from generation six.",
"singleGeneration.value.7": "Gen 7",
"singleGeneration.desc.7": "You can only use pokemon from generation seven.",
"singleGeneration.value.8": "Gen 8",
"singleGeneration.desc.8": "You can only use pokemon from generation eight.",
"singleGeneration.value.9": "Gen 9",
"singleGeneration.desc.9": "You can only use pokemon from generation nine.",
"singleType.name": "Mono Type",
"singleType.value.0": "Off",
"singleType.desc.0": "You can only use pokemon of the chosen type.",
"singleType.value.1": "Normal",
"singleType.desc.1": "You can only use pokemon with the Normal type.",
"singleType.value.2": "Fighting",
"singleType.desc.2": "You can only use pokemon with the Fighting type.",
"singleType.value.3": "Flying",
"singleType.desc.3": "You can only use pokemon with the Flying type.",
"singleType.value.4": "Poison",
"singleType.desc.4": "You can only use pokemon with the Poison type.",
"singleType.value.5": "Ground",
"singleType.desc.5": "You can only use pokemon with the Ground type.",
"singleType.value.6": "Rock",
"singleType.desc.6": "You can only use pokemon with the Rock type.",
"singleType.value.7": "Bug",
"singleType.desc.7": "You can only use pokemon with the Bug type.",
"singleType.value.8": "Ghost",
"singleType.desc.8": "You can only use pokemon with the Ghost type.",
"singleType.value.9": "Steel",
"singleType.desc.9": "You can only use pokemon with the Steel type.",
"singleType.value.10": "Fire",
"singleType.desc.10": "You can only use pokemon with the Fire type.",
"singleType.value.11": "Water",
"singleType.desc.11": "You can only use pokemon with the Water type.",
"singleType.value.12": "Grass",
"singleType.desc.12": "You can only use pokemon with the Grass type.",
"singleType.value.13": "Electric",
"singleType.desc.13": "You can only use pokemon with the Electric type.",
"singleType.value.14": "Psychic",
"singleType.desc.14": "You can only use pokemon with the Psychic type.",
"singleType.value.15": "Ice",
"singleType.desc.15": "You can only use pokemon with the Ice type.",
"singleType.value.16": "Dragon",
"singleType.desc.16": "You can only use pokemon with the Dragon type.",
"singleType.value.17": "Dark",
"singleType.desc.17": "You can only use pokemon with the Dark type.",
"singleType.value.18": "Fairy",
"singleType.desc.18": "You can only use pokemon with the Fairy type.",
} as const;

View File

@ -5,7 +5,6 @@ import { battle } from "./battle";
import { battleMessageUiHandler } from "./battle-message-ui-handler";
import { berry } from "./berry";
import { biome } from "./biome";
import { challenges } from "./challenges";
import { commandUiHandler } from "./command-ui-handler";
import {
PGFbattleSpecDialogue,
@ -19,7 +18,6 @@ import {
} from "./dialogue";
import { egg } from "./egg";
import { fightUiHandler } from "./fight-ui-handler";
import { gameMode } from "./game-mode";
import { gameStatsUiHandler } from "./game-stats-ui-handler";
import { growth } from "./growth";
import { menu } from "./menu";
@ -31,7 +29,6 @@ import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon";
import { pokemonInfo } from "./pokemon-info";
import { pokemonInfoContainer } from "./pokemon-info-container";
import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler";
import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers";
@ -48,7 +45,6 @@ export const deConfig = {
battleMessageUiHandler: battleMessageUiHandler,
berry: berry,
biome: biome,
challenges: challenges,
commandUiHandler: commandUiHandler,
PGMdialogue: PGMdialogue,
PGFdialogue: PGFdialogue,
@ -60,7 +56,6 @@ export const deConfig = {
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue,
egg: egg,
fightUiHandler: fightUiHandler,
gameMode: gameMode,
gameStatsUiHandler: gameStatsUiHandler,
growth: growth,
menu: menu,
@ -72,7 +67,6 @@ export const deConfig = {
pokemon: pokemon,
pokemonInfo: pokemonInfo,
pokemonInfoContainer: pokemonInfoContainer,
saveSlotSelectUiHandler: saveSlotSelectUiHandler,
splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler,
titles: titles,

View File

@ -1,10 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const gameMode: SimpleTranslationEntries = {
"classic": "Klassik",
"endless": "Endlos",
"endlessSpliced": "Endlos (Fusion)",
"dailyRun": "Täglicher Run",
"unknown": "Unbekannt",
"challenge": "Challenge",
} as const;

View File

@ -45,8 +45,8 @@ export const menu: SimpleTranslationEntries = {
"weeklyRankings": "Wöchentliche Rangliste",
"noRankings": "Keine Rangliste",
"loading": "Lade…",
"loadingAsset": "Loading asset: {{assetName}}",
"playersOnline": "Spieler Online",
"empty":"Leer",
"yes":"Ja",
"no":"Nein",
"disclaimer": "DISCLAIMER",

View File

@ -1,9 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const saveSlotSelectUiHandler: SimpleTranslationEntries = {
"overwriteData": "Den ausgewählten Speicherstand überschreiben?",
"loading": "Läd...",
"wave": "Welle",
"lv": "Lvl",
"empty": "Leer",
} as const;

View File

@ -168,99 +168,4 @@ export const achv: AchievementTranslationEntries = {
name: "Undefeated",
description: "Beat the game in classic mode",
},
"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: "Mono NORMAL",
},
"MONO_FIGHTING": {
name: "I Know Kung Fu",
},
"MONO_FLYING": {
name: "Mono FLYING",
},
"MONO_POISON": {
name: "Kanto's Favourite",
},
"MONO_GROUND": {
name: "Mono GROUND",
},
"MONO_ROCK": {
name: "Brock Hard",
},
"MONO_BUG": {
name: "Sting Like A Beedrill",
},
"MONO_GHOST": {
name: "Who you gonna call?",
},
"MONO_STEEL": {
name: "Mono STEEL",
},
"MONO_FIRE": {
name: "Mono FIRE",
},
"MONO_WATER": {
name: "When It Rains, It Pours",
},
"MONO_GRASS": {
name: "Mono GRASS",
},
"MONO_ELECTRIC": {
name: "Mono ELECTRIC",
},
"MONO_PSYCHIC": {
name: "Mono PSYCHIC",
},
"MONO_ICE": {
name: "Mono ICE",
},
"MONO_DRAGON": {
name: "Mono DRAGON",
},
"MONO_DARK": {
name: "It's just a phase",
},
"MONO_FAIRY": {
name: "Mono FAIRY",
},
} as const;

View File

@ -1,67 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const challenges: SimpleTranslationEntries = {
"title": "Challenge Modifiers",
"start": "Start",
"illegalEvolution": "{{pokemon}} changed into an ineligble pokemon\nfor this challenge!",
"singleGeneration.name": "Mono Gen",
"singleGeneration.value.0": "Off",
"singleGeneration.desc.0": "You can only use pokemon from the chosen generation.",
"singleGeneration.value.1": "Gen 1",
"singleGeneration.desc.1": "You can only use pokemon from generation one.",
"singleGeneration.value.2": "Gen 2",
"singleGeneration.desc.2": "You can only use pokemon from generation two.",
"singleGeneration.value.3": "Gen 3",
"singleGeneration.desc.3": "You can only use pokemon from generation three.",
"singleGeneration.value.4": "Gen 4",
"singleGeneration.desc.4": "You can only use pokemon from generation four.",
"singleGeneration.value.5": "Gen 5",
"singleGeneration.desc.5": "You can only use pokemon from generation five.",
"singleGeneration.value.6": "Gen 6",
"singleGeneration.desc.6": "You can only use pokemon from generation six.",
"singleGeneration.value.7": "Gen 7",
"singleGeneration.desc.7": "You can only use pokemon from generation seven.",
"singleGeneration.value.8": "Gen 8",
"singleGeneration.desc.8": "You can only use pokemon from generation eight.",
"singleGeneration.value.9": "Gen 9",
"singleGeneration.desc.9": "You can only use pokemon from generation nine.",
"singleType.name": "Mono Type",
"singleType.value.0": "Off",
"singleType.desc.0": "You can only use pokemon of the chosen type.",
"singleType.value.1": "Normal",
"singleType.desc.1": "You can only use pokemon with the Normal type.",
"singleType.value.2": "Fighting",
"singleType.desc.2": "You can only use pokemon with the Fighting type.",
"singleType.value.3": "Flying",
"singleType.desc.3": "You can only use pokemon with the Flying type.",
"singleType.value.4": "Poison",
"singleType.desc.4": "You can only use pokemon with the Poison type.",
"singleType.value.5": "Ground",
"singleType.desc.5": "You can only use pokemon with the Ground type.",
"singleType.value.6": "Rock",
"singleType.desc.6": "You can only use pokemon with the Rock type.",
"singleType.value.7": "Bug",
"singleType.desc.7": "You can only use pokemon with the Bug type.",
"singleType.value.8": "Ghost",
"singleType.desc.8": "You can only use pokemon with the Ghost type.",
"singleType.value.9": "Steel",
"singleType.desc.9": "You can only use pokemon with the Steel type.",
"singleType.value.10": "Fire",
"singleType.desc.10": "You can only use pokemon with the Fire type.",
"singleType.value.11": "Water",
"singleType.desc.11": "You can only use pokemon with the Water type.",
"singleType.value.12": "Grass",
"singleType.desc.12": "You can only use pokemon with the Grass type.",
"singleType.value.13": "Electric",
"singleType.desc.13": "You can only use pokemon with the Electric type.",
"singleType.value.14": "Psychic",
"singleType.desc.14": "You can only use pokemon with the Psychic type.",
"singleType.value.15": "Ice",
"singleType.desc.15": "You can only use pokemon with the Ice type.",
"singleType.value.16": "Dragon",
"singleType.desc.16": "You can only use pokemon with the Dragon type.",
"singleType.value.17": "Dark",
"singleType.desc.17": "You can only use pokemon with the Dark type.",
"singleType.value.18": "Fairy",
"singleType.desc.18": "You can only use pokemon with the Fairy type.",
} as const;

View File

@ -5,7 +5,6 @@ import { battle } from "./battle";
import { battleMessageUiHandler } from "./battle-message-ui-handler";
import { berry } from "./berry";
import { biome } from "./biome";
import { challenges } from "./challenges";
import { commandUiHandler } from "./command-ui-handler";
import {
PGFbattleSpecDialogue,
@ -19,7 +18,6 @@ import {
} from "./dialogue";
import { egg } from "./egg";
import { fightUiHandler } from "./fight-ui-handler";
import { gameMode } from "./game-mode";
import { gameStatsUiHandler } from "./game-stats-ui-handler";
import { growth } from "./growth";
import { menu } from "./menu";
@ -31,7 +29,6 @@ import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon";
import { pokemonInfo } from "./pokemon-info";
import { pokemonInfoContainer } from "./pokemon-info-container";
import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler";
import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers";
@ -48,7 +45,6 @@ export const enConfig = {
battleMessageUiHandler: battleMessageUiHandler,
berry: berry,
biome: biome,
challenges: challenges,
commandUiHandler: commandUiHandler,
PGMdialogue: PGMdialogue,
PGFdialogue: PGFdialogue,
@ -60,7 +56,6 @@ export const enConfig = {
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue,
egg: egg,
fightUiHandler: fightUiHandler,
gameMode: gameMode,
gameStatsUiHandler: gameStatsUiHandler,
growth: growth,
menu: menu,
@ -72,7 +67,6 @@ export const enConfig = {
pokemon: pokemon,
pokemonInfo: pokemonInfo,
pokemonInfoContainer: pokemonInfoContainer,
saveSlotSelectUiHandler: saveSlotSelectUiHandler,
splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler,
titles: titles,

View File

@ -2372,7 +2372,7 @@ export const PGMdoubleBattleDialogue: DialogueTranslationEntries = {
},
"tate_liza_double": {
"encounter": {
1: `Tate: Are you surprised?
1: `Tate: Are you suprised?
$Liza: We are two gym leaders at once!
$Tate: We are twins!
$Liza: We dont need to talk to understand each other!
@ -2386,7 +2386,7 @@ export const PGMdoubleBattleDialogue: DialogueTranslationEntries = {
},
"liza_tate_double": {
"encounter": {
1: `Liza: Hihihi... Are you surprised?
1: `Liza: Hihihi... Are you suprised?
$Tate: Yes, we are really two gym leaders at once!
$Liza: This is my twin brother Tate!
$Tate: And this is my twin sister Liza!

View File

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

View File

@ -45,8 +45,8 @@ export const menu: SimpleTranslationEntries = {
"weeklyRankings": "Weekly Rankings",
"noRankings": "No Rankings",
"loading": "Loading…",
"loadingAsset": "Loading asset: {{assetName}}",
"playersOnline": "Players Online",
"empty":"Empty",
"yes":"Yes",
"no":"No",
"disclaimer": "DISCLAIMER",

View File

@ -1,9 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const saveSlotSelectUiHandler: SimpleTranslationEntries = {
"overwriteData": "Overwrite the data in the selected slot?",
"loading": "Loading...",
"wave": "Wave",
"lv": "Lv",
"empty": "Empty",
} as const;

View File

@ -30,12 +30,12 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"selectMoveSwapWith": "Select a move to swap with",
"unlockPassive": "Unlock Passive",
"reduceCost": "Reduce Cost",
"cycleShiny": ": Cycle Shiny",
"cycleForm": ": Cycle Form",
"cycleGender": ": Cycle Gender",
"cycleAbility": ": Cycle Ability",
"cycleNature": ": Cycle Nature",
"cycleVariant": ": Cycle Variant",
"cycleShiny": "R: Cycle Shiny",
"cycleForm": "F: Cycle Form",
"cycleGender": "G: Cycle Gender",
"cycleAbility": "E: Cycle Ability",
"cycleNature": "N: Cycle Nature",
"cycleVariant": "V: Cycle Variant",
"enablePassive": "Enable Passive",
"disablePassive": "Disable Passive",
"locked": "Locked",

View File

@ -18,11 +18,11 @@ export const battle: SimpleTranslationEntries = {
"partyFull": "Tu equipo esta completo.\n¿Quieres liberar un Pokémon para meter a {{pokemonName}}?",
"pokemon": "Pokémon",
"sendOutPokemon": "¡Adelante, {{pokemonName}}!",
"hitResultCriticalHit": "¡Un golpe crítico!",
"hitResultSuperEffective": "¡Es supereficaz!",
"hitResultCriticalHit": "!Un golpe crítico!",
"hitResultSuperEffective": "!Es supereficaz!",
"hitResultNotVeryEffective": "No es muy eficaz…",
"hitResultNoEffect": "No afecta a {{pokemonName}}!",
"hitResultOneHitKO": "¡KO en 1 golpe!",
"hitResultOneHitKO": "!KO en 1 golpe!",
"attackFailed": "¡Pero ha fallado!",
"attackHitsCount": "N.º de golpes: {{count}}.",
"expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.",
@ -56,9 +56,9 @@ export const battle: SimpleTranslationEntries = {
"skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?",
"eggHatching": "¿Y esto?",
"ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?",
"wildPokemonWithAffix": "El {{pokemonName}} salvaje",
"foePokemonWithAffix": "El {{pokemonName}} enemigo",
"useMove": "¡{{pokemonNameWithAffix}} usó {{moveName}}!",
"drainMessage": "¡{{pokemonName}} tuvo su\nenergía absorbida!",
"regainHealth": "¡{{pokemonName}} recuperó\nPS!"
"wildPokemonWithAffix": "Wild {{pokemonName}}",
"foePokemonWithAffix": "Foe {{pokemonName}}",
"useMove": "{{pokemonNameWithAffix}} used {{moveName}}!",
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
"regainHealth": "{{pokemonName}} regained\nhealth!"
} as const;

View File

@ -1,67 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const challenges: SimpleTranslationEntries = {
"title": "Parámetros de Desafíos",
"points": "Malas Ideas",
"confirm_start": "¿Continuar con estos desafíos?",
"singleGeneration.name": "Monogeneración",
"singleGeneration.value.0": "No",
"singleGeneration.desc.0": "Solo puedes usar Pokémon de la generación elegida.",
"singleGeneration.value.1": "Gen 1",
"singleGeneration.desc.1": "Solo puedes usar Pokémon de primera generación.",
"singleGeneration.value.2": "Gen 2",
"singleGeneration.desc.2": "Solo puedes usar Pokémon de segunda generación.",
"singleGeneration.value.3": "Gen 3",
"singleGeneration.desc.3": "Solo puedes usar Pokémon de tercera generación.",
"singleGeneration.value.4": "Gen 4",
"singleGeneration.desc.4": "Solo puedes usar Pokémon de cuarta generación.",
"singleGeneration.value.5": "Gen 5",
"singleGeneration.desc.5": "Solo puedes usar Pokémon de quinta generación.",
"singleGeneration.value.6": "Gen 6",
"singleGeneration.desc.6": "Solo puedes usar Pokémon de sexta generación.",
"singleGeneration.value.7": "Gen 7",
"singleGeneration.desc.7": "Solo puedes usar Pokémon de séptima generación.",
"singleGeneration.value.8": "Gen 8",
"singleGeneration.desc.8": "Solo puedes usar Pokémon de octava generación.",
"singleGeneration.value.9": "Gen 9",
"singleGeneration.desc.9": "Solo puedes usar Pokémon de novena generación.",
"singleType.name": "Monotipo",
"singleType.value.0": "No",
"singleType.desc.0": "Solo puedes usar Pokémon del tipo elegido",
"singleType.value.1": "Normal",
"singleType.desc.1": "Solo puedes usar Pokémon de tipo Normal.",
"singleType.value.2": "Lucha",
"singleType.desc.2": "Solo puedes usar Pokémon de tipo Lucha.",
"singleType.value.3": "Volador",
"singleType.desc.3": "Solo puedes usar Pokémon de tipo Volador.",
"singleType.value.4": "Veneno",
"singleType.desc.4": "Solo puedes usar Pokémon de tipo Veneno.",
"singleType.value.5": "Tierra",
"singleType.desc.5": "Solo puedes usar Pokémon de tipo Tierra.",
"singleType.value.6": "Roca",
"singleType.desc.6": "Solo puedes usar Pokémon de tipo Roca.",
"singleType.value.7": "Bicho",
"singleType.desc.7": "Solo puedes usar Pokémon de tipo Bicho.",
"singleType.value.8": "Fantasma",
"singleType.desc.8": "Solo puedes usar Pokémon de tipo Fantasma.",
"singleType.value.9": "Acero",
"singleType.desc.9": "Solo puedes usar Pokémon de tipo Acero.",
"singleType.value.10": "Fuego",
"singleType.desc.10": "Solo puedes usar Pokémon de tipo Fuego.",
"singleType.value.11": "Agua",
"singleType.desc.11": "Solo puedes usar Pokémon de tipo Agua.",
"singleType.value.12": "Planta",
"singleType.desc.12": "Solo puedes usar Pokémon de tipo Planta.",
"singleType.value.13": "Eléctrico",
"singleType.desc.13": "Solo puedes usar Pokémon de tipo Eléctrico.",
"singleType.value.14": "Psíquico",
"singleType.desc.14": "Solo puedes usar Pokémon de tipo Psíquico.",
"singleType.value.15": "Hielo",
"singleType.desc.15": "Solo puedes usar Pokémon de tipo Hielo.",
"singleType.value.16": "Dragón",
"singleType.desc.16": "Solo puedes usar Pokémon de tipo Dragón.",
"singleType.value.17": "Siniestro",
"singleType.desc.17": "Solo puedes usar Pokémon de tipo Siniestro.",
"singleType.value.18": "Hada",
"singleType.desc.18": "Solo puedes usar Pokémon de tipo Hada.",
} as const;

View File

@ -5,7 +5,6 @@ import { battle } from "./battle";
import { battleMessageUiHandler } from "./battle-message-ui-handler";
import { berry } from "./berry";
import { biome } from "./biome";
import { challenges } from "./challenges";
import { commandUiHandler } from "./command-ui-handler";
import {
PGFbattleSpecDialogue,
@ -19,7 +18,6 @@ import {
} from "./dialogue";
import { egg } from "./egg";
import { fightUiHandler } from "./fight-ui-handler";
import { gameMode } from "./game-mode";
import { gameStatsUiHandler } from "./game-stats-ui-handler";
import { growth } from "./growth";
import { menu } from "./menu";
@ -31,7 +29,6 @@ import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon";
import { pokemonInfo } from "./pokemon-info";
import { pokemonInfoContainer } from "./pokemon-info-container";
import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler";
import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers";
@ -48,7 +45,6 @@ export const esConfig = {
battleMessageUiHandler: battleMessageUiHandler,
berry: berry,
biome: biome,
challenges: challenges,
commandUiHandler: commandUiHandler,
PGMdialogue: PGMdialogue,
PGFdialogue: PGFdialogue,
@ -60,7 +56,6 @@ export const esConfig = {
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue,
egg: egg,
fightUiHandler: fightUiHandler,
gameMode: gameMode,
gameStatsUiHandler: gameStatsUiHandler,
growth: growth,
menu: menu,
@ -72,7 +67,6 @@ export const esConfig = {
pokemon: pokemon,
pokemonInfo: pokemonInfo,
pokemonInfoContainer: pokemonInfoContainer,
saveSlotSelectUiHandler: saveSlotSelectUiHandler,
splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler,
titles: titles,

View File

@ -1,10 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const gameMode: SimpleTranslationEntries = {
"classic": "Clásica",
"endless": "Infinita",
"endlessSpliced": "Infinita (Fusión)",
"dailyRun": "Diaria",
"unknown": "Desconicido",
"challenge": "Desafío",
} as const;

View File

@ -45,10 +45,10 @@ export const menu: SimpleTranslationEntries = {
"weeklyRankings": "Rankings Semanales",
"noRankings": "Sin Rankings",
"loading": "Cargando…",
"loadingAsset": "Cargando recurso: {{assetName}}",
"playersOnline": "Jugadores en Línea",
"empty":"Vacío",
"yes":"Sí",
"no":"No",
"disclaimer": "AVISO",
"disclaimerDescription": "Este juego es un producto inacabado; puede tener problemas de jugabilidad (incluyendo la posible pérdida de datos de guardado),\ncambiar sin avisar, y puede o no puede ser actualizado hasta ser completado."
"disclaimer": "DISCLAIMER",
"disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed."
} as const;

View File

@ -130,7 +130,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
},
"RARE_CANDY": { name: "Carameloraro" },
"RARER_CANDY": { name: "Caramelorarísimo" },
"RARER_CANDY": { name: "Rarer Candy" },
"MEGA_BRACELET": { name: "Mega-aro", description: "Las Megapiedras están disponibles" },
"DYNAMAX_BAND": { name: "Maximuñequera", description: "Las Maxisetas están disponibles" },
@ -162,14 +162,14 @@ export const modifierType: ModifierTypeTranslationEntries = {
"PP_UP": { name: "Más PP" },
"PP_MAX": { name: "Máx PP" },
"LURE": { name: "Incienso" },
"SUPER_LURE": { name: "Superincienso" },
"MAX_LURE": { name: "Incienso Máximo" },
"LURE": { name: "Lure" },
"SUPER_LURE": { name: "Super Lure" },
"MAX_LURE": { name: "Max Lure" },
"MEMORY_MUSHROOM": { name: "Seta Recuerdo", description: "Recuerda un movimiento olvidado de un Pokémon." },
"MEMORY_MUSHROOM": { name: "Memory Mushroom", description: "Recall one Pokémon's forgotten move" },
"EXP_SHARE": { name: "Repartir EXP", description: "Los que no combatan reciben el 20% de la EXP" },
"EXP_BALANCE": { name: "Equilibrar EXP", description: "Da mayor parte de la EXP recibida a los miembros del equipo que tengan menos nivel" },
"EXP_BALANCE": { name: "EXP. Balance", description: "Da mayor parte de la EXP recibida a los miembros del equipo que tengan menos nivel" },
"OVAL_CHARM": { name: "Amuleto Oval", description: "Cada Pokémon combatiente recibe un 10% adicional de la EXP total" },
@ -197,7 +197,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
"GRIP_CLAW": { name: "Garra Garfio" },
"WIDE_LENS": { name: "Lupa" },
"MULTI_LENS": { name: "Multilupa" },
"MULTI_LENS": { name: "Multi Lens" },
"HEALING_CHARM": { name: "Amuleto curación", description: "Aumenta la efectividad de los movimientos y objetos de curacion de PS en un 10% (excepto revivir)" },
"CANDY_JAR": { name: "Candy Jar", description: "Aumenta en 1 el número de niveles añadidos por los carameloraros" },
@ -216,7 +216,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
"TOXIC_ORB": { name: "Toxiesfera", description: "Extraña esfera que envenena gravemente a quien la usa en combate" },
"FLAME_ORB": { name: "Llamasfera", description: "Extraña esfera que causa quemaduras a quien la usa en combate" },
"BATON": { name: "Relevo", description: "Permite pasar los efectos al cambiar de Pokémon, también evita las trampas" },
"BATON": { name: "Baton", description: "Permite pasar los efectos al cambiar de Pokémon, también evita las trampas" },
"SHINY_CHARM": { name: "Amuleto Iris", description: "Aumenta drásticamente la posibilidad de que un Pokémon salvaje sea Shiny" },
"ABILITY_CHARM": { name: "Amuleto Habilidad", description: "Aumenta drásticamente la posibilidad de que un Pokémon salvaje tenga una habilidad oculta" },
@ -229,15 +229,15 @@ export const modifierType: ModifierTypeTranslationEntries = {
"GOLDEN_POKEBALL": { name: "Poké Ball Dorada", description: "Agrega 1 opción de objeto extra al final de cada combate" },
"ENEMY_DAMAGE_BOOSTER": { name: "Ficha Daño", description: "Aumenta el daño en un 5%" },
"ENEMY_DAMAGE_REDUCTION": { name: "Ficha Protección", description: "Reduce el daño recibido en un 2,5%" },
"ENEMY_HEAL": { name: "Ficha Curación", description: "Cura el 2% de los PS máximo en cada turno" },
"ENEMY_ATTACK_POISON_CHANCE": { name: "Ficha Veneno" },
"ENEMY_ATTACK_PARALYZE_CHANCE": { name: "Ficha Parálisis" },
"ENEMY_ATTACK_BURN_CHANCE": { name: "Ficha Quemadura" },
"ENEMY_STATUS_EFFECT_HEAL_CHANCE": { name: "Ficha Cura Total", description: "Agrega un 2.5% de probabilidad cada turno de curar un problema de estado" },
"ENEMY_ENDURE_CHANCE": { name: "Ficha Aguante" },
"ENEMY_FUSED_CHANCE": { name: "Ficha Fusión", description: "Agrega un 1% de probabilidad de que un Pokémon salvaje sea una fusión" },
"ENEMY_DAMAGE_BOOSTER": { name: "Damage Token", description: "Aumenta el daño en un 5%" },
"ENEMY_DAMAGE_REDUCTION": { name: "Protection Token", description: "Reduce el daño recibido en un 2,5%" },
"ENEMY_HEAL": { name: "Recovery Token", description: "Cura el 2% de los PS máximo en cada turno" },
"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: "Agrega un 2.5% de probabilidad cada turno de curar un problema de estado" },
"ENEMY_ENDURE_CHANCE": { name: "Endure Token" },
"ENEMY_FUSED_CHANCE": { name: "Fusion Token", description: "Agrega un 1% de probabilidad de que un Pokémon salvaje sea una fusión" },
},
TempBattleStatBoosterItem: {
"x_attack": "Ataque X",

View File

@ -1,9 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const saveSlotSelectUiHandler: SimpleTranslationEntries = {
"overwriteData": "¿Sobrescribir los datos en la ranura seleccionada?",
"loading": "Cargando...",
"wave": "Oleada",
"lv": "Nv",
"empty": "Vacío",
} as const;

View File

@ -30,12 +30,12 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"selectMoveSwapWith": "Elige el movimiento que sustituirá a",
"unlockPassive": "Añadir Pasiva",
"reduceCost": "Reducir Coste",
"cycleShiny": ": Cambiar Shiny",
"cycleForm": ": Cambiar Forma",
"cycleGender": ": Cambiar Género",
"cycleAbility": ": Cambiar Habilidad",
"cycleNature": ": Cambiar Naturaleza",
"cycleVariant": ": Cambiar Variante",
"cycleShiny": "R: Cambiar Shiny",
"cycleForm": "F: Cambiar Forma",
"cycleGender": "G: Cambiar Género",
"cycleAbility": "E: Cambiar Habilidad",
"cycleNature": "N: Cambiar Naturaleza",
"cycleVariant": "V: Cambiar Variante",
"enablePassive": "Activar Pasiva",
"disablePassive": "Desactivar Pasiva",
"locked": "Bloqueado",

View File

@ -1,67 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const challenges: SimpleTranslationEntries = {
"title": "Paramètres du Challenge",
"points": "Bad Ideas",
"confirm_start": "Continuer avec ces paramètres ?",
"singleGeneration.name": "Mono-génération",
"singleGeneration.value.0": "Désactivé",
"singleGeneration.desc.0": "Vous ne pouvez choisir que des Pokémon de la génération sélectionnée.",
"singleGeneration.value.1": "1G",
"singleGeneration.desc.1": "Vous ne pouvez choisir que des Pokémon de 1re génération.",
"singleGeneration.value.2": "2G",
"singleGeneration.desc.2": "Vous ne pouvez choisir que des Pokémon de 2e génération.",
"singleGeneration.value.3": "3G",
"singleGeneration.desc.3": "Vous ne pouvez choisir que des Pokémon de 3e génération.",
"singleGeneration.value.4": "4G",
"singleGeneration.desc.4": "Vous ne pouvez choisir que des Pokémon de 4e génération.",
"singleGeneration.value.5": "5G",
"singleGeneration.desc.5": "Vous ne pouvez choisir que des Pokémon de 5e génération.",
"singleGeneration.value.6": "6G",
"singleGeneration.desc.6": "Vous ne pouvez choisir que des Pokémon de 6e génération.",
"singleGeneration.value.7": "7G",
"singleGeneration.desc.7": "Vous ne pouvez choisir que des Pokémon de 7e génération.",
"singleGeneration.value.8": "8G",
"singleGeneration.desc.8": "Vous ne pouvez choisir que des Pokémon de 8e génération.",
"singleGeneration.value.9": "9G",
"singleGeneration.desc.9": "Vous ne pouvez choisir que des Pokémon de 9e génération.",
"singleType.name": "Mono-type",
"singleType.value.0": "Désactivé",
"singleType.desc.0": "Vous ne pouvez choisir que des Pokémon du type sélectionné.",
"singleType.value.1": "Normal",
"singleType.desc.1": "Vous ne pouvez choisir que des Pokémon de type Normal.",
"singleType.value.2": "Combat",
"singleType.desc.2": "Vous ne pouvez choisir que des Pokémon de type Combat.",
"singleType.value.3": "Vol",
"singleType.desc.3": "Vous ne pouvez choisir que des Pokémon de type Vol.",
"singleType.value.4": "Poison",
"singleType.desc.4": "Vous ne pouvez choisir que des Pokémon de type Poison.",
"singleType.value.5": "Sol",
"singleType.desc.5": "Vous ne pouvez choisir que des Pokémon de type Sol.",
"singleType.value.6": "Roche",
"singleType.desc.6": "Vous ne pouvez choisir que des Pokémon de type Roche.",
"singleType.value.7": "Insecte",
"singleType.desc.7": "Vous ne pouvez choisir que des Pokémon de type Insecte.",
"singleType.value.8": "Spectre",
"singleType.desc.8": "Vous ne pouvez choisir que des Pokémon de type Spectre.",
"singleType.value.9": "Acier",
"singleType.desc.9": "Vous ne pouvez choisir que des Pokémon de type Acier.",
"singleType.value.10": "Feu",
"singleType.desc.10": "Vous ne pouvez choisir que des Pokémon de type Feu.",
"singleType.value.11": "Eau",
"singleType.desc.11": "Vous ne pouvez choisir que des Pokémon de type Eau.",
"singleType.value.12": "Plante",
"singleType.desc.12": "Vous ne pouvez choisir que des Pokémon de type Plante.",
"singleType.value.13": "Électrik",
"singleType.desc.13": "Vous ne pouvez choisir que des Pokémon de type Électrik.",
"singleType.value.14": "Psy",
"singleType.desc.14": "Vous ne pouvez choisir que des Pokémon de type Psy.",
"singleType.value.15": "Glace",
"singleType.desc.15": "Vous ne pouvez choisir que des Pokémon de type Glace.",
"singleType.value.16": "Dragon",
"singleType.desc.16": "Vous ne pouvez choisir que des Pokémon de type Dragon.",
"singleType.value.17": "Ténèbres",
"singleType.desc.17": "Vous ne pouvez choisir que des Pokémon de type Ténèbres.",
"singleType.value.18": "Fée",
"singleType.desc.18": "Vous ne pouvez choisir que des Pokémon de type Fée.",
} as const;

View File

@ -5,7 +5,6 @@ import { battle } from "./battle";
import { battleMessageUiHandler } from "./battle-message-ui-handler";
import { berry } from "./berry";
import { biome } from "./biome";
import { challenges } from "./challenges";
import { commandUiHandler } from "./command-ui-handler";
import {
PGFbattleSpecDialogue,
@ -19,7 +18,6 @@ import {
} from "./dialogue";
import { egg } from "./egg";
import { fightUiHandler } from "./fight-ui-handler";
import { gameMode } from "./game-mode";
import { gameStatsUiHandler } from "./game-stats-ui-handler";
import { growth } from "./growth";
import { menu } from "./menu";
@ -31,7 +29,6 @@ import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon";
import { pokemonInfo } from "./pokemon-info";
import { pokemonInfoContainer } from "./pokemon-info-container";
import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler";
import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers";
@ -48,7 +45,6 @@ export const frConfig = {
battleMessageUiHandler: battleMessageUiHandler,
berry: berry,
biome: biome,
challenges: challenges,
commandUiHandler: commandUiHandler,
PGMdialogue: PGMdialogue,
PGFdialogue: PGFdialogue,
@ -60,7 +56,6 @@ export const frConfig = {
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue,
egg: egg,
fightUiHandler: fightUiHandler,
gameMode: gameMode,
gameStatsUiHandler: gameStatsUiHandler,
growth: growth,
menu: menu,
@ -72,7 +67,6 @@ export const frConfig = {
pokemon: pokemon,
pokemonInfo: pokemonInfo,
pokemonInfoContainer: pokemonInfoContainer,
saveSlotSelectUiHandler: saveSlotSelectUiHandler,
splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler,
titles: titles,

View File

@ -1,10 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const gameMode: SimpleTranslationEntries = {
"classic": "Classique",
"endless": "Infini",
"endlessSpliced": "Infini (Fusions)",
"dailyRun": "Défi du jour",
"unknown": "Inconnu",
"challenge": "Challenge",
} as const;

View File

@ -40,10 +40,10 @@ export const menu: SimpleTranslationEntries = {
"weeklyRankings": "Classement de la Semaine",
"noRankings": "Pas de Classement",
"loading": "Chargement…",
"loadingAsset": "Loading asset: {{assetName}}",
"playersOnline": "Joueurs Connectés",
"empty":"Vide",
"yes":"Oui",
"no":"Non",
"disclaimer": "AVERTISSEMENT",
"disclaimerDescription": "Ce jeu nest pas un produit fini et peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait ou non encore être mis à jour ou terminé."
"disclaimer": "DISCLAIMER",
"disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed."
} as const;

View File

@ -1,9 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const saveSlotSelectUiHandler: SimpleTranslationEntries = {
"overwriteData": "Effacer les données de lemplacement sélectionné ?",
"loading": "Chargement…",
"wave": "Vague",
"lv": "N.",
"empty": "Vide",
} as const;

View File

@ -30,12 +30,12 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"selectMoveSwapWith": "Sélectionnez laquelle échanger avec",
"unlockPassive": "Débloquer Passif",
"reduceCost": "Diminuer le cout",
"cycleShiny": ": » Chromatiques",
"cycleForm": ": » Formes",
"cycleGender": ": » Sexes",
"cycleAbility": ": » Talents",
"cycleNature": ": » Natures",
"cycleVariant": ": » Variants",
"cycleShiny": "R: » Chromatiques",
"cycleForm": "F: » Formes",
"cycleGender": "G: » Sexes",
"cycleAbility": "E: » Talents",
"cycleNature": "N: » Natures",
"cycleVariant": "V: » Variants",
"enablePassive": "Activer Passif",
"disablePassive": "Désactiver Passif",
"locked": "Verrouillé",

View File

@ -1,67 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const challenges: SimpleTranslationEntries = {
"title": "Challenge Modifiers",
"points": "Bad Ideas",
"confirm_start": "Proceed with these challenges?",
"singleGeneration.name": "Mono Gen",
"singleGeneration.value.0": "Off",
"singleGeneration.desc.0": "You can only use pokemon from the chosen generation.",
"singleGeneration.value.1": "Gen 1",
"singleGeneration.desc.1": "You can only use pokemon from generation one.",
"singleGeneration.value.2": "Gen 2",
"singleGeneration.desc.2": "You can only use pokemon from generation two.",
"singleGeneration.value.3": "Gen 3",
"singleGeneration.desc.3": "You can only use pokemon from generation three.",
"singleGeneration.value.4": "Gen 4",
"singleGeneration.desc.4": "You can only use pokemon from generation four.",
"singleGeneration.value.5": "Gen 5",
"singleGeneration.desc.5": "You can only use pokemon from generation five.",
"singleGeneration.value.6": "Gen 6",
"singleGeneration.desc.6": "You can only use pokemon from generation six.",
"singleGeneration.value.7": "Gen 7",
"singleGeneration.desc.7": "You can only use pokemon from generation seven.",
"singleGeneration.value.8": "Gen 8",
"singleGeneration.desc.8": "You can only use pokemon from generation eight.",
"singleGeneration.value.9": "Gen 9",
"singleGeneration.desc.9": "You can only use pokemon from generation nine.",
"singleType.name": "Mono Type",
"singleType.value.0": "Off",
"singleType.desc.0": "You can only use pokemon of the chosen type.",
"singleType.value.1": "Normal",
"singleType.desc.1": "You can only use pokemon with the Normal type.",
"singleType.value.2": "Fighting",
"singleType.desc.2": "You can only use pokemon with the Fighting type.",
"singleType.value.3": "Flying",
"singleType.desc.3": "You can only use pokemon with the Flying type.",
"singleType.value.4": "Poison",
"singleType.desc.4": "You can only use pokemon with the Poison type.",
"singleType.value.5": "Ground",
"singleType.desc.5": "You can only use pokemon with the Ground type.",
"singleType.value.6": "Rock",
"singleType.desc.6": "You can only use pokemon with the Rock type.",
"singleType.value.7": "Bug",
"singleType.desc.7": "You can only use pokemon with the Bug type.",
"singleType.value.8": "Ghost",
"singleType.desc.8": "You can only use pokemon with the Ghost type.",
"singleType.value.9": "Steel",
"singleType.desc.9": "You can only use pokemon with the Steel type.",
"singleType.value.10": "Fire",
"singleType.desc.10": "You can only use pokemon with the Fire type.",
"singleType.value.11": "Water",
"singleType.desc.11": "You can only use pokemon with the Water type.",
"singleType.value.12": "Grass",
"singleType.desc.12": "You can only use pokemon with the Grass type.",
"singleType.value.13": "Electric",
"singleType.desc.13": "You can only use pokemon with the Electric type.",
"singleType.value.14": "Psychic",
"singleType.desc.14": "You can only use pokemon with the Psychic type.",
"singleType.value.15": "Ice",
"singleType.desc.15": "You can only use pokemon with the Ice type.",
"singleType.value.16": "Dragon",
"singleType.desc.16": "You can only use pokemon with the Dragon type.",
"singleType.value.17": "Dark",
"singleType.desc.17": "You can only use pokemon with the Dark type.",
"singleType.value.18": "Fairy",
"singleType.desc.18": "You can only use pokemon with the Fairy type.",
} as const;

View File

@ -5,7 +5,6 @@ import { battle } from "./battle";
import { battleMessageUiHandler } from "./battle-message-ui-handler";
import { berry } from "./berry";
import { biome } from "./biome";
import { challenges } from "./challenges";
import { commandUiHandler } from "./command-ui-handler";
import {
PGFbattleSpecDialogue,
@ -19,7 +18,6 @@ import {
} from "./dialogue";
import { egg } from "./egg";
import { fightUiHandler } from "./fight-ui-handler";
import { gameMode } from "./game-mode";
import { gameStatsUiHandler } from "./game-stats-ui-handler";
import { growth } from "./growth";
import { menu } from "./menu";
@ -31,7 +29,6 @@ import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon";
import { pokemonInfo } from "./pokemon-info";
import { pokemonInfoContainer } from "./pokemon-info-container";
import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler";
import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers";
@ -48,7 +45,6 @@ export const itConfig = {
battleMessageUiHandler: battleMessageUiHandler,
berry: berry,
biome: biome,
challenges: challenges,
commandUiHandler: commandUiHandler,
PGMdialogue: PGMdialogue,
PGFdialogue: PGFdialogue,
@ -60,7 +56,6 @@ export const itConfig = {
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue,
egg: egg,
fightUiHandler: fightUiHandler,
gameMode: gameMode,
gameStatsUiHandler: gameStatsUiHandler,
growth: growth,
menu: menu,
@ -72,7 +67,6 @@ export const itConfig = {
pokemon: pokemon,
pokemonInfo: pokemonInfo,
pokemonInfoContainer: pokemonInfoContainer,
saveSlotSelectUiHandler: saveSlotSelectUiHandler,
splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler,
titles: titles,

View File

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

View File

@ -40,13 +40,13 @@ export const menu: SimpleTranslationEntries = {
"weeklyRankings": "Classifica Settimanale",
"noRankings": "Nessuna Classifica",
"loading": "Caricamento…",
"loadingAsset": "Loading asset: {{assetName}}",
"playersOnline": "Giocatori Online",
"evolving": "Cosa?\n{{pokemonName}} si evolvendo!",
"stoppedEvolving": "{{pokemonName}} ha smesso di evolversi.",
"pauseEvolutionsQuestion": "Vuoi sospendere le evoluzioni per {{pokemonName}}?\nLe evoluzioni possono essere riattivate dalla schermata del party.",
"evolutionsPaused": "Le evoluzioni sono state sospese per {{pokemonName}}.",
"evolutionDone": "Congratulazioni!\n{{pokemonName}} si è evoluto in {{evolvedPokemonName}}!",
"empty":"Vuoto",
"yes":"Si",
"no":"No",
"disclaimer": "DISCLAIMER",

View File

@ -1,9 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const saveSlotSelectUiHandler: SimpleTranslationEntries = {
"overwriteData": "Overwrite the data in the selected slot?",
"loading": "Loading...",
"wave": "Wave",
"lv": "Lv",
"empty": "Vuoto",
} as const;

View File

@ -30,12 +30,12 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
"selectMoveSwapWith": "Seleziona una mossa da scambiare con",
"unlockPassive": "Sblocca Passiva",
"reduceCost": "Riduci Costo",
"cycleShiny": ": Alterna Shiny",
"cycleForm": ": Alterna Forma",
"cycleGender": ": Alterna Sesso",
"cycleAbility": ": Alterna Abilità",
"cycleNature": ": Alterna Natura",
"cycleVariant": ": Alterna Variante",
"cycleShiny": "R: Alterna Shiny",
"cycleForm": "F: Alterna Forma",
"cycleGender": "G: Alterna Sesso",
"cycleAbility": "E: Alterna Abilità",
"cycleNature": "N: Alterna Natura",
"cycleVariant": "V: Alterna Variante",
"enablePassive": "Attiva Passiva",
"disablePassive": "Disattiva Passiva",
"locked": "Bloccato",

View File

@ -1,67 +0,0 @@
import { SimpleTranslationEntries } from "#app/plugins/i18n";
export const challenges: SimpleTranslationEntries = {
"title": "챌린지 조건 설정",
"points": "Bad Ideas",
"confirm_start": "이 조건으로 챌린지를 진행하시겠습니까?",
"singleGeneration.name": "단일 세대",
"singleGeneration.value.0": "설정 안함",
"singleGeneration.desc.0": "선택한 세대의 포켓몬만 사용할 수 있습니다.",
"singleGeneration.value.1": "1세대",
"singleGeneration.desc.1": "1세대의 포켓몬만 사용할 수 있습니다.",
"singleGeneration.value.2": "2세대",
"singleGeneration.desc.2": "2세대의 포켓몬만 사용할 수 있습니다.",
"singleGeneration.value.3": "3세대",
"singleGeneration.desc.3": "3세대의 포켓몬만 사용할 수 있습니다.",
"singleGeneration.value.4": "4세대",
"singleGeneration.desc.4": "4세대의 포켓몬만 사용할 수 있습니다r",
"singleGeneration.value.5": "5세대",
"singleGeneration.desc.5": "5세대의 포켓몬만 사용할 수 있습니다.",
"singleGeneration.value.6": "6세대",
"singleGeneration.desc.6": "6세대의 포켓몬만 사용할 수 있습니다.",
"singleGeneration.value.7": "7세대",
"singleGeneration.desc.7": "7세대의 포켓몬만 사용할 수 있습니다.",
"singleGeneration.value.8": "8세대",
"singleGeneration.desc.8": "8세대의 포켓몬만 사용할 수 있습니다.",
"singleGeneration.value.9": "9세대",
"singleGeneration.desc.9": "9세대의 포켓몬만 사용할 수 있습니다.",
"singleType.name": "단일 타입",
"singleType.value.0": "설정 안함",
"singleType.desc.0": "선택한 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.1": "노말",
"singleType.desc.1": "노말 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.2": "격투",
"singleType.desc.2": "격투 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.3": "비행",
"singleType.desc.3": "비행 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.4": "독",
"singleType.desc.4": "독 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.5": "땅",
"singleType.desc.5": "땅 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.6": "바위 ",
"singleType.desc.6": "바위 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.7": "벌레",
"singleType.desc.7": "벌레 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.8": "고스트",
"singleType.desc.8": "고스트 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.9": "강철",
"singleType.desc.9": "강철 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.10": "불꽃",
"singleType.desc.10": "불꽃 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.11": "물",
"singleType.desc.11": "물 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.12": "풀",
"singleType.desc.12": "풀 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.13": "전기",
"singleType.desc.13": "전기 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.14": "에스퍼",
"singleType.desc.14": "에스퍼 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.15": "얼음",
"singleType.desc.15": "얼음 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.16": "드래곤",
"singleType.desc.16": "드래곤 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.17": "악",
"singleType.desc.17": "악 타입의 포켓몬만 사용할 수 있습니다.",
"singleType.value.18": "페어리",
"singleType.desc.18": "페어리 타입의 포켓몬만 사용할 수 있습니다.",
} as const;

View File

@ -5,7 +5,6 @@ import { battle } from "./battle";
import { battleMessageUiHandler } from "./battle-message-ui-handler";
import { berry } from "./berry";
import { biome } from "./biome";
import { challenges } from "./challenges";
import { commandUiHandler } from "./command-ui-handler";
import {
PGFbattleSpecDialogue,
@ -19,7 +18,6 @@ import {
} from "./dialogue";
import { egg } from "./egg";
import { fightUiHandler } from "./fight-ui-handler";
import { gameMode } from "./game-mode";
import { gameStatsUiHandler } from "./game-stats-ui-handler";
import { growth } from "./growth";
import { menu } from "./menu";
@ -31,7 +29,6 @@ import { pokeball } from "./pokeball";
import { pokemon } from "./pokemon";
import { pokemonInfo } from "./pokemon-info";
import { pokemonInfoContainer } from "./pokemon-info-container";
import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler";
import { splashMessages } from "./splash-messages";
import { starterSelectUiHandler } from "./starter-select-ui-handler";
import { titles, trainerClasses, trainerNames } from "./trainers";
@ -48,7 +45,6 @@ export const koConfig = {
battleMessageUiHandler: battleMessageUiHandler,
berry: berry,
biome: biome,
challenges: challenges,
commandUiHandler: commandUiHandler,
PGMdialogue: PGMdialogue,
PGFdialogue: PGFdialogue,
@ -60,7 +56,6 @@ export const koConfig = {
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue,
egg: egg,
fightUiHandler: fightUiHandler,
gameMode: gameMode,
gameStatsUiHandler: gameStatsUiHandler,
growth: growth,
menu: menu,
@ -72,7 +67,6 @@ export const koConfig = {
pokemon: pokemon,
pokemonInfo: pokemonInfo,
pokemonInfoContainer: pokemonInfoContainer,
saveSlotSelectUiHandler: saveSlotSelectUiHandler,
splashMessages: splashMessages,
starterSelectUiHandler: starterSelectUiHandler,
titles: titles,

View File

@ -697,19 +697,19 @@ export const PGMdialogue: DialogueTranslationEntries = {
},
"falkner": {
"encounter": {
1: "넓은 하늘을 화려하게 나는 새 포켓몬의 진정한 강함을 알게 해주겠다!",
2: "바람이여, 나에게 오라!",
3: "아버지, 내 시합을 하늘에서도 봐줘!"
1: "I'll show you the real power of the magnificent bird Pokémon!",
2: "Winds, stay with me!",
3: "Dad! I hope you're watching me battle from above!"
},
"victory": {
1: "알았다… 미련없이 땅에 내려가지.",
2: "패배는 패배니까. 넌 정말 강하군.",
3: "…큭! 그래, 내가 졌다."
1: "I understand… I'll bow out gracefully.",
2: "A defeat is a defeat. You are strong indeed.",
3: "…Shoot! Yeah, I lost."
},
"defeat": {
1: "아버지! 소중히 여기던 새 포켓몬으로 이겼어…",
2: "언제나 새 포켓몬이 최강이다!",
3: "아버지를 따라 잡은 기분이군!"
1: "Dad! I won with your cherished bird Pokémon…",
2: "Bird Pokémon are the best after all!",
3: "Feels like I'm catching up to my dad!"
}
},
"nessa": {
@ -874,83 +874,83 @@ export const PGMdialogue: DialogueTranslationEntries = {
},
"morty": {
"encounter": {
1: `조금만 더 노력하면, 내가 전설의 포켓몬을 만나는 미래가 보여.
$내가 !`,
2: `커다란 무지개색 포켓몬은 진정한 강함을 가진 트레이너 앞에 나타난다는 이야기가 있어.
$ 믿, . , .
$내겐 .
$ 믿! !`,
3: "네가 믿든 믿지 않든, 불가사의한 힘은 존재해.",
4: "넌 내 수련의 결실을 보게 될 거야.",
5: "포켓몬과 너의 영혼을 하나로 만들어야 해. 가능하겠어?",
6: "저기, 너 내 수행의 일부분이 되고 싶은거지?"
1: `With a little more, I could see a future in which I meet the legendary Pokémon.
$You're going to help me reach that level!`,
2: `It's said that a rainbow-hued Pokémon will come down to appear before a truly powerful Trainer.
$I believed that tale, so I have secretly trained here all my life. As a result, I can now see what others cannot.
$I see a shadow of the person who will make the Pokémon appear.
$I believe that person is me! You're going to help me reach that level!`,
3: "Whether you choose to believe or not, mystic power does exist.",
4: "You can bear witness to the fruits of my training.",
5: "You must make your soul one with that of Pokémon. Can you do this?",
6: "Say, do you want to be part of my training?"
},
"victory": {
1: "나는 아직 멀었구나…",
2: `그래… 여행으로 먼 곳을 돌아다니면서, 나보다 훨씬 많은 것을 봐왔구나.
$네가 `,
3: "이게 어떻게 가능한 거지…",
4: `우리의 잠재력은 그렇게 다르진 않은 것 같아.
$그치만 .`,
5: "수련이 더 필요하겠군.",
6: "안타깝게 됐네."
1: "I'm not good enough yet…",
2: `I see… Your journey has taken you to far-away places and you have witnessed much more than I.
$I envy you for that`,
3: "How is this possible…",
4: `I don't think our potentials are so different.
$But you seem to have something more than that So be it.`,
5: "Guess I need more training.",
6: "That's a shame."
},
"defeat": {
1: "내가…다시 한 발짝 앞섰어.",
2: "후후훗…",
3: "뭐-뭐야?! 이럴 수가! 그것도 부족해?",
4: "정말 단단한 바위를 뚫고 나온 기분인데!",
5: "아하하하하!",
6: "내가 이길 줄 알았어!"
1: "I moved… one step ahead again.",
2: "Fufufu…",
3: "Wh-what?! It can't be! Even that wasn't enough?",
4: "I feel like I just smashed through a really stubborn boulder!",
5: "Ahahahah!",
6: "I knew I would win!"
}
},
"crispin": {
"encounter": {
1: "이기고 싶으니까 이기고 말겠어!",
2: "싸우고 싶으면 싸운다! 이거면 충분하지 않아!?"
1: "I wanna win, so that's exactly what I'll do!",
2: "I battle because I wanna battle! And you know what? That's how it should be!"
},
"victory": {
1: "이기고 싶었는데…졌잖아!",
2: "이기지 못해서…지고 말았어!"
1: "I wanted to win…but I lost!",
2: "I lost…'cause I couldn't win!"
},
"defeat": {
1: "잠시만. 나 지금 이긴거지? 이긴 거 맞지! 기분 좋은데!",
2: "우와아! 이거 굉장한데!"
1: "Hey, wait a sec. Did I just win? I think I just won! Talk about satisfying!",
2: "Wooo! That was amazing!"
}
},
"amarys": {
"encounter": {
1: `네리네는 그 사람을 구원하고 싶습니다. 그렇기에 패배는 용납되지 않습니다.
$ .`,
1: `I want to be the one to help a certain person. That being the case, I cannot afford to lose.
$ Our battle starts now.`,
},
"victory": {
1: "네리네는… 안 된다는 건가요."
1: "I am… not enough, I see."
},
"defeat": {
1: "네리네가 승리했습니다. 수고하셨습니다."
1: "Victory belongs to me. Well fought."
}
},
"lacey": {
"encounter": {
1: "이번에는 사천왕으로서 승부하는 거니까 평소 사용하는 아이들로 상대해 드릴게요!"
1: "I'll be facing you with my usual party as a member of the Elite Four."
},
"victory": {
1: "멋진 포켓몬 배틀이었어요!"
1: "That was a great battle!"
},
"defeat": {
1: "당신의 포켓몬의 노력에 박수를 보내주세요!"
1: "Let's give your Pokémon a nice round of applause for their efforts!"
}
},
"drayton": {
"encounter": {
1: `의자는 좋은 거야. 너도 그렇게 생각해? 정말 고마운 물건이지.
$ . !`,
1: `Man, I love chairs. Don't you love chairs? What lifesavers.
$I don't get why everyone doesn't just sit all the time. Standing up's tiring work!`,
},
"victory": {
1: "전보다 더 강해질 줄이야!"
1: "Guess I should've expected that!"
},
"defeat": {
1: "헤헤헷! 내 승리야. 분한 건 알겠지만 카지처럼 나가떨어지지마, 응?"
1: "Heh heh! Don't mind me, just scooping up a W over here. I get it if you're upset, but don't go full Kieran on me, OK?"
}
},
"ramos": {
@ -1146,26 +1146,26 @@ export const PGMdialogue: DialogueTranslationEntries = {
},
"lorelei": {
"encounter": {
1: `얼음포켓몬을 내보내면 대적할 사람이 없지! 상대를 얼린다는 건 매우 강력한 공격이야.
$ ! ! ?`,
1: `No one can best me when it comes to icy Pokémon! Freezing moves are powerful!
$Your Pokémon will be at my mercy when they are frozen solid! Hahaha! Are you ready?`,
},
"victory": {
1: "어떻게 감히!"
1: "How dare you!"
},
"defeat": {
1: "얼어붙은 넌 아무것도 할 수 없어."
1: "There's nothing you can do once you're frozen."
}
},
"will": {
"encounter": {
1: `나는 전세계를 돌아다니며, 강한 에스퍼 포켓몬을 만들도록 수행해왔다.
$계속 ! !`,
1: `I have trained all around the world, making my psychic Pokémon powerful.
$I can only keep getting better! Losing is not an option!`,
},
"victory": {
1: "이… 내가… 믿을수 없어…"
1: "I… I can't… believe it…"
},
"defeat": {
1: "근소한 차이였다. 네게 부족한 것이 무엇인지 궁금하군."
1: "That was close. I wonder what it is that you lack."
}
},
"malva": {
@ -1216,35 +1216,35 @@ export const PGMdialogue: DialogueTranslationEntries = {
},
"bruno": {
"encounter": {
1: "우월한 힘으로 너를 부숴주지! 우! 하~앗!"
1: "We will grind you down with our superior power! Hoo hah!"
},
"victory": {
1: "하? 어떻게 내가 진 거지?"
1: "Why? How could I lose?"
},
"defeat": {
1: "얼마든지 내게 도전 할 수 있지만, 결과는 절대 바뀌지 않을 거다!"
1: "You can challenge me all you like, but the results will never change!"
}
},
"bugsy": {
"encounter": {
1: "내 이름은 호일! 벌레 포켓몬에 대해서라면 누구에게도 지지 않아!"
1: "I'm Bugsy! I never lose when it comes to bug Pokémon!"
},
"victory": {
1: "우와, 대단해! 넌 포켓몬 전문가구나!\n내 연구는 아직 안 끝났네. 응, 네가 이겼어."
1: "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win."
},
"defeat": {
1: "고마워! 방금 승부 덕분에, 내 연구도 진전을 이룬 것 같아!"
1: "Thanks! Thanks to our battle, I was also able to make progress in my research!"
}
},
"koga": {
"encounter": {
1: "후하하하! 포켓몬은 딘순히 강한 것만이 아니다--곧 알려주지!"
1: "Fwahahahaha! Pokémon are not merely about brute force--you shall see soon enough!"
},
"victory": {
1: "하! 스스로 증명해냈군!"
1: "Ah! You've proven your worth!"
},
"defeat": {
1: "인술을 피하는 방법을 배워보겠나?"
1: "Have you learned to fear the techniques of the ninja?"
}
},
"bertha": {
@ -1319,13 +1319,13 @@ export const PGMdialogue: DialogueTranslationEntries = {
},
"agatha": {
"encounter": {
1: "포켓몬은 싸우게 하려고 있는 것이야! 진정한 싸움이라는 것을 보여주겠다!"
1: "Pokémon are for battling! I'll show you how a real Trainer battles!"
},
"victory": {
1: "이런! 넌 무언가 특별하구나, 꼬마야!"
1: "Oh my! You're something special, child!"
},
"defeat": {
1: "바하하하. 제대로 된 승부는 이렇게 하는거다!"
1: "Bahaha. That's how a proper battle's done!"
}
},
"flint": {
@ -1414,33 +1414,33 @@ export const PGMdialogue: DialogueTranslationEntries = {
},
"lance": {
"encounter": {
1: "널 기다리고 있었다. 그 실력을 시험해보겠어.",
2: "여기까지 올 수 있을거라고 생각했다. 슬슬 시작해볼까."
1: "I've been waiting for you. Allow me to test your skill.",
2: "I thought that you would be able to get this far. Let's get this started."
},
"victory": {
1: "날 따라잡았군. 훌륭해!",
2: "다른 트레이너가 날 이길 거라곤 생각 못했는데… 놀랍군."
1: "You got me. You are magnificent!",
2: "I never expected another trainer to beat me… I'm surprised."
},
"defeat": {
1: "근소하군. 다시 해볼까?",
2: "네가 약해서가 아니다. 신경쓰지 말도록."
1: "That was close. Want to try again?",
2: "It's not that you are weak. Don't let it bother you."
}
},
"karen": {
"encounter": {
1: "난 카렌! 내 악 타입 포켓몬과의 승부를 원하니?",
2: "난 네가 이전에 만났던 트레이너들과는 달라.",
3: "강한 포켓몬, 약한 포켓몬, 그런 건 사람이 멋대로 정하는 것."
1: "I am Karen. Would you care for a showdown with my Dark-type Pokémon?",
2: "I am unlike those you've already met.",
3: "You've assembled a charming team. Our battle should be a good one."
},
"victory": {
1: "좋아하는 마음이 전해진다면 포켓몬도 답할거야. 그렇게 강해지는 거지",
2: "난 내가 선택한 길을 걸어갈거야.",
3: "챔피언이 너를 기다리고 있어."
1: "No! I can't win. How did you become so strong?",
2: "I will not stray from my chosen path.",
3: "The Champion is looking forward to meeting you."
},
"defeat": {
1: "정말 강한 트레이너라면 좋아하는 포켓몬으로 이길 수 있도록 열심히 해야 해.",
2: "뭐, 비교적 재밌었어.",
3: "언제라도 다시 찾아와, 상대해줄게."
1: "That's about what I expected.",
2: "Well, that was relatively entertaining.",
3: "Come visit me anytime."
}
},
"milo": {
@ -1507,13 +1507,13 @@ export const PGMdialogue: DialogueTranslationEntries = {
},
"blue": {
"encounter": {
1: "여기까지 왔다니, 실력이 꽤 봐줄만 할 것 같은데."
1: "You must be pretty good to get this far."
},
"victory": {
1: "그 녀석한테만 지는 줄 알았는데… 누구냐고? 하, 하…"
1: "I've only lost to him and now to you… Him? Hee, hee…"
},
"defeat": {
1: "봤지? 여기까지 온 내 실력."
1: "See? My power is what got me here."
}
},
"piers": {
@ -1540,24 +1540,24 @@ export const PGMdialogue: DialogueTranslationEntries = {
},
"jasmine": {
"encounter": {
1: "와… 당신의 포켓몬은 인상적이네요. 재미있을 것 같아요."
1: "Oh… Your Pokémon are impressive. I think I will enjoy this."
},
"victory": {
1: "당신은 정말 강하네요. 저도 더 열심히 노력해야겠어요."
1: "You are truly strong. I'll have to try much harder, too."
},
"defeat": {
1: "이길 줄은 몰랐어요."
1: "I never expected to win."
}
},
"lance_champion": {
"encounter": {
1: "여전히 난 챔피언이다. 더이상 주저할 게 없군."
1: "I am still the Champion. I won't hold anything back."
},
"victory": {
1: "새로운 챔피언의 등장이군."
1: "This is the emergence of a new Champion."
},
"defeat": {
1: "성공적으로 챔피언 자리를 지켜냈다."
1: "I successfully defended my Championship."
}
},
"steven": {
@ -1652,24 +1652,24 @@ export const PGMdialogue: DialogueTranslationEntries = {
},
"whitney": {
"encounter": {
1: "있지! 포켓몬들 말이야, 정말 너무 귀엽지?"
1: "Hey! Don't you think Pokémon are, like, super cute?"
},
"victory": {
1: "흑! 으아앙! 너무해!"
1: "Waaah! Waaah! You're so mean!"
},
"defeat": {
1: "이걸로 끝!"
1: "And that's that!"
}
},
"chuck": {
"encounter": {
1: "하! 나에게 도전하겠다고? 용감한 거냐, 아니면 그냥 무모한 거냐?"
1: "Hah! You want to challenge me? Are you brave or just ignorant?"
},
"victory": {
1: "자네 강하군! 나를 제자로 삼아주겠나?"
1: "You're strong! Would you please make me your apprentice?"
},
"defeat": {
1: "자. 내가 자네보다 얼마나 더 강력한지 깨달았겠지?"
1: "There. Do you realize how much more powerful I am than you?"
}
},
"katy": {
@ -1685,24 +1685,24 @@ export const PGMdialogue: DialogueTranslationEntries = {
},
"pryce": {
"encounter": {
1: "젊음만으로는 승리를 보장할 수 없다! 중요한 것은 경험이다."
1: "Youth alone does not ensure victory! Experience is what counts."
},
"victory": {
1: "특출하군! 완벽해. 지금 이 느낌을 잊지 말도록."
1: "Outstanding! That was perfect. Try not to forget what you feel now."
},
"defeat": {
1: "내가 예상했던 그대로군."
1: "Just as I envisioned."
}
},
"clair": {
"encounter": {
1: "내가 누군지 알지? 그런데도 감히 내게 도전해?"
1: "Do you know who I am? And you still dare to challenge me?"
},
"victory": {
1: "네 실력이 어디까지 올라갈 수 있는지 궁금하네. 아주 흥미진진하겠어."
1: "I wonder how far you can get with your skill level. This should be fascinating."
},
"defeat": {
1: "끝이다."
1: "That's that."
}
},
"maylene": {

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