mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-05 16:02:20 +02:00
Compare commits
39 Commits
389c479825
...
5d698b6d38
Author | SHA1 | Date | |
---|---|---|---|
|
5d698b6d38 | ||
|
b8ac98c10c | ||
|
2fca800c20 | ||
|
ce3a9c9c87 | ||
|
3d5dbad5ae | ||
|
67a0ae49b3 | ||
|
a1171eceb9 | ||
|
07f0a67c78 | ||
|
f0a826b8f4 | ||
|
ae02943b16 | ||
|
60a3edb918 | ||
|
8e0e8952da | ||
|
dd40c8caa2 | ||
|
c301a54039 | ||
|
0af0ad5b49 | ||
|
3f9eaf4a5d | ||
|
5e5ece868c | ||
|
281f0df220 | ||
|
751e28d2fc | ||
|
66734c396b | ||
|
40727bdc16 | ||
|
480a2568a9 | ||
|
7cee16cee2 | ||
|
3c94d5aa83 | ||
|
1fdfc6256f | ||
|
a4cb75aaf0 | ||
|
bd5d16802a | ||
|
64d36c9864 | ||
|
2d9f05030b | ||
|
b4cf80a984 | ||
|
3ef495c126 | ||
|
8142f26833 | ||
|
696ff6eae3 | ||
|
9c97e37c27 | ||
|
bf5b6e3f6b | ||
|
aa7c354be8 | ||
|
ff7429f240 | ||
|
3022aabc32 | ||
|
7422ebdb28 |
@ -46,7 +46,14 @@ 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)
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
"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"
|
||||
|
BIN
public/audio/bgm/battle_alola_champion.mp3
Normal file
BIN
public/audio/bgm/battle_alola_champion.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_alola_elite.mp3
Normal file
BIN
public/audio/bgm/battle_alola_elite.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_bb_elite.mp3
Normal file
BIN
public/audio/bgm/battle_bb_elite.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_champion_geeta.mp3
Normal file
BIN
public/audio/bgm/battle_champion_geeta.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_champion_kieran.mp3
Normal file
BIN
public/audio/bgm/battle_champion_kieran.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_champion_nemona.mp3
Normal file
BIN
public/audio/bgm/battle_champion_nemona.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_galar_champion.mp3
Normal file
BIN
public/audio/bgm/battle_galar_champion.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_galar_elite.mp3
Normal file
BIN
public/audio/bgm/battle_galar_elite.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_galar_gym.mp3
Normal file
BIN
public/audio/bgm/battle_galar_gym.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_hoenn_elite.mp3
Normal file
BIN
public/audio/bgm/battle_hoenn_elite.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_kalos_champion.mp3
Normal file
BIN
public/audio/bgm/battle_kalos_champion.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_kalos_elite.mp3
Normal file
BIN
public/audio/bgm/battle_kalos_elite.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_kalos_gym.mp3
Normal file
BIN
public/audio/bgm/battle_kalos_gym.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_arceus.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_arceus.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_birds_galar.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_birds_galar.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_calyrex.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_calyrex.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_deoxys.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_deoxys.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_dia_pal.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_dia_pal.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_dusk_dawn.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_dusk_dawn.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_entei.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_entei.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_giratina.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_giratina.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_glas_spec.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_glas_spec.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_gro_kyo.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_gro_kyo.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_ho_oh.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_ho_oh.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_kanto.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_kanto.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_lake_trio.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_lake_trio.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_loyal_three.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_loyal_three.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_lugia.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_lugia.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_ogerpon.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_ogerpon.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_pecharunt.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_pecharunt.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_raikou.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_raikou.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_rayquaza.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_rayquaza.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_regis_g6.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_regis_g6.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_ruinous.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_ruinous.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_sinnoh.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_sinnoh.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_sol_lun.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_sol_lun.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_suicune.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_suicune.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_tapu.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_tapu.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_terapagos.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_terapagos.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_ub.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_ub.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_ultra_nec.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_ultra_nec.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_xern_yvel.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_xern_yvel.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_legendary_zac_zam.mp3
Normal file
BIN
public/audio/bgm/battle_legendary_zac_zam.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_paldea_elite.mp3
Normal file
BIN
public/audio/bgm/battle_paldea_elite.mp3
Normal file
Binary file not shown.
BIN
public/audio/bgm/battle_paldea_gym.mp3
Normal file
BIN
public/audio/bgm/battle_paldea_gym.mp3
Normal file
Binary file not shown.
@ -1745,27 +1745,27 @@
|
||||
1
|
||||
],
|
||||
"641-incarnate": [
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"641-therian": [
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"642-incarnate": [
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"642-therian": [
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"645-incarnate": [
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
@ -4608,32 +4608,32 @@
|
||||
1
|
||||
],
|
||||
"641-incarnate": [
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"641-therian": [
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"642-incarnate": [
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"642-therian": [
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"645-incarnate": [
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"645-therian": [
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
|
@ -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, fixedBattles } from "./battle";
|
||||
import { GameMode, GameModes, gameModes } from "./game-mode";
|
||||
import Battle, { BattleType, FixedBattleConfig } from "./battle";
|
||||
import { GameMode, GameModes, getGameMode } from "./game-mode";
|
||||
import FieldSpritePipeline from "./pipelines/field-sprite";
|
||||
import SpritePipeline from "./pipelines/sprite";
|
||||
import PartyExpBar from "./ui/party-exp-bar";
|
||||
@ -126,6 +126,7 @@ 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;
|
||||
@ -154,6 +155,13 @@ 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;
|
||||
@ -226,6 +234,7 @@ export default class BattleScene extends SceneBase {
|
||||
public rngSeedOverride: string = "";
|
||||
public rngOffset: integer = 0;
|
||||
|
||||
public inputMethod: string;
|
||||
private infoToggles: InfoToggle[] = [];
|
||||
|
||||
/**
|
||||
@ -852,7 +861,7 @@ export default class BattleScene extends SceneBase {
|
||||
this.gameData = new GameData(this);
|
||||
}
|
||||
|
||||
this.gameMode = gameModes[GameModes.CLASSIC];
|
||||
this.gameMode = getGameMode(GameModes.CLASSIC);
|
||||
|
||||
this.setSeed(Overrides.SEED_OVERRIDE || Utils.randomString(24));
|
||||
console.log("Seed:", this.seed);
|
||||
@ -960,8 +969,8 @@ export default class BattleScene extends SceneBase {
|
||||
|
||||
const playerField = this.getPlayerField();
|
||||
|
||||
if (this.gameMode.hasFixedBattles && fixedBattles.hasOwnProperty(newWaveIndex) && trainerData === undefined) {
|
||||
battleConfig = fixedBattles[newWaveIndex];
|
||||
if (this.gameMode.isFixedBattle(newWaveIndex) && trainerData === undefined) {
|
||||
battleConfig = this.gameMode.getFixedBattle(newWaveIndex);
|
||||
newDouble = battleConfig.double;
|
||||
newBattleType = battleConfig.battleType;
|
||||
this.executeWithSeedOffset(() => newTrainer = battleConfig.getTrainer(this), (battleConfig.seedOffsetWaveIndex || newWaveIndex) << 8);
|
||||
@ -1009,7 +1018,8 @@ export default class BattleScene extends SceneBase {
|
||||
if (Overrides.DOUBLE_BATTLE_OVERRIDE) {
|
||||
newDouble = true;
|
||||
}
|
||||
if (Overrides.SINGLE_BATTLE_OVERRIDE) {
|
||||
/* Override battles into single only if not fighting with trainers */
|
||||
if (newBattleType !== BattleType.TRAINER && Overrides.SINGLE_BATTLE_OVERRIDE) {
|
||||
newDouble = false;
|
||||
}
|
||||
|
||||
@ -1381,8 +1391,7 @@ export default class BattleScene extends SceneBase {
|
||||
if (this.money === undefined) {
|
||||
return;
|
||||
}
|
||||
const formattedMoney =
|
||||
this.moneyFormat === MoneyFormat.ABBREVIATED ? Utils.formatFancyLargeNumber(this.money, 3) : this.money.toLocaleString();
|
||||
const formattedMoney = Utils.formatMoney(this.moneyFormat, this.money);
|
||||
this.moneyText.setText(`₽${formattedMoney}`);
|
||||
this.fieldUI.moveAbove(this.moneyText, this.luckText);
|
||||
if (forceVisible) {
|
||||
@ -1671,55 +1680,145 @@ export default class BattleScene extends SceneBase {
|
||||
|
||||
getBgmLoopPoint(bgmName: string): number {
|
||||
switch (bgmName) {
|
||||
case "battle_kanto_champion":
|
||||
case "battle_kanto_champion": //B2W2 Kanto Champion Battle
|
||||
return 13.950;
|
||||
case "battle_johto_champion":
|
||||
case "battle_johto_champion": //B2W2 Johto Champion Battle
|
||||
return 23.498;
|
||||
case "battle_hoenn_champion":
|
||||
case "battle_hoenn_champion": //B2W2 Hoenn Champion Battle
|
||||
return 11.328;
|
||||
case "battle_sinnoh_champion":
|
||||
case "battle_sinnoh_champion": //B2W2 Sinnoh Champion Battle
|
||||
return 12.235;
|
||||
case "battle_champion_alder":
|
||||
case "battle_champion_alder": //BW Unova Champion Battle
|
||||
return 27.653;
|
||||
case "battle_champion_iris":
|
||||
case "battle_champion_iris": //B2W2 Unova Champion Battle
|
||||
return 10.145;
|
||||
case "battle_elite":
|
||||
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
|
||||
return 17.730;
|
||||
case "battle_final_encounter":
|
||||
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
|
||||
return 19.159;
|
||||
case "battle_final":
|
||||
case "battle_final": //BW Ghetsis Battle
|
||||
return 16.453;
|
||||
case "battle_kanto_gym":
|
||||
case "battle_kanto_gym": //B2W2 Kanto Gym Battle
|
||||
return 13.857;
|
||||
case "battle_johto_gym":
|
||||
case "battle_johto_gym": //B2W2 Johto Gym Battle
|
||||
return 12.911;
|
||||
case "battle_hoenn_gym":
|
||||
case "battle_hoenn_gym": //B2W2 Hoenn Gym Battle
|
||||
return 12.379;
|
||||
case "battle_sinnoh_gym":
|
||||
case "battle_sinnoh_gym": //B2W2 Sinnoh Gym Battle
|
||||
return 13.122;
|
||||
case "battle_unova_gym":
|
||||
case "battle_unova_gym": //BW Unova Gym Battle
|
||||
return 19.145;
|
||||
case "battle_legendary_regis": //B2W2 Legendary Titan Battle
|
||||
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
|
||||
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_rival":
|
||||
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
|
||||
return 13.689;
|
||||
case "battle_rival_2":
|
||||
case "battle_rival_2": //BW N Battle
|
||||
return 17.714;
|
||||
case "battle_rival_3":
|
||||
case "battle_rival_3": //BW Final N Battle
|
||||
return 17.586;
|
||||
case "battle_trainer":
|
||||
case "battle_trainer": //BW Trainer Battle
|
||||
return 13.686;
|
||||
case "battle_wild":
|
||||
case "battle_wild": //BW Wild Battle
|
||||
return 12.703;
|
||||
case "battle_wild_strong":
|
||||
case "battle_wild_strong": //BW Strong Wild Battle
|
||||
return 13.940;
|
||||
case "end_summit":
|
||||
case "end_summit": //PMD RTDX Sky Tower Summit
|
||||
return 30.025;
|
||||
}
|
||||
|
||||
|
138
src/battle.ts
138
src/battle.ts
@ -197,7 +197,11 @@ export default class Battle {
|
||||
if (!this.started && this.trainer.config.encounterBgm && this.trainer.getEncounterMessages()?.length) {
|
||||
return `encounter_${this.trainer.getEncounterBgm()}`;
|
||||
}
|
||||
return this.trainer.getBattleBgm();
|
||||
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";
|
||||
}
|
||||
@ -209,22 +213,116 @@ export default class Battle {
|
||||
return "battle_final_encounter";
|
||||
}
|
||||
if (pokemon.species.legendary || pokemon.species.subLegendary || pokemon.species.mythical) {
|
||||
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";
|
||||
}
|
||||
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) {
|
||||
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";
|
||||
}
|
||||
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.legendary) {
|
||||
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";
|
||||
}
|
||||
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";
|
||||
}
|
||||
if (pokemon.species.legendary) {
|
||||
return "battle_legendary_res_zek";
|
||||
}
|
||||
return "battle_legendary_unova";
|
||||
}
|
||||
}
|
||||
|
||||
@ -322,11 +420,11 @@ function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[]): Get
|
||||
};
|
||||
}
|
||||
|
||||
interface FixedBattleConfigs {
|
||||
export interface FixedBattleConfigs {
|
||||
[key: integer]: FixedBattleConfig
|
||||
}
|
||||
|
||||
export const fixedBattles: FixedBattleConfigs = {
|
||||
export const classicFixedBattles: 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)
|
||||
@ -340,13 +438,13 @@ export const fixedBattles: 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)
|
||||
|
@ -2949,6 +2949,7 @@ 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}
|
||||
@ -2963,6 +2964,9 @@ 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;
|
||||
|
577
src/data/challenge.ts
Normal file
577
src/data/challenge.ts
Normal file
@ -0,0 +1,577 @@
|
||||
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()
|
||||
);
|
||||
}
|
@ -1,6 +1,5 @@
|
||||
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";
|
||||
@ -29,7 +28,7 @@ export function getDailyRunStarters(scene: BattleScene, seed: string): Starter[]
|
||||
const starters: Starter[] = [];
|
||||
|
||||
scene.executeWithSeedOffset(() => {
|
||||
const startingLevel = gameModes[GameModes.DAILY].getStartingLevel();
|
||||
const startingLevel = scene.gameMode.getStartingLevel();
|
||||
|
||||
if (/\d{18}$/.test(seed)) {
|
||||
for (let s = 0; s < 3; s++) {
|
||||
|
7
src/data/enums/challenges.ts
Normal file
7
src/data/enums/challenges.ts
Normal file
@ -0,0 +1,7 @@
|
||||
export enum Challenges {
|
||||
SINGLE_GENERATION,
|
||||
SINGLE_TYPE,
|
||||
LOWER_MAX_STARTER_COST,
|
||||
LOWER_STARTER_POINTS,
|
||||
FRESH_START
|
||||
}
|
@ -3323,65 +3323,10 @@ 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 && Species.SILVALLY)) {
|
||||
if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.ARCEUS) || [user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.SILVALLY)) {
|
||||
const form = user.species.speciesId === Species.ARCEUS || user.species.speciesId === Species.SILVALLY ? user.formIndex : user.fusionSpecies.formIndex;
|
||||
|
||||
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;
|
||||
}
|
||||
move.type = Type[Type[form]];
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -4484,7 +4429,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.isFainted() && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > user.scene.currentBattle.getBattlerCount();
|
||||
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();
|
||||
};
|
||||
}
|
||||
|
||||
@ -6073,7 +6018,7 @@ export function initMoves() {
|
||||
], true)
|
||||
.attr(RemoveArenaTrapAttr),
|
||||
new StatusMove(Moves.SWEET_SCENT, Type.NORMAL, 100, 20, -1, 0, 2)
|
||||
.attr(StatChangeAttr, BattleStat.EVA, -1)
|
||||
.attr(StatChangeAttr, BattleStat.EVA, -2)
|
||||
.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),
|
||||
|
@ -187,6 +187,7 @@ 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;
|
||||
@ -440,6 +441,11 @@ export class TrainerConfig {
|
||||
return this;
|
||||
}
|
||||
|
||||
setMixedBattleBgm(mixedBattleBgm: string): TrainerConfig {
|
||||
this.mixedBattleBgm = mixedBattleBgm;
|
||||
return this;
|
||||
}
|
||||
|
||||
setBattleBgm(battleBgm: string): TrainerConfig {
|
||||
this.battleBgm = battleBgm;
|
||||
return this;
|
||||
@ -605,7 +611,7 @@ export class TrainerConfig {
|
||||
this.setMoneyMultiplier(3.25);
|
||||
this.setBoss();
|
||||
this.setStaticParty();
|
||||
this.setBattleBgm("battle_elite");
|
||||
this.setBattleBgm("battle_unova_elite");
|
||||
this.setVictoryBgm("victory_gym");
|
||||
this.setGenModifiersFunc(party => getRandomTeraModifiers(party, 2, specialtyTypes.length ? specialtyTypes : null));
|
||||
|
||||
@ -1142,76 +1148,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),
|
||||
[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.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.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.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.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),
|
||||
[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.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.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 => {
|
||||
@ -1275,7 +1281,7 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
p.formIndex = 1;
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
[TrainerType.DIANTHA]: new TrainerConfig(++t).initForChampion(signatureSpecies["DIANTHA"],false)
|
||||
[TrainerType.DIANTHA]: new TrainerConfig(++t).initForChampion(signatureSpecies["DIANTHA"],false).setMixedBattleBgm("battle_kalos_champion")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GOURGEIST], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
}))
|
||||
@ -1283,11 +1289,11 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
p.formIndex = 1;
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
[TrainerType.HAU]: new TrainerConfig(++t).initForChampion(signatureSpecies["HAU"],true)
|
||||
[TrainerType.HAU]: new TrainerConfig(++t).initForChampion(signatureSpecies["HAU"],true).setMixedBattleBgm("battle_alola_champion")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALOLA_RAICHU], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
[TrainerType.LEON]: new TrainerConfig(++t).initForChampion(signatureSpecies["LEON"],true)
|
||||
[TrainerType.LEON]: new TrainerConfig(++t).initForChampion(signatureSpecies["LEON"],true).setMixedBattleBgm("battle_galar_champion")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.RILLABOOM, Species.CINDERACE, Species.INTELEON], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
}))
|
||||
@ -1295,15 +1301,15 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
p.formIndex = 3;
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
[TrainerType.GEETA]: new TrainerConfig(++t).initForChampion(signatureSpecies["GEETA"],false)
|
||||
[TrainerType.GEETA]: new TrainerConfig(++t).initForChampion(signatureSpecies["GEETA"],false).setMixedBattleBgm("battle_champion_geeta")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GLIMMORA], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
[TrainerType.NEMONA]: new TrainerConfig(++t).initForChampion(signatureSpecies["NEMONA"],false)
|
||||
[TrainerType.NEMONA]: new TrainerConfig(++t).initForChampion(signatureSpecies["NEMONA"],false).setMixedBattleBgm("battle_champion_nemona")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
[TrainerType.KIERAN]: new TrainerConfig(++t).initForChampion(signatureSpecies["KIERAN"],true)
|
||||
[TrainerType.KIERAN]: new TrainerConfig(++t).initForChampion(signatureSpecies["KIERAN"],true).setMixedBattleBgm("battle_champion_kieran")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.POLIWRATH, Species.POLITOED], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
|
@ -501,6 +501,52 @@ 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:
|
||||
|
@ -531,6 +531,11 @@ export class EvolutionPhase extends Phase {
|
||||
}
|
||||
|
||||
export class EndEvolutionPhase extends Phase {
|
||||
|
||||
constructor(scene: BattleScene) {
|
||||
super(scene);
|
||||
}
|
||||
|
||||
start() {
|
||||
super.start();
|
||||
|
||||
|
@ -48,6 +48,7 @@ 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,
|
||||
@ -266,11 +267,22 @@ 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.isFainted() && !!this.scene && (!onField || this.isOnField());
|
||||
return this.isAllowedInBattle() && !!this.scene && (!onField || this.isOnField());
|
||||
}
|
||||
|
||||
getDexAttr(): bigint {
|
||||
@ -845,11 +857,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();
|
||||
const speciesForm = this.getSpeciesForm(ignoreOverride);
|
||||
|
||||
types.push(speciesForm.type1);
|
||||
|
||||
const fusionSpeciesForm = this.getFusionSpeciesForm();
|
||||
const fusionSpeciesForm = this.getFusionSpeciesForm(ignoreOverride);
|
||||
if (fusionSpeciesForm) {
|
||||
if (fusionSpeciesForm.type2 !== null && fusionSpeciesForm.type2 !== speciesForm.type1) {
|
||||
types.push(fusionSpeciesForm.type2);
|
||||
@ -885,8 +897,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
return types;
|
||||
}
|
||||
|
||||
isOfType(type: Type, forDefend: boolean = false): boolean {
|
||||
return !!this.getTypes(true, forDefend).find(t => t === type);
|
||||
isOfType(type: Type, includeTeraType: boolean = true, forDefend: boolean = false, ignoreOverride?: boolean): boolean {
|
||||
return !!this.getTypes(includeTeraType, forDefend, ignoreOverride).some(t => t === type);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1054,7 +1066,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
}
|
||||
|
||||
isGrounded(): boolean {
|
||||
return !this.isOfType(Type.FLYING, true) && !this.hasAbility(Abilities.LEVITATE);
|
||||
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);
|
||||
}
|
||||
|
||||
getAttackMoveEffectiveness(source: Pokemon, pokemonMove: PokemonMove): TypeDamageMultiplier {
|
||||
@ -1576,11 +1599,20 @@ 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.flyoutMenu?.toggleFlyout(visible);
|
||||
this.battleInfo.toggleFlyout(visible);
|
||||
}
|
||||
|
||||
addExp(exp: integer) {
|
||||
|
@ -166,6 +166,10 @@ 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;
|
||||
}
|
||||
|
@ -1,17 +1,20 @@
|
||||
import { fixedBattles } from "./battle";
|
||||
import i18next from "i18next";
|
||||
import { classicFixedBattles, FixedBattleConfig, FixedBattleConfigs } 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 Utils from "./utils";
|
||||
import * as Overrides from "./overrides";
|
||||
import * as Utils from "./utils";
|
||||
|
||||
export enum GameModes {
|
||||
CLASSIC,
|
||||
ENDLESS,
|
||||
SPLICED_ENDLESS,
|
||||
DAILY
|
||||
DAILY,
|
||||
CHALLENGE
|
||||
}
|
||||
|
||||
interface GameModeConfig {
|
||||
@ -19,12 +22,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 {
|
||||
@ -33,16 +36,23 @@ 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) {
|
||||
constructor(modeId: GameModes, config: GameModeConfig, battleConfig?: FixedBattleConfigs) {
|
||||
this.modeId = modeId;
|
||||
this.challenges = [];
|
||||
Object.assign(this, config);
|
||||
if (this.isChallenge) {
|
||||
this.challenges = allChallenges.map(c => copyChallenge(c));
|
||||
}
|
||||
this.battleConfig = battleConfig || {};
|
||||
}
|
||||
|
||||
/**
|
||||
@ -112,7 +122,7 @@ export class GameMode implements GameModeConfig {
|
||||
if (w === waveIndex) {
|
||||
continue;
|
||||
}
|
||||
if ((w % 30) === (arena.scene.offsetGym ? 0 : 20) || fixedBattles.hasOwnProperty(w)) {
|
||||
if ((w % 30) === (arena.scene.offsetGym ? 0 : 20) || this.isFixedBattle(waveIndex)) {
|
||||
allowTrainerBattle = false;
|
||||
break;
|
||||
} else if (w < waveIndex) {
|
||||
@ -161,6 +171,7 @@ 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:
|
||||
@ -208,10 +219,36 @@ 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;
|
||||
@ -221,6 +258,7 @@ 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:
|
||||
@ -232,20 +270,45 @@ export class GameMode implements GameModeConfig {
|
||||
getName(): string {
|
||||
switch (this.modeId) {
|
||||
case GameModes.CLASSIC:
|
||||
return "Classic";
|
||||
return i18next.t("gameMode:classic");
|
||||
case GameModes.ENDLESS:
|
||||
return "Endless";
|
||||
return i18next.t("gameMode:endless");
|
||||
case GameModes.SPLICED_ENDLESS:
|
||||
return "Endless (Spliced)";
|
||||
return i18next.t("gameMode:endlessSpliced");
|
||||
case GameModes.DAILY:
|
||||
return "Daily Run";
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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 })
|
||||
});
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -18,8 +18,10 @@ 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() {
|
||||
@ -329,6 +331,7 @@ export class LoadingScene extends SceneBase {
|
||||
|
||||
this.loadLoadingScreen();
|
||||
|
||||
initVouchers();
|
||||
initAchievements();
|
||||
initStatsKeys();
|
||||
initPokemonPrevolutions();
|
||||
@ -339,6 +342,7 @@ export class LoadingScene extends SceneBase {
|
||||
initSpecies();
|
||||
initMoves();
|
||||
initAbilities();
|
||||
initChallenges();
|
||||
}
|
||||
|
||||
loadLoadingScreen() {
|
||||
@ -432,7 +436,7 @@ export class LoadingScene extends SceneBase {
|
||||
});
|
||||
|
||||
this.load.on("fileprogress", file => {
|
||||
assetText.setText(`Loading asset: ${file.key}`);
|
||||
assetText.setText(i18next.t("menu:loadingAsset", { assetName: file.key }));
|
||||
});
|
||||
|
||||
loadingGraphics.push(bg, graphics, progressBar, progressBox, logo, percentText, assetText);
|
||||
|
67
src/locales/de/challenges.ts
Normal file
67
src/locales/de/challenges.ts
Normal file
@ -0,0 +1,67 @@
|
||||
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;
|
@ -5,6 +5,7 @@ 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,
|
||||
@ -18,6 +19,7 @@ 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";
|
||||
@ -29,6 +31,7 @@ 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";
|
||||
@ -45,6 +48,7 @@ export const deConfig = {
|
||||
battleMessageUiHandler: battleMessageUiHandler,
|
||||
berry: berry,
|
||||
biome: biome,
|
||||
challenges: challenges,
|
||||
commandUiHandler: commandUiHandler,
|
||||
PGMdialogue: PGMdialogue,
|
||||
PGFdialogue: PGFdialogue,
|
||||
@ -56,6 +60,7 @@ export const deConfig = {
|
||||
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue,
|
||||
egg: egg,
|
||||
fightUiHandler: fightUiHandler,
|
||||
gameMode: gameMode,
|
||||
gameStatsUiHandler: gameStatsUiHandler,
|
||||
growth: growth,
|
||||
menu: menu,
|
||||
@ -67,6 +72,7 @@ export const deConfig = {
|
||||
pokemon: pokemon,
|
||||
pokemonInfo: pokemonInfo,
|
||||
pokemonInfoContainer: pokemonInfoContainer,
|
||||
saveSlotSelectUiHandler: saveSlotSelectUiHandler,
|
||||
splashMessages: splashMessages,
|
||||
starterSelectUiHandler: starterSelectUiHandler,
|
||||
titles: titles,
|
||||
|
10
src/locales/de/game-mode.ts
Normal file
10
src/locales/de/game-mode.ts
Normal file
@ -0,0 +1,10 @@
|
||||
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;
|
@ -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",
|
||||
|
9
src/locales/de/save-slot-select-ui-handler.ts
Normal file
9
src/locales/de/save-slot-select-ui-handler.ts
Normal file
@ -0,0 +1,9 @@
|
||||
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;
|
@ -168,4 +168,99 @@ 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;
|
||||
|
67
src/locales/en/challenges.ts
Normal file
67
src/locales/en/challenges.ts
Normal file
@ -0,0 +1,67 @@
|
||||
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;
|
@ -5,6 +5,7 @@ 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,
|
||||
@ -18,6 +19,7 @@ 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";
|
||||
@ -29,6 +31,7 @@ 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";
|
||||
@ -45,6 +48,7 @@ export const enConfig = {
|
||||
battleMessageUiHandler: battleMessageUiHandler,
|
||||
berry: berry,
|
||||
biome: biome,
|
||||
challenges: challenges,
|
||||
commandUiHandler: commandUiHandler,
|
||||
PGMdialogue: PGMdialogue,
|
||||
PGFdialogue: PGFdialogue,
|
||||
@ -56,6 +60,7 @@ export const enConfig = {
|
||||
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue,
|
||||
egg: egg,
|
||||
fightUiHandler: fightUiHandler,
|
||||
gameMode: gameMode,
|
||||
gameStatsUiHandler: gameStatsUiHandler,
|
||||
growth: growth,
|
||||
menu: menu,
|
||||
@ -67,6 +72,7 @@ export const enConfig = {
|
||||
pokemon: pokemon,
|
||||
pokemonInfo: pokemonInfo,
|
||||
pokemonInfoContainer: pokemonInfoContainer,
|
||||
saveSlotSelectUiHandler: saveSlotSelectUiHandler,
|
||||
splashMessages: splashMessages,
|
||||
starterSelectUiHandler: starterSelectUiHandler,
|
||||
titles: titles,
|
||||
|
@ -2372,7 +2372,7 @@ export const PGMdoubleBattleDialogue: DialogueTranslationEntries = {
|
||||
},
|
||||
"tate_liza_double": {
|
||||
"encounter": {
|
||||
1: `Tate: Are you suprised?
|
||||
1: `Tate: Are you surprised?
|
||||
$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 suprised?
|
||||
1: `Liza: Hihihi... Are you surprised?
|
||||
$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!
|
||||
|
10
src/locales/en/game-mode.ts
Normal file
10
src/locales/en/game-mode.ts
Normal file
@ -0,0 +1,10 @@
|
||||
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;
|
@ -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",
|
||||
|
9
src/locales/en/save-slot-select-ui-handler.ts
Normal file
9
src/locales/en/save-slot-select-ui-handler.ts
Normal file
@ -0,0 +1,9 @@
|
||||
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;
|
@ -30,12 +30,12 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||
"selectMoveSwapWith": "Select a move to swap with",
|
||||
"unlockPassive": "Unlock Passive",
|
||||
"reduceCost": "Reduce Cost",
|
||||
"cycleShiny": "R: Cycle Shiny",
|
||||
"cycleForm": "F: Cycle Form",
|
||||
"cycleGender": "G: Cycle Gender",
|
||||
"cycleAbility": "E: Cycle Ability",
|
||||
"cycleNature": "N: Cycle Nature",
|
||||
"cycleVariant": "V: Cycle Variant",
|
||||
"cycleShiny": ": Cycle Shiny",
|
||||
"cycleForm": ": Cycle Form",
|
||||
"cycleGender": ": Cycle Gender",
|
||||
"cycleAbility": ": Cycle Ability",
|
||||
"cycleNature": ": Cycle Nature",
|
||||
"cycleVariant": ": Cycle Variant",
|
||||
"enablePassive": "Enable Passive",
|
||||
"disablePassive": "Disable Passive",
|
||||
"locked": "Locked",
|
||||
|
@ -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": "Wild {{pokemonName}}",
|
||||
"foePokemonWithAffix": "Foe {{pokemonName}}",
|
||||
"useMove": "{{pokemonNameWithAffix}} used {{moveName}}!",
|
||||
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
|
||||
"regainHealth": "{{pokemonName}} regained\nhealth!"
|
||||
"wildPokemonWithAffix": "El {{pokemonName}} salvaje",
|
||||
"foePokemonWithAffix": "El {{pokemonName}} enemigo",
|
||||
"useMove": "¡{{pokemonNameWithAffix}} usó {{moveName}}!",
|
||||
"drainMessage": "¡{{pokemonName}} tuvo su\nenergía absorbida!",
|
||||
"regainHealth": "¡{{pokemonName}} recuperó\nPS!"
|
||||
} as const;
|
||||
|
67
src/locales/es/challenges.ts
Normal file
67
src/locales/es/challenges.ts
Normal file
@ -0,0 +1,67 @@
|
||||
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;
|
@ -5,6 +5,7 @@ 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,
|
||||
@ -18,6 +19,7 @@ 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";
|
||||
@ -29,6 +31,7 @@ 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";
|
||||
@ -45,6 +48,7 @@ export const esConfig = {
|
||||
battleMessageUiHandler: battleMessageUiHandler,
|
||||
berry: berry,
|
||||
biome: biome,
|
||||
challenges: challenges,
|
||||
commandUiHandler: commandUiHandler,
|
||||
PGMdialogue: PGMdialogue,
|
||||
PGFdialogue: PGFdialogue,
|
||||
@ -56,6 +60,7 @@ export const esConfig = {
|
||||
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue,
|
||||
egg: egg,
|
||||
fightUiHandler: fightUiHandler,
|
||||
gameMode: gameMode,
|
||||
gameStatsUiHandler: gameStatsUiHandler,
|
||||
growth: growth,
|
||||
menu: menu,
|
||||
@ -67,6 +72,7 @@ export const esConfig = {
|
||||
pokemon: pokemon,
|
||||
pokemonInfo: pokemonInfo,
|
||||
pokemonInfoContainer: pokemonInfoContainer,
|
||||
saveSlotSelectUiHandler: saveSlotSelectUiHandler,
|
||||
splashMessages: splashMessages,
|
||||
starterSelectUiHandler: starterSelectUiHandler,
|
||||
titles: titles,
|
||||
|
10
src/locales/es/game-mode.ts
Normal file
10
src/locales/es/game-mode.ts
Normal file
@ -0,0 +1,10 @@
|
||||
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;
|
@ -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": "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."
|
||||
"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."
|
||||
} as const;
|
||||
|
@ -130,7 +130,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
|
||||
},
|
||||
|
||||
"RARE_CANDY": { name: "Carameloraro" },
|
||||
"RARER_CANDY": { name: "Rarer Candy" },
|
||||
"RARER_CANDY": { name: "Caramelorarísimo" },
|
||||
|
||||
"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: "Lure" },
|
||||
"SUPER_LURE": { name: "Super Lure" },
|
||||
"MAX_LURE": { name: "Max Lure" },
|
||||
"LURE": { name: "Incienso" },
|
||||
"SUPER_LURE": { name: "Superincienso" },
|
||||
"MAX_LURE": { name: "Incienso Máximo" },
|
||||
|
||||
"MEMORY_MUSHROOM": { name: "Memory Mushroom", description: "Recall one Pokémon's forgotten move" },
|
||||
"MEMORY_MUSHROOM": { name: "Seta Recuerdo", description: "Recuerda un movimiento olvidado de un Pokémon." },
|
||||
|
||||
"EXP_SHARE": { name: "Repartir EXP", description: "Los que no combatan reciben el 20% de la EXP" },
|
||||
"EXP_BALANCE": { name: "EXP. Balance", description: "Da mayor parte de la EXP recibida a los miembros del equipo que tengan menos nivel" },
|
||||
"EXP_BALANCE": { name: "Equilibrar EXP", 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: "Multi Lens" },
|
||||
"MULTI_LENS": { name: "Multilupa" },
|
||||
|
||||
"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: "Baton", description: "Permite pasar los efectos al cambiar de Pokémon, también evita las trampas" },
|
||||
"BATON": { name: "Relevo", 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: "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" },
|
||||
"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" },
|
||||
},
|
||||
TempBattleStatBoosterItem: {
|
||||
"x_attack": "Ataque X",
|
||||
|
9
src/locales/es/save-slot-select-ui-handler.ts
Normal file
9
src/locales/es/save-slot-select-ui-handler.ts
Normal file
@ -0,0 +1,9 @@
|
||||
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;
|
@ -30,12 +30,12 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||
"selectMoveSwapWith": "Elige el movimiento que sustituirá a",
|
||||
"unlockPassive": "Añadir Pasiva",
|
||||
"reduceCost": "Reducir Coste",
|
||||
"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",
|
||||
"cycleShiny": ": Cambiar Shiny",
|
||||
"cycleForm": ": Cambiar Forma",
|
||||
"cycleGender": ": Cambiar Género",
|
||||
"cycleAbility": ": Cambiar Habilidad",
|
||||
"cycleNature": ": Cambiar Naturaleza",
|
||||
"cycleVariant": ": Cambiar Variante",
|
||||
"enablePassive": "Activar Pasiva",
|
||||
"disablePassive": "Desactivar Pasiva",
|
||||
"locked": "Bloqueado",
|
||||
|
67
src/locales/fr/challenges.ts
Normal file
67
src/locales/fr/challenges.ts
Normal file
@ -0,0 +1,67 @@
|
||||
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;
|
@ -5,6 +5,7 @@ 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,
|
||||
@ -18,6 +19,7 @@ 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";
|
||||
@ -29,6 +31,7 @@ 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";
|
||||
@ -45,6 +48,7 @@ export const frConfig = {
|
||||
battleMessageUiHandler: battleMessageUiHandler,
|
||||
berry: berry,
|
||||
biome: biome,
|
||||
challenges: challenges,
|
||||
commandUiHandler: commandUiHandler,
|
||||
PGMdialogue: PGMdialogue,
|
||||
PGFdialogue: PGFdialogue,
|
||||
@ -56,6 +60,7 @@ export const frConfig = {
|
||||
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue,
|
||||
egg: egg,
|
||||
fightUiHandler: fightUiHandler,
|
||||
gameMode: gameMode,
|
||||
gameStatsUiHandler: gameStatsUiHandler,
|
||||
growth: growth,
|
||||
menu: menu,
|
||||
@ -67,6 +72,7 @@ export const frConfig = {
|
||||
pokemon: pokemon,
|
||||
pokemonInfo: pokemonInfo,
|
||||
pokemonInfoContainer: pokemonInfoContainer,
|
||||
saveSlotSelectUiHandler: saveSlotSelectUiHandler,
|
||||
splashMessages: splashMessages,
|
||||
starterSelectUiHandler: starterSelectUiHandler,
|
||||
titles: titles,
|
||||
|
10
src/locales/fr/game-mode.ts
Normal file
10
src/locales/fr/game-mode.ts
Normal file
@ -0,0 +1,10 @@
|
||||
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;
|
@ -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": "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."
|
||||
"disclaimer": "AVERTISSEMENT",
|
||||
"disclaimerDescription": "Ce jeu n’est 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é."
|
||||
} as const;
|
||||
|
9
src/locales/fr/save-slot-select-ui-handler.ts
Normal file
9
src/locales/fr/save-slot-select-ui-handler.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||
|
||||
export const saveSlotSelectUiHandler: SimpleTranslationEntries = {
|
||||
"overwriteData": "Effacer les données de l’emplacement sélectionné ?",
|
||||
"loading": "Chargement…",
|
||||
"wave": "Vague",
|
||||
"lv": "N.",
|
||||
"empty": "Vide",
|
||||
} as const;
|
@ -30,12 +30,12 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||
"selectMoveSwapWith": "Sélectionnez laquelle échanger avec",
|
||||
"unlockPassive": "Débloquer Passif",
|
||||
"reduceCost": "Diminuer le cout",
|
||||
"cycleShiny": "R: » Chromatiques",
|
||||
"cycleForm": "F: » Formes",
|
||||
"cycleGender": "G: » Sexes",
|
||||
"cycleAbility": "E: » Talents",
|
||||
"cycleNature": "N: » Natures",
|
||||
"cycleVariant": "V: » Variants",
|
||||
"cycleShiny": ": » Chromatiques",
|
||||
"cycleForm": ": » Formes",
|
||||
"cycleGender": ": » Sexes",
|
||||
"cycleAbility": ": » Talents",
|
||||
"cycleNature": ": » Natures",
|
||||
"cycleVariant": ": » Variants",
|
||||
"enablePassive": "Activer Passif",
|
||||
"disablePassive": "Désactiver Passif",
|
||||
"locked": "Verrouillé",
|
||||
|
67
src/locales/it/challenges.ts
Normal file
67
src/locales/it/challenges.ts
Normal file
@ -0,0 +1,67 @@
|
||||
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;
|
@ -5,6 +5,7 @@ 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,
|
||||
@ -18,6 +19,7 @@ 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";
|
||||
@ -29,6 +31,7 @@ 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";
|
||||
@ -45,6 +48,7 @@ export const itConfig = {
|
||||
battleMessageUiHandler: battleMessageUiHandler,
|
||||
berry: berry,
|
||||
biome: biome,
|
||||
challenges: challenges,
|
||||
commandUiHandler: commandUiHandler,
|
||||
PGMdialogue: PGMdialogue,
|
||||
PGFdialogue: PGFdialogue,
|
||||
@ -56,6 +60,7 @@ export const itConfig = {
|
||||
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue,
|
||||
egg: egg,
|
||||
fightUiHandler: fightUiHandler,
|
||||
gameMode: gameMode,
|
||||
gameStatsUiHandler: gameStatsUiHandler,
|
||||
growth: growth,
|
||||
menu: menu,
|
||||
@ -67,6 +72,7 @@ export const itConfig = {
|
||||
pokemon: pokemon,
|
||||
pokemonInfo: pokemonInfo,
|
||||
pokemonInfoContainer: pokemonInfoContainer,
|
||||
saveSlotSelectUiHandler: saveSlotSelectUiHandler,
|
||||
splashMessages: splashMessages,
|
||||
starterSelectUiHandler: starterSelectUiHandler,
|
||||
titles: titles,
|
||||
|
10
src/locales/it/game-mode.ts
Normal file
10
src/locales/it/game-mode.ts
Normal file
@ -0,0 +1,10 @@
|
||||
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;
|
@ -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",
|
||||
|
9
src/locales/it/save-slot-select-ui-handler.ts
Normal file
9
src/locales/it/save-slot-select-ui-handler.ts
Normal file
@ -0,0 +1,9 @@
|
||||
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;
|
@ -30,12 +30,12 @@ export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||
"selectMoveSwapWith": "Seleziona una mossa da scambiare con",
|
||||
"unlockPassive": "Sblocca Passiva",
|
||||
"reduceCost": "Riduci Costo",
|
||||
"cycleShiny": "R: Alterna Shiny",
|
||||
"cycleForm": "F: Alterna Forma",
|
||||
"cycleGender": "G: Alterna Sesso",
|
||||
"cycleAbility": "E: Alterna Abilità",
|
||||
"cycleNature": "N: Alterna Natura",
|
||||
"cycleVariant": "V: Alterna Variante",
|
||||
"cycleShiny": ": Alterna Shiny",
|
||||
"cycleForm": ": Alterna Forma",
|
||||
"cycleGender": ": Alterna Sesso",
|
||||
"cycleAbility": ": Alterna Abilità",
|
||||
"cycleNature": ": Alterna Natura",
|
||||
"cycleVariant": ": Alterna Variante",
|
||||
"enablePassive": "Attiva Passiva",
|
||||
"disablePassive": "Disattiva Passiva",
|
||||
"locked": "Bloccato",
|
||||
|
67
src/locales/ko/challenges.ts
Normal file
67
src/locales/ko/challenges.ts
Normal file
@ -0,0 +1,67 @@
|
||||
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;
|
@ -5,6 +5,7 @@ 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,
|
||||
@ -18,6 +19,7 @@ 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";
|
||||
@ -29,6 +31,7 @@ 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";
|
||||
@ -45,6 +48,7 @@ export const koConfig = {
|
||||
battleMessageUiHandler: battleMessageUiHandler,
|
||||
berry: berry,
|
||||
biome: biome,
|
||||
challenges: challenges,
|
||||
commandUiHandler: commandUiHandler,
|
||||
PGMdialogue: PGMdialogue,
|
||||
PGFdialogue: PGFdialogue,
|
||||
@ -56,6 +60,7 @@ export const koConfig = {
|
||||
PGFdoubleBattleDialogue: PGFdoubleBattleDialogue,
|
||||
egg: egg,
|
||||
fightUiHandler: fightUiHandler,
|
||||
gameMode: gameMode,
|
||||
gameStatsUiHandler: gameStatsUiHandler,
|
||||
growth: growth,
|
||||
menu: menu,
|
||||
@ -67,6 +72,7 @@ export const koConfig = {
|
||||
pokemon: pokemon,
|
||||
pokemonInfo: pokemonInfo,
|
||||
pokemonInfoContainer: pokemonInfoContainer,
|
||||
saveSlotSelectUiHandler: saveSlotSelectUiHandler,
|
||||
splashMessages: splashMessages,
|
||||
starterSelectUiHandler: starterSelectUiHandler,
|
||||
titles: titles,
|
||||
|
@ -697,19 +697,19 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
},
|
||||
"falkner": {
|
||||
"encounter": {
|
||||
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!"
|
||||
1: "넓은 하늘을 화려하게 나는 새 포켓몬의 진정한 강함을 알게 해주겠다!",
|
||||
2: "바람이여, 나에게 오라!",
|
||||
3: "아버지, 내 시합을 하늘에서도 봐줘!"
|
||||
},
|
||||
"victory": {
|
||||
1: "I understand… I'll bow out gracefully.",
|
||||
2: "A defeat is a defeat. You are strong indeed.",
|
||||
3: "…Shoot! Yeah, I lost."
|
||||
1: "알았다… 미련없이 땅에 내려가지.",
|
||||
2: "패배는 패배니까. 넌 정말 강하군.",
|
||||
3: "…큭! 그래, 내가 졌다."
|
||||
},
|
||||
"defeat": {
|
||||
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!"
|
||||
1: "아버지! 소중히 여기던 새 포켓몬으로 이겼어…",
|
||||
2: "언제나 새 포켓몬이 최강이다!",
|
||||
3: "아버지를 따라 잡은 기분이군!"
|
||||
}
|
||||
},
|
||||
"nessa": {
|
||||
@ -874,83 +874,83 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
},
|
||||
"morty": {
|
||||
"encounter": {
|
||||
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?"
|
||||
1: `조금만 더 노력하면, 내가 전설의 포켓몬을 만나는 미래가 보여.
|
||||
$내가 그 수준에 도달할 수 있게 도와줘!`,
|
||||
2: `커다란 무지개색 포켓몬은 진정한 강함을 가진 트레이너 앞에 나타난다는 이야기가 있어.
|
||||
$난 그 이야기를 믿고, 줄곧 이 곳에서 몰래 수행하고 있어. 그 결과로, 다른 사람들은 볼 수 없는 것을 볼 수 있게 됐지.
|
||||
$내겐 그 포켓몬을 나타나게 할 사람의 그림자가 보이거든.
|
||||
$난 그게 나라고 믿어! 넌 내가 그 수준에 올라갈 수 있도록 도와줘야겠어!`,
|
||||
3: "네가 믿든 믿지 않든, 불가사의한 힘은 존재해.",
|
||||
4: "넌 내 수련의 결실을 보게 될 거야.",
|
||||
5: "포켓몬과 너의 영혼을 하나로 만들어야 해. 가능하겠어?",
|
||||
6: "저기, 너 내 수행의 일부분이 되고 싶은거지?"
|
||||
},
|
||||
"victory": {
|
||||
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."
|
||||
1: "나는 아직 멀었구나…",
|
||||
2: `그래… 여행으로 먼 곳을 돌아다니면서, 나보다 훨씬 많은 것을 봐왔구나.
|
||||
$네가 조금 부럽네…`,
|
||||
3: "이게 어떻게 가능한 거지…",
|
||||
4: `우리의 잠재력은 그렇게 다르진 않은 것 같아.
|
||||
$그치만 넌 그것과 다른 무언가를 많이 갖고 있는 것 같네… 흐음.`,
|
||||
5: "수련이 더 필요하겠군.",
|
||||
6: "안타깝게 됐네."
|
||||
},
|
||||
"defeat": {
|
||||
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!"
|
||||
1: "내가…다시 한 발짝 앞섰어.",
|
||||
2: "후후훗…",
|
||||
3: "뭐-뭐야?! 이럴 수가! 그것도 부족해?",
|
||||
4: "정말 단단한 바위를 뚫고 나온 기분인데!",
|
||||
5: "아하하하하!",
|
||||
6: "내가 이길 줄 알았어!"
|
||||
}
|
||||
},
|
||||
"crispin": {
|
||||
"encounter": {
|
||||
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!"
|
||||
1: "이기고 싶으니까 이기고 말겠어!",
|
||||
2: "싸우고 싶으면 싸운다! 이거면 충분하지 않아!?"
|
||||
},
|
||||
"victory": {
|
||||
1: "I wanted to win…but I lost!",
|
||||
2: "I lost…'cause I couldn't win!"
|
||||
1: "이기고 싶었는데…졌잖아!",
|
||||
2: "이기지 못해서…지고 말았어!"
|
||||
},
|
||||
"defeat": {
|
||||
1: "Hey, wait a sec. Did I just win? I think I just won! Talk about satisfying!",
|
||||
2: "Wooo! That was amazing!"
|
||||
1: "잠시만. 나 지금 이긴거지? 이긴 거 맞지! 기분 좋은데!",
|
||||
2: "우와아! 이거 굉장한데!"
|
||||
}
|
||||
},
|
||||
"amarys": {
|
||||
"encounter": {
|
||||
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.`,
|
||||
1: `네리네는 그 사람을 구원하고 싶습니다. 그렇기에 패배는 용납되지 않습니다.
|
||||
$… 승부를 시작합니다.`,
|
||||
},
|
||||
"victory": {
|
||||
1: "I am… not enough, I see."
|
||||
1: "네리네는… 안 된다는 건가요."
|
||||
},
|
||||
"defeat": {
|
||||
1: "Victory belongs to me. Well fought."
|
||||
1: "네리네가 승리했습니다. 수고하셨습니다."
|
||||
}
|
||||
},
|
||||
"lacey": {
|
||||
"encounter": {
|
||||
1: "I'll be facing you with my usual party as a member of the Elite Four."
|
||||
1: "이번에는 사천왕으로서 승부하는 거니까 평소 사용하는 아이들로 상대해 드릴게요!"
|
||||
},
|
||||
"victory": {
|
||||
1: "That was a great battle!"
|
||||
1: "멋진 포켓몬 배틀이었어요!"
|
||||
},
|
||||
"defeat": {
|
||||
1: "Let's give your Pokémon a nice round of applause for their efforts!"
|
||||
1: "당신의 포켓몬의 노력에 박수를 보내주세요!"
|
||||
}
|
||||
},
|
||||
"drayton": {
|
||||
"encounter": {
|
||||
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!`,
|
||||
1: `의자는 좋은 거야. 너도 그렇게 생각해? 정말 고마운 물건이지.
|
||||
$왜 다들 앉지 않는 걸까. 서 있는 건 힘들잖아!`,
|
||||
},
|
||||
"victory": {
|
||||
1: "Guess I should've expected that!"
|
||||
1: "전보다 더 강해질 줄이야!"
|
||||
},
|
||||
"defeat": {
|
||||
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?"
|
||||
1: "헤헤헷! 내 승리야. 분한 건 알겠지만 카지처럼 나가떨어지지마, 응?"
|
||||
}
|
||||
},
|
||||
"ramos": {
|
||||
@ -1146,26 +1146,26 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
},
|
||||
"lorelei": {
|
||||
"encounter": {
|
||||
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?`,
|
||||
1: `얼음포켓몬을 내보내면 대적할 사람이 없지! 상대를 얼린다는 건 매우 강력한 공격이야.
|
||||
$네 포켓몬이 꽁꽁 얼면 그때부턴 내 손바닥 위거든! 아하하! 준비됐어?`,
|
||||
},
|
||||
"victory": {
|
||||
1: "How dare you!"
|
||||
1: "어떻게 감히!"
|
||||
},
|
||||
"defeat": {
|
||||
1: "There's nothing you can do once you're frozen."
|
||||
1: "얼어붙은 넌 아무것도 할 수 없어."
|
||||
}
|
||||
},
|
||||
"will": {
|
||||
"encounter": {
|
||||
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!`,
|
||||
1: `나는 전세계를 돌아다니며, 강한 에스퍼 포켓몬을 만들도록 수행해왔다.
|
||||
$계속 더 정진하겠다! 패배는 선택지에 없어!`,
|
||||
},
|
||||
"victory": {
|
||||
1: "I… I can't… believe it…"
|
||||
1: "이… 내가… 믿을수 없어…"
|
||||
},
|
||||
"defeat": {
|
||||
1: "That was close. I wonder what it is that you lack."
|
||||
1: "근소한 차이였다. 네게 부족한 것이 무엇인지 궁금하군."
|
||||
}
|
||||
},
|
||||
"malva": {
|
||||
@ -1216,35 +1216,35 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
},
|
||||
"bruno": {
|
||||
"encounter": {
|
||||
1: "We will grind you down with our superior power! Hoo hah!"
|
||||
1: "우월한 힘으로 너를 부숴주지! 우! 하~앗!"
|
||||
},
|
||||
"victory": {
|
||||
1: "Why? How could I lose?"
|
||||
1: "하? 어떻게 내가 진 거지?"
|
||||
},
|
||||
"defeat": {
|
||||
1: "You can challenge me all you like, but the results will never change!"
|
||||
1: "얼마든지 내게 도전 할 수 있지만, 결과는 절대 바뀌지 않을 거다!"
|
||||
}
|
||||
},
|
||||
"bugsy": {
|
||||
"encounter": {
|
||||
1: "I'm Bugsy! I never lose when it comes to bug Pokémon!"
|
||||
1: "내 이름은 호일! 벌레 포켓몬에 대해서라면 누구에게도 지지 않아!"
|
||||
},
|
||||
"victory": {
|
||||
1: "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win."
|
||||
1: "우와, 대단해! 넌 포켓몬 전문가구나!\n내 연구는 아직 안 끝났네. 응, 네가 이겼어."
|
||||
},
|
||||
"defeat": {
|
||||
1: "Thanks! Thanks to our battle, I was also able to make progress in my research!"
|
||||
1: "고마워! 방금 승부 덕분에, 내 연구도 진전을 이룬 것 같아!"
|
||||
}
|
||||
},
|
||||
"koga": {
|
||||
"encounter": {
|
||||
1: "Fwahahahaha! Pokémon are not merely about brute force--you shall see soon enough!"
|
||||
1: "후하하하! 포켓몬은 딘순히 강한 것만이 아니다--곧 알려주지!"
|
||||
},
|
||||
"victory": {
|
||||
1: "Ah! You've proven your worth!"
|
||||
1: "하! 스스로 증명해냈군!"
|
||||
},
|
||||
"defeat": {
|
||||
1: "Have you learned to fear the techniques of the ninja?"
|
||||
1: "인술을 피하는 방법을 배워보겠나?"
|
||||
}
|
||||
},
|
||||
"bertha": {
|
||||
@ -1319,13 +1319,13 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
},
|
||||
"agatha": {
|
||||
"encounter": {
|
||||
1: "Pokémon are for battling! I'll show you how a real Trainer battles!"
|
||||
1: "포켓몬은 싸우게 하려고 있는 것이야! 진정한 싸움이라는 것을 보여주겠다!"
|
||||
},
|
||||
"victory": {
|
||||
1: "Oh my! You're something special, child!"
|
||||
1: "이런! 넌 무언가 특별하구나, 꼬마야!"
|
||||
},
|
||||
"defeat": {
|
||||
1: "Bahaha. That's how a proper battle's done!"
|
||||
1: "바하하하. 제대로 된 승부는 이렇게 하는거다!"
|
||||
}
|
||||
},
|
||||
"flint": {
|
||||
@ -1414,33 +1414,33 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
},
|
||||
"lance": {
|
||||
"encounter": {
|
||||
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."
|
||||
1: "널 기다리고 있었다. 그 실력을 시험해보겠어.",
|
||||
2: "여기까지 올 수 있을거라고 생각했다. 슬슬 시작해볼까."
|
||||
},
|
||||
"victory": {
|
||||
1: "You got me. You are magnificent!",
|
||||
2: "I never expected another trainer to beat me… I'm surprised."
|
||||
1: "날 따라잡았군. 훌륭해!",
|
||||
2: "다른 트레이너가 날 이길 거라곤 생각 못했는데… 놀랍군."
|
||||
},
|
||||
"defeat": {
|
||||
1: "That was close. Want to try again?",
|
||||
2: "It's not that you are weak. Don't let it bother you."
|
||||
1: "근소하군. 다시 해볼까?",
|
||||
2: "네가 약해서가 아니다. 신경쓰지 말도록."
|
||||
}
|
||||
},
|
||||
"karen": {
|
||||
"encounter": {
|
||||
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."
|
||||
1: "난 카렌! 내 악 타입 포켓몬과의 승부를 원하니?",
|
||||
2: "난 네가 이전에 만났던 트레이너들과는 달라.",
|
||||
3: "강한 포켓몬, 약한 포켓몬, 그런 건 사람이 멋대로 정하는 것."
|
||||
},
|
||||
"victory": {
|
||||
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."
|
||||
1: "좋아하는 마음이 전해진다면 포켓몬도 답할거야. 그렇게 강해지는 거지",
|
||||
2: "난 내가 선택한 길을 걸어갈거야.",
|
||||
3: "챔피언이 너를 기다리고 있어."
|
||||
},
|
||||
"defeat": {
|
||||
1: "That's about what I expected.",
|
||||
2: "Well, that was relatively entertaining.",
|
||||
3: "Come visit me anytime."
|
||||
1: "정말 강한 트레이너라면 좋아하는 포켓몬으로 이길 수 있도록 열심히 해야 해.",
|
||||
2: "뭐, 비교적 재밌었어.",
|
||||
3: "언제라도 다시 찾아와, 상대해줄게."
|
||||
}
|
||||
},
|
||||
"milo": {
|
||||
@ -1507,13 +1507,13 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
},
|
||||
"blue": {
|
||||
"encounter": {
|
||||
1: "You must be pretty good to get this far."
|
||||
1: "여기까지 왔다니, 실력이 꽤 봐줄만 할 것 같은데."
|
||||
},
|
||||
"victory": {
|
||||
1: "I've only lost to him and now to you… Him? Hee, hee…"
|
||||
1: "그 녀석한테만 지는 줄 알았는데… 누구냐고? 하, 하…"
|
||||
},
|
||||
"defeat": {
|
||||
1: "See? My power is what got me here."
|
||||
1: "봤지? 여기까지 온 내 실력."
|
||||
}
|
||||
},
|
||||
"piers": {
|
||||
@ -1540,24 +1540,24 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
},
|
||||
"jasmine": {
|
||||
"encounter": {
|
||||
1: "Oh… Your Pokémon are impressive. I think I will enjoy this."
|
||||
1: "와… 당신의 포켓몬은 인상적이네요. 재미있을 것 같아요."
|
||||
},
|
||||
"victory": {
|
||||
1: "You are truly strong. I'll have to try much harder, too."
|
||||
1: "당신은 정말 강하네요. 저도 더 열심히 노력해야겠어요."
|
||||
},
|
||||
"defeat": {
|
||||
1: "I never expected to win."
|
||||
1: "이길 줄은 몰랐어요."
|
||||
}
|
||||
},
|
||||
"lance_champion": {
|
||||
"encounter": {
|
||||
1: "I am still the Champion. I won't hold anything back."
|
||||
1: "여전히 난 챔피언이다. 더이상 주저할 게 없군."
|
||||
},
|
||||
"victory": {
|
||||
1: "This is the emergence of a new Champion."
|
||||
1: "새로운 챔피언의 등장이군."
|
||||
},
|
||||
"defeat": {
|
||||
1: "I successfully defended my Championship."
|
||||
1: "성공적으로 챔피언 자리를 지켜냈다."
|
||||
}
|
||||
},
|
||||
"steven": {
|
||||
@ -1652,24 +1652,24 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
},
|
||||
"whitney": {
|
||||
"encounter": {
|
||||
1: "Hey! Don't you think Pokémon are, like, super cute?"
|
||||
1: "있지! 포켓몬들 말이야, 정말 너무 귀엽지?"
|
||||
},
|
||||
"victory": {
|
||||
1: "Waaah! Waaah! You're so mean!"
|
||||
1: "흑! 으아앙! 너무해!"
|
||||
},
|
||||
"defeat": {
|
||||
1: "And that's that!"
|
||||
1: "이걸로 끝!"
|
||||
}
|
||||
},
|
||||
"chuck": {
|
||||
"encounter": {
|
||||
1: "Hah! You want to challenge me? Are you brave or just ignorant?"
|
||||
1: "하! 나에게 도전하겠다고? 용감한 거냐, 아니면 그냥 무모한 거냐?"
|
||||
},
|
||||
"victory": {
|
||||
1: "You're strong! Would you please make me your apprentice?"
|
||||
1: "자네 강하군! 나를 제자로 삼아주겠나?"
|
||||
},
|
||||
"defeat": {
|
||||
1: "There. Do you realize how much more powerful I am than you?"
|
||||
1: "자. 내가 자네보다 얼마나 더 강력한지 깨달았겠지?"
|
||||
}
|
||||
},
|
||||
"katy": {
|
||||
@ -1685,24 +1685,24 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
||||
},
|
||||
"pryce": {
|
||||
"encounter": {
|
||||
1: "Youth alone does not ensure victory! Experience is what counts."
|
||||
1: "젊음만으로는 승리를 보장할 수 없다! 중요한 것은 경험이다."
|
||||
},
|
||||
"victory": {
|
||||
1: "Outstanding! That was perfect. Try not to forget what you feel now."
|
||||
1: "특출하군! 완벽해. 지금 이 느낌을 잊지 말도록."
|
||||
},
|
||||
"defeat": {
|
||||
1: "Just as I envisioned."
|
||||
1: "내가 예상했던 그대로군."
|
||||
}
|
||||
},
|
||||
"clair": {
|
||||
"encounter": {
|
||||
1: "Do you know who I am? And you still dare to challenge me?"
|
||||
1: "내가 누군지 알지? 그런데도 감히 내게 도전해?"
|
||||
},
|
||||
"victory": {
|
||||
1: "I wonder how far you can get with your skill level. This should be fascinating."
|
||||
1: "네 실력이 어디까지 올라갈 수 있는지 궁금하네. 아주 흥미진진하겠어."
|
||||
},
|
||||
"defeat": {
|
||||
1: "That's that."
|
||||
1: "끝이다."
|
||||
}
|
||||
},
|
||||
"maylene": {
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user