From 44294f1aec5f6d68f83d275a21028502666bb30f Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Thu, 29 Aug 2024 09:13:35 -0700 Subject: [PATCH 01/18] [Localization] Use gender context for achievments/achv (#3871) * i18n: prepare female DE achievments and copy keys in base language: en * adapt gender context for achv * add a TODO about an odd `this` usage * remove debugging leftover code whops * add `playerGender` to settings helper * fix test runs And revert some changes --- src/locales/ca_ES/achv-male.json | 1 - .../ca_ES/{achv-female.json => achv.json} | 0 src/locales/ca_ES/config.ts | 6 +- src/locales/de/achv-male.json | 264 ----------------- .../de/{achv-female.json => achv.json} | 63 ++-- src/locales/de/config.ts | 6 +- src/locales/en/{achv-male.json => achv.json} | 53 ++-- src/locales/en/config.ts | 6 +- src/locales/es/achv-male.json | 163 ----------- .../es/{achv-female.json => achv.json} | 33 ++- src/locales/es/config.ts | 6 +- src/locales/fr/achv-female.json | 264 ----------------- src/locales/fr/{achv-male.json => achv.json} | 38 ++- src/locales/fr/config.ts | 6 +- src/locales/it/achv-male.json | 264 ----------------- .../it/{achv-female.json => achv.json} | 0 src/locales/it/config.ts | 6 +- src/locales/ja/achv-male.json | 264 ----------------- .../ja/{achv-female.json => achv.json} | 0 src/locales/ja/config.ts | 6 +- src/locales/ko/achv-male.json | 264 ----------------- .../ko/{achv-female.json => achv.json} | 0 src/locales/ko/config.ts | 6 +- src/locales/pt_BR/achv-female.json | 264 ----------------- .../pt_BR/{achv-male.json => achv.json} | 12 +- src/locales/pt_BR/config.ts | 6 +- src/locales/zh_CN/achv-male.json | 272 ------------------ .../zh_CN/{achv-female.json => achv.json} | 0 src/locales/zh_CN/config.ts | 6 +- src/locales/zh_TW/achv-male.json | 256 ----------------- .../zh_TW/{achv-female.json => achv.json} | 0 src/locales/zh_TW/config.ts | 6 +- src/system/achv.ts | 123 ++++---- src/test/battle/battle.test.ts | 1 + src/test/utils/gameManager.ts | 2 +- src/test/utils/helpers/settingsHelper.ts | 15 + src/ui/achvs-ui-handler.ts | 21 +- 37 files changed, 232 insertions(+), 2471 deletions(-) delete mode 100644 src/locales/ca_ES/achv-male.json rename src/locales/ca_ES/{achv-female.json => achv.json} (100%) delete mode 100644 src/locales/de/achv-male.json rename src/locales/de/{achv-female.json => achv.json} (91%) rename src/locales/en/{achv-male.json => achv.json} (85%) delete mode 100644 src/locales/es/achv-male.json rename src/locales/es/{achv-female.json => achv.json} (83%) delete mode 100644 src/locales/fr/achv-female.json rename src/locales/fr/{achv-male.json => achv.json} (87%) delete mode 100644 src/locales/it/achv-male.json rename src/locales/it/{achv-female.json => achv.json} (100%) delete mode 100644 src/locales/ja/achv-male.json rename src/locales/ja/{achv-female.json => achv.json} (100%) delete mode 100644 src/locales/ko/achv-male.json rename src/locales/ko/{achv-female.json => achv.json} (100%) delete mode 100644 src/locales/pt_BR/achv-female.json rename src/locales/pt_BR/{achv-male.json => achv.json} (95%) delete mode 100644 src/locales/zh_CN/achv-male.json rename src/locales/zh_CN/{achv-female.json => achv.json} (100%) delete mode 100644 src/locales/zh_TW/achv-male.json rename src/locales/zh_TW/{achv-female.json => achv.json} (100%) diff --git a/src/locales/ca_ES/achv-male.json b/src/locales/ca_ES/achv-male.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/ca_ES/achv-male.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/ca_ES/achv-female.json b/src/locales/ca_ES/achv.json similarity index 100% rename from src/locales/ca_ES/achv-female.json rename to src/locales/ca_ES/achv.json diff --git a/src/locales/ca_ES/config.ts b/src/locales/ca_ES/config.ts index 4229b20a583..514c7fb63c7 100644 --- a/src/locales/ca_ES/config.ts +++ b/src/locales/ca_ES/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const caEsConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/de/achv-male.json b/src/locales/de/achv-male.json deleted file mode 100644 index dcbaf2ebffc..00000000000 --- a/src/locales/de/achv-male.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "Achievements": { - "name": "Errungenschaften" - }, - "Locked": { - "name": "Gesperrt" - }, - "MoneyAchv": { - "description": "Häufe eine Gesamtsumme von {{moneyAmount}} ₽ an." - }, - "10K_MONEY": { - "name": "Besserverdiener" - }, - "100K_MONEY": { - "name": "Reich" - }, - "1M_MONEY": { - "name": "Millionär" - }, - "10M_MONEY": { - "name": "Einprozenter" - }, - "DamageAchv": { - "description": "Füge mit einem Treffer {{damageAmount}} Schaden zu." - }, - "250_DMG": { - "name": "Harte Treffer" - }, - "1000_DMG": { - "name": "Härtere Treffer" - }, - "2500_DMG": { - "name": "Das ist ne Menge Schaden!" - }, - "10000_DMG": { - "name": "One Punch Man" - }, - "HealAchv": { - "description": "Heile {{healAmount}} {{HP}} auf einmal. Mit einer Attacke, Fähigkeit oder einem gehaltenen Gegenstand." - }, - "250_HEAL": { - "name": "Anfänger-Heiler" - }, - "1000_HEAL": { - "name": "Gesundheitsprofi" - }, - "2500_HEAL": { - "name": "Kleriker" - }, - "10000_HEAL": { - "name": "Wiederherstellungsmeister" - }, - "LevelAchv": { - "description": "Erhöhe das Level eines Pokémon auf {{level}}." - }, - "LV_100": { - "name": "Warte, es gibt mehr!" - }, - "LV_250": { - "name": "Elite" - }, - "LV_1000": { - "name": "Geh noch höher hinaus!" - }, - "RibbonAchv": { - "description": "Sammle insgesamt {{ribbonAmount}} Bänder." - }, - "10_RIBBONS": { - "name": "Champion der Pokémon Liga" - }, - "25_RIBBONS": { - "name": "Bänder-Sammler" - }, - "50_RIBBONS": { - "name": "Bänder-Experte" - }, - "75_RIBBONS": { - "name": "Bänder-Guru" - }, - "100_RIBBONS": { - "name": "Bänder-Meister" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "Teamwork", - "description": "Nutze Staffette, während der Anwender mindestens eines Statuswertes maximiert hat." - }, - "MAX_FRIENDSHIP": { - "name": "Freundschaftsmaximierung", - "description": "Erreiche maximale Freundschaft bei einem Pokémon." - }, - "MEGA_EVOLVE": { - "name": "Megaverwandlung", - "description": "Megaentwickle ein Pokémon." - }, - "GIGANTAMAX": { - "name": "Absolute Einheit", - "description": "Gigadynamaximiere ein Pokémon." - }, - "TERASTALLIZE": { - "name": "Typen-Bonus Enthusiast", - "description": "Terrakristallisiere ein Pokémon." - }, - "STELLAR_TERASTALLIZE": { - "name": "Der geheime Typ", - "description": "Terrakristallisiere ein Pokémon zum Typen Stellar." - }, - "SPLICE": { - "name": "Unendliche Fusion", - "description": "Kombiniere zwei Pokémon mit einem DNS-Keil." - }, - "MINI_BLACK_HOLE": { - "name": "Ein Loch voller Items", - "description": "Erlange ein Mini-Schwarzes Loch." - }, - "CATCH_MYTHICAL": { - "name": "Mysteriöses!", - "description": "Fange ein mysteriöses Pokémon." - }, - "CATCH_SUB_LEGENDARY": { - "name": "Sub-Legendär", - "description": "Fange ein sub-legendäres Pokémon." - }, - "CATCH_LEGENDARY": { - "name": "Legendär", - "description": "Fange ein legendäres Pokémon." - }, - "SEE_SHINY": { - "name": "Schillerndes Licht", - "description": "Finde ein wildes schillerndes Pokémon." - }, - "SHINY_PARTY": { - "name": "Das ist Hingabe", - "description": "Habe ein Team aus schillernden Pokémon." - }, - "HATCH_MYTHICAL": { - "name": "Mysteriöses Ei", - "description": "Lass ein mysteriöses Pokémon aus einem Ei schlüpfen." - }, - "HATCH_SUB_LEGENDARY": { - "name": "Sub-Legendäres Ei", - "description": "Lass ein sub-legendäres Pokémon aus einem Ei schlüpfen." - }, - "HATCH_LEGENDARY": { - "name": "Legendäres Ei", - "description": "Lass ein legendäres Pokémon aus einem Ei schlüpfen." - }, - "HATCH_SHINY": { - "name": "Schillerndes Ei", - "description": "Lass ein schillerndes Pokémon aus einem Ei schlüpfen." - }, - "HIDDEN_ABILITY": { - "name": "Geheimes Talent", - "description": "Fang ein Pokémon mit versteckter Fähigkeit." - }, - "PERFECT_IVS": { - "name": "Zertifikat der Echtheit", - "description": "Erhalte ein Pokémon mit perfekten IS-Werten." - }, - "CLASSIC_VICTORY": { - "name": "Ungeschlagen", - "description": "Beende den klassischen Modus erfolgreich." - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "'Bringe dein Kind mit zur Arbeit'-Tag", - "description": "Beende den klassischen Modus erfolgreich mit mindestens einem nicht entwickeltem Pokémon in deinem Team" - }, - "MONO_GEN_ONE": { - "name": "Der originale Rivale", - "description": "Schließe die 'Nur 1. Generation' Herausforderung ab." - }, - "MONO_GEN_TWO": { - "name": "Generation 1.5", - "description": "Schließe die 'Nur 2. Generation' Herausforderung ab." - }, - "MONO_GEN_THREE": { - "name": "Zu viel Wasser?", - "description": "Schließe die 'Nur 3. Generation' Herausforderung ab." - }, - "MONO_GEN_FOUR": { - "name": "Ist SIE wirklich die Stärkste?", - "description": "Schließe die 'Nur 4. Generation' Herausforderung ab." - }, - "MONO_GEN_FIVE": { - "name": "Komplett Original", - "description": "Schließe die 'Nur 5. Generation' Herausforderung ab." - }, - "MONO_GEN_SIX": { - "name": "Fast Königlich", - "description": "Schließe die 'Nur 6. Generation' Herausforderung ab." - }, - "MONO_GEN_SEVEN": { - "name": "Technisch gesehen", - "description": "Schließe die 'Nur 7. Generation' Herausforderung ab." - }, - "MONO_GEN_EIGHT": { - "name": "Die Zeit des Champions", - "description": "Schließe die 'Nur 8. Generation' Herausforderung ab." - }, - "MONO_GEN_NINE": { - "name": "Sie hat es dir leicht gemacht...", - "description": "Schließe die 'Nur 9. Generation' Herausforderung ab." - }, - "MonoType": { - "description": "Beende die Monotyp-{{type}} Herausforderung." - }, - "MONO_NORMAL": { - "name": "Normaler Typ" - }, - "MONO_FIGHTING": { - "name": "Ich kenne Kung Fu." - }, - "MONO_FLYING": { - "name": "Ich glaube ich kann fliegen." - }, - "MONO_POISON": { - "name": "Kantos Liebling" - }, - "MONO_GROUND": { - "name": "Auf dem Boden bleiben." - }, - "MONO_ROCK": { - "name": "So hart wie Rocko." - }, - "MONO_BUG": { - "name": "Steche wie ein Bibor." - }, - "MONO_GHOST": { - "name": "Wer wird angerufen?" - }, - "MONO_STEEL": { - "name": "Stahlharte Entschlossenheit" - }, - "MONO_FIRE": { - "name": "Brennende Leidenschaft" - }, - "MONO_WATER": { - "name": "Wenn es regnet, schüttet es!" - }, - "MONO_GRASS": { - "name": "Grüner Daumen" - }, - "MONO_ELECTRIC": { - "name": "Elektrisierend" - }, - "MONO_PSYCHIC": { - "name": "Übernatürliches Talent" - }, - "MONO_ICE": { - "name": "Eis Eis Baby" - }, - "MONO_DRAGON": { - "name": "Siegfried bist du es?" - }, - "MONO_DARK": { - "name": "Es ist nur eine Phase!" - }, - "MONO_FAIRY": { - "name": "Ein ewiges Abenteuer!" - }, - "FRESH_START": { - "name": "Hussa, noch einmal von vorn!", - "description": "Schließe die 'Neuanfang' Herausforderung ab" - } -} \ No newline at end of file diff --git a/src/locales/de/achv-female.json b/src/locales/de/achv.json similarity index 91% rename from src/locales/de/achv-female.json rename to src/locales/de/achv.json index 5dd99c18eb1..0649bcf3169 100644 --- a/src/locales/de/achv-female.json +++ b/src/locales/de/achv.json @@ -1,31 +1,4 @@ { - "10K_MONEY": { - "name": "Besserverdienerin" - }, - "1M_MONEY": { - "name": "Millionärin" - }, - "10000_DMG": { - "name": "One Punch Woman" - }, - "250_HEAL": { - "name": "Anfänger-Heilerin" - }, - "2500_HEAL": { - "name": "Klerikerin" - }, - "10000_HEAL": { - "name": "Wiederherstellungsmeisterin" - }, - "25_RIBBONS": { - "name": "Bänder-Sammlerin" - }, - "50_RIBBONS": { - "name": "Bänder-Expertin" - }, - "100_RIBBONS": { - "name": "Bänder-Meisterin" - }, "Achievements": { "name": "Errungenschaften" }, @@ -35,9 +8,17 @@ "MoneyAchv": { "description": "Häufe eine Gesamtsumme von {{moneyAmount}} ₽ an." }, + "10K_MONEY": { + "name": "Besserverdiener", + "name_female": "Besserverdienerin" + }, "100K_MONEY": { "name": "Reich" }, + "1M_MONEY": { + "name": "Millionär", + "name_female": "Millionärin" + }, "10M_MONEY": { "name": "Einprozenter" }, @@ -53,12 +34,28 @@ "2500_DMG": { "name": "Das ist ne Menge Schaden!" }, + "10000_DMG": { + "name": "One Punch Man", + "name_female": "One Punch Woman" + }, "HealAchv": { "description": "Heile {{healAmount}} {{HP}} auf einmal. Mit einer Attacke, Fähigkeit oder einem gehaltenen Gegenstand." }, + "250_HEAL": { + "name": "Anfänger-Heiler", + "name_female": "Anfänger-Heilerin" + }, "1000_HEAL": { "name": "Gesundheitsprofi" }, + "2500_HEAL": { + "name": "Kleriker", + "name_female": "Klerikerin" + }, + "10000_HEAL": { + "name": "Wiederherstellungsmeister", + "name_female": "Wiederherstellungsmeisterin" + }, "LevelAchv": { "description": "Erhöhe das Level eines Pokémon auf {{level}}." }, @@ -77,9 +74,21 @@ "10_RIBBONS": { "name": "Champion der Pokémon Liga" }, + "25_RIBBONS": { + "name": "Bänder-Sammler", + "name_female": "Bänder-Sammlerin" + }, + "50_RIBBONS": { + "name": "Bänder-Experte", + "name_female": "Bänder-Expertin" + }, "75_RIBBONS": { "name": "Bänder-Guru" }, + "100_RIBBONS": { + "name": "Bänder-Meister", + "name_female": "Bänder-Meisterin" + }, "TRANSFER_MAX_BATTLE_STAT": { "name": "Teamwork", "description": "Nutze Staffette, während der Anwender mindestens eines Statuswertes maximiert hat." diff --git a/src/locales/de/config.ts b/src/locales/de/config.ts index 28c3332a55f..afefd98a0cb 100644 --- a/src/locales/de/config.ts +++ b/src/locales/de/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const deConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/en/achv-male.json b/src/locales/en/achv.json similarity index 85% rename from src/locales/en/achv-male.json rename to src/locales/en/achv.json index ec695c3ed2a..185b42d181a 100644 --- a/src/locales/en/achv-male.json +++ b/src/locales/en/achv.json @@ -9,16 +9,20 @@ "description": "Accumulate a total of ₽{{moneyAmount}}" }, "10K_MONEY": { - "name": "Money Haver" + "name": "Money Haver", + "name_female": null }, "100K_MONEY": { - "name": "Rich" + "name": "Rich", + "name_female": null }, "1M_MONEY": { - "name": "Millionaire" + "name": "Millionaire", + "name_female": null }, "10M_MONEY": { - "name": "One Percenter" + "name": "One Percenter", + "name_female": null }, "DamageAchv": { "description": "Inflict {{damageAmount}} damage in one hit" @@ -27,28 +31,35 @@ "name": "Hard Hitter" }, "1000_DMG": { - "name": "Harder Hitter" + "name": "Harder Hitter", + "name_female": null }, "2500_DMG": { - "name": "That's a Lotta Damage!" + "name": "That's a Lotta Damage!", + "name_female": null }, "10000_DMG": { - "name": "One Punch Man" + "name": "One Punch Man", + "name_female": "One Punch Woman" }, "HealAchv": { "description": "Heal {{healAmount}} {{HP}} at once with a move, ability, or held item" }, "250_HEAL": { - "name": "Novice Healer" + "name": "Novice Healer", + "name_female": null }, "1000_HEAL": { - "name": "Big Healer" + "name": "Big Healer", + "name_female": null }, "2500_HEAL": { - "name": "Cleric" + "name": "Cleric", + "name_female": null }, "10000_HEAL": { - "name": "Recovery Master" + "name": "Recovery Master", + "name_female": null }, "LevelAchv": { "description": "Level up a Pokémon to Lv{{level}}" @@ -57,7 +68,8 @@ "name": "But Wait, There's More!" }, "LV_250": { - "name": "Elite" + "name": "Elite", + "name_female": null }, "LV_1000": { "name": "To Go Even Further Beyond" @@ -66,19 +78,24 @@ "description": "Accumulate a total of {{ribbonAmount}} Ribbons" }, "10_RIBBONS": { - "name": "Pokémon League Champion" + "name": "Pokémon League Champion", + "name_female": null }, "25_RIBBONS": { - "name": "Great League Champion" + "name": "Great League Champion", + "name_female": null }, "50_RIBBONS": { - "name": "Ultra League Champion" + "name": "Ultra League Champion", + "name_female": null }, "75_RIBBONS": { - "name": "Rogue League Champion" + "name": "Rogue League Champion", + "name_female": null }, "100_RIBBONS": { - "name": "Master League Champion" + "name": "Master League Champion", + "name_female": null }, "TRANSFER_MAX_BATTLE_STAT": { "name": "Teamwork", @@ -130,6 +147,7 @@ }, "SHINY_PARTY": { "name": "That's Dedication", + "name_female": null, "description": "Have a full party of shiny Pokémon" }, "HATCH_MYTHICAL": { @@ -158,6 +176,7 @@ }, "CLASSIC_VICTORY": { "name": "Undefeated", + "name_female": null, "description": "Beat the game in classic mode" }, "UNEVOLVED_CLASSIC_VICTORY": { diff --git a/src/locales/en/config.ts b/src/locales/en/config.ts index f1827b5152d..36593befb8f 100644 --- a/src/locales/en/config.ts +++ b/src/locales/en/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const enConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/es/achv-male.json b/src/locales/es/achv-male.json deleted file mode 100644 index 7faaa387e89..00000000000 --- a/src/locales/es/achv-male.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "Achievements": { - "name": "Logros" - }, - "Locked": { - "name": "Bloqueado" - }, - "MoneyAchv": { - "description": "Acumula un total de ₽{{moneyAmount}}." - }, - "10K_MONEY": { - "name": "Ahorrador" - }, - "100K_MONEY": { - "name": "Rico" - }, - "1M_MONEY": { - "name": "Millonario" - }, - "10M_MONEY": { - "name": "Elusión Fiscal" - }, - "DamageAchv": { - "description": "Inflige {{damageAmount}} daño en un solo golpe." - }, - "250_DMG": { - "name": "Golpe Maestro" - }, - "1000_DMG": { - "name": "Golpe Devastador" - }, - "2500_DMG": { - "name": "¡Eso es un montón de daño!" - }, - "10000_DMG": { - "name": "One Punch Man" - }, - "HealAchv": { - "description": "Cura {{healAmount}} {{HP}} de una, con un movimiento, habilidad o objeto equipado." - }, - "250_HEAL": { - "name": "Sanador Novato" - }, - "1000_HEAL": { - "name": "Gran Sanador" - }, - "2500_HEAL": { - "name": "Clérigo" - }, - "10000_HEAL": { - "name": "Centro Pokémon" - }, - "LevelAchv": { - "description": "Sube a un Pokémon al nivel {{level}}." - }, - "LV_100": { - "name": "¡Pero espera, aún hay mas!" - }, - "LV_250": { - "name": "Élite" - }, - "LV_1000": { - "name": "Supera tus límites" - }, - "RibbonAchv": { - "description": "Acumula un total de {{ribbonAmount}} Cintas." - }, - "10_RIBBONS": { - "name": "Campeón Liga Pokémon" - }, - "25_RIBBONS": { - "name": "Campeón Liga Super" - }, - "50_RIBBONS": { - "name": "Campeón Liga Ultra" - }, - "75_RIBBONS": { - "name": "Campeón Liga Rogue" - }, - "100_RIBBONS": { - "name": "Campeón Liga Master" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "Trabajo en Equipo", - "description": "Haz relevo a otro miembro del equipo con al menos una estadística al máximo." - }, - "MAX_FRIENDSHIP": { - "name": "Amistad Total", - "description": "Alcanza con un Pokémon la amistad al máximo." - }, - "MEGA_EVOLVE": { - "name": "Megamorfosis", - "description": "Megaevoluciona a un Pokémon." - }, - "GIGANTAMAX": { - "name": "Criatura Colosal", - "description": "Haz Gigantamax a un Pokémon." - }, - "TERASTALLIZE": { - "name": "Entusiasta del STAB", - "description": "Teracristaliza a un Pokémon." - }, - "STELLAR_TERASTALLIZE": { - "name": "El Tipo Oculto", - "description": "Teracristaliza a un Pokémon al tipo Astral." - }, - "SPLICE": { - "name": "Infinite Fusion", - "description": "Fusiona dos Pokémon con la Punta ADN." - }, - "MINI_BLACK_HOLE": { - "name": "Devorador de Objetos", - "description": "Adquiere un Mini Agujero Negro." - }, - "CATCH_MYTHICAL": { - "name": "Singular", - "description": "Captura a un Pokémon Singular." - }, - "CATCH_SUB_LEGENDARY": { - "name": "(Sub)Legendario", - "description": "Captura a un Pokémon Sublegendario." - }, - "CATCH_LEGENDARY": { - "name": "Legendario", - "description": "Captura a un Pokémon Legendario." - }, - "SEE_SHINY": { - "name": "Shiny", - "description": "Encuentra a un Pokémon Shiny salvaje." - }, - "SHINY_PARTY": { - "name": "Eso es dedicación", - "description": "Tener un equipo completo de Pokémon shiny." - }, - "HATCH_MYTHICAL": { - "name": "Huevo Singular", - "description": "Hacer eclosionar un Pokémon Singular de un huevo." - }, - "HATCH_SUB_LEGENDARY": { - "name": "Huevo Sublegendario", - "description": "Hacer eclosionar un Pokémon Sublegendario de un huevo." - }, - "HATCH_LEGENDARY": { - "name": "Huevo Legendario", - "description": "Hacer eclosionar un Pokémon Legendario de un huevo." - }, - "HATCH_SHINY": { - "name": "Huevo Shiny", - "description": "Hacer eclosionar un Pokémon Shiny de un huevo." - }, - "HIDDEN_ABILITY": { - "name": "Potencial Oculto", - "description": "Captura un Pokémon con una habilidad oculta." - }, - "PERFECT_IVS": { - "name": "Certificado de Autenticidad", - "description": "Consigue IVs perfectos en un Pokémon." - }, - "CLASSIC_VICTORY": { - "name": "Imbatible", - "description": "Completa el juego en modo clásico." - } -} \ No newline at end of file diff --git a/src/locales/es/achv-female.json b/src/locales/es/achv.json similarity index 83% rename from src/locales/es/achv-female.json rename to src/locales/es/achv.json index f14e0f9a4be..c3a22c566d0 100644 --- a/src/locales/es/achv-female.json +++ b/src/locales/es/achv.json @@ -9,13 +9,16 @@ "description": "Acumula un total de ₽{{moneyAmount}}." }, "10K_MONEY": { - "name": "Ahorradora" + "name": "Ahorrador", + "name_female": "Ahorradora" }, "100K_MONEY": { - "name": "Rica" + "name": "Rico", + "name_female": "Rica" }, "1M_MONEY": { - "name": "Millonaria" + "name": "Millonario", + "name_female": "Millonaria" }, "10M_MONEY": { "name": "Elusión Fiscal" @@ -39,13 +42,16 @@ "description": "Cura {{healAmount}} {{HP}} de una, con un movimiento, habilidad o objeto equipado." }, "250_HEAL": { - "name": "Sanadora Novata" + "name": "Sanador Novato", + "name_female": "Sanadora Novata" }, "1000_HEAL": { - "name": "Gran Sanadora" + "name": "Gran Sanador", + "name_female": "Gran Sanadora" }, "2500_HEAL": { - "name": "Clériga" + "name": "Clérigo", + "name_female": "Clériga" }, "10000_HEAL": { "name": "Centro Pokémon" @@ -66,19 +72,24 @@ "description": "Acumula un total de {{ribbonAmount}} Cintas." }, "10_RIBBONS": { - "name": "Campeona Liga Pokémon" + "name": "Campeón Liga Pokémon", + "name_female": "Campeona Liga Pokémon" }, "25_RIBBONS": { - "name": "Campeona Liga Super" + "name": "Campeón Liga Super", + "name_female": "Campeona Liga Super" }, "50_RIBBONS": { - "name": "Campeona Liga Ultra" + "name": "Campeón Liga Ultra", + "name_female": "Campeona Liga Ultra" }, "75_RIBBONS": { - "name": "Campeona Liga Rogue" + "name": "Campeón Liga Rogue", + "name_female": "Campeona Liga Rogue" }, "100_RIBBONS": { - "name": "Campeona Liga Master" + "name": "Campeón Liga Master", + "name_female": "Campeona Liga Master" }, "TRANSFER_MAX_BATTLE_STAT": { "name": "Trabajo en Equipo", diff --git a/src/locales/es/config.ts b/src/locales/es/config.ts index a34a05cecf0..edc7dd8b0d7 100644 --- a/src/locales/es/config.ts +++ b/src/locales/es/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const esConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/fr/achv-female.json b/src/locales/fr/achv-female.json deleted file mode 100644 index 68e114965cd..00000000000 --- a/src/locales/fr/achv-female.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "10K_MONEY": { - "name": "Épargnante" - }, - "1M_MONEY": { - "name": "Banquière" - }, - "10M_MONEY": { - "name": "Évadée fiscale" - }, - "1000_DMG": { - "name": "Boxeuse" - }, - "2500_DMG": { - "name": "Distributrice de pains" - }, - "10000_DMG": { - "name": "One Punch Woman" - }, - "250_HEAL": { - "name": "Infirmière" - }, - "10_RIBBONS": { - "name": "Maitresse de la Ligue" - }, - "25_RIBBONS": { - "name": "Super Maitresse de la Ligue" - }, - "50_RIBBONS": { - "name": "Hyper Maitresse de la Ligue" - }, - "75_RIBBONS": { - "name": "Rogue Maitresse de la Ligue" - }, - "100_RIBBONS": { - "name": "Master Maitresse de la Ligue" - }, - "SHINY_PARTY": { - "name": "Shasseuse", - "description": "Avoir une équipe exclusivement composée de Pokémon chromatiques" - }, - "CLASSIC_VICTORY": { - "name": "Invaincue", - "description": "Terminer le jeu en mode classique" - }, - "Achievements": { - "name": "Succès" - }, - "Locked": { - "name": "Verrouillé" - }, - "MoneyAchv": { - "description": "Récolter un total de {{moneyAmount}} ₽." - }, - "100K_MONEY": { - "name": "Je possède des thunes" - }, - "DamageAchv": { - "description": "Infliger {{damageAmount}} de dégâts en un coup." - }, - "250_DMG": { - "name": "Caïd" - }, - "HealAchv": { - "description": "Soigner {{healAmount}} {{HP}} en une fois avec une capacité,\nun talent ou un objet tenu." - }, - "1000_HEAL": { - "name": "Médecin" - }, - "2500_HEAL": { - "name": "Clerc" - }, - "10000_HEAL": { - "name": "Centre Pokémon" - }, - "LevelAchv": { - "description": "Monter un Pokémon au N.{{level}}." - }, - "LV_100": { - "name": "Et c’est pas fini !" - }, - "LV_250": { - "name": "Élite" - }, - "LV_1000": { - "name": "Vers l’infini et au-delà" - }, - "RibbonAchv": { - "description": "Accumuler un total de {{ribbonAmount}} Rubans." - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "Travail d’équipe", - "description": "Utiliser Relais avec au moins une statistique montée à fond." - }, - "MAX_FRIENDSHIP": { - "name": "Copinage", - "description": "Atteindre le niveau de bonheur maximal avec un Pokémon." - }, - "MEGA_EVOLVE": { - "name": "Mégamorph", - "description": "Méga-évoluer un Pokémon." - }, - "GIGANTAMAX": { - "name": "Kaijū", - "description": "Gigamaxer un Pokémon." - }, - "TERASTALLIZE": { - "name": "J’aime les STAB", - "description": "Téracristalliser un Pokémon." - }, - "STELLAR_TERASTALLIZE": { - "name": "Le type enfoui", - "description": "Téracristalliser un Pokémon en type Stellaire." - }, - "SPLICE": { - "name": "Infinite Fusion", - "description": "Fusionner deux Pokémon avec le Pointeau ADN." - }, - "MINI_BLACK_HOLE": { - "name": "Item-stellar", - "description": "Obtenir un Mini Trou Noir." - }, - "CATCH_MYTHICAL": { - "name": "Fabuleux", - "description": "Capturer un Pokémon fabuleux." - }, - "CATCH_SUB_LEGENDARY": { - "name": "(Semi-)Légendaire", - "description": "Capturer un Pokémon semi-légendaire." - }, - "CATCH_LEGENDARY": { - "name": "Légendaire", - "description": "Capturer un Pokémon légendaire." - }, - "SEE_SHINY": { - "name": "Chromatique", - "description": "Trouver un Pokémon sauvage chromatique." - }, - "HATCH_MYTHICAL": { - "name": "Œuf fabuleux", - "description": "Obtenir un Pokémon fabuleux dans un Œuf." - }, - "HATCH_SUB_LEGENDARY": { - "name": "Œuf semi-légendaire", - "description": "Obtenir un Pokémon semi-légendaire dans un Œuf." - }, - "HATCH_LEGENDARY": { - "name": "Œuf légendaire", - "description": "Obtenir un Pokémon légendaire dans un Œuf." - }, - "HATCH_SHINY": { - "name": "Œuf chromatique", - "description": "Obtenir un Pokémon chromatique dans un Œuf." - }, - "HIDDEN_ABILITY": { - "name": "Potentiel enfoui", - "description": "Capturer un Pokémon possédant un talent caché." - }, - "PERFECT_IVS": { - "name": "Certificat d’authenticité", - "description": "Avoir des IV parfaits sur un Pokémon." - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "Le stagiaire de 3e", - "description": "Terminer le mode Classique avec au moins un Pokémon non-évolué dans l’équipe." - }, - "MONO_GEN_ONE": { - "name": "Le rival originel", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 1re génération." - }, - "MONO_GEN_TWO": { - "name": "Entre tradition et modernité", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 2e génération." - }, - "MONO_GEN_THREE": { - "name": "Too much water ?", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 3e génération." - }, - "MONO_GEN_FOUR": { - "name": "Réellement la plus difficile ?", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 4e génération." - }, - "MONO_GEN_FIVE": { - "name": "Recast complet", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 5e génération." - }, - "MONO_GEN_SIX": { - "name": "Aristocrate", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 6e génération." - }, - "MONO_GEN_SEVEN": { - "name": "Seulement techniquement", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 7e génération." - }, - "MONO_GEN_EIGHT": { - "name": "L’heure de gloire", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 8e génération." - }, - "MONO_GEN_NINE": { - "name": "Ça va, c’était EZ", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 9e génération." - }, - "MonoType": { - "description": "Terminer un challenge en monotype {{type}}." - }, - "MONO_NORMAL": { - "name": "Extraordinairement banal" - }, - "MONO_FIGHTING": { - "name": "Je connais le kung-fu" - }, - "MONO_FLYING": { - "name": "Angry Birds" - }, - "MONO_POISON": { - "name": "Touche moi je t’empoisonne !" - }, - "MONO_GROUND": { - "name": "Prévisions : Séisme" - }, - "MONO_ROCK": { - "name": "Comme un roc" - }, - "MONO_BUG": { - "name": "Une chenille !" - }, - "MONO_GHOST": { - "name": "SOS Fantômes" - }, - "MONO_STEEL": { - "name": "De type Acier !" - }, - "MONO_FIRE": { - "name": "Allumer le feu" - }, - "MONO_WATER": { - "name": "Vacances en Bretagne" - }, - "MONO_GRASS": { - "name": "Ne pas toucher !" - }, - "MONO_ELECTRIC": { - "name": "À la masse" - }, - "MONO_PSYCHIC": { - "name": "Grocervo" - }, - "MONO_ICE": { - "name": "Froid comme la glace" - }, - "MONO_DRAGON": { - "name": "Légendes du club, ou presque" - }, - "MONO_DARK": { - "name": "Ça va lui passer" - }, - "MONO_FAIRY": { - "name": "Hey ! Listen !" - }, - "FRESH_START": { - "name": "Du premier coup !", - "description": "Terminer un challenge « Nouveau départ »." - } -} diff --git a/src/locales/fr/achv-male.json b/src/locales/fr/achv.json similarity index 87% rename from src/locales/fr/achv-male.json rename to src/locales/fr/achv.json index 077d37b4500..f83fa3079f2 100644 --- a/src/locales/fr/achv-male.json +++ b/src/locales/fr/achv.json @@ -9,16 +9,19 @@ "description": "Récolter un total de {{moneyAmount}} ₽." }, "10K_MONEY": { - "name": "Épargnant" + "name": "Épargnant", + "name_female": "Épargnante" }, "100K_MONEY": { "name": "Je possède des thunes" }, "1M_MONEY": { - "name": "Banquier" + "name": "Banquier", + "name_female": "Banquière" }, "10M_MONEY": { - "name": "Évadé fiscal" + "name": "Évadé fiscal", + "name_female": "Évadée fiscale" }, "DamageAchv": { "description": "Infliger {{damageAmount}} de dégâts en un coup." @@ -27,19 +30,23 @@ "name": "Caïd" }, "1000_DMG": { - "name": "Boxeur" + "name": "Boxeur", + "name_female": "Boxeuse" }, "2500_DMG": { - "name": "Distributeur de pains" + "name": "Distributeur de pains", + "name_female": "Distributrice de pains" }, "10000_DMG": { - "name": "One Punch Man" + "name": "One Punch Man", + "name_female": "One Punch Woman" }, "HealAchv": { "description": "Soigner {{healAmount}} {{HP}} en une fois avec une capacité,\nun talent ou un objet tenu." }, "250_HEAL": { - "name": "Infirmier" + "name": "Infirmier", + "name_female": "Infirmière" }, "1000_HEAL": { "name": "Médecin" @@ -66,19 +73,24 @@ "description": "Accumuler un total de {{ribbonAmount}} Rubans." }, "10_RIBBONS": { - "name": "Maitre de la Ligue" + "name": "Maitre de la Ligue", + "name_female": "Maitresse de la Ligue" }, "25_RIBBONS": { - "name": "Super Maitre de la Ligue" + "name": "Super Maitre de la Ligue", + "name_female": "Super Maitresse de la Ligue" }, "50_RIBBONS": { - "name": "Hyper Maitre de la Ligue" + "name": "Hyper Maitre de la Ligue", + "name_female": "Hyper Maitresse de la Ligue" }, "75_RIBBONS": { - "name": "Rogue Maitre de la Ligue" + "name": "Rogue Maitre de la Ligue", + "name_female": "Rogue Maitresse de la Ligue" }, "100_RIBBONS": { - "name": "Master Maitre de la Ligue" + "name": "Master Maitre de la Ligue", + "name_female": "Master Maitresse de la Ligue" }, "TRANSFER_MAX_BATTLE_STAT": { "name": "Travail d’équipe", @@ -130,6 +142,7 @@ }, "SHINY_PARTY": { "name": "Shasseur", + "name_female": "Shasseuse", "description": "Avoir une équipe exclusivement composée de Pokémon chromatiques." }, "HATCH_MYTHICAL": { @@ -158,6 +171,7 @@ }, "CLASSIC_VICTORY": { "name": "Invaincu", + "name_female": "Invaincue", "description": "Terminer le jeu en mode Classique." }, "UNEVOLVED_CLASSIC_VICTORY": { diff --git a/src/locales/fr/config.ts b/src/locales/fr/config.ts index 37ec76f3a20..668812e6432 100644 --- a/src/locales/fr/config.ts +++ b/src/locales/fr/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const frConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/it/achv-male.json b/src/locales/it/achv-male.json deleted file mode 100644 index 98e41005c46..00000000000 --- a/src/locales/it/achv-male.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "Achievements": { - "name": "Obiettivi" - }, - "Locked": { - "name": "Bloccato" - }, - "MoneyAchv": { - "description": "Accumula {{moneyAmount}} PokéDollari" - }, - "10K_MONEY": { - "name": "Benestante" - }, - "100K_MONEY": { - "name": "Ricco" - }, - "1M_MONEY": { - "name": "Milionario" - }, - "10M_MONEY": { - "name": "La numero uno" - }, - "DamageAchv": { - "description": "Infliggi {{damageAmount}} danni in un colpo" - }, - "250_DMG": { - "name": "Grandi danni!" - }, - "1000_DMG": { - "name": "Incredibili danni" - }, - "2500_DMG": { - "name": "Danni a palate!" - }, - "10000_DMG": { - "name": "One Punch Man" - }, - "HealAchv": { - "description": "Cura {{healAmount}} {{HP}} tramite mossa, abilità, o oggetto" - }, - "250_HEAL": { - "name": "Paramedico" - }, - "1000_HEAL": { - "name": "Dottore" - }, - "2500_HEAL": { - "name": "Chierico" - }, - "10000_HEAL": { - "name": "Mastro Curatore" - }, - "LevelAchv": { - "description": "Porta un pokémon a Lv{{level}}" - }, - "LV_100": { - "name": "E Non Finisce Qui!" - }, - "LV_250": { - "name": "Elite" - }, - "LV_1000": { - "name": "Verso l'Infinito ed Oltre!" - }, - "RibbonAchv": { - "description": "Accumula un Totale di {{ribbonAmount}} Nastri" - }, - "10_RIBBONS": { - "name": "Campione Lega Pokémon" - }, - "25_RIBBONS": { - "name": "Campione Lega Estesa" - }, - "50_RIBBONS": { - "name": "Campione Lega Ultra" - }, - "75_RIBBONS": { - "name": "Campione Lega Rogue" - }, - "100_RIBBONS": { - "name": "Campione Lega Assoluta" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "Lavoro di Squadra", - "description": "Trasferisci almeno sei bonus statistiche tramite staffetta" - }, - "MAX_FRIENDSHIP": { - "name": "Amiconi", - "description": "Raggiungi amicizia massima con un Pokémon" - }, - "MEGA_EVOLVE": { - "name": "Megamorfosi", - "description": "Megaevolvi un Pokémon" - }, - "GIGANTAMAX": { - "name": "Grosso e Cattivo", - "description": "Ottieni una gigamax" - }, - "TERASTALLIZE": { - "name": "STAB Per Tutti", - "description": "Teracristallizza un Pokémon" - }, - "STELLAR_TERASTALLIZE": { - "name": "Tipo Segreto", - "description": "Teracristallizza un Pokémon stellare" - }, - "SPLICE": { - "name": "Fusione Infinita", - "description": "Fondi due Pokémon insieme tramite cuneo DNA" - }, - "MINI_BLACK_HOLE": { - "name": "Universo di Oggetti", - "description": "Ottieni un Mini Buco Nero" - }, - "CATCH_MYTHICAL": { - "name": "Mitico", - "description": "Cattura un Pokémon mitico" - }, - "CATCH_SUB_LEGENDARY": { - "name": "(Semi)Leggendario", - "description": "Cattura un Pokémon semileggendario" - }, - "CATCH_LEGENDARY": { - "name": "Leggendario", - "description": "Cattura un Pokémon leggendario" - }, - "SEE_SHINY": { - "name": "Cromatico", - "description": "Trova un Pokémon shiny in natura" - }, - "SHINY_PARTY": { - "name": "Dedizione Totale", - "description": "Riempi la squadra di Pokémon shiny" - }, - "HATCH_MYTHICAL": { - "name": "Uovo Mitico", - "description": "Schiudi l'uovo di un Pokémon mitico" - }, - "HATCH_SUB_LEGENDARY": { - "name": "Uovo (Semi)Leggendario", - "description": "Schiudi l'uovo di un Pokémon semileggendario" - }, - "HATCH_LEGENDARY": { - "name": "Uovo Leggendario", - "description": "Schiudi l'uovo di un Pokémon leggendario" - }, - "HATCH_SHINY": { - "name": "Uovo Cromatico", - "description": "Schiudi l'uovo di un Pokémon shiny" - }, - "HIDDEN_ABILITY": { - "name": "Potenziale Nascosto", - "description": "Cattura un Pokémon con abilità nascosta" - }, - "PERFECT_IVS": { - "name": "Certificato di Autenticità", - "description": "Ottieni un Pokémon con IV perfetti" - }, - "CLASSIC_VICTORY": { - "name": "Imbattuto", - "description": "Vinci in modalità classica" - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "Alternanza scuola-lavoro", - "description": "Completa la modalità classica con almeno un membro della squadra non evoluto completamente." - }, - "MONO_GEN_ONE": { - "name": "Rivale Originale", - "description": "Completa la modalità sfida di prima generazione." - }, - "MONO_GEN_TWO": { - "name": "Generazione 1.5", - "description": "Completa la modalità sfida di seconda generazione." - }, - "MONO_GEN_THREE": { - "name": "Troppa Acqua?", - "description": "Completa la modalità sfida di terza generazione." - }, - "MONO_GEN_FOUR": { - "name": "È Davvero La Più Forte?", - "description": "Completa la modalità sfida di quarta generazione." - }, - "MONO_GEN_FIVE": { - "name": "Tutti Originali", - "description": "Completa la modalità sfida di quinta generazione." - }, - "MONO_GEN_SIX": { - "name": "Vita e Morte", - "description": "Completa la modalità sfida di sesta generazione." - }, - "MONO_GEN_SEVEN": { - "name": "Troppo amichevoli?", - "description": "Completa la modalità sfida di settima generazione." - }, - "MONO_GEN_EIGHT": { - "name": "It's champion time!", - "description": "Completa la modalità sfida di ottava generazione." - }, - "MONO_GEN_NINE": { - "name": "Paradossalmente sbalorditivi", - "description": "Completa la modalità sfida di nona generazione." - }, - "MonoType": { - "description": "Completa la modalità sfida monotipo {{type}}" - }, - "MONO_NORMAL": { - "name": "Un tipo semplice" - }, - "MONO_FIGHTING": { - "name": "Conosco il Kung-fu" - }, - "MONO_FLYING": { - "name": "È un uccello? È un aereo?" - }, - "MONO_POISON": { - "name": "I migliori di Kanto" - }, - "MONO_GROUND": { - "name": "Con i piedi per terra" - }, - "MONO_ROCK": { - "name": "Forte come una roccia!" - }, - "MONO_BUG": { - "name": "Metodo Guzma" - }, - "MONO_GHOST": { - "name": "Sono fantasmi, caro Watson" - }, - "MONO_STEEL": { - "name": "Pugno di ferro" - }, - "MONO_FIRE": { - "name": "Giocare col fuoco" - }, - "MONO_WATER": { - "name": "Piove sul bagnato" - }, - "MONO_GRASS": { - "name": "L'erba del vicino è sempre più verde" - }, - "MONO_ELECTRIC": { - "name": "Elettrizzante" - }, - "MONO_PSYCHIC": { - "name": "Mentalista" - }, - "MONO_ICE": { - "name": "Rompere il ghiaccio" - }, - "MONO_DRAGON": { - "name": "Sangue di drago" - }, - "MONO_DARK": { - "name": "Solo una fase" - }, - "MONO_FAIRY": { - "name": "Follettini e follettine" - }, - "FRESH_START": { - "name": "Buona la prima!", - "description": "Completa la modalità sfida 'Un nuovo inizio'." - } -} \ No newline at end of file diff --git a/src/locales/it/achv-female.json b/src/locales/it/achv.json similarity index 100% rename from src/locales/it/achv-female.json rename to src/locales/it/achv.json diff --git a/src/locales/it/config.ts b/src/locales/it/config.ts index c671851f6a9..6bb46273370 100644 --- a/src/locales/it/config.ts +++ b/src/locales/it/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const itConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/ja/achv-male.json b/src/locales/ja/achv-male.json deleted file mode 100644 index 0dc5dc8185a..00000000000 --- a/src/locales/ja/achv-male.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "Achievements": { - "name": "実績" - }, - "Locked": { - "name": "なし" - }, - "MoneyAchv": { - "description": "一回の ランで ₽{{moneyAmount}}を 稼ぐ" - }, - "10K_MONEY": { - "name": "お金を持つ人" - }, - "100K_MONEY": { - "name": "富豪" - }, - "1M_MONEY": { - "name": "百万長者" - }, - "10M_MONEY": { - "name": "超富裕層" - }, - "DamageAchv": { - "description": "一撃で {{damageAmount}}ダメージを 与える" - }, - "250_DMG": { - "name": "力持ち" - }, - "1000_DMG": { - "name": "強者" - }, - "2500_DMG": { - "name": "カカロット" - }, - "10000_DMG": { - "name": "ワンパンマン" - }, - "HealAchv": { - "description": "一つの 技や 特性や 持っているアイテムで {{healAmount}}{{HP}}を 一気に 回復する" - }, - "250_HEAL": { - "name": "回復発見者" - }, - "1000_HEAL": { - "name": "大いなる治療者" - }, - "2500_HEAL": { - "name": "回復達人" - }, - "10000_HEAL": { - "name": "ジョーイさん" - }, - "LevelAchv": { - "description": "一つの ポケモンを Lv{{level}}まで レベルアップする" - }, - "LV_100": { - "name": "まだまだだよ" - }, - "LV_250": { - "name": "天王" - }, - "LV_1000": { - "name": "向こうの向こうを超え" - }, - "RibbonAchv": { - "description": "{{ribbonAmount}}巻の リボンを 積もる" - }, - "10_RIBBONS": { - "name": "ポケモンリーグチャンピオン" - }, - "25_RIBBONS": { - "name": "スーパーリーグチャンピオン" - }, - "50_RIBBONS": { - "name": "ハイパーリーグチャンピオン" - }, - "75_RIBBONS": { - "name": "ローグリーグチャンピオン" - }, - "100_RIBBONS": { - "name": "マスターリーグチャンピオン" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "同力", - "description": "少なくとも 一つの 能力を 最大まで あげて 他の 手持ちポケモンに バトンタッチする" - }, - "MAX_FRIENDSHIP": { - "name": "マブ達", - "description": "一つの 手持ちポケモンの 仲良し度を 最大に 上げる" - }, - "MEGA_EVOLVE": { - "name": "ザ・アブソリュート", - "description": "一つの 手持ちポケモンを メガシンカさせる" - }, - "GIGANTAMAX": { - "name": "太―くて 堪らない", - "description": "一つの 手持ちポケモンを キョダイマックスさせる" - }, - "TERASTALLIZE": { - "name": "一致好き", - "description": "一つの 手持ちポケモンを テラスタルさせる" - }, - "STELLAR_TERASTALLIZE": { - "name": "隠れたタイプ", - "description": "一つの 手持ちポケモンを ステラ・テラスタルさせる" - }, - "SPLICE": { - "name": "インフィニット・フュジョン", - "description": "いでんしのくさびで 二つの ポケモンを 吸収合体させる" - }, - "MINI_BLACK_HOLE": { - "name": "アイテムホーリック", - "description": "ミニブラックホールを 手に入れる" - }, - "CATCH_MYTHICAL": { - "name": "幻", - "description": "幻の ポケモンを 捕まえる" - }, - "CATCH_SUB_LEGENDARY": { - "name": "準・伝説", - "description": "準伝説の ポケモンを 捕まえる" - }, - "CATCH_LEGENDARY": { - "name": "ザ・伝説", - "description": "伝説の ポケモンを 捕まえる" - }, - "SEE_SHINY": { - "name": "色とりどりに光る", - "description": "野生の 色違いポケモンを みつける" - }, - "SHINY_PARTY": { - "name": "きらきら努力家", - "description": "手持ちポケモンは 全員 色違いポケモンに する" - }, - "HATCH_MYTHICAL": { - "name": "幻のタマゴ", - "description": "幻の ポケモンを タマゴから 生まれる" - }, - "HATCH_SUB_LEGENDARY": { - "name": "準伝説のタマゴ", - "description": "準伝説の ポケモンを タマゴから 生まれる" - }, - "HATCH_LEGENDARY": { - "name": "伝説のタマゴ", - "description": "伝説の ポケモンを タマゴから 生まれる" - }, - "HATCH_SHINY": { - "name": "色違いタマゴ", - "description": "色違いポケモンを タマゴから 生まれる" - }, - "HIDDEN_ABILITY": { - "name": "底力", - "description": "隠れ特性がある ポケモンを 捕まえる" - }, - "PERFECT_IVS": { - "name": "個体値の賞状", - "description": "一つの ポケモンの 個体値を すべて 最大に する" - }, - "CLASSIC_VICTORY": { - "name": "無双", - "description": "クラシックモードを クリアする" - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "Bring Your Child To Work Day", - "description": "Beat the game in Classic Mode with at least one unevolved party member." - }, - "MONO_GEN_ONE": { - "name": "原始", - "description": "1世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_TWO": { - "name": "懐かしいカンジョウ", - "description": "2世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_THREE": { - "name": "水浸し", - "description": "3世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_FOUR": { - "name": "神々の地", - "description": "4世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_FIVE": { - "name": "ニューヨーカー", - "description": "5世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_SIX": { - "name": "サヴァ・サヴァ", - "description": "6世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_SEVEN": { - "name": "アローラ・オエ", - "description": "7世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_EIGHT": { - "name": "チャンピオン タイムを 楽しめ!", - "description": "8世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_NINE": { - "name": "ネモに甘えたでしょう", - "description": "9世代の 単一世代チャレンジを クリアする" - }, - "MonoType": { - "description": "{{type}}タイプの 単一タイプチャレンジを クリアする" - }, - "MONO_NORMAL": { - "name": "凡人" - }, - "MONO_FIGHTING": { - "name": "八千以上だ!!" - }, - "MONO_FLYING": { - "name": "翼をください" - }, - "MONO_POISON": { - "name": "カントーの名物" - }, - "MONO_GROUND": { - "name": "自信でユラユラ" - }, - "MONO_ROCK": { - "name": "タケシの挑戦状" - }, - "MONO_BUG": { - "name": "チョウチョウせん者" - }, - "MONO_GHOST": { - "name": "貞子ちゃん" - }, - "MONO_STEEL": { - "name": "ハガネーター" - }, - "MONO_FIRE": { - "name": "NIGHT OF FIRE" - }, - "MONO_WATER": { - "name": "土砂降リスト" - }, - "MONO_GRASS": { - "name": "www" - }, - "MONO_ELECTRIC": { - "name": "パチピカペコ" - }, - "MONO_PSYCHIC": { - "name": "陽キャ" - }, - "MONO_ICE": { - "name": "ありのまま" - }, - "MONO_DRAGON": { - "name": "龍が如く" - }, - "MONO_DARK": { - "name": "陰キャ" - }, - "MONO_FAIRY": { - "name": "あらハート満タンになった" - }, - "FRESH_START": { - "name": "一発で!", - "description": "出直しチャレンジを クリアする" - } -} \ No newline at end of file diff --git a/src/locales/ja/achv-female.json b/src/locales/ja/achv.json similarity index 100% rename from src/locales/ja/achv-female.json rename to src/locales/ja/achv.json diff --git a/src/locales/ja/config.ts b/src/locales/ja/config.ts index b459ee12a9a..5fbf0497d94 100644 --- a/src/locales/ja/config.ts +++ b/src/locales/ja/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const jaConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/ko/achv-male.json b/src/locales/ko/achv-male.json deleted file mode 100644 index 73753dd9b5a..00000000000 --- a/src/locales/ko/achv-male.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "Achievements": { - "name": "업적" - }, - "Locked": { - "name": "미완료" - }, - "MoneyAchv": { - "description": "누적 소지금 ₽{{moneyAmount}} 달성" - }, - "10K_MONEY": { - "name": "돈 좀 있나?" - }, - "100K_MONEY": { - "name": "부자" - }, - "1M_MONEY": { - "name": "백만장자" - }, - "10M_MONEY": { - "name": "상위 1프로" - }, - "DamageAchv": { - "description": "한 번의 공격만으로 {{damageAmount}} 데미지" - }, - "250_DMG": { - "name": "강타자" - }, - "1000_DMG": { - "name": "최강타자" - }, - "2500_DMG": { - "name": "때릴 줄 아시는군요!" - }, - "10000_DMG": { - "name": "원펀맨" - }, - "HealAchv": { - "description": "기술이나 특성, 지닌 도구로 한 번에 {{healAmount}} {{HP}} 회복" - }, - "250_HEAL": { - "name": "견습 힐러" - }, - "1000_HEAL": { - "name": "상급 힐러" - }, - "2500_HEAL": { - "name": "클레릭" - }, - "10000_HEAL": { - "name": "회복 마스터" - }, - "LevelAchv": { - "description": "포켓몬 Lv{{level}} 달성" - }, - "LV_100": { - "name": "잠깐, 여기가 끝이 아니라구!" - }, - "LV_250": { - "name": "엘리트" - }, - "LV_1000": { - "name": "더 먼 곳을 향해" - }, - "RibbonAchv": { - "description": "총 {{ribbonAmount}}개의 리본 획득" - }, - "10_RIBBONS": { - "name": "포켓몬 리그 챔피언" - }, - "25_RIBBONS": { - "name": "슈퍼 리그 챔피언" - }, - "50_RIBBONS": { - "name": "하이퍼 리그 챔피언" - }, - "75_RIBBONS": { - "name": "로그 리그 챔피언" - }, - "100_RIBBONS": { - "name": "마스터 리그 챔피언" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "팀워크", - "description": "한 개 이상의 능력치가 최대 랭크일 때 배턴터치 사용" - }, - "MAX_FRIENDSHIP": { - "name": "친밀 맥스", - "description": "최대 친밀도 달성" - }, - "MEGA_EVOLVE": { - "name": "메가변환", - "description": "포켓몬을 메가진화" - }, - "GIGANTAMAX": { - "name": "엄청난 것", - "description": "포켓몬을 다이맥스" - }, - "TERASTALLIZE": { - "name": "반짝반짝", - "description": "포켓몬을 테라스탈" - }, - "STELLAR_TERASTALLIZE": { - "name": "숨겨진 타입", - "description": "포켓몬을 스텔라 테라스탈" - }, - "SPLICE": { - "name": "끝없는 융합", - "description": "유전자쐐기로 두 포켓몬을 융합" - }, - "MINI_BLACK_HOLE": { - "name": "도구가 가득한 구멍", - "description": "미니 블랙홀 획득" - }, - "CATCH_MYTHICAL": { - "name": "환상", - "description": "환상의 포켓몬 포획" - }, - "CATCH_SUB_LEGENDARY": { - "name": "(준)전설", - "description": "준전설 포켓몬 포획" - }, - "CATCH_LEGENDARY": { - "name": "전설", - "description": "전설의 포켓몬 포획" - }, - "SEE_SHINY": { - "name": "다른 색", - "description": "야생의 색이 다른 포켓몬 발견" - }, - "SHINY_PARTY": { - "name": "찐사랑", - "description": "색이 다른 포켓몬만으로 파티 구성" - }, - "HATCH_MYTHICAL": { - "name": "환상의 알", - "description": "알에서 환상의 포켓몬이 부화" - }, - "HATCH_SUB_LEGENDARY": { - "name": "준전설 알", - "description": "알에서 준전설 포켓몬이 부화" - }, - "HATCH_LEGENDARY": { - "name": "전설의 알", - "description": "알에서 전설의 포켓몬이 부화" - }, - "HATCH_SHINY": { - "name": "빛나는 알", - "description": "알에서 색이 다른 포켓몬이 부화" - }, - "HIDDEN_ABILITY": { - "name": "숨은 잠재력", - "description": "숨겨진 특성을 지닌 포켓몬을 포획" - }, - "PERFECT_IVS": { - "name": "진짜배기 증명서", - "description": "최고의 개체값을 지닌 포켓몬 획득" - }, - "CLASSIC_VICTORY": { - "name": "무패", - "description": "클래식 모드 클리어" - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "우리집 꿈나무", - "description": "최종 진화형이 아닌 포켓몬을 데리고 클래식 모드 클리어." - }, - "MONO_GEN_ONE": { - "name": "근본 라이벌", - "description": "1세대 챌린지 모드 클리어." - }, - "MONO_GEN_TWO": { - "name": "이거 1.5세대죠?", - "description": "2세대 챌린지 모드 클리어." - }, - "MONO_GEN_THREE": { - "name": "Too much water?", - "description": "3세대 챌린지 모드 클리어." - }, - "MONO_GEN_FOUR": { - "name": "난천이 진짜 최강인가요?", - "description": "4세대 챌린지 모드 클리어." - }, - "MONO_GEN_FIVE": { - "name": "100% 오리지널!", - "description": "5세대 챌린지 모드 클리어." - }, - "MONO_GEN_SIX": { - "name": "크루아상 안에 뭐 들었나요?", - "description": "6세대 챌린지 모드 클리어." - }, - "MONO_GEN_SEVEN": { - "name": "기술적으로는…", - "description": "7세대 챌린지 모드 클리어." - }, - "MONO_GEN_EIGHT": { - "name": "챔피언 타임!", - "description": "8세대 챌린지 모드 클리어." - }, - "MONO_GEN_NINE": { - "name": "걔, 봐 준 거야", - "description": "9세대 챌린지 모드 클리어." - }, - "MonoType": { - "description": "{{type}} 타입 챌린지 모드 클리어." - }, - "MONO_NORMAL": { - "name": "심플한 것이 가장 강한 것" - }, - "MONO_FIGHTING": { - "name": "태권도 할 줄 알아요" - }, - "MONO_FLYING": { - "name": "추락하는 것은 날개가 있다" - }, - "MONO_POISON": { - "name": "관동 지방 최애 타입" - }, - "MONO_GROUND": { - "name": "전기 안 통해요" - }, - "MONO_ROCK": { - "name": "웅골참" - }, - "MONO_BUG": { - "name": "독침붕처럼 쏴라" - }, - "MONO_GHOST": { - "name": "누굴 부를 거야?" - }, - "MONO_STEEL": { - "name": "강철 심장" - }, - "MONO_FIRE": { - "name": "불타오르네" - }, - "MONO_WATER": { - "name": "물 들어올 때 노 젓기" - }, - "MONO_GRASS": { - "name": "초록은 동색" - }, - "MONO_ELECTRIC": { - "name": "찌릿찌릿" - }, - "MONO_PSYCHIC": { - "name": "1세대 최강" - }, - "MONO_ICE": { - "name": "얼음땡" - }, - "MONO_DRAGON": { - "name": "용용 죽겠지" - }, - "MONO_DARK": { - "name": "어둠의 다크" - }, - "MONO_FAIRY": { - "name": "설마 자시안으로?" - }, - "FRESH_START": { - "name": "첫트!", - "description": "새 출발 챌린지 모드 클리어." - } -} \ No newline at end of file diff --git a/src/locales/ko/achv-female.json b/src/locales/ko/achv.json similarity index 100% rename from src/locales/ko/achv-female.json rename to src/locales/ko/achv.json diff --git a/src/locales/ko/config.ts b/src/locales/ko/config.ts index b5b34cea0ae..392f2f72053 100644 --- a/src/locales/ko/config.ts +++ b/src/locales/ko/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const koConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/pt_BR/achv-female.json b/src/locales/pt_BR/achv-female.json deleted file mode 100644 index e81cba6f9ca..00000000000 --- a/src/locales/pt_BR/achv-female.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "Achievements": { - "name": "Conquistas" - }, - "Locked": { - "name": "Não conquistado" - }, - "MoneyAchv": { - "description": "Acumule um total de ₽{{moneyAmount}}" - }, - "10K_MONEY": { - "name": "Chuva de Dinheiro" - }, - "100K_MONEY": { - "name": "Tô Rica!" - }, - "1M_MONEY": { - "name": "Quem Quer Ser Um Milionário?" - }, - "10M_MONEY": { - "name": "Tio Patinhas" - }, - "DamageAchv": { - "description": "Inflija {{damageAmount}} de dano em um único golpe" - }, - "250_DMG": { - "name": "Essa Doeu!" - }, - "1000_DMG": { - "name": "Essa Doeu Mais!" - }, - "2500_DMG": { - "name": "Essa Doeu Muito!" - }, - "10000_DMG": { - "name": "Essa Doeu Pra Caramba!" - }, - "HealAchv": { - "description": "Cure {{healAmount}} {{HP}} de uma vez só com um movimento, habilidade ou item segurado" - }, - "250_HEAL": { - "name": "Residente" - }, - "1000_HEAL": { - "name": "Enfermeira" - }, - "2500_HEAL": { - "name": "Médica" - }, - "10000_HEAL": { - "name": "Médica de Plantão" - }, - "LevelAchv": { - "description": "Aumente o nível de um Pokémon para o Nv{{level}}" - }, - "LV_100": { - "name": "Calma Que Tem Mais!" - }, - "LV_250": { - "name": "Treinadora de Elite" - }, - "LV_1000": { - "name": "Ao Infinito e Além!" - }, - "RibbonAchv": { - "description": "Acumule um total de {{ribbonAmount}} Fitas" - }, - "10_RIBBONS": { - "name": "Fita de Bronze" - }, - "25_RIBBONS": { - "name": "Fita de Prata" - }, - "50_RIBBONS": { - "name": "Fita de Ouro" - }, - "75_RIBBONS": { - "name": "Fita de Platina" - }, - "100_RIBBONS": { - "name": "Fita de Diamante" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "Trabalho em Equipe", - "description": "Use Baton Pass com pelo menos um atributo aumentado ao máximo" - }, - "MAX_FRIENDSHIP": { - "name": "Melhores Amigos", - "description": "Alcance a amizade máxima com um Pokémon" - }, - "MEGA_EVOLVE": { - "name": "Megamorfose", - "description": "Megaevolua um Pokémon" - }, - "GIGANTAMAX": { - "name": "Ficou Gigante!", - "description": "Gigantamax um Pokémon" - }, - "TERASTALLIZE": { - "name": "Terastalização", - "description": "Terastalize um Pokémon" - }, - "STELLAR_TERASTALLIZE": { - "name": "Estrela Cadente", - "description": "Terastalize um Pokémon para o tipo Estelar" - }, - "SPLICE": { - "name": "Fusão!", - "description": "Funda dois Pokémon com um Splicer de DNA" - }, - "MINI_BLACK_HOLE": { - "name": "Buraco Sem Fundo", - "description": "Adquira um Mini Buraco Negro" - }, - "CATCH_MYTHICAL": { - "name": "Mítico", - "description": "Capture um Pokémon Mítico" - }, - "CATCH_SUB_LEGENDARY": { - "name": "Quase Lendário", - "description": "Capture um Pokémon Semi-Lendário" - }, - "CATCH_LEGENDARY": { - "name": "Lendário", - "description": "Capture um Pokémon Lendário" - }, - "SEE_SHINY": { - "name": "Ué, Tá Brilhando?", - "description": "Encontre um Pokémon Shiny selvagem" - }, - "SHINY_PARTY": { - "name": "Tá Todo Mundo Brilhando!", - "description": "Tenha uma equipe formada por 6 Pokémon Shiny" - }, - "HATCH_MYTHICAL": { - "name": "Ovo Mítico", - "description": "Choque um Pokémon Mítico" - }, - "HATCH_SUB_LEGENDARY": { - "name": "Ovo Semi-Lendário", - "description": "Choque um Pokémon Semi-Lendário" - }, - "HATCH_LEGENDARY": { - "name": "Ovo Lendário", - "description": "Choque um Pokémon Lendário" - }, - "HATCH_SHINY": { - "name": "Ovo Shiny", - "description": "Choque um Pokémon Shiny" - }, - "HIDDEN_ABILITY": { - "name": "Potencial Oculto", - "description": "Capture um Pokémon com uma Habilidade Oculta" - }, - "PERFECT_IVS": { - "name": "Perfeição Certificada", - "description": "Obtenha IVs perfeitos em um Pokémon" - }, - "CLASSIC_VICTORY": { - "name": "Invencível", - "description": "Vença o jogo no modo clássico" - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "Tire as Crianças da Sala", - "description": "Vença o jogo no Modo Clássico com pelo menos um membro da equipe não evoluído." - }, - "MONO_GEN_ONE": { - "name": "O Início de Tudo", - "description": "Complete o desafio da geração um." - }, - "MONO_GEN_TWO": { - "name": "Geração 1.5", - "description": "Complete o desafio da geração dois." - }, - "MONO_GEN_THREE": { - "name": "Será que tem muita água?", - "description": "Complete o desafio da geração três." - }, - "MONO_GEN_FOUR": { - "name": "Essa foi a mais difícil?", - "description": "Complete o desafio da geração quatro." - }, - "MONO_GEN_FIVE": { - "name": "Nada original", - "description": "Complete o desafio da geração cinco." - }, - "MONO_GEN_SIX": { - "name": "Esse croissant tem recheio?", - "description": "Complete o desafio da geração seis." - }, - "MONO_GEN_SEVEN": { - "name": "Z-Move ou Se vira nos 30?", - "description": "Complete o desafio da geração sete." - }, - "MONO_GEN_EIGHT": { - "name": "Finalmente ele ganhou!", - "description": "Complete o desafio da geração oito." - }, - "MONO_GEN_NINE": { - "name": "Isso aqui tá muito fácil!", - "description": "Complete o desafio da geração nove." - }, - "MonoType": { - "description": "Complete o desafio de monotipo {{type}}." - }, - "MONO_NORMAL": { - "name": "Extra Ordinário" - }, - "MONO_FIGHTING": { - "name": "Briga de Rua" - }, - "MONO_FLYING": { - "name": "Rinha de Pidgeys" - }, - "MONO_POISON": { - "name": "Menina Veneno" - }, - "MONO_GROUND": { - "name": "Comendo Poeira" - }, - "MONO_ROCK": { - "name": "...Tanto Bate Até Que Fura" - }, - "MONO_BUG": { - "name": "Vida de Inseto" - }, - "MONO_GHOST": { - "name": "Fantasminha Camarada" - }, - "MONO_STEEL": { - "name": "Levantando Ferro" - }, - "MONO_FIRE": { - "name": "Tá Pegando Fogo, Bicho!" - }, - "MONO_WATER": { - "name": "Água Mole em Pedra Dura..." - }, - "MONO_GRASS": { - "name": "Jardim Botânico" - }, - "MONO_ELECTRIC": { - "name": "Choque de Realidade" - }, - "MONO_PSYCHIC": { - "name": "Preciso de Terapia" - }, - "MONO_ICE": { - "name": "Era do Gelo" - }, - "MONO_DRAGON": { - "name": "Caverna do Dragão" - }, - "MONO_DARK": { - "name": "É Só Uma Fase" - }, - "MONO_FAIRY": { - "name": "Clube das Winx" - }, - "FRESH_START": { - "name": "De Primeira!", - "description": "Complete o desafio de novo começo." - } -} \ No newline at end of file diff --git a/src/locales/pt_BR/achv-male.json b/src/locales/pt_BR/achv.json similarity index 95% rename from src/locales/pt_BR/achv-male.json rename to src/locales/pt_BR/achv.json index 428dd5c633b..aee3dd48cc5 100644 --- a/src/locales/pt_BR/achv-male.json +++ b/src/locales/pt_BR/achv.json @@ -42,13 +42,16 @@ "name": "Residente" }, "1000_HEAL": { - "name": "Enfermeiro" + "name": "Enfermeiro", + "name_female": "Enfermeira" }, "2500_HEAL": { - "name": "Médico" + "name": "Médico", + "name_female": "Médica" }, "10000_HEAL": { - "name": "Médico de Plantão" + "name": "Médico de Plantão", + "name_female": "Médica de Plantão" }, "LevelAchv": { "description": "Aumente o nível de um Pokémon para o Nv{{level}}" @@ -57,7 +60,8 @@ "name": "Calma Que Tem Mais!" }, "LV_250": { - "name": "Treinador de Elite" + "name": "Treinador de Elite", + "name_female": "Treinadora de Elite" }, "LV_1000": { "name": "Ao Infinito e Além!" diff --git a/src/locales/pt_BR/config.ts b/src/locales/pt_BR/config.ts index 9cc8fe313a2..9d7dee178b6 100644 --- a/src/locales/pt_BR/config.ts +++ b/src/locales/pt_BR/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const ptBrConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/zh_CN/achv-male.json b/src/locales/zh_CN/achv-male.json deleted file mode 100644 index 103a9bb41b5..00000000000 --- a/src/locales/zh_CN/achv-male.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "Achievements": { - "name": "成就" - }, - "Locked": { - "name": "未解锁" - }, - - "MoneyAchv": { - "description": "累计获得 ₽{{moneyAmount}}" - }, - "10K_MONEY": { - "name": "小有积蓄" - }, - "100K_MONEY": { - "name": "大户人家" - }, - "1M_MONEY": { - "name": "百万富翁" - }, - "10M_MONEY": { - "name": "暴发户" - }, - - "DamageAchv": { - "description": "在单次攻击中造成 {{damageAmount}} 点伤害" - }, - "250_DMG": { - "name": "重拳出击" - }, - "1000_DMG": { - "name": "神拳猛击" - }, - "2500_DMG": { - "name": "夺少?" - }, - "10000_DMG": { - "name": "一拳超人" - }, - - "HealAchv": { - "description": "通过技能、能力或携带的道具一次性治疗 {{healAmount}} {{HP}}点" - }, - "250_HEAL": { - "name": "新手奶妈" - }, - "1000_HEAL": { - "name": "治疗担当" - }, - "2500_HEAL": { - "name": "牧师" - }, - "10000_HEAL": { - "name": "泉水" - }, - - "LevelAchv": { - "description": "将一只宝可梦提升到 Lv{{level}}" - }, - "LV_100": { - "name": "别急,后面还有" - }, - "LV_250": { - "name": "精英" - }, - "LV_1000": { - "name": "天外有天" - }, - - "RibbonAchv": { - "description": "累计获得 {{ribbonAmount}} 个勋章" - }, - "10_RIBBONS": { - "name": "宝可梦联盟冠军" - }, - "25_RIBBONS": { - "name": "超级球联盟冠军" - }, - "50_RIBBONS": { - "name": "高级球联盟冠军" - }, - "75_RIBBONS": { - "name": "肉鸽球联盟冠军" - }, - "100_RIBBONS": { - "name": "大师球联盟冠军" - }, - - "TRANSFER_MAX_BATTLE_STAT": { - "name": "团队协作", - "description": "在一项属性强化至最大时用接力棒传递给其他宝可梦" - }, - "MAX_FRIENDSHIP": { - "name": "亲密无间", - "description": "使一只宝可梦的亲密度达到最大值" - }, - "MEGA_EVOLVE": { - "name": "大变身", - "description": "超级进化一只宝可梦" - }, - "GIGANTAMAX": { - "name": "这位更是重量级", - "description": "极巨化一只宝可梦" - }, - "TERASTALLIZE": { - "name": "本系爱好者", - "description": "太晶化一只宝可梦" - }, - "STELLAR_TERASTALLIZE": { - "name": "隐藏属性", - "description": "星晶化一只宝可梦" - }, - "SPLICE": { - "name": "无限融合", - "description": "使用基因之楔将两只宝可梦融合在一起" - }, - "MINI_BLACK_HOLE": { - "name": "一大洞的道具", - "description": "获得一个迷你黑洞" - }, - "CATCH_MYTHICAL": { - "name": "神秘礼物", - "description": "捕捉一只幻之宝可梦" - }, - "CATCH_SUB_LEGENDARY": { - "name": "二级传说", - "description": "捕捉一只二级传说宝可梦" - }, - "CATCH_LEGENDARY": { - "name": "传说", - "description": "捕捉一只传说宝可梦" - }, - "SEE_SHINY": { - "name": "闪耀夺目", - "description": "在野外找到一只闪光宝可梦" - }, - "SHINY_PARTY": { - "name": "呕心沥血", - "description": "拥有一支由闪光宝可梦组成的满员队伍" - }, - "HATCH_MYTHICAL": { - "name": "幻兽蛋", - "description": "从蛋中孵化出一只幻之宝可梦" - }, - "HATCH_SUB_LEGENDARY": { - "name": "二级传说蛋", - "description": "从蛋中孵化出一只二级传说宝可梦" - }, - "HATCH_LEGENDARY": { - "name": "传说蛋", - "description": "从蛋中孵化出一只传说宝可梦" - }, - "HATCH_SHINY": { - "name": "金色传说!", - "description": "从蛋中孵化出一只闪光宝可梦" - }, - "HIDDEN_ABILITY": { - "name": "隐藏实力", - "description": "捕捉一只拥有隐藏特性的宝可梦" - }, - "PERFECT_IVS": { - "name": "合格证", - "description": "获得一只拥有完美个体值的宝可梦" - }, - "CLASSIC_VICTORY": { - "name": "战无不胜", - "description": "在经典模式中通关游戏" - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "带孩子来上班", - "description": "通关经典模式时队伍中至少有一名未进化的宝可梦" - }, - - "MONO_GEN_ONE": { - "name": "最初的劲敌", - "description": "完成仅限第一世代的挑战" - }, - "MONO_GEN_TWO": { - "name": "1.5世代", - "description": "完成仅限第二世代的挑战" - }, - "MONO_GEN_THREE": { - "name": "“水太多了”", - "description": "完成仅限第三世代的挑战" - }, - "MONO_GEN_FOUR": { - "name": "她真是最强冠军吗?", - "description": "完成仅限第四世代的挑战" - }, - "MONO_GEN_FIVE": { - "name": "完全原创", - "description": "完成仅限第五世代的挑战" - }, - "MONO_GEN_SIX": { - "name": "女大公", - "description": "完成仅限第六世代的挑战" - }, - "MONO_GEN_SEVEN": { - "name": "首届冠军", - "description": "完成仅限第七世代的挑战" - }, - "MONO_GEN_EIGHT": { - "name": "冠军时刻!", - "description": "完成仅限第八世代的挑战" - }, - "MONO_GEN_NINE": { - "name": "她又放水了", - "description": "完成仅限第九世代的挑战" - }, - - "MonoType": { - "description": "完成 {{type}} 单属性挑战" - }, - "MONO_NORMAL": { - "name": "异乎寻常的寻常" - }, - "MONO_FIGHTING": { - "name": "我有真功夫" - }, - "MONO_FLYING": { - "name": "愤怒的小鸟" - }, - "MONO_POISON": { - "name": "关都地区特色" - }, - "MONO_GROUND": { - "name": "地震预报" - }, - "MONO_ROCK": { - "name": "坚如磐石" - }, - "MONO_BUG": { - "name": "音箱蟀侠" - }, - "MONO_GHOST": { - "name": "捉鬼敢死队" - }, - "MONO_STEEL": { - "name": "铁巨人" - }, - "MONO_FIRE": { - "name": "搓火球解决一切" - }, - "MONO_WATER": { - "name": "当雨来临,倾盆而下" - }, - "MONO_GRASS": { - "name": "别踏这个青" - }, - "MONO_ELECTRIC": { - "name": "瞄准大岩蛇的角!" - }, - "MONO_PSYCHIC": { - "name": "脑洞大开" - }, - "MONO_ICE": { - "name": "如履薄冰" - }, - "MONO_DRAGON": { - "name": "准神俱乐部" - }, - "MONO_DARK": { - "name": "总有叛逆期" - }, - "MONO_FAIRY": { - "name": "林克,醒醒!" - }, - "FRESH_START": { - "name": "初次尝试!", - "description": "完成初次尝试挑战" - } -} diff --git a/src/locales/zh_CN/achv-female.json b/src/locales/zh_CN/achv.json similarity index 100% rename from src/locales/zh_CN/achv-female.json rename to src/locales/zh_CN/achv.json diff --git a/src/locales/zh_CN/config.ts b/src/locales/zh_CN/config.ts index 7c29262ac1a..021e14d9727 100644 --- a/src/locales/zh_CN/config.ts +++ b/src/locales/zh_CN/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const zhCnConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/zh_TW/achv-male.json b/src/locales/zh_TW/achv-male.json deleted file mode 100644 index dcd6f26ae82..00000000000 --- a/src/locales/zh_TW/achv-male.json +++ /dev/null @@ -1,256 +0,0 @@ -{ - "Achievements": { - "name": "成就" - }, - "Locked": { - "name": "未解鎖" - }, - "MoneyAchv": { - "description": "累計獲得 ₽{{moneyAmount}}" - }, - "10K_MONEY": { - "name": "小有積蓄" - }, - "100K_MONEY": { - "name": "大戶人家" - }, - "1M_MONEY": { - "name": "百萬富翁" - }, - "10M_MONEY": { - "name": "暴發戶" - }, - "DamageAchv": { - "description": "在單次攻擊中造成 {{damageAmount}} 點傷害" - }, - "250_DMG": { - "name": "重拳出擊" - }, - "1000_DMG": { - "name": "神拳猛擊" - }, - "2500_DMG": { - "name": "奪少?" - }, - "10000_DMG": { - "name": "一拳超人" - }, - "HealAchv": { - "description": "通過技能、能力或攜帶的道具一次性治療 {{healAmount}} {{HP}}點" - }, - "250_HEAL": { - "name": "新手奶媽" - }, - "1000_HEAL": { - "name": "治療擔當" - }, - "2500_HEAL": { - "name": "牧師" - }, - "10000_HEAL": { - "name": "泉水" - }, - "LevelAchv": { - "description": "將一隻寶可夢提升到 Lv{{level}}" - }, - "LV_100": { - "name": "别急,後面還有" - }, - "LV_250": { - "name": "精英" - }, - "LV_1000": { - "name": "天外有天" - }, - "RibbonAchv": { - "description": "累計獲得 {{ribbonAmount}} 個勛章" - }, - "10_RIBBONS": { - "name": "寶可夢聯盟冠軍" - }, - "25_RIBBONS": { - "name": "超級球聯盟冠軍" - }, - "50_RIBBONS": { - "name": "高級球聯盟冠軍" - }, - "75_RIBBONS": { - "name": "肉鴿球聯盟冠軍" - }, - "100_RIBBONS": { - "name": "大師球聯盟冠軍" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "團隊協作", - "description": "在一項屬性強化至最大時用接力棒傳遞給其他寶可夢" - }, - "MAX_FRIENDSHIP": { - "name": "親密無間", - "description": "使一隻寶可夢的親密度達到最大值" - }, - "MEGA_EVOLVE": { - "name": "大變身", - "description": "超級進化一隻寶可夢" - }, - "GIGANTAMAX": { - "name": "這位更是重量級", - "description": "極巨化一隻寶可夢" - }, - "TERASTALLIZE": { - "name": "本系愛好者", - "description": "太晶化一隻寶可夢" - }, - "STELLAR_TERASTALLIZE": { - "name": "隱藏屬性", - "description": "星晶化一隻寶可夢" - }, - "SPLICE": { - "name": "無限融合", - "description": "使用基因之楔將兩隻寶可夢融合在一起" - }, - "MINI_BLACK_HOLE": { - "name": "一大洞的道具", - "description": "獲得一個迷你黑洞" - }, - "CATCH_MYTHICAL": { - "name": "神秘禮物", - "description": "捕捉一隻幻之寶可夢" - }, - "CATCH_SUB_LEGENDARY": { - "name": "二級傳說", - "description": "捕捉一隻準傳說寶可夢" - }, - "CATCH_LEGENDARY": { - "name": "傳說", - "description": "捕捉一隻傳說寶可夢" - }, - "SEE_SHINY": { - "name": "閃耀奪目", - "description": "在野外找到一隻閃光寶可夢" - }, - "SHINY_PARTY": { - "name": "嘔心瀝血", - "description": "擁有一支由閃光寶可夢組成的滿員隊伍" - }, - "HATCH_MYTHICAL": { - "name": "幻獸蛋", - "description": "從蛋中孵化出一隻幻之寶可夢" - }, - "HATCH_SUB_LEGENDARY": { - "name": "二級傳說蛋", - "description": "從蛋中孵化出一隻準傳說寶可夢" - }, - "HATCH_LEGENDARY": { - "name": "傳說蛋", - "description": "從蛋中孵化出一隻傳說寶可夢" - }, - "HATCH_SHINY": { - "name": "金色傳說!", - "description": "從蛋中孵化出一隻閃光寶可夢" - }, - "HIDDEN_ABILITY": { - "name": "隱藏實力", - "description": "捕捉一隻擁有隱藏特性的寶可夢" - }, - "PERFECT_IVS": { - "name": "合格證", - "description": "獲得一隻擁有完美個體值的寶可夢" - }, - "CLASSIC_VICTORY": { - "name": "戰無不勝", - "description": "在經典模式中通關遊戲" - }, - "MONO_GEN_ONE": { - "name": "最初的勁敵", - "description": "完成僅限第一世代的挑戰." - }, - "MONO_GEN_TWO": { - "name": "1.5世代", - "description": "完成僅限第二世代的挑戰." - }, - "MONO_GEN_THREE": { - "name": "“水太多了”", - "description": "完成僅限第三世代的挑戰." - }, - "MONO_GEN_FOUR": { - "name": "她真是最強冠軍嗎?", - "description": "完成僅限第四世代的挑戰." - }, - "MONO_GEN_FIVE": { - "name": "完全原創", - "description": "完成僅限第五世代的挑戰." - }, - "MONO_GEN_SIX": { - "name": "女大公", - "description": "完成僅限第六世代的挑戰." - }, - "MONO_GEN_SEVEN": { - "name": "首屆冠軍", - "description": "完成僅限第七世代的挑戰." - }, - "MONO_GEN_EIGHT": { - "name": "冠軍時刻!", - "description": "完成僅限第八世代的挑戰." - }, - "MONO_GEN_NINE": { - "name": "她又放水了", - "description": "完成僅限第九世代的挑戰." - }, - "MonoType": { - "description": "完成 {{type}} 單屬性挑戰." - }, - "MONO_NORMAL": { - "name": "異乎尋常的尋常" - }, - "MONO_FIGHTING": { - "name": "我有真功夫" - }, - "MONO_FLYING": { - "name": "憤怒的小鳥" - }, - "MONO_POISON": { - "name": "關都地區特色" - }, - "MONO_GROUND": { - "name": "地震預報" - }, - "MONO_ROCK": { - "name": "堅如磐石" - }, - "MONO_BUG": { - "name": "音箱蟀俠" - }, - "MONO_GHOST": { - "name": "捉鬼敢死隊" - }, - "MONO_STEEL": { - "name": "鐵巨人" - }, - "MONO_FIRE": { - "name": "搓火球解決一切" - }, - "MONO_WATER": { - "name": "當雨來臨,傾盆而下" - }, - "MONO_GRASS": { - "name": "別踏這個青" - }, - "MONO_ELECTRIC": { - "name": "瞄準大岩蛇的角!" - }, - "MONO_PSYCHIC": { - "name": "腦洞大開" - }, - "MONO_ICE": { - "name": "如履薄冰" - }, - "MONO_DRAGON": { - "name": "準神俱樂部" - }, - "MONO_DARK": { - "name": "總有叛逆期" - }, - "MONO_FAIRY": { - "name": "林克,醒醒!" - } -} \ No newline at end of file diff --git a/src/locales/zh_TW/achv-female.json b/src/locales/zh_TW/achv.json similarity index 100% rename from src/locales/zh_TW/achv-female.json rename to src/locales/zh_TW/achv.json diff --git a/src/locales/zh_TW/config.ts b/src/locales/zh_TW/config.ts index 8d9fb7f4a37..1e7ab421092 100644 --- a/src/locales/zh_TW/config.ts +++ b/src/locales/zh_TW/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const zhTwConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/system/achv.ts b/src/system/achv.ts index 62772758f61..0f9bc5ac6de 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -5,7 +5,6 @@ import { pokemonEvolutions } from "#app/data/pokemon-evolutions"; import i18next from "i18next"; import * as Utils from "../utils"; import { PlayerGender } from "#enums/player-gender"; -import { ParseKeys } from "i18next"; import { Challenge, FreshStartChallenge, SingleGenerationChallenge, SingleTypeChallenge } from "#app/data/challenge.js"; import { ConditionFn } from "#app/@types/common.js"; @@ -42,13 +41,13 @@ export class Achv { /** * Get the name of the achievement based on the gender of the player - * @param playerGender - the gender of the player + * @param playerGender - the gender of the player (default: {@linkcode PlayerGender.UNSET}) * @returns the name of the achievement localized for the player gender */ - getName(playerGender: PlayerGender): string { - const prefix = playerGender === PlayerGender.FEMALE ?"PGF" : "PGM"; + getName(playerGender: PlayerGender = PlayerGender.UNSET): string { + const genderStr = PlayerGender[playerGender].toLowerCase(); // Localization key is used to get the name of the achievement - return i18next.t(`${prefix}achv:${this.localizationKey}.name` as ParseKeys); + return i18next.t(`achv:${this.localizationKey}.name`, { context: genderStr }); } getDescription(): string { @@ -151,116 +150,110 @@ export class ChallengeAchv extends Achv { */ export function getAchievementDescription(localizationKey: string): string { // We need to get the player gender from the game data to add the correct prefix to the achievement name - let playerGender = PlayerGender.MALE; - if (this?.scene) { - playerGender = this.scene.gameData.gender; - } - let genderPrefix = "PGM"; - if (playerGender === PlayerGender.FEMALE) { - genderPrefix = "PGF"; - } + const genderIndex = this?.scene?.gameData?.gender ?? PlayerGender.MALE; //TODO: why is `this` being used here!? We are not inside a scope (copied from original) + const genderStr = PlayerGender[genderIndex].toLowerCase(); switch (localizationKey) { case "10K_MONEY": - return i18next.t(`${genderPrefix}achv:MoneyAchv.description` as ParseKeys, {"moneyAmount": achvs._10K_MONEY.moneyAmount.toLocaleString("en-US")}); + return i18next.t("achv:MoneyAchv.description", {context: genderStr, "moneyAmount": achvs._10K_MONEY.moneyAmount.toLocaleString("en-US")}); case "100K_MONEY": - return i18next.t(`${genderPrefix}achv:MoneyAchv.description` as ParseKeys, {"moneyAmount": achvs._100K_MONEY.moneyAmount.toLocaleString("en-US")}); + return i18next.t("achv:MoneyAchv.description", {context: genderStr, "moneyAmount": achvs._100K_MONEY.moneyAmount.toLocaleString("en-US")}); case "1M_MONEY": - return i18next.t(`${genderPrefix}achv:MoneyAchv.description` as ParseKeys, {"moneyAmount": achvs._1M_MONEY.moneyAmount.toLocaleString("en-US")}); + return i18next.t("achv:MoneyAchv.description", {context: genderStr, "moneyAmount": achvs._1M_MONEY.moneyAmount.toLocaleString("en-US")}); case "10M_MONEY": - return i18next.t(`${genderPrefix}achv:MoneyAchv.description` as ParseKeys, {"moneyAmount": achvs._10M_MONEY.moneyAmount.toLocaleString("en-US")}); + return i18next.t("achv:MoneyAchv.description", {context: genderStr, "moneyAmount": achvs._10M_MONEY.moneyAmount.toLocaleString("en-US")}); case "250_DMG": - return i18next.t(`${genderPrefix}achv:DamageAchv.description` as ParseKeys, {"damageAmount": achvs._250_DMG.damageAmount.toLocaleString("en-US")}); + return i18next.t("achv:DamageAchv.description", {context: genderStr, "damageAmount": achvs._250_DMG.damageAmount.toLocaleString("en-US")}); case "1000_DMG": - return i18next.t(`${genderPrefix}achv:DamageAchv.description` as ParseKeys, {"damageAmount": achvs._1000_DMG.damageAmount.toLocaleString("en-US")}); + return i18next.t("achv:DamageAchv.description", {context: genderStr, "damageAmount": achvs._1000_DMG.damageAmount.toLocaleString("en-US")}); case "2500_DMG": - return i18next.t(`${genderPrefix}achv:DamageAchv.description` as ParseKeys, {"damageAmount": achvs._2500_DMG.damageAmount.toLocaleString("en-US")}); + return i18next.t("achv:DamageAchv.description", {context: genderStr, "damageAmount": achvs._2500_DMG.damageAmount.toLocaleString("en-US")}); case "10000_DMG": - return i18next.t(`${genderPrefix}achv:DamageAchv.description` as ParseKeys, {"damageAmount": achvs._10000_DMG.damageAmount.toLocaleString("en-US")}); + return i18next.t("achv:DamageAchv.description", {context: genderStr, "damageAmount": achvs._10000_DMG.damageAmount.toLocaleString("en-US")}); case "250_HEAL": - return i18next.t(`${genderPrefix}achv:HealAchv.description` as ParseKeys, {"healAmount": achvs._250_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); + return i18next.t("achv:HealAchv.description", {context: genderStr, "healAmount": achvs._250_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); case "1000_HEAL": - return i18next.t(`${genderPrefix}achv:HealAchv.description` as ParseKeys, {"healAmount": achvs._1000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); + return i18next.t("achv:HealAchv.description", {context: genderStr, "healAmount": achvs._1000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); case "2500_HEAL": - return i18next.t(`${genderPrefix}achv:HealAchv.description` as ParseKeys, {"healAmount": achvs._2500_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); + return i18next.t("achv:HealAchv.description", {context: genderStr, "healAmount": achvs._2500_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); case "10000_HEAL": - return i18next.t(`${genderPrefix}achv:HealAchv.description` as ParseKeys, {"healAmount": achvs._10000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); + return i18next.t("achv:HealAchv.description", {context: genderStr, "healAmount": achvs._10000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); case "LV_100": - return i18next.t(`${genderPrefix}achv:LevelAchv.description` as ParseKeys, {"level": achvs.LV_100.level}); + return i18next.t("achv:LevelAchv.description", {context: genderStr, "level": achvs.LV_100.level}); case "LV_250": - return i18next.t(`${genderPrefix}achv:LevelAchv.description` as ParseKeys, {"level": achvs.LV_250.level}); + return i18next.t("achv:LevelAchv.description", {context: genderStr, "level": achvs.LV_250.level}); case "LV_1000": - return i18next.t(`${genderPrefix}achv:LevelAchv.description` as ParseKeys, {"level": achvs.LV_1000.level}); + return i18next.t("achv:LevelAchv.description", {context: genderStr, "level": achvs.LV_1000.level}); case "10_RIBBONS": - return i18next.t(`${genderPrefix}achv:RibbonAchv.description` as ParseKeys, {"ribbonAmount": achvs._10_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._10_RIBBONS.ribbonAmount.toLocaleString("en-US")}); case "25_RIBBONS": - return i18next.t(`${genderPrefix}achv:RibbonAchv.description` as ParseKeys, {"ribbonAmount": achvs._25_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._25_RIBBONS.ribbonAmount.toLocaleString("en-US")}); case "50_RIBBONS": - return i18next.t(`${genderPrefix}achv:RibbonAchv.description` as ParseKeys, {"ribbonAmount": achvs._50_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._50_RIBBONS.ribbonAmount.toLocaleString("en-US")}); case "75_RIBBONS": - return i18next.t(`${genderPrefix}achv:RibbonAchv.description` as ParseKeys, {"ribbonAmount": achvs._75_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._75_RIBBONS.ribbonAmount.toLocaleString("en-US")}); case "100_RIBBONS": - return i18next.t(`${genderPrefix}achv:RibbonAchv.description` as ParseKeys, {"ribbonAmount": achvs._100_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._100_RIBBONS.ribbonAmount.toLocaleString("en-US")}); case "TRANSFER_MAX_BATTLE_STAT": - return i18next.t(`${genderPrefix}achv:TRANSFER_MAX_BATTLE_STAT.description` as ParseKeys); + return i18next.t("achv:TRANSFER_MAX_BATTLE_STAT.description", { context: genderStr }); case "MAX_FRIENDSHIP": - return i18next.t(`${genderPrefix}achv:MAX_FRIENDSHIP.description` as ParseKeys); + return i18next.t("achv:MAX_FRIENDSHIP.description", { context: genderStr }); case "MEGA_EVOLVE": - return i18next.t(`${genderPrefix}achv:MEGA_EVOLVE.description` as ParseKeys); + return i18next.t("achv:MEGA_EVOLVE.description", { context: genderStr }); case "GIGANTAMAX": - return i18next.t(`${genderPrefix}achv:GIGANTAMAX.description` as ParseKeys); + return i18next.t("achv:GIGANTAMAX.description", { context: genderStr }); case "TERASTALLIZE": - return i18next.t(`${genderPrefix}achv:TERASTALLIZE.description` as ParseKeys); + return i18next.t("achv:TERASTALLIZE.description", { context: genderStr }); case "STELLAR_TERASTALLIZE": - return i18next.t(`${genderPrefix}achv:STELLAR_TERASTALLIZE.description` as ParseKeys); + return i18next.t("achv:STELLAR_TERASTALLIZE.description", { context: genderStr }); case "SPLICE": - return i18next.t(`${genderPrefix}achv:SPLICE.description` as ParseKeys); + return i18next.t("achv:SPLICE.description", { context: genderStr }); case "MINI_BLACK_HOLE": - return i18next.t(`${genderPrefix}achv:MINI_BLACK_HOLE.description` as ParseKeys); + return i18next.t("achv:MINI_BLACK_HOLE.description", { context: genderStr }); case "CATCH_MYTHICAL": - return i18next.t(`${genderPrefix}achv:CATCH_MYTHICAL.description` as ParseKeys); + return i18next.t("achv:CATCH_MYTHICAL.description", { context: genderStr }); case "CATCH_SUB_LEGENDARY": - return i18next.t(`${genderPrefix}achv:CATCH_SUB_LEGENDARY.description` as ParseKeys); + return i18next.t("achv:CATCH_SUB_LEGENDARY.description", { context: genderStr }); case "CATCH_LEGENDARY": - return i18next.t(`${genderPrefix}achv:CATCH_LEGENDARY.description` as ParseKeys); + return i18next.t("achv:CATCH_LEGENDARY.description", { context: genderStr }); case "SEE_SHINY": - return i18next.t(`${genderPrefix}achv:SEE_SHINY.description` as ParseKeys); + return i18next.t("achv:SEE_SHINY.description", { context: genderStr }); case "SHINY_PARTY": - return i18next.t(`${genderPrefix}achv:SHINY_PARTY.description` as ParseKeys); + return i18next.t("achv:SHINY_PARTY.description", { context: genderStr }); case "HATCH_MYTHICAL": - return i18next.t(`${genderPrefix}achv:HATCH_MYTHICAL.description` as ParseKeys); + return i18next.t("achv:HATCH_MYTHICAL.description", { context: genderStr }); case "HATCH_SUB_LEGENDARY": - return i18next.t(`${genderPrefix}achv:HATCH_SUB_LEGENDARY.description` as ParseKeys); + return i18next.t("achv:HATCH_SUB_LEGENDARY.description", { context: genderStr }); case "HATCH_LEGENDARY": - return i18next.t(`${genderPrefix}achv:HATCH_LEGENDARY.description` as ParseKeys); + return i18next.t("achv:HATCH_LEGENDARY.description", { context: genderStr }); case "HATCH_SHINY": - return i18next.t(`${genderPrefix}achv:HATCH_SHINY.description` as ParseKeys); + return i18next.t("achv:HATCH_SHINY.description", { context: genderStr }); case "HIDDEN_ABILITY": - return i18next.t(`${genderPrefix}achv:HIDDEN_ABILITY.description` as ParseKeys); + return i18next.t("achv:HIDDEN_ABILITY.description", { context: genderStr }); case "PERFECT_IVS": - return i18next.t(`${genderPrefix}achv:PERFECT_IVS.description` as ParseKeys); + return i18next.t("achv:PERFECT_IVS.description", { context: genderStr }); case "CLASSIC_VICTORY": - return i18next.t(`${genderPrefix}achv:CLASSIC_VICTORY.description` as ParseKeys); + return i18next.t("achv:CLASSIC_VICTORY.description", { context: genderStr }); case "UNEVOLVED_CLASSIC_VICTORY": - return i18next.t(`${genderPrefix}achv:UNEVOLVED_CLASSIC_VICTORY.description` as ParseKeys); + return i18next.t("achv:UNEVOLVED_CLASSIC_VICTORY.description", { context: genderStr }); case "MONO_GEN_ONE": - return i18next.t(`${genderPrefix}achv:MONO_GEN_ONE.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_ONE.description", { context: genderStr }); case "MONO_GEN_TWO": - return i18next.t(`${genderPrefix}achv:MONO_GEN_TWO.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_TWO.description", { context: genderStr }); case "MONO_GEN_THREE": - return i18next.t(`${genderPrefix}achv:MONO_GEN_THREE.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_THREE.description", { context: genderStr }); case "MONO_GEN_FOUR": - return i18next.t(`${genderPrefix}achv:MONO_GEN_FOUR.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_FOUR.description", { context: genderStr }); case "MONO_GEN_FIVE": - return i18next.t(`${genderPrefix}achv:MONO_GEN_FIVE.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_FIVE.description", { context: genderStr }); case "MONO_GEN_SIX": - return i18next.t(`${genderPrefix}achv:MONO_GEN_SIX.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_SIX.description", { context: genderStr }); case "MONO_GEN_SEVEN": - return i18next.t(`${genderPrefix}achv:MONO_GEN_SEVEN.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_SEVEN.description", { context: genderStr }); case "MONO_GEN_EIGHT": - return i18next.t(`${genderPrefix}achv:MONO_GEN_EIGHT.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_EIGHT.description", { context: genderStr }); case "MONO_GEN_NINE": - return i18next.t(`${genderPrefix}achv:MONO_GEN_NINE.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_NINE.description", { context: genderStr }); case "MONO_NORMAL": case "MONO_FIGHTING": case "MONO_FLYING": @@ -279,9 +272,9 @@ export function getAchievementDescription(localizationKey: string): string { case "MONO_DRAGON": case "MONO_DARK": case "MONO_FAIRY": - return i18next.t(`${genderPrefix}achv:MonoType.description` as ParseKeys, {"type": i18next.t(`pokemonInfo:Type.${localizationKey.slice(5)}`)}); + return i18next.t("achv:MonoType.description", { context: genderStr, "type": i18next.t(`pokemonInfo:Type.${localizationKey.slice(5)}`) }); case "FRESH_START": - return i18next.t(`${genderPrefix}achv:FRESH_START.description` as ParseKeys); + return i18next.t("achv:FRESH_START.description", { context: genderStr }); default: return ""; } diff --git a/src/test/battle/battle.test.ts b/src/test/battle/battle.test.ts index c79eee63a7c..be89fdeb2af 100644 --- a/src/test/battle/battle.test.ts +++ b/src/test/battle/battle.test.ts @@ -43,6 +43,7 @@ describe("Test Battle Phase", () => { beforeEach(() => { game = new GameManager(phaserGame); + game.scene.gameData.gender = undefined!; // just for these tests! }); it("test phase interceptor with prompt", async () => { diff --git a/src/test/utils/gameManager.ts b/src/test/utils/gameManager.ts index d3c2652fcbe..6ade758fd6f 100644 --- a/src/test/utils/gameManager.ts +++ b/src/test/utils/gameManager.ts @@ -134,7 +134,7 @@ export default class GameManager { this.scene.expParty = ExpNotification.SKIP; this.scene.hpBarSpeed = 3; this.scene.enableTutorials = false; - this.scene.gameData.gender = PlayerGender.MALE; + this.scene.gameData.gender = PlayerGender.MALE; // set initial player gender } diff --git a/src/test/utils/helpers/settingsHelper.ts b/src/test/utils/helpers/settingsHelper.ts index dec9e160d51..76ffafdbe10 100644 --- a/src/test/utils/helpers/settingsHelper.ts +++ b/src/test/utils/helpers/settingsHelper.ts @@ -1,3 +1,4 @@ +import { PlayerGender } from "#app/enums/player-gender"; import { GameManagerHelper } from "./gameManagerHelper"; /** @@ -11,5 +12,19 @@ export class SettingsHelper extends GameManagerHelper { */ typeHints(enable: boolean) { this.game.scene.typeHints = enable; + this.log(`Type Hints ${enable? "enabled" : "disabled"}` ); + } + + /** + * Change the player gender + * @param gender the {@linkcode PlayerGender} to set + */ + playerGender(gender: PlayerGender) { + this.game.scene.gameData.gender = gender; + this.log(`Gender set to: ${PlayerGender[gender]} (=${gender})` ); + } + + private log(...params: any[]) { + console.log("Settings:", ...params); } } diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index a3e698c63ba..eb4316dc24b 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -7,7 +7,6 @@ import MessageUiHandler from "./message-ui-handler"; import { addTextObject, TextStyle } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; -import { ParseKeys } from "i18next"; import { PlayerGender } from "#enums/player-gender"; enum Page { @@ -83,13 +82,10 @@ export default class AchvsUiHandler extends MessageUiHandler { this.headerActionText.setPositionRelative(this.headerBg, 264, 8); // We need to get the player gender from the game data to add the correct prefix to the achievement name - const playerGender = this.scene.gameData.gender; - let genderPrefix = "PGM"; - if (playerGender === PlayerGender.FEMALE) { - genderPrefix = "PGF"; - } + const genderIndex = this.scene.gameData.gender ?? PlayerGender.MALE; + const genderStr = PlayerGender[genderIndex].toLowerCase(); - this.achvsName = i18next.t(`${genderPrefix}achv:Achievements.name` as ParseKeys); + this.achvsName = i18next.t("achv:Achievements.name", { context: genderStr }); this.vouchersName = i18next.t("voucher:vouchers"); this.iconsBg = addWindow(this.scene, 0, this.headerBg.height, (this.scene.game.canvas.width / 6) - 2, (this.scene.game.canvas.height / 6) - this.headerBg.height - 68); @@ -189,13 +185,10 @@ export default class AchvsUiHandler extends MessageUiHandler { protected showAchv(achv: Achv) { // We need to get the player gender from the game data to add the correct prefix to the achievement name - const playerGender = this.scene.gameData.gender; - let genderPrefix = "PGM"; - if (playerGender === PlayerGender.FEMALE) { - genderPrefix = "PGF"; - } + const genderIndex = this.scene.gameData.gender ?? PlayerGender.MALE; + const genderStr = PlayerGender[genderIndex].toLowerCase(); - achv.name = i18next.t(`${genderPrefix}achv:${achv.localizationKey}.name` as ParseKeys); + achv.name = i18next.t(`achv:${achv.localizationKey}.name`, { context: genderStr }); achv.description = getAchievementDescription(achv.localizationKey); const achvUnlocks = this.scene.gameData.achvUnlocks; const unlocked = achvUnlocks.hasOwnProperty(achv.id); @@ -203,7 +196,7 @@ export default class AchvsUiHandler extends MessageUiHandler { this.titleText.setText(unlocked ? achv.name : "???"); this.showText(!hidden ? achv.description : ""); this.scoreText.setText(`${achv.score}pt`); - this.unlockText.setText(unlocked ? new Date(achvUnlocks[achv.id]).toLocaleDateString() : i18next.t(`${genderPrefix}achv:Locked.name` as ParseKeys)); + this.unlockText.setText(unlocked ? new Date(achvUnlocks[achv.id]).toLocaleDateString() : i18next.t("achv:Locked.name")); } protected showVoucher(voucher: Voucher) { From b7815625531f86957023773a5eacaa5e0902ef17 Mon Sep 17 00:00:00 2001 From: Opaque02 <66582645+Opaque02@users.noreply.github.com> Date: Fri, 30 Aug 2024 02:16:51 +1000 Subject: [PATCH 02/18] Updated rival battle to have space between words again (#3893) Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> --- src/locales/en/dialogue-female.json | 4 ++-- src/locales/en/dialogue-male.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/locales/en/dialogue-female.json b/src/locales/en/dialogue-female.json index ca7f961e3a6..9cd2c9a76b2 100644 --- a/src/locales/en/dialogue-female.json +++ b/src/locales/en/dialogue-female.json @@ -2582,10 +2582,10 @@ }, "rival": { "encounter": { - "1": "@c{smile}Hey, I was looking for you! I knew you were eager to get going but I expected at least a goodbye…$@c{smile_eclosed}So you're really pursuing your dream after all? I almost can't believe it.$@c{serious_smile_fists}Since we're here, how about a battle?After all, I want to make sure you're ready.$@c{serious_mopen_fists}Don't hold back, I want you to give me everything you've got!" + "1": "@c{smile}Hey, I was looking for you! I knew you were eager to get going but I expected at least a goodbye…$@c{smile_eclosed}So you're really pursuing your dream after all? I almost can't believe it.$@c{serious_smile_fists}Since we're here, how about a battle?\nAfter all, I want to make sure you're ready.$@c{serious_mopen_fists}Don't hold back, I want you to give me everything you've got!" }, "victory": { - "1": "@c{shock}Wow… You cleaned me out.Are you actually a beginner?$@c{smile}Maybe it was a bit of luck but…Who knows you might just be able to go all the way.$By the way, the professor asked me to give you these items. They look pretty cool.$@c{serious_smile_fists}Good luck out there!" + "1": "@c{shock}Wow… You cleaned me out.\nAre you actually a beginner?$@c{smile}Maybe it was a bit of luck but…Who knows you might just be able to go all the way.$By the way, the professor asked me to give you these items. They look pretty cool.$@c{serious_smile_fists}Good luck out there!" } }, "rival_female": { diff --git a/src/locales/en/dialogue-male.json b/src/locales/en/dialogue-male.json index 166c047c4ff..24d2139d3f3 100644 --- a/src/locales/en/dialogue-male.json +++ b/src/locales/en/dialogue-male.json @@ -2582,10 +2582,10 @@ }, "rival": { "encounter": { - "1": "@c{smile}Hey, I was looking for you! I knew you were eager to get going but I expected at least a goodbye…$@c{smile_eclosed}So you're really pursuing your dream after all? I almost can't believe it.$@c{serious_smile_fists}Since we're here, how about a battle?After all, I want to make sure you're ready.$@c{serious_mopen_fists}Don't hold back, I want you to give me everything you've got!" + "1": "@c{smile}Hey, I was looking for you! I knew you were eager to get going but I expected at least a goodbye…$@c{smile_eclosed}So you're really pursuing your dream after all? I almost can't believe it.$@c{serious_smile_fists}Since we're here, how about a battle?\nAfter all, I want to make sure you're ready.$@c{serious_mopen_fists}Don't hold back, I want you to give me everything you've got!" }, "victory": { - "1": "@c{shock}Wow… You cleaned me out.Are you actually a beginner?$@c{smile}Maybe it was a bit of luck but…Who knows you might just be able to go all the way.$By the way, the professor asked me to give you these items. They look pretty cool.$@c{serious_smile_fists}Good luck out there!" + "1": "@c{shock}Wow… You cleaned me out.\nAre you actually a beginner?$@c{smile}Maybe it was a bit of luck but…Who knows you might just be able to go all the way.$By the way, the professor asked me to give you these items. They look pretty cool.$@c{serious_smile_fists}Good luck out there!" } }, "rival_female": { From af918975a88ae6c9de04ff2b6915f12d7fbcceb2 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Thu, 29 Aug 2024 09:25:45 -0700 Subject: [PATCH 03/18] adapt gender context logic to run-history (#3881) --- src/locales/de/run-history.json | 24 ++++++++++++------------ src/locales/en/run-history.json | 24 ++++++++++++------------ src/locales/es/run-history.json | 24 ++++++++++++------------ src/locales/fr/run-history.json | 24 ++++++++++++------------ src/locales/it/run-history.json | 24 ++++++++++++------------ src/locales/ja/run-history.json | 14 +++++++------- src/locales/ko/run-history.json | 24 ++++++++++++------------ src/locales/pt_BR/run-history.json | 24 ++++++++++++------------ src/locales/zh_CN/run-history.json | 16 ++++++++-------- src/locales/zh_TW/run-history.json | 24 ++++++++++++------------ src/ui/run-history-ui-handler.ts | 9 +++++---- src/ui/run-info-ui-handler.ts | 19 ++++++++++++------- 12 files changed, 128 insertions(+), 122 deletions(-) diff --git a/src/locales/de/run-history.json b/src/locales/de/run-history.json index 77c8fcb6170..0a36afe9adc 100644 --- a/src/locales/de/run-history.json +++ b/src/locales/de/run-history.json @@ -1,15 +1,15 @@ { "victory": "Sieg!", - "defeatedWildM": "Besiegt durch ", - "defeatedTrainerM": "Besiegt durch ", - "defeatedTrainerDoubleM": "Besiegt durch Doppelkampf", - "defeatedRivalM": "Besiegt durch Rivalin", - "defeatedM": "Besiegt", - "defeatedWildF": "Besiegt durch ", - "defeatedTrainerF": "Besiegt durch ", - "defeatedTrainerDoubleF": "Besiegt durch Doppelkampf", - "defeatedRivalF": "Besiegt durch Rivale", - "defeatedF": "Besiegt", + "defeatedWild": "Besiegt durch ", + "defeatedTrainer": "Besiegt durch ", + "defeatedTrainerDouble": "Besiegt durch Doppelkampf", + "defeatedRival": "Besiegt durch Rivalin", + "defeated": "Besiegt", + "defeatedWild_female": "Besiegt durch ", + "defeatedTrainer_female": "Besiegt durch ", + "defeatedTrainerDouble_female": "Besiegt durch Doppelkampf", + "defeatedRival_female": "Besiegt durch Rivale", + "defeated_female": "Besiegt", "luck": "Glück", "score": "Punkte", "mode": "Modus", @@ -30,8 +30,8 @@ "money": "Geld", "runLength": "Durchlauf Dauer", "viewHeldItems": "Getragene Items", - "hallofFameTextM": "Willkommen in der Ruhmeshalle!", - "hallofFameTextF": "Willkommen in der Ruhmeshalle", + "hallofFameText": "Willkommen in der Ruhmeshalle!", + "hallofFameText_female": "Willkommen in der Ruhmeshalle", "viewHallOfFame": "Ruhmeshalle ansehen!", "viewEndingSplash": "Endgrafik anzeigen!" } diff --git a/src/locales/en/run-history.json b/src/locales/en/run-history.json index 0099a4a3ff4..53596bdf629 100644 --- a/src/locales/en/run-history.json +++ b/src/locales/en/run-history.json @@ -1,15 +1,15 @@ { "victory": "Victory!", - "defeatedWildM": "Defeated by ", - "defeatedTrainerM": "Defeated by ", - "defeatedTrainerDoubleM": "Defeated by Duo", - "defeatedRivalM": "Defeated by Rival", - "defeatedM": "Defeated", - "defeatedWildF": "Defeated by ", - "defeatedTrainerF": "Defeated by ", - "defeatedTrainerDoubleF": "Defeated by Duo", - "defeatedRivalF": "Defeated by Rival", - "defeatedF": "Defeated", + "defeatedWild": "Defeated by ", + "defeatedTrainer": "Defeated by ", + "defeatedTrainerDouble": "Defeated by Duo", + "defeatedRival": "Defeated by Rival", + "defeated": "Defeated", + "defeatedWild_female": "Defeated by ", + "defeatedTrainer_female": "Defeated by ", + "defeatedTrainerDouble_female": "Defeated by Duo", + "defeatedRival_female": "Defeated by Rival", + "defeated_female": "Defeated", "luck": "Luck", "score": "Score", "mode": "Mode", @@ -30,8 +30,8 @@ "money": "Money", "runLength": "Run Length", "viewHeldItems": "Held Items", - "hallofFameTextM": "Welcome to the Hall of Fame!", - "hallofFameTextF": "Welcome to the Hall of Fame!", + "hallofFameText": "Welcome to the Hall of Fame!", + "hallofFameText_female": "Welcome to the Hall of Fame!", "viewHallOfFame": "View Hall of Fame!", "viewEndingSplash": "View ending art!" } diff --git a/src/locales/es/run-history.json b/src/locales/es/run-history.json index d5c52e10fd9..99b30586621 100644 --- a/src/locales/es/run-history.json +++ b/src/locales/es/run-history.json @@ -1,15 +1,15 @@ { "victory": "¡Victoria!", - "defeatedWildM": "Derrotado por ", - "defeatedTrainerM": "Derrotado por ", - "defeatedTrainerDoubleM": "Derrotado por un dúo", - "defeatedRivalM": "Derrotado por el rival", - "defeatedM": "Derrotado", - "defeatedWildF": "Derrotada por ", - "defeatedTrainerF": "Derrotada por ", - "defeatedTrainerDoubleF": "Derrotada por un dúo", - "defeatedRivalF": "Derrotada por el rival", - "defeatedF": "Derrotada", + "defeatedWild": "Derrotado por ", + "defeatedTrainer": "Derrotado por ", + "defeatedTrainerDouble": "Derrotado por un dúo", + "defeatedRival": "Derrotado por el rival", + "defeated": "Derrotado", + "defeatedWild_female": "Derrotada por ", + "defeatedTrainer_female": "Derrotada por ", + "defeatedTrainerDouble_female": "Derrotada por un dúo", + "defeatedRival_female": "Derrotada por el rival", + "defeated_female": "Derrotada", "luck": "Suerte", "score": "Puntuación", "mode": "Modo", @@ -30,8 +30,8 @@ "money": "Dinero", "runLength": "Duración de partida", "viewHeldItems": "Objetos equipados", - "hallofFameTextM": "¡Bienvenido al Hall de la Fama!", - "hallofFameTextF": "¡Bienvenida al Hall de la Fama!", + "hallofFameText": "¡Bienvenido al Hall de la Fama!", + "hallofFameText_female": "¡Bienvenida al Hall de la Fama!", "viewHallOfFame": "¡Ver Hall de la Fama!", "viewEndingSplash": "¡Ver la imagen final!" } \ No newline at end of file diff --git a/src/locales/fr/run-history.json b/src/locales/fr/run-history.json index 7ee0a879e3e..1def265acf1 100644 --- a/src/locales/fr/run-history.json +++ b/src/locales/fr/run-history.json @@ -1,15 +1,15 @@ { "victory": "Victoire !", - "defeatedWildM": "Battu par ", - "defeatedTrainerM": "Battu par ", - "defeatedTrainerDoubleM": "Battu par Duo", - "defeatedRivalM": "Battu par Rivale", - "defeatedM": "Vaincu", - "defeatedWildF": "Battue par ", - "defeatedTrainerF": "Battue par ", - "defeatedTrainerDoubleF": "Battue par Duo", - "defeatedRivalF": "Battue par Rival", - "defeatedF": "Vaincue", + "defeatedWild": "Battu par ", + "defeatedTrainer": "Battu par ", + "defeatedTrainerDouble": "Battu par Duo", + "defeatedRival": "Battu par Rivale", + "defeated": "Vaincu", + "defeatedWild_female": "Battue par ", + "defeatedTrainer_female": "Battue par ", + "defeatedTrainerDouble_female": "Battue par Duo", + "defeatedRival_female": "Battue par Rival", + "defeated_female": "Vaincue", "luck": "Chance ", "score": "Score", "mode": "Mode ", @@ -30,8 +30,8 @@ "money": "Argent", "runLength": "Durée session ", "viewHeldItems": "Objets tenus", - "hallofFameTextM": "Bienvenue au Panthéon !", - "hallofFameTextF": "Bienvenue au Panthéon !", + "hallofFameText": "Bienvenue au Panthéon !", + "hallofFameText_female": "Bienvenue au Panthéon !", "viewHallOfFame": "Voir le Panthéon", "viewEndingSplash": "Voir l’illustration\nde fin" } \ No newline at end of file diff --git a/src/locales/it/run-history.json b/src/locales/it/run-history.json index b49b7ddc168..87f5a746303 100644 --- a/src/locales/it/run-history.json +++ b/src/locales/it/run-history.json @@ -1,15 +1,15 @@ { "victory": "Vittoria!", - "defeatedWildM": "Sconfitto da ", - "defeatedTrainerM": "Sconfitto da ", - "defeatedTrainerDoubleM": "Sconfitto dalla coppia ", - "defeatedRivalM": "Sconfitto dalla rivale", - "defeatedM": "Sconfitto", - "defeatedWildF": "Sconfitta da ", - "defeatedTrainerF": "Sconfitta da ", - "defeatedTrainerDoubleF": "Sconfitta dalla coppia ", - "defeatedRivalF": "Sconfitta dal rivale", - "defeatedF": "Sconfitta", + "defeatedWild": "Sconfitto da ", + "defeatedTrainer": "Sconfitto da ", + "defeatedTrainerDouble": "Sconfitto dalla coppia ", + "defeatedRival": "Sconfitto dalla rivale", + "defeated": "Sconfitto", + "defeatedWild_female": "Sconfitta da ", + "defeatedTrainer_female": "Sconfitta da ", + "defeatedTrainerDouble_female": "Sconfitta dalla coppia ", + "defeatedRival_female": "Sconfitta dal rivale", + "defeated_female": "Sconfitta", "luck": "Fortuna", "score": "Punteggio", "mode": "Modalità", @@ -30,8 +30,8 @@ "money": "Patrimonio", "runLength": "Durata Run", "viewHeldItems": "Oggetti equip.", - "hallofFameTextM": "Benvenuto alla Sala d'Onore!", - "hallofFameTextF": "Benvenuto alla Sala d'Onore!", + "hallofFameText": "Benvenuto alla Sala d'Onore!", + "hallofFameText_female": "Benvenuto alla Sala d'Onore!", "viewHallOfFame": "Vai alla Sala d'Onore!", "viewEndingSplash": "Vai all'arte finale!" } \ No newline at end of file diff --git a/src/locales/ja/run-history.json b/src/locales/ja/run-history.json index 523cdbf8bb5..222f7de728d 100644 --- a/src/locales/ja/run-history.json +++ b/src/locales/ja/run-history.json @@ -5,11 +5,11 @@ "defeatedTrainerDouble": "倒された相手:", "defeatedRival": "倒された相手:", "defeated": "敗北", - "defeatedWildF": "倒された相手:", - "defeatedTrainerF": "倒された相手:", - "defeatedTrainerDoubleF": "倒された相手:", - "defeatedRivalF": "倒された相手:", - "defeatedF": "敗北", + "defeatedWild_female": "倒された相手:", + "defeatedTrainer_female": "倒された相手:", + "defeatedTrainerDouble_female": "倒された相手:", + "defeatedRival_female": "倒された相手:", + "defeated_female": "敗北", "luck": "運", "score": "スコア", "mode": "モード", @@ -30,8 +30,8 @@ "money": "お金", "runLength": "ラン最高ウェーブ", "viewHeldItems": "手持ちアイテム", - "hallofFameTextM": "殿堂へようこそ!", - "hallofFameTextF": "殿堂へようこそ!", + "hallofFameText": "殿堂へようこそ!", + "hallofFameText_female": "殿堂へようこそ!", "viewHallOfFame": "殿堂登録を見る!", "viewEndingSplash": "クリア後のアートを見る!" } \ No newline at end of file diff --git a/src/locales/ko/run-history.json b/src/locales/ko/run-history.json index 340b0c98439..dbf50efc632 100644 --- a/src/locales/ko/run-history.json +++ b/src/locales/ko/run-history.json @@ -1,15 +1,15 @@ { "victory": "승리!", - "defeatedWildM": "야생에서 패배: ", - "defeatedTrainerM": "트레이너에게 패배: ", - "defeatedTrainerDoubleM": "더블 배틀에서 패배", - "defeatedRivalM": "라이벌에게 패배", - "defeatedM": "패배", - "defeatedWildF": "야생에서 패배: ", - "defeatedTrainerF": "트레이너에게 패배: ", - "defeatedTrainerDoubleF": "더블 배틀에서 패배", - "defeatedRivalF": "라이벌에게 패배", - "defeatedF": "패배", + "defeatedWild": "야생에서 패배: ", + "defeatedTrainer": "트레이너에게 패배: ", + "defeatedTrainerDouble": "더블 배틀에서 패배", + "defeatedRival": "라이벌에게 패배", + "defeated": "패배", + "defeatedWild_female": "야생에서 패배: ", + "defeatedTrainer_female": "트레이너에게 패배: ", + "defeatedTrainerDouble_female": "더블 배틀에서 패배", + "defeatedRival_female": "라이벌에게 패배", + "defeated_female": "패배", "luck": "행운", "score": "점수", "mode": "모드", @@ -30,8 +30,8 @@ "money": "소지금", "runLength": "플레이 타임", "viewHeldItems": "도구", - "hallofFameTextM": "전당 등록을 축하합니다!", - "hallofFameTextF": "전당 등록을 축하합니다!", + "hallofFameText": "전당 등록을 축하합니다!", + "hallofFameText_female": "전당 등록을 축하합니다!", "viewHallOfFame": "전당 보기", "viewEndingSplash": "엔딩 화면 보기" } diff --git a/src/locales/pt_BR/run-history.json b/src/locales/pt_BR/run-history.json index fe02a3e31cb..74cc2c35d28 100644 --- a/src/locales/pt_BR/run-history.json +++ b/src/locales/pt_BR/run-history.json @@ -1,15 +1,15 @@ { "victory": "Vitória!", - "defeatedWildM": "Derrotado por ", - "defeatedTrainerM": "Derrotado por ", - "defeatedTrainerDoubleM": "Derrotado por Dupla", - "defeatedRivalM": "Derrotado por Rival", - "defeatedM": "Derrotado", - "defeatedWildF": "Derrotada por ", - "defeatedTrainerF": "Derrotada por ", - "defeatedTrainerDoubleF": "Derrotada por Dupla", - "defeatedRivalF": "Derrotada por Rival", - "defeatedF": "Derrotada", + "defeatedWild": "Derrotado por ", + "defeatedTrainer": "Derrotado por ", + "defeatedTrainerDouble": "Derrotado por Dupla", + "defeatedRival": "Derrotado por Rival", + "defeated": "Derrotado", + "defeatedWild_female": "Derrotada por ", + "defeatedTrainer_female": "Derrotada por ", + "defeatedTrainerDouble_female": "Derrotada por Dupla", + "defeatedRival_female": "Derrotada por Rival", + "defeated_female": "Derrotada", "luck": "Sorte", "score": "Pontuação", "mode": "Modo", @@ -30,8 +30,8 @@ "money": "Dinheiro", "runLength": "Duração do Jogo", "viewHeldItems": "Itens Segurados", - "hallofFameTextM": "Bem-vindo ao Hall da Fama!", - "hallofFameTextF": "Bem-vinda ao Hall da Fama!", + "hallofFameText": "Bem-vindo ao Hall da Fama!", + "hallofFameText_female": "Bem-vinda ao Hall da Fama!", "viewHallOfFame": "Veja o Hall da Fama!", "viewEndingSplash": "Veja a arte final!" } \ No newline at end of file diff --git a/src/locales/zh_CN/run-history.json b/src/locales/zh_CN/run-history.json index 2f5991d2472..08f430364fc 100644 --- a/src/locales/zh_CN/run-history.json +++ b/src/locales/zh_CN/run-history.json @@ -4,12 +4,12 @@ "defeatedTrainer": "被打败", "defeatedTrainerDouble": "被组合打败", "defeatedRival": "被劲敌打败", - "defeatedM": "被打败", - "defeatedWildF": "被打败", - "defeatedTrainerF": "被打败", - "defeatedTrainerDoubleF": "被组合打败", - "defeatedRivalF": "被劲敌打败", - "defeatedF": "被打败", + "defeated": "被打败", + "defeatedWild_female": "被打败", + "defeatedTrainer_female": "被打败", + "defeatedTrainerDouble_female": "被组合打败", + "defeatedRival_female": "被劲敌打败", + "defeated_female": "被打败", "luck": "幸运", "score": "分数", "mode": "模式", @@ -30,8 +30,8 @@ "money": "金钱", "runLength": "游戏时长", "viewHeldItems": "持有道具", - "hallofFameTextM": "欢迎来到名人堂!", - "hallofFameTextF": "欢迎来到名人堂!", + "hallofFameText": "欢迎来到名人堂!", + "hallofFameText_female": "欢迎来到名人堂!", "viewHallOfFame": "浏览名人堂!", "viewEndingSplash": "浏览结算画面" } \ No newline at end of file diff --git a/src/locales/zh_TW/run-history.json b/src/locales/zh_TW/run-history.json index 2658fe341f4..76cb2592ce2 100644 --- a/src/locales/zh_TW/run-history.json +++ b/src/locales/zh_TW/run-history.json @@ -1,15 +1,15 @@ { "victory": "勝利!", - "defeatedWildM": "被打敗", - "defeatedTrainerM": "被打敗", - "defeatedTrainerDoubleM": "被組合打敗", - "defeatedRivalM": "被勁敵打敗", - "defeatedM": "被打敗", - "defeatedWildF": "被打敗", - "defeatedTrainerF": "被打敗", - "defeatedTrainerDoubleF": "被組合打敗", - "defeatedRivalF": "被勁敵打敗", - "defeatedF": "被打敗", + "defeatedWild": "被打敗", + "defeatedTrainer": "被打敗", + "defeatedTrainerDouble": "被組合打敗", + "defeatedRival": "被勁敵打敗", + "defeated": "被打敗", + "defeatedWild_female": "被打敗", + "defeatedTrainer_female": "被打敗", + "defeatedTrainerDouble_female": "被組合打敗", + "defeatedRival_female": "被勁敵打敗", + "defeated_female": "被打敗", "luck": "幸運", "score": "分數", "mode": "模式", @@ -30,8 +30,8 @@ "money": "金錢", "runLength": "遊戲時長", "viewHeldItems": "持有道具", - "hallofFameTextM": "歡迎來到名人堂!", - "hallofFameTextF": "歡迎來到名人堂!", + "hallofFameText": "歡迎來到名人堂!", + "hallofFameText_female": "歡迎來到名人堂!", "viewHallOfFame": "浏覽名人堂!", "viewEndingSplash": "浏覽結算畫面" } \ No newline at end of file diff --git a/src/ui/run-history-ui-handler.ts b/src/ui/run-history-ui-handler.ts index 253c49cd6ce..8f132a1ab1c 100644 --- a/src/ui/run-history-ui-handler.ts +++ b/src/ui/run-history-ui-handler.ts @@ -278,11 +278,12 @@ class RunEntryContainer extends Phaser.GameObjects.Container { const gameOutcomeLabel = addTextObject(this.scene, 8, 5, `${i18next.t("runHistory:victory")}`, TextStyle.WINDOW); this.add(gameOutcomeLabel); } else { // Run Result: Defeats - const genderLabel = (this.scene.gameData.gender === PlayerGender.FEMALE) ? "F" : "M"; + const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const genderStr = PlayerGender[genderIndex].toLowerCase(); // Defeats from wild Pokemon battles will show the Pokemon responsible by the text of the run result. if (data.battleType === BattleType.WILD) { const enemyContainer = this.scene.add.container(8, 5); - const gameOutcomeLabel = addTextObject(this.scene, 0, 0, `${i18next.t("runHistory:defeatedWild"+genderLabel)}`, TextStyle.WINDOW); + const gameOutcomeLabel = addTextObject(this.scene, 0, 0, `${i18next.t("runHistory:defeatedWild", { context: genderStr })}`, TextStyle.WINDOW); enemyContainer.add(gameOutcomeLabel); data.enemyParty.forEach((enemyData, e) => { const enemyIconContainer = this.scene.add.container(65+(e*25), -8); @@ -307,10 +308,10 @@ class RunEntryContainer extends Phaser.GameObjects.Container { const RIVAL_TRAINER_ID_THRESHOLD = 375; if (data.trainer.trainerType >= RIVAL_TRAINER_ID_THRESHOLD) { const rivalName = (tObj.variant === TrainerVariant.FEMALE) ? "trainerNames:rival_female" : "trainerNames:rival"; - const gameOutcomeLabel = addTextObject(this.scene, 8, 5, `${i18next.t("runHistory:defeatedRival"+genderLabel)} ${i18next.t(rivalName)}`, TextStyle.WINDOW); + const gameOutcomeLabel = addTextObject(this.scene, 8, 5, `${i18next.t("runHistory:defeatedRival", { context: genderStr })} ${i18next.t(rivalName)}`, TextStyle.WINDOW); this.add(gameOutcomeLabel); } else { - const gameOutcomeLabel = addTextObject(this.scene, 8, 5, `${i18next.t("runHistory:defeatedTrainer"+genderLabel)}${tObj.getName(0, true)}`, TextStyle.WINDOW); + const gameOutcomeLabel = addTextObject(this.scene, 8, 5, `${i18next.t("runHistory:defeatedTrainer", { context: genderStr })}${tObj.getName(0, true)}`, TextStyle.WINDOW); this.add(gameOutcomeLabel); } } diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 8a4d430a1b6..ff4ed919e75 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -42,7 +42,6 @@ enum RunInfoUiMode { export default class RunInfoUiHandler extends UiHandler { protected runInfo: SessionSaveData; protected isVictory: boolean; - protected isPGF: boolean; protected pageMode: RunInfoUiMode; protected runContainer: Phaser.GameObjects.Container; @@ -94,7 +93,6 @@ export default class RunInfoUiHandler extends UiHandler { // Assigning information necessary for the UI's creation this.runInfo = this.scene.gameData.parseSessionData(JSON.stringify(run.entry)); this.isVictory = run.isVictory; - this.isPGF = this.scene.gameData.gender === PlayerGender.FEMALE; this.pageMode = RunInfoUiMode.MAIN; // Creates Header and adds to this.runContainer @@ -173,8 +171,10 @@ export default class RunInfoUiHandler extends UiHandler { * */ private async parseRunResult() { + const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const genderStr = PlayerGender[genderIndex]; const runResultTextStyle = this.isVictory ? TextStyle.SUMMARY : TextStyle.SUMMARY_RED; - const runResultTitle = this.isVictory ? i18next.t("runHistory:victory") : (this.isPGF ? i18next.t("runHistory:defeatedF") : i18next.t("runHistory:defeatedM")); + const runResultTitle = this.isVictory ? i18next.t("runHistory:victory") : i18next.t("runHistory:defeated", { context: genderStr }); const runResultText = addBBCodeTextObject(this.scene, 6, 5, `${runResultTitle} - ${i18next.t("saveSlotSelectUiHandler:wave")} ${this.runInfo.waveIndex}`, runResultTextStyle, {fontSize : "65px", lineSpacing: 0.1}); if (this.isVictory) { @@ -684,7 +684,9 @@ export default class RunInfoUiHandler extends UiHandler { */ private createVictorySplash(): void { this.endCardContainer = this.scene.add.container(0, 0); - const endCard = this.scene.add.image(0, 0, `end_${this.isPGF ? "f" : "m"}`); + const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const isFemale = genderIndex === PlayerGender.FEMALE; + const endCard = this.scene.add.image(0, 0, `end_${isFemale ? "f" : "m"}`); endCard.setOrigin(0); endCard.setScale(0.5); const text = addTextObject(this.scene, this.scene.game.canvas.width / 12, (this.scene.game.canvas.height / 6) - 16, i18next.t("battle:congratulations"), TextStyle.SUMMARY, { fontSize: "128px" }); @@ -698,16 +700,19 @@ export default class RunInfoUiHandler extends UiHandler { * This could be adapted into a public-facing method for victory screens. Perhaps. */ private createHallofFame(): void { + const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const isFemale = genderIndex === PlayerGender.FEMALE; + const genderStr = PlayerGender[genderIndex].toLowerCase(); // Issue Note (08-05-2024): It seems as if fused pokemon do not appear with the averaged color b/c pokemonData's loadAsset requires there to be some active battle? // As an alternative, the icons of the second/bottom fused Pokemon have been placed next to their fellow fused Pokemon in Hall of Fame this.hallofFameContainer = this.scene.add.container(0, 0); // Thank you Hayuna for the code - const endCard = this.scene.add.image(0, 0, `end_${this.isPGF ? "f" : "m"}`); + const endCard = this.scene.add.image(0, 0, `end_${isFemale ? "f" : "m"}`); endCard.setOrigin(0); endCard.setPosition(-1, -1); endCard.setScale(0.5); const endCardCoords = endCard.getBottomCenter(); - const overlayColor = this.isPGF ? "red" : "blue"; + const overlayColor = isFemale ? "red" : "blue"; const hallofFameBg = this.scene.add.image(0, 0, "hall_of_fame_"+overlayColor); hallofFameBg.setPosition(159, 89); hallofFameBg.setSize(this.scene.game.canvas.width, this.scene.game.canvas.height+10); @@ -715,7 +720,7 @@ export default class RunInfoUiHandler extends UiHandler { this.hallofFameContainer.add(endCard); this.hallofFameContainer.add(hallofFameBg); - const hallofFameText = addTextObject(this.scene, 0, 0, i18next.t("runHistory:hallofFameText"+(this.isPGF ? "F" : "M")), TextStyle.WINDOW); + const hallofFameText = addTextObject(this.scene, 0, 0, i18next.t("runHistory:hallofFameText", { context: genderStr }), TextStyle.WINDOW); hallofFameText.setPosition(endCardCoords.x-(hallofFameText.displayWidth/2), 164); this.hallofFameContainer.add(hallofFameText); this.runInfo.party.forEach((p, i) => { From c742e99650d8391c45ceb73513793f56dcb6e365 Mon Sep 17 00:00:00 2001 From: "gitlocalize-app[bot]" <55277160+gitlocalize-app[bot]@users.noreply.github.com> Date: Thu, 29 Aug 2024 18:41:44 +0200 Subject: [PATCH 04/18] [Localization] [DE] Fix Lusamine Dialog spelling (#3880) * Translate dialogue-male.json via GitLocalize * Translate dialogue-female.json via GitLocalize * Update src/locales/de/dialogue-male.json * Update src/locales/de/dialogue-male.json --------- Co-authored-by: Jannik Tappert Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> --- src/locales/de/dialogue-female.json | 2 +- src/locales/de/dialogue-male.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/de/dialogue-female.json b/src/locales/de/dialogue-female.json index 2f80fc09eba..e5bcb81ce52 100644 --- a/src/locales/de/dialogue-female.json +++ b/src/locales/de/dialogue-female.json @@ -869,7 +869,7 @@ }, "aether_boss_lusamine_1": { "encounter": { - "1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Besiten sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen." + "1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Bestien sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen." }, "victory": { "1": "Wie kann eine Person nur so grausam sein?!" diff --git a/src/locales/de/dialogue-male.json b/src/locales/de/dialogue-male.json index 2f80fc09eba..e5bcb81ce52 100644 --- a/src/locales/de/dialogue-male.json +++ b/src/locales/de/dialogue-male.json @@ -869,7 +869,7 @@ }, "aether_boss_lusamine_1": { "encounter": { - "1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Besiten sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen." + "1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Bestien sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen." }, "victory": { "1": "Wie kann eine Person nur so grausam sein?!" From 4cea71c400393598cae46e62b910fb96218cca1c Mon Sep 17 00:00:00 2001 From: Blitzy <118096277+Blitz425@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:54:56 -0500 Subject: [PATCH 05/18] [Localization] Change a few Evil Admin lines to sound more coherent. (#3697) * Change a few lines of dialogue * Change line per request of Dertapp * Update dialogue.ts * Update src/locales/de/dialogue.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update ko locales * Apply suggestions from code review Co-authored-by: Asdar --------- Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: Asdar --- src/locales/en/dialogue-female.json | 2 +- src/locales/en/dialogue-male.json | 2 +- src/locales/ko/dialogue-female.json | 14 +++++++------- src/locales/ko/dialogue-male.json | 14 +++++++------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/locales/en/dialogue-female.json b/src/locales/en/dialogue-female.json index 9cd2c9a76b2..b58fbbb36ec 100644 --- a/src/locales/en/dialogue-female.json +++ b/src/locales/en/dialogue-female.json @@ -381,7 +381,7 @@ }, "archer": { "encounter": { - "1": "Before you go any further, let's see how you far against us, Team Rocket!", + "1": "Before you go any further, let's see how you fare against us, Team Rocket!", "2": "I have received reports that your skills are not insignificant. Let's see if they are true.", "3": "I am Archer, an Admin of Team Rocket. And I do not go easy on enemies of our organization." }, diff --git a/src/locales/en/dialogue-male.json b/src/locales/en/dialogue-male.json index 24d2139d3f3..ed4082f411e 100644 --- a/src/locales/en/dialogue-male.json +++ b/src/locales/en/dialogue-male.json @@ -381,7 +381,7 @@ }, "archer": { "encounter": { - "1": "Before you go any further, let's see how you far against us, Team Rocket!", + "1": "Before you go any further, let's see how you fare against us, Team Rocket!", "2": "I have received reports that your skills are not insignificant. Let's see if they are true.", "3": "I am Archer, an Admin of Team Rocket. And I do not go easy on enemies of our organization." }, diff --git a/src/locales/ko/dialogue-female.json b/src/locales/ko/dialogue-female.json index 1fdbfe7dfba..ab29bd85b3c 100644 --- a/src/locales/ko/dialogue-female.json +++ b/src/locales/ko/dialogue-female.json @@ -446,9 +446,9 @@ "3": "……애널라이즈 ……하고 싶어 ……아하하하♪" }, "victory": { - "1": "……바꿔줘 ……세계를", + "1": "……하아하아… ……으 …하아하아…", "2": "………예상대로 ………예상외 ………너 …………타깃 록 ………했으니까\n$……엑스페리먼트 ……할 테니까 ………너를………계속………아핫…♪", - "3": "……또 ……예상외 ………… ……역시 ……너…재미있어…! ………아하하…♪" + "3": "……예상외 ………… ……역시 ……너…재미있어…! ………아하하…♪" } }, "shelly": { @@ -465,14 +465,14 @@ }, "matt": { "encounter": { - "1": "후하하하하하! 뭐라 떠들고 있는 거야! 너 생긴 게 마크탕이랑 똑같네!", - "2": "음음! 네 녀석은! 재미있는 녀석!", - "3": "뭐야?! 우릴 따라온 거냐!" + "1": "…그래서 말이지, 리더님이 시간이 나실 때까진 내가 상대해 주마!", + "2": "후우하앗!! 맥시멈!! 끓어어!! 오르기 시작했다아아앗!!!!! 그래! 그래! 그래애앳!!! 힘이 다할 때까지 해보자아아!!!", + "3": "UPAAAAA!!! 짓뭉개주마아아아아!!" }, "victory": { - "1": "…그래서 말이지, 리더님이 시간이 나실 때까진 내가 상대해 주마!", + "1": "흐~하하하핫!!! 졌지만 즐거운 승부였다!", "2": "확 확 느껴지는데! 네놈들의 강함이 말이야!\n$제대로 붙었다고 하기엔 조금 모자라지만 이제 타임오버 같네…", - "3": "재밌는데!! 역시 재미있어! 넌! 또 붙게 될 때를 기대하고 있겠어!" + "3": "오우오웃! 흥분되는 패배로다!" } }, "mars": { diff --git a/src/locales/ko/dialogue-male.json b/src/locales/ko/dialogue-male.json index 11194ab6398..13fcd64a8d3 100644 --- a/src/locales/ko/dialogue-male.json +++ b/src/locales/ko/dialogue-male.json @@ -446,9 +446,9 @@ "3": "……애널라이즈 ……하고 싶어 ……아하하하♪" }, "victory": { - "1": "……바꿔줘 ……세계를", + "1": "……하아하아… ……으 …하아하아…", "2": "………예상대로 ………예상외 ………너 …………타깃 록 ………했으니까\n$……엑스페리먼트 ……할 테니까 ………너를………계속………아핫…♪", - "3": "……또 ……예상외 ………… ……역시 ……너…재미있어…! ………아하하…♪" + "3": "……예상외 ………… ……역시 ……너…재미있어…! ………아하하…♪" } }, "shelly": { @@ -465,14 +465,14 @@ }, "matt": { "encounter": { - "1": "후하하하하하! 뭐라 떠들고 있는 거야! 너 생긴 게 마크탕이랑 똑같네!", - "2": "음음! 네 녀석은! 재미있는 녀석!", - "3": "뭐야?! 우릴 따라온 거냐!" + "1": "…그래서 말이지, 리더님이 시간이 나실 때까진 내가 상대해 주마!", + "2": "후우하앗!! 맥시멈!! 끓어어!! 오르기 시작했다아아앗!!!!! 그래! 그래! 그래애앳!!! 힘이 다할 때까지 해보자아아!!!", + "3": "UPAAAAA!!! 짓뭉개주마아아아아!!" }, "victory": { - "1": "…그래서 말이지, 리더님이 시간이 나실 때까진 내가 상대해 주마!", + "1": "흐~하하하핫!!! 졌지만 즐거운 승부였다!", "2": "확 확 느껴지는데! 네놈들의 강함이 말이야!\n$제대로 붙었다고 하기엔 조금 모자라지만 이제 타임오버 같네…", - "3": "재밌는데!! 역시 재미있어! 넌! 또 붙게 될 때를 기대하고 있겠어!" + "3": "오우오웃! 흥분되는 패배로다!" } }, "mars": { From 0d7c335cd93e0263f53f3c798314b75194eb67f6 Mon Sep 17 00:00:00 2001 From: Jason Guan <114308729+34jasonguan@users.noreply.github.com> Date: Thu, 29 Aug 2024 13:00:58 -0400 Subject: [PATCH 06/18] [Bug] Make Destiny Bond fail when used consecutively in accordance with Gen VII+ implementation (#3504) * make destiny bond fail on consecutive turns * Update move.ts to remove .length shorthand Co-authored-by: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> * change 'turnMove' variable name Co-authored-by: Mumble <171087428+frutescens@users.noreply.github.com> * update variable names Co-authored-by: Mumble <171087428+frutescens@users.noreply.github.com> * add comments * Replace tabs with spaces --------- Co-authored-by: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> Co-authored-by: Mumble <171087428+frutescens@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/move.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 40016b26ab7..c8043282b00 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -3,7 +3,7 @@ import { BattleStat, getBattleStatName } from "./battle-stat"; import { EncoreTag, GulpMissileTag, HelpingHandTag, SemiInvulnerableTag, ShellTrapTag, StockpilingTag, TrappedTag, TypeBoostTag } from "./battler-tags"; import { getPokemonNameWithAffix } from "../messages"; import Pokemon, { AttackMoveResult, EnemyPokemon, HitResult, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "../field/pokemon"; -import { StatusEffect, getStatusEffectHealText, isNonVolatileStatusEffect, getNonVolatileStatusEffects} from "./status-effect"; +import { StatusEffect, getStatusEffectHealText, isNonVolatileStatusEffect, getNonVolatileStatusEffects } from "./status-effect"; import { getTypeResistances, Type } from "./type"; import { Constructor } from "#app/utils"; import * as Utils from "../utils"; @@ -6854,7 +6854,16 @@ export function initMoves() { .attr(ExposedMoveAttr, BattlerTagType.IGNORE_GHOST), new SelfStatusMove(Moves.DESTINY_BOND, Type.GHOST, -1, 5, -1, 0, 2) .ignoresProtect() - .attr(DestinyBondAttr), + .attr(DestinyBondAttr) + .condition((user, target, move) => { + // Retrieves user's previous move, returns empty array if no moves have been used + const lastTurnMove = user.getLastXMoves(1); + // Checks last move and allows destiny bond to be used if: + // - no previous moves have been made + // - the previous move used was not destiny bond + // - the previous move was unsuccessful + return lastTurnMove.length === 0 || lastTurnMove[0].move !== move.id || lastTurnMove[0].result !== MoveResult.SUCCESS; + }), new StatusMove(Moves.PERISH_SONG, Type.NORMAL, -1, 5, -1, 0, 2) .attr(FaintCountdownAttr) .ignoresProtect() From 968c4ce3e6e7d5cdcddea0e2aced40a2c84e5bb9 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Thu, 29 Aug 2024 10:17:40 -0700 Subject: [PATCH 07/18] [Localization] Use gender context for dialogues (all 3 files) (#3879) * merge dialogue files into single files No more -male, -female. Rather using context * adopt changes from #3697 --- src/locales/ca_ES/config.ts | 24 +- ...emale.json => dialogue-double-battle.json} | 0 ...tle-male.json => dialogue-final-boss.json} | 0 ...ialogue-female.json => dialogue-misc.json} | 0 ...e-final-boss-female.json => dialogue.json} | 0 src/locales/de/config.ts | 24 +- .../de/dialogue-double-battle-male.json | 82 - ...emale.json => dialogue-double-battle.json} | 0 src/locales/de/dialogue-final-boss-male.json | 4 - ...s-female.json => dialogue-final-boss.json} | 0 src/locales/de/dialogue-male.json | 2691 ----------------- src/locales/de/dialogue-misc-male.json | 6 - ...ue-misc-female.json => dialogue-misc.json} | 0 .../{dialogue-female.json => dialogue.json} | 0 src/locales/en/config.ts | 24 +- .../en/dialogue-double-battle-male.json | 82 - ...emale.json => dialogue-double-battle.json} | 6 +- src/locales/en/dialogue-female.json | 2691 ----------------- src/locales/en/dialogue-final-boss-male.json | 5 - ...s-female.json => dialogue-final-boss.json} | 1 + src/locales/en/dialogue-misc-male.json | 6 - ...ue-misc-female.json => dialogue-misc.json} | 0 .../en/{dialogue-male.json => dialogue.json} | 268 +- src/locales/es/config.ts | 24 +- .../dialogue-double-battle.json} | 0 .../dialogue-final-boss.json} | 0 src/locales/es/dialogue-male.json | 52 - .../dialogue-misc.json} | 0 .../{dialogue-female.json => dialogue.json} | 0 src/locales/fr/config.ts | 24 +- .../fr/dialogue-double-battle-female.json | 82 - ...-male.json => dialogue-double-battle.json} | 3 +- src/locales/fr/dialogue-female.json | 577 ---- .../fr/dialogue-final-boss-female.json | 5 - ...oss-male.json => dialogue-final-boss.json} | 1 + src/locales/fr/dialogue-misc-male.json | 4 - ...ue-misc-female.json => dialogue-misc.json} | 0 .../fr/{dialogue-male.json => dialogue.json} | 27 +- src/locales/it/config.ts | 24 +- .../it/dialogue-double-battle-male.json | 1 - .../dialogue-double-battle.json} | 0 src/locales/it/dialogue-female.json | 1 - .../it/dialogue-final-boss-female.json | 1 - src/locales/it/dialogue-final-boss-male.json | 1 - .../dialogue-final-boss.json} | 0 src/locales/it/dialogue-male.json | 1 - src/locales/it/dialogue-misc-female.json | 1 - src/locales/it/dialogue-misc-male.json | 1 - .../dialogue-misc.json} | 0 .../dialogue.json} | 0 src/locales/ja/config.ts | 24 +- .../ja/dialogue-double-battle-female.json | 1 - .../ja/dialogue-double-battle-male.json | 1 - .../dialogue-double-battle.json} | 0 src/locales/ja/dialogue-female.json | 1 - .../ja/dialogue-final-boss-female.json | 1 - src/locales/ja/dialogue-final-boss-male.json | 1 - .../dialogue-final-boss.json} | 0 src/locales/ja/dialogue-male.json | 1 - src/locales/ja/dialogue-misc-female.json | 1 - src/locales/ja/dialogue-misc-male.json | 1 - .../dialogue-misc.json} | 0 .../dialogue.json} | 0 src/locales/ko/config.ts | 24 +- .../ko/dialogue-double-battle-male.json | 82 - ...emale.json => dialogue-double-battle.json} | 0 src/locales/ko/dialogue-female.json | 2691 ----------------- src/locales/ko/dialogue-final-boss-male.json | 5 - ...s-female.json => dialogue-final-boss.json} | 0 src/locales/ko/dialogue-misc-male.json | 6 - ...ue-misc-female.json => dialogue-misc.json} | 0 .../ko/{dialogue-male.json => dialogue.json} | 0 src/locales/pt_BR/config.ts | 24 +- .../pt_BR/dialogue-double-battle-female.json | 82 - ...-male.json => dialogue-double-battle.json} | 3 +- src/locales/pt_BR/dialogue-female.json | 2691 ----------------- .../pt_BR/dialogue-final-boss-female.json | 5 - ...oss-male.json => dialogue-final-boss.json} | 1 + src/locales/pt_BR/dialogue-misc-female.json | 6 - ...ogue-misc-male.json => dialogue-misc.json} | 0 .../{dialogue-male.json => dialogue.json} | 258 +- src/locales/zh_CN/config.ts | 24 +- .../zh_CN/dialogue-double-battle-male.json | 82 - ...emale.json => dialogue-double-battle.json} | 0 .../zh_CN/dialogue-final-boss-male.json | 5 - ...s-female.json => dialogue-final-boss.json} | 0 src/locales/zh_CN/dialogue-male.json | 2691 ----------------- src/locales/zh_CN/dialogue-misc-male.json | 4 - ...ue-misc-female.json => dialogue-misc.json} | 0 .../{dialogue-female.json => dialogue.json} | 0 src/locales/zh_TW/config.ts | 24 +- .../zh_TW/dialogue-double-battle-male.json | 82 - ...emale.json => dialogue-double-battle.json} | 0 .../zh_TW/dialogue-final-boss-male.json | 5 - ...s-female.json => dialogue-final-boss.json} | 0 src/locales/zh_TW/dialogue-male.json | 2137 ------------- src/locales/zh_TW/dialogue-misc-male.json | 4 - ...ue-misc-female.json => dialogue-misc.json} | 0 .../{dialogue-female.json => dialogue.json} | 0 src/phases/encounter-phase.ts | 4 +- src/ui/ui.ts | 45 +- 101 files changed, 526 insertions(+), 17235 deletions(-) rename src/locales/ca_ES/{dialogue-double-battle-female.json => dialogue-double-battle.json} (100%) rename src/locales/ca_ES/{dialogue-double-battle-male.json => dialogue-final-boss.json} (100%) rename src/locales/ca_ES/{dialogue-female.json => dialogue-misc.json} (100%) rename src/locales/ca_ES/{dialogue-final-boss-female.json => dialogue.json} (100%) delete mode 100644 src/locales/de/dialogue-double-battle-male.json rename src/locales/de/{dialogue-double-battle-female.json => dialogue-double-battle.json} (100%) delete mode 100644 src/locales/de/dialogue-final-boss-male.json rename src/locales/de/{dialogue-final-boss-female.json => dialogue-final-boss.json} (100%) delete mode 100644 src/locales/de/dialogue-male.json delete mode 100644 src/locales/de/dialogue-misc-male.json rename src/locales/de/{dialogue-misc-female.json => dialogue-misc.json} (100%) rename src/locales/de/{dialogue-female.json => dialogue.json} (100%) delete mode 100644 src/locales/en/dialogue-double-battle-male.json rename src/locales/en/{dialogue-double-battle-female.json => dialogue-double-battle.json} (95%) delete mode 100644 src/locales/en/dialogue-female.json delete mode 100644 src/locales/en/dialogue-final-boss-male.json rename src/locales/en/{dialogue-final-boss-female.json => dialogue-final-boss.json} (96%) delete mode 100644 src/locales/en/dialogue-misc-male.json rename src/locales/en/{dialogue-misc-female.json => dialogue-misc.json} (100%) rename src/locales/en/{dialogue-male.json => dialogue.json} (95%) rename src/locales/{ca_ES/dialogue-final-boss-male.json => es/dialogue-double-battle.json} (100%) rename src/locales/{ca_ES/dialogue-male.json => es/dialogue-final-boss.json} (100%) delete mode 100644 src/locales/es/dialogue-male.json rename src/locales/{ca_ES/dialogue-misc-female.json => es/dialogue-misc.json} (100%) rename src/locales/es/{dialogue-female.json => dialogue.json} (100%) delete mode 100644 src/locales/fr/dialogue-double-battle-female.json rename src/locales/fr/{dialogue-double-battle-male.json => dialogue-double-battle.json} (94%) delete mode 100644 src/locales/fr/dialogue-female.json delete mode 100644 src/locales/fr/dialogue-final-boss-female.json rename src/locales/fr/{dialogue-final-boss-male.json => dialogue-final-boss.json} (55%) delete mode 100644 src/locales/fr/dialogue-misc-male.json rename src/locales/fr/{dialogue-misc-female.json => dialogue-misc.json} (100%) rename src/locales/fr/{dialogue-male.json => dialogue.json} (95%) delete mode 100644 src/locales/it/dialogue-double-battle-male.json rename src/locales/{ca_ES/dialogue-misc-male.json => it/dialogue-double-battle.json} (100%) delete mode 100644 src/locales/it/dialogue-female.json delete mode 100644 src/locales/it/dialogue-final-boss-female.json delete mode 100644 src/locales/it/dialogue-final-boss-male.json rename src/locales/{es/dialogue-double-battle-female.json => it/dialogue-final-boss.json} (100%) delete mode 100644 src/locales/it/dialogue-male.json delete mode 100644 src/locales/it/dialogue-misc-female.json delete mode 100644 src/locales/it/dialogue-misc-male.json rename src/locales/{es/dialogue-double-battle-male.json => it/dialogue-misc.json} (100%) rename src/locales/{es/dialogue-final-boss-female.json => it/dialogue.json} (100%) delete mode 100644 src/locales/ja/dialogue-double-battle-female.json delete mode 100644 src/locales/ja/dialogue-double-battle-male.json rename src/locales/{es/dialogue-final-boss-male.json => ja/dialogue-double-battle.json} (100%) delete mode 100644 src/locales/ja/dialogue-female.json delete mode 100644 src/locales/ja/dialogue-final-boss-female.json delete mode 100644 src/locales/ja/dialogue-final-boss-male.json rename src/locales/{es/dialogue-misc-female.json => ja/dialogue-final-boss.json} (100%) delete mode 100644 src/locales/ja/dialogue-male.json delete mode 100644 src/locales/ja/dialogue-misc-female.json delete mode 100644 src/locales/ja/dialogue-misc-male.json rename src/locales/{es/dialogue-misc-male.json => ja/dialogue-misc.json} (100%) rename src/locales/{it/dialogue-double-battle-female.json => ja/dialogue.json} (100%) delete mode 100644 src/locales/ko/dialogue-double-battle-male.json rename src/locales/ko/{dialogue-double-battle-female.json => dialogue-double-battle.json} (100%) delete mode 100644 src/locales/ko/dialogue-female.json delete mode 100644 src/locales/ko/dialogue-final-boss-male.json rename src/locales/ko/{dialogue-final-boss-female.json => dialogue-final-boss.json} (100%) delete mode 100644 src/locales/ko/dialogue-misc-male.json rename src/locales/ko/{dialogue-misc-female.json => dialogue-misc.json} (100%) rename src/locales/ko/{dialogue-male.json => dialogue.json} (100%) delete mode 100644 src/locales/pt_BR/dialogue-double-battle-female.json rename src/locales/pt_BR/{dialogue-double-battle-male.json => dialogue-double-battle.json} (93%) delete mode 100644 src/locales/pt_BR/dialogue-female.json delete mode 100644 src/locales/pt_BR/dialogue-final-boss-female.json rename src/locales/pt_BR/{dialogue-final-boss-male.json => dialogue-final-boss.json} (55%) delete mode 100644 src/locales/pt_BR/dialogue-misc-female.json rename src/locales/pt_BR/{dialogue-misc-male.json => dialogue-misc.json} (100%) rename src/locales/pt_BR/{dialogue-male.json => dialogue.json} (87%) delete mode 100644 src/locales/zh_CN/dialogue-double-battle-male.json rename src/locales/zh_CN/{dialogue-double-battle-female.json => dialogue-double-battle.json} (100%) delete mode 100644 src/locales/zh_CN/dialogue-final-boss-male.json rename src/locales/zh_CN/{dialogue-final-boss-female.json => dialogue-final-boss.json} (100%) delete mode 100644 src/locales/zh_CN/dialogue-male.json delete mode 100644 src/locales/zh_CN/dialogue-misc-male.json rename src/locales/zh_CN/{dialogue-misc-female.json => dialogue-misc.json} (100%) rename src/locales/zh_CN/{dialogue-female.json => dialogue.json} (100%) delete mode 100644 src/locales/zh_TW/dialogue-double-battle-male.json rename src/locales/zh_TW/{dialogue-double-battle-female.json => dialogue-double-battle.json} (100%) delete mode 100644 src/locales/zh_TW/dialogue-final-boss-male.json rename src/locales/zh_TW/{dialogue-final-boss-female.json => dialogue-final-boss.json} (100%) delete mode 100644 src/locales/zh_TW/dialogue-male.json delete mode 100644 src/locales/zh_TW/dialogue-misc-male.json rename src/locales/zh_TW/{dialogue-misc-female.json => dialogue-misc.json} (100%) rename src/locales/zh_TW/{dialogue-female.json => dialogue.json} (100%) diff --git a/src/locales/ca_ES/config.ts b/src/locales/ca_ES/config.ts index 514c7fb63c7..4d8f6c9dc59 100644 --- a/src/locales/ca_ES/config.ts +++ b/src/locales/ca_ES/config.ts @@ -15,14 +15,10 @@ import bgmName from "./bgm-name.json"; import biome from "./biome.json"; import challenges from "./challenges.json"; import commandUiHandler from "./command-ui-handler.json"; -import dialogueMale from "./dialogue-male.json"; -import dialogueFemale from "./dialogue-female.json"; -import dialogueEndbossMale from "./dialogue-final-boss-male.json"; -import dialogueEndbossFemale from "./dialogue-final-boss-female.json"; -import dialogueMiscMale from "./dialogue-misc-male.json"; -import dialogueMiscFemale from "./dialogue-misc-female.json"; -import dialogueDoubleBattleMale from "./dialogue-double-battle-male.json"; -import dialogueDoubleBattleFemale from "./dialogue-double-battle-female.json"; +import dialogue from "./dialogue.json"; +import battleSpecDialogue from "./dialogue-final-boss.json"; +import miscDialogue from "./dialogue-misc.json"; +import doubleBattleDialogue from "./dialogue-double-battle.json"; import egg from "./egg.json"; import fightUiHandler from "./fight-ui-handler.json"; import filterBar from "./filter-bar.json"; @@ -76,14 +72,10 @@ export const caEsConfig = { commandUiHandler, common, achv, - PGMdialogue: dialogueMale, - PGFdialogue: dialogueFemale, - PGMbattleSpecDialogue: dialogueEndbossMale, - PGFbattleSpecDialogue: dialogueEndbossFemale, - PGMmiscDialogue: dialogueMiscMale, - PGFmiscDialogue: dialogueMiscFemale, - PGMdoubleBattleDialogue: dialogueDoubleBattleMale, - PGFdoubleBattleDialogue: dialogueDoubleBattleFemale, + dialogue, + battleSpecDialogue, + miscDialogue, + doubleBattleDialogue, egg, fightUiHandler, filterBar, diff --git a/src/locales/ca_ES/dialogue-double-battle-female.json b/src/locales/ca_ES/dialogue-double-battle.json similarity index 100% rename from src/locales/ca_ES/dialogue-double-battle-female.json rename to src/locales/ca_ES/dialogue-double-battle.json diff --git a/src/locales/ca_ES/dialogue-double-battle-male.json b/src/locales/ca_ES/dialogue-final-boss.json similarity index 100% rename from src/locales/ca_ES/dialogue-double-battle-male.json rename to src/locales/ca_ES/dialogue-final-boss.json diff --git a/src/locales/ca_ES/dialogue-female.json b/src/locales/ca_ES/dialogue-misc.json similarity index 100% rename from src/locales/ca_ES/dialogue-female.json rename to src/locales/ca_ES/dialogue-misc.json diff --git a/src/locales/ca_ES/dialogue-final-boss-female.json b/src/locales/ca_ES/dialogue.json similarity index 100% rename from src/locales/ca_ES/dialogue-final-boss-female.json rename to src/locales/ca_ES/dialogue.json diff --git a/src/locales/de/config.ts b/src/locales/de/config.ts index afefd98a0cb..772bfb6d1d5 100644 --- a/src/locales/de/config.ts +++ b/src/locales/de/config.ts @@ -15,14 +15,10 @@ import bgmName from "./bgm-name.json"; import biome from "./biome.json"; import challenges from "./challenges.json"; import commandUiHandler from "./command-ui-handler.json"; -import dialogueMale from "./dialogue-male.json"; -import dialogueFemale from "./dialogue-female.json"; -import dialogueEndbossMale from "./dialogue-final-boss-male.json"; -import dialogueEndbossFemale from "./dialogue-final-boss-female.json"; -import dialogueMiscMale from "./dialogue-misc-male.json"; -import dialogueMiscFemale from "./dialogue-misc-female.json"; -import dialogueDoubleBattleMale from "./dialogue-double-battle-male.json"; -import dialogueDoubleBattleFemale from "./dialogue-double-battle-female.json"; +import dialogue from "./dialogue.json"; +import battleSpecDialogue from "./dialogue-final-boss.json"; +import miscDialogue from "./dialogue-misc.json"; +import doubleBattleDialogue from "./dialogue-double-battle.json"; import egg from "./egg.json"; import fightUiHandler from "./fight-ui-handler.json"; import filterBar from "./filter-bar.json"; @@ -76,14 +72,10 @@ export const deConfig = { commandUiHandler, common, achv, - PGMdialogue: dialogueMale, - PGFdialogue: dialogueFemale, - PGMbattleSpecDialogue: dialogueEndbossMale, - PGFbattleSpecDialogue: dialogueEndbossFemale, - PGMmiscDialogue: dialogueMiscMale, - PGFmiscDialogue: dialogueMiscFemale, - PGMdoubleBattleDialogue: dialogueDoubleBattleMale, - PGFdoubleBattleDialogue: dialogueDoubleBattleFemale, + dialogue, + battleSpecDialogue, + miscDialogue, + doubleBattleDialogue, egg, fightUiHandler, filterBar, diff --git a/src/locales/de/dialogue-double-battle-male.json b/src/locales/de/dialogue-double-battle-male.json deleted file mode 100644 index ec7cf375c0c..00000000000 --- a/src/locales/de/dialogue-double-battle-male.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "blue_red_double": { - "encounter": { - "1": "Blau: Hey Rot, lass uns ihnen zeigen, was wir drauf haben!\n$Rot: ...\n$Blau: Das ist die Macht von Alabastia!" - }, - "victory": { - "1": "Blau: Das war ein großartiger Kampf!\n$Rot: ..." - } - }, - "red_blue_double": { - "encounter": { - "1": "Rot: ...!\n$Blau: Er redet nicht viel...\n$Blau: Aber lass dich davon nicht täuschen! Er ist schließlich ein Champ!" - }, - "victory": { - "1": "Rot: ...!\n$Blau: Das nächste Mal gewinnen wir!" - } - }, - "tate_liza_double": { - "encounter": { - "1": "Ben: Hehehe...Bist du überrascht?\n$Svenja: Wir sind zwei Arenaleiter auf einmal!\n$Ben: Wir sind Zwillinge!\n$Svenja: Wir müssen nicht reden um uns gegenseitig zu verstehen!\n$Ben: Die doppelte Kraft...\n$Svenja: Kannst du ihr standhalten?" - }, - "victory": { - "1": "Ben: Was? Unsere Kombination war perfekt!\n$Svenja: Sieht so aus als müssten wir wohl mehr tranieren..." - } - }, - "liza_tate_double": { - "encounter": { - "1": "Svenja: Hihihi... Bist du überrascht?\n$Ben: Ja, wir sind wirklich zwei Arenaleiter auf einmal!\n$Svenja: Das ist mein Zwillingsbruder Ben!\n$Ben: Und das meine Zwillingsschwester Svenja!\n$Svenja: Wir sind die perfekte Kombo!" - }, - "victory": { - "1": "Svenja: Sind wir...\n$Ben: ...nicht so stark wie wir dachten?" - } - }, - "wallace_steven_double": { - "encounter": { - "1": "Troy: Wassili, lass uns ihnen die Kraft von Champions zeigen!\n$Wassili: Wir zeigen dir die Kraft von Hoenn!\n$Troy: Los gehts!" - }, - "victory": { - "1": "Troy: Das war ein großartiger Kampf!\n$Wassili: Das nächste Mal gewinnen wir!" - } - }, - "steven_wallace_double": { - "encounter": { - "1": "Troy: Hast du irgendwelche seltenen Pokémon?\n$Wassili: Troy... Wir sind hier um zu kämpfen und nicht um mit unseren Pokémon zu prahlen...\n$Troy: Oh... Wenn das so ist... Lass uns anfangen!" - }, - "victory": { - "1": "Troy: Jetzt da wir mit Kämpfen fertig sind... Lass uns mit unsereren Pokémon prahlen!\n$Wassili: Troy..." - } - }, - "alder_iris_double": { - "encounter": { - "1": "Lauro: Wir sind die stärksten Trainer aus Einall!\n$Lilia: Kämpfe gegen starke Trainer machen am meisten Spaß!" - }, - "victory": { - "1": "Lauro: Wow! Du bist super stark!\n$Lilia: Beim nächsten Mal schlagen wir dich!" - } - }, - "iris_alder_double": { - "encounter": { - "1": "Lilia: Willkommen Herausforderer! Ich bin DER Champion von Einall!\n$Lauro: Lilia, bist du nicht etwas zu aufgeregt?" - }, - "victory": { - "1": "Lilia: Eine solche Niederlage ist nicht einfach zu verkraften...\n$Lauro: Aber wir wachsen an unseren Niederlagen und werden immer besser!" - } - }, - "marnie_piers_double": { - "encounter": { - "1": "Mary: Bruder, lass uns ihnen die Kraft von Spikeford zeigen!\n$Nezz: Wir bringen die Dunkelheit!" - }, - "victory": { - "1": "Mary: Du hast Licht in unsere Dunkelheit gebracht!\n$Piers: Es ist viel zu hell..." - } - }, - "piers_marnie_double": { - "encounter": { - "1": "Nezz: Bereit für ein Konzert?\n$Mary: Bruder...Sie sind hier um zu kämpfen, nicht um zu singen..." - }, - "victory": { - "1": "Nezz: Das war mal ein großartiges Konzert!\n$Marnie: Bruder..." - } - } -} \ No newline at end of file diff --git a/src/locales/de/dialogue-double-battle-female.json b/src/locales/de/dialogue-double-battle.json similarity index 100% rename from src/locales/de/dialogue-double-battle-female.json rename to src/locales/de/dialogue-double-battle.json diff --git a/src/locales/de/dialogue-final-boss-male.json b/src/locales/de/dialogue-final-boss-male.json deleted file mode 100644 index bffbd779be0..00000000000 --- a/src/locales/de/dialogue-final-boss-male.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "encounter": "Es scheint, als wäre es wieder mal an der Zeit.\nDu weißt, warum du hierher kommen musst, oder?\n$Dich hat es hierher gezogen, du warst bereits hier.\nUnzählige Male.\n$Obwohl, vielleicht doch nicht unzählig.\nUm genau zu sein, dies ist der {{cycleCount}}te Zyklus.\n$Du verlierst jeden Zyklus dein Gedächtnis. Trotzdem \nbleibt etwas, ein Teil deines ehemaligen Ichs, erhalten.\n$Bis jetzt hast du es noch nicht vollbracht zu siegen, aber dieses Mal spüre ich eine andere Präsenz in dir.\n\n$Du bist der Einzige hier, aber es kommt mir so vor als wäre da...jemand anderes.\n$Wirst du endlich beweisen, dass du ein würdiger Herausforder bist?\nDie Herausforderung auf die ich seit Jahrtausenden warte?\n$Lass uns beginnen.","firstStageWin": "Ahh verstehe. Diese Präsenz, die ich gespürt habe, ist wirklich real.\nEs scheint als müsste ich micht nicht länger zurück halten.\n$Enttäusche mich nicht.", - "secondStageWin": "…Herrlich." -} \ No newline at end of file diff --git a/src/locales/de/dialogue-final-boss-female.json b/src/locales/de/dialogue-final-boss.json similarity index 100% rename from src/locales/de/dialogue-final-boss-female.json rename to src/locales/de/dialogue-final-boss.json diff --git a/src/locales/de/dialogue-male.json b/src/locales/de/dialogue-male.json deleted file mode 100644 index e5bcb81ce52..00000000000 --- a/src/locales/de/dialogue-male.json +++ /dev/null @@ -1,2691 +0,0 @@ -{ - "youngster": { - "encounter": { - "1": "Hey, willst du kämpfen?", - "2": "Bist du auch ein neuer Trainer?", - "3": "Hey, ich habe dich noch nie gesehen. Lass uns kämpfen!", - "4": "Ich habe gerade verloren und suche nach neuen Pokémon.\nWarte! Du siehst schwach aus! Lass uns kämpfen!", - "5": "Haben wir uns schon mal getroffen oder nicht? Ich erinnere mich nicht wirklich\n$Nun, ich denke, es ist trotzdem schön, dich zu treffen!", - "6": "Okay, lass uns kämpfen!", - "7": "Okay, hier komme ich! Ich zeige dir meine Kraft!", - "8": "Fan fan fan... Ich zeige dir wie fantastisch meine Pokémon sind!", - "9": "Es ist nicht nötig, Zeit mit Begrüßungen zu verschwenden.\nSobald du bereit bist geht es los!", - "10": "Lass deine Deckung nicht fallen, sonst weinst du, wenn dich ein Kind besiegt.", - "11": "Ich habe meine Pokémon mit großer Sorgfalt aufgezogen. Du darfst ihnen nicht wehtun!", - "12": "Schön, dass du es geschafft hast! Von hier an wird es nicht einfacher.", - "13": "Die Kämpfe gehen immer weiter! Willkommen in der Welt ohne Ende!" - }, - "victory": { - "1": "Wow! Du bist stark!", - "2": "Ich hatte keine Chance, oder?", - "3": "Wenn ich älter bin, werde ich dich besiegen!", - "4": "Ugh. Ich habe keine Pokémon mehr.", - "5": "Das kann nicht sein… DAS KANN NICHT SEIN! Wie konnte ich schon wieder verlieren…", - "6": "Nein! Ich habe verloren!", - "7": "Wow! Du bist unglaublich! Ich bin erstaunt und überrascht!", - "8": "Kann es sein… Wie… Meine Pokémon und ich sind die stärksten, aber…", - "9": "Das nächste Mal werde ich dich besiegen! Lass uns wieder kämpfen!", - "10": "Man! Kannst du nicht sehen, dass ich nur ein Kind bin? Es war nicht fair von dir, so hart zu kämpfen!", - "11": "Deine Pokémon sind unglaublich! Tauschst du mit mir?", - "12": "Ich habe mich ein bisschen mitreißen lassen, worüber habe ich vorhin gesprochen?", - "13": "Ahaha! Da ist es! Genau! Du bist schon jetzt in dieser Welt zu Hause!" - } - }, - "lass": { - "encounter": { - "1": "Lass uns kämpfen, wollen wir?", - "2": "Du siehst wie ein neuer Trainer aus. Lass uns kämpfen!", - "3": "Ich erkenne dich nicht. Wie wäre es mit einem Kampf?", - "4": "Lass uns einen lustigen Pokémon-Kampf haben!", - "5": "Ich zeige dir, wie man Pokémon wirklich einsetzt!", - "6": "Ein ernsthafter Kampf beginnt mit einem ernsten Anfang! Bist du sicher, dass du bereit bist?", - "7": "Du bist nur einmal jung. Und du hast nur eine Chance bei einem bestimmten Kampf.\n$Bald wirst du nur noch eine Erinnerung sein.", - "8": "Du solltest es leicht mit mir angehen, OK? Aber ich kämpfe ernsthaft!", - "9": "Die Schule ist langweilig. Ich habe nichts zu tun. Gähn. Ich kämpfe nur, um die Zeit totzuschlagen." - }, - "victory": { - "1": "Das war beeindruckend! Ich habe noch viel zu lernen.", - "2": "Ich dachte nicht, dass du mich so schlagen würdest…", - "3": "Ich hoffe, wir haben eines Tages ein Rematch.", - "4": "Das war ziemlich erstaunlich! Du hast mich total erschöpft…", - "5": "Du hast mir tatsächlich eine Lektion erteilt! Du bist ziemlich erstaunlich!", - "6": "Ernsthaft, ich habe verloren. Das ist, wie, ernsthaft deprimierend, aber du warst ernsthaft cool.", - "7": "Ich brauche keine Erinnerungen wie diese. Löschen der Erinnerung…", - "8": "Hey! Ich habe dir gesagt, du sollst es leicht mit mir angehen!\n$Trotzdem bist du ziemlich cool, wenn du ernsthaft bist.", - "9": "Ich werde langsam müde vom Kämpfen… Es muss etwas Neues zu tun geben…" - } - }, - "breeder": { - "encounter": { - "1": "Gehorsame Pokémon, eigensinnige Pokémon… Pokémon haben einzigartige Eigenschaften.", - "2": "Auch wenn meine Erziehung und mein Verhalten schlecht sind, habe ich meine Pokémon gut aufgezogen.", - "3": "Hmm, disziplinierst du deine Pokémon? Zu viel Verwöhnen ist nicht gut." - }, - "victory": { - "1": "Es ist wichtig, die Eigenschaften jedes Pokémon zu pflegen und zu trainieren.", - "2": "Im Gegensatz zu meinem teuflischen Selbst sind dies einige gute Pokémon.", - "3": "Zu viel Lob kann sowohl Pokémon als auch Menschen verwöhnen." - }, - "defeat": { - "1": "Du solltest nicht wütend auf deine Pokémon werden, auch wenn du einen Kampf verlierst.", - "2": "Richtig? Ziemlich gute Pokémon, oder? Ich bin dafür geeignet, Dinge großzuziehen.", - "3": "Egal wie sehr du deine Pokémon liebst,\n$du musst sie trotzdem disziplinieren, wenn sie sich schlecht benehmen." - } - }, - "breeder_female": { - "encounter": { - "1": "Pokémon verraten dich nie. Sie erwidern die ganze Liebe, die du ihnen gibst.", - "2": "Soll ich dir einen Tipp geben, wie man gute Pokémon trainiert?", - "3": "Ich habe diese sehr speziellen Pokémon mit einer speziellen Methode aufgezogen." - }, - "victory": { - "1": "Ugh… So sollte das nicht laufen. Habe ich die falsche Mischung verabreicht?", - "2": "Wie konnte das meinen Pokémon passieren… Was fütterst du deine Pokémon?", - "3": "Wenn ich verliere, sagt dir das, dass ich nur die Zeit totgeschlagen habe.\n$Es verletzt mein Ego überhaupt nicht." - }, - "defeat": { - "1": "Das beweist, dass meine Pokémon meine Liebe angenommen haben.", - "2": "Der wahre Trick, um gute Pokémon zu trainieren, besteht darin, gute Pokémon zu fangen.", - "3": "Pokémon werden stark oder schwach, je nachdem, wie du sie großziehst." - } - }, - "fisherman": { - "encounter": { - "1": "Aack! Du hast mich einen Biss verlieren lassen!\nWas wirst du dagegen tun?", - "2": "Geh weg! Du erschreckst die Pokémon!", - "3": "Mal sehen, ob du einen Sieg an Land ziehen kannst!" - }, - "victory": { - "1": "Vergiss es einfach.", - "2": "Nächstes Mal werde ich den Triumph an Land ziehen!", - "3": "Ich glaube, ich habe die Strömungen diesmal unterschätzt." - } - }, - "fisherman_female": { - "encounter": { - "1": "Woah! Ich habe einen großen Fang gemacht!", - "2": "Die Leine ist drin, bereit, den Erfolg an Land zu ziehen!", - "3": "Bereit, Wellen zu schlagen!" - }, - "victory": { - "1": "Ich komme mit einem stärkeren Haken zurück.", - "2": "Ich werde das nächste Mal den Sieg an Land ziehen.", - "3": "Ich schärfe nur meine Haken für das Comeback!" - } - }, - "swimmer": { - "encounter": { - "1": "Zeit, einzutauchen!", - "2": "Lass uns die Wellen des Sieges reiten!", - "3": "Bereit, einen Sprung ins Wasser zu machen!" - }, - "victory": { - "1": "Getränkt in Niederlage!", - "2": "Eine Welle der Niederlage!", - "3": "Zurück ans Ufer, schätze ich." - } - }, - "backpacker": { - "encounter": { - "1": "Packe deine Sachen, es geht los!", - "2": "Mal sehen, ob du mithalten kannst!", - "3": "Bereit machen, Herausforderer!", - "4": "Ich habe 20 Jahre damit verbracht, mich selbst zu finden… Aber wo bin ich?" - }, - "victory": { - "1": "Diesmal bin ich gestolpert!", - "2": "Oh, ich glaube, ich bin verloren.", - "3": "Sackgasse!", - "4": "Warte eine Sekunde! Hey! Weißt du nicht, wer ich bin?" - } - }, - "ace_trainer": { - "encounter": { - "1": "Du scheinst ziemlich zuversichtlich zu sein.", - "2": "Deine Pokémon… Zeig sie mir…", - "3": "Weil ich ein Ass-Trainer bin, denken die Leute, ich sei stark.", - "4": "Weißt du, was es braucht, um ein Ass-Trainer zu sein?" - }, - "victory": { - "1": "Ja… Du hast gute Pokémon…", - "2": "Was?! Aber ich bin ein Kampfgott!", - "3": "Natürlich, du bist der Hauptcharakter!", - "4": "OK! OK! Du könntest ein Ass-Trainer sein!" - }, - "defeat": { - "1": "Ich widme meinen Körper und meine Seele den Pokémon-Kämpfen!", - "2": "Alles innerhalb meiner Erwartungen… Nichts Überraschendes…", - "3": "Ich dachte, ich würde zu einem zerbrechlichen Menschen heranwachsen, \n$der aussieht, als würde er zerbrechen, wenn du ihn zu fest drückst.", - "4": "Natürlich bin ich stark und verliere nicht. Es ist wichtig, dass ich anmutig gewinne." - } - }, - "parasol_lady": { - "encounter": { - "1": "Zeit, das Schlachtfeld mit Eleganz und Anmut zu betreten!" - }, - "victory": { - "1": "Meine Eleganz bleibt ungebrochen!" - } - }, - "twins": { - "encounter": { - "1": "Mach dich bereit, denn wenn wir zusammenarbeiten, gibt es doppelten Ärger!", - "2": "Zwei Herzen, eine Strategie – mal sehen, ob du mit unserer Zwillingskraft mithalten kannst!", - "3": "Hoffe, du bist bereit für doppelten Ärger, denn wir werden dir einheizen!" - }, - "victory": { - "1": "Wir haben vielleicht diese Runde verloren, aber unsere Bindung bleibt unzerbrechlich!", - "2": "Unser Zwillingsgeist wird nicht lange getrübt bleiben.", - "3": "Wir werden als dynamisches Duo stärker zurückkommen!" - }, - "defeat": { - "1": "Zwillingskraft herrscht vor!", - "2": "Zwei Herzen, ein Triumph!", - "3": "Doppelte Freude, doppelter Siegestanz!" - } - }, - "cyclist": { - "encounter": { - "1": "Mach dich bereit, meinen Staub zu schlucken!", - "2": "Mach dich bereit, Herausforderer! Ich werde dich im Staub zurücklassen!", - "3": "Volle Fahrt voraus, mal sehen, ob du mithalten kannst!" - }, - "victory": { - "1": "Die Speichen stehen still, aber die Entschlossenheit dreht weiter.", - "2": "Abgehängt!", - "3": "Der Weg zum Sieg hat viele Kurven und Wendungen, die es noch zu erkunden gilt." - } - }, - "black_belt": { - "encounter": { - "1": "Ich lobe deinen Mut, mich herauszufordern! Denn ich bin derjenige mit dem stärksten Tritt!", - "2": "Oh, ich verstehe. Möchtest du in Stücke geschnitten werden? Oder bevorzugst du die Rolle des Punchingballs?" - }, - "victory": { - "1": "Oh. Die Pokémon haben gekämpft. Mein starker Tritt hat überhaupt nicht geholfen.", - "2": "Hmmm… Wenn ich sowieso verlieren würde, wollte ich wenigstens total vermöbelt werden." - } - }, - "battle_girl": { - "encounter": { - "1": "Du musst mich nicht beeindrucken. Du kannst gegen mich verlieren." - }, - "victory": { - "1": "Es ist schwer, sich zu verabschieden, aber uns läuft die Zeit davon…" - } - }, - "hiker": { - "encounter": { - "1": "Mein mittelalterlicher Bauch gibt mir so viel Gravitas wie die Berge, die ich besteige!", - "2": "Ich habe diesen kräftigen Körper von meinen Eltern geerbt… Ich bin wie eine lebende Bergkette…" - }, - "victory": { - "1": "Zumindest kann ich nicht verlieren, wenn es um BMI geht!", - "2": "Es ist nicht genug… Es ist nie genug. Mein schlechtes Cholesterin ist nicht hoch genug…" - } - }, - "ranger": { - "encounter": { - "1": "Wenn ich von der Natur umgeben bin, hören die meisten anderen Dinge auf, wichtig zu sein.", - "2": "Wenn ich ohne die Natur in meinem Leben lebe, fühle ich mich wie ein Fisch ohne Wasser." - }, - "victory": { - "1": "Es spielt keine Rolle für die Weite der Natur, ob ich gewinne oder verliere…", - "2": "So etwas ist ziemlich trivial im Vergleich zu den erdrückenden Gefühlen des Stadtlebens." - }, - "defeat": { - "1": "Ich habe den Kampf gewonnen. Aber der Sieg ist nichts im Vergleich zur Weite der Natur…", - "2": "Ich bin sicher, das mein Sieg nur dank der Natur möglich war." - } - }, - "scientist": { - "encounter": { - "1": "Meine Forschung wird diese Welt zu Frieden und Freude führen." - }, - "victory": { - "1": "Ich bin ein Genie… Ich sollte nicht gegen jemanden wie dich verlieren…" - } - }, - "school_kid": { - "encounter": { - "1": "…Heehee. Ich bin zuversichtlich in meine Berechnungen und Analysen.", - "2": "Ich sammle so viel Erfahrung wie möglich, weil ich eines Tages ein Arenaleiter sein möchte." - }, - "victory": { - "1": "Ohhhh… Berechnungen und Analysen sind kein Gegner für den Zufall…", - "2": "Auch schwierige, anstrengende Erfahrungen haben ihren Zweck, denke ich." - } - }, - "artist": { - "encounter": { - "1": "Früher war ich beliebt, aber jetzt bin ich völlig veraltet." - }, - "victory": { - "1": "Mit der Zeit ändern sich auch die Werte. Das habe ich zu spät erkannt." - } - }, - "guitarist": { - "encounter": { - "1": "Mach dich bereit, den Rhythmus der Niederlage zu spüren, während ich meinen Weg zum Sieg spiele!" - }, - "victory": { - "1": "Für den Moment zum Schweigen gebracht, aber meine Melodie der Widerstandsfähigkeit wird weiterspielen." - } - }, - "worker": { - "encounter": { - "1": "Es stört mich, dass die Leute mich immer missverstehen. Ich bin garnicht so grob wie alle denken." - }, - "victory": { - "1": "Ich will wirklich nicht, dass meine Haut verbrennt, also möchte ich im Schatten arbeiten." - } - }, - "worker_female": { - "encounter": { - "1": "Es stört mich, dass die Leute mich immer missverstehen. Ich bin garnicht so grob wie alle denken." - }, - "victory": { - "1": "Ich will wirklich nicht, dass meine Haut verbrennt, also möchte ich im Schatten arbeiten." - }, - "defeat": { - "1": "Mein Körper und mein Geist sind nicht immer unbedingt synchron." - } - }, - "worker_double": { - "encounter": { - "1": "Ich zeige dir, dass wir dich brechen können. Wir haben auf dem Feld trainiert!" - }, - "victory": { - "1": "Wie seltsam… Wie konnte das passieren… Ich hätte nicht ausgemuskelt werden sollen." - } - }, - "hex_maniac": { - "encounter": { - "1": "Ich höre normalerweise nur klassische Musik, aber wenn ich verliere,\n$werde ich ein bisschen New Age ausprobieren!", - "2": "Ich werde mit jeder Träne stärker, die ich weine." - }, - "victory": { - "1": "Ist das der Beginn des Zeitalters des Wassermanns? Ich bin bereit für die Veränderung.", - "2": "Jetzt kann ich noch stärker werden. Ich wachse mit jedem Groll." - }, - "defeat": { - "1": "New Age bezieht sich einfach auf Komponisten der klassischen Musik des 20. Jahrhunderts, richtig?", - "2": "Lass dich nicht von Traurigkeit oder Frustration aufhalten.\n$Du kannst deine Groll nutzen, um dich zu motivieren." - } - }, - "psychic": { - "encounter": { - "1": "Hallo! Konzentrier dich!" - }, - "victory": { - "1": "Eeeeek!" - } - }, - "officer": { - "encounter": { - "1": "Bereite dich vor, denn die Gerechtigkeit wird gleich vollstreckt!", - "2": "Bereit, das Gesetz zu verteidigen und die Gerechtigkeit auf dem Schlachtfeld zu wahren!" - }, - "victory": { - "1": "Die Gerechtigkeit auf meinen Schultern fühlt sich schwerer an denn je…", - "2": "Die Schatten der Niederlage schweben über dem Revier." - } - }, - "beauty": { - "encounter": { - "1": "Mein letzter Kampf überhaupt… So möchte ich, dass wir diesen Kampf sehen…" - }, - "victory": { - "1": "Es war schön… Lass uns irgendwann wieder einen letzten Kampf haben…" - } - }, - "baker": { - "encounter": { - "1": "Hoffe, du bist bereit, die Niederlage zu schmecken!" - }, - "victory": { - "1": "Ich werde ein Comeback backen." - } - }, - "biker": { - "encounter": { - "1": "Zeit, aufzudrehen und dich im Staub zurückzulassen!" - }, - "victory": { - "1": "Ich werde für das nächste Rennen tunen." - } - }, - "firebreather": { - "encounter": { - "1": "Meine Flammen werden dich verschlingen!", - "2": "Meine Seele hat Feuer gefangen. Ich werde dir zeigen, wie heiß sie brennt!", - "3": "Komm näher und sieh dir meine Flammen an!" - }, - "victory": { - "1": "Verbrannt bis zur Asche...", - "2": "Yow! Das ist heiß!", - "3": "Auuu! Ich habe mir die Nasenspitze verbrannt!" - } - }, - "sailor": { - "encounter": { - "1": "Matrose, du gehst über Bord, wenn du verlierst!", - "2": "Komm schon! Mein Stolz als Seemann steht auf dem Spiel!", - "3": "Ahoj! Bist du seekrank?" - }, - "victory": { - "1": "Argh! Von einem Kind besiegt!", - "2": "Dein Geist hat mich versenkt!", - "3": "Ich glaube, ich bin der der seekrank ist..." - } - }, - "archer": { - "encounter": { - "1": "Bevor du weitergehst, lass uns sehen, wie du dich gegen uns, Team Rocket, schlägst!", - "2": "Ich habe Berichte erhalten, dass deine Fähigkeiten nicht unbedeutend sind.\n$Mal sehen, ob sie wahr sind.", - "3": "Ich bin Atlas, ein Vorstand von Team Rocket.\n$Und ich mache es den Feinden unserer Organisation nicht leicht." - }, - "victory": { - "1": "Was für ein Fehler!", - "2": "Mit meinen aktuellen Fähigkeiten war ich der Aufgabe doch nicht gewachsen.", - "3": "V-verzeih mir, Giovanni... Dass ich von einem einfachen Trainer besiegt wurde..." - } - }, - "ariana": { - "encounter": { - "1": "Halt! Wir können niemanden herumlaufen lassen. \n$Es ist schädlich für den Stolz von Team Rocket, verstehst du.", - "2": "Ich weiß nicht und es ist mir egal, ob das, was ich tue, richtig oder falsch ist...\n$Ich vertraue einfach auf Giovanni und tue, was mir gesagt wird.", - "3": "Dein Trip endet hier. Ich werde dich erledigen!" - }, - "victory": { - "1": "Tch, du bist wirklich stark. Es ist schade. \n$Wenn du Team Rocket beitreten würdest, könntest du ein Vorstand werden.", - "2": "Ich... ich bin zerstört...", - "3": "Aaaieeeee! Das kann nicht passieren! Ich habe hart gekämpft, aber trotzdem verloren..." - } - }, - "proton": { - "encounter": { - "1": "Was willst du? Wenn du unsere Arbeit unterbrichst, erwarte keine Gnade!", - "2": "Was haben wir hier? Ich werde oft als der gruseligste und grausamste Typ bei Team Rocket bezeichnet…\n$Ich rate dir dringend, dich nicht in unsere Geschäfte einzumischen!", - "3": "Ich bin Proton, ein Admin von Team Rocket. Ich bin hier, um deinem Einmischen ein Ende zu setzen!" - }, - "victory": { - "1": "Die Festung ist gefallen! Alle Mann zurückziehen!", - "2": "Du hast diesmal gewonnen… Aber alles, was du getan hast, war, den Zorn von Team Rocket zu vergrößern…", - "3": "Ich bin besiegt… Aber ich werde das nicht vergessen!" - } - }, - "petrel": { - "encounter": { - "1": "Muhahaha, wir haben auf dich gewartet. Ich? Du weißt nicht, wer ich bin? Ich bin Giovanni.\n$Der majestätische Giovanni höchstpersönlich! Wahahaha!\n$…Huh? Ich klinge überhaupt nicht wie Giovanni?\n$Ich sehe nicht einmal aus wie Giovanni?\n$Wie kommt das? Ich habe so hart daran gearbeitet, ihn nachzuahmen!", - "2": "Ich bin Lambda, ein Admin von Team Rocket. Ich werde nicht zulassen, dass du unsere Pläne störst!", - "3": "Rocket Vorstand Lambda wird sich um diesen Eindringling kümmern!" - }, - "victory": { - "1": "OK, OK. Ich sage dir, wo er ist.", - "2": "Ich… Ich konnte nichts tun… Giovanni, bitte vergib mir…", - "3": "Nein, ich kann das nicht auf mich sitzen lassen. Ich muss die anderen informieren…" - } - }, - "tabitha": { - "encounter": { - "1": "Hehehe! Du bist also bis hierher gekommen! Aber du bist zu spät!", - "2": "Hehehe... Schon hier, oder? Wir haben dich unterschätzt! Aber das war's! \n$Ich bin eine Klasse über den Rüpeln, die du bisher gesehen hast. Ich halte dich nicht hin.\n$Ich werde dich zermalmen!", - "3": "Ich werde dir eine kleine Kostprobe des Schmerzes geben! Ergebe dich!" - }, - "victory": { - "1": "Hehehe! Du hast mich vielleicht besiegt, aber du hast keine Chance gegen den Boss!\n$Wenn du jetzt aufgibst, musst du dich keiner ordentlichen Tracht Prügel stellen!", - "2": "Hehehe... Also habe ich auch verloren...", - "3": "Ahya! Wie konnte das passieren? Ein Vorstand wie ich von einem zufälligen Trainer besiegt..." - } - }, - "courtney": { - "encounter": { - "1": "Stellt euch...Mir NICHT...IN DEN WEEEG...!!", - "2": "... Nun dann... Auslöschen...", - "3": "...?! Du... Hm... ♪ Das trifft sich ausgezeichnet... ♪\n$Dann hole ich mir eben zuerst deine Pokémon... Her damit..." - }, - "victory": { - "1": "... ...Ändere... die Welt.", - "2": "Wie erwartet. Unerwartet. Du. Ziel erfasst... abgeschlossen.\n$Beginne... Experiment. Du. Für immer. Aha... ♪", - "3": "...Schon wieder? Das war unerwartet. ...Ich wusste es. Du... bist interessant! ...Haha. ♪" - } - }, - "shelly": { - "encounter": { - "1": "Ahahahaha! Du wirst dich in die Angelegenheiten von Team Aqua einmischen?\n$Du bist entweder absolut furchtlos, einfach unwissend oder beides!\n$Du bist so süß, dass es ekelhaft ist! Ich werde dich erledigen.", - "2": "Was ist das? Wer ist dieser verwöhnte Gör?", - "3": "Beruhige dich. Sei geduldig. Ich werde dich gleich zermalmen." - }, - "victory": { - "1": "Ahahahaha! Wir wurden unerwartet gestört! Uns bleiben keine Optionen.\n$Wir müssen uns zurückziehen. Aber das ist nicht das letzte Mal, dass du Team Aqua siehst!\n$Wir haben andere Pläne! Vergiss das nicht!", - "2": "Ahhh?! War ich zu nachsichtig mit dir?!", - "3": "Uh. Willst du mir sagen, dass du während des Kampfes noch besser geworden bist?\n$Du bist ein Gör mit einer glänzenden Zukunft…\n$Meine Pokémon und ich haben keine Kraft mehr zu kämpfen…\n$Geh weiter… Geh und werde von Adrian zerstört." - } - }, - "matt": { - "encounter": { - "1": "Hoohahaha! Was, hast du eine Schraube locker oder so?\n$Sieh dich an, kleiner Makuhita-ähnlicher Trainer!", - "2": "Oho! Du! Du bist das lustige Kind!", - "3": "Was machst du hier? Bist du uns gefolgt?" - }, - "victory": { - "1": "Bwaarharharharhar!! Ich hab zwar verloren, aber das hat Spaß gemacht!", - "2": "Ich kann es fühlen! Ich kann es spüren, das ist klar! Die Stärke, die von dir ausgeht!\n$Mehr! Ich will noch mehr! Aber es sieht so aus, als hätten wir keine Zeit mehr...", - "3": "Das war Spaß! Ich wusste, dass du mir eine gute Zeit bieten würdest!\n$Ich freue mich darauf, dich eines Tages wieder zu treffen!" - } - }, - "mars": { - "encounter": { - "1": "Ich bin Mars, eine der obersten Commander von Team Galaktik.", - "2": "Die Vision von Team Galaktik für die Zukunft ist unbeirrt. Opposition wird gnadenlos zerschlagen!", - "3": "Fühlst du dich nervös? Das solltest du!" - }, - "victory": { - "1": "Das kann nicht passieren! Wie habe ich verloren?!", - "2": "Du hast etwas Können, das muss ich zugeben.", - "3": "Besiegt... Das war ein teurer Fehler." - } - }, - "jupiter": { - "encounter": { - "1": "Jupiter, Commander von Team Galaktik, zu Diensten.", - "2": "Widerstand ist zwecklos. Team Galaktik wird siegen!", - "3": "Du zitterst... Schon Angst?" - }, - "victory": { - "1": "Unmöglich... Ich habe verloren?!", - "2": "Beeindruckend, du hast Mut!", - "3": "So zu verlieren... Wie peinlich." - } - }, - "saturn": { - "encounter": { - "1": "Ich bin Saturn, Commander von Team Galaktik.", - "2": "Unsere Mission ist absolut. Jeder Widerstand wird vernichtet!", - "3": "Ist das Angst, die ich in deinen Augen sehe?" - }, - "victory": { - "1": "Unmöglich... Von dir besiegt?!", - "2": "Du hast dich als würdiger Gegner erwiesen.", - "3": "Besiegt in der Niederlage... Das ist inakzeptabel." - } - }, - "zinzolin": { - "encounter": { - "1": "Du könntest eine Bedrohung für Team Plasma werden, also werden wir dich hier und jetzt eliminieren!", - "2": "Oh, zum Heulen... Ich hatte nicht erwartet, in dieser eisigen Kälte kämpfen zu müssen!", - "3": "Du bist ein beeindruckender Trainer, dass du es so weit geschafft hast. Aber hier endet es." - }, - "victory": { - "1": "G-Cis... Ich habe versagt...", - "2": "Es ist bitterkalt. Ich zittere. Ich leide. Doch ich stehe immer noch siegreich da.", - "3": "Hm. Du bist ein klügerer Trainer, als ich erwartet habe, aber nicht klug genug." - } - }, - "rood": { - "encounter": { - "1": "Du bist eine Bedrohung für Team Plasma. Wir können dich hier und jetzt nicht laufen lassen!", - "2": "Oh, dieser eisige Wind... Ich hätte nie gedacht, dass ich hier kämpfen müsste!", - "3": "Du bist ein bemerkenswerter Trainer, dass du es bis hierher geschafft hast. Aber hier wird es enden." - }, - "victory": { - "1": "G-Cis... Ich habe meine Mission nicht erfüllt...", - "2": "Die Kälte ist durchdringend. Ich zittere. Ich leide. Doch ich habe gesiegt.", - "3": "Hm. Du bist ein talentierter Trainer, aber leider nicht talentiert genug." - } - }, - "xerosic": { - "encounter": { - "1": "Ah ha ha! Es wäre mir ein Vergnügen. Komm schon, kleiner Trainer! Zeig mir, was du drauf hast!", - "2": "Hm... Du bist mächtiger, als du aussiehst. Ich frage mich, wie viel Energie in dir steckt.", - "3": "Ich habe auf dich gewartet! Ich muss ein wenig Forschung an dir betreiben! Komm, lass uns beginnen!" - }, - "victory": { - "1": "Ah, du bist ziemlich stark. Oh ja—sehr stark, in der Tat.", - "2": "Ding-ding-ding! Du hast es geschafft! Dem Sieger gebührt die Beute!", - "3": "Wunderbar! Erstaunlich! Du hast enorme Fähigkeiten und Mut!" - } - }, - "bryony": { - "encounter": { - "1": "Ich bin Begonia, und es wäre mir ein Vergnügen, gegen dich zu kämpfen. Zeig mir, was du drauf hast.", - "2": "Beeindruckend... Du bist mächtiger, als du aussiehst. Zeig mir das wahre Ausmaß deiner Energie.", - "3": "Ich habe deine Ankunft erwartet. Es ist Zeit für einen kleinen Test. Sollen wir beginnen?" - }, - "victory": { - "1": "Du bist ziemlich stark. Oh ja—sehr stark, in der Tat.", - "2": "Ding-ding-ding! Du hast dich gut geschlagen. Der Sieg gehört dir.", - "3": "Wunderbar! Bemerkenswert! Deine Fähigkeiten und dein Mut sind lobenswert." - } - }, - "rocket_grunt": { - "encounter": { - "1": "Jetzt gibt es Ärger!…\n$und es kommt noch härter!\n$Wir wollen über die Erde regieren…\n$und naja du kennst den Rest…!", - "2": "Wir führen gerade eine große Operation durch. Hast du vor uns zu stören?", - "3": "Gib uns deine Pokémon, oder stelle dich dem Zorn von Team Rocket!", - "4": "Team Rocket wird seinen Plan zur Vollendung bringen, Aus dem Weg!", - "5": "Los, gib uns deine Pokémon. Wir brauchen sie für unseren Plan!" - }, - "victory": { - "1": "Das war mal wieder ein Schuss in den Ofen!", - "2": "Dem Boss wird das aber nicht gefallen!", - "3": "Ich habe es vermasselt!", - "4": "Meine Kollegen werden das nicht tolerieren!", - "5": "Team Rocket wird wiederkehren! Das sage ich Jessie und James!" - } - }, - "magma_grunt": { - "encounter": { - "1": "Keiner, der sich Team Magma in den Weg stellt, bekommt Gnade, nicht einmal Kinder!", - "2": "Störe besser nicht unsere Pläne! Wir formen die Welt nach unseren Vorstellungen!", - "3": "Du stehst uns im Weg! Team Magma hat keine Zeit für Störenfriede wie dich!", - "4": "Bereite dich auf die Hölle vor, denn es wird bald sehr heiß!", - "5": "Wir werden die Macht des Vulkans entfesseln! Es wird gewaltig sein! Mach dich bereit!" - }, - "victory": { - "1": "Wie kann das sein? Ich bin Teil des mächtigen Team Magma! Wir streben nach der Verbesserung der Welt...", - "2": "Unglaublich, dass ich verloren habe! Mit meinen mächtigen Pokémon.", - "3": "Das kann nicht sein! Ich hab doch viel mehr Erfahrung als du!", - "4": "Verdammt... Ich hätte sofort in unser Versteck fliehen sollen...", - "5": "Du hast mich besiegt... Der Boss wird mich dafür zur Rechenschaft ziehen." - } - }, - "aqua_grunt": { - "encounter": { - "1": "Du willst dich also mit Team Aqua anlegen? Du traust dich ja was… Dich werfe ich über Bord!", - "2": "Du hast ganz schön Mut, dich mit Team Aqua anzulegen!", - "3": "Ich hoffe du hast einen Regenschirm dabei. Hier wird es jetzt nass!", - "4": "Wir, Team Aqua, existieren zum Wohle aller!", - "5": "Bereite dich darauf vor, von den Fluten meiner Pokémon weggespült zu werden!" - }, - "victory": { - "1": "Vielleicht sollte ich wohl lieber selber über die Planke gehen…", - "2": "Arrgh, ich habe nicht damit gerechnet, von einer Landratte gestört zu werden!", - "3": "Ich habe verloren?! Ich schätze, ich muss jetzt zurück zum Versteck schwimmen...", - "4": "Oh Mann, was für eine Katastrophe... Der Boss wird wütend sein...", - "5": "Du hast mich besiegt... Meinst du, der Boss wird mich dafür kielholen lassen?" - } - }, - "galactic_grunt": { - "encounter": { - "1": "Team Galaktik wird die Welt in eine bessere verwandeln! Und du wirst uns nicht aufhalten!", - "2": "Erlebe die Macht unserer Technologie und die Zukunft, die wir uns vorstellen!", - "3": "Im Namen von Team Galaktik werde ich jeden beseitigen, der uns im Weg steht!", - "4": "Mach dich bereit zu verlieren!", - "5": "Hoffentlich bist du bereit für eine kosmische Niederlage!" - }, - "victory": { - "1": "Zyrus wird uns für diese Niederlage bestrafen…", - "2": "Dieser Rückschlag bedeutet nichts in Hinsicht unseres großen Plans.", - "3": "Unsere Pläne sind größer als diese Niederlage.", - "4": "Wie ist das möglich?!", - "5": "Notiz an mich selbst: Pokémon-Kämpfe üben, so bald wie möglich." - } - }, - "plasma_grunt": { - "encounter": { - "1": "Pokémon sollten frei sein! Team Plasma wird sie befreien!", - "2": "Wenn ich gegen dich gewinne, lass deine Pokémon frei!", - "3": "Wenn du Team Plasma im Weg stehst, werde ich mich um dich kümmern!", - "4": "Team Plasma wird Pokémon von egoistischen Menschen wie dir befreien!", - "5": "Lass dich von unserem Aussehen nicht täuschen. Unsere Kampffähigkeiten sind überragend!" - }, - "victory": { - "1": "Wie konnte ich verlieren? Ich dachte, ich würde die Welt retten...", - "2": "Wie konnte ich nur verlieren...", - "3": "...Dieses Pokémon ist zu schwach, ich werde stärkere beschaffen müssen!", - "4": "Große Pläne stoßen immer auf Hindernisse.", - "5": "Das ist ein schwerer Rückschlag für Team Plasma..." - } - }, - "flare_grunt": { - "encounter": { - "1": "Deine Pokémon haben keine Chance gegen die Überlegenheit von Team Flare.", - "2": "Mach dich bereit, denn gleich wird es hier lichterloh brennen!", - "3": "Team Flare wird die Welt von allen Makeln befreien!", - "4": "Bereite dich auf die unvergleichliche Macht von Team Flare vor!", - "5": "Unsere Mission steht über allem, sogar über der Mode!" - }, - "victory": { - "1": "Diese Niederlage wirft einen Schatten auf meine Zukunft.", - "2": "Es scheint, dass ich meine Strategien überdenken muss. Zurück ans Reißbrett.", - "3": "Unglaublich?! Ich habe verloren?!", - "4": "Selbst in der Niederlage bleibt Team Flare unübertroffen in seiner Eleganz.", - "5": "Du hast mich besiegt, aber Team Flare wird immer in Glanz und Stil erstrahlen." - } - }, - "aether_grunt": { - "encounter": { - "1": "Ich werde dich mit allem, was ich habe, bekämpfen. Ich werde dich auslöschen!", - "2": "Mir ist egal, ob du ein simpler Trainer bist oder nicht.\n$Ich werde dich hochkant rauswerfen, wenn du uns bedrohst!", - "3": "Mir wurde gesagt, Trainer abzuweisen, egal wer sie sind!", - "4": "Ich zeige dir die Macht des Æther-Paradies", - "5": "Jetzt da du die Wahre Natur des Æther-Paradies kennst, müssen wir dich leider beseitigen!" - }, - "victory": { - "1": "Hmph! Du scheinst ziemlich geschickt zu sein.", - "2": "Was hat das zu bedeuten? Was hat das zu bedeuten!", - "3": "Hey, du bist so stark, dass ich dich nicht abweisen kann!", - "4": "Hmm... Es scheint, als hätte ich verloren.", - "5": "Ich hätte das Blitzdings benutzen sollen..." - } - }, - "faba": { - "encounter": { - "1": "Ich bin Regionalleiter Fabian und ich werde dir zeigen, wie hart die Welt sein kann!", - "2": "Die letzte Verteidigungslinie des Æther-Paradieses kämpft gegen einen simplen Trainer?", - "3": "Ich Fabian, bin der Regionalleiter der Æther Foundation.\n$Der einzige auf der Welt, ich bin unersetzlich." - }, - "victory": { - "1": "Aiyee!", - "2": "W-w-wie kann das sein?! Wie konnte dieser Trainer...", - "3": "Das ist der Grund... warum ich andere Menschen nicht ausstehen kann." - } - }, - "skull_grunt": { - "encounter": { - "1": "Wir sind nicht böse, wir sind einfach nur nicht nett!", - "2": "Willst du Stress, oder was? Das ist unsere Art, Hallo zu sagen! Tschüss, du Punk!", - "3": "Wir sind nur ein paar Typen und Mädels mit großem Interesse an den Pokémon anderer Leute!", - "4": "Wieso machst du einen auf hart, wenn wir schon hart wie Knochen sind, Homie?", - "5": "Yo, platz hier nich’ rein, ♪ wie’n wildes Kleinstein! ♪ Wenn du meinst, dass Team Skull ♪\n$an nix denkt als Krawall, ♪ hast du leider ’nen Knall, ♪ denn das is’ nich’ der Fall! ♪\n$Wir woll’n hier nur gammeln ♪ und gechillt Staub ansammeln! ♪" - }, - "victory": { - "1": "Wie jetzt? Schon vorbei?", - "2": "Woah, lass uns lieber die Kurve kratzen, yo! Kein Bock, hier meinen Schädel zu riskieren...", - "3": "Wir brauchen deine schwachen Pokémon eh nicht!", - "4": "Was? Deine Stärke spür ich bis in die Knochen...", - "5": "Mein Homie und ich sind also weniger wert als Pokémon? Willste uns dissen, oder was?" - } - }, - "plumeria": { - "encounter": { - "1": "..Hmph. Du siehst nicht so aus, als wärst du etwas Besonderes.", - "2": "Die blöden Rüpel brauchen viel zu lange, um mit euch gewöhnlichen Trainern fertig zu werden...", - "3": "Lege dich mit irgendjemandem in Team Skull an, und ich zeige dir, wie ernst ich werden kann." - }, - "victory": { - "1": "Du bist ziemlich stark. Das muss ich zugeben.", - "2": "Jetzt versteh ich, warum meine Rüpel so viel Zeit damit verschwenden...", - "3": "Ich denke, ich muss diese Niederlage einfach hinnehmen." - } - }, - "macro_grunt": { - "encounter": { - "1": "Achtung hier ist Endstation für dich!", - "2": "Du bist ein Trainer, oder? Wir von MC Wertpapiere wissen so etwas.\n$Ich fürchte, das gibt dir trotzdem nicht das Recht, sich in unsere Arbeit einzumischen.", - "3": "Ich bin von MC Versicherungen! Hast du eine Lebensversicherung?" - }, - "victory": { - "1": "Ich habe keine andere Wahl, als respektvoll zurückzutreten.", - "2": "Mein Erspartes aufzugeben bringt mich in die roten Zahlen...", - "3": "Okay zurück an die Arbeit. Versicherungen verkauft sich nicht von alleine." - } - }, - "oleana": { - "encounter": { - "1": "Ich werde keine Störung von Präsident Roses Plänen zulassen!", - "2": "Du hast es also durch die Mitarbeiter der Tochterunternehmen geschafft,\n$die ich beauftragt habe, um dich aufzuhalten. Ich hätte nichts anderes erwartet.", - "3": "Für den Präsidenten! Ich werde nicht verlieren! \n$Mach dich bereit mit Macro Cosmos Airlines nach Hause zu fliegen!" - }, - "victory": { - "1": "Ich habe es nicht geschafft... Olivia... du bist wirklich eine hoffnungslose Frau.", - "2": "Arghhh! Das ist unentschuldbar... Was habe ich mir dabei gedacht...\n$Jeder Trainer, der es so weit geschafft hat, muss ein harter Brocken sein...", - "3": "Ich bin eine müde Olivia... Ob es Macro Cosmos Betten gibt?" - } - }, - "rocket_boss_giovanni_1": { - "encounter": { - "1": "Ich bin beeindruckt, du hast es bis hierher geschafft!\n$Ich bin Giovanni, der Anführer von Team Rocket!\n$Wir regieren den Untergrund von Kanto!\n$Und wir lassen sicherlich nicht zu, dass ein Kind uns aufhält!" - }, - "victory": { - "1": "Ich ziehe mich zurück, aber ich werde zurückkehren! Team Rocket wird niemals besiegt werden!" - }, - "defeat": { - "1": "Merke dir meine Worte. Nicht in der Lage zu sein,\n$deine eigene Stärke zu messen, zeigt, dass du immer noch ein Kind bist." - } - }, - "rocket_boss_giovanni_2": { - "encounter": { - "1": "Du schon wieder… Wie hast du mich gefunden? Team Rocket wird dich endlich aus der Welt schaffen!" - }, - "victory": { - "1": "Wie ist das möglich...? Der kostbare Traum von Team Rocket ist nicht mehr als eine Illusion geworden..." - }, - "defeat": { - "1": "Team Rocket wird niemals besiegt werden! Ich werde zurückkehren!" - } - }, - "magma_boss_maxie_1": { - "encounter": { - "1": "Die Welt ist nicht perfekt. Ich werde sie verbessern, indem ich sie neu erschaffe!\n$Wir brauchen mehr Landmassen um zu leben! Team Magma wird dieses Ziel mit aller Macht erreichen!" - }, - "victory": { - "1": "Ugh! Das entspricht nicht meinen Berechnungen! Wie konnte ich verlieren? Wir sehen uns wieder!" - }, - "defeat": { - "1": "Team Magma wird weiterhin die Welt verbessern!" - } - }, - "magma_boss_maxie_2": { - "encounter": { - "1": "Du bist das letzte Hindernis, das zwischen mir und meinen Zielen steht.\n$Mach dich bereit durch die Macht von Team Magma besiegt zu werden!" - }, - "victory": { - "1": "Das... Das kann nicht sein..." - }, - "defeat": { - "1": "Und jetzt werde ich diesen Planeten terraformen, um ihn ideal für die Menschheit zu machen." - } - }, - "aqua_boss_archie_1": { - "encounter": { - "1": "Ich bin Adrian, der Anführer von Team Aqua! Wir werden die Welt mit Wasser überfluten!" - }, - "victory": { - "1": "Lass uns mal wieder treffen. Ich werde mir sicher sein, dass ich dieses Gesicht wiedererkenne." - }, - "defeat": { - "1": "Brilliant! Mein Team wird jetzt nicht zurückhalten!" - } - }, - "aqua_boss_archie_2": { - "encounter": { - "1": "Ich habe lange auf diesen Tag gewartet. Das ist die wahre Macht von Team Aqua!" - }, - "victory": { - "1": "So habe ich mir das nicht vorgestellt..." - }, - "defeat": { - "1": "Ich werde alles in dieser Welt in seinen ursprünglichen, reinen Zustand zurückversetzen!!" - } - }, - "galactic_boss_cyrus_1": { - "encounter": { - "1": "Du wurdest von leerer Gefühlsduselei hierher getrieben.\n$Ich werde dich bereuen lassen, auf dein Herz gehört zu haben!" - }, - "victory": { - "1": "Interessant. Und ziemlich eigenartig." - }, - "defeat": { - "1": "Ich werde meine neue Welt erschaffen..." - } - }, - "galactic_boss_cyrus_2": { - "encounter": { - "1": "So sehen wir uns wieder. Es scheint, als wären unsere Schicksale miteinander verflochten.\n$Aber hier und jetzt werde ich diese Verbindung brechen!" - }, - "victory": { - "1": "Wie? Wie? WIE?!" - }, - "defeat": { - "1": "Bis bald." - } - }, - "plasma_boss_ghetsis_1": { - "encounter": { - "1": "Ich werde nicht zulassen, dass mich jemand aufhält! Egal wer es auch sein mag!" - }, - "victory": { - "1": "Wie kann das sein? Ich bin der Schöpfer von Team Plasma! Ich bin perfekt!" - }, - "defeat": { - "1": "Ich bin der perfekte Herrscher einer perfekten neuen Welt! Mwa ha ha!" - } - }, - "plasma_boss_ghetsis_2": { - "encounter": { - "1": "Komm schon! Ich will dein Gesicht sehen, in dem Moment, in dem du alle Hoffnung verlierst!" - }, - "victory": { - "1": "Meine Berechnungen... Nein! Meine sorgfältigen Pläne! Die Welt sollte mir gehören!" - }, - "defeat": { - "1": "Kyurem! Verwende Absorptionsfusion!" - } - }, - "flare_boss_lysandre_1": { - "encounter": { - "1": "DU willst mich aufhalten? Dann zeig mir deine Stärke in einem Kampf!" - }, - "victory": { - "1": "Du bist hier, um mich aufzuhalten. Aber ich bitte dich zu warten.\n$Ich bin so kurz davor, meine Vision zu verwirklichen." - }, - "defeat": { - "1": "Pokémon... Sollten nicht mehr existieren." - } - }, - "flare_boss_lysandre_2": { - "encounter": { - "1": "Die Zukunft, die du willst, oder die Zukunft, die ich will...\n$Lass uns sehen, welche mehr zu existieren verdient, sollen wir?" - }, - "victory": { - "1": "Die Zukunft, die ich erschaffen wollte... Es ist vorbei..." - }, - "defeat": { - "1": "Narren ohne Vision werden weiterhin diese wunderschöne Welt verunreinigen." - } - }, - "aether_boss_lusamine_1": { - "encounter": { - "1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Bestien sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen." - }, - "victory": { - "1": "Wie kann eine Person nur so grausam sein?!" - }, - "defeat": { - "1": "Und jetzt, mein süßes Biest, komm zu Mama!" - } - }, - "aether_boss_lusamine_2": { - "encounter": { - "1": "Wieso musst du mich weiterhin belästigen?! Ich habe die Nase voll von dir.\n$Du machst mich krank! Genug mit diesem nutzlosen Gerede... \n$Mit der Kraft von Anego, von uns als UB-01 Schmarotzer klassifiziert,\n$werde ich dir zeigen, wie falsch du warst, hierher zu kommen!" - }, - "victory": { - "1": "Aaauuuggghhhhhhhhh!!!" - }, - "defeat": { - "1": "Alles, was ich will, ist mein kostbares Biest! Der Rest von euch ist mir egal!" - } - }, - "skull_boss_guzma_1": { - "encounter": { - "1": "Kein Erbarmen! Keine Gnade! Ich bin dein schlimmster Alptraum! \n$Oh yeah, ich bin der große, böse Bromley!" - }, - "victory": { - "1": "Irgendwann mach ich dich platt! Ich hab noch ein Ass im Ärmel. Du wirst schon sehen." - }, - "defeat": { - "1": "Du hast den langen Weg hierher DAFÜR aufgenommen? Pah!" - } - }, - "skull_boss_guzma_2": { - "encounter": { - "1": "Mir ist egal, wer du bist. Ich mach dich platt!! Das schreibt mir mein Ego vor. Ich bin Bromley!" - }, - "victory": { - "1": "Bromley!!! Was ist falsch mit dir?!" - }, - "defeat": { - "1": "Ihr seid wirklich selten dämlich." - } - }, - "macro_boss_rose_1": { - "encounter": { - "1": "Mein Name ist Rose. Ich bin der Präsident der Galar Pokémon-Liga und Geschäftsführer von Macro Cosmos\n$Ich habe eine Aufgabe, eine Berufung! Ich muss die Galar-Region mit unbegrenzter Energie versorgen,\n$damit sie sich bis in alle Ewigkeit in Frieden fortentwickeln kann!" - }, - "victory": { - "1": "Du versteht es einfach nicht...So können wir die Geschichte nicht verändern!" - }, - "defeat": { - "1": "Ohne deine Einmischung kann ich jetzt endlich weiterarbeiten!" - } - }, - "macro_boss_rose_2": { - "encounter": { - "1": "Ich bin fest entschlossen, das Energieproblem in der Galar-Region\n$und natürlich auf der ganzen Welt zu lösen.\n$Meine Erfahrungen und Erfolge, die Macro Cosmos zu einem Erfolg gemacht haben,\n$sind der Beweis, dass meine Methoden funktionieren.\n$Ich habe nicht vor, meine Meinung zu ändern, selbst wenn ich verliere." - }, - "victory": { - "1": "Ich hatte vergessen, wie großartig Pokémon-Kämpfe sind! Es ist so lange her, dass ich gekämpft habe...\n$Das war wirklich befriedigend, ich akzeptiere die Niederlage für diesen Kampf." - }, - "defeat": { - "1": "Ich nehme an, es muss den Anschein haben, dass ich etwas Schreckliches tue.\n$Ich erwarte nicht, dass du es verstehst. Aber ich muss der Galar-Region grenzenlose Energie\n$bereitstellen, um ewigen Wohlstand zu gewährleisten." - } - }, - "brock": { - "encounter": { - "1": "Meine Expertise in Bezug auf Gesteins-Pokémon wird dich besiegen! Komm schon!", - "2": "Meine felsenfeste Entschlossenheit wird dich überwältigen!", - "3": "Ich bin ein harter Fels, der nicht so leicht zu brechen ist!" - }, - "victory": { - "1": "Die Stärke deiner Pokémon hat meine steinharte Verteidigung überwunden!", - "2": "Die Welt ist riesig! Ich bin froh, dass ich die Chance hatte, gegen dich zu kämpfen.", - "3": "Perhaps I should go back to pursuing my dream as a Pokémon Breeder…" - }, - "defeat": { - "1": "Der beste Angriff ist eine gute Verteidigung!\nDas ist meine Art, Dinge zu tun!", - "2": "Komm und studiere Felsen mit mir, um besser zu lernen wie man gegen sie kämpft!", - "3": "Meine Reisen durch die Regionen zahlen sich aus!" - } - }, - "misty": { - "encounter": { - "1": "Meine Taktik ist ein Frontalangriff mit Wasser-Pokémon!", - "2": "Hiya! Ich zeige dir die Stärke meiner Wasser-Pokémon!", - "3": "Mein Traum war es, auf eine Reise zu gehen und gegen starke Trainer zu kämpfen… \n$Wirst du eine ausreichende Herausforderung sein?" - }, - "victory": { - "1": "Du bist wirklich stark… Ich gebe zu, du hast es drauf…", - "2": "Du weißt, dass du nur Glück hattest, oder?", - "3": "Wow, ich kann nicht glauben, dass du mich besiegt hast!" - }, - "defeat": { - "1": "War die mächtige Misty zu viel für dich?", - "2": "Ich hoffe, du hast die eleganten Schwimmtechniken meiner Pokémon gesehen!", - "3": "Deine Pokémon waren keine Herausforderung für meine geliebten Pokémon!" - } - }, - "lt_surge": { - "encounter": { - "1": "Meine Elektro-Pokémon haben mich im Krieg gerettet! Ich werde dir zeigen, wie!", - "2": "Du wirst um Gnade winseln, wenn ich dich geschockt habe!", - "3": "Ich werde dich genau so zappen, wie ich es mit all meinen Feinden im Kampf mache!" - }, - "victory": { - "1": "Whoa! Dein Team ist echt stark!", - "2": "Aaargh, du bist stark! Selbst meine elektrischen Tricks haben gegen dich verloren.", - "3": "Das war ein absolut schockierender Verlust!" - }, - "defeat": { - "1": "Oh ja! Wenn es um Elektro-Pokémon geht, bin ich weltweit die Nummer eins!", - "2": "Hahaha! Das war ein elektrisierender Kampf!", - "3": "Ein Pokémon-Kampf ist Krieg, und ich habe dir den Nahkampf gezeigt!" - } - }, - "erika": { - "encounter": { - "1": "Ah, das Wetter ist hier so schön…\nOh, ein Kampf? Nun gut.", - "2": "Meine Pokémon-Kampffähigkeiten stehen in Konkurrenz zu meinen Blumenarrangierfähigkeiten.", - "3": "Oh, ich hoffe, der angenehme Duft meiner Pokémon lässt mich nicht wieder einschlafen…", - "4": "Blumen in einem Garten zu sehen ist so beruhigend." - }, - "victory": { - "1": "Oh! Ich gestehe meine Niederlage ein.", - "2": "Dieser Kampf war so entspannend.", - "3": "Ah, es scheint, dass ich verloren habe…", - "4": "Na immerhin habe ich noch meine Blumen." - }, - "defeat": { - "1": "Ich hatte Angst, dass ich einschlafen würde…", - "2": "Es scheint, als hätten meine Pflanzen-Pokémon dich überwältigt.", - "3": "Dieser Kampf war eine so beruhigende Erfahrung.", - "4": "Das war alles?" - } - }, - "janine": { - "encounter": { - "1": "Ich meistere die Kunst der giftigen Angriffe. Ich werde heute mit dir trainieren!", - "2": "Vater vertraut darauf, dass ich mich behaupten kann. Ich werde ihm recht geben!", - "3": "Meine Ninja-Techniken sind nur zweitrangig zu denen meines Vaters! Kannst du mithalten?" - }, - "victory": { - "1": "Selbst jetzt brauche ich noch Training… Ich verstehe.", - "2": "Dein Kampfstil hat meinen überwältigt.", - "3": "Ich werde mich wirklich anstrengen und meine Fähigkeiten verbessern." - }, - "defeat": { - "1": "Fufufu… das Gift hat dir all deine Kraft zum Kämpfen geraubt.", - "2": "Ha! Du hattest keine Chance gegen meine überlegenen Ninja-Fähigkeiten!", - "3": "Vaters Vertrauen in mich war nicht unbegründet." - } - }, - "sabrina": { - "encounter": { - "1": "Ich habe deine Ankunft in einer Vision gesehen!", - "2": "Ich mag es nicht zu kämpfen, aber wenn du darauf bestehst, werde ich dir meine Kräfte zeigen!", - "3": "Ich spüre große Ambitionen in dir. Ich werde sehen, ob sie begründet sind." - }, - "victory": { - "1": "Deine Kraft… Sie übertrifft bei weitem das, was ich vorausgesehen habe…", - "2": "Ich habe es nicht geschafft, deine Stärke genau vorherzusagen.", - "3": "Selbst mit meinen immensen psychischen Kräften kann ich niemanden spüren, der stärker ist als du." - }, - "defeat": { - "1": "Dieser Sieg… Genau so habe ich ihn in meinen Visionen gesehen!", - "2": "Vielleicht war es jemand anderes, den ich spürte…", - "3": "Verfeinere deine Fähigkeiten, bevor du unüberlegt in den Kampf stürzt.\n$Du weißt nie, was die Zukunft bereithält, wenn du es tust…" - } - }, - "blaine": { - "encounter": { - "1": "Hah! Ich hoffe, du hast Feuerheiler mitgebracht!", - "2": "Meine feurigen Pokémon werden alle Herausforderer verbrennen!", - "3": "Mach dich bereit, mit dem Feuer zu spielen!" - }, - "victory": { - "1": "Ich habe mich bis auf die Knochen verbrannt! Nicht einmal Asche bleibt!", - "2": "Habe ich die Flammen nicht hoch genug geschürt?", - "3": "Ich bin komplett ausgebrannt… Aber das lässt meine Motivation, mich zu verbessern, noch heißer brennen!" - }, - "defeat": { - "1": "Mein wütendes Inferno kann nicht gelöscht werden!", - "2": "Meine Pokémon sind durch die Hitze dieses Sieges gestärkt worden!", - "3": "Hah! Meine Leidenschaft brennt heller als deine!" - } - }, - "giovanni": { - "encounter": { - "1": "Ich, der Anführer von Team Rocket, werde dir eine Welt voller Schmerz bereiten!", - "2": "Mein Training hier wird entscheidend sein, bevor ich mich wieder meinen alten Kollegen stelle.", - "3": "Ich denke dass du nicht auf die Ausmaße des Scheiterns vorbereitet bist, die du gleich erleben wirst!" - }, - "victory": { - "1": "WAS! Ich, verlieren?! Es gibt nichts, was ich dir sagen möchte!", - "2": "Hmm… Du wirst nie verstehen können, was ich zu erreichen versuche.", - "3": "Diese Niederlage ist nur ein kleiner Rückschlag.\nTeam Rocket wird aus der Asche auferstehen." - }, - "defeat": { - "1": "Das du nicht in der Lage bist, deine eigene Stärke einzuschätzen, zeigt, dass du noch ein Kind bist.", - "2": "Versuche nicht, dich wieder in meine Angelegenheiten einzumischen.", - "3": "Ich hoffe, du verstehst, wie dumm es war, mich herauszufordern." - } - }, - "roxanne": { - "encounter": { - "1": "Wärs du so freundlich und würdest mir zeigen, wie du kämpfst?", - "2": "Man lernt so viel, wenn man gegen viele Trainer kämpft.", - "3": "Oh, du hast mich beim Strategie entwickeln erwischt. Möchtest du kämpfen?" - }, - "victory": { - "1": "Oh, es scheint, als hätte ich verloren.", - "2": "Es scheint, als hätte ich noch so viel mehr zu lernen, wenn es um Kämpfe geht.", - "3": "Ich werde mir zu Herzen nehmen, was ich heute gelernt habe." - }, - "defeat": { - "1": "Ich habe so viele Dinge aus unserem Kampf gelernt. Ich hoffe, du auch.", - "2": "Ich freue mich darauf, wieder gegen dich zu kämpfen.\n$Ich hoffe, du wirst das, was du hier gelernt hast, anwenden.", - "3": "Ich habe gewonnen, weil ich alles gelernt habe." - } - }, - "brawly": { - "encounter": { - "1": "Oh man, ein Herausforderer!\nLass uns sehen, was du kannst!", - "2": "Du scheinst auf große Auftritte zu stehen.\nLass uns kämpfen", - "3": "Zeit, einen Sturm zu entfachen!\nLos geht's!" - }, - "victory": { - "1": "Oh wow, du hast mich überrumpelt!", - "2": "Du hast meinen Flow übernommen und mich besiegt!", - "3": "Ich fühle mich als hätte ich mich in der Granithöhle verirrt!" - }, - "defeat": { - "1": "Haha, ich surfe die große Welle! Fordere mich irgendwann wieder heraus.", - "2": "Surfe mal wieder mit mir!", - "3": "Genau wie die Gezeiten kommen und gehen, hoffe ich, dass du zurückkommst, um mich herauszufordern." - } - }, - "wattson": { - "encounter": { - "1": "Zeit, geschockt zu werden! Wahahahaha!", - "2": "Ich lass die Funken fliegen! Wahahahaha!", - "3": "Ich hoffe, du hast Para-Heiler dabei! Wahahahaha!" - }, - "victory": { - "1": "Scheint als wäre ich entladen! Wahahahaha!", - "2": "Du hast mich komplett geerdet! Wahahahaha!", - "3": "Danke für den Nervenkitzel! Wahahahaha!" - }, - "defeat": { - "1": "Lade deine Batterien wieder auf und fordere mich irgendwann wieder heraus! Wahahahaha!", - "2": "Ich hoffe du fandest unseren Kampf elektrisierend! Wahahahaha!", - "3": "Bist du nicht geschockt, dass ich gewonnen habe? Wahahahaha!" - } - }, - "flannery": { - "encounter": { - "1": "Nett dich zu kennenzulernen! Warte, nein… Ich werde dich zermalmen!", - "2": "Ich bin noch nicht lange Arenaleiterin, aber ich werde dich grillen!", - "3": "Es ist Zeit, dir die Kampftechniken zu zeigen, die mein Großvater mir beigebracht hat! Lass uns kämpfen!" - }, - "victory": { - "1": "Du erinnerst mich an meinen Großvater… Kein Wunder, dass ich verloren habe.", - "2": "Strenge ich mich zu sehr an? Ich sollte mich entspannen, ich darf mich nicht zu sehr aufregen.", - "3": "Zu verlieren wird meine Flamme nicht ersticken. Zeit, das Training wieder zu entfachen!" - }, - "defeat": { - "1": "Ich hoffe, ich habe meinen Großvater stolz gemacht… Lass uns irgendwann wieder kämpfen.", - "2": "Ich… Ich kann nicht glauben, dass ich gewonnen habe! Meine Art zu kämpfen hat funktioniert!", - "3": "Lass uns bald wieder heiße Moves austauschen!" - } - }, - "norman": { - "encounter": { - "1": "Ich bin überrascht, dass du es bis hierher geschafft hast. Lass uns kämpfen.", - "2": "Ich werde alles in meiner Macht stehende tun, um als Arenaleiter zu gewinnen. Los geht's!", - "3": "Du solltest alles geben! Lasst uns kämpfen!" - }, - "victory": { - "1": "Ich habe gegen dich verloren…? Das ist eine Überraschung.", - "2": "War der Umzug nach Hoenn die richtige Entscheidung? Ich bin mir nicht sicher.", - "3": "Ich kann es nicht fasen. Das war ein großartiger Kampf." - }, - "defeat": { - "1": "Wir haben beide unser Bestes gegeben. Ich hoffe, wir können bald wieder kämpfen.", - "2": "Du solltest versuchen, mein Kind herauszufordern. Du könntest etwas lernen!", - "3": "Danke für den tollen Kampf. Viel Glück beim nächsten Mal." - } - }, - "winona": { - "encounter": { - "1": "Ich bin durch die Lüfte geflogen und habe nach Beute gesucht… und du bist mein Ziel!", - "2": "Egal, wie unser Kampf ausgeht, meine Flug-Pokémon und ich werden mit Anmut triumphieren. Auf in den Kampf!", - "3": "Ich hoffe, du hast keine Höhenangst. Lasst uns aufsteigen!" - }, - "victory": { - "1": "Du bist der erste Trainer, den ich gesehen habe, der mehr Anmut hat als ich. Ausgezeichnet", - "2": "Meine Flug-Pokémon sind abgestürzt! Na gut.", - "3": "Auch wenn ich gefallen sein mag, meine Pokémon werden weiter fliegen!" - }, - "defeat": { - "1": "Meine Flug-Pokémon und ich werden für immer elegant tanzen!", - "2": "Ich hoffe du hast die Show genossen. Unser anmutiger Tanz ist beendet.", - "3": "Wirst du zurückkommen und unsere elegante Choreographie noch einmal sehen?" - } - }, - "tate": { - "encounter": { - "1": "Hehehe… Bist du überrascht, mich ohne meine Schwester zu sehen?", - "2": "Ich kann sehen, was du denkst… Du willst kämpfen!", - "3": "Wie kannst du jemanden besiegen der deine Gedanken lesen kann?" - }, - "victory": { - "1": "Ich kann es nicht ändern… Ich vermisse Svenja…", - "2": "Die Bande zwischen dir und deinen Pokémon ist stärker als meine.", - "3": "Zusammen mit Svenja wären wir unschlagbar gewesen. Wir können gegenseitig unsere Sätze beenden!" - }, - "defeat": { - "1": "Meine Pokémon und ich sind siegreich.", - "2": "Wenn du mich nicht besiegen kannst, wirst du auch niemals Svenja besiegen können.", - "3": "All das verdanke ich meinem strengen Training mit Svenja. Meine Pokémon und ich sind eins." - } - }, - "liza": { - "encounter": { - "1": "Hihihi… Bist du überrascht, mich ohne meinen Bruder zu sehen?", - "2": "Ich kann sehen, wonach du verlangst… Du willst kämpfen, oder?", - "3": "Wie kannst du jemanden besiegen, der eins mit seinen Pokémon ist?" - }, - "victory": { - "1": "Ich kann es nicht ändern… Ich vermisse Ben…", - "2": "Das Band zwischen dir und deinen Pokémon ist stärker als meins.", - "3": "Zusammen mit Ben wären wir unschlagbar gewesen. Wir können gegenseitig unsere Sätze beenden!" - }, - "defeat": { - "1": "Meine Pokémon und ich sind siegreich.", - "2": "Wenn du mich nicht besiegen kannst, wirst du auch niemals Ben besiegen können.", - "3": "All das verdanke ich meinem strengen Training mit Ben. Meine Pokémon und ich sind eins." - } - }, - "juan": { - "encounter": { - "1": "Jetzt ist nicht die Zeit, schüchtern zu sein. Lass uns kämpfen!", - "2": "Ahahaha, Du wirst Zeuge meiner Kunstfertigkeit mit Wasser-Pokémon!", - "3": "Ein Taifun nähert sich! Wirst du mich testen können?", - "4": "Bitte, du wirst Zeuge unserer Kunstfertigkeit.\n$Eine großartige Illusion aus Wasser, die von meinen Pokémon und mir geschaffen wurde!" - }, - "victory": { - "1": "Du bist ein Genie, das Wasilli herausfordern kann!", - "2": "Ich habe mich auf Eleganz konzentriert, während du trainiert hast.\n$Es kein Wunder, dass du gewonnen hast.", - "3": "Ahahaha! Nun gut, dieses Mal hast du gewonnen.", - "4": "Ich spüre den Glanz deines Könnens, der alles überwinden wird." - }, - "defeat": { - "1": "Meine Pokémon und ich haben eine Illusion aus Wasser geschaffen und sind siegreich hervorgegangen.", - "2": "Ahahaha, Ich habe gewonnen, und du hast verloren.", - "3": "Soll ich dir mein Outfit leihen? Es könnte dir beim Kampf helfen! Ahahaha, ich scherze!", - "4": "Ich bin der Gewinner! Das heißt, du hast verloren." - } - }, - "crasher_wake": { - "encounter": { - "1": "Aufgepasst! Wellenbrecher Marinus… ist… da!", - "2": "Brechende Wellen! Ich bin Wellenbrecher Marinus!", - "3": "Ich bin die Flutwelle der Macht, die dich wegspült!" - }, - "victory": { - "1": "Das bringt ein Grinsen in mein Gesicht! Guhahaha! Das war ein Spaß!", - "2": "Hunwah! Es ist vorbei! Wie soll ich das sagen… Ich will mehr! Ich wollte viel mehr kämpfen!", - "3": "WAAAS?!" - }, - "defeat": { - "1": "Yeeeeah! So muss das sein!", - "2": "Ich habe gewonnen, aber ich will mehr! Ich wollte viel mehr kämpfen!", - "3": "Bis bald! Ich freue mich auf den nächsten Kampf!" - } - }, - "falkner": { - "encounter": { - "1": "Ich werde dir die wahre Kraft der prächtigen Flug-Pokémon zeigen!", - "2": "Winde, bleibt bei mir!", - "3": "Vater! Ich hoffe, du siehst mir beim Kampf von oben zu!" - }, - "victory": { - "1": "Ich verstehe… Ich werde mich anmutig zurückziehen.", - "2": "Eine Niederlage ist eine Niederlage. Du bist wirklich stark.", - "3": "…Verdammt! Ich habe verloren!" - }, - "defeat": { - "1": "Vater! Ich habe mit deinen geliebten Flug-Pokémon gewonnen…", - "2": "Flug-Pokémon sind die Besten!", - "3": "Ich habe das Gefühl, dass ich meinem Vater näher komme!" - } - }, - "nessa": { - "encounter": { - "1": "Egal, welchen Plan dein raffinierter Verstand auch schmiedet,\n$mein Partner und ich werden ihn mit Sicherheit zu Fall bringen.", - "2": "Ich bin nicht hier, um zu plaudern. Ich bin hier, um zu gewinnen!", - "3": "Das ist ein kleines Geschenk von meinen Pokémon… Ich hoffe, du kannst es annehmen!" - }, - "victory": { - "1": "Du und deine Pokémon sind einfach zu stark…", - "2": "Wie…? Wie kann das sein?", - "3": "Ich wurde total weggespült!" - }, - "defeat": { - "1": "Die wütenede Welle schlägt wieder zu!", - "2": "Es ist Zeit, die Welle des Sieges zu reiten!", - "3": "Ehehe!" - } - }, - "melony": { - "encounter": { - "1": "Ich halte mich nicht zurück!", - "2": "Okay, ich denke, wir sollten anfangen.", - "3": "Ich werde dich einfrieren!" - }, - "victory": { - "1": "Du… Du bist ziemlich gut, oder?", - "2": "Wenn du Mac triffst, haue ihn für mich um, ja?", - "3": "Ich denke, du hast 'das Eis brechen' ein wenig zu wörtlich genommen…" - }, - "defeat": { - "1": "Siehst du jetzt, wie ernst Kämpfe sein können?", - "2": "Hee! Es sieht so aus, als hätte ich wieder gewonnen!", - "3": "Hältst du dich zurück?" - } - }, - "marlon": { - "encounter": { - "1": "Du siehst stark aus! Los geht's!", - "2": "Ich bin stark wie das weite Meer. Du wirst weggespült, das ist sicher.", - "3": "Oh ho, ich treffe auf dich! Das ist abgefahren." - }, - "victory": { - "1": "Du hast total gerockt! Du ziehst einige krasse Pokémon groß. Du hast das Trainer-Ding drauf!", - "2": "Du siehst nicht nur stark aus, du bist auch stark! Eh, ich wurde auch weggespült!", - "3": "Du bist stark wie eine spektakuläre Welle!" - }, - "defeat": { - "1": "Du bist stark, aber nicht stark genug, um das Meer zu beeinflussen, 'OK!", - "2": "Hee! Sieht so aus, als hätte ich wieder gewonnen!", - "3": "Süßer, süßer Sieg!" - } - }, - "shauntal": { - "encounter": { - "1": "Entschuldigung. Du bist ein Herausforderer, oder?\nIch bin Anissa, die Geist-Pokémon-Nutzerin\n$der Top Vier. Ich werde dich in die Welt der Bücher entführen.", - "2": "Ich liebe es, über Trainer und deren Pokémon zu schreiben.\n$Könnte ich dich als Inspiration verwenden?", - "3": "Jeder, der mit Pokémon arbeitet, hat eine Geschichte zu erzählen. Welche Geschichte wird erzählt?" - }, - "victory": { - "1": "Wow. Ich bin sprachlos!", - "2": "E-entschuldigung! Zuerst muss ich mich bei meinen Pokémon entschuldigen…\n$Es tut mir wirklich leid, dass ihr wegen mir eine schlechte Erfahrung gemacht habt.", - "3": "Selbst in Anbetracht dessen, bin ich immer noch eine der Top Vier!" - }, - "defeat": { - "1": "Eheh.", - "2": "Das war exzellentes Material für meinen nächsten Roman!", - "3": "Und wenn sie nicht gestorben sind, dann leben sie noch heute…" - } - }, - "marshal": { - "encounter": { - "1": "Mein Mentor, Lauro, sieht Potential in dir. Ich werde dich testen,\n$dich an die Grenzen deiner Stärke bringen. Kiai!", - "2": "Ein Sieg, ein entscheidender Sieg, das ist mein Ziel! Herausforderer, hier komme ich!", - "3": "Ich selber suche die Stärke eines Kämpfers zu entwickeln und jede Schwäche in mir zu brechen!" - }, - "victory": { - "1": "Puh! Gut gemacht!", - "2": "Während deine Kämpfe weitergehen, strebe nach noch größeren Höhen!", - "3": "Die Stärke, die du und deine Pokémon gezeigt haben, hat mich tief beeindruckt..." - }, - "defeat": { - "1": "Hmm.", - "2": "Das war ein guter Kampf.", - "3": "Haaah! Haaah! Haiyaaaah!" - } - }, - "cheren": { - "encounter": { - "1": "Du erinnerst mich an einen alten Freund. Das macht mich gespannt auf diesen Pokémon-Kampf!", - "2": "Pokémon-Kämpfe haben keinen Sinn, wenn man nicht darüber nachdenkt, warum man kämpft.\n$Oder besser gesagt, es macht das Kämpfen mit Pokémon sinnlos.", - "3": "Ich heiße Cheren! Ich bin ein Arenaleiter und Lehrer! Freut mich, dich kennenzulernen." - }, - "victory": { - "1": "Danke! Ich habe gesehen, was mir gefehlt hat.", - "2": "Danke! Ich habe das Gefühl, ein Stück meines Ideals entdeckt zu haben.", - "3": "Hmm… Das ist problematisch." - }, - "defeat": { - "1": "Als Arenaleiter will ich eine Hürde für dich sein, die du überwinden musst.", - "2": "In Ordnung!", - "3": "Ich bin so weit gekommen, weil Pokémon an meiner Seite waren.\n$Vielleicht sollten wir darüber nachdenken, warum Pokémon uns helfen,\n$nicht als Pokémon und Trainer, sondern als Beziehung zwischen Lebewesen." - } - }, - "chili": { - "encounter": { - "1": "Jaaaa! Zeit, mit dem Feuer zu spielen! Ich bin der Stärkste von uns Brüdern!", - "2": "Ta-da! Der Feuer-Typ-Kämpfer Maik --das bin ich-- wird dein Gegner sein!", - "3": "Ich werde dir zeigen, was ich und meine feurigen Pokémon draufhaben!" - }, - "victory": { - "1": "Du hast mich besiegt. Ich bin... ausgebrannt...", - "2": "Whoa ho! Du brennst vor Energie!", - "3": "Autsch! Du hast mich erwischt!" - }, - "defeat": { - "1": "Ich brenne! Spiel mit mir, und du wirst dich verbrennen!", - "2": "Wenn du mit Feuer spielst, wirst du verbrannt!", - "3": "Ich meine, komm schon, dein Gegner war ich! Du hattest keine Chance!" - } - }, - "cilan": { - "encounter": { - "1": "Nichts Persönliches... Keine harten Gefühle... Ich und meine Pflanzen-Pokémon werden...\n$Ähm... Wir werden kämpfen, egal was passiert.", - "2": "Also, ähm, wenn es für dich in Ordnung ist, werde ich, ähm, alles geben, um, äh, dein Gegner zu sein.", - "3": "OK… Also, ähm, ich bin Benny, ich mag Pflanzen-Pokémon." - }, - "victory": { - "1": "Ähm… Ist es jetzt vorbei?", - "2": "…Was für eine Überraschung. Du bist sehr stark, nicht wahr? \n$Ich glaube, meine Brüder hätten dich auch nicht besiegen können…", - "3": "…Hmm. Sieht aus, als wäre mein Timing, ähm, schlecht gewesen?" - }, - "defeat": { - "1": "Huh? Habe ich gewonnen?", - "2": "Ich denke... Ich habe wohl gewonnen, weil ich mit meinen Brüdern Maik und Colin traniert habe,\n$und wir so alle stärker geworden sind.", - "3": "Es... es war ein ziemlich aufregendes Erlebnis..." - } - }, - "roark": { - "encounter": { - "1": "Ich muss dein Potenzial als Trainer und die Stärke der Pokémon sehen, die mit dir kämpfen!", - "2": "Los geht's! Dies sind meine Gesteins-Pokémon, mein ganzer Stolz!", - "3": "Gesteins-Pokémon sind einfach die besten!", - "4": "Ich muss dein Potenzial als Trainer und die Stärke der Pokémon sehen, die mit dir kämpfen!" - }, - "victory": { - "1": "W-was? Das kann nicht sein! Meine total tranierten Pokémon!", - "2": "…Wir haben die Kontrolle verloren. Beim nächsten Mal fordere ich dich\n$zu einem Fossilien-Ausgrabungswettbewerb heraus.", - "3": "Mit deinem Können ist es nur natürlich, dass du gewinnst.", - "4": "W-was?! Das kann nicht sein! Selbst das war nicht genug?", - "5": "Ich habe es vermasselt." - }, - "defeat": { - "1": "Siehst du? Ich bin stolz auf meinen steinigen Kampfstil!", - "2": "Danke! Der Kampf hat mir Vertrauen gegeben, dass ich vielleicht meinen Vater besiegen kann!", - "3": "Ich fühle mich, als hätte ich gerade einen wirklich hartnäckigen Felsen durchbrochen!" - } - }, - "morty": { - "encounter": { - "1": "Mit ein bisschen mehr könnte ich eine Zukunft sehen, in der ich das legendäre Pokémon treffe.\n$Du wirst mir helfen, dieses Level zu erreichen!", - "2": "Es heißt, dass ein regenbogenfarbenes Pokémon vor einem wirklich starken Trainer erscheinen wird.\n$Ich habe an diese Geschichte geglaubt, deshalb habe ich mein ganzes Leben lang heimlich trainiert.\n$Als Ergebnis kann ich jetzt Dinge sehen, die andere nicht sehen.\n$Ich sehe einen Schatten der Person, die das Pokémon erscheinen lassen wird.\n$Ich glaube, diese Person bin ich! Du wirst mir helfen, dieses Level zu erreichen!", - "3": "Ob du es glaubst oder nicht, mystische Kräfte existieren.", - "4": "Du kannst die Früchte meines Trainings bezeugen.", - "5": "Du musst deine Seele mit der eines Pokémon vereinen. Kannst du das?", - "6": "Sag mal, willst du an meinem Training teilnehmen?" - }, - "victory": { - "1": "Ich bin noch nicht gut genug...", - "2": "Ich sehe... Deine Reise hat dich an weit entfernte Orte geführt und du hast viel mehr gesehen als ich.\n$Ich beneide dich darum...", - "3": "Wie ist das möglich...", - "4": "Ich glaube nicht, dass unser Potenzial so unterschiedlich ist.\n$Aber du scheinst etwas mehr zu haben... Sei es drum.", - "5": "Ich brauche wohl mehr Training.", - "6": "Das ist schade." - }, - "defeat": { - "1": "Ich habe... einen weiteren Schritt nach vorne gemacht.", - "2": "Fufufu...", - "3": "W-was?! Das kann nicht sein! Selbst das war nicht genug?", - "4": "Ich fühle mich, als hätte ich gerade einen wirklich hartnäckigen Felsen durchbrochen!", - "5": "Ahahahah!", - "6": "Ich wusste, dass ich gewinnen würde!" - } - }, - "crispin": { - "encounter": { - "1": "Ich will gewinnen, also werde ich genau das tun!", - "2": "Ich kämpfe, weil ich kämpfen will! Und weißt du was? So sollte es sein!" - }, - "victory": { - "1": "Ich wollte gewinnen... aber ich habe verloren!", - "2": "Ich habe verloren... weil ich nicht gewinnen konnte!" - }, - "defeat": { - "1": "Hey, warte mal. Habe ich gerade gewonnen? Ich glaube, ich habe gewonnen! Das ist befriedigend!", - "2": "Wooo! Das war unglaublich!" - } - }, - "amarys": { - "encounter": { - "1": "Ich möchte jemandem helfen. Daher kann ich es mir nicht leisten, zu verlieren.\n$… Unser Kampf beginnt jetzt." - }, - "victory": { - "1": "Ich bin... nicht genug, wie ich sehe." - }, - "defeat": { - "1": "Der Sieg gehört mir. Gut gekämpft." - } - }, - "lacey": { - "encounter": { - "1": "Ich werde dir mit meinem gewohnten Team, als Mitglied der Top Vier gegenüberstehen." - }, - "victory": { - "1": "Das war ein großartiger Kampf!" - }, - "defeat": { - "1": "Geben wir deinem Pokémon einen kräftigen Applaus für ihre Bemühungen!" - } - }, - "drayton": { - "encounter": { - "1": "Mann, ich liebe Stühle. Liebst du nicht auch Stühle? Was für Lebensretter.\n$Ich verstehe nicht, warum nicht jeder einfach die ganze Zeit sitzt. Stehen ist anstrengend!" - }, - "victory": { - "1": "Ich hätte damit rechnen sollen!" - }, - "defeat": { - "1": "Heh heh! Macht nichts, ich habe hier nur einen Sieg eingefahren.\n$Ich verstehe, wenn du sauer bist, aber geh nicht völlig auf mich los, okay?" - } - }, - "ramos": { - "encounter": { - "1": "Hast du den Garten-Spielplatz genossen, den ich mit all diesen kräftigen Pflanzen angelegt habe?\n$Ihre Stärke ist ein Zeichen meiner Stärke als Gärtner und Arenaleiter! \n$Bist du sicher, dass du bereit bist, dich dem zu stellen?" - }, - "victory": { - "1": "Du glaubst an deine Pokémon... Und sie glauben an dich... Es war ein feiner Kampf, Sprössling." - }, - "defeat": { - "1": "Hohoho... In der Tat. Schwache kleine Grashalme brechen selbst durch Beton." - } - }, - "viola": { - "encounter": { - "1": "Ob es die Tränen der Frustration nach einer Niederlage sind\n$oder das Aufblühen der Freude nach einem Sieg...\n$Beides sind großartige Motive für meine Kamera! Fantastisch! Das wird einfach fantastisch!\n$Jetzt komm auf mich zu!", - "2": "Mein Objektiv ist immer auf den Sieg fokussiert - ich lasse mir diesen Moment nicht entgehen!" - }, - "victory": { - "1": "Du und deine Pokémon haben mir eine ganz neue Tiefenschärfe gezeigt! Einfach fantastisch!", - "2": "Die Welt, die du durch ein Objektiv siehst, und die Welt,\n$die du mit einem Pokémon an deiner Seite siehst...\n$Die gleiche Welt kann völlig anders aussehen, je nach Blickwinkel." - }, - "defeat": { - "1": "Das Foto vom Moment meines Sieges wird ein echter Gewinner sein!", - "2": "Ja! Ich habe einige großartige Fotos gemacht!" - } - }, - "candice": { - "encounter": { - "1": "Du willst Frida herausfordern? Klar! Ich habe auf jemanden Starken gewartet!\n$Aber ich sollte dir sagen, ich bin stark, weil ich weiß, wie man sich konzentriert.", - "2": "Pokémon, Mode, Romantik... Es geht alles um Konzentration!\n$Ich werde dir zeigen, was ich meine. Mach dich bereit zu verlieren!" - }, - "victory": { - "1": "Ich muss sagen, ich bin von dir angetan! Vielleicht bewundere ich dich sogar ein bisschen.", - "2": "Wow! Du bist großartig! Du hast meinen Respekt verdient!\n$Ich denke, dein Fokus und Wille haben uns völlig umgehauen." - }, - "defeat": { - "1": "Ich habe deinen Siegeswillen gespürt, aber ich verliere nicht!", - "2": "Siehst du? Fridas Fokus! Der Fokus meiner Pokémon ist auch großartig!" - } - }, - "gardenia": { - "encounter": { - "1": "Du hast eine Sieger-Aura. Also, das wird Spaß machen. Lass uns kämpfen!" - }, - "victory": { - "1": "Unglaublich! Du bist sehr gut, nicht wahr?" - }, - "defeat": { - "1": "Ja! Meine Pokémon und ich sind perfekt abgestimmt!" - } - }, - "aaron": { - "encounter": { - "1": "Okay! Lass mich gegen dich antreten!" - }, - "victory": { - "1": "Kämpfen ist eine tiefe und komplexe Angelegenheit..." - }, - "defeat": { - "1": "Ein Sieg über ein Mitglied der Top Vier ist nicht leicht zu erringen." - } - }, - "cress": { - "encounter": { - "1": "Das ist korrekt! Ich und meine geschätzten Wasser-Pokémon werden deine Gegner im Kampf sein!" - }, - "victory": { - "1": "Verlieren? Ich? Das glaube ich nicht." - }, - "defeat": { - "1": "Das ist das passende Ergebnis, wenn ich dein Gegner bin." - } - }, - "allister": { - "encounter": { - "1": "'N-Nio.\nH-hier… g-geht's los…" - }, - "victory": { - "1": "Ich hätte beinahe meine Maske vor Schock verloren... Das war...\n$Wow. Ich sehe dein Können, wie es wirklich ist." - }, - "defeat": { - "1": "D-das war klasse!" - } - }, - "clay": { - "encounter": { - "1": "Harrumph! Du hast mich warten lassen, oder? Gut, jetzt will ich sehen, was du drauf hast!" - }, - "victory": { - "1": "Mann oh Mann... Es fühlt sich gut an, alles zu geben und trotzdem besiegt zu werden!" - }, - "defeat": { - "1": "Was wichtig ist, ist wie du auf eine Niederlage reagierst.\n$Deshalb sind Leute, die Niederlagen als Ansporn nutzen, um besser zu werden, stark." - } - }, - "kofu": { - "encounter": { - "1": "Ich werde dir ein ganzes Menü aus Wasser-Pokémon servieren! Aber versuch nicht, sie zu essen!" - }, - "victory": { - "1": "Vaultin' Veluza! Du bist ein lebhafter Mensch, nicht wahr!\n$Ein bisschen ZU lebhaft, wenn ich das so sagen darf!" - }, - "defeat": { - "1": "Komm bald wieder zu mir, hörst du?" - } - }, - "tulip": { - "encounter": { - "1": "Erlaube mir, meine Fähigkeiten einzusetzen, um deine niedlichen kleinen Pokémon noch schöner zu machen!" - }, - "victory": { - "1": "Deine Stärke hat eine Magie, die nicht wegzuwaschen ist." - }, - "defeat": { - "1": "Weißt du, in meinem Beruf verschwinden Menschen,\n$die in einem Bereich kein Talent haben, oft schnell und werden nie wieder gesehen." - } - }, - "sidney": { - "encounter": { - "1": "Mir gefällt der Blick, den du mir zuwirfst. Ich denke, du wirst mir einen guten Kampf liefern.\n$Das ist gut! Sieht wirklich gut aus! In Ordnung!\n$Du und ich, lass uns einen Kampf genießen, der nur hier stattfinden kann!" - }, - "victory": { - "1": "Nun, wie gefällt dir das? Ich habe verloren! Eh, es hat Spaß gemacht, also ist es egal." - }, - "defeat": { - "1": "Wir sind hier nicht nachtragend, okay?" - } - }, - "phoebe": { - "encounter": { - "1": "Während meines Trainings habe ich die Fähigkeit erlangt, mit Geister-Pokémon zu kommunizieren.\n$Ja, die Bindung, die ich zu Pokémon entwickelt habe, ist extrem stark.\n$Also komm, versuche nur, meinen Pokémon Schaden zuzufügen!" - }, - "victory": { - "1": "Oh, Mist. Ich habe verloren." - }, - "defeat": { - "1": "Ich freue mich darauf, dich irgendwann wieder zu bekämpfen!" - } - }, - "glacia": { - "encounter": { - "1": "Alles, was ich gesehen habe, sind Herausforderungen von schwachen Trainern und ihren Pokémon.\n$Und du? Es würde mich überaus freuen, wenn ich gegen dich alles geben könnte!" - }, - "victory": { - "1": "Du und deine Pokémon… Wie heiß eure Geister brennen!\n$Die alles verzehrende Hitze überwältigt.\n$Es ist kein Wunder, dass meine eisigen Fähigkeiten dir nichts anhaben konnten." - }, - "defeat": { - "1": "Ein leidenschaftlicher Kampf, in der Tat." - } - }, - "drake": { - "encounter": { - "1": "Um mit Pokémon als Partner zu kämpfen, weißt du, was dafür nötig ist? Weißt du, was gebraucht wird?\n$Wenn nicht, wirst du nie gegen mich gewinnen!" - }, - "victory": { - "1": "Hervorragend, muss ich sagen." - }, - "defeat": { - "1": "Ich habe alles für diesen Kampf gegeben!" - } - }, - "wallace": { - "encounter": { - "1": "Da ist etwas an dir… Eine Veränderung in deinem Auftreten.\n$Ich denke, ich spüre das bei dir. Zeig es mir. Zeig mir die Kraft, die du mit deinen Pokémon hast.\n$Und ich werde dir im Gegenzug eine Vorstellung von\n$Illusionen im Wasser von mir und meinen Pokémon präsentieren!" - }, - "victory": { - "1": "Bravo. Ich erkenne jetzt deine Authentizität und Großartigkeit als Pokémon-Trainer.\n$Ich freue mich sehr, dich und deine Pokémon kennengelernt zu haben. Du hast dich als würdig erwiesen." - }, - "defeat": { - "1": "Eine große Illusion!" - } - }, - "lorelei": { - "encounter": { - "1": "Niemand kann mich bei eisigen Pokémon übertreffen! Gefrierende Angriffe sind mächtig!\n$Deine Pokémon werden mir ausgeliefert sein, wenn sie erst einmal eingefroren sind! Hahaha!\n$Bist du bereit?" - }, - "victory": { - "1": "Wie kannst du es wagen!" - }, - "defeat": { - "1": "Es gibt nichts, was du tun kannst, wenn du erst einmal eingefroren bist." - } - }, - "will": { - "encounter": { - "1": "Ich habe auf der ganzen Welt trainiert und meine Psycho-Pokémon stark gemacht.\n$Ich kann nur besser werden! Verlieren ist keine Option!" - }, - "victory": { - "1": "Ich... ich kann es nicht... glauben..." - }, - "defeat": { - "1": "Das war knapp. Ich frage mich, was dir fehlt." - } - }, - "malva": { - "encounter": { - "1": "Ich fühle mich, als könnte mein Herz in Flammen aufgehen.\n$Ich brenne vor Hass auf dich, Wicht!" - }, - "victory": { - "1": "Was für Neuigkeiten... Ein neuer Herausforderer hat Pachira besiegt!" - }, - "defeat": { - "1": "Ich bin begeistert! Ja, begeistert, dass ich dich unter meinen Fußsohlen zerquetschen konnte." - } - }, - "hala": { - "encounter": { - "1": "Der alte Hala ist hier, um dich zum Schreien zu bringen!" - }, - "victory": { - "1": "Ich konnte die Kraft spüren, die du auf deiner Reise gewonnen hast." - }, - "defeat": { - "1": "Haha! Was für ein erfreulicher Kampf!" - } - }, - "molayne": { - "encounter": { - "1": "Ich habe die Kapitänsposition meinem Cousin Chrys gegeben,\n$aber ich bin zuversichtlich in meine Fähigkeiten.\n$Meine Stärke ist wie die einer Supernova!" - }, - "victory": { - "1": "Ich habe sicherlich einen interessanten Trainer zum Kämpfen gefunden!" - }, - "defeat": { - "1": "Ahaha. Was für ein interessanter Kampf." - } - }, - "rika": { - "encounter": { - "1": "Ich würde sagen, ich werde es dir leicht machen, aber... das wäre gelogen! Denke schnell!" - }, - "victory": { - "1": "Nicht schlecht, wirklich!" - }, - "defeat": { - "1": "Nahahaha! Du bist wirklich etwas Besonderes!" - } - }, - "bruno": { - "encounter": { - "1": "Wir werden dich mit unserer überlegenen Kraft niederschmettern! Hoo hah!" - }, - "victory": { - "1": "Warum? Wie konnte ich verlieren?" - }, - "defeat": { - "1": "Du kannst mich herausfordern, so oft du willst, aber das Ergebnis wird sich nie ändern!" - } - }, - "bugsy": { - "encounter": { - "1": "Ich bin Kai, der Arenaleiter von Azalea City. Ich bin ein großer Fan von Käfer-Pokémon." - }, - "victory": { - "1": "Wow, erstaunlich! Du bist ein Experte für Pokémon!\n$Meine Forschung ist noch nicht abgeschlossen. OK, du gewinnst." - }, - "defeat": { - "1": "Danke! Dank unseres Kampfes konnte ich auch Fortschritte in meiner Forschung machen!" - } - }, - "koga": { - "encounter": { - "1": "Fwahahahaha! Pokémon sind nicht nur rohe Gewalt - das wirst du bald genug sehen!" - }, - "victory": { - "1": "Ah! Du hast deinen Wert bewiesen!" - }, - "defeat": { - "1": "Hast du gelernt, die Techniken der Ninja zu fürchten?" - } - }, - "bertha": { - "encounter": { - "1": "Nun, würdest du dieser alten Dame zeigen, wie viel du gelernt hast?" - }, - "victory": { - "1": "Nun! Liebes Kind, ich muss sagen, das war sehr beeindruckend.\n$Deine Pokémon haben an dich geglaubt und ihr Bestes gegeben, um dir den Sieg zu sichern.\n$Obwohl ich verloren habe, finde ich mich mit einem dummen Grinsen wieder!" - }, - "defeat": { - "1": "Hahahahah! Sieht so aus, als hätte diese alte Dame gewonnen!" - } - }, - "lenora": { - "encounter": { - "1": "Nun denn, Herausforderer, ich werde erforschen,\n$wie du mit den Pokémon kämpfst, die du so liebevoll aufgezogen hast!" - }, - "victory": { - "1": "Meine Theorie über dich war korrekt. Du bist mehr als nur talentiert... \n$Du bist motiviert! Ich salutier' dir!" - }, - "defeat": { - "1": "Ah ha ha! Wenn du verlierst, analysiere warum und nutze dieses Wissen im nächsten Kampf!" - } - }, - "siebold": { - "encounter": { - "1": "Solange ich lebe, werde ich danach streben, die ultimative Küche...\n$und die stärksten Gegner im Kampf zu finden!" - }, - "victory": { - "1": "Ich werde die Erinnerung an dich und deine Pokémon für immer in meinem Herzen bewahren." - }, - "defeat": { - "1": "Unser Pokémon-Kampf war wie Nahrung für meine Seele. Er wird mich weiter antreiben.\n$So werde ich dir meinen Respekt erweisen, dass du alles im Kampf gegeben hast!" - } - }, - "roxie": { - "encounter": { - "1": "Mach dich bereit! Ich werde dir den Verstand aus dem Kopf schlagen!" - }, - "victory": { - "1": "Wahnsinn! Deine Vernunft ist schon giftiger als meine!" - }, - "defeat": { - "1": "Hey, komm schon! Sei ernst! Du musst mehr geben!" - } - }, - "olivia": { - "encounter": { - "1": "Hier ist keine Einführung nötig. Zeit, gegen mich, Mayla, zu kämpfen!" - }, - "victory": { - "1": "Wirklich lieblich... Sowohl du als auch deine Pokémon..." - }, - "defeat": { - "1": "Mmm-hmm." - } - }, - "poppy": { - "encounter": { - "1": "Oooh! Willst du einen Pokémon-Kampf mit mir führen?" - }, - "victory": { - "1": "Uagh?! Mmmuuuggghhh..." - }, - "defeat": { - "1": "Jaaa! Ich hab's geschafft! Ich hab dich besiegt! Du kannst kommen für... Für... Einen Revanchekampf?\n$Komm jederzeit für einen Revanchekampf!" - } - }, - "agatha": { - "encounter": { - "1": "Pokémon sind zum Kämpfen da! Ich zeige dir, wie ein echter Trainer kämpft!" - }, - "victory": { - "1": "Oh mein Gott! Du bist etwas Besonderes, Kind!" - }, - "defeat": { - "1": "Bahaha. So wird ein richtiger Kampf geführt!" - } - }, - "flint": { - "encounter": { - "1": "Hoffentlich bist du aufgewärmt, denn hier kommt der Urknall!" - }, - "victory": { - "1": "Unglaublich! Deine Moves sind so heiß, dass meine im Vergleich lauwarm wirken!" - }, - "defeat": { - "1": "Huh? War das alles? Ich denke, du brauchst etwas mehr Leidenschaft." - } - }, - "grimsley": { - "encounter": { - "1": "Der Gewinner nimmt alles, und es bleibt nichts für den Verlierer." - }, - "victory": { - "1": "Wenn man verliert, verliert man alles... Das nächste, wonach ich suche, wird auch der Sieg sein!" - }, - "defeat": { - "1": "Wenn jemand gewinnt, verliert derjenige, der gegen diese Person gekämpft hat." - } - }, - "caitlin": { - "encounter": { - "1": "Ich bin es, die erschien, als die Blume sich öffnete. Du, der du gewartet hast…\n$Du siehst aus wie ein Pokémon-Trainer mit verfeinerter Stärke und vertiefter Freundlichkeit.\n$Was ich in meinem Gegner suche, ist überlegene Stärke…\n$Bitte entfessle deine Kraft in vollem Umfang!" - }, - "victory": { - "1": "Meine Pokémon und ich haben so viel gelernt! Ich danke dir." - }, - "defeat": { - "1": "Ich strebe danach, mit Eleganz und Anmut zu siegen." - } - }, - "diantha": { - "encounter": { - "1": "Gegen dich und deine Pokémon zu kämpfen, die alle voller Hoffnung für die Zukunft sind...\n$Ehrlich gesagt, es erfüllt mich mit der Energie, die ich brauche, um jeden neuen Tag anzugehen!\n$Wirklich!" - }, - "victory": { - "1": "Den edlen Geist von dir und deinen Pokémon im Kampf zu erleben, hat mein Herz wirklich berührt..." - }, - "defeat": { - "1": "Oh, fantastisch! Was denkst du? Mein Team war ziemlich cool, oder?" - } - }, - "wikstrom": { - "encounter": { - "1": "Guten Tag, junger Herausforderer! Wahrlich, ich bin die berühmte Klinge aus gehärtetem Stahl,\n$Herzog Thymelot! Lasst den Kampf beginnen! En garde!" - }, - "victory": { - "1": "Ruhmreich! Das Vertrauen, das du mit deinen ehrenvollen Pokémon teilst, übertrifft sogar meines!" - }, - "defeat": { - "1": "Was für eine Magie ist das? Mein Herz, es hämmert unaufhörlich in meiner Brust!\n$Gegen einen so würdigen Gegner zu gewinnen, verleiht meiner Seele Flügel - so fliege ich!" - } - }, - "acerola": { - "encounter": { - "1": "Kämpfen macht einfach Spaß! Komm schon, ich schaffe das!" - }, - "victory": { - "1": "Ich bin... sprachlos! Wie hast du das gemacht?!" - }, - "defeat": { - "1": "Ehaha! Was für ein erstaunlicher Sieg!" - } - }, - "larry_elite": { - "encounter": { - "1": "Hallo... Ich bin's, Aoki.\n$Ich bin auch Mitglied der Top Vier, ja... Leider für mich." - }, - "victory": { - "1": "Nun, das hat uns den Wind aus den Segeln genommen..." - }, - "defeat": { - "1": "Es ist Zeit für ein Treffen mit dem Boss." - } - }, - "lance": { - "encounter": { - "1": "Ich habe auf dich gewartet. Erlaube mir, deine Fähigkeiten zu testen.", - "2": "Ich dachte, du würdest es so weit schaffen. Lass uns anfangen." - }, - "victory": { - "1": "Du hast mich besiegt. Du bist großartig!", - "2": "Ich hätte nie erwartet, dass ein anderer Trainer mich schlägt... Ich bin überrascht." - }, - "defeat": { - "1": "Das war knapp. Willst du es nochmal versuchen?", - "2": "Es ist nicht so, dass du schwach bist. Lass dich davon nicht stören." - } - }, - "karen": { - "encounter": { - "1": "Ich bin Melanie. Möchtest du einen Kampf mit meinen Unlicht-Pokémon?", - "2": "Ich bin anders als die, die du bereits getroffen hast.", - "3": "Du hast ein charmantes Team zusammengestellt. Unser Kampf wird sicher gut." - }, - "victory": { - "1": "Nein! Ich kann nicht gewinnen. Wie bist du so stark geworden?", - "2": "Ich werde nicht von meinem gewählten Weg abweichen.", - "3": "Der Champion freut sich darauf, dich kennenzulernen." - }, - "defeat": { - "1": "Das habe ich erwartet.", - "2": "Nun, das war relativ unterhaltsam.", - "3": "Komm mich jederzeit besuchen." - } - }, - "milo": { - "encounter": { - "1": "Es scheint, als würdest du Pokémon wirklich gut verstehen.\n$Das wird ein harter Kampf!\n$Ich muss mein Pokémon Dynamaximieren, wenn ich gewinnen will!" - }, - "victory": { - "1": "Die Kraft des Grases ist verwelkt... Was für ein unglaublicher Herausforderer!" - }, - "defeat": { - "1": "Das wird dich wirklich schockieren und in Ehrfurcht versetzen." - } - }, - "lucian": { - "encounter": { - "1": "Einen Moment, bitte. Das Buch, das ich lese, hat fast seinen spannenden Höhepunkt erreicht...\n$Der Held hat ein mystisches Schwert erlangt und steht vor seiner letzten Prüfung... Ah, egal.\n$Da du es so weit geschafft hast, lege ich das beiseite und kämpfe gegen dich.\n$Lass mich sehen, ob du genauso viel Ruhm erlangen wirst wie der Held meines Buches!" - }, - "victory": { - "1": "Ich sehe... Es scheint, als hättest du mich schachmatt gesetzt." - }, - "defeat": { - "1": "Ich habe einen Ruf zu wahren." - } - }, - "drasna": { - "encounter": { - "1": "Du musst ein starker Trainer sein. Ja, ganz stark...\n$Das sind wunderbare Neuigkeiten! Gegen Gegner wie dich und dein Team zu kämpfen,\n$lässt meine Pokémon wie Unkraut wachsen!" - }, - "victory": { - "1": "Oh, meine Güte. Das war wirklich ein schneller Kampf... Ich hoffe, du kommst bald wieder!" - }, - "defeat": { - "1": "Wie kann das sein?" - } - }, - "kahili": { - "encounter": { - "1": "Also, da bist du… Warum sehen wir nicht, wen die Winde heute begünstigen, dich… oder mich?" - }, - "victory": { - "1": "Es frustriert mich als Mitglied der Top Vier, aber es scheint, dass deine Stärke echt ist." - }, - "defeat": { - "1": "Das war ein Ass!" - } - }, - "hassel": { - "encounter": { - "1": "Bereite dich darauf vor, aus erster Hand zu erfahren,\n$wie sich der feurige Atem eines erbitterten Kampfes anfühlt!" - }, - "victory": { - "1": "Das Glück hat mir dieses Mal gelächelt, aber...\n$Angesichts des Verlaufs des Kampfes, wer weiß, ob ich das nächste Mal so viel Glück haben werde." - }, - "defeat": { - "1": "Das war ein Ass!" - } - }, - "blue": { - "encounter": { - "1": "Du musst ziemlich gut sein, um so weit zu kommen." - }, - "victory": { - "1": "Ich habe nur gegen ihn und jetzt gegen dich verloren… Ihn? Haha..." - }, - "defeat": { - "1": "Siehst du? Meine Stärke hat mich hierher gebracht." - } - }, - "piers": { - "encounter": { - "1": "Mach dich bereit für einen Moshpit mit mir und meiner Truppe! Spikeford, es ist Zeit zu rocken!" - }, - "victory": { - "1": "Ich und mein Team haben unser Bestes gegeben. Lass uns irgendwann wieder zu einem Kampf treffen..." - }, - "defeat": { - "1": "Meine Kehle ist heiser vom Schreien... Aber das war ein aufregender Kampf!" - } - }, - "red": { - "encounter": { - "1": "…!" - }, - "victory": { - "1": "…?" - }, - "defeat": { - "1": "…!" - } - }, - "jasmine": { - "encounter": { - "1": "Oh... Deine Pokémon sind beeindruckend. Ich denke, ich werde das genießen." - }, - "victory": { - "1": "Du bist wirklich stark. Ich muss mich auch viel mehr anstrengen." - }, - "defeat": { - "1": "Ich habe nie erwartet zu gewinnen." - } - }, - "lance_champion": { - "encounter": { - "1": "Ich bin immer noch der Champion. Ich werde nichts zurückhalten." - }, - "victory": { - "1": "Dies ist das Aufkommen eines neuen Champions." - }, - "defeat": { - "1": "Ich habe meinen Titel erfolgreich verteidigt." - } - }, - "steven": { - "encounter": { - "1": "Erzähl mir... Was hast du auf deiner Reise mit deinen Pokémon gesehen?\n$Was hast du gefühlt, als du so viele andere Trainer getroffen hast?\n$Durch dieses reiche Land zu reisen... Hat es etwas in dir geweckt?\n$Ich möchte, dass du mir alles zeigst, was du gelernt hast.\n$Meine Pokémon und ich werden dir im Gegenzug mit allem antworten, was wir wissen!" - }, - "victory": { - "1": "Also falle ich, der Champion, in der Niederlage..." - }, - "defeat": { - "1": "Das war gut verbrachte Zeit! Danke!" - } - }, - "cynthia": { - "encounter": { - "1": "Ich, Cynthia, akzeptiere deine Herausforderung! Es wird keine Pause von mir geben!" - }, - "victory": { - "1": "Egal wie viel Spaß der Kampf macht, er wird irgendwann enden..." - }, - "defeat": { - "1": "Selbst wenn du verlierst, verliere niemals deine Liebe zu Pokémon." - } - }, - "iris": { - "encounter": { - "1": "Weißt du was? Ich freue mich wirklich darauf, ernsthafte Kämpfe mit starken Trainern zu führen!\n$Ich meine, komm schon! Die Trainer, die es hierher schaffen, sind Trainer,\n$die den Sieg mit jeder Faser ihres Seins anstreben!\n$Und sie kämpfen Seite an Seite mit Pokémon, die unzählige schwierige Kämpfe durchgemacht haben!\n$Wenn ich mit solchen Leuten kämpfe, werde nicht nur ich stärker, sondern auch meine Pokémon!\n$Und wir werden uns noch besser kennenlernen! OK! Mach dich bereit!\n$Ich bin Iris, die Champion der Pokémon-Liga, und ich werde dich besiegen!" - }, - "victory": { - "1": "Aghhhh... Ich habe mein Bestes gegeben, aber wir haben verloren..." - }, - "defeat": { - "1": "Juhu! Wir haben gewonnen!" - } - }, - "hau": { - "encounter": { - "1": "Ich frage mich, ob ein Trainer anders kämpft,\n$je nachdem, ob er aus einer warmen oder einer kalten Region stammt.\n$Lass es uns testen!" - }, - "victory": { - "1": "Das war großartig! Ich denke, ich verstehe dein Vibe jetzt ein bisschen besser!" - }, - "defeat": { - "1": "Ma-an, das war eine Art Kampf!" - } - }, - "geeta": { - "encounter": { - "1": "Ich habe mich entschieden, erneut meinen Hut in den Ring zu werfen.\n$Komm jetzt... Zeig mir die Früchte deines Trainings." - }, - "victory": { - "1": "Ich freue mich auf Neuigkeiten über all deine Erfolge!" - }, - "defeat": { - "1": "Was ist los? Das ist doch nicht alles, oder?" - } - }, - "nemona": { - "encounter": { - "1": "Yesss! Ich bin so aufgeregt! Zeit, dass wir uns austoben!" - }, - "victory": { - "1": "Na gut, das ist ärgerlich, aber ich hatte trotzdem Spaß! Ich werde dich nächstes Mal erwischen!" - }, - "defeat": { - "1": "Das war ein großartiger Kampf! Definitiv fruchtbar." - } - }, - "leon": { - "encounter": { - "1": "Wir werden eine absolut großartige Zeit haben!" - }, - "victory": { - "1": "Meine Zeit als Champion ist vorbei...\n$Aber was für eine großartige Zeit war das!\n$Danke für den großartigsten Kampf, den ich je hatte!" - }, - "defeat": { - "1": "Das war eine absolut großartige Zeit!" - } - }, - "whitney": { - "encounter": { - "1": "Hey! Findest du nicht auch, dass Pokémon total süß sind?" - }, - "victory": { - "1": "Waaah! Waaah! Du bist so gemein!" - }, - "defeat": { - "1": "Und das war's!" - } - }, - "chuck": { - "encounter": { - "1": "Ha! Du willst mich herausfordern? Bist du mutig oder einfach nur unwissend?" - }, - "victory": { - "1": "Du bist stark! Würdest du mich bitte zu deinem Schüler machen?" - }, - "defeat": { - "1": "Da. Merkst du, wie viel mächtiger ich bin als du?" - } - }, - "katy": { - "encounter": { - "1": "Lass deine Wachsamkeit nicht nach, es sei denn, du willst von den Füßen gerissen werden!" - }, - "victory": { - "1": "Alle meine süßen kleinen Pokémon fielen wie Fliegen!" - }, - "defeat": { - "1": "Iss auf, mein süßes kleines Vivillon!" - } - }, - "pryce": { - "encounter": { - "1": "Jugend allein garantiert keinen Sieg! Erfahrung ist, was zählt." - }, - "victory": { - "1": "Hervorragend! Das war perfekt. Versuche nicht zu vergessen, was du jetzt fühlst." - }, - "defeat": { - "1": "Genau wie ich es mir vorgestellt habe." - } - }, - "clair": { - "encounter": { - "1": "Weißt du, wer ich bin? Und du wagst es trotzdem, mich herauszufordern?" - }, - "victory": { - "1": "Ich frage mich, wie weit du mit deinem Können kommen wirst. Das sollte faszinierend sein." - }, - "defeat": { - "1": "Das war's." - } - }, - "maylene": { - "encounter": { - "1": "Ich bin gekommen, um dich jetzt herauszufordern, und ich werde nichts zurückhalten.\n$Bitte bereite dich auf den Kampf vor!" - }, - "victory": { - "1": "Ich gestehe die Niederlage ein..." - }, - "defeat": { - "1": "Das war großartig." - } - }, - "fantina": { - "encounter": { - "1": "Du wirst mich herausfordern, ja? Aber ich werde gewinnen.\n$Das tut der Arenaleiter von Herzhofen, non?" - }, - "victory": { - "1": "Du bist so fantastisch stark. Ich weiß, warum ich verloren habe." - }, - "defeat": { - "1": "Ich bin so, so, sehr glücklich!" - } - }, - "byron": { - "encounter": { - "1": "Trainer! Du bist jung, genau wie mein Sohn, Veit. \n$Mit mehr jungen Trainern, die das Kommando übernehmen, ist die Zukunft der Pokémon hell! \n$Also, als Hürde für junge Leute nehme ich deine Herausforderung an!" - }, - "victory": { - "1": "Hmm! Meine robusten Pokémon - besiegt!" - }, - "defeat": { - "1": "Gwahahaha! Wie waren meine robusten Pokémon?!" - } - }, - "olympia": { - "encounter": { - "1": "Ein alter Brauch entscheidet über das Schicksal. Der Kampf beginnt!" - }, - "victory": { - "1": "Schaffe deinen eigenen Weg. Lass dir nichts in den Weg stellen. Dein Schicksal, deine Zukunft." - }, - "defeat": { - "1": "Unser Weg ist jetzt klar." - } - }, - "volkner": { - "encounter": { - "1": "Da du so weit gekommen bist, musst du ziemlich stark sein…\n$Ich hoffe, du bist der Trainer, der mich daran erinnert, wie viel Spaß es macht zu kämpfen!" - }, - "victory": { - "1": "Du hast mich besiegt…\n$Dein Verlangen und die edle Art, wie deine Pokémon für dich gekämpft haben…\n$Ich habe mich sogar während unseres Kampfes begeistert gefühlt. Das war ein sehr guter Kampf." - }, - "defeat": { - "1": "Es war überhaupt nicht schockierend…\n$Das ist nicht das, was ich wollte!" - } - }, - "burgh": { - "encounter": { - "1": "M'hm… Wenn ich diesen Kampf gewinne, habe ich das Gefühl,\n$dass ich ein Bild malen kann, das es so noch nie gegeben hat.\n$OK! Ich höre meine Kampf-Muse laut und deutlich. Lass uns gleich loslegen!", - "2": "Natürlich bin ich wirklich stolz auf all meine Pokémon! \n$Nun, dann... Lass uns gleich loslegen!" - }, - "victory": { - "1": "Ist es vorbei? Hat mich meine Muse verlassen?", - "2": "Hmm… Es ist vorbei! Du bist unglaublich!" - }, - "defeat": { - "1": "Wow… Irgendwie ist es doch schön, nicht wahr?", - "2": "Manchmal höre ich Leute sagen, es war ein hässlicher Sieg. \n$Ich denke, wenn du dein Bestes gibst, ist jeder Sieg schön." - } - }, - "elesa": { - "encounter": { - "1": "C'est fini! Wenn ich mir dessen sicher bin,\n$fühle ich einen elektrischen Stoß durch meinen Körper laufen!\n$Ich möchte dieses Gefühl erleben, also werden meine geliebten Pokémon\n$jetzt deinen Kopf zum Drehen bringen!" - }, - "victory": { - "1": "Ich wollte deinen Kopf zum Drehen bringen, aber du hast mich schockiert." - }, - "defeat": { - "1": "Das war irgendwie unbefriedigend… Wirst du nächstes Mal alles geben?" - } - }, - "skyla": { - "encounter": { - "1": "Es ist endlich Zeit für ein Duell! Das bedeutet den Pokémon-Kampf,\n$der entscheidet, wer an der Spitze steht, richtig? \n$Ich liebe es, auf dem Gipfel zu stehen! Weil man von hohen Orten aus für immer und ewig sehen kann! \n$Also, wie wäre es, wenn wir beide Spaß haben?" - }, - "victory": { - "1": "Dein Gegner im Kampf zu sein, ist eine neue Kraftquelle für mich. Danke!" - }, - "defeat": { - "1": "Gewinnen oder verlieren, man lernt immer etwas aus einem Kampf, richtig?" - } - }, - "brycen": { - "encounter": { - "1": "Es gibt auch Stärke darin, mit anderen Menschen und Pokémon zusammen zu sein. \n$Ihre Unterstützung zu erhalten, macht dich stärker. Ich werde dir diese Kraft zeigen!" - }, - "victory": { - "1": "Die wunderbare Kombination aus dir und deinen Pokémon! Was für eine schöne Freundschaft!" - }, - "defeat": { - "1": "Extreme Bedingungen testen und trainieren dich wirklich!" - } - }, - "drayden": { - "encounter": { - "1": "Was ich finden möchte, ist ein junger Trainer, der mir eine helle Zukunft zeigen kann.\n$Lass uns mit allem kämpfen, was wir haben: dein Können, meine Erfahrung und die Liebe,\n$mit der wir unsere Pokémon großgezogen haben!" - }, - "victory": { - "1": "Dieses intensive Gefühl, das mich nach einer Niederlage überkommt…\n$Ich weiß nicht, wie ich es beschreiben soll." - }, - "defeat": { - "1": "Harrumph! Ich weiß, dass deine Fähigkeit größer ist als das!" - } - }, - "grant": { - "encounter": { - "1": "Es gibt nur eine Sache, die ich mir wünsche. \n$Dass wir, indem wir einander übertreffen, einen Weg zu noch größeren Höhen finden." - }, - "victory": { - "1": "Du bist eine Mauer, die ich nicht überwinden kann!" - }, - "defeat": { - "1": "Gib nicht auf.\n$Das ist wirklich alles, was es dazu gibt.\n$Die wichtigsten Lektionen im Leben sind einfach." - } - }, - "korrina": { - "encounter": { - "1": "Zeit für Lady Connies großen Auftritt!" - }, - "victory": { - "1": "Es ist dein Wesen, das es deinen Pokémon ermöglicht, sich zu entwickeln!" - }, - "defeat": { - "1": "Was für ein explosiver Kampf!" - } - }, - "clemont": { - "encounter": { - "1": "Oh! Ich bin froh, dass wir uns getroffen haben!" - }, - "victory": { - "1": "Deine Leidenschaft für den Kampf inspiriert mich!" - }, - "defeat": { - "1": "Es sieht so aus, als würde meine Trainer-Wachstumsmaschine, Mach 2, wirklich funktionieren!" - } - }, - "valerie": { - "encounter": { - "1": "Oh, wenn das nicht ein junger Trainer ist… Es ist schön, dich so zu treffen.\n$Dann nehme ich an, du hast dir das Recht auf einen Kampf verdient, als Belohnung für deine Bemühungen.\n$Die schwer fassbare Fee mag zart wie eine Brise und empfindlich wie eine Blüte erscheinen,\n$aber sie ist stark." - }, - "victory": { - "1": "Ich hoffe, dass du morgen Dinge finden wirst, über die du lächeln kannst…" - }, - "defeat": { - "1": "Oh mein Gott, wie schade…" - } - }, - "wulfric": { - "encounter": { - "1": "Weißt du was? Wir reden alle groß über das, was man vom Kämpfen und von Bindungen lernt und all das…\n$Aber eigentlich mache ich es nur, weil es Spaß macht. \n$Wen kümmert das Prahlen? Lass uns kämpfen!" - }, - "victory": { - "1": "Hervorragend! Ich bin so hart wie ein Eisberg, aber du hast mich komplett durchschlagen!" - }, - "defeat": { - "1": "Kämpfe mit mir, und das passiert!" - } - }, - "kabu": { - "encounter": { - "1": "Jeder Trainer und jedes Pokémon trainiert hart, um den Sieg zu erringen.\n$Aber das bedeutet, dass auch dein Gegner hart arbeitet, um zu gewinnen.\n$Am Ende wird das Match von der Seite entschieden, die ihr wahres Potenzial entfesseln kann." - }, - "victory": { - "1": "Ich bin froh, dass ich heute gegen dich kämpfen konnte!" - }, - "defeat": { - "1": "Das ist eine großartige Möglichkeit für mich, mein eigenes Wachstum zu spüren!" - } - }, - "bea": { - "encounter": { - "1": "Hast du einen unerschütterlichen Geist, der sich nicht bewegt, egal wie du angegriffen wirst? \n$Ich denke, ich werde das einfach mal testen, oder?" - }, - "victory": { - "1": "Ich habe den Kampfgeist deiner Pokémon gespürt, als du sie in den Kampf geführt hast." - }, - "defeat": { - "1": "Das war die beste Art von Match, die man sich je wünschen kann." - } - }, - "opal": { - "encounter": { - "1": "Lass mich sehen, wie du und dein Partner-Pokémon euch verhalten!" - }, - "victory": { - "1": "Dein Rosa fehlt noch, aber du bist ein ausgezeichneter Trainer mit ausgezeichneten Pokémon." - }, - "defeat": { - "1": "Schade für dich, denke ich." - } - }, - "bede": { - "encounter": { - "1": "Ich nehme an, ich sollte zweifelsfrei beweisen, wie erbärmlich du bist und wie stark ich bin." - }, - "victory": { - "1": "Ich verstehe... Nun, das ist in Ordnung. Ich habe mich sowieso nicht wirklich angestrengt." - }, - "defeat": { - "1": "Nicht schlecht, muss ich sagen." - } - }, - "gordie": { - "encounter": { - "1": "Also, lass uns das hinter uns bringen." - }, - "victory": { - "1": "Ich möchte einfach in ein Loch kriechen... Nun, ich denke, es wäre eher wie ein Sturz von hier." - }, - "defeat": { - "1": "Kämpfe wie immer, der Sieg wird folgen!" - } - }, - "marnie": { - "encounter": { - "1": "Die Wahrheit ist, am Ende des Tages... Ich möchte wirklich nur Champion für mich selbst werden!\n$Also nimm es nicht persönlich, wenn ich dir den Hintern versohle!" - }, - "victory": { - "1": "OK, ich habe verloren... Aber ich habe viele gute Seiten von dir und deinen Pokémon gesehen!" - }, - "defeat": { - "1": "Ich hoffe, du hast unsere Kampfstrategien genossen." - } - }, - "raihan": { - "encounter": { - "1": "Ich werde den Champion besiegen, das ganze Turnier gewinnen und der Welt beweisen,\n$wie stark der großartige Roy wirklich ist!" - }, - "victory": { - "1": "Ich sehe sogar gut aus, wenn ich verliere.\n$Es ist ein echter Fluch.\n$Ich denke, es ist Zeit für ein weiteres Selfie!" - }, - "defeat": { - "1": "Lass uns ein Selfie zur Erinnerung machen." - } - }, - "brassius": { - "encounter": { - "1": "Ich nehme an, du bist bereit? Lassen wir unser gemeinsames Kunstwerk beginnen!" - }, - "victory": { - "1": "Ahhh... avant-garde!" - }, - "defeat": { - "1": "Ich werde sofort mit einem neuen Stück beginnen!" - } - }, - "iono": { - "encounter": { - "1": "Hey, Leute! Es ist Zeit für Enigmaras EnigmaTV!!! Naaaa, alles klärchen?\n$Hola, ciao und hallöle! Und schon bist du gefangen in meinem Elektronetz!\n$Wer ich bin, fragst du? Na, Enigmara natürlich! Ich bin hier die Arenaleiterin." - }, - "victory": { - "1": "Du leuchtest ja so hell wie ein tausendfacher Donnerblitz!" - }, - "defeat": { - "1": "Deine Augen gehören MIR!" - } - }, - "larry": { - "encounter": { - "1": "Wenn alles gesagt und getan ist, ist Einfachheit am stärksten." - }, - "victory": { - "1": "Eine Portion Niederlage, hm?" - }, - "defeat": { - "1": "Ich mache Schluss für heute." - } - }, - "ryme": { - "encounter": { - "1": "Komm schon, Baby! Bring mich zum Zittern bis auf die Knochen!" - }, - "victory": { - "1": "Du bist cool, mein Freund - du bewegst meine SEELE!" - }, - "defeat": { - "1": "Bis später, Baby!" - } - }, - "grusha": { - "encounter": { - "1": "Alles, was ich tun muss, ist sicherzustellen, dass die Kraft meiner Pokémon dich bis auf die Knochen kühlt!" - }, - "victory": { - "1": "Deine brennende Leidenschaft... Ich mag sie ehrlich gesagt irgendwie." - }, - "defeat": { - "1": "Es hat nicht für dich gereicht." - } - }, - "marnie_elite": { - "encounter": { - "1": "Du hast es so weit geschafft, hm? Mal sehen, ob du mit meinen Pokémon umgehen kannst!", - "2": "Ich werde mein Bestes geben, aber denke nicht, dass ich es dir leicht machen werde!" - }, - "victory": { - "1": "Ich kann nicht glauben, dass ich verloren habe... Aber du hast den Sieg verdient. Gut gemacht!", - "2": "Es sieht so aus, als hätte ich noch viel zu lernen. Toller Kampf trotzdem!" - }, - "defeat": { - "1": "Du hast gut gekämpft, aber ich habe den Vorteil! Viel Glück beim nächsten Mal!", - "2": "Es scheint, als hätte sich mein Training ausgezahlt. Danke für den Kampf!" - } - }, - "nessa_elite": { - "encounter": { - "1": "Die Gezeiten wenden sich zu meinen Gunsten. Bereit, weggespült zu werden?", - "2": "Lass uns mit diesem Kampf Wellen schlagen! Ich hoffe, du bist vorbereitet!" - }, - "victory": { - "1": "Du hast diese Gewässer perfekt navigiert... Gut gemacht!", - "2": "Es sieht so aus, als wären meine Strömungen kein Match für dich. Tolle Arbeit!" - }, - "defeat": { - "1": "Wasser findet immer einen Weg. Das war ein erfrischender Kampf!", - "2": "Du hast gut gekämpft, aber die Macht des Ozeans ist unaufhaltsam!" - } - }, - "bea_elite": { - "encounter": { - "1": "Bereite dich vor! Mein Kampfgeist brennt hell!", - "2": "Mal sehen, ob du mit meinem unaufhaltsamen Tempo mithalten kannst!" - }, - "victory": { - "1": "Deine Stärke... Sie ist beeindruckend. Du hast diesen Sieg wirklich verdient.", - "2": "Ich habe diese Intensität noch nie zuvor gespürt. Unglaubliche Leistung!" - }, - "defeat": { - "1": "Ein weiterer Sieg für mein intensives Trainingsprogramm! Gut gemacht!", - "2": "Du hast Stärke, aber ich habe härter trainiert. Toller Kampf!" - } - }, - "allister_elite": { - "encounter": { - "1": "Die Schatten fallen... Bist du bereit, dich deinen Ängsten zu stellen?", - "2": "Mal sehen, ob du mit der Dunkelheit, die ich befehle, umgehen kannst." - }, - "victory": { - "1": "Du hast die Schatten vertrieben... Für jetzt. Gut gemacht.", - "2": "Dein Licht hat meine Dunkelheit durchdrungen. Tolle Leistung." - }, - "defeat": { - "1": "Die Schatten haben gesprochen... Deine Stärke reicht nicht aus.", - "2": "Die Dunkelheit triumphiert... Vielleicht wirst du nächstes Mal das Licht sehen." - } - }, - "raihan_elite": { - "encounter": { - "1": "Ein Sturm zieht auf! Mal sehen, ob du diesen Kampf überstehst!", - "2": "Mach dich bereit, dem Auge des Sturms zu begegnen!" - }, - "victory": { - "1": "Du hast den Sturm bezwungen... Unglaubliche Leistung!", - "2": "Du hast die Winde perfekt geritten... Toller Kampf!" - }, - "defeat": { - "1": "Ein weiterer Sturm überstanden, ein weiterer Sieg errungen! Gut gekämpft!", - "2": "Du bist in meinen Sturm geraten! Viel Glück beim nächsten Mal!" - } - }, - "alder": { - "encounter": { - "1": "Mach dich bereit für einen Kampf gegen den stärksten Trainer in Einall! Mich - Lauro!" - }, - "victory": { - "1": "Gut gemacht! Du hast wirklich ein unvergleichliches Talent." - }, - "defeat": { - "1": "Ein frischer Wind weht durch mein Herz...\n$Was für ein außergewöhnliches Gefühl!" - } - }, - "kieran": { - "encounter": { - "1": "Durch harte Arbeit werde ich immer stärker und stärker!\n$Ich verliere nicht." - }, - "victory": { - "1": "Ich kann es nicht glauben...\n$Was für ein lustiger und herzzerreißender Kampf!" - }, - "defeat": { - "1": "Wow, was für ein Kampf!\n$Es ist Zeit für dich, noch härter zu trainieren." - } - }, - "rival": { - "encounter": { - "1": "@c{smile}Hey, ich habe dich gesucht! Ich weiß, dass du es nicht erwarten konntest loszugehen,\n$aber hättest ja wenigstens Tschüss sagen können...\n$@c{smile_eclosed}Du verfolgst also wirklich deinen Traum?\nIch kann es kaum glauben.\n$@c{serious_smile_fists}Da wir schon einmal hier sind, wie wäre es mit einem Kampf?\nImmerhin muss ich doch sicherstellen, dass du bereit bist.\n$@c{serious_mopen_fists}Halte dich nicht zurück, zeig mir alles was du hast!" - }, - "victory": { - "1": "@c{shock}Wow…Du hast mich komplett überrumpelt.\nBist du wirklich ein Anfänger?\n$@c{smile}Vielleicht war es einfach etwas Glück, aber…\nWer weiß, vielleicht schaffst du es irgendwann\n$ja wirklich ganz groß raus zu kommen.\n$Übrigens, der Professor hat mich gebeten dir diese Items zu geben. Die sehen wirklich cool aus.\n$@c{serious_smile_fists}Viel Glück da draußen!" - } - }, - "rival_female": { - "encounter": { - "1": "@c{smile_wave}Da bist du! Ich habe schon überall nach dir gesucht!\n@c{angry_mopen}Hast du etwas vergessen\n$deiner besten Freundin Tschüss zu sagen?\n$@c{smile_ehalf}Du folgst deinem Traum, oder?\nDas ist wirklich heute…\n$@c{smile}Naja, ich vergeben dir, dass du mich vergessen hast, aber nur unter einer Bedingung. @c{smile_wave_wink}Du musst gegen mich kämpfen!\n$@c{angry_mopen}Gib alles! Wir wollen doch nicht, dass dein Abenteuer endet bevor es begonnen hat, richtig?" - }, - "victory": { - "1": "@c{shock}Du hast gerade erst angefangen und bist schon so stark?!@d{96} @c{angry}Du hast sowas von betrogen, oder?\n$@c{smile_wave_wink}Ich mach nur Spaß!@d{64} @c{smile_eclosed}Ich habe ehrlich verloren… Ich habe das Gefühl, dass du es dort draußen weit bringen wirst.\n$@c{smile}Übrigens, der Professor hat mich gebeten dir diese Items zu geben. Ich hoffe sie sind hilfreich!\n$@c{smile_wave}Gib wie immer dein Bestes! Ich glaube an dich!" - } - }, - "rival_2": { - "encounter": { - "1": "@c{smile}Hey, du auch hier?\n@c{smile_eclosed}Immernoch ungeschlagen, hmm…?\n$@c{serious_mopen_fists}Ich weiß es sieht so aus, als wäre ich dir hierher gefolgt, aber das ist so nicht ganz richtig.\n$@c{serious_smile_fists}Ehrlicherweise kann ich es, seit du mich damals besiegt hast, garnicht erwarten erneut gegen dich zu kämpfen.\n$Ich habe selbst hart traniert. Ich werde dir diesesmal also ein würdigerer Gegner sein!.\n$@c{serious_mopen_fists}Halt dich nicht zurück, genauso wie beim letzten Mal!\nLos gehts!" - }, - "victory": { - "1": "@c{neutral_eclosed}Oh. Ich war also zu sehr von mir überzeugt.\n$@c{smile}Das ist Ok. Ich hatte mir schon gedacht, dass sowas passiert.\n\n$@c{serious_mopen_fists}Es bedeutet einfach, dass ich mich beim nächsten Mal mehr anstrengen muss!\n\n$@c{smile}Nicht, dass du wirklich Hilfe benötigen würdest, aber ich habe hier noch eins von diesen Dingern herumliegen.\n$Du kannst es haben.\n\n$@c{serious_smile_fists}Erwarte aber nicht, dass ich dir noch mehr gebe!\nIch kann meinen Rivalen doch keine Vorteile verschaffen.\n$@c{smile}Egal, pass auf dich auf!" - } - }, - "rival_2_female": { - "encounter": { - "1": "@c{smile_wave}Oh, wie schön dich hier zu trefen. Sieht so aus als wärst du noch ungeschlagen. @c{angry_mopen}Hmm… Nicht schlecht!\n$@c{angry_mopen}Ich weiß was du denkst, und nein, ich habe dich nicht verfolgt. @c{smile_eclosed}Ich bin einfach in der Gegend gewesen.\n$@c{smile_ehalf}Ich freu mich für dich, aber ich muss dich wissen lassen, dass es auch Ok ist ab und zu mal zu verlieren.\n$@c{smile}Wir lernen oft mehr aus unseren Fehlern, als aus unseren Erfolgen.\n$@c{angry_mopen}Auf jeden Fall habe ich für unseren Rückkampf hart traniert. Also zeig mir was du drauf hast!" - }, - "victory": { - "1": "@c{neutral}Ich… sollte dieses Mal doch nicht verlieren…\n$@c{smile}Na gut. Das bedeutet ich muss noch härter tranieren!\n$@c{smile_wave}Ich habe noch eins von diesen Dingern!\n@c{smile_wave_wink}Kein Grund mir zu danken~.\n$@c{angry_mopen}Das ist aber das Letzte! Du bekommst ab jett keine Geschenke mehr von mir!\n$@c{smile_wave}Bleib stark!" - }, - "defeat": { - "1": "Es ist Ok manchmal zu verlieren…" - } - }, - "rival_3": { - "encounter": { - "1": "@c{smile}Hey, schau mal wen wir hier haben! Ist schon eine Weile her.\n@c{neutral}Du bist… immernoch ungeschlagen?\n$@c{neutral_eclosed}Die Dinge waren irgendwie... seltsam.\nEs ist Zuhause einfach nicht das Gleiche ohne dich.\n$@c{serious}Ich weiß es ist selbstsüchtig, aber ich musste das einfach mal loswerden.\n$@c{neutral_eclosed}Denkst du nicht, dass du dich etwas übernommen hast?\n$@c{serious}Es ist nicht realistisch immer zu gewinnen\nWir müssen manchmal verlieren. Um daran zu wachsen.\n$@c{neutral_eclosed}Du hattest einen guten Lauf, aber es liegt noch so viel vor dir. Es wird nicht gerade einfacher. @c{neutral}Bist du bereit dafür?\n$@c{serious_mopen_fists}Falls ja, beweise es mir!" - }, - "victory": { - "1": "@c{angry_mhalf}Das ist doch Schwachsinn… Ich habe kaum aufgehört zu tranieren…\n$Warum bin ich immernoch so viel schwächer?" - } - }, - "rival_3_female": { - "encounter": { - "1": "@c{smile_wave}Lange nicht gesehen! Immernoch nicht verloren?\n@c{angry}Du fängst mich an zu nerven. @c{smile_wave_wink}Ich mach nur Spaß!\n$@c{smile_ehalf}Aber ehrlich, vermisst du dein Zuhause garnicht? Oder mich?\n$Ich… Ich meine, wir vermissen dich wirklich.\n$@c{smile_eclosed}Ich unterstütze dich bei deinem Traum, aber die Realität ist, du wirst früher oder später verlieren.\n$@c{smile}Und ich bin für dich da falls du es tust, wie immer.\n@c{angry_mopen}Also, zeig mir wie stark du geworden bist!" - }, - "victory": { - "1": "@c{shock}Nach allem was ich getan habe… war es immernoch nicht genug…?\n$Wenn es so weiter geht hole ich nie auf…" - }, - "defeat": { - "1": "Du hast dein Bestes gegeben. Lass uns nach Hause gehen." - } - }, - "rival_4": { - "encounter": { - "1": "@c{neutral}Hey.\n$Ich werde jetzt keine Gefälligkeiten mit dir austauschen.\n@c{neutral_eclosed}Ich bin hier um zu gewinnen. Mehr nicht.\n$@c{serious_mhalf_fists}Durch mein Traning habe ich gelernt mein Potenzial zu maximieren.\n$@c{smile}Man hat deutlich mehr Zeit, wenn man auf Schlaf und unnötige soziale Interaktionen verzichtet. \n$@c{serious_mopen_fists}Das ist alles nicht mehr wichtig, nicht solange ich nicht gewonnen habe.\n$@c{neutral_eclosed}Ich bin an dem Punkt an dem ich nicht mehr verliere.\n@c{smile_eclosed}Ich schätze deine Einstellung war doch nicht so falsch.\n$@c{angry_mhalf}Nur die Schwachen verlieren, und ich bin nicht mehr schwach.\n$@c{serious_mopen_fists}Bereite dich vor zu verlieren." - }, - "victory": { - "1": "@c{neutral}Was…@d{64} Was bist du?" - } - }, - "rival_4_female": { - "encounter": { - "1": "@c{neutral}Ich bins! Du hast mich doch nicht vergessen, oder?\n$@c{smile}Du solltest stolz auf dich sein. Du hast es soweit gebracht. Glückwunsch!\n$Aber hier endet deine Reise jetzt.\n$@c{smile_eclosed}Du hast etwas in mir erwachen lassen, etwas von dem ich nicht wusste, dass es da war.\n$Alles was ich jetzt mache ist tranieren. @c{smile_ehalf}Ich esse oder schlafe kaum. \n$Ich traniere meine Pokémon den ganzen Tag. Und werde immer stärker.\n$@c{neutral}Genau genommen, erkenne ich mich garnicht wieder.\n$Und jetzt habe ich endlich meinen Höhepunkt erreicht.\nNiemand kann mich jetzt noch schlagen.\n$Und weißt du was? Das ist alles wegen dir.\n@c{smile_ehalf}Ich weiß nicht ob ich dir danken, oder dich hassen soll!\n$@c{angry_mopen}Mach dich bereit!" - }, - "victory": { - "1": "@c{neutral}Was…@d{64} Was bist du?" - }, - "defeat": { - "1": "$@c{smile}Du solltest stolz darauf sein wie weit du es geschafft hast." - } - }, - "rival_5": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - } - }, - "rival_5_female": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - }, - "defeat": { - "1": "$@c{smile_ehalf}…" - } - }, - "rival_6": { - "encounter": { - "1": "@c{smile_eclosed}So sehen wir uns wieder.\n$@c{neutral}Ich hatte Zeit über alles nachzudenken.\nÜber den Grund, warum alles so merkwürdig erscheint.\n$@c{neutral_eclosed}Dein Traum, mein Antrieb dich besiegen zu wollen…\nEs ist alles Teil von etwas Größerem.\n$@c{serious}Es geht nicht um dich, oder mich… Es geht um diese Welt.\n@c{serious_mhalf_fists}Es ist mein Schicksal dich an deine Grenzen zu treiben.\n$@c{neutral_eclosed}Ob ich meine Aufgabe erfüllt habe kann ich nicht sagen, aber ich habe alles getan was ich konnte.\n$@c{neutral}Der Ort an dem wir uns befinden ist angsteinflößend… \n$Trotzdem fühlt es sich so an, als würde mich das nicht stören, als wäre ich bereits schonmal hier gewesen.\n$@c{serious_mhalf_fists}Dir geht es doch genauso, oder?\n$@c{serious}…und irgendwas hier spricht zu mir.\nDas ist alles was die Welt seit langem kennt.\n$Die Zeiten die wir zusammen verbracht haben, die so nah erscheinen, sind nichts als eine ferne Erinnerung.\n$@c{neutral_eclosed}Wer weiß, ob sie jemals real waren?\n$@c{serious_mopen_fists}Du musst weiter gehen, denn wenn du es nicht tust, wird es nie enden. Du bist der Einzige, der das schaffen kann.\n$@c{serious_smile_fists}Ich… Ich weiß nicht was das alles bedeutet, aber ich fühle, dass es wahr ist.\n$@c{serious_mopen_fists}Wenn du mich nicht hier und jetzt besiegen kannst, hast du keine Chance." - }, - "victory": { - "1": "@c{smile_eclosed}Es sieht so aus, als wäre meine Arbeit getan.\n$Ich will dass du mir eine Sache versprichst.\n@c{smile}Komm bitte nach Hause nachdem du die Welt gerettet hast." - } - }, - "rival_6_female": { - "encounter": { - "1": "@c{smile_ehalf}Jetzt sind es wieder nur wir zwei.\n$@c{smile_eclosed}Weißt du, egal wie ich es drehe und wende…\n$@c{smile_ehalf}Irgendwas stört mich an der ganzen Sache, es erscheint mir irgendwie komisch…\n$@c{smile}Du hast deinen Traum, und ich habe diesen Antrieb…\n$Ich kann nicht anders, als zu glauben, dass es einen größeren Zweck gibt.\n$@c{smile_eclosed}Ich denke, ich sollte dich an deine Grenzen treiben.\n$@c{smile_ehalf}Ich bin mir nicht sicher, ob ich meine Aufgabe erfüllt habe, aber ich habe mein Bestes gegeben.\n$Irgendwas an diesem komischen und furchteinflößenden Ort… All das scheint so klar…\n$Es… ist alles was die Welt seit langem kennt.\n$@c{smile_eclosed}Es kommt mir so vor als könnte ich mich kaum an die Erinnerungen erinnern, die wir zusammen hatten.\n$@c{smile_ehalf}Waren sie jemals real? Sie scheinen so weit weg…\n$@c{angry_mopen}Du musst weiter gehen, denn wenn du es nicht tust, wird es nie enden. Du bist der Einzige, der das schaffen kann.\n$@c{smile_ehalf}Ich… Ich weiß nicht was das alles bedeutet, aber ich fühle, dass es wahr ist.\n$@c{neutral}Wenn du mich nicht hier und jetzt besiegen kannst, hast du keine Chance." - }, - "victory": { - "1": "@c{smile_ehalf}Ich… Ich denke ich habe meine Aufgabe erfüllt.\n$@c{smile_eclosed}Versprich mir… Nachdem du die Welt geheilt hast… Komm bitte sicher nach Hause. \n$@c{smile_ehalf}…Danke." - } - } -} diff --git a/src/locales/de/dialogue-misc-male.json b/src/locales/de/dialogue-misc-male.json deleted file mode 100644 index 1529831d7c5..00000000000 --- a/src/locales/de/dialogue-misc-male.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "ending": "@c{smile}Oh? Du hast gewonnen?@d{96} @c{smile_eclosed}Ich schätze, das hätte ich wissen sollen.\n$Aber, du bist jetzt zurück.\n$@c{smile}Es ist vorbei.@d{64} Du hast die Schleife beendet.\n$@c{serious_smile_fists}Du hast auch deinen Traum erfüllt, nicht wahr?\nDu hast nicht einmal verloren.\n$@c{neutral}Ich bin der Einzige, der sich daran erinnern wird, was du getan hast.@d{96}\n$Ich schätze, das ist in Ordnung, oder?\n$@c{serious_smile_fists}Deine Legende wird immer in unseren Herzen weiterleben.\n$@c{smile_eclosed}Wie auch immer, ich habe genug von diesem Ort, oder nicht? Lass uns nach Hause gehen.\n$@c{serious_smile_fists}Vielleicht können wir, wenn wir zurück sind, noch einen Kampf haben?\n$Wenn du dazu bereit bist.", - "ending_female": "@c{shock}Du bist zurück?@d{32} Bedeutet das…@d{96} du hast gewonnen?!\n$@c{smile_ehalf}Ich hätte wissen sollen, dass du es in dir hast.\n$@c{smile_eclosed}Natürlich… ich hatte immer dieses Gefühl.\n$@c{smile}Es ist jetzt vorbei, richtig? Du hast die Schleife beendet.\n$@c{smile_ehalf}Du hast auch deinen Traum erfüllt, nicht wahr?\n$Du hast nicht einmal verloren.\n$Ich werde die Einzige sein, die sich daran erinnert, was du getan hast.\n$@c{angry_mopen}Ich werde versuchen, es nicht zu vergessen!\n$@c{smile_wave_wink}Nur ein Scherz!@d{64} @c{smile}Ich würde es nie vergessen.@d{32}\n$Deine Legende wird in unseren Herzen weiterleben.\n$@c{smile_wave}Wie auch immer,@d{64} es wird spät…@d{96} denke ich?\nEs ist schwer zu sagen an diesem Ort.\n$Lass uns nach Hause gehen. \n$@c{smile_wave_wink}Vielleicht können wir morgen noch einen Kampf haben, der alten Zeiten willen?", - "ending_endless": "Glückwunsch! Du hast das aktuelle Ende erreicht!\nWir arbeiten an mehr Spielinhalten.", - "ending_name": "Entwickler" -} diff --git a/src/locales/de/dialogue-misc-female.json b/src/locales/de/dialogue-misc.json similarity index 100% rename from src/locales/de/dialogue-misc-female.json rename to src/locales/de/dialogue-misc.json diff --git a/src/locales/de/dialogue-female.json b/src/locales/de/dialogue.json similarity index 100% rename from src/locales/de/dialogue-female.json rename to src/locales/de/dialogue.json diff --git a/src/locales/en/config.ts b/src/locales/en/config.ts index 36593befb8f..024f7f10108 100644 --- a/src/locales/en/config.ts +++ b/src/locales/en/config.ts @@ -15,14 +15,10 @@ import bgmName from "./bgm-name.json"; import biome from "./biome.json"; import challenges from "./challenges.json"; import commandUiHandler from "./command-ui-handler.json"; -import dialogueMale from "./dialogue-male.json"; -import dialogueFemale from "./dialogue-female.json"; -import dialogueEndbossMale from "./dialogue-final-boss-male.json"; -import dialogueEndbossFemale from "./dialogue-final-boss-female.json"; -import dialogueMiscMale from "./dialogue-misc-male.json"; -import dialogueMiscFemale from "./dialogue-misc-female.json"; -import dialogueDoubleBattleMale from "./dialogue-double-battle-male.json"; -import dialogueDoubleBattleFemale from "./dialogue-double-battle-female.json"; +import dialogue from "./dialogue.json"; +import battleSpecDialogue from "./dialogue-final-boss.json"; +import miscDialogue from "./dialogue-misc.json"; +import doubleBattleDialogue from "./dialogue-double-battle.json"; import egg from "./egg.json"; import fightUiHandler from "./fight-ui-handler.json"; import filterBar from "./filter-bar.json"; @@ -76,14 +72,10 @@ export const enConfig = { commandUiHandler, common, achv, - PGMdialogue: dialogueMale, - PGFdialogue: dialogueFemale, - PGMbattleSpecDialogue: dialogueEndbossMale, - PGFbattleSpecDialogue: dialogueEndbossFemale, - PGMmiscDialogue: dialogueMiscMale, - PGFmiscDialogue: dialogueMiscFemale, - PGMdoubleBattleDialogue: dialogueDoubleBattleMale, - PGFdoubleBattleDialogue: dialogueDoubleBattleFemale, + dialogue, + battleSpecDialogue, + miscDialogue, + doubleBattleDialogue, egg, fightUiHandler, filterBar, diff --git a/src/locales/en/dialogue-double-battle-male.json b/src/locales/en/dialogue-double-battle-male.json deleted file mode 100644 index 8e8e1d813fb..00000000000 --- a/src/locales/en/dialogue-double-battle-male.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "blue_red_double": { - "encounter": { - "1": "Blue: Hey Red, let's show them what we're made of!\n$Red: ...\n$Blue: This is Pallet Town Power!" - }, - "victory": { - "1": "Blue: That was a great battle!\n$Red: ..." - } - }, - "red_blue_double": { - "encounter": { - "1": "Red: ...!\n$Blue: He never talks much.\n$Blue: But dont let that fool you! He is a champ after all!" - }, - "victory": { - "1": "Red: ...!\n$Blue: Next time we will beat you!" - } - }, - "tate_liza_double": { - "encounter": { - "1": "Tate: Are you surprised?\n$Liza: We are two gym leaders at once!\n$Tate: We are twins!\n$Liza: We dont need to talk to understand each other!\n$Tate: Twice the power...\n$Liza: Can you handle it?" - }, - "victory": { - "1": "Tate: What? Our combination was perfect!\n$Liza: Looks like we need to train more..." - } - }, - "liza_tate_double": { - "encounter": { - "1": "Liza: Hihihi... Are you surprised?\n$Tate: Yes, we are really two gym leaders at once!\n$Liza: This is my twin brother Tate!\n$Tate: And this is my twin sister Liza!\n$Liza: Don't you think we are a perfect combination?" - }, - "victory": { - "1": "Liza: Are we...\n$Tate: ...not as strong as we thought?" - } - }, - "wallace_steven_double": { - "encounter": { - "1": "Steven: Wallace, let's show them the power of the champions!\n$Wallace: We will show you the power of Hoenn!\n$Steven: Let's go!" - }, - "victory": { - "1": "Steven: That was a great battle!\n$Wallace: We will win next time!" - } - }, - "steven_wallace_double": { - "encounter": { - "1": "Steven: Do you have any rare Pokémon?\n$Wallace: Steven... We are here for a battle, not to show off our Pokémon.\n$Steven: Oh... I see... Let's go then!" - }, - "victory": { - "1": "Steven: Now that we are done with the battle, let's show off our Pokémon!\n$Wallace: Steven..." - } - }, - "alder_iris_double": { - "encounter": { - "1": "Alder: We are the strongest trainers in Unova!\n$Iris: Fights against strong trainers are the best!" - }, - "victory": { - "1": "Alder: Wow! You are super strong!\n$Iris: We will win next time!" - } - }, - "iris_alder_double": { - "encounter": { - "1": "Iris: Welcome Challenger! I am THE Unova Champion!\n$Alder: Iris, aren't you a bit too excited?" - }, - "victory": { - "1": "Iris: A loss like this is not easy to take...\n$Alder: But we will only get stronger with every loss!" - } - }, - "piers_marnie_double": { - "encounter": { - "1": "Marnie: Brother, let's show them the power of Spikemuth!\n$Piers: We bring darkness!" - }, - "victory": { - "1": "Marnie: You brought light to our darkness!\n$Piers: Its too bright..." - } - }, - "marnie_piers_double": { - "encounter": { - "1": "Piers: Ready for a concert?\n$Marnie: Brother... They are here to fight, not to sing..." - }, - "victory": { - "1": "Piers: Now that was a great concert!\n$Marnie: Brother..." - } - } -} \ No newline at end of file diff --git a/src/locales/en/dialogue-double-battle-female.json b/src/locales/en/dialogue-double-battle.json similarity index 95% rename from src/locales/en/dialogue-double-battle-female.json rename to src/locales/en/dialogue-double-battle.json index 8e8e1d813fb..9484aa2edcc 100644 --- a/src/locales/en/dialogue-double-battle-female.json +++ b/src/locales/en/dialogue-double-battle.json @@ -57,7 +57,8 @@ }, "iris_alder_double": { "encounter": { - "1": "Iris: Welcome Challenger! I am THE Unova Champion!\n$Alder: Iris, aren't you a bit too excited?" + "1": "Iris: Welcome Challenger! I am THE Unova Champion!\n$Alder: Iris, aren't you a bit too excited?", + "1_female": null }, "victory": { "1": "Iris: A loss like this is not easy to take...\n$Alder: But we will only get stronger with every loss!" @@ -73,7 +74,8 @@ }, "marnie_piers_double": { "encounter": { - "1": "Piers: Ready for a concert?\n$Marnie: Brother... They are here to fight, not to sing..." + "1": "Piers: Ready for a concert?\n$Marnie: Brother... They are here to fight, not to sing...", + "1_female": null }, "victory": { "1": "Piers: Now that was a great concert!\n$Marnie: Brother..." diff --git a/src/locales/en/dialogue-female.json b/src/locales/en/dialogue-female.json deleted file mode 100644 index b58fbbb36ec..00000000000 --- a/src/locales/en/dialogue-female.json +++ /dev/null @@ -1,2691 +0,0 @@ -{ - "youngster": { - "encounter": { - "1": "Hey, wanna battle?", - "2": "Are you a new trainer too?", - "3": "Hey, I haven't seen you before. Let's battle!", - "4": "I just lost, so I'm trying to find more Pokémon.\nWait! You look weak! Come on, let's battle!", - "5": "Have we met or not? I don't really remember. Well, I guess it's nice to meet you anyway!", - "6": "All right! Let's go!", - "7": "All right! Here I come! I'll show you my power!", - "8": "Haw haw haw... I'll show you how hawesome my Pokémon are!", - "9": "No need to waste time saying hello. Bring it on whenever you're ready!", - "10": "Don't let your guard down, or you may be crying when a kid beats you.", - "11": "I've raised my Pokémon with great care. You're not allowed to hurt them!", - "12": "Glad you made it! It won't be an easy job from here.", - "13": "The battles continue forever! Welcome to the world with no end!" - }, - "victory": { - "1": "Wow! You're strong!", - "2": "I didn't stand a chance, huh?", - "3": "I'll find you again when I'm older and beat you!", - "4": "Ugh. I don't have any more Pokémon.", - "5": "No way… NO WAY! How could I lose again…", - "6": "No! I lost!", - "7": "Whoa! You are incredible! I'm amazed and surprised!", - "8": "Could it be… How… My Pokémon and I are the strongest, though…", - "9": "I won't lose next time! Let's battle again sometime!", - "10": "Sheesh! Can't you see that I'm just a kid! It wasn't fair of you to go all out like that!", - "11": "Your Pokémon are more amazing! Trade with me!", - "12": "I got a little carried away earlier, but what job was I talking about?", - "13": "Ahaha! There it is! That's right! You're already right at home in this world!" - } - }, - "lass": { - "encounter": { - "1": "Let's have a battle, shall we?", - "2": "You look like a new trainer. Let's have a battle!", - "3": "I don't recognize you. How about a battle?", - "4": "Let's have a fun Pokémon battle!", - "5": "I'll show you the ropes of how to really use Pokémon!", - "6": "A serious battle starts from a serious beginning! Are you sure you're ready?", - "7": "You're only young once. And you only get one shot at a given battle. Soon, you'll be nothing but a memory.", - "8": "You'd better go easy on me, OK? Though I'll be seriously fighting!", - "9": "School is boring. I've got nothing to do. Yawn. I'm only battling to kill the time." - }, - "victory": { - "1": "That was impressive! I've got a lot to learn.", - "2": "I didn't think you'd beat me that bad…", - "3": "I hope we get to have a rematch some day.", - "4": "That was pretty amazingly fun! You've totally exhausted me…", - "5": "You actually taught me a lesson! You're pretty amazing!", - "6": "Seriously, I lost. That is, like, seriously depressing, but you were seriously cool.", - "7": "I don't need memories like this. Deleting memory…", - "8": "Hey! I told you to go easy on me! Still, you're pretty cool when you're serious.", - "9": "I'm actually getting tired of battling… There's gotta be something new to do…" - } - }, - "breeder": { - "encounter": { - "1": "Obedient Pokémon, selfish Pokémon… Pokémon have unique characteristics.", - "2": "Even though my upbringing and behavior are poor, I've raised my Pokémon well.", - "3": "Hmm, do you discipline your Pokémon? Pampering them too much is no good." - }, - "victory": { - "1": "It is important to nurture and train each Pokémon's characteristics.", - "2": "Unlike my diabolical self, these are some good Pokémon.", - "3": "Too much praise can spoil both Pokémon and people." - }, - "defeat": { - "1": "You should not get angry at your Pokémon, even if you lose a battle.", - "2": "Right? Pretty good Pokémon, huh? I'm suited to raising things.", - "3": "No matter how much you love your Pokémon, you still have to discipline them when they misbehave." - } - }, - "breeder_female": { - "encounter": { - "1": "Pokémon never betray you. They return all the love you give them.", - "2": "Shall I give you a tip for training good Pokémon?", - "3": "I have raised these very special Pokémon using a special method." - }, - "victory": { - "1": "Ugh… It wasn't supposed to be like this. Did I administer the wrong blend?", - "2": "How could that happen to my Pokémon… What are you feeding your Pokémon?", - "3": "If I lose, that tells you I was just killing time. It doesn't damage my ego at all." - }, - "defeat": { - "1": "This proves my Pokémon have accepted my love.", - "2": "The real trick behind training good Pokémon is catching good Pokémon.", - "3": "Pokémon will be strong or weak depending on how you raise them." - } - }, - "fisherman": { - "encounter": { - "1": "Aack! You made me lose a bite!\nWhat are you going to do about it?", - "2": "Go away! You're scaring the Pokémon!", - "3": "Let's see if you can reel in a victory!" - }, - "victory": { - "1": "Just forget about it.", - "2": "Next time, I'll be reelin' in the triumph!", - "3": "Guess I underestimated the currents this time." - } - }, - "fisherman_female": { - "encounter": { - "1": "Woah! I've hooked a big one!", - "2": "Line's in, ready to reel in success!", - "3": "Ready to make waves!" - }, - "victory": { - "1": "I'll be back with a stronger hook.", - "2": "I'll reel in victory next time.", - "3": "I'm just sharpening my hooks for the comeback!" - } - }, - "swimmer": { - "encounter": { - "1": "Time to dive in!", - "2": "Let's ride the waves of victory!", - "3": "Ready to make a splash!" - }, - "victory": { - "1": "Drenched in defeat!", - "2": "A wave of defeat!", - "3": "Back to shore, I guess." - } - }, - "backpacker": { - "encounter": { - "1": "Pack up, game on!", - "2": "Let's see if you can keep pace!", - "3": "Gear up, challenger!", - "4": "I've spent 20 years trying to find myself… But where am I?" - }, - "victory": { - "1": "Tripped up this time!", - "2": "Oh, I think I'm lost.", - "3": "Dead end!", - "4": "Wait up a second! Hey! Don't you know who I am?" - } - }, - "ace_trainer": { - "encounter": { - "1": "You seem quite confident.", - "2": "Your Pokémon… Show them to me…", - "3": "Because I'm an Ace Trainer, people think I'm strong.", - "4": "Are you aware of what it takes to be an Ace Trainer?" - }, - "victory": { - "1": "Yes… You have good Pokémon…", - "2": "What?! But I'm a battling genius!", - "3": "Of course, you are the main character!", - "4": "OK! OK! You could be an Ace Trainer!" - }, - "defeat": { - "1": "I am devoting my body and soul to Pokémon battles!", - "2": "All within my expectations… Nothing to be surprised about…", - "3": "I thought I'd grow up to be a frail person who looked like they would break if you squeezed them too hard.", - "4": "Of course I'm strong and don't lose. It's important that I win gracefully." - } - }, - "parasol_lady": { - "encounter": { - "1": "Time to grace the battlefield with elegance and poise!" - }, - "victory": { - "1": "My elegance remains unbroken!" - } - }, - "twins": { - "encounter": { - "1": "Get ready, because when we team up, it's double the trouble!", - "2": "Two hearts, one strategy – let's see if you can keep up with our twin power!", - "3": "Hope you're ready for double trouble, because we're about to bring the heat!" - }, - "victory": { - "1": "We may have lost this round, but our bond remains unbreakable!", - "2": "Our twin spirit won't be dimmed for long.", - "3": "We'll come back stronger as a dynamic duo!" - }, - "defeat": { - "1": "Twin power reigns supreme!", - "2": "Two hearts, one triumph!", - "3": "Double the smiles, double the victory dance!" - } - }, - "cyclist": { - "encounter": { - "1": "Get ready to eat my dust!", - "2": "Gear up, challenger! I'm about to leave you in the dust!", - "3": "Pedal to the metal, let's see if you can keep pace!" - }, - "victory": { - "1": "Spokes may be still, but determination pedals on.", - "2": "Outpaced!", - "3": "The road to victory has many twists and turns yet to explore." - } - }, - "black_belt": { - "encounter": { - "1": "I praise your courage in challenging me! For I am the one with the strongest kick!", - "2": "Oh, I see. Would you like to be cut to pieces? Or do you prefer the role of punching bag?" - }, - "victory": { - "1": "Oh. The Pokémon did the fighting. My strong kick didn't help a bit.", - "2": "Hmmm… If I was going to lose anyway, I was hoping to get totally messed up in the process." - } - }, - "battle_girl": { - "encounter": { - "1": "You don't have to try to impress me. You can lose against me." - }, - "victory": { - "1": "It's hard to say good-bye, but we are running out of time…" - } - }, - "hiker": { - "encounter": { - "1": "My middle-age spread has given me as much gravitas as the mountains I hike!", - "2": "I inherited this big-boned body from my parents… I'm like a living mountain range…" - }, - "victory": { - "1": "At least I cannot lose when it comes to BMI!", - "2": "It's not enough… It's never enough. My bad cholesterol isn't high enough…" - } - }, - "ranger": { - "encounter": { - "1": "When I am surrounded by nature, most other things cease to matter.", - "2": "When I'm living without nature in my life, sometimes I'll suddenly feel an anxiety attack coming on." - }, - "victory": { - "1": "It doesn't matter to the vastness of nature whether I win or lose…", - "2": "Something like this is pretty trivial compared to the stifling feelings of city life." - }, - "defeat": { - "1": "I won the battle. But victory is nothing compared to the vastness of nature…", - "2": "I'm sure how you feel is not so bad if you compare it to my anxiety attacks…" - } - }, - "scientist": { - "encounter": { - "1": "My research will lead this world to peace and joy." - }, - "victory": { - "1": "I am a genius… I am not supposed to lose against someone like you…" - } - }, - "school_kid": { - "encounter": { - "1": "…Heehee. I'm confident in my calculations and analysis.", - "2": "I'm gaining as much experience as I can because I want to be a Gym Leader someday." - }, - "victory": { - "1": "Ohhhh… Calculation and analysis are perhaps no match for chance…", - "2": "Even difficult, trying experiences have their purpose, I suppose." - } - }, - "artist": { - "encounter": { - "1": "I used to be popular, but now I am all washed up." - }, - "victory": { - "1": "As times change, values also change. I realized that too late." - } - }, - "guitarist": { - "encounter": { - "1": "Get ready to feel the rhythm of defeat as I strum my way to victory!" - }, - "victory": { - "1": "Silenced for now, but my melody of resilience will play on." - } - }, - "worker": { - "encounter": { - "1": "It bothers me that people always misunderstand me. I'm a lot more pure than everyone thinks." - }, - "victory": { - "1": "I really don't want my skin to burn, so I want to stay in the shade while I work." - } - }, - "worker_female": { - "encounter": { - "1": "It bothers me that people always misunderstand me.\n$I'm a lot more pure than everyone thinks." - }, - "victory": { - "1": "I really don't want my skin to burn, so I want to stay in the shade while I work." - }, - "defeat": { - "1": "My body and mind aren't necessarily always in sync." - } - }, - "worker_double": { - "encounter": { - "1": "I'll show you we can break you. We've been training in the field!" - }, - "victory": { - "1": "How strange… How could this be… I shouldn't have been outmuscled." - } - }, - "hex_maniac": { - "encounter": { - "1": "I normally only ever listen to classical music, but if I lose, I think I shall try a bit of new age!", - "2": "I grow stronger with each tear I cry." - }, - "victory": { - "1": "Is this the dawning of the age of Aquarius?", - "2": "Now I can get even stronger. I grow with every grudge." - }, - "defeat": { - "1": "New age simply refers to twentieth century classical composers, right?", - "2": "Don't get hung up on sadness or frustration. You can use your grudges to motivate yourself." - } - }, - "psychic": { - "encounter": { - "1": "Hi! Focus!" - }, - "victory": { - "1": "Eeeeek!" - } - }, - "officer": { - "encounter": { - "1": "Brace yourself, because justice is about to be served!", - "2": "Ready to uphold the law and serve justice on the battlefield!" - }, - "victory": { - "1": "The weight of justice feels heavier than ever…", - "2": "The shadows of defeat linger in the precinct." - } - }, - "beauty": { - "encounter": { - "1": "My last ever battle… That's the way I'd like us to view this match…" - }, - "victory": { - "1": "It's been fun… Let's have another last battle again someday…" - } - }, - "baker": { - "encounter": { - "1": "Hope you're ready to taste defeat!" - }, - "victory": { - "1": "I'll bake a comeback." - } - }, - "biker": { - "encounter": { - "1": "Time to rev up and leave you in the dust!" - }, - "victory": { - "1": "I'll tune up for the next race." - } - }, - "firebreather": { - "encounter": { - "1": "My flames shall devour you!", - "2": "My soul is on fire. I'll show you how hot it burns!", - "3": "Step right up and take a look!" - }, - "victory": { - "1": "I burned down to ashes...", - "2": "Yow! That's hot!", - "3": "Ow! I scorched the tip of my nose!" - } - }, - "sailor": { - "encounter": { - "1": "Matey, you're walking the plank if you lose!", - "2": "Come on then! My sailor's pride is at stake!", - "3": "Ahoy there! Are you seasick?" - }, - "victory": { - "1": "Argh! Beaten by a kid!", - "2": "Your spirit sank me!", - "3": "I think it's me that's seasick..." - } - }, - "archer": { - "encounter": { - "1": "Before you go any further, let's see how you fare against us, Team Rocket!", - "2": "I have received reports that your skills are not insignificant. Let's see if they are true.", - "3": "I am Archer, an Admin of Team Rocket. And I do not go easy on enemies of our organization." - }, - "victory": { - "1": "What a blunder!", - "2": "With my current skills, I was not up to the task after all.", - "3": "F-forgive me, Giovanni... For me to be defeated by a mere trainer..." - } - }, - "ariana": { - "encounter": { - "1": "Hold it right there! We can't someone on the loose.\n$It's harmful to Team Rocket's pride, you see.", - "2": "I don't know or care if what I'm doing is right or wrong...\n$I just put my faith in Giovanni and do as I am told", - "3": "Your trip ends here. I'm going to take you down!" - }, - "victory": { - "1": "Tch, you really are strong. It's too bad.\n$If you were to join Team Rocket, you could become an Executive.", - "2": "I... I'm shattered...", - "3": "Aaaieeeee! This can't be happening! I fought hard, but I still lost…" - } - }, - "proton": { - "encounter": { - "1": "What do you want? If you interrupt our work, don't expect any mercy!", - "2": "What do we have here? I am often labeled as the scariest and cruelest guy in Team Rocket…\n$I strongly urge you not to interfere with our business!", - "3": "I am Proton, an Admin of Team Rocket. I am here to put an end to your meddling!" - }, - "victory": { - "1": "The fortress came down!", - "2": "You may have won this time… But all you did was make Team Rocket's wrath grow…", - "3": "I am defeated… But I will not forget this!" - } - }, - "petrel": { - "encounter": { - "1": "Muhahaha, we've been waiting for you. Me? You don't know who I am? It is me, Giovanni.\n$The majestic Giovanni himself! Wahahaha! …Huh? I don't sound anything like Giovanni?\n$I don't even look like Giovanni? How come? I've worked so hard to mimic him!", - "2": "I am Petrel, an Admin of Team Rocket. I will not allow you to interfere with our plans!", - "3": "Rocket Executive Petrel will deal with this intruder!" - }, - "victory": { - "1": "OK, OK. I'll tell you where he is.", - "2": "I… I couldn't do a thing… Giovanni, please forgive me…", - "3": "No, I can't let this affect me. I have to inform the others…" - } - }, - "tabitha": { - "encounter": { - "1": "Hehehe! So you've come all the way here! But you're too late!", - "2": "Hehehe... Got here already, did you? We underestimated you! But this is it! \n$I'm a cut above the Grunts you've seen so far. I'm not stalling for time.\n$I'm going to pulverize you!", - "3": "I'm going to give you a little taste of pain! Resign yourself to it!" - }, - "victory": { - "1": "Hehehe! You might have beaten me, but you don't stand a chance against the Boss!\n$If you get lost now, you won't have to face a sound whipping!", - "2": "Hehehe... So, I lost, too...", - "3": "Ahya! How could this be? For an Admin like me to lose to some random trainer..." - } - }, - "courtney": { - "encounter": { - "1": "The thing...The thing that you hold...That is what... That's what we of Team Magma seek...", - "2": "... Well then...Deleting...", - "3": "...Ha. ...Analyzing... ...Hah♪" - }, - "victory": { - "1": "... ...Change...the world.", - "2": "As anticipated. Unanticipated. You. Target lock...completed.\n$Commencing...experiment. You. Forever. Aha... ♪", - "3": "...Again? That's unanticipated. ...I knew it. You...are interesting! ...Haha. ♪" - } - }, - "shelly": { - "encounter": { - "1": "Ahahahaha! You're going to meddle in Team Aqua's affairs?\n$You're either absolutely fearless, simply ignorant, or both!\n$You're so cute, you're disgusting! I'll put you down", - "2": "What's this? Who's this spoiled brat?", - "3": "Cool your jets. Be patient. I'll crush you shortly." - }, - "victory": { - "1": "Ahahahaha! We got meddled with unexpectedly! We're out of options.\n$We'll have to pull out. But this isn't the last you'll see of Team Aqua!\n$We have other plans! Don't you forget it!", - "2": "Ahhh?! Did I go too easy on you?!", - "3": "Uh. Are you telling me you've upped your game even more during the fight?\n$You're a brat with a bright future… My Pokémon and I don't have any strength left to fight…\n$Go on… Go and be destroyed by Archie." - } - }, - "matt": { - "encounter": { - "1": "Hoohahaha! What, you got a screw loose or something? Look at you, little Makuhita person!", - "2": "Oho! You! You're that funny kid!", - "3": "What are you doing here? Did you follow us?" - }, - "victory": { - "1": "All right then, until the Boss has time for you, I'll be your opponent!", - "2": "I can feel it! I can feel it, all right! The strength coming offa you!\n$More! I still want more! But looks like we're outta time...", - "3": "That was fun! I knew you'd show me a good time! I look forward to facing you again someday!" - } - }, - "mars": { - "encounter": { - "1": "I'm Mars, one of Team Galactic's top Commanders.", - "2": "Team Galactic's vision for the future is unwavering. Opposition will be crushed without mercy!", - "3": "Feeling nervous? You should be!" - }, - "victory": { - "1": "This can't be happening! How did I lose?!", - "2": "You have some skill, I'll give you that.", - "3": "Defeated... This was a costly mistake." - } - }, - "jupiter": { - "encounter": { - "1": "Jupiter, Commander of Team Galactic, at your service.", - "2": "Resistance is futile. Team Galactic will prevail!", - "3": "You're trembling... scared already?" - }, - "victory": { - "1": "No way... I lost?!", - "2": "Impressive, you've got guts!", - "3": "Losing like this... How embarrassing." - } - }, - "saturn": { - "encounter": { - "1": "I am Saturn, Commander of Team Galactic.", - "2": "Our mission is absolute. Any hindrance will be obliterated!", - "3": "Is that fear I see in your eyes?" - }, - "victory": { - "1": "Impossible... Defeated by you?!", - "2": "You have proven yourself a worthy adversary.", - "3": "Bestowed in defeat... This is unacceptable." - } - }, - "zinzolin": { - "encounter": { - "1": "You could become a threat to Team Plasma, so we will eliminate you here and now!", - "2": "Oh, for crying out loud... I didn't expect to have to battle in this freezing cold!", - "3": "You're an impressive Trainer to have made it this far. But it ends here." - }, - "victory": { - "1": "Ghetsis... I have failed you...", - "2": "It's bitter cold. I'm shivering. I'm suffering. Yet, I still stand victorious.", - "3": "Hmph. You're a smarter Trainer than I expected, but not smart enough." - } - }, - "rood": { - "encounter": { - "1": "You are a threat to Team Plasma. We cannot let you walk away from here and now!", - "2": "Oh, this icy wind... I never thought I'd have to fight here!", - "3": "You are a remarkable Trainer to have made it this far. But this is where it ends." - }, - "victory": { - "1": "Ghetsis... I have failed my mission...", - "2": "The cold is piercing. I'm shivering. I'm suffering. Yet, I have triumphed.", - "3": "Hm. You are a talented Trainer, but unfortunately not talented enough." - } - }, - "xerosic": { - "encounter": { - "1": "Ah ha ha! It would be my pleasure. Come on, little Trainer! Let's see what you've got!", - "2": "Hmm... You're more powerful than you look. I wonder how much energy there is inside you.", - "3": "I've been waiting for you! I need to do a little research on you! Come, let us begin!" - }, - "victory": { - "1": "Ah, you're quite strong. Oh yes—very strong, indeed.", - "2": "Ding-ding-ding! You did it! To the victor go the spoils!", - "3": "Wonderful! Amazing! You have tremendous skill and bravery!" - } - }, - "bryony": { - "encounter": { - "1": "I am Bryony, and it would be my pleasure to battle you. Show me what you've got.", - "2": "Impressive... You're more powerful than you appear. Let's see the true extent of your energy.", - "3": "I've anticipated your arrival. It's time for a little test. Shall we begin?" - }, - "victory": { - "1": "You're quite strong. Oh yes—very strong, indeed.", - "2": "Ding-ding-ding! You've done well. Victory is yours.", - "3": "Wonderful! Remarkable! Your skill and bravery are commendable." - } - }, - "rocket_grunt": { - "encounter": { - "1": "Prepare for trouble!", - "2": "We're pulling a big job here! Get lost, kid!", - "3": "Hand over your Pokémon, or face the wrath of Team Rocket!", - "4": "You're about to experience the true terror of Team Rocket!", - "5": "Hey, kid! Me am a Team Rocket member kind of guy!" - }, - "victory": { - "1": "Team Rocket blasting off again!", - "2": "Oh no! I dropped the Lift Key!", - "3": "I blew it!", - "4": "My associates won't stand for this!", - "5": "You say what? Team Rocket bye-bye a go-go? Broken it is says you?" - } - }, - "magma_grunt": { - "encounter": { - "1": "If you get in the way of Team Magma, don’t expect any mercy!", - "2": "You'd better not interfere with our plans! We're making the world a better place!", - "3": "You're in the way! Team Magma has no time for kids like you!", - "4": "I hope you brought marshmallows because things are about to heat up!", - "5": "We're going to use the power of a volcano! It's gonna be... explosive! Get it? Heh heh!" - }, - "victory": { - "1": "Huh? I lost?!", - "2": "I can't believe I lost! I even skipped lunch for this", - "3": "No way! You're just a kid!", - "4": "Urrrgh... I should've ducked into our hideout right away...", - "5": "You beat me... Do you think the boss will dock my pay for this?" - } - }, - "aqua_grunt": { - "encounter": { - "1": "No one who crosses Team Aqua gets any mercy, not even kids!", - "2": "Grrr... You've got some nerve meddling with Team Aqua!", - "3": "You're about to get soaked! And not just from my water Pokémon!", - "4": "We, Team Aqua, exist for the good of all!", - "5": "Prepare to be washed away by the tides of my... uh, Pokémon! Yeah, my Pokémon!" - }, - "victory": { - "1": "You're kidding me!", - "2": "Arrgh, I didn't count on being meddled with by some meddling kid!", - "3": "I lost?! Guess I'll have to swim back to the hideout now...", - "4": "Oh, man, what a disaster... The boss is going to be furious...", - "5": "You beat me... Do you think the boss will make me walk the plank for this?" - } - }, - "galactic_grunt": { - "encounter": { - "1": "Don't mess with Team Galactic!", - "2": "Witness the power of our technology and the future we envision!", - "3": "In the name of Team Galactic, I'll eliminate anyone who stands in our way!", - "4": "Get ready to lose!", - "5": "Hope you're ready for a cosmic beatdown!" - }, - "victory": { - "1": "Shut down...", - "2": "This setback means nothing in the grand scheme.", - "3": "Our plans are bigger than this defeat.", - "4": "How?!", - "5": "Note to self: practice Pokémon battling, ASAP." - } - }, - "plasma_grunt": { - "encounter": { - "1": "We won't tolerate people who have different ideas!", - "2": "If I win against you, release your Pokémon!", - "3": "If you get in the way of Team Plasma, I'll take care of you!", - "4": "Team Plasma will liberate Pokémon from selfish humans like you!", - "5": "Our hairstyles are out of this world... but our battling skills? You'll find out soon enough." - }, - "victory": { - "1": "Plasmaaaaaaaaa!", - "2": "How could I lose...", - "3": "...What a weak Pokémon, I'll just have to go steal some better ones!", - "4": "Great plans are always interrupted.", - "5": "This is bad... Badbadbadbadbadbadbad! Bad for Team Plasma! Or Plasbad, for short!" - } - }, - "flare_grunt": { - "encounter": { - "1": "Your Pokémon are no match for the elegance of Team Flare.", - "2": "Hope you brought your sunglasses, because things are about to get bright!", - "3": "Team Flare will cleanse the world of imperfection!", - "4": "Prepare to face the brilliance of Team Flare!", - "5": "Fashion is most important to us!" - }, - "victory": { - "1": "The future doesn't look bright for me.", - "2": "Perhaps there's more to battling than I thought. Back to the drawing board.", - "3": "Gahh?! I lost?!", - "4": "Even in defeat, Team Flare's elegance shines through.", - "5": "You may have beaten me, but when I lose, I go out in style!" - } - }, - "aether_grunt": { - "encounter": { - "1": "I'll fight you with all I have to wipe you out!", - "2": "I don't care if you're a kid or what. I'll send you flying if you threaten us!", - "3": "I was told to turn away Trainers, whomever they might be!", - "4": "I'll show you the power of Aether Paradise!", - "5": "Now that you've learned of the darkness at the heart of Aether Paradise, we'll need you to conveniently disappear!" - }, - "victory": { - "1": "Hmph! You seem to have a lot of skill.", - "2": "What does this mean? What does this mean!", - "3": "Hey! You're so strong that there's no way I can turn you away!", - "4": "Hmm... It seems as though I may have lost.", - "5": "Here's an impression for you: Aiyee!" - } - }, - "faba": { - "encounter": { - "1": "I, Branch Chief Faba, shall show you the harshness of the real world!", - "2": "The man who is called Aether Paradise's last line of defense is to battle a mere child?", - "3": "I, Faba, am the Aether Branch Chief. The only one in the world, I'm irreplaceable." - }, - "victory": { - "1": "Aiyee!", - "2": "H-h-how can this be?! How could this child...", - "3": "This is why... This is why I can't bring myself to like children." - } - }, - "skull_grunt": { - "encounter": { - "1": "We're not bad-we're just hard!", - "2": "You want some? That's how we say hello! Nice knowing you, punks!", - "3": "We're just a bunch of guys and gals with a great interest in other people's Pokémon!", - "4": "Why you trying to act hard when we're already hard as bones out here, homie?", - "5": "Team Skull represent! We can't pay the rent! Had a lot of fun, but our youth was misspent!" - }, - "victory": { - "1": "Huh? Is it over already?", - "2": "Time for us to break out, yo! Gotta tell y'all peace out, yo!", - "3": "We don't need your wack Pokémon anyway!", - "4": "Wha-?! This kid's way too strong-no bones about it!", - "5": "So, what? I'm lower than a Pokémon?! I already got self-esteem issues, man." - } - }, - "plumeria": { - "encounter": { - "1": " ...Hmph. You don't look like anything special to me.", - "2": "It takes these dumb Grunts way too long to deal with you kids...", - "3": "Mess with anyone in Team Skull, and I'll show you how serious I can get." - }, - "victory": { - "1": "Hmmph! You're pretty strong. I'll give you that.", - "2": "Hmmph. Guess you are pretty tough. Now I understand why my Grunts waste so much time battling kids.", - "3": "Hmmph! I guess I just have to hold that loss." - } - }, - "macro_grunt": { - "encounter": { - "1": "It looks like this is the end of the line for you!", - "2": "You are a trainer aren't you? I'm afraid that doesn't give you the right to interfere in our work.", - "3": "I'm from Macro Cosmos Insurance! Do you have a life insurance policy?" - }, - "victory": { - "1": "I have little choice but to respectfully retreat.", - "2": "Having to give up my pocket money... Losing means I'm back in the red...", - "3": "Nobody can beat Macro Cosmos when it comes to our dedication to our work!" - } - }, - "oleana": { - "encounter": { - "1": "I won't let anyone interfere with Mr. Rose's plan!", - "2": "So, you got through all of the special staff that I had ordered to stop you. I would expect nothing less.", - "3": "For the chairman! I won't lose!" - }, - "victory": { - "1": "*sigh* I wasn't able to win... Oleana...you really are a hopeless woman.", - "2": "Arghhh! This is inexcusable... What was I thinking... Any trainer who's made it this far would be no pushover..", - "3": "*sigh* I am one tired Oleana..." - } - }, - "rocket_boss_giovanni_1": { - "encounter": { - "1": "So! I must say, I am impressed you got here!" - }, - "victory": { - "1": "WHAT! This cannot be!" - }, - "defeat": { - "1": "Mark my words. Not being able to measure your own strength shows that you are still a child." - } - }, - "rocket_boss_giovanni_2": { - "encounter": { - "1": "My old associates need me... Are you going to get in my way?" - }, - "victory": { - "1": "How is this possible...? The precious dream of Team Rocket has become little more than an illusion..." - }, - "defeat": { - "1": "Team Rocket will be reborn again, and I will rule the world!" - } - }, - "magma_boss_maxie_1": { - "encounter": { - "1": "I will bury you by my own hand. I hope you appreciate this honor!" - }, - "victory": { - "1": "Ugh! You are... quite capable...\nI fell behind, but only by an inch..." - }, - "defeat": { - "1": "Team Magma will prevail!" - } - }, - "magma_boss_maxie_2": { - "encounter": { - "1": "You are the final obstacle remaining between me and my goals.\n$Brace yourself for my ultimate attack! Fuhahaha!" - }, - "victory": { - "1": "This... This is not.. Ngh..." - }, - "defeat": { - "1": "And now... I will transform this planet to a land ideal for humanity." - } - }, - "aqua_boss_archie_1": { - "encounter": { - "1": "I'm the leader of Team Aqua, so I'm afraid it's the rope's end for you." - }, - "victory": { - "1": "Let's meet again somewhere. I'll be sure to remember that face." - }, - "defeat": { - "1": "Brilliant! My team won't hold back now!" - } - }, - "aqua_boss_archie_2": { - "encounter": { - "1": "I've been waiting so long for this day to come.\nThis is the true power of my team!" - }, - "victory": { - "1": "Like I figured..." - }, - "defeat": { - "1": "I'll return everything in this world to its original, pure state!!" - } - }, - "galactic_boss_cyrus_1": { - "encounter": { - "1": "You were compelled to come here by such vacuous sentimentality.\n$I will make you regret paying heed to your heart!" - }, - "victory": { - "1": "Interesting. And quite curious." - }, - "defeat": { - "1": "I will create my new world..." - } - }, - "galactic_boss_cyrus_2": { - "encounter": { - "1": "So we meet again. It seems our fates have become intertwined.\n$But here and now, I will finally break that bond!" - }, - "victory": { - "1": "How? How? HOW?!" - }, - "defeat": { - "1": "Farewell." - } - }, - "plasma_boss_ghetsis_1": { - "encounter": { - "1": "I won't allow anyone to stop me! No matter who does what!" - }, - "victory": { - "1": "How can this be? I'm the creator of Team Plasma! I'm perfect!" - }, - "defeat": { - "1": "I am the perfect ruler of a perfect new world! Mwa ha ha!" - } - }, - "plasma_boss_ghetsis_2": { - "encounter": { - "1": "Come now! I want to see your face at the moment you lose all hope!" - }, - "victory": { - "1": "My calculations... No! My careful schemes! The world should be mine!" - }, - "defeat": { - "1": "Kyurem! Use Absofusion!" - } - }, - "flare_boss_lysandre_1": { - "encounter": { - "1": "Do you want to stop me? Show me in battle." - }, - "victory": { - "1": "You are here to stop me. But I ask you to wait. " - }, - "defeat": { - "1": "Pokemon...Shall no longer exist." - } - }, - "flare_boss_lysandre_2": { - "encounter": { - "1": "The future you want, or the future I want... Let us see which one is more deserving, shall we?" - }, - "victory": { - "1": "Whaugh!" - }, - "defeat": { - "1": "Fools with no vision will continue to befoul this beautiful world." - } - }, - "aether_boss_lusamine_1": { - "encounter": { - "1": "You're going to startle my sweet beast! It looks like I'll need to silence you first." - }, - "victory": { - "1": "How... how can you be so awful!" - }, - "defeat": { - "1": "Hmph..." - } - }, - "aether_boss_lusamine_2": { - "encounter": { - "1": "Why must you continue to pester me?! I am sick of you. Sick through and through!\n$Enough with this useless talk.. with Nihilego's power I will show you how wrong you were to come here!" - }, - "victory": { - "1": "Aaauuuggghhhhhhhhh!!!" - }, - "defeat": { - "1": "All that I want is my precious beast! I don't care about any of the rest of you!" - } - }, - "skull_boss_guzma_1": { - "encounter": { - "1": "The hated boss who beats you down and beats you down and never lets up...\n$Yeah. Big bad Guzma is here!" - }, - "victory": { - "1": "Tch. I'm gonna beat you down one of these days!" - }, - "defeat": { - "1": "And you came all the way out here just for that, huh?" - } - }, - "skull_boss_guzma_2": { - "encounter": { - "1": "Doesn't matter who I'm up against, I'm gonna beat them down!\n$That's what big bad Guzma is all about!" - }, - "victory": { - "1": "Guzma!!! What is wrong with you?!" - }, - "defeat": { - "1": "Y'all are stupid!" - } - }, - "macro_boss_rose_1": { - "encounter": { - "1": "I must provide limitless energy to ensure everlasting prosperity for everyone...\n$It is my purpose, my duty, my destiny!" - }, - "victory": { - "1": "You still don't understand, trainer...\n$We... No, I am going to change the course of history!" - }, - "defeat": { - "1": "You still don't understand a thing!" - } - }, - "macro_boss_rose_2": { - "encounter": { - "1": "I'm committed to solving the energy problem in the Galar region—and, of course, around the world.\n$My experience and accomplishments that made Macro Cosmos a success are proof my methods work.\n$I don't intend to change my mind, even if I lose." - }, - "victory": { - "1": "I'd forgotten how great Pokémon battles are! It's been so long since I battled...\n$That sure was satisfying, I accept defeat for this battle." - }, - "defeat": { - "1": "I suppose it must seem that I am doing something terrible. I don't expect you to understand.\n$But I must provide the Galar region with limitless energy to ensure everlasting prosperity." - } - }, - "brock": { - "encounter": { - "1": "My expertise on Rock-type Pokémon will take you down! Come on!", - "2": "My rock-hard willpower will overwhelm you!", - "3": "Allow me to show you the true strength of my Pokémon!" - }, - "victory": { - "1": "Your Pokémon's strength have overcome my rock-hard defenses!", - "2": "The world is huge! I'm glad to have had a chance to battle you.", - "3": "Perhaps I should go back to pursuing my dream as a Pokémon Breeder…" - }, - "defeat": { - "1": "The best offense is a good defense!\nThat's my way of doing things!", - "2": "Come study rocks with me next time to better learn how to fight them!", - "3": "Hah, all my traveling around the regions is paying off!" - } - }, - "misty": { - "encounter": { - "1": "My policy is an all out offensive with Water-type Pokémon!", - "2": "Hiya, I'll show you the strength of my aquatic Pokémon!", - "3": "My dream was to go on a journey and battle powerful trainers…\nWill you be a sufficient challenge?" - }, - "victory": { - "1": "You really are strong… I'll admit that you are skilled…", - "2": "Grrr… You know you just got lucky, right?!", - "3": "Wow, you're too much! I can't believe you beat me!" - }, - "defeat": { - "1": "Was the mighty Misty too much for you?", - "2": "I hope you saw my Pokémon's elegant swimming techniques!", - "3": "Your Pokémon were no match for my pride and joys!" - } - }, - "lt_surge": { - "encounter": { - "1": "My Electric Pokémon saved me during the war! I'll show you how!", - "2": "Ten-hut! I'll shock you into surrender!", - "3": "I'll zap you just like I do to all my enemies in battle!" - }, - "victory": { - "1": "Whoa! Your team's the real deal, kid!", - "2": "Aaargh, you're strong! Even my electric tricks lost against you.", - "3": "That was an absolutely shocking loss!" - }, - "defeat": { - "1": "Oh yeah! When it comes to Electric-type Pokémon, I'm number one in the world!", - "2": "Hahaha! That was an electrifying battle, kid!", - "3": "A Pokémon battle is war, and I have showed you first-hand combat!" - } - }, - "erika": { - "encounter": { - "1": "Ah, the weather is lovely here…\nOh, a battle? Very well then.", - "2": "My Pokémon battling skills rival that of my flower arranging skills.", - "3": "Oh, I hope the pleasant aroma of my Pokémon doesn't put me to sleep again…", - "4": "Seeing flowers in a garden is so soothing." - }, - "victory": { - "1": "Oh! I concede defeat.", - "2": "That match was most delightful.", - "3": "Ah, it appears it is my loss…", - "4": "Oh, my goodness." - }, - "defeat": { - "1": "I was afraid I would doze off…", - "2": "Oh my, it seems my Grass Pokémon overwhelmed you.", - "3": "That battle was such a soothing experience.", - "4": "Oh… Is that all?" - } - }, - "janine": { - "encounter": { - "1": "I am mastering the art of poisonous attacks.\nI shall spar with you today!", - "2": "Father trusts that I can hold my own.\nI will prove him right!", - "3": "My ninja techniques are only second to my Father's!\nCan you keep up?" - }, - "victory": { - "1": "Even now, I still need training… I understand.", - "2": "Your battle technique has outmatched mine.", - "3": "I'm going to really apply myself and improve my skills." - }, - "defeat": { - "1": "Fufufu… the poison has sapped all your strength to battle.", - "2": "Ha! You didn't stand a chance against my superior ninja skills!", - "3": "Father's faith in me has proven to not be misplaced." - } - }, - "sabrina": { - "encounter": { - "1": "Through my psychic ability, I had a vision of your arrival!", - "2": "I dislike fighting, but if you wish, I will show you my powers!", - "3": "I can sense great ambition in you. I shall see if it not unfounded." - }, - "victory": { - "1": "Your power… It far exceeds what I foresaw…", - "2": "I failed to accurately predict your power.", - "3": "Even with my immense psychic powers, I cannot sense another as strong as you." - }, - "defeat": { - "1": "This victory… It is exactly as I foresaw in my visions!", - "2": "Perhaps it was another I sensed a great desire in…", - "3": "Hone your abilities before recklessly charging into battle.\nYou never know what the future may hold if you do…" - } - }, - "blaine": { - "encounter": { - "1": "Hah! Hope you brought a Burn Heal!", - "2": "My fiery Pokémon will incinerate all challengers!", - "3": "Get ready to play with fire!" - }, - "victory": { - "1": "I have burned down to nothing! Not even ashes remain!", - "2": "Didn't I stoke the flames high enough?", - "3": "I'm all burned out… But this makes my motivation to improve burn even hotter!" - }, - "defeat": { - "1": "My raging inferno cannot be quelled!", - "2": "My Pokémon have been powered up with the heat from this victory!", - "3": "Hah! My passion burns brighter than yours!" - } - }, - "giovanni": { - "encounter": { - "1": "I, the leader of Team Rocket, will make you feel a world of pain!", - "2": "My training here will be vital before I am to face my old associates again.", - "3": "I do not think you are prepared for the level of failure you are about to experience!" - }, - "victory": { - "1": "WHAT! Me, lose?! There is nothing I wish to say to you!", - "2": "Hmph… You could never understand what I hope to achieve.", - "3": "This defeat is merely delaying the inevitable.\nI will rise Team Rocket from the ashes in due time." - }, - "defeat": { - "1": "Not being able to measure your own strength shows that you are still but a child.", - "2": "Do not try to interfere with me again.", - "3": "I hope you understand how foolish challenging me was." - } - }, - "roxanne": { - "encounter": { - "1": "Would you kindly demonstrate how you battle?", - "2": "You can learn many things by battling many trainers.", - "3": "Oh, you caught me strategizing.\nWould you like to battle?" - }, - "victory": { - "1": "Oh, I appear to have lost.\nI understand.", - "2": "It seems that I still have so much more to learn when it comes to battle.", - "3": "I'll take what I learned here today to heart." - }, - "defeat": { - "1": "I have learned many things from our battle.\nI hope you have too.", - "2": "I look forward to battling you again.\nI hope you'll use what you've learned here.", - "3": "I won due to everything I have learned." - } - }, - "brawly": { - "encounter": { - "1": "Oh man, a challenger!\nLet's see what you can do!", - "2": "You seem like a big splash.\nLet's battle!", - "3": "Time to create a storm!\nLet's go!" - }, - "victory": { - "1": "Oh woah, you've washed me out!", - "2": "You surfed my wave and crashed me down!", - "3": "I feel like I'm lost in Granite Cave!" - }, - "defeat": { - "1": "Haha, I surfed the big wave!\nChallenge me again sometime.", - "2": "Surf with me again some time!", - "3": "Just like the tides come in and out, I hope you return to challenge me again." - } - }, - "wattson": { - "encounter": { - "1": "Time to get shocked!\nWahahahaha!", - "2": "I'll make sparks fly!\nWahahahaha!", - "3": "I hope you brought Paralyz Heal!\nWahahahaha!" - }, - "victory": { - "1": "Seems like I'm out of charge!\nWahahahaha!", - "2": "You've completely grounded me!\nWahahahaha!", - "3": "Thanks for the thrill!\nWahahahaha!" - }, - "defeat": { - "1": "Recharge your batteries and challenge me again sometime!\nWahahahaha!", - "2": "I hope you found our battle electrifying!\nWahahahaha!", - "3": "Aren't you shocked I won?\nWahahahaha!" - } - }, - "flannery": { - "encounter": { - "1": "Nice to meet you! Wait, no…\nI will crush you!", - "2": "I've only been a leader for a little while, but I'll smoke you!", - "3": "It's time to demonstrate the moves my grandfather has taught me! Let's battle!" - }, - "victory": { - "1": "You remind me of my grandfather…\nNo wonder I lost.", - "2": "Am I trying too hard?\nI should relax, can't get too heated.", - "3": "Losing isn't going to smother me out.\nTime to reignite training!" - }, - "defeat": { - "1": "I hope I've made my grandfather proud…\nLet's battle again some time.", - "2": "I…I can't believe I won!\nDoing things my way worked!", - "3": "Let's exchange burning hot moves again soon!" - } - }, - "norman": { - "encounter": { - "1": "I'm surprised you managed to get here.\nLet's battle.", - "2": "I'll do everything in my power as a Gym Leader to win.\nLet's go!", - "3": "You better give this your all.\nIt's time to battle!" - }, - "victory": { - "1": "I lost to you…?\nRules are rules, though.", - "2": "Was moving from Olivine a mistake…?", - "3": "I can't believe it.\nThat was a great match." - }, - "defeat": { - "1": "We both tried our best.\nI hope we can battle again soon.", - "2": "You should try challenging my kid instead.\nYou might learn something!", - "3": "Thank you for the excellent battle.\nBetter luck next time." - } - }, - "winona": { - "encounter": { - "1": "I've been soaring the skies looking for prey…\nAnd you're my target!", - "2": "No matter how our battle is, my Flying Pokémon and I will triumph with grace. Let's battle!", - "3": "I hope you aren't scared of heights.\nLet's ascend!" - }, - "victory": { - "1": "You're the first Trainer I've seen with more grace than I.\nExcellently played.", - "2": "Oh, my Flying Pokémon have plummeted!\nVery well.", - "3": "Though I may have fallen, my Pokémon will continue to fly!" - }, - "defeat": { - "1": "My Flying Pokémon and I will forever dance elegantly!", - "2": "I hope you enjoyed our show.\nOur graceful dance is finished.", - "3": "Won't you come see our elegant choreography again?" - } - }, - "tate": { - "encounter": { - "1": "Hehehe…\nWere you surprised to see me without my sister?", - "2": "I can see what you're thinking…\nYou want to battle!", - "3": "How can you defeat someone…\nWho knows your every move?" - }, - "victory": { - "1": "It can't be helped…\nI miss Liza…", - "2": "Your bond with your Pokémon was stronger than mine.", - "3": "If I were with Liza, we would have won.\nWe can finish each other's thoughts!" - }, - "defeat": { - "1": "My Pokémon and I are superior!", - "2": "If you can't even defeat me, you'll never be able to defeat Liza either.", - "3": "It's all thanks to my strict training with Liza.\nI can make myself one with Pokémon." - } - }, - "liza": { - "encounter": { - "1": "Fufufu…\nWere you surprised to see me without my brother?", - "2": "I can determine what you desire…\nYou want to battle, don't you?", - "3": "How can you defeat someone…\nWho's one with their Pokémon?" - }, - "victory": { - "1": "It can't be helped…\nI miss Tate…", - "2": "Your bond with your Pokémon…\nIt's stronger than mine.", - "3": "If I were with Tate, we would have won.\nWe can finish each other's sentences!" - }, - "defeat": { - "1": "My Pokémon and I are victorious.", - "2": "If you can't even defeat me, you'll never be able to defeat Tate either.", - "3": "It's all thanks to my strict training with Tate.\nI can synchronize myself with my Pokémon." - } - }, - "juan": { - "encounter": { - "1": "Now's not the time to act coy.\nLet's battle!", - "2": "Ahahaha, You'll be witness to my artistry with Water Pokémon!", - "3": "A typhoon approaches!\nWill you be able to test me?", - "4": "Please, you shall bear witness to our artistry.\nA grand illusion of water sculpted by my Pokémon and myself!" - }, - "victory": { - "1": "You may be a genius who can take on Wallace!", - "2": "I focused on elegance while you trained.\nIt's only natural that you defeated me.", - "3": "Ahahaha!\nVery well, You have won this time.", - "4": "From you, I sense the brilliant shine of skill that will overcome all." - }, - "defeat": { - "1": "My Pokémon and I have sculpted an illusion of Water and come out victorious.", - "2": "Ahahaha, I have won, and you have lost.", - "3": "Shall I loan you my outfit? It may help you battle!\nAhahaha, I jest!", - "4": "I'm the winner! Which is to say, you lost." - } - }, - "crasher_wake": { - "encounter": { - "1": "Crash! Crash! Watch out!\nCrasher Wake…is…heeere!", - "2": "Crash! Crash! Crasher Wake!", - "3": "I'm the tidal wave of power to wash you away!" - }, - "victory": { - "1": "That puts a grin on my face!\nGuhahaha! That was a blast!", - "2": "Hunwah! It's gone and ended!\nHow will I say this…\nI want more! I wanted to battle a lot more!", - "3": "WHAAAAT!?" - }, - "defeat": { - "1": "Yeeeeah! That's right!", - "2": "I won, but I want more! I wanted to battle a lot more!", - "3": "So long!" - } - }, - "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!" - }, - "victory": { - "1": "I understand… I'll bow out gracefully.", - "2": "A defeat is a defeat. You are strong indeed.", - "3": "…Shoot! Yeah, I lost." - }, - "defeat": { - "1": "Dad! I won with your cherished bird Pokémon…", - "2": "Bird Pokémon are the best after all!", - "3": "Feels like I'm catching up to my dad!" - } - }, - "nessa": { - "encounter": { - "1": "No matter what kind of plan your refined mind may be plotting, my partner and I will be sure to sink it.", - "2": "I'm not here to chat. I'm here to win!", - "3": "This is a little gift from my Pokémon… I hope you can take it!" - }, - "victory": { - "1": "You and your Pokémon are just too much…", - "2": "How…? How can this be?!", - "3": "I was totally washed away!" - }, - "defeat": { - "1": "The raging wave crashes again!", - "2": "Time to ride the wave of victory!", - "3": "Ehehe!" - } - }, - "melony": { - "encounter": { - "1": "I'm not going to hold back!", - "2": "All righty, I suppose we should get started.", - "3": "I'll freeze you solid!" - }, - "victory": { - "1": "You… You're pretty good, huh?", - "2": "If you find Gordie around, be sure to give him a right trashing, would you?", - "3": "I think you took breaking the ice a little too literally…" - }, - "defeat": { - "1": "Now do you see how severe battles can be?", - "2": "Hee! Looks like I went and won again!", - "3": "Are you holding back?" - } - }, - "marlon": { - "encounter": { - "1": "You look strong! Shoots! Let's start!", - "2": "I'm strong like the ocean's wide. You're gonna get swept away, fo' sho'.", - "3": "Oh ho, so I'm facing you! That's off the wall." - }, - "victory": { - "1": "You totally rocked that! You're raising some wicked Pokémon. You got this Trainer thing down!", - "2": "You don't just look strong, you're strong fo' reals! Eh, I was swept away, too!", - "3": "You're strong as a gnarly wave!" - }, - "defeat": { - "1": "You're tough, but it's not enough to sway the sea, 'K!", - "2": "Hee! Looks like I went and won again!", - "3": "Sweet, sweet victory!" - } - }, - "shauntal": { - "encounter": { - "1": "Excuse me. You're a challenger, right?\nI'm the Elite Four's Ghost-type Pokémon user, Shauntal, and I shall be your opponent.", - "2": "I absolutely love writing about Trainers who come here and the Pokémon they train.\nCould I use you and your Pokémon as a subject?", - "3": "Every person who works with Pokémon has a story to tell.\nWhat story is about to be told?" - }, - "victory": { - "1": "Wow. I'm dumbstruck!", - "2": "S-sorry! First, I must apologize to my Pokémon…\n\nI'm really sorry you had a bad experience because of me!", - "3": "Even in light of that, I'm still one of the Elite Four!" - }, - "defeat": { - "1": "Eheh.", - "2": "That gave me excellent material for my next novel!", - "3": "And so, another tale ends…" - } - }, - "marshal": { - "encounter": { - "1": "My mentor, Alder, sees your potential as a Trainer and is taking an interest in you.\nIt is my intention to test you--to take you to the limits of your strength. Kiai!", - "2": "Victory, decisive victory, is my intention! Challenger, here I come!", - "3": "In myself, I seek to develop the strength of a fighter and shatter any weakness in myself!\nPrevailing with the force of my convictions!" - }, - "victory": { - "1": "Whew! Well done!", - "2": "As your battles continue, aim for even greater heights!", - "3": "The strength shown by you and your Pokémon has deeply impressed me…" - }, - "defeat": { - "1": "Hmm.", - "2": "That was good battle.", - "3": "Haaah! Haaah! Haiyaaaah!" - } - }, - "cheren": { - "encounter": { - "1": "You remind me of an old friend. That makes me excited about this Pokémon battle!", - "2": "Pokémon battles have no meaning if you don't think why you battle.\n$Or better said, it makes battling together with Pokémon meaningless.", - "3": "My name's Cheren! I'm a Gym Leader and a teacher! Pleasure to meet you." - }, - "victory": { - "1": "Thank you! I saw what was missing in me.", - "2": "Thank you! I feel like I saw a little of the way toward my ideals.", - "3": "Hmm… This is problematic." - }, - "defeat": { - "1": "As a Gym Leader, I aim to be a wall for you to overcome.", - "2": "All right!", - "3": "I made it where I am because Pokémon were by my side.\nPerhaps we need to think about why Pokémon help us not in terms of Pokémon and Trainers but as a relationship between living beings." - } - }, - "chili": { - "encounter": { - "1": "Yeeeeooow! Time to play with FIRE!! I'm the strongest of us brothers!", - "2": "Ta-da! The Fire-type scorcher Chili--that's me--will be your opponent!", - "3": "I'm going to show you what me and my blazing Fire types can do!" - }, - "victory": { - "1": "You got me. I am… burned… out…", - "2": "Whoa ho! You're on fire!", - "3": "Augh! You got me!" - }, - "defeat": { - "1": "I'm on fire! Play with me, and you'll get burned!", - "2": "When you play with fire, you get burned!", - "3": "I mean, c'mon, your opponent was me! You didn't have a chance!" - } - }, - "cilan": { - "encounter": { - "1": "Nothing personal... No hard feelings... Me and my Grass-type Pokémon will...\n$Um... We're gonna battle come what may.", - "2": "So, um, if you're OK with me, I'll, um, put everything I've got into being, er, you know, your opponent.", - "3": "OK… So, um, I'm Cilan, I like Grass-type Pokémon." - }, - "victory": { - "1": "Er… Is it over now?", - "2": "…What a surprise. You are very strong, aren't you? \n$I guess my brothers wouldn't have been able to defeat you either…", - "3": "…Huh. Looks like my timing was, um, off?" - }, - "defeat": { - "1": "Huh? Did I win?", - "2": "I guess… \n$I suppose I won, because I've been competing with my brothers Chili and Cress, and we all were able to get tougher.", - "3": "It…it was quite a thrilling experience…" - } - }, - "roark": { - "encounter": { - "1": "I need to see your potential as a Trainer. And, I'll need to see the toughness of the Pokémon that battle with you!", - "2": "Here goes! These are my rocking Pokémon, my pride and joy!", - "3": "Rock-type Pokémon are simply the best!", - "4": "I need to see your potential as a Trainer. And, I'll need to see the toughness of the Pokémon that battle with you!" - }, - "victory": { - "1": "W-what? That can't be! My buffed-up Pokémon!", - "2": "…We lost control there. Next time I'd like to challenge you to a Fossil-digging race underground.", - "3": "With skill like yours, it's natural for you to win.", - "4": "Wh-what?! It can't be! Even that wasn't enough?", - "5": "I blew it." - }, - "defeat": { - "1": "See? I'm proud of my rocking battle style!", - "2": "Thanks! The battle gave me confidence that I may be able to beat my dad!", - "3": "I feel like I just smashed through a really stubborn boulder!" - } - }, - "morty": { - "encounter": { - "1": "With a little more, I could see a future in which I meet the legendary Pokémon.\n$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. \n$I believed that tale, so I have secretly trained here all my life. As a result, I can now see what others cannot. \n$I see a shadow of the person who will make the Pokémon appear. \n$I believe that person is me! You're going to help me reach that level!", - "3": "Whether you choose to believe or not, mystic power does exist.", - "4": "You can bear witness to the fruits of my training.", - "5": "You must make your soul one with that of Pokémon. Can you do this?", - "6": "Say, do you want to be part of my training?" - }, - "victory": { - "1": "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.\n$I envy you for that…", - "3": "How is this possible…", - "4": "I don't think our potentials are so different.\n$But you seem to have something more than that… So be it.", - "5": "Guess I need more training.", - "6": "That's a shame." - }, - "defeat": { - "1": "I moved… one step ahead again.", - "2": "Fufufu…", - "3": "Wh-what?! It can't be! Even that wasn't enough?", - "4": "I feel like I just smashed through a really stubborn boulder!", - "5": "Ahahahah!", - "6": "I knew I would win!" - } - }, - "crispin": { - "encounter": { - "1": "I wanna win, so that's exactly what I'll do!", - "2": "I battle because I wanna battle! And you know what? That's how it should be!" - }, - "victory": { - "1": "I wanted to win…but I lost!", - "2": "I lost…'cause I couldn't win!" - }, - "defeat": { - "1": "Hey, wait a sec. Did I just win? I think I just won! Talk about satisfying!", - "2": "Wooo! That was amazing!" - } - }, - "amarys": { - "encounter": { - "1": "I want to be the one to help a certain person. That being the case, I cannot afford to lose.\n$… Our battle starts now." - }, - "victory": { - "1": "I am… not enough, I see." - }, - "defeat": { - "1": "Victory belongs to me. Well fought." - } - }, - "lacey": { - "encounter": { - "1": "I'll be facing you with my usual party as a member of the Elite Four." - }, - "victory": { - "1": "That was a great battle!" - }, - "defeat": { - "1": "Let's give your Pokémon a nice round of applause for their efforts!" - } - }, - "drayton": { - "encounter": { - "1": "Man, I love chairs. Don't you love chairs? What lifesavers. \n$I don't get why everyone doesn't just sit all the time. Standing up's tiring work!" - }, - "victory": { - "1": "Guess I should've expected that!" - }, - "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?" - } - }, - "ramos": { - "encounter": { - "1": "Did yeh enjoy the garden playground I made with all these sturdy plants o' mine?\n$Their strength is a sign o' my strength as a gardener and a Gym Leader! Yeh sure yer up to facing all that?" - }, - "victory": { - "1": "Yeh believe in yer Pokémon… And they believe in yeh, too… It was a fine battle, sprout." - }, - "defeat": { - "1": "Hohoho… Indeed. Frail little blades o' grass'll break through even concrete." - } - }, - "viola": { - "encounter": { - "1": "Whether it's the tears of frustration that follow a loss or the blossoming of joy that comes with victory…\n$They're both great subjects for my camera! Fantastic! This'll be just fantastic! \n$Now come at me!", - "2": "My lens is always focused on victory--I won't let anything ruin this shot!" - }, - "victory": { - "1": "You and your Pokémon have shown me a whole new depth of field! Fantastic! Just fantastic!", - "2": "The world you see through a lens, and the world you see with a Pokémon by your side…\n$The same world can look entirely different depending on your view." - }, - "defeat": { - "1": "The photo from the moment of my victory will be a real winner, all right!", - "2": "Yes! I took some great photos!" - } - }, - "candice": { - "encounter": { - "1": "You want to challenge Candice? Sure thing! I was waiting for someone tough! \n$But I should tell you, I'm tough because I know how to focus.", - "2": "Pokémon, fashion, romance… It's all about focus! \n$I'll show you just what I mean. Get ready to lose!" - }, - "victory": { - "1": "I must say, I'm warmed up to you! I might even admire you a little.", - "2": "Wow! You're great! You've earned my respect! \n$I think your focus and will bowled us over totally. " - }, - "defeat": { - "1": "I sensed your will to win, but I don't lose!", - "2": "See? Candice's focus! My Pokémon's focus is great, too!" - } - }, - "gardenia": { - "encounter": { - "1": "You have a winning aura about you. So, anyway, this will be fun. Let's have our battle!" - }, - "victory": { - "1": "Amazing! You're very good, aren't you?" - }, - "defeat": { - "1": "Yes! My Pokémon and I are perfectly good!" - } - }, - "aaron": { - "encounter": { - "1": "Ok! Let me take you on!" - }, - "victory": { - "1": "Battling is a deep and complex affair…" - }, - "defeat": { - "1": "Victory over an Elite Four member doesn't come easily." - } - }, - "cress": { - "encounter": { - "1": "That is correct! It shall be I and my esteemed Water types that you must face in battle!" - }, - "victory": { - "1": "Lose? Me? I don't believe this." - }, - "defeat": { - "1": "This is the appropriate result when I'm your opponent." - } - }, - "allister": { - "encounter": { - "1": "'M Allister.\nH-here… I go…" - }, - "victory": { - "1": "I nearly lost my mask from the shock… That was…\n$Wow. I can see your skill for what it is." - }, - "defeat": { - "1": "Th-that was ace!" - } - }, - "clay": { - "encounter": { - "1": "Harrumph! Kept me waitin', didn't ya, kid? All right, time to see what ya can do!" - }, - "victory": { - "1": "Man oh man… It feels good to go all out and still be defeated!" - }, - "defeat": { - "1": "What's important is how ya react to losin'. \n$That's why folks who use losin' as fuel to get better are tough." - } - }, - "kofu": { - "encounter": { - "1": "I'mma serve you a full course o' Water-type Pokémon! Don't try to eat 'em, though!" - }, - "victory": { - "1": "Vaultin' Veluza! Yer a lively one, aren't ya! A little TOO lively, if I do say so myself!" - }, - "defeat": { - "1": "You come back to see me again now, ya hear?" - } - }, - "tulip": { - "encounter": { - "1": "Allow me to put my skills to use to make your cute little Pokémon even more beautiful!" - }, - "victory": { - "1": "Your strength has a magic to it that cannot be washed away." - }, - "defeat": { - "1": "You know, in my line of work, people who lack talent in one area or the other often fade away quickly—never to be heard of again." - } - }, - "sidney": { - "encounter": { - "1": "I like that look you're giving me. I guess you'll give me a good match.\n$That's good! Looking real good! All right!\n$You and me, let's enjoy a battle that can only be staged here!" - }, - "victory": { - "1": "Well, how do you like that? I lost! Eh, it was fun, so it doesn't matter." - }, - "defeat": { - "1": "No hard feelings, alright?" - } - }, - "phoebe": { - "encounter": { - "1": "While I trained, I gained the ability to commune with Ghost-type Pokémon. \n$Yes, the bond I developed with Pokémon is extremely tight. \n$So, come on, just try and see if you can even inflict damage on my Pokémon!" - }, - "victory": { - "1": "Oh, darn. I've gone and lost." - }, - "defeat": { - "1": "I look forward to battling you again sometime!" - } - }, - "glacia": { - "encounter": { - "1": "All I have seen are challenges by weak Trainers and their Pokémon. \n$What about you? It would please me to no end if I could go all out against you!" - }, - "victory": { - "1": "You and your Pokémon… How hot your spirits burn!\n$The all-consuming heat overwhelms. \n$It's no surprise that my icy skills failed to harm you." - }, - "defeat": { - "1": "A fiercely passionate battle, indeed." - } - }, - "drake": { - "encounter": { - "1": "For us to battle with Pokémon as partners, do you know what it takes? Do you know what is needed? \n$If you don't, then you will never prevail over me!" - }, - "victory": { - "1": "Superb, it should be said." - }, - "defeat": { - "1": "I gave my all for that battle!" - } - }, - "wallace": { - "encounter": { - "1": "There's something about you… A difference in your demeanor. \n$I think I sense that in you. Now, show me. Show me the power you wield with your Pokémon. \n$And I, in turn, shall present you with a performance of illusions in water by me and my Pokémon!" - }, - "victory": { - "1": "Bravo. I realize now your authenticity and magnificence as a Pokémon Trainer. \n$I find much joy in having met you and your Pokémon. You have proven yourself worthy." - }, - "defeat": { - "1": "A grand illusion!" - } - }, - "lorelei": { - "encounter": { - "1": "No one can best me when it comes to icy Pokémon! Freezing moves are powerful!\n$Your Pokémon will be at my mercy when they are frozen solid! Hahaha! Are you ready?" - }, - "victory": { - "1": "How dare you!" - }, - "defeat": { - "1": "There's nothing you can do once you're frozen." - } - }, - "will": { - "encounter": { - "1": "I have trained all around the world, making my psychic Pokémon powerful.\n$I can only keep getting better! Losing is not an option!" - }, - "victory": { - "1": "I… I can't… believe it…" - }, - "defeat": { - "1": "That was close. I wonder what it is that you lack." - } - }, - "malva": { - "encounter": { - "1": "I feel like my heart might just burst into flames. \n$I'm burning up with my hatred for you, runt!" - }, - "victory": { - "1": "What news… So a new challenger has defeated Malva!" - }, - "defeat": { - "1": "I am delighted! Yes, delighted that I could squash you beneath my heel." - } - }, - "hala": { - "encounter": { - "1": "Old Hala is here to make you holler!" - }, - "victory": { - "1": "I could feel the power you gained on your journey." - }, - "defeat": { - "1": "Haha! What a delightful battle!" - } - }, - "molayne": { - "encounter": { - "1": "I gave the captain position to my cousin Sophocles, but I'm confident in my ability. \n$My strength is like that of a supernova!" - }, - "victory": { - "1": "I certainly found an interesting Trainer to face!" - }, - "defeat": { - "1": "Ahaha. What an interesting battle." - } - }, - "rika": { - "encounter": { - "1": "I'd say I'll go easy on you, but… I'd be lying! Think fast!" - }, - "victory": { - "1": "Not bad, kiddo." - }, - "defeat": { - "1": "Nahahaha! You really are something else, kiddo!" - } - }, - "bruno": { - "encounter": { - "1": "We will grind you down with our superior power! Hoo hah!" - }, - "victory": { - "1": "Why? How could I lose?" - }, - "defeat": { - "1": "You can challenge me all you like, but the results will never change!" - } - }, - "bugsy": { - "encounter": { - "1": "I'm Bugsy! I never lose when it comes to bug Pokémon!" - }, - "victory": { - "1": "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win." - }, - "defeat": { - "1": "Thanks! Thanks to our battle, I was also able to make progress in my research!" - } - }, - "koga": { - "encounter": { - "1": "Fwahahahaha! Pokémon are not merely about brute force--you shall see soon enough!" - }, - "victory": { - "1": "Ah! You've proven your worth!" - }, - "defeat": { - "1": "Have you learned to fear the techniques of the ninja?" - } - }, - "bertha": { - "encounter": { - "1": "Well, would you show this old lady how much you've learned?" - }, - "victory": { - "1": "Well! Dear child, I must say, that was most impressive. \n$Your Pokémon believed in you and did their best to earn you the win. \n$Even though I've lost, I find myself with this silly grin!" - }, - "defeat": { - "1": "Hahahahah! Looks like this old lady won!" - } - }, - "lenora": { - "encounter": { - "1": "Well then, challenger, I'm going to research how you battle with the Pokémon you've so lovingly raised!" - }, - "victory": { - "1": "My theory about you was correct. You're more than just talented… You're motivated! I salute you!" - }, - "defeat": { - "1": "Ah ha ha! If you lose, make sure to analyze why, and use that knowledge in your next battle!" - } - }, - "siebold": { - "encounter": { - "1": "As long as I am alive, I shall strive onward to seek the ultimate cuisine... and the strongest opponents in battle!" - }, - "victory": { - "1": "I shall store my memory of you and your Pokémon forever away within my heart." - }, - "defeat": { - "1": "Our Pokémon battle was like food for my soul. It shall keep me going. \n$That is how I will pay my respects to you for giving your all in battle!" - } - }, - "roxie": { - "encounter": { - "1": "Get ready! I'm gonna knock some sense outta ya!" - }, - "victory": { - "1": "Wild! Your reason's already more toxic than mine!" - }, - "defeat": { - "1": "Hey, c'mon! Get serious! You gotta put more out there!" - } - }, - "olivia": { - "encounter": { - "1": "No introduction needed here. Time to battle me, Olivia!" - }, - "victory": { - "1": "Really lovely… Both you and your Pokémon…" - }, - "defeat": { - "1": "Mmm-hmm." - } - }, - "poppy": { - "encounter": { - "1": "Oooh! Do you wanna have a Pokémon battle with me?" - }, - "victory": { - "1": "Uagh?! Mmmuuuggghhh…" - }, - "defeat": { - "1": "Yaaay! I did it! I de-feet-ed you! You can come for… For… An avenge match? \n$Come for an avenge match anytime you want!" - } - }, - "agatha": { - "encounter": { - "1": "Pokémon are for battling! I'll show you how a real Trainer battles!" - }, - "victory": { - "1": "Oh my! You're something special, child!" - }, - "defeat": { - "1": "Bahaha. That's how a proper battle's done!" - } - }, - "flint": { - "encounter": { - "1": "Hope you're warmed up, cause here comes the Big Bang!" - }, - "victory": { - "1": "Incredible! Your moves are so hot, they make mine look lukewarm!" - }, - "defeat": { - "1": "Huh? Is that it? I think you need a bit more passion." - } - }, - "grimsley": { - "encounter": { - "1": "The winner takes everything, and there's nothing left for the loser." - }, - "victory": { - "1": "When one loses, they lose everything… The next thing I'll look for will be victory, too!" - }, - "defeat": { - "1": "If somebody wins, the person who fought against that person will lose." - } - }, - "caitlin": { - "encounter": { - "1": "It's me who appeared when the flower opened up. You who have been waiting…\n$You look like a Pokémon Trainer with refined strength and deepened kindness. \n$What I look for in my opponent is superb strength… \n$Please unleash your power to the fullest!" - }, - "victory": { - "1": "My Pokémon and I learned so much! I offer you my thanks." - }, - "defeat": { - "1": "I aspire to claim victory with elegance and grace." - } - }, - "diantha": { - "encounter": { - "1": "Battling against you and your Pokémon, all of you brimming with hope for the future… \n$Honestly, it just fills me up with energy I need to keep facing each new day! It does!" - }, - "victory": { - "1": "Witnessing the noble spirits of you and your Pokémon in battle has really touched my heart…" - }, - "defeat": { - "1": "Oh, fantastic! What did you think? My team was pretty cool, right?" - } - }, - "wikstrom": { - "encounter": { - "1": "Well met, young challenger! Verily am I the famed blade of hardened steel, Duke Wikstrom! \n$Let the battle begin! En garde!" - }, - "victory": { - "1": "Glorious! The trust that you share with your honorable Pokémon surpasses even mine!" - }, - "defeat": { - "1": "What manner of magic is this? My heart, it doth hammer ceaselessly in my breast! \n$Winning against such a worthy opponent doth give my soul wings--thus do I soar!" - } - }, - "acerola": { - "encounter": { - "1": "Battling is just plain fun! Come on, I can take you!" - }, - "victory": { - "1": "I'm… I'm speechless! How did you do it?!" - }, - "defeat": { - "1": "Ehaha! What an amazing victory!" - } - }, - "larry_elite": { - "encounter": { - "1": "Hello there… It's me, Larry.\n$I serve as a member of the Elite Four too, yes… Unfortunately for me." - }, - "victory": { - "1": "Well, that took the wind from under our wings…" - }, - "defeat": { - "1": "It's time for a meeting with the boss." - } - }, - "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." - }, - "victory": { - "1": "You got me. You are magnificent!", - "2": "I never expected another trainer to beat me… I'm surprised." - }, - "defeat": { - "1": "That was close. Want to try again?", - "2": "It's not that you are weak. Don't let it bother you." - } - }, - "karen": { - "encounter": { - "1": "I am Karen. Would you care for a showdown with my Dark-type Pokémon?", - "2": "I am unlike those you've already met.", - "3": "You've assembled a charming team. Our battle should be a good one." - }, - "victory": { - "1": "No! I can't win. How did you become so strong?", - "2": "I will not stray from my chosen path.", - "3": "The Champion is looking forward to meeting you." - }, - "defeat": { - "1": "That's about what I expected.", - "2": "Well, that was relatively entertaining.", - "3": "Come visit me anytime." - } - }, - "milo": { - "encounter": { - "1": "Sure seems like you understand Pokémon real well. \n$This is gonna be a doozy of a battle! \n$I'll have to Dynamax my Pokémon if I want to win!" - }, - "victory": { - "1": "The power of Grass has wilted… What an incredible Challenger!" - }, - "defeat": { - "1": "This'll really leave you in shock and awe." - } - }, - "lucian": { - "encounter": { - "1": "Just a moment, please. The book I'm reading has nearly reached its thrilling climax… \n$The hero has obtained a mystic sword and is about to face their final trial… Ah, never mind. \n$Since you've made it this far, I'll put that aside and battle you. \n$Let me see if you'll achieve as much glory as the hero of my book!" - }, - "victory": { - "1": "I see… It appears you've put me in checkmate." - }, - "defeat": { - "1": "I have a reputation to uphold." - } - }, - "drasna": { - "encounter": { - "1": "You must be a strong Trainer. Yes, quite strong indeed…\n$That's just wonderful news! Facing opponents like you and your team will make my Pokémon grow like weeds!" - }, - "victory": { - "1": "Oh, dear me. That sure was a quick battle… I do hope you'll come back again sometime!" - }, - "defeat": { - "1": "How can this be?" - } - }, - "kahili": { - "encounter": { - "1": "So, here you are… Why don't we see who the winds favor today, you… Or me?" - }, - "victory": { - "1": "It's frustrating to me as a member of the Elite Four, but it seems your strength is the real deal." - }, - "defeat": { - "1": "That was an ace!" - } - }, - "hassel": { - "encounter": { - "1": "Prepare to learn firsthand how the fiery breath of ferocious battle feels!" - }, - "victory": { - "1": "Fortune smiled on me this time, but… \n$Judging from how the match went, who knows if I will be so lucky next time." - }, - "defeat": { - "1": "That was an ace!" - } - }, - "blue": { - "encounter": { - "1": "You must be pretty good to get this far." - }, - "victory": { - "1": "I've only lost to him and now to you… Him? Hee, hee…" - }, - "defeat": { - "1": "See? My power is what got me here." - } - }, - "piers": { - "encounter": { - "1": "Get ready for a mosh pit with me and my party! Spikemuth, it's time to rock!" - }, - "victory": { - "1": "Me an' my team gave it our best. Let's meet up again for a battle some time…" - }, - "defeat": { - "1": "My throat's ragged from shoutin'… But 'at was an excitin' battle!" - } - }, - "red": { - "encounter": { - "1": "…!" - }, - "victory": { - "1": "…?" - }, - "defeat": { - "1": "…!" - } - }, - "jasmine": { - "encounter": { - "1": "Oh… Your Pokémon are impressive. I think I will enjoy this." - }, - "victory": { - "1": "You are truly strong. I'll have to try much harder, too." - }, - "defeat": { - "1": "I never expected to win." - } - }, - "lance_champion": { - "encounter": { - "1": "I am still the Champion. I won't hold anything back." - }, - "victory": { - "1": "This is the emergence of a new Champion." - }, - "defeat": { - "1": "I successfully defended my Championship." - } - }, - "steven": { - "encounter": { - "1": "Tell me… What have you seen on your journey with your Pokémon? \n$What have you felt, meeting so many other Trainers out there? \n$Traveling this rich land… Has it awoken something inside you? \n$I want you to come at me with all that you've learned. \n$My Pokémon and I will respond in turn with all that we know!" - }, - "victory": { - "1": "So I, the Champion, fall in defeat…" - }, - "defeat": { - "1": "That was time well spent! Thank you!" - } - }, - "cynthia": { - "encounter": { - "1": "I, Cynthia, accept your challenge! There won't be any letup from me!" - }, - "victory": { - "1": "No matter how fun the battle is, it will always end sometime…" - }, - "defeat": { - "1": "Even if you lose, never lose your love of Pokémon." - } - }, - "iris": { - "encounter": { - "1": "Know what? I really look forward to having serious battles with strong Trainers! \n$I mean, come on! The Trainers who make it here are Trainers who desire victory with every fiber of their being! \n$And they are battling alongside Pokémon that have been through countless difficult battles! \n$If I battle with people like that, not only will I get stronger, my Pokémon will, too! \n$And we'll get to know each other even better! OK! Brace yourself! \n$I'm Iris, the Pokémon League Champion, and I'm going to defeat you!" - }, - "victory": { - "1": "Aghhhh… I did my best, but we lost…" - }, - "defeat": { - "1": "Yay! We won!" - } - }, - "hau": { - "encounter": { - "1": "I wonder if a Trainer battles differently depending on whether they're from a warm region or a cold region.\n$Let's test it out!" - }, - "victory": { - "1": "That was awesome! I think I kinda understand your vibe a little better now!" - }, - "defeat": { - "1": "Ma-an, that was some kinda battle!" - } - }, - "geeta": { - "encounter": { - "1": "I decided to throw my hat in the ring once more. \n$Come now… Show me the fruits of your training." - }, - "victory": { - "1": "I eagerly await news of all your achievements!" - }, - "defeat": { - "1": "What's the matter? This isn't all, is it?" - } - }, - "nemona": { - "encounter": { - "1": "Yesss! I'm so psyched! Time for us to let loose!" - }, - "victory": { - "1": "Well, that stinks, but I still had fun! I'll getcha next time!" - }, - "defeat": { - "1": "Well, that was a great battle! Fruitful for sure." - } - }, - "leon": { - "encounter": { - "1": "We're gonna have an absolutely champion time!" - }, - "victory": { - "1": "My time as Champion is over… \n$But what a champion time it's been! \n$Thank you for the greatest battle I've ever had!" - }, - "defeat": { - "1": "An absolute champion time, that was!" - } - }, - "whitney": { - "encounter": { - "1": "Hey! Don't you think Pokémon are, like, super cute?" - }, - "victory": { - "1": "Waaah! Waaah! You're so mean!" - }, - "defeat": { - "1": "And that's that!" - } - }, - "chuck": { - "encounter": { - "1": "Hah! You want to challenge me? Are you brave or just ignorant?" - }, - "victory": { - "1": "You're strong! Would you please make me your apprentice?" - }, - "defeat": { - "1": "There. Do you realize how much more powerful I am than you?" - } - }, - "katy": { - "encounter": { - "1": "Don't let your guard down unless you would like to find yourself knocked off your feet!" - }, - "victory": { - "1": "All of my sweet little Pokémon dropped like flies!" - }, - "defeat": { - "1": "Eat up, my cute little Vivillon!" - } - }, - "pryce": { - "encounter": { - "1": "Youth alone does not ensure victory! Experience is what counts." - }, - "victory": { - "1": "Outstanding! That was perfect. Try not to forget what you feel now." - }, - "defeat": { - "1": "Just as I envisioned." - } - }, - "clair": { - "encounter": { - "1": "Do you know who I am? And you still dare to challenge me?" - }, - "victory": { - "1": "I wonder how far you can get with your skill level. This should be fascinating." - }, - "defeat": { - "1": "That's that." - } - }, - "maylene": { - "encounter": { - "1": "I've come to challenge you now, and I won't hold anything back. \n$Please prepare yourself for battle!" - }, - "victory": { - "1": "I admit defeat…" - }, - "defeat": { - "1": "That was awesome." - } - }, - "fantina": { - "encounter": { - "1": "You shall challenge me, yes? But I shall win. \n$That is what the Gym Leader of Hearthome does, non?" - }, - "victory": { - "1": "You are so fantastically strong. I know why I have lost." - }, - "defeat": { - "1": "I am so, so, very happy!" - } - }, - "byron": { - "encounter": { - "1": "Trainer! You're young, just like my son, Roark. \n$With more young Trainers taking charge, the future of Pokémon is bright! \n$So, as a wall for young people, I'll take your challenge!" - }, - "victory": { - "1": "Hmm! My sturdy Pokémon--defeated!" - }, - "defeat": { - "1": "Gwahahaha! How were my sturdy Pokémon?!" - } - }, - "olympia": { - "encounter": { - "1": "An ancient custom deciding one's destiny. The battle begins!" - }, - "victory": { - "1": "Create your own path. Let nothing get in your way. Your fate, your future." - }, - "defeat": { - "1": "Our path is clear now." - } - }, - "volkner": { - "encounter": { - "1": "Since you've come this far, you must be quite strong…\n$I hope you're the Trainer who'll make me remember how fun it is to battle!" - }, - "victory": { - "1": "You've got me beat…\n$Your desire and the noble way your Pokémon battled for you… \n$I even felt thrilled during our match. That was a very good battle." - }, - "defeat": { - "1": "It was not shocking at all… \n$That is not what I wanted!" - } - }, - "burgh": { - "encounter": { - "1": "M'hm… If I win this battle, I feel like I can draw a picture unlike any before it. \n$OK! I can hear my battle muse loud and clear. Let's get straight to it!", - "2": "Of course, I'm really proud of all of my Pokémon! \n$Well now… Let's get right to it!" - }, - "victory": { - "1": "Is it over? Has my muse abandoned me?", - "2": "Hmm… It's over! You're incredible!" - }, - "defeat": { - "1": "Wow… It's beautiful somehow, isn't it…", - "2": "Sometimes I hear people say something was an ugly win. \n$I think if you're trying your best, any win is beautiful." - } - }, - "elesa": { - "encounter": { - "1": "C'est fini! When I'm certain of that, I feel an electric jolt run through my body! \n$I want to feel the sensation, so now my beloved Pokémon are going to make your head spin!" - }, - "victory": { - "1": "I meant to make your head spin, but you shocked me instead." - }, - "defeat": { - "1": "That was unsatisfying somehow… Will you give it your all next time?" - } - }, - "skyla": { - "encounter": { - "1": "It's finally time for a showdown! That means the Pokémon battle that decides who's at the top, right? \n$I love being on the summit! 'Cause you can see forever and ever from high places! \n$So, how about you and I have some fun?" - }, - "victory": { - "1": "Being your opponent in battle is a new source of strength to me. Thank you!" - }, - "defeat": { - "1": "Win or lose, you always gain something from a battle, right?" - } - }, - "brycen": { - "encounter": { - "1": "There is also strength in being with other people and Pokémon. \n$Receiving their support makes you stronger. I'll show you this power!" - }, - "victory": { - "1": "The wonderful combination of you and your Pokémon! What a beautiful friendship!" - }, - "defeat": { - "1": "Extreme conditions really test you and train you!" - } - }, - "drayden": { - "encounter": { - "1": "What I want to find is a young Trainer who can show me a bright future. \n$Let's battle with everything we have: your skill, my experience, and the love we've raised our Pokémon with!" - }, - "victory": { - "1": "This intense feeling that floods me after a defeat… I don't know how to describe it." - }, - "defeat": { - "1": "Harrumph! I know your ability is greater than that!" - } - }, - "grant": { - "encounter": { - "1": "There is only one thing I wish for. \n$That by surpassing one another, we find a way to even greater heights." - }, - "victory": { - "1": "You are a wall that I am unable to surmount!" - }, - "defeat": { - "1": "Do not give up. \n$That is all there really is to it. \n$The most important lessons in life are simple." - } - }, - "korrina": { - "encounter": { - "1": "Time for Lady Korrina's big appearance!" - }, - "victory": { - "1": "It's your very being that allows your Pokémon to evolve!" - }, - "defeat": { - "1": "What an explosive battle!" - } - }, - "clemont": { - "encounter": { - "1": "Oh! I'm glad that we got to meet!" - }, - "victory": { - "1": "Your passion for battle inspires me!" - }, - "defeat": { - "1": "Looks like my Trainer-Grow-Stronger Machine, Mach 2 is really working!" - } - }, - "valerie": { - "encounter": { - "1": "Oh, if it isn't a young Trainer… It is lovely to get to meet you like this. \n$Then I suppose you have earned yourself the right to a battle, as a reward for your efforts. \n$The elusive Fairy may appear frail as the breeze and delicate as a bloom, but it is strong." - }, - "victory": { - "1": "I hope that you will find things worth smiling about tomorrow…" - }, - "defeat": { - "1": "Oh goodness, what a pity…" - } - }, - "wulfric": { - "encounter": { - "1": "You know what? We all talk big about what you learn from battling and bonds and all that…\n$But really, I just do it 'cause it's fun. \n$Who cares about the grandstanding? Let's get to battling!" - }, - "victory": { - "1": "Outstanding! I'm tough as an iceberg, but you smashed me through and through!" - }, - "defeat": { - "1": "Tussle with me and this is what happens!" - } - }, - "kabu": { - "encounter": { - "1": "Every Trainer and Pokémon trains hard in pursuit of victory. \n$But that means your opponent is also working hard to win. \n$In the end, the match is decided by which side is able to unleash their true potential." - }, - "victory": { - "1": "I'm glad I could battle you today!" - }, - "defeat": { - "1": "That's a great way for me to feel my own growth!" - } - }, - "bea": { - "encounter": { - "1": "Do you have an unshakable spirit that won't be moved, no matter how you are attacked? \n$I think I'll just test that out, shall I?" - }, - "victory": { - "1": "I felt the fighting spirit of your Pokémon as you led them in battle." - }, - "defeat": { - "1": "That was the best sort of match anyone could ever hope for." - } - }, - "opal": { - "encounter": { - "1": "Let me have a look at how you and your partner Pokémon behave!" - }, - "victory": { - "1": "Your pink is still lacking, but you're an excellent Trainer with excellent Pokémon." - }, - "defeat": { - "1": "Too bad for you, I guess." - } - }, - "bede": { - "encounter": { - "1": "I suppose I should prove beyond doubt just how pathetic you are and how strong I am." - }, - "victory": { - "1": "I see… Well, that's fine. I wasn't really trying all that hard anyway." - }, - "defeat": { - "1": "Not a bad job, I suppose." - } - }, - "gordie": { - "encounter": { - "1": "So, let's get this over with." - }, - "victory": { - "1": "I just want to climb into a hole… Well, I guess it'd be more like falling from here." - }, - "defeat": { - "1": "Battle like you always do, victory will follow!" - } - }, - "marnie": { - "encounter": { - "1": "The truth is, when all's said and done… I really just wanna become Champion for myself! \n$So don't take it personal when I kick your butt!" - }, - "victory": { - "1": "OK, so I lost… But I got to see a lot of the good points of you and your Pokémon!" - }, - "defeat": { - "1": "Hope you enjoyed our battle tactics." - } - }, - "raihan": { - "encounter": { - "1": "I'm going to defeat the Champion, win the whole tournament, and prove to the world just how strong the great Raihan really is!" - }, - "victory": { - "1": "I look this good even when I lose. \n$It's a real curse. \n$Guess it's time for another selfie!" - }, - "defeat": { - "1": "Let's take a selfie to remember this." - } - }, - "brassius": { - "encounter": { - "1": "I assume you are ready? Let our collaborative work of art begin!" - }, - "victory": { - "1": "Ahhh…vant-garde!" - }, - "defeat": { - "1": "I will begin on a new piece at once!" - } - }, - "iono": { - "encounter": { - "1": "How're ya feelin' about this battle?\n$...\n$Let's get this show on the road! How strong is our challenger? \n$I 'unno! Let's find out together!" - }, - "victory": { - "1": "You're as flashy and bright as a 10,000,000-volt Thunderbolt, friendo!" - }, - "defeat": { - "1": "Your eyeballs are MINE!" - } - }, - "larry": { - "encounter": { - "1": "When all's said and done, simplicity is strongest." - }, - "victory": { - "1": "A serving of defeat, huh?" - }, - "defeat": { - "1": "I'll call it a day." - } - }, - "ryme": { - "encounter": { - "1": "Come on, baby! Rattle me down to the bone!" - }, - "victory": { - "1": "You're cool, my friend—you move my SOUL!" - }, - "defeat": { - "1": "Later, baby!" - } - }, - "grusha": { - "encounter": { - "1": "All I need to do is make sure the power of my Pokémon chills you to the bone!" - }, - "victory": { - "1": "Your burning passion… I kinda like it, to be honest." - }, - "defeat": { - "1": "Things didn't heat up for you." - } - }, - "marnie_elite": { - "encounter": { - "1": "You've made it this far, huh? Let's see if you can handle my Pokémon!", - "2": "I'll give it my best shot, but don't think I'll go easy on you!" - }, - "victory": { - "1": "I can't believe I lost... But you deserved that win. Well done!", - "2": "Looks like I've still got a lot to learn. Great battle, though!" - }, - "defeat": { - "1": "You put up a good fight, but I've got the edge! Better luck next time!", - "2": "Seems like my training's paid off. Thanks for the battle!" - } - }, - "nessa_elite": { - "encounter": { - "1": "The tides are turning in my favor. Ready to get swept away?", - "2": "Let's make some waves with this battle! I hope you're prepared!" - }, - "victory": { - "1": "You navigated those waters perfectly... Well done!", - "2": "Looks like my currents were no match for you. Great job!" - }, - "defeat": { - "1": "Water always finds a way. That was a refreshing battle!", - "2": "You fought well, but the ocean's power is unstoppable!" - } - }, - "bea_elite": { - "encounter": { - "1": "Prepare yourself! My fighting spirit burns bright!", - "2": "Let's see if you can keep up with my relentless pace!" - }, - "victory": { - "1": "Your strength... It's impressive. You truly deserve this win.", - "2": "I've never felt this intensity before. Amazing job!" - }, - "defeat": { - "1": "Another victory for my intense training regimen! Well done!", - "2": "You've got strength, but I trained harder. Great battle!" - } - }, - "allister_elite": { - "encounter": { - "1": "Shadows fall... Are you ready to face your fears?", - "2": "Let's see if you can handle the darkness that I command." - }, - "victory": { - "1": "You've dispelled the shadows... For now. Well done.", - "2": "Your light pierced through my darkness. Great job." - }, - "defeat": { - "1": "The shadows have spoken... Your strength isn't enough.", - "2": "Darkness triumphs... Maybe next time you'll see the light." - } - }, - "raihan_elite": { - "encounter": { - "1": "Storm's brewing! Let's see if you can weather this fight!", - "2": "Get ready to face the eye of the storm!" - }, - "victory": { - "1": "You've bested the storm... Incredible job!", - "2": "You rode the winds perfectly... Great battle!" - }, - "defeat": { - "1": "Another storm weathered, another victory claimed! Well fought!", - "2": "You got caught in my storm! Better luck next time!" - } - }, - "alder": { - "encounter": { - "1": "Prepare yourself for a match against the strongest Trainer in Unova!" - }, - "victory": { - "1": "Well done! You certainly are an unmatched talent." - }, - "defeat": { - "1": "A fresh wind blows through my heart...\n$What an extraordinary effort!" - } - }, - "kieran": { - "encounter": { - "1": "Through hard work, I become stronger and stronger!\n$I don't lose." - }, - "victory": { - "1": "I don't believe it...\n$What a fun and heart-pounding battle!" - }, - "defeat": { - "1": "Wowzers, what a battle!\n$Time for you to train even harder." - } - }, - "rival": { - "encounter": { - "1": "@c{smile}Hey, I was looking for you! I knew you were eager to get going but I expected at least a goodbye…$@c{smile_eclosed}So you're really pursuing your dream after all? I almost can't believe it.$@c{serious_smile_fists}Since we're here, how about a battle?\nAfter all, I want to make sure you're ready.$@c{serious_mopen_fists}Don't hold back, I want you to give me everything you've got!" - }, - "victory": { - "1": "@c{shock}Wow… You cleaned me out.\nAre you actually a beginner?$@c{smile}Maybe it was a bit of luck but…Who knows you might just be able to go all the way.$By the way, the professor asked me to give you these items. They look pretty cool.$@c{serious_smile_fists}Good luck out there!" - } - }, - "rival_female": { - "encounter": { - "1": "@c{smile_wave}There you are! I've been looking everywhere for you!\n@c{angry_mopen}Did you forget to say goodbye to your best friend?\n$@c{smile_ehalf}You're going after your dream, huh?\nThat day is really today isn't it…\n$@c{smile}Anyway, I'll forgive you for forgetting me, but on one condition. @c{smile_wave_wink}You have to battle me!\n$@c{angry_mopen}Give it your all! Wouldn't want your adventure to be over before it started, right?" - }, - "victory": { - "1": "@c{shock}You just started and you're already this strong?!@d{96}\n@c{angry}You totally cheated, didn't you?\n$@c{smile_wave_wink}Just kidding!@d{64} @c{smile_eclosed}I lost fair and square… I have a feeling you're going to do really well out there.\n$@c{smile}By the way, the professor wanted me to give you some items. Hopefully they're helpful!\n$@c{smile_wave}Do your best like always! I believe in you!\n" - } - }, - "rival_2": { - "encounter": { - "1": "@c{smile}Hey, you're here too?\n@c{smile_eclosed}Still a perfect record, huh…?\n$@c{serious_mopen_fists}I know it kind of looks like I followed you here, but that's mostly not true.\n$@c{serious_smile_fists}Honestly though, I've been itching for a rematch since you beat me back at home.\n$I've been doing a lot of my own training so I'll definitely put up a fight this time.\n$@c{serious_mopen_fists}Don't hold back, just like before!\nLet's go!" - }, - "victory": { - "1": "@c{neutral_eclosed}Oh. I guess I was overconfident.\n$@c{smile}That's alright, though. I figured this might happen.\n@c{serious_mopen_fists}It just means I need to try harder for next time!\n\n$@c{smile}Oh, not that you really need the help, but I had an extra one of each of these lying around and figured you might want them.\n\n$@c{serious_smile_fists}Don't expect another one after this, though!\nI can't keep giving my opponent an advantage after all." - } - }, - "rival_2_female": { - "encounter": { - "1": "@c{smile_wave}Oh, fancy meeting you here. Looks like you're still undefeated. @c{angry_mopen}Huh… Not bad!\n$@c{angry_mopen}I know what you're thinking, and no, I wasn't creeping on you. @c{smile_eclosed}I just happened to be in the area.\n$@c{smile_ehalf}I'm happy for you but I just want to let you know that it's OK to lose sometimes.\n$@c{smile}We learn from our mistakes, often more than we would if we kept succeeding.\n$@c{angry_mopen}In any case, I've been training hard for our rematch, so you'd better give it your all!" - }, - "victory": { - "1": "@c{neutral}I… wasn't supposed to lose that time…\n$@c{smile}Aw well. That just means I'll have to train even harder for next time!\n$@c{smile_wave}I also got you another two of these!\n@c{smile_wave_wink}No need to thank me~.\n$@c{angry_mopen}This is the last one, though! You won't be getting anymore freebies from me after this!" - }, - "defeat": { - "1": "It's OK to lose sometimes…" - } - }, - "rival_3": { - "encounter": { - "1": "@c{smile}Hey, look who it is! It's been a while.\n@c{neutral}You're… still undefeated? Huh.\n$@c{neutral_eclosed}Things have been kind of… strange.\nIt's not the same back home without you.\n$@c{serious}I know it's selfish, but I need to get this off my chest.\n@c{neutral_eclosed}I think you're in over your head here.\n$@c{serious}Never losing once is just unrealistic.\nWe need to lose sometimes in order to grow.\n$@c{neutral_eclosed}You've had a great run but there's still so much ahead, and it only gets harder. @c{neutral}Are you prepared for that?\n$@c{serious_mopen_fists}If so, prove it to me." - }, - "victory": { - "1": "@c{angry_mhalf}This is ridiculous… I've hardly stopped training…\nHow are we still so far apart?" - } - }, - "rival_3_female": { - "encounter": { - "1": "@c{smile_wave}Long time no see! Still haven't lost, huh.\n@c{angry}You're starting to get on my nerves. @c{smile_wave_wink}Just kidding!\n$@c{smile_ehalf}But really, don't you miss home by now? Or… me?\nI… I mean, we've really missed you.\n$@c{smile_eclosed}I support you in your dream and everything, but the reality is you're going to lose sooner or later.\n$@c{smile}And when you do, I'll be there for you like always.\n@c{angry_mopen}Now, let me show you how strong I've become!" - }, - "victory": { - "1": "@c{shock}After all that… it wasn't enough…?\nYou'll never come back at this rate…" - }, - "defeat": { - "1": "You gave it your best, now let's go home." - } - }, - "rival_4": { - "encounter": { - "1": "@c{neutral}Hey.\n$I won't mince words or pleasantries with you.\n@c{neutral_eclosed}I'm here to win, plain and simple.\n$@c{serious_mhalf_fists}I've learned to maximize my potential by putting all my time into training.\n$@c{smile}You get a lot of extra time when you cut out the unnecessary sleep and social interaction.\n$@c{serious_mopen_fists}None of that matters anymore, not until I win.\n$@c{neutral_eclosed}I've even reached the point where I don't lose anymore.\n@c{smile_eclosed}I suppose your philosophy wasn't so wrong after all.\n$@c{angry_mhalf}Losing is for the weak, and I'm not weak anymore.\n$@c{serious_mopen_fists}Prepare yourself." - }, - "victory": { - "1": "@c{neutral}What…@d{64} What are you?" - } - }, - "rival_4_female": { - "encounter": { - "1": "@c{neutral}It's me! You didn't forget about me again… did you?\n$@c{smile}You should be proud of how far you made it. Congrats!\nBut it looks like it's the end of your journey.\n$@c{smile_eclosed}You've awoken something in me I never knew was there.\nIt seems like all I do now is train.\n$@c{smile_ehalf}I hardly even eat or sleep now, I just train my Pokémon all day, getting stronger every time.\n$@c{neutral}In fact, I… hardly recognize myself.\n$And now, I've finally reached peak performance.\nI don't think anyone could beat me now.\n$And you know what? It's all because of you.\n@c{smile_ehalf}I don't know whether to thank you or hate you.\n$@c{angry_mopen}Prepare yourself." - }, - "victory": { - "1": "@c{neutral}What…@d{64} What are you?" - }, - "defeat": { - "1": "$@c{smile}You should be proud of how far you made it." - } - }, - "rival_5": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - } - }, - "rival_5_female": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - }, - "defeat": { - "1": "$@c{smile_ehalf}…" - } - }, - "rival_6": { - "encounter": { - "1": "@c{smile_eclosed}We meet again.\n$@c{neutral}I've had some time to reflect on all this.\nThere's a reason this all seems so strange.\n$@c{neutral_eclosed}Your dream, my drive to beat you…\nIt's all a part of something greater.\n$@c{serious}This isn't about me, or about you… This is about the world, @c{serious_mhalf_fists}and it's my purpose to push you to your limits.\n$@c{neutral_eclosed}Whether I've fulfilled that purpose I can't say, but I've done everything in my power.\n$@c{neutral}This place we ended up in is terrifying… Yet somehow I feel unphased, like I've been here before.\n$@c{serious_mhalf_fists}You feel the same, don't you?\n$@c{serious}…and it's like something here is speaking to me.\nThis is all the world's known for a long time now.\n$Those times we cherished together that seem so recent are nothing but a distant memory.\n$@c{neutral_eclosed}Who can say whether they were ever even real in the first place.\n$@c{serious_mopen_fists}You need to keep pushing, because if you don't, it will never end. You're the only one who can do this.\n$@c{serious_smile_fists}I hardly know what any of this means, I just know that it's true.\n$@c{serious_mopen_fists}If you can't defeat me here and now, you won't stand a chance." - }, - "victory": { - "1": "@c{smile_eclosed}It looks like my work is done here.\n$I want you to promise me one thing.\n@c{smile}After you heal the world, please come home." - } - }, - "rival_6_female": { - "encounter": { - "1": "@c{smile_ehalf}So it's just us again.\n$@c{smile_eclosed}You know, I keep going around and around in my head…\n$@c{smile_ehalf}There's something to all this, why everything seems so strange now…\n$@c{smile}You have your dream, and I have this ambition in me…\n$I just can't help but feel there's a greater purpose to all this, to what we're doing, you and I.\n$@c{smile_eclosed}I think I'm supposed to push you… to your limits.\n$@c{smile_ehalf}I'm not sure if I've been doing a good job at that, but I've tried my best up to now.\n$It's something about this strange and dreadful place… Everything seems so clear…\n$This… is all the world's known for a long time now.\n$@c{smile_eclosed}It's like I can barely remember the memories we cherished together.\n$@c{smile_ehalf}Were they even real? They seem so far away now…\n$@c{angry_mopen}You need to keep pushing, because if you don't, it will never end. You're the only one who can do this.\n$@c{smile_ehalf}I… don't know what all this means… but I feel it's true.\n$@c{neutral}If you can't defeat me here and now, you won't stand a chance." - }, - "victory": { - "1": "@c{smile_ehalf}I… I think I fulfilled my purpose…\n$@c{smile_eclosed}Promise me… After you heal the world… Please… come home safe.\n$@c{smile_ehalf}…Thank you." - } - } -} diff --git a/src/locales/en/dialogue-final-boss-male.json b/src/locales/en/dialogue-final-boss-male.json deleted file mode 100644 index 2e03b6e15e3..00000000000 --- a/src/locales/en/dialogue-final-boss-male.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "encounter": "It appears the time has finally come once again.\nYou know why you have come here, do you not?\n$You were drawn here, because you have been here before.\nCountless times.\n$Though, perhaps it can be counted.\nTo be precise, this is in fact your {{cycleCount}} cycle.\n$Each cycle your mind reverts to its former state.\nEven so, somehow, remnants of your former selves remain.\n$Until now you have yet to succeed, but I sense a different presence in you this time.\n\n$You are the only one here, though it is as if there is… another.\n$Will you finally prove a formidable challenge to me?\nThe challenge I have longed after for millennia?\n$We begin.", - "firstStageWin": "I see. The presence I felt was indeed real.\nIt appears I no longer need to hold back.\n$Do not disappoint me.", - "secondStageWin": "…Magnificent." -} \ No newline at end of file diff --git a/src/locales/en/dialogue-final-boss-female.json b/src/locales/en/dialogue-final-boss.json similarity index 96% rename from src/locales/en/dialogue-final-boss-female.json rename to src/locales/en/dialogue-final-boss.json index 2e03b6e15e3..48a5aa439f3 100644 --- a/src/locales/en/dialogue-final-boss-female.json +++ b/src/locales/en/dialogue-final-boss.json @@ -1,5 +1,6 @@ { "encounter": "It appears the time has finally come once again.\nYou know why you have come here, do you not?\n$You were drawn here, because you have been here before.\nCountless times.\n$Though, perhaps it can be counted.\nTo be precise, this is in fact your {{cycleCount}} cycle.\n$Each cycle your mind reverts to its former state.\nEven so, somehow, remnants of your former selves remain.\n$Until now you have yet to succeed, but I sense a different presence in you this time.\n\n$You are the only one here, though it is as if there is… another.\n$Will you finally prove a formidable challenge to me?\nThe challenge I have longed after for millennia?\n$We begin.", + "encounter_female": null, "firstStageWin": "I see. The presence I felt was indeed real.\nIt appears I no longer need to hold back.\n$Do not disappoint me.", "secondStageWin": "…Magnificent." } \ No newline at end of file diff --git a/src/locales/en/dialogue-misc-male.json b/src/locales/en/dialogue-misc-male.json deleted file mode 100644 index f5c63a85410..00000000000 --- a/src/locales/en/dialogue-misc-male.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "ending": "@c{smile}Oh? You won?@d{96} @c{smile_eclosed}I guess I should've known.\nBut, you're back now.\n$@c{smile}It's over.@d{64} You ended the loop.\n$@c{serious_smile_fists}You fulfilled your dream too, didn't you?\nYou didn't lose even once.\n$@c{neutral}I'm the only one who'll remember what you did.@d{96}\nI guess that's okay, isn't it?\n$@c{serious_smile_fists}Your legend will always live on in our hearts.\n$@c{smile_eclosed}Anyway, I've had about enough of this place, haven't you? Let's head home.\n$@c{serious_smile_fists}Maybe when we get back, we can have another battle?\nIf you're up to it.", - "ending_female": "@c{shock}You're back?@d{32} Does that mean…@d{96} you won?!\n@c{smile_ehalf}I should have known you had it in you.\n$@c{smile_eclosed}Of course… I always had that feeling.\n@c{smile}It's over now, right? You ended the loop.\n$@c{smile_ehalf}You fulfilled your dream too, didn't you?\nYou didn't lose even once.\n$I'll be the only one to remember what you did.\n@c{angry_mopen}I'll try not to forget!\n$@c{smile_wave_wink}Just kidding!@d{64} @c{smile}I'd never forget.@d{32}\nYour legend will live on in our hearts.\n$@c{smile_wave}Anyway,@d{64} it's getting late…@d{96} I think?\nIt's hard to tell in this place.\n$Let's go home. @c{smile_wave_wink}Maybe tomorrow, we can have another battle, for old time's sake?", - "ending_endless": "Congratulations on reaching the current end!\nMore content is coming soon.", - "ending_name": "Devs" -} \ No newline at end of file diff --git a/src/locales/en/dialogue-misc-female.json b/src/locales/en/dialogue-misc.json similarity index 100% rename from src/locales/en/dialogue-misc-female.json rename to src/locales/en/dialogue-misc.json diff --git a/src/locales/en/dialogue-male.json b/src/locales/en/dialogue.json similarity index 95% rename from src/locales/en/dialogue-male.json rename to src/locales/en/dialogue.json index ed4082f411e..7bb2df0b1cd 100644 --- a/src/locales/en/dialogue-male.json +++ b/src/locales/en/dialogue.json @@ -3,24 +3,31 @@ "encounter": { "1": "Hey, wanna battle?", "2": "Are you a new trainer too?", + "2_female": null, "3": "Hey, I haven't seen you before. Let's battle!", "4": "I just lost, so I'm trying to find more Pokémon.\nWait! You look weak! Come on, let's battle!", + "4_female": null, "5": "Have we met or not? I don't really remember. Well, I guess it's nice to meet you anyway!", "6": "All right! Let's go!", "7": "All right! Here I come! I'll show you my power!", "8": "Haw haw haw... I'll show you how hawesome my Pokémon are!", "9": "No need to waste time saying hello. Bring it on whenever you're ready!", + "9_female": null, "10": "Don't let your guard down, or you may be crying when a kid beats you.", "11": "I've raised my Pokémon with great care. You're not allowed to hurt them!", "12": "Glad you made it! It won't be an easy job from here.", - "13": "The battles continue forever! Welcome to the world with no end!" + "12_female": null, + "13": "The battles continue forever! Welcome to the world with no end!", + "13_female": null }, "victory": { "1": "Wow! You're strong!", + "1_female": null, "2": "I didn't stand a chance, huh?", "3": "I'll find you again when I'm older and beat you!", "4": "Ugh. I don't have any more Pokémon.", "5": "No way… NO WAY! How could I lose again…", + "5_female": null, "6": "No! I lost!", "7": "Whoa! You are incredible! I'm amazed and surprised!", "8": "Could it be… How… My Pokémon and I are the strongest, though…", @@ -35,10 +42,12 @@ "encounter": { "1": "Let's have a battle, shall we?", "2": "You look like a new trainer. Let's have a battle!", + "2_female": null, "3": "I don't recognize you. How about a battle?", "4": "Let's have a fun Pokémon battle!", "5": "I'll show you the ropes of how to really use Pokémon!", "6": "A serious battle starts from a serious beginning! Are you sure you're ready?", + "6_female": null, "7": "You're only young once. And you only get one shot at a given battle. Soon, you'll be nothing but a memory.", "8": "You'd better go easy on me, OK? Though I'll be seriously fighting!", "9": "School is boring. I've got nothing to do. Yawn. I'm only battling to kill the time." @@ -46,12 +55,15 @@ "victory": { "1": "That was impressive! I've got a lot to learn.", "2": "I didn't think you'd beat me that bad…", + "2_female": null, "3": "I hope we get to have a rematch some day.", "4": "That was pretty amazingly fun! You've totally exhausted me…", "5": "You actually taught me a lesson! You're pretty amazing!", "6": "Seriously, I lost. That is, like, seriously depressing, but you were seriously cool.", + "6_female": null, "7": "I don't need memories like this. Deleting memory…", "8": "Hey! I told you to go easy on me! Still, you're pretty cool when you're serious.", + "8_female": null, "9": "I'm actually getting tired of battling… There's gotta be something new to do…" } }, @@ -142,6 +154,7 @@ "ace_trainer": { "encounter": { "1": "You seem quite confident.", + "1_female": null, "2": "Your Pokémon… Show them to me…", "3": "Because I'm an Ace Trainer, people think I'm strong.", "4": "Are you aware of what it takes to be an Ace Trainer?" @@ -150,7 +163,9 @@ "1": "Yes… You have good Pokémon…", "2": "What?! But I'm a battling genius!", "3": "Of course, you are the main character!", - "4": "OK! OK! You could be an Ace Trainer!" + "3_female": null, + "4": "OK! OK! You could be an Ace Trainer!", + "4_female": null }, "defeat": { "1": "I am devoting my body and soul to Pokémon battles!", @@ -171,7 +186,8 @@ "encounter": { "1": "Get ready, because when we team up, it's double the trouble!", "2": "Two hearts, one strategy – let's see if you can keep up with our twin power!", - "3": "Hope you're ready for double trouble, because we're about to bring the heat!" + "3": "Hope you're ready for double trouble, because we're about to bring the heat!", + "3_female": null }, "victory": { "1": "We may have lost this round, but our bond remains unbreakable!", @@ -199,7 +215,8 @@ "black_belt": { "encounter": { "1": "I praise your courage in challenging me! For I am the one with the strongest kick!", - "2": "Oh, I see. Would you like to be cut to pieces? Or do you prefer the role of punching bag?" + "2": "Oh, I see. Would you like to be cut to pieces? Or do you prefer the role of punching bag?", + "2_female": null }, "victory": { "1": "Oh. The Pokémon did the fighting. My strong kick didn't help a bit.", @@ -310,7 +327,8 @@ }, "defeat": { "1": "New age simply refers to twentieth century classical composers, right?", - "2": "Don't get hung up on sadness or frustration. You can use your grudges to motivate yourself." + "2": "Don't get hung up on sadness or frustration. You can use your grudges to motivate yourself.", + "2_female": null } }, "psychic": { @@ -341,7 +359,8 @@ }, "baker": { "encounter": { - "1": "Hope you're ready to taste defeat!" + "1": "Hope you're ready to taste defeat!", + "1_female": null }, "victory": { "1": "I'll bake a comeback." @@ -371,7 +390,8 @@ "encounter": { "1": "Matey, you're walking the plank if you lose!", "2": "Come on then! My sailor's pride is at stake!", - "3": "Ahoy there! Are you seasick?" + "3": "Ahoy there! Are you seasick?", + "3_female": null }, "victory": { "1": "Argh! Beaten by a kid!", @@ -399,6 +419,7 @@ }, "victory": { "1": "Tch, you really are strong. It's too bad.\n$If you were to join Team Rocket, you could become an Executive.", + "1_female": null, "2": "I... I'm shattered...", "3": "Aaaieeeee! This can't be happening! I fought hard, but I still lost…" } @@ -436,7 +457,8 @@ "victory": { "1": "Hehehe! You might have beaten me, but you don't stand a chance against the Boss!\n$If you get lost now, you won't have to face a sound whipping!", "2": "Hehehe... So, I lost, too...", - "3": "Ahya! How could this be? For an Admin like me to lose to some random trainer..." + "3": "Ahya! How could this be? For an Admin like me to lose to some random trainer...", + "3_female": null } }, "courtney": { @@ -455,12 +477,14 @@ "encounter": { "1": "Ahahahaha! You're going to meddle in Team Aqua's affairs?\n$You're either absolutely fearless, simply ignorant, or both!\n$You're so cute, you're disgusting! I'll put you down", "2": "What's this? Who's this spoiled brat?", - "3": "Cool your jets. Be patient. I'll crush you shortly." + "3": "Cool your jets. Be patient. I'll crush you shortly.", + "3_female": null }, "victory": { "1": "Ahahahaha! We got meddled with unexpectedly! We're out of options.\n$We'll have to pull out. But this isn't the last you'll see of Team Aqua!\n$We have other plans! Don't you forget it!", "2": "Ahhh?! Did I go too easy on you?!", - "3": "Uh. Are you telling me you've upped your game even more during the fight?\n$You're a brat with a bright future… My Pokémon and I don't have any strength left to fight…\n$Go on… Go and be destroyed by Archie." + "3": "Uh. Are you telling me you've upped your game even more during the fight?\n$You're a brat with a bright future… My Pokémon and I don't have any strength left to fight…\n$Go on… Go and be destroyed by Archie.", + "3_female": null } }, "matt": { @@ -472,14 +496,16 @@ "victory": { "1": "All right then, until the Boss has time for you, I'll be your opponent!", "2": "I can feel it! I can feel it, all right! The strength coming offa you!\n$More! I still want more! But looks like we're outta time...", - "3": "That was fun! I knew you'd show me a good time! I look forward to facing you again someday!" + "3": "That was fun! I knew you'd show me a good time! I look forward to facing you again someday!", + "3_female": null } }, "mars": { "encounter": { "1": "I'm Mars, one of Team Galactic's top Commanders.", "2": "Team Galactic's vision for the future is unwavering. Opposition will be crushed without mercy!", - "3": "Feeling nervous? You should be!" + "3": "Feeling nervous? You should be!", + "3_female": null }, "victory": { "1": "This can't be happening! How did I lose?!", @@ -514,20 +540,25 @@ "zinzolin": { "encounter": { "1": "You could become a threat to Team Plasma, so we will eliminate you here and now!", + "1_female": null, "2": "Oh, for crying out loud... I didn't expect to have to battle in this freezing cold!", - "3": "You're an impressive Trainer to have made it this far. But it ends here." + "3": "You're an impressive Trainer to have made it this far. But it ends here.", + "3_female": null }, "victory": { "1": "Ghetsis... I have failed you...", "2": "It's bitter cold. I'm shivering. I'm suffering. Yet, I still stand victorious.", - "3": "Hmph. You're a smarter Trainer than I expected, but not smart enough." + "3": "Hmph. You're a smarter Trainer than I expected, but not smart enough.", + "3_female": null } }, "rood": { "encounter": { "1": "You are a threat to Team Plasma. We cannot let you walk away from here and now!", + "1_female": null, "2": "Oh, this icy wind... I never thought I'd have to fight here!", - "3": "You are a remarkable Trainer to have made it this far. But this is where it ends." + "3": "You are a remarkable Trainer to have made it this far. But this is where it ends.", + "3_female": null }, "victory": { "1": "Ghetsis... I have failed my mission...", @@ -538,12 +569,15 @@ "xerosic": { "encounter": { "1": "Ah ha ha! It would be my pleasure. Come on, little Trainer! Let's see what you've got!", + "1_female": null, "2": "Hmm... You're more powerful than you look. I wonder how much energy there is inside you.", + "2_female": null, "3": "I've been waiting for you! I need to do a little research on you! Come, let us begin!" }, "victory": { "1": "Ah, you're quite strong. Oh yes—very strong, indeed.", "2": "Ding-ding-ding! You did it! To the victor go the spoils!", + "2_female": null, "3": "Wonderful! Amazing! You have tremendous skill and bravery!" } }, @@ -551,6 +585,7 @@ "encounter": { "1": "I am Bryony, and it would be my pleasure to battle you. Show me what you've got.", "2": "Impressive... You're more powerful than you appear. Let's see the true extent of your energy.", + "2_female": null, "3": "I've anticipated your arrival. It's time for a little test. Shall we begin?" }, "victory": { @@ -563,9 +598,11 @@ "encounter": { "1": "Prepare for trouble!", "2": "We're pulling a big job here! Get lost, kid!", + "2_female": null, "3": "Hand over your Pokémon, or face the wrath of Team Rocket!", "4": "You're about to experience the true terror of Team Rocket!", - "5": "Hey, kid! Me am a Team Rocket member kind of guy!" + "5": "Hey, kid! Me am a Team Rocket member kind of guy!", + "5_female": null }, "victory": { "1": "Team Rocket blasting off again!", @@ -587,6 +624,7 @@ "1": "Huh? I lost?!", "2": "I can't believe I lost! I even skipped lunch for this", "3": "No way! You're just a kid!", + "3_female": null, "4": "Urrrgh... I should've ducked into our hideout right away...", "5": "You beat me... Do you think the boss will dock my pay for this?" } @@ -613,7 +651,8 @@ "2": "Witness the power of our technology and the future we envision!", "3": "In the name of Team Galactic, I'll eliminate anyone who stands in our way!", "4": "Get ready to lose!", - "5": "Hope you're ready for a cosmic beatdown!" + "5": "Hope you're ready for a cosmic beatdown!", + "5_female": null }, "victory": { "1": "Shut down...", @@ -643,6 +682,7 @@ "encounter": { "1": "Your Pokémon are no match for the elegance of Team Flare.", "2": "Hope you brought your sunglasses, because things are about to get bright!", + "2_female": null, "3": "Team Flare will cleanse the world of imperfection!", "4": "Prepare to face the brilliance of Team Flare!", "5": "Fashion is most important to us!" @@ -743,7 +783,8 @@ "1": "WHAT! This cannot be!" }, "defeat": { - "1": "Mark my words. Not being able to measure your own strength shows that you are still a child." + "1": "Mark my words. Not being able to measure your own strength shows that you are still a child.", + "1_female": null } }, "rocket_boss_giovanni_2": { @@ -803,7 +844,8 @@ }, "galactic_boss_cyrus_1": { "encounter": { - "1": "You were compelled to come here by such vacuous sentimentality.\n$I will make you regret paying heed to your heart!" + "1": "You were compelled to come here by such vacuous sentimentality.\n$I will make you regret paying heed to your heart!", + "1_female": null }, "victory": { "1": "Interesting. And quite curious." @@ -953,6 +995,7 @@ "misty": { "encounter": { "1": "My policy is an all out offensive with Water-type Pokémon!", + "1_female": null, "2": "Hiya, I'll show you the strength of my aquatic Pokémon!", "3": "My dream was to go on a journey and battle powerful trainers…\nWill you be a sufficient challenge?" }, @@ -970,12 +1013,14 @@ "lt_surge": { "encounter": { "1": "My Electric Pokémon saved me during the war! I'll show you how!", + "1_female": null, "2": "Ten-hut! I'll shock you into surrender!", "3": "I'll zap you just like I do to all my enemies in battle!" }, "victory": { "1": "Whoa! Your team's the real deal, kid!", "2": "Aaargh, you're strong! Even my electric tricks lost against you.", + "2_female": null, "3": "That was an absolutely shocking loss!" }, "defeat": { @@ -1000,6 +1045,7 @@ "defeat": { "1": "I was afraid I would doze off…", "2": "Oh my, it seems my Grass Pokémon overwhelmed you.", + "2_female": null, "3": "That battle was such a soothing experience.", "4": "Oh… Is that all?" } @@ -1059,7 +1105,8 @@ "encounter": { "1": "I, the leader of Team Rocket, will make you feel a world of pain!", "2": "My training here will be vital before I am to face my old associates again.", - "3": "I do not think you are prepared for the level of failure you are about to experience!" + "3": "I do not think you are prepared for the level of failure you are about to experience!", + "3_female": null }, "victory": { "1": "WHAT! Me, lose?! There is nothing I wish to say to you!", @@ -1092,6 +1139,7 @@ "brawly": { "encounter": { "1": "Oh man, a challenger!\nLet's see what you can do!", + "1_female": null, "2": "You seem like a big splash.\nLet's battle!", "3": "Time to create a storm!\nLet's go!" }, @@ -1119,6 +1167,7 @@ }, "defeat": { "1": "Recharge your batteries and challenge me again sometime!\nWahahahaha!", + "1_female": null, "2": "I hope you found our battle electrifying!\nWahahahaha!", "3": "Aren't you shocked I won?\nWahahahaha!" } @@ -1165,6 +1214,7 @@ }, "victory": { "1": "You're the first Trainer I've seen with more grace than I.\nExcellently played.", + "1_female": null, "2": "Oh, my Flying Pokémon have plummeted!\nVery well.", "3": "Though I may have fallen, my Pokémon will continue to fly!" }, @@ -1177,6 +1227,7 @@ "tate": { "encounter": { "1": "Hehehe…\nWere you surprised to see me without my sister?", + "1_female": null, "2": "I can see what you're thinking…\nYou want to battle!", "3": "How can you defeat someone…\nWho knows your every move?" }, @@ -1194,6 +1245,7 @@ "liza": { "encounter": { "1": "Fufufu…\nWere you surprised to see me without my brother?", + "1_female": null, "2": "I can determine what you desire…\nYou want to battle, don't you?", "3": "How can you defeat someone…\nWho's one with their Pokémon?" }, @@ -1265,8 +1317,10 @@ "nessa": { "encounter": { "1": "No matter what kind of plan your refined mind may be plotting, my partner and I will be sure to sink it.", + "1_female": null, "2": "I'm not here to chat. I'm here to win!", - "3": "This is a little gift from my Pokémon… I hope you can take it!" + "3": "This is a little gift from my Pokémon… I hope you can take it!", + "3_female": null }, "victory": { "1": "You and your Pokémon are just too much…", @@ -1287,6 +1341,7 @@ }, "victory": { "1": "You… You're pretty good, huh?", + "1_female": null, "2": "If you find Gordie around, be sure to give him a right trashing, would you?", "3": "I think you took breaking the ice a little too literally…" }, @@ -1300,10 +1355,12 @@ "encounter": { "1": "You look strong! Shoots! Let's start!", "2": "I'm strong like the ocean's wide. You're gonna get swept away, fo' sho'.", + "2_female": null, "3": "Oh ho, so I'm facing you! That's off the wall." }, "victory": { "1": "You totally rocked that! You're raising some wicked Pokémon. You got this Trainer thing down!", + "1_female": null, "2": "You don't just look strong, you're strong fo' reals! Eh, I was swept away, too!", "3": "You're strong as a gnarly wave!" }, @@ -1316,6 +1373,7 @@ "shauntal": { "encounter": { "1": "Excuse me. You're a challenger, right?\nI'm the Elite Four's Ghost-type Pokémon user, Shauntal, and I shall be your opponent.", + "1_female": null, "2": "I absolutely love writing about Trainers who come here and the Pokémon they train.\nCould I use you and your Pokémon as a subject?", "3": "Every person who works with Pokémon has a story to tell.\nWhat story is about to be told?" }, @@ -1333,6 +1391,7 @@ "marshal": { "encounter": { "1": "My mentor, Alder, sees your potential as a Trainer and is taking an interest in you.\nIt is my intention to test you--to take you to the limits of your strength. Kiai!", + "1_female": null, "2": "Victory, decisive victory, is my intention! Challenger, here I come!", "3": "In myself, I seek to develop the strength of a fighter and shatter any weakness in myself!\nPrevailing with the force of my convictions!" }, @@ -1351,7 +1410,8 @@ "encounter": { "1": "You remind me of an old friend. That makes me excited about this Pokémon battle!", "2": "Pokémon battles have no meaning if you don't think why you battle.\n$Or better said, it makes battling together with Pokémon meaningless.", - "3": "My name's Cheren! I'm a Gym Leader and a teacher! Pleasure to meet you." + "3": "My name's Cheren! I'm a Gym Leader and a teacher! Pleasure to meet you.", + "3_female": null }, "victory": { "1": "Thank you! I saw what was missing in me.", @@ -1367,47 +1427,65 @@ "chili": { "encounter": { "1": "Yeeeeooow! Time to play with FIRE!! I'm the strongest of us brothers!", + "1_female": null, "2": "Ta-da! The Fire-type scorcher Chili--that's me--will be your opponent!", - "3": "I'm going to show you what me and my blazing Fire types can do!" + "2_female": null, + "3": "I'm going to show you what me and my blazing Fire types can do!", + "3_female": null }, "victory": { "1": "You got me. I am… burned… out…", + "1_female": null, "2": "Whoa ho! You're on fire!", + "2_female": null, "3": "Augh! You got me!" }, "defeat": { "1": "I'm on fire! Play with me, and you'll get burned!", + "1_female": null, "2": "When you play with fire, you get burned!", - "3": "I mean, c'mon, your opponent was me! You didn't have a chance!" + "3": "I mean, c'mon, your opponent was me! You didn't have a chance!", + "3_female": null } }, "cilan": { "encounter": { "1": "Nothing personal... No hard feelings... Me and my Grass-type Pokémon will...\n$Um... We're gonna battle come what may.", + "1_female": null, "2": "So, um, if you're OK with me, I'll, um, put everything I've got into being, er, you know, your opponent.", - "3": "OK… So, um, I'm Cilan, I like Grass-type Pokémon." + "2_female": null, + "3": "OK… So, um, I'm Cilan, I like Grass-type Pokémon.", + "3_female": null }, "victory": { "1": "Er… Is it over now?", + "1_female": null, "2": "…What a surprise. You are very strong, aren't you? \n$I guess my brothers wouldn't have been able to defeat you either…", + "2_female": null, "3": "…Huh. Looks like my timing was, um, off?" }, "defeat": { "1": "Huh? Did I win?", + "1_female": null, "2": "I guess… \n$I suppose I won, because I've been competing with my brothers Chili and Cress, and we all were able to get tougher.", - "3": "It…it was quite a thrilling experience…" + "2_female": null, + "3": "It…it was quite a thrilling experience…", + "3_female": null } }, "roark": { "encounter": { "1": "I need to see your potential as a Trainer. And, I'll need to see the toughness of the Pokémon that battle with you!", + "1_female": null, "2": "Here goes! These are my rocking Pokémon, my pride and joy!", "3": "Rock-type Pokémon are simply the best!", - "4": "I need to see your potential as a Trainer. And, I'll need to see the toughness of the Pokémon that battle with you!" + "4": "I need to see your potential as a Trainer. And, I'll need to see the toughness of the Pokémon that battle with you!", + "4_female": null }, "victory": { "1": "W-what? That can't be! My buffed-up Pokémon!", "2": "…We lost control there. Next time I'd like to challenge you to a Fossil-digging race underground.", + "2_female": null, "3": "With skill like yours, it's natural for you to win.", "4": "Wh-what?! It can't be! Even that wasn't enough?", "5": "I blew it." @@ -1430,6 +1508,7 @@ "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.\n$I envy you for that…", + "2_female": null, "3": "How is this possible…", "4": "I don't think our potentials are so different.\n$But you seem to have something more than that… So be it.", "5": "Guess I need more training.", @@ -1488,12 +1567,14 @@ "1": "Guess I should've expected that!" }, "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": "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_female": null } }, "ramos": { "encounter": { - "1": "Did yeh enjoy the garden playground I made with all these sturdy plants o' mine?\n$Their strength is a sign o' my strength as a gardener and a Gym Leader! Yeh sure yer up to facing all that?" + "1": "Did yeh enjoy the garden playground I made with all these sturdy plants o' mine?\n$Their strength is a sign o' my strength as a gardener and a Gym Leader! Yeh sure yer up to facing all that?", + "1_female": null }, "victory": { "1": "Yeh believe in yer Pokémon… And they believe in yeh, too… It was a fine battle, sprout." @@ -1523,7 +1604,8 @@ }, "victory": { "1": "I must say, I'm warmed up to you! I might even admire you a little.", - "2": "Wow! You're great! You've earned my respect! \n$I think your focus and will bowled us over totally. " + "2": "Wow! You're great! You've earned my respect! \n$I think your focus and will bowled us over totally. ", + "2_female": null }, "defeat": { "1": "I sensed your will to win, but I don't lose!", @@ -1535,7 +1617,8 @@ "1": "You have a winning aura about you. So, anyway, this will be fun. Let's have our battle!" }, "victory": { - "1": "Amazing! You're very good, aren't you?" + "1": "Amazing! You're very good, aren't you?", + "1_female": null }, "defeat": { "1": "Yes! My Pokémon and I are perfectly good!" @@ -1576,7 +1659,8 @@ }, "clay": { "encounter": { - "1": "Harrumph! Kept me waitin', didn't ya, kid? All right, time to see what ya can do!" + "1": "Harrumph! Kept me waitin', didn't ya, kid? All right, time to see what ya can do!", + "1_female": null }, "victory": { "1": "Man oh man… It feels good to go all out and still be defeated!" @@ -1590,7 +1674,8 @@ "1": "I'mma serve you a full course o' Water-type Pokémon! Don't try to eat 'em, though!" }, "victory": { - "1": "Vaultin' Veluza! Yer a lively one, aren't ya! A little TOO lively, if I do say so myself!" + "1": "Vaultin' Veluza! Yer a lively one, aren't ya! A little TOO lively, if I do say so myself!", + "1_female": null }, "defeat": { "1": "You come back to see me again now, ya hear?" @@ -1656,7 +1741,8 @@ "1": "There's something about you… A difference in your demeanor. \n$I think I sense that in you. Now, show me. Show me the power you wield with your Pokémon. \n$And I, in turn, shall present you with a performance of illusions in water by me and my Pokémon!" }, "victory": { - "1": "Bravo. I realize now your authenticity and magnificence as a Pokémon Trainer. \n$I find much joy in having met you and your Pokémon. You have proven yourself worthy." + "1": "Bravo. I realize now your authenticity and magnificence as a Pokémon Trainer. \n$I find much joy in having met you and your Pokémon. You have proven yourself worthy.", + "1_female": null }, "defeat": { "1": "A grand illusion!" @@ -1664,13 +1750,15 @@ }, "lorelei": { "encounter": { - "1": "No one can best me when it comes to icy Pokémon! Freezing moves are powerful!\n$Your Pokémon will be at my mercy when they are frozen solid! Hahaha! Are you ready?" + "1": "No one can best me when it comes to icy Pokémon! Freezing moves are powerful!\n$Your Pokémon will be at my mercy when they are frozen solid! Hahaha! Are you ready?", + "1_female": null }, "victory": { "1": "How dare you!" }, "defeat": { - "1": "There's nothing you can do once you're frozen." + "1": "There's nothing you can do once you're frozen.", + "1_female": null } }, "will": { @@ -1686,10 +1774,12 @@ }, "malva": { "encounter": { - "1": "I feel like my heart might just burst into flames. \n$I'm burning up with my hatred for you, runt!" + "1": "I feel like my heart might just burst into flames. \n$I'm burning up with my hatred for you, runt!", + "1_female": null }, "victory": { - "1": "What news… So a new challenger has defeated Malva!" + "1": "What news… So a new challenger has defeated Malva!", + "1_female": null }, "defeat": { "1": "I am delighted! Yes, delighted that I could squash you beneath my heel." @@ -1711,7 +1801,8 @@ "1": "I gave the captain position to my cousin Sophocles, but I'm confident in my ability. \n$My strength is like that of a supernova!" }, "victory": { - "1": "I certainly found an interesting Trainer to face!" + "1": "I certainly found an interesting Trainer to face!", + "1_female": null }, "defeat": { "1": "Ahaha. What an interesting battle." @@ -1722,10 +1813,12 @@ "1": "I'd say I'll go easy on you, but… I'd be lying! Think fast!" }, "victory": { - "1": "Not bad, kiddo." + "1": "Not bad, kiddo.", + "1_female": null }, "defeat": { - "1": "Nahahaha! You really are something else, kiddo!" + "1": "Nahahaha! You really are something else, kiddo!", + "1_female": null } }, "bruno": { @@ -1744,7 +1837,8 @@ "1": "I'm Bugsy! I never lose when it comes to bug Pokémon!" }, "victory": { - "1": "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win." + "1": "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win.", + "1_female": null }, "defeat": { "1": "Thanks! Thanks to our battle, I was also able to make progress in my research!" @@ -1774,10 +1868,12 @@ }, "lenora": { "encounter": { - "1": "Well then, challenger, I'm going to research how you battle with the Pokémon you've so lovingly raised!" + "1": "Well then, challenger, I'm going to research how you battle with the Pokémon you've so lovingly raised!", + "1_female": null }, "victory": { - "1": "My theory about you was correct. You're more than just talented… You're motivated! I salute you!" + "1": "My theory about you was correct. You're more than just talented… You're motivated! I salute you!", + "1_female": null }, "defeat": { "1": "Ah ha ha! If you lose, make sure to analyze why, and use that knowledge in your next battle!" @@ -1802,7 +1898,8 @@ "1": "Wild! Your reason's already more toxic than mine!" }, "defeat": { - "1": "Hey, c'mon! Get serious! You gotta put more out there!" + "1": "Hey, c'mon! Get serious! You gotta put more out there!", + "1_female": null } }, "olivia": { @@ -1840,7 +1937,8 @@ }, "flint": { "encounter": { - "1": "Hope you're warmed up, cause here comes the Big Bang!" + "1": "Hope you're warmed up, cause here comes the Big Bang!", + "1_female": null }, "victory": { "1": "Incredible! Your moves are so hot, they make mine look lukewarm!" @@ -1862,7 +1960,8 @@ }, "caitlin": { "encounter": { - "1": "It's me who appeared when the flower opened up. You who have been waiting…\n$You look like a Pokémon Trainer with refined strength and deepened kindness. \n$What I look for in my opponent is superb strength… \n$Please unleash your power to the fullest!" + "1": "It's me who appeared when the flower opened up. You who have been waiting…\n$You look like a Pokémon Trainer with refined strength and deepened kindness. \n$What I look for in my opponent is superb strength… \n$Please unleash your power to the fullest!", + "1_female": null }, "victory": { "1": "My Pokémon and I learned so much! I offer you my thanks." @@ -1884,13 +1983,16 @@ }, "wikstrom": { "encounter": { - "1": "Well met, young challenger! Verily am I the famed blade of hardened steel, Duke Wikstrom! \n$Let the battle begin! En garde!" + "1": "Well met, young challenger! Verily am I the famed blade of hardened steel, Duke Wikstrom! \n$Let the battle begin! En garde!", + "1_female": null }, "victory": { - "1": "Glorious! The trust that you share with your honorable Pokémon surpasses even mine!" + "1": "Glorious! The trust that you share with your honorable Pokémon surpasses even mine!", + "1_female": null }, "defeat": { - "1": "What manner of magic is this? My heart, it doth hammer ceaselessly in my breast! \n$Winning against such a worthy opponent doth give my soul wings--thus do I soar!" + "1": "What manner of magic is this? My heart, it doth hammer ceaselessly in my breast! \n$Winning against such a worthy opponent doth give my soul wings--thus do I soar!", + "1_female": null } }, "acerola": { @@ -1922,11 +2024,14 @@ }, "victory": { "1": "You got me. You are magnificent!", - "2": "I never expected another trainer to beat me… I'm surprised." + "1_female": null, + "2": "I never expected another trainer to beat me… I'm surprised.", + "2_female": null }, "defeat": { "1": "That was close. Want to try again?", - "2": "It's not that you are weak. Don't let it bother you." + "2": "It's not that you are weak. Don't let it bother you.", + "2_female": null } }, "karen": { @@ -1951,7 +2056,8 @@ "1": "Sure seems like you understand Pokémon real well. \n$This is gonna be a doozy of a battle! \n$I'll have to Dynamax my Pokémon if I want to win!" }, "victory": { - "1": "The power of Grass has wilted… What an incredible Challenger!" + "1": "The power of Grass has wilted… What an incredible Challenger!", + "1_female": null }, "defeat": { "1": "This'll really leave you in shock and awe." @@ -1970,7 +2076,8 @@ }, "drasna": { "encounter": { - "1": "You must be a strong Trainer. Yes, quite strong indeed…\n$That's just wonderful news! Facing opponents like you and your team will make my Pokémon grow like weeds!" + "1": "You must be a strong Trainer. Yes, quite strong indeed…\n$That's just wonderful news! Facing opponents like you and your team will make my Pokémon grow like weeds!", + "1_female": null }, "victory": { "1": "Oh, dear me. That sure was a quick battle… I do hope you'll come back again sometime!" @@ -2003,7 +2110,8 @@ }, "blue": { "encounter": { - "1": "You must be pretty good to get this far." + "1": "You must be pretty good to get this far.", + "1_female": null }, "victory": { "1": "I've only lost to him and now to you… Him? Hee, hee…" @@ -2050,7 +2158,8 @@ "1": "I am still the Champion. I won't hold anything back." }, "victory": { - "1": "This is the emergence of a new Champion." + "1": "This is the emergence of a new Champion.", + "1_female": null }, "defeat": { "1": "I successfully defended my Championship." @@ -2138,7 +2247,8 @@ "1": "Hey! Don't you think Pokémon are, like, super cute?" }, "victory": { - "1": "Waaah! Waaah! You're so mean!" + "1": "Waaah! Waaah! You're so mean!", + "1_female": null }, "defeat": { "1": "And that's that!" @@ -2146,7 +2256,8 @@ }, "chuck": { "encounter": { - "1": "Hah! You want to challenge me? Are you brave or just ignorant?" + "1": "Hah! You want to challenge me? Are you brave or just ignorant?", + "1_female": null }, "victory": { "1": "You're strong! Would you please make me your apprentice?" @@ -2157,7 +2268,8 @@ }, "katy": { "encounter": { - "1": "Don't let your guard down unless you would like to find yourself knocked off your feet!" + "1": "Don't let your guard down unless you would like to find yourself knocked off your feet!", + "1_female": null }, "victory": { "1": "All of my sweet little Pokémon dropped like flies!" @@ -2190,7 +2302,8 @@ }, "maylene": { "encounter": { - "1": "I've come to challenge you now, and I won't hold anything back. \n$Please prepare yourself for battle!" + "1": "I've come to challenge you now, and I won't hold anything back. \n$Please prepare yourself for battle!", + "1_female": null }, "victory": { "1": "I admit defeat…" @@ -2212,7 +2325,8 @@ }, "byron": { "encounter": { - "1": "Trainer! You're young, just like my son, Roark. \n$With more young Trainers taking charge, the future of Pokémon is bright! \n$So, as a wall for young people, I'll take your challenge!" + "1": "Trainer! You're young, just like my son, Roark. \n$With more young Trainers taking charge, the future of Pokémon is bright! \n$So, as a wall for young people, I'll take your challenge!", + "1_female": null }, "victory": { "1": "Hmm! My sturdy Pokémon--defeated!" @@ -2234,7 +2348,8 @@ }, "volkner": { "encounter": { - "1": "Since you've come this far, you must be quite strong…\n$I hope you're the Trainer who'll make me remember how fun it is to battle!" + "1": "Since you've come this far, you must be quite strong…\n$I hope you're the Trainer who'll make me remember how fun it is to battle!", + "1_female": null }, "victory": { "1": "You've got me beat…\n$Your desire and the noble way your Pokémon battled for you… \n$I even felt thrilled during our match. That was a very good battle." @@ -2336,7 +2451,8 @@ }, "valerie": { "encounter": { - "1": "Oh, if it isn't a young Trainer… It is lovely to get to meet you like this. \n$Then I suppose you have earned yourself the right to a battle, as a reward for your efforts. \n$The elusive Fairy may appear frail as the breeze and delicate as a bloom, but it is strong." + "1": "Oh, if it isn't a young Trainer… It is lovely to get to meet you like this. \n$Then I suppose you have earned yourself the right to a battle, as a reward for your efforts. \n$The elusive Fairy may appear frail as the breeze and delicate as a bloom, but it is strong.", + "1_female": null }, "victory": { "1": "I hope that you will find things worth smiling about tomorrow…" @@ -2383,7 +2499,8 @@ "1": "Let me have a look at how you and your partner Pokémon behave!" }, "victory": { - "1": "Your pink is still lacking, but you're an excellent Trainer with excellent Pokémon." + "1": "Your pink is still lacking, but you're an excellent Trainer with excellent Pokémon.", + "1_female": null }, "defeat": { "1": "Too bad for you, I guess." @@ -2391,7 +2508,8 @@ }, "bede": { "encounter": { - "1": "I suppose I should prove beyond doubt just how pathetic you are and how strong I am." + "1": "I suppose I should prove beyond doubt just how pathetic you are and how strong I am.", + "1_female": null }, "victory": { "1": "I see… Well, that's fine. I wasn't really trying all that hard anyway." @@ -2435,7 +2553,8 @@ }, "brassius": { "encounter": { - "1": "I assume you are ready? Let our collaborative work of art begin!" + "1": "I assume you are ready? Let our collaborative work of art begin!", + "1_female": null }, "victory": { "1": "Ahhh…vant-garde!" @@ -2446,10 +2565,12 @@ }, "iono": { "encounter": { - "1": "How're ya feelin' about this battle?\n$...\n$Let's get this show on the road! How strong is our challenger? \n$I 'unno! Let's find out together!" + "1": "How're ya feelin' about this battle?\n$...\n$Let's get this show on the road! How strong is our challenger? \n$I 'unno! Let's find out together!", + "1_female": null }, "victory": { - "1": "You're as flashy and bright as a 10,000,000-volt Thunderbolt, friendo!" + "1": "You're as flashy and bright as a 10,000,000-volt Thunderbolt, friendo!", + "1_female": null }, "defeat": { "1": "Your eyeballs are MINE!" @@ -2471,7 +2592,8 @@ "1": "Come on, baby! Rattle me down to the bone!" }, "victory": { - "1": "You're cool, my friend—you move my SOUL!" + "1": "You're cool, my friend—you move my SOUL!", + "1_female": null }, "defeat": { "1": "Later, baby!" @@ -2505,7 +2627,9 @@ "nessa_elite": { "encounter": { "1": "The tides are turning in my favor. Ready to get swept away?", - "2": "Let's make some waves with this battle! I hope you're prepared!" + "1_female": null, + "2": "Let's make some waves with this battle! I hope you're prepared!", + "2_female": null }, "victory": { "1": "You navigated those waters perfectly... Well done!", @@ -2533,6 +2657,7 @@ "allister_elite": { "encounter": { "1": "Shadows fall... Are you ready to face your fears?", + "1_female": null, "2": "Let's see if you can handle the darkness that I command." }, "victory": { @@ -2555,7 +2680,8 @@ }, "defeat": { "1": "Another storm weathered, another victory claimed! Well fought!", - "2": "You got caught in my storm! Better luck next time!" + "2": "You got caught in my storm! Better luck next time!", + "2_female": null } }, "alder": { diff --git a/src/locales/es/config.ts b/src/locales/es/config.ts index edc7dd8b0d7..8f75c08f3f6 100644 --- a/src/locales/es/config.ts +++ b/src/locales/es/config.ts @@ -15,14 +15,10 @@ import bgmName from "./bgm-name.json"; import biome from "./biome.json"; import challenges from "./challenges.json"; import commandUiHandler from "./command-ui-handler.json"; -import dialogueMale from "./dialogue-male.json"; -import dialogueFemale from "./dialogue-female.json"; -import dialogueEndbossMale from "./dialogue-final-boss-male.json"; -import dialogueEndbossFemale from "./dialogue-final-boss-female.json"; -import dialogueMiscMale from "./dialogue-misc-male.json"; -import dialogueMiscFemale from "./dialogue-misc-female.json"; -import dialogueDoubleBattleMale from "./dialogue-double-battle-male.json"; -import dialogueDoubleBattleFemale from "./dialogue-double-battle-female.json"; +import dialogue from "./dialogue.json"; +import battleSpecDialogue from "./dialogue-final-boss.json"; +import miscDialogue from "./dialogue-misc.json"; +import doubleBattleDialogue from "./dialogue-double-battle.json"; import egg from "./egg.json"; import fightUiHandler from "./fight-ui-handler.json"; import filterBar from "./filter-bar.json"; @@ -76,14 +72,10 @@ export const esConfig = { commandUiHandler, common, achv, - PGMdialogue: dialogueMale, - PGFdialogue: dialogueFemale, - PGMbattleSpecDialogue: dialogueEndbossMale, - PGFbattleSpecDialogue: dialogueEndbossFemale, - PGMmiscDialogue: dialogueMiscMale, - PGFmiscDialogue: dialogueMiscFemale, - PGMdoubleBattleDialogue: dialogueDoubleBattleMale, - PGFdoubleBattleDialogue: dialogueDoubleBattleFemale, + dialogue, + battleSpecDialogue, + miscDialogue, + doubleBattleDialogue, egg, fightUiHandler, filterBar, diff --git a/src/locales/ca_ES/dialogue-final-boss-male.json b/src/locales/es/dialogue-double-battle.json similarity index 100% rename from src/locales/ca_ES/dialogue-final-boss-male.json rename to src/locales/es/dialogue-double-battle.json diff --git a/src/locales/ca_ES/dialogue-male.json b/src/locales/es/dialogue-final-boss.json similarity index 100% rename from src/locales/ca_ES/dialogue-male.json rename to src/locales/es/dialogue-final-boss.json diff --git a/src/locales/es/dialogue-male.json b/src/locales/es/dialogue-male.json deleted file mode 100644 index cbd7dbf39ad..00000000000 --- a/src/locales/es/dialogue-male.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "aether_grunt": { - "encounter": { - "1": "¡Lucharé con toda mi fuerza para detenerte!", - "2": "Me da igual que seas un crío. Eres una amenaza y debes irte.", - "3": "Me dijeron que mandara a todos los entrenadores por donde venían, ¡sin excepciones!", - "4": "¡Te mostraré el poder del Paraíso Æther!", - "5": "Ahora que conoces la oscuridad en lo profundo del Paraíso Æther, es hora de que vayas desapareciendo..." - }, - "victory": { - "1": "¡Vaya! Demuestras habilidad.", - "2": "¿Qué quiere decir esto? ¿Eh?", - "3": "¡Vaya! Con esa fuerza, ¡no creo que pueda detenerte!", - "4": "Vaya... parece que puede que haya perdido.", - "5": "¡Mira, te hago una mueca!: ¡Aiyee!" - } - }, - "faba": { - "encounter": { - "1": "¡Yo, Subdirector Fabio, te mostraré la cruda realidad del mundo!", - "2": "¿Yo, la última línea de defensa de Æther, battallando a un mero crío?", - "3": "Yo, Fabio, soy el Subdirector de la Fundación Æther. Soy el único en el mundo, soy irremplazable." - }, - "victory": { - "1": "¡Aaaah!", - "2": "¿C-c-cómo puede ser? Eres tan solo un niño...", - "3": "Este... este es el motivo por el que odio a los niños." - } - }, - "aether_boss_lusamine_1": { - "encounter": { - "1": "¡Vas a asustar a mi pobre criatura! Parece que tendré que silenciarte cuanto antes." - }, - "victory": { - "1": "¿Cómo?¿Cómo puedes ser tan terrible?" - }, - "defeat": { - "1": "Buff." - } - }, - "aether_boss_lusamine_2": { - "encounter": { - "1": "¡¿Por qué me sigues molestando?! Estoy cansada de ti. ¡Hasta las narices!\n$Se acabó esta charla innecesaria. Este es el poder de Nihilego, ¡te demostraré cuánto te equivocas al venir aquí!" - }, - "victory": { - "1": "¡¡¡Aaauuuggghhhhhhhhh!!!" - }, - "defeat": { - "1": "¡Todo lo que quiero es a esta preciosa criatura! ¡Los demás no me importáis!" - } - } -} diff --git a/src/locales/ca_ES/dialogue-misc-female.json b/src/locales/es/dialogue-misc.json similarity index 100% rename from src/locales/ca_ES/dialogue-misc-female.json rename to src/locales/es/dialogue-misc.json diff --git a/src/locales/es/dialogue-female.json b/src/locales/es/dialogue.json similarity index 100% rename from src/locales/es/dialogue-female.json rename to src/locales/es/dialogue.json diff --git a/src/locales/fr/config.ts b/src/locales/fr/config.ts index 668812e6432..f79374cd3b9 100644 --- a/src/locales/fr/config.ts +++ b/src/locales/fr/config.ts @@ -15,14 +15,10 @@ import bgmName from "./bgm-name.json"; import biome from "./biome.json"; import challenges from "./challenges.json"; import commandUiHandler from "./command-ui-handler.json"; -import dialogueMale from "./dialogue-male.json"; -import dialogueFemale from "./dialogue-female.json"; -import dialogueEndbossMale from "./dialogue-final-boss-male.json"; -import dialogueEndbossFemale from "./dialogue-final-boss-female.json"; -import dialogueMiscMale from "./dialogue-misc-male.json"; -import dialogueMiscFemale from "./dialogue-misc-female.json"; -import dialogueDoubleBattleMale from "./dialogue-double-battle-male.json"; -import dialogueDoubleBattleFemale from "./dialogue-double-battle-female.json"; +import dialogue from "./dialogue.json"; +import battleSpecDialogue from "./dialogue-final-boss.json"; +import miscDialogue from "./dialogue-misc.json"; +import doubleBattleDialogue from "./dialogue-double-battle.json"; import egg from "./egg.json"; import fightUiHandler from "./fight-ui-handler.json"; import filterBar from "./filter-bar.json"; @@ -76,14 +72,10 @@ export const frConfig = { commandUiHandler, common, achv, - PGMdialogue: dialogueMale, - PGFdialogue: dialogueFemale, - PGMbattleSpecDialogue: dialogueEndbossMale, - PGFbattleSpecDialogue: dialogueEndbossFemale, - PGMmiscDialogue: dialogueMiscMale, - PGFmiscDialogue: dialogueMiscFemale, - PGMdoubleBattleDialogue: dialogueDoubleBattleMale, - PGFdoubleBattleDialogue: dialogueDoubleBattleFemale, + dialogue, + battleSpecDialogue, + miscDialogue, + doubleBattleDialogue, egg, fightUiHandler, filterBar, diff --git a/src/locales/fr/dialogue-double-battle-female.json b/src/locales/fr/dialogue-double-battle-female.json deleted file mode 100644 index 55bb5da9800..00000000000 --- a/src/locales/fr/dialogue-double-battle-female.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "blue_red_double": { - "encounter": { - "1": "Blue : Hé Red, montrons-lui de quel bois on se chauffe !\n$Red : …\n$Blue : Voilà la puissance du Bourg Palette !" - }, - "victory": { - "1": "Blue : C’était un magnifique combat !\n$Red : …" - } - }, - "red_blue_double": { - "encounter": { - "1": "Red : … !\n$Blue : Il est pas très loquace.\n$Blue : Mais ne te laisse pas avoir, ça reste un Maitre Pokémon !" - }, - "victory": { - "1": "Red : … !\n$Blue : La prochaine fois, on va te battre !" - } - }, - "tate_liza_double": { - "encounter": { - "1": "Lévy : Héhéhé… Tu en fais une drôle de tête.\n$Tatia : Tu ne t’attendais pas à rencontrer deux Champions, n’est-ce pas ?\n$Lévy : Nous sommes des jumeaux !\n$Tatia : Nous n’avons pas besoin de parler entre nous !\n$Lévy : Tu crois pouvoir briser…\n$Tatia : … Notre duo parfait ?" - }, - "victory": { - "1": "Lévy : Quoi ? Notre combinaison était parfaite !\n$Tatia : Nous avons encore besoin d’entrainement…" - } - }, - "liza_tate_double": { - "encounter": { - "1": "Tatia : Hihih… Si tu voyais ta tête !\n$Lévy : Oui, nous sommes deux Champions en un !\n$Tatia : Voici mon frère, Lévy…\n$Lévy : … Et ma sœur, Tatia !\n$Tatia : Tu ne penses pas que notre combinaison est parfaite ?" - }, - "victory": { - "1": "Tatia : Quoi ? Notre combinaison…\n$Lévy : … a échoué !" - } - }, - "wallace_steven_double": { - "encounter": { - "1": "Pierre R. : Marc, montrons-lui la puissance des Maitres !\n$Marc : Tu vas gouter au pouvoir de Hoenn !\n$Pierre R. : C’est parti !" - }, - "victory": { - "1": "Pierre R. : C’était un beau combat !\n$Marc : Ce sera notre tour la prochaine fois !" - } - }, - "steven_wallace_double": { - "encounter": { - "1": "Pierre R. : Excuse-moi, aurais-tu des Pokémon rares ?\n$Marc : Pierre… Nous sommes là pour nous battre, pas pour frimer avec nos Pokémon.\n$Pierre R. : Oh… Je vois… Commençons alors !" - }, - "victory": { - "1": "Pierre R. : Bien, maintenant que ce combat est clos, montrons-nous nos Pokémon !\n$Marc : Pierre…" - } - }, - "alder_iris_double": { - "encounter": { - "1": "Goyah : Nous sommes l’élite des Dresseurs d’Unys !\n$Iris : Rien de mieux que des combats contre des prodiges !" - }, - "victory": { - "1": "Goyah : INCROYABLE ! T’es trop doué !\n$Iris : On gagnera la prochaine fois !" - } - }, - "iris_alder_double": { - "encounter": { - "1": "Iris : Bienvenue, Dresseur ! Je suis LA Maitresse d’Unys !\n$Goyah : Iris, concentre-toi s’il te plait…" - }, - "victory": { - "1": "Iris : On a tout donné et pourtant…\n$Goyah : Cette défaite ne pourra que nous être bénéfique !" - } - }, - "piers_marnie_double": { - "encounter": { - "1": "Rosemary : Frérot, montrons-lui la puissance de Smashings !\n$Peterson : Nous sommes les ténèbres !" - }, - "victory": { - "1": "Rosemary : T’as amené la lumière dans les ténèbres !\n$Peterson : P’têtre un peu trop…" - } - }, - "marnie_piers_double": { - "encounter": { - "1": "Peterson : Chauds pour un concert ?\n$Rosemary : Frérot… Elle est pas là pour chanter, mais se battre…" - }, - "victory": { - "1": "Peterson : Ça c’est du rock !\n$Rosemary : Frérot…" - } - } -} diff --git a/src/locales/fr/dialogue-double-battle-male.json b/src/locales/fr/dialogue-double-battle.json similarity index 94% rename from src/locales/fr/dialogue-double-battle-male.json rename to src/locales/fr/dialogue-double-battle.json index 188b27ca143..d35e9d87ced 100644 --- a/src/locales/fr/dialogue-double-battle-male.json +++ b/src/locales/fr/dialogue-double-battle.json @@ -73,7 +73,8 @@ }, "marnie_piers_double": { "encounter": { - "1": "Peterson : Chauds pour un concert ?\n$Rosemary : Frérot… Il est pas là pour chanter, mais se battre…" + "1": "Peterson : Chauds pour un concert ?\n$Rosemary : Frérot… Il est pas là pour chanter, mais se battre…", + "1_female": "Peterson : Chauds pour un concert ?\n$Rosemary : Frérot… Elle est pas là pour chanter, mais se battre…" }, "victory": { "1": "Peterson : Ça c’est du rock !\n$Rosemary : Frérot…" diff --git a/src/locales/fr/dialogue-female.json b/src/locales/fr/dialogue-female.json deleted file mode 100644 index 82e3a4efd46..00000000000 --- a/src/locales/fr/dialogue-female.json +++ /dev/null @@ -1,577 +0,0 @@ -{ - "youngster": { - "encounter": { - "1": "Hé ! Combat ?", - "2": "Toi aussi tu débutes ?", - "3": "Hé, j’me souviens pas de ta tête. Combat !", - "4": "J’ai perdu, alors j’essaye de capturer d’autres Pokémon.\nHé, t’as l’air faible toi ! Allez, combat !", - "5": "On s’connait ? J’ai comme un doute. Dans tous les cas, sympa de te rencontrer !", - "6": "Allez, c’est parti !", - "7": "Attention, me voilà !\nTu vas voir comment j’suis fort !", - "8": "Coucou… Tu veux voir mes bô Pokémon ?", - "9": "Trève de mondanités. Ramène-toi quand tu le sens !", - "10": "Baisse pas ta garde si tu veux pas pleurer d’avoir perdu face à un gamin.", - "11": "J’ai tout donné pour élever mes Pokémon. Attention à toi si tu leur fait du mal !", - "12": "Incroyable que t’y sois parvenue ! Mais la suite va pas être une partie de plaisir.", - "13": "Les combats sont éternels ! Bienvenue dans un monde sans fin !" - }, - "victory": { - "1": "Hé, mais t’es trop forte !", - "2": "En vrai j’avais aucune chance hein ?", - "3": "J’te retrouverai un jour, et là j’te battrai !", - "4": "Arg… J’ai plus aucun Pokémon.", - "5": "Non… IMPOSSIBLE ! Pourquoi j’ai encore perdu…", - "6": "Non ! J’ai perdu !", - "7": "Waah ! T’es trop incroyable ! J’suis bouche bée !", - "8": "Pourquoi… Comment… Pourtant on est les plus forts, mes Pokémon et moi…", - "9": "J’perdrai pas la prochaine fois ! Remettons ça un jour !", - "10": "Weeeesh ! Tu vois que j’suis qu’un gamin ? C’est pas juste de me bully comme ça !", - "11": "Tes Pokémon sont trop incroyables !\n… P’tit échange ?", - "12": "Je me suis fait un peu aider plus tôt, mais de quel taf je parlais ?", - "13": "Ahaha ! Et voilà, ça y est !\nT’es déjà comme chez toi dans ce monde !" - } - }, - "lass": { - "encounter": { - "1": "Affrontons-nous, d’accord ?", - "2": "T’as l’air d’une nouvelle Dresseuse. Battons nous !", - "3": "Je te connais pas. Ça te dis de te battre ?", - "4": "Prenons du bon temps avec ce combat Pokémon !", - "5": "Je vais t’apprendre à te battre avec tes Pokémon !", - "6": "Un combat doit toujours être pris au sérieux.\nT’es prête à te battre ?", - "7": "Tu seras pas jeune éternellement. T’as qu’une chance pendant un combat. Bientôt, tu seras plus qu’un souvenir.", - "8": "Tu ferais mieux d’y aller doucement avec moi. Mais je vais me battre sérieusement !", - "9": "Je m’ennuie à l’école. Y’a rien à y faire. *Baille*\nJe me bats juste pour passer le temps." - }, - "victory": { - "1": "Wah, c’était impressionnant ! J’ai encore beaucoup à apprendre.", - "2": "Je pensais pas que je perdrais comme ça…", - "3": "J’espère que j’aurai ma revanche un jour.", - "4": "C’était super amusant ! Mais ce combat m’a épuisée…", - "5": "Tu m’as appris une belle leçon ! T’es vraiment incroyable !", - "6": "Vraiment ? J’ai perdu… ? C’est des choses qui arrivent, ça me déprime mais t’es vraiment très cool.", - "7": "J’ai pas besoin de ce genre de souvenirs.\n*Suppression de mémoire en cours…*", - "8": "Hé ! Je t’avais dit d’y aller doucement avec moi ! Mais t’es vraiment si cool quand tu te bats sérieusement…", - "9": "J’en ai marre des combats Pokémon…\nJe vais chercher d’autres trucs à faire…" - } - }, - "breeder": { - "encounter": { - "1": "Qu’ils soient obéissants ou égoïstes… Les Pokémon ont des caractéristiques uniques.", - "2": "Même si mes choix et ma personnalité ne sont pas fous, je pense quand même bien avoir élevé mes Pokémon.", - "3": "Hum, t’es pas trop laxiste avec tes Pokémon ?\nTrop les chouchouter n’est pas bon." - }, - "victory": { - "1": "Il est primordial de nourir et développer toutes les caractéristiques de chaque Pokémon.", - "2": "Contrairement à moi, ces Pokémon ont un bon fond.", - "3": "Trop d’éloges peut ruiner les Pokémon et les gens." - }, - "defeat": { - "1": "Tu ne devrais pas t’énerver sur tes Pokémon, même après une défaite.", - "2": "Alors ? Pas mal mes Pokémon, hein ? Je suis fait pour ça.", - "3": "Peu importe à quel point t’aimes tes Pokémon, il faut toujours de la discipline s’ils se comportent mal." - } - }, - "breeder_female": { - "encounter": { - "1": "Les Pokémon ne trahissent jamais. Ils te rendront toujours l’amour que tu leur donne.", - "2": "Puis-je te donner une astuce pour mieux élever tes Pokémon ?", - "3": "J’ai élevé mes Pokémon en utilisant une méthode très spéciale." - }, - "victory": { - "1": "Arg… C’était pas supposé se passer comme ça. Leur ai-je administré la mauvaise préparation ?", - "2": "Comment ça a pu arriver…\nAvec quoi nourris-tu tes Pokémon ?", - "3": "Si je perds, c’est juste pour te dire que je tuais le temps. Mon ego n’est absolument pas touché…" - }, - "defeat": { - "1": "C’est la preuve que mes Pokémon reconnaissent tout mon amour.", - "2": "Le seul secret derrière des Pokémon bien entrainés, c’est surtout d’en capturer des bons.", - "3": "La force des Pokémon dépend de ta capacité à savoir les élever correctement." - } - }, - "fisherman": { - "encounter": { - "1": "Aaah non ! J’avais une touche !\nTu comptes faire quoi pour arranger ça ?", - "2": "Bouge de là ! Tu fais peur aux Pokémon !", - "3": "Voyons si t’arrives à ferrer une victoire !" - }, - "victory": { - "1": "Vas-y là, oublie.", - "2": "La prochaine fois, je vais me repêcher !", - "3": "Je présume que j’ai sous-estimé les courants…" - } - }, - "fisherman_female": { - "encounter": { - "1": "Oh la belle prise !", - "2": "Ma ligne est en place, prête à ferrer le succès !", - "3": "Prête à faire des vagues !" - }, - "victory": { - "1": "Je suppose que je vais avoir besoin d’un plus gros hameçon.", - "2": "La ligne s’est brisée, j’ai pas pu la ferrer…", - "3": "Attends que j’aiguise mes hameçons pour la revanche !" - } - }, - "swimmer": { - "encounter": { - "1": "C’est l’heure de plonger dans le vif !", - "2": "C’est le moment de surfer sur les vagues de la victoire !", - "3": "Je vais t’éclabousser de mon talent !" - }, - "victory": { - "1": "Tu m’as complètement séché", - "2": "Il semblerait que ce soit celles de la défaite…", - "3": "Retour sur la terre ferme je suppose" - } - }, - "backpacker": { - "encounter": { - "1": "Fais ton sac, on y va !", - "2": "Voyons si t’arrives à garder le rythme !", - "3": "Accélère le pas, camarade !", - "4": "J’ai passé 20 ans à la recherche de moi-même…\nMais où suis-je ?" - }, - "victory": { - "1": "J’ai trébuché !", - "2": "Ah, je crois que je me suis paumé.", - "3": "Ah, une impasse !", - "4": "Hé ! Attends une seconde…\nTu saurais pas qui je suis ?" - } - }, - "ace_trainer": { - "encounter": { - "1": "T’as l’air plutôt confiante.", - "2": "Tes Pokémon… Montre-les-moi…", - "3": "Les gens pensent que je suis fort par que je suis un Topdresseur.", - "4": "T’es au courant de ce que ça signifie d’être un Topdresseur ?" - }, - "victory": { - "1": "Très bien… T’as de bons Pokémon…", - "2": "Quoi ?! Mais c’est moi le génie des combats !", - "3": "Évidemment que t’es le personnage principal !", - "4": "OK ! OK ! Tu pourrais être une Topdresseuse !" - }, - "defeat": { - "1": "Je me dévoue corps et âme aux combats Pokémon !", - "2": "Comme prévu… Vraiment aucune surprise…", - "3": "Et moi qui pensais qu’en grandissant, j’allais rester frêle et fragile, à me briser à la moindre étreinte.", - "4": "Évidemment que je suis fort et encore moins un perdant. C’est important de gagner avec grâce." - } - }, - "parasol_lady": { - "encounter": { - "1": "Honorons ce terrain de combat avec élégance et équilibre !" - }, - "victory": { - "2": "Mon élégance demeure inébranlable !" - } - }, - "rocket_grunt": { - "encounter": { - "1": "Nous sommes de retour !", - "2": "Ça bosse dur, ici ! Alors du balai !", - "3": "File-nous tes Pokémon ou tu vas gouter à la colère de la Team Rocket !", - "4": "Sois témoin de ce qu’est une vraie terreur de la Team Rocket!", - "5": "Hé gamine ! Moi être guy member of la Team Rocket !" - }, - "victory": { - "1": "Une fois de plus la Team Rocket s’envole vers d’autres cieux !", - "2": "Mince! J’ai laissé tomber\nla Clé Ascenseur !", - "3": "J’ai tout foiré !", - "4": "Mes compagnons vont me venger !", - "5": "Toi dire quoi ? Forget que tu m’as vu !\nYou n’as rien seen !" - } - }, - "magma_grunt": { - "encounter": { - "1": "N’espère pas recevoir de la pitié si tu te mets sur le chemin de la Team Magma !", - "2": "Ne te mêle pas de nos affaires ! On va rendre ce monde meilleur !", - "3": "Hors de mon chemin ! La Team Magma n’a pas de temps pour les gamins !", - "4": "J’espère que t’as quelques marshmallows, car ça va chauffer !", - "5": "On va utiliser le puissance d’un volcan ! Ça va être… explosif ! Tu l’as… ? Héhé !" - }, - "victory": { - "1": "Je…?\nJ’ai perdu ?!", - "2": "Je peux pas croire que j’ai pas pris mon déjeuner juste pour ça…", - "3": "Impossible ! T’es qu’une gosse !", - "4": "Aahhh…\nJ’aurais dû directement rentrer à la planque…", - "5": "Tu m’as démoli… Tu crois que le boss va suspendre mon salaire ?" - } - }, - "aqua_grunt": { - "encounter": { - "1": "Aucune pitié si tu te mets sur le chemin de la Team Aqua, même pour un gamin !", - "2": "Grrr…\nTu as eu le culot de t’opposer à la Team Aqua !", - "3": "Je vais te liquéfier !\nEt ce sera pas qu’à cause des mes Pokémon Eau !", - "4": "Nous, la Team Aqua, existons pour le bien commun !", - "5": "Prépare-toi à te faire emporter par le courant de…\nEuh… Mes Pokémon ! Oui, mes Pokémon !" - }, - "victory": { - "1": "Comment ça ?", - "2": "Ah, j’avais pas prévu d’être gêné par un mouflet qui se mêle de tout !", - "3": "J’ai perdu ?! Super, j’ai plus qu’à nager jusqu’à la planque maintenant…", - "4": "Oh non quelle angoisse…\nLe boss va me démonter…", - "5": "Je suis battu… Tu penses que le boss va me faire subir le supplice de la planche ?…" - } - }, - "galactic_grunt": { - "encounter": { - "1": "Ne te mets pas en travers de la Team Galaxie !", - "2": "Sois témoin de la puissance de notre technologie et du futur qui se profile !", - "3": "Au nom de la Team Galaxie, j’éliminerai quiconque se mettera sur notre route !", - "4": "Prépare ta défaite !", - "5": "J’espère que t’es prête à te prendre une raclée de l’espace !" - }, - "victory": { - "1": "Désactivation…", - "2": "Cet échec n’est qu’une poussière face à nos ambitions débordantes.", - "3": "Notre projet est bien plus important que cette défaite.", - "4": "Comment ?!", - "5": "Note à moi-même :\nM’entrainer aux combats Pokémon. Ça urge…" - } - }, - "plasma_grunt": { - "encounter": { - "1": "Pas de quatiers à ceux qui ne suivent pas notre idéal !", - "2": "Si je gagne, tu relâches tous tes Pokémon !", - "3": "Si tu te mets en travers de la Team Plasma, je m’occuperai de toi personnellement !", - "4": "La Team Plasma va libérer les Pokémon de tous les humains égoïstes dans ton genre !", - "5": "Nos coupes sont lunaires… Mais en combat ?\nTu vas vite le découvrir." - }, - "victory": { - "1": "Plasmaaaaaaaaa !", - "2": "Comment ai-je pu perdre…", - "3": "… Ce Pokémon est nul, j’vais aller en voler de meilleurs !", - "4": "Les plans ambitieux connaissent toujours leurs lots d’interruptions.", - "5": "C’est mauvais… MAUVAIS MAUVAIS MAUVAIS MAUVAIS !\nVa falloir battre en retraite, c’est la méga cata !" - } - }, - "flare_grunt": { - "encounter": { - "1": "Tes Pokémon ne sont pas dignes de l’élégance de la Team Flare.", - "2": "T’as des lunettes de soleil j’espère ?\nCar prépare-toi à être éblouie !", - "3": "La Team Flare va purifier ce monde de toute imperfection !", - "4": "Prépare-toi à découvrir l’indiscutable sens du style de la Team Flare !", - "5": "La mode, c’est important !" - }, - "victory": { - "1": "Mon futur n’a pas l’air si radieux.", - "2": "Les combats semblent être plus complexes que je le pensais.\nRetour aux planches à dessin.", - "3": "Ehhhh ?! J’ai perdu ?!", - "4": "Même dans la défaite, l’élégance de la Team Flare continue de rayonner sur ce monde.", - "5": "J’appelle pas ça perdre, j’appelle ça échouer avec panache !" - } - }, - "rocket_boss_giovanni_1": { - "encounter": { - "1": "Bien. Je dois admettre que je suis impressionné de te voir ici !" - }, - "victory": { - "1": "QUOI ? IMPOSSIBLE !" - }, - "defeat": { - "1": "Retiens bien. Ton incapacité à évaluer ta propre force est\nla démonstration claire que tu n’es encore qu’une gamine." - } - }, - "rocket_boss_giovanni_2": { - "encounter": { - "1": "Mes anciens collaborateurs m’attendent.\nComptes-tu m’en empêcher ?" - }, - "victory": { - "1": "Comment c’est possible… ? Le grand dessein de la Team Rocket n’est plus qu’une illusion…" - }, - "defeat": { - "1": "La Team Rocket renaitra, et je dominerai le monde !" - } - }, - "magma_boss_maxie_1": { - "encounter": { - "1": "Je vais t’enterrer de mes propres mains.\nJ’espère que t’apprécieras cet honneur !" - }, - "victory": { - "1": "Gnn… ! Tu… T’as du répondant…\nCe sentiment d’être à la traine, de si peu…" - }, - "defeat": { - "1": "La Team Magma vaincra !" - } - }, - "magma_boss_maxie_2": { - "encounter": { - "1": "T’es le dernier rempart entravant mes objectifs.\nPrépare-toi à mon ultime riposte ! Hahahaha !" - }, - "victory": { - "1": "Ce… Ce n’est pas… Gnn…" - }, - "defeat": { - "1": "L’heure est venue…\nJe vais transformer cette planète en paradis pour l’humanité." - } - }, - "aqua_boss_archie_1": { - "encounter": { - "1": "Je suis le Leader de la Team Aqua.\nJ’ai bien peur que pour toi, ce soit fin de parcours." - }, - "victory": { - "1": "Retrouvons-nous.\nJe me souviendrai de ton visage." - }, - "defeat": { - "1": "Magnifique !\nPlus rien ne peut nous retenir !" - } - }, - "aqua_boss_archie_2": { - "encounter": { - "1": "J’ai attendu ce moment depuis si longtemps.\nVoici la vraie puissance de la Team Aqua !" - }, - "victory": { - "1": "Comme si j’y avait cru…" - }, - "defeat": { - "1": "Je rendrai à ce monde sa pureté originelle !" - } - }, - "galactic_boss_cyrus_1": { - "encounter": { - "1": "Tu t’es sentie obligée de venir ici dans un acte vide de sens. Je vais te le faire regretter." - }, - "victory": { - "1": "Intéressant. Et plutôt curieux." - }, - "defeat": { - "1": "Je le créerai, mon nouveau monde…" - } - }, - "galactic_boss_cyrus_2": { - "encounter": { - "1": "Nous y revoilà. Il semblerait que nos destinées soient entremêlées. Il est l’heure d’y mettre un terme." - }, - "victory": { - "1": "Comment. Comment ?\nCOMMENT ?!" - }, - "defeat": { - "1": "Adieu." - } - }, - "plasma_boss_ghetsis_1": { - "encounter": { - "1": "Je n’accepterai pas qu’on me barre la route !\nPeu importe qui fait quoi !" - }, - "victory": { - "1": "Comment ? Je suis le leader de la Team Plasma !\nJe suis parfait !" - }, - "defeat": { - "1": "Je suis le parfait monarque d’un monde parfait !\nHahaha !" - } - }, - "plasma_boss_ghetsis_2": { - "encounter": { - "1": "Viens ! Je veux voir ton visage à l’instant même où l’espoir quittera ton corps !" - }, - "victory": { - "1": "Mes calculs… Non ! Mes plans étaient parfaits !\nCe monde devrait être mien !" - }, - "defeat": { - "1": "Kyurem ! Fusiorption !!!" - } - }, - "flare_boss_lysandre_1": { - "encounter": { - "1": "Comptes-tu m’arrêter ? Prouve-le." - }, - "victory": { - "1": "T’es venu m’arrêter. Mais je te demande d’attendre." - }, - "defeat": { - "1": "Les Pokémon… Ne devraient plus exister." - } - }, - "brock": { - "encounter": { - "1": "Mon expertise des types Roche va te mettre au sol ! En garde !", - "2": "Tu veux toujours te battre avec moi ? Même en sachant que tu vas perdre ?", - "3": "Laisse-moi de montrer la véritable force de mes Pokémon Roche !" - }, - "victory": { - "1": "J’étais trop sûr de moi, c’est pour ça que j’ai perdu.", - "2": "Ce monde est vaste ! Je suis honoré d’avoir pu t’affronter.", - "3": "Peut-être bien que je n’aurais pas dû abandonner ma vocation d’Éleveur…" - }, - "defeat": { - "1": "La défense est la meilleure des attaques !\nTelle est ma méthode !", - "2": "Viens étudier des roches avec moi la prochaine fois si tu veux apprendre à mieux les aborder !", - "3": "Tout ce temps à voyager autour du monde paie enfin !" - } - }, - "misty": { - "encounter": { - "1": "Ma tactique ? Attaquer avec des Pokémon Eau !", - "2": "Je vais te prouver le tsunami que sont mes Pokémon aquatiques !", - "3": "Mon rêve, c’était de voyager et de défier des Dresseurs super forts. Seras-tu à la hauteur ?" - }, - "victory": { - "1": "OK. T’es pas naze… Je le reconnais…", - "2": "Pfff… T’as juste eu de la chance hein ?!", - "3": "Ouah ! T’es super balèze !" - }, - "defeat": { - "1": "Qu’en dis-tu? C’est ça, la puissance des Pokémon Eau !", - "2": "J’espère que t’as pris note des élégantes techniques de nage de mes Pokémon !", - "3": "Tes Pokémon ne jouent visiblement pas dans le même bassin…" - } - }, - "lt_surge": { - "encounter": { - "1": "T’as pas froid aux yeux, soldat ! Les combats Pokémon, c’est la guerre !", - "2": "Tu as du guts pour venir me fight ici ! Je vais te shock !", - "3": "Compte tes dents, tu vas morfler !\nMes Pokémon Électrik vont t’atomiser !" - }, - "victory": { - "1": "Whoo ! T’iras loin toi.", - "2": "Oh noes ! Mes tricks électriques sont à plat…\nYou are very fortiche!", - "3": "Tu es very costaud ! Je vais training very dur mes Pokémon, moi too, et on sera Number One !" - }, - "defeat": { - "1": "Oh yeah !\nMes Pokémon Électrik sont les best du monde !", - "2": "Oh yeah, baby ! I am trop fort !", - "3": "Une combat Pokémon, c’est comme une guerre et t’as eu droit à une bataille de premier ordre !" - } - }, - "erika": { - "encounter": { - "1": "Il fait beau, aujourd’hui, n’est-ce pas… ?\nQuoi un combat… ? Très bien…", - "2": "L’arrangement floral est ma spécialité, et mes Pokémon sont de type Plante. Quoi ? Tu veux te battre ?", - "3": "Il fait beau… Le soleil brille… Les plantes bourgeonnent… Je m’ennuie…", - "4": "Voir un tel jardin rempli de fleurs est si apaisant…" - }, - "victory": { - "1": "Bien joué, c’est mértié.", - "2": "Dommage, on s’amusait si bien…", - "3": "Oh non, le combat est terminé…", - "4": "Aaah, ça fait du bien !\nMerci, j’en avais besoin." - }, - "defeat": { - "1": "J’ai failli m’endormir…", - "2": "Oh non… Mes Pokémon Plante ont l’air de t’avoir bien endormie…", - "3": "Ce combat était si apaisant…", - "4": "Oh non… C’est tout ?" - } - }, - "flare_boss_lysandre_2": { - "encounter": { - "1": "Ton futur ou le mien…\nVoyons lequel mérite plus d’aboutir." - }, - "victory": { - "1": "Ohhhh… !" - }, - "defeat": { - "1": "Les ignorants sans aucune vision n’auront donc de cesse de souiller ce monde." - } - }, - "rival": { - "encounter": { - "1": "@c{smile}Ah, te voilà ! Je t’ai cherchée partout ! Je savais que t’étais pressée de partir, mais je m’attendais quand même à un au revoir…\n$@c{smile_eclosed}T’as finalement décidé de réaliser ton rêve ?\nJ’ai peine à y croire.\n$@c{serious_smile_fists}Vu que t’es là, ça te dis un petit combat ?\nJe voudrais quand même m’assurer que t’es prête.\n$@c{serious_mopen_fists}Surtout ne te retiens pas et donne-moi tout ce que t’as !" - }, - "victory": { - "1": "@c{shock}Wah… Tu m’as vraiment lavé.\nT’es vraiment une débutante ?\n$@c{smile}T’as peut-être eu de la chance, mais…\nPeut-être que t’arriveras jusqu’au bout du chemin.\n$D’ailleurs, le prof m’a demandé de te filer ces objets.\nIls ont l’air sympas.\n$@c{serious_smile_fists}Bonne chance à toi !" - } - }, - "rival_female": { - "encounter": { - "1": "@c{smile_wave}Ah, je te cherchais ! Je t’ai cherchée partout !\n@c{angry_mopen}On oublie de dire au revoir à sa meilleure amie ?\n$@c{smile_ehalf}T’as décidé de réaliser ton rêve, hein ?\nCe jour est donc vraiment arrivé…\n$@c{smile}Je veux bien te pardonner de m’avoir oubliée,\nà une conditon. @c{smile_wave_wink}Que tu m’affronte !\n$@c{angry_mopen}Donne tout ! Ce serait dommage que ton aventure finisse avant d’avoir commencé, hein ?" - }, - "victory": { - "1": "@c{shock}Tu viens de commencer et t’es déjà si forte ?!@d{96}\n@c{angry}T’as triché non ? Avoue !\n$@c{smile_wave_wink}J’déconne !@d{64} @c{smile_eclosed}J’ai perdu dans les règles…\nJ’ai le sentiment que tu vas très bien t’en sortir.\n$@c{smile}D’ailleurs, le prof veut que je te donne ces quelques objets. Ils te seront utiles, pour sûr !\n$@c{smile_wave}Fais de ton mieux, comme toujours !\nJe crois fort en toi !" - } - }, - "rival_2": { - "encounter": { - "1": "@c{smile}Hé, toi aussi t’es là ?\n@c{smile_eclosed}Toujours invaincue, hein… ?\n$@c{serious_mopen_fists}Je sais que j’ai l’air de t’avoir suivie ici, mais c’est pas complètement vrai.\n$@c{serious_smile_fists}Pour être honnête, ça me démangeait d’avoir une revanche depuis que tu m’as battu.\n$Je me suis beaucoup entrainé, alors sois sure que je vais pas retenir mes coups cette fois.\n$@c{serious_mopen_fists}Et comme la dernière fois, ne te retiens pas !\nC’est parti !" - }, - "victory": { - "1": "@c{neutral_eclosed}Oh. Je crois que j’ai trop pris la confiance.\n$@c{smile}Pas grave, c’est OK. Je me doutais que ça arriverait.\n@c{serious_mopen_fists}Je vais juste devoir encore plus m’entrainer !\n\n$@c{smile}Ah, et pas que t’aies réellement besoin d’aide, mais j’ai ça en trop sur moi qui pourrait t’intéresser.\n\n$@c{serious_smile_fists}Mais n’espère plus en avoir d’autres !\nJe peux pas passer mon temps à aider mon adversaire.\n$@c{smile}Bref, prends soin de toi et profite bien de l’évènement !" - } - }, - "rival_2_female": { - "encounter": { - "1": "@c{smile_wave}Hé, sympa de te croiser ici. T’as toujours l’air invaincue. @c{angry_mopen}Eh… Pas mal !\n$@c{angry_mopen}Je sais à quoi tu penses et non, je t’espionne pas.\n@c{smile_eclosed}C’est juste que j’étais aussi dans le coin.\n$@c{smile_ehalf}Heureuse pour toi, mais je veux juste te rappeler que c’est pas grave de perdre parfois.\n$@c{smile}On apprend de nos erreurs, souvent plus que si on ne connaissait que le succès.\n$@c{angry_mopen}Dans tous les cas je me suis bien entrainée pour cette revanche, t’as intérêt à tout donner !" - }, - "victory": { - "1": "@c{neutral}Je… J’étais pas encore supposée perdre…\n$@c{smile}Bon. Ça veut juste dire que je vais devoir encore plus m’entrainer !\n$@c{smile_wave}J’ai aussi ça en rab pour toi !\n@c{smile_wave_wink}Inutile de me remercier ~.\n$@c{angry_mopen}C’était le dernier, terminé les cadeaux après celui-là !\n$@c{smile_wave}Allez, tiens le coup et profite bien de l’évènement !" - }, - "defeat": { - "1": "Je suppose que c’est parfois normal de perdre…" - } - }, - "rival_3": { - "encounter": { - "1": "@c{smile}Hé, mais qui voilà ! Ça fait un bail.\n@c{neutral}T’es… toujours invaincue ? Incroyable.\n$@c{neutral_eclosed}Tout est devenu un peu… étrange.\nC’est plus pareil sans toi au village.\n$@c{serious}Je sais que c’est égoïste, mais j’ai besoin d’expier ça.\n@c{neutral_eclosed}Je crois que tout ça te dépasse.\n$@c{serious}Ne jamais perdre, c’est juste irréaliste.\nGrandir, c’est parfois aussi savoir perdre.\n$@c{neutral_eclosed}T’as un beau parcours, mais il y a encore tellement à venir et ça va pas s’arranger. @c{neutral}T’es prête pour ça ?\n$@c{serious_mopen_fists}Si tu l’es, alors prouve-le." - }, - "victory": { - "1": "@c{angry_mhalf}C’est lunaire… J’ai presque fait que m’entrainer…\nAlors pourquoi il y a encore un tel écart entre nous ?" - } - }, - "rival_3_female": { - "encounter": { - "1": "@c{smile_wave}Ça fait une éternité ! Toujours debout hein ?\n@c{angry}Tu commences à me pousser à bout là. @c{smile_wave_wink}T’inquiètes j’déconne !\n$@c{smile_ehalf}Mais en vrai, ta maison te manque pas ? Ou… Moi ?\nJ… Je veux dire… Tu me manques vraiment beaucoup.\n$@c{smile_eclosed}Je te soutiendrai toujours dans tes ambitions, mais la vérité est que tu finiras par perdre un jour ou l’autre.\n$@c{smile}Quand ça arrivera, je serai là pour toi, comme toujours.\n@c{angry_mopen}Maintenant, montre-moi à quel point t’es devenue forte !" - }, - "victory": { - "1": "@c{shock}Après tout ça… Ça te suffit toujours pas… ?\nTu reviendras jamais à ce rythme…" - }, - "defeat": { - "1": "T’as fait de ton mieux.\nAllez, rentrons à la maison." - } - }, - "rival_4": { - "encounter": { - "1": "@c{neutral}Hé.\n$Je vais pas y aller par quatre chemins avec toi.\n@c{neutral_eclosed}Je suis là pour gagner. Simple, basique.\n$@c{serious_mhalf_fists}J’ai appris à maximiser tout mon potentiel en m’entrainant d’arrachepied.\n$@c{smile}C’est fou tout le temps que tu peux te dégager si tu dors pas en sacrifiant ta vie sociale.\n$@c{serious_mopen_fists}Plus rien n’a d’importance désormais, pas tant que j’aurai pas gagné.\n$@c{neutral_eclosed}J’ai atteint un stade où je ne peux plus perdre.\n@c{smile_eclosed}Je présume que ta philosophie était pas si fausse finalement.\n$@c{angry_mhalf}La défaite, c’est pour les faibles, et je ne suis plus un faible.\n$@c{serious_mopen_fists}Tiens-toi prête." - }, - "victory": { - "1": "@c{neutral}Que…@d{64} Qui es-tu ?" - } - }, - "rival_4_female": { - "encounter": { - "1": "@c{neutral}C’est moi ! Tu m’as pas encore oubliée… n’est-ce pas ?\n$@c{smile}Tu devrais être fière d’être arrivée aussi loin. GG !\nMais c’est certainement pas la fin de ton aventure.\n$@c{smile_eclosed}T’as éveillé en moi quelque chose que j’ignorais.\nTout mon temps passe dans l’entrainement.\n$@c{smile_ehalf}Je dors et je mange à peine, je m’entraine juste tous les jours, et deviens de plus en plus forte.\n$@c{neutral}En vrai, Je… J’ai de la peine à me reconnaitre.\n$Mais maintenant, je suis au top de mes capacités.\nJe doute que tu sois de nouveau capable de me battre.\n$Et tu sais quoi ? Tout ça, c’est de ta faute.\n@c{smile_ehalf}Et j’ignore si je dois te remercier ou te haïr.\n$@c{angry_mopen}Tiens-toi prête." - }, - "victory": { - "1": "@c{neutral}Que…@d{64} Qui es-tu ?" - }, - "defeat": { - "1": "$@c{smile}Tu devrais être fière d’être arrivé jusque là." - } - }, - "rival_5": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - } - }, - "rival_5_female": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - }, - "defeat": { - "1": "$@c{smile_ehalf}…" - } - }, - "rival_6": { - "encounter": { - "1": "@c{smile_eclosed}Nous y revoilà.\n$@c{neutral}J’ai eu du temps pour réfléchir à tout ça.\nIl y a une raison à pourquoi tout semble étrange.\n$@c{neutral_eclosed}Ton rêve, ma volonté de te battre…\nFont partie de quelque chose de plus grand.\n$@c{serious}C’est même pas à propos de moi, ni de toi… Mais du monde, @c{serious_mhalf_fists}et te repousser dans tes limites est ma mission.\n$@c{neutral_eclosed}J’ignore si je serai capable de l’accomplir, mais je ferai tout ce qui est en mon pouvoir.\n$@c{neutral}Cet endroit est terrifiant… Et pourtant il m’a l’air familier, comme si j’y avais déjà mis les pieds.\n$@c{serious_mhalf_fists}Tu ressens la même chose, pas vrai ?\n$@c{serious}… et c’est comme si quelque chose ici me parlait.\n$Comme si c’était tout ce que ce monde avait toujours connu.\n$Ces précieux moments ensemble semblent si proches ne sont rien de plus qu’un lointain souvenir.\n$@c{neutral_eclosed}D’ailleurs, qui peut dire aujourd’hui qu’ils ont pu être réels ?\n$@c{serious_mopen_fists}Il faut que tu persévères. Si tu t’arrêtes, ça n’aura jamais de fin et t’es la seule à en être capable.\n$@c{serious_smile_fists}Difficile de comprendre le sens de tout ça, je sais juste que c’est la réalité.\n$@c{serious_mopen_fists}Si tu ne parviens à pas me battre ici et maintenant, tu n’as aucune chance." - }, - "victory": { - "1": "@c{smile_eclosed}J’ai fait ce que j’avais à faire.\n$Promets-moi juste une chose.\n@c{smile}Après avoir réparé ce monde… Rentre à la maison." - } - }, - "rival_6_female": { - "encounter": { - "1": "@c{smile_ehalf}C’est donc encore entre toi et moi.\n$@c{smile_eclosed}Tu sais, j’ai beau retouner ça dans tous les sens…\n$@c{smile_ehalf}Quelque chose peut expliquer tout ça, pourquoi tout semble si étrange…\n$@c{smile}T’as tes rêves, j’ai mes ambitions…\n$J’ai juste le sentiment qu’il y a un grand dessein derrière tout ça, derrière ce qu’on fait toi et moi.\n$@c{smile_eclosed}Je crois que mon but est de… repousser tes limites.\n$@c{smile_ehalf}Je suis pas certaine de bien être douée à cet exercice, mais je fais de mon mieux.\n$Cet endroit épouvantable cache quelque chose d’étrange… Tout semble si limpide…\n$Comme… si c’était tout ce que ce monde avait toujours connu.\n$@c{smile_eclosed}J’ai le sentiment que nos précieux moments ensemble sont devenus si flous.\n$@c{smile_ehalf}Ont-ils au moins été réels ? Tout semble si loin maintenant…\n$@c{angry_mopen}Il faut que tu persévères. Si tu t’arrêtes, ça n’aura jamais de fin et t’es le seul à en être capable.\n$@c{smile_ehalf}Je… j’ignore le sens de tout ça… Mais je sais que c’est la réalité.\n$@c{neutral}Si tu ne parviens pas à me battre ici et maintenant, tu n’as aucune chance." - }, - "victory": { - "1": "@c{smile_ehalf}Je… Je crois que j’ai rempli ma mission…\n$@c{smile_eclosed}Promets-moi… Après avoir réparé ce monde… Reviens à la maison saine et sauve.\n$@c{smile_ehalf}… Merci." - } - } -} diff --git a/src/locales/fr/dialogue-final-boss-female.json b/src/locales/fr/dialogue-final-boss-female.json deleted file mode 100644 index be4ad6d83fe..00000000000 --- a/src/locales/fr/dialogue-final-boss-female.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "encounter": "Une fois de plus, te revoilà.\nSais-tu que ce n’est point là ta première venue ?\n$Tu as été appelée ici parce que t’y es déjà venue.\nUn nombre inimaginable de fois.\n$Mais allons-y, faisons le décompte.\nTu en es très précisément à ton {{cycleCount}}e cycle.\n$Chaque cycle réinitialise ton souvenir du précédent.\nMais étrangement, des bribes subsistent en toi.\n$Jusqu’à maintenant, tu as toujours échoué. Mais je ressens quelque chose de différent cette fois-ci.\n\n$Tu es la seule présence ici, bien que j’ai le sentiment d’en ressentir… une autre.\n$Vas-tu enfin me livrer un affrontement digne de ce nom ?\nCe challenge dont je rêve depuis un millénaire ?\n$Commençons.", - "firstStageWin": "Je vois. Cette présence était bien réelle.\nJe n’ai donc plus besoin de retenir mes coups.\n$Ne me déçoit pas.", - "secondStageWin": "… Magnifique." -} \ No newline at end of file diff --git a/src/locales/fr/dialogue-final-boss-male.json b/src/locales/fr/dialogue-final-boss.json similarity index 55% rename from src/locales/fr/dialogue-final-boss-male.json rename to src/locales/fr/dialogue-final-boss.json index 7c51d1cc3a3..c5a5e3b7d89 100644 --- a/src/locales/fr/dialogue-final-boss-male.json +++ b/src/locales/fr/dialogue-final-boss.json @@ -1,5 +1,6 @@ { "encounter": "Une fois de plus, te revoilà.\nSais-tu que ce n’est point là ta première venue ?\n$Tu as été appelé ici parce que t’y es déjà venu.\nUn nombre inimaginable de fois.\n$Mais allons-y, faisons le décompte.\nTu en es très précisément à ton {{cycleCount}}e cycle.\n$Chaque cycle réinitialise ton souvenir du précédent.\nMais étrangement, des bribes subsistent en toi.\n$Jusqu’à maintenant, tu as toujours échoué. Mais je ressens quelque chose de différent cette fois-ci.\n\n$Tu es la seule présence ici, bien que j’ai le sentiment d’en ressentir… une autre.\n$Vas-tu enfin me livrer un affrontement digne de ce nom ?\nCe challenge dont je rêve depuis un millénaire ?\n$Commençons.", + "encounter_female": "Une fois de plus, te revoilà.\nSais-tu que ce n’est point là ta première venue ?\n$Tu as été appelée ici parce que t’y es déjà venue.\nUn nombre inimaginable de fois.\n$Mais allons-y, faisons le décompte.\nTu en es très précisément à ton {{cycleCount}}e cycle.\n$Chaque cycle réinitialise ton souvenir du précédent.\nMais étrangement, des bribes subsistent en toi.\n$Jusqu’à maintenant, tu as toujours échoué. Mais je ressens quelque chose de différent cette fois-ci.\n\n$Tu es la seule présence ici, bien que j’ai le sentiment d’en ressentir… une autre.\n$Vas-tu enfin me livrer un affrontement digne de ce nom ?\nCe challenge dont je rêve depuis un millénaire ?\n$Commençons.", "firstStageWin": "Je vois. Cette présence était bien réelle.\nJe n’ai donc plus besoin de retenir mes coups.\n$Ne me déçoit pas.", "secondStageWin": "… Magnifique." } \ No newline at end of file diff --git a/src/locales/fr/dialogue-misc-male.json b/src/locales/fr/dialogue-misc-male.json deleted file mode 100644 index d932d283d37..00000000000 --- a/src/locales/fr/dialogue-misc-male.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "ending": "@c{smile}Oh ? T’as gagné ?@d{96} @c{smile_eclosed}J’aurais dû le savoir.\nMais de voilà de retour.\n$@c{smile}C’est terminé.@d{64} T’as brisé ce cycle infernal.\n$@c{serious_smile_fists}T’as aussi accompli ton rêve non ?\nTu n’as pas connu la moindre défaite.\n$@c{neutral}Je suis le seul à me souvenir de ce que t’as fait.@d{96}\nJe pense que ça ira, non ?\n$@c{serious_smile_fists}Ta légende vivra à jamais dans nos cœurs.\n$@c{smile_eclosed}Bref, j’en ai un peu marre de ce endroit, pas toi ? Rentrons à la maison.\n$@c{serious_smile_fists}On se fera un p’tit combat une fois rentrés ?\nSi t’es d’accord.", - "ending_female": "@c{shock}T’es revenu ?@d{32} Ça veut dire…@d{96} que t’as gagné ?!\n@c{smile_ehalf}J’aurais dû le savoir.\n$@c{smile_eclosed}Bien sûr… J’ai toujours eu ce sentiment.\n@c{smile}C’est fini maitenant hein ? T’as brisé ce cycle.\n$@c{smile_ehalf}T’as aussi accompli ton rêve non ?\nTu n’as pas connu la moindre défaite.\n$Je serai la seule à me souvenir de ce que t’as fait.\n@c{angry_mopen}Je tâcherai de ne pas oublier !\n$@c{smile_wave_wink}J’déconne !@d{64} @c{smile}Jamais j’oublierai.@d{32}\nTa légende vivra à jamais dans nos cœurs.\n$@c{smile_wave}Bon,@d{64} il se fait tard…@d{96} je crois ?\nDifficile à dire ici.\n$Rentrons, @c{smile_wave_wink}et demain on se fera un p’tit combat, comme au bon vieux temps ?" -} \ No newline at end of file diff --git a/src/locales/fr/dialogue-misc-female.json b/src/locales/fr/dialogue-misc.json similarity index 100% rename from src/locales/fr/dialogue-misc-female.json rename to src/locales/fr/dialogue-misc.json diff --git a/src/locales/fr/dialogue-male.json b/src/locales/fr/dialogue.json similarity index 95% rename from src/locales/fr/dialogue-male.json rename to src/locales/fr/dialogue.json index 26636a15e4f..c9bb3c417c7 100644 --- a/src/locales/fr/dialogue-male.json +++ b/src/locales/fr/dialogue.json @@ -13,10 +13,12 @@ "10": "Baisse pas ta garde si tu veux pas pleurer d’avoir perdu face à un gamin.", "11": "J’ai tout donné pour élever mes Pokémon. Attention à toi si tu leur fait du mal !", "12": "Incroyable que t’y sois parvenu ! Mais la suite va pas être une partie de plaisir.", + "12_female": "Incroyable que t’y sois parvenue ! Mais la suite va pas être une partie de plaisir.", "13": "Les combats sont éternels ! Bienvenue dans un monde sans fin !" }, "victory": { "1": "Hé, mais t’es trop fort !", + "1_female": "Hé, mais t’es trop forte !", "2": "En vrai j’avais aucune chance hein ?", "3": "J’te retrouverai un jour, et là j’te battrai !", "4": "Arg… J’ai plus aucun Pokémon.", @@ -35,10 +37,12 @@ "encounter": { "1": "Affrontons-nous, d’accord ?", "2": "T’as l’air d’un nouveau Dresseur. Battons nous !", + "2_female": "T’as l’air d’une nouvelle Dresseuse. Battons nous !", "3": "Je te connais pas. Ça te dis de te battre ?", "4": "Prenons du bon temps avec ce combat Pokémon !", "5": "Je vais t’apprendre à te battre avec tes Pokémon !", "6": "Un combat doit toujours être pris au sérieux.\nT’es prêt à te battre ?", + "6_female": "Un combat doit toujours être pris au sérieux.\nT’es prête à te battre ?", "7": "Tu seras pas jeune éternellement. T’as qu’une chance pendant un combat. Bientôt, tu seras plus qu’un souvenir.", "8": "Tu ferais mieux d’y aller doucement avec moi. Mais je vais me battre sérieusement !", "9": "Je m’ennuie à l’école. Y’a rien à y faire. *Baille*\nJe me bats juste pour passer le temps." @@ -46,10 +50,12 @@ "victory": { "1": "Wah, c’était impressionnant ! J’ai encore beaucoup à apprendre.", "2": "Je ne pensais pas que je perdrais comme ça…", + "2_female": "Je pensais pas que je perdrais comme ça…", "3": "J’espère que j’aurai ma revanche un jour.", "4": "C’était super amusant ! Mais ce combat m’a épuisée…", "5": "Tu m’as appris une belle leçon ! T’es vraiment incroyable !", "6": "Vraiment ? J’ai perdu… ? C’est des choses qui arrivent, ça me déprime mais tu es vraiment très cool.", + "6_female": "Vraiment ? J’ai perdu… ? C’est des choses qui arrivent, ça me déprime mais t’es vraiment très cool.", "7": "J’ai pas besoin de ce genre de souvenirs.\n*Suppression de mémoire en cours…*", "8": "Hé ! Je t’avais dit d’y aller doucement avec moi ! Mais t’es vraiment si cool quand tu te bats sérieusement…", "9": "J’en ai marre des combats Pokémon…\nJe vais chercher d’autres trucs à faire…" @@ -142,6 +148,7 @@ "ace_trainer": { "encounter": { "1": "T’as l’air plutôt confiant.", + "1_female": "T’as l’air plutôt confiante.", "2": "Tes Pokémon… Montre-les-moi…", "3": "Les gens pensent que je suis fort par que je suis un Topdresseur.", "4": "T’es au courant de ce que ça signifie d’être un Topdresseur ?" @@ -150,7 +157,8 @@ "1": "Très bien… T’as de bons Pokémon…", "2": "Quoi ?! Mais c’est moi le génie des combats !", "3": "Évidemment que t’es le personnage principal !", - "4": "OK ! OK ! Tu pourrais être un Topdresseur !" + "4": "OK ! OK ! Tu pourrais être un Topdresseur !", + "4_female": "OK ! OK ! Tu pourrais être une Topdresseuse !" }, "defeat": { "1": "Je me dévoue corps et âme aux combats Pokémon !", @@ -164,7 +172,7 @@ "1": "Honorons ce terrain de combat avec élégance et équilibre !" }, "victory": { - "2": "Mon élégance demeure inébranlable !" + "1": "Mon élégance demeure inébranlable !" } }, "rocket_grunt": { @@ -173,7 +181,8 @@ "2": "Ça bosse dur, ici ! Alors du balai !", "3": "File-nous tes Pokémon ou tu vas gouter à la colère de la Team Rocket !", "4": "Sois témoin de ce qu’est une vraie terreur de la Team Rocket!", - "5": "Hé gamin ! Moi être guy member of la Team Rocket !" + "5": "Hé gamin ! Moi être guy member of la Team Rocket !", + "5_female": "Hé gamine ! Moi être guy member of la Team Rocket !" }, "victory": { "1": "Une fois de plus la Team Rocket s’envole vers d’autres cieux !", @@ -195,6 +204,7 @@ "1": "Je…?\nJ’ai perdu ?!", "2": "Je peux pas croire que j’ai pas pris mon déjeuner juste pour ça…", "3": "Impossible ! T’es qu’un gosse !", + "3_female": "Impossible ! T’es qu’une gosse !", "4": "Aahhh…\nJ’aurais dû directement rentrer à la planque…", "5": "Tu m’as démoli… Tu crois que le boss va suspendre mon salaire ?" } @@ -221,7 +231,8 @@ "2": "Sois témoin de la puissance de notre technologie et du futur qui se profile !", "3": "Au nom de la Team Galaxie, j’éliminerai quiconque se mettera sur notre route !", "4": "Prépare ta défaite !", - "5": "J’espère que t’es prêt à te prendre une raclée de l’espace !" + "5": "J’espère que t’es prêt à te prendre une raclée de l’espace !", + "5_female": "J’espère que t’es prête à te prendre une raclée de l’espace !" }, "victory": { "1": "Désactivation…", @@ -251,6 +262,7 @@ "encounter": { "1": "Tes Pokémon ne sont pas dignes de l’élégance de la Team Flare.", "2": "T’as des lunettes de soleil j’espère ?\nCar prépare-toi à être ébloui !", + "2_female": "T’as des lunettes de soleil j’espère ?\nCar prépare-toi à être éblouie !", "3": "La Team Flare va purifier ce monde de toute imperfection !", "4": "Prépare-toi à découvrir l’indiscutable sens du style de la Team Flare !", "5": "La mode, c’est important !" @@ -271,7 +283,8 @@ "1": "QUOI ? IMPOSSIBLE !" }, "defeat": { - "1": "Retiens bien. Ton incapacité à évaluer ta propre force est\nla démonstration claire que tu n’es encore qu’un gamin." + "1": "Retiens bien. Ton incapacité à évaluer ta propre force est\nla démonstration claire que tu n’es encore qu’un gamin.", + "1_female": "Retiens bien. Ton incapacité à évaluer ta propre force est\nla démonstration claire que tu n’es encore qu’une gamine." } }, "rocket_boss_giovanni_2": { @@ -331,7 +344,8 @@ }, "galactic_boss_cyrus_1": { "encounter": { - "1": "Tu t’es senti obligé de venir ici dans un acte vide de sens. Je vais te le faire regretter." + "1": "Tu t’es senti obligé de venir ici dans un acte vide de sens. Je vais te le faire regretter.", + "1_female": "Tu t’es sentie obligée de venir ici dans un acte vide de sens. Je vais te le faire regretter." }, "victory": { "1": "Intéressant. Et plutôt curieux." @@ -462,6 +476,7 @@ "defeat": { "1": "J’ai failli m’endormir…", "2": "Oh non… Mes Pokémon Plante ont l’air de t’avoir bien endormi…", + "2_female": "Oh non… Mes Pokémon Plante ont l’air de t’avoir bien endormie…", "3": "Ce combat était si apaisant…", "4": "Oh non… C’est tout ?" } diff --git a/src/locales/it/config.ts b/src/locales/it/config.ts index 6bb46273370..a8cd1e4e0bd 100644 --- a/src/locales/it/config.ts +++ b/src/locales/it/config.ts @@ -15,14 +15,10 @@ import bgmName from "./bgm-name.json"; import biome from "./biome.json"; import challenges from "./challenges.json"; import commandUiHandler from "./command-ui-handler.json"; -import dialogueMale from "./dialogue-male.json"; -import dialogueFemale from "./dialogue-female.json"; -import dialogueEndbossMale from "./dialogue-final-boss-male.json"; -import dialogueEndbossFemale from "./dialogue-final-boss-female.json"; -import dialogueMiscMale from "./dialogue-misc-male.json"; -import dialogueMiscFemale from "./dialogue-misc-female.json"; -import dialogueDoubleBattleMale from "./dialogue-double-battle-male.json"; -import dialogueDoubleBattleFemale from "./dialogue-double-battle-female.json"; +import dialogue from "./dialogue.json"; +import battleSpecDialogue from "./dialogue-final-boss.json"; +import miscDialogue from "./dialogue-misc.json"; +import doubleBattleDialogue from "./dialogue-double-battle.json"; import egg from "./egg.json"; import fightUiHandler from "./fight-ui-handler.json"; import filterBar from "./filter-bar.json"; @@ -76,14 +72,10 @@ export const itConfig = { commandUiHandler, common, achv, - PGMdialogue: dialogueMale, - PGFdialogue: dialogueFemale, - PGMbattleSpecDialogue: dialogueEndbossMale, - PGFbattleSpecDialogue: dialogueEndbossFemale, - PGMmiscDialogue: dialogueMiscMale, - PGFmiscDialogue: dialogueMiscFemale, - PGMdoubleBattleDialogue: dialogueDoubleBattleMale, - PGFdoubleBattleDialogue: dialogueDoubleBattleFemale, + dialogue, + battleSpecDialogue, + miscDialogue, + doubleBattleDialogue, egg, fightUiHandler, filterBar, diff --git a/src/locales/it/dialogue-double-battle-male.json b/src/locales/it/dialogue-double-battle-male.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/it/dialogue-double-battle-male.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/ca_ES/dialogue-misc-male.json b/src/locales/it/dialogue-double-battle.json similarity index 100% rename from src/locales/ca_ES/dialogue-misc-male.json rename to src/locales/it/dialogue-double-battle.json diff --git a/src/locales/it/dialogue-female.json b/src/locales/it/dialogue-female.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/it/dialogue-female.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/it/dialogue-final-boss-female.json b/src/locales/it/dialogue-final-boss-female.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/it/dialogue-final-boss-female.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/it/dialogue-final-boss-male.json b/src/locales/it/dialogue-final-boss-male.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/it/dialogue-final-boss-male.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/es/dialogue-double-battle-female.json b/src/locales/it/dialogue-final-boss.json similarity index 100% rename from src/locales/es/dialogue-double-battle-female.json rename to src/locales/it/dialogue-final-boss.json diff --git a/src/locales/it/dialogue-male.json b/src/locales/it/dialogue-male.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/it/dialogue-male.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/it/dialogue-misc-female.json b/src/locales/it/dialogue-misc-female.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/it/dialogue-misc-female.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/it/dialogue-misc-male.json b/src/locales/it/dialogue-misc-male.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/it/dialogue-misc-male.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/es/dialogue-double-battle-male.json b/src/locales/it/dialogue-misc.json similarity index 100% rename from src/locales/es/dialogue-double-battle-male.json rename to src/locales/it/dialogue-misc.json diff --git a/src/locales/es/dialogue-final-boss-female.json b/src/locales/it/dialogue.json similarity index 100% rename from src/locales/es/dialogue-final-boss-female.json rename to src/locales/it/dialogue.json diff --git a/src/locales/ja/config.ts b/src/locales/ja/config.ts index 5fbf0497d94..f8afd6eb167 100644 --- a/src/locales/ja/config.ts +++ b/src/locales/ja/config.ts @@ -15,14 +15,10 @@ import bgmName from "./bgm-name.json"; import biome from "./biome.json"; import challenges from "./challenges.json"; import commandUiHandler from "./command-ui-handler.json"; -import dialogueMale from "./dialogue-male.json"; -import dialogueFemale from "./dialogue-female.json"; -import dialogueEndbossMale from "./dialogue-final-boss-male.json"; -import dialogueEndbossFemale from "./dialogue-final-boss-female.json"; -import dialogueMiscMale from "./dialogue-misc-male.json"; -import dialogueMiscFemale from "./dialogue-misc-female.json"; -import dialogueDoubleBattleMale from "./dialogue-double-battle-male.json"; -import dialogueDoubleBattleFemale from "./dialogue-double-battle-female.json"; +import dialogue from "./dialogue.json"; +import battleSpecDialogue from "./dialogue-final-boss.json"; +import miscDialogue from "./dialogue-misc.json"; +import doubleBattleDialogue from "./dialogue-double-battle.json"; import egg from "./egg.json"; import fightUiHandler from "./fight-ui-handler.json"; import filterBar from "./filter-bar.json"; @@ -76,14 +72,10 @@ export const jaConfig = { commandUiHandler, common, achv, - PGMdialogue: dialogueMale, - PGFdialogue: dialogueFemale, - PGMbattleSpecDialogue: dialogueEndbossMale, - PGFbattleSpecDialogue: dialogueEndbossFemale, - PGMmiscDialogue: dialogueMiscMale, - PGFmiscDialogue: dialogueMiscFemale, - PGMdoubleBattleDialogue: dialogueDoubleBattleMale, - PGFdoubleBattleDialogue: dialogueDoubleBattleFemale, + dialogue, + battleSpecDialogue, + miscDialogue, + doubleBattleDialogue, egg, fightUiHandler, filterBar, diff --git a/src/locales/ja/dialogue-double-battle-female.json b/src/locales/ja/dialogue-double-battle-female.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/ja/dialogue-double-battle-female.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/ja/dialogue-double-battle-male.json b/src/locales/ja/dialogue-double-battle-male.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/ja/dialogue-double-battle-male.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/es/dialogue-final-boss-male.json b/src/locales/ja/dialogue-double-battle.json similarity index 100% rename from src/locales/es/dialogue-final-boss-male.json rename to src/locales/ja/dialogue-double-battle.json diff --git a/src/locales/ja/dialogue-female.json b/src/locales/ja/dialogue-female.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/ja/dialogue-female.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/ja/dialogue-final-boss-female.json b/src/locales/ja/dialogue-final-boss-female.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/ja/dialogue-final-boss-female.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/ja/dialogue-final-boss-male.json b/src/locales/ja/dialogue-final-boss-male.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/ja/dialogue-final-boss-male.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/es/dialogue-misc-female.json b/src/locales/ja/dialogue-final-boss.json similarity index 100% rename from src/locales/es/dialogue-misc-female.json rename to src/locales/ja/dialogue-final-boss.json diff --git a/src/locales/ja/dialogue-male.json b/src/locales/ja/dialogue-male.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/ja/dialogue-male.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/ja/dialogue-misc-female.json b/src/locales/ja/dialogue-misc-female.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/ja/dialogue-misc-female.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/ja/dialogue-misc-male.json b/src/locales/ja/dialogue-misc-male.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/ja/dialogue-misc-male.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/es/dialogue-misc-male.json b/src/locales/ja/dialogue-misc.json similarity index 100% rename from src/locales/es/dialogue-misc-male.json rename to src/locales/ja/dialogue-misc.json diff --git a/src/locales/it/dialogue-double-battle-female.json b/src/locales/ja/dialogue.json similarity index 100% rename from src/locales/it/dialogue-double-battle-female.json rename to src/locales/ja/dialogue.json diff --git a/src/locales/ko/config.ts b/src/locales/ko/config.ts index 392f2f72053..978cdc83002 100644 --- a/src/locales/ko/config.ts +++ b/src/locales/ko/config.ts @@ -15,14 +15,10 @@ import bgmName from "./bgm-name.json"; import biome from "./biome.json"; import challenges from "./challenges.json"; import commandUiHandler from "./command-ui-handler.json"; -import dialogueMale from "./dialogue-male.json"; -import dialogueFemale from "./dialogue-female.json"; -import dialogueEndbossMale from "./dialogue-final-boss-male.json"; -import dialogueEndbossFemale from "./dialogue-final-boss-female.json"; -import dialogueMiscMale from "./dialogue-misc-male.json"; -import dialogueMiscFemale from "./dialogue-misc-female.json"; -import dialogueDoubleBattleMale from "./dialogue-double-battle-male.json"; -import dialogueDoubleBattleFemale from "./dialogue-double-battle-female.json"; +import dialogue from "./dialogue.json"; +import battleSpecDialogue from "./dialogue-final-boss.json"; +import miscDialogue from "./dialogue-misc.json"; +import doubleBattleDialogue from "./dialogue-double-battle.json"; import egg from "./egg.json"; import fightUiHandler from "./fight-ui-handler.json"; import filterBar from "./filter-bar.json"; @@ -76,14 +72,10 @@ export const koConfig = { commandUiHandler, common, achv, - PGMdialogue: dialogueMale, - PGFdialogue: dialogueFemale, - PGMbattleSpecDialogue: dialogueEndbossMale, - PGFbattleSpecDialogue: dialogueEndbossFemale, - PGMmiscDialogue: dialogueMiscMale, - PGFmiscDialogue: dialogueMiscFemale, - PGMdoubleBattleDialogue: dialogueDoubleBattleMale, - PGFdoubleBattleDialogue: dialogueDoubleBattleFemale, + dialogue, + battleSpecDialogue, + miscDialogue, + doubleBattleDialogue, egg, fightUiHandler, filterBar, diff --git a/src/locales/ko/dialogue-double-battle-male.json b/src/locales/ko/dialogue-double-battle-male.json deleted file mode 100644 index 134b8ade71e..00000000000 --- a/src/locales/ko/dialogue-double-battle-male.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "blue_red_double": { - "encounter": { - "1": "그린: 어이 레드! 우리가 누군지 보여주자고!\n$레드: ...\n$그린: 태초마을의 힘을 보여주지!" - }, - "victory": { - "1": "그린: 훌륭한 승부였어!\n$레드: ..." - } - }, - "red_blue_double": { - "encounter": { - "1": "레드: ...!\n$그린: 이 녀석은 여전히 말이 없구나.\n$그린: 그렇지만 방심해선 안 돼! 그래도 챔피언이라고!" - }, - "victory": { - "1": "레드: ...!\n$그린: 다음에는 우리가 이길 테다!" - } - }, - "tate_liza_double": { - "encounter": { - "1": "풍: 에헤헤... 체육관 관장이\n$란: 두 명이나 있어서 놀랐지?\n$풍: 우리는 쌍둥이!\n$란: 굳이 말을 하지 않아도 서로가 무슨 생각을 하고 있는지\n$풍: 자동으로 머릿속에 떠오르니까\n$란: 호흡을 척척 맞출 수가 있지!" - }, - "victory": { - "1": "풍: 우, 우리들의\n$란: 팀워크가...!" - } - }, - "liza_tate_double": { - "encounter": { - "1": "란: 우후후... 체육관 관장이\n$풍: 두 명이나 있어서 놀랐어?\n$란: 우리는 쌍둥이!\n$풍: 완벽한 우리의 콤비네이션을\n$란: 과연 네가 깨뜨릴 수 있을까?" - }, - "victory": { - "1": "란: 우리들이 생각한 만큼\n$풍: 우리가 강하지 않았던 걸까?" - } - }, - "wallace_steven_double": { - "encounter": { - "1": "성호: 윤진! 우리 챔피언의 힘을 보여주자!\n$윤진: 호연의 힘을 보여주마!\n$성호: 간다!" - }, - "victory": { - "1": "성호: 훌륭한 승부였어!\n$윤진: 다음엔 우리가 이길 거다!" - } - }, - "steven_wallace_double": { - "encounter": { - "1": "성호: 너 혹시 희귀한 포켓몬 가지고 있니?\n$윤진: 성호야... 우리는 포켓몬을 자랑하러 온 게 아니라 승부하러 온 거야.\n$성호: 오... 그렇지... 그럼 간다!" - }, - "victory": { - "1": "성호: 이제 승부는 끝났으니 포켓몬을 자랑해 볼까!\n$윤진: 성호야..." - } - }, - "alder_iris_double": { - "encounter": { - "1": "노간주: 우리는 하나 지방 최강의 트레이너들이란다!\n$아이리스: 이렇게 강한 트레이너와 싸울 수 있어서 정말 기뻐~!!" - }, - "victory": { - "1": "노간주: 장하구나! 실로 견줄 자가 천하에 없도다!\n$아이리스: 다음 번엔 우리가 꼭 이길 거야~!" - } - }, - "iris_alder_double": { - "encounter": { - "1": "아이리스: 어서 와, 도전자! 내가 바로 하나 지방 챔피언이야~!\n$노간주: 아이리스야, 너무 흥분한 것 아니냐?" - }, - "victory": { - "1": "아이리스: 후와아아아아... 최선을 다했는데도... 우리가 져버렸네!\n$노간주: 하지만 우리의 패배를 발판 삼아 나아가리라!" - } - }, - "piers_marnie_double": { - "encounter": { - "1": "마리: 오빠, 스파이크마을의 힘을 보여주자!\n$두송: 우리가 어둠을 불러올 것이다!" - }, - "victory": { - "1": "마리: 네가 우리의 어둠에 빛을 불러왔구나!\n$두송: 여긴 너무 밝네..." - } - }, - "marnie_piers_double": { - "encounter": { - "1": "두송: 콘서트 즐길 준비 됐어?\n$마리: 오빠... 얘들은 노래가 아니라 승부를 하러 왔어..." - }, - "victory": { - "1": "두송: 훌륭한 콘서트였다!\n$마리: 오빠..." - } - } -} \ No newline at end of file diff --git a/src/locales/ko/dialogue-double-battle-female.json b/src/locales/ko/dialogue-double-battle.json similarity index 100% rename from src/locales/ko/dialogue-double-battle-female.json rename to src/locales/ko/dialogue-double-battle.json diff --git a/src/locales/ko/dialogue-female.json b/src/locales/ko/dialogue-female.json deleted file mode 100644 index ab29bd85b3c..00000000000 --- a/src/locales/ko/dialogue-female.json +++ /dev/null @@ -1,2691 +0,0 @@ -{ - "youngster": { - "encounter": { - "1": "거기 너! 나와 배틀 어때?", - "2": "넌 새내기 트레이너구나. 맞지?", - "3": "거기 너! 처음보는 얼굴인데? 나랑 배틀하자!", - "4": "방금 배틀에서 져서 새로운 포켓몬을 찾는 중이야.\n잠깐! 넌 약해보이는데? 어서 나와 배틀하자!", - "5": "우리 만난 적이 있었던가? 잘 기억은 안나지만 어쨌든 만나서 반가워!", - "6": "좋아! 시작하자!", - "7": "좋아! 내가 왔다! 내 힘을 보여주지!", - "8": "하하하… 내 포켓몬이 얼마나 멋진지 보여주겠어!", - "9": "인사할 시간도 없어. 준비가 되었다면 이리 와!", - "10": "긴장을 늦추지마. 그렇지 않으면 어린이에게 맞아 울지도 몰라.", - "11": "난 내 포켓몬들을 소중히 키웠어. 내 포켓몬에게 상처를 입히게 놔두지 않겠어!", - "12": "여기까지 잘 왔구나! 하지만 지금부턴 쉽지 않을거야.", - "13": "배틀은 끝나지 않아! 끝없는 배틀의 세계에 온 것을 환영해!" - }, - "victory": { - "1": "우와! 넌 강하구나!", - "2": "하? 난 기회가 없었어.", - "3": "내가 조금 더 큰 다음엔 널 찾아서 때리겠어!", - "4": "으.. 더이상 가지고 있는 포켓몬이 없어.", - "5": "말도 안돼… 안돼! 내가 또 지다니…", - "6": "안돼! 내가 지다니!", - "7": "우와! 정말 깜짝 놀랐어! 넌 정말 강하구나!", - "8": "이럴수가… 내 포켓몬과 난 최강인데… 어떻게…", - "9": "다음엔 지지 않을거야! 다음에 다시 배틀하자!", - "10": "쳇! 내가 어린애인게 보이지 않아?! 그렇게 최선을 다하는건 불공평해!", - "11": "네 포켓몬은 정말 굉장하구나! 나와 교환하자!", - "12": "내가 잠깐 정신이 나갔었나 봐. 내가 무슨 말을 하고 있었지?", - "13": "아하! 거기구나! 좋아! 넌 이미 이 세계에 머무를 곳이 있구나!" - } - }, - "lass": { - "encounter": { - "1": "나랑 배틀하자, 어때?", - "2": "넌 신입 트레이너구나. 나랑 배틀하자!", - "3": "너 거기 있었구나? 나랑 배틀할래?", - "4": "재밌는 포켓몬 배틀하자!", - "5": "내가 포켓몬을 어떻게 다뤄야하는지 보여줄게!", - "6": "진정한 배틀은 진지한 자세부터 시작이야! 준비됐어?", - "7": "젊음이 한순간이듯 배틀에서 네 기회도 단 한번만 주어질거야. 곧 넌 추억속으로 사라질거야.", - "8": "나에겐 살살해도 돼, 알았지? 그래도 난 진지하게 싸울거야!", - "9": "학교는 지겨워. 나는 할 일이 없어. 하암~ 난 그저 시간을 때우기 위해 싸울뿐이야." - }, - "victory": { - "1": "인상적이었어! 난 아직 배울게 많구나.", - "2": "내가 이렇게까지 크게 질 줄은 몰랐어…", - "3": "언젠가 우리가 다시 배틀할 수 있을 날을 기다릴게.", - "4": "놀라울 정도로 엄청 재미있었어! 넌 날 완전히 지치게 만들어버렸네…", - "5": "넌 나에게 진짜 교훈을 주었어! 넌 정말 대단해!", - "6": "세상에, 내가 지다니. 이거 정말 우울하지만… 넌 정말 멋있었어.", - "7": "난 이런 기억따윈 필요없어. 잊어버리겠어…", - "8": "거기 너! 살살하라고 했지! 그래도 넌 진지할때 정말 멋지구나!", - "9": "사실 배틀하는 것이 지루하던 참이야… 뭔가 새로운 것이 없을까?" - } - }, - "breeder": { - "encounter": { - "1": "순종적인 포켓몬, 이기적인 포켓몬… 포켓몬들은 각기 다른 성격을 가지고 있지.", - "2": "내 태도가 그렇게 좋진 않아도, 내 포켓몬들은 잘 키웠어.", - "3": "음, 넌 포켓몬들을 훈육하니? 너무 심하게 하는 것은 좋지 않다고." - }, - "victory": { - "1": "각 포켓몬의 성격을 이해하고 육성하는 건 중요해.", - "2": "사악한 나와는 달리 좋은 포켓몬들도 있지.", - "3": "과도한 칭찬은 사람과 포켓몬 모두에게 독이 될 수 있어." - }, - "defeat": { - "1": "배틀에서 지더라도 포켓몬에게 화를 내면 안돼.", - "2": "어때? 꽤 괜찮은 포켓몬이지? 난 무언가 기르는 게 꽤 잘 맞더라고.", - "3": "네가 포켓몬을 얼마나 사랑하는지와 관계없이, 그들이 잘못을 저지르면 바로잡아야 해." - } - }, - "breeder_female": { - "encounter": { - "1": "포켓몬은 절대 널 배신하지 않아. 네가 주는 사랑을 고스란히 되돌려 준다구.", - "2": "좋은 포켓몬을 키우는 팁을 알려줄까?", - "3": "난 아주 특별한 방법으로 아주 특별한 포켓몬들을 키웠지!" - }, - "victory": { - "1": "이런… 이렇게 될 리가 없는데. 내가 블렌딩을 잘못 썼나?", - "2": "내 포켓몬에게 이런 일이… 넌 네 포켓몬에게 뭘 먹이는 거야?", - "3": "내가 지는 건 그저 내가 시간을 때우고 있었다는 걸 알려주는 거지. 내 자존심엔 전혀 상처가 되지 않는다구." - }, - "defeat": { - "1": "이건 내 포켓몬들이 내 사랑을 받아들였다는 걸 입증하지.", - "2": "좋은 포켓몬을 키우는 진짜 비결은 좋은 포켓몬을 잡는 거야.", - "3": "포켓몬의 강함과 약함은 네가 어떻게 키우느냐에 따라 결정되지." - } - }, - "fisherman": { - "encounter": { - "1": "앗! 너 때문에 한 마리 놓쳤잖아! 어떻게 할 거야?", - "2": "저리 가! 네가 포켓몬들을 놀래키고 있잖아!", - "3": "네가 승리를 낚을 수 있을지 한번 보자고!" - }, - "victory": { - "1": "그냥 잊어버려.", - "2": "다음 번엔 내가 승리의 나팔을 울리고 있을거다!", - "3": "이번엔 내가 물살을 과소평가했나보군." - } - }, - "fisherman_female": { - "encounter": { - "1": "월척이다!", - "2": "낚시대는 던져졌고, 이젠 성공을 끌어올리는 일만 남았다!", - "3": "파도를 일으킬 준비는 끝났어!" - }, - "victory": { - "1": "더 튼튼한 바늘을 가지고 돌아올테다.", - "2": "다음번엔 꼭 성공을 낚을 거야!", - "3": "다시 돌아올 날을 기다리며 바늘을 다듬고 있을게!" - } - }, - "swimmer": { - "encounter": { - "1": "뛰어들 시간이다!", - "2": "승리의 파도 속으로!", - "3": "첨벙댈 준비는 끝났어!" - }, - "victory": { - "1": "패배에 젖어버렸어…", - "2": "패배의 파도였군.", - "3": "해변으로 돌아갈 시간이군." - } - }, - "backpacker": { - "encounter": { - "1": "게임 시작이야! 짐 단단히 싸놓으라구!", - "2": "네가 속도를 유지할 수 있을지 보자!", - "3": "각오 단단히 하라고!", - "4": "20년 동안 나 자신을 찾기 위해 헤매왔어… 근데 내가 어디 있지?" - }, - "victory": { - "1": "이번엔 걸려 넘어져 버렸네!", - "2": "내가 속도를 잃어버렸잖아!", - "3": "막다른 길이야!", - "4": "잠깐! 그래 거기, 혹시 내가 누군지 아나?" - } - }, - "ace_trainer": { - "encounter": { - "1": "너는 꽤 자신만만해 보이는구나.", - "2": "너의 포켓몬들… 나에게 보여줘…", - "3": "내가 엘리트 트레이너라서, 사람들은 내가 강하다고 생각해.", - "4": "엘리트 트레이너가 되려면 무엇이 필요한지 알고 있니?" - }, - "victory": { - "1": "그러네… 넌 좋은 포켓몬을 가졌구나…", - "2": "뭐? 말도 안 돼, 난 배틀 천재라구!", - "3": "그래도 역시, 네가 주인공이구나!", - "4": "좋아! 좋아! 너도 엘리트 트레이너가 될 수 있겠어!" - }, - "defeat": { - "1": "난 내 몸과 마음을 포켓몬 배틀에 바치고 있어!", - "2": "모두 예상된 일이었어… 이건 놀랄 일이 아니야…", - "3": "난 내가 강하게 압박하면 무너질 연약한 사람이라고 생각했어.", - "4": "난 강하고, 지지 않아. 그저 멋지게 이길 수 없었기 때문이야." - } - }, - "parasol_lady": { - "encounter": { - "1": "우아함과 침착함으로 승부하겠습니다!" - }, - "victory": { - "1": "그래도 제 우아함은 무너지지 않아요!" - } - }, - "twins": { - "encounter": { - "1": "각오해, 우리가 한 팀이 되면 두 배로 강해진다구!", - "2": "마음은 두 개지만 우리는 하나 – 네가 쌍둥이의 파워를 따라잡을 수 있는지 보겠어!", - "3": "두 배로 각오하는 게 좋을 거야. 우리가 곧 화나게 할 거거든!" - }, - "victory": { - "1": "비록 우리는 졌지만, 우리의 관계는 깨지지 않아!", - "2": "그래도 우리의 영혼은 오랫동안 흐려지지 않을 거야.", - "3": "더 강력한 듀오로 강해져서 돌아오겠어!" - }, - "defeat": { - "1": "우리 쌍둥이의 파워는 최고야!", - "2": "마음은 두 개지만 승리는 하나!", - "3": "미소도 두 배, 승리의 댄스도 두 배!" - } - }, - "cyclist": { - "encounter": { - "1": "내가 만든 먼지나 마실 준비하시지!", - "2": "준비하라구! 난 널 먼지 속에 놓고 올 거니까!", - "3": "전력을 다해야 할 거야, 네가 날 따라올 수 있는지 지켜보겠어!" - }, - "victory": { - "1": "바퀴가 움직이지 않더라도, 나의 페달은 그렇지 않아.", - "2": "이런, 따라잡혔어!", - "3": "승리로 가는 길에는 아직 만나지 못한 우여곡절이 많이 있구나." - } - }, - "black_belt": { - "encounter": { - "1": "네 용기가 대단하구나! 난 최고의 발차기 실력을 갖추고 있다구!", - "2": "오, 알겠어. 산산조각이 나고 싶구나? 아니면 샌드백이 되고 싶은 거야?" - }, - "victory": { - "1": "이런, 포켓몬이 배틀을 하는 동안 내 발차기는 전혀 도움이 되지 않았어.", - "2": "음… 어차피 내가 질거라면, 완전 엉망진창이 되길 바랬는데…" - } - }, - "battle_girl": { - "encounter": { - "1": "감동을 주려고 노력할 필요는 없어. 네가 질 수도 있으니까." - }, - "victory": { - "1": "작별인사는 어렵지만, 우리에겐 시간이 얼마 안 남았네…" - } - }, - "hiker": { - "encounter": { - "1": "중년으로 접어들면서 등산해왔던 산처럼 진중해졌습니다!", - "2": "살아있는 산같은… 큰 체격을 부모님이 물려주셨죠…" - }, - "victory": { - "1": "적어도 BMI에 대해서는 질 수 없습니다!", - "2": "부족해… 절대로 충분하지 않아. 저의 콜레스테롤이 부족합니다…" - } - }, - "ranger": { - "encounter": { - "1": "자연에 둘러싸여 있으면, 다른 건 중요하지 않게 느껴져.", - "2": "인생에서 자연을 빼고 살면, 가끔 갑자기 마음이 불안해지지." - }, - "victory": { - "1": "광활한 자연 앞에서는 내가 이기든 지든 상관없어…", - "2": "도시 생활의 답답한 느낌에 비하면 이런 것은 아주 사소한 일지." - }, - "defeat": { - "1": "내가 이겼네. 그러나 승리는 광대한 자연에 비하면 아무것도 아니야…", - "2": "내 마음속 불안함과 비교하면, 당신 기분은 그렇게 나쁘지 않을텐데…" - } - }, - "scientist": { - "encounter": { - "1": "제 연구는 이 세상을 평화와 기쁨으로 이끌 겁니다." - }, - "victory": { - "1": "전 천재니까… 당신 같은 사람에게 질 수 없는데…" - } - }, - "school_kid": { - "encounter": { - "1": "…헤헷. 계산과 분석에는 자신 있어.", - "2": "언젠가 체육관 관장이 되고 싶어서, 최대한 많은 경험을 쌓고 있어." - }, - "victory": { - "1": "으아아… 이번에는 아마 계산과 분석이 빗나간 것 같아…", - "2": "내가 보기엔, 어렵고 힘든 경험도 나름의 의미가 있는 것 같아." - } - }, - "artist": { - "encounter": { - "1": "예전엔 인기가 많았지만, 지금은 모두 사라졌다네." - }, - "victory": { - "1": "시대가 변하면, 가치관도 변하지. 난 그걸 너무 늦게 깨달았어." - } - }, - "guitarist": { - "encounter": { - "1": "패배의 리듬을 느낄 준비는 됐겠지? 내가 승리할 거니까!" - }, - "victory": { - "1": "지금은 조용하지만, 회복의 멜로디를 연주할 거야." - } - }, - "worker": { - "encounter": { - "1": "사람들이 저를 오해하는 게 신경 쓰여요. 전 생각보다 훨씬 깨끗하답니다." - }, - "victory": { - "1": "피부가 타는 게 싫어서, 일하는 동안엔 그늘에 머물고 싶어요." - } - }, - "worker_female": { - "encounter": { - "1": "사람들이 나를 오해하는 게 신경 쓰여.\n$나는 생각보다 훨씬 깨끗한데." - }, - "victory": { - "1": "피부가 타는 게 싫어서, 일하는 동안엔 그늘에 머물고 싶어." - }, - "defeat": { - "1": "생각처럼 몸이 잘 안따라주네." - } - }, - "worker_double": { - "encounter": { - "1": "너를 무너뜨릴 수 있다는 것을 보여줄게. 우리는 실전 경험이 있거든!" - }, - "victory": { - "1": "이상하네… 어떻게 이럴 수 있지… 힘으로 압도할 수 없다니." - } - }, - "hex_maniac": { - "encounter": { - "1": "평소에는 클래식 음악만 들었는데, 지면 뉴에이지도 좀 들어볼까!", - "2": "눈물을 흘릴 때마다 더 강해지는 것 같아." - }, - "victory": { - "1": "지금이 물병자리 시대의 시작일까?", - "2": "이제 나는 더 강해지겠지. 모든 원한과 함께 성장하겠어." - }, - "defeat": { - "1": "뉴에이지란 단순히 20세기 클래식 작곡가들을 말하는 거, 맞지?", - "2": "슬픔이나 좌절에 얽매이지 마. 넌 그 원한을 원동력으로 사용할 수 있어." - } - }, - "psychic": { - "encounter": { - "1": "안녕! 집중해!" - }, - "victory": { - "1": "에에에에엣!" - } - }, - "officer": { - "encounter": { - "1": "마음의 준비를 하시죠, 정의가 곧 실행될 거니까요!", - "2": "법을 지키고 정의를 위해 봉사할 준비가 되었습니다!" - }, - "victory": { - "1": "정의의 무게가 그 어느 때보다 무겁게 느껴집니다…", - "2": "패배의 그림자가 관할 경찰서에 남았습니다." - } - }, - "beauty": { - "encounter": { - "1": "나의 마지막 배틀… 이 승부를 그렇게 봐주셨으면 좋겠어요…" - }, - "victory": { - "1": "즐거웠어요… 언젠가 또 다른 마지막 승부를 하죠…" - } - }, - "baker": { - "encounter": { - "1": "패배의 맛을 볼 준비는 됐겠지!" - }, - "victory": { - "1": "실력이든 빵이든, 굽고 나면 단단해지는 법이라네." - } - }, - "biker": { - "encounter": { - "1": "힘차게 먼지 속으로 출발할 시간입니다!" - }, - "victory": { - "1": "다음 경주를 위해 준비해야겠습니다." - } - }, - "firebreather": { - "encounter": { - "1": "내 불꽃이 너를 삼킬 테니까!", - "2": "내 영혼은 불타고 있다. 얼마나 뜨겁게 타는지 보여주지!", - "3": "이리 올라와서 보도록!" - }, - "victory": { - "1": "하얗게 불태웠다………", - "2": "큭! 제법 뜨겁군!", - "3": "으윽! 코끝에 화상을 입었다!" - } - }, - "sailor": { - "encounter": { - "1": "친구여, 진다면 널빤지 행이야!", - "2": "덤벼! 내 선원으로서 자존심이 위태롭군!", - "3": "여어 거기! 뱃멀미 하나?" - }, - "victory": { - "1": "크윽! 꼬맹이한테 지다니!", - "2": "네 영혼이 나를 침몰시켰어!", - "3": "내가 뱃멀미가 나는 것 같군…" - } - }, - "archer": { - "encounter": { - "1": "더 나아가기 전에 우리 로켓단과 맞설 만한지 한 번 봅시다!", - "2": "당신의 실력이 예사롭지 않다는 소식을 들었습니다. 정말인지 한 번 보지요.", - "3": "…저는 로켓단의 간부 아폴로. 우리 조직의 적에게는 봐 주지 않습니다!" - }, - "victory": { - "1": "…이런 실수를 하다니!", - "2": "역시 지금의 저는 무리였군요…", - "3": "비, 비주기님, 용서해주십시오…제가 일개 트레이너한테 당하다니…" - } - }, - "ariana": { - "encounter": { - "1": "거기까지다~!! 너 같은 놈을 언제까지고 설치게 두었다가는 \n$로켓단의 프라이드는 상처 입고 상처 입어서 상처투성이가 돼 버린다고-!", - "2": "내가 하는 일이 옳은지 그른지는 상관 없어…\n$그저 비주기님을 믿고 따르는 것 뿐이니까-!", - "3": "네 여정은 여기서 끝이야. 내가 널 이길 테니까-!" - }, - "victory": { - "1": "어머, 강하군. 안타깝네.\n$네가 로켓단에 있었다면 간부가 될 수 있었을 텐데.", - "2": "사…산산조각났네…", - "3": "으이이이익! 온 힘을 다해서 싸웠는데…이래도 이길 수 없다니!" - } - }, - "proton": { - "encounter": { - "1": "뭐죠? 우리 일에 끼어든다면 자비를 바라지 마십시오!", - "2": "뭐죠? 나는 로켓단에서 제일 냉혹하다고 불리는 남자…\n$우리 일을 방해하도록 그냥 놔두지 않겠습니다!", - "3": "나는 로켓단의 간부 랜스. 당신의 참견도 여기까지입니다!" - }, - "victory": { - "1": "요새가 무너져내렸네요…", - "2": "나한테 이긴 건 결국 로켓단의 분노를 강하게 했을 뿐이예요…", - "3": "나는 졌지만, 결코 이 일을 잊지 않을 겁니다!" - } - }, - "petrel": { - "encounter": { - "1": "후후훗, 잘 왔구나. 오잉? 내가 누군지 알아? 비주기야.\n$비주기님이라고, 우-하하! …엥? 전혀 안 닮았다고?\n$비주기님으로는 안 보인다고? 제길- 열심히 연습했는데!", - "2": "나는 로켓단의 간부 람다. 우리 계획을 방해하는 건 용납할 수 없다!", - "3": "이 로켓단 간부 람다가 네놈 불청객을 처리해 주지!" - }, - "victory": { - "1": "조…좋아. 비주기님이 어디 계신지 알려주지.", - "2": "크으으… 이 내가 당해낼 수 없다니… 비주기님, 용서해주십시오…", - "3": "안돼, 이런다고 나한테 어쩔 수는 없어. 다른 사람들에게 알려야겠어…" - } - }, - "tabitha": { - "encounter": { - "1": "우효효효! 그래 당신 여기까지 왔구나! 그치만 늦었어요!", - "2": "우효효… 벌써 여기까지 왔네요? 우리가 당신을 과소평가했어요. 하지만 이제 시작입니다! \n$이 호걸님은 이제까지 본 조무래기들과는 차원이 다르답니다! 우물쭈물 시간을 끌지 않아요.\n$확실하게 보내주마! 우효효효효효효!!", - "3": "여기서 어른의 무서움을 제대로 알려주지! 받아랏-!" - }, - "victory": { - "1": "우효효! 이 호걸은 이겼을지 몰라도 마적님한테는 안 될 겁니다!\n$차라리 여기서 졌다면 무자비한 채찍질은 피했을텐데 말이죠!", - "2": "우효~! 이야 이건 예상 밖의 전개인데!?", - "3": "우효! 어떻게?! 이 호걸님이 이런 일개 트레이너에게…" - } - }, - "courtney": { - "encounter": { - "1": "…그 …네가 가진 …우리…마그마단이 원하는 것", - "2": "…………그럼 …………삭제하겠습니다", - "3": "……애널라이즈 ……하고 싶어 ……아하하하♪" - }, - "victory": { - "1": "……하아하아… ……으 …하아하아…", - "2": "………예상대로 ………예상외 ………너 …………타깃 록 ………했으니까\n$……엑스페리먼트 ……할 테니까 ………너를………계속………아핫…♪", - "3": "……예상외 ………… ……역시 ……너…재미있어…! ………아하하…♪" - } - }, - "shelly": { - "encounter": { - "1": "엥? 우리 아쿠아단의 일에 끼어들겠다고?\n$…좋아! 기본적인 예의도 모르는 애송이한테는 제대로 그 버릇을 고쳐줘야지…\n$겁먹고 도망쳐도 용서 따위 없을 줄 알아! 우하하하!", - "2": "아앙? 뭐야? 이 건방진 꼬맹이는…", - "3": "침착해. 조급해 하지 말라고… 금방 박살내 줄 테니까." - }, - "victory": { - "1": "아아아아앙!? 예상치 못하게 방해받았잖아! 어쩔 수 없네.\n$여기선 물러나야겠네. 그렇지만 네가 아쿠아단을 만나는 게 이게 마지막은 아닐 거야.\n$우리는 다른 계획도 있거든! 잊지 마!", - "2": "크윽…!? 너무 봐줬나…!", - "3": "…으윽 …싸우면서 더욱 실력이 좋아졌다고…!?\n$장래가 무서워지는 애송이네… …나와 내 포켓몬들은 더 이상 싸울 힘이 남아 있지 않아.\n$…가 …가서 아강님한테 아주 혼쭐이나 나 버려." - } - }, - "matt": { - "encounter": { - "1": "…그래서 말이지, 리더님이 시간이 나실 때까진 내가 상대해 주마!", - "2": "후우하앗!! 맥시멈!! 끓어어!! 오르기 시작했다아아앗!!!!! 그래! 그래! 그래애앳!!! 힘이 다할 때까지 해보자아아!!!", - "3": "UPAAAAA!!! 짓뭉개주마아아아아!!" - }, - "victory": { - "1": "흐~하하하핫!!! 졌지만 즐거운 승부였다!", - "2": "확 확 느껴지는데! 네놈들의 강함이 말이야!\n$제대로 붙었다고 하기엔 조금 모자라지만 이제 타임오버 같네…", - "3": "오우오웃! 흥분되는 패배로다!" - } - }, - "mars": { - "encounter": { - "1": "난 갤럭시단 간부인 마스! 강하고 아름답지!", - "2": "갤럭시단의 미래에 대한 비전은 흔들림 없지. 방해한다면 무자비하게 짓밟아 주마!", - "3": "두렵지 않아? 넌 그래야만 할 걸!" - }, - "victory": { - "1": "갤럭시단의 간부로서… 이런 일은 있을 수 없어!!", - "2": "넌 능력 있구나. 그건 인정하지.", - "3": "아-이런 이런! 졌잖아!" - } - }, - "jupiter": { - "encounter": { - "1": "무슨 볼일이라도? 좋아! 갤럭시단 간부인 나 주피터가 상대해주지.", - "2": "발버둥쳐 봐야 소용 없어. 갤럭시단이 승리할 거니까!", - "3": "너 떨고 있네… 무서운 거지?" - }, - "victory": { - "1": "일개 트레이너에게 지다니 방심이란 무섭구나.", - "2": "다음에는 내가 울려 주고 말겠어!", - "3": "흥! 강하네. 하지만 보스는 당할 수 없어" - } - }, - "saturn": { - "encounter": { - "1": "나는 갤럭시단의 간부 새턴. 모든 것은 모두를 위해 그리고 갤럭시단을 위해!", - "2": "갤럭시단을 방해한다면 일말의 가능성도 모두 제거한다!", - "3": "여기까지 왔으니 갤럭시단 나름의 접대를 해 주지." - }, - "victory": { - "1": "이럴 수가… 너한테 졌다고?!", - "2": "…역시 강해! 갤럭시단에 맞설 만하군.", - "3": "강하다! 하지만 불쌍하군." - } - }, - "zinzolin": { - "encounter": { - "1": "너는 플라스마단에게 있어 불안요소가 될 것이다. 여기서 제거하겠다!", - "2": "이런 이런… 내가 이런 곳에서 싸워야만 하다니!", - "3": "여기까지 오다니 대단한 트레이너군. 그러나 여기가 끝이다." - }, - "victory": { - "1": "게치스님… 제가 실패했습니다…", - "2": "그건 그렇고 힘들구먼. 나는 떨고 있다. 괴롭지만 살아 있다. 그것이야말로 살아 있다는 실감!", - "3": "흐음. 의외로 똑똑한 트레이너군. 하지만 생각만큼은 아니야." - } - }, - "rood": { - "encounter": { - "1": "너는 플라스마단에 위협이 되는구나. 너라는 트레이너가 어떤 인물인지 승부로 알아봐야겠다.", - "2": "오호! 싸늘하구먼… 이런 곳에서 싸울 줄이야!", - "3": "너는 여기까지 온 것으로 보니 뛰어난 트레이너구나. 그렇다만 이젠 끝이다." - }, - "victory": { - "1": "게치스님… 임무를 실패했습니다…", - "2": "나는 떨고 있다. 나는 괴롭지만 이겨냈다.", - "3": "음… 너는 재능이 있는 트레이너구나. 하지만 충분하지는 않다." - } - }, - "xerosic": { - "encounter": { - "1": "오오- 네 소문은 많이 들었다. 자, 이리 와 보거라!", - "2": "너 강하구나. 에너지를 얼마나 갖고 있지?", - "3": "기다리고 있었어! 너를 조사하겠다. 자 시작한다!" - }, - "victory": { - "1": "강하구나, 너는. 응, 정말 강해, 너는.", - "2": "뭣이라! 넌 굉장하군! 너의 포켓몬도 대단하군!", - "3": "굉장하구나 너! 아주 굉장해! 나는 너를 인정하겠다!" - } - }, - "bryony": { - "encounter": { - "1": "나는 바라. 당신과 싸울 수 있어 기쁘군요. 한 번 보여주시죠.", - "2": "인상적이군요… 보기보다 강해요. 에너지가 어디까지 뻗어나가는지 봅시다.", - "3": "도착할 줄 알았습니다. 시작할까요?" - }, - "victory": { - "1": "어라? 이길 확률은 어디까지나 확률. 절대적이진 않네.", - "2": "확률을 무시하는 트레이너, 네 파워의 원천은 뭐지?", - "3": "놀랍군! 칭찬할 만 해." - } - }, - "rocket_grunt": { - "encounter": { - "1": "트러블에 대비하도록!", - "2": "우리는 위업을 이루는 중이라고! 저리 비켜, 꼬마 녀석!", - "3": "포켓몬을 넘기지 않겠다면, 로켓단이 징벌하겠다!", - "4": "로켓단의 진정한 공포를 보여주마!", - "5": "헤이, 키드! 미는 로켓단의 멤버라구요!" - }, - "victory": { - "1": "로켓단은 다시 떠오를 거니까!", - "2": "이런! 엘리베이터 키를 떨어뜨렸어!", - "3": "실패했군!", - "4": "내 동료들이 가만히 있지 않을 거다!", - "5": "유 쎄이 왓? 로켓단이 바이바이? 유한테 브레이킹?" - } - }, - "magma_grunt": { - "encounter": { - "1": " 마그마단을 방해한다면, 자비는 없닷!", - "2": "계획을 방해하지 않는 게 좋을 거다! 우리는 세상을 더 나은 곳으로 만들고 있거든!", - "3": "방해꾼 녀석! 마그단은 너 같은 꼬마들을 상대할 시간이 없어!", - "4": "마시멜로를 갖고 있었으면 좋겠네. 왜냐하면… 곧 뜨거워질 테니까!", - "5": "화산의 힘을 사용할 거야! 그건 정말로… 폭발적일 테니까! 알아들었지? 헤헷!" - }, - "victory": { - "1": "하? 내가 졌어?!", - "2": "내가 지다니! 이것 때문에 점심도 거르고 왔는데.", - "3": "말도 안돼! 넌 아직 어린애잖아!", - "4": "으윽… 당장 은신처로 숨을 걸 그랬나…", - "5": "네가 이겼어… 이것 때문에 보스가, 내 월급 깎으려나?" - } - }, - "aqua_grunt": { - "encounter": { - "1": "아쿠아단을 넘본 사람에게는 자비는 없다, 꼬마도 마찬가지야!", - "2": "쯧… 아쿠아단에 참견하다니 오지랖이 넓군!", - "3": "흠뻑 물을 뒤집어쓰게 될 거다! 내 물 포켓몬의 공격 뿐만이 아니야!", - "4": "우리, 아쿠아단은, 모두를 위해 존재한다!", - "5": "내가 떠밀… 아니, 파도에 떠내려갈 준비나 하라고! 내 포켓몬이 그렇게 만들 테니까 " - }, - "victory": { - "1": "말도 안 돼!", - "2": "크윽, 참견쟁이 꼬마에게 당하다니!", - "3": "내가 졌다고?! 헤엄쳐서 은신처로 돌아가야겠군…", - "4": "이런, 완전 망했군… 보스가 화를 내실텐데…", - "5": "네가 이겼어… 이것 때문에 보스가, 나를 판자 위로 보내는 거 아냐?" - } - }, - "galactic_grunt": { - "encounter": { - "1": "갤럭시단을 방해하지 마!", - "2": "기술의 힘과 우리가 꿈꾸는 미래를 목격하라!", - "3": "갤럭시단으로서, 우리를 방해하는 자는 누구든 제거하겠다!", - "4": "질 준비나 하라고!", - "5": "우주에서 싸울 준비는 됐겠지!" - }, - "victory": { - "1": "사격 중지…… ", - "2": "이런 좌절이라도, 우리의 큰 계획 앞엔 아무 의미도 못 돼.", - "3": "우리의 계획은 이번 패배보다 크거든.", - "4": "어떻게 한 거지?!", - "5": "메모해야겠군. 최대한 포켓몬 배틀을 ASAP으로 연습할 것." - } - }, - "plasma_grunt": { - "encounter": { - "1": "다른 생각을 가진사람들은 용납하지 않겠다!", - "2": "내가 이기면, 네 포켓몬들을 놓아주도록 해!", - "3": "플라즈마단을 방해한다면, 내가 처리해주지!", - "4": "플라즈마단은 너 같은 이기적인 인간에게서 포켓몬을 해방할 것이다!", - "5": "우리 스타일링은 정말 대단하지… 배틀 실력은 어떻냐고? 곧 알게 될거야." - }, - "victory": { - "1": "플라-스마-!", - "2": "내가 지다니…", - "3": "…포켓몬이 너무 약해, 더 좋은 포켓몬을 훔치러 가야겠군!", - "4": "훌륭한 계획은 항상 방해를 받는다니깐.", - "5": "이건 나빠… 나빠나빠나빠나빠나빠! 플라스마단에 나빠! 줄여서, 플라나빠!" - } - }, - "flare_grunt": { - "encounter": { - "1": "네 포켓몬, 플레어단의 우아함에 상대가 되지 않는다고.", - "2": "선글라스를 가져왔길 바랄게. 곧 밝게 빛날 테니까!", - "3": "플레어단이 세상의 불완전함을 정화할 거야!", - "4": "플레어단의 광채를 마주칠 준비는 됐겠지!", - "5": "패션이 우리한텐 가장 중요하다고!" - }, - "victory": { - "1": "미래가 밝아 보이질 않네.", - "2": "생각했던 것보다 전투에는 많은 요소가 있는 것 같군. 다시 계획을 짜야겠어.", - "3": "아앗?! 내가 졌어?!", - "4": "패배 속에서도, 플레어단의 우아함은 빛나고 있다고.", - "5": "네가 이긴 것 같네. 그렇지만 졌어도, 난 우아하게 퇴장할 거니까!" - } - }, - "aether_grunt": { - "encounter": { - "1": "죽을 각오로 퇴치하겠습니다!", - "2": "소중한 연구라고! 애라도 가만두지 않겠어!", - "3": "어떤 트레이너든 물리치라고 들었다고!", - "4": "에테르파라다이스의 파워를 보여드리겠습니다!", - "5": "에테르파라다이스 중심의 어둠을 알아내다니. 이제 사라져 주셔야겠습니다!" - }, - "victory": { - "1": "흥! 실력이 대단하시군요.", - "2": "이게 뭐하는 상황이지? 무슨 결과냐고!", - "3": "이런! 넌 너무 강해서 물리칠 방법도 없다고!", - "4": "으음… 제가 진 것처럼 보이네요.", - "5": "이 느낌을 한마디로 하면. 게에이~힝!!" - } - }, - "faba": { - "encounter": { - "1": "나, 에테르재단의 자우보! 꼬맹이 녀석에게 현실을 보여주겠어요!", - "2": "에테르파라다이스 마지막 보루라고 불리는, 이 자우보에게 애를 상대하라고요?", - "3": "에테르재단의 지부장이라면 세계에 단 한 명… 이 자우보뿐입니다." - }, - "victory": { - "1": "게에이~힝!!", - "2": "뭐 뭐뭐뭐 뭐가 어떻게 된 거죠? 내가 애를 상대로…", - "3": "이래서 애는… 좋아할 수가 없어요." - } - }, - "skull_grunt": { - "encounter": { - "1": "나쁜 짓 안해-그냥 사는 게 힘들 뿐스컬!", - "2": "껌 하나 드실? 이게 우리가 인사하는 방식YO! 만나서 반갑스컬!", - "3": "우린 그냥 다른 사람의 포켓몬에 관심이 많을 뿐임다!", - "4": "어이 어이! 잘난 체하는 녀석한테 무시당하고 있잖스컬!!", - "5": "우리는 리프리젠트 땡땡이 스컬-! 집세는 못 내겠지만-! 정말 즐거웠지만, 청춘을 날려YO!" - }, - "victory": { - "1": "엥? 벌써 끝났슴까?", - "2": "미는 엑시트! 유는 피쓰풀!", - "3": "꼬마 녀석의 이상한 포켓몬엔 관심 없어!", - "4": "뭐야-?! 너무 강해서 뼈도 못 추리겠어!", - "5": "우리가 포켓몬보다 아래야!? 소중히 대해주면 안 돼? 으응!?" - } - }, - "plumeria": { - "encounter": { - "1": "…아무것도 느껴지지 않는 평~범한 애로 보이는데!", - "2": "워낙 애들 상대로 우물쭈물 하길래 오래 걸릴 줄 알았지…", - "3": "누구라도 스컬단 또 방해하면, 정말로 혼내줄 테니까!" - }, - "victory": { - "1": "흥! 대단하군.", - "2": "흐음, 너 참 대단하군. 애들을 상대로 질질 끈 이유가 이해될 정도로 강해.", - "3": "흠. 이 손실은 그냥 안고 가야겠어." - } - }, - "macro_grunt": { - "encounter": { - "1": "당신은 여기서 끝날 것 같네요!", - "2": "당신은 트레이너 맞죠? 하지만 우리를 방해하는 건 용납 못 합니다!", - "3": "매크로코스모스 생명입니다! 가입하신 실비보험은 있으신가요?" - }, - "victory": { - "1": "순순히 물러나는 것 말고는 선택지가 없군요.", - "2": "용돈을 뺏기다니… 패배는 적자로 이어지는구나…", - "3": "매크로코스모스 생명에 관한 일이라면 누구에게도 지지 않을 텐데…" - } - }, - "oleana": { - "encounter": { - "1": "로즈님을 방해하는 것은 절대로 용서할 수 없으니까요!", - "2": "저의 지시를 따르는 특별한 스태프들을 아무렇지도 않게 쓰러뜨리다니. …더 기대되는 것도 없네요.", - "3": "로즈님을 위해서라면! 질 수 없습니다!" - }, - "victory": { - "1": "아아… 이기지 못하다니… 올리브… 넌 정말 구제 불능이구나.", - "2": "하아아…! 이런 실수를 하다니… 승리를 거듭한 트레이너의 실력을 너무 얕잡아봤던 모양이네요.", - "3": "아아… 이 올리브님 조금 지쳤어…" - } - }, - "rocket_boss_giovanni_1": { - "encounter": { - "1": "그래서! 여기까지 오다니, 감탄이 절로 나오는군!" - }, - "victory": { - "1": "하! 이럴 순 없어!" - }, - "defeat": { - "1": "자신의 힘을 측정하지 못하는 걸 보아하니, 아직 별볼일 없는 꼬맹이로군. 내 말을 명심하도록. " - } - }, - "rocket_boss_giovanni_2": { - "encounter": { - "1": "옛 친구들이 나를 필요로 하고 있다…… 그런데도 방해하겠다는 건가?" - }, - "victory": { - "1": "어떻게 이런 일이…?\n로켓단의 소중한 꿈이 환상에 불과해졌군…… " - }, - "defeat": { - "1": "로켓단은 다시 태어난다, 그리고 세상을 지배할 것이다!" - } - }, - "magma_boss_maxie_1": { - "encounter": { - "1": "내 손으로 널 파묻어주지. 영광으로 알도록!" - }, - "victory": { - "1": "윽! 꽤… 제법이군…\n내가 뒤쳐졌지만, 겨우 한 끝이다…" - }, - "defeat": { - "1": "마그마단이 앞선다!" - } - }, - "magma_boss_maxie_2": { - "encounter": { - "1": "나와 내 목표 사이에 남은 마지막 장애물이로군.\n최후의 공격에 대비하도록! 후하하하!" - }, - "victory": { - "1": "이런… 이럴 수는… 없어… " - }, - "defeat": { - "1": "이제부터… 인류의 이상을 위해 대지를 더 늘려가겠다." - } - }, - "aqua_boss_archie_1": { - "encounter": { - "1": "내가 아쿠아단의 리더다, 유감스럽게도 넌 이게 끝이겠군." - }, - "victory": { - "1": "다시 어딘가에서 만나도록하지. 그 얼굴 기억해둘테니까." - }, - "defeat": { - "1": "좋군! 이제 아쿠아단을 막아설 것은 없다!" - } - }, - "aqua_boss_archie_2": { - "encounter": { - "1": "이 날이 오는 것을 너무 오래 기다렸군.\n이것이 우리의 진정한 힘이다!" - }, - "victory": { - "1": "내가 생각했던 것들이…… " - }, - "defeat": { - "1": "이 세상을 원래의 순수한 상태로 되돌리겠다, 그 모든 것을!!" - } - }, - "galactic_boss_cyrus_1": { - "encounter": { - "1": "넌 공허한 감정에 이끌려 이곳에 오게된 것이다.\n마음에 귀를 기울인 것을 후회하게 해주지!" - }, - "victory": { - "1": "흥미롭군. 게다가 꽤 궁금해졌어." - }, - "defeat": { - "1": "새로운 세상을 만들 것이다…" - } - }, - "galactic_boss_cyrus_2": { - "encounter": { - "1": "이런 우리가 다시 만나게 됐군. 우리의 운명이 얽히게 된 것 같군.\n 하지만 지금 여기서, 나는 마침내 그 끈을 끊을 것이다!" - }, - "victory": { - "1": "어떻게? 어째서? 어떻게?!" - }, - "defeat": { - "1": "작별이로군." - } - }, - "plasma_boss_ghetsis_1": { - "encounter": { - "1": "누구도 저를 막을 수 없습니다! 무슨 짓을 하더라도!" - }, - "victory": { - "1": "…어떻게 된 거지? 이 몸은 플라스마단을 만들어낸 완벽한 남자라고! " - }, - "defeat": { - "1": "세계를 바꿀 완전한 지배자가 아니었단 말인가!? …흐하하!" - } - }, - "plasma_boss_ghetsis_2": { - "encounter": { - "1": "오시죠! 당신이 모든 희망을 잃는 순간의 얼굴을 보겠습니다!" - }, - "victory": { - "1": "내 계산이… 틀려! 내 치밀한 계획이 틀리다니! 세상은 내 것이어야 하는데!" - }, - "defeat": { - "1": "큐레무! 합체해라!" - } - }, - "flare_boss_lysandre_1": { - "encounter": { - "1": "나를 막겠다고? 배틀로 증명하도록." - }, - "victory": { - "1": "네가 나를 여기서 막았군. 하지만 잠시 기다리도록. " - }, - "defeat": { - "1": "포켓몬은… 더 이상 존재하지 않는다." - } - }, - "flare_boss_lysandre_2": { - "encounter": { - "1": "너의 미래와 나의 미래… 어느 쪽이 옳은지 서로의 포켓몬에게 묻도록 하지." - }, - "victory": { - "1": "크윽!" - }, - "defeat": { - "1": "우매한 자들이 이 아름다운 세상을 계속 더럽히고 있군." - } - }, - "aether_boss_lusamine_1": { - "encounter": { - "1": "비스트가 놀라잖아! …우선은 너를 조용히 시켜야겠어." - }, - "victory": { - "1": "……너무해!" - }, - "defeat": { - "1": "흐음…" - } - }, - "aether_boss_lusamine_2": { - "encounter": { - "1": "그렇게 말했는데도! …왜 이리 끈질긴 거야! 정말 진절머리가 나.\n$더 말해봐야 소용 없겠지… 텅비드의 힘으로 네가 여기까지 온 걸 후회하게 해줄게!" - }, - "victory": { - "1": "………아아아웃!!" - }, - "defeat": { - "1": "나는 비스트만 있으면 돼! 너희가 어떻게 되든 상관없어!" - } - }, - "skull_boss_guzma_1": { - "encounter": { - "1": "박살 내고 박살 내도 절대 봐주지 않아…\n$모두가 싫어하는 구즈마가 여기 있다!" - }, - "victory": { - "1": "쯧. 너는 내가 박살 내주겠어!" - }, - "defeat": { - "1": "겨우 그걸 위해서 일부러 온 거야?" - } - }, - "skull_boss_guzma_2": { - "encounter": { - "1": "누구든지 박살 낸다!\n$그것이 구즈마님의 아이덴티티!!" - }, - "victory": { - "1": "구즈마!!! 뭐 하고 있는 거야?!" - }, - "defeat": { - "1": "너희들 바보군!" - } - }, - "macro_boss_rose_1": { - "encounter": { - "1": "내게는 모든 사람이 영원히 마음을 놓고 발전할 수 있도록…\n$무한한 에너지를 가져다 줘야 한다는 신념과 사명이 있단다!" - }, - "victory": { - "1": "아직 무르군… 트레이너.\n$역사는 바뀔 것이네! 이 나의 손에 의해서 말이지" - }, - "defeat": { - "1": "자네는 여전히 깨닫지 못했군!" - } - }, - "macro_boss_rose_2": { - "encounter": { - "1": "나는 가라르를 포함한— 전 세계의 에너지 문제를 해결하기 위해 최선을 다하고 있어.\n$매크로코스모스를 성공으로 이끈 경험과 성과는 내 방식이 효율적이라는 증거란다.\n$생각을 바꿀 마음은 없어. 내가 지더라도." - }, - "victory": { - "1": "포켓몬 승부는 좋군! 오랜만에 싸워보니 만족스러워…\n$제법 괜찮군. 패배를 인정하지." - }, - "defeat": { - "1": "너희가 보기에는 내가 끔찍한 짓을 벌이고 있는 것처럼 보이겠지? 조금도 이해가 가지 않을 거야.\n$하지만 난 가라르지방의 영원한 번영을 위해서 무한한 에너지를 가져다줘야 해." - } - }, - "brock": { - "encounter": { - "1": "내 전문인 바위 타입 포켓몬으로 널 쓰러뜨려줄게! 덤벼!", - "2": "바위같은 의지로 널 압도하겠어!", - "3": "내 포켓몬의 진정한 힘을 보여줄게!" - }, - "victory": { - "1": "네 포켓몬의 힘이 바위같은 내 방어를 이겼어!", - "2": "세상은 넓구나! 너랑 겨뤄볼 수 있어서 즐거웠어.", - "3": "아마도 난 포켓몬 브리더의 꿈을 이루러 가야할지도…" - }, - "defeat": { - "1": "최선의 공격은 적절한 방어지!\n그게 내 방식이야!", - "2": "다음에 나한테 더 배우러와. 바위타입과 어떻게 싸워야하는지 알려주지!", - "3": "아, 여러 지역을 돌아다니며 여행한 보람이 있군!" - } - }, - "misty": { - "encounter": { - "1": "내 방침은 물타입 포켓몬으로 공격하고 공격하고 또 공격하는 거!", - "2": "아하핫, 너한테 내 물타입 포켓몬들의 힘을 보여줄게!", - "3": "내 꿈은 여행을 다니며 강한 트레이너들과 배틀하는 거였어…\n네가 그 충분한 도전자가 될 수 있는지 볼까?" - }, - "victory": { - "1": "너 정말로 강하구나… 그 실력 인정하도록 할게…", - "2": "으으… 너 그냥 운이 좋았던거야, 그치?!", - "3": "우와, 너 대단해! 날 이기다니 믿을 수 없어!" - }, - "defeat": { - "1": "최강인 최이슬! 너한테 좀 심했나?", - "2": "내 포켓몬들의 우아한 수영 테크닉을 봤길 바랄게!", - "3": "내 프라이드와 즐거움엔 네 포켓몬들은 상대가 안 돼. " - } - }, - "lt_surge": { - "encounter": { - "1": "마이 전기 포켓몬은 전쟁에서 미를 구했어요! 하우를 유에게 보여줄게요!", - "2": "헤이! 쇼크로 유를 항복시키겠어요!", - "3": "배틀에서 마이 에너미에게 했던 것처럼 유에게도 펀치를 날리겠어요!" - }, - "victory": { - "1": "와우, 키드! 유어 팀은 진짜 대단하군요!", - "2": "으흐흑, 유는 스트롱하네요! 마이 전기 트릭도 유에겐 로스트입니다.", - "3": "앱솔루트하고 쇼킹한 패배였어요!" - }, - "defeat": { - "1": "오우 예! 전기 타입 포켓몬이라면, 미가 월드에서 넘버 원이에요!", - "2": "하하하! 키드, 이것이 찌릿찌릿 일렉트릭 배틀입니다!", - "3": "포켓몬 배틀은 전쟁, 앤드 나는 유에게 직접 전투를 보여줬습니다!" - } - }, - "erika": { - "encounter": { - "1": "아, 오늘은 날씨가 좋네요…\n음, 배틀일까요? 그럼 더 좋죠.", - "2": "제 포켓몬들의 배틀 실력은 제 꽃꽂이 실력만큼 대단하답니다.", - "3": "아, 제 포켓몬의 달콤한 향기가 저를 다시 잠들게 하지 않았으면 좋겠는데……", - "4": "정원에서 꽃을 보면 마음이 편안해져요.”." - }, - "victory": { - "1": "앗! 제 패배를 인정합니다.", - "2": "방금 경기 정말 달콤했어요.", - "3": "아, 제가 진 것 같네요…", - "4": "앗, 맙소사." - }, - "defeat": { - "1": "저 조금 걱정했어요. 너무 졸려서…", - "2": "어머, 제 풀 포켓몬이 당신을 압도한 것 같네요.", - "3": "이 배틀 정말로 편안한 경험이었네요.", - "4": "어머… 이게 끝인가요?" - } - }, - "janine": { - "encounter": { - "1": "난 독을 사용하는 인술을 갈고 닦고 있어.\n오늘 수련에서는 너랑 대련할거야!", - "2": "아버지는 내가 잘해낼 수 있다고 신뢰하셔.\n 그게 맞는다는 걸 증명할게!", - "3": "내 인술은 아버지한테 뒤처지지 않아! 따라올 수 있겠어? " - }, - "victory": { - "1": "역시 아직도, 난 더 수련이 필요해… 납득했어.", - "2": "네 배틀 기술이 내 인술보다 한 수위야.", - "3": "더 스스로 갈고 닦아서, 내 인술을 향상 시키겠어." - }, - "defeat": { - "1": "후후후… 독이 네 기력을 모두 가져가버렸네.", - "2": "하핫, 너 내 인술에 맞설 기회를 잡지 못했구나!", - "3": "나를 향한 아버지의 신뢰, 틀리지 않았다는 걸 증명해냈어." - } - }, - "sabrina": { - "encounter": { - "1": "내 초능력을 통해서, 너의 도착은 예상하고 있었어!", - "2": "싸우는 건 좋아하지 않지만 네가 원한다면… 나의 힘을 보여줄게!", - "3": "네게서 큰 염원이 느껴져. 그것이 근거 없는 것이 아닌지 지켜보겠어." - }, - "victory": { - "1": "너의 힘은… 내가 예견했던 것보다 훨씬 뛰어나…", - "2": "나는 너의 힘을 정확하게 예측하지 못했어.", - "3": "나 엄청난 초능력을 가지고도, 너처럼 강한 사람을 느끼지 못했네." - }, - "defeat": { - "1": "이 승리는… 내가 환상에서 예견한 그대로네!", - "2": "아마도 그건, 내가 깊이 느꼈던 또 다른 염원이었을거야…", - "3": "무모하게 배틀에 임하기 전에 능력을 갈고닦도록.\n넌 미래가 어떻게 될지 예지할 수 없으니까…" - } - }, - "blaine": { - "encounter": { - "1": "우오오~옷! 화상치료제는 잘 준비했는가!", - "2": "나의 포켓몬은 모든 것을 불꽃으로 태워버리는 강한 녀석들뿐이다!", - "3": "불꽃과 함께할 준비는 됐는가!" - }, - "victory": { - "1": "아무것도 남지 않고 불타버렸다! 재조차 남지 않았어!", - "2": "내가 불을 너무 세게 피우지 않았나?", - "3": "불태웠다… 하지만 이건 불꽃을 향상시키려는 내 동기를 더욱 뜨겁게 만드는군!" - }, - "defeat": { - "1": "나의 타오르는 불길은 진압할 수 없다!", - "2": "내 포켓몬은 이번 승리의 열기로 더욱 강해졌다!", - "3": "하! 내 열정이 네 것보다 더 밝게 타오르고 있군!" - } - }, - "giovanni": { - "encounter": { - "1": "나, 로켓단의 리더가, 고통의 세계를 느끼게 해주마!", - "2": "옛 동료들과 다시 만나기 전, 이곳에서의 훈련은 매우 중요하겠군.", - "3": "너는 곧 경험하게 될 실패에 대한 준비가 되어 있지 않군!" - }, - "victory": { - "1": "하! 내가 졌다고?! 더 이상 할말이 없군!", - "2": "흐음… 넌 내가 이루고자 하는 것을 결코 이해할 수 없을 거다.", - "3": "이 패배는 피할 수 없는 것을 단지 지연시킬 뿐.\n때가 되면 잿더미에서 로켓단을 일으켜 세울 것이다." - }, - "defeat": { - "1": "자신의 힘을 스스로 잴수 없다는 것은 네가 아직 꼬맹이라는 것을 보여준다고 할 수 있지.", - "2": "다시는 나를 방해하지 말도록.", - "3": "나에게 도전하는 것이 얼마나 어리석은 짓인지 이해했으면 좋겠군." - } - }, - "roxanne": { - "encounter": { - "1": "당신이 어떻게 싸우는지 보여주시겠어요?", - "2": "당신은 여러 트레이너와 싸우면서 많은 것을 배울 수 있을거예요.", - "3": "아, 전략짜는 거 들켰네요.\n배틀할까요?" - }, - "victory": { - "1": "아, 제가 진 것 같네요.\n승복하겠습니다.", - "2": "전 아직도 포켓몬 배틀에 대해서 한참 더 배워야할 것 같네요.", - "3": "오늘 여기서 배운 것들을 마음에 담아둬야겠어요." - }, - "defeat": { - "1": "전 방금 승부에서 많은 것을 배웠습니다.\n당신도 그랬길 바래요.", - "2": "다시 붙을 날이 기대되네요.\n당신이 여기서 배운 걸 활용할 수 있길 바랍니다.", - "3": "여태까지 공부해온 것 덕분에 이겼네요." - } - }, - "brawly": { - "encounter": { - "1": "오, 도전자잖아!\n어디 한 번 볼까!", - "2": "넌 큰 파란을 일으킬 것 같군.\n승부다!", - "3": "폭풍을 일으킬 시간이야!\n가자!" - }, - "victory": { - "1": "우와, 너 날 씻겨버렸네!", - "2": "내 파도를 타고, 나까지 밀어내다니!", - "3": "바위 동굴에서 길을 잃은 기분이야!" - }, - "defeat": { - "1": "하핫, 난 큰 파도를 탔다고!\n언제 또 도전해주라.", - "2": "언젠가 또 같이 서핑하자고!", - "3": "파도가 밀려왔다가 밀려나듯, 언젠가 너도 다시 도전하러 와." - } - }, - "wattson": { - "encounter": { - "1": "찌릿찌릿해질 때가 됐군!\n와하하하핫!", - "2": "스파크가 튀도록 해주마!\n와하하하하!", - "3": "와하하하하!\n마비 치료제를 가져왔길 바라네!" - }, - "victory": { - "1": "이 몸 배터리가 다 됐군!\n와하하하하!", - "2": "자네 완전히 날 좌초시켰군!\n와하하하핫!", - "3": "스릴 넘치는 배틀, 고맙네!\n와하하하하하!" - }, - "defeat": { - "1": "자네의 배터리 재충전하게. 그리고 나에게 도전하러 돌아오도록!\n와하하하핫!", - "2": "방금 배틀이 자네에게 짜릿짜릿했길 바란다네!\n와하하하하!", - "3": "자네 혹시 내가 이겨서 충격 받았나?\n와하하하핫!" - } - }, - "flannery": { - "encounter": { - "1": "어서오세요! 잠깐, 아냐…\n너를 무너뜨려줄게!", - "2": "난 체육관 관장이 된지는 얼마 안됐지만, 널 태워버릴거야!", - "3": "할아버지에게 배운 기술을 한 수 보여줄게! 승부다!" - }, - "victory": { - "1": "너 우리 할아버지를 생각나게 하네…\n내가 진 게 놀랍진 않아.", - "2": "나 너무 열심히 하는 건가?\n너무 열 올리면 안되니깐, 진정해야겠어.", - "3": "패배는 날 꺼뜨릴 수 없어.\n트레이닝으로 다시 불을 붙일 때야!" - }, - "defeat": { - "1": "할아버지가 자랑스러워하시길…\n언젠가 다시 배틀하자.", - "2": "내…내가 이기다니!\n내 방식대로 한 게 통했어!", - "3": "조만간 다시 뜨겁게 불타오르는 배틀을 하자!" - } - }, - "norman": { - "encounter": { - "1": "여기까지 오다니 놀랍군.\n한 번 겨뤄볼까.", - "2": "관장으로서 최선을 다해 널 이길 거란다.\n가자!", - "3": "최선을 다하는 게 좋을 거야.\n승부할 시간이다!" - }, - "victory": { - "1": "내가 지다니…?\n규칙은 규칙이니, 흐음.", - "2": "담청시티에서 이사한 게 문제였나…?", - "3": "믿을 수 없구나.\n훌륭한 승부였어." - }, - "defeat": { - "1": "우린 둘 다 최선을 다했지.\n다시 대결할 수 있었으면 좋겠구나.", - "2": "우리 집 꼬마에게 도전해보는 것도 좋겠군.\n아마 뭔가 배울 수 있을거다!", - "3": "방금 전 배틀 완벽했어.\n다음에도 행운이 함께하길." - } - }, - "winona": { - "encounter": { - "1": "저는 먹이를 찾아서 하늘을 날아다녔어요…\n그리고 당신은 제 타겟입니다!", - "2": "배틀이 어떻게 되든, 전 제 비행 포켓몬과 우아하게 승리하겠어요. 승부합시다!", - "3": "당신이 높은 곳을 무서워하지 않기를.\n자, 날아올라요!" - }, - "victory": { - "1": "저보다 우아하게 나서는 트레이너는 처음 봤습니다.\n훌륭하시네요.", - "2": "이런, 제 비행 포켓몬이 추락해버렸네요!\n훌륭한 배틀이었습니다.", - "3": "비록 전 떨어졌지만, 제 포켓몬은 다시 날아갈 겁니다!" - }, - "defeat": { - "1": "제 비행 포켓몬과 영원히 우아하게 춤출게요.", - "2": "우리의 쇼가 즐거웠길 바라요.\n우아한 춤은 끝났습니다.", - "3": "우리의 엘레강스한 안무를 다시 보러오지 않을래요?" - } - }, - "tate": { - "encounter": { - "1": "헤헤헤…\n내가 란과 같이 있지 않아서 놀랐지?", - "2": "네가 무슨 생각을 하는지 알아…\n승부하고 싶은거지!", - "3": "네 움직임을 모두 알고 있는데…\n어떻게 이기려고?" - }, - "victory": { - "1": "어쩔 수 없지…\n란이 보고싶다아…", - "2": "너와 네 포켓몬과의 유대, 나보다 더 견고한걸.", - "3": "란이랑 함께였다면, 우리가 이겼어.\n둘이선 더 잘 할 수 있다구!" - }, - "defeat": { - "1": "내 포켓몬과 나는 우수하다구!", - "2": "날 못 이긴다면, 넌 란한테도 절대로 못 이겨.", - "3": "란과 함께한 엄격한 훈련 덕이야.\n덕분에 포켓몬과 하나가 될 수 있었어." - } - }, - "liza": { - "encounter": { - "1": "후후후…\n내가 풍과 같이 있지 않아서 놀랐지?", - "2": "네가 무얼 바라는지 알아…\n포켓몬 배틀, 맞지?", - "3": "포켓몬과 하나가 된 사람…\n어떻게 이기려고?" - }, - "victory": { - "1": "어쩔 수 없지…\n풍이 보고싶다아…", - "2": "너와 네 포켓몬과의 유대, 나보다 더 견고한걸.", - "3": "풍이랑 함께였다면, 우리가 이겼어.\n둘이선 더 잘 할 수 있다구!" - }, - "defeat": { - "1": "내 포켓몬과 내가 승리한거야.", - "2": "날 못 이긴다면, 넌 풍한테도 절대로 못 이겨.", - "3": "풍과 함께한 엄격한 훈련 덕이야.\n덕분에 포켓몬과 싱크로 될 수 있었어." - } - }, - "juan": { - "encounter": { - "1": "지금은 겸양을 부릴 때가 아니군요.\n승부합시다!", - "2": "아하하하, 물 포켓몬과 함께 아트를 보여드리겠습니다!", - "3": "태풍이 다가오는군요!\n저를 테스트해주시겠습니까?", - "4": "자, 마음껏 봐주십시오.\n저와 포켓몬이 이루어내는 물의 일루전을!" - }, - "victory": { - "1": "당신은 윤진 관장을 뛰어넘을 지니어스군요!", - "2": "당신이 훈련할 때 저는 엘레강스에 집중했습니다.\n당신이 이기는 건 당연하죠.", - "3": "아하하하하!\n잘했습니다, 이번엔 당신이 이겼네요.", - "4": "모든 것을 극복하는 브릴리언트 스킬, 당신에게 느껴지네요." - }, - "defeat": { - "1": "저와 포켓몬이 이루어내는 물의 일루전이 승리했습니다.", - "2": "아하하핫, 저는 이겼고, 당신은 졌습니다.", - "3": "겉옷 빌려드릴까요? 아마도 배틀에 도움이 될겁니다!\n아하하하, 농담입니다!", - "4": "제가 승리자군요! 그리고, 당신은 졌네요." - } - }, - "crasher_wake": { - "encounter": { - "1": "철썩! 철썩! 조심해라!\n맥시멈 가면이…지금…간다!", - "2": "철썩! 철썩! 파도의 맥시멈 가면!", - "3": "밀물같은 힘으로 쓸려나가도록 해보실까!!" - }, - "victory": { - "1": "저절로 웃음이 나오게 되는군!\n크하하핫! 정말 훌륭했다!", - "2": "우왓! 끝나버렸나!\n뭐랄까…\n좀 더 싸우고 싶은 기분이야!", - "3": "이럴수가!?" - }, - "defeat": { - "1": "으하하핫! 보람차군!", - "2": "내가 이겼지만, 아쉽군! 좀 더 배틀하고 싶은데!", - "3": "잘 가게나!" - } - }, - "falkner": { - "encounter": { - "1": "넓은 하늘을 화려하게 나는 새 포켓몬의 진정한 강함을 알게 해주겠다!", - "2": "바람이여, 나에게 오라!", - "3": "아버지, 내 시합을 하늘에서도 봐줘!" - }, - "victory": { - "1": "알았다… 미련없이 땅에 내려가지.", - "2": "패배는 패배니까. 넌 정말 강하군.", - "3": "…큭! 그래, 내가 졌다." - }, - "defeat": { - "1": "아버지! 소중히 여기던 새 포켓몬으로 이겼어…", - "2": "언제나 새 포켓몬이 최강이다!", - "3": "아버지를 따라 잡은 기분이군!" - } - }, - "nessa": { - "encounter": { - "1": "똑똑한 네가 어떤 계획을 세우고 있든지, 나와 내 파트너가 가라앉혀줄 테니까 문제 없어.", - "2": "잡담하려고 나온 게 아니야. 이기려고 나온 거지!", - "3": "이건 내 포켓몬이 주는 작은 선물이야… 네가 잘 받아줘야 해!" - }, - "victory": { - "1": "너와 네 포켓몬 정말로 너무…", - "2": "어째서…? 어떻게 이럴 수 있지?!", - "3": "완전히 씻겨 나갔잖아!" - }, - "defeat": { - "1": "성난 파도가 다시 부딪혀올거니까!", - "2": "승리의 파도를 탈 시간이야!", - "3": "에헤헤!" - } - }, - "melony": { - "encounter": { - "1": "봐주지는 않을 거란다!", - "2": "그럼 이제, 시작해도 될 것 같네.", - "3": "영하의 세계로 안내해주마!" - }, - "victory": { - "1": "너… 꽤 하는구나?", - "2": "만약 주변에서 마쿠와를 찾는다면, 그 때는 따끔한 맛을 보여주도록 하렴, 알았지?", - "3": "아이스 브레이킹을 너무 문자 그대로 받아들인 것 같은데…" - }, - "defeat": { - "1": "이제 전투가 얼마나 치열할 수 있는 지 알겠니?", - "2": "아하하! 내가 또 이긴 것 같네!", - "3": "너 혹시 봐준거니?" - } - }, - "marlon": { - "encounter": { - "1": "너 강해보이네! 받아라! 승부 시작이야!", - "2": "난 넓은 대양처럼 강인하다고. 너 분명히 휩쓸려 갈거야.", - "3": "오, 내가 너를 마주 보고 있군! 둘다 파도에서 떨어지겠어." - }, - "victory": { - "1": "너… 좋은 포켓몬을 키우고 있구나! 꽤 하는군! 끝내주는 트레이너야!", - "2": "강해 보이는 게 아니고 진짜 강하구나! 에-, 나도 휩쓸려버렸어!", - "3": "넌 거친 파도처럼 강인하구나!" - }, - "defeat": { - "1": "넌 강하지만, 바다를 흔들기에는 역부족이네, 그치!", - "2": "아하핫! 내가 또 이긴 것 같네!", - "3": "달콤하네, 승리 역시 달콤하고!" - } - }, - "shauntal": { - "encounter": { - "1": "미안합니다. 도전자이시죠?\n고스트포켓몬 조련사인 사천왕 망초가 상대하겠습니다.", - "2": "겨루었던 트레이너와 포켓몬의 마음이 통하는 모습을 이야기로 만드는 것을 좋아해서요!\n그러니까 당신들에 대한 취재를 허락해 주세요?", - "3": "포켓몬과 함께 일하는 모든 사람들은 각자 이야기를 갖고 있죠.\n어떤 이야기를 들려드릴까요?" - }, - "victory": { - "1": "…우와. 저 아연실색 망연자실이에요!", - "2": "미-미 미안합니다! 먼저 포켓몬에게 사과해야지…\n\n나 때문에 괴로운 기억을 만들게 돼서 정말 미안해!", - "3": "그치만, 전 여전히 사천왕인걸요!" - }, - "defeat": { - "1": "에헤헤.", - "2": "다음 소설의 완벽한 소재를 얻었다!", - "3": "그리고 이렇게, 또 다른 이야기가 끝났습니다…" - } - }, - "marshal": { - "encounter": { - "1": "노간주 스승님이, 잠재력을 보고 네게 관심을 갖고 계시더군.\n그 힘의 한계까지 데려가는 것이 이번 의도다! 그럼 간다!", - "2": "승리, 압도적인 승리, 내가 바라는 것이다! 강인한 도전자여, 간다!", - "3": "깨뜨리는 것은 약한 자신, 관철하는 것은 강한 신념!\n 그리고 바라는 것은 압도적인 승리!" - }, - "victory": { - "1": "후우! 잘 싸웠다!", - "2": "역시 대단하구나! 싸워서 더욱더 높은 곳을 노려라…!", - "3": "너와 네 포켓몬이 보여준 그 힘, 감명 깊군…" - }, - "defeat": { - "1": "흐음.", - "2": "좋은 승부였다.", - "3": "하압! 하압! 히야아아압!!!!" - } - }, - "cheren": { - "encounter": { - "1": "넌 내 오랜 친구가 생각나게 하는군. 그 덕분에 이 배틀이 기대돼!", - "2": "왜 하고 있는지 생각하지 않으면, 포켓몬 배틀은 의미가 없어 . \n$좋게 말하면, 함께 포켓몬과 승부하는 것이 무의미해 지는 것이지.", - "3": "내 이름은 체렌! 체육관 관장이자 선생님을 하고 있지! 널 만나게 되서 기쁘군." - }, - "victory": { - "1": "고마워! 내 안에 무엇이 부족했는지 알게 됐네.", - "2": "고마워! 내가 추구하는 이상에 조금 다가간 것 같아.", - "3": "으음… 이건 문제가 있군." - }, - "defeat": { - "1": "체육관 관장으로서, 나는 넘어야할 벽이 되고자 하고 있거든.", - "2": "좋았어!", - "3": "포켓몬이 곁에 있었기 때문에 여기까지 올 수 있었어.\n생명체와 생명체라는 동등한 관계에서 포켓몬이 우리에게 도움을 주는 이유를 생각해 볼 필요는 있지." - } - }, - "chili": { - "encounter": { - "1": "이얏호-! 형제중 가장 강한 나하고 놀자고!", - "2": "짜잔! 불꽃타입 불꽃의 남자 팟, 바로 너의 상대가 되어주지!", - "3": "나와 내 불타오르는 불꽃타입 포켓몬들이 뭘 할수 있는지 보여주지!" - }, - "victory": { - "1": "졌지만… 모 두 불 태 웠 어!!", - "2": "와우! 불태워졌네!", - "3": "으악! 너가 나를 이겨버렸잖아!" - }, - "defeat": { - "1": "난 지금 불타오르고 있어, 나와 싸우게 된다면 넌 다치게 될거야!", - "2": "불장난하면 밤에 이불에 지도를 그리는 법이지!", - "3": "그러니까, 상대가 나였잖아? 너에게는 처음부터 기회가 없었다고!" - } - }, - "cilan": { - "encounter": { - "1": "개인적으로 받아들이지 마세요… 감정 상하지도 말고요… 저와 제 풀타입 포켓몬들이라면…\n$음… 무슨 일이 있더라도 배틀을 할 겁니다.", - "2": "네. 저로 괜찮다면 진심을 담아서 상대해 드리겠습니다.", - "3": "네… 그, 음, 저는 덴트입니다, 풀타입 포켓몬을 좋아합니다." - }, - "victory": { - "1": "…에- 그게… 끝나버렸나요?", - "2": "…놀랐습니다. 당신 아주 강하군요. \n$팟이나 콘이라도 이길 수 없었을 것 같습니다…", - "3": "…어라, 타이밍이 좀 잘못된것 같네요?" - }, - "defeat": { - "1": "어라? 제가 이긴 건가요?", - "2": "제 생각엔… \n$아무래도 제가 이겼어야만 했을 거라 생각합니다, 팟과 콘이랑 배틀하면서 우리는 모두 더 강해졌기 때문이죠.", - "3": "정말… 아주 짜릿한 경험이었습니다…" - } - }, - "roark": { - "encounter": { - "1": "트레이너로서 너의 실력이 어느 정도인지 그리고 함께 싸울 포켓몬이 얼마나 강한지 확인해보겠어!", - "2": "자 간다! 내 자랑이자 기쁨인 바위타입 포켓몬들이야!", - "3": "바위타입 포켓몬이야말로 최고지!", - "4": "트레이너로서 너의 실력이 어느 정도인지 그리고 함께 싸울 포켓몬이 얼마나 강한지 확인해보겠어!" - }, - "victory": { - "1": "이-이럴수가! 열심히 단련시킨 포켓몬들이!", - "2": "…져버린 건가. 다음엔 지하통로에서 화석캐기 승부를 하고 싶구나.", - "3": "네 실력이라면 승리는 당연한 결과겠지.", - "4": "뭐-뭐야?! 이럴 수가! 이것도 부족했단 말인가?", - "5": "내가 실수했군." - }, - "defeat": { - "1": "봤지? 이게 바로 내가 자랑하는 바위 스타일 전투야!", - "2": "고마워! 이번 승부로 아버지를 이길 수 있겠다는 자신감이 생겼어!", - "3": "정말 단단한 바위를 뚫고 나온 기분인데!" - } - }, - "morty": { - "encounter": { - "1": "조금만 더 노력하면, 내가 전설의 포켓몬을 만나는 미래가 보여.\n$내가 그 수준에 도달할 수 있게 도와줘!", - "2": "커다란 무지개색 포켓몬은 진정한 강함을 가진 트레이너 앞에 나타난다는 이야기가 있어. \n$난 그 이야기를 믿고, 줄곧 이 곳에서 몰래 수행하고 있어. 그 결과로, 다른 사람들은 볼 수 없는 것을 볼 수 있게 됐지. \n$내겐 그 포켓몬을 나타나게 할 사람의 그림자가 보이거든. \n$난 그게 나라고 믿어! 넌 내가 그 수준에 올라갈 수 있도록 도와줘야겠어!", - "3": "네가 믿든 믿지 않든, 불가사의한 힘은 존재해.", - "4": "넌 내 수련의 결실을 보게 될 거야.", - "5": "포켓몬과 너의 영혼을 하나로 만들어야 해. 가능하겠어?", - "6": "저기, 너 내 수행의 일부분이 되고 싶은거지?" - }, - "victory": { - "1": "나는 아직 멀었구나…", - "2": "그래… 여행으로 먼 곳을 돌아다니면서, 나보다 훨씬 많은 것을 봐왔구나.\n$네가 조금 부럽네…", - "3": "이게 어떻게 가능한 거지…", - "4": "우리의 잠재력은 그렇게 다르진 않은 것 같아.\n$그치만 넌 그것과 다른 무언가를 많이 갖고 있는 것 같네… 흐음.", - "5": "수련이 더 필요하겠군.", - "6": "안타깝게 됐네." - }, - "defeat": { - "1": "내가…다시 한 발짝 앞섰어.", - "2": "후후훗…", - "3": "뭐-뭐야?! 이럴 수가! 그것도 부족해?", - "4": "정말 단단한 바위를 뚫고 나온 기분인데!", - "5": "아하하하하!", - "6": "내가 이길 줄 알았어!" - } - }, - "crispin": { - "encounter": { - "1": "이기고 싶으니까 이기고 말겠어!", - "2": "싸우고 싶으면 싸운다! 이거면 충분하지 않아!?" - }, - "victory": { - "1": "이기고 싶었는데…졌잖아!", - "2": "이기지 못해서…지고 말았어!" - }, - "defeat": { - "1": "잠시만. 나 지금 이긴거지? 이긴 거 맞지! 기분 좋은데!", - "2": "우와아! 이거 굉장한데!" - } - }, - "amarys": { - "encounter": { - "1": "네리네는 그 사람을 구원하고 싶습니다. 그렇기에 패배는 용납되지 않습니다.\n$… 승부를 시작합니다." - }, - "victory": { - "1": "네리네는… 안 된다는 건가요." - }, - "defeat": { - "1": "네리네가 승리했습니다. 수고하셨습니다." - } - }, - "lacey": { - "encounter": { - "1": "이번에는 사천왕으로서 승부하는 거니까 평소 사용하는 아이들로 상대해 드릴게요!" - }, - "victory": { - "1": "멋진 포켓몬 배틀이었어요!" - }, - "defeat": { - "1": "당신의 포켓몬의 노력에 박수를 보내주세요!" - } - }, - "drayton": { - "encounter": { - "1": "의자는 좋은 거야. 너도 그렇게 생각해? 정말 고마운 물건이지. \n$왜 다들 앉지 않는 걸까. 서 있는 건 힘들잖아!" - }, - "victory": { - "1": "전보다 더 강해질 줄이야!" - }, - "defeat": { - "1": "헤헤헷! 내 승리야. 분한 건 알겠지만 카지처럼 나가떨어지지마, 응?" - } - }, - "ramos": { - "encounter": { - "1": "그래, 올곧게 자란 초목을 모아서 만든 풀 정글짐은 어땠는가?\n$자네가 느낀 그것이 나의 체육관 관장으로서의 실력이네! 한번 확인해 보겠나?" - }, - "victory": { - "1": "포켓몬은 자네를 믿고, 자네는 그들을 믿는다…가슴이 후련해지는 승부였구먼." - }, - "defeat": { - "1": "호호호…연약해 보이는 풀잎은 콘크리트도 뚫을 수 있다네." - } - }, - "viola": { - "encounter": { - "1": "패배의 분함도 승리의 순간도…\n$둘 다 최고의 피사체야! 정말 멋져 멋져! \n$자, 그럼 덤비렴!", - "2": "나 비올라는 셔트 찬스를 노리는 것처럼--승리를 노릴 거야!" - }, - "victory": { - "1": "너와 네 포켓몬은 최고의 콤비구나! 정말 멋져 멋져!", - "2": "렌즈 너머의 세계와 포켓몬의 마음으로 보는 세계…\n$똑같이 보이는 풍경이지만 다양한 세계가 겹쳐져 있는 거야." - }, - "defeat": { - "1": "내가 승리한 순간을 찍은 사진은 정말 멋져 멋져!", - "2": "좋아! 멋진 사진을 찍었어!" - } - }, - "candice": { - "encounter": { - "1": "나, 무청에게 도전하고 싶은거야? 좋아! 강한 사람을 기다리고 있었으니까!\n$그치만 말해두는데, 집중하는 방법을 아는 나도 강력하거든.", - "2": "포켓몬도 멋도 연애도 정신 집중이 중요하다고!\n$무슨 뜻인지 보여줄테니까 각오해!" - }, - "victory": { - "1": "있지, 나 조금 불타오르게 됐어! 널 조금 존경하게 될지도 몰라.", - "2": "우와! 제법인데! 내가 존경하게 만들다니!\n$네 집중력과 의지, 완전히 나를 압도하는 같아. " - }, - "defeat": { - "1": "이기고자 하는 의지는 전해졌지만, 난 지지 않았어!", - "2": "봤지? 무청의 집중력! 내 포켓몬의 집중력도 대단하다구!" - } - }, - "gardenia": { - "encounter": { - "1": "너에게선 승리의 기운이 느껴져. 어쨌든 재밌을 것 같아. 포켓몬 승부하자!" - }, - "victory": { - "1": "대단해! 너 정말 강하구나!" - }, - "defeat": { - "1": "그렇지! 나와 포켓몬은 완벽해!" - } - }, - "aaron": { - "encounter": { - "1": "좋습니다! 그럼 상대해 드리죠!" - }, - "victory": { - "1": "승부는 딥하고 컴플렉스한 일이네요…" - }, - "defeat": { - "1": "사천왕을 상대로 하는 승리는 쉽게 오지 않는다구요." - } - }, - "cress": { - "encounter": { - "1": "맞습니다! 당신은 저와 제 자랑스러운 물타입 포켓몬들과 상대하게 될것입니다." - }, - "victory": { - "1": "곤란하네… 이 콘이 질 줄이야." - }, - "defeat": { - "1": "제가 당신의 상대였기 때문에 이건 당연한 결과였습니다." - } - }, - "allister": { - "encounter": { - "1": "……어니언이야.\n……가 간다…" - }, - "victory": { - "1": "충격을 받아서… 가면을 떨어뜨릴 뻔 했지만…\n$네가 얼마나 강한지 확실히 봤어." - }, - "defeat": { - "1": "이-이게 내 실력이니까!" - } - }, - "clay": { - "encounter": { - "1": "실망스럽군! 나를 기다리게 하다니, 이 꼬마가. 아무튼 실력을 확인해 볼까!" - }, - "victory": { - "1": "이런 이런… 진심으로 싸워서 진 거라 오히려 시원한 기분이군!" - }, - "defeat": { - "1": "중요한 것은 패배에 어떻게 반응하는 거다. \n$그렇기 때문에 패배를 연료로 삼아 나아가는 사람들은 강인하지." - } - }, - "kofu": { - "encounter": { - "1": "물포켓몬의 풀코스를! 배 터지게 먹여 주도록 하마!" - }, - "victory": { - "1": "우옷! 우오오옷! 이렇게 팔팔한 트레이너가 다 있다니!" - }, - "defeat": { - "1": "젊은 친구! 다음에 또 만나기를 기대하고 있으마!" - } - }, - "tulip": { - "encounter": { - "1": "리파의 기술로 너의 포켓몬들을 지금보다 훨~씬 아름답게 만들어 줄게!" - }, - "victory": { - "1": "너의 강함은 풀 수 없는 매직이구나." - }, - "defeat": { - "1": "…리파의 업계에서는 어중간한 재능을 가진 사람은 대체로 금방 사라져 버려." - } - }, - "sidney": { - "encounter": { - "1": "음, 좋은 표정이야. 꽤나 즐길 수 있겠는데.\n$좋아! 아주 좋아! 좋았어!\n$우리 함께, 포켓몬리그에서만 맛볼 수 있는 배틀을 즐겨보도록 하자!" - }, - "victory": { - "1": "이런, 이런 져버렸군? 뭐, 꽤 즐겼으니 상관없지만." - }, - "defeat": { - "1": "기분 나빠하지 마, 알겠지?" - } - }, - "phoebe": { - "encounter": { - "1": "송화산에서 수행하면서, 고스트 타입 포켓몬과 마음이 통하게 됐어. \n$응, 나와 내 포켓몬의 유대감은 정말 강해! \n$이런 내 포켓몬들에게 과연 데미지를 줄 수 있을지 한번 시험해봐!" - }, - "victory": { - "1": "아- 아, 내가 져버렸다." - }, - "defeat": { - "1": "언젠가 다시 승부할 수 있기를 기대할게!" - } - }, - "glacia": { - "encounter": { - "1": "이곳에 도전하러 오는 건 모두 어설픈 트레이너와 포켓몬뿐…. \n$당신은 어떤가요? 제 진짜 실력을 발휘해도 괜찮을 정도라면 정말 기쁠텐데 말이죠…!" - }, - "victory": { - "1": "당신과… 당신 포켓몬들의 뜨거운 혼!\n$정말로 압도적인 뜨거움이네요. \n$내 얼음 기술로 피해를 주지 못한 것도 놀랍지 않을정도로요!" - }, - "defeat": { - "1": "저런, 정말로 치열한 승부였네요." - } - }, - "drake": { - "encounter": { - "1": "파트너로 포켓몬과 함께하는 승부에 무엇이 필요한지 넌 알고 있는가? \n$그걸 모른다면 넌 이 몸을 이길 수 없다!" - }, - "victory": { - "1": "훌륭하다, 라고 할 만 하군!" - }, - "defeat": { - "1": "난 승부에서 최선을 다했으니까!" - } - }, - "wallace": { - "encounter": { - "1": "뭐랄까, 너의 분위기가 조금 변한 것 같은… \n$그런 느낌이 드는군. 자, 그럼 한번 확인해볼까? 너와 포켓몬의 힘을. \n$그리고 확실하게 보여주도록 하지. 나와 포켓몬에 의한 물의 일루전을!" - }, - "victory": { - "1": "훌륭하군. 넌 정말 굉장한 포켓몬 트레이너다. \n$그런 너와 너의 포켓몬을 만나게 된 걸 기쁘게 생각해. 스스로 그 가치를 증명하다니!" - }, - "defeat": { - "1": "거대한 일루전이로군!" - } - }, - "lorelei": { - "encounter": { - "1": "얼음포켓몬을 내보내면 대적할 사람이 없지! 상대를 얼린다는 건 매우 강력한 공격이야.\n$네 포켓몬이 꽁꽁 얼면 그때부턴 내 손바닥 위거든! 아하하! 준비됐어?" - }, - "victory": { - "1": "어떻게 감히!" - }, - "defeat": { - "1": "얼어붙은 넌 아무것도 할 수 없어." - } - }, - "will": { - "encounter": { - "1": "나는 전세계를 돌아다니며, 강한 에스퍼 포켓몬을 만들도록 수행해왔다.\n$계속 더 정진하겠다! 패배는 선택지에 없어!" - }, - "victory": { - "1": "이… 내가… 믿을수 없어…" - }, - "defeat": { - "1": "근소한 차이였다. 네게 부족한 것이 무엇인지 궁금하군." - } - }, - "malva": { - "encounter": { - "1": "심장이 불에 타버릴 것만 같아요. \n$당신에 대한 증오로 불타고 있거든요, 얄미운 트레이너!" - }, - "victory": { - "1": "도전자가… 사천왕 파키라에게서 멋지게 승리를 쟁취했습니다!" - }, - "defeat": { - "1": "기쁘네요! 당신을 짓밟을 수 있어서 말이죠!" - } - }, - "hala": { - "encounter": { - "1": "그럼…진심을 담아서 진지한 할라로 임하겠다!" - }, - "victory": { - "1": "네가 순례하면서 갖추게 된 강함을 느낄 수 있었다." - }, - "defeat": { - "1": "하하! 경쾌한 승부였구나!" - } - }, - "molayne": { - "encounter": { - "1": "사촌인 마마네에게 캡틴 자리는 줬지만, 아직 실력에는 자신 있어요. \n$제 실력은 초신성처럼 빛나니까요!" - }, - "victory": { - "1": "확실히 겨룰 흥미로운 트레이너를 찾았네요!" - }, - "defeat": { - "1": "아하하. 흥미로운 배틀이었네요." - } - }, - "rika": { - "encounter": { - "1": "실컷 귀여워해 줄 테니까… 한 번 열심히 해 보라고!" - }, - "victory": { - "1": "너, 꽤 하는구나!" - }, - "defeat": { - "1": "아하하! 제법인데! 역시 너는 재밌는 녀석이라니까!" - } - }, - "bruno": { - "encounter": { - "1": "우월한 힘으로 너를 부숴주지! 우! 하~앗!" - }, - "victory": { - "1": "하? 어떻게 내가 진 거지?" - }, - "defeat": { - "1": "얼마든지 내게 도전 할 수 있지만, 결과는 절대 바뀌지 않을 거다!" - } - }, - "bugsy": { - "encounter": { - "1": "내 이름은 호일! 벌레 포켓몬에 대해서라면 누구에게도 지지 않아!" - }, - "victory": { - "1": "우와, 대단해! 넌 포켓몬 전문가구나!\n내 연구는 아직 안 끝났네. 응, 네가 이겼어." - }, - "defeat": { - "1": "고마워! 방금 승부 덕분에, 내 연구도 진전을 이룬 것 같아!" - } - }, - "koga": { - "encounter": { - "1": "후하하하! 포켓몬은 단순히 강한 것만이 아니다--곧 알려주지!" - }, - "victory": { - "1": "하! 스스로 증명해냈군!" - }, - "defeat": { - "1": "인술을 피하는 방법을 배워보겠나?" - } - }, - "bertha": { - "encounter": { - "1": "그럼, 할머니가 네가 얼마나 해낼 수 있는지 보도록 할게?" - }, - "victory": { - "1": "좋아! 꼬마야, 정말로, 인상적이었단다.\n$네 포켓몬은 너를 믿고 승리를 위해 최선을 다했구나.\n$비록 내가 졌지만, 좋아서 바보같이 웃음이 나오는구나!" - }, - "defeat": { - "1": "호호호! 이 할머니가 이겼구나!" - } - }, - "lenora": { - "encounter": { - "1": "자 그럼 도전자여, 애정을 담아 키운 포켓몬으로 어떤 방식으로 싸우는지 연구해 보겠다!" - }, - "victory": { - "1": "너에 대한 내 가설이 맞았네. 재능만 있는 게 아니라… 대단한 녀석이구나! 너 반할것 같잖아!" - }, - "defeat": { - "1": "아 하 하! 패배했다면, 그 이유를 분석하고, 다음 승부에서 그 지식을 활용하도록!" - } - }, - "siebold": { - "encounter": { - "1": "살아가는 동안, 궁극적인 요리와 강력한 상대를 찾기 위해… 열과 성을 다할 것입니다!" - }, - "victory": { - "1": "당신에 대한 기억을 제 가슴 속에 담아두겠습니다." - }, - "defeat": { - "1": "우리의 포켓몬 배틀은 영혼의 양식과 같습니다. 그건 저를 계속 지탱할 거예요. \n$이것이 제가 전투에서 모든 것을 바친 당신에게, 경의를 표하는 방법입니다!" - } - }, - "roxie": { - "encounter": { - "1": "간다! 너의 이성을 싹 날려줄 거야!!" - }, - "victory": { - "1": "굉-장해! 네 이성, 이미 나보다 TOXIC해버렸잖아!" - }, - "defeat": { - "1": "헤이, 잠깐-! 좀 더 진지해져! 넌 더 날아가야한다구!" - } - }, - "olivia": { - "encounter": { - "1": "여기에 소개는 필요 없지. 자, 라이치님과 승부할 시간이다!" - }, - "victory": { - "1": "정말 훌륭하군… 당신과 포켓몬 둘 다…" - }, - "defeat": { - "1": "흐-음." - } - }, - "poppy": { - "encounter": { - "1": "우와~! 뽀삐와 포켓몬 승부가 하고 싶으세요?" - }, - "victory": { - "1": "훌쩍, 으에엥~" - }, - "defeat": { - "1": "만세~! 만세~ 목수, 성공했어요! \n$에헴! 리벤지 매치는 언제든지 받아 줄게요!" - } - }, - "agatha": { - "encounter": { - "1": "포켓몬은 싸우게 하려고 있는 것이야! 진정한 싸움이라는 것을 보여주겠다!" - }, - "victory": { - "1": "이런! 넌 무언가 특별하구나, 꼬마야!" - }, - "defeat": { - "1": "바하하하. 제대로 된 승부는 이렇게 하는거다!" - } - }, - "flint": { - "encounter": { - "1": "뜨겁게 타오를 준비는 됐겠지, 이제 곧 대폭발이 다가올테니까!" - }, - "victory": { - "1": "놀랍군! 네 기술이 너무 뜨거워서, 내가 미적지근해보이잖아!" - }, - "defeat": { - "1": "하? 그게 다야? 좀 더 열정이 필요해보이는걸." - } - }, - "grimsley": { - "encounter": { - "1": "이긴 자가 모든 것을 갖고 패배한 자에겐 아무것도 남지 않는다." - }, - "victory": { - "1": "누군가가 이기면 상대한 누군가가 진다… 난 다음 승리를 목표로 하겠어!" - }, - "defeat": { - "1": "누군가가 이기면, 그 사람과 싸운 사람은 지게 되는 것이지." - } - }, - "caitlin": { - "encounter": { - "1": "피어난 꽃에서 나타난 것은 나. 거기 있는 당신…\n$강함과 상냥함을 함께 갖춘 포켓몬 트레이너인 것 같네. \n$이 카틀레야가 대전 상대로 원하는 건 최고의 강함… \n$너도 그 실력을 마음껏 펼쳐 봐!" - }, - "victory": { - "1": "대전을 통해서 저도 포켓몬도 성장합니다. 감사드립니다." - }, - "defeat": { - "1": "더욱 엘레강트하고 엑셀런트하게 승리를 쟁취하고 싶거든." - } - }, - "diantha": { - "encounter": { - "1": "미래를 향한 희망으로 빛나는 당신과, 당신의 포켓몬을 상대로 승부하는 것…\n$솔직히, 매일매일 새로운 날을 위해 필요한 에너지가 채워지는 것 같아요! 정말로요!" - }, - "victory": { - "1": "고귀한 영혼을 지닌 포켓몬과 트레이너의 모습에 격하게 마음이 흔들려서…" - }, - "defeat": { - "1": "정말, 환상적이야! 어떻게 생각하시나요? 저의 포켓몬들, 꽤 멋있었죠?" - } - }, - "wikstrom": { - "encounter": { - "1": "잘 왔네, 젊은 도전자여! 이 몸은 사천왕 중 한 명인 강철의 남자 간피다! \n$자 그럼 간다, 간다! 간닷!" - }, - "victory": { - "1": "정말 영광이군! 자네의 포켓몬과 서로 신뢰하는 힘, 날 능가하는군!!" - }, - "defeat": { - "1": "이게 무슨 마법이지? 내 마음의 떨림이 멈추질 않는군! \n$가치 있는 상대를 이기는 것은 영혼에 날개를 달아주는 것과 같지--그런 내가 비상하는 것일까!" - } - }, - "acerola": { - "encounter": { - "1": "포켓몬 배틀은 언제나 재미있지! 자, 내가 상대해줄게!" - }, - "victory": { - "1": "아세로라… 입이 딱 벌어졌어! 어떻게 해낸 거야?!" - }, - "defeat": { - "1": "후아~! 놀라운 승리네!" - } - }, - "larry_elite": { - "encounter": { - "1": "…안녕하십니까, 청목입니다.\n$귀찮게도 저는 사천왕도 겸임하고 있습니다." - }, - "victory": { - "1": "날고 있는 새포켓몬도 떨어뜨릴 기세로군요." - }, - "defeat": { - "1": "치프와 만나기로 한 시각이군요." - } - }, - "lance": { - "encounter": { - "1": "널 기다리고 있었다. 그 실력을 시험해보겠어.", - "2": "여기까지 올 수 있을거라고 생각했다. 슬슬 시작해볼까." - }, - "victory": { - "1": "날 따라잡았군. 훌륭해!", - "2": "다른 트레이너가 날 이길 거라곤 생각 못했는데… 놀랍군." - }, - "defeat": { - "1": "근소하군. 다시 해볼까?", - "2": "네가 약해서가 아니다. 신경쓰지 말도록." - } - }, - "karen": { - "encounter": { - "1": "난 카렌! 내 악 타입 포켓몬과의 승부를 원하니?", - "2": "난 네가 이전에 만났던 트레이너들과는 달라.", - "3": "강한 포켓몬, 약한 포켓몬, 그런 건 사람이 멋대로 정하는 것." - }, - "victory": { - "1": "좋아하는 마음이 전해진다면 포켓몬도 답할거야. 그렇게 강해지는 거지", - "2": "난 내가 선택한 길을 걸어갈거야.", - "3": "챔피언이 너를 기다리고 있어." - }, - "defeat": { - "1": "정말 강한 트레이너라면 좋아하는 포켓몬으로 이길 수 있도록 열심히 해야 해.", - "2": "뭐, 비교적 재밌었어.", - "3": "언제라도 다시 찾아와, 상대해줄게." - } - }, - "milo": { - "encounter": { - "1": "그렇다는 건 당신이 포켓몬을 아주 깊게 이해하고 있다는 뜻이겠죠? \n$이거 만만치 않은 승부가 되겠네요! \n$저도 다이맥스를 사용해야겠어요!" - }, - "victory": { - "1": "풀의 힘이 모두 시들어버리다니… 당신은 굉장한 도전자시군요!" - }, - "defeat": { - "1": "충격과 공포를 전해드리겠습니다." - } - }, - "lucian": { - "encounter": { - "1": "잠깐, 기다려주세요. 제가 읽던 책이 거의 클라이맥스에 도달했거든요…\n$주인공이 성스러운 검을 얻었고 마지막 시련을 앞두고 있는데… 아, 신경 쓰지 마세요.\n$여기까지 왔으니, 그건 제쳐두고 당신과 싸워야겠습니다.\n$당신이 과연 주인공이 될 그릇인지 확인해 보도록 하죠!" - }, - "victory": { - "1": "그렇군요… 결국 체크메이트인가요." - }, - "defeat": { - "1": "제 평판을 지켜냈네요." - } - }, - "drasna": { - "encounter": { - "1": "당신 강하시죠? 그것도 상당히 꽤 말이에요…\n$어머 기뻐라! 그런 상대와 놀면 포켓몬들도 쑥쑥 크겠어요!" - }, - "victory": { - "1": "어머머 벌써 끝나버리다니… 미안해요, 괜찮으면 또 오세요!" - }, - "defeat": { - "1": "어머, 웬일이야?" - } - }, - "kahili": { - "encounter": { - "1": "자, 여기에서… 승리의 바람이 부는 쪽은 당신과 저 중에 어느 쪽일까요?" - }, - "victory": { - "1": "사천왕으로서 분하지만 당신들의 강함은 진정한 강함이군요." - }, - "defeat": { - "1": "이것이 에이스니까요!" - } - }, - "hassel": { - "encounter": { - "1": "맹렬하게 몰아치는 승부의 숨결을 직접 가르쳐 드리겠습니다!!" - }, - "victory": { - "1": "이번에는 당신이 승리를 쟁취했군요. \n$하지만, 시합의 흐름을 보니… 다음 승부는 또 어떻게 될지 모르겠네요." - }, - "defeat": { - "1": "저에게 더 배우고 싶은 것이 있으시다면 또 승부하도록 하죠." - } - }, - "blue": { - "encounter": { - "1": "여기까지 왔다니, 실력이 꽤 봐줄만 할 것 같은데." - }, - "victory": { - "1": "그 녀석한테만 지는 줄 알았는데… 누구냐고? 하, 하…" - }, - "defeat": { - "1": "봤지? 여기까지 온 내 실력." - } - }, - "piers": { - "encounter": { - "1": "뜨거운 현장을 즐길 준비는 됐겠지! 스파이크 마을, it's time to rock!" - }, - "victory": { - "1": "나도 내 멤버들도 최선을 다했어. 다음에 또 배틀하자고…" - }, - "defeat": { - "1": "소리를 지르느라 목이 가버렸군… 그렇지만 박진감 넘치는 배틀이었다!" - } - }, - "red": { - "encounter": { - "1": "…!" - }, - "victory": { - "1": "…?" - }, - "defeat": { - "1": "…!" - } - }, - "jasmine": { - "encounter": { - "1": "와… 당신의 포켓몬은 인상적이네요. 재미있을 것 같아요." - }, - "victory": { - "1": "당신은 정말 강하네요. 저도 더 열심히 노력해야겠어요." - }, - "defeat": { - "1": "이길 줄은 몰랐어요." - } - }, - "lance_champion": { - "encounter": { - "1": "여전히 난 챔피언이다. 더이상 주저할 게 없군." - }, - "victory": { - "1": "새로운 챔피언의 등장이군." - }, - "defeat": { - "1": "성공적으로 챔피언 자리를 지켜냈다." - } - }, - "steven": { - "encounter": { - "1": "넌… 포켓몬과 함께 모험을 하면서 무엇을 봤지? \n$많은 트레이너와 만나면서 무엇을 느꼈지? \n$풍요로운 이 지역을 돌아다니면서, 네 안에서 눈뜨기 시작한 무언가… \n$그 모든 것을 나에게 쏟아부었으면 좋겠어. \n$나와 내 포켓몬들도 전력을 다해 상대해줄 테니까!" - }, - "victory": { - "1": "챔피언인 내가 질 줄이야…" - }, - "defeat": { - "1": "덕분에 즐거웠어! 고마워!" - } - }, - "cynthia": { - "encounter": { - "1": "나, 난천은, 네 도전을 받아들일게! 온 힘을 다해 너와 시합하겠어!" - }, - "victory": { - "1": "포켓몬 배틀보다 재밌는 것은 없지만, 언젠간 끝나기 마련이니…" - }, - "defeat": { - "1": "비록 졌어도, 포켓몬에 대한 사랑은 잃지 않도록 해." - } - }, - "iris": { - "encounter": { - "1": "나는 말이지, 강한 트레이너와의 진지한 승부를 즐겨!\n$왜냐면 그렇잖아! 이곳에 오는 건 마음 깊이 승리를 추구하는 트레이너. \n#함께 싸우는 건 수많은 승부를 헤쳐온 포켓몬.\n$그런 상대와 겨룰 수 있다면 나도! 내 포켓몬도!\n$더욱더 강해지고 서로 알 수 있으니까! 으응! 그럼 간다! \n$포켓몬리그 챔피언 아이리스! 당신을 이기겠습니다!!" - }, - "victory": { - "1": "후와아아아… 힘을 모두 발휘했는데도 우리가 졌네." - }, - "defeat": { - "1": "우와! 이겼다!" - } - }, - "hau": { - "encounter": { - "1": "트레이너가 따뜻한 지역 출신인지 추운 지역 출신인지에 따라 배틀 스타일이 달라지는지 궁금해졌어.\n$그럼 테스트 해볼게~!" - }, - "victory": { - "1": "멋진데~! 이제 너의 스타일을 조금 더 잘 알게된 것 같아!" - }, - "defeat": { - "1": "이런, 그건 그냥 승부였는데~!" - } - }, - "geeta": { - "encounter": { - "1": "그 도전장, 한 번 더 승낙하도록 하죠. \n$자… 훈련의 결실을 보여주세요." - }, - "victory": { - "1": "당신이 이룰 업적에 대한 소식들, 기다리고 있겠습니다!" - }, - "defeat": { - "1": "무슨 문제라도 있나요? 이게 전부라니, 그럴리 없잖아요?" - } - }, - "nemona": { - "encounter": { - "1": "만세! 나 너무 기대돼! 이제 전력으로 승부하는거야~!" - }, - "victory": { - "1": "우와, 조금 문제 있지만, 그래도 너무 재밌었어! 다음에는 지지 않을거야!" - }, - "defeat": { - "1": "우와, 너무 멋진 승부였어! 정말로 강하네." - } - }, - "leon": { - "encounter": { - "1": "레츠, 챔피언 타임!!!" - }, - "victory": { - "1": "챔피언 타임은 끝났어… \n$하지만 정말 멋진 시간이었지! \n$최고의 시합을 만들어줘서 고맙다!" - }, - "defeat": { - "1": "최고의 챔피언 타임이었어, 정말로!" - } - }, - "whitney": { - "encounter": { - "1": "있지! 포켓몬들 말이야, 정말 너무 귀엽지?" - }, - "victory": { - "1": "흑! 으아앙! 너무해!" - }, - "defeat": { - "1": "이걸로 끝!" - } - }, - "chuck": { - "encounter": { - "1": "하! 나에게 도전하겠다고? 용감한 거냐, 아니면 그냥 무모한 거냐?" - }, - "victory": { - "1": "자네 강하군! 나를 제자로 삼아주겠나?" - }, - "defeat": { - "1": "자. 내가 자네보다 얼마나 더 강력한지 깨달았겠지?" - } - }, - "katy": { - "encounter": { - "1": "쓰러지고 싶지 않다면 방심하지 말고 열심히 해 봐~" - }, - "victory": { - "1": "내 포켓몬들 모두 지쳐서 헤벌레~ 해졌어~" - }, - "defeat": { - "1": "비비용~ 많~이 먹으렴~" - } - }, - "pryce": { - "encounter": { - "1": "젊음만으로는 승리를 보장할 수 없다! 중요한 것은 경험이다." - }, - "victory": { - "1": "특출하군! 완벽해. 지금 이 느낌을 잊지 말도록." - }, - "defeat": { - "1": "내가 예상했던 그대로군." - } - }, - "clair": { - "encounter": { - "1": "내가 누군지 알지? 그런데도 감히 내게 도전해?" - }, - "victory": { - "1": "네 실력이 어디까지 올라갈 수 있는지 궁금하네. 아주 흥미진진하겠어." - }, - "defeat": { - "1": "끝이다." - } - }, - "maylene": { - "encounter": { - "1": "지금 당신에게 도전하러 왔어요.\n$전력을 다할 테니 각오하세요!" - }, - "victory": { - "1": "나의 패배입니다…" - }, - "defeat": { - "1": "멋진 승부였습니다." - } - }, - "fantina": { - "encounter": { - "1": "당신도 도전해 보세요. 전 당신을 이기겠어요.\n$그것이 체육관 관장!" - }, - "victory": { - "1": "당신 최고로 강해요. 나 진 것 알아요." - }, - "defeat": { - "1": "너무, 너무 행복해요!" - } - }, - "byron": { - "encounter": { - "1": "젊은 트레이너여! 자네는 내 아들 강석처럼 젊군.\n$젊은 트레이너가 많아질수록, 포켓몬의 미래도 밝지!\n$그러니, 젊은이들이 넘어야할 벽으로서 상대해주겠다!" - }, - "victory": { - "1": "흠! 내 견고한 포켓몬이--져버렸군!" - }, - "defeat": { - "1": "으하하핫! 내 견고한 포켓몬은 어땠나?!" - } - }, - "olympia": { - "encounter": { - "1": "이 의식은 앞으로의 길을 정하는 것입니다. 포켓몬 승부를 시작해볼까요!" - }, - "victory": { - "1": "당신이라면 별이라도 움직여서 가야 할 길을 만들어 낼 것 같습니다." - }, - "defeat": { - "1": "우리의 길은 이제 분명해졌습니다." - } - }, - "volkner": { - "encounter": { - "1": "여기까지 왔으니, 넌 꽤 강하겠군…\n$네가 내게 포켓몬 승부의 즐거움을 상기시켜 줄 트레이너이길 바란다!" - }, - "victory": { - "1": "너 나를 이겼군…\n$네 열정과 포켓몬이 그런 너를 위해 싸워준 고귀한 방식…\n$심지어 스릴까지 넘쳤다. 아주 좋은 승부였어." - }, - "defeat": { - "1": "전혀 충격적이지 않았다…\n$이런 건 원하지 않았어!" - } - }, - "burgh": { - "encounter": { - "1": "으-음… 이번 배틀에서 이기면, 예전과는 다른 그림을 그릴 수 있을 것 같아. \n$맞아! 난 승리 뮤즈의 목소리를 선명하게 들을 수 있거든. 그럼 승부다!", - "2": "물론, 난 내 포켓몬을 자랑스럽게 생각하거든! \n$자 그럼… 바로 승부할까!" - }, - "victory": { - "1": "벌써 끝이라고? 뮤즈가 나를 버리고 떠나버렸나?", - "2": "아우… 져버렸네! 너 굉장히 강하잖아!" - }, - "defeat": { - "1": "우와… 왠지 뭔가 아름답네, 그치…", - "2": "가끔 사람들이 못난 승리라고 말하는 걸 듣곤 해. \n$그치만 난 최선을 다했다면, 어떤 승리든 아름답다고 생각하거든." - } - }, - "elesa": { - "encounter": { - "1": "컴플리트…! 확신이 들때면, 내 몸을 통하는 전기가 짜릿짜릿하게 느껴져! \n$그 감각을 느끼고 싶으니까…, 다음은 사랑스러운 포켓몬들로 너를 어질어질하게 할게!" - }, - "victory": { - "1": "어질어질하게 만들 셈이였는데, 너한테는 짜릿짜릿하게 당해버렸네." - }, - "defeat": { - "1": "왠지 부족한 기분이야… 다음에는 최선을 다할 수 있지?" - } - }, - "skyla": { - "encounter": { - "1": "드디어 대결의 시간이야! 누가 정상에 오를지 결정짓는 포켓몬 배틀, 그치? \n$난 정상에 있는 게 좋아! 높은 곳에서는 항상 멀리 볼 수 있으니까! \n$그럼, 다음은 나랑 더욱 즐거운 것을 할까?" - }, - "victory": { - "1": "배틀에서 네 상대가 되는 거, 뭔가 새로운 모티브가 되네. 고마워!" - }, - "defeat": { - "1": "이기든 지든, 항상 무언가를 얻게 돼, 그치?" - } - }, - "brycen": { - "encounter": { - "1": "다른사람이나 포켓몬과 함께 있을 때도 힘이 생긴다. \n$그 도움을 받는 것이 너를 강하게 만들었겠지. 그 힘을 보이거라!" - }, - "victory": { - "1": "너와 포켓몬과! 멋진 콤비네이션! 아름다운 우정!" - }, - "defeat": { - "1": "극한에서 시험받고 단련하도록!" - } - }, - "drayden": { - "encounter": { - "1": "지금 찾는 것은 밝은 미래를 보여줄 젋은 트레이너의 존재. \n$승부에서 모든 걸 보이도록. 네 기술, 내 경험, 그리고 포켓몬을 키워온 사랑도 함께!" - }, - "victory": { - "1": "패배하여 끓어오르는 이 마음… 뭐라고 표현해야 좋을까." - }, - "defeat": { - "1": "실망스럽군! 난 자네의 능력이 그보다 더 크다는 걸 알고있네!" - } - }, - "grant": { - "encounter": { - "1": "제가 바라는 것은 단 하나뿐입니다. \n$서로가 서로를 뛰어넘어, 더 높은 벽에 도달하는 것입니다." - }, - "victory": { - "1": "내 앞에 솟아 있는 높은 벽… 그건 바로 당신입니다." - }, - "defeat": { - "1": "인생에서 중요한 교훈은 간단합니다.\n$포기하지 않는 것.\n$이것이 전부입니다." - } - }, - "korrina": { - "encounter": { - "1": "코르니 납시오!" - }, - "victory": { - "1": "네 존재가 너의 포켓몬을 점점 진화시키고 있어!" - }, - "defeat": { - "1": "정말 멋진 배틀이었어!" - } - }, - "clemont": { - "encounter": { - "1": "아앗! 잘 부탁드립니다!" - }, - "victory": { - "1": "당신들의 승부를 향한 마음에 자극을 받았습니다!" - }, - "defeat": { - "1": "저의 슈퍼트레이닝 발명품이 효과가 있는 것 같군요!" - } - }, - "valerie": { - "encounter": { - "1": "어라,트레이너님… 슝슝 워프해서… 이렇게 만나서 반갑네. \n$그리고 내가 보기엔 당신은 노력했기에, 이 승부에 참가할 수 있게 된 것 같아. \n$찾기 힘든 요정 같은 페어리 타입, 우리 포켓몬들 사뿐하고 화사하지만 강하다구." - }, - "victory": { - "1": "난 당신이 내일을 생각하며 웃을 수 있는 것들을 찾길 바라고 있을게…" - }, - "defeat": { - "1": "앗 이런, 가엾어라…" - } - }, - "wulfric": { - "encounter": { - "1": "그거 알아? 그거… 전투와 유대감을 통해 배운다거나 하는… 거 뭐더라, 음.\n$여튼 말이지, 난 그냥 재밌어서 하는 거야. \n$내 자랑은 별로 듣고 싶지 않으려나? 자, 포켓몬을 꺼내자!" - }, - "victory": { - "1": "그거야, 바로 그거! 멋지다고. 단단한 얼음을 깨부쉈구나!" - }, - "defeat": { - "1": "나와 싸우면 그런 일이 벌어진다니까!" - } - }, - "kabu": { - "encounter": { - "1": "모든 트레이너와 포켓몬은 이기기 위해 훈련을 하고 있다. \n$하지만 싸우는 상대 역시 그만큼 노력하고 있지. \n$ 결국 승부는 실전에서, 얼마만큼 제 실력을 발휘할 수 있느냐에 달렸다." - }, - "victory": { - "1": "오늘 너와 싸울 수 있어서 참 기뻤다!" - }, - "defeat": { - "1": "내 성장을 체감하게 되는군!" - } - }, - "bea": { - "encounter": { - "1": "당신은 과연, 어떤 공격에도 흔들리지 않는 마음을 가졌을까요? \n$제가 시험해보겠습니다, 준비는 되셨습니까?" - }, - "victory": { - "1": "당신이 데리고 있는 포켓몬에게서 무예의 혼을 느꼈습니다." - }, - "defeat": { - "1": "누구나 바랄 법한 최고의 경기였습니다." - } - }, - "opal": { - "encounter": { - "1": "그럼 너의 파트너 포켓몬 다루는 실력을 내게 보여주거라!" - }, - "victory": { - "1": "핑크는 부족하지만, 너희는 좋은 트레이너와 포켓몬이구나." - }, - "defeat": { - "1": "내가 보기엔, 불합격이란다." - } - }, - "bede": { - "encounter": { - "1": "의심할 여지 없이 증명하겠습니다. 당신이 한심한지, 그리고 내가 얼마나 강한지!" - }, - "victory": { - "1": "잘 봤습니다… 뭐, 꽤 괜찮네요. 전 그렇게 열심히 하지도 않았으니까요." - }, - "defeat": { - "1": "이런 결과, 나쁘지 않군요." - } - }, - "gordie": { - "encounter": { - "1": "그럼, 빨리 끝내도록 하죠." - }, - "victory": { - "1": "구멍이 있다면 들어가고 싶군요… 아니지, 여기선 빠지고 싶다고 해야하나?" - }, - "defeat": { - "1": "이런 배틀이라면, 매번 승리가 따라올 것 같네요!" - } - }, - "marnie": { - "encounter": { - "1": "사실은, 말했던 일들이 해결 되고 나면… 결국은 나 자신이 챔피언이 되고싶다는 걸 알았으니까! \n$그러니까 너의 팀을 기분 좋게 잠들게 해주겠어!" - }, - "victory": { - "1": "응, 그래서 내가 졌구나… 그치만 너와 네 포켓몬의 좋은 점을 많이 볼 수 있었어!" - }, - "defeat": { - "1": "우리의 배틀 방식을 즐겼길 바라." - } - }, - "raihan": { - "encounter": { - "1": "챔피언도 쓰러뜨리고, 토너먼트에서도 우승해서, 위대한 나 금랑님이 얼마나 강한지 세계에 증명 해보실까!" - }, - "victory": { - "1": "역시 난 진 다음에도 멋있네! \n$조금 분하지만…. \n$기념으로 셀카라도 찍어둘까…!" - }, - "defeat": { - "1": "자, 이 순간을 기억하기 위한 셀카를 찍자고." - } - }, - "brassius": { - "encounter": { - "1": "준비는 됐겠지!? 그럼, 우리 둘의 예술적인 합작품을 한번 만들어 보도록 할까!" - }, - "victory": { - "1": "아… 아방가르드!!" - }, - "defeat": { - "1": "바로 신작을 만들러 가야 하니 이만 실례하겠다!" - } - }, - "iono": { - "encounter": { - "1": "자~ 오늘의 각오는~ 모야모야~?\n$...\n$그럼, 이제 시작해 볼까! \n$도전자님의 실력은 과연 과연~!?" - }, - "victory": { - "1": "너의 반짝임은 1000만볼트!" - }, - "defeat": { - "1": "당신의 눈길을 일렉트릭네트로 뾰로롱!" - } - }, - "larry": { - "encounter": { - "1": "그렇습니다. 심플한 것이 가장 강한 것입니다!" - }, - "victory": { - "1": "허, 이걸로 한 방 먹은 게 되었군요." - }, - "defeat": { - "1": "오늘은 저는 이만 실례하겠습니다." - } - }, - "ryme": { - "encounter": { - "1": "나의 영혼 흔들어 봐 Come On!" - }, - "victory": { - "1": "너의 Cool한 Youth 나의 Soul이 Move!" - }, - "defeat": { - "1": "Bye Bye Baby~!" - } - }, - "grusha": { - "encounter": { - "1": "내가 너를 철저하게 얼려 버리면 고민할 것도 없겠지!" - }, - "victory": { - "1": "너의 그 열기… 싫지 않아." - }, - "defeat": { - "1": "너에겐 아직 열기가 부족하구나." - } - }, - "marnie_elite": { - "encounter": { - "1": "여기까지 왔구나? 포켓몬 다루는 실력 좀 볼까!", - "2": "최선을 다할 거니까, 쉽게 넘어갈 수 있을 거라고 생각하지 마!" - }, - "victory": { - "1": "내가 지다니 믿을 수 없어… 그렇지만 네가 바란 것도 이런 승리였겠지. 잘했어!", - "2": "난 여전히 배울 게 많은 것 같아. 그래도, 멋진 승부였어!" - }, - "defeat": { - "1": "잘 싸웠지만, 내가 위야! 다음에는 더 잘해봐!", - "2": "트레이닝이 제값을 하는 것 같네. 승부에 응해줘서 고마워!" - } - }, - "nessa_elite": { - "encounter": { - "1": "조류가 오늘은 내 편인 것 같네. 휩쓸릴 준비 됐어?", - "2": "이번 승부로 파도를 일으키는 거야! 준비는 됐겠지!" - }, - "victory": { - "1": "너 그런 바다를 완벽하게 버텨냈네… 잘했어!", - "2": "내 쪽의 해류가 너와 맞지 않았던 거 같네. 잘했어!" - }, - "defeat": { - "1": "물은 항상 자기 길을 찾아 흐르지. 상쾌한 승부였어!", - "2": "잘 싸웠지만, 바다의 힘은 막을 수 없다고!" - } - }, - "bea_elite": { - "encounter": { - "1": "준비는 되셨겠죠! 제 투지가 불타고 있습니다!", - "2": "가차 없는 제 속도를 따라잡으실 수 있는지 지켜보겠습니다!" - }, - "victory": { - "1": "당신의 힘… 인상적이군요. 정말로 이기실 만합니다.", - "2": "이런 강렬함은 처음 느껴봅니다. 대단하군요!" - }, - "defeat": { - "1": "치열했던 훈련으로 또 한번 승리를 거두게 뒀군요! 고생하셨습니다!", - "2": "당신도 힘냈겠지만, 제가 더 열심히 훈련했거든요. 좋은 배틀이었습니다!" - } - }, - "allister_elite": { - "encounter": { - "1": "그림자가 떨어지네… 두려움에 맞설 준비는 됐어?", - "2": "내가 다루는 어둠을 감당할 수 있는지 지켜볼게." - }, - "victory": { - "1": "너 그림자를 쫓아내 버렸구나… 일단은. 잘했어.", - "2": "네 빛이 어둠을 관통해 버렸네. 훌륭해." - }, - "defeat": { - "1": "그림자가 말했어… 네 힘은 아직 부족한 것 같아.", - "2": "어둠의 승리… 다음번에는 빛을 보게 될 거야." - } - }, - "raihan_elite": { - "encounter": { - "1": "폭풍이 몰아치는군! 네가 이 배틀에서도 견뎌낼 수 있는지 지켜보겠어!", - "2": "폭풍의 눈과 마주칠 준비는 됐겠지!" - }, - "victory": { - "1": "폭풍을 이겨내다니… 정말 놀라운걸!", - "2": "너 바람에 완벽하게 올라탔구나… 대단한 승부였어!" - }, - "defeat": { - "1": "폭풍을 견디고, 또 다른 승리도 잡아버렸네! 좋은 승부였어!", - "2": "넌 내 폭풍을 잡아냈잖아! 다음엔 더 잘해봐!" - } - }, - "alder": { - "encounter": { - "1": "하나지방에서 가장 강한 트레이너를 상대할 준비는 됐나?" - }, - "victory": { - "1": "장하구나! 실로 견줄 자가 천하에 없도다!" - }, - "defeat": { - "1": "나의 마음에 상쾌한 바람이 지나갔다...\n$정말 대단한 노력이다!" - } - }, - "kieran": { - "encounter": { - "1": "난 노력을 통해 강해지고 또 강해지지!\n$난 지지 않아." - }, - "victory": { - "1": "믿을 수 없어...\n$정말 재밌고 가슴 뛰는 배틀이었어!" - }, - "defeat": { - "1": "세상에 마상에! 정말 멋진 배틀이었어!\n$네가 더 열심히 훈련할 시간이야." - } - }, - "rival": { - "encounter": { - "1": "@c{smile}오, 찾았다! 떠나려는 건 알고 있었지만\n인사정도는 해줄 줄 알았는데…\n$@c{smile_eclosed}그러니까 정말로 꿈을 좇겠다는 거지?\n듣고도 못 믿었다니까.\n$@c{serious_smile_fists}여기까지 온 김에, 배틀은 어때?\n준비가 됐나 보자구.\n$@c{serious_mopen_fists}망설이지 말고,\n너의 진면목을 보여봐!" - }, - "victory": { - "1": "@c{shock}와… 정말 깔끔하게 당했네.\n초보자 맞아?\n$@c{smile}운이 따른 건지도 모르겠지만…\n그래도 정말 꿈을 이룰 지도.\n$그나저나, 박사님께서 이걸 전해달라고 하시더라.\n좋아 보이던데.\n$@c{serious_smile_fists}아무튼, 힘 내는거야!" - } - }, - "rival_female": { - "encounter": { - "1": "@c{smile_wave}여깄구나! 찾고 있었어!\n@c{angry_mopen}절친한테 작별인사도 안 하는거야?\n$@c{smile_ehalf}꿈을 향해 떠나는거구나. 그렇지?\n이런 날이 오긴 하네…\n$@c{smile}아무튼, 날 까먹고 가버린 건 용서해주겠어.\n@c{smile_wave_wink}배틀을 해준다면 말야!\n$@c{angry_mopen}최선을 다 해 봐.\n모험을 시작과 동시에 끝내고 싶지 않다면!" - }, - "victory": { - "1": "@c{shock}왜 벌써 이렇게 센 건데?!@d{96}\n@c{angry}아니면 뭔가 속임수, 그런 거?\n$@c{smile_wave_wink}농담, 농담!@d{64} @c{smile_eclosed}내가 진 거 맞아…\n너 정말 앞으로도 잘 하겠는데.\n$@c{smile}아 그래, 박사님께서 전해달라던 물건.\n도움이 되면 좋겠어!\n$@c{smile_wave}항상 최선을 다 하라구! 믿고 있을게!" - } - }, - "rival_2": { - "encounter": { - "1": "@c{smile}어라, 너 여깄었구나?\n@c{smile_eclosed}아직도 전승 중이라, 이거지…?\n$@c{serious_mopen_fists}널 쫓아서 온 것 같아 보이겠지만, 오해야.\n$@c{serious_smile_fists}그래도 솔직히 그 때부터 쭉 재대결이 간절했어.\n$그 동안의 훈련도 있겠다 마침 좋은 기회같지?\n$@c{serious_mopen_fists}자, 전처럼!\n배틀이야!" - }, - "victory": { - "1": "@c{neutral_eclosed}이런. 자신감이 과했나봐.\n$@c{smile}그래, 또 지고 말았네.\n@c{serious_mopen_fists}좀 더 열심히 훈련을 해야겠어!\n\n$@c{smile}너한테 도움이 필요할 것 같지는 않지만, 이거.\n남는 게 있어서 말이야.\n$@c{serious_smile_fists}물론 이번이 마지막이야, 알겠지?\n공평하게 하지 않으면 그게 내 핑계거리가 되고 말거야.\n$@c{smile}이제 갈게. 앞으로도 조심하고, 이벤트도 즐겁게 보내!" - } - }, - "rival_2_female": { - "encounter": { - "1": "@c{smile_wave}우연이네, 이런 곳에서 만나고.\n아직 연전연승이구나? @c{angry_mopen}나쁘지 않아!\n$@c{angry_mopen}무슨 생각하고있는지 알겠어, 하지만 아냐.\n@c{smile_eclosed}우연히 근처에 있었을 뿐이라구.\n$@c{smile_ehalf}그래도 마침, 가끔은 지는것도 괜찮다고 알려주고 싶었는데.\n$@c{smile}우린 실수를 통해서도 성장할 수 있잖아.\n때로는 성공을 반복할 때보다도 더 많이 말야.\n$@c{angry_mopen}어쨌든간에, 나도 이런 때를 위해 훈련해왔으니까,\n너도 최선을 다 하는게 좋을 거야!" - }, - "victory": { - "1": "@c{neutral}이… 번에도 져버릴 줄이야…\n$@c{smile}으, 그래. 더 열심히 훈련하면 되겠지!\n$@c{smile_wave}이것도 하나 더 챙겨왔으니 받아!\n@c{smile_wave_wink}감사 인사는 됐다구~.\n$@c{angry_mopen}하지만, 마지막이야!\n또 이렇게 공짜로 나눠주진 않을 테니까!\n$@c{smile_wave}그럼! 이벤트 잘 즐기고!" - }, - "defeat": { - "1": "가끔은 지는 것도 괜찮아…" - } - }, - "rival_3": { - "encounter": { - "1": "@c{smile}이게 누구야! 오랜만이야.\n@c{neutral}역시나… 쭉 이기고 있었구나?\n$@c{neutral_eclosed}상황이 좀… 그렇더라. \n혼자 마을로 돌아가봤자 너 없인 예전같아질 수 없겠지.\n$@c{serious}이기적인 이야기란건 알지만 말해야겠어.\n@c{neutral_eclosed}너 지금 좀 아닌 것 같아.\n$@c{serious}계속 이기기만 하겠다는 건 너무 비현실적이야.\n사람은 원래 꺾여가며 성장하는 거라고.\n$@c{neutral_eclosed}물론 지금까지는 잘 해왔다고 생각하겠지만,\n갈 길이 멀지. @c{neutral}대비는 되어 있어?\n$@c{serious_mopen_fists}그렇다면, 내게 증명해 줘." - }, - "victory": { - "1": "@c{angry_mhalf}말도 안 돼… 한시도 쉬지 않고 훈련했는데…\n어째서 전혀 닿을 수 없는거야?" - } - }, - "rival_3_female": { - "encounter": { - "1": "@c{smile_wave}오랜만이야! 아직도 안 졌구나.\n@c{angry}거슬리게 말야. @c{smile_wave_wink}농담이야!\n$@c{smile_ehalf}하지만 진짜, 고향이 그립진 않아? 집이나… 나는?\n나… 나는, 네가 정말 그리웠어.\n$@c{smile_eclosed}난 너의 꿈과 모든 것을 응원하지만,\n넌 언젠가 패배를 겪게 될 거야.\n$@c{smile}그 땐 언제나처럼 내가 곁에 있어줄게.\n@c{angry_mopen}내가 얼마나 강해졌는지도, 지금 보여 줄 테니까!" - }, - "victory": { - "1": "@c{shock}이렇게까지 했는데도… 모자랐던 거야…?\n이러면 정말로 너는 이제 영영…" - }, - "defeat": { - "1": "최선을 다 했지.\n집에 갈 시간이야." - } - }, - "rival_4": { - "encounter": { - "1": "@c{neutral}안녕.\n$잡담은 넘어가자.\n@c{neutral_eclosed}너에게 이기기 위해 찾아왔어. 간단하지.\n$@c{serious_mhalf_fists}이제 잠재력을 끌어내는 법은 확실히 알겠어.\n$@c{smile}잠이나 사회적인 활동들.\n줄일 수 있는 불필요한 시간이 아주 많더라.\n$@c{serious_mopen_fists}오직 승리 뿐이야.\n이제 아무것도 중요하지 않아.\n$@c{neutral_eclosed}나도 이제 더 이상은 지지 않게 됐어.\n@c{smile_eclosed}네 그 철학이 완전히 틀린 건 아니었나봐.\n$@c{angry_mhalf}패배는 약자에게 주어지는 것이고, 난 더 이상 약하지 않아.\n$@c{serious_mopen_fists}준비해." - }, - "victory": { - "1": "@c{neutral}너…@d{64} 너 대체 뭐야?" - } - }, - "rival_4_female": { - "encounter": { - "1": "@c{neutral}나야! 날 잊어버리고 있던 건… 아니지?\n$@c{smile}네 업적에 자랑스러워 할 때가 됐어. 축하해!\n하지만 네 여행도 여기까지야.\n$@c{smile_eclosed}너는 나도 모르던 내 안의 무언가를 일깨웠어.\n이제 훈련 말고는 아무것도 하지 않아.\n$@c{smile_ehalf}먹지도 자지도 않고, 그저 하루종일.\n더 강해지고 있어.\n$@c{neutral}사실, 나… 이제 내가 뭔지도 잘 모르겠어.\n$그렇지만 기량만은, 정점에 다다랐지.\n아무도 내게 이길 수 없을거야.\n$그거 알아? 이게 전부 네 덕이야.\n@c{smile_ehalf}감사해야할지 증오해야할지 모르겠네.\n$@c{angry_mopen}준비해." - }, - "victory": { - "1": "@c{neutral}너…@d{64} 너 대체 뭐야?" - }, - "defeat": { - "1": "$@c{smile}네가 키운 상대야. 자랑스럽지?" - } - }, - "rival_5": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - } - }, - "rival_5_female": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - }, - "defeat": { - "1": "$@c{smile_ehalf}…" - } - }, - "rival_6": { - "encounter": { - "1": "@c{smile_eclosed}다시 만났구나.\n$@c{neutral}모든 걸 되짚어 봤어.\n이 기이함에도 이유가 있더라.\n$@c{neutral_eclosed}널 이기고자 하는 욕구, 아니면 네 꿈…\n이건 그저 더 큰 무언가의 일부일 뿐이었어.\n$@c{serious}개인의 문제가 아니라 세계 전체가 엮인 일이었고…\n@c{serious_mhalf_fists}난 널 한계까지 밀어붙이기 위한 도구였던 거지.\n$@c{neutral_eclosed}내가 잘 쓰였는진 모르겠지만 어쨌든 최선을 다 했고.\n$@c{neutral}끝끝내 도착한 이곳은 끔찍하지만…\n언젠가 와 본 것 같아.\n$@c{serious_mhalf_fists}너도 그렇게 느끼지?\n$@c{serious}…그리고 무언가가 이야기하고 있어.\n오랫동안 세상에 알려져온 무언가가.\n$우리가 함께했던 소중한 시간들은 이제 그저 아득해.\n$@c{neutral_eclosed}실제로 일어난 일이긴 할까?\n$@c{serious_mopen_fists}너는 계속 나아가야 해. 그렇지 않으면 끝나지 않아.\n오직 너만이 할 수 있어.\n$@c{serious_smile_fists}잘 모르겠지만, 하나만은 확실해.\n$@c{serious_mopen_fists}여기서 날 쓰러뜨리지 못한다면, 너에게 기회는 없을거란걸." - }, - "victory": { - "1": "@c{smile_eclosed}내 역할은 여기까진 것 같아.\n$하나만 약속해 줘.\n@c{smile}세상을 원래대로 되돌리고 나면, 집으로 돌아오는거야." - } - }, - "rival_6_female": { - "encounter": { - "1": "@c{smile_ehalf}또 이렇게 만났네.\n$@c{smile_eclosed}나 머릿속이 빙글빙글 도는 것 같아…\n$@c{smile_ehalf}모든 것이 이상하게 보이는 이유.\n분명 뭔가가 있어…\n$@c{smile}너는 너의 꿈이 있고,\n나는 나의 야망이 있지…\n$이 모든것, 우리가 하고 있는 모든 일들이\n더 큰 무언가를 위한 것임을 느낄 수밖에 없어.\n$@c{smile_eclosed}나는 아마 너를…\n한계까지 몰아붙여야 하는 거야.\n$@c{smile_ehalf}잘 해왔는지는 모르겠는데, 최선은 다 했어.\n$이 이상하고 무서운 곳…\n모든게 선명하게 보이고…\n$이건… 오래전부터 세상에 알려져온 전부.\n$@c{smile_eclosed}우리가 함께해온 추억들이, 이제는 거의 떠오르지 않아.\n$@c{smile_ehalf}실제로 일어났던 일일까? 너무 멀게만 느껴지는데…\n$@c{angry_mopen}계속 나아가야 해. 안 그러면, 영원히 끝나지 않을 거야. \n오직 너만이 할 수 있어.\n$@c{smile_ehalf}난… 이 모든게 무슨 의미가 있는지는 잘 모르겠지만…\n이거 하나는 느끼고 있어.\n$@c{neutral}여기서 날 쓰러뜨리지 못한다면, 너에게 기회는 없을거란걸." - }, - "victory": { - "1": "@c{smile_ehalf}나… 내 소임을 다 한 기분이야…\n$@c{smile_eclosed}약속해 줘… 세상을 원래대로 되돌리고서… \n집으로… 무사히 돌아오는 거야.\n$@c{smile_ehalf}…고마워." - } - } -} diff --git a/src/locales/ko/dialogue-final-boss-male.json b/src/locales/ko/dialogue-final-boss-male.json deleted file mode 100644 index d9b8dfc4526..00000000000 --- a/src/locales/ko/dialogue-final-boss-male.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "encounter": "드디어 때가 다시 도래했다.\n당도한 연유를 아는가?\n$이미 도달한 적이 있기에 이 자리에 있다.\n셀 수도 없이 많이.\n$아니, 사실 셀 수는 있지.\n정확히 너의 {{cycleCount}}번째다.\n$매 번 태초의 정신으로 되돌아갔을 뿐.\n하지만 어떻게든, 흔적은 남는다.\n$실패만을 반복했을 뿐이지만,\n지금은 네 안에 무언가가 있구나.\n\n$홀로 선 것처럼 보이나, 무언가 이질적인…\n$마침내 그간의 갈망을 해소해주는가?\n수천 년 간 기다려온 도전을?\n$시작하지.", - "firstStageWin": "그렇군. 정말로 있었어.\n이제 주저할 필요는 없다.\n$실망시키지 않도록.", - "secondStageWin": "…고무적이군." -} \ No newline at end of file diff --git a/src/locales/ko/dialogue-final-boss-female.json b/src/locales/ko/dialogue-final-boss.json similarity index 100% rename from src/locales/ko/dialogue-final-boss-female.json rename to src/locales/ko/dialogue-final-boss.json diff --git a/src/locales/ko/dialogue-misc-male.json b/src/locales/ko/dialogue-misc-male.json deleted file mode 100644 index 8445c5c4810..00000000000 --- a/src/locales/ko/dialogue-misc-male.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "ending": "@c{smile}오? 이긴거야?@d{96} @c{smile_eclosed}진즉 알았어야 했는데.\n아무튼, 돌아왔구나.\n$@c{smile}다 끝난거야.@d{64} 네가 굴레를 끝장냈어.\n$@c{serious_smile_fists}네 꿈도 이뤄졌고말야.\n진짜로 한 번도 안 졌잖아.\n$@c{neutral}기억하는 건 우리들 뿐일 모양이지만.@d{96}\n그래도, 괜찮지?\n$@c{serious_smile_fists}오늘의 일은\n너와 나의 마음 속에 항상 함께할 거야.\n$@c{smile_eclosed}여기 구경도 충분히 했으니\n이제 집에 가자.\n$@c{serious_smile_fists}되돌아가서, 다시 배틀을 할 수도 있지 않을까?\n네가 원한다면 말야.", - "ending_female": "@c{shock}돌아왔구나?@d{32} 그 말은…@d{96} 이겼어?!\n@c{smile_ehalf}그럴 줄 알았다니까.\n$@c{smile_eclosed}물론… 언제나 느껴왔지.\n@c{smile}끝난 거, 맞지? 이 굴레를 말이야.\n$@c{smile_ehalf}네 꿈도 이뤘고 말이야.\n어떻게 한번도 안 졌대?\n$네가 한 일은 나만 기억하게 될 모양이지만.\n@c{angry_mopen}나, 안 까먹어볼 테니까!\n$@c{smile_wave_wink}농담이야!@d{64} @c{smile}절대 안 잊어버릴 거야.@d{32}\n마음 속엔 쭉 남아있을 수 있게.\n$@c{smile_wave}어쨌든,@d{64} 시간이 좀 늦었어…@d{96}\n이런 곳에서 할 말은 아닌가?\n$집에 가자. @c{smile_wave_wink}아마 내일은,\n추억을 되짚어보기 위한 배틀을 해볼 수 있을 거야.", - "ending_endless": "끝에 도달하신 것을 축하드립니다!\n더 많은 컨텐츠를 기다려주세요.", - "ending_name": "Devs" -} \ No newline at end of file diff --git a/src/locales/ko/dialogue-misc-female.json b/src/locales/ko/dialogue-misc.json similarity index 100% rename from src/locales/ko/dialogue-misc-female.json rename to src/locales/ko/dialogue-misc.json diff --git a/src/locales/ko/dialogue-male.json b/src/locales/ko/dialogue.json similarity index 100% rename from src/locales/ko/dialogue-male.json rename to src/locales/ko/dialogue.json diff --git a/src/locales/pt_BR/config.ts b/src/locales/pt_BR/config.ts index 9d7dee178b6..9e8377149c1 100644 --- a/src/locales/pt_BR/config.ts +++ b/src/locales/pt_BR/config.ts @@ -15,14 +15,10 @@ import bgmName from "./bgm-name.json"; import biome from "./biome.json"; import challenges from "./challenges.json"; import commandUiHandler from "./command-ui-handler.json"; -import dialogueMale from "./dialogue-male.json"; -import dialogueFemale from "./dialogue-female.json"; -import dialogueEndbossMale from "./dialogue-final-boss-male.json"; -import dialogueEndbossFemale from "./dialogue-final-boss-female.json"; -import dialogueMiscMale from "./dialogue-misc-male.json"; -import dialogueMiscFemale from "./dialogue-misc-female.json"; -import dialogueDoubleBattleMale from "./dialogue-double-battle-male.json"; -import dialogueDoubleBattleFemale from "./dialogue-double-battle-female.json"; +import dialogue from "./dialogue.json"; +import battleSpecDialogue from "./dialogue-final-boss.json"; +import miscDialogue from "./dialogue-misc.json"; +import doubleBattleDialogue from "./dialogue-double-battle.json"; import egg from "./egg.json"; import fightUiHandler from "./fight-ui-handler.json"; import filterBar from "./filter-bar.json"; @@ -76,14 +72,10 @@ export const ptBrConfig = { commandUiHandler, common, achv, - PGMdialogue: dialogueMale, - PGFdialogue: dialogueFemale, - PGMbattleSpecDialogue: dialogueEndbossMale, - PGFbattleSpecDialogue: dialogueEndbossFemale, - PGMmiscDialogue: dialogueMiscMale, - PGFmiscDialogue: dialogueMiscFemale, - PGMdoubleBattleDialogue: dialogueDoubleBattleMale, - PGFdoubleBattleDialogue: dialogueDoubleBattleFemale, + dialogue, + battleSpecDialogue, + miscDialogue, + doubleBattleDialogue, egg, fightUiHandler, filterBar, diff --git a/src/locales/pt_BR/dialogue-double-battle-female.json b/src/locales/pt_BR/dialogue-double-battle-female.json deleted file mode 100644 index d8c28a51796..00000000000 --- a/src/locales/pt_BR/dialogue-double-battle-female.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "blue_red_double": { - "encounter": { - "1": "Blue: Ei Red, vamos mostrar do que somos feitos!\n$Red: ...\n$Blue: Este é o poder da Cidade de Pallet!" - }, - "victory": { - "1": "Blue: Essa foi uma ótima batalha!\n$Red: ..." - } - }, - "red_blue_double": { - "encounter": { - "1": "Red: ...!\n$Blue: Ele nunca fala muito.\n$Blue: Mas não se deixe enganar! Ele é um campeão, afinal!" - }, - "victory": { - "1": "Red: ...!\n$Blue: Da próxima vez, vamos vencer você!" - } - }, - "tate_liza_double": { - "encounter": { - "1": "Tate: Está surpreso?\n$Liza: Somos dois líderes de ginásio ao mesmo tempo!\n$Tate: Somos gêmeos!\n$Liza: Não precisamos falar para nos entender!\n$Tate: Duas vezes o poder...\n$Liza: Você consegue lidar com isso?" - }, - "victory": { - "1": "Tate: O quê? Nossa combinação foi perfeita!\n$Liza: Parece que precisamos treinar mais..." - } - }, - "liza_tate_double": { - "encounter": { - "1": "Liza: Hihihi... Está surpreso?\n$Tate: Sim, somos realmente dois líderes de ginásio ao mesmo tempo!\n$Liza: Este é meu irmão gêmeo Tate!\n$Tate: E esta é minha irmã gêmea Liza!\n$Liza: Não acha que somos uma combinação perfeita?" - }, - "victory": { - "1": "Liza: Nós somos...\n$Tate: ...não tão fortes quanto pensávamos?" - } - }, - "wallace_steven_double": { - "encounter": { - "1": "Steven: Wallace, vamos mostrar a eles o poder dos campeões!\n$Wallace: Vamos mostrar o poder de Hoenn!\n$Steven: Vamos lá!" - }, - "victory": { - "1": "Steven: Essa foi uma ótima batalha!\n$Wallace: Vamos vencer da próxima vez!" - } - }, - "steven_wallace_double": { - "encounter": { - "1": "Steven: Você tem algum Pokémon raro?\n$Wallace: Steven... Estamos aqui para uma batalha, não para mostrar nossos Pokémon.\n$Steven: Ah... Entendi... Vamos lá então!" - }, - "victory": { - "1": "Steven: Agora que terminamos a batalha, vamos mostrar nossos Pokémon!\n$Wallace: Steven..." - } - }, - "alder_iris_double": { - "encounter": { - "1": "Alder: Somos os treinadores mais fortes de Unova!\n$Iris: Lutas contra treinadores fortes são as melhores!" - }, - "victory": { - "1": "Alder: Uau! Você é super forte!\n$Iris: Vamos vencer da próxima vez!" - } - }, - "iris_alder_double": { - "encounter": { - "1": "Iris: Bem-vinda, Desafiante! Eu sou A Campeã de Unova!\n$Alder: Iris, você não está um pouco empolgada demais?" - }, - "victory": { - "1": "Iris: Uma derrota como essa não é fácil de engolir...\n$Alder: Mas só ficaremos mais fortes a cada derrota!" - } - }, - "piers_marnie_double": { - "encounter": { - "1": "Marnie: Irmão, vamos mostrar a eles o poder de Spikemuth!\n$Piers: Nós trazemos a escuridão!" - }, - "victory": { - "1": "Marnie: Você trouxe luz para nossa escuridão!\n$Piers: Está muito claro..." - } - }, - "marnie_piers_double": { - "encounter": { - "1": "Piers: Prontos para um show?\n$Marnie: Irmão... Eles estão aqui para lutar, não para cantar..." - }, - "victory": { - "1": "Piers: Agora esse foi um ótimo show!\n$Marnie: Irmão..." - } - } -} \ No newline at end of file diff --git a/src/locales/pt_BR/dialogue-double-battle-male.json b/src/locales/pt_BR/dialogue-double-battle.json similarity index 93% rename from src/locales/pt_BR/dialogue-double-battle-male.json rename to src/locales/pt_BR/dialogue-double-battle.json index 4c2196de7f6..4d1c7d90c9b 100644 --- a/src/locales/pt_BR/dialogue-double-battle-male.json +++ b/src/locales/pt_BR/dialogue-double-battle.json @@ -57,7 +57,8 @@ }, "iris_alder_double": { "encounter": { - "1": "Iris: Bem-vindo, Desafiante! Eu sou A Campeã de Unova!\n$Alder: Iris, você não está um pouco empolgada demais?" + "1": "Iris: Bem-vindo, Desafiante! Eu sou A Campeã de Unova!\n$Alder: Iris, você não está um pouco empolgada demais?", + "1_female": "Iris: Bem-vinda, Desafiante! Eu sou A Campeã de Unova!\n$Alder: Iris, você não está um pouco empolgada demais?" }, "victory": { "1": "Iris: Uma derrota como essa não é fácil de engolir...\n$Alder: Mas só ficaremos mais fortes a cada derrota!" diff --git a/src/locales/pt_BR/dialogue-female.json b/src/locales/pt_BR/dialogue-female.json deleted file mode 100644 index a25230117e3..00000000000 --- a/src/locales/pt_BR/dialogue-female.json +++ /dev/null @@ -1,2691 +0,0 @@ -{ - "youngster": { - "encounter": { - "1": "Eai, quer batalhar?", - "2": "Você também é uma treinadora nova?", - "3": "Eai, nunca te vi antes. Vamos batalhar!", - "4": "Acabei de perder, então estou tentando encontrar mais Pokémon.\nEspera! Você parece fraca! Vamos batalhar!", - "5": "A gente já se conheceu antes? Não lembro muito bem. Enfim, prazer te conhecer!", - "6": "Beleza! Vamos nessa!", - "7": "Beleza! Lá vou eu! Vou te mostrar meu poder!", - "8": "Hahaha... Vou te mostrar o quão incríveis são meus Pokémon!", - "9": "Sem perder tempo com cumprimentos. Vamos logo, quando estiver pronta!", - "10": "Não baixe a guarda, ou você pode acabar chorando quando uma criança te vencer.", - "11": "Eu criei meus Pokémon com muito cuidado. Você não tem permissão para machucá-los!", - "12": "Que bom que você chegou! Não vai ser fácil daqui pra frente.", - "13": "As batalhas continuam para sempre! Bem-vinda ao mundo sem fim!" - }, - "victory": { - "1": "Uau! Você é forte!", - "2": "Eu não tive chance, né?", - "3": "Vou te encontrar de novo quando for mais velho e te vencer!", - "4": "Ugh. Não tenho mais Pokémon.", - "5": "Não acredito… NÃO ACREDITO! Como pude de novo…", - "6": "Não! Eu perdi!", - "7": "Uau! Você é incrível! Estou surpreso!", - "8": "Pode ser… Como… Eu e meus Pokémon somos os mais fortes, porém…", - "9": "Não vou perder da próxima vez! Vamos batalhar de novo algum dia!", - "10": "Aff! Não vê que sou apenas uma criança? Não foi justo você ir com tudo!", - "11": "Seus Pokémon são incríveis! Troca comigo!", - "12": "Me empolguei um pouco antes, mas sobre qual trabalho eu estava falando?", - "13": "Ahaha! É isso aí! Você já está em casa nesse mundo!" - } - }, - "lass": { - "encounter": { - "1": "Vamos batalhar, pode ser?", - "2": "Você parece uma treinadora nova. Vamos batalhar!", - "3": "Não te reconheço. Que tal uma batalha?", - "4": "Vamos ter uma batalha Pokémon divertida!", - "5": "Vou te mostrar como realmente usar Pokémon!", - "6": "Uma batalha séria começa com um começo sério! Tem certeza que está pronta?", - "7": "Você só é jovem uma vez. E só tem uma chance em cada batalha. Logo, você será apenas uma memória.", - "8": "Vai com calma comigo, tá? Mas vou lutar sério!", - "9": "A escola é chata. Não tenho nada para fazer. Só estou batalhando para passar o tempo." - }, - "victory": { - "1": "Isso foi impressionante! Tenho muito a aprender.", - "2": "Não pensei que você me venceria tão fácil…", - "3": "Espero que possamos ter uma revanche um dia.", - "4": "Isso foi incrivelmente divertido! Você me esgotou totalmente…", - "5": "Você realmente me ensinou uma lição! Você é incrível!", - "6": "Sério, eu perdi. Isso é, tipo, seriamente deprimente, mas você foi seriamente legal.", - "7": "Não preciso de memórias como essa. Deletando memória…", - "8": "Ei! Eu te disse para pegar leve comigo! Mesmo assim, você é legal quando fica séria.", - "9": "Estou realmente cansando de batalhar… Deve haver algo novo para fazer…" - } - }, - "breeder": { - "encounter": { - "1": "Pokémon obedientes, Pokémon egoístas… Pokémon têm características únicas.", - "2": "Embora minha criação e comportamento sejam ruins, criei meus Pokémon bem.", - "3": "Hmm, você disciplina seus Pokémon? Mimar demais não é bom." - }, - "victory": { - "1": "É importante nutrir e treinar as características de cada Pokémon.", - "2": "Ao contrário do meu lado diabólico, esses são bons Pokémon.", - "3": "Muito elogio pode estragar tanto Pokémon quanto pessoas." - }, - "defeat": { - "1": "Você não deve ficar com raiva dos seus Pokémon, mesmo se perder uma batalha.", - "2": "Certo? Pokémon bons, né? Eu sou adequado para criar coisas.", - "3": "Não importa o quanto você ame seus Pokémon, ainda precisa discipliná-los quando se comportam mal." - } - }, - "breeder_female": { - "encounter": { - "1": "Pokémon nunca te traem. Eles retribuem todo o amor que você dá a eles.", - "2": "Quer uma dica para treinar bons Pokémon?", - "3": "Eu criei esses Pokémon muito especiais usando um método especial." - }, - "victory": { - "1": "Ugh… Não era para ser assim. Será que administrei a mistura errada?", - "2": "Como isso aconteceu com meus Pokémon… O que você está dando de comer aos seus Pokémon?", - "3": "Se eu perder, isso significa que eu estava só matando o tempo. Não machuca meu ego nem um pouco." - }, - "defeat": { - "1": "Isso prova que meus Pokémon aceitaram meu amor.", - "2": "O verdadeiro truque para treinar bons Pokémon é capturar bons Pokémon.", - "3": "Pokémon serão fortes ou fracos dependendo de como você os cria." - } - }, - "fisherman": { - "encounter": { - "1": "Anem! Você me fez perder uma fisgada!\nO que vai fazer sobre isso?", - "2": "Sai daqui! Você está assustando os Pokémon!", - "3": "Vamos ver se você consegue fisgar uma vitória!" - }, - "victory": { - "1": "Esqueça isso.", - "2": "Da próxima vez, eu vou pescar a vitória!", - "3": "Acho que subestimei a força das correntes dessa vez." - } - }, - "fisherman_female": { - "encounter": { - "1": "Uau! Peguei um grande!", - "2": "Linha lançada, pronta para pescar o sucesso!", - "3": "Pronta para fazer ondas!" - }, - "victory": { - "1": "Vou voltar com um anzol mais forte.", - "2": "Vou pescar a vitória na próxima vez.", - "3": "Estou só afiando meus anzóis para a revanche!" - } - }, - "swimmer": { - "encounter": { - "1": "Hora de mergulhar!", - "2": "Vamos surfar nas ondas da vitória!", - "3": "Pronto para fazer um splash!" - }, - "victory": { - "1": "Molhado na derrota!", - "2": "Uma onda de derrota!", - "3": "De volta à praia, eu acho." - } - }, - "backpacker": { - "encounter": { - "1": "Prepare-se, vamos começar!", - "2": "Vamos ver se você consegue acompanhar!", - "3": "Prepare-se, desafiante!", - "4": "Passei 20 anos tentando me encontrar… Mas onde estou?" - }, - "victory": { - "1": "Dessa vez tropecei!", - "2": "Ah, acho que estou perdido.", - "3": "Caminho sem saída!", - "4": "Espere um segundo! Ei! Você não sabe quem eu sou?" - } - }, - "ace_trainer": { - "encounter": { - "1": "Você parece bastante confiante.", - "2": "Seus Pokémon… Mostre-os para mim…", - "3": "Como sou um Treinador Ás, as pessoas acham que sou forte.", - "4": "Você sabe o que é preciso para ser um Treinador Ás?" - }, - "victory": { - "1": "Sim… Você tem bons Pokémon…", - "2": "O quê?! Mas sou um gênio das batalhas!", - "3": "Claro, você é a personagem principal!", - "4": "OK! OK! Você poderia ser uma Treinador Ás!" - }, - "defeat": { - "1": "Estou dedicando corpo e alma às batalhas de Pokémon!", - "2": "Tudo dentro das minhas expectativas… Nada para se surpreender…", - "3": "Eu achava que cresceria para ser uma pessoa frágil que parecia que quebraria se você apertasse muito.", - "4": "Claro que sou forte e não perco. É importante ganhar com graça." - } - }, - "parasol_lady": { - "encounter": { - "1": "Hora de embelezar o campo de batalha com elegância e postura!" - }, - "victory": { - "1": "Minha elegância permanece inabalável!" - } - }, - "twins": { - "encounter": { - "1": "Prepare-se, porque quando nos unimos, é o dobro do problema!", - "2": "Dois corações, uma estratégia – vamos ver se você consegue acompanhar nosso poder de gêmeos!", - "3": "Espero que esteja pronta para o dobro do problema, porque estamos prestes a causar!" - }, - "victory": { - "1": "Podemos ter perdido essa rodada, mas nosso vínculo permanece inquebrável!", - "2": "Nosso espírito de gêmeos não será apagado por muito tempo.", - "3": "Voltaremos mais fortes como uma dupla dinâmica!" - }, - "defeat": { - "1": "O poder dos gêmeos reina supremo!", - "2": "Dois corações, um triunfo!", - "3": "Dobro de sorrisos, dobro da dança da vitória!" - } - }, - "cyclist": { - "encounter": { - "1": "Prepare-se para comer poeira!", - "2": "Prepare-se, desafiante! Estou prestes a te deixar para trás!", - "3": "Pé no pedal, vamos ver se você consegue acompanhar!" - }, - "victory": { - "1": "As rodas podem estar paradas, mas a determinação continua a pedalar.", - "2": "Fui mais rápido!", - "3": "O caminho para a vitória tem muitas curvas e voltas para explorar." - } - }, - "black_belt": { - "encounter": { - "1": "Elogio sua coragem ao me desafiar! Pois eu sou o que tem o chute mais forte!", - "2": "Oh, entendo. Você gostaria de ser cortada em pedaços? Ou prefere o papel de saco de pancadas?" - }, - "victory": { - "1": "Oh. Os Pokémon fizeram a luta. Meu chute forte não ajudou em nada.", - "2": "Hmmm… Se eu ia perder de qualquer maneira, esperava ficar totalmente destruído no processo." - } - }, - "battle_girl": { - "encounter": { - "1": "Você não precisa tentar me impressionar. Você pode perder contra mim." - }, - "victory": { - "1": "É difícil dizer adeus, mas estamos ficando sem tempo…" - } - }, - "hiker": { - "encounter": { - "1": "Minha barriga de meia-idade me deu tanta gravidade quanto as montanhas que eu escalo!", - "2": "Herdei esse corpo ossudo dos meus pais… Sou como uma cadeia de montanhas viva…" - }, - "victory": { - "1": "Pelo menos não posso perder quando se trata de IMC!", - "2": "Não é suficiente… Nunca é suficiente. Meu colesterol ruim não está alto o suficiente…" - } - }, - "ranger": { - "encounter": { - "1": "Quando estou cercado pela natureza, a maioria das outras coisas deixa de importar.", - "2": "Quando estou vivendo sem natureza na minha vida, às vezes sinto uma crise de ansiedade se aproximando." - }, - "victory": { - "1": "Não importa para a vastidão da natureza se eu ganhar ou perder…", - "2": "Algo assim é bastante trivial comparado aos sentimentos sufocantes da vida na cidade." - }, - "defeat": { - "1": "Ganhei a batalha. Mas a vitória não é nada comparada à vastidão da natureza…", - "2": "Tenho certeza de que como você se sente não é tão ruim se comparar aos meus ataques de ansiedade…" - } - }, - "scientist": { - "encounter": { - "1": "Minha pesquisa levará este mundo à paz e alegria." - }, - "victory": { - "1": "Sou um gênio… Não devo perder para alguém como você…" - } - }, - "school_kid": { - "encounter": { - "1": "Heehee. Estou confiante nos meus cálculos e análises.", - "2": "Estou ganhando o máximo de experiência que posso porque quero ser um Líder de Ginásio um dia." - }, - "victory": { - "1": "Aff… Cálculo e análise talvez não sejam páreo para o acaso…", - "2": "Até experiências difíceis e desafiadoras têm seu propósito, eu acho." - } - }, - "artist": { - "encounter": { - "1": "Eu costumava ser popular, mas agora estou acabado." - }, - "victory": { - "1": "À medida que os tempos mudam, os valores também mudam. Percebi isso tarde demais." - } - }, - "guitarist": { - "encounter": { - "1": "Prepare-se para sentir o ritmo da derrota enquanto eu toco minha vitória!" - }, - "victory": { - "1": "Silenciado por agora, mas minha melodia de resiliência continuará a tocar." - } - }, - "worker": { - "encounter": { - "1": "Me incomoda que as pessoas sempre me entendam mal. Sou muito mais puro do que todos pensam." - }, - "victory": { - "1": "Eu realmente não quero que minha pele queime, então quero ficar na sombra enquanto trabalho." - } - }, - "worker_female": { - "encounter": { - "1": "Me incomoda que as pessoas sempre me entendam mal.\n$Sou muito mais pura do que todos pensam." - }, - "victory": { - "1": "Eu realmente não quero que minha pele queime, então quero ficar na sombra enquanto trabalho." - }, - "defeat": { - "1": "Meu corpo e mente nem sempre estão necessariamente em sincronia." - } - }, - "worker_double": { - "encounter": { - "1": "Vou te mostrar que podemos te quebrar. Estamos treinando no campo!" - }, - "victory": { - "1": "Que estranho… Como isso pode ser… Não deveria ter sido superado." - } - }, - "hex_maniac": { - "encounter": { - "1": "Normalmente, só escuto música clássica, mas se eu perder, acho que vou tentar um pouco de new age!", - "2": "Eu fico mais forte a cada lágrima que derramo." - }, - "victory": { - "1": "É o início da era de Aquário?", - "2": "Agora posso ficar ainda mais forte. Cresço com cada rancor." - }, - "defeat": { - "1": "New age se refere simplesmente aos compositores clássicos do século XX, certo?", - "2": "Não fique presa na tristeza ou frustração. Você pode usar seus rancores para se motivar." - } - }, - "psychic": { - "encounter": { - "1": "Oi! Concentre-se!" - }, - "victory": { - "1": "Perdi minha concentração!" - } - }, - "officer": { - "encounter": { - "1": "Prepare-se, porque a justiça está prestes a ser servida!", - "2": "Pronto para defender a lei e servir a justiça no campo de batalha!" - }, - "victory": { - "1": "O peso da justiça parece mais pesado do que nunca…", - "2": "As sombras da derrota pairam no distrito." - } - }, - "beauty": { - "encounter": { - "1": "Minha última batalha… É assim que eu gostaria que víssemos esta partida…" - }, - "victory": { - "1": "Foi divertido… Vamos ter outra última batalha algum dia…" - } - }, - "baker": { - "encounter": { - "1": "Espero que esteja pronta para saborear a derrota!" - }, - "victory": { - "1": "Vou assar uma revanche." - } - }, - "biker": { - "encounter": { - "1": "Hora de acelerar e te deixar na poeira!" - }, - "victory": { - "1": "Vou me ajustar para a próxima corrida." - } - }, - "firebreather": { - "encounter": { - "1": "Minhas chamas irão te consumir!", - "2": "Minha alma está pegando fogo. Irei te mostrar como queima!", - "3": "Cola aqui e dá uma olhada!" - }, - "victory": { - "1": "Fui reduzido a cinzas…", - "2": "Uau! Isso foi quente!", - "3": "Ai! Queimei minha língua!" - } - }, - "sailor": { - "encounter": { - "1": "Mano, você vai andar na prancha se perder!", - "2": "Vem com tudo! Sou um marinheiro com orgulho!", - "3": "Ahoy maruja! Tá enjoada, é?!" - }, - "victory": { - "1": "Argh! Perdi pra uma criança!", - "2": "Sua vontade de ganhar me afogou!", - "3": "Estou achando que quem tá enjoado sou eu..." - } - }, - "archer": { - "encounter": { - "1": "Antes de você ir mais longe, vamos ver como você se sai contra nós, Equipe Rocket!", - "2": "Eu tenho recebido relatórios de que suas habilidades não são insignificantes. Vamos ver se são verdadeiros.", - "3": "Eu sou Archer, um Admin da Equipe Rocket. E não tenho piedade dos inimigos da nossa organização." - }, - "victory": { - "1": "Que vexame!", - "2": "Com minhas habilidades atuais, eu não estava à altura da tarefa, afinal.", - "3": "M-me perdoe, Giovanni... Por ser derrotado por um mero treinador..." - } - }, - "ariana": { - "encounter": { - "1": "Pera aí! Não podemos deixar alguém solto por aí. Isso é prejudicial para o orgulho da Equipe Rocket, entende?", - "2": "Eu não sei ou me importo se o que estou fazendo é certo ou errado... Eu apenas coloco minha fé em Giovanni e faço o que me é dito.", - "3": "Sua viagem termina aqui. Vou te derrubar!" - }, - "victory": { - "1": "Uau, você é forte. Que desperdício. Se você se juntasse à Equipe Rocket, poderia se tornar uma Executiva.", - "2": "Eu... Eu estou arrasada...", - "3": "Aaaieeeee! Isso não pode estar acontecendo! Eu lutei muito, mas ainda perdi…" - } - }, - "proton": { - "encounter": { - "1": "O que você quer? Se você interromper nosso trabalho, não espere misericórdia!", - "2": "O que temos aqui? Costumam me chamar de o cara mais assustador e cruel da Equipe Rocket… Eu recomendo fortemente que você não interfira nos nossos negócios!", - "3": "Eu sou Proton, um Admin da Equipe Rocket. Estou aqui para acabar com a sua intromissão!" - }, - "victory": { - "1": "A fortaleza caiu!", - "2": "Você pode ter vencido desta vez… Mas tudo o que fez foi aumentar a ira da Equipe Rocket…", - "3": "Fui derrotado… Mas não esquecerei disso!" - } - }, - "petrel": { - "encounter": { - "1": "Muhahaha, estávamos esperando por você. Eu? Você não sabe quem eu sou? Sou eu, Giovanni. O majestoso Giovanni em pessoa! Wahahaha! ...Huh? Eu não pareço nada com Giovanni? Eu nem mesmo pareço com Giovanni? Como assim? Trabalhei tanto para imitá-lo!", - "2": "Eu sou Petrel, um Admin da Equipe Rocket. Não permitirei que você interfira em nossos planos!", - "3": "O Executivo da Rocket, Petrel, vai lidar com este intruso!" - }, - "victory": { - "1": "OK, OK. Vou te contar onde ele está.", - "2": "Eu... Eu não consegui fazer nada... Giovanni, por favor, me perdoe...", - "3": "Não, eu não posso deixar isso me afetar. Tenho que informar os outros…" - } - }, - "tabitha": { - "encounter": { - "1": "Hehehe! Então você veio até aqui! Mas você chegou tarde demais!", - "2": "Hehehe... Já chegou aqui, não é? Nós subestimamos você! Mas é isso! Eu sou um passo acima dos Capangas que você viu até agora. Não estou ganhando tempo. Vou te pulverizar!", - "3": "Vou te dar um gostinho da dor! Resigne-se a isso!" - }, - "victory": { - "1": "Hehehe! Você pode ter me derrotado, mas não tem chance contra o Chefe! Se você se perder agora, não terá que enfrentar uma surra sonora!", - "2": "Hehehe... Então, eu também perdi...", - "3": "Ahya! Como isso pode ser? Para um Admin como eu perder para uma treinadora qualquer..." - } - }, - "courtney": { - "encounter": { - "1": "A coisa... A coisa que você segura... É o que... É o que nós da Equipe Magma procuramos...", - "2": "... Bem então... Deletando...", - "3": "...Ha. ...Analisando... ...Hah♪" - }, - "victory": { - "1": "... ...Mudar...o mundo.", - "2": "Como antecipado. Não antecipado. Você. Bloqueio de alvo... concluído. Iniciando... experimento. Você. Para sempre. Aha... ♪", - "3": "... De novo? Isso não foi antecipado. ...Eu sabia. Você... é interessante! ...Haha. ♪" - } - }, - "shelly": { - "encounter": { - "1": "Ahahahaha! Você vai se meter nos assuntos da Equipe Aqua? Você é absolutamente destemida, simplesmente ignorante ou ambos! Você é tão fofa que chega a ser nojenta! Vou te derrubar", - "2": "O que é isso? Quem é essa criança mimada?", - "3": "Relaxe. Seja paciente. Vou te esmagar em breve." - }, - "victory": { - "1": "Ahahahaha! Fomos surpreendidos inesperadamente! Estamos sem opções. Teremos que recuar. Mas esta não é a última vez que você verá a Equipe Aqua! Temos outros planos! Não se esqueça disso!", - "2": "Ahhh?! Fui muito fácil com você?!", - "3": "Uh. Você está me dizendo que melhorou seu jogo ainda mais durante a luta? Você é uma pirralha com um futuro brilhante… Meu Pokémon e eu não temos mais forças para lutar… Vá em frente… Vá e seja destruída por Archie." - } - }, - "matt": { - "encounter": { - "1": "Hoohahaha! O que, você tem um parafuso solto ou algo assim? Olhe para você, pequena pessoa Makuhita!", - "2": "Oho! Você! Você é aquela criança engraçada!", - "3": "O que você está fazendo aqui? Você nos seguiu?" - }, - "victory": { - "1": "Muito bem, até que o Chefe tenha tempo para você, serei seu oponente!", - "2": "Posso sentir! Posso sentir, tudo bem! A força saindo de você! Mais! Eu ainda quero mais! Mas parece que estamos sem tempo...", - "3": "Isso foi divertido! Eu sabia que você me mostraria um bom tempo! Estou ansioso para enfrentá-la novamente algum dia!" - } - }, - "mars": { - "encounter": { - "1": "Sou Mars, uma das principais Comandantes da Equipe Galáctica.", - "2": "A visão da Equipe Galáctica para o futuro é inabalável. A oposição será esmagada sem piedade!", - "3": "Sentindo-se nervosa? Você deveria estar!" - }, - "victory": { - "1": "Isso não pode estar acontecendo! Como eu perdi?!", - "2": "Você tem alguma habilidade, eu admito isso.", - "3": "Derrotada... Este foi um erro caro." - } - }, - "jupiter": { - "encounter": { - "1": "Júpiter, Comandante da Equipe Galáctica, ao seu serviço.", - "2": "A resistência é inútil. A Equipe Galáctica prevalecerá!", - "3": "Você está tremendo... já está com medo?" - }, - "victory": { - "1": "De jeito nenhum... Eu perdi?!", - "2": "Impressionante, você tem coragem!", - "3": "Perder assim... Que embaraço." - } - }, - "saturn": { - "encounter": { - "1": "Eu sou Saturno, Comandante da Equipe Galáctica.", - "2": "Nossa missão é absoluta. Qualquer obstáculo será obliterado!", - "3": "É medo o que vejo em seus olhos?" - }, - "victory": { - "1": "Impossível... Derrotado por você?!", - "2": "Você provou ser um adversário digno.", - "3": "Derrotado... Isso é inaceitável." - } - }, - "zinzolin": { - "encounter": { - "1": "Você poderia se tornar uma ameaça para a Equipe Plasma, então vamos eliminá-la aqui e agora!", - "2": "Oh, pelo amor de Deus... Eu não esperava ter que lutar neste frio congelante!", - "3": "Você é uma treinadora impressionante para ter chegado tão longe. Mas termina aqui." - }, - "victory": { - "1": "Ghetsis... Eu falhei com você...", - "2": "Está amargamente frio. Estou tremendo. Estou sofrendo. Ainda assim, estou vitorioso.", - "3": "Hmph. Você é uma treinadora mais esperta do que eu esperava, mas não esperta o suficiente." - } - }, - "rood": { - "encounter": { - "1": "Você é uma ameaça para a Equipe Plasma. Não podemos deixá-la ir embora daqui e agora!", - "2": "Oh, este vento gelado... Eu nunca pensei que teria que lutar aqui!", - "3": "Você é uma treinadora notável para ter chegado tão longe. Mas é aqui que termina." - }, - "victory": { - "1": "Ghetsis... Eu falhei em minha missão...", - "2": "O frio é penetrante. Estou tremendo. Estou sofrendo. Ainda assim, triunfei.", - "3": "Hm. Você é uma treinadora talentosa, mas infelizmente não talentosa o suficiente." - } - }, - "xerosic": { - "encounter": { - "1": "Ah ha ha! Será um prazer. Vamos lá, pequena treinadora! Vamos ver o que você tem!", - "2": "Hmm... Você é mais poderosa do que parece. Eu me pergunto quanta energia há dentro de você.", - "3": "Eu estava esperando por você! Preciso fazer uma pequena pesquisa sobre você! Vamos começar!" - }, - "victory": { - "1": "Ah, você é bastante forte. Oh sim—muito forte, de fato.", - "2": "Ding-ding-ding! Você conseguiu! À vencedora, os despojos!", - "3": "Maravilhoso! Incrível! Você tem uma tremenda habilidade e coragem!" - } - }, - "bryony": { - "encounter": { - "1": "Eu sou Bryony, e será um prazer lutar com você. Mostre-me o que você tem.", - "2": "Impressionante... Você é mais poderosa do que parece. Vamos ver a verdadeira extensão de sua energia.", - "3": "Eu antecipei sua chegada. É hora de um pequeno teste. Vamos começar?" - }, - "victory": { - "1": "Você é bastante forte. Oh sim—muito forte, de fato.", - "2": "Ding-ding-ding! Você se saiu bem. A vitória é sua.", - "3": "Maravilhoso! Notável! Sua habilidade e coragem são admiráveis." - } - }, - "rocket_grunt": { - "encounter": { - "1": "Se prepara pra encrenca!", - "2": "Estamos realizando um grande trabalho aqui! Cai fora, garota!", - "3": "Entregue seus Pokémon ou enfrente a ira da Equipe Rocket!", - "4": "Você está prestes a experimentar o verdadeiro terror da Equipe Rocket!", - "5": "Ei, garota! Eu sou um tipo de cara da Equipe Rocket!" - }, - "victory": { - "1": "Equipe Rocket decolando de novo!", - "2": "Oh não! Eu deixei a Chave de Elevação cair!", - "3": "Eu estraguei tudo!", - "4": "Meus associados não vão tolerar isso!", - "5": "Você diz o que? Equipe Rocket tchau-tchau a vai-vai? Quebrado é diz você?" - } - }, - "magma_grunt": { - "encounter": { - "1": "Se você se meter com a Equipe Magma, não teremos piedade!", - "2": "É melhor você não interferir em nossos planos! Estamos tornando o mundo um lugar melhor!", - "3": "Você está no caminho! A Equipe Magma não tem tempo para crianças como você!", - "4": "Espero que você tenha trazido marshmallows porque as coisas estão prestes a esquentar!", - "5": "Vamos usar o poder de um vulcão! Vai ser... explosivo! Entendeu? Heh heh!" - }, - "victory": { - "1": "Ahn? Eu perdi?!", - "2": "Não posso acreditar que perdi! Até pulei o almoço por isso.", - "3": "De jeito nenhum! Você é apenas uma criança!", - "4": "Urrrgh... Eu deveria ter me escondido em nosso esconderijo imediatamente...", - "5": "Você me venceu... Você acha que o chefe vai cortar meu salário por isso?" - } - }, - "aqua_grunt": { - "encounter": { - "1": "Não pegamos leve com quem se mete com a Equipe Aqua, nem mesmo crianças!", - "2": "Grrr... Você tem coragem de se intrometer com a Equipe Aqua!", - "3": "Você está prestes a se molhar! E não apenas por causa dos meus Pokémon aquáticos!", - "4": "Nós, da Equipe Aqua, existimos para o bem de todos!", - "5": "Prepare-se para ser levado pelas ondas do meu... uh, Pokémon! Sim, meu Pokémon!" - }, - "victory": { - "1": "Tá de brincadeira!", - "2": "Arrgh, eu não contei que seria atrapalhado por uma criança intrometida!", - "3": "Eu perdi?! Acho que vou ter que nadar de volta para o esconderijo agora...", - "4": "Oh, cara, que desastre... O chefe vai ficar furioso...", - "5": "Você me venceu... Você acha que o chefe vai me fazer andar na prancha por isso?" - } - }, - "galactic_grunt": { - "encounter": { - "1": "Não mexa com a Equipe Galáctica!", - "2": "Presencie o poder da nossa tecnologia e o futuro que vislumbramos!", - "3": "Em nome da Equipe Galáctica, eliminarei qualquer um que ficar em nosso caminho!", - "4": "Prepare-se para perder!", - "5": "Espero que você esteja pronta para uma surra cósmica!" - }, - "victory": { - "1": "Fui amassado...", - "2": "Este contratempo não significa nada no grande esquema.", - "3": "Nossos planos são maiores que esta derrota.", - "4": "Como?!", - "5": "Nota para mim mesmo: praticar batalhas Pokémon, o mais rápido possível." - } - }, - "plasma_grunt": { - "encounter": { - "1": "Não toleramos pessoas que pensam diferente de nós!", - "2": "Se eu ganhar de você, liberte seus Pokémon!", - "3": "Se você atrapalhar a Equipe Plasma, eu cuidarei de você!", - "4": "A Equipe Plasma vai libertar os Pokémon de humanos egoístas como você!", - "5": "Nossos penteados são de outro mundo... mas nossas habilidades de batalha? Você descobrirá em breve." - }, - "victory": { - "1": "Plasmaaaaaaaaa!", - "2": "Como eu pude perder...", - "3": "...Que Pokémon fraco, vou ter que roubar alguns melhores!", - "4": "Grandes planos são sempre interrompidos.", - "5": "Isso é ruim... Ruim ruim ruim ruim ruim ruim ruim! Ruim para a Equipe Plasma! Ou Plasruim, para abreviar!" - } - }, - "flare_grunt": { - "encounter": { - "1": "Seus Pokémon não são páreo para a elegância da Equipe Flare.", - "2": "Espero que você tenha trazido seus óculos de sol, porque as coisas vão ficar brilhantes!", - "3": "A Equipe Flare vai purificar o mundo da imperfeição!", - "4": "Prepare-se para enfrentar o brilho da Equipe Flare!", - "5": "A moda é o mais importante para nós!" - }, - "victory": { - "1": "O futuro não parece brilhante para mim.", - "2": "Talvez haja mais na batalha do que eu pensei. De volta à prancheta.", - "3": "Gahh?! Eu perdi?!", - "4": "Mesmo na derrota, a elegância da Equipe Flare brilha.", - "5": "Você pode ter me vencido, mas quando eu perco, eu saio com estilo!" - } - }, - "aether_grunt": { - "encounter": { - "1": "Eu vou lutar com tudo o que tenho para te eliminar!", - "2": "Eu não me importo se você é uma criança ou o que. Eu vou te mandar voando se você nos ameaçar!", - "3": "Me mandaram afastar Treinadores, não importa quem sejam!", - "4": "Eu vou te mostrar o poder do Paraíso Aether!", - "5": "Agora que você descobriu a escuridão no coração do Paraíso Aether, precisamos que você desapareça convenientemente!" - }, - "victory": { - "1": "Aff! Você parece ter muita habilidade.", - "2": "O que isso significa? O que isso significa!", - "3": "Ei! Você é tão forte que não há como eu te afastar!", - "4": "Hmm... Parece que eu posso ter perdido.", - "5": "Aqui está uma resposta para você: Aiyee!" - } - }, - "faba": { - "encounter": { - "1": "Eu, o Chefe de Ramo Faba, vou te mostrar a dureza do mundo real!", - "2": "O homem chamado de última linha de defesa do Paraíso Aether vai batalhar com uma mera criança?", - "3": "Eu, Faba, sou o Chefe de Ramo do Paraíso Aether. O único no mundo, eu sou insubstituível." - }, - "victory": { - "1": "Aiyee!", - "2": "C-c-como assim?! Como uma criança...", - "3": "Isso é por que... Isso é por que eu não consigo gostar de crianças." - } - }, - "skull_grunt": { - "encounter": { - "1": "Nós não somos maus, somos apenas durões!", - "2": "Quer um pouco de nós? É assim que dizemos olá! Prazer em conhecê-los, otários!", - "3": "Somos só um bando de caras e minas com um grande interesse nos Pokémon dos outros!", - "4": "Por que você está tentando agir durão quando já somos durões como ossos aqui fora, mano?", - "5": "Equipe Skull na área! Não podemos pagar o aluguel! Nos divertimos muito, mas nossa juventude foi desperdiçada!" - }, - "victory": { - "1": "Ahn? Já acabou?", - "2": "Hora de dar o fora, mano! Vamos ter que dizer tchau, mano!", - "3": "Nem precisamos dos seus Pokémon fracotes mesmo!", - "4": "Que?! Esse muleque é muito forte! Não tem como negar!", - "5": "Então, o que? Eu sou pior que um Pokémon?! Eu já tenho problemas de autoestima, cara." - } - }, - "plumeria": { - "encounter": { - "1": " ...Hmph. Você não parece nada especial para mim.", - "2": "Esses Capangas gastam muito tempo tentando lidar com crianças como você...", - "3": "Mexe com qualquer um da Equipe Skull, e eu vou te mostrar o quão séria eu posso ficar." - }, - "victory": { - "1": "Aff! Você é bem forte. Tenho que admitir.", - "2": "Aff! Você é bem forte. Agora eu entendi por que meus Capangas gastam tanto tempo batalhando com crianças.", - "3": "Aff! Acho que eu só tenho que aceitar essa derrota." - } - }, - "macro_grunt": { - "encounter": { - "1": "Parece que aqui é o fim da linha para você!", - "2": "Você é um treinador, não é? Temo que isso não lhe dê o direito de interferir em nosso trabalho.", - "3": "Sou da Macro Cosmos Seguros! Já tem um seguro de vida?" - }, - "victory": { - "1": "Eu não tenho muita escolha a não ser recuar respeitosamente.", - "2": "Ter que desistir do meu dinheiro... Perder significa que estou de volta no vermelho...", - "3": "Ninguém pode vencer a Macro Cosmos quando se trata de nossa dedicação ao trabalho!" - } - }, - "oleana": { - "encounter": { - "1": "Eu não vou deixar ninguém interferir no plano do Sr. Rose!", - "2": "Então, você passou por todo o pessoal especial que eu ordenei para te parar. Eu não esperaria nada menos.", - "3": "Pelo presidente! Eu não vou perder!" - }, - "victory": { - "1": "*suspiro* Eu não consegui vencer... Oleana... você realmente é uma mulher sem esperança.", - "2": "Aff! Isso é inaceitável... O que eu estava pensando... Qualquer treinador que chega tão longe não seria um fracote...", - "3": "*suspiro* Eu sou uma Oleana cansada..." - } - }, - "rocket_boss_giovanni_1": { - "encounter": { - "1": "Tenho que admitir, estou impressionado que tenha chegado até aqui!" - }, - "victory": { - "1": "QUÊ! Isso não é possível!" - }, - "defeat": { - "1": "Guarde minhas palavras.\nNão ser capaz de medir sua própria força mostra que você ainda é uma criança." - } - }, - "rocket_boss_giovanni_2": { - "encounter": { - "1": "Meus antigos associados precisam de mim... Você vai ficar no meu caminho?" - }, - "victory": { - "1": "Como isso é possível...?\nO precioso sonho da Equipe Rocket se tornou pouco mais que uma ilusão..." - }, - "defeat": { - "1": "A Equipe Rocket renascerá, e eu dominarei o mundo!" - } - }, - "magma_boss_maxie_1": { - "encounter": { - "1": "Eu vou te enterrar com minhas próprias mãos.\nEspero que você aprecie essa honra!" - }, - "victory": { - "1": "Ugh! Você é... bastante capaz...\nEu fiquei para trás, mas apenas por um triz..." - }, - "defeat": { - "1": "A Equipe Magma vai prevalecer!" - } - }, - "magma_boss_maxie_2": { - "encounter": { - "1": "Você é o último obstáculo entre mim e meus objetivos.\nPrepare-se para meu ataque final! Fuhahaha!" - }, - "victory": { - "1": "Isso... Isso não é... Ngh..." - }, - "defeat": { - "1": "E agora... Eu transformarei este planeta em uma terra ideal para a humanidade." - } - }, - "aqua_boss_archie_1": { - "encounter": { - "1": "Eu sou o líder da Equipe Aqua, então temo que esse seja o fim da linha para você." - }, - "victory": { - "1": "Vamos nos encontrar de novo em algum lugar. Eu vou ter certeza de lembrar desse rosto." - }, - "defeat": { - "1": "Brilhante! Nada vai parar minha equipe agora!" - } - }, - "aqua_boss_archie_2": { - "encounter": { - "1": "Estive esperando tanto tempo por este dia.\nEste é o verdadeiro poder da minha equipe!" - }, - "victory": { - "1": "Como eu suspeitava..." - }, - "defeat": { - "1": "Eu vou voltar tudo neste mundo ao seu estado puro e original!!" - } - }, - "galactic_boss_cyrus_1": { - "encounter": { - "1": "Você foi compelida a vir aqui por tal sentimentalismo vazio\nEu farei você se arrepender de ter ouvido seu coração!" - }, - "victory": { - "1": "Interessante. E bastante curioso." - }, - "defeat": { - "1": "Eu criarei meu novo mundo..." - } - }, - "galactic_boss_cyrus_2": { - "encounter": { - "1": "Nos encontramos novamente. Parece que nossos destinos estão entrelaçados.\nMas aqui e agora, eu finalmente quebrarei esse vínculo!" - }, - "victory": { - "1": "Como? Como? COMO?!" - }, - "defeat": { - "1": "Até logo." - } - }, - "plasma_boss_ghetsis_1": { - "encounter": { - "1": "Ninguém pode me deter! Não importa quem seja ou o que faça!" - }, - "victory": { - "1": "Como isso é possível? Eu sou o criador da Equipe Plasma! Eu sou perfeito!" - }, - "defeat": { - "1": "Eu sou o governante perfeito de um novo mundo perfeito! Mwa ha ha!" - } - }, - "plasma_boss_ghetsis_2": { - "encounter": { - "1": "Vamos! Eu quero ver sua cara depois que você perder toda a esperança!" - }, - "victory": { - "1": "Meus cálculos... Não! Meus planos cuidadosos! O mundo deveria ser meu!" - }, - "defeat": { - "1": "Kyurem! Use Absofusion!" - } - }, - "flare_boss_lysandre_1": { - "encounter": { - "1": "Você está aqui para me deter? Mostre-me em batalha." - }, - "victory": { - "1": "Você está aqui para me deter. Mas eu peço que você espere." - }, - "defeat": { - "1": "Pokémon... não devem mais existir." - } - }, - "flare_boss_lysandre_2": { - "encounter": { - "1": "O futuro que você quer, ou o futuro que eu quero... Vamos ver qual é o mais merecedor, não é mesmo?" - }, - "victory": { - "1": "Uau!" - }, - "defeat": { - "1": "Tolos sem visão continuarão a poluir este belo mundo." - } - }, - "aether_boss_lusamine_1": { - "encounter": { - "1": "Você vai assustar minha fera querida! Parece que eu vou precisar te silenciar primeiro." - }, - "victory": { - "1": "Como... como você pode ser tão terrível!" - }, - "defeat": { - "1": "Aff..." - } - }, - "aether_boss_lusamine_2": { - "encounter": { - "1": "Por que você continua a me incomodar?! Estou cansada de você. Cansada até a alma!\n$Chega de papo furado... Com o poder de Nihilego, vou mostrar o quão errado você estava em vir aqui!" - }, - "victory": { - "1": "Aaauuuggghhhhhhhhh!!!" - }, - "defeat": { - "1": "Tudo o que eu quero é minha fera preciosa! Eu não me importo com nenhum de vocês!" - } - }, - "skull_boss_guzma_1": { - "encounter": { - "1": "O odiado chefe que te bate e te bate e nunca para...\n$É. O grande e mau Guzma está aqui!" - }, - "victory": { - "1": "Tss. Eu vou te bater um dia desses!" - }, - "defeat": { - "1": "E você veio até aqui só pra isso, né?" - } - }, - "skull_boss_guzma_2": { - "encounter": { - "1": "Não importa contra quem eu esteja, eu vou derrotá-los!\n$Isso é o que o grande e mau Guzma é!" - }, - "victory": { - "1": "Guzma!!! O que há de errado com você?!" - }, - "defeat": { - "1": "Vocês são tudo uns idiotas!" - } - }, - "macro_boss_rose_1": { - "encounter": { - "1": "Devo fornecer energia ilimitada para garantir a prosperidade eterna para todos...\n$É meu propósito, meu dever, meu destino!" - }, - "victory": { - "1": "Você ainda não entendeu, treinador...\n$Nós... Não, eu vou mudar o rumo da história!" - }, - "defeat": { - "1": "Você ainda não entende nada!" - } - }, - "macro_boss_rose_2": { - "encounter": { - "1": "Estou comprometido em resolver o problema de energia na região de Galar e, claro, em todo o mundo.\n$Minha experiência e conquistas que fizeram da Macro Cosmos um sucesso são a prova de que meus métodos funcionam.\n$Não pretendo mudar de ideia, mesmo que eu perca." - }, - "victory": { - "1": "Eu esqueci o quão incríveis são as batalhas Pokémon! Faz tanto tempo desde que eu batalhei...\n$Isso foi realmente satisfatório, eu aceito a derrota para esta batalha." - }, - "defeat": { - "1": "Eu suponho que deve parecer que estou fazendo algo terrível. Eu não espero que você entenda.\n$Mas eu devo fornecer à região de Galar energia ilimitada para garantir prosperidade eterna." - } - }, - "brock": { - "encounter": { - "1": "Minha especialidade em Pokémon do tipo Pedra vai te derrubar! Vamos lá!", - "2": "Minha vontade firme como pedra vai te sobrecarregar!", - "3": "Permita-me mostrar a verdadeira força dos meus Pokémon!" - }, - "victory": { - "1": "A força dos seus Pokémon superou minhas defesas de pedra!", - "2": "O mundo é enorme! Estou feliz por ter tido a chance de batalhar com você.", - "3": "Talvez eu deva voltar a perseguir meu sonho de ser Criador de Pokémon…" - }, - "defeat": { - "1": "A melhor defesa é um bom ataque!\nEssa é a minha maneira de fazer as coisas!", - "2": "Venha estudar rochas comigo da próxima vez para aprender melhor a combatê-las!", - "3": "Hah, todas as minhas viagens pelas regiões estão valendo a pena!" - } - }, - "misty": { - "encounter": { - "1": "Minha política é um ataque total com Pokémon do tipo Água!", - "2": "Oi, vou mostrar a força dos meus Pokémon aquáticos!", - "3": "Meu sonho era viajar e batalhar com treinadores poderosos…\nVocê será um desafio suficiente?" - }, - "victory": { - "1": "Você realmente é forte… Vou admitir que você é habilidosa…", - "2": "Hmm… Você sabe que só teve sorte, certo?!", - "3": "Uau, você é demais! Não acredito que me venceu!" - }, - "defeat": { - "1": "A poderosa Misty foi demais para você?", - "2": "Espero que você tenha visto as técnicas de natação elegantes dos meus Pokémon!", - "3": "Seus Pokémon não foram páreo para meus orgulhos e alegrias!" - } - }, - "lt_surge": { - "encounter": { - "1": "Meus Pokémon Elétricos me salvaram durante a guerra! Vou te mostrar como!", - "2": "Em sentido! Vou te chocar até você se render!", - "3": "Vou te eletrizar como faço com todos os meus inimigos na batalha!" - }, - "victory": { - "1": "Whoa! Seu time é de verdade, garota!", - "2": "Uau, você é forte! Até meus truques elétricos perderam para você.", - "3": "Isso foi uma derrota absolutamente chocante!" - }, - "defeat": { - "1": "Oh sim! Quando se trata de Pokémon do tipo Elétrico, sou o número um do mundo!", - "2": "Hahaha! Foi uma batalha eletrizante, garota!", - "3": "Uma batalha de Pokémon é guerra, e eu te mostrei combate em primeira mão!" - } - }, - "erika": { - "encounter": { - "1": "Ah, o tempo está adorável aqui…\nOh, uma batalha? Muito bem então.", - "2": "Minhas habilidades de batalha Pokémon rivalizam com minhas habilidades de arranjo de flores.", - "3": "Oh, espero que o aroma agradável dos meus Pokémon não me faça dormir de novo…", - "4": "Ver flores em um jardim é tão calmante." - }, - "victory": { - "1": "Oh! Eu concedo a derrota.", - "2": "Aquela partida foi muito agradável.", - "3": "Ah, parece que perdi…", - "4": "Oh, meu Deus." - }, - "defeat": { - "1": "Tinha medo de adormecer…", - "2": "Oh, meu Deus, parece que meus Pokémon de Grama te dominaram.", - "3": "Essa batalha foi uma experiência tão calmante.", - "4": "Oh… É só isso?" - } - }, - "janine": { - "encounter": { - "1": "Estou dominando a arte dos ataques venenosos.\nVou lutar com você hoje!", - "2": "Meu pai confia que posso me defender.\nVou provar que ele está certo!", - "3": "Minhas técnicas de ninja só perdem para as do meu pai!\nVocê consegue acompanhar?" - }, - "victory": { - "1": "Ainda preciso de treinamento… Entendi.", - "2": "Sua técnica de batalha superou a minha.", - "3": "Vou me aplicar de verdade e melhorar minhas habilidades." - }, - "defeat": { - "1": "Hehe… o veneno drenou todas as suas forças para lutar.", - "2": "Ha! Você não teve chance contra minhas habilidades superiores de ninja!", - "3": "A fé do meu pai em mim não foi mal colocada." - } - }, - "sabrina": { - "encounter": { - "1": "Através da minha habilidade psíquica, tive uma visão da sua chegada!", - "2": "Não gosto de lutar, mas se você quiser, vou mostrar meus poderes!", - "3": "Posso sentir grande ambição em você. Vou ver se não é infundada." - }, - "victory": { - "1": "Seu poder… Ele supera o que eu previa…", - "2": "Não consegui prever seu poder com precisão.", - "3": "Mesmo com meus imensos poderes psíquicos, não consigo sentir outro tão forte quanto você." - }, - "defeat": { - "1": "Essa vitória… É exatamente como previ nas minhas visões!", - "2": "Talvez fosse outra pessoa que eu sentisse um grande desejo…", - "3": "Aprimore suas habilidades antes de entrar em batalha precipitadamente.\nVocê nunca sabe o que o futuro pode reservar se fizer isso…" - } - }, - "blaine": { - "encounter": { - "1": "Hah! Espero que tenha trazido uma Cura de Queimadura!", - "2": "Meus Pokémon de Fogo vão incinerar todos os desafiantes!", - "3": "Prepare-se para brincar com fogo!" - }, - "victory": { - "1": "Queimei até não restar nada! Nem cinzas sobraram!", - "2": "Não acendi as chamas alto o suficiente?", - "3": "Estou completamente exausto… Mas isso faz minha motivação para melhorar queimar ainda mais!" - }, - "defeat": { - "1": "Meu inferno ardente não pode ser apagado!", - "2": "Meus Pokémon foram fortalecidos com o calor desta vitória!", - "3": "Hah! Minha paixão queima mais do que a sua!" - } - }, - "giovanni": { - "encounter": { - "1": "Eu, o líder da Equipe Rocket, vou te fazer sentir um mundo de dor!", - "2": "Meu treinamento aqui será vital antes de enfrentar meus antigos associados novamente.", - "3": "Não acho que você está preparada para o nível de fracasso que está prestes a experimentar!" - }, - "victory": { - "1": "O QUE! Eu, perder?! Não tenho nada a dizer a você!", - "2": "Hmm… Você nunca entenderia o que quero alcançar.", - "3": "Esta derrota está apenas adiando o inevitável.\nVou ressurgir a Equipe Rocket das cinzas a tempo." - }, - "defeat": { - "1": "Não ser capaz de medir sua própria força mostra que você ainda é apenas uma criança.", - "2": "Não tente interferir comigo novamente.", - "3": "Espero que entenda o quão tolo foi me desafiar." - } - }, - "roxanne": { - "encounter": { - "1": "Você poderia gentilmente demonstrar como batalha?", - "2": "Você pode aprender muitas coisas batalhando com muitos treinadores.", - "3": "Oh, você me pegou estrategizando.\nGostaria de batalhar?" - }, - "victory": { - "1": "Oh, parece que perdi.\nEu entendo.", - "2": "Parece que ainda tenho muito mais a aprender quando se trata de batalhas.", - "3": "Vou levar o que aprendi aqui hoje a sério." - }, - "defeat": { - "1": "Aprendi muitas coisas com nossa batalha.\nEspero que você também tenha aprendido.", - "2": "Espero batalhar com você novamente.\nEspero que use o que aprendeu aqui.", - "3": "Venci devido a tudo o que aprendi." - } - }, - "brawly": { - "encounter": { - "1": "Oh cara, uma desafiante!\nVamos ver o que você pode fazer!", - "2": "Você parece uma grande onda.\nVamos batalhar!", - "3": "Hora de criar uma tempestade!\nVamos!" - }, - "victory": { - "1": "Uau, você me derrotou!", - "2": "Você surfou minha onda e me derrubou!", - "3": "Sinto-me perdido na Caverna Granito!" - }, - "defeat": { - "1": "Haha, eu surfei a grande onda!\nDesafie-me novamente algum dia.", - "2": "Surfe comigo novamente algum dia!", - "3": "Assim como as marés vão e vêm, espero que você volte para me desafiar novamente." - } - }, - "wattson": { - "encounter": { - "1": "Hora de levar um choque!\nWahahahaha!", - "2": "Vou fazer faíscas voarem!\nWahahahaha!", - "3": "Espero que tenha trazido Cura de Paralisia!\nWahahahaha!" - }, - "victory": { - "1": "Parece que estou sem carga!\nWahahahaha!", - "2": "Você me aterrissou completamente!\nWahahahaha!", - "3": "Obrigado pela emoção!\nWahahahaha!" - }, - "defeat": { - "1": "Você está totalmente carregada agora!\nWahahahaha!", - "2": "Espero ver você faíscando em batalhas futuras!\nWahahahaha!", - "3": "Wahahahaha! Que batalha eletrizante!" - } - }, - "flannery": { - "encounter": { - "1": "Meus Pokémon de fogo estão prontos para queimar a concorrência!\nVamos nessa!", - "2": "Prepare-se para sentir o calor da minha determinação!\nNão vou segurar nada!", - "3": "Minhas habilidades vão incinerar você!\nPrepare-se para a batalha mais quente da sua vida!" - }, - "victory": { - "1": "Essa derrota só faz minha determinação queimar mais!", - "2": "Essa perda não apagará minhas chamas!\nEstarei de volta mais forte!", - "3": "Vou usar essa experiência para reacender meu espírito competitivo!" - }, - "defeat": { - "1": "Minhas chamas nunca se apagarão!\nSou muito apaixonada por isso!", - "2": "Você foi incrível!\nVamos fazer isso de novo algum dia!", - "3": "Que batalha ardente!\nMal posso esperar pela próxima!" - } - }, - "norman": { - "encounter": { - "1": "Você está pronto para enfrentar a força pura do meu time?\nVou te mostrar o poder do equilíbrio!", - "2": "Minha experiência em batalha vai fazer você suar!\nPrepare-se!", - "3": "Treinei meu time rigorosamente.\nVamos ver se você consegue igualar!" - }, - "victory": { - "1": "Parece que subestimei você.\nFoi uma batalha dura.", - "2": "Você é forte, mas ainda há muito para aprender.", - "3": "Essa derrota não abalará minha determinação.\nEstarei de volta mais forte!" - }, - "defeat": { - "1": "Você lutou bravamente!\nEspero batalhar com você novamente.", - "2": "Sua força é incrível!\nNão posso esperar pela nossa próxima batalha.", - "3": "Foi uma honra batalhar com você!\nAté a próxima!" - } - }, - "winona": { - "encounter": { - "1": "Tenho sobrevoado os céus em busca de presas...\nE você é meu alvo!", - "2": "Não importa como será nossa batalha, meus Pokémon Voadores e eu triunfaremos com graça. Vamos batalhar!", - "3": "Espero que você não tenha medo de altura.\nVamos subir!" - }, - "victory": { - "1": "Você é a primeira Treinadora que vejo com mais graça do que eu.\nJogou excelentemente.", - "2": "Oh, meus Pokémon Voadores despencaram!\nMuito bem.", - "3": "Embora eu tenha caído, meus Pokémon continuarão a voar!" - }, - "defeat": { - "1": "Meus Pokémon Voadores e eu sempre dançaremos com elegância!", - "2": "Espero que tenha gostado do nosso show.\nNossa dança graciosa terminou.", - "3": "Você não quer ver nossa coreografia elegante novamente?" - } - }, - "tate": { - "encounter": { - "1": "Hehehe... Ficou surpresa de me ver sem minha irmã?", - "2": "Posso ver o que você está pensando...\nVocê quer batalhar!", - "3": "Como você pode derrotar alguém...\nQue sabe todos os seus movimentos?" - }, - "victory": { - "1": "Não pode ser ajudado...\nSinto falta da Liza...", - "2": "Seu vínculo com seus Pokémon era mais forte que o meu.", - "3": "Se eu estivesse com Liza, teríamos vencido.\nConseguimos completar os pensamentos um do outro!" - }, - "defeat": { - "1": "Meus Pokémon e eu somos superiores!", - "2": "Se você não consegue nem me derrotar, nunca será capaz de derrotar Liza também.", - "3": "Tudo graças ao meu treinamento rigoroso com Liza.\nPosso me tornar um com os Pokémon." - } - }, - "liza": { - "encounter": { - "1": "Fufufu... Ficou surpresa de me ver sem meu irmão?", - "2": "Posso determinar o que você deseja...\nVocê quer batalhar, não quer?", - "3": "Como você pode derrotar alguém...\nQue é um com seus Pokémon?" - }, - "victory": { - "1": "Não pode ser ajudado...\nSinto falta do Tate...", - "2": "Seu vínculo com seus Pokémon...\nÉ mais forte que o meu.", - "3": "Se eu estivesse com Tate, teríamos vencido.\nPodemos terminar as frases um do outro!" - }, - "defeat": { - "1": "Meus Pokémon e eu somos vitoriosos.", - "2": "Se você não consegue nem me derrotar, nunca será capaz de derrotar Tate também.", - "3": "Tudo graças ao meu treinamento rigoroso com Tate.\nPosso me sincronizar com meus Pokémon." - } - }, - "juan": { - "encounter": { - "1": "Agora não é hora de agir timidamente.\nVamos batalhar!", - "2": "Ahahaha, você será testemunha da minha arte com Pokémon de Água!", - "3": "Um tufão se aproxima!\nVocê será capaz de me testar?", - "4": "Por favor, você será testemunha da nossa arte.\nUma grande ilusão de água esculpida por meus Pokémon e por mim!" - }, - "victory": { - "1": "Você pode ser um gênio que pode enfrentar Wallace!", - "2": "Eu me concentrei na elegância enquanto você treinava.\nÉ natural que você me derrotasse.", - "3": "Ahahaha!\nMuito bem, você venceu desta vez.", - "4": "De você, sinto o brilho brilhante da habilidade que superará tudo." - }, - "defeat": { - "1": "Meus Pokémon e eu esculpimos uma ilusão de Água e saímos vitoriosos.", - "2": "Ahahaha, eu venci, e você perdeu.", - "3": "Posso emprestar meu traje? Pode te ajudar a batalhar!\nAhahaha, estou brincando!", - "4": "Eu sou o vencedor! O que quer dizer, você perdeu." - } - }, - "crasher_wake": { - "encounter": { - "1": "Crash! Crash! Cuidado!\nDemolidor Wake… está… aqui!", - "2": "Crash! Crash! Demolidor Wake!", - "3": "Sou a onda de poder que vai te lavar!" - }, - "victory": { - "1": "Isso coloca um sorriso no meu rosto!\nGuhahaha! Foi uma explosão!", - "2": "Hunwah! Acabou e terminou!\nComo vou dizer isso...\nQuero mais! Queria batalhar muito mais!", - "3": "O QUÊ?!" - }, - "defeat": { - "1": "Siiiiim! Isso mesmo!", - "2": "Eu venci, mas quero mais! Queria batalhar muito mais!", - "3": "Até logo!" - } - }, - "falkner": { - "encounter": { - "1": "Vou mostrar o verdadeiro poder dos magníficos Pokémon pássaros!", - "2": "Ventos, fiquem comigo!", - "3": "Pai! Espero que esteja vendo minha batalha de cima!" - }, - "victory": { - "1": "Eu entendo... Vou sair graciosamente.", - "2": "Uma derrota é uma derrota. Você é realmente forte.", - "3": "...Droga! Sim, eu perdi." - }, - "defeat": { - "1": "Pai! Venci com seus amados Pokémon pássaros...", - "2": "Pokémon pássaros são os melhores afinal!", - "3": "Sinto que estou alcançando meu pai!" - } - }, - "nessa": { - "encounter": { - "1": "Não importa que tipo de plano sua mente refinada possa estar tramando, meu parceiro e eu vamos afundá-la.", - "2": "Não estou aqui para conversar. Estou aqui para vencer!", - "3": "Este é um pequeno presente dos meus Pokémon... Espero que você possa recebê-la!" - }, - "victory": { - "1": "Você e seus Pokémon são demais...", - "2": "Como...? Como isso pode ser?!", - "3": "Fui totalmente arrastada!" - }, - "defeat": { - "1": "A onda furiosa ataca novamente!", - "2": "Hora de surfar na onda da vitória!", - "3": "Hehe!" - } - }, - "melony": { - "encounter": { - "1": "Não vou me segurar!", - "2": "Tudo bem, acho que devemos começar.", - "3": "Vou congelar você completamente!" - }, - "victory": { - "1": "Você... Você é muito boa, hein?", - "2": "Se você encontrar Gordie por aí, certifique-se de dar uma boa surra nele, ok?", - "3": "Acho que você levou a quebra de gelo um pouco literalmente demais..." - }, - "defeat": { - "1": "Agora você vê como as batalhas podem ser severas?", - "2": "Hee! Parece que ganhei de novo!", - "3": "Você está segurando?" - } - }, - "marlon": { - "encounter": { - "1": "Você parece forte! Vamos começar!", - "2": "Sou forte como a amplitude do oceano. Você vai ser varrida, com certeza.", - "3": "Oh ho, então estou enfrentando você! Isso é fora do comum." - }, - "victory": { - "1": "Você foi incrível! Está criando alguns Pokémon incríveis. Você dominou a coisa de Treinadora!", - "2": "Você não apenas parece forte, você é forte de verdade! Eh, eu também fui varrido!", - "3": "Você é forte como uma onda impressionante!" - }, - "defeat": { - "1": "Você é forte, mas não é o suficiente para mudar o mar, ok!", - "2": "Hee! Parece que ganhei de novo!", - "3": "Doce, doce vitória!" - } - }, - "shauntal": { - "encounter": { - "1": "Com licença. Você é uma desafiante, certo?\nSou a usuária de Pokémon do tipo Fantasma da Elite dos Quatro, Shauntal, e serei sua oponente.", - "2": "Adoro escrever sobre Treinadores que vêm aqui e os Pokémon que treinam.\nPosso usar você e seus Pokémon como tema?", - "3": "Cada pessoa que trabalha com Pokémon tem uma história para contar.\nQue história está prestes a ser contada?" - }, - "victory": { - "1": "Uau. Estou sem palavras!", - "2": "D-desculpe! Primeiro, preciso me desculpar com meus Pokémon...\n\nLamento muito que você tenha tido uma experiência ruim por minha causa!", - "3": "Mesmo com isso, ainda sou uma da Elite dos Quatro!" - }, - "defeat": { - "1": "Hehe.", - "2": "Isso me deu um excelente material para meu próximo romance!", - "3": "E assim, outra história termina..." - } - }, - "marshal": { - "encounter": { - "1": "Meu mentor, Alder, vê seu potencial como Treinadora e está interessado em você.\nMeu objetivo é testá-la—levar você aos limites da sua força. Kiai!", - "2": "Vitória, vitória decisiva, é meu objetivo! Desafiante, aqui vou eu!", - "3": "Em mim mesmo, procuro desenvolver a força de um lutador e eliminar qualquer fraqueza em mim!\nPrevalecendo com a força de minhas convicções!" - }, - "victory": { - "1": "Ufa! Bem feito!", - "2": "À medida que suas batalhas continuarem, mire em alturas ainda maiores!", - "3": "A força demonstrada por você e seus Pokémon me impressionou profundamente..." - }, - "defeat": { - "1": "Hmm.", - "2": "Isso foi uma boa batalha.", - "3": "Haaah! Haaah! Haiyaaaah!" - } - }, - "cheren": { - "encounter": { - "1": "Você me lembra um velho amigo. Isso me deixa animado para essa batalha Pokémon!", - "2": "As batalhas Pokémon não têm sentido se você não pensa por que você batalha.\nOu melhor, isso torna as batalhas junto com Pokémon sem sentido.", - "3": "Meu nome é Cheren! Sou um Líder de Ginásio e professor! Prazer em conhecê-la." - }, - "victory": { - "1": "Obrigado! Vi o que estava faltando em mim.", - "2": "Obrigado! Sinto que vi um pouco do caminho em direção aos meus ideais.", - "3": "Hmm... Isso é problemático." - }, - "defeat": { - "1": "Como Líder de Ginásio, meu objetivo é ser um obstáculo para você superar.", - "2": "Tudo bem!", - "3": "Cheguei onde estou porque os Pokémon estavam ao meu lado.\nTalvez precisemos pensar por que os Pokémon nos ajudam, não em termos de Pokémon e Treinadores, mas como uma relação entre seres vivos." - } - }, - "chili": { - "encounter": { - "1": "Yeeeeeooow! Hora de brincar com FOGO!! Eu sou o mais forte de nós irmãos!", - "2": "Tcharan! O escaldante Chili tipo Fogo (sou eu) será seu oponente!", - "3": "Vou te mostrar o que eu e meus ardentes tipo Fogo podemos fazer!" - }, - "victory": { - "1": "Você me pegou. Eu estou… queimado… esgotado…", - "2": "Uau! Você tá pegando fogo!", - "3": "Ai! Você me pegou!" - }, - "defeat": { - "1": "Estou pegando fogo! Brinque comigo e você vai se queimar!", - "2": "Quando você brinca com fogo, você se queima!", - "3": "Quero dizer, fala sério, seu oponente era eu! Você não teve chance!" - } - }, - "cilan": { - "encounter": { - "1": "Nada pessoal... Sem ressentimentos... Eu e meus Pokémon do tipo Grama vamos...\n$Hum... Nós iremos batalhar, aconteça o que acontecer.", - "2": "Então, hum, se você estiver bem comigo, eu vou, hum, dar tudo o que tenho para ser, hum, você sabe, seu oponente.", - "3": "OK... Então, eu sou Cilan, eu gosto de Pokémon do tipo Grama." - }, - "victory": { - "1": "Er… Já acabou?", - "2": "…Que surpresa. Você é muito forte, não é? \n$Eu acho que meus irmãos também não conseguiriam derrotar você…", - "3": "…Huh. Parece que meu timing estava, hum, errado?" - }, - "defeat": { - "1": "Hein? Eu ganhei?", - "2": "Eu acho... \n$Eu acho que ganhei, porque eu estava competindo com meus irmãos Chili e Cress, e todos nós conseguimos ficar mais fortes.", - "3": "Foi… foi uma experiência bastante emocionante…" - } - }, - "roark": { - "encounter": { - "1": "Preciso ver seu potencial como Treinadora. E, vou precisar ver a dureza dos Pokémon que batalham com você!", - "2": "Vamos lá! Estes são meus Pokémon de pedra, meu orgulho e alegria!", - "3": "Pokémon do tipo Pedra são simplesmente os melhores!", - "4": "Preciso ver seu potencial como Treinadora. E, vou precisar ver a dureza dos Pokémon que batalham com você!" - }, - "victory": { - "1": "O-o que? Isso não pode ser! Meus Pokémon fortificados!", - "2": "...Perdemos o controle. Da próxima vez, gostaria de desafiá-la a uma corrida de escavação de fósseis no subsolo.", - "3": "Com habilidade como a sua, é natural que você vença.", - "4": "O-o que?! Não pode ser! Nem isso foi suficiente?", - "5": "Eu estraguei tudo." - }, - "defeat": { - "1": "Veja? Estou orgulhoso do meu estilo de batalha rochoso!", - "2": "Obrigado! A batalha me deu confiança de que talvez eu consiga vencer meu pai!", - "3": "Sinto como se tivesse acabado de quebrar uma pedra muito teimosa!" - } - }, - "morty": { - "encounter": { - "1": "Com um pouco mais, eu poderia ver um futuro em que encontro o Pokémon lendário.\nVocê vai me ajudar a alcançar esse nível!", - "2": "Dizem que um Pokémon com cores de arco-íris aparecerá diante de um Treinador verdadeiramente poderoso.\nAcreditei nessa história, então treinei secretamente aqui a vida toda. Como resultado, agora posso ver o que os outros não podem.\nVejo uma sombra da pessoa que fará o Pokémon aparecer.\nAcredito que essa pessoa sou eu! Você vai me ajudar a alcançar esse nível!", - "3": "Quer você escolha acreditar ou não, o poder místico existe.", - "4": "Você pode testemunhar os frutos do meu treinamento.", - "5": "Você deve fazer sua alma se tornar uma com a dos Pokémon. Você pode fazer isso?", - "6": "Diga, você quer fazer parte do meu treinamento?" - }, - "victory": { - "1": "Ainda não sou bom o suficiente...", - "2": "Eu vejo... Sua jornada a levou a lugares distantes e você testemunhou muito mais do que eu.\nEu invejo você por isso...", - "3": "Como isso é possível...", - "4": "Não acho que nossos potenciais sejam tão diferentes.\nMas você parece ter algo mais do que isso... Que seja.", - "5": "Acho que preciso de mais treinamento.", - "6": "Isso é uma pena." - }, - "defeat": { - "1": "Eu me movi... mais um passo adiante.", - "2": "Fufufu...", - "3": "O-o que?! Não pode ser! Nem isso foi suficiente?", - "4": "Sinto como se tivesse acabado de quebrar uma pedra muito teimosa!", - "5": "Ahahahah!", - "6": "Eu sabia que venceria!" - } - }, - "crispin": { - "encounter": { - "1": "Quero vencer, então é exatamente isso que vou fazer!", - "2": "Eu batalho porque quero batalhar! E sabe de uma coisa? É assim que deve ser!" - }, - "victory": { - "1": "Queria vencer... mas perdi!", - "2": "Eu perdi... porque não consegui vencer!" - }, - "defeat": { - "1": "Ei, espere um segundo. Eu acabei de vencer? Acho que acabei de vencer! Que satisfação!", - "2": "Uou! Isso foi incrível!" - } - }, - "amarys": { - "encounter": { - "1": "Quero ser a pessoa a ajudar alguém em particular. Sendo assim, não posso me dar ao luxo de perder.\n... Nossa batalha começa agora." - }, - "victory": { - "1": "Eu sou... não o suficiente, eu vejo." - }, - "defeat": { - "1": "A vitória pertence a mim. Bem lutado." - } - }, - "lacey": { - "encounter": { - "1": "Vou enfrentar você com meu time usual como membro da Elite dos Quatro." - }, - "victory": { - "1": "Foi uma excelente batalha. Estou ansiosa para o próximo desafio." - }, - "defeat": { - "1": "Fufufu... Nada mal.\nDesafiantes que derrotam a Elite dos Quatro são dignos de notar." - } - }, - "drayton": { - "encounter": { - "1": "Cara, eu amo cadeiras. Você não ama cadeiras? Que salva-vidas.\n$Não entendo por que todo mundo não fica sentado o tempo todo. Ficar de pé é cansativo!" - }, - "victory": { - "1": "Acho que deveria ter esperado por isso!" - }, - "defeat": { - "1": "Heh heh! Não ligue para mim, só pegando uma vitória aqui. Entendo se você estiver chateada, mas não vá dar uma de Kieran comigo, OK?" - } - }, - "ramos": { - "encounter": { - "1": "Você gostou do jardim de diversão que fiz com todas essas plantas resistentes minhas?\n$A força delas é um sinal da minha força como jardineiro e Líder de Ginásio! Você tem certeza de que está pronta para enfrentar tudo isso?" - }, - "victory": { - "1": "Você acredita nos seus Pokémon... E eles acreditam em você também... Foi uma boa batalha, broto." - }, - "defeat": { - "1": "Hohoho... De fato. Pequenas lâminas frágeis de grama conseguem quebrar até mesmo concreto." - } - }, - "viola": { - "encounter": { - "1": "Seja as lágrimas de frustração que seguem uma derrota ou o florescer da alegria que vem com a vitória…\n$Ambos são ótimos temas para minha câmera! Fantástico! Isso vai ser simplesmente fantástico!\n$Agora venha para cima de mim!", - "2": "Minha lente está sempre focada na vitória – não vou deixar nada estragar esta foto!" - }, - "victory": { - "1": "Você e seus Pokémon me mostraram uma nova profundidade de campo! Fantástico! Simplesmente fantástico!", - "2": "O mundo que você vê através de uma lente, e o mundo que você vê com um Pokémon ao seu lado…\n$O mesmo mundo pode parecer completamente diferente dependendo do seu ponto de vista." - }, - "defeat": { - "1": "A foto do momento da minha vitória vai ser um verdadeiro sucesso!", - "2": "Sim! Tirei ótimas fotos!" - } - }, - "candice": { - "encounter": { - "1": "Você quer desafiar a Candice? Com certeza! Eu estava esperando por alguém forte!\n$Mas devo te avisar, sou forte porque sei como focar.", - "2": "Pokémon, moda, romance… É tudo uma questão de foco!\n$Vou te mostrar exatamente o que quero dizer. Prepare-se para perder!" - }, - "victory": { - "1": "Devo dizer, estou aquecida para você! Posso até te admirar um pouco.", - "2": "Uau! Você é ótima! Ganhou meu respeito!\n$Acho que seu foco e vontade nos derrubaram totalmente." - }, - "defeat": { - "1": "Eu senti sua vontade de vencer, mas eu não perco!", - "2": "Viu? O foco da Candice! O foco dos meus Pokémon também é ótimo!" - } - }, - "gardenia": { - "encounter": { - "1": "Você tem uma aura vencedora. Então, de qualquer forma, isso vai ser divertido. Vamos ter nossa batalha!" - }, - "victory": { - "1": "Incrível! Você é muito boa, não é?" - }, - "defeat": { - "1": "Sim! Meus Pokémon e eu somos perfeitamente bons!" - } - }, - "aaron": { - "encounter": { - "1": "Ok! Deixe-me enfrentar você!" - }, - "victory": { - "1": "Batalhar é um assunto profundo e complexo..." - }, - "defeat": { - "1": "Vencer um membro da Elite dos Quatro não é fácil." - } - }, - "cress": { - "encounter": { - "1": "Isso mesmo! Serei eu e meus estimados tipos Água que você deve enfrentar na batalha!" - }, - "victory": { - "1": "Perder? Eu? Não acredito nisso." - }, - "defeat": { - "1": "Este é o resultado apropriado quando eu sou seu oponente." - } - }, - "allister": { - "encounter": { - "1": "Sou Allister.\nA-aqui... vou eu..." - }, - "victory": { - "1": "Quase perdi minha máscara de tanto choque... Isso foi…\n$Uau. Posso ver sua habilidade pelo que ela é." - }, - "defeat": { - "1": "I-isso foi incrível!" - } - }, - "clay": { - "encounter": { - "1": "Harrumph! Me deixou esperando, não foi, garota? Tudo bem, hora de ver o que você pode fazer!" - }, - "victory": { - "1": "Cara, como é bom dar tudo de si e ainda assim ser derrotado!" - }, - "defeat": { - "1": "O que importa é como você reage à derrota.\n$É por isso que as pessoas que usam a derrota como combustível para melhorar são duras." - } - }, - "kofu": { - "encounter": { - "1": "Vou te servir um prato completo de Pokémon do tipo Água! Mas não tente comê-los!" - }, - "victory": { - "1": "Vaultin' Veluza! Você é animada, não é! Um pouco ANIMADA DEMAIS, se me permite dizer!" - }, - "defeat": { - "1": "Volte para me ver novamente, ouviu?" - } - }, - "tulip": { - "encounter": { - "1": "Permita-me usar minhas habilidades para deixar seus lindos Pokémon ainda mais bonitos!" - }, - "victory": { - "1": "Sua força tem uma magia que não pode ser apagada." - }, - "defeat": { - "1": "Você sabe, na minha linha de trabalho, pessoas que carecem de talento em uma área ou outra frequentemente desaparecem rapidamente - nunca mais se ouve falar delas." - } - }, - "sidney": { - "encounter": { - "1": "Gostei desse olhar que você me deu. Acho que você vai ser um bom desafio.\n$Isso é ótimo! Parece muito bom! Vamos nessa!\n$Você e eu, vamos curtir uma batalha que só pode acontecer aqui!" - }, - "victory": { - "1": "E aí, gostou? Eu perdi! Mas foi divertido, então não importa." - }, - "defeat": { - "1": "Sem ressentimentos, beleza?" - } - }, - "phoebe": { - "encounter": { - "1": "Enquanto treinava, adquiri a habilidade de me comunicar com Pokémon do tipo Fantasma. \n$Sim, o vínculo que desenvolvi com os Pokémon é extremamente forte. \n$Então, vamos lá, tente ver se você consegue até mesmo causar dano aos meus Pokémon!" - }, - "victory": { - "1": "Ah, droga. Eu perdi." - }, - "defeat": { - "1": "Estou ansiosa para batalhar com você de novo algum dia!" - } - }, - "glacia": { - "encounter": { - "1": "Tudo o que vi foram desafios de Treinadores fracos e seus Pokémon. \n$E você? Ficaria extremamente satisfeita se pudesse dar tudo de mim contra você!" - }, - "victory": { - "1": "Você e seus Pokémon… Como seus espíritos queimam!\n$O calor consumido é esmagador. \n$Não é surpresa que minhas habilidades geladas falharam em te machucar." - }, - "defeat": { - "1": "Uma batalha intensamente apaixonada, sem dúvida." - } - }, - "drake": { - "encounter": { - "1": "Para nós, batalhar com Pokémon como parceiros, você sabe o que é necessário? Você sabe o que precisa? \n$Se não souber, nunca prevalecerá contra mim!" - }, - "victory": { - "1": "Excelente, deve-se dizer." - }, - "defeat": { - "1": "Dei meu máximo nessa batalha!" - } - }, - "wallace": { - "encounter": { - "1": "Há algo em você… Uma diferença na sua postura. \n$Acho que sinto isso em você. Agora, me mostre. Mostre-me o poder que você tem com seus Pokémon. \n$E eu, por minha vez, apresentarei uma performance de ilusões na água com meus Pokémon!" - }, - "victory": { - "1": "Bravo. Agora percebo sua autenticidade e magnificência como Treinadora de Pokémon. \n$Tenho muita alegria em ter conhecido você e seus Pokémon. Você se mostrou digna." - }, - "defeat": { - "1": "Uma grande ilusão!" - } - }, - "lorelei": { - "encounter": { - "1": "Ninguém me supera quando se trata de Pokémon gelados! Movimentos congelantes são poderosos!\n$Seus Pokémon estarão à minha mercê quando estiverem congelados! Hahaha! Está pronta?" - }, - "victory": { - "1": "Como ousa!" - }, - "defeat": { - "1": "Não há nada que você possa fazer quando está congelada." - } - }, - "will": { - "encounter": { - "1": "Treinei por todo o mundo, tornando meus Pokémon psíquicos poderosos.\n$Eu só posso melhorar! Perder não é uma opção!" - }, - "victory": { - "1": "Eu… Eu não… acredito…" - }, - "defeat": { - "1": "Isso foi por pouco. Me pergunto o que está faltando em você." - } - }, - "malva": { - "encounter": { - "1": "Sinto que meu coração pode explodir em chamas. \n$Estou ardendo de ódio por você, pirralha!" - }, - "victory": { - "1": "Que novidade… Uma nova desafiadora derrotou Malva!" - }, - "defeat": { - "1": "Estou encantada! Sim, encantada por poder esmagar você sob meu calcanhar." - } - }, - "hala": { - "encounter": { - "1": "O velho Hala está aqui para fazer você gritar!" - }, - "victory": { - "1": "Pude sentir o poder que você ganhou na sua jornada." - }, - "defeat": { - "1": "Haha! Que batalha deliciosa!" - } - }, - "molayne": { - "encounter": { - "1": "Dei a posição de capitão ao meu primo Sophocles, mas estou confiante na minha habilidade. \n$Minha força é como a de uma supernova!" - }, - "victory": { - "1": "Certamente encontrei uma Treinadora interessante para enfrentar!" - }, - "defeat": { - "1": "Ahaha. Que batalha interessante." - } - }, - "rika": { - "encounter": { - "1": "Eu diria que vou pegar leve com você, mas… estaria mentindo! Pense rápido!" - }, - "victory": { - "1": "Nada mal, garota." - }, - "defeat": { - "1": "Nahahaha! Você realmente é algo mais, garota!" - } - }, - "bruno": { - "encounter": { - "1": "Nós vamos te triturar com nosso poder superior! Hoo hah!" - }, - "victory": { - "1": "Por quê? Como eu poderia perder?" - }, - "defeat": { - "1": "Você pode me desafiar o quanto quiser, mas os resultados nunca vão mudar!" - } - }, - "bugsy": { - "encounter": { - "1": "Sou Bugsy! Eu nunca perco quando se trata de Pokémon do tipo Inseto!" - }, - "victory": { - "1": "Uau, incrível! Você é uma especialista em Pokémon!\nMinha pesquisa ainda não está completa. OK, você venceu." - }, - "defeat": { - "1": "Obrigado! Graças à nossa batalha, eu também pude fazer progressos na minha pesquisa!" - } - }, - "koga": { - "encounter": { - "1": "Fwahahahaha! Pokémon não são apenas sobre força bruta--você verá em breve!" - }, - "victory": { - "1": "Ah! Você provou seu valor!" - }, - "defeat": { - "1": "Você aprendeu a temer as técnicas do ninja?" - } - }, - "bertha": { - "encounter": { - "1": "Bem, você mostraria a esta velha senhora o quanto aprendeu?" - }, - "victory": { - "1": "Bem! Querida criança, devo dizer, isso foi muito impressionante. \n$Seus Pokémon acreditaram em você e fizeram o melhor para te dar a vitória. \n$Mesmo tendo perdido, me encontro com esse sorriso bobo!" - }, - "defeat": { - "1": "Hahahahah! Parece que esta velha senhora ganhou!" - } - }, - "lenora": { - "encounter": { - "1": "Bem, desafiadora, vou pesquisar como você batalha com os Pokémon que criou com tanto carinho!" - }, - "victory": { - "1": "Minha teoria sobre você estava correta. Você é mais do que talentosa… Você é motivada! Eu te saúdo!" - }, - "defeat": { - "1": "Ah ha ha! Se você perder, certifique-se de analisar o porquê e use esse conhecimento na próxima batalha!" - } - }, - "siebold": { - "encounter": { - "1": "Enquanto eu estiver vivo, continuarei em busca da culinária suprema... e dos oponentes mais fortes em batalha!" - }, - "victory": { - "1": "Guardarei minha memória de você e seus Pokémon para sempre em meu coração." - }, - "defeat": { - "1": "Nossa batalha Pokémon foi como alimento para minha alma. Isso vai me manter em frente. \n$É assim que vou prestar meus respeitos a você por dar tudo de si na batalha!" - } - }, - "roxie": { - "encounter": { - "1": "Prepare-se! Vou arrancar algum senso de você!" - }, - "victory": { - "1": "Selvagem! Sua razão já é mais tóxica que a minha!" - }, - "defeat": { - "1": "Ei, vamos lá! Seja séria! Você tem que dar mais de si!" - } - }, - "olivia": { - "encounter": { - "1": "Não precisa de introdução aqui. Hora de batalhar comigo, Olivia!" - }, - "victory": { - "1": "Realmente encantador… Tanto você quanto seus Pokémon…" - }, - "defeat": { - "1": "Mmm-hmm." - } - }, - "poppy": { - "encounter": { - "1": "Oooh! Você quer ter uma batalha Pokémon comigo?" - }, - "victory": { - "1": "Uagh?! Mmmuuuggghhh…" - }, - "defeat": { - "1": "Yaaay! Eu consegui! Eu der-ro-tei você! Você pode vir para… Para… Uma revanche? \n$Venha para uma revanche quando quiser!" - } - }, - "agatha": { - "encounter": { - "1": "Pokémon são para batalhas! Vou te mostrar como um verdadeiro Treinador batalha!" - }, - "victory": { - "1": "Oh meu! Você é algo especial, criança!" - }, - "defeat": { - "1": "Bahaha. É assim que uma batalha adequada é feita!" - } - }, - "flint": { - "encounter": { - "1": "Espero que você esteja aquecida, porque aqui vem o Big Bang!" - }, - "victory": { - "1": "Incrível! Seus movimentos são tão quentes que fazem os meus parecerem mornos!" - }, - "defeat": { - "1": "Huh? Isso é tudo? Acho que você precisa de um pouco mais de paixão." - } - }, - "grimsley": { - "encounter": { - "1": "O vencedor leva tudo, e não sobra nada para o perdedor." - }, - "victory": { - "1": "Quando se perde, perde-se tudo… A próxima coisa que vou procurar será a vitória, também!" - }, - "defeat": { - "1": "Se alguém vence, a pessoa que lutou contra essa pessoa perde." - } - }, - "caitlin": { - "encounter": { - "1": "Sou eu que apareci quando a flor se abriu. Você que estava esperando…\n$Você parece uma Treinadora de Pokémon com força refinada e bondade profunda. \n$O que eu procuro no meu oponente é uma força soberba… \n$Por favor, libere seu poder ao máximo!" - }, - "victory": { - "1": "Meus Pokémon e eu aprendemos muito! Agradeço a você." - }, - "defeat": { - "1": "Aspiro a reivindicar a vitória com elegância e graça." - } - }, - "diantha": { - "encounter": { - "1": "Batalhar contra você e seus Pokémon, todos vocês cheios de esperança para o futuro… \n$Honestamente, isso apenas me enche da energia que preciso para continuar enfrentando cada novo dia! Sim!" - }, - "victory": { - "1": "Testemunhar os espíritos nobres de você e seus Pokémon em batalha realmente tocou meu coração…" - }, - "defeat": { - "1": "Oh, fantástico! O que achou? Minha equipe foi bem legal, né?" - } - }, - "wikstrom": { - "encounter": { - "1": "Bem encontrado, jovem desafiadora! Verdadeiramente sou a lâmina famosa de aço endurecido, Duque Wikstrom! \n$Que a batalha comece! En garde!" - }, - "victory": { - "1": "Gloriosa! A confiança que você compartilha com seu honrado Pokémon supera até mesmo a minha!" - }, - "defeat": { - "1": "Que tipo de magia é essa? Meu coração bate incessantemente no meu peito! \n$Vencer contra uma oponente tão digna dá asas à minha alma--assim eu voo!" - } - }, - "acerola": { - "encounter": { - "1": "Batalhar é simplesmente divertido! Vamos lá, eu posso te derrotar!" - }, - "victory": { - "1": "Eu… Estou sem palavras! Como você conseguiu?!" - }, - "defeat": { - "1": "Ehaha! Que vitória incrível!" - } - }, - "larry_elite": { - "encounter": { - "1": "Olá… Sou eu, Larry.\n$Eu também sou membro da Elite dos Quatro, sim… Infelizmente para mim." - }, - "victory": { - "1": "Bem, isso tirou o vento debaixo das nossas asas…" - }, - "defeat": { - "1": "É hora de uma reunião com o chefe." - } - }, - "lance": { - "encounter": { - "1": "Estive esperando por você. Permita-me testar suas habilidades.", - "2": "Achei que você conseguiria chegar tão longe. Vamos começar." - }, - "victory": { - "1": "Você me pegou. Você é magnífica!", - "2": "Nunca esperei que outra Treinadora me derrotasse… Estou surpreso." - }, - "defeat": { - "1": "Isso foi por pouco. Quer tentar de novo?", - "2": "Não é que você seja fraca. Não se incomode com isso." - } - }, - "karen": { - "encounter": { - "1": "Eu sou Karen. Você gostaria de um duelo com meus Pokémon do tipo Sombrio?", - "2": "Sou diferente daqueles que você já conheceu.", - "3": "Você montou uma equipe charmosa. Nossa batalha deve ser boa." - }, - "victory": { - "1": "Não! Eu não posso vencer. Como você ficou tão forte?", - "2": "Não me desviarei do meu caminho escolhido.", - "3": "O Campeão está ansioso para te conhecer." - }, - "defeat": { - "1": "Isso era o que eu esperava.", - "2": "Bem, isso foi relativamente divertido.", - "3": "Venha me visitar a qualquer momento." - } - }, - "milo": { - "encounter": { - "1": "Parece que você entende bem os Pokémon. \n$Isso vai ser uma batalha e tanto! \n$Vou ter que usar a Dynamax no meu Pokémon se eu quiser vencer!" - }, - "victory": { - "1": "O poder da Grama murchou… Que desafiadora incrível!" - }, - "defeat": { - "1": "Isso realmente vai te deixar em choque e admiração." - } - }, - "lucian": { - "encounter": { - "1": "Só um momento, por favor. O livro que estou lendo está quase no clímax emocionante… \n$O herói obteve uma espada mística e está prestes a enfrentar sua prova final… Ah, tanto faz. \n$Já que você chegou tão longe, vou deixar isso de lado e batalhar com você. \n$Deixe-me ver se você alcançará tanta glória quanto o herói do meu livro!" - }, - "victory": { - "1": "Eu vejo… Parece que você me colocou em xeque-mate." - }, - "defeat": { - "1": "Tenho uma reputação a manter." - } - }, - "drasna": { - "encounter": { - "1": "Você deve ser uma Treinadora forte. Sim, bastante forte…\n$Isso é uma notícia maravilhosa! Enfrentar oponentes como você e sua equipe fará meus Pokémon crescerem como ervas daninhas!" - }, - "victory": { - "1": "Oh, meu Deus. Isso foi uma batalha rápida… Espero que você volte novamente algum dia!" - }, - "defeat": { - "1": "Como isso é possível?" - } - }, - "kahili": { - "encounter": { - "1": "Então, aqui está você… Por que não vemos para quem os ventos favorecem hoje, você… ou eu?" - }, - "victory": { - "1": "É frustrante para mim como membro da Elite dos Quatro, mas parece que sua força é real." - }, - "defeat": { - "1": "Essa foi uma jogada de mestre!" - } - }, - "hassel": { - "encounter": { - "1": "Prepare-se para aprender em primeira mão como é a respiração ardente de uma batalha feroz!" - }, - "victory": { - "1": "A sorte sorriu para mim desta vez, mas… \n$Julgando pelo andamento da luta, quem sabe se serei tão sortudo na próxima vez." - }, - "defeat": { - "1": "Essa foi uma jogada de mestre!" - } - }, - "blue": { - "encounter": { - "1": "Você deve ser muito boa para chegar tão longe." - }, - "victory": { - "1": "Só perdi para ele e agora para você… Ele? Hee, hee…" - }, - "defeat": { - "1": "Viu? Meu poder é o que me trouxe até aqui." - } - }, - "piers": { - "encounter": { - "1": "Prepare-se para uma mosh pit comigo e minha galera! Spikemuth, é hora de roquear!" - }, - "victory": { - "1": "Eu e minha equipe demos o nosso melhor. Vamos nos encontrar novamente para uma batalha algum dia…" - }, - "defeat": { - "1": "Minha garganta está desgastada de tanto gritar… Mas essa foi uma batalha empolgante!" - } - }, - "red": { - "encounter": { - "1": "…!" - }, - "victory": { - "1": "…?" - }, - "defeat": { - "1": "…!" - } - }, - "jasmine": { - "encounter": { - "1": "Oh… Seus Pokémon são impressionantes. Acho que vou gostar disso." - }, - "victory": { - "1": "Você é realmente forte. Vou ter que me esforçar muito mais também." - }, - "defeat": { - "1": "Eu nunca esperei ganhar." - } - }, - "lance_champion": { - "encounter": { - "1": "Ainda sou o Campeão. Não vou segurar nada." - }, - "victory": { - "1": "Esta é a emergência de uma nova Campeã." - }, - "defeat": { - "1": "Defendi com sucesso meu Campeonato." - } - }, - "steven": { - "encounter": { - "1": "Diga-me… O que você viu na sua jornada com seus Pokémon? \n$O que você sentiu, encontrando tantos outros Treinadores por aí? \n$Viajar por esta terra rica… Isso despertou algo dentro de você? \n$Quero que você venha até mim com tudo o que aprendeu. \n$Meus Pokémon e eu responderemos com tudo o que sabemos!" - }, - "victory": { - "1": "Então eu, o Campeão, caio em derrota…" - }, - "defeat": { - "1": "Esse tempo foi bem gasto! Obrigado!" - } - }, - "cynthia": { - "encounter": { - "1": "Eu, Cynthia, aceito seu desafio! Não haverá nenhuma trégua da minha parte!" - }, - "victory": { - "1": "Não importa o quão divertida a batalha seja, ela sempre terminará algum dia…" - }, - "defeat": { - "1": "Mesmo que você perca, nunca perca o amor pelos Pokémon." - } - }, - "iris": { - "encounter": { - "1": "Sabe de uma coisa? Estou realmente ansiosa para ter batalhas sérias com Treinadores fortes! \n$Quero dizer, vamos lá! Os Treinadores que chegam aqui são Treinadores que desejam a vitória com todas as fibras do seu ser! \n$E eles estão batalhando ao lado de Pokémon que passaram por inúmeras batalhas difíceis! \n$Se eu batalhar com pessoas assim, não só eu ficarei mais forte, meus Pokémon também! \n$E nós vamos nos conhecer ainda melhor! OK! Prepare-se! \n$Sou Iris, a Campeã da Liga Pokémon, e vou te derrotar!" - }, - "victory": { - "1": "Aghhhh… Eu dei o meu melhor, mas nós perdemos…" - }, - "defeat": { - "1": "Yay! Nós vencemos!" - } - }, - "hau": { - "encounter": { - "1": "Eu me pergunto se um Treinador batalha de maneira diferente dependendo se ele é de uma região quente ou fria.\n$Vamos testar isso!" - }, - "victory": { - "1": "Isso foi incrível! Acho que entendi um pouco melhor seu estilo agora!" - }, - "defeat": { - "1": "Cara, essa foi uma batalha e tanto!" - } - }, - "geeta": { - "encounter": { - "1": "Decidi entrar na batalha mais uma vez. \n$Venha agora… Mostre-me os frutos do seu treinamento." - }, - "victory": { - "1": "Estou ansiosa para notícias de todas as suas conquistas!" - }, - "defeat": { - "1": "Qual o problema? Isso é tudo?" - } - }, - "nemona": { - "encounter": { - "1": "Yesss! Estou tão empolgada! Hora de soltar tudo!" - }, - "victory": { - "1": "Bem, isso foi ruim, mas ainda me diverti! Eu te pego na próxima!" - }, - "defeat": { - "1": "Bem, essa foi uma ótima batalha! Frutífera, com certeza." - } - }, - "leon": { - "encounter": { - "1": "Vamos ter um tempo absolutamente campeão!" - }, - "victory": { - "1": "Meu tempo como Campeão acabou… \n$Mas que tempo campeão foi! \n$Obrigado pela melhor batalha que já tive!" - }, - "defeat": { - "1": "Um tempo absolutamente campeão, foi!" - } - }, - "whitney": { - "encounter": { - "1": "Eai! Você não acha que os Pokémon são, tipo, super fofos?" - }, - "victory": { - "1": "Waaah! Waaah! Você é tão má!" - }, - "defeat": { - "1": "E é isso!" - } - }, - "chuck": { - "encounter": { - "1": "Hah! Você quer me desafiar? É corajosa ou apenas ignorante?" - }, - "victory": { - "1": "Você é forte! Por favor, me faça seu aprendiz?" - }, - "defeat": { - "1": "Aí está. Você percebe o quanto sou mais poderoso que você?" - } - }, - "katy": { - "encounter": { - "1": "Não baixe a guarda, a menos que queira se ver jogada no chão!" - }, - "victory": { - "1": "Todos os meus adoráveis Pokémon caíram como moscas!" - }, - "defeat": { - "1": "Coma, meu adorável Vivillon!" - } - }, - "pryce": { - "encounter": { - "1": "A juventude sozinha não garante a vitória! Experiência é o que conta." - }, - "victory": { - "1": "Excelente! Isso foi perfeito. Tente não esquecer o que sente agora." - }, - "defeat": { - "1": "Exatamente como eu imaginei." - } - }, - "clair": { - "encounter": { - "1": "Você sabe quem eu sou? E ainda se atreve a me desafiar?" - }, - "victory": { - "1": "Eu me pergunto até onde você pode ir com seu nível de habilidade. Isso deve ser fascinante." - }, - "defeat": { - "1": "E é isso." - } - }, - "maylene": { - "encounter": { - "1": "Vim desafiá-la agora e não vou segurar nada. \n$Por favor, prepare-se para a batalha!" - }, - "victory": { - "1": "Eu admito a derrota…" - }, - "defeat": { - "1": "Isso foi incrível." - } - }, - "fantina": { - "encounter": { - "1": "Você vai me desafiar, não é? Mas eu vou ganhar. \n$É o que a Líder do Ginásio de Hearthome faz, não?" - }, - "victory": { - "1": "Você é tão incrivelmente forte. Sei porque perdi." - }, - "defeat": { - "1": "Estou tão, tão, muito feliz!" - } - }, - "byron": { - "encounter": { - "1": "Treinadora! Você é jovem, assim como meu filho, Roark. \n$Com mais Treinadores jovens assumindo o comando, o futuro dos Pokémon é brilhante! \n$Então, como uma parede para os jovens, aceitarei seu desafio!" - }, - "victory": { - "1": "Hmm! Meus Pokémon robustos--derrotados!" - }, - "defeat": { - "1": "Gwahahaha! Como foram meus Pokémon robustos?!" - } - }, - "olympia": { - "encounter": { - "1": "Um costume antigo decidindo o destino de alguém. A batalha começa!" - }, - "victory": { - "1": "Crie seu próprio caminho. Não deixe nada te atrapalhar. Seu destino, seu futuro." - }, - "defeat": { - "1": "Nosso caminho está claro agora." - } - }, - "volkner": { - "encounter": { - "1": "Já que você chegou tão longe, deve ser bastante forte…\n$Espero que você seja a Treinadora que me faça lembrar como é divertido batalhar!" - }, - "victory": { - "1": "Você me venceu…\n$Seu desejo e a maneira nobre como seus Pokémon batalharam por você… \n$Eu até me senti emocionado durante nossa luta. Foi uma batalha muito boa." - }, - "defeat": { - "1": "Não foi nada chocante…\n$Isso não é o que eu queria!" - } - }, - "burgh": { - "encounter": { - "1": "M'hm… Se eu ganhar esta batalha, sinto que posso desenhar um quadro diferente de qualquer outro. \n$OK! Posso ouvir minha musa da batalha claramente. Vamos direto ao ponto!", - "2": "Claro, estou realmente orgulhoso de todos os meus Pokémon! \n$Bem agora… Vamos direto ao ponto!" - }, - "victory": { - "1": "Acabou? Minha musa me abandonou?", - "2": "Hmm… Acabou! Você é incrível!" - }, - "defeat": { - "1": "Uau… É bonito de alguma forma, não é…", - "2": "Às vezes ouço as pessoas dizerem que foi uma vitória feia. \n$Acho que se você está dando o seu melhor, qualquer vitória é bonita." - } - }, - "elesa": { - "encounter": { - "1": "C'est fini! Quando tenho certeza disso, sinto um choque elétrico percorrer meu corpo! \n$Quero sentir essa sensação, então agora meus amados Pokémon vão fazer sua cabeça girar!" - }, - "victory": { - "1": "Eu queria fazer sua cabeça girar, mas você me surpreendeu." - }, - "defeat": { - "1": "Isso foi insatisfatório de alguma forma… Você dará tudo de si na próxima vez?" - } - }, - "skyla": { - "encounter": { - "1": "Finalmente é hora do confronto! Isso significa a batalha Pokémon que decide quem está no topo, certo? \n$Eu amo estar no topo! Porque você pode ver para sempre e sempre de lugares altos! \n$Então, que tal nós nos divertirmos?" - }, - "victory": { - "1": "Ser seu oponente na batalha é uma nova fonte de força para mim. Obrigada!" - }, - "defeat": { - "1": "Ganhar ou perder, você sempre ganha algo com uma batalha, certo?" - } - }, - "brycen": { - "encounter": { - "1": "Há também força em estar com outras pessoas e Pokémon. \n$Receber o apoio deles te fortalece. Vou te mostrar esse poder!" - }, - "victory": { - "1": "A maravilhosa combinação de você e seus Pokémon! Que amizade linda!" - }, - "defeat": { - "1": "Condições extremas realmente testam e treinam você!" - } - }, - "drayden": { - "encounter": { - "1": "O que eu quero encontrar é um jovem Treinador que possa me mostrar um futuro brilhante. \n$Vamos batalhar com tudo o que temos: sua habilidade, minha experiência e o amor com que criamos nossos Pokémon!" - }, - "victory": { - "1": "Esse sentimento intenso que me invade após uma derrota… Não sei como descrevê-lo." - }, - "defeat": { - "1": "Harrumph! Sei que sua habilidade é maior que isso!" - } - }, - "grant": { - "encounter": { - "1": "Só há uma coisa que desejo. \n$Que, superando um ao outro, encontremos um caminho para alturas ainda maiores." - }, - "victory": { - "1": "Você é uma parede que não consigo superar!" - }, - "defeat": { - "1": "Não desista. \n$Isso é tudo o que realmente importa. \n$As lições mais importantes da vida são simples." - } - }, - "korrina": { - "encounter": { - "1": "Hora da grande aparição de Lady Korrina!" - }, - "victory": { - "1": "É o seu próprio ser que permite que seus Pokémon evoluam!" - }, - "defeat": { - "1": "Que batalha explosiva!" - } - }, - "clemont": { - "encounter": { - "1": "Oh! Estou feliz por termos nos encontrado!" - }, - "victory": { - "1": "Sua paixão pela batalha me inspira!" - }, - "defeat": { - "1": "Parece que minha Máquina Treinadora-Crescer-Forte, Mach 2 está realmente funcionando!" - } - }, - "valerie": { - "encounter": { - "1": "Oh, se não é uma jovem Treinadora… É adorável conhecê-la assim. \n$Então, suponho que você ganhou o direito a uma batalha, como recompensa por seus esforços. \n$Uma elusiva Fada pode parecer frágil como a brisa e delicado como uma flor, mas é forte." - }, - "victory": { - "1": "Espero que você encontre coisas para sorrir amanhã…" - }, - "defeat": { - "1": "Oh meu Deus, que pena…" - } - }, - "wulfric": { - "encounter": { - "1": "Sabe de uma coisa? Todos falamos muito sobre o que você aprende com as batalhas e os laços e tudo mais…\n$Mas realmente, eu só faço isso porque é divertido. \n$Quem se importa com o grandioso? Vamos batalhar!" - }, - "victory": { - "1": "Incrível! Sou duro como um iceberg, mas você me quebrou por completo!" - }, - "defeat": { - "1": "Lute comigo e é isso que acontece!" - } - }, - "kabu": { - "encounter": { - "1": "Todo Treinador e Pokémon treina duro em busca da vitória. \n$Mas isso significa que seu oponente também está se esforçando para vencer. \n$No final, a partida é decidida por qual lado é capaz de liberar seu verdadeiro potencial." - }, - "victory": { - "1": "Estou feliz por poder lutar com você hoje!" - }, - "defeat": { - "1": "É uma ótima maneira de sentir meu próprio crescimento!" - } - }, - "bea": { - "encounter": { - "1": "Você tem um espírito inabalável que não será movido, não importa como você seja atacado? \n$Acho que vou testar isso, certo?" - }, - "victory": { - "1": "Senti o espírito de luta de seus Pokémon enquanto você os liderava na batalha." - }, - "defeat": { - "1": "Essa foi a melhor partida que alguém poderia esperar." - } - }, - "opal": { - "encounter": { - "1": "Deixe-me ver como você e seu Pokémon parceiro se comportam!" - }, - "victory": { - "1": "Seu rosa ainda está faltando, mas você é uma Treinadora excelente com Pokémon excelentes." - }, - "defeat": { - "1": "Muito ruim para você, eu acho." - } - }, - "bede": { - "encounter": { - "1": "Suponho que devo provar além de qualquer dúvida o quão patética você é e quão forte eu sou." - }, - "victory": { - "1": "Eu vejo… Bem, tudo bem. Eu não estava me esforçando muito de qualquer maneira." - }, - "defeat": { - "1": "Bom trabalho, eu suponho." - } - }, - "gordie": { - "encounter": { - "1": "Então, vamos acabar com isso." - }, - "victory": { - "1": "Eu só quero me enterrar em um buraco… Bem, acho que seria mais como cair daqui." - }, - "defeat": { - "1": "Batalhe como sempre faz, a vitória seguirá!" - } - }, - "marnie": { - "encounter": { - "1": "A verdade é que, quando tudo está dito e feito… Eu realmente só quero me tornar Campeã por mim mesma! \n$Então, não leve para o pessoal quando eu chutar seu traseiro!" - }, - "victory": { - "1": "OK, então eu perdi… Mas consegui ver muitos dos pontos bons de você e seus Pokémon!" - }, - "defeat": { - "1": "Espero que você tenha gostado das nossas táticas de batalha." - } - }, - "raihan": { - "encounter": { - "1": "Vou derrotar o Campeão, vencer todo o torneio e provar ao mundo o quão forte o grande Raihan realmente é!" - }, - "victory": { - "1": "Eu pareço bem mesmo quando perco. \n$É uma verdadeira maldição. \n$Acho que é hora de mais uma selfie!" - }, - "defeat": { - "1": "Vamos tirar uma selfie para lembrar disso." - } - }, - "brassius": { - "encounter": { - "1": "Pressuponho que você está pronta? Que nossa obra de arte colaborativa comece!" - }, - "victory": { - "1": "Ahhh…avant-garde!" - }, - "defeat": { - "1": "Começarei uma nova peça imediatamente!" - } - }, - "iono": { - "encounter": { - "1": "Como você está se sentindo sobre esta batalha?\n$...\n$Vamos começar o show! Quão forte é o nossa desafiadora? \n$Eu não sei! Vamos descobrir juntos!" - }, - "victory": { - "1": "Você é tão chamativa e brilhante quanto um Raio do Trovão de 10.000.000 volts, amiga!" - }, - "defeat": { - "1": "Seus olhos são MEUS!" - } - }, - "larry": { - "encounter": { - "1": "Quando tudo está dito e feito, a simplicidade é mais forte." - }, - "victory": { - "1": "Uma porção de derrota, hein?" - }, - "defeat": { - "1": "Vou encerrar o dia." - } - }, - "ryme": { - "encounter": { - "1": "Vamos lá, baby! Me agite até os ossos!" - }, - "victory": { - "1": "Você é legal, minha amiga, você move minha ALMA!" - }, - "defeat": { - "1": "Até mais, baby!" - } - }, - "grusha": { - "encounter": { - "1": "Tudo o que preciso fazer é garantir que o poder do meu Pokémon te arrependa até os ossos!" - }, - "victory": { - "1": "Sua paixão ardente... Eu meio que gosto, para ser honesto." - }, - "defeat": { - "1": "As coisas não esquentaram para você." - } - }, - "marnie_elite": { - "encounter": { - "1": "Você chegou até aqui, hein? Vamos ver se você pode lidar com meus Pokémon!", - "2": "Vou dar o meu melhor, mas não pense que vou pegar leve com você!" - }, - "victory": { - "1": "Não acredito que perdi... Mas você mereceu essa vitória. Bem feito!", - "2": "Parece que ainda tenho muito a aprender. Porém, grande batalha!" - }, - "defeat": { - "1": "Você lutou bem, mas eu tenho a vantagem! Melhor sorte na próxima vez!", - "2": "Parece que meu treinamento valeu a pena. Obrigado pela batalha!" - } - }, - "nessa_elite": { - "encounter": { - "1": "As marés estão mudando a meu favor. Pronta para ser levada pela corrente?", - "2": "Vamos fazer ondas com esta batalha! Espero que esteja preparada!" - }, - "victory": { - "1": "Você navegou nessas águas perfeitamente... Bem feito!", - "2": "Parece que minhas correntes não foram páreo para você. Bom trabalho!" - }, - "defeat": { - "1": "A água sempre encontra um caminho. Essa foi uma batalha refrescante!", - "2": "Você lutou bem, mas o poder do oceano é imparável!" - } - }, - "bea_elite": { - "encounter": { - "1": "Prepare-se! Meu espírito de luta brilha intensamente!", - "2": "Vamos ver se você consegue acompanhar meu ritmo implacável!" - }, - "victory": { - "1": "Sua força... É impressionante. Você realmente merece essa vitória.", - "2": "Nunca senti essa intensidade antes. Trabalho incrível!" - }, - "defeat": { - "1": "Outra vitória para meu rigoroso regime de treinamento! Bem feito!", - "2": "Você tem força, mas eu treinei mais. Grande batalha!" - } - }, - "allister_elite": { - "encounter": { - "1": "As sombras caem... Você está pronta para enfrentar seus medos?", - "2": "Vamos ver se você pode lidar com a escuridão que eu comando." - }, - "victory": { - "1": "Você dissipou as sombras... Por enquanto. Bem feito.", - "2": "Sua luz atravessou minha escuridão. Ótimo trabalho." - }, - "defeat": { - "1": "As sombras falaram... Sua força não é suficiente.", - "2": "A escuridão triunfa... Talvez na próxima vez você veja a luz." - } - }, - "raihan_elite": { - "encounter": { - "1": "Tempestade se formando! Vamos ver se você aguenta essa luta!", - "2": "Prepare-se para enfrentar o olho da tempestade!" - }, - "victory": { - "1": "Você enfrentou a tempestade... Trabalho incrível!", - "2": "Você navegou nos ventos perfeitamente... Grande batalha!" - }, - "defeat": { - "1": "Outra tempestade enfrentada, outra vitória conquistada! Bem lutado!", - "2": "Você foi pega na minha tempestade! Melhor sorte na próxima vez!" - } - }, - "alder": { - "encounter": { - "1": "Se prepare para uma batalha contra o Treinador mais forte de Unova!" - }, - "victory": { - "1": "Muito bem! Você certamente é um talento incomparável." - }, - "defeat": { - "1": "Um vento fresco sopra em meu coração...\n$Que esforço extraordinário!" - } - }, - "kieran": { - "encounter": { - "1": "Através do trabalho duro, eu me torno cada vez mais forte!\n$Eu não perco." - }, - "victory": { - "1": "Eu não acredito...\n$Que batalha divertida e emocionante!" - }, - "defeat": { - "1": "Uau, que batalha!\n$Hora de você treinar ainda mais." - } - }, - "rival": { - "encounter": { - "1": "@c{smile}Eai, estava procurando você! Sabia que você estava ansiosa para começar, mas esperava pelo menos um tchau…\n$@c{smile_eclosed}Então você está realmente perseguindo seu sonho, hein?\n Quase não consigo acreditar.\n$@c{serious_smile_fists}Já que estamos aqui, que tal uma batalha?\nAfinal, quero ter certeza de que você está pronta.\n$@c{serious_mopen_fists}Não se segure, quero que você dê tudo de si!" - }, - "victory": { - "1": "@c{shock}Caramba… Você me limpou.\nVocê é mesmo uma novata?\n$@c{smile}Talvez tenha sido um pouco de sorte, mas…\nQuem sabe você consiga chegar até o fim.\n$Aliás, o professor me pediu para te dar esses itens. Eles parecem bem legais.\n$@c{serious_smile_fists}Boa sorte lá fora!" - } - }, - "rival_female": { - "encounter": { - "1": "@c{smile_wave}Aí está você! Procurei você em todo lugar!\n@c{angry_mopen}Esqueceu de se despedir da sua melhor amiga?\n$@c{smile_ehalf}Você está indo atrás do seu sonho, né?\nEsse dia realmente chegou, não é…\n$@c{smile}Enfim, vou te perdoar por ter me esquecido, mas com uma condição. @c{smile_wave_wink}Você tem que lutar comigo!\n$@c{angry_mopen}Dê o seu melhor! Não quer que sua aventura acabe antes de começar, né?" - }, - "victory": { - "1": "@c{shock}Você acabou de começar e já está tão forte?!@d{96}\n@c{angry}Você trapaceou, não foi?\n$@c{smile_wave_wink}Brincadeirinha!@d{64} @c{smile_eclosed}Eu perdi de forma justa… Tenho a sensação de que você vai se sair muito bem lá fora.\n$@c{smile}Aliás, o professor pediu para eu te dar alguns itens. Espero que sejam úteis!\n$@c{smile_wave}Dê o seu melhor, como sempre! Eu acredito em você!" - } - }, - "rival_2": { - "encounter": { - "1": "@c{smile}Eai, você também está aqui?\n@c{smile_eclosed}Ainda com um recorde perfeito, hein…?\n$@c{serious_mopen_fists}Sei que parece que eu te segui até aqui, mas isso não é totalmente verdade.\n$@c{serious_smile_fists}Sinceramente, tenho estado ansioso por uma revanche desde que você me venceu em casa.\n$Tenho treinado bastante, então vou dar uma luta difícil desta vez.\n$@c{serious_mopen_fists}Não se segure, assim como antes!\nVamos lá!" - }, - "victory": { - "1": "@c{neutral_eclosed}Ah. Acho que fui confiante demais.\n$@c{smile}Tudo bem, no entanto. Eu imaginei que isso poderia acontecer.\n@c{serious_mopen_fists}Isso só significa que preciso me esforçar mais para a próxima vez!\n\n$@c{smile}Ah, não que você precise realmente de ajuda, mas eu tinha um extra desses itens e pensei que você poderia querer.\n$@c{serious_smile_fists}Não espere outro depois deste!\nNão posso continuar dando vantagem ao meu oponente.\n$@c{smile}Enfim, cuide-se, e aproveite o evento!" - } - }, - "rival_2_female": { - "encounter": { - "1": "@c{smile_wave}Oh, que surpresa te encontrar aqui. Parece que você ainda está invicta. @c{angry_mopen}Hum… Nada mal!\n$@c{angry_mopen}Eu sei o que você está pensando, e não, eu não estava te espionando. @c{smile_eclosed}Acontece que eu estava na área.\n$@c{smile_ehalf}Estou feliz por você, mas só quero te avisar que está tudo bem perder às vezes.\n$@c{smile}Aprendemos com nossos erros, muitas vezes mais do que se continuássemos vencendo.\n$@c{angry_mopen}De qualquer forma, tenho treinado duro para nossa revanche, então é melhor você dar o seu melhor!" - }, - "victory": { - "1": "@c{neutral}Eu… não era para eu perder dessa vez…\n$@c{smile}Ah bem. Isso só significa que vou ter que treinar ainda mais para a próxima vez!\n$@c{smile_wave}Também consegui mais dois desses para você!\n@c{smile_wave_wink}Não precisa me agradecer~.\n$@c{angry_mopen}Estes são os últimos, hein! Você não vai ganhar mais nenhum presente de mim depois desse!\n$@c{smile_wave}Continue assim, e aproveite o evento!" - }, - "defeat": { - "1": "Está tudo bem perder às vezes…" - } - }, - "rival_3": { - "encounter": { - "1": "@c{smile}Eai, olha quem é! Faz um tempo.\n@c{neutral}Você… ainda está invicta? Hum.\n$@c{neutral_eclosed}As coisas têm sido meio… estranhas.\nNão é a mesma coisa em casa sem você.\n$@c{serious}Eu sei que é egoísta, mas preciso desabafar.\n@c{neutral_eclosed}Acho que você está se metendo em algo grande demais aqui.\n$@c{serious}Nunca perder é irrealista.\nPrecisamos perder às vezes para crescer.\n$@c{neutral_eclosed}Você teve uma grande jornada, mas ainda há muito pela frente, e só vai ficar mais difícil. @c{neutral}Você está preparada para isso?\n$@c{serious_mopen_fists}Se sim, prove para mim." - }, - "victory": { - "1": "@c{angry_mhalf}Isso é ridículo… Eu mal parei de treinar…\nComo ainda estamos tão distantes?" - } - }, - "rival_3_female": { - "encounter": { - "1": "@c{smile_wave}Quanto tempo! Ainda não perdeu, né.\n@c{angry}Você está começando a me irritar. @c{smile_wave_wink}Brincadeirinha!\n$@c{smile_ehalf}Mas sério, você não sente saudades de casa? Ou… de mim?\nEu… Eu quero dizer, sentimos muito a sua falta.\n$@c{smile_eclosed}Eu apoio o seu sonho e tudo mais, mas a realidade é que você vai perder mais cedo ou mais tarde.\n$@c{smile}E quando isso acontecer, estarei lá para você, como sempre.\n@c{angry_mopen}Agora, deixe-me mostrar o quão forte eu me tornei!" - }, - "victory": { - "1": "@c{shock}Depois de tudo isso… não foi o suficiente…?\nVocê nunca vai voltar a esse ritmo…" - }, - "defeat": { - "1": "Você deu o seu melhor, agora vamos para casa." - } - }, - "rival_4": { - "encounter": { - "1": "@c{neutral}Oi.\n$Não vou enrolar com você.\n@c{neutral_eclosed}Estou aqui para vencer, simples assim.\n$@c{serious_mhalf_fists}Aprendi a maximizar meu potencial dedicando todo o meu tempo ao treino.\n$@c{smile}Você ganha muito tempo extra quando corta o sono e a interação social desnecessários.\n$@c{serious_mopen_fists}Nada disso importa mais, não até eu vencer.\n$@c{neutral_eclosed}Cheguei ao ponto de não perder mais.\n@c{smile_eclosed}Acho que sua filosofia não estava tão errada afinal.\n$@c{angry_mhalf}Perder é para os fracos, e eu não sou mais fraco.\n$@c{serious_mopen_fists}Prepare-se." - }, - "victory": { - "1": "@c{neutral}O que…@d{64} O que é você?" - } - }, - "rival_4_female": { - "encounter": { - "1": "@c{neutral}Sou eu! Você não esqueceu de mim de novo… esqueceu?\n$@c{smile}Você deveria se orgulhar de até onde chegou. Parabéns!\nMas parece que é o fim da sua jornada.\n$@c{smile_eclosed}Você despertou algo em mim que eu nunca soube que existia.\nParece que agora tudo o que faço é treinar.\n$@c{smile_ehalf}Eu mal como ou durmo agora, só treino meus Pokémon o dia todo, ficando mais forte a cada vez.\n$@c{neutral}Na verdade, eu… mal me reconheço.\n$E agora, finalmente atingi o desempenho máximo.\nNão acho que alguém poderia me vencer agora.\n$E sabe de uma coisa? É tudo por sua causa.\n@c{smile_ehalf}Eu não sei se te agradeço ou te odeio.\n$@c{angry_mopen}Prepare-se." - }, - "victory": { - "1": "@c{neutral}O que…@d{64} O que é você?" - }, - "defeat": { - "1": "$@c{smile}Você deveria se orgulhar de até onde chegou." - } - }, - "rival_5": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - } - }, - "rival_5_female": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - }, - "defeat": { - "1": "$@c{smile_ehalf}…" - } - }, - "rival_6": { - "encounter": { - "1": "@c{smile_eclosed}Nos encontramos de novo.\n$@c{neutral}Tive um tempo para refletir sobre tudo isso.\nHá uma razão para tudo isso parecer tão estranho.\n$@c{neutral_eclosed}Seu sonho, minha vontade de te vencer…\nTudo faz parte de algo maior.\n$@c{serious}Isso não é sobre mim, nem sobre você… É sobre o mundo, @c{serious_mhalf_fists}e é meu propósito te levar ao limite.\n$@c{neutral_eclosed}Se cumpri esse propósito, não posso dizer, mas fiz tudo ao meu alcance.\n$@c{neutral}Este lugar em que acabamos é assustador… Mas de alguma forma me sinto indiferente, como se já tivesse estado aqui antes.\n$@c{serious_mhalf_fists}Você sente o mesmo, não sente?\n$@c{serious}…é como se algo aqui estivesse falando comigo.\nIsso é tudo o que o mundo conhece há muito tempo.\n$Aqueles momentos que apreciamos juntos que parecem tão recentes não passam de uma memória distante.\n$@c{neutral_eclosed}Quem pode dizer se eles foram realmente reais em primeiro lugar.\n$@c{serious_mopen_fists}Você precisa continuar empurrando, porque se não o fizer, isso nunca vai acabar. Você é a única que pode fazer isso.\n$@c{serious_smile_fists}Eu mal sei o que tudo isso significa, só sei que é verdade.\n$@c{serious_mopen_fists}Se você não pode me derrotar aqui e agora, você não terá chance." - }, - "victory": { - "1": "@c{smile_eclosed}Parece que meu trabalho aqui está feito.\n$Quero que você me prometa uma coisa.\n@c{smile}Depois que curar o mundo, por favor, volte para casa." - } - }, - "rival_6_female": { - "encounter": { - "1": "@c{smile_ehalf}Então somos só nós de novo.\n$@c{smile_eclosed}Sabe, continuo pensando nisso…\n$@c{smile_ehalf}Há algo nisso tudo, por que tudo parece tão estranho agora…\n$@c{smile}Você tem seu sonho, e eu tenho essa ambição em mim…\n$Não consigo evitar sentir que há um propósito maior em tudo isso, no que estamos fazendo, você e eu.\n$@c{smile_eclosed}Acho que devo te levar ao limite.\n$@c{smile_ehalf}Não tenho certeza se estou fazendo um bom trabalho nisso, mas tentei meu melhor até agora.\n$Há algo neste lugar estranho e terrível… Tudo parece tão claro…\n$Isso… é tudo o que o mundo conhece há muito tempo.\n$@c{smile_eclosed}É como se eu mal pudesse lembrar das memórias que apreciamos juntos.\n$@c{smile_ehalf}Elas foram reais? Elas parecem tão distantes agora…\n$@c{angry_mopen}Você precisa continuar empurrando, porque se não o fizer, isso nunca vai acabar. Você é o único que pode fazer isso.\n$@c{smile_ehalf}Eu… não sei o que tudo isso significa… mas sinto que é verdade.\n$@c{neutral}Se você não pode me derrotar aqui e agora, você não terá chance." - }, - "victory": { - "1": "@c{smile_ehalf}Eu… acho que cumpri meu propósito…\n$@c{smile_eclosed}Prometa-me… Depois que curar o mundo… Por favor… volte para casa.\n$@c{smile_ehalf}…Obrigada." - } - } -} diff --git a/src/locales/pt_BR/dialogue-final-boss-female.json b/src/locales/pt_BR/dialogue-final-boss-female.json deleted file mode 100644 index 7f7c04acaff..00000000000 --- a/src/locales/pt_BR/dialogue-final-boss-female.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "encounter": "Parece que a hora finalmente chegou novamente.\nVocê sabe por que veio aqui, não sabe?\n$Você foi atraída para cá, porque já esteve aqui antes.\nInúmeras vezes.\n$Embora talvez isso possa ser contado.\nPara ser preciso, este é de fato o seu {{cycleCount}}º ciclo.\n$A cada ciclo, sua mente retorna ao seu estado anterior.\nMesmo assim, de alguma forma, vestígios de seus antigos \"eus\" permanecem.\n$Até agora, você ainda não conseguiu, mas sinto uma presença diferente em você desta vez.\n\n$Você é a única aqui, embora pareça haver... outro.\n$Você finalmente vai se mostrar um desafio formidável para mim?\nO desafio que anseio há milênios?\n$Vamos começar.", - "firstStageWin": "Entendo. A presença que senti era realmente real.\nParece que não preciso mais me segurar.\n$Não me decepcione.", - "secondStageWin": "…Magnífico." -} \ No newline at end of file diff --git a/src/locales/pt_BR/dialogue-final-boss-male.json b/src/locales/pt_BR/dialogue-final-boss.json similarity index 55% rename from src/locales/pt_BR/dialogue-final-boss-male.json rename to src/locales/pt_BR/dialogue-final-boss.json index 0a261ba151e..7009f00db5b 100644 --- a/src/locales/pt_BR/dialogue-final-boss-male.json +++ b/src/locales/pt_BR/dialogue-final-boss.json @@ -1,5 +1,6 @@ { "encounter": "Parece que a hora finalmente chegou novamente.\nVocê sabe por que veio aqui, não sabe?\n$Você foi atraído para cá, porque já esteve aqui antes.\nInúmeras vezes.\n$Embora talvez isso possa ser contado.\nPara ser preciso, este é de fato o seu {{cycleCount}}º ciclo.\n$A cada ciclo, sua mente retorna ao seu estado anterior.\nMesmo assim, de alguma forma, vestígios de seus antigos \"eus\" permanecem.\n$Até agora, você ainda não conseguiu, mas sinto uma presença diferente em você desta vez.\n\n$Você é o único aqui, embora pareça haver... outro.\n$Você finalmente vai se mostrar um desafio formidável para mim?\nO desafio que anseio há milênios?\n$Vamos começar.", + "encounter_female": "Parece que a hora finalmente chegou novamente.\nVocê sabe por que veio aqui, não sabe?\n$Você foi atraída para cá, porque já esteve aqui antes.\nInúmeras vezes.\n$Embora talvez isso possa ser contado.\nPara ser preciso, este é de fato o seu {{cycleCount}}º ciclo.\n$A cada ciclo, sua mente retorna ao seu estado anterior.\nMesmo assim, de alguma forma, vestígios de seus antigos \"eus\" permanecem.\n$Até agora, você ainda não conseguiu, mas sinto uma presença diferente em você desta vez.\n\n$Você é a única aqui, embora pareça haver... outro.\n$Você finalmente vai se mostrar um desafio formidável para mim?\nO desafio que anseio há milênios?\n$Vamos começar.", "firstStageWin": "Entendo. A presença que senti era realmente real.\nParece que não preciso mais me segurar.\n$Não me decepcione.", "secondStageWin": "…Magnífico." } \ No newline at end of file diff --git a/src/locales/pt_BR/dialogue-misc-female.json b/src/locales/pt_BR/dialogue-misc-female.json deleted file mode 100644 index 761570a7f80..00000000000 --- a/src/locales/pt_BR/dialogue-misc-female.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "ending": "@c{smile}Oh? Você venceu?@d{96} @c{smile_eclosed}Acho que eu deveria saber.\nMas, você está de volta agora.\n$@c{smile}Acabou.@d{64} Você quebrou o ciclo.\n$@c{serious_smile_fists}Você também realizou seu sonho, não é?\nVocê não perdeu nenhuma vez.\n$@c{neutral}Eu sou o único que vai lembrar o que você fez.@d{96}\nAcho que está tudo bem, não é?\n$@c{serious_smile_fists}Sua lenda sempre viverá em nossos corações.\n$@c{smile_eclosed}Enfim, já tive o suficiente deste lugar, não é? Vamos para casa.\n$@c{serious_smile_fists}Talvez quando voltarmos, possamos ter outra batalha?\nSe você estiver disposta.", - "ending_female": "@c{shock}Você está de volta?@d{32} Isso significa que…@d{96} você venceu?!\n@c{smile_ehalf}Eu deveria saber que você conseguiria.\n$@c{smile_eclosed}Claro… Eu sempre tive essa sensação.\n@c{smile}Acabou agora, certo? Você quebrou o ciclo.\n$@c{smile_ehalf}Você também realizou seu sonho, não foi?\nVocê não perdeu nenhuma vez.\n$Eu serei a única a lembrar o que você fez.\n@c{angry_mopen}Eu tentarei não esquecer!\n$@c{smile_wave_wink}Brincadeirinha!@d{64} @c{smile}Eu nunca esqueceria.@d{32}\nSua lenda viverá em nossos corações.\n$@c{smile_wave}De qualquer forma,@d{64} está ficando tarde…@d{96} Eu acho?\nÉ difícil dizer neste lugar.\n$Vamos para casa. @c{smile_wave_wink}Talvez amanhã possamos ter outra batalha, pelos velhos tempos?", - "ending_endless": "Parabéns por alcançar o final atual!\nMais conteúdo chegará em breve.", - "ending_name": "Desenvolvedores" -} \ No newline at end of file diff --git a/src/locales/pt_BR/dialogue-misc-male.json b/src/locales/pt_BR/dialogue-misc.json similarity index 100% rename from src/locales/pt_BR/dialogue-misc-male.json rename to src/locales/pt_BR/dialogue-misc.json diff --git a/src/locales/pt_BR/dialogue-male.json b/src/locales/pt_BR/dialogue.json similarity index 87% rename from src/locales/pt_BR/dialogue-male.json rename to src/locales/pt_BR/dialogue.json index 2978bb9a6a5..2f39442ee5a 100644 --- a/src/locales/pt_BR/dialogue-male.json +++ b/src/locales/pt_BR/dialogue.json @@ -3,17 +3,21 @@ "encounter": { "1": "Eai, quer batalhar?", "2": "Você também é um treinador novo?", + "2_female": "Você também é uma treinadora nova?", "3": "Eai, nunca te vi antes. Vamos batalhar!", "4": "Acabei de perder, então estou tentando encontrar mais Pokémon.\nEspera! Você parece fraco! Vamos batalhar!", + "4_female": "Acabei de perder, então estou tentando encontrar mais Pokémon.\nEspera! Você parece fraca! Vamos batalhar!", "5": "A gente já se conheceu antes? Não lembro muito bem. Enfim, prazer te conhecer!", "6": "Beleza! Vamos nessa!", "7": "Beleza! Lá vou eu! Vou te mostrar meu poder!", "8": "Hahaha... Vou te mostrar o quão incríveis são meus Pokémon!", "9": "Sem perder tempo com cumprimentos. Vamos logo, quando estiver pronto!", + "9_female": "Sem perder tempo com cumprimentos. Vamos logo, quando estiver pronta!", "10": "Não baixe a guarda, ou você pode acabar chorando quando uma criança te vencer.", "11": "Eu criei meus Pokémon com muito cuidado. Você não tem permissão para machucá-los!", "12": "Que bom que você chegou! Não vai ser fácil daqui pra frente.", - "13": "As batalhas continuam para sempre! Bem-vindo ao mundo sem fim!" + "13": "As batalhas continuam para sempre! Bem-vinda ao mundo sem fim!", + "13_female": "As batalhas continuam para sempre! Bem-vindo ao mundo sem fim!" }, "victory": { "1": "Uau! Você é forte!", @@ -21,6 +25,7 @@ "3": "Vou te encontrar de novo quando for mais velho e te vencer!", "4": "Ugh. Não tenho mais Pokémon.", "5": "Não acredito… NÃO ACREDITO! Como pude perder de novo…", + "5_female": "Não acredito… NÃO ACREDITO! Como pude de novo…", "6": "Não! Eu perdi!", "7": "Uau! Você é incrível! Estou surpreso!", "8": "Pode ser… Como… Eu e meus Pokémon somos os mais fortes, porém…", @@ -35,10 +40,12 @@ "encounter": { "1": "Vamos batalhar, pode ser?", "2": "Você parece um treinador novo. Vamos batalhar!", + "2_female": "Você parece uma treinadora nova. Vamos batalhar!", "3": "Não te reconheço. Que tal uma batalha?", "4": "Vamos ter uma batalha Pokémon divertida!", "5": "Vou te mostrar como realmente usar Pokémon!", "6": "Uma batalha séria começa com um começo sério! Tem certeza que está pronto?", + "6_female": "Uma batalha séria começa com um começo sério! Tem certeza que está pronta?", "7": "Você só é jovem uma vez. E só tem uma chance em cada batalha. Logo, você será apenas uma memória.", "8": "Vai com calma comigo, tá? Mas vou lutar sério!", "9": "A escola é chata. Não tenho nada para fazer. Só estou batalhando para passar o tempo." @@ -52,6 +59,7 @@ "6": "Sério, eu perdi. Isso é, tipo, seriamente deprimente, mas você foi seriamente legal.", "7": "Não preciso de memórias como essa. Deletando memória…", "8": "Ei! Eu te disse para pegar leve comigo! Mesmo assim, você é legal quando fica sério.", + "8_female": "Ei! Eu te disse para pegar leve comigo! Mesmo assim, você é legal quando fica séria.", "9": "Estou realmente cansando de batalhar… Deve haver algo novo para fazer…" } }, @@ -150,7 +158,9 @@ "1": "Sim… Você tem bons Pokémon…", "2": "O quê?! Mas sou um gênio das batalhas!", "3": "Claro, você é o personagem principal!", - "4": "OK! OK! Você poderia ser um Treinador Ás!" + "3_female": "Claro, você é a personagem principal!", + "4": "OK! OK! Você poderia ser um Treinador Ás!", + "4_female": "OK! OK! Você poderia ser uma Treinador Ás!" }, "defeat": { "1": "Estou dedicando corpo e alma às batalhas de Pokémon!", @@ -171,7 +181,8 @@ "encounter": { "1": "Prepare-se, porque quando nos unimos, é o dobro do problema!", "2": "Dois corações, uma estratégia – vamos ver se você consegue acompanhar nosso poder de gêmeos!", - "3": "Espero que esteja pronto para o dobro do problema, porque estamos prestes a causar!" + "3": "Espero que esteja pronto para o dobro do problema, porque estamos prestes a causar!", + "3_female": "Espero que esteja pronta para o dobro do problema, porque estamos prestes a causar!" }, "victory": { "1": "Podemos ter perdido essa rodada, mas nosso vínculo permanece inquebrável!", @@ -199,7 +210,8 @@ "black_belt": { "encounter": { "1": "Elogio sua coragem ao me desafiar! Pois eu sou o que tem o chute mais forte!", - "2": "Oh, entendo. Você gostaria de ser cortado em pedaços? Ou prefere o papel de saco de pancadas?" + "2": "Oh, entendo. Você gostaria de ser cortado em pedaços? Ou prefere o papel de saco de pancadas?", + "2_female": "Oh, entendo. Você gostaria de ser cortada em pedaços? Ou prefere o papel de saco de pancadas?" }, "victory": { "1": "Oh. Os Pokémon fizeram a luta. Meu chute forte não ajudou em nada.", @@ -310,7 +322,8 @@ }, "defeat": { "1": "New age se refere simplesmente aos compositores clássicos do século XX, certo?", - "2": "Não fique preso na tristeza ou frustração. Você pode usar seus rancores para se motivar." + "2": "Não fique preso na tristeza ou frustração. Você pode usar seus rancores para se motivar.", + "2_female": "Não fique presa na tristeza ou frustração. Você pode usar seus rancores para se motivar." } }, "psychic": { @@ -341,7 +354,8 @@ }, "baker": { "encounter": { - "1": "Espero que esteja pronto para saborear a derrota!" + "1": "Espero que esteja pronto para saborear a derrota!", + "1_female": "Espero que esteja pronta para saborear a derrota!" }, "victory": { "1": "Vou assar uma revanche." @@ -371,7 +385,8 @@ "encounter": { "1": "Mano, você vai andar na prancha se perder!", "2": "Vem com tudo! Sou um marinheiro com orgulho!", - "3": "Ahoy marujo! Tá enjoado, é?!" + "3": "Ahoy marujo! Tá enjoado, é?!", + "3_female": "Ahoy maruja! Tá enjoada, é?!" }, "victory": { "1": "Argh! Perdi pra uma criança!", @@ -399,6 +414,7 @@ }, "victory": { "1": "Uau, você é forte. Que desperdício. Se você se juntasse à Equipe Rocket, poderia se tornar um Executivo.", + "1_female": "Uau, você é forte. Que desperdício. Se você se juntasse à Equipe Rocket, poderia se tornar uma Executiva.", "2": "Eu... Eu estou arrasada...", "3": "Aaaieeeee! Isso não pode estar acontecendo! Eu lutei muito, mas ainda perdi…" } @@ -436,7 +452,8 @@ "victory": { "1": "Hehehe! Você pode ter me derrotado, mas não tem chance contra o Chefe! Se você se perder agora, não terá que enfrentar uma surra sonora!", "2": "Hehehe... Então, eu também perdi...", - "3": "Ahya! Como isso pode ser? Para um Admin como eu perder para um treinador qualquer..." + "3": "Ahya! Como isso pode ser? Para um Admin como eu perder para um treinador qualquer...", + "3_female": "Ahya! Como isso pode ser? Para um Admin como eu perder para uma treinadora qualquer..." } }, "courtney": { @@ -454,13 +471,15 @@ "shelly": { "encounter": { "1": "Ahahahaha! Você vai se meter nos assuntos da Equipe Aqua? Você é absolutamente destemido, simplesmente ignorante ou ambos! Você é tão fofo que chega a ser nojento! Vou te derrubar", + "1_female": "Ahahahaha! Você vai se meter nos assuntos da Equipe Aqua? Você é absolutamente destemida, simplesmente ignorante ou ambos! Você é tão fofa que chega a ser nojenta! Vou te derrubar", "2": "O que é isso? Quem é essa criança mimada?", "3": "Relaxe. Seja paciente. Vou te esmagar em breve." }, "victory": { "1": "Ahahahaha! Fomos surpreendidos inesperadamente! Estamos sem opções. Teremos que recuar. Mas esta não é a última vez que você verá a Equipe Aqua! Temos outros planos! Não se esqueça disso!", "2": "Ahhh?! Fui muito fácil com você?!", - "3": "Uh. Você está me dizendo que melhorou seu jogo ainda mais durante a luta? Você é um pirralho com um futuro brilhante… Meu Pokémon e eu não temos mais forças para lutar… Vá em frente… Vá e seja destruído por Archie." + "3": "Uh. Você está me dizendo que melhorou seu jogo ainda mais durante a luta? Você é um pirralho com um futuro brilhante… Meu Pokémon e eu não temos mais forças para lutar… Vá em frente… Vá e seja destruído por Archie.", + "3_female": "Uh. Você está me dizendo que melhorou seu jogo ainda mais durante a luta? Você é uma pirralha com um futuro brilhante… Meu Pokémon e eu não temos mais forças para lutar… Vá em frente… Vá e seja destruída por Archie." } }, "matt": { @@ -472,14 +491,16 @@ "victory": { "1": "Muito bem, até que o Chefe tenha tempo para você, serei seu oponente!", "2": "Posso sentir! Posso sentir, tudo bem! A força saindo de você! Mais! Eu ainda quero mais! Mas parece que estamos sem tempo...", - "3": "Isso foi divertido! Eu sabia que você me mostraria um bom tempo! Estou ansioso para enfrentá-lo novamente algum dia!" + "3": "Isso foi divertido! Eu sabia que você me mostraria um bom tempo! Estou ansioso para enfrentá-lo novamente algum dia!", + "3_female": "Isso foi divertido! Eu sabia que você me mostraria um bom tempo! Estou ansioso para enfrentá-la novamente algum dia!" } }, "mars": { "encounter": { "1": "Sou Mars, uma das principais Comandantes da Equipe Galáctica.", "2": "A visão da Equipe Galáctica para o futuro é inabalável. A oposição será esmagada sem piedade!", - "3": "Sentindo-se nervoso? Você deveria estar!" + "3": "Sentindo-se nervoso? Você deveria estar!", + "3_female": "Sentindo-se nervosa? Você deveria estar!" }, "victory": { "1": "Isso não pode estar acontecendo! Como eu perdi?!", @@ -514,36 +535,45 @@ "zinzolin": { "encounter": { "1": "Você poderia se tornar uma ameaça para a Equipe Plasma, então vamos eliminá-lo aqui e agora!", + "1_female": "Você poderia se tornar uma ameaça para a Equipe Plasma, então vamos eliminá-la aqui e agora!", "2": "Oh, pelo amor de Deus... Eu não esperava ter que lutar neste frio congelante!", - "3": "Você é um treinador impressionante para ter chegado tão longe. Mas termina aqui." + "3": "Você é um treinador impressionante para ter chegado tão longe. Mas termina aqui.", + "3_female": "Você é uma treinadora impressionante para ter chegado tão longe. Mas termina aqui." }, "victory": { "1": "Ghetsis... Eu falhei com você...", "2": "Está amargamente frio. Estou tremendo. Estou sofrendo. Ainda assim, estou vitorioso.", - "3": "Hmph. Você é um treinador mais esperto do que eu esperava, mas não esperto o suficiente." + "3": "Hmph. Você é um treinador mais esperto do que eu esperava, mas não esperto o suficiente.", + "3_female": "Hmph. Você é uma treinadora mais esperta do que eu esperava, mas não esperta o suficiente." } }, "rood": { "encounter": { "1": "Você é uma ameaça para a Equipe Plasma. Não podemos deixá-lo ir embora daqui e agora!", + "1_female": "Você é uma ameaça para a Equipe Plasma. Não podemos deixá-la ir embora daqui e agora!", "2": "Oh, este vento gelado... Eu nunca pensei que teria que lutar aqui!", - "3": "Você é um treinador notável para ter chegado tão longe. Mas é aqui que termina." + "3": "Você é um treinador notável para ter chegado tão longe. Mas é aqui que termina.", + "3_female": "Você é uma treinadora notável para ter chegado tão longe. Mas é aqui que termina." }, "victory": { "1": "Ghetsis... Eu falhei em minha missão...", "2": "O frio é penetrante. Estou tremendo. Estou sofrendo. Ainda assim, triunfei.", - "3": "Hm. Você é um treinador talentoso, mas infelizmente não talentoso o suficiente." + "3": "Hm. Você é um treinador talentoso, mas infelizmente não talentoso o suficiente.", + "3_female": "Hm. Você é uma treinadora talentosa, mas infelizmente não talentosa o suficiente." } }, "xerosic": { "encounter": { "1": "Ah ha ha! Será um prazer. Vamos lá, pequeno treinador! Vamos ver o que você tem!", + "1_female": "Ah ha ha! Será um prazer. Vamos lá, pequena treinadora! Vamos ver o que você tem!", "2": "Hmm... Você é mais poderoso do que parece. Eu me pergunto quanta energia há dentro de você.", + "2_female": "Hmm... Você é mais poderosa do que parece. Eu me pergunto quanta energia há dentro de você.", "3": "Eu estava esperando por você! Preciso fazer uma pequena pesquisa sobre você! Vamos começar!" }, "victory": { "1": "Ah, você é bastante forte. Oh sim—muito forte, de fato.", "2": "Ding-ding-ding! Você conseguiu! Ao vencedor, os despojos!", + "2_female": "Ding-ding-ding! Você conseguiu! À vencedora, os despojos!", "3": "Maravilhoso! Incrível! Você tem uma tremenda habilidade e coragem!" } }, @@ -551,6 +581,7 @@ "encounter": { "1": "Eu sou Bryony, e será um prazer lutar com você. Mostre-me o que você tem.", "2": "Impressionante... Você é mais poderoso do que parece. Vamos ver a verdadeira extensão de sua energia.", + "2_female": "Impressionante... Você é mais poderosa do que parece. Vamos ver a verdadeira extensão de sua energia.", "3": "Eu antecipei sua chegada. É hora de um pequeno teste. Vamos começar?" }, "victory": { @@ -563,9 +594,11 @@ "encounter": { "1": "Se prepara pra encrenca!", "2": "Estamos realizando um grande trabalho aqui! Cai fora, moleque!", + "2_female": "Estamos realizando um grande trabalho aqui! Cai fora, garota!", "3": "Entregue seus Pokémon ou enfrente a ira da Equipe Rocket!", "4": "Você está prestes a experimentar o verdadeiro terror da Equipe Rocket!", - "5": "Ei, moleque! Eu sou um tipo de cara da Equipe Rocket!" + "5": "Ei, moleque! Eu sou um tipo de cara da Equipe Rocket!", + "5_female": "Ei, garota! Eu sou um tipo de cara da Equipe Rocket!" }, "victory": { "1": "Equipe Rocket decolando de novo!", @@ -613,7 +646,8 @@ "2": "Presencie o poder da nossa tecnologia e o futuro que vislumbramos!", "3": "Em nome da Equipe Galáctica, eliminarei qualquer um que ficar em nosso caminho!", "4": "Prepare-se para perder!", - "5": "Espero que você esteja pronto para uma surra cósmica!" + "5": "Espero que você esteja pronto para uma surra cósmica!", + "5_female": "Espero que você esteja pronta para uma surra cósmica!" }, "victory": { "1": "Fui amassado...", @@ -803,7 +837,8 @@ }, "galactic_boss_cyrus_1": { "encounter": { - "1": "Você foi compelido a vir aqui por tal sentimentalismo vazio\nEu farei você se arrepender de ter ouvido seu coração!" + "1": "Você foi compelido a vir aqui por tal sentimentalismo vazio\nEu farei você se arrepender de ter ouvido seu coração!", + "1_female": "Você foi compelida a vir aqui por tal sentimentalismo vazio\nEu farei você se arrepender de ter ouvido seu coração!" }, "victory": { "1": "Interessante. E bastante curioso." @@ -958,6 +993,7 @@ }, "victory": { "1": "Você realmente é forte… Vou admitir que você é habilidoso…", + "1_female": "Você realmente é forte… Vou admitir que você é habilidosa…", "2": "Hmm… Você sabe que só teve sorte, certo?!", "3": "Uau, você é demais! Não acredito que me venceu!" }, @@ -975,12 +1011,14 @@ }, "victory": { "1": "Whoa! Seu time é de verdade, garoto!", + "1_female": "Whoa! Seu time é de verdade, garota!", "2": "Uau, você é forte! Até meus truques elétricos perderam para você.", "3": "Isso foi uma derrota absolutamente chocante!" }, "defeat": { "1": "Oh sim! Quando se trata de Pokémon do tipo Elétrico, sou o número um do mundo!", "2": "Hahaha! Foi uma batalha eletrizante, garoto!", + "2_female": "Hahaha! Foi uma batalha eletrizante, garota!", "3": "Uma batalha de Pokémon é guerra, e eu te mostrei combate em primeira mão!" } }, @@ -1059,7 +1097,8 @@ "encounter": { "1": "Eu, o líder da Equipe Rocket, vou te fazer sentir um mundo de dor!", "2": "Meu treinamento aqui será vital antes de enfrentar meus antigos associados novamente.", - "3": "Não acho que você está preparado para o nível de fracasso que está prestes a experimentar!" + "3": "Não acho que você está preparado para o nível de fracasso que está prestes a experimentar!", + "3_female": "Não acho que você está preparada para o nível de fracasso que está prestes a experimentar!" }, "victory": { "1": "O QUE! Eu, perder?! Não tenho nada a dizer a você!", @@ -1092,6 +1131,7 @@ "brawly": { "encounter": { "1": "Oh cara, um desafiante!\nVamos ver o que você pode fazer!", + "1_female": "Oh cara, uma desafiante!\nVamos ver o que você pode fazer!", "2": "Você parece uma grande onda.\nVamos batalhar!", "3": "Hora de criar uma tempestade!\nVamos!" }, @@ -1119,6 +1159,7 @@ }, "defeat": { "1": "Você está totalmente carregado agora!\nWahahahaha!", + "1_female": "Você está totalmente carregada agora!\nWahahahaha!", "2": "Espero ver você faíscando em batalhas futuras!\nWahahahaha!", "3": "Wahahahaha! Que batalha eletrizante!" } @@ -1165,6 +1206,7 @@ }, "victory": { "1": "Você é o primeiro Treinador que vejo com mais graça do que eu.\nJogou excelentemente.", + "1_female": "Você é a primeira Treinadora que vejo com mais graça do que eu.\nJogou excelentemente.", "2": "Oh, meus Pokémon Voadores despencaram!\nMuito bem.", "3": "Embora eu tenha caído, meus Pokémon continuarão a voar!" }, @@ -1177,6 +1219,7 @@ "tate": { "encounter": { "1": "Hehehe... Ficou surpreso de me ver sem minha irmã?", + "1_female": "Hehehe... Ficou surpresa de me ver sem minha irmã?", "2": "Posso ver o que você está pensando...\nVocê quer batalhar!", "3": "Como você pode derrotar alguém...\nQue sabe todos os seus movimentos?" }, @@ -1194,6 +1237,7 @@ "liza": { "encounter": { "1": "Fufufu... Ficou surpreso de me ver sem meu irmão?", + "1_female": "Fufufu... Ficou surpresa de me ver sem meu irmão?", "2": "Posso determinar o que você deseja...\nVocê quer batalhar, não quer?", "3": "Como você pode derrotar alguém...\nQue é um com seus Pokémon?" }, @@ -1265,8 +1309,10 @@ "nessa": { "encounter": { "1": "Não importa que tipo de plano sua mente refinada possa estar tramando, meu parceiro e eu vamos afundá-lo.", + "1_female": "Não importa que tipo de plano sua mente refinada possa estar tramando, meu parceiro e eu vamos afundá-la.", "2": "Não estou aqui para conversar. Estou aqui para vencer!", - "3": "Este é um pequeno presente dos meus Pokémon... Espero que você possa recebê-lo!" + "3": "Este é um pequeno presente dos meus Pokémon... Espero que você possa recebê-lo!", + "3_female": "Este é um pequeno presente dos meus Pokémon... Espero que você possa recebê-la!" }, "victory": { "1": "Você e seus Pokémon são demais...", @@ -1287,6 +1333,7 @@ }, "victory": { "1": "Você... Você é muito bom, hein?", + "1_female": "Você... Você é muito boa, hein?", "2": "Se você encontrar Gordie por aí, certifique-se de dar uma boa surra nele, ok?", "3": "Acho que você levou a quebra de gelo um pouco literalmente demais..." }, @@ -1300,10 +1347,12 @@ "encounter": { "1": "Você parece forte! Vamos começar!", "2": "Sou forte como a amplitude do oceano. Você vai ser varrido, com certeza.", + "2_female": "Sou forte como a amplitude do oceano. Você vai ser varrida, com certeza.", "3": "Oh ho, então estou enfrentando você! Isso é fora do comum." }, "victory": { "1": "Você foi incrível! Está criando alguns Pokémon incríveis. Você dominou a coisa de Treinador!", + "1_female": "Você foi incrível! Está criando alguns Pokémon incríveis. Você dominou a coisa de Treinadora!", "2": "Você não apenas parece forte, você é forte de verdade! Eh, eu também fui varrido!", "3": "Você é forte como uma onda impressionante!" }, @@ -1316,6 +1365,7 @@ "shauntal": { "encounter": { "1": "Com licença. Você é um desafiante, certo?\nSou a usuária de Pokémon do tipo Fantasma da Elite dos Quatro, Shauntal, e serei sua oponente.", + "1_female": "Com licença. Você é uma desafiante, certo?\nSou a usuária de Pokémon do tipo Fantasma da Elite dos Quatro, Shauntal, e serei sua oponente.", "2": "Adoro escrever sobre Treinadores que vêm aqui e os Pokémon que treinam.\nPosso usar você e seus Pokémon como tema?", "3": "Cada pessoa que trabalha com Pokémon tem uma história para contar.\nQue história está prestes a ser contada?" }, @@ -1333,6 +1383,7 @@ "marshal": { "encounter": { "1": "Meu mentor, Alder, vê seu potencial como Treinador e está interessado em você.\nMeu objetivo é testá-lo—levar você aos limites da sua força. Kiai!", + "1_female": "Meu mentor, Alder, vê seu potencial como Treinadora e está interessado em você.\nMeu objetivo é testá-la—levar você aos limites da sua força. Kiai!", "2": "Vitória, vitória decisiva, é meu objetivo! Desafiante, aqui vou eu!", "3": "Em mim mesmo, procuro desenvolver a força de um lutador e eliminar qualquer fraqueza em mim!\nPrevalecendo com a força de minhas convicções!" }, @@ -1351,7 +1402,8 @@ "encounter": { "1": "Você me lembra um velho amigo. Isso me deixa animado para essa batalha Pokémon!", "2": "As batalhas Pokémon não têm sentido se você não pensa por que você batalha.\nOu melhor, isso torna as batalhas junto com Pokémon sem sentido.", - "3": "Meu nome é Cheren! Sou um Líder de Ginásio e professor! Prazer em conhecê-lo." + "3": "Meu nome é Cheren! Sou um Líder de Ginásio e professor! Prazer em conhecê-lo.", + "3_female": "Meu nome é Cheren! Sou um Líder de Ginásio e professor! Prazer em conhecê-la." }, "victory": { "1": "Obrigado! Vi o que estava faltando em mim.", @@ -1367,47 +1419,65 @@ "chili": { "encounter": { "1": "Ihuuu! Hora de brincar com FOGO!! Sou o mais forte dos nossos irmãos!", + "1_female": "Yeeeeeooow! Hora de brincar com FOGO!! Eu sou o mais forte de nós irmãos!", "2": "Ta-da! O incendiário do tipo Fogo Chili—sou eu—será seu oponente!", - "3": "Vou mostrar o que eu e meus tipos de Fogo podemos fazer!" + "2_female": "Tcharan! O escaldante Chili tipo Fogo (sou eu) será seu oponente!", + "3": "Vou mostrar o que eu e meus tipos de Fogo podemos fazer!", + "3_female": "Vou te mostrar o que eu e meus ardentes tipo Fogo podemos fazer!" }, "victory": { "1": "Você me pegou. Estou... queimado...", + "1_female": "Você me pegou. Eu estou… queimado… esgotado…", "2": "Uau! Você está pegando fogo!", + "2_female": "Uau! Você tá pegando fogo!", "3": "Ai! Você me pegou!" }, "defeat": { "1": "Estou pegando fogo! Jogue comigo, e você se queimará!", + "1_female": "Estou pegando fogo! Brinque comigo e você vai se queimar!", "2": "Quando você brinca com fogo, você se queima!", - "3": "Quero dizer, vamos lá, seu oponente era eu! Você não tinha chance!" + "3": "Quero dizer, vamos lá, seu oponente era eu! Você não tinha chance!", + "3_female": "Quero dizer, fala sério, seu oponente era eu! Você não teve chance!" } }, "cilan": { "encounter": { "1": "Nada pessoal... Sem ressentimentos... Eu e meus Pokémon do tipo Grama vamos...\nUm... Vamos batalhar, aconteça o que acontecer.", + "1_female": "Nada pessoal... Sem ressentimentos... Eu e meus Pokémon do tipo Grama vamos...\n$Hum... Nós iremos batalhar, aconteça o que acontecer.", "2": "Então, hum, se você está bem comigo, vou, hum, colocar tudo o que tenho em ser, er, você sabe, seu oponente.", - "3": "OK… Então, hum, eu sou o Cilan, gosto de Pokémon do tipo Grama." + "2_female": "Então, hum, se você estiver bem comigo, eu vou, hum, dar tudo o que tenho para ser, hum, você sabe, seu oponente.", + "3": "OK… Então, hum, eu sou o Cilan, gosto de Pokémon do tipo Grama.", + "3_female": "OK... Então, eu sou Cilan, eu gosto de Pokémon do tipo Grama." }, "victory": { "1": "Er... Acabou agora?", + "1_female": "Er… Já acabou?", "2": "…Que surpresa. Você é muito forte, não é?\nAcho que meus irmãos também não teriam sido capazes de te derrotar...", + "2_female": "…Que surpresa. Você é muito forte, não é? \n$Eu acho que meus irmãos também não conseguiriam derrotar você…", "3": "…Huh. Parece que meu timing estava, hum, errado?" }, "defeat": { "1": "Huh? Ganhei?", + "1_female": "Hein? Eu ganhei?", "2": "Acho...\nSuponho que ganhei, porque competi com meus irmãos Chili e Cress, e todos conseguimos ficar mais fortes.", - "3": "Foi... uma experiência bastante emocionante..." + "2_female": "Eu acho... \n$Eu acho que ganhei, porque eu estava competindo com meus irmãos Chili e Cress, e todos nós conseguimos ficar mais fortes.", + "3": "Foi... uma experiência bastante emocionante...", + "3_female": "Foi… foi uma experiência bastante emocionante…" } }, "roark": { "encounter": { "1": "Preciso ver seu potencial como Treinador. E, vou precisar ver a dureza dos Pokémon que batalham com você!", + "1_female": "Preciso ver seu potencial como Treinadora. E, vou precisar ver a dureza dos Pokémon que batalham com você!", "2": "Vamos lá! Estes são meus Pokémon de pedra, meu orgulho e alegria!", "3": "Pokémon do tipo Pedra são simplesmente os melhores!", - "4": "Preciso ver seu potencial como Treinador. E, vou precisar ver a dureza dos Pokémon que batalham com você!" + "4": "Preciso ver seu potencial como Treinador. E, vou precisar ver a dureza dos Pokémon que batalham com você!", + "4_female": "Preciso ver seu potencial como Treinadora. E, vou precisar ver a dureza dos Pokémon que batalham com você!" }, "victory": { "1": "O-o que? Isso não pode ser! Meus Pokémon fortificados!", "2": "...Perdemos o controle. Da próxima vez, gostaria de desafiá-lo a uma corrida de escavação de fósseis no subsolo.", + "2_female": "...Perdemos o controle. Da próxima vez, gostaria de desafiá-la a uma corrida de escavação de fósseis no subsolo.", "3": "Com habilidade como a sua, é natural que você vença.", "4": "O-o que?! Não pode ser! Nem isso foi suficiente?", "5": "Eu estraguei tudo." @@ -1430,6 +1500,7 @@ "victory": { "1": "Ainda não sou bom o suficiente...", "2": "Eu vejo... Sua jornada o levou a lugares distantes e você testemunhou muito mais do que eu.\nEu invejo você por isso...", + "2_female": "Eu vejo... Sua jornada a levou a lugares distantes e você testemunhou muito mais do que eu.\nEu invejo você por isso...", "3": "Como isso é possível...", "4": "Não acho que nossos potenciais sejam tão diferentes.\nMas você parece ter algo mais do que isso... Que seja.", "5": "Acho que preciso de mais treinamento.", @@ -1488,12 +1559,14 @@ "1": "Acho que deveria ter esperado por isso!" }, "defeat": { - "1": "Heh heh! Não ligue para mim, só pegando uma vitória aqui. Entendo se você estiver chateado, mas não vá dar uma de Kieran comigo, OK?" + "1": "Heh heh! Não ligue para mim, só pegando uma vitória aqui. Entendo se você estiver chateado, mas não vá dar uma de Kieran comigo, OK?", + "1_female": "Heh heh! Não ligue para mim, só pegando uma vitória aqui. Entendo se você estiver chateada, mas não vá dar uma de Kieran comigo, OK?" } }, "ramos": { "encounter": { - "1": "Você gostou do jardim de diversão que fiz com todas essas plantas resistentes minhas?\n$A força delas é um sinal da minha força como jardineiro e Líder de Ginásio! Você tem certeza de que está pronto para enfrentar tudo isso?" + "1": "Você gostou do jardim de diversão que fiz com todas essas plantas resistentes minhas?\n$A força delas é um sinal da minha força como jardineiro e Líder de Ginásio! Você tem certeza de que está pronto para enfrentar tudo isso?", + "1_female": "Você gostou do jardim de diversão que fiz com todas essas plantas resistentes minhas?\n$A força delas é um sinal da minha força como jardineiro e Líder de Ginásio! Você tem certeza de que está pronta para enfrentar tudo isso?" }, "victory": { "1": "Você acredita nos seus Pokémon... E eles acreditam em você também... Foi uma boa batalha, broto." @@ -1523,7 +1596,8 @@ }, "victory": { "1": "Devo dizer, estou aquecida para você! Posso até te admirar um pouco.", - "2": "Uau! Você é ótimo! Ganhou meu respeito!\n$Acho que seu foco e vontade nos derrubaram totalmente." + "2": "Uau! Você é ótimo! Ganhou meu respeito!\n$Acho que seu foco e vontade nos derrubaram totalmente.", + "2_female": "Uau! Você é ótima! Ganhou meu respeito!\n$Acho que seu foco e vontade nos derrubaram totalmente." }, "defeat": { "1": "Eu senti sua vontade de vencer, mas eu não perco!", @@ -1535,7 +1609,8 @@ "1": "Você tem uma aura vencedora. Então, de qualquer forma, isso vai ser divertido. Vamos ter nossa batalha!" }, "victory": { - "1": "Incrível! Você é muito bom, não é?" + "1": "Incrível! Você é muito bom, não é?", + "1_female": "Incrível! Você é muito boa, não é?" }, "defeat": { "1": "Sim! Meus Pokémon e eu somos perfeitamente bons!" @@ -1576,7 +1651,8 @@ }, "clay": { "encounter": { - "1": "Harrumph! Me deixou esperando, não foi, garoto? Tudo bem, hora de ver o que você pode fazer!" + "1": "Harrumph! Me deixou esperando, não foi, garoto? Tudo bem, hora de ver o que você pode fazer!", + "1_female": "Harrumph! Me deixou esperando, não foi, garota? Tudo bem, hora de ver o que você pode fazer!" }, "victory": { "1": "Cara, como é bom dar tudo de si e ainda assim ser derrotado!" @@ -1590,7 +1666,8 @@ "1": "Vou te servir um prato completo de Pokémon do tipo Água! Mas não tente comê-los!" }, "victory": { - "1": "Vaultin' Veluza! Você é animado, não é! Um pouco ANIMADO DEMAIS, se me permite dizer!" + "1": "Vaultin' Veluza! Você é animado, não é! Um pouco ANIMADO DEMAIS, se me permite dizer!", + "1_female": "Vaultin' Veluza! Você é animada, não é! Um pouco ANIMADA DEMAIS, se me permite dizer!" }, "defeat": { "1": "Volte para me ver novamente, ouviu?" @@ -1656,7 +1733,8 @@ "1": "Há algo em você… Uma diferença na sua postura. \n$Acho que sinto isso em você. Agora, me mostre. Mostre-me o poder que você tem com seus Pokémon. \n$E eu, por minha vez, apresentarei uma performance de ilusões na água com meus Pokémon!" }, "victory": { - "1": "Bravo. Agora percebo sua autenticidade e magnificência como Treinador de Pokémon. \n$Tenho muita alegria em ter conhecido você e seus Pokémon. Você se mostrou digno." + "1": "Bravo. Agora percebo sua autenticidade e magnificência como Treinador de Pokémon. \n$Tenho muita alegria em ter conhecido você e seus Pokémon. Você se mostrou digno.", + "1_female": "Bravo. Agora percebo sua autenticidade e magnificência como Treinadora de Pokémon. \n$Tenho muita alegria em ter conhecido você e seus Pokémon. Você se mostrou digna." }, "defeat": { "1": "Uma grande ilusão!" @@ -1664,13 +1742,15 @@ }, "lorelei": { "encounter": { - "1": "Ninguém me supera quando se trata de Pokémon gelados! Movimentos congelantes são poderosos!\n$Seus Pokémon estarão à minha mercê quando estiverem congelados! Hahaha! Está pronto?" + "1": "Ninguém me supera quando se trata de Pokémon gelados! Movimentos congelantes são poderosos!\n$Seus Pokémon estarão à minha mercê quando estiverem congelados! Hahaha! Está pronto?", + "1_female": "Ninguém me supera quando se trata de Pokémon gelados! Movimentos congelantes são poderosos!\n$Seus Pokémon estarão à minha mercê quando estiverem congelados! Hahaha! Está pronta?" }, "victory": { "1": "Como ousa!" }, "defeat": { - "1": "Não há nada que você possa fazer quando está congelado." + "1": "Não há nada que você possa fazer quando está congelado.", + "1_female": "Não há nada que você possa fazer quando está congelada." } }, "will": { @@ -1686,10 +1766,12 @@ }, "malva": { "encounter": { - "1": "Sinto que meu coração pode explodir em chamas. \n$Estou ardendo de ódio por você, pirralho!" + "1": "Sinto que meu coração pode explodir em chamas. \n$Estou ardendo de ódio por você, pirralho!", + "1_female": "Sinto que meu coração pode explodir em chamas. \n$Estou ardendo de ódio por você, pirralha!" }, "victory": { - "1": "Que novidade… Um novo desafiador derrotou Malva!" + "1": "Que novidade… Um novo desafiador derrotou Malva!", + "1_female": "Que novidade… Uma nova desafiadora derrotou Malva!" }, "defeat": { "1": "Estou encantada! Sim, encantada por poder esmagar você sob meu calcanhar." @@ -1711,7 +1793,8 @@ "1": "Dei a posição de capitão ao meu primo Sophocles, mas estou confiante na minha habilidade. \n$Minha força é como a de uma supernova!" }, "victory": { - "1": "Certamente encontrei um Treinador interessante para enfrentar!" + "1": "Certamente encontrei um Treinador interessante para enfrentar!", + "1_female": "Certamente encontrei uma Treinadora interessante para enfrentar!" }, "defeat": { "1": "Ahaha. Que batalha interessante." @@ -1722,10 +1805,12 @@ "1": "Eu diria que vou pegar leve com você, mas… estaria mentindo! Pense rápido!" }, "victory": { - "1": "Nada mal, garoto." + "1": "Nada mal, garoto.", + "1_female": "Nada mal, garota." }, "defeat": { - "1": "Nahahaha! Você realmente é algo mais, garoto!" + "1": "Nahahaha! Você realmente é algo mais, garoto!", + "1_female": "Nahahaha! Você realmente é algo mais, garota!" } }, "bruno": { @@ -1744,7 +1829,8 @@ "1": "Sou Bugsy! Eu nunca perco quando se trata de Pokémon do tipo Inseto!" }, "victory": { - "1": "Uau, incrível! Você é um especialista em Pokémon!\nMinha pesquisa ainda não está completa. OK, você venceu." + "1": "Uau, incrível! Você é um especialista em Pokémon!\nMinha pesquisa ainda não está completa. OK, você venceu.", + "1_female": "Uau, incrível! Você é uma especialista em Pokémon!\nMinha pesquisa ainda não está completa. OK, você venceu." }, "defeat": { "1": "Obrigado! Graças à nossa batalha, eu também pude fazer progressos na minha pesquisa!" @@ -1774,10 +1860,12 @@ }, "lenora": { "encounter": { - "1": "Bem, desafiador, vou pesquisar como você batalha com os Pokémon que criou com tanto carinho!" + "1": "Bem, desafiador, vou pesquisar como você batalha com os Pokémon que criou com tanto carinho!", + "1_female": "Bem, desafiadora, vou pesquisar como você batalha com os Pokémon que criou com tanto carinho!" }, "victory": { - "1": "Minha teoria sobre você estava correta. Você é mais do que talentoso… Você é motivado! Eu te saúdo!" + "1": "Minha teoria sobre você estava correta. Você é mais do que talentoso… Você é motivado! Eu te saúdo!", + "1_female": "Minha teoria sobre você estava correta. Você é mais do que talentosa… Você é motivada! Eu te saúdo!" }, "defeat": { "1": "Ah ha ha! Se você perder, certifique-se de analisar o porquê e use esse conhecimento na próxima batalha!" @@ -1802,7 +1890,8 @@ "1": "Selvagem! Sua razão já é mais tóxica que a minha!" }, "defeat": { - "1": "Ei, vamos lá! Seja sério! Você tem que dar mais de si!" + "1": "Ei, vamos lá! Seja sério! Você tem que dar mais de si!", + "1_female": "Ei, vamos lá! Seja séria! Você tem que dar mais de si!" } }, "olivia": { @@ -1840,7 +1929,8 @@ }, "flint": { "encounter": { - "1": "Espero que você esteja aquecido, porque aqui vem o Big Bang!" + "1": "Espero que você esteja aquecido, porque aqui vem o Big Bang!", + "1_female": "Espero que você esteja aquecida, porque aqui vem o Big Bang!" }, "victory": { "1": "Incrível! Seus movimentos são tão quentes que fazem os meus parecerem mornos!" @@ -1862,7 +1952,8 @@ }, "caitlin": { "encounter": { - "1": "Sou eu que apareci quando a flor se abriu. Você que estava esperando…\n$Você parece um Treinador de Pokémon com força refinada e bondade profunda. \n$O que eu procuro no meu oponente é uma força soberba… \n$Por favor, libere seu poder ao máximo!" + "1": "Sou eu que apareci quando a flor se abriu. Você que estava esperando…\n$Você parece um Treinador de Pokémon com força refinada e bondade profunda. \n$O que eu procuro no meu oponente é uma força soberba… \n$Por favor, libere seu poder ao máximo!", + "1_female": "Sou eu que apareci quando a flor se abriu. Você que estava esperando…\n$Você parece uma Treinadora de Pokémon com força refinada e bondade profunda. \n$O que eu procuro no meu oponente é uma força soberba… \n$Por favor, libere seu poder ao máximo!" }, "victory": { "1": "Meus Pokémon e eu aprendemos muito! Agradeço a você." @@ -1884,13 +1975,16 @@ }, "wikstrom": { "encounter": { - "1": "Bem encontrado, jovem desafiador! Verdadeiramente sou a lâmina famosa de aço endurecido, Duque Wikstrom! \n$Que a batalha comece! En garde!" + "1": "Bem encontrado, jovem desafiador! Verdadeiramente sou a lâmina famosa de aço endurecido, Duque Wikstrom! \n$Que a batalha comece! En garde!", + "1_female": "Bem encontrado, jovem desafiadora! Verdadeiramente sou a lâmina famosa de aço endurecido, Duque Wikstrom! \n$Que a batalha comece! En garde!" }, "victory": { - "1": "Glorioso! A confiança que você compartilha com seu honrado Pokémon supera até mesmo a minha!" + "1": "Glorioso! A confiança que você compartilha com seu honrado Pokémon supera até mesmo a minha!", + "1_female": "Gloriosa! A confiança que você compartilha com seu honrado Pokémon supera até mesmo a minha!" }, "defeat": { - "1": "Que tipo de magia é essa? Meu coração bate incessantemente no meu peito! \n$Vencer contra um oponente tão digno dá asas à minha alma--assim eu voo!" + "1": "Que tipo de magia é essa? Meu coração bate incessantemente no meu peito! \n$Vencer contra um oponente tão digno dá asas à minha alma--assim eu voo!", + "1_female": "Que tipo de magia é essa? Meu coração bate incessantemente no meu peito! \n$Vencer contra uma oponente tão digna dá asas à minha alma--assim eu voo!" } }, "acerola": { @@ -1922,11 +2016,14 @@ }, "victory": { "1": "Você me pegou. Você é magnífico!", - "2": "Nunca esperei que outro Treinador me derrotasse… Estou surpreso." + "1_female": "Você me pegou. Você é magnífica!", + "2": "Nunca esperei que outro Treinador me derrotasse… Estou surpreso.", + "2_female": "Nunca esperei que outra Treinadora me derrotasse… Estou surpreso." }, "defeat": { "1": "Isso foi por pouco. Quer tentar de novo?", - "2": "Não é que você seja fraco. Não se incomode com isso." + "2": "Não é que você seja fraco. Não se incomode com isso.", + "2_female": "Não é que você seja fraca. Não se incomode com isso." } }, "karen": { @@ -1951,7 +2048,8 @@ "1": "Parece que você entende bem os Pokémon. \n$Isso vai ser uma batalha e tanto! \n$Vou ter que usar a Dynamax no meu Pokémon se eu quiser vencer!" }, "victory": { - "1": "O poder da Grama murchou… Que desafiador incrível!" + "1": "O poder da Grama murchou… Que desafiador incrível!", + "1_female": "O poder da Grama murchou… Que desafiadora incrível!" }, "defeat": { "1": "Isso realmente vai te deixar em choque e admiração." @@ -1970,7 +2068,8 @@ }, "drasna": { "encounter": { - "1": "Você deve ser um Treinador forte. Sim, bastante forte…\n$Isso é uma notícia maravilhosa! Enfrentar oponentes como você e sua equipe fará meus Pokémon crescerem como ervas daninhas!" + "1": "Você deve ser um Treinador forte. Sim, bastante forte…\n$Isso é uma notícia maravilhosa! Enfrentar oponentes como você e sua equipe fará meus Pokémon crescerem como ervas daninhas!", + "1_female": "Você deve ser uma Treinadora forte. Sim, bastante forte…\n$Isso é uma notícia maravilhosa! Enfrentar oponentes como você e sua equipe fará meus Pokémon crescerem como ervas daninhas!" }, "victory": { "1": "Oh, meu Deus. Isso foi uma batalha rápida… Espero que você volte novamente algum dia!" @@ -2003,7 +2102,8 @@ }, "blue": { "encounter": { - "1": "Você deve ser muito bom para chegar tão longe." + "1": "Você deve ser muito bom para chegar tão longe.", + "1_female": "Você deve ser muito boa para chegar tão longe." }, "victory": { "1": "Só perdi para ele e agora para você… Ele? Hee, hee…" @@ -2050,7 +2150,8 @@ "1": "Ainda sou o Campeão. Não vou segurar nada." }, "victory": { - "1": "Esta é a emergência de um novo Campeão." + "1": "Esta é a emergência de um novo Campeão.", + "1_female": "Esta é a emergência de uma nova Campeã." }, "defeat": { "1": "Defendi com sucesso meu Campeonato." @@ -2138,7 +2239,8 @@ "1": "Eai! Você não acha que os Pokémon são, tipo, super fofos?" }, "victory": { - "1": "Waaah! Waaah! Você é tão mau!" + "1": "Waaah! Waaah! Você é tão mau!", + "1_female": "Waaah! Waaah! Você é tão má!" }, "defeat": { "1": "E é isso!" @@ -2146,7 +2248,8 @@ }, "chuck": { "encounter": { - "1": "Hah! Você quer me desafiar? É corajoso ou apenas ignorante?" + "1": "Hah! Você quer me desafiar? É corajoso ou apenas ignorante?", + "1_female": "Hah! Você quer me desafiar? É corajosa ou apenas ignorante?" }, "victory": { "1": "Você é forte! Por favor, me faça seu aprendiz?" @@ -2157,7 +2260,8 @@ }, "katy": { "encounter": { - "1": "Não baixe a guarda, a menos que queira se ver jogado no chão!" + "1": "Não baixe a guarda, a menos que queira se ver jogado no chão!", + "1_female": "Não baixe a guarda, a menos que queira se ver jogada no chão!" }, "victory": { "1": "Todos os meus adoráveis Pokémon caíram como moscas!" @@ -2190,7 +2294,8 @@ }, "maylene": { "encounter": { - "1": "Vim desafiá-lo agora e não vou segurar nada. \n$Por favor, prepare-se para a batalha!" + "1": "Vim desafiá-lo agora e não vou segurar nada. \n$Por favor, prepare-se para a batalha!", + "1_female": "Vim desafiá-la agora e não vou segurar nada. \n$Por favor, prepare-se para a batalha!" }, "victory": { "1": "Eu admito a derrota…" @@ -2212,7 +2317,8 @@ }, "byron": { "encounter": { - "1": "Treinador! Você é jovem, assim como meu filho, Roark. \n$Com mais Treinadores jovens assumindo o comando, o futuro dos Pokémon é brilhante! \n$Então, como uma parede para os jovens, aceitarei seu desafio!" + "1": "Treinador! Você é jovem, assim como meu filho, Roark. \n$Com mais Treinadores jovens assumindo o comando, o futuro dos Pokémon é brilhante! \n$Então, como uma parede para os jovens, aceitarei seu desafio!", + "1_female": "Treinadora! Você é jovem, assim como meu filho, Roark. \n$Com mais Treinadores jovens assumindo o comando, o futuro dos Pokémon é brilhante! \n$Então, como uma parede para os jovens, aceitarei seu desafio!" }, "victory": { "1": "Hmm! Meus Pokémon robustos--derrotados!" @@ -2234,7 +2340,8 @@ }, "volkner": { "encounter": { - "1": "Já que você chegou tão longe, deve ser bastante forte…\n$Espero que você seja o Treinador que me faça lembrar como é divertido batalhar!" + "1": "Já que você chegou tão longe, deve ser bastante forte…\n$Espero que você seja o Treinador que me faça lembrar como é divertido batalhar!", + "1_female": "Já que você chegou tão longe, deve ser bastante forte…\n$Espero que você seja a Treinadora que me faça lembrar como é divertido batalhar!" }, "victory": { "1": "Você me venceu…\n$Seu desejo e a maneira nobre como seus Pokémon batalharam por você… \n$Eu até me senti emocionado durante nossa luta. Foi uma batalha muito boa." @@ -2336,7 +2443,8 @@ }, "valerie": { "encounter": { - "1": "Oh, se não é um jovem Treinador… É adorável conhecê-lo assim. \n$Então, suponho que você ganhou o direito a uma batalha, como recompensa por seus esforços. \n$Uma elusiva Fada pode parecer frágil como a brisa e delicado como uma flor, mas é forte." + "1": "Oh, se não é um jovem Treinador… É adorável conhecê-lo assim. \n$Então, suponho que você ganhou o direito a uma batalha, como recompensa por seus esforços. \n$Uma elusiva Fada pode parecer frágil como a brisa e delicado como uma flor, mas é forte.", + "1_female": "Oh, se não é uma jovem Treinadora… É adorável conhecê-la assim. \n$Então, suponho que você ganhou o direito a uma batalha, como recompensa por seus esforços. \n$Uma elusiva Fada pode parecer frágil como a brisa e delicado como uma flor, mas é forte." }, "victory": { "1": "Espero que você encontre coisas para sorrir amanhã…" @@ -2383,7 +2491,8 @@ "1": "Deixe-me ver como você e seu Pokémon parceiro se comportam!" }, "victory": { - "1": "Seu rosa ainda está faltando, mas você é um Treinador excelente com Pokémon excelentes." + "1": "Seu rosa ainda está faltando, mas você é um Treinador excelente com Pokémon excelentes.", + "1_female": "Seu rosa ainda está faltando, mas você é uma Treinadora excelente com Pokémon excelentes." }, "defeat": { "1": "Muito ruim para você, eu acho." @@ -2391,7 +2500,8 @@ }, "bede": { "encounter": { - "1": "Suponho que devo provar além de qualquer dúvida o quão patético você é e quão forte eu sou." + "1": "Suponho que devo provar além de qualquer dúvida o quão patético você é e quão forte eu sou.", + "1_female": "Suponho que devo provar além de qualquer dúvida o quão patética você é e quão forte eu sou." }, "victory": { "1": "Eu vejo… Bem, tudo bem. Eu não estava me esforçando muito de qualquer maneira." @@ -2435,7 +2545,8 @@ }, "brassius": { "encounter": { - "1": "Pressuponho que você está pronto? Que nossa obra de arte colaborativa comece!" + "1": "Pressuponho que você está pronto? Que nossa obra de arte colaborativa comece!", + "1_female": "Pressuponho que você está pronta? Que nossa obra de arte colaborativa comece!" }, "victory": { "1": "Ahhh…avant-garde!" @@ -2446,10 +2557,12 @@ }, "iono": { "encounter": { - "1": "Como você está se sentindo sobre esta batalha?\n$...\n$Vamos começar o show! Quão forte é o nosso desafiador? \n$Eu não sei! Vamos descobrir juntos!" + "1": "Como você está se sentindo sobre esta batalha?\n$...\n$Vamos começar o show! Quão forte é o nosso desafiador? \n$Eu não sei! Vamos descobrir juntos!", + "1_female": "Como você está se sentindo sobre esta batalha?\n$...\n$Vamos começar o show! Quão forte é o nossa desafiadora? \n$Eu não sei! Vamos descobrir juntos!" }, "victory": { - "1": "Você é tão chamativo e brilhante quanto um Raio do Trovão de 10.000.000 volts, amigo!" + "1": "Você é tão chamativo e brilhante quanto um Raio do Trovão de 10.000.000 volts, amigo!", + "1_female": "Você é tão chamativa e brilhante quanto um Raio do Trovão de 10.000.000 volts, amiga!" }, "defeat": { "1": "Seus olhos são MEUS!" @@ -2471,7 +2584,8 @@ "1": "Vamos lá, baby! Me agite até os ossos!" }, "victory": { - "1": "Você é legal, meu amigo, você move minha ALMA!" + "1": "Você é legal, meu amigo, você move minha ALMA!", + "1_female": "Você é legal, minha amiga, você move minha ALMA!" }, "defeat": { "1": "Até mais, baby!" @@ -2505,7 +2619,9 @@ "nessa_elite": { "encounter": { "1": "As marés estão mudando a meu favor. Pronto para ser levado pela corrente?", - "2": "Vamos fazer ondas com esta batalha! Espero que esteja preparado!" + "1_female": "As marés estão mudando a meu favor. Pronta para ser levada pela corrente?", + "2": "Vamos fazer ondas com esta batalha! Espero que esteja preparado!", + "2_female": "Vamos fazer ondas com esta batalha! Espero que esteja preparada!" }, "victory": { "1": "Você navegou nessas águas perfeitamente... Bem feito!", @@ -2533,6 +2649,7 @@ "allister_elite": { "encounter": { "1": "As sombras caem... Você está pronto para enfrentar seus medos?", + "1_female": "As sombras caem... Você está pronta para enfrentar seus medos?", "2": "Vamos ver se você pode lidar com a escuridão que eu comando." }, "victory": { @@ -2555,7 +2672,8 @@ }, "defeat": { "1": "Outra tempestade enfrentada, outra vitória conquistada! Bem lutado!", - "2": "Você foi pego na minha tempestade! Melhor sorte na próxima vez!" + "2": "Você foi pego na minha tempestade! Melhor sorte na próxima vez!", + "2_female": "Você foi pega na minha tempestade! Melhor sorte na próxima vez!" } }, "alder": { diff --git a/src/locales/zh_CN/config.ts b/src/locales/zh_CN/config.ts index 021e14d9727..44a190d8c11 100644 --- a/src/locales/zh_CN/config.ts +++ b/src/locales/zh_CN/config.ts @@ -15,14 +15,10 @@ import bgmName from "./bgm-name.json"; import biome from "./biome.json"; import challenges from "./challenges.json"; import commandUiHandler from "./command-ui-handler.json"; -import dialogueMale from "./dialogue-male.json"; -import dialogueFemale from "./dialogue-female.json"; -import dialogueEndbossMale from "./dialogue-final-boss-male.json"; -import dialogueEndbossFemale from "./dialogue-final-boss-female.json"; -import dialogueMiscMale from "./dialogue-misc-male.json"; -import dialogueMiscFemale from "./dialogue-misc-female.json"; -import dialogueDoubleBattleMale from "./dialogue-double-battle-male.json"; -import dialogueDoubleBattleFemale from "./dialogue-double-battle-female.json"; +import dialogue from "./dialogue.json"; +import battleSpecDialogue from "./dialogue-final-boss.json"; +import miscDialogue from "./dialogue-misc.json"; +import doubleBattleDialogue from "./dialogue-double-battle.json"; import egg from "./egg.json"; import fightUiHandler from "./fight-ui-handler.json"; import filterBar from "./filter-bar.json"; @@ -76,14 +72,10 @@ export const zhCnConfig = { commandUiHandler, common, achv, - PGMdialogue: dialogueMale, - PGFdialogue: dialogueFemale, - PGMbattleSpecDialogue: dialogueEndbossMale, - PGFbattleSpecDialogue: dialogueEndbossFemale, - PGMmiscDialogue: dialogueMiscMale, - PGFmiscDialogue: dialogueMiscFemale, - PGMdoubleBattleDialogue: dialogueDoubleBattleMale, - PGFdoubleBattleDialogue: dialogueDoubleBattleFemale, + dialogue, + battleSpecDialogue, + miscDialogue, + doubleBattleDialogue, egg, fightUiHandler, filterBar, diff --git a/src/locales/zh_CN/dialogue-double-battle-male.json b/src/locales/zh_CN/dialogue-double-battle-male.json deleted file mode 100644 index 5ab6bf49890..00000000000 --- a/src/locales/zh_CN/dialogue-double-battle-male.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "blue_red_double": { - "encounter": { - "1": "青绿:嘿,赤红,\n让这家伙看看我们是什么来头!$赤红: ...$青绿: 见识下真新镇的实力!" - }, - "victory": { - "1": "青绿:打得真不错$赤红: ..." - } - }, - "red_blue_double": { - "encounter": { - "1": "赤红: ...!$青绿: 他人狠话不多。$青绿: 但别被他耍了,\n毕竟他可是个冠军!" - }, - "victory": { - "1": "赤红: ...!$青绿: 下次我们一定会赢你!" - } - }, - "tate_liza_double": { - "encounter": { - "1": "小枫:嘿嘿嘿……你惊讶吗?$小南: 这里有两个道馆馆主?$小枫: 我们是双胞胎!$小南: 我们无需交谈,因为……$我们可以通晓彼此的想法$小枫: 我们的组合……$小南: 你能打败吗?" - }, - "victory": { - "1": "小枫:什么?我们的组合……$小南:被瓦解了!" - } - }, - "liza_tate_double": { - "encounter": { - "1": "小南:呵呵呵……你惊讶吧?$小枫:这里有两个道馆馆主?$小南:我们可以通晓……$小枫:彼此的想法……$小南:全在我们脑中!$小枫:我们的组合……$小南:你能打败吗?" - }, - "victory": { - "1": "小枫:你和你的宝可梦……$小南:简直像亲兄弟姐妹!" - } - }, - "wallace_steven_double": { - "encounter": { - "1": "大吾:米可利, 展现冠军的实力吧!$米可利:我们将展示丰缘的实力!$大吾:要上了!" - }, - "victory": { - "1": "大吾:打得真不错!$米可利:我们下次会赢的!" - } - }, - "steven_wallace_double": { - "encounter": { - "1": "大吾:你有什么稀有的宝可梦吗?$米可利:大吾……我们是来对战的,\n不是来炫耀宝可梦的。$大吾:哦……知道了… 那么要上了!" - }, - "victory": { - "1": "大吾:战斗结束了,\n来看看我的稀有宝可梦!$米可利:大吾……" - } - }, - "alder_iris_double": { - "encounter": { - "1": "阿戴克:我们俩是合众最强的训练家!$艾莉丝:与最强来一场最激烈的战斗吧!" - }, - "victory": { - "1": "阿戴克:哇哦!你真是超级厉害!$艾莉丝:我们下次会赢的啦!" - } - }, - "iris_alder_double": { - "encounter": { - "1": "艾莉丝:欢迎!挑战者,\n合众地区最强的冠军大驾光临!$阿戴克:艾莉丝,你是不是有点太兴奋了…" - }, - "victory": { - "1": "艾莉丝:这样的失败可不好受啊…$阿戴克:但是只有失败才能让我们变强!" - } - }, - "piers_marnie_double": { - "encounter": { - "1": "玛俐:哥哥,给他们展现尖钉镇的实力!$聂梓:我们带来黑暗!" - }, - "victory": { - "1": "玛俐:你的强光亮瞎我们的黑暗了啦……$聂梓:实在太亮了…" - } - }, - "marnie_piers_double": { - "encounter": { - "1": "聂梓: 台下准备好了吗!$玛俐: 哥哥,我们是来对战的,\n不是来唱歌的……" - }, - "victory": { - "1": "聂梓:这首歌献给大家!$玛俐:哥哥……" - } - } -} \ No newline at end of file diff --git a/src/locales/zh_CN/dialogue-double-battle-female.json b/src/locales/zh_CN/dialogue-double-battle.json similarity index 100% rename from src/locales/zh_CN/dialogue-double-battle-female.json rename to src/locales/zh_CN/dialogue-double-battle.json diff --git a/src/locales/zh_CN/dialogue-final-boss-male.json b/src/locales/zh_CN/dialogue-final-boss-male.json deleted file mode 100644 index edbc302dcd4..00000000000 --- a/src/locales/zh_CN/dialogue-final-boss-male.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "encounter": "看来终于又到了那个时候。\n你知道自己为何会来到这里,不是吗?\n$你被吸引到这里,因为你以前就来过这里。\n无数次。\n$尽管,或许可以数一数。\n准确地说,这实际上是你的第{{cycleCount}}次循环。\n$每一次循环,你的思想都会恢复到之前的状态。\n即便如此,不知何故,你之前自我的残留仍然存在。\n$直到现在,你仍未成功,\n但我感觉这次你身上有一种异样的气息。\n$你是这里唯一的人,尽管感觉上还有……另一个人。\n$你最终会成为对我来的一个硬茬吗?\n我渴望了数千年的挑战?\n$我们,开始。", - "firstStageWin": "我明白了。我所感觉到的气息确实是真实的。\n看来我不再需要保留实力了。\n$别让我失望。", - "secondStageWin": "…漂亮。" -} \ No newline at end of file diff --git a/src/locales/zh_CN/dialogue-final-boss-female.json b/src/locales/zh_CN/dialogue-final-boss.json similarity index 100% rename from src/locales/zh_CN/dialogue-final-boss-female.json rename to src/locales/zh_CN/dialogue-final-boss.json diff --git a/src/locales/zh_CN/dialogue-male.json b/src/locales/zh_CN/dialogue-male.json deleted file mode 100644 index 5a4615fac54..00000000000 --- a/src/locales/zh_CN/dialogue-male.json +++ /dev/null @@ -1,2691 +0,0 @@ -{ - "youngster": { - "encounter": { - "1": "嘿,想来对战吗?", - "2": "你也是新人训练师吗?", - "3": "嘿,我之前没见过你。我们来对战吧!", - "4": "我刚输了,所以我正在寻找更多的宝可梦。$等等!你看起来很弱!\n来吧,我们对战吧!", - "5": "我们见过面吗?我记不太清了。$嗯,不管怎样,很高兴见到你!", - "6": "好的!我们上吧!", - "7": "好的!我来啦!我会向你展示我的实力!", - "8": "嚯嚯嚯...我会向你展示我的宝可梦有多厉害!", - "9": "不要浪费时间打招呼。你准备好了就放马过来!", - "10": "别掉以轻心,$否则你可能会被小朋友打到哭鼻子哦。", - "11": "我精心培养了我的宝可梦。不许你伤害它们!", - "12": "恭喜你成功了!从这以后可不轻松哦。", - "13": "战斗永无止境!欢迎来到没有尽头的世界!" - }, - "victory": { - "1": "哇!你很强!", - "2": "我根本没机会赢,对吧?", - "3": "我会等长大了再来打败你!", - "4": "呃。我没有更多宝可梦了。", - "5": "不可能…不可能!我怎么可能又输了…", - "6": "不!我输了!", - "7": "哇!你真是太不可思议了!我既惊讶又钦佩!", - "8": "这怎么…怎么可能…$明明我和我的宝可梦是最强大的…", - "9": "下次我不会输了!我们找时间再对战吧!", - "10": "天哪!你看不出我还只是个小孩子吗!$你那样全力以赴太赖了!", - "11": "你的宝可梦更棒啊!和我交换吧!", - "12": "我之前有点上头,我说了什么来着?", - "13": "啊哈哈!就是这样!$对!你已经熟悉这个世界了!" - } - }, - "lass": { - "encounter": { - "1": "我们来对战吧,好吗?", - "2": "你看起来像是个新人训练师。我们来战斗吧!", - "3": "我不认识你。来对战怎么样?", - "4": "让我们来进行一场有趣的宝可梦对战吧!", - "5": "我会向你展示如何真正使用宝可梦!", - "6": "一场认真的对战从始于认真的开场白!$你确定你准备好了吗?", - "7": "花无重开日,人无再少年。$你在对战中只有一次机会。$很快,你就只能活在回忆中了。", - "8": "你最好对我手下留情,好吗?$当然我会认真对战的!", - "9": "学校很无聊,我无事可做。$*哈欠*…我只是来对战打发时间。" - }, - "victory": { - "1": "那真是令人印象深刻!我还有很多要学习。", - "2": "我没想到你会这么轻易地打败我…", - "3": "我希望有一天,我们能再进行一场对战。", - "4": "那真是场非常有趣的对战!$你让我精疲力尽了…", - "5": "你给我上了一课!你真是太棒了!", - "6": "说真的,我输了。$这,怎么说,真的好难过,但你也真的很厉害。", - "7": "我不需要像这样的记忆。删除记忆中…", - "8": "嘿!我告诉过你要对我手下留情!$不过,当你认真的时候,你真的很酷。", - "9": "实际上,我开始厌倦对战了…$一定有新的事情可以做…" - } - }, - "breeder": { - "encounter": { - "1": "听话的宝可梦,自私的宝可梦…$宝可梦有独特的性格呢。", - "2": "尽管我出生贫寒,但我的宝可梦培养的很好。", - "3": "嗯,你有没有管教你的宝可梦?$过度溺爱是不好的。" - }, - "victory": { - "1": "对每个宝可梦因材施教是很重要的。", - "2": "不像一无是处的我…这些宝可梦都很优秀。", - "3": "过度的赞美会宠坏宝可梦和人。" - }, - "defeat": { - "1": "即使输了,也不应该对你的宝可梦发火。", - "2": "相当好的宝可梦,对吧?我很会养东西。", - "3": "无论你多么爱你的宝可梦,$你仍要在它没做好时管教它们。" - } - }, - "breeder_female": { - "encounter": { - "1": "宝可梦永远不会背叛你。$它们会回报你对它们的爱。", - "2": "要我教教你训练优秀宝可梦的技巧吗?", - "3": "特别的宝可梦有特别的培育技巧。" - }, - "victory": { - "1": "呃…事情不应该是这样的。$我是不是用错了能量方块?", - "2": "这怎么会发生在我的宝可梦身上…$你给你的宝可梦喂了什么?", - "3": "如果我输了,我告诉你我只是在消磨时间。$你根本不会伤害到我的自尊心。" - }, - "defeat": { - "1": "这证明了我的宝可梦已经接受了我的爱。", - "2": "训出好宝可梦的真正技巧是捉到好的宝可梦。", - "3": "宝可梦的强弱取决于你的饲养方式。" - } - }, - "fisherman": { - "encounter": { - "1": "啊!你让我错过了一次咬钩!$你打算怎么办?", - "2": "走开!你吓跑了宝可梦!", - "3": "让我看看你能否赢得胜利!" - }, - "victory": { - "1": "算了吧。", - "2": "下一次,我将卷土重来,凯旋而归!", - "3": "我想这次我低估了海流。" - } - }, - "fisherman_female": { - "encounter": { - "1": "哇!我钓到了一条大鱼!", - "2": "线已收好,准备提竿!", - "3": "准备制造波浪!" - }, - "victory": { - "1": "我会带着更强大的鱼钩回来。", - "2": "下次我会赢得胜利。", - "3": "我只是在为回归磨利我的鱼钩!" - } - }, - "swimmer": { - "encounter": { - "1": "是时候潜水了!", - "2": "让我们一起乘风破浪,赢得胜利!", - "3": "该一鸣惊人了!" - }, - "victory": { - "1": "沉浸在失败中!", - "2": "失败的波浪!", - "3": "后浪死在沙滩上,我猜。" - } - }, - "backpacker": { - "encounter": { - "1": "收拾行李,开始游戏!", - "2": "让我看看你是否能跟上!", - "3": "全副武装,挑战者!", - "4": "我花了20年时间试图找到自己……但我在哪里?" - }, - "victory": { - "1": "这次绊倒了!", - "2": "哦,我觉得我迷路了。", - "3": "死路!", - "4": "等一下!嘿!你不知道我是谁吗?" - } - }, - "ace_trainer": { - "encounter": { - "1": "你看起来挺自信的。", - "2": "你的宝可梦…… 让我看看……", - "3": "因为我是王牌训练师,人们认为我很强。", - "4": "你知道成为王牌训练师需要什么吗?" - }, - "victory": { - "1": "是的…… 你的宝可梦很棒……", - "2": "什么?!我是战斗天才啊!", - "3": "理所应当,你才是主角!", - "4": "好好好!你可以成为王牌训练师!" - }, - "defeat": { - "1": "我将把我的身体和灵魂全都奉献给宝可梦对战!", - "2": "一切都在我的预料之中… \n没有什么好惊讶的…", - "3": "我觉得我长大后有点玻璃心,$你太压力我我会跨的……", - "4": "我当然很强大,不会输。$而且重要的是我要优雅地赢。" - } - }, - "parasol_lady": { - "encounter": { - "1": "是时候用优雅和从容来为战斗添彩了!" - }, - "victory": { - "1": "我的优雅依然完好无损!" - } - }, - "twins": { - "encounter": { - "1": "准备好咯,因为我们联手,\n麻烦双倍!", - "2": "两颗心,一条绳$让我们看看你能否跟上我们双胞胎的力量!", - "3": "希望你准备好了面对双倍的麻烦,$因为我们即将燃起来啦!" - }, - "victory": { - "1": "虽然我们在这一轮输了,$但我们的羁绊依然坚不可摧!", - "2": "我们的双胞胎精神,才不会就此熄灭。", - "3": "我们会作为充满活力的二人组,$卷土重来,变得更强!" - }, - "defeat": { - "1": "双胞胎的力量至高无上!", - "2": "两颗心,一起赢!", - "3": "笑容成双,共舞成双!" - } - }, - "cyclist": { - "encounter": { - "1": "准备好在我后面吃土吧!", - "2": "挑战者,准备好!我要把你打的落花流水!", - "3": "全速前进,让我看看你能不能跟的上!" - }, - "victory": { - "1": "轮子可能不转了,但我的决心没有停下。", - "2": "被超越了!", - "3": "通往胜利的道路还有许多曲折等待探索。" - } - }, - "black_belt": { - "encounter": { - "1": "我赞扬你挑战我的勇气!$因为我是踢力最强的人!", - "2": "哦,我明白了。你想被切成碎片吗?$或者你更喜欢当个沙袋?" - }, - "victory": { - "1": "哦。是宝可梦在战斗。$我强大的踢击一点忙都没帮上。", - "2": "嗯…如果我无论如何都会输,我希望能被彻底打败。" - } - }, - "battle_girl": { - "encounter": { - "1": "你不必试图勾引我。你可以输给我。" - }, - "victory": { - "1": "很难说再见,但我们快没时间了……" - } - }, - "hiker": { - "encounter": { - "1": "人到中年后,我的身体和我爬过的山一样强壮!", - "2": "我从父母那里遗传了这副魁梧的身材…$就像一座活生生的山脉…" - }, - "victory": { - "1": "至少在BMI方面我不能输!", - "2": "这还不够……永远不够。$我的坏胆固醇还不够高……" - } - }, - "ranger": { - "encounter": { - "1": "当我身处大自然中,其他事情都不重要了。", - "2": "如果我生活中没有大自然,有时就会突然感到焦虑。" - }, - "victory": { - "1": "无论我是赢是输,\n对广阔的大自然来说并不重要……", - "2": "与城市生活的窒息感相比,\n这种事情微不足道。" - }, - "defeat": { - "1": "我赢了。但与浩瀚的大自然相比,\n胜利算不了什么…", - "2": "与我的焦虑症相比,我觉得你也不会怎样…" - } - }, - "scientist": { - "encounter": { - "1": "我的研究将引导这个世界走向和平与欢乐。" - }, - "victory": { - "1": "我是个天才…我不应该输给你这样的人…" - } - }, - "school_kid": { - "encounter": { - "1": "……嘿嘿。我对计算和分析很有信心。", - "2": "我正在尽可能地积累经验,$因为我希望有一天能成为道馆馆主。" - }, - "victory": { - "1": "哦…计算和分析也许和个例不太匹配呀…", - "2": "我想,即使是艰难困苦的经历,也有存在的意义。" - } - }, - "artist": { - "encounter": { - "1": "我以前很受欢迎,但现在已经彻底过气了。" - }, - "victory": { - "1": "随着时代的变迁,价值观也在变化。$我意识到这一点已经太晚了。" - } - }, - "guitarist": { - "encounter": { - "1": "当我弹奏着走向胜利的旋律时,$准备好感受失败的节奏吧!" - }, - "victory": { - "1": "暂时沉默了,但我不屈的旋律将继续演奏。" - } - }, - "worker": { - "encounter": { - "1": "人们总误解我,这让我很烦。$我比大家想象的要干净得多。" - }, - "victory": { - "1": "我真的不想晒伤皮肤,所以我想在阴凉处工作。" - } - }, - "worker_female": { - "encounter": { - "1": "人们总是误解我,这让我很烦。 $我比大家想象的要干净得多。" - }, - "victory": { - "1": "我真的不想晒伤皮肤,\n所以我想在阴凉处工作。" - }, - "defeat": { - "1": "我的身体和心灵并不总同步。" - } - }, - "worker_double": { - "encounter": { - "1": "你会知道我们怎么击败你的。我们在工地训练过!" - }, - "victory": { - "1": "真奇怪…怎么会这样…我不应该被打败的。" - } - }, - "hex_maniac": { - "encounter": { - "1": "我通常只听古典音乐,但如果我输了,$我想我应该试试新时代的音乐!", - "2": "我的每一滴眼泪都让我变得更加坚强。" - }, - "victory": { - "1": "乐坛新时代的曙光就此出现了吗?", - "2": "现在我变得更强了。我随着他人怨恨而成长。" - }, - "defeat": { - "1": "“新时代”指的是二十世纪的古典作曲家,对吧?", - "2": "不要纠结于悲伤或沮丧。$你可以用悲愤来激励自己。" - } - }, - "psychic": { - "encounter": { - "1": "嘿!集中!" - }, - "victory": { - "1": "呃呃呃!" - } - }, - "officer": { - "encounter": { - "1": "准备好,因为正义即将得到伸张!", - "2": "准备好维护法律,在战场上伸张正义!" - }, - "victory": { - "1": "正义的分量比以往还要沉重……", - "2": "失败的阴影,在警局中徘徊。" - } - }, - "beauty": { - "encounter": { - "1": "我最后的战斗…我就是这么看待这场对战的…" - }, - "victory": { - "1": "很有趣…有时间再来一场最后的战斗…" - } - }, - "baker": { - "encounter": { - "1": "希望你准备好品尝失败的滋味!" - }, - "victory": { - "1": "我会卷土重来的。" - } - }, - "biker": { - "encounter": { - "1": "是时候加速,把你甩在后面了!" - }, - "victory": { - "1": "我会为下一场比赛调整状态。" - } - }, - "firebreather": { - "encounter": { - "1": "我的火焰会吞噬你!", - "2": "我的灵魂在燃烧,我要让你看看它有多滚烫!", - "3": "快来看看吧!" - }, - "victory": { - "1": "我燃成灰了…", - "2": "哟! 好烫!", - "3": "嗷! 我的鼻尖烧焦了!" - } - }, - "sailor": { - "encounter": { - "1": "伙计,如果你输了,你就得挨板子!", - "2": "来吧!这关系到我作为水手的尊严!", - "3": "你好啊!你晕船么?" - }, - "victory": { - "1": "啊,被孩子打败了。", - "2": "你的精神让我沉沦!", - "3": "好像是我晕船了…" - } - }, - "archer": { - "encounter": { - "1": "在你继续前进之前,\n让我看看你要如何和对付火箭队。", - "2": "我收到报告说你的实力与众不同,\n就让我来看看这是否属实吧。", - "3": "我是阿波罗,火箭对的干部。\n我不会对组织的敌人手软。" - }, - "victory": { - "1": "大失误……", - "2": "以我现在的实力,无法胜任我的任务……", - "3": "原……谅我,坂木。\n我竟被一名训练师打败了。." - } - }, - "ariana": { - "encounter": { - "1": "站住!我们可不能放过你!\n$这会损伤火箭对的名誉,明白吗?", - "2": "我不知道也不想知道我的所作所为正确与否…\n$我只要遵从坂木老大的指令就可以了!", - "3": "你的旅途到此为止了,我会把你狠狠扳倒!" - }, - "victory": { - "1": "切,你好强,可恶。\n$如果你加入火箭队,肯定能成为干部。", - "2": "好……好崩溃……", - "3": "嗯啊啊!这不可能!我使出全力还是输了!" - } - }, - "proton": { - "encounter": { - "1": "你想干什么?如果你要妨碍我们的事业,我可不会手下留情。", - "2": "你在这干什么?别人总说我是火箭队里最残忍和恐怖的人…\n$我强烈推荐你别来碍我们的事!", - "3": "我是兰斯,火箭队的干部。就让来扫除你对我们的阻挠。" - }, - "victory": { - "1": "我的防线崩溃了……", - "2": "你虽然这次赢了,但是这只是让火箭队的怒火继续燃烧!", - "3": "我输了…但是我不会忘记的。" - } - }, - "petrel": { - "encounter": { - "1": "哇哈哈哈,我们一直在等你。我?你不知道我是谁?是我,坂木啊。\n$伟大的坂木大人本人!哇哈哈哈!…啊?我听起来不像坂木吗?\n$我连看起来都不像?怎么会呢,我可认真的变装了!", - "2": "我是拉姆达,火箭队的干部。我不会允许你干涉我们的计划!", - "3": "火箭队干部拉姆达来会会这个入侵者!" - }, - "victory": { - "1": "好好好,我会说他在哪的", - "2": "我……我什么也做不了……坂木,请原谅我……", - "3": "不,我不能慌了神,必须通知其他人…" - } - }, - "tabitha": { - "encounter": { - "1": "呵呵呵!原来你都一路来到这里了!但你来晚了!", - "2": "呵呵呵……你终于来了?我们小瞧你了,没不过事! \n$我比你见过的所有队员都要厉害,我可不会拖延时间。\n$我会把你碾碎!", - "3": "我要让你尝尝痛苦的滋味!认命吧!" - }, - "victory": { - "1": "呵呵呵!虽然你打败了我,但你根本没机会打败老大!\n$如果你现在输了,你就不用面对那样严厉的鞭笞了!", - "2": "呵呵呵……所以,我也输了……", - "3": "啊哈!怎么会这样?像我这样的干部\n竟然输给了一个随处可见的训练师……" - } - }, - "courtney": { - "encounter": { - "1": "那个东西……你所拥有的那个东西……\n那就是……那就是我们熔岩队所寻找的东西……", - "2": "……那么……删除记忆……", - "3": "……哈……分析中……啊哈♪" - }, - "victory": { - "1": "……改变……世界。", - "2": "如预期。出乎意料。目标锁定…锁定你……完成。\n$开始……实验。材料是你…永远…啊哈……♪", - "3": "……又来了?出乎意料……我就知道。你……很有趣!……啊哈哈!♪" - } - }, - "shelly": { - "encounter": { - "1": "啊哈哈哈哈!你要插手海洋队的事?\n$你要么是绝对无畏,要么就是无知,或者两者兼有!\n$你太可爱了,太恶心了!我要把你打倒!", - "2": "怎么回事?这个小鬼头是谁?", - "3": "冷静点,耐心点。我很快就会把你击溃。" - }, - "victory": { - "1": "啊哈哈哈哈!我们意外地被人干扰了!我们别无选择。\n$不得不撤退了,但这会不是你最后一次面对海洋队!\n$我们还有其他计划!别忘了!", - "2": "啊?!我是不是对你太温柔了?!", - "3": "呃…难道在对战中你也一刻不停地在变强吗?\n$你真是个前途光明的小鬼……\n我和我的宝可梦已经没有任何力量去战斗了……\n$继续吧……准备去被水梧桐摧毁吧。" - } - }, - "matt": { - "encounter": { - "1": "嚯!哈哈哈!怎么,你是不是脑子不正常了?\n看看你,像个幕下力士!", - "2": "“哦吼!你!你真是个有趣的孩子!", - "3": "你在这里干什么?你跟踪我们了吗?" - }, - "victory": { - "1": "好吧,在老大有时间对付你之前,我来成为你的对手!", - "2": "我能感觉到!我感觉到了,没错!你身上散发出的力量!\n$更多!还想要更多!但看起来我们没时间了……", - "3": "真有趣!我就知道你会让我尽兴的!\n我期待有一天再次面对你!" - } - }, - "mars": { - "encounter": { - "1": "我是伙星,银河队的顶级干部之一。", - "2": "银河队对未来的愿景坚定不移。\n反对者将被无情地粉碎!", - "3": "“紧张吗?你是该感到紧张了!" - }, - "victory": { - "1": "这不可能!我怎么会输?!", - "2": "你很有本事,我承认。", - "3": "输了……犯了一个代价高昂的大错。" - } - }, - "jupiter": { - "encounter": { - "1": "岁星,银河队干部,为您效劳。", - "2": "抵抗是徒劳的。银河队必将获胜!", - "3": "你在发抖啊……已经害怕了吗?" - }, - "victory": { - "1": "不会吧……我输了?!", - "2": "厉害,你胆子真大!", - "3": "输成这样……真丢人。" - } - }, - "saturn": { - "encounter": { - "1": "我是镇星,银河队的干部。", - "2": "我们的使命是绝对的,任何阻碍都将被消灭!", - "3": "我从你的眼中看到的是恐惧吗?" - }, - "victory": { - "1": "不可能……被你打败了?!", - "2": "你证明了自己是一个值得尊敬的对手。", - "3": "失败的苦涩……难以接受……。" - } - }, - "zinzolin": { - "encounter": { - "1": "你可能会对等离子队构成威胁,所以我们现在就消灭你!", - "2": "哦,天哪……我没想到要在这么冷的天气里战斗!", - "3": "能走到今天这一步,你真是个了不起的训练师。\n但一切到此结束。" - }, - "victory": { - "1": "魁奇思大人……我让你失望了……", - "2": "好冷,我不仅发抖,还要遭罪。", - "3": "哼。你比我想象的要聪明,但还不够。" - } - }, - "rood": { - "encounter": { - "1": "你对等离子队是个威胁。我们现在不能让你离开这里!", - "2": "哦,这寒风……我从没想过我必须在这里战斗!", - "3": "能走到今天这一步,你是一位了不起的训练师,但这就是你的结局了。" - }, - "victory": { - "1": "魁奇思大人……我的任务失败了", - "2": "寒风刺骨。我瑟瑟发抖。我痛苦不堪。", - "3": "嗯,你是很有才。但是要打败等离子队还不够……!" - } - }, - "xerosic": { - "encounter": { - "1": "啊哈哈!我很乐意。\n来吧,小训练师!让我们看看你有什么本事!", - "2": "嗯……你比看上去更强大。\n我想知道你体内有多少能量。", - "3": "我一直在等你!我需要对你做一点研究!\n来吧,我们开始吧!" - }, - "victory": { - "1": "啊,你好强大啊……嗯……确实非常强大。", - "2": "叮叮叮!你成功了!\n战利品归胜利者!", - "3": "太棒了!太神奇了!\n你的技巧和勇气都无与伦比!" - } - }, - "bryony": { - "encounter": { - "1": "我是芭菈,能与你一战是我的荣幸。\n让我看看你的实力。", - "2": "令人印象深刻……你比你看上去的还要强大。\n让我们看看你真正的实力。", - "3": "我预料到了你的到来。\n是时候进行一个小实验了,我们开始吧?" - }, - "victory": { - "1": "你很强大。哦,嗯嗯!确实非常强大", - "2": "叮叮叮!你做得很好。胜利属于你。", - "3": "太棒了!了不起!你的技巧和勇气值得称赞。" - } - }, - "rocket_grunt": { - "encounter": { - "1": "你要有麻烦了!", - "2": "我们要干大事了!\n闪一边去,小子!", - "3": "把你的宝可梦交过来,\n不然就尝尝火箭队的厉害!", - "4": "你准备好感受火箭队真正的恐怖了吗!", - "5": "喂,小子!俺可是火箭队滴!" - }, - "victory": { - "1": "好讨厌的感觉啊!", - "2": "哎呀!不小心丢掉电梯钥匙啦!", - "3": "我搞砸了。", - "4": "我的伙计们不会放过你……!", - "5": "你说啥?俺们火箭队要玩完了?" - } - }, - "magma_grunt": { - "encounter": { - "1": "如果你挡在熔岩队路上,那就别指望我们手下留情!", - "2": "你最好别妨碍我们的计划!\n我们会让世界变得更美好!", - "3": "少碍事!熔岩队没时间理你这样的小孩!", - "4": "你有棉花糖没?我来给你好好烤烤!", - "5": "我们会利用火山的力量!\n它马上要…爆发了!懂吗?嘿嘿嘿……" - }, - "victory": { - "1": "哈?我输了?!", - "2": "我怎么会输!我为了训练饭都不吃了!", - "3": "不会吧,不就是一个小孩!", - "4": "呃啊…我得赶快逃回基地…", - "5": "你打败我了…你觉得老大会扣我工资吗?" - } - }, - "aqua_grunt": { - "encounter": { - "1": "即使是小孩,如果要和海洋队作对,也别指望我们手下留情!", - "2": "嚯…你好大的胆子,敢惹我们海洋队!", - "3": "不仅是我的水系宝可梦,整片大海即将淹没你!", - "4": "我们海洋队,是为了大义!", - "5": "准备好被我的…呃…我宝可梦的海流冲走吧!" - }, - "victory": { - "1": "你在开玩笑吧?", - "2": "害,没想到这种小屁孩也要管我的闲事!", - "3": "我输了?看来我得自己游回基地了。", - "4": "不是吧,怎么会,老大要生气了……", - "5": "你打败了我…老大不会要让我上跳板吧……" - } - }, - "galactic_grunt": { - "encounter": { - "1": "别惹银河队!", - "2": "见识下我们的科技,和我们所设想的未来!", - "3": "以银河队之名,我会扫清一切挡路的人!", - "4": "准备输的一败涂地吧!", - "5": "希望你做好被宇宙力量碾压的准备。" - }, - "victory": { - "1": "停机了…", - "2": "从长远来看,这次的挫折不用在意。", - "3": "小失败不会影响我们的宏图伟业!", - "4": "咋回事!?", - "5": "个人记录:提升对战水平,优先级,高……" - } - }, - "plasma_grunt": { - "encounter": { - "1": "异端不共戴天!", - "2": "要是我赢了你!就把你的宝可梦放生!", - "3": "要是敢和等离子队作对,我来好好关照你!", - "4": "等离子队会从你们这种自私的人手里解放宝可梦!", - "5": "我们的发型帅的一批,而我们的战斗水平呢,\n马上让你见识一下。" - }, - "victory": { - "1": "等离子子子子子子!", - "2": "我怎么会输……", - "3": "…没用的家伙!我得去偷个厉害点的宝可梦!", - "4": "伟大的事业总会被人阻挠…", - "5": "烂完了…烂烂烂烂烂!等离子队烂了!\n说短点就是,等烂子队!" - } - }, - "flare_grunt": { - "encounter": { - "1": "你的宝可梦无法与闪焰队的优雅相提并论", - "2": "带个墨镜吧,别被我闪瞎狗眼了!", - "3": "闪焰队将净化这个不完美的世界!", - "4": "准备面对闪焰队的美!", - "5": "时尚对我们来说最重要!" - }, - "victory": { - "1": "我的未来看起来并不明亮…", - "2": "这战斗比我想的更难搞,我得重头训练了。", - "3": "啊啊?我输了?!", - "4": "就算是在失败当中,闪焰队依旧优雅动人!", - "5": "你虽然打败了我,但是我输的也这么潇洒!" - } - }, - "aether_grunt": { - "encounter": { - "1": "我会用尽全力消灭你!", - "2": "我才不管你是不是小孩!\n只要和我们作对,我就把你打飞!", - "3": "上头要我拦下所有训练师,无论是谁!", - "4": "给你展现一下以太乐园的力量!", - "5": "既然你已经触达到了以太基金会的黑暗,\n那我要请你就此消失了。" - }, - "victory": { - "1": "哼!看来你有点实力。", - "2": "这什么情况!什么情况!", - "3": "啊!你怎么这么强!我这下可没法阻止你!", - "4": "嗯……看来我输了……", - "5": "我惊掉大牙了……" - } - }, - "faba": { - "encounter": { - "1": "我,分部长扎奥博, \n给你见识下现实世界的残酷吧!", - "2": "堂堂以太乐园的最后防线,\n我扎奥博竟然要跟个毛头小子对战。", - "3": "我,扎奥博,以太基金会分部长。\n世上唯一,无可替代!" - }, - "victory": { - "1": "哎咿呀!", - "2": "怎……怎么可能!这孩子!", - "3": "这就是……这就是为啥我讨厌小孩子!" - } - }, - "skull_grunt": { - "encounter": { - "1": "我们并不坏,YO,我们是硬汉!", - "2": "YO!咋样!我们就这样打招呼!\n混个脸熟呗,崽子!", - "3": "咱们就是一帮对别人的宝可梦\n比较感兴趣的哥们和姐们!", - "4": "别装B了,你有我们拽吗,老弟?", - "5": "骷髅队在此!没钱住房子!\n天天找乐子!青春混到死!" - }, - "victory": { - "1": "哈?这就完了?", - "2": "该逃跑了YO!闪一边去YO!", - "3": "你这种弱鸡宝可梦反正我们也不要!", - "4": "啥!? 这小屁孩也太牛B了!", - "5": "MAN!我能说什么,\n我的人生比宝可梦还烂。" - } - }, - "plumeria": { - "encounter": { - "1": " …哼嗯,你看起来也没啥特别的。", - "2": "这帮呆子对付你也花了太长时间了吧……", - "3": "要是惹了骷髅队的人!我就不和你开玩笑了!" - }, - "victory": { - "1": "哼嗯!你很强,我承认。", - "2": "哼,你是挺强的。现在我知道\n为啥那帮手下要花那么久对付一个小孩了。", - "3": "哼嗯!看来我得承认我输了。" - } - }, - "macro_grunt": { - "encounter": { - "1": "你的对战生涯到此为止了。", - "2": "你是一名训练师吧\n你没有干涉我们工作的权力!", - "3": "我是马洛科蒙集团的,要买马洛科蒙人寿保险吗。" - }, - "victory": { - "1": "除了礼貌地撤退我似乎别无选择…", - "2": "没法留住我的零花钱了,我又要财政赤字了…", - "3": "没人能比马洛科蒙集团的我们工作更卷!" - } - }, - "oleana": { - "encounter": { - "1": "我不会让你方案洛兹先生的计划!", - "2": "看来你打倒了所有我安排的训练师,本身也没对他们有啥期待…", - "3": "为了总裁!我不会输的!" - }, - "victory": { - "1": "*叹气*我赢不了。\n奥利薇,你真是个没用的女人", - "2": "呃啊!不可饶恕...我在想什么。\n走到这里的训练师果然不会轻易屈服!", - "3": "*叹气*奥利薇累累了……" - } - }, - "rocket_boss_giovanni_1": { - "encounter": { - "1": "我不得不说,能来到这里,你的确很不简单!" - }, - "victory": { - "1": "什么!这不可能!" - }, - "defeat": { - "1": "记住我的话。无法衡量自己的力量,说明你还是个孩子。" - } - }, - "rocket_boss_giovanni_2": { - "encounter": { - "1": "我的老伙计还需要我…你要挡我的路吗?" - }, - "victory": { - "1": "这怎么可能…?\n火箭队的梦想…就这么成为泡影了…" - }, - "defeat": { - "1": "火箭队会重生,而我会统治世界!" - } - }, - "magma_boss_maxie_1": { - "encounter": { - "1": "我会亲手埋葬你,希望你能喜欢!" - }, - "victory": { - "1": "啊!你…很厉害…我落后了…一点…" - }, - "defeat": { - "1": "熔岩队必胜!" - } - }, - "magma_boss_maxie_2": { - "encounter": { - "1": "你是我实现目标最后的障碍。\n准备好迎接我最强的一击吧!哈哈哈哈!" - }, - "victory": { - "1": "这…这不…呃" - }, - "defeat": { - "1": "现在…我要把这个星球变成人类的理想国度!" - } - }, - "aqua_boss_archie_1": { - "encounter": { - "1": "我是海洋队的老大,所以,你的路大概走到头了。" - }, - "victory": { - "1": "下次再见吧。我会记住你的脸的。" - }, - "defeat": { - "1": "天才!我的队伍不会再退缩了!" - } - }, - "aqua_boss_archie_2": { - "encounter": { - "1": "我等这一天很久了。\n这就是我的真实力量!" - }, - "victory": { - "1": "果然很强……啊!" - }, - "defeat": { - "1": "我会让这世界上的一切回归到最初的纯净状态!!" - } - }, - "galactic_boss_cyrus_1": { - "encounter": { - "1": "但在这之前,让我见识见识你那敢向银河队叫板的实力吧。" - }, - "victory": { - "1": "有意思,简直太有意思了。" - }, - "defeat": { - "1": "我要创造我的新世界…" - } - }, - "galactic_boss_cyrus_2": { - "encounter": { - "1": "是啊,我和你还真是有缘呢。\n不过,这段孽缘…就让我在此斩断吧!" - }, - "victory": { - "1": "怎么可能!怎么可能!怎么可能!" - }, - "defeat": { - "1": "永别了。" - } - }, - "plasma_boss_ghetsis_1": { - "encounter": { - "1": "无论是谁做了什么!都无法阻止我!" - }, - "victory": { - "1": "怎么回事?我可是建立了等离子队的完美的人啊!\n是要改变世界的完美的统治者!" - }, - "defeat": { - "1": "我是坐拥世界的完美统治者!哇哈哈哈!" - } - }, - "plasma_boss_ghetsis_2": { - "encounter": { - "1": "来吧!让我看看你彻底绝望时的那张脸!" - }, - "victory": { - "1": "不!我的伟大目标!我要完全支配世界啊!" - }, - "defeat": { - "1": "酋雷姆!融合吧!" - } - }, - "flare_boss_lysandre_1": { - "encounter": { - "1": "你想要阻止我?在对战中展示给我看吧!" - }, - "victory": { - "1": "看来你的确是想要阻止我。但是,先等一下。" - }, - "defeat": { - "1": "宝可梦…不该存在。" - } - }, - "flare_boss_lysandre_2": { - "encounter": { - "1": "你我的未来…究竟哪个才正确,\n就让我们来问问各自的宝可梦吧!" - }, - "victory": { - "1": "哇啊啊啊!" - }, - "defeat": { - "1": "没有远见的蠢货会继续玷污这个美丽的世界。" - } - }, - "aether_boss_lusamine_1": { - "encounter": { - "1": "你吓到我可爱的异兽了!我要让你先闭嘴!" - }, - "victory": { - "1": "你…你怎么这么不听话!" - }, - "defeat": { - "1": "哼嗯…" - } - }, - "aether_boss_lusamine_2": { - "encounter": { - "1": "为什么你要一直妨碍我!\n我受够你了,完完全全受够了! \n$不用说废话了…有了虚吾伊德的力量。\n我会让你明白,你来这里是有多么错误!" - }, - "victory": { - "1": "呃呃啊啊啊啊呜呜呜啊啊!" - }, - "defeat": { - "1": "我只要和我可爱的异兽在一起就好了!你们怎么样都无所谓了!" - } - }, - "skull_boss_guzma_1": { - "encounter": { - "1": "摧毁,摧毁,\n不管摧毁几次也从不手软\n$惹人厌的古兹马大爷在此。" - }, - "victory": { - "1": "切,我一定要找时间干掉你!" - }, - "defeat": { - "1": "大老远跑来就这,昂?" - } - }, - "skull_boss_guzma_2": { - "encounter": { - "1": "不管谁与我作对,我都会干掉他们!\n$这就是大坏蛋古兹马的全部!" - }, - "victory": { - "1": "古兹马!!你在干什么啊!!!" - }, - "defeat": { - "1": "你们真够蠢的!" - } - }, - "macro_boss_rose_1": { - "encounter": { - "1": "我必须为所有人提供无限的能源,实现繁荣。$这是我的目的,我的责任,我的使命!" - }, - "victory": { - "1": "你还是没有明白,训练师\n$我们…不,我要推动历史的进程啊!" - }, - "defeat": { - "1": "你完全不理解!" - } - }, - "macro_boss_rose_2": { - "encounter": { - "1": "我致力于解决伽勒尔的能源问题\n——当然也是全世界的能源问题。\n$我的经验与成果,造就了马洛科蒙集团,证明了我的正确与成功!\n$就算输了,我也不会改变主意的……" - }, - "victory": { - "1": "我都忘记宝可梦对战的魅力了!我太久没有着手对战了…\n$这的确让人很满足,我接受我的失败!" - }, - "defeat": { - "1": "我承认我做的事情非常渗人,我也不指望你能理解。\n$但我必须为伽勒尔地区提供无限的能源,确保永久的繁荣。" - } - }, - "brock": { - "encounter": { - "1": "我对岩石属性宝可梦的专精会击败你!来吧!", - "2": "我磐石般的意志将压倒你!", - "3": "让我展示给你看看,我宝可梦真正的力量!" - }, - "victory": { - "1": "你宝可梦的力量战胜了我坚如磐石的防御!", - "2": "世界很大!很高兴有机会和你战斗。", - "3": "也许我应该回去追寻我成为宝可梦饲养员的梦想……" - }, - "defeat": { - "1": "最好的进攻就是坚固的防守!$那是我做事的方式!", - "2": "下次来和我一起研究岩石属性,$更好地了解如何与它们对战!", - "3": "哈哈,我在各地的旅行有所回报了!" - } - }, - "misty": { - "encounter": { - "1": "我的战策就是使用水属性宝可梦全面进攻!", - "2": "嗨,我会让你见识我的水属性宝可梦的力量!", - "3": "我的梦想是踏上旅程,与强大的训练师战斗……$你能满足我吗?" - }, - "victory": { - "1": "你真的很强……我承认,你有技术的……", - "2": "哼……你知道你只是运气好,对吧?!", - "3": "哇,你太过分了!不敢相信你打败我了!" - }, - "defeat": { - "1": "强大的小霞对你来说,太过分了吗?", - "2": "我希望你看到了我宝可梦优雅的游泳技巧!", - "3": "你的宝可梦无法匹敌我的心腹和骄傲!" - } - }, - "lt_surge": { - "encounter": { - "1": "我的电属性宝可梦在战争中救了我!$我来给你展示一下!", - "2": "立正!我要电到你投降!", - "3": "我会像对待敌军一样,狠狠电你!" - }, - "victory": { - "1": "哇!你的队伍有真家伙,小子!", - "2": "啊啊,你很强!连我的电击技巧都输给了你。", - "3": "这失败真是把我给电麻了!" - }, - "defeat": { - "1": "哦耶!我的电属性宝可梦是世界第一!", - "2": "哈哈哈!真是一场电动人心的战斗,小子!", - "3": "宝可梦对战等于战争,$我向你展示了军队中的格斗技巧!" - } - }, - "erika": { - "encounter": { - "1": "啊,这里天气真好…$哦,对战?那好吧。", - "2": "我在宝可梦对战上的造诣,$可以与我的插花技巧相媲美。", - "3": "哦,希望我宝可梦的宜人香气\n不会再让我睡着…", - "4": "看看花园里的花朵,如此令人心旷神怡。" - }, - "victory": { - "1": "哦!我认输啦~", - "2": "这场比赛非常愉快。", - "3": "啊,看来我输了…", - "4": "哦,我的天哪。" - }, - "defeat": { - "1": "我怕我会打瞌睡…", - "2": "哦,我天。看来我的草属性宝可梦击败了你。", - "3": "那场战斗是如此令人心旷神怡。", - "4": "哦…这就完啦?" - } - }, - "janine": { - "encounter": { - "1": "我正在掌握毒属性攻击的艺术。$今天我来和你过过招!", - "2": "父亲相信我能独当一面。$我来证明他说的对!", - "3": "我的忍术,仅次于我的父亲!$你能跟的上吗?" - }, - "victory": { - "1": "就算现在,我仍然需要继续训练…我明白了。", - "2": "你的战斗技巧,超过了我。", - "3": "我要好好努力提高我的技术。" - }, - "defeat": { - "1": "呵呵…毒液耗尽了你所有的力量。", - "2": "哈!你根本无法抵挡我卓越的忍技!", - "3": "我没有辜负父亲对我的信任。" - } - }, - "sabrina": { - "encounter": { - "1": "我的超能力预见了你的到来!", - "2": "我不喜欢战斗,但如果你想,$我会展示我的实力!", - "3": "我能感觉到你的雄心壮志。$我倒要看看你是不是虚有其表。" - }, - "victory": { - "1": "你的力量……远远超出了我的预知……", - "2": "我没有准确预测到你的实力。", - "3": "即使我强大的超能力也无法感知到你这样强大的人。" - }, - "defeat": { - "1": "这场胜利……和我看到的未来一样啊!", - "2": "也许我预感到有强大实力的人,是另一个……", - "3": "在你奋不顾身投入战斗之前,\n磨练你的能力。$如果你这样做,你才未来可期……" - } - }, - "blaine": { - "encounter": { - "1": "哈!希望你带了烧伤治疗药!", - "2": "我火热的宝可梦将所有挑战者都焚烧殆尽!", - "3": "准备好玩火吧!" - }, - "victory": { - "1": "我已经焚烧殆尽了!甚至连灰烬都没有留下!", - "2": "我没有把火焰煽得足够高吗?", - "3": "我燃尽了……但这让我进步的动力燃烧得更旺了!" - }, - "defeat": { - "1": "我的熊熊烈火无法被扑灭!", - "2": "我的宝可梦因这次胜利而变得更加强大!", - "3": "哈!我的激情燃得比你的更热烈!" - } - }, - "giovanni": { - "encounter": { - "1": "我,火箭队的领袖,\n会让你的世界感受到痛苦!", - "2": "我在这里的训练在我再次面对老朋友之前至关重要。", - "3": "我认为你还没有准备好迎接你即将经历的失败!" - }, - "victory": { - "1": "什么!我输了?! 我没什么可和你说的!", - "2": "哼……你永远无法理解我希望实现的目标。", - "3": "这次失败只是暂时的。$我将找准时机,让火箭队浴火重生。" - }, - "defeat": { - "1": "不知自己几斤几两,\n说明你仍然只是一个孩子。", - "2": "不要再试图干涉我。", - "3": "我希望你明白挑战我是多么愚蠢。" - } - }, - "roxanne": { - "encounter": { - "1": "您能否展示一下您是如何战斗的么?", - "2": "你可以和更多训练师战斗来学到很多东西。", - "3": "哦,被你抓到我正在用功了~$你想战斗吗?" - }, - "victory": { - "1": "哦,看来我输了。$我明白了。", - "2": "看来我在战斗方面还有更多东西要学。", - "3": "我会把今天在这里学到的东西铭记于心。" - }, - "defeat": { - "1": "从我们的对战中,我学到了很多。$希望你也是。", - "2": "我期待再次与你战斗。$希望你能运用在此学到的东西。", - "3": "我凭借我所学到的一切赢得了胜利。" - } - }, - "brawly": { - "encounter": { - "1": "哦,伙计,挑战者!$让我看看你的能耐!", - "2": "你看起来很厉害嘛。$来对战吧!", - "3": "是时候掀起风暴了!$我们上吧!" - }, - "victory": { - "1": "哦哇,你把我冲走了!", - "2": "你驾驭了我的海浪,把我打败了!", - "3": "我觉得我就像是在武斗洞窟里迷路了!" - }, - "defeat": { - "1": "哈哈,我驾驭了大浪!$有时间再挑战我吧。", - "2": "再和我一起冲浪吧!", - "3": "就像潮水的涨落,\n我希望你也能再来挑战我。" - } - }, - "wattson": { - "encounter": { - "1": "是时候被电击了!$哈哈哈!", - "2": "我要让火星子飞蹦!$哈哈哈!", - "3": "我希望你带了麻痹药!$哇哈哈哈!" - }, - "victory": { - "1": "看来我的电量用完了!$哇哈哈哈!", - "2": "你完全接地了是吧!$哇哈哈哈!", - "3": "谢谢你给我电了一下!$哇哈哈哈!" - }, - "defeat": { - "1": "电充充满,有时间再挑战我吧!$哇哈哈哈!", - "2": "我希望你觉得我们的战斗激情似电!$哇哈哈哈!", - "3": "你没想到我赢了吧?$哇哈哈哈!" - } - }, - "flannery": { - "encounter": { - "1": "很高兴见到你!等等,不对……$我要粉碎你!", - "2": "我才当道馆主没多久,\n但我会让你灰飞烟灭!", - "3": "是时候展示爷爷教给我的招式了!来对战吧!" - }, - "victory": { - "1": "你让我想起了我的爷爷……$难怪我输了。", - "2": "我是不是太努力了?$我应该放松,不能太上头了。", - "3": "失败才不会呛到我。$是时候重新点燃训练了!" - }, - "defeat": { - "1": "我希望我让祖父感到骄傲了……$有时间我们再战斗吧。", - "2": "我……我简直不敢相信我赢了!$按照自己的方式做事奏效了!", - "3": "早点用炽热的招式再来交手吧!" - } - }, - "norman": { - "encounter": { - "1": "我没想到你能一路来到这里。$我们来对战吧。", - "2": "作为道馆主,我会尽一切努力赢得胜利。$我们开始吧!", - "3": "你最好全力以赴。$对战的时候到了!" - }, - "victory": { - "1": "我输给了你……?$但规则就是规则。", - "2": "难道我不该从城都搬家吗……?", - "3": "我不敢相信。$这是一场好对战。" - }, - "defeat": { - "1": "我们都尽力了。$希望我们不久之后能再对战。", - "2": "你应该尝试挑战我的孩子。$可能会有一些收获!", - "3": "谢谢你精彩的战斗。$下次好运。" - } - }, - "winona": { - "encounter": { - "1": "我一直在天空中翱翔寻找猎物…$而你就是我的目标!", - "2": "不管战况如何,我都会和我的飞行宝可梦$以优雅的姿态获胜。来战斗吧!", - "3": "我希望你不怕高。$我们一起升上高空吧!" - }, - "victory": { - "1": "你是我见过的第一位比我更有风度的训练师。$打的非常出色。", - "2": "哦,我的飞行系宝可梦都已经坠落了!$好吧。", - "3": "尽管我倒下了,我的宝可梦将继续翱翔!" - }, - "defeat": { - "1": "我与我的飞行系宝可梦,\n将永远优雅地起舞!", - "2": "我希望你喜欢我们的演出。$我们优雅的舞蹈已经落幕。", - "3": "你愿意再来观看我们优雅的编舞吗?" - } - }, - "tate": { - "encounter": { - "1": "嘿嘿嘿…$看到我没和妹妹在一起,很惊讶么?", - "2": "我可以读懂你在想什么…$你想要战斗!", - "3": "你如何击败一个…$读懂你一举一动的人?" - }, - "victory": { - "1": "赢不了啊…$我想小南了…", - "2": "你和宝可梦之间的联系比我们更强。", - "3": "如果我和小南联手,我们会赢的。$我们可以了解彼此的想法!" - }, - "defeat": { - "1": "我和我的宝可梦无与伦比!", - "2": "如果你连我都打不过,\n你肯定也打不过小南。", - "3": "这多亏了我和小南的严格训练。$我可以与宝可梦一心同体。" - } - }, - "liza": { - "encounter": { - "1": "呵呵呵…$看到我没和哥哥一起,很惊讶吗?", - "2": "我可以读懂你渴望什么…$你想战斗,不是吗?", - "3": "你如何击败一个…$与宝可梦们一心同体的人?" - }, - "victory": { - "1": "赢不了啊…$我想小枫了…", - "2": "你和宝可梦之间的联系…$比我强。", - "3": "如果我和小枫在一起,我们会赢的。$我们甚至可以接上彼此的话!" - }, - "defeat": { - "1": "我和我的宝可梦势不可挡。", - "2": "如果你连我都打不过,\n你肯定也打不过小枫。", - "3": "这多亏了我和小枫的严格训练。$我可以与我的宝可梦一心同体。" - } - }, - "juan": { - "encounter": { - "1": "别害羞啊。$我们来战斗吧!", - "2": "啊哈哈哈,敬请期待\n我和水属性宝可梦的盛大演出!", - "3": "我就是正在逼近的风暴!$你能经受住考验吗?", - "4": "请你见证我们的表演。$由我和宝可梦共同创造的宏伟水之幻境!" - }, - "victory": { - "1": "你可能是一个能挑战米可利的天才!", - "2": "我专注于优雅,而你刻苦锻炼。$你能击败我是很正常的。", - "3": "啊哈哈哈!$好吧,这次你赢了。", - "4": "从你身上,我感受到了技巧的光辉,\n它将战胜一切。" - }, - "defeat": { - "1": "宝可梦和我创造的水之幻境,让我取得了胜利。", - "2": "啊哈哈哈,我赢了,你输了。", - "3": "要我把我的服装借给你吗?\n可能能帮到你对战啊!$啊哈哈哈,我开玩笑的!", - "4": "我是赢家!也就是说,你输了。" - } - }, - "crasher_wake": { - "encounter": { - "1": "极限! 极限! 看好了!$极限假面…就此…登场!", - "2": "极限! 极限! 极限假面!", - "3": "我是滔滔巨浪,将你冲走!" - }, - "victory": { - "1": "我真是笑得合不拢嘴啊!$哈哈哈!那真是太有趣了!", - "2": "呼哇!结束收尾了!$我该怎么说呢……$我还想再对战!我还想再继续战斗!", - "3": "啊啊啊啊啊!?" - }, - "defeat": { - "1": "耶!就是这样!", - "2": "我赢了,但我还想要更多!\n我还想再更多地战斗!", - "3": "再见!" - } - }, - "falkner": { - "encounter": { - "1": "我将向你展示华丽的飞行宝可梦真正的力量!", - "2": "风啊,伴我同行!", - "3": "爸爸!我希望你能在空中注视着我的战斗!" - }, - "victory": { - "1": "明白了……我会礼貌地退场。", - "2": "输了就是输了。你确实很强大。", - "3": "…行吧! 嗯, 我输了。" - }, - "defeat": { - "1": "爸爸!我用你珍爱的飞行宝可梦赢了……", - "2": "飞行系宝可梦才是最强的!", - "3": "感觉我正在追赶上我的父亲!" - } - }, - "nessa": { - "encounter": { - "1": "无论你的小脑瓜子在搞什么阴谋诡计,$我和我的搭档都会确保它石沉大海。", - "2": "我来这里可不是为了闲聊,\n而是为了赢!", - "3": "这是我的宝可梦给你的一点小礼物……\n我希望你能接受!" - }, - "victory": { - "1": "你和你的宝可梦太过分了……", - "2": "怎么……?这怎么可能?!", - "3": "我完全被冲走了!" - }, - "defeat": { - "1": "汹涌的海浪再次袭来!", - "2": "是时候乘风破浪,取得胜利了!", - "3": "诶嘿嘿!" - } - }, - "melony": { - "encounter": { - "1": "我不会手下留情!", - "2": "好吧,我想我们应该开始了。", - "3": "我会把你冻得结结实实的!" - }, - "victory": { - "1": "你……你可厉害了,是不是?", - "2": "如果你找到玛瓜,一定要好好教训他,好吗?", - "3": "你的破冰方式有点过于直接了呢……" - }, - "defeat": { - "1": "现在你知道战斗有多残酷了吧?", - "2": "嘿!看来我又赢了!", - "3": "你是在保留实力吗?" - } - }, - "marlon": { - "encounter": { - "1": "你看起来很强!来吧!让我们开始吧!", - "2": "我的强大像大海一样无边无际。$你会被我冲走,绝对的。", - "3": "哦豁,由我来面对你!这可不得了咯!" - }, - "victory": { - "1": "你太厉害了!\n你培养了一些非常强大的宝可梦啊,$你已经掌握了训练师的精髓!", - "2": "你不仅仅是看起来,\n你是真的强,真的!$呃,我也被冲走了!", - "3": "你像凶猛的波浪一样强壮!" - }, - "defeat": { - "1": "你很强,但这还不足以动摇大海,懂?", - "2": "嘻!看来我又赢了!", - "3": "甜蜜的胜利!" - } - }, - "shauntal": { - "encounter": { - "1": "打扰了。你是挑战者,对吗?$我是四天王的幽灵系宝可梦使用者,$婉龙,我将是你的对手。", - "2": "我非常喜欢描写来到这里的训练师,\n以及他们训练的宝可梦。$我可以用你和你的宝可梦作为主题吗?", - "3": "每个与宝可梦相处的人都有故事要讲。$接下来要讲的故事是怎样的呢?" - }, - "victory": { - "1": "哇。我惊呆了!", - "2": "对…对不起!我必须先向我的宝可梦道歉……$都是因为我让你们有了不好的经历,真的很抱歉!", - "3": "你要知道,我仍然是四天王之一!" - }, - "defeat": { - "1": "额呵呵。", - "2": "给了我下一部小说的绝佳素材!", - "3": "就这样,又一篇故事来到尾声……" - } - }, - "marshal": { - "encounter": { - "1": "我的师傅,阿戴克,\n看到了你作为训练师的潜力,$对你很有兴趣。$我要来考验你——挖掘你力量的极限。\n丹田发力!", - "2": "胜利,决定性的胜利,\n正是我所求!挑战者,我来了!", - "3": "在我的心中,我寻求着成为战士的力量,\n克服自身的所有弱点!$以我的信念,取胜!" - }, - "victory": { - "1": "呼!干得好!", - "2": "不要停止战斗,追求更高的目标!", - "3": "你和你宝可梦展现的力量\n给我留下了深刻的印象……" - }, - "defeat": { - "1": "嗯…", - "2": "这真是场好战斗。", - "3": "哈啊!哈啊!嗨呀啊!" - } - }, - "cheren": { - "encounter": { - "1": "你让我想起了一位老朋友。$这让我对这场宝可梦战斗感到兴奋!", - "2": "不考虑清楚这一点,\n宝可梦对战就没有了意义。$这就是失去了和宝可梦一同战斗的意义。", - "3": "我的名字是黑连!我是道馆馆主,\n也是老师!$很高兴认识你。" - }, - "victory": { - "1": "谢谢……我又能发现自己的不足了。", - "2": "谢谢…接近理想的道路…我好像隐约看到了。", - "3": "嗯……这值得思考。" - }, - "defeat": { - "1": "作为道馆馆主,我要成为你要跨越的壁垒!", - "2": "好吧!", - "3": "正因为有宝可梦,我们才能走到这里。$为什么宝可梦会帮助我们,\n这个恐怕不仅是宝可梦与训练家…$而是生命与生命之间的问题。" - } - }, - "chili": { - "encounter": { - "1": "咿呀!是时候玩火了!!我是三兄弟中最强的!", - "2": "嗒哒!如火似焰的伯特——就是我\n——你接下来的对手!", - "3": "我将向你展示,\n我和我炽热的火系宝可梦的能耐!" - }, - "victory": { - "1": "被你干掉了。我……燃尽了……", - "2": "哇吼!你燃起来了!", - "3": "啊!被你干碎了!" - }, - "defeat": { - "1": "我燃起来啦!和我玩儿,你就会被烫伤!", - "2": "你要是玩儿火,就会被烫伤!", - "3": "我说,拜托,\n你的对手是我,没机会赢的!" - } - }, - "cilan": { - "encounter": { - "1": "无关个人情感…也不会有艰难的感受…$我和我的草属性宝可梦会…$呃…不管什么样的对手我们都会应战的。", - "2": "所以,呃,如果你愿意的话,我会,\n呃,尽我所能做好,呃,你知道的,你的对手。", - "3": "好吧……所以,我是天桐,\n我喜欢草属性宝可梦。" - }, - "victory": { - "1": "呃……已经结束了吗?", - "2": "…真是太意外了。你真…强。$看起来就算是伯特或寇恩都赢不了你…", - "3": "…嗯。看起来我来的…不是时候?" - }, - "defeat": { - "1": "哈?我赢了?", - "2": "我想…$我想我赢了,因为我一直在和我的兄弟伯特和寇恩竞争,\n我们都变得更强了。", - "3": "…这…这是一次非常吓人的经历呢…" - } - }, - "roark": { - "encounter": { - "1": "我需要看看你作为训练师的潜力。$还有,我要看看与你并肩作战的宝可梦的坚韧!", - "2": "来吧!这些是我的岩石系宝可梦,我的骄傲!", - "3": "岩石属性宝可梦就是最强的!", - "4": "我要看看你作为训练师的潜力。$还要看看与你并肩作战的宝可梦的坚韧!" - }, - "victory": { - "1": "什么?不可能!我强化的宝可梦们!", - "2": "……我大脑过载了。$下次邀请你参加地下的化石挖掘比赛。", - "3": "有你这种技术,赢得胜利是很正常的。", - "4": "什么?!连这也不够?", - "5": "我搞砸了。" - }, - "defeat": { - "1": "看?我为我的摇滚战斗风格感到骄傲!", - "2": "谢谢!这场战斗给了我自信,$我感觉能够打败我父亲了!", - "3": "我感觉就像我砸穿了一块顽石!" - } - }, - "morty": { - "encounter": { - "1": "只要我再多努力一点,我就能看到我遇到传说中的宝可梦的未来!$你会帮助我达到那个水平!", - "2": "据说,彩虹色的宝可梦会\n出现在真正强大的训练师面前。 $我一直相信着这个美丽的传说,\n所以,从出生开始,\n就在这里进行着秘密的修行。$因为这样,其他人看不到的东西\n我也能够看得到…$我看到的,是那个将传说中的宝可梦\n召唤到这片大地上的人的影子。$我一直相信,那就是我自己!\n希望你也能助我一臂之力!", - "3": "无论你相信还是不相信,神秘的力量确实存在。", - "4": "你可以见证我训练的成果。", - "5": "你必须让你与宝可梦的灵魂合二为一。你能做到吗?", - "6": "嘿,你想成为我训练的一部分吗?" - }, - "victory": { - "1": "我还不够好……", - "2": "我明白了…你的旅程…去了遥远的地方,你见过的比我多得多。$我羡慕你…", - "3": "这怎么可能……", - "4": "我认为我们的潜力没什么不同。$但是,我觉得你并不简单,似乎还有什么……", - "5": "我想我需要更多的训练。", - "6": "那太遗憾了" - }, - "defeat": { - "1": "我又向前迈进了一步。", - "2": "呵呵呵……", - "3": "什…么?!那还不够?", - "4": "我感觉就像我砸穿了一块顽石!", - "5": "哈哈哈啊!", - "6": "我知道我会赢!" - } - }, - "crispin": { - "encounter": { - "1": "我想赢,所以接下来我正要赢!", - "2": "我想对战就对战!懂吗!就应该这样!" - }, - "victory": { - "1": "我想赢……但我还是输了!", - "2": "我输了……因为我赢不了!" - }, - "defeat": { - "1": "嘿,等一下。我是不是赢了?$我觉得我赢了!太满足了!", - "2": "哇哦!那太棒了!" - } - }, - "amarys": { - "encounter": { - "1": "我想帮助某个人。因此,我不能输。$…我们的战斗现在开始。" - }, - "victory": { - "1": "我还不够,我明白了。" - }, - "defeat": { - "1": "胜利属于我。打得好。" - } - }, - "lacey": { - "encounter": { - "1": "我将用我平时的队伍\n作为四天王的一员面对你。" - }, - "victory": { - "1": "打得真好呀~" - }, - "defeat": { - "1": "让我们为你宝可梦的努力给予热烈的掌声!" - } - }, - "drayton": { - "encounter": { - "1": "哥们,我喜欢椅子。\n你喜欢椅子吗?简直是救星。$我不明白为什么大家不一直坐着。\n站着多累人!" - }, - "victory": { - "1": "我早该想到的!" - }, - "defeat": { - "1": "嘿嘿嘿!别介意我,\n我只是在这里小赢一下。$如果你不开心,我懂,\n但别因为我对乌栗发火,OK?" - } - }, - "ramos": { - "encounter": { - "1": "我用那些强壮的植物\n盖出来的游乐场精彩吗?$它们的力量象征着我这个园丁兼道馆馆主的实力,\n你真的确定能够与之抗衡吗?" - }, - "victory": { - "1": "你信任你的宝可梦,\n它们也信任你…不错的战斗,小豆芽。" - }, - "defeat": { - "1": "呵呵呵…确实,\n脆弱的小草甚至能穿透混凝土。" - } - }, - "viola": { - "encounter": { - "1": "败阵时的后悔,胜利的瞬间…$都是最棒的影象!很好呀,很好呀!$那么来吧!", - "2": "我的镜头总会聚焦在胜利上,\n我不会让任何事情破坏这个画面!" - }, - "victory": { - "1": "你和你的宝可梦向我展示了一个全新的镜头机位!\n很好呀,很好呀!", - "2": "你通过镜头看到的世界,\n和你与宝可梦并肩作战时看到的世界…$视角不同,即使是同一个世界看起来也完全不同。" - }, - "defeat": { - "1": "我胜利那一刻的照片,\n将是一个真正的赢家,对吧!", - "2": "是的!我拍了些很棒的照片!" - } - }, - "candice": { - "encounter": { - "1": "向小菘我挑战吗?好啊!\n我就是在等待强者$但是我也气势高昂,很强哦?", - "2": "宝可梦也好,时尚也好,恋爱也好,\n无论做什么都气势高昂!$就说到这儿吧,让你见识一下我的气势,\n要做好觉悟哦!" - }, - "victory": { - "1": "好厉害!我有点尊敬你了。", - "2": "好厉害!我有点尊敬你了!$嗯,感觉是被你的气势给压倒了。" - }, - "defeat": { - "1": "你的气势我看到了,但我还是不会输的!", - "2": "怎么样?小菘我的气势!\n宝可梦们的气势满满哦!" - } - }, - "gardenia": { - "encounter": { - "1": "你身上有一种胜利的气息。\n那么不管怎样,$这应该会是场有趣的战斗。\n让我们对战吧!" - }, - "victory": { - "1": "太棒了!你可擅长对战了,不是吗?" - }, - "defeat": { - "1": "太好了!我的宝可梦和我都很棒!" - } - }, - "aaron": { - "encounter": { - "1": "好的!让我来接受你的挑战!" - }, - "victory": { - "1": "战斗是一件深刻而复杂的事情……" - }, - "defeat": { - "1": "战胜一位四天王并不容易。" - } - }, - "cress": { - "encounter": { - "1": "没!错!你必须面对\n与我和我高贵的水属性的战斗!" - }, - "victory": { - "1": "输了?我?我不敢相信。" - }, - "defeat": { - "1": "当你的对手是我时,这是必然的结果。" - } - }, - "allister": { - "encounter": { - "1": "我是欧尼奥。$我…我来了……" - }, - "victory": { - "1": "我差点被吓得丢了面具…那真是…$哇。我可以看清你真正的实力。" - }, - "defeat": { - "1": "这真是太棒了!" - } - }, - "clay": { - "encounter": { - "1": "咳咳! 让我好等,不是吗,孩子?$好吧,是时候看看你能做到什么了!" - }, - "victory": { - "1": "真是的……我先说好,\n我可没有手下留情。" - }, - "defeat": { - "1": "最重要的是输掉的时候该怎么办。$只要你能在失败中找到教训,\n就能够不断地成长!" - } - }, - "kofu": { - "encounter": { - "1": "我会给你上一整道水系宝可梦大餐!\n但别真吃了它们!" - }, - "victory": { - "1": "吃了吗!你真是活力又新鲜啊,\n不是吗!$就是有点太鲜活了!" - }, - "defeat": { - "1": "你要再来找我,听见了吗?" - } - }, - "tulip": { - "encounter": { - "1": "请让我运用我的化妆技巧,$让你可爱的小宝可梦变得更美丽!" - }, - "victory": { - "1": "你妆点的力量宛如魔法加固,\n完全冲洗不掉啊。" - }, - "defeat": { - "1": "你知道吗,在我这行,\n那些没天赋的人往往会很快消失,$再也不会被提起。" - } - }, - "sidney": { - "encounter": { - "1": "你给我的印象不错,\n我猜这会是一场精彩的对战。$很棒!看起来真的很棒!$你和我,让我们享受一场\n只能在这里上演的战斗吧!" - }, - "victory": { - "1": "嗯,你觉得怎样?我输了!\n嗯,不过这很有趣,所以无所谓啊。" - }, - "defeat": { - "1": "别介意,OK?" - } - }, - "phoebe": { - "encounter": { - "1": "过去我在修行时得到了\n能与幽灵宝可梦亲密交流的能力。$没错,我和宝可梦之间\n有著强烈的羁绊。$那么,来试试看你有没有能力\n伤到我的宝可梦吧!" - }, - "victory": { - "1": "哦,天呀。我输了。" - }, - "defeat": { - "1": "我期待着下次再和你战斗!" - } - }, - "glacia": { - "encounter": { - "1": "我在这儿见到的尽是些\n弱不禁风的训练家和宝可梦。$你又如何呢?如果你能让我不得不用\n上全力的话就再好不过了!" - }, - "victory": { - "1": "你和你的宝可梦…\n你们的灵魂燃烧得多么热烈啊!$这股激烈的热能仿佛能征服一切。\n$难怪我的冰属性技巧也奈何不了你了。" - }, - "defeat": { - "1": "一场充满激情的战斗,确实。" - } - }, - "drake": { - "encounter": { - "1": "对于我们这些将宝可梦视为\n同伴一同战斗的训练家来说,$你知道怎样才能赢得胜利吗?\n你知道获得胜利的条件吗?$如果你不知道,\n那么你永远也无法战胜我!" - }, - "victory": { - "1": "干得漂亮,就是这样。" - }, - "defeat": { - "1": "我在这场战斗中全力以赴了!" - } - }, - "wallace": { - "encounter": { - "1": "你的气质变了,\n我能感觉到这一点。$现在,把你和你的宝可梦\n的力量展现给我看吧。$作为回礼,就由我和我的宝可梦\n演出一场水之幻影吧!" - }, - "victory": { - "1": "精彩。此刻,我能从你身上感觉到\n身为宝可梦训练家的可靠与高贵。$我真荣幸能遇到你和你的宝可梦。" - }, - "defeat": { - "1": "伟大的幻影!" - } - }, - "lorelei": { - "encounter": { - "1": "只要能让我用冰属性宝可梦,\n就绝对没人能赢得过我!\n能冻住对方可是很厉害的哦!$因为如果被冻住,你的宝可梦就无法动弹了!\n啊哈哈!你做好觉悟了吧!" - }, - "victory": { - "1": "你怎么敢!" - }, - "defeat": { - "1": "一旦你被冻结,你就什么都做不了。" - } - }, - "will": { - "encounter": { - "1": "我曾经环游世界,\n日以继夜地做着超能力宝可梦的修行之旅。$我会不断变强!没理由会在这里输掉!" - }, - "victory": { - "1": "……不会吧……" - }, - "defeat": { - "1": "就差一点。\n我想知道你缺少了什么。" - } - }, - "malva": { - "encounter": { - "1": "我的内心可是一直燃烧着呢。$燃烧着对你的怒火!" - }, - "victory": { - "1": "挑战者出色地击败了四天王之一,帕琦拉。" - }, - "defeat": { - "1": "真开心啊,能将你彻底粉碎!" - } - }, - "hala": { - "encounter": { - "1": "老哈拉让你放开嗓子!" - }, - "victory": { - "1": "我能感受到你在旅途中获得的力量。" - }, - "defeat": { - "1": "啊哈哈。多么有趣的战斗。" - } - }, - "rika": { - "encounter": { - "1": "我要对你手下留情,但……骗你的啦!$好好动脑!" - }, - "victory": { - "1": "不错,小子。" - }, - "defeat": { - "1": "啊哈哈哈哈!你真的很特别,小子!" - } - }, - "molayne": { - "encounter": { - "1": "我将队长的位置让给了我的表弟马玛内,\n但我对自己的能力很有信心。 $我的力量就像超新星一样!" - }, - "victory": { - "1": "我发现了一个有趣的训练师对手!" - }, - "defeat": { - "1": "啊哈哈。多么有趣的战斗。" - } - }, - "bruno": { - "encounter": { - "1": "我们将用势不可挡的力量磨灭你!呼哈!" - }, - "victory": { - "1": "为什么?我怎么会输?" - }, - "defeat": { - "1": "你可以随意挑战我,\n但结果永远不会改变!" - } - }, - "bugsy": { - "encounter": { - "1": "我是阿笔!\n对虫系宝可梦的熟悉不会输给任何人的!" - }, - "victory": { - "1": "哇,太棒了!\n你是个宝可梦专家!$我的研究还没有完成。\n好吧,你赢了。" - }, - "defeat": { - "1": "谢谢!多亏了我们的战斗,\n我的研究也取得了进展!" - } - }, - "koga": { - "encounter": { - "1": "哇哈哈哈哈!$宝可梦不仅仅是关于蛮力,拭目以待吧!" - }, - "victory": { - "1": "啊!你证明了自己!" - }, - "defeat": { - "1": "懂不懂要对忍者的技巧心神畏惧?" - } - }, - "bertha": { - "encounter": { - "1": "啊,让老婆婆看看你学到了什么?" - }, - "victory": { - "1": "好吧,亲爱的孩子,\n不得不说,那令人印象深刻。$你的宝可梦相信你并尽最大努力为你赢得胜利。$尽管我输了,\n我也止不住笑呢!" - }, - "defeat": { - "1": "哈哈哈!看来老婆婆我赢了!" - } - }, - "lenora": { - "encounter": { - "1": "那么,挑战者,让我来研究$你与你精心养育的宝可梦要如何战斗!" - }, - "victory": { - "1": "我关于你的理论是正确的。$你不仅仅是有天赋……你很努力!\n我向你致敬!" - }, - "defeat": { - "1": "啊哈哈!如果你输了,\n一定要分析原因,$并在下一场战斗中运用那些知识!" - } - }, - "siebold": { - "encounter": { - "1": "只要我活着,我将不断努力寻求终极美食…$以及和最强的对手战斗!" - }, - "victory": { - "1": "您的事迹,我志米铭记在心。" - }, - "defeat": { - "1": "我们的宝可梦战斗就像我灵魂的养料。\n它将让我继续前进。$这就是我将向你表示敬意的方式,\n感谢你在战斗中全力以赴!" - } - }, - "roxie": { - "encounter": { - "1": "准备好了吗!我要给你上一课!" - }, - "victory": { - "1": "够野的!你的想法比我的还要毒!" - }, - "defeat": { - "1": "嘿,拜托!认真点!\n你要加把劲啊!" - } - }, - "olivia": { - "encounter": { - "1": "没什么开场白。\n是时候和我丽姿,战斗了!" - }, - "victory": { - "1": "真的很可爱……你和你的宝可梦……" - }, - "defeat": { - "1": "嗯哼。" - } - }, - "poppy": { - "encounter": { - "1": "哦!你想和我进行宝可梦对战么?" - }, - "victory": { - "1": "呜哇?!嘛……" - }, - "defeat": { - "1": "耶!我做到了!我击~败~了~你!\n你可以来…打…复仇之战?$只要你想,随时来打复仇之战吧!" - } - }, - "agatha": { - "encounter": { - "1": "宝可梦是为战斗而生的! \n让我来告诉你什么是真正的战斗吧!" - }, - "victory": { - "1": "呵呵!你可真是了不起!" - }, - "defeat": { - "1": "额哈哈哈,真正的战斗就是该这样。" - } - }, - "flint": { - "encounter": { - "1": "希望你已经热身完毕,\n因为这里即将大爆炸!" - }, - "victory": { - "1": "不可思议!$你的动作如此火热,让我看起来温吞吞的!" - }, - "defeat": { - "1": "嗯?就这吗?\n我觉得你得再激情点。" - } - }, - "grimsley": { - "encounter": { - "1": "一无所有,\n或者,赢下所有!" - }, - "victory": { - "1": "一旦失败,\n就意味着失去一切……$下一次我要追寻胜利!" - }, - "defeat": { - "1": "如果有人赢了,\n和他对战的人就会输。" - } - }, - "caitlin": { - "encounter": { - "1": "当花儿绽开时、我便出现。\n成为你在等待的人…$你似乎同时具备实力和善意$我所寻找的是拥有卓越力量的对手…$请用出你的全力吧!" - }, - "victory": { - "1": "我和我的宝可梦学到了很多!非常感谢。" - }, - "defeat": { - "1": "我渴望以优雅的姿态取得胜利。" - } - }, - "diantha": { - "encounter": { - "1": "与你的宝可梦对战\n让你充满了未来的希望…$说真的,这让我更有活力地面对新的一天,确实如此!" - }, - "victory": { - "1": "拥有高尚灵魂的训练家和宝可梦的身姿,\n让我的心激烈地震颤…" - }, - "defeat": { - "1": "哦,太棒了!你觉得怎么样?\n我的队伍很酷吧~对吧?" - } - }, - "wikstrom": { - "encounter": { - "1": "年轻的挑战者,幸会!\n我乃是著名的钢铁之刃,公爵雁铠! $让我们开始战斗吧!预备!" - }, - "victory": { - "1": "辉煌!你与你尊贵的\n宝可梦之间的信任居然胜过了我!" - }, - "defeat": { - "1": "哦哦哦!这是怎么回事,\n我的心止不住地在震颤! $与如此有价值的对手的胜利\n让我的灵魂飞翔——我心翱翔!" - } - }, - "acerola": { - "encounter": { - "1": "对战只是找个乐子!来吧,我来会会你!" - }, - "victory": { - "1": "我……我说不出话!你是怎么做到的?!" - }, - "defeat": { - "1": "哈哈!真是吓人倒怪的胜利呀!" - } - }, - "larry_elite": { - "encounter": { - "1": "……你好,我是青木。$麻烦的是我还要兼任四天王。" - }, - "victory": { - "1": "好吧,我们翅膀下的疾风止于你这了啊…" - }, - "defeat": { - "1": "是时候和老板开会了。" - } - }, - "lance": { - "encounter": { - "1": "我一直在等你。让我来试试你有几斤几两。", - "2": "我知道你能走这么远。让我们开始吧。" - }, - "victory": { - "1": "被你拿下了啊。你太出色了!", - "2": "我从没想到会有另一个训练师打败我……$我很惊讶。" - }, - "defeat": { - "1": "就差一点。想再试一次吗?", - "2": "我没觉得你弱,别因此困扰。" - } - }, - "karen": { - "encounter": { - "1": "我是梨花,你想和我的恶属性宝可梦$来一场对决吗?", - "2": "我和你见过的那些人不一样。", - "3": "你组建了一支迷人的队伍。$我们的战斗应该会是场精彩的比赛。" - }, - "victory": { - "1": "不!我赢不了。你是怎么做到变得这么强的?", - "2": "我不会偏离我所选择的道路。", - "3": "冠军正期待与你见面。" - }, - "defeat": { - "1": "意料之中。", - "2": "嗯,还算有点意思。", - "3": "随时欢迎你来找我。" - } - }, - "milo": { - "encounter": { - "1": "看起来你显然很了解宝可梦。$这会是一场激烈的战斗!$如果我想赢,我得让我的宝可梦极巨化!" - }, - "victory": { - "1": "草的力量凋谢了…多么不可思议的挑战者!" - }, - "defeat": { - "1": "这必将让你大吃一惊。" - } - }, - "lucian": { - "encounter": { - "1": "请稍等,我正在读的书\n正要进入最精彩的部分…$英雄获得了一把神秘之剑,\n即将面临最后的考验…啊,算了。$既然你能走到这一步,\n我就不说这些了,和你战斗吧。$让我看看你是否\n能像我书中的主角一样荣耀!" - }, - "victory": { - "1": "我明白了…看来你把我逼入了绝境。" - }, - "defeat": { - "1": "我得维护我的名誉。" - } - }, - "drasna": { - "encounter": { - "1": "你很厉害吧,\n而且相当相当地厉害呢。$我很高兴,能和这样的对手交手,\n就能更好地培养宝可梦们了。" - }, - "victory": { - "1": "哎呀,就这么结束了,\n不好意思,可以的话欢迎再来。" - }, - "defeat": { - "1": "怎么会这样?" - } - }, - "kahili": { - "encounter": { - "1": "那么,既然来了……\n要不来看看今天的风更青睐谁?$是你……还是我?" - }, - "victory": { - "1": "让我这个四天王都感到沮丧,$看来你的力量货真价实。" - }, - "defeat": { - "1": "那真是一记好球!" - } - }, - "hassel": { - "encounter": { - "1": "让你亲身感受一下什么叫做猛烈的对战气息吧!" - }, - "victory": { - "1": "这次幸运之神对你微笑了,但是……$谁知道你下次还会不会这么幸运。" - }, - "defeat": { - "1": "那挺厉害的吧!" - } - }, - "blue": { - "encounter": { - "1": "能走到这里,你一定非常优秀。" - }, - "victory": { - "1": "我只输给过他,现在又是你……?$你问他是谁?哈哈哈……" - }, - "defeat": { - "1": "看吧?我的实力就是我来到这里的原因。" - } - }, - "piers": { - "encounter": { - "1": "准备好和我的队伍来个大狂欢吧!$尖钉镇,是时候嗨起来了!" - }, - "victory": { - "1": "我和我的队伍已经尽力了。$找个时间再来对战吧……" - }, - "defeat": { - "1": "我的喉咙因为呼喊而变得沙哑……$但这是一场激动人心的战斗!" - } - }, - "red": { - "encounter": { - "1": "…!" - }, - "victory": { - "1": "…?" - }, - "defeat": { - "1": "…!" - } - }, - "jasmine": { - "encounter": { - "1": "哦……你的宝可梦给人印象深刻。$我想我会享受这场战斗的。" - }, - "victory": { - "1": "你真的很强。我也得加把劲了。" - }, - "defeat": { - "1": "我从没想到会赢。" - } - }, - "lance_champion": { - "encounter": { - "1": "我依旧是冠军,所以我不会留情的。" - }, - "victory": { - "1": "这就是新冠军的崛起。" - }, - "defeat": { - "1": "我成功捍卫了冠军的头衔。" - } - }, - "steven": { - "encounter": { - "1": "告诉我…你在和宝可梦的旅途过程中看到了什么?$邂逅了那么多的训练师,\n你都会有什么样的感受呢?$在这丰饶的大地上旅行…\n有没有唤醒你内在的某种东西?$你不如就用一场对战来告诉我你心中的答案吧。$我也会和我的宝可梦用这种方式\n将我们所知道的告诉你的!" - }, - "victory": { - "1": "没想到连我这个联盟冠军\n都败在你的手上了呢…" - }, - "defeat": { - "1": "正如我所期待的。谢谢!" - } - }, - "cynthia": { - "encounter": { - "1": "我,竹兰,接受你的挑战!\n我是不会手软的!" - }, - "victory": { - "1": "无论对战多么有趣,\n它总会有结束的时候……" - }, - "defeat": { - "1": "即使你输了,\n也永远不要失去你对宝可梦的热爱。" - } - }, - "iris": { - "encounter": { - "1": "你知道吗?\n我真的很期待和强大的训练师进行认真的战斗!$我的意思是,来吧!\n到达这里的是那些渴望胜利的训练师,$他们与经历过无数艰难\n战斗的宝可梦一起战斗!$如果我和那样的人战斗,\n不仅我会变得更强,我的宝可梦也会!$我们也会更好地了解彼此!\n好!做好准备吧!$我是艾莉丝,宝可梦联盟冠军,\n我,将打败你!" - }, - "victory": { - "1": "啊……我尽力了,但我们输了……" - }, - "defeat": { - "1": "耶!我们赢了!" - } - }, - "hau": { - "encounter": { - "1": "我想知道,训练师是否会根据他们是\n来自温暖地区还是寒冷地区而以不同的方式战斗。$让我们来测试一下!" - }, - "victory": { - "1": "那太棒了!我觉得我现在有点了解你的感觉了!" - }, - "defeat": { - "1": "老铁,这才叫战斗!" - } - }, - "geeta": { - "encounter": { - "1": "我决定再试一次。$来吧…让我看看你的训练成果。" - }, - "victory": { - "1": "我期待着你的成就!" - }, - "defeat": { - "1": "怎么,这就结束了?" - } - }, - "nemona": { - "encounter": { - "1": "耶!我太兴奋了!让我们稍微放轻松!" - }, - "victory": { - "1": "好吧,太糟了,但我还是玩得很开心!$下次我一定会赢你!" - }, - "defeat": { - "1": "好吧,那是一场很棒的战斗!$肯定是会有收获的啦。" - } - }, - "leon": { - "encounter": { - "1": "来享受一段冠军时刻吧!" - }, - "victory": { - "1": "我的冠军生涯结束了……$但这是多么美好的冠军时刻啊!$谢谢你给了我最精彩的一战!" - }, - "defeat": { - "1": "名副其实的冠军时刻!" - } - }, - "whitney": { - "encounter": { - "1": "嘿!你不认为宝可梦超级可爱吗?" - }, - "victory": { - "1": "哇啊!哇啊!你太坏了!" - }, - "defeat": { - "1": "就是这样!" - } - }, - "chuck": { - "encounter": { - "1": "哈!你想挑战我?你是勇敢还是无知?" - }, - "victory": { - "1": "你很强!能不能收我为徒?" - }, - "defeat": { - "1": "搞定。你明白我比你强得多了吗?" - } - }, - "katy": { - "encounter": { - "1": "不要放松警惕,除非你想被虫丝绊倒哦!" - }, - "victory": { - "1": "我可爱的宝可梦们都像苍蝇一样坠落了!" - }, - "defeat": { - "1": "开饭啦,我可爱的彩粉蝶!" - } - }, - "pryce": { - "encounter": { - "1": "年轻不代表能获得胜利!经验才是关键。" - }, - "victory": { - "1": "无与伦比!赢得完美,试着不要忘记你现在的感受。" - }, - "defeat": { - "1": "正如我所料。" - } - }, - "clair": { - "encounter": { - "1": "你知道我是谁吗?知道还敢挑战我?" - }, - "victory": { - "1": "我想知道以你现在的水平能走多远,有趣。" - }, - "defeat": { - "1": "就是这样。" - } - }, - "maylene": { - "encounter": { - "1": "我现在要挑战你,我不会保留任何实力。$请准备好战斗!" - }, - "victory": { - "1": "是我输了…" - }, - "defeat": { - "1": "太棒了。" - } - }, - "fantina": { - "encounter": { - "1": "你来挑战吧。我会胜利。$这就是家缘市的道馆馆主。" - }, - "victory": { - "1": "你是最强的,我认输了。" - }, - "defeat": { - "1": "我非常,非常高兴!" - } - }, - "byron": { - "encounter": { - "1": "和我儿子瓢太一样的年轻人啊!$我相信培养年轻人\n关系到宝可梦光明的未来!$为此就让我来成为\n年轻人必须跨越的堡垒吧!" - }, - "victory": { - "1": "唔!我千锤百炼的宝可梦!" - }, - "defeat": { - "1": "哈哈哈哈!怎么样!我千锤百炼的宝可梦!" - } - }, - "olympia": { - "encounter": { - "1": "战斗是决定命运的古老传统。让我们开始吧!" - }, - "victory": { - "1": "创造你自己的道路。$不要让任何东西阻挡你的路、你的命运、你的未来。" - }, - "defeat": { - "1": "我们的道路现在已经清晰了。" - } - }, - "volkner": { - "encounter": { - "1": "能留到最后的训练家想必肯定是很强的…$希望你会是能让我回忆起\n宝可梦对战乐趣的训练家!" - }, - "victory": { - "1": "我输了…$你的心意,宝可梦的不顾一切。$战斗的时候就让我热血沸腾。" - }, - "defeat": { - "1": "完全没感觉…$和我希望的完全不一样!" - } - }, - "burgh": { - "encounter": { - "1": "唔…我有预感,\n只要赢了这场战斗就能画出更好的画来…$嗯!战斗充满了幻象!那么,马上开始吧。", - "2": "当然,我对我所有的宝可梦都相当骄傲! $现在…让我们马上开始吧!" - }, - "victory": { - "1": "结束了吗?我的女神抛弃我了吗?", - "2": "啊唔,输了……你还真是很强啊。" - }, - "defeat": { - "1": "唔啊……好……好美啊!", - "2": "偶尔也有一些不是很好看的胜利,$但只要努力了,\n不管怎么样的战斗,都是很美丽的。" - } - }, - "elesa": { - "encounter": { - "1": "最后一击!\n在确信这一点的时候全身会流淌过电流!$为追求这个快感,\n我要用可爱的宝可梦们让你头晕眼花。" - }, - "victory": { - "1": "本想让你头晕的,\n结果我倒反被你电到了。" - }, - "defeat": { - "1": "感觉还不够啊……下次能使出全力来吗?" - } - }, - "skyla": { - "encounter": { - "1": "终于到决战了!\n这是决定顶点的宝可梦对战吧?$我最喜欢顶点了!\n在高的地方能看到很远很远!$好了!就让我和你好好地玩一场吧!" - }, - "victory": { - "1": "和你的战斗让我更强了……谢谢。" - }, - "defeat": { - "1": "不管是赢了还是输了,战斗都能得到一些东西。" - } - }, - "brycen": { - "encounter": { - "1": "有其他的人和宝可梦在一起,$这份支持会让自己更强…\n让我来给你展示一下这样的强大吧!" - }, - "victory": { - "1": "你和你的宝可梦!配合得天衣无缝!\n华丽的友情!" - }, - "defeat": { - "1": "尝试极限!锻炼!" - } - }, - "drayden": { - "encounter": { - "1": "现在我寻求的是\n能让我看到光明未来的年轻训练家。$你有多少实力,就让我用我的经验,\n我对宝可梦倾注的爱来验证吧!" - }, - "victory": { - "1": "失败后涌现的这灼热的意志…\n该怎么说呢…" - }, - "defeat": { - "1": "啊啊啊!你的实力就这种程度吗!" - } - }, - "grant": { - "encounter": { - "1": "我只期待一件事。. $通过超越彼此,\n我们找到通往更高境界的道路。" - }, - "victory": { - "1": "你是一堵我无法逾越的墙!" - }, - "defeat": { - "1": "不要放弃。\n这就是人生的真谛。$大道至简。" - } - }, - "korrina": { - "encounter": { - "1": "小女子科尔尼来大显身手啦!" - }, - "victory": { - "1": "正因为有你,\n才能让你的宝可梦进化!" - }, - "defeat": { - "1": "好劲爆的战斗呀!" - } - }, - "clemont": { - "encounter": { - "1": "哦!我很高兴我们能见面!" - }, - "victory": { - "1": "你对战斗的热情激励了我!" - }, - "defeat": { - "1": "看来我的训练师成长强化机-马克2号,\n真的起作用了!" - } - }, - "valerie": { - "encounter": { - "1": "哦,这不是一个年轻的训练师吗……\n能这样遇见你真是太好了。 $我想你已经获得了这场战斗的资格,\n作为对你努力的奖励。 $难以捉摸的妖精可能看起来像微风一样脆弱,\n像花朵一样精致,但很坚强。" - }, - "victory": { - "1": "我希望明天你也能找到一些值得会心微笑的事物……" - }, - "defeat": { - "1": "哦,天哪,这太遗憾了……" - } - }, - "wulfric": { - "encounter": { - "1": "你知道吗?\n我们都说战斗能学到东西,羁绊之类的,$但实际上,我这么做只是因为有趣。 $谁在乎那些华而不实的东西?\n我们来战斗吧!" - }, - "victory": { - "1": "杰出!我像冰山一样坚硬,但你彻底击溃了我!" - }, - "defeat": { - "1": "和我干的结果就是这样!" - } - }, - "kabu": { - "encounter": { - "1": "每个训练师和宝可梦都在努力追求胜利。$但这意味着你的对手也在努力赢得胜利。$最终,比赛是由哪一方\n能够发挥出他们真正的潜力来决定的。" - }, - "victory": { - "1": "我很高兴今天能和你战斗!" - }, - "defeat": { - "1": "这是我感觉自己的成长的好方式!" - } - }, - "bea": { - "encounter": { - "1": "你有没有一种不可动摇的精神,\n受到什么攻击都安如磐石? $就让我来试试吧?" - }, - "victory": { - "1": "我感受到了你的宝可梦\n在战斗中被你指挥时的战斗之魂。" - }, - "defeat": { - "1": "每个人都希望能有一场这样的好比赛。" - } - }, - "opal": { - "encounter": { - "1": "让我看看你和你的宝可梦的表现如何!" - }, - "victory": { - "1": "你不够粉嫩呀,\n但你是一个优秀的训练师,$还拥有着优秀的宝可梦。" - }, - "defeat": { - "1": "对你来说太惨了,我觉得。" - } - }, - "bede": { - "encounter": { - "1": "就让我来证明你有多可怜,我有多强大。" - }, - "victory": { - "1": "我懂了……好吧。其实我还没拿出全力呢。" - }, - "defeat": { - "1": "我觉得我打的不错。" - } - }, - "gordie": { - "encounter": { - "1": "好了,我们来做个了结吧!" - }, - "victory": { - "1": "我只想要挖一个洞爬进去……$好吧,现在更像是掉了进去。" - }, - "defeat": { - "1": "像往常一样战斗,胜利就会随之而来!" - } - }, - "marnie": { - "encounter": { - "1": "事实上,言而总之… \n人家自己也想当冠军呀! $所以别认为我在针对你!" - }, - "victory": { - "1": "好吧,我还是输了……\n但是我看到了很多你和你宝可梦的优点哦" - }, - "defeat": { - "1": "希望你喜欢我们的战斗策略。" - } - }, - "raihan": { - "encounter": { - "1": "我打算击败冠军,赢得锦标赛,\n并向世界证明奇巴纳大人有多强!" - }, - "victory": { - "1": "就算输了我也好帅。$真是罪孽深重啊。$看来得再来张自拍了!" - }, - "defeat": { - "1": "为了纪念此刻,来张自拍吧!" - } - }, - "brassius": { - "encounter": { - "1": "你应该准备好了吧,\n一起完成这美丽的艺术作品吧!" - }, - "victory": { - "1": "啊……前卫!" - }, - "defeat": { - "1": "我将立即开始新的创作!" - } - }, - "iono": { - "encounter": { - "1": "谁在奇述!是我奇树!\n做好准备了吗!$...$直播开始!\n今天的小挑战者有多强?$奇树不知道哦~\n让我们一起来看看吧!" - }, - "victory": { - "1": "你的闪耀如1000万伏特!朋友!" - }, - "defeat": { - "1": "奇树奇树捕获你的眼球!" - } - }, - "larry": { - "encounter": { - "1": "归根结底,普普通通就是最强。" - }, - "victory": { - "1": "哼,给我上了一道“战败”。" - }, - "defeat": { - "1": "下班打卡,走了" - } - }, - "ryme": { - "encounter": { - "1": "宝贝, 一起! \n摇滚摇到骨子里!" - }, - "victory": { - "1": "你好酷!我佩服!\n我的灵魂为你哭!" - }, - "defeat": { - "1": "再会, 宝贝!" - } - }, - "grusha": { - "encounter": { - "1": "我保证我宝可梦的力量\n会让你感到寒冷彻骨!" - }, - "victory": { - "1": "你燃烧的热情……老实说,我有点喜欢。" - }, - "defeat": { - "1": "你没有升温。" - } - }, - "marnie_elite": { - "encounter": { - "1": "你已经走到这一步了?$哼~ 看看你能不能对付我的宝可梦!", - "2": "我将全力以赴, 别觉得我会手下留情哦~" - }, - "victory": { - "1": "不敢相信…我输掉了… $但是你确实赢得好,干得漂亮捏~", - "2": "看来我还要多多学习呀,\n不过你打的很不错哦~" - }, - "defeat": { - "1": "你打得不错,但是我更胜一筹!$祝你下次好运啦~", - "2": "看来我的练习有所回报了。\n感谢一战!" - } - }, - "nessa_elite": { - "encounter": { - "1": "海流正在朝着对我有利的方向转变。$准备好被卷走了吗?", - "2": "让我们在这场战斗中掀起波澜!$我希望你做好准备!" - }, - "victory": { - "1": "你完美地渡过了这片水域......干得好!", - "2": "看来我现在无法与你匹敌。干得好!" - }, - "defeat": { - "1": "水总能找到出路。\n真是爽快的一战!", - "2": "你打得很好,\n但海洋的力量是不可阻挡的!" - } - }, - "bea_elite": { - "encounter": { - "1": "做好准备!我的斗志熊熊燃烧!", - "2": "让我们看看你是否能跟上我永不停歇的节奏!" - }, - "victory": { - "1": "你的实力......令人印象深刻。\n你真的值得这场胜利。", - "2": "我以前从未感受过这种强度。\n太棒了!" - }, - "defeat": { - "1": "我的高强度训练又带来胜利了!\n干得好!", - "2": "你有实力,但我的训练更努力。\n精彩的战斗!" - } - }, - "allister_elite": { - "encounter": { - "1": "黑暗降临...你准备好面对你的恐惧了吗?", - "2": "让我们看看你能否应对我所操控的黑暗。" - }, - "victory": { - "1": "你已经驱散了阴影......\n暂时。干得很好。", - "2": "你的光芒刺穿了我的黑暗。干得好。" - }, - "defeat": { - "1": "黑影在轻语...\n你的力量还不够。", - "2": "黑暗获胜了......\n也许下次你会看到光明。" - } - }, - "raihan_elite": { - "encounter": { - "1": "虽然没法打败丹帝夺冠,\n让我觉得很遗憾……$但是有你这家伙当对手,\b倒是也还不赖啊!", - "2": "准备好面对龙之风暴!" - }, - "victory": { - "1": "你的气势就像暴风一样,\n连我都甘拜下风了!", - "2": "你完美地驾驭了我的风暴……打得好!" - }, - "defeat": { - "1": "又一场龙之风暴袭来,又一场胜利!打得好!", - "2": "你被我的龙之风暴卷入了!祝你下次好运!" - } - }, - "alder": { - "encounter": { - "1": "准备好和合众最强的训练家交手吧!" - }, - "victory": { - "1": "精彩!简直就是天下无双!" - }, - "defeat": { - "1": "战斗结束后,我的心像是吹过了温和的风……\n$真是厉害!" - } - }, - "kieran": { - "encounter": { - "1": "我的努力让我越来越强!\n$所以我不会输。" - }, - "victory": { - "1": "不可能……\n$真是一场有趣又激动人心的战斗啊!" - }, - "defeat": { - "1": "哇塞,好一场战斗!\n$你得多练练了。" - } - }, - "rival": { - "encounter": { - "1": "@c{smile}嘿,我在找你呢!我知道你急着上路,\n但至少说个再见吧…$@c{smile_eclosed}所以你终于要开始追逐梦想了?\n我几乎不敢相信。$@c{serious_smile_fists}来都来了,来一场对战怎么样?\n毕竟,我想看看你是不是准备周全了。$@c{serious_mopen_fists}不要手下留情,我想让你全力以赴!" - }, - "victory": { - "1": "@c{shock}哇…你彻底击败了我。\n你是真初学者吗?$@c{smile}也许是靠点运气,但是…\n谁知道,你可能真的能一路走下去。$顺便说一下,博士让我给你这些东西。它们看起来可牛了。$@c{serious_smile_fists}祝你好运!" - } - }, - "rival_female": { - "encounter": { - "1": "@c{smile_wave}你在这儿啊!我到处找你呢!$@c{angry_mopen}你忘了和你最好的朋友说再见了吗?$@c{smile_ehalf}你要去追逐梦想了,对吧?\n从今天开始,是不是…$@c{smile}不管怎样,忘了我的事就原谅你吧,\n但有个条件。@c{smile_wave_wink}你必须和我对战!$@c{angry_mopen}全力以赴!\n你也不想让你的冒险在开始之前就结束了,对吧?" - }, - "victory": { - "1": "@c{shock}你刚开始就已经这么强了?!@d{96}$@c{angry}你是不是开了?$@c{smile_wave_wink}只是开个玩笑啦!@d{64} @c{smile_eclosed}我输地心服口服了…\n我感觉你出去挺有天赋的。$@c{smile}顺便说一下,博士想让我给你一些东西。\n希望它们能帮上忙!$@c{smile_wave}像往常一样尽力而为!\n我相信你!" - } - }, - "rival_2": { - "encounter": { - "1": "@c{smile}嘿,你也在这里吗?$@c{smile_eclosed}一路过关斩将,是吧?$@c{serious_mopen_fists}我知道看起来好像我尾随着你来到这里,\n怎么可能啦。$@c{serious_smile_fists}说真的,自从你在老家打败我后,\n我就一直很渴望再比一场。$我自己也进行了很多训练,\n所以这次我肯定会好好打一场。$@c{serious_mopen_fists}不要手下留情,就像以前一样!$让我们开始吧!" - }, - "victory": { - "1": "@c{neutral_eclosed}哦。我过于自信了。$@c{smile}不过没关系。我猜到可能会这样。$@c{serious_mopen_fists}这只意味着我下次需要更努力!$$@c{smile}呃,不是特意帮你,我正好有多余的这个,\n我觉得你可能想要。$$@c{serious_smile_fists}不过这次之后别指望再有了!$我不能一直给我的对手优势。$@c{smile}反正,保重!" - } - }, - "rival_2_female": { - "encounter": { - "1": "@c{smile_wave}哦,真巧,在这里遇见你。\n看来你还没输过嘛。@c{angry_mopen}哈……好家伙!$@c{angry_mopen}我知道你在想什么,\n不,我才不会跟踪你什么呢。 @c{smile_eclosed}我只是碰巧在附近。$@c{smile_ehalf}我为你感到高兴,但我只想让你知道\n有时输了是可以接受的。$@c{smile}我们从错误中学到的东西\n往往比我们一直成功时学到的还要多。$@c{angry_mopen}无论如何,我为了我们的复赛已经努力训练了\n所以你最好全力以赴!" - }, - "victory": { - "1": "@c{neutral}我……没打算会输来着……$@c{smile}嗷……好吧。看来我要再更加努力训练了!$@c{smile_wave}我还给你带了个这个$@c{smile_wave_wink}不用谢我哦~.$@c{angry_mopen}不过,这是最后一个啦!\n你可别想再从我这赚小便宜了~$@c{smile_wave}要保重哦!" - }, - "defeat": { - "1": "输了有时候也不要紧的…" - } - }, - "rival_3": { - "encounter": { - "1": "@c{smile}嘿,看看这是谁!好久不见啊。$@c{neutral}你……还是没输过?哈…$@c{neutral_eclosed}这有点……不太对劲。$没有你一起,回家的感觉有很不一样。$@c{serious}虽然我知道这挺别扭的,但我就直说了。$@c{neutral_eclosed}我觉得你有点儿难以理喻。$@c{serious}没有人能够战无不胜。$失败乃成功之母。$@c{neutral_eclosed}你已经赢得了够好的成绩,\n但前面道阻且长,只会愈发艰难。 @c{neutral}你做好准备了没?$@c{serious_mopen_fists}如果做好了,证明给我看吧。" - }, - "victory": { - "1": "@c{angry_mhalf}这太离谱了……我几乎从没停下训练……$我们之间的差距怎么还是这么大?" - } - }, - "rival_3_female": { - "encounter": { - "1": "@c{smile_wave}好久不见!还没输过,对吧。$@c{angry}我觉得你点烦了。@c{smile_wave_wink}开玩笑啦!$@c{smile_ehalf}但说真的,你现在不想家吗?\n不想…我吗?$我……我的意思是,我们真的很想你。$@c{smile_eclosed}我支持你的一切,包括你的梦想。\n但现实就是你早晚会经历失败。$@c{smile}当你失败的时候,我想像往常一样陪在你身边。$@c{angry_mopen}现在,给你看看我变得多强了吧!" - }, - "victory": { - "1": "@c{shock}都这样了……还是不够吗?$这样下去,你就永远不会回来了……" - }, - "defeat": { - "1": "你尽力了,现在让我们回家吧。" - } - }, - "rival_4": { - "encounter": { - "1": "@c{neutral}嘿。$我不会对你说什么拐弯抹角的客套话。$@c{neutral_eclosed}我来,就是为了赢,简单明了。$@c{serious_mhalf_fists}我将所有时间都投入到训练中,\n掌握了如何发挥我的潜力。$@c{smile}当你削减掉不必要的睡眠和社交后,\n你会得到很多额外的时间。$@c{serious_mopen_fists}但在我获胜之前,这些都不重要了。$@c{neutral_eclosed}我甚至已经到达了战无不败的境地。$@c{smile_eclosed}我觉得你的思路倒是也没毛病。$@c{angry_mhalf}失败是属于弱者的,\n我已经不再软弱了。$@c{serious_mopen_fists}准备好吧。" - }, - "victory": { - "1": "@c{neutral}你…@d{64} 你是人吗?" - } - }, - "rival_4_female": { - "encounter": { - "1": "@c{neutral}是我哦!没又把我忘了吧……是吗?$@c{smile}你应该为自己走了这么远感到骄傲。恭喜你!$但看来你的旅程到此为止了。$@c{smile_eclosed}你唤醒了我体内一些我从未有过的东西。\n就像我现在满脑子除了训练还是训练。$@c{smile_ehalf}我几乎已经没空吃饭睡觉了,\n我没日没夜训练我的宝可梦,每次都能变得更强。$@c{neutral}事实上,我……几乎不认识自己了。$现在,我终于达到了巅峰。\n我感觉我已经战无不胜了。$而且你知道吗?这一切都是因为你。$@c{smile_ehalf}我不知道到底是该感谢你还是恨你。$@c{angry_mopen}做好准备…" - }, - "victory": { - "1": "@c{neutral}你…@d{64} 你是人吗?" - }, - "defeat": { - "1": "@c{smile}你应该为自己走了这么远感到骄傲。" - } - }, - "rival_5": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - } - }, - "rival_5_female": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - }, - "defeat": { - "1": "$@c{smile_ehalf}…" - } - }, - "rival_6": { - "encounter": { - "1": "@c{smile_eclosed}又见面了。$@c{neutral}我花了点时间思考反思\n有理由说明为什么这一切都显得如此奇妙。$@c{neutral_eclosed}你所追逐的梦想,我想击败你的决心…$这都是某种庞大使命的一部分。$@c{serious}这不仅仅是关于我和你… 而是关于这个世界, @c{serious_mhalf_fists}我的使命就是将你推向极限。$@c{neutral_eclosed}我是否达成了那个使命,我说不上来,但我已尽我所能。$@c{neutral}我们最终到达的这个地方看起来很可怕\n 然而不知何故,我心中毫无畏惧,好像我早就来过这里。$@c{serious_mhalf_fists}你也有同样的感觉,对吧?$@c{serious}……这里好像有什么东西在呼唤我。\n这是世界早已记录的一切。$那些我们经历过的时光,那些记忆犹新的过去,\n其实只是遥远的回忆。$@c{neutral_eclosed}谁能保证它们是否真的发生过。$@c{serious_mopen_fists}你必须继续前进,不然的话,这一切将永无止境。\n这件事而只有你能办成。$@c{serious_smile_fists}我不清楚这一切意味着什么,但我知道……$@c{serious_mopen_fists}如果现在你不能就此击败我,\n你将毫无机会可言。" - }, - "victory": { - "1": "@c{smile_eclosed}看来我的使命在这里已经完成了。\n我想让你答应我一件事。$@c{smile}在你拯救世界之后,要回家。" - } - }, - "rival_6_female": { - "encounter": { - "1": "@c{smile_ehalf}又只有我们两个人了。$@c{smile_eclosed}你知道吗,我在心里想啊想,\n想了好久……$@c{smile_ehalf}这一切背后是有什么原因吗,\n为什么一切现在看起来都这么奇怪……$@c{smile}你有你的梦想,而我内心有这个抱负……$我不禁感觉这一切背后有一个更庞大的力量,$掌控者我们所做的一切,你和我之间。$@c{smile_eclosed}我想我注定要推动你……到你的极限。$@c{smile_ehalf}我不清楚我是否一直做得很好,\n但到现在为止,我已经尽力了。$这个奇怪而可怕的地方……\n一切看起来都那么清晰……$这是世界早已记录的一切。$@c{smile_eclosed}我好像记不清我们一起度过的日子了。$@c{smile_ehalf}那些回忆到底是真的吗?\n怎么感觉这么久远……$@c{angry_mopen}你得继续前进,不然的话,这一切将永无止境。\n你是唯一能做到这件事的。$@c{smile_ehalf}我……不知道这一切意味着什么……\n但我明白$@c{neutral}如果你现在不能就此击败我,\n你将毫无机会可言。" - }, - "victory": { - "1": "@c{smile_ehalf}我……\n我想我完成了我的使命……$@c{smile_eclosed}答应我……在你拯救世界之后\n……要……平安到家。$@c{smile_ehalf}……谢谢你。" - } - } -} diff --git a/src/locales/zh_CN/dialogue-misc-male.json b/src/locales/zh_CN/dialogue-misc-male.json deleted file mode 100644 index e9ac66b7955..00000000000 --- a/src/locales/zh_CN/dialogue-misc-male.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "ending": "@c{smile}哦?你赢了?@d{96} @c{smile_eclosed}我应该早猜到了\n你回来了。\n$@c{smile}结束了。@d{64} 你终结了这个循环。\n$@c{serious_smile_fists}你也完成了自己的梦想,不是吗?\n你甚至一次都没失败。\n$@c{neutral}我是唯一能够记得你所作所为的人@d{96}\n我觉得这应该也还行吧?\n$@c{serious_smile_fists}你的传奇将永远留存于我们心中。\n$@c{smile_eclosed}不管了,我真是受够这个地方了,你也一样吗?我们回家吧。\n$@c{serious_smile_fists}可能等我们回家以后,再打一场?\n要是你想的话", - "ending_female": "@c{shock}你回来了?@d{32} 也就是说…@d{96} 你赢了呀!?\n@c{smile_ehalf}我应该早料到了。\n$@c{smile_eclosed}当然…我一直有这种感觉\n@c{smile}一切都结束了,对么? 你打破了循环。\n$@c{smile_ehalf}你也完成了自己的梦想,不是吗?\n你甚至一次都没失败。\n$我是唯一能够记得你所作所为的人\n@c{angry_mopen}我会努力不忘掉哒!\n$@c{smile_wave_wink}开玩笑啦,@d{64} @c{smile}我才不会忘呢。@d{32}\n你的传奇将永远留存于我们心中。\n$@c{smile_wave}不管了,@d{64} 时候不早了@d{96} ,应该吧?\n在这地方还真搞不清楚。\n$一起回家吧。 @c{smile_wave_wink}可能明天,我们再来打一场,为了重温回忆嘛~" -} \ No newline at end of file diff --git a/src/locales/zh_CN/dialogue-misc-female.json b/src/locales/zh_CN/dialogue-misc.json similarity index 100% rename from src/locales/zh_CN/dialogue-misc-female.json rename to src/locales/zh_CN/dialogue-misc.json diff --git a/src/locales/zh_CN/dialogue-female.json b/src/locales/zh_CN/dialogue.json similarity index 100% rename from src/locales/zh_CN/dialogue-female.json rename to src/locales/zh_CN/dialogue.json diff --git a/src/locales/zh_TW/config.ts b/src/locales/zh_TW/config.ts index 1e7ab421092..cf505d683a5 100644 --- a/src/locales/zh_TW/config.ts +++ b/src/locales/zh_TW/config.ts @@ -15,14 +15,10 @@ import bgmName from "./bgm-name.json"; import biome from "./biome.json"; import challenges from "./challenges.json"; import commandUiHandler from "./command-ui-handler.json"; -import dialogueMale from "./dialogue-male.json"; -import dialogueFemale from "./dialogue-female.json"; -import dialogueEndbossMale from "./dialogue-final-boss-male.json"; -import dialogueEndbossFemale from "./dialogue-final-boss-female.json"; -import dialogueMiscMale from "./dialogue-misc-male.json"; -import dialogueMiscFemale from "./dialogue-misc-female.json"; -import dialogueDoubleBattleMale from "./dialogue-double-battle-male.json"; -import dialogueDoubleBattleFemale from "./dialogue-double-battle-female.json"; +import dialogue from "./dialogue.json"; +import battleSpecDialogue from "./dialogue-final-boss.json"; +import miscDialogue from "./dialogue-misc.json"; +import doubleBattleDialogue from "./dialogue-double-battle.json"; import egg from "./egg.json"; import fightUiHandler from "./fight-ui-handler.json"; import filterBar from "./filter-bar.json"; @@ -76,14 +72,10 @@ export const zhTwConfig = { commandUiHandler, common, achv, - PGMdialogue: dialogueMale, - PGFdialogue: dialogueFemale, - PGMbattleSpecDialogue: dialogueEndbossMale, - PGFbattleSpecDialogue: dialogueEndbossFemale, - PGMmiscDialogue: dialogueMiscMale, - PGFmiscDialogue: dialogueMiscFemale, - PGMdoubleBattleDialogue: dialogueDoubleBattleMale, - PGFdoubleBattleDialogue: dialogueDoubleBattleFemale, + dialogue, + battleSpecDialogue, + miscDialogue, + doubleBattleDialogue, egg, fightUiHandler, filterBar, diff --git a/src/locales/zh_TW/dialogue-double-battle-male.json b/src/locales/zh_TW/dialogue-double-battle-male.json deleted file mode 100644 index 684beac5eaf..00000000000 --- a/src/locales/zh_TW/dialogue-double-battle-male.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "blue_red_double": { - "encounter": { - "1": "青綠:嘿,赤紅,\n讓這傢伙看看我們是什麼來頭!$赤紅:...$青綠: 見識下真新鎮的實力!" - }, - "victory": { - "1": "青綠:打得真不錯$赤紅: ..." - } - }, - "red_blue_double": { - "encounter": { - "1": "赤紅: ...!$青綠:他人狠話不多。$青綠: 他人狠話不多。$青綠: 但別被他耍了,\n畢竟他可是個冠軍!" - }, - "victory": { - "1": "赤紅: ...!$青綠: 下次我們一定會贏你!" - } - }, - "tate_liza_double": { - "encounter": { - "1": "小楓:嘿嘿嘿……你驚訝嗎?$小南:這裡有兩個道館館主?$小楓: 我們是雙胞胎!$小南:我們無需交談,因為……我們可以通曉彼此的想法$小楓: 我們的組合……$小南: 你能打敗嗎?" - }, - "victory": { - "1": "小楓:什麼?我們的組合……$小南:被瓦解了!" - } - }, - "liza_tate_double": { - "encounter": { - "1": "小南:呵呵呵……你驚訝吧?$小楓:這裡有兩個道館館主?$小南:我們可以通曉……$小楓:彼此的想法……$小南:全在我們腦中!$小楓:我們的組合……$小南:你能打敗嗎?" - }, - "victory": { - "1": "小楓:你和你的寶可夢……$小南:簡直像親兄弟姐妹!" - } - }, - "wallace_steven_double": { - "encounter": { - "1": "大吾:米可利, 展現冠軍的實力吧!$米可利:我們將展示豐緣的實力!$米可利:我們將展示豐緣的實力!$大吾:要上了!" - }, - "victory": { - "1": "大吾:打得真不錯!$米可利:我們下次會贏的!" - } - }, - "steven_wallace_double": { - "encounter": { - "1": "大吾:你有什麼稀有的寶可夢嗎?$米可利:大吾……我們是來對戰的,\n不是來炫耀寶可夢的。$大吾:哦……知道了… 那麼要上了!" - }, - "victory": { - "1": "大吾:戰鬥結束了,\n來看看我的稀有寶可夢!$米可利:大吾……" - } - }, - "alder_iris_double": { - "encounter": { - "1": "阿戴克:我們倆是合眾最強的訓練家!$艾莉絲:與最強來一場最激烈的戰鬥吧!" - }, - "victory": { - "1": "阿戴克:哇哦!你真是超級厲害!$艾莉絲:我們下次會贏的啦!" - } - }, - "iris_alder_double": { - "encounter": { - "1": "艾莉絲:歡迎!挑戰者,\n合眾地區最強的冠軍大駕光臨!$阿戴克:艾莉絲,你是不是有點太興奮了…" - }, - "victory": { - "1": "艾莉絲:這樣的失敗可不好受啊…$阿戴克:但是只有失敗才能讓我們變強!" - } - }, - "piers_marnie_double": { - "encounter": { - "1": "瑪俐:哥哥,給他們展現尖釘鎮的實力!$聶梓:我們帶來黑暗!" - }, - "victory": { - "1": "瑪俐:你的強光亮瞎我們的黑暗了啦……$聶梓:實在太亮了…" - } - }, - "marnie_piers_double": { - "encounter": { - "1": "聶梓: 台下準備好了嗎!$瑪俐: 哥哥,我們是來對戰的,\n不是來唱歌的……" - }, - "victory": { - "1": "聶梓:這首歌獻給大家!$瑪俐:哥哥……" - } - } -} \ No newline at end of file diff --git a/src/locales/zh_TW/dialogue-double-battle-female.json b/src/locales/zh_TW/dialogue-double-battle.json similarity index 100% rename from src/locales/zh_TW/dialogue-double-battle-female.json rename to src/locales/zh_TW/dialogue-double-battle.json diff --git a/src/locales/zh_TW/dialogue-final-boss-male.json b/src/locales/zh_TW/dialogue-final-boss-male.json deleted file mode 100644 index 13bfee9eb96..00000000000 --- a/src/locales/zh_TW/dialogue-final-boss-male.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "encounter": "看來終於又到了那個時候。\n你知道自己為何會來到這裡,不是嗎?\n$你被吸引到這裡,因為你以前就來過這裡。\n無數次。\n$儘管,或許可以數一數。\n準確地說,這實際上是你的第{{cycleCount}}次循環。\n$每一次循環,你的思想都會恢復到之前的狀態。\n即便如此,不知何故,你之前自我的殘留仍然存在。\n$直到現在,你仍未成功,但我感覺這次你身上有一種異樣的氣息。\n$你是這裡唯一的人,儘管感覺上還有……另一個人。\n$你最終會成為對我來的一個硬茬嗎?\n我渴望了數千年的挑戰?\n$我們,開始。", - "firstStageWin": "我明白了。我所感覺到的氣息確實是真實的。\n看來我不再需要保留實力了。\n$別讓我失望。", - "secondStageWin": "…漂亮。" -} \ No newline at end of file diff --git a/src/locales/zh_TW/dialogue-final-boss-female.json b/src/locales/zh_TW/dialogue-final-boss.json similarity index 100% rename from src/locales/zh_TW/dialogue-final-boss-female.json rename to src/locales/zh_TW/dialogue-final-boss.json diff --git a/src/locales/zh_TW/dialogue-male.json b/src/locales/zh_TW/dialogue-male.json deleted file mode 100644 index 4236e239622..00000000000 --- a/src/locales/zh_TW/dialogue-male.json +++ /dev/null @@ -1,2137 +0,0 @@ -{ - "youngster": { - "encounter": { - "1": "嘿,想來對戰嗎?", - "2": "你也是新人訓練師嗎?", - "3": "嘿,我之前沒見過你。我們來對戰吧!", - "4": "我剛輸了,所以我正在尋找更多的寶可夢。$等等!你看起來很弱!\n來吧,我們對戰吧!", - "5": "我們見過面嗎?我記不太清了。$嗯,不管怎樣,很高興見到你!", - "6": "好的!我們上吧!", - "7": "好的!我來啦!我會向你展示我的實力!", - "8": "嚯嚯嚯...我會向你展示我的寶可夢有多厲害!", - "9": "不要浪費時間打招呼。你準備好了就放馬過來!", - "10": "別掉以輕心,$否則你可能會被小朋友打到哭鼻子哦。", - "11": "我精心培養了我的寶可夢。不許你傷害它們!", - "12": "恭喜你成功了!從這以後可不輕鬆哦。", - "13": "戰鬥永無止境!歡迎來到沒有盡頭的世界!" - }, - "victory": { - "1": "哇!你很強!", - "2": "我根本沒機會贏,對吧?", - "3": "我會等長大了再來打敗你!", - "4": "呃。我沒有更多寶可夢了。", - "5": "不可能…不可能!我怎麼可能又輸了…", - "6": "不!我輸了!", - "7": "哇!你真是太不可思議了!我既驚訝又欽佩!", - "8": "這怎麼…怎麼可能…$明明我和我的寶可夢是最強大的…", - "9": "下次我不會輸了!我們找時間再對戰吧!", - "10": "天哪!你看不出我還只是個小孩子嗎!$你那樣全力以赴太賴了!", - "11": "你的寶可夢更棒啊!和我交換吧!", - "12": "我之前有點上頭,我說了什麼來著?", - "13": "啊哈哈!就是這樣!$對!你已經熟悉這個世界了!" - } - }, - "lass": { - "encounter": { - "1": "我們來對戰吧,好嗎?", - "2": "你看起來像是個新人訓練師。我們來戰鬥吧!", - "3": "我不認識你。來對戰怎麼樣?", - "4": "讓我們來進行一場有趣的寶可夢對戰吧!", - "5": "我會向你展示如何真正使用寶可夢!", - "6": "一場認真的對戰從始於認真的開場白!$你確定你準備好了嗎?", - "7": "花無重開日,人無再少年。$你在對戰中只有一次機會。$很快,你就只能活在回憶中了。", - "8": "你最好對我手下留情,好嗎?$當然我會認真對戰的!", - "9": "學校很無聊,我無事可做。$*哈欠*…我只是來對戰打發時間。" - }, - "victory": { - "1": "那真是令人印象深刻!我還有很多要學習。", - "2": "我沒想到你會這麼輕易地打敗我…", - "3": "我希望有一天,我們能再進行一場對戰。", - "4": "那真是場非常有趣的對戰!$你讓我精疲力盡了…", - "5": "你給我上了一課!你真是太棒了!", - "6": "說真的,我輸了。$這,怎麼說,真的好難過,但你也真的很厲害。", - "7": "我不需要像這樣的記憶。刪除記憶中…", - "8": "嘿!我告訴過你要對我手下留情!$不過,當你認真的時候,你真的很酷。", - "9": "實際上,我開始厭倦對戰了…$一定有新的事情可以做…" - } - }, - "breeder": { - "encounter": { - "1": "聽話的寶可夢,自私的寶可夢…$寶可夢有獨特的性格呢。", - "2": "儘管我出生貧寒,但我的寶可夢培養的很好。", - "3": "嗯,你有沒有管教你的寶可夢?$過度溺愛是不好的。" - }, - "victory": { - "1": "對每個寶可夢因材施教是很重要的。", - "2": "不像一無是處的我…這些寶可夢都很優秀。", - "3": "過度的讚美會寵壞寶可夢和人。" - }, - "defeat": { - "1": "即使輸了,也不應該對你的寶可夢發火。", - "2": "相當好的寶可夢,對吧?我很會養東西。", - "3": "無論你多麼愛你的寶可夢,$你仍要在它沒做好時管教它們。" - } - }, - "breeder_female": { - "encounter": { - "1": "寶可夢永遠不會背叛你。$它們會回報你對它們的愛。", - "2": "要我教教你訓練優秀寶可夢的技巧嗎?", - "3": "特別的寶可夢有特別的培育技巧。" - }, - "victory": { - "1": "呃…事情不應該是這樣的。$我是不是用錯了能量方塊?", - "2": "這怎麼會發生在我的寶可夢身上…$你給你的寶可夢餵了什麼?", - "3": "如果我輸了,我告訴你我只是在消磨時間。$你根本不會傷害到我的自尊心。" - }, - "defeat": { - "1": "這證明了我的寶可夢已經接受了我的愛。", - "2": "訓出好寶可夢的真正技巧是捉到好的寶可夢。", - "3": "寶可夢的強弱取決於你的飼養方式。" - } - }, - "fisherman": { - "encounter": { - "1": "啊!你讓我錯過了一次咬鉤!$你打算怎麼辦?", - "2": "走開!你嚇跑了寶可夢!", - "3": "讓我看看你能否贏得勝利!" - }, - "victory": { - "1": "算了吧。", - "2": "下一次,我將捲土重來,凱旋而歸!", - "3": "我想這次我低估了海流。" - } - }, - "fisherman_female": { - "encounter": { - "1": "哇!我釣到了一條大魚!", - "2": "線已收好,準備提竿!", - "3": "準備製造波浪!" - }, - "victory": { - "1": "我會帶著更強大的魚鉤回來。", - "2": "下次我會贏得勝利。", - "3": "我只是在為回歸磨利我的魚鉤!" - } - }, - "swimmer": { - "encounter": { - "1": "是時候潛水了!", - "2": "讓我們一起乘風破浪,贏得勝利!", - "3": "該一鳴驚人了!" - }, - "victory": { - "1": "沉浸在失敗中!", - "2": "失敗的波浪!", - "3": "後浪死在沙灘上,我猜。" - } - }, - "backpacker": { - "encounter": { - "1": "收拾行李,開始遊戲!", - "2": "讓我看看你是否能跟上!", - "3": "全副武裝,挑戰者!", - "4": "我花了20年時間試圖找到自己……但我在哪裡?" - }, - "victory": { - "1": "這次絆倒了!", - "2": "哦,我覺得我迷路了。", - "3": "死路!", - "4": "等一下!嘿!你不知道我是誰嗎?" - } - }, - "ace_trainer": { - "encounter": { - "1": "你看起來挺自信的。", - "2": "你的寶可夢…… 讓我看看……", - "3": "因為我是王牌訓練師,人們認為我很強。", - "4": "你知道成為王牌訓練師需要什麼嗎?" - }, - "victory": { - "1": "是的…… 你的寶可夢很棒……", - "2": "什麼?!我是戰鬥天才啊!", - "3": "理所應當,你才是主角!", - "4": "好好好!你可以成為王牌訓練師!" - }, - "defeat": { - "1": "我將把我的身體和靈魂全都奉獻給寶可夢對戰!", - "2": "一切都在我的預料之中… \n沒有什麼好驚訝的…", - "3": "我覺得我長大後有點玻璃心,$你太壓力我我會垮的……", - "4": "我當然很強大,不會輸。$而且重要的是我要優雅地贏。" - } - }, - "parasol_lady": { - "encounter": { - "1": "是時候用優雅和從容來為戰鬥添彩了!" - }, - "victory": { - "1": "我的優雅依然完好無損!" - } - }, - "twins": { - "encounter": { - "1": "準備好囉,因為我們聯手,\n麻煩雙倍!", - "2": "兩顆心,一條繩$讓我們看看你能否跟上我們雙胞胎的力量!", - "3": "希望你準備好了面對雙倍的麻煩,$因為我們即將燃起來啦!" - }, - "victory": { - "1": "雖然我們在這一輪輸了,$但我們的羈絆依然堅不可摧!", - "2": "我們的雙胞胎精神,才不會就此熄滅。", - "3": "我們會作為充滿活力的二人組,$捲土重來,變得更強!" - }, - "defeat": { - "1": "雙胞胎的力量至高無上!", - "2": "兩顆心,一起贏!", - "3": "笑容成雙,共舞成雙!" - } - }, - "cyclist": { - "encounter": { - "1": "準備好在我後面吃土吧!", - "2": "挑戰者,準備好!我要把你打得落花流水!", - "3": "全速前進,讓我看看你能不能跟得上!" - }, - "victory": { - "1": "輪子可能不轉了,但我的決心沒有停下。", - "2": "被超越了!", - "3": "通往勝利的道路還有許多曲折等待探索。" - } - }, - "black_belt": { - "encounter": { - "1": "我讚揚你挑戰我的勇氣!$因為我是踢力最強的人!", - "2": "哦,我明白了。你想被切成碎片嗎?$或者你更喜歡當個沙袋?" - }, - "victory": { - "1": "哦。是寶可夢在戰鬥。$我強大的踢擊一點忙都沒幫上。", - "2": "嗯…如果我無論如何都會輸,我希望能被徹底打敗。" - } - }, - "battle_girl": { - "encounter": { - "1": "你不必試圖勾引我。你可以輸給我。" - }, - "victory": { - "1": "很難說再見,但我們快沒時間了……" - } - }, - "hiker": { - "encounter": { - "1": "人到中年後,我的身體和我爬過的山一樣強壯!", - "2": "我從父母那裡遺傳了這副魁梧的身材…$就像一座活生生的山脈…" - }, - "victory": { - "1": "至少在BMI方面我不能輸!", - "2": "這還不夠……永遠不夠。$我的壞膽固醇還不夠高……" - } - }, - "ranger": { - "encounter": { - "1": "當我身處大自然中,其他事情都不重要了。", - "2": "如果我生活中沒有大自然,有時就會突然感到焦慮。" - }, - "victory": { - "1": "無論我是贏是輸,\n對廣闊的大自然來說並不重要……", - "2": "與城市生活的窒息感相比,\n這種事情微不足道。" - }, - "defeat": { - "1": "我贏了。但與浩瀚的大自然相比,\n勝利算不了什麼…", - "2": "與我的焦慮症相比,我覺得你也不會怎樣…" - } - }, - "scientist": { - "encounter": { - "1": "我的研究將引導這個世界走向和平與歡樂。" - }, - "victory": { - "1": "我是個天才…我不應該輸給你這樣的人…" - } - }, - "school_kid": { - "encounter": { - "1": "……嘿嘿。我對計算和分析很有信心。", - "2": "我正在盡可能地積累經驗,$因為我希望有一天能成為道館館主。" - }, - "victory": { - "1": "哦…計算和分析也許和個例不太匹配呀…", - "2": "我想,即使是艱難困苦的經歷,也有存在的意義。" - } - }, - "artist": { - "encounter": { - "1": "我以前很受歡迎,但現在已經徹底過氣了。" - }, - "victory": { - "1": "隨著時代的變遷,價值觀也在變化。$我意識到這一點已經太晚了。" - } - }, - "guitarist": { - "encounter": { - "1": "當我彈奏著走向勝利的旋律時,$準備好感受失敗的節奏吧!" - }, - "victory": { - "1": "暫時沉默了,但我不屈的旋律將繼續演奏。" - } - }, - "worker": { - "encounter": { - "1": "人們總誤解我,這讓我很煩。$我比大家想象的要乾淨得多。" - }, - "victory": { - "1": "我真的不想曬傷皮膚,所以我想在陰涼處工作。" - } - }, - "worker_female": { - "encounter": { - "1": "人們總是誤解我,這讓我很煩。 $我比大家想象的要乾淨得多。" - }, - "victory": { - "1": "我真的不想曬傷皮膚,\n所以我想在陰涼處工作。" - }, - "defeat": { - "1": "我的身體和心靈並不總同步。" - } - }, - "worker_double": { - "encounter": { - "1": "你會知道我們怎麼擊敗你的。我們在工地訓練過!" - }, - "victory": { - "1": "真奇怪…怎麼會這樣…我不應該被打敗的。" - } - }, - "hex_maniac": { - "encounter": { - "1": "我通常只聽古典音樂,但如果我輸了,$我想我應該試試新時代的音樂!", - "2": "我的每一滴眼淚都讓我變得更加堅強。" - }, - "victory": { - "1": "樂壇新時代的曙光就此出現了嗎?", - "2": "現在我變得更強了。我隨著他人怨恨而成長。" - }, - "defeat": { - "1": "“新時代”指的是二十世紀的古典作曲家,對吧?", - "2": "不要糾結於悲傷或沮喪。$你可以用悲憤來激勵自己。" - } - }, - "psychic": { - "encounter": { - "1": "嘿!集中!" - }, - "victory": { - "1": "呃呃呃!" - } - }, - "officer": { - "encounter": { - "1": "準備好,因為正義即將得到伸張!", - "2": "準備好維護法律,在戰場上伸張正義!" - }, - "victory": { - "1": "正義的分量比以往還要沉重……", - "2": "失敗的陰影,在警局中徘徊。" - } - }, - "beauty": { - "encounter": { - "1": "我最後的戰鬥…我就是這麼看待這場對戰的…" - }, - "victory": { - "1": "很有趣…有時間再來一場最後的戰鬥…" - } - }, - "baker": { - "encounter": { - "1": "希望你準備好品嚐失敗的滋味!" - }, - "victory": { - "1": "我會捲土重來的。" - } - }, - "biker": { - "encounter": { - "1": "是時候加速,把你甩在後面了!" - }, - "victory": { - "1": "我會為下一場比賽調整狀態。" - } - }, - "firebreather": { - "encounter": { - "1": "我的火焰會吞噬你!", - "2": "我的靈魂在燃燒,我要讓你看看它有多滾燙!", - "3": "快來看看吧!" - }, - "victory": { - "1": "我燃成灰了…", - "2": "哟! 好燙!", - "3": "嗷! 我的鼻尖燒焦了!" - } - }, - "sailor": { - "encounter": { - "1": "夥計,如果你輸了,你就得挨板子!", - "2": "來吧!這關係到我作為水手的尊嚴!", - "3": "你好啊!你暈船麼?" - }, - "victory": { - "1": "啊,被孩子打敗了。", - "2": "你的精神讓我沉淪!", - "3": "好像是我暈船了…" - } - }, - "brock": { - "encounter": { - "1": "我對岩石屬性寶可夢的專精會擊敗你!來吧!", - "2": "我磐石般的意志將壓倒你!", - "3": "讓我展示給你看看,我寶可夢真正的力量!" - }, - "victory": { - "1": "你寶可夢的力量戰勝了我堅如磐石的防禦!", - "2": "世界很大!很高興有機會和你戰鬥。", - "3": "也許我應該回去追尋我成為寶可夢飼養員的夢想……" - }, - "defeat": { - "1": "最好的進攻就是堅固的防守!$那是我做事的方式!", - "2": "下次來和我一起研究岩石屬性,$更好地了解如何與它們對戰!", - "3": "哈哈,我在各地的旅行有所回報了!" - } - }, - "misty": { - "encounter": { - "1": "我的戰策就是使用水屬性寶可夢全面進攻!", - "2": "嗨,我會讓你見識我的水屬性寶可夢的力量!", - "3": "我的夢想是踏上旅程,與強大的訓練師戰鬥……$你能滿足我嗎?" - }, - "victory": { - "1": "你真的很強……我承認,你有技術的……", - "2": "哼……你知道你只是運氣好,對吧?!", - "3": "哇,你太過分了!不敢相信你打敗我了!" - }, - "defeat": { - "1": "強大的小霞對你來說,太過分了嗎?", - "2": "我希望你看到了我寶可夢優雅的游泳技巧!", - "3": "你的寶可夢無法匹敵我的心腹和驕傲!" - } - }, - "lt_surge": { - "encounter": { - "1": "我的電屬性寶可夢在戰爭中救了我!$我來給你展示一下!", - "2": "立正!我要電到你投降!", - "3": "我會像對待敵軍一樣,狠狠電你!" - }, - "victory": { - "1": "哇!你的隊伍有真傢伙,小子!", - "2": "啊啊,你很強!連我的電擊技巧都輸給了你。", - "3": "這失敗真是把我給電麻了!" - }, - "defeat": { - "1": "哦耶!我的電屬性寶可夢是世界第一!", - "2": "哈哈哈!真是一場電動人心的戰鬥,小子!", - "3": "寶可夢對戰等於戰爭,$我向你展示了軍隊中的格鬥技巧!" - } - }, - "erika": { - "encounter": { - "1": "啊,這裡天氣真好…$哦,對戰?那好吧。", - "2": "我在寶可夢對戰上的造詣,$可以與我的插花技巧相媲美。", - "3": "哦,希望我寶可夢的宜人香氣\n不會再讓我睡著…", - "4": "看看花園裡的花朵,如此令人心曠神怡。" - }, - "victory": { - "1": "哦!我認輸啦~", - "2": "這場比賽非常愉快。", - "3": "啊,看來我輸了…", - "4": "哦,我的天哪。" - }, - "defeat": { - "1": "我怕我會打瞌睡…", - "2": "哦,我天。看來我的草屬性寶可夢擊敗了你。", - "3": "那場戰鬥是如此令人心曠神怡。", - "4": "哦…這就完啦?" - } - }, - "janine": { - "encounter": { - "1": "我正在掌握毒屬性攻擊的藝術。$今天我來和你過過招!", - "2": "父親相信我能獨當一面。$我來證明他說的對!", - "3": "我的忍術,僅次於我的父親!$你能跟的上嗎?" - }, - "victory": { - "1": "就算現在,我仍然需要繼續訓練…我明白了。", - "2": "你的戰鬥技巧,超過了我。", - "3": "我要好好努力提高我的技術。" - }, - "defeat": { - "1": "呵呵…毒液耗盡了你所有的力量。", - "2": "哈!你根本無法抵擋我卓越的忍技!", - "3": "我沒有辜負父親對我的信任。" - } - }, - "sabrina": { - "encounter": { - "1": "我的超能力預見了你的到來!", - "2": "我不喜歡戰鬥,但如果你想,$我會展示我的實力!", - "3": "我能感覺到你的雄心壯志。$我倒要看看你是不是虛有其表。" - }, - "victory": { - "1": "你的力量……遠遠超出了我的預知……", - "2": "我沒有準確預測到你的實力。", - "3": "即使我強大的超能力也無法感知到你這樣強大的人。" - }, - "defeat": { - "1": "這場勝利……和我看到的未來一樣啊!", - "2": "也許我預感到有強大實力的人,是另一個……", - "3": "在你奮不顧身投入戰鬥之前,\n磨練你的能力。$如果你這樣做,你才未來可期……" - } - }, - "blaine": { - "encounter": { - "1": "哈!希望你帶了燒傷治療藥!", - "2": "我火熱的寶可夢將所有挑戰者都焚燒殆盡!", - "3": "準備好玩火吧!" - }, - "victory": { - "1": "我已經焚燒殆盡了!甚至連灰燼都沒有留下!", - "2": "我沒有把火焰煽得足夠高嗎?", - "3": "我燃盡了……但這讓我進步的動力燃燒得更旺了!" - }, - "defeat": { - "1": "我的熊熊烈火無法被撲滅!", - "2": "我的寶可夢因這次勝利而變得更加強大!", - "3": "哈!我的激情燃得比你的更熱烈!" - } - }, - "giovanni": { - "encounter": { - "1": "我,火箭隊的領袖,\n會讓你的世界感受到痛苦!", - "2": "我在這裡的訓練在我再次面對老朋友之前至關重要。", - "3": "我認為你還沒有準備好迎接你即將經歷的失敗!" - }, - "victory": { - "1": "什麼!我輸了?! 我沒什麼可和你說的!", - "2": "哼……你永遠無法理解我希望實現的目標。", - "3": "這次失敗只是暫時的。$我將找準時機,讓火箭隊浴火重生。" - }, - "defeat": { - "1": "不知自己幾斤幾兩,\n說明你仍然只是一個孩子。", - "2": "不要再試圖干涉我。", - "3": "我希望你明白挑戰我是多麼愚蠢。" - } - }, - "roxanne": { - "encounter": { - "1": "您能否展示一下您是如何戰鬥的麼?", - "2": "你可以和更多訓練師戰鬥來學到很多東西。", - "3": "哦,被你抓到我正在用功了~$你想戰鬥嗎?" - }, - "victory": { - "1": "哦,看來我輸了。$我明白了。", - "2": "看來我在戰鬥方面還有更多東西要學。", - "3": "我會把今天在這裡學到的東西銘記於心。" - }, - "defeat": { - "1": "從我們的對戰中,我學到了很多。$希望你也是。", - "2": "我期待再次與你戰鬥。$希望你能運用在此學到的東西。", - "3": "我憑借我所學到的一切贏得了勝利。" - } - }, - "brawly": { - "encounter": { - "1": "哦,夥計,挑戰者!$讓我看看你的能耐!", - "2": "你看起來很厲害嘛。$來對戰吧!", - "3": "是時候掀起風暴了!$我們上吧!" - }, - "victory": { - "1": "哦哇,你把我沖走了!", - "2": "你駕馭了我的海浪,把我打敗了!", - "3": "我覺得我就像是在武鬥洞窟裡迷路了!" - }, - "defeat": { - "1": "哈哈,我駕馭了大浪!$有時間再挑戰我吧。", - "2": "再和我一起衝浪吧!", - "3": "就像潮水的漲落,\n我希望你也能再來挑戰我。" - } - }, - "wattson": { - "encounter": { - "1": "是時候被電擊了!$哈哈哈!", - "2": "我要讓火星子飛蹦!$哈哈哈!", - "3": "我希望你帶了麻痺藥!$哇哈哈哈!" - }, - "victory": { - "1": "看來我的電量用完了!$哇哈哈哈!", - "2": "你完全接地了是吧!$哇哈哈哈!", - "3": "謝謝你給我電了一下!$哇哈哈哈!" - }, - "defeat": { - "1": "電充充滿,有時間再挑戰我吧!$哇哈哈哈!", - "2": "我希望你覺得我們的戰鬥激情似電!$哇哈哈哈!", - "3": "你沒想到我贏了吧?$哇哈哈哈!" - } - }, - "flannery": { - "encounter": { - "1": "很高興見到你!等等,不對……$我要粉碎你!", - "2": "我才當道館主沒多久,\n但我會讓你灰飛煙滅!", - "3": "是時候展示爺爺教給我的招式了!來對戰吧!" - }, - "victory": { - "1": "你讓我想起了我的爺爺……$難怪我輸了。", - "2": "我是不是太努力了?$我應該放鬆,不能太上頭了。", - "3": "失敗才不會嗆到我。$是時候重新點燃訓練了!" - }, - "defeat": { - "1": "我希望我讓祖父感到驕傲了……$有時間我們再戰鬥吧。", - "2": "我……我簡直不敢相信我贏了!$按照自己的方式做事奏效了!", - "3": "早點用炙熱的招式再來交手吧!" - } - }, - "norman": { - "encounter": { - "1": "我沒想到你能一路來到這裡。$我們來對戰吧。", - "2": "作為道館主,我會盡一切努力贏得勝利。$我們開始吧!", - "3": "你最好全力以赴。$對戰的時候到了!" - }, - "victory": { - "1": "我輸給了你……?$但規則就是規則。", - "2": "難道我不該從城都搬家嗎……?", - "3": "我不敢相信。$這是一場好對戰。" - }, - "defeat": { - "1": "我們都盡力了。$希望我們不久之後能再對戰。", - "2": "你應該嘗試挑戰我的孩子。$可能會有一些收穫!", - "3": "謝謝你精彩的戰鬥。$下次好運。" - } - }, - "winona": { - "encounter": { - "1": "我一直在天空中翱翔尋找獵物…$而你就是我的目標!", - "2": "不管戰況如何,我都會和我的飛行寶可夢$以優雅的姿態獲勝。來戰鬥吧!", - "3": "我希望你不怕高。$我們一起升上高空吧!" - }, - "victory": { - "1": "你是我見過的第一位比我更有風度的訓練師。$打的非常出色。", - "2": "哦,我的飛行系寶可夢都已經墜落了!$好吧。", - "3": "儘管我倒下了,我的寶可夢將繼續翱翔!" - }, - "defeat": { - "1": "我與我的飛行系寶可夢,\n將永遠優雅地起舞!", - "2": "我希望你喜歡我們的演出。$我們優雅的舞蹈已經落幕。", - "3": "你願意再來觀看我們優雅的編舞嗎?" - } - }, - "tate": { - "encounter": { - "1": "嘿嘿嘿…$看到我沒和妹妹在一起,很驚訝麼?", - "2": "我可以讀懂你在想什麼…$你想要戰鬥!", - "3": "你如何擊敗一個…$讀懂你一舉一動的人?" - }, - "victory": { - "1": "贏不了啊…$我想小南了…", - "2": "你和寶可夢之間的聯繫比我們更強。", - "3": "如果我和小南聯手,我們會贏的。$我們可以了解彼此的想法!" - }, - "defeat": { - "1": "我和我的寶可夢無與倫比!", - "2": "如果你連我都打不過,\n你肯定也打不過小南。", - "3": "這多虧了我和小南的嚴格訓練。$我可以與寶可夢一心同體。" - } - }, - "liza": { - "encounter": { - "1": "呵呵呵…$看到我沒和哥哥一起,很驚訝嗎?", - "2": "我可以讀懂你渴望什麼…$你想戰鬥,不是嗎?", - "3": "你如何擊敗一個…$與寶可夢們一心同體的人?" - }, - "victory": { - "1": "贏不了啊…$我想小楓了…", - "2": "你和寶可夢之間的聯繫…$比我強。", - "3": "如果我和小楓在一起,我們會贏的。$我們甚至可以接上彼此的話!" - }, - "defeat": { - "1": "我和我的寶可夢勢不可擋。", - "2": "如果你連我都打不過,\n你肯定也打不過小楓。", - "3": "這多虧了我和小楓的嚴格訓練。$我可以與我的寶可夢一心同體。" - } - }, - "juan": { - "encounter": { - "1": "別害羞啊。$我們來戰鬥吧!", - "2": "啊哈哈哈,敬請期待\n我和水屬性寶可夢的盛大演出!", - "3": "我就是正在逼近的風暴!$你能經受住考驗嗎?", - "4": "請你見證我們的表演。$由我和寶可夢共同創造的宏偉水之幻境!" - }, - "victory": { - "1": "你可能是一個能挑戰米可利的天才!", - "2": "我專注於優雅,而你刻苦鍛鍊。$你能擊敗我是很正常的。", - "3": "啊哈哈哈!$好吧,這次你贏了。", - "4": "從你身上,我感受到了技巧的光輝,\n它將戰勝一切。" - }, - "defeat": { - "1": "寶可夢和我創造的水之幻境,讓我取得了勝利。", - "2": "啊哈哈哈,我贏了,你輸了。", - "3": "要我把我的服裝借給你嗎?\n可能能幫到你對戰啊!$啊哈哈哈,我開玩笑的!", - "4": "我是贏家!也就是說,你輸了。" - } - }, - "crasher_wake": { - "encounter": { - "1": "極限! 極限! 看好了!$極限假面…就此…登場!", - "2": "極限! 極限! 極限假面!", - "3": "我是滔滔巨浪,將你沖走!" - }, - "victory": { - "1": "我真是笑得合不攏嘴啊!$哈哈哈!那真是太有趣了!", - "2": "呼哇!結束收尾了!$我該怎麼說呢……$我還想再對戰!我還想再繼續戰鬥!", - "3": "啊啊啊啊啊!?" - }, - "defeat": { - "1": "耶!就是這樣!", - "2": "我贏了,但我還想要更多!\n我還想再更多地戰鬥!", - "3": "再見!" - } - }, - "falkner": { - "encounter": { - "1": "我將向你展示華麗的飛行寶可夢真正的力量!", - "2": "風啊,伴我同行!", - "3": "爸爸!我希望你能在空中注視著我的戰鬥!" - }, - "victory": { - "1": "明白了……我會禮貌地退場。", - "2": "輸了就是輸了。你確實很強大。", - "3": "…行吧! 嗯, 我輸了。" - }, - "defeat": { - "1": "爸爸!我用你珍愛的飛行寶可夢贏了……", - "2": "飛行系寶可夢才是最強的!", - "3": "感覺我正在追趕上我的父親!" - } - }, - "nessa": { - "encounter": { - "1": "無論你的小腦瓜子在搞什麼陰謀詭計,$我和我的搭檔都會確保它石沉大海。", - "2": "我來這裡可不是為了閒聊,\n而是為了贏!", - "3": "這是我的寶可夢給你的一點小禮物……\n我希望你能接受!" - }, - "victory": { - "1": "你和你的寶可夢太過分了……", - "2": "怎麼……?這怎麼可能?!", - "3": "我完全被沖走了!" - }, - "defeat": { - "1": "洶湧的海浪再次襲來!", - "2": "是時候乘風破浪,取得勝利了!", - "3": "誒嘿嘿!" - } - }, - "melony": { - "encounter": { - "1": "我不會手下留情!", - "2": "好吧,我想我們應該開始了。", - "3": "我會把你凍得結結實實的!" - }, - "victory": { - "1": "你……你可厲害了,是不是?", - "2": "如果你找到瑪瓜,一定要好好教訓他,好嗎?", - "3": "你的破冰方式有點過於直接了呢……" - }, - "defeat": { - "1": "現在你知道戰鬥有多殘酷了吧?", - "2": "嘿!看來我又贏了!", - "3": "你是在保留實力嗎?" - } - }, - "marlon": { - "encounter": { - "1": "你看起來很強!來吧!讓我們開始吧!", - "2": "我的強大像大海一樣無邊無際。$你會被我沖走,絕對的。", - "3": "哦豁,由我來面對你!這可不得了咯!" - }, - "victory": { - "1": "你太厲害了!\n你培養了一些非常強大的寶可夢啊,$你已經掌握了訓練師的精髓!", - "2": "你不僅僅是看起來,\n你是真的強,真的!$呃,我也被沖走了!", - "3": "你像兇猛的波浪一樣強壯!" - }, - "defeat": { - "1": "你很強,但這還不足以動搖大海,懂?", - "2": "嘻!看來我又贏了!", - "3": "甜蜜的勝利!" - } - }, - "shauntal": { - "encounter": { - "1": "打擾了。你是挑戰者,對嗎?$我是四天王的幽靈系寶可夢使用者,$婉龍,我將是你的對手。", - "2": "我非常喜歡描寫來到這裡的訓練師,\n以及他們訓練的寶可夢。$我可以用你和你的寶可夢作為主題嗎?", - "3": "每個與寶可夢相處的人都有故事要講。$接下來要講的故事是怎樣的呢?" - }, - "victory": { - "1": "哇。我驚呆了!", - "2": "對…對不起!我必須先向我的寶可夢道歉……$都是因為我讓你們有了不好的經歷,真的很抱歉!", - "3": "你要知道,我仍然是四天王之一!" - }, - "defeat": { - "1": "額呵呵。", - "2": "給了我下一部小說的絕佳素材!", - "3": "就這樣,又一篇故事來到尾聲……" - } - }, - "marshal": { - "encounter": { - "1": "我的師傅,阿戴克,\n看到了你作為訓練師的潛力,$對你很有興趣。$我要來考驗你——挖掘你力量的極限。\n丹田發力!", - "2": "勝利,決定性的勝利,\n正是我所求!挑戰者,我來了!", - "3": "在我的心中,我尋求著成為戰士的力量,\n克服自身的所有弱點!$以我的信念,取勝!" - }, - "victory": { - "1": "呼!幹得好!", - "2": "不要停止戰鬥,追求更高的目標!", - "3": "你和你寶可夢展現的力量\n給我留下了深刻的印象……" - }, - "defeat": { - "1": "嗯…", - "2": "這真是場好戰鬥。", - "3": "哈啊!哈啊!嗨呀啊!" - } - }, - "cheren": { - "encounter": { - "1": "你讓我想起了一位老朋友。$這讓我對這場寶可夢戰鬥感到興奮!", - "2": "不考慮清楚這一點,\n寶可夢對戰就沒有了意義。$這就是失去了和寶可夢一同戰鬥的意義。", - "3": "我的名字是黑連!我是道館館主,\n也是老師!$很高興認識你。" - }, - "victory": { - "1": "謝謝……我又能發現自己的不足了。", - "2": "謝謝…接近理想的道路…我好像隱約看到了。", - "3": "嗯……這值得思考。" - }, - "defeat": { - "1": "作為道館館主,我要成為你要跨越的壁壘!", - "2": "好吧!", - "3": "正因為有寶可夢,我們才能走到這裡。$為什麼寶可夢會幫助我們,\n這個恐怕不僅是寶可夢與訓練家…$而是生命與生命之間的問題。" - } - }, - "chili": { - "encounter": { - "1": "咿呀!是時候玩火了!!我是三兄弟中最強的!", - "2": "嗒噠!如火似焰的伯特——就是我\n——你接下來的對手!", - "3": "我將向你展示,\n我和我熾熱的火系寶可夢的能耐!" - }, - "victory": { - "1": "被你幹掉了。我……燃盡了……", - "2": "哇吼!你燃起來了!", - "3": "啊!被你幹碎了!" - }, - "defeat": { - "1": "我燃起來啦!和我玩兒,你就會被燙傷!", - "2": "你要是玩兒火,就會被燙傷!", - "3": "我說,拜託,\n你的對手是我,沒機會贏的!" - } - }, - "cilan": { - "encounter": { - "1": "無關個人情感…也不會有艱難的感受…$我和我的草屬性寶可夢會…$呃…不管什麼樣的對手我們都會應戰的。", - "2": "所以,呃,如果你願意的話,我會,\n呃,盡我所能做好,呃,你知道的,你的對手。", - "3": "好吧……所以,我是天桐,\n我喜歡草屬性寶可夢。" - }, - "victory": { - "1": "呃……已經結束了嗎?", - "2": "…真是太意外了。你真…強。$看起來就算是伯特或寇恩都贏不了你…", - "3": "…嗯。看起來我來的…不是時候?" - }, - "defeat": { - "1": "哈?我贏了?", - "2": "我想…$我想我贏了,因為我一直在和我的兄弟伯特和寇恩競爭,\n我們都變得更強了。", - "3": "…這…這是一次非常嚇人的經歷呢…" - } - }, - "roark": { - "encounter": { - "1": "我需要看看你作為訓練師的潛力。$還有,我要看看與你並肩作戰的寶可夢的堅韌!", - "2": "來吧!這些是我的岩石系寶可夢,我的驕傲!", - "3": "岩石屬性寶可夢就是最強的!", - "4": "我要看看你作為訓練師的潛力。$還要看看與你並肩作戰的寶可夢的堅韌!" - }, - "victory": { - "1": "什麼?不可能!我強化的寶可夢們!", - "2": "……我大腦過載了。$下次邀請你參加地下的化石挖掘比賽。", - "3": "有你這種技術,贏得勝利是很正常的。", - "4": "什麼?!連這也不夠?", - "5": "我搞砸了。" - }, - "defeat": { - "1": "看?我為我的搖滾戰鬥風格感到驕傲!", - "2": "謝謝!這場戰鬥給了我自信,$我感覺能夠打敗我父親了!", - "3": "我感覺就像我砸穿了一塊頑石!" - } - }, - "morty": { - "encounter": { - "1": "只要我再多努力一點,我就能看到我遇到傳說中的寶可夢的未來!$你會幫助我達到那個水平!", - "2": "據說,彩虹色的寶可夢會\n出現在真正強大的訓練師面前。 $我一直相信著這個美麗的傳說,\n所以,從出生開始,\n就在這裡進行著秘密的修行。$因為這樣,其他人看不到的東西\n我也能夠看得到…$我看到的,是那個將傳說中的寶可夢\n召喚到這片大地上的人的影子。$我一直相信,那就是我自己!\n希望你也能助我一臂之力!", - "3": "無論你相信還是不相信,神秘的力量確實存在。", - "4": "你可以見證我訓練的成果。", - "5": "你必須讓你與寶可夢的靈魂合二為一。你能做到嗎?", - "6": "嘿,你想成為我訓練的一部分嗎?" - }, - "victory": { - "1": "我還不夠好……", - "2": "我明白了…你的旅程…去了遙遠的地方,你見過的比我多得多。$我羨慕你…", - "3": "這怎麼可能……", - "4": "我認為我們的潛力沒什麼不同。$但是,我覺得你並不簡單,似乎還有什麼……", - "5": "我想我需要更多的訓練。", - "6": "那太遺憾了" - }, - "defeat": { - "1": "我又向前邁進了一步。", - "2": "呵呵呵……", - "3": "什…麼?!那還不夠?", - "4": "我感覺就像我砸穿了一塊頑石!", - "5": "哈哈哈啊!", - "6": "我知道我會贏!" - } - }, - "crispin": { - "encounter": { - "1": "我想贏,所以接下來我正要贏!", - "2": "我想對戰就對戰!懂嗎!就應該這樣!" - }, - "victory": { - "1": "我想贏……但我還是輸了!", - "2": "我輸了……因為我贏不了!" - }, - "defeat": { - "1": "嘿,等一下。我是不是贏了?$我覺得我贏了!太滿足了!", - "2": "哇哦!那太棒了!" - } - }, - "amarys": { - "encounter": { - "1": "我想幫助某個人。因此,我不能輸。$…我們的戰鬥現在開始。" - }, - "victory": { - "1": "我還不夠,我明白了。" - }, - "defeat": { - "1": "勝利屬於我。打得好。" - } - }, - "lacey": { - "encounter": { - "1": "我將用我平時的隊伍\n作為四天王的一員面對你。" - }, - "victory": { - "1": "打得真好呀~" - }, - "defeat": { - "1": "讓我們為你寶可夢的努力給予熱烈的掌聲!" - } - }, - "drayton": { - "encounter": { - "1": "哥們,我喜歡椅子。\n你喜歡椅子嗎?簡直是救星。$我不明白為什麼大家不一直坐著。\n站著多累人!" - }, - "victory": { - "1": "我早該想到的!" - }, - "defeat": { - "1": "嘿嘿嘿!別介意我,\n我只是在這裡小贏一下。$如果你不開心,我懂,\n但別因為我對烏栗發火,OK?" - } - }, - "ramos": { - "encounter": { - "1": "我用那些強壯的植物\n蓋出來的遊樂場精彩嗎?$它們的力量象徵著我這個園丁兼道館館主的實力,\n你真的確定能夠與之抗衡嗎?" - }, - "victory": { - "1": "你信任你的寶可夢,\n它們也信任你…不錯的戰鬥,小豆芽。" - }, - "defeat": { - "1": "呵呵呵…確實,\n脆弱的小草甚至能穿透混凝土。" - } - }, - "viola": { - "encounter": { - "1": "敗陣時的後悔,勝利的瞬間…$都是最棒的影象!很好呀,很好呀!$那麼來吧!", - "2": "我的鏡頭總會聚焦在勝利上,\n我不會讓任何事情破壞這個畫面!" - }, - "victory": { - "1": "你和你的寶可夢向我展示了一個全新的鏡頭機位!\n很好呀,很好呀!", - "2": "你通過鏡頭看到的世界,\n和你與寶可夢並肩作戰時看到的世界…$視角不同,即使是同一個世界看起來也完全不同。" - }, - "defeat": { - "1": "我勝利那一刻的照片,\n將是一個真正的贏家,對吧!", - "2": "是的!我拍了些很棒的照片!" - } - }, - "candice": { - "encounter": { - "1": "向小菘我挑戰嗎?好啊!\n我就是在等待強者$但是我也氣勢高昂,很強哦?", - "2": "寶可夢也好,時尚也好,戀愛也好,\n無論做什麼都氣勢高昂!$就說到這兒吧,讓你見識一下我的氣勢,\n要做好覺悟哦!" - }, - "victory": { - "1": "好厲害!我有點尊敬你了。", - "2": "好厲害!我有點尊敬你了!$嗯,感覺是被你的氣勢給壓倒了。" - }, - "defeat": { - "1": "你的氣勢我看到了,但我還是不會輸的!", - "2": "怎麼樣?小菘我的氣勢!\n寶可夢們的氣勢滿滿哦!" - } - }, - "gardenia": { - "encounter": { - "1": "你身上有一種勝利的氣息。\n那麼不管怎樣,$這應該會是場有趣的戰鬥。\n讓我們對戰吧!" - }, - "victory": { - "1": "太棒了!你可擅長對戰了,不是嗎?" - }, - "defeat": { - "1": "太好了!我的寶可夢和我都很棒!" - } - }, - "aaron": { - "encounter": { - "1": "好的!讓我來接受你的挑戰!" - }, - "victory": { - "1": "戰鬥是一件深刻而複雜的事情……" - }, - "defeat": { - "1": "戰勝一位四天王並不容易。" - } - }, - "cress": { - "encounter": { - "1": "沒!錯!你必須面對\n與我和我高貴的水屬性的戰鬥!" - }, - "victory": { - "1": "輸了?我?我不敢相信。" - }, - "defeat": { - "1": "當你的對手是我時,這是必然的結果。" - } - }, - "allister": { - "encounter": { - "1": "我是歐尼奧。$我…我來了……" - }, - "victory": { - "1": "我差點被嚇得丟了面具…那真是…$哇。我可以看清你真正的實力。" - }, - "defeat": { - "1": "這真是太棒了!" - } - }, - "clay": { - "encounter": { - "1": "咳咳! 讓我好等,不是嗎,孩子?$好吧,是時候看看你能做到什麼了!" - }, - "victory": { - "1": "真是的……我先說好,\n我可沒有手下留情。" - }, - "defeat": { - "1": "最重要的是輸掉的時候該怎麼辦。$只要你能在失敗中找到教訓,\n就能夠不斷地成長!" - } - }, - "kofu": { - "encounter": { - "1": "我會給你上一整道水系寶可夢大餐!\n但別真吃了它們!" - }, - "victory": { - "1": "吃了嗎!你真是活力又新鮮啊,\n不是嗎!$就是有點太鮮活了!" - }, - "defeat": { - "1": "你要再來找我,聽見了嗎?" - } - }, - "tulip": { - "encounter": { - "1": "請讓我運用我的化妝技巧,$讓你可愛的小寶可夢變得更美麗!" - }, - "victory": { - "1": "你妝點的力量宛如魔法加固,\n完全沖洗不掉啊。" - }, - "defeat": { - "1": "你知道嗎,在我這行,\n那些沒天賦的人往往會很快消失,$再也不會被提起。" - } - }, - "sidney": { - "encounter": { - "1": "你給我的印象不錯,\n我猜這會是一場精彩的對戰。$很棒!看起來真的很棒!$你和我,讓我們享受一場\n只能在這裡上演的戰鬥吧!" - }, - "victory": { - "1": "嗯,你覺得怎樣?我輸了!\n嗯,不過這很有趣,所以無所謂啊。" - }, - "defeat": { - "1": "別介意,OK?" - } - }, - "phoebe": { - "encounter": { - "1": "過去我在修行時得到了\n能與幽靈寶可夢親密交流的能力。$沒錯,我和寶可夢之間\n有著強烈的羈絆。$那麼,來試試看你有沒有能力\n傷到我的寶可夢吧!" - }, - "victory": { - "1": "哦,天呀。我輸了。" - }, - "defeat": { - "1": "我期待著下次再和你戰鬥!" - } - }, - "glacia": { - "encounter": { - "1": "我在這兒見到的盡是些\n弱不禁風的訓練家和寶可夢。$你又如何呢?如果你能讓我不得不用\n上全力的話就再好不過了!" - }, - "victory": { - "1": "你和你的寶可夢…\n你們的靈魂燃燒得多麼熱烈啊!$這股激烈的熱能仿佛能征服一切。\n$難怪我的冰屬性技巧也奈何不了你了。" - }, - "defeat": { - "1": "一場充滿激情的戰鬥,確實。" - } - }, - "drake": { - "encounter": { - "1": "對於我們這些將寶可夢視為\n同伴一同戰鬥的訓練家來說,$你知道怎樣才能贏得勝利嗎?\n你知道獲得勝利的條件嗎?$如果你不知道,\n那麼你永遠也無法戰勝我!" - }, - "victory": { - "1": "幹得漂亮,就是這樣。" - }, - "defeat": { - "1": "我在這場戰鬥中全力以赴了!" - } - }, - "wallace": { - "encounter": { - "1": "你的氣質變了,\n我能感覺到這一點。$現在,把你和你的寶可夢\n的力量展現給我看吧。$作為回禮,就由我和我的寶可夢\n演出一場水之幻影吧!" - }, - "victory": { - "1": "精彩。此刻,我能從你身上感覺到\n身為寶可夢訓練家的可靠與高貴。$我真榮幸能遇到你和你的寶可夢。" - }, - "defeat": { - "1": "偉大的幻影!" - } - }, - "lorelei": { - "encounter": { - "1": "只要能讓我用冰屬性寶可夢,\n就絕對沒人能贏得過我!\n能凍住對方可是很厲害的哦!$因為如果被凍住,你的寶可夢就無法動彈了!\n啊哈哈!你做好覺悟了吧!" - }, - "victory": { - "1": "你怎麼敢!" - }, - "defeat": { - "1": "一旦你被凍結,你就什麼都做不了。" - } - }, - "will": { - "encounter": { - "1": "我曾經環遊世界,\n日以繼夜地做著超能力寶可夢的修行之旅。$我會不斷變強!沒理由會在這裡輸掉!" - }, - "victory": { - "1": "……不會吧……" - }, - "defeat": { - "1": "就差一點。\n我想知道你缺少了什麼。" - } - }, - "malva": { - "encounter": { - "1": "我的內心可是一直燃燒著呢。$燃燒著對你的怒火!" - }, - "victory": { - "1": "挑戰者出色地擊敗了四天王之一,帕琦拉。" - }, - "defeat": { - "1": "真開心啊,能將你徹底粉碎!" - } - }, - "hala": { - "encounter": { - "1": "老哈拉讓你放開嗓子!" - }, - "victory": { - "1": "我能感受到你在旅途中所獲得的力量。" - }, - "defeat": { - "1": "啊哈哈。多麼有趣的戰鬥。" - } - }, - "molayne": { - "encounter": { - "1": "我將隊長的位置讓給了我的表弟馬瑪內,\n但我對自己的能力很有信心。 $我的力量就像超新星一樣!" - }, - "victory": { - "1": "我發現了一個有趣的訓練師對手!" - }, - "defeat": { - "1": "啊哈哈。多麼有趣的戰鬥。" - } - }, - "rika": { - "encounter": { - "1": "我要對你手下留情,但……騙你的啦! $好好動腦!" - }, - "victory": { - "1": "不錯,小子。" - }, - "defeat": { - "1": "啊哈哈哈哈!你真的很特别,小子!" - } - }, - "bruno": { - "encounter": { - "1": "我們將用勢不可擋的力量磨滅你!呼哈!" - }, - "victory": { - "1": "為什麼?我怎麼會輸?" - }, - "defeat": { - "1": "你可以隨意挑戰我,\n但結果永遠不會改變!" - } - }, - "bugsy": { - "encounter": { - "1": "我是阿筆!\n對蟲系寶可夢的熟悉不會輸給任何人的!" - }, - "victory": { - "1": "哇,太棒了!\n你是個寶可夢專家!$我的研究還沒有完成。\n好吧,你贏了。" - }, - "defeat": { - "1": "謝謝!多虧了我們的戰鬥,\n我的研究也取得了進展!" - } - }, - "koga": { - "encounter": { - "1": "哇哈哈哈哈!$寶可夢不僅僅是關於蠻力,拭目以待吧!" - }, - "victory": { - "1": "啊!你證明了自己!" - }, - "defeat": { - "1": "懂不懂要對忍者的技巧心神畏懼?" - } - }, - "bertha": { - "encounter": { - "1": "啊,讓老婆婆看看你學到了什麼?" - }, - "victory": { - "1": "好吧,親愛的孩子,\n不得不說,那令人印象深刻。$你的寶可夢相信你並盡最大努力為你贏得勝利。$儘管我輸了,\n我也止不住笑呢!" - }, - "defeat": { - "1": "哈哈哈!看來老婆婆我贏了!" - } - }, - "lenora": { - "encounter": { - "1": "那麼,挑戰者,讓我來研究$你與你精心養育的寶可夢要如何戰鬥!" - }, - "victory": { - "1": "我關於你的理論是正確的。$你不僅僅是有天賦……你很努力!\n我向你致敬!" - }, - "defeat": { - "1": "啊哈哈!如果你輸了,\n一定要分析原因,$並在下一場戰鬥中運用那些知識!" - } - }, - "siebold": { - "encounter": { - "1": "只要我活著,我將不斷努力尋求終極美食…$以及和最強的對手戰鬥!" - }, - "victory": { - "1": "您的事蹟,我志米銘記在心。" - }, - "defeat": { - "1": "我們的寶可夢戰鬥就像我靈魂的養料。\n它將讓我繼續前進。$這就是我將向你表示敬意的方式,\n感謝你在戰鬥中全力以赴!" - } - }, - "roxie": { - "encounter": { - "1": "準備好了嗎!我要給你上一課!" - }, - "victory": { - "1": "夠野的!你的想法比我的還要毒!" - }, - "defeat": { - "1": "嘿,拜託!認真點!\n你要加把勁啊!" - } - }, - "olivia": { - "encounter": { - "1": "沒什麼開場白。\n是時候和我麗姿,戰鬥了!" - }, - "victory": { - "1": "真的很可愛……你和你的寶可夢……" - }, - "defeat": { - "1": "嗯哼。" - } - }, - "poppy": { - "encounter": { - "1": "哦!你想和我進行寶可夢對戰麼?" - }, - "victory": { - "1": "嗚哇?!嘛……" - }, - "defeat": { - "1": "耶!我做到了!我擊~敗~了~你!\n你可以來…打…復仇之戰?$只要你想,隨時來打復仇之戰吧!" - } - }, - "agatha": { - "encounter": { - "1": "寶可夢是用來戰鬥的!我會讓你看看真正訓練家的戰鬥!" - }, - "victory": { - "1": "哦,我的天!你真是個特別的孩子!" - }, - "defeat": { - "1": "哈哈哈,這才是正確的戰鬥方式!" - } - }, - "flint": { - "encounter": { - "1": "希望你已經熱身完畢,\n因為這裡即將大爆炸!" - }, - "victory": { - "1": "不可思議!$你的動作如此火熱,讓我看起來溫吞吞的!" - }, - "defeat": { - "1": "嗯?就這嗎?\n我覺得你得再激情點。" - } - }, - "grimsley": { - "encounter": { - "1": "一無所有,\n或者,贏下所有!" - }, - "victory": { - "1": "一旦失敗,\n就意味著失去一切……$下一次我要追尋勝利!" - }, - "defeat": { - "1": "如果有人贏了,\n和他對戰的人就會輸。" - } - }, - "caitlin": { - "encounter": { - "1": "當花兒綻開時、我便出現。\n成為你在等待的人…$你似乎同時具備實力和善意$我所尋找的是擁有卓越力量的對手…$請用出你的全力吧!" - }, - "victory": { - "1": "我和我的寶可夢學到了很多!非常感謝。" - }, - "defeat": { - "1": "我渴望以優雅的姿態取得勝利。" - } - }, - "diantha": { - "encounter": { - "1": "與你的寶可夢對戰\n讓你充滿了未來的希望…$說真的,這讓我更有活力地面對新的一天,確實如此!" - }, - "victory": { - "1": "擁有高尚靈魂的訓練家和寶可夢的身姿,\n讓我的心激烈地震顫…" - }, - "defeat": { - "1": "哦,太棒了!你覺得怎麼樣?\n我的隊伍很酷吧~對吧?" - } - }, - "wikstrom": { - "encounter": { - "1": "年輕的挑戰者,幸會!\n我乃是著名的鋼鐵之刃,公爵雁鎧! $讓我們開始戰鬥吧!預備!" - }, - "victory": { - "1": "輝煌!你與你尊貴的\n寶可夢之間的信任居然勝過了我!" - }, - "defeat": { - "1": "哦哦哦!這是怎麼回事,\n我的心止不住地在震顫! $與如此有價值的對手的勝利\n讓我的靈魂飛翔——我心翱翔!" - } - }, - "acerola": { - "encounter": { - "1": "對戰只是找個樂子!來吧,我來會會你!" - }, - "victory": { - "1": "我……我說不出話!你是怎麼做到的?!" - }, - "defeat": { - "1": "哈哈!真是嚇人倒怪的勝利呀!" - } - }, - "larry_elite": { - "encounter": { - "1": "……你好,我是青木。$麻煩的是我還要兼任四天王。" - }, - "victory": { - "1": "好吧,我們翅膀下的疾風止於你這了啊…" - }, - "defeat": { - "1": "是時候和老闆開會了。" - } - }, - "lance": { - "encounter": { - "1": "我一直在等你。讓我來試試你有幾斤幾兩。", - "2": "我知道你能走這麼遠。讓我們開始吧。" - }, - "victory": { - "1": "被你拿下了啊。你太出色了!", - "2": "我從沒想到會有另一個訓練師打敗我……$我很驚訝。" - }, - "defeat": { - "1": "就差一點。想再試一次嗎?", - "2": "我沒覺得你弱,別因此困擾。" - } - }, - "karen": { - "encounter": { - "1": "我是梨花,你想和我的惡屬性寶可夢$來一場對決嗎?", - "2": "我和你見過的那些人不一樣。", - "3": "你組建了一支迷人的隊伍。$我們的戰鬥應該會是場精彩的比賽。" - }, - "victory": { - "1": "不!我贏不了。你是怎麼做到變得這麼強的?", - "2": "我不會偏離我所選擇的道路。", - "3": "冠軍正期待與你見面。" - }, - "defeat": { - "1": "意料之中。", - "2": "嗯,還算有點意思。", - "3": "隨時歡迎你來找我。" - } - }, - "milo": { - "encounter": { - "1": "看起來你顯然很了解寶可夢。$這會是一場激烈的戰鬥!$如果我想贏,我得讓我的寶可夢極巨化!" - }, - "victory": { - "1": "草的力量凋謝了…多麼不可思議的挑戰者!" - }, - "defeat": { - "1": "這必將讓你大吃一驚。" - } - }, - "lucian": { - "encounter": { - "1": "請稍等,我正在讀的書\n正要進入最精彩的部分…$英雄獲得了一把神秘之劍,\n即將面臨最後的考驗…啊,算了。$既然你能走到這一步,\n我就不說這些了,和你戰鬥吧。$讓我看看你是否\n能像我書中的主角一樣榮耀!" - }, - "victory": { - "1": "我明白了…看來你把我逼入了絕境。" - }, - "defeat": { - "1": "我得維護我的名譽。" - } - }, - "drasna": { - "encounter": { - "1": "你很厲害吧,\n而且相當相當地厲害呢。$我很高興,能和這樣的對手交手,\n就能更好地培養寶可夢們了。" - }, - "victory": { - "1": "哎呀,就這麼結束了,\n不好意思,可以的話歡迎再來。" - }, - "defeat": { - "1": "怎麼會這樣?" - } - }, - "kahili": { - "encounter": { - "1": "那麼,既然來了……\n要不來看看今天的風更青睞誰?$是你……還是我?" - }, - "victory": { - "1": "讓我這個四天王都感到沮喪,$看來你的力量貨真價實。" - }, - "defeat": { - "1": "那真是一記好球!" - } - }, - "hassel": { - "encounter": { - "1": "讓你親身感受一下什麼叫做猛烈的對戰氣息吧!" - }, - "victory": { - "1": "這次幸運之神對我微笑了,但是……$誰知道我下次會不會這麼幸運。" - }, - "defeat": { - "1": "那可真厲害!" - } - }, - "blue": { - "encounter": { - "1": "能走到這裡,你一定非常優秀。" - }, - "victory": { - "1": "我只輸給過他,現在又是你……?$你問他是誰?哈哈哈……" - }, - "defeat": { - "1": "看吧?我的實力就是我來到這裡的原因。" - } - }, - "piers": { - "encounter": { - "1": "準備好和我的隊伍來個大狂歡吧!$尖釘鎮,是時候嗨起來了!" - }, - "victory": { - "1": "我和我的隊伍已經盡力了。$找個時間再來對戰吧……" - }, - "defeat": { - "1": "我的喉嚨因為呼喊而變得沙啞……$但這是一場激動人心的戰鬥!" - } - }, - "red": { - "encounter": { - "1": "…!" - }, - "victory": { - "1": "…?" - }, - "defeat": { - "1": "…!" - } - }, - "jasmine": { - "encounter": { - "1": "哦……你的寶可夢給人印象深刻。$我想我會享受這場戰鬥的。" - }, - "victory": { - "1": "你真的很強。我也得加把勁了。" - }, - "defeat": { - "1": "我從沒想到會贏。" - } - }, - "lance_champion": { - "encounter": { - "1": "我依舊是冠軍,所以我不會留情的。" - }, - "victory": { - "1": "這就是新冠軍的崛起。" - }, - "defeat": { - "1": "我成功捍衛了冠軍的頭銜。" - } - }, - "steven": { - "encounter": { - "1": "告訴我…你在和寶可夢的旅途過程中看到了什麼?$邂逅了那麼多的訓練師,\n你都會有什麼樣的感受呢?$在這豐饒的大地上旅行…\n有沒有喚醒你內在的某種東西?$你不如就用一場對戰來告訴我你心中的答案吧。$我也會和我的寶可夢用這種方式\n將我們所知道的告訴你的!" - }, - "victory": { - "1": "沒想到連我這個聯盟冠軍\n都敗在你的手上了呢…" - }, - "defeat": { - "1": "正如我所期待的。謝謝!" - } - }, - "cynthia": { - "encounter": { - "1": "我,竹蘭,接受你的挑戰!\n我是絕不會手軟的!" - }, - "victory": { - "1": "無論對戰多麼有趣,\n它總會有結束的時候……" - }, - "defeat": { - "1": "即使你輸了,\n也永遠不要失去你對寶可夢的熱愛。" - } - }, - "iris": { - "encounter": { - "1": "你知道嗎?\n我真的很期待和強大的訓練師進行認真的戰鬥!$我的意思是,來吧!\n到達這裡的是那些渴望勝利的訓練師,$他們與經歷過無數艱難\n戰鬥的寶可夢一起戰鬥!$如果我和那樣的人戰鬥,\n不僅我會變得更強,我的寶可夢也會!$我們也會更好地了解彼此!\n好!做好準備吧!$我是艾莉絲,寶可夢聯盟冠軍,\n我,將打敗你!" - }, - "victory": { - "1": "啊……我盡力了,但我們輸了……" - }, - "defeat": { - "1": "耶!我們贏了!" - } - }, - "hau": { - "encounter": { - "1": "我想知道,訓練師是否會根據他們是\n來自溫暖地區還是寒冷地區而以不同的方式戰鬥。$讓我們來測試一下!" - }, - "victory": { - "1": "那太棒了!我覺得我現在有點了解你的感覺了!" - }, - "defeat": { - "1": "老鐵,這才叫戰鬥!" - } - }, - "geeta": { - "encounter": { - "1": "我決定再試一次。$來吧…讓我看看你的訓練成果。" - }, - "victory": { - "1": "我期待著你的成就!" - }, - "defeat": { - "1": "怎麼,這就結束了?" - } - }, - "nemona": { - "encounter": { - "1": "耶!我太興奮了!讓我們稍微放輕鬆!" - }, - "victory": { - "1": "好吧,太糟了,但我還是玩得很開心!$下次我一定會贏你!" - }, - "defeat": { - "1": "好吧,那是一場很棒的戰鬥!$肯定是會有收穫的啦。" - } - }, - "leon": { - "encounter": { - "1": "來享受一段冠軍時刻吧!" - }, - "victory": { - "1": "我的冠軍生涯結束了……但這是多麼美好的冠軍時刻啊!但這是多麼美好的冠軍時刻啊!謝謝你給了我最精彩的一戰!" - }, - "defeat": { - "1": "名副其實的冠軍時刻!" - } - }, - "whitney": { - "encounter": { - "1": "嘿!你不認為寶可夢超級可愛嗎?" - }, - "victory": { - "1": "哇啊!哇啊!你太壞了!" - }, - "defeat": { - "1": "就是這樣!" - } - }, - "chuck": { - "encounter": { - "1": "哈!你想挑戰我?你是勇敢還是無知?" - }, - "victory": { - "1": "你很強!能不能收我為徒?" - }, - "defeat": { - "1": "搞定。你明白我比你強得多了嗎?" - } - }, - "katy": { - "encounter": { - "1": "不要放鬆警惕,除非你想被蟲絲絆倒哦!" - }, - "victory": { - "1": "我可愛的寶可夢們都像蒼蠅一樣墜落了!" - }, - "defeat": { - "1": "開飯啦,我可愛的彩粉蝶!" - } - }, - "pryce": { - "encounter": { - "1": "年輕不代表能獲得勝利!經驗才是關鍵。" - }, - "victory": { - "1": "無與倫比!贏得完美,試著不要忘記你現在的感受。" - }, - "defeat": { - "1": "正如我所料。" - } - }, - "clair": { - "encounter": { - "1": "你知道我是誰嗎?知道還敢挑戰我?" - }, - "victory": { - "1": "我想知道以你現在的水平能走多遠,有趣。" - }, - "defeat": { - "1": "就是這樣。" - } - }, - "maylene": { - "encounter": { - "1": "我現在要挑戰你,我不會保留任何實力。$請準備好戰鬥!" - }, - "victory": { - "1": "是我輸了…" - }, - "defeat": { - "1": "太棒了。" - } - }, - "fantina": { - "encounter": { - "1": "你來挑戰吧。我會勝利。$這就是家緣市的道館館主。" - }, - "victory": { - "1": "你是最強的,我認輸了。" - }, - "defeat": { - "1": "我非常,非常高興!" - } - }, - "byron": { - "encounter": { - "1": "和我兒子瓢太一樣的年輕人啊!$我相信培養年輕人\n關係到寶可夢光明的未來!$為此就讓我來成為\n年輕人必須跨越的堡壘吧!" - }, - "victory": { - "1": "唔!我千錘百煉的寶可夢!" - }, - "defeat": { - "1": "哈哈哈哈!怎麼樣!我千錘百煉的寶可夢!" - } - }, - "olympia": { - "encounter": { - "1": "戰鬥是決定命運的古老傳統。讓我們開始吧!" - }, - "victory": { - "1": "創造你自己的道路。$不要讓任何東西阻擋你的路、你的命運、你的未來。" - }, - "defeat": { - "1": "我們的道路現在已經清晰了。" - } - }, - "volkner": { - "encounter": { - "1": "能留到最後的訓練家想必肯定是很強的…$希望你會是能讓我回憶起\n寶可夢對戰樂趣的訓練家!" - }, - "victory": { - "1": "我輸了…$你的心意,寶可夢的不顧一切。$戰鬥的時候就讓我熱血沸騰。" - }, - "defeat": { - "1": "完全沒感覺…$和我希望的完全不一樣!" - } - }, - "burgh": { - "encounter": { - "1": "唔…我有預感,\n只要贏了這場戰鬥就能畫出更好的畫來…$嗯!戰鬥充滿了幻象!那麼,馬上開始吧。", - "2": "當然,我對我所有的寶可夢都相當驕傲! $現在…讓我們馬上開始吧!" - }, - "victory": { - "1": "結束了嗎?我的女神拋棄我了嗎?", - "2": "啊唔,輸了……你還真是很強啊。" - }, - "defeat": { - "1": "唔啊……好……好美啊!", - "2": "偶爾也有一些不是很好看的勝利,$但只要努力了,\n不管怎麼樣的戰鬥,都是很美麗的。" - } - }, - "elesa": { - "encounter": { - "1": "最後一擊!\n在確信這一點的時候全身會流淌過電流!$為追求這個快感,\n我要用可愛的寶可夢們讓你頭暈眼花。" - }, - "victory": { - "1": "本想讓你頭暈的,\n結果我倒反被你電到了。" - }, - "defeat": { - "1": "感覺還不夠啊……下次能使出全力來嗎?" - } - }, - "skyla": { - "encounter": { - "1": "終於到決戰了!\n這是決定頂點的寶可夢對戰吧?$我最喜歡頂點了!\n在高的地方能看到很遠很遠!$好了!就讓我和你好好地玩一場吧!" - }, - "victory": { - "1": "和你的戰鬥讓我更強了……謝謝。" - }, - "defeat": { - "1": "不管是贏了還是輸了,戰鬥都能得到一些東西。" - } - }, - "brycen": { - "encounter": { - "1": "有其他的人和寶可夢在一起,$這份支持會讓自己更強…\n讓我來給你展示一下這樣的強大吧!" - }, - "victory": { - "1": "你和你的寶可夢!配合得天衣無縫!\n華麗的友情!" - }, - "defeat": { - "1": "嘗試極限!鍛鍊!" - } - }, - "drayden": { - "encounter": { - "1": "現在我尋求的是\n能讓我看到光明未來的年輕訓練家。$你有多少實力,就讓我用我的經驗,\n我對寶可夢傾注的愛來驗證吧!" - }, - "victory": { - "1": "失敗後湧現的這灼熱的意志…\n該怎麼說呢…" - }, - "defeat": { - "1": "啊啊啊!你的實力就這種程度嗎!" - } - }, - "grant": { - "encounter": { - "1": "我只期待一件事。. $通過超越彼此,\n我們找到通往更高境界的道路。" - }, - "victory": { - "1": "你是一堵我無法逾越的牆!" - }, - "defeat": { - "1": "不要放棄。\n這就是人生的真諦。$大道至簡。" - } - }, - "korrina": { - "encounter": { - "1": "小女子科爾尼來大顯身手啦!" - }, - "victory": { - "1": "正因為有你,\n才能讓你的寶可夢進化!" - }, - "defeat": { - "1": "好勁爆的戰鬥呀!" - } - }, - "clemont": { - "encounter": { - "1": "哦!我很高興我們能見面!" - }, - "victory": { - "1": "你對戰鬥的熱情激勵了我!" - }, - "defeat": { - "1": "看來我的訓練師成長強化機-馬克2號,\n真的起作用了!" - } - }, - "valerie": { - "encounter": { - "1": "哦,這不是一個年輕的訓練師嗎……\n能這樣遇見你真是太好了。 $我想你已經獲得了這場戰鬥的資格,\n作為對你努力的獎勵。 $難以捉摸的妖精可能看起來像微風一樣脆弱,\n像花朵一樣精緻,但很堅強。" - }, - "victory": { - "1": "我希望明天你也能找到一些值得會心微笑的事物……" - }, - "defeat": { - "1": "哦,天哪,這太遺憾了……" - } - }, - "wulfric": { - "encounter": { - "1": "你知道嗎?\n我們都說戰鬥能學到東西,羈絆之類的,$但實際上,我這麼做只是因為有趣。 $誰在乎那些華而不實的東西?\n我們來戰鬥吧!" - }, - "victory": { - "1": "傑出!我像冰山一樣堅硬,但你徹底擊潰了我!" - }, - "defeat": { - "1": "和我幹的結果就是這樣!" - } - }, - "kabu": { - "encounter": { - "1": "每個訓練師和寶可夢都在努力追求勝利。$但這意味著你的對手也在努力贏得勝利。$最終,比賽是由哪一方\n能夠發揮出他們真正的潛力來決定的。" - }, - "victory": { - "1": "我很高興今天能和你戰鬥!" - }, - "defeat": { - "1": "這是我感覺自己的成長的好方式!" - } - }, - "bea": { - "encounter": { - "1": "你有沒有一種不可動搖的精神,\n受到什麼攻擊都安如磐石? $就讓我來試試吧?" - }, - "victory": { - "1": "我感受到了你的寶可夢\n在戰鬥中被你指揮時的戰鬥之魂。" - }, - "defeat": { - "1": "每個人都希望能有一場這樣的好比賽。" - } - }, - "opal": { - "encounter": { - "1": "讓我看看你和你的寶可夢的表現如何!" - }, - "victory": { - "1": "你不夠粉嫩呀,\n但你是一個優秀的訓練師,$還擁有著優秀的寶可夢。" - }, - "defeat": { - "1": "對你來說太慘了,我覺得。" - } - }, - "bede": { - "encounter": { - "1": "就讓我來證明你有多可憐,我有多強大。" - }, - "victory": { - "1": "我懂了……好吧。其實我還沒拿出全力呢。" - }, - "defeat": { - "1": "我覺得我打得不錯。" - } - }, - "gordie": { - "encounter": { - "1": "好了,我們來做個了結吧!" - }, - "victory": { - "1": "我只想要挖一個洞爬進去……$好吧,現在更像是掉了進去。" - }, - "defeat": { - "1": "像往常一樣戰鬥,勝利就會隨之而來!" - } - }, - "marnie": { - "encounter": { - "1": "事實上,言而總之… \n人家自己也想當冠軍呀! $所以別認為我在針對你!" - }, - "victory": { - "1": "好吧,我還是輸了……\n但是我看到了很多你和你寶可夢的優點哦" - }, - "defeat": { - "1": "希望你喜歡我們的戰鬥策略。" - } - }, - "raihan": { - "encounter": { - "1": "我打算擊敗冠軍,贏得錦標賽,\n並向世界證明奇巴納大人有多強!" - }, - "victory": { - "1": "就算輸了我也好帥。$真是罪孽深重啊。$看來得再來張自拍了!" - }, - "defeat": { - "1": "為了紀念此刻,來張自拍吧!" - } - }, - "brassius": { - "encounter": { - "1": "你應該準備好了吧,\n一起完成這美麗的藝術作品吧!" - }, - "victory": { - "1": "啊……前衛!" - }, - "defeat": { - "1": "我將立即開始新的創作!" - } - }, - "iono": { - "encounter": { - "1": "誰在奇述!是我奇樹!\n做好準備了嗎!$...$直播開始!\n今天的小挑戰者有多強?$奇樹不知道哦~\n讓我們一起來看看吧!" - }, - "victory": { - "1": "你的閃耀如1000萬伏特!朋友!" - }, - "defeat": { - "1": "奇樹奇樹捕獲你的眼球!" - } - }, - "larry": { - "encounter": { - "1": "歸根結底,普普通通就是最強。" - }, - "victory": { - "1": "哼,給我上了一道“戰敗”。" - }, - "defeat": { - "1": "下班打卡,走了" - } - }, - "ryme": { - "encounter": { - "1": "寶貝, 一起! \n搖滾搖到骨子裡!" - }, - "victory": { - "1": "你好酷!我佩服!\n我的靈魂為你哭!" - }, - "defeat": { - "1": "再會, 寶貝!" - } - }, - "grusha": { - "encounter": { - "1": "我保證我寶可夢的力量\n會讓你感到寒冷徹骨!" - }, - "victory": { - "1": "你燃燒的熱情……老實說,我有點喜歡。" - }, - "defeat": { - "1": "你沒有升溫。" - } - }, - "marnie_elite": { - "encounter": { - "1": "你已經走到這一步了?$哼~ 看看你能不能對付我的寶可夢!", - "2": "我將全力以赴, 別覺得我會手下留情哦~" - }, - "victory": { - "1": "不敢相信…我輸掉了… $但是你確實贏得好,幹得漂亮捏~", - "2": "看來我還要多多學習呀,\n不過你打得很不錯哦~" - }, - "defeat": { - "1": "你打得不錯,但是我更勝一籌!$祝你下次好運啦~", - "2": "看來我的練習有所回報了。\n感謝一戰!" - } - }, - "nessa_elite": { - "encounter": { - "1": "海流正在朝著對我有利的方向轉變。$準備好被捲走了嗎?", - "2": "讓我們在這場戰鬥中掀起波瀾!$我希望你做好準備!" - }, - "victory": { - "1": "你完美地渡過了這片水域......幹得好!", - "2": "看來我現在無法與你匹敵。幹得好!" - }, - "defeat": { - "1": "水總能找到出路。\n真是爽快的一戰!", - "2": "你打得很好,\n但海洋的力量是不可阻擋的!" - } - }, - "bea_elite": { - "encounter": { - "1": "做好準備!我的鬥志熊熊燃燒!", - "2": "讓我們看看你是否能跟上我永不停歇的節奏!" - }, - "victory": { - "1": "你的實力......令人印象深刻。\n你真的值得這場勝利。", - "2": "我以前從未感受過這種強度。\n太棒了!" - }, - "defeat": { - "1": "我的高強度訓練又帶來勝利了!\n幹得好!", - "2": "你有實力,但我的訓練更努力。\n精彩的戰鬥!" - } - }, - "allister_elite": { - "encounter": { - "1": "黑暗降臨...你準備好面對你的恐懼了嗎?", - "2": "讓我們看看你能否應對我所操控的黑暗。" - }, - "victory": { - "1": "你已經驅散了陰影......\n暫時。幹得很好。", - "2": "你的光芒刺穿了我的黑暗。幹得好。" - }, - "defeat": { - "1": "黑影在輕語...\n你的力量還不夠。", - "2": "黑暗獲勝了......\n也許下次你會看到光明。" - } - }, - "raihan_elite": { - "encounter": { - "1": "風暴來臨!你能挺過這場戰鬥嗎!", - "2": "準備好面對風暴之眼!" - }, - "victory": { - "1": "你戰勝了風暴...難以置信!", - "2": "你完美地駕馭了風……打得好!" - }, - "defeat": { - "1": "又一場風暴襲來,又一場勝利!打得好!", - "2": "你被我的風暴捲入了!祝你下次好運!" - } - }, - "alder": { - "encounter": { - "1": "準備好和合眾最強的訓練家交手吧!" - }, - "victory": { - "1": "精彩!簡直就是天下無雙!" - }, - "defeat": { - "1": "戰鬥結束後,我的心像是吹過了溫和的風…\n$真是厲害!" - } - }, - "kieran": { - "encounter": { - "1": "我的努力讓我越來越強!\n$所以我不會輸。" - }, - "victory": { - "1": "不可能…\n$真是一場有趣又激動人心的戰鬥啊!" - }, - "defeat": { - "1": "哇塞,好一場戰鬥!\n$你得多練練了。" - } - }, - "rival": { - "encounter": { - "1": "@c{smile}嘿,我在找你呢!我知道你急著上路,\n但至少說個再見吧…$@c{smile_eclosed}所以你終於要開始追逐夢想了?\n我幾乎不敢相信。$@c{serious_smile_fists}來都來了,來一場對戰怎麼樣?\n畢竟,我想看看你是不是準備周全了。$@c{serious_mopen_fists}不要手下留情,我想讓你全力以赴!" - }, - "victory": { - "1": "@c{shock}哇…你徹底擊敗了我。\n你是真初學者嗎?$@c{smile}也許是靠點運氣,但是…\n誰知道,你可能真的能一路走下去。$順便說一下,博士讓我給你這些東西。它們看起來可牛了。$@c{serious_smile_fists}祝你好运!" - } - }, - "rival_female": { - "encounter": { - "1": "@c{smile_wave}你在這兒啊!我到處找你呢!$@c{angry_mopen}你忘了和你最好的朋友說再見了嗎?$@c{smile_ehalf}你要去追逐夢想了,對吧?\n從今天開始,是不是…$@c{smile}不管怎樣,忘了我的事就原諒你吧,\n但有個條件。@c{smile_wave_wink}你必須和我對戰!$@c{angry_mopen}全力以赴!\n你也不想讓你的冒險在開始之前就結束了,對吧?" - }, - "victory": { - "1": "@c{shock}你剛開始就已經這麼強了?!@d{96}$@c{angry}你是不是開了?$@c{smile_wave_wink}只是開個玩笑啦!@d{64} @c{smile_eclosed}我輸地心服口服了…\n我感覺你出去挺有天賦的。$@c{smile}順便說一下,博士想讓我給你一些東西。\n希望它們能幫上忙!$@c{smile_wave}像往常一樣盡力而為!\n我相信你!" - } - }, - "rival_2": { - "encounter": { - "1": "@c{smile}嘿,你也在這裡嗎?$@c{smile_eclosed}一路過關斬將,是吧?$@c{serious_mopen_fists}我知道看起來好像我尾隨著你來到這裡,\n怎麼可能啦。$@c{serious_smile_fists}說真的,自從你在老家打敗我後,\n我就一直很渴望再比一場。$我自己也進行了很多訓練,\n所以這次我肯定會好好打一場。$@c{serious_mopen_fists}不要手下留情,就像以前一樣!$讓我們開始吧!" - }, - "victory": { - "1": "@c{neutral_eclosed}哦。我過於自信了。$@c{smile}不過沒關係。我猜到可能會這樣。$@c{serious_mopen_fists}這只意味著我下次需要更努力!$$@c{smile}呃,不是特意幫你,我正好有多餘的這個,\n我覺得你可能想要。$$@c{serious_smile_fists}不過這次之後別指望再有了!$我不能一直給我的對手優勢。$@c{smile}反正,保重!" - } - }, - "rival_2_female": { - "encounter": { - "1": "@c{smile_wave}哦,真巧,在這裡遇見你。\n看來你還沒輸過嘛。@c{angry_mopen}哈……好傢伙!$@c{angry_mopen}我知道你在想什麼,\n不,我才不會跟蹤你什麼呢。 @c{smile_eclosed}我只是碰巧在附近。$@c{smile_ehalf}我為你感到高興,但我只想讓你知道\n有時輸了是可以接受的。$@c{smile}我們從錯誤中學到的東西\n往往比我們一直成功時學到的還要多。$@c{angry_mopen}無論如何,我為了我們的複賽已經努力訓練了\n所以你最好全力以赴!" - }, - "victory": { - "1": "@c{neutral}我……沒打算會輸來著……$@c{smile}嗷……好吧。看來我要再更加努力訓練了!$@c{smile_wave}我還給你帶了個這個$@c{smile_wave_wink}不用謝我哦~.$@c{angry_mopen}不過,這是最後一個啦!\n 你可別想再從我這賺小便宜了~$@c{smile_wave}要保重哦!" - }, - "defeat": { - "1": "輸了有時候也不要緊的…" - } - }, - "rival_3": { - "encounter": { - "1": "@c{smile}嘿,看看這是誰!好久不見啊。$@c{neutral}你……還是沒輸過?哈…$@c{neutral_eclosed}這有點……不太對勁。$沒有你一起,回家的感覺有很不一樣。$@c{serious}雖然我知道這挺別扭的,但我就直說了。$@c{neutral_eclosed}我覺得你有點兒難以理解。$@c{serious}沒有人能夠戰無不勝。$失敗乃成功之母。$@c{neutral_eclosed}你已經贏得了夠好的成績,\n但前面道阻且長,只會愈發艱難。 @c{neutral}你做好準備了沒?$@c{serious_mopen_fists}如果做好了,證明給我看吧。" - }, - "victory": { - "1": "@c{angry_mhalf}這太離譜了……我幾乎從沒停下訓練……$我們之間的差距怎麼還是這麼大?" - } - }, - "rival_3_female": { - "encounter": { - "1": "@c{smile_wave}好久不見!還沒輸過,對吧。$@c{angry}我覺得你點煩了。@c{smile_wave_wink}開玩笑啦!$@c{smile_ehalf}但說真的,你現在不想家嗎?\n 不想…我嗎?$我……我的意思是,我們真的很想你。$@c{smile_eclosed}我支持你的一切,包括你的夢想。\n但現實就是你早晚會經歷失敗。$@c{smile}當你失敗的時候,我想像往常一樣陪在你身邊。$@c{angry_mopen}現在,給你看看我變得多強了吧!" - }, - "victory": { - "1": "@c{shock}都這樣了……還是不夠嗎?$這樣下去,你就永遠不會回來了……" - }, - "defeat": { - "1": "你盡力了,現在讓我們回家吧。" - } - }, - "rival_4": { - "encounter": { - "1": "@c{neutral}嘿。$我不會對你說什麼拐彎抹角的客套話。$@c{neutral_eclosed}我來,就是為了贏,簡單明了。$@c{serious_mhalf_fists}我將所有時間都投入到訓練中,\n掌握了如何發揮我的潛力。$@c{smile}當你削減掉不必要的睡眠和社交後,\n你會得到很多額外的時間。$@c{serious_mopen_fists}但在我獲勝之前,這些都不重要了。$@c{neutral_eclosed}我甚至已經到達了戰無不敗的境地。$@c{smile_eclosed}我覺得你的思路倒是也沒毛病。$@c{angry_mhalf}失敗是屬於弱者的,\n我已經不再軟弱了。$@c{serious_mopen_fists}準備好吧。" - }, - "victory": { - "1": "@c{neutral}你…@d{64} 你是人嗎?" - } - }, - "rival_4_female": { - "encounter": { - "1": "@c{neutral}是我哦!沒又把我忘了吧……是嗎?$@c{smile}你應該為自己走了這麼遠感到驕傲。恭喜你!$但看來你的旅程到此為止了。$@c{smile_eclosed}你喚醒了我體內一些我從未有過的東西。\n就像我現在滿腦子除了訓練還是訓練。$@c{smile_ehalf}我幾乎已經沒空吃飯睡覺了,\n我沒日沒夜訓練我的寶可夢,每次都能變得更強。$@c{neutral}事實上,我……幾乎不認識自己了。$現在,我終於達到了巔峰。\n我感覺我已經戰無不勝了。$而且你知道嗎?這一切都是因為你。$@c{smile_ehalf}我不知道到底是該感謝你還是恨你。$@c{angry_mopen}做好準備…" - }, - "victory": { - "1": "@c{neutral}你…@d{64} 你是人嗎?" - }, - "defeat": { - "1": "@c{smile}你應該為自己走了這麼遠感到驕傲。" - } - }, - "rival_5": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - } - }, - "rival_5_female": { - "encounter": { - "1": "@c{neutral}…" - }, - "victory": { - "1": "@c{neutral}…" - }, - "defeat": { - "1": "$@c{smile_ehalf}…" - } - }, - "rival_6": { - "encounter": { - "1": "@c{smile_eclosed}又見面了。$@c{neutral}我花了點時間思考反思\n有理由說明為什麼這一切都顯得如此奇妙。$@c{neutral_eclosed}你所追逐的夢想,我想擊敗你的決心…$這都是某種龐大使命的一部分。$@c{serious}這不僅僅是關於我和你… 而是關於這個世界, @c{serious_mhalf_fists}我的使命就是將你推向極限。$@c{neutral_eclosed}我是否達成了那個使命,我說不上來,但我已盡我所能。$@c{neutral}我們最終到達的這個地方看起來很可怕\n 然而不知何故,我心中毫無畏懼,好像我早就來過這裡。$@c{serious_mhalf_fists}你也有同樣的感覺,對吧?$@c{serious}……這裡好像有什麼東西在呼喚我。\n這是世界早已記錄的一切。$那些我們經歷過的時光,那些記憶猶新的過去,\n其實只是遙遠的回憶。$@c{neutral_eclosed}誰能保證它們是否真的發生過。$@c{serious_mopen_fists}你必須繼續前進,不然的話,這一切將永無止境。\n這件事而只有你能辦成。$@c{serious_smile_fists}我不清楚這一切意味著什麼,但我知道……$@c{serious_mopen_fists}如果現在你不能就此擊敗我,\n你將毫無機會可言。" - }, - "victory": { - "1": "@c{smile_eclosed}看來我的使命在這裡已經完成了。\n我想讓你答應我一件事。$@c{smile}在你拯救世界之後,要回家。" - } - }, - "rival_6_female": { - "encounter": { - "1": "@c{smile_ehalf}又只有我們兩個人了。$@c{smile_eclosed}你知道嗎,我在心裡想啊想,\n想了好久……$@c{smile_ehalf}這一切背後是有什麼原因嗎,\n為什麼一切現在看起來都這麼奇怪……$@c{smile}你有你的夢想,而我內心有這個抱負……$我不禁感覺這一切背後有一個更龐大的力量,$掌控者我們所做的一切,你和我之間。$@c{smile_eclosed}我想我注定要推動你……到你的極限。$@c{smile_ehalf}我不清楚我是否一直做得很好,\n但到現在為止,我已經盡力了。$這個奇怪而可怕的地方……\n一切看起來都那麼清晰……$這是世界早已記錄的一切。$@c{smile_eclosed}我好像記不清我們一起度過的日子了。$@c{smile_ehalf}那些回憶到底是真的嗎?\n怎麼感覺這麼久遠……$@c{angry_mopen}你得繼續前進,不然的話,這一切將永無止境。\n你是唯一能做到這件事的。$@c{smile_ehalf}我……不知道這一切意味著什麼……\n但我明白$@c{neutral}如果你現在不能就此擊敗我,\n你將毫無機會可言。" - }, - "victory": { - "1": "@c{smile_ehalf}我……\n我想我完成了我的使命……$@c{smile_eclosed}答應我……在你拯救世界之後\n……要……平安到家。$@c{smile_ehalf}……謝謝你。" - } - } -} \ No newline at end of file diff --git a/src/locales/zh_TW/dialogue-misc-male.json b/src/locales/zh_TW/dialogue-misc-male.json deleted file mode 100644 index 24e2109e5b3..00000000000 --- a/src/locales/zh_TW/dialogue-misc-male.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "ending": "@c{smile}哦?你贏了?@d{96} @c{smile_eclosed}我應該早猜到了\n你回來了。\n$@c{smile}結束了。@d{64} 你終結了這個循環。\n$@c{serious_smile_fists}你也完成了自己的夢想,不是嗎?\n你甚至一次都沒失敗。\n$@c{neutral}我是唯一能夠記得你所作所為的人@d{96}\n我覺得這應該也還行吧?\n$@c{serious_smile_fists}你的傳奇將永遠留存於我們心中。\n$@c{smile_eclosed}不管了,我真是受夠這個地方了,你也一樣嗎?我們回家吧。\n$@c{serious_smile_fists}可能等我們回家以後,再打一場?\n要是你想的話", - "ending_female": "@c{shock}你回來了?@d{32} 也就是說…@d{96} 你贏了呀!?\n@c{smile_ehalf}我應該早料到了。\n$@c{smile_eclosed}當然…我一直有這種感覺\n@c{smile}一切都結束了,對麼? 你打破了循環。\n$@c{smile_ehalf}你也完成了自己的夢想,不是嗎?\n你甚至一次都沒失敗。\n$我是唯一能夠記得你所作所為的人\n@c{angry_mopen}我會努力不忘掉哒!\n$@c{smile_wave_wink}開玩笑啦,@d{64} @c{smile}我才不會忘呢。@d{32}\n你的傳奇將永遠留存於我們心中。\n$@c{smile_wave}不管了,@d{64} 時候不早了@d{96} ,應該吧?\n在這地方還真搞不清楚。\n$一起回家吧。 @c{smile_wave_wink}可能明天,我們再來打一場,為了重溫回憶嘛~" -} \ No newline at end of file diff --git a/src/locales/zh_TW/dialogue-misc-female.json b/src/locales/zh_TW/dialogue-misc.json similarity index 100% rename from src/locales/zh_TW/dialogue-misc-female.json rename to src/locales/zh_TW/dialogue-misc.json diff --git a/src/locales/zh_TW/dialogue-female.json b/src/locales/zh_TW/dialogue.json similarity index 100% rename from src/locales/zh_TW/dialogue-female.json rename to src/locales/zh_TW/dialogue.json diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index dfa198c8339..9d74063627a 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -366,7 +366,9 @@ export class EncounterPhase extends BattlePhase { const currentLanguage = i18next.resolvedLanguage ?? "en"; const ordinalIndex = (ordinalUse.includes(currentLanguage)) ? ["st", "nd", "rd"][((count + 90) % 100 - 10) % 10 - 1] ?? "th" : ""; const cycleCount = count.toLocaleString() + ordinalIndex; - const encounterDialogue = i18next.t(`${(this.scene.gameData.gender === PlayerGender.FEMALE) ? "PGF" : "PGM"}battleSpecDialogue:encounter`, {cycleCount: cycleCount}); + const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const genderStr = PlayerGender[genderIndex].toLowerCase(); + const encounterDialogue = i18next.t("battleSpecDialogue:encounter", { context: genderStr, cycleCount: cycleCount }); this.scene.ui.showDialogue(encounterDialogue, enemy?.species.name, null, () => { this.doEncounterCommon(false); }); diff --git a/src/ui/ui.ts b/src/ui/ui.ts index e62cd37aae3..dc12ac92be2 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -37,7 +37,7 @@ import UnavailableModalUiHandler from "./unavailable-modal-ui-handler"; import OutdatedModalUiHandler from "./outdated-modal-ui-handler"; import SessionReloadModalUiHandler from "./session-reload-modal-ui-handler"; import { Button } from "#enums/buttons"; -import i18next, { ParseKeys } from "i18next"; +import i18next from "i18next"; import GamepadBindingUiHandler from "./settings/gamepad-binding-ui-handler"; import SettingsKeyboardUiHandler from "#app/ui/settings/settings-keyboard-ui-handler"; import KeyboardBindingUiHandler from "#app/ui/settings/keyboard-binding-ui-handler"; @@ -298,34 +298,30 @@ export default class UI extends Phaser.GameObjects.Container { } } - showDialogue(text: string, name: string | undefined, delay: integer | null = 0, callback: Function, callbackDelay?: integer, promptDelay?: integer): void { - // First get the gender of the player (default male) (also used if UNSET) - let playerGenderPrefix = "PGM"; - if ((this.scene as BattleScene).gameData.gender === PlayerGender.FEMALE) { - playerGenderPrefix = "PGF"; - } - // Add the prefix to the text - const localizationKey: string = playerGenderPrefix + text; + showDialogue(i18nKey: string, name: string | undefined, delay: integer | null = 0, callback: Function, callbackDelay?: integer, promptDelay?: integer): void { + const battleScene = this.scene as BattleScene; // Get localized dialogue (if available) let hasi18n = false; - if (i18next.exists(localizationKey) ) { - text = i18next.t(localizationKey as ParseKeys); + if (i18next.exists(i18nKey) ) { + const genderIndex = battleScene.gameData.gender ?? PlayerGender.UNSET; + const genderStr = PlayerGender[genderIndex].toLowerCase(); + i18nKey = i18next.t(i18nKey, { context: genderStr }); hasi18n = true; // Skip dialogue if the player has enabled the option and the dialogue has been already seen - if ((this.scene as BattleScene).skipSeenDialogues && (this.scene as BattleScene).gameData.getSeenDialogues()[localizationKey] === true) { - console.log(`Dialogue ${localizationKey} skipped`); + if (battleScene.skipSeenDialogues &&battleScene.gameData.getSeenDialogues()[i18nKey] === true) { + console.log(`Dialogue ${i18nKey} skipped`); callback(); return; } } let showMessageAndCallback = () => { - hasi18n && (this.scene as BattleScene).gameData.saveSeenDialogue(localizationKey); + hasi18n && battleScene.gameData.saveSeenDialogue(i18nKey); callback(); }; - if (text.indexOf("$") > -1) { - const messagePages = text.split(/\$/g).map(m => m.trim()); + if (i18nKey.indexOf("$") > -1) { + const messagePages = i18nKey.split(/\$/g).map(m => m.trim()); for (let p = messagePages.length - 1; p >= 0; p--) { const originalFunc = showMessageAndCallback; showMessageAndCallback = () => this.showDialogue(messagePages[p], name, null, originalFunc); @@ -334,23 +330,18 @@ export default class UI extends Phaser.GameObjects.Container { } else { const handler = this.getHandler(); if (handler instanceof MessageUiHandler) { - (handler as MessageUiHandler).showDialogue(text, name, delay, showMessageAndCallback, callbackDelay, true, promptDelay); + (handler as MessageUiHandler).showDialogue(i18nKey, name, delay, showMessageAndCallback, callbackDelay, true, promptDelay); } else { - this.getMessageHandler().showDialogue(text, name, delay, showMessageAndCallback, callbackDelay, true, promptDelay); + this.getMessageHandler().showDialogue(i18nKey, name, delay, showMessageAndCallback, callbackDelay, true, promptDelay); } } } - shouldSkipDialogue(text): boolean { - let playerGenderPrefix = "PGM"; - if ((this.scene as BattleScene).gameData.gender === PlayerGender.FEMALE) { - playerGenderPrefix = "PGF"; - } + shouldSkipDialogue(i18nKey: string): boolean { + const battleScene = this.scene as BattleScene; - const key = playerGenderPrefix + text; - - if (i18next.exists(key) ) { - if ((this.scene as BattleScene).skipSeenDialogues && (this.scene as BattleScene).gameData.getSeenDialogues()[key] === true) { + if (i18next.exists(i18nKey) ) { + if (battleScene.skipSeenDialogues && battleScene.gameData.getSeenDialogues()[i18nKey] === true) { return true; } } From 1e95068f14ce868d19082d166e4a37aefc5fcb50 Mon Sep 17 00:00:00 2001 From: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Date: Thu, 29 Aug 2024 19:40:12 +0200 Subject: [PATCH 08/18] [Localization] [EN] Admin Dialouge as it was intended by blitzy (#3896) * Admin Dialouge as it was intended by blitzy * Dont forget the females * Delete female file --- src/locales/en/dialogue.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/locales/en/dialogue.json b/src/locales/en/dialogue.json index 7bb2df0b1cd..e96a42daf1d 100644 --- a/src/locales/en/dialogue.json +++ b/src/locales/en/dialogue.json @@ -455,7 +455,7 @@ "3": "I'm going to give you a little taste of pain! Resign yourself to it!" }, "victory": { - "1": "Hehehe! You might have beaten me, but you don't stand a chance against the Boss!\n$If you get lost now, you won't have to face a sound whipping!", + "1": "Hehehe! You might have beaten me, but you don't stand a chance against the boss!\n$If you get lost now, you won't have to face a sound whipping!", "2": "Hehehe... So, I lost, too...", "3": "Ahya! How could this be? For an Admin like me to lose to some random trainer...", "3_female": null @@ -463,14 +463,14 @@ }, "courtney": { "encounter": { - "1": "The thing...The thing that you hold...That is what... That's what we of Team Magma seek...", - "2": "... Well then...Deleting...", - "3": "...Ha. ...Analyzing... ...Hah♪" + "1": "Don't. Get. In. My. Way.", + "2": "You... ...I want to...analyze. Ahahaha", + "3": "... Well then...Deleting..." }, "victory": { - "1": "... ...Change...the world.", + "1": "Hah hah... Uhn...hah hah...", "2": "As anticipated. Unanticipated. You. Target lock...completed.\n$Commencing...experiment. You. Forever. Aha... ♪", - "3": "...Again? That's unanticipated. ...I knew it. You...are interesting! ...Haha. ♪" + "3": "That's unanticipated. ...I knew it. You...are interesting! ...Haha. ♪" } }, "shelly": { @@ -489,14 +489,14 @@ }, "matt": { "encounter": { - "1": "Hoohahaha! What, you got a screw loose or something? Look at you, little Makuhita person!", - "2": "Oho! You! You're that funny kid!", - "3": "What are you doing here? Did you follow us?" + "1": "All right then, until the boss has time for you, I'll be your opponent!", + "2": "Hooah! Full on! I'm burning up! Well! Welll! Wellllll! Let's battle it out until we've got nothing left!", + "3": "Hoo hah! I'm gonna smash you up!" }, "victory": { - "1": "All right then, until the Boss has time for you, I'll be your opponent!", + "1": "Muwuhahaha! That battle was fun even though I lost!", "2": "I can feel it! I can feel it, all right! The strength coming offa you!\n$More! I still want more! But looks like we're outta time...", - "3": "That was fun! I knew you'd show me a good time! I look forward to facing you again someday!", + "3": "Oho! That's a loss I can be proud of!", "3_female": null } }, @@ -541,13 +541,13 @@ "encounter": { "1": "You could become a threat to Team Plasma, so we will eliminate you here and now!", "1_female": null, - "2": "Oh, for crying out loud... I didn't expect to have to battle in this freezing cold!", + "2": "You don't have the sense to know when to quit, it seems. It's an act of mercy on my part to bring an end to this now!", "3": "You're an impressive Trainer to have made it this far. But it ends here.", "3_female": null }, "victory": { "1": "Ghetsis... I have failed you...", - "2": "It's bitter cold. I'm shivering. I'm suffering. Yet, I still stand victorious.", + "2": "It's bitter cold. I'm shivering. I'm suffering. Yet, we will stand victorious.", "3": "Hmph. You're a smarter Trainer than I expected, but not smart enough.", "3_female": null } @@ -556,13 +556,13 @@ "encounter": { "1": "You are a threat to Team Plasma. We cannot let you walk away from here and now!", "1_female": null, - "2": "Oh, this icy wind... I never thought I'd have to fight here!", + "2": "It seems you don't know when to give up. I'll make sure no one interferes with our plans!", "3": "You are a remarkable Trainer to have made it this far. But this is where it ends.", "3_female": null }, "victory": { "1": "Ghetsis... I have failed my mission...", - "2": "The cold is piercing. I'm shivering. I'm suffering. Yet, I have triumphed.", + "2": "The cold is piercing. I'm shivering. I'm suffering. Yet, we will stand triumphant.", "3": "Hm. You are a talented Trainer, but unfortunately not talented enough." } }, From c112abbcd20fbd1f0171762c4464b9601d10731d Mon Sep 17 00:00:00 2001 From: Leo Kim <47556641+KimJeongSun@users.noreply.github.com> Date: Fri, 30 Aug 2024 03:59:33 +0900 Subject: [PATCH 09/18] [Challenge] Inverse battle challenge (#3525) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add inverse battle challenge. refactoring type.ts for inverse battle challenge * update type integer -> number * add inverse battle condition to thunder wave, conversion 2. * add inverse_battle test code, add checking gameMode in runToSummon not to overwrite gameMode to CLASSIC always * update startBattle with isClassicMode default = true * add inverse achievement * fix achv validation condition * remove unnecessary new line * update defaultWidth 160 -> 200 * update locales * fix korean translation * fix korean translation2 * Update src/locales/de/achv.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update src/locales/de/challenges.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update src/locales/de/challenges.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * resize challenge description 96 -> 84 * update challenge select UI size. * revert font size to 84. update de translation * Update src/locales/fr/challenges.ts Co-authored-by: Lugiad' * Update src/locales/fr/achv.ts Co-authored-by: Lugiad' * Update src/locales/es/challenges.ts Co-authored-by: Asdar * Update src/locales/fr/challenges.ts Co-authored-by: Lugiad' * Update src/locales/fr/achv.ts Co-authored-by: Lugiad' * Update src/locales/es/achv.ts Co-authored-by: Asdar * Update src/locales/fr/achv.ts Co-authored-by: Lugiad' * shrink de font size on achivement * set middle align to achv title * Update src/locales/zh_CN/achv.ts Co-authored-by: mercurius-00 <80205689+mercurius-00@users.noreply.github.com> * Update src/locales/zh_TW/achv.ts Co-authored-by: mercurius-00 <80205689+mercurius-00@users.noreply.github.com> * Update src/locales/zh_CN/challenges.ts Co-authored-by: mercurius-00 <80205689+mercurius-00@users.noreply.github.com> * Update src/locales/zh_TW/challenges.ts Co-authored-by: mercurius-00 <80205689+mercurius-00@users.noreply.github.com> * fix zh_TW ahiv.ts * fix import code on inverse battle test for updated phase * Update src/data/type.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * update requested changes * Update src/locales/pt_BR/achv.ts Co-authored-by: José Ricardo Fleury Oliveira * Update src/locales/pt_BR/achv.ts Co-authored-by: José Ricardo Fleury Oliveira * Update src/locales/pt_BR/challenges.ts Co-authored-by: José Ricardo Fleury Oliveira * [draft] update inverse battle apply function * change the way how to use applyChallenge for inverse type * resolve confilct * fix test codes * remove unnecessary multiplier variable and break codes * update getTypeDamageMultiplier argument type from `number` to `Type` * Fix inverse types tests (#1) * Fix Inverse Battle tests * Add timeout parameter to tests * update requested changes * update requested changes * update requested changes2 * update comments * Update src/test/utils/helpers/challengeModeHelper.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/test/utils/helpers/challengeModeHelper.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * fix mis pasted code * revert loadChallenge code for FreshStartChallenge * code refactoring * restore challenge.json lost translations * revert UI changes * revert unreverted newlines * Run History inclusion * requested changes from torranx * update WaterSuperEffectTypeMultiplierAttr for inverse battle matchup. * fix test code. adding flying press test code * update requested change from xavion3 * updated requested change from xavion 2 * update requested changes from xavion 3 * remove exception code which is not valid * attach partial mark to Freeze dry. requested by xavion * add missing game over phase code when we delete old phases.ts * fix test codes * merge conflict * fix achv condition * updated achv block condition. we don't want to change desc now * resolve conflict * Eternatus Moveset Tinkering * Cleaning it up --------- Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Co-authored-by: Lugiad' Co-authored-by: Asdar Co-authored-by: mercurius-00 <80205689+mercurius-00@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: José Ricardo Fleury Oliveira Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: frutescens --- public/images/items.json | 6835 +++++++++-------- public/images/items.png | Bin 56828 -> 57239 bytes src/data/challenge.ts | 65 +- src/data/move.ts | 37 +- src/data/type.ts | 318 +- src/enums/challenges.ts | 3 +- src/field/pokemon.ts | 13 +- src/locales/de/achv.json | 4 + src/locales/de/challenges.json | 7 + src/locales/en/achv-female.json | 4 + src/locales/en/achv.json | 4 + src/locales/en/challenges.json | 7 + src/locales/es/achv.json | 4 + src/locales/es/challenges.json | 7 + src/locales/fr/achv.json | 4 + src/locales/fr/challenges.json | 7 + src/locales/ja/challenges.json | 1 + src/locales/ko/achv.json | 4 + src/locales/ko/challenges.json | 7 + src/locales/pt_BR/achv.json | 4 + src/locales/pt_BR/challenges.json | 7 + src/locales/zh_CN/achv.json | 4 + src/locales/zh_CN/challenges.json | 7 + src/locales/zh_TW/achv.json | 4 + src/locales/zh_TW/challenges.json | 7 + src/system/achv.ts | 68 +- src/test/battle/inverse_battle.test.ts | 203 + src/test/utils/gameManager.ts | 3 + src/test/utils/helpers/challengeModeHelper.ts | 78 + src/ui/run-info-ui-handler.ts | 45 +- 30 files changed, 4005 insertions(+), 3756 deletions(-) create mode 100644 src/test/battle/inverse_battle.test.ts create mode 100644 src/test/utils/helpers/challengeModeHelper.ts diff --git a/public/images/items.json b/public/images/items.json index c347790b92f..bb86b46aa4d 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,8 +4,8 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 425, - "h": 425 + "w": 426, + "h": 426 }, "scale": 1, "frames": [ @@ -240,6 +240,27 @@ "h": 31 } }, + { + "filename": "inverse", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 30 + }, + "frame": { + "x": 0, + "y": 241, + "w": 22, + "h": 30 + } + }, { "filename": "ribbon_gen3", "rotated": false, @@ -256,7 +277,7 @@ }, "frame": { "x": 0, - "y": 241, + "y": 271, "w": 22, "h": 29 } @@ -277,7 +298,7 @@ }, "frame": { "x": 0, - "y": 270, + "y": 300, "w": 22, "h": 29 } @@ -298,7 +319,7 @@ }, "frame": { "x": 0, - "y": 299, + "y": 329, "w": 22, "h": 29 } @@ -340,7 +361,7 @@ }, "frame": { "x": 0, - "y": 328, + "y": 358, "w": 22, "h": 28 } @@ -361,28 +382,7 @@ }, "frame": { "x": 0, - "y": 356, - "w": 22, - "h": 28 - } - }, - { - "filename": "ribbon_gen6", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 - }, - "frame": { - "x": 0, - "y": 384, + "y": 386, "w": 22, "h": 28 } @@ -619,7 +619,7 @@ } }, { - "filename": "elixir", + "filename": "lock_capsule", "rotated": false, "trimmed": true, "sourceSize": { @@ -628,15 +628,15 @@ }, "spriteSourceSize": { "x": 7, - "y": 4, - "w": 18, - "h": 24 + "y": 5, + "w": 19, + "h": 22 }, "frame": { "x": 407, "y": 0, - "w": 18, - "h": 24 + "w": 19, + "h": 22 } }, { @@ -724,7 +724,7 @@ } }, { - "filename": "ribbon_gen8", + "filename": "ribbon_gen6", "rotated": false, "trimmed": true, "sourceSize": { @@ -744,6 +744,27 @@ "h": 28 } }, + { + "filename": "ribbon_gen8", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 2, + "w": 22, + "h": 28 + }, + "frame": { + "x": 22, + "y": 237, + "w": 22, + "h": 28 + } + }, { "filename": "black_augurite", "rotated": false, @@ -760,7 +781,7 @@ }, "frame": { "x": 22, - "y": 237, + "y": 265, "w": 22, "h": 25 } @@ -781,7 +802,7 @@ }, "frame": { "x": 22, - "y": 262, + "y": 290, "w": 23, "h": 24 } @@ -802,7 +823,7 @@ }, "frame": { "x": 22, - "y": 286, + "y": 314, "w": 24, "h": 24 } @@ -823,7 +844,7 @@ }, "frame": { "x": 22, - "y": 310, + "y": 338, "w": 24, "h": 24 } @@ -844,7 +865,7 @@ }, "frame": { "x": 22, - "y": 334, + "y": 362, "w": 24, "h": 24 } @@ -865,13 +886,13 @@ }, "frame": { "x": 22, - "y": 358, + "y": 386, "w": 24, "h": 24 } }, { - "filename": "earth_plate", + "filename": "mega_bracelet", "rotated": false, "trimmed": true, "sourceSize": { @@ -879,20 +900,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 + "x": 6, + "y": 8, + "w": 20, + "h": 16 }, "frame": { "x": 22, - "y": 382, - "w": 24, - "h": 24 + "y": 410, + "w": 20, + "h": 16 } }, { - "filename": "coupon", + "filename": "relic_band", "rotated": false, "trimmed": true, "sourceSize": { @@ -900,37 +921,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 + "x": 7, + "y": 9, + "w": 17, + "h": 16 }, "frame": { - "x": 22, - "y": 406, - "w": 23, - "h": 19 - } - }, - { - "filename": "golden_mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 45, - "y": 406, - "w": 23, - "h": 19 + "x": 42, + "y": 410, + "w": 17, + "h": 16 } }, { @@ -955,7 +955,7 @@ } }, { - "filename": "mega_bracelet", + "filename": "abomasite", "rotated": false, "trimmed": true, "sourceSize": { @@ -963,20 +963,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, + "x": 8, "y": 8, - "w": 20, + "w": 16, "h": 16 }, "frame": { "x": 28, "y": 70, - "w": 20, + "w": 16, "h": 16 } }, { - "filename": "calcium", + "filename": "absolite", "rotated": false, "trimmed": true, "sourceSize": { @@ -985,36 +985,15 @@ }, "spriteSourceSize": { "x": 8, - "y": 4, + "y": 8, "w": 16, - "h": 24 + "h": 16 }, "frame": { - "x": 39, - "y": 86, + "x": 44, + "y": 70, "w": 16, - "h": 24 - } - }, - { - "filename": "carbos", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 39, - "y": 110, - "w": 16, - "h": 24 + "h": 16 } }, { @@ -1033,11 +1012,32 @@ }, "frame": { "x": 39, - "y": 134, + "y": 86, "w": 21, "h": 24 } }, + { + "filename": "earth_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 39, + "y": 110, + "w": 24, + "h": 24 + } + }, { "filename": "fist_plate", "rotated": false, @@ -1054,7 +1054,7 @@ }, "frame": { "x": 39, - "y": 158, + "y": 134, "w": 24, "h": 24 } @@ -1075,7 +1075,7 @@ }, "frame": { "x": 39, - "y": 182, + "y": 158, "w": 24, "h": 24 } @@ -1095,8 +1095,8 @@ "h": 24 }, "frame": { - "x": 44, - "y": 206, + "x": 39, + "y": 182, "w": 24, "h": 24 } @@ -1117,7 +1117,7 @@ }, "frame": { "x": 44, - "y": 230, + "y": 206, "w": 24, "h": 24 } @@ -1137,8 +1137,8 @@ "h": 24 }, "frame": { - "x": 45, - "y": 254, + "x": 44, + "y": 230, "w": 24, "h": 24 } @@ -1158,8 +1158,8 @@ "h": 24 }, "frame": { - "x": 46, - "y": 278, + "x": 44, + "y": 254, "w": 24, "h": 24 } @@ -1179,8 +1179,8 @@ "h": 24 }, "frame": { - "x": 46, - "y": 302, + "x": 45, + "y": 278, "w": 24, "h": 24 } @@ -1201,7 +1201,7 @@ }, "frame": { "x": 46, - "y": 326, + "y": 302, "w": 24, "h": 24 } @@ -1222,7 +1222,7 @@ }, "frame": { "x": 46, - "y": 350, + "y": 326, "w": 24, "h": 24 } @@ -1243,137 +1243,11 @@ }, "frame": { "x": 46, - "y": 374, + "y": 350, "w": 24, "h": 24 } }, - { - "filename": "abomasite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 48, - "y": 70, - "w": 16, - "h": 16 - } - }, - { - "filename": "ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 55, - "y": 86, - "w": 18, - "h": 24 - } - }, - { - "filename": "full_restore", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 55, - "y": 110, - "w": 18, - "h": 24 - } - }, - { - "filename": "hp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 60, - "y": 134, - "w": 16, - "h": 24 - } - }, - { - "filename": "iron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 63, - "y": 158, - "w": 16, - "h": 24 - } - }, - { - "filename": "kings_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 63, - "y": 182, - "w": 23, - "h": 24 - } - }, { "filename": "lucky_punch_great", "rotated": false, @@ -1389,180 +1263,12 @@ "h": 24 }, "frame": { - "x": 68, - "y": 206, - "w": 24, - "h": 24 - } - }, - { - "filename": "lucky_punch_master", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 68, - "y": 230, - "w": 24, - "h": 24 - } - }, - { - "filename": "lucky_punch_ultra", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 69, - "y": 254, - "w": 24, - "h": 24 - } - }, - { - "filename": "lustrous_globe", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 70, - "y": 278, - "w": 24, - "h": 24 - } - }, - { - "filename": "meadow_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 70, - "y": 302, - "w": 24, - "h": 24 - } - }, - { - "filename": "mind_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 70, - "y": 326, - "w": 24, - "h": 24 - } - }, - { - "filename": "muscle_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 70, - "y": 350, - "w": 24, - "h": 24 - } - }, - { - "filename": "pixie_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 70, + "x": 46, "y": 374, "w": 24, "h": 24 } }, - { - "filename": "salac_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 68, - "y": 398, - "w": 24, - "h": 24 - } - }, { "filename": "ability_capsule", "rotated": false, @@ -1585,7 +1291,7 @@ } }, { - "filename": "lure", + "filename": "calcium", "rotated": false, "trimmed": true, "sourceSize": { @@ -1595,39 +1301,18 @@ "spriteSourceSize": { "x": 8, "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 92, - "y": 398, - "w": 17, - "h": 24 - } - }, - { - "filename": "max_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, + "w": 16, "h": 24 }, "frame": { "x": 59, "y": 27, - "w": 18, + "w": 16, "h": 24 } }, { - "filename": "scanner", + "filename": "lucky_punch_master", "rotated": false, "trimmed": true, "sourceSize": { @@ -1641,14 +1326,14 @@ "h": 24 }, "frame": { - "x": 77, + "x": 75, "y": 26, "w": 24, "h": 24 } }, { - "filename": "silk_scarf", + "filename": "lucky_punch_ultra", "rotated": false, "trimmed": true, "sourceSize": { @@ -1662,12 +1347,33 @@ "h": 24 }, "frame": { - "x": 101, + "x": 99, "y": 26, "w": 24, "h": 24 } }, + { + "filename": "revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 12, + "h": 17 + }, + "frame": { + "x": 123, + "y": 26, + "w": 12, + "h": 17 + } + }, { "filename": "big_mushroom", "rotated": false, @@ -1710,6 +1416,69 @@ "h": 23 } }, + { + "filename": "elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 60, + "y": 70, + "w": 18, + "h": 24 + } + }, + { + "filename": "coin_case", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 78, + "y": 73, + "w": 24, + "h": 23 + } + }, + { + "filename": "kings_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 102, + "y": 50, + "w": 23, + "h": 24 + } + }, { "filename": "berry_pouch", "rotated": false, @@ -1726,11 +1495,284 @@ }, "frame": { "x": 102, - "y": 50, + "y": 74, "w": 23, "h": 23 } }, + { + "filename": "aerodactylite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 60, + "y": 94, + "w": 16, + "h": 16 + } + }, + { + "filename": "carbos", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 63, + "y": 110, + "w": 16, + "h": 24 + } + }, + { + "filename": "ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 63, + "y": 134, + "w": 18, + "h": 24 + } + }, + { + "filename": "full_restore", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 63, + "y": 158, + "w": 18, + "h": 24 + } + }, + { + "filename": "lustrous_globe", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 63, + "y": 182, + "w": 24, + "h": 24 + } + }, + { + "filename": "max_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 68, + "y": 206, + "w": 22, + "h": 24 + } + }, + { + "filename": "meadow_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 68, + "y": 230, + "w": 24, + "h": 24 + } + }, + { + "filename": "mind_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 68, + "y": 254, + "w": 24, + "h": 24 + } + }, + { + "filename": "muscle_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 69, + "y": 278, + "w": 24, + "h": 24 + } + }, + { + "filename": "pixie_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 70, + "y": 302, + "w": 24, + "h": 24 + } + }, + { + "filename": "salac_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 70, + "y": 326, + "w": 24, + "h": 24 + } + }, + { + "filename": "scanner", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 70, + "y": 350, + "w": 24, + "h": 24 + } + }, + { + "filename": "silk_scarf", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 70, + "y": 374, + "w": 24, + "h": 24 + } + }, { "filename": "sky_plate", "rotated": false, @@ -1746,14 +1788,14 @@ "h": 24 }, "frame": { - "x": 125, - "y": 36, + "x": 59, + "y": 398, "w": 24, "h": 24 } }, { - "filename": "choice_specs", + "filename": "hp_up", "rotated": false, "trimmed": true, "sourceSize": { @@ -1761,41 +1803,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 125, - "y": 60, - "w": 24, - "h": 18 - } - }, - { - "filename": "max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, + "x": 8, "y": 4, - "w": 18, + "w": 16, "h": 24 }, "frame": { - "x": 149, - "y": 36, - "w": 18, + "x": 83, + "y": 398, + "w": 16, "h": 24 } }, { - "filename": "adamant_crystal", + "filename": "reveal_glass", "rotated": false, "trimmed": true, "sourceSize": { @@ -1804,15 +1825,36 @@ }, "spriteSourceSize": { "x": 4, - "y": 6, + "y": 4, "w": 23, - "h": 21 + "h": 24 }, "frame": { - "x": 149, - "y": 60, + "x": 79, + "y": 96, "w": 23, - "h": 21 + "h": 24 + } + }, + { + "filename": "dynamax_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 23 + }, + "frame": { + "x": 102, + "y": 97, + "w": 23, + "h": 23 } }, { @@ -1830,8 +1872,8 @@ "h": 24 }, "frame": { - "x": 167, - "y": 21, + "x": 81, + "y": 120, "w": 24, "h": 24 } @@ -1851,12 +1893,54 @@ "h": 24 }, "frame": { - "x": 191, - "y": 21, + "x": 81, + "y": 144, "w": 24, "h": 24 } }, + { + "filename": "oval_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 105, + "y": 120, + "w": 21, + "h": 24 + } + }, + { + "filename": "shiny_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 105, + "y": 144, + "w": 21, + "h": 24 + } + }, { "filename": "stone_plate", "rotated": false, @@ -1872,12 +1956,33 @@ "h": 24 }, "frame": { - "x": 215, - "y": 21, + "x": 87, + "y": 168, "w": 24, "h": 24 } }, + { + "filename": "iron", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 111, + "y": 168, + "w": 16, + "h": 24 + } + }, { "filename": "sun_stone", "rotated": false, @@ -1893,12 +1998,33 @@ "h": 24 }, "frame": { - "x": 239, - "y": 21, + "x": 90, + "y": 192, "w": 24, "h": 24 } }, + { + "filename": "lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 114, + "y": 192, + "w": 17, + "h": 24 + } + }, { "filename": "toxic_plate", "rotated": false, @@ -1914,8 +2040,8 @@ "h": 24 }, "frame": { - "x": 263, - "y": 21, + "x": 92, + "y": 216, "w": 24, "h": 24 } @@ -1935,14 +2061,14 @@ "h": 24 }, "frame": { - "x": 287, - "y": 21, + "x": 92, + "y": 240, "w": 24, "h": 24 } }, { - "filename": "silver_powder", + "filename": "max_elixir", "rotated": false, "trimmed": true, "sourceSize": { @@ -1950,41 +2076,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 11, - "w": 24, - "h": 15 - }, - "frame": { - "x": 167, - "y": 45, - "w": 24, - "h": 15 - } - }, - { - "filename": "max_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, + "x": 7, "y": 4, - "w": 22, + "w": 18, "h": 24 }, "frame": { - "x": 311, - "y": 21, - "w": 22, + "x": 116, + "y": 216, + "w": 18, "h": 24 } }, { - "filename": "coin_case", + "filename": "max_ether", "rotated": false, "trimmed": true, "sourceSize": { @@ -1992,16 +2097,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 + "x": 7, + "y": 4, + "w": 18, + "h": 24 }, "frame": { - "x": 333, - "y": 20, - "w": 24, - "h": 23 + "x": 116, + "y": 240, + "w": 18, + "h": 24 } }, { @@ -2019,12 +2124,75 @@ "h": 23 }, "frame": { - "x": 357, - "y": 20, + "x": 93, + "y": 264, "w": 24, "h": 23 } }, + { + "filename": "black_belt", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 117, + "y": 264, + "w": 22, + "h": 23 + } + }, + { + "filename": "silver_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 11, + "w": 24, + "h": 15 + }, + "frame": { + "x": 93, + "y": 287, + "w": 24, + "h": 15 + } + }, + { + "filename": "griseous_core", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 94, + "y": 302, + "w": 23, + "h": 23 + } + }, { "filename": "hearthflame_mask", "rotated": false, @@ -2040,138 +2208,12 @@ "h": 23 }, "frame": { - "x": 381, - "y": 20, + "x": 94, + "y": 325, "w": 24, "h": 23 } }, - { - "filename": "red_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 20, - "h": 24 - }, - "frame": { - "x": 405, - "y": 24, - "w": 20, - "h": 24 - } - }, - { - "filename": "amulet_coin", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 172, - "y": 60, - "w": 23, - "h": 21 - } - }, - { - "filename": "candy_overlay", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 12, - "w": 16, - "h": 15 - }, - "frame": { - "x": 191, - "y": 45, - "w": 16, - "h": 15 - } - }, - { - "filename": "dragon_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 207, - "y": 45, - "w": 24, - "h": 18 - } - }, - { - "filename": "exp_balance", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 231, - "y": 45, - "w": 24, - "h": 22 - } - }, - { - "filename": "exp_share", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 255, - "y": 45, - "w": 24, - "h": 22 - } - }, { "filename": "leppa_berry", "rotated": false, @@ -2187,8 +2229,8 @@ "h": 23 }, "frame": { - "x": 279, - "y": 45, + "x": 94, + "y": 348, "w": 24, "h": 23 } @@ -2208,264 +2250,12 @@ "h": 23 }, "frame": { - "x": 303, - "y": 45, + "x": 94, + "y": 371, "w": 24, "h": 23 } }, - { - "filename": "revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 12, - "h": 17 - }, - "frame": { - "x": 195, - "y": 60, - "w": 12, - "h": 17 - } - }, - { - "filename": "icy_reins_of_unity", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 207, - "y": 63, - "w": 24, - "h": 20 - } - }, - { - "filename": "metal_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 231, - "y": 67, - "w": 24, - "h": 20 - } - }, - { - "filename": "peat_block", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 255, - "y": 67, - "w": 24, - "h": 22 - } - }, - { - "filename": "twisted_spoon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 279, - "y": 68, - "w": 24, - "h": 23 - } - }, - { - "filename": "dynamax_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 23 - }, - "frame": { - "x": 303, - "y": 68, - "w": 23, - "h": 23 - } - }, - { - "filename": "black_belt", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 327, - "y": 45, - "w": 22, - "h": 23 - } - }, - { - "filename": "griseous_core", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 326, - "y": 68, - "w": 23, - "h": 23 - } - }, - { - "filename": "reveal_glass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 349, - "y": 43, - "w": 23, - "h": 24 - } - }, - { - "filename": "leek", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 372, - "y": 43, - "w": 23, - "h": 23 - } - }, - { - "filename": "rare_candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 349, - "y": 67, - "w": 23, - "h": 23 - } - }, - { - "filename": "rarer_candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 372, - "y": 66, - "w": 23, - "h": 23 - } - }, { "filename": "bug_tera_shard", "rotated": false, @@ -2481,14 +2271,98 @@ "h": 23 }, "frame": { - "x": 395, - "y": 48, + "x": 117, + "y": 287, "w": 22, "h": 23 } }, { - "filename": "auspicious_armor", + "filename": "red_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 20, + "h": 24 + }, + "frame": { + "x": 99, + "y": 394, + "w": 20, + "h": 24 + } + }, + { + "filename": "candy_overlay", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 12, + "w": 16, + "h": 15 + }, + "frame": { + "x": 117, + "y": 310, + "w": 16, + "h": 15 + } + }, + { + "filename": "max_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 118, + "y": 325, + "w": 17, + "h": 24 + } + }, + { + "filename": "max_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 118, + "y": 349, + "w": 18, + "h": 24 + } + }, + { + "filename": "adamant_crystal", "rotated": false, "trimmed": true, "sourceSize": { @@ -2497,78 +2371,15 @@ }, "spriteSourceSize": { "x": 4, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 395, - "y": 71, - "w": 23, - "h": 21 - } - }, - { - "filename": "binding_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, "y": 6, "w": 23, - "h": 20 + "h": 21 }, "frame": { - "x": 372, - "y": 89, + "x": 118, + "y": 373, "w": 23, - "h": 20 - } - }, - { - "filename": "healing_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 349, - "y": 90, - "w": 23, - "h": 22 - } - }, - { - "filename": "black_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 395, - "y": 92, - "w": 23, - "h": 17 + "h": 21 } }, { @@ -2586,12 +2397,96 @@ "h": 23 }, "frame": { - "x": 73, - "y": 73, + "x": 119, + "y": 394, "w": 22, "h": 23 } }, + { + "filename": "choice_specs", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 135, + "y": 36, + "w": 24, + "h": 18 + } + }, + { + "filename": "twisted_spoon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 125, + "y": 54, + "w": 24, + "h": 23 + } + }, + { + "filename": "exp_balance", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 125, + "y": 77, + "w": 24, + "h": 22 + } + }, + { + "filename": "amulet_coin", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 125, + "y": 99, + "w": 23, + "h": 21 + } + }, { "filename": "dragon_tera_shard", "rotated": false, @@ -2607,8 +2502,8 @@ "h": 23 }, "frame": { - "x": 95, - "y": 73, + "x": 126, + "y": 120, "w": 22, "h": 23 } @@ -2628,56 +2523,14 @@ "h": 23 }, "frame": { - "x": 73, - "y": 96, + "x": 126, + "y": 143, "w": 22, "h": 23 } }, { - "filename": "fairy_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 95, - "y": 96, - "w": 22, - "h": 23 - } - }, - { - "filename": "fighting_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 117, - "y": 78, - "w": 22, - "h": 23 - } - }, - { - "filename": "blank_memory", + "filename": "dragon_fang", "rotated": false, "trimmed": true, "sourceSize": { @@ -2687,102 +2540,18 @@ "spriteSourceSize": { "x": 5, "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 117, - "y": 101, - "w": 22, - "h": 22 - } - }, - { - "filename": "fire_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, + "w": 21, "h": 23 }, "frame": { - "x": 139, - "y": 81, - "w": 22, + "x": 127, + "y": 166, + "w": 21, "h": 23 } }, { - "filename": "fire_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 161, - "y": 81, - "w": 22, - "h": 23 - } - }, - { - "filename": "quick_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 139, - "y": 104, - "w": 24, - "h": 20 - } - }, - { - "filename": "big_nugget", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 163, - "y": 104, - "w": 20, - "h": 20 - } - }, - { - "filename": "max_lure", + "filename": "super_lure", "rotated": false, "trimmed": true, "sourceSize": { @@ -2796,348 +2565,12 @@ "h": 24 }, "frame": { - "x": 183, - "y": 81, + "x": 131, + "y": 189, "w": 17, "h": 24 } }, - { - "filename": "rusted_sword", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 200, - "y": 83, - "w": 23, - "h": 22 - } - }, - { - "filename": "rusted_shield", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 183, - "y": 105, - "w": 24, - "h": 20 - } - }, - { - "filename": "apicot_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 207, - "y": 105, - "w": 19, - "h": 20 - } - }, - { - "filename": "relic_crown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 18 - }, - "frame": { - "x": 223, - "y": 87, - "w": 23, - "h": 18 - } - }, - { - "filename": "blue_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 226, - "y": 105, - "w": 20, - "h": 20 - } - }, - { - "filename": "flying_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 246, - "y": 89, - "w": 22, - "h": 23 - } - }, - { - "filename": "blunder_policy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 19 - }, - "frame": { - "x": 246, - "y": 112, - "w": 22, - "h": 19 - } - }, - { - "filename": "focus_sash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 268, - "y": 91, - "w": 22, - "h": 23 - } - }, - { - "filename": "ghost_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 290, - "y": 91, - "w": 22, - "h": 23 - } - }, - { - "filename": "grass_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 312, - "y": 91, - "w": 22, - "h": 23 - } - }, - { - "filename": "full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 15, - "h": 23 - }, - "frame": { - "x": 334, - "y": 91, - "w": 15, - "h": 23 - } - }, - { - "filename": "sacred_ash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 268, - "y": 114, - "w": 24, - "h": 20 - } - }, - { - "filename": "shadow_reins_of_unity", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 292, - "y": 114, - "w": 24, - "h": 20 - } - }, - { - "filename": "soft_sand", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 316, - "y": 114, - "w": 24, - "h": 20 - } - }, - { - "filename": "eviolite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 73, - "y": 119, - "w": 15, - "h": 15 - } - }, - { - "filename": "max_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 76, - "y": 134, - "w": 18, - "h": 24 - } - }, { "filename": "max_repel", "rotated": false, @@ -3153,33 +2586,12 @@ "h": 24 }, "frame": { - "x": 79, - "y": 158, + "x": 134, + "y": 213, "w": 16, "h": 24 } }, - { - "filename": "oval_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 86, - "y": 182, - "w": 21, - "h": 24 - } - }, { "filename": "pp_max", "rotated": false, @@ -3195,8 +2607,8 @@ "h": 24 }, "frame": { - "x": 92, - "y": 206, + "x": 134, + "y": 237, "w": 16, "h": 24 } @@ -3216,12 +2628,180 @@ "h": 24 }, "frame": { - "x": 92, - "y": 230, + "x": 149, + "y": 54, "w": 16, "h": 24 } }, + { + "filename": "auspicious_armor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 149, + "y": 78, + "w": 23, + "h": 21 + } + }, + { + "filename": "exp_share", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 148, + "y": 99, + "w": 24, + "h": 22 + } + }, + { + "filename": "leek", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 148, + "y": 121, + "w": 23, + "h": 23 + } + }, + { + "filename": "rare_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 148, + "y": 144, + "w": 23, + "h": 23 + } + }, + { + "filename": "rarer_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 148, + "y": 167, + "w": 23, + "h": 23 + } + }, + { + "filename": "fairy_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 148, + "y": 190, + "w": 22, + "h": 23 + } + }, + { + "filename": "fighting_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 150, + "y": 213, + "w": 22, + "h": 23 + } + }, + { + "filename": "fire_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 150, + "y": 236, + "w": 22, + "h": 23 + } + }, { "filename": "protein", "rotated": false, @@ -3237,8 +2817,8 @@ "h": 24 }, "frame": { - "x": 93, - "y": 254, + "x": 139, + "y": 261, "w": 16, "h": 24 } @@ -3258,56 +2838,14 @@ "h": 24 }, "frame": { - "x": 94, - "y": 278, + "x": 139, + "y": 285, "w": 16, "h": 24 } }, { - "filename": "shiny_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 94, - "y": 302, - "w": 21, - "h": 24 - } - }, - { - "filename": "dragon_fang", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 94, - "y": 326, - "w": 21, - "h": 23 - } - }, - { - "filename": "ground_tera_shard", + "filename": "fire_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -3321,14 +2859,14 @@ "h": 23 }, "frame": { - "x": 94, - "y": 349, + "x": 155, + "y": 259, "w": 22, "h": 23 } }, { - "filename": "ice_tera_shard", + "filename": "flying_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -3342,54 +2880,12 @@ "h": 23 }, "frame": { - "x": 94, - "y": 372, + "x": 155, + "y": 282, "w": 22, "h": 23 } }, - { - "filename": "prism_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 88, - "y": 119, - "w": 15, - "h": 15 - } - }, - { - "filename": "super_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 94, - "y": 134, - "w": 17, - "h": 24 - } - }, { "filename": "super_repel", "rotated": false, @@ -3405,14 +2901,14 @@ "h": 24 }, "frame": { - "x": 95, - "y": 158, + "x": 159, + "y": 22, "w": 16, "h": 24 } }, { - "filename": "berry_pot", + "filename": "peat_block", "rotated": false, "trimmed": true, "sourceSize": { @@ -3420,20 +2916,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, + "x": 4, "y": 5, - "w": 18, + "w": 24, "h": 22 }, "frame": { - "x": 340, - "y": 114, - "w": 18, + "x": 175, + "y": 21, + "w": 24, "h": 22 } }, { - "filename": "unknown", + "filename": "healing_charm", "rotated": false, "trimmed": true, "sourceSize": { @@ -3441,20 +2937,41 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 + "x": 5, + "y": 5, + "w": 23, + "h": 22 }, "frame": { - "x": 358, - "y": 112, - "w": 16, - "h": 24 + "x": 199, + "y": 21, + "w": 23, + "h": 22 } }, { - "filename": "never_melt_ice", + "filename": "rusted_sword", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 22 + }, + "frame": { + "x": 222, + "y": 21, + "w": 23, + "h": 22 + } + }, + { + "filename": "blank_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -3465,307 +2982,13 @@ "x": 5, "y": 5, "w": 22, - "h": 23 + "h": 22 }, "frame": { - "x": 374, - "y": 109, + "x": 245, + "y": 21, "w": 22, - "h": 23 - } - }, - { - "filename": "normal_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 396, - "y": 109, - "w": 22, - "h": 23 - } - }, - { - "filename": "zinc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 107, - "y": 182, - "w": 16, - "h": 24 - } - }, - { - "filename": "hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 108, - "y": 206, - "w": 17, - "h": 23 - } - }, - { - "filename": "lansat_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 108, - "y": 229, - "w": 21, - "h": 23 - } - }, - { - "filename": "leaf_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 109, - "y": 252, - "w": 21, - "h": 23 - } - }, - { - "filename": "mystic_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 20, - "h": 23 - }, - "frame": { - "x": 110, - "y": 275, - "w": 20, - "h": 23 - } - }, - { - "filename": "petaya_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 115, - "y": 298, - "w": 22, - "h": 23 - } - }, - { - "filename": "poison_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 115, - "y": 321, - "w": 22, - "h": 23 - } - }, - { - "filename": "psychic_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 116, - "y": 344, - "w": 22, - "h": 23 - } - }, - { - "filename": "reaper_cloth", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 116, - "y": 367, - "w": 22, - "h": 23 - } - }, - { - "filename": "rock_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 111, - "y": 123, - "w": 22, - "h": 23 - } - }, - { - "filename": "steel_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 111, - "y": 146, - "w": 22, - "h": 23 - } - }, - { - "filename": "stellar_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 133, - "y": 124, - "w": 22, - "h": 23 - } - }, - { - "filename": "water_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 155, - "y": 124, - "w": 22, - "h": 23 + "h": 22 } }, { @@ -3783,8 +3006,8 @@ "h": 22 }, "frame": { - "x": 133, - "y": 147, + "x": 267, + "y": 21, "w": 22, "h": 22 } @@ -3804,33 +3027,12 @@ "h": 22 }, "frame": { - "x": 155, - "y": 147, + "x": 289, + "y": 21, "w": 22, "h": 22 } }, - { - "filename": "wide_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 177, - "y": 125, - "w": 22, - "h": 23 - } - }, { "filename": "dark_memory", "rotated": false, @@ -3846,14 +3048,14 @@ "h": 22 }, "frame": { - "x": 199, - "y": 125, + "x": 311, + "y": 21, "w": 22, "h": 22 } }, { - "filename": "dire_hit", + "filename": "focus_sash", "rotated": false, "trimmed": true, "sourceSize": { @@ -3862,19 +3064,229 @@ }, "spriteSourceSize": { "x": 5, - "y": 5, + "y": 4, "w": 22, - "h": 22 + "h": 23 }, "frame": { - "x": 221, - "y": 125, + "x": 333, + "y": 20, "w": 22, - "h": 22 + "h": 23 } }, { - "filename": "deep_sea_tooth", + "filename": "ghost_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 355, + "y": 20, + "w": 22, + "h": 23 + } + }, + { + "filename": "grass_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 377, + "y": 20, + "w": 22, + "h": 23 + } + }, + { + "filename": "icy_reins_of_unity", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 399, + "y": 22, + "w": 24, + "h": 20 + } + }, + { + "filename": "dragon_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 175, + "y": 43, + "w": 24, + "h": 18 + } + }, + { + "filename": "metal_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 199, + "y": 43, + "w": 24, + "h": 20 + } + }, + { + "filename": "quick_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 223, + "y": 43, + "w": 24, + "h": 20 + } + }, + { + "filename": "rusted_shield", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 247, + "y": 43, + "w": 24, + "h": 20 + } + }, + { + "filename": "sacred_ash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 271, + "y": 43, + "w": 24, + "h": 20 + } + }, + { + "filename": "shadow_reins_of_unity", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 295, + "y": 43, + "w": 24, + "h": 20 + } + }, + { + "filename": "soft_sand", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 319, + "y": 43, + "w": 24, + "h": 20 + } + }, + { + "filename": "binding_band", "rotated": false, "trimmed": true, "sourceSize": { @@ -3884,77 +3296,14 @@ "spriteSourceSize": { "x": 5, "y": 6, - "w": 22, - "h": 21 + "w": 23, + "h": 20 }, "frame": { - "x": 177, - "y": 148, - "w": 22, - "h": 21 - } - }, - { - "filename": "dna_splicers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 199, - "y": 147, - "w": 22, - "h": 22 - } - }, - { - "filename": "dragon_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 221, - "y": 147, - "w": 22, - "h": 22 - } - }, - { - "filename": "electirizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 243, - "y": 131, - "w": 22, - "h": 22 + "x": 343, + "y": 43, + "w": 23, + "h": 20 } }, { @@ -3972,12 +3321,558 @@ "h": 21 }, "frame": { - "x": 265, - "y": 134, + "x": 366, + "y": 43, "w": 23, "h": 21 } }, + { + "filename": "black_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 165, + "y": 61, + "w": 23, + "h": 17 + } + }, + { + "filename": "unknown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 172, + "y": 78, + "w": 16, + "h": 24 + } + }, + { + "filename": "apicot_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 172, + "y": 102, + "w": 19, + "h": 20 + } + }, + { + "filename": "ground_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 171, + "y": 122, + "w": 22, + "h": 23 + } + }, + { + "filename": "ice_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 171, + "y": 145, + "w": 22, + "h": 23 + } + }, + { + "filename": "dire_hit", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 171, + "y": 168, + "w": 22, + "h": 22 + } + }, + { + "filename": "never_melt_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 170, + "y": 190, + "w": 22, + "h": 23 + } + }, + { + "filename": "lansat_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 172, + "y": 213, + "w": 21, + "h": 23 + } + }, + { + "filename": "leaf_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 172, + "y": 236, + "w": 21, + "h": 23 + } + }, + { + "filename": "zinc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 177, + "y": 259, + "w": 16, + "h": 24 + } + }, + { + "filename": "berry_pot", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 18, + "h": 22 + }, + "frame": { + "x": 177, + "y": 283, + "w": 18, + "h": 22 + } + }, + { + "filename": "normal_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 188, + "y": 63, + "w": 22, + "h": 23 + } + }, + { + "filename": "petaya_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 210, + "y": 63, + "w": 22, + "h": 23 + } + }, + { + "filename": "poison_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 232, + "y": 63, + "w": 22, + "h": 23 + } + }, + { + "filename": "psychic_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 254, + "y": 63, + "w": 22, + "h": 23 + } + }, + { + "filename": "reaper_cloth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 276, + "y": 63, + "w": 22, + "h": 23 + } + }, + { + "filename": "rock_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 298, + "y": 63, + "w": 22, + "h": 23 + } + }, + { + "filename": "steel_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 320, + "y": 63, + "w": 22, + "h": 23 + } + }, + { + "filename": "stellar_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 342, + "y": 63, + "w": 22, + "h": 23 + } + }, + { + "filename": "dna_splicers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 364, + "y": 64, + "w": 22, + "h": 22 + } + }, + { + "filename": "aggronite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 188, + "y": 86, + "w": 16, + "h": 16 + } + }, + { + "filename": "burn_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 204, + "y": 86, + "w": 23, + "h": 17 + } + }, + { + "filename": "chill_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 227, + "y": 86, + "w": 23, + "h": 17 + } + }, + { + "filename": "coupon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 250, + "y": 86, + "w": 23, + "h": 19 + } + }, + { + "filename": "golden_mystic_ticket", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 273, + "y": 86, + "w": 23, + "h": 19 + } + }, + { + "filename": "mystic_ticket", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 296, + "y": 86, + "w": 23, + "h": 19 + } + }, { "filename": "n_lunarizer", "rotated": false, @@ -3993,8 +3888,8 @@ "h": 21 }, "frame": { - "x": 288, - "y": 134, + "x": 319, + "y": 86, "w": 23, "h": 21 } @@ -4014,14 +3909,14 @@ "h": 21 }, "frame": { - "x": 311, - "y": 134, + "x": 342, + "y": 86, "w": 23, "h": 21 } }, { - "filename": "deep_sea_scale", + "filename": "deep_sea_tooth", "rotated": false, "trimmed": true, "sourceSize": { @@ -4032,17 +3927,17 @@ "x": 5, "y": 6, "w": 22, - "h": 20 + "h": 21 }, "frame": { - "x": 243, - "y": 153, + "x": 365, + "y": 86, "w": 22, - "h": 20 + "h": 21 } }, { - "filename": "mystic_ticket", + "filename": "dawn_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -4050,16 +3945,121 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 + "x": 6, + "y": 6, + "w": 20, + "h": 21 }, "frame": { - "x": 265, - "y": 155, - "w": 23, - "h": 19 + "x": 389, + "y": 43, + "w": 20, + "h": 21 + } + }, + { + "filename": "hyper_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 409, + "y": 42, + "w": 17, + "h": 23 + } + }, + { + "filename": "dragon_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 386, + "y": 64, + "w": 22, + "h": 22 + } + }, + { + "filename": "sachet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 18, + "h": 23 + }, + "frame": { + "x": 408, + "y": 65, + "w": 18, + "h": 23 + } + }, + { + "filename": "dusk_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 387, + "y": 86, + "w": 21, + "h": 21 + } + }, + { + "filename": "razor_fang", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 18, + "h": 20 + }, + "frame": { + "x": 408, + "y": 88, + "w": 18, + "h": 20 } }, { @@ -4077,14 +4077,14 @@ "h": 19 }, "frame": { - "x": 288, - "y": 155, + "x": 191, + "y": 103, "w": 23, "h": 19 } }, { - "filename": "reviver_seed", + "filename": "sharp_beak", "rotated": false, "trimmed": true, "sourceSize": { @@ -4093,15 +4093,99 @@ }, "spriteSourceSize": { "x": 5, - "y": 8, - "w": 23, - "h": 20 + "y": 5, + "w": 21, + "h": 23 }, "frame": { - "x": 311, - "y": 155, - "w": 23, - "h": 20 + "x": 193, + "y": 122, + "w": 21, + "h": 23 + } + }, + { + "filename": "water_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 214, + "y": 103, + "w": 22, + "h": 23 + } + }, + { + "filename": "whipped_dream", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 193, + "y": 145, + "w": 21, + "h": 23 + } + }, + { + "filename": "wide_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 214, + "y": 126, + "w": 22, + "h": 23 + } + }, + { + "filename": "electirizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 193, + "y": 168, + "w": 22, + "h": 22 } }, { @@ -4119,12 +4203,33 @@ "h": 22 }, "frame": { - "x": 334, - "y": 136, + "x": 192, + "y": 190, "w": 22, "h": 22 } }, + { + "filename": "blunder_policy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 19 + }, + "frame": { + "x": 214, + "y": 149, + "w": 22, + "h": 19 + } + }, { "filename": "enigma_berry", "rotated": false, @@ -4140,33 +4245,12 @@ "h": 22 }, "frame": { - "x": 356, - "y": 136, + "x": 215, + "y": 168, "w": 22, "h": 22 } }, - { - "filename": "burn_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 334, - "y": 158, - "w": 23, - "h": 17 - } - }, { "filename": "fairy_memory", "rotated": false, @@ -4182,8 +4266,8 @@ "h": 22 }, "frame": { - "x": 378, - "y": 132, + "x": 214, + "y": 190, "w": 22, "h": 22 } @@ -4203,54 +4287,12 @@ "h": 22 }, "frame": { - "x": 400, - "y": 132, + "x": 193, + "y": 212, "w": 22, "h": 22 } }, - { - "filename": "chill_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 357, - "y": 158, - "w": 23, - "h": 17 - } - }, - { - "filename": "wellspring_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 380, - "y": 154, - "w": 23, - "h": 21 - } - }, { "filename": "fire_memory", "rotated": false, @@ -4266,8 +4308,8 @@ "h": 22 }, "frame": { - "x": 403, - "y": 154, + "x": 193, + "y": 234, "w": 22, "h": 22 } @@ -4287,8 +4329,8 @@ "h": 22 }, "frame": { - "x": 123, - "y": 169, + "x": 193, + "y": 256, "w": 22, "h": 22 } @@ -4308,8 +4350,8 @@ "h": 22 }, "frame": { - "x": 145, - "y": 169, + "x": 215, + "y": 212, "w": 22, "h": 22 } @@ -4329,8 +4371,8 @@ "h": 22 }, "frame": { - "x": 167, - "y": 169, + "x": 215, + "y": 234, "w": 22, "h": 22 } @@ -4350,8 +4392,8 @@ "h": 22 }, "frame": { - "x": 189, - "y": 169, + "x": 215, + "y": 256, "w": 22, "h": 22 } @@ -4371,75 +4413,12 @@ "h": 22 }, "frame": { - "x": 211, - "y": 169, + "x": 195, + "y": 278, "w": 22, "h": 22 } }, - { - "filename": "shell_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 23, - "h": 20 - }, - "frame": { - "x": 233, - "y": 173, - "w": 23, - "h": 20 - } - }, - { - "filename": "dubious_disc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 256, - "y": 174, - "w": 22, - "h": 19 - } - }, - { - "filename": "fairy_feather", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 20 - }, - "frame": { - "x": 278, - "y": 174, - "w": 22, - "h": 20 - } - }, { "filename": "guard_spec", "rotated": false, @@ -4455,8 +4434,8 @@ "h": 22 }, "frame": { - "x": 300, - "y": 175, + "x": 217, + "y": 278, "w": 22, "h": 22 } @@ -4476,8 +4455,8 @@ "h": 22 }, "frame": { - "x": 322, - "y": 175, + "x": 236, + "y": 105, "w": 22, "h": 22 } @@ -4497,8 +4476,8 @@ "h": 22 }, "frame": { - "x": 344, - "y": 175, + "x": 236, + "y": 127, "w": 22, "h": 22 } @@ -4518,33 +4497,12 @@ "h": 22 }, "frame": { - "x": 366, - "y": 175, + "x": 258, + "y": 105, "w": 22, "h": 22 } }, - { - "filename": "leftovers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 15, - "h": 22 - }, - "frame": { - "x": 388, - "y": 175, - "w": 15, - "h": 22 - } - }, { "filename": "mini_black_hole", "rotated": false, @@ -4560,8 +4518,8 @@ "h": 22 }, "frame": { - "x": 403, - "y": 176, + "x": 280, + "y": 105, "w": 22, "h": 22 } @@ -4581,8 +4539,8 @@ "h": 22 }, "frame": { - "x": 125, - "y": 191, + "x": 258, + "y": 127, "w": 22, "h": 22 } @@ -4602,12 +4560,33 @@ "h": 22 }, "frame": { - "x": 147, - "y": 191, + "x": 280, + "y": 127, "w": 22, "h": 22 } }, + { + "filename": "dubious_disc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 236, + "y": 149, + "w": 22, + "h": 19 + } + }, { "filename": "psychic_memory", "rotated": false, @@ -4623,8 +4602,8 @@ "h": 22 }, "frame": { - "x": 169, - "y": 191, + "x": 237, + "y": 168, "w": 22, "h": 22 } @@ -4644,12 +4623,33 @@ "h": 22 }, "frame": { - "x": 191, - "y": 191, + "x": 236, + "y": 190, "w": 22, "h": 22 } }, + { + "filename": "mystic_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 23 + }, + "frame": { + "x": 237, + "y": 212, + "w": 20, + "h": 23 + } + }, { "filename": "hard_meteorite", "rotated": false, @@ -4665,8 +4665,8 @@ "h": 22 }, "frame": { - "x": 213, - "y": 191, + "x": 237, + "y": 235, "w": 20, "h": 22 } @@ -4686,12 +4686,75 @@ "h": 21 }, "frame": { - "x": 233, - "y": 193, + "x": 237, + "y": 257, "w": 22, "h": 21 } }, + { + "filename": "potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 302, + "y": 105, + "w": 17, + "h": 23 + } + }, + { + "filename": "wellspring_mask", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 319, + "y": 107, + "w": 23, + "h": 21 + } + }, + { + "filename": "reviver_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 8, + "w": 23, + "h": 20 + }, + "frame": { + "x": 302, + "y": 128, + "w": 23, + "h": 20 + } + }, { "filename": "scroll_of_darkness", "rotated": false, @@ -4707,117 +4770,12 @@ "h": 22 }, "frame": { - "x": 255, - "y": 193, + "x": 342, + "y": 107, "w": 22, "h": 22 } }, - { - "filename": "douse_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 277, - "y": 194, - "w": 23, - "h": 17 - } - }, - { - "filename": "relic_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 17, - "h": 16 - }, - "frame": { - "x": 125, - "y": 213, - "w": 17, - "h": 16 - } - }, - { - "filename": "shock_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 142, - "y": 213, - "w": 23, - "h": 17 - } - }, - { - "filename": "wise_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 165, - "y": 213, - "w": 23, - "h": 17 - } - }, - { - "filename": "malicious_armor", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 188, - "y": 213, - "w": 22, - "h": 20 - } - }, { "filename": "scroll_of_waters", "rotated": false, @@ -4833,8 +4791,8 @@ "h": 22 }, "frame": { - "x": 210, - "y": 213, + "x": 364, + "y": 107, "w": 22, "h": 22 } @@ -4854,12 +4812,75 @@ "h": 22 }, "frame": { - "x": 232, - "y": 214, + "x": 386, + "y": 107, "w": 22, "h": 22 } }, + { + "filename": "oval_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 19 + }, + "frame": { + "x": 408, + "y": 108, + "w": 18, + "h": 19 + } + }, + { + "filename": "sitrus_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 239, + "y": 278, + "w": 20, + "h": 22 + } + }, + { + "filename": "upgrade", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 258, + "y": 149, + "w": 22, + "h": 19 + } + }, { "filename": "starf_berry", "rotated": false, @@ -4875,8 +4896,8 @@ "h": 22 }, "frame": { - "x": 254, - "y": 215, + "x": 259, + "y": 168, "w": 22, "h": 22 } @@ -4896,8 +4917,8 @@ "h": 22 }, "frame": { - "x": 300, - "y": 197, + "x": 258, + "y": 190, "w": 22, "h": 22 } @@ -4917,8 +4938,8 @@ "h": 22 }, "frame": { - "x": 322, - "y": 197, + "x": 257, + "y": 212, "w": 22, "h": 22 } @@ -4938,12 +4959,33 @@ "h": 22 }, "frame": { - "x": 344, - "y": 197, + "x": 257, + "y": 234, "w": 22, "h": 22 } }, + { + "filename": "metal_alloy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 21, + "h": 19 + }, + "frame": { + "x": 280, + "y": 149, + "w": 21, + "h": 19 + } + }, { "filename": "tm_bug", "rotated": false, @@ -4959,8 +5001,8 @@ "h": 22 }, "frame": { - "x": 366, - "y": 197, + "x": 281, + "y": 168, "w": 22, "h": 22 } @@ -4980,54 +5022,12 @@ "h": 22 }, "frame": { - "x": 129, - "y": 230, + "x": 280, + "y": 190, "w": 22, "h": 22 } }, - { - "filename": "sharp_beak", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 130, - "y": 252, - "w": 21, - "h": 23 - } - }, - { - "filename": "whipped_dream", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 130, - "y": 275, - "w": 21, - "h": 23 - } - }, { "filename": "tm_dragon", "rotated": false, @@ -5043,8 +5043,8 @@ "h": 22 }, "frame": { - "x": 151, - "y": 230, + "x": 279, + "y": 212, "w": 22, "h": 22 } @@ -5064,8 +5064,8 @@ "h": 22 }, "frame": { - "x": 151, - "y": 252, + "x": 279, + "y": 234, "w": 22, "h": 22 } @@ -5085,138 +5085,12 @@ "h": 22 }, "frame": { - "x": 151, - "y": 274, + "x": 259, + "y": 256, "w": 22, "h": 22 } }, - { - "filename": "potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 137, - "y": 298, - "w": 17, - "h": 23 - } - }, - { - "filename": "sachet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 18, - "h": 23 - }, - "frame": { - "x": 137, - "y": 321, - "w": 18, - "h": 23 - } - }, - { - "filename": "super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 138, - "y": 344, - "w": 17, - "h": 23 - } - }, - { - "filename": "lock_capsule", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 154, - "y": 296, - "w": 19, - "h": 22 - } - }, - { - "filename": "metal_coat", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 138, - "y": 367, - "w": 19, - "h": 22 - } - }, - { - "filename": "sitrus_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 155, - "y": 318, - "w": 20, - "h": 22 - } - }, { "filename": "tm_fighting", "rotated": false, @@ -5232,8 +5106,8 @@ "h": 22 }, "frame": { - "x": 155, - "y": 340, + "x": 259, + "y": 278, "w": 22, "h": 22 } @@ -5253,75 +5127,12 @@ "h": 22 }, "frame": { - "x": 157, - "y": 362, + "x": 281, + "y": 256, "w": 22, "h": 22 } }, - { - "filename": "relic_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 15, - "h": 11 - }, - "frame": { - "x": 173, - "y": 230, - "w": 15, - "h": 11 - } - }, - { - "filename": "metronome", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 173, - "y": 241, - "w": 17, - "h": 22 - } - }, - { - "filename": "soothe_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 173, - "y": 263, - "w": 17, - "h": 22 - } - }, { "filename": "tm_flying", "rotated": false, @@ -5337,14 +5148,224 @@ "h": 22 }, "frame": { - "x": 173, - "y": 285, + "x": 281, + "y": 278, "w": 22, "h": 22 } }, { - "filename": "dawn_stone", + "filename": "baton", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 408, + "y": 127, + "w": 18, + "h": 18 + } + }, + { + "filename": "golden_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 325, + "y": 128, + "w": 17, + "h": 20 + } + }, + { + "filename": "shell_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 23, + "h": 20 + }, + "frame": { + "x": 342, + "y": 129, + "w": 23, + "h": 20 + } + }, + { + "filename": "deep_sea_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 365, + "y": 129, + "w": 22, + "h": 20 + } + }, + { + "filename": "poison_barb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 387, + "y": 129, + "w": 21, + "h": 21 + } + }, + { + "filename": "candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 11, + "w": 18, + "h": 18 + }, + "frame": { + "x": 408, + "y": 145, + "w": 18, + "h": 18 + } + }, + { + "filename": "douse_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 195, + "y": 300, + "w": 23, + "h": 17 + } + }, + { + "filename": "relic_crown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 18 + }, + "frame": { + "x": 218, + "y": 300, + "w": 23, + "h": 18 + } + }, + { + "filename": "fairy_feather", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 20 + }, + "frame": { + "x": 241, + "y": 300, + "w": 22, + "h": 20 + } + }, + { + "filename": "malicious_armor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 263, + "y": 300, + "w": 22, + "h": 20 + } + }, + { + "filename": "big_nugget", "rotated": false, "trimmed": true, "sourceSize": { @@ -5355,13 +5376,76 @@ "x": 6, "y": 6, "w": 20, - "h": 21 + "h": 20 }, "frame": { - "x": 190, - "y": 233, + "x": 285, + "y": 300, "w": 20, - "h": 21 + "h": 20 + } + }, + { + "filename": "shock_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 155, + "y": 305, + "w": 23, + "h": 17 + } + }, + { + "filename": "lucky_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 178, + "y": 305, + "w": 17, + "h": 20 + } + }, + { + "filename": "wise_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 195, + "y": 317, + "w": 23, + "h": 17 } }, { @@ -5379,8 +5463,8 @@ "h": 21 }, "frame": { - "x": 210, - "y": 235, + "x": 218, + "y": 318, "w": 22, "h": 21 } @@ -5400,33 +5484,12 @@ "h": 21 }, "frame": { - "x": 232, - "y": 236, + "x": 240, + "y": 320, "w": 22, "h": 21 } }, - { - "filename": "gb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 190, - "y": 254, - "w": 20, - "h": 20 - } - }, { "filename": "tart_apple", "rotated": false, @@ -5442,14 +5505,14 @@ "h": 21 }, "frame": { - "x": 254, - "y": 237, + "x": 262, + "y": 320, "w": 22, "h": 21 } }, { - "filename": "tera_orb", + "filename": "shiny_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -5459,14 +5522,35 @@ "spriteSourceSize": { "x": 5, "y": 6, - "w": 22, - "h": 20 + "w": 21, + "h": 21 }, "frame": { - "x": 210, - "y": 256, - "w": 22, - "h": 20 + "x": 284, + "y": 320, + "w": 21, + "h": 21 + } + }, + { + "filename": "alakazite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 139, + "y": 309, + "w": 16, + "h": 16 } }, { @@ -5484,12 +5568,54 @@ "h": 22 }, "frame": { - "x": 232, - "y": 257, + "x": 135, + "y": 325, "w": 22, "h": 22 } }, + { + "filename": "zoom_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 157, + "y": 322, + "w": 21, + "h": 21 + } + }, + { + "filename": "metronome", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 178, + "y": 325, + "w": 17, + "h": 22 + } + }, { "filename": "tm_grass", "rotated": false, @@ -5505,12 +5631,54 @@ "h": 22 }, "frame": { - "x": 254, - "y": 258, + "x": 136, + "y": 347, "w": 22, "h": 22 } }, + { + "filename": "blue_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 158, + "y": 343, + "w": 20, + "h": 20 + } + }, + { + "filename": "super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 141, + "y": 369, + "w": 17, + "h": 23 + } + }, { "filename": "tm_ground", "rotated": false, @@ -5526,12 +5694,54 @@ "h": 22 }, "frame": { - "x": 175, - "y": 307, + "x": 158, + "y": 363, "w": 22, "h": 22 } }, + { + "filename": "metal_coat", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 19, + "h": 22 + }, + "frame": { + "x": 141, + "y": 392, + "w": 19, + "h": 22 + } + }, + { + "filename": "tera_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 195, + "y": 334, + "w": 22, + "h": 20 + } + }, { "filename": "tm_ice", "rotated": false, @@ -5547,8 +5757,8 @@ "h": 22 }, "frame": { - "x": 177, - "y": 329, + "x": 217, + "y": 339, "w": 22, "h": 22 } @@ -5568,8 +5778,8 @@ "h": 22 }, "frame": { - "x": 179, - "y": 351, + "x": 239, + "y": 341, "w": 22, "h": 22 } @@ -5589,8 +5799,8 @@ "h": 22 }, "frame": { - "x": 179, - "y": 373, + "x": 261, + "y": 341, "w": 22, "h": 22 } @@ -5610,14 +5820,14 @@ "h": 22 }, "frame": { - "x": 157, - "y": 384, + "x": 283, + "y": 341, "w": 22, "h": 22 } }, { - "filename": "upgrade", + "filename": "tm_rock", "rotated": false, "trimmed": true, "sourceSize": { @@ -5626,36 +5836,15 @@ }, "spriteSourceSize": { "x": 5, - "y": 7, + "y": 5, "w": 22, - "h": 19 + "h": 22 }, "frame": { - "x": 109, - "y": 406, + "x": 160, + "y": 385, "w": 22, - "h": 19 - } - }, - { - "filename": "metal_alloy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 21, - "h": 19 - }, - "frame": { - "x": 131, - "y": 406, - "w": 21, - "h": 19 + "h": 22 } }, { @@ -5673,8 +5862,8 @@ "h": 19 }, "frame": { - "x": 152, - "y": 406, + "x": 160, + "y": 407, "w": 20, "h": 19 } @@ -5694,14 +5883,14 @@ "h": 19 }, "frame": { - "x": 172, - "y": 406, + "x": 180, + "y": 407, "w": 20, "h": 19 } }, { - "filename": "absolite", + "filename": "altarianite", "rotated": false, "trimmed": true, "sourceSize": { @@ -5715,14 +5904,14 @@ "h": 16 }, "frame": { - "x": 116, - "y": 390, + "x": 178, + "y": 347, "w": 16, "h": 16 } }, { - "filename": "aerodactylite", + "filename": "leftovers", "rotated": false, "trimmed": true, "sourceSize": { @@ -5731,35 +5920,14 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 132, - "y": 390, - "w": 16, - "h": 16 - } - }, - { - "filename": "tm_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, "y": 5, - "w": 22, + "w": 15, "h": 22 }, "frame": { - "x": 388, - "y": 198, - "w": 22, + "x": 180, + "y": 363, + "w": 15, "h": 22 } }, @@ -5778,12 +5946,33 @@ "h": 22 }, "frame": { - "x": 277, - "y": 211, + "x": 182, + "y": 385, "w": 22, "h": 22 } }, + { + "filename": "razor_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 200, + "y": 407, + "w": 20, + "h": 19 + } + }, { "filename": "tm_water", "rotated": false, @@ -5799,8 +5988,8 @@ "h": 22 }, "frame": { - "x": 276, - "y": 233, + "x": 195, + "y": 354, "w": 22, "h": 22 } @@ -5820,8 +6009,8 @@ "h": 22 }, "frame": { - "x": 276, - "y": 255, + "x": 217, + "y": 361, "w": 22, "h": 22 } @@ -5841,8 +6030,8 @@ "h": 22 }, "frame": { - "x": 299, - "y": 219, + "x": 239, + "y": 363, "w": 22, "h": 22 } @@ -5862,8 +6051,8 @@ "h": 22 }, "frame": { - "x": 321, - "y": 219, + "x": 261, + "y": 363, "w": 22, "h": 22 } @@ -5883,12 +6072,54 @@ "h": 22 }, "frame": { - "x": 343, - "y": 219, + "x": 283, + "y": 363, "w": 22, "h": 22 } }, + { + "filename": "soothe_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 204, + "y": 385, + "w": 17, + "h": 22 + } + }, + { + "filename": "white_herb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 220, + "y": 407, + "w": 20, + "h": 19 + } + }, { "filename": "x_defense", "rotated": false, @@ -5904,8 +6135,8 @@ "h": 22 }, "frame": { - "x": 365, - "y": 219, + "x": 221, + "y": 385, "w": 22, "h": 22 } @@ -5925,12 +6156,33 @@ "h": 22 }, "frame": { - "x": 298, - "y": 241, + "x": 243, + "y": 385, "w": 22, "h": 22 } }, + { + "filename": "miracle_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 19, + "h": 19 + }, + "frame": { + "x": 240, + "y": 407, + "w": 19, + "h": 19 + } + }, { "filename": "x_sp_def", "rotated": false, @@ -5946,8 +6198,8 @@ "h": 22 }, "frame": { - "x": 320, - "y": 241, + "x": 265, + "y": 385, "w": 22, "h": 22 } @@ -5967,117 +6219,12 @@ "h": 22 }, "frame": { - "x": 342, - "y": 241, + "x": 287, + "y": 385, "w": 22, "h": 22 } }, - { - "filename": "dusk_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 364, - "y": 241, - "w": 21, - "h": 21 - } - }, - { - "filename": "poison_barb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 387, - "y": 220, - "w": 21, - "h": 21 - } - }, - { - "filename": "golden_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 408, - "y": 220, - "w": 17, - "h": 20 - } - }, - { - "filename": "shiny_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 385, - "y": 241, - "w": 21, - "h": 21 - } - }, - { - "filename": "quick_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 406, - "y": 241, - "w": 19, - "h": 21 - } - }, { "filename": "masterpiece_teacup", "rotated": false, @@ -6093,8 +6240,8 @@ "h": 18 }, "frame": { - "x": 298, - "y": 263, + "x": 259, + "y": 407, "w": 21, "h": 18 } @@ -6114,14 +6261,14 @@ "h": 18 }, "frame": { - "x": 319, - "y": 263, + "x": 280, + "y": 407, "w": 21, "h": 18 } }, { - "filename": "unremarkable_teacup", + "filename": "dark_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -6129,20 +6276,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, + "x": 7, "y": 7, - "w": 21, + "w": 18, "h": 18 }, "frame": { - "x": 340, - "y": 263, - "w": 21, + "x": 301, + "y": 407, + "w": 18, "h": 18 } }, { - "filename": "zoom_lens", + "filename": "relic_gold", "rotated": false, "trimmed": true, "sourceSize": { @@ -6150,20 +6297,41 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 + "x": 9, + "y": 11, + "w": 15, + "h": 11 }, "frame": { - "x": 276, - "y": 277, - "w": 21, - "h": 21 + "x": 0, + "y": 414, + "w": 15, + "h": 11 } }, { - "filename": "everstone", + "filename": "full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 15, + "h": 23 + }, + "frame": { + "x": 301, + "y": 212, + "w": 15, + "h": 23 + } + }, + { + "filename": "quick_claw", "rotated": false, "trimmed": true, "sourceSize": { @@ -6172,15 +6340,78 @@ }, "spriteSourceSize": { "x": 6, - "y": 8, - "w": 20, - "h": 17 + "y": 6, + "w": 19, + "h": 21 }, "frame": { - "x": 297, - "y": 281, + "x": 301, + "y": 235, + "w": 19, + "h": 21 + } + }, + { + "filename": "spell_tag", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 19, + "h": 21 + }, + "frame": { + "x": 303, + "y": 256, + "w": 19, + "h": 21 + } + }, + { + "filename": "candy_jar", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 303, + "y": 277, + "w": 19, + "h": 20 + } + }, + { + "filename": "gb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, "w": 20, - "h": 17 + "h": 20 + }, + "frame": { + "x": 305, + "y": 297, + "w": 20, + "h": 20 } }, { @@ -6198,8 +6429,8 @@ "h": 20 }, "frame": { - "x": 317, - "y": 281, + "x": 305, + "y": 317, "w": 20, "h": 20 } @@ -6219,54 +6450,12 @@ "h": 20 }, "frame": { - "x": 337, - "y": 281, + "x": 305, + "y": 337, "w": 20, "h": 20 } }, - { - "filename": "candy_jar", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 357, - "y": 281, - "w": 19, - "h": 20 - } - }, - { - "filename": "baton", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 361, - "y": 263, - "w": 18, - "h": 18 - } - }, { "filename": "pb", "rotated": false, @@ -6282,12 +6471,33 @@ "h": 20 }, "frame": { - "x": 379, - "y": 262, + "x": 305, + "y": 357, "w": 20, "h": 20 } }, + { + "filename": "hard_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 309, + "y": 377, + "w": 19, + "h": 20 + } + }, { "filename": "pb_gold", "rotated": false, @@ -6303,33 +6513,12 @@ "h": 20 }, "frame": { - "x": 399, - "y": 262, + "x": 302, + "y": 148, "w": 20, "h": 20 } }, - { - "filename": "razor_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 376, - "y": 282, - "w": 20, - "h": 19 - } - }, { "filename": "rb", "rotated": false, @@ -6345,33 +6534,12 @@ "h": 20 }, "frame": { - "x": 396, - "y": 282, + "x": 322, + "y": 148, "w": 20, "h": 20 } }, - { - "filename": "spell_tag", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 192, - "y": 395, - "w": 19, - "h": 21 - } - }, { "filename": "smooth_meteorite", "rotated": false, @@ -6387,8 +6555,8 @@ "h": 20 }, "frame": { - "x": 211, - "y": 276, + "x": 303, + "y": 168, "w": 20, "h": 20 } @@ -6408,8 +6576,8 @@ "h": 20 }, "frame": { - "x": 231, - "y": 279, + "x": 342, + "y": 149, "w": 20, "h": 20 } @@ -6429,14 +6597,14 @@ "h": 20 }, "frame": { - "x": 251, - "y": 280, + "x": 362, + "y": 149, "w": 20, "h": 20 } }, { - "filename": "mystery_egg", + "filename": "flame_orb", "rotated": false, "trimmed": true, "sourceSize": { @@ -6444,20 +6612,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, + "x": 7, + "y": 7, + "w": 18, "h": 18 }, "frame": { - "x": 195, - "y": 276, - "w": 16, + "x": 323, + "y": 168, + "w": 18, "h": 18 } }, { - "filename": "white_herb", + "filename": "unremarkable_teacup", "rotated": false, "trimmed": true, "sourceSize": { @@ -6465,16 +6633,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, + "x": 5, "y": 7, - "w": 20, - "h": 19 + "w": 21, + "h": 18 }, "frame": { - "x": 211, - "y": 296, - "w": 20, - "h": 19 + "x": 341, + "y": 169, + "w": 21, + "h": 18 } }, { @@ -6492,8 +6660,8 @@ "h": 18 }, "frame": { - "x": 231, - "y": 299, + "x": 362, + "y": 169, "w": 20, "h": 18 } @@ -6513,54 +6681,12 @@ "h": 18 }, "frame": { - "x": 251, - "y": 300, + "x": 382, + "y": 150, "w": 20, "h": 18 } }, - { - "filename": "hard_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 271, - "y": 298, - "w": 19, - "h": 20 - } - }, - { - "filename": "miracle_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 19, - "h": 19 - }, - "frame": { - "x": 290, - "y": 298, - "w": 19, - "h": 19 - } - }, { "filename": "wl_awakening", "rotated": false, @@ -6576,8 +6702,8 @@ "h": 18 }, "frame": { - "x": 309, - "y": 301, + "x": 382, + "y": 168, "w": 20, "h": 18 } @@ -6597,12 +6723,33 @@ "h": 18 }, "frame": { - "x": 329, - "y": 301, + "x": 402, + "y": 163, "w": 20, "h": 18 } }, + { + "filename": "everstone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 17 + }, + "frame": { + "x": 402, + "y": 181, + "w": 20, + "h": 17 + } + }, { "filename": "wl_custom_spliced", "rotated": false, @@ -6618,8 +6765,8 @@ "h": 18 }, "frame": { - "x": 349, - "y": 301, + "x": 382, + "y": 186, "w": 20, "h": 18 } @@ -6639,8 +6786,8 @@ "h": 18 }, "frame": { - "x": 369, - "y": 301, + "x": 402, + "y": 198, "w": 20, "h": 18 } @@ -6660,14 +6807,14 @@ "h": 18 }, "frame": { - "x": 389, - "y": 302, + "x": 303, + "y": 188, "w": 20, "h": 18 } }, { - "filename": "aggronite", + "filename": "light_ball", "rotated": false, "trimmed": true, "sourceSize": { @@ -6675,37 +6822,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 7, + "y": 7, + "w": 18, + "h": 18 }, "frame": { - "x": 409, - "y": 302, - "w": 16, - "h": 16 - } - }, - { - "filename": "alakazite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 409, - "y": 318, - "w": 16, - "h": 16 + "x": 323, + "y": 186, + "w": 18, + "h": 18 } }, { @@ -6723,8 +6849,8 @@ "h": 18 }, "frame": { - "x": 211, - "y": 315, + "x": 341, + "y": 187, "w": 20, "h": 18 } @@ -6744,12 +6870,33 @@ "h": 18 }, "frame": { - "x": 231, - "y": 317, + "x": 361, + "y": 187, "w": 20, "h": 18 } }, + { + "filename": "light_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 323, + "y": 204, + "w": 18, + "h": 18 + } + }, { "filename": "wl_full_restore", "rotated": false, @@ -6765,8 +6912,8 @@ "h": 18 }, "frame": { - "x": 251, - "y": 318, + "x": 341, + "y": 205, "w": 20, "h": 18 } @@ -6786,33 +6933,12 @@ "h": 18 }, "frame": { - "x": 271, - "y": 318, + "x": 361, + "y": 205, "w": 20, "h": 18 } }, - { - "filename": "oval_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 19 - }, - "frame": { - "x": 291, - "y": 317, - "w": 18, - "h": 19 - } - }, { "filename": "wl_hyper_potion", "rotated": false, @@ -6828,8 +6954,8 @@ "h": 18 }, "frame": { - "x": 309, - "y": 319, + "x": 381, + "y": 204, "w": 20, "h": 18 } @@ -6849,8 +6975,8 @@ "h": 18 }, "frame": { - "x": 329, - "y": 319, + "x": 401, + "y": 216, "w": 20, "h": 18 } @@ -6870,8 +6996,8 @@ "h": 18 }, "frame": { - "x": 349, - "y": 319, + "x": 381, + "y": 222, "w": 20, "h": 18 } @@ -6891,8 +7017,8 @@ "h": 18 }, "frame": { - "x": 369, - "y": 319, + "x": 401, + "y": 234, "w": 20, "h": 18 } @@ -6912,33 +7038,12 @@ "h": 18 }, "frame": { - "x": 389, - "y": 320, + "x": 320, + "y": 222, "w": 20, "h": 18 } }, - { - "filename": "altarianite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 409, - "y": 334, - "w": 16, - "h": 16 - } - }, { "filename": "wl_max_ether", "rotated": false, @@ -6954,54 +7059,12 @@ "h": 18 }, "frame": { - "x": 199, - "y": 333, + "x": 340, + "y": 223, "w": 20, "h": 18 } }, - { - "filename": "razor_fang", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 18, - "h": 20 - }, - "frame": { - "x": 201, - "y": 351, - "w": 18, - "h": 20 - } - }, - { - "filename": "lucky_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 201, - "y": 371, - "w": 17, - "h": 20 - } - }, { "filename": "wl_max_potion", "rotated": false, @@ -7017,12 +7080,96 @@ "h": 18 }, "frame": { - "x": 219, - "y": 335, + "x": 360, + "y": 223, "w": 20, "h": 18 } }, + { + "filename": "ampharosite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 320, + "y": 240, + "w": 16, + "h": 16 + } + }, + { + "filename": "mystery_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 18 + }, + "frame": { + "x": 322, + "y": 256, + "w": 16, + "h": 18 + } + }, + { + "filename": "toxic_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 322, + "y": 274, + "w": 18, + "h": 18 + } + }, + { + "filename": "eviolite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 336, + "y": 241, + "w": 15, + "h": 15 + } + }, { "filename": "wl_max_revive", "rotated": false, @@ -7038,8 +7185,8 @@ "h": 18 }, "frame": { - "x": 219, - "y": 353, + "x": 351, + "y": 241, "w": 20, "h": 18 } @@ -7059,8 +7206,8 @@ "h": 18 }, "frame": { - "x": 218, - "y": 371, + "x": 325, + "y": 292, "w": 20, "h": 18 } @@ -7080,8 +7227,8 @@ "h": 18 }, "frame": { - "x": 239, - "y": 336, + "x": 325, + "y": 310, "w": 20, "h": 18 } @@ -7101,8 +7248,8 @@ "h": 18 }, "frame": { - "x": 259, - "y": 336, + "x": 325, + "y": 328, "w": 20, "h": 18 } @@ -7122,8 +7269,8 @@ "h": 18 }, "frame": { - "x": 279, - "y": 336, + "x": 325, + "y": 346, "w": 20, "h": 18 } @@ -7143,159 +7290,12 @@ "h": 18 }, "frame": { - "x": 239, - "y": 354, + "x": 371, + "y": 241, "w": 20, "h": 18 } }, - { - "filename": "candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 11, - "w": 18, - "h": 18 - }, - "frame": { - "x": 259, - "y": 354, - "w": 18, - "h": 18 - } - }, - { - "filename": "dark_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 277, - "y": 354, - "w": 18, - "h": 18 - } - }, - { - "filename": "flame_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 238, - "y": 372, - "w": 18, - "h": 18 - } - }, - { - "filename": "light_ball", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 256, - "y": 372, - "w": 18, - "h": 18 - } - }, - { - "filename": "light_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 274, - "y": 372, - "w": 18, - "h": 18 - } - }, - { - "filename": "toxic_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 299, - "y": 337, - "w": 18, - "h": 18 - } - }, - { - "filename": "ampharosite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 317, - "y": 337, - "w": 16, - "h": 16 - } - }, { "filename": "audinite", "rotated": false, @@ -7311,8 +7311,8 @@ "h": 16 }, "frame": { - "x": 333, - "y": 337, + "x": 328, + "y": 364, "w": 16, "h": 16 } @@ -7332,12 +7332,33 @@ "h": 16 }, "frame": { - "x": 349, - "y": 337, + "x": 328, + "y": 380, "w": 16, "h": 16 } }, + { + "filename": "prism_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 338, + "y": 259, + "w": 15, + "h": 15 + } + }, { "filename": "beedrillite", "rotated": false, @@ -7353,8 +7374,8 @@ "h": 16 }, "frame": { - "x": 365, - "y": 337, + "x": 353, + "y": 259, "w": 16, "h": 16 } @@ -7374,8 +7395,8 @@ "h": 16 }, "frame": { - "x": 295, - "y": 355, + "x": 369, + "y": 259, "w": 16, "h": 16 } @@ -7395,8 +7416,8 @@ "h": 16 }, "frame": { - "x": 381, - "y": 338, + "x": 385, + "y": 259, "w": 16, "h": 16 } @@ -7416,8 +7437,8 @@ "h": 16 }, "frame": { - "x": 311, - "y": 355, + "x": 401, + "y": 252, "w": 16, "h": 16 } @@ -7437,8 +7458,8 @@ "h": 16 }, "frame": { - "x": 327, - "y": 353, + "x": 401, + "y": 268, "w": 16, "h": 16 } @@ -7458,8 +7479,8 @@ "h": 16 }, "frame": { - "x": 343, - "y": 353, + "x": 340, + "y": 275, "w": 16, "h": 16 } @@ -7479,8 +7500,8 @@ "h": 16 }, "frame": { - "x": 359, - "y": 353, + "x": 356, + "y": 275, "w": 16, "h": 16 } @@ -7500,8 +7521,8 @@ "h": 16 }, "frame": { - "x": 375, - "y": 354, + "x": 372, + "y": 275, "w": 16, "h": 16 } @@ -7521,8 +7542,8 @@ "h": 16 }, "frame": { - "x": 391, - "y": 354, + "x": 345, + "y": 291, "w": 16, "h": 16 } @@ -7542,8 +7563,8 @@ "h": 16 }, "frame": { - "x": 407, - "y": 350, + "x": 345, + "y": 307, "w": 16, "h": 16 } @@ -7563,8 +7584,8 @@ "h": 16 }, "frame": { - "x": 407, - "y": 366, + "x": 361, + "y": 291, "w": 16, "h": 16 } @@ -7584,8 +7605,8 @@ "h": 16 }, "frame": { - "x": 211, - "y": 391, + "x": 345, + "y": 323, "w": 16, "h": 16 } @@ -7605,8 +7626,8 @@ "h": 16 }, "frame": { - "x": 211, - "y": 407, + "x": 361, + "y": 307, "w": 16, "h": 16 } @@ -7626,8 +7647,8 @@ "h": 16 }, "frame": { - "x": 227, - "y": 390, + "x": 345, + "y": 339, "w": 16, "h": 16 } @@ -7647,8 +7668,8 @@ "h": 16 }, "frame": { - "x": 227, - "y": 406, + "x": 361, + "y": 323, "w": 16, "h": 16 } @@ -7668,8 +7689,8 @@ "h": 16 }, "frame": { - "x": 243, - "y": 390, + "x": 361, + "y": 339, "w": 16, "h": 16 } @@ -7689,8 +7710,8 @@ "h": 16 }, "frame": { - "x": 243, - "y": 406, + "x": 377, + "y": 291, "w": 16, "h": 16 } @@ -7710,8 +7731,8 @@ "h": 16 }, "frame": { - "x": 259, - "y": 390, + "x": 377, + "y": 307, "w": 16, "h": 16 } @@ -7731,8 +7752,8 @@ "h": 16 }, "frame": { - "x": 259, - "y": 406, + "x": 377, + "y": 323, "w": 16, "h": 16 } @@ -7752,8 +7773,8 @@ "h": 16 }, "frame": { - "x": 275, - "y": 390, + "x": 377, + "y": 339, "w": 16, "h": 16 } @@ -7773,8 +7794,8 @@ "h": 16 }, "frame": { - "x": 275, - "y": 406, + "x": 345, + "y": 355, "w": 16, "h": 16 } @@ -7794,8 +7815,8 @@ "h": 16 }, "frame": { - "x": 292, - "y": 372, + "x": 361, + "y": 355, "w": 16, "h": 16 } @@ -7815,8 +7836,8 @@ "h": 16 }, "frame": { - "x": 308, - "y": 371, + "x": 377, + "y": 355, "w": 16, "h": 16 } @@ -7836,7 +7857,7 @@ "h": 16 }, "frame": { - "x": 324, + "x": 344, "y": 371, "w": 16, "h": 16 @@ -7857,8 +7878,8 @@ "h": 16 }, "frame": { - "x": 340, - "y": 369, + "x": 360, + "y": 371, "w": 16, "h": 16 } @@ -7878,8 +7899,8 @@ "h": 16 }, "frame": { - "x": 356, - "y": 369, + "x": 376, + "y": 371, "w": 16, "h": 16 } @@ -7899,8 +7920,8 @@ "h": 16 }, "frame": { - "x": 372, - "y": 370, + "x": 344, + "y": 387, "w": 16, "h": 16 } @@ -7920,8 +7941,8 @@ "h": 16 }, "frame": { - "x": 388, - "y": 370, + "x": 360, + "y": 387, "w": 16, "h": 16 } @@ -7941,8 +7962,8 @@ "h": 16 }, "frame": { - "x": 292, - "y": 388, + "x": 376, + "y": 387, "w": 16, "h": 16 } @@ -7962,8 +7983,8 @@ "h": 16 }, "frame": { - "x": 308, - "y": 387, + "x": 328, + "y": 396, "w": 16, "h": 16 } @@ -7983,8 +8004,8 @@ "h": 16 }, "frame": { - "x": 324, - "y": 387, + "x": 344, + "y": 403, "w": 16, "h": 16 } @@ -8004,8 +8025,8 @@ "h": 16 }, "frame": { - "x": 340, - "y": 385, + "x": 360, + "y": 403, "w": 16, "h": 16 } @@ -8025,8 +8046,8 @@ "h": 16 }, "frame": { - "x": 356, - "y": 385, + "x": 376, + "y": 403, "w": 16, "h": 16 } @@ -8046,8 +8067,8 @@ "h": 16 }, "frame": { - "x": 291, - "y": 404, + "x": 393, + "y": 284, "w": 16, "h": 16 } @@ -8067,8 +8088,8 @@ "h": 16 }, "frame": { - "x": 372, - "y": 386, + "x": 393, + "y": 300, "w": 16, "h": 16 } @@ -8088,8 +8109,8 @@ "h": 16 }, "frame": { - "x": 388, - "y": 386, + "x": 393, + "y": 316, "w": 16, "h": 16 } @@ -8109,8 +8130,8 @@ "h": 16 }, "frame": { - "x": 404, - "y": 382, + "x": 393, + "y": 332, "w": 16, "h": 16 } @@ -8130,8 +8151,8 @@ "h": 16 }, "frame": { - "x": 404, - "y": 398, + "x": 393, + "y": 348, "w": 16, "h": 16 } @@ -8151,8 +8172,8 @@ "h": 16 }, "frame": { - "x": 340, - "y": 401, + "x": 409, + "y": 284, "w": 16, "h": 16 } @@ -8172,8 +8193,8 @@ "h": 16 }, "frame": { - "x": 356, - "y": 401, + "x": 409, + "y": 300, "w": 16, "h": 16 } @@ -8193,8 +8214,8 @@ "h": 16 }, "frame": { - "x": 372, - "y": 402, + "x": 409, + "y": 316, "w": 16, "h": 16 } @@ -8214,8 +8235,8 @@ "h": 16 }, "frame": { - "x": 388, - "y": 402, + "x": 409, + "y": 332, "w": 16, "h": 16 } @@ -8226,6 +8247,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4669e332ee400e355936594c14e7221c:1a1f5a801c94e8eb8589e13bc50105a1:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:6dd58685cd89890a4361a424b59bfe65:ff9159978f3a103ee1d656fb76e37457:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 9de02d9e0e95643ae8f183cbaf08f9e55acbbe6c..23c87cf3204bcb5b3b69eaa1775a9ce81d0952c7 100644 GIT binary patch literal 57239 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 IM6N<$f@McVP5=M^ literal 56828 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 nRA*pg-6VRbq!a^DJKgGXoru- 1) { + effectiveness.value = 0.5; + return true; + } + + return false; + } +} + /** * Lowers the amount of starter points available. */ @@ -785,6 +828,14 @@ export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType * @returns True if any challenge was successfully applied. */ export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.FIXED_BATTLES, waveIndex: Number, battleConfig: FixedBattleConfig): boolean; +/** + * Apply all challenges that modify type effectiveness. + * @param gameMode {@linkcode GameMode} The current gameMode + * @param challengeType {@linkcode ChallengeType} ChallengeType.TYPE_EFFECTIVENESS + * @param effectiveness {@linkcode Utils.NumberHolder} The current effectiveness of the move. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.TYPE_EFFECTIVENESS, effectiveness: Utils.NumberHolder): boolean; /** * Apply all challenges that modify what level AI are. * @param gameMode {@link GameMode} The current gameMode @@ -866,6 +917,9 @@ export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType case ChallengeType.FIXED_BATTLES: ret ||= c.applyFixedBattle(args[0], args[1]); break; + case ChallengeType.TYPE_EFFECTIVENESS: + ret ||= c.applyTypeEffectiveness(args[0]); + break; case ChallengeType.AI_LEVEL: ret ||= c.applyLevelChange(args[0], args[1], args[2], args[3]); break; @@ -907,6 +961,8 @@ export function copyChallenge(source: Challenge | any): Challenge { return LowerStarterPointsChallenge.loadChallenge(source); case Challenges.FRESH_START: return FreshStartChallenge.loadChallenge(source); + case Challenges.INVERSE_BATTLE: + return InverseBattleChallenge.loadChallenge(source); } throw new Error("Unknown challenge copied"); } @@ -918,5 +974,6 @@ export function initChallenges() { new SingleGenerationChallenge(), new SingleTypeChallenge(), new FreshStartChallenge(), + new InverseBattleChallenge(), ); } diff --git a/src/data/move.ts b/src/data/move.ts index c8043282b00..d50dc7e2074 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -4,7 +4,7 @@ import { EncoreTag, GulpMissileTag, HelpingHandTag, SemiInvulnerableTag, ShellTr import { getPokemonNameWithAffix } from "../messages"; import Pokemon, { AttackMoveResult, EnemyPokemon, HitResult, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "../field/pokemon"; import { StatusEffect, getStatusEffectHealText, isNonVolatileStatusEffect, getNonVolatileStatusEffects } from "./status-effect"; -import { getTypeResistances, Type } from "./type"; +import { getTypeDamageMultiplier, Type } from "./type"; import { Constructor } from "#app/utils"; import * as Utils from "../utils"; import { WeatherType } from "./weather"; @@ -37,6 +37,9 @@ import { StatChangePhase } from "#app/phases/stat-change-phase"; import { SwitchPhase } from "#app/phases/switch-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; import { SpeciesFormChangeRevertWeatherFormTrigger } from "./pokemon-forms"; +import { NumberHolder } from "#app/utils"; +import { GameMode } from "#app/game-mode"; +import { applyChallenges, ChallengeType } from "./challenge"; export enum MoveCategory { PHYSICAL, @@ -4180,8 +4183,12 @@ export class WaterSuperEffectTypeMultiplierAttr extends VariableMoveTypeMultipli apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const multiplier = args[0] as Utils.NumberHolder; if (target.isOfType(Type.WATER)) { - multiplier.value *= 4; // Increased twice because initial reduction against water - return true; + const effectivenessAgainstWater = new Utils.NumberHolder(getTypeDamageMultiplier(move.type, Type.WATER)); + applyChallenges(user.scene.gameMode, ChallengeType.TYPE_EFFECTIVENESS, effectivenessAgainstWater); + if (effectivenessAgainstWater.value !== 0) { + multiplier.value *= 2 / effectivenessAgainstWater.value; + return true; + } } return false; @@ -6203,7 +6210,7 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { return false; } const userTypes = user.getTypes(); - const validTypes = getTypeResistances(moveData.type).filter(t => !userTypes.includes(t)); // valid types are ones that are not already the user's types + const validTypes = this.getTypeResistances(user.scene.gameMode, moveData.type).filter(t => !userTypes.includes(t)); // valid types are ones that are not already the user's types if (!validTypes.length) { return false; } @@ -6215,6 +6222,25 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { return true; } + /** + * Retrieve the types resisting a given type. Used by Conversion 2 + * @returns An array populated with Types, or an empty array if no resistances exist (Unknown or Stellar type) + */ + getTypeResistances(gameMode: GameMode, type: number): Type[] { + const typeResistances: Type[] = []; + + for (let i = 0; i < Object.keys(Type).length; i++) { + const multiplier = new NumberHolder(1); + multiplier.value = getTypeDamageMultiplier(type, i); + applyChallenges(gameMode, ChallengeType.TYPE_EFFECTIVENESS, multiplier); + if (multiplier.value < 1) { + typeResistances.push(i); + } + } + + return typeResistances; + } + getCondition(): MoveConditionFunc { return (user, target, move) => { const moveHistory = target.getLastXMoves(); @@ -7940,7 +7966,8 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_OTHERS), new AttackMove(Moves.FREEZE_DRY, Type.ICE, MoveCategory.SPECIAL, 70, 100, 20, 10, 0, 6) .attr(StatusEffectAttr, StatusEffect.FREEZE) - .attr(WaterSuperEffectTypeMultiplierAttr), + .attr(WaterSuperEffectTypeMultiplierAttr) + .partial(), // This currently just multiplies the move's power instead of changing its effectiveness. It also doesn't account for abilities that modify type effectiveness such as tera shell. new AttackMove(Moves.DISARMING_VOICE, Type.FAIRY, MoveCategory.SPECIAL, 40, -1, 15, -1, 0, 6) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), diff --git a/src/data/type.ts b/src/data/type.ts index 7a9f7f3605e..47bea8dd72b 100644 --- a/src/data/type.ts +++ b/src/data/type.ts @@ -23,7 +23,7 @@ export enum Type { export type TypeDamageMultiplier = 0 | 0.125 | 0.25 | 0.5 | 1 | 2 | 4 | 8; -export function getTypeDamageMultiplier(attackType: integer, defType: integer): TypeDamageMultiplier { +export function getTypeDamageMultiplier(attackType: Type, defType: Type): TypeDamageMultiplier { if (attackType === Type.UNKNOWN || defType === Type.UNKNOWN) { return 1; } @@ -33,26 +33,10 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): switch (attackType) { case Type.FIGHTING: return 2; - case Type.NORMAL: - case Type.FLYING: - case Type.POISON: - case Type.GROUND: - case Type.ROCK: - case Type.BUG: - case Type.STEEL: - case Type.FIRE: - case Type.WATER: - case Type.GRASS: - case Type.ELECTRIC: - case Type.PSYCHIC: - case Type.ICE: - case Type.DRAGON: - case Type.DARK: - case Type.FAIRY: - return 1; case Type.GHOST: - default: return 0; + default: + return 1; } case Type.FIGHTING: switch (attackType) { @@ -60,25 +44,12 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.PSYCHIC: case Type.FAIRY: return 2; - case Type.NORMAL: - case Type.FIGHTING: - case Type.POISON: - case Type.GROUND: - case Type.GHOST: - case Type.STEEL: - case Type.FIRE: - case Type.WATER: - case Type.GRASS: - case Type.ELECTRIC: - case Type.ICE: - case Type.DRAGON: - return 1; case Type.ROCK: case Type.BUG: case Type.DARK: return 0.5; default: - return 0; + return 1; } case Type.FLYING: switch (attackType) { @@ -86,43 +57,20 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.ELECTRIC: case Type.ICE: return 2; - case Type.NORMAL: - case Type.FLYING: - case Type.POISON: - case Type.GHOST: - case Type.STEEL: - case Type.FIRE: - case Type.WATER: - case Type.PSYCHIC: - case Type.DRAGON: - case Type.DARK: - case Type.FAIRY: - return 1; case Type.FIGHTING: case Type.BUG: case Type.GRASS: return 0.5; case Type.GROUND: - default: return 0; + default: + return 1; } case Type.POISON: switch (attackType) { case Type.GROUND: case Type.PSYCHIC: return 2; - case Type.NORMAL: - case Type.FLYING: - case Type.ROCK: - case Type.GHOST: - case Type.STEEL: - case Type.FIRE: - case Type.WATER: - case Type.ELECTRIC: - case Type.ICE: - case Type.DRAGON: - case Type.DARK: - return 1; case Type.FIGHTING: case Type.POISON: case Type.BUG: @@ -130,7 +78,7 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.FAIRY: return 0.5; default: - return 0; + return 1; } case Type.GROUND: switch (attackType) { @@ -138,25 +86,13 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.GRASS: case Type.ICE: return 2; - case Type.NORMAL: - case Type.FIGHTING: - case Type.FLYING: - case Type.GROUND: - case Type.BUG: - case Type.GHOST: - case Type.STEEL: - case Type.FIRE: - case Type.PSYCHIC: - case Type.DRAGON: - case Type.DARK: - case Type.FAIRY: - return 1; case Type.POISON: case Type.ROCK: return 0.5; case Type.ELECTRIC: - default: return 0; + default: + return 1; } case Type.ROCK: switch (attackType) { @@ -166,23 +102,13 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.WATER: case Type.GRASS: return 2; - case Type.ROCK: - case Type.BUG: - case Type.GHOST: - case Type.ELECTRIC: - case Type.PSYCHIC: - case Type.ICE: - case Type.DRAGON: - case Type.DARK: - case Type.FAIRY: - return 1; case Type.NORMAL: case Type.FLYING: case Type.POISON: case Type.FIRE: return 0.5; default: - return 0; + return 1; } case Type.BUG: switch (attackType) { @@ -190,51 +116,26 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.ROCK: case Type.FIRE: return 2; - case Type.NORMAL: - case Type.POISON: - case Type.BUG: - case Type.GHOST: - case Type.STEEL: - case Type.WATER: - case Type.ELECTRIC: - case Type.PSYCHIC: - case Type.ICE: - case Type.DRAGON: - case Type.DARK: - case Type.FAIRY: - return 1; case Type.FIGHTING: case Type.GROUND: case Type.GRASS: return 0.5; default: - return 0; + return 1; } case Type.GHOST: switch (attackType) { case Type.GHOST: case Type.DARK: return 2; - case Type.FLYING: - case Type.GROUND: - case Type.ROCK: - case Type.STEEL: - case Type.FIRE: - case Type.WATER: - case Type.GRASS: - case Type.ELECTRIC: - case Type.PSYCHIC: - case Type.ICE: - case Type.DRAGON: - case Type.FAIRY: - return 1; case Type.POISON: case Type.BUG: return 0.5; case Type.NORMAL: case Type.FIGHTING: - default: return 0; + default: + return 1; } case Type.STEEL: switch (attackType) { @@ -242,11 +143,6 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.GROUND: case Type.FIRE: return 2; - case Type.GHOST: - case Type.WATER: - case Type.ELECTRIC: - case Type.DARK: - return 1; case Type.NORMAL: case Type.FLYING: case Type.ROCK: @@ -259,8 +155,9 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.FAIRY: return 0.5; case Type.POISON: - default: return 0; + default: + return 1; } case Type.FIRE: switch (attackType) { @@ -268,16 +165,6 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.ROCK: case Type.WATER: return 2; - case Type.NORMAL: - case Type.FIGHTING: - case Type.FLYING: - case Type.POISON: - case Type.GHOST: - case Type.ELECTRIC: - case Type.PSYCHIC: - case Type.DRAGON: - case Type.DARK: - return 1; case Type.BUG: case Type.STEEL: case Type.FIRE: @@ -286,33 +173,20 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.FAIRY: return 0.5; default: - return 0; + return 1; } case Type.WATER: switch (attackType) { case Type.GRASS: case Type.ELECTRIC: return 2; - case Type.NORMAL: - case Type.FIGHTING: - case Type.FLYING: - case Type.POISON: - case Type.GROUND: - case Type.ROCK: - case Type.BUG: - case Type.GHOST: - case Type.PSYCHIC: - case Type.DRAGON: - case Type.DARK: - case Type.FAIRY: - return 1; case Type.STEEL: case Type.FIRE: case Type.WATER: case Type.ICE: return 0.5; default: - return 0; + return 1; } case Type.GRASS: switch (attackType) { @@ -322,49 +196,24 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.FIRE: case Type.ICE: return 2; - case Type.NORMAL: - case Type.FIGHTING: - case Type.ROCK: - case Type.GHOST: - case Type.STEEL: - case Type.PSYCHIC: - case Type.DRAGON: - case Type.DARK: - case Type.FAIRY: - return 1; case Type.GROUND: case Type.WATER: case Type.GRASS: case Type.ELECTRIC: return 0.5; default: - return 0; + return 1; } case Type.ELECTRIC: switch (attackType) { case Type.GROUND: return 2; - case Type.NORMAL: - case Type.FIGHTING: - case Type.POISON: - case Type.ROCK: - case Type.BUG: - case Type.GHOST: - case Type.FIRE: - case Type.WATER: - case Type.GRASS: - case Type.PSYCHIC: - case Type.ICE: - case Type.DRAGON: - case Type.DARK: - case Type.FAIRY: - return 1; case Type.FLYING: case Type.STEEL: case Type.ELECTRIC: return 0.5; default: - return 0; + return 1; } case Type.PSYCHIC: switch (attackType) { @@ -372,25 +221,11 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.GHOST: case Type.DARK: return 2; - case Type.NORMAL: - case Type.FLYING: - case Type.POISON: - case Type.GROUND: - case Type.ROCK: - case Type.STEEL: - case Type.FIRE: - case Type.WATER: - case Type.GRASS: - case Type.ELECTRIC: - case Type.ICE: - case Type.DRAGON: - case Type.FAIRY: - return 1; case Type.FIGHTING: case Type.PSYCHIC: return 0.5; default: - return 0; + return 1; } case Type.ICE: switch (attackType) { @@ -399,24 +234,10 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.STEEL: case Type.FIRE: return 2; - case Type.NORMAL: - case Type.FLYING: - case Type.POISON: - case Type.GROUND: - case Type.BUG: - case Type.GHOST: - case Type.WATER: - case Type.GRASS: - case Type.ELECTRIC: - case Type.PSYCHIC: - case Type.DRAGON: - case Type.DARK: - case Type.FAIRY: - return 1; case Type.ICE: return 0.5; default: - return 0; + return 1; } case Type.DRAGON: switch (attackType) { @@ -424,25 +245,13 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.DRAGON: case Type.FAIRY: return 2; - case Type.NORMAL: - case Type.FIGHTING: - case Type.FLYING: - case Type.POISON: - case Type.GROUND: - case Type.ROCK: - case Type.BUG: - case Type.GHOST: - case Type.STEEL: - case Type.PSYCHIC: - case Type.DARK: - return 1; case Type.FIRE: case Type.WATER: case Type.GRASS: case Type.ELECTRIC: return 0.5; default: - return 0; + return 1; } case Type.DARK: switch (attackType) { @@ -450,106 +259,33 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): case Type.BUG: case Type.FAIRY: return 2; - case Type.NORMAL: - case Type.FLYING: - case Type.POISON: - case Type.GROUND: - case Type.ROCK: - case Type.STEEL: - case Type.FIRE: - case Type.WATER: - case Type.GRASS: - case Type.ELECTRIC: - case Type.ICE: - case Type.DRAGON: - return 1; case Type.GHOST: case Type.DARK: return 0.5; case Type.PSYCHIC: - default: return 0; + default: + return 1; } case Type.FAIRY: switch (attackType) { case Type.POISON: case Type.STEEL: return 2; - case Type.NORMAL: - case Type.FLYING: - case Type.GROUND: - case Type.ROCK: - case Type.GHOST: - case Type.FIRE: - case Type.WATER: - case Type.GRASS: - case Type.ELECTRIC: - case Type.PSYCHIC: - case Type.ICE: - case Type.FAIRY: - return 1; case Type.FIGHTING: case Type.BUG: case Type.DARK: return 0.5; case Type.DRAGON: - default: return 0; + default: + return 1; } case Type.STELLAR: return 1; } - return 0; -} - -/** - * Retrieve the types resisting a given type - * @returns An array populated with Types, or an empty array if no resistances exist (Unknown or Stellar type) - */ -export function getTypeResistances(type: number): Type[] { - switch (type) { - case Type.NORMAL: - return [Type.ROCK, Type.STEEL, Type.GHOST]; - case Type.FIGHTING: - return [Type.FLYING, Type.POISON, Type.BUG, Type.PSYCHIC, Type.FAIRY, Type.GHOST]; - case Type.FLYING: - return [Type.ROCK, Type.ELECTRIC, Type.STEEL]; - case Type.POISON: - return [Type.POISON, Type.GROUND, Type.ROCK, Type.GHOST, Type.STEEL]; - case Type.GROUND: - return [Type.BUG, Type.GRASS, Type.FLYING]; - case Type.ROCK: - return [Type.FIGHTING, Type.GROUND, Type.STEEL]; - case Type.BUG: - return [Type.FIGHTING, Type.FLYING, Type.POISON, Type.GHOST, Type.STEEL, Type.FIRE, Type.FAIRY]; - case Type.GHOST: - return [Type.DARK, Type.NORMAL]; - case Type.STEEL: - return [Type.STEEL, Type.FIRE, Type.WATER, Type.ELECTRIC]; - case Type.FIRE: - return [Type.ROCK, Type.FIRE, Type.WATER, Type.DRAGON]; - case Type.WATER: - return [Type.WATER, Type.GRASS, Type.DRAGON]; - case Type.GRASS: - return [Type.FLYING, Type.POISON, Type.BUG, Type.STEEL, Type.FIRE, Type.GRASS, Type.DRAGON]; - case Type.ELECTRIC: - return [Type.GRASS, Type.ELECTRIC, Type.DRAGON, Type.GROUND]; - case Type.PSYCHIC: - return [Type.STEEL, Type.PSYCHIC]; - case Type.ICE: - return [Type.STEEL, Type.FIRE, Type.WATER, Type.ICE]; - case Type.DRAGON: - return [Type.STEEL, Type.FAIRY]; - case Type.DARK: - return [Type.FIGHTING, Type.DARK, Type.FAIRY]; - case Type.FAIRY: - return [Type.POISON, Type.STEEL, Type.FIRE]; - case Type.UNKNOWN: - case Type.STELLAR: - default: - return []; - } + return 1; } /** diff --git a/src/enums/challenges.ts b/src/enums/challenges.ts index 690e1cdc32d..c4dc7460dfe 100644 --- a/src/enums/challenges.ts +++ b/src/enums/challenges.ts @@ -3,5 +3,6 @@ export enum Challenges { SINGLE_TYPE, LOWER_MAX_STARTER_COST, LOWER_STARTER_POINTS, - FRESH_START + FRESH_START, + INVERSE_BATTLE, } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 8a3a6b280cb..58764ff1046 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -49,6 +49,7 @@ import { BerryType } from "#enums/berry-type"; import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; +import { Challenges } from "#enums/challenges"; import { getPokemonNameWithAffix } from "#app/messages.js"; import { DamagePhase } from "#app/phases/damage-phase.js"; import { FaintPhase } from "#app/phases/faint-phase.js"; @@ -1315,12 +1316,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return 1; } } - - return getTypeDamageMultiplier(moveType, defType); + const multiplier = new Utils.NumberHolder(getTypeDamageMultiplier(moveType, defType)); + applyChallenges(this.scene.gameMode, ChallengeType.TYPE_EFFECTIVENESS, multiplier); + return multiplier.value; }).reduce((acc, cur) => acc * cur, 1) as TypeDamageMultiplier; + const typeMultiplierAgainstFlying = new Utils.NumberHolder(getTypeDamageMultiplier(moveType, Type.FLYING)); + applyChallenges(this.scene.gameMode, ChallengeType.TYPE_EFFECTIVENESS, typeMultiplierAgainstFlying); // Handle strong winds lowering effectiveness of types super effective against pure flying - if (!ignoreStrongWinds && arena.weather?.weatherType === WeatherType.STRONG_WINDS && !arena.weather.isEffectSuppressed(this.scene) && this.isOfType(Type.FLYING) && getTypeDamageMultiplier(moveType, Type.FLYING) === 2) { + if (!ignoreStrongWinds && arena.weather?.weatherType === WeatherType.STRONG_WINDS && !arena.weather.isEffectSuppressed(this.scene) && this.isOfType(Type.FLYING) && typeMultiplierAgainstFlying.value === 2) { multiplier /= 2; if (!simulated) { this.scene.queueMessage(i18next.t("weather:strongWindsEffectMessage")); @@ -3852,6 +3856,9 @@ export class EnemyPokemon extends Pokemon { new PokemonMove(Moves.FLAMETHROWER), new PokemonMove(Moves.COSMIC_POWER) ]; + if (this.scene.gameMode.hasChallenge(Challenges.INVERSE_BATTLE)) { + this.moveset[2] = new PokemonMove(Moves.THUNDERBOLT); + } break; default: super.generateAndPopulateMoveset(); diff --git a/src/locales/de/achv.json b/src/locales/de/achv.json index 0649bcf3169..d2e56089720 100644 --- a/src/locales/de/achv.json +++ b/src/locales/de/achv.json @@ -269,5 +269,9 @@ "FRESH_START": { "name": "Hussa, noch einmal von vorn!", "description": "Schließe die 'Neuanfang' Herausforderung ab" + }, + "INVERSE_BATTLE": { + "name": "Spieglein, Spieglein an der Wand", + "description": "Schließe die 'Umkehrkampf' Herausforderung ab" } } \ No newline at end of file diff --git a/src/locales/de/challenges.json b/src/locales/de/challenges.json index 1b41a707a81..17c33353bc6 100644 --- a/src/locales/de/challenges.json +++ b/src/locales/de/challenges.json @@ -25,5 +25,12 @@ "desc": "Du kannst nur die ursprünglichen Starter verwenden, genau so, als hättest du gerade erst mit Pokérogue begonnen.", "value.0": "Aus", "value.1": "An" + }, + "inverseBattle": { + "name": "Umkehrkampf", + "shortName": "Umkehrkampf", + "desc": "Die Typen-Effektivität wird umgekehrt, und kein Typ ist gegen einen anderen Typ immun.\nDeaktiviert die Erfolge anderer Herausforderungen.", + "value.0": "Aus", + "value.1": "An" } } \ No newline at end of file diff --git a/src/locales/en/achv-female.json b/src/locales/en/achv-female.json index ec695c3ed2a..edcd8c53fb7 100644 --- a/src/locales/en/achv-female.json +++ b/src/locales/en/achv-female.json @@ -260,5 +260,9 @@ "FRESH_START": { "name": "First Try!", "description": "Complete the Fresh Start challenge." + }, + "INVERSE_BATTLE": { + "name": "Mirror rorriM", + "description": "Complete the Inverse Battle challenge.\n.egnellahc elttaB esrevnI eht etelpmoC" } } \ No newline at end of file diff --git a/src/locales/en/achv.json b/src/locales/en/achv.json index 185b42d181a..0ed746c77b3 100644 --- a/src/locales/en/achv.json +++ b/src/locales/en/achv.json @@ -279,5 +279,9 @@ "FRESH_START": { "name": "First Try!", "description": "Complete the Fresh Start challenge." + }, + "INVERSE_BATTLE": { + "name": "Mirror rorriM", + "description": "Complete the Inverse Battle challenge.\n.egnellahc elttaB esrevnI eht etelpmoC" } } \ No newline at end of file diff --git a/src/locales/en/challenges.json b/src/locales/en/challenges.json index c89fa7a21bf..f189266cea2 100644 --- a/src/locales/en/challenges.json +++ b/src/locales/en/challenges.json @@ -25,5 +25,12 @@ "desc": "You can only use the original starters, and only as if you had just started PokéRogue.", "value.0": "Off", "value.1": "On" + }, + "inverseBattle": { + "name": "Inverse Battle", + "shortName": "Inverse", + "desc": "Type matchups are reversed and no type is immune to any other type.\nDisables other challenges' achievements.", + "value.0": "Off", + "value.1": "On" } } \ No newline at end of file diff --git a/src/locales/es/achv.json b/src/locales/es/achv.json index c3a22c566d0..c94b8858233 100644 --- a/src/locales/es/achv.json +++ b/src/locales/es/achv.json @@ -170,5 +170,9 @@ "CLASSIC_VICTORY": { "name": "Imbatible", "description": "Completa el juego en modo clásico." + }, + "INVERSE_BATTLE": { + "name": "Espejo ojepsE", + "description": "Completa el reto de Combate Inverso.\n.osrevnI etabmoC ed oter le atelpmoC" } } \ No newline at end of file diff --git a/src/locales/es/challenges.json b/src/locales/es/challenges.json index a855f3dbc2b..6a7db8c10c3 100644 --- a/src/locales/es/challenges.json +++ b/src/locales/es/challenges.json @@ -18,5 +18,12 @@ "name": "Monotipo", "desc": "Solo puedes usar Pokémon with the {{type}} type.", "desc_default": "Solo puedes usar Pokémon del tipo elegido." + }, + "inverseBattle": { + "name": "Combate Inverso", + "shortName": "Inverso", + "desc": "La efectividad de los tipos es invertida. No hay inmunidades entre tipos.\nEste reto deshabilita logros de otros retos.", + "value.0": "Desactivado", + "value.1": "Activado" } } \ No newline at end of file diff --git a/src/locales/fr/achv.json b/src/locales/fr/achv.json index f83fa3079f2..60655ae22cf 100644 --- a/src/locales/fr/achv.json +++ b/src/locales/fr/achv.json @@ -274,5 +274,9 @@ "FRESH_START": { "name": "Du premier coup !", "description": "Terminer un challenge « Nouveau départ »." + }, + "INVERSE_BATTLE": { + "name": "La teuté à verlan", + "description": "Terminer un challenge en Combat Inversé.\nMineter un lenjcha en Ba-con Versin." } } diff --git a/src/locales/fr/challenges.json b/src/locales/fr/challenges.json index 50a8e34f298..a83ec2e0be4 100644 --- a/src/locales/fr/challenges.json +++ b/src/locales/fr/challenges.json @@ -25,5 +25,12 @@ "desc": "Vous ne pouvez choisir que les starters de base du jeu, comme si vous le recommenciez.", "value.0": "Non", "value.1": "Oui" + }, + "inverseBattle": { + "name": "Combat Inversé", + "shortName": "Inversé", + "desc": "Les affinités de la table des types sont inversées et plus aucun type n’a d’immunité.\nDésactive les succès des autres challenges.", + "value.0": "Non", + "value.1": "Oui" } } \ No newline at end of file diff --git a/src/locales/ja/challenges.json b/src/locales/ja/challenges.json index 29f6ca835fe..54225ebf766 100644 --- a/src/locales/ja/challenges.json +++ b/src/locales/ja/challenges.json @@ -22,6 +22,7 @@ }, "freshStart": { "name": "出直し", + "shortName": "出直し", "desc": "ポケローグを 始めた ばかりの ような ままで ゲーム開始の 最初のパートナーしか 使えません", "value.0": "オフ", "value.1": "オン" diff --git a/src/locales/ko/achv.json b/src/locales/ko/achv.json index 73753dd9b5a..8546dff949c 100644 --- a/src/locales/ko/achv.json +++ b/src/locales/ko/achv.json @@ -260,5 +260,9 @@ "FRESH_START": { "name": "첫트!", "description": "새 출발 챌린지 모드 클리어." + }, + "INVERSE_BATTLE": { + "name": "상성 전문가(였던 것)", + "description": "거꾸로 배틀 챌린지 모드 클리어." } } \ No newline at end of file diff --git a/src/locales/ko/challenges.json b/src/locales/ko/challenges.json index 433b0990e87..7efdfef3570 100644 --- a/src/locales/ko/challenges.json +++ b/src/locales/ko/challenges.json @@ -25,5 +25,12 @@ "desc": "포켓로그를 처음 시작했던 때처럼 강화가 전혀 되지 않은 오리지널 스타팅 포켓몬만 고를 수 있습니다.", "value.0": "해제", "value.1": "설정" + }, + "inverseBattle": { + "name": "거꾸로 배틀", + "shortName": "거꾸로", + "desc": "타입 상성이 반대로 바뀌고 면역 타입은 약점 타입이 됩니다.\n설정 시 다른 챌린지 업적은 달성할 수 없습니다.", + "value.0": "해제", + "value.1": "설정" } } \ No newline at end of file diff --git a/src/locales/pt_BR/achv.json b/src/locales/pt_BR/achv.json index aee3dd48cc5..acdec1ae306 100644 --- a/src/locales/pt_BR/achv.json +++ b/src/locales/pt_BR/achv.json @@ -264,5 +264,9 @@ "FRESH_START": { "name": "De Primeira!", "description": "Complete o desafio de novo começo." + }, + "INVERSE_BATTLE": { + "name": "A torre da derrotA", + "description": "Complete o desafio da Batalha Inversa.\n.asrevnI ahlataB ad oifased o etelpmoC" } } \ No newline at end of file diff --git a/src/locales/pt_BR/challenges.json b/src/locales/pt_BR/challenges.json index 43a40e29b56..6b20a92f4f6 100644 --- a/src/locales/pt_BR/challenges.json +++ b/src/locales/pt_BR/challenges.json @@ -25,5 +25,12 @@ "desc": "Você só pode usar os iniciais originais, como se tivesse acabado de começar o PokéRogue.", "value.0": "Desligado", "value.1": "Ligado" + }, + "inverseBattle": { + "name": "Batalha Inversa", + "shortName": "Inversa", + "desc": "Fraquezas e resistências de tipos são invertidas e nenhum tipo é imune a outro tipo.\nDesativa as conquistas de outros desafios.", + "value.0": "Desligado", + "value.1": "Ligado" } } \ No newline at end of file diff --git a/src/locales/zh_CN/achv.json b/src/locales/zh_CN/achv.json index 103a9bb41b5..8de0c48a2c3 100644 --- a/src/locales/zh_CN/achv.json +++ b/src/locales/zh_CN/achv.json @@ -268,5 +268,9 @@ "FRESH_START": { "name": "初次尝试!", "description": "完成初次尝试挑战" + }, + "INVERSE_BATTLE": { + "name": "镜子子镜", + "description": "完成逆转之战挑战\n战挑战之转逆成完" } } diff --git a/src/locales/zh_CN/challenges.json b/src/locales/zh_CN/challenges.json index 0b454d759fb..9351ec96285 100644 --- a/src/locales/zh_CN/challenges.json +++ b/src/locales/zh_CN/challenges.json @@ -25,5 +25,12 @@ "desc": "你只能使用御三家,就像是你第一次玩宝可梦肉鸽一样。", "value.0": "关闭", "value.1": "开启" + }, + "inverseBattle": { + "name": "逆转之战", + "shortName": "逆转之战", + "desc": "属性相克关系被反转,且没有任何属性对其他属性免疫。\n禁用其他挑战的成就。", + "value.0": "关闭", + "value.1": "开启" } } \ No newline at end of file diff --git a/src/locales/zh_TW/achv.json b/src/locales/zh_TW/achv.json index dcd6f26ae82..6587394cf41 100644 --- a/src/locales/zh_TW/achv.json +++ b/src/locales/zh_TW/achv.json @@ -252,5 +252,9 @@ }, "MONO_FAIRY": { "name": "林克,醒醒!" + }, + "INVERSE_BATTLE": { + "name": "鏡子子鏡", + "description": "完成逆轉之戰挑戰\n戰挑戰之轉逆成完" } } \ No newline at end of file diff --git a/src/locales/zh_TW/challenges.json b/src/locales/zh_TW/challenges.json index c6c4f90e65e..a1fc6b8f50f 100644 --- a/src/locales/zh_TW/challenges.json +++ b/src/locales/zh_TW/challenges.json @@ -19,5 +19,12 @@ "name": "單屬性", "desc": "你只能使用{{type}}\n屬性的寶可夢", "desc_default": "你只能使用所選\n屬性的寶可夢" + }, + "inverseBattle": { + "name": "逆轉之戰", + "shortName": "逆轉之戰", + "desc": "屬性相克關系被反轉,且沒有任何屬性對其他屬性免疫。\n禁用其他挑戰的成就。", + "value.0": "關閉", + "value.1": "開啓" } } \ No newline at end of file diff --git a/src/system/achv.ts b/src/system/achv.ts index 0f9bc5ac6de..5436cce24ab 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -5,8 +5,9 @@ import { pokemonEvolutions } from "#app/data/pokemon-evolutions"; import i18next from "i18next"; import * as Utils from "../utils"; import { PlayerGender } from "#enums/player-gender"; -import { Challenge, FreshStartChallenge, SingleGenerationChallenge, SingleTypeChallenge } from "#app/data/challenge.js"; -import { ConditionFn } from "#app/@types/common.js"; +import { Challenge, FreshStartChallenge, InverseBattleChallenge, SingleGenerationChallenge, SingleTypeChallenge } from "#app/data/challenge"; +import { Challenges } from "#app/enums/challenges"; +import { ConditionFn } from "#app/@types/common"; export enum AchvTier { COMMON, @@ -137,8 +138,8 @@ export class ModifierAchv extends Achv { } export class ChallengeAchv extends Achv { - constructor(localizationKey: string, name: string, description: string, iconImage: string, score: integer, challengeFunc: (challenge: Challenge) => boolean) { - super(localizationKey, name, description, iconImage, score, (_scene: BattleScene, args: any[]) => challengeFunc((args[0] as Challenge))); + constructor(localizationKey: string, name: string, description: string, iconImage: string, score: integer, challengeFunc: (challenge: Challenge, scene: BattleScene) => boolean) { + super(localizationKey, name, description, iconImage, score, (_scene: BattleScene, args: any[]) => challengeFunc(args[0] as Challenge, _scene)); } } @@ -275,6 +276,8 @@ export function getAchievementDescription(localizationKey: string): string { return i18next.t("achv:MonoType.description", { context: genderStr, "type": i18next.t(`pokemonInfo:Type.${localizationKey.slice(5)}`) }); case "FRESH_START": return i18next.t("achv:FRESH_START.description", { context: genderStr }); + case "INVERSE_BATTLE": + return i18next.t("achv:INVERSE_BATTLE.description", { context: genderStr }); default: return ""; } @@ -323,34 +326,35 @@ export const achvs = { PERFECT_IVS: new Achv("PERFECT_IVS", "", "PERFECT_IVS.description", "blunder_policy", 100), CLASSIC_VICTORY: new Achv("CLASSIC_VICTORY", "", "CLASSIC_VICTORY.description", "relic_crown", 150), UNEVOLVED_CLASSIC_VICTORY: new Achv("UNEVOLVED_CLASSIC_VICTORY", "", "UNEVOLVED_CLASSIC_VICTORY.description", "eviolite", 175, c => c.getParty().some(p => p.getSpeciesForm(true).speciesId in pokemonEvolutions)), - MONO_GEN_ONE_VICTORY: new ChallengeAchv("MONO_GEN_ONE", "", "MONO_GEN_ONE.description", "ribbon_gen1", 100, c => c instanceof SingleGenerationChallenge && c.value === 1), - MONO_GEN_TWO_VICTORY: new ChallengeAchv("MONO_GEN_TWO", "", "MONO_GEN_TWO.description", "ribbon_gen2", 100, c => c instanceof SingleGenerationChallenge && c.value === 2), - MONO_GEN_THREE_VICTORY: new ChallengeAchv("MONO_GEN_THREE", "", "MONO_GEN_THREE.description", "ribbon_gen3", 100, c => c instanceof SingleGenerationChallenge && c.value === 3), - MONO_GEN_FOUR_VICTORY: new ChallengeAchv("MONO_GEN_FOUR", "", "MONO_GEN_FOUR.description", "ribbon_gen4", 100, c => c instanceof SingleGenerationChallenge && c.value === 4), - MONO_GEN_FIVE_VICTORY: new ChallengeAchv("MONO_GEN_FIVE", "", "MONO_GEN_FIVE.description", "ribbon_gen5", 100, c => c instanceof SingleGenerationChallenge && c.value === 5), - MONO_GEN_SIX_VICTORY: new ChallengeAchv("MONO_GEN_SIX", "", "MONO_GEN_SIX.description", "ribbon_gen6", 100, c => c instanceof SingleGenerationChallenge && c.value === 6), - MONO_GEN_SEVEN_VICTORY: new ChallengeAchv("MONO_GEN_SEVEN", "", "MONO_GEN_SEVEN.description", "ribbon_gen7", 100, c => c instanceof SingleGenerationChallenge && c.value === 7), - MONO_GEN_EIGHT_VICTORY: new ChallengeAchv("MONO_GEN_EIGHT", "", "MONO_GEN_EIGHT.description", "ribbon_gen8", 100, c => c instanceof SingleGenerationChallenge && c.value === 8), - MONO_GEN_NINE_VICTORY: new ChallengeAchv("MONO_GEN_NINE", "", "MONO_GEN_NINE.description", "ribbon_gen9", 100, c => c instanceof SingleGenerationChallenge && c.value === 9), - MONO_NORMAL: new ChallengeAchv("MONO_NORMAL", "", "MONO_NORMAL.description", "silk_scarf", 100, c => c instanceof SingleTypeChallenge && c.value === 1), - MONO_FIGHTING: new ChallengeAchv("MONO_FIGHTING", "", "MONO_FIGHTING.description", "black_belt", 100, c => c instanceof SingleTypeChallenge && c.value === 2), - MONO_FLYING: new ChallengeAchv("MONO_FLYING", "", "MONO_FLYING.description", "sharp_beak", 100, c => c instanceof SingleTypeChallenge && c.value === 3), - MONO_POISON: new ChallengeAchv("MONO_POISON", "", "MONO_POISON.description", "poison_barb", 100, c => c instanceof SingleTypeChallenge && c.value === 4), - MONO_GROUND: new ChallengeAchv("MONO_GROUND", "", "MONO_GROUND.description", "soft_sand", 100, c => c instanceof SingleTypeChallenge && c.value === 5), - MONO_ROCK: new ChallengeAchv("MONO_ROCK", "", "MONO_ROCK.description", "hard_stone", 100, c => c instanceof SingleTypeChallenge && c.value === 6), - MONO_BUG: new ChallengeAchv("MONO_BUG", "", "MONO_BUG.description", "silver_powder", 100, c => c instanceof SingleTypeChallenge && c.value === 7), - MONO_GHOST: new ChallengeAchv("MONO_GHOST", "", "MONO_GHOST.description", "spell_tag", 100, c => c instanceof SingleTypeChallenge && c.value === 8), - MONO_STEEL: new ChallengeAchv("MONO_STEEL", "", "MONO_STEEL.description", "metal_coat", 100, c => c instanceof SingleTypeChallenge && c.value === 9), - MONO_FIRE: new ChallengeAchv("MONO_FIRE", "", "MONO_FIRE.description", "charcoal", 100, c => c instanceof SingleTypeChallenge && c.value === 10), - MONO_WATER: new ChallengeAchv("MONO_WATER", "", "MONO_WATER.description", "mystic_water", 100, c => c instanceof SingleTypeChallenge && c.value === 11), - MONO_GRASS: new ChallengeAchv("MONO_GRASS", "", "MONO_GRASS.description", "miracle_seed", 100, c => c instanceof SingleTypeChallenge && c.value === 12), - MONO_ELECTRIC: new ChallengeAchv("MONO_ELECTRIC", "", "MONO_ELECTRIC.description", "magnet", 100, c => c instanceof SingleTypeChallenge && c.value === 13), - MONO_PSYCHIC: new ChallengeAchv("MONO_PSYCHIC", "", "MONO_PSYCHIC.description", "twisted_spoon", 100, c => c instanceof SingleTypeChallenge && c.value === 14), - MONO_ICE: new ChallengeAchv("MONO_ICE", "", "MONO_ICE.description", "never_melt_ice", 100, c => c instanceof SingleTypeChallenge && c.value === 15), - MONO_DRAGON: new ChallengeAchv("MONO_DRAGON", "", "MONO_DRAGON.description", "dragon_fang", 100, c => c instanceof SingleTypeChallenge && c.value === 16), - MONO_DARK: new ChallengeAchv("MONO_DARK", "", "MONO_DARK.description", "black_glasses", 100, c => c instanceof SingleTypeChallenge && c.value === 17), - MONO_FAIRY: new ChallengeAchv("MONO_FAIRY", "", "MONO_FAIRY.description", "fairy_feather", 100, c => c instanceof SingleTypeChallenge && c.value === 18), - FRESH_START: new ChallengeAchv("FRESH_START", "", "FRESH_START.description", "reviver_seed", 100, c => c instanceof FreshStartChallenge && c.value === 1), + MONO_GEN_ONE_VICTORY: new ChallengeAchv("MONO_GEN_ONE", "", "MONO_GEN_ONE.description", "ribbon_gen1", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 1 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_GEN_TWO_VICTORY: new ChallengeAchv("MONO_GEN_TWO", "", "MONO_GEN_TWO.description", "ribbon_gen2", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 2 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_GEN_THREE_VICTORY: new ChallengeAchv("MONO_GEN_THREE", "", "MONO_GEN_THREE.description", "ribbon_gen3", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 3 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_GEN_FOUR_VICTORY: new ChallengeAchv("MONO_GEN_FOUR", "", "MONO_GEN_FOUR.description", "ribbon_gen4", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 4 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_GEN_FIVE_VICTORY: new ChallengeAchv("MONO_GEN_FIVE", "", "MONO_GEN_FIVE.description", "ribbon_gen5", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 5 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_GEN_SIX_VICTORY: new ChallengeAchv("MONO_GEN_SIX", "", "MONO_GEN_SIX.description", "ribbon_gen6", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 6 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_GEN_SEVEN_VICTORY: new ChallengeAchv("MONO_GEN_SEVEN", "", "MONO_GEN_SEVEN.description", "ribbon_gen7", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 7 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_GEN_EIGHT_VICTORY: new ChallengeAchv("MONO_GEN_EIGHT", "", "MONO_GEN_EIGHT.description", "ribbon_gen8", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 8 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_GEN_NINE_VICTORY: new ChallengeAchv("MONO_GEN_NINE", "", "MONO_GEN_NINE.description", "ribbon_gen9", 100, (c, scene) => c instanceof SingleGenerationChallenge && c.value === 9 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_NORMAL: new ChallengeAchv("MONO_NORMAL", "", "MONO_NORMAL.description", "silk_scarf", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 1 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_FIGHTING: new ChallengeAchv("MONO_FIGHTING", "", "MONO_FIGHTING.description", "black_belt", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 2 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_FLYING: new ChallengeAchv("MONO_FLYING", "", "MONO_FLYING.description", "sharp_beak", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 3 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_POISON: new ChallengeAchv("MONO_POISON", "", "MONO_POISON.description", "poison_barb", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 4 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_GROUND: new ChallengeAchv("MONO_GROUND", "", "MONO_GROUND.description", "soft_sand", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 5 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_ROCK: new ChallengeAchv("MONO_ROCK", "", "MONO_ROCK.description", "hard_stone", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 6 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_BUG: new ChallengeAchv("MONO_BUG", "", "MONO_BUG.description", "silver_powder", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 7 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_GHOST: new ChallengeAchv("MONO_GHOST", "", "MONO_GHOST.description", "spell_tag", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 8 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_STEEL: new ChallengeAchv("MONO_STEEL", "", "MONO_STEEL.description", "metal_coat", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 9 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_FIRE: new ChallengeAchv("MONO_FIRE", "", "MONO_FIRE.description", "charcoal", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 10 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_WATER: new ChallengeAchv("MONO_WATER", "", "MONO_WATER.description", "mystic_water", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 11 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_GRASS: new ChallengeAchv("MONO_GRASS", "", "MONO_GRASS.description", "miracle_seed", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 12 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_ELECTRIC: new ChallengeAchv("MONO_ELECTRIC", "", "MONO_ELECTRIC.description", "magnet", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 13 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_PSYCHIC: new ChallengeAchv("MONO_PSYCHIC", "", "MONO_PSYCHIC.description", "twisted_spoon", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 14 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_ICE: new ChallengeAchv("MONO_ICE", "", "MONO_ICE.description", "never_melt_ice", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 15 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_DRAGON: new ChallengeAchv("MONO_DRAGON", "", "MONO_DRAGON.description", "dragon_fang", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 16 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_DARK: new ChallengeAchv("MONO_DARK", "", "MONO_DARK.description", "black_glasses", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 17 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + MONO_FAIRY: new ChallengeAchv("MONO_FAIRY", "", "MONO_FAIRY.description", "fairy_feather", 100, (c, scene) => c instanceof SingleTypeChallenge && c.value === 18 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + FRESH_START: new ChallengeAchv("FRESH_START", "", "FRESH_START.description", "reviver_seed", 100, (c, scene) => c instanceof FreshStartChallenge && c.value > 0 && !scene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0)), + INVERSE_BATTLE: new ChallengeAchv("INVERSE_BATTLE", "", "INVERSE_BATTLE.description", "inverse", 100, c => c instanceof InverseBattleChallenge && c.value > 0), }; export function initAchievements() { diff --git a/src/test/battle/inverse_battle.test.ts b/src/test/battle/inverse_battle.test.ts new file mode 100644 index 00000000000..be8b04155eb --- /dev/null +++ b/src/test/battle/inverse_battle.test.ts @@ -0,0 +1,203 @@ +import { BattlerIndex } from "#app/battle"; +import { allMoves } from "#app/data/move"; +import { Type } from "#app/data/type"; +import { MoveEndPhase } from "#app/phases/move-end-phase"; +import { TurnEndPhase } from "#app/phases/turn-end-phase"; +import { Abilities } from "#enums/abilities"; +import { ArenaTagType } from "#enums/arena-tag-type"; +import { Challenges } from "#enums/challenges"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +const TIMEOUT = 20 * 1000; + +describe("Inverse Battle", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.challengeMode.addChallenge(Challenges.INVERSE_BATTLE, 1, 1); + + game.override + .battleType("single") + .starterSpecies(Species.FEEBAS) + .ability(Abilities.BALL_FETCH) + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH); + }); + + it("1. immune types are 2x effective - Thunderbolt against Ground Type", async () => { + game.override.enemySpecies(Species.SANDSHREW); + + await game.challengeMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + expect(enemy.getMoveEffectiveness(player, allMoves[Moves.THUNDERBOLT])).toBe(2); + }, TIMEOUT); + + it("2. 2x effective types are 0.5x effective - Thunderbolt against Flying Type", async () => { + game.override.enemySpecies(Species.PIDGEY); + + await game.challengeMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + expect(enemy.getMoveEffectiveness(player, allMoves[Moves.THUNDERBOLT])).toBe(0.5); + }, TIMEOUT); + + it("3. 0.5x effective types are 2x effective - Thunderbolt against Electric Type", async () => { + game.override.enemySpecies(Species.CHIKORITA); + + await game.challengeMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + expect(enemy.getMoveEffectiveness(player, allMoves[Moves.THUNDERBOLT])).toBe(2); + }, TIMEOUT); + + it("4. Stealth Rock follows the inverse matchups - Stealth Rock against Charizard deals 1/32 of max HP", async () => { + game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, Moves.STEALTH_ROCK, 0); + game.override + .enemySpecies(Species.CHARIZARD) + .enemyLevel(100); + + await game.challengeMode.startBattle(); + + const charizard = game.scene.getEnemyPokemon()!; + + const maxHp = charizard.getMaxHp(); + const damage_prediction = Math.max(Math.round(charizard.getMaxHp() / 32), 1); + console.log("Damage calcuation before round: " + charizard.getMaxHp() / 32); + const currentHp = charizard.hp; + const expectedHP = maxHp - damage_prediction; + + console.log("Charizard's max HP: " + maxHp, "Damage: " + damage_prediction, "Current HP: " + currentHp, "Expected HP: " + expectedHP); + expect(currentHp).toBeGreaterThan(maxHp * 31 / 32 - 1); + }, TIMEOUT); + + it("5. Freeze Dry is 2x effective against Water Type like other Ice type Move - Freeze Dry against Squirtle", async () => { + game.override.enemySpecies(Species.SQUIRTLE); + + await game.challengeMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + expect(enemy.getMoveEffectiveness(player, allMoves[Moves.FREEZE_DRY])).toBe(2); + }, TIMEOUT); + + it("6. Water Absorb should heal against water moves - Water Absorb against Water gun", async () => { + game.override + .moveset([Moves.WATER_GUN]) + .enemyAbility(Abilities.WATER_ABSORB); + + await game.challengeMode.startBattle(); + + const enemy = game.scene.getEnemyPokemon()!; + enemy.hp = enemy.getMaxHp() - 1; + game.move.select(Moves.WATER_GUN); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + + await game.phaseInterceptor.to(MoveEndPhase); + + expect(enemy.hp).toBe(enemy.getMaxHp()); + }, TIMEOUT); + + it("7. Fire type does not get burned - Will-O-Wisp against Charmander", async () => { + game.override + .moveset([Moves.WILL_O_WISP]) + .enemySpecies(Species.CHARMANDER); + + await game.challengeMode.startBattle(); + + const enemy = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.WILL_O_WISP); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.move.forceHit(); + + await game.phaseInterceptor.to(MoveEndPhase); + + expect(enemy.status?.effect).not.toBe(StatusEffect.BURN); + }, TIMEOUT); + + it("8. Electric type does not get paralyzed - Nuzzle against Pikachu", async () => { + game.override + .moveset([Moves.NUZZLE]) + .enemySpecies(Species.PIKACHU) + .enemyLevel(50); + + await game.challengeMode.startBattle(); + + const enemy = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.NUZZLE); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + + await game.phaseInterceptor.to(MoveEndPhase); + + expect(enemy.status?.effect).not.toBe(StatusEffect.PARALYSIS); + }, TIMEOUT); + + + it("10. Anticipation should trigger on 2x effective moves - Anticipation against Thunderbolt", async () => { + game.override + .moveset([Moves.THUNDERBOLT]) + .enemySpecies(Species.SANDSHREW) + .enemyAbility(Abilities.ANTICIPATION); + + await game.challengeMode.startBattle(); + + expect(game.scene.getEnemyPokemon()?.summonData.abilitiesApplied[0]).toBe(Abilities.ANTICIPATION); + }, TIMEOUT); + + it("11. Conversion 2 should change the type to the resistive type - Conversion 2 against Dragonite", async () => { + game.override + .moveset([Moves.CONVERSION_2]) + .enemyMoveset([Moves.DRAGON_CLAW, Moves.DRAGON_CLAW, Moves.DRAGON_CLAW, Moves.DRAGON_CLAW]); + + await game.challengeMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.CONVERSION_2); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getTypes()[0]).toBe(Type.DRAGON); + }, TIMEOUT); + + it("12. Flying Press should be 0.25x effective against Grass + Dark Type - Flying Press against Meowscarada", async () => { + game.override + .moveset([Moves.FLYING_PRESS]) + .enemySpecies(Species.MEOWSCARADA); + + await game.challengeMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + expect(enemy.getMoveEffectiveness(player, allMoves[Moves.FLYING_PRESS])).toBe(0.25); + }, TIMEOUT); +}); diff --git a/src/test/utils/gameManager.ts b/src/test/utils/gameManager.ts index 6ade758fd6f..60d07065090 100644 --- a/src/test/utils/gameManager.ts +++ b/src/test/utils/gameManager.ts @@ -40,6 +40,7 @@ import fs from "fs"; import { vi } from "vitest"; import { ClassicModeHelper } from "./helpers/classicModeHelper"; import { DailyModeHelper } from "./helpers/dailyModeHelper"; +import { ChallengeModeHelper } from "./helpers/challengeModeHelper"; import { MoveHelper } from "./helpers/moveHelper"; import { OverridesHelper } from "./helpers/overridesHelper"; import { SettingsHelper } from "./helpers/settingsHelper"; @@ -57,6 +58,7 @@ export default class GameManager { public readonly move: MoveHelper; public readonly classicMode: ClassicModeHelper; public readonly dailyMode: DailyModeHelper; + public readonly challengeMode: ChallengeModeHelper; public readonly settings: SettingsHelper; /** @@ -77,6 +79,7 @@ export default class GameManager { this.move = new MoveHelper(this); this.classicMode = new ClassicModeHelper(this); this.dailyMode = new DailyModeHelper(this); + this.challengeMode = new ChallengeModeHelper(this); this.settings = new SettingsHelper(this); } diff --git a/src/test/utils/helpers/challengeModeHelper.ts b/src/test/utils/helpers/challengeModeHelper.ts new file mode 100644 index 00000000000..184f11f505c --- /dev/null +++ b/src/test/utils/helpers/challengeModeHelper.ts @@ -0,0 +1,78 @@ +import { BattleStyle } from "#app/enums/battle-style"; +import { Species } from "#app/enums/species"; +import overrides from "#app/overrides"; +import { EncounterPhase } from "#app/phases/encounter-phase"; +import { SelectStarterPhase } from "#app/phases/select-starter-phase"; +import { Mode } from "#app/ui/ui"; +import { generateStarter } from "../gameManagerUtils"; +import { GameManagerHelper } from "./gameManagerHelper"; +import { Challenge } from "#app/data/challenge"; +import { CommandPhase } from "#app/phases/command-phase"; +import { TurnInitPhase } from "#app/phases/turn-init-phase"; +import { Challenges } from "#enums/challenges"; +import { copyChallenge } from "data/challenge"; + +/** + * Helper to handle Challenge mode specifics + */ +export class ChallengeModeHelper extends GameManagerHelper { + + challenges: Challenge[] = []; + + /** + * Adds a challenge to the challenge mode helper. + * @param id - The challenge id. + * @param value - The challenge value. + * @param severity - The challenge severity. + */ + addChallenge(id: Challenges, value: number, severity: number) { + const challenge = copyChallenge({ id, value, severity }); + this.challenges.push(challenge); + } + + /** + * Runs the Challenge game to the summon phase. + * @param gameMode - Optional game mode to set. + * @returns A promise that resolves when the summon phase is reached. + */ + async runToSummon(species?: Species[]) { + await this.game.runToTitle(); + + this.game.onNextPrompt("TitlePhase", Mode.TITLE, () => { + this.game.scene.gameMode.challenges = this.challenges; + const starters = generateStarter(this.game.scene, species); + const selectStarterPhase = new SelectStarterPhase(this.game.scene); + this.game.scene.pushPhase(new EncounterPhase(this.game.scene, false)); + selectStarterPhase.initBattle(starters); + }); + + await this.game.phaseInterceptor.run(EncounterPhase); + if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0) { + this.game.removeEnemyHeldItems(); + } + } + + /** + * Transitions to the start of a battle. + * @param species - Optional array of species to start the battle with. + * @returns A promise that resolves when the battle is started. + */ + async startBattle(species?: Species[]) { + await this.runToSummon(species); + + if (this.game.scene.battleStyle === BattleStyle.SWITCH) { + this.game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { + this.game.setMode(Mode.MESSAGE); + this.game.endPhase(); + }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase)); + + this.game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { + this.game.setMode(Mode.MESSAGE); + this.game.endPhase(); + }, () => this.game.isCurrentPhase(CommandPhase) || this.game.isCurrentPhase(TurnInitPhase)); + } + + await this.game.phaseInterceptor.to(CommandPhase); + console.log("==================[New Turn]=================="); + } +} diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index ff4ed919e75..25210277edc 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -374,23 +374,14 @@ export default class RunInfoUiHandler extends UiHandler { case GameModes.CHALLENGE: modeText.appendText(`${i18next.t("gameMode:challenge")}`, false); modeText.appendText(`\t\t${i18next.t("runHistory:challengeRules")}: `); - const runChallenges = this.runInfo.challenges; - const rules: string[] = []; - for (let i = 0; i < runChallenges.length; i++) { - if (runChallenges[i].id === Challenges.SINGLE_GENERATION && runChallenges[i].value !== 0) { - rules.push(i18next.t(`runHistory:challengeMonoGen${runChallenges[i].value}`)); - } else if (runChallenges[i].id === Challenges.SINGLE_TYPE && runChallenges[i].value !== 0) { - rules.push(i18next.t(`pokemonInfo:Type.${Type[runChallenges[i].value-1]}` as const)); - } else if (runChallenges[i].id === Challenges.FRESH_START && runChallenges[i].value !== 0) { - rules.push(i18next.t("challenges:freshStart.name")); - } - } + const rules: string[] = this.challengeParser(); if (rules) { for (let i = 0; i < rules.length; i++) { + const newline = i > 0 && i%2 === 0; if (i > 0) { - modeText.appendText(" + ", false); + modeText.appendText(" + ", newline); } - modeText.appendText(rules[i], false); + modeText.appendText(rules[i], newline); } } break; @@ -466,6 +457,34 @@ export default class RunInfoUiHandler extends UiHandler { this.runContainer.add(this.runInfoContainer); } + /** + * This function parses the Challenges section of the Run Entry and returns a list of active challenge. + * @return string[] of active challenge names + */ + private challengeParser(): string[] { + const rules: string[] = []; + for (let i = 0; i < this.runInfo.challenges.length; i++) { + if (this.runInfo.challenges[i].value !== 0) { + switch (this.runInfo.challenges[i].id) { + case Challenges.SINGLE_GENERATION: + rules.push(i18next.t(`runHistory:challengeMonoGen${this.runInfo.challenges[i].value}`)); + break; + case Challenges.SINGLE_TYPE: + rules.push(i18next.t(`pokemonInfo:Type.${Type[this.runInfo.challenges[i].value-1]}` as const)); + break; + case Challenges.FRESH_START: + rules.push(i18next.t("challenges:freshStart.name")); + break; + case Challenges.INVERSE_BATTLE: + // + rules.push(i18next.t("challenges:inverseBattle.shortName").split("").reverse().join("")); + break; + } + } + } + return rules; + } + /** * Parses and displays the run's player party. * Default Information: Icon, Level, Nature, Ability, Passive, Shiny Status, Fusion Status, Stats, and Moves. From db9434ac11b2735ca31d32f755be84ed838f0e42 Mon Sep 17 00:00:00 2001 From: damocleas Date: Thu, 29 Aug 2024 15:29:06 -0400 Subject: [PATCH 10/18] [Balance] Biome Changes / Minor Passive Changes / Minor Egg Move Changes / Beta GMax form adjustments (#3852) * [Balance] Previous Egg/Passive/Eternatus Update Adjustments * Update pokemon-species.ts * Updated Eternatus, src/field/pokemon.ts * Update egg-moves.ts for Drowzee and Darkrai * Update biomes.ts * Update biomes.ts to screw over Dojo! * Update pokemon-species.ts gmax adjustments --- src/data/biomes.ts | 26 +++++++++++++------------- src/data/egg-moves.ts | 6 +++--- src/data/pokemon-species.ts | 12 ++++++------ src/field/pokemon.ts | 2 +- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/data/biomes.ts b/src/data/biomes.ts index ed579112249..2cdb29a94ec 100644 --- a/src/data/biomes.ts +++ b/src/data/biomes.ts @@ -35,36 +35,36 @@ interface BiomeDepths { export const biomeLinks: BiomeLinks = { [Biome.TOWN]: Biome.PLAINS, [Biome.PLAINS]: [ Biome.GRASS, Biome.METROPOLIS, Biome.LAKE ], - [Biome.GRASS]: Biome.TALL_GRASS, + [Biome.GRASS]: [ Biome.TALL_GRASS, [ Biome.CONSTRUCTION_SITE, 2 ] ], [Biome.TALL_GRASS]: [ Biome.FOREST, Biome.CAVE ], [Biome.SLUM]: Biome.CONSTRUCTION_SITE, [Biome.FOREST]: [ Biome.JUNGLE, Biome.MEADOW ], [Biome.SEA]: [ Biome.SEABED, Biome.ICE_CAVE ], [Biome.SWAMP]: [ Biome.GRAVEYARD, Biome.TALL_GRASS ], - [Biome.BEACH]: [ Biome.SEA, [ Biome.ISLAND, 4 ] ], + [Biome.BEACH]: [ Biome.SEA, [ Biome.ISLAND, 3 ] ], [Biome.LAKE]: [ Biome.BEACH, Biome.SWAMP, Biome.CONSTRUCTION_SITE ], - [Biome.SEABED]: [ Biome.CAVE, [ Biome.VOLCANO, 4 ] ], - [Biome.MOUNTAIN]: [ Biome.VOLCANO, [ Biome.WASTELAND, 3 ] ], + [Biome.SEABED]: [ Biome.CAVE, [ Biome.VOLCANO, 3 ] ], + [Biome.MOUNTAIN]: [ Biome.VOLCANO, [ Biome.DOJO, 2] [ Biome.WASTELAND, 2 ] ], [Biome.BADLANDS]: [ Biome.DESERT, Biome.MOUNTAIN ], [Biome.CAVE]: [ Biome.BADLANDS, Biome.LAKE ], - [Biome.DESERT]: Biome.RUINS, + [Biome.DESERT]: [ Biome.RUINS, [ Biome.CONSTRUCTION_SITE, 2 ] ], [Biome.ICE_CAVE]: Biome.SNOWY_FOREST, - [Biome.MEADOW]: [ Biome.PLAINS, [ Biome.FAIRY_CAVE, 2 ] ], + [Biome.MEADOW]: [ Biome.PLAINS, Biome.FAIRY_CAVE ], [Biome.POWER_PLANT]: Biome.FACTORY, - [Biome.VOLCANO]: [ Biome.BEACH, [ Biome.ICE_CAVE, 4 ] ], + [Biome.VOLCANO]: [ Biome.BEACH, [ Biome.ICE_CAVE, 3 ] ], [Biome.GRAVEYARD]: Biome.ABYSS, - [Biome.DOJO]: [ Biome.PLAINS, [ Biome.TEMPLE, 3 ] ], - [Biome.FACTORY]: [ Biome.PLAINS, [ Biome.LABORATORY, 4 ] ], + [Biome.DOJO]: [ Biome.PLAINS, [ Biome.JUNGLE, 2], [ Biome.TEMPLE, 2 ] ], + [Biome.FACTORY]: [ Biome.TALL_GRASS, [ Biome.LABORATORY, 3 ] ], [Biome.RUINS]: [ Biome.FOREST ], [Biome.WASTELAND]: Biome.BADLANDS, [Biome.ABYSS]: [ Biome.CAVE, [ Biome.SPACE, 3 ], [ Biome.WASTELAND, 3 ] ], [Biome.SPACE]: Biome.RUINS, - [Biome.CONSTRUCTION_SITE]: [ Biome.DOJO, Biome.POWER_PLANT ], + [Biome.CONSTRUCTION_SITE]: [ Biome.POWER_PLANT, [ Biome.DOJO, 2 ] ], [Biome.JUNGLE]: [ Biome.TEMPLE ], - [Biome.FAIRY_CAVE]: [ Biome.ICE_CAVE, [ Biome.SPACE, 3 ] ], - [Biome.TEMPLE]: [ Biome.SWAMP, [ Biome.RUINS, 3 ] ], + [Biome.FAIRY_CAVE]: [ Biome.ICE_CAVE, [ Biome.SPACE, 2 ] ], + [Biome.TEMPLE]: [ Biome.DESERT, [ Biome.SWAMP, 2 ], [ Biome.RUINS, 2 ] ], [Biome.METROPOLIS]: Biome.SLUM, - [Biome.SNOWY_FOREST]: [ Biome.FOREST, Biome.LAKE, Biome.MOUNTAIN ], + [Biome.SNOWY_FOREST]: [ Biome.FOREST, Biome.MOUNTAIN, [ Biome.LAKE, 2 ] ], [Biome.ISLAND]: Biome.SEA, [Biome.LABORATORY]: Biome.CONSTRUCTION_SITE }; diff --git a/src/data/egg-moves.ts b/src/data/egg-moves.ts index f88ac2c71b2..b516238c46e 100644 --- a/src/data/egg-moves.ts +++ b/src/data/egg-moves.ts @@ -43,7 +43,7 @@ export const speciesEggMoves = { [Species.SHELLDER]: [ Moves.ROCK_BLAST, Moves.WATER_SHURIKEN, Moves.BANEFUL_BUNKER, Moves.BONE_RUSH ], [Species.GASTLY]: [ Moves.SLUDGE_BOMB, Moves.AURA_SPHERE, Moves.NASTY_PLOT, Moves.ASTRAL_BARRAGE ], [Species.ONIX]: [ Moves.SHORE_UP, Moves.BODY_PRESS, Moves.HEAVY_SLAM, Moves.DIAMOND_STORM ], - [Species.DROWZEE]: [ Moves.BADDY_BAD, Moves.STRENGTH_SAP, Moves.LUMINA_CRASH, Moves.SPORE ], + [Species.DROWZEE]: [ Moves.BADDY_BAD, Moves.STRENGTH_SAP, Moves.LUMINA_CRASH, Moves.DARK_VOID ], [Species.KRABBY]: [ Moves.FIRE_LASH, Moves.PLAY_ROUGH, Moves.IVY_CUDGEL, Moves.SHELL_SMASH ], [Species.VOLTORB]: [ Moves.NASTY_PLOT, Moves.OVERHEAT, Moves.FROST_BREATH, Moves.ELECTRO_DRIFT ], [Species.EXEGGCUTE]: [ Moves.FICKLE_BEAM, Moves.APPLE_ACID, Moves.TRICK_ROOM, Moves.LUMINA_CRASH ], @@ -125,7 +125,7 @@ export const speciesEggMoves = { [Species.SUICUNE]: [ Moves.RECOVER, Moves.NASTY_PLOT, Moves.FREEZE_DRY, Moves.STEAM_ERUPTION ], [Species.LARVITAR]: [ Moves.DRAGON_DANCE, Moves.MOUNTAIN_GALE, Moves.SHORE_UP, Moves.DIAMOND_STORM ], [Species.LUGIA]: [ Moves.NASTY_PLOT, Moves.LUMINA_CRASH, Moves.AURA_SPHERE, Moves.OBLIVION_WING ], - [Species.HO_OH]: [ Moves.FLOATY_FALL, Moves.SOLAR_BLADE, Moves.REVIVAL_BLESSING, Moves.BOLT_BEAK ], + [Species.HO_OH]: [ Moves.FLOATY_FALL, Moves.PRECIPICE_BLADES, Moves.REVIVAL_BLESSING, Moves.BOLT_BEAK ], [Species.CELEBI]: [ Moves.PHOTON_GEYSER, Moves.MATCHA_GOTCHA, Moves.REVIVAL_BLESSING, Moves.QUIVER_DANCE ], [Species.TREECKO]: [ Moves.NASTY_PLOT, Moves.APPLE_ACID, Moves.SECRET_SWORD, Moves.DRAGON_ENERGY ], [Species.TORCHIC]: [ Moves.HIGH_JUMP_KICK, Moves.SUPERCELL_SLAM, Moves.KNOCK_OFF, Moves.V_CREATE ], @@ -249,7 +249,7 @@ export const speciesEggMoves = { [Species.CRESSELIA]: [ Moves.COSMIC_POWER, Moves.SECRET_SWORD, Moves.SIZZLY_SLIDE, Moves.LUMINA_CRASH ], [Species.PHIONE]: [ Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.SPLISHY_SPLASH, Moves.QUIVER_DANCE ], [Species.MANAPHY]: [ Moves.BOUNCY_BUBBLE, Moves.FREEZE_DRY, Moves.SPLISHY_SPLASH, Moves.QUIVER_DANCE ], - [Species.DARKRAI]: [ Moves.FIERY_WRATH, Moves.MOONBLAST, Moves.SEARING_SHOT, Moves.SPORE ], + [Species.DARKRAI]: [ Moves.FIERY_WRATH, Moves.MOONBLAST, Moves.FIERY_DANCE, Moves.MAKE_IT_RAIN ], [Species.SHAYMIN]: [ Moves.MATCHA_GOTCHA, Moves.FIERY_DANCE, Moves.AEROBLAST, Moves.QUIVER_DANCE ], [Species.ARCEUS]: [ Moves.NO_RETREAT, Moves.COLLISION_COURSE, Moves.ASTRAL_BARRAGE, Moves.MULTI_ATTACK ], [Species.VICTINI]: [ Moves.BLUE_FLARE, Moves.BOLT_STRIKE, Moves.LUSTER_PURGE, Moves.VICTORY_DANCE ], diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 832f7112748..db601935bfc 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1132,7 +1132,7 @@ export function initSpecies() { ), new PokemonSpecies(Species.SNORLAX, 1, false, false, false, "Sleeping Pokémon", Type.NORMAL, null, 2.1, 460, Abilities.IMMUNITY, Abilities.THICK_FAT, Abilities.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, GrowthRate.SLOW, 87.5, false, true, new PokemonForm("Normal", "", Type.NORMAL, null, 2.1, 460, Abilities.IMMUNITY, Abilities.THICK_FAT, Abilities.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.NORMAL, Type.GRASS, 35, 460, Abilities.THICK_FAT, Abilities.THICK_FAT, Abilities.THICK_FAT, 640, 200, 135, 85, 80, 125, 15, 25, 50, 189), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.NORMAL, null, 35, 460, Abilities.THICK_FAT, Abilities.THICK_FAT, Abilities.THICK_FAT, 640, 200, 135, 85, 80, 125, 15, 25, 50, 189), ), new PokemonSpecies(Species.ARTICUNO, 1, true, false, false, "Freeze Pokémon", Type.ICE, Type.FLYING, 1.7, 55.4, Abilities.PRESSURE, Abilities.NONE, Abilities.SNOW_CLOAK, 580, 90, 85, 100, 95, 125, 85, 3, 35, 290, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.ZAPDOS, 1, true, false, false, "Electric Pokémon", Type.ELECTRIC, Type.FLYING, 1.6, 52.6, Abilities.PRESSURE, Abilities.NONE, Abilities.STATIC, 580, 90, 90, 85, 125, 90, 100, 3, 35, 290, GrowthRate.SLOW, null, false), @@ -2252,19 +2252,19 @@ export function initSpecies() { new PokemonSpecies(Species.THWACKEY, 8, false, false, false, "Beat Pokémon", Type.GRASS, null, 0.7, 14, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 420, 70, 85, 70, 55, 60, 80, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.RILLABOOM, 8, false, false, false, "Drummer Pokémon", Type.GRASS, null, 2.1, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", Type.GRASS, null, 2.1, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, null, 28, 90, Abilities.GRASSY_SURGE, Abilities.GRASSY_SURGE, Abilities.GRASSY_SURGE, 630, 125, 150, 115, 65, 95, 80, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, null, 28, 90, Abilities.GRASSY_SURGE, Abilities.GRASSY_SURGE, Abilities.GRASSY_SURGE, 630, 125, 150, 105, 85, 85, 80, 45, 50, 265), ), new PokemonSpecies(Species.SCORBUNNY, 8, false, false, false, "Rabbit Pokémon", Type.FIRE, null, 0.3, 4.5, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 310, 50, 71, 40, 40, 40, 69, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.RABOOT, 8, false, false, false, "Rabbit Pokémon", Type.FIRE, null, 0.6, 9, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 420, 65, 86, 60, 55, 60, 94, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.CINDERACE, 8, false, false, false, "Striker Pokémon", Type.FIRE, null, 1.4, 33, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", Type.FIRE, null, 1.4, 33, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIRE, null, 27, 33, Abilities.LIBERO, Abilities.LIBERO, Abilities.LIBERO, 630, 90, 151, 85, 85, 85, 134, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIRE, null, 27, 33, Abilities.LIBERO, Abilities.LIBERO, Abilities.LIBERO, 630, 100, 146, 80, 90, 80, 134, 45, 50, 265), ), new PokemonSpecies(Species.SOBBLE, 8, false, false, false, "Water Lizard Pokémon", Type.WATER, null, 0.3, 4, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 310, 50, 40, 40, 70, 40, 70, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.DRIZZILE, 8, false, false, false, "Water Lizard Pokémon", Type.WATER, null, 0.7, 11.5, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 420, 65, 60, 55, 95, 55, 90, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.INTELEON, 8, false, false, false, "Secret Agent Pokémon", Type.WATER, null, 1.9, 45.2, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", Type.WATER, null, 1.9, 45.2, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, null, 40, 45.2, Abilities.SNIPER, Abilities.SNIPER, Abilities.SNIPER, 630, 90, 90, 85, 150, 85, 130, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, null, 40, 45.2, Abilities.SNIPER, Abilities.SNIPER, Abilities.SNIPER, 630, 95, 97, 77, 147, 77, 137, 45, 50, 265), ), new PokemonSpecies(Species.SKWOVET, 8, false, false, false, "Cheeky Pokémon", Type.NORMAL, null, 0.3, 2.5, Abilities.CHEEK_POUCH, Abilities.NONE, Abilities.GLUTTONY, 275, 70, 55, 55, 35, 35, 25, 255, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GREEDENT, 8, false, false, false, "Greedy Pokémon", Type.NORMAL, null, 0.6, 6, Abilities.CHEEK_POUCH, Abilities.NONE, Abilities.GLUTTONY, 460, 120, 95, 95, 55, 75, 20, 90, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), @@ -3470,7 +3470,7 @@ export const starterPassiveAbilities = { [Species.SUICUNE]: Abilities.UNAWARE, [Species.LARVITAR]: Abilities.SAND_RUSH, [Species.LUGIA]: Abilities.DELTA_STREAM, - [Species.HO_OH]: Abilities.DROUGHT, + [Species.HO_OH]: Abilities.MAGIC_GUARD, [Species.CELEBI]: Abilities.GRASSY_SURGE, [Species.TREECKO]: Abilities.TINTED_LENS, [Species.TORCHIC]: Abilities.RECKLESS, @@ -3591,7 +3591,7 @@ export const starterPassiveAbilities = { [Species.HEATRAN]: Abilities.EARTH_EATER, [Species.REGIGIGAS]: Abilities.MINDS_EYE, [Species.GIRATINA]: Abilities.SHADOW_SHIELD, - [Species.CRESSELIA]: Abilities.UNAWARE, + [Species.CRESSELIA]: Abilities.SHADOW_SHIELD, [Species.PHIONE]: Abilities.SIMPLE, [Species.MANAPHY]: Abilities.PRIMORDIAL_SEA, [Species.DARKRAI]: Abilities.UNNERVE, diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 58764ff1046..6df486aab39 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3846,7 +3846,7 @@ export class EnemyPokemon extends Pokemon { this.moveset = (formIndex !== undefined ? formIndex : this.formIndex) ? [ new PokemonMove(Moves.DYNAMAX_CANNON), - new PokemonMove(Moves.SLUDGE_BOMB), + new PokemonMove(Moves.CROSS_POISON), new PokemonMove(Moves.FLAMETHROWER), new PokemonMove(Moves.RECOVER, 0, -4) ] From 9833b1da7e67d3041c98bd273add09704e2ce580 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Thu, 29 Aug 2024 14:10:38 -0700 Subject: [PATCH 11/18] [Balance] Randomized Biome after End Biome (#3888) * Biome.END goes somewhere random * this way island is included too * no towns or plains * Enums are dumb --------- Co-authored-by: frutescens --- src/data/biomes.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/data/biomes.ts b/src/data/biomes.ts index 2cdb29a94ec..3879053b066 100644 --- a/src/data/biomes.ts +++ b/src/data/biomes.ts @@ -7663,6 +7663,12 @@ export function initBiomes() { biomeDepths[Biome.TOWN] = [ 0, 1 ]; const traverseBiome = (biome: Biome, depth: integer) => { + if (biome === Biome.END) { + const biomeList = Object.keys(Biome).filter(key => !isNaN(Number(key))); + biomeList.pop(); // Removes Biome.END from the list + const randIndex = Utils.randInt(biomeList.length, 2); // Will never be Biome.TOWN or Biome.PLAINS + biome = Biome[biomeList[randIndex]]; + } const linkedBiomes: (Biome | [ Biome, integer ])[] = Array.isArray(biomeLinks[biome]) ? biomeLinks[biome] as (Biome | [ Biome, integer ])[] : [ biomeLinks[biome] as Biome ]; From b2cd21bcb18f4c0929a3d0b2e3e872388a47a7e7 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Thu, 29 Aug 2024 17:13:10 -0400 Subject: [PATCH 12/18] Fix evolution items not working on mons without forms (#3902) --- src/modifier/modifier-type.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 938f73a1e08..3afeb79ff2b 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -791,10 +791,10 @@ export class EvolutionItemModifierType extends PokemonModifierType implements Ge super("", EvolutionItem[evolutionItem].toLowerCase(), (_type, args) => new Modifiers.EvolutionItemModifier(this, (args[0] as PlayerPokemon).id), (pokemon: PlayerPokemon) => { if (pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) && pokemonEvolutions[pokemon.species.speciesId].filter(e => e.item === this.evolutionItem - && (!e.condition || e.condition.predicate(pokemon)) && (e.preFormKey === pokemon.getFormKey())).length && (pokemon.getFormKey() !== SpeciesFormKey.GIGANTAMAX)) { + && (!e.condition || e.condition.predicate(pokemon)) && (e.preFormKey === null || e.preFormKey === pokemon.getFormKey())).length && (pokemon.getFormKey() !== SpeciesFormKey.GIGANTAMAX)) { return null; } else if (pokemon.isFusion() && pokemon.fusionSpecies && pokemonEvolutions.hasOwnProperty(pokemon.fusionSpecies.speciesId) && pokemonEvolutions[pokemon.fusionSpecies.speciesId].filter(e => e.item === this.evolutionItem - && (!e.condition || e.condition.predicate(pokemon)) && (e.preFormKey === pokemon.getFusionFormKey())).length && (pokemon.getFusionFormKey() !== SpeciesFormKey.GIGANTAMAX)) { + && (!e.condition || e.condition.predicate(pokemon)) && (e.preFormKey === null || e.preFormKey === pokemon.getFusionFormKey())).length && (pokemon.getFusionFormKey() !== SpeciesFormKey.GIGANTAMAX)) { return null; } From e4da48f51a279c174a2273258ed4dfc35f450134 Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Thu, 29 Aug 2024 23:47:37 +0200 Subject: [PATCH 13/18] [Bug] Starter select default attributes fixes (#3870) * Test changes to starter ui stuff for edge case stuff to fix * Minor bug fixes * [starter-ui] cleanup outdated fix * use existing method to get the default form from the caught attributes * clear the existing StarterPreferences of potential invalid values * remember the last variant used even when disabling shiny form * fix variant and shiny checks for edge case with variant flags but no shiny flag * more fixes for invalid starter prefs and default settings --------- Co-authored-by: Opaque02 <66582645+Opaque02@users.noreply.github.com> Co-authored-by: Mumble <171087428+frutescens@users.noreply.github.com> --- src/system/game-data.ts | 2 + src/ui/starter-select-ui-handler.ts | 362 ++++++++++++++-------------- 2 files changed, 180 insertions(+), 184 deletions(-) diff --git a/src/system/game-data.ts b/src/system/game-data.ts index d10d6288696..f8d13286ca4 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -243,6 +243,8 @@ export class StarterPrefs { if (pStr !== StarterPrefers_private_latest) { // something changed, store the update localStorage.setItem(`starterPrefs_${loggedInUser?.username}`, pStr); + // update the latest prefs + StarterPrefers_private_latest = pStr; } } } diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index f9b40dd96e6..267a62104e3 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -915,7 +915,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.allSpecies.forEach((species, s) => { const icon = this.starterContainers[s].icon; const dexEntry = this.scene.gameData.dexData[species.speciesId]; - this.starterPreferences[species.speciesId] = this.starterPreferences[species.speciesId] ?? {}; + + // Initialize the StarterAttributes for this species + this.starterPreferences[species.speciesId] = this.initStarterPrefs(species); if (dexEntry.caughtAttr) { icon.clearTint(); @@ -942,6 +944,93 @@ export default class StarterSelectUiHandler extends MessageUiHandler { return false; } + /** + * Get the starter attributes for the given PokemonSpecies, after sanitizing them. + * If somehow a preference is set for a form, variant, gender, ability or nature + * that wasn't actually unlocked or is invalid it will be cleared here + * + * @param species The species to get Starter Preferences for + * @returns StarterAttributes for the species + */ + initStarterPrefs(species: PokemonSpecies): StarterAttributes { + const starterAttributes = this.starterPreferences[species.speciesId]; + const dexEntry = this.scene.gameData.dexData[species.speciesId]; + const starterData = this.scene.gameData.starterData[species.speciesId]; + + // no preferences or Pokemon wasn't caught, return empty attribute + if (!starterAttributes || !dexEntry.caughtAttr) { + return {}; + } + + const caughtAttr = dexEntry.caughtAttr; + + const hasShiny = caughtAttr & DexAttr.SHINY; + const hasNonShiny = caughtAttr & DexAttr.NON_SHINY; + if (starterAttributes.shiny && !hasShiny) { + // shiny form wasn't unlocked, purging shiny and variant setting + delete starterAttributes.shiny; + delete starterAttributes.variant; + } else if (starterAttributes.shiny === false && !hasNonShiny) { + // non shiny form wasn't unlocked, purging shiny setting + delete starterAttributes.shiny; + } + + if (starterAttributes.variant !== undefined && !isNaN(starterAttributes.variant)) { + const unlockedVariants = [ + hasNonShiny, + hasShiny && caughtAttr & DexAttr.DEFAULT_VARIANT, + hasShiny && caughtAttr & DexAttr.VARIANT_2, + hasShiny && caughtAttr & DexAttr.VARIANT_3 + ]; + if (!unlockedVariants[starterAttributes.variant + 1]) { // add 1 as -1 = non-shiny + // requested variant wasn't unlocked, purging setting + delete starterAttributes.variant; + } + } + + if (starterAttributes.female !== undefined) { + if (!(starterAttributes.female ? caughtAttr & DexAttr.FEMALE : caughtAttr & DexAttr.MALE)) { + // requested gender wasn't unlocked, purging setting + delete starterAttributes.female; + } + } + + if (starterAttributes.ability !== undefined) { + const speciesHasSingleAbility = species.ability2 === species.ability1; + const abilityAttr = starterData.abilityAttr; + const hasAbility1 = abilityAttr & AbilityAttr.ABILITY_1; + const hasAbility2 = abilityAttr & AbilityAttr.ABILITY_2; + const hasHiddenAbility = abilityAttr & AbilityAttr.ABILITY_HIDDEN; + // Due to a past bug it is possible that some Pokemon with a single ability have the ability2 flag + // In this case, we only count ability2 as valid if ability1 was not unlocked, otherwise we ignore it + const unlockedAbilities = [ + hasAbility1, + speciesHasSingleAbility ? hasAbility2 && !hasAbility1 : hasAbility2, + hasHiddenAbility + ]; + if (!unlockedAbilities[starterAttributes.ability]) { + // requested ability wasn't unlocked, purging setting + delete starterAttributes.ability; + } + } + + const selectedForm = starterAttributes.form; + if (selectedForm !== undefined && (!species.forms[selectedForm]?.isStarterSelectable || !(caughtAttr & this.scene.gameData.getFormAttr(selectedForm)))) { + // requested form wasn't unlocked/isn't a starter form, purging setting + delete starterAttributes.form; + } + + if (starterAttributes.nature !== undefined) { + const unlockedNatures = this.scene.gameData.getNaturesForAttr(dexEntry.natureAttr); + if (unlockedNatures.indexOf(starterAttributes.nature as unknown as Nature) < 0) { + // requested nature wasn't unlocked, purging setting + delete starterAttributes.nature; + } + } + + return starterAttributes; + } + /** * Set the selections for all filters to their default starting value */ @@ -1749,9 +1838,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { switch (button) { case Button.CYCLE_SHINY: if (this.canCycleShiny) { - const newVariant = props.variant; + const newVariant = starterAttributes.variant ? starterAttributes.variant as Variant : props.variant; starterAttributes.shiny = starterAttributes.shiny ? !starterAttributes.shiny : true; - this.setSpeciesDetails(this.lastSpecies, !props.shiny, undefined, undefined, props.shiny ? 0 : undefined, undefined, undefined); + this.setSpeciesDetails(this.lastSpecies, !props.shiny, undefined, undefined, props.shiny ? 0 : newVariant, undefined, undefined); if (starterAttributes.shiny) { this.scene.playSound("se/sparkle"); // Set the variant label to the shiny tint @@ -1760,10 +1849,6 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonShinyIcon.setTint(tint); this.pokemonShinyIcon.setVisible(true); } else { - // starterAttributes.variant = 0; - if (starterAttributes?.variant) { - delete starterAttributes.variant; - } this.pokemonShinyIcon.setVisible(false); success = true; } @@ -2276,43 +2361,39 @@ export default class StarterSelectUiHandler extends MessageUiHandler { container.cost = this.scene.gameData.getSpeciesStarterValue(container.species.speciesId); // First, ensure you have the caught attributes for the species else default to bigint 0 - const isCaught = this.scene.gameData.dexData[container.species.speciesId]?.caughtAttr || BigInt(0); - - // Define the variables based on whether their respective variants have been caught - const isVariant3Caught = !!(isCaught & DexAttr.VARIANT_3); - const isVariant2Caught = !!(isCaught & DexAttr.VARIANT_2); - const isVariantCaught = !!(isCaught & DexAttr.SHINY); - const isUncaught = !isCaught && !isVariantCaught && !isVariant2Caught && !isVariant3Caught; - const isPassiveUnlocked = this.scene.gameData.starterData[container.species.speciesId].passiveAttr > 0; - const isPassiveUnlockable = this.isPassiveAvailable(container.species.speciesId) && !isPassiveUnlocked; - const isCostReduced = this.scene.gameData.starterData[container.species.speciesId].valueReduction > 0; - const isCostReductionUnlockable = this.isValueReductionAvailable(container.species.speciesId); - const isFavorite = this.starterPreferences[container.species.speciesId]?.favorite ?? false; - - const isWin = this.scene.gameData.starterData[container.species.speciesId].classicWinCount > 0; - const isNotWin = this.scene.gameData.starterData[container.species.speciesId].classicWinCount === 0; - const isUndefined = this.scene.gameData.starterData[container.species.speciesId].classicWinCount === undefined; - const isHA = this.scene.gameData.starterData[container.species.speciesId].abilityAttr & AbilityAttr.ABILITY_HIDDEN; - const isEggPurchasable = this.isSameSpeciesEggAvailable(container.species.speciesId); + const caughtAttr = this.scene.gameData.dexData[container.species.speciesId]?.caughtAttr || BigInt(0); + const starterData = this.scene.gameData.starterData[container.species.speciesId]; + // Gen filter const fitsGen = this.filterBar.getVals(DropDownColumn.GEN).includes(container.species.generation); + // Type filter const fitsType = this.filterBar.getVals(DropDownColumn.TYPES).some(type => container.species.isOfType((type as number) - 1)); + // Caught / Shiny filter + const isNonShinyCaught = !!(caughtAttr & DexAttr.NON_SHINY); + const isShinyCaught = !!(caughtAttr & DexAttr.SHINY); + const isVariant1Caught = isShinyCaught && !!(caughtAttr & DexAttr.DEFAULT_VARIANT); + const isVariant2Caught = isShinyCaught && !!(caughtAttr & DexAttr.VARIANT_2); + const isVariant3Caught = isShinyCaught && !!(caughtAttr & DexAttr.VARIANT_3); + const isUncaught = !isNonShinyCaught && !isVariant1Caught && !isVariant2Caught && !isVariant3Caught; const fitsCaught = this.filterBar.getVals(DropDownColumn.CAUGHT).some(caught => { if (caught === "SHINY3") { return isVariant3Caught; } else if (caught === "SHINY2") { return isVariant2Caught && !isVariant3Caught; } else if (caught === "SHINY") { - return isVariantCaught && !isVariant2Caught && !isVariant3Caught; + return isVariant1Caught && !isVariant2Caught && !isVariant3Caught; } else if (caught === "NORMAL") { - return isCaught && !isVariantCaught && !isVariant2Caught && !isVariant3Caught; + return isNonShinyCaught && !isVariant1Caught && !isVariant2Caught && !isVariant3Caught; } else if (caught === "UNCAUGHT") { return isUncaught; } }); + // Passive Filter + const isPassiveUnlocked = starterData.passiveAttr > 0; + const isPassiveUnlockable = this.isPassiveAvailable(container.species.speciesId) && !isPassiveUnlocked; const fitsPassive = this.filterBar.getVals(DropDownColumn.UNLOCKS).some(unlocks => { if (unlocks.val === "PASSIVE" && unlocks.state === DropDownState.ON) { return isPassiveUnlocked; @@ -2325,6 +2406,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } }); + // Cost Reduction Filter + const isCostReduced = starterData.valueReduction > 0; + const isCostReductionUnlockable = this.isValueReductionAvailable(container.species.speciesId); const fitsCostReduction = this.filterBar.getVals(DropDownColumn.UNLOCKS).some(unlocks => { if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.ON) { return isCostReduced; @@ -2337,6 +2421,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } }); + // Favorite Filter + const isFavorite = this.starterPreferences[container.species.speciesId]?.favorite ?? false; const fitsFavorite = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { if (misc.val === "FAVORITE" && misc.state === DropDownState.ON) { return isFavorite; @@ -2349,28 +2435,34 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } }); + // Ribbon / Classic Win Filter + const hasWon = starterData.classicWinCount > 0; + const hasNotWon = starterData.classicWinCount === 0; + const isUndefined = starterData.classicWinCount === undefined; const fitsWin = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { - if (container.species.speciesId < 10) { - } if (misc.val === "WIN" && misc.state === DropDownState.ON) { - return isWin; + return hasWon; } else if (misc.val === "WIN" && misc.state === DropDownState.EXCLUDE) { - return isNotWin || isUndefined; + return hasNotWon || isUndefined; } else if (misc.val === "WIN" && misc.state === DropDownState.OFF) { return true; } }); + // HA Filter + const hasHA = starterData.abilityAttr & AbilityAttr.ABILITY_HIDDEN; const fitsHA = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { if (misc.val === "HIDDEN_ABILITY" && misc.state === DropDownState.ON) { - return isHA; + return hasHA; } else if (misc.val === "HIDDEN_ABILITY" && misc.state === DropDownState.EXCLUDE) { - return !isHA; + return !hasHA; } else if (misc.val === "HIDDEN_ABILITY" && misc.state === DropDownState.OFF) { return true; } }); + // Egg Purchasable Filter + const isEggPurchasable = this.isSameSpeciesEggAvailable(container.species.speciesId); const fitsEgg = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { if (misc.val === "EGG" && misc.state === DropDownState.ON) { return isEggPurchasable; @@ -2381,6 +2473,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } }); + // Pokerus Filter const fitsPokerus = this.filterBar.getVals(DropDownColumn.MISC).some(misc => { if (misc.val === "POKERUS" && misc.state === DropDownState.ON) { return this.pokerusSpecies.includes(container.species); @@ -2579,56 +2672,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.natureCursor = species ? this.scene.gameData.getSpeciesDefaultNature(species) : 0; const starterAttributes : StarterAttributes | null = species ? {...this.starterPreferences[species.speciesId]} : null; - // validate starterAttributes - if (starterAttributes) { - // this may cause changes so we created a copy of the attributes before - if (starterAttributes.variant && !isNaN(starterAttributes.variant)) { - if (![ - this.speciesStarterDexEntry!.caughtAttr & DexAttr.NON_SHINY, // TODO: is that bang correct? - this.speciesStarterDexEntry!.caughtAttr & DexAttr.DEFAULT_VARIANT, // TODO: is that bang correct? - this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_2, // TODO: is that bang correct? - this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_3 // TODO: is that bang correct? - ][starterAttributes.variant+1]) { // add 1 as -1 = non-shiny - // requested variant wasn't unlocked, purging setting - delete starterAttributes.variant; - } - } - - if (typeof starterAttributes.female !== "boolean" || !(starterAttributes.female ? - this.speciesStarterDexEntry!.caughtAttr & DexAttr.FEMALE : // TODO: is this bang correct? - this.speciesStarterDexEntry!.caughtAttr & DexAttr.MALE // TODO: is this bang correct? - )) { - // requested gender wasn't unlocked, purging setting - delete starterAttributes.female; - } - - const abilityAttr = this.scene.gameData.starterData[species!.speciesId].abilityAttr; // TODO: is this bang correct? - if (![ - abilityAttr & AbilityAttr.ABILITY_1, - species!.ability2 ? (abilityAttr & AbilityAttr.ABILITY_2) : abilityAttr & AbilityAttr.ABILITY_HIDDEN, // TODO: is this bang correct? - species!.ability2 && abilityAttr & AbilityAttr.ABILITY_HIDDEN // TODO: is this bang correct? - ][starterAttributes.ability!]) { // TODO: is this bang correct? - // requested ability wasn't unlocked, purging setting - delete starterAttributes.ability; - } - - if (!(species?.forms[starterAttributes.form!]?.isStarterSelectable && this.speciesStarterDexEntry!.caughtAttr & this.scene.gameData.getFormAttr(starterAttributes.form!))) { // TODO: are those bangs correct? - // requested form wasn't unlocked/isn't a starter form, purging setting - delete starterAttributes.form; - } - - if (this.scene.gameData.getNaturesForAttr(this.speciesStarterDexEntry?.natureAttr).indexOf(starterAttributes.nature as unknown as Nature) < 0) { - // requested nature wasn't unlocked, purging setting - delete starterAttributes.nature; - } - } if (starterAttributes?.nature) { // load default nature from stater save data, if set this.natureCursor = starterAttributes.nature; } if (starterAttributes?.ability && !isNaN(starterAttributes.ability)) { - // load default nature from stater save data, if set + // load default ability from stater save data, if set this.abilityCursor = starterAttributes.ability; } @@ -2675,7 +2725,6 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonLuckText.setText(luck.toString()); this.pokemonLuckText.setTint(getVariantTint(Math.min(luck - 1, 2) as Variant)); this.pokemonLuckLabelText.setVisible(this.pokemonLuckText.visible); - this.pokemonShinyIcon.setVisible(this.starterPreferences[species.speciesId]?.shiny ?? false); //Growth translate let growthReadable = Utils.toReadableString(GrowthRate[species.growthRate]); @@ -2699,12 +2748,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonHatchedIcon.setFrame(getEggTierForSpecies(species)); } this.pokemonHatchedCountText.setText(`${this.speciesStarterDexEntry.hatchedCount}`); + const defaultDexAttr = this.getCurrentDexProps(species.speciesId); const defaultProps = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); const variant = defaultProps.variant; const tint = getVariantTint(variant); this.pokemonShinyIcon.setFrame(getVariantIcon(variant)); this.pokemonShinyIcon.setTint(tint); + this.pokemonShinyIcon.setVisible(defaultProps.shiny); this.pokemonCaughtHatchedContainer.setVisible(true); if (pokemonPrevolutions.hasOwnProperty(species.speciesId)) { this.pokemonCaughtHatchedContainer.setY(16); @@ -2894,21 +2945,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const dexEntry = this.scene.gameData.dexData[species.speciesId]; const abilityAttr = this.scene.gameData.starterData[species.speciesId].abilityAttr; - const isCaught = this.scene.gameData.dexData[species.speciesId]?.caughtAttr || BigInt(0); - const isVariant3Caught = !!(isCaught & DexAttr.VARIANT_3); - const isVariant2Caught = !!(isCaught & DexAttr.VARIANT_2); - const isDefaultVariantCaught = !!(isCaught & DexAttr.DEFAULT_VARIANT); - const isVariantCaught = !!(isCaught & DexAttr.SHINY); - const isMaleCaught = !!(isCaught & DexAttr.MALE); - const isFemaleCaught = !!(isCaught & DexAttr.FEMALE); - - const starterAttributes = this.starterPreferences[species.speciesId]; - - const props = this.scene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)); - const defaultAbilityIndex = this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species); - const defaultNature = this.scene.gameData.getSpeciesDefaultNature(species); + const caughtAttr = this.scene.gameData.dexData[species.speciesId]?.caughtAttr || BigInt(0); if (!dexEntry.caughtAttr) { + const props = this.scene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)); + const defaultAbilityIndex = this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species); + const defaultNature = this.scene.gameData.getSpeciesDefaultNature(species); + if (shiny === undefined || shiny !== props.shiny) { shiny = props.shiny; } @@ -2927,83 +2970,6 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (natureIndex === undefined || natureIndex !== defaultNature) { natureIndex = defaultNature; } - } else { - // compare current shiny, formIndex, female, variant, abilityIndex, natureIndex with the caught ones - // if the current ones are not caught, we need to find the next caught ones - if (shiny) { - if (!(isVariantCaught || isVariant2Caught || isVariant3Caught)) { - shiny = false; - starterAttributes.shiny = false; - variant = 0; - starterAttributes.variant = 0; - } else { - shiny = true; - starterAttributes.shiny = true; - if (variant === 0 && !isDefaultVariantCaught) { - if (isVariant2Caught) { - variant = 1; - starterAttributes.variant = 1; - } else if (isVariant3Caught) { - variant = 2; - starterAttributes.variant = 2; - } else { - variant = 0; - starterAttributes.variant = 0; - } - } else if (variant === 1 && !isVariant2Caught) { - if (isVariantCaught) { - variant = 0; - starterAttributes.variant = 0; - } else if (isVariant3Caught) { - variant = 2; - starterAttributes.variant = 2; - } else { - variant = 0; - starterAttributes.variant = 0; - } - } else if (variant === 2 && !isVariant3Caught) { - if (isVariantCaught) { - variant = 0; - starterAttributes.variant = 0; - } else if (isVariant2Caught) { - variant = 1; - starterAttributes.variant = 1; - } else { - variant = 0; - starterAttributes.variant = 0; - } - } - } - } - if (female) { - if (!isFemaleCaught) { - female = false; - starterAttributes.female = false; - } - } else { - if (!isMaleCaught) { - female = true; - starterAttributes.female = true; - } - } - - if (species.forms) { - const formCount = species.forms.length; - let newFormIndex = formIndex??0; - if (species.forms[newFormIndex]) { - const isValidForm = species.forms[newFormIndex].isStarterSelectable && dexEntry.caughtAttr & this.scene.gameData.getFormAttr(newFormIndex); - if (!isValidForm) { - do { - newFormIndex = (newFormIndex + 1) % formCount; - if (species.forms[newFormIndex].isStarterSelectable && dexEntry.caughtAttr & this.scene.gameData.getFormAttr(newFormIndex)) { - break; - } - } while (newFormIndex !== props.formIndex); - formIndex = newFormIndex; - starterAttributes.form = formIndex; - } - } - } } this.shinyOverlay.setVisible(shiny ?? false); // TODO: is false the correct default? @@ -3045,8 +3011,19 @@ export default class StarterSelectUiHandler extends MessageUiHandler { currentFilteredContainer.checkIconId(female, formIndex, shiny, variant); } - this.canCycleShiny = isVariantCaught || isVariant2Caught || isVariant3Caught; + const isNonShinyCaught = !!(caughtAttr & DexAttr.NON_SHINY); + const isShinyCaught = !!(caughtAttr & DexAttr.SHINY); + const isVariant1Caught = isShinyCaught && !!(caughtAttr & DexAttr.DEFAULT_VARIANT); + const isVariant2Caught = isShinyCaught && !!(caughtAttr & DexAttr.VARIANT_2); + const isVariant3Caught = isShinyCaught && !!(caughtAttr & DexAttr.VARIANT_3); + + this.canCycleShiny = isNonShinyCaught && isShinyCaught; + this.canCycleVariant = !!shiny && [ isVariant1Caught, isVariant2Caught, isVariant3Caught].filter(v => v).length > 1; + + const isMaleCaught = !!(caughtAttr & DexAttr.MALE); + const isFemaleCaught = !!(caughtAttr & DexAttr.FEMALE); this.canCycleGender = isMaleCaught && isFemaleCaught; + const hasAbility1 = abilityAttr & AbilityAttr.ABILITY_1; let hasAbility2 = abilityAttr & AbilityAttr.ABILITY_2; const hasHiddenAbility = abilityAttr & AbilityAttr.ABILITY_HIDDEN; @@ -3061,10 +3038,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } this.canCycleAbility = [ hasAbility1, hasAbility2, hasHiddenAbility ].filter(a => a).length > 1; + this.canCycleForm = species.forms.filter(f => f.isStarterSelectable || !pokemonFormChanges[species.speciesId]?.find(fc => fc.formKey)) .map((_, f) => dexEntry.caughtAttr & this.scene.gameData.getFormAttr(f)).filter(f => f).length > 1; this.canCycleNature = this.scene.gameData.getNaturesForAttr(dexEntry.natureAttr).length > 1; - this.canCycleVariant = !!shiny && [ dexEntry.caughtAttr & DexAttr.DEFAULT_VARIANT, dexEntry.caughtAttr & DexAttr.VARIANT_2, dexEntry.caughtAttr & DexAttr.VARIANT_3].filter(v => v).length > 1; + } if (dexEntry.caughtAttr && species.malePercent !== null) { @@ -3442,39 +3420,55 @@ export default class StarterSelectUiHandler extends MessageUiHandler { return canStart; } - /* this creates a temporary dex attr props that we use to check whether a pokemon is valid for a challenge. - * when checking for certain challenges (i.e. mono type), we need to check for form changes AND evolutions - * However, since some pokemon can evolve based on their intial gender/form, we need a way to look for that - * This temporary dex attr will therefore ONLY look at gender and form, since there's no cases of shinies/variants - * having different evolutions to their non shiny/variant part, and so those can be ignored - * Since the current form and gender is stored in the starter preferences, this is where we get the values from - */ + /** + * Creates a temporary dex attr props that will be used to check whether a pokemon is valid for a challenge + * and to display the correct shiny, variant, and form based on the StarterPreferences + * + * @param speciesId the id of the species to get props for + * @returns the dex props + */ getCurrentDexProps(speciesId: number): bigint { let props = 0n; + const caughtAttr = this.scene.gameData.dexData[speciesId].caughtAttr; - if (this.starterPreferences[speciesId]?.female) { // this checks the gender of the pokemon + /* this checks the gender of the pokemon; this works by checking a) that the starter preferences for the species exist, and if so, is it female. If so, it'll add DexAttr.FEMALE to our temp props + * It then checks b) if the caughtAttr for the pokemon is female and NOT male - this means that the ONLY gender we've gotten is female, and we need to add DexAttr.FEMALE to our temp props + * If neither of these pass, we add DexAttr.MALE to our temp props + */ + if (this.starterPreferences[speciesId]?.female || ((caughtAttr & DexAttr.FEMALE) > 0n && (caughtAttr & DexAttr.MALE) === 0n)) { props += DexAttr.FEMALE; } else { props += DexAttr.MALE; } - if (this.starterPreferences[speciesId]?.shiny) { + /* This part is very similar to above, but instead of for gender, it checks for shiny within starter preferences. + * If they're not there, it checks the caughtAttr for shiny only (i.e. SHINY === true && NON_SHINY === false) + */ + if (this.starterPreferences[speciesId]?.shiny || ((caughtAttr & DexAttr.SHINY) > 0n && (caughtAttr & DexAttr.NON_SHINY) === 0n)) { props += DexAttr.SHINY; if (this.starterPreferences[speciesId]?.variant) { props += BigInt(Math.pow(2, this.starterPreferences[speciesId]?.variant)) * DexAttr.DEFAULT_VARIANT; } else { - props += DexAttr.DEFAULT_VARIANT; + /* This calculates the correct variant if there's no starter preferences for it. + * This gets the lowest tier variant that you've caught (in line with other mechanics) and adds it to the temp props + */ + if ((caughtAttr & DexAttr.DEFAULT_VARIANT) > 0) { + props += DexAttr.DEFAULT_VARIANT; + } + if ((caughtAttr & DexAttr.VARIANT_2) > 0) { + props += DexAttr.VARIANT_2; + } else if ((caughtAttr & DexAttr.VARIANT_3) > 0) { + props += DexAttr.VARIANT_3; + } } } else { props += DexAttr.NON_SHINY; - if (this.starterPreferences[speciesId]?.variant) { - delete this.starterPreferences[speciesId].variant; - } props += DexAttr.DEFAULT_VARIANT; // we add the default variant here because non shiny versions are listed as default variant } if (this.starterPreferences[speciesId]?.form) { // this checks for the form of the pokemon props += BigInt(Math.pow(2, this.starterPreferences[speciesId]?.form)) * DexAttr.DEFAULT_FORM; } else { - props += DexAttr.DEFAULT_FORM; + // Get the first unlocked form + props += this.scene.gameData.getFormAttr(this.scene.gameData.getFormIndex(caughtAttr)); } return props; From 8bf44a20472652ce1a828f4e940fb607d053dfca Mon Sep 17 00:00:00 2001 From: Frederico Santos Date: Thu, 29 Aug 2024 23:59:19 +0100 Subject: [PATCH 14/18] Fix error handling and revert mode in AdminUiHandler --- src/ui/admin-ui-handler.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ui/admin-ui-handler.ts b/src/ui/admin-ui-handler.ts index 371604c00a2..049e5b01cdf 100644 --- a/src/ui/admin-ui-handler.ts +++ b/src/ui/admin-ui-handler.ts @@ -64,12 +64,13 @@ export default class AdminUiHandler extends FormModalUiHandler { Utils.apiPost("admin/account/discord-link", `username=${encodeURIComponent(this.inputs[0].text)}&discordId=${encodeURIComponent(this.inputs[1].text)}`, "application/x-www-form-urlencoded", true) .then(response => { if (!response.ok) { - return response.text(); + console.error(response); } - return response.json(); + this.scene.ui.revertMode(); }) - .then(response => { - this.scene.ui.setMode(Mode.ADMIN, config); + .catch((err) => { + console.error(err); + this.scene.ui.revertMode(); }); return false; }; From 3b9b0c4091bf2e291f045255b650e8cccb9c8539 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Thu, 29 Aug 2024 19:05:09 -0400 Subject: [PATCH 15/18] Blitzy's implementation of evil teams in trainer-config.ts (#3884) --- src/data/trainer-config.ts | 4074 ++++++++++++++++++------------------ 1 file changed, 2037 insertions(+), 2037 deletions(-) diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index d48e384d30e..a6cf4247f27 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -1,2037 +1,2037 @@ -import BattleScene, {startingWave} from "../battle-scene"; -import {ModifierTypeFunc, modifierTypes} from "../modifier/modifier-type"; -import {EnemyPokemon} from "../field/pokemon"; -import * as Utils from "../utils"; -import {PokeballType} from "./pokeball"; -import {pokemonEvolutions, pokemonPrevolutions} from "./pokemon-evolutions"; -import PokemonSpecies, {getPokemonSpecies, PokemonSpeciesFilter} from "./pokemon-species"; -import {tmSpecies} from "./tms"; -import {Type} from "./type"; -import {doubleBattleDialogue} from "./dialogue"; -import {PersistentModifier} from "../modifier/modifier"; -import {TrainerVariant} from "../field/trainer"; -import {getIsInitialized, initI18n} from "#app/plugins/i18n"; -import i18next from "i18next"; -import {Moves} from "#enums/moves"; -import {PartyMemberStrength} from "#enums/party-member-strength"; -import {Species} from "#enums/species"; -import {TrainerType} from "#enums/trainer-type"; -import {Gender} from "./gender"; - -export enum TrainerPoolTier { - COMMON, - UNCOMMON, - RARE, - SUPER_RARE, - ULTRA_RARE -} - -export interface TrainerTierPools { - [key: integer]: Species[] -} - -export enum TrainerSlot { - NONE, - TRAINER, - TRAINER_PARTNER -} - -export class TrainerPartyTemplate { - public size: integer; - public strength: PartyMemberStrength; - public sameSpecies: boolean; - public balanced: boolean; - - constructor(size: integer, strength: PartyMemberStrength, sameSpecies?: boolean, balanced?: boolean) { - this.size = size; - this.strength = strength; - this.sameSpecies = !!sameSpecies; - this.balanced = !!balanced; - } - - getStrength(index: integer): PartyMemberStrength { - return this.strength; - } - - isSameSpecies(index: integer): boolean { - return this.sameSpecies; - } - - isBalanced(index: integer): boolean { - return this.balanced; - } -} - -export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate { - public templates: TrainerPartyTemplate[]; - - constructor(...templates: TrainerPartyTemplate[]) { - super(templates.reduce((total: integer, template: TrainerPartyTemplate) => { - total += template.size; - return total; - }, 0), PartyMemberStrength.AVERAGE); - this.templates = templates; - } - - getStrength(index: integer): PartyMemberStrength { - let t = 0; - for (const template of this.templates) { - if (t + template.size > index) { - return template.getStrength(index - t); - } - t += template.size; - } - - return super.getStrength(index); - } - - isSameSpecies(index: integer): boolean { - let t = 0; - for (const template of this.templates) { - if (t + template.size > index) { - return template.isSameSpecies(index - t); - } - t += template.size; - } - - return super.isSameSpecies(index); - } - - isBalanced(index: integer): boolean { - let t = 0; - for (const template of this.templates) { - if (t + template.size > index) { - return template.isBalanced(index - t); - } - t += template.size; - } - - return super.isBalanced(index); - } -} - -export const trainerPartyTemplates = { - ONE_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.WEAK), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - ONE_AVG: new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - ONE_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - ONE_STRONG: new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ONE_STRONGER: new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - TWO_WEAKER: new TrainerPartyTemplate(2, PartyMemberStrength.WEAKER), - TWO_WEAK: new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), - TWO_WEAK_ONE_AVG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), - TWO_WEAK_SAME_ONE_AVG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), - TWO_WEAK_SAME_TWO_WEAK_SAME: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true)), - TWO_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - TWO_AVG: new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), - TWO_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - TWO_AVG_SAME_ONE_AVG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), - TWO_AVG_SAME_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - TWO_AVG_SAME_TWO_AVG_SAME: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true)), - TWO_STRONG: new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), - THREE_WEAK: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK), - THREE_WEAK_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, true), - THREE_AVG: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), - THREE_AVG_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, true), - THREE_WEAK_BALANCED: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, false, true), - FOUR_WEAKER: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER), - FOUR_WEAKER_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER, true), - FOUR_WEAK: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK), - FOUR_WEAK_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, true), - FOUR_WEAK_BALANCED: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, false, true), - FIVE_WEAKER: new TrainerPartyTemplate(5, PartyMemberStrength.WEAKER), - FIVE_WEAK: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK), - FIVE_WEAK_BALANCED: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK, false, true), - SIX_WEAKER: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER), - SIX_WEAKER_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER, true), - SIX_WEAK_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, true), - SIX_WEAK_BALANCED: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, false, true), - - GYM_LEADER_1: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - GYM_LEADER_2: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), - GYM_LEADER_3: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), - GYM_LEADER_4: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), - GYM_LEADER_5: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), - - ELITE_FOUR: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), - - CHAMPION: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), new TrainerPartyTemplate(5, PartyMemberStrength.STRONG, false, true)), - - RIVAL: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), - RIVAL_2: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true)), - RIVAL_3: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true)), - RIVAL_4: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true)), - RIVAL_5: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), - RIVAL_6: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)) -}; - -type PartyTemplateFunc = (scene: BattleScene) => TrainerPartyTemplate; -type PartyMemberFunc = (scene: BattleScene, level: integer, strength: PartyMemberStrength) => EnemyPokemon; -type GenModifiersFunc = (party: EnemyPokemon[]) => PersistentModifier[]; - -export interface PartyMemberFuncs { - [key: integer]: PartyMemberFunc -} - -export class TrainerConfig { - public trainerType: TrainerType; - public trainerTypeDouble: TrainerType; - public name: string; - public nameFemale: string; - public nameDouble: string; - public title: string; - public titleDouble: string; - public hasGenders: boolean = false; - public hasDouble: boolean = false; - public hasCharSprite: boolean = false; - public doubleOnly: boolean = false; - public moneyMultiplier: number = 1; - public isBoss: boolean = false; - public hasStaticParty: boolean = false; - public useSameSeedForAllMembers: boolean = false; - public mixedBattleBgm: string; - public battleBgm: string; - public encounterBgm: string; - public femaleEncounterBgm: string; - public doubleEncounterBgm: string; - public victoryBgm: string; - public genModifiersFunc: GenModifiersFunc; - public modifierRewardFuncs: ModifierTypeFunc[] = []; - public partyTemplates: TrainerPartyTemplate[]; - public partyTemplateFunc: PartyTemplateFunc; - public partyMemberFuncs: PartyMemberFuncs = {}; - public speciesPools: TrainerTierPools; - public speciesFilter: PokemonSpeciesFilter; - public specialtyTypes: Type[] = []; - public hasVoucher: boolean = false; - - public encounterMessages: string[] = []; - public victoryMessages: string[] = []; - public defeatMessages: string[] = []; - - public femaleEncounterMessages: string[]; - public femaleVictoryMessages: string[]; - public femaleDefeatMessages: string[]; - - public doubleEncounterMessages: string[]; - public doubleVictoryMessages: string[]; - public doubleDefeatMessages: string[]; - - constructor(trainerType: TrainerType, allowLegendaries?: boolean) { - this.trainerType = trainerType; - this.name = Utils.toReadableString(TrainerType[this.getDerivedType()]); - this.battleBgm = "battle_trainer"; - this.mixedBattleBgm = "battle_trainer"; - this.victoryBgm = "victory_trainer"; - this.partyTemplates = [trainerPartyTemplates.TWO_AVG]; - this.speciesFilter = species => (allowLegendaries || (!species.legendary && !species.subLegendary && !species.mythical)) && !species.isTrainerForbidden(); - } - - getKey(): string { - return TrainerType[this.getDerivedType()].toString().toLowerCase(); - } - - getSpriteKey(female?: boolean, isDouble: boolean = false): string { - let ret = this.getKey(); - if (this.hasGenders) { - ret += `_${female ? "f" : "m"}`; - } - // If a special double trainer class was set, set it as the sprite key - if (this.trainerTypeDouble && female && isDouble) { - // Get the derived type for the double trainer since the sprite key is based on the derived type - ret = TrainerType[this.getDerivedType(this.trainerTypeDouble)].toString().toLowerCase(); - } - return ret; - } - - setName(name: string): TrainerConfig { - if (name === "Finn") { - // Give the rival a localized name - // First check if i18n is initialized - if (!getIsInitialized()) { - initI18n(); - } - // This is only the male name, because the female name is handled in a different function (setHasGenders) - if (name === "Finn") { - name = i18next.t("trainerNames:rival"); - } - } - this.name = name; - return this; - } - - /** - * Sets if a boss trainer will have a voucher or not. - * @param hasVoucher - If the boss trainer will have a voucher. - */ - setHasVoucher(hasVoucher: boolean): void { - this.hasVoucher = hasVoucher; - } - - setTitle(title: string): TrainerConfig { - // First check if i18n is initialized - if (!getIsInitialized()) { - initI18n(); - } - - // Make the title lowercase and replace spaces with underscores - title = title.toLowerCase().replace(/\s/g, "_"); - - // Get the title from the i18n file - this.title = i18next.t(`titles:${title}`); - - - return this; - } - - - /** - * Returns the derived trainer type for a given trainer type. - * @param trainerTypeToDeriveFrom - The trainer type to derive from. (If null, the this.trainerType property will be used.) - * @returns {TrainerType} - The derived trainer type. - */ - getDerivedType(trainerTypeToDeriveFrom: TrainerType | null = null): TrainerType { - let trainerType = trainerTypeToDeriveFrom ? trainerTypeToDeriveFrom : this.trainerType; - switch (trainerType) { - case TrainerType.RIVAL_2: - case TrainerType.RIVAL_3: - case TrainerType.RIVAL_4: - case TrainerType.RIVAL_5: - case TrainerType.RIVAL_6: - trainerType = TrainerType.RIVAL; - break; - case TrainerType.LANCE_CHAMPION: - trainerType = TrainerType.LANCE; - break; - case TrainerType.LARRY_ELITE: - trainerType = TrainerType.LARRY; - break; - case TrainerType.ROCKET_BOSS_GIOVANNI_1: - case TrainerType.ROCKET_BOSS_GIOVANNI_2: - trainerType = TrainerType.GIOVANNI; - break; - case TrainerType.MAXIE_2: - trainerType = TrainerType.MAXIE; - break; - case TrainerType.ARCHIE_2: - trainerType = TrainerType.ARCHIE; - break; - case TrainerType.CYRUS_2: - trainerType = TrainerType.CYRUS; - break; - case TrainerType.GHETSIS_2: - trainerType = TrainerType.GHETSIS; - break; - case TrainerType.LYSANDRE_2: - trainerType = TrainerType.LYSANDRE; - break; - case TrainerType.LUSAMINE_2: - trainerType = TrainerType.LUSAMINE; - break; - case TrainerType.GUZMA_2: - trainerType = TrainerType.GUZMA; - break; - case TrainerType.ROSE_2: - trainerType = TrainerType.ROSE; - break; - case TrainerType.MARNIE_ELITE: - trainerType = TrainerType.MARNIE; - break; - case TrainerType.NESSA_ELITE: - trainerType = TrainerType.NESSA; - break; - case TrainerType.BEA_ELITE: - trainerType = TrainerType.BEA; - break; - case TrainerType.ALLISTER_ELITE: - trainerType = TrainerType.ALLISTER; - break; - case TrainerType.RAIHAN_ELITE: - trainerType = TrainerType.RAIHAN; - break; - } - - return trainerType; - } - - /** - * Sets the configuration for trainers with genders, including the female name and encounter background music (BGM). - * @param {string} [nameFemale] - The name of the female trainer. If 'Ivy', a localized name will be assigned. - * @param {TrainerType | string} [femaleEncounterBgm] - The encounter BGM for the female trainer, which can be a TrainerType or a string. - * @returns {TrainerConfig} - The updated TrainerConfig instance. - **/ - setHasGenders(nameFemale?: string, femaleEncounterBgm?: TrainerType | string): TrainerConfig { - // If the female name is 'Ivy' (the rival), assign a localized name. - if (nameFemale === "Ivy") { - // Check if the internationalization (i18n) system is initialized. - if (!getIsInitialized()) { - // Initialize the i18n system if it is not already initialized. - initI18n(); - } - // Set the localized name for the female rival. - this.nameFemale = i18next.t("trainerNames:rival_female"); - } else { - // Otherwise, assign the provided female name. - this.nameFemale = nameFemale!; // TODO: is this bang correct? - } - - // Indicate that this trainer configuration includes genders. - this.hasGenders = true; - - // If a female encounter BGM is provided. - if (femaleEncounterBgm) { - // If the BGM is a TrainerType (number), convert it to a string, replace underscores with spaces, and convert to lowercase. - // Otherwise, assign the provided string as the BGM. - this.femaleEncounterBgm = typeof femaleEncounterBgm === "number" - ? TrainerType[femaleEncounterBgm].toString().replace(/_/g, " ").toLowerCase() - : femaleEncounterBgm; - } - - // Return the updated TrainerConfig instance. - return this; - } - - /** - * Sets the configuration for trainers with double battles, including the name of the double trainer and the encounter BGM. - * @param nameDouble - The name of the double trainer (e.g., "Ace Duo" for Trainer Class Doubles or "red_blue_double" for NAMED trainer doubles). - * @param doubleEncounterBgm - The encounter BGM for the double trainer, which can be a TrainerType or a string. - * @returns {TrainerConfig} - The updated TrainerConfig instance. - */ - setHasDouble(nameDouble: string, doubleEncounterBgm?: TrainerType | string): TrainerConfig { - this.hasDouble = true; - this.nameDouble = nameDouble; - if (doubleEncounterBgm) { - this.doubleEncounterBgm = typeof doubleEncounterBgm === "number" ? TrainerType[doubleEncounterBgm].toString().replace(/\_/g, " ").toLowerCase() : doubleEncounterBgm; - } - return this; - } - - /** - * Sets the trainer type for double battles. - * @param trainerTypeDouble - The TrainerType of the partner in a double battle. - * @returns {TrainerConfig} - The updated TrainerConfig instance. - */ - setDoubleTrainerType(trainerTypeDouble: TrainerType): TrainerConfig { - this.trainerTypeDouble = trainerTypeDouble; - this.setDoubleMessages(this.nameDouble); - return this; - } - - /** - * Sets the encounter and victory messages for double trainers. - * @param nameDouble - The name of the pair (e.g. "red_blue_double"). - */ - setDoubleMessages(nameDouble: string) { - // Check if there is double battle dialogue for this trainer - if (doubleBattleDialogue[nameDouble]) { - // Set encounter and victory messages for double trainers - this.doubleEncounterMessages = doubleBattleDialogue[nameDouble].encounter; - this.doubleVictoryMessages = doubleBattleDialogue[nameDouble].victory; - this.doubleDefeatMessages = doubleBattleDialogue[nameDouble].defeat; - } - } - - /** - * Sets the title for double trainers - * @param titleDouble - the key for the title in the i18n file. (e.g., "champion_double"). - * @returns {TrainerConfig} - The updated TrainerConfig instance. - */ - setDoubleTitle(titleDouble: string): TrainerConfig { - // First check if i18n is initialized - if (!getIsInitialized()) { - initI18n(); - } - - // Make the title lowercase and replace spaces with underscores - titleDouble = titleDouble.toLowerCase().replace(/\s/g, "_"); - - // Get the title from the i18n file - this.titleDouble = i18next.t(`titles:${titleDouble}`); - - return this; - } - - setHasCharSprite(): TrainerConfig { - this.hasCharSprite = true; - return this; - } - - setDoubleOnly(): TrainerConfig { - this.doubleOnly = true; - return this; - } - - setMoneyMultiplier(moneyMultiplier: number): TrainerConfig { - this.moneyMultiplier = moneyMultiplier; - return this; - } - - setBoss(): TrainerConfig { - this.isBoss = true; - return this; - } - - setStaticParty(): TrainerConfig { - this.hasStaticParty = true; - return this; - } - - setUseSameSeedForAllMembers(): TrainerConfig { - this.useSameSeedForAllMembers = true; - return this; - } - - setMixedBattleBgm(mixedBattleBgm: string): TrainerConfig { - this.mixedBattleBgm = mixedBattleBgm; - return this; - } - - setBattleBgm(battleBgm: string): TrainerConfig { - this.battleBgm = battleBgm; - return this; - } - - setEncounterBgm(encounterBgm: TrainerType | string): TrainerConfig { - this.encounterBgm = typeof encounterBgm === "number" ? TrainerType[encounterBgm].toString().toLowerCase() : encounterBgm; - return this; - } - - setVictoryBgm(victoryBgm: string): TrainerConfig { - this.victoryBgm = victoryBgm; - return this; - } - - setPartyTemplates(...partyTemplates: TrainerPartyTemplate[]): TrainerConfig { - this.partyTemplates = partyTemplates; - return this; - } - - setPartyTemplateFunc(partyTemplateFunc: PartyTemplateFunc): TrainerConfig { - this.partyTemplateFunc = partyTemplateFunc; - return this; - } - - setPartyMemberFunc(slotIndex: integer, partyMemberFunc: PartyMemberFunc): TrainerConfig { - this.partyMemberFuncs[slotIndex] = partyMemberFunc; - return this; - } - - setSpeciesPools(speciesPools: TrainerTierPools | Species[]): TrainerConfig { - this.speciesPools = (Array.isArray(speciesPools) ? {[TrainerPoolTier.COMMON]: speciesPools} : speciesPools) as unknown as TrainerTierPools; - return this; - } - - setSpeciesFilter(speciesFilter: PokemonSpeciesFilter, allowLegendaries?: boolean): TrainerConfig { - const baseFilter = this.speciesFilter; - this.speciesFilter = allowLegendaries ? speciesFilter : species => speciesFilter(species) && baseFilter(species); - return this; - } - - setSpecialtyTypes(...specialtyTypes: Type[]): TrainerConfig { - this.specialtyTypes = specialtyTypes; - return this; - } - - setGenModifiersFunc(genModifiersFunc: GenModifiersFunc): TrainerConfig { - this.genModifiersFunc = genModifiersFunc; - return this; - } - - setModifierRewardFuncs(...modifierTypeFuncs: (() => ModifierTypeFunc)[]): TrainerConfig { - this.modifierRewardFuncs = modifierTypeFuncs.map(func => () => { - const modifierTypeFunc = func(); - const modifierType = modifierTypeFunc(); - modifierType.withIdFromFunc(modifierTypeFunc); - return modifierType; - }); - return this; - } - - /** - * Returns the pool of species for an evil team admin - * @param team - The evil team the admin belongs to. - * @returns {TrainerTierPools} - */ - speciesPoolPerEvilTeamAdmin(team): TrainerTierPools { - team = team.toLowerCase(); - switch (team) { - case "rocket": { - return { - [TrainerPoolTier.COMMON]: [Species.RATTATA, Species.KOFFING, Species.EKANS, Species.GYARADOS, Species.TAUROS, Species.SCYTHER, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB], - [TrainerPoolTier.UNCOMMON]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE], - [TrainerPoolTier.RARE]: [Species.DRATINI, Species.LARVITAR] - }; - } - case "magma": { - return { - [TrainerPoolTier.COMMON]: [Species.NUMEL, Species.POOCHYENA, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR], - [TrainerPoolTier.UNCOMMON]: [Species.TRAPINCH, Species.HEATMOR], - [TrainerPoolTier.RARE]: [Species.CAPSAKID, Species.CHARCADET] - }; - } - case "aqua": { - return { - [TrainerPoolTier.COMMON]: [Species.CARVANHA, Species.CORPHISH, Species.ZIGZAGOON, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.QWILFISH], - [TrainerPoolTier.UNCOMMON]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA], - [TrainerPoolTier.RARE]: [Species.DONDOZO] - }; - } - case "galactic": { - return { - [TrainerPoolTier.COMMON]: [Species.GLAMEOW, Species.STUNKY, Species.BRONZOR, Species.CARNIVINE, Species.GROWLITHE, Species.QWILFISH, Species.SNEASEL], - [TrainerPoolTier.UNCOMMON]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL], - [TrainerPoolTier.RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO] - }; - } - case "plasma": { - return { - [TrainerPoolTier.COMMON]: [Species.SCRAFTY, Species.LILLIPUP, Species.PURRLOIN, Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.AMOONGUSS], - [TrainerPoolTier.UNCOMMON]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK], - [TrainerPoolTier.RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, Species.AXEW, Species.DEINO, Species.DURANT] - }; - } - case "flare": { - return { - [TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.GULPIN, Species.PURRLOIN, Species.POOCHYENA, Species.SCATTERBUG], - [TrainerPoolTier.UNCOMMON]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD], - [TrainerPoolTier.RARE]: [Species.NOIVERN, Species.DRUDDIGON] - }; - } - case "aether": { - return { - [TrainerPoolTier.COMMON]: [ Species.BRUXISH, Species.SLOWPOKE, Species.BALTOY, Species.EXEGGCUTE, Species.ABRA, Species.ALOLA_RAICHU, Species.ELGYEM, Species.NATU], - [TrainerPoolTier.UNCOMMON]: [Species.GALAR_SLOWKING, Species.MEDITITE, Species.BELDUM, Species.ORANGURU, Species.HATTERENE, Species.INKAY, Species.RALTS], - [TrainerPoolTier.RARE]: [Species.ARMAROUGE, Species.GIRAFARIG, Species.PORYGON] - }; - } - case "skull": { - return { - [TrainerPoolTier.COMMON]: [ Species.MAREANIE, Species.ALOLA_GRIMER, Species.GASTLY, Species.ZUBAT, Species.LURANTIS, Species.VENIPEDE, Species.BUDEW, Species.KOFFING], - [TrainerPoolTier.UNCOMMON]: [Species.GALAR_SLOWBRO, Species.SKORUPI, Species.PALDEA_WOOPER, Species.NIDORAN_F, Species.CROAGUNK, Species.MANDIBUZZ], - [TrainerPoolTier.RARE]: [Species.DRAGALGE, Species.HISUI_SNEASEL] - }; - } - case "macro": { - return { - [TrainerPoolTier.COMMON]: [ Species.HATTERENE, Species.MILOTIC, Species.TSAREENA, Species.SALANDIT, Species.GALAR_PONYTA, Species.GOTHITA, Species.FROSLASS], - [TrainerPoolTier.UNCOMMON]: [Species.MANDIBUZZ, Species.MAREANIE, Species.ALOLA_VULPIX, Species.TOGEPI, Species.GALAR_CORSOLA, Species.SINISTEA, Species.APPLIN], - [TrainerPoolTier.RARE]: [Species.TINKATINK, Species.HISUI_LILLIGANT] - }; - } - } - - console.warn(`Evil team admin for ${team} not found. Returning empty species pools.`); - return []; - } - - /** - * Initializes the trainer configuration for an evil team admin. - * @param title - The title of the evil team admin. - * @param poolName - The evil team the admin belongs to. - * @param {Species | Species[]} signatureSpecies - The signature species for the evil team leader. - * @returns {TrainerConfig} - The updated TrainerConfig instance. - * **/ - initForEvilTeamAdmin(title: string, poolName: string, signatureSpecies: (Species | Species[])[],): TrainerConfig { - if (!getIsInitialized()) { - initI18n(); - } - this.setPartyTemplates(trainerPartyTemplates.RIVAL_5); - - // Set the species pools for the evil team admin. - this.speciesPools = this.speciesPoolPerEvilTeamAdmin(poolName); - - signatureSpecies.forEach((speciesPool, s) => { - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); - }); - - const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); - this.name = i18next.t(`trainerNames:${nameForCall}`); - this.setHasVoucher(false); - this.setTitle(title); - this.setMoneyMultiplier(1.5); - this.setBoss(); - this.setStaticParty(); - this.setBattleBgm("battle_plasma_boss"); - this.setVictoryBgm("victory_team_plasma"); - - return this; - } - - /** - * Initializes the trainer configuration for an evil team leader. Temporarily hardcoding evil leader teams though. - * @param {Species | Species[]} signatureSpecies - The signature species for the evil team leader. - * @param {Type[]} specialtyTypes - The specialty types for the evil team Leader. - * @param boolean whether or not this is the rematch fight - * @returns {TrainerConfig} - The updated TrainerConfig instance. - * **/ - initForEvilTeamLeader(title: string, signatureSpecies: (Species | Species[])[], rematch: boolean = false, ...specialtyTypes: Type[]): TrainerConfig { - if (!getIsInitialized()) { - initI18n(); - } - if (rematch) { - this.setPartyTemplates(trainerPartyTemplates.ELITE_FOUR); - } else { - this.setPartyTemplates(trainerPartyTemplates.RIVAL_5); - } - signatureSpecies.forEach((speciesPool, s) => { - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); - }); - if (specialtyTypes.length) { - this.setSpeciesFilter(p => specialtyTypes.find(t => p.isOfType(t)) !== undefined); - this.setSpecialtyTypes(...specialtyTypes); - } - const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); - this.name = i18next.t(`trainerNames:${nameForCall}`); - this.setTitle(title); - this.setMoneyMultiplier(2.5); - this.setBoss(); - this.setStaticParty(); - this.setHasVoucher(true); - this.setBattleBgm("battle_plasma_boss"); - this.setVictoryBgm("victory_team_plasma"); - - return this; - } - - /** - * Initializes the trainer configuration for a Gym Leader. - * @param {Species | Species[]} signatureSpecies - The signature species for the Gym Leader. - * @param {Type[]} specialtyTypes - The specialty types for the Gym Leader. - * @param isMale - Whether the Gym Leader is Male or Not (for localization of the title). - * @returns {TrainerConfig} - The updated TrainerConfig instance. - * **/ - initForGymLeader(signatureSpecies: (Species | Species[])[], isMale: boolean, ...specialtyTypes: Type[]): TrainerConfig { - // Check if the internationalization (i18n) system is initialized. - if (!getIsInitialized()) { - initI18n(); - } - - // Set the function to generate the Gym Leader's party template. - this.setPartyTemplateFunc(getGymLeaderPartyTemplate); - - // Set up party members with their corresponding species. - signatureSpecies.forEach((speciesPool, s) => { - // Ensure speciesPool is an array. - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } - // Set a function to get a random party member from the species pool. - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); - }); - - // If specialty types are provided, set species filter and specialty types. - if (specialtyTypes.length) { - this.setSpeciesFilter(p => specialtyTypes.find(t => p.isOfType(t)) !== undefined); - this.setSpecialtyTypes(...specialtyTypes); - } - - // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. - const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); - this.name = i18next.t(`trainerNames:${nameForCall}`); - - // Set the title to "gym_leader". (this is the key in the i18n file) - this.setTitle("gym_leader"); - if (!isMale) { - this.setTitle("gym_leader_female"); - } - - // Configure various properties for the Gym Leader. - this.setMoneyMultiplier(2.5); - this.setBoss(); - this.setStaticParty(); - this.setHasVoucher(true); - this.setBattleBgm("battle_unova_gym"); - this.setVictoryBgm("victory_gym"); - this.setGenModifiersFunc(party => { - const waveIndex = party[0].scene.currentBattle.waveIndex; - return getRandomTeraModifiers(party, waveIndex >= 100 ? 1 : 0, specialtyTypes.length ? specialtyTypes : undefined); - }); - - return this; - } - - /** - * Initializes the trainer configuration for an Elite Four member. - * @param {Species | Species[]} signatureSpecies - The signature species for the Elite Four member. - * @param {Type[]} specialtyTypes - The specialty types for the Elite Four member. - * @param isMale - Whether the Elite Four Member is Male or Female (for localization of the title). - * @returns {TrainerConfig} - The updated TrainerConfig instance. - **/ - initForEliteFour(signatureSpecies: (Species | Species[])[], isMale: boolean, ...specialtyTypes: Type[]): TrainerConfig { - // Check if the internationalization (i18n) system is initialized. - if (!getIsInitialized()) { - initI18n(); - } - - // Set the party templates for the Elite Four. - this.setPartyTemplates(trainerPartyTemplates.ELITE_FOUR); - - // Set up party members with their corresponding species. - signatureSpecies.forEach((speciesPool, s) => { - // Ensure speciesPool is an array. - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } - // Set a function to get a random party member from the species pool. - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); - }); - - // Set species filter and specialty types if provided, otherwise filter by base total. - if (specialtyTypes.length) { - this.setSpeciesFilter(p => specialtyTypes.some(t => p.isOfType(t)) && p.baseTotal >= 450); - this.setSpecialtyTypes(...specialtyTypes); - } else { - this.setSpeciesFilter(p => p.baseTotal >= 450); - } - - // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. - const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); - this.name = i18next.t(`trainerNames:${nameForCall}`); - - // Set the title to "elite_four". (this is the key in the i18n file) - this.setTitle("elite_four"); - if (!isMale) { - this.setTitle("elite_four_female"); - } - - // Configure various properties for the Elite Four member. - this.setMoneyMultiplier(3.25); - this.setBoss(); - this.setStaticParty(); - this.setHasVoucher(true); - this.setBattleBgm("battle_unova_elite"); - this.setVictoryBgm("victory_gym"); - this.setGenModifiersFunc(party => getRandomTeraModifiers(party, 2, specialtyTypes.length ? specialtyTypes : undefined)); - - return this; - } - - /** - * Initializes the trainer configuration for a Champion. - * @param {Species | Species[]} signatureSpecies - The signature species for the Champion. - * @param isMale - Whether the Champion is Male or Female (for localization of the title). - * @returns {TrainerConfig} - The updated TrainerConfig instance. - **/ - initForChampion(signatureSpecies: (Species | Species[])[], isMale: boolean): TrainerConfig { - // Check if the internationalization (i18n) system is initialized. - if (!getIsInitialized()) { - initI18n(); - } - - // Set the party templates for the Champion. - this.setPartyTemplates(trainerPartyTemplates.CHAMPION); - - // Set up party members with their corresponding species. - signatureSpecies.forEach((speciesPool, s) => { - // Ensure speciesPool is an array. - if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; - } - // Set a function to get a random party member from the species pool. - this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); - }); - - // Set species filter to only include species with a base total of 470 or higher. - this.setSpeciesFilter(p => p.baseTotal >= 470); - - // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. - const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); - this.name = i18next.t(`trainerNames:${nameForCall}`); - - // Set the title to "champion". (this is the key in the i18n file) - this.setTitle("champion"); - if (!isMale) { - this.setTitle("champion_female"); - } - - - // Configure various properties for the Champion. - this.setMoneyMultiplier(10); - this.setBoss(); - this.setStaticParty(); - this.setHasVoucher(true); - this.setBattleBgm("battle_champion_alder"); - this.setVictoryBgm("victory_champion"); - this.setGenModifiersFunc(party => getRandomTeraModifiers(party, 3)); - - return this; - } - - /** - * Retrieves the title for the trainer based on the provided trainer slot and variant. - * @param {TrainerSlot} trainerSlot - The slot to determine which title to use. Defaults to TrainerSlot.NONE. - * @param {TrainerVariant} variant - The variant of the trainer to determine the specific title. - * @returns {string} - The title of the trainer. - **/ - getTitle(trainerSlot: TrainerSlot = TrainerSlot.NONE, variant: TrainerVariant): string { - const ret = this.name; - - // Check if the variant is double and the name for double exists - if (!trainerSlot && variant === TrainerVariant.DOUBLE && this.nameDouble) { - return this.nameDouble; - } - - // Female variant - if (this.hasGenders) { - // If the name is already set - if (this.nameFemale) { - // Check if the variant is either female or this is for the partner in a double battle - if (variant === TrainerVariant.FEMALE || (variant === TrainerVariant.DOUBLE && trainerSlot === TrainerSlot.TRAINER_PARTNER)) { - return this.nameFemale; - } - } else - // Check if !variant is true, if so return the name, else return the name with _female appended - if (variant) { - if (!getIsInitialized()) { - initI18n(); - } - // Check if the female version exists in the i18n file - if (i18next.exists(`trainerClasses:${this.name.toLowerCase()}`)) { - // If it does, return - return ret + "_female"; - } else { - // If it doesn't, we do not do anything and go to the normal return - // This is to prevent the game from displaying an error if a female version of the trainer does not exist in the localization - } - } - } - - return ret; - } - - loadAssets(scene: BattleScene, variant: TrainerVariant): Promise { - return new Promise(resolve => { - const isDouble = variant === TrainerVariant.DOUBLE; - const trainerKey = this.getSpriteKey(variant === TrainerVariant.FEMALE, false); - const partnerTrainerKey = this.getSpriteKey(true, true); - scene.loadAtlas(trainerKey, "trainer"); - if (isDouble) { - scene.loadAtlas(partnerTrainerKey, "trainer"); - } - scene.load.once(Phaser.Loader.Events.COMPLETE, () => { - const originalWarn = console.warn; - // Ignore warnings for missing frames, because there will be a lot - console.warn = () => { - }; - const frameNames = scene.anims.generateFrameNames(trainerKey, { - zeroPad: 4, - suffix: ".png", - start: 1, - end: 128 - }); - const partnerFrameNames = isDouble - ? scene.anims.generateFrameNames(partnerTrainerKey, { - zeroPad: 4, - suffix: ".png", - start: 1, - end: 128 - }) - : ""; - console.warn = originalWarn; - if (!(scene.anims.exists(trainerKey))) { - scene.anims.create({ - key: trainerKey, - frames: frameNames, - frameRate: 24, - repeat: -1 - }); - } - if (isDouble && !(scene.anims.exists(partnerTrainerKey))) { - scene.anims.create({ - key: partnerTrainerKey, - frames: partnerFrameNames, - frameRate: 24, - repeat: -1 - }); - } - resolve(); - }); - if (!scene.load.isLoading()) { - scene.load.start(); - } - }); - } -} - -let t = 0; - -interface TrainerConfigs { - [key: integer]: TrainerConfig -} - -/** - * The function to get variable strength grunts - * @param scene the singleton scene being passed in - * @returns the correct TrainerPartyTemplate - */ -function getEvilGruntPartyTemplate(scene: BattleScene): TrainerPartyTemplate { - const waveIndex = scene.currentBattle?.waveIndex; - if (waveIndex < 40) { - return trainerPartyTemplates.TWO_AVG; - } else if (waveIndex < 63) { - return trainerPartyTemplates.THREE_AVG; - } else if (waveIndex < 65) { - return trainerPartyTemplates.TWO_AVG_ONE_STRONG; - } else if (waveIndex < 112) { - return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger - } else { - return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger - } -} - -function getWavePartyTemplate(scene: BattleScene, ...templates: TrainerPartyTemplate[]) { - return templates[Math.min(Math.max(Math.ceil((scene.gameMode.getWaveForDifficulty(scene.currentBattle?.waveIndex || startingWave, true) - 20) / 30), 0), templates.length - 1)]; -} - -function getGymLeaderPartyTemplate(scene: BattleScene) { - return getWavePartyTemplate(scene, trainerPartyTemplates.GYM_LEADER_1, trainerPartyTemplates.GYM_LEADER_2, trainerPartyTemplates.GYM_LEADER_3, trainerPartyTemplates.GYM_LEADER_4, trainerPartyTemplates.GYM_LEADER_5); -} - -function getRandomPartyMemberFunc(speciesPool: Species[], trainerSlot: TrainerSlot = TrainerSlot.TRAINER, ignoreEvolution: boolean = false, postProcess?: (enemyPokemon: EnemyPokemon) => void): PartyMemberFunc { - return (scene: BattleScene, level: integer, strength: PartyMemberStrength) => { - let species = Utils.randSeedItem(speciesPool); - if (!ignoreEvolution) { - species = getPokemonSpecies(species).getTrainerSpeciesForLevel(level, true, strength, scene.currentBattle.waveIndex); - } - return scene.addEnemyPokemon(getPokemonSpecies(species), level, trainerSlot, undefined, undefined, postProcess); - }; -} - -function getSpeciesFilterRandomPartyMemberFunc(speciesFilter: PokemonSpeciesFilter, trainerSlot: TrainerSlot = TrainerSlot.TRAINER, allowLegendaries?: boolean, postProcess?: (EnemyPokemon: EnemyPokemon) => void): PartyMemberFunc { - const originalSpeciesFilter = speciesFilter; - speciesFilter = (species: PokemonSpecies) => (allowLegendaries || (!species.legendary && !species.subLegendary && !species.mythical)) && !species.isTrainerForbidden() && originalSpeciesFilter(species); - return (scene: BattleScene, level: integer, strength: PartyMemberStrength) => { - const ret = scene.addEnemyPokemon(getPokemonSpecies(scene.randomSpecies(scene.currentBattle.waveIndex, level, false, speciesFilter).getTrainerSpeciesForLevel(level, true, strength, scene.currentBattle.waveIndex)), level, trainerSlot, undefined, undefined, postProcess); - return ret; - }; -} - -function getRandomTeraModifiers(party: EnemyPokemon[], count: integer, types?: Type[]): PersistentModifier[] { - const ret: PersistentModifier[] = []; - const partyMemberIndexes = new Array(party.length).fill(null).map((_, i) => i); - for (let t = 0; t < Math.min(count, party.length); t++) { - const randomIndex = Utils.randSeedItem(partyMemberIndexes); - partyMemberIndexes.splice(partyMemberIndexes.indexOf(randomIndex), 1); - ret.push(modifierTypes.TERA_SHARD().generateType([], [Utils.randSeedItem(types ? types : party[randomIndex].getTypes())])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(party[randomIndex]) as PersistentModifier); // TODO: is the bang correct? - } - return ret; -} - -type SignatureSpecies = { - [key in string]: (Species | Species[])[]; -}; - -/* - * The signature species for each Gym Leader, Elite Four member, and Champion. - * The key is the trainer type, and the value is an array of Species or Species arrays. - * This is in a separate const so it can be accessed from other places and not just the trainerConfigs - */ -export const signatureSpecies: SignatureSpecies = { - BROCK: [Species.GEODUDE, Species.ONIX], - MISTY: [Species.STARYU, Species.PSYDUCK], - LT_SURGE: [Species.VOLTORB, Species.PIKACHU, Species.ELECTABUZZ], - ERIKA: [Species.ODDISH, Species.BELLSPROUT, Species.TANGELA, Species.HOPPIP], - JANINE: [Species.VENONAT, Species.SPINARAK, Species.ZUBAT], - SABRINA: [Species.ABRA, Species.MR_MIME, Species.ESPEON], - BLAINE: [Species.GROWLITHE, Species.PONYTA, Species.MAGMAR], - GIOVANNI: [Species.SANDILE, Species.MURKROW, Species.NIDORAN_M, Species.NIDORAN_F], - FALKNER: [Species.PIDGEY, Species.HOOTHOOT, Species.DODUO], - BUGSY: [Species.SCYTHER, Species.HERACROSS, Species.SHUCKLE, Species.PINSIR], - WHITNEY: [Species.GIRAFARIG, Species.MILTANK], - MORTY: [Species.GASTLY, Species.MISDREAVUS, Species.SABLEYE], - CHUCK: [Species.POLIWRATH, Species.MANKEY], - JASMINE: [Species.MAGNEMITE, Species.STEELIX], - PRYCE: [Species.SEEL, Species.SWINUB], - CLAIR: [Species.DRATINI, Species.HORSEA, Species.GYARADOS], - ROXANNE: [Species.GEODUDE, Species.NOSEPASS], - BRAWLY: [Species.MACHOP, Species.MAKUHITA], - WATTSON: [Species.MAGNEMITE, Species.VOLTORB, Species.ELECTRIKE], - FLANNERY: [Species.SLUGMA, Species.TORKOAL, Species.NUMEL], - NORMAN: [Species.SLAKOTH, Species.SPINDA, Species.CHANSEY, Species.KANGASKHAN], - WINONA: [Species.SWABLU, Species.WINGULL, Species.TROPIUS, Species.SKARMORY], - TATE: [Species.SOLROCK, Species.NATU, Species.CHIMECHO, Species.GALLADE], - LIZA: [Species.LUNATONE, Species.SPOINK, Species.BALTOY, Species.GARDEVOIR], - JUAN: [Species.HORSEA, Species.BARBOACH, Species.SPHEAL, Species.RELICANTH], - ROARK: [Species.CRANIDOS, Species.LARVITAR, Species.GEODUDE], - GARDENIA: [Species.ROSELIA, Species.TANGELA, Species.TURTWIG], - MAYLENE: [Species.LUCARIO, Species.MEDITITE, Species.CHIMCHAR], - CRASHER_WAKE: [Species.BUIZEL, Species.MAGIKARP, Species.PIPLUP], - FANTINA: [Species.MISDREAVUS, Species.DRIFLOON, Species.SPIRITOMB], - BYRON: [Species.SHIELDON, Species.BRONZOR, Species.AGGRON], - CANDICE: [Species.SNEASEL, Species.SNOVER, Species.SNORUNT], - VOLKNER: [Species.SHINX, Species.CHINCHOU, Species.ROTOM], - CILAN: [Species.PANSAGE, Species.COTTONEE, Species.PETILIL], - CHILI: [Species.PANSEAR, Species.DARUMAKA, Species.HEATMOR], - CRESS: [Species.PANPOUR, Species.BASCULIN, Species.TYMPOLE], - CHEREN: [Species.LILLIPUP, Species.MINCCINO, Species.PATRAT], - LENORA: [Species.KANGASKHAN, Species.DEERLING, Species.AUDINO], - ROXIE: [Species.VENIPEDE, Species.TRUBBISH, Species.SKORUPI], - BURGH: [Species.SEWADDLE, Species.SHELMET, Species.KARRABLAST], - ELESA: [Species.EMOLGA, Species.BLITZLE, Species.JOLTIK], - CLAY: [Species.DRILBUR, Species.SANDILE, Species.GOLETT], - SKYLA: [Species.DUCKLETT, Species.WOOBAT, Species.RUFFLET], - BRYCEN: [Species.CRYOGONAL, Species.VANILLITE, Species.CUBCHOO], - DRAYDEN: [Species.DRUDDIGON, Species.AXEW, Species.DEINO], - MARLON: [Species.WAILMER, Species.FRILLISH, Species.TIRTOUGA], - VIOLA: [Species.SURSKIT, Species.SCATTERBUG], - GRANT: [Species.AMAURA, Species.TYRUNT], - KORRINA: [Species.HAWLUCHA, Species.LUCARIO, Species.MIENFOO], - RAMOS: [Species.SKIDDO, Species.HOPPIP, Species.BELLSPROUT], - CLEMONT: [Species.HELIOPTILE, Species.MAGNEMITE, Species.EMOLGA], - VALERIE: [Species.SYLVEON, Species.MAWILE, Species.MR_MIME], - OLYMPIA: [Species.ESPURR, Species.SIGILYPH, Species.SLOWKING], - WULFRIC: [Species.BERGMITE, Species.SNOVER, Species.CRYOGONAL], - MILO: [Species.GOSSIFLEUR, Species.APPLIN, Species.BOUNSWEET], - NESSA: [Species.CHEWTLE, Species.ARROKUDA, Species.WIMPOD], - KABU: [Species.SIZZLIPEDE, Species.VULPIX, Species.TORKOAL], - BEA: [Species.GALAR_FARFETCHD, Species.MACHOP, Species.CLOBBOPUS], - ALLISTER: [Species.GALAR_YAMASK, Species.GALAR_CORSOLA, Species.GASTLY], - OPAL: [Species.MILCERY, Species.TOGETIC, Species.GALAR_WEEZING], - BEDE: [Species.HATENNA, Species.GALAR_PONYTA, Species.GARDEVOIR], - GORDIE: [Species.ROLYCOLY, Species.STONJOURNER, Species.BINACLE], - MELONY: [Species.SNOM, Species.GALAR_DARUMAKA, Species.GALAR_MR_MIME], - PIERS: [Species.GALAR_ZIGZAGOON, Species.SCRAGGY, Species.INKAY], - MARNIE: [Species.IMPIDIMP, Species.PURRLOIN, Species.MORPEKO], - RAIHAN: [Species.DURALUDON, Species.TURTONATOR, Species.GOOMY], - KATY: [Species.NYMBLE, Species.TAROUNTULA, Species.HERACROSS], - BRASSIUS: [Species.SMOLIV, Species.SHROOMISH, Species.ODDISH], - IONO: [Species.TADBULB, Species.WATTREL, Species.VOLTORB], - KOFU: [Species.VELUZA, Species.WIGLETT, Species.WINGULL], - LARRY: [Species.STARLY, Species.DUNSPARCE, Species.KOMALA], - RYME: [Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU], - TULIP: [Species.GIRAFARIG, Species.FLITTLE, Species.RALTS], - GRUSHA: [Species.CETODDLE, Species.ALOLA_VULPIX, Species.CUBCHOO], - LORELEI: [Species.JYNX, [Species.SLOWBRO, Species.GALAR_SLOWBRO], Species.LAPRAS, [Species.ALOLA_SANDSLASH, Species.CLOYSTER]], - BRUNO: [Species.MACHAMP, Species.HITMONCHAN, Species.HITMONLEE, [Species.ALOLA_GOLEM, Species.GOLEM]], - AGATHA: [Species.GENGAR, [Species.ARBOK, Species.WEEZING], Species.CROBAT, Species.ALOLA_MAROWAK], - LANCE: [Species.DRAGONITE, Species.GYARADOS, Species.AERODACTYL, Species.ALOLA_EXEGGUTOR], - WILL: [Species.XATU, Species.JYNX, [Species.SLOWBRO, Species.SLOWKING], Species.EXEGGUTOR], - KOGA: [[Species.WEEZING, Species.MUK], [Species.VENOMOTH, Species.ARIADOS], Species.CROBAT, Species.TENTACRUEL], - KAREN: [Species.UMBREON, Species.HONCHKROW, Species.HOUNDOOM, Species.WEAVILE], - SIDNEY: [[Species.SHIFTRY, Species.CACTURNE], [Species.SHARPEDO, Species.CRAWDAUNT], Species.ABSOL, Species.MIGHTYENA], - PHOEBE: [Species.SABLEYE, Species.DUSKNOIR, Species.BANETTE, [Species.MISMAGIUS, Species.DRIFBLIM]], - GLACIA: [Species.GLALIE, Species.WALREIN, Species.FROSLASS, Species.ABOMASNOW], - DRAKE: [Species.ALTARIA, Species.SALAMENCE, Species.FLYGON, Species.KINGDRA], - AARON: [[Species.SCIZOR, Species.KLEAVOR], Species.HERACROSS, [Species.VESPIQUEN, Species.YANMEGA], Species.DRAPION], - BERTHA: [Species.WHISCASH, Species.HIPPOWDON, Species.GLISCOR, Species.RHYPERIOR], - FLINT: [[Species.FLAREON, Species.RAPIDASH], Species.MAGMORTAR, [Species.STEELIX, Species.LOPUNNY], Species.INFERNAPE], - LUCIAN: [Species.MR_MIME, Species.GALLADE, Species.BRONZONG, [Species.ALAKAZAM, Species.ESPEON]], - SHAUNTAL: [Species.COFAGRIGUS, Species.CHANDELURE, Species.GOLURK, Species.JELLICENT], - MARSHAL: [Species.CONKELDURR, Species.MIENSHAO, Species.THROH, Species.SAWK], - GRIMSLEY: [Species.LIEPARD, Species.KINGAMBIT, Species.SCRAFTY, Species.KROOKODILE], - CAITLIN: [Species.MUSHARNA, Species.GOTHITELLE, Species.SIGILYPH, Species.REUNICLUS], - MALVA: [Species.PYROAR, Species.TORKOAL, Species.CHANDELURE, Species.TALONFLAME], - SIEBOLD: [Species.CLAWITZER, Species.GYARADOS, Species.BARBARACLE, Species.STARMIE], - WIKSTROM: [Species.KLEFKI, Species.PROBOPASS, Species.SCIZOR, Species.AEGISLASH], - DRASNA: [Species.DRAGALGE, Species.DRUDDIGON, Species.ALTARIA, Species.NOIVERN], - HALA: [Species.HARIYAMA, Species.BEWEAR, Species.CRABOMINABLE, [Species.POLIWRATH, Species.ANNIHILAPE]], - MOLAYNE: [Species.KLEFKI, Species.MAGNEZONE, Species.METAGROSS, Species.ALOLA_DUGTRIO], - OLIVIA: [Species.RELICANTH, Species.CARBINK, Species.ALOLA_GOLEM, Species.LYCANROC], - ACEROLA: [[Species.BANETTE, Species.DRIFBLIM], Species.MIMIKYU, Species.DHELMISE, Species.PALOSSAND], - KAHILI: [[Species.BRAVIARY, Species.MANDIBUZZ], Species.HAWLUCHA, Species.ORICORIO, Species.TOUCANNON], - MARNIE_ELITE: [Species.MORPEKO, Species.LIEPARD, [Species.TOXICROAK, Species.SCRAFTY], Species.GRIMMSNARL], - NESSA_ELITE: [Species.GOLISOPOD, [Species.PELIPPER, Species.QUAGSIRE], Species.TOXAPEX, Species.DREDNAW], - BEA_ELITE: [Species.HAWLUCHA, [Species.GRAPPLOCT, Species.SIRFETCHD], Species.FALINKS, Species.MACHAMP], - ALLISTER_ELITE: [Species.DUSKNOIR, [Species.POLTEAGEIST, Species.RUNERIGUS], Species.CURSOLA, Species.GENGAR], - RAIHAN_ELITE: [Species.GOODRA, [Species.TORKOAL, Species.TURTONATOR], Species.FLYGON, Species.ARCHALUDON], - RIKA: [Species.WHISCASH, [Species.DONPHAN, Species.DUGTRIO], Species.CAMERUPT, Species.CLODSIRE], - POPPY: [Species.COPPERAJAH, Species.BRONZONG, Species.CORVIKNIGHT, Species.TINKATON], - LARRY_ELITE: [Species.STARAPTOR, Species.FLAMIGO, Species.ALTARIA, Species.TROPIUS], - HASSEL: [Species.NOIVERN, [Species.FLAPPLE, Species.APPLETUN], Species.DRAGALGE, Species.BAXCALIBUR], - CRISPIN: [Species.TALONFLAME, Species.CAMERUPT, Species.MAGMORTAR, Species.BLAZIKEN], - AMARYS: [Species.SKARMORY, Species.EMPOLEON, Species.SCIZOR, Species.METAGROSS], - LACEY: [Species.EXCADRILL, Species.PRIMARINA, [Species.ALCREMIE, Species.GRANBULL], Species.WHIMSICOTT], - DRAYTON: [Species.DRAGONITE, Species.ARCHALUDON, Species.HAXORUS, Species.SCEPTILE], - BLUE: [[Species.GYARADOS, Species.EXEGGUTOR, Species.ARCANINE], Species.HO_OH, [Species.RHYPERIOR, Species.MAGNEZONE]], // Alakazam lead, Mega Pidgeot - RED: [Species.LUGIA, Species.SNORLAX, [Species.ESPEON, Species.UMBREON, Species.SYLVEON]], // GMax Pikachu lead, Mega gen 1 starter - LANCE_CHAMPION: [Species.DRAGONITE, Species.KINGDRA, Species.ALOLA_EXEGGUTOR], // Aerodactyl lead, Mega Latias/Latios - STEVEN: [Species.AGGRON, [Species.ARMALDO, Species.CRADILY], Species.DIALGA], // Skarmory lead, Mega Metagross - WALLACE: [Species.MILOTIC, Species.PALKIA, Species.LUDICOLO], // Pelipper lead, Mega Swampert - CYNTHIA: [Species.GIRATINA, Species.LUCARIO, Species.TOGEKISS], // Spiritomb lead, Mega Garchomp - ALDER: [Species.VOLCARONA, Species.ZEKROM, [Species.ACCELGOR, Species.ESCAVALIER], Species.KELDEO], // Bouffalant/Braviary lead - IRIS: [Species.HAXORUS, Species.RESHIRAM, Species.ARCHEOPS], // Druddigon lead, Gmax Lapras - DIANTHA: [Species.HAWLUCHA, Species.XERNEAS, Species.GOODRA], // Gourgeist lead, Mega Gardevoir - HAU: [[Species.SOLGALEO, Species.LUNALA], Species.NOIVERN, [Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA], [Species.TAPU_BULU, Species.TAPU_FINI, Species.TAPU_KOKO, Species.TAPU_LELE]], // Alola Raichu lead - LEON: [Species.DRAGAPULT, [Species.ZACIAN, Species.ZAMAZENTA], Species.AEGISLASH], // Rillaboom/Cinderace/Inteleon lead, GMax Charizard - GEETA: [Species.MIRAIDON, [Species.ESPATHRA, Species.VELUZA], [Species.AVALUGG, Species.HISUI_AVALUGG], Species.KINGAMBIT], // Glimmora lead - NEMONA: [Species.KORAIDON, Species.PAWMOT, [Species.DUDUNSPARCE, Species.ORTHWORM], [Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL]], // Lycanroc lead - KIERAN: [[Species.GRIMMSNARL, Species.INCINEROAR, Species.PORYGON_Z], Species.OGERPON, Species.TERAPAGOS, Species.HYDRAPPLE], // Poliwrath/Politoed lead -}; - -export const trainerConfigs: TrainerConfigs = { - [TrainerType.UNKNOWN]: new TrainerConfig(0).setHasGenders(), - [TrainerType.ACE_TRAINER]: new TrainerConfig(++t).setHasGenders("Ace Trainer Female").setHasDouble("Ace Duo").setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.ACE_TRAINER) - .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.THREE_WEAK_BALANCED, trainerPartyTemplates.FOUR_WEAK_BALANCED, trainerPartyTemplates.FIVE_WEAK_BALANCED, trainerPartyTemplates.SIX_WEAK_BALANCED)), - [TrainerType.ARTIST]: new TrainerConfig(++t).setEncounterBgm(TrainerType.RICH).setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.THREE_AVG) - .setSpeciesPools([Species.SMEARGLE]), - [TrainerType.BACKERS]: new TrainerConfig(++t).setHasGenders("Backers").setDoubleOnly().setEncounterBgm(TrainerType.CYCLIST), - [TrainerType.BACKPACKER]: new TrainerConfig(++t).setHasGenders("Backpacker Female").setHasDouble("Backpackers").setSpeciesFilter(s => s.isOfType(Type.FLYING) || s.isOfType(Type.ROCK)).setEncounterBgm(TrainerType.BACKPACKER) - .setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.ONE_WEAK_ONE_STRONG, trainerPartyTemplates.ONE_AVG_ONE_STRONG) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.RHYHORN, Species.AIPOM, Species.MAKUHITA, Species.MAWILE, Species.NUMEL, Species.LILLIPUP, Species.SANDILE, Species.WOOLOO], - [TrainerPoolTier.UNCOMMON]: [Species.GIRAFARIG, Species.ZANGOOSE, Species.SEVIPER, Species.CUBCHOO, Species.PANCHAM, Species.SKIDDO, Species.MUDBRAY], - [TrainerPoolTier.RARE]: [Species.TAUROS, Species.STANTLER, Species.DARUMAKA, Species.BOUFFALANT, Species.DEERLING, Species.IMPIDIMP], - [TrainerPoolTier.SUPER_RARE]: [Species.GALAR_DARUMAKA, Species.TEDDIURSA] - }), - [TrainerType.BAKER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setMoneyMultiplier(1.35).setSpeciesFilter(s => s.isOfType(Type.GRASS) || s.isOfType(Type.FIRE)), - [TrainerType.BEAUTY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY), - [TrainerType.BIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.POISON)), - [TrainerType.BLACK_BELT]: new TrainerConfig(++t).setHasGenders("Battle Girl", TrainerType.PSYCHIC).setHasDouble("Crush Kin").setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyTypes(Type.FIGHTING) - .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_STRONG, trainerPartyTemplates.THREE_AVG, trainerPartyTemplates.TWO_AVG_ONE_STRONG) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.NIDORAN_F, Species.NIDORAN_M, Species.MACHOP, Species.MAKUHITA, Species.MEDITITE, Species.CROAGUNK, Species.TIMBURR], - [TrainerPoolTier.UNCOMMON]: [Species.MANKEY, Species.POLIWRATH, Species.TYROGUE, Species.BRELOOM, Species.SCRAGGY, Species.MIENFOO, Species.PANCHAM, Species.STUFFUL, Species.CRABRAWLER], - [TrainerPoolTier.RARE]: [Species.HERACROSS, Species.RIOLU, Species.THROH, Species.SAWK, Species.PASSIMIAN, Species.CLOBBOPUS], - [TrainerPoolTier.SUPER_RARE]: [Species.HITMONTOP, Species.INFERNAPE, Species.GALLADE, Species.HAWLUCHA, Species.HAKAMO_O], - [TrainerPoolTier.ULTRA_RARE]: [Species.KUBFU] - }), - [TrainerType.BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(1.325).setEncounterBgm(TrainerType.POKEFAN).setHasGenders("Breeder Female").setHasDouble("Breeders") - .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.FIVE_WEAKER, trainerPartyTemplates.SIX_WEAKER)) - .setSpeciesFilter(s => s.baseTotal < 450), - [TrainerType.CLERK]: new TrainerConfig(++t).setHasGenders("Clerk Female").setHasDouble("Colleagues").setEncounterBgm(TrainerType.CLERK) - .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.MEOWTH, Species.PSYDUCK, Species.BUDEW, Species.PIDOVE, Species.CINCCINO, Species.LITLEO], - [TrainerPoolTier.UNCOMMON]: [Species.JIGGLYPUFF, Species.MAGNEMITE, Species.MARILL, Species.COTTONEE, Species.SKIDDO], - [TrainerPoolTier.RARE]: [Species.BUIZEL, Species.SNEASEL, Species.KLEFKI, Species.INDEEDEE] - }), - [TrainerType.CYCLIST]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setHasGenders("Cyclist Female").setHasDouble("Cyclists").setEncounterBgm(TrainerType.CYCLIST) - .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.PICHU, Species.STARLY, Species.TAILLOW, Species.BOLTUND], - [TrainerPoolTier.UNCOMMON]: [Species.DODUO, Species.ELECTRIKE, Species.BLITZLE, Species.WATTREL], - [TrainerPoolTier.RARE]: [Species.YANMA, Species.NINJASK, Species.WHIRLIPEDE, Species.EMOLGA], - [TrainerPoolTier.SUPER_RARE]: [Species.ACCELGOR, Species.DREEPY] - }), - [TrainerType.DANCER]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.CYCLIST) - .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_TWO_WEAK_SAME) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.RALTS, Species.SPOINK, Species.LOTAD, Species.BUDEW], - [TrainerPoolTier.UNCOMMON]: [Species.SPINDA, Species.SWABLU, Species.MARACTUS,], - [TrainerPoolTier.RARE]: [Species.BELLOSSOM, Species.HITMONTOP, Species.MIME_JR, Species.ORICORIO], - [TrainerPoolTier.SUPER_RARE]: [Species.POPPLIO] - }), - [TrainerType.DEPOT_AGENT]: new TrainerConfig(++t).setMoneyMultiplier(1.45).setEncounterBgm(TrainerType.CLERK), - [TrainerType.DOCTOR]: new TrainerConfig(++t).setHasGenders("Nurse", "lass").setHasDouble("Medical Team").setMoneyMultiplier(3).setEncounterBgm(TrainerType.CLERK) - .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.HEAL_PULSE)), - [TrainerType.FIREBREATHER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK) - .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SMOG) || s.isOfType(Type.FIRE)), - [TrainerType.FISHERMAN]: new TrainerConfig(++t).setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.BACKPACKER).setSpecialtyTypes(Type.WATER) - .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.THREE_WEAK_SAME, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.SIX_WEAKER) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.TENTACOOL, Species.MAGIKARP, Species.GOLDEEN, Species.STARYU, Species.REMORAID, Species.SKRELP, Species.CLAUNCHER, Species.ARROKUDA], - [TrainerPoolTier.UNCOMMON]: [Species.POLIWAG, Species.SHELLDER, Species.KRABBY, Species.HORSEA, Species.CARVANHA, Species.BARBOACH, Species.CORPHISH, Species.FINNEON, Species.TYMPOLE, Species.BASCULIN, Species.FRILLISH, Species.INKAY], - [TrainerPoolTier.RARE]: [Species.CHINCHOU, Species.CORSOLA, Species.WAILMER, Species.BARBOACH, Species.CLAMPERL, Species.LUVDISC, Species.MANTYKE, Species.ALOMOMOLA, Species.TATSUGIRI, Species.VELUZA], - [TrainerPoolTier.SUPER_RARE]: [Species.LAPRAS, Species.FEEBAS, Species.RELICANTH, Species.DONDOZO] - }), - [TrainerType.GUITARIST]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyTypes(Type.ELECTRIC).setSpeciesFilter(s => s.isOfType(Type.ELECTRIC)), - [TrainerType.HARLEQUIN]: new TrainerConfig(++t).setEncounterBgm(TrainerType.PSYCHIC).setSpeciesFilter(s => tmSpecies[Moves.TRICK_ROOM].indexOf(s.speciesId) > -1), - [TrainerType.HIKER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.BACKPACKER) - .setPartyTemplates(trainerPartyTemplates.TWO_AVG_SAME_ONE_AVG, trainerPartyTemplates.TWO_AVG_SAME_ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.FOUR_WEAK, trainerPartyTemplates.ONE_STRONG) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.SANDSHREW, Species.DIGLETT, Species.GEODUDE, Species.MACHOP, Species.ARON, Species.ROGGENROLA, Species.DRILBUR, Species.NACLI], - [TrainerPoolTier.UNCOMMON]: [Species.ZUBAT, Species.RHYHORN, Species.ONIX, Species.CUBONE, Species.WOOBAT, Species.SWINUB, Species.NOSEPASS, Species.HIPPOPOTAS, Species.DWEBBLE, Species.KLAWF, Species.TOEDSCOOL], - [TrainerPoolTier.RARE]: [Species.TORKOAL, Species.TRAPINCH, Species.BARBOACH, Species.GOLETT, Species.ALOLA_DIGLETT, Species.ALOLA_GEODUDE, Species.GALAR_STUNFISK, Species.PALDEA_WOOPER], - [TrainerPoolTier.SUPER_RARE]: [Species.MAGBY, Species.LARVITAR] - }), - [TrainerType.HOOLIGANS]: new TrainerConfig(++t).setDoubleOnly().setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.POISON) || s.isOfType(Type.DARK)), - [TrainerType.HOOPSTER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), - [TrainerType.INFIELDER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), - [TrainerType.JANITOR]: new TrainerConfig(++t).setMoneyMultiplier(1.1).setEncounterBgm(TrainerType.CLERK), - [TrainerType.LINEBACKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), - [TrainerType.MAID]: new TrainerConfig(++t).setMoneyMultiplier(1.6).setEncounterBgm(TrainerType.RICH), - [TrainerType.MUSICIAN]: new TrainerConfig(++t).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SING)), - [TrainerType.HEX_MANIAC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PSYCHIC) - .setPartyTemplates(trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.ONE_AVG_ONE_STRONG, trainerPartyTemplates.TWO_AVG_SAME_ONE_AVG, trainerPartyTemplates.THREE_AVG, trainerPartyTemplates.TWO_STRONG) - .setSpeciesFilter(s => s.isOfType(Type.GHOST)), - [TrainerType.NURSERY_AIDE]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm("lass"), - [TrainerType.OFFICER]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.CLERK) - .setPartyTemplates(trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.VULPIX, Species.GROWLITHE, Species.SNUBBULL, Species.POOCHYENA, Species.ELECTRIKE, Species.LILLIPUP, Species.YAMPER, Species.FIDOUGH], - [TrainerPoolTier.UNCOMMON]: [Species.HOUNDOUR, Species.ROCKRUFF, Species.MASCHIFF], - [TrainerPoolTier.RARE]: [Species.JOLTEON, Species.RIOLU], - [TrainerPoolTier.SUPER_RARE]: [], - [TrainerPoolTier.ULTRA_RARE]: [Species.ENTEI, Species.SUICUNE, Species.RAIKOU] - }), - [TrainerType.PARASOL_LADY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY).setSpeciesFilter(s => s.isOfType(Type.WATER)), - [TrainerType.PILOT]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1), - [TrainerType.POKEFAN]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setName("PokéFan").setHasGenders("PokéFan Female").setHasDouble("PokéFan Family").setEncounterBgm(TrainerType.POKEFAN) - .setPartyTemplates(trainerPartyTemplates.SIX_WEAKER, trainerPartyTemplates.FOUR_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.FOUR_WEAK_SAME, trainerPartyTemplates.FIVE_WEAK, trainerPartyTemplates.SIX_WEAKER_SAME), - [TrainerType.PRESCHOOLER]: new TrainerConfig(++t).setMoneyMultiplier(0.2).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("Preschooler Female", "lass").setHasDouble("Preschoolers") - .setPartyTemplates(trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.FIVE_WEAKER) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.CATERPIE, Species.PICHU, Species.SANDSHREW, Species.LEDYBA, Species.BUDEW, Species.BURMY, Species.WOOLOO, Species.PAWMI, Species.SMOLIV], - [TrainerPoolTier.UNCOMMON]: [Species.EEVEE, Species.CLEFFA, Species.IGGLYBUFF, Species.SWINUB, Species.WOOPER, Species.DRIFLOON, Species.DEDENNE, Species.STUFFUL], - [TrainerPoolTier.RARE]: [Species.RALTS, Species.RIOLU, Species.JOLTIK, Species.TANDEMAUS], - [TrainerPoolTier.SUPER_RARE]: [Species.DARUMAKA, Species.TINKATINK], - }), - [TrainerType.PSYCHIC]: new TrainerConfig(++t).setHasGenders("Psychic Female").setHasDouble("Psychics").setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.PSYCHIC) - .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.TWO_WEAK_SAME_TWO_WEAK_SAME, trainerPartyTemplates.ONE_STRONGER) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.ABRA, Species.DROWZEE, Species.RALTS, Species.SPOINK, Species.GOTHITA, Species.SOLOSIS, Species.BLIPBUG, Species.ESPURR, Species.HATENNA], - [TrainerPoolTier.UNCOMMON]: [Species.MIME_JR, Species.EXEGGCUTE, Species.MEDITITE, Species.NATU, Species.EXEGGCUTE, Species.WOOBAT, Species.INKAY, Species.ORANGURU], - [TrainerPoolTier.RARE]: [Species.ELGYEM, Species.SIGILYPH, Species.BALTOY, Species.GIRAFARIG, Species.MEOWSTIC], - [TrainerPoolTier.SUPER_RARE]: [Species.BELDUM, Species.ESPEON, Species.STANTLER], - }), - [TrainerType.RANGER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setName("Pokémon Ranger").setEncounterBgm(TrainerType.BACKPACKER).setHasGenders("Pokémon Ranger Female").setHasDouble("Pokémon Rangers") - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.PICHU, Species.GROWLITHE, Species.PONYTA, Species.ZIGZAGOON, Species.SEEDOT, Species.BIDOOF, Species.RIOLU, Species.SEWADDLE, Species.SKIDDO, Species.SALANDIT, Species.YAMPER], - [TrainerPoolTier.UNCOMMON]: [Species.AZURILL, Species.TAUROS, Species.MAREEP, Species.FARFETCHD, Species.TEDDIURSA, Species.SHROOMISH, Species.ELECTRIKE, Species.BUDEW, Species.BUIZEL, Species.MUDBRAY, Species.STUFFUL], - [TrainerPoolTier.RARE]: [Species.EEVEE, Species.SCYTHER, Species.KANGASKHAN, Species.RALTS, Species.MUNCHLAX, Species.ZORUA, Species.PALDEA_TAUROS, Species.TINKATINK, Species.CYCLIZAR, Species.FLAMIGO], - [TrainerPoolTier.SUPER_RARE]: [Species.LARVESTA], - }), - [TrainerType.RICH]: new TrainerConfig(++t).setMoneyMultiplier(5).setName("Gentleman").setHasGenders("Madame").setHasDouble("Rich Couple"), - [TrainerType.RICH_KID]: new TrainerConfig(++t).setMoneyMultiplier(3.75).setName("Rich Boy").setHasGenders("Lady").setHasDouble("Rich Kids").setEncounterBgm(TrainerType.RICH), - [TrainerType.ROUGHNECK]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.DARK)), - [TrainerType.SAILOR]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.BACKPACKER).setSpeciesFilter(s => s.isOfType(Type.WATER) || s.isOfType(Type.FIGHTING)), - [TrainerType.SCIENTIST]: new TrainerConfig(++t).setHasGenders("Scientist Female").setHasDouble("Scientists").setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.SCIENTIST) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.MAGNEMITE, Species.GRIMER, Species.DROWZEE, Species.VOLTORB, Species.KOFFING], - [TrainerPoolTier.UNCOMMON]: [Species.BALTOY, Species.BRONZOR, Species.FERROSEED, Species.KLINK, Species.CHARJABUG, Species.BLIPBUG, Species.HELIOPTILE], - [TrainerPoolTier.RARE]: [Species.ABRA, Species.DITTO, Species.PORYGON, Species.ELEKID, Species.SOLOSIS, Species.GALAR_WEEZING], - [TrainerPoolTier.SUPER_RARE]: [Species.OMANYTE, Species.KABUTO, Species.AERODACTYL, Species.LILEEP, Species.ANORITH, Species.CRANIDOS, Species.SHIELDON, Species.TIRTOUGA, Species.ARCHEN, Species.ARCTOVISH, Species.ARCTOZOLT, Species.DRACOVISH, Species.DRACOZOLT], - [TrainerPoolTier.ULTRA_RARE]: [Species.ROTOM, Species.MELTAN] - }), - [TrainerType.SMASHER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), - [TrainerType.SNOW_WORKER]: new TrainerConfig(++t).setName("Worker").setHasGenders("Worker Female").setHasDouble("Workers").setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => s.isOfType(Type.ICE) || s.isOfType(Type.STEEL)), - [TrainerType.STRIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), - [TrainerType.SCHOOL_KID]: new TrainerConfig(++t).setMoneyMultiplier(0.75).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("School Kid Female", "lass").setHasDouble("School Kids") - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.ODDISH, Species.EXEGGCUTE, Species.TEDDIURSA, Species.WURMPLE, Species.RALTS, Species.SHROOMISH, Species.FLETCHLING], - [TrainerPoolTier.UNCOMMON]: [Species.VOLTORB, Species.WHISMUR, Species.MEDITITE, Species.MIME_JR, Species.NYMBLE], - [TrainerPoolTier.RARE]: [Species.TANGELA, Species.EEVEE, Species.YANMA], - [TrainerPoolTier.SUPER_RARE]: [Species.TADBULB] - }), - [TrainerType.SWIMMER]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm(TrainerType.PARASOL_LADY).setHasGenders("Swimmer Female").setHasDouble("Swimmers").setSpecialtyTypes(Type.WATER).setSpeciesFilter(s => s.isOfType(Type.WATER)), - [TrainerType.TWINS]: new TrainerConfig(++t).setDoubleOnly().setMoneyMultiplier(0.65).setUseSameSeedForAllMembers() - .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_STRONG)) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PLUSLE, Species.VOLBEAT, Species.PACHIRISU, Species.SILCOON, Species.METAPOD, Species.IGGLYBUFF, Species.PETILIL, Species.EEVEE])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.MINUN, Species.ILLUMISE, Species.EMOLGA, Species.CASCOON, Species.KAKUNA, Species.CLEFFA, Species.COTTONEE, Species.EEVEE], TrainerSlot.TRAINER_PARTNER)) - .setEncounterBgm(TrainerType.TWINS), - [TrainerType.VETERAN]: new TrainerConfig(++t).setHasGenders("Veteran Female").setHasDouble("Veteran Duo").setMoneyMultiplier(2.5).setEncounterBgm(TrainerType.ACE_TRAINER).setSpeciesFilter(s => s.isOfType(Type.DRAGON)), - [TrainerType.WAITER]: new TrainerConfig(++t).setHasGenders("Waitress").setHasDouble("Restaurant Staff").setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.CLERK) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.CLEFFA, Species.CHATOT, Species.PANSAGE, Species.PANSEAR, Species.PANPOUR, Species.MINCCINO], - [TrainerPoolTier.UNCOMMON]: [Species.TROPIUS, Species.PETILIL, Species.BOUNSWEET, Species.INDEEDEE], - [TrainerPoolTier.RARE]: [Species.APPLIN, Species.SINISTEA, Species.POLTCHAGEIST] - }), - [TrainerType.WORKER]: new TrainerConfig(++t).setHasGenders("Worker Female").setHasDouble("Workers").setEncounterBgm(TrainerType.CLERK).setMoneyMultiplier(1.7).setSpeciesFilter(s => s.isOfType(Type.ROCK) || s.isOfType(Type.STEEL)), - [TrainerType.YOUNGSTER]: new TrainerConfig(++t).setMoneyMultiplier(0.5).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("Lass", "lass").setHasDouble("Beginners").setPartyTemplates(trainerPartyTemplates.TWO_WEAKER) - .setSpeciesPools( - [Species.CATERPIE, Species.WEEDLE, Species.RATTATA, Species.SENTRET, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.BIDOOF, Species.PATRAT, Species.LILLIPUP] - ), - [TrainerType.ROCKET_GRUNT]: new TrainerConfig(++t).setHasGenders("Rocket Grunt Female").setHasDouble("Rocket Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.WEEDLE, Species.RATTATA, Species.EKANS, Species.SANDSHREW, Species.ZUBAT, Species.GEODUDE, Species.KOFFING, Species.GRIMER, Species.ODDISH], - [TrainerPoolTier.UNCOMMON]: [Species.GYARADOS, Species.TAUROS, Species.SCYTHER, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB], - [TrainerPoolTier.RARE]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE], - [TrainerPoolTier.SUPER_RARE]: [Species.DRATINI, Species.LARVITAR] - }), - [TrainerType.ARCHER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.HOUNDOOM]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.ARIANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin_female", "rocket", [Species.ARBOK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.PROTON]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.CROBAT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.PETREL]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.WEEZING]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.BALTOY, Species.BARBOACH], - [TrainerPoolTier.UNCOMMON]: [Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR], - [TrainerPoolTier.RARE]: [Species.TRAPINCH, Species.HEATMOR], - [TrainerPoolTier.SUPER_RARE]: [Species.CAPSAKID, Species.CHARCADET] - }), - [TrainerType.TABITHA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.COURTNEY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin_female", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders("Aqua Grunt Female").setHasDouble("Aqua Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL], - [TrainerPoolTier.UNCOMMON]: [Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.QWILFISH], - [TrainerPoolTier.RARE]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA], - [TrainerPoolTier.SUPER_RARE]: [Species.DONDOZO] - }), - [TrainerType.MATT]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin", "aqua", [Species.SHARPEDO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.SHELLY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin_female", "aqua", [Species.SHARPEDO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.GALACTIC_GRUNT]: new TrainerConfig(++t).setHasGenders("Galactic Grunt Female").setHasDouble("Galactic Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE, Species.BRONZOR, Species.DRIFLOON, Species.BURMY], - [TrainerPoolTier.UNCOMMON]: [Species.CARNIVINE, Species.GROWLITHE, Species.QWILFISH, Species.SNEASEL], - [TrainerPoolTier.RARE]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL], - [TrainerPoolTier.SUPER_RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO] - }), - [TrainerType.JUPITER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.SKUNTANK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.MARS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.PURUGLY]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.SATURN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander", "galactic", [Species.TOXICROAK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH], - [TrainerPoolTier.UNCOMMON]: [Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.AMOONGUSS], - [TrainerPoolTier.RARE]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK], - [TrainerPoolTier.SUPER_RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, Species.AXEW, Species.DEINO, Species.DURANT] - }), - [TrainerType.ZINZOLIN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.CRYOGONAL]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.ROOD]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.SWOOBAT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK], - [TrainerPoolTier.UNCOMMON]: [Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.GULPIN, Species.PURRLOIN, Species.POOCHYENA, Species.SCATTERBUG], - [TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD], - [TrainerPoolTier.SUPER_RARE]: [Species.NOIVERN, Species.DRUDDIGON] - }), - [TrainerType.BRYONY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin_female", "flare", [Species.LIEPARD]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.XEROSIC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin", "flare", [Species.MALAMAR]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.AETHER_GRUNT]: new TrainerConfig(++t).setHasGenders("Aether Grunt Female").setHasDouble("Aether Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.PIKIPEK, Species.ROCKRUFF, Species.ALOLA_DIGLETT, Species.YUNGOOS, Species.CORSOLA, Species.ALOLA_GEODUDE, Species.BOUNSWEET, Species.LILLIPUP, Species.ALOLA_MAROWAK], - [TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.STUFFUL, Species.ALOLA_EXEGGUTOR, Species.CRABRAWLER, Species.CUTIEFLY, Species.ALOLA_RAICHU, Species.ORICORIO, Species.MUDBRAY], - [TrainerPoolTier.RARE]: [ Species.ORANGURU, Species.PASSIMIAN, Species.GALAR_CORSOLA, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.TURTONATOR, Species.DRAMPA], - [TrainerPoolTier.SUPER_RARE]: [Species.JANGMO_O, Species.PORYGON] - }), - [TrainerType.FABA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aether_admin", "aether", [Species.HYPNO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.SKULL_GRUNT]: new TrainerConfig(++t).setHasGenders("Skull Grunt Female").setHasDouble("Skull Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.SALANDIT, Species.ALOLA_RATTATA, Species.ALOLA_MEOWTH, Species.SCRAGGY, Species.KOFFING, Species.ALOLA_GRIMER, Species.MAREANIE, Species.SPINARAK, Species.TRUBBISH], - [TrainerPoolTier.UNCOMMON]: [ Species.FOMANTIS, Species.SABLEYE, Species.SANDILE, Species.ALOLA_MAROWAK, Species.PANCHAM, Species.DROWZEE, Species.ZUBAT, Species.VENIPEDE, Species.VULLABY], - [TrainerPoolTier.RARE]: [Species.SANDYGAST, Species.PAWNIARD, Species.MIMIKYU, Species.DHELMISE, Species.GASTLY, Species.WISHIWASHI], - [TrainerPoolTier.SUPER_RARE]: [Species.GRUBBIN, Species.DEWPIDER] - }), - [TrainerType.PLUMERIA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("skull_admin", "skull", [Species.SALAZZLE]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.MACRO_GRUNT]: new TrainerConfig(++t).setHasGenders("Macro Grunt Female").setHasDouble("Macro Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_macro_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.CUFANT, Species.GALAR_MEOWTH, Species.KLINK, Species.ROOKIDEE, Species.CRAMORANT, Species.GALAR_ZIGZAGOON, Species.SKWOVET, Species.STEELIX, Species.MAWILE, Species.FERROSEED], - [TrainerPoolTier.UNCOMMON]: [ Species.DRILBUR, Species.MAGNEMITE, Species.HATENNA, Species.ARROKUDA, Species.APPLIN, Species.GALAR_PONYTA, Species.GALAR_YAMASK, Species.SINISTEA, Species.RIOLU], - [TrainerPoolTier.RARE]: [Species.FALINKS, Species.BELDUM, Species.GALAR_FARFETCHD, Species.GALAR_MR_MIME, Species.HONEDGE, Species.SCIZOR, Species.GALAR_DARUMAKA], - [TrainerPoolTier.SUPER_RARE]: [Species.DURALUDON, Species.DREEPY] - }), - [TrainerType.OLEANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("macro_admin", "macro", [Species.GARBODOR]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_oleana").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - - [TrainerType.BROCK]: new TrainerConfig((t = TrainerType.BROCK)).initForGymLeader(signatureSpecies["BROCK"], true, Type.ROCK).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.MISTY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MISTY"], false, Type.WATER).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.LT_SURGE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LT_SURGE"], true, Type.ELECTRIC).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.ERIKA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ERIKA"], false, Type.GRASS).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.JANINE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["JANINE"], false, Type.POISON).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.SABRINA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["SABRINA"], false, Type.PSYCHIC).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.BLAINE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BLAINE"], true, Type.FIRE).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.GIOVANNI]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GIOVANNI"], true, Type.DARK).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.FALKNER]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["FALKNER"], true, Type.FLYING).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.BUGSY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BUGSY"], true, Type.BUG).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.WHITNEY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WHITNEY"], false, Type.NORMAL).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.MORTY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MORTY"], true, Type.GHOST).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.CHUCK]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CHUCK"], true, Type.FIGHTING).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.JASMINE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["JASMINE"], false, Type.STEEL).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.PRYCE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["PRYCE"], true, Type.ICE).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.CLAIR]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CLAIR"], false, Type.DRAGON).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.ROXANNE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ROXANNE"], false, Type.ROCK).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.BRAWLY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRAWLY"], true, Type.FIGHTING).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.WATTSON]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WATTSON"], true, Type.ELECTRIC).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.FLANNERY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["FLANNERY"], false, Type.FIRE).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.NORMAN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["NORMAN"], true, Type.NORMAL).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.WINONA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WINONA"], false, Type.FLYING).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.TATE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["TATE"], true, Type.PSYCHIC).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym").setHasDouble("tate_liza_double").setDoubleTrainerType(TrainerType.LIZA).setDoubleTitle("gym_leader_double"), - [TrainerType.LIZA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LIZA"], false, Type.PSYCHIC).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym").setHasDouble("liza_tate_double").setDoubleTrainerType(TrainerType.TATE).setDoubleTitle("gym_leader_double"), - [TrainerType.JUAN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["JUAN"], true, Type.WATER).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), - [TrainerType.ROARK]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ROARK"], true, Type.ROCK).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.GARDENIA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GARDENIA"], false, Type.GRASS).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.MAYLENE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MAYLENE"], false, Type.FIGHTING).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.CRASHER_WAKE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CRASHER_WAKE"], true, Type.WATER).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.FANTINA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["FANTINA"], false, Type.GHOST).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.BYRON]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BYRON"], true, Type.STEEL).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.CANDICE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CANDICE"], false, Type.ICE).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.VOLKNER]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["VOLKNER"], true, Type.ELECTRIC).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.CILAN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CILAN"], true, Type.GRASS).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.CHILI]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CHILI"], true, Type.FIRE).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.CRESS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CRESS"], true, Type.WATER).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.CHEREN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CHEREN"], true, Type.NORMAL).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.LENORA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LENORA"], false, Type.NORMAL).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.ROXIE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ROXIE"], false, Type.POISON).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.BURGH]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BURGH"], true, Type.BUG).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.ELESA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ELESA"], false, Type.ELECTRIC).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.CLAY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CLAY"], true, Type.GROUND).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.SKYLA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["SKYLA"], false, Type.FLYING).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.BRYCEN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRYCEN"], true, Type.ICE).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.DRAYDEN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["DRAYDEN"], true, Type.DRAGON).setMixedBattleBgm("battle_unova_gym"), - [TrainerType.MARLON]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MARLON"], true, Type.WATER).setMixedBattleBgm("battle_unova_gym"), - [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).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.BRUNO]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BRUNO"], true, Type.FIGHTING).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.AGATHA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AGATHA"], false, Type.GHOST).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.LANCE]: new TrainerConfig(++t).setName("Lance").initForEliteFour(signatureSpecies["LANCE"], true, Type.DRAGON).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), - [TrainerType.WILL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["WILL"], true, Type.PSYCHIC).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.KOGA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KOGA"], true, Type.POISON).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), - [TrainerType.KAREN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KAREN"], false, Type.DARK).setBattleBgm("battle_johto_gym").setMixedBattleBgm("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").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.BERTHA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BERTHA"], false, Type.GROUND).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.FLINT]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["FLINT"], true, Type.FIRE).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.LUCIAN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["LUCIAN"], true, Type.PSYCHIC).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), - [TrainerType.SHAUNTAL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SHAUNTAL"], false, Type.GHOST).setMixedBattleBgm("battle_unova_elite"), - [TrainerType.MARSHAL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MARSHAL"], true, Type.FIGHTING).setMixedBattleBgm("battle_unova_elite"), - [TrainerType.GRIMSLEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["GRIMSLEY"], true, Type.DARK).setMixedBattleBgm("battle_unova_elite"), - [TrainerType.CAITLIN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["CAITLIN"], false, Type.PSYCHIC).setMixedBattleBgm("battle_unova_elite"), - [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").setMixedBattleBgm("battle_kanto_champion").setHasDouble("blue_red_double").setDoubleTrainerType(TrainerType.RED).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALAKAZAM], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.RED]: new TrainerConfig(++t).initForChampion(signatureSpecies["RED"], true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion").setHasDouble("red_blue_double").setDoubleTrainerType(TrainerType.BLUE).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PIKACHU], TrainerSlot.TRAINER, true, p => { - p.formIndex = 8; - p.generateAndPopulateMoveset(); - p.generateName(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.LANCE_CHAMPION]: new TrainerConfig(++t).setName("Lance").initForChampion(signatureSpecies["LANCE_CHAMPION"], true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.AERODACTYL], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LATIAS, Species.LATIOS], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.STEVEN]: new TrainerConfig(++t).initForChampion(signatureSpecies["STEVEN"], true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("steven_wallace_double").setDoubleTrainerType(TrainerType.WALLACE).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.WALLACE]: new TrainerConfig(++t).initForChampion(signatureSpecies["WALLACE"], true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("wallace_steven_double").setDoubleTrainerType(TrainerType.STEVEN).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { - p.abilityIndex = 1; // Drizzle - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.SWAMPERT], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - })), - [TrainerType.CYNTHIA]: new TrainerConfig(++t).initForChampion(signatureSpecies["CYNTHIA"], false).setBattleBgm("battle_sinnoh_champion").setMixedBattleBgm("battle_sinnoh_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SPIRITOMB], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GARCHOMP], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.ALDER]: new TrainerConfig(++t).initForChampion(signatureSpecies["ALDER"], true).setHasDouble("alder_iris_double").setDoubleTrainerType(TrainerType.IRIS).setDoubleTitle("champion_double").setBattleBgm("battle_champion_alder").setMixedBattleBgm("battle_champion_alder") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BOUFFALANT, Species.BRAVIARY], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })), - [TrainerType.IRIS]: new TrainerConfig(++t).initForChampion(signatureSpecies["IRIS"], false).setBattleBgm("battle_champion_iris").setMixedBattleBgm("battle_champion_iris").setHasDouble("iris_alder_double").setDoubleTrainerType(TrainerType.ALDER).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRUDDIGON], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [TrainerType.DIANTHA]: new TrainerConfig(++t).initForChampion(signatureSpecies["DIANTHA"], false).setMixedBattleBgm("battle_kalos_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GOURGEIST], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GARDEVOIR], TrainerSlot.TRAINER, true, p => { - p.formIndex = 1; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [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).setMixedBattleBgm("battle_galar_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.RILLABOOM, Species.CINDERACE, Species.INTELEON], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CHARIZARD], TrainerSlot.TRAINER, true, p => { - p.formIndex = 3; - p.generateAndPopulateMoveset(); - p.generateName(); - })), - [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).setMixedBattleBgm("battle_champion_nemona") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { - p.formIndex = 0; // Midday form - p.generateAndPopulateMoveset(); - })), - [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(); - })), - - [TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL) - .setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEY, Species.HOOTHOOT, Species.TAILLOW, Species.STARLY, Species.PIDOVE, Species.FLETCHLING, Species.PIKIPEK, Species.ROOKIDEE, Species.WATTREL], TrainerSlot.TRAINER, true)), - [TrainerType.RIVAL_2]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_2) - .setModifierRewardFuncs(() => modifierTypes.EXP_SHARE) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.IVYSAUR, Species.CHARMELEON, Species.WARTORTLE, Species.BAYLEEF, Species.QUILAVA, Species.CROCONAW, Species.GROVYLE, Species.COMBUSKEN, Species.MARSHTOMP, Species.GROTLE, Species.MONFERNO, Species.PRINPLUP, Species.SERVINE, Species.PIGNITE, Species.DEWOTT, Species.QUILLADIN, Species.BRAIXEN, Species.FROGADIER, Species.DARTRIX, Species.TORRACAT, Species.BRIONNE, Species.THWACKEY, Species.RABOOT, Species.DRIZZILE, Species.FLORAGATO, Species.CROCALOR, Species.QUAXWELL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOTTO, Species.HOOTHOOT, Species.TAILLOW, Species.STARAVIA, Species.TRANQUILL, Species.FLETCHINDER, Species.TRUMBEAK, Species.CORVISQUIRE, Species.WATTREL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)), - [TrainerType.RIVAL_3]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_3) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) - .setSpeciesFilter(species => species.baseTotal >= 540), - [TrainerType.RIVAL_4]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(1.75).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_2").setMixedBattleBgm("battle_rival_2").setPartyTemplates(trainerPartyTemplates.RIVAL_4) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) - .setSpeciesFilter(species => species.baseTotal >= 540) - .setGenModifiersFunc(party => { - const starter = party[0]; - return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; // TODO: is the bang correct? - }), - [TrainerType.RIVAL_5]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_5) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true, - p => p.setBoss(true, 2))) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) - .setSpeciesFilter(species => species.baseTotal >= 540) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.RAYQUAZA], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 3); - p.pokeball = PokeballType.MASTER_BALL; - p.shiny = true; - p.variant = 1; - })) - .setGenModifiersFunc(party => { - const starter = party[0]; - return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; //TODO: is the bang correct? - }), - [TrainerType.RIVAL_6]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(3).setEncounterBgm("final").setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_6) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true, - p => { - p.setBoss(true, 3); - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true, - p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) - .setSpeciesFilter(species => species.baseTotal >= 540) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.RAYQUAZA], TrainerSlot.TRAINER, true, p => { - p.setBoss(); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - p.shiny = true; - p.variant = 1; - p.formIndex = 1; - p.generateName(); - })) - .setGenModifiersFunc(party => { - const starter = party[0]; - return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; // TODO: is the bang correct? - }), - - [TrainerType.ROCKET_BOSS_GIOVANNI_1]: new TrainerConfig(t = TrainerType.ROCKET_BOSS_GIOVANNI_1).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", []).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PERSIAN, Species.ALOLA_PERSIAN])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.NIDOKING, Species.NIDOQUEEN])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.RHYPERIOR])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DUGTRIO, Species.ALOLA_DUGTRIO])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MAROWAK, Species.ALOLA_MAROWAK])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KANGASKHAN], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })), - [TrainerType.ROCKET_BOSS_GIOVANNI_2]: new TrainerConfig(++t).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", [], true).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.TYRANITAR, Species.IRON_THORNS], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HIPPOWDON])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.EXCADRILL])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.KANGASKHAN], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GASTRODON])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MEWTWO], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), - [TrainerType.MAXIE]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss", []).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MIGHTYENA])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CROBAT, Species.GLISCOR])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.WEEZING, Species.GALAR_WEEZING])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MAGMORTAR, Species.TORKOAL])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.FLYGON])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CAMERUPT], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })), - [TrainerType.MAXIE_2]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SOLROCK, Species.TYPHLOSION], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.TORKOAL, Species.NINETALES], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.abilityIndex = 2; // DROUGHT - })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SHIFTRY, Species.SCOVILLAIN], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.abilityIndex = 0; // Chlorophyll - })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GREAT_TUSK])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CAMERUPT], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GROUDON], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), - [TrainerType.ARCHIE]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", []).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LINOONE])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CROBAT, Species.PELIPPER])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MUK, Species.ALOLA_MUK])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TENTACRUEL])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.RELICANTH, Species.WAILORD])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })), - [TrainerType.ARCHIE_2]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.EMPOLEON, Species.LUDICOLO], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.POLITOED, Species.PELIPPER], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.abilityIndex = 2; // Drizzle - })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.BEARTIC, Species.ARMALDO], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.abilityIndex = 2; // Swift Swim - })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.OVERQWIL ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.abilityIndex = 1; // Swift Swim - })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KYOGRE], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), - [TrainerType.CYRUS]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss", []).setMixedBattleBgm("battle_galactic_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GYARADOS ])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HONCHKROW, Species.HISUI_BRAVIARY ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CROBAT, Species.GLISCOR ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.WEAVILE], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })), - [TrainerType.CYRUS_2]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss", [], true).setMixedBattleBgm("battle_galactic_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.AZELF, Species.UXIE, Species.MESPRIT], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ELECTRODE, Species.HISUI_ELECTRODE])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SALAMENCE, Species.ROARING_MOON])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.WEAVILE], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DARKRAI], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), - [TrainerType.GHETSIS]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss", []).setMixedBattleBgm("battle_plasma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.COFAGRIGUS, Species.RUNERIGUS])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.BOUFFALANT])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SEISMITOAD, Species.CARRACOSTA])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EELEKTROSS, Species.GALVANTULA])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.VOLCARONA])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.HYDREIGON], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })), - [TrainerType.GHETSIS_2]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss", [], true).setMixedBattleBgm("battle_plasma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GENESECT ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - p.formIndex = Utils.randSeedInt(5); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BASCULEGION, Species.JELLICENT ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.gender = Gender.MALE; - p.formIndex = 1; - })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.KINGAMBIT ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.VOLCARONA, Species.SLITHER_WING ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HYDREIGON, Species.IRON_JUGULIS ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KYUREM], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), - [TrainerType.LYSANDRE]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss", []).setMixedBattleBgm("battle_flare_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.MIENSHAO ])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HONCHKROW, Species.TALONFLAME ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.PYROAR ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.gender = Gender.MALE; - })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CLAWITZER, Species.DRAGALGE ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HELIOLISK, Species.MALAMAR ])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })), - [TrainerType.LYSANDRE_2]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss", [], true).setMixedBattleBgm("battle_flare_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SCREAM_TAIL, Species.FLUTTER_MANE], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PYROAR ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.gender = Gender.MALE; - })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.IRON_MOTH ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GOODRA, Species.HISUI_GOODRA ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.YVELTAL], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), - [TrainerType.LUSAMINE]: new TrainerConfig(++t).setName("Lusamine").initForEvilTeamLeader("Aether Boss", []).setMixedBattleBgm("battle_aether_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLEFABLE ])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.LILLIGANT, Species.HISUI_LILLIGANT ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.MILOTIC, Species.PRIMARINA ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.BEWEAR ])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.NIHILEGO ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - })), - [TrainerType.LUSAMINE_2]: new TrainerConfig(++t).setName("Lusamine").initForEvilTeamLeader("Aether Boss", [], true).setMixedBattleBgm("battle_aether_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLEFABLE ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MILOTIC, Species.PRIMARINA ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.PHEROMOSA ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.STAKATAKA, Species.CELESTEELA, Species.GUZZLORD ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.NIHILEGO ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.NECROZMA ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), - [TrainerType.GUZMA]: new TrainerConfig(++t).setName("Guzma").initForEvilTeamLeader("Skull Boss", []).setMixedBattleBgm("battle_skull_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LOKIX, Species.YANMEGA ])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HERACROSS ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALVANTULA, Species.VIKAVOLT])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GOLISOPOD ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - })), - [TrainerType.GUZMA_2]: new TrainerConfig(++t).setName("Guzma").initForEvilTeamLeader("Skull Boss", [], true).setMixedBattleBgm("battle_skull_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GOLISOPOD ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.abilityIndex = 2; //Anticipation - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HISUI_SAMUROTT, Species.CRAWDAUNT ], TrainerSlot.TRAINER, true, p => { - p.abilityIndex = 2; //Sharpness, Adaptability - })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.formIndex = 1; - p.generateName(); - })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.BUZZWOLE ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.XURKITREE ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })), - [TrainerType.ROSE]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", []).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.FERROTHORN, Species.ESCAVALIER ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SIRFETCHD, Species.MR_RIME ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CORVIKNIGHT ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.PERRSERKER, Species.KLINKLANG ])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.COPPERAJAH ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.formIndex = 1; - p.generateName(); - })), - [TrainerType.ROSE_2]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", [], true).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.AEGISLASH, Species.GHOLDENGO ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DRACOVISH, Species.DRACOZOLT ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); - p.abilityIndex = 1; //Strong Jaw, Hustle - })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MELMETAL ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GALAR_ARTICUNO, Species.GALAR_ZAPDOS, Species.GALAR_MOLTRES ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.MASTER_BALL; - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.COPPERAJAH ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.formIndex = 1; - p.generateName(); - })), -}; +import BattleScene, {startingWave} from "../battle-scene"; +import {ModifierTypeFunc, modifierTypes} from "../modifier/modifier-type"; +import {EnemyPokemon} from "../field/pokemon"; +import * as Utils from "../utils"; +import {PokeballType} from "./pokeball"; +import {pokemonEvolutions, pokemonPrevolutions} from "./pokemon-evolutions"; +import PokemonSpecies, {getPokemonSpecies, PokemonSpeciesFilter} from "./pokemon-species"; +import {tmSpecies} from "./tms"; +import {Type} from "./type"; +import {doubleBattleDialogue} from "./dialogue"; +import {PersistentModifier} from "../modifier/modifier"; +import {TrainerVariant} from "../field/trainer"; +import {getIsInitialized, initI18n} from "#app/plugins/i18n"; +import i18next from "i18next"; +import {Moves} from "#enums/moves"; +import {PartyMemberStrength} from "#enums/party-member-strength"; +import {Species} from "#enums/species"; +import {TrainerType} from "#enums/trainer-type"; +import {Gender} from "./gender"; + +export enum TrainerPoolTier { + COMMON, + UNCOMMON, + RARE, + SUPER_RARE, + ULTRA_RARE +} + +export interface TrainerTierPools { + [key: integer]: Species[] +} + +export enum TrainerSlot { + NONE, + TRAINER, + TRAINER_PARTNER +} + +export class TrainerPartyTemplate { + public size: integer; + public strength: PartyMemberStrength; + public sameSpecies: boolean; + public balanced: boolean; + + constructor(size: integer, strength: PartyMemberStrength, sameSpecies?: boolean, balanced?: boolean) { + this.size = size; + this.strength = strength; + this.sameSpecies = !!sameSpecies; + this.balanced = !!balanced; + } + + getStrength(index: integer): PartyMemberStrength { + return this.strength; + } + + isSameSpecies(index: integer): boolean { + return this.sameSpecies; + } + + isBalanced(index: integer): boolean { + return this.balanced; + } +} + +export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate { + public templates: TrainerPartyTemplate[]; + + constructor(...templates: TrainerPartyTemplate[]) { + super(templates.reduce((total: integer, template: TrainerPartyTemplate) => { + total += template.size; + return total; + }, 0), PartyMemberStrength.AVERAGE); + this.templates = templates; + } + + getStrength(index: integer): PartyMemberStrength { + let t = 0; + for (const template of this.templates) { + if (t + template.size > index) { + return template.getStrength(index - t); + } + t += template.size; + } + + return super.getStrength(index); + } + + isSameSpecies(index: integer): boolean { + let t = 0; + for (const template of this.templates) { + if (t + template.size > index) { + return template.isSameSpecies(index - t); + } + t += template.size; + } + + return super.isSameSpecies(index); + } + + isBalanced(index: integer): boolean { + let t = 0; + for (const template of this.templates) { + if (t + template.size > index) { + return template.isBalanced(index - t); + } + t += template.size; + } + + return super.isBalanced(index); + } +} + +export const trainerPartyTemplates = { + ONE_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.WEAK), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + ONE_AVG: new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + ONE_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + ONE_STRONG: new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ONE_STRONGER: new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + TWO_WEAKER: new TrainerPartyTemplate(2, PartyMemberStrength.WEAKER), + TWO_WEAK: new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), + TWO_WEAK_ONE_AVG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), + TWO_WEAK_SAME_ONE_AVG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), + TWO_WEAK_SAME_TWO_WEAK_SAME: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true)), + TWO_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + TWO_AVG: new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), + TWO_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + TWO_AVG_SAME_ONE_AVG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), + TWO_AVG_SAME_ONE_STRONG: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + TWO_AVG_SAME_TWO_AVG_SAME: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true)), + TWO_STRONG: new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), + THREE_WEAK: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK), + THREE_WEAK_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, true), + THREE_AVG: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), + THREE_AVG_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, true), + THREE_WEAK_BALANCED: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, false, true), + FOUR_WEAKER: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER), + FOUR_WEAKER_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER, true), + FOUR_WEAK: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK), + FOUR_WEAK_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, true), + FOUR_WEAK_BALANCED: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, false, true), + FIVE_WEAKER: new TrainerPartyTemplate(5, PartyMemberStrength.WEAKER), + FIVE_WEAK: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK), + FIVE_WEAK_BALANCED: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK, false, true), + SIX_WEAKER: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER), + SIX_WEAKER_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER, true), + SIX_WEAK_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, true), + SIX_WEAK_BALANCED: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, false, true), + + GYM_LEADER_1: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + GYM_LEADER_2: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), + GYM_LEADER_3: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), + GYM_LEADER_4: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), + GYM_LEADER_5: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), + + ELITE_FOUR: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)), + + CHAMPION: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), new TrainerPartyTemplate(5, PartyMemberStrength.STRONG, false, true)), + + RIVAL: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE)), + RIVAL_2: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true)), + RIVAL_3: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true)), + RIVAL_4: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true)), + RIVAL_5: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)), + RIVAL_6: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER)) +}; + +type PartyTemplateFunc = (scene: BattleScene) => TrainerPartyTemplate; +type PartyMemberFunc = (scene: BattleScene, level: integer, strength: PartyMemberStrength) => EnemyPokemon; +type GenModifiersFunc = (party: EnemyPokemon[]) => PersistentModifier[]; + +export interface PartyMemberFuncs { + [key: integer]: PartyMemberFunc +} + +export class TrainerConfig { + public trainerType: TrainerType; + public trainerTypeDouble: TrainerType; + public name: string; + public nameFemale: string; + public nameDouble: string; + public title: string; + public titleDouble: string; + public hasGenders: boolean = false; + public hasDouble: boolean = false; + public hasCharSprite: boolean = false; + public doubleOnly: boolean = false; + public moneyMultiplier: number = 1; + public isBoss: boolean = false; + public hasStaticParty: boolean = false; + public useSameSeedForAllMembers: boolean = false; + public mixedBattleBgm: string; + public battleBgm: string; + public encounterBgm: string; + public femaleEncounterBgm: string; + public doubleEncounterBgm: string; + public victoryBgm: string; + public genModifiersFunc: GenModifiersFunc; + public modifierRewardFuncs: ModifierTypeFunc[] = []; + public partyTemplates: TrainerPartyTemplate[]; + public partyTemplateFunc: PartyTemplateFunc; + public partyMemberFuncs: PartyMemberFuncs = {}; + public speciesPools: TrainerTierPools; + public speciesFilter: PokemonSpeciesFilter; + public specialtyTypes: Type[] = []; + public hasVoucher: boolean = false; + + public encounterMessages: string[] = []; + public victoryMessages: string[] = []; + public defeatMessages: string[] = []; + + public femaleEncounterMessages: string[]; + public femaleVictoryMessages: string[]; + public femaleDefeatMessages: string[]; + + public doubleEncounterMessages: string[]; + public doubleVictoryMessages: string[]; + public doubleDefeatMessages: string[]; + + constructor(trainerType: TrainerType, allowLegendaries?: boolean) { + this.trainerType = trainerType; + this.name = Utils.toReadableString(TrainerType[this.getDerivedType()]); + this.battleBgm = "battle_trainer"; + this.mixedBattleBgm = "battle_trainer"; + this.victoryBgm = "victory_trainer"; + this.partyTemplates = [trainerPartyTemplates.TWO_AVG]; + this.speciesFilter = species => (allowLegendaries || (!species.legendary && !species.subLegendary && !species.mythical)) && !species.isTrainerForbidden(); + } + + getKey(): string { + return TrainerType[this.getDerivedType()].toString().toLowerCase(); + } + + getSpriteKey(female?: boolean, isDouble: boolean = false): string { + let ret = this.getKey(); + if (this.hasGenders) { + ret += `_${female ? "f" : "m"}`; + } + // If a special double trainer class was set, set it as the sprite key + if (this.trainerTypeDouble && female && isDouble) { + // Get the derived type for the double trainer since the sprite key is based on the derived type + ret = TrainerType[this.getDerivedType(this.trainerTypeDouble)].toString().toLowerCase(); + } + return ret; + } + + setName(name: string): TrainerConfig { + if (name === "Finn") { + // Give the rival a localized name + // First check if i18n is initialized + if (!getIsInitialized()) { + initI18n(); + } + // This is only the male name, because the female name is handled in a different function (setHasGenders) + if (name === "Finn") { + name = i18next.t("trainerNames:rival"); + } + } + this.name = name; + return this; + } + + /** + * Sets if a boss trainer will have a voucher or not. + * @param hasVoucher - If the boss trainer will have a voucher. + */ + setHasVoucher(hasVoucher: boolean): void { + this.hasVoucher = hasVoucher; + } + + setTitle(title: string): TrainerConfig { + // First check if i18n is initialized + if (!getIsInitialized()) { + initI18n(); + } + + // Make the title lowercase and replace spaces with underscores + title = title.toLowerCase().replace(/\s/g, "_"); + + // Get the title from the i18n file + this.title = i18next.t(`titles:${title}`); + + + return this; + } + + + /** + * Returns the derived trainer type for a given trainer type. + * @param trainerTypeToDeriveFrom - The trainer type to derive from. (If null, the this.trainerType property will be used.) + * @returns {TrainerType} - The derived trainer type. + */ + getDerivedType(trainerTypeToDeriveFrom: TrainerType | null = null): TrainerType { + let trainerType = trainerTypeToDeriveFrom ? trainerTypeToDeriveFrom : this.trainerType; + switch (trainerType) { + case TrainerType.RIVAL_2: + case TrainerType.RIVAL_3: + case TrainerType.RIVAL_4: + case TrainerType.RIVAL_5: + case TrainerType.RIVAL_6: + trainerType = TrainerType.RIVAL; + break; + case TrainerType.LANCE_CHAMPION: + trainerType = TrainerType.LANCE; + break; + case TrainerType.LARRY_ELITE: + trainerType = TrainerType.LARRY; + break; + case TrainerType.ROCKET_BOSS_GIOVANNI_1: + case TrainerType.ROCKET_BOSS_GIOVANNI_2: + trainerType = TrainerType.GIOVANNI; + break; + case TrainerType.MAXIE_2: + trainerType = TrainerType.MAXIE; + break; + case TrainerType.ARCHIE_2: + trainerType = TrainerType.ARCHIE; + break; + case TrainerType.CYRUS_2: + trainerType = TrainerType.CYRUS; + break; + case TrainerType.GHETSIS_2: + trainerType = TrainerType.GHETSIS; + break; + case TrainerType.LYSANDRE_2: + trainerType = TrainerType.LYSANDRE; + break; + case TrainerType.LUSAMINE_2: + trainerType = TrainerType.LUSAMINE; + break; + case TrainerType.GUZMA_2: + trainerType = TrainerType.GUZMA; + break; + case TrainerType.ROSE_2: + trainerType = TrainerType.ROSE; + break; + case TrainerType.MARNIE_ELITE: + trainerType = TrainerType.MARNIE; + break; + case TrainerType.NESSA_ELITE: + trainerType = TrainerType.NESSA; + break; + case TrainerType.BEA_ELITE: + trainerType = TrainerType.BEA; + break; + case TrainerType.ALLISTER_ELITE: + trainerType = TrainerType.ALLISTER; + break; + case TrainerType.RAIHAN_ELITE: + trainerType = TrainerType.RAIHAN; + break; + } + + return trainerType; + } + + /** + * Sets the configuration for trainers with genders, including the female name and encounter background music (BGM). + * @param {string} [nameFemale] - The name of the female trainer. If 'Ivy', a localized name will be assigned. + * @param {TrainerType | string} [femaleEncounterBgm] - The encounter BGM for the female trainer, which can be a TrainerType or a string. + * @returns {TrainerConfig} - The updated TrainerConfig instance. + **/ + setHasGenders(nameFemale?: string, femaleEncounterBgm?: TrainerType | string): TrainerConfig { + // If the female name is 'Ivy' (the rival), assign a localized name. + if (nameFemale === "Ivy") { + // Check if the internationalization (i18n) system is initialized. + if (!getIsInitialized()) { + // Initialize the i18n system if it is not already initialized. + initI18n(); + } + // Set the localized name for the female rival. + this.nameFemale = i18next.t("trainerNames:rival_female"); + } else { + // Otherwise, assign the provided female name. + this.nameFemale = nameFemale!; // TODO: is this bang correct? + } + + // Indicate that this trainer configuration includes genders. + this.hasGenders = true; + + // If a female encounter BGM is provided. + if (femaleEncounterBgm) { + // If the BGM is a TrainerType (number), convert it to a string, replace underscores with spaces, and convert to lowercase. + // Otherwise, assign the provided string as the BGM. + this.femaleEncounterBgm = typeof femaleEncounterBgm === "number" + ? TrainerType[femaleEncounterBgm].toString().replace(/_/g, " ").toLowerCase() + : femaleEncounterBgm; + } + + // Return the updated TrainerConfig instance. + return this; + } + + /** + * Sets the configuration for trainers with double battles, including the name of the double trainer and the encounter BGM. + * @param nameDouble - The name of the double trainer (e.g., "Ace Duo" for Trainer Class Doubles or "red_blue_double" for NAMED trainer doubles). + * @param doubleEncounterBgm - The encounter BGM for the double trainer, which can be a TrainerType or a string. + * @returns {TrainerConfig} - The updated TrainerConfig instance. + */ + setHasDouble(nameDouble: string, doubleEncounterBgm?: TrainerType | string): TrainerConfig { + this.hasDouble = true; + this.nameDouble = nameDouble; + if (doubleEncounterBgm) { + this.doubleEncounterBgm = typeof doubleEncounterBgm === "number" ? TrainerType[doubleEncounterBgm].toString().replace(/\_/g, " ").toLowerCase() : doubleEncounterBgm; + } + return this; + } + + /** + * Sets the trainer type for double battles. + * @param trainerTypeDouble - The TrainerType of the partner in a double battle. + * @returns {TrainerConfig} - The updated TrainerConfig instance. + */ + setDoubleTrainerType(trainerTypeDouble: TrainerType): TrainerConfig { + this.trainerTypeDouble = trainerTypeDouble; + this.setDoubleMessages(this.nameDouble); + return this; + } + + /** + * Sets the encounter and victory messages for double trainers. + * @param nameDouble - The name of the pair (e.g. "red_blue_double"). + */ + setDoubleMessages(nameDouble: string) { + // Check if there is double battle dialogue for this trainer + if (doubleBattleDialogue[nameDouble]) { + // Set encounter and victory messages for double trainers + this.doubleEncounterMessages = doubleBattleDialogue[nameDouble].encounter; + this.doubleVictoryMessages = doubleBattleDialogue[nameDouble].victory; + this.doubleDefeatMessages = doubleBattleDialogue[nameDouble].defeat; + } + } + + /** + * Sets the title for double trainers + * @param titleDouble - the key for the title in the i18n file. (e.g., "champion_double"). + * @returns {TrainerConfig} - The updated TrainerConfig instance. + */ + setDoubleTitle(titleDouble: string): TrainerConfig { + // First check if i18n is initialized + if (!getIsInitialized()) { + initI18n(); + } + + // Make the title lowercase and replace spaces with underscores + titleDouble = titleDouble.toLowerCase().replace(/\s/g, "_"); + + // Get the title from the i18n file + this.titleDouble = i18next.t(`titles:${titleDouble}`); + + return this; + } + + setHasCharSprite(): TrainerConfig { + this.hasCharSprite = true; + return this; + } + + setDoubleOnly(): TrainerConfig { + this.doubleOnly = true; + return this; + } + + setMoneyMultiplier(moneyMultiplier: number): TrainerConfig { + this.moneyMultiplier = moneyMultiplier; + return this; + } + + setBoss(): TrainerConfig { + this.isBoss = true; + return this; + } + + setStaticParty(): TrainerConfig { + this.hasStaticParty = true; + return this; + } + + setUseSameSeedForAllMembers(): TrainerConfig { + this.useSameSeedForAllMembers = true; + return this; + } + + setMixedBattleBgm(mixedBattleBgm: string): TrainerConfig { + this.mixedBattleBgm = mixedBattleBgm; + return this; + } + + setBattleBgm(battleBgm: string): TrainerConfig { + this.battleBgm = battleBgm; + return this; + } + + setEncounterBgm(encounterBgm: TrainerType | string): TrainerConfig { + this.encounterBgm = typeof encounterBgm === "number" ? TrainerType[encounterBgm].toString().toLowerCase() : encounterBgm; + return this; + } + + setVictoryBgm(victoryBgm: string): TrainerConfig { + this.victoryBgm = victoryBgm; + return this; + } + + setPartyTemplates(...partyTemplates: TrainerPartyTemplate[]): TrainerConfig { + this.partyTemplates = partyTemplates; + return this; + } + + setPartyTemplateFunc(partyTemplateFunc: PartyTemplateFunc): TrainerConfig { + this.partyTemplateFunc = partyTemplateFunc; + return this; + } + + setPartyMemberFunc(slotIndex: integer, partyMemberFunc: PartyMemberFunc): TrainerConfig { + this.partyMemberFuncs[slotIndex] = partyMemberFunc; + return this; + } + + setSpeciesPools(speciesPools: TrainerTierPools | Species[]): TrainerConfig { + this.speciesPools = (Array.isArray(speciesPools) ? {[TrainerPoolTier.COMMON]: speciesPools} : speciesPools) as unknown as TrainerTierPools; + return this; + } + + setSpeciesFilter(speciesFilter: PokemonSpeciesFilter, allowLegendaries?: boolean): TrainerConfig { + const baseFilter = this.speciesFilter; + this.speciesFilter = allowLegendaries ? speciesFilter : species => speciesFilter(species) && baseFilter(species); + return this; + } + + setSpecialtyTypes(...specialtyTypes: Type[]): TrainerConfig { + this.specialtyTypes = specialtyTypes; + return this; + } + + setGenModifiersFunc(genModifiersFunc: GenModifiersFunc): TrainerConfig { + this.genModifiersFunc = genModifiersFunc; + return this; + } + + setModifierRewardFuncs(...modifierTypeFuncs: (() => ModifierTypeFunc)[]): TrainerConfig { + this.modifierRewardFuncs = modifierTypeFuncs.map(func => () => { + const modifierTypeFunc = func(); + const modifierType = modifierTypeFunc(); + modifierType.withIdFromFunc(modifierTypeFunc); + return modifierType; + }); + return this; + } + + /** + * Returns the pool of species for an evil team admin + * @param team - The evil team the admin belongs to. + * @returns {TrainerTierPools} + */ + speciesPoolPerEvilTeamAdmin(team): TrainerTierPools { + team = team.toLowerCase(); + switch (team) { + case "rocket": { + return { + [TrainerPoolTier.COMMON]: [Species.RATTATA, Species.KOFFING, Species.EKANS, Species.GYARADOS, Species.TAUROS, Species.SCYTHER, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB], + [TrainerPoolTier.UNCOMMON]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE], + [TrainerPoolTier.RARE]: [Species.DRATINI, Species.LARVITAR] + }; + } + case "magma": { + return { + [TrainerPoolTier.COMMON]: [Species.NUMEL, Species.POOCHYENA, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR], + [TrainerPoolTier.UNCOMMON]: [Species.TRAPINCH, Species.HEATMOR], + [TrainerPoolTier.RARE]: [Species.CAPSAKID, Species.CHARCADET] + }; + } + case "aqua": { + return { + [TrainerPoolTier.COMMON]: [Species.CARVANHA, Species.CORPHISH, Species.ZIGZAGOON, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.QWILFISH], + [TrainerPoolTier.UNCOMMON]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA], + [TrainerPoolTier.RARE]: [Species.DONDOZO] + }; + } + case "galactic": { + return { + [TrainerPoolTier.COMMON]: [Species.GLAMEOW, Species.STUNKY, Species.BRONZOR, Species.CARNIVINE, Species.GROWLITHE, Species.QWILFISH, Species.SNEASEL], + [TrainerPoolTier.UNCOMMON]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL], + [TrainerPoolTier.RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO] + }; + } + case "plasma": { + return { + [TrainerPoolTier.COMMON]: [Species.SCRAFTY, Species.LILLIPUP, Species.PURRLOIN, Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.AMOONGUSS], + [TrainerPoolTier.UNCOMMON]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK], + [TrainerPoolTier.RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, Species.AXEW, Species.DEINO, Species.DURANT] + }; + } + case "flare": { + return { + [TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.GULPIN, Species.PURRLOIN, Species.POOCHYENA, Species.SCATTERBUG], + [TrainerPoolTier.UNCOMMON]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD], + [TrainerPoolTier.RARE]: [Species.NOIVERN, Species.DRUDDIGON] + }; + } + case "aether": { + return { + [TrainerPoolTier.COMMON]: [ Species.BRUXISH, Species.SLOWPOKE, Species.BALTOY, Species.EXEGGCUTE, Species.ABRA, Species.ALOLA_RAICHU, Species.ELGYEM, Species.NATU], + [TrainerPoolTier.UNCOMMON]: [Species.GALAR_SLOWKING, Species.MEDITITE, Species.BELDUM, Species.ORANGURU, Species.HATTERENE, Species.INKAY, Species.RALTS], + [TrainerPoolTier.RARE]: [Species.ARMAROUGE, Species.GIRAFARIG, Species.PORYGON] + }; + } + case "skull": { + return { + [TrainerPoolTier.COMMON]: [ Species.MAREANIE, Species.ALOLA_GRIMER, Species.GASTLY, Species.ZUBAT, Species.LURANTIS, Species.VENIPEDE, Species.BUDEW, Species.KOFFING], + [TrainerPoolTier.UNCOMMON]: [Species.GALAR_SLOWBRO, Species.SKORUPI, Species.PALDEA_WOOPER, Species.NIDORAN_F, Species.CROAGUNK, Species.MANDIBUZZ], + [TrainerPoolTier.RARE]: [Species.DRAGALGE, Species.HISUI_SNEASEL] + }; + } + case "macro": { + return { + [TrainerPoolTier.COMMON]: [ Species.HATTERENE, Species.MILOTIC, Species.TSAREENA, Species.SALANDIT, Species.GALAR_PONYTA, Species.GOTHITA, Species.FROSLASS], + [TrainerPoolTier.UNCOMMON]: [Species.MANDIBUZZ, Species.MAREANIE, Species.ALOLA_VULPIX, Species.TOGEPI, Species.GALAR_CORSOLA, Species.SINISTEA, Species.APPLIN], + [TrainerPoolTier.RARE]: [Species.TINKATINK, Species.HISUI_LILLIGANT] + }; + } + } + + console.warn(`Evil team admin for ${team} not found. Returning empty species pools.`); + return []; + } + + /** + * Initializes the trainer configuration for an evil team admin. + * @param title - The title of the evil team admin. + * @param poolName - The evil team the admin belongs to. + * @param {Species | Species[]} signatureSpecies - The signature species for the evil team leader. + * @returns {TrainerConfig} - The updated TrainerConfig instance. + * **/ + initForEvilTeamAdmin(title: string, poolName: string, signatureSpecies: (Species | Species[])[],): TrainerConfig { + if (!getIsInitialized()) { + initI18n(); + } + this.setPartyTemplates(trainerPartyTemplates.RIVAL_5); + + // Set the species pools for the evil team admin. + this.speciesPools = this.speciesPoolPerEvilTeamAdmin(poolName); + + signatureSpecies.forEach((speciesPool, s) => { + if (!Array.isArray(speciesPool)) { + speciesPool = [speciesPool]; + } + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + }); + + const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); + this.name = i18next.t(`trainerNames:${nameForCall}`); + this.setHasVoucher(false); + this.setTitle(title); + this.setMoneyMultiplier(1.5); + this.setBoss(); + this.setStaticParty(); + this.setBattleBgm("battle_plasma_boss"); + this.setVictoryBgm("victory_team_plasma"); + + return this; + } + + /** + * Initializes the trainer configuration for an evil team leader. Temporarily hardcoding evil leader teams though. + * @param {Species | Species[]} signatureSpecies - The signature species for the evil team leader. + * @param {Type[]} specialtyTypes - The specialty types for the evil team Leader. + * @param boolean whether or not this is the rematch fight + * @returns {TrainerConfig} - The updated TrainerConfig instance. + * **/ + initForEvilTeamLeader(title: string, signatureSpecies: (Species | Species[])[], rematch: boolean = false, ...specialtyTypes: Type[]): TrainerConfig { + if (!getIsInitialized()) { + initI18n(); + } + if (rematch) { + this.setPartyTemplates(trainerPartyTemplates.ELITE_FOUR); + } else { + this.setPartyTemplates(trainerPartyTemplates.RIVAL_5); + } + signatureSpecies.forEach((speciesPool, s) => { + if (!Array.isArray(speciesPool)) { + speciesPool = [speciesPool]; + } + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + }); + if (specialtyTypes.length) { + this.setSpeciesFilter(p => specialtyTypes.find(t => p.isOfType(t)) !== undefined); + this.setSpecialtyTypes(...specialtyTypes); + } + const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); + this.name = i18next.t(`trainerNames:${nameForCall}`); + this.setTitle(title); + this.setMoneyMultiplier(2.5); + this.setBoss(); + this.setStaticParty(); + this.setHasVoucher(true); + this.setBattleBgm("battle_plasma_boss"); + this.setVictoryBgm("victory_team_plasma"); + + return this; + } + + /** + * Initializes the trainer configuration for a Gym Leader. + * @param {Species | Species[]} signatureSpecies - The signature species for the Gym Leader. + * @param {Type[]} specialtyTypes - The specialty types for the Gym Leader. + * @param isMale - Whether the Gym Leader is Male or Not (for localization of the title). + * @returns {TrainerConfig} - The updated TrainerConfig instance. + * **/ + initForGymLeader(signatureSpecies: (Species | Species[])[], isMale: boolean, ...specialtyTypes: Type[]): TrainerConfig { + // Check if the internationalization (i18n) system is initialized. + if (!getIsInitialized()) { + initI18n(); + } + + // Set the function to generate the Gym Leader's party template. + this.setPartyTemplateFunc(getGymLeaderPartyTemplate); + + // Set up party members with their corresponding species. + signatureSpecies.forEach((speciesPool, s) => { + // Ensure speciesPool is an array. + if (!Array.isArray(speciesPool)) { + speciesPool = [speciesPool]; + } + // Set a function to get a random party member from the species pool. + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + }); + + // If specialty types are provided, set species filter and specialty types. + if (specialtyTypes.length) { + this.setSpeciesFilter(p => specialtyTypes.find(t => p.isOfType(t)) !== undefined); + this.setSpecialtyTypes(...specialtyTypes); + } + + // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. + const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); + this.name = i18next.t(`trainerNames:${nameForCall}`); + + // Set the title to "gym_leader". (this is the key in the i18n file) + this.setTitle("gym_leader"); + if (!isMale) { + this.setTitle("gym_leader_female"); + } + + // Configure various properties for the Gym Leader. + this.setMoneyMultiplier(2.5); + this.setBoss(); + this.setStaticParty(); + this.setHasVoucher(true); + this.setBattleBgm("battle_unova_gym"); + this.setVictoryBgm("victory_gym"); + this.setGenModifiersFunc(party => { + const waveIndex = party[0].scene.currentBattle.waveIndex; + return getRandomTeraModifiers(party, waveIndex >= 100 ? 1 : 0, specialtyTypes.length ? specialtyTypes : undefined); + }); + + return this; + } + + /** + * Initializes the trainer configuration for an Elite Four member. + * @param {Species | Species[]} signatureSpecies - The signature species for the Elite Four member. + * @param {Type[]} specialtyTypes - The specialty types for the Elite Four member. + * @param isMale - Whether the Elite Four Member is Male or Female (for localization of the title). + * @returns {TrainerConfig} - The updated TrainerConfig instance. + **/ + initForEliteFour(signatureSpecies: (Species | Species[])[], isMale: boolean, ...specialtyTypes: Type[]): TrainerConfig { + // Check if the internationalization (i18n) system is initialized. + if (!getIsInitialized()) { + initI18n(); + } + + // Set the party templates for the Elite Four. + this.setPartyTemplates(trainerPartyTemplates.ELITE_FOUR); + + // Set up party members with their corresponding species. + signatureSpecies.forEach((speciesPool, s) => { + // Ensure speciesPool is an array. + if (!Array.isArray(speciesPool)) { + speciesPool = [speciesPool]; + } + // Set a function to get a random party member from the species pool. + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + }); + + // Set species filter and specialty types if provided, otherwise filter by base total. + if (specialtyTypes.length) { + this.setSpeciesFilter(p => specialtyTypes.some(t => p.isOfType(t)) && p.baseTotal >= 450); + this.setSpecialtyTypes(...specialtyTypes); + } else { + this.setSpeciesFilter(p => p.baseTotal >= 450); + } + + // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. + const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); + this.name = i18next.t(`trainerNames:${nameForCall}`); + + // Set the title to "elite_four". (this is the key in the i18n file) + this.setTitle("elite_four"); + if (!isMale) { + this.setTitle("elite_four_female"); + } + + // Configure various properties for the Elite Four member. + this.setMoneyMultiplier(3.25); + this.setBoss(); + this.setStaticParty(); + this.setHasVoucher(true); + this.setBattleBgm("battle_unova_elite"); + this.setVictoryBgm("victory_gym"); + this.setGenModifiersFunc(party => getRandomTeraModifiers(party, 2, specialtyTypes.length ? specialtyTypes : undefined)); + + return this; + } + + /** + * Initializes the trainer configuration for a Champion. + * @param {Species | Species[]} signatureSpecies - The signature species for the Champion. + * @param isMale - Whether the Champion is Male or Female (for localization of the title). + * @returns {TrainerConfig} - The updated TrainerConfig instance. + **/ + initForChampion(signatureSpecies: (Species | Species[])[], isMale: boolean): TrainerConfig { + // Check if the internationalization (i18n) system is initialized. + if (!getIsInitialized()) { + initI18n(); + } + + // Set the party templates for the Champion. + this.setPartyTemplates(trainerPartyTemplates.CHAMPION); + + // Set up party members with their corresponding species. + signatureSpecies.forEach((speciesPool, s) => { + // Ensure speciesPool is an array. + if (!Array.isArray(speciesPool)) { + speciesPool = [speciesPool]; + } + // Set a function to get a random party member from the species pool. + this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); + }); + + // Set species filter to only include species with a base total of 470 or higher. + this.setSpeciesFilter(p => p.baseTotal >= 470); + + // Localize the trainer's name by converting it to lowercase and replacing spaces with underscores. + const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); + this.name = i18next.t(`trainerNames:${nameForCall}`); + + // Set the title to "champion". (this is the key in the i18n file) + this.setTitle("champion"); + if (!isMale) { + this.setTitle("champion_female"); + } + + + // Configure various properties for the Champion. + this.setMoneyMultiplier(10); + this.setBoss(); + this.setStaticParty(); + this.setHasVoucher(true); + this.setBattleBgm("battle_champion_alder"); + this.setVictoryBgm("victory_champion"); + this.setGenModifiersFunc(party => getRandomTeraModifiers(party, 3)); + + return this; + } + + /** + * Retrieves the title for the trainer based on the provided trainer slot and variant. + * @param {TrainerSlot} trainerSlot - The slot to determine which title to use. Defaults to TrainerSlot.NONE. + * @param {TrainerVariant} variant - The variant of the trainer to determine the specific title. + * @returns {string} - The title of the trainer. + **/ + getTitle(trainerSlot: TrainerSlot = TrainerSlot.NONE, variant: TrainerVariant): string { + const ret = this.name; + + // Check if the variant is double and the name for double exists + if (!trainerSlot && variant === TrainerVariant.DOUBLE && this.nameDouble) { + return this.nameDouble; + } + + // Female variant + if (this.hasGenders) { + // If the name is already set + if (this.nameFemale) { + // Check if the variant is either female or this is for the partner in a double battle + if (variant === TrainerVariant.FEMALE || (variant === TrainerVariant.DOUBLE && trainerSlot === TrainerSlot.TRAINER_PARTNER)) { + return this.nameFemale; + } + } else + // Check if !variant is true, if so return the name, else return the name with _female appended + if (variant) { + if (!getIsInitialized()) { + initI18n(); + } + // Check if the female version exists in the i18n file + if (i18next.exists(`trainerClasses:${this.name.toLowerCase()}`)) { + // If it does, return + return ret + "_female"; + } else { + // If it doesn't, we do not do anything and go to the normal return + // This is to prevent the game from displaying an error if a female version of the trainer does not exist in the localization + } + } + } + + return ret; + } + + loadAssets(scene: BattleScene, variant: TrainerVariant): Promise { + return new Promise(resolve => { + const isDouble = variant === TrainerVariant.DOUBLE; + const trainerKey = this.getSpriteKey(variant === TrainerVariant.FEMALE, false); + const partnerTrainerKey = this.getSpriteKey(true, true); + scene.loadAtlas(trainerKey, "trainer"); + if (isDouble) { + scene.loadAtlas(partnerTrainerKey, "trainer"); + } + scene.load.once(Phaser.Loader.Events.COMPLETE, () => { + const originalWarn = console.warn; + // Ignore warnings for missing frames, because there will be a lot + console.warn = () => { + }; + const frameNames = scene.anims.generateFrameNames(trainerKey, { + zeroPad: 4, + suffix: ".png", + start: 1, + end: 128 + }); + const partnerFrameNames = isDouble + ? scene.anims.generateFrameNames(partnerTrainerKey, { + zeroPad: 4, + suffix: ".png", + start: 1, + end: 128 + }) + : ""; + console.warn = originalWarn; + if (!(scene.anims.exists(trainerKey))) { + scene.anims.create({ + key: trainerKey, + frames: frameNames, + frameRate: 24, + repeat: -1 + }); + } + if (isDouble && !(scene.anims.exists(partnerTrainerKey))) { + scene.anims.create({ + key: partnerTrainerKey, + frames: partnerFrameNames, + frameRate: 24, + repeat: -1 + }); + } + resolve(); + }); + if (!scene.load.isLoading()) { + scene.load.start(); + } + }); + } +} + +let t = 0; + +interface TrainerConfigs { + [key: integer]: TrainerConfig +} + +/** + * The function to get variable strength grunts + * @param scene the singleton scene being passed in + * @returns the correct TrainerPartyTemplate + */ +function getEvilGruntPartyTemplate(scene: BattleScene): TrainerPartyTemplate { + const waveIndex = scene.currentBattle?.waveIndex; + if (waveIndex < 40) { + return trainerPartyTemplates.TWO_AVG; + } else if (waveIndex < 63) { + return trainerPartyTemplates.THREE_AVG; + } else if (waveIndex < 65) { + return trainerPartyTemplates.TWO_AVG_ONE_STRONG; + } else if (waveIndex < 112) { + return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger + } else { + return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger + } +} + +function getWavePartyTemplate(scene: BattleScene, ...templates: TrainerPartyTemplate[]) { + return templates[Math.min(Math.max(Math.ceil((scene.gameMode.getWaveForDifficulty(scene.currentBattle?.waveIndex || startingWave, true) - 20) / 30), 0), templates.length - 1)]; +} + +function getGymLeaderPartyTemplate(scene: BattleScene) { + return getWavePartyTemplate(scene, trainerPartyTemplates.GYM_LEADER_1, trainerPartyTemplates.GYM_LEADER_2, trainerPartyTemplates.GYM_LEADER_3, trainerPartyTemplates.GYM_LEADER_4, trainerPartyTemplates.GYM_LEADER_5); +} + +function getRandomPartyMemberFunc(speciesPool: Species[], trainerSlot: TrainerSlot = TrainerSlot.TRAINER, ignoreEvolution: boolean = false, postProcess?: (enemyPokemon: EnemyPokemon) => void): PartyMemberFunc { + return (scene: BattleScene, level: integer, strength: PartyMemberStrength) => { + let species = Utils.randSeedItem(speciesPool); + if (!ignoreEvolution) { + species = getPokemonSpecies(species).getTrainerSpeciesForLevel(level, true, strength, scene.currentBattle.waveIndex); + } + return scene.addEnemyPokemon(getPokemonSpecies(species), level, trainerSlot, undefined, undefined, postProcess); + }; +} + +function getSpeciesFilterRandomPartyMemberFunc(speciesFilter: PokemonSpeciesFilter, trainerSlot: TrainerSlot = TrainerSlot.TRAINER, allowLegendaries?: boolean, postProcess?: (EnemyPokemon: EnemyPokemon) => void): PartyMemberFunc { + const originalSpeciesFilter = speciesFilter; + speciesFilter = (species: PokemonSpecies) => (allowLegendaries || (!species.legendary && !species.subLegendary && !species.mythical)) && !species.isTrainerForbidden() && originalSpeciesFilter(species); + return (scene: BattleScene, level: integer, strength: PartyMemberStrength) => { + const ret = scene.addEnemyPokemon(getPokemonSpecies(scene.randomSpecies(scene.currentBattle.waveIndex, level, false, speciesFilter).getTrainerSpeciesForLevel(level, true, strength, scene.currentBattle.waveIndex)), level, trainerSlot, undefined, undefined, postProcess); + return ret; + }; +} + +function getRandomTeraModifiers(party: EnemyPokemon[], count: integer, types?: Type[]): PersistentModifier[] { + const ret: PersistentModifier[] = []; + const partyMemberIndexes = new Array(party.length).fill(null).map((_, i) => i); + for (let t = 0; t < Math.min(count, party.length); t++) { + const randomIndex = Utils.randSeedItem(partyMemberIndexes); + partyMemberIndexes.splice(partyMemberIndexes.indexOf(randomIndex), 1); + ret.push(modifierTypes.TERA_SHARD().generateType([], [Utils.randSeedItem(types ? types : party[randomIndex].getTypes())])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(party[randomIndex]) as PersistentModifier); // TODO: is the bang correct? + } + return ret; +} + +type SignatureSpecies = { + [key in string]: (Species | Species[])[]; +}; + +/* + * The signature species for each Gym Leader, Elite Four member, and Champion. + * The key is the trainer type, and the value is an array of Species or Species arrays. + * This is in a separate const so it can be accessed from other places and not just the trainerConfigs + */ +export const signatureSpecies: SignatureSpecies = { + BROCK: [Species.GEODUDE, Species.ONIX], + MISTY: [Species.STARYU, Species.PSYDUCK], + LT_SURGE: [Species.VOLTORB, Species.PIKACHU, Species.ELECTABUZZ], + ERIKA: [Species.ODDISH, Species.BELLSPROUT, Species.TANGELA, Species.HOPPIP], + JANINE: [Species.VENONAT, Species.SPINARAK, Species.ZUBAT], + SABRINA: [Species.ABRA, Species.MR_MIME, Species.ESPEON], + BLAINE: [Species.GROWLITHE, Species.PONYTA, Species.MAGMAR], + GIOVANNI: [Species.SANDILE, Species.MURKROW, Species.NIDORAN_M, Species.NIDORAN_F], + FALKNER: [Species.PIDGEY, Species.HOOTHOOT, Species.DODUO], + BUGSY: [Species.SCYTHER, Species.HERACROSS, Species.SHUCKLE, Species.PINSIR], + WHITNEY: [Species.GIRAFARIG, Species.MILTANK], + MORTY: [Species.GASTLY, Species.MISDREAVUS, Species.SABLEYE], + CHUCK: [Species.POLIWRATH, Species.MANKEY], + JASMINE: [Species.MAGNEMITE, Species.STEELIX], + PRYCE: [Species.SEEL, Species.SWINUB], + CLAIR: [Species.DRATINI, Species.HORSEA, Species.GYARADOS], + ROXANNE: [Species.GEODUDE, Species.NOSEPASS], + BRAWLY: [Species.MACHOP, Species.MAKUHITA], + WATTSON: [Species.MAGNEMITE, Species.VOLTORB, Species.ELECTRIKE], + FLANNERY: [Species.SLUGMA, Species.TORKOAL, Species.NUMEL], + NORMAN: [Species.SLAKOTH, Species.SPINDA, Species.CHANSEY, Species.KANGASKHAN], + WINONA: [Species.SWABLU, Species.WINGULL, Species.TROPIUS, Species.SKARMORY], + TATE: [Species.SOLROCK, Species.NATU, Species.CHIMECHO, Species.GALLADE], + LIZA: [Species.LUNATONE, Species.SPOINK, Species.BALTOY, Species.GARDEVOIR], + JUAN: [Species.HORSEA, Species.BARBOACH, Species.SPHEAL, Species.RELICANTH], + ROARK: [Species.CRANIDOS, Species.LARVITAR, Species.GEODUDE], + GARDENIA: [Species.ROSELIA, Species.TANGELA, Species.TURTWIG], + MAYLENE: [Species.LUCARIO, Species.MEDITITE, Species.CHIMCHAR], + CRASHER_WAKE: [Species.BUIZEL, Species.MAGIKARP, Species.PIPLUP], + FANTINA: [Species.MISDREAVUS, Species.DRIFLOON, Species.SPIRITOMB], + BYRON: [Species.SHIELDON, Species.BRONZOR, Species.AGGRON], + CANDICE: [Species.SNEASEL, Species.SNOVER, Species.SNORUNT], + VOLKNER: [Species.SHINX, Species.CHINCHOU, Species.ROTOM], + CILAN: [Species.PANSAGE, Species.COTTONEE, Species.PETILIL], + CHILI: [Species.PANSEAR, Species.DARUMAKA, Species.HEATMOR], + CRESS: [Species.PANPOUR, Species.BASCULIN, Species.TYMPOLE], + CHEREN: [Species.LILLIPUP, Species.MINCCINO, Species.PATRAT], + LENORA: [Species.KANGASKHAN, Species.DEERLING, Species.AUDINO], + ROXIE: [Species.VENIPEDE, Species.TRUBBISH, Species.SKORUPI], + BURGH: [Species.SEWADDLE, Species.SHELMET, Species.KARRABLAST], + ELESA: [Species.EMOLGA, Species.BLITZLE, Species.JOLTIK], + CLAY: [Species.DRILBUR, Species.SANDILE, Species.GOLETT], + SKYLA: [Species.DUCKLETT, Species.WOOBAT, Species.RUFFLET], + BRYCEN: [Species.CRYOGONAL, Species.VANILLITE, Species.CUBCHOO], + DRAYDEN: [Species.DRUDDIGON, Species.AXEW, Species.DEINO], + MARLON: [Species.WAILMER, Species.FRILLISH, Species.TIRTOUGA], + VIOLA: [Species.SURSKIT, Species.SCATTERBUG], + GRANT: [Species.AMAURA, Species.TYRUNT], + KORRINA: [Species.HAWLUCHA, Species.LUCARIO, Species.MIENFOO], + RAMOS: [Species.SKIDDO, Species.HOPPIP, Species.BELLSPROUT], + CLEMONT: [Species.HELIOPTILE, Species.MAGNEMITE, Species.EMOLGA], + VALERIE: [Species.SYLVEON, Species.MAWILE, Species.MR_MIME], + OLYMPIA: [Species.ESPURR, Species.SIGILYPH, Species.SLOWKING], + WULFRIC: [Species.BERGMITE, Species.SNOVER, Species.CRYOGONAL], + MILO: [Species.GOSSIFLEUR, Species.APPLIN, Species.BOUNSWEET], + NESSA: [Species.CHEWTLE, Species.ARROKUDA, Species.WIMPOD], + KABU: [Species.SIZZLIPEDE, Species.VULPIX, Species.TORKOAL], + BEA: [Species.GALAR_FARFETCHD, Species.MACHOP, Species.CLOBBOPUS], + ALLISTER: [Species.GALAR_YAMASK, Species.GALAR_CORSOLA, Species.GASTLY], + OPAL: [Species.MILCERY, Species.TOGETIC, Species.GALAR_WEEZING], + BEDE: [Species.HATENNA, Species.GALAR_PONYTA, Species.GARDEVOIR], + GORDIE: [Species.ROLYCOLY, Species.STONJOURNER, Species.BINACLE], + MELONY: [Species.SNOM, Species.GALAR_DARUMAKA, Species.GALAR_MR_MIME], + PIERS: [Species.GALAR_ZIGZAGOON, Species.SCRAGGY, Species.INKAY], + MARNIE: [Species.IMPIDIMP, Species.PURRLOIN, Species.MORPEKO], + RAIHAN: [Species.DURALUDON, Species.TURTONATOR, Species.GOOMY], + KATY: [Species.NYMBLE, Species.TAROUNTULA, Species.HERACROSS], + BRASSIUS: [Species.SMOLIV, Species.SHROOMISH, Species.ODDISH], + IONO: [Species.TADBULB, Species.WATTREL, Species.VOLTORB], + KOFU: [Species.VELUZA, Species.WIGLETT, Species.WINGULL], + LARRY: [Species.STARLY, Species.DUNSPARCE, Species.KOMALA], + RYME: [Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU], + TULIP: [Species.GIRAFARIG, Species.FLITTLE, Species.RALTS], + GRUSHA: [Species.CETODDLE, Species.ALOLA_VULPIX, Species.CUBCHOO], + LORELEI: [Species.JYNX, [Species.SLOWBRO, Species.GALAR_SLOWBRO], Species.LAPRAS, [Species.ALOLA_SANDSLASH, Species.CLOYSTER]], + BRUNO: [Species.MACHAMP, Species.HITMONCHAN, Species.HITMONLEE, [Species.ALOLA_GOLEM, Species.GOLEM]], + AGATHA: [Species.GENGAR, [Species.ARBOK, Species.WEEZING], Species.CROBAT, Species.ALOLA_MAROWAK], + LANCE: [Species.DRAGONITE, Species.GYARADOS, Species.AERODACTYL, Species.ALOLA_EXEGGUTOR], + WILL: [Species.XATU, Species.JYNX, [Species.SLOWBRO, Species.SLOWKING], Species.EXEGGUTOR], + KOGA: [[Species.WEEZING, Species.MUK], [Species.VENOMOTH, Species.ARIADOS], Species.CROBAT, Species.TENTACRUEL], + KAREN: [Species.UMBREON, Species.HONCHKROW, Species.HOUNDOOM, Species.WEAVILE], + SIDNEY: [[Species.SHIFTRY, Species.CACTURNE], [Species.SHARPEDO, Species.CRAWDAUNT], Species.ABSOL, Species.MIGHTYENA], + PHOEBE: [Species.SABLEYE, Species.DUSKNOIR, Species.BANETTE, [Species.MISMAGIUS, Species.DRIFBLIM]], + GLACIA: [Species.GLALIE, Species.WALREIN, Species.FROSLASS, Species.ABOMASNOW], + DRAKE: [Species.ALTARIA, Species.SALAMENCE, Species.FLYGON, Species.KINGDRA], + AARON: [[Species.SCIZOR, Species.KLEAVOR], Species.HERACROSS, [Species.VESPIQUEN, Species.YANMEGA], Species.DRAPION], + BERTHA: [Species.WHISCASH, Species.HIPPOWDON, Species.GLISCOR, Species.RHYPERIOR], + FLINT: [[Species.FLAREON, Species.RAPIDASH], Species.MAGMORTAR, [Species.STEELIX, Species.LOPUNNY], Species.INFERNAPE], + LUCIAN: [Species.MR_MIME, Species.GALLADE, Species.BRONZONG, [Species.ALAKAZAM, Species.ESPEON]], + SHAUNTAL: [Species.COFAGRIGUS, Species.CHANDELURE, Species.GOLURK, Species.JELLICENT], + MARSHAL: [Species.CONKELDURR, Species.MIENSHAO, Species.THROH, Species.SAWK], + GRIMSLEY: [Species.LIEPARD, Species.KINGAMBIT, Species.SCRAFTY, Species.KROOKODILE], + CAITLIN: [Species.MUSHARNA, Species.GOTHITELLE, Species.SIGILYPH, Species.REUNICLUS], + MALVA: [Species.PYROAR, Species.TORKOAL, Species.CHANDELURE, Species.TALONFLAME], + SIEBOLD: [Species.CLAWITZER, Species.GYARADOS, Species.BARBARACLE, Species.STARMIE], + WIKSTROM: [Species.KLEFKI, Species.PROBOPASS, Species.SCIZOR, Species.AEGISLASH], + DRASNA: [Species.DRAGALGE, Species.DRUDDIGON, Species.ALTARIA, Species.NOIVERN], + HALA: [Species.HARIYAMA, Species.BEWEAR, Species.CRABOMINABLE, [Species.POLIWRATH, Species.ANNIHILAPE]], + MOLAYNE: [Species.KLEFKI, Species.MAGNEZONE, Species.METAGROSS, Species.ALOLA_DUGTRIO], + OLIVIA: [Species.RELICANTH, Species.CARBINK, Species.ALOLA_GOLEM, Species.LYCANROC], + ACEROLA: [[Species.BANETTE, Species.DRIFBLIM], Species.MIMIKYU, Species.DHELMISE, Species.PALOSSAND], + KAHILI: [[Species.BRAVIARY, Species.MANDIBUZZ], Species.HAWLUCHA, Species.ORICORIO, Species.TOUCANNON], + MARNIE_ELITE: [Species.MORPEKO, Species.LIEPARD, [Species.TOXICROAK, Species.SCRAFTY], Species.GRIMMSNARL], + NESSA_ELITE: [Species.GOLISOPOD, [Species.PELIPPER, Species.QUAGSIRE], Species.TOXAPEX, Species.DREDNAW], + BEA_ELITE: [Species.HAWLUCHA, [Species.GRAPPLOCT, Species.SIRFETCHD], Species.FALINKS, Species.MACHAMP], + ALLISTER_ELITE: [Species.DUSKNOIR, [Species.POLTEAGEIST, Species.RUNERIGUS], Species.CURSOLA, Species.GENGAR], + RAIHAN_ELITE: [Species.GOODRA, [Species.TORKOAL, Species.TURTONATOR], Species.FLYGON, Species.ARCHALUDON], + RIKA: [Species.WHISCASH, [Species.DONPHAN, Species.DUGTRIO], Species.CAMERUPT, Species.CLODSIRE], + POPPY: [Species.COPPERAJAH, Species.BRONZONG, Species.CORVIKNIGHT, Species.TINKATON], + LARRY_ELITE: [Species.STARAPTOR, Species.FLAMIGO, Species.ALTARIA, Species.TROPIUS], + HASSEL: [Species.NOIVERN, [Species.FLAPPLE, Species.APPLETUN], Species.DRAGALGE, Species.BAXCALIBUR], + CRISPIN: [Species.TALONFLAME, Species.CAMERUPT, Species.MAGMORTAR, Species.BLAZIKEN], + AMARYS: [Species.SKARMORY, Species.EMPOLEON, Species.SCIZOR, Species.METAGROSS], + LACEY: [Species.EXCADRILL, Species.PRIMARINA, [Species.ALCREMIE, Species.GRANBULL], Species.WHIMSICOTT], + DRAYTON: [Species.DRAGONITE, Species.ARCHALUDON, Species.HAXORUS, Species.SCEPTILE], + BLUE: [[Species.GYARADOS, Species.EXEGGUTOR, Species.ARCANINE], Species.HO_OH, [Species.RHYPERIOR, Species.MAGNEZONE]], // Alakazam lead, Mega Pidgeot + RED: [Species.LUGIA, Species.SNORLAX, [Species.ESPEON, Species.UMBREON, Species.SYLVEON]], // GMax Pikachu lead, Mega gen 1 starter + LANCE_CHAMPION: [Species.DRAGONITE, Species.KINGDRA, Species.ALOLA_EXEGGUTOR], // Aerodactyl lead, Mega Latias/Latios + STEVEN: [Species.AGGRON, [Species.ARMALDO, Species.CRADILY], Species.DIALGA], // Skarmory lead, Mega Metagross + WALLACE: [Species.MILOTIC, Species.PALKIA, Species.LUDICOLO], // Pelipper lead, Mega Swampert + CYNTHIA: [Species.GIRATINA, Species.LUCARIO, Species.TOGEKISS], // Spiritomb lead, Mega Garchomp + ALDER: [Species.VOLCARONA, Species.ZEKROM, [Species.ACCELGOR, Species.ESCAVALIER], Species.KELDEO], // Bouffalant/Braviary lead + IRIS: [Species.HAXORUS, Species.RESHIRAM, Species.ARCHEOPS], // Druddigon lead, Gmax Lapras + DIANTHA: [Species.HAWLUCHA, Species.XERNEAS, Species.GOODRA], // Gourgeist lead, Mega Gardevoir + HAU: [[Species.SOLGALEO, Species.LUNALA], Species.NOIVERN, [Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA], [Species.TAPU_BULU, Species.TAPU_FINI, Species.TAPU_KOKO, Species.TAPU_LELE]], // Alola Raichu lead + LEON: [Species.DRAGAPULT, [Species.ZACIAN, Species.ZAMAZENTA], Species.AEGISLASH], // Rillaboom/Cinderace/Inteleon lead, GMax Charizard + GEETA: [Species.MIRAIDON, [Species.ESPATHRA, Species.VELUZA], [Species.AVALUGG, Species.HISUI_AVALUGG], Species.KINGAMBIT], // Glimmora lead + NEMONA: [Species.KORAIDON, Species.PAWMOT, [Species.DUDUNSPARCE, Species.ORTHWORM], [Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL]], // Lycanroc lead + KIERAN: [[Species.GRIMMSNARL, Species.INCINEROAR, Species.PORYGON_Z], Species.OGERPON, Species.TERAPAGOS, Species.HYDRAPPLE], // Poliwrath/Politoed lead +}; + +export const trainerConfigs: TrainerConfigs = { + [TrainerType.UNKNOWN]: new TrainerConfig(0).setHasGenders(), + [TrainerType.ACE_TRAINER]: new TrainerConfig(++t).setHasGenders("Ace Trainer Female").setHasDouble("Ace Duo").setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.ACE_TRAINER) + .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.THREE_WEAK_BALANCED, trainerPartyTemplates.FOUR_WEAK_BALANCED, trainerPartyTemplates.FIVE_WEAK_BALANCED, trainerPartyTemplates.SIX_WEAK_BALANCED)), + [TrainerType.ARTIST]: new TrainerConfig(++t).setEncounterBgm(TrainerType.RICH).setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.THREE_AVG) + .setSpeciesPools([Species.SMEARGLE]), + [TrainerType.BACKERS]: new TrainerConfig(++t).setHasGenders("Backers").setDoubleOnly().setEncounterBgm(TrainerType.CYCLIST), + [TrainerType.BACKPACKER]: new TrainerConfig(++t).setHasGenders("Backpacker Female").setHasDouble("Backpackers").setSpeciesFilter(s => s.isOfType(Type.FLYING) || s.isOfType(Type.ROCK)).setEncounterBgm(TrainerType.BACKPACKER) + .setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.ONE_WEAK_ONE_STRONG, trainerPartyTemplates.ONE_AVG_ONE_STRONG) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.RHYHORN, Species.AIPOM, Species.MAKUHITA, Species.MAWILE, Species.NUMEL, Species.LILLIPUP, Species.SANDILE, Species.WOOLOO], + [TrainerPoolTier.UNCOMMON]: [Species.GIRAFARIG, Species.ZANGOOSE, Species.SEVIPER, Species.CUBCHOO, Species.PANCHAM, Species.SKIDDO, Species.MUDBRAY], + [TrainerPoolTier.RARE]: [Species.TAUROS, Species.STANTLER, Species.DARUMAKA, Species.BOUFFALANT, Species.DEERLING, Species.IMPIDIMP], + [TrainerPoolTier.SUPER_RARE]: [Species.GALAR_DARUMAKA, Species.TEDDIURSA] + }), + [TrainerType.BAKER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setMoneyMultiplier(1.35).setSpeciesFilter(s => s.isOfType(Type.GRASS) || s.isOfType(Type.FIRE)), + [TrainerType.BEAUTY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY), + [TrainerType.BIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.POISON)), + [TrainerType.BLACK_BELT]: new TrainerConfig(++t).setHasGenders("Battle Girl", TrainerType.PSYCHIC).setHasDouble("Crush Kin").setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyTypes(Type.FIGHTING) + .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_STRONG, trainerPartyTemplates.THREE_AVG, trainerPartyTemplates.TWO_AVG_ONE_STRONG) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.NIDORAN_F, Species.NIDORAN_M, Species.MACHOP, Species.MAKUHITA, Species.MEDITITE, Species.CROAGUNK, Species.TIMBURR], + [TrainerPoolTier.UNCOMMON]: [Species.MANKEY, Species.POLIWRATH, Species.TYROGUE, Species.BRELOOM, Species.SCRAGGY, Species.MIENFOO, Species.PANCHAM, Species.STUFFUL, Species.CRABRAWLER], + [TrainerPoolTier.RARE]: [Species.HERACROSS, Species.RIOLU, Species.THROH, Species.SAWK, Species.PASSIMIAN, Species.CLOBBOPUS], + [TrainerPoolTier.SUPER_RARE]: [Species.HITMONTOP, Species.INFERNAPE, Species.GALLADE, Species.HAWLUCHA, Species.HAKAMO_O], + [TrainerPoolTier.ULTRA_RARE]: [Species.KUBFU] + }), + [TrainerType.BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(1.325).setEncounterBgm(TrainerType.POKEFAN).setHasGenders("Breeder Female").setHasDouble("Breeders") + .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.FIVE_WEAKER, trainerPartyTemplates.SIX_WEAKER)) + .setSpeciesFilter(s => s.baseTotal < 450), + [TrainerType.CLERK]: new TrainerConfig(++t).setHasGenders("Clerk Female").setHasDouble("Colleagues").setEncounterBgm(TrainerType.CLERK) + .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.MEOWTH, Species.PSYDUCK, Species.BUDEW, Species.PIDOVE, Species.CINCCINO, Species.LITLEO], + [TrainerPoolTier.UNCOMMON]: [Species.JIGGLYPUFF, Species.MAGNEMITE, Species.MARILL, Species.COTTONEE, Species.SKIDDO], + [TrainerPoolTier.RARE]: [Species.BUIZEL, Species.SNEASEL, Species.KLEFKI, Species.INDEEDEE] + }), + [TrainerType.CYCLIST]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setHasGenders("Cyclist Female").setHasDouble("Cyclists").setEncounterBgm(TrainerType.CYCLIST) + .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.PICHU, Species.STARLY, Species.TAILLOW, Species.BOLTUND], + [TrainerPoolTier.UNCOMMON]: [Species.DODUO, Species.ELECTRIKE, Species.BLITZLE, Species.WATTREL], + [TrainerPoolTier.RARE]: [Species.YANMA, Species.NINJASK, Species.WHIRLIPEDE, Species.EMOLGA], + [TrainerPoolTier.SUPER_RARE]: [Species.ACCELGOR, Species.DREEPY] + }), + [TrainerType.DANCER]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.CYCLIST) + .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_TWO_WEAK_SAME) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.RALTS, Species.SPOINK, Species.LOTAD, Species.BUDEW], + [TrainerPoolTier.UNCOMMON]: [Species.SPINDA, Species.SWABLU, Species.MARACTUS,], + [TrainerPoolTier.RARE]: [Species.BELLOSSOM, Species.HITMONTOP, Species.MIME_JR, Species.ORICORIO], + [TrainerPoolTier.SUPER_RARE]: [Species.POPPLIO] + }), + [TrainerType.DEPOT_AGENT]: new TrainerConfig(++t).setMoneyMultiplier(1.45).setEncounterBgm(TrainerType.CLERK), + [TrainerType.DOCTOR]: new TrainerConfig(++t).setHasGenders("Nurse", "lass").setHasDouble("Medical Team").setMoneyMultiplier(3).setEncounterBgm(TrainerType.CLERK) + .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.HEAL_PULSE)), + [TrainerType.FIREBREATHER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK) + .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SMOG) || s.isOfType(Type.FIRE)), + [TrainerType.FISHERMAN]: new TrainerConfig(++t).setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.BACKPACKER).setSpecialtyTypes(Type.WATER) + .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.THREE_WEAK_SAME, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.SIX_WEAKER) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.TENTACOOL, Species.MAGIKARP, Species.GOLDEEN, Species.STARYU, Species.REMORAID, Species.SKRELP, Species.CLAUNCHER, Species.ARROKUDA], + [TrainerPoolTier.UNCOMMON]: [Species.POLIWAG, Species.SHELLDER, Species.KRABBY, Species.HORSEA, Species.CARVANHA, Species.BARBOACH, Species.CORPHISH, Species.FINNEON, Species.TYMPOLE, Species.BASCULIN, Species.FRILLISH, Species.INKAY], + [TrainerPoolTier.RARE]: [Species.CHINCHOU, Species.CORSOLA, Species.WAILMER, Species.BARBOACH, Species.CLAMPERL, Species.LUVDISC, Species.MANTYKE, Species.ALOMOMOLA, Species.TATSUGIRI, Species.VELUZA], + [TrainerPoolTier.SUPER_RARE]: [Species.LAPRAS, Species.FEEBAS, Species.RELICANTH, Species.DONDOZO] + }), + [TrainerType.GUITARIST]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyTypes(Type.ELECTRIC).setSpeciesFilter(s => s.isOfType(Type.ELECTRIC)), + [TrainerType.HARLEQUIN]: new TrainerConfig(++t).setEncounterBgm(TrainerType.PSYCHIC).setSpeciesFilter(s => tmSpecies[Moves.TRICK_ROOM].indexOf(s.speciesId) > -1), + [TrainerType.HIKER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.BACKPACKER) + .setPartyTemplates(trainerPartyTemplates.TWO_AVG_SAME_ONE_AVG, trainerPartyTemplates.TWO_AVG_SAME_ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.FOUR_WEAK, trainerPartyTemplates.ONE_STRONG) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.SANDSHREW, Species.DIGLETT, Species.GEODUDE, Species.MACHOP, Species.ARON, Species.ROGGENROLA, Species.DRILBUR, Species.NACLI], + [TrainerPoolTier.UNCOMMON]: [Species.ZUBAT, Species.RHYHORN, Species.ONIX, Species.CUBONE, Species.WOOBAT, Species.SWINUB, Species.NOSEPASS, Species.HIPPOPOTAS, Species.DWEBBLE, Species.KLAWF, Species.TOEDSCOOL], + [TrainerPoolTier.RARE]: [Species.TORKOAL, Species.TRAPINCH, Species.BARBOACH, Species.GOLETT, Species.ALOLA_DIGLETT, Species.ALOLA_GEODUDE, Species.GALAR_STUNFISK, Species.PALDEA_WOOPER], + [TrainerPoolTier.SUPER_RARE]: [Species.MAGBY, Species.LARVITAR] + }), + [TrainerType.HOOLIGANS]: new TrainerConfig(++t).setDoubleOnly().setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.POISON) || s.isOfType(Type.DARK)), + [TrainerType.HOOPSTER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), + [TrainerType.INFIELDER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), + [TrainerType.JANITOR]: new TrainerConfig(++t).setMoneyMultiplier(1.1).setEncounterBgm(TrainerType.CLERK), + [TrainerType.LINEBACKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), + [TrainerType.MAID]: new TrainerConfig(++t).setMoneyMultiplier(1.6).setEncounterBgm(TrainerType.RICH), + [TrainerType.MUSICIAN]: new TrainerConfig(++t).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SING)), + [TrainerType.HEX_MANIAC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PSYCHIC) + .setPartyTemplates(trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.ONE_AVG_ONE_STRONG, trainerPartyTemplates.TWO_AVG_SAME_ONE_AVG, trainerPartyTemplates.THREE_AVG, trainerPartyTemplates.TWO_STRONG) + .setSpeciesFilter(s => s.isOfType(Type.GHOST)), + [TrainerType.NURSERY_AIDE]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm("lass"), + [TrainerType.OFFICER]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.CLERK) + .setPartyTemplates(trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.VULPIX, Species.GROWLITHE, Species.SNUBBULL, Species.POOCHYENA, Species.ELECTRIKE, Species.LILLIPUP, Species.YAMPER, Species.FIDOUGH], + [TrainerPoolTier.UNCOMMON]: [Species.HOUNDOUR, Species.ROCKRUFF, Species.MASCHIFF], + [TrainerPoolTier.RARE]: [Species.JOLTEON, Species.RIOLU], + [TrainerPoolTier.SUPER_RARE]: [], + [TrainerPoolTier.ULTRA_RARE]: [Species.ENTEI, Species.SUICUNE, Species.RAIKOU] + }), + [TrainerType.PARASOL_LADY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY).setSpeciesFilter(s => s.isOfType(Type.WATER)), + [TrainerType.PILOT]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1), + [TrainerType.POKEFAN]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setName("PokéFan").setHasGenders("PokéFan Female").setHasDouble("PokéFan Family").setEncounterBgm(TrainerType.POKEFAN) + .setPartyTemplates(trainerPartyTemplates.SIX_WEAKER, trainerPartyTemplates.FOUR_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.FOUR_WEAK_SAME, trainerPartyTemplates.FIVE_WEAK, trainerPartyTemplates.SIX_WEAKER_SAME), + [TrainerType.PRESCHOOLER]: new TrainerConfig(++t).setMoneyMultiplier(0.2).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("Preschooler Female", "lass").setHasDouble("Preschoolers") + .setPartyTemplates(trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.FIVE_WEAKER) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.CATERPIE, Species.PICHU, Species.SANDSHREW, Species.LEDYBA, Species.BUDEW, Species.BURMY, Species.WOOLOO, Species.PAWMI, Species.SMOLIV], + [TrainerPoolTier.UNCOMMON]: [Species.EEVEE, Species.CLEFFA, Species.IGGLYBUFF, Species.SWINUB, Species.WOOPER, Species.DRIFLOON, Species.DEDENNE, Species.STUFFUL], + [TrainerPoolTier.RARE]: [Species.RALTS, Species.RIOLU, Species.JOLTIK, Species.TANDEMAUS], + [TrainerPoolTier.SUPER_RARE]: [Species.DARUMAKA, Species.TINKATINK], + }), + [TrainerType.PSYCHIC]: new TrainerConfig(++t).setHasGenders("Psychic Female").setHasDouble("Psychics").setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.PSYCHIC) + .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.TWO_WEAK_SAME_TWO_WEAK_SAME, trainerPartyTemplates.ONE_STRONGER) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.ABRA, Species.DROWZEE, Species.RALTS, Species.SPOINK, Species.GOTHITA, Species.SOLOSIS, Species.BLIPBUG, Species.ESPURR, Species.HATENNA], + [TrainerPoolTier.UNCOMMON]: [Species.MIME_JR, Species.EXEGGCUTE, Species.MEDITITE, Species.NATU, Species.EXEGGCUTE, Species.WOOBAT, Species.INKAY, Species.ORANGURU], + [TrainerPoolTier.RARE]: [Species.ELGYEM, Species.SIGILYPH, Species.BALTOY, Species.GIRAFARIG, Species.MEOWSTIC], + [TrainerPoolTier.SUPER_RARE]: [Species.BELDUM, Species.ESPEON, Species.STANTLER], + }), + [TrainerType.RANGER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setName("Pokémon Ranger").setEncounterBgm(TrainerType.BACKPACKER).setHasGenders("Pokémon Ranger Female").setHasDouble("Pokémon Rangers") + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.PICHU, Species.GROWLITHE, Species.PONYTA, Species.ZIGZAGOON, Species.SEEDOT, Species.BIDOOF, Species.RIOLU, Species.SEWADDLE, Species.SKIDDO, Species.SALANDIT, Species.YAMPER], + [TrainerPoolTier.UNCOMMON]: [Species.AZURILL, Species.TAUROS, Species.MAREEP, Species.FARFETCHD, Species.TEDDIURSA, Species.SHROOMISH, Species.ELECTRIKE, Species.BUDEW, Species.BUIZEL, Species.MUDBRAY, Species.STUFFUL], + [TrainerPoolTier.RARE]: [Species.EEVEE, Species.SCYTHER, Species.KANGASKHAN, Species.RALTS, Species.MUNCHLAX, Species.ZORUA, Species.PALDEA_TAUROS, Species.TINKATINK, Species.CYCLIZAR, Species.FLAMIGO], + [TrainerPoolTier.SUPER_RARE]: [Species.LARVESTA], + }), + [TrainerType.RICH]: new TrainerConfig(++t).setMoneyMultiplier(5).setName("Gentleman").setHasGenders("Madame").setHasDouble("Rich Couple"), + [TrainerType.RICH_KID]: new TrainerConfig(++t).setMoneyMultiplier(3.75).setName("Rich Boy").setHasGenders("Lady").setHasDouble("Rich Kids").setEncounterBgm(TrainerType.RICH), + [TrainerType.ROUGHNECK]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.DARK)), + [TrainerType.SAILOR]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.BACKPACKER).setSpeciesFilter(s => s.isOfType(Type.WATER) || s.isOfType(Type.FIGHTING)), + [TrainerType.SCIENTIST]: new TrainerConfig(++t).setHasGenders("Scientist Female").setHasDouble("Scientists").setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.SCIENTIST) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.MAGNEMITE, Species.GRIMER, Species.DROWZEE, Species.VOLTORB, Species.KOFFING], + [TrainerPoolTier.UNCOMMON]: [Species.BALTOY, Species.BRONZOR, Species.FERROSEED, Species.KLINK, Species.CHARJABUG, Species.BLIPBUG, Species.HELIOPTILE], + [TrainerPoolTier.RARE]: [Species.ABRA, Species.DITTO, Species.PORYGON, Species.ELEKID, Species.SOLOSIS, Species.GALAR_WEEZING], + [TrainerPoolTier.SUPER_RARE]: [Species.OMANYTE, Species.KABUTO, Species.AERODACTYL, Species.LILEEP, Species.ANORITH, Species.CRANIDOS, Species.SHIELDON, Species.TIRTOUGA, Species.ARCHEN, Species.ARCTOVISH, Species.ARCTOZOLT, Species.DRACOVISH, Species.DRACOZOLT], + [TrainerPoolTier.ULTRA_RARE]: [Species.ROTOM, Species.MELTAN] + }), + [TrainerType.SMASHER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), + [TrainerType.SNOW_WORKER]: new TrainerConfig(++t).setName("Worker").setHasGenders("Worker Female").setHasDouble("Workers").setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => s.isOfType(Type.ICE) || s.isOfType(Type.STEEL)), + [TrainerType.STRIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), + [TrainerType.SCHOOL_KID]: new TrainerConfig(++t).setMoneyMultiplier(0.75).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("School Kid Female", "lass").setHasDouble("School Kids") + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.ODDISH, Species.EXEGGCUTE, Species.TEDDIURSA, Species.WURMPLE, Species.RALTS, Species.SHROOMISH, Species.FLETCHLING], + [TrainerPoolTier.UNCOMMON]: [Species.VOLTORB, Species.WHISMUR, Species.MEDITITE, Species.MIME_JR, Species.NYMBLE], + [TrainerPoolTier.RARE]: [Species.TANGELA, Species.EEVEE, Species.YANMA], + [TrainerPoolTier.SUPER_RARE]: [Species.TADBULB] + }), + [TrainerType.SWIMMER]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm(TrainerType.PARASOL_LADY).setHasGenders("Swimmer Female").setHasDouble("Swimmers").setSpecialtyTypes(Type.WATER).setSpeciesFilter(s => s.isOfType(Type.WATER)), + [TrainerType.TWINS]: new TrainerConfig(++t).setDoubleOnly().setMoneyMultiplier(0.65).setUseSameSeedForAllMembers() + .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_STRONG)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PLUSLE, Species.VOLBEAT, Species.PACHIRISU, Species.SILCOON, Species.METAPOD, Species.IGGLYBUFF, Species.PETILIL, Species.EEVEE])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.MINUN, Species.ILLUMISE, Species.EMOLGA, Species.CASCOON, Species.KAKUNA, Species.CLEFFA, Species.COTTONEE, Species.EEVEE], TrainerSlot.TRAINER_PARTNER)) + .setEncounterBgm(TrainerType.TWINS), + [TrainerType.VETERAN]: new TrainerConfig(++t).setHasGenders("Veteran Female").setHasDouble("Veteran Duo").setMoneyMultiplier(2.5).setEncounterBgm(TrainerType.ACE_TRAINER).setSpeciesFilter(s => s.isOfType(Type.DRAGON)), + [TrainerType.WAITER]: new TrainerConfig(++t).setHasGenders("Waitress").setHasDouble("Restaurant Staff").setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.CLERK) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.CLEFFA, Species.CHATOT, Species.PANSAGE, Species.PANSEAR, Species.PANPOUR, Species.MINCCINO], + [TrainerPoolTier.UNCOMMON]: [Species.TROPIUS, Species.PETILIL, Species.BOUNSWEET, Species.INDEEDEE], + [TrainerPoolTier.RARE]: [Species.APPLIN, Species.SINISTEA, Species.POLTCHAGEIST] + }), + [TrainerType.WORKER]: new TrainerConfig(++t).setHasGenders("Worker Female").setHasDouble("Workers").setEncounterBgm(TrainerType.CLERK).setMoneyMultiplier(1.7).setSpeciesFilter(s => s.isOfType(Type.ROCK) || s.isOfType(Type.STEEL)), + [TrainerType.YOUNGSTER]: new TrainerConfig(++t).setMoneyMultiplier(0.5).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("Lass", "lass").setHasDouble("Beginners").setPartyTemplates(trainerPartyTemplates.TWO_WEAKER) + .setSpeciesPools( + [Species.CATERPIE, Species.WEEDLE, Species.RATTATA, Species.SENTRET, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.BIDOOF, Species.PATRAT, Species.LILLIPUP] + ), + [TrainerType.ROCKET_GRUNT]: new TrainerConfig(++t).setHasGenders("Rocket Grunt Female").setHasDouble("Rocket Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.WEEDLE, Species.RATTATA, Species.EKANS, Species.SANDSHREW, Species.ZUBAT, Species.GEODUDE, Species.KOFFING, Species.GRIMER, Species.ODDISH], + [TrainerPoolTier.UNCOMMON]: [Species.GYARADOS, Species.TAUROS, Species.SCYTHER, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB], + [TrainerPoolTier.RARE]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE], + [TrainerPoolTier.SUPER_RARE]: [Species.DRATINI, Species.LARVITAR] + }), + [TrainerType.ARCHER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.HOUNDOOM]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.ARIANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin_female", "rocket", [Species.ARBOK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.PROTON]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.CROBAT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.PETREL]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.WEEZING]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.BALTOY, Species.BARBOACH], + [TrainerPoolTier.UNCOMMON]: [Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR], + [TrainerPoolTier.RARE]: [Species.TRAPINCH, Species.HEATMOR], + [TrainerPoolTier.SUPER_RARE]: [Species.CAPSAKID, Species.CHARCADET] + }), + [TrainerType.TABITHA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.COURTNEY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin_female", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders("Aqua Grunt Female").setHasDouble("Aqua Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL], + [TrainerPoolTier.UNCOMMON]: [Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.QWILFISH], + [TrainerPoolTier.RARE]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA], + [TrainerPoolTier.SUPER_RARE]: [Species.DONDOZO] + }), + [TrainerType.MATT]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin", "aqua", [Species.SHARPEDO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.SHELLY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin_female", "aqua", [Species.SHARPEDO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.GALACTIC_GRUNT]: new TrainerConfig(++t).setHasGenders("Galactic Grunt Female").setHasDouble("Galactic Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE, Species.BRONZOR, Species.DRIFLOON, Species.BURMY], + [TrainerPoolTier.UNCOMMON]: [Species.CARNIVINE, Species.GROWLITHE, Species.QWILFISH, Species.SNEASEL], + [TrainerPoolTier.RARE]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL], + [TrainerPoolTier.SUPER_RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO] + }), + [TrainerType.JUPITER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.SKUNTANK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.MARS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.PURUGLY]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.SATURN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander", "galactic", [Species.TOXICROAK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH], + [TrainerPoolTier.UNCOMMON]: [Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.AMOONGUSS], + [TrainerPoolTier.RARE]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK], + [TrainerPoolTier.SUPER_RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, Species.AXEW, Species.DEINO, Species.DURANT] + }), + [TrainerType.ZINZOLIN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.CRYOGONAL]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.ROOD]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.SWOOBAT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK], + [TrainerPoolTier.UNCOMMON]: [Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.GULPIN, Species.PURRLOIN, Species.POOCHYENA, Species.SCATTERBUG], + [TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD], + [TrainerPoolTier.SUPER_RARE]: [Species.NOIVERN, Species.DRUDDIGON] + }), + [TrainerType.BRYONY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin_female", "flare", [Species.LIEPARD]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.XEROSIC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin", "flare", [Species.MALAMAR]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.AETHER_GRUNT]: new TrainerConfig(++t).setHasGenders("Aether Grunt Female").setHasDouble("Aether Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [ Species.PIKIPEK, Species.ROCKRUFF, Species.ALOLA_DIGLETT, Species.YUNGOOS, Species.CORSOLA, Species.ALOLA_GEODUDE, Species.BOUNSWEET, Species.LILLIPUP, Species.ALOLA_MAROWAK], + [TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.STUFFUL, Species.ALOLA_EXEGGUTOR, Species.CRABRAWLER, Species.CUTIEFLY, Species.ALOLA_RAICHU, Species.ORICORIO, Species.MUDBRAY], + [TrainerPoolTier.RARE]: [ Species.ORANGURU, Species.PASSIMIAN, Species.GALAR_CORSOLA, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.TURTONATOR, Species.DRAMPA], + [TrainerPoolTier.SUPER_RARE]: [Species.JANGMO_O, Species.PORYGON] + }), + [TrainerType.FABA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aether_admin", "aether", [Species.HYPNO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.SKULL_GRUNT]: new TrainerConfig(++t).setHasGenders("Skull Grunt Female").setHasDouble("Skull Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [ Species.SALANDIT, Species.ALOLA_RATTATA, Species.ALOLA_MEOWTH, Species.SCRAGGY, Species.KOFFING, Species.ALOLA_GRIMER, Species.MAREANIE, Species.SPINARAK, Species.TRUBBISH], + [TrainerPoolTier.UNCOMMON]: [ Species.FOMANTIS, Species.SABLEYE, Species.SANDILE, Species.ALOLA_MAROWAK, Species.PANCHAM, Species.DROWZEE, Species.ZUBAT, Species.VENIPEDE, Species.VULLABY], + [TrainerPoolTier.RARE]: [Species.SANDYGAST, Species.PAWNIARD, Species.MIMIKYU, Species.DHELMISE, Species.GASTLY, Species.WISHIWASHI], + [TrainerPoolTier.SUPER_RARE]: [Species.GRUBBIN, Species.DEWPIDER] + }), + [TrainerType.PLUMERIA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("skull_admin", "skull", [Species.SALAZZLE]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.MACRO_GRUNT]: new TrainerConfig(++t).setHasGenders("Macro Grunt Female").setHasDouble("Macro Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_macro_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [ Species.CUFANT, Species.GALAR_MEOWTH, Species.KLINK, Species.ROOKIDEE, Species.CRAMORANT, Species.GALAR_ZIGZAGOON, Species.SKWOVET, Species.STEELIX, Species.MAWILE, Species.FERROSEED], + [TrainerPoolTier.UNCOMMON]: [ Species.DRILBUR, Species.MAGNEMITE, Species.HATENNA, Species.ARROKUDA, Species.APPLIN, Species.GALAR_PONYTA, Species.GALAR_YAMASK, Species.SINISTEA, Species.RIOLU], + [TrainerPoolTier.RARE]: [Species.FALINKS, Species.BELDUM, Species.GALAR_FARFETCHD, Species.GALAR_MR_MIME, Species.HONEDGE, Species.SCIZOR, Species.GALAR_DARUMAKA], + [TrainerPoolTier.SUPER_RARE]: [Species.DURALUDON, Species.DREEPY] + }), + [TrainerType.OLEANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("macro_admin", "macro", [Species.GARBODOR]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_oleana").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + + [TrainerType.BROCK]: new TrainerConfig((t = TrainerType.BROCK)).initForGymLeader(signatureSpecies["BROCK"], true, Type.ROCK).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.MISTY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MISTY"], false, Type.WATER).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.LT_SURGE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LT_SURGE"], true, Type.ELECTRIC).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.ERIKA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ERIKA"], false, Type.GRASS).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.JANINE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["JANINE"], false, Type.POISON).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.SABRINA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["SABRINA"], false, Type.PSYCHIC).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.BLAINE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BLAINE"], true, Type.FIRE).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.GIOVANNI]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GIOVANNI"], true, Type.DARK).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.FALKNER]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["FALKNER"], true, Type.FLYING).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.BUGSY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BUGSY"], true, Type.BUG).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.WHITNEY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WHITNEY"], false, Type.NORMAL).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.MORTY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MORTY"], true, Type.GHOST).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.CHUCK]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CHUCK"], true, Type.FIGHTING).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.JASMINE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["JASMINE"], false, Type.STEEL).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.PRYCE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["PRYCE"], true, Type.ICE).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.CLAIR]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CLAIR"], false, Type.DRAGON).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.ROXANNE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ROXANNE"], false, Type.ROCK).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.BRAWLY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRAWLY"], true, Type.FIGHTING).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.WATTSON]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WATTSON"], true, Type.ELECTRIC).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.FLANNERY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["FLANNERY"], false, Type.FIRE).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.NORMAN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["NORMAN"], true, Type.NORMAL).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.WINONA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["WINONA"], false, Type.FLYING).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.TATE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["TATE"], true, Type.PSYCHIC).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym").setHasDouble("tate_liza_double").setDoubleTrainerType(TrainerType.LIZA).setDoubleTitle("gym_leader_double"), + [TrainerType.LIZA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LIZA"], false, Type.PSYCHIC).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym").setHasDouble("liza_tate_double").setDoubleTrainerType(TrainerType.TATE).setDoubleTitle("gym_leader_double"), + [TrainerType.JUAN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["JUAN"], true, Type.WATER).setBattleBgm("battle_hoenn_gym").setMixedBattleBgm("battle_hoenn_gym"), + [TrainerType.ROARK]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ROARK"], true, Type.ROCK).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.GARDENIA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["GARDENIA"], false, Type.GRASS).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.MAYLENE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MAYLENE"], false, Type.FIGHTING).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.CRASHER_WAKE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CRASHER_WAKE"], true, Type.WATER).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.FANTINA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["FANTINA"], false, Type.GHOST).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.BYRON]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BYRON"], true, Type.STEEL).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.CANDICE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CANDICE"], false, Type.ICE).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.VOLKNER]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["VOLKNER"], true, Type.ELECTRIC).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.CILAN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CILAN"], true, Type.GRASS).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.CHILI]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CHILI"], true, Type.FIRE).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.CRESS]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CRESS"], true, Type.WATER).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.CHEREN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CHEREN"], true, Type.NORMAL).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.LENORA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LENORA"], false, Type.NORMAL).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.ROXIE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ROXIE"], false, Type.POISON).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.BURGH]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BURGH"], true, Type.BUG).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.ELESA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["ELESA"], false, Type.ELECTRIC).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.CLAY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["CLAY"], true, Type.GROUND).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.SKYLA]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["SKYLA"], false, Type.FLYING).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.BRYCEN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["BRYCEN"], true, Type.ICE).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.DRAYDEN]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["DRAYDEN"], true, Type.DRAGON).setMixedBattleBgm("battle_unova_gym"), + [TrainerType.MARLON]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MARLON"], true, Type.WATER).setMixedBattleBgm("battle_unova_gym"), + [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).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.BRUNO]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BRUNO"], true, Type.FIGHTING).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.AGATHA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["AGATHA"], false, Type.GHOST).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.LANCE]: new TrainerConfig(++t).setName("Lance").initForEliteFour(signatureSpecies["LANCE"], true, Type.DRAGON).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), + [TrainerType.WILL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["WILL"], true, Type.PSYCHIC).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.KOGA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KOGA"], true, Type.POISON).setBattleBgm("battle_johto_gym").setMixedBattleBgm("battle_johto_gym"), + [TrainerType.KAREN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["KAREN"], false, Type.DARK).setBattleBgm("battle_johto_gym").setMixedBattleBgm("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").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.BERTHA]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["BERTHA"], false, Type.GROUND).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.FLINT]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["FLINT"], true, Type.FIRE).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.LUCIAN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["LUCIAN"], true, Type.PSYCHIC).setBattleBgm("battle_sinnoh_gym").setMixedBattleBgm("battle_sinnoh_gym"), + [TrainerType.SHAUNTAL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["SHAUNTAL"], false, Type.GHOST).setMixedBattleBgm("battle_unova_elite"), + [TrainerType.MARSHAL]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["MARSHAL"], true, Type.FIGHTING).setMixedBattleBgm("battle_unova_elite"), + [TrainerType.GRIMSLEY]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["GRIMSLEY"], true, Type.DARK).setMixedBattleBgm("battle_unova_elite"), + [TrainerType.CAITLIN]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["CAITLIN"], false, Type.PSYCHIC).setMixedBattleBgm("battle_unova_elite"), + [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").setMixedBattleBgm("battle_kanto_champion").setHasDouble("blue_red_double").setDoubleTrainerType(TrainerType.RED).setDoubleTitle("champion_double") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALAKAZAM], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.RED]: new TrainerConfig(++t).initForChampion(signatureSpecies["RED"], true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion").setHasDouble("red_blue_double").setDoubleTrainerType(TrainerType.BLUE).setDoubleTitle("champion_double") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PIKACHU], TrainerSlot.TRAINER, true, p => { + p.formIndex = 8; + p.generateAndPopulateMoveset(); + p.generateName(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.LANCE_CHAMPION]: new TrainerConfig(++t).setName("Lance").initForChampion(signatureSpecies["LANCE_CHAMPION"], true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.AERODACTYL], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LATIAS, Species.LATIOS], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.STEVEN]: new TrainerConfig(++t).initForChampion(signatureSpecies["STEVEN"], true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("steven_wallace_double").setDoubleTrainerType(TrainerType.WALLACE).setDoubleTitle("champion_double") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.WALLACE]: new TrainerConfig(++t).initForChampion(signatureSpecies["WALLACE"], true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("wallace_steven_double").setDoubleTrainerType(TrainerType.STEVEN).setDoubleTitle("champion_double") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 1; // Drizzle + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.SWAMPERT], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + })), + [TrainerType.CYNTHIA]: new TrainerConfig(++t).initForChampion(signatureSpecies["CYNTHIA"], false).setBattleBgm("battle_sinnoh_champion").setMixedBattleBgm("battle_sinnoh_champion") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SPIRITOMB], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GARCHOMP], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.ALDER]: new TrainerConfig(++t).initForChampion(signatureSpecies["ALDER"], true).setHasDouble("alder_iris_double").setDoubleTrainerType(TrainerType.IRIS).setDoubleTitle("champion_double").setBattleBgm("battle_champion_alder").setMixedBattleBgm("battle_champion_alder") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BOUFFALANT, Species.BRAVIARY], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })), + [TrainerType.IRIS]: new TrainerConfig(++t).initForChampion(signatureSpecies["IRIS"], false).setBattleBgm("battle_champion_iris").setMixedBattleBgm("battle_champion_iris").setHasDouble("iris_alder_double").setDoubleTrainerType(TrainerType.ALDER).setDoubleTitle("champion_double") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRUDDIGON], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [TrainerType.DIANTHA]: new TrainerConfig(++t).initForChampion(signatureSpecies["DIANTHA"], false).setMixedBattleBgm("battle_kalos_champion") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GOURGEIST], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GARDEVOIR], TrainerSlot.TRAINER, true, p => { + p.formIndex = 1; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [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).setMixedBattleBgm("battle_galar_champion") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.RILLABOOM, Species.CINDERACE, Species.INTELEON], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CHARIZARD], TrainerSlot.TRAINER, true, p => { + p.formIndex = 3; + p.generateAndPopulateMoveset(); + p.generateName(); + })), + [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).setMixedBattleBgm("battle_champion_nemona") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { + p.formIndex = 0; // Midday form + p.generateAndPopulateMoveset(); + })), + [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(); + })), + + [TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL) + .setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEY, Species.HOOTHOOT, Species.TAILLOW, Species.STARLY, Species.PIDOVE, Species.FLETCHLING, Species.PIKIPEK, Species.ROOKIDEE, Species.WATTREL], TrainerSlot.TRAINER, true)), + [TrainerType.RIVAL_2]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_2) + .setModifierRewardFuncs(() => modifierTypes.EXP_SHARE) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.IVYSAUR, Species.CHARMELEON, Species.WARTORTLE, Species.BAYLEEF, Species.QUILAVA, Species.CROCONAW, Species.GROVYLE, Species.COMBUSKEN, Species.MARSHTOMP, Species.GROTLE, Species.MONFERNO, Species.PRINPLUP, Species.SERVINE, Species.PIGNITE, Species.DEWOTT, Species.QUILLADIN, Species.BRAIXEN, Species.FROGADIER, Species.DARTRIX, Species.TORRACAT, Species.BRIONNE, Species.THWACKEY, Species.RABOOT, Species.DRIZZILE, Species.FLORAGATO, Species.CROCALOR, Species.QUAXWELL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOTTO, Species.HOOTHOOT, Species.TAILLOW, Species.STARAVIA, Species.TRANQUILL, Species.FLETCHINDER, Species.TRUMBEAK, Species.CORVISQUIRE, Species.WATTREL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)), + [TrainerType.RIVAL_3]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_3) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) + .setSpeciesFilter(species => species.baseTotal >= 540), + [TrainerType.RIVAL_4]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(1.75).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_2").setMixedBattleBgm("battle_rival_2").setPartyTemplates(trainerPartyTemplates.RIVAL_4) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) + .setSpeciesFilter(species => species.baseTotal >= 540) + .setGenModifiersFunc(party => { + const starter = party[0]; + return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; // TODO: is the bang correct? + }), + [TrainerType.RIVAL_5]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_5) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true, + p => p.setBoss(true, 2))) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) + .setSpeciesFilter(species => species.baseTotal >= 540) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.RAYQUAZA], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 3); + p.pokeball = PokeballType.MASTER_BALL; + p.shiny = true; + p.variant = 1; + })) + .setGenModifiersFunc(party => { + const starter = party[0]; + return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; //TODO: is the bang correct? + }), + [TrainerType.RIVAL_6]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(3).setEncounterBgm("final").setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_6) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true, + p => { + p.setBoss(true, 3); + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true, + p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) + .setSpeciesFilter(species => species.baseTotal >= 540) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.RAYQUAZA], TrainerSlot.TRAINER, true, p => { + p.setBoss(); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + p.shiny = true; + p.variant = 1; + p.formIndex = 1; + p.generateName(); + })) + .setGenModifiersFunc(party => { + const starter = party[0]; + return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; // TODO: is the bang correct? + }), + + [TrainerType.ROCKET_BOSS_GIOVANNI_1]: new TrainerConfig(t = TrainerType.ROCKET_BOSS_GIOVANNI_1).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", []).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PERSIAN, Species.ALOLA_PERSIAN])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.NIDOKING, Species.NIDOQUEEN])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.RHYPERIOR])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DUGTRIO, Species.ALOLA_DUGTRIO])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MAROWAK, Species.ALOLA_MAROWAK])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KANGASKHAN], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })), + [TrainerType.ROCKET_BOSS_GIOVANNI_2]: new TrainerConfig(++t).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", [], true).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.TYRANITAR, Species.IRON_THORNS], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HIPPOWDON])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.EXCADRILL])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.KANGASKHAN], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GASTRODON])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MEWTWO], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.MAXIE]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss", []).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MIGHTYENA])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CROBAT, Species.GLISCOR])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.WEEZING, Species.GALAR_WEEZING])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MAGMORTAR, Species.TORKOAL])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.FLYGON])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CAMERUPT], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })), + [TrainerType.MAXIE_2]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SOLROCK, Species.TYPHLOSION], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.TORKOAL, Species.NINETALES], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // DROUGHT + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SHIFTRY, Species.SCOVILLAIN], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 0; // Chlorophyll + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GREAT_TUSK])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CAMERUPT], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GROUDON], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.ARCHIE]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", []).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LINOONE])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CROBAT, Species.PELIPPER])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MUK, Species.ALOLA_MUK])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TENTACRUEL])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.RELICANTH, Species.WAILORD])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })), + [TrainerType.ARCHIE_2]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.EMPOLEON, Species.LUDICOLO], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.POLITOED, Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // Drizzle + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.BEARTIC, Species.ARMALDO], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // Swift Swim + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.OVERQWIL ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 1; // Swift Swim + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KYOGRE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.CYRUS]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss", []).setMixedBattleBgm("battle_galactic_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GYARADOS ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HONCHKROW, Species.HISUI_BRAVIARY ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CROBAT, Species.GLISCOR ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.WEAVILE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.CYRUS_2]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss", [], true).setMixedBattleBgm("battle_galactic_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.AZELF, Species.UXIE, Species.MESPRIT], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ELECTRODE, Species.HISUI_ELECTRODE])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SALAMENCE, Species.ROARING_MOON])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.WEAVILE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DARKRAI], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.GHETSIS]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss", []).setMixedBattleBgm("battle_plasma_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.COFAGRIGUS, Species.RUNERIGUS])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.BOUFFALANT])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SEISMITOAD, Species.CARRACOSTA])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EELEKTROSS, Species.GALVANTULA])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.VOLCARONA])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.HYDREIGON], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.GHETSIS_2]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss", [], true).setMixedBattleBgm("battle_plasma_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GENESECT ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + p.formIndex = Utils.randSeedInt(5); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BASCULEGION, Species.JELLICENT ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; + p.formIndex = 1; + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.KINGAMBIT ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.VOLCARONA, Species.SLITHER_WING ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HYDREIGON, Species.IRON_JUGULIS ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KYUREM], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.LYSANDRE]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss", []).setMixedBattleBgm("battle_flare_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.MIENSHAO ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HONCHKROW, Species.TALONFLAME ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.PYROAR ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CLAWITZER, Species.DRAGALGE ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HELIOLISK, Species.MALAMAR ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })), + [TrainerType.LYSANDRE_2]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss", [], true).setMixedBattleBgm("battle_flare_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SCREAM_TAIL, Species.FLUTTER_MANE], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PYROAR ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.IRON_MOTH ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GOODRA, Species.HISUI_GOODRA ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.YVELTAL], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.LUSAMINE]: new TrainerConfig(++t).setName("Lusamine").initForEvilTeamLeader("Aether Boss", []).setMixedBattleBgm("battle_aether_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLEFABLE ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.LILLIGANT, Species.HISUI_LILLIGANT ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.MILOTIC, Species.PRIMARINA ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.BEWEAR ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.NIHILEGO ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })), + [TrainerType.LUSAMINE_2]: new TrainerConfig(++t).setName("Lusamine").initForEvilTeamLeader("Aether Boss", [], true).setMixedBattleBgm("battle_aether_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLEFABLE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MILOTIC, Species.PRIMARINA ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.PHEROMOSA ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.STAKATAKA, Species.CELESTEELA, Species.GUZZLORD ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.NIHILEGO ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.NECROZMA ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.GUZMA]: new TrainerConfig(++t).setName("Guzma").initForEvilTeamLeader("Skull Boss", []).setMixedBattleBgm("battle_skull_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LOKIX, Species.YANMEGA ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HERACROSS ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALVANTULA, Species.VIKAVOLT])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GOLISOPOD ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })), + [TrainerType.GUZMA_2]: new TrainerConfig(++t).setName("Guzma").initForEvilTeamLeader("Skull Boss", [], true).setMixedBattleBgm("battle_skull_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GOLISOPOD ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; //Anticipation + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HISUI_SAMUROTT, Species.CRAWDAUNT ], TrainerSlot.TRAINER, true, p => { + p.abilityIndex = 2; //Sharpness, Adaptability + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.formIndex = 1; + p.generateName(); + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.BUZZWOLE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.XURKITREE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })), + [TrainerType.ROSE]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", []).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.FERROTHORN, Species.ESCAVALIER ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SIRFETCHD, Species.MR_RIME ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CORVIKNIGHT ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.PERRSERKER, Species.KLINKLANG ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.COPPERAJAH ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.formIndex = 1; + p.generateName(); + })), + [TrainerType.ROSE_2]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", [], true).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma") + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.AEGISLASH, Species.GHOLDENGO ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DRACOVISH, Species.DRACOZOLT ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 1; //Strong Jaw, Hustle + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MELMETAL ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GALAR_ARTICUNO, Species.GALAR_ZAPDOS, Species.GALAR_MOLTRES ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.COPPERAJAH ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.formIndex = 1; + p.generateName(); + })), +}; From f1111dc0d291b3861af770031bf0bcc377fa26da Mon Sep 17 00:00:00 2001 From: Frederico Santos Date: Fri, 30 Aug 2024 00:13:53 +0100 Subject: [PATCH 16/18] chore: Update AdminUiHandler to clear input fields and set mode to ADMIN --- src/ui/admin-ui-handler.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ui/admin-ui-handler.ts b/src/ui/admin-ui-handler.ts index 049e5b01cdf..0e5202fc1a8 100644 --- a/src/ui/admin-ui-handler.ts +++ b/src/ui/admin-ui-handler.ts @@ -66,11 +66,13 @@ export default class AdminUiHandler extends FormModalUiHandler { if (!response.ok) { console.error(response); } - this.scene.ui.revertMode(); + this.inputs[0].setText(""); + this.inputs[1].setText(""); + this.scene.ui.setMode(Mode.ADMIN); }) .catch((err) => { console.error(err); - this.scene.ui.revertMode(); + this.scene.ui.setMode(Mode.ADMIN); }); return false; }; From 7eb6ba4dfdf8b3c536685708f4b9f0618c33908f Mon Sep 17 00:00:00 2001 From: Frederico Santos Date: Fri, 30 Aug 2024 00:19:03 +0100 Subject: [PATCH 17/18] chore: Clear input fields and revert mode in AdminUiHandler --- src/ui/admin-ui-handler.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui/admin-ui-handler.ts b/src/ui/admin-ui-handler.ts index 0e5202fc1a8..141a4893714 100644 --- a/src/ui/admin-ui-handler.ts +++ b/src/ui/admin-ui-handler.ts @@ -68,10 +68,12 @@ export default class AdminUiHandler extends FormModalUiHandler { } this.inputs[0].setText(""); this.inputs[1].setText(""); + this.scene.ui.revertMode(); this.scene.ui.setMode(Mode.ADMIN); }) .catch((err) => { console.error(err); + this.scene.ui.revertMode(); this.scene.ui.setMode(Mode.ADMIN); }); return false; From f7169868f3b015c8046c5f959e5a3df02f241068 Mon Sep 17 00:00:00 2001 From: Frederico Santos Date: Fri, 30 Aug 2024 00:22:09 +0100 Subject: [PATCH 18/18] chore: Refactor AdminUiHandler to clear input fields and revert mode --- src/ui/admin-ui-handler.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ui/admin-ui-handler.ts b/src/ui/admin-ui-handler.ts index 141a4893714..5c91a36ab64 100644 --- a/src/ui/admin-ui-handler.ts +++ b/src/ui/admin-ui-handler.ts @@ -69,12 +69,10 @@ export default class AdminUiHandler extends FormModalUiHandler { this.inputs[0].setText(""); this.inputs[1].setText(""); this.scene.ui.revertMode(); - this.scene.ui.setMode(Mode.ADMIN); }) .catch((err) => { console.error(err); this.scene.ui.revertMode(); - this.scene.ui.setMode(Mode.ADMIN); }); return false; };