From 01eb05469a559670de1c4bf5804ddcd58f2fd0ad Mon Sep 17 00:00:00 2001 From: Opaque02 <66582645+Opaque02@users.noreply.github.com> Date: Fri, 6 Sep 2024 00:00:19 +1000 Subject: [PATCH 01/17] [QoL] Username finder (#4040) * Added the ability to potentially get username from login screen * Accidentally made dev login enforced :) * Updated image --- public/images/ui/legacy/settings_icon.png | Bin 0 -> 261 bytes public/images/ui/settings_icon.png | Bin 0 -> 261 bytes src/loading-scene.ts | 1 + src/ui/login-form-ui-handler.ts | 99 ++++++++++++++++++---- 4 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 public/images/ui/legacy/settings_icon.png create mode 100644 public/images/ui/settings_icon.png diff --git a/public/images/ui/legacy/settings_icon.png b/public/images/ui/legacy/settings_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..21680cce7fcdc15309a67cc2465c6e5ee921cd56 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^;vmey3?#3AQJDm!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h2Ka=yM#aRKnOgvPWpUylqnJyA{DS}gXSjZf7pRtjv%n*=n1O-sFbFdq z&tH)OQtIjA7@`q8x8G6dfC3NG+W++>lUrB3?3rE^5Mi=5d79fPJ0b5i2{Rw1tSB!m z3NO07uGwDm_Y=JXp$790MX=uY-Mle>j`Jgt-2z5oiPL@^w*Q>}UwC;Gh1;^xF5?nCq9p#v3_#E=aWDeFnGH9xvXk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h2Ka=yM#aRKnOgvPWpUylqnJyA{DS}gXSjZf7pRtjv%n*=n1O-sFbFdq z&tH)OQtIjA7@`q8x8G6dfC3NG+W++>lUrB3?3rE^5Mi=5d79fPJ0b5i2{Rw1tSB!m z3NO07uGwDm_Y=JXp$790MX=uY-Mle>j`Jgt-2z5oiPL@^w*Q>}UwC;Gh1;^xF5?nCq9p#v3_#E=aWDeFnGH9xvX { - const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/google/callback`); - const googleId = import.meta.env.VITE_GOOGLE_CLIENT_ID; - const googleUrl = `https://accounts.google.com/o/oauth2/auth?client_id=${googleId}&redirect_uri=${redirectUri}&response_type=code&scope=openid`; - window.open(googleUrl, "_self"); - }); this.googleImage = googleImage; const discordImage = this.scene.add.image(20, 0, "discord"); @@ -46,12 +46,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { discordImage.setScale(0.07); discordImage.setInteractive(); discordImage.setName("discord-icon"); - discordImage.on("pointerdown", () => { - const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/discord/callback`); - const discordId = import.meta.env.VITE_DISCORD_CLIENT_ID; - const discordUrl = `https://discord.com/api/oauth2/authorize?client_id=${discordId}&redirect_uri=${redirectUri}&response_type=code&scope=identify&prompt=none`; - window.open(discordUrl, "_self"); - }); + this.discordImage = discordImage; this.externalPartyContainer.add(this.googleImage); @@ -60,6 +55,17 @@ export default class LoginFormUiHandler extends FormModalUiHandler { this.externalPartyContainer.add(this.googleImage); this.externalPartyContainer.add(this.discordImage); this.externalPartyContainer.setVisible(false); + + const usernameInfoImage = this.scene.add.image(20, 0, "settings_icon"); + usernameInfoImage.setOrigin(0, 0); + usernameInfoImage.setScale(0.5); + usernameInfoImage.setInteractive(); + usernameInfoImage.setName("username-info-icon"); + this.usernameInfoImage = usernameInfoImage; + + this.infoContainer.add(this.usernameInfoImage); + this.getUi().add(this.infoContainer); + this.infoContainer.setVisible(false); } getModalTitle(config?: ModalConfig): string { @@ -104,9 +110,8 @@ export default class LoginFormUiHandler extends FormModalUiHandler { show(args: any[]): boolean { if (super.show(args)) { - this.processExternalProvider(); - const config = args[0] as ModalConfig; + this.processExternalProvider(config); const originalLoginAction = this.submitAction; this.submitAction = (_) => { // Prevent overlapping overrides on action modification @@ -146,22 +151,73 @@ export default class LoginFormUiHandler extends FormModalUiHandler { clear() { super.clear(); this.externalPartyContainer.setVisible(false); + this.infoContainer.setVisible(false); this.discordImage.off("pointerdown"); this.googleImage.off("pointerdown"); + this.usernameInfoImage.off("pointerdown"); } - processExternalProvider() : void { + processExternalProvider(config: ModalConfig) : void { this.externalPartyTitle.setText(i18next.t("menu:orUse") ?? ""); this.externalPartyTitle.setX(20+this.externalPartyTitle.text.length); this.externalPartyTitle.setVisible(true); this.externalPartyContainer.setPositionRelative(this.modalContainer, 175, 0); this.externalPartyContainer.setVisible(true); - this.externalPartyBg.setSize(this.externalPartyTitle.text.length+50, this.modalBg.height); + this.externalPartyBg.setSize(this.externalPartyTitle.text.length + 50, this.modalBg.height); this.getUi().moveTo(this.externalPartyContainer, this.getUi().length - 1); this.googleImage.setPosition(this.externalPartyBg.width/3.1, this.externalPartyBg.height-60); this.discordImage.setPosition(this.externalPartyBg.width/3.1, this.externalPartyBg.height-40); + this.infoContainer.setPosition(5, -76); + this.infoContainer.setVisible(true); + this.getUi().moveTo(this.infoContainer, this.getUi().length - 1); + this.usernameInfoImage.setPositionRelative(this.infoContainer, 0, 0); + + this.discordImage.on("pointerdown", () => { + const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/discord/callback`); + const discordId = import.meta.env.VITE_DISCORD_CLIENT_ID; + const discordUrl = `https://discord.com/api/oauth2/authorize?client_id=${discordId}&redirect_uri=${redirectUri}&response_type=code&scope=identify&prompt=none`; + window.open(discordUrl, "_self"); + }); + + this.googleImage.on("pointerdown", () => { + const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/google/callback`); + const googleId = import.meta.env.VITE_GOOGLE_CLIENT_ID; + const googleUrl = `https://accounts.google.com/o/oauth2/auth?client_id=${googleId}&redirect_uri=${redirectUri}&response_type=code&scope=openid`; + window.open(googleUrl, "_self"); + }); + + const onFail = error => { + this.scene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + this.scene.ui.setModeForceTransition(Mode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); + this.scene.ui.playError(); + }; + + this.usernameInfoImage.on("pointerdown", () => { + const localStorageKeys = Object.keys(localStorage); // this gets the keys for localStorage + const keyToFind = "data_"; + const dataKeys = localStorageKeys.filter(ls => ls.indexOf(keyToFind) >= 0); + if (dataKeys.length > 0 && dataKeys.length <= 2) { + const options: OptionSelectItem[] = []; + for (let i = 0; i < dataKeys.length; i++) { + options.push({ + label: dataKeys[i].replace(keyToFind, ""), + handler: () => { + this.scene.ui.revertMode(); + return true; + } + }); + } + this.scene.ui.setOverlayMode(Mode.OPTION_SELECT, { + options: options, + delay: 1000 + }); + } else { + return onFail("You have too many save files to use this"); + } + }); + this.externalPartyContainer.setAlpha(0); this.scene.tweens.add({ targets: this.externalPartyContainer, @@ -170,5 +226,14 @@ export default class LoginFormUiHandler extends FormModalUiHandler { y: "-=24", alpha: 1 }); + + this.infoContainer.setAlpha(0); + this.scene.tweens.add({ + targets: this.infoContainer, + duration: Utils.fixedInt(1000), + ease: "Sine.easeInOut", + y: "-=24", + alpha: 1 + }); } } From e2e5b2c34941a455388f1410db544e684baa393a Mon Sep 17 00:00:00 2001 From: Chapybara-jp Date: Thu, 5 Sep 2024 19:49:28 +0200 Subject: [PATCH 02/17] [Localisation] [JA] Translated remaining JA text files (#3999) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Localisation] [JA] Begun translation on arena-flyout.json * Added english names to bgm-name.json * Translated common.json * Added English dialogue-double-battle.json To make translation easier * Added English dialogue-final-boss.json * Added english dialogue-misc.json * Added English dialogue.json * Translated fight-ui-handler.json * Update filter-bar.json Changed 飴 to アメ for consistency with its spelling in Pokemon GO * Update game-stats-ui-handler.json changed 孵化 to ふか * Update growth.json Added kanji * Update menu-ui-handler.json changed 孵化 to ふか * Update modifier-type.json Changed name of IV Scanner to match with other files, the rest of the item descriptions need to be changed to Kanji as well. * Update modifier.json * Changed move-trigger.json Added kanji and new moves. * Update party-ui-handler.json Added kanji * Update pokemon-info-container.json Changed to Kanji * Translated pokemon-summary.json The metFragment formatting is taken from BW * Update run-history.json Corrected some misinterpretations. Added correct original line of "Welcome to Hall of Fame!" * Added english splash-messages.json * Update move-trigger.json * Update move-trigger.json * Update move-trigger.json * Update arena-flyout.json * Update move-trigger.json * Translated arena-flyout.json * Update weather.json * Update save-slot-select-ui-handler.json changed wave to ラウンド * Update game-stats-ui-handler.json * Update challenges.json * Update achv.json Corrected some mistakes, misspelling * Added some translations dialogue.json Youngster translation done Female rival dialogue done, needs check * Update dialogue.json * Update dialogue.json * Update dialogue.json * Update dialogue.json * Update dialogue.json --- src/locales/ja/achv.json | 14 +- src/locales/ja/arena-flyout.json | 44 +- src/locales/ja/bgm-name.json | 151 +- src/locales/ja/challenges.json | 2 +- src/locales/ja/common.json | 9 +- src/locales/ja/dialogue-double-battle.json | 85 +- src/locales/ja/dialogue-final-boss.json | 11 +- src/locales/ja/dialogue-misc.json | 7 +- src/locales/ja/dialogue.json | 2828 ++++++++++++++++- src/locales/ja/fight-ui-handler.json | 10 +- src/locales/ja/filter-bar.json | 4 +- src/locales/ja/game-stats-ui-handler.json | 12 +- src/locales/ja/growth.json | 14 +- src/locales/ja/menu-ui-handler.json | 4 +- src/locales/ja/modifier-type.json | 2 +- src/locales/ja/modifier.json | 10 +- src/locales/ja/move-trigger.json | 111 +- src/locales/ja/party-ui-handler.json | 12 +- src/locales/ja/pokemon-info-container.json | 12 +- src/locales/ja/pokemon-summary.json | 45 +- src/locales/ja/run-history.json | 10 +- .../ja/save-slot-select-ui-handler.json | 4 +- src/locales/ja/splash-messages.json | 37 +- src/locales/ja/weather.json | 16 +- 24 files changed, 3329 insertions(+), 125 deletions(-) diff --git a/src/locales/ja/achv.json b/src/locales/ja/achv.json index 182da0aed2e..fd5e4b9e6c4 100644 --- a/src/locales/ja/achv.json +++ b/src/locales/ja/achv.json @@ -37,7 +37,7 @@ "name_female": "ワンパンウーマン" }, "HealAchv": { - "description": "一つの 技や 特性や 持っているアイテムで\n{{healAmount}}{{HP}}を 一気に 回復する" + "description": "一つの 技や 特性や 持たせたアイテムで\n{{HP}}{{healAmount}}を 一気に 回復する" }, "250_HEAL": { "name": "回復発見者" @@ -52,7 +52,7 @@ "name": "ジョーイさん" }, "LevelAchv": { - "description": "一つの ポケモンを Lv{{level}}まで レベルアップする" + "description": "一つの ポケモンを Lv.{{level}}まで 上げる" }, "LV_100": { "name": "まだまだだよ" @@ -82,7 +82,7 @@ "name": "マスターリーグチャンピオン" }, "TRANSFER_MAX_STAT_STAGE": { - "name": "同力", + "name": "連係プレー", "description": "少なくとも 一つの 能力を 最大まで あげて\n他の 手持ちポケモンに バトンタッチする" }, "MAX_FRIENDSHIP": { @@ -94,7 +94,7 @@ "description": "一つの 手持ちポケモンを メガシンカさせる" }, "GIGANTAMAX": { - "name": "太―くて 堪らない", + "name": "太ーくて堪らない", "description": "一つの 手持ちポケモンを キョダイマックスさせる" }, "TERASTALLIZE": { @@ -106,7 +106,7 @@ "description": "一つの 手持ちポケモンを ステラ・テラスタルさせる" }, "SPLICE": { - "name": "インフィニット・フュジョン", + "name": "インフィニット・フュージョン", "description": "遺伝子のくさびで 二つの ポケモンを 吸収合体させる" }, "MINI_BLACK_HOLE": { @@ -205,7 +205,7 @@ "description": "{{type}}タイプの 単一タイプチャレンジを クリアする" }, "MONO_NORMAL": { - "name": "凡人" + "name": "超凡人" }, "MONO_FIGHTING": { "name": "八千以上だ!!" @@ -223,7 +223,7 @@ "name": "タケシの挑戦状" }, "MONO_BUG": { - "name": "チョウチョウせん者" + "name": "チョウチョウ戦者" }, "MONO_GHOST": { "name": "貞子ちゃん" diff --git a/src/locales/ja/arena-flyout.json b/src/locales/ja/arena-flyout.json index 9e26dfeeb6e..fa29b4567c5 100644 --- a/src/locales/ja/arena-flyout.json +++ b/src/locales/ja/arena-flyout.json @@ -1 +1,43 @@ -{} \ No newline at end of file +{ + "activeBattleEffects": "場の効果", + "player": "味方", + "neutral": "場の全員", + "enemy": "相手", + + "sunny": "晴れ", + "rain": "雨", + "sandstorm": "砂あらし", + "hail": "あられ", + "snow": "雪", + "fog": "きり", + "heavyRain": "強い雨", + "harshSun": "大日照り", + "strongWinds": "乱気流", + + "misty": "ミストフィールド", + "electric": "エレキフィールド", + "grassy": "グラスフィールド", + "psychic": "サイコフィールド", + + "mudSport": "どろあそび", + "waterSport": "みずあそび", + "spikes": "まきびし", + "toxicSpikes": "どくびし", + "mist": "しろいきり", + "futureSight": "みらいよち", + "doomDesire": "はめつのねがい", + "wish": "ねがいごと", + "stealthRock": "ステルスロック", + "stickyWeb": "ねばねばネット", + "trickRoom": "トリックルーム", + "gravity": "じゅうりょく", + "reflect": "リフレクター", + "lightScreen": "ひかりのかべ", + "auroraVeil": "オーロラベール", + "quickGuard": "ファストガード", + "wideGuard": "ワイドガード", + "matBlock": "たたみがえし", + "craftyShield": "トリックガード", + "tailwind": "おいかぜ", + "happyHour": "ハッピータイム" +} diff --git a/src/locales/ja/bgm-name.json b/src/locales/ja/bgm-name.json index 9e26dfeeb6e..8838942c8a6 100644 --- a/src/locales/ja/bgm-name.json +++ b/src/locales/ja/bgm-name.json @@ -1 +1,150 @@ -{} \ No newline at end of file +{ + "music": "Music: ", + "missing_entries": "{{name}}", + "battle_kanto_champion": "B2W2 Kanto Champion Battle", + "battle_johto_champion": "B2W2 Johto Champion Battle", + "battle_hoenn_champion_g5": "B2W2 Hoenn Champion Battle", + "battle_hoenn_champion_g6": "ORAS Hoenn Champion Battle", + "battle_sinnoh_champion": "B2W2 Sinnoh Champion Battle", + "battle_champion_alder": "BW Unova Champion Battle", + "battle_champion_iris": "B2W2 Unova Champion Battle", + "battle_kalos_champion": "XY Kalos Champion Battle", + "battle_alola_champion": "USUM Alola Champion Battle", + "battle_galar_champion": "SWSH Galar Champion Battle", + "battle_champion_geeta": "SV Champion Geeta Battle", + "battle_champion_nemona": "SV Champion Nemona Battle", + "battle_champion_kieran": "SV Champion Kieran Battle", + "battle_hoenn_elite": "ORAS Elite Four Battle", + "battle_unova_elite": "BW Elite Four Battle", + "battle_kalos_elite": "XY Elite Four Battle", + "battle_alola_elite": "SM Elite Four Battle", + "battle_galar_elite": "SWSH League Tournament Battle", + "battle_paldea_elite": "SV Elite Four Battle", + "battle_bb_elite": "SV BB League Elite Four Battle", + "battle_final_encounter": "PMD RTDX Rayquaza's Domain", + "battle_final": "BW Ghetsis Battle", + "battle_kanto_gym": "B2W2 Kanto Gym Battle", + "battle_johto_gym": "B2W2 Johto Gym Battle", + "battle_hoenn_gym": "B2W2 Hoenn Gym Battle", + "battle_sinnoh_gym": "B2W2 Sinnoh Gym Battle", + "battle_unova_gym": "BW Unova Gym Battle", + "battle_kalos_gym": "XY Kalos Gym Battle", + "battle_galar_gym": "SWSH Galar Gym Battle", + "battle_paldea_gym": "SV Paldea Gym Battle", + "battle_legendary_kanto": "XY Kanto Legendary Battle", + "battle_legendary_raikou": "HGSS Raikou Battle", + "battle_legendary_entei": "HGSS Entei Battle", + "battle_legendary_suicune": "HGSS Suicune Battle", + "battle_legendary_lugia": "HGSS Lugia Battle", + "battle_legendary_ho_oh": "HGSS Ho-oh Battle", + "battle_legendary_regis_g5": "B2W2 Legendary Titan Battle", + "battle_legendary_regis_g6": "ORAS Legendary Titan Battle", + "battle_legendary_gro_kyo": "ORAS Groudon & Kyogre Battle", + "battle_legendary_rayquaza": "ORAS Rayquaza Battle", + "battle_legendary_deoxys": "ORAS Deoxys Battle", + "battle_legendary_lake_trio": "ORAS Lake Guardians Battle", + "battle_legendary_sinnoh": "ORAS Sinnoh Legendary Battle", + "battle_legendary_dia_pal": "ORAS Dialga & Palkia Battle", + "battle_legendary_origin_forme": "LA Origin Dialga & Palkia Battle", + "battle_legendary_giratina": "ORAS Giratina Battle", + "battle_legendary_arceus": "HGSS Arceus Battle", + "battle_legendary_unova": "BW Unova Legendary Battle", + "battle_legendary_kyurem": "BW Kyurem Battle", + "battle_legendary_res_zek": "BW Reshiram & Zekrom Battle", + "battle_legendary_xern_yvel": "XY Xerneas & Yveltal Battle", + "battle_legendary_tapu": "SM Tapu Battle", + "battle_legendary_sol_lun": "SM Solgaleo & Lunala Battle", + "battle_legendary_ub": "SM Ultra Beast Battle", + "battle_legendary_dusk_dawn": "USUM Dusk Mane & Dawn Wings Necrozma Battle", + "battle_legendary_ultra_nec": "USUM Ultra Necrozma Battle", + "battle_legendary_zac_zam": "SWSH Zacian & Zamazenta Battle", + "battle_legendary_glas_spec": "SWSH Glastrier & Spectrier Battle", + "battle_legendary_calyrex": "SWSH Calyrex Battle", + "battle_legendary_riders": "SWSH Ice & Shadow Rider Calyrex Battle", + "battle_legendary_birds_galar": "SWSH Galarian Legendary Birds Battle", + "battle_legendary_ruinous": "SV Treasures of Ruin Battle", + "battle_legendary_kor_mir": "SV Depths of Area Zero Battle", + "battle_legendary_loyal_three": "SV Loyal Three Battle", + "battle_legendary_ogerpon": "SV Ogerpon Battle", + "battle_legendary_terapagos": "SV Terapagos Battle", + "battle_legendary_pecharunt": "SV Pecharunt Battle", + "battle_rival": "BW Rival Battle", + "battle_rival_2": "BW N Battle", + "battle_rival_3": "BW Final N Battle", + "battle_trainer": "BW Trainer Battle", + "battle_wild": "BW Wild Battle", + "battle_wild_strong": "BW Strong Wild Battle", + "end_summit": "PMD RTDX Sky Tower Summit", + "battle_rocket_grunt": "HGSS Team Rocket Battle", + "battle_aqua_magma_grunt": "ORAS Team Aqua & Magma Battle", + "battle_galactic_grunt": "BDSP Team Galactic Battle", + "battle_plasma_grunt": "BW Team Plasma Battle", + "battle_flare_grunt": "XY Team Flare Battle", + "battle_aether_grunt": "SM Aether Foundation Battle", + "battle_skull_grunt": "SM Team Skull Battle", + "battle_macro_grunt": "SWSH Trainer Battle", + "battle_galactic_admin": "BDSP Team Galactic Admin Battle", + "battle_skull_admin": "SM Team Skull Admin Battle", + "battle_oleana": "SWSH Oleana Battle", + "battle_rocket_boss": "USUM Giovanni Battle", + "battle_aqua_magma_boss": "ORAS Archie & Maxie Battle", + "battle_galactic_boss": "BDSP Cyrus Battle", + "battle_plasma_boss": "B2W2 Ghetsis Battle", + "battle_flare_boss": "XY Lysandre Battle", + "battle_aether_boss": "SM Lusamine Battle", + "battle_skull_boss": "SM Guzma Battle", + "battle_macro_boss": "SWSH Rose Battle", + + "abyss": "PMD EoS Dark Crater", + "badlands": "PMD EoS Barren Valley", + "beach": "PMD EoS Drenched Bluff", + "cave": "PMD EoS Sky Peak Cave", + "construction_site": "PMD EoS Boulder Quarry", + "desert": "PMD EoS Northern Desert", + "dojo": "PMD EoS Marowak Dojo", + "end": "PMD RTDX Sky Tower", + "factory": "PMD EoS Concealed Ruins", + "fairy_cave": "PMD EoS Star Cave", + "forest": "PMD EoS Dusk Forest", + "grass": "PMD EoS Apple Woods", + "graveyard": "PMD EoS Mystifying Forest", + "ice_cave": "PMD EoS Vast Ice Mountain", + "island": "PMD EoS Craggy Coast", + "jungle": "Lmz - Jungle", + "laboratory": "Firel - Laboratory", + "lake": "PMD EoS Crystal Cave", + "meadow": "PMD EoS Sky Peak Forest", + "metropolis": "Firel - Metropolis", + "mountain": "PMD EoS Mt. Horn", + "plains": "PMD EoS Sky Peak Prairie", + "power_plant": "PMD EoS Far Amp Plains", + "ruins": "PMD EoS Deep Sealed Ruin", + "sea": "Andr06 - Marine Mystique", + "seabed": "Firel - Seabed", + "slum": "Andr06 - Sneaky Snom", + "snowy_forest": "PMD EoS Sky Peak Snowfield", + "space": "Firel - Aether", + "swamp": "PMD EoS Surrounded Sea", + "tall_grass": "PMD EoS Foggy Forest", + "temple": "PMD EoS Aegis Cave", + "town": "PMD EoS Random Dungeon Theme 3", + "volcano": "PMD EoS Steam Cave", + "wasteland": "PMD EoS Hidden Highland", + "encounter_ace_trainer": "BW Trainers' Eyes Meet (Ace Trainer)", + "encounter_backpacker": "BW Trainers' Eyes Meet (Backpacker)", + "encounter_clerk": "BW Trainers' Eyes Meet (Clerk)", + "encounter_cyclist": "BW Trainers' Eyes Meet (Cyclist)", + "encounter_lass": "BW Trainers' Eyes Meet (Lass)", + "encounter_parasol_lady": "BW Trainers' Eyes Meet (Parasol Lady)", + "encounter_pokefan": "BW Trainers' Eyes Meet (Poke Fan)", + "encounter_psychic": "BW Trainers' Eyes Meet (Psychic)", + "encounter_rich": "BW Trainers' Eyes Meet (Gentleman)", + "encounter_rival": "BW Cheren", + "encounter_roughneck": "BW Trainers' Eyes Meet (Roughneck)", + "encounter_scientist": "BW Trainers' Eyes Meet (Scientist)", + "encounter_twins": "BW Trainers' Eyes Meet (Twins)", + "encounter_youngster": "BW Trainers' Eyes Meet (Youngster)", + "heal": "BW Pokémon Heal", + "menu": "PMD EoS Welcome to the World of Pokémon!", + "title": "PMD EoS Top Menu Theme" +} diff --git a/src/locales/ja/challenges.json b/src/locales/ja/challenges.json index 99c6e978d49..d137df14086 100644 --- a/src/locales/ja/challenges.json +++ b/src/locales/ja/challenges.json @@ -1,5 +1,5 @@ { - "title": "チャレンジを 設定", + "title": "チャレンジの設定", "illegalEvolution": "{{pokemon}}は このチャレンジで\n対象外の ポケモンに なってしまった!", "singleGeneration": { "name": "単一世代", diff --git a/src/locales/ja/common.json b/src/locales/ja/common.json index 9e26dfeeb6e..d10e3e42c70 100644 --- a/src/locales/ja/common.json +++ b/src/locales/ja/common.json @@ -1 +1,8 @@ -{} \ No newline at end of file +{ + "start": "スタート", + "luckIndicator": "運:", + "shinyOnHover": "色違い", + "commonShiny": "ふつう", + "rareShiny": "レア", + "epicShiny": "超レア" +} diff --git a/src/locales/ja/dialogue-double-battle.json b/src/locales/ja/dialogue-double-battle.json index 9e26dfeeb6e..b2632f3b990 100644 --- a/src/locales/ja/dialogue-double-battle.json +++ b/src/locales/ja/dialogue-double-battle.json @@ -1 +1,84 @@ -{} \ No newline at end of file +{ + "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?", + "1_female": "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...", + "1_female": "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..." + } + } +} diff --git a/src/locales/ja/dialogue-final-boss.json b/src/locales/ja/dialogue-final-boss.json index 9e26dfeeb6e..f20d0f013d1 100644 --- a/src/locales/ja/dialogue-final-boss.json +++ b/src/locales/ja/dialogue-final-boss.json @@ -1 +1,10 @@ -{} \ No newline at end of file +{ + "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": "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.", + "key_ordinal_one": "st", + "key_ordinal_two": "nd", + "key_ordinal_few": "rd", + "key_ordinal_other": "th" +} diff --git a/src/locales/ja/dialogue-misc.json b/src/locales/ja/dialogue-misc.json index 9e26dfeeb6e..2f333b5f383 100644 --- a/src/locales/ja/dialogue-misc.json +++ b/src/locales/ja/dialogue-misc.json @@ -1 +1,6 @@ -{} \ No newline at end of file +{ + "ending": "@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_female": "@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_endless": "Congratulations on reaching the current end!\nMore content is coming soon.", + "ending_name": "Devs" +} diff --git a/src/locales/ja/dialogue.json b/src/locales/ja/dialogue.json index 9e26dfeeb6e..6130ade1cb4 100644 --- a/src/locales/ja/dialogue.json +++ b/src/locales/ja/dialogue.json @@ -1 +1,2827 @@ -{} \ No newline at end of file +{ + "youngster": { + "encounter": { + "1": "よっ 勝負する?", + "2": "あっ 君も 駆け出し トレーナーだね?", + "2_female": "あっ きみも 駆け出し トレーナーだね?", + "3": "あっ 初めてみる 人! 勝負だ!", + "4": "さっき 負けて 悔しいから ポケモン 探してるんだよ。\nでも 君 弱そうだな…… よしっ! 勝負 しようぜ!", + "4_female": "さっき 負けて 悔しいから ポケモン 探してるんだよ。\nでも 君 弱そうだな…… よしっ! 勝負 しようぜ!", + "5": "お久しぶりかな? 初めましてかな?\n覚えてないけど ヨロシクね!", + "6": "よーし 行くぞー!", + "7": "よっしゃ 行っくぜー!\n僕の パワー 見せてやる!", + "8": "へへへ…… 見せて あげるね!\n僕の ポケモンの すごさを!", + "9": "挨拶 なんて よかよか! いつでも かかってきんしゃい!", + "9_female": "挨拶 なんて よかよか! いつでも かかってきんしゃい!", + "10": "小僧  だからって 油断してると\n君 泣いちゃう かもしれないよー.", + "11": "大事に 育てた ポケモンだぞー!\n絶対 倒しちゃ ダメなんだぞ!", + "12": "よく来たな!\nこっから 先は 一筋縄じゃ いかないぞ!", + "12_female": "よく来たな!\nこっから 先は 一筋縄じゃ いかないぞ!", + "13": "勝負は 続くよ! いつまでも!\n終わりなき 世界へ ようこそ!", + "13_female": "勝負は 続くよ!\nいつまでも! 終わりなき 世界へ ようこそ!" + }, + "victory": { + "1": "スゴッ! 君 強いんだ!", + "1_femal1e": "スゴッ! 君 強いんだ!", + "2": "敵わなかったね?", + "3": "僕 大きくなったら 絶対 君を 倒すよ!", + "4": "ゲッ 戦えるポケモン もう いない…", + "5": "トホ…… トホホーイ……\nまた 負けちゃったよ……", + "5_female": "トホ…… トホホーイ……\nまた 負けちゃったよ……", + "6": "うわー! 負けたー!!", + "7": "すごいな 君の パワーは!\nビックリで ドッキリだよ!", + "8": "そんな…… どうして……\n僕の ポケモンは サイキョー なのに……", + "9": "また バトルして くれよな!\n次は 負けないからな!", + "10": "も~! 僕は 小僧だけ だよ!\nそんな全力で 戦っちゃ ひどいぞ!", + "11": "君の ポケモンの 方が すごい!\n僕のと 交換しておくれよ!", + "12": "さっきは 勢いで 言ったけど\n一筋縄って どんな縄?", + "13": "あはは さすが! さすがだね!\nもう 君も この世界の 住人だ!" + } + }, + "lass": { + "encounter": { + "1": "Let's have a battle, shall we?", + "2": "You look like a new trainer. Let's have a battle!", + "2_female": "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?", + "6_female": "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…", + "2_female": "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.", + "6_female": "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.", + "8_female": "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.", + "1_female": "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!", + "3_female": "Of course, you are the main character!", + "4": "OK! OK! You could be an Ace Trainer!", + "4_female": "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!", + "3_female": "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?", + "2_female": "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.", + "2_female": "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!", + "1_female": "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?", + "3_female": "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.", + "1_female": "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...", + "3_female": "Ahya! How could this be? For an Admin like me to lose to some random trainer..." + } + }, + "courtney": { + "encounter": { + "1": "Don't. Get. In. My. Way.", + "2": "You... ...I want to...analyze. Ahahaha", + "3": "... Well then...Deleting..." + }, + "victory": { + "1": "Hah hah... Uhn...hah hah...", + "2": "As anticipated. Unanticipated. You. Target lock...completed.\n$Commencing...experiment. You. Forever. Aha... ♪", + "3": "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.", + "3_female": "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.", + "3_female": "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": "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": "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": "Oho! That's a loss I can be proud of!", + "3_female": "Oho! That's a loss I can be proud of!" + } + }, + "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_female": "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!", + "1_female": "You could become a threat to Team Plasma, so we will eliminate you here and now!", + "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": "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, we will stand victorious.", + "3": "Hmph. You're a smarter Trainer than I expected, but not smart enough.", + "3_female": "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!", + "1_female": "You are a threat to Team Plasma. We cannot let you walk away from here and now!", + "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": "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, we will stand triumphant.", + "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!", + "1_female": "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.", + "2_female": "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!", + "2_female": "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.", + "2_female": "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!", + "2_female": "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!", + "5_female": "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!", + "3_female": "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!", + "5_female": "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!", + "2_female": "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!", + "2_female": "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?", + "2_female": "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...", + "2_female": "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!", + "2_female": "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?", + "4_female": "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!", + "5_female": "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.", + "1_female": " ...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.", + "1_female": "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.", + "2_female": "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..", + "2_female": "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.", + "1_female": "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!", + "1_female": "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!", + "1_female": "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!", + "1_female": "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.", + "2_female": "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.", + "2_female": "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!", + "3_female": "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!", + "1_female": "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!", + "1_female": "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.", + "1_female": "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?", + "1_female": "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?", + "1_female": "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.", + "1_female": "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!", + "3_female": "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?", + "1_female": "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'.", + "2_female": "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!", + "1_female": "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.", + "1_female": "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!", + "1_female": "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.", + "3_female": "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!", + "1_female": "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!", + "2_female": "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!", + "3_female": "I'm going to show you what me and my blazing Fire types can do!" + }, + "victory": { + "1": "You got me. I am… burned… out…", + "1_female": "You got me. I am… burned… out…", + "2": "Whoa ho! You're on fire!", + "2_female": "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!", + "1_female": "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!", + "3_female": "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.", + "1_female": "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.", + "2_female": "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.", + "3_female": "OK… So, um, I'm Cilan, I like Grass-type Pokémon." + }, + "victory": { + "1": "Er… Is it over now?", + "1_female": "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…", + "2_female": "…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?", + "1_female": "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.", + "2_female": "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…", + "3_female": "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!", + "1_female": "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": "Every day, I toughened up my Pokémon by digging up Fossils nonstop.\n$Could I show you how tough I made them in a battle?", + "4_female": "Every day, I toughened up my Pokémon by digging up Fossils nonstop.\n$Could I show you how tough I made them in a battle?" + }, + "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": "…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?" + }, + "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": "See? These are my rocking Pokémon, my pride and joy!", + "4": "I knew I would win!" + } + }, + "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…", + "2_female": "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?", + "1_female": "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?", + "1_female": "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. ", + "2_female": "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?", + "1_female": "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!", + "1_female": "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!", + "1_female": "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.", + "1_female": "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?", + "1_female": "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.", + "1_female": "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!", + "1_female": "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!", + "1_female": "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!", + "1_female": "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.", + "1_female": "Not bad, kiddo." + }, + "defeat": { + "1": "Nahahaha! You really are something else, kiddo!", + "1_female": "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.", + "1_female": "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!", + "1_female": "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!", + "1_female": "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!", + "1_female": "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!", + "1_female": "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!", + "1_female": "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!", + "1_female": "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!", + "1_female": "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!", + "1_female": "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!", + "1_female": "You got me. You are magnificent!", + "2": "I never expected another trainer to beat me… I'm surprised.", + "2_female": "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.", + "2_female": "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!", + "1_female": "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!", + "1_female": "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.", + "1_female": "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.", + "1_female": "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!", + "1_female": "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?", + "1_female": "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!", + "1_female": "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!", + "1_female": "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!", + "1_female": "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!", + "1_female": "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.", + "1_female": "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.", + "1_female": "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.", + "1_female": "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!", + "1_female": "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!", + "1_female": "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!", + "1_female": "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!", + "1_female": "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?", + "1_female": "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!", + "2_female": "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?", + "1_female": "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!", + "2_female": "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}あっ、ここに いたんだ! 旅に 出る前に 「じゃ またね!」って くらい 聞きたかったよ……$@c{smile_eclosed}やっぱり 夢を 追ってこうと しているんだ? 信じられない ほどね……$@c{serious_smile_fists}じゃあ、 ここまで 来たから バトルしよっか? 覚悟してるかを 確かめたい から!$@c{serious_mopen_fists}遠慮せずに 全力で かかってこいぜ!" + }, + "victory": { + "1": "@c{shock}ウワッ、カンゼンに ぶっ壊したぜ。\n初心者だとは 思えないほど……$@c{smile}たぶん 運が良っかった だけが……\n最後まで 行ける素質が あるかもな!$こっちの アイテムを あげよう、 博士に そう言いつけたから。 結構 スゴそうな もんだ!$@c{serious_smile_fists}ここからも ガンバレ!" + } + }, + "rival_female": { + "encounter": { + "1": "@c{smile_wave}あ、ついに 見つけた! あちこち 探したのよ! \n@c{angry_mopen}だーい親友に お別れを 言うまでも 忘れちゃった?$@c{smile_ehalf}大切な 夢を 追っていくのね?\n やっぱり、この日が 来たのね……$@c{smile}とにかく! アタシを 忘れちゃったのを 許せる 条件は 一つ: \n@c{smile_wave_wink}アタシと バトルだ!$@c{angry_mopen}全力で かかってきなさい!\n冒険が 第一歩で 終わっちゃうと もったいない でしょう?" + }, + "victory": { + "1": "@c{shock}始まった バッカリなのに そんなに強い?!@d{96}\n@c{angry}完全に チートだろう?\n$@c{smile_wave_wink}なんちゃって!@d{64} @c{smile_eclosed}正々堂々と 負けたよ。 冒険 上手く行ける 気がするね!\n$@c{smile}ところで、こっち! 博士からの アイテムを あげるわ。きっと 便利だと 思うよ!\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相手に 利点を あげ続けると 行けないんだろう!" + } + }, + "rival_2_female": { + "encounter": { + "1": "@c{smile_wave}あっ、 こんなとこで 偶然だね! まだ 倒れないようだ。@c{angry_mopen}フム、えらいえらい!\n$@c{angry_mopen}考えてるのは 分かる、 つきまとってるワケ じゃないから!@c{smile_eclosed}この辺に いただけよ。\n$@c{smile_ehalf}ここまで 頑張っていて 良かったけど、 時々 負けることも 大丈夫だと 知ってるよね?\n$@c{smile}みんなは 失敗から 学ぶ… いつまでも 成功し続ける よりもね。\n$@c{angry_mopen}とにかく! 再戦の ために 大変 トレーニングしてたから 全・勢・力で 戦おう!" + }, + "victory": { + "1": "@c{neutral}…今回は 負ける はずじゃなかった…\n$@c{smile}しょうがないね。 次回まで もっともっと トレーニングしなくちゃ ってこと!\n$@c{smile_wave}そして! もう二つの アイテム、 どうぞ!\n@c{smile_wave_wink}「ありがと」なんて 必要ない!\n$@c{angry_mopen}でもね、 これで 最後! 今から サービス 一つも あげないよ~" + }, + "defeat": { + "1": "時々 負けることも いいんだよ…" + } + }, + "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}ヒサブリ~! まだ 負けてないね。\n@c{angry}だんだん イラッと来る。@c{smile_wave_wink}なんちゃって!\n$@c{smile_ehalf}でもよ、 本当に ふるさとが 恋しくないの? それとも… アタシ…?\nずっと会いたいよ… あの、みんなはね!\n$@c{smile_eclosed}夢を 叶ってるのを 応援してるけど、 実際は やがて 負ける。\n$@c{smile}その時が 来たら アタシは いつも通り そばにいるよ。\n@c{angry_mopen}さあ、 ここまで 頑張ってきた アタシの 力を 見せさせて!" + }, + "victory": { + "1": "@c{shock}もう… 足りなかった…?\nこのままで 決して 帰らない だろう……" + }, + "defeat": { + "1": "ベストを 尽くした。 じゃ、 帰りましょう。" + } + }, + "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}アタシよ! また 忘れちゃった… のね?\n$@c{smile}こんな 遠くまで 来たのは 鼻が高いことだよ! おめでと~\nしかし、 ここは 終着点だね。\n$@c{smile_eclosed}アタシの 中にある 全然 知らなかった 部分を 目覚めたよ。\n今は、 トレーニングしか してないみたい。\n$@c{smile_ehalf}食べたり 寝たりも しなくて 朝から晩まで ポケモンを 育って、 毎日 昨日より 強くなってる。\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}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}また アタシたちだけに なった。\n$@c{smile_eclosed}ねえ、 頭の中に グルグル 巡ることが あってよ。\n$@c{smile_ehalf}アタシとアナタの 間に 起こしたことも, この変な感情も……\n$@c{smile}アナタの夢、 アタシの野心…\n$アタシたちが し続けることも 全ては… より高い 目的が あると思うよ。\n$@c{smile_eclosed}最果ての 限界まで 押すこと… それは アタシの 役割だと思う。\n$@c{smile_ehalf}今まで 役割を 上手く果たせたかは 分からないけど…… 一生懸命 頑張った。\n$こんな奇妙な 恐ろしい場所で なんか… 全てが 明らかに 見られるみたい。\n$昔から… これだけしかは この世界こそ そのもの。\n$@c{smile_eclosed}アタシたちが 大切にした 心にギュッと 抱いた思い出… もう 思い出せない。\n$@c{smile_ehalf}本当は 全部 ウソだったの? 今は 遠い彼方に あるみたい。\n$@c{angry_mopen}アナタは 最後まで 戦い続けなければ 決して 終わらない。 アナタしか できないのよ。\n$@c{smile_ehalf}この全ての 意味、 全然 分からないけど… 真実だと 感じてる。\n$@c{neutral}今ここで アタシを 倒せないと 最後に 勝ち目は ナイ。" + }, + "victory": { + "1": "@c{smile_ehalf}役割… 果たせたと思う。\n$@c{smile_eclosed}ね、 約束して。 この世界を 癒やしたら… お願い 無事に 帰って。\n$@c{smile_ehalf}……ありがとう。" + } + } +} diff --git a/src/locales/ja/fight-ui-handler.json b/src/locales/ja/fight-ui-handler.json index 2318cebd2d3..41ec140c2ca 100644 --- a/src/locales/ja/fight-ui-handler.json +++ b/src/locales/ja/fight-ui-handler.json @@ -1,7 +1,7 @@ { "pp": "PP", - "power": "いりょく", - "accuracy": "めいちゅう", - "abilityFlyInText": " {{pokemonName}}の {{passive}}{{abilityName}}", - "passive": "Passive " -} \ No newline at end of file + "power": "威力", + "accuracy": "命中", + "abilityFlyInText": " {{pokemonName}}の\n{{passive}}:{{abilityName}}", + "passive": "パッシブ " +} diff --git a/src/locales/ja/filter-bar.json b/src/locales/ja/filter-bar.json index c09705d9b50..891b7d87674 100644 --- a/src/locales/ja/filter-bar.json +++ b/src/locales/ja/filter-bar.json @@ -32,7 +32,7 @@ "noPokerus": "ポケルス - なし", "sortByNumber": "No.", "sortByCost": "ポイント", - "sortByCandies": "飴の数", + "sortByCandies": "アメの数", "sortByIVs": "個体値", "sortByName": "名前" -} \ No newline at end of file +} diff --git a/src/locales/ja/game-stats-ui-handler.json b/src/locales/ja/game-stats-ui-handler.json index 2fff802734a..25301aa4297 100644 --- a/src/locales/ja/game-stats-ui-handler.json +++ b/src/locales/ja/game-stats-ui-handler.json @@ -12,26 +12,26 @@ "dailyRunAttempts": "デイリーラン", "dailyRunWins": "デイリーラン勝利", "endlessRuns": "エンドレスラン", - "highestWaveEndless": "エンドレス最高波", + "highestWaveEndless": "エンドレス最高ラウンド", "highestMoney": "最大貯金", "highestDamage": "最大ダメージ", "highestHPHealed": "最大HP回復", "pokemonEncountered": "遭遇したポケモン", "pokemonDefeated": "倒したポケモン", "pokemonCaught": "捕まえたポケモン", - "eggsHatched": "孵化したタマゴ", + "eggsHatched": "ふかしたタマゴ", "subLegendsSeen": "見つけた順伝説ポケモン", "subLegendsCaught": "捕まえた準伝説ポケモン", - "subLegendsHatched": "孵化した準伝説ポケモン", + "subLegendsHatched": "ふかした準伝説ポケモン", "legendsSeen": "見つけた伝説ポケモン", "legendsCaught": "捕まえた伝説ポケモン", - "legendsHatched": "孵化した伝説ポケモン", + "legendsHatched": "ふかした伝説ポケモン", "mythicalsSeen": "見つけた幻ポケモン", "mythicalsCaught": "捕まえた幻ポケモン", - "mythicalsHatched": "孵化した幻ポケモン", + "mythicalsHatched": "ふかした幻ポケモン", "shiniesSeen": "見つけた色違いポケモン", "shiniesCaught": "捕まえた色違いポケモン", - "shiniesHatched": "孵化した色違いポケモン", + "shiniesHatched": "ふかした色違いポケモン", "pokemonFused": "吸収合体したポケモン", "trainersDefeated": "倒したトレーナー", "eggsPulled": "引いたタマゴ", diff --git a/src/locales/ja/growth.json b/src/locales/ja/growth.json index 3d23fa1f46d..e5c1317632f 100644 --- a/src/locales/ja/growth.json +++ b/src/locales/ja/growth.json @@ -1,8 +1,8 @@ { - "Erratic": "60まんタイプ", - "Fast": "80まんタイプ", - "Medium_Fast": "100まんタイプ", - "Medium_Slow": "105まんタイプ", - "Slow": "125まんタイプ", - "Fluctuating": "164まんタイプ" -} \ No newline at end of file + "Erratic": "60万タイプ", + "Fast": "80万タイプ", + "Medium_Fast": "100万タイプ", + "Medium_Slow": "105万タイプ", + "Slow": "125万タイプ", + "Fluctuating": "164万タイプ" +} diff --git a/src/locales/ja/menu-ui-handler.json b/src/locales/ja/menu-ui-handler.json index 1930c3999c6..851c8478e9d 100644 --- a/src/locales/ja/menu-ui-handler.json +++ b/src/locales/ja/menu-ui-handler.json @@ -24,6 +24,6 @@ "linkGoogle": "Google連携", "unlinkGoogle": "Google連携解除", "cancel": "キャンセル", - "losingProgressionWarning": "戦闘開始からの データが 保存されません。\nよろしいですか?", - "noEggs": "現在は タマゴを 孵化していません!" + "losingProgressionWarning": "戦闘開始からの データが セーブされません。\nよろしいですか?", + "noEggs": "現在は タマゴを ふかしていません!" } diff --git a/src/locales/ja/modifier-type.json b/src/locales/ja/modifier-type.json index f1fcc4d3005..e249e3c430f 100644 --- a/src/locales/ja/modifier-type.json +++ b/src/locales/ja/modifier-type.json @@ -353,7 +353,7 @@ "description": "やせいのポケモンがかくれとくせいをもつかくりつをおおきくふやす" }, "IV_SCANNER": { - "name": "こたいち たんちき", + "name": "こたいちスキャナー", "description": "やせいのポケモンのこたいちをスキャンできる。スタックごとに2つのこたいちがあきらかになる。もっともたかいこたいちがさいしょにひょうじされる" }, "DNA_SPLICERS": { diff --git a/src/locales/ja/modifier.json b/src/locales/ja/modifier.json index a42a849e232..c33bb9be151 100644 --- a/src/locales/ja/modifier.json +++ b/src/locales/ja/modifier.json @@ -1,12 +1,12 @@ { "surviveDamageApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で もちこたえた!", - "turnHealApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 少し 回復!", - "hitHealApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 少し 回復!", + "turnHealApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 少し 体力を 回復した!", + "hitHealApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 少し 体力を 回復した!", "pokemonInstantReviveApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 復活した!", "resetNegativeStatStageApply": "{{pokemonNameWithAffix}}は {{typeName}}で\n下がった能力が 元に戻った!", "moneyInterestApply": "{{typeName}}から {{moneyAmount}}円 取得した!", - "turnHeldItemTransferApply": "{{pokemonName}}の {{typeName}}が\n{{pokemonNameWithAffix}}の {{itemName}}を 吸い取った!", - "contactHeldItemTransferApply": "{{pokemonName}}の {{typeName}}が\n{{pokemonNameWithAffix}}の {{itemName}}を うばい取った!", + "turnHeldItemTransferApply": "{{pokemonName}}の {{typeName}}が\n{{pokemonNameWithAffix}}の {{itemName}}を 吸い取った!", + "contactHeldItemTransferApply": "{{pokemonName}}の {{typeName}}が\n{{pokemonNameWithAffix}}の {{itemName}}を 奪い取った!", "enemyTurnHealApply": "{{pokemonNameWithAffix}}は\n体力を 回復!", "bypassSpeedChanceApply": "{{pokemonName}}は {{itemName}}で\n行動が はやくなった!" -} \ No newline at end of file +} diff --git a/src/locales/ja/move-trigger.json b/src/locales/ja/move-trigger.json index 11a327c01d7..7449d8c6e4b 100644 --- a/src/locales/ja/move-trigger.json +++ b/src/locales/ja/move-trigger.json @@ -1,64 +1,69 @@ { - "hitWithRecoil": "{{pokemonName}}は\nはんどうによる ダメージを うけた!", - "cutHpPowerUpMove": "{{pokemonName}}は\nたいりょくを けずって パワーぜんかい!", - "absorbedElectricity": "{{pokemonName}}は\n でんきを きゅうしゅうした!", - "switchedStatChanges": "{{pokemonName}}は あいてと じぶんの\nのうりょくへんかを いれかえた!", - "sharedGuard": "{{pokemonName}}は\nおたがいのガードを シェアした!", - "sharedPower": "{{pokemonName}}は\nおたがいのパワーを シェアした!", - "goingAllOutForAttack": "{{pokemonName}}は\nほんきを だした!", - "regainedHealth": "{{pokemonName}}は\nたいりょくを かいふくした!", - "keptGoingAndCrashed": "いきおいあまって {{pokemonName}}は\nじめんに ぶつかった!", - "fled": "{{pokemonName}}は にげだした!", - "cannotBeSwitchedOut": "{{pokemonName}}を\nもどすことが できない!", - "swappedAbilitiesWithTarget": "{{pokemonName}}は\nおたがいの とくせいを いれかえた!", - "coinsScatteredEverywhere": "こばんが あたりに ちらばった!", + "hitWithRecoil": "{{pokemonName}}は\n反動による ダメージを 受けた!", + "cutHpPowerUpMove": "{{pokemonName}}は\n体力を 削って 技の 威力を 上がった!", + "absorbedElectricity": "{{pokemonName}}は\n 電気を 吸収した!", + "switchedStatChanges": "{{pokemonName}}は 相手と 自分の\n能力変化を 入れ替えた!", + "switchedTwoStatChanges": "{{pokemonName}}は 相手と 自分の {{firstStat}}と\n{{secondStat}}の 能力変化を 入れ替えた!", + "switchedStat": "{{pokemonName}}は 相手と {{stat}}を 入れ替えた!", + "sharedGuard": "{{pokemonName}}は\nお互いのガードを シェアした!", + "sharedPower": "{{pokemonName}}は\nお互いのパワーを シェアした!", + "goingAllOutForAttack": "{{pokemonName}}は\n本気を 出した!", + "regainedHealth": "{{pokemonName}}は\n体力を 回復した!", + "keptGoingAndCrashed": "勢い余って {{pokemonName}}は\n地面に ぶつかった!", + "fled": "{{pokemonName}}は 逃げ出した!", + "cannotBeSwitchedOut": "{{pokemonName}}を\n戻すことが できない!", + "swappedAbilitiesWithTarget": "{{pokemonName}}は\nお互いの 特性を 入れ替えた!", + "coinsScatteredEverywhere": "小判が 辺りに 散らばった!", "attackedByItem": "{{pokemonName}}に\n{{itemName}}が おそいかかる!", - "whippedUpAWhirlwind": "{{pokemonName}}の まわりで\nくうきが うずをまく!", - "flewUpHigh": "{{pokemonName}}は\nそらたかく とびあがった!", - "tookInSunlight": "{{pokemonName}}は\nひかりを きゅうしゅうした!", - "dugAHole": "{{pokemonName}}は\nじめんに もぐった!", - "loweredItsHead": "{{pokemonName}}は\nくびを ひっこめた!", - "isGlowing": "{{pokemonName}}を\nはげしいひかりが つつむ!", - "bellChimed": "すずのおとが ひびきわたった!", - "foresawAnAttack": "{{pokemonName}}は\nみらいに こうげきを よちした!", - "hidUnderwater": "{{pokemonName}}は\nすいちゅうに みをひそめた!", - "soothingAromaWaftedThroughArea": "ここちよい かおりが ひろがった!", - "sprangUp": "{{pokemonName}}は\nたかく とびはねた!", - "choseDoomDesireAsDestiny": "{{pokemonName}}は\nはめつのねがいを みらいに たくした!", - "vanishedInstantly": "{{pokemonName}}の すがたが\nいっしゅんにして きえた!", - "tookTargetIntoSky": "{{pokemonName}}は {{targetName}}を\nじょうくうに つれさった!", - "becameCloakedInFreezingLight": "{{pokemonName}}は\nつめたいひかりに つつまれた!", - "becameCloakedInFreezingAir": "{{pokemonName}}は\nこごえるくうきに つつまれた!", - "isChargingPower": "{{pokemonName}}は\nパワーを ためこんでいる!", - "burnedItselfOut": "{{pokemonName}}の ほのうは\nもえつきた!", - "startedHeatingUpBeak": "{{pokemonName}}は\nクチバシを かねつしはじめた!", + "whippedUpAWhirlwind": "{{pokemonName}}の 周りで\n空気が 渦を巻く!", + "flewUpHigh": "{{pokemonName}}は\n空高く 飛び上がった!", + "tookInSunlight": "{{pokemonName}}は\n光を 吸収した!", + "dugAHole": "{{pokemonName}}は\n地面に 潜った!", + "loweredItsHead": "{{pokemonName}}は\n首を 引っ込めた!", + "isGlowing": "{{pokemonName}}を\n激しい光が 包む!", + "bellChimed": "鈴の音が 響き渡った!", + "foresawAnAttack": "{{pokemonName}}は\n未来に 攻撃を 予知した!", + "isTighteningFocus": "{{pokemonName}}は\n集中力を 高めている!", + "hidUnderwater": "{{pokemonName}}は\n水中に 身を潜めた!", + "soothingAromaWaftedThroughArea": "心地よい 香りが 広がった!", + "sprangUp": "{{pokemonName}}は\n高く 飛び跳ねた!", + "choseDoomDesireAsDestiny": "{{pokemonName}}は\nはめつのねがいを 未来に 託した!", + "vanishedInstantly": "{{pokemonName}}の 姿が\n一瞬にして 消えた!", + "tookTargetIntoSky": "{{pokemonName}}は {{targetName}}を\n上空に 連れ去った!", + "becameCloakedInFreezingLight": "{{pokemonName}}は\n冷たい光に 包まれた!", + "becameCloakedInFreezingAir": "{{pokemonName}}は\n凍える空気に 包まれた!", + "isChargingPower": "{{pokemonName}}は\nパワーを 溜め込んでいる!", + "burnedItselfOut": "{{pokemonName}}の 炎は 燃え尽きた!", + "startedHeatingUpBeak": "{{pokemonName}}は\nクチバシを 加熱し始めた!", "setUpShellTrap": "{{pokemonName}}は\nトラップシェルを 仕掛けた!", - "isOverflowingWithSpacePower": "{{pokemonName}}に\nうちゅうの ちからが あふれだす!", - "usedUpAllElectricity": "{{pokemonName}}は\nでんきを つかいきった!", - "stoleItem": "{{pokemonName}}は\n{{targetName}}の {{itemName}}を ぬすんだ!", - "incineratedItem": "{{pokemonName}}は\n{{targetName}}の {{itemName}}を もやした!", - "knockedOffItem": "{{pokemonName}}は\n{{targetName}}の {{itemName}}を はたきおとした!", - "tookMoveAttack": "{{pokemonName}}は\n{{moveName}}の こうげきを うけた!", - "cutOwnHpAndMaximizedStat": "{{pokemonName}}は\nたいりょくを けずって {{statName}}ぜんかい!", - "copiedStatChanges": "{{pokemonName}}は {{targetName}}の\nのうりょくへんかを コピーした!", + "isOverflowingWithSpacePower": "{{pokemonName}}に\n宇宙の 力が 溢れ出す!", + "usedUpAllElectricity": "{{pokemonName}}は\n電気を 使い切った!", + "stoleItem": "{{pokemonName}}は\n{{targetName}}の {{itemName}}を 盗んだ!", + "incineratedItem": "{{pokemonName}}は\n{{targetName}}の {{itemName}}を 燃やした!", + "knockedOffItem": "{{pokemonName}}は\n{{targetName}}の {{itemName}}を はたき落とした!", + "tookMoveAttack": "{{pokemonName}}は\n{{moveName}}の 攻撃を 受けた!", + "cutOwnHpAndMaximizedStat": "{{pokemonName}}は\n体力を 削って {{statName}}全開!", + "copiedStatChanges": "{{pokemonName}}は {{targetName}}の\n能力変化を コピーした!", "magnitudeMessage": "マグニチュード{{magnitude}}!", - "tookAimAtTarget": "{{pokemonName}}は {{targetName}}に\nねらいを さだめた!", + "tookAimAtTarget": "{{pokemonName}}は {{targetName}}に\n狙いを 定めた!", "transformedIntoType": "{{pokemonName}}は\n{{typeName}}タイプに なった!", "copiedMove": "{{pokemonName}}は\n{{moveName}}を コピーした!", "sketchedMove": "{{pokemonName}}は\n{{moveName}}を スケッチした!", - "acquiredAbility": "{{pokemonName}}の とくせいが\n{{abilityName}}に なった!", + "acquiredAbility": "{{pokemonName}}の 特性が\n{{abilityName}}に なった!", "copiedTargetAbility": "{{pokemonName}}は\n{{targetName}}の {{abilityName}}を コピーした!", - "transformedIntoTarget": "{{pokemonName}}は\n{{targetName}}に へんしんした!", - "tryingToTakeFoeDown": "{{pokemonName}}は あいてを\nみちづれに しようとしている!", - "addType": "{{pokemonName}}に\n{{typeName}}タイプが ついかされた!", - "cannotUseMove": "{{pokemonName}}は\n{{moveName}}を つかえなかった!", - "healHp": "{{pokemonName}}の\nたいりょくが かいふくした!", - "sacrificialFullRestore": "{{pokemonName}}の\nねがいごとが かなった!", - "invertStats": "{{pokemonName}}の\nのうりょくへんかが ぎゃくてんした!", - "resetStats": "{{pokemonName}}の\nのうりょくへんかが もとにもどった!", - "faintCountdown": "{{pokemonName}}は\n{{turnCount}}ターンごに ほろびてしまう!", + "transformedIntoTarget": "{{pokemonName}}は\n{{targetName}}に 変身した!", + "tryingToTakeFoeDown": "{{pokemonName}}は 相手を\nみちづれに しようとしている!", + "addType": "{{pokemonName}}に\n{{typeName}}タイプが 追加された!", + "cannotUseMove": "{{pokemonName}}は\n{{moveName}}を 使えなかった!", + "healHp": "{{pokemonName}}の\n体力が 回復した!", + "sacrificialFullRestore": "{{pokemonName}}の\nいやしのねがいが 叶った!", + "invertStats": "{{pokemonName}}は\n能力変化が ひっくり返った!", + "resetStats": "{{pokemonName}}の\n能力変化が 元に戻った!", + "statEliminated": "全ての 能力変化が 元に戻った!", + "faintCountdown": "{{pokemonName}}は\n{{turnCount}}ターン後に 滅びてしまう!", "copyType": "{{pokemonName}}は {{targetPokemonName}}と\n同じタイプに なった!", - "suppressAbilities": "{{pokemonName}}の とくせいが きかなくなった!", + "suppressAbilities": "{{pokemonName}}の 特性が 効かなくなった!", "revivalBlessing": "{{pokemonName}}は\n復活して 戦えるようになった!", - "swapArenaTags": "{{pokemonName}}は\nおたがいの ばのこうかを いれかえた!" + "swapArenaTags": "{{pokemonName}}は\nお互いの 場の 効果を 入れ替えた!", + "exposedMove": "{{pokemonName}}は {{targetPokemonName}}の\n正体を 見破った!" } diff --git a/src/locales/ja/party-ui-handler.json b/src/locales/ja/party-ui-handler.json index a3a88b2dd6e..b112653c544 100644 --- a/src/locales/ja/party-ui-handler.json +++ b/src/locales/ja/party-ui-handler.json @@ -1,8 +1,8 @@ { - "SEND_OUT": "いれかえる", - "SUMMARY": "つよさをみる", + "SEND_OUT": "入れ替える", + "SUMMARY": "強さを見る", "CANCEL": "やめる", - "RELEASE": "にがす", - "APPLY": "つかう", - "TEACH": "おしえる" -} \ No newline at end of file + "RELEASE": "逃がす", + "APPLY": "使う", + "TEACH": "教える" +} diff --git a/src/locales/ja/pokemon-info-container.json b/src/locales/ja/pokemon-info-container.json index 796ac706731..287eed23c74 100644 --- a/src/locales/ja/pokemon-info-container.json +++ b/src/locales/ja/pokemon-info-container.json @@ -1,7 +1,7 @@ { - "moveset": "わざ", - "gender": "せいべつ:", - "ability": "とくせい:", - "nature": "せいかく:", - "form": "すがた:" -} \ No newline at end of file + "moveset": "技", + "gender": "性別:", + "ability": "特性:", + "nature": "性格:", + "form": "姿:" +} diff --git a/src/locales/ja/pokemon-summary.json b/src/locales/ja/pokemon-summary.json index 9e26dfeeb6e..cf35befe6fd 100644 --- a/src/locales/ja/pokemon-summary.json +++ b/src/locales/ja/pokemon-summary.json @@ -1 +1,44 @@ -{} \ No newline at end of file +{ + "pokemonInfo": "ポケモン情報", + "status": "ステータス", + "powerAccuracyCategory": "威力\n命中\n分類", + "type": "タイプ", + "unknownTrainer": "???", + "ot": "親", + "nature": "性格", + "expPoints": "経験値", + "nextLv": "次のレベルまで", + "cancel": "キャンセル", + "memoString": "{{natureFragment}}な性格。\n{{metFragment}}", + "metFragment": { + "normal": "{{biome}}で\nLv.{{level}}の時に出会った。", + "apparently": "{{biome}}で\nLv.{{level}}の時に出会ったようだ。" + }, + "natureFragment": { + "Hardy": "{{nature}}", + "Lonely": "{{nature}}", + "Brave": "{{nature}}", + "Adamant": "{{nature}}", + "Naughty": "{{nature}}", + "Bold": "{{nature}}", + "Docile": "{{nature}}", + "Relaxed": "{{nature}}", + "Impish": "{{nature}}", + "Lax": "{{nature}}", + "Timid": "{{nature}}", + "Hasty": "{{nature}}", + "Serious": "{{nature}}", + "Jolly": "{{nature}}", + "Naive": "{{nature}}", + "Modest": "{{nature}}", + "Mild": "{{nature}}", + "Quiet": "{{nature}}", + "Bashful": "{{nature}}", + "Rash": "{{nature}}", + "Calm": "{{nature}}", + "Gentle": "{{nature}}", + "Sassy": "{{nature}}", + "Careful": "{{nature}}", + "Quirky": "{{nature}}" + } +} diff --git a/src/locales/ja/run-history.json b/src/locales/ja/run-history.json index 222f7de728d..3bf9de32c68 100644 --- a/src/locales/ja/run-history.json +++ b/src/locales/ja/run-history.json @@ -28,10 +28,10 @@ "SPDshortened": "速さ", "runInfo": "ラン情報", "money": "お金", - "runLength": "ラン最高ウェーブ", - "viewHeldItems": "手持ちアイテム", - "hallofFameText": "殿堂へようこそ!", - "hallofFameText_female": "殿堂へようこそ!", + "runLength": "時間", + "viewHeldItems": "持たせたアイテム", + "hallofFameText": "殿堂入り おめでとう!", + "hallofFameText_female": "殿堂入り おめでとう!", "viewHallOfFame": "殿堂登録を見る!", "viewEndingSplash": "クリア後のアートを見る!" -} \ No newline at end of file +} diff --git a/src/locales/ja/save-slot-select-ui-handler.json b/src/locales/ja/save-slot-select-ui-handler.json index a84e3aca23d..73250a08f4b 100644 --- a/src/locales/ja/save-slot-select-ui-handler.json +++ b/src/locales/ja/save-slot-select-ui-handler.json @@ -1,7 +1,7 @@ { "overwriteData": "選択した スロットに データを 上書きします?", "loading": "読込中…", - "wave": "波", + "wave": "ラウンド", "lv": "Lv", "empty": "なし" -} \ No newline at end of file +} diff --git a/src/locales/ja/splash-messages.json b/src/locales/ja/splash-messages.json index 9e26dfeeb6e..b7378e7a916 100644 --- a/src/locales/ja/splash-messages.json +++ b/src/locales/ja/splash-messages.json @@ -1 +1,36 @@ -{} \ No newline at end of file +{ + "battlesWon": "Battles Won!", + "joinTheDiscord": "Join the Discord!", + "infiniteLevels": "Infinite Levels!", + "everythingStacks": "Everything Stacks!", + "optionalSaveScumming": "Optional Save Scumming!", + "biomes": "35 Biomes!", + "openSource": "Open Source!", + "playWithSpeed": "Play with 5x Speed!", + "liveBugTesting": "Live Bug Testing!", + "heavyInfluence": "Heavy RoR2 Influence!", + "pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!", + "nowWithMoreSalt": "Now with 33% More Salt!", + "infiniteFusionAtHome": "Infinite Fusion at Home!", + "brokenEggMoves": "Broken Egg Moves!", + "magnificent": "Magnificent!", + "mubstitute": "Mubstitute!", + "thatsCrazy": "That's Crazy!", + "oranceJuice": "Orance Juice!", + "questionableBalancing": "Questionable Balancing!", + "coolShaders": "Cool Shaders!", + "aiFree": "AI-Free!", + "suddenDifficultySpikes": "Sudden Difficulty Spikes!", + "basedOnAnUnfinishedFlashGame": "Based on an Unfinished Flash Game!", + "moreAddictiveThanIntended": "More Addictive than Intended!", + "mostlyConsistentSeeds": "Mostly Consistent Seeds!", + "achievementPointsDontDoAnything": "Achievement Points Don't Do Anything!", + "youDoNotStartAtLevel": "You Do Not Start at Level 2000!", + "dontTalkAboutTheManaphyEggIncident": "Don't Talk About the Manaphy Egg Incident!", + "alsoTryPokengine": "Also Try Pokéngine!", + "alsoTryEmeraldRogue": "Also Try Emerald Rogue!", + "alsoTryRadicalRed": "Also Try Radical Red!", + "eeveeExpo": "Eevee Expo!", + "ynoproject": "YNOproject!", + "breedersInSpace": "Breeders in space!" +} diff --git a/src/locales/ja/weather.json b/src/locales/ja/weather.json index 92728b81461..e2d3c6c4e32 100644 --- a/src/locales/ja/weather.json +++ b/src/locales/ja/weather.json @@ -16,17 +16,17 @@ "snowStartMessage": "雪が 降り始めた!", "snowLapseMessage": "雪が 降っている!", "snowClearMessage": "雪が 止んだ!", - "fogStartMessage": "足下に 霧(きり)が立ち込めた!", - "fogLapseMessage": "足下に 霧(きり)が 立ち込めている!", - "fogClearMessage": "足下の 霧(きり)が消え去った!", + "fogStartMessage": "足下に 霧が 立ち込めた!", + "fogLapseMessage": "足下に 霧が 立ち込めている!", + "fogClearMessage": "足下の 霧が 消え去った!", "heavyRainStartMessage": "強い雨が 降り始めた!", "heavyRainLapseMessage": "強い雨が 降っている!", "heavyRainClearMessage": "強い雨が あがった!", "harshSunStartMessage": "日差しが とても強くなった!", "harshSunLapseMessage": "日差しが とても強い!", "harshSunClearMessage": "日差しが 元に戻った!", - "strongWindsStartMessage": "謎(なぞ)の 乱気流(らんきりゅう)が\nひこうポケモンを 護(まも)る!", - "strongWindsLapseMessage": "謎(なぞ)の 乱気流(らんきりゅう)の 勢(いきお)いは 止まらない!", - "strongWindsEffectMessage": "謎(なぞ)の 乱気流(らんきりゅう)が 攻撃(こうげき)を 弱(よわ)めた!", - "strongWindsClearMessage": "謎(なぞ)の 乱気流(らんきりゅう)が おさまった!" -} \ No newline at end of file + "strongWindsStartMessage": "謎の 乱気流が\nひこうポケモンを 護る!", + "strongWindsLapseMessage": "謎の 乱気流の 勢いは 止まらない!", + "strongWindsEffectMessage": "謎の 乱気流が 攻撃を 弱めた!", + "strongWindsClearMessage": "謎の 乱気流が おさまった!" +} From 6d312a29098faf5a7953f71830af90fc08306570 Mon Sep 17 00:00:00 2001 From: damocleas Date: Thu, 5 Sep 2024 14:50:28 -0400 Subject: [PATCH 03/17] Update egg.ts Same-Species Egg Shiny Rate (#4052) --- src/data/egg.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/egg.ts b/src/data/egg.ts index 9beb944de69..508263c9c8e 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -15,7 +15,7 @@ export const EGG_SEED = 1073741824; // Rates for specific random properties in 1/x const DEFAULT_SHINY_RATE = 128; const GACHA_SHINY_UP_SHINY_RATE = 64; -const SAME_SPECIES_EGG_SHINY_RATE = 24; +const SAME_SPECIES_EGG_SHINY_RATE = 12; const SAME_SPECIES_EGG_HA_RATE = 8; const MANAPHY_EGG_MANAPHY_RATE = 8; const GACHA_EGG_HA_RATE = 192; From 6e26db27b864b135303c08b23c88037b9b107f21 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Thu, 5 Sep 2024 12:07:04 -0700 Subject: [PATCH 04/17] Protection moves now fail when used last (#4045) --- src/data/move.ts | 42 ++++++++++++++------- src/test/moves/protect.test.ts | 41 ++++++++++++++++----- src/test/moves/quick_guard.test.ts | 59 ++++++++++++++++++------------ 3 files changed, 96 insertions(+), 46 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index a591f12df90..bb85e62519b 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -6234,6 +6234,8 @@ const userSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: const targetSleptOrComatoseCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => target.status?.effect === StatusEffect.SLEEP || target.hasAbility(Abilities.COMATOSE); +const failIfLastCondition: MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => user.scene.phaseQueue.find(phase => phase instanceof MovePhase) !== undefined; + export type MoveAttrFilter = (attr: MoveAttr) => boolean; function applyMoveAttrsInternal(attrFilter: MoveAttrFilter, user: Pokemon | null, target: Pokemon | null, move: Move, args: any[]): Promise { @@ -6972,7 +6974,8 @@ export function initMoves() { .attr(StatusEffectAttr, StatusEffect.FREEZE) .target(MoveTarget.ALL_NEAR_ENEMIES), new SelfStatusMove(Moves.PROTECT, Type.NORMAL, -1, 10, -1, 4, 2) - .attr(ProtectAttr), + .attr(ProtectAttr) + .condition(failIfLastCondition), new AttackMove(Moves.MACH_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 2) .punchingMove(), new StatusMove(Moves.SCARY_FACE, Type.NORMAL, 100, 10, -1, 0, 2) @@ -7023,7 +7026,8 @@ export function initMoves() { .windMove() .target(MoveTarget.ALL_NEAR_ENEMIES), new SelfStatusMove(Moves.DETECT, Type.FIGHTING, -1, 5, -1, 4, 2) - .attr(ProtectAttr), + .attr(ProtectAttr) + .condition(failIfLastCondition), new AttackMove(Moves.BONE_RUSH, Type.GROUND, MoveCategory.PHYSICAL, 25, 90, 10, -1, 0, 2) .attr(MultiHitAttr) .makesContact(false), @@ -7041,7 +7045,8 @@ export function initMoves() { .attr(HitHealAttr) .triageMove(), new SelfStatusMove(Moves.ENDURE, Type.NORMAL, -1, 10, -1, 4, 2) - .attr(ProtectAttr, BattlerTagType.ENDURING), + .attr(ProtectAttr, BattlerTagType.ENDURING) + .condition(failIfLastCondition), new StatusMove(Moves.CHARM, Type.FAIRY, 100, 20, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.ATK ], -2), new AttackMove(Moves.ROLLOUT, Type.ROCK, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 2) @@ -7788,7 +7793,8 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.ATK, Stat.ACC ], 1, true), new StatusMove(Moves.WIDE_GUARD, Type.ROCK, -1, 10, -1, 3, 5) .target(MoveTarget.USER_SIDE) - .attr(AddArenaTagAttr, ArenaTagType.WIDE_GUARD, 1, true, true), + .attr(AddArenaTagAttr, ArenaTagType.WIDE_GUARD, 1, true, true) + .condition(failIfLastCondition), new StatusMove(Moves.GUARD_SPLIT, Type.PSYCHIC, -1, 10, -1, 0, 5) .attr(AverageStatsAttr, [ Stat.DEF, Stat.SPDEF ], "moveTriggers:sharedGuard"), new StatusMove(Moves.POWER_SPLIT, Type.PSYCHIC, -1, 10, -1, 0, 5) @@ -7876,7 +7882,8 @@ export function initMoves() { .attr(PositiveStatStagePowerAttr), new StatusMove(Moves.QUICK_GUARD, Type.FIGHTING, -1, 15, -1, 3, 5) .target(MoveTarget.USER_SIDE) - .attr(AddArenaTagAttr, ArenaTagType.QUICK_GUARD, 1, true, true), + .attr(AddArenaTagAttr, ArenaTagType.QUICK_GUARD, 1, true, true) + .condition(failIfLastCondition), new SelfStatusMove(Moves.ALLY_SWITCH, Type.PSYCHIC, -1, 15, -1, 2, 5) .ignoresProtect() .unimplemented(), @@ -8047,7 +8054,8 @@ export function initMoves() { new StatusMove(Moves.MAT_BLOCK, Type.FIGHTING, -1, 10, -1, 0, 6) .target(MoveTarget.USER_SIDE) .attr(AddArenaTagAttr, ArenaTagType.MAT_BLOCK, 1, true, true) - .condition(new FirstMoveCondition()), + .condition(new FirstMoveCondition()) + .condition(failIfLastCondition), new AttackMove(Moves.BELCH, Type.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6) .condition((user, target, move) => user.battleData.berriesEaten.length > 0), new StatusMove(Moves.ROTOTILLER, Type.GROUND, -1, 10, -1, 0, 6) @@ -8105,7 +8113,8 @@ export function initMoves() { .triageMove(), new StatusMove(Moves.CRAFTY_SHIELD, Type.FAIRY, -1, 10, -1, 3, 6) .target(MoveTarget.USER_SIDE) - .attr(AddArenaTagAttr, ArenaTagType.CRAFTY_SHIELD, 1, true, true), + .attr(AddArenaTagAttr, ArenaTagType.CRAFTY_SHIELD, 1, true, true) + .condition(failIfLastCondition), new StatusMove(Moves.FLOWER_SHIELD, Type.FAIRY, -1, 10, -1, 0, 6) .target(MoveTarget.ALL) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, false, (user, target, move) => target.getTypes().includes(Type.GRASS) && !target.getTag(SemiInvulnerableTag)), @@ -8130,7 +8139,8 @@ export function initMoves() { .target(MoveTarget.BOTH_SIDES) .unimplemented(), new SelfStatusMove(Moves.KINGS_SHIELD, Type.STEEL, -1, 10, -1, 4, 6) - .attr(ProtectAttr, BattlerTagType.KINGS_SHIELD), + .attr(ProtectAttr, BattlerTagType.KINGS_SHIELD) + .condition(failIfLastCondition), new StatusMove(Moves.PLAY_NICE, Type.NORMAL, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), new StatusMove(Moves.CONFIDE, Type.NORMAL, -1, 20, -1, 0, 6) @@ -8153,7 +8163,8 @@ export function initMoves() { new AttackMove(Moves.MYSTICAL_FIRE, Type.FIRE, MoveCategory.SPECIAL, 75, 100, 10, 100, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1), new SelfStatusMove(Moves.SPIKY_SHIELD, Type.GRASS, -1, 10, -1, 4, 6) - .attr(ProtectAttr, BattlerTagType.SPIKY_SHIELD), + .attr(ProtectAttr, BattlerTagType.SPIKY_SHIELD) + .condition(failIfLastCondition), new StatusMove(Moves.AROMATIC_MIST, Type.FAIRY, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPDEF ], 1) .target(MoveTarget.NEAR_ALLY), @@ -8349,7 +8360,8 @@ export function initMoves() { new AttackMove(Moves.FIRST_IMPRESSION, Type.BUG, MoveCategory.PHYSICAL, 90, 100, 10, -1, 2, 7) .condition(new FirstMoveCondition()), new SelfStatusMove(Moves.BANEFUL_BUNKER, Type.POISON, -1, 10, -1, 4, 7) - .attr(ProtectAttr, BattlerTagType.BANEFUL_BUNKER), + .attr(ProtectAttr, BattlerTagType.BANEFUL_BUNKER) + .condition(failIfLastCondition), new AttackMove(Moves.SPIRIT_SHACKLE, Type.GHOST, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, false, 1, 1, true) .makesContact(false), @@ -8592,6 +8604,7 @@ export function initMoves() { /* Unused */ new SelfStatusMove(Moves.MAX_GUARD, Type.NORMAL, -1, 10, -1, 4, 8) .attr(ProtectAttr) + .condition(failIfLastCondition) .ignoresVirtual(), /* End Unused */ new AttackMove(Moves.DYNAMAX_CANNON, Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) @@ -8770,7 +8783,8 @@ export function initMoves() { .target(MoveTarget.USER_AND_ALLIES) .ignoresProtect(), new SelfStatusMove(Moves.OBSTRUCT, Type.DARK, 100, 10, -1, 4, 8) - .attr(ProtectAttr, BattlerTagType.OBSTRUCT), + .attr(ProtectAttr, BattlerTagType.OBSTRUCT) + .condition(failIfLastCondition), new AttackMove(Moves.FALSE_SURRENDER, Type.DARK, MoveCategory.PHYSICAL, 80, -1, 10, -1, 0, 8), new AttackMove(Moves.METEOR_ASSAULT, Type.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 5, -1, 0, 8) .attr(RechargeAttr) @@ -9061,7 +9075,8 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, true, (user, target, move) => user.isTerastallized() && user.isOfType(Type.STELLAR)) .partial(), new SelfStatusMove(Moves.SILK_TRAP, Type.BUG, -1, 10, -1, 4, 9) - .attr(ProtectAttr, BattlerTagType.SILK_TRAP), + .attr(ProtectAttr, BattlerTagType.SILK_TRAP) + .condition(failIfLastCondition), new AttackMove(Moves.AXE_KICK, Type.FIGHTING, MoveCategory.PHYSICAL, 120, 90, 10, 30, 0, 9) .attr(MissEffectAttr, crashDamageFunc) .attr(NoEffectAttr, crashDamageFunc) @@ -9253,7 +9268,8 @@ export function initMoves() { .attr(PreMoveMessageAttr, doublePowerChanceMessageFunc) .attr(DoublePowerChanceAttr), new SelfStatusMove(Moves.BURNING_BULWARK, Type.FIRE, -1, 10, -1, 4, 9) - .attr(ProtectAttr, BattlerTagType.BURNING_BULWARK), + .attr(ProtectAttr, BattlerTagType.BURNING_BULWARK) + .condition(failIfLastCondition), new AttackMove(Moves.THUNDERCLAP, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 5, -1, 1, 9) .condition((user, target, move) => user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.FIGHT && !target.turnData.acted && allMoves[user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.move?.move!].category !== MoveCategory.STATUS), // TODO: is this bang correct? new AttackMove(Moves.MIGHTY_CLEAVE, Type.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9) diff --git a/src/test/moves/protect.test.ts b/src/test/moves/protect.test.ts index d792f586a37..83cd088aa47 100644 --- a/src/test/moves/protect.test.ts +++ b/src/test/moves/protect.test.ts @@ -7,7 +7,8 @@ import { Moves } from "#enums/moves"; import { Stat } from "#enums/stat"; import { allMoves } from "#app/data/move"; import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; -import { BerryPhase } from "#app/phases/berry-phase"; +import { BattlerIndex } from "#app/battle"; +import { MoveResult } from "#app/field/pokemon"; const TIMEOUT = 20 * 1000; @@ -43,13 +44,13 @@ describe("Moves - Protect", () => { test( "should protect the user from attacks", async () => { - await game.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([Species.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.PROTECT); - await game.phaseInterceptor.to(BerryPhase, false); + await game.phaseInterceptor.to("BerryPhase", false); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); }, TIMEOUT @@ -61,13 +62,13 @@ describe("Moves - Protect", () => { game.override.enemyMoveset(Array(4).fill(Moves.CEASELESS_EDGE)); vi.spyOn(allMoves[Moves.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); - await game.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([Species.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.PROTECT); - await game.phaseInterceptor.to(BerryPhase, false); + await game.phaseInterceptor.to("BerryPhase", false); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); expect(game.scene.arena.getTagOnSide(ArenaTrapTag, ArenaTagSide.ENEMY)).toBeUndefined(); @@ -79,13 +80,13 @@ describe("Moves - Protect", () => { async () => { game.override.enemyMoveset(Array(4).fill(Moves.CHARM)); - await game.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([Species.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.PROTECT); - await game.phaseInterceptor.to(BerryPhase, false); + await game.phaseInterceptor.to("BerryPhase", false); expect(leadPokemon.getStatStage(Stat.ATK)).toBe(0); }, TIMEOUT @@ -96,18 +97,38 @@ describe("Moves - Protect", () => { async () => { game.override.enemyMoveset(Array(4).fill(Moves.TACHYON_CUTTER)); - await game.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([Species.CHARIZARD]); const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.PROTECT); - await game.phaseInterceptor.to(BerryPhase, false); + await game.phaseInterceptor.to("BerryPhase", false); expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); expect(enemyPokemon.turnData.hitCount).toBe(1); }, TIMEOUT ); + + test( + "should fail if the user is the last to move in the turn", + async () => { + game.override.enemyMoveset(Array(4).fill(Moves.PROTECT)); + + await game.classicMode.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.PROTECT); + + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + + await game.phaseInterceptor.to("BerryPhase", false); + + expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + expect(leadPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }, TIMEOUT + ); }); diff --git a/src/test/moves/quick_guard.test.ts b/src/test/moves/quick_guard.test.ts index 25f98f8fa61..5f4af40eb71 100644 --- a/src/test/moves/quick_guard.test.ts +++ b/src/test/moves/quick_guard.test.ts @@ -5,8 +5,8 @@ import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Stat } from "#enums/stat"; -import { BerryPhase } from "#app/phases/berry-phase"; -import { CommandPhase } from "#app/phases/command-phase"; +import { BattlerIndex } from "#app/battle"; +import { MoveResult } from "#app/field/pokemon"; const TIMEOUT = 20 * 1000; @@ -42,19 +42,16 @@ describe("Moves - Quick Guard", () => { test( "should protect the user and allies from priority moves", async () => { - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); - const leadPokemon = game.scene.getPlayerField(); + const playerPokemon = game.scene.getPlayerField(); game.move.select(Moves.QUICK_GUARD); - - await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); - await game.phaseInterceptor.to(BerryPhase, false); + await game.phaseInterceptor.to("BerryPhase", false); - leadPokemon.forEach(p => expect(p.hp).toBe(p.getMaxHp())); + playerPokemon.forEach(p => expect(p.hp).toBe(p.getMaxHp())); }, TIMEOUT ); @@ -64,19 +61,16 @@ describe("Moves - Quick Guard", () => { game.override.enemyAbility(Abilities.PRANKSTER); game.override.enemyMoveset(Array(4).fill(Moves.GROWL)); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); - const leadPokemon = game.scene.getPlayerField(); + const playerPokemon = game.scene.getPlayerField(); game.move.select(Moves.QUICK_GUARD); - - await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.SPLASH, 1); - await game.phaseInterceptor.to(BerryPhase, false); + await game.phaseInterceptor.to("BerryPhase", false); - leadPokemon.forEach(p => expect(p.getStatStage(Stat.ATK)).toBe(0)); + playerPokemon.forEach(p => expect(p.getStatStage(Stat.ATK)).toBe(0)); }, TIMEOUT ); @@ -85,21 +79,40 @@ describe("Moves - Quick Guard", () => { async () => { game.override.enemyMoveset(Array(4).fill(Moves.WATER_SHURIKEN)); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); - const leadPokemon = game.scene.getPlayerField(); + const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); game.move.select(Moves.QUICK_GUARD); - - await game.phaseInterceptor.to(CommandPhase); - game.move.select(Moves.FOLLOW_ME, 1); - await game.phaseInterceptor.to(BerryPhase, false); + await game.phaseInterceptor.to("BerryPhase", false); - leadPokemon.forEach(p => expect(p.hp).toBe(p.getMaxHp())); + playerPokemon.forEach(p => expect(p.hp).toBe(p.getMaxHp())); enemyPokemon.forEach(p => expect(p.turnData.hitCount).toBe(1)); } ); + + test( + "should fail if the user is the last to move in the turn", + async () => { + game.override.battleType("single"); + game.override.enemyMoveset(Array(4).fill(Moves.QUICK_GUARD)); + + await game.classicMode.startBattle([Species.CHARIZARD]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.QUICK_GUARD); + + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + + await game.phaseInterceptor.to("BerryPhase", false); + + expect(enemyPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }, TIMEOUT + ); }); From deac3141a1ea35c5a34c0b5353b290c82fc342d6 Mon Sep 17 00:00:00 2001 From: "Adrian T." <68144167+torranx@users.noreply.github.com> Date: Fri, 6 Sep 2024 04:05:09 +0800 Subject: [PATCH 05/17] remove partial from tera blast (#4044) --- src/data/move.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index bb85e62519b..252c474864c 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -9072,8 +9072,7 @@ export function initMoves() { .attr(TeraBlastCategoryAttr) .attr(TeraBlastTypeAttr) .attr(TeraBlastPowerAttr) - .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, true, (user, target, move) => user.isTerastallized() && user.isOfType(Type.STELLAR)) - .partial(), + .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, true, (user, target, move) => user.isTerastallized() && user.isOfType(Type.STELLAR)), new SelfStatusMove(Moves.SILK_TRAP, Type.BUG, -1, 10, -1, 4, 9) .attr(ProtectAttr, BattlerTagType.SILK_TRAP) .condition(failIfLastCondition), From 57a3efd9e2e5106c5ebee015921982535cf08446 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Thu, 5 Sep 2024 16:51:05 -0700 Subject: [PATCH 06/17] [Bug] Fix off-by-one errors in some random number calls (#3665) * Fix off-by-one error in some random number calls * Fix mock RNG function used by tests Also remove unnecessary extra RNG mock from Glaive Rush test * Just some github UI manipulation don't mind me * Update Glaive Rush test * Remove unnecessary `Math.floor()` * Remove resolved comment * Add tsdocs to various functions * Remove `src/rng.md` file * Update tsdoc --- src/battle-scene.ts | 17 ++++- src/battle.ts | 6 ++ src/data/ability.ts | 2 +- src/data/battler-tags.ts | 2 +- src/data/move.ts | 2 +- src/field/pokemon.ts | 22 ++++++- src/phases/move-effect-phase.ts | 6 +- src/test/moves/glaive_rush.test.ts | 102 ++++++++++++++++------------- src/test/utils/gameManager.ts | 2 +- src/utils.ts | 8 ++- 10 files changed, 110 insertions(+), 59 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index d4c33663c14..9123a213f4c 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -855,7 +855,7 @@ export default class BattleScene extends SceneBase { overrideModifiers(this, false); overrideHeldItems(this, pokemon, false); if (boss && !dataSource) { - const secondaryIvs = Utils.getIvsFromId(Utils.randSeedInt(4294967295)); + const secondaryIvs = Utils.getIvsFromId(Utils.randSeedInt(4294967296)); for (let s = 0; s < pokemon.ivs.length; s++) { pokemon.ivs[s] = Math.round(Phaser.Math.Linear(Math.min(pokemon.ivs[s], secondaryIvs[s]), Math.max(pokemon.ivs[s], secondaryIvs[s]), 0.75)); @@ -961,6 +961,16 @@ export default class BattleScene extends SceneBase { this.offsetGym = this.gameMode.isClassic && this.getGeneratedOffsetGym(); } + /** + * Generates a random number using the current battle's seed + * + * This calls {@linkcode Battle.randSeedInt}(`scene`, {@linkcode range}, {@linkcode min}) in `src/battle.ts` + * which calls {@linkcode Utils.randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts` + * + * @param range How large of a range of random numbers to choose from. If {@linkcode range} <= 1, returns {@linkcode min} + * @param min The minimum integer to pick, default `0` + * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) + */ randBattleSeedInt(range: integer, min: integer = 0): integer { return this.currentBattle?.randSeedInt(this, range, min); } @@ -1112,7 +1122,8 @@ export default class BattleScene extends SceneBase { doubleTrainer = false; } } - newTrainer = trainerData !== undefined ? trainerData.toTrainer(this) : new Trainer(this, trainerType, doubleTrainer ? TrainerVariant.DOUBLE : Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT); + const variant = doubleTrainer ? TrainerVariant.DOUBLE : (Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT); + newTrainer = trainerData !== undefined ? trainerData.toTrainer(this) : new Trainer(this, trainerType, variant); this.field.add(newTrainer); } } @@ -2620,7 +2631,7 @@ export default class BattleScene extends SceneBase { if (mods.length < 1) { return mods; } - const rand = Math.floor(Utils.randSeedInt(mods.length)); + const rand = Utils.randSeedInt(mods.length); return [mods[rand], ...shuffleModifiers(mods.filter((_, i) => i !== rand))]; }; modifiers = shuffleModifiers(modifiers); diff --git a/src/battle.ts b/src/battle.ts index 0f1245a4397..b80caa9e679 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -354,6 +354,12 @@ export default class Battle { return null; } + /** + * Generates a random number using the current battle's seed. Calls {@linkcode Utils.randSeedInt} + * @param range How large of a range of random numbers to choose from. If {@linkcode range} <= 1, returns {@linkcode min} + * @param min The minimum integer to pick, default `0` + * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) + */ randSeedInt(scene: BattleScene, range: number, min: number = 0): number { if (range <= 1) { return min; diff --git a/src/data/ability.ts b/src/data/ability.ts index fde39ebb152..2407460b87d 100755 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -2642,7 +2642,7 @@ export class ConfusionOnStatusEffectAbAttr extends PostAttackAbAttr { if (simulated) { return defender.canAddTag(BattlerTagType.CONFUSED); } else { - return defender.addTag(BattlerTagType.CONFUSED, pokemon.randSeedInt(3, 2), move.id, defender.id); + return defender.addTag(BattlerTagType.CONFUSED, pokemon.randSeedIntRange(2, 5), move.id, defender.id); } } return false; diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index ef91dda7b63..ddb85600c18 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -486,7 +486,7 @@ export class ConfusedTag extends BattlerTag { if (pokemon.randSeedInt(3) === 0) { const atk = pokemon.getEffectiveStat(Stat.ATK); const def = pokemon.getEffectiveStat(Stat.DEF); - const damage = Utils.toDmgValue(((((2 * pokemon.level / 5 + 2) * 40 * atk / def) / 50) + 2) * (pokemon.randSeedInt(15, 85) / 100)); + const damage = Utils.toDmgValue(((((2 * pokemon.level / 5 + 2) * 40 * atk / def) / 50) + 2) * (pokemon.randSeedIntRange(85, 100) / 100)); pokemon.scene.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself")); pokemon.damageAndUpdate(damage); pokemon.battleData.hitCount++; diff --git a/src/data/move.ts b/src/data/move.ts index 252c474864c..96b780a8330 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -4400,7 +4400,7 @@ export class AddBattlerTagAttr extends MoveEffectAttr { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); if (moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance) { - return (this.selfTarget ? user : target).addTag(this.tagType, user.randSeedInt(this.turnCountMax - this.turnCountMin, this.turnCountMin), move.id, user.id); + return (this.selfTarget ? user : target).addTag(this.tagType, user.randSeedIntRange(this.turnCountMin, this.turnCountMax), move.id, user.id); } return false; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 269d0b1dba5..f522d50f357 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1720,7 +1720,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }; this.fusionSpecies = this.scene.randomSpecies(this.scene.currentBattle?.waveIndex || 0, this.level, false, filter, true); - this.fusionAbilityIndex = (this.fusionSpecies.abilityHidden && hasHiddenAbility ? this.fusionSpecies.ability2 ? 2 : 1 : this.fusionSpecies.ability2 ? randAbilityIndex : 0); + this.fusionAbilityIndex = (this.fusionSpecies.abilityHidden && hasHiddenAbility ? 2 : this.fusionSpecies.ability2 !== this.fusionSpecies.ability1 ? randAbilityIndex : 0); this.fusionShiny = this.shiny; this.fusionVariant = this.variant; @@ -2278,7 +2278,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!isTypeImmune) { const levelMultiplier = (2 * source.level / 5 + 2); - const randomMultiplier = ((this.scene.randBattleSeedInt(16) + 85) / 100); + const randomMultiplier = (this.randSeedIntRange(85, 100) / 100); damage.value = Utils.toDmgValue((((levelMultiplier * power * sourceAtk.value / targetDef.value) / 50) + 2) * stabMultiplier.value * typeMultiplier @@ -3448,12 +3448,30 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { fusionCanvas.remove(); } + /** + * Generates a random number using the current battle's seed, or the global seed if `this.scene.currentBattle` is falsy + * + * This calls either {@linkcode BattleScene.randBattleSeedInt}({@linkcode range}, {@linkcode min}) in `src/battle-scene.ts` + * which calls {@linkcode Battle.randSeedInt}(`scene`, {@linkcode range}, {@linkcode min}) in `src/battle.ts` + * which calls {@linkcode Utils.randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts`, + * or it directly calls {@linkcode Utils.randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts` if there is no current battle + * + * @param range How large of a range of random numbers to choose from. If {@linkcode range} <= 1, returns {@linkcode min} + * @param min The minimum integer to pick, default `0` + * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) + */ randSeedInt(range: integer, min: integer = 0): integer { return this.scene.currentBattle ? this.scene.randBattleSeedInt(range, min) : Utils.randSeedInt(range, min); } + /** + * Generates a random number using the current battle's seed, or the global seed if `this.scene.currentBattle` is falsy + * @param min The minimum integer to generate + * @param max The maximum integer to generate + * @returns a random integer between {@linkcode min} and {@linkcode max} inclusive + */ randSeedIntRange(min: integer, max: integer): integer { return this.randSeedInt((max - min) + 1, min); } diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index f100a763219..9b22c520e19 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -377,16 +377,16 @@ export class MoveEffectPhase extends PokemonPhase { return false; } - const moveAccuracy = this.move.getMove().calculateBattleAccuracy(user!, target); // TODO: is the bang correct here? + const moveAccuracy = this.move.getMove().calculateBattleAccuracy(user, target); if (moveAccuracy === -1) { return true; } const accuracyMultiplier = user.getAccuracyMultiplier(target, this.move.getMove()); - const rand = user.randSeedInt(100, 1); + const rand = user.randSeedInt(100); - return rand <= moveAccuracy * (accuracyMultiplier!); // TODO: is this bang correct? + return rand < (moveAccuracy * accuracyMultiplier); } /** Returns the {@linkcode Pokemon} using this phase's invoked move */ diff --git a/src/test/moves/glaive_rush.test.ts b/src/test/moves/glaive_rush.test.ts index 1eac3c32bb4..5867ef751b8 100644 --- a/src/test/moves/glaive_rush.test.ts +++ b/src/test/moves/glaive_rush.test.ts @@ -1,13 +1,12 @@ import { allMoves } from "#app/data/move"; import { Abilities } from "#app/enums/abilities"; -import { DamagePhase } from "#app/phases/damage-phase"; -import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; +import { Moves } from "#app/enums/moves"; +import { Species } from "#app/enums/species"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +const TIMEOUT = 20 * 1000; describe("Moves - Glaive Rush", () => { let phaserGame: Phaser.Game; @@ -25,131 +24,142 @@ describe("Moves - Glaive Rush", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); - game.override.disableCrits(); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset(Array(4).fill(Moves.GLAIVE_RUSH)); - game.override.starterSpecies(Species.KLINK); - game.override.ability(Abilities.UNNERVE); - game.override.passiveAbility(Abilities.FUR_COAT); - game.override.moveset([Moves.SHADOW_SNEAK, Moves.AVALANCHE, Moves.SPLASH, Moves.GLAIVE_RUSH]); + game.override + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Array(4).fill(Moves.GLAIVE_RUSH)) + .starterSpecies(Species.KLINK) + .ability(Abilities.BALL_FETCH) + .moveset([Moves.SHADOW_SNEAK, Moves.AVALANCHE, Moves.SPLASH, Moves.GLAIVE_RUSH]); }); it("takes double damage from attacks", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); + const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1000; - vi.spyOn(game.scene, "randBattleSeedInt").mockReturnValue(0); game.move.select(Moves.SHADOW_SNEAK); - await game.phaseInterceptor.to(DamagePhase); + await game.phaseInterceptor.to("DamagePhase"); const damageDealt = 1000 - enemy.hp; - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); game.move.select(Moves.SHADOW_SNEAK); - await game.phaseInterceptor.to(DamagePhase); + await game.phaseInterceptor.to("DamagePhase"); expect(enemy.hp).toBeLessThanOrEqual(1001 - (damageDealt * 3)); - }, 5000); // TODO: revert back to 20s + }, TIMEOUT); it("always gets hit by attacks", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); + const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1000; allMoves[Moves.AVALANCHE].accuracy = 0; game.move.select(Moves.AVALANCHE); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.hp).toBeLessThan(1000); - }, 20000); + }, TIMEOUT); it("interacts properly with multi-lens", async () => { - game.override.startingHeldItems([{ name: "MULTI_LENS", count: 2 }]); - game.override.enemyMoveset(Array(4).fill(Moves.AVALANCHE)); - await game.startBattle(); + game.override + .startingHeldItems([{ name: "MULTI_LENS", count: 2 }]) + .enemyMoveset(Array(4).fill(Moves.AVALANCHE)); + await game.classicMode.startBattle(); + const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; + enemy.hp = 1000; player.hp = 1000; allMoves[Moves.AVALANCHE].accuracy = 0; game.move.select(Moves.GLAIVE_RUSH); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBeLessThan(1000); player.hp = 1000; game.move.select(Moves.SPLASH); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1000); - }, 20000); + }, TIMEOUT); it("secondary effects only last until next move", async () => { game.override.enemyMoveset(Array(4).fill(Moves.SHADOW_SNEAK)); - await game.startBattle(); + await game.classicMode.startBattle(); + const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; + enemy.hp = 1000; player.hp = 1000; allMoves[Moves.SHADOW_SNEAK].accuracy = 0; game.move.select(Moves.GLAIVE_RUSH); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1000); game.move.select(Moves.SPLASH); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); const damagedHp = player.hp; expect(player.hp).toBeLessThan(1000); game.move.select(Moves.SPLASH); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(damagedHp); - }, 20000); + }, TIMEOUT); it("secondary effects are removed upon switching", async () => { - game.override.enemyMoveset(Array(4).fill(Moves.SHADOW_SNEAK)); - game.override.starterSpecies(0); - await game.startBattle([Species.KLINK, Species.FEEBAS]); + game.override + .enemyMoveset(Array(4).fill(Moves.SHADOW_SNEAK)) + .starterSpecies(0); + await game.classicMode.startBattle([Species.KLINK, Species.FEEBAS]); + const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; + enemy.hp = 1000; allMoves[Moves.SHADOW_SNEAK].accuracy = 0; game.move.select(Moves.GLAIVE_RUSH); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(player.getMaxHp()); game.doSwitchPokemon(1); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); game.doSwitchPokemon(1); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(player.getMaxHp()); - }, 20000); + }, TIMEOUT); it("secondary effects don't activate if move fails", async () => { game.override.moveset([Moves.SHADOW_SNEAK, Moves.PROTECT, Moves.SPLASH, Moves.GLAIVE_RUSH]); - await game.startBattle(); + await game.classicMode.startBattle(); + const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; + enemy.hp = 1000; player.hp = 1000; game.move.select(Moves.PROTECT); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); game.move.select(Moves.SHADOW_SNEAK); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); game.override.enemyMoveset(Array(4).fill(Moves.SPLASH)); const damagedHP1 = 1000 - enemy.hp; enemy.hp = 1000; game.move.select(Moves.SHADOW_SNEAK); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); const damagedHP2 = 1000 - enemy.hp; expect(damagedHP2).toBeGreaterThanOrEqual((damagedHP1 * 2) - 1); - }, 20000); + }, TIMEOUT); }); diff --git a/src/test/utils/gameManager.ts b/src/test/utils/gameManager.ts index f367fc70936..ade33aa1148 100644 --- a/src/test/utils/gameManager.ts +++ b/src/test/utils/gameManager.ts @@ -76,7 +76,7 @@ export default class GameManager { constructor(phaserGame: Phaser.Game, bypassLogin: boolean = true) { localStorage.clear(); ErrorInterceptor.getInstance().clear(); - BattleScene.prototype.randBattleSeedInt = (arg) => arg-1; + BattleScene.prototype.randBattleSeedInt = (range, min: number = 0) => min + range - 1; // This simulates a max roll this.gameWrapper = new GameWrapper(phaserGame, bypassLogin); this.scene = new BattleScene(); this.phaseInterceptor = new PhaseInterceptor(this.scene); diff --git a/src/utils.ts b/src/utils.ts index 173ea25b17c..fd5430d7276 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,5 +1,5 @@ -import i18next from "i18next"; import { MoneyFormat } from "#enums/money-format"; +import i18next from "i18next"; export const MissingTextureKey = "__MISSING"; @@ -82,6 +82,12 @@ export function randInt(range: integer, min: integer = 0): integer { return Math.floor(Math.random() * range) + min; } +/** + * Generates a random number using the global seed, or the current battle's seed if called via `Battle.randSeedInt` + * @param range How large of a range of random numbers to choose from. If {@linkcode range} <= 1, returns {@linkcode min} + * @param min The minimum integer to pick, default `0` + * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) + */ export function randSeedInt(range: integer, min: integer = 0): integer { if (range <= 1) { return min; From 39f3572c1bda83a1f91911364a5f0ed240503d96 Mon Sep 17 00:00:00 2001 From: "Adrian T." <68144167+torranx@users.noreply.github.com> Date: Fri, 6 Sep 2024 07:51:47 +0800 Subject: [PATCH 07/17] [Test] Add Dragon Cheer tests (#4013) * add dragon cheer tests * Update src/test/moves/dragon_cheer.test.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * update tests --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/test/moves/dragon_cheer.test.ts | 101 ++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 src/test/moves/dragon_cheer.test.ts diff --git a/src/test/moves/dragon_cheer.test.ts b/src/test/moves/dragon_cheer.test.ts new file mode 100644 index 00000000000..747d71bd000 --- /dev/null +++ b/src/test/moves/dragon_cheer.test.ts @@ -0,0 +1,101 @@ +import { BattlerIndex } from "#app/battle"; +import { Type } from "#app/data/type"; +import { Moves } from "#app/enums/moves"; +import { Species } from "#app/enums/species"; +import { Abilities } from "#enums/abilities"; +import GameManager from "#test/utils/gameManager"; +import { SPLASH_ONLY } from "#test/utils/testUtils"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Moves - Dragon Cheer", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + const TIMEOUT = 20 * 1000; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("double") + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(SPLASH_ONLY) + .enemyLevel(20) + .moveset([Moves.DRAGON_CHEER, Moves.TACKLE, Moves.SPLASH]); + }); + + it("increases the user's allies' critical hit ratio by one stage", async () => { + await game.classicMode.startBattle([Species.DRAGONAIR, Species.MAGIKARP]); + + const enemy = game.scene.getEnemyField()[0]; + + vi.spyOn(enemy, "getCritStage"); + + game.move.select(Moves.DRAGON_CHEER, 0); + game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + + // After Tackle + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemy.getCritStage).toHaveReturnedWith(1); // getCritStage is called on defender + }, TIMEOUT); + + it("increases the user's Dragon-type allies' critical hit ratio by two stages", async () => { + await game.classicMode.startBattle([Species.MAGIKARP, Species.DRAGONAIR]); + + const enemy = game.scene.getEnemyField()[0]; + + vi.spyOn(enemy, "getCritStage"); + + game.move.select(Moves.DRAGON_CHEER, 0); + game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + + // After Tackle + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemy.getCritStage).toHaveReturnedWith(2); // getCritStage is called on defender + }, TIMEOUT); + + it("applies the effect based on the allies' type upon use of the move, and do not change if the allies' type changes later in battle", async () => { + await game.classicMode.startBattle([Species.DRAGONAIR, Species.MAGIKARP]); + + const magikarp = game.scene.getPlayerField()[1]; + const enemy = game.scene.getEnemyField()[0]; + + vi.spyOn(enemy, "getCritStage"); + + game.move.select(Moves.DRAGON_CHEER, 0); + game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + + // After Tackle + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemy.getCritStage).toHaveReturnedWith(1); // getCritStage is called on defender + + await game.toNextTurn(); + + // Change Magikarp's type to Dragon + vi.spyOn(magikarp, "getTypes").mockReturnValue([Type.DRAGON]); + expect(magikarp.getTypes()).toEqual([Type.DRAGON]); + + game.move.select(Moves.SPLASH, 0); + game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); + + await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + + await game.phaseInterceptor.to("MoveEndPhase"); + expect(enemy.getCritStage).toHaveReturnedWith(1); // getCritStage is called on defender + }, TIMEOUT); +}); From f3bdaa12cadd7f1447acf08e84bab4603f74a0a2 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Thu, 5 Sep 2024 17:07:24 -0700 Subject: [PATCH 08/17] [Bug][Refactor] fix username-finder issues + code & visual improvements (#4055) * fix username-finder issues & refactor `login-form-ui-handler` - reduce redundancy - add hover effect for interactable game objects - add error handler for "No save files found!" - Make user finder errors support i18n * add `disableInteractive` to mockContainer --- src/locales/en/menu.json | 4 +- .../mocks/mocksContainer/mockContainer.ts | 1 + src/ui/login-form-ui-handler.ts | 121 +++++++++++------- src/ui/modal-ui-handler.ts | 56 +++++--- src/ui/ui-handler.ts | 9 ++ 5 files changed, 127 insertions(+), 64 deletions(-) diff --git a/src/locales/en/menu.json b/src/locales/en/menu.json index 97cfc0b019d..91888e9db31 100644 --- a/src/locales/en/menu.json +++ b/src/locales/en/menu.json @@ -51,5 +51,7 @@ "renamePokemon": "Rename Pokémon", "rename": "Rename", "nickname": "Nickname", - "errorServerDown": "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect." + "errorServerDown": "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect.", + "noSaves": "You don't have any save files on record!", + "tooManySaves": "You have too many save files on record!" } \ No newline at end of file diff --git a/src/test/utils/mocks/mocksContainer/mockContainer.ts b/src/test/utils/mocks/mocksContainer/mockContainer.ts index 5babd9e71b2..d2cdd852257 100644 --- a/src/test/utils/mocks/mocksContainer/mockContainer.ts +++ b/src/test/utils/mocks/mocksContainer/mockContainer.ts @@ -208,4 +208,5 @@ export default class MockContainer implements MockGameObject { return this.list; } + disableInteractive = vi.fn(); } diff --git a/src/ui/login-form-ui-handler.ts b/src/ui/login-form-ui-handler.ts index 87b7730e8df..631b2e50b02 100644 --- a/src/ui/login-form-ui-handler.ts +++ b/src/ui/login-form-ui-handler.ts @@ -8,7 +8,21 @@ import { addTextObject, TextStyle } from "./text"; import { addWindow } from "./ui-theme"; import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; +interface BuildInteractableImageOpts { + scale?: number; + x?: number; + y?: number; + origin?: { x: number; y: number }; +} + export default class LoginFormUiHandler extends FormModalUiHandler { + private readonly ERR_USERNAME: string = "invalid username"; + private readonly ERR_PASSWORD: string = "invalid password"; + private readonly ERR_ACCOUNT_EXIST: string = "account doesn't exist"; + private readonly ERR_PASSWORD_MATCH: string = "password doesn't match"; + private readonly ERR_NO_SAVES: string = "No save files found"; + private readonly ERR_TOO_MANY_SAVES: string = "Too many save files found"; + private googleImage: Phaser.GameObjects.Image; private discordImage: Phaser.GameObjects.Image; private usernameInfoImage: Phaser.GameObjects.Image; @@ -21,8 +35,23 @@ export default class LoginFormUiHandler extends FormModalUiHandler { } setup(): void { - super.setup(); + this.buildExternalPartyContainer(); + + this.infoContainer = this.scene.add.container(0, 0); + + this.usernameInfoImage = this.buildInteractableImage("settings_icon", "username-info-icon", { + x: 20, + scale: 0.5 + }); + + this.infoContainer.add(this.usernameInfoImage); + this.getUi().add(this.infoContainer); + this.infoContainer.setVisible(false); + this.infoContainer.disableInteractive(); + } + + private buildExternalPartyContainer() { this.externalPartyContainer = this.scene.add.container(0, 0); this.externalPartyContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width / 12, this.scene.game.canvas.height / 12), Phaser.Geom.Rectangle.Contains); this.externalPartyTitle = addTextObject(this.scene, 0, 4, "", TextStyle.SETTINGS_LABEL); @@ -31,23 +60,8 @@ export default class LoginFormUiHandler extends FormModalUiHandler { this.externalPartyContainer.add(this.externalPartyBg); this.externalPartyContainer.add(this.externalPartyTitle); - this.infoContainer = this.scene.add.container(0, 0); - this.infoContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width / 12, this.scene.game.canvas.height / 12), Phaser.Geom.Rectangle.Contains); - - const googleImage = this.scene.add.image(0, 0, "google"); - googleImage.setOrigin(0, 0); - googleImage.setScale(0.07); - googleImage.setInteractive(); - googleImage.setName("google-icon"); - this.googleImage = googleImage; - - const discordImage = this.scene.add.image(20, 0, "discord"); - discordImage.setOrigin(0, 0); - discordImage.setScale(0.07); - discordImage.setInteractive(); - discordImage.setName("discord-icon"); - - this.discordImage = discordImage; + this.googleImage = this.buildInteractableImage("google", "google-icon"); + this.discordImage = this.buildInteractableImage("discord", "discord-icon"); this.externalPartyContainer.add(this.googleImage); this.externalPartyContainer.add(this.discordImage); @@ -55,59 +69,52 @@ export default class LoginFormUiHandler extends FormModalUiHandler { this.externalPartyContainer.add(this.googleImage); this.externalPartyContainer.add(this.discordImage); this.externalPartyContainer.setVisible(false); - - const usernameInfoImage = this.scene.add.image(20, 0, "settings_icon"); - usernameInfoImage.setOrigin(0, 0); - usernameInfoImage.setScale(0.5); - usernameInfoImage.setInteractive(); - usernameInfoImage.setName("username-info-icon"); - this.usernameInfoImage = usernameInfoImage; - - this.infoContainer.add(this.usernameInfoImage); - this.getUi().add(this.infoContainer); - this.infoContainer.setVisible(false); } - getModalTitle(config?: ModalConfig): string { + override getModalTitle(_config?: ModalConfig): string { return i18next.t("menu:login"); } - getFields(config?: ModalConfig): string[] { + override getFields(_config?: ModalConfig): string[] { return [ i18next.t("menu:username"), i18next.t("menu:password") ]; } - getWidth(config?: ModalConfig): number { + override getWidth(_config?: ModalConfig): number { return 160; } - getMargin(config?: ModalConfig): [number, number, number, number] { + override getMargin(_config?: ModalConfig): [number, number, number, number] { return [ 0, 0, 48, 0 ]; } - getButtonLabels(config?: ModalConfig): string[] { + override getButtonLabels(_config?: ModalConfig): string[] { return [ i18next.t("menu:login"), i18next.t("menu:register")]; } - getReadableErrorMessage(error: string): string { + override getReadableErrorMessage(error: string): string { const colonIndex = error?.indexOf(":"); if (colonIndex > 0) { error = error.slice(0, colonIndex); } switch (error) { - case "invalid username": + case this.ERR_USERNAME: return i18next.t("menu:invalidLoginUsername"); - case "invalid password": + case this.ERR_PASSWORD: return i18next.t("menu:invalidLoginPassword"); - case "account doesn't exist": + case this.ERR_ACCOUNT_EXIST: return i18next.t("menu:accountNonExistent"); - case "password doesn't match": + case this.ERR_PASSWORD_MATCH: return i18next.t("menu:unmatchingPassword"); + case this.ERR_NO_SAVES: + return i18next.t("menu:noSaves"); + case this.ERR_TOO_MANY_SAVES: + return i18next.t("menu:tooManySaves"); } return super.getReadableErrorMessage(error); } - show(args: any[]): boolean { + override show(args: any[]): boolean { if (super.show(args)) { const config = args[0] as ModalConfig; @@ -148,17 +155,16 @@ export default class LoginFormUiHandler extends FormModalUiHandler { return false; } - clear() { + override clear() { super.clear(); this.externalPartyContainer.setVisible(false); this.infoContainer.setVisible(false); + this.setMouseCursorStyle("default"); //reset cursor - this.discordImage.off("pointerdown"); - this.googleImage.off("pointerdown"); - this.usernameInfoImage.off("pointerdown"); + [this.discordImage, this.googleImage, this.usernameInfoImage].forEach((img) => img.off("pointerdown")); } - processExternalProvider(config: ModalConfig) : void { + private processExternalProvider(config: ModalConfig) : void { this.externalPartyTitle.setText(i18next.t("menu:orUse") ?? ""); this.externalPartyTitle.setX(20+this.externalPartyTitle.text.length); this.externalPartyTitle.setVisible(true); @@ -205,6 +211,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { label: dataKeys[i].replace(keyToFind, ""), handler: () => { this.scene.ui.revertMode(); + this.infoContainer.disableInteractive(); return true; } }); @@ -213,8 +220,13 @@ export default class LoginFormUiHandler extends FormModalUiHandler { options: options, delay: 1000 }); + this.infoContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width, this.scene.game.canvas.height), Phaser.Geom.Rectangle.Contains); } else { - return onFail("You have too many save files to use this"); + if (dataKeys.length > 2) { + return onFail(this.ERR_TOO_MANY_SAVES); + } else { + return onFail(this.ERR_NO_SAVES); + } } }); @@ -236,4 +248,21 @@ export default class LoginFormUiHandler extends FormModalUiHandler { alpha: 1 }); } + + private buildInteractableImage(texture: string, name: string, opts: BuildInteractableImageOpts = {}) { + const { + scale = 0.07, + x = 0, + y = 0, + origin = { x: 0, y: 0 } + } = opts; + const img = this.scene.add.image(x, y, texture); + img.setName(name); + img.setOrigin(origin.x, origin.y); + img.setScale(scale); + img.setInteractive(); + this.addInteractionHoverEffect(img); + + return img; + } } diff --git a/src/ui/modal-ui-handler.ts b/src/ui/modal-ui-handler.ts index cecdacc1eb9..5f586ec8db7 100644 --- a/src/ui/modal-ui-handler.ts +++ b/src/ui/modal-ui-handler.ts @@ -57,29 +57,35 @@ export abstract class ModalUiHandler extends UiHandler { const buttonLabels = this.getButtonLabels(); - const buttonTopMargin = this.getButtonTopMargin(); - for (const label of buttonLabels) { - const buttonLabel = addTextObject(this.scene, 0, 8, label, TextStyle.TOOLTIP_CONTENT); - buttonLabel.setOrigin(0.5, 0.5); - - const buttonBg = addWindow(this.scene, 0, 0, buttonLabel.getBounds().width + 8, 16, false, false, 0, 0, WindowVariant.THIN); - buttonBg.setOrigin(0.5, 0); - buttonBg.setInteractive(new Phaser.Geom.Rectangle(0, 0, buttonBg.width, buttonBg.height), Phaser.Geom.Rectangle.Contains); - - const buttonContainer = this.scene.add.container(0, buttonTopMargin); - - this.buttonBgs.push(buttonBg); - this.buttonContainers.push(buttonContainer); - - buttonContainer.add(buttonBg); - buttonContainer.add(buttonLabel); - this.modalContainer.add(buttonContainer); + this.addButton(label); } this.modalContainer.setVisible(false); } + private addButton(label: string) { + const buttonTopMargin = this.getButtonTopMargin(); + const buttonLabel = addTextObject(this.scene, 0, 8, label, TextStyle.TOOLTIP_CONTENT); + buttonLabel.setOrigin(0.5, 0.5); + + const buttonBg = addWindow(this.scene, 0, 0, buttonLabel.getBounds().width + 8, 16, false, false, 0, 0, WindowVariant.THIN); + buttonBg.setOrigin(0.5, 0); + buttonBg.setInteractive(new Phaser.Geom.Rectangle(0, 0, buttonBg.width, buttonBg.height), Phaser.Geom.Rectangle.Contains); + + const buttonContainer = this.scene.add.container(0, buttonTopMargin); + + this.buttonBgs.push(buttonBg); + this.buttonContainers.push(buttonContainer); + + buttonContainer.add(buttonBg); + buttonContainer.add(buttonLabel); + + this.addInteractionHoverEffect(buttonBg); + + this.modalContainer.add(buttonContainer); + } + show(args: any[]): boolean { if (args.length >= 1 && "buttonActions" in args[0]) { super.show(args); @@ -135,4 +141,20 @@ export abstract class ModalUiHandler extends UiHandler { this.buttonBgs.map(bg => bg.off("pointerdown")); } + + /** + * Adds a hover effect to a game object which changes the cursor to a `pointer` and tints it slighly + * @param gameObject the game object to add hover events/effects to + */ + protected addInteractionHoverEffect(gameObject: Phaser.GameObjects.Image | Phaser.GameObjects.NineSlice | Phaser.GameObjects.Sprite) { + gameObject.on("pointerover", () => { + this.setMouseCursorStyle("pointer"); + gameObject.setTint(0xbbbbbb); + }); + + gameObject.on("pointerout", () => { + this.setMouseCursorStyle("default"); + gameObject.clearTint(); + }); + } } diff --git a/src/ui/ui-handler.ts b/src/ui/ui-handler.ts index 94625efaa75..d9f0a876b71 100644 --- a/src/ui/ui-handler.ts +++ b/src/ui/ui-handler.ts @@ -52,6 +52,15 @@ export default abstract class UiHandler { return changed; } + /** + * Changes the style of the mouse cursor. + * @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/cursor} + * @param cursorStyle cursor style to apply + */ + protected setMouseCursorStyle(cursorStyle: "pointer" | "default") { + this.scene.input.manager.canvas.style.cursor = cursorStyle; + } + clear() { this.active = false; } From f1650d251594307e75170b8f0954b4e87bc3a5d4 Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Thu, 5 Sep 2024 22:32:13 -0400 Subject: [PATCH 09/17] [Sprite] Fix Tangrowth Variants (#4059) * [Sprite] Front Tangrowth male variants * [Sprite] Front Tangrowth female variants * [Sprite] Back Tangrowth female variants * [Sprite] Back Tangrowth male epic palette * Delete public/images/pokemon/variant/465_2.png * Delete public/images/pokemon/variant/back/465_3.png * Delete public/images/pokemon/variant/465_3.png * Delete public/images/pokemon/variant/465_2.json * Delete public/images/pokemon/variant/465_3.json * Delete public/images/pokemon/variant/back/465_3.json * [Sprite] Update Tangrowth variants with females --- public/images/pokemon/variant/465.json | 22 + public/images/pokemon/variant/465_2.json | 4094 ----------------- public/images/pokemon/variant/465_2.png | Bin 38802 -> 0 bytes public/images/pokemon/variant/465_3.json | 4094 ----------------- public/images/pokemon/variant/465_3.png | Bin 43995 -> 0 bytes .../images/pokemon/variant/_masterlist.json | 16 +- public/images/pokemon/variant/back/465.json | 11 +- public/images/pokemon/variant/back/465_3.json | 4094 ----------------- public/images/pokemon/variant/back/465_3.png | Bin 34654 -> 0 bytes .../pokemon/variant/back/female/465.json | 21 + public/images/pokemon/variant/female/465.json | 22 + 11 files changed, 88 insertions(+), 12286 deletions(-) create mode 100644 public/images/pokemon/variant/465.json delete mode 100644 public/images/pokemon/variant/465_2.json delete mode 100644 public/images/pokemon/variant/465_2.png delete mode 100644 public/images/pokemon/variant/465_3.json delete mode 100644 public/images/pokemon/variant/465_3.png delete mode 100644 public/images/pokemon/variant/back/465_3.json delete mode 100644 public/images/pokemon/variant/back/465_3.png create mode 100644 public/images/pokemon/variant/back/female/465.json create mode 100644 public/images/pokemon/variant/female/465.json diff --git a/public/images/pokemon/variant/465.json b/public/images/pokemon/variant/465.json new file mode 100644 index 00000000000..a7ff2338057 --- /dev/null +++ b/public/images/pokemon/variant/465.json @@ -0,0 +1,22 @@ +{ + "1": { + "529cc5": "8153c7", + "d65a94": "5ad662", + "3a73ad": "6b3aad", + "bd216b": "21bd69", + "5a193a": "195a2a", + "193a63": "391963", + "295a84": "472984" + }, + "2": { + "529cc5": "ffedb6", + "d65a94": "e67d2f", + "3a73ad": "ebc582", + "bd216b": "b35131", + "31313a": "3d1519", + "5a193a": "752e2e", + "193a63": "705040", + "295a84": "ad875a", + "4a4a52": "57211a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/465_2.json b/public/images/pokemon/variant/465_2.json deleted file mode 100644 index 7c6d5ea081a..00000000000 --- a/public/images/pokemon/variant/465_2.json +++ /dev/null @@ -1,4094 +0,0 @@ -{ - "textures": [ - { - "image": "465_2.png", - "format": "RGBA8888", - "size": { - "w": 407, - "h": 407 - }, - "scale": 1, - "frames": [ - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0171.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0172.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0169.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0170.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0185.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0186.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0187.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0188.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0163.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0164.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0179.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0180.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0173.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0174.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 98, - "h": 65 - }, - "frame": { - "x": 64, - "y": 65, - "w": 98, - "h": 65 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 98, - "h": 65 - }, - "frame": { - "x": 64, - "y": 65, - "w": 98, - "h": 65 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 98, - "h": 65 - }, - "frame": { - "x": 64, - "y": 65, - "w": 98, - "h": 65 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 98, - "h": 65 - }, - "frame": { - "x": 64, - "y": 65, - "w": 98, - "h": 65 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0165.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0166.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0157.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0158.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0189.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0190.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0167.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0168.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0177.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0178.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0161.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0162.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0193.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0194.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0181.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0182.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0175.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0176.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0183.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0184.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 86, - "h": 66 - }, - "frame": { - "x": 0, - "y": 196, - "w": 86, - "h": 66 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 86, - "h": 66 - }, - "frame": { - "x": 0, - "y": 196, - "w": 86, - "h": 66 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 90, - "h": 66 - }, - "frame": { - "x": 86, - "y": 197, - "w": 90, - "h": 66 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 90, - "h": 66 - }, - "frame": { - "x": 86, - "y": 197, - "w": 90, - "h": 66 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 90, - "h": 66 - }, - "frame": { - "x": 86, - "y": 197, - "w": 90, - "h": 66 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 90, - "h": 66 - }, - "frame": { - "x": 86, - "y": 197, - "w": 90, - "h": 66 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 66 - }, - "frame": { - "x": 176, - "y": 198, - "w": 94, - "h": 66 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 66 - }, - "frame": { - "x": 176, - "y": 198, - "w": 94, - "h": 66 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 270, - "y": 198, - "w": 97, - "h": 66 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 270, - "y": 198, - "w": 97, - "h": 66 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 86, - "h": 66 - }, - "frame": { - "x": 0, - "y": 262, - "w": 86, - "h": 66 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 86, - "h": 66 - }, - "frame": { - "x": 0, - "y": 262, - "w": 86, - "h": 66 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0159.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0160.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0191.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0192.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 98, - "h": 66 - }, - "frame": { - "x": 156, - "y": 264, - "w": 98, - "h": 66 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 98, - "h": 66 - }, - "frame": { - "x": 156, - "y": 264, - "w": 98, - "h": 66 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 98, - "h": 66 - }, - "frame": { - "x": 156, - "y": 264, - "w": 98, - "h": 66 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 98, - "h": 66 - }, - "frame": { - "x": 156, - "y": 264, - "w": 98, - "h": 66 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 254, - "y": 264, - "w": 97, - "h": 66 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 254, - "y": 264, - "w": 97, - "h": 66 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 98, - "h": 66 - }, - "frame": { - "x": 0, - "y": 330, - "w": 98, - "h": 66 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 98, - "h": 66 - }, - "frame": { - "x": 0, - "y": 330, - "w": 98, - "h": 66 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 98, - "y": 330, - "w": 97, - "h": 66 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 98, - "y": 330, - "w": 97, - "h": 66 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 195, - "y": 330, - "w": 97, - "h": 66 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 195, - "y": 330, - "w": 97, - "h": 66 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 94, - "h": 66 - }, - "frame": { - "x": 292, - "y": 330, - "w": 94, - "h": 66 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 94, - "h": 66 - }, - "frame": { - "x": 292, - "y": 330, - "w": 94, - "h": 66 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9fb6238f8e585be9be5e520abb59e23d:2204e0edc6a9e184240a16c4ee5faa7c:06d67de9e8d7f60fc986e0c00145d6b1$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/465_2.png b/public/images/pokemon/variant/465_2.png deleted file mode 100644 index db25e88ad987fbad282a87365e121b0f2755af87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38802 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 acmjR-T^1VC^$#3i9C|uN+GUz{VgCiM=7Yij diff --git a/public/images/pokemon/variant/465_3.json b/public/images/pokemon/variant/465_3.json deleted file mode 100644 index c092ec585e7..00000000000 --- a/public/images/pokemon/variant/465_3.json +++ /dev/null @@ -1,4094 +0,0 @@ -{ - "textures": [ - { - "image": "465_3.png", - "format": "RGBA8888", - "size": { - "w": 407, - "h": 407 - }, - "scale": 1, - "frames": [ - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0171.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0172.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 74, - "h": 64 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 64 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0169.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0170.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 74, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0185.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0186.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 83, - "h": 65 - }, - "frame": { - "x": 157, - "y": 0, - "w": 83, - "h": 65 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0187.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0188.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 74, - "h": 65 - }, - "frame": { - "x": 240, - "y": 0, - "w": 74, - "h": 65 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0163.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0164.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0179.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0180.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 314, - "y": 0, - "w": 83, - "h": 66 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0173.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0174.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 0, - "y": 64, - "w": 64, - "h": 66 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 98, - "h": 65 - }, - "frame": { - "x": 64, - "y": 65, - "w": 98, - "h": 65 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 98, - "h": 65 - }, - "frame": { - "x": 64, - "y": 65, - "w": 98, - "h": 65 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 98, - "h": 65 - }, - "frame": { - "x": 64, - "y": 65, - "w": 98, - "h": 65 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 98, - "h": 65 - }, - "frame": { - "x": 64, - "y": 65, - "w": 98, - "h": 65 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0165.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0166.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 162, - "y": 65, - "w": 88, - "h": 66 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0157.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0158.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0189.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0190.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 17, - "y": 1, - "w": 64, - "h": 66 - }, - "frame": { - "x": 250, - "y": 65, - "w": 64, - "h": 66 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0167.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0168.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 314, - "y": 66, - "w": 93, - "h": 66 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0177.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0178.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 0, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0161.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0162.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0193.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0194.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 76, - "h": 66 - }, - "frame": { - "x": 76, - "y": 130, - "w": 76, - "h": 66 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0181.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0182.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 88, - "h": 66 - }, - "frame": { - "x": 152, - "y": 131, - "w": 88, - "h": 66 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0175.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0176.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 240, - "y": 131, - "w": 70, - "h": 67 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0183.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0184.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 93, - "h": 66 - }, - "frame": { - "x": 310, - "y": 132, - "w": 93, - "h": 66 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 86, - "h": 66 - }, - "frame": { - "x": 0, - "y": 196, - "w": 86, - "h": 66 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 86, - "h": 66 - }, - "frame": { - "x": 0, - "y": 196, - "w": 86, - "h": 66 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 90, - "h": 66 - }, - "frame": { - "x": 86, - "y": 197, - "w": 90, - "h": 66 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 90, - "h": 66 - }, - "frame": { - "x": 86, - "y": 197, - "w": 90, - "h": 66 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 90, - "h": 66 - }, - "frame": { - "x": 86, - "y": 197, - "w": 90, - "h": 66 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 90, - "h": 66 - }, - "frame": { - "x": 86, - "y": 197, - "w": 90, - "h": 66 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 66 - }, - "frame": { - "x": 176, - "y": 198, - "w": 94, - "h": 66 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 94, - "h": 66 - }, - "frame": { - "x": 176, - "y": 198, - "w": 94, - "h": 66 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 270, - "y": 198, - "w": 97, - "h": 66 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 270, - "y": 198, - "w": 97, - "h": 66 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 86, - "h": 66 - }, - "frame": { - "x": 0, - "y": 262, - "w": 86, - "h": 66 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 86, - "h": 66 - }, - "frame": { - "x": 0, - "y": 262, - "w": 86, - "h": 66 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0159.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0160.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0191.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0192.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 14, - "y": 0, - "w": 70, - "h": 67 - }, - "frame": { - "x": 86, - "y": 263, - "w": 70, - "h": 67 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 98, - "h": 66 - }, - "frame": { - "x": 156, - "y": 264, - "w": 98, - "h": 66 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 98, - "h": 66 - }, - "frame": { - "x": 156, - "y": 264, - "w": 98, - "h": 66 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 98, - "h": 66 - }, - "frame": { - "x": 156, - "y": 264, - "w": 98, - "h": 66 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 98, - "h": 66 - }, - "frame": { - "x": 156, - "y": 264, - "w": 98, - "h": 66 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 254, - "y": 264, - "w": 97, - "h": 66 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 254, - "y": 264, - "w": 97, - "h": 66 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 98, - "h": 66 - }, - "frame": { - "x": 0, - "y": 330, - "w": 98, - "h": 66 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 98, - "h": 66 - }, - "frame": { - "x": 0, - "y": 330, - "w": 98, - "h": 66 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 98, - "y": 330, - "w": 97, - "h": 66 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 98, - "y": 330, - "w": 97, - "h": 66 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 195, - "y": 330, - "w": 97, - "h": 66 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 97, - "h": 66 - }, - "frame": { - "x": 195, - "y": 330, - "w": 97, - "h": 66 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 94, - "h": 66 - }, - "frame": { - "x": 292, - "y": 330, - "w": 94, - "h": 66 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 98, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 94, - "h": 66 - }, - "frame": { - "x": 292, - "y": 330, - "w": 94, - "h": 66 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9fb6238f8e585be9be5e520abb59e23d:2204e0edc6a9e184240a16c4ee5faa7c:06d67de9e8d7f60fc986e0c00145d6b1$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/465_3.png b/public/images/pokemon/variant/465_3.png deleted file mode 100644 index fe8e764028b87c1e1e5cc7148976b299c5cb583d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43995 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

GW16L@n!k&t zT@5-HTNuveUiFs*EAZ5F^r|9CgZ=cT?^MhmK17-d$pBaE`U6)Tt%h8Gt+&F0axJz1 zxsYKdBOmwgbNQ7f$%oN5!Gwg5a>wlXQ&qqMWc`@?Rb}mWNg@Ur*e#=Lrr0zoxEre^ zMh0!`z@IH9)mb4Js#9lu%*`LFv_kCX7MOL_JF1u+;cyCD20z)wgjwM53^m{P(3nxy zLXXh|XWgP7xQ_I&HYcEs2KH(v)=#cq+wxsr6Z#8PF!&5gX$@)`@x6?Mhd^iOBNJCcsB+sOz0HMh<*~gks3^-w>UU2b zFtA7}Ka>|O{Tu(+4wJn_xp%HSp2o(8il{Hf)3vsqZNJJ~lNW_P`Pt!`0X#9&l(YFq za&Ch70S_K#4E8pBBE1zI0^%W>=}rNj5uKAW?jRIMGV6HJ!(A%Oy{U3-)7btDR>Qj5 zwNRhrg+zn%;u%3^Zkf>Z?9fIDzvt~{lydD)>qcfRn=QM)MEz!5fjcN?qZq1B0q zQRq=n8%sXK9zv5EulXHrR-Oecj^v$P{^cY@bDT<9c5mVyATajX+XX&kWZB zP!I%<^(f>0+a2czeV>p~y2oFmmE0llVv}G<@tN!8=^1~?;D?JF*tK~cO*)HjNEt;> zCDcqsYU`3Ro&T3@Q71p*ax(rR8{u$z`z-|0b9rrmgjvwsTq6XRvVD4%b9wQ+l0F(* zG4?@V)k-M_v_kAW+rA0SW1J3N1{-^FA@X9Y>TG>qs?0>_J~I3}d=_$}l{07O9Q@Qi z7_jHX(cL|@(uLntLCUQW{PToBA7YW=GfMlHPB(Qf_>>x9aZxu8w{GUK_uNS%>>KmE*S!F7bGmAy;eu_I-+S1o|TZ?^tm?Z@afxw_iP+poYh` z-!K?NtPI*9B$p;-Z z4mNSKPlWd8gAg+#p+}AkE5!5ughhh{j&&_ljjpo7Bzla#&&|ixQ#Hk(A8A6;u5GC- z4o}42>?8-j71<;~NR|pa;x$FW|L Date: Fri, 6 Sep 2024 00:59:22 -0700 Subject: [PATCH 10/17] [Bug] Fix Aura Break applying without Dark/Fairy Aura present (#4057) * Fix Aura Break ignoring active Dark/Fairy Aura condition * Add conditional post-summon message --------- Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> --- src/data/ability.ts | 6 ++++-- src/data/move.ts | 5 ++++- src/locales/en/ability-trigger.json | 1 + src/test/abilities/aura_break.test.ts | 27 ++++++++++++++++++++------- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 2407460b87d..10aba1f030e 100755 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -5333,8 +5333,10 @@ export function initAbilities() { .attr(FieldMoveTypePowerBoostAbAttr, Type.FAIRY, 4 / 3), new Ability(Abilities.AURA_BREAK, 6) .ignorable() - .conditionalAttr(target => target.hasAbility(Abilities.DARK_AURA), FieldMoveTypePowerBoostAbAttr, Type.DARK, 9 / 16) - .conditionalAttr(target => target.hasAbility(Abilities.FAIRY_AURA), FieldMoveTypePowerBoostAbAttr, Type.FAIRY, 9 / 16), + .conditionalAttr(pokemon => pokemon.scene.getField(true).some(p => p.hasAbility(Abilities.DARK_AURA)), FieldMoveTypePowerBoostAbAttr, Type.DARK, 9 / 16) + .conditionalAttr(pokemon => pokemon.scene.getField(true).some(p => p.hasAbility(Abilities.FAIRY_AURA)), FieldMoveTypePowerBoostAbAttr, Type.FAIRY, 9 / 16) + .conditionalAttr(pokemon => pokemon.scene.getField(true).some(p => p.hasAbility(Abilities.DARK_AURA) || p.hasAbility(Abilities.FAIRY_AURA)), + PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAuraBreak", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })), new Ability(Abilities.PRIMORDIAL_SEA, 6) .attr(PostSummonWeatherChangeAbAttr, WeatherType.HEAVY_RAIN) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.HEAVY_RAIN) diff --git a/src/data/move.ts b/src/data/move.ts index 96b780a8330..19014c0eb30 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -757,7 +757,10 @@ export default class Move implements Localizable { const fieldAuras = new Set( source.scene.getField(true) - .map((p) => p.getAbilityAttrs(FieldMoveTypePowerBoostAbAttr) as FieldMoveTypePowerBoostAbAttr[]) + .map((p) => p.getAbilityAttrs(FieldMoveTypePowerBoostAbAttr).filter(attr => { + const condition = attr.getCondition(); + return (!condition || condition(p)); + }) as FieldMoveTypePowerBoostAbAttr[]) .flat(), ); for (const aura of fieldAuras) { diff --git a/src/locales/en/ability-trigger.json b/src/locales/en/ability-trigger.json index 4f1d4dac766..a7383cea16b 100644 --- a/src/locales/en/ability-trigger.json +++ b/src/locales/en/ability-trigger.json @@ -52,6 +52,7 @@ "postSummonTeravolt": "{{pokemonNameWithAffix}} is radiating a bursting aura!", "postSummonDarkAura": "{{pokemonNameWithAffix}} is radiating a Dark Aura!", "postSummonFairyAura": "{{pokemonNameWithAffix}} is radiating a Fairy Aura!", + "postSummonAuraBreak": "{{pokemonNameWithAffix}} reversed all other Pokémon's auras!", "postSummonNeutralizingGas": "{{pokemonNameWithAffix}}'s Neutralizing Gas filled the area!", "postSummonAsOneGlastrier": "{{pokemonNameWithAffix}} has two Abilities!", "postSummonAsOneSpectrier": "{{pokemonNameWithAffix}} has two Abilities!", diff --git a/src/test/abilities/aura_break.test.ts b/src/test/abilities/aura_break.test.ts index 7de300c157a..0fb2212d817 100644 --- a/src/test/abilities/aura_break.test.ts +++ b/src/test/abilities/aura_break.test.ts @@ -1,5 +1,4 @@ import { allMoves } from "#app/data/move"; -import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; @@ -33,31 +32,45 @@ describe("Abilities - Aura Break", () => { game.override.enemySpecies(Species.SHUCKLE); }); - it("reverses the effect of fairy aura", async () => { + it("reverses the effect of Fairy Aura", async () => { const moveToCheck = allMoves[Moves.MOONBLAST]; const basePower = moveToCheck.power; game.override.ability(Abilities.FAIRY_AURA); vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU]); game.move.select(Moves.MOONBLAST); - await game.phaseInterceptor.to(MoveEffectPhase); + await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(expect.closeTo(basePower * auraBreakMultiplier)); }); - it("reverses the effect of dark aura", async () => { + it("reverses the effect of Dark Aura", async () => { const moveToCheck = allMoves[Moves.DARK_PULSE]; const basePower = moveToCheck.power; game.override.ability(Abilities.DARK_AURA); vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU]); game.move.select(Moves.DARK_PULSE); - await game.phaseInterceptor.to(MoveEffectPhase); + await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(expect.closeTo(basePower * auraBreakMultiplier)); }); + + it("has no effect if neither Fairy Aura nor Dark Aura are present", async () => { + const moveToCheck = allMoves[Moves.MOONBLAST]; + const basePower = moveToCheck.power; + + game.override.ability(Abilities.BALL_FETCH); + vi.spyOn(moveToCheck, "calculateBattlePower"); + + await game.classicMode.startBattle([Species.PIKACHU]); + game.move.select(Moves.MOONBLAST); + await game.phaseInterceptor.to("MoveEffectPhase"); + + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower); + }); }); From d58f03528776a56e0fc1b8cfc6d1a99ae3561038 Mon Sep 17 00:00:00 2001 From: "Adrian T." <68144167+torranx@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:41:48 +0800 Subject: [PATCH 11/17] [Misc] Migrate REROLL_TARGET to SHOP_CURSOR_TARGET (#4016) * migrate reroll target to shop cursor target * delete key after migrating --- src/system/game-data.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 1a47294906e..746af4d47a5 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -857,6 +857,14 @@ export class GameData { const settings = JSON.parse(localStorage.getItem("settings")!); // TODO: is this bang correct? + // TODO: Remove this block after save migration is implemented + if (settings.hasOwnProperty("REROLL_TARGET") && !settings.hasOwnProperty(SettingKeys.Shop_Cursor_Target)) { + settings[SettingKeys.Shop_Cursor_Target] = settings["REROLL_TARGET"]; + delete settings["REROLL_TARGET"]; + localStorage.setItem("settings", JSON.stringify(settings)); + } + // End of block to remove + for (const setting of Object.keys(settings)) { setSetting(this.scene, setting, settings[setting]); } From d8304421cf145f0b714ec77908a72db5fb137562 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Fri, 6 Sep 2024 10:23:19 -0700 Subject: [PATCH 12/17] fix endless end dialogue (#4069) It was only displaying `ending_endless` because the `PGM` prefix was still present --- src/phases/game-over-phase.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index ebe58b20d3e..17805e90f0f 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -49,7 +49,9 @@ export class GameOverPhase extends BattlePhase { } if (this.victory && this.scene.gameMode.isEndless) { - this.scene.ui.showDialogue(i18next.t("PGMmiscDialogue:ending_endless"), i18next.t("PGMmiscDialogue:ending_name"), 0, () => this.handleGameOver()); + const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const genderStr = PlayerGender[genderIndex].toLowerCase(); + this.scene.ui.showDialogue(i18next.t("miscDialogue:ending_endless", { context: genderStr }), i18next.t("miscDialogue:ending_name"), 0, () => this.handleGameOver()); } else if (this.victory || !this.scene.enableRetries) { this.handleGameOver(); } else { From acda34c2e4d040aba44908691b23e1005dfdb1a6 Mon Sep 17 00:00:00 2001 From: "Adrian T." <68144167+torranx@users.noreply.github.com> Date: Sat, 7 Sep 2024 02:15:15 +0800 Subject: [PATCH 13/17] [P2 Bug] Underwater and underground Pokemond do not take sand/hail damage (#4047) * fix sandstorm/hail interaction with semi invulnerable state * cant fly high enough to avoid sandstorm/hail damage --- src/phases/weather-effect-phase.ts | 15 +++--- src/test/arena/weather_hail.test.ts | 62 ++++++++++++++++++++++++ src/test/arena/weather_sandstorm.test.ts | 59 ++++++++++++++++++++++ 3 files changed, 129 insertions(+), 7 deletions(-) create mode 100644 src/test/arena/weather_hail.test.ts create mode 100644 src/test/arena/weather_sandstorm.test.ts diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index 71ca7f9b505..ccfc9abb64f 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -1,10 +1,11 @@ -import BattleScene from "#app/battle-scene.js"; +import BattleScene from "#app/battle-scene"; import { applyPreWeatherEffectAbAttrs, SuppressWeatherEffectAbAttr, PreWeatherDamageAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPostWeatherLapseAbAttrs, PostWeatherLapseAbAttr } from "#app/data/ability.js"; -import { CommonAnim } from "#app/data/battle-anims.js"; -import { Weather, getWeatherDamageMessage, getWeatherLapseMessage } from "#app/data/weather.js"; -import { WeatherType } from "#app/enums/weather-type.js"; -import Pokemon, { HitResult } from "#app/field/pokemon.js"; -import * as Utils from "#app/utils.js"; +import { CommonAnim } from "#app/data/battle-anims"; +import { Weather, getWeatherDamageMessage, getWeatherLapseMessage } from "#app/data/weather"; +import { BattlerTagType } from "#app/enums/battler-tag-type.js"; +import { WeatherType } from "#app/enums/weather-type"; +import Pokemon, { HitResult } from "#app/field/pokemon"; +import * as Utils from "#app/utils"; import { CommonAnimPhase } from "./common-anim-phase"; export class WeatherEffectPhase extends CommonAnimPhase { @@ -39,7 +40,7 @@ export class WeatherEffectPhase extends CommonAnimPhase { applyPreWeatherEffectAbAttrs(PreWeatherDamageAbAttr, pokemon, this.weather, cancelled); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); - if (cancelled.value) { + if (cancelled.value || pokemon.getTag(BattlerTagType.UNDERGROUND) || pokemon.getTag(BattlerTagType.UNDERWATER)) { return; } diff --git a/src/test/arena/weather_hail.test.ts b/src/test/arena/weather_hail.test.ts new file mode 100644 index 00000000000..75125b3448c --- /dev/null +++ b/src/test/arena/weather_hail.test.ts @@ -0,0 +1,62 @@ +import { WeatherType } from "#app/data/weather"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { SPLASH_ONLY } from "../utils/testUtils"; +import { BattlerIndex } from "#app/battle"; + +describe("Weather - Hail", () => { + 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.override + .weather(WeatherType.HAIL) + .battleType("single") + .moveset(SPLASH_ONLY) + .enemyMoveset(SPLASH_ONLY) + .enemySpecies(Species.MAGIKARP); + }); + + it("inflicts damage equal to 1/16 of Pokemon's max HP at turn end", async () => { + await game.classicMode.startBattle([Species.MAGIKARP]); + + game.move.select(Moves.SPLASH); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + + await game.phaseInterceptor.to("TurnEndPhase"); + + game.scene.getField(true).forEach(pokemon => { + expect(pokemon.hp).toBeLessThan(pokemon.getMaxHp() - Math.floor(pokemon.getMaxHp() / 16)); + }); + }); + + it("does not inflict damage to a Pokemon that is underwater (Dive) or underground (Dig)", async () => { + game.override.moveset([Moves.DIG]); + await game.classicMode.startBattle([Species.MAGIKARP]); + + game.move.select(Moves.DIG); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + + await game.phaseInterceptor.to("TurnEndPhase"); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp() - Math.floor(enemyPokemon.getMaxHp() / 16)); + }); +}); diff --git a/src/test/arena/weather_sandstorm.test.ts b/src/test/arena/weather_sandstorm.test.ts new file mode 100644 index 00000000000..978774ba4c1 --- /dev/null +++ b/src/test/arena/weather_sandstorm.test.ts @@ -0,0 +1,59 @@ +import { WeatherType } from "#app/data/weather"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { SPLASH_ONLY } from "../utils/testUtils"; + +describe("Weather - Sandstorm", () => { + 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.override + .weather(WeatherType.SANDSTORM) + .battleType("single") + .moveset(SPLASH_ONLY) + .enemyMoveset(SPLASH_ONLY) + .enemySpecies(Species.MAGIKARP); + }); + + it("inflicts damage equal to 1/16 of Pokemon's max HP at turn end", async () => { + await game.classicMode.startBattle([Species.MAGIKARP]); + + game.move.select(Moves.SPLASH); + + await game.phaseInterceptor.to("TurnEndPhase"); + + game.scene.getField(true).forEach(pokemon => { + expect(pokemon.hp).toBeLessThan(pokemon.getMaxHp() - Math.floor(pokemon.getMaxHp() / 16)); + }); + }); + + it("does not inflict damage to a Pokemon that is underwater (Dive) or underground (Dig)", async () => { + game.override.moveset([Moves.DIVE]); + await game.classicMode.startBattle([Species.MAGIKARP]); + + game.move.select(Moves.DIVE); + + await game.phaseInterceptor.to("TurnEndPhase"); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp() - Math.floor(enemyPokemon.getMaxHp() / 16)); + }); +}); From 33cb99977493c6b7bd03a07ae20ddc574b7800bf Mon Sep 17 00:00:00 2001 From: Chapybara-jp Date: Fri, 6 Sep 2024 20:51:32 +0200 Subject: [PATCH 14/17] [Localization] [JA] Translated bgm-name.json (#4066) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Translated bgm-name.json Song titles from Bulbapedia and https://w.atwiki.jp/gamemusicbest100/ Kept mainline game abbrevs., changed PMD to ポケダン for clarity Added translations for the original songs * Update bgm-name.json * Update bgm-name.json * Update bgm-name.json --- src/locales/ja/bgm-name.json | 292 +++++++++++++++++------------------ 1 file changed, 146 insertions(+), 146 deletions(-) diff --git a/src/locales/ja/bgm-name.json b/src/locales/ja/bgm-name.json index 8838942c8a6..fc3d4c0fdd2 100644 --- a/src/locales/ja/bgm-name.json +++ b/src/locales/ja/bgm-name.json @@ -1,150 +1,150 @@ { - "music": "Music: ", + "music": "BGM: ", "missing_entries": "{{name}}", - "battle_kanto_champion": "B2W2 Kanto Champion Battle", - "battle_johto_champion": "B2W2 Johto Champion Battle", - "battle_hoenn_champion_g5": "B2W2 Hoenn Champion Battle", - "battle_hoenn_champion_g6": "ORAS Hoenn Champion Battle", - "battle_sinnoh_champion": "B2W2 Sinnoh Champion Battle", - "battle_champion_alder": "BW Unova Champion Battle", - "battle_champion_iris": "B2W2 Unova Champion Battle", - "battle_kalos_champion": "XY Kalos Champion Battle", - "battle_alola_champion": "USUM Alola Champion Battle", - "battle_galar_champion": "SWSH Galar Champion Battle", - "battle_champion_geeta": "SV Champion Geeta Battle", - "battle_champion_nemona": "SV Champion Nemona Battle", - "battle_champion_kieran": "SV Champion Kieran Battle", - "battle_hoenn_elite": "ORAS Elite Four Battle", - "battle_unova_elite": "BW Elite Four Battle", - "battle_kalos_elite": "XY Elite Four Battle", - "battle_alola_elite": "SM Elite Four Battle", - "battle_galar_elite": "SWSH League Tournament Battle", - "battle_paldea_elite": "SV Elite Four Battle", - "battle_bb_elite": "SV BB League Elite Four Battle", - "battle_final_encounter": "PMD RTDX Rayquaza's Domain", - "battle_final": "BW Ghetsis Battle", - "battle_kanto_gym": "B2W2 Kanto Gym Battle", - "battle_johto_gym": "B2W2 Johto Gym Battle", - "battle_hoenn_gym": "B2W2 Hoenn Gym Battle", - "battle_sinnoh_gym": "B2W2 Sinnoh Gym Battle", - "battle_unova_gym": "BW Unova Gym Battle", - "battle_kalos_gym": "XY Kalos Gym Battle", - "battle_galar_gym": "SWSH Galar Gym Battle", - "battle_paldea_gym": "SV Paldea Gym Battle", - "battle_legendary_kanto": "XY Kanto Legendary Battle", - "battle_legendary_raikou": "HGSS Raikou Battle", - "battle_legendary_entei": "HGSS Entei Battle", - "battle_legendary_suicune": "HGSS Suicune Battle", - "battle_legendary_lugia": "HGSS Lugia Battle", - "battle_legendary_ho_oh": "HGSS Ho-oh Battle", - "battle_legendary_regis_g5": "B2W2 Legendary Titan Battle", - "battle_legendary_regis_g6": "ORAS Legendary Titan Battle", - "battle_legendary_gro_kyo": "ORAS Groudon & Kyogre Battle", - "battle_legendary_rayquaza": "ORAS Rayquaza Battle", - "battle_legendary_deoxys": "ORAS Deoxys Battle", - "battle_legendary_lake_trio": "ORAS Lake Guardians Battle", - "battle_legendary_sinnoh": "ORAS Sinnoh Legendary Battle", - "battle_legendary_dia_pal": "ORAS Dialga & Palkia Battle", - "battle_legendary_origin_forme": "LA Origin Dialga & Palkia Battle", - "battle_legendary_giratina": "ORAS Giratina Battle", - "battle_legendary_arceus": "HGSS Arceus Battle", - "battle_legendary_unova": "BW Unova Legendary Battle", - "battle_legendary_kyurem": "BW Kyurem Battle", - "battle_legendary_res_zek": "BW Reshiram & Zekrom Battle", - "battle_legendary_xern_yvel": "XY Xerneas & Yveltal Battle", - "battle_legendary_tapu": "SM Tapu Battle", - "battle_legendary_sol_lun": "SM Solgaleo & Lunala Battle", - "battle_legendary_ub": "SM Ultra Beast Battle", - "battle_legendary_dusk_dawn": "USUM Dusk Mane & Dawn Wings Necrozma Battle", - "battle_legendary_ultra_nec": "USUM Ultra Necrozma Battle", - "battle_legendary_zac_zam": "SWSH Zacian & Zamazenta Battle", - "battle_legendary_glas_spec": "SWSH Glastrier & Spectrier Battle", - "battle_legendary_calyrex": "SWSH Calyrex Battle", - "battle_legendary_riders": "SWSH Ice & Shadow Rider Calyrex Battle", - "battle_legendary_birds_galar": "SWSH Galarian Legendary Birds Battle", - "battle_legendary_ruinous": "SV Treasures of Ruin Battle", - "battle_legendary_kor_mir": "SV Depths of Area Zero Battle", - "battle_legendary_loyal_three": "SV Loyal Three Battle", - "battle_legendary_ogerpon": "SV Ogerpon Battle", - "battle_legendary_terapagos": "SV Terapagos Battle", - "battle_legendary_pecharunt": "SV Pecharunt Battle", - "battle_rival": "BW Rival Battle", - "battle_rival_2": "BW N Battle", - "battle_rival_3": "BW Final N Battle", - "battle_trainer": "BW Trainer Battle", - "battle_wild": "BW Wild Battle", - "battle_wild_strong": "BW Strong Wild Battle", - "end_summit": "PMD RTDX Sky Tower Summit", - "battle_rocket_grunt": "HGSS Team Rocket Battle", - "battle_aqua_magma_grunt": "ORAS Team Aqua & Magma Battle", - "battle_galactic_grunt": "BDSP Team Galactic Battle", - "battle_plasma_grunt": "BW Team Plasma Battle", - "battle_flare_grunt": "XY Team Flare Battle", - "battle_aether_grunt": "SM Aether Foundation Battle", - "battle_skull_grunt": "SM Team Skull Battle", - "battle_macro_grunt": "SWSH Trainer Battle", - "battle_galactic_admin": "BDSP Team Galactic Admin Battle", - "battle_skull_admin": "SM Team Skull Admin Battle", - "battle_oleana": "SWSH Oleana Battle", - "battle_rocket_boss": "USUM Giovanni Battle", - "battle_aqua_magma_boss": "ORAS Archie & Maxie Battle", - "battle_galactic_boss": "BDSP Cyrus Battle", - "battle_plasma_boss": "B2W2 Ghetsis Battle", - "battle_flare_boss": "XY Lysandre Battle", - "battle_aether_boss": "SM Lusamine Battle", - "battle_skull_boss": "SM Guzma Battle", - "battle_macro_boss": "SWSH Rose Battle", + "battle_kanto_champion": "B2W2 戦闘!チャンピオン(カントー)", + "battle_johto_champion": "B2W2 戦闘!チャンピオン(ジョウト)", + "battle_hoenn_champion_g5": "B2W2 戦闘!チャンピオン(ホウエン)", + "battle_hoenn_champion_g6": "ORAS 決戦!ダイゴ", + "battle_sinnoh_champion": "B2W2 戦闘!チャンピオン(シンオウ)", + "battle_champion_alder": "BW チャンピオン アデク", + "battle_champion_iris": "B2W2 戦闘!チャンピオンアイリス", + "battle_kalos_champion": "XY 戦闘!チャンピオン", + "battle_alola_champion": "USUM 頂上決戦!ハウ", + "battle_galar_champion": "SWSH 決戦!チャンピオンダンデ", + "battle_champion_geeta": "SV 戦闘!トップチャンピオン", + "battle_champion_nemona": "SV 戦闘!チャンピオンネモ", + "battle_champion_kieran": "SV 戦闘!チャンピオンスグリ", + "battle_hoenn_elite": "ORAS 戦闘!四天王", + "battle_unova_elite": "BW 戦闘!四天王", + "battle_kalos_elite": "XY 戦闘!四天王", + "battle_alola_elite": "SM 戦闘!四天王", + "battle_galar_elite": "SWSH 戦闘!ファイナルトーナメント!", + "battle_paldea_elite": "SV 戦闘!四天王", + "battle_bb_elite": "SV 戦闘!ブルベリーグ四天王", + "battle_final_encounter": "ポケダンDX レックウザ登場", + "battle_final": "BW 戦闘!ゲーチス", + "battle_kanto_gym": "B2W2 戦闘!ジムリーダー(カントー)", + "battle_johto_gym": "B2W2 戦闘!ジムリーダー(ジョウト)", + "battle_hoenn_gym": "B2W2 戦闘!ジムリーダー(ホウエン)", + "battle_sinnoh_gym": "B2W2 戦闘!ジムリーダー(シンオウ)", + "battle_unova_gym": "BW 戦闘!ジムリーダー", + "battle_kalos_gym": "XY 戦闘!ジムリーダー", + "battle_galar_gym": "SWSH 戦闘!ジムリーダー", + "battle_paldea_gym": "SV 戦闘!ジムリーダー", + "battle_legendary_kanto": "XY 戦闘!ミュウツー", + "battle_legendary_raikou": "HGSS 戦闘!ライコウ", + "battle_legendary_entei": "HGSS 戦闘!エンテイ", + "battle_legendary_suicune": "HGSS 戦闘!スイクン", + "battle_legendary_lugia": "HGSS 戦闘!ルギア", + "battle_legendary_ho_oh": "HGSS 戦闘!ホウオウ", + "battle_legendary_regis_g5": "B2W2 戦闘!レジロック・レジアイス・レジスチル", + "battle_legendary_regis_g6": "ORAS 戦闘!レジロック・レジアイス・レジスチル", + "battle_legendary_gro_kyo": "ORAS 戦闘!ゲンシカイキ", + "battle_legendary_rayquaza": "ORAS 戦闘!超古代ポケモン", + "battle_legendary_deoxys": "ORAS 戦闘!デオキシス", + "battle_legendary_lake_trio": "ORAS 戦闘!ユクシー・エムリット・アグノム", + "battle_legendary_sinnoh": "ORAS 戦闘!伝説のポケモン(シンオウ)", + "battle_legendary_dia_pal": "ORAS 戦闘!ディアルガ・パルキア", + "battle_legendary_origin_forme": "LA 戦い:ディアルガ・パルキア(オリジンフォルム)", + "battle_legendary_giratina": "ORAS 戦闘!ギラティナ", + "battle_legendary_arceus": "HGSS アルセウス", + "battle_legendary_unova": "BW 戦闘!伝説のポケモン", + "battle_legendary_kyurem": "BW 戦闘!キュレム", + "battle_legendary_res_zek": "BW 戦闘!ゼクロム・レシラム", + "battle_legendary_xern_yvel": "XY 戦闘!ゼルネアス・イベルタル・ジガルデ", + "battle_legendary_tapu": "SM 戦闘!カプ", + "battle_legendary_sol_lun": "SM 戦闘!ソルガレオ・ルナアーラ", + "battle_legendary_ub": "SM 戦闘!ウルトラビースト", + "battle_legendary_dusk_dawn": "USUM 戦闘!日食・月食ネクロズマ", + "battle_legendary_ultra_nec": "USUM 戦闘!ウルトラネクロズマ", + "battle_legendary_zac_zam": "SWSH 戦闘!ザシアン・ザマゼンタ", + "battle_legendary_glas_spec": "SWSH 戦闘!ブリザポス・レイスポス", + "battle_legendary_calyrex": "SWSH 戦闘!バドレックス", + "battle_legendary_riders": "SWSH 戦闘!豊穣の王", + "battle_legendary_birds_galar": "SWSH 戦闘!伝説のとりポケモン", + "battle_legendary_ruinous": "SV 戦闘!災厄ポケモン", + "battle_legendary_kor_mir": "SV 戦闘!エリアゼロのポケモン", + "battle_legendary_loyal_three": "SV 戦闘!ともっこ", + "battle_legendary_ogerpon": "SV 戦闘!オーガポン", + "battle_legendary_terapagos": "SV 戦闘!テラパゴス", + "battle_legendary_pecharunt": "SV 戦闘!モモワロウ", + "battle_rival": "BW 戦闘!チェレン・ベル", + "battle_rival_2": "BW 戦闘!N", + "battle_rival_3": "BW 決戦!N", + "battle_trainer": "BW 戦闘!トレーナー", + "battle_wild": "BW 戦闘!野生ポケモン", + "battle_wild_strong": "BW 戦闘!強い野生ポケモン", + "end_summit": "ポケダンDX 天空の塔 最上階", + "battle_rocket_grunt": "HGSS 戦闘!ロケット団", + "battle_aqua_magma_grunt": "ORAS 戦闘!アクア団・マグマ団", + "battle_galactic_grunt": "BDSP 戦闘!ギンガ団", + "battle_plasma_grunt": "BW 戦闘!プラズマ団", + "battle_flare_grunt": "XY 戦闘!フレア団", + "battle_aether_grunt": "SM 戦闘!エーテル財団トレーナー", + "battle_skull_grunt": "SM 戦闘!スカル団", + "battle_macro_grunt": "SWSH 戦闘!トレーナー", + "battle_galactic_admin": "BDSP 戦闘!ギンガ団幹部", + "battle_skull_admin": "SM 戦闘!スカル団幹部", + "battle_oleana": "SWSH 戦闘!オリーヴ", + "battle_rocket_boss": "USUM 戦闘!レインボーロケット団ボス", + "battle_aqua_magma_boss": "ORAS 戦闘!アクア団・マグマ団のリーダー", + "battle_galactic_boss": "BDSP 戦闘!ギンガ団ボス", + "battle_plasma_boss": "B2W2 戦闘!ゲーチス", + "battle_flare_boss": "XY 戦闘!フラダリ", + "battle_aether_boss": "SM 戦闘!ルザミーネ", + "battle_skull_boss": "SM 戦闘!スカル団ボス", + "battle_macro_boss": "SWSH 戦闘!ローズ", - "abyss": "PMD EoS Dark Crater", - "badlands": "PMD EoS Barren Valley", - "beach": "PMD EoS Drenched Bluff", - "cave": "PMD EoS Sky Peak Cave", - "construction_site": "PMD EoS Boulder Quarry", - "desert": "PMD EoS Northern Desert", - "dojo": "PMD EoS Marowak Dojo", - "end": "PMD RTDX Sky Tower", - "factory": "PMD EoS Concealed Ruins", - "fairy_cave": "PMD EoS Star Cave", - "forest": "PMD EoS Dusk Forest", - "grass": "PMD EoS Apple Woods", - "graveyard": "PMD EoS Mystifying Forest", - "ice_cave": "PMD EoS Vast Ice Mountain", - "island": "PMD EoS Craggy Coast", - "jungle": "Lmz - Jungle", - "laboratory": "Firel - Laboratory", - "lake": "PMD EoS Crystal Cave", - "meadow": "PMD EoS Sky Peak Forest", - "metropolis": "Firel - Metropolis", - "mountain": "PMD EoS Mt. Horn", - "plains": "PMD EoS Sky Peak Prairie", - "power_plant": "PMD EoS Far Amp Plains", - "ruins": "PMD EoS Deep Sealed Ruin", - "sea": "Andr06 - Marine Mystique", - "seabed": "Firel - Seabed", - "slum": "Andr06 - Sneaky Snom", - "snowy_forest": "PMD EoS Sky Peak Snowfield", - "space": "Firel - Aether", - "swamp": "PMD EoS Surrounded Sea", - "tall_grass": "PMD EoS Foggy Forest", - "temple": "PMD EoS Aegis Cave", - "town": "PMD EoS Random Dungeon Theme 3", - "volcano": "PMD EoS Steam Cave", - "wasteland": "PMD EoS Hidden Highland", - "encounter_ace_trainer": "BW Trainers' Eyes Meet (Ace Trainer)", - "encounter_backpacker": "BW Trainers' Eyes Meet (Backpacker)", - "encounter_clerk": "BW Trainers' Eyes Meet (Clerk)", - "encounter_cyclist": "BW Trainers' Eyes Meet (Cyclist)", - "encounter_lass": "BW Trainers' Eyes Meet (Lass)", - "encounter_parasol_lady": "BW Trainers' Eyes Meet (Parasol Lady)", - "encounter_pokefan": "BW Trainers' Eyes Meet (Poke Fan)", - "encounter_psychic": "BW Trainers' Eyes Meet (Psychic)", - "encounter_rich": "BW Trainers' Eyes Meet (Gentleman)", - "encounter_rival": "BW Cheren", - "encounter_roughneck": "BW Trainers' Eyes Meet (Roughneck)", - "encounter_scientist": "BW Trainers' Eyes Meet (Scientist)", - "encounter_twins": "BW Trainers' Eyes Meet (Twins)", - "encounter_youngster": "BW Trainers' Eyes Meet (Youngster)", - "heal": "BW Pokémon Heal", - "menu": "PMD EoS Welcome to the World of Pokémon!", - "title": "PMD EoS Top Menu Theme" + "abyss": "ポケダン空 やみのかこう", + "badlands": "ポケダン空 こかつのたに", + "beach": "ポケダン空 しめったいわば", + "cave": "ポケダン空 そらのいただき(どうくつ)", + "construction_site": "ポケダン空 きょだいがんせきぐん", + "desert": "ポケダン空 きたのさばく", + "dojo": "ポケダン空 ガラガラどうじょう", + "end": "ポケダンDX 天空の塔", + "factory": "ポケダン空 かくされたいせき", + "fairy_cave": "ポケダン空 ほしのどうくつ", + "forest": "ポケダン空 くろのもり", + "grass": "ポケダン空 リンゴのもり", + "graveyard": "ポケダン空 しんぴのもり", + "ice_cave": "ポケダン空 だいひょうざん", + "island": "ポケダン空 えんがんのいわば", + "jungle": "Lmz - Jungle(ジャングル)", + "laboratory": "Firel - Laboratory(ラボラトリー)", + "lake": "ポケダン空 すいしょうのどうくつ", + "meadow": "ポケダン空 そらのいただき(もり)", + "metropolis": "Firel - Metropolis(大都市)", + "mountain": "ポケダン空 ツノやま", + "plains": "ポケダン空 そらのいただき(そうげん)", + "power_plant": "ポケダン空 エレキへいげん", + "ruins": "ポケダン空 ふういんのいわば", + "sea": "Andr06 - Marine Mystique(海の神秘性)", + "seabed": "Firel - Seabed(海底)", + "slum": "Andr06 - Sneaky Snom(ずるいユキハミ)", + "snowy_forest": "ポケダン空 そらのいただき(ゆきやま)", + "space": "Firel - Aether(エーテル)", + "swamp": "ポケダン空 とざされたうみ", + "tall_grass": "ポケダン空 のうむのもり", + "temple": "ポケダン空 ばんにんのどうくつ", + "town": "ポケダン空 ランダムダンジョン3", + "volcano": "ポケダン空 ねっすいのどうくつ", + "wasteland": "ポケダン空 まぼろしのだいち", + "encounter_ace_trainer": "BW 視線!エリートトレーナー", + "encounter_backpacker": "BW 視線!バックパッカー", + "encounter_clerk": "BW 視線!ビジネスマン", + "encounter_cyclist": "BW 視線!サイクリング", + "encounter_lass": "BW 視線!ミニスカート", + "encounter_parasol_lady": "BW 視線!パラソルおねえさん", + "encounter_pokefan": "BW 視線!だいすきクラブ", + "encounter_psychic": "BW 視線!サイキッカー", + "encounter_rich": "BW 視線!ジェントルマン", + "encounter_rival": "BW チェレンのテーマ", + "encounter_roughneck": "BW 視線!スキンヘッズ", + "encounter_scientist": "BW 視線!けんきゅういん", + "encounter_twins": "BW 視線!ふたごちゃん", + "encounter_youngster": "BW 視線!たんぱんこぞう", + "heal": "BW 回復", + "menu": "ポケダン空 ようこそ! ポケモンたちのせかいへ!", + "title": "ポケダン空 トップメニュー" } From e6a574c48f3627b7ec6283cbd1772213c372851d Mon Sep 17 00:00:00 2001 From: "Adrian T." <68144167+torranx@users.noreply.github.com> Date: Sat, 7 Sep 2024 03:17:08 +0800 Subject: [PATCH 15/17] =?UTF-8?q?[P2=20Bug]=20Revert=20to=20normal=20form?= =?UTF-8?q?=20when=20Pok=C3=A9mon=20is=20fainted=20(#4049)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * revert to normal forms when fainted * Remove `.js` from import Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> --- src/phases/faint-phase.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index d5dd9f61340..48366afaad4 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -17,6 +17,7 @@ import { ToggleDoublePositionPhase } from "./toggle-double-position-phase"; import { GameOverPhase } from "./game-over-phase"; import { SwitchPhase } from "./switch-phase"; import { VictoryPhase } from "./victory-phase"; +import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; export class FaintPhase extends PokemonPhase { private preventEndure: boolean; @@ -59,6 +60,7 @@ export class FaintPhase extends PokemonPhase { } this.scene.queueMessage(i18next.t("battle:fainted", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, true); + this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); if (pokemon.turnData?.attacksReceived?.length) { const lastAttack = pokemon.turnData.attacksReceived[0]; From ae50db7710ce371eb806f93c7dde386bee45e948 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Fri, 6 Sep 2024 16:24:38 -0700 Subject: [PATCH 16/17] [Optimization] parallel testing (#4075) * add: vitest projects (multiple) preparations for parallel testing * update: tests workflow better parallel testing --- .github/workflows/tests.yml | 78 +++++++++++++++++++++++++++++++++++-- vitest.config.ts | 59 +++++++++++++++------------- vitest.workspace.ts | 54 +++++++++++++++++++++++++ 3 files changed, 160 insertions(+), 31 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index adac45519ab..2a78ec252b8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -15,8 +15,8 @@ on: types: [checks_requested] jobs: - run-tests: # Define a job named "run-tests" - name: Run tests # Human-readable name for the job + run-misc-tests: # Define a job named "run-tests" + name: Run misc tests # Human-readable name for the job runs-on: ubuntu-latest # Specify the latest Ubuntu runner for the job steps: @@ -31,5 +31,75 @@ jobs: - name: Install Node.js dependencies # Step to install Node.js dependencies run: npm ci # Use 'npm ci' to install dependencies - - name: tests # Step to run tests - run: npm run test:silent \ No newline at end of file + - name: pre-test # pre-test to check overrides + run: npx vitest run --project pre + - name: test misc + run: npx vitest --project misc + + run-abilities-tests: + name: Run abilities tests + runs-on: ubuntu-latest + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install Node.js dependencies + run: npm ci + - name: pre-test + run: npx vitest run --project pre + - name: test abilities + run: npx vitest --project abilities + + run-items-tests: + name: Run items tests + runs-on: ubuntu-latest + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install Node.js dependencies + run: npm ci + - name: pre-test + run: npx vitest run --project pre + - name: test items + run: npx vitest --project items + + run-moves-tests: + name: Run moves tests + runs-on: ubuntu-latest + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install Node.js dependencies + run: npm ci + - name: pre-test + run: npx vitest run --project pre + - name: test moves + run: npx vitest --project moves + + run-battle-tests: + name: Run battle tests + runs-on: ubuntu-latest + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install Node.js dependencies + run: npm ci + - name: pre-test + run: npx vitest run --project pre + - name: test battle + run: npx vitest --project battle \ No newline at end of file diff --git a/vitest.config.ts b/vitest.config.ts index d1827103807..9a765a89ae7 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,38 +1,43 @@ -import { defineProject } from 'vitest/config'; +import { defineProject, UserWorkspaceConfig } from 'vitest/config'; import { defaultConfig } from './vite.config'; +export const defaultProjectTestConfig: UserWorkspaceConfig["test"] = { + setupFiles: ['./src/test/vitest.setup.ts'], + server: { + deps: { + inline: ['vitest-canvas-mock'], + //@ts-ignore + optimizer: { + web: { + include: ['vitest-canvas-mock'], + } + } + } + }, + environment: 'jsdom' as const, + environmentOptions: { + jsdom: { + resources: 'usable', + }, + }, + threads: false, + trace: true, + restoreMocks: true, + watch: false, + coverage: { + provider: 'istanbul' as const, + reportsDirectory: 'coverage' as const, + reporters: ['text-summary', 'html'], + }, +} + export default defineProject(({ mode }) => ({ ...defaultConfig, test: { + ...defaultProjectTestConfig, name: "main", include: ["./src/test/**/*.{test,spec}.ts"], exclude: ["./src/test/pre.test.ts"], - setupFiles: ['./src/test/vitest.setup.ts'], - server: { - deps: { - inline: ['vitest-canvas-mock'], - optimizer: { - web: { - include: ['vitest-canvas-mock'], - } - } - } - }, - environment: 'jsdom' as const, - environmentOptions: { - jsdom: { - resources: 'usable', - }, - }, - threads: false, - trace: true, - restoreMocks: true, - watch: false, - coverage: { - provider: 'istanbul' as const, - reportsDirectory: 'coverage' as const, - reporters: ['text-summary', 'html'], - }, }, esbuild: { pure: mode === 'production' ? [ 'console.log' ] : [], diff --git a/vitest.workspace.ts b/vitest.workspace.ts index 38121942004..a885b77dc9d 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -1,5 +1,6 @@ import { defineWorkspace } from "vitest/config"; import { defaultConfig } from "./vite.config"; +import { defaultProjectTestConfig } from "./vitest.config"; export default defineWorkspace([ { @@ -10,5 +11,58 @@ export default defineWorkspace([ environment: "jsdom", }, }, + { + ...defaultConfig, + test: { + ...defaultProjectTestConfig, + name: "misc", + include: [ + "src/test/achievements/**/*.{test,spec}.ts", + "src/test/arena/**/*.{test,spec}.ts", + "src/test/battlerTags/**/*.{test,spec}.ts", + "src/test/eggs/**/*.{test,spec}.ts", + "src/test/field/**/*.{test,spec}.ts", + "src/test/inputs/**/*.{test,spec}.ts", + "src/test/localization/**/*.{test,spec}.ts", + "src/test/phases/**/*.{test,spec}.ts", + "src/test/settingMenu/**/*.{test,spec}.ts", + "src/test/sprites/**/*.{test,spec}.ts", + "src/test/ui/**/*.{test,spec}.ts", + "src/test/*.{test,spec}.ts", + ], + }, + }, + { + ...defaultConfig, + test: { + ...defaultProjectTestConfig, + name: "abilities", + include: ["src/test/abilities/**/*.{test,spec}.ts"], + }, + }, + { + ...defaultConfig, + test: { + ...defaultProjectTestConfig, + name: "battle", + include: ["src/test/battle/**/*.{test,spec}.ts"], + }, + }, + { + ...defaultConfig, + test: { + ...defaultProjectTestConfig, + name: "items", + include: ["src/test/items/**/*.{test,spec}.ts"], + }, + }, + { + ...defaultConfig, + test: { + ...defaultProjectTestConfig, + name: "moves", + include: ["src/test/moves/**/*.{test,spec}.ts"], + }, + }, "./vitest.config.ts", ]); From ba212945deb7c48ad843ac939d4e43531c100c2f Mon Sep 17 00:00:00 2001 From: James Diefenbach <105332964+j-diefenbach@users.noreply.github.com> Date: Sat, 7 Sep 2024 10:34:13 +1000 Subject: [PATCH 17/17] [Enhancement] Darker egg summary background image (#4076) * darker egg-summary background * reset old background for beta * darker egg summary bg --------- Co-authored-by: James Diefenbach --- public/images/ui/egg_summary_bg.png | Bin 1064 -> 2209 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/ui/egg_summary_bg.png b/public/images/ui/egg_summary_bg.png index 658f5df0e96bd901d105690d73500b965788df5c..b4ee3d86a507bfb99b4f9af2d71b5065e4ac943b 100644 GIT binary patch literal 2209 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