From 854de76467e71f890e9497c909560bcf8cf19f13 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sat, 27 Apr 2024 18:06:41 -0400 Subject: [PATCH 001/110] Improve handling of variant data overrides for mixed animated mode --- src/battle-scene.ts | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 512a196b175..3954e48782e 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -531,10 +531,23 @@ export default class BattleScene extends SceneBase { .then(v => { Object.keys(v).forEach(k => variantData[k] = v[k]); if (this.experimentalSprites) { - const expTree = variantData['exp']; - Object.keys(expTree).forEach(ek => { - variantData[ek] = expTree[ek]; - }); + const expVariantData = variantData['exp']; + const traverseVariantData = (keys: string[]) => { + let variantTree = variantData; + let expTree = expVariantData; + keys.map((k: string, i: integer) => { + if (i < keys.length - 1) { + variantTree = variantTree[k]; + expTree = expTree[k]; + } else if (variantTree.hasOwnProperty(k) && expTree.hasOwnProperty(k)) { + if ([ 'back', 'female' ].includes(k)) + traverseVariantData(keys.concat(k)); + else + variantTree[k] = expTree[k]; + } + }); + }; + Object.keys(expVariantData).forEach(ek => traverseVariantData([ ek ])); } Promise.resolve(); }); From 5fd7b368e295333503d8e702c798cfb51c334283 Mon Sep 17 00:00:00 2001 From: Thomas David <66013753+Kiriox94@users.noreply.github.com> Date: Sun, 28 Apr 2024 11:54:59 +0200 Subject: [PATCH 002/110] Auto select language implementation --- src/plugins/i18n.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index adc1f3d5295..d1a0f490275 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -75,7 +75,7 @@ export interface Localizable { const DEFAULT_LANGUAGE_OVERRIDE = ''; export function initI18n(): void { - let lang = 'en'; + let lang = navigator.language; if (localStorage.getItem('prLang')) lang = localStorage.getItem('prLang'); From a9a9e512a079438f3c8ee7783d4593bc7a09f243 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sun, 28 Apr 2024 10:01:29 -0400 Subject: [PATCH 003/110] Revert "Auto select language implementation" This reverts commit 5fd7b368e295333503d8e702c798cfb51c334283. --- src/plugins/i18n.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index d1a0f490275..adc1f3d5295 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -75,7 +75,7 @@ export interface Localizable { const DEFAULT_LANGUAGE_OVERRIDE = ''; export function initI18n(): void { - let lang = navigator.language; + let lang = 'en'; if (localStorage.getItem('prLang')) lang = localStorage.getItem('prLang'); From c09a0254efd08a5ebd20b64adb64518e4ef57bc4 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sun, 28 Apr 2024 16:12:29 +0200 Subject: [PATCH 004/110] French moves typos --- src/locales/fr/move.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/locales/fr/move.ts b/src/locales/fr/move.ts index ba3d1e2badc..b6d17252b59 100644 --- a/src/locales/fr/move.ts +++ b/src/locales/fr/move.ts @@ -390,7 +390,7 @@ export const move: MoveTranslationEntries = { effect: "Le lanceur se relaxe et allège son corps pour beaucoup augmenter sa Vitesse." }, "quickAttack": { - name: "Vive-attaque", + name: "Vive-Attaque", effect: "Le lanceur fonce sur la cible si rapidement qu’on parvient à peine à le discerner. Frappe en priorité." }, "rage": { @@ -1090,7 +1090,7 @@ export const move: MoveTranslationEntries = { effect: "Imite la cible et copie son talent." }, "wish": { - name: "Voeu", + name: "Vœu", effect: "Un vœu qui permet au lanceur ou au Pokémon entrant sur le terrain au tour suivant de récupérer la moitié des PV max du lanceur." }, "assist": { @@ -1410,7 +1410,7 @@ export const move: MoveTranslationEntries = { effect: "Le lanceur projette une aura aquatique sur la cible, et peut la rendre confuse." }, "doomDesire": { - name: "Voeu Destructeur", + name: "Vœu Destructeur", effect: "Le lanceur génère une sphère lumineuse qu’il projette sur l’ennemi deux tours plus tard." }, "psychoBoost": { @@ -1442,7 +1442,7 @@ export const move: MoveTranslationEntries = { effect: "Le lanceur effectue une rotation rapide et frappe la cible. Plus la Vitesse du lanceur est basse par rapport à celle de la cible, plus il inflige de dégâts." }, "healingWish": { - name: "Voeu Soin", + name: "Vœu Soin", effect: "Le lanceur tombe K.O. pour soigner les altérations de statut et les PV du Pokémon qui viendra le remplacer sur le terrain." }, "brine": { @@ -1786,7 +1786,7 @@ export const move: MoveTranslationEntries = { effect: "Le lanceur fait flotter des pierres autour de la cible qui blessent tout adversaire entrant au combat." }, "grassKnot": { - name: "Noeud Herbe", + name: "Nœud Herbe", effect: "Le lanceur fait des nœuds dans l’herbe pour faire trébucher la cible. Plus la cible est lourde, plus la puissance de cette capacité augmente." }, "chatter": { @@ -2030,7 +2030,7 @@ export const move: MoveTranslationEntries = { effect: "Le lanceur emmène l’ennemi dans les airs au premier tour et le lâche dans le vide au second. L’ennemi saisi ne peut pas attaquer." }, "shiftGear": { - name: "Chgt Vitesse", + name: "Change-Vitesse", effect: "Le lanceur fait tourner ses engrenages. Cela augmente son Attaque et augmente beaucoup sa Vitesse." }, "circleThrow": { @@ -2858,7 +2858,7 @@ export const move: MoveTranslationEntries = { effect: "Le lanceur attaque avec un rayon de lumière mystérieux. Ignore le talent de la cible." }, "tearfulLook": { - name: "Larme à l’Oeil", + name: "Larme à l’Œil", effect: "Le lanceur regarde la cible avec des yeux remplis de larmes. Celle-ci perd toute combativité et voit son Attaque et son Attaque Spéciale baisser." }, "zingZap": { @@ -3362,7 +3362,7 @@ export const move: MoveTranslationEntries = { effect: "Le lanceur entaille la cible avec ses ailes renforcées par une émanation psychique. Taux de critiques élevé. Cela augmente la Vitesse du lanceur." }, "bitterMalice": { - name: "Coeur de Rancoeur", + name: "Cœur de Rancœur", effect: "Une rancœur glaciale frappe la cible et baisse son Attaque." }, "shelter": { From b43a6ec764db9c5cba39385d5e6e53875e2d4e46 Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Mon, 29 Apr 2024 00:52:43 +1000 Subject: [PATCH 005/110] Fix end catching (#332) * Fix end catching * Remove fusion code --- src/phases.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/phases.ts b/src/phases.ts index 640f475927e..fdca671dbff 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -1697,7 +1697,7 @@ export class CommandPhase extends FieldPhase { } break; case Command.BALL: - if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarters).length - 1)) { + if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarters).length - 1))) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); this.scene.ui.showText(i18next.t('menu:noPokeballForce'), null, () => { From 21482a641b594ec7b9bcecf94c8e181d99907d18 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sun, 28 Apr 2024 20:30:03 -0400 Subject: [PATCH 006/110] Add shiny and variant debug override --- src/battle-scene.ts | 2 ++ src/field/pokemon.ts | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 3954e48782e..ecb309382a3 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -76,6 +76,8 @@ export const MOVE_OVERRIDE = Moves.NONE; export const OPP_SPECIES_OVERRIDE = 0; export const OPP_ABILITY_OVERRIDE = Abilities.NONE; export const OPP_MOVE_OVERRIDE = Moves.NONE; +export const OPP_SHINY_OVERRIDE = true; +export const OPP_VARIANT_OVERRIDE = 0; const DEBUG_RNG = false; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index d834ffb35b0..18c517dcbda 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1,5 +1,5 @@ import Phaser from 'phaser'; -import BattleScene, { ABILITY_OVERRIDE, AnySound, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE } from '../battle-scene'; +import BattleScene, { ABILITY_OVERRIDE, AnySound, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../battle-scene'; import { Variant, VariantSet, variantColorCache } from '#app/data/variant'; import { variantData } from '#app/data/variant'; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info'; @@ -2549,9 +2549,15 @@ export class EnemyPokemon extends Pokemon { this.generateAndPopulateMoveset(); this.trySetShiny(); - - if (this.shiny) + if (OPP_SHINY_OVERRIDE) { + this.shiny = true; + this.initShinySparkle(); + } + if (this.shiny) { this.variant = this.generateVariant(); + if (OPP_VARIANT_OVERRIDE) + this.variant = OPP_VARIANT_OVERRIDE; + } this.luck = (this.shiny ? this.variant + 1 : 0) + (this.fusionShiny ? this.fusionVariant + 1 : 0); From 0b438d0ff4acd2bcf0641ec1a3daf8a8da2bb844 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sun, 28 Apr 2024 20:30:12 -0400 Subject: [PATCH 007/110] Revert "Add temporary double wild shiny chance" This reverts commit 4607782578eec09ad143e5be41993922d4f2daa6. --- src/field/pokemon.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 18c517dcbda..4e20bad407b 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -997,11 +997,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let shinyThreshold = new Utils.IntegerHolder(32); if (thresholdOverride === undefined) { - if (!this.hasTrainer()) { - if (new Date() < new Date('4/29/2024')) - shinyThreshold.value *= 2; + if (!this.hasTrainer()) this.scene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); - } } else shinyThreshold.value = thresholdOverride; From 57ece2c1d78a9509ec812a32d7c25e0d92045a1e Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sun, 28 Apr 2024 20:41:38 -0400 Subject: [PATCH 008/110] Revert "Add shiny and variant debug override" This reverts commit 21482a641b594ec7b9bcecf94c8e181d99907d18. --- src/battle-scene.ts | 2 -- src/field/pokemon.ts | 12 +++--------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index ecb309382a3..3954e48782e 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -76,8 +76,6 @@ export const MOVE_OVERRIDE = Moves.NONE; export const OPP_SPECIES_OVERRIDE = 0; export const OPP_ABILITY_OVERRIDE = Abilities.NONE; export const OPP_MOVE_OVERRIDE = Moves.NONE; -export const OPP_SHINY_OVERRIDE = true; -export const OPP_VARIANT_OVERRIDE = 0; const DEBUG_RNG = false; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 4e20bad407b..d2a8e4226df 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1,5 +1,5 @@ import Phaser from 'phaser'; -import BattleScene, { ABILITY_OVERRIDE, AnySound, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../battle-scene'; +import BattleScene, { ABILITY_OVERRIDE, AnySound, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE } from '../battle-scene'; import { Variant, VariantSet, variantColorCache } from '#app/data/variant'; import { variantData } from '#app/data/variant'; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info'; @@ -2546,15 +2546,9 @@ export class EnemyPokemon extends Pokemon { this.generateAndPopulateMoveset(); this.trySetShiny(); - if (OPP_SHINY_OVERRIDE) { - this.shiny = true; - this.initShinySparkle(); - } - if (this.shiny) { + + if (this.shiny) this.variant = this.generateVariant(); - if (OPP_VARIANT_OVERRIDE) - this.variant = OPP_VARIANT_OVERRIDE; - } this.luck = (this.shiny ? this.variant + 1 : 0) + (this.fusionShiny ? this.fusionVariant + 1 : 0); From 711568327495675be76a2b7f69ef93a65031a14b Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sun, 28 Apr 2024 20:45:04 -0400 Subject: [PATCH 009/110] Increment game version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 47408b13730..a8c20cc49ed 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.0.3", + "version": "1.0.4", "type": "module", "scripts": { "start": "vite", From 6f078f464597c6a8aa58cfe2b279f5ff57ac5f60 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Sun, 28 Apr 2024 20:02:06 -0500 Subject: [PATCH 010/110] Minor fix to Roughneck's possible names --- src/data/trainer-names.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/trainer-names.ts b/src/data/trainer-names.ts index a1c83af0779..4cf025e3650 100644 --- a/src/data/trainer-names.ts +++ b/src/data/trainer-names.ts @@ -106,7 +106,7 @@ export const trainerNamePools = { [TrainerType.RANGER]: [["Carlos","Jackson","Sebastian","Gav","Lorenzo","Logan","Nicolas","Trenton","Deshawn","Dwayne","Jeffery","Kyler","Taylor","Alain","Claude","Crofton","Forrest","Harry","Jaden","Keith","Lewis","Miguel","Pedro","Ralph","Richard","Bret","Daryl","Eddie","Johan","Leaf","Louis","Maxwell","Parker","Rick","Steve","Bjorn","Chaise","Dean","Lee","Maurice","Nash","Ralf","Reed","Shinobu","Silas"],["Catherine","Jenna","Sophia","Merdith","Nora","Beth","Chelsea","Katelyn","Madeline","Allison","Ashlee","Felicia","Krista","Annie","Audra","Brenda","Chloris","Eliza","Heidi","Irene","Mary","Mylene","Shanti","Shelly","Thalia","Anja","Briana","Dianna","Elaine","Elle","Hillary","Katie","Lena","Lois","Malory","Melita","Mikiko","Naoko","Serenity","Ambre","Brooke","Clementine","Melina","Petra","Twiggy"]], [TrainerType.RICH]: [["Alfred","Edward","Gregory","Preston","Thomas","Tucker","Walter","Clifford","Everett","Micah","Nate","Pierre","Terrance","Arthur","Brooks","Emanuel","Lamar","Jeremy","Leonardo","Milton","Frederic","Renaud","Robert","Yan","Daniel","Sheldon","Stonewall","Gerald","Ronald","Smith","Stanley","Reginald","Orson","Wilco","Caden","Glenn"],["Rebecca","Reina","Cassandra","Emilia","Grace","Marian","Elizabeth","Kathleen","Sayuri","Caroline","Judy"]], [TrainerType.RICH_KID]: [["Garret","Winston","Dawson","Enrique","Jason","Roman","Trey","Liam","Anthony","Brad","Cody","Manuel","Martin","Pierce","Rolan","Keenan","Filbert","Antoin","Cyus","Diek","Dugo","Flitz","Jurek","Lond","Perd","Quint","Basto","Benit","Brot","Denc","Guyit","Marcon","Perc","Puros","Roex","Sainz","Symin","Tark","Venak"],["Anette","Brianna","Cindy","Colleen","Daphne","Elizabeth","Naomi","Sarah","Charlotte","Gillian","Jacki","Lady","Melissa","Celeste","Colette","Elizandra","Isabel","Lynette","Magnolia","Sophie","Lina","Dulcie","Auro","Brin","Caril","Eloos","Gwin","Illa","Kowly","Rima","Ristin","Vesey","Brena","Deasy","Denslon","Kylet","Nemi","Rene","Sanol","Stouner","Sturk","Talmen","Zoila"]], - [TrainerType.ROUGHNECK]: ["Camron","Corey","Gabriel","Isaiah","Jamal","Koji","Luke","Paxton","Raul","Zeek","Kirby","Chance","Dave","Fletcher","Johnny","Reese","Joey","Roughneck","Ricky","Silvester","Martin"], + [TrainerType.ROUGHNECK]: ["Camron","Corey","Gabriel","Isaiah","Jamal","Koji","Luke","Paxton","Raul","Zeek","Kirby","Chance","Dave","Fletcher","Johnny","Reese","Joey","Ricky","Silvester","Martin"], [TrainerType.SCIENTIST]: [["Jed","Marc","Mitch","Rich","Ross","Beau","Braydon","Connor","Ed","Ivan","Jerry","Jose","Joshua","Parker","Rodney","Taylor","Ted","Travis","Zackery","Darrius","Emilio","Fredrick","Shaun","Stefano","Travon","Daniel","Garett","Gregg","Linden","Lowell","Trenton","Dudley","Luke","Markus","Nathan","Orville","Randall","Ron","Ronald","Simon","Steve","William","Franklin","Clarke","Jacques","Terrance","Ernst","Justus","Ikaika","Jayson","Kyle","Reid","Tyrone","Adam","Albert","Alphonse","Cory","Donnie","Elton","Francis","Gordon","Herbert","Humphrey","Jordan","Julian","Keaton","Levi","Melvin","Murray","West","Craig","Coren","Dubik","Kotan","Lethco","Mante","Mort","Myron","Odlow","Ribek","Roeck","Vogi","Vonder","Zogo","Doimo","Doton","Durel","Hildon","Kukla","Messa","Nanot","Platen","Raburn","Reman","Acrod","Coffy","Elrok","Foss","Hardig","Hombol","Hospel","Kaller","Klots","Krilok","Limar","Loket","Mesak","Morbit","Newin","Orill","Tabor","Tekot"],["Blythe","Chan","Kathrine","Marie","Maria","Naoko","Samantha","Satomi","Shannon","Athena","Caroline","Lumi","Lumina","Marissa","Sonia"]], [TrainerType.SMASHER]: ["Aspen","Elena","Mari","Amy","Lizzy"], [TrainerType.SNOW_WORKER]: [["Braden","Brendon","Colin","Conrad","Dillan","Gary","Gerardo","Holden","Jackson","Mason","Quentin","Willy","Noel","Arnold","Brady","Brand","Cairn","Cliff","Don","Eddie","Felix","Filipe","Glenn","Gus","Heath","Matthew","Patton","Rich","Rob","Ryan","Scott","Shelby","Sterling","Tyler","Victor","Zack","Friedrich","Herman","Isaac","Leo","Maynard","Mitchell","Morgann","Nathan","Niel","Pasqual","Paul","Tavarius","Tibor","Dimitri","Narek","Yusif","Frank","Jeff","Vaclav","Ovid","Francis","Keith","Russel","Sangon","Toway","Bomber","Chean","Demit","Hubor","Kebile","Laber","Ordo","Retay","Ronix","Wagel","Dobit","Kaster","Lobel","Releo","Saken","Rustix"],["Georgia","Sandra","Yvonne"]], From 9641d77bbab10734c4d478bb23783d6753a75ab5 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sun, 28 Apr 2024 22:03:29 -0400 Subject: [PATCH 011/110] Re-add shiny override EXCEPT FALSE THIS TIME --- src/battle-scene.ts | 2 ++ src/field/pokemon.ts | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 3954e48782e..742053c946c 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -76,6 +76,8 @@ export const MOVE_OVERRIDE = Moves.NONE; export const OPP_SPECIES_OVERRIDE = 0; export const OPP_ABILITY_OVERRIDE = Abilities.NONE; export const OPP_MOVE_OVERRIDE = Moves.NONE; +export const OPP_SHINY_OVERRIDE = false; +export const OPP_VARIANT_OVERRIDE = 0; const DEBUG_RNG = false; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index d2a8e4226df..4e20bad407b 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1,5 +1,5 @@ import Phaser from 'phaser'; -import BattleScene, { ABILITY_OVERRIDE, AnySound, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE } from '../battle-scene'; +import BattleScene, { ABILITY_OVERRIDE, AnySound, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../battle-scene'; import { Variant, VariantSet, variantColorCache } from '#app/data/variant'; import { variantData } from '#app/data/variant'; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info'; @@ -2546,9 +2546,15 @@ export class EnemyPokemon extends Pokemon { this.generateAndPopulateMoveset(); this.trySetShiny(); - - if (this.shiny) + if (OPP_SHINY_OVERRIDE) { + this.shiny = true; + this.initShinySparkle(); + } + if (this.shiny) { this.variant = this.generateVariant(); + if (OPP_VARIANT_OVERRIDE) + this.variant = OPP_VARIANT_OVERRIDE; + } this.luck = (this.shiny ? this.variant + 1 : 0) + (this.fusionShiny ? this.fusionVariant + 1 : 0); From b72b4cffedf179f19db8be7721a31c46c961af08 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Sun, 28 Apr 2024 21:58:55 -0500 Subject: [PATCH 012/110] Implement Furfrou forms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit They can be randomly encountered like many other multiple form Pokémon. Like canon, they do not have any statistical changes, just cosmetic. --- public/images/pokemon/676-dandy.png | Bin 6702 -> 5664 bytes public/images/pokemon/676-debutante.png | Bin 6751 -> 6044 bytes public/images/pokemon/676-diamond.png | Bin 6540 -> 5792 bytes public/images/pokemon/676-heart.png | Bin 6655 -> 5904 bytes public/images/pokemon/676-kabuki.png | Bin 6836 -> 6121 bytes public/images/pokemon/676-la-reine.png | Bin 6080 -> 5323 bytes public/images/pokemon/676-matron.png | Bin 6718 -> 5930 bytes public/images/pokemon/676-pharaoh.png | Bin 6525 -> 5586 bytes public/images/pokemon/676-star.png | Bin 7338 -> 6359 bytes public/images/pokemon/shiny/676-dandy.png | Bin 6702 -> 5664 bytes public/images/pokemon/shiny/676-debutante.png | Bin 6751 -> 6044 bytes public/images/pokemon/shiny/676-diamond.png | Bin 6540 -> 5792 bytes public/images/pokemon/shiny/676-heart.png | Bin 6655 -> 5904 bytes public/images/pokemon/shiny/676-kabuki.png | Bin 6836 -> 6121 bytes public/images/pokemon/shiny/676-la-reine.png | Bin 6080 -> 5323 bytes public/images/pokemon/shiny/676-matron.png | Bin 6718 -> 5930 bytes public/images/pokemon/shiny/676-pharaoh.png | Bin 6525 -> 5586 bytes public/images/pokemon/shiny/676-star.png | Bin 7338 -> 6359 bytes src/battle-scene.ts | 1 + src/data/pokemon-species.ts | 18 +++++++++--------- 20 files changed, 10 insertions(+), 9 deletions(-) diff --git a/public/images/pokemon/676-dandy.png b/public/images/pokemon/676-dandy.png index f7303f7ec0425c3e168a4c63d43628d99f18a2eb..738b9eaec07d824780dee8c4e6c2e22c3f769650 100644 GIT binary patch literal 5664 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

?%gRy%bV9-}?29JkFQ>+lFf#%wM>> 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 B>3RSF diff --git a/public/images/pokemon/676-diamond.png b/public/images/pokemon/676-diamond.png index 1bd0628a5433e68cc8c77436c4e35fb3c456902d..5662825df7d546f27b8294b32376069d099449cc 100644 GIT binary patch literal 5792 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 literal 6836 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 literal 6080 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 M07*qoM6N<$f-j3?wEzGB literal 6718 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 literal 6525 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 diff --git a/public/images/pokemon/676-star.png b/public/images/pokemon/676-star.png index 540ba4a2dba2297af0e537766339c3c9e696d92e..de93346cb74470652d0e4f18ee366cec99ba0f7f 100644 GIT binary patch literal 6359 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 Z{{vShG`s}1D%Su2002ovPDHLkV1nSgEOY<> literal 7338 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 Q+W-In07*qoM6N<$g76CqBme*a diff --git a/public/images/pokemon/shiny/676-dandy.png b/public/images/pokemon/shiny/676-dandy.png index f7303f7ec0425c3e168a4c63d43628d99f18a2eb..738b9eaec07d824780dee8c4e6c2e22c3f769650 100644 GIT binary patch literal 5664 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

?%gRy%bV9-}?29JkFQ>+lFf#%wM>> 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 B>3RSF diff --git a/public/images/pokemon/shiny/676-diamond.png b/public/images/pokemon/shiny/676-diamond.png index 1bd0628a5433e68cc8c77436c4e35fb3c456902d..5662825df7d546f27b8294b32376069d099449cc 100644 GIT binary patch literal 5792 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 literal 6836 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 literal 6080 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 M07*qoM6N<$f-j3?wEzGB literal 6718 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 literal 6525 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 diff --git a/public/images/pokemon/shiny/676-star.png b/public/images/pokemon/shiny/676-star.png index 540ba4a2dba2297af0e537766339c3c9e696d92e..de93346cb74470652d0e4f18ee366cec99ba0f7f 100644 GIT binary patch literal 6359 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 Z{{vShG`s}1D%Su2002ovPDHLkV1nSgEOY<> literal 7338 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 Q+W-In07*qoM6N<$g76CqBme*a diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 742053c946c..0fdfaf09229 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1060,6 +1060,7 @@ export default class BattleScene extends SceneBase { case Species.FLABEBE: case Species.FLOETTE: case Species.FLORGES: + case Species.FURFROU: case Species.ORICORIO: case Species.SQUAWKABILLY: case Species.TATSUGIRI: diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 8be93672f34..fb156dc7e4f 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1855,15 +1855,15 @@ export function initSpecies() { new PokemonSpecies(Species.PANGORO, 6, false, false, false, "Daunting Pokémon", Type.FIGHTING, Type.DARK, 2.1, 136, Abilities.IRON_FIST, Abilities.MOLD_BREAKER, Abilities.SCRAPPY, 495, 95, 124, 78, 69, 71, 58, 65, 50, 173, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.FURFROU, 6, false, false, false, "Poodle Pokémon", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Natural Form", "", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165), - new PokemonForm("Heart Trim", "heart", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, ""), - new PokemonForm("Star Trim", "star", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, ""), - new PokemonForm("Diamond Trim", "diamond", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, ""), - new PokemonForm("Debutante Trim", "debutante", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, ""), - new PokemonForm("Matron Trim", "matron", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, ""), - new PokemonForm("Dandy Trim", "dandy", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, ""), - new PokemonForm("La Reine Trim", "la-reine", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, ""), - new PokemonForm("Kabuki Trim", "kabuki", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, ""), - new PokemonForm("Pharaoh Trim", "pharaoh", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false, ""), + new PokemonForm("Heart Trim", "heart", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false), + new PokemonForm("Star Trim", "star", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false), + new PokemonForm("Diamond Trim", "diamond", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false), + new PokemonForm("Debutante Trim", "debutante", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false), + new PokemonForm("Matron Trim", "matron", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false), + new PokemonForm("Dandy Trim", "dandy", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false), + new PokemonForm("La Reine Trim", "la-reine", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false), + new PokemonForm("Kabuki Trim", "kabuki", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false), + new PokemonForm("Pharaoh Trim", "pharaoh", Type.NORMAL, null, 1.2, 28, Abilities.FUR_COAT, Abilities.NONE, Abilities.NONE, 472, 75, 80, 60, 65, 90, 102, 160, 70, 165, false), ), new PokemonSpecies(Species.ESPURR, 6, false, false, false, "Restraint Pokémon", Type.PSYCHIC, null, 0.3, 3.5, Abilities.KEEN_EYE, Abilities.INFILTRATOR, Abilities.OWN_TEMPO, 355, 62, 48, 54, 63, 60, 68, 190, 50, 71, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.MEOWSTIC, 6, false, false, false, "Constraint Pokémon", Type.PSYCHIC, null, 0.6, 8.5, Abilities.KEEN_EYE, Abilities.INFILTRATOR, Abilities.PRANKSTER, 466, 74, 48, 76, 83, 81, 104, 75, 50, 163, GrowthRate.MEDIUM_FAST, 50, false, false, From bc4d1207b9c5561190dd145b8ead0d4916f92a6c Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sun, 28 Apr 2024 23:15:12 -0400 Subject: [PATCH 013/110] Disable source map --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index c07d12b010c..ab6fd748bfc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,7 +6,7 @@ "resolveJsonModule": true, "esModuleInterop": true, "strictNullChecks": false, - "sourceMap": true, + "sourceMap": false, "strict": false, "rootDir": "./src", "baseUrl": "./src", From 891b18592e98ba0c937af593b866bf5101d582f9 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sun, 28 Apr 2024 23:21:22 -0400 Subject: [PATCH 014/110] Disable source map in Vite config --- vite.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vite.config.js b/vite.config.js index f257239cafa..220747b98e3 100644 --- a/vite.config.js +++ b/vite.config.js @@ -8,7 +8,7 @@ export default defineConfig(({ mode }) => { clearScreen: false, build: { minify: 'esbuild', - sourcemap: true + sourcemap: false }, esbuild: { pure: mode === 'production' ? [ 'console.log' ] : [], From 696c31f3e270630278165a7ae67ee17021d44e01 Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Fri, 26 Apr 2024 18:06:41 +1000 Subject: [PATCH 015/110] Make grass types unable to be seeded --- src/data/battler-tags.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index b12d15968f6..aaab9f9a4a2 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -276,6 +276,10 @@ export class SeedTag extends BattlerTag { super(BattlerTagType.SEEDED, BattlerTagLapseType.TURN_END, 1, Moves.LEECH_SEED, sourceId); } + canAdd(pokemon: Pokemon): boolean { + return !pokemon.isOfType(Type.GRASS); + } + onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); From 7050e0db6c8108c2d97f057b58d9a59058fa4d65 Mon Sep 17 00:00:00 2001 From: AJ Fontaine Date: Sun, 28 Apr 2024 23:52:41 -0400 Subject: [PATCH 016/110] Fixed Outrage etc. lasting 4 turns --- src/data/move.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/move.ts b/src/data/move.ts index 9329d21c1d4..30c97a1ac8d 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -2466,7 +2466,7 @@ export class FrenzyAttr extends MoveEffectAttr { if (!user.getMoveQueue().length) { if (!user.getTag(BattlerTagType.FRENZY)) { - const turnCount = user.randSeedIntRange(2, 3); + const turnCount = user.randSeedIntRange(1, 2); new Array(turnCount).fill(null).map(() => user.getMoveQueue().push({ move: move.id, targets: [ target.getBattlerIndex() ], ignorePP: true })); user.addTag(BattlerTagType.FRENZY, 1, move.id, user.id); } else { From b1730000080a50272ff8b6f431b4b2ba054a1893 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Mon, 29 Apr 2024 01:42:02 -0500 Subject: [PATCH 017/110] Implement Alcremie flavors ...But not all evolution sweets. This way, you can get all the differently colored Alcremies without there being like ~60 different forms. There currently is an unintended side-effect with Gigantamaxing, where the Alcremie flavor will always switch to Vanilla Cream when reverting to normal, but aside from that, it works fine. --- public/images/pokemon/869-caramel-swirl.json | 41 + public/images/pokemon/869-caramel-swirl.png | Bin 0 -> 724 bytes public/images/pokemon/869-lemon-cream.json | 41 + public/images/pokemon/869-lemon-cream.png | Bin 0 -> 724 bytes public/images/pokemon/869-matcha-cream.json | 41 + public/images/pokemon/869-matcha-cream.png | Bin 0 -> 724 bytes public/images/pokemon/869-mint-cream.json | 41 + public/images/pokemon/869-mint-cream.png | Bin 0 -> 724 bytes public/images/pokemon/869-rainbow-swirl.json | 41 + public/images/pokemon/869-rainbow-swirl.png | Bin 0 -> 724 bytes public/images/pokemon/869-ruby-cream.json | 41 + public/images/pokemon/869-ruby-cream.png | Bin 0 -> 724 bytes public/images/pokemon/869-ruby-swirl.json | 41 + public/images/pokemon/869-ruby-swirl.png | Bin 0 -> 724 bytes public/images/pokemon/869-salted-cream.json | 41 + public/images/pokemon/869-salted-cream.png | Bin 0 -> 724 bytes .../pokemon/back/869-caramel-swirl.json | 41 + .../images/pokemon/back/869-caramel-swirl.png | Bin 0 -> 634 bytes .../images/pokemon/back/869-lemon-cream.json | 41 + .../images/pokemon/back/869-lemon-cream.png | Bin 0 -> 634 bytes .../images/pokemon/back/869-matcha-cream.json | 41 + .../images/pokemon/back/869-matcha-cream.png | Bin 0 -> 634 bytes .../images/pokemon/back/869-mint-cream.json | 41 + public/images/pokemon/back/869-mint-cream.png | Bin 0 -> 634 bytes .../pokemon/back/869-rainbow-swirl.json | 41 + .../images/pokemon/back/869-rainbow-swirl.png | Bin 0 -> 634 bytes .../images/pokemon/back/869-ruby-cream.json | 41 + public/images/pokemon/back/869-ruby-cream.png | Bin 0 -> 634 bytes .../images/pokemon/back/869-ruby-swirl.json | 41 + public/images/pokemon/back/869-ruby-swirl.png | Bin 0 -> 634 bytes .../images/pokemon/back/869-salted-cream.json | 41 + .../images/pokemon/back/869-salted-cream.png | Bin 0 -> 634 bytes .../pokemon/back/shiny/869-caramel-swirl.json | 41 + .../pokemon/back/shiny/869-caramel-swirl.png | Bin 0 -> 626 bytes .../pokemon/back/shiny/869-lemon-cream.json | 41 + .../pokemon/back/shiny/869-lemon-cream.png | Bin 0 -> 626 bytes .../pokemon/back/shiny/869-matcha-cream.json | 41 + .../pokemon/back/shiny/869-matcha-cream.png | Bin 0 -> 626 bytes .../pokemon/back/shiny/869-mint-cream.json | 41 + .../pokemon/back/shiny/869-mint-cream.png | Bin 0 -> 626 bytes .../pokemon/back/shiny/869-rainbow-swirl.json | 41 + .../pokemon/back/shiny/869-rainbow-swirl.png | Bin 0 -> 626 bytes .../pokemon/back/shiny/869-ruby-cream.json | 41 + .../pokemon/back/shiny/869-ruby-cream.png | Bin 0 -> 626 bytes .../pokemon/back/shiny/869-ruby-swirl.json | 41 + .../pokemon/back/shiny/869-ruby-swirl.png | Bin 0 -> 626 bytes .../pokemon/back/shiny/869-salted-cream.json | 41 + .../pokemon/back/shiny/869-salted-cream.png | Bin 0 -> 626 bytes .../pokemon/icons/869s-caramel-swirl.png | Bin 0 -> 833 bytes .../images/pokemon/icons/869s-lemon-cream.png | Bin 0 -> 833 bytes .../pokemon/icons/869s-matcha-cream.png | Bin 0 -> 833 bytes .../images/pokemon/icons/869s-mint-cream.png | Bin 0 -> 833 bytes .../pokemon/icons/869s-rainbow-swirl.png | Bin 0 -> 833 bytes .../images/pokemon/icons/869s-ruby-cream.png | Bin 0 -> 833 bytes .../images/pokemon/icons/869s-ruby-swirl.png | Bin 0 -> 833 bytes .../pokemon/icons/869s-salted-cream.png | Bin 0 -> 833 bytes .../pokemon/shiny/869-caramel-swirl.json | 41 + .../pokemon/shiny/869-caramel-swirl.png | Bin 0 -> 721 bytes .../images/pokemon/shiny/869-lemon-cream.json | 41 + .../images/pokemon/shiny/869-lemon-cream.png | Bin 0 -> 721 bytes .../pokemon/shiny/869-matcha-cream.json | 41 + .../images/pokemon/shiny/869-matcha-cream.png | Bin 0 -> 721 bytes .../images/pokemon/shiny/869-mint-cream.json | 41 + .../images/pokemon/shiny/869-mint-cream.png | Bin 0 -> 721 bytes .../pokemon/shiny/869-rainbow-swirl.json | 41 + .../pokemon/shiny/869-rainbow-swirl.png | Bin 0 -> 721 bytes .../images/pokemon/shiny/869-ruby-cream.json | 41 + .../images/pokemon/shiny/869-ruby-cream.png | Bin 0 -> 721 bytes .../images/pokemon/shiny/869-ruby-swirl.json | 41 + .../images/pokemon/shiny/869-ruby-swirl.png | Bin 0 -> 721 bytes .../pokemon/shiny/869-salted-cream.json | 41 + .../images/pokemon/shiny/869-salted-cream.png | Bin 0 -> 721 bytes public/images/pokemon_icons_8.json | 9104 +++++++++-------- public/images/pokemon_icons_8.png | Bin 73668 -> 74497 bytes src/battle-scene.ts | 2 + src/data/pokemon-evolutions.ts | 10 +- src/data/pokemon-forms.ts | 10 +- src/data/pokemon-species.ts | 16 +- 78 files changed, 5976 insertions(+), 4478 deletions(-) create mode 100644 public/images/pokemon/869-caramel-swirl.json create mode 100644 public/images/pokemon/869-caramel-swirl.png create mode 100644 public/images/pokemon/869-lemon-cream.json create mode 100644 public/images/pokemon/869-lemon-cream.png create mode 100644 public/images/pokemon/869-matcha-cream.json create mode 100644 public/images/pokemon/869-matcha-cream.png create mode 100644 public/images/pokemon/869-mint-cream.json create mode 100644 public/images/pokemon/869-mint-cream.png create mode 100644 public/images/pokemon/869-rainbow-swirl.json create mode 100644 public/images/pokemon/869-rainbow-swirl.png create mode 100644 public/images/pokemon/869-ruby-cream.json create mode 100644 public/images/pokemon/869-ruby-cream.png create mode 100644 public/images/pokemon/869-ruby-swirl.json create mode 100644 public/images/pokemon/869-ruby-swirl.png create mode 100644 public/images/pokemon/869-salted-cream.json create mode 100644 public/images/pokemon/869-salted-cream.png create mode 100644 public/images/pokemon/back/869-caramel-swirl.json create mode 100644 public/images/pokemon/back/869-caramel-swirl.png create mode 100644 public/images/pokemon/back/869-lemon-cream.json create mode 100644 public/images/pokemon/back/869-lemon-cream.png create mode 100644 public/images/pokemon/back/869-matcha-cream.json create mode 100644 public/images/pokemon/back/869-matcha-cream.png create mode 100644 public/images/pokemon/back/869-mint-cream.json create mode 100644 public/images/pokemon/back/869-mint-cream.png create mode 100644 public/images/pokemon/back/869-rainbow-swirl.json create mode 100644 public/images/pokemon/back/869-rainbow-swirl.png create mode 100644 public/images/pokemon/back/869-ruby-cream.json create mode 100644 public/images/pokemon/back/869-ruby-cream.png create mode 100644 public/images/pokemon/back/869-ruby-swirl.json create mode 100644 public/images/pokemon/back/869-ruby-swirl.png create mode 100644 public/images/pokemon/back/869-salted-cream.json create mode 100644 public/images/pokemon/back/869-salted-cream.png create mode 100644 public/images/pokemon/back/shiny/869-caramel-swirl.json create mode 100644 public/images/pokemon/back/shiny/869-caramel-swirl.png create mode 100644 public/images/pokemon/back/shiny/869-lemon-cream.json create mode 100644 public/images/pokemon/back/shiny/869-lemon-cream.png create mode 100644 public/images/pokemon/back/shiny/869-matcha-cream.json create mode 100644 public/images/pokemon/back/shiny/869-matcha-cream.png create mode 100644 public/images/pokemon/back/shiny/869-mint-cream.json create mode 100644 public/images/pokemon/back/shiny/869-mint-cream.png create mode 100644 public/images/pokemon/back/shiny/869-rainbow-swirl.json create mode 100644 public/images/pokemon/back/shiny/869-rainbow-swirl.png create mode 100644 public/images/pokemon/back/shiny/869-ruby-cream.json create mode 100644 public/images/pokemon/back/shiny/869-ruby-cream.png create mode 100644 public/images/pokemon/back/shiny/869-ruby-swirl.json create mode 100644 public/images/pokemon/back/shiny/869-ruby-swirl.png create mode 100644 public/images/pokemon/back/shiny/869-salted-cream.json create mode 100644 public/images/pokemon/back/shiny/869-salted-cream.png create mode 100644 public/images/pokemon/icons/869s-caramel-swirl.png create mode 100644 public/images/pokemon/icons/869s-lemon-cream.png create mode 100644 public/images/pokemon/icons/869s-matcha-cream.png create mode 100644 public/images/pokemon/icons/869s-mint-cream.png create mode 100644 public/images/pokemon/icons/869s-rainbow-swirl.png create mode 100644 public/images/pokemon/icons/869s-ruby-cream.png create mode 100644 public/images/pokemon/icons/869s-ruby-swirl.png create mode 100644 public/images/pokemon/icons/869s-salted-cream.png create mode 100644 public/images/pokemon/shiny/869-caramel-swirl.json create mode 100644 public/images/pokemon/shiny/869-caramel-swirl.png create mode 100644 public/images/pokemon/shiny/869-lemon-cream.json create mode 100644 public/images/pokemon/shiny/869-lemon-cream.png create mode 100644 public/images/pokemon/shiny/869-matcha-cream.json create mode 100644 public/images/pokemon/shiny/869-matcha-cream.png create mode 100644 public/images/pokemon/shiny/869-mint-cream.json create mode 100644 public/images/pokemon/shiny/869-mint-cream.png create mode 100644 public/images/pokemon/shiny/869-rainbow-swirl.json create mode 100644 public/images/pokemon/shiny/869-rainbow-swirl.png create mode 100644 public/images/pokemon/shiny/869-ruby-cream.json create mode 100644 public/images/pokemon/shiny/869-ruby-cream.png create mode 100644 public/images/pokemon/shiny/869-ruby-swirl.json create mode 100644 public/images/pokemon/shiny/869-ruby-swirl.png create mode 100644 public/images/pokemon/shiny/869-salted-cream.json create mode 100644 public/images/pokemon/shiny/869-salted-cream.png diff --git a/public/images/pokemon/869-caramel-swirl.json b/public/images/pokemon/869-caramel-swirl.json new file mode 100644 index 00000000000..fb8f0afb857 --- /dev/null +++ b/public/images/pokemon/869-caramel-swirl.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-caramel-swirl.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 0.5, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 96, + "h": 96 + }, + "spriteSourceSize": { + "x": 28, + "y": 20, + "w": 39, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:e565b3b962f894b4de5291159fced6f2:dec57ba4f1836b6834da2da4c98c442a:a9efacddd6da069c39eca521bf0c5c93$" + } +} diff --git a/public/images/pokemon/869-caramel-swirl.png b/public/images/pokemon/869-caramel-swirl.png new file mode 100644 index 0000000000000000000000000000000000000000..c6bf967942f67c8b73a4a88f39d57f668c279496 GIT binary patch literal 724 zcmV;_0xSKAP)baJ3P3x#<5D*a0sebwU`}+L+u(PwTva4NiXb`1Gfw~h{oT)F-2eap0d!JM zQvg8b*k%9#010qNS#tmY4#WTe4#WYKD-Ig~00KZsL_t(Y$EB9rmV+P+MN2NCRQdnU zos$5zGgZV+Rv%i+&LKDO@pw0Kd)zg8y4^>Kn7N?0B@6ic0(^c0HZBDEVxPfGZsbLk zL9lbff}{=MJA$+Wfq9&xkaK9}oXQv$Ugm;>T=?Jyz~9)vI33_@em> z>~d>@IY~QK)#0$iZ7FSOTXW%DjIEd}JZ@`WZv)3o5G>%eJnnIuVPWUURoArj^l04- zD`D+i0egC6(X%g9eR1}{9m*-ktK}5iib%|oTI4;DFQdNSp?wm7%)8yS&aOlHKmUB76(JuSkd9PJ7VO%mFWZH zX}JbbKn7N?0B@6ic0(^c0HZBDEVxPfGZsbLk zL9lbff}{=MJA$+Wfq9&xkaK9}oXQv$Ugm;>T=?Jyz~9)vI33_@em> z>~d>@IY~QK)#0$iZ7FSOTXW%DjIEd}JZ@`WZv)3o5G>%eJnnIuVPWUURoArj^l04- zD`D+i0egC6(X%g9eR1}{9m*-ktK}5iib%|oTI4;DFQdNSp?wm7%)8yS&aOlHKmUB76(JuSkd9PJ7VO%mFWZH zX}JbbKn7N?0B@6ic0(^c0HZBDEVxPfGZsbLk zL9lbff}{=MJA$+Wfq9&xkaK9}oXQv$Ugm;>T=?Jyz~9)vI33_@em> z>~d>@IY~QK)#0$iZ7FSOTXW%DjIEd}JZ@`WZv)3o5G>%eJnnIuVPWUURoArj^l04- zD`D+i0egC6(X%g9eR1}{9m*-ktK}5iib%|oTI4;DFQdNSp?wm7%)8yS&aOlHKmUB76(JuSkd9PJ7VO%mFWZH zX}Jbb4NiXb`1Gfw~h{oB&?VgLXD0d!JM zQvg8b*k%9#010qNS#tmY4#WTe4#WYKD-Ig~00KZsL_t(Y$EB9rmV+P+MN2NCRQdnU zos$5zGgZV+Rv%i+&LKDO@pw0Kd)zg8y4^>Kn7N?0B@6ic0(^c0HZBDEVxPfGZsbLk zL9lbff}{=MJA$+Wfq9&xkaK9}oXQv$Ugm;>T=?Jyz~9)vI33_@em> z>~d>@IY~QK)#0$iZ7FSOTXW%DjIEd}JZ@`WZv)3o5G>%eJnnIuVPWUURoArj^l04- zD`D+i0egC6(X%g9eR1}{9m*-ktK}5iib%|oTI4;DFQdNSp?wm7%)8yS&aOlHKmUB76(JuSkd9PJ7VO%mFWZH zX}JbbF literal 0 HcmV?d00001 diff --git a/public/images/pokemon/869-rainbow-swirl.json b/public/images/pokemon/869-rainbow-swirl.json new file mode 100644 index 00000000000..b3ac889bcf4 --- /dev/null +++ b/public/images/pokemon/869-rainbow-swirl.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-rainbow-swirl.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 0.5, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 96, + "h": 96 + }, + "spriteSourceSize": { + "x": 28, + "y": 20, + "w": 39, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:1a4d1bc0283fdcf9704523ff9c304937:8122f937b67cb25a772bdb63688456b7:5efb62c1b2c8ccb825172755b6a5956b$" + } +} diff --git a/public/images/pokemon/869-rainbow-swirl.png b/public/images/pokemon/869-rainbow-swirl.png new file mode 100644 index 0000000000000000000000000000000000000000..2e75b9333165dba87d1c6bfed1090a053d49fd91 GIT binary patch literal 724 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/back/869-rainbow-swirl.json b/public/images/pokemon/back/869-rainbow-swirl.json new file mode 100644 index 00000000000..f19a4443388 --- /dev/null +++ b/public/images/pokemon/back/869-rainbow-swirl.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-rainbow-swirl.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 0.333, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 96, + "h": 96 + }, + "spriteSourceSize": { + "x": 30, + "y": 20, + "w": 36, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:3be6ab13976cde5a336b4186625bf386:e472d87a989050125ac960a9e53d8c77:5efb62c1b2c8ccb825172755b6a5956b$" + } +} diff --git a/public/images/pokemon/back/869-rainbow-swirl.png b/public/images/pokemon/back/869-rainbow-swirl.png new file mode 100644 index 0000000000000000000000000000000000000000..5454202ef272063552769d3911da202b39cb9d9a GIT binary patch literal 634 zcmV-=0)_pFP)J5z455@e9X?=60x-q7H1=I%8S_XbTPuV$u zieYj-z-|i9a7+|n+8m0L{{)khKbdHvM6@|QzizE0BxR{9EcTJi1REkMq5rRz0m@-Yew804QqkHM%i|(My)D?BT>^aVV=`q zt$ehCWVuvUnJyw^UUM!R=p+@Q#;~6P#9VIjRnVQR-n}@^`_|As42>T`6!*mb&RR8X zcTFe1^Fw2l1N^;f1-z%rt=;7Wl0V;^3Bly{{4y|Ima_j@XXKg&CvT@bn+l3#sB~S0d!JM zQvg8b*k%9#010qNS#tmY4#WTe4#WYKD-Ig~00HJnL_t(Y$DP)Tl7k=&1yD&YxT5y| zKX(&?idF%enQdu@V|WC*!*C9^7+!^dKZ`eVM<%;fkT65kosV5`8NN`NIgQuM8FTFV z2U&(ZfPZkp0{@gQOcTF%q^<{^nIqYaF33lw{2Ia=NBcOn0-ErWPR5xwGqg^{C0%;g z8jyPB7-P5FgD3ucK93NY-8g~s4^CILo$tK&Ho=Mbd4l*#XKgtofhwi??Bv^Lhk%RA zO-`+ryG`ew9fBjATuv?Z;;QMy;M*~U>J5z455@e9X?=60x-q7H1=I%8S_XbTPuV$u zieYj-z-|i9a7+|n+8m0L{{)khKbdHvM6@|QzizE0BxR{9EcTJi1REkMq5rRz0m@-Yew804QqkHM%i|(My)D?BT>^aVV=`q zt$ehCWVuvUnJyw^UUM!R=p+@Q#;~6P#9VIjRnVQR-n}@^`_|As42>T`6!*mb&RR8X zcTFe1^Fw2l1N^;f1-z%rt=;7Wl0VJ5z455@e9X?=60x-q7H1=I%8S_XbTPuV$u zieYj-z-|i9a7+|n+8m0L{{)khKbdHvM6@|QzizE0BxR{9EcTJi1REkMq5rRz0m@-Yew804QqkHM%i|(My)D?BT>^aVV=`q zt$ehCWVuvUnJyw^UUM!R=p+@Q#;~6P#9VIjRnVQR-n}@^`_|As42>T`6!*mb&RR8X zcTFe1^Fw2l1N^;f1-z%rt=;7Wl0VJ5z455@e9X?=60x-q7H1=I%8S_XbTPuV$u zieYj-z-|i9a7+|n+8m0L{{)khKbdHvM6@|QzizE0BxR{9EcTJi1REkMq5rRz0m@-Yew804QqkHM%i|(My)D?BT>^aVV=`q zt$ehCWVuvUnJyw^UUM!R=p+@Q#;~6P#9VIjRnVQR-n}@^`_|As42>T`6!*mb&RR8X zcTFe1^Fw2l1N^;f1-z%rt=;7Wl0VjK~#8Nb<#0z+b|RcV96&i6Qy-GSy6(ZK?>L;oUGFO!30HzqKyZS zF$@ktQ6TWZIaUT;AcIy99XxjR*0~qx&@1>1rD-D#Md=6L^x=Px1A~1!NsASZdcbnvY} z#&;OeXu67P2xf)^QjFBcsqk+`1Z@e zP+uAZXaIopZwCX$k8X`|q`KX5y77^fv&KuIKSHB)%iNE7t1oS z#Ufdsb?bO$)XXATulxRc{>K#kz5Sk%N5%p#jInOmD<7Sj+h+~-5B5XNIBjH%;s5{u M07*qoM6N<$f(l(3-v9sr literal 0 HcmV?d00001 diff --git a/public/images/pokemon/back/shiny/869-lemon-cream.json b/public/images/pokemon/back/shiny/869-lemon-cream.json new file mode 100644 index 00000000000..51ea7fa51ae --- /dev/null +++ b/public/images/pokemon/back/shiny/869-lemon-cream.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-lemon-cream.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 36, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:9282a977590712360ae72153b51f6d19:8a8b13830aca0ac27048eddc715c72bd:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/back/shiny/869-lemon-cream.png b/public/images/pokemon/back/shiny/869-lemon-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..5407d6e73deb68d6f4d8932b55af793f24157090 GIT binary patch literal 626 zcmV-&0*(ENP)jK~#8Nb<#0z+b|RcV96&i6Qy-GSy6(ZK?>L;oUGFO!30HzqKyZS zF$@ktQ6TWZIaUT;AcIy99XxjR*0~qx&@1>1rD-D#Md=6L^x=Px1A~1!NsASZdcbnvY} z#&;OeXu67P2xf)^QjFBcsqk+`1Z@e zP+uAZXaIopZwCX$k8X`|q`KX5y77^fv&KuIKSHB)%iNE7t1oS z#Ufdsb?bO$)XXATulxRc{>K#kz5Sk%N5%p#jInOmD<7Sj+h+~-5B5XNIBjH%;s5{u M07*qoM6N<$f(l(3-v9sr literal 0 HcmV?d00001 diff --git a/public/images/pokemon/back/shiny/869-matcha-cream.json b/public/images/pokemon/back/shiny/869-matcha-cream.json new file mode 100644 index 00000000000..344546032ff --- /dev/null +++ b/public/images/pokemon/back/shiny/869-matcha-cream.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-matcha-cream.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 36, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:9282a977590712360ae72153b51f6d19:8a8b13830aca0ac27048eddc715c72bd:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/back/shiny/869-matcha-cream.png b/public/images/pokemon/back/shiny/869-matcha-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..5407d6e73deb68d6f4d8932b55af793f24157090 GIT binary patch literal 626 zcmV-&0*(ENP)jK~#8Nb<#0z+b|RcV96&i6Qy-GSy6(ZK?>L;oUGFO!30HzqKyZS zF$@ktQ6TWZIaUT;AcIy99XxjR*0~qx&@1>1rD-D#Md=6L^x=Px1A~1!NsASZdcbnvY} z#&;OeXu67P2xf)^QjFBcsqk+`1Z@e zP+uAZXaIopZwCX$k8X`|q`KX5y77^fv&KuIKSHB)%iNE7t1oS z#Ufdsb?bO$)XXATulxRc{>K#kz5Sk%N5%p#jInOmD<7Sj+h+~-5B5XNIBjH%;s5{u M07*qoM6N<$f(l(3-v9sr literal 0 HcmV?d00001 diff --git a/public/images/pokemon/back/shiny/869-mint-cream.json b/public/images/pokemon/back/shiny/869-mint-cream.json new file mode 100644 index 00000000000..21eaa4e016c --- /dev/null +++ b/public/images/pokemon/back/shiny/869-mint-cream.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-mint-cream.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 36, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:9282a977590712360ae72153b51f6d19:8a8b13830aca0ac27048eddc715c72bd:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/back/shiny/869-mint-cream.png b/public/images/pokemon/back/shiny/869-mint-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..5407d6e73deb68d6f4d8932b55af793f24157090 GIT binary patch literal 626 zcmV-&0*(ENP)jK~#8Nb<#0z+b|RcV96&i6Qy-GSy6(ZK?>L;oUGFO!30HzqKyZS zF$@ktQ6TWZIaUT;AcIy99XxjR*0~qx&@1>1rD-D#Md=6L^x=Px1A~1!NsASZdcbnvY} z#&;OeXu67P2xf)^QjFBcsqk+`1Z@e zP+uAZXaIopZwCX$k8X`|q`KX5y77^fv&KuIKSHB)%iNE7t1oS z#Ufdsb?bO$)XXATulxRc{>K#kz5Sk%N5%p#jInOmD<7Sj+h+~-5B5XNIBjH%;s5{u M07*qoM6N<$f(l(3-v9sr literal 0 HcmV?d00001 diff --git a/public/images/pokemon/back/shiny/869-rainbow-swirl.json b/public/images/pokemon/back/shiny/869-rainbow-swirl.json new file mode 100644 index 00000000000..cb5a4c26c96 --- /dev/null +++ b/public/images/pokemon/back/shiny/869-rainbow-swirl.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-rainbow-swirl.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 36, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:9282a977590712360ae72153b51f6d19:8a8b13830aca0ac27048eddc715c72bd:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/back/shiny/869-rainbow-swirl.png b/public/images/pokemon/back/shiny/869-rainbow-swirl.png new file mode 100644 index 0000000000000000000000000000000000000000..5407d6e73deb68d6f4d8932b55af793f24157090 GIT binary patch literal 626 zcmV-&0*(ENP)jK~#8Nb<#0z+b|RcV96&i6Qy-GSy6(ZK?>L;oUGFO!30HzqKyZS zF$@ktQ6TWZIaUT;AcIy99XxjR*0~qx&@1>1rD-D#Md=6L^x=Px1A~1!NsASZdcbnvY} z#&;OeXu67P2xf)^QjFBcsqk+`1Z@e zP+uAZXaIopZwCX$k8X`|q`KX5y77^fv&KuIKSHB)%iNE7t1oS z#Ufdsb?bO$)XXATulxRc{>K#kz5Sk%N5%p#jInOmD<7Sj+h+~-5B5XNIBjH%;s5{u M07*qoM6N<$f(l(3-v9sr literal 0 HcmV?d00001 diff --git a/public/images/pokemon/back/shiny/869-ruby-cream.json b/public/images/pokemon/back/shiny/869-ruby-cream.json new file mode 100644 index 00000000000..bd3277d2dd4 --- /dev/null +++ b/public/images/pokemon/back/shiny/869-ruby-cream.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-ruby-cream.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 36, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:9282a977590712360ae72153b51f6d19:8a8b13830aca0ac27048eddc715c72bd:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/back/shiny/869-ruby-cream.png b/public/images/pokemon/back/shiny/869-ruby-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..5407d6e73deb68d6f4d8932b55af793f24157090 GIT binary patch literal 626 zcmV-&0*(ENP)jK~#8Nb<#0z+b|RcV96&i6Qy-GSy6(ZK?>L;oUGFO!30HzqKyZS zF$@ktQ6TWZIaUT;AcIy99XxjR*0~qx&@1>1rD-D#Md=6L^x=Px1A~1!NsASZdcbnvY} z#&;OeXu67P2xf)^QjFBcsqk+`1Z@e zP+uAZXaIopZwCX$k8X`|q`KX5y77^fv&KuIKSHB)%iNE7t1oS z#Ufdsb?bO$)XXATulxRc{>K#kz5Sk%N5%p#jInOmD<7Sj+h+~-5B5XNIBjH%;s5{u M07*qoM6N<$f(l(3-v9sr literal 0 HcmV?d00001 diff --git a/public/images/pokemon/back/shiny/869-ruby-swirl.json b/public/images/pokemon/back/shiny/869-ruby-swirl.json new file mode 100644 index 00000000000..8a487e00562 --- /dev/null +++ b/public/images/pokemon/back/shiny/869-ruby-swirl.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-ruby-swirl.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 36, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:9282a977590712360ae72153b51f6d19:8a8b13830aca0ac27048eddc715c72bd:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/back/shiny/869-ruby-swirl.png b/public/images/pokemon/back/shiny/869-ruby-swirl.png new file mode 100644 index 0000000000000000000000000000000000000000..5407d6e73deb68d6f4d8932b55af793f24157090 GIT binary patch literal 626 zcmV-&0*(ENP)jK~#8Nb<#0z+b|RcV96&i6Qy-GSy6(ZK?>L;oUGFO!30HzqKyZS zF$@ktQ6TWZIaUT;AcIy99XxjR*0~qx&@1>1rD-D#Md=6L^x=Px1A~1!NsASZdcbnvY} z#&;OeXu67P2xf)^QjFBcsqk+`1Z@e zP+uAZXaIopZwCX$k8X`|q`KX5y77^fv&KuIKSHB)%iNE7t1oS z#Ufdsb?bO$)XXATulxRc{>K#kz5Sk%N5%p#jInOmD<7Sj+h+~-5B5XNIBjH%;s5{u M07*qoM6N<$f(l(3-v9sr literal 0 HcmV?d00001 diff --git a/public/images/pokemon/back/shiny/869-salted-cream.json b/public/images/pokemon/back/shiny/869-salted-cream.json new file mode 100644 index 00000000000..e3aeb125b45 --- /dev/null +++ b/public/images/pokemon/back/shiny/869-salted-cream.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-salted-cream.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 36, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 36, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:9282a977590712360ae72153b51f6d19:8a8b13830aca0ac27048eddc715c72bd:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/back/shiny/869-salted-cream.png b/public/images/pokemon/back/shiny/869-salted-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..5407d6e73deb68d6f4d8932b55af793f24157090 GIT binary patch literal 626 zcmV-&0*(ENP)jK~#8Nb<#0z+b|RcV96&i6Qy-GSy6(ZK?>L;oUGFO!30HzqKyZS zF$@ktQ6TWZIaUT;AcIy99XxjR*0~qx&@1>1rD-D#Md=6L^x=Px1A~1!NsASZdcbnvY} z#&;OeXu67P2xf)^QjFBcsqk+`1Z@e zP+uAZXaIopZwCX$k8X`|q`KX5y77^fv&KuIKSHB)%iNE7t1oS z#Ufdsb?bO$)XXATulxRc{>K#kz5Sk%N5%p#jInOmD<7Sj+h+~-5B5XNIBjH%;s5{u M07*qoM6N<$f(l(3-v9sr literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/869s-caramel-swirl.png b/public/images/pokemon/icons/869s-caramel-swirl.png new file mode 100644 index 0000000000000000000000000000000000000000..32cb4cc7d56c092fa586a548abf6cdf274ea559b GIT binary patch literal 833 zcmV-H1HSx;P)X00009a7bBm000ie z000ie0hKEb8vpnc(V>E*wzPwTq$o%SMaZBaNZQ58kHkbN4h2OK+QRewPu_XFhP2_{ z_l67}c<Xc^0#eXwTE}RrYgdB;q;mPS3z1Hr5MbY+ zL2a>NLs9Wri6H^&01K!KuUZHSkp0%HRsQDh+@ptuCzQL9L){moE+CwWV=f;`9j5N> z-3<2m<5va^;-wRV*7dDB=)!?sI`(0~a#V6z-jv?a@qwdUU;MsE82jMwZ~O?Yc+>%8 zI1s@3Dx(kq1}1PQ_q=%782jauHl*qnvtl#0Lp-IvJ{K&yH%fS5fQ6DUjDy;`rllaj z63P8UPOOP~tsn$WcdJzuWOV?CM367QyooXYex6xZuUupWp*66LO*r!CteluDhIXb4Y#j-wU zVLTq^`rzq7Xk?6iov?^hq=B0p<*iq zy=~+7$Jq~FI;MIKdVLs_Xb1~*(Z$j<+Oe%1U3lJ+KBSM0cR00000 LNkvXXu0mjf(vE>G literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/869s-lemon-cream.png b/public/images/pokemon/icons/869s-lemon-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..32cb4cc7d56c092fa586a548abf6cdf274ea559b GIT binary patch literal 833 zcmV-H1HSx;P)X00009a7bBm000ie z000ie0hKEb8vpnc(V>E*wzPwTq$o%SMaZBaNZQ58kHkbN4h2OK+QRewPu_XFhP2_{ z_l67}c<Xc^0#eXwTE}RrYgdB;q;mPS3z1Hr5MbY+ zL2a>NLs9Wri6H^&01K!KuUZHSkp0%HRsQDh+@ptuCzQL9L){moE+CwWV=f;`9j5N> z-3<2m<5va^;-wRV*7dDB=)!?sI`(0~a#V6z-jv?a@qwdUU;MsE82jMwZ~O?Yc+>%8 zI1s@3Dx(kq1}1PQ_q=%782jauHl*qnvtl#0Lp-IvJ{K&yH%fS5fQ6DUjDy;`rllaj z63P8UPOOP~tsn$WcdJzuWOV?CM367QyooXYex6xZuUupWp*66LO*r!CteluDhIXb4Y#j-wU zVLTq^`rzq7Xk?6iov?^hq=B0p<*iq zy=~+7$Jq~FI;MIKdVLs_Xb1~*(Z$j<+Oe%1U3lJ+KBSM0cR00000 LNkvXXu0mjf(vE>G literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/869s-matcha-cream.png b/public/images/pokemon/icons/869s-matcha-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..32cb4cc7d56c092fa586a548abf6cdf274ea559b GIT binary patch literal 833 zcmV-H1HSx;P)X00009a7bBm000ie z000ie0hKEb8vpnc(V>E*wzPwTq$o%SMaZBaNZQ58kHkbN4h2OK+QRewPu_XFhP2_{ z_l67}c<Xc^0#eXwTE}RrYgdB;q;mPS3z1Hr5MbY+ zL2a>NLs9Wri6H^&01K!KuUZHSkp0%HRsQDh+@ptuCzQL9L){moE+CwWV=f;`9j5N> z-3<2m<5va^;-wRV*7dDB=)!?sI`(0~a#V6z-jv?a@qwdUU;MsE82jMwZ~O?Yc+>%8 zI1s@3Dx(kq1}1PQ_q=%782jauHl*qnvtl#0Lp-IvJ{K&yH%fS5fQ6DUjDy;`rllaj z63P8UPOOP~tsn$WcdJzuWOV?CM367QyooXYex6xZuUupWp*66LO*r!CteluDhIXb4Y#j-wU zVLTq^`rzq7Xk?6iov?^hq=B0p<*iq zy=~+7$Jq~FI;MIKdVLs_Xb1~*(Z$j<+Oe%1U3lJ+KBSM0cR00000 LNkvXXu0mjf(vE>G literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/869s-mint-cream.png b/public/images/pokemon/icons/869s-mint-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..32cb4cc7d56c092fa586a548abf6cdf274ea559b GIT binary patch literal 833 zcmV-H1HSx;P)X00009a7bBm000ie z000ie0hKEb8vpnc(V>E*wzPwTq$o%SMaZBaNZQ58kHkbN4h2OK+QRewPu_XFhP2_{ z_l67}c<Xc^0#eXwTE}RrYgdB;q;mPS3z1Hr5MbY+ zL2a>NLs9Wri6H^&01K!KuUZHSkp0%HRsQDh+@ptuCzQL9L){moE+CwWV=f;`9j5N> z-3<2m<5va^;-wRV*7dDB=)!?sI`(0~a#V6z-jv?a@qwdUU;MsE82jMwZ~O?Yc+>%8 zI1s@3Dx(kq1}1PQ_q=%782jauHl*qnvtl#0Lp-IvJ{K&yH%fS5fQ6DUjDy;`rllaj z63P8UPOOP~tsn$WcdJzuWOV?CM367QyooXYex6xZuUupWp*66LO*r!CteluDhIXb4Y#j-wU zVLTq^`rzq7Xk?6iov?^hq=B0p<*iq zy=~+7$Jq~FI;MIKdVLs_Xb1~*(Z$j<+Oe%1U3lJ+KBSM0cR00000 LNkvXXu0mjf(vE>G literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/869s-rainbow-swirl.png b/public/images/pokemon/icons/869s-rainbow-swirl.png new file mode 100644 index 0000000000000000000000000000000000000000..32cb4cc7d56c092fa586a548abf6cdf274ea559b GIT binary patch literal 833 zcmV-H1HSx;P)X00009a7bBm000ie z000ie0hKEb8vpnc(V>E*wzPwTq$o%SMaZBaNZQ58kHkbN4h2OK+QRewPu_XFhP2_{ z_l67}c<Xc^0#eXwTE}RrYgdB;q;mPS3z1Hr5MbY+ zL2a>NLs9Wri6H^&01K!KuUZHSkp0%HRsQDh+@ptuCzQL9L){moE+CwWV=f;`9j5N> z-3<2m<5va^;-wRV*7dDB=)!?sI`(0~a#V6z-jv?a@qwdUU;MsE82jMwZ~O?Yc+>%8 zI1s@3Dx(kq1}1PQ_q=%782jauHl*qnvtl#0Lp-IvJ{K&yH%fS5fQ6DUjDy;`rllaj z63P8UPOOP~tsn$WcdJzuWOV?CM367QyooXYex6xZuUupWp*66LO*r!CteluDhIXb4Y#j-wU zVLTq^`rzq7Xk?6iov?^hq=B0p<*iq zy=~+7$Jq~FI;MIKdVLs_Xb1~*(Z$j<+Oe%1U3lJ+KBSM0cR00000 LNkvXXu0mjf(vE>G literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/869s-ruby-cream.png b/public/images/pokemon/icons/869s-ruby-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..32cb4cc7d56c092fa586a548abf6cdf274ea559b GIT binary patch literal 833 zcmV-H1HSx;P)X00009a7bBm000ie z000ie0hKEb8vpnc(V>E*wzPwTq$o%SMaZBaNZQ58kHkbN4h2OK+QRewPu_XFhP2_{ z_l67}c<Xc^0#eXwTE}RrYgdB;q;mPS3z1Hr5MbY+ zL2a>NLs9Wri6H^&01K!KuUZHSkp0%HRsQDh+@ptuCzQL9L){moE+CwWV=f;`9j5N> z-3<2m<5va^;-wRV*7dDB=)!?sI`(0~a#V6z-jv?a@qwdUU;MsE82jMwZ~O?Yc+>%8 zI1s@3Dx(kq1}1PQ_q=%782jauHl*qnvtl#0Lp-IvJ{K&yH%fS5fQ6DUjDy;`rllaj z63P8UPOOP~tsn$WcdJzuWOV?CM367QyooXYex6xZuUupWp*66LO*r!CteluDhIXb4Y#j-wU zVLTq^`rzq7Xk?6iov?^hq=B0p<*iq zy=~+7$Jq~FI;MIKdVLs_Xb1~*(Z$j<+Oe%1U3lJ+KBSM0cR00000 LNkvXXu0mjf(vE>G literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/869s-ruby-swirl.png b/public/images/pokemon/icons/869s-ruby-swirl.png new file mode 100644 index 0000000000000000000000000000000000000000..32cb4cc7d56c092fa586a548abf6cdf274ea559b GIT binary patch literal 833 zcmV-H1HSx;P)X00009a7bBm000ie z000ie0hKEb8vpnc(V>E*wzPwTq$o%SMaZBaNZQ58kHkbN4h2OK+QRewPu_XFhP2_{ z_l67}c<Xc^0#eXwTE}RrYgdB;q;mPS3z1Hr5MbY+ zL2a>NLs9Wri6H^&01K!KuUZHSkp0%HRsQDh+@ptuCzQL9L){moE+CwWV=f;`9j5N> z-3<2m<5va^;-wRV*7dDB=)!?sI`(0~a#V6z-jv?a@qwdUU;MsE82jMwZ~O?Yc+>%8 zI1s@3Dx(kq1}1PQ_q=%782jauHl*qnvtl#0Lp-IvJ{K&yH%fS5fQ6DUjDy;`rllaj z63P8UPOOP~tsn$WcdJzuWOV?CM367QyooXYex6xZuUupWp*66LO*r!CteluDhIXb4Y#j-wU zVLTq^`rzq7Xk?6iov?^hq=B0p<*iq zy=~+7$Jq~FI;MIKdVLs_Xb1~*(Z$j<+Oe%1U3lJ+KBSM0cR00000 LNkvXXu0mjf(vE>G literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/869s-salted-cream.png b/public/images/pokemon/icons/869s-salted-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..32cb4cc7d56c092fa586a548abf6cdf274ea559b GIT binary patch literal 833 zcmV-H1HSx;P)X00009a7bBm000ie z000ie0hKEb8vpnc(V>E*wzPwTq$o%SMaZBaNZQ58kHkbN4h2OK+QRewPu_XFhP2_{ z_l67}c<Xc^0#eXwTE}RrYgdB;q;mPS3z1Hr5MbY+ zL2a>NLs9Wri6H^&01K!KuUZHSkp0%HRsQDh+@ptuCzQL9L){moE+CwWV=f;`9j5N> z-3<2m<5va^;-wRV*7dDB=)!?sI`(0~a#V6z-jv?a@qwdUU;MsE82jMwZ~O?Yc+>%8 zI1s@3Dx(kq1}1PQ_q=%782jauHl*qnvtl#0Lp-IvJ{K&yH%fS5fQ6DUjDy;`rllaj z63P8UPOOP~tsn$WcdJzuWOV?CM367QyooXYex6xZuUupWp*66LO*r!CteluDhIXb4Y#j-wU zVLTq^`rzq7Xk?6iov?^hq=B0p<*iq zy=~+7$Jq~FI;MIKdVLs_Xb1~*(Z$j<+Oe%1U3lJ+KBSM0cR00000 LNkvXXu0mjf(vE>G literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/869-caramel-swirl.json b/public/images/pokemon/shiny/869-caramel-swirl.json new file mode 100644 index 00000000000..d08055197ee --- /dev/null +++ b/public/images/pokemon/shiny/869-caramel-swirl.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-caramel-swirl.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 39, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:05eade73b3ac133b2b6bfabb37d329b4:51719e2b4400ad80a2715f69594d3317:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/shiny/869-caramel-swirl.png b/public/images/pokemon/shiny/869-caramel-swirl.png new file mode 100644 index 0000000000000000000000000000000000000000..803686aed5d7af9acadf500808fea505c71c88fa GIT binary patch literal 721 zcmV;?0xtcDP)@J~iXkC6yfvHo2u(4hfd6t8&!*FT zjSS7+$e*3&o5OuhO_d+arg4EgzS32-pAO^U<%1-K%sX*$W^MjwRAmNq3MX==-0#r6OpnoJ7EL+~Vy^+Fki zYC)2%df*_~jQhHn)fz?s0|MLHu&u%?8)0#*kIJ6s9$*a2Dq@o(f(b9;#>I6p>I{m= zzC=qLmtZHkFqW_qB-;r~OgbmWBxlv+^ZSmmi{0bxq>-DNBxLtQhv^aH{J!>wG1)$O z&vuh!Y!^1VlU!#|Ff(|dU6WNQi9YbV$sj}dc1i6Ilr{r6%JJsz00000NkvXXu0mjf D_El3r literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/869-lemon-cream.json b/public/images/pokemon/shiny/869-lemon-cream.json new file mode 100644 index 00000000000..1160af92907 --- /dev/null +++ b/public/images/pokemon/shiny/869-lemon-cream.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-lemon-cream.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 39, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:05eade73b3ac133b2b6bfabb37d329b4:51719e2b4400ad80a2715f69594d3317:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/shiny/869-lemon-cream.png b/public/images/pokemon/shiny/869-lemon-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..803686aed5d7af9acadf500808fea505c71c88fa GIT binary patch literal 721 zcmV;?0xtcDP)@J~iXkC6yfvHo2u(4hfd6t8&!*FT zjSS7+$e*3&o5OuhO_d+arg4EgzS32-pAO^U<%1-K%sX*$W^MjwRAmNq3MX==-0#r6OpnoJ7EL+~Vy^+Fki zYC)2%df*_~jQhHn)fz?s0|MLHu&u%?8)0#*kIJ6s9$*a2Dq@o(f(b9;#>I6p>I{m= zzC=qLmtZHkFqW_qB-;r~OgbmWBxlv+^ZSmmi{0bxq>-DNBxLtQhv^aH{J!>wG1)$O z&vuh!Y!^1VlU!#|Ff(|dU6WNQi9YbV$sj}dc1i6Ilr{r6%JJsz00000NkvXXu0mjf D_El3r literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/869-matcha-cream.json b/public/images/pokemon/shiny/869-matcha-cream.json new file mode 100644 index 00000000000..149ee6e1077 --- /dev/null +++ b/public/images/pokemon/shiny/869-matcha-cream.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-matcha-cream.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 39, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:05eade73b3ac133b2b6bfabb37d329b4:51719e2b4400ad80a2715f69594d3317:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/shiny/869-matcha-cream.png b/public/images/pokemon/shiny/869-matcha-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..803686aed5d7af9acadf500808fea505c71c88fa GIT binary patch literal 721 zcmV;?0xtcDP)@J~iXkC6yfvHo2u(4hfd6t8&!*FT zjSS7+$e*3&o5OuhO_d+arg4EgzS32-pAO^U<%1-K%sX*$W^MjwRAmNq3MX==-0#r6OpnoJ7EL+~Vy^+Fki zYC)2%df*_~jQhHn)fz?s0|MLHu&u%?8)0#*kIJ6s9$*a2Dq@o(f(b9;#>I6p>I{m= zzC=qLmtZHkFqW_qB-;r~OgbmWBxlv+^ZSmmi{0bxq>-DNBxLtQhv^aH{J!>wG1)$O z&vuh!Y!^1VlU!#|Ff(|dU6WNQi9YbV$sj}dc1i6Ilr{r6%JJsz00000NkvXXu0mjf D_El3r literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/869-mint-cream.json b/public/images/pokemon/shiny/869-mint-cream.json new file mode 100644 index 00000000000..aac46fcf4c1 --- /dev/null +++ b/public/images/pokemon/shiny/869-mint-cream.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-mint-cream.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 39, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:05eade73b3ac133b2b6bfabb37d329b4:51719e2b4400ad80a2715f69594d3317:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/shiny/869-mint-cream.png b/public/images/pokemon/shiny/869-mint-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..803686aed5d7af9acadf500808fea505c71c88fa GIT binary patch literal 721 zcmV;?0xtcDP)@J~iXkC6yfvHo2u(4hfd6t8&!*FT zjSS7+$e*3&o5OuhO_d+arg4EgzS32-pAO^U<%1-K%sX*$W^MjwRAmNq3MX==-0#r6OpnoJ7EL+~Vy^+Fki zYC)2%df*_~jQhHn)fz?s0|MLHu&u%?8)0#*kIJ6s9$*a2Dq@o(f(b9;#>I6p>I{m= zzC=qLmtZHkFqW_qB-;r~OgbmWBxlv+^ZSmmi{0bxq>-DNBxLtQhv^aH{J!>wG1)$O z&vuh!Y!^1VlU!#|Ff(|dU6WNQi9YbV$sj}dc1i6Ilr{r6%JJsz00000NkvXXu0mjf D_El3r literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/869-rainbow-swirl.json b/public/images/pokemon/shiny/869-rainbow-swirl.json new file mode 100644 index 00000000000..195e1077d76 --- /dev/null +++ b/public/images/pokemon/shiny/869-rainbow-swirl.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-rainbow-swirl.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 39, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:05eade73b3ac133b2b6bfabb37d329b4:51719e2b4400ad80a2715f69594d3317:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/shiny/869-rainbow-swirl.png b/public/images/pokemon/shiny/869-rainbow-swirl.png new file mode 100644 index 0000000000000000000000000000000000000000..803686aed5d7af9acadf500808fea505c71c88fa GIT binary patch literal 721 zcmV;?0xtcDP)@J~iXkC6yfvHo2u(4hfd6t8&!*FT zjSS7+$e*3&o5OuhO_d+arg4EgzS32-pAO^U<%1-K%sX*$W^MjwRAmNq3MX==-0#r6OpnoJ7EL+~Vy^+Fki zYC)2%df*_~jQhHn)fz?s0|MLHu&u%?8)0#*kIJ6s9$*a2Dq@o(f(b9;#>I6p>I{m= zzC=qLmtZHkFqW_qB-;r~OgbmWBxlv+^ZSmmi{0bxq>-DNBxLtQhv^aH{J!>wG1)$O z&vuh!Y!^1VlU!#|Ff(|dU6WNQi9YbV$sj}dc1i6Ilr{r6%JJsz00000NkvXXu0mjf D_El3r literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/869-ruby-cream.json b/public/images/pokemon/shiny/869-ruby-cream.json new file mode 100644 index 00000000000..1b2b9f59acc --- /dev/null +++ b/public/images/pokemon/shiny/869-ruby-cream.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-ruby-cream.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 39, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:05eade73b3ac133b2b6bfabb37d329b4:51719e2b4400ad80a2715f69594d3317:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/shiny/869-ruby-cream.png b/public/images/pokemon/shiny/869-ruby-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..803686aed5d7af9acadf500808fea505c71c88fa GIT binary patch literal 721 zcmV;?0xtcDP)@J~iXkC6yfvHo2u(4hfd6t8&!*FT zjSS7+$e*3&o5OuhO_d+arg4EgzS32-pAO^U<%1-K%sX*$W^MjwRAmNq3MX==-0#r6OpnoJ7EL+~Vy^+Fki zYC)2%df*_~jQhHn)fz?s0|MLHu&u%?8)0#*kIJ6s9$*a2Dq@o(f(b9;#>I6p>I{m= zzC=qLmtZHkFqW_qB-;r~OgbmWBxlv+^ZSmmi{0bxq>-DNBxLtQhv^aH{J!>wG1)$O z&vuh!Y!^1VlU!#|Ff(|dU6WNQi9YbV$sj}dc1i6Ilr{r6%JJsz00000NkvXXu0mjf D_El3r literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/869-ruby-swirl.json b/public/images/pokemon/shiny/869-ruby-swirl.json new file mode 100644 index 00000000000..384a8d9f362 --- /dev/null +++ b/public/images/pokemon/shiny/869-ruby-swirl.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-ruby-swirl.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 39, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:05eade73b3ac133b2b6bfabb37d329b4:51719e2b4400ad80a2715f69594d3317:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/shiny/869-ruby-swirl.png b/public/images/pokemon/shiny/869-ruby-swirl.png new file mode 100644 index 0000000000000000000000000000000000000000..803686aed5d7af9acadf500808fea505c71c88fa GIT binary patch literal 721 zcmV;?0xtcDP)@J~iXkC6yfvHo2u(4hfd6t8&!*FT zjSS7+$e*3&o5OuhO_d+arg4EgzS32-pAO^U<%1-K%sX*$W^MjwRAmNq3MX==-0#r6OpnoJ7EL+~Vy^+Fki zYC)2%df*_~jQhHn)fz?s0|MLHu&u%?8)0#*kIJ6s9$*a2Dq@o(f(b9;#>I6p>I{m= zzC=qLmtZHkFqW_qB-;r~OgbmWBxlv+^ZSmmi{0bxq>-DNBxLtQhv^aH{J!>wG1)$O z&vuh!Y!^1VlU!#|Ff(|dU6WNQi9YbV$sj}dc1i6Ilr{r6%JJsz00000NkvXXu0mjf D_El3r literal 0 HcmV?d00001 diff --git a/public/images/pokemon/shiny/869-salted-cream.json b/public/images/pokemon/shiny/869-salted-cream.json new file mode 100644 index 00000000000..b3e92c77f8c --- /dev/null +++ b/public/images/pokemon/shiny/869-salted-cream.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "869-salted-cream.png", + "format": "RGBA8888", + "size": { + "w": 55, + "h": 55 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 39, + "h": 55 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 39, + "h": 55 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:05eade73b3ac133b2b6bfabb37d329b4:51719e2b4400ad80a2715f69594d3317:18cea997ef38e1531596f96f8db4f25e$" + } +} diff --git a/public/images/pokemon/shiny/869-salted-cream.png b/public/images/pokemon/shiny/869-salted-cream.png new file mode 100644 index 0000000000000000000000000000000000000000..803686aed5d7af9acadf500808fea505c71c88fa GIT binary patch literal 721 zcmV;?0xtcDP)@J~iXkC6yfvHo2u(4hfd6t8&!*FT zjSS7+$e*3&o5OuhO_d+arg4EgzS32-pAO^U<%1-K%sX*$W^MjwRAmNq3MX==-0#r6OpnoJ7EL+~Vy^+Fki zYC)2%df*_~jQhHn)fz?s0|MLHu&u%?8)0#*kIJ6s9$*a2Dq@o(f(b9;#>I6p>I{m= zzC=qLmtZHkFqW_qB-;r~OgbmWBxlv+^ZSmmi{0bxq>-DNBxLtQhv^aH{J!>wG1)$O z&vuh!Y!^1VlU!#|Ff(|dU6WNQi9YbV$sj}dc1i6Ilr{r6%JJsz00000NkvXXu0mjf D_El3r literal 0 HcmV?d00001 diff --git a/public/images/pokemon_icons_8.json b/public/images/pokemon_icons_8.json index 20f95930bed..430d114ff91 100644 --- a/public/images/pokemon_icons_8.json +++ b/public/images/pokemon_icons_8.json @@ -4,8 +4,8 @@ "image": "pokemon_icons_8.png", "format": "RGBA8888", "size": { - "w": 251, - "h": 796 + "w": 254, + "h": 798 }, "scale": 1, "frames": [ @@ -282,27 +282,6 @@ "h": 24 } }, - { - "filename": "834", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 34, - "h": 23 - }, - "frame": { - "x": 217, - "y": 0, - "w": 34, - "h": 23 - } - }, { "filename": "815-gigantamax", "rotated": false, @@ -660,48 +639,6 @@ "h": 28 } }, - { - "filename": "834s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 34, - "h": 23 - }, - "frame": { - "x": 217, - "y": 23, - "w": 34, - "h": 23 - } - }, - { - "filename": "4083s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 38, - "h": 24 - }, - "frame": { - "x": 179, - "y": 24, - "w": 38, - "h": 24 - } - }, { "filename": "905-incarnate", "rotated": false, @@ -849,6 +786,27 @@ "h": 27 } }, + { + "filename": "834", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 34, + "h": 23 + }, + "frame": { + "x": 217, + "y": 0, + "w": 34, + "h": 23 + } + }, { "filename": "864", "rotated": false, @@ -871,7 +829,7 @@ } }, { - "filename": "864s", + "filename": "4083s", "rotated": false, "trimmed": true, "sourceSize": { @@ -879,20 +837,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 30, - "h": 27 + "x": 1, + "y": 3, + "w": 38, + "h": 24 }, "frame": { "x": 34, "y": 117, - "w": 30, - "h": 27 + "w": 38, + "h": 24 } }, { - "filename": "879-gigantamax", + "filename": "834s", "rotated": false, "trimmed": true, "sourceSize": { @@ -900,457 +858,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 27, - "h": 30 - }, - "frame": { - "x": 31, - "y": 144, - "w": 27, - "h": 30 - } - }, - { - "filename": "879s-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 27, - "h": 30 - }, - "frame": { - "x": 31, - "y": 174, - "w": 27, - "h": 30 - } - }, - { - "filename": "884-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 27, - "h": 30 - }, - "frame": { - "x": 30, - "y": 204, - "w": 27, - "h": 30 - } - }, - { - "filename": "884s-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 27, - "h": 30 - }, - "frame": { - "x": 30, - "y": 234, - "w": 27, - "h": 30 - } - }, - { - "filename": "861-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 30, - "y": 264, - "w": 26, - "h": 30 - } - }, - { - "filename": "861s-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 30, - "y": 294, - "w": 26, - "h": 30 - } - }, - { - "filename": "898-shadow", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 30, - "y": 324, - "w": 26, - "h": 30 - } - }, - { - "filename": "898s-shadow", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 26, - "h": 30 - }, - "frame": { - "x": 30, - "y": 354, - "w": 26, - "h": 30 - } - }, - { - "filename": "839-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 25, - "h": 30 - }, - "frame": { - "x": 30, - "y": 384, - "w": 25, - "h": 30 - } - }, - { - "filename": "839s-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 25, - "h": 30 - }, - "frame": { - "x": 30, - "y": 414, - "w": 25, - "h": 30 - } - }, - { - "filename": "4555", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 25, - "h": 30 - }, - "frame": { - "x": 29, - "y": 444, - "w": 25, - "h": 30 - } - }, - { - "filename": "4555s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 25, - "h": 30 - }, - "frame": { - "x": 29, - "y": 474, - "w": 25, - "h": 30 - } - }, - { - "filename": "898-ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 24, - "h": 29 - }, - "frame": { - "x": 29, - "y": 504, - "w": 24, - "h": 29 - } - }, - { - "filename": "898s-ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 24, - "h": 29 - }, - "frame": { - "x": 29, - "y": 533, - "w": 24, - "h": 29 - } - }, - { - "filename": "841-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 21, - "h": 30 - }, - "frame": { - "x": 32, - "y": 562, - "w": 21, - "h": 30 - } - }, - { - "filename": "841s-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 21, - "h": 30 - }, - "frame": { - "x": 32, - "y": 592, - "w": 21, - "h": 30 - } - }, - { - "filename": "842-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 21, - "h": 30 - }, - "frame": { - "x": 32, - "y": 622, - "w": 21, - "h": 30 - } - }, - { - "filename": "845", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 24, - "h": 26 - }, - "frame": { - "x": 32, - "y": 652, - "w": 24, - "h": 26 - } - }, - { - "filename": "892-gigantamax-single", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 23, - "h": 29 - }, - "frame": { - "x": 33, - "y": 678, - "w": 23, - "h": 29 - } - }, - { - "filename": "4110", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 29, - "h": 28 - }, - "frame": { - "x": 31, - "y": 707, - "w": 29, - "h": 28 - } - }, - { - "filename": "826-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, + "x": 3, "y": 3, - "w": 30, - "h": 25 + "w": 34, + "h": 23 }, "frame": { - "x": 31, - "y": 735, - "w": 30, - "h": 25 - } - }, - { - "filename": "834-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 29, - "h": 27 - }, - "frame": { - "x": 30, - "y": 760, - "w": 29, - "h": 27 + "x": 179, + "y": 24, + "w": 34, + "h": 23 } }, { @@ -1369,7 +886,7 @@ }, "frame": { "x": 178, - "y": 48, + "y": 47, "w": 33, "h": 24 } @@ -1411,7 +928,7 @@ }, "frame": { "x": 178, - "y": 72, + "y": 71, "w": 33, "h": 24 } @@ -1438,7 +955,7 @@ } }, { - "filename": "4110s", + "filename": "864s", "rotated": false, "trimmed": true, "sourceSize": { @@ -1448,14 +965,14 @@ "spriteSourceSize": { "x": 5, "y": 1, - "w": 29, - "h": 28 + "w": 30, + "h": 27 }, "frame": { "x": 70, "y": 80, - "w": 29, - "h": 28 + "w": 30, + "h": 27 } }, { @@ -1480,7 +997,7 @@ } }, { - "filename": "834s-gigantamax", + "filename": "887", "rotated": false, "trimmed": true, "sourceSize": { @@ -1489,14 +1006,329 @@ }, "spriteSourceSize": { "x": 5, - "y": 1, - "w": 29, - "h": 27 + "y": 2, + "w": 30, + "h": 26 + }, + "frame": { + "x": 100, + "y": 81, + "w": 30, + "h": 26 + } + }, + { + "filename": "879-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 27, + "h": 30 + }, + "frame": { + "x": 72, + "y": 107, + "w": 27, + "h": 30 + } + }, + { + "filename": "879s-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 27, + "h": 30 }, "frame": { "x": 99, + "y": 107, + "w": 27, + "h": 30 + } + }, + { + "filename": "813", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 2, + "w": 17, + "h": 26 + }, + "frame": { + "x": 130, "y": 81, - "w": 29, + "w": 17, + "h": 26 + } + }, + { + "filename": "870", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 4, + "y": 3, + "w": 31, + "h": 23 + }, + "frame": { + "x": 147, + "y": 80, + "w": 31, + "h": 23 + } + }, + { + "filename": "839-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 25, + "h": 30 + }, + "frame": { + "x": 126, + "y": 107, + "w": 25, + "h": 30 + } + }, + { + "filename": "884-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 27, + "h": 30 + }, + "frame": { + "x": 151, + "y": 103, + "w": 27, + "h": 30 + } + }, + { + "filename": "884s-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 27, + "h": 30 + }, + "frame": { + "x": 178, + "y": 95, + "w": 27, + "h": 30 + } + }, + { + "filename": "839s-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 25, + "h": 30 + }, + "frame": { + "x": 205, + "y": 95, + "w": 25, + "h": 30 + } + }, + { + "filename": "898-ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 0, + "w": 24, + "h": 29 + }, + "frame": { + "x": 230, + "y": 23, + "w": 24, + "h": 29 + } + }, + { + "filename": "869-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 0, + "w": 17, + "h": 30 + }, + "frame": { + "x": 213, + "y": 24, + "w": 17, + "h": 30 + } + }, + { + "filename": "898s-ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 0, + "w": 24, + "h": 29 + }, + "frame": { + "x": 230, + "y": 52, + "w": 24, + "h": 29 + } + }, + { + "filename": "876", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 24 + }, + "frame": { + "x": 211, + "y": 54, + "w": 19, + "h": 24 + } + }, + { + "filename": "6157", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 1, + "w": 24, + "h": 27 + }, + "frame": { + "x": 230, + "y": 81, + "w": 24, + "h": 27 + } + }, + { + "filename": "852", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 19, + "h": 17 + }, + "frame": { + "x": 211, + "y": 78, + "w": 19, + "h": 17 + } + }, + { + "filename": "6157s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 1, + "w": 24, + "h": 27 + }, + "frame": { + "x": 230, + "y": 108, + "w": 24, "h": 27 } }, @@ -1515,14 +1347,14 @@ "h": 24 }, "frame": { - "x": 70, - "y": 108, + "x": 178, + "y": 125, "w": 32, "h": 24 } }, { - "filename": "812", + "filename": "863", "rotated": false, "trimmed": true, "sourceSize": { @@ -1530,251 +1362,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 7, + "x": 10, "y": 3, - "w": 26, + "w": 20, "h": 24 }, "frame": { - "x": 102, - "y": 108, - "w": 26, + "x": 210, + "y": 125, + "w": 20, "h": 24 } }, { - "filename": "842s-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 0, - "w": 21, - "h": 30 - }, - "frame": { - "x": 128, - "y": 81, - "w": 21, - "h": 30 - } - }, - { - "filename": "845-gulping", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 29, - "h": 27 - }, - "frame": { - "x": 149, - "y": 80, - "w": 29, - "h": 27 - } - }, - { - "filename": "811", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 22, - "h": 24 - }, - "frame": { - "x": 128, - "y": 111, - "w": 22, - "h": 24 - } - }, - { - "filename": "845s-gulping", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 29, - "h": 27 - }, - "frame": { - "x": 150, - "y": 107, - "w": 29, - "h": 27 - } - }, - { - "filename": "887", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 30, - "h": 26 - }, - "frame": { - "x": 179, - "y": 96, - "w": 30, - "h": 26 - } - }, - { - "filename": "826s-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 30, - "h": 25 - }, - "frame": { - "x": 179, - "y": 122, - "w": 30, - "h": 25 - } - }, - { - "filename": "870", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 31, - "h": 23 - }, - "frame": { - "x": 64, - "y": 132, - "w": 31, - "h": 23 - } - }, - { - "filename": "870s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 31, - "h": 23 - }, - "frame": { - "x": 95, - "y": 132, - "w": 31, - "h": 23 - } - }, - { - "filename": "887s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 30, - "h": 26 - }, - "frame": { - "x": 58, - "y": 155, - "w": 30, - "h": 26 - } - }, - { - "filename": "895", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 28, - "h": 26 - }, - "frame": { - "x": 88, - "y": 155, - "w": 28, - "h": 26 - } - }, - { - "filename": "6503", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 31, - "h": 23 - }, - "frame": { - "x": 58, - "y": 181, - "w": 31, - "h": 23 - } - }, - { - "filename": "905-therian", + "filename": "845", "rotated": false, "trimmed": true, "sourceSize": { @@ -1783,36 +1384,15 @@ }, "spriteSourceSize": { "x": 8, - "y": 1, - "w": 28, - "h": 27 + "y": 2, + "w": 24, + "h": 26 }, "frame": { - "x": 57, - "y": 204, - "w": 28, - "h": 27 - } - }, - { - "filename": "905s-therian", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 1, - "w": 28, - "h": 27 - }, - "frame": { - "x": 57, - "y": 231, - "w": 28, - "h": 27 + "x": 230, + "y": 135, + "w": 24, + "h": 26 } }, { @@ -1830,14 +1410,14 @@ "h": 24 }, "frame": { - "x": 89, - "y": 181, + "x": 151, + "y": 133, "w": 27, "h": 24 } }, { - "filename": "6059", + "filename": "870s", "rotated": false, "trimmed": true, "sourceSize": { @@ -1845,146 +1425,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 28, - "h": 27 - }, - "frame": { - "x": 85, - "y": 205, - "w": 28, - "h": 27 - } - }, - { - "filename": "895s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 28, - "h": 26 - }, - "frame": { - "x": 85, - "y": 232, - "w": 28, - "h": 26 - } - }, - { - "filename": "812s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, + "x": 4, "y": 3, - "w": 26, - "h": 24 - }, - "frame": { - "x": 126, - "y": 135, - "w": 26, - "h": 24 - } - }, - { - "filename": "823s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 27, - "h": 24 - }, - "frame": { - "x": 152, - "y": 134, - "w": 27, - "h": 24 - } - }, - { - "filename": "6059s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 28, - "h": 27 - }, - "frame": { - "x": 116, - "y": 159, - "w": 28, - "h": 27 - } - }, - { - "filename": "888", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 28, - "h": 23 - }, - "frame": { - "x": 116, - "y": 186, - "w": 28, - "h": 23 - } - }, - { - "filename": "6503s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, "w": 31, "h": 23 }, "frame": { - "x": 113, - "y": 209, + "x": 178, + "y": 149, "w": 31, "h": 23 } }, { - "filename": "894", + "filename": "814", "rotated": false, "trimmed": true, "sourceSize": { @@ -1992,20 +1446,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 5, + "x": 9, "y": 3, - "w": 30, + "w": 21, "h": 23 }, "frame": { - "x": 113, - "y": 232, - "w": 30, + "x": 209, + "y": 149, + "w": 21, "h": 23 } }, { - "filename": "894s", + "filename": "845s", "rotated": false, "trimmed": true, "sourceSize": { @@ -2013,100 +1467,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 30, - "h": 23 + "x": 8, + "y": 2, + "w": 24, + "h": 26 }, "frame": { - "x": 179, - "y": 147, - "w": 30, - "h": 23 - } - }, - { - "filename": "828", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 27, - "h": 24 - }, - "frame": { - "x": 152, - "y": 158, - "w": 27, - "h": 24 - } - }, - { - "filename": "889", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 26, - "h": 27 - }, - "frame": { - "x": 144, - "y": 182, - "w": 26, - "h": 27 - } - }, - { - "filename": "828s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 27, - "h": 24 - }, - "frame": { - "x": 144, - "y": 209, - "w": 27, - "h": 24 - } - }, - { - "filename": "888s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 28, - "h": 23 - }, - "frame": { - "x": 143, - "y": 233, - "w": 28, - "h": 23 + "x": 230, + "y": 161, + "w": 24, + "h": 26 } }, { @@ -2124,8 +1494,8 @@ "h": 22 }, "frame": { - "x": 179, - "y": 170, + "x": 72, + "y": 137, "w": 31, "h": 22 } @@ -2145,14 +1515,287 @@ "h": 22 }, "frame": { - "x": 57, - "y": 258, + "x": 103, + "y": 137, "w": 31, "h": 22 } }, { - "filename": "889s", + "filename": "813s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 2, + "w": 17, + "h": 26 + }, + "frame": { + "x": 134, + "y": 137, + "w": 17, + "h": 26 + } + }, + { + "filename": "823s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 27, + "h": 24 + }, + "frame": { + "x": 151, + "y": 157, + "w": 27, + "h": 24 + } + }, + { + "filename": "6503", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 31, + "h": 23 + }, + "frame": { + "x": 178, + "y": 172, + "w": 31, + "h": 23 + } + }, + { + "filename": "814s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 21, + "h": 23 + }, + "frame": { + "x": 209, + "y": 172, + "w": 21, + "h": 23 + } + }, + { + "filename": "892-gigantamax-rapid", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 24, + "h": 26 + }, + "frame": { + "x": 230, + "y": 187, + "w": 24, + "h": 26 + } + }, + { + "filename": "6503s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 31, + "h": 23 + }, + "frame": { + "x": 34, + "y": 141, + "w": 31, + "h": 23 + } + }, + { + "filename": "4110", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 29, + "h": 28 + }, + "frame": { + "x": 31, + "y": 164, + "w": 29, + "h": 28 + } + }, + { + "filename": "826-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 3, + "w": 30, + "h": 25 + }, + "frame": { + "x": 31, + "y": 192, + "w": 30, + "h": 25 + } + }, + { + "filename": "4110s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 29, + "h": 28 + }, + "frame": { + "x": 30, + "y": 217, + "w": 29, + "h": 28 + } + }, + { + "filename": "834-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 29, + "h": 27 + }, + "frame": { + "x": 30, + "y": 245, + "w": 29, + "h": 27 + } + }, + { + "filename": "834s-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 29, + "h": 27 + }, + "frame": { + "x": 30, + "y": 272, + "w": 29, + "h": 27 + } + }, + { + "filename": "845-gulping", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 29, + "h": 27 + }, + "frame": { + "x": 30, + "y": 299, + "w": 29, + "h": 27 + } + }, + { + "filename": "845s-gulping", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 29, + "h": 27 + }, + "frame": { + "x": 30, + "y": 326, + "w": 29, + "h": 27 + } + }, + { + "filename": "861-gigantamax", "rotated": false, "trimmed": true, "sourceSize": { @@ -2161,15 +1804,57 @@ }, "spriteSourceSize": { "x": 7, - "y": 1, + "y": 0, "w": 26, - "h": 27 + "h": 30 }, "frame": { - "x": 56, - "y": 280, + "x": 30, + "y": 353, "w": 26, - "h": 27 + "h": 30 + } + }, + { + "filename": "861s-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 30, + "y": 383, + "w": 26, + "h": 30 + } + }, + { + "filename": "898-shadow", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 30, + "y": 413, + "w": 26, + "h": 30 } }, { @@ -2187,14 +1872,14 @@ "h": 28 }, "frame": { - "x": 56, - "y": 307, + "x": 60, + "y": 164, "w": 25, "h": 28 } }, { - "filename": "4555s-zen", + "filename": "887s", "rotated": false, "trimmed": true, "sourceSize": { @@ -2202,16 +1887,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 25, - "h": 28 + "x": 5, + "y": 2, + "w": 30, + "h": 26 }, "frame": { - "x": 56, - "y": 335, - "w": 25, - "h": 28 + "x": 85, + "y": 159, + "w": 30, + "h": 26 } }, { @@ -2229,14 +1914,182 @@ "h": 27 }, "frame": { - "x": 88, - "y": 258, + "x": 61, + "y": 192, "w": 25, "h": 27 } }, { - "filename": "904", + "filename": "898s-shadow", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 26, + "h": 30 + }, + "frame": { + "x": 59, + "y": 219, + "w": 26, + "h": 30 + } + }, + { + "filename": "4555", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 25, + "h": 30 + }, + "frame": { + "x": 59, + "y": 249, + "w": 25, + "h": 30 + } + }, + { + "filename": "4555s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 0, + "w": 25, + "h": 30 + }, + "frame": { + "x": 59, + "y": 279, + "w": 25, + "h": 30 + } + }, + { + "filename": "4555s-zen", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 25, + "h": 28 + }, + "frame": { + "x": 59, + "y": 309, + "w": 25, + "h": 28 + } + }, + { + "filename": "905-therian", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 1, + "w": 28, + "h": 27 + }, + "frame": { + "x": 86, + "y": 185, + "w": 28, + "h": 27 + } + }, + { + "filename": "876s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 24 + }, + "frame": { + "x": 115, + "y": 159, + "w": 19, + "h": 24 + } + }, + { + "filename": "859", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 17, + "h": 20 + }, + "frame": { + "x": 134, + "y": 163, + "w": 17, + "h": 20 + } + }, + { + "filename": "828", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 27, + "h": 24 + }, + "frame": { + "x": 151, + "y": 181, + "w": 27, + "h": 24 + } + }, + { + "filename": "812", "rotated": false, "trimmed": true, "sourceSize": { @@ -2246,18 +2099,249 @@ "spriteSourceSize": { "x": 7, "y": 3, + "w": 26, + "h": 24 + }, + "frame": { + "x": 59, + "y": 337, + "w": 26, + "h": 24 + } + }, + { + "filename": "905s-therian", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 1, "w": 28, + "h": 27 + }, + "frame": { + "x": 56, + "y": 361, + "w": 28, + "h": 27 + } + }, + { + "filename": "6059", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 2, + "w": 28, + "h": 27 + }, + "frame": { + "x": 56, + "y": 388, + "w": 28, + "h": 27 + } + }, + { + "filename": "6059s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 2, + "w": 28, + "h": 27 + }, + "frame": { + "x": 56, + "y": 415, + "w": 28, + "h": 27 + } + }, + { + "filename": "826s-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 3, + "w": 30, "h": 25 }, "frame": { - "x": 113, - "y": 255, - "w": 28, + "x": 178, + "y": 195, + "w": 30, "h": 25 } }, { - "filename": "904s", + "filename": "818", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 1, + "w": 22, + "h": 27 + }, + "frame": { + "x": 208, + "y": 195, + "w": 22, + "h": 27 + } + }, + { + "filename": "892s-gigantamax-rapid", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 24, + "h": 26 + }, + "frame": { + "x": 230, + "y": 213, + "w": 24, + "h": 26 + } + }, + { + "filename": "888", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 28, + "h": 23 + }, + "frame": { + "x": 86, + "y": 212, + "w": 28, + "h": 23 + } + }, + { + "filename": "894", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 5, + "y": 3, + "w": 30, + "h": 23 + }, + "frame": { + "x": 85, + "y": 235, + "w": 30, + "h": 23 + } + }, + { + "filename": "895", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 2, + "w": 28, + "h": 26 + }, + "frame": { + "x": 84, + "y": 258, + "w": 28, + "h": 26 + } + }, + { + "filename": "895s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 2, + "w": 28, + "h": 26 + }, + "frame": { + "x": 84, + "y": 284, + "w": 28, + "h": 26 + } + }, + { + "filename": "889", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 26, + "h": 27 + }, + "frame": { + "x": 84, + "y": 310, + "w": 26, + "h": 27 + } + }, + { + "filename": "812s", "rotated": false, "trimmed": true, "sourceSize": { @@ -2267,14 +2351,35 @@ "spriteSourceSize": { "x": 7, "y": 3, - "w": 28, - "h": 25 + "w": 26, + "h": 24 }, "frame": { - "x": 141, - "y": 256, - "w": 28, - "h": 25 + "x": 85, + "y": 337, + "w": 26, + "h": 24 + } + }, + { + "filename": "889s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 26, + "h": 27 + }, + "frame": { + "x": 84, + "y": 361, + "w": 26, + "h": 27 } }, { @@ -2292,8 +2397,8 @@ "h": 27 }, "frame": { - "x": 56, - "y": 363, + "x": 84, + "y": 388, "w": 25, "h": 27 } @@ -2313,56 +2418,14 @@ "h": 27 }, "frame": { - "x": 55, - "y": 390, + "x": 84, + "y": 415, "w": 25, "h": 27 } }, { - "filename": "862s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 25, - "h": 27 - }, - "frame": { - "x": 55, - "y": 417, - "w": 25, - "h": 27 - } - }, - { - "filename": "892s-gigantamax-single", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 23, - "h": 29 - }, - "frame": { - "x": 54, - "y": 444, - "w": 23, - "h": 29 - } - }, - { - "filename": "6157", + "filename": "841-gigantamax", "rotated": false, "trimmed": true, "sourceSize": { @@ -2371,124 +2434,19 @@ }, "spriteSourceSize": { "x": 9, - "y": 1, - "w": 24, - "h": 27 - }, - "frame": { - "x": 54, - "y": 473, - "w": 24, - "h": 27 - } - }, - { - "filename": "901", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 28, - "h": 23 - }, - "frame": { - "x": 82, - "y": 285, - "w": 28, - "h": 23 - } - }, - { - "filename": "841", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 27, - "h": 24 - }, - "frame": { - "x": 81, - "y": 308, - "w": 27, - "h": 24 - } - }, - { - "filename": "841s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 27, - "h": 24 - }, - "frame": { - "x": 81, - "y": 332, - "w": 27, - "h": 24 - } - }, - { - "filename": "842", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 81, - "y": 356, - "w": 26, - "h": 25 - } - }, - { - "filename": "869-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, "y": 0, - "w": 17, + "w": 21, "h": 30 }, "frame": { - "x": 211, - "y": 48, - "w": 17, + "x": 112, + "y": 258, + "w": 21, "h": 30 } }, { - "filename": "892", + "filename": "811", "rotated": false, "trimmed": true, "sourceSize": { @@ -2496,270 +2454,18 @@ "h": 30 }, "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 23, - "h": 25 - }, - "frame": { - "x": 228, - "y": 46, - "w": 23, - "h": 25 - } - }, - { - "filename": "892s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 23, - "h": 25 - }, - "frame": { - "x": 228, - "y": 71, - "w": 23, - "h": 25 - } - }, - { - "filename": "813", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 17, - "h": 26 - }, - "frame": { - "x": 211, - "y": 78, - "w": 17, - "h": 26 - } - }, - { - "filename": "820", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, + "x": 9, "y": 3, - "w": 23, + "w": 22, "h": 24 }, "frame": { - "x": 228, - "y": 96, - "w": 23, + "x": 112, + "y": 288, + "w": 22, "h": 24 } }, - { - "filename": "876", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 19, - "h": 24 - }, - "frame": { - "x": 209, - "y": 104, - "w": 19, - "h": 24 - } - }, - { - "filename": "820s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 23, - "h": 24 - }, - "frame": { - "x": 228, - "y": 120, - "w": 23, - "h": 24 - } - }, - { - "filename": "876s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 19, - "h": 24 - }, - "frame": { - "x": 209, - "y": 128, - "w": 19, - "h": 24 - } - }, - { - "filename": "866", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 23, - "h": 24 - }, - "frame": { - "x": 228, - "y": 144, - "w": 23, - "h": 24 - } - }, - { - "filename": "852", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 19, - "h": 17 - }, - "frame": { - "x": 209, - "y": 152, - "w": 19, - "h": 17 - } - }, - { - "filename": "866s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 23, - "h": 24 - }, - "frame": { - "x": 228, - "y": 168, - "w": 23, - "h": 24 - } - }, - { - "filename": "881", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 3, - "w": 18, - "h": 23 - }, - "frame": { - "x": 210, - "y": 169, - "w": 18, - "h": 23 - } - }, - { - "filename": "842s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 81, - "y": 381, - "w": 26, - "h": 25 - } - }, - { - "filename": "861", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 25, - "h": 26 - }, - "frame": { - "x": 80, - "y": 406, - "w": 25, - "h": 26 - } - }, { "filename": "839", "rotated": false, @@ -2775,96 +2481,12 @@ "h": 25 }, "frame": { - "x": 80, - "y": 432, + "x": 110, + "y": 312, "w": 25, "h": 25 } }, - { - "filename": "847", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 27, - "h": 16 - }, - "frame": { - "x": 77, - "y": 457, - "w": 27, - "h": 16 - } - }, - { - "filename": "861s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 25, - "h": 26 - }, - "frame": { - "x": 78, - "y": 473, - "w": 25, - "h": 26 - } - }, - { - "filename": "847s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 27, - "h": 16 - }, - "frame": { - "x": 170, - "y": 192, - "w": 27, - "h": 16 - } - }, - { - "filename": "6157s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 24, - "h": 27 - }, - "frame": { - "x": 171, - "y": 208, - "w": 24, - "h": 27 - } - }, { "filename": "817", "rotated": false, @@ -2880,14 +2502,14 @@ "h": 24 }, "frame": { - "x": 171, - "y": 235, + "x": 111, + "y": 337, "w": 24, "h": 24 } }, { - "filename": "880", + "filename": "862s", "rotated": false, "trimmed": true, "sourceSize": { @@ -2896,271 +2518,19 @@ }, "spriteSourceSize": { "x": 7, - "y": 4, - "w": 26, - "h": 22 - }, - "frame": { - "x": 169, - "y": 259, - "w": 26, - "h": 22 - } - }, - { - "filename": "901s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 28, - "h": 23 - }, - "frame": { - "x": 197, - "y": 192, - "w": 28, - "h": 23 - } - }, - { - "filename": "6706", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 26, - "h": 25 - }, - "frame": { - "x": 225, - "y": 192, - "w": 26, - "h": 25 - } - }, - { - "filename": "4145", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 28, - "h": 23 - }, - "frame": { - "x": 195, - "y": 215, - "w": 28, - "h": 23 - } - }, - { - "filename": "4145s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 28, - "h": 23 - }, - "frame": { - "x": 223, - "y": 217, - "w": 28, - "h": 23 - } - }, - { - "filename": "6706s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 26, - "h": 25 - }, - "frame": { - "x": 195, - "y": 238, - "w": 26, - "h": 25 - } - }, - { - "filename": "4078", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 27, - "h": 23 - }, - "frame": { - "x": 221, - "y": 240, - "w": 27, - "h": 23 - } - }, - { - "filename": "4146", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 28, - "h": 18 - }, - "frame": { - "x": 195, - "y": 263, - "w": 28, - "h": 18 - } - }, - { - "filename": "4146s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 28, - "h": 18 - }, - "frame": { - "x": 223, - "y": 263, - "w": 28, - "h": 18 - } - }, - { - "filename": "869s-gigantamax", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 0, - "w": 17, - "h": 30 - }, - "frame": { - "x": 108, - "y": 308, - "w": 17, - "h": 30 - } - }, - { - "filename": "810", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 19, - "h": 23 + "y": 1, + "w": 25, + "h": 27 }, "frame": { "x": 110, - "y": 285, - "w": 19, - "h": 23 - } - }, - { - "filename": "810s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 19, - "h": 23 - }, - "frame": { - "x": 108, - "y": 338, - "w": 19, - "h": 23 - } - }, - { - "filename": "818", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 22, - "h": 27 - }, - "frame": { - "x": 107, "y": 361, - "w": 22, + "w": 25, "h": 27 } }, { - "filename": "811s", + "filename": "892-gigantamax-single", "rotated": false, "trimmed": true, "sourceSize": { @@ -3168,58 +2538,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 22, - "h": 24 + "x": 8, + "y": 0, + "w": 23, + "h": 29 }, "frame": { - "x": 107, + "x": 109, "y": 388, - "w": 22, - "h": 24 - } - }, - { - "filename": "845s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 24, - "h": 26 - }, - "frame": { - "x": 105, - "y": 412, - "w": 24, - "h": 26 - } - }, - { - "filename": "817s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 24, - "h": 24 - }, - "frame": { - "x": 105, - "y": 438, - "w": 24, - "h": 24 + "w": 23, + "h": 29 } }, { @@ -3237,14 +2565,14 @@ "h": 25 }, "frame": { - "x": 104, - "y": 462, + "x": 109, + "y": 417, "w": 25, "h": 25 } }, { - "filename": "880s", + "filename": "881", "rotated": false, "trimmed": true, "sourceSize": { @@ -3252,20 +2580,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 26, - "h": 22 + "x": 11, + "y": 3, + "w": 18, + "h": 23 }, "frame": { - "x": 103, - "y": 487, - "w": 26, - "h": 22 + "x": 133, + "y": 183, + "w": 18, + "h": 23 } }, { - "filename": "844", + "filename": "810", "rotated": false, "trimmed": true, "sourceSize": { @@ -3273,79 +2601,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 25, - "h": 19 + "x": 10, + "y": 3, + "w": 19, + "h": 23 }, "frame": { - "x": 78, - "y": 499, - "w": 25, - "h": 19 - } - }, - { - "filename": "827", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 24, - "h": 21 - }, - "frame": { - "x": 54, - "y": 500, - "w": 24, - "h": 21 - } - }, - { - "filename": "892-gigantamax-rapid", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 24, - "h": 26 - }, - "frame": { - "x": 53, - "y": 521, - "w": 24, - "h": 26 - } - }, - { - "filename": "892s-gigantamax-rapid", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 24, - "h": 26 - }, - "frame": { - "x": 53, - "y": 547, - "w": 24, - "h": 26 + "x": 114, + "y": 185, + "w": 19, + "h": 23 } }, { @@ -3363,35 +2628,14 @@ "h": 27 }, "frame": { - "x": 53, - "y": 573, + "x": 114, + "y": 208, "w": 22, "h": 27 } }, { - "filename": "899", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 22, - "h": 27 - }, - "frame": { - "x": 53, - "y": 600, - "w": 22, - "h": 27 - } - }, - { - "filename": "858", + "filename": "816", "rotated": false, "trimmed": true, "sourceSize": { @@ -3400,539 +2644,14 @@ }, "spriteSourceSize": { "x": 9, - "y": 2, + "y": 3, "w": 22, - "h": 25 + "h": 23 }, "frame": { - "x": 53, - "y": 627, + "x": 115, + "y": 235, "w": 22, - "h": 25 - } - }, - { - "filename": "899s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 22, - "h": 27 - }, - "frame": { - "x": 56, - "y": 652, - "w": 22, - "h": 27 - } - }, - { - "filename": "6724", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 1, - "w": 17, - "h": 28 - }, - "frame": { - "x": 56, - "y": 679, - "w": 17, - "h": 28 - } - }, - { - "filename": "6724s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 1, - "w": 17, - "h": 28 - }, - "frame": { - "x": 60, - "y": 707, - "w": 17, - "h": 28 - } - }, - { - "filename": "813s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 2, - "w": 17, - "h": 26 - }, - "frame": { - "x": 61, - "y": 735, - "w": 17, - "h": 26 - } - }, - { - "filename": "903", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 1, - "w": 21, - "h": 27 - }, - "frame": { - "x": 59, - "y": 761, - "w": 21, - "h": 27 - } - }, - { - "filename": "886", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 26, - "h": 24 - }, - "frame": { - "x": 103, - "y": 509, - "w": 26, - "h": 24 - } - }, - { - "filename": "844s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 25, - "h": 19 - }, - "frame": { - "x": 78, - "y": 518, - "w": 25, - "h": 19 - } - }, - { - "filename": "886s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 26, - "h": 24 - }, - "frame": { - "x": 77, - "y": 537, - "w": 26, - "h": 24 - } - }, - { - "filename": "897", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 26, - "h": 24 - }, - "frame": { - "x": 103, - "y": 533, - "w": 26, - "h": 24 - } - }, - { - "filename": "892-rapid-strike", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 26, - "h": 22 - }, - "frame": { - "x": 77, - "y": 561, - "w": 26, - "h": 22 - } - }, - { - "filename": "897s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 26, - "h": 24 - }, - "frame": { - "x": 103, - "y": 557, - "w": 26, - "h": 24 - } - }, - { - "filename": "900", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 25, - "h": 25 - }, - "frame": { - "x": 75, - "y": 583, - "w": 25, - "h": 25 - } - }, - { - "filename": "900s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 25, - "h": 25 - }, - "frame": { - "x": 75, - "y": 608, - "w": 25, - "h": 25 - } - }, - { - "filename": "6628", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 10, - "w": 25, - "h": 19 - }, - "frame": { - "x": 75, - "y": 633, - "w": 25, - "h": 19 - } - }, - { - "filename": "903s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 1, - "w": 21, - "h": 27 - }, - "frame": { - "x": 78, - "y": 652, - "w": 21, - "h": 27 - } - }, - { - "filename": "4078s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 27, - "h": 23 - }, - "frame": { - "x": 73, - "y": 679, - "w": 27, - "h": 23 - } - }, - { - "filename": "858s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 22, - "h": 25 - }, - "frame": { - "x": 77, - "y": 702, - "w": 22, - "h": 25 - } - }, - { - "filename": "4199", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 1, - "w": 20, - "h": 27 - }, - "frame": { - "x": 78, - "y": 727, - "w": 20, - "h": 27 - } - }, - { - "filename": "4199s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 1, - "w": 20, - "h": 27 - }, - "frame": { - "x": 80, - "y": 754, - "w": 20, - "h": 27 - } - }, - { - "filename": "846", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 25, - "h": 15 - }, - "frame": { - "x": 80, - "y": 781, - "w": 25, - "h": 15 - } - }, - { - "filename": "6713", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 27, - "h": 23 - }, - "frame": { - "x": 129, - "y": 281, - "w": 27, - "h": 23 - } - }, - { - "filename": "6713s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 27, - "h": 23 - }, - "frame": { - "x": 156, - "y": 281, - "w": 27, - "h": 23 - } - }, - { - "filename": "879", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 25, - "h": 23 - }, - "frame": { - "x": 183, - "y": 281, - "w": 25, - "h": 23 - } - }, - { - "filename": "879s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 25, - "h": 23 - }, - "frame": { - "x": 208, - "y": 281, - "w": 25, - "h": 23 - } - }, - { - "filename": "881s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 3, - "w": 18, - "h": 23 - }, - "frame": { - "x": 233, - "y": 281, - "w": 18, "h": 23 } }, @@ -3951,14 +2670,14 @@ "h": 29 }, "frame": { - "x": 125, - "y": 308, + "x": 136, + "y": 206, "w": 15, "h": 29 } }, { - "filename": "892s-rapid-strike", + "filename": "828s", "rotated": false, "trimmed": true, "sourceSize": { @@ -3966,20 +2685,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 26, - "h": 22 + "x": 6, + "y": 3, + "w": 27, + "h": 24 }, "frame": { - "x": 140, - "y": 304, - "w": 26, - "h": 22 + "x": 151, + "y": 205, + "w": 27, + "h": 24 } }, { - "filename": "873", + "filename": "894s", "rotated": false, "trimmed": true, "sourceSize": { @@ -3987,62 +2706,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 25, - "h": 22 + "x": 5, + "y": 3, + "w": 30, + "h": 23 }, "frame": { - "x": 166, - "y": 304, - "w": 25, - "h": 22 + "x": 178, + "y": 220, + "w": 30, + "h": 23 } }, { - "filename": "873s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 25, - "h": 22 - }, - "frame": { - "x": 191, - "y": 304, - "w": 25, - "h": 22 - } - }, - { - "filename": "878", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 25, - "h": 22 - }, - "frame": { - "x": 216, - "y": 304, - "w": 25, - "h": 22 - } - }, - { - "filename": "838", + "filename": "811s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4056,14 +2733,14 @@ "h": 24 }, "frame": { - "x": 127, - "y": 337, + "x": 208, + "y": 222, "w": 22, "h": 24 } }, { - "filename": "884", + "filename": "817s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4071,60 +2748,270 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 22, - "h": 25 - }, - "frame": { - "x": 129, - "y": 361, - "w": 22, - "h": 25 - } - }, - { - "filename": "884s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 2, - "w": 22, - "h": 25 - }, - "frame": { - "x": 129, - "y": 386, - "w": 22, - "h": 25 - } - }, - { - "filename": "838s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, + "x": 8, "y": 3, - "w": 22, + "w": 24, "h": 24 }, "frame": { - "x": 129, - "y": 411, - "w": 22, + "x": 230, + "y": 239, + "w": 24, "h": 24 } }, + { + "filename": "841", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 27, + "h": 24 + }, + "frame": { + "x": 151, + "y": 229, + "w": 27, + "h": 24 + } + }, + { + "filename": "875-no-ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 3, + "w": 14, + "h": 23 + }, + "frame": { + "x": 137, + "y": 235, + "w": 14, + "h": 23 + } + }, + { + "filename": "841s-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 0, + "w": 21, + "h": 30 + }, + "frame": { + "x": 133, + "y": 258, + "w": 21, + "h": 30 + } + }, + { + "filename": "892s-gigantamax-single", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 0, + "w": 23, + "h": 29 + }, + "frame": { + "x": 154, + "y": 253, + "w": 23, + "h": 29 + } + }, + { + "filename": "820", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 23, + "h": 24 + }, + "frame": { + "x": 134, + "y": 288, + "w": 23, + "h": 24 + } + }, + { + "filename": "842-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 0, + "w": 21, + "h": 30 + }, + "frame": { + "x": 135, + "y": 312, + "w": 21, + "h": 30 + } + }, + { + "filename": "842s-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 0, + "w": 21, + "h": 30 + }, + "frame": { + "x": 135, + "y": 342, + "w": 21, + "h": 30 + } + }, + { + "filename": "869s-gigantamax", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 0, + "w": 17, + "h": 30 + }, + "frame": { + "x": 157, + "y": 282, + "w": 17, + "h": 30 + } + }, + { + "filename": "899", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 22, + "h": 27 + }, + "frame": { + "x": 156, + "y": 312, + "w": 22, + "h": 27 + } + }, + { + "filename": "899s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 22, + "h": 27 + }, + "frame": { + "x": 156, + "y": 339, + "w": 22, + "h": 27 + } + }, + { + "filename": "888s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 28, + "h": 23 + }, + "frame": { + "x": 178, + "y": 243, + "w": 28, + "h": 23 + } + }, + { + "filename": "827", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 24, + "h": 21 + }, + "frame": { + "x": 206, + "y": 246, + "w": 24, + "h": 21 + } + }, { "filename": "896", "rotated": false, @@ -4140,12 +3027,54 @@ "h": 24 }, "frame": { - "x": 129, - "y": 435, + "x": 230, + "y": 263, "w": 24, "h": 24 } }, + { + "filename": "901", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 28, + "h": 23 + }, + "frame": { + "x": 177, + "y": 266, + "w": 28, + "h": 23 + } + }, + { + "filename": "861", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 2, + "w": 25, + "h": 26 + }, + "frame": { + "x": 205, + "y": 267, + "w": 25, + "h": 26 + } + }, { "filename": "896s", "rotated": false, @@ -4161,12 +3090,54 @@ "h": 24 }, "frame": { - "x": 129, - "y": 459, + "x": 230, + "y": 287, "w": 24, "h": 24 } }, + { + "filename": "901s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 28, + "h": 23 + }, + "frame": { + "x": 174, + "y": 289, + "w": 28, + "h": 23 + } + }, + { + "filename": "904", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 28, + "h": 25 + }, + "frame": { + "x": 202, + "y": 293, + "w": 28, + "h": 25 + } + }, { "filename": "4080", "rotated": false, @@ -4182,8 +3153,8 @@ "h": 23 }, "frame": { - "x": 129, - "y": 483, + "x": 230, + "y": 311, "w": 24, "h": 23 } @@ -4203,14 +3174,14 @@ "h": 23 }, "frame": { - "x": 129, - "y": 506, + "x": 178, + "y": 312, "w": 24, "h": 23 } }, { - "filename": "6571", + "filename": "904s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4219,57 +3190,15 @@ }, "spriteSourceSize": { "x": 7, - "y": 5, - "w": 25, - "h": 23 + "y": 3, + "w": 28, + "h": 25 }, "frame": { - "x": 129, - "y": 529, - "w": 25, - "h": 23 - } - }, - { - "filename": "6571s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 25, - "h": 23 - }, - "frame": { - "x": 129, - "y": 552, - "w": 25, - "h": 23 - } - }, - { - "filename": "878s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 25, - "h": 22 - }, - "frame": { - "x": 149, - "y": 326, - "w": 25, - "h": 22 + "x": 202, + "y": 318, + "w": 28, + "h": 25 } }, { @@ -4287,8 +3216,8 @@ "h": 21 }, "frame": { - "x": 174, - "y": 326, + "x": 230, + "y": 334, "w": 24, "h": 21 } @@ -4308,14 +3237,14 @@ "h": 21 }, "frame": { - "x": 198, - "y": 326, + "x": 178, + "y": 335, "w": 24, "h": 21 } }, { - "filename": "814", + "filename": "4145", "rotated": false, "trimmed": true, "sourceSize": { @@ -4323,20 +3252,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, + "x": 6, "y": 3, - "w": 21, + "w": 28, "h": 23 }, "frame": { - "x": 222, - "y": 326, - "w": 21, + "x": 202, + "y": 343, + "w": 28, "h": 23 } }, { - "filename": "853", + "filename": "4077s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4345,19 +3274,19 @@ }, "spriteSourceSize": { "x": 8, - "y": 3, - "w": 23, - "h": 23 + "y": 4, + "w": 24, + "h": 21 }, "frame": { - "x": 151, - "y": 348, - "w": 23, - "h": 23 + "x": 230, + "y": 355, + "w": 24, + "h": 21 } }, { - "filename": "853s", + "filename": "885", "rotated": false, "trimmed": true, "sourceSize": { @@ -4366,19 +3295,19 @@ }, "spriteSourceSize": { "x": 8, - "y": 3, - "w": 23, - "h": 23 + "y": 6, + "w": 24, + "h": 17 }, "frame": { - "x": 174, - "y": 347, - "w": 23, - "h": 23 + "x": 178, + "y": 356, + "w": 24, + "h": 17 } }, { - "filename": "6628s", + "filename": "4145s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4386,20 +3315,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 7, - "y": 10, - "w": 25, - "h": 19 + "x": 6, + "y": 3, + "w": 28, + "h": 23 }, "frame": { - "x": 197, - "y": 347, - "w": 25, - "h": 19 + "x": 202, + "y": 366, + "w": 28, + "h": 23 } }, { - "filename": "816", + "filename": "6211", "rotated": false, "trimmed": true, "sourceSize": { @@ -4407,16 +3336,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 22, - "h": 23 + "x": 8, + "y": 9, + "w": 24, + "h": 19 }, "frame": { - "x": 151, - "y": 371, - "w": 22, - "h": 23 + "x": 230, + "y": 376, + "w": 24, + "h": 19 } }, { @@ -4434,14 +3363,203 @@ "h": 23 }, "frame": { - "x": 151, - "y": 394, + "x": 135, + "y": 372, "w": 22, "h": 23 } }, { - "filename": "4618", + "filename": "903", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 1, + "w": 21, + "h": 27 + }, + "frame": { + "x": 157, + "y": 366, + "w": 21, + "h": 27 + } + }, + { + "filename": "6211s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 9, + "w": 24, + "h": 19 + }, + "frame": { + "x": 178, + "y": 373, + "w": 24, + "h": 19 + } + }, + { + "filename": "873", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 25, + "h": 22 + }, + "frame": { + "x": 132, + "y": 395, + "w": 25, + "h": 22 + } + }, + { + "filename": "842", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 134, + "y": 417, + "w": 26, + "h": 25 + } + }, + { + "filename": "820s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 23, + "h": 24 + }, + "frame": { + "x": 157, + "y": 393, + "w": 23, + "h": 24 + } + }, + { + "filename": "842s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 180, + "y": 392, + "w": 26, + "h": 25 + } + }, + { + "filename": "841s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 27, + "h": 24 + }, + "frame": { + "x": 160, + "y": 417, + "w": 27, + "h": 24 + } + }, + { + "filename": "892", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 23, + "h": 25 + }, + "frame": { + "x": 206, + "y": 389, + "w": 23, + "h": 25 + } + }, + { + "filename": "861s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 2, + "w": 25, + "h": 26 + }, + "frame": { + "x": 229, + "y": 395, + "w": 25, + "h": 26 + } + }, + { + "filename": "838", "rotated": false, "trimmed": true, "sourceSize": { @@ -4450,15 +3568,57 @@ }, "spriteSourceSize": { "x": 9, - "y": 6, + "y": 3, "w": 22, - "h": 18 + "h": 24 }, "frame": { - "x": 151, + "x": 187, "y": 417, "w": 22, - "h": 18 + "h": 24 + } + }, + { + "filename": "4199", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 1, + "w": 20, + "h": 27 + }, + "frame": { + "x": 209, + "y": 414, + "w": 20, + "h": 27 + } + }, + { + "filename": "900", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 25, + "h": 25 + }, + "frame": { + "x": 229, + "y": 421, + "w": 25, + "h": 25 } }, { @@ -4476,12 +3636,33 @@ "h": 29 }, "frame": { - "x": 153, - "y": 435, + "x": 31, + "y": 706, "w": 15, "h": 29 } }, + { + "filename": "849", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 2, + "w": 16, + "h": 25 + }, + "frame": { + "x": 31, + "y": 735, + "w": 16, + "h": 25 + } + }, { "filename": "875", "rotated": false, @@ -4497,12 +3678,411 @@ "h": 27 }, "frame": { - "x": 153, - "y": 464, + "x": 30, + "y": 760, "w": 17, "h": 27 } }, + { + "filename": "850", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 10, + "w": 21, + "h": 10 + }, + "frame": { + "x": 0, + "y": 787, + "w": 21, + "h": 10 + } + }, + { + "filename": "850s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 10, + "w": 21, + "h": 10 + }, + "frame": { + "x": 21, + "y": 787, + "w": 21, + "h": 10 + } + }, + { + "filename": "4146", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 28, + "h": 18 + }, + "frame": { + "x": 56, + "y": 442, + "w": 28, + "h": 18 + } + }, + { + "filename": "4146s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 28, + "h": 18 + }, + "frame": { + "x": 84, + "y": 442, + "w": 28, + "h": 18 + } + }, + { + "filename": "4078", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 27, + "h": 23 + }, + "frame": { + "x": 112, + "y": 442, + "w": 27, + "h": 23 + } + }, + { + "filename": "838s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 22, + "h": 24 + }, + "frame": { + "x": 139, + "y": 442, + "w": 22, + "h": 24 + } + }, + { + "filename": "6706", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 26, + "h": 25 + }, + "frame": { + "x": 161, + "y": 441, + "w": 26, + "h": 25 + } + }, + { + "filename": "6706s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 26, + "h": 25 + }, + "frame": { + "x": 187, + "y": 441, + "w": 26, + "h": 25 + } + }, + { + "filename": "849s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 2, + "w": 16, + "h": 25 + }, + "frame": { + "x": 213, + "y": 441, + "w": 16, + "h": 25 + } + }, + { + "filename": "900s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 25, + "h": 25 + }, + "frame": { + "x": 229, + "y": 446, + "w": 25, + "h": 25 + } + }, + { + "filename": "880", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 26, + "h": 22 + }, + "frame": { + "x": 30, + "y": 443, + "w": 26, + "h": 22 + } + }, + { + "filename": "886", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 26, + "h": 24 + }, + "frame": { + "x": 29, + "y": 465, + "w": 26, + "h": 24 + } + }, + { + "filename": "886s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 26, + "h": 24 + }, + "frame": { + "x": 29, + "y": 489, + "w": 26, + "h": 24 + } + }, + { + "filename": "897", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 26, + "h": 24 + }, + "frame": { + "x": 29, + "y": 513, + "w": 26, + "h": 24 + } + }, + { + "filename": "903s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 1, + "w": 21, + "h": 27 + }, + "frame": { + "x": 29, + "y": 537, + "w": 21, + "h": 27 + } + }, + { + "filename": "4199s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 1, + "w": 20, + "h": 27 + }, + "frame": { + "x": 32, + "y": 564, + "w": 20, + "h": 27 + } + }, + { + "filename": "858", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 2, + "w": 22, + "h": 25 + }, + "frame": { + "x": 32, + "y": 591, + "w": 22, + "h": 25 + } + }, + { + "filename": "858s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 2, + "w": 22, + "h": 25 + }, + "frame": { + "x": 32, + "y": 616, + "w": 22, + "h": 25 + } + }, + { + "filename": "884", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 2, + "w": 22, + "h": 25 + }, + "frame": { + "x": 32, + "y": 641, + "w": 22, + "h": 25 + } + }, { "filename": "875s", "rotated": false, @@ -4518,14 +4098,14 @@ "h": 27 }, "frame": { - "x": 153, - "y": 491, + "x": 50, + "y": 537, "w": 17, "h": 27 } }, { - "filename": "814s", + "filename": "884s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4534,40 +4114,19 @@ }, "spriteSourceSize": { "x": 9, - "y": 3, - "w": 21, - "h": 23 + "y": 2, + "w": 22, + "h": 25 }, "frame": { - "x": 222, - "y": 349, - "w": 21, - "h": 23 + "x": 52, + "y": 564, + "w": 22, + "h": 25 } }, { - "filename": "846s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 25, - "h": 15 - }, - "frame": { - "x": 197, - "y": 366, - "w": 25, - "h": 15 - } - }, - { - "filename": "883", + "filename": "892s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4576,19 +4135,19 @@ }, "spriteSourceSize": { "x": 8, - "y": 4, + "y": 2, "w": 23, - "h": 21 + "h": 25 }, "frame": { - "x": 174, - "y": 370, + "x": 54, + "y": 589, "w": 23, - "h": 21 + "h": 25 } }, { - "filename": "855", + "filename": "866", "rotated": false, "trimmed": true, "sourceSize": { @@ -4596,15 +4155,162 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, + "x": 8, "y": 3, - "w": 22, + "w": 23, + "h": 24 + }, + "frame": { + "x": 54, + "y": 614, + "w": 23, + "h": 24 + } + }, + { + "filename": "866s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 23, + "h": 24 + }, + "frame": { + "x": 54, + "y": 638, + "w": 23, + "h": 24 + } + }, + { + "filename": "897s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 26, + "h": 24 + }, + "frame": { + "x": 33, + "y": 666, + "w": 26, + "h": 24 + } + }, + { + "filename": "847", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 27, + "h": 16 + }, + "frame": { + "x": 33, + "y": 690, + "w": 27, + "h": 16 + } + }, + { + "filename": "6724", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 1, + "w": 17, + "h": 28 + }, + "frame": { + "x": 46, + "y": 706, + "w": 17, + "h": 28 + } + }, + { + "filename": "6724s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 1, + "w": 17, + "h": 28 + }, + "frame": { + "x": 47, + "y": 734, + "w": 17, + "h": 28 + } + }, + { + "filename": "863s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 20, + "h": 24 + }, + "frame": { + "x": 47, + "y": 762, + "w": 20, + "h": 24 + } + }, + { + "filename": "810s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, "h": 23 }, "frame": { - "x": 173, - "y": 391, - "w": 22, + "x": 59, + "y": 662, + "w": 19, "h": 23 } }, @@ -4623,35 +4329,14 @@ "h": 21 }, "frame": { - "x": 173, - "y": 414, + "x": 60, + "y": 685, "w": 22, "h": 21 } }, { - "filename": "855s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 22, - "h": 23 - }, - "frame": { - "x": 168, - "y": 435, - "w": 22, - "h": 23 - } - }, - { - "filename": "863", + "filename": "830", "rotated": false, "trimmed": true, "sourceSize": { @@ -4661,18 +4346,18 @@ "spriteSourceSize": { "x": 10, "y": 3, - "w": 20, - "h": 24 + "w": 19, + "h": 23 }, "frame": { - "x": 170, - "y": 458, - "w": 20, - "h": 24 + "x": 63, + "y": 706, + "w": 19, + "h": 23 } }, { - "filename": "863s", + "filename": "830s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4682,18 +4367,60 @@ "spriteSourceSize": { "x": 10, "y": 3, - "w": 20, - "h": 24 + "w": 19, + "h": 23 }, "frame": { - "x": 170, - "y": 482, - "w": 20, - "h": 24 + "x": 64, + "y": 729, + "w": 19, + "h": 23 } }, { - "filename": "4079", + "filename": "847s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 27, + "h": 16 + }, + "frame": { + "x": 56, + "y": 460, + "w": 27, + "h": 16 + } + }, + { + "filename": "4078s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 27, + "h": 23 + }, + "frame": { + "x": 55, + "y": 476, + "w": 27, + "h": 23 + } + }, + { + "filename": "6713", "rotated": false, "trimmed": true, "sourceSize": { @@ -4702,19 +4429,19 @@ }, "spriteSourceSize": { "x": 7, - "y": 8, - "w": 26, - "h": 14 + "y": 5, + "w": 27, + "h": 23 }, "frame": { - "x": 197, - "y": 381, - "w": 26, - "h": 14 + "x": 55, + "y": 499, + "w": 27, + "h": 23 } }, { - "filename": "860", + "filename": "846", "rotated": false, "trimmed": true, "sourceSize": { @@ -4722,20 +4449,62 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, + "x": 7, + "y": 7, + "w": 25, + "h": 15 + }, + "frame": { + "x": 55, + "y": 522, + "w": 25, + "h": 15 + } + }, + { + "filename": "6713s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 27, + "h": 23 + }, + "frame": { + "x": 83, + "y": 460, + "w": 27, + "h": 23 + } + }, + { + "filename": "879", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, "y": 3, - "w": 22, + "w": 25, "h": 23 }, "frame": { - "x": 195, - "y": 395, - "w": 22, + "x": 82, + "y": 483, + "w": 25, "h": 23 } }, { - "filename": "819s", + "filename": "880s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4743,20 +4512,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, + "x": 7, "y": 4, - "w": 22, - "h": 21 + "w": 26, + "h": 22 }, "frame": { - "x": 195, - "y": 418, - "w": 22, - "h": 21 + "x": 110, + "y": 465, + "w": 26, + "h": 22 } }, { - "filename": "860s", + "filename": "892-rapid-strike", "rotated": false, "trimmed": true, "sourceSize": { @@ -4764,20 +4533,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 22, - "h": 23 + "x": 7, + "y": 4, + "w": 26, + "h": 22 }, "frame": { - "x": 190, - "y": 439, - "w": 22, - "h": 23 + "x": 136, + "y": 466, + "w": 26, + "h": 22 } }, { - "filename": "876-female", + "filename": "892s-rapid-strike", "rotated": false, "trimmed": true, "sourceSize": { @@ -4785,15 +4554,183 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, + "x": 7, + "y": 4, + "w": 26, + "h": 22 + }, + "frame": { + "x": 162, + "y": 466, + "w": 26, + "h": 22 + } + }, + { + "filename": "873s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 25, + "h": 22 + }, + "frame": { + "x": 188, + "y": 466, + "w": 25, + "h": 22 + } + }, + { + "filename": "833", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, "y": 3, - "w": 22, + "w": 16, "h": 23 }, "frame": { - "x": 190, - "y": 462, - "w": 22, + "x": 213, + "y": 466, + "w": 16, + "h": 23 + } + }, + { + "filename": "879s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 25, + "h": 23 + }, + "frame": { + "x": 229, + "y": 471, + "w": 25, + "h": 23 + } + }, + { + "filename": "844", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 25, + "h": 19 + }, + "frame": { + "x": 82, + "y": 506, + "w": 25, + "h": 19 + } + }, + { + "filename": "6571", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 25, + "h": 23 + }, + "frame": { + "x": 107, + "y": 487, + "w": 25, + "h": 23 + } + }, + { + "filename": "878", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 25, + "h": 22 + }, + "frame": { + "x": 132, + "y": 488, + "w": 25, + "h": 22 + } + }, + { + "filename": "878s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 25, + "h": 22 + }, + "frame": { + "x": 157, + "y": 488, + "w": 25, + "h": 22 + } + }, + { + "filename": "6571s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 25, + "h": 23 + }, + "frame": { + "x": 182, + "y": 488, + "w": 25, "h": 23 } }, @@ -4812,14 +4749,14 @@ "h": 22 }, "frame": { - "x": 190, - "y": 485, + "x": 207, + "y": 489, "w": 22, "h": 22 } }, { - "filename": "876s-female", + "filename": "844s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4827,440 +4764,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 22, - "h": 23 - }, - "frame": { - "x": 223, - "y": 372, - "w": 22, - "h": 23 - } - }, - { - "filename": "882", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 22, - "h": 23 - }, - "frame": { - "x": 217, - "y": 395, - "w": 22, - "h": 23 - } - }, - { - "filename": "832s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 22, - "h": 22 - }, - "frame": { - "x": 217, - "y": 418, - "w": 22, - "h": 22 - } - }, - { - "filename": "882s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 22, - "h": 23 - }, - "frame": { - "x": 212, - "y": 440, - "w": 22, - "h": 23 - } - }, - { - "filename": "877-hangry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 17, - "h": 21 - }, - "frame": { - "x": 234, - "y": 440, - "w": 17, - "h": 21 - } - }, - { - "filename": "836", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 22, - "h": 22 - }, - "frame": { - "x": 212, - "y": 463, - "w": 22, - "h": 22 - } - }, - { - "filename": "877", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 17, - "h": 21 - }, - "frame": { - "x": 234, - "y": 461, - "w": 17, - "h": 21 - } - }, - { - "filename": "836s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 22, - "h": 22 - }, - "frame": { - "x": 212, - "y": 485, - "w": 22, - "h": 22 - } - }, - { - "filename": "877s-hangry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 17, - "h": 21 - }, - "frame": { - "x": 234, - "y": 482, - "w": 17, - "h": 21 - } - }, - { - "filename": "877s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 17, - "h": 21 - }, - "frame": { - "x": 234, - "y": 503, - "w": 17, - "h": 21 - } - }, - { - "filename": "825", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 20, - "h": 18 - }, - "frame": { - "x": 170, - "y": 506, - "w": 20, - "h": 18 - } - }, - { - "filename": "885", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 6, - "w": 24, - "h": 17 - }, - "frame": { - "x": 190, - "y": 507, - "w": 24, - "h": 17 - } - }, - { - "filename": "825s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 20, - "h": 18 - }, - "frame": { - "x": 214, - "y": 507, - "w": 20, - "h": 18 - } - }, - { - "filename": "6215", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 7, - "w": 17, - "h": 21 - }, - "frame": { - "x": 234, - "y": 524, - "w": 17, - "h": 21 - } - }, - { - "filename": "849", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 16, - "h": 25 - }, - "frame": { - "x": 154, - "y": 518, - "w": 16, - "h": 25 - } - }, - { - "filename": "4077s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 24, - "h": 21 - }, - "frame": { - "x": 170, - "y": 524, - "w": 24, - "h": 21 - } - }, - { - "filename": "849s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 2, - "w": 16, - "h": 25 - }, - "frame": { - "x": 154, - "y": 543, - "w": 16, - "h": 25 - } - }, - { - "filename": "857", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 22, - "h": 22 - }, - "frame": { - "x": 170, - "y": 545, - "w": 22, - "h": 22 - } - }, - { - "filename": "830", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 19, - "h": 23 - }, - "frame": { - "x": 194, - "y": 524, - "w": 19, - "h": 23 - } - }, - { - "filename": "4052", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 21, - "h": 21 - }, - "frame": { - "x": 213, - "y": 525, - "w": 21, - "h": 21 - } - }, - { - "filename": "835", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, + "x": 7, "y": 5, - "w": 22, - "h": 20 + "w": 25, + "h": 19 }, "frame": { - "x": 192, - "y": 547, - "w": 22, - "h": 20 + "x": 229, + "y": 494, + "w": 25, + "h": 19 } }, { - "filename": "857s", + "filename": "846s", "rotated": false, "trimmed": true, "sourceSize": { @@ -5268,20 +4785,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 22, - "h": 22 + "x": 7, + "y": 7, + "w": 25, + "h": 15 }, "frame": { - "x": 214, - "y": 546, - "w": 22, - "h": 22 + "x": 107, + "y": 510, + "w": 25, + "h": 15 } }, { - "filename": "849-lowkey", + "filename": "4079", "rotated": false, "trimmed": true, "sourceSize": { @@ -5289,35 +4806,14 @@ "h": 30 }, "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 15, - "h": 23 - }, - "frame": { - "x": 236, - "y": 545, - "w": 15, - "h": 23 - } - }, - { - "filename": "4079s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, + "x": 7, + "y": 8, "w": 26, "h": 14 }, "frame": { - "x": 129, - "y": 575, + "x": 132, + "y": 510, "w": 26, "h": 14 } @@ -5337,14 +4833,14 @@ "h": 17 }, "frame": { - "x": 105, - "y": 581, + "x": 158, + "y": 510, "w": 24, "h": 17 } }, { - "filename": "883s", + "filename": "6628", "rotated": false, "trimmed": true, "sourceSize": { @@ -5352,83 +4848,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 23, - "h": 21 - }, - "frame": { - "x": 100, - "y": 598, - "w": 23, - "h": 21 - } - }, - { - "filename": "830s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 19, - "h": 23 - }, - "frame": { - "x": 100, - "y": 619, - "w": 19, - "h": 23 - } - }, - { - "filename": "6211", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 24, + "x": 7, + "y": 10, + "w": 25, "h": 19 }, "frame": { - "x": 129, - "y": 589, - "w": 24, + "x": 182, + "y": 511, + "w": 25, "h": 19 } }, { - "filename": "821", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 19, - "h": 16 - }, - "frame": { - "x": 100, - "y": 642, - "w": 19, - "h": 16 - } - }, - { - "filename": "4052s", + "filename": "819s", "rotated": false, "trimmed": true, "sourceSize": { @@ -5438,16 +4871,247 @@ "spriteSourceSize": { "x": 9, "y": 4, - "w": 21, + "w": 22, "h": 21 }, "frame": { - "x": 99, - "y": 658, - "w": 21, + "x": 207, + "y": 511, + "w": 22, "h": 21 } }, + { + "filename": "6628s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 10, + "w": 25, + "h": 19 + }, + "frame": { + "x": 229, + "y": 513, + "w": 25, + "h": 19 + } + }, + { + "filename": "833s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 3, + "w": 16, + "h": 23 + }, + "frame": { + "x": 67, + "y": 537, + "w": 16, + "h": 23 + } + }, + { + "filename": "853", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 23, + "h": 23 + }, + "frame": { + "x": 83, + "y": 525, + "w": 23, + "h": 23 + } + }, + { + "filename": "853s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 23, + "h": 23 + }, + "frame": { + "x": 106, + "y": 525, + "w": 23, + "h": 23 + } + }, + { + "filename": "4079s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 14, + "w": 26, + "h": 14 + }, + "frame": { + "x": 83, + "y": 548, + "w": 26, + "h": 14 + } + }, + { + "filename": "822", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 5, + "w": 22, + "h": 19 + }, + "frame": { + "x": 109, + "y": 548, + "w": 22, + "h": 19 + } + }, + { + "filename": "855", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 22, + "h": 23 + }, + "frame": { + "x": 74, + "y": 562, + "w": 22, + "h": 23 + } + }, + { + "filename": "855s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 22, + "h": 23 + }, + "frame": { + "x": 77, + "y": 585, + "w": 22, + "h": 23 + } + }, + { + "filename": "860", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 22, + "h": 23 + }, + "frame": { + "x": 77, + "y": 608, + "w": 22, + "h": 23 + } + }, + { + "filename": "860s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 22, + "h": 23 + }, + "frame": { + "x": 77, + "y": 631, + "w": 22, + "h": 23 + } + }, + { + "filename": "876-female", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 22, + "h": 23 + }, + "frame": { + "x": 78, + "y": 654, + "w": 22, + "h": 23 + } + }, { "filename": "856", "rotated": false, @@ -5463,8 +5127,8 @@ "h": 23 }, "frame": { - "x": 100, - "y": 679, + "x": 82, + "y": 677, "w": 19, "h": 23 } @@ -5484,285 +5148,12 @@ "h": 23 }, "frame": { - "x": 99, - "y": 702, + "x": 82, + "y": 700, "w": 19, "h": 23 } }, - { - "filename": "824", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 4, - "w": 15, - "h": 21 - }, - "frame": { - "x": 155, - "y": 568, - "w": 15, - "h": 21 - } - }, - { - "filename": "6211s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 24, - "h": 19 - }, - "frame": { - "x": 170, - "y": 567, - "w": 24, - "h": 19 - } - }, - { - "filename": "831", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 5, - "w": 20, - "h": 19 - }, - "frame": { - "x": 194, - "y": 567, - "w": 20, - "h": 19 - } - }, - { - "filename": "822", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 5, - "w": 22, - "h": 19 - }, - "frame": { - "x": 214, - "y": 568, - "w": 22, - "h": 19 - } - }, - { - "filename": "849s-lowkey", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 15, - "h": 23 - }, - "frame": { - "x": 236, - "y": 568, - "w": 15, - "h": 23 - } - }, - { - "filename": "822s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 5, - "w": 22, - "h": 19 - }, - "frame": { - "x": 153, - "y": 589, - "w": 22, - "h": 19 - } - }, - { - "filename": "835s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 5, - "w": 22, - "h": 20 - }, - "frame": { - "x": 175, - "y": 586, - "w": 22, - "h": 20 - } - }, - { - "filename": "859", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 17, - "h": 20 - }, - "frame": { - "x": 197, - "y": 586, - "w": 17, - "h": 20 - } - }, - { - "filename": "4144", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 5, - "w": 22, - "h": 19 - }, - "frame": { - "x": 214, - "y": 587, - "w": 22, - "h": 19 - } - }, - { - "filename": "6705", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 6, - "w": 15, - "h": 22 - }, - "frame": { - "x": 236, - "y": 591, - "w": 15, - "h": 22 - } - }, - { - "filename": "833", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 16, - "h": 23 - }, - "frame": { - "x": 119, - "y": 619, - "w": 16, - "h": 23 - } - }, - { - "filename": "821s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 19, - "h": 16 - }, - "frame": { - "x": 119, - "y": 642, - "w": 19, - "h": 16 - } - }, - { - "filename": "848", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 18, - "h": 21 - }, - "frame": { - "x": 120, - "y": 658, - "w": 18, - "h": 21 - } - }, { "filename": "869-caramel-swirl", "rotated": false, @@ -5778,12 +5169,33 @@ "h": 23 }, "frame": { - "x": 119, - "y": 679, + "x": 83, + "y": 723, "w": 19, "h": 23 } }, + { + "filename": "4618", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 6, + "w": 22, + "h": 18 + }, + "frame": { + "x": 96, + "y": 567, + "w": 22, + "h": 18 + } + }, { "filename": "869-lemon-cream", "rotated": false, @@ -5799,8 +5211,8 @@ "h": 23 }, "frame": { - "x": 118, - "y": 702, + "x": 99, + "y": 585, "w": 19, "h": 23 } @@ -5820,7 +5232,7 @@ "h": 23 }, "frame": { - "x": 135, + "x": 99, "y": 608, "w": 19, "h": 23 @@ -5841,33 +5253,12 @@ "h": 23 }, "frame": { - "x": 154, - "y": 608, + "x": 99, + "y": 631, "w": 19, "h": 23 } }, - { - "filename": "850", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 21, - "h": 10 - }, - "frame": { - "x": 135, - "y": 631, - "w": 21, - "h": 10 - } - }, { "filename": "869-rainbow-swirl", "rotated": false, @@ -5883,8 +5274,8 @@ "h": 23 }, "frame": { - "x": 138, - "y": 641, + "x": 100, + "y": 654, "w": 19, "h": 23 } @@ -5904,75 +5295,12 @@ "h": 23 }, "frame": { - "x": 138, - "y": 664, + "x": 101, + "y": 677, "w": 19, "h": 23 } }, - { - "filename": "831s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 5, - "w": 20, - "h": 19 - }, - "frame": { - "x": 138, - "y": 687, - "w": 20, - "h": 19 - } - }, - { - "filename": "4144s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 5, - "w": 22, - "h": 19 - }, - "frame": { - "x": 137, - "y": 706, - "w": 22, - "h": 19 - } - }, - { - "filename": "833s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 3, - "w": 16, - "h": 23 - }, - "frame": { - "x": 157, - "y": 631, - "w": 16, - "h": 23 - } - }, { "filename": "869-ruby-swirl", "rotated": false, @@ -5988,8 +5316,8 @@ "h": 23 }, "frame": { - "x": 157, - "y": 654, + "x": 101, + "y": 700, "w": 19, "h": 23 } @@ -6009,12 +5337,54 @@ "h": 23 }, "frame": { - "x": 158, - "y": 677, + "x": 102, + "y": 723, "w": 19, "h": 23 } }, + { + "filename": "849-lowkey", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 3, + "w": 15, + "h": 23 + }, + "frame": { + "x": 118, + "y": 567, + "w": 15, + "h": 23 + } + }, + { + "filename": "849s-lowkey", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 3, + "w": 15, + "h": 23 + }, + "frame": { + "x": 118, + "y": 590, + "w": 15, + "h": 23 + } + }, { "filename": "869", "rotated": false, @@ -6030,12 +5400,390 @@ "h": 23 }, "frame": { - "x": 159, + "x": 118, + "y": 613, + "w": 19, + "h": 23 + } + }, + { + "filename": "825", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 20, + "h": 18 + }, + "frame": { + "x": 118, + "y": 636, + "w": 20, + "h": 18 + } + }, + { + "filename": "869s-caramel-swirl", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 119, + "y": 654, + "w": 19, + "h": 23 + } + }, + { + "filename": "869s-lemon-cream", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 120, + "y": 677, + "w": 19, + "h": 23 + } + }, + { + "filename": "869s-matcha-cream", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 120, "y": 700, "w": 19, "h": 23 } }, + { + "filename": "869s-mint-cream", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 121, + "y": 723, + "w": 19, + "h": 23 + } + }, + { + "filename": "869s-rainbow-swirl", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 67, + "y": 752, + "w": 19, + "h": 23 + } + }, + { + "filename": "876s-female", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 22, + "h": 23 + }, + "frame": { + "x": 67, + "y": 775, + "w": 22, + "h": 23 + } + }, + { + "filename": "882", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 22, + "h": 23 + }, + "frame": { + "x": 86, + "y": 746, + "w": 22, + "h": 23 + } + }, + { + "filename": "882s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 22, + "h": 23 + }, + "frame": { + "x": 108, + "y": 746, + "w": 22, + "h": 23 + } + }, + { + "filename": "832s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 22, + "h": 22 + }, + "frame": { + "x": 89, + "y": 769, + "w": 22, + "h": 22 + } + }, + { + "filename": "836", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 22, + "h": 22 + }, + "frame": { + "x": 111, + "y": 769, + "w": 22, + "h": 22 + } + }, + { + "filename": "869s-ruby-cream", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 130, + "y": 746, + "w": 19, + "h": 23 + } + }, + { + "filename": "836s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 22, + "h": 22 + }, + "frame": { + "x": 133, + "y": 769, + "w": 22, + "h": 22 + } + }, + { + "filename": "869s-ruby-swirl", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 129, + "y": 525, + "w": 19, + "h": 23 + } + }, + { + "filename": "822s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 5, + "w": 22, + "h": 19 + }, + "frame": { + "x": 131, + "y": 548, + "w": 22, + "h": 19 + } + }, + { + "filename": "857", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 22, + "h": 22 + }, + "frame": { + "x": 133, + "y": 567, + "w": 22, + "h": 22 + } + }, + { + "filename": "857s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 22, + "h": 22 + }, + "frame": { + "x": 133, + "y": 589, + "w": 22, + "h": 22 + } + }, + { + "filename": "869s-salted-cream", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 3, + "w": 19, + "h": 23 + }, + "frame": { + "x": 137, + "y": 611, + "w": 19, + "h": 23 + } + }, { "filename": "869s", "rotated": false, @@ -6051,12 +5799,180 @@ "h": 23 }, "frame": { - "x": 173, - "y": 608, + "x": 138, + "y": 634, "w": 19, "h": 23 } }, + { + "filename": "835", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 5, + "w": 22, + "h": 20 + }, + "frame": { + "x": 138, + "y": 657, + "w": 22, + "h": 20 + } + }, + { + "filename": "883", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 23, + "h": 21 + }, + "frame": { + "x": 139, + "y": 677, + "w": 23, + "h": 21 + } + }, + { + "filename": "883s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 23, + "h": 21 + }, + "frame": { + "x": 139, + "y": 698, + "w": 23, + "h": 21 + } + }, + { + "filename": "835s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 5, + "w": 22, + "h": 20 + }, + "frame": { + "x": 140, + "y": 719, + "w": 22, + "h": 20 + } + }, + { + "filename": "4052", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 21, + "h": 21 + }, + "frame": { + "x": 148, + "y": 527, + "w": 21, + "h": 21 + } + }, + { + "filename": "831", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 5, + "w": 20, + "h": 19 + }, + "frame": { + "x": 153, + "y": 548, + "w": 20, + "h": 19 + } + }, + { + "filename": "881s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 3, + "w": 18, + "h": 23 + }, + "frame": { + "x": 155, + "y": 567, + "w": 18, + "h": 23 + } + }, + { + "filename": "848", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 18, + "h": 21 + }, + "frame": { + "x": 155, + "y": 590, + "w": 18, + "h": 21 + } + }, { "filename": "6549", "rotated": false, @@ -6072,12 +5988,264 @@ "h": 23 }, "frame": { - "x": 173, - "y": 631, + "x": 156, + "y": 611, "w": 16, "h": 23 } }, + { + "filename": "6549s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 5, + "w": 16, + "h": 23 + }, + "frame": { + "x": 157, + "y": 634, + "w": 16, + "h": 23 + } + }, + { + "filename": "859s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 17, + "h": 20 + }, + "frame": { + "x": 160, + "y": 657, + "w": 17, + "h": 20 + } + }, + { + "filename": "875s-no-ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 3, + "w": 14, + "h": 23 + }, + "frame": { + "x": 162, + "y": 677, + "w": 14, + "h": 23 + } + }, + { + "filename": "891", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 18, + "h": 22 + }, + "frame": { + "x": 162, + "y": 700, + "w": 18, + "h": 22 + } + }, + { + "filename": "825s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 20, + "h": 18 + }, + "frame": { + "x": 162, + "y": 722, + "w": 20, + "h": 18 + } + }, + { + "filename": "4618s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 6, + "w": 22, + "h": 18 + }, + "frame": { + "x": 169, + "y": 530, + "w": 22, + "h": 18 + } + }, + { + "filename": "891s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 18, + "h": 22 + }, + "frame": { + "x": 173, + "y": 548, + "w": 18, + "h": 22 + } + }, + { + "filename": "898", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 4, + "w": 19, + "h": 22 + }, + "frame": { + "x": 173, + "y": 570, + "w": 19, + "h": 22 + } + }, + { + "filename": "831s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 5, + "w": 20, + "h": 19 + }, + "frame": { + "x": 173, + "y": 592, + "w": 20, + "h": 19 + } + }, + { + "filename": "4052s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 21, + "h": 21 + }, + "frame": { + "x": 172, + "y": 611, + "w": 21, + "h": 21 + } + }, + { + "filename": "898s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 4, + "w": 19, + "h": 22 + }, + "frame": { + "x": 173, + "y": 632, + "w": 19, + "h": 22 + } + }, + { + "filename": "6705", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 6, + "w": 15, + "h": 22 + }, + "frame": { + "x": 191, + "y": 530, + "w": 15, + "h": 22 + } + }, { "filename": "4264", "rotated": false, @@ -6093,8 +6261,8 @@ "h": 20 }, "frame": { - "x": 192, - "y": 606, + "x": 206, + "y": 532, "w": 22, "h": 20 } @@ -6114,96 +6282,12 @@ "h": 20 }, "frame": { - "x": 214, - "y": 606, + "x": 228, + "y": 532, "w": 22, "h": 20 } }, - { - "filename": "6705s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 6, - "w": 15, - "h": 22 - }, - "frame": { - "x": 236, - "y": 613, - "w": 15, - "h": 22 - } - }, - { - "filename": "875-no-ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 3, - "w": 14, - "h": 23 - }, - "frame": { - "x": 176, - "y": 654, - "w": 14, - "h": 23 - } - }, - { - "filename": "875s-no-ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 3, - "w": 14, - "h": 23 - }, - "frame": { - "x": 177, - "y": 677, - "w": 14, - "h": 23 - } - }, - { - "filename": "6549s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 5, - "w": 16, - "h": 23 - }, - "frame": { - "x": 178, - "y": 700, - "w": 16, - "h": 23 - } - }, { "filename": "4263", "rotated": false, @@ -6218,221 +6302,11 @@ "w": 22, "h": 16 }, - "frame": { - "x": 192, - "y": 626, - "w": 22, - "h": 16 - } - }, - { - "filename": "4263s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 22, - "h": 16 - }, - "frame": { - "x": 214, - "y": 626, - "w": 22, - "h": 16 - } - }, - { - "filename": "824s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 4, - "w": 15, - "h": 21 - }, - "frame": { - "x": 236, - "y": 635, - "w": 15, - "h": 21 - } - }, - { - "filename": "850s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 21, - "h": 10 - }, - "frame": { - "x": 189, - "y": 642, - "w": 21, - "h": 10 - } - }, - { - "filename": "898", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 4, - "w": 19, - "h": 22 - }, - "frame": { - "x": 190, - "y": 652, - "w": 19, - "h": 22 - } - }, - { - "filename": "891", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 18, - "h": 22 - }, "frame": { "x": 191, - "y": 674, - "w": 18, - "h": 22 - } - }, - { - "filename": "891s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 18, - "h": 22 - }, - "frame": { - "x": 194, - "y": 696, - "w": 18, - "h": 22 - } - }, - { - "filename": "4562", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, + "y": 552, "w": 22, "h": 16 - }, - "frame": { - "x": 210, - "y": 642, - "w": 22, - "h": 16 - } - }, - { - "filename": "898s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 4, - "w": 19, - "h": 22 - }, - "frame": { - "x": 209, - "y": 658, - "w": 19, - "h": 22 - } - }, - { - "filename": "4562s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 22, - "h": 16 - }, - "frame": { - "x": 209, - "y": 680, - "w": 22, - "h": 16 - } - }, - { - "filename": "6570", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 18, - "h": 22 - }, - "frame": { - "x": 212, - "y": 696, - "w": 18, - "h": 22 } }, { @@ -6450,14 +6324,14 @@ "h": 20 }, "frame": { - "x": 230, - "y": 696, + "x": 192, + "y": 568, "w": 21, "h": 20 } }, { - "filename": "4222s", + "filename": "4144", "rotated": false, "trimmed": true, "sourceSize": { @@ -6467,14 +6341,14 @@ "spriteSourceSize": { "x": 9, "y": 5, - "w": 21, - "h": 20 + "w": 22, + "h": 19 }, "frame": { - "x": 230, - "y": 716, - "w": 21, - "h": 20 + "x": 213, + "y": 552, + "w": 22, + "h": 19 } }, { @@ -6492,35 +6366,14 @@ "h": 19 }, "frame": { - "x": 232, - "y": 656, + "x": 235, + "y": 552, "w": 19, "h": 19 } }, { - "filename": "848s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 18, - "h": 21 - }, - "frame": { - "x": 231, - "y": 675, - "w": 18, - "h": 21 - } - }, - { - "filename": "4618s", + "filename": "4144s", "rotated": false, "trimmed": true, "sourceSize": { @@ -6529,99 +6382,15 @@ }, "spriteSourceSize": { "x": 9, - "y": 6, + "y": 5, "w": 22, - "h": 18 + "h": 19 }, "frame": { - "x": 194, - "y": 718, + "x": 213, + "y": 571, "w": 22, - "h": 18 - } - }, - { - "filename": "6100", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 14, - "w": 14, - "h": 14 - }, - "frame": { - "x": 216, - "y": 718, - "w": 14, - "h": 14 - } - }, - { - "filename": "6058", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 21, - "h": 20 - }, - "frame": { - "x": 99, - "y": 725, - "w": 21, - "h": 20 - } - }, - { - "filename": "6058s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 21, - "h": 20 - }, - "frame": { - "x": 120, - "y": 725, - "w": 21, - "h": 20 - } - }, - { - "filename": "6570s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 18, - "h": 22 - }, - "frame": { - "x": 141, - "y": 725, - "w": 18, - "h": 22 + "h": 19 } }, { @@ -6639,14 +6408,14 @@ "h": 19 }, "frame": { - "x": 159, - "y": 723, + "x": 235, + "y": 571, "w": 19, "h": 19 } }, { - "filename": "868", + "filename": "6570", "rotated": false, "trimmed": true, "sourceSize": { @@ -6656,18 +6425,18 @@ "spriteSourceSize": { "x": 12, "y": 6, - "w": 16, - "h": 17 + "w": 18, + "h": 22 }, "frame": { - "x": 178, - "y": 723, - "w": 16, - "h": 17 + "x": 193, + "y": 588, + "w": 18, + "h": 22 } }, { - "filename": "6215s", + "filename": "6570s", "rotated": false, "trimmed": true, "sourceSize": { @@ -6676,17 +6445,206 @@ }, "spriteSourceSize": { "x": 12, + "y": 6, + "w": 18, + "h": 22 + }, + "frame": { + "x": 193, + "y": 610, + "w": 18, + "h": 22 + } + }, + { + "filename": "848s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 18, + "h": 21 + }, + "frame": { + "x": 192, + "y": 632, + "w": 18, + "h": 21 + } + }, + { + "filename": "4222s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 5, + "w": 21, + "h": 20 + }, + "frame": { + "x": 211, + "y": 590, + "w": 21, + "h": 20 + } + }, + { + "filename": "4263s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, "y": 7, + "w": 22, + "h": 16 + }, + "frame": { + "x": 232, + "y": 590, + "w": 22, + "h": 16 + } + }, + { + "filename": "4562", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 22, + "h": 16 + }, + "frame": { + "x": 232, + "y": 606, + "w": 22, + "h": 16 + } + }, + { + "filename": "6058", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 21, + "h": 20 + }, + "frame": { + "x": 211, + "y": 610, + "w": 21, + "h": 20 + } + }, + { + "filename": "4562s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 22, + "h": 16 + }, + "frame": { + "x": 232, + "y": 622, + "w": 22, + "h": 16 + } + }, + { + "filename": "6705s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 6, + "w": 15, + "h": 22 + }, + "frame": { + "x": 177, + "y": 654, + "w": 15, + "h": 22 + } + }, + { + "filename": "877-hangry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, "w": 17, "h": 21 }, "frame": { - "x": 100, - "y": 745, + "x": 192, + "y": 653, "w": 17, "h": 21 } }, + { + "filename": "6058s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 21, + "h": 20 + }, + "frame": { + "x": 211, + "y": 630, + "w": 21, + "h": 20 + } + }, { "filename": "837", "rotated": false, @@ -6702,12 +6660,411 @@ "h": 17 }, "frame": { - "x": 117, - "y": 745, + "x": 232, + "y": 638, "w": 20, "h": 17 } }, + { + "filename": "824", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 4, + "w": 15, + "h": 21 + }, + "frame": { + "x": 176, + "y": 677, + "w": 15, + "h": 21 + } + }, + { + "filename": "824s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 4, + "w": 15, + "h": 21 + }, + "frame": { + "x": 180, + "y": 698, + "w": 15, + "h": 21 + } + }, + { + "filename": "877", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 17, + "h": 21 + }, + "frame": { + "x": 182, + "y": 719, + "w": 17, + "h": 21 + } + }, + { + "filename": "837s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 20, + "h": 17 + }, + "frame": { + "x": 210, + "y": 650, + "w": 20, + "h": 17 + } + }, + { + "filename": "821", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 19, + "h": 16 + }, + "frame": { + "x": 230, + "y": 655, + "w": 19, + "h": 16 + } + }, + { + "filename": "821s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 7, + "w": 19, + "h": 16 + }, + "frame": { + "x": 209, + "y": 667, + "w": 19, + "h": 16 + } + }, + { + "filename": "852s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 19, + "h": 17 + }, + "frame": { + "x": 228, + "y": 671, + "w": 19, + "h": 17 + } + }, + { + "filename": "829", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 6, + "w": 17, + "h": 18 + }, + "frame": { + "x": 192, + "y": 674, + "w": 17, + "h": 18 + } + }, + { + "filename": "871", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 19, + "h": 17 + }, + "frame": { + "x": 209, + "y": 683, + "w": 19, + "h": 17 + } + }, + { + "filename": "871s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 19, + "h": 17 + }, + "frame": { + "x": 228, + "y": 688, + "w": 19, + "h": 17 + } + }, + { + "filename": "6100", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 14, + "w": 14, + "h": 14 + }, + "frame": { + "x": 195, + "y": 692, + "w": 14, + "h": 14 + } + }, + { + "filename": "843", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 18, + "h": 19 + }, + "frame": { + "x": 209, + "y": 700, + "w": 18, + "h": 19 + } + }, + { + "filename": "843s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 18, + "h": 19 + }, + "frame": { + "x": 227, + "y": 705, + "w": 18, + "h": 19 + } + }, + { + "filename": "877s-hangry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 17, + "h": 21 + }, + "frame": { + "x": 199, + "y": 719, + "w": 17, + "h": 21 + } + }, + { + "filename": "829s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 6, + "w": 17, + "h": 18 + }, + "frame": { + "x": 216, + "y": 724, + "w": 17, + "h": 18 + } + }, + { + "filename": "877s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 17, + "h": 21 + }, + "frame": { + "x": 233, + "y": 724, + "w": 17, + "h": 21 + } + }, + { + "filename": "6215", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 7, + "w": 17, + "h": 21 + }, + "frame": { + "x": 149, + "y": 745, + "w": 17, + "h": 21 + } + }, + { + "filename": "6215s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 7, + "w": 17, + "h": 21 + }, + "frame": { + "x": 166, + "y": 740, + "w": 17, + "h": 21 + } + }, + { + "filename": "868", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 6, + "w": 16, + "h": 17 + }, + "frame": { + "x": 183, + "y": 740, + "w": 16, + "h": 17 + } + }, { "filename": "4554", "rotated": false, @@ -6723,96 +7080,12 @@ "h": 15 }, "frame": { - "x": 100, - "y": 766, + "x": 199, + "y": 740, "w": 17, "h": 15 } }, - { - "filename": "4554s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 7, - "w": 17, - "h": 15 - }, - "frame": { - "x": 105, - "y": 781, - "w": 17, - "h": 15 - } - }, - { - "filename": "843", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 18, - "h": 19 - }, - "frame": { - "x": 117, - "y": 762, - "w": 18, - "h": 19 - } - }, - { - "filename": "837s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 20, - "h": 17 - }, - "frame": { - "x": 137, - "y": 747, - "w": 20, - "h": 17 - } - }, - { - "filename": "852s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 19, - "h": 17 - }, - "frame": { - "x": 135, - "y": 764, - "w": 19, - "h": 17 - } - }, { "filename": "854", "rotated": false, @@ -6828,8 +7101,8 @@ "h": 14 }, "frame": { - "x": 122, - "y": 781, + "x": 216, + "y": 742, "w": 17, "h": 14 } @@ -6849,75 +7122,12 @@ "h": 14 }, "frame": { - "x": 139, - "y": 781, + "x": 233, + "y": 745, "w": 17, "h": 14 } }, - { - "filename": "871", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 19, - "h": 17 - }, - "frame": { - "x": 159, - "y": 742, - "w": 19, - "h": 17 - } - }, - { - "filename": "843s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 18, - "h": 19 - }, - "frame": { - "x": 178, - "y": 740, - "w": 18, - "h": 19 - } - }, - { - "filename": "859s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 17, - "h": 20 - }, - "frame": { - "x": 196, - "y": 736, - "w": 17, - "h": 20 - } - }, { "filename": "840", "rotated": false, @@ -6933,35 +7143,14 @@ "h": 17 }, "frame": { - "x": 154, - "y": 764, + "x": 155, + "y": 766, "w": 15, "h": 17 } }, { - "filename": "871s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 19, - "h": 17 - }, - "frame": { - "x": 169, - "y": 759, - "w": 19, - "h": 17 - } - }, - { - "filename": "872", + "filename": "4554s", "rotated": false, "trimmed": true, "sourceSize": { @@ -6970,36 +7159,15 @@ }, "spriteSourceSize": { "x": 11, - "y": 8, + "y": 7, "w": 17, - "h": 14 + "h": 15 }, "frame": { - "x": 156, - "y": 781, + "x": 155, + "y": 783, "w": 17, - "h": 14 - } - }, - { - "filename": "829", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 6, - "w": 17, - "h": 18 - }, - "frame": { - "x": 173, - "y": 776, - "w": 17, - "h": 18 + "h": 15 } }, { @@ -7017,33 +7185,12 @@ "h": 17 }, "frame": { - "x": 188, - "y": 759, + "x": 170, + "y": 761, "w": 15, "h": 17 } }, - { - "filename": "829s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 6, - "w": 17, - "h": 18 - }, - "frame": { - "x": 190, - "y": 776, - "w": 17, - "h": 18 - } - }, { "filename": "868s", "rotated": false, @@ -7059,33 +7206,12 @@ "h": 17 }, "frame": { - "x": 203, - "y": 756, + "x": 185, + "y": 757, "w": 16, "h": 17 } }, - { - "filename": "6101", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 12, - "w": 16, - "h": 16 - }, - "frame": { - "x": 207, - "y": 773, - "w": 16, - "h": 16 - } - }, { "filename": "6100s", "rotated": false, @@ -7101,12 +7227,33 @@ "h": 14 }, "frame": { - "x": 216, - "y": 732, + "x": 201, + "y": 755, "w": 14, "h": 14 } }, + { + "filename": "872", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 8, + "w": 17, + "h": 14 + }, + "frame": { + "x": 215, + "y": 756, + "w": 17, + "h": 14 + } + }, { "filename": "872s", "rotated": false, @@ -7122,12 +7269,33 @@ "h": 14 }, "frame": { - "x": 230, - "y": 736, + "x": 232, + "y": 759, "w": 17, "h": 14 } }, + { + "filename": "6101", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 12, + "w": 16, + "h": 16 + }, + "frame": { + "x": 172, + "y": 778, + "w": 16, + "h": 16 + } + }, { "filename": "6101s", "rotated": false, @@ -7143,8 +7311,8 @@ "h": 16 }, "frame": { - "x": 219, - "y": 750, + "x": 188, + "y": 774, "w": 16, "h": 16 } @@ -7155,6 +7323,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a5e8bbe68acd6fa6a6192a11dcd3d8dd:daf54543be918b4f74a0d25a8e946ce0:8190d2ecf16422e962cfb1a751b5e1fc$" + "smartupdate": "$TexturePacker:SmartUpdate:76f12e2db074120d5e364d7bac497210:e1ea47956220c560d403105ff317eb1a:8190d2ecf16422e962cfb1a751b5e1fc$" } } diff --git a/public/images/pokemon_icons_8.png b/public/images/pokemon_icons_8.png index 0d2ddcec281369e260b7dd9b1dd230e2e4497a49..70b4e280ccbec8fbeb3e5ad5fd53c5afce1efea5 100644 GIT binary patch literal 74497 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

xwobmaCp$|cpR{N+C;=)bzC8 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�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 WyW5@*99~8M0000 p.scene.arena.biomeType === Biome.TOWN || p.scene.arena.biomeType === Biome.PLAINS || p.scene.arena.biomeType === Biome.GRASS || p.scene.arena.biomeType === Biome.TALL_GRASS || p.scene.arena.biomeType === Biome.METROPOLIS), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, '', 'ruby-cream', 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.BADLANDS || p.scene.arena.biomeType === Biome.VOLCANO || p.scene.arena.biomeType === Biome.GRAVEYARD || p.scene.arena.biomeType === Biome.FACTORY || p.scene.arena.biomeType === Biome.SLUM), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, '', 'matcha-cream', 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.FOREST || p.scene.arena.biomeType === Biome.SWAMP || p.scene.arena.biomeType === Biome.MEADOW || p.scene.arena.biomeType === Biome.JUNGLE), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, '', 'mint-cream', 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.SEA || p.scene.arena.biomeType === Biome.BEACH || p.scene.arena.biomeType === Biome.LAKE || p.scene.arena.biomeType === Biome.SEABED), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, '', 'lemon-cream', 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.DESERT || p.scene.arena.biomeType === Biome.POWER_PLANT || p.scene.arena.biomeType === Biome.DOJO || p.scene.arena.biomeType === Biome.RUINS || p.scene.arena.biomeType === Biome.CONSTRUCTION_SITE), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, '', 'salted-cream', 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.MOUNTAIN || p.scene.arena.biomeType === Biome.CAVE || p.scene.arena.biomeType === Biome.ICE_CAVE || p.scene.arena.biomeType === Biome.FAIRY_CAVE || p.scene.arena.biomeType === Biome.SNOWY_FOREST), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, '', 'ruby-swirl', 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.WASTELAND || p.scene.arena.biomeType === Biome.LABORATORY), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, '', 'caramel-swirl', 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.TEMPLE || p.scene.arena.biomeType === Biome.ISLAND), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALCREMIE, '', 'rainbow-swirl', 1, EvolutionItem.STRAWBERRY_SWEET, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.ABYSS || p.scene.arena.biomeType === Biome.SPACE || p.scene.arena.biomeType === Biome.END), SpeciesWildEvolutionDelay.LONG) ], [Species.DURALUDON]: [ new SpeciesFormEvolution(Species.ARCHALUDON, '', '', 1, EvolutionItem.METAL_ALLOY, null, SpeciesWildEvolutionDelay.VERY_LONG) diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index e8dbef822d5..421488629ae 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -630,7 +630,15 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.GRIMMSNARL, '', SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], [Species.ALCREMIE]: [ - new SpeciesFormChange(Species.ALCREMIE, 'vanilla-cream', SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) + new SpeciesFormChange(Species.ALCREMIE, 'vanilla-cream', SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(Species.ALCREMIE, 'ruby-cream', SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(Species.ALCREMIE, 'matcha-cream', SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(Species.ALCREMIE, 'mint-cream', SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(Species.ALCREMIE, 'lemon-cream', SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(Species.ALCREMIE, 'salted-cream', SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(Species.ALCREMIE, 'ruby-swirl', SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(Species.ALCREMIE, 'caramel-swirl', SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), + new SpeciesFormChange(Species.ALCREMIE, 'rainbow-swirl', SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], [Species.MORPEKO]: [ new SpeciesFormChange(Species.MORPEKO, 'full-belly', 'hangry', new SpeciesFormChangeManualTrigger(), true), diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index fb156dc7e4f..f1c1e8bbbe2 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -2209,14 +2209,14 @@ export function initSpecies() { new PokemonSpecies(Species.MILCERY, 8, false, false, false, "Cream Pokémon", Type.FAIRY, null, 0.2, 0.3, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 270, 45, 40, 40, 50, 61, 34, 200, 50, 54, GrowthRate.MEDIUM_FAST, 0, false), new PokemonSpecies(Species.ALCREMIE, 8, false, false, false, "Cream Pokémon", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, GrowthRate.MEDIUM_FAST, 0, false, true, new PokemonForm("Vanilla Cream", "vanilla-cream", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, ""), - new PokemonForm("Ruby Cream", "ruby-cream", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, ""), - new PokemonForm("Matcha Cream", "matcha-cream", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, ""), - new PokemonForm("Mint Cream", "mint-cream", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, ""), - new PokemonForm("Lemon Cream", "lemon-cream", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, ""), - new PokemonForm("Salted Cream", "salted-cream", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, ""), - new PokemonForm("Ruby Swirl", "ruby-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, ""), - new PokemonForm("Caramel Swirl", "caramel-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, ""), - new PokemonForm("Rainbow Swirl", "rainbow-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, ""), + new PokemonForm("Ruby Cream", "ruby-cream", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false), + new PokemonForm("Matcha Cream", "matcha-cream", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false), + new PokemonForm("Mint Cream", "mint-cream", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false), + new PokemonForm("Lemon Cream", "lemon-cream", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false), + new PokemonForm("Salted Cream", "salted-cream", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false), + new PokemonForm("Ruby Swirl", "ruby-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false), + new PokemonForm("Caramel Swirl", "caramel-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false), + new PokemonForm("Rainbow Swirl", "rainbow-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false), new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FAIRY, null, 30, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 595, 80, 70, 85, 140, 150, 65, 100, 50, 173), ), new PokemonSpecies(Species.FALINKS, 8, false, false, false, "Formation Pokémon", Type.FIGHTING, null, 3, 62, Abilities.BATTLE_ARMOR, Abilities.NONE, Abilities.DEFIANT, 470, 65, 100, 100, 70, 60, 75, 45, 50, 165, GrowthRate.MEDIUM_FAST, null, false), From 116bf7ee18d98cc9875c63749f487fa9768ba0a9 Mon Sep 17 00:00:00 2001 From: Dario Krause Date: Mon, 29 Apr 2024 14:23:13 +0200 Subject: [PATCH 018/110] Gen 1 de local --- src/locales/de/pokemon.ts | 232 +++++++++++++++++++------------------- 1 file changed, 116 insertions(+), 116 deletions(-) diff --git a/src/locales/de/pokemon.ts b/src/locales/de/pokemon.ts index 09be8894eb4..38b5259a067 100644 --- a/src/locales/de/pokemon.ts +++ b/src/locales/de/pokemon.ts @@ -1,156 +1,156 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const pokemon: SimpleTranslationEntries = { - "bulbasaur": "Bulbasaur", - "ivysaur": "Ivysaur", - "venusaur": "Venusaur", - "charmander": "Charmander", - "charmeleon": "Charmeleon", - "charizard": "Charizard", - "squirtle": "Squirtle", - "wartortle": "Wartortle", - "blastoise": "Blastoise", - "caterpie": "Caterpie", - "metapod": "Metapod", - "butterfree": "Butterfree", - "weedle": "Weedle", - "kakuna": "Kakuna", - "beedrill": "Beedrill", - "pidgey": "Pidgey", - "pidgeotto": "Pidgeotto", - "pidgeot": "Pidgeot", - "rattata": "Rattata", - "raticate": "Raticate", - "spearow": "Spearow", - "fearow": "Fearow", - "ekans": "Ekans", + "bulbasaur": "Bisasam", + "ivysaur": "Bisaknosp", + "venusaur": "Bisaflor", + "charmander": "Glumanda", + "charmeleon": "Glutexo", + "charizard": "Glurak", + "squirtle": "Schiggy", + "wartortle": "Schillok", + "blastoise": "Turtok", + "caterpie": "Raupy", + "metapod": "Safcon", + "butterfree": "Smettbo", + "weedle": "Hornliu", + "kakuna": "Kokuna", + "beedrill": "Bibor", + "pidgey": "Taubsi", + "pidgeotto": "Tauboga", + "pidgeot": "Tauboss", + "rattata": "Rattfratz", + "raticate": "Rattikarl", + "spearow": "Habitak", + "fearow": "Ibitak", + "ekans": "Rettan", "arbok": "Arbok", "pikachu": "Pikachu", "raichu": "Raichu", - "sandshrew": "Sandshrew", - "sandslash": "Sandslash", + "sandshrew": "Sandan", + "sandslash": "Sandamer", "nidoran_f": "Nidoran♀", "nidorina": "Nidorina", "nidoqueen": "Nidoqueen", "nidoran_m": "Nidoran♂", "nidorino": "Nidorino", "nidoking": "Nidoking", - "clefairy": "Clefairy", - "clefable": "Clefable", + "clefairy": "Piepi", + "clefable": "Pixi", "vulpix": "Vulpix", - "ninetales": "Ninetales", - "jigglypuff": "Jigglypuff", - "wigglytuff": "Wigglytuff", + "ninetales": "Vulnona", + "jigglypuff": "Pummeluff", + "wigglytuff": "Knuddeluff", "zubat": "Zubat", "golbat": "Golbat", - "oddish": "Oddish", - "gloom": "Gloom", - "vileplume": "Vileplume", + "oddish": "Myrapla", + "gloom": "Duflor", + "vileplume": "Giflor", "paras": "Paras", - "parasect": "Parasect", - "venonat": "Venonat", - "venomoth": "Venomoth", - "diglett": "Diglett", - "dugtrio": "Dugtrio", - "meowth": "Meowth", - "persian": "Persian", - "psyduck": "Psyduck", - "golduck": "Golduck", - "mankey": "Mankey", - "primeape": "Primeape", - "growlithe": "Growlithe", - "arcanine": "Arcanine", - "poliwag": "Poliwag", - "poliwhirl": "Poliwhirl", - "poliwrath": "Poliwrath", + "parasect": "Parasek", + "venonat": "Bluzuk", + "venomoth": "Omot", + "diglett": "Digda", + "dugtrio": "Digdri", + "meowth": "Mauzi", + "persian": "Snobilikat", + "psyduck": "Enton", + "golduck": "Entoron", + "mankey": "Menki", + "primeape": "Rasaff", + "growlithe": "Fukano", + "arcanine": "Arkani", + "poliwag": "Quapsel", + "poliwhirl": "Quaputzi", + "poliwrath": "Quappo", "abra": "Abra", "kadabra": "Kadabra", - "alakazam": "Alakazam", - "machop": "Machop", - "machoke": "Machoke", - "machamp": "Machamp", - "bellsprout": "Bellsprout", - "weepinbell": "Weepinbell", - "victreebel": "Victreebel", - "tentacool": "Tentacool", - "tentacruel": "Tentacruel", - "geodude": "Geodude", - "graveler": "Graveler", - "golem": "Golem", - "ponyta": "Ponyta", - "rapidash": "Rapidash", - "slowpoke": "Slowpoke", - "slowbro": "Slowbro", - "magnemite": "Magnemite", + "alakazam": "Simsala", + "machop": "Machollo", + "machoke": "Maschock", + "machamp": "Machomei", + "bellsprout": "Knofensa", + "weepinbell": "Ultrigaria", + "victreebel": "Sarzenia", + "tentacool": "Tentacha", + "tentacruel": "Tentoxa", + "geodude": "Kleinstein", + "graveler": "Georok", + "golem": "Geowaz", + "ponyta": "Ponita", + "rapidash": "Gallopa", + "slowpoke": "Flegmon", + "slowbro": "Lahmus", + "magnemite": "Magnetilo", "magneton": "Magneton", - "farfetchd": "Farfetch'd", - "doduo": "Doduo", - "dodrio": "Dodrio", - "seel": "Seel", - "dewgong": "Dewgong", - "grimer": "Grimer", - "muk": "Muk", - "shellder": "Shellder", - "cloyster": "Cloyster", - "gastly": "Gastly", - "haunter": "Haunter", + "farfetchd": "Porenta", + "doduo": "Dodu", + "dodrio": "Dodri", + "seel": "Jurob", + "dewgong": "Jugong", + "grimer": "Sleima", + "muk": "Sleimok", + "shellder": "Muschas", + "cloyster": "Austos", + "gastly": "Nebulak", + "haunter": "Alpollo", "gengar": "Gengar", "onix": "Onix", - "drowzee": "Drowzee", + "drowzee": "Traumato", "hypno": "Hypno", "krabby": "Krabby", "kingler": "Kingler", - "voltorb": "Voltorb", - "electrode": "Electrode", - "exeggcute": "Exeggcute", - "exeggutor": "Exeggutor", - "cubone": "Cubone", - "marowak": "Marowak", - "hitmonlee": "Hitmonlee", - "hitmonchan": "Hitmonchan", - "lickitung": "Lickitung", - "koffing": "Koffing", - "weezing": "Weezing", - "rhyhorn": "Rhyhorn", - "rhydon": "Rhydon", - "chansey": "Chansey", + "voltorb": "Voltobal", + "electrode": "Lektrobal", + "exeggcute": "Owei", + "exeggutor": "Kokowei", + "cubone": "Tragosso", + "marowak": "Knogga", + "hitmonlee": "Kicklee", + "hitmonchan": "Nockchan", + "lickitung": "Schlurp", + "koffing": "Smogon", + "weezing": "Smogmog", + "rhyhorn": "Rihorn", + "rhydon": "Rizeros", + "chansey": "Chaneira", "tangela": "Tangela", - "kangaskhan": "Kangaskhan", - "horsea": "Horsea", - "seadra": "Seadra", - "goldeen": "Goldeen", - "seaking": "Seaking", - "staryu": "Staryu", + "kangaskhan": "Kangama", + "horsea": "Seeper", + "seadra": "Seemon", + "goldeen": "Goldini", + "seaking": "Golking", + "staryu": "Sterndu", "starmie": "Starmie", - "mr_mime": "Mr. Mime", - "scyther": "Scyther", - "jynx": "Jynx", - "electabuzz": "Electabuzz", + "mr_mime": "Pantimos", + "scyther": "Sichlor", + "jynx": "Rossana", + "electabuzz": "Elektek", "magmar": "Magmar", "pinsir": "Pinsir", "tauros": "Tauros", - "magikarp": "Magikarp", - "gyarados": "Gyarados", + "magikarp": "Karpador", + "gyarados": "Garados", "lapras": "Lapras", "ditto": "Ditto", - "eevee": "Eevee", - "vaporeon": "Vaporeon", - "jolteon": "Jolteon", - "flareon": "Flareon", + "eevee": "Evoli", + "vaporeon": "Aquana", + "jolteon": "Blitza", + "flareon": "Flamara", "porygon": "Porygon", - "omanyte": "Omanyte", - "omastar": "Omastar", + "omanyte": "Amonitas", + "omastar": "Amoroso", "kabuto": "Kabuto", "kabutops": "Kabutops", "aerodactyl": "Aerodactyl", - "snorlax": "Snorlax", - "articuno": "Articuno", + "snorlax": "Relaxo", + "articuno": "Arktos", "zapdos": "Zapdos", - "moltres": "Moltres", + "moltres": "Lavados", "dratini": "Dratini", - "dragonair": "Dragonair", - "dragonite": "Dragonite", - "mewtwo": "Mewtwo", + "dragonair": "Dragonir", + "dragonite": "Dragoran", + "mewtwo": "Mewtu", "mew": "Mew", "chikorita": "Chikorita", "bayleef": "Bayleef", From d93b6632c85ace34353986a670b08201cf650b23 Mon Sep 17 00:00:00 2001 From: Dario Krause Date: Mon, 29 Apr 2024 15:19:52 +0200 Subject: [PATCH 019/110] Gen 2, 3 de local --- src/locales/de/pokemon.ts | 314 +++++++++++++++++++------------------- 1 file changed, 157 insertions(+), 157 deletions(-) diff --git a/src/locales/de/pokemon.ts b/src/locales/de/pokemon.ts index 38b5259a067..08fdbf01d02 100644 --- a/src/locales/de/pokemon.ts +++ b/src/locales/de/pokemon.ts @@ -152,229 +152,229 @@ export const pokemon: SimpleTranslationEntries = { "dragonite": "Dragoran", "mewtwo": "Mewtu", "mew": "Mew", - "chikorita": "Chikorita", - "bayleef": "Bayleef", - "meganium": "Meganium", - "cyndaquil": "Cyndaquil", - "quilava": "Quilava", - "typhlosion": "Typhlosion", - "totodile": "Totodile", - "croconaw": "Croconaw", - "feraligatr": "Feraligatr", - "sentret": "Sentret", - "furret": "Furret", + "chikorita": "Endivie", + "bayleef": "Lorblatt", + "meganium": "Meganie", + "cyndaquil": "Feurigel", + "quilava": "Igelavar", + "typhlosion": "Tornupto", + "totodile": "Karnimani", + "croconaw": "Tyracroc", + "feraligatr": "Impergator", + "sentret": "Wiesor", + "furret": "Wiesenior", "hoothoot": "Hoothoot", - "noctowl": "Noctowl", + "noctowl": "Noctuh", "ledyba": "Ledyba", "ledian": "Ledian", - "spinarak": "Spinarak", + "spinarak": "Webarak", "ariados": "Ariados", - "crobat": "Crobat", - "chinchou": "Chinchou", + "crobat": "Iksbat", + "chinchou": "Lampi", "lanturn": "Lanturn", "pichu": "Pichu", - "cleffa": "Cleffa", - "igglybuff": "Igglybuff", + "cleffa": "Pii", + "igglybuff": "Fluffeluff", "togepi": "Togepi", "togetic": "Togetic", "natu": "Natu", "xatu": "Xatu", - "mareep": "Mareep", - "flaaffy": "Flaaffy", + "mareep": "Voltilamm", + "flaaffy": "Waaty", "ampharos": "Ampharos", - "bellossom": "Bellossom", + "bellossom": "Blubella", "marill": "Marill", "azumarill": "Azumarill", - "sudowoodo": "Sudowoodo", - "politoed": "Politoed", - "hoppip": "Hoppip", - "skiploom": "Skiploom", - "jumpluff": "Jumpluff", - "aipom": "Aipom", - "sunkern": "Sunkern", - "sunflora": "Sunflora", + "sudowoodo": "Mogelbaum", + "politoed": "Quaxo", + "hoppip": "Hoppspross", + "skiploom": "Hubelupf", + "jumpluff": "Papungha", + "aipom": "Griffel", + "sunkern": "Sonnkern", + "sunflora": "Sonnflora", "yanma": "Yanma", - "wooper": "Wooper", - "quagsire": "Quagsire", - "espeon": "Espeon", - "umbreon": "Umbreon", - "murkrow": "Murkrow", - "slowking": "Slowking", - "misdreavus": "Misdreavus", - "unown": "Unown", - "wobbuffet": "Wobbuffet", + "wooper": "Felino", + "quagsire": "Morlord", + "espeon": "Psiana", + "umbreon": "Nachtara", + "murkrow": "Kramurx", + "slowking": "Laschoking", + "misdreavus": "Traunfugil", + "unown": "Icognito", + "wobbuffet": "Woingenau", "girafarig": "Girafarig", - "pineco": "Pineco", - "forretress": "Forretress", - "dunsparce": "Dunsparce", - "gligar": "Gligar", - "steelix": "Steelix", + "pineco": "Tannza", + "forretress": "Forstellka", + "dunsparce": "Dummisel", + "gligar": "Skorgla", + "steelix": "Stahlos", "snubbull": "Snubbull", "granbull": "Granbull", - "qwilfish": "Qwilfish", - "scizor": "Scizor", - "shuckle": "Shuckle", - "heracross": "Heracross", - "sneasel": "Sneasel", + "qwilfish": "Baldorfish", + "scizor": "Scherox", + "shuckle": "Pottrott", + "heracross": "Skaraborn", + "sneasel": "Sniebel", "teddiursa": "Teddiursa", "ursaring": "Ursaring", - "slugma": "Slugma", + "slugma": "Schneckmag", "magcargo": "Magcargo", - "swinub": "Swinub", - "piloswine": "Piloswine", - "corsola": "Corsola", + "swinub": "Quiekel", + "piloswine": "Keifel", + "corsola": "Corasonn", "remoraid": "Remoraid", "octillery": "Octillery", - "delibird": "Delibird", - "mantine": "Mantine", - "skarmory": "Skarmory", - "houndour": "Houndour", - "houndoom": "Houndoom", - "kingdra": "Kingdra", + "delibird": "Botogel", + "mantine": "Mantax", + "skarmory": "Panzaeron", + "houndour": "Hunduster", + "houndoom": "Hundemon", + "kingdra": "Seedraking", "phanpy": "Phanpy", "donphan": "Donphan", "porygon2": "Porygon2", - "stantler": "Stantler", - "smeargle": "Smeargle", - "tyrogue": "Tyrogue", - "hitmontop": "Hitmontop", - "smoochum": "Smoochum", + "stantler": "Damhirplex", + "smeargle": "Farbeagle", + "tyrogue": "Rabauz", + "hitmontop": "Kapoera", + "smoochum": "Kussilla", "elekid": "Elekid", "magby": "Magby", "miltank": "Miltank", - "blissey": "Blissey", + "blissey": "Heiteira", "raikou": "Raikou", "entei": "Entei", "suicune": "Suicune", "larvitar": "Larvitar", "pupitar": "Pupitar", - "tyranitar": "Tyranitar", + "tyranitar": "Despotar", "lugia": "Lugia", "ho_oh": "Ho-Oh", "celebi": "Celebi", - "treecko": "Treecko", - "grovyle": "Grovyle", - "sceptile": "Sceptile", - "torchic": "Torchic", - "combusken": "Combusken", - "blaziken": "Blaziken", - "mudkip": "Mudkip", - "marshtomp": "Marshtomp", - "swampert": "Swampert", - "poochyena": "Poochyena", - "mightyena": "Mightyena", - "zigzagoon": "Zigzagoon", - "linoone": "Linoone", - "wurmple": "Wurmple", - "silcoon": "Silcoon", - "beautifly": "Beautifly", - "cascoon": "Cascoon", - "dustox": "Dustox", - "lotad": "Lotad", - "lombre": "Lombre", - "ludicolo": "Ludicolo", - "seedot": "Seedot", - "nuzleaf": "Nuzleaf", - "shiftry": "Shiftry", - "taillow": "Taillow", - "swellow": "Swellow", + "treecko": "Geckarbor", + "grovyle": "Reptain", + "sceptile": "Gewaldro", + "torchic": "Flemmli", + "combusken": "Jungglut", + "blaziken": "Lohgock", + "mudkip": "Hydropi", + "marshtomp": "Moorabbel", + "swampert": "Sumpex", + "poochyena": "Fiffyen", + "mightyena": "Magnayen", + "zigzagoon": "Zigzachs", + "linoone": "Geradaks", + "wurmple": "Waumpel", + "silcoon": "Schaloko", + "beautifly": "Papinella", + "cascoon": "Panekon", + "dustox": "Pudox", + "lotad": "Loturzel", + "lombre": "Lombrero", + "ludicolo": "Kappalores", + "seedot": "Samurzel", + "nuzleaf": "Blanas", + "shiftry": "Tengulist", + "taillow": "Schwalbini", + "swellow": "Schwalboss", "wingull": "Wingull", "pelipper": "Pelipper", - "ralts": "Ralts", + "ralts": "Trasla", "kirlia": "Kirlia", "gardevoir": "Gardevoir", - "surskit": "Surskit", - "masquerain": "Masquerain", - "shroomish": "Shroomish", - "breloom": "Breloom", - "slakoth": "Slakoth", - "vigoroth": "Vigoroth", - "slaking": "Slaking", + "surskit": "Geweiher", + "masquerain": "Maskeregen", + "shroomish": "Knilz", + "breloom": "Kapilz", + "slakoth": "Bummelz", + "vigoroth": "Muntier", + "slaking": "Letarking", "nincada": "Nincada", "ninjask": "Ninjask", - "shedinja": "Shedinja", - "whismur": "Whismur", - "loudred": "Loudred", - "exploud": "Exploud", + "shedinja": "Ninjatom", + "whismur": "Flurmel", + "loudred": "Krakeelo", + "exploud": "Krawumms", "makuhita": "Makuhita", "hariyama": "Hariyama", "azurill": "Azurill", - "nosepass": "Nosepass", - "skitty": "Skitty", - "delcatty": "Delcatty", - "sableye": "Sableye", - "mawile": "Mawile", - "aron": "Aron", - "lairon": "Lairon", - "aggron": "Aggron", + "nosepass": "Nasgnet", + "skitty": "Eneco", + "delcatty": "Enekoro", + "sableye": "Zobiris", + "mawile": "Flunkifer", + "aron": "Stollunior", + "lairon": "Stollrak", + "aggron": "Stolloss", "meditite": "Meditite", - "medicham": "Medicham", - "electrike": "Electrike", - "manectric": "Manectric", + "medicham": "Meditalis", + "electrike": "Frizelbliz", + "manectric": "Voltenso", "plusle": "Plusle", "minun": "Minun", "volbeat": "Volbeat", "illumise": "Illumise", "roselia": "Roselia", - "gulpin": "Gulpin", - "swalot": "Swalot", - "carvanha": "Carvanha", - "sharpedo": "Sharpedo", + "gulpin": "Schluppuck", + "swalot": "Schluckwech", + "carvanha": "Kanivanha", + "sharpedo": "Tohaido", "wailmer": "Wailmer", "wailord": "Wailord", - "numel": "Numel", + "numel": "Camaub", "camerupt": "Camerupt", - "torkoal": "Torkoal", + "torkoal": "Qurtel", "spoink": "Spoink", - "grumpig": "Grumpig", - "spinda": "Spinda", - "trapinch": "Trapinch", + "grumpig": "Groink", + "spinda": "Pandir", + "trapinch": "Knacklion", "vibrava": "Vibrava", - "flygon": "Flygon", - "cacnea": "Cacnea", - "cacturne": "Cacturne", - "swablu": "Swablu", + "flygon": "Libelldra", + "cacnea": "Tuska", + "cacturne": "Noktuska", + "swablu": "Wablu", "altaria": "Altaria", - "zangoose": "Zangoose", - "seviper": "Seviper", - "lunatone": "Lunatone", - "solrock": "Solrock", - "barboach": "Barboach", - "whiscash": "Whiscash", - "corphish": "Corphish", - "crawdaunt": "Crawdaunt", - "baltoy": "Baltoy", - "claydol": "Claydol", - "lileep": "Lileep", - "cradily": "Cradily", + "zangoose": "Sengo", + "seviper": "Vipitis", + "lunatone": "Lunastein", + "solrock": "Sonnfel", + "barboach": "Schmerbe", + "whiscash": "Welsar", + "corphish": "Krebscorps", + "crawdaunt": "Krebutack", + "baltoy": "Puppance", + "claydol": "Lepumentas", + "lileep": "Liliep", + "cradily": "Wielie", "anorith": "Anorith", "armaldo": "Armaldo", - "feebas": "Feebas", + "feebas": "Barschwa", "milotic": "Milotic", - "castform": "Castform", + "castform": "Formeo", "kecleon": "Kecleon", "shuppet": "Shuppet", "banette": "Banette", - "duskull": "Duskull", - "dusclops": "Dusclops", + "duskull": "Zwirrlicht", + "dusclops": "Zwirrklop", "tropius": "Tropius", - "chimecho": "Chimecho", + "chimecho": "Palimpalim", "absol": "Absol", - "wynaut": "Wynaut", - "snorunt": "Snorunt", - "glalie": "Glalie", - "spheal": "Spheal", - "sealeo": "Sealeo", - "walrein": "Walrein", - "clamperl": "Clamperl", - "huntail": "Huntail", - "gorebyss": "Gorebyss", + "wynaut": "Isso", + "snorunt": "Schneppke", + "glalie": "Firnontor", + "spheal": "Seemops", + "sealeo": "Seejong", + "walrein": "Walraisa", + "clamperl": "Perlu", + "huntail": "Aalabyss", + "gorebyss": "Saganabyss", "relicanth": "Relicanth", - "luvdisc": "Luvdisc", - "bagon": "Bagon", - "shelgon": "Shelgon", - "salamence": "Salamence", - "beldum": "Beldum", + "luvdisc": "Liebiskus", + "bagon": "Kindwurm", + "shelgon": "Draschel", + "salamence": "Brutalanda", + "beldum": "Tanhel", "metang": "Metang", "metagross": "Metagross", "regirock": "Regirock", From 3b83d0b4d996614001f44ab03e5b922d26271c05 Mon Sep 17 00:00:00 2001 From: ElMoustacho Date: Mon, 29 Apr 2024 18:35:18 +0300 Subject: [PATCH 020/110] =?UTF-8?q?Fix=20typo=20in=20french=20names=20for?= =?UTF-8?q?=20a=20few=20pok=C3=A9mon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/fr/pokemon.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/locales/fr/pokemon.ts b/src/locales/fr/pokemon.ts index fa543852b19..fc0ed5e1074 100644 --- a/src/locales/fr/pokemon.ts +++ b/src/locales/fr/pokemon.ts @@ -75,7 +75,7 @@ export const pokemon: SimpleTranslationEntries = { "tentacool": "Tentacool", "tentacruel": "Tentacruel", "geodude": "Racaillou", - "graveler": "Gravalanche", + "graveler": "Gravalanch", "golem": "Grolem", "ponyta": "Ponyta", "rapidash": "Galopa", @@ -279,7 +279,7 @@ export const pokemon: SimpleTranslationEntries = { "taillow": "Nirondelle", "swellow": "Hélédelle", "wingull": "Goélise", - "pelipper": "Békipan", + "pelipper": "Bekipan", "ralts": "Tarsal", "kirlia": "Kirlia", "gardevoir": "Gardevoir", @@ -307,7 +307,7 @@ export const pokemon: SimpleTranslationEntries = { "aron": "Galekid", "lairon": "Galegon", "aggron": "Galeking", - "meditite": "Méditika", + "meditite": "Méditikka", "medicham": "Charmina", "electrike": "Dynavolt", "manectric": "Élecsprint", @@ -573,7 +573,7 @@ export const pokemon: SimpleTranslationEntries = { "zorua": "Zorua", "zoroark": "Zoroark", "minccino": "Chinchidou", - "cinccino": "Pasmilla", + "cinccino": "Pashmilla", "gothita": "Scrutella", "gothorita": "Mesmérella", "gothitelle": "Sidérella", @@ -766,7 +766,7 @@ export const pokemon: SimpleTranslationEntries = { "tsareena": "Sucreine", "comfey": "Guérilande", "oranguru": "Gouroutan", - "passimian": "Quatermac", + "passimian": "Quartermac", "wimpod": "Sovkipou", "golisopod": "Sarmuraï", "sandygast": "Bacabouh", From 9575054010d16e9cfad1b5f9fe9434a7b8d42502 Mon Sep 17 00:00:00 2001 From: Thomas David <66013753+Kiriox94@users.noreply.github.com> Date: Mon, 29 Apr 2024 18:33:18 +0200 Subject: [PATCH 021/110] Implement localisation for tutorial (#330) * Implement localisation for tutorial * Fix modules name * Fix keys name * Fix keys name part 2 : the return * Add lines breaks in localisation files --- src/locales/de/tutorial.ts | 38 ++++++++++++++++++++++++++++++++++++++ src/locales/en/tutorial.ts | 38 ++++++++++++++++++++++++++++++++++++++ src/locales/es/tutorial.ts | 38 ++++++++++++++++++++++++++++++++++++++ src/locales/fr/tutorial.ts | 38 ++++++++++++++++++++++++++++++++++++++ src/locales/it/tutorial.ts | 38 ++++++++++++++++++++++++++++++++++++++ src/plugins/i18n.ts | 12 ++++++++++++ src/tutorial.ts | 38 +++++++++----------------------------- 7 files changed, 211 insertions(+), 29 deletions(-) create mode 100644 src/locales/de/tutorial.ts create mode 100644 src/locales/en/tutorial.ts create mode 100644 src/locales/es/tutorial.ts create mode 100644 src/locales/fr/tutorial.ts create mode 100644 src/locales/it/tutorial.ts diff --git a/src/locales/de/tutorial.ts b/src/locales/de/tutorial.ts new file mode 100644 index 00000000000..2722c02ad45 --- /dev/null +++ b/src/locales/de/tutorial.ts @@ -0,0 +1,38 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const tutorial: SimpleTranslationEntries = { + "intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. + $This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. + $The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. + $If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, + + "accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, + + "menu": `From this menu you can access the settings. + $From the settings you can change game speed, window style, and other options. + $There are also various other features here, so be sure to check them all!`, + + "starterSelect": `From this screen, you can select your starters.\nThese are your initial party members. + $Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. + $You can also select gender, ability, and form depending on\nthe variants you've caught or hatched. + $The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`, + + "pokerus": `A daily random 3 selectable starters have a purple border. + $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + + "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. + $These range from consumables, to Pokémon held items, to passive permanent items. + $Most non-consumable item effects will stack in various ways. + $Some items will only show up if they can be used, such as evolution items. + $You can also transfer held items between Pokémon using the transfer option. + $The transfer option will appear in the bottom right once you have obtained a held item. + $You may purchase consumable items with money, and a larger variety will be available the further you get. + $Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`, + + "eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs. + $Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. + $Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. + $Pokémon hatched from eggs generally have better IVs than\nwild Pokémon. + $Some Pokémon can only even be obtained from eggs. + $There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`, +} as const; \ No newline at end of file diff --git a/src/locales/en/tutorial.ts b/src/locales/en/tutorial.ts new file mode 100644 index 00000000000..2722c02ad45 --- /dev/null +++ b/src/locales/en/tutorial.ts @@ -0,0 +1,38 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const tutorial: SimpleTranslationEntries = { + "intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. + $This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. + $The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. + $If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, + + "accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, + + "menu": `From this menu you can access the settings. + $From the settings you can change game speed, window style, and other options. + $There are also various other features here, so be sure to check them all!`, + + "starterSelect": `From this screen, you can select your starters.\nThese are your initial party members. + $Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. + $You can also select gender, ability, and form depending on\nthe variants you've caught or hatched. + $The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`, + + "pokerus": `A daily random 3 selectable starters have a purple border. + $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + + "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. + $These range from consumables, to Pokémon held items, to passive permanent items. + $Most non-consumable item effects will stack in various ways. + $Some items will only show up if they can be used, such as evolution items. + $You can also transfer held items between Pokémon using the transfer option. + $The transfer option will appear in the bottom right once you have obtained a held item. + $You may purchase consumable items with money, and a larger variety will be available the further you get. + $Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`, + + "eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs. + $Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. + $Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. + $Pokémon hatched from eggs generally have better IVs than\nwild Pokémon. + $Some Pokémon can only even be obtained from eggs. + $There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`, +} as const; \ No newline at end of file diff --git a/src/locales/es/tutorial.ts b/src/locales/es/tutorial.ts new file mode 100644 index 00000000000..2722c02ad45 --- /dev/null +++ b/src/locales/es/tutorial.ts @@ -0,0 +1,38 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const tutorial: SimpleTranslationEntries = { + "intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. + $This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. + $The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. + $If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, + + "accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, + + "menu": `From this menu you can access the settings. + $From the settings you can change game speed, window style, and other options. + $There are also various other features here, so be sure to check them all!`, + + "starterSelect": `From this screen, you can select your starters.\nThese are your initial party members. + $Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. + $You can also select gender, ability, and form depending on\nthe variants you've caught or hatched. + $The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`, + + "pokerus": `A daily random 3 selectable starters have a purple border. + $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + + "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. + $These range from consumables, to Pokémon held items, to passive permanent items. + $Most non-consumable item effects will stack in various ways. + $Some items will only show up if they can be used, such as evolution items. + $You can also transfer held items between Pokémon using the transfer option. + $The transfer option will appear in the bottom right once you have obtained a held item. + $You may purchase consumable items with money, and a larger variety will be available the further you get. + $Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`, + + "eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs. + $Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. + $Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. + $Pokémon hatched from eggs generally have better IVs than\nwild Pokémon. + $Some Pokémon can only even be obtained from eggs. + $There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`, +} as const; \ No newline at end of file diff --git a/src/locales/fr/tutorial.ts b/src/locales/fr/tutorial.ts new file mode 100644 index 00000000000..2722c02ad45 --- /dev/null +++ b/src/locales/fr/tutorial.ts @@ -0,0 +1,38 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const tutorial: SimpleTranslationEntries = { + "intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. + $This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. + $The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. + $If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, + + "accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, + + "menu": `From this menu you can access the settings. + $From the settings you can change game speed, window style, and other options. + $There are also various other features here, so be sure to check them all!`, + + "starterSelect": `From this screen, you can select your starters.\nThese are your initial party members. + $Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. + $You can also select gender, ability, and form depending on\nthe variants you've caught or hatched. + $The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`, + + "pokerus": `A daily random 3 selectable starters have a purple border. + $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + + "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. + $These range from consumables, to Pokémon held items, to passive permanent items. + $Most non-consumable item effects will stack in various ways. + $Some items will only show up if they can be used, such as evolution items. + $You can also transfer held items between Pokémon using the transfer option. + $The transfer option will appear in the bottom right once you have obtained a held item. + $You may purchase consumable items with money, and a larger variety will be available the further you get. + $Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`, + + "eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs. + $Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. + $Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. + $Pokémon hatched from eggs generally have better IVs than\nwild Pokémon. + $Some Pokémon can only even be obtained from eggs. + $There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`, +} as const; \ No newline at end of file diff --git a/src/locales/it/tutorial.ts b/src/locales/it/tutorial.ts new file mode 100644 index 00000000000..2722c02ad45 --- /dev/null +++ b/src/locales/it/tutorial.ts @@ -0,0 +1,38 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const tutorial: SimpleTranslationEntries = { + "intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. + $This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. + $The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. + $If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, + + "accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, + + "menu": `From this menu you can access the settings. + $From the settings you can change game speed, window style, and other options. + $There are also various other features here, so be sure to check them all!`, + + "starterSelect": `From this screen, you can select your starters.\nThese are your initial party members. + $Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. + $You can also select gender, ability, and form depending on\nthe variants you've caught or hatched. + $The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`, + + "pokerus": `A daily random 3 selectable starters have a purple border. + $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + + "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. + $These range from consumables, to Pokémon held items, to passive permanent items. + $Most non-consumable item effects will stack in various ways. + $Some items will only show up if they can be used, such as evolution items. + $You can also transfer held items between Pokémon using the transfer option. + $The transfer option will appear in the bottom right once you have obtained a held item. + $You may purchase consumable items with money, and a larger variety will be available the further you get. + $Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`, + + "eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs. + $Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. + $Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. + $Pokémon hatched from eggs generally have better IVs than\nwild Pokémon. + $Some Pokémon can only even be obtained from eggs. + $There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`, +} as const; \ No newline at end of file diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index adc1f3d5295..b12bda1f419 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -45,6 +45,12 @@ import { commandUiHandler as deCommandUiHandler } from '../locales/de/command-ui import { fightUiHandler as enFightUiHandler } from '../locales/en/fight-ui-handler'; import { fightUiHandler as frFightUiHandler } from '../locales/fr/fight-ui-handler'; +import { tutorial as enTutorial } from '../locales/en/tutorial'; +import { tutorial as esTutorial } from '../locales/es/tutorial'; +import { tutorial as frTutorial } from '../locales/fr/tutorial'; +import { tutorial as itTutorial} from '../locales/it/tutorial'; +import { tutorial as deTutorial } from '../locales/de/tutorial'; + export interface SimpleTranslationEntries { [key: string]: string } @@ -113,6 +119,7 @@ export function initI18n(): void { pokemonStat: enPokemonStat, commandUiHandler: enCommandUiHandler, fightUiHandler: enFightUiHandler, + tutorial: enTutorial, }, es: { menu: esMenu, @@ -123,6 +130,7 @@ export function initI18n(): void { pokemon: esPokemon, pokemonStat: esPokemonStat, commandUiHandler: esCommandUiHandler, + tutorial: esTutorial, }, fr: { menu: frMenu, @@ -134,11 +142,13 @@ export function initI18n(): void { pokemonStat: frPokemonStat, commandUiHandler: frCommandUiHandler, fightUiHandler: frFightUiHandler, + tutorial: frTutorial, }, it: { menu: itMenu, menuUiHandler: itMenuUiHandler, pokemonStat: itPokemonStat, + tutorial: itTutorial, }, de: { menu: deMenu, @@ -149,6 +159,7 @@ export function initI18n(): void { pokemon: dePokemon, pokemonStat: dePokemonStat, commandUiHandler: deCommandUiHandler, + tutorial: deTutorial, } }, }); @@ -167,6 +178,7 @@ declare module 'i18next' { pokemonStat: typeof enPokemonStat; commandUiHandler: typeof enCommandUiHandler; fightUiHandler: typeof enFightUiHandler; + tutorial: typeof enTutorial; }; } } diff --git a/src/tutorial.ts b/src/tutorial.ts index a924243ac33..918c68b9bb4 100644 --- a/src/tutorial.ts +++ b/src/tutorial.ts @@ -1,6 +1,7 @@ import BattleScene from "./battle-scene"; import AwaitableUiHandler from "./ui/awaitable-ui-handler"; import { Mode } from "./ui/ui"; +import i18next from './plugins/i18n'; export enum Tutorial { Intro = "INTRO", @@ -15,63 +16,42 @@ export enum Tutorial { const tutorialHandlers = { [Tutorial.Intro]: (scene: BattleScene) => { return new Promise(resolve => { - scene.ui.showText(`Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. - $This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. - $The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. - $If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, null, () => resolve(), null, true); + scene.ui.showText(i18next.t("tutorial:intro"), null, () => resolve(), null, true); }); }, [Tutorial.Access_Menu]: (scene: BattleScene) => { return new Promise(resolve => { if (scene.enableTouchControls) return resolve(); - scene.showFieldOverlay(1000).then(() => scene.ui.showText(`To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, null, () => scene.hideFieldOverlay(1000).then(() => resolve()), null, true)); + scene.showFieldOverlay(1000).then(() => scene.ui.showText(i18next.t("tutorial:accessMenu"), null, () => scene.hideFieldOverlay(1000).then(() => resolve()), null, true)); }); }, [Tutorial.Menu]: (scene: BattleScene) => { return new Promise(resolve => { scene.gameData.saveTutorialFlag(Tutorial.Access_Menu, true); - scene.ui.showText(`From this menu you can access the settings. - $From the settings you can change game speed, window style, and other options. - $There are also various other features here, so be sure to check them all!`, null, () => scene.ui.showText('', null, () => resolve()), null, true); + scene.ui.showText(i18next.t("tutorial:menu"), null, () => scene.ui.showText('', null, () => resolve()), null, true); }); }, [Tutorial.Starter_Select]: (scene: BattleScene) => { return new Promise(resolve => { - scene.ui.showText(`From this screen, you can select your starters.\nThese are your initial party members. - $Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. - $You can also select gender, ability, and form depending on\nthe variants you've caught or hatched. - $The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`, null, () => scene.ui.showText('', null, () => resolve()), null, true); + scene.ui.showText(i18next.t("tutorial:starterSelect"), null, () => scene.ui.showText('', null, () => resolve()), null, true); }); }, [Tutorial.Pokerus]: (scene: BattleScene) => { return new Promise(resolve => { - scene.ui.showText(`A daily random 3 selectable starters have a purple border. - $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, null, () => scene.ui.showText('', null, () => resolve()), null, true); + scene.ui.showText(i18next.t("tutorial:pokerus"), null, () => scene.ui.showText('', null, () => resolve()), null, true); }); }, [Tutorial.Select_Item]: (scene: BattleScene) => { return new Promise(resolve => { scene.ui.setModeWithoutClear(Mode.MESSAGE).then(() => { - scene.ui.showText(`After every battle, you are given a choice of 3 random items.\nYou may only pick one. - $These range from consumables, to Pokémon held items, to passive permanent items. - $Most non-consumable item effects will stack in various ways. - $Some items will only show up if they can be used, such as evolution items. - $You can also transfer held items between Pokémon using the transfer option. - $The transfer option will appear in the bottom right once you have obtained a held item. - $You may purchase consumable items with money, and a larger variety will be available the further you get. - $Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`, null, () => scene.ui.showText('', null, () => scene.ui.setModeWithoutClear(Mode.MODIFIER_SELECT).then(() => resolve())), null, true); + scene.ui.showText(i18next.t("tutorial:selectItem"), null, () => scene.ui.showText('', null, () => scene.ui.setModeWithoutClear(Mode.MODIFIER_SELECT).then(() => resolve())), null, true); }); }); }, [Tutorial.Egg_Gacha]: (scene: BattleScene) => { return new Promise(resolve => { - scene.ui.showText(`From this screen, you can redeem your vouchers for\nPokémon eggs. - $Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. - $Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. - $Pokémon hatched from eggs generally have better IVs than\nwild Pokémon. - $Some Pokémon can only even be obtained from eggs. - $There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`, null, () => scene.ui.showText('', null, () => resolve()), null, true); + scene.ui.showText(i18next.t("tutorial:eggGacha"), null, () => scene.ui.showText('', null, () => resolve()), null, true); }); }, }; @@ -94,4 +74,4 @@ export function handleTutorial(scene: BattleScene, tutorial: Tutorial): Promise< resolve(true); }); }); -} \ No newline at end of file +} From 7a1895242cde3d7ed81bcccb41dc38a98e09642f Mon Sep 17 00:00:00 2001 From: lucfd <83493765+lucfd@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:51:43 -0400 Subject: [PATCH 022/110] Fixed Fake Out + Pivot move interaction (#347) * decrement turnCount if pivot move is used * improved formatting --- src/phases.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/phases.ts b/src/phases.ts index fdca671dbff..1393355e3f5 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -2,7 +2,7 @@ import BattleScene, { STARTER_FORM_OVERRIDE, STARTER_SPECIES_OVERRIDE, bypassLog import { default as Pokemon, PlayerPokemon, EnemyPokemon, PokemonMove, MoveResult, DamageResult, FieldPosition, HitResult, TurnMove } from "./field/pokemon"; import * as Utils from './utils'; import { Moves } from "./data/enums/moves"; -import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMoveAttrs, HitsTagAttr, MissEffectAttr, MoveAttr, MoveEffectAttr, MoveFlags, MultiHitAttr, OverrideMoveEffectAttr, VariableAccuracyAttr, MoveTarget, OneHitKOAttr, getMoveTargets, MoveTargetSet, MoveEffectTrigger, CopyMoveAttr, AttackMove, SelfStatusMove, DelayedAttackAttr, RechargeAttr, PreMoveMessageAttr, HealStatusEffectAttr, IgnoreOpponentStatChangesAttr, NoEffectAttr, FixedDamageAttr, OneHitKOAccuracyAttr } from "./data/move"; +import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMoveAttrs, HitsTagAttr, MissEffectAttr, MoveAttr, MoveEffectAttr, MoveFlags, MultiHitAttr, OverrideMoveEffectAttr, VariableAccuracyAttr, MoveTarget, OneHitKOAttr, getMoveTargets, MoveTargetSet, MoveEffectTrigger, CopyMoveAttr, AttackMove, SelfStatusMove, DelayedAttackAttr, RechargeAttr, PreMoveMessageAttr, HealStatusEffectAttr, IgnoreOpponentStatChangesAttr, NoEffectAttr, FixedDamageAttr, OneHitKOAccuracyAttr, ForceSwitchOutAttr } from "./data/move"; import { Mode } from './ui/ui'; import { Command } from "./ui/command-ui-handler"; import { Stat } from "./data/pokemon-stat"; @@ -1420,9 +1420,11 @@ export class SwitchSummonPhase extends SummonPhase { super.onEnd(); const pokemon = this.getPokemon(); + const moveId = pokemon.scene.currentBattle.turnCommands[this.fieldIndex]?.move?.move; + const lastUsedMove = moveId ? allMoves[moveId] : undefined; // Compensate for turn spent summoning - if (pokemon.scene.currentBattle.turnCommands[this.fieldIndex]?.command === Command.POKEMON) + if (pokemon.scene.currentBattle.turnCommands[this.fieldIndex]?.command === Command.POKEMON || !!lastUsedMove?.findAttr(attr => attr instanceof ForceSwitchOutAttr)) //check if hard switch OR pivot move was used pokemon.battleSummonData.turnCount--; if (this.batonPass && pokemon) From bd30dca47d343c67f54a4befda469f9c789b8a2f Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Mon, 29 Apr 2024 19:43:51 -0500 Subject: [PATCH 023/110] Partially implement Battle Bond (Gen 8) & Power Construct abilities Both abilities are still not fully functional yet (Battle Bond does not interact with Water Shuriken yet, Power Construct does not interact with 10% Power Construct Zygarde, and both forms do not revert after a battle yet), but this is a step to having them both completed. Battle Bond Froakie line and Power Construct 50% Zygardes (as well as Aura Break 10% Zygardes) can now randomly appear in the wild. Expect Battle Bond to potentially change to its Gen 9 version at some point in the future, rendering Ash-Greninja inaccessible. --- public/images/pokemon_icons_6.json | 6079 ++++++++++++++-------------- public/images/pokemon_icons_6.png | Bin 46273 -> 45905 bytes src/battle-scene.ts | 6 + src/data/ability.ts | 30 +- src/data/pokemon-forms.ts | 10 + src/data/pokemon-species.ts | 10 +- 6 files changed, 3101 insertions(+), 3034 deletions(-) diff --git a/public/images/pokemon_icons_6.json b/public/images/pokemon_icons_6.json index 48a676cc9ca..f0d7a46c7d4 100644 --- a/public/images/pokemon_icons_6.json +++ b/public/images/pokemon_icons_6.json @@ -5,7 +5,7 @@ "format": "RGBA8888", "size": { "w": 254, - "h": 554 + "h": 557 }, "scale": 1, "frames": [ @@ -556,7 +556,7 @@ } }, { - "filename": "708", + "filename": "675", "rotated": false, "trimmed": true, "sourceSize": { @@ -564,16 +564,37 @@ "h": 30 }, "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 25, - "h": 21 + "x": 7, + "y": 4, + "w": 28, + "h": 24 }, "frame": { "x": 0, "y": 533, - "w": 25, - "h": 21 + "w": 28, + "h": 24 + } + }, + { + "filename": "675s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 28, + "h": 24 + }, + "frame": { + "x": 28, + "y": 533, + "w": 28, + "h": 24 } }, { @@ -597,27 +618,6 @@ "h": 27 } }, - { - "filename": "708s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 25, - "h": 21 - }, - "frame": { - "x": 25, - "y": 533, - "w": 25, - "h": 21 - } - }, { "filename": "691", "rotated": false, @@ -661,7 +661,7 @@ } }, { - "filename": "675", + "filename": "715", "rotated": false, "trimmed": true, "sourceSize": { @@ -669,7 +669,7 @@ "h": 30 }, "spriteSourceSize": { - "x": 7, + "x": 6, "y": 4, "w": 28, "h": 24 @@ -786,6 +786,27 @@ "h": 22 } }, + { + "filename": "658-ash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 30, + "h": 23 + }, + "frame": { + "x": 132, + "y": 49, + "w": 30, + "h": 23 + } + }, { "filename": "658", "rotated": false, @@ -801,8 +822,8 @@ "h": 22 }, "frame": { - "x": 132, - "y": 49, + "x": 162, + "y": 50, "w": 30, "h": 22 } @@ -822,7 +843,7 @@ "h": 23 }, "frame": { - "x": 162, + "x": 192, "y": 50, "w": 30, "h": 23 @@ -843,8 +864,8 @@ "h": 22 }, "frame": { - "x": 192, - "y": 50, + "x": 222, + "y": 51, "w": 30, "h": 22 } @@ -864,51 +885,9 @@ "h": 22 }, "frame": { - "x": 222, - "y": 51, - "w": 30, - "h": 22 - } - }, - { - "filename": "654", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 20, - "h": 22 - }, - "frame": { - "x": 50, + "x": 38, "y": 54, - "w": 20, - "h": 22 - } - }, - { - "filename": "705", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 6, - "w": 15, - "h": 22 - }, - "frame": { - "x": 35, - "y": 56, - "w": 15, + "w": 30, "h": 22 } }, @@ -927,119 +906,14 @@ "h": 22 }, "frame": { - "x": 70, - "y": 70, + "x": 35, + "y": 76, "w": 30, "h": 22 } }, { - "filename": "675s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 28, - "h": 24 - }, - "frame": { - "x": 100, - "y": 70, - "w": 28, - "h": 24 - } - }, - { - "filename": "715", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 28, - "h": 24 - }, - "frame": { - "x": 128, - "y": 71, - "w": 28, - "h": 24 - } - }, - { - "filename": "715s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 28, - "h": 24 - }, - "frame": { - "x": 156, - "y": 73, - "w": 28, - "h": 24 - } - }, - { - "filename": "654s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 20, - "h": 22 - }, - "frame": { - "x": 50, - "y": 76, - "w": 20, - "h": 22 - } - }, - { - "filename": "705s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 6, - "w": 15, - "h": 22 - }, - "frame": { - "x": 35, - "y": 78, - "w": 15, - "h": 22 - } - }, - { - "filename": "676-diamond", + "filename": "671-orange", "rotated": false, "trimmed": true, "sourceSize": { @@ -1048,15 +922,15 @@ }, "spriteSourceSize": { "x": 8, - "y": 0, - "w": 24, - "h": 28 + "y": 3, + "w": 26, + "h": 27 }, "frame": { "x": 32, - "y": 100, - "w": 24, - "h": 28 + "y": 98, + "w": 26, + "h": 27 } }, { @@ -1075,32 +949,11 @@ }, "frame": { "x": 32, - "y": 128, + "y": 125, "w": 26, "h": 24 } }, - { - "filename": "671-orange", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 26, - "h": 27 - }, - "frame": { - "x": 29, - "y": 152, - "w": 26, - "h": 27 - } - }, { "filename": "671-red", "rotated": false, @@ -1117,7 +970,7 @@ }, "frame": { "x": 29, - "y": 179, + "y": 149, "w": 26, "h": 27 } @@ -1137,12 +990,54 @@ "h": 27 }, "frame": { - "x": 28, - "y": 206, + "x": 29, + "y": 176, "w": 26, "h": 27 } }, + { + "filename": "676-diamond", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 0, + "w": 24, + "h": 28 + }, + "frame": { + "x": 58, + "y": 98, + "w": 24, + "h": 28 + } + }, + { + "filename": "652s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 26, + "h": 24 + }, + "frame": { + "x": 58, + "y": 126, + "w": 26, + "h": 24 + } + }, { "filename": "671-yellow", "rotated": false, @@ -1158,8 +1053,8 @@ "h": 27 }, "frame": { - "x": 28, - "y": 233, + "x": 55, + "y": 150, "w": 26, "h": 27 } @@ -1179,12 +1074,33 @@ "h": 27 }, "frame": { - "x": 28, - "y": 260, + "x": 55, + "y": 177, "w": 26, "h": 27 } }, + { + "filename": "650", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 6, + "w": 17, + "h": 22 + }, + "frame": { + "x": 65, + "y": 76, + "w": 17, + "h": 22 + } + }, { "filename": "671s-orange", "rotated": false, @@ -1200,8 +1116,29 @@ "h": 27 }, "frame": { - "x": 28, - "y": 287, + "x": 82, + "y": 70, + "w": 26, + "h": 27 + } + }, + { + "filename": "671s-red", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 26, + "h": 27 + }, + "frame": { + "x": 82, + "y": 97, "w": 26, "h": 27 } @@ -1221,33 +1158,12 @@ "h": 28 }, "frame": { - "x": 56, - "y": 98, + "x": 108, + "y": 70, "w": 24, "h": 28 } }, - { - "filename": "671s-red", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 26, - "h": 27 - }, - "frame": { - "x": 58, - "y": 126, - "w": 26, - "h": 27 - } - }, { "filename": "671s-white", "rotated": false, @@ -1263,8 +1179,8 @@ "h": 27 }, "frame": { - "x": 55, - "y": 153, + "x": 132, + "y": 72, "w": 26, "h": 27 } @@ -1284,12 +1200,54 @@ "h": 27 }, "frame": { - "x": 55, - "y": 180, + "x": 158, + "y": 72, "w": 26, "h": 27 } }, + { + "filename": "676-dandy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 24, + "h": 26 + }, + "frame": { + "x": 108, + "y": 98, + "w": 24, + "h": 26 + } + }, + { + "filename": "715s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 28, + "h": 24 + }, + "frame": { + "x": 132, + "y": 99, + "w": 28, + "h": 24 + } + }, { "filename": "676-star", "rotated": false, @@ -1305,8 +1263,8 @@ "h": 27 }, "frame": { - "x": 54, - "y": 207, + "x": 84, + "y": 124, "w": 26, "h": 27 } @@ -1326,12 +1284,54 @@ "h": 27 }, "frame": { - "x": 54, - "y": 234, + "x": 81, + "y": 151, "w": 26, "h": 27 } }, + { + "filename": "660", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 26, + "h": 25 + }, + "frame": { + "x": 81, + "y": 178, + "w": 26, + "h": 25 + } + }, + { + "filename": "676", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 1, + "w": 24, + "h": 27 + }, + "frame": { + "x": 110, + "y": 124, + "w": 24, + "h": 27 + } + }, { "filename": "721", "rotated": false, @@ -1347,138 +1347,12 @@ "h": 27 }, "frame": { - "x": 54, - "y": 261, + "x": 107, + "y": 151, "w": 25, "h": 27 } }, - { - "filename": "676-heart", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 25, - "h": 26 - }, - "frame": { - "x": 54, - "y": 288, - "w": 25, - "h": 26 - } - }, - { - "filename": "685", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 5, - "w": 20, - "h": 23 - }, - "frame": { - "x": 80, - "y": 92, - "w": 20, - "h": 23 - } - }, - { - "filename": "655", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 27, - "h": 23 - }, - "frame": { - "x": 100, - "y": 94, - "w": 27, - "h": 23 - } - }, - { - "filename": "655s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 27, - "h": 23 - }, - "frame": { - "x": 127, - "y": 95, - "w": 27, - "h": 23 - } - }, - { - "filename": "707s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 27, - "h": 24 - }, - "frame": { - "x": 154, - "y": 97, - "w": 27, - "h": 24 - } - }, - { - "filename": "713", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 27, - "h": 24 - }, - "frame": { - "x": 28, - "y": 314, - "w": 27, - "h": 24 - } - }, { "filename": "721s", "rotated": false, @@ -1494,243 +1368,12 @@ "h": 27 }, "frame": { - "x": 27, - "y": 338, + "x": 134, + "y": 123, "w": 25, "h": 27 } }, - { - "filename": "652s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 26, - "h": 24 - }, - "frame": { - "x": 55, - "y": 314, - "w": 26, - "h": 24 - } - }, - { - "filename": "660", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 26, - "h": 25 - }, - "frame": { - "x": 52, - "y": 338, - "w": 26, - "h": 25 - } - }, - { - "filename": "684", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 17, - "h": 16 - }, - "frame": { - "x": 27, - "y": 365, - "w": 17, - "h": 16 - } - }, - { - "filename": "676", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 1, - "w": 24, - "h": 27 - }, - "frame": { - "x": 30, - "y": 381, - "w": 24, - "h": 27 - } - }, - { - "filename": "676s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 1, - "w": 24, - "h": 27 - }, - "frame": { - "x": 30, - "y": 408, - "w": 24, - "h": 27 - } - }, - { - "filename": "699", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 1, - "w": 24, - "h": 27 - }, - "frame": { - "x": 30, - "y": 435, - "w": 24, - "h": 27 - } - }, - { - "filename": "699s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 1, - "w": 24, - "h": 27 - }, - "frame": { - "x": 30, - "y": 462, - "w": 24, - "h": 27 - } - }, - { - "filename": "676-dandy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 24, - "h": 26 - }, - "frame": { - "x": 30, - "y": 489, - "w": 24, - "h": 26 - } - }, - { - "filename": "672", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 10, - "w": 17, - "h": 18 - }, - "frame": { - "x": 30, - "y": 515, - "w": 17, - "h": 18 - } - }, - { - "filename": "682", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 12, - "w": 15, - "h": 16 - }, - "frame": { - "x": 44, - "y": 365, - "w": 15, - "h": 16 - } - }, - { - "filename": "651", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 21, - "h": 22 - }, - "frame": { - "x": 59, - "y": 363, - "w": 21, - "h": 22 - } - }, { "filename": "660s", "rotated": false, @@ -1746,8 +1389,8 @@ "h": 25 }, "frame": { - "x": 54, - "y": 385, + "x": 107, + "y": 178, "w": 26, "h": 25 } @@ -1767,8 +1410,8 @@ "h": 25 }, "frame": { - "x": 54, - "y": 410, + "x": 160, + "y": 99, "w": 26, "h": 25 } @@ -1788,12 +1431,33 @@ "h": 25 }, "frame": { - "x": 54, - "y": 435, + "x": 159, + "y": 124, "w": 26, "h": 25 } }, + { + "filename": "676-heart", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 25, + "h": 26 + }, + "frame": { + "x": 184, + "y": 73, + "w": 25, + "h": 26 + } + }, { "filename": "666-elegant", "rotated": false, @@ -1809,12 +1473,33 @@ "h": 25 }, "frame": { - "x": 54, - "y": 460, + "x": 209, + "y": 73, "w": 26, "h": 25 } }, + { + "filename": "683", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 19, + "h": 23 + }, + "frame": { + "x": 235, + "y": 73, + "w": 19, + "h": 23 + } + }, { "filename": "666-fancy", "rotated": false, @@ -1830,14 +1515,14 @@ "h": 25 }, "frame": { - "x": 54, - "y": 485, + "x": 186, + "y": 99, "w": 26, "h": 25 } }, { - "filename": "659", + "filename": "666-garden", "rotated": false, "trimmed": true, "sourceSize": { @@ -1845,20 +1530,83 @@ "h": 30 }, "spriteSourceSize": { - "x": 11, - "y": 3, - "w": 16, + "x": 8, + "y": 2, + "w": 26, "h": 25 }, "frame": { - "x": 184, - "y": 73, - "w": 16, + "x": 185, + "y": 124, + "w": 26, "h": 25 } }, { - "filename": "695", + "filename": "676-pharaoh", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 24, + "h": 26 + }, + "frame": { + "x": 212, + "y": 98, + "w": 24, + "h": 26 + } + }, + { + "filename": "679", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 14, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 236, + "y": 96, + "w": 18, + "h": 24 + } + }, + { + "filename": "666-high-plains", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 211, + "y": 124, + "w": 26, + "h": 25 + } + }, + { + "filename": "698", "rotated": false, "trimmed": true, "sourceSize": { @@ -1868,13 +1616,1063 @@ "spriteSourceSize": { "x": 11, "y": 4, - "w": 22, + "w": 17, "h": 24 }, "frame": { - "x": 200, - "y": 72, - "w": 22, + "x": 237, + "y": 120, + "w": 17, + "h": 24 + } + }, + { + "filename": "698s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 237, + "y": 144, + "w": 17, + "h": 24 + } + }, + { + "filename": "676s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 1, + "w": 24, + "h": 27 + }, + "frame": { + "x": 132, + "y": 151, + "w": 24, + "h": 27 + } + }, + { + "filename": "666-icy-snow", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 133, + "y": 178, + "w": 26, + "h": 25 + } + }, + { + "filename": "666-jungle", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 29, + "y": 203, + "w": 26, + "h": 25 + } + }, + { + "filename": "666-marine", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 28, + "y": 228, + "w": 26, + "h": 25 + } + }, + { + "filename": "666-meadow", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 28, + "y": 253, + "w": 26, + "h": 25 + } + }, + { + "filename": "666-modern", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 28, + "y": 278, + "w": 26, + "h": 25 + } + }, + { + "filename": "666-monsoon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 55, + "y": 204, + "w": 26, + "h": 25 + } + }, + { + "filename": "666-ocean", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 81, + "y": 203, + "w": 26, + "h": 25 + } + }, + { + "filename": "666-poke-ball", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 107, + "y": 203, + "w": 26, + "h": 25 + } + }, + { + "filename": "666-polar", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 133, + "y": 203, + "w": 26, + "h": 25 + } + }, + { + "filename": "666-river", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 54, + "y": 229, + "w": 26, + "h": 25 + } + }, + { + "filename": "666-sandstorm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 54, + "y": 254, + "w": 26, + "h": 25 + } + }, + { + "filename": "666-savanna", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 54, + "y": 279, + "w": 26, + "h": 25 + } + }, + { + "filename": "666-sun", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 28, + "y": 303, + "w": 26, + "h": 25 + } + }, + { + "filename": "666-tundra", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 27, + "y": 328, + "w": 26, + "h": 25 + } + }, + { + "filename": "666s-archipelago", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 27, + "y": 353, + "w": 26, + "h": 25 + } + }, + { + "filename": "666s-continental", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 54, + "y": 304, + "w": 26, + "h": 25 + } + }, + { + "filename": "666s-elegant", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 53, + "y": 329, + "w": 26, + "h": 25 + } + }, + { + "filename": "666s-fancy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 53, + "y": 354, + "w": 26, + "h": 25 + } + }, + { + "filename": "711-large", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 23, + "h": 25 + }, + "frame": { + "x": 30, + "y": 378, + "w": 23, + "h": 25 + } + }, + { + "filename": "666s-garden", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 53, + "y": 379, + "w": 26, + "h": 25 + } + }, + { + "filename": "711-super", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 23, + "h": 25 + }, + "frame": { + "x": 30, + "y": 403, + "w": 23, + "h": 25 + } + }, + { + "filename": "666s-high-plains", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 53, + "y": 404, + "w": 26, + "h": 25 + } + }, + { + "filename": "711s-large", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 23, + "h": 25 + }, + "frame": { + "x": 30, + "y": 428, + "w": 23, + "h": 25 + } + }, + { + "filename": "666s-icy-snow", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 53, + "y": 429, + "w": 26, + "h": 25 + } + }, + { + "filename": "711s-super", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 3, + "w": 23, + "h": 25 + }, + "frame": { + "x": 30, + "y": 453, + "w": 23, + "h": 25 + } + }, + { + "filename": "666s-jungle", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 53, + "y": 454, + "w": 26, + "h": 25 + } + }, + { + "filename": "657", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 23, + "h": 22 + }, + "frame": { + "x": 30, + "y": 478, + "w": 23, + "h": 22 + } + }, + { + "filename": "699", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 1, + "w": 24, + "h": 27 + }, + "frame": { + "x": 30, + "y": 500, + "w": 24, + "h": 27 + } + }, + { + "filename": "708", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 25, + "h": 21 + }, + "frame": { + "x": 53, + "y": 479, + "w": 25, + "h": 21 + } + }, + { + "filename": "699s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 1, + "w": 24, + "h": 27 + }, + "frame": { + "x": 54, + "y": 500, + "w": 24, + "h": 27 + } + }, + { + "filename": "676s-dandy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 24, + "h": 26 + }, + "frame": { + "x": 56, + "y": 527, + "w": 24, + "h": 26 + } + }, + { + "filename": "655", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 27, + "h": 23 + }, + "frame": { + "x": 159, + "y": 149, + "w": 27, + "h": 23 + } + }, + { + "filename": "655s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 27, + "h": 23 + }, + "frame": { + "x": 186, + "y": 149, + "w": 27, + "h": 23 + } + }, + { + "filename": "676-matron", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 24, + "h": 25 + }, + "frame": { + "x": 213, + "y": 149, + "w": 24, + "h": 25 + } + }, + { + "filename": "650s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 6, + "w": 17, + "h": 22 + }, + "frame": { + "x": 237, + "y": 168, + "w": 17, + "h": 22 + } + }, + { + "filename": "666s-marine", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 159, + "y": 172, + "w": 26, + "h": 25 + } + }, + { + "filename": "666s-meadow", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 185, + "y": 172, + "w": 26, + "h": 25 + } + }, + { + "filename": "666s-modern", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 211, + "y": 174, + "w": 26, + "h": 25 + } + }, + { + "filename": "666s-monsoon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 159, + "y": 197, + "w": 26, + "h": 25 + } + }, + { + "filename": "666s-ocean", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 185, + "y": 197, + "w": 26, + "h": 25 + } + }, + { + "filename": "666s-poke-ball", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 211, + "y": 199, + "w": 26, + "h": 25 + } + }, + { + "filename": "710-large", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 8, + "w": 17, + "h": 20 + }, + "frame": { + "x": 237, + "y": 190, + "w": 17, + "h": 20 + } + }, + { + "filename": "710s-large", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 8, + "w": 17, + "h": 20 + }, + "frame": { + "x": 237, + "y": 210, + "w": 17, + "h": 20 + } + }, + { + "filename": "707s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 27, + "h": 24 + }, + "frame": { + "x": 159, + "y": 222, + "w": 27, + "h": 24 + } + }, + { + "filename": "676-debutante", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 25, + "h": 25 + }, + "frame": { + "x": 186, + "y": 222, + "w": 25, + "h": 25 + } + }, + { + "filename": "666s-polar", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 211, + "y": 224, + "w": 26, + "h": 25 + } + }, + { + "filename": "653", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 9, + "w": 17, + "h": 19 + }, + "frame": { + "x": 237, + "y": 230, + "w": 17, + "h": 19 + } + }, + { + "filename": "713", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 27, + "h": 24 + }, + "frame": { + "x": 81, + "y": 228, + "w": 27, "h": 24 } }, @@ -1893,14 +2691,35 @@ "h": 24 }, "frame": { - "x": 222, - "y": 73, + "x": 108, + "y": 228, "w": 27, "h": 24 } }, { - "filename": "666-garden", + "filename": "676s-matron", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 24, + "h": 25 + }, + "frame": { + "x": 135, + "y": 228, + "w": 24, + "h": 25 + } + }, + { + "filename": "666s-river", "rotated": false, "trimmed": true, "sourceSize": { @@ -1914,14 +2733,14 @@ "h": 25 }, "frame": { - "x": 181, - "y": 98, + "x": 80, + "y": 252, "w": 26, "h": 25 } }, { - "filename": "666-high-plains", + "filename": "666s-sandstorm", "rotated": false, "trimmed": true, "sourceSize": { @@ -1935,12 +2754,264 @@ "h": 25 }, "frame": { - "x": 207, - "y": 97, + "x": 80, + "y": 277, "w": 26, "h": 25 } }, + { + "filename": "666s-savanna", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 106, + "y": 252, + "w": 26, + "h": 25 + } + }, + { + "filename": "666s-sun", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 80, + "y": 302, + "w": 26, + "h": 25 + } + }, + { + "filename": "666s-tundra", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 26, + "h": 25 + }, + "frame": { + "x": 106, + "y": 277, + "w": 26, + "h": 25 + } + }, + { + "filename": "676-kabuki", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 25, + "h": 25 + }, + "frame": { + "x": 106, + "y": 302, + "w": 25, + "h": 25 + } + }, + { + "filename": "676s-heart", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 25, + "h": 26 + }, + "frame": { + "x": 132, + "y": 253, + "w": 25, + "h": 26 + } + }, + { + "filename": "676-la-reine", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 25, + "h": 25 + }, + "frame": { + "x": 132, + "y": 279, + "w": 25, + "h": 25 + } + }, + { + "filename": "676s-debutante", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 3, + "w": 25, + "h": 25 + }, + "frame": { + "x": 131, + "y": 304, + "w": 25, + "h": 25 + } + }, + { + "filename": "676s-kabuki", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 25, + "h": 25 + }, + "frame": { + "x": 159, + "y": 246, + "w": 25, + "h": 25 + } + }, + { + "filename": "676s-la-reine", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 7, + "y": 3, + "w": 25, + "h": 25 + }, + "frame": { + "x": 157, + "y": 271, + "w": 25, + "h": 25 + } + }, + { + "filename": "709", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 25, + "h": 25 + }, + "frame": { + "x": 184, + "y": 247, + "w": 25, + "h": 25 + } + }, + { + "filename": "709s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 3, + "w": 25, + "h": 25 + }, + "frame": { + "x": 182, + "y": 272, + "w": 25, + "h": 25 + } + }, + { + "filename": "676s-pharaoh", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 2, + "w": 24, + "h": 26 + }, + "frame": { + "x": 209, + "y": 249, + "w": 24, + "h": 26 + } + }, { "filename": "711", "rotated": false, @@ -1957,7 +3028,7 @@ }, "frame": { "x": 233, - "y": 97, + "y": 249, "w": 21, "h": 23 } @@ -1978,977 +3049,11 @@ }, "frame": { "x": 233, - "y": 120, + "y": 272, "w": 21, "h": 23 } }, - { - "filename": "666-icy-snow", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 207, - "y": 122, - "w": 26, - "h": 25 - } - }, - { - "filename": "651s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 21, - "h": 22 - }, - "frame": { - "x": 233, - "y": 143, - "w": 21, - "h": 22 - } - }, - { - "filename": "659s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 3, - "w": 16, - "h": 25 - }, - "frame": { - "x": 84, - "y": 115, - "w": 16, - "h": 25 - } - }, - { - "filename": "666-jungle", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 100, - "y": 117, - "w": 26, - "h": 25 - } - }, - { - "filename": "666-marine", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 126, - "y": 118, - "w": 26, - "h": 25 - } - }, - { - "filename": "666-meadow", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 152, - "y": 121, - "w": 26, - "h": 25 - } - }, - { - "filename": "666-modern", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 178, - "y": 123, - "w": 26, - "h": 25 - } - }, - { - "filename": "665", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 16, - "h": 17 - }, - "frame": { - "x": 84, - "y": 140, - "w": 16, - "h": 17 - } - }, - { - "filename": "666-monsoon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 100, - "y": 142, - "w": 26, - "h": 25 - } - }, - { - "filename": "666-ocean", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 126, - "y": 143, - "w": 26, - "h": 25 - } - }, - { - "filename": "666-poke-ball", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 152, - "y": 146, - "w": 26, - "h": 25 - } - }, - { - "filename": "666-polar", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 178, - "y": 148, - "w": 26, - "h": 25 - } - }, - { - "filename": "683", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 19, - "h": 23 - }, - "frame": { - "x": 81, - "y": 157, - "w": 19, - "h": 23 - } - }, - { - "filename": "666-river", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 204, - "y": 147, - "w": 26, - "h": 25 - } - }, - { - "filename": "676-pharaoh", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 24, - "h": 26 - }, - "frame": { - "x": 230, - "y": 165, - "w": 24, - "h": 26 - } - }, - { - "filename": "666-sandstorm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 204, - "y": 172, - "w": 26, - "h": 25 - } - }, - { - "filename": "676s-dandy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 24, - "h": 26 - }, - "frame": { - "x": 230, - "y": 191, - "w": 24, - "h": 26 - } - }, - { - "filename": "676s-heart", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 25, - "h": 26 - }, - "frame": { - "x": 81, - "y": 180, - "w": 25, - "h": 26 - } - }, - { - "filename": "703", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 15, - "w": 14, - "h": 13 - }, - "frame": { - "x": 100, - "y": 167, - "w": 14, - "h": 13 - } - }, - { - "filename": "676s-pharaoh", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 24, - "h": 26 - }, - "frame": { - "x": 106, - "y": 180, - "w": 24, - "h": 26 - } - }, - { - "filename": "695s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 22, - "h": 24 - }, - "frame": { - "x": 130, - "y": 168, - "w": 22, - "h": 24 - } - }, - { - "filename": "666-savanna", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 152, - "y": 171, - "w": 26, - "h": 25 - } - }, - { - "filename": "666-sun", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 178, - "y": 173, - "w": 26, - "h": 25 - } - }, - { - "filename": "666-tundra", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 204, - "y": 197, - "w": 26, - "h": 25 - } - }, - { - "filename": "676-matron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 24, - "h": 25 - }, - "frame": { - "x": 230, - "y": 217, - "w": 24, - "h": 25 - } - }, - { - "filename": "662", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 22, - "h": 20 - }, - "frame": { - "x": 130, - "y": 192, - "w": 22, - "h": 20 - } - }, - { - "filename": "666s-archipelago", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 152, - "y": 196, - "w": 26, - "h": 25 - } - }, - { - "filename": "666s-continental", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 178, - "y": 198, - "w": 26, - "h": 25 - } - }, - { - "filename": "666s-elegant", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 204, - "y": 222, - "w": 26, - "h": 25 - } - }, - { - "filename": "676s-matron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 24, - "h": 25 - }, - "frame": { - "x": 230, - "y": 242, - "w": 24, - "h": 25 - } - }, - { - "filename": "666s-fancy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 54, - "y": 510, - "w": 26, - "h": 25 - } - }, - { - "filename": "701", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 23, - "h": 19 - }, - "frame": { - "x": 50, - "y": 535, - "w": 23, - "h": 19 - } - }, - { - "filename": "701s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 23, - "h": 19 - }, - "frame": { - "x": 73, - "y": 535, - "w": 23, - "h": 19 - } - }, - { - "filename": "666s-garden", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 78, - "y": 338, - "w": 26, - "h": 25 - } - }, - { - "filename": "666s-high-plains", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 80, - "y": 363, - "w": 26, - "h": 25 - } - }, - { - "filename": "666s-icy-snow", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 80, - "y": 388, - "w": 26, - "h": 25 - } - }, - { - "filename": "666s-jungle", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 80, - "y": 413, - "w": 26, - "h": 25 - } - }, - { - "filename": "666s-marine", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 80, - "y": 438, - "w": 26, - "h": 25 - } - }, - { - "filename": "666s-meadow", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 80, - "y": 463, - "w": 26, - "h": 25 - } - }, - { - "filename": "666s-modern", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 80, - "y": 488, - "w": 26, - "h": 25 - } - }, - { - "filename": "657", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 23, - "h": 22 - }, - "frame": { - "x": 80, - "y": 513, - "w": 23, - "h": 22 - } - }, - { - "filename": "720", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 21, - "h": 19 - }, - "frame": { - "x": 96, - "y": 535, - "w": 21, - "h": 19 - } - }, - { - "filename": "650", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 17, - "h": 22 - }, - "frame": { - "x": 103, - "y": 513, - "w": 17, - "h": 22 - } - }, - { - "filename": "720s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 21, - "h": 19 - }, - "frame": { - "x": 117, - "y": 535, - "w": 21, - "h": 19 - } - }, - { - "filename": "666s-monsoon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 104, - "y": 206, - "w": 26, - "h": 25 - } - }, - { - "filename": "662s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 22, - "h": 20 - }, - "frame": { - "x": 130, - "y": 212, - "w": 22, - "h": 20 - } - }, { "filename": "687", "rotated": false, @@ -2964,14 +3069,14 @@ "h": 25 }, "frame": { - "x": 80, - "y": 207, + "x": 207, + "y": 275, "w": 24, "h": 25 } }, { - "filename": "666s-ocean", + "filename": "657s", "rotated": false, "trimmed": true, "sourceSize": { @@ -2979,16 +3084,37 @@ "h": 30 }, "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 + "x": 10, + "y": 8, + "w": 23, + "h": 22 }, "frame": { - "x": 80, - "y": 232, - "w": 26, - "h": 25 + "x": 231, + "y": 295, + "w": 23, + "h": 22 + } + }, + { + "filename": "708s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 25, + "h": 21 + }, + "frame": { + "x": 157, + "y": 296, + "w": 25, + "h": 21 } }, { @@ -3006,96 +3132,12 @@ "h": 25 }, "frame": { - "x": 106, - "y": 231, + "x": 182, + "y": 297, "w": 24, "h": 25 } }, - { - "filename": "666s-poke-ball", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 130, - "y": 232, - "w": 26, - "h": 25 - } - }, - { - "filename": "700", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 156, - "y": 221, - "w": 22, - "h": 23 - } - }, - { - "filename": "666s-polar", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 178, - "y": 223, - "w": 26, - "h": 25 - } - }, - { - "filename": "666s-river", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 204, - "y": 247, - "w": 26, - "h": 25 - } - }, { "filename": "706", "rotated": false, @@ -3111,75 +3153,12 @@ "h": 24 }, "frame": { - "x": 230, - "y": 267, + "x": 206, + "y": 300, "w": 24, "h": 24 } }, - { - "filename": "700s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 156, - "y": 244, - "w": 22, - "h": 23 - } - }, - { - "filename": "666s-sandstorm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 178, - "y": 248, - "w": 26, - "h": 25 - } - }, - { - "filename": "666s-savanna", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 204, - "y": 272, - "w": 26, - "h": 25 - } - }, { "filename": "706s", "rotated": false, @@ -3196,116 +3175,11 @@ }, "frame": { "x": 230, - "y": 291, + "y": 317, "w": 24, "h": 24 } }, - { - "filename": "685s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 5, - "w": 20, - "h": 23 - }, - "frame": { - "x": 81, - "y": 315, - "w": 20, - "h": 23 - } - }, - { - "filename": "666s-sun", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 80, - "y": 257, - "w": 26, - "h": 25 - } - }, - { - "filename": "666s-tundra", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 2, - "w": 26, - "h": 25 - }, - "frame": { - "x": 79, - "y": 282, - "w": 26, - "h": 25 - } - }, - { - "filename": "711-large", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 23, - "h": 25 - }, - "frame": { - "x": 106, - "y": 256, - "w": 23, - "h": 25 - } - }, - { - "filename": "676-debutante", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 25, - "h": 25 - }, - "frame": { - "x": 129, - "y": 257, - "w": 25, - "h": 25 - } - }, { "filename": "692", "rotated": false, @@ -3321,14 +3195,14 @@ "h": 17 }, "frame": { - "x": 154, - "y": 267, + "x": 156, + "y": 317, "w": 24, "h": 17 } }, { - "filename": "676-kabuki", + "filename": "692s", "rotated": false, "trimmed": true, "sourceSize": { @@ -3337,246 +3211,15 @@ }, "spriteSourceSize": { "x": 8, - "y": 3, - "w": 25, - "h": 25 + "y": 11, + "w": 24, + "h": 17 }, "frame": { - "x": 178, - "y": 273, - "w": 25, - "h": 25 - } - }, - { - "filename": "676-la-reine", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 25, - "h": 25 - }, - "frame": { - "x": 105, - "y": 282, - "w": 25, - "h": 25 - } - }, - { - "filename": "711-super", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 23, - "h": 25 - }, - "frame": { - "x": 130, - "y": 282, - "w": 23, - "h": 25 - } - }, - { - "filename": "676s-debutante", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 25, - "h": 25 - }, - "frame": { - "x": 153, - "y": 284, - "w": 25, - "h": 25 - } - }, - { - "filename": "676s-kabuki", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 25, - "h": 25 - }, - "frame": { - "x": 101, - "y": 307, - "w": 25, - "h": 25 - } - }, - { - "filename": "676s-la-reine", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 7, - "y": 3, - "w": 25, - "h": 25 - }, - "frame": { - "x": 126, - "y": 307, - "w": 25, - "h": 25 - } - }, - { - "filename": "709", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 25, - "h": 25 - }, - "frame": { - "x": 151, - "y": 309, - "w": 25, - "h": 25 - } - }, - { - "filename": "709s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 3, - "w": 25, - "h": 25 - }, - "frame": { - "x": 104, - "y": 332, - "w": 25, - "h": 25 - } - }, - { - "filename": "678-female", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 21, - "h": 22 - }, - "frame": { - "x": 129, - "y": 332, - "w": 21, - "h": 22 - } - }, - { - "filename": "657s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 23, - "h": 22 - }, - "frame": { - "x": 150, - "y": 334, - "w": 23, - "h": 22 - } - }, - { - "filename": "711s-large", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 23, - "h": 25 - }, - "frame": { - "x": 106, - "y": 357, - "w": 23, - "h": 25 - } - }, - { - "filename": "711s-super", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 3, - "w": 23, - "h": 25 - }, - "frame": { - "x": 106, - "y": 382, - "w": 23, - "h": 25 + "x": 180, + "y": 322, + "w": 24, + "h": 17 } }, { @@ -3594,12 +3237,75 @@ "h": 22 }, "frame": { - "x": 106, - "y": 407, + "x": 204, + "y": 324, "w": 23, "h": 22 } }, + { + "filename": "659", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 3, + "w": 16, + "h": 25 + }, + "frame": { + "x": 78, + "y": 479, + "w": 16, + "h": 25 + } + }, + { + "filename": "683s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 5, + "w": 19, + "h": 23 + }, + "frame": { + "x": 78, + "y": 504, + "w": 19, + "h": 23 + } + }, + { + "filename": "659s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 3, + "w": 16, + "h": 25 + }, + "frame": { + "x": 80, + "y": 527, + "w": 16, + "h": 25 + } + }, { "filename": "673s", "rotated": false, @@ -3615,14 +3321,119 @@ "h": 22 }, "frame": { - "x": 106, - "y": 429, + "x": 227, + "y": 341, "w": 23, "h": 22 } }, { - "filename": "678", + "filename": "679s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 14, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 79, + "y": 329, + "w": 18, + "h": 24 + } + }, + { + "filename": "695", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 97, + "y": 327, + "w": 22, + "h": 24 + } + }, + { + "filename": "695s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 79, + "y": 353, + "w": 22, + "h": 24 + } + }, + { + "filename": "700", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 79, + "y": 377, + "w": 22, + "h": 23 + } + }, + { + "filename": "700s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 79, + "y": 400, + "w": 22, + "h": 23 + } + }, + { + "filename": "651", "rotated": false, "trimmed": true, "sourceSize": { @@ -3636,56 +3447,14 @@ "h": 22 }, "frame": { - "x": 129, - "y": 354, + "x": 79, + "y": 423, "w": 21, "h": 22 } }, { - "filename": "2670", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 23, - "h": 21 - }, - "frame": { - "x": 106, - "y": 451, - "w": 23, - "h": 21 - } - }, - { - "filename": "2670s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 23, - "h": 21 - }, - "frame": { - "x": 106, - "y": 472, - "w": 23, - "h": 21 - } - }, - { - "filename": "667", + "filename": "651s", "rotated": false, "trimmed": true, "sourceSize": { @@ -3694,15 +3463,120 @@ }, "spriteSourceSize": { "x": 10, - "y": 8, + "y": 6, "w": 21, - "h": 20 + "h": 22 }, "frame": { - "x": 106, - "y": 493, + "x": 79, + "y": 445, "w": 21, - "h": 20 + "h": 22 + } + }, + { + "filename": "685", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 5, + "w": 20, + "h": 23 + }, + "frame": { + "x": 101, + "y": 351, + "w": 20, + "h": 23 + } + }, + { + "filename": "685s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 5, + "w": 20, + "h": 23 + }, + "frame": { + "x": 101, + "y": 374, + "w": 20, + "h": 23 + } + }, + { + "filename": "654", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 20, + "h": 22 + }, + "frame": { + "x": 101, + "y": 397, + "w": 20, + "h": 22 + } + }, + { + "filename": "678-female", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 21, + "h": 22 + }, + "frame": { + "x": 119, + "y": 329, + "w": 21, + "h": 22 + } + }, + { + "filename": "688", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 140, + "y": 329, + "w": 16, + "h": 24 } }, { @@ -3720,12 +3594,117 @@ "h": 22 }, "frame": { - "x": 120, - "y": 513, + "x": 121, + "y": 351, "w": 19, "h": 22 } }, + { + "filename": "701", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 9, + "w": 23, + "h": 19 + }, + "frame": { + "x": 156, + "y": 334, + "w": 23, + "h": 19 + } + }, + { + "filename": "2670", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 23, + "h": 21 + }, + "frame": { + "x": 140, + "y": 353, + "w": 23, + "h": 21 + } + }, + { + "filename": "670-orange", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 19, + "h": 22 + }, + "frame": { + "x": 121, + "y": 373, + "w": 19, + "h": 22 + } + }, + { + "filename": "2670s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 7, + "w": 23, + "h": 21 + }, + "frame": { + "x": 140, + "y": 374, + "w": 23, + "h": 21 + } + }, + { + "filename": "678", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 21, + "h": 22 + }, + "frame": { + "x": 121, + "y": 395, + "w": 21, + "h": 22 + } + }, { "filename": "678s-female", "rotated": false, @@ -3741,12 +3720,33 @@ "h": 22 }, "frame": { - "x": 129, - "y": 376, + "x": 142, + "y": 395, "w": 21, "h": 22 } }, + { + "filename": "688s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 163, + "y": 353, + "w": 16, + "h": 24 + } + }, { "filename": "678s", "rotated": false, @@ -3762,12 +3762,180 @@ "h": 22 }, "frame": { - "x": 150, - "y": 356, + "x": 179, + "y": 339, "w": 21, "h": 22 } }, + { + "filename": "654s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 20, + "h": 22 + }, + "frame": { + "x": 163, + "y": 377, + "w": 20, + "h": 22 + } + }, + { + "filename": "662", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 22, + "h": 20 + }, + "frame": { + "x": 163, + "y": 399, + "w": 22, + "h": 20 + } + }, + { + "filename": "684", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 12, + "w": 17, + "h": 16 + }, + "frame": { + "x": 179, + "y": 361, + "w": 17, + "h": 16 + } + }, + { + "filename": "670-red", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 19, + "h": 22 + }, + "frame": { + "x": 183, + "y": 377, + "w": 19, + "h": 22 + } + }, + { + "filename": "662s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 22, + "h": 20 + }, + "frame": { + "x": 185, + "y": 399, + "w": 22, + "h": 20 + } + }, + { + "filename": "696", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 12, + "w": 20, + "h": 17 + }, + "frame": { + "x": 207, + "y": 346, + "w": 20, + "h": 17 + } + }, + { + "filename": "701s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 9, + "w": 23, + "h": 19 + }, + "frame": { + "x": 121, + "y": 417, + "w": 23, + "h": 19 + } + }, + { + "filename": "696s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 12, + "w": 20, + "h": 17 + }, + "frame": { + "x": 101, + "y": 419, + "w": 20, + "h": 17 + } + }, { "filename": "719", "rotated": false, @@ -3783,8 +3951,8 @@ "h": 22 }, "frame": { - "x": 129, - "y": 398, + "x": 100, + "y": 436, "w": 21, "h": 22 } @@ -3804,14 +3972,14 @@ "h": 22 }, "frame": { - "x": 150, - "y": 378, + "x": 121, + "y": 436, "w": 21, "h": 22 } }, { - "filename": "679", + "filename": "670-white", "rotated": false, "trimmed": true, "sourceSize": { @@ -3819,20 +3987,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 14, - "y": 4, - "w": 18, - "h": 24 + "x": 10, + "y": 6, + "w": 19, + "h": 22 }, "frame": { - "x": 129, - "y": 420, - "w": 18, - "h": 24 + "x": 144, + "y": 417, + "w": 19, + "h": 22 } }, { - "filename": "679s", + "filename": "667", "rotated": false, "trimmed": true, "sourceSize": { @@ -3840,16 +4008,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 14, - "y": 4, - "w": 18, - "h": 24 + "x": 10, + "y": 8, + "w": 21, + "h": 20 }, "frame": { - "x": 129, - "y": 444, - "w": 18, - "h": 24 + "x": 163, + "y": 419, + "w": 21, + "h": 20 } }, { @@ -3867,117 +4035,12 @@ "h": 20 }, "frame": { - "x": 150, - "y": 400, + "x": 184, + "y": 419, "w": 21, "h": 20 } }, - { - "filename": "683s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 19, - "h": 23 - }, - "frame": { - "x": 147, - "y": 420, - "w": 19, - "h": 23 - } - }, - { - "filename": "670-orange", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 19, - "h": 22 - }, - "frame": { - "x": 147, - "y": 443, - "w": 19, - "h": 22 - } - }, - { - "filename": "698", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 129, - "y": 468, - "w": 17, - "h": 24 - } - }, - { - "filename": "656", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 10, - "w": 18, - "h": 19 - }, - "frame": { - "x": 138, - "y": 535, - "w": 18, - "h": 19 - } - }, - { - "filename": "692s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 24, - "h": 17 - }, - "frame": { - "x": 178, - "y": 298, - "w": 24, - "h": 17 - } - }, { "filename": "714", "rotated": false, @@ -3993,8 +4056,29 @@ "h": 20 }, "frame": { - "x": 176, - "y": 315, + "x": 142, + "y": 439, + "w": 21, + "h": 20 + } + }, + { + "filename": "714s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 6, + "w": 21, + "h": 20 + }, + "frame": { + "x": 163, + "y": 439, "w": 21, "h": 20 } @@ -4014,14 +4098,14 @@ "h": 21 }, "frame": { - "x": 173, - "y": 335, + "x": 184, + "y": 439, "w": 20, "h": 21 } }, { - "filename": "670-red", + "filename": "702", "rotated": false, "trimmed": true, "sourceSize": { @@ -4029,20 +4113,20 @@ "h": 30 }, "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 19, - "h": 22 + "x": 8, + "y": 11, + "w": 22, + "h": 17 }, "frame": { - "x": 171, - "y": 356, - "w": 19, - "h": 22 + "x": 100, + "y": 458, + "w": 22, + "h": 17 } }, { - "filename": "670-white", + "filename": "710s-super", "rotated": false, "trimmed": true, "sourceSize": { @@ -4051,15 +4135,57 @@ }, "spriteSourceSize": { "x": 10, - "y": 6, - "w": 19, - "h": 22 + "y": 7, + "w": 20, + "h": 21 }, "frame": { - "x": 171, - "y": 378, - "w": 19, - "h": 22 + "x": 122, + "y": 458, + "w": 20, + "h": 21 + } + }, + { + "filename": "720", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 21, + "h": 19 + }, + "frame": { + "x": 142, + "y": 459, + "w": 21, + "h": 19 + } + }, + { + "filename": "720s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 21, + "h": 19 + }, + "frame": { + "x": 163, + "y": 459, + "w": 21, + "h": 19 } }, { @@ -4077,8 +4203,8 @@ "h": 22 }, "frame": { - "x": 171, - "y": 400, + "x": 184, + "y": 460, "w": 19, "h": 22 } @@ -4098,8 +4224,8 @@ "h": 22 }, "frame": { - "x": 166, - "y": 422, + "x": 94, + "y": 475, "w": 19, "h": 22 } @@ -4119,12 +4245,327 @@ "h": 22 }, "frame": { - "x": 166, - "y": 444, + "x": 97, + "y": 497, "w": 19, "h": 22 } }, + { + "filename": "702s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 8, + "y": 11, + "w": 22, + "h": 17 + }, + "frame": { + "x": 113, + "y": 479, + "w": 22, + "h": 17 + } + }, + { + "filename": "670s-red", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 19, + "h": 22 + }, + "frame": { + "x": 116, + "y": 496, + "w": 19, + "h": 22 + } + }, + { + "filename": "670s-white", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 19, + "h": 22 + }, + "frame": { + "x": 135, + "y": 479, + "w": 19, + "h": 22 + } + }, + { + "filename": "670s-yellow", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 10, + "y": 6, + "w": 19, + "h": 22 + }, + "frame": { + "x": 154, + "y": 478, + "w": 19, + "h": 22 + } + }, + { + "filename": "656", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 10, + "w": 18, + "h": 19 + }, + "frame": { + "x": 135, + "y": 501, + "w": 18, + "h": 19 + } + }, + { + "filename": "656s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 10, + "w": 18, + "h": 19 + }, + "frame": { + "x": 97, + "y": 519, + "w": 18, + "h": 19 + } + }, + { + "filename": "653s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 9, + "w": 17, + "h": 19 + }, + "frame": { + "x": 96, + "y": 538, + "w": 17, + "h": 19 + } + }, + { + "filename": "710", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 9, + "w": 17, + "h": 19 + }, + "frame": { + "x": 113, + "y": 538, + "w": 17, + "h": 19 + } + }, + { + "filename": "674", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 9, + "w": 15, + "h": 19 + }, + "frame": { + "x": 115, + "y": 519, + "w": 15, + "h": 19 + } + }, + { + "filename": "711-small", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 6, + "w": 18, + "h": 22 + }, + "frame": { + "x": 130, + "y": 520, + "w": 18, + "h": 22 + } + }, + { + "filename": "661", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 13, + "w": 18, + "h": 15 + }, + "frame": { + "x": 130, + "y": 542, + "w": 18, + "h": 15 + } + }, + { + "filename": "705", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 6, + "w": 15, + "h": 22 + }, + "frame": { + "x": 148, + "y": 520, + "w": 15, + "h": 22 + } + }, + { + "filename": "661s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 13, + "w": 18, + "h": 15 + }, + "frame": { + "x": 148, + "y": 542, + "w": 18, + "h": 15 + } + }, + { + "filename": "674s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 9, + "w": 15, + "h": 19 + }, + "frame": { + "x": 153, + "y": 501, + "w": 15, + "h": 19 + } + }, + { + "filename": "705s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 6, + "w": 15, + "h": 22 + }, + "frame": { + "x": 163, + "y": 520, + "w": 15, + "h": 22 + } + }, { "filename": "686", "rotated": false, @@ -4140,14 +4581,14 @@ "h": 20 }, "frame": { - "x": 127, - "y": 493, + "x": 168, + "y": 500, "w": 18, "h": 20 } }, { - "filename": "650s", + "filename": "672", "rotated": false, "trimmed": true, "sourceSize": { @@ -4155,16 +4596,16 @@ "h": 30 }, "spriteSourceSize": { - "x": 12, - "y": 6, + "x": 11, + "y": 10, "w": 17, - "h": 22 + "h": 18 }, "frame": { - "x": 139, - "y": 513, + "x": 173, + "y": 482, "w": 17, - "h": 22 + "h": 18 } }, { @@ -4182,119 +4623,14 @@ "h": 21 }, "frame": { - "x": 145, - "y": 492, + "x": 190, + "y": 482, "w": 14, "h": 21 } }, { - "filename": "688", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 146, - "y": 468, - "w": 16, - "h": 24 - } - }, - { - "filename": "670s-red", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 19, - "h": 22 - }, - "frame": { - "x": 162, - "y": 466, - "w": 19, - "h": 22 - } - }, - { - "filename": "688s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 185, - "y": 422, - "w": 16, - "h": 24 - } - }, - { - "filename": "670s-white", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 19, - "h": 22 - }, - "frame": { - "x": 185, - "y": 446, - "w": 19, - "h": 22 - } - }, - { - "filename": "714s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 9, - "y": 6, - "w": 21, - "h": 20 - }, - "frame": { - "x": 181, - "y": 468, - "w": 21, - "h": 20 - } - }, - { - "filename": "698s", + "filename": "686s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4303,120 +4639,15 @@ }, "spriteSourceSize": { "x": 11, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 156, - "y": 513, - "w": 17, - "h": 24 - } - }, - { - "filename": "702", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 22, - "h": 17 - }, - "frame": { - "x": 156, - "y": 537, - "w": 22, - "h": 17 - } - }, - { - "filename": "664s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 7, - "w": 14, - "h": 21 - }, - "frame": { - "x": 159, - "y": 492, - "w": 14, - "h": 21 - } - }, - { - "filename": "670s-yellow", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 6, - "w": 19, - "h": 22 - }, - "frame": { - "x": 173, - "y": 488, - "w": 19, - "h": 22 - } - }, - { - "filename": "710s-super", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 10, - "y": 7, - "w": 20, - "h": 21 - }, - "frame": { - "x": 173, - "y": 510, - "w": 20, - "h": 21 - } - }, - { - "filename": "711-small", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, + "y": 8, "w": 18, - "h": 22 + "h": 20 }, "frame": { - "x": 192, - "y": 488, + "x": 186, + "y": 503, "w": 18, - "h": 22 + "h": 20 } }, { @@ -4434,14 +4665,14 @@ "h": 21 }, "frame": { - "x": 193, - "y": 510, + "x": 178, + "y": 523, "w": 18, "h": 21 } }, { - "filename": "696", + "filename": "664s", "rotated": false, "trimmed": true, "sourceSize": { @@ -4449,16 +4680,58 @@ "h": 30 }, "spriteSourceSize": { - "x": 10, - "y": 12, - "w": 20, - "h": 17 + "x": 13, + "y": 7, + "w": 14, + "h": 21 }, "frame": { - "x": 210, - "y": 297, - "w": 20, - "h": 17 + "x": 196, + "y": 523, + "w": 14, + "h": 21 + } + }, + { + "filename": "703", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 15, + "w": 14, + "h": 13 + }, + "frame": { + "x": 166, + "y": 544, + "w": 14, + "h": 13 + } + }, + { + "filename": "703s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 15, + "w": 14, + "h": 13 + }, + "frame": { + "x": 180, + "y": 544, + "w": 14, + "h": 13 } }, { @@ -4476,8 +4749,8 @@ "h": 22 }, "frame": { - "x": 178, - "y": 531, + "x": 203, + "y": 460, "w": 18, "h": 22 } @@ -4497,243 +4770,12 @@ "h": 21 }, "frame": { - "x": 196, - "y": 531, + "x": 204, + "y": 439, "w": 18, "h": 21 } }, - { - "filename": "686s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 18, - "h": 20 - }, - "frame": { - "x": 202, - "y": 468, - "w": 18, - "h": 20 - } - }, - { - "filename": "710-large", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 8, - "w": 17, - "h": 20 - }, - "frame": { - "x": 210, - "y": 488, - "w": 17, - "h": 20 - } - }, - { - "filename": "710s-large", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 8, - "w": 17, - "h": 20 - }, - "frame": { - "x": 211, - "y": 508, - "w": 17, - "h": 20 - } - }, - { - "filename": "653", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 9, - "w": 17, - "h": 19 - }, - "frame": { - "x": 214, - "y": 528, - "w": 17, - "h": 19 - } - }, - { - "filename": "653s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 9, - "w": 17, - "h": 19 - }, - "frame": { - "x": 197, - "y": 315, - "w": 17, - "h": 19 - } - }, - { - "filename": "677", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 10, - "w": 16, - "h": 18 - }, - "frame": { - "x": 214, - "y": 314, - "w": 16, - "h": 18 - } - }, - { - "filename": "702s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 22, - "h": 17 - }, - "frame": { - "x": 230, - "y": 315, - "w": 22, - "h": 17 - } - }, - { - "filename": "656s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 11, - "y": 10, - "w": 18, - "h": 19 - }, - "frame": { - "x": 193, - "y": 335, - "w": 18, - "h": 19 - } - }, - { - "filename": "674", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 9, - "w": 15, - "h": 19 - }, - "frame": { - "x": 190, - "y": 356, - "w": 15, - "h": 19 - } - }, - { - "filename": "674s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 9, - "w": 15, - "h": 19 - }, - "frame": { - "x": 190, - "y": 375, - "w": 15, - "h": 19 - } - }, - { - "filename": "710", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 9, - "w": 17, - "h": 19 - }, - "frame": { - "x": 190, - "y": 394, - "w": 17, - "h": 19 - } - }, { "filename": "710s", "rotated": false, @@ -4749,8 +4791,8 @@ "h": 19 }, "frame": { - "x": 205, - "y": 354, + "x": 204, + "y": 482, "w": 17, "h": 19 } @@ -4770,8 +4812,8 @@ "h": 18 }, "frame": { - "x": 205, - "y": 373, + "x": 204, + "y": 501, "w": 17, "h": 18 } @@ -4791,14 +4833,14 @@ "h": 18 }, "frame": { - "x": 207, - "y": 391, + "x": 210, + "y": 519, "w": 15, "h": 18 } }, { - "filename": "696s", + "filename": "665", "rotated": false, "trimmed": true, "sourceSize": { @@ -4806,18 +4848,39 @@ "h": 30 }, "spriteSourceSize": { - "x": 10, - "y": 12, - "w": 20, + "x": 12, + "y": 11, + "w": 16, "h": 17 }, "frame": { - "x": 214, - "y": 332, - "w": 20, + "x": 210, + "y": 537, + "w": 16, "h": 17 } }, + { + "filename": "704", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 14, + "y": 14, + "w": 12, + "h": 14 + }, + "frame": { + "x": 196, + "y": 363, + "w": 12, + "h": 14 + } + }, { "filename": "694", "rotated": false, @@ -4833,8 +4896,8 @@ "h": 17 }, "frame": { - "x": 234, - "y": 332, + "x": 208, + "y": 363, "w": 18, "h": 17 } @@ -4854,33 +4917,12 @@ "h": 17 }, "frame": { - "x": 222, - "y": 349, + "x": 226, + "y": 363, "w": 18, "h": 17 } }, - { - "filename": "703s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 15, - "w": 14, - "h": 13 - }, - "frame": { - "x": 240, - "y": 349, - "w": 14, - "h": 13 - } - }, { "filename": "712", "rotated": false, @@ -4896,33 +4938,12 @@ "h": 18 }, "frame": { - "x": 222, - "y": 366, + "x": 202, + "y": 380, "w": 17, "h": 18 } }, - { - "filename": "669-orange", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 10, - "w": 15, - "h": 18 - }, - "frame": { - "x": 239, - "y": 366, - "w": 15, - "h": 18 - } - }, { "filename": "712s", "rotated": false, @@ -4938,12 +4959,54 @@ "h": 18 }, "frame": { - "x": 222, - "y": 384, + "x": 219, + "y": 380, "w": 17, "h": 18 } }, + { + "filename": "677", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 10, + "w": 16, + "h": 18 + }, + "frame": { + "x": 207, + "y": 398, + "w": 16, + "h": 18 + } + }, + { + "filename": "669-orange", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 10, + "w": 15, + "h": 18 + }, + "frame": { + "x": 223, + "y": 398, + "w": 15, + "h": 18 + } + }, { "filename": "669-red", "rotated": false, @@ -4959,75 +5022,12 @@ "h": 18 }, "frame": { - "x": 239, - "y": 384, + "x": 236, + "y": 380, "w": 15, "h": 18 } }, - { - "filename": "661", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 13, - "w": 18, - "h": 15 - }, - "frame": { - "x": 222, - "y": 402, - "w": 18, - "h": 15 - } - }, - { - "filename": "669-white", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 13, - "y": 10, - "w": 15, - "h": 18 - }, - "frame": { - "x": 207, - "y": 409, - "w": 15, - "h": 18 - } - }, - { - "filename": "661s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 13, - "w": 18, - "h": 15 - }, - "frame": { - "x": 222, - "y": 417, - "w": 18, - "h": 15 - } - }, { "filename": "677s", "rotated": false, @@ -5043,14 +5043,14 @@ "h": 18 }, "frame": { - "x": 201, - "y": 427, + "x": 238, + "y": 398, "w": 16, "h": 18 } }, { - "filename": "669-yellow", + "filename": "669-white", "rotated": false, "trimmed": true, "sourceSize": { @@ -5064,54 +5064,12 @@ "h": 18 }, "frame": { - "x": 204, - "y": 445, + "x": 205, + "y": 419, "w": 15, "h": 18 } }, - { - "filename": "704", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 14, - "y": 14, - "w": 12, - "h": 14 - }, - "frame": { - "x": 240, - "y": 402, - "w": 12, - "h": 14 - } - }, - { - "filename": "704s", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 14, - "y": 14, - "w": 12, - "h": 14 - }, - "frame": { - "x": 240, - "y": 416, - "w": 12, - "h": 14 - } - }, { "filename": "665s", "rotated": false, @@ -5127,8 +5085,8 @@ "h": 17 }, "frame": { - "x": 219, - "y": 432, + "x": 220, + "y": 416, "w": 16, "h": 17 } @@ -5148,12 +5106,33 @@ "h": 16 }, "frame": { - "x": 219, - "y": 449, + "x": 236, + "y": 416, "w": 17, "h": 16 } }, + { + "filename": "669-yellow", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 13, + "y": 10, + "w": 15, + "h": 18 + }, + "frame": { + "x": 222, + "y": 433, + "w": 15, + "h": 18 + } + }, { "filename": "669s-blue", "rotated": false, @@ -5169,31 +5148,10 @@ "h": 18 }, "frame": { - "x": 220, - "y": 465, - "w": 15, - "h": 18 - } - }, - { - "filename": "710-small", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 40, - "h": 30 - }, - "spriteSourceSize": { - "x": 12, - "y": 9, - "w": 15, - "h": 17 - }, - "frame": { - "x": 235, + "x": 237, "y": 432, "w": 15, - "h": 17 + "h": 18 } }, { @@ -5211,8 +5169,8 @@ "h": 18 }, "frame": { - "x": 236, - "y": 449, + "x": 222, + "y": 451, "w": 15, "h": 18 } @@ -5232,8 +5190,8 @@ "h": 18 }, "frame": { - "x": 235, - "y": 467, + "x": 237, + "y": 450, "w": 15, "h": 18 } @@ -5253,8 +5211,8 @@ "h": 18 }, "frame": { - "x": 227, - "y": 485, + "x": 221, + "y": 469, "w": 15, "h": 18 } @@ -5274,12 +5232,54 @@ "h": 18 }, "frame": { - "x": 228, - "y": 503, + "x": 221, + "y": 487, "w": 15, "h": 18 } }, + { + "filename": "704s", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 14, + "y": 14, + "w": 12, + "h": 14 + }, + "frame": { + "x": 221, + "y": 505, + "w": 12, + "h": 14 + } + }, + { + "filename": "710-small", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 9, + "w": 15, + "h": 17 + }, + "frame": { + "x": 225, + "y": 519, + "w": 15, + "h": 17 + } + }, { "filename": "710s-small", "rotated": false, @@ -5295,12 +5295,33 @@ "h": 17 }, "frame": { - "x": 231, - "y": 521, + "x": 226, + "y": 536, "w": 15, "h": 17 } }, + { + "filename": "682", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 12, + "y": 12, + "w": 15, + "h": 16 + }, + "frame": { + "x": 236, + "y": 469, + "w": 15, + "h": 16 + } + }, { "filename": "682s", "rotated": false, @@ -5316,8 +5337,8 @@ "h": 16 }, "frame": { - "x": 231, - "y": 538, + "x": 236, + "y": 485, "w": 15, "h": 16 } @@ -5328,6 +5349,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:049c5b1c50b54f73bca369d3cece4336:2c861a7365c9c9423b050bde6e7e0742:96737d38f2029744a75c1ee001bc1929$" + "smartupdate": "$TexturePacker:SmartUpdate:a80f4550917ab6469d19d3cdd7fc8ebc:a52ccf05d060a2fd0a793e2f02508109:96737d38f2029744a75c1ee001bc1929$" } } diff --git a/public/images/pokemon_icons_6.png b/public/images/pokemon_icons_6.png index 9373aca8b70dcf20e033ffb7a045298cff2907a9..46ff8597ce20ddef5dca09886e2b1ddcce49c568 100644 GIT binary patch literal 45905 zcmXteXFQxi_qLX3(USptg-d84aNMZru#KtMpH@mkg3w#5+;5DAhI-&#T; zQX>Qe!~}1&4b`-rJk-=)1qBB7_Vldnj5|3wDJv^;aBvtH7~t`E4K3}`UvcZ}YjO6{ z4S%}ALzAK7Be-)-H+`8FRe-nmCue7yAEl)()~2Z*dYG%2qMWpyL2?}@$ki3Y$QOzvLEBp_Nqq5m>;NwPhh-^$bV;`efstNDPr#mW_L3rjNS1Y{G{z~o0}U0 zxsnxKDtR~hJ5@Xs+uvC~R>>DRtp*%TZ-`X}9YRYg-I z$+4G9fXBS|(m~5!RVKc1e(Q}Y{;Eg0<9m6ud!1pus#$HmQBZ7L-0LsLSwaFXW@flr zvNM>{NQdjm)jSt5yMKK>gpf(d1Bl6M$I~WRIH0<#r%-?i=Phi zURtm9eAB*s4h|j0ul9w0ONzwob`O8kt&Ub*LE|AQ3cdPvumYO-zowG9F<)E^BtL6~ za`9<;nZn{zh+K7!5#n4xHqx(3O-w@D<G~^^_}HJA7Wef10X{PATul(l{;A zP@k@f{_B4=@tD7c`tGpt&pUX$C*C@lv>;AVGspC;?cXl^P+v~w3HD~N-)r`-g{tOm zAY^GTt?lz7eijeURsNN7H*OBDFZncg&8K0_><0)KS??-%&iGr6MUdNx3Uj*a~61aH+^ZuPWE(a@@9Cm{y#7o}@wDi}ebqZ>$@jj;(kj-5v<&~%>}N{)`E;G? z`LKy5A!p-dFO-AT%;UcO=hM5hCIcpNjZ1UaOP#rRGZ(nm_}cCn&%4``NB%h}mk)Yf z-FUeaRO55G#KiQCaU%8GW%xJ<(hE%OTy!t3;W&nNONAs(=;`H)SO+epcXdowzadvX zg1|qvPDK-NP>M}8NFErYsrdG}FL&2%(a{~tZ_8GezXl1wZ;&7cRF;B#uCz)22ABp_ za|2WY`2D&-H~WqK9Hb{#ZIU#8@s(t6B;}%-&%F4f7Va8V;RgUo{dn+xwj%OwXrW3J z5hd5zSV1~k(t>o}ItqF9>O;Q0x#?orQ~@+w5Dq@EcnnmVbFM0X$I3nOwSSg))p)Zk zvB1^(P$NBGLAe?})f9~~?0v(7GE#}!taw|g`}cID!^)3!gIib69h%$}&1uV}?io*zf34d2}27Qn9s(LKKs zMpehbmWJue?;i^Ui)>H@R|hra{R=5g4jU)9YlF%`(se2`vYYr-yQ{B9DEt3NHpQhSS2x`m*ooiEla=xI+VFCIUOQ7 z`*=f#qRZ=ieN`oDf+vDEQuD0Rl#EOO_S+isy#480ZWua=JI3TtsMTB8Y`0JJP^}Ll zljmaAJYL9W%|S;4Lo>!F2KWpocc1CdD6$q0ixamPbKzF5WhetIsGEw z7lr!JtXMKE&8xVHX#!eL8`6AS6sR(Zq0L&(60sePrlXd&BeAUQ?2NVT1T$j%d)_iM zU+_DJ9PrOlP%X^1#O%4ZI+^KxTzF}?0w9UfRihdAu)}PWpIG~+`rZ@je7CsXJ-*&u z6|A_m^GtyCfN*!*GI3C$AW_?&Ej;u@-wr{HHWGKJJ&+$^^uN!9Niu^4B^tT=yxddn zfM})DfjK?pVMO=pZ-ht5#aC(G{(M2CaeTMRqk6LRZa9__5LKiI!B@} z6UVG3Pkgi}5R=~4S!{2OXj)T7%#5O{FpJGg15xr-*A(&i2qtj{yRnQ7zoY;8y;o~N zHK!d{;VLxV0S#K|>g*2!iti(7G~c8rYQPrnn=C*RIlLTkvFss+8r|&YgHXNyy1;;c59(8SF{&q4io*a2K_d1a z(-u&flMjJnVdOg*RFC4p@IVVNyh8|gm6Rs6eFbT<(_jxIU+e^I(K(I3&o)7sn(lm8 zH-p*Un(^`d-$~6*c`h#KUNW|2i~@1!rgI^Xc1TFLbI3oN>%*qJ&CHMUpzi>!;3 z_r1gU<8KwR&W-5sK2_k6noX!+u*vl{(GXqhK}{78Ke_zI^vA?sp-ErZCBUCpt5Evq zEDUUUE6yfSpI?E)UP8*4vTmK-#!k%dx^SP?%R_bX&R?D>Wj`*mC69j~4&I<@RCXLM zOfJMwVg1+n>gy>d*D5nKy%i(p(Xgof*^gJ~F6IY=%g}W?y~s`k(Up8Bt^J;Or{2=M zmYk={_QkvS8CK-Pt0nN2ZB6Qn!D>Budn9XnOj2r7h)Uv~V{Pa_zYv~Ef?Svjr%@0gEzLQBi61DAN_<2)yP@ewrw z{H{cx1MjUCh8)F*%zR22p}`towDE^qRpd`Bq8>o_@%c2k>-S`SAv|L>>i4%u_q;kr z02Y%`J&$>~rvx$yUJ3FU31lkfzpo*1N9pHb^$k;S#?j6pcVSr$}+nbpe zWYp|yk6M;^>Ic+^x`xh&hGFJ#O#!)ICgm3ooI*6`+Sr&+VLT3c2#@acL*7ABo!}op zN10BMPASA{n*mL*=CW2O9KhRN?E3xA{n?A@Kf}rSC}D@Iez(Mjihb_u05#0i@c-zOfK_ye^A=ihekc&HNH)9=b@ql2|>s-k?NL;y5AkV zg4r&;*J-5RHW?M|yj85aDz!dpX01v1AX6WiZEKkHK;e2j#rqlfY=}=zWk-8|q28h+ z@M4yLF$+Rc2uWKn-nX}j3n5n!ls{Q|QtxXUQ;i_jBv&oS*Iqsf@f*IG&`)re0Ga@) zSa*c+5ki2K`Y2fiXa9T4!Y{R1*(HKi+tP%NdMqn2_xu`%)q_3Jf92B_Rk4;2r-vUkiTiLKeROiG*j>m zn%6{6`T4v5JsIKTj)Y}*noeqFX*SDr*858)^?n@&-rk)T(g3qqWw0xc{CV-jReaGE z;;ky=&RcU43U*NjYpnZxjU)PAK5&aWjq^x&5t6?z-h=6D`uH`EMK&{V$x6aynsJaJ+n zLsQUH8CY6XW;T;C5Q676SXO7a8(abu!W8tsJh=&|b&p+E&~X5q9x>a zQ_fLP5W0TF1kf<0+}_w|vf4(&21nFD?KI6>7aw% zg{eSP^h#$xU*MOTV4#=ywLZ!xq_65X;@Uv z^~U8z)y+ju{>GLI=))Sc6()>fvJMV-#;3K{>jm6|sk*l~T`Zc`kN>i=Y&0|cts$WO zPq?Q2H+on>8K{NYQcj_$c2VuNqR^`Lmu!}2)vqnipFr_edk)xCFgOA~z>p#?ob>g!d zlLL&s>%^rcA;C>YX|&erNRC+wK`3_3yKn#GK}KNxe%Y%aR9*z`^UP=(v^al&#_!&v zf?fG^3!;zLFVO)Q5i|{N=cpYlUF0b>1wY<7?`$%s<|_*N8`ll`cpOv$cLsnp{($Yb zi_#d6w9?PQtCvz0%X7t_ktH_Mi=2LwZ_&p3Pn>l^jeq@!Vi&~+Hj+GA-vlb7e##_X zUsXQoVz&qeMZTf(9p0j5zCQ*|OR*@z{X`RhIluu=EJX>OxPF0-C77^#m9-%Zr`)lO zBYWyVrM-$*R)G_=AAEA;PMUjjH$dCt#je5hp?R3*F*XIeQ&O6c13|0LO2Q&+NuKR8T_{tGAIB`^q5S-*X*>*7}64&T9t*aX*M<@ z<$h@V%thtTz3JJND`LsTT}?S~fc-@(-bxx!9Pz=Gk1P2u$gn<<{T{Tt;A!#8HZz3} zn_d@-6O=Va9AGBUjnq{303>|OTwDl&-sy&sftmy7OnuSW831j)CFAQ6kK8~#|E+lM z4QG@|28i|4{Q=X*Rc2PJyV2q-&2PHZNc=12d!J_={7Rru{dxPf-Rdu$=Lbj*0x+){ zrn6s~O5g=nMp5QvVyL+o>)>XFZTG!v|5-CiR&u`1+1+%HfN5v>=|t2w50iw5282qK z?u=OU=lque-_n#`J%V^2&Qz43su{RXwKm4(Oi6cb5Y|86=*E2*yL+8o2=GhVYC|8G zBB)wfo~M-!@D?Q#lBn!K^&SQriXpO_zE-YBSlxs03jblrD-=j zx`F~f6;;jev9~svvSG(kDc*+0&($4pJh z5f7&u>nlw1Wmq8?Vm=2#vs3>DAz3#E%tF9N!j;q7?@pQpBn0WMJ)dq#4KkF}@7buL z2kK9U;=tk|%FoMUv-jDZc+bSlKI%OQuNco1XQ=xq&@B)+cZajci;o|#yQ{k?Ow5vB z`Zn!pw&tkjbxhySb0OT=%tFd(K1jBWVK|D(L)YC6-@+40G-`1&!G7_P=CX;6m6!a5 zNW-gqd(}#{Ybm|X%tDF47Fc^~d+u9f$;MHSxoUHDRHbpXtSz%Y6FpAWsS%+jy|`%R z9n;r$B*x*d2Ce2H@cylFy(nKFgWpNu6)^Qk`P2i4vB!X0wx(j0NVM|{E4E_8^pJr? zw~RuE6_~{+Xtv$4Xl#cTb6hoc1XRKbOx*R>{bUcj7Qw%&o{Ml^sG69YYoT~rKl8U{ ze?z$B=B+FdD)hbl^mG^w1D~w4^uZO@2(UMd_wR=Swj~f&bhFoR(_otO2$}6~WNxo! zuZ3AWn9gsI3?7Q6i<#nwIfUc53I>nE%yp9dJ^1&z-vkO*u1{Lc=&AoRc#-WVw~!Y% zJK1vn2hRj{!bWgK!9~IxIBnfRCBjJ;n5*tBdm^IZ(96Yik)VB=`kVGB@8lEuMosU< zB(fE>T@l}fo-bR63>(mRX^xG!(qpS1hn1OX@v!ZFRR;oI^k+yJPQrOW=w`>Fgwz(> zH9IwM25Nunx7yB;<6)?e<6N$s$t%mUdr;|dW0#W=%wbkGdEV*lRtwJAonVsBS?zZ3 z#;l7MrnDT+D-0u3MCIIKavyZ4K#g$yE$uqx1)-<8+JC}vZ1V1ju8)2OcD>2*rva9L z4$$pYd?RIS(xw-oL(O|)ov*Po7aj6Uj^iH%S!xsR1$7a$e(^DHnvz1*z&CvaCToZ@ z@v8x4@OPv$yv|-;Bfp0(>lyxhx)0C@U1tI;9FX?Dk$0!EzM^5F1U1u<%f8)9w*}Ly zbibm3jhPm%Qv#;9Y`(xHC_5429grvgMz7Czhj9BgTMG55IKN0&>s4dhfJ*bstc4b% z4%u%U8#7-&y&EGyQsG?UWE-d8(RpS8IL1dr_EA=8AAfDC|B7G@O$BzDI5_OQ>hXKL z1AFvUqKjp4IG@aK!zK^&-0I^lA^uAhMs4P0I3J)t^6|kHzW%|tDF2e0raWNjy)Fu3 z&BNRxAA5qYd8)hQQQG;q^!MiFcY^8)wSl~0Va7h+(89R=zt2P0=X8khoZ0eR8;%aL zRp{{e5f#a^exPF=w2ZQW^PR#0uy=TIclyo}?Wn`1{izi6onJqvwcFVN>W8izVCkMz$NSJ2oJhF{xZ0rTrXW?{T27(tUY&gS6ZPqDo z<|=(Gc9`LPtnBDjYgX@~;Vp*ylGXuY`$3RjQpwS*qF0%}BON_rO4O_`tJ2loS-9I= zFdYH@8xu>#gx7+47h)P!GOQpy{16!sE+nLAmK$zq=d zM-F63#rd;Nd>BBoSYLbE{d31Slo}Lesb1}le~b^h!+*1qD_WnbYI8sSTC|6APXEQu zK#UM~tqQcO=2`&P_@lqCOdzF=x@#rgOUg|!Q-oPQS|>gjv3k(1KO?sG+%(FHH7mo|Dz?*E^2|Qn4;; zIr@^8H2v|ePUoGN4v zEI$N_VUjm!PtdQk@B*7G?iPFF1k!QZfJge|)+Z~yd@E6d^vn=rIqpY*yjkdie4CBm zZY(6l-6sbUWGhYw`*SJOe)y{{8{SIk-sXDl+9~>n=eh_=;WPROS3I^&QG3@r1s|H0 zg6`f(e*=S%C~vK?NUZMn7Q;nGT|V;W1ckSh8d5A1u!N#>RUzs7tDda4ne>t%@9igG zyqv6jdH$pZZ{T#X+NV)L3->rYirM$N| zecc9HUQXI?QTtr$d+eIM>gO~>zCQAg3L%Q}U!NePBh*lKyP@|4wN{FRAR9;{H)=m+ zm}qTV2SW4L_1Jt>Z5$aly8*jO6#yB6Fg zm~+NP&G6JlA}qVhtjGivM0#w`>V53I5F3`SBn15+dYUpj ziy1J%D|KS{9zOyj#ebE7EC4V43$DV}I%sMSXg&nHSZ*+6E$-321 zL%m>|K-1y-0=_=gc%kAikJrs+=Jb{n zUQ?K0WX`mL0~zr{jx)7qs4bz+X>*||d?E416Ux)JZml-8z4YmiO$#*V)GWpp7SAC_ zzF>Kb$OL28l1ZsSBuid~>gLTm&@KN0WeT?3% zxrlAc%Zry+zYDn9@VFs=hOOG#J55ZSLy~2Zz&TFUf4rwGG7M$*G8^S z<3GpY`D}1qbk;(tV(Gj9)lIWbZN>q>U9B8LvC?=z#mO+8hEtHoJM4P1VB`~Wg_WJ3 z;L%6)_PV-1pQy`yRU}bCSR+u5c^*3W3HBHey|(hb%+5Kmw{d5+>w<{ygsbacR~u~J z0TW&ij835sZH@0urY>}Y0TFuTce?%+JWku%E=iVo##(dAx@;AA>3w`>Zb{Iu`Xcs( z77|VWRz`-lWFU5r_*w(n9RazLhcCXV+FzCPqQ}sQ)2N=QJEF+`xXMHY#Ktn^JK*{h zMoYmcy?}rKp3o=>Y)r4RE@ObaVjhu8u)ns??01y2{O(3N^5`VG!yCT#Kz<}WU}fpV zPh-R^3-cz{<+>ov8JTq4)kV zG5tu<=BeBC6^@Tj*nKdGGw+x^&48b3p&(E`9?iG6BV=OrR1ICDQ`fXqx%;vRm-lgd zbm$1>*GTX_Y%(XYJ>NUXZL#Vh0hcBgAvHYBg$$w!Y>xKULq~P%DafFh=F!$&g~ZWO zGZTJ;floC7H?;g@#voB(W@e_VEB($Boa8(io`eK`kLe7d2ii<1v24SgrBkIJ8t_N$ z;?B-SeEw0s{$UXFyhqOf539Tmm>Sql@Rv^-uiyM6Ox5YIg`iSyFdoT9t9Ob zhU}(y@=0H?z&>7&%65h{&@k9!%MJyq=(jthB=$%#Uf=o z)XMx2#wepHgSFuBsw5)$GV0BhR0#BaIy)#}Gd;pGum`%K0seXe@WUysX)iS}q7(n5 z7d%<@&9>H{kbQze+9&9j|A>9IDv{9$-=cYcKv-TPvR>fPwkZGm$+J1`&3#6Fz?jF1 zht{1GYwe65vLiBHD2U_5IXG2{nC9Mc7_gFNm9)tS4A3u^2=PymqR zhz-d9+6dR15~S?No1uBb_zX=b36lJF4v<$qh+=u4!M@{K?2@6DcrCrB_lQi99{;|@ zG+YWSt%M8?8x80vqtpqyZnGBl9dW2vdx)`9uXtR`mFA|pqj7@nw|XyKeoZ>a_8&RMJop?f_zzm}~7jidWo11fB!qfgu?1Vc8&Z{j$V(xx;Q*SA0)h7F< zp`-6lmlDsI07UZcWKWcUKPJL4Pro=%cvuCw+eK*pwJ4xW-Iv@C_vj+XdQFmt@DZfW zj`nod+6wf3mpUHG37Qyrdm*zRTy*^8*Oz(!BM-wGN@R#zb2zRwR{oGPq3bi_qtJotV@3(NN@Fs;Ru;_$D3DkBtfs(_}#J6z#t)2j%Vt;4tUXp4(g85yCN@!n5snY-S(9 z{&8tPe{iMnOxdW6VTVMw9y`4#=l7c+uw8-N?(R_qAf$gBM3Y(<@hx%d++RjgUN2(& z93J;rW@_|L@mK$C#a+Z!isb&3Os%bY9fC0m)v_J?hwuyj1>vo(ftcO0rqUi_jeBM* zB`9V)pWJ{j>Zg9iHGOWE{RM%MgU1CwZs(^-FhWkECfv0O-lt?XWHLYM!lpG5sk!-* zfyNVT@N4bB^4Pqm=X~fgLe1Za6Q2R*G}jZhMFTZrzMjotWZk0+|2|;S9*WzNN?)Ju zVrNJ$!u%R=i^k~7W4XDKCU*bDo>@v%kog}H`uo;@leJYxy>brU<12Q- zJ`+|)hUg!%_b0H92#2UW_|!F|+Nr9|Ap#P|tyQ=|GY*VCzd^Y}{{3nHYhK`$ta)7p z3g9-zQO~`c6a0-*0_+X|bBt}lfBK;hLE{SnQ7rG6+8z%rT%+9j-F|0gWvn3Eo5AT2 zHAmi5Y|wuSC^t#8T&KV{a*gi~W^VK4V66>yfw^DMW5)sn9ph}FB$yajrO4)Uys#&hyUXfE`>k%I`(Y9ERNOagrtdtCMhFCRy!rE#t^tu{R}~LS+~c#&A2JUw&gXHp zN{UB(`a4q*6kqlYr7{iiS+8!IJ%c~uSGag&sWD^x3fcb2LjnDvW0Map3qH&*X21IW zBr!!0|0U+LJNti!QkqY`-AHS7Zy8cxqT|G&oyl1oTy$z*Z*L0-_JWo5od&F9CoeD!sZGzqlM zr0xzv%$GL1Ze+-*Zb}pYTX zh|r+OZQu;fkn%Zr5Oj5NM=n%5IZMm z#z=PY?Bbj_naO#Yn>0l3TODOd=KF2CP4yg1aLPL1*Fypa=Wy=tFYg^3DAtIGPeOW; z*tl?=8buB#arZS!;YSBjX1Y24JDDyehmPe}8l}=iIo~UoT2ZvE5p>0#DZIRF9DFWLD)H~QsdA>GC1#jSQ(oqEKey2B(f;mmCT7gN zI`es{TDusx1#&KWl6sJR5c{~mXO}X#e*3lnl2Vuq`9vw%QIrbjbG3SZ3{mV)>`rsk zO+wdj2F(k~+`?ljDmRgnzSfEJt;VQ{9;(}xach(0)*VKDus`~-AD5f%AokzgHRy+# zAvyQzkd1)`(eNe>O~aSC(oJgjQ%zn53pV$vM=F=%ulKh96C;j^l#ja+C@jPWH|8(+cIkE#JzaS02RZ&>(<+8o>og*tNYRxYEnB? zER`&IzI}FzeQ2z3tw0(Qys?{e9|EOj1b4`)bM@t)T-%+0is-$K=8!csvhc-#Au(G+ zsGnW#p;z*YbrqN$EIM3gnCxD#lvD5DPoLLhy%Npy3Lh4MN5Eq239MQV_%w)KQZ3c> z&f<=nieqVLzs9OL`d9Z-={|~LS#aWwP_Rs<9GEIfRG^bVrkWLvtIs4s$4Imn#bCqBriuB)@Vy)Vne#96lTm;fJV zr$oG5Z%a{d?-;m~ZAFLqu2YjDxpF>qYTNv;+VS1>Tu&krF4(^kl{B}7&R_#7V|a+8 zdlCUFUE1QAOl=D@B(+<`ldnnSA5QkbdT7cq=5g(fkh3~#4tG~08DE6%^-_(#cw0bk=wH{&Q(-z@Q2+_CaTe?U)sIIXbxK=E1spv)$k19P2!yivDV0bvH!S_^-l$6lkwy8D4M%Xf&b>d+iK_t?TCQ_ zM%}X?rquPKa#>*p&P5Rw8jfI=jTGDlVxz0c%Ztus*rk?ah*b3_fc2i$x(AU{GQ+C> z;azX^fN<>{kT-&nl*Wd`TnQx+tqMFr?2=soQKnqoJh9jIV!nQKRmXF#$CWNBa%{pP zBXsjb0Q6)cD9k8|#thB3Jdk{u<+|)F($pTQ@MVT(jImrpg5CKv!l3m1=mXlK>6dS0 zyr1spt4>g@XFJGDHPB*z+rKk1vcCWsfKL9<3soeWzf}$?;3)xpaEtuV8>zQtnE%n~ z^d3Q4s*qQR&_aypxlwE@m1V=_tlMfU=P9Wd)45IkV`%@MsxAWD?_6!5{dBq_c_rH- zfwQMp&%rK5GXY4)lz;!%DS(RnE)QYymb*k~>(tbg?8Tc{%{aBk8n3V*eS4|7mze}+ zyI!j6*@CyhNKVs_4N*oAkw1Jpo{@g$@x90rFf(zEXEuA*`MH#3&~YPVk)$=SE(~A6 zpV0)n>t3djU<~;FQ_IY(edgUn&z!L@H?EOkkfhbeoFweI`eFM)#`A%Cs9Us?X`M|{ zDxL#lZ)9|v1FHE+6pPzu77HxQ?*oa<^Ed5ub|GF^J|N6Me$LOwU#0^=Et{@5to!tx z7j(M3>4LV{ro9&tQ=rHeyr%H|(HLf@5IShyAjv}`<8W4=57l|Q%zZEAM)60Hj;m=@ zz9V0i1Xj{c=~I?kyqKcYI}tZ0({||EYKPr%i%y?pxxR zRX>;@5pAHs>2Ld)`M($=iqILFqF}|+AnJr-NTCw`*_7-j_Aa%LcUF(8`K#-9`Qf7O zRxcE~-J|={U+2UEEk;pmL7KO)$x+?pY#3dAcgX~NbbeLjzNU(|fw@Q>U+tNSxPt?v zC?iQ~Z3=qkhpp0(=YY~A8(57GR6xNmGvh@v!OVHso`68z@9eM|Pp10W$%xtCJ59eI zXLYjoE(>Pm5sNz842M7-K~Oy=op%0OOHCEcrDj*URif90nLc{Y)a`Jvk4q4kYrxH0 z9<(0p2l(_v7{>M#xip(9G`$bJK(?HzYgA(&=Yk2P7`l-qUSh%hWo{FKwGwIw>#LIh zm2gw)?x^eYkkvN9aGI^Fr>i4=5Y%R@{YY@Iy1l=a=EAYNfIjMYS(7(aI>q8<*Ea18 zRiRT>k~xzPj}J%iAL3lCoW<~8n@Fh*;XTM4TbnJD41OshEyPNa>imO(D7{yS%84^n z&#>RyhwW(ZmpCY_|mNwjvtdJtPz2~t!MFT2L=dF~{M z0;_jDo%Ud_MnXvMKpYHWMran&(LId`Dw4{^${ifQO7_9s4d~e!_!X)Ii)lIs%pMHL z<`NPH6;r9JKf#v#Ip2N+ZJGG&C%D0YnJ7%PBW;$<7+H`Hx;%N(CJ%LNNZJr)I^1Fr zya#c__!H;vK{(iJk0@#K88J^JBy5OUB*GJ4JTO2hD&S2ukfJZGvLWQFwtfWgei-Ix zBp-X^2q}yWQtB)RBoUrQ$XcN_s({a7Z$MJNh}Pl}8rP{=Yoqp~YaKyXAMx#^#rDLD zIC@Fkn-PvV1r|sd!7JGQeYl0gcXyu*E42{k34V{kD~(7KUZeK0auTLI9I|6hPM_kW z9|pO;fe8fm37^AWVP7|OO!j*Zg0cjLn4%v8?x`_YUS6%@vY}v+yq+sBrV{L8Tf8;Y zo%7gT#3FxEd2cIX7&f$(-{S|-sJGk@_RC=&LZsCSzJ8cBJO1psHTRn+3MY&dI1+-# zx`Xr($g3+qutqOzb=^brZiy~?(?&-Sr9?^c0iiH*TF>R%E_(G@8}_kpD$?rUXUOw~yFLK=ISz0Ug~ z<@R?v9A3&Pc=@(GPhZD&Lkk?mKfri-Yfd>Ks-=%J^FQXR<2s=f05W;305YE*fF7=S z%aqhQ)p|cP9-1gUc|MwJt zW{%nw3HiN%Vuw2nACihWX>x{5hIX-1Gz6(HXhTy+GRFD=c2=rsw!|#>1u8nhne$y} z%?isqI`|3`%bV|+iTN8(2+OaRa1IBUv70OR&0Zc2?DI!DiAUE8SZ|I_jk^T;Otc;A zr=G-aa}T`bbO{vDPIMa(ijQPnnAG>XVuKe{nNq^fMwHT^y;g=J1xl$wS6tqb{tpHb zfvFuaj{^!}qp@+FQ08zZ6hA$-E39Eoe8$~g(XP>DJ!qfL&!D{THKOLMDC%x#EuEP>HukCwB5|&)S2D*aIWQE?=h)a6**+qW(xeNC*gc# z`FI=Gyih4iQ7e5pp>GV>QDVyozcvI>Rsx{lves5v`mY~WheJcX$tI>1>NjRhEb+Z6 z92j%cguRE-9^qfk^4U=-w>8Kwa!dh*Ao$;A+D(;=fa`$wtgm*+Bhy1V-;>3$vpk>0 z7~jsPT~Nn&U&4giW$fRH)VSwobFzFS4gNZR2Ll$JdRwTo`92*fb_i72|s^x|c-o5rz{Cz8Ipg(*k z^8WH#QRR1vQNNHspH7ym_@~>md3sL#`0rmHf(QkWxo#P?UdtP9 z3jDSNZO{yw=d~9{gPFGZYU~~`_*;4v2+kP6=%3uZSuFRhEgZ1=6_%FrQyE3xFx+LpV5;gzPW48(A;)YIQjg!t@UKpo8 z|4R5ve>7F7STKH;h>xdZF{0Dhvf^m_J8weLX}{^G=y-cqYoGnbT}2tR*+4C`IN z#~lAeVp0I3!*_IJ+3dF3^S3!=!;hIh%~fWa>wf{A=^YAzsk9$S3F2MmUKmT>r4NXC z9``f>I?RVr4zF1lEE3TUh*|gJL;YeQ$2k-ScVn;GPz|lM2;fRXMNv@?nNeGBu0cq) z=^e#C{|0p*J`8UZRM)J~iG5yr_a|?zBY|7wh$~F|ztpX^f0^+aS7rRO1Zr*k8%}z8 zt?&jogl_ukC_z;(xjB;^GEWsn%}*Gts1^IrcA2)?3b-xO^%IezBDb6nUN4<0>r6e_ zE;z6}WOJhR&A^%K5nZ^cCY6hij_hB!WAlpYT2^5!v%q|nX+$4u*N^M2ij z3_#6_fN)Xg82uD3^=c5HxAX>EB=7R>+>XfV6K`Rh8p*@9qhe(qj z(1fo1RaRM^y9I0?TnVL-Q(6|~q|NZAt)E7m{K9VB$YNP$c*Q}0EnjSh;O?)sd)*nO zGf9a5aI<-b3MNSUMluNENOdapi-X}^eZS83K1H6X!915pa@XU+nhf!Qsg6xX^e?Tn zcdd+|z5%wNdtP=&BcbV5f%_n}KhCp18G#lLL=EU5f&Hw_vSFiRyxDT5Rjx7?nqv%c zMw(PldY|k7D;Zxt>;3oSZ062)PXvB>JbUd<2)YcA zZ`0k(?xF?!RBW?)LyyIRj`xicSazH4O#Gl13-*ZSsZII2kj7m)^Rj!PbjC1JYbD?6 zSUCZH6V^bzLi&l$yqg)}4U9G2n|m>I_9w1(t1?t3VVZ@#Cq8Z0c3}R2+s==?=Ebu9elv{FxcRi%$ot!&hb$p5+hN};QIkIzRuXKl3&@WOGtzsvTq+gs>v-m;rd zMzkw8FZS6Pp>P%(!NN)@oZVGxpCBa5RmO^6BKm3R4{-|{%)$I4h8p?*&*^Gknbd6? z=oYKT!smYxbhM7t-ikYVdZO3@KWsfVA+WM@ySY3jfz|I`?phFjV655N*Kk>m4x}oU z)0NwYCEZG24)$y|9q|K`*WSyXKT3s5cO07ca$Qt3j^uL&83Ie(Y6q$X@`g7}_A-gK z_}asg%lFIJ4ysZ60H$r~nU_iB*At~{U-NOj*)%hq5ov}8xEbtPC%Ma!pFgG^@fUV% zxCV=j>vtW=d}ywzb9^>fF>Q3+uy3yCU#+CCz_r+&r?#+A?i}#?KtPN2!SmF3q@Z_{ zjM#KU(HafsGpq~xq^oOchCzQHI8BMiUP0{KSxy^-iOBpr|NNC>bO~exm$aq)T}tak zik8mUMWtA#LVv%^LrBsqbknf5Mll2^1G3;^sVVe_j3asrjp>A6zXsY~oxH{tC{IRZ zm9u+a?9-Hfs0|u|Np3>R*Z*3C(@=vNPV|nq$Mb*Z(bf9?jtf?Y+fA0vycRL$Z**FB zf3p5Fn4fHpHdMmp^=WhDEe{K-rEC9AOa7d*n0;U2QE7|Ac+MJ2otzVxTaS=kjBf`j zKOZC~@$D>tVqv-uA9@P3d9adr1=-g0evp0mbKSgzfRQb=yuDGNYh_4mYI%tM{-|ry zwRv#EE+?k-J5a-@jE&iTxXFP_teu^yN~g3OUrEmGaEBLfhwp=UP;=>^V_=Ur@`4gj zO@Jur{T7YomhmRMv2aLIFu8pv@fE}yuXPn6YV(=--n~F z{SVoPK6#kRj(;+}pklryU@n(cnbP{~raQj%OG}1D#t4QF(hA^5`Sl*fqc_dxq*-~( zx(SKA@+;R^Cm1JaPJuL_m3WG#AYww9;^C{UTeRv(>KEy?S8WYa_3WE5jw~!J9(N{9 ze*K4bNx*G`f2}3F)En2dyE7xqg^hwth++SK39LA`p+UN=zI@5f)w)OknNB$};#BFYJ>{B-d^Y({9Vn@9v z*X=Pc362WGx{jG*RMRAbUh~jTZiw_PsBaVNAi+OOLe_x29R$G`?QY6P6}Sx25?kNj zeUz_wSNXAsG^=BxUj^*Nb$JMZFe<_faAG3-!LP(_NI|XeUTR+M>V1s)KKIY70g|iR zUL|z*W<1J9^z|BeQ%XDE5t4T%Gs?dpc=4$M~mc+OMd`mSL@K5?{ah z-O5XJ`@S9MrEg4mez2Hs?jJ`CRY(v*aNO`kOfg{!!hD!k)`@Wj?%rWU-UTcg+ir40 zBpBX-ACCX?+?4YE{^Q&*^$pWyx+(1!x-j=Y->vzMiL9C>0DycFL{Ie+2|4SsgV=9# zuQtNvd&JQIkunCgYuR#b(uquyJsIEC$zxHyW4)(AeSyxf+SugK!8Px*b1C<=qh*EB zoW)RSF9#M$48;q1@`%17kmX94%#81WVQ}(c536q$y9sJJu~j_1_|o=}fsNnGeAw{Q zNPR4=0&RPJz&Rz3^QRdB1U6N z?bsO{a{w6`8^1tMA5i%j=H$sQ%kP7m9K^;oYwa=syp9Xu3(|Z?(mumIjHsfM=YdauW9fVG@7OSr?6#^#t@@8-5<+{T z)MA7G`(k%rYyo|1ga#aCmdaPj$tP>J6HS|6r9{_#3y)18&MsY<_W;w;l2CEwKtZMJ&mAuOgup&7|i1*r>k8Z*pmFd2`EGH*Wda{qbQ`G_rn)o zC&qHVLq-~?M!CYu1OPKwOsPDykAFw+EE{aik8r}G?EigwT-_lg{=PvKX(v+}J684| z@^8%{%*nn&l7SvfCRL0mfcky%1nM;c#BmQr7re*Z?m?_d=>6?e#&>dvccpSPZy!oi zG2GOz7Oz$X7M${dDhV*ohrbWWi0P-K zblyU4BX3AuGyd&ypv9YCpJ3*%H={&zN%~U~Xmh($et3m|>RoysPIo7qEot_ez5ud9 zj}Y#Q4UT@VN0e~RF}nA|b9Ufw6D}zVVsSRHmY?cNdg;iwm~=Z^)5IRIKt_89CO&6b zzxnMFCK1=OT4RhYKYIEH=n)ljVY69V)G`Wiw?V{QJGA)ljOD(V?5=Mlnwvk}T z)}sz6lhM?9vG+~u^)JXGMp&Rl(8G^c`bIBPuSO?me+&OH70F%B$WO=}h1A?fwcP0T zy2)R&XNu3!U`jVndQk+;wGL2BP_9|C&aorGy>1DyHekoq4}-cSgde<}MnzrtVtNWd z8A3PMe<97P;+MN3K7rrlS!Eg_N@UJwVvp|*D->SiNymNv|5^Z$Cl??m;rLFXLc#fE zXgxEC-X_vxB(Uvrj=_s+!*2u|jBtnwk+B=Rh~R0R{&=5%altK&IjUz0TU9}AW0(Ob ze7|IC%6l#THiI_JThn^TvnCMSpeW-d49G$NxZBzvIsL&5 zq3eM{b!uOFu}lRFUdNly<2&#prtuwS&0BMN`|XVP z1Q=0sLA39jA#~kYOq{;X5U%t$UqVPN$^xF7#sc5;Kr`8FPkv(R{w$@{y6A6fyNaJa z4#xeVxmBg(J5Z>2wH{5_Xn0jQN^1Fn=(DIp>z9%icF_93c7ypEmt2=6Zu&^m}6=e$;5L{;Y4$uhe@6F zcaoezDvxdBh(rCapRN@T{F3Rj#|>K@zicnu{Ze=8v`0%c#(f2Zt%k}9Y(H^26;QsX zKC$ioN9*^DS${?$jPiTo?j*c^hC$oU^yX{8Nonf*K=B9>MTq?*_S!vK-AFCzFEvAT zqjy!qyQR1KR z>Q(nV>uIf)!5sg6mOpmFo*XWx5|Sm0<-FN=scT|l;!xuAux38C5+LrV0boCL4$A0p zVeAgcno(L1`*XG$Xb0?I8lco};E;O`fm_XfTgv7eYrx4CmFehSlW>3G;9xRSu98 z2^ZU9;CODTvSVB@^EHcr-l<1X^>qdnoQDa3)3&eOveJ(b7rfw}TuTH2crE;zB2bny zmqV`3kmwxunt>^9nr(zhxMy=`q>G0cmDQ({IebmF!Z`C}kQxk&~sKG|0K^(Io#zM#r^1|8O4iK^q{_`$KLFN8xTxudz#0 zYHyEiLQeyIkT~Q?iSAcI*vDzF2dl6!G{q8r#(7?ZmNeCL!(I8*i_znh*!rkhvUtn^ z;Q-CX@pNu|w)9w-Qo(L3iQA}AiMrwK{7A|b?hTb&Ekd~~a>DncC$a=^rzDM@q#!2d z#XQAL_4q-6ET3vjo!7a)>vK;b+`jEYEWePKeCoG5YLpkfFFB~==pkiODB3-l|RH^raR}g6H13rERCa+lQ+Nv*n`rYHz zJ^Hx)mEx-?LLc{(IX6c^!7=e@g2J!oItSjQ8#fR4g&_AU^W9GWidKfNK70a|ZE#fV z-KCbb$*?_4Tb_$iY@DM#%(NYmNAmgKhp)ZL>-Rx?>+uim2)*JaUEb2M>P%)eCMl|M?D}Q-OTO zk=I+Xc6y|h1(g8yb!kv&A3k+RJ^nc#KJ8JG0(Ba~=($tA0Q2dol=q+w>zAD;&xH6t zXy|49(DwwpfIz<}hRC&1c_gW|R-?-9EywdMq7ox?q1$SCUrYqNb!|nPvO}?`_28ef zM}})WB*tfDGgLyk%7-7yhCXpts>WYA|yYJZ- z=r+uLgnlHs0aC@R=@U<3Un)KjPqi|D37cfBk7P;uF^@>Z9P1 zCYEJuG{tW9fxH8HVDiy{ZsV+eU0giFuutl^B~E#*YWqh+68`t`O!S^bqA@E6SCk8P+Iq}Dv6?#=)OE}uOo14Hhw zR1AQrsivxIDLFgJki)FLF(1SBFTUqn_*FD5f?YOJUI0pWg3HuR!U`8fn4VUuveeG> zV|y7=M8)Oa*+t&_1i6J@9x(NzEBMr+ARMws!4Imv2%NT8Gbm`=|xOKLb&*)pSp*s0#WD;@I>VQ*en zOBKq**;Nxqr*ru}SE&GAm#2LR%CvKQB2<(0an1V6uy>XgmdETh3PQcX$VDD%$d5S? z8#s(VEd`}Lcs-emTU+-0z0i?GdlbuF^Y^~kr8d(W94C|guz?fn>d*)Y-j-hlaP+JC zUj;I&{obS1Q5#a%xtYK^gTDoDD9!jKrrDmYn;e=&(H(ZCvMbb?*GlIo;i<&le3aTsHSve-2YXaigCAv9Z z?}>`v9*{kf30*QNF#rdu$Vm(1Nj zI&Ru7V4dD{N4>P_9Qn}Z`fFzx>nE==Dv}M>UQ`dCyoFedXuBO&wjw&##QTq0+b^6? zbT5aK17@C_5SV6K9VC*iMhGq)?2%pB6K`yRu+lr`4o&32lh*&p1M>PQ3;NXCFL)ds zVwrKcvVUZI3DJZp$It$OJ^WwiCSv5kI@_;+O5p+tLZ3hM$iR|46qCWmD(f3Zkh|}Z z`M(FsOkVIfv@m+T#BigVB--{n51Hb@R&;5y4kUk5Fl zi7qf6<31AuwkC`-B}dK8QYC8>eblxSrvIZ(=6^;hb29y$rP`ArJI4uKZrn;@dheKa zpbVy*lsUVhY_3!D)1{{@z>{a#A9V<6fw6pQ$);8U^o}4-%0XKK$~-xMMJ)5pwPIeG z1v-tU*XRO7HisQlkWo!RqX3?Z75P%Y>>R&yy2vm^ft`y>oyv2W5xMl~1NBFS!}pev zCM*HF*8TpXLJ!)m8`iV4?MX}7)T~zx0*vsmxa&Hfyt-IS_cY)dr=zrmD>_u3wc{>t zo)7wqZEKIWH1WE9Ab@ybf?vwy#!K3~9Xr7f3NF-1xE?GxwGF_stmuazbJMN;Qkw#fOZ|Djc$tiAlaec$k^0`__ zJ<&%dXNlXhOr@z*iqm>ChWO8`e=V=q4%7Ov6FlrWzATZ_;`Dw%CEfvrM{`$o4s+EH zp-x#eO6);@`Q&$O%u~qt=3J^J36V{2IqxW?#~^r3FohDnC*s-Kyxh8@xGGwEoa$~{ zX+2lny|rw{s~y8Wi%T>NKn*v!QkkiA`@wI*-)d??$;ZrA`eNgdbX_xq6l=TECwZFi zH5Lw!3|c?yS_|FL9o`jMzjjbyCyunUwKiJ@y%%Gs@MA&I#a)jr@l->ul#H?myILNl zGhYjaIBG(V#g8nLABXuYRgfL@OL+g23Jd!F*vN5Q;R~Z@TZJK@Wi?ns|FKhl7DWSX zM2b9BTX$*cyA!q4ok!G}LY>^$SrW>TucY$GC{zR3(8PPgDmS2&jA&CAFZSi=jowRBr2oVt8mK{oURs*Qec^A7rjJj z{%%}U#0IUOGa~$f=i~h{a?YHnXx8&*%grt$Px`2M<+#6TE?!(-;=7??4x#UxFB58) ziZctp(7ESQ(xw@+f7I_06w>)qmGmgBf~?!b3x+c1y2$FWdEf9T2rBcLVa6&3EpZe< z)x68|k50ZpL*L!u2YRi>rsutn~q2QLkurKMLI;hHZ8qNl@?u~JJ_ z`+|4X?3r*O?u1Cq@7)!kw(OMetus`Otem?K=z-&oo}Exn$OqISm|37zAn7>vi`i@n zwGW~l!UCvw?Mow)MX09`ZTDxFBl7vX@l=tlB3xl--VYwn%DRsBiaSXGZ`Hoq8t7(k zr0I=)CAtoTe>=dh-1_+JrEGe|r-?%gH}7q6NRVuc7Q(opXBn zPwryToZZ$HavCo0m5Y{5mDyrxnjXN`X1|kMbx5#8aMB;#H!Z}h(v#j6+UkHeEqk-= zK=WD~i1L0kf)o(L^5=OLO%)TdF&_m^ZuRvC;LwKL z5PX2`XF-OQRJqq?qI=__{Hw(wF5wOvA1Jmj<_~-(h#QDJ<(?%PDh=-O?1$8^3qqi_ z?VDW;!buWqw!e;=vth?^b<4|_)U}ToYDxCVD%*ksMqN{esayLXcD1iesVN()Yi?8P z(a~YS#>I>DzVvrl&fmnZHu`W5zw#C#zhmo{Ja9hNPsnRW=uLz$U191Ogb>!gFm}$z zYwl|S-B@y)k{I5AIl*6%v8I)MZfmbI*Z2pKHCead%&ba2b`Vf@m-Dgpd5yyL!7Y4{ z9!qP>JVY^ygtf568~n~h%XqXJvvF>4WHwRKHgAd~e*PL+bI%}T8W?b^8WMUJT$-A5 z>2E}1wB`43u_u)>^1n*5=ityjiXK5HLqzPWl0|TAwQZ4_el_jsLx^kGYG<~x^AWuQ zZUT#tR|#dPEs}e6VLmBd_X^9|`gq@LFE&0(%eF>VD!7P)h1N zQmdk~2Ym9Ur02~9C0N!%jhDNVL06#f4KL66GY6W(W_u~cX4|QD?FJ7yU#|g2d5KL+$%I$v912;2 zZ>!_^jklOy%iE?4O(N>HHxyp3u+rP!#E5Qt*QVUb_Go(y`B*wrYcFewf0UoCy#({H;?n1#dVb8MhBE8IBhnXYk4)iy(30< zis`Au*$|i%p)rbg{95D>K4!i_)~2qH-o}y$ReNb|=}D;}OIY?A4xtbSe9SEd{XSQJkV*{-VAARU<`# zl(N7#x&iNXa)O-BB$<55ceT_R0ay`lDnXwqb{;Hg(g^*!4zBS@e~NW2(Ut>qc*kn` z^#^$~oj92vB>3u;!w0P%@;vI{`_7XATJMR>dJ_uEOjqg&4PD2a3rZ6F_o)bB{HcbA9)@s037*|HTq0iAxtMiFrJGWwHY>5B-vV% z$}i$zyUSkjXMwS6Q?a<9e*T-mRoTrft7p`p(cd&QG`giN@7K2A2Qx~}S~CYc%O|+q z6;eZlCzffa@`HzP7T87{0PSg!<#G?(I79uFx@dY}O%x&0i+m@uUltKn72RVNG-Ot3 zCpR`3R_N+Rg#lN}VMC)jB=G&gzs-GhWR?Y4;cb#O4s-DwYF)RN>D3hu z8|O7&5c;E(mY+x7)hpxC?59X~-?qt*s9zl3P7f+&pN!Ga;LVAE z(U*<(vpp4tM4O7X%Mw~cB7u*QgU=qGCcfTRKeQx$s5|5DNyS2Emq_!T9XW)V??9+Yplwsu!>DC+yN~gD+ zv-YqK3-<$xB4qP5%Nku=9Qaj!m&}!nF&^=9xz5W9sz@trHgZBKd7?kmV7d|H6_l+) z;wIM!+8Yv4HRwv`B{mG7#~WsT*rhV+g9of5v_BhgL2?P=I#dJPFJ{!2L8%<|yUP*QJjMOHqwCO>dsLps<$9=ztBP=Ne4(lkxCL;}|!A?$IJ2)GehA;%s zQx?>D_<>c8%-BBYGvY@rzuNBAsgMJj>RuR&mnBc+-%JyKSBTk|pBDau9MXE+;H6)|vTQcI12`PUp98tCHa( zxsapo374}_CQ>vIb8E;+*193vKjWfCS<9TmEDNKJ1qj=g-$qx7=}7^DdY*gq{V{Nz z$GUjU`HG_sRK}h*(T5xRtp0gjjos8&w*r@TlL+Bt@NxtO3kT69LFU>MBF`Ggxo17K zLSnLYo=L4KuMg7cb2_*@lKkJv%i$Ur7N)_nnkgqT3p+(hh5Hx_7oW?6hz@Ld)PMr3*>VQkcATwgd#IPsodnYVCVH?OU40-ME;zlv%;Sg-;TX%ezc77p-KQw3?cu|FakYma1zH*oaJapd%%5_B1|3r>Yh>g zt5S&)c+cG1^MCenVeQ-Dm*iGkZ{L~t+h?;j{BROhG}G6w;Anp++C<}5vbUMECyK`c zD;^G`H2j-tKw?MOUZxL3mzXB(#!hyV2;4Wp_&&-!c7enkF!%;%{w9<1pu zyNxcQixs&zzU7QsDIN!-zYmfl2Ypp7-oGhl6@!wsP?ZuM49FxVICB7asy9V;{D(>wO%I3%_ekJziq+LyFQ5Om=k0)#7`G z^~TVeKa=3m2Q>A^*8=(Dw3Jv@e-jd%h)Yz;YZQJVc}@+GA(&*~zNWctaNO}XG_ zi(gWj>C^7;q}4^=#8J!owo%bOFzwuOmTyLuX~{VAo3s5S)B_ zQ#j<%KdGe8k?89OMIP2zU*E&b6aw$Yi^xHd9dbdtf>sxfh@G};`vuJucVB^e1-s6= z6A{(tscT(%c^_K!XrlIvn$4kY%d!(pn->lvA63tVKI|R|1zZQX)C)PvRQ`gX=%D#L zxqq!L)HXcsy^|CpEg80lG`r-|MfXBxW^6D)q8--6+lhZ7&iai zp*Qov@Ve!LshJYW>zz?7_=tM%Qu0nq$4jq>a{rap#kHHu$r>bHpko+et33pqM5cm& zWoE_|V1?zJ<7setUJn_ExPeg32|%oaqUv`jVfFO#5>3?i87x6Wq>#g;{P7G)hCQ&VNFF>y@_U*FTX_^iB6sKCPqxq4c;OMQ@#c^Yjnw`twQ+f~$ zV=zynaN;oDhXUuI_PxO(k8WzFC&@ikw{=@KZJM*oytD&75G6xW*VWG8fIM|u z{O5x@#_=I~9C=n3omws1y1ccGNvFE>;@>&&8zGF_o@>6e256rPfXyR#_;UpQKWW^Q zLgEHY?A}-g&7oHJAOBvRJI&rbR&FDdsdSqJvCC?C&@UzwMqV#%US`s$rm zAvKf_Qswh_;y0@rnE?T3MKZjCV^e=k&3FHd#=EYSmM(-R_xV*HJH9jjeq0K4&Slv4 zSIJ(lsWy1gkG=5PeAGO|UF}TWRaL}!68N`~3C4UH9eWq$qn?M7-MsemODdgV<4Y`Y z>f=W~x~#6LQFl+#aS_T7%k(K*=zJu~JQg4n@YP$INU$NoLXBZ1;z=l#eaJVEVFrZe z{_UI9D#Sl2mHNxqyGa`iG$L1i4BhM(;;9SYjfC0HRzJ2n4|jU!m3h#P)Q$pws%kZP z=`2nidk@s@u1~)b4ep`b&p=LzpSurS9^pU1@?%a6G4Gq+5^lVpmFZs ziIr1d(F+L0-uGNTef}mz@!`k7l*eiYQ@m>jLkF!TX@{c)vMR4cllZ-1(O+B}1UZs} zI>hoO?Ap@)gwABNz+~{$VZZYF{xyhtK-=X6OD&RKP$rsTa~Adxt!Mp8!#-v}RJLH< zkTj_Lbs?sN|K(OcOhm9abee4c!drVd{9pCi+%L?N_iUrP&Ca2o8i_Lst~@cD2RT20 zp)KOaxgBzOd3m-nzW5>{oUGEOQcKH4swnG#sezUjztO0is|uz`B}=DYP0&;)8&sg3 z-$6quo@1bgPYd$F<_sH+KwU~;)3r#L3;`NhUTNgn6Yt7ub%AP3a=y1r=yBz!gfKKc zqa=Jku;gIp+=O}B+o6>A_Fr#cH{G3v%bf)^Hrw=!hP`DvFjl!>_hp-}3mt26m&izx z>z&m_a$}OErFDRK%|g5sZ3ua|sfxudaJ_iW?L(uq1L04Q+f1M~&J=X7=6b$`^Db3o zD$3nu2vE3d@8;e$xR??5(mvZ}^ucEv0s)a&%lM}6TT$yQk+~cwgkPwx~bqGmHUeD?@B8uP-H($^cD3opZH1BrbOuvCg_1lF`41627 zAFZ!hgTYg4lFtLEocrt7c@1|4PhsJ~NAS?nmTi|WjY-X4-e&mj7$XDS+z&KdA!Zis zeva<@KTGK4Z{e~(Xaj_zg+TH9_}-$w27LdCvpR%SY;mchjO(MFpN(cI)*m~XH#HRE zZ|j#?R`5p1(-QO>NHIB~K2DEss}U~xd|J%~SnQNGgT^tKAJ@{~ z&CD12z)L(fM+eOX)3eiy0y|A%6(q}9FJ5_&MK`NNHoO!wGSU^C!5bGT7W+cNou`NU zw1N)Hex^_N$(d`rd4{WV%sLdJnGh*P1Enn+wEx>C>9omvHg;d%e7!o+1WEM^$+-g~ zRqqOX$8S%tZ zp8kt?F&>2uZ~C(T+0wbR2m;q+Bszmf`#VlZ25vv+cf0^Xg}S}S@KM$ajH>fh2jlnk$It3iA# zCbrgVy+|P|%9DeWZ%HrQ1J5-@8;-!4J7TG05U;0xvm!0a8UA`=dq3rUtu|MUgg$O6 z<9OhX3Gl=J1)X)3A?*6y*dJ^(y%5^8wsu75i7M=2-CVaVmf_9dC$v8oHML@SjT2Bn{%b~x8t8xc_a)NX zlJEKA9kIIIk2ycg`y%2heV zk8g-q0)_d~9~rW5tscJl8Th7GY3fpE9{POwK3;d!n(ZdgO%69gXuoeV5k0)Z zkFA0@yc=y|^8vKo(@b7ZG>2K*A5O9&we%qKCe>rDbLm7+g5gCowY^~ z1A}E`I+b(=k`8s46MN>o_X2+#D?A4l4JkP~^!ev-9$FT0Hny8Q#v%lFB1HcHK$85* zV#34B6m<|C!}iqZ#C7`TE^<*FhRYvl!g72A?I5Ml`vAq8H#tDPXUYmuO~$luY6^20 z%0|#jM*K1|ObPelOb{vXa_b@e9u@3U55y4xzRfTAd`!3+bfFxo0Xhic0->Uq(AYsINsrRASaz=*u%4*Fnd)yD|1en zp_=!Rz!94Ha7Q<}c=Txq54!Uf%aOM_r&HQeCmyjS0;eidyej;;_>tA3p6GMq9~#i% z-NGy)mbB z3M1k>^9_%~>#ipz?tE`hio7RP&*(#jA8Mg2E!pkKAfrVl9mZJ5Ewd@)=_P);+g|BQ zl?BCS_mj%(cn}*4bk76zGJ|w~zAEi0IK?BB)bea-ka7xzHoa_kiFCrv1RXh#fCT|b7y?R*dXX;i{$C0=IE)(ZeV6~^) z5akZDM`@lazkb+;s9@J_l~?+EKnixFD3EP1VSz$G57=bfmpQ)2p1H_z2SBhI2lQFp zu~5g@#z0%v$_khB)`>Mi!ERIPR{-U*>?zSOgaU7-^^&A%fHR^| z&G~TCf2vx8dLs_xH7fB%>$h|{-7>N(0^U`3*LMbbt#`ki7IHm994g{V4MpwPs^#6(w-wH@U8SDIABX}z>wG8aecRP4Wo zm(3j(b6;O=3;Uuw5)HY6P9JT?K^d>$uaVA(=_;4jNIE71>n~puni!C~`CioE2W^wT z05p-`8`(Bi_!n`~4vrKyH;xkMwmLqTQ{2Kdy$$C;T|eW@EJ56$WS_?zhJ^)~-Bb+U z!KEh3+tAoJbw+(xltrm0iV)|_zmvEWMI~>*w&hbe9Y^t{-<|QP}Udm;L1m@&MB)&H`ntQjhVcMsTGO& z3{Boo*o8X7sIG8k1BpbvA0Pm|RUhQJPFZ_z21CEO89sIl$G4=M?_zzC?8M(nsvKfS zJUz8T@VvoHz zN76kgbOHkdU#|CizZ7UK60V~ZS93jTdB|L3)${WU`ZM@|L?nik+ z3o|bRJ~5kP@QL5`Q~YoU49o#!afg#9z0#*79akm(#3lJ`+kAUgQ2Nir0QE%Vo<90dk@}uKIhpk+(Z;kP^%(iC{ zdYm!Rb6yT*FX?UK z+kHE$sIlgkBNWA;yNCOdV@yAexKdN!tB|do(=zHmAC+PXP0e?R1SLWU(5xSzSLTOA zG)qq%hSUBfl-`b*V3WkV@3$kn*G?B^y4)tbzAX?1XWTGRl_i03nlcleQ*U4I&#Vs^ z+M%0LeQNtq{drG`h-JfZaK;?6KxPok>G!usmDka-olsO6k6ZDCrF-@9+Q9MtGJQP8_2Ad%ulzH^}r#%;y! zJ5C{9U);^Q(#MHSe#7io00UwAjB?qF0{J{>@a=(ydkPN7*&q(n@74A8bJy!nzs8Sm zME{*LXxb%>!9OxYtaimISM#Q>RFeGitI2#W=!Y$M*^RSuML7BFB+j z@in)lvv%ypO>Zs_b_U5sZmQ(!tZy@+4yC^Gyh!EU(;3ui`7OsF6wrKH<2k|fyNETC zK4Nt$N%UH#5qT%f`D>ZI^;&^(rX}LwApIu!;z&T-0Chr;azc#_{Cez(jSz0xHRe{` zVQpAh#~nip{eJ6oKWT11`NYnNgQfv0qp*pWl;WGO;oK8?m|%BF9gYf?yq(8!-NO_; zNOwz>2!aM%ERck!1F$si9Ttc`a!o^QDfxIttk0YeS^DPhWW8PhHC#a1 zRKKY1)VzC^Y2?))ndNCrm&|^GM2}%Q|Mpf)6R2Q?L-;EjtpUMnT3Oh$?N?U zduSPue|75A;{++$9XIYiw*BfP1jyfZ!c_9qXY7Jc{y_9I_yw!fX#<(T6M`#*L0Q=o zGXbT650)2fB(GS9Huxrw9dGaAe91T)z~5kx#%DlVZtIV}a{PG}BrN)A({u_o)*1Hp z_Tm5=x?NYv5dc=h-<`ZIdKKd*4{xb4mxIuCH@*3Mh?d~ziEnUi6k2J`wTjvQ{XVpQ zX6?)fGxQ9#{T3C|0krNMHtFeBvFR-rNz<^>Kmw*2bbb2Xc}hW>E{`p(Q0)#R*sgE> zyaitbwEfrl$KHgs+py0Kpz@03Q`x6aPq})hx%Ijjr?Br++G$AReAGoSv3u}`?QLoX z-j#ywcc&eHpCN8@yAr!^O$xm8S;zPhr4S}#qUKk2faqFMK&7^w?A~AH}!|twnn=^CuXsR4DlcvD0nGlzl=YavI%dgiO ziY%kj5L~~DfYr+6<+9JEpe9eq*52kQx3Buo>N3+~OEubXzmR4f6{OUCQ@bycf_B{b zS-CnD&d)QKTW*ASXQBPRXntSwL8c3@8)+IMAo+Zgnuo4qQI>mu$u6cY^a^z}-cFBL zd%peJwA|%%IrrDpbX{v$LH`m~MwOl)&1b4)uXQOiQ>F$m@cRz?eJvMnYv2|Bm5 z81!4`<6~jfO_{j*P(+!}vC?{yWZw(^pMTf5Ywzyw;jcV!E&o)nSs@xNf@d)^eQOHt zXS{KFDrEVm+aeQIr$%%dNe~!NBLkI+jS)lt?kMDK343PQugy(r!3sHnW)$DRJd=FP)iI|v@o%n<2r4C;7_yWn z#gGJC8`NS1gQU6{F>z+M@REbCs+`ngdqsvHfR2*HIzXfF+EUls3*s!%str5A$5vY- zd%nRurNg$NMo+@OYc9jUPRV&a%;>Z3OwX8)Ot>lIn;{I4oNmMDWnSB%5{G~6rGaMz z1ETnLX6QJYKA8}M07zVycixsRfNU)fq1p_yFcqd6D%K%Ja$@z(8(XY?J;2CF3!XR4 zLwR<*yu3QKodB?`6-x-)XHuHK!|MY{JQtV$(3`}6Qykhdnb?1dds1nT*lAu?WsWfA z?gq7-8Cn=DT-w@~Tpp9W@YODR&{q}f1T{who=E?!(PIM!y_>C_v*kg}EiVX*ZgBF5 z{U+0%y2F*g8=)h=4_!V0X$?U!W)DW-C0$RKZ~24qm9~|73cldbU1vPW_ntHL{PJQQT)3;9 z)t8VAPpR3Ug2tVa`SX!u?(jF114V=&W>8lzikE@fSAgMAPWg3J)NaHY#w-utlXsko zeQVI)ySznRWI2i4pYno;mIJObO^o4U5+3!v4Jv}`ibX1po;;OSrA`$3I)+K$9eNGucdvGGQ znM&>-l>~UGlYc;!A6M~H(m9Pnz+LBnABVhXH{#k1r{)w|IsUGh0ax&VJE%Qu>7mZ? zsB#^T&lkTbzM!4Y7TdpF)$N-XQ4i5L+9IjskI$+vL{DOuNz-2BMHBIM1^}r@D{knN zQPbMrraPW2rQ4c^{%sdkN2Vu58o50be)S{a+~NAzV!wi^4bv5jM!EiE8(W=CmwGA9 z&B=H6L7z9nd~}AAiJ~btASE0x>v_bm)X>*7{+PM%D;p%rTQ!KMrsMXfEO~2EIs(&V zlVRJX(M+O?B?f(K8VGH8zU{(~;WCI}_REypOB)cgxMQvz$2G;SXh6Ycc_K$#>^VYh zWMG{qlwUsw$M_aP4LT6i*jq8Hpv>a_RDIjT4QUAf@CY5REgB~u+&=MqJyt#!Kn3*; zy7sW#-e&54nX>EJ6!h}779#7}OPQX>zq79eKm771{{gOmv2>BMfJS5N@i?Df>nZIR z`mI+_Pn#LIA9TD)7s~+ww=RlKmMAdfxl=?uU3`Ca-~nGuOy694RIWLb+R=Z+#v&nG zI6lf!j=$9Fe)P+T?b6Sfnb5Xn5OdP$AQt;gwVpP?N8&-3F{Cu4X(on+61o?ke%;RNcQs^D$NkO5Aq2`@GpNBctySC9a7@Uzxk*hgdzqtNn5tHbRbE(F1mEz9|&Yt z@lxgkx?o@6(c+Pgws|1o{u+?-=F0Sop>$)>v4JX`f$KlIn`_-Cjc)g9>8ry={KDKx zsrhU+1)3XLyYXr5ZIhevG}Qj;=F!>K?{!Q0i+bQ}O@9L>*j`XUKbstVrufl<^Em7! z)OJLfqVTRTkbN)P;Bg}CBfKT>Y~g3Pl}q5w^}Eo{5+K{b#|Qp+*^D+Cc4oqRGlJ&~ z={yh5skbCfBr4*2SxXz94iGwM6;4V1-oukS=9lzLq-&dY3q$vdV|5L4EevpTjiUp$eBU|^$(tYG9cDcwhr4pzYzF8?V(S$o=45D55JVwMzL2Qk+ z3$r4j@$b+`={1Urv;)k)zhSBUQK~|-cj;*|86LBuZ*y0lzZ$;LdfNRD&?!ay8#JTH z0}8H!qIO7DpMRP5{`0`hQzr8CWXXCqUi(awKR}%N@YC){z3-m^^aK$!*V|8nXRucy z?6pR?(w1(ZS0?Mx+z~5EO3GAztPH!DGhG#U(p?p`;ZW=wV5{2ZIH5$)g#qGk_vU%g z^xzpqCLo0ugD<)qpp*OS9RKj9{B~t!8Pmd_0H56);Gwp47F1;VD;4AW1& z9CzlXMF(E|!zsUq=UcWIwb|IchVgKB=>s14|49~whDmoV3k|1uy-$f}FK`(-9D0m$ zDfX)MGC`D69&@J6%y`Hpz!|mv2uC}Q-$S0fh?ec`NNCyfvqU22JxL&s44sPJBAGD{ zHxybNLp#`GB5K<7G;n{uyZrenhNp|Okt#<1YB<$Ed3xI|GxwfQm^fL5WAF1tQgsch z?roc#_USRtWMJR|y*`)RT#9pk)f<5egCKe{F|fo3s#+?J<&#Re*(SJB*tzh2WI)Ow zAyvyFA5;0mn;&)`x5umSsTCD~=~?)`>s$dB9GfZivzS}2$;_mrc(i2d8~=0tt9KV!~!n3GcYHwB&h6XUWWp~2&q)fgLDndnSNT12k6gW%K z5b<})yW+QF*OUuBPojLQ9}PGX{e>;Pv#LNvA15@-hnSf?(TVuYw*;8vO5GY(_2^yO zG!d73#%*ZgXYi^?QHh3d7b62HY5E{{AcIPx&j87Y`0G|4R0nI_Q<%?(i5Nw%hGz>{ zXu#KRsT8(=leT;LeXlvt-Tjj_R#tT4cnx41`pfEl;tT6se4T56$_s=BMPG(nSmg~Y zq2oktDQBVGuko-&4_8X=b zUA}+wc1~PbKkt27KfH+GDGX0*b<+& z%l}^hpfO+02nBcqznvF_^tHDKqjZ_l0Lu5tOl_A&FcYkh7~ ztyN-qU4;KSN(B#hQN8f@^dzKb{7@-V!KaHCYcGs5KYuBHJHSH^XY?_Dh9pQKie73a zr@SsM(1f2|2e^KX@nP#$tFCS>79K2|GzrDQl*ak%{?}jE^cMa`Qh(m35)0w$&@<5w zb(|p(yt}2zVFduit?LDB*v{CoEAf8BYV%%4RcS=2$l+Ff*sNw9(Bx zuuhF<K6Az_WZ6w@4HL5|~R9OxGOYgVCDdK>F_VYMz7O;UfIt-o(KUPMs`xqX+S z=e6ga@CE)Ce0K|q@cAC&OB*bNhyV{TzO+F`#PF9GKgBc$N&Pxa_eNab>fly{ttM(f z@EomM=SAye2md{PeO;Qv?E%meF6v|pG^%_kV=xvpeIUmJo;!^pu(A|@~~A0x{pI3T1WOz zN2<+kJObARoJ9EvK2+4It_b4(~3gNf4|kCvGjAl$8&U5(hf)p2ChOLOtvXdT;s zT{s3_CrmbeuPb`x{OF<%MRrk#A&Auu3cVa-q3E}$yG+kLe~U%$rYCs?K?gZK9c~Vl z>HGSU_|sOBi}M?-{E5>X8lT|r7JPKBIU^jWU)8zL4v;Te=kf!oJ`H>^M+@JP&Too3 z^z@jb4&>qii#OvLW)#xv5_MICzFq7JfF?ykFr z4%PVH5kb|z_(fBb#`o@8gC6%tSv_DyW1Lp6YZHwWKl*_WAZE}=kozqWKFcaGK( z{5rLzhe4ne{X&j;4umkAxc~RjfrtANZ0KV8f&vHJ z-+lUSljhipTU7&m#)0mwUZTfD>(+T2s-kw|K~WEcm$Cs4tvWRH z(9ocx+SG8h>1q?)K!7LeVUTnF99~mEZzVIHSz<*eRGMS6FYD)}IT-%syYKe!k8hPg z_h+B^k9P`1>(UbJ#!IwR4N3RIo;Q;2CtZ{Uk)?O-8#EnoN=iy$QKl^?+hbbm&ZpU+Y`OE>XCi}0j#NTkwkNecfCU3M#P_mXTHe$gW0 zUbG0DQclk`FDhjPDDjd!lID0+;vJy9A1lp4=y$uqw*%eRx29CACo-e{&yUH?CDqr#E(o3_f46A9 zhYvjAQ-SWSgD(<=XYiTcD4obh`WOaD=OTlzq=lQS-dRD;<_3em9k&tw_7$eQjI#ks zoB1M{0~}(1nbe@p@zQQ4%@K(7>NLlr)CPC6;j_Y}TaPCx;4Hg+ylm+h#^lsgnWbNpjIRI~DykXkv8M=BQ?0>}adBI*mjB)lgz{^t!6&f1A zjqG2YsBcc3SP0%M#J_Tl@bhC6V-qJTeAwyQY)#FD;FbA$u^oaUgO zzkdDX(>R#rHpPVAm^0^%H%z#f>Cf3mh`64U#3#iCfyz7YoH}*t%S2E7^8C~cCkqSZ z=0v*G&500Nxdu1ij1%91cU=7MH2k*8ZASYGAk$qSB6mvSarS>)>6%E~4i zv!6IeNBYj-Esb4QuXP(;&gi2El)M z>ecDfCr&S%&iGI$t>6!Al6^+J*~KT}f49BCGy%A&Ht;PZDRF4VP-5s=`Bj=DHdk^Xje=0h(2G*?EM=fxt zUJ%xx%7{&$ewA84=$XGT9N1i!pOv3ZO^~HdHzm7Q*+Ad6slhLt8>L?ZmI1YmH>G zN%B{n+pp?6%rHG7unDqnnYS;eryJ8(`Q3L7vc_b_iVzO9c3qtRZ)s^sFw2u*+eEl% z6&7M4eey8!%)PoV%wc;srvRBhCelxXbB7PF*+=|LzXsOsGjBh*U=JDy|8{U1_8EE+ zHsRCFiB}DMT0~$oA5;shTbFJY7;XQKlz-c{87o!<@X6w2vbvQ(X-R2G0i@`ghHmtt zY5+FtU}VpN=W04{a5Ja_M&KO48pQ5y7A}40N|X@`_NGqV*WfhhrJ$ynrcS*&(V2Ks zIzH$%6aK&^?^=ZXY10H>@voSn7MN_S47>hJpXsP$z6%xx+GhOt@u{AXN9;szxicWl zs+iCm&;uXi)8Dd9+t+>g9InMR5V>HFtz<*PKB6bB*Bw9>3r(DOmFP+9y+Y)GB?UE3 zfmRzpl04(*r>ARvSzt3`M#L#XPNs;T&-o}=2qF5JsiisS&a)(aeAaSjSoi15(Zz(` zfHxFAJ1^Z2tm$6U{oMnH&z(Db?yyqp@KRrvd1a+o|1}mr5WQG`w-7sxdnET}%RkdasjQPJ!|OA|_izpIVxOhY^CWWPVTjtow6JF(HG`d%M2lkMBtOd>vks zXsItLz?wAyd{%(z(`|g2zmU^YV6FC%CP)i!O^k~6K!WnuFcVkKj81dZg-@cxXP-rI zp0#{=F@1A%F`+l+xcFR!@H?RH-;FGNQ#3!KsKY)U_+<3kx6f059{6PRyLuJ0v+TsE z@nW_g2dT~uA!@x5oBWw_MW#7|_%zl%OBXnWz0cVE35y9y7w9HKa4y+WU&6nW2L65g zgN4s5D1iU50-*M=uMXu0kJvvSLF1 zN|cdHeW8+|?-a!+D`0M(Be6j)%8Q2U>0TXZLi5%8R=5(zj`W-W8Mx;6FGU~jo z80?Jo;xo*Tto!&33_fy3$SAa6uacQT;k!GbPBJqn{F5gkIJ2sHyJ zWcX_4SH(MU=E`uIL*t9b#7wa`aDbFe|e zHxn$_Bj>Ln+*A`~zLzZ8<>w{K8?l)O<{p@f2j&8Q9G<)GQg~U!x(A#ScPN8NULl=FwpFZkl@^E*m z_+Sm9_U5JN%{(CVmo6zK2)-Un)A&|@h`DJFnkUscRtanP8Tb9474mnlr=A((I0wd@ z8FRqKkGiQ}w?4`#IG5<>UP7?}fyZ{Z_@K2PVs4s4 z!N)9o{2Bc0XYBXei8s-~0|a`;%G_jzZ)$is=*54oAGnUYN55}hcIe%%S_SZ%-zfaR z6i`ix{tpKCe8*w#rMYwG9^hr2q326y`e{4B?ham>gW)+q>|5C>^B()X$MKBgoMB1Z zYw0t?H~D^j{T=l(URx>v=`S5kmz(J}er|T~oQYMdR^hL;@Iz}`@cyMW&eA)=^f>nb ziT>vphw^xUemqNme0qZ29E|Qb!TRms6!?wH89a05K;X1yIFm^?Lu)93=<5NF)z=@h z*j_sNQo3kBy4TFP+50SA`1P-U&4mG(-|hNXTwLK4n@z&F^#1#cm)^hBui)`=mGYXCK5{pQTZ;;lEw~13uH&^%aob6T%;tPzcQD__PxN=xAER$~ z_=JCy@afx8k3Ksavu!7m_;J;$U$0{AH!oXJTrrHk)Ud=AVaW+tdcUtKve2hNd3pTj zaUT18{4l=w0^z3@`|(YhqfWw-)bo=r!-h*3ud8c5(_9z#1{S!KNfUCqnU9&a=@a4C z-vP(&IOfA=`lr(^{M_tZ=J)g;6h5ME03g;1{RL7Nn8~RPbX{CU?+89`<3REL%58qq zeU|=(6XVmzhj(+($X93Y=75T*R)9;S_tZz4<75IZT>|%JCe6m1kxYQOsRM{uPw02l zgD2aHP?wRxCt$kxco|wQn@I0kp3Gf3gE=|z0~M1hoI1l#H#4tY z>*kyN*Ia&>G6lKQ6Fb4X^y~4ZqkNJ2gL`x#nY|0y*=@qF9cMCp4^N#s6}whJqO~o- zwH_LuMkaE6Crt|T192ChD1Iz`e0ub54)*!1Q4cS-T&7PpNqK9zFTj}t2QW_GDstj% zA_bLiW_I(k)HAv7(-21dLZ1^7KZzZJmfucu_{=_>ZE2APkV-%%3gI|o4vcX~2jV&8>7KbH z19*Qw-RvhF=)R_Ivhc<1O=kWyPxz$s=|@j6zZd_>&CQNU3*@RVb~d^m<|d%;Y0<@8 zqAW8f^PL=Ck5f@0iwXJN#)DpDgz85Zts>Q@t0nKOT?Yx!A^+Bqg^G--nkBP;On*P| zXX=}s03UuBRzXV99?t5J=|gw? z&XERi;;Aj7h*+)y&yw_8p3TcU>mT@$pBvBkwk~C6_H)lauE(S5 zGB>#lQkz&l>IKO1w_E1nhgU&L(H^q;bn$%8U5!R_zJT;^EY0Bn!B;YWp3mz&L}vfY znM?jQSx9Ezx+!c(4M2Z;2apO(F|B~q0Ce*xkP56ns+JkGk@)vrxPWD75^$;wyM9e$ zKcp1xiEDax_nDmjojaE&@T3<1P@03`CDMD=Uj&R-j>N~D2|UTd{Co`E+=95p(*gUY zs{_2|u53bC*}k&2wz9Ia8AhGR>m|e2)y3uy29NeIJ&pC3<{kj@_vUiIAkU3?A(fA;Vk_@kpRY^Z$>JKJ_#Q4f`z;>Af7pPXoPDHsm>mT98~H(te`1 zqju!_koFV38Tn^0H@Cn93!iPwDx{uIQ(lbVjgIzMl2rWv;~)AHr#YU+AbuY6x3KQF zjfpwGk312?Te10GDjNjGH0B_>bEp7yA?*IIcR*S*Y9DaN_ zd-gICcgtCpy^TL;R4QUm#UMA;nrgm+kwREyo&S+iv?qZ)40@t8$J0-bwcUHTOzv); zTrK?Nl}nmDIr=qW`0$iNn9(&c0g@~gO)=V&IL$G0gUy^Tke3cT1BNfzMAyP z2x|QB^ssvl*Vq+Cui}?{?6YYa4sGvMnuGbR z9w5C=@R|N;-<%KF?Z0eCdT}RR9dG&j0CjvE?h9Ax18I?q9$wQWuizv1W+zw5_t{fk z{8{X)MPf_HzmqAVbW74S2LZ1HFU_GEz`vX0X|aD#j~#2LIe79#_+F6`n(=7-$zXLb zlKpt*clBSq08#yZY5+6BfAkUElxQz#+|9x8cGnL^dRf+gft|vSm~C=;VkL*ul|Fp9_;Fh2zjms=@3tOC@`lxzZ{Us5D{T!8?qmu^d;DpROn;gKT;WgK;mi7YyEznm z5Z||FBMtttvt#E@r(Us^o7yKWX9`O+#jtGCM;7?`xk3QP*5tzlV633Jo zo$9FY)yl7SfU#LAtmv`Q9QgA~KhF%NIUxP9@#9JLb+9Y6o8u@e{?VtC~^i!w)dz;{Y^btfYe*H@E7mJaG znUHuw5kb$3Ao1rImFCzhX^udoSEo5>xJT*vFvv24$!}2;U`FFU(KnLd5*--^ZZQ7=H2zgddO9iMstjr``A2)fBV zpLzg|{BkpD@vF}>RvueuDU+%s8_4kKG)Mnj>iL<$G{<<8<_HJ+InD9(SknB*atGz7 zYx3j{Y5}mEs$vp<`iT>`5{;({=g5oW7GQ7A%~tgAFVq0;&B(>CdXUoN!b*q;Zb6vd zq&fNz9GEK#5D4>|G)DwJ8vruEzrAbc&QS-r z_U*N6YjN$j{mM>u_ViE(=$zEq*@kVCreUJRuOj>%CJ_|1lnI_FE&UF{SsuVlNppnw zVZ2Urj1T2GbeiKarcVVwcnrx(#-~sDW`s|peZ^WD^w(D4xBcIKt7;n1XkXDrgMM2D zPMYQx0Enn_J3f7yFCh^O_B56@HkOt?0l_p!KXEJi?x6V7IlnzVoab=U94XL8PRjp{ zxw!>qy7rZ3V!$*YI1I=9kMeQ(qs?14sJtsc<-xI)RCZ8YS4|D@(*3v_v-a*dhNJ~B~)%=7npDQ6Eh5?#BaC1_^#ji?I#eVVI z!JZPiEa|&xj(&Z0^9o}KXL(ZH%@Ii-ebBZdV&z{6DXjJk-i%oMN;cYOqXNMmW_P|T z@wDGgbM*Ji(O;o7NAdwZr4Ao;(01~0RVo>lP@P*b)7$|dD%d0RrML*Ov^4cJ2RsRB zH*mgZIGzTv8T!RaHBCz_?FvyryK46?gJ1$zkp_S;Kg5t9AWy?^jD2R!*Z z_MD!4GPN^%V8NFQzV!Ja!GpGWs#c6CpR^K==OkPF$_u}2df)C2fZK1seG!(h@h?p= z%>ln7^48YhJqbQx2Ld#H`~~)GH+aytOw@~`%}H?Mc4Rzf(8aG-Lf5~$BaQh>o_K=f zAF;h7D$PM+Z*6_@_>-+*<%sE@B{2F2?fCk`9O@A8!Y>mav@LN8j(aL4uuoRDH*QD8 zb5cl@*i+r`?hblYf={}*-k0WpCtIKV-SOkcf2V`kQeo`}Sb~b)o58wMK}G*%p*uBv zC3w&_t9a!MiB|aHp1zISQSlsgpk8o2uH%c(3?J^(oxtu68f;(tw?R&3@eQ_5{;rkq zum7%9ipa_urXNO+Ub4hHyqJFaVKg;}e#;pd8HBIbbdv7A(i%Ew8|8qGVg5c4*ti`P z&(T}+{HF?nGsM~*6U-Zgf?GFmLNPrx(YOBYIt-&O;5m;!koXHhSGE@_<~MK|jk1%^ z9HPMgkD8!$GaBUTfhd)S6C?ch0+pBmbh=BF#}5r?LC=9?;gLx3w_ifMKcgv?7a+u zjoZ58*zuedE9AH?P&=i~l7%5LOZuEQNM;*g_H3990s6@mQV1e#GW0Cn{k^CC)&XKWrqTI?f7p;rHLK z_&%bx5#dYTU^paN$^-#=5&l%UT+!R=ug%*d>>S!RN&2P4%x$m)e^yAc|3TAl;LCbJ z8hG9aOiL?YeuBhr#XTcfBRY=3-|c+ALhrx^u4XsHO6RJ)LBfq|@YU?uU)jwuk~M$o zR78>c)RAHHS5EAYlw)}?(pAdz#4m=<9p_3mY$(atV5?VXT3Xq{U7yrkOFw~;2z4Bx zcUI8vy_z3}4DpJ0lF)VDz@raDd*I{QAAigZVE&+CqzE4yW}xZ;AvfZ>$R3Y}ijtDx zu~hKc2)GLvHoj6%=ElVOpLz0NnGK>3oPX0Xw@Fn`mgYLx4v%N4I45x zY@l~&kEeYVX{9lnx;ufsNL08D`h zd7rJs%;LX(9IuB5)ItpI+1Y?3eo_JS4xed_I%|brt8#{4ox&TpgB^!m1CsssyLST! zJ}P|Ujrj5g!KF+>zY&Z1cpKMisHAbOp`lXfxjKkin26ps zr5VJ(0daxXfUiWJwG!dGhmAzA;{ZvX>4j#UIFQ8e6|Hvj2AbX%?IHZnKi>$&NcPV? z-Ker*WJ9H>E9mk7Tos4PIO%dKsW1R^?tgn-k&&*<2yw*iZ$GEv0fU7% zSo#i^`W>QOKb_+D!UfhwuITwb%xIv=R|5}y`}Vo?;V@8ID);H$mtP{az=psnGQqR9 z!>7nXN~h$81FPaZ4_OkifHb&~EBa;FbTu@rsbp(MJ-*U5M~fG;ww*s8Tw|BuzPq|J z5CIFEwHgcBFS&k((o$^QhE4X8^2`smZ3 zr)S4veCs?eev2hN=>2F73!k+eK1G&0>T&Wch8=&w($o8XPaodz<>kL3{F4cn>M%cC zIB_EBMy@D+vVAhp(GcM8`#nAQ)>}K?qU$`Qa6dsTHhk7LzT!VcmdEJh*Ey`?6?HFs z=e~FDyU)UB_#nU49jF(d*h%n^mIgPlv`2)F4V4iEn-pdQWup6yjS+=uh}C!2c0>Ra zP~nsK&7DG$yj-p+J9*&10YAUp9bo!&+`03FcmdzI9U>KTT3Lw=4Uuv)lsnL8pAy{{ z{zl_1-9Q}Y`1Rw%$hQ)F6YEm&_vM<|^vMHf=sNJLlfQzf?f}zq`qisAeL5GA`Q{sS zuPC+QWJYB)KJ{=EH5U^{CU3E+#q7KP_~Vc3^#dClkv_Nys3lkxQj6mpcbx03)C9u> zUnb}G-RJU4bDZ3G=8WP`&>cV*@WS5S={gc9_^G8~qwbDcEOTRh9X9{~53Wf>K~(G> zrR6-{q2P{keD?_+g`e=TvAa>4fLa1ljN?d~lsnGxE5oiFSK_DH6r;bBTX>(^rUn}~ z5HU3qn*Q;W-3kKDI#2ZaU4UFR0HmLwvdB)dYqa3;axVith`eJ;- z=BvAL<3?o%Qih98P>Q2fMkeuyn5%2sDF_Uw?(y!f#2L+o+7|9_pw&HcyEd;IN$deQyV z;y7w_&@p8!e?$yNE;WGQ|6b$srJ6u1`^k+*jwpWli>pM>v9Mmjmp8Vns0fO7z##Mq z;{2Q;LlPW0IZ`tp4lmaDe4p?i*Z0qR;&)U)iR9ni2r0*LOtzHR(FB#HxH{9Tu@BBX z@x&9V2~1z7hB$JBn?Ol_@=l3`Df+AKIXAnK(kF}a^W2;134gI$lxeY=lQaF}_Wj4z zTA$B3qJ+eca078139Io+6TGft$^c{M&iy?%fXM+uSC_N^8sRg#YJ!vQ3D89UP4872 z0%8DvMBz^+{p4|evUJ2guozv}78EZs`=1}T?hAcmcQHqlU?XBeZ*=)nh~p65BZ${&^y8?a$(R#T@b zyZ7v~(gNld;5TFd-Li;ti;CvXCH%RN7+>Q22Om7>#`zz7FyQzObWsOj(8F}u^yjGq zP%q%A-+4{n-H6z&hQ99Eka8S{)4pnFJ`H;=zDgenK0iqK{K3TuL3f8EzV09g;MuXT zxpUuq^UZVgm3Up2#Q7h5(43S?@Zjes;V&Mwm@l+t&%%Fv)Z=`iC;P^Y-Lq$RQ^&_{ z6HiPnj^ia}oN})^x(+3qKVf_+&PWYF-Qlrkk38$|4v^-Z0Z2a*H+{`b7Hy>t-$cUK zasCJ88Ek&)`U3(_ZQxr*a{kYM7IC4xB;K@IB7v8e|45`{m!l;NEAsS+3W6*mLRDgS=G-D)i*Wm(D<63TcyeK#%Zu2;Ro>P z{`vFB^d3Hm|6_$tcHiU@U>FQ6<2cTM`&apaIF6iwVasb4;j1=K(^fv0c~?=Au(w^E zC79IrSM>|=?>M-_6aK-2!8ku0Mt1%Vlk4t}-_m4{@qPCJcmcu3-HqKJo1TvfpTuwC zIQhXi4xe}AdukE>EDs-a8zi2q+WUnA^*Xq!U&2X0>^Ru8g9d);?%CNceQ+%p3m(Ef zQk=a&uZC{=Y-}`Q8CW);<2VDsI1aii^kBjS->C8`a1(gSFVohLMf56iron1U1itF5 zAXWV!vHFw#A3XSA6I(m#@l8=?+Ho+!8Fm<5D%5lM2OMWvD>cC|!S}~;P_NRI6F=?x zBcPhV{?$KmgUy@0ikyO<<(=u~ug=Q+`?7PBTE8ZRO(w4iZe&e;Vw;@ii{lJj8Fpo0 zK*w?NC60sn_sK5B31wyIKkO7{tp<;t1W&*2^4GxIym>Q@?DElD{PqDIx~yH&!T%sC zt%qp(6o=@@yF79bK3~gJ90ytMJl1j?2PQ}b5~Am`ewA&Q_3A8~UDrAYqu{MKiNJxA)bbS)bYW8Hl!OPxixlcpj?;0dvP2@j^hyi z??Ih-2xH2|YzBS!BYZ!LF3;@Cyv;NF#E+XdkKD}KZ@tKB@NeNT2XvUSc5M6;cK;^A zZ-N{3Pi0kA@Q^&gkNJ-ei;CkgJ=^{{@@LOs~1#@%F=_o`(k|I&7KCpfQsWR3&e4(r2+8hr|PszY783i z2>(?VpXcmFyR2akl<@g-&*Z==H)igyMhjM1yWE6^YDd$J;Y0cmoTunRMI06Vtv9<~ zGlQ2?7qH?u7&ykw9QHYZ@Ly%!e|4V0-^IGWYnBgxGfc(J?jF}zPR4D{ZTh(KKs8z@ zYtv=zlDNJ%ru9niM~@yoZ-}pIFu0Eq{>?X=DAgl~%V_k&WdmLuhgW7>)lN1)`sij| ziHzO7`ubV3=6R!jSy@rhEX%>!T+b1j4~*=WIQhJ5;Wo95I#7+4@b~SzaG?y#5N=@M zK=Q}nPQ`!f)G1d6r{VWy_Xzk@%MxZOx}4->Ppb$31#mZ~yQI zx9h6}yxsLb_~3(jB>E4`e_nDM5=m&2COd$8l)bbMfV@D0dMAA?@ zZOcg0Cmz}-zOnJ6ao;w6H0~P(FcmrL>tVCPFHrcmCpe&Eu$_`{h}btc&W7@cBgPgG zyLzm}zii^v=sQ&t+{wP%JWKdkg@34mLE|{C@a4$6HWwd0sQ;jzO#iED?1wkY-Yg^2 zzso=6gZg^c@H@n>O=Bs%*sJXNs1O|SZ{EeOkC#mc=o(35zv0io+X^7zOZm2UMG0T% z4;_+KdVy_;ihjX@7Q(lEnSZ+JCdc`wOm)&9;Hl9jRbNt7RWhV1=^3(t*T^mV^i%Et zo^`7~_5lljme@DK-~1*Ezet5_VWd>#{NMvqku!gxZ*imSELySzto=>t!;_r%0lLQg zAr}83hb#P~RV7Y|x6m{vVg?-;g5mk+KW!V6Yuk3Z zsQ zLG)uS<>eN=)Yv8Y-WT;gdodA{kH=(_#@RsT`ttaDfN!@7bTJnw-A zT0m_60&}(art$M=(nsHj97bDCU+iX@^9=!32v~;&IR#A5!q?l@)R__xkQ}In1OFYt zuam={x?GRh`Yr5StwY)4LHZ|$4}1HYBFrD*A7Xw-$sVNZXmOP6TciD|7N_|-!vW~itMwom-FPf1yGA$i-7RuF=>GoEq-faF&ghg z*+>BMZo0{nJ~_QZwBrW_If|cVxH+T%Z1z6Y!8g-fcM^m%axwExypsp?s z@j5vJZEOBOKJ_W|Z)JBwt8@+F4| z!1$x7r;V1$*-baOIJe$P@5~ZDpLsydnFC~$iZX)`5s?!HXX)~XphRs1|9n9J0VICOYWU8S0Hx|ky8f^i{GmHr z=+4zG?v&14+?!S4n6LkgN=fk_Gd`E?Q2Z-b78lQ4ITO+nb+xHU@ss5v82Lg_f%E^AuLP+l(f$}X zLyQfR{Y{WK$BPPDMt%7aEa@v~8TIAIRL)NH=glF<=`85v_wDD3kPWW zCY`3jc$`l@tBZHV1s^3^gk6|uItl*pOwxFVIU)eG)8ng~Oe3E>rk$S1fY4xZ(E?_7 zr+!ejPtKHZlX_4+l<=#DTI=4bn+U(5$z2IH&=r?Ua^&=z($#?^q1zja*(-V({G)as z61@!mH%hMQ`LG|aMb)7a6TIjfu;?Ft*tVW5dS0FAN{HCIy4>&vU0q%HkGz|tY6_Sz zm-zrZ0Pqh!Z%!x_W7BKT8$!Og?=QLr2JAIn)^Gp+@h4kxl=hFm9>8FEg~6wKaAPJX bmFxcle6t;B?x3xN00000NkvXXu0mjf)2uE< literal 46273 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 diff --git a/src/battle-scene.ts b/src/battle-scene.ts index c1faf6fef36..6b54505b6a1 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1056,6 +1056,8 @@ export default class BattleScene extends SceneBase { case Species.BASCULIN: case Species.DEERLING: case Species.SAWSBUCK: + case Species.FROAKIE: + case Species.FROGADIER: case Species.VIVILLON: case Species.FLABEBE: case Species.FLOETTE: @@ -1066,6 +1068,10 @@ export default class BattleScene extends SceneBase { case Species.TATSUGIRI: case Species.PALDEA_TAUROS: return Utils.randSeedInt(species.forms.length); + case Species.GRENINJA: + return Utils.randSeedInt(2); + case Species.ZYGARDE: + return Utils.randSeedInt(3); case Species.MINIOR: return Utils.randSeedInt(6); case Species.ALCREMIE: diff --git a/src/data/ability.ts b/src/data/ability.ts index f6ccf7e856d..281a37cfd0c 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -1148,6 +1148,26 @@ class PostVictoryStatChangeAbAttr extends PostVictoryAbAttr { } } +export class PostVictoryFormChangeAbAttr extends PostVictoryAbAttr { + private formFunc: (p: Pokemon) => integer; + + constructor(formFunc: ((p: Pokemon) => integer)) { + super(true); + + this.formFunc = formFunc; + } + + applyPostVictory(pokemon: Pokemon, passive: boolean, args: any[]): boolean | Promise { + const formIndex = this.formFunc(pokemon); + if (formIndex !== pokemon.formIndex) { + pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeManualTrigger, false); + return true; + } + + return false; + } +} + export class PostKnockOutAbAttr extends AbAttr { applyPostKnockOut(pokemon: Pokemon, passive: boolean, knockedOut: Pokemon, args: any[]): boolean | Promise { return false; @@ -3067,17 +3087,21 @@ export function initAbilities() { .ignorable() .partial(), new Ability(Abilities.BATTLE_BOND, 7) + .attr(PostVictoryFormChangeAbAttr, p => p.getFormKey() ? 2 : 1) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(UnsuppressableAbilityAbAttr) .attr(NoFusionAbilityAbAttr) - .unimplemented(), - new Ability(Abilities.POWER_CONSTRUCT, 7) + .partial(), + new Ability(Abilities.POWER_CONSTRUCT, 7) // TODO: 10% Power Construct Zygarde isn't accounted for yet. If changed, update Zygarde's getSpeciesFormIndex entry accordingly + .attr(PostBattleInitFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2) + .attr(PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2) + .attr(PostTurnFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 4 : 2) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(UnsuppressableAbilityAbAttr) .attr(NoFusionAbilityAbAttr) - .unimplemented(), + .partial(), new Ability(Abilities.CORROSION, 7) .unimplemented(), new Ability(Abilities.COMATOSE, 7) diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 421488629ae..87094af2028 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -542,11 +542,21 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.MELOETTA, 'pirouette', 'aria', new SpeciesFormChangePostMoveTrigger(Moves.RELIC_SONG), true), new SpeciesFormChange(Species.MELOETTA, 'pirouette', 'aria', new SpeciesFormChangeActiveTrigger(false), true) ], + [Species.GRENINJA]: [ + new SpeciesFormChange(Species.GRENINJA, 'battle-bond', 'ash', new SpeciesFormChangeManualTrigger(), true), + new SpeciesFormChange(Species.GRENINJA, 'ash', 'battle-bond', new SpeciesFormChangeManualTrigger(), true) + ], [Species.AEGISLASH]: [ new SpeciesFormChange(Species.AEGISLASH, 'blade', 'shield', new SpeciesFormChangePreMoveTrigger(Moves.KINGS_SHIELD), true, new SpeciesFormChangeCondition(p => p.hasAbility(Abilities.STANCE_CHANGE))), new SpeciesFormChange(Species.AEGISLASH, 'shield', 'blade', new SpeciesFormChangePreMoveTrigger(m => allMoves[m].category !== MoveCategory.STATUS), true, new SpeciesFormChangeCondition(p => p.hasAbility(Abilities.STANCE_CHANGE))), new SpeciesFormChange(Species.AEGISLASH, 'blade', 'shield', new SpeciesFormChangeActiveTrigger(false), true) ], + [Species.ZYGARDE]: [ + new SpeciesFormChange(Species.ZYGARDE, '50-pc', 'complete', new SpeciesFormChangeManualTrigger(), true), + new SpeciesFormChange(Species.ZYGARDE, 'complete', '50-pc', new SpeciesFormChangeManualTrigger(), true), + new SpeciesFormChange(Species.ZYGARDE, '10-pc', 'complete', new SpeciesFormChangeManualTrigger(), true), + new SpeciesFormChange(Species.ZYGARDE, 'complete', '10-pc', new SpeciesFormChangeManualTrigger(), true) + ], [Species.DIANCIE]: [ new SpeciesFormChange(Species.DIANCIE, '', SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.DIANCITE)) ], diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index f1c1e8bbbe2..4136be5b70f 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1748,8 +1748,14 @@ export function initSpecies() { new PokemonSpecies(Species.FENNEKIN, 6, false, false, false, "Fox Pokémon", Type.FIRE, null, 0.4, 9.4, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 307, 40, 45, 40, 62, 60, 60, 45, 70, 61, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.BRAIXEN, 6, false, false, false, "Fox Pokémon", Type.FIRE, null, 1, 14.5, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 409, 59, 59, 58, 90, 70, 73, 45, 70, 143, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.DELPHOX, 6, false, false, false, "Fox Pokémon", Type.FIRE, Type.PSYCHIC, 1.5, 39, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 534, 75, 69, 72, 114, 100, 104, 45, 70, 240, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.FROAKIE, 6, false, false, false, "Bubble Frog Pokémon", Type.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), - new PokemonSpecies(Species.FROGADIER, 6, false, false, false, "Bubble Frog Pokémon", Type.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), + new PokemonSpecies(Species.FROAKIE, 6, false, false, false, "Bubble Frog Pokémon", Type.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false, false, + new PokemonForm("Normal", "", Type.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63), + new PokemonForm("Battle Bond", "battle-bond", Type.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, ""), + ), + new PokemonSpecies(Species.FROGADIER, 6, false, false, false, "Bubble Frog Pokémon", Type.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false, false, + new PokemonForm("Normal", "", Type.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142), + new PokemonForm("Battle Bond", "battle-bond", Type.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, ""), + ), new PokemonSpecies(Species.GRENINJA, 6, false, false, false, "Ninja Pokémon", Type.WATER, Type.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 239, GrowthRate.MEDIUM_SLOW, 87.5, false, false, new PokemonForm("Normal", "", Type.WATER, Type.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 239), new PokemonForm("Battle Bond", "battle-bond", Type.WATER, Type.DARK, 1.5, 40, Abilities.BATTLE_BOND, Abilities.NONE, Abilities.BATTLE_BOND, 530, 72, 95, 67, 103, 71, 122, 45, 70, 239, false, ""), From 224fac574ae3f020b8b17e07594fd88655643c93 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Mon, 29 Apr 2024 21:51:08 -0500 Subject: [PATCH 024/110] Add Let's Go moves to Pikachu and Eevee's learnsets Also removed the duplicate Teeter Dance from Spinda's learnset and gave it back Dizzy Punch. --- src/data/pokemon-level-moves.ts | 194 +++++++++++++++++--------------- src/data/trainer-names.ts | 2 +- 2 files changed, 105 insertions(+), 91 deletions(-) diff --git a/src/data/pokemon-level-moves.ts b/src/data/pokemon-level-moves.ts index 5788c9c61c8..07691b01eff 100644 --- a/src/data/pokemon-level-moves.ts +++ b/src/data/pokemon-level-moves.ts @@ -396,9 +396,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 36, Moves.THUNDERBOLT ], [ 40, Moves.LIGHT_SCREEN ], [ 44, Moves.THUNDER ], + [ 48, Moves.PIKA_PAPOW ], ], [Species.RAICHU]: [ - [ 0, Moves.THUNDER_PUNCH ], + [ 0, Moves.ZIPPY_ZAP ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_SHOCK ], @@ -418,7 +419,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.ELECTRO_BALL ], [ 1, Moves.PLAY_NICE ], [ 1, Moves.NUZZLE ], + [ 1, Moves.THUNDER_PUNCH ], [ 5, Moves.THUNDERBOLT ], + [ 50, Moves.PIKA_PAPOW ], ], [Species.SANDSHREW]: [ [ 1, Moves.SCRATCH ], @@ -2231,9 +2234,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.CHARM ], [ 50, Moves.DOUBLE_EDGE ], [ 55, Moves.LAST_RESORT ], + [ 60, Moves.VEEVEE_VOLLEY ], ], [Species.VAPOREON]: [ - [ 0, Moves.WATER_GUN ], + [ 0, Moves.BOUNCY_BUBBLE ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -2247,19 +2251,20 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.COVET ], [ 1, Moves.COPYCAT ], [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 20, Moves.HAZE ], - [ 25, Moves.WATER_PULSE ], - [ 30, Moves.AURORA_BEAM ], - [ 35, Moves.AQUA_RING ], - [ 40, Moves.MUDDY_WATER ], - [ 45, Moves.ACID_ARMOR ], - [ 50, Moves.HYDRO_PUMP ], - [ 55, Moves.LAST_RESORT ], + [ 10, Moves.WATER_GUN ], + [ 15, Moves.QUICK_ATTACK ], + [ 20, Moves.BABY_DOLL_EYES ], + [ 25, Moves.HAZE ], + [ 30, Moves.WATER_PULSE ], + [ 35, Moves.AURORA_BEAM ], + [ 40, Moves.AQUA_RING ], + [ 45, Moves.MUDDY_WATER ], + [ 50, Moves.ACID_ARMOR ], + [ 55, Moves.HYDRO_PUMP ], + [ 60, Moves.LAST_RESORT ], ], [Species.JOLTEON]: [ - [ 0, Moves.THUNDER_SHOCK ], + [ 0, Moves.BUZZY_BUZZ ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -2273,19 +2278,20 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.COVET ], [ 1, Moves.COPYCAT ], [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 20, Moves.THUNDER_WAVE ], - [ 25, Moves.DOUBLE_KICK ], - [ 30, Moves.THUNDER_FANG ], - [ 35, Moves.PIN_MISSILE ], - [ 40, Moves.DISCHARGE ], - [ 45, Moves.AGILITY ], - [ 50, Moves.THUNDER ], - [ 55, Moves.LAST_RESORT ], + [ 10, Moves.THUNDER_SHOCK ], + [ 15, Moves.QUICK_ATTACK ], + [ 20, Moves.BABY_DOLL_EYES ], + [ 25, Moves.THUNDER_WAVE ], + [ 30, Moves.DOUBLE_KICK ], + [ 35, Moves.THUNDER_FANG ], + [ 40, Moves.PIN_MISSILE ], + [ 45, Moves.DISCHARGE ], + [ 50, Moves.AGILITY ], + [ 55, Moves.THUNDER ], + [ 60, Moves.LAST_RESORT ], ], [Species.FLAREON]: [ - [ 0, Moves.EMBER ], + [ 0, Moves.SIZZLY_SLIDE ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -2298,16 +2304,17 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.COVET ], [ 1, Moves.COPYCAT ], [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 20, Moves.SMOG ], - [ 25, Moves.BITE ], - [ 30, Moves.FIRE_FANG ], - [ 35, Moves.FIRE_SPIN ], - [ 40, Moves.LAVA_PLUME ], - [ 45, Moves.SCARY_FACE ], - [ 50, Moves.FLARE_BLITZ ], - [ 55, Moves.LAST_RESORT ], + [ 10, Moves.EMBER ], + [ 15, Moves.QUICK_ATTACK ], + [ 20, Moves.BABY_DOLL_EYES ], + [ 25, Moves.SMOG ], + [ 30, Moves.BITE ], + [ 35, Moves.FIRE_FANG ], + [ 40, Moves.FIRE_SPIN ], + [ 45, Moves.LAVA_PLUME ], + [ 50, Moves.SCARY_FACE ], + [ 55, Moves.FLARE_BLITZ ], + [ 60, Moves.LAST_RESORT ], ], [Species.PORYGON]: [ [ 1, Moves.TACKLE ], @@ -3325,7 +3332,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.EARTHQUAKE ], ], [Species.ESPEON]: [ - [ 0, Moves.CONFUSION ], + [ 0, Moves.GLITZY_GLOW ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -3338,19 +3345,20 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.COVET ], [ 1, Moves.COPYCAT ], [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 20, Moves.SWIFT ], - [ 25, Moves.PSYBEAM ], - [ 30, Moves.MORNING_SUN ], - [ 35, Moves.POWER_SWAP ], - [ 40, Moves.PSYCHIC ], - [ 45, Moves.PSYCH_UP ], - [ 50, Moves.FUTURE_SIGHT ], - [ 55, Moves.LAST_RESORT ], + [ 10, Moves.CONFUSION ], + [ 15, Moves.QUICK_ATTACK ], + [ 20, Moves.BABY_DOLL_EYES ], + [ 25, Moves.SWIFT ], + [ 30, Moves.PSYBEAM ], + [ 35, Moves.MORNING_SUN ], + [ 40, Moves.POWER_SWAP ], + [ 45, Moves.PSYCHIC ], + [ 50, Moves.PSYCH_UP ], + [ 55, Moves.FUTURE_SIGHT ], + [ 60, Moves.LAST_RESORT ], ], [Species.UMBREON]: [ - [ 0, Moves.SNARL ], + [ 0, Moves.BADDY_BAD ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -3364,16 +3372,17 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.COVET ], [ 1, Moves.COPYCAT ], [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 20, Moves.CONFUSE_RAY ], - [ 25, Moves.ASSURANCE ], - [ 30, Moves.MOONLIGHT ], - [ 35, Moves.GUARD_SWAP ], - [ 40, Moves.DARK_PULSE ], - [ 45, Moves.SCREECH ], - [ 50, Moves.MEAN_LOOK ], - [ 55, Moves.LAST_RESORT ], + [ 10, Moves.SNARL ], + [ 15, Moves.QUICK_ATTACK ], + [ 20, Moves.BABY_DOLL_EYES ], + [ 25, Moves.CONFUSE_RAY ], + [ 30, Moves.ASSURANCE ], + [ 35, Moves.MOONLIGHT ], + [ 40, Moves.GUARD_SWAP ], + [ 45, Moves.DARK_PULSE ], + [ 50, Moves.SCREECH ], + [ 55, Moves.MEAN_LOOK ], + [ 60, Moves.LAST_RESORT ], ], [Species.MURKROW]: [ [ 1, Moves.PECK ], @@ -5586,7 +5595,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SPINDA]: [ [ 1, Moves.TACKLE ], [ 5, Moves.COPYCAT ], - [ 10, Moves.TEETER_DANCE ], + [ 10, Moves.DIZZY_PUNCH ], [ 14, Moves.PSYBEAM ], [ 19, Moves.HYPNOSIS ], [ 23, Moves.BODY_SLAM ], @@ -7932,7 +7941,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.U_TURN ], ], [Species.LEAFEON]: [ - [ 0, Moves.RAZOR_LEAF ], + [ 0, Moves.SAPPY_SEED ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -7946,19 +7955,20 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.COVET ], [ 1, Moves.COPYCAT ], [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 20, Moves.LEECH_SEED ], - [ 25, Moves.MAGICAL_LEAF ], - [ 30, Moves.SYNTHESIS ], - [ 35, Moves.SUNNY_DAY ], - [ 40, Moves.GIGA_DRAIN ], - [ 45, Moves.SWORDS_DANCE ], - [ 50, Moves.LEAF_BLADE ], - [ 55, Moves.LAST_RESORT ], + [ 10, Moves.RAZOR_LEAF ], + [ 15, Moves.QUICK_ATTACK ], + [ 20, Moves.BABY_DOLL_EYES ], + [ 25, Moves.LEECH_SEED ], + [ 30, Moves.MAGICAL_LEAF ], + [ 35, Moves.SYNTHESIS ], + [ 40, Moves.SUNNY_DAY ], + [ 45, Moves.GIGA_DRAIN ], + [ 50, Moves.SWORDS_DANCE ], + [ 55, Moves.LEAF_BLADE ], + [ 60, Moves.LAST_RESORT ], ], [Species.GLACEON]: [ - [ 0, Moves.ICY_WIND ], + [ 0, Moves.FREEZY_FROST ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -7971,16 +7981,17 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.COVET ], [ 1, Moves.COPYCAT ], [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 20, Moves.ICE_SHARD ], - [ 25, Moves.BITE ], - [ 30, Moves.ICE_FANG ], - [ 35, Moves.SNOWSCAPE ], - [ 40, Moves.FREEZE_DRY ], - [ 45, Moves.MIRROR_COAT ], - [ 50, Moves.BLIZZARD ], - [ 55, Moves.LAST_RESORT ], + [ 10, Moves.ICY_WIND ], + [ 15, Moves.QUICK_ATTACK ], + [ 20, Moves.BABY_DOLL_EYES ], + [ 25, Moves.ICE_SHARD ], + [ 30, Moves.BITE ], + [ 35, Moves.ICE_FANG ], + [ 40, Moves.SNOWSCAPE ], + [ 45, Moves.FREEZE_DRY ], + [ 50, Moves.MIRROR_COAT ], + [ 55, Moves.BLIZZARD ], + [ 60, Moves.LAST_RESORT ], ], [Species.GLISCOR]: [ [ 1, Moves.SAND_ATTACK ], @@ -11822,7 +11833,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 66, Moves.HYPER_BEAM ], ], [Species.SYLVEON]: [ - [ 0, Moves.DISARMING_VOICE ], + [ 0, Moves.SPARKLY_SWIRL ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -11835,16 +11846,17 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.COVET ], [ 1, Moves.COPYCAT ], [ 5, Moves.SAND_ATTACK ], - [ 10, Moves.QUICK_ATTACK ], - [ 15, Moves.BABY_DOLL_EYES ], - [ 20, Moves.SWIFT ], - [ 25, Moves.LIGHT_SCREEN ], - [ 30, Moves.DRAINING_KISS ], - [ 35, Moves.MISTY_TERRAIN ], - [ 40, Moves.SKILL_SWAP ], - [ 45, Moves.PSYCH_UP ], - [ 50, Moves.MOONBLAST ], - [ 55, Moves.LAST_RESORT ], + [ 10, Moves.DISARMING_VOICE ], + [ 15, Moves.QUICK_ATTACK ], + [ 20, Moves.BABY_DOLL_EYES ], + [ 25, Moves.SWIFT ], + [ 30, Moves.LIGHT_SCREEN ], + [ 35, Moves.DRAINING_KISS ], + [ 40, Moves.MISTY_TERRAIN ], + [ 45, Moves.SKILL_SWAP ], + [ 50, Moves.PSYCH_UP ], + [ 55, Moves.MOONBLAST ], + [ 60, Moves.LAST_RESORT ], ], [Species.HAWLUCHA]: [ [ 1, Moves.TACKLE ], @@ -17237,6 +17249,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.ALOLA_RAICHU]: [ [ 0, Moves.PSYCHIC ], + [ 0, Moves.ZIPPY_ZAP ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_SHOCK ], @@ -17257,6 +17270,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.PLAY_NICE ], [ 1, Moves.NUZZLE ], [ 5, Moves.THUNDERBOLT ], + [ 50, Moves.PIKA_PAPOW ], ], [Species.ALOLA_SANDSHREW]: [ [ 1, Moves.SCRATCH ], diff --git a/src/data/trainer-names.ts b/src/data/trainer-names.ts index 4cf025e3650..348976eae92 100644 --- a/src/data/trainer-names.ts +++ b/src/data/trainer-names.ts @@ -97,7 +97,7 @@ export const trainerNamePools = { [TrainerType.MAID]: ["Belinda","Sophie","Emily","Elena","Clare","Alica","Tanya","Tammy"], [TrainerType.MUSICIAN]: ["Boris","Preston","Charles","Clyde","Vincent","Dalton","Kirk","Shawn","Fabian","Fernando","Joseph","Marcos","Arturo","Jerry","Lonnie","Tony"], [TrainerType.NURSERY_AIDE]: ["Autumn","Briana","Leah","Miho","Ethel","Hollie","Ilse","June","Kimya","Rosalyn"], - [TrainerType.OFFICER]: ["Dirk","Keith","Alex","Bobby","Caleb","Danny","Dylan","Thomas","Daniel","Jeff","Braven","Dell","Neagle","Haruki","Mitchell","Sheriff","Raymond"], + [TrainerType.OFFICER]: ["Dirk","Keith","Alex","Bobby","Caleb","Danny","Dylan","Thomas","Daniel","Jeff","Braven","Dell","Neagle","Haruki","Mitchell","Raymond"], [TrainerType.PARASOL_LADY]: ["Angelica","Clarissa","Madeline","Akari","Annabell","Kayley","Rachel","Alexa","Sabrina","April","Gwyneth","Laura","Lumi","Mariah","Melita","Nicole","Tihana","Ingrid","Tyra"], [TrainerType.PILOT]: ["Chase","Leonard","Ted","Elron","Ewing","Flynn","Winslow"], [TrainerType.POKEFAN]: [["Alex","Allan","Brandon","Carter","Colin","Derek","Jeremy","Joshua","Rex","Robert","Trevor","William","Colton","Miguel","Francisco","Kaleb","Leonard","Boone","Elliot","Jude","Norbert","Corey","Gabe","Baxter"],["Beverly","Georgia","Jaime","Ruth","Isabel","Marissa","Vanessa","Annika","Bethany","Kimberly","Meredith","Rebekah","Eleanor","Darcy","Lydia","Sachiko","Abigail","Agnes","Lydie","Roisin","Tara","Carmen","Janet"]], From 14cc639654a537b1b9d17c621b735fd082427439 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Mon, 29 Apr 2024 22:00:42 -0500 Subject: [PATCH 025/110] Small egg move change Gave Eevee and Pichu replacement egg moves for moves that are now on their level up learnsets. As usual, these are subject to change. --- src/data/egg-moves.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/egg-moves.ts b/src/data/egg-moves.ts index f2b9a55d3fa..800c9a0ef25 100644 --- a/src/data/egg-moves.ts +++ b/src/data/egg-moves.ts @@ -62,7 +62,7 @@ export const speciesEggMoves = { [Species.MAGIKARP]: [ Moves.FLIP_TURN, Moves.ICE_SPINNER, Moves.LIQUIDATION, Moves.DRAGON_ASCENT ], [Species.LAPRAS]: [ Moves.RECOVER, Moves.FREEZE_DRY, Moves.CHILLY_RECEPTION, Moves.BOOMBURST ], [Species.DITTO]: [ Moves.MIMIC, Moves.COPYCAT, Moves.ME_FIRST, Moves.METRONOME ], - [Species.EEVEE]: [ Moves.WISH, Moves.REVELATION_DANCE, Moves.SIZZLY_SLIDE, Moves.NO_RETREAT ], + [Species.EEVEE]: [ Moves.WISH, Moves.REVELATION_DANCE, Moves.TRI_ATTACK, Moves.NO_RETREAT ], [Species.PORYGON]: [ Moves.BUZZY_BUZZ, Moves.AURA_SPHERE, Moves.TOPSY_TURVY, Moves.TECHNO_BLAST ], [Species.OMANYTE]: [ Moves.SCALD, Moves.EARTH_POWER, Moves.POWER_GEM, Moves.STRENGTH_SAP ], [Species.KABUTO]: [ Moves.CEASELESS_EDGE, Moves.DRILL_RUN, Moves.AQUA_CUTTER, Moves.MIGHTY_CLEAVE ], @@ -81,7 +81,7 @@ export const speciesEggMoves = { [Species.LEDYBA]: [ Moves.POLLEN_PUFF, Moves.THIEF, Moves.PARTING_SHOT, Moves.SPORE ], [Species.SPINARAK]: [ Moves.PARTING_SHOT, Moves.MEGAHORN, Moves.SILK_TRAP, Moves.STRENGTH_SAP ], [Species.CHINCHOU]: [ Moves.THUNDERCLAP, Moves.BOUNCY_BUBBLE, Moves.VOLT_SWITCH, Moves.TAIL_GLOW ], - [Species.PICHU]: [ Moves.PIKA_PAPOW, Moves.SPLISHY_SPLASH, Moves.FLOATY_FALL, Moves.ZIPPY_ZAP ], + [Species.PICHU]: [ Moves.THUNDERCLAP, Moves.SPLISHY_SPLASH, Moves.FLOATY_FALL, Moves.THUNDER_CAGE ], [Species.CLEFFA]: [ Moves.TAKE_HEART, Moves.POWER_GEM, Moves.WISH, Moves.LIGHT_OF_RUIN ], [Species.IGGLYBUFF]: [ Moves.MOONBLAST, Moves.APPLE_ACID, Moves.WISH, Moves.BOOMBURST ], [Species.TOGEPI]: [ Moves.SCORCHING_SANDS, Moves.ROOST, Moves.MOONBLAST, Moves.FIERY_DANCE ], From ad5efdf4f9bd41a55bfb8b4a87bd495a0b949f20 Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Tue, 30 Apr 2024 20:47:53 +1000 Subject: [PATCH 026/110] Refactor overrides --- src/battle-scene.ts | 17 +---------------- src/field/arena.ts | 3 +-- src/field/pokemon.ts | 3 ++- src/game-mode.ts | 3 ++- src/overrides.ts | 23 +++++++++++++++++++++++ src/phases.ts | 3 ++- 6 files changed, 31 insertions(+), 21 deletions(-) create mode 100644 src/overrides.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 6b54505b6a1..4253a1805cb 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -60,25 +60,10 @@ import { SceneBase } from './scene-base'; import CandyBar from './ui/candy-bar'; import { Variant, variantData } from './data/variant'; import { Localizable } from './plugins/i18n'; +import { STARTING_WAVE_OVERRIDE, OPP_SPECIES_OVERRIDE, SEED_OVERRIDE, STARTING_BIOME_OVERRIDE } from './overrides'; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; -export const SEED_OVERRIDE = ''; -export const STARTER_SPECIES_OVERRIDE = 0; -export const STARTER_FORM_OVERRIDE = 0; -export const STARTING_LEVEL_OVERRIDE = 0; -export const STARTING_WAVE_OVERRIDE = 0; -export const STARTING_BIOME_OVERRIDE = Biome.TOWN; -export const STARTING_MONEY_OVERRIDE = 0; - -export const ABILITY_OVERRIDE = Abilities.NONE; -export const MOVE_OVERRIDE = Moves.NONE; -export const OPP_SPECIES_OVERRIDE = 0; -export const OPP_ABILITY_OVERRIDE = Abilities.NONE; -export const OPP_MOVE_OVERRIDE = Moves.NONE; -export const OPP_SHINY_OVERRIDE = false; -export const OPP_VARIANT_OVERRIDE = 0; - const DEBUG_RNG = false; export const startingWave = STARTING_WAVE_OVERRIDE || 1; diff --git a/src/field/arena.ts b/src/field/arena.ts index 910d998d68e..5b14560d407 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -18,8 +18,7 @@ import { TimeOfDay } from "../data/enums/time-of-day"; import { Terrain, TerrainType } from "../data/terrain"; import { PostTerrainChangeAbAttr, PostWeatherChangeAbAttr, applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs } from "../data/ability"; import Pokemon from "./pokemon"; - -const WEATHER_OVERRIDE = WeatherType.NONE; +import { WEATHER_OVERRIDE } from '../overrides'; export class Arena { public scene: BattleScene; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 4e20bad407b..44573542fe8 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1,5 +1,5 @@ import Phaser from 'phaser'; -import BattleScene, { ABILITY_OVERRIDE, AnySound, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../battle-scene'; +import BattleScene, { AnySound } from '../battle-scene'; import { Variant, VariantSet, variantColorCache } from '#app/data/variant'; import { variantData } from '#app/data/variant'; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info'; @@ -43,6 +43,7 @@ import { Nature, getNatureStatMultiplier } from '../data/nature'; import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from '../data/pokemon-forms'; import { TerrainType } from '../data/terrain'; import { TrainerSlot } from '../data/trainer-config'; +import { ABILITY_OVERRIDE, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../overrides'; export enum FieldPosition { CENTER, diff --git a/src/game-mode.ts b/src/game-mode.ts index 0ac3f0503f1..76c97b4c9ac 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -1,10 +1,11 @@ import { fixedBattles } from "./battle"; -import BattleScene, { STARTING_BIOME_OVERRIDE, STARTING_LEVEL_OVERRIDE, STARTING_MONEY_OVERRIDE } from "./battle-scene"; +import BattleScene from "./battle-scene"; import { Biome } from "./data/enums/biome"; import { Species } from "./data/enums/species"; import PokemonSpecies, { allSpecies } from "./data/pokemon-species"; import { Arena } from "./field/arena"; import * as Utils from "./utils"; +import { STARTING_BIOME_OVERRIDE, STARTING_LEVEL_OVERRIDE, STARTING_MONEY_OVERRIDE } from './overrides'; export enum GameModes { CLASSIC, diff --git a/src/overrides.ts b/src/overrides.ts new file mode 100644 index 00000000000..732b1a5a45b --- /dev/null +++ b/src/overrides.ts @@ -0,0 +1,23 @@ +import { Species } from './data/enums/species'; +import { Abilities } from "./data/enums/abilities"; +import { Biome } from "./data/enums/biome"; +import { Moves } from "./data/enums/moves"; +import { WeatherType } from "./data/weather"; + +export const SEED_OVERRIDE = ''; +export const STARTER_SPECIES_OVERRIDE = 0; +export const STARTER_FORM_OVERRIDE = 0; +export const STARTING_LEVEL_OVERRIDE = 0; +export const STARTING_WAVE_OVERRIDE = 0; +export const STARTING_BIOME_OVERRIDE = Biome.TOWN; +export const STARTING_MONEY_OVERRIDE = 0; +export const WEATHER_OVERRIDE = WeatherType.NONE; + +export const ABILITY_OVERRIDE = Abilities.NONE; +export const MOVE_OVERRIDE = Moves.NONE; +export const OPP_SPECIES_OVERRIDE = 0; +export const OPP_ABILITY_OVERRIDE = Abilities.NONE; +export const OPP_MOVE_OVERRIDE = Moves.NONE; + +export const OPP_SHINY_OVERRIDE = false; +export const OPP_VARIANT_OVERRIDE = 0; diff --git a/src/phases.ts b/src/phases.ts index 1393355e3f5..8934104ed80 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -1,4 +1,4 @@ -import BattleScene, { STARTER_FORM_OVERRIDE, STARTER_SPECIES_OVERRIDE, bypassLogin, startingWave } from "./battle-scene"; +import BattleScene, { bypassLogin, startingWave } from "./battle-scene"; import { default as Pokemon, PlayerPokemon, EnemyPokemon, PokemonMove, MoveResult, DamageResult, FieldPosition, HitResult, TurnMove } from "./field/pokemon"; import * as Utils from './utils'; import { Moves } from "./data/enums/moves"; @@ -57,6 +57,7 @@ import { fetchDailyRunSeed, getDailyRunStarters } from "./data/daily-run"; import { GameModes, gameModes } from "./game-mode"; import { getPokemonSpecies, speciesStarters } from "./data/pokemon-species"; import i18next from './plugins/i18n'; +import { STARTER_FORM_OVERRIDE, STARTER_SPECIES_OVERRIDE } from './overrides'; export class LoginPhase extends Phase { private showText: boolean; From 2402b8e6a07eb3c4b1886b16e595c0f9326307d6 Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Tue, 30 Apr 2024 20:49:06 +1000 Subject: [PATCH 027/110] Add overrides to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 4cf3196a72b..55f9203a81d 100644 --- a/.gitignore +++ b/.gitignore @@ -33,5 +33,6 @@ public/images/pokemon/icons/input/output/* public/images/character/*/ src/data/battle-anim-raw-data*.ts src/data/battle-anim-data.ts +src/overrides.ts coverage \ No newline at end of file From c7bd99b34584f0ad4149f4511b30321da23c9bbc Mon Sep 17 00:00:00 2001 From: Raphael van der Woude <47354694+RaphaelWoude@users.noreply.github.com> Date: Tue, 30 Apr 2024 16:53:00 +0200 Subject: [PATCH 028/110] Added missing menu translations (#355) * Added missing menu translations * Added missing translations to other languages --------- Co-authored-by: Raphael van der Woude --- src/locales/de/menu.ts | 5 +++++ src/locales/en/menu.ts | 5 +++++ src/locales/es/menu.ts | 7 ++++++- src/locales/fr/menu.ts | 5 +++++ src/locales/it/menu.ts | 7 ++++++- src/ui/daily-run-scoreboard.ts | 9 +++++---- src/ui/title-ui-handler.ts | 5 +++-- 7 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/locales/de/menu.ts b/src/locales/de/menu.ts index d70cd83c50d..4876fa3432a 100644 --- a/src/locales/de/menu.ts +++ b/src/locales/de/menu.ts @@ -59,4 +59,9 @@ export const menu: SimpleTranslationEntries = { "escapeVerbSwitch": "auswechseln", "escapeVerbFlee": "flucht", "notDisabled": "{{moveName}} ist\nnicht mehr deaktiviert!", + "rankings": "Rankings", + "dailyRankings": "Daily Rankings", + "noRankings": "No Rankings", + "loading": "Loading…", + "playersOnline": "Players Online" } as const; \ No newline at end of file diff --git a/src/locales/en/menu.ts b/src/locales/en/menu.ts index bce59c02c11..1d840a3eb03 100644 --- a/src/locales/en/menu.ts +++ b/src/locales/en/menu.ts @@ -78,4 +78,9 @@ export const menu: SimpleTranslationEntries = { "skipItemQuestion": "Are you sure you want to skip taking an item?", "eggHatching": "Oh?", "ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?", + "rankings": "Rankings", + "dailyRankings": "Daily Rankings", + "noRankings": "No Rankings", + "loading": "Loading…", + "playersOnline": "Players Online" } as const; \ No newline at end of file diff --git a/src/locales/es/menu.ts b/src/locales/es/menu.ts index dc1c50b3821..e72710cee37 100644 --- a/src/locales/es/menu.ts +++ b/src/locales/es/menu.ts @@ -61,5 +61,10 @@ export const menu: SimpleTranslationEntries = { "notDisabled": "¡El movimiento {{moveName}}\nya no está anulado!", "skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?", "eggHatching": "¿Y esto?", - "ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?" + "ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?", + "rankings": "Rankings", + "dailyRankings": "Daily Rankings", + "noRankings": "No Rankings", + "loading": "Loading…", + "playersOnline": "Players Online" } as const; \ No newline at end of file diff --git a/src/locales/fr/menu.ts b/src/locales/fr/menu.ts index 015132bc6c5..911445bcdca 100644 --- a/src/locales/fr/menu.ts +++ b/src/locales/fr/menu.ts @@ -73,4 +73,9 @@ export const menu: SimpleTranslationEntries = { "skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?", "eggHatching": "Oh ?", "ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?", + "rankings": "Rankings", + "dailyRankings": "Daily Rankings", + "noRankings": "No Rankings", + "loading": "Loading…", + "playersOnline": "Players Online" } as const; diff --git a/src/locales/it/menu.ts b/src/locales/it/menu.ts index 872315d77c0..b9e288c26ce 100644 --- a/src/locales/it/menu.ts +++ b/src/locales/it/menu.ts @@ -6,5 +6,10 @@ export const menu: SimpleTranslationEntries = { "newGame": "Nuova Partita", "loadGame": "Carica Partita", "dailyRun": "Corsa Giornaliera (Beta)", - "selectGameMode": "Seleziona una modalità di gioco." + "selectGameMode": "Seleziona una modalità di gioco.", + "rankings": "Rankings", + "dailyRankings": "Daily Rankings", + "noRankings": "No Rankings", + "loading": "Loading…", + "playersOnline": "Players Online" } as const; \ No newline at end of file diff --git a/src/ui/daily-run-scoreboard.ts b/src/ui/daily-run-scoreboard.ts index 90fef5ba5e4..1379ec6a8ef 100644 --- a/src/ui/daily-run-scoreboard.ts +++ b/src/ui/daily-run-scoreboard.ts @@ -2,6 +2,7 @@ import BattleScene from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { WindowVariant, addWindow } from "./ui-theme"; import * as Utils from "../utils"; +import i18next from "i18next"; interface RankingEntry { rank: integer, @@ -39,7 +40,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { const titleWindow = addWindow(this.scene, 0, 0, 114, 18, false, false, null, null, WindowVariant.THIN); this.add(titleWindow); - this.titleLabel = addTextObject(this.scene, titleWindow.displayWidth / 2, titleWindow.displayHeight / 2, 'Daily Rankings', TextStyle.WINDOW, { fontSize: '64px' }); + this.titleLabel = addTextObject(this.scene, titleWindow.displayWidth / 2, titleWindow.displayHeight / 2, i18next.t('menu:dailyRankings'), TextStyle.WINDOW, { fontSize: '64px' }); this.titleLabel.setOrigin(0.5, 0.5); this.add(this.titleLabel); @@ -141,7 +142,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { update(category: ScoreboardCategory = this.category, page: integer = this.page) { this.rankingsContainer.removeAll(true); - this.loadingLabel.setText('Loading…'); + this.loadingLabel.setText(i18next.t('menu:loading')); this.loadingLabel.setVisible(true); if (category !== this.category) @@ -155,7 +156,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { .then(jsonResponse => { this.page = page; this.category = category; - this.titleLabel.setText(`${Utils.toReadableString(ScoreboardCategory[category])} Rankings`); + this.titleLabel.setText(`${Utils.toReadableString(ScoreboardCategory[category])} ${i18next.t("menu:rankings")}`); this.prevPageButton.setAlpha(page > 1 ? 1 : 0.5); this.nextPageButton.setAlpha(page < this.pageCount ? 1 : 0.5); this.pageNumberLabel.setText(page.toString()); @@ -163,7 +164,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { this.loadingLabel.setVisible(false); this.updateRankings(jsonResponse); } else - this.loadingLabel.setText('No Rankings'); + this.loadingLabel.setText(i18next.t('menu:noRankings')); }); }); } diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index 6c96e475929..c430764e4da 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -5,6 +5,7 @@ import { Mode } from "./ui"; import * as Utils from "../utils"; import { TextStyle, addTextObject } from "./text"; import { battleCountSplashMessage, splashMessages } from "../data/splash-messages"; +import i18next from "i18next"; export default class TitleUiHandler extends OptionSelectUiHandler { private titleContainer: Phaser.GameObjects.Container; @@ -37,7 +38,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { this.titleContainer.add(this.dailyRunScoreboard); - this.playerCountLabel = addTextObject(this.scene, (this.scene.game.canvas.width / 6) - 2, (this.scene.game.canvas.height / 6) - 90, '? Players Online', TextStyle.MESSAGE, { fontSize: '54px' }); + this.playerCountLabel = addTextObject(this.scene, (this.scene.game.canvas.width / 6) - 2, (this.scene.game.canvas.height / 6) - 90, `? ${i18next.t("menu:playersOnline")}`, TextStyle.MESSAGE, { fontSize: '54px' }); this.playerCountLabel.setOrigin(1, 0); this.titleContainer.add(this.playerCountLabel); @@ -61,7 +62,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { Utils.apiFetch(`game/titlestats`) .then(request => request.json()) .then(stats => { - this.playerCountLabel.setText(`${stats.playerCount} Players Online`); + this.playerCountLabel.setText(`${stats.playerCount} ${i18next.t("menu:playersOnline")}`); if (this.splashMessage === battleCountSplashMessage) this.splashMessageText.setText(battleCountSplashMessage.replace('{COUNT}', stats.battleCount.toLocaleString('en-US'))); }); From 8e64eaea3f3e6dc93572f88095e2128f1fe1a3f9 Mon Sep 17 00:00:00 2001 From: NxKarim <43686802+NxKarim@users.noreply.github.com> Date: Tue, 30 Apr 2024 09:47:10 -0600 Subject: [PATCH 029/110] Some Fixes (HPRatio, Hustle, Imposter, Sleep Talk) (#353) * Some Fixes - HP ratio related checks (`getHpRatio`): Added rounding to 2 decimals for non-precise option. - Hustle (`BattleStatMultiplierAbAttr`): added optional condition; Hustle now works only for physical attacks. - Imposter (`PostSummonTransformAbAttr`): Switch in a double battle after both foes have been defeated no longer crashes the game. - Sleep Talk (`RandomMovesetMoveAttr`): Single target moves no longer target allies. * Formatting changes for consistency --------- Co-authored-by: Flashfyre --- src/data/ability.ts | 15 +++++++++++---- src/data/move.ts | 22 +++++++++++++++++----- src/field/pokemon.ts | 2 +- src/phases.ts | 2 +- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 281a37cfd0c..2ac7d6be1ac 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -976,16 +976,19 @@ export class FieldMoveTypePowerBoostAbAttr extends FieldMovePowerBoostAbAttr { export class BattleStatMultiplierAbAttr extends AbAttr { private battleStat: BattleStat; private multiplier: number; + private condition: PokemonAttackCondition; - constructor(battleStat: BattleStat, multiplier: number) { + constructor(battleStat: BattleStat, multiplier: number, condition?: PokemonAttackCondition) { super(false); this.battleStat = battleStat; this.multiplier = multiplier; + this.condition = condition; } applyBattleStat(pokemon: Pokemon, passive: boolean, battleStat: BattleStat, statValue: Utils.NumberHolder, args: any[]): boolean | Promise { - if (battleStat === this.battleStat) { + const move = (args[0] as Move); + if (battleStat === this.battleStat && (!this.condition || this.condition(pokemon, null, move))) { statValue.value *= this.multiplier; return true; } @@ -1402,6 +1405,7 @@ export class TraceAbAttr extends PostSummonAbAttr { const targets = pokemon.getOpponents(); if (!targets.length) return false; + let target: Pokemon; if (targets.length > 1) pokemon.scene.executeWithSeedOffset(() => target = Utils.randSeedItem(targets), pokemon.scene.currentBattle.waveIndex); @@ -1427,6 +1431,9 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { const targets = pokemon.getOpponents(); + if (!targets.length) + return false; + let target: Pokemon; if (targets.length > 1) pokemon.scene.executeWithSeedOffset(() => target = Utils.randSeedItem(targets), pokemon.scene.currentBattle.waveIndex); @@ -2642,8 +2649,8 @@ export function initAbilities() { new Ability(Abilities.TRUANT, 3) .attr(PostSummonAddBattlerTagAbAttr, BattlerTagType.TRUANT, 1, false), new Ability(Abilities.HUSTLE, 3) - .attr(BattleStatMultiplierAbAttr, BattleStat.ATK, 1.5) - .attr(BattleStatMultiplierAbAttr, BattleStat.ACC, 0.8), + .attr(BattleStatMultiplierAbAttr, BattleStat.ATK, 1.5, (user, target, move) => move.category == MoveCategory.PHYSICAL) + .attr(BattleStatMultiplierAbAttr, BattleStat.ACC, 0.8, (user, target, move) => move.category == MoveCategory.PHYSICAL), new Ability(Abilities.CUTE_CHARM, 3) .attr(PostDefendContactApplyTagChanceAbAttr, 30, BattlerTagType.INFATUATED), new Ability(Abilities.PLUS, 3) diff --git a/src/data/move.ts b/src/data/move.ts index 30c97a1ac8d..a95ce9c91f4 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -3099,11 +3099,23 @@ export class RandomMovesetMoveAttr extends OverrideMoveEffectAttr { const moveTargets = getMoveTargets(user, move.moveId); if (!moveTargets.targets.length) return false; - const targets = moveTargets.multiple || moveTargets.targets.length === 1 - ? moveTargets.targets - : moveTargets.targets.indexOf(target.getBattlerIndex()) > -1 - ? [ target.getBattlerIndex() ] - : [ moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ]; + let selectTargets: BattlerIndex[]; + switch (true) { + case (moveTargets.multiple || moveTargets.targets.length === 1): { + selectTargets = moveTargets.targets; + break; + } + case (moveTargets.targets.indexOf(target.getBattlerIndex()) > -1): { + selectTargets = [ target.getBattlerIndex() ]; + break; + } + default: { + moveTargets.targets.splice(moveTargets.targets.indexOf(user.getAlly().getBattlerIndex())); + selectTargets = [ moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ]; + break; + } + } + const targets = selectTargets; user.getMoveQueue().push({ move: move.moveId, targets: targets, ignorePP: true }); user.scene.unshiftPhase(new MovePhase(user.scene, user, targets, moveset[moveIndex], true)); return true; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 44573542fe8..9a7bfb48621 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -658,7 +658,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getHpRatio(precise: boolean = false): number { return precise ? this.hp / this.getMaxHp() - : ((this.hp / this.getMaxHp()) * 100) / 100; + : Math.round((this.hp / this.getMaxHp()) * 100) / 100; } generateGender(): void { diff --git a/src/phases.ts b/src/phases.ts index 8934104ed80..8eda33de20e 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -2548,7 +2548,7 @@ export class MoveEffectPhase extends PokemonPhase { : 3 / (3 + Math.min(targetEvasionLevel.value - userAccuracyLevel.value, 6)); } - applyBattleStatMultiplierAbAttrs(BattleStatMultiplierAbAttr, user, BattleStat.ACC, accuracyMultiplier); + applyBattleStatMultiplierAbAttrs(BattleStatMultiplierAbAttr, user, BattleStat.ACC, accuracyMultiplier, this.move.getMove()); const evasionMultiplier = new Utils.NumberHolder(1); applyBattleStatMultiplierAbAttrs(BattleStatMultiplierAbAttr, this.getTarget(), BattleStat.EVA, evasionMultiplier); From 1e7c329928d422d098167f936530d0d0ea63b41c Mon Sep 17 00:00:00 2001 From: Reldnahc Date: Tue, 30 Apr 2024 11:38:24 -0500 Subject: [PATCH 030/110] Implement move wish (#323) * implement wish move * Serene grace implementation idea * only do the thingy if it actually gets effected. * Revert "only do the thingy if it actually gets effected." This reverts commit 4b084658d26d0aa4d38bdd18f8f051dbc3ca11a3. * Revert "Serene grace implementation idea" This reverts commit 4dd2504bc7cdf3d9ce4ea52c1c680dfc50f01adc. * Fixes for Wish implementation --------- Co-authored-by: Flashfyre --- src/data/arena-tag.ts | 31 +++++++++++++++++++++++++++++-- src/data/enums/arena-tag-type.ts | 1 + src/data/move.ts | 4 ++-- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index bb76a9880b3..a879c68d4ce 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -1,10 +1,10 @@ import { Arena } from "../field/arena"; import { Type } from "./type"; import * as Utils from "../utils"; -import { MoveCategory, StatChangeAttr, allMoves } from "./move"; +import { MoveCategory, allMoves } from "./move"; import { getPokemonMessage } from "../messages"; import Pokemon, { HitResult, PokemonMove } from "../field/pokemon"; -import { MoveEffectPhase, StatChangePhase } from "../phases"; +import { MoveEffectPhase, PokemonHealPhase, StatChangePhase} from "../phases"; import { StatusEffect } from "./status-effect"; import { BattlerIndex } from "../battle"; import { Moves } from "./enums/moves"; @@ -146,6 +146,31 @@ class AuroraVeilTag extends WeakenMoveScreenTag { } } +class WishTag extends ArenaTag { + private battlerIndex: BattlerIndex; + private triggerMessage: string; + private healHp: number; + + constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { + super(ArenaTagType.WISH, turnCount, Moves.WISH, sourceId, side); + } + + onAdd(arena: Arena): void { + const user = arena.scene.getPokemonById(this.sourceId); + this.battlerIndex = user.getBattlerIndex(); + this.triggerMessage = getPokemonMessage(user, '\'s wish\ncame true!'); + this.healHp = Math.max(Math.floor(user.getMaxHp() / 2), 1); + } + + onRemove(arena: Arena): void { + const target = arena.scene.getField()[this.battlerIndex]; + if (target?.isActive(true)) { + arena.scene.queueMessage(this.triggerMessage); + arena.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(), this.healHp, null, true, false)); + } + } +} + export class WeakenMoveTypeTag extends ArenaTag { private weakenedType: Type; @@ -472,6 +497,8 @@ export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMov case ArenaTagType.FUTURE_SIGHT: case ArenaTagType.DOOM_DESIRE: return new DelayedAttackTag(tagType, sourceMove, sourceId, targetIndex); + case ArenaTagType.WISH: + return new WishTag(turnCount, sourceId, side); case ArenaTagType.STEALTH_ROCK: return new StealthRockTag(sourceId, side); case ArenaTagType.STICKY_WEB: diff --git a/src/data/enums/arena-tag-type.ts b/src/data/enums/arena-tag-type.ts index cc08ca4fdcf..8478b6f3f57 100644 --- a/src/data/enums/arena-tag-type.ts +++ b/src/data/enums/arena-tag-type.ts @@ -8,6 +8,7 @@ export enum ArenaTagType { MIST = "MIST", FUTURE_SIGHT = "FUTURE_SIGHT", DOOM_DESIRE = "DOOM_DESIRE", + WISH = "WISH", STEALTH_ROCK = "STEALTH_ROCK", STICKY_WEB = "STICKY_WEB", TRICK_ROOM = "TRICK_ROOM", diff --git a/src/data/move.ts b/src/data/move.ts index a95ce9c91f4..565c3b24125 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -4493,8 +4493,8 @@ export function initMoves() { .attr(AbilityCopyAttr), new SelfStatusMove(Moves.WISH, Type.NORMAL, -1, 10, -1, 0, 3) .triageMove() - .unimplemented(), - new SelfStatusMove(Moves.ASSIST, Type.NORMAL, -1, 20, -1, 0, 3) + .attr(AddArenaTagAttr, ArenaTagType.WISH, 2, true), + new SelfStatusMove(Moves.ASSIST, Type.NORMAL, -1, 20, -1, 0, 3) .attr(RandomMovesetMoveAttr, true) .ignoresVirtual(), new SelfStatusMove(Moves.INGRAIN, Type.GRASS, -1, 20, -1, 0, 3) From 55dc33964739b05905613e6d41d16d3b3543e58a Mon Sep 17 00:00:00 2001 From: Nero <122359402+paulcazac@users.noreply.github.com> Date: Tue, 30 Apr 2024 18:42:20 +0200 Subject: [PATCH 031/110] Bug Fixes and QoL: Minor changes to UI related bugs (#356) * bug fix: updates move description correctly viewing the description of move slot 1 in a pokemon's move summary UI only updated the first time it was viewed per session, exiting the party UI and re-entering caused the moves in a pokemon's summary screen to not automatically populate the description box unless you moved the cursor down to move 2 and then back up to move 1 * slight logic changes to fix party UI controls when battlerCount = 2 (double battle), starting in party slot 1 and pressing DOWN -> UP -> RIGHT would move the cursor back down when it should be moving it to the right: these changes fix that * finalised the minor UI changes * finalising * refactor * removed console logs used for testing * bug fix: updates move description correctly viewing the description of move slot 1 in a pokemon's move summary UI only updated the first time it was viewed per session, exiting the party UI and re-entering caused the moves in a pokemon's summary screen to not automatically populate the description box unless you moved the cursor down to move 2 and then back up to move 1 * slight logic changes to fix party UI controls when battlerCount = 2 (double battle), starting in party slot 1 and pressing DOWN -> UP -> RIGHT would move the cursor back down when it should be moving it to the right: these changes fix that * finalised the minor UI changes * finalising * refactor * removed console logs used for testing --- package-lock.json | 4 ++-- src/ui/party-ui-handler.ts | 15 +++++++++++---- src/ui/summary-ui-handler.ts | 31 ++++++++++++++++++++++--------- 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5521dcc86a8..ecaadf378ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.0.1", + "version": "1.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.0.1", + "version": "1.0.3", "dependencies": { "@material/material-color-utilities": "^0.2.7", "crypto-js": "^4.2.0", diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 30558b5bda0..29a4037f12f 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -383,6 +383,7 @@ export default class PartyUiHandler extends MessageUiHandler { } const slotCount = this.partySlots.length; + const battlerCount = this.scene.currentBattle.getBattlerCount(); switch (button) { case Button.UP: @@ -392,14 +393,20 @@ export default class PartyUiHandler extends MessageUiHandler { success = this.setCursor(this.cursor < 6 ? this.cursor < slotCount - 1 ? this.cursor + 1 : 6 : 0); break; case Button.LEFT: - if (this.cursor >= this.scene.currentBattle.getBattlerCount() && this.cursor < 6) + if (this.cursor >= battlerCount && this.cursor <= 6) success = this.setCursor(0); break; case Button.RIGHT: - const battlerCount = this.scene.currentBattle.getBattlerCount(); - if (slotCount > battlerCount && this.cursor < battlerCount) - success = this.setCursor(this.lastCursor < 6 ? this.lastCursor || battlerCount : battlerCount); + if (slotCount === battlerCount){ + success = this.setCursor(6); break; + } else if (battlerCount >= 2 && slotCount > battlerCount && this.getCursor() === 0 && this.lastCursor === 1){ + success = this.setCursor(2); + break; + } else if (slotCount > battlerCount && this.cursor < battlerCount){ + success = this.setCursor(this.lastCursor < 6 ? this.lastCursor || battlerCount : battlerCount); + break; + } } } diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 44003a7c8fc..cf5eb3639fd 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -364,9 +364,16 @@ export default class SummaryUiHandler extends UiHandler { case Button.LEFT: this.moveSelect = false; this.setCursor(Page.STATS); - this.hideMoveEffect(); - success = true; - break; + if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE){ + this.hideMoveEffect(); + this.destroyBlinkCursor(); + success = true; + break; + } else { + this.hideMoveSelect(); + success = true; + break; + } } } } else { @@ -426,11 +433,9 @@ export default class SummaryUiHandler extends UiHandler { } setCursor(cursor: integer, overrideChanged: boolean = false): boolean { - let changed: boolean; + let changed: boolean = overrideChanged || this.moveCursor !== cursor; if (this.moveSelect) { - changed = overrideChanged || this.moveCursor !== cursor; - if (changed) { this.moveCursor = cursor; const selectedMove = this.getSelectedMove(); @@ -462,7 +467,6 @@ export default class SummaryUiHandler extends UiHandler { y: `-=${14.83 * (moveDescriptionLineCount - 3)}` }); } - } if (!this.moveCursorObj) { this.moveCursorObj = this.scene.add.sprite(-2, 0, 'summary_moves_cursor', 'highlight'); @@ -527,6 +531,11 @@ export default class SummaryUiHandler extends UiHandler { this.setCursor(0, true); this.showMoveEffect(); } + else if (this.cursor===Page.MOVES) { + this.moveCursorObj = null; + this.showMoveSelect(); + this.showMoveEffect(); + } } else this.summaryPageTransitionContainer.x -= 214; @@ -871,6 +880,12 @@ export default class SummaryUiHandler extends UiHandler { this.moveSelect = false; this.extraMoveRowContainer.setVisible(false); this.moveDescriptionText.setText(''); + + this.destroyBlinkCursor(); + this.hideMoveEffect(); + } + + destroyBlinkCursor(){ if (this.moveCursorBlinkTimer) { this.moveCursorBlinkTimer.destroy(); this.moveCursorBlinkTimer = null; @@ -883,8 +898,6 @@ export default class SummaryUiHandler extends UiHandler { this.selectedMoveCursorObj.destroy(); this.selectedMoveCursorObj = null; } - - this.hideMoveEffect(); } showMoveEffect(instant?: boolean) { From c5cc4445c401aadccd4d4c3cb0261fd81e9df638 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Tue, 30 Apr 2024 13:39:16 -0500 Subject: [PATCH 032/110] Fix Furfrou trims missing shiny graphics --- .../images/pokemon/back/shiny/676-dandy.json | 24 +- .../images/pokemon/back/shiny/676-dandy.png | Bin 6191 -> 711 bytes .../pokemon/back/shiny/676-debutante.json | 24 +- .../pokemon/back/shiny/676-debutante.png | Bin 6479 -> 775 bytes .../pokemon/back/shiny/676-diamond.json | 24 +- .../images/pokemon/back/shiny/676-diamond.png | Bin 5633 -> 693 bytes .../images/pokemon/back/shiny/676-heart.json | 24 +- .../images/pokemon/back/shiny/676-heart.png | Bin 5762 -> 717 bytes .../images/pokemon/back/shiny/676-kabuki.json | 24 +- .../images/pokemon/back/shiny/676-kabuki.png | Bin 6054 -> 731 bytes .../pokemon/back/shiny/676-la-reine.json | 24 +- .../pokemon/back/shiny/676-la-reine.png | Bin 5515 -> 660 bytes .../images/pokemon/back/shiny/676-matron.json | 24 +- .../images/pokemon/back/shiny/676-matron.png | Bin 6245 -> 734 bytes .../pokemon/back/shiny/676-pharaoh.json | 24 +- .../images/pokemon/back/shiny/676-pharaoh.png | Bin 6065 -> 726 bytes .../images/pokemon/back/shiny/676-star.json | 24 +- public/images/pokemon/back/shiny/676-star.png | Bin 6351 -> 734 bytes public/images/pokemon/back/shiny/678.json | 213 +--------------- public/images/pokemon/back/shiny/678.png | Bin 1862 -> 589 bytes public/images/pokemon/shiny/676-dandy.json | 24 +- public/images/pokemon/shiny/676-dandy.png | Bin 5664 -> 759 bytes .../images/pokemon/shiny/676-debutante.json | 24 +- public/images/pokemon/shiny/676-debutante.png | Bin 6044 -> 794 bytes public/images/pokemon/shiny/676-diamond.json | 24 +- public/images/pokemon/shiny/676-diamond.png | Bin 5792 -> 806 bytes public/images/pokemon/shiny/676-heart.json | 24 +- public/images/pokemon/shiny/676-heart.png | Bin 5904 -> 814 bytes public/images/pokemon/shiny/676-kabuki.json | 24 +- public/images/pokemon/shiny/676-kabuki.png | Bin 6121 -> 837 bytes public/images/pokemon/shiny/676-la-reine.json | 24 +- public/images/pokemon/shiny/676-la-reine.png | Bin 5323 -> 711 bytes public/images/pokemon/shiny/676-matron.json | 24 +- public/images/pokemon/shiny/676-matron.png | Bin 5930 -> 782 bytes public/images/pokemon/shiny/676-pharaoh.json | 24 +- public/images/pokemon/shiny/676-pharaoh.png | Bin 5586 -> 768 bytes public/images/pokemon/shiny/676-star.json | 24 +- public/images/pokemon/shiny/676-star.png | Bin 6359 -> 838 bytes public/images/pokemon/shiny/678.json | 234 +----------------- public/images/pokemon/shiny/678.png | Bin 2490 -> 746 bytes src/data/move.ts | 2 +- 41 files changed, 241 insertions(+), 640 deletions(-) diff --git a/public/images/pokemon/back/shiny/676-dandy.json b/public/images/pokemon/back/shiny/676-dandy.json index c2bbb272d46..b13560feb7d 100644 --- a/public/images/pokemon/back/shiny/676-dandy.json +++ b/public/images/pokemon/back/shiny/676-dandy.json @@ -4,30 +4,30 @@ "image": "676-dandy.png", "format": "RGBA8888", "size": { - "w": 72, - "h": 72 + "w": 66, + "h": 66 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 62, - "h": 72 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 62, - "h": 72 + "x": 20, + "y": 14, + "w": 56, + "h": 66 }, "frame": { "x": 0, "y": 0, - "w": 62, - "h": 72 + "w": 56, + "h": 66 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9a72775f436bbda574bf3721630310fb:f01538e7a19ca3d0d2fea48cd27d8a4c:b5a287256e260744fe6660dc2ceefd11$" + "smartupdate": "$TexturePacker:SmartUpdate:30c2972a226f8e360e323bea40a8005e:232a9bbcc4dba00a033204f1ec06cffd:b5a287256e260744fe6660dc2ceefd11$" } } diff --git a/public/images/pokemon/back/shiny/676-dandy.png b/public/images/pokemon/back/shiny/676-dandy.png index 634a2b0c8a9489b181830db476ab2f759770c568..f8c77d88326e7a93f5702203e8441c8a8c2bfbac 100644 GIT binary patch literal 711 zcmV;&0yzDNP)|_qe-L$d3|~S0004WQchCj_Erg#u&T=p89jRzX%5D9b)Z2 zMx4XHBNv0*Id&$1{5f_s0G5Tk36c^mPN0vx@+R`sh_IW77 z5Uvuu#JHtx`}sldQLBOw5w~r7m<8|JBa!#C5Il`XKyvp<$O+0wCLX>+O+b1gpk!wz zUWI#tR{~0ugvED)ZV5GB2vh;SCFH;8PKfdo=`%raYse((;hJC80-JC#@+1rdr?Cob z&=65JAFdPOg;YU_=aY(XF!I?dtx`dc!du}!7^TJuqR$H(aWJS>D@S6rKJ5mlXp@Hept{; zO?i1w2oXwRP@W=9eqyaH52x_9I&^~6+)B_e!9v^-8^N#B6QQ4zX({sIj;Rwcxt@zz z*pD|~qY0H9A(FOuh$8$0(S3I%jE}@Ri3?HBeDV@$8Xyqpyb|2zBmk}iUxWZcEMz0N zdV@T=^;A~^YzJL0-}++j2^b+thmKg#M3mq61bB%&W=E`EqKqk5V{HOA(K_V9E`R#` tU@b3QxQ@xKTy5;Hcd(E7HW$yB5`Uoz7~&Px-rWEI002ovPDHLkV1kiREF1s; literal 6191 zcmV+~7|`d5P)b*L@^FRCSv-iGk zZZ7y&SeU~J#~*9<1HCZ)wteaAdq3~w8;jf{{k2X`oMhq7Tg{la%d*= zO&Gk=4_|-tCD3}Vv5l;Shj32>%^2P=}J-nDS;G0P>iS$dm!}q*3fl_He|ZN z+Q0riY`KIG5s)b;NG5vh0nMLZ$CZ>6untV0o~1xA#;?Er0+nE7if{yS%>fF%FSKjd zFJl{I3VQ$GE+{F-~OlO1o|yuyH7 zz4m=5hmO7nT|LL3`&2WW>}`Set_B2DXo`!~`qGID3TL=K&OQQ>NLE93LbN3QX~=y zKhQ@elNpaR>_s4*th2ozb>OjsDMNta422rKPwmu4ZP3x(2&Lr(=J1FRl{ir38G`=P zW9v)?1O#xgaj~3K#yfQ5$4yX0Mn;%hJC3r>o;ZD+b=)3?GZY5qOdD&bKkR^}&V!Iq zHxbGz3eDA3WhPqDMsp^~r6AXWTnv|lWIuXwae8+_MRK|P;t{kjy&rY5PWPN?85M@m zdV1TSy{8d6Pc=c?=|fPnVLD{Yn+RvmeSx;BA05dHqdJpWSqA1zE?=>Plga!!mjq+) zJu8$_cdaJO+uPey6CM?6ZfxHV-M!5Wz^OCstkL5Rgwfv9z#2hmJ#`SC-jV|~Te9J| zJt?rLB?hJ}G{EJnM)>Z#+YUYyt$qaU8+0b;%&9e|rKKq7+O@TnuHkWywymIj6G`5X znxv|(D($bREHP)!NwF+#Nrt)GbD*W?AatK;WQ}0V-kJl|o3f#1(=@2vIu%|xkqpaD z=wNA=7G5}`gXcOmkU2jYE)DPw=FMBz99Bl&x4LOL`}OBgSy?g|94vPYkDKfbzqAK( zB9R}LkuiyZnLIgFg_7^*z2~nigM&smcj+src_$l|bZX&ur;9LTV!|M*BzvMbw5}NBPaL&_X zG?EV63X(oefsyabaP`JzSg@lQ7PZE}3%y!+-mVb{0m#yBEi7)=V2gppZ915V%F11q z4d*VNML0taV6I#pATaRJpSvwhEeD~xx^w`yHf)Na-^96uf>y3v%6>#}uu3s!PTj!Q z-|&W%z?g^m(WWUu&(B{v3wh5^foD(=&vhV#HVqG>Ertius)f2O(;<6NDo&{s2Il;w zuTdcb>>Sr`@V?X)^rJpSFyuP4plXgZ?t_^%d39Vud@Sb@OS-U9g@gq6 z|Kp#3W7`U{3BpL*Z!d1&Ho-R+zGBmbY)bZT3^3&x10E5`0tB)Yf%Nl0E?hbf7yG}3 zTeq$=Fdu%}#ekq%Y+w#I?6pKhhL0!|a-&8Q%~r6KiAnC0v(h-1vO(k^kiFyrMuxQGxK2;1>nn^HdctOq{+^9km06A*F-j<+9X%?jo_ z0uvAzpu+2W`Um*CKl98SPN$1;9UsVEK?tb7{_t+-Jki8Pn;O}N8`kZG0F8F&L#QTt z{j>k>MGz<0boulzC-L(qtxD-)Kw3LLfHrH}vTZGdMMhYZDy2CnNM-c%^OfOsJ^cOs zn7@^q>w;c10aB|&*pCSc3R2RDhDU^r&E4`SyUp!Z{bY6y)W(6-}P>mjBH z+O69+nm+XXy1Gh?1C>A}Hnln!3a4h>jtB{gAqQRJG1d!ruAU-};{qfS&fm+6a~iat z|Cd;;=Y*qkvw#0?n^XGd>+4G+>FMKxVp6G$ILgBcg<>c)Ol{t@^=<6$b8F5~okPt4BEBeJU z#g#y@B#5~hs$lMc!TBLD&ad4KlJJA*=;!Ch*#Yyxfu+!d7rN1?EQJxF4PzTp1*yyg zMXS}oE3du;>fj(Ko}L9&dDEdHXDT}uPRoR_uu!(0=tJ9NNK1wP{p+XDU6~L6_dlP( z{JKhWa`m&8#L7h=mdd^y=jP`9z|>>k@q|kLad4`h3rW-aVDqJ;Iz!J*nycqDdG`j% zz6r__fRV^NJjQzBQ7)IsOs}kZ31T$SP&{J_)Ry43qId>8U6KoP%JQKycN&C+su55h za}T!d*a(`KXsFG95*ExXh4S2K7P(S294M3bOQh1^2c{sQqttN%pexe5OZ9qBO}<{0 zGE3i&?ca3N7U^JAMk8L|$IZNI!9B zKz`mIb(lI%kM+fRWpbU~XqcxTS$te?S=OzGXPfna&j%0^bGjzZcARqey24qfAM3<; zxA8vyf&Rw$GA$IXPK70Hak$^Y?FDWz7Psmkb)FtlYZ9R(Z!)t-1PFunY^ve(gaCiP zKDk0kgXihx$%FCp_vh@d^|Mx-+&9y>#7d17j!r=!2*|Q7J??+>@WN@m<%KhP3%!O) zGKQq{3ngpPA+A^h zTD=x1n?Zms_MJzYrM-=(pcTw*Qc4nsVBGDd^MkQJb~eW+xmIr^5CnwaupimOAOR^U zWtPqylfzH7_zE4DGAs7JRAlc=lK=A7+kb*+T?FL*VG@+Bn+)aaGogG#COcMb$%2Aa z1_+A|g)hJS+_rNk&-{xo|A8x9$VEDjvqB%3&yxN7iF}q*t5zE3>CC)xbT&9EdUOZ~ z<=&zLoLYcjjLCI6rlN!@9d|!!^7XZ?ZXyi7ns)5k1e>?40d-UmgHgIZ3ssZBTKR@4 zkoPJAiVTH;flF|EWQYM89xmmI& zu~6_@I;1=uiz?#xILURf?y)7BpA3nvhdvO8OBVa=IFE74&``DM-CY}D_j_AGp^`)K zs!XWfI1MV-O~sZCC2KPwAEAYW1w&uow@f(#ATrblXy{P@5+NYd(sl;Ovf`x9I<<5R zPQ}IyD1Ivw%5Y?h-ps(M7HibxMk@qJq@8G*!_-CT@YG8w5SyTbOP4M>0XqNa6eL9jEj%0pD?dV`jH-E|7pK*6 z9a9d$DMvV^YpsypNGC`GnmiuTq`C3j-5}AmM`%!vl+JUM4v_z z!$K6NK5U1Rr(0M%jgOBs?E{TIn%NtIBSZln86br^kk2%@`6^VA;(>*SVqj?p2B=#3 zX;t`o1{zKtj?fU2#R|!Ykd#qRMtR1SY26bMl2|Tw_xJPXMsX6|=ykiGy>a8F)hsEv zZN~=cDBExKe%xUT+|%RZxDShoj%Ld`L2(8Y92{%|qHM9kg{k2orbmin-;FdHC=MEr23m?!RkWim16=|!8% z37%u!y_JD7u`#hyOTLLk07FM-U?p#7LZMYn`r;UZ&@ygwJ9Vx#6+tLwqa~W zG|aRG@S^j&BOs|#Y%2Ie8kE-+z}&gB;G1(_!Hrv2G33$B+aRlYD9jNTA8WNgj)e{a zAS|MK_$4sTkZ^>p+W=1m8dhWeE2#{E4a!;`5*_I|8StXjX^=iA1^)5*->?AcBAXKA z^ruy=KCwo zSRb)8(3t;6M-|!N;A_RJ(;;nc5;V5eTXX7dOa)gkH$@#HP_zU8=jVTCJMyPX^I#b& zs0%}}G_{-q`BV-=nTm$v2OvH^o+**eanr82iU3iWo`Zr4XFQs)s^GJTW&En+Jx;__ zRE&1UVXC2W%GXb3o^JMnbm%zQ#C#VrwA9F^(3GKoJ9TK_azE&_8dy1ZCcM0O4lH`Q z61NY14v9ZL(}A5I?1P+Vr@@hyJ#hW{6}Wj5RcX3q4fOMX`ubQI-cYb$g9;vT+}T-0 zR)cM!sYY;$-_C&i*HdBYZ_=Tm^?+^lv9HV^Uxbm?pg=C_HG4A?NB9{b3KoJ zoevMGiy7Xq&=3ab)#VFeA%;t-bVV@2WRu89Q~v8%$3a{flVH+(4J_%P9K9BnwVZ0y3kX1n;Dl>V$z39x@SAsc% z5uOWep8=plKQ2Ag(3 zUl7mWq%Dc$BGM-QGI=j2A4w>H5-F8R6Qyf!CCmJAYz5#ME7F4leveoCxVtd2HnX%@m>^QcyNvhSl>+<67D=zg= zAPG?mOw+J94vjRc2(unXQ;-0Ma$nKWkx+_R3(8c`F)Av8y)JAs1jEh%%`q_dq413~ zK6r+k%Q8r$n(>Ozb`)yA^LfuabwIW}QD%GW+;=MrgUhft|p zX4<-a9hU0uffk%1^XAtv1MI9MTg@T9ezfU*2*>0f!6}=OjcSU5E`-u}ydG+5E1=^< zqir`&-=*)+^P|W1Ls40-8TWcaNwxYB1k#W3Cm)wk&S;@h4+@oH`gq&B>tTQWyR1hF`Kjz|RYXCA zr#4sPOK>of$+--mQA4Gh-(q0i+rJHuJ22?Ap2ck_z~yYXsiRHD4_dI0!4wz}U{av^ zX3UsoE-K1pa5ipU4cl?L*3GJ7Q&oT@fGsV}H)%Cd%;pF+k1q2ks7Gc~j|WrFyBH=V zFnjhPpo2T$9aNJV{hMYdK&Pqb8>bFddzoWmqFC4?KrHq`1)(`onAdK29johi!wxJ; zz+y|L82XL?mfV7hiXu~DLaZNMe{xwGMlSEUnBvi^XWs!{J%WO$GK19M92KNak~@G? z$cQTNu{*7ZRziwLzkg^a5b&8Z%WPAWIhMHLrP`trR8UNGgzG8jhXU<_dI%1IqP$iu z*6lPlA8@cC_Uf57Z8Gy)!ox$ySWoYV3Sx$y;?m?Y;Ei=mL39p^22ep2?d0k1L#%an z&ASVo1MQo(yzQVKdQ6##ippYy(R5e!#Oif6XA{rI0M#Gf1zWeTWk#H8hRA88YE|K0 zGAtYB?=Hl9Fdk`Gm*p9ee>(o`78;619=&R;IHM2=?agQtJ2*H1bU#K=u!Q+O zMW`Sba|}H&jw~_eygUiZ|5M?e-RofA`#azOCj7SV+yF6Hr_+dG42O&a-o4Y_)d*#! z1ty(__j=>wW0`u!x_SGE!Bd=zO|K_J81^uc7h8;#7B%aif^B=(!R~!qv14xl-gAM`!~<~V z<4)U+Cnr8^g66JzD61$i#U<+43KSPF+|1%ZnGJTnnVY9W>FZN4FCPqfe>A|X%{kC^ z>L^^kegUrCGD822ui(X=DPWkZGba=$^7}6=oS>?d2c9Ur-|6M~gbzg&O@*&hT$;~t zRIHr}hT2334iAESOySJhk_*RA9E7gZ&CuFg4=?tn!Sap-m{=QU3ZA56BOjKmwgMVU zfQAZjmtMXJt2bUt1!=IDZ6ivtqGRT!sqovAsqp(Vli)vkC&G$T8h947yi|P>WZ=th z;w$y8Qt#~HLwPL6m^7t&u&ChGRKVB}>sT3ma-!aKrwAhH>SeUZVfE&iQ&s{y7cT^N}ZaWYwC*=e|ZJj zjW(MOLRLda^-wxU6)CrNEQ@ulbbUI1^T{c`t_Z8t97f&_5K|BX^jaFALT%?MU6aL* z%TL6z^RPmSUOhb1paU$jFj6hSL&?S8r-H1VxdVufML6A55puK}j>@9KC%$7k256}; z@>+i6ouOB5nZok?-v^Wd%dx_Y&O>E5&!38g(l=4D_&pB4?~;HRh&6nwhelr(ECEMl z34rc&%xUCB{0h&`Y0Rbg_Ua7Cec5mako6kn8#56u51IHGaa#Q+%6}0UYNc!u<>8 z>^+piH7F>S|EDx8_lpBsH7O2V@T$Qg52jLIu~8}$EBSLsU0|74@yonzwB_Pqnr=Ai zCLDFM{ixH_ASM0Okr$fG{u&CrhD>dA1? z6Hj=s5*opIec;usKQ~bCTzmXIWuYCxksrd>P4_bLKX#2Ddfz4B{8$G@A9b`P_c`*; z*PzcKcrLzN%VBVy!^$=Gd;(U&xeS>5Ro30WJ{BE(Sdbq3kssyn{{b!&Yx|dnJp=#% N002ovPDHLkV1gA-$P)kn diff --git a/public/images/pokemon/back/shiny/676-debutante.json b/public/images/pokemon/back/shiny/676-debutante.json index b1067eed9f9..0469fb6702b 100644 --- a/public/images/pokemon/back/shiny/676-debutante.json +++ b/public/images/pokemon/back/shiny/676-debutante.json @@ -4,30 +4,30 @@ "image": "676-debutante.png", "format": "RGBA8888", "size": { - "w": 68, - "h": 68 + "w": 62, + "h": 62 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 57, - "h": 68 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 68 + "x": 25, + "y": 18, + "w": 51, + "h": 62 }, "frame": { "x": 0, "y": 0, - "w": 57, - "h": 68 + "w": 51, + "h": 62 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6d038d8d188d6e545741353c2dd5b812:6f39eb82deb32d251df708f5d4edc9f1:bf2f862a1c8881133f9f3ffbf44602fa$" + "smartupdate": "$TexturePacker:SmartUpdate:5a68081e37dfebc3935ecf4a4fbee3ad:71cbee6966c08512b0617eba3ce34a49:bf2f862a1c8881133f9f3ffbf44602fa$" } } diff --git a/public/images/pokemon/back/shiny/676-debutante.png b/public/images/pokemon/back/shiny/676-debutante.png index 3a7a0d7abc260085aba8b3b0232e150104fbe8e0..965e0aaf86d0a3e611a2fc8678f8adfac1355268 100644 GIT binary patch literal 775 zcmV+i1Ni)jP)|_qe-Om&#$Ba0004WQchC^B}{hxOcm6*0s zyX(!#@$+|-!pP&XKGeq#0Du61&4;eT70~m0neTv2yYDr;2evJB-^Uc!mGH^B;1dUWtVkvy5h+;+(UjQPSoQ`Y+}#+qIlrRQ1O3_Cs*fb*pX=`sT;CL z7o09b>cto6%*$7nft6fk>Cj+TV5_hkGby8`9J8vG-hGNTI`QYoHJ(^sfAIKr0N76| z4No7WKA+|LbsVo3zTvR}s(#W+<^jJ0>v7zu`v!6QJp35&2!LD7e~n$mcezX&kMav( z=n{>7=QTCFuAF?k3@H@S>h?z(bqq@f}^{ zEcCubGs_!w`hsWKEbP426uhg?pb35Q7rOnq4LwoafEuoJa_#Osz@xq`Gm&v3)nfIS z`8x=03wKj1ZOL%87@irtgt;{{)?hqx!_&Jphdmdb<54(^f8?zc?(WcWaKo$BDQ39D zlgK!pWuJYEAUwvrbWdWF&pEkGJ>Ga+Ud6!0Gs3=hjNP5z@yvr-QjJ~y19yi+`$=W; zMqDi(#bCK+ltel&<3?M_!q1Nd++LD5yyTvpK(TdKO{L zc$v3iWwG@$bulXa@$`;xip4!X<~urY(7)oo7?+u`Rh;w%KW7MQ;-PiLpTFR)mD?+7 zz4#oDwWpR(Wv?1nYw6_ZQ!7vB#%`$#U(*_%VNvTGe*t8Q8e#StOnm?V002ovPDHLk FV1jmAccTCR literal 6479 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 literal 5633 zcmV+c7XImpP)g^^FaK*z7l;tIGle4gt2$m^v|b#qtGhsJ8zhwUPSh^(!A(D7xohk(!KgMoy>G z@xPE3fmy#l@f}#K?a*zz0Y7wKb1wu2J-s%#c<~H8z3M^x$&<(7$`vaQ&zhf|#FVyn z&Ew>4_m-l9f`a&8NTShbEGH1sUw`Ux-0bOg1M0S2_W;JjTKDV|&~?S?`0=kj4ubXA z!%M7{(~WWWIY?z__BJ$l25M35OwpkCDpFKb zRFptXadxxi5(}%o!cC~8%a=RQ!!CiG(vF$88 zzGA5rcR}V=_`JazegsJXDj0pr)_kN9{pN}Q%nf$EexnPnUGHLEbnaXWJoD5_Hxx`C zVD0M1-~xsmL8NfJiB~dqOc^Y>X$g`+A9@mrg#YkTwOZA^d*2rL^iM}<7ehE#*rG)9 z<4+I4$HxxA{zDC5G9|$7y<40>P<<4Jot z@AjuCLzKPoz;-zL$pN-L{Nx~8M{ylK+Q=T;)ATOjYvADF-EgD(s#|$HB%#r_cU&M- z@6JgvGE<*BYnsR_+y|dOX|)>5_J(&DjQ2m>*XR21KMn$cj8BMzZ9CtFqaPn&q1T0q zJNofKmy)^}ID$x!F+;acEy#A7`csb#PE!|vl9E5|JGg_vASg#ZYVue-ECRU;!_HtB z3Cow%GFZ(Y?1kSvwwxuO*RFNCRYl<1+RkADy40FzG%!>D{j1M%gIQ4sO4Gf!X)A)d zrKtWuZEJWNVvVDqVb3P`;N$)5@g{`)=tGNP1@3~Kcowv|@~~b!Beu4l!f*{UlX3@L z=y~sWI-S|HdX^d_nc{~A2M3FU<>tEzYki#aKucF#lDFcc zL2Ez=lI_nRh-77YZ8 zK4f@!n7g8BFhp5*?B00C@Z%qEI=CHHJg@-j7uB%Tpc&y1K+35o^rEzC&`Blj3aNxC zYADA^F)gRX-cxipLvUAa0(-N6kBX2WB=ebPrU0tRg38kV99Z-h*55L8b!23Oy^-yF z0~GBN@d%$W)IFP?+Pl^R$$w-RD88Qq$n1!uCxfN5l8yV4jND_5z_ zGNrmJR3;CjH&bZC{{E&;Zvb`UxlQAppio7+{gcPo+g~n)3+qY%Z(BDc8U}<#KO<@E z7)~yi3qjfL1WK4wHNCeJ!qBiQit}OaeZ??q>Li$ymI8C`D}^&(e*w)EC2;)9&m9YD zDs3rM%N$7+OF*Vjw)kPK@UDd(uckL+M@lgKEEk?H0n6{o!TOKoj`PnK1BRs=R&_#z zs8pxE%@^);)*DDs^gPPDA|t}#$)$5)?Zb=K?3uuWng{nc3912$sBL||DT#0u|6c{MFYaZoM zl~l?JS-s?&vJ|NxDp#11CQgbw{GQ9cz(qaSc{;FGBZFfli7z38|DHO=mF@i zrUo9MRB~I(Z;PQ5p_qT?sVV~1imIaL3~(UjqN5G`V|qMp*mH7Jorls&(^eBQw_a~>P*^&*T*!#stMTzb@pxZ$Wm+0i7mSeNhpzGx_N5{(u2w^c* zk+Gw1eU9JL%R^C7!zBHgd5}cH{_0|hREn)DTT+4%{_XWwVbi;BvgDC~(R%;rK6Zc0 zw)ODF`hRAXP8N16ouJmOTmsKNunv zBCI#x`d8SDP~P73I=r*_4Yug^#w~w<*Z$=tFpP{u1$lycX88gr&dji-M#nNmO-fDu zr7H!)xmdl*^&v($Va-T^3w7C!)AKUn-25!~Z&Z^;9*SY-$3CSaOA~jLijT#m0_9uem2K9g^sL5$*zZ|GrBRXPEtCWk} zurvzmrwHp@Z6>th`fO$j=oK;xhMlyJVx8B0E*O<%qvWx6dJ)W=G7*wZaV!NOPdfZT zBOXs0*=@?7y#2{1LG=%7xHd+uuzpdQ3dd)sLyTH($FS401TQp1q{0b09uB{xw^Sy@ z-Kx6+)#L`1NT7DOYgBw0h2TYC{zQqU&x7h8)-at>qp%$+Pl9lzqMKJ!aEK=)dQ2vh zaiIv1ZU>6RI`XIL(n)v}DFhRS7GD!*M*d+_-}%$ZK>$h!OCk++{=(8=Dc{#1#*-3N=6%P@Kr1Ie+j=T*$3wOZbxGN2p@(HJ07HYX~avoHb6hL|YI2LvXu-QpX zPd-&3Xx{k~56S02@vuU9ui-=?O7xo2!U-@VC(E%uC&3n@RrF|8a%-qKNGCs(Wb(%`b@;3*6-MD>5qh<) zuA&Jbmmo3 z^qO#$!d{8H*BboLGjg-x&vUZid|fttRh0%`SEs|d1=-MvdDdmj-cMs$=G&(yLu1ic z*gk12)X$s>_t(va=J)q{jQwAyZ8?J}d7zXqguErMa;=&x3t(#wQ9&s#qkhWkp|G~5r zxQM{o))hm;l(Dd;t_qgcR)W=f$vsd;Epi&jFk9LoAwC{T(Z}j$mNHmtanbd;2Nya> z$ts1yHbmsi-DpF{KI9Xxga0;tT+fa7zs!1B`6TSpw%d9VXl z8)oyYmi155fHM1?g-NjRz7iH@{0NY6_@ed9DTt3VLK(s$WzC&ljD@=rn1^fnqzQB= zw(y7W;69REUjQZ1p;3R19`sdpCi5qP^mR=pSV&0%Ks+p0vCsK9s*6f9yNXibnWeR` zY+e-`=Mj!6vdNX3H_+6#Lv(Z$OFRh#oI_~71xhP-Njxw} z9jTPr8}bt1cy$JRi=K35UKW^NDs_gMKv8aG(G|n71-+}OI2m59pUeDhVHK8cupQ2W za{Cotui{Sl-uru4qjOYDG+;}fpxwmOgmqrB(^I%%Bm8}9$MXO+EKqGw$?acac7A@I z^C)u~ceqwG^9~9tN3Z{_!fT* zIE3drQV&0(NQ)G9h0R1Aa1WSKVoJFeR!V($7(;002+Bs`cCH^#9WLV*s>#9^`|$P^ zH1uztodWR@T3EJd4(r!Z;z_V5m!dgNnnC{vlTTr(_|W^iVG-tGa=8p^U!26(L6M@& z$52r%1P8;e1sAWb7V@fB1S)z};89d($M1cMkW2IZF~Zps&T@ix)ga;D}o}Q;!WKw zP|{_D^v(QChznCg(Zq3Z|H9dB2-KZ<9Fs``w+ow|OX_B^D^(JlVfUV6>y8aH+T%_O zq`s6E2)_cQQoe{Mm4}4b-pP)G=EBkN1y(*Y!qu!cb%qqio4QL`yf^-19Aw>_l%rMylR&Ew)>&xAy1%u9qfGL4X^Rl?V(th2NWlBv6Q!7>JoYVOCXslG0=4iODk zYoyW`-1cv7-MInNfZebYOD<8^J}=A9#R@|qOvBtMG9rwn1vvj{#acUq6de=&%Z&E? zoG*8Ymm49$;+$oDmJ#+Mq+J+(bR}pA556K$0+T1tI*kiM(s2ya2`VQK@efjwK+$8` z>6k)r2!>9pg^9_@Kt~j6pVO+qM(0E<rsnA;H469iL}VA|yY59bc-UvTzk1Pbv{cj>!bFkPth8qT>qH zoTysBDg{}Yw)7Yye*pH~IdX3`{V^+!g&e7gR}?AC#D|_xQ3&gMEE(^~OSDYatF?k3 zE5+((H-*?Ntaxfvs_TBk{o}N1)eTnubu~O!<5?1GPnKjujJu@bn>*bd)I`^fsHOys z!fob4NGEYuY|1y;cZ^G5O3ELp9m=+YfB;q&CPmT0+~_(!9Hvq#u2Vzd#YdJoNKK_V z+4k|H$FSF;vN)frJ$aOW@1Q0=?9lAt&(*i9=`YnzHNBN)ln6zNgB6zhrsUCdii66- z7>1Xqi;U%y>rd6QIRgg)E6PZ>V53vwla);Om&l)s(kPrC&M&}2O+2VQeAwwc!>%ti zRmFsf+}#+t%to_Lq$W~UAeN9hzhP<&Jv$ZVev5hw&Pz=v5EQD(wjtg14|-z5g`k)}(ZZaH!cLEmU8=;!1A3EV z^~Trin>oeOpZ)phW&s1l6^n4>gfrrRY`gc}0r5)N-0HxnS;e5^v*cY#UNz z`%;vRDGFiXj&~y{ASe#A@#_?JGy{cdq9F{v%Odi*CV~(YzuOH75UawmVzAlePqa4W zI75ygU7)0rhg9RNOPR6S+4jOzn)S4A%Zg*lm>#2dgF^FW9b-x^30Prjs$H#A!kXoE zOi|R1O1ss!6Y-FI(xdnz%aDK|HSTKmzCisaX4}Ft3x90k%fB@Dxp$(;LUW+P9Ev5I z2nbv24w}cLQg0Y$=LCwz52vK3+p%w_Pl_}I<|dj%6neRdqkRvSAoR$iJdP}U=utT0 z$Pes9uWG4r9#=YCQUoX>icRu*d8mdn)SXb_|Yv#qWNE_Dmn8Z{ohqs1;vJE=jccS1D&6o>|3D1 zr@9!^iRT28@HN;0SwicY@~{tT2)wWs*Z+@MuD zXD|aLI`S%9Js67J%FqxSmW1u3sPh3H7Mj4Lgp=A=`wL9)-K=!hWcX86ssjhjddZ743OO@mJj>lS;w%K_ zD#%G(T^1>hGfMpe0wlv+H7Ne-lZNg+9L90OxY#h~Kj)AJignb!!k%9b*3r8$G;Ig+ zP2CutJ<&=u@S*;CEEfa@ivvUg5Cgu4_ZW14kNZ3 z6)*jLS}fjYp2A*#r+-b*-}?*-NdH%*4WxuY`HTKNU{T!)jh@5MfKO-I}OG`^PVt1oSq#Y|Xpa1{>0d!JM zQvg8b*k%9#010qNS#tmY4#WTe4#WYKD-Ig~00KElL_t(o!>!hVa)TfY24LtfAh7NI zA9qPWz|Ph{$DO^(9iJgW(3saPax?2K#s{}`1COJ{Pk}W8Bd{_P8gECz&W3RgU}Yv( z!W3}{Oc5+tY0H8gS{JY=uwf^OC!oiHPl072{*%DjSQJpE!T-#fa@|1hzrou5*W07=t(j=hU-sUBGk4R37#nSMyS?1_3toOxF9kOzylW$4q*t_7z$t zHyLqsZ1rBXGV51mTZOe_;**>n%d>gvxF7!uJf|88W_w@JarBfwq zmM!GU@-rVkfW&O^_xI1nZ#-t|cmMolQdSu0-yVtLOXKQb71CzN0=t$S}J^j79 zEKf)GuUax+@=&qJ6`1JgXkkOzn3x#z<;xf0)@?KJ)()_CTfo}Y$&Pe=^QH-|UcC%! zS1dATrjF9mr1g)l<{k=w1Ymr8d^n|2$>Fucdx*C$ex-|zjWJ#P`b)U`537v;>9qWC z&!F$S@A9^5*S;ZuOw+Pbb;+Y5eMuaVRS$)jamWz%@G6y3r`2jrMq~8d3txX>LtuJ= zVd3xeItrt!n}_Qy-`Q3zorhvJ(=@YunqAD6&X+up01<19F-A_O(}~2$XufdqOK54m z3ZMPy9Q<&ny%!L4?i?;)-RZmq=gyymZ@>K-)~&2FPfCv0KF|OS9XeEaSgA&%F@1I6 z3;3UZcH6qTJK^>Z?R|<;-vHS`>ag5)irFI~J@oW%){-mmU@<2&G(>n{9kR%3GPk0L zSlC8+YbS2JqZb(c0p)rw(nIF5{4560n&k_*IWtPQ2TB*+YxYKbH zMG8kp&!F$@0Ce;Tl3l+L2m@z!RT1|< zFh(ksN*rIw)M}Nb>DXTQ_}}fIoIcxxqtS8fIY0Zc3s9(p1(1koVoOFWB*h*#VgyfO zOFtAH9p(PaA@dy`9_G|HVd0_H!_B*KCK9useYi(h{QB)0TET*TQunG+ObaGGxf$-MW#drroPf#~bp^*fq({?jvX6Pe_y zi%{>t_ifh!e~;KBdmz9O6tPyTF*WRc2R=G~+$lo+vBnh?IvziL5I#89%$P&rgsau+ zx@!T_WyqY)2Mrtk z={$6#0WH!|k@D@ILC(J+I0qYd!pbFfaBeeCx`VNYfcfOJ4;Y*1{7_Q^kc0Wa=o~R~ z8jtQFaBQbPY;v;V$MnpH2xKEF@8QE^VE^GAOo^X6e}Y-Bj?UW*loO{9!S6pk1;oTJ}EYzqnwg68Axi;goUJ@!aF9K?He?td55YITdi8ktPSiG8g529R@Mi3g{a2XgO@pT-@WRKjgb z%jNb>D(-VI^AxDyUU}hhcAgj?t6jc$j=2#xLK|;vZh&>G>li=;RA1mQ<{aG(vB;cV zd*5ctoB$#Q(Hs)dUAx}`V`wl$YBgPQnKYVy%ZuY==vdL+s*blo8Y=;ps(Xex35_~%@9^yhnuPTkks6dsvO|De82gm~rOvJQ?|9gi}oS+KT zXz85umPn*8MUC;_9Frp55Rt&WW=y6b#UZ1yX?U7+b9_42IHi(%D=C}Jj|vUuhRXbz zm#k3+8Y3gayGX>&oYY99?W=m6^6D=P;#svY>{0b>w&s!w08gMr+ct8}$R}lb-^{DPG8)BdBu-nALNu z;Ma?5pdvR5G7}PDX3^nJ%u=4tZ#}gMZsWM|N#kT0~Ft0pxjq8E@qBCP}%l*{yb=@SOHfn?7#>B34^W?Jh)I+4-qPj z(~Vcl<-Gz>jLgjq`+CP&VxV00&0#d>K?XhQnmNdtMexjug$y9No{}_{PY91ppWBp)-Rn8dCAFqVtAB4Ejl?d@t5_8hstCbX@t;5>=(R&Me*eoRC(V@~#%F~3}xKyM>#xjW^YhW-wfT?8 z3{zzfK*Au<2s{E&V2uE-OS)91R47^sGSeY0Is)R1kx(~(1{^uIhkj?24~9Hu>%rAaYlWR{f9Y^djPtEqpfl!(0BAV0#OJb2wVY} z9&k8+v@U#Q-ej0QEgMR*CxS67m;r<#24Ld=EJaXOqtgAiSDs`3%@ZPh<2K-ky=1LY zDRBjeK%w!c0y{8-36mK+n7tlWhE_y4MJr<|&&`C{CAmPy(IaBu^(`;MJMX;?Z@%>^ zys_<7c>CQ=uoaI6RL0DNyCZY@1PDQhLNNZba3TD;U;!94dMkQcWKuoGj*9a{W=O=5 zF%A5Vt>Zn!N2gXPt<&?fp=#P>h>Hpb3MWX%oc!Q0>}c2q+jqXfj=$UZ0_vNPUi!w} z#Hu$y3OhhDUq78LP{Cu|1?eM4T5^)dv4@;EdX)1ag$G8a2qGmzkW8gH84Q@htnrW# z7XwEzkfbC!SuXJCvcltL1Fm4Awspb?*V%@?D1C?V4 zs78l>^Ms3k;}+JcKX7DHSr0hFhVj*fIkW*=Zc4JXW_mF{x4M+qYc)JtBtB3cV8M8& z8;5yhM5KDCY?wwSm0FD$3J@sYw_Rf;7jf~9ig}dwJa+03vs91O&SD{hD{}-tXKbV! zFvqnHHQ3u*r`PGMq);i=!M6wotrn&iOo7MH+B}Mzs+%_h7NHedJinS^As&N6e%LU7 zG~tnOxM>$=_L?xwd77m?owaZ*6H}?>8YRs2dLZ$8YWV`j8ex!_JyAcGJY-8kSR?}{ z%i#nL7<15aIKAA+s0hEaYd7hq-0>44|iR&=FsTjToy! zc6vyd2zwwq2VSfkZ6xjc(88Shpb@4ZAirKz1JAEn%mB(uO=e7K#S-n^e{?}RwyZt7 z{!wZ=VjFL5y#kLSa0KXDyl>3N;Xp}u*JdT^=DPgN*AN?HgaQPJ7&N;$mjPdcqZs`o zRP;`V)4#`67}#opMyt7buyGgajRs~>CS&@5fT59sxd{QE71`zHO_u`Pq9mm*<0@bL<2+--YfIxLgW&TEbmeiy~ZjkqofmOx?4(4No zhfsxt1oKpIBfo^a*lCkenRRK{_by90wBKyIhY8e?b@t=qP>{Kb;%2oz=&uZydj16rSQ6{`kh%=!N~1(XvG!>G9+D;oK+blNPP9Vb!N~X#unwI&GRrg2Q>Flv96_;37Z^wW4|Q5l&C1@Ea)OC7z9{!8 z{fZSb%6I!B)GL(Li!nw4dAy_xh(QF-M<`N4(O>Xggq}X?2>tt|3lM?Tgo?Z@%mZgY zVq7dn<$JM<;xrQ@*0_XiCe$8BYl)L#CopnfFsBj%1LbY#SxDUm9DE?oVK%imOnQu% zi>FLvR)jW5Nh!+reuU)|5(U~Qy?JUKp`*o0qIC;_*w1uR5h~WvvC**a;C3c9#15)t z5cPiHPpJngu+2nZXpjz}N@VWD6tr9hX1OT4M@l<9ECelD8u>xyV5LSq zVnnnW<1lkoX&zt|m)%46?mhTEyO)?n39%w%7p+Am97{W9>}h7eMA&oE?$JTvlFehO z2huaM93n;RA*HNQshEP+s8xWm7gN&2f|4nds1V1Oq^IkIH7BHv!#!)P6e5I%1d|0~ znLnCOqAGaAiac&I_bdWWN#>IxjY5zq zaj)JRY(WXr*#G^)P+uP%CenGGLJ7ed4V7crTc%AZlnN+7QK-nD472b%V%DtUsf-OO zrNZQiIUbRQmnj|jWQvzaEKyW}l>B;(^z9LNEv7`~Qq*rs2#<88C)`HQgkt?l?XXf_ zL;bXPZQhzX6?RQ1fUPN0Axfu*5)`o#1Rz+Yh9IR1!n8UdW>q6Nw0Y7`9$sF8`So-x zuM3a|Sc@F)05Z&mO1cwSXQQ-)khjTCOSMjjAIat-gE)7{-H63Ws6I%Q0dmt81m;ji z3GAO#%#LrS=7L6{fM^8dFNF)>64ueFxEE&#hUo|lfrjGaG{1KC`D&4UW_5s^*k>bv zkR6?oAwgryr)70MiaDX@SJ&BogYnzcapO!_yps-i#_z|(3EQT0p$e7t{qzDjfWYjT zScJzCcrQI4!j)<)&&*@h2rBTkV6pG3;zh6>*%hJIS_k<{or>7Q*N3r>KyH{&$k-R7 zGeBB=ye&kf?ldS=w&%cZHPi; zdNVDTF=j6UvsVO87=m+w%Eed`rlx{x*nQD9V>MjHW`mvS1^n}g6It2TW3ZNUQWt_SgjsDLx72SRPKpI!0`92H9C50!)4-$3yp zF%p2GLD#RRF>tQUSOs^U-VB!K-(ni9S!T}<=MyCxPg|K?D3MXy#ncL0ap_RVc+c`mH6Z!A$C zjBk1Y+t9VDmC*6b7O=dy4fq$|f?L?^L`_aF8I#1!F_A(i#tLA-3H=bE5*IvYdOK=4^VyPj6RYBON^B!)7Kp}CWjTzNCR@gID zt+F>4IKb(|P4PHxBRJUYW!;gQ+oN-Qyw$jtbqDG$5=j(S)(q8#bFa9pVR`W_Y>3*( z0Nykrje)agLZN#w$Jw^#Gnj3tFL0>xc}3JzKySTs!&b030CH^3^xGJF;m^a*M(GRE9^&x zD3uoW;Q2LbY!ZRP*yGq>V@_39ebgvYtiHlpB%=ErYhbOt-!*8yy`8SYv}HsZGwJwp zICs)H4kcP*+v5O-Hb&NqbjII`YEc<4XI82MMTuC`i3*uU7XozkSHDFEQA1tkdhEcs zv%{f~?^(mq93=+F`qJC*!&9$ALq;+GqJw?NIJaVs*!bT*C7%-b~gXG_kGNp|P{taUevPBT9I~%sx78c}^m&_002K%9VtU@JxgBU~Wh2FCU z0*v5vAjqV%g!#h)0(cM3Uc{5SLz0U;rU?5Ba~)a-q1urE)uq z{#;yZLxp`8156XfU(DKI7Et0j$dlHS^|?k7u8~m&myu0>!TFIYO|SV_26msQT%7C@ zt~vY&?Qk+=6pEh-6>T@R*;-KS_@<0f3yNNMgc9?;o}3;NFuwl2ek>0|i7Hx$jz&Z9 zJ!^z3H5OF5`{uRIB|}MTjt~GCEJmnFWWw`K=!+oY-EO) zRM?DbS9yPH;2aqSq_Wq>O_q5}Jo}yR;jW+l7}eMDU%AIMCHrIZ-TLFY0kR;dtT_}b z4oyAtV(FTcdVibhYYj5fC{`T#GU}h0KMt<807*qoM6N<$f_F^l A1poj5 diff --git a/public/images/pokemon/back/shiny/676-kabuki.json b/public/images/pokemon/back/shiny/676-kabuki.json index 140e74be3b3..87bcba2e93c 100644 --- a/public/images/pokemon/back/shiny/676-kabuki.json +++ b/public/images/pokemon/back/shiny/676-kabuki.json @@ -4,30 +4,30 @@ "image": "676-kabuki.png", "format": "RGBA8888", "size": { - "w": 71, - "h": 71 + "w": 65, + "h": 65 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 55, - "h": 71 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 71 + "x": 23, + "y": 15, + "w": 49, + "h": 65 }, "frame": { "x": 0, "y": 0, - "w": 55, - "h": 71 + "w": 49, + "h": 65 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5bd5ad9678c59b2b1d85a6af103ba1ba:2f6c7f2792f64728b478333fc2c65138:c3cad56aa65d2ee971ceebc435a14ee6$" + "smartupdate": "$TexturePacker:SmartUpdate:517d96cd6baa5b7616a51e8c4fed7a55:0a0f239ab3df60459410fab5eba8a4e6:c3cad56aa65d2ee971ceebc435a14ee6$" } } diff --git a/public/images/pokemon/back/shiny/676-kabuki.png b/public/images/pokemon/back/shiny/676-kabuki.png index bbb1a776ece3c9e7546bc22181b7f6e73eff4ab9..e81aada06bd75bb487859732910ce14a27784d2d 100644 GIT binary patch literal 731 zcmV<10wn#3P)K(vG*K#lm{gsvx$Up=qBi$r%T=5xK6Fb>w+01t%#;9(~|AgsK@{Vjq33Sn2> zAt2V*u(r}(_0F6VLe8P}*kobc?E9ukqI#5KGSe9cnk*!e;t^_b zjM;Pqj-+~|xs}6mTEf92w<;~oPgy7qdyh#=&91%EJGIBFNN#w{@(1>I8Vb+7IpP2S N002ovPDHLkV1iB}DK-EA literal 6054 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 N002ovPDHLkV1k7?OHu#; diff --git a/public/images/pokemon/back/shiny/676-matron.json b/public/images/pokemon/back/shiny/676-matron.json index 6bf6d37dd2a..b24180fa85e 100644 --- a/public/images/pokemon/back/shiny/676-matron.json +++ b/public/images/pokemon/back/shiny/676-matron.json @@ -4,30 +4,30 @@ "image": "676-matron.png", "format": "RGBA8888", "size": { - "w": 68, - "h": 68 + "w": 62, + "h": 62 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 53, - "h": 68 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 68 + "x": 26, + "y": 18, + "w": 47, + "h": 62 }, "frame": { "x": 0, "y": 0, - "w": 53, - "h": 68 + "w": 47, + "h": 62 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:262f28877dc9ef9e7920282c4b36b8dd:18b55adc9c377d1b24d6b236e1f39177:020798583d07c479020bb0af34cf8bb6$" + "smartupdate": "$TexturePacker:SmartUpdate:6c9b45763eb4fedb5ec7099762f23606:884e9813686e91cf2a2cd9f51652a875:020798583d07c479020bb0af34cf8bb6$" } } diff --git a/public/images/pokemon/back/shiny/676-matron.png b/public/images/pokemon/back/shiny/676-matron.png index 1867cf457aa92127cb7ad11746bfc7886b02e254..0324b0baf946ffc8b80c9fde16970d0c4170e441 100644 GIT binary patch literal 734 zcmV<40wMj0P)|_qe-Mfhn5Ne0004WQchCHEkvf$a9|JC2d)sGySMQH(Hq*WNMs$ zgMML~-vTXjO^_II0N_EY_($P7dZuqt> z;>t^_ly7n4Lod7hhZIDs%;C({<>V_IHH;s*kMWB>`G1BFZ<^K}ZtXhY^cj2>x9(!$ zVCuGn+j5z8`S_19gQtu3R~~+d)cjv8p{h%()`dZQop< zJ<;LObY0Zp@ciRsdN(wDgSZy5;%9ia|Mf3N7q!byJVk0eF`;j`7U8|a!yD#-AGgM} z;`;dhMxP367bR^Yse9l;hil?lhJDZUfzuMc@AO8;H8)G|aejJ35@NemoWk=zaQRJ~ zzSSz(H^=Bb4DAaIeLE`ksmJDTh%?LDm^W&^gf{*>!c!ua$xJMbLL5Hxq~TMrO{=U+ z^8WS32u~e9L@)kYjGL#=!v+%mtY+q QegFUf07*qoM6N<$f*X}vu>b%7 literal 6245 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 diff --git a/public/images/pokemon/back/shiny/676-pharaoh.json b/public/images/pokemon/back/shiny/676-pharaoh.json index da483501127..9b18b969754 100644 --- a/public/images/pokemon/back/shiny/676-pharaoh.json +++ b/public/images/pokemon/back/shiny/676-pharaoh.json @@ -4,30 +4,30 @@ "image": "676-pharaoh.png", "format": "RGBA8888", "size": { - "w": 70, - "h": 70 + "w": 64, + "h": 64 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 53, - "h": 70 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 53, - "h": 70 + "x": 25, + "y": 16, + "w": 47, + "h": 64 }, "frame": { "x": 0, "y": 0, - "w": 53, - "h": 70 + "w": 47, + "h": 64 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a5d56fc494b2194036a8d6d1d876a296:6260eeb9aa48a1047c8ec12842ac28c6:904b7ab6f57249c96beea4b5f72deb53$" + "smartupdate": "$TexturePacker:SmartUpdate:5143f43786377eae745a9355e5e1cc24:158aa35a349be4cf7c56820170aa4546:904b7ab6f57249c96beea4b5f72deb53$" } } diff --git a/public/images/pokemon/back/shiny/676-pharaoh.png b/public/images/pokemon/back/shiny/676-pharaoh.png index 4c139a498d2c609773870c90ae1e2e3330ec707c..563c2f93e21d256887bfa49aa8d5f689ffe7716b 100644 GIT binary patch literal 726 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 diff --git a/public/images/pokemon/back/shiny/676-star.json b/public/images/pokemon/back/shiny/676-star.json index 1ef3e6a6111..6ca9f42e5c3 100644 --- a/public/images/pokemon/back/shiny/676-star.json +++ b/public/images/pokemon/back/shiny/676-star.json @@ -4,30 +4,30 @@ "image": "676-star.png", "format": "RGBA8888", "size": { - "w": 72, - "h": 72 + "w": 66, + "h": 66 }, - "scale": 1, + "scale": 0.333, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 54, - "h": 72 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 54, - "h": 72 + "x": 24, + "y": 14, + "w": 48, + "h": 66 }, "frame": { "x": 0, "y": 0, - "w": 54, - "h": 72 + "w": 48, + "h": 66 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6be66775c485bf44d69f7cd44e346324:c9e3d3db02b6ea0720a20b9bbd159d79:dd7fedf66b493b0bbdef5d25e0041dd8$" + "smartupdate": "$TexturePacker:SmartUpdate:d9af00245cb6498c9dec7508ed563454:12f19bad174b64678e8b8be8455f2b5a:dd7fedf66b493b0bbdef5d25e0041dd8$" } } diff --git a/public/images/pokemon/back/shiny/676-star.png b/public/images/pokemon/back/shiny/676-star.png index 0ad915156315497a2fa7336a793ba6df71c704be..0f388480b4f99795ab095fb832db8d6b180a501f 100644 GIT binary patch literal 734 zcmV<40wMj0P)fKOq|#OG`^PVt1oSq))-n&;S4c0d!JM zQvg8b*k%9#010qNS#tmY4#WTe4#WYKD-Ig~00K%$L_t(o!==`VlENSi08kr91*-f1 zpSwA@inWH8ads@TeG@_mJ|5pj;4-m1<8zi6geA&S?gUYYnOqEnZZM|=>}4765fZ` zB50=ZfMFwYi-Wo_?{O}OwIehrYul{LsEroJ2{X}$Q3yo)La-4qPR!+k`~AVvtW{C^ zJ@gZ%{=X-GbkSneh49R-;@-eLd!hncwexsbha_$;40KAFG2L{EjHC Q;s5{u07*qoM6N<$g8SD$PXGV_ literal 6351 zcmV;=7%=CFP)``AYe(dX0J&$Wy_OIkG-JSdrflp zk9+^vy~!q;nAn&BtjvhJd!J|L-S_>?oN;Kmd;ic(l6jurb7q8dX3l56Z~x(l5l`W< zV0Hz^ABS6xzxRuJ`1ts6{E=VuIw^kAu+V;Su#%(0IsS-CfJ^AG1Sv7rpHC}D`{jWm z#cX-0k=t;Q$9S!A0+3K-+g=czv1Of|VzdNtC?3V$GHz|Aw zwOZevZ?Aq0w{IJv({Ka2yF20f^>1Ot^9xOj7u5DGshe#mpPH=+*U3C8OY&TP_Mixk zx3{+)kVd01T)y%Z{NsNgSswQFg83n>2Vm^FX@hmug0LPvx1hGOy0lhB8N*G<&th;A<0h%lgl;aFT?wm~ErQeM4kMu3&}+KKAn}V}4FWa4)=*PcsHW?* ztX;5u3K>TUJrxQYq~!Ok|U@d1ohqbSI|!_Fk~c5 zP{)qfGc_%*pU;&|$^7X-BJ~95bsYK|JDgC2^VL^hz@xuCwD4v{>bZNrhpl_}d02x% znGn?9{{9edbzVa?E$FAFw&s-_pF;ek9s+@Y|Ih-JN@e)+uYZBQMRLe76+b#O?q`P%iXaN*PA49u}p?YQ>Yj*p+8Jo6Y7K_NI4>2BP(3Tsw8 z$Cd$8gGYaVX!-8D%dqH~n$Eb1!2)`dIW?u+Pf|T{x!kaA*L!gK{2@4c(hB1E>HR}4 z`WgKW4+#~=)Y96tf}Ay6!+dGYip6l}P8TY%3-kd2CJK!7MlzZ7r=uWWU%T&7>-7QV z{fBliGjfD8+;dt4>DbK;xVYGd zJ_3(WdZW;YNnBWvKj+k{ambooctA>((sbbP4(5oDo%~@iJRAlHf$rM-Ap=Au3Hc*F z+ipNV)P>Ia>UURQuFj{5B_>z!LcQ?rxVhZ`3f=(2KAt%p(~()eoBrX9QA zXa2`gMLz_GVD8!f35*{f0pDJ|%)s!G?9Sb8yiNxmyQoxwuP=WIzP`SlWMKnpKIc== z<_)XZhf7P2Q(<&5JUf5JqxrKdEX(Sjf%cBAaOl|XejtW}M1c0;@9T6rxOwY3bJUbK zQ8G!1<+)48;Lg2nmNFPI+0<&ac1P{hfb2PsTGhRK-$!ux_#U>}JGQ~n`gyQ)@jTdn zaGTv(4}`@38~uFij(3@YZr-}a{0{*l1>L@D#0Ym7D3|&>I_)pM{L4>AL64I{W%t&d z@50%ONB+s*JgH~jflpx7vN}9&9TF0QbFKr`vkk(+Lt)3B4^c7QOgXIFKwm`Wb>zfe zIFBm&;>$lnczBqRvUGam0DS=G)PNj9y9yIU<0m`*NWRCyLm(&whle!KC-LUB7yXY; z=g-XSJSLVsm=6&sN+Mr)ZVppr$B~^dc5Ij#-%CSp=%@8{p_Yncuy~?3oK&)weugnDr)+7LGd4E^ytx?QmN#_yc!|hBy*#0oFEVoS_H=tOn(#Gil!3^ zA8&t$!6j(qlcHmym_OTv{w>5`3juPOSt%AV1-WsY5Z{y*`yBl7iG#_U`68E4v|1Pz zHACpHpThnvp}1j4Q1)+5;KeD`Y6eLulZ2vAdKeU>2i|d0mQ0X_%BFdhQE3txH39w5 z2e2KLGj?1!y!*l1uw(B>5FQc)AEm{@)%Xbzq4U2f3k?a8$Q7MpnW9G|miV${Rpt9+ z{SklD2uFa=yHYD!x+i7VtF`_G9?`kay9@-yFE{+=_I~n~ZKM;eU9xD_&3QA+fmVIp zOjy2Te!p-(Y%X;EAcN$Orl#}vgX*#=5U39TjYjlzIl48mfruH%v5P`J5`)@WKL^UXTTuQBhD+ zln2jLm%_~Ae3&!62ukxaEpnx*Pb8CfN~BWl6IBooCb77I-F#5QbYV(GOK;<;>(F%e z7OXz}jU{vDrbjkVYOSu&GdOC7Hz_S+#zuB-U@+f78REmDd2kys?^6nJ@(FY@s6 z@NjuzK8S}CmARNpui3!fC_H+mI1aUP_Kiv zb+h0_jCw7L=R!e3JWR_;vnUnvM-s8P)7!^~f$- z$i9p)ozCT{0#wwEV4W7;cxy9!@bT~MVV`vxu^mFMKic{S`0XEF!x~G& z%xlw98=$2N(9GsRVM4rVl0Mj*u9+Pj{dAH-{tZT9^byIFmy=s}LgU4re>R=#w8FsU zcx*anfQB=jkp22uNUUfzB~Mwdu$osRmsIPmMw*GZ$s2Lgctm z`29P-fe#S|FG9xa=OFbpTrVGmq_QSMLdraW zEdtsBVdBP)ZXRAjk&lldJ7yAw>r99U31p=MDd)Y9e#^l8@%^`eN)yVYgM$O@{)gb$ z0WIziC^shN=@q9G8WsN5S_+dbmBcr|7~i@Jvfla(GJkWyw$8Ja_WA`#ef>P7zj4Wu z_Uc(kuHI7_$>#MQb7;)_>x$0pBWDvHT_&V_)-<<+|+#?SOf$g9`Hm#i_R zl&yxUqR9v-9nA~@VYH&$sDr@l{3C=$L_&PgGEn>KVD*BTb_Y$1Os&{cJ6r}&RjeU+cDqK2Zw-49|G~~ z_d@zBCn33F9pqFsLF3|u7`;e6^P#1F0XprukQbL=iVg}FTAg(4)9wH8ki3Ng1_)mW zMKVQi%I0H`v}wOZqS2XUN|j|AI@+wLNRv(`SCZQr<>KOlFvsALtA6>vIP0V#U6oYT zW=wtQ2&De{6q@CENZx!L;+nQYO>Z(Mm#$^zoLi3f$0yd_HC-q?os zL9PqALH8{Yi|&?VT{I;r(NvU@&Z1YipOz(r#CF6;4^PS#L~@lOd3`&izxkOZ{moAy zWz&8LkC=dPCSabkm9<}WsGOLV-H`qE=dcz7fHi6wSt82Ph@)2_y}A{$YuDrRZ`sf3 z-%=}EdqO5u3LW#VA4N$*ftLWEcZuby9)ZwDMrx5rB&MpVxzJcQ8}j2~yHpaH(#_pn zi6PvGt4|@9^~$9ZvrHz3nBtX?j0%ct-3?>MPlR2&-(||7x{Mn60l}e=u%R6T!6l}g zw$FO{O?&Kt8kHy0OgYcz5b zVhv;{!%*E?&yqI4V$q~h$W1He)v&~F&BB?`fU6RVN{vbl3XK*NDh)&g>tPRe0uLSA zV{gHd|557^(#8(RdE){!9RChlFIjUf9uz^M*L-=CGjH?5@YvE|Hjn@H=Ui}P&X3oJ zcFc&S5()E5t|Q&mTD8jDjQwE@yB4aCN-=EDDk)@Z=ClHsT{;<>F(lLPG-4m92@}4i zXXn7wlw^pV7=aG@1MK-60vamn0|Oyu%2G-=A!GK-&~V}!LNVGCQyv(tw$Jav()RxW znNn@wCmHw!az82yl?! zE@Lk^u~b+wuNtB!jI*{t5Yjem$*TPWAqiEK_8+HN0-A#+=a`^2qVJ)0%bJtdA>-u^ zAd?^IOtUch5NKM~zO$#Nw_GYUQR{)=G@~-e)TmEG%`AQqC{hz;zkDu3KuJ}R;lZq( zaqiMlmILWSLLnCYR0bxcEZ@SFVM|KcLi5Xh;}Rs-tOtowYaZj_&Z3w|p>dv3kI-SK zD#9|A=4N0dOXvrO6hzAr5-F(-l|%~StMZ10wGfXzXWH064x4;Y5GIKf?lUmrrT^w4 z%hvft$!P*6r}0hO0DI2{7rS{0oCA(y=*R5H8~u@KdSMoWQR$!@9**O22DV123MViG ziH>A?*!Y6Pm`E%ycCfL|_8spqNHObnK_bFPeDR=l5tz2UpbZ`iVui{iR{Jyc;B!u@ z)jO|(C>NreA4)lntJ=ZT+OTO)jjw9-QB<&Qw{4A~qV+U3>UZo$C5459N~;5nP7l7g zlv;lX9y<>H@XqU?Rw?XrcyEEgd8VlJEy-;AenyQMqsCmvObVJ&oHr~W{xvyligYzo z^Pm=i)*`IZ+;o^UKAiQZDcsxp(+F!fwq^J2{}|eFR84C?=1Y4p<6el)9rqq#^x}kr zRqaHxcQh|U2^O0(Y!C>*Kq!L%#l@m(av2<&PD}_3X6+8XtH^_*hS}=ni)^DG>y{bX ztU!ZCUtcwinwfb~z;G%!gZ)o7GcUUN!o>bgnv^mSP#yv*%g=-gOa+RujvE^kfQ|dz zZ2r}O;hsj(9hei*aB%^Sc_>e!DJub@`94iql}d#@_i-@y5zgp;daeG)3ZfEW<;KO> zl{A#2#?~lMYCv$Y=?)R0L2P15fGCO)ocVJq!QW2{a+wrp5=&{oK^!s?9Ng!KyEr(u zi$kqe;doo&Tne)LpV2n|LxAw+X^}5dD-_Ih2paE?ctDgu=ElYtrJh1XczBQkx9b`! zOA8@1G#F@ZPm|W|yFUPZfIm#lN`VRlUW^gW-_I8i25rtu=(_0jUY00Uy;I;gG7R!Id2~NzGp~H7O47TWOw>nasw@IDusyL@HP4e2RE8 zF?TA*_sNKiH2KNo?A*wZ5EmLJIaT&-ojD0z9-EiQRFa#9s>osh=!UF-q^#HMs32xu z=$NyxEJ+L-Cv>z}94InBM(3nXm;h3-m?>vADvPpnN+|gWMr=?hI~T9x;xush2W>`B zsI}H+{umE6b_`8YnF7Cc`o`1Qw@oIdQmUY=AP1_83eZVE21Kfm%VY*uH+Kg>Oo6#neJH!CZF3M9LAO3H-t(wPeUaV z;PQe@i$X4cfMtn=idugDg$+4#>i7xlTvQVGR3{k!rfIPw-jzTkmKtIT>LIzb36e@0 z@z@OXTA}oX#M0G}hJ9ozFjIeZ9LLa2Sc4S;nW7kbM|@~zD)jJFp$d&6v5Zt`DM4q9 zDtQp*tBI*B%zUs0Yc#C>EmQ#K$Hf_NKqzn=5IUu4VOv3sYBDDjp-M^{Q7sMZ7(Zn> zNK}5AB=VU3HPe1}fQ>uK;K0*(>bM_qLro!tOWAYb6Lh)*dE+7@^AZ2`n zMXvIFAW^CV1T5kpky5Xu!+HEQl;7xUt-yzfD;n1Sj zIQs&*e~2AWHcnfq$<=(J3sxWh9{a}YO`#K~ix?o65#C~n+(iBh)rWxALTup@Q2B>J z?6g&o{^~hMdxKPX9#V0-k%nWY)anh!H*4{Yy>(i2$Kfw*En``v|#2rZSN^5hUh&@aANi0Gvkb zqmd5Y+*vyyeq=+yU_USdbo26ycY9i%zvSIrl47|kq|S_3wFq@xUGf&5oFxr z#{kiuNT*SdSi%Fc-qcWl5;wN99&#E}z*+X~H`;cC5G30T8iK}^3aw6hq>=}eFm;7h zLAXJJuF($=j(2DmTlU<|3{XmWlXXZ~vyqFRvW#;!AH>XJkcpw$$<+Q3U(pO{6yDK? zI08Ziu$x2`Jq#S1L(bL%eUSZHw8-(x)Vd+AVPG4z===tL1{PWKIA?_HR}MjOUKUpBA_HzQ6WXptN;2Rz`tTYi$7|52 zCmqc!_w7$%u=_6f;k+(?e2KQRzcUgXAc-mb3hp155b_YDOa zD33|rj9c(<143f;2FSo|GMP9TP1)FP!7Y7{BqEVPYU}4nWil6cS67by@MPF)RISG? zeaC1g$e{D-&%T|mNk8zv)N(~wSPEDHdJ5FIampZ;EBmBszh3k!rljeuy>Z2>`mjbb zxVx~w&1Z3n^4j)7 zA&o>Ifm`r|X}R^n#FW`W57&_b{)PtbejolC?!ts=4Z^sTxxz6nZo{5G!kHh#DQl?X z|L1oGws(K%e5Zd5R)dhE@Jl%g)>$murPppY1q^j#!(9VSj9usdI{#@u{sl{j_W1Rs R`hWlc002ovPDHLkV1nNWLT~^8 diff --git a/public/images/pokemon/back/shiny/678.json b/public/images/pokemon/back/shiny/678.json index 98341ac8e5c..14101a5b062 100644 --- a/public/images/pokemon/back/shiny/678.json +++ b/public/images/pokemon/back/shiny/678.json @@ -4,219 +4,30 @@ "image": "678.png", "format": "RGBA8888", "size": { - "w": 157, - "h": 157 + "w": 55, + "h": 55 }, - "scale": 1, + "scale": 0.333, "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 25, - "y": 16, - "w": 54, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 54, - "h": 60 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 25, - "y": 16, - "w": 54, - "h": 60 - }, - "frame": { - "x": 0, - "y": 0, - "w": 54, - "h": 60 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 25, - "y": 15, - "w": 53, - "h": 61 - }, - "frame": { - "x": 54, - "y": 0, - "w": 53, - "h": 61 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 25, - "y": 15, - "w": 53, - "h": 61 - }, - "frame": { - "x": 54, - "y": 0, - "w": 53, - "h": 61 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 24, - "y": 15, - "w": 52, - "h": 61 - }, - "frame": { - "x": 0, - "y": 60, - "w": 52, - "h": 61 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 24, - "y": 15, - "w": 52, - "h": 61 - }, - "frame": { - "x": 0, - "y": 60, - "w": 52, - "h": 61 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 26, - "y": 16, - "w": 54, - "h": 60 - }, - "frame": { - "x": 52, - "y": 61, - "w": 54, - "h": 60 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 24, - "y": 17, - "w": 51, - "h": 59 - }, - "frame": { - "x": 106, - "y": 61, - "w": 51, - "h": 59 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 24, - "y": 17, - "w": 51, - "h": 59 - }, - "frame": { - "x": 106, - "y": 61, - "w": 51, - "h": 59 - } - }, { "filename": "0001.png", "rotated": false, - "trimmed": true, + "trimmed": false, "sourceSize": { "w": 96, "h": 96 }, "spriteSourceSize": { - "x": 23, - "y": 19, - "w": 50, - "h": 57 + "x": 25, + "y": 20, + "w": 46, + "h": 55 }, "frame": { - "x": 107, + "x": 0, "y": 0, - "w": 50, - "h": 57 + "w": 46, + "h": 55 } } ] @@ -225,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ab77ad452685ab677c7e5e70a386e880:27bb9b07316cb5c401e67e15e2b0f06a:887aa14e4a3a3e9141c6ae460f968db1$" + "smartupdate": "$TexturePacker:SmartUpdate:7b46b2656390e5ddac94370837e7cdaa:7f76286d5acb65066eff0c2532fa7fea:887aa14e4a3a3e9141c6ae460f968db1$" } } diff --git a/public/images/pokemon/back/shiny/678.png b/public/images/pokemon/back/shiny/678.png index 7bb6cfc0b88f9261918ad421ebc9a284b907fcbe..3e9d72b066e517dc6cca5773b73f8d49464015b3 100644 GIT binary patch literal 589 zcmV-T0)~3x|BnwUTHHY0dATfU`-%ffcU^8FUW>(? zoItpF!EWHx<&f|6B!WPS&ylb!AVR6NMvzEORLEQ@F(f@)WY?5B{4{j9;?ibXKuh!37#dXr!v;w$u(`k33IMxP&Vuxq;1$CRa<(8!S?QDC)<2s z$W~4v8Jx{xmks(<^o3hC72|cVbrDnepK!X-ba=D|$y}!HyH@>=vZ5JHXU7AfCX#X{ z4(@8@I&sE8PQ$442?PBDkgW8ljZR!+%sk?Kx|r!={dnC3DJ%kal{mzB`0-#+09+7T znz3l$GHA1#^Fv`Q8BRe+={)=n=NzWJ*`03d1L~1VOQze^G)!O6#&GVmdTpa7>CLS6 zY~ot^EHOA$LN+Rm8>9vsd+G-x7P*SlJ9^ooF-1&KPd{JvJ6^B5bT*tmvM!^Lxhtn?>owe9T zZt_3`&Oi&htOHNs`t?{=Fn0$5aqd{VdhM={_o=%Nmh~HRYIt{-gEwvHF8smyiv8sF bKl1+ofld!PyrG2m00000NkvXXu0mjf_lXI< literal 1862 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 Y0WC-xL!z(8IsgCw07*qoM6N<$g7GwnWB>pF literal 6044 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 WdM1KIqEP)q_yAsZQ^Nu%R5#k**Ui~ z$KZ&`Tka5W%LqL-Z(DZSTt?I_D%^mKZ37)l=c=)Wh_ThjLp2tZiul&{896OwGLYWaE97D+Ng@qlWoQ8thV+KY>j`qTq&X2QyI?~GCBXzDCA!aK zQ0SHkL+gBfcgIvxm_yu%^hyd-z0r6_GR1^p01u@gS`8qjtYsw6A+Bs*D25=kD7l)Q z7m|JvAEzvo&_qJ5B3H||?dna@O(VV_6AE-EK2A$Z0d>c(AZ|GJsnTWQVP#Z02O5#* zHbZzf789vGD!p9h84wO*72(rGlotgx6C(2LDFcoZ zQYi(raW_Kahnc%Xn8m1l^DMJ0_0rvW)H zP7e)jYRIirczU?9HzYqm5W2H~7i#*YRivd-5wEiZcaYwg?vRY@E0R)b$hAVZ7o$Vu zS4zzwscbl+)$Kd+;aI6ObySkGG__4-AJsz%BYG`OB$D_>5CcP-V-BG(P5eJZZs*Sw kcu3&WwS_+kms=R~2Z>P}qpZ>5Q2+n{07*qoM6N<$f-T}+761SM literal 5792 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 literal 5904 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 diff --git a/public/images/pokemon/shiny/676-la-reine.json b/public/images/pokemon/shiny/676-la-reine.json index dc3c4d596a1..24299b06187 100644 --- a/public/images/pokemon/shiny/676-la-reine.json +++ b/public/images/pokemon/shiny/676-la-reine.json @@ -4,30 +4,30 @@ "image": "676-la-reine.png", "format": "RGBA8888", "size": { - "w": 69, - "h": 69 + "w": 63, + "h": 63 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 55, - "h": 69 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 69 + "x": 23, + "y": 17, + "w": 49, + "h": 63 }, "frame": { "x": 0, "y": 0, - "w": 55, - "h": 69 + "w": 49, + "h": 63 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6ba780e3e4c772966f8fa209410a9370:c56ae957d7acb10c7373b842af3a8786:b99821e87dffda3297dd25a224a9029f$" + "smartupdate": "$TexturePacker:SmartUpdate:1982df9d4acf87f005bb76829bd78a65:e3590ee437367a91742856b3887339a8:b99821e87dffda3297dd25a224a9029f$" } } diff --git a/public/images/pokemon/shiny/676-la-reine.png b/public/images/pokemon/shiny/676-la-reine.png index 1ca19430e66a4b3f28515b80f58350663afc5c6e..7eed3ef20a2cfb5beaacaac1ca86cf261001213d 100644 GIT binary patch literal 711 zcmV;&0yzDNP)|_qe-O1ZpBJ6J9Yp700DGTPE!Ct z=GbNc000SaNLh0L01m_e01m_fl`9S#0006uNklBQ(z>3IYxe%L0Af&^CAGn>2V2wM1jIvp!}fz62d}a3puOxKr~W;Ca}C9 zU&^c67;pINC8@BT58;3{e_nsqoGU+o>$0oZ&u?BclB}ID6g<*e4V1)&_HGJ}m+;$< zp4F~n$mcwBX|%HwgjjM9=OqD0+}mu%DIdiwd-R!rH-5rP#lUz=U!pL|C+FL}gEt<} z_@w-N$Hz8r1+Pwik{#fHKky~4+fT}4Y3{!+f7%tW z__cS-A(-G3vyJKsJ?-OCf`5IHv!=N=YYV0-wAZ{IPipS zfiHP?4^IWmk3V=uX9}S&2+{Iak2}2-ivaU&3!2%esDrj#E5bKNsQd0;6kHRR)2Gdw zfFA7s{G~wgJn$*!ESLS>6|bH!UYsj07v%$2x#HbZad{6*l}9c&QW3b|;k@AT7Mkk* t)m-If1iGcPCgryStKRGVZ=~OO`UCg1753O=FmM0>002ovPDHLkV1n4hM>zlh literal 5323 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 diff --git a/public/images/pokemon/shiny/676-matron.json b/public/images/pokemon/shiny/676-matron.json index fac13c6551f..def3de9d349 100644 --- a/public/images/pokemon/shiny/676-matron.json +++ b/public/images/pokemon/shiny/676-matron.json @@ -4,30 +4,30 @@ "image": "676-matron.png", "format": "RGBA8888", "size": { - "w": 68, - "h": 68 + "w": 62, + "h": 62 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 52, - "h": 68 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 52, - "h": 68 + "x": 23, + "y": 18, + "w": 46, + "h": 62 }, "frame": { "x": 0, "y": 0, - "w": 52, - "h": 68 + "w": 46, + "h": 62 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:89ab717076c514df8295db07981b18e9:72a9977db421d061829c639e3b50a617:020798583d07c479020bb0af34cf8bb6$" + "smartupdate": "$TexturePacker:SmartUpdate:e2bcb6e27807980dfb68c17e65a7e8bd:d2409a3631a4a2263717bf5aa7e273b2:020798583d07c479020bb0af34cf8bb6$" } } diff --git a/public/images/pokemon/shiny/676-matron.png b/public/images/pokemon/shiny/676-matron.png index 0ea64fcd55ef336b220994711c6a7e684d5cfb98..14e31ce77b71d18da23ed7ce12c978f3ed18303a 100644 GIT binary patch literal 782 zcmV+p1M&QcP)i_@%0d!JM zQvg8b*k%9#010qNS#tmY4#WTe4#WYKD-Ig~00MeRL_t(Y$E}v_cH|%khR3`b)J*sO zFSiJ2%y#O>p5;g9H1Po>`oing*(vt=HzPX4#KW!|BJcfS28f#t+7)a30m);Jb}sb% zav>_+g+CC&$__}(8}5C0;uYeWX?H*@%;5CW=kGBnIqxlnl}fPjxfF0 zpv8e~|Hk)(?$lCO{Mg4sNR58raw+FDeZ)x>Vd&sA`X}CW%wbG>#_4bTrU$&@MRssJ z`E|VLT#7xdNKe~e*PAb}Re9+-zrG@o4vW{W+5?}VN zIJDUqzk~a7LZn2%9$uunEa%w>G8O6Hf@5j(?BO13?vr=l|EX#lA3oA6xXeQB)bc@0 zspT}6PVFzXze}sa8Nyod%2&Mne_faIYYhw6Cw#eE%KC1voBSud@{73frd7^eZkY!! zcIQ(m%XwzF2py&)nk!n(#jdgR_WAOhFi;GkNpM!G;4Bt8+|O`T3Y86wg&N)u)lM5y zhZo)WfiDCf;56jvfoo6UTazkI!|<}Oqa{{p`3c_M4RBc~IIpeA^TQNR)OSNV$r>sX zR`)urVc8KTC_h0c=hif)YqY6#xJL M07*qoM6N<$f__hZ1ONa4 literal 5930 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 M07*qoM6N<$f-j3?wEzGB diff --git a/public/images/pokemon/shiny/676-pharaoh.json b/public/images/pokemon/shiny/676-pharaoh.json index 6acf62a9f31..0cb4f035c81 100644 --- a/public/images/pokemon/shiny/676-pharaoh.json +++ b/public/images/pokemon/shiny/676-pharaoh.json @@ -4,30 +4,30 @@ "image": "676-pharaoh.png", "format": "RGBA8888", "size": { - "w": 69, - "h": 69 + "w": 63, + "h": 63 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 52, - "h": 69 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 52, - "h": 69 + "x": 25, + "y": 17, + "w": 46, + "h": 63 }, "frame": { "x": 0, "y": 0, - "w": 52, - "h": 69 + "w": 46, + "h": 63 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:85c709f8538d07088a17e53a7c85afa0:623b4bc6698ef1a984b6bad42e68115b:904b7ab6f57249c96beea4b5f72deb53$" + "smartupdate": "$TexturePacker:SmartUpdate:bdf2959fe7e2556fe6d031d7de04fc6c:fbff7f59a6ed25ee3eef955cbb3b9a56:904b7ab6f57249c96beea4b5f72deb53$" } } diff --git a/public/images/pokemon/shiny/676-pharaoh.png b/public/images/pokemon/shiny/676-pharaoh.png index d3019440c8aed5f57e883752cb544dbfefd66f75..32b78156f7dd8172e41c7a826f1c6f55bfb2c3d8 100644 GIT binary patch literal 768 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 diff --git a/public/images/pokemon/shiny/676-star.json b/public/images/pokemon/shiny/676-star.json index 0686d348789..db4d10dde76 100644 --- a/public/images/pokemon/shiny/676-star.json +++ b/public/images/pokemon/shiny/676-star.json @@ -4,30 +4,30 @@ "image": "676-star.png", "format": "RGBA8888", "size": { - "w": 72, - "h": 72 + "w": 66, + "h": 66 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, "trimmed": false, "sourceSize": { - "w": 56, - "h": 72 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 72 + "x": 24, + "y": 14, + "w": 50, + "h": 66 }, "frame": { "x": 0, "y": 0, - "w": 56, - "h": 72 + "w": 50, + "h": 66 } } ] @@ -36,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:56c2df4ee634b690a816b79120bc3600:d7eefc05e299310d05d389e05997e449:dd7fedf66b493b0bbdef5d25e0041dd8$" + "smartupdate": "$TexturePacker:SmartUpdate:a3f92eef83bcae7716ee78c669738785:156a85da733d2e878a00be0efc1c4d38:dd7fedf66b493b0bbdef5d25e0041dd8$" } } diff --git a/public/images/pokemon/shiny/676-star.png b/public/images/pokemon/shiny/676-star.png index de93346cb74470652d0e4f18ee366cec99ba0f7f..d7a327566b99e2383dcdcf10337449fe137a591e 100644 GIT binary patch literal 838 zcmV-M1G)T(P)fKR04`qe-O1ZpA`}Pmurs00DGTPE!Ct z=GbNc000SaNLh0L01m_e01m_fl`9S#0008DNkl zCoHeR5l2EkuC0ef(2b)x(*oMK6EQy-_y}%$>RYl-@XnvRDpp)DR5%kct`N*3h`~M! zn@Pk9u^FHZ61*GHiDP;q#jxO|9X1L3H+edgpnWGqz=jXR>}0^iL_!yg6vm9;#PR9`k7pUyZUrM^A^arrX|Zq@gy&rO zb`gHqKOr_;6U-`Ts_}1c8`wwW0KZKa0uh%gV58}WBjCh!;v;HxWH^R2FQ`!obU;=` zl7Kc9ZV2=!Ks5s0!RVJS-wH}}V?0KM(CasmJbM^}(1>tPjA0bS(&s$kMr=sUzfG7j zG*^7KRieIUTnUpzE6MunC=*F*gf;vATFOGoE5z3F_F+X`f25~`rd})0BBZoJh*2w{ zWzPt?AB9M>Z!4vmdMS|_mueVkfzYaq8aSM=wm_8iL;w8Lz;-sk&j~g3orC5KTR_%q zjCysH(Cq(f5g9YNyz5vJFX>*#Y5-)$1YrrQyv_IkAB_8I_)$4Oh^+=NX^eyzouHOb zak~&kkR|Xs6CT1~%*0TG*!?TPa!qJK<|pH5!2#s1s&A0sdytC6WC Qp8x;=07*qoM6N<$g7;l?l>h($ literal 6359 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 Z{{vShG`s}1D%Su2002ovPDHLkV1nSgEOY<> diff --git a/public/images/pokemon/shiny/678.json b/public/images/pokemon/shiny/678.json index 3b0b49acd46..681f8466719 100644 --- a/public/images/pokemon/shiny/678.json +++ b/public/images/pokemon/shiny/678.json @@ -4,240 +4,30 @@ "image": "678.png", "format": "RGBA8888", "size": { - "w": 130, - "h": 130 + "w": 56, + "h": 56 }, - "scale": 1, + "scale": 0.5, "frames": [ { "filename": "0001.png", "rotated": false, - "trimmed": true, + "trimmed": false, "sourceSize": { - "w": 80, - "h": 80 + "w": 96, + "h": 96 }, "spriteSourceSize": { - "x": 18, - "y": 11, - "w": 44, - "h": 57 + "x": 25, + "y": 20, + "w": 45, + "h": 56 }, "frame": { "x": 0, "y": 0, - "w": 44, - "h": 57 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 80 - }, - "spriteSourceSize": { - "x": 18, - "y": 11, - "w": 44, - "h": 57 - }, - "frame": { - "x": 0, - "y": 57, - "w": 44, - "h": 57 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 80 - }, - "spriteSourceSize": { - "x": 18, - "y": 11, - "w": 44, - "h": 57 - }, - "frame": { - "x": 0, - "y": 57, - "w": 44, - "h": 57 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 80 - }, - "spriteSourceSize": { - "x": 21, - "y": 15, - "w": 44, - "h": 53 - }, - "frame": { - "x": 44, - "y": 0, - "w": 44, - "h": 53 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 80 - }, - "spriteSourceSize": { - "x": 21, - "y": 15, - "w": 44, - "h": 53 - }, - "frame": { - "x": 44, - "y": 0, - "w": 44, - "h": 53 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 80 - }, - "spriteSourceSize": { - "x": 24, - "y": 12, - "w": 42, + "w": 45, "h": 56 - }, - "frame": { - "x": 88, - "y": 0, - "w": 42, - "h": 56 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 80 - }, - "spriteSourceSize": { - "x": 24, - "y": 12, - "w": 42, - "h": 56 - }, - "frame": { - "x": 88, - "y": 0, - "w": 42, - "h": 56 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 80 - }, - "spriteSourceSize": { - "x": 20, - "y": 11, - "w": 43, - "h": 57 - }, - "frame": { - "x": 44, - "y": 53, - "w": 43, - "h": 57 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 80 - }, - "spriteSourceSize": { - "x": 20, - "y": 11, - "w": 43, - "h": 57 - }, - "frame": { - "x": 44, - "y": 53, - "w": 43, - "h": 57 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 80 - }, - "spriteSourceSize": { - "x": 22, - "y": 13, - "w": 43, - "h": 55 - }, - "frame": { - "x": 87, - "y": 56, - "w": 43, - "h": 55 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 80, - "h": 80 - }, - "spriteSourceSize": { - "x": 22, - "y": 13, - "w": 43, - "h": 55 - }, - "frame": { - "x": 87, - "y": 56, - "w": 43, - "h": 55 } } ] @@ -246,6 +36,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9579cbb834c4127f905679ba92633a05:64ed3d991add5e47034b1ca9aad80a4c:887aa14e4a3a3e9141c6ae460f968db1$" + "smartupdate": "$TexturePacker:SmartUpdate:ee6cbb7807c28f4b3f12e8dcf4da4888:77056356d7cbf2a4fb20508f50dbd3ce:887aa14e4a3a3e9141c6ae460f968db1$" } } diff --git a/public/images/pokemon/shiny/678.png b/public/images/pokemon/shiny/678.png index f41018c98385a067e85ad757634f40a4bc0231c3..a2ec8d89519faadcb92ff2842715639756568337 100644 GIT binary patch literal 746 zcmV1I6O*=M&Y5)KL0d!JMQvg8b*k%9#010qN zS#tmY4#WTe4#WYKD-Ig~00Lr3L_t(Y$EB6qqT?V4MHAUT(*OV919+*KBepZcQyX1! z+v0J2Hr2oTKGsjx_4iZvT(TiucrP#4W8svHlTr#NU~v;kIU|=~sYa4=c5J#v&sD9J z?%W0}QmFcL#`0$P618ZK4M^mqIurGRt?VLwr{ScsAslsval8W$562tQxn{5c_~e{3 zm$ofD&YT(-E#w?LTPI1+r^DLAy*SLP%p8O4Ku$~A!BAa*JR(K>Ed{xbrS5e`hrX)ex5^;5~!JNe4Yc;*HCwN1t7l3p239o!gNlH9ErJ%sfX;>vM>VQTf1# z&8zEpB_va-#UjmIw@;A#=3xD1gbPCJju*&I+D1hl%Yf<{wS{;`4>pDFn-RL1X&oQ4|GUXVTs(B>8k45u7(zr&g_caTb zj&(&xFl`#bdXt1v7`;OF5kjokIim4=kq5;4fa|{|1ja cB7EY00OdUr;y}}ETmS$707*qoM6N<$f?+gN3;+NC literal 2490 zcmV;r2}SmaP));b^76f^Qop~y@!4wl`1t?-|H6l_>Hq)$0d!JMQvg8b*k%9#2}emp zK~#8N?UzAs+t?AuB}hnn4m2Wn|94y2=9{{>c*F0sJ;vfQ~i?D4`VKW-_k$!fN`q;c`luFPR#ve~*>H+x;e zfB+AO2W<8+;e?vz;TTYr5Cznu;ZFFax-WxD{H`$`AMdk zTXbirP^V1D!*a*hku*6{FE=OPxY(9PriB@`2!XyQsl{R*9c7kJ8-7FPHok2El5QG> zRc*sLQn=*S{VuCoCP=EV$?deGMkermaU;`0Swg~A2(+4pwr_2(DLu%vs&7Wz$TYJ= z^dS)rcG#=iw!*@t*PIf;rbOU15M>$@>WPGwP_GGle6>X0P10*lxmQy85Ovd1f(H`P zVUi-EuaPCR5V+P~YY+mbo*>gwd4eOr1BC!n;9TXM^ZKgqYPEP<8iY!=+`-wB5amy548ZU^3NKM_vu9yzaJ20IZfNBz3~rTV+&V^ zdH!n=8hwg$A0bsbS!KvA6r1T8TDQLyX@bI!_GsiNY6%9aIaP*K$`YyUq%G3O8gKX^ni|M_P` z13RwfOhbrJa3tH6AbC|sH*N8h@DKH|Eif1mAY0Z;sQvHB;)3HMQ&{tRhlIkUX4}GY zL@+7VJ5>F_0@rI)#0MHSr$or_D>Wj7MlFo|r;Vpkp+8VUKW4`82cyDZ(0Np9ale(5 zkEc-``UA}^!6^GDH(N(A@)?{=Ln3e{({_|ow=&zjKM(`5jY-u+nf#!9XoxVG=6TKp z0ZRoFmEZRVQWu;l`{S!T-*abXGs4hxH6SFMXO_H>_j<52{h=E;WooJv#nS~xewtl^ zVtVg@kT8L}_kOoj8XUo|5pX;rgr>tOPsn7nUw>YEpA{oO9ju3y(Mc)R|h`12hOhbn~3xxn3#fqJUzHnqB01-Q*On#~af$ zr+}B%79+8w=XH})FMxhyF{+zS))phSuNQPvQpoyH51j1CPDTXrA+MVvi=vy7YH%CR zWn*zN@;8wujV%;jH)kx1PB(>c%sM}2;S4$_bN*&DU@HWkCT8h$Q&MBD*^e(kcLW5s zI`KCIK&R4l9F|3|o8r9Y=77Cg%FC)U?VK!?B}7e0H^m`)-IR?p(Z%TKY)@Bs>TJ=Z zY%@+xmrU40e_q-6M&g}UR>YIo*WTF-t0@u0>IS-r0Hxc_u(CSQV*B#`=2jD~=%$NL znSi}_3n3c$o2=FmylzSyFC`Xbb*e`8#s1bTE?9ebH99ZfTy)dLjkD%~vd$U#BJvifBxhLa;`Wx0{l%`rGKva;0t=MT#IMa%?Tb*lld24mgC z{ic5CG_>KBh45xagumYf8N=;56Zra^M| zXA6L|Ntd{Cgy{u)01!bfX=P6+JHqX$`ydCM#Hyk^S zwQ73OEM)#@er1Q&P>NEqe654ASfI5ZwZ(f&@Or96EYt11&jidXht4;>zwIeA1G)So z5WuSGSXnicyt4C6IRpD!RG2ufVn>*LCb0~+;gBlbV?pM~* znthXsJpwXPGbvHk%R(pU$IA!Yna7h&y?LNl8M1v2q{Xtz3{FpWC7$`$9D$u!M?2 z%F%?7Q6Kx}nZJ>JjkYL6LS5)hcC*AK`R2L5ne8EXB9?^Ro)JRY&iiK4d0jeTTMR}I z3k_kNLi($RX6T#Bd7Ze^-fJwODOEs=wB22M&){)7IAA3Ub)C^VV zHI|*#wGu+)QjLA{Vni5g?9f@KDv^}~+d3v}ygrOH)~8ZJ@Ebd?oA+CsYpkT6khzr? zomyA`e^CH1Z=u5^b*ZC?! z=m~11Z}Q_g;j4Yqi}2SIq`o=98|(j7eXsBJy}s9f0XN@ZWv`&I8~^|S07*qoM6N<$ Eg48^+YXATM diff --git a/src/data/move.ts b/src/data/move.ts index 565c3b24125..5d5fec95729 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -4494,7 +4494,7 @@ export function initMoves() { new SelfStatusMove(Moves.WISH, Type.NORMAL, -1, 10, -1, 0, 3) .triageMove() .attr(AddArenaTagAttr, ArenaTagType.WISH, 2, true), - new SelfStatusMove(Moves.ASSIST, Type.NORMAL, -1, 20, -1, 0, 3) + new SelfStatusMove(Moves.ASSIST, Type.NORMAL, -1, 20, -1, 0, 3) .attr(RandomMovesetMoveAttr, true) .ignoresVirtual(), new SelfStatusMove(Moves.INGRAIN, Type.GRASS, -1, 20, -1, 0, 3) From 36de62dc8a38bdddd8c5ac014e5387bbe707f44f Mon Sep 17 00:00:00 2001 From: Dakurei Date: Tue, 30 Apr 2024 20:48:55 +0200 Subject: [PATCH 033/110] Fix Pokerus tutorial condition --- src/ui/starter-select-ui-handler.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 2fd67ac0485..f1e058b12cf 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -203,7 +203,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.starterSelectContainer.add(this.shinyOverlay); const starterContainerWindow = addWindow(this.scene, 141, 1, 178, 178); - + this.starterSelectContainer.add(addWindow(this.scene, 107, 1, 34, 58)); this.starterSelectContainer.add(addWindow(this.scene, 107, 59, 34, 91)); this.starterSelectContainer.add(addWindow(this.scene, 107, 145, 34, 34, true)); @@ -318,7 +318,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.genCursorObj.setVisible(false); this.genCursorObj.setOrigin(0, 0); this.starterSelectContainer.add(this.genCursorObj); - + this.valueLimitLabel = addTextObject(this.scene, 124, 150, '0/10', TextStyle.TOOLTIP_CONTENT); this.valueLimitLabel.setOrigin(0.5, 0); this.starterSelectContainer.add(this.valueLimitLabel); @@ -333,7 +333,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.starterSelectContainer.add(this.startCursorObj); const starterSpecies: Species[] = []; - + for (let g = 0; g < this.starterSelectGenIconContainers.length; g++) { let s = 0; this.genSpecies.push([]); @@ -498,7 +498,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const eggMovesLabel = addTextObject(this.scene, -46, 0, 'Egg Moves', TextStyle.WINDOW_ALT); eggMovesLabel.setOrigin(0.5, 0); - + this.pokemonEggMovesContainer.add(eggMovesLabel); for (let m = 0; m < 4; m++) { @@ -552,7 +552,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { species = getPokemonSpecies(randomSpeciesId); pokerusCursor = this.genSpecies[species.generation - 1].indexOf(species); }; - + let dupe = false; do { @@ -1049,7 +1049,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } } } - + if (success) ui.playSelect(); else if (error) @@ -1086,7 +1086,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.scene.gameData.starterData[speciesId].moveset = this.starterMoveset.slice(0) as StarterMoveset; this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, undefined, undefined, undefined, false); } - + updateInstructions(): void { let instructionLines = [ ]; let cycleInstructionLines = []; @@ -1212,7 +1212,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { setGenMode(genMode: boolean): boolean { this.genCursorObj.setVisible(genMode && !this.startCursorObj.visible); this.cursorObj.setVisible(!genMode && !this.startCursorObj.visible); - + if (genMode !== this.genMode) { this.genMode = genMode; @@ -1311,7 +1311,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const defaultAbilityIndex = this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species); const defaultNature = this.scene.gameData.getSpeciesDefaultNature(species); props = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); - + this.setSpeciesDetails(species, props.shiny, props.formIndex, props.female, props.variant, defaultAbilityIndex, defaultNature); } @@ -1319,7 +1319,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.setTypeIcons(speciesForm.type1, speciesForm.type2); this.pokemonSprite.clearTint(); - if (this.pokerusCursors.find((cursor: integer, i: integer) => cursor === this.cursor && this.pokerusGens[i] === this.genCursor)) + if (this.pokerusCursors.find((cursor: integer, i: integer) => cursor === this.cursor && this.pokerusGens[i] === this.getGenCursorWithScroll())) handleTutorial(this.scene, Tutorial.Pokerus); } else { this.pokemonGrowthRateText.setText(''); @@ -1341,7 +1341,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const defaultAbilityIndex = this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species); const defaultNature = this.scene.gameData.getSpeciesDefaultNature(species); const props = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); - + this.setSpeciesDetails(species, props.shiny, props.formIndex, props.female, props.variant, defaultAbilityIndex, defaultNature, true); this.pokemonSprite.setTint(0x808080); } @@ -1507,7 +1507,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.speciesStarterMoves.push(speciesEggMoves[species.speciesId][em]); } } - + const speciesMoveData = this.scene.gameData.starterData[species.speciesId].moveset; let moveData: StarterMoveset = speciesMoveData ? Array.isArray(speciesMoveData) @@ -1696,7 +1696,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.statsContainer.updateIvs(null); } } - + showStats(): void { if (!this.speciesStarterDexEntry) return; From 1449147121d96332ce3b3a76501860502b3c8452 Mon Sep 17 00:00:00 2001 From: Dario Krause Date: Tue, 30 Apr 2024 21:29:56 +0200 Subject: [PATCH 034/110] Update pokemon.ts (#357) --- src/locales/de/pokemon.ts | 366 +++++++++++++++++++------------------- 1 file changed, 183 insertions(+), 183 deletions(-) diff --git a/src/locales/de/pokemon.ts b/src/locales/de/pokemon.ts index 08fdbf01d02..db92ccc5c18 100644 --- a/src/locales/de/pokemon.ts +++ b/src/locales/de/pokemon.ts @@ -387,102 +387,102 @@ export const pokemon: SimpleTranslationEntries = { "rayquaza": "Rayquaza", "jirachi": "Jirachi", "deoxys": "Deoxys", - "turtwig": "Turtwig", - "grotle": "Grotle", - "torterra": "Torterra", - "chimchar": "Chimchar", - "monferno": "Monferno", - "infernape": "Infernape", - "piplup": "Piplup", - "prinplup": "Prinplup", - "empoleon": "Empoleon", - "starly": "Starly", + "turtwig": "Chelast", + "grotle": "Chelcarain", + "torterra": "Chelterrar", + "chimchar": "Panflam", + "monferno": "Panpyro", + "infernape": "Panferno", + "piplup": "Plinfa", + "prinplup": "Pilprin", + "empoleon": "Impoleon", + "starly": "Staralili", "staravia": "Staravia", "staraptor": "Staraptor", - "bidoof": "Bidoof", - "bibarel": "Bibarel", - "kricketot": "Kricketot", - "kricketune": "Kricketune", - "shinx": "Shinx", + "bidoof": "Bidiza", + "bibarel": "Bidifas", + "kricketot": "Zirpurze", + "kricketune": "Zirpeise", + "shinx": "Sheinux", "luxio": "Luxio", "luxray": "Luxray", - "budew": "Budew", + "budew": "Knospi", "roserade": "Roserade", - "cranidos": "Cranidos", - "rampardos": "Rampardos", - "shieldon": "Shieldon", - "bastiodon": "Bastiodon", + "cranidos": "Koknodon", + "rampardos": "Rameidon", + "shieldon": "Schilterus", + "bastiodon": "Bollterus", "burmy": "Burmy", - "wormadam": "Wormadam", - "mothim": "Mothim", - "combee": "Combee", - "vespiquen": "Vespiquen", + "wormadam": "Burmadame", + "mothim": "Moterpel", + "combee": "Wadribie", + "vespiquen": "Hornwiesel", "pachirisu": "Pachirisu", - "buizel": "Buizel", - "floatzel": "Floatzel", - "cherubi": "Cherubi", - "cherrim": "Cherrim", - "shellos": "Shellos", + "buizel": "Bamelin", + "floatzel": "Bojelin", + "cherubi": "Kikugi", + "cherrim": "Kinoso", + "shellos": "Schalellos", "gastrodon": "Gastrodon", - "ambipom": "Ambipom", - "drifloon": "Drifloon", - "drifblim": "Drifblim", - "buneary": "Buneary", - "lopunny": "Lopunny", - "mismagius": "Mismagius", - "honchkrow": "Honchkrow", - "glameow": "Glameow", - "purugly": "Purugly", - "chingling": "Chingling", - "stunky": "Stunky", + "ambipom": "Ambidifel", + "drifloon": "Driftlon", + "drifblim": "Drifzepeli", + "buneary": "Haspiror", + "lopunny": "Schlapor", + "mismagius": "Traunmagil", + "honchkrow": "Kramshef", + "glameow": "Charmian", + "purugly": "Shnurgarst", + "chingling": "Klingplim", + "stunky": "Skunkapuh", "skuntank": "Skuntank", - "bronzor": "Bronzor", + "bronzor": "Bronzel", "bronzong": "Bronzong", - "bonsly": "Bonsly", - "mime_jr": "Mime Jr.", - "happiny": "Happiny", - "chatot": "Chatot", - "spiritomb": "Spiritomb", - "gible": "Gible", - "gabite": "Gabite", - "garchomp": "Garchomp", - "munchlax": "Munchlax", + "bonsly": "Mobai", + "mime_jr": "Pantimimi", + "happiny": "Wonneira", + "chatot": "Plaudagei", + "spiritomb": "Kryppuk", + "gible": "Kaumalat", + "gabite": "Knarksel", + "garchomp": "Knackrack", + "munchlax": "Mampfaxo", "riolu": "Riolu", "lucario": "Lucario", "hippopotas": "Hippopotas", - "hippowdon": "Hippowdon", - "skorupi": "Skorupi", - "drapion": "Drapion", - "croagunk": "Croagunk", - "toxicroak": "Toxicroak", - "carnivine": "Carnivine", + "hippowdon": "Hippoterus", + "skorupi": "Pionskora", + "drapion": "Piondragi", + "croagunk": "Glibunkel", + "toxicroak": "Toxiquak", + "carnivine": "Venuflibis", "finneon": "Finneon", "lumineon": "Lumineon", - "mantyke": "Mantyke", - "snover": "Snover", - "abomasnow": "Abomasnow", - "weavile": "Weavile", + "mantyke": "Mantirps", + "snover": "Shnebedeck", + "abomasnow": "Rexblisar", + "weavile": "Snibunna", "magnezone": "Magnezone", - "lickilicky": "Lickilicky", - "rhyperior": "Rhyperior", - "tangrowth": "Tangrowth", - "electivire": "Electivire", - "magmortar": "Magmortar", + "lickilicky": "Schlurplek", + "rhyperior": "Rihornior", + "tangrowth": "Tangoloss", + "electivire": "Elevoltek", + "magmortar": "Magbrant", "togekiss": "Togekiss", "yanmega": "Yanmega", - "leafeon": "Leafeon", - "glaceon": "Glaceon", - "gliscor": "Gliscor", - "mamoswine": "Mamoswine", + "leafeon": "Folipurba", + "glaceon": "Glaziola", + "gliscor": "Skorgro", + "mamoswine": "Mamutel", "porygon_z": "Porygon-Z", - "gallade": "Gallade", - "probopass": "Probopass", - "dusknoir": "Dusknoir", - "froslass": "Froslass", + "gallade": "Galagladi", + "probopass": "Voluminas", + "dusknoir": "Zwirrfinst", + "froslass": "Frosdedje", "rotom": "Rotom", - "uxie": "Uxie", - "mesprit": "Mesprit", - "azelf": "Azelf", + "uxie": "Selfe", + "mesprit": "Vesprit", + "azelf": "Tobutz", "dialga": "Dialga", "palkia": "Palkia", "heatran": "Heatran", @@ -495,116 +495,116 @@ export const pokemon: SimpleTranslationEntries = { "shaymin": "Shaymin", "arceus": "Arceus", "victini": "Victini", - "snivy": "Snivy", - "servine": "Servine", - "serperior": "Serperior", - "tepig": "Tepig", - "pignite": "Pignite", - "emboar": "Emboar", - "oshawott": "Oshawott", - "dewott": "Dewott", - "samurott": "Samurott", - "patrat": "Patrat", - "watchog": "Watchog", - "lillipup": "Lillipup", - "herdier": "Herdier", - "stoutland": "Stoutland", - "purrloin": "Purrloin", - "liepard": "Liepard", - "pansage": "Pansage", - "simisage": "Simisage", - "pansear": "Pansear", - "simisear": "Simisear", - "panpour": "Panpour", - "simipour": "Simipour", - "munna": "Munna", - "musharna": "Musharna", - "pidove": "Pidove", - "tranquill": "Tranquill", - "unfezant": "Unfezant", - "blitzle": "Blitzle", - "zebstrika": "Zebstrika", - "roggenrola": "Roggenrola", - "boldore": "Boldore", - "gigalith": "Gigalith", - "woobat": "Woobat", - "swoobat": "Swoobat", - "drilbur": "Drilbur", - "excadrill": "Excadrill", - "audino": "Audino", - "timburr": "Timburr", - "gurdurr": "Gurdurr", - "conkeldurr": "Conkeldurr", - "tympole": "Tympole", - "palpitoad": "Palpitoad", - "seismitoad": "Seismitoad", - "throh": "Throh", - "sawk": "Sawk", - "sewaddle": "Sewaddle", - "swadloon": "Swadloon", - "leavanny": "Leavanny", - "venipede": "Venipede", - "whirlipede": "Whirlipede", - "scolipede": "Scolipede", - "cottonee": "Cottonee", - "whimsicott": "Whimsicott", - "petilil": "Petilil", - "lilligant": "Lilligant", - "basculin": "Basculin", - "sandile": "Sandile", - "krokorok": "Krokorok", - "krookodile": "Krookodile", - "darumaka": "Darumaka", - "darmanitan": "Darmanitan", - "maractus": "Maractus", - "dwebble": "Dwebble", - "crustle": "Crustle", - "scraggy": "Scraggy", - "scrafty": "Scrafty", - "sigilyph": "Sigilyph", - "yamask": "Yamask", - "cofagrigus": "Cofagrigus", - "tirtouga": "Tirtouga", - "carracosta": "Carracosta", - "archen": "Archen", - "archeops": "Archeops", - "trubbish": "Trubbish", - "garbodor": "Garbodor", + "snivy": "Serpifeu", + "servine": "Efoserp", + "serperior": "Serpiroyal", + "tepig": "Floink", + "pignite": "Ferkokel", + "emboar": "Flambirex", + "oshawott": "Ottaro", + "dewott": "Zwottronin", + "samurott": "Admurai", + "patrat": "Nagelotz", + "watchog": "Kukmarda", + "lillipup": "Yorkleff", + "herdier": "Terribark", + "stoutland": "Bissbark", + "purrloin": "Felilou", + "liepard": "Kleoparda", + "pansage": "Vegimak", + "simisage": "Vegichita", + "pansear": "Grillmak", + "simisear": "Grillchita", + "panpour": "Sodamak", + "simipour": "Sodachita", + "munna": "Somniam", + "musharna": "Somnivora", + "pidove": "Dusslgurr", + "tranquill": "Navitaub", + "unfezant": "Fasasnob", + "blitzle": "Elezeba", + "zebstrika": "Zebritz", + "roggenrola": "Kiesling", + "boldore": "Sedimantur", + "gigalith": "Brockoloss", + "woobat": "Fleknoil", + "swoobat": "Fletiamo", + "drilbur": "Rotomurf", + "excadrill": "Stalobor", + "audino": "Ohrdoch", + "timburr": "Praktibalk", + "gurdurr": "Strepoli", + "conkeldurr": "Meistagriff", + "tympole": "Schallquap", + "palpitoad": "Membrana", + "seismitoad": "Branawarz", + "throh": "Juitesto", + "sawk": "Karadonis", + "sewaddle": "Strawickl", + "swadloon": "Folikon", + "leavanny": "Matrifol", + "venipede": "Toxiped", + "whirlipede": "Rollum", + "scolipede": "Cerapendra", + "cottonee": "Waumboll", + "whimsicott": "Elfun", + "petilil": "Lilminip", + "lilligant": "Dressella", + "basculin": "Barschuft", + "sandile": "Ganovil", + "krokorok": "Rokkaiman", + "krookodile": "Rabigator", + "darumaka": "Flampion", + "darmanitan": "Flampavian", + "maractus": "Maracamba", + "dwebble": "Lithomith", + "crustle": "Castellith", + "scraggy": "Zurrokex", + "scrafty": "Irokex", + "sigilyph": "Symvolara", + "yamask": "Makabaja", + "cofagrigus": "Echnatoll", + "tirtouga": "Galapaflos", + "carracosta": "Karippas", + "archen": "Flapteryx", + "archeops": "Aeropteryx", + "trubbish": "Unratütox", + "garbodor": "Deponitox", "zorua": "Zorua", "zoroark": "Zoroark", - "minccino": "Minccino", - "cinccino": "Cinccino", - "gothita": "Gothita", - "gothorita": "Gothorita", - "gothitelle": "Gothitelle", - "solosis": "Solosis", - "duosion": "Duosion", - "reuniclus": "Reuniclus", - "ducklett": "Ducklett", - "swanna": "Swanna", - "vanillite": "Vanillite", - "vanillish": "Vanillish", - "vanilluxe": "Vanilluxe", - "deerling": "Deerling", - "sawsbuck": "Sawsbuck", + "minccino": "Picochilla", + "cinccino": "Chillabell", + "gothita": "Mollimorba", + "gothorita": "Hypnomorba", + "gothitelle": "Morbitesse", + "solosis": "Monozyto", + "duosion": "Mitodos", + "reuniclus": "Zytomega", + "ducklett": "Piccolente", + "swanna": "Swaroness", + "vanillite": "Gelatini", + "vanillish": "Gelatroppo", + "vanilluxe": "Gelatwino", + "deerling": "Sesokitz", + "sawsbuck": "Kronjuwild", "emolga": "Emolga", - "karrablast": "Karrablast", - "escavalier": "Escavalier", - "foongus": "Foongus", - "amoonguss": "Amoonguss", - "frillish": "Frillish", - "jellicent": "Jellicent", - "alomomola": "Alomomola", - "joltik": "Joltik", - "galvantula": "Galvantula", - "ferroseed": "Ferroseed", - "ferrothorn": "Ferrothorn", - "klink": "Klink", - "klang": "Klang", - "klinklang": "Klinklang", - "tynamo": "Tynamo", - "eelektrik": "Eelektrik", - "eelektross": "Eelektross", + "karrablast": "Laukaps", + "escavalier": "Cavalanzas", + "foongus": "Tarnpignon", + "amoonguss": "Hutsassa", + "frillish": "Quabbel", + "jellicent": "Apoquallyp", + "alomomola": "Mamolida", + "joltik": "Wattzapf", + "galvantula": "Voltula", + "ferroseed": "Kastadur", + "ferrothorn": "Tentantel", + "klink": "Klikk", + "klang": "Kliklak", + "klinklang": "Klikdiklak", + "tynamo": "Zapplardin", + "eelektrik": "Zapplalek", + "eelektross": "Zapplarang", "elgyem": "Elgyem", "beheeyem": "Beheeyem", "litwick": "Litwick", From 869a5c2d4c43b2952b340bcb8a2915410212f01c Mon Sep 17 00:00:00 2001 From: Dakurei Date: Tue, 30 Apr 2024 21:58:44 +0200 Subject: [PATCH 035/110] Fix tutorials translation fr + Fix the length problem of some strings that aren't readable in the game + Fix a few typo errors --- src/locales/fr/tutorial.ts | 65 ++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/src/locales/fr/tutorial.ts b/src/locales/fr/tutorial.ts index 2722c02ad45..c9f8a392e1e 100644 --- a/src/locales/fr/tutorial.ts +++ b/src/locales/fr/tutorial.ts @@ -1,38 +1,43 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const tutorial: SimpleTranslationEntries = { - "intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. - $This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. - $The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. - $If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, - - "accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, - - "menu": `From this menu you can access the settings. - $From the settings you can change game speed, window style, and other options. - $There are also various other features here, so be sure to check them all!`, + "intro": `Bienvenue dans PokéRogue, un fangame axé sur les combats Pokémon avec des éléments roguelite ! + $Ce jeu n’est pas monétisé et nous ne prétendons pas à la propriété de Pokémon, ni des éléments sous copyright + $utilisés. + $Ce jeu est toujours en développement, mais entièrement jouable. + $Tout signalement de bugs passe par le serveur Discord. + $Si le jeu est lent, vérifiez que l’Accélération Matérielle est activée dans les paramètres du navigateur.`, - "starterSelect": `From this screen, you can select your starters.\nThese are your initial party members. - $Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. - $You can also select gender, ability, and form depending on\nthe variants you've caught or hatched. - $The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`, + "accessMenu": `Accédez au menu avec M ou Échap lors de l'attente d’une\naction. + $Il contient les paramètres et diverses fonctionnalités`, - "pokerus": `A daily random 3 selectable starters have a purple border. - $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "menu": `Vous pouvez accéder aux paramètres depuis ce menu. + $Vous pouvez entre autres y changer la vitesse du jeu ou le style de fenêtre. + $Il y a également toute une variété d’autres fonctionnalités, + $jetez-y un œil !`, - "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. - $These range from consumables, to Pokémon held items, to passive permanent items. - $Most non-consumable item effects will stack in various ways. - $Some items will only show up if they can be used, such as evolution items. - $You can also transfer held items between Pokémon using the transfer option. - $The transfer option will appear in the bottom right once you have obtained a held item. - $You may purchase consumable items with money, and a larger variety will be available the further you get. - $Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`, + "starterSelect": `Choisissez vos starters depuis cet écran.\nIls formeront votre équipe de départ. + $Chacun possède une valeur. Votre équipe peut avoir jusqu’à\n6 membres, tant que vous ne dépassez pas un coût de 10. + $Vous pouvez aussi choisir le sexe, le talent et la forme en\nfonction des variants déjà capturés ou éclos. + $Les IVs d’un starter sont les meilleurs de tous ceux de son\nespèce déjà obtenus. Essayez donc d’en obtenir plusieurs !`, - "eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs. - $Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. - $Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. - $Pokémon hatched from eggs generally have better IVs than\nwild Pokémon. - $Some Pokémon can only even be obtained from eggs. - $There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`, + "pokerus": `Chaque jour, 3 starters tirés aléatoirement ont un contour + $violet. Si un starter que vous possédez l’a, essayez de + $ l’ajouter à votre équipe. Vérifiez bien son résumé !`, + + "selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un. + $Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents. + $La plupart des effets des objets non-consommables se cumuleront de diverses manières. + $Certains objets apparaîtront s’ils peuvent être utilisés, comme les objets d’évolution. + $Vous pouvez aussi transférer des objets tenus entre Pokémon en utilisant l’option de transfert. + $L’option de transfert apparaît en bas à droite dès que vous avez obtenu un objet à faire tenir. + $Vous pouvez acheter des consommables avec de l’argent.\nPlus vous progressez, plus le choix sera varié. + $Choisir un des objets gratuits déclenchera le prochain combat, donc faites bien tous vos achats avant.`, + + "eggGacha": `Depuis cet écran, vous pouvez échanger vos coupons\ncontre des Œufs de Pokémon. + $Les Œufs éclosent après avoir remporté un certain nombre\nde combats. Les plus rares mettent plus de temps. + $Les Pokémon éclos ne rejoindront pas votre équipe,\nmais seront ajoutés à vos starters. + $Les Pokémon issus d’Œufs ont généralement de\nmeilleurs IVs que les Pokémon sauvages. + $Certains Pokémon ne peuvent être obtenus\nque dans des Œufs. + $Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !`, } as const; \ No newline at end of file From c44009738a0984af4a5a39e33efc20e549139840 Mon Sep 17 00:00:00 2001 From: Dakurei Date: Tue, 30 Apr 2024 17:07:15 +0200 Subject: [PATCH 036/110] Add auto detect user language + prLang used to override langague detected if necessary --- package-lock.json | 13 +++++++++++-- package.json | 1 + src/plugins/i18n.ts | 15 ++++++++------- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index ecaadf378ba..7db944a4533 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,17 @@ { "name": "pokemon-rogue-battle", - "version": "1.0.3", + "version": "1.0.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.0.3", + "version": "1.0.4", "dependencies": { "@material/material-color-utilities": "^0.2.7", "crypto-js": "^4.2.0", "i18next": "^23.11.1", + "i18next-browser-languagedetector": "^7.2.1", "json-stable-stringify": "^1.1.0", "phaser": "^3.70.0", "phaser3-rex-plugins": "^1.1.84" @@ -2772,6 +2773,14 @@ "@babel/runtime": "^7.23.2" } }, + "node_modules/i18next-browser-languagedetector": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.1.tgz", + "integrity": "sha512-h/pM34bcH6tbz8WgGXcmWauNpQupCGr25XPp9cZwZInR9XHSjIFDYp1SIok7zSPsTOMxdvuLyu86V+g2Kycnfw==", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, "node_modules/i18next-http-backend": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.5.0.tgz", diff --git a/package.json b/package.json index a8c20cc49ed..d5ffb651f54 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "@material/material-color-utilities": "^0.2.7", "crypto-js": "^4.2.0", "i18next": "^23.11.1", + "i18next-browser-languagedetector": "^7.2.1", "json-stable-stringify": "^1.1.0", "phaser": "^3.70.0", "phaser3-rex-plugins": "^1.1.84" diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index b12bda1f419..22a407c3b42 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -1,4 +1,6 @@ import i18next from 'i18next'; +import LanguageDetector from 'i18next-browser-languagedetector'; + import { menu as enMenu } from '../locales/en/menu'; import { menu as esMenu } from '../locales/es/menu'; import { menu as itMenu } from '../locales/it/menu'; @@ -55,7 +57,6 @@ export interface SimpleTranslationEntries { [key: string]: string } - export interface MoveTranslationEntry { name: string, effect: string @@ -78,10 +79,8 @@ export interface Localizable { localize(): void; } -const DEFAULT_LANGUAGE_OVERRIDE = ''; - export function initI18n(): void { - let lang = 'en'; + let lang = ''; if (localStorage.getItem('prLang')) lang = localStorage.getItem('prLang'); @@ -92,18 +91,20 @@ export function initI18n(): void { * Q: How do I add a new language? * A: To add a new language, create a new folder in the locales directory with the language code. * Each language folder should contain a file for each namespace (ex. menu.ts) with the translations. + * Don't forget to declare new language in `supportedLngs` i18next initializer * * Q: How do I add a new namespace? * A: To add a new namespace, create a new file in each language folder with the translations. * Then update the `resources` field in the init() call and the CustomTypeOptions interface. - * + * * Q: How do I make a language selectable in the settings? * A: In src/system/settings.ts, add a new case to the Setting.Language switch statement. */ - i18next.init({ - lng: DEFAULT_LANGUAGE_OVERRIDE ? DEFAULT_LANGUAGE_OVERRIDE : lang, + i18next.use(LanguageDetector).init({ + lng: lang, fallbackLng: 'en', + supportedLngs: ['en', 'es', 'fr', 'it', 'de'], debug: true, interpolation: { escapeValue: false, From 7846fdc1e66f5a994bb62a4bd3563275bdd2b487 Mon Sep 17 00:00:00 2001 From: Valentin Porchet Date: Tue, 30 Apr 2024 23:33:34 +0200 Subject: [PATCH 037/110] feat: added french translation for new entries in menu.ts (#360) --- src/locales/fr/menu.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/locales/fr/menu.ts b/src/locales/fr/menu.ts index 911445bcdca..037f0f3b5e2 100644 --- a/src/locales/fr/menu.ts +++ b/src/locales/fr/menu.ts @@ -73,9 +73,9 @@ export const menu: SimpleTranslationEntries = { "skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?", "eggHatching": "Oh ?", "ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?", - "rankings": "Rankings", - "dailyRankings": "Daily Rankings", - "noRankings": "No Rankings", - "loading": "Loading…", - "playersOnline": "Players Online" + "rankings": "Classement", + "dailyRankings": "Classement du Jour", + "noRankings": "Pas de Classement", + "loading": "Chargement…", + "playersOnline": "Joueurs Connectés" } as const; From 05b01400759b76a0b68a7c5efccc712400b6e4c8 Mon Sep 17 00:00:00 2001 From: Mistmemo <114654503+LeoDoby@users.noreply.github.com> Date: Wed, 1 May 2024 02:32:02 +0200 Subject: [PATCH 038/110] Add color for the IV scanner (#363) * Add color for the IV scanner add a new color SUMMARY_GREEN in text.js, add the green color if the iv of the pokemon is better than the iv on the starter of that pokemon Co-authored-by: EmoUsedHM01 <131687820+emousedhm01@users.noreply.github.com> * fix battle-message-ui-handler.ts formatting * fix missing similicon battle-message-ui-handler.ts * modified so it take a boolean instead of doing lot of else if battle-message-ui-handler.ts --------- Co-authored-by: EmoUsedHM01 <131687820+emousedhm01@users.noreply.github.com> --- src/ui/battle-message-ui-handler.ts | 52 ++++++++++++++++++----------- src/ui/text.ts | 4 +++ 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index 7bf983c34ed..77144d6bbc0 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -1,5 +1,5 @@ import BattleScene, { Button } from "../battle-scene"; -import { addTextObject, TextStyle } from "./text"; +import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "./text"; import { Mode } from "./ui"; import * as Utils from "../utils"; import MessageUiHandler from "./message-ui-handler"; @@ -9,7 +9,7 @@ import { addWindow } from "./ui-theme"; export default class BattleMessageUiHandler extends MessageUiHandler { private levelUpStatsContainer: Phaser.GameObjects.Container; private levelUpStatsIncrContent: Phaser.GameObjects.Text; - private levelUpStatsValuesContent: Phaser.GameObjects.Text; + private levelUpStatsValuesContent: BBCodeText; private nameBox: Phaser.GameObjects.NineSlice; private nameText: Phaser.GameObjects.Text; @@ -29,7 +29,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler { this.textCallbackTimer = null; const bg = this.scene.add.sprite(0, 0, 'bg', this.scene.windowType); - bg.setOrigin(0, 1); + bg.setOrigin(0, 1); ui.add(bg); this.bg = bg; @@ -95,18 +95,19 @@ export default class BattleMessageUiHandler extends MessageUiHandler { this.levelUpStatsContainer = levelUpStatsContainer; - const levelUpStatsBg = addWindow(this.scene, (this.scene.game.canvas.width / 6), -100, 128, 100); - levelUpStatsBg.setOrigin(1, 0); - levelUpStatsContainer.add(levelUpStatsBg); - - const levelUpStatsLabelsContent = addTextObject(this.scene, (this.scene.game.canvas.width / 6) - 121, -94, '', TextStyle.WINDOW, { maxLines: 6 }); + const levelUpStatsLabelsContent = addTextObject(this.scene, (this.scene.game.canvas.width / 6) - 73, -94, '', TextStyle.WINDOW, { maxLines: 6 }); let levelUpStatsLabelText = ''; const stats = Utils.getEnumValues(Stat); for (let s of stats) levelUpStatsLabelText += `${getStatName(s)}\n`; - levelUpStatsLabelsContent.text = levelUpStatsLabelText; + levelUpStatsLabelsContent.x -= levelUpStatsLabelsContent.displayWidth; + + const levelUpStatsBg = addWindow(this.scene, (this.scene.game.canvas.width / 6), -100, 80 + levelUpStatsLabelsContent.displayWidth, 100); + levelUpStatsBg.setOrigin(1, 0); + levelUpStatsContainer.add(levelUpStatsBg); + levelUpStatsContainer.add(levelUpStatsLabelsContent); const levelUpStatsIncrContent = addTextObject(this.scene, (this.scene.game.canvas.width / 6) - 50, -94, '+\n+\n+\n+\n+\n+', TextStyle.WINDOW, { maxLines: 6 }); @@ -114,7 +115,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler { this.levelUpStatsIncrContent = levelUpStatsIncrContent; - const levelUpStatsValuesContent = addTextObject(this.scene, (this.scene.game.canvas.width / 6) - 7, -94, '', TextStyle.WINDOW, { maxLines: 6 }); + const levelUpStatsValuesContent = addBBCodeTextObject(this.scene, (this.scene.game.canvas.width / 6) - 7, -94, '', TextStyle.WINDOW, { maxLines: 6 , lineSpacing: 5}); levelUpStatsValuesContent.setOrigin(1, 0); levelUpStatsValuesContent.setAlign('right'); levelUpStatsContainer.add(levelUpStatsValuesContent); @@ -208,7 +209,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler { } else shownStats = stats; for (let s of stats) - levelUpStatsValuesText += `${shownStats.indexOf(s) > -1 ? this.getIvDescriptor(ivs[s]) : '???'}\n`; + levelUpStatsValuesText += `${shownStats.indexOf(s) > -1 ? this.getIvDescriptor(ivs[s], s) : '???'}\n`; this.levelUpStatsValuesContent.text = levelUpStatsValuesText; this.levelUpStatsIncrContent.setVisible(false); this.levelUpStatsContainer.setVisible(true); @@ -221,18 +222,29 @@ export default class BattleMessageUiHandler extends MessageUiHandler { }); } - getIvDescriptor(value: integer): string { + getIvDescriptor(value: integer, typeIv: integer): string { + let starterIvs: number[] = this.scene.gameData.dexData[this.scene.getEnemyPokemon().species.speciesId].ivs; + let uiTheme = (this.scene as BattleScene).uiTheme; // Assuming uiTheme is accessible + + // Function to wrap text in color based on comparison + const coloredText = (text: string, isBetter: boolean) => { + const textStyle: TextStyle = isBetter ? TextStyle.SUMMARY_GREEN : TextStyle.SUMMARY; + const color = getTextColor(textStyle, false, uiTheme); + return `[color=${color}][shadow=${getTextColor(textStyle, true, uiTheme)}]${text}[/shadow][/color]`; + }; + if (value > 30) - return 'Best'; + return coloredText('Best', value > starterIvs[typeIv]); if (value === 30) - return 'Fantastic'; + return coloredText('Fantastic', value > starterIvs[typeIv]); if (value > 20) - return 'Very Good'; + return coloredText('Very Good', value > starterIvs[typeIv]); if (value > 10) - return 'Pretty Good'; - if (value) - return 'Decent'; - return 'No Good'; + return coloredText('Pretty Good', value > starterIvs[typeIv]); + if (value > 0) + return coloredText('Decent', value > starterIvs[typeIv]); + + return coloredText('No Good', value > starterIvs[typeIv]); } showNameText(name: string): void { @@ -244,4 +256,4 @@ export default class BattleMessageUiHandler extends MessageUiHandler { hideNameText(): void { this.nameBoxContainer.setVisible(false); } -} \ No newline at end of file +} diff --git a/src/ui/text.ts b/src/ui/text.ts index bfb02d06e27..a8cce878240 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -19,6 +19,7 @@ export enum TextStyle { SUMMARY_PINK, SUMMARY_GOLD, SUMMARY_GRAY, + SUMMARY_GREEN, MONEY, SETTINGS_LABEL, SETTINGS_SELECTED, @@ -82,6 +83,7 @@ function getTextStyleOptions(style: TextStyle, uiTheme: UiTheme, extraStyleOptio case TextStyle.SUMMARY_PINK: case TextStyle.SUMMARY_GOLD: case TextStyle.SUMMARY_GRAY: + case TextStyle.SUMMARY_GREEN: case TextStyle.WINDOW: case TextStyle.WINDOW_ALT: case TextStyle.MESSAGE: @@ -160,6 +162,8 @@ export function getTextColor(textStyle: TextStyle, shadow?: boolean, uiTheme: Ui return !shadow ? '#e8e8a8' : '#a0a060'; case TextStyle.SUMMARY_GRAY: return !shadow ? '#a0a0a0' : '#636363'; + case TextStyle.SUMMARY_GREEN: + return !shadow ? '#78c850' : '#306850'; case TextStyle.SETTINGS_LABEL: return !shadow ? '#f8b050' : '#c07800'; case TextStyle.SETTINGS_SELECTED: From 718585062bf3d5bf5067003da9a6b70bfb407940 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Tue, 30 Apr 2024 22:06:54 -0400 Subject: [PATCH 039/110] Add togglable stat change display --- index.css | 4 + index.html | 3 + public/images/pbinfo_stat_numbers.json | 293 ++++++++++++++++++ .../ui/legacy/pbinfo_enemy_boss_stats.png | Bin 0 -> 435 bytes .../ui/legacy/pbinfo_enemy_mini_stats.png | Bin 0 -> 666 bytes .../ui/legacy/pbinfo_player_mini_stats.png | Bin 0 -> 674 bytes .../images/ui/legacy/pbinfo_player_stats.png | Bin 0 -> 285 bytes public/images/ui/legacy/pbinfo_stat.json | 188 +++++++++++ public/images/ui/legacy/pbinfo_stat.png | Bin 0 -> 263 bytes .../images/ui/legacy/pbinfo_stat_numbers.json | 293 ++++++++++++++++++ .../images/ui/legacy/pbinfo_stat_numbers.png | Bin 0 -> 392 bytes public/images/ui/pbinfo_enemy_boss.png | Bin 554 -> 526 bytes public/images/ui/pbinfo_enemy_boss_stats.png | Bin 0 -> 257 bytes public/images/ui/pbinfo_enemy_mini.png | Bin 888 -> 851 bytes public/images/ui/pbinfo_enemy_mini_stats.png | Bin 0 -> 642 bytes public/images/ui/pbinfo_enemy_type.png | Bin 1502 -> 3599 bytes public/images/ui/pbinfo_enemy_type1.png | Bin 1360 -> 3305 bytes public/images/ui/pbinfo_enemy_type2.png | Bin 1340 -> 3197 bytes public/images/ui/pbinfo_player.png | Bin 654 -> 619 bytes public/images/ui/pbinfo_player_mini.png | Bin 898 -> 860 bytes public/images/ui/pbinfo_player_mini_stats.png | Bin 0 -> 648 bytes public/images/ui/pbinfo_player_stats.png | Bin 0 -> 312 bytes public/images/ui/pbinfo_player_type1.png | Bin 1340 -> 3197 bytes public/images/ui/pbinfo_player_type2.png | Bin 1360 -> 3305 bytes public/images/ui/pbinfo_stat.json | 188 +++++++++++ public/images/ui/pbinfo_stat.png | Bin 0 -> 278 bytes public/images/ui/pbinfo_stat_numbers.json | 293 ++++++++++++++++++ public/images/ui/pbinfo_stat_numbers.png | Bin 0 -> 430 bytes src/battle-scene.ts | 72 +++-- src/data/splash-messages.ts | 3 +- src/field/pokemon.ts | 4 + src/loading-scene.ts | 6 + src/locales/de/tutorial.ts | 4 + src/locales/en/tutorial.ts | 4 + src/locales/es/tutorial.ts | 4 + src/locales/fr/tutorial.ts | 4 + src/locales/it/tutorial.ts | 4 + src/phases.ts | 10 +- src/tutorial.ts | 6 + src/ui/battle-info.ts | 100 +++++- 40 files changed, 1440 insertions(+), 43 deletions(-) create mode 100644 public/images/pbinfo_stat_numbers.json create mode 100644 public/images/ui/legacy/pbinfo_enemy_boss_stats.png create mode 100644 public/images/ui/legacy/pbinfo_enemy_mini_stats.png create mode 100644 public/images/ui/legacy/pbinfo_player_mini_stats.png create mode 100644 public/images/ui/legacy/pbinfo_player_stats.png create mode 100644 public/images/ui/legacy/pbinfo_stat.json create mode 100644 public/images/ui/legacy/pbinfo_stat.png create mode 100644 public/images/ui/legacy/pbinfo_stat_numbers.json create mode 100644 public/images/ui/legacy/pbinfo_stat_numbers.png create mode 100644 public/images/ui/pbinfo_enemy_boss_stats.png create mode 100644 public/images/ui/pbinfo_enemy_mini_stats.png create mode 100644 public/images/ui/pbinfo_player_mini_stats.png create mode 100644 public/images/ui/pbinfo_player_stats.png create mode 100644 public/images/ui/pbinfo_stat.json create mode 100644 public/images/ui/pbinfo_stat.png create mode 100644 public/images/ui/pbinfo_stat_numbers.json create mode 100644 public/images/ui/pbinfo_stat_numbers.png diff --git a/index.css b/index.css index 9a507ad6766..dd47387adee 100644 --- a/index.css +++ b/index.css @@ -150,6 +150,10 @@ body { display: none; } +#touchControls:not([data-ui-mode='COMMAND']):not([data-ui-mode='FIGHT']):not([data-ui-mode='BALL']):not([data-ui-mode='TARGET_SELECT']) #apad #apadStats { + display: none; +} + #apad .apadRectBtnContainer + .apadSqBtnContainer { top: calc(var(--controls-size) * -1.9); left: calc(var(--controls-size) * -0.9); diff --git a/index.html b/index.html index bd316330a99..506fa4f1efa 100644 --- a/index.html +++ b/index.html @@ -74,6 +74,9 @@

+
+ Shift +
Menu
diff --git a/public/images/pbinfo_stat_numbers.json b/public/images/pbinfo_stat_numbers.json new file mode 100644 index 00000000000..32170690aa0 --- /dev/null +++ b/public/images/pbinfo_stat_numbers.json @@ -0,0 +1,293 @@ +{ + "textures": [ + { + "image": "pbinfo_stat_numbers.png", + "format": "RGBA8888", + "size": { + "w": 117, + "h": 8 + }, + "scale": 1, + "frames": [ + { + "filename": "+1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 9, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 18, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+4", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 27, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+5", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 36, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+6", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 45, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 54, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 63, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 72, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-4", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 81, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-5", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 90, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-6", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 99, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "0", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 108, + "y": 0, + "w": 9, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:794aa4af3291db5abd8a2667626c1998:1a6706ad557b92f9bf099c23e02af4a6:6537c634087637bb27e8a1edb1ee2e35$" + } +} diff --git a/public/images/ui/legacy/pbinfo_enemy_boss_stats.png b/public/images/ui/legacy/pbinfo_enemy_boss_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..94c9f2a181736d88c6752f2c97ed0bbbee23ebcc GIT binary patch literal 435 zcmeAS@N?(olHy`uVBq!ia0vp^n}ArJgAGVJb4-r_QjEnx?oJHr&dIz4vU5FM978JR zyuG8?cgR7a?csXf_7^8kc|Ex$m-yBz<$7q-n^RU*Eb9Vy3q^L$xwlCBgn&~-ln2-0 zC$%D(Zao#Zd6NElh+n&%^Pj+>91Q?jM7YZ*~R6rK6tBHXtJ>3o}%+B70Tit?}|9LLp3388Oyx(ny$dZ`X4n6UD>PshjO%e?;W3et7Lx@QEIV2LHO-ZhLc6eY9Ry zIQ|Mdb1{9R)SaoXcSRIE<`z6H%nuWjbE9V$ zXGWbr(B0xb=lC1f6GDcM4fWFUoyzXm2QNAn5;^S^|FUJBo0|`=UT>R$XHs^CNV z##av>ty$f?T7lzV!;W1Rn!7wYzpJ*28OBxY>HqxBa!BncE&SaXRbV6dDO(__3L?7E8i*EoZkKZ{HwqsHRc+nk205eyDOS2sxDu$ zd@tM{5g62QzVkTGE`^WE*Hfq8w-A>Rt4KTHq5izn`AE{j-lt}1uFk6Sl=!q)x&3rH zmfHGREPZQC>e=c~;%vpYyt-a*X%jpw^vJ`ZrANz4IZ?ukeBYJTaNN^-KBA z)J%%Y&U~o6pj>*#j=aoIas@k?dF)+-(V{Q3XI{exr|Grpv%NI5;(qK@ xp0+UKM9$<@NoVioZhp6Q^O64&v*v`HV4ZIk%FUH_dOOew44$rjF6*2UngE&&E5rZ* literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/pbinfo_player_mini_stats.png b/public/images/ui/legacy/pbinfo_player_mini_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..dd2b7e65ba3522986e78d6844a6be8823c3382ae GIT binary patch literal 674 zcmV;T0$u%yP)EX>4Tx04R}tkv&MmKpe$iQ%gl!9Lyl%kfA!+MMWJ;6^me@v=v%)FuC*#nzSS- zE{=k0!NHHks)LKOt`4q(Aou~|>f)s6A|?JWDYS_3;J6>}?mh0_0Ya# zo%24i$jY)xd`>)J&;^MfxvseU#<}FMz%xZ7o1P~YiKS8xD?QB0hDJP198oo$@`aqs zD(5ZETD8GC_v9}O74(%1*J+L-fh8o7qK*_aP(c+IqO|Iym`Kxp+`~WO_*3Lk$W;L& z#{z25AUl5WKlt6PS)7`5lR|MI@M7B^V?b~hXg6*9``EVICxHJMxYE1+S__!_B)!?y zB1gdBHgIv>)s#Kpat9cGs>_D#NPe0^u?W1M(KqFRp<7^J&F!tTkJASrOIK2l+uOfqI{p0s^F(smE#4Fv0000mP)t-s0001cl!Q`iV>wbnAvplXy>s5y zwg3O#*3P|BYg+%cd;kCcN$J_5c5S*Us$?%8vTKwfg`6|6Wc}-=`Gc19G2( z)VthFjRI1_B|(0{3_xi#U}t|v7bsoq>Eaj?(fam=p-_VZhjU<>!iIbQ4@G5d*>KA2 zr+S66yVASV%+m`tUAT0h%_Vu-2F6#OE9N=hF1aYEASTnz@k_ZzU>c{|jD#j+;!l_T zYhIRn;@{452VTh2;XbSE{bIVBSPWaCe#7lsobz5x%h_{T;XlZgp00i_>zopr0I}G2 ADF6Tf literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/pbinfo_stat.json b/public/images/ui/legacy/pbinfo_stat.json new file mode 100644 index 00000000000..b7da47fc192 --- /dev/null +++ b/public/images/ui/legacy/pbinfo_stat.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "pbinfo_stat.png", + "format": "RGBA8888", + "size": { + "w": 112, + "h": 6 + }, + "scale": 1, + "frames": [ + { + "filename": "SPATK", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 19, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 18, + "h": 6 + }, + "frame": { + "x": 0, + "y": 0, + "w": 18, + "h": 6 + } + }, + { + "filename": "SPDEF", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 19, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 18, + "h": 6 + }, + "frame": { + "x": 18, + "y": 0, + "w": 18, + "h": 6 + } + }, + { + "filename": "CRIT", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 17, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 16, + "h": 6 + }, + "frame": { + "x": 36, + "y": 0, + "w": 16, + "h": 6 + } + }, + { + "filename": "ACC", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 13, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 12, + "h": 6 + }, + "frame": { + "x": 52, + "y": 0, + "w": 12, + "h": 6 + } + }, + { + "filename": "ATK", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 13, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 12, + "h": 6 + }, + "frame": { + "x": 64, + "y": 0, + "w": 12, + "h": 6 + } + }, + { + "filename": "DEF", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 13, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 12, + "h": 6 + }, + "frame": { + "x": 76, + "y": 0, + "w": 12, + "h": 6 + } + }, + { + "filename": "EVA", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 13, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 12, + "h": 6 + }, + "frame": { + "x": 88, + "y": 0, + "w": 12, + "h": 6 + } + }, + { + "filename": "SPD", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 13, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 12, + "h": 6 + }, + "frame": { + "x": 100, + "y": 0, + "w": 12, + "h": 6 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:40d30205ce8efd40dfa86cd11b0491d6:7076db6ed74199dcfb38fc8cd4d4a0e8:05882267d3999884e0491134e98b1b53$" + } +} diff --git a/public/images/ui/legacy/pbinfo_stat.png b/public/images/ui/legacy/pbinfo_stat.png new file mode 100644 index 0000000000000000000000000000000000000000..62ec3758772daea6013a4de5532575a66caf8116 GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^1whQk!3-pITwg5(Qk(%kA+A8$!NK9)wXI7Q-Kzj{ z7)yfuf*Bm1-ADteDDa3ZW?Ec4QuN(io6fN32b;e=)XJ@8wjxa57 z6;5`pyz#?~2;;a-r4XYn{3?!Y<6HKbItN$2xk}gw>0y zUzy)p<5e-!w)Vy<(87aih3;8-LtI=7KLTHk<}Jk-^i|&t;uc GLK6T7%VuW) literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/pbinfo_stat_numbers.json b/public/images/ui/legacy/pbinfo_stat_numbers.json new file mode 100644 index 00000000000..9c74ee86dbc --- /dev/null +++ b/public/images/ui/legacy/pbinfo_stat_numbers.json @@ -0,0 +1,293 @@ +{ + "textures": [ + { + "image": "pbinfo_stat_numbers.png", + "format": "RGBA8888", + "size": { + "w": 117, + "h": 8 + }, + "scale": 1, + "frames": [ + { + "filename": "+1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 9, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 18, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+4", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 27, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+5", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 36, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+6", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 45, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 54, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 63, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 72, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-4", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 81, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-5", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 90, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-6", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 99, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "0", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 108, + "y": 0, + "w": 9, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:1f22b7cb085faf9e9764273fa5e70c28:afc5587ebacca78d178ac7e0c434591b:6537c634087637bb27e8a1edb1ee2e35$" + } +} diff --git a/public/images/ui/legacy/pbinfo_stat_numbers.png b/public/images/ui/legacy/pbinfo_stat_numbers.png new file mode 100644 index 0000000000000000000000000000000000000000..ee1453b21070f8de40a299a2d0c82c49093799cc GIT binary patch literal 392 zcmV;30eAk1P)NeVolC?^B79yfh4NP^lrY9U!*DY-V@3rV{hYdQ>YK;=1YJaz3T;`<^$DGJL<5 z0VRW87@CHmA>NuYKzH1TLC5xSzn%dVgI*Y#hCzM2e@<+(--30)Oref_gmu$R&9E*Q zKCPUg&65~>rQzm$c=)wGxON}pkE{!ZPit-h_?q;dhMV)@;n(^|U!-Qgl_%A@VDM** z28vT)T`)O@Pln{f8%r6yr(x9i(DP6xH!0n5bN5`F;gccxJgbFgqhZwe(DRg7RCba7 mA?H5)Du%PaS?j+(7uOe-FYwO$9P0Z30000Ik&UmVKT0GxPa8d!07jZZ!ddIBQBbh_PFZe&65JuT|9nKq=MA`2Ra01f-NW z91f+QE2Xg6Y_!guHF6k+mXtE_eP3^s9ZQpWyFcUJ3~9SRW4V~*j$cQ1WnC#{?2Y{H zp1HO|plBRLh_0>&dpk(u@=|B3Ul!cn-d9Bu|Irn<2(MATii<NL1q8595j002ovPDHLkV1ifd@6!MP delta 515 zcmV+e0{s1s1gZp(F@NMqL_t(|obB6BYQjJm1@M;=C_;s9>aGx7IS8(W?BZR#K+fR> zdKYIGa4pEV(m;21BcvdOLb@oX#w6N||Hk-!EB%ba5WYMoi2;a+$P89q(Q(?bWqnK1js?_P5*2T3V0acimCcp71_vhnu(jb5jIunqv- zU|m?J^YT3J;D0uwQBe98btaL0--i&Q%orEbYPFKro2Hw%bs$(LP1z0Bn7Fmy_dE4% zMRfpBN}Xl?_f7}_DJACfdG6;*DGY~0t+A6v4#Sx>8X@+5UvHKdwn^skG{U|W(s&x7 z*QuwrAFS-cx>Cy61NqkdXW#0iF_3fBLidQcv~I9QcYG^xiwstFvMunJ#6@+wo@071 z6=j=LzJ;IG-9*kySisI*Q}3$_A-J?SlT8{I?O!P+!f>JWs8i-krl0glDKjDTt88$>!uSb_l5uf002ovPDHLk FV1lYA{=)zO diff --git a/public/images/ui/pbinfo_enemy_boss_stats.png b/public/images/ui/pbinfo_enemy_boss_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..7148a7af4759141abb5e2b39c02a17b45af905e5 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^n}ArJgAGVJb4-r_QjEnx?oJHr&dIz4a&~*VIEGZr zd3$>`-ysJ9)(e`BNfSH%{_kJqko58BL=U^z3cqSH|eR)57 zW1&p?=O4X~e>-L8TFuvct=1%`yX>BUe4QLNkl8GRYx|2)P*70tlomTy+AL)kaKVi zE&#J{fxIOH3ldw!o(@eA9|jTwfke-5G6qF2@~g-B0uhl?&o>!GQQmYRa=R?cyz5!T z`|(5+MftElx~(F4j)*+88Q$()i?q{0_b3h8Z?jzmZ4pWY0rr0qL21w(A*rB55THl| zr9t=9O$8-_0MJt!bXT2JP$CGRMv#IUK>#&^6m9ha8#1%t_N<261?l{K=~*1pAjk_btXV2r7AjK;-r zyc-`ce5q`T&+mUP){_|k&bdbFdlX{~)>_gu^?vW1V>+D%9edXZS(f#zwRw^xVO733 z=iJLT_%&7jLr5Bc=c*yJqh3v!6wCSI$(1zcmbE+B8p>2?Q-u1?3(9$bLGjrb(}}GC z&Tny{X#k#=SKD&ZXsreQPoB<=eZOzJOKWr2MgYCV+*TmByu~acA|fIpa@iluDW|ek SO(V4c0000wNkl)q|N~u!nI~O4Yq?Ab0 z)cUDa4A$g)|GB+zjjyH$DNlu{Sp;D;RZA6(J^uv|5`cGRUYNim(gR9s1U zPC0iQQ-etbpCZ(@E->2xpqYObLeyev0QOIDQc7gm-04MCwVfaNvS^f20{C4#?Hk+n z_uXHMMb~Ko*z*>1x7*b&2cv4u=Wc00L_|bHM0D5>)LE${MNRhx00000NkvXXu0mjf DZ|lEX>4Tx04R}tkv&MmP!xqvQ>7vm5sQd8WT;LSL`4J_sbUc+7C6sqP{?%e(K->QQng1AHR!9McVpc!PL) z)6zNb6Ngw)Qi#uq#|*k4@gvt|m)|%S92R(H$VeyWi9^IW<^6Ko+1t_sz&)j z#$|=`7H73wWzBo?7Y1|MN{Z{Wh7rRO;z&S*j4Dbf!$O31jT93}I*)qzha7)`Tr#;z zVB}ap1u7)R5B>+gXKUssC)}i96zF`h?T-;4unRP5w*7r<+l>>z{|sDdEq|pB%zTnw zYiZ#lpm!U%xNd3k9&ot>3_j_SAvuztmXOZ_?`QN)S)l(G=w5T@);!1Q1CXX!E#CkK zhrnoove!M{-PJy~e|wtq`vH(aagbUB zzo-t5uI_cI;7<`vL}@r@>=fw7Q_>^>xEhuomQto)FNAjEI4-`=cWfUYlv1Ys?$EX( z{-b279fr-f*TOp8O^+I^-|2j;`a~!KNp6au2K}h1f+CP)E`l2L=hG@E0!flV4f^#- z6%>Ia27#GDAc;X>X8YJF+efPS#oQskn5pI%x-*WUY4S8Vs<2+QHAobJnOn>qX}QG= c008jX1y1rsg=?D3Y5)KL07*qoM6N<$f~t=qVE_OC literal 0 HcmV?d00001 diff --git a/public/images/ui/pbinfo_enemy_type.png b/public/images/ui/pbinfo_enemy_type.png index 021a120070c1872b54405196e4bcb2cec9920d06..9bac63e5e72ba305c0c7769d72bc39d72aa8202e 100644 GIT binary patch literal 3599 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 diff --git a/public/images/ui/pbinfo_enemy_type1.png b/public/images/ui/pbinfo_enemy_type1.png index 89b84d7f6305169db2e227aa33a9e2202cdeebfa..6d94871e8da1dfd56a0271a6a8ef1ae8e9d6c3c4 100644 GIT binary patch literal 3305 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 delta 1332 zcmV-41K;roK6x|8rVOt-T?ULCa%fweLZBshW_&&HC;* zO0vk;&DMDOm4U9|mAs4J&B(p@`1tjx^{$}s^^2`iam|Lp|9@hcy`Z4dqs6<(m4=$( z@Ycwh|J;Giu7~bbDWAdC&0W2FNPBZod$Y)zgQZ%P*Yx1fkon7G_No9%p+S^Ti}|f> zm8jtMc@R>*?(~L`sg$n0l(@~ZN?llm^Z)<=0d!JMQvg8b*k%9#010qNS#tmY4#WTe z4#WYKD-Ig~0DlAzNkl(^Y-#Wr6(Oj4xVAPdRD7!nD#iAB*BzHNIOCF7+K!2!Mo?4Ma{y?`n4?k5THGfPb znjaf?PygBd=;)}=AC3b1KsV?cB*s@ciU)rw57cPk>(CnArfu-@+b7_eU=Lj1OnvNcwffW0-uP_mXO_l4S!y5_eP^JhH)c@!3IEp%o=Epqlf^Q zdl4vm%oVI6jAf-z5$|I$U2Dmtnyz&NU|gM1Tovo?z9%sl038k@0T?JGHsIL@QDnrd zDzX{HYQ?=uvO=g-#FB$Nsuv5}+iLfdlS^uKdBRa(`I~AmiC0_`**#%3i+m|xZDaqP znSbbOs;KIv6AN{%B`!mDz1^R4OyqbTAb6NW0}$>+AUJ_2A{5z+2=NU>5xD9kiW7b_ ziQ3*&JDtuMz*$E^ zq5Oy)WOl}~7tbVB4ihDjPFJx4ljiYZ^SDMTc5Eak+VETLetdjNB~Onz3M4|@U_y^2 zIZTv9KC>90ws`^*7o%$YR54G)Z&akbQ~r1nO{!**|rqpNJ<0!EF`8Alxn}7E5 z(}~lmd`(2y!z<9KqCiv?B4ap}nkwRT+RHPkNNQz9jwytB>h0bPVUU_P&kYuaaOFk$ z8LiIGod{VZ7{z9D<;CVoyik#-*^P(`O#DR2_+sU8C^NhOn2+~R33uoA15d^47ggK
u*i{Slh@`p?1>g%h%6Cw5J!=T0U*R1MnDJ6|U#*Z*JkoesN4y6h&V9 zS^IL#rHNpS$$z3KVzb$F)3Ol+L9lnip}Z&_gDU{iG###yJqW`PfbDi$yYFhX!dhEB z4IRgEH!YixG)-SW$f;^_3~?M|t<_*LPlNlL+mTx`uF6D6l4LfiP&6*cw*!3q`#KE6 z*>nv)$B`rn;PGFB@1WyQS!;op!Bg3K(f(8CKUlOl=YJNph0sZ>!pgJLse-2Lyi&dt}*K+!0R$E0vTWLUzE`_5mXrc zsQaRf);@*cL$jCTsXOrp#Tb)a{=Cd~yPcLDF5CP8>Nk1daueF@H!&L_t(|obBAdPTNo%hT%6=r7mDtOmVaZ|#D^=AwA$T>{|y z{`MMK0n4%gn9t{_=Z;1rTz8s03~k$XIW5~GzVAQ(BKK9E&tTg&t~=GuVw47V*Ecn{ zq+W@M;5bfWQX%fXAUY0k`1iGCS&iu$vV0E5aexf}HGd3;XC*YPKAz_Re{P;O?Z=(J z@3P-4P6>ipC$SJTFR}T;@LhT#Kr@~tNIX4Rlr7F3ih1JlvSD0}h;CUMrfz+?^FUrW92r7(fqb;z7>41Gsv{dh>cWt0R&T-FUZ9s?$T_$M z7l7HfK;Dvp1&OUH5K*IY>CJ^)^|N88NNC4pVs+=4}QGTmJ(3~vGe$D%9 z=$A!Nln?u(Y8Bx=BIU(qc)3?Ccq~Cn18LBHo9*gki69XmDIk9lNQ3S;P6ZMHlCDey z(x7{MDv$_}bVVYN2HmyUuGk}Bhem)T8UcGW0wi(y`1JhcWAML^ZL!&|BuT^msC0bn znVUT57V~&KuA`Qlv)1Y@{gNcD<5}t0Th136Ouiehu`ZX)k+t@4i#a$Ek|dEaCiL`1 z#BqEW7bo8HP4R#J`Jwe>CP{M6HBw()j4`s-DoxYU_nmW^PNyfwu5N@Z%X-$@JV}zU zDj%G4?%^B!KbQQ5<1~;eTs0Iss;zudEa!_mSJIraxeHnvd@8glLd*6A{^x002ovPDHLkV1g-F&x8N~ delta 473 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 delta 1332 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 Wt8RFN+!3I289ZJ6T-G@yGywokWokPB literal 0 HcmV?d00001 diff --git a/public/images/ui/pbinfo_stat_numbers.json b/public/images/ui/pbinfo_stat_numbers.json new file mode 100644 index 00000000000..ec4f7117bb7 --- /dev/null +++ b/public/images/ui/pbinfo_stat_numbers.json @@ -0,0 +1,293 @@ +{ + "textures": [ + { + "image": "pbinfo_stat_numbers.png", + "format": "RGBA8888", + "size": { + "w": 117, + "h": 8 + }, + "scale": 1, + "frames": [ + { + "filename": "1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 9, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 18, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "4", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 27, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "5", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 36, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "6", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 45, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 54, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 63, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 72, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-4", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 81, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-5", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 90, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-6", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 99, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "0", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 108, + "y": 0, + "w": 9, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:b0719fae0d9b670a727148cdc7202249:afc5587ebacca78d178ac7e0c434591b:4825a9f02f72f1fe28a724c6c5dffb37$" + } +} diff --git a/public/images/ui/pbinfo_stat_numbers.png b/public/images/ui/pbinfo_stat_numbers.png new file mode 100644 index 0000000000000000000000000000000000000000..c778ba992734421a718b2c49db1db0ae77a28e09 GIT binary patch literal 430 zcmV;f0a5;mP)X}UpFSFJe%YMSjb zvz=}Te=dw_+OM;>zwNiTz<(WGW!%j?&)@0VTARh5OWbc`j(J{Tok%Zt#$YoH;sBj7 z0D#IlJRc6p%*|?r>-8D{#_^;+F^22I1yqy`_PebZNKrNbfWEEq_WF{{oLyYu^!yS4 z#PO(4jM4P@WGYS8UqlLVGYqiSvW&F&OBuS>FtHC$Vz?0ZyX|CN5<3@SjG<>5X2}?8 zQ)v+?7z&xQg%~oUa!zD?QzeEgj_Hh<7_VVM6DZ`EEo4UD)*|DZy2Lt;DavMIyoRBA zxP2Ty%KN9gENZI8IE_78Q^T$GD~(@jhsGYQsdI~*V!X;!+J?fg{Gd2S+NQZaWGcsm zi<{b~a&9zLI&@IbQb7LyuD?x7eaKXf@hzMCJ+VH0TaTtDpMHPh p)) + p.toggleStats(pressed); + if (pressed) + this.setLastProcessedMovementTime(Button.STATS); + } else + return; + } if (inputSuccess && this.enableVibration && typeof navigator.vibrate !== 'undefined') navigator.vibrate(vibrationLength || 10); } @@ -1443,7 +1454,7 @@ export default class BattleScene extends SceneBase { * or not. It will only return true once, until the key is released and pressed down * again. */ - gamepadButtonJustDown(button: Phaser.Input.Gamepad.Button) : boolean { + gamepadButtonJustDown(button: Phaser.Input.Gamepad.Button): boolean { if (!button || !this.gamepadSupport) return false; @@ -1463,6 +1474,23 @@ export default class BattleScene extends SceneBase { return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustDown(k)) || this.gamepadButtonJustDown(gamepad?.buttons[this.gamepadKeyConfig[button]]); } + /** + * gamepadButtonJustUp returns true if @param button has just been released + * or not. It will only return true once, until the key is released and pressed down + * again. + */ + gamepadButtonJustUp(button: Phaser.Input.Gamepad.Button): boolean { + if (!button || !this.gamepadSupport) + return false; + + return !this.gamepadButtonStates[button.index]; + } + + buttonJustReleased(button: Button): boolean { + const gamepad = this.input.gamepad?.gamepads[0]; + return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustUp(k)) || this.gamepadButtonJustUp(gamepad?.buttons[this.gamepadKeyConfig[button]]); + } + /** * repeatInputDurationJustPassed returns true if @param button has been held down long * enough to fire a repeated input. A button must claim the movementButtonLock before diff --git a/src/data/splash-messages.ts b/src/data/splash-messages.ts index 11629cf05d7..198ff07cec9 100644 --- a/src/data/splash-messages.ts +++ b/src/data/splash-messages.ts @@ -33,6 +33,5 @@ splashMessages.push(...[ 'Also Try Emerald Rogue!', 'Also Try Radical Red!', 'Eevee Expo!', - 'YNOproject!', - 'Shh, don\'t tell Sam!' + 'YNOproject!' ]); \ No newline at end of file diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 9a7bfb48621..7072875d3ce 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1179,6 +1179,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.battleInfo.updateInfo(this, instant); } + toggleStats(visible: boolean): void { + this.battleInfo.toggleStats(visible); + } + addExp(exp: integer) { const maxExpLevel = this.scene.getMaxExpLevel(); const initialExp = this.exp; diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 2f37b900ab5..875d618ec0f 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -39,15 +39,21 @@ export class LoadingScene extends SceneBase { } this.loadAtlas('namebox', 'ui'); this.loadImage('pbinfo_player', 'ui'); + this.loadImage('pbinfo_player_stats', 'ui'); this.loadImage('pbinfo_player_mini', 'ui'); + this.loadImage('pbinfo_player_mini_stats', 'ui'); this.loadAtlas('pbinfo_player_type', 'ui'); this.loadAtlas('pbinfo_player_type1', 'ui'); this.loadAtlas('pbinfo_player_type2', 'ui'); this.loadImage('pbinfo_enemy_mini', 'ui'); + this.loadImage('pbinfo_enemy_mini_stats', 'ui'); this.loadImage('pbinfo_enemy_boss', 'ui'); + this.loadImage('pbinfo_enemy_boss_stats', 'ui'); this.loadAtlas('pbinfo_enemy_type', 'ui'); this.loadAtlas('pbinfo_enemy_type1', 'ui'); this.loadAtlas('pbinfo_enemy_type2', 'ui'); + this.loadAtlas('pbinfo_stat', 'ui'); + this.loadAtlas('pbinfo_stat_numbers', 'ui'); this.loadImage('overlay_lv', 'ui'); this.loadAtlas('numbers', 'ui'); this.loadAtlas('numbers_red', 'ui'); diff --git a/src/locales/de/tutorial.ts b/src/locales/de/tutorial.ts index 2722c02ad45..f37afcae92d 100644 --- a/src/locales/de/tutorial.ts +++ b/src/locales/de/tutorial.ts @@ -20,6 +20,10 @@ export const tutorial: SimpleTranslationEntries = { "pokerus": `A daily random 3 selectable starters have a purple border. $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. + $Your Pokémon are recalled before a trainer battle and before entering a new biome. + $You can also view the stat changes for the Pokémon on the field by holding shift.`, + "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. $Most non-consumable item effects will stack in various ways. diff --git a/src/locales/en/tutorial.ts b/src/locales/en/tutorial.ts index 2722c02ad45..f37afcae92d 100644 --- a/src/locales/en/tutorial.ts +++ b/src/locales/en/tutorial.ts @@ -20,6 +20,10 @@ export const tutorial: SimpleTranslationEntries = { "pokerus": `A daily random 3 selectable starters have a purple border. $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. + $Your Pokémon are recalled before a trainer battle and before entering a new biome. + $You can also view the stat changes for the Pokémon on the field by holding shift.`, + "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. $Most non-consumable item effects will stack in various ways. diff --git a/src/locales/es/tutorial.ts b/src/locales/es/tutorial.ts index 2722c02ad45..f37afcae92d 100644 --- a/src/locales/es/tutorial.ts +++ b/src/locales/es/tutorial.ts @@ -20,6 +20,10 @@ export const tutorial: SimpleTranslationEntries = { "pokerus": `A daily random 3 selectable starters have a purple border. $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. + $Your Pokémon are recalled before a trainer battle and before entering a new biome. + $You can also view the stat changes for the Pokémon on the field by holding shift.`, + "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. $Most non-consumable item effects will stack in various ways. diff --git a/src/locales/fr/tutorial.ts b/src/locales/fr/tutorial.ts index c9f8a392e1e..55262b195ca 100644 --- a/src/locales/fr/tutorial.ts +++ b/src/locales/fr/tutorial.ts @@ -25,6 +25,10 @@ export const tutorial: SimpleTranslationEntries = { $violet. Si un starter que vous possédez l’a, essayez de $ l’ajouter à votre équipe. Vérifiez bien son résumé !`, + "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. + $Your Pokémon are recalled before a trainer battle and before entering a new biome. + $You can also view the stat changes for the Pokémon on the field by holding shift.`, + "selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un. $Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents. $La plupart des effets des objets non-consommables se cumuleront de diverses manières. diff --git a/src/locales/it/tutorial.ts b/src/locales/it/tutorial.ts index 2722c02ad45..f37afcae92d 100644 --- a/src/locales/it/tutorial.ts +++ b/src/locales/it/tutorial.ts @@ -20,6 +20,10 @@ export const tutorial: SimpleTranslationEntries = { "pokerus": `A daily random 3 selectable starters have a purple border. $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. + $Your Pokémon are recalled before a trainer battle and before entering a new biome. + $You can also view the stat changes for the Pokémon on the field by holding shift.`, + "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. $Most non-consumable item effects will stack in various ways. diff --git a/src/phases.ts b/src/phases.ts index 8eda33de20e..ceba555f2ce 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -2671,7 +2671,6 @@ export class StatChangePhase extends PokemonPhase { let random = false; - const allStats = Utils.getEnumValues(BattleStat); if (this.stats.length === 1 && this.stats[0] === BattleStat.RAND) { this.stats[0] = this.getRandomStat(); random = true; @@ -2712,8 +2711,11 @@ export class StatChangePhase extends PokemonPhase { for (let stat of filteredStats) pokemon.summonData.battleStats[stat] = Math.max(Math.min(pokemon.summonData.battleStats[stat] + levels.value, 6), -6); - applyPostStatChangeAbAttrs(PostStatChangeAbAttr, pokemon, filteredStats, this.levels, this.selfTarget) - this.end(); + applyPostStatChangeAbAttrs(PostStatChangeAbAttr, pokemon, filteredStats, this.levels, this.selfTarget); + + pokemon.updateInfo(); + + handleTutorial(this.scene, Tutorial.Stat_Change).then(() => super.end()); }; if (relLevels.filter(l => l).length && this.scene.moveAnimations) { @@ -3337,7 +3339,7 @@ export class TrainerVictoryPhase extends BattlePhase { const trainerType = this.scene.currentBattle.trainer.config.trainerType; if (vouchers.hasOwnProperty(TrainerType[trainerType])) { if (!this.scene.validateVoucher(vouchers[TrainerType[trainerType]]) && this.scene.currentBattle.trainer.config.isBoss) - this.scene.pushPhase(new ModifierRewardPhase(this.scene, modifierTypes.VOUCHER)); + this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [ modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType])); } this.scene.ui.showText(i18next.t('menu:trainerDefeated', { trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true) }), null, () => { diff --git a/src/tutorial.ts b/src/tutorial.ts index 918c68b9bb4..88e88fa809c 100644 --- a/src/tutorial.ts +++ b/src/tutorial.ts @@ -9,6 +9,7 @@ export enum Tutorial { Menu = "MENU", Starter_Select = "STARTER_SELECT", Pokerus = "POKERUS", + Stat_Change = "STAT_CHANGE", Select_Item = "SELECT_ITEM", Egg_Gacha = "EGG_GACHA" } @@ -42,6 +43,11 @@ const tutorialHandlers = { scene.ui.showText(i18next.t("tutorial:pokerus"), null, () => scene.ui.showText('', null, () => resolve()), null, true); }); }, + [Tutorial.Stat_Change]: (scene: BattleScene) => { + return new Promise(resolve => { + scene.showFieldOverlay(1000).then(() => scene.ui.showText(i18next.t("tutorial:statChange"), null, () => scene.ui.showText('', null, () => scene.hideFieldOverlay(1000).then(() => resolve())), null, true)); + }); + }, [Tutorial.Select_Item]: (scene: BattleScene) => { return new Promise(resolve => { scene.ui.setModeWithoutClear(Mode.MESSAGE).then(() => { diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index ae794a256fa..3c2b541c618 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -7,6 +7,9 @@ import { StatusEffect } from '../data/status-effect'; import BattleScene from '../battle-scene'; import { Type, getTypeRgb } from '../data/type'; import { getVariantTint } from '#app/data/variant'; +import { BattleStat } from '#app/data/battle-stat'; + +const battleStatOrder = [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.ACC, BattleStat.EVA, BattleStat.SPD ]; export default class BattleInfo extends Phaser.GameObjects.Container { private player: boolean; @@ -24,6 +27,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { private lastLevelExp: integer; private lastLevel: integer; private lastLevelCapped: boolean; + private lastBattleStats: string; private box: Phaser.GameObjects.Sprite; private nameText: Phaser.GameObjects.Text; @@ -46,6 +50,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container { public expMaskRect: Phaser.GameObjects.Graphics; + private statsContainer: Phaser.GameObjects.Container; + private statsBox: Phaser.GameObjects.Sprite; + private statValuesContainer: Phaser.GameObjects.Container; + private statNumbers: Phaser.GameObjects.Sprite[]; + constructor(scene: Phaser.Scene, x: number, y: number, player: boolean) { super(scene, x, y); this.player = player; @@ -138,18 +147,6 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.levelNumbersContainer = this.scene.add.container(9.5, (this.scene as BattleScene).uiTheme ? 0 : -0.5); this.levelContainer.add(this.levelNumbersContainer); - this.type1Icon = this.scene.add.sprite(player ? -139 : -15, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type1`); - this.type1Icon.setOrigin(0, 0); - this.add(this.type1Icon); - - this.type2Icon = this.scene.add.sprite(player ? -139 : -15, player ? -1 : -2.5, `pbinfo_${player ? 'player' : 'enemy'}_type2`); - this.type2Icon.setOrigin(0, 0); - this.add(this.type2Icon); - - this.type3Icon = this.scene.add.sprite(player ? -154 : 0, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type`); - this.type3Icon.setOrigin(0, 0); - this.add(this.type3Icon); - if (this.player) { this.hpNumbersContainer = this.scene.add.container(-15, 10); this.add(this.hpNumbersContainer); @@ -171,6 +168,46 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.expBar = expBar; this.expMaskRect = expMaskRect; } + + this.statsContainer = this.scene.add.container(0, 0); + this.statsContainer.setAlpha(0); + this.add(this.statsContainer); + + this.statsBox = this.scene.add.sprite(0, 0, `${this.getTextureName()}_stats`); + this.statsBox.setOrigin(1, 0.5); + this.statsContainer.add(this.statsBox); + + const statLabels: Phaser.GameObjects.Sprite[] = []; + this.statNumbers = []; + + this.statValuesContainer = this.scene.add.container(0, 0); + this.statsContainer.add(this.statValuesContainer); + + battleStatOrder.map((s, i) => { + const statX = i > 1 ? this.statNumbers[i - 2].x + this.statNumbers[i - 2].width + 4 : -this.statsBox.width + 8; + const statY = -this.statsBox.height / 2 + 4 + (i < battleStatOrder.length - 1 ? (i % 2 ? 10 : 0) : 5); + const statLabel = this.scene.add.sprite(statX, statY, 'pbinfo_stat', BattleStat[s]); + statLabel.setOrigin(0, 0); + statLabels.push(statLabel); + this.statValuesContainer.add(statLabel); + + const statNumber = this.scene.add.sprite(statX + statLabel.width, statY, 'pbinfo_stat_numbers', '3'); + statNumber.setOrigin(0, 0); + this.statNumbers.push(statNumber); + this.statValuesContainer.add(statNumber); + }); + + this.type1Icon = this.scene.add.sprite(player ? -139 : -15, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type1`); + this.type1Icon.setOrigin(0, 0); + this.add(this.type1Icon); + + this.type2Icon = this.scene.add.sprite(player ? -139 : -15, player ? -1 : -2.5, `pbinfo_${player ? 'player' : 'enemy'}_type2`); + this.type2Icon.setOrigin(0, 0); + this.add(this.type2Icon); + + this.type3Icon = this.scene.add.sprite(player ? -154 : 0, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type`); + this.type3Icon.setOrigin(0, 0); + this.add(this.type3Icon); } initInfo(pokemon: Pokemon) { @@ -258,7 +295,14 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.expMaskRect.x = (pokemon.levelExp / getLevelTotalExp(pokemon.level, pokemon.species.growthRate)) * 510; this.lastExp = pokemon.exp; this.lastLevelExp = pokemon.levelExp; + + this.statValuesContainer.setPosition(8, 7) } + + const battleStats = battleStatOrder.map(() => 0); + + this.lastBattleStats = battleStats.join(''); + this.updateBattleStats(battleStats); } getTextureName(): string { @@ -272,6 +316,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.mini = mini; this.box.setTexture(this.getTextureName()); + this.statsBox.setTexture(`${this.getTextureName()}_stats`); if (this.player) this.y -= 12 * (mini ? 1 : -1); @@ -284,21 +329,34 @@ export default class BattleInfo extends Phaser.GameObjects.Container { el.y += -8 * (mini ? 1 : -1); }); + this.statValuesContainer.x += 2 * (mini ? 1 : -1); + this.statValuesContainer.y += -7 * (mini ? 1 : -1); + const toggledElements = [ this.hpNumbersContainer, this.expBar ]; toggledElements.forEach(el => el.setVisible(!mini)); } + toggleStats(visible: boolean): void { + this.scene.tweens.add({ + targets: this.statsContainer, + duration: Utils.fixedInt(125), + ease: 'Sine.easeInOut', + alpha: visible ? 1 : 0 + }); + } + updateBossSegments(pokemon: EnemyPokemon): void { const boss = !!pokemon.bossSegments; if (boss !== this.boss) { this.boss = boss; - [ this.nameText, this.genderText, this.teraIcon, this.splicedIcon, this.shinyIcon, this.ownedIcon, this.statusIndicator, this.levelContainer ].map(e => e.x += 48 * (boss ? -1 : 1)); + [ this.nameText, this.genderText, this.teraIcon, this.splicedIcon, this.shinyIcon, this.ownedIcon, this.statusIndicator, this.levelContainer, this.statValuesContainer ].map(e => e.x += 48 * (boss ? -1 : 1)); this.hpBar.x += 38 * (boss ? -1 : 1); this.hpBar.y += 2 * (this.boss ? -1 : 1); this.hpBar.setTexture(`overlay_hp${boss ? '_boss' : ''}`); this.box.setTexture(this.getTextureName()); + this.statsBox.setTexture(`${this.getTextureName()}_stats`); } this.bossSegments = boss ? pokemon.bossSegments : 0; @@ -317,6 +375,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const divider = this.scene.add.rectangle(0, 0, 1, this.hpBar.height - (uiTheme ? 0 : 1), pokemon.bossSegmentIndex >= s ? 0xFFFFFF : 0x404040) divider.setOrigin(0.5, 0); this.add(divider); + this.moveBelow(divider as Phaser.GameObjects.GameObject, this.statsContainer); divider.setPositionRelative(this.hpBar, dividerX, uiTheme ? 0 : 1); this.hpBarSegmentDividers.push(divider); @@ -439,6 +498,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.lastLevel = pokemon.level; } + const battleStats = pokemon.summonData.battleStats.join(''); + + if (this.lastBattleStats !== battleStats) + this.updateBattleStats(pokemon.summonData.battleStats); + this.shinyIcon.setVisible(pokemon.isShiny()); resolve(); @@ -513,7 +577,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { }); } - setLevel(level: integer) { + setLevel(level: integer): void { const isCapped = level >= (this.scene as BattleScene).getMaxExpLevel(); this.levelNumbersContainer.removeAll(true); const levelStr = level.toString(); @@ -522,7 +586,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.levelContainer.setX((this.player ? -41 : -50) - 8 * Math.max(levelStr.length - 3, 0)); } - setHpNumbers(hp: integer, maxHp: integer) { + setHpNumbers(hp: integer, maxHp: integer): void { if (!this.player || !this.scene) return; this.hpNumbersContainer.removeAll(true); @@ -535,6 +599,12 @@ export default class BattleInfo extends Phaser.GameObjects.Container { for (let i = hpStr.length - 1; i >= 0; i--) this.hpNumbersContainer.add(this.scene.add.image(offset++ * -8, 0, 'numbers', hpStr[i])); } + + updateBattleStats(battleStats: integer[]): void { + battleStatOrder.map((s, i) => { + this.statNumbers[i].setFrame(battleStats[s].toString()); + }); + } } export class PlayerBattleInfo extends BattleInfo { From 8a54e862fc0d165f1f6ca8967ca6f5940d624f01 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Tue, 30 Apr 2024 22:14:24 -0400 Subject: [PATCH 040/110] Revert "Add togglable stat change display" This reverts commit 718585062bf3d5bf5067003da9a6b70bfb407940. --- index.css | 4 - index.html | 3 - public/images/pbinfo_stat_numbers.json | 293 ------------------ .../ui/legacy/pbinfo_enemy_boss_stats.png | Bin 435 -> 0 bytes .../ui/legacy/pbinfo_enemy_mini_stats.png | Bin 666 -> 0 bytes .../ui/legacy/pbinfo_player_mini_stats.png | Bin 674 -> 0 bytes .../images/ui/legacy/pbinfo_player_stats.png | Bin 285 -> 0 bytes public/images/ui/legacy/pbinfo_stat.json | 188 ----------- public/images/ui/legacy/pbinfo_stat.png | Bin 263 -> 0 bytes .../images/ui/legacy/pbinfo_stat_numbers.json | 293 ------------------ .../images/ui/legacy/pbinfo_stat_numbers.png | Bin 392 -> 0 bytes public/images/ui/pbinfo_enemy_boss.png | Bin 526 -> 554 bytes public/images/ui/pbinfo_enemy_boss_stats.png | Bin 257 -> 0 bytes public/images/ui/pbinfo_enemy_mini.png | Bin 851 -> 888 bytes public/images/ui/pbinfo_enemy_mini_stats.png | Bin 642 -> 0 bytes public/images/ui/pbinfo_enemy_type.png | Bin 3599 -> 1502 bytes public/images/ui/pbinfo_enemy_type1.png | Bin 3305 -> 1360 bytes public/images/ui/pbinfo_enemy_type2.png | Bin 3197 -> 1340 bytes public/images/ui/pbinfo_player.png | Bin 619 -> 654 bytes public/images/ui/pbinfo_player_mini.png | Bin 860 -> 898 bytes public/images/ui/pbinfo_player_mini_stats.png | Bin 648 -> 0 bytes public/images/ui/pbinfo_player_stats.png | Bin 312 -> 0 bytes public/images/ui/pbinfo_player_type1.png | Bin 3197 -> 1340 bytes public/images/ui/pbinfo_player_type2.png | Bin 3305 -> 1360 bytes public/images/ui/pbinfo_stat.json | 188 ----------- public/images/ui/pbinfo_stat.png | Bin 278 -> 0 bytes public/images/ui/pbinfo_stat_numbers.json | 293 ------------------ public/images/ui/pbinfo_stat_numbers.png | Bin 430 -> 0 bytes src/battle-scene.ts | 72 ++--- src/data/splash-messages.ts | 3 +- src/field/pokemon.ts | 4 - src/loading-scene.ts | 6 - src/locales/de/tutorial.ts | 4 - src/locales/en/tutorial.ts | 4 - src/locales/es/tutorial.ts | 4 - src/locales/fr/tutorial.ts | 4 - src/locales/it/tutorial.ts | 4 - src/phases.ts | 10 +- src/tutorial.ts | 6 - src/ui/battle-info.ts | 100 +----- 40 files changed, 43 insertions(+), 1440 deletions(-) delete mode 100644 public/images/pbinfo_stat_numbers.json delete mode 100644 public/images/ui/legacy/pbinfo_enemy_boss_stats.png delete mode 100644 public/images/ui/legacy/pbinfo_enemy_mini_stats.png delete mode 100644 public/images/ui/legacy/pbinfo_player_mini_stats.png delete mode 100644 public/images/ui/legacy/pbinfo_player_stats.png delete mode 100644 public/images/ui/legacy/pbinfo_stat.json delete mode 100644 public/images/ui/legacy/pbinfo_stat.png delete mode 100644 public/images/ui/legacy/pbinfo_stat_numbers.json delete mode 100644 public/images/ui/legacy/pbinfo_stat_numbers.png delete mode 100644 public/images/ui/pbinfo_enemy_boss_stats.png delete mode 100644 public/images/ui/pbinfo_enemy_mini_stats.png delete mode 100644 public/images/ui/pbinfo_player_mini_stats.png delete mode 100644 public/images/ui/pbinfo_player_stats.png delete mode 100644 public/images/ui/pbinfo_stat.json delete mode 100644 public/images/ui/pbinfo_stat.png delete mode 100644 public/images/ui/pbinfo_stat_numbers.json delete mode 100644 public/images/ui/pbinfo_stat_numbers.png diff --git a/index.css b/index.css index dd47387adee..9a507ad6766 100644 --- a/index.css +++ b/index.css @@ -150,10 +150,6 @@ body { display: none; } -#touchControls:not([data-ui-mode='COMMAND']):not([data-ui-mode='FIGHT']):not([data-ui-mode='BALL']):not([data-ui-mode='TARGET_SELECT']) #apad #apadStats { - display: none; -} - #apad .apadRectBtnContainer + .apadSqBtnContainer { top: calc(var(--controls-size) * -1.9); left: calc(var(--controls-size) * -0.9); diff --git a/index.html b/index.html index 506fa4f1efa..bd316330a99 100644 --- a/index.html +++ b/index.html @@ -74,9 +74,6 @@
V
-
- Shift -
Menu
diff --git a/public/images/pbinfo_stat_numbers.json b/public/images/pbinfo_stat_numbers.json deleted file mode 100644 index 32170690aa0..00000000000 --- a/public/images/pbinfo_stat_numbers.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "textures": [ - { - "image": "pbinfo_stat_numbers.png", - "format": "RGBA8888", - "size": { - "w": 117, - "h": 8 - }, - "scale": 1, - "frames": [ - { - "filename": "+1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "+2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 9, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "+3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 18, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "+4", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 27, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "+5", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 36, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "+6", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 45, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 54, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 63, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 72, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-4", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 81, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-5", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 90, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-6", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 99, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "0", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 108, - "y": 0, - "w": 9, - "h": 8 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:794aa4af3291db5abd8a2667626c1998:1a6706ad557b92f9bf099c23e02af4a6:6537c634087637bb27e8a1edb1ee2e35$" - } -} diff --git a/public/images/ui/legacy/pbinfo_enemy_boss_stats.png b/public/images/ui/legacy/pbinfo_enemy_boss_stats.png deleted file mode 100644 index 94c9f2a181736d88c6752f2c97ed0bbbee23ebcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 435 zcmeAS@N?(olHy`uVBq!ia0vp^n}ArJgAGVJb4-r_QjEnx?oJHr&dIz4vU5FM978JR zyuG8?cgR7a?csXf_7^8kc|Ex$m-yBz<$7q-n^RU*Eb9Vy3q^L$xwlCBgn&~-ln2-0 zC$%D(Zao#Zd6NElh+n&%^Pj+>91Q?jM7YZ*~R6rK6tBHXtJ>3o}%+B70Tit?}|9LLp3388Oyx(ny$dZ`X4n6UD>PshjO%e?;W3et7Lx@QEIV2LHO-ZhLc6eY9Ry zIQ|Mdb1{9R)SaoXcSRIE<`z6H%nuWjbE9V$ zXGWbr(B0xb=lC1f6GDcM4fWFUoyzXm2QNAn5;^S^|FUJBo0|`=UT>R$XHs^CNV z##av>ty$f?T7lzV!;W1Rn!7wYzpJ*28OBxY>HqxBa!BncE&SaXRbV6dDO(__3L?7E8i*EoZkKZ{HwqsHRc+nk205eyDOS2sxDu$ zd@tM{5g62QzVkTGE`^WE*Hfq8w-A>Rt4KTHq5izn`AE{j-lt}1uFk6Sl=!q)x&3rH zmfHGREPZQC>e=c~;%vpYyt-a*X%jpw^vJ`ZrANz4IZ?ukeBYJTaNN^-KBA z)J%%Y&U~o6pj>*#j=aoIas@k?dF)+-(V{Q3XI{exr|Grpv%NI5;(qK@ xp0+UKM9$<@NoVioZhp6Q^O64&v*v`HV4ZIk%FUH_dOOew44$rjF6*2UngE&&E5rZ* diff --git a/public/images/ui/legacy/pbinfo_player_mini_stats.png b/public/images/ui/legacy/pbinfo_player_mini_stats.png deleted file mode 100644 index dd2b7e65ba3522986e78d6844a6be8823c3382ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 674 zcmV;T0$u%yP)EX>4Tx04R}tkv&MmKpe$iQ%gl!9Lyl%kfA!+MMWJ;6^me@v=v%)FuC*#nzSS- zE{=k0!NHHks)LKOt`4q(Aou~|>f)s6A|?JWDYS_3;J6>}?mh0_0Ya# zo%24i$jY)xd`>)J&;^MfxvseU#<}FMz%xZ7o1P~YiKS8xD?QB0hDJP198oo$@`aqs zD(5ZETD8GC_v9}O74(%1*J+L-fh8o7qK*_aP(c+IqO|Iym`Kxp+`~WO_*3Lk$W;L& z#{z25AUl5WKlt6PS)7`5lR|MI@M7B^V?b~hXg6*9``EVICxHJMxYE1+S__!_B)!?y zB1gdBHgIv>)s#Kpat9cGs>_D#NPe0^u?W1M(KqFRp<7^J&F!tTkJASrOIK2l+uOfqI{p0s^F(smE#4Fv0000mP)t-s0001cl!Q`iV>wbnAvplXy>s5y zwg3O#*3P|BYg+%cd;kCcN$J_5c5S*Us$?%8vTKwfg`6|6Wc}-=`Gc19G2( z)VthFjRI1_B|(0{3_xi#U}t|v7bsoq>Eaj?(fam=p-_VZhjU<>!iIbQ4@G5d*>KA2 zr+S66yVASV%+m`tUAT0h%_Vu-2F6#OE9N=hF1aYEASTnz@k_ZzU>c{|jD#j+;!l_T zYhIRn;@{452VTh2;XbSE{bIVBSPWaCe#7lsobz5x%h_{T;XlZgp00i_>zopr0I}G2 ADF6Tf diff --git a/public/images/ui/legacy/pbinfo_stat.json b/public/images/ui/legacy/pbinfo_stat.json deleted file mode 100644 index b7da47fc192..00000000000 --- a/public/images/ui/legacy/pbinfo_stat.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "textures": [ - { - "image": "pbinfo_stat.png", - "format": "RGBA8888", - "size": { - "w": 112, - "h": 6 - }, - "scale": 1, - "frames": [ - { - "filename": "SPATK", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 19, - "h": 8 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 18, - "h": 6 - }, - "frame": { - "x": 0, - "y": 0, - "w": 18, - "h": 6 - } - }, - { - "filename": "SPDEF", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 19, - "h": 8 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 18, - "h": 6 - }, - "frame": { - "x": 18, - "y": 0, - "w": 18, - "h": 6 - } - }, - { - "filename": "CRIT", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 17, - "h": 8 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 16, - "h": 6 - }, - "frame": { - "x": 36, - "y": 0, - "w": 16, - "h": 6 - } - }, - { - "filename": "ACC", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 13, - "h": 8 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 12, - "h": 6 - }, - "frame": { - "x": 52, - "y": 0, - "w": 12, - "h": 6 - } - }, - { - "filename": "ATK", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 13, - "h": 8 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 12, - "h": 6 - }, - "frame": { - "x": 64, - "y": 0, - "w": 12, - "h": 6 - } - }, - { - "filename": "DEF", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 13, - "h": 8 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 12, - "h": 6 - }, - "frame": { - "x": 76, - "y": 0, - "w": 12, - "h": 6 - } - }, - { - "filename": "EVA", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 13, - "h": 8 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 12, - "h": 6 - }, - "frame": { - "x": 88, - "y": 0, - "w": 12, - "h": 6 - } - }, - { - "filename": "SPD", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 13, - "h": 8 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 12, - "h": 6 - }, - "frame": { - "x": 100, - "y": 0, - "w": 12, - "h": 6 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:40d30205ce8efd40dfa86cd11b0491d6:7076db6ed74199dcfb38fc8cd4d4a0e8:05882267d3999884e0491134e98b1b53$" - } -} diff --git a/public/images/ui/legacy/pbinfo_stat.png b/public/images/ui/legacy/pbinfo_stat.png deleted file mode 100644 index 62ec3758772daea6013a4de5532575a66caf8116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^1whQk!3-pITwg5(Qk(%kA+A8$!NK9)wXI7Q-Kzj{ z7)yfuf*Bm1-ADteDDa3ZW?Ec4QuN(io6fN32b;e=)XJ@8wjxa57 z6;5`pyz#?~2;;a-r4XYn{3?!Y<6HKbItN$2xk}gw>0y zUzy)p<5e-!w)Vy<(87aih3;8-LtI=7KLTHk<}Jk-^i|&t;uc GLK6T7%VuW) diff --git a/public/images/ui/legacy/pbinfo_stat_numbers.json b/public/images/ui/legacy/pbinfo_stat_numbers.json deleted file mode 100644 index 9c74ee86dbc..00000000000 --- a/public/images/ui/legacy/pbinfo_stat_numbers.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "textures": [ - { - "image": "pbinfo_stat_numbers.png", - "format": "RGBA8888", - "size": { - "w": 117, - "h": 8 - }, - "scale": 1, - "frames": [ - { - "filename": "+1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "+2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 9, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "+3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 18, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "+4", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 27, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "+5", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 36, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "+6", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 45, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 54, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 63, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 72, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-4", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 81, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-5", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 90, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-6", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 99, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "0", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 108, - "y": 0, - "w": 9, - "h": 8 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:1f22b7cb085faf9e9764273fa5e70c28:afc5587ebacca78d178ac7e0c434591b:6537c634087637bb27e8a1edb1ee2e35$" - } -} diff --git a/public/images/ui/legacy/pbinfo_stat_numbers.png b/public/images/ui/legacy/pbinfo_stat_numbers.png deleted file mode 100644 index ee1453b21070f8de40a299a2d0c82c49093799cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmV;30eAk1P)NeVolC?^B79yfh4NP^lrY9U!*DY-V@3rV{hYdQ>YK;=1YJaz3T;`<^$DGJL<5 z0VRW87@CHmA>NuYKzH1TLC5xSzn%dVgI*Y#hCzM2e@<+(--30)Oref_gmu$R&9E*Q zKCPUg&65~>rQzm$c=)wGxON}pkE{!ZPit-h_?q;dhMV)@;n(^|U!-Qgl_%A@VDM** z28vT)T`)O@Pln{f8%r6yr(x9i(DP6xH!0n5bN5`F;gccxJgbFgqhZwe(DRg7RCba7 mA?H5)Du%PaS?j+(7uOe-FYwO$9P0Z30000aGx7IS8(W?BZR#K+fR> zdKYIGa4pEV(m;21BcvdOLb@oX#w6N||Hk-!EB%ba5WYMoi2;a+$P89q(Q(?bWqnK1js?_P5*2T3V0acimCcp71_vhnu(jb5jIunqv- zU|m?J^YT3J;D0uwQBe98btaL0--i&Q%orEbYPFKro2Hw%bs$(LP1z0Bn7Fmy_dE4% zMRfpBN}Xl?_f7}_DJACfdG6;*DGY~0t+A6v4#Sx>8X@+5UvHKdwn^skG{U|W(s&x7 z*QuwrAFS-cx>Cy61NqkdXW#0iF_3fBLidQcv~I9QcYG^xiwstFvMunJ#6@+wo@071 z6=j=LzJ;IG-9*kySisI*Q}3$_A-J?SlT8{I?O!P+!f>JWs8i-krl0glDKjDTt88$>!uSb_l5uf002ovPDHLk FV1lYA{=)zO delta 487 zcmVIk&UmVKT0GxPa8d!07jZZ!ddIBQBbh_PFZe&65JuT|9nKq=MA`2Ra01f-NW z91f+QE2Xg6Y_!guHF6k+mXtE_eP3^s9ZQpWyFcUJ3~9SRW4V~*j$cQ1WnC#{?2Y{H zp1HO|plBRLh_0>&dpk(u@=|B3Ul!cn-d9Bu|Irn<2(MATii<NL1q8595j002ovPDHLkV1ifd@6!MP diff --git a/public/images/ui/pbinfo_enemy_boss_stats.png b/public/images/ui/pbinfo_enemy_boss_stats.png deleted file mode 100644 index 7148a7af4759141abb5e2b39c02a17b45af905e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^n}ArJgAGVJb4-r_QjEnx?oJHr&dIz4a&~*VIEGZr zd3$>`-ysJ9)(e`BNfSH%{_kJqko58BL=U^z3cqSH|eR)57 zW1&p?=O4X~e>-L8TFuvct=1%`yX>BUe4QwNkl)q|N~u!nI~O4Yq?Ab0 z)cUDa4A$g)|GB+zjjyH$DNlu{Sp;D;RZA6(J^uv|5`cGRUYNim(gR9s1U zPC0iQQ-etbpCZ(@E->2xpqYObLeyev0QOIDQc7gm-04MCwVfaNvS^f20{C4#?Hk+n z_uXHMMb~Ko*z*>1x7*b&2cv4u=Wc00L_|bHM0D5>)LE${MNRhx00000NkvXXu0mjf DZ|lLNkl8GRYx|2)P*70tlomTy+AL)kaKVi zE&#J{fxIOH3ldw!o(@eA9|jTwfke-5G6qF2@~g-B0uhl?&o>!GQQmYRa=R?cyz5!T z`|(5+MftElx~(F4j)*+88Q$()i?q{0_b3h8Z?jzmZ4pWY0rr0qL21w(A*rB55THl| zr9t=9O$8-_0MJt!bXT2JP$CGRMv#IUK>#&^6m9ha8#1%t_N<261?l{K=~*1pAjk_btXV2r7AjK;-r zyc-`ce5q`T&+mUP){_|k&bdbFdlX{~)>_gu^?vW1V>+D%9edXZS(f#zwRw^xVO733 z=iJLT_%&7jLr5Bc=c*yJqh3v!6wCSI$(1zcmbE+B8p>2?Q-u1?3(9$bLGjrb(}}GC z&Tny{X#k#=SKD&ZXsreQPoB<=eZOzJOKWr2MgYCV+*TmByu~acA|fIpa@iluDW|ek SO(V4c0000EX>4Tx04R}tkv&MmP!xqvQ>7vm5sQd8WT;LSL`4J_sbUc+7C6sqP{?%e(K->QQng1AHR!9McVpc!PL) z)6zNb6Ngw)Qi#uq#|*k4@gvt|m)|%S92R(H$VeyWi9^IW<^6Ko+1t_sz&)j z#$|=`7H73wWzBo?7Y1|MN{Z{Wh7rRO;z&S*j4Dbf!$O31jT93}I*)qzha7)`Tr#;z zVB}ap1u7)R5B>+gXKUssC)}i96zF`h?T-;4unRP5w*7r<+l>>z{|sDdEq|pB%zTnw zYiZ#lpm!U%xNd3k9&ot>3_j_SAvuztmXOZ_?`QN)S)l(G=w5T@);!1Q1CXX!E#CkK zhrnoove!M{-PJy~e|wtq`vH(aagbUB zzo-t5uI_cI;7<`vL}@r@>=fw7Q_>^>xEhuomQto)FNAjEI4-`=cWfUYlv1Ys?$EX( z{-b279fr-f*TOp8O^+I^-|2j;`a~!KNp6au2K}h1f+CP)E`l2L=hG@E0!flV4f^#- z6%>Ia27#GDAc;X>X8YJF+efPS#oQskn5pI%x-*WUY4S8Vs<2+QHAobJnOn>qX}QG= c008jX1y1rsg=?D3Y5)KL07*qoM6N<$f~t=qVE_OC diff --git a/public/images/ui/pbinfo_enemy_type.png b/public/images/ui/pbinfo_enemy_type.png index 9bac63e5e72ba305c0c7769d72bc39d72aa8202e..021a120070c1872b54405196e4bcb2cec9920d06 100644 GIT binary patch literal 1502 zcmXw3e>l^59RD&u=ccklkrpRr5<fnh6k_S2{W7L7M z-u$_fs5z|3JThfIZhj>vf2A;Ol~}!6vHB@x@25&&4P&{!zP?c%v(a_#GdV;0!csb% zA(cw)w?mv{dgKx@KK_97)X;g^K{d`JFaZG6pgT(rpiuV%fC9_Y1sM=E+Hi-6({=yG zxoCXs&Z*1^4UcG#nDE;8NB&feT+%pQDt-9g(#mvpj&!dCxj4~1iTcj#WUk(Yh+O{m zxmHG){;FeW(-VZ1x9ZY?^zZ;D@MFk&A_&BKeql53NRSK2!S_KE=XJ9PmmDj*ZIYx~ zTg9pyr*I9=_cN%IW))RtSLGltUlzv+_dpo1cVx9E_YL;E)(~hH+7v8>_uNQ7A?d3n z*^lR<-JJn9yxt;uln$25#AKM%>8vasJgBHuQ+Vg-@<^UVWu7?2V6u&>38Tba{J}$S zV(f(tS-AhEz1Ga$$KYO!W|{d#Nf^fyNsDe77C;Id)&1~GVO*Hi@$iS&N!kgxts2$B zoJg@T<&}T%q;UIkzxjl4ihwuOxg8^Qdc*I%T7TpsOW(<1mzVUoj29K0r1|{pdgna4 z&8kKv9m6CE%W?Vx;(Wv35O8L*OA^$tu8BJYzo)r85@ExX)EQwyx&s$$jDFNM?6E_dii|3k`+mD)0Rjpr!9)ox>gN7O_05b$7 zh-Cmw;T1baQQ6?w$OJ8Uauw2!Me)&j+nD%Fv4R-V8kMt5p#B zRX0wvKmR%XS;e0{gV-bjt2gvFYW~diB zxSs22nK2yIv0XE_6Y1Uh@j;mitpMW~gtb^0y+bJzYJoU}Jg2zmLC;7ujHm0vjKSPE zg<^<;G5AV}M~dZzHrN@Cby}FF@n8VN@W!-aYc_h{(yu;zS6zWXk)NFb+gdy6jJ+Mo z-RyzY@62$Nspw+%(#I`y5qTW8TLpF~I=ekdrM>;Ixen@t3;az~zkui1`J#0Hqb`?D zqMfOe)lOehL2>?PC)Fab1F?7AR^2eNqTNouQZ82b*?Ul1^-N=cO^x6f)MUrqYFX&n zViWJ!OIQOzgMFmuD7_PG3~z9tE{XiFK3mpPg~H9eH^R83^8Kv3ui9VkXvf%E_uRtr zVO;!3?U5RE+iSNHR2%4!Bmqi)drkKzt5!(KDPMU8!`o}EcntfsWNDGD3<`*Q6At0BKS`47C$X9aYeb!_U0x*TY~<5hSE8n8iUmue1aT_L@j9XO;i@vXJOa= zM!DY1da9gR_TgAx-U6pN%Y0^L29=$c?$kOmqRmkk&xRY|vZGU#hT1`nxk{fTg@1Z+ znzkPF5qP7j)Q?j2LVj7U0RES|Vh$hWlH9jho!K42`>;mfZ)as?!3|Ci&Ckvg-UnVo resupsym6>#pP=$lydvQr&2;62s?XefC_i8JmjRxxJ}&H2p_%^y$!^{i literal 3599 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 diff --git a/public/images/ui/pbinfo_player.png b/public/images/ui/pbinfo_player.png index fee08f71044ee488bd172bf9b02db706a9cf4082..9d3e03bd66d86cdf8ab3cfd59be4ef9d6410ccd5 100644 GIT binary patch delta 616 zcmV-u0+;>k1daueF@H!&L_t(|obBAdPTNo%hT%6=r7mDtOmVaZ|#D^=AwA$T>{|y z{`MMK0n4%gn9t{_=Z;1rTz8s03~k$XIW5~GzVAQ(BKK9E&tTg&t~=GuVw47V*Ecn{ zq+W@M;5bfWQX%fXAUY0k`1iGCS&iu$vV0E5aexf}HGd3;XC*YPKAz_Re{P;O?Z=(J z@3P-4P6>ipC$SJTFR}T;@LhT#Kr@~tNIX4Rlr7F3ih1JlvSD0}h;CUMrfz+?^FUrW92r7(fq+sU8C^NhOn2+~R33uoA15d^47ggK
u*i{Slh@`p?1>g%h%6Cw5J!=T0U*R1MnDJ6|U#*Z*JkoesN4y6h&V9 zS^IL#rHNpS$$z3KVzb$F)3Ol+L9lnip}Z&_gDU{iG###yJqW`PfbDi$yYFhX!dhEB z4IRgEH!YixG)-SW$f;^_3~?M|t<_*LPlNlL+mTx`uF6D6l4LfiP&6*cw*!3q`#KE6 z*>nv)$B`rn;PGFB@1WyQS!;op!Bg3K(f(8CKUlOl=YJNph0sZ>!pgJLse-2Lyi&dt}*K+!0R$E0vTWLUzE`_5mXrc zsQaRf);@*cL$jCTsXOrp#Tb)a{=Cd~yPcLDF5CP8>N7zOZ`s!|s^Ay5~jkO`|t=mu+hfnI_k z=inM#0M>Zx5s;aZNL^66l`fsq0gNCG1sw9X?>Cu1(1-l#*$DxNh%_t9$+kU+E$jPQ zwNL@#_zq#X{59{lreA2=gSdO&%~lna!$zEJhMTf#p=vQ&8km0u^%t$9gC&BAKmZI9 zfoaej`>DW0AOII80@I**bSf|r2*3r2z%*#CXdQ8nKpSiX0>DO~Ej9uH;N|1Lr!OCk z|9z~BkFR$CK&RD99q;S3dWF_jB}TWHN28}aYPmWoB_8}&0Km$brjE76Y>xK$v+x@8 zG8_(1e#Z0OcDH|+jT6CjT?ipePcMYyIJb;z7>41Gsv{dh>cWt0R&T-FUZ9s?$T_$M z7l7HfK;Dvp1&OUH5K*IY>CJ^)^|N88NNC4pVs+=4}QGTmJ(3~vGe$D%9 z=$A!Nln?u(Y8Bx=BIU(qc)3?Ccq~Cn18LBHo9*gki69XmDIk9lNQ3S;P6ZMHlCDey z(x7{MDv$_}bVVYN2HmyUuGk}Bhem)T8UcGW0wi(y`1JhcWAML^ZL!&|BuT^msC0bn znVUT57V~&KuA`Qlv)1Y@{gNcD<5}t0Th136Ouiehu`ZX)k+t@4i#a$Ek|dEaCiL`1 z#BqEW7bo8HP4R#J`Jwe>CP{M6HBw()j4`s-DoxYU_nmW^PNyfwu5N@Z%X-$@JV}zU zDj%G4?%^B!KbQQ5<1~;eTs0Iss;zudEa!_mSJIraxeHnvd@8glLd*6A{^x002ovPDHLkV1g-F&x8N~ diff --git a/public/images/ui/pbinfo_player_mini_stats.png b/public/images/ui/pbinfo_player_mini_stats.png deleted file mode 100644 index 7ce3bd1af1e541826337cedf9f284a5d14d9661d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 648 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 diff --git a/public/images/ui/pbinfo_player_type2.png b/public/images/ui/pbinfo_player_type2.png index 6d94871e8da1dfd56a0271a6a8ef1ae8e9d6c3c4..89b84d7f6305169db2e227aa33a9e2202cdeebfa 100644 GIT binary patch delta 1352 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 Wt8RFN+!3I289ZJ6T-G@yGywokWokPB diff --git a/public/images/ui/pbinfo_stat_numbers.json b/public/images/ui/pbinfo_stat_numbers.json deleted file mode 100644 index ec4f7117bb7..00000000000 --- a/public/images/ui/pbinfo_stat_numbers.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "textures": [ - { - "image": "pbinfo_stat_numbers.png", - "format": "RGBA8888", - "size": { - "w": 117, - "h": 8 - }, - "scale": 1, - "frames": [ - { - "filename": "1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 9, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 18, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "4", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 27, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "5", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 36, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "6", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 45, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-1", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 54, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-2", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 63, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-3", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 72, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-4", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 81, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-5", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 90, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "-6", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 99, - "y": 0, - "w": 9, - "h": 8 - } - }, - { - "filename": "0", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 9, - "h": 8 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 9, - "h": 8 - }, - "frame": { - "x": 108, - "y": 0, - "w": 9, - "h": 8 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b0719fae0d9b670a727148cdc7202249:afc5587ebacca78d178ac7e0c434591b:4825a9f02f72f1fe28a724c6c5dffb37$" - } -} diff --git a/public/images/ui/pbinfo_stat_numbers.png b/public/images/ui/pbinfo_stat_numbers.png deleted file mode 100644 index c778ba992734421a718b2c49db1db0ae77a28e09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430 zcmV;f0a5;mP)X}UpFSFJe%YMSjb zvz=}Te=dw_+OM;>zwNiTz<(WGW!%j?&)@0VTARh5OWbc`j(J{Tok%Zt#$YoH;sBj7 z0D#IlJRc6p%*|?r>-8D{#_^;+F^22I1yqy`_PebZNKrNbfWEEq_WF{{oLyYu^!yS4 z#PO(4jM4P@WGYS8UqlLVGYqiSvW&F&OBuS>FtHC$Vz?0ZyX|CN5<3@SjG<>5X2}?8 zQ)v+?7z&xQg%~oUa!zD?QzeEgj_Hh<7_VVM6DZ`EEo4UD)*|DZy2Lt;DavMIyoRBA zxP2Ty%KN9gENZI8IE_78Q^T$GD~(@jhsGYQsdI~*V!X;!+J?fg{Gd2S+NQZaWGcsm zi<{b~a&9zLI&@IbQb7LyuD?x7eaKXf@hzMCJ+VH0TaTtDpMHPh p)) - p.toggleStats(pressed); - if (pressed) - this.setLastProcessedMovementTime(Button.STATS); - } else - return; - } + } else + return; if (inputSuccess && this.enableVibration && typeof navigator.vibrate !== 'undefined') navigator.vibrate(vibrationLength || 10); } @@ -1454,7 +1443,7 @@ export default class BattleScene extends SceneBase { * or not. It will only return true once, until the key is released and pressed down * again. */ - gamepadButtonJustDown(button: Phaser.Input.Gamepad.Button): boolean { + gamepadButtonJustDown(button: Phaser.Input.Gamepad.Button) : boolean { if (!button || !this.gamepadSupport) return false; @@ -1474,23 +1463,6 @@ export default class BattleScene extends SceneBase { return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustDown(k)) || this.gamepadButtonJustDown(gamepad?.buttons[this.gamepadKeyConfig[button]]); } - /** - * gamepadButtonJustUp returns true if @param button has just been released - * or not. It will only return true once, until the key is released and pressed down - * again. - */ - gamepadButtonJustUp(button: Phaser.Input.Gamepad.Button): boolean { - if (!button || !this.gamepadSupport) - return false; - - return !this.gamepadButtonStates[button.index]; - } - - buttonJustReleased(button: Button): boolean { - const gamepad = this.input.gamepad?.gamepads[0]; - return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustUp(k)) || this.gamepadButtonJustUp(gamepad?.buttons[this.gamepadKeyConfig[button]]); - } - /** * repeatInputDurationJustPassed returns true if @param button has been held down long * enough to fire a repeated input. A button must claim the movementButtonLock before diff --git a/src/data/splash-messages.ts b/src/data/splash-messages.ts index 198ff07cec9..11629cf05d7 100644 --- a/src/data/splash-messages.ts +++ b/src/data/splash-messages.ts @@ -33,5 +33,6 @@ splashMessages.push(...[ 'Also Try Emerald Rogue!', 'Also Try Radical Red!', 'Eevee Expo!', - 'YNOproject!' + 'YNOproject!', + 'Shh, don\'t tell Sam!' ]); \ No newline at end of file diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 7072875d3ce..9a7bfb48621 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1179,10 +1179,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.battleInfo.updateInfo(this, instant); } - toggleStats(visible: boolean): void { - this.battleInfo.toggleStats(visible); - } - addExp(exp: integer) { const maxExpLevel = this.scene.getMaxExpLevel(); const initialExp = this.exp; diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 875d618ec0f..2f37b900ab5 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -39,21 +39,15 @@ export class LoadingScene extends SceneBase { } this.loadAtlas('namebox', 'ui'); this.loadImage('pbinfo_player', 'ui'); - this.loadImage('pbinfo_player_stats', 'ui'); this.loadImage('pbinfo_player_mini', 'ui'); - this.loadImage('pbinfo_player_mini_stats', 'ui'); this.loadAtlas('pbinfo_player_type', 'ui'); this.loadAtlas('pbinfo_player_type1', 'ui'); this.loadAtlas('pbinfo_player_type2', 'ui'); this.loadImage('pbinfo_enemy_mini', 'ui'); - this.loadImage('pbinfo_enemy_mini_stats', 'ui'); this.loadImage('pbinfo_enemy_boss', 'ui'); - this.loadImage('pbinfo_enemy_boss_stats', 'ui'); this.loadAtlas('pbinfo_enemy_type', 'ui'); this.loadAtlas('pbinfo_enemy_type1', 'ui'); this.loadAtlas('pbinfo_enemy_type2', 'ui'); - this.loadAtlas('pbinfo_stat', 'ui'); - this.loadAtlas('pbinfo_stat_numbers', 'ui'); this.loadImage('overlay_lv', 'ui'); this.loadAtlas('numbers', 'ui'); this.loadAtlas('numbers_red', 'ui'); diff --git a/src/locales/de/tutorial.ts b/src/locales/de/tutorial.ts index f37afcae92d..2722c02ad45 100644 --- a/src/locales/de/tutorial.ts +++ b/src/locales/de/tutorial.ts @@ -20,10 +20,6 @@ export const tutorial: SimpleTranslationEntries = { "pokerus": `A daily random 3 selectable starters have a purple border. $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, - "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. - $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding shift.`, - "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. $Most non-consumable item effects will stack in various ways. diff --git a/src/locales/en/tutorial.ts b/src/locales/en/tutorial.ts index f37afcae92d..2722c02ad45 100644 --- a/src/locales/en/tutorial.ts +++ b/src/locales/en/tutorial.ts @@ -20,10 +20,6 @@ export const tutorial: SimpleTranslationEntries = { "pokerus": `A daily random 3 selectable starters have a purple border. $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, - "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. - $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding shift.`, - "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. $Most non-consumable item effects will stack in various ways. diff --git a/src/locales/es/tutorial.ts b/src/locales/es/tutorial.ts index f37afcae92d..2722c02ad45 100644 --- a/src/locales/es/tutorial.ts +++ b/src/locales/es/tutorial.ts @@ -20,10 +20,6 @@ export const tutorial: SimpleTranslationEntries = { "pokerus": `A daily random 3 selectable starters have a purple border. $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, - "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. - $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding shift.`, - "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. $Most non-consumable item effects will stack in various ways. diff --git a/src/locales/fr/tutorial.ts b/src/locales/fr/tutorial.ts index 55262b195ca..c9f8a392e1e 100644 --- a/src/locales/fr/tutorial.ts +++ b/src/locales/fr/tutorial.ts @@ -25,10 +25,6 @@ export const tutorial: SimpleTranslationEntries = { $violet. Si un starter que vous possédez l’a, essayez de $ l’ajouter à votre équipe. Vérifiez bien son résumé !`, - "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. - $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding shift.`, - "selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un. $Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents. $La plupart des effets des objets non-consommables se cumuleront de diverses manières. diff --git a/src/locales/it/tutorial.ts b/src/locales/it/tutorial.ts index f37afcae92d..2722c02ad45 100644 --- a/src/locales/it/tutorial.ts +++ b/src/locales/it/tutorial.ts @@ -20,10 +20,6 @@ export const tutorial: SimpleTranslationEntries = { "pokerus": `A daily random 3 selectable starters have a purple border. $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, - "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. - $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding shift.`, - "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. $Most non-consumable item effects will stack in various ways. diff --git a/src/phases.ts b/src/phases.ts index ceba555f2ce..8eda33de20e 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -2671,6 +2671,7 @@ export class StatChangePhase extends PokemonPhase { let random = false; + const allStats = Utils.getEnumValues(BattleStat); if (this.stats.length === 1 && this.stats[0] === BattleStat.RAND) { this.stats[0] = this.getRandomStat(); random = true; @@ -2711,11 +2712,8 @@ export class StatChangePhase extends PokemonPhase { for (let stat of filteredStats) pokemon.summonData.battleStats[stat] = Math.max(Math.min(pokemon.summonData.battleStats[stat] + levels.value, 6), -6); - applyPostStatChangeAbAttrs(PostStatChangeAbAttr, pokemon, filteredStats, this.levels, this.selfTarget); - - pokemon.updateInfo(); - - handleTutorial(this.scene, Tutorial.Stat_Change).then(() => super.end()); + applyPostStatChangeAbAttrs(PostStatChangeAbAttr, pokemon, filteredStats, this.levels, this.selfTarget) + this.end(); }; if (relLevels.filter(l => l).length && this.scene.moveAnimations) { @@ -3339,7 +3337,7 @@ export class TrainerVictoryPhase extends BattlePhase { const trainerType = this.scene.currentBattle.trainer.config.trainerType; if (vouchers.hasOwnProperty(TrainerType[trainerType])) { if (!this.scene.validateVoucher(vouchers[TrainerType[trainerType]]) && this.scene.currentBattle.trainer.config.isBoss) - this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [ modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType])); + this.scene.pushPhase(new ModifierRewardPhase(this.scene, modifierTypes.VOUCHER)); } this.scene.ui.showText(i18next.t('menu:trainerDefeated', { trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true) }), null, () => { diff --git a/src/tutorial.ts b/src/tutorial.ts index 88e88fa809c..918c68b9bb4 100644 --- a/src/tutorial.ts +++ b/src/tutorial.ts @@ -9,7 +9,6 @@ export enum Tutorial { Menu = "MENU", Starter_Select = "STARTER_SELECT", Pokerus = "POKERUS", - Stat_Change = "STAT_CHANGE", Select_Item = "SELECT_ITEM", Egg_Gacha = "EGG_GACHA" } @@ -43,11 +42,6 @@ const tutorialHandlers = { scene.ui.showText(i18next.t("tutorial:pokerus"), null, () => scene.ui.showText('', null, () => resolve()), null, true); }); }, - [Tutorial.Stat_Change]: (scene: BattleScene) => { - return new Promise(resolve => { - scene.showFieldOverlay(1000).then(() => scene.ui.showText(i18next.t("tutorial:statChange"), null, () => scene.ui.showText('', null, () => scene.hideFieldOverlay(1000).then(() => resolve())), null, true)); - }); - }, [Tutorial.Select_Item]: (scene: BattleScene) => { return new Promise(resolve => { scene.ui.setModeWithoutClear(Mode.MESSAGE).then(() => { diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 3c2b541c618..ae794a256fa 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -7,9 +7,6 @@ import { StatusEffect } from '../data/status-effect'; import BattleScene from '../battle-scene'; import { Type, getTypeRgb } from '../data/type'; import { getVariantTint } from '#app/data/variant'; -import { BattleStat } from '#app/data/battle-stat'; - -const battleStatOrder = [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.ACC, BattleStat.EVA, BattleStat.SPD ]; export default class BattleInfo extends Phaser.GameObjects.Container { private player: boolean; @@ -27,7 +24,6 @@ export default class BattleInfo extends Phaser.GameObjects.Container { private lastLevelExp: integer; private lastLevel: integer; private lastLevelCapped: boolean; - private lastBattleStats: string; private box: Phaser.GameObjects.Sprite; private nameText: Phaser.GameObjects.Text; @@ -50,11 +46,6 @@ export default class BattleInfo extends Phaser.GameObjects.Container { public expMaskRect: Phaser.GameObjects.Graphics; - private statsContainer: Phaser.GameObjects.Container; - private statsBox: Phaser.GameObjects.Sprite; - private statValuesContainer: Phaser.GameObjects.Container; - private statNumbers: Phaser.GameObjects.Sprite[]; - constructor(scene: Phaser.Scene, x: number, y: number, player: boolean) { super(scene, x, y); this.player = player; @@ -147,6 +138,18 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.levelNumbersContainer = this.scene.add.container(9.5, (this.scene as BattleScene).uiTheme ? 0 : -0.5); this.levelContainer.add(this.levelNumbersContainer); + this.type1Icon = this.scene.add.sprite(player ? -139 : -15, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type1`); + this.type1Icon.setOrigin(0, 0); + this.add(this.type1Icon); + + this.type2Icon = this.scene.add.sprite(player ? -139 : -15, player ? -1 : -2.5, `pbinfo_${player ? 'player' : 'enemy'}_type2`); + this.type2Icon.setOrigin(0, 0); + this.add(this.type2Icon); + + this.type3Icon = this.scene.add.sprite(player ? -154 : 0, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type`); + this.type3Icon.setOrigin(0, 0); + this.add(this.type3Icon); + if (this.player) { this.hpNumbersContainer = this.scene.add.container(-15, 10); this.add(this.hpNumbersContainer); @@ -168,46 +171,6 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.expBar = expBar; this.expMaskRect = expMaskRect; } - - this.statsContainer = this.scene.add.container(0, 0); - this.statsContainer.setAlpha(0); - this.add(this.statsContainer); - - this.statsBox = this.scene.add.sprite(0, 0, `${this.getTextureName()}_stats`); - this.statsBox.setOrigin(1, 0.5); - this.statsContainer.add(this.statsBox); - - const statLabels: Phaser.GameObjects.Sprite[] = []; - this.statNumbers = []; - - this.statValuesContainer = this.scene.add.container(0, 0); - this.statsContainer.add(this.statValuesContainer); - - battleStatOrder.map((s, i) => { - const statX = i > 1 ? this.statNumbers[i - 2].x + this.statNumbers[i - 2].width + 4 : -this.statsBox.width + 8; - const statY = -this.statsBox.height / 2 + 4 + (i < battleStatOrder.length - 1 ? (i % 2 ? 10 : 0) : 5); - const statLabel = this.scene.add.sprite(statX, statY, 'pbinfo_stat', BattleStat[s]); - statLabel.setOrigin(0, 0); - statLabels.push(statLabel); - this.statValuesContainer.add(statLabel); - - const statNumber = this.scene.add.sprite(statX + statLabel.width, statY, 'pbinfo_stat_numbers', '3'); - statNumber.setOrigin(0, 0); - this.statNumbers.push(statNumber); - this.statValuesContainer.add(statNumber); - }); - - this.type1Icon = this.scene.add.sprite(player ? -139 : -15, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type1`); - this.type1Icon.setOrigin(0, 0); - this.add(this.type1Icon); - - this.type2Icon = this.scene.add.sprite(player ? -139 : -15, player ? -1 : -2.5, `pbinfo_${player ? 'player' : 'enemy'}_type2`); - this.type2Icon.setOrigin(0, 0); - this.add(this.type2Icon); - - this.type3Icon = this.scene.add.sprite(player ? -154 : 0, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type`); - this.type3Icon.setOrigin(0, 0); - this.add(this.type3Icon); } initInfo(pokemon: Pokemon) { @@ -295,14 +258,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.expMaskRect.x = (pokemon.levelExp / getLevelTotalExp(pokemon.level, pokemon.species.growthRate)) * 510; this.lastExp = pokemon.exp; this.lastLevelExp = pokemon.levelExp; - - this.statValuesContainer.setPosition(8, 7) } - - const battleStats = battleStatOrder.map(() => 0); - - this.lastBattleStats = battleStats.join(''); - this.updateBattleStats(battleStats); } getTextureName(): string { @@ -316,7 +272,6 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.mini = mini; this.box.setTexture(this.getTextureName()); - this.statsBox.setTexture(`${this.getTextureName()}_stats`); if (this.player) this.y -= 12 * (mini ? 1 : -1); @@ -329,34 +284,21 @@ export default class BattleInfo extends Phaser.GameObjects.Container { el.y += -8 * (mini ? 1 : -1); }); - this.statValuesContainer.x += 2 * (mini ? 1 : -1); - this.statValuesContainer.y += -7 * (mini ? 1 : -1); - const toggledElements = [ this.hpNumbersContainer, this.expBar ]; toggledElements.forEach(el => el.setVisible(!mini)); } - toggleStats(visible: boolean): void { - this.scene.tweens.add({ - targets: this.statsContainer, - duration: Utils.fixedInt(125), - ease: 'Sine.easeInOut', - alpha: visible ? 1 : 0 - }); - } - updateBossSegments(pokemon: EnemyPokemon): void { const boss = !!pokemon.bossSegments; if (boss !== this.boss) { this.boss = boss; - [ this.nameText, this.genderText, this.teraIcon, this.splicedIcon, this.shinyIcon, this.ownedIcon, this.statusIndicator, this.levelContainer, this.statValuesContainer ].map(e => e.x += 48 * (boss ? -1 : 1)); + [ this.nameText, this.genderText, this.teraIcon, this.splicedIcon, this.shinyIcon, this.ownedIcon, this.statusIndicator, this.levelContainer ].map(e => e.x += 48 * (boss ? -1 : 1)); this.hpBar.x += 38 * (boss ? -1 : 1); this.hpBar.y += 2 * (this.boss ? -1 : 1); this.hpBar.setTexture(`overlay_hp${boss ? '_boss' : ''}`); this.box.setTexture(this.getTextureName()); - this.statsBox.setTexture(`${this.getTextureName()}_stats`); } this.bossSegments = boss ? pokemon.bossSegments : 0; @@ -375,7 +317,6 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const divider = this.scene.add.rectangle(0, 0, 1, this.hpBar.height - (uiTheme ? 0 : 1), pokemon.bossSegmentIndex >= s ? 0xFFFFFF : 0x404040) divider.setOrigin(0.5, 0); this.add(divider); - this.moveBelow(divider as Phaser.GameObjects.GameObject, this.statsContainer); divider.setPositionRelative(this.hpBar, dividerX, uiTheme ? 0 : 1); this.hpBarSegmentDividers.push(divider); @@ -498,11 +439,6 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.lastLevel = pokemon.level; } - const battleStats = pokemon.summonData.battleStats.join(''); - - if (this.lastBattleStats !== battleStats) - this.updateBattleStats(pokemon.summonData.battleStats); - this.shinyIcon.setVisible(pokemon.isShiny()); resolve(); @@ -577,7 +513,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { }); } - setLevel(level: integer): void { + setLevel(level: integer) { const isCapped = level >= (this.scene as BattleScene).getMaxExpLevel(); this.levelNumbersContainer.removeAll(true); const levelStr = level.toString(); @@ -586,7 +522,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.levelContainer.setX((this.player ? -41 : -50) - 8 * Math.max(levelStr.length - 3, 0)); } - setHpNumbers(hp: integer, maxHp: integer): void { + setHpNumbers(hp: integer, maxHp: integer) { if (!this.player || !this.scene) return; this.hpNumbersContainer.removeAll(true); @@ -599,12 +535,6 @@ export default class BattleInfo extends Phaser.GameObjects.Container { for (let i = hpStr.length - 1; i >= 0; i--) this.hpNumbersContainer.add(this.scene.add.image(offset++ * -8, 0, 'numbers', hpStr[i])); } - - updateBattleStats(battleStats: integer[]): void { - battleStatOrder.map((s, i) => { - this.statNumbers[i].setFrame(battleStats[s].toString()); - }); - } } export class PlayerBattleInfo extends BattleInfo { From 6fd5709b13adfc71f6bf7b402df82af3f983477a Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Tue, 30 Apr 2024 23:02:16 -0400 Subject: [PATCH 041/110] Reapply stat change feature with fixes --- index.css | 4 + index.html | 3 + public/images/pbinfo_stat_numbers.json | 293 ++++++++++++++++++ .../ui/legacy/pbinfo_enemy_boss_stats.png | Bin 0 -> 435 bytes .../ui/legacy/pbinfo_enemy_mini_stats.png | Bin 0 -> 666 bytes .../ui/legacy/pbinfo_player_mini_stats.png | Bin 0 -> 674 bytes .../images/ui/legacy/pbinfo_player_stats.png | Bin 0 -> 285 bytes public/images/ui/legacy/pbinfo_stat.json | 188 +++++++++++ public/images/ui/legacy/pbinfo_stat.png | Bin 0 -> 263 bytes .../images/ui/legacy/pbinfo_stat_numbers.json | 293 ++++++++++++++++++ .../images/ui/legacy/pbinfo_stat_numbers.png | Bin 0 -> 392 bytes public/images/ui/pbinfo_enemy_boss.png | Bin 554 -> 526 bytes public/images/ui/pbinfo_enemy_boss_stats.png | Bin 0 -> 257 bytes public/images/ui/pbinfo_enemy_mini.png | Bin 888 -> 851 bytes public/images/ui/pbinfo_enemy_mini_stats.png | Bin 0 -> 642 bytes public/images/ui/pbinfo_enemy_type.png | Bin 1502 -> 3599 bytes public/images/ui/pbinfo_enemy_type1.png | Bin 1360 -> 3305 bytes public/images/ui/pbinfo_enemy_type2.png | Bin 1340 -> 3197 bytes public/images/ui/pbinfo_player.png | Bin 654 -> 619 bytes public/images/ui/pbinfo_player_mini.png | Bin 898 -> 860 bytes public/images/ui/pbinfo_player_mini_stats.png | Bin 0 -> 648 bytes public/images/ui/pbinfo_player_stats.png | Bin 0 -> 312 bytes public/images/ui/pbinfo_player_type1.png | Bin 1340 -> 3197 bytes public/images/ui/pbinfo_player_type2.png | Bin 1360 -> 3305 bytes public/images/ui/pbinfo_stat.json | 188 +++++++++++ public/images/ui/pbinfo_stat.png | Bin 0 -> 278 bytes public/images/ui/pbinfo_stat_numbers.json | 293 ++++++++++++++++++ public/images/ui/pbinfo_stat_numbers.png | Bin 0 -> 430 bytes src/battle-scene.ts | 72 +++-- src/data/splash-messages.ts | 3 +- src/field/pokemon.ts | 4 + src/loading-scene.ts | 6 + src/locales/de/tutorial.ts | 4 + src/locales/en/tutorial.ts | 4 + src/locales/es/tutorial.ts | 4 + src/locales/fr/tutorial.ts | 4 + src/locales/it/tutorial.ts | 4 + src/phases.ts | 10 +- src/tutorial.ts | 6 + src/ui/battle-info.ts | 102 +++++- 40 files changed, 1442 insertions(+), 43 deletions(-) create mode 100644 public/images/pbinfo_stat_numbers.json create mode 100644 public/images/ui/legacy/pbinfo_enemy_boss_stats.png create mode 100644 public/images/ui/legacy/pbinfo_enemy_mini_stats.png create mode 100644 public/images/ui/legacy/pbinfo_player_mini_stats.png create mode 100644 public/images/ui/legacy/pbinfo_player_stats.png create mode 100644 public/images/ui/legacy/pbinfo_stat.json create mode 100644 public/images/ui/legacy/pbinfo_stat.png create mode 100644 public/images/ui/legacy/pbinfo_stat_numbers.json create mode 100644 public/images/ui/legacy/pbinfo_stat_numbers.png create mode 100644 public/images/ui/pbinfo_enemy_boss_stats.png create mode 100644 public/images/ui/pbinfo_enemy_mini_stats.png create mode 100644 public/images/ui/pbinfo_player_mini_stats.png create mode 100644 public/images/ui/pbinfo_player_stats.png create mode 100644 public/images/ui/pbinfo_stat.json create mode 100644 public/images/ui/pbinfo_stat.png create mode 100644 public/images/ui/pbinfo_stat_numbers.json create mode 100644 public/images/ui/pbinfo_stat_numbers.png diff --git a/index.css b/index.css index 9a507ad6766..dd47387adee 100644 --- a/index.css +++ b/index.css @@ -150,6 +150,10 @@ body { display: none; } +#touchControls:not([data-ui-mode='COMMAND']):not([data-ui-mode='FIGHT']):not([data-ui-mode='BALL']):not([data-ui-mode='TARGET_SELECT']) #apad #apadStats { + display: none; +} + #apad .apadRectBtnContainer + .apadSqBtnContainer { top: calc(var(--controls-size) * -1.9); left: calc(var(--controls-size) * -0.9); diff --git a/index.html b/index.html index bd316330a99..177a92efce6 100644 --- a/index.html +++ b/index.html @@ -74,6 +74,9 @@
V
+
+ C +
Menu
diff --git a/public/images/pbinfo_stat_numbers.json b/public/images/pbinfo_stat_numbers.json new file mode 100644 index 00000000000..32170690aa0 --- /dev/null +++ b/public/images/pbinfo_stat_numbers.json @@ -0,0 +1,293 @@ +{ + "textures": [ + { + "image": "pbinfo_stat_numbers.png", + "format": "RGBA8888", + "size": { + "w": 117, + "h": 8 + }, + "scale": 1, + "frames": [ + { + "filename": "+1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 9, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 18, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+4", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 27, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+5", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 36, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+6", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 45, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 54, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 63, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 72, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-4", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 81, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-5", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 90, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-6", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 99, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "0", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 108, + "y": 0, + "w": 9, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:794aa4af3291db5abd8a2667626c1998:1a6706ad557b92f9bf099c23e02af4a6:6537c634087637bb27e8a1edb1ee2e35$" + } +} diff --git a/public/images/ui/legacy/pbinfo_enemy_boss_stats.png b/public/images/ui/legacy/pbinfo_enemy_boss_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..94c9f2a181736d88c6752f2c97ed0bbbee23ebcc GIT binary patch literal 435 zcmeAS@N?(olHy`uVBq!ia0vp^n}ArJgAGVJb4-r_QjEnx?oJHr&dIz4vU5FM978JR zyuG8?cgR7a?csXf_7^8kc|Ex$m-yBz<$7q-n^RU*Eb9Vy3q^L$xwlCBgn&~-ln2-0 zC$%D(Zao#Zd6NElh+n&%^Pj+>91Q?jM7YZ*~R6rK6tBHXtJ>3o}%+B70Tit?}|9LLp3388Oyx(ny$dZ`X4n6UD>PshjO%e?;W3et7Lx@QEIV2LHO-ZhLc6eY9Ry zIQ|Mdb1{9R)SaoXcSRIE<`z6H%nuWjbE9V$ zXGWbr(B0xb=lC1f6GDcM4fWFUoyzXm2QNAn5;^S^|FUJBo0|`=UT>R$XHs^CNV z##av>ty$f?T7lzV!;W1Rn!7wYzpJ*28OBxY>HqxBa!BncE&SaXRbV6dDO(__3L?7E8i*EoZkKZ{HwqsHRc+nk205eyDOS2sxDu$ zd@tM{5g62QzVkTGE`^WE*Hfq8w-A>Rt4KTHq5izn`AE{j-lt}1uFk6Sl=!q)x&3rH zmfHGREPZQC>e=c~;%vpYyt-a*X%jpw^vJ`ZrANz4IZ?ukeBYJTaNN^-KBA z)J%%Y&U~o6pj>*#j=aoIas@k?dF)+-(V{Q3XI{exr|Grpv%NI5;(qK@ xp0+UKM9$<@NoVioZhp6Q^O64&v*v`HV4ZIk%FUH_dOOew44$rjF6*2UngE&&E5rZ* literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/pbinfo_player_mini_stats.png b/public/images/ui/legacy/pbinfo_player_mini_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..dd2b7e65ba3522986e78d6844a6be8823c3382ae GIT binary patch literal 674 zcmV;T0$u%yP)EX>4Tx04R}tkv&MmKpe$iQ%gl!9Lyl%kfA!+MMWJ;6^me@v=v%)FuC*#nzSS- zE{=k0!NHHks)LKOt`4q(Aou~|>f)s6A|?JWDYS_3;J6>}?mh0_0Ya# zo%24i$jY)xd`>)J&;^MfxvseU#<}FMz%xZ7o1P~YiKS8xD?QB0hDJP198oo$@`aqs zD(5ZETD8GC_v9}O74(%1*J+L-fh8o7qK*_aP(c+IqO|Iym`Kxp+`~WO_*3Lk$W;L& z#{z25AUl5WKlt6PS)7`5lR|MI@M7B^V?b~hXg6*9``EVICxHJMxYE1+S__!_B)!?y zB1gdBHgIv>)s#Kpat9cGs>_D#NPe0^u?W1M(KqFRp<7^J&F!tTkJASrOIK2l+uOfqI{p0s^F(smE#4Fv0000mP)t-s0001cl!Q`iV>wbnAvplXy>s5y zwg3O#*3P|BYg+%cd;kCcN$J_5c5S*Us$?%8vTKwfg`6|6Wc}-=`Gc19G2( z)VthFjRI1_B|(0{3_xi#U}t|v7bsoq>Eaj?(fam=p-_VZhjU<>!iIbQ4@G5d*>KA2 zr+S66yVASV%+m`tUAT0h%_Vu-2F6#OE9N=hF1aYEASTnz@k_ZzU>c{|jD#j+;!l_T zYhIRn;@{452VTh2;XbSE{bIVBSPWaCe#7lsobz5x%h_{T;XlZgp00i_>zopr0I}G2 ADF6Tf literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/pbinfo_stat.json b/public/images/ui/legacy/pbinfo_stat.json new file mode 100644 index 00000000000..b7da47fc192 --- /dev/null +++ b/public/images/ui/legacy/pbinfo_stat.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "pbinfo_stat.png", + "format": "RGBA8888", + "size": { + "w": 112, + "h": 6 + }, + "scale": 1, + "frames": [ + { + "filename": "SPATK", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 19, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 18, + "h": 6 + }, + "frame": { + "x": 0, + "y": 0, + "w": 18, + "h": 6 + } + }, + { + "filename": "SPDEF", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 19, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 18, + "h": 6 + }, + "frame": { + "x": 18, + "y": 0, + "w": 18, + "h": 6 + } + }, + { + "filename": "CRIT", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 17, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 16, + "h": 6 + }, + "frame": { + "x": 36, + "y": 0, + "w": 16, + "h": 6 + } + }, + { + "filename": "ACC", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 13, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 12, + "h": 6 + }, + "frame": { + "x": 52, + "y": 0, + "w": 12, + "h": 6 + } + }, + { + "filename": "ATK", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 13, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 12, + "h": 6 + }, + "frame": { + "x": 64, + "y": 0, + "w": 12, + "h": 6 + } + }, + { + "filename": "DEF", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 13, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 12, + "h": 6 + }, + "frame": { + "x": 76, + "y": 0, + "w": 12, + "h": 6 + } + }, + { + "filename": "EVA", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 13, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 12, + "h": 6 + }, + "frame": { + "x": 88, + "y": 0, + "w": 12, + "h": 6 + } + }, + { + "filename": "SPD", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 13, + "h": 8 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 12, + "h": 6 + }, + "frame": { + "x": 100, + "y": 0, + "w": 12, + "h": 6 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:40d30205ce8efd40dfa86cd11b0491d6:7076db6ed74199dcfb38fc8cd4d4a0e8:05882267d3999884e0491134e98b1b53$" + } +} diff --git a/public/images/ui/legacy/pbinfo_stat.png b/public/images/ui/legacy/pbinfo_stat.png new file mode 100644 index 0000000000000000000000000000000000000000..62ec3758772daea6013a4de5532575a66caf8116 GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^1whQk!3-pITwg5(Qk(%kA+A8$!NK9)wXI7Q-Kzj{ z7)yfuf*Bm1-ADteDDa3ZW?Ec4QuN(io6fN32b;e=)XJ@8wjxa57 z6;5`pyz#?~2;;a-r4XYn{3?!Y<6HKbItN$2xk}gw>0y zUzy)p<5e-!w)Vy<(87aih3;8-LtI=7KLTHk<}Jk-^i|&t;uc GLK6T7%VuW) literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/pbinfo_stat_numbers.json b/public/images/ui/legacy/pbinfo_stat_numbers.json new file mode 100644 index 00000000000..9c74ee86dbc --- /dev/null +++ b/public/images/ui/legacy/pbinfo_stat_numbers.json @@ -0,0 +1,293 @@ +{ + "textures": [ + { + "image": "pbinfo_stat_numbers.png", + "format": "RGBA8888", + "size": { + "w": 117, + "h": 8 + }, + "scale": 1, + "frames": [ + { + "filename": "+1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 9, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 18, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+4", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 27, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+5", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 36, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "+6", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 45, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 54, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 63, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 72, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-4", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 81, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-5", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 90, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-6", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 99, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "0", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 108, + "y": 0, + "w": 9, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:1f22b7cb085faf9e9764273fa5e70c28:afc5587ebacca78d178ac7e0c434591b:6537c634087637bb27e8a1edb1ee2e35$" + } +} diff --git a/public/images/ui/legacy/pbinfo_stat_numbers.png b/public/images/ui/legacy/pbinfo_stat_numbers.png new file mode 100644 index 0000000000000000000000000000000000000000..ee1453b21070f8de40a299a2d0c82c49093799cc GIT binary patch literal 392 zcmV;30eAk1P)NeVolC?^B79yfh4NP^lrY9U!*DY-V@3rV{hYdQ>YK;=1YJaz3T;`<^$DGJL<5 z0VRW87@CHmA>NuYKzH1TLC5xSzn%dVgI*Y#hCzM2e@<+(--30)Oref_gmu$R&9E*Q zKCPUg&65~>rQzm$c=)wGxON}pkE{!ZPit-h_?q;dhMV)@;n(^|U!-Qgl_%A@VDM** z28vT)T`)O@Pln{f8%r6yr(x9i(DP6xH!0n5bN5`F;gccxJgbFgqhZwe(DRg7RCba7 mA?H5)Du%PaS?j+(7uOe-FYwO$9P0Z30000Ik&UmVKT0GxPa8d!07jZZ!ddIBQBbh_PFZe&65JuT|9nKq=MA`2Ra01f-NW z91f+QE2Xg6Y_!guHF6k+mXtE_eP3^s9ZQpWyFcUJ3~9SRW4V~*j$cQ1WnC#{?2Y{H zp1HO|plBRLh_0>&dpk(u@=|B3Ul!cn-d9Bu|Irn<2(MATii<NL1q8595j002ovPDHLkV1ifd@6!MP delta 515 zcmV+e0{s1s1gZp(F@NMqL_t(|obB6BYQjJm1@M;=C_;s9>aGx7IS8(W?BZR#K+fR> zdKYIGa4pEV(m;21BcvdOLb@oX#w6N||Hk-!EB%ba5WYMoi2;a+$P89q(Q(?bWqnK1js?_P5*2T3V0acimCcp71_vhnu(jb5jIunqv- zU|m?J^YT3J;D0uwQBe98btaL0--i&Q%orEbYPFKro2Hw%bs$(LP1z0Bn7Fmy_dE4% zMRfpBN}Xl?_f7}_DJACfdG6;*DGY~0t+A6v4#Sx>8X@+5UvHKdwn^skG{U|W(s&x7 z*QuwrAFS-cx>Cy61NqkdXW#0iF_3fBLidQcv~I9QcYG^xiwstFvMunJ#6@+wo@071 z6=j=LzJ;IG-9*kySisI*Q}3$_A-J?SlT8{I?O!P+!f>JWs8i-krl0glDKjDTt88$>!uSb_l5uf002ovPDHLk FV1lYA{=)zO diff --git a/public/images/ui/pbinfo_enemy_boss_stats.png b/public/images/ui/pbinfo_enemy_boss_stats.png new file mode 100644 index 0000000000000000000000000000000000000000..7148a7af4759141abb5e2b39c02a17b45af905e5 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^n}ArJgAGVJb4-r_QjEnx?oJHr&dIz4a&~*VIEGZr zd3$>`-ysJ9)(e`BNfSH%{_kJqko58BL=U^z3cqSH|eR)57 zW1&p?=O4X~e>-L8TFuvct=1%`yX>BUe4QLNkl8GRYx|2)P*70tlomTy+AL)kaKVi zE&#J{fxIOH3ldw!o(@eA9|jTwfke-5G6qF2@~g-B0uhl?&o>!GQQmYRa=R?cyz5!T z`|(5+MftElx~(F4j)*+88Q$()i?q{0_b3h8Z?jzmZ4pWY0rr0qL21w(A*rB55THl| zr9t=9O$8-_0MJt!bXT2JP$CGRMv#IUK>#&^6m9ha8#1%t_N<261?l{K=~*1pAjk_btXV2r7AjK;-r zyc-`ce5q`T&+mUP){_|k&bdbFdlX{~)>_gu^?vW1V>+D%9edXZS(f#zwRw^xVO733 z=iJLT_%&7jLr5Bc=c*yJqh3v!6wCSI$(1zcmbE+B8p>2?Q-u1?3(9$bLGjrb(}}GC z&Tny{X#k#=SKD&ZXsreQPoB<=eZOzJOKWr2MgYCV+*TmByu~acA|fIpa@iluDW|ek SO(V4c0000wNkl)q|N~u!nI~O4Yq?Ab0 z)cUDa4A$g)|GB+zjjyH$DNlu{Sp;D;RZA6(J^uv|5`cGRUYNim(gR9s1U zPC0iQQ-etbpCZ(@E->2xpqYObLeyev0QOIDQc7gm-04MCwVfaNvS^f20{C4#?Hk+n z_uXHMMb~Ko*z*>1x7*b&2cv4u=Wc00L_|bHM0D5>)LE${MNRhx00000NkvXXu0mjf DZ|lEX>4Tx04R}tkv&MmP!xqvQ>7vm5sQd8WT;LSL`4J_sbUc+7C6sqP{?%e(K->QQng1AHR!9McVpc!PL) z)6zNb6Ngw)Qi#uq#|*k4@gvt|m)|%S92R(H$VeyWi9^IW<^6Ko+1t_sz&)j z#$|=`7H73wWzBo?7Y1|MN{Z{Wh7rRO;z&S*j4Dbf!$O31jT93}I*)qzha7)`Tr#;z zVB}ap1u7)R5B>+gXKUssC)}i96zF`h?T-;4unRP5w*7r<+l>>z{|sDdEq|pB%zTnw zYiZ#lpm!U%xNd3k9&ot>3_j_SAvuztmXOZ_?`QN)S)l(G=w5T@);!1Q1CXX!E#CkK zhrnoove!M{-PJy~e|wtq`vH(aagbUB zzo-t5uI_cI;7<`vL}@r@>=fw7Q_>^>xEhuomQto)FNAjEI4-`=cWfUYlv1Ys?$EX( z{-b279fr-f*TOp8O^+I^-|2j;`a~!KNp6au2K}h1f+CP)E`l2L=hG@E0!flV4f^#- z6%>Ia27#GDAc;X>X8YJF+efPS#oQskn5pI%x-*WUY4S8Vs<2+QHAobJnOn>qX}QG= c008jX1y1rsg=?D3Y5)KL07*qoM6N<$f~t=qVE_OC literal 0 HcmV?d00001 diff --git a/public/images/ui/pbinfo_enemy_type.png b/public/images/ui/pbinfo_enemy_type.png index 021a120070c1872b54405196e4bcb2cec9920d06..9bac63e5e72ba305c0c7769d72bc39d72aa8202e 100644 GIT binary patch literal 3599 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 diff --git a/public/images/ui/pbinfo_enemy_type1.png b/public/images/ui/pbinfo_enemy_type1.png index 89b84d7f6305169db2e227aa33a9e2202cdeebfa..6d94871e8da1dfd56a0271a6a8ef1ae8e9d6c3c4 100644 GIT binary patch literal 3305 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 delta 1332 zcmV-41K;roK6x|8rVOt-T?ULCa%fweLZBshW_&&HC;* zO0vk;&DMDOm4U9|mAs4J&B(p@`1tjx^{$}s^^2`iam|Lp|9@hcy`Z4dqs6<(m4=$( z@Ycwh|J;Giu7~bbDWAdC&0W2FNPBZod$Y)zgQZ%P*Yx1fkon7G_No9%p+S^Ti}|f> zm8jtMc@R>*?(~L`sg$n0l(@~ZN?llm^Z)<=0d!JMQvg8b*k%9#010qNS#tmY4#WTe z4#WYKD-Ig~0DlAzNkl(^Y-#Wr6(Oj4xVAPdRD7!nD#iAB*BzHNIOCF7+K!2!Mo?4Ma{y?`n4?k5THGfPb znjaf?PygBd=;)}=AC3b1KsV?cB*s@ciU)rw57cPk>(CnArfu-@+b7_eU=Lj1OnvNcwffW0-uP_mXO_l4S!y5_eP^JhH)c@!3IEp%o=Epqlf^Q zdl4vm%oVI6jAf-z5$|I$U2Dmtnyz&NU|gM1Tovo?z9%sl038k@0T?JGHsIL@QDnrd zDzX{HYQ?=uvO=g-#FB$Nsuv5}+iLfdlS^uKdBRa(`I~AmiC0_`**#%3i+m|xZDaqP znSbbOs;KIv6AN{%B`!mDz1^R4OyqbTAb6NW0}$>+AUJ_2A{5z+2=NU>5xD9kiW7b_ ziQ3*&JDtuMz*$E^ zq5Oy)WOl}~7tbVB4ihDjPFJx4ljiYZ^SDMTc5Eak+VETLetdjNB~Onz3M4|@U_y^2 zIZTv9KC>90ws`^*7o%$YR54G)Z&akbQ~r1nO{!**|rqpNJ<0!EF`8Alxn}7E5 z(}~lmd`(2y!z<9KqCiv?B4ap}nkwRT+RHPkNNQz9jwytB>h0bPVUU_P&kYuaaOFk$ z8LiIGod{VZ7{z9D<;CVoyik#-*^P(`O#DR2_+sU8C^NhOn2+~R33uoA15d^47ggK
u*i{Slh@`p?1>g%h%6Cw5J!=T0U*R1MnDJ6|U#*Z*JkoesN4y6h&V9 zS^IL#rHNpS$$z3KVzb$F)3Ol+L9lnip}Z&_gDU{iG###yJqW`PfbDi$yYFhX!dhEB z4IRgEH!YixG)-SW$f;^_3~?M|t<_*LPlNlL+mTx`uF6D6l4LfiP&6*cw*!3q`#KE6 z*>nv)$B`rn;PGFB@1WyQS!;op!Bg3K(f(8CKUlOl=YJNph0sZ>!pgJLse-2Lyi&dt}*K+!0R$E0vTWLUzE`_5mXrc zsQaRf);@*cL$jCTsXOrp#Tb)a{=Cd~yPcLDF5CP8>Nk1daueF@H!&L_t(|obBAdPTNo%hT%6=r7mDtOmVaZ|#D^=AwA$T>{|y z{`MMK0n4%gn9t{_=Z;1rTz8s03~k$XIW5~GzVAQ(BKK9E&tTg&t~=GuVw47V*Ecn{ zq+W@M;5bfWQX%fXAUY0k`1iGCS&iu$vV0E5aexf}HGd3;XC*YPKAz_Re{P;O?Z=(J z@3P-4P6>ipC$SJTFR}T;@LhT#Kr@~tNIX4Rlr7F3ih1JlvSD0}h;CUMrfz+?^FUrW92r7(fqb;z7>41Gsv{dh>cWt0R&T-FUZ9s?$T_$M z7l7HfK;Dvp1&OUH5K*IY>CJ^)^|N88NNC4pVs+=4}QGTmJ(3~vGe$D%9 z=$A!Nln?u(Y8Bx=BIU(qc)3?Ccq~Cn18LBHo9*gki69XmDIk9lNQ3S;P6ZMHlCDey z(x7{MDv$_}bVVYN2HmyUuGk}Bhem)T8UcGW0wi(y`1JhcWAML^ZL!&|BuT^msC0bn znVUT57V~&KuA`Qlv)1Y@{gNcD<5}t0Th136Ouiehu`ZX)k+t@4i#a$Ek|dEaCiL`1 z#BqEW7bo8HP4R#J`Jwe>CP{M6HBw()j4`s-DoxYU_nmW^PNyfwu5N@Z%X-$@JV}zU zDj%G4?%^B!KbQQ5<1~;eTs0Iss;zudEa!_mSJIraxeHnvd@8glLd*6A{^x002ovPDHLkV1g-F&x8N~ delta 473 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 delta 1332 zcmV-41K;roK6x|8rVOt-T?ULCa%fweLZBshW_&&HC;* zO0vk;&DMDOm4U9|mAs4J&B(p@`1tjx^{$}s^^2`iam|Lp|9@hcy`Z4dqs6<(m4=$( z@Ycwh|J;Giu7~bbDWAdC&0W2FNPBZod$Y)zgQZ%P*Yx1fkon7G_No9%p+S^Ti}|f> zm8jtMc@R>*?(~L`sg$n0l(@~ZN?llm^Z)<=0d!JMQvg8b*k%9#010qNS#tmY4#WTe z4#WYKD-Ig~0DlAzNkl(^Y-#Wr6(Oj4xVAPdRD7!nD#iAB*BzHNIOCF7+K!2!Mo?4Ma{y?`n4?k5THGfPb znjaf?PygBd=;)}=AC3b1KsV?cB*s@ciU)rw57cPk>(CnArfu-@+b7_eU=Lj1OnvNcwffW0-uP_mXO_l4S!y5_eP^JhH)c@!3IEp%o=Epqlf^Q zdl4vm%oVI6jAf-z5$|I$U2Dmtnyz&NU|gM1Tovo?z9%sl038k@0T?JGHsIL@QDnrd zDzX{HYQ?=uvO=g-#FB$Nsuv5}+iLfdlS^uKdBRa(`I~AmiC0_`**#%3i+m|xZDaqP znSbbOs;KIv6AN{%B`!mDz1^R4OyqbTAb6NW0}$>+AUJ_2A{5z+2=NU>5xD9kiW7b_ ziQ3*&JDtuMz*$E^ zq5Oy)WOl}~7tbVB4ihDjPFJx4ljiYZ^SDMTc5Eak+VETLetdjNB~Onz3M4|@U_y^2 zIZTv9KC>90ws`^*7o%$YR54G)Z&akbQ~r1nO{!**|rqpNJ<0!EF`8Alxn}7E5 z(}~lmd`(2y!z<9KqCiv?B4ap}nkwRT+RHPkNNQz9jwytB>h0bPVUU_P&kYuaaOFk$ z8LiIGod{VZ7{z9D<;CVoyik#-*^P(`O#DR2_Nc=P)Px>qe(QJbv@}9BwInvjmRN~AA~$EW}N5&-bgs~suPG)r}LnHc~)Q}Q^r-oHsn?E(O=*P9Y4|J<z$QrZ&QnTawD4a0DK^lFFJ_{HuHso4{+>;+A~ zJDd>G0639lV(LcR&iJEOJDkNZ6IloW;OC^HYe{msJ)&;p$*YCG@CX1PHhB>7nLhJe zbEDUJE(1U?Fm0LvfWPnvf`Mr*b(UcmuI5Jh$=KvUZCQK78gD6~C$H8d8Hna{KSb`y ztJRXi>-DDkhtfZy#xK2`8o%_irJU-sl#b?Me5Q{Z496l$kxurSC1fe3gyLYZ@l(|y zafUSFZ1>_beFz4o5e!UQ%30BfD`UtKiG(68t7VeQ!Qw(?qb+6IaAEkY zl#p$plB!M?kPhy^=%lm}+dU#@6)Y~~W`*rtuV&X?N5mYVj?#%(N@)ybgWMX-BT)oi}3z>{){QOOX8fVRm)dfbJ-IuAG ztQjjUA&?HPNJ$DuauJT?n$)61O56J~(Ns0ur8Tw~$|%`^A#*ZTQA!EPfHf6~Rix52 zc3oh^VkDC|IK9yl^*jtU&RQlmNt{kvLZY&dAcXZT6^7gpx`iHHq{FJ`+f5; zzdn;SHq+3QcmavB48w5c*C*s>r&_IL>$aOOr+ado$)b#33Z)U|!rQmIrb zb>qYh^R=jJ`>v&KoVa1Wc9hGv{&5Qckl3F zGG?F4Y`ln0ciuwCQYQP7aM!xIMl9W`M_0jJ>*g-PQd$V9vAfo78O@y6bKtIZTQ0&% zn#-{#W1LxHf5LJslm7$1`o5glpD?>eO7O>uX>>mp4u**4T`0cea|uq)WaG*4WgLezT;ksf7?o2Unz|F0x%EBeqPW)Mg4x zlHIRgP;rEIl(#!uF<0$3<0y)yRK}2PO!1@NDq}!#U#59U-IUEinKn+?tg)$^E1M1@ zyFZ5P{+M=zrG!Lji=#4Jl3Z?SzvS5D0nZ8mK&gKv^7HeZ?|rFENatg>rFG5kmt~X> zcvf&Gtl2m5p8x=D%^SI{YY9a&q9QXTp^Q>RClZR3%6aJ2Oi3tG?hIygCV;-HMCoX4 zqoTDXB+BmhzDB8krET|Qlv2XQm?;T~GGiw)T#{T41m2W3C@sAg4Gj-+W!>Fh;QaaT z007bGOV01hkw}Hb3;-G$9z-Nkp`^|-48s+TzGNY@Q)%hF2n61Ac3&p4#>PR*IVzLU zn}#w<(Li+pky86^BgRS>JC0DK?C$=;wjo=GrIf~yriIQ-RY#i3G%sacl*N%0jlQJ6 zFE=(0TDl*JRA{HwGRft-exDTtuYQ5{h)=SBJE8oS{f*M@PpZrIJu= z=!DKAhveJ*{MJX6Q!ki0BBeA_*f`M-E7@RK2t`VE%CJW4IaWlej3G5Qg^jNUYqQ3AlN!HaM=2TekEbI^<*Nu+d~%S6bA zLrJKkBom6E7!HwAN=TK-h(?w*6T425KlkN%ni~XFV^RM23C(j~fkWoRc0#5kBuYm} zGQ%awUy~2Xm35XR=KEDIMo>w6`7rF#XxP0HBPa<@@DGxEOf_WhgA# z#hGobe#bPNnHshjHHJpj-!IQh4P$bw%VI|7bdu(>I4|=G%8>u?bINYAl#cdbXQqa2 z$&`dd>8Q2La7l9c`L?&E4Se}|s4UuGDQ`V~4ghehWoKr&Tv@aMt;f&d@Q%k!6FZq} zY?1Qtj>jxiRCapoD@;t!5T*SZ+n1lGBxpT;P8tTz&@c?wv6h`?p{@Z@(nX(dd)xW< z%WT)^m@ZaXw1GQEvgEQDOLnB$IMOkRVyPrlO&J-vl2AseB9iG?%TD|E!`9>HaC+=3 zyJ~7eqIB#a8ZJpL=eFqo9l*%^6fF@`zRmjFmu(CyACSLR$;@RH<;YI{Sfre7%Xhwy zEt;vySedyz+s6MXyRLiex!jg%XZPiUrD{XnIc|+DQUbt{^XkSVmeTgFclw+350LJv zjt)@da&F5s*O(~TW4Z{d*|vN&AvHKy%2TP#l!Qd7Zlc%H8Ex5m1h6| zmp|{ox^MPjg|`u_Hm4U*HxJzn0N8Xw@jUkEj|=a3&Rdheb9slR4LjFH`JUf&ce|E_E z{}svpterdVy{%tx0+Rc(Z~J@b|C1k`eV5_ROCq^$J(@P$iDMs6B01y6+V5ki*K;roK6x|8rVOt-T?ULCa%fweLZBshW_&&HA#) z*Ui>=uHluui{JW{fz8OhuAuPssP*{x`1OmehQj}QNPD25(tm@cTBF6g$d!hg;qd?5 zfl8r4*2tQaP>WJ=&CRZdVwt_}I7)L+d!ND9&0W3jRVlN`nw8h|;Lwoy%VhSd0F|iV z`K@jCc@WLAO7w=1sg$n0l(JYVN?hu22&L|x<$1xtHZ=fSB1)Trhy?v zoa3n3UrWrX;+*zippZEd6gn4+-m@z3Iz>?lBFaT&Gu~8G0(^~DNvbr&_PnBMxTl-6$7${0tvjq z8{UgbXK9_@DJo}*X;tK!C{;z0C&Nb2)Kns?;ACA*RXRszdZlWyMp0|ce(E9^i1>AC z)eNo5V6|GEI+X!`PEO^sgG}kXI%pvNf*4421%Km)KMzoI_Lmwn%y ztZ7sgQD}&wGNY#Crd6|N)KMlzb*y>R?0tz_zUsE$4+f_HsePl~CU|R9Qp9sA9r6>Z6O;EJ|jp?<^(Di!Uj&>*>2owya16-_YeAtY+jotiG{xT@Mxr{f#Y5=N~xdrxA@ zC8xb!FpvrJo>8YP=~h%yVuDc(Eb1X7I+dGsE$URqltB7vY+xP}HF}G#aR?K~-*Opgn&3-PS zot~cu122I~e$K7RlCDL)Bqwe~Re!Of9zvof{Xo^#sIjGUuWIvFtu_1KF#ukJgG*qU zVWNCbRn^UGyYWh2JDoHq~D#xXTM7g2Zlu?)I9;4Qp{qFAW*Dv79x39p@pRwMW z=p7aOM$e~DNnI0u67$Ey!$VTnYdk%D!Pg)EAi+j>Pl;#J?YIZf>@=DnB0#4gWz*>~@TwpZ$Le*Q*bm>3p^r=85p>QL70(Y)*K0-;9^e~#}JM4YbQkt9Z}$Lk>2rt zuKR?x9W_gW7GHdEIZRA3PQiWWf_gEBD>-+P7WbQFDeB5(FiQnkYJT0+d!^ilFVNop z&g@AaU;a`5G;zDk43V2*;$L0AUpUvbfi-hpw1(4@QY8*&1zW>D^RKHGtIA58?GDdB z^z5+u8@b1GkFN|~6tyyB+m=mNc0TgfI9*xz^hZc=_{JB-6D{k$v)J#gjM>h5gnvUW Wt8RFN+!3I289ZJ6T-G@yGywokWokPB literal 0 HcmV?d00001 diff --git a/public/images/ui/pbinfo_stat_numbers.json b/public/images/ui/pbinfo_stat_numbers.json new file mode 100644 index 00000000000..ec4f7117bb7 --- /dev/null +++ b/public/images/ui/pbinfo_stat_numbers.json @@ -0,0 +1,293 @@ +{ + "textures": [ + { + "image": "pbinfo_stat_numbers.png", + "format": "RGBA8888", + "size": { + "w": 117, + "h": 8 + }, + "scale": 1, + "frames": [ + { + "filename": "1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 9, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 18, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "4", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 27, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "5", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 36, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "6", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 45, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 54, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 63, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 72, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-4", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 81, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-5", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 90, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "-6", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 99, + "y": 0, + "w": 9, + "h": 8 + } + }, + { + "filename": "0", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 9, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 9, + "h": 8 + }, + "frame": { + "x": 108, + "y": 0, + "w": 9, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:b0719fae0d9b670a727148cdc7202249:afc5587ebacca78d178ac7e0c434591b:4825a9f02f72f1fe28a724c6c5dffb37$" + } +} diff --git a/public/images/ui/pbinfo_stat_numbers.png b/public/images/ui/pbinfo_stat_numbers.png new file mode 100644 index 0000000000000000000000000000000000000000..c778ba992734421a718b2c49db1db0ae77a28e09 GIT binary patch literal 430 zcmV;f0a5;mP)X}UpFSFJe%YMSjb zvz=}Te=dw_+OM;>zwNiTz<(WGW!%j?&)@0VTARh5OWbc`j(J{Tok%Zt#$YoH;sBj7 z0D#IlJRc6p%*|?r>-8D{#_^;+F^22I1yqy`_PebZNKrNbfWEEq_WF{{oLyYu^!yS4 z#PO(4jM4P@WGYS8UqlLVGYqiSvW&F&OBuS>FtHC$Vz?0ZyX|CN5<3@SjG<>5X2}?8 zQ)v+?7z&xQg%~oUa!zD?QzeEgj_Hh<7_VVM6DZ`EEo4UD)*|DZy2Lt;DavMIyoRBA zxP2Ty%KN9gENZI8IE_78Q^T$GD~(@jhsGYQsdI~*V!X;!+J?fg{Gd2S+NQZaWGcsm zi<{b~a&9zLI&@IbQb7LyuD?x7eaKXf@hzMCJ+VH0TaTtDpMHPh p)) + p.toggleStats(pressed); + if (pressed) + this.setLastProcessedMovementTime(Button.STATS); + } else + return; + } if (inputSuccess && this.enableVibration && typeof navigator.vibrate !== 'undefined') navigator.vibrate(vibrationLength || 10); } @@ -1443,7 +1454,7 @@ export default class BattleScene extends SceneBase { * or not. It will only return true once, until the key is released and pressed down * again. */ - gamepadButtonJustDown(button: Phaser.Input.Gamepad.Button) : boolean { + gamepadButtonJustDown(button: Phaser.Input.Gamepad.Button): boolean { if (!button || !this.gamepadSupport) return false; @@ -1463,6 +1474,23 @@ export default class BattleScene extends SceneBase { return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustDown(k)) || this.gamepadButtonJustDown(gamepad?.buttons[this.gamepadKeyConfig[button]]); } + /** + * gamepadButtonJustUp returns true if @param button has just been released + * or not. It will only return true once, until the key is released and pressed down + * again. + */ + gamepadButtonJustUp(button: Phaser.Input.Gamepad.Button): boolean { + if (!button || !this.gamepadSupport) + return false; + + return !this.gamepadButtonStates[button.index]; + } + + buttonJustReleased(button: Button): boolean { + const gamepad = this.input.gamepad?.gamepads[0]; + return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustUp(k)) || this.gamepadButtonJustUp(gamepad?.buttons[this.gamepadKeyConfig[button]]); + } + /** * repeatInputDurationJustPassed returns true if @param button has been held down long * enough to fire a repeated input. A button must claim the movementButtonLock before diff --git a/src/data/splash-messages.ts b/src/data/splash-messages.ts index 11629cf05d7..198ff07cec9 100644 --- a/src/data/splash-messages.ts +++ b/src/data/splash-messages.ts @@ -33,6 +33,5 @@ splashMessages.push(...[ 'Also Try Emerald Rogue!', 'Also Try Radical Red!', 'Eevee Expo!', - 'YNOproject!', - 'Shh, don\'t tell Sam!' + 'YNOproject!' ]); \ No newline at end of file diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 9a7bfb48621..7072875d3ce 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1179,6 +1179,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.battleInfo.updateInfo(this, instant); } + toggleStats(visible: boolean): void { + this.battleInfo.toggleStats(visible); + } + addExp(exp: integer) { const maxExpLevel = this.scene.getMaxExpLevel(); const initialExp = this.exp; diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 2f37b900ab5..875d618ec0f 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -39,15 +39,21 @@ export class LoadingScene extends SceneBase { } this.loadAtlas('namebox', 'ui'); this.loadImage('pbinfo_player', 'ui'); + this.loadImage('pbinfo_player_stats', 'ui'); this.loadImage('pbinfo_player_mini', 'ui'); + this.loadImage('pbinfo_player_mini_stats', 'ui'); this.loadAtlas('pbinfo_player_type', 'ui'); this.loadAtlas('pbinfo_player_type1', 'ui'); this.loadAtlas('pbinfo_player_type2', 'ui'); this.loadImage('pbinfo_enemy_mini', 'ui'); + this.loadImage('pbinfo_enemy_mini_stats', 'ui'); this.loadImage('pbinfo_enemy_boss', 'ui'); + this.loadImage('pbinfo_enemy_boss_stats', 'ui'); this.loadAtlas('pbinfo_enemy_type', 'ui'); this.loadAtlas('pbinfo_enemy_type1', 'ui'); this.loadAtlas('pbinfo_enemy_type2', 'ui'); + this.loadAtlas('pbinfo_stat', 'ui'); + this.loadAtlas('pbinfo_stat_numbers', 'ui'); this.loadImage('overlay_lv', 'ui'); this.loadAtlas('numbers', 'ui'); this.loadAtlas('numbers_red', 'ui'); diff --git a/src/locales/de/tutorial.ts b/src/locales/de/tutorial.ts index 2722c02ad45..7a27f2077e6 100644 --- a/src/locales/de/tutorial.ts +++ b/src/locales/de/tutorial.ts @@ -20,6 +20,10 @@ export const tutorial: SimpleTranslationEntries = { "pokerus": `A daily random 3 selectable starters have a purple border. $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. + $Your Pokémon are recalled before a trainer battle and before entering a new biome. + $You can also view the stat changes for the Pokémon on the field by holding C.`, + "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. $Most non-consumable item effects will stack in various ways. diff --git a/src/locales/en/tutorial.ts b/src/locales/en/tutorial.ts index 2722c02ad45..7a27f2077e6 100644 --- a/src/locales/en/tutorial.ts +++ b/src/locales/en/tutorial.ts @@ -20,6 +20,10 @@ export const tutorial: SimpleTranslationEntries = { "pokerus": `A daily random 3 selectable starters have a purple border. $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. + $Your Pokémon are recalled before a trainer battle and before entering a new biome. + $You can also view the stat changes for the Pokémon on the field by holding C.`, + "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. $Most non-consumable item effects will stack in various ways. diff --git a/src/locales/es/tutorial.ts b/src/locales/es/tutorial.ts index 2722c02ad45..7a27f2077e6 100644 --- a/src/locales/es/tutorial.ts +++ b/src/locales/es/tutorial.ts @@ -20,6 +20,10 @@ export const tutorial: SimpleTranslationEntries = { "pokerus": `A daily random 3 selectable starters have a purple border. $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. + $Your Pokémon are recalled before a trainer battle and before entering a new biome. + $You can also view the stat changes for the Pokémon on the field by holding C.`, + "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. $Most non-consumable item effects will stack in various ways. diff --git a/src/locales/fr/tutorial.ts b/src/locales/fr/tutorial.ts index c9f8a392e1e..e280ee2d5dc 100644 --- a/src/locales/fr/tutorial.ts +++ b/src/locales/fr/tutorial.ts @@ -25,6 +25,10 @@ export const tutorial: SimpleTranslationEntries = { $violet. Si un starter que vous possédez l’a, essayez de $ l’ajouter à votre équipe. Vérifiez bien son résumé !`, + "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. + $Your Pokémon are recalled before a trainer battle and before entering a new biome. + $You can also view the stat changes for the Pokémon on the field by holding C.`, + "selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un. $Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents. $La plupart des effets des objets non-consommables se cumuleront de diverses manières. diff --git a/src/locales/it/tutorial.ts b/src/locales/it/tutorial.ts index 2722c02ad45..7a27f2077e6 100644 --- a/src/locales/it/tutorial.ts +++ b/src/locales/it/tutorial.ts @@ -20,6 +20,10 @@ export const tutorial: SimpleTranslationEntries = { "pokerus": `A daily random 3 selectable starters have a purple border. $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. + $Your Pokémon are recalled before a trainer battle and before entering a new biome. + $You can also view the stat changes for the Pokémon on the field by holding C.`, + "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. $Most non-consumable item effects will stack in various ways. diff --git a/src/phases.ts b/src/phases.ts index 8eda33de20e..ceba555f2ce 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -2671,7 +2671,6 @@ export class StatChangePhase extends PokemonPhase { let random = false; - const allStats = Utils.getEnumValues(BattleStat); if (this.stats.length === 1 && this.stats[0] === BattleStat.RAND) { this.stats[0] = this.getRandomStat(); random = true; @@ -2712,8 +2711,11 @@ export class StatChangePhase extends PokemonPhase { for (let stat of filteredStats) pokemon.summonData.battleStats[stat] = Math.max(Math.min(pokemon.summonData.battleStats[stat] + levels.value, 6), -6); - applyPostStatChangeAbAttrs(PostStatChangeAbAttr, pokemon, filteredStats, this.levels, this.selfTarget) - this.end(); + applyPostStatChangeAbAttrs(PostStatChangeAbAttr, pokemon, filteredStats, this.levels, this.selfTarget); + + pokemon.updateInfo(); + + handleTutorial(this.scene, Tutorial.Stat_Change).then(() => super.end()); }; if (relLevels.filter(l => l).length && this.scene.moveAnimations) { @@ -3337,7 +3339,7 @@ export class TrainerVictoryPhase extends BattlePhase { const trainerType = this.scene.currentBattle.trainer.config.trainerType; if (vouchers.hasOwnProperty(TrainerType[trainerType])) { if (!this.scene.validateVoucher(vouchers[TrainerType[trainerType]]) && this.scene.currentBattle.trainer.config.isBoss) - this.scene.pushPhase(new ModifierRewardPhase(this.scene, modifierTypes.VOUCHER)); + this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [ modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType])); } this.scene.ui.showText(i18next.t('menu:trainerDefeated', { trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true) }), null, () => { diff --git a/src/tutorial.ts b/src/tutorial.ts index 918c68b9bb4..88e88fa809c 100644 --- a/src/tutorial.ts +++ b/src/tutorial.ts @@ -9,6 +9,7 @@ export enum Tutorial { Menu = "MENU", Starter_Select = "STARTER_SELECT", Pokerus = "POKERUS", + Stat_Change = "STAT_CHANGE", Select_Item = "SELECT_ITEM", Egg_Gacha = "EGG_GACHA" } @@ -42,6 +43,11 @@ const tutorialHandlers = { scene.ui.showText(i18next.t("tutorial:pokerus"), null, () => scene.ui.showText('', null, () => resolve()), null, true); }); }, + [Tutorial.Stat_Change]: (scene: BattleScene) => { + return new Promise(resolve => { + scene.showFieldOverlay(1000).then(() => scene.ui.showText(i18next.t("tutorial:statChange"), null, () => scene.ui.showText('', null, () => scene.hideFieldOverlay(1000).then(() => resolve())), null, true)); + }); + }, [Tutorial.Select_Item]: (scene: BattleScene) => { return new Promise(resolve => { scene.ui.setModeWithoutClear(Mode.MESSAGE).then(() => { diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index ae794a256fa..ae8f518e727 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -7,6 +7,9 @@ import { StatusEffect } from '../data/status-effect'; import BattleScene from '../battle-scene'; import { Type, getTypeRgb } from '../data/type'; import { getVariantTint } from '#app/data/variant'; +import { BattleStat } from '#app/data/battle-stat'; + +const battleStatOrder = [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.ACC, BattleStat.EVA, BattleStat.SPD ]; export default class BattleInfo extends Phaser.GameObjects.Container { private player: boolean; @@ -24,6 +27,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { private lastLevelExp: integer; private lastLevel: integer; private lastLevelCapped: boolean; + private lastBattleStats: string; private box: Phaser.GameObjects.Sprite; private nameText: Phaser.GameObjects.Text; @@ -46,6 +50,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container { public expMaskRect: Phaser.GameObjects.Graphics; + private statsContainer: Phaser.GameObjects.Container; + private statsBox: Phaser.GameObjects.Sprite; + private statValuesContainer: Phaser.GameObjects.Container; + private statNumbers: Phaser.GameObjects.Sprite[]; + constructor(scene: Phaser.Scene, x: number, y: number, player: boolean) { super(scene, x, y); this.player = player; @@ -138,18 +147,6 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.levelNumbersContainer = this.scene.add.container(9.5, (this.scene as BattleScene).uiTheme ? 0 : -0.5); this.levelContainer.add(this.levelNumbersContainer); - this.type1Icon = this.scene.add.sprite(player ? -139 : -15, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type1`); - this.type1Icon.setOrigin(0, 0); - this.add(this.type1Icon); - - this.type2Icon = this.scene.add.sprite(player ? -139 : -15, player ? -1 : -2.5, `pbinfo_${player ? 'player' : 'enemy'}_type2`); - this.type2Icon.setOrigin(0, 0); - this.add(this.type2Icon); - - this.type3Icon = this.scene.add.sprite(player ? -154 : 0, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type`); - this.type3Icon.setOrigin(0, 0); - this.add(this.type3Icon); - if (this.player) { this.hpNumbersContainer = this.scene.add.container(-15, 10); this.add(this.hpNumbersContainer); @@ -171,6 +168,46 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.expBar = expBar; this.expMaskRect = expMaskRect; } + + this.statsContainer = this.scene.add.container(0, 0); + this.statsContainer.setAlpha(0); + this.add(this.statsContainer); + + this.statsBox = this.scene.add.sprite(0, 0, `${this.getTextureName()}_stats`); + this.statsBox.setOrigin(1, 0.5); + this.statsContainer.add(this.statsBox); + + const statLabels: Phaser.GameObjects.Sprite[] = []; + this.statNumbers = []; + + this.statValuesContainer = this.scene.add.container(0, 0); + this.statsContainer.add(this.statValuesContainer); + + battleStatOrder.map((s, i) => { + const statX = i > 1 ? this.statNumbers[i - 2].x + this.statNumbers[i - 2].width + 4 : -this.statsBox.width + 8; + const statY = -this.statsBox.height / 2 + 4 + (i < battleStatOrder.length - 1 ? (i % 2 ? 10 : 0) : 5); + const statLabel = this.scene.add.sprite(statX, statY, 'pbinfo_stat', BattleStat[s]); + statLabel.setOrigin(0, 0); + statLabels.push(statLabel); + this.statValuesContainer.add(statLabel); + + const statNumber = this.scene.add.sprite(statX + statLabel.width, statY, 'pbinfo_stat_numbers', '3'); + statNumber.setOrigin(0, 0); + this.statNumbers.push(statNumber); + this.statValuesContainer.add(statNumber); + }); + + this.type1Icon = this.scene.add.sprite(player ? -139 : -15, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type1`); + this.type1Icon.setOrigin(0, 0); + this.add(this.type1Icon); + + this.type2Icon = this.scene.add.sprite(player ? -139 : -15, player ? -1 : -2.5, `pbinfo_${player ? 'player' : 'enemy'}_type2`); + this.type2Icon.setOrigin(0, 0); + this.add(this.type2Icon); + + this.type3Icon = this.scene.add.sprite(player ? -154 : 0, player ? -17 : -15.5, `pbinfo_${player ? 'player' : 'enemy'}_type`); + this.type3Icon.setOrigin(0, 0); + this.add(this.type3Icon); } initInfo(pokemon: Pokemon) { @@ -258,7 +295,14 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.expMaskRect.x = (pokemon.levelExp / getLevelTotalExp(pokemon.level, pokemon.species.growthRate)) * 510; this.lastExp = pokemon.exp; this.lastLevelExp = pokemon.levelExp; + + this.statValuesContainer.setPosition(8, 7) } + + const battleStats = battleStatOrder.map(() => 0); + + this.lastBattleStats = battleStats.join(''); + this.updateBattleStats(battleStats); } getTextureName(): string { @@ -272,6 +316,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.mini = mini; this.box.setTexture(this.getTextureName()); + this.statsBox.setTexture(`${this.getTextureName()}_stats`); if (this.player) this.y -= 12 * (mini ? 1 : -1); @@ -284,21 +329,34 @@ export default class BattleInfo extends Phaser.GameObjects.Container { el.y += -8 * (mini ? 1 : -1); }); + this.statValuesContainer.x += 2 * (mini ? 1 : -1); + this.statValuesContainer.y += -7 * (mini ? 1 : -1); + const toggledElements = [ this.hpNumbersContainer, this.expBar ]; toggledElements.forEach(el => el.setVisible(!mini)); } + toggleStats(visible: boolean): void { + this.scene.tweens.add({ + targets: this.statsContainer, + duration: Utils.fixedInt(125), + ease: 'Sine.easeInOut', + alpha: visible ? 1 : 0 + }); + } + updateBossSegments(pokemon: EnemyPokemon): void { const boss = !!pokemon.bossSegments; if (boss !== this.boss) { this.boss = boss; - [ this.nameText, this.genderText, this.teraIcon, this.splicedIcon, this.shinyIcon, this.ownedIcon, this.statusIndicator, this.levelContainer ].map(e => e.x += 48 * (boss ? -1 : 1)); + [ this.nameText, this.genderText, this.teraIcon, this.splicedIcon, this.shinyIcon, this.ownedIcon, this.statusIndicator, this.levelContainer, this.statValuesContainer ].map(e => e.x += 48 * (boss ? -1 : 1)); this.hpBar.x += 38 * (boss ? -1 : 1); this.hpBar.y += 2 * (this.boss ? -1 : 1); this.hpBar.setTexture(`overlay_hp${boss ? '_boss' : ''}`); this.box.setTexture(this.getTextureName()); + this.statsBox.setTexture(`${this.getTextureName()}_stats`); } this.bossSegments = boss ? pokemon.bossSegments : 0; @@ -317,6 +375,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const divider = this.scene.add.rectangle(0, 0, 1, this.hpBar.height - (uiTheme ? 0 : 1), pokemon.bossSegmentIndex >= s ? 0xFFFFFF : 0x404040) divider.setOrigin(0.5, 0); this.add(divider); + this.moveBelow(divider as Phaser.GameObjects.GameObject, this.statsContainer); divider.setPositionRelative(this.hpBar, dividerX, uiTheme ? 0 : 1); this.hpBarSegmentDividers.push(divider); @@ -439,6 +498,13 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.lastLevel = pokemon.level; } + if (pokemon.summonData) { + const battleStats = pokemon.summonData.battleStats.join(''); + + if (this.lastBattleStats !== battleStats) + this.updateBattleStats(pokemon.summonData.battleStats); + } + this.shinyIcon.setVisible(pokemon.isShiny()); resolve(); @@ -513,7 +579,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { }); } - setLevel(level: integer) { + setLevel(level: integer): void { const isCapped = level >= (this.scene as BattleScene).getMaxExpLevel(); this.levelNumbersContainer.removeAll(true); const levelStr = level.toString(); @@ -522,7 +588,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.levelContainer.setX((this.player ? -41 : -50) - 8 * Math.max(levelStr.length - 3, 0)); } - setHpNumbers(hp: integer, maxHp: integer) { + setHpNumbers(hp: integer, maxHp: integer): void { if (!this.player || !this.scene) return; this.hpNumbersContainer.removeAll(true); @@ -535,6 +601,12 @@ export default class BattleInfo extends Phaser.GameObjects.Container { for (let i = hpStr.length - 1; i >= 0; i--) this.hpNumbersContainer.add(this.scene.add.image(offset++ * -8, 0, 'numbers', hpStr[i])); } + + updateBattleStats(battleStats: integer[]): void { + battleStatOrder.map((s, i) => { + this.statNumbers[i].setFrame(battleStats[s].toString()); + }); + } } export class PlayerBattleInfo extends BattleInfo { From 93765d41215fc006b790695f5af16ad3523d33b9 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Tue, 30 Apr 2024 23:23:32 -0400 Subject: [PATCH 042/110] Update battle info on stat change --- src/data/move.ts | 6 ++++++ src/field/pokemon.ts | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/data/move.ts b/src/data/move.ts index 5d5fec95729..ccf3872b473 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1552,6 +1552,8 @@ export class CopyStatsAttr extends MoveEffectAttr { else user.removeTag(BattlerTagType.CRIT_BOOST); + user.updateInfo(); + target.scene.queueMessage(getPokemonMessage(user, 'copied\n') + getPokemonMessage(target, `'s stat changes!`)); return true; @@ -1566,6 +1568,8 @@ export class InvertStatsAttr extends MoveEffectAttr { for (let s = 0; s < target.summonData.battleStats.length; s++) target.summonData.battleStats[s] *= -1; + user.updateInfo(); + target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere all reversed!`)); return true; @@ -1580,6 +1584,8 @@ export class ResetStatsAttr extends MoveEffectAttr { for (let s = 0; s < target.summonData.battleStats.length; s++) target.summonData.battleStats[s] = 0; + user.updateInfo(); + target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere eliminated!`)); return true; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 7072875d3ce..55036e1906d 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1624,6 +1624,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.summonData.tags.push(tag); if (this instanceof PlayerPokemon && source.summonData.battleStats.find(bs => bs === 6)) this.scene.validateAchv(achvs.TRANSFER_MAX_BATTLE_STAT); + this.updateInfo(); } getMoveHistory(): TurnMove[] { @@ -1924,6 +1925,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } this.summonDataPrimer = null; } + this.updateInfo(); } resetBattleData(): void { From 7ad9c67673d348651e26f499c7e6dd5d7390953b Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Tue, 30 Apr 2024 23:27:22 -0400 Subject: [PATCH 043/110] Fix crash on catch --- src/battle-scene.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 39eb912ef87..8f07256e327 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1438,7 +1438,7 @@ export default class BattleScene extends SceneBase { } else { let pressed = false; if (this.buttonJustReleased(Button.STATS) || (pressed = this.buttonJustPressed(Button.STATS))) { - for (let p of this.getField().filter(p => p)) + for (let p of this.getField().filter(p => p?.isActive(true))) p.toggleStats(pressed); if (pressed) this.setLastProcessedMovementTime(Button.STATS); From e06561044010f88e59f53b96d5d7b308f9a29207 Mon Sep 17 00:00:00 2001 From: lucfd <83493765+lucfd@users.noreply.github.com> Date: Tue, 30 Apr 2024 23:30:10 -0400 Subject: [PATCH 044/110] Fixed Dire Claw & Tri-Attack status chances (#367) * created MultiStatusEffectAttr * removed testing stuff * switched to randSeedItem --- src/data/move.ts | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index ccf3872b473..60e07b8f513 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1009,6 +1009,25 @@ export class StatusEffectAttr extends MoveEffectAttr { } } +export class MultiStatusEffectAttr extends StatusEffectAttr { + public effects: StatusEffect[]; + + constructor(effects: StatusEffect[], selfTarget?: boolean, cureTurn?: integer, overrideStatus?: boolean) { + super(effects[0], selfTarget, cureTurn, overrideStatus); + this.effects = effects; + } + + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + this.effect = Utils.randSeedItem(this.effects); + const result = super.apply(user, target, move, args); + return result; + } + + getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { + return !(this.selfTarget ? user : target).status && (this.selfTarget ? user : target).canSetStatus(this.effect, true) ? Math.floor(move.chance * -0.1) : 0; + } +} + export class PsychoShiftEffectAttr extends MoveEffectAttr { constructor() { super(false, MoveEffectTrigger.HIT); @@ -4170,9 +4189,7 @@ export function initMoves() { new SelfStatusMove(Moves.CONVERSION, Type.NORMAL, -1, 30, -1, 0, 1) .attr(FirstMoveTypeAttr), new AttackMove(Moves.TRI_ATTACK, Type.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, 20, 0, 1) - .attr(StatusEffectAttr, StatusEffect.PARALYSIS) - .attr(StatusEffectAttr, StatusEffect.BURN) - .attr(StatusEffectAttr, StatusEffect.FREEZE), + .attr(MultiStatusEffectAttr, [StatusEffect.BURN, StatusEffect.FREEZE, StatusEffect.PARALYSIS]), new AttackMove(Moves.SUPER_FANG, Type.NORMAL, MoveCategory.PHYSICAL, -1, 90, 10, -1, 0, 1) .attr(TargetHalfHpDamageAttr), new AttackMove(Moves.SLASH, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 1) @@ -5986,9 +6003,7 @@ export function initMoves() { .soundBased() .partial(), new AttackMove(Moves.DIRE_CLAW, Type.POISON, MoveCategory.PHYSICAL, 80, 100, 15, 50, 0, 8) - .attr(StatusEffectAttr, StatusEffect.POISON) - .attr(StatusEffectAttr, StatusEffect.PARALYSIS) - .attr(StatusEffectAttr, StatusEffect.SLEEP), + .attr(MultiStatusEffectAttr, [StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP]), new AttackMove(Moves.PSYSHIELD_BASH, Type.PSYCHIC, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8) .attr(StatChangeAttr, BattleStat.DEF, 1, true), new SelfStatusMove(Moves.POWER_SHIFT, Type.NORMAL, -1, 10, 100, 0, 8) From 17ec6b3ccc4b286bca017d23e9935d98de8b9db6 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Wed, 1 May 2024 00:12:04 -0400 Subject: [PATCH 045/110] Fix start button mapping --- src/battle-scene.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 8f07256e327..0f2f712a501 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -205,8 +205,8 @@ export default class BattleScene extends SceneBase { [Button.SUBMIT]: 17, // touchpad [Button.ACTION]: 0, // X [Button.CANCEL]: 1, // O - [Button.MENU]: 8, // share - [Button.STATS]: 9, // options + [Button.MENU]: 9, // options + [Button.STATS]: 8, // share [Button.CYCLE_SHINY]: 5, // RB [Button.CYCLE_FORM]: 4, // LB [Button.CYCLE_GENDER]: 6, // LT From 77caa8ece5e3ce7f06e3bf694fc1d6628f5fa4c0 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Wed, 1 May 2024 00:27:11 -0400 Subject: [PATCH 046/110] Add back shift for toggling stats --- src/battle-scene.ts | 4 ++-- src/locales/de/tutorial.ts | 2 +- src/locales/en/tutorial.ts | 2 +- src/locales/es/tutorial.ts | 2 +- src/locales/fr/tutorial.ts | 2 +- src/locales/it/tutorial.ts | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 0f2f712a501..cbf363f689a 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -617,7 +617,7 @@ export default class BattleScene extends SceneBase { [Button.ACTION]: [keyCodes.SPACE, keyCodes.ENTER, keyCodes.Z], [Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X], [Button.MENU]: [keyCodes.ESC, keyCodes.M], - [Button.STATS]: [keyCodes.C], + [Button.STATS]: [keyCodes.SHIFT, keyCodes.C], [Button.CYCLE_SHINY]: [keyCodes.R], [Button.CYCLE_FORM]: [keyCodes.F], [Button.CYCLE_GENDER]: [keyCodes.G], @@ -1437,7 +1437,7 @@ export default class BattleScene extends SceneBase { } } else { let pressed = false; - if (this.buttonJustReleased(Button.STATS) || (pressed = this.buttonJustPressed(Button.STATS))) { + if (this.ui && (this.buttonJustReleased(Button.STATS) || (pressed = this.buttonJustPressed(Button.STATS)))) { for (let p of this.getField().filter(p => p?.isActive(true))) p.toggleStats(pressed); if (pressed) diff --git a/src/locales/de/tutorial.ts b/src/locales/de/tutorial.ts index 7a27f2077e6..2773b6710ba 100644 --- a/src/locales/de/tutorial.ts +++ b/src/locales/de/tutorial.ts @@ -22,7 +22,7 @@ export const tutorial: SimpleTranslationEntries = { "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding C.`, + $You can also view the stat changes for the Pokémon on the field by holding C or Shift.`, "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. diff --git a/src/locales/en/tutorial.ts b/src/locales/en/tutorial.ts index 7a27f2077e6..2773b6710ba 100644 --- a/src/locales/en/tutorial.ts +++ b/src/locales/en/tutorial.ts @@ -22,7 +22,7 @@ export const tutorial: SimpleTranslationEntries = { "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding C.`, + $You can also view the stat changes for the Pokémon on the field by holding C or Shift.`, "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. diff --git a/src/locales/es/tutorial.ts b/src/locales/es/tutorial.ts index 7a27f2077e6..2773b6710ba 100644 --- a/src/locales/es/tutorial.ts +++ b/src/locales/es/tutorial.ts @@ -22,7 +22,7 @@ export const tutorial: SimpleTranslationEntries = { "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding C.`, + $You can also view the stat changes for the Pokémon on the field by holding C or Shift.`, "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. diff --git a/src/locales/fr/tutorial.ts b/src/locales/fr/tutorial.ts index e280ee2d5dc..b60ccc03b5d 100644 --- a/src/locales/fr/tutorial.ts +++ b/src/locales/fr/tutorial.ts @@ -27,7 +27,7 @@ export const tutorial: SimpleTranslationEntries = { "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding C.`, + $You can also view the stat changes for the Pokémon on the field by holding C or Shift.`, "selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un. $Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents. diff --git a/src/locales/it/tutorial.ts b/src/locales/it/tutorial.ts index 7a27f2077e6..2773b6710ba 100644 --- a/src/locales/it/tutorial.ts +++ b/src/locales/it/tutorial.ts @@ -22,7 +22,7 @@ export const tutorial: SimpleTranslationEntries = { "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding C.`, + $You can also view the stat changes for the Pokémon on the field by holding C or Shift.`, "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. $These range from consumables, to Pokémon held items, to passive permanent items. From eac9b4d385a137e24601953ae1dd237ef6cdcd14 Mon Sep 17 00:00:00 2001 From: TeKrop Date: Wed, 1 May 2024 00:11:05 +0200 Subject: [PATCH 047/110] fix: reworked daily and weekly rankings translations workflow --- src/locales/de/menu.ts | 2 +- src/locales/en/menu.ts | 2 +- src/locales/es/menu.ts | 2 +- src/locales/fr/menu.ts | 2 +- src/locales/it/menu.ts | 2 +- src/ui/daily-run-scoreboard.ts | 5 +++-- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/locales/de/menu.ts b/src/locales/de/menu.ts index 4876fa3432a..442cfae218f 100644 --- a/src/locales/de/menu.ts +++ b/src/locales/de/menu.ts @@ -59,8 +59,8 @@ export const menu: SimpleTranslationEntries = { "escapeVerbSwitch": "auswechseln", "escapeVerbFlee": "flucht", "notDisabled": "{{moveName}} ist\nnicht mehr deaktiviert!", - "rankings": "Rankings", "dailyRankings": "Daily Rankings", + "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", "playersOnline": "Players Online" diff --git a/src/locales/en/menu.ts b/src/locales/en/menu.ts index 1d840a3eb03..82a09e49d4f 100644 --- a/src/locales/en/menu.ts +++ b/src/locales/en/menu.ts @@ -78,8 +78,8 @@ export const menu: SimpleTranslationEntries = { "skipItemQuestion": "Are you sure you want to skip taking an item?", "eggHatching": "Oh?", "ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?", - "rankings": "Rankings", "dailyRankings": "Daily Rankings", + "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", "playersOnline": "Players Online" diff --git a/src/locales/es/menu.ts b/src/locales/es/menu.ts index e72710cee37..5dccc2e4eb3 100644 --- a/src/locales/es/menu.ts +++ b/src/locales/es/menu.ts @@ -62,8 +62,8 @@ export const menu: SimpleTranslationEntries = { "skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?", "eggHatching": "¿Y esto?", "ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?", - "rankings": "Rankings", "dailyRankings": "Daily Rankings", + "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", "playersOnline": "Players Online" diff --git a/src/locales/fr/menu.ts b/src/locales/fr/menu.ts index 037f0f3b5e2..d5478c67a26 100644 --- a/src/locales/fr/menu.ts +++ b/src/locales/fr/menu.ts @@ -73,8 +73,8 @@ export const menu: SimpleTranslationEntries = { "skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?", "eggHatching": "Oh ?", "ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?", - "rankings": "Classement", "dailyRankings": "Classement du Jour", + "weeklyRankings": "Classement de la Semaine", "noRankings": "Pas de Classement", "loading": "Chargement…", "playersOnline": "Joueurs Connectés" diff --git a/src/locales/it/menu.ts b/src/locales/it/menu.ts index b9e288c26ce..c37a37b5169 100644 --- a/src/locales/it/menu.ts +++ b/src/locales/it/menu.ts @@ -7,8 +7,8 @@ export const menu: SimpleTranslationEntries = { "loadGame": "Carica Partita", "dailyRun": "Corsa Giornaliera (Beta)", "selectGameMode": "Seleziona una modalità di gioco.", - "rankings": "Rankings", "dailyRankings": "Daily Rankings", + "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", "playersOnline": "Players Online" diff --git a/src/ui/daily-run-scoreboard.ts b/src/ui/daily-run-scoreboard.ts index 1379ec6a8ef..8f7ca0bf110 100644 --- a/src/ui/daily-run-scoreboard.ts +++ b/src/ui/daily-run-scoreboard.ts @@ -11,6 +11,7 @@ interface RankingEntry { wave: integer } +// Don't forget to update translations when adding a new category enum ScoreboardCategory { DAILY, WEEKLY @@ -40,7 +41,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { const titleWindow = addWindow(this.scene, 0, 0, 114, 18, false, false, null, null, WindowVariant.THIN); this.add(titleWindow); - this.titleLabel = addTextObject(this.scene, titleWindow.displayWidth / 2, titleWindow.displayHeight / 2, i18next.t('menu:dailyRankings'), TextStyle.WINDOW, { fontSize: '64px' }); + this.titleLabel = addTextObject(this.scene, titleWindow.displayWidth / 2, titleWindow.displayHeight / 2, i18next.t('menu:loading'), TextStyle.WINDOW, { fontSize: '64px' }); this.titleLabel.setOrigin(0.5, 0.5); this.add(this.titleLabel); @@ -156,7 +157,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { .then(jsonResponse => { this.page = page; this.category = category; - this.titleLabel.setText(`${Utils.toReadableString(ScoreboardCategory[category])} ${i18next.t("menu:rankings")}`); + this.titleLabel.setText(`${i18next.t(`menu:${ScoreboardCategory[category].toLowerCase()}Rankings`)}`); this.prevPageButton.setAlpha(page > 1 ? 1 : 0.5); this.nextPageButton.setAlpha(page < this.pageCount ? 1 : 0.5); this.pageNumberLabel.setText(page.toString()); From 3b09e176a29922ef8a20d028eb345eb72bc3df66 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Wed, 1 May 2024 09:44:57 -0400 Subject: [PATCH 048/110] Fix IV text not comparing against starter species --- src/data/pokemon-species.ts | 4 ++-- src/ui/battle-message-ui-handler.ts | 6 ++++-- src/ui/pokemon-info-container.ts | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 4136be5b70f..2f8edefa403 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -138,9 +138,9 @@ export abstract class PokemonSpeciesForm { this.genderDiffs = genderDiffs; } - getRootSpeciesId(): Species { + getRootSpeciesId(forStarter: boolean = false): Species { let ret = this.speciesId; - while (pokemonPrevolutions.hasOwnProperty(ret)) + while (pokemonPrevolutions.hasOwnProperty(ret) && (!forStarter || !speciesStarters.hasOwnProperty(ret))) ret = pokemonPrevolutions[ret]; return ret; } diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index 77144d6bbc0..7819017d896 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -5,6 +5,7 @@ import * as Utils from "../utils"; import MessageUiHandler from "./message-ui-handler"; import { getStatName, Stat } from "../data/pokemon-stat"; import { addWindow } from "./ui-theme"; +import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; export default class BattleMessageUiHandler extends MessageUiHandler { private levelUpStatsContainer: Phaser.GameObjects.Container; @@ -223,8 +224,9 @@ export default class BattleMessageUiHandler extends MessageUiHandler { } getIvDescriptor(value: integer, typeIv: integer): string { - let starterIvs: number[] = this.scene.gameData.dexData[this.scene.getEnemyPokemon().species.speciesId].ivs; - let uiTheme = (this.scene as BattleScene).uiTheme; // Assuming uiTheme is accessible + const starterSpecies = this.scene.getEnemyPokemon().species.getRootSpeciesId(true); + const starterIvs: number[] = this.scene.gameData.dexData[starterSpecies].ivs; + const uiTheme = (this.scene as BattleScene).uiTheme; // Assuming uiTheme is accessible // Function to wrap text in color based on comparison const coloredText = (text: string, isBetter: boolean) => { diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 4d8ecfe0b03..572a28f10c8 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -161,8 +161,9 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { if (isFusion) this.pokemonFusionShinyIcon.setTint(getVariantTint(pokemon.fusionVariant)); - const originalIvs: integer[] = this.scene.gameData.dexData[pokemon.species.speciesId].caughtAttr - ? this.scene.gameData.dexData[pokemon.species.speciesId].ivs + const starterSpeciesId = pokemon.species.getRootSpeciesId(true); + const originalIvs: integer[] = this.scene.gameData.dexData[starterSpeciesId].caughtAttr + ? this.scene.gameData.dexData[starterSpeciesId].ivs : null; this.statsContainer.updateIvs(pokemon.ivs, originalIvs); From fc1a9f02837af4ebd5aee428e80d886a7b158e17 Mon Sep 17 00:00:00 2001 From: thicco-catto <67873211+thicco-catto@users.noreply.github.com> Date: Wed, 1 May 2024 16:16:58 +0200 Subject: [PATCH 049/110] Select Move UI Shows PP (#372) * Select move UI shows PP * Removed testing forced max pp * PP only shows when using PP restoring items * Removed testing max pp again * Update src/phases.ts * Update src/ui/party-ui-handler.ts --------- Co-authored-by: Samuel H --- src/phases.ts | 5 +++-- src/ui/party-ui-handler.ts | 11 ++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/phases.ts b/src/phases.ts index ceba555f2ce..ad2a7537de7 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -19,7 +19,7 @@ import { BattleStat, getBattleStatLevelChangeDescription, getBattleStatName } fr import { biomeLinks, getBiomeName } from "./data/biomes"; import { Biome } from "./data/enums/biome"; import { ModifierTier } from "./modifier/modifier-tier"; -import { FusePokemonModifierType, ModifierPoolType, ModifierType, ModifierTypeFunc, ModifierTypeOption, PokemonModifierType, PokemonMoveModifierType, RememberMoveModifierType, TmModifierType, getDailyRunStarterModifiers, getEnemyBuffModifierForWave, getModifierType, getPlayerModifierTypeOptions, getPlayerShopModifierTypeOptionsForWave, modifierTypes, regenerateModifierPoolThresholds } from "./modifier/modifier-type"; +import { FusePokemonModifierType, ModifierPoolType, ModifierType, ModifierTypeFunc, ModifierTypeOption, PokemonModifierType, PokemonMoveModifierType, PokemonPpRestoreModifierType, PokemonPpUpModifierType, RememberMoveModifierType, TmModifierType, getDailyRunStarterModifiers, getEnemyBuffModifierForWave, getModifierType, getPlayerModifierTypeOptions, getPlayerShopModifierTypeOptionsForWave, modifierTypes, regenerateModifierPoolThresholds } from "./modifier/modifier-type"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import { BattlerTagLapseType, EncoreTag, HideSpriteTag as HiddenTag, ProtectedTag, TrappedTag } from "./data/battler-tags"; import { BattlerTagType } from "./data/enums/battler-tag-type"; @@ -4340,6 +4340,7 @@ export class SelectModifierPhase extends BattlePhase { const isMoveModifier = modifierType instanceof PokemonMoveModifierType; const isTmModifier = modifierType instanceof TmModifierType; const isRememberMoveModifier = modifierType instanceof RememberMoveModifierType; + const isPpRestoreModifier = modifierType instanceof PokemonPpRestoreModifierType; const partyUiMode = isMoveModifier ? PartyUiMode.MOVE_MODIFIER : isTmModifier ? PartyUiMode.TM_MODIFIER : isRememberMoveModifier ? PartyUiMode.REMEMBER_MOVE_MODIFIER @@ -4359,7 +4360,7 @@ export class SelectModifierPhase extends BattlePhase { }); } else this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers)); - }, pokemonModifierType.selectFilter, modifierType instanceof PokemonMoveModifierType ? (modifierType as PokemonMoveModifierType).moveSelectFilter : undefined, tmMoveId); + }, pokemonModifierType.selectFilter, modifierType instanceof PokemonMoveModifierType ? (modifierType as PokemonMoveModifierType).moveSelectFilter : undefined, tmMoveId, isPpRestoreModifier); } } else applyModifier(modifierType.newModifier()); diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 29a4037f12f..35014fa7027 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -90,6 +90,7 @@ export default class PartyUiHandler extends MessageUiHandler { private selectFilter: PokemonSelectFilter | PokemonModifierTransferSelectFilter; private moveSelectFilter: PokemonMoveSelectFilter; private tmMoveId: Moves; + private showMovePp: boolean; private iconAnimHandler: PokemonIconAnimHandler; @@ -185,6 +186,7 @@ export default class PartyUiHandler extends MessageUiHandler { ? args[4] as PokemonMoveSelectFilter : PartyUiHandler.FilterAllMoves; this.tmMoveId = args.length > 5 && args[5] ? args[5] : Moves.NONE; + this.showMovePp = args.length > 6 && args[6]; this.partyContainer.setVisible(true); this.partyBg.setTexture(`party_bg${this.scene.currentBattle.double ? '_double' : ''}`); @@ -663,7 +665,14 @@ export default class PartyUiHandler extends MessageUiHandler { case PartyOption.MOVE_2: case PartyOption.MOVE_3: case PartyOption.MOVE_4: - optionName = pokemon.moveset[option - PartyOption.MOVE_1].getName(); + const move = pokemon.moveset[option - PartyOption.MOVE_1]; + if(this.showMovePp) { + const maxPP = move.getMovePp(); + const currPP = maxPP - move.ppUsed; + optionName = `${move.getName()} ${currPP}/${maxPP}`; + } else { + optionName = move.getName(); + } break; default: if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) { From 56b24c70b6c7b5ddc1c51b6bdaa20c01d7fa2810 Mon Sep 17 00:00:00 2001 From: Mistmemo <114654503+LeoDoby@users.noreply.github.com> Date: Wed, 1 May 2024 16:50:13 +0200 Subject: [PATCH 050/110] fix double battle iv scanner color (#379) * Add color for the IV scanner add a new color SUMMARY_GREEN in text.js, add the green color if the iv of the pokemon is better than the iv on the starter of that pokemon Co-authored-by: EmoUsedHM01 <131687820+emousedhm01@users.noreply.github.com> * fix battle-message-ui-handler.ts formatting * fix missing similicon battle-message-ui-handler.ts * modified so it take a boolean instead of doing lot of else if battle-message-ui-handler.ts * Fix iv scanner only doing color for the right pokemon in double fight --------- Co-authored-by: EmoUsedHM01 <131687820+emousedhm01@users.noreply.github.com> --- src/ui/battle-message-ui-handler.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index 7819017d896..5e2cb56518f 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -210,7 +210,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler { } else shownStats = stats; for (let s of stats) - levelUpStatsValuesText += `${shownStats.indexOf(s) > -1 ? this.getIvDescriptor(ivs[s], s) : '???'}\n`; + levelUpStatsValuesText += `${shownStats.indexOf(s) > -1 ? this.getIvDescriptor(ivs[s], s, pokemonId) : '???'}\n`; this.levelUpStatsValuesContent.text = levelUpStatsValuesText; this.levelUpStatsIncrContent.setVisible(false); this.levelUpStatsContainer.setVisible(true); @@ -223,8 +223,8 @@ export default class BattleMessageUiHandler extends MessageUiHandler { }); } - getIvDescriptor(value: integer, typeIv: integer): string { - const starterSpecies = this.scene.getEnemyPokemon().species.getRootSpeciesId(true); + getIvDescriptor(value: integer, typeIv: integer, pokemonId: integer): string { + const starterSpecies = this.scene.getPokemonById(pokemonId).species.getRootSpeciesId(true); const starterIvs: number[] = this.scene.gameData.dexData[starterSpecies].ivs; const uiTheme = (this.scene as BattleScene).uiTheme; // Assuming uiTheme is accessible From c8583d6c69efdb45a0bc9c80646e5d0fdcb8919f Mon Sep 17 00:00:00 2001 From: Thomas David <66013753+Kiriox94@users.noreply.github.com> Date: Sat, 27 Apr 2024 11:30:23 +0200 Subject: [PATCH 051/110] Update manifest.webmanifest --- public/manifest.webmanifest | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/manifest.webmanifest b/public/manifest.webmanifest index e6eedd27e2f..c75c70a8d45 100644 --- a/public/manifest.webmanifest +++ b/public/manifest.webmanifest @@ -4,7 +4,8 @@ "description": "A Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, and reaching Pokémon stats you never thought possible.", "scope": "/", "start_url": "/", - "display": "standalone", + "display": "fullscreen", + "orientation": "landscape", "background_color": "#8c8c8c", "theme_color": "#8c8c8c", "icons": [ From 68f33266070893aa42138868cea1d903a926bc09 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Wed, 1 May 2024 12:21:22 -0500 Subject: [PATCH 052/110] Add Heal Block back to level up learnsets The move itself is still not functional yet, but will be valuable for Endless when it is. Also made Curse's flavor text accurate to the canon games. --- src/data/move.ts | 2 +- src/data/pokemon-level-moves.ts | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/data/move.ts b/src/data/move.ts index 60e07b8f513..6ece04c70c4 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -2615,7 +2615,7 @@ export class CurseAttr extends MoveEffectAttr { } let curseRecoilDamage = Math.floor(user.getMaxHp() / 2); user.damageAndUpdate(curseRecoilDamage, HitResult.OTHER, false, true, true); - user.scene.queueMessage(getPokemonMessage(user, ' cut its own HP!')); + user.scene.queueMessage(getPokemonMessage(user, ` cut its own HP\nand laid a curse on the ${target.name}!`)); target.addTag(BattlerTagType.CURSED, 0, move.id, user.id); return true; } else { diff --git a/src/data/pokemon-level-moves.ts b/src/data/pokemon-level-moves.ts index 07691b01eff..0b545d1bd63 100644 --- a/src/data/pokemon-level-moves.ts +++ b/src/data/pokemon-level-moves.ts @@ -4278,6 +4278,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 30, Moves.ANCIENT_POWER ], [ 40, Moves.LIFE_DEW ], [ 50, Moves.LEECH_SEED ], + [ 55, Moves.HEAL_BLOCK ], [ 60, Moves.RECOVER ], [ 70, Moves.FUTURE_SIGHT ], [ 80, Moves.HEALING_WISH ], @@ -4976,6 +4977,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 23, Moves.ABSORB ], [ 29, Moves.SHADOW_SNEAK ], [ 36, Moves.FURY_SWIPES ], + [ 41, Moves.HEAL_BLOCK ], [ 43, Moves.MIND_READER ], [ 50, Moves.SHADOW_BALL ], [ 57, Moves.SPITE ], @@ -5796,6 +5798,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.PSYSHOCK ], [ 25, Moves.COSMIC_POWER ], [ 30, Moves.PSYCHIC ], + [ 33, Moves.HEAL_BLOCK ], [ 35, Moves.STONE_EDGE ], [ 40, Moves.FUTURE_SIGHT ], [ 45, Moves.MAGIC_ROOM ], @@ -5814,6 +5817,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.ZEN_HEADBUTT ], [ 25, Moves.COSMIC_POWER ], [ 30, Moves.PSYCHIC ], + [ 33, Moves.HEAL_BLOCK ], [ 35, Moves.STONE_EDGE ], [ 40, Moves.SOLAR_BEAM ], [ 45, Moves.WONDER_ROOM ], @@ -5890,6 +5894,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 3, Moves.RAPID_SPIN ], [ 6, Moves.CONFUSION ], [ 9, Moves.ROCK_TOMB ], + [ 10, Moves.HEAL_BLOCK ], [ 12, Moves.POWER_TRICK ], [ 15, Moves.PSYBEAM ], [ 18, Moves.ANCIENT_POWER ], @@ -5911,6 +5916,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.MUD_SLAP ], [ 1, Moves.RAPID_SPIN ], [ 9, Moves.ROCK_TOMB ], + [ 10, Moves.HEAL_BLOCK ], [ 12, Moves.POWER_TRICK ], [ 15, Moves.PSYBEAM ], [ 18, Moves.ANCIENT_POWER ], @@ -6506,6 +6512,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.LATIOS]: [ [ 1, Moves.DRAGON_DANCE ], [ 1, Moves.STORED_POWER ], + [ 1, Moves.HEAL_BLOCK ], [ 5, Moves.HELPING_HAND ], [ 10, Moves.RECOVER ], [ 15, Moves.CONFUSION ], @@ -7364,6 +7371,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 36, Moves.IRON_DEFENSE ], [ 40, Moves.METAL_SOUND ], [ 44, Moves.FUTURE_SIGHT ], + [ 45, Moves.HEAL_BLOCK ], ], [Species.BRONZONG]: [ [ 0, Moves.BLOCK ], @@ -7382,6 +7390,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 38, Moves.IRON_DEFENSE ], [ 44, Moves.METAL_SOUND ], [ 50, Moves.FUTURE_SIGHT ], + [ 52, Moves.HEAL_BLOCK ], [ 56, Moves.RAIN_DANCE ], ], [Species.BONSLY]: [ @@ -9491,6 +9500,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.YAMASK]: [ [ 1, Moves.PROTECT ], [ 1, Moves.ASTONISH ], + [ 1, Moves.HEAL_BLOCK ], [ 4, Moves.HAZE ], [ 8, Moves.NIGHT_SHADE ], [ 12, Moves.DISABLE ], @@ -9513,6 +9523,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.PROTECT ], [ 1, Moves.SCARY_FACE ], [ 1, Moves.ASTONISH ], + [ 1, Moves.HEAL_BLOCK ], [ 12, Moves.DISABLE ], [ 16, Moves.WILL_O_WISP ], [ 20, Moves.CRAFTY_SHIELD ], @@ -9720,6 +9731,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 24, Moves.HYPNOSIS ], [ 28, Moves.FAKE_TEARS ], [ 33, Moves.PSYCH_UP ], + [ 34, Moves.HEAL_BLOCK ], [ 36, Moves.PSYCHIC ], [ 40, Moves.FLATTER ], [ 44, Moves.FUTURE_SIGHT ], @@ -9735,6 +9747,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.PSYSHOCK ], [ 24, Moves.HYPNOSIS ], [ 28, Moves.FAKE_TEARS ], + [ 34, Moves.HEAL_BLOCK ], [ 35, Moves.PSYCH_UP ], [ 46, Moves.FLATTER ], [ 52, Moves.FUTURE_SIGHT ], @@ -9750,6 +9763,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.PSYSHOCK ], [ 24, Moves.HYPNOSIS ], [ 28, Moves.FAKE_TEARS ], + [ 34, Moves.HEAL_BLOCK ], [ 35, Moves.PSYCH_UP ], [ 40, Moves.PSYCHIC ], [ 48, Moves.FLATTER ], @@ -9771,6 +9785,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 36, Moves.PSYCHIC ], [ 40, Moves.SKILL_SWAP ], [ 44, Moves.FUTURE_SIGHT ], + [ 46, Moves.HEAL_BLOCK ], [ 48, Moves.WONDER_ROOM ], ], [Species.DUOSION]: [ @@ -9787,6 +9802,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 35, Moves.PAIN_SPLIT ], [ 40, Moves.PSYCHIC ], [ 46, Moves.SKILL_SWAP ], + [ 50, Moves.HEAL_BLOCK ], [ 52, Moves.FUTURE_SIGHT ], [ 58, Moves.WONDER_ROOM ], ], @@ -9805,6 +9821,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 35, Moves.PAIN_SPLIT ], [ 40, Moves.PSYCHIC ], [ 48, Moves.SKILL_SWAP ], + [ 54, Moves.HEAL_BLOCK ], [ 56, Moves.FUTURE_SIGHT ], [ 64, Moves.WONDER_ROOM ], ], @@ -10209,6 +10226,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.GROWL ], [ 1, Moves.CONFUSION ], [ 6, Moves.IMPRISON ], + [ 8, Moves.HEAL_BLOCK ], [ 12, Moves.TELEPORT ], [ 18, Moves.PSYBEAM ], [ 24, Moves.GUARD_SPLIT ], @@ -10226,6 +10244,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TELEPORT ], [ 1, Moves.IMPRISON ], [ 1, Moves.PSYCHIC_TERRAIN ], + [ 8, Moves.HEAL_BLOCK ], [ 18, Moves.PSYBEAM ], [ 24, Moves.GUARD_SPLIT ], [ 24, Moves.POWER_SPLIT ], @@ -10884,6 +10903,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.SHOCK_WAVE ], [ 25, Moves.AGILITY ], [ 30, Moves.CHARGE ], + [ 31, Moves.HEAL_BLOCK ], [ 35, Moves.VOLT_SWITCH ], [ 40, Moves.CRUNCH ], [ 45, Moves.DISCHARGE ], @@ -11972,6 +11992,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 40, Moves.PLAY_ROUGH ], [ 44, Moves.MAGIC_ROOM ], [ 48, Moves.FOUL_PLAY ], + [ 50, Moves.HEAL_BLOCK ], [ 52, Moves.LAST_RESORT ], ], [Species.PHANTUMP]: [ @@ -13045,6 +13066,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.IRON_HEAD ], [ 50, Moves.TAKE_DOWN ], [ 55, Moves.DOUBLE_EDGE ], + [ 60, Moves.HEAL_BLOCK ], ], [Species.SILVALLY]: [ [ 0, Moves.MULTI_ATTACK ], @@ -13059,6 +13081,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.ICE_FANG ], [ 1, Moves.FIRE_FANG ], [ 1, Moves.IRON_HEAD ], + [ 1, Moves.HEAL_BLOCK ], [ 15, Moves.DOUBLE_HIT ], [ 20, Moves.METAL_SOUND ], [ 25, Moves.CRUSH_CLAW ], From e6c31966d79e71746f0893f4354d6890ebb88b3c Mon Sep 17 00:00:00 2001 From: dielle000 <168655502+dielle000@users.noreply.github.com> Date: Wed, 1 May 2024 21:10:31 +0200 Subject: [PATCH 053/110] Change pokemon stats chart Stats are arranged like in the mainline games --- src/ui/stats-container.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ui/stats-container.ts b/src/ui/stats-container.ts index 0144658051f..b8d9c59a4d7 100644 --- a/src/ui/stats-container.ts +++ b/src/ui/stats-container.ts @@ -4,7 +4,8 @@ import { Stat, getStatName } from "../data/pokemon-stat"; import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text"; const ivChartSize = 24; -const ivChartStatCoordMultipliers = [ [ 0, 1 ], [ 0.825, 0.5 ], [ 0.825, -0.5 ], [ 0, -1 ], [ -0.825, -0.5 ], [ -0.825, 0.5 ] ]; +const ivChartStatCoordMultipliers = [ [ 0, -1 ], [ 0.825, -0.5 ], [ 0.825, 0.5 ], [ -0.825, -0.5 ], [ -0.825, 0.5 ], [ 0, 1 ] ]; +const ivChartStatIndexes = [0,1,2,5,4,3] // swap special attack and speed const defaultIvChartData = new Array(12).fill(null).map(() => 0); export class StatsContainer extends Phaser.GameObjects.Container { @@ -22,7 +23,7 @@ export class StatsContainer extends Phaser.GameObjects.Container { } setup() { - const ivChartBgData = new Array(6).fill(null).map((_, i: integer) => [ ivChartSize * ivChartStatCoordMultipliers[i][0], ivChartSize * ivChartStatCoordMultipliers[i][1] ] ).flat(); + const ivChartBgData = new Array(6).fill(null).map((_, i: integer) => [ ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1] ] ).flat(); const ivChartBg = this.scene.add.polygon(48, 44, ivChartBgData, 0xd8e0f0, 0.625); ivChartBg.setOrigin(0, 0); @@ -62,7 +63,7 @@ export class StatsContainer extends Phaser.GameObjects.Container { updateIvs(ivs: integer[], originalIvs?: integer[]): void { if (ivs) { - const ivChartData = new Array(6).fill(null).map((_, i) => [ (ivs[i] / 31) * ivChartSize * ivChartStatCoordMultipliers[i][0], (ivs[i] / 31) * ivChartSize * ivChartStatCoordMultipliers[i][1] ] ).flat(); + const ivChartData = new Array(6).fill(null).map((_, i) => [ (ivs[ivChartStatIndexes[i]] / 31) * ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], (ivs[ivChartStatIndexes[i]] / 31) * ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1] ] ).flat(); const lastIvChartData = this.statsIvsCache || defaultIvChartData; this.statsIvsCache = ivChartData.slice(0); From 10169382d95b8249dbb8023d1051646d890debd1 Mon Sep 17 00:00:00 2001 From: InfernoVulpix <66154242+InfernoVulpix@users.noreply.github.com> Date: Wed, 1 May 2024 16:14:19 -0400 Subject: [PATCH 054/110] Implemented Synchronoise's effect (#221) * Implemented Synchronoise's effect Tested with Soak, Forest's Curse, and a variety of attacker and defender types. * Fixed Synchronoise double battle functionality It now does zero damage only to targets who do not share any types with it, while correctly damaging any who do. It also fails entirely if the user is UNKNOWN type. --- src/data/move.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/data/move.ts b/src/data/move.ts index 6ece04c70c4..78c47e1ea66 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -3706,6 +3706,19 @@ export class FirstMoveCondition extends MoveCondition { } } +export class hitsSameTypeAttr extends VariableMoveTypeMultiplierAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const multiplier = args[0] as Utils.NumberHolder; + if (!user.getTypes().some(type => target.getTypes().includes(type))){ + multiplier.value = 0; + return true; + } + return false; + } +} + +const unknownTypeCondition: MoveConditionFunc = (user, target, move) => !user.getTypes().includes(Type.UNKNOWN); + export type MoveTargetSet = { targets: BattlerIndex[]; multiple: boolean; @@ -5087,7 +5100,8 @@ export function initMoves() { .condition(failOnMaxCondition), new AttackMove(Moves.SYNCHRONOISE, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 5) .target(MoveTarget.ALL_NEAR_OTHERS) - .partial(), + .condition(unknownTypeCondition) + .attr(hitsSameTypeAttr), new AttackMove(Moves.ELECTRO_BALL, Type.ELECTRIC, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 5) .attr(BattleStatRatioPowerAttr, Stat.SPD) .ballBombMove(), From d6ca09e4317fa60b15abcd4b7ede5a71d3c9ebea Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Thu, 2 May 2024 06:36:47 +1000 Subject: [PATCH 055/110] Implement Belch --- src/data/berry.ts | 12 ++++++++++++ src/data/move.ts | 2 +- src/field/pokemon.ts | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/data/berry.ts b/src/data/berry.ts index b28772373b1..1228bb54904 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -99,6 +99,8 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { case BerryType.SITRUS: case BerryType.ENIGMA: return (pokemon: Pokemon) => { + if (pokemon.battleData) + pokemon.battleData.berriesEaten.push(berryType); const hpHealed = new Utils.NumberHolder(Math.floor(pokemon.getMaxHp() / 4)); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, hpHealed); pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), @@ -106,6 +108,8 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { }; case BerryType.LUM: return (pokemon: Pokemon) => { + if (pokemon.battleData) + pokemon.battleData.berriesEaten.push(berryType); if (pokemon.status) { pokemon.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect))); pokemon.resetStatus(); @@ -119,6 +123,8 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { case BerryType.APICOT: case BerryType.SALAC: return (pokemon: Pokemon) => { + if (pokemon.battleData) + pokemon.battleData.berriesEaten.push(berryType); const battleStat = (berryType - BerryType.LIECHI) as BattleStat; const statLevels = new Utils.NumberHolder(1); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels); @@ -126,16 +132,22 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { }; case BerryType.LANSAT: return (pokemon: Pokemon) => { + if (pokemon.battleData) + pokemon.battleData.berriesEaten.push(berryType); pokemon.addTag(BattlerTagType.CRIT_BOOST); }; case BerryType.STARF: return (pokemon: Pokemon) => { + if (pokemon.battleData) + pokemon.battleData.berriesEaten.push(berryType); const statLevels = new Utils.NumberHolder(2); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, statLevels); pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ BattleStat.RAND ], statLevels.value)); }; case BerryType.LEPPA: return (pokemon: Pokemon) => { + if (pokemon.battleData) + pokemon.battleData.berriesEaten.push(berryType); const ppRestoreMove = pokemon.getMoveset().find(m => !m.getPpRatio()); ppRestoreMove.ppUsed = Math.max(ppRestoreMove.ppUsed - 10, 0); pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` restored PP to its move ${ppRestoreMove.getName()}\nusing its ${getBerryName(berryType)}!`)); diff --git a/src/data/move.ts b/src/data/move.ts index 78c47e1ea66..8b94756d04b 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -5301,7 +5301,7 @@ export function initMoves() { new StatusMove(Moves.MAT_BLOCK, Type.FIGHTING, -1, 10, -1, 0, 6) .unimplemented(), new AttackMove(Moves.BELCH, Type.POISON, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 6) - .partial(), + .condition((user, target, move) => user.battleData.berriesEaten.length > 0), new StatusMove(Moves.ROTOTILLER, Type.GROUND, -1, 10, 100, 0, 6) .target(MoveTarget.ALL) .unimplemented(), diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 55036e1906d..ed248f7cc80 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -43,6 +43,7 @@ import { Nature, getNatureStatMultiplier } from '../data/nature'; import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from '../data/pokemon-forms'; import { TerrainType } from '../data/terrain'; import { TrainerSlot } from '../data/trainer-config'; +import { BerryType } from '../data/berry'; import { ABILITY_OVERRIDE, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../overrides'; export enum FieldPosition { @@ -2993,6 +2994,7 @@ export class PokemonSummonData { export class PokemonBattleData { public hitCount: integer = 0; public endured: boolean = false; + public berriesEaten: BerryType[] = []; } export class PokemonBattleSummonData { From 5a6ea40dae30a0fe5364acd4054389d34c479095 Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Thu, 2 May 2024 07:09:54 +1000 Subject: [PATCH 056/110] Implement Acrobatics Currently scales from 0-5 items --- src/data/move.ts | 2 +- src/field/pokemon.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/data/move.ts b/src/data/move.ts index 8b94756d04b..a13c1ac8861 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -5171,7 +5171,7 @@ export function initMoves() { new StatusMove(Moves.QUASH, Type.DARK, 100, 15, -1, 0, 5) .unimplemented(), new AttackMove(Moves.ACROBATICS, Type.FLYING, MoveCategory.PHYSICAL, 55, 100, 15, -1, 0, 5) - .partial(), + .attr(MovePowerMultiplierAttr, (user, target, move) => Math.max(1, 2 - 0.2 * user.getHeldItems().reduce((v, m) => v + m.stackCount, 0))), new StatusMove(Moves.REFLECT_TYPE, Type.NORMAL, -1, 15, -1, 0, 5) .attr(CopyTypeAttr), new AttackMove(Moves.RETALIATE, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index ed248f7cc80..82915ce41bc 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -456,6 +456,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return 1; } + getHeldItems(): PokemonHeldItemModifier[] { + if (!this.scene) + return []; + return this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === this.id, this.isPlayer()) as PokemonHeldItemModifier[]; + } + updateScale(): void { this.setScale(this.getSpriteScale()); } From 0f153d39b1131de54805822be32c790c1363b013 Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+TempsRay@users.noreply.github.com> Date: Wed, 1 May 2024 17:47:32 -0400 Subject: [PATCH 057/110] Fix effect spore immunities, tera blast TM distribution, and IVs shown on catch (#388) * Fix effect spore, tera blast distribution, and IVs shown on catch * Forgot to add tms * Unown does not learn any TMs * Fix some tera blast learns * delelele whooooop --- src/data/ability.ts | 15 +- src/data/tms.ts | 435 ++++++++++++++++++++++++++++++++++++++++++-- src/phases.ts | 2 +- 3 files changed, 433 insertions(+), 19 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 2ac7d6be1ac..35f6da685eb 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -679,6 +679,19 @@ export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr { } } +export class EffectSporeAbAttr extends PostDefendContactApplyStatusEffectAbAttr { + constructor() { + super(10, StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP); + } + + applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean { + if (attacker.hasAbility(Abilities.OVERCOAT) || attacker.isOfType(Type.GRASS)) { + return false; + } + return super.applyPostDefend(pokemon, passive, attacker, move, hitResult, args); + } +} + export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr { private chance: integer; private tagType: BattlerTagType; @@ -2572,7 +2585,7 @@ export function initAbilities() { .attr(TypeImmunityAbAttr, Type.GROUND, (pokemon: Pokemon) => !pokemon.getTag(BattlerTagType.IGNORE_FLYING) && !pokemon.scene.arena.getTag(ArenaTagType.GRAVITY) && !pokemon.getTag(BattlerTagType.GROUNDED)) .ignorable(), new Ability(Abilities.EFFECT_SPORE, 3) - .attr(PostDefendContactApplyStatusEffectAbAttr, 10, StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP), + .attr(EffectSporeAbAttr), new Ability(Abilities.SYNCHRONIZE, 3) .attr(SyncEncounterNatureAbAttr) .unimplemented(), diff --git a/src/data/tms.ts b/src/data/tms.ts index 71264d16c62..332eb2234b1 100644 --- a/src/data/tms.ts +++ b/src/data/tms.ts @@ -29550,7 +29550,6 @@ export const tmSpecies: TmSpecies = { Species.MURKROW, Species.SLOWKING, Species.MISDREAVUS, - Species.UNOWN, Species.GIRAFARIG, Species.PINECO, Species.FORRETRESS, @@ -62012,21 +62011,49 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_MAROWAK, ], [Moves.TERA_BLAST]: [ + Species.BULBASAUR, + Species.IVYSAUR, + Species.VENUSAUR, Species.CHARMANDER, Species.CHARMELEON, Species.CHARIZARD, + Species.SQUIRTLE, + Species.WARTORTLE, + Species.BLASTOISE, + Species.BUTTERFREE, + Species.BEEDRILL, + Species.PIDGEY, + Species.PIDGEOTTO, + Species.PIDGEOT, + Species.RATTATA, + Species.RATICATE, + Species.SPEAROW, + Species.FEAROW, Species.EKANS, Species.ARBOK, Species.PIKACHU, Species.RAICHU, Species.SANDSHREW, Species.SANDSLASH, + Species.NIDORAN_F, + Species.NIDORINA, + Species.NIDOQUEEN, + Species.NIDORAN_M, + Species.NIDORINO, + Species.NIDOKING, Species.CLEFAIRY, Species.CLEFABLE, Species.VULPIX, Species.NINETALES, Species.JIGGLYPUFF, Species.WIGGLYTUFF, + Species.ZUBAT, + Species.GOLBAT, + Species.ODDISH, + Species.GLOOM, + Species.VILEPLUME, + Species.PARAS, + Species.PARASECT, Species.VENONAT, Species.VENOMOTH, Species.DIGLETT, @@ -62042,16 +62069,31 @@ export const tmSpecies: TmSpecies = { Species.POLIWAG, Species.POLIWHIRL, Species.POLIWRATH, + Species.ABRA, + Species.KADABRA, + Species.ALAKAZAM, + Species.MACHOP, + Species.MACHOKE, + Species.MACHAMP, Species.BELLSPROUT, Species.WEEPINBELL, Species.VICTREEBEL, + Species.TENTACOOL, + Species.TENTACRUEL, Species.GEODUDE, Species.GRAVELER, Species.GOLEM, + Species.PONYTA, + Species.RAPIDASH, Species.SLOWPOKE, Species.SLOWBRO, Species.MAGNEMITE, Species.MAGNETON, + Species.FARFETCHD, + Species.DODUO, + Species.DODRIO, + Species.SEEL, + Species.DEWGONG, Species.GRIMER, Species.MUK, Species.SHELLDER, @@ -62059,20 +62101,52 @@ export const tmSpecies: TmSpecies = { Species.GASTLY, Species.HAUNTER, Species.GENGAR, + Species.ONIX, Species.DROWZEE, Species.HYPNO, + Species.KRABBY, + Species.KINGLER, Species.VOLTORB, Species.ELECTRODE, + Species.EXEGGCUTE, + Species.EXEGGUTOR, + Species.CUBONE, + Species.MAROWAK, + Species.HITMONLEE, + Species.HITMONCHAN, + Species.LICKITUNG, Species.KOFFING, Species.WEEZING, + Species.RHYHORN, + Species.RHYDON, Species.CHANSEY, + Species.TANGELA, + Species.KANGASKHAN, + Species.HORSEA, + Species.SEADRA, + Species.GOLDEEN, + Species.SEAKING, + Species.STARYU, + Species.STARMIE, + Species.MR_MIME, Species.SCYTHER, + Species.JYNX, + Species.ELECTABUZZ, + Species.MAGMAR, + Species.PINSIR, Species.TAUROS, Species.GYARADOS, + Species.LAPRAS, Species.EEVEE, Species.VAPOREON, Species.JOLTEON, Species.FLAREON, + Species.PORYGON, + Species.OMANYTE, + Species.OMASTAR, + Species.KABUTO, + Species.KABUTOPS, + Species.AERODACTYL, Species.SNORLAX, Species.ARTICUNO, Species.ZAPDOS, @@ -62082,21 +62156,37 @@ export const tmSpecies: TmSpecies = { Species.DRAGONITE, Species.MEWTWO, Species.MEW, + Species.CHIKORITA, + Species.BAYLEEF, + Species.MEGANIUM, Species.CYNDAQUIL, Species.QUILAVA, Species.TYPHLOSION, + Species.TOTODILE, + Species.CROCONAW, + Species.FERALIGATR, Species.SENTRET, Species.FURRET, Species.HOOTHOOT, Species.NOCTOWL, + Species.LEDYBA, + Species.LEDIAN, Species.SPINARAK, Species.ARIADOS, + Species.CROBAT, + Species.CHINCHOU, + Species.LANTURN, Species.PICHU, Species.CLEFFA, Species.IGGLYBUFF, + Species.TOGEPI, + Species.TOGETIC, + Species.NATU, + Species.XATU, Species.MAREEP, Species.FLAAFFY, Species.AMPHAROS, + Species.BELLOSSOM, Species.MARILL, Species.AZUMARILL, Species.SUDOWOODO, @@ -62120,8 +62210,12 @@ export const tmSpecies: TmSpecies = { Species.FORRETRESS, Species.DUNSPARCE, Species.GLIGAR, + Species.STEELIX, + Species.SNUBBULL, + Species.GRANBULL, Species.QWILFISH, Species.SCIZOR, + Species.SHUCKLE, Species.HERACROSS, Species.SNEASEL, Species.TEDDIURSA, @@ -62130,24 +62224,58 @@ export const tmSpecies: TmSpecies = { Species.MAGCARGO, Species.SWINUB, Species.PILOSWINE, + Species.CORSOLA, + Species.REMORAID, + Species.OCTILLERY, Species.DELIBIRD, + Species.MANTINE, + Species.SKARMORY, Species.HOUNDOUR, Species.HOUNDOOM, + Species.KINGDRA, Species.PHANPY, Species.DONPHAN, + Species.PORYGON2, Species.STANTLER, + Species.TYROGUE, + Species.HITMONTOP, + Species.SMOOCHUM, + Species.ELEKID, + Species.MAGBY, + Species.MILTANK, Species.BLISSEY, + Species.RAIKOU, + Species.ENTEI, + Species.SUICUNE, Species.LARVITAR, Species.PUPITAR, Species.TYRANITAR, + Species.LUGIA, + Species.HO_OH, + Species.CELEBI, + Species.TREECKO, + Species.GROVYLE, + Species.SCEPTILE, + Species.TORCHIC, + Species.COMBUSKEN, + Species.BLAZIKEN, + Species.MUDKIP, + Species.MARSHTOMP, + Species.SWAMPERT, Species.POOCHYENA, Species.MIGHTYENA, + Species.ZIGZAGOON, + Species.LINOONE, + Species.BEAUTIFLY, + Species.DUSTOX, Species.LOTAD, Species.LOMBRE, Species.LUDICOLO, Species.SEEDOT, Species.NUZLEAF, Species.SHIFTRY, + Species.TAILLOW, + Species.SWELLOW, Species.WINGULL, Species.PELIPPER, Species.RALTS, @@ -62160,49 +62288,101 @@ export const tmSpecies: TmSpecies = { Species.SLAKOTH, Species.VIGOROTH, Species.SLAKING, + Species.NINCADA, + Species.NINJASK, + Species.SHEDINJA, + Species.WHISMUR, + Species.LOUDRED, + Species.EXPLOUD, Species.MAKUHITA, Species.HARIYAMA, Species.AZURILL, Species.NOSEPASS, + Species.SKITTY, + Species.DELCATTY, Species.SABLEYE, + Species.MAWILE, + Species.ARON, + Species.LAIRON, + Species.AGGRON, Species.MEDITITE, Species.MEDICHAM, + Species.ELECTRIKE, + Species.MANECTRIC, + Species.PLUSLE, + Species.MINUN, Species.VOLBEAT, Species.ILLUMISE, + Species.ROSELIA, Species.GULPIN, Species.SWALOT, + Species.CARVANHA, + Species.SHARPEDO, + Species.WAILMER, + Species.WAILORD, Species.NUMEL, Species.CAMERUPT, Species.TORKOAL, Species.SPOINK, Species.GRUMPIG, + Species.SPINDA, + Species.TRAPINCH, + Species.VIBRAVA, + Species.FLYGON, Species.CACNEA, Species.CACTURNE, Species.SWABLU, Species.ALTARIA, Species.ZANGOOSE, Species.SEVIPER, + Species.LUNATONE, + Species.SOLROCK, Species.BARBOACH, Species.WHISCASH, Species.CORPHISH, Species.CRAWDAUNT, + Species.BALTOY, + Species.CLAYDOL, + Species.LILEEP, + Species.CRADILY, + Species.ANORITH, + Species.ARMALDO, Species.FEEBAS, Species.MILOTIC, + Species.CASTFORM, + Species.KECLEON, Species.SHUPPET, Species.BANETTE, Species.DUSKULL, Species.DUSCLOPS, Species.TROPIUS, Species.CHIMECHO, + Species.ABSOL, Species.SNORUNT, Species.GLALIE, + Species.SPHEAL, + Species.SEALEO, + Species.WALREIN, + Species.CLAMPERL, + Species.HUNTAIL, + Species.GOREBYSS, + Species.RELICANTH, Species.LUVDISC, Species.BAGON, Species.SHELGON, Species.SALAMENCE, + Species.METANG, + Species.METAGROSS, + Species.REGIROCK, + Species.REGICE, + Species.REGISTEEL, + Species.LATIAS, + Species.LATIOS, Species.KYOGRE, Species.GROUDON, Species.RAYQUAZA, + Species.JIRACHI, + Species.DEOXYS, Species.TURTWIG, Species.GROTLE, Species.TORTERRA, @@ -62215,30 +62395,49 @@ export const tmSpecies: TmSpecies = { Species.STARLY, Species.STARAVIA, Species.STARAPTOR, + Species.BIDOOF, + Species.BIBAREL, Species.KRICKETOT, Species.KRICKETUNE, Species.SHINX, Species.LUXIO, Species.LUXRAY, + Species.BUDEW, + Species.ROSERADE, + Species.CRANIDOS, + Species.RAMPARDOS, + Species.SHIELDON, + Species.BASTIODON, + Species.BURMY, + Species.WORMADAM, + Species.MOTHIM, Species.COMBEE, Species.VESPIQUEN, Species.PACHIRISU, Species.BUIZEL, Species.FLOATZEL, + Species.CHERUBI, + Species.CHERRIM, Species.SHELLOS, Species.GASTRODON, Species.AMBIPOM, Species.DRIFLOON, Species.DRIFBLIM, + Species.BUNEARY, + Species.LOPUNNY, Species.MISMAGIUS, Species.HONCHKROW, + Species.GLAMEOW, + Species.PURUGLY, Species.CHINGLING, Species.STUNKY, Species.SKUNTANK, Species.BRONZOR, Species.BRONZONG, Species.BONSLY, + Species.MIME_JR, Species.HAPPINY, + Species.CHATOT, Species.SPIRITOMB, Species.GIBLE, Species.GABITE, @@ -62248,19 +62447,30 @@ export const tmSpecies: TmSpecies = { Species.LUCARIO, Species.HIPPOPOTAS, Species.HIPPOWDON, + Species.SKORUPI, + Species.DRAPION, Species.CROAGUNK, Species.TOXICROAK, + Species.CARNIVINE, Species.FINNEON, Species.LUMINEON, + Species.MANTYKE, Species.SNOVER, Species.ABOMASNOW, Species.WEAVILE, Species.MAGNEZONE, + Species.LICKILICKY, + Species.RHYPERIOR, + Species.TANGROWTH, + Species.ELECTIVIRE, + Species.MAGMORTAR, + Species.TOGEKISS, Species.YANMEGA, Species.LEAFEON, Species.GLACEON, Species.GLISCOR, Species.MAMOSWINE, + Species.PORYGON_Z, Species.GALLADE, Species.PROBOPASS, Species.DUSKNOIR, @@ -62272,39 +62482,127 @@ export const tmSpecies: TmSpecies = { Species.DIALGA, Species.PALKIA, Species.HEATRAN, + Species.REGIGIGAS, Species.GIRATINA, Species.CRESSELIA, + Species.PHIONE, + Species.MANAPHY, + Species.DARKRAI, + Species.SHAYMIN, Species.ARCEUS, + Species.VICTINI, + Species.SNIVY, + Species.SERVINE, + Species.SERPERIOR, + Species.TEPIG, + Species.PIGNITE, + Species.EMBOAR, Species.OSHAWOTT, Species.DEWOTT, Species.SAMUROTT, + Species.PATRAT, + Species.WATCHOG, + Species.LILLIPUP, + Species.HERDIER, + Species.STOUTLAND, + Species.PURRLOIN, + Species.LIEPARD, + Species.PANSAGE, + Species.SIMISAGE, + Species.PANSEAR, + Species.SIMISEAR, + Species.PANPOUR, + Species.SIMIPOUR, + Species.MUNNA, + Species.MUSHARNA, + Species.PIDOVE, + Species.TRANQUILL, + Species.UNFEZANT, + Species.BLITZLE, + Species.ZEBSTRIKA, + Species.ROGGENROLA, + Species.BOLDORE, + Species.GIGALITH, + Species.WOOBAT, + Species.SWOOBAT, + Species.DRILBUR, + Species.EXCADRILL, + Species.AUDINO, Species.TIMBURR, Species.GURDURR, Species.CONKELDURR, + Species.TYMPOLE, + Species.PALPITOAD, + Species.SEISMITOAD, + Species.THROH, + Species.SAWK, Species.SEWADDLE, Species.SWADLOON, Species.LEAVANNY, + Species.VENIPEDE, + Species.WHIRLIPEDE, + Species.SCOLIPEDE, + Species.COTTONEE, + Species.WHIMSICOTT, Species.PETILIL, Species.LILLIGANT, Species.BASCULIN, Species.SANDILE, Species.KROKOROK, Species.KROOKODILE, + Species.DARUMAKA, + Species.DARMANITAN, + Species.MARACTUS, + Species.DWEBBLE, + Species.CRUSTLE, + Species.SCRAGGY, + Species.SCRAFTY, + Species.SIGILYPH, + Species.YAMASK, + Species.COFAGRIGUS, + Species.TIRTOUGA, + Species.CARRACOSTA, + Species.ARCHEN, + Species.ARCHEOPS, + Species.TRUBBISH, + Species.GARBODOR, Species.ZORUA, Species.ZOROARK, + Species.MINCCINO, + Species.CINCCINO, Species.GOTHITA, Species.GOTHORITA, Species.GOTHITELLE, + Species.SOLOSIS, + Species.DUOSION, + Species.REUNICLUS, Species.DUCKLETT, Species.SWANNA, + Species.VANILLITE, + Species.VANILLISH, + Species.VANILLUXE, Species.DEERLING, Species.SAWSBUCK, + Species.EMOLGA, + Species.KARRABLAST, + Species.ESCAVALIER, Species.FOONGUS, Species.AMOONGUSS, + Species.FRILLISH, + Species.JELLICENT, Species.ALOMOMOLA, + Species.JOLTIK, + Species.GALVANTULA, + Species.FERROSEED, + Species.FERROTHORN, + Species.KLINK, + Species.KLANG, + Species.KLINKLANG, Species.TYNAMO, Species.EELEKTRIK, Species.EELEKTROSS, + Species.ELGYEM, + Species.BEHEEYEM, Species.LITWICK, Species.LAMPENT, Species.CHANDELURE, @@ -62314,23 +62612,40 @@ export const tmSpecies: TmSpecies = { Species.CUBCHOO, Species.BEARTIC, Species.CRYOGONAL, + Species.SHELMET, + Species.ACCELGOR, + Species.STUNFISK, Species.MIENFOO, Species.MIENSHAO, + Species.DRUDDIGON, + Species.GOLETT, + Species.GOLURK, Species.PAWNIARD, Species.BISHARP, + Species.BOUFFALANT, Species.RUFFLET, Species.BRAVIARY, Species.VULLABY, Species.MANDIBUZZ, + Species.HEATMOR, + Species.DURANT, Species.DEINO, Species.ZWEILOUS, Species.HYDREIGON, Species.LARVESTA, Species.VOLCARONA, + Species.COBALION, + Species.TERRAKION, + Species.VIRIZION, Species.TORNADUS, Species.THUNDURUS, + Species.RESHIRAM, + Species.ZEKROM, Species.LANDORUS, + Species.KYUREM, + Species.KELDEO, Species.MELOETTA, + Species.GENESECT, Species.CHESPIN, Species.QUILLADIN, Species.CHESNAUGHT, @@ -62345,6 +62660,8 @@ export const tmSpecies: TmSpecies = { 'battle-bond', 'ash', ], + Species.BUNNELBY, + Species.DIGGERSBY, Species.FLETCHLING, Species.FLETCHINDER, Species.TALONFLAME, @@ -62354,14 +62671,43 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - Species.FLOETTE, + [ + Species.FLOETTE, + 'red', + 'yellow', + 'orange', + 'blue', + 'white', + ], Species.FLORGES, Species.SKIDDO, Species.GOGOAT, + Species.PANCHAM, + Species.PANGORO, + Species.FURFROU, + Species.ESPURR, + Species.MEOWSTIC, + Species.HONEDGE, + Species.DOUBLADE, + Species.AEGISLASH, + Species.SPRITZEE, + Species.AROMATISSE, + Species.SWIRLIX, + Species.SLURPUFF, + Species.INKAY, + Species.MALAMAR, + Species.BINACLE, + Species.BARBARACLE, Species.SKRELP, Species.DRAGALGE, Species.CLAUNCHER, Species.CLAWITZER, + Species.HELIOPTILE, + Species.HELIOLISK, + Species.TYRUNT, + Species.TYRANTRUM, + Species.AMAURA, + Species.AURORUS, Species.SYLVEON, Species.HAWLUCHA, Species.DEDENNE, @@ -62372,16 +62718,30 @@ export const tmSpecies: TmSpecies = { Species.KLEFKI, Species.PHANTUMP, Species.TREVENANT, + Species.PUMPKABOO, + Species.GOURGEIST, Species.BERGMITE, Species.AVALUGG, Species.NOIBAT, Species.NOIVERN, + Species.XERNEAS, + Species.YVELTAL, + Species.ZYGARDE, Species.DIANCIE, Species.HOOPA, Species.VOLCANION, Species.ROWLET, Species.DARTRIX, Species.DECIDUEYE, + Species.LITTEN, + Species.TORRACAT, + Species.INCINEROAR, + Species.POPPLIO, + Species.BRIONNE, + Species.PRIMARINA, + Species.PIKIPEK, + Species.TRUMBEAK, + Species.TOUCANNON, Species.YUNGOOS, Species.GUMSHOOS, Species.GRUBBIN, @@ -62394,28 +62754,84 @@ export const tmSpecies: TmSpecies = { Species.RIBOMBEE, Species.ROCKRUFF, Species.LYCANROC, + Species.WISHIWASHI, Species.MAREANIE, Species.TOXAPEX, Species.MUDBRAY, Species.MUDSDALE, + Species.DEWPIDER, + Species.ARAQUANID, Species.FOMANTIS, Species.LURANTIS, + Species.MORELULL, + Species.SHIINOTIC, Species.SALANDIT, Species.SALAZZLE, + Species.STUFFUL, + Species.BEWEAR, Species.BOUNSWEET, Species.STEENEE, Species.TSAREENA, + Species.COMFEY, Species.ORANGURU, Species.PASSIMIAN, + Species.WIMPOD, + Species.GOLISOPOD, Species.SANDYGAST, Species.PALOSSAND, + Species.TYPE_NULL, + Species.SILVALLY, + Species.MINIOR, Species.KOMALA, + Species.TURTONATOR, + Species.TOGEDEMARU, Species.MIMIKYU, Species.BRUXISH, + Species.DRAMPA, + Species.DHELMISE, Species.JANGMO_O, Species.HAKAMO_O, Species.KOMMO_O, + Species.TAPU_KOKO, + Species.TAPU_LELE, + Species.TAPU_BULU, + Species.TAPU_FINI, + Species.SOLGALEO, + Species.LUNALA, + Species.NIHILEGO, + Species.BUZZWOLE, + Species.PHEROMOSA, + Species.XURKITREE, + Species.CELESTEELA, + Species.KARTANA, + Species.GUZZLORD, + Species.NECROZMA, Species.MAGEARNA, + Species.MARSHADOW, + Species.POIPOLE, + Species.NAGANADEL, + Species.STAKATAKA, + Species.BLACEPHALON, + Species.ZERAORA, + Species.ALOLA_RATTATA, + Species.ALOLA_RATICATE, + Species.ALOLA_RAICHU, + Species.ALOLA_SANDSHREW, + Species.ALOLA_SANDSLASH, + Species.ALOLA_VULPIX, + Species.ALOLA_NINETALES, + Species.ALOLA_DIGLETT, + Species.ALOLA_DUGTRIO, + Species.ALOLA_MEOWTH, + Species.ALOLA_PERSIAN, + Species.ALOLA_GEODUDE, + Species.ALOLA_GRAVELER, + Species.ALOLA_GOLEM, + Species.ALOLA_GRIMER, + Species.ALOLA_MUK, + Species.ALOLA_EXEGGUTOR, + Species.ALOLA_MAROWAK, + Species.ETERNAL_FLOETTE, Species.GROOKEY, Species.THWACKEY, Species.RILLABOOM, @@ -62596,21 +63012,6 @@ export const tmSpecies: TmSpecies = { Species.MUNKIDORI, Species.FEZANDIPITI, Species.OGERPON, - Species.ALOLA_RAICHU, - Species.ALOLA_SANDSHREW, - Species.ALOLA_SANDSLASH, - Species.ALOLA_VULPIX, - Species.ALOLA_NINETALES, - Species.ALOLA_DIGLETT, - Species.ALOLA_DUGTRIO, - Species.ALOLA_MEOWTH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GEODUDE, - Species.ALOLA_GRAVELER, - Species.ALOLA_GOLEM, - Species.ALOLA_GRIMER, - Species.ALOLA_MUK, - Species.ETERNAL_FLOETTE, Species.GALAR_MEOWTH, Species.GALAR_SLOWPOKE, Species.GALAR_SLOWBRO, diff --git a/src/phases.ts b/src/phases.ts index ad2a7537de7..2e0b8425567 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -4095,7 +4095,7 @@ export class AttemptCapturePhase extends PokemonPhase { this.scene.pokemonInfoContainer.show(pokemon, true); - this.scene.gameData.updateSpeciesDexIvs(pokemon.species.speciesId, pokemon.ivs); + this.scene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs); this.scene.ui.showText(i18next.t('menu:pokemonCaught', { pokemonName: pokemon.name }), null, () => { const end = () => { From 7a418109c3063d45cd0f334ff1ef61dc87f339c6 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Wed, 1 May 2024 18:17:12 -0400 Subject: [PATCH 058/110] Fix not checking move conditions for AI --- src/data/ability.ts | 6 +++--- src/data/move.ts | 24 +++++++++++++++--------- src/field/pokemon.ts | 2 +- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 35f6da685eb..7c350f025be 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -919,8 +919,8 @@ export class MovePowerBoostAbAttr extends VariableMovePowerAbAttr { private condition: PokemonAttackCondition; private powerMultiplier: number; - constructor(condition: PokemonAttackCondition, powerMultiplier: number) { - super(true); + constructor(condition: PokemonAttackCondition, powerMultiplier: number, showAbility: boolean = true) { + super(showAbility); this.condition = condition; this.powerMultiplier = powerMultiplier; } @@ -2725,7 +2725,7 @@ export function initAbilities() { .attr(TypeImmunityStatChangeAbAttr, Type.ELECTRIC, BattleStat.SPD, 1) .ignorable(), new Ability(Abilities.RIVALRY, 4) - .attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender === target.gender, 1.25) + .attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender === target.gender, 1.25, true) .attr(MovePowerBoostAbAttr, (user, target, move) => user.gender !== Gender.GENDERLESS && target.gender !== Gender.GENDERLESS && user.gender !== target.gender, 0.75), new Ability(Abilities.STEADFAST, 4) .attr(FlinchStatChangeAbAttr, BattleStat.SPD, 1), diff --git a/src/data/move.ts b/src/data/move.ts index a13c1ac8861..d6367794a35 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -3645,6 +3645,20 @@ export class MoneyAttr extends MoveEffectAttr { } } +export class LastResortAttr extends MoveAttr { + getCondition(): MoveConditionFunc { + return (user: Pokemon, target: Pokemon, move: Move) => { + const uniqueUsedMoveIds = new Set(); + const movesetMoveIds = user.getMoveset().map(m => m.moveId); + user.getMoveHistory().map(m => { + if (m.move !== move.id && movesetMoveIds.find(mm => mm === m.move)) + uniqueUsedMoveIds.add(m.move); + }); + return uniqueUsedMoveIds.size >= movesetMoveIds.length - 1; + }; + } +} + const failOnGravityCondition: MoveConditionFunc = (user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY); const failOnBossCondition: MoveConditionFunc = (user, target, move) => !target.isBossImmune(); @@ -4836,15 +4850,7 @@ export function initMoves() { new AttackMove(Moves.PUNISHMENT, Type.DARK, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) .unimplemented(), new AttackMove(Moves.LAST_RESORT, Type.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4) - .condition((user, target, move) => { - const uniqueUsedMoveIds = new Set(); - const movesetMoveIds = user.getMoveset().map(m => m.moveId); - user.getMoveHistory().map(m => { - if (m.move !== move.id && movesetMoveIds.find(mm => mm === m.move)) - uniqueUsedMoveIds.add(m.move); - }); - return uniqueUsedMoveIds.size >= movesetMoveIds.length - 1; - }), + .attr(LastResortAttr), new StatusMove(Moves.WORRY_SEED, Type.GRASS, 100, 10, -1, 0, 4) .attr(AbilityChangeAttr, Abilities.INSOMNIA), new AttackMove(Moves.SUCKER_PUNCH, Type.DARK, MoveCategory.PHYSICAL, 70, 100, 5, -1, 1, 4) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 82915ce41bc..ce2d8dfffe6 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2680,7 +2680,7 @@ export class EnemyPokemon extends Pokemon { for (let mt of moveTargets[move.id]) { const target = this.scene.getField()[mt]; let targetScore = move.getUserBenefitScore(this, target, move) + move.getTargetBenefitScore(this, target, move) * (mt < BattlerIndex.ENEMY === this.isPlayer() ? 1 : -1); - if (move.name.endsWith(' (N)')) + if (move.name.endsWith(' (N)') || !move.applyConditions(this, target, move)) targetScore = -20; else if (move instanceof AttackMove) { const effectiveness = target.getAttackMoveEffectiveness(this, pokemonMove); From 89e2642d91e419d2ec61574f98d1e9286f213ce9 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Wed, 1 May 2024 18:24:21 -0400 Subject: [PATCH 059/110] Fix update issue for battle stats display --- src/ui/battle-info.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index ae8f518e727..2ca0457c801 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -498,11 +498,14 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.lastLevel = pokemon.level; } - if (pokemon.summonData) { - const battleStats = pokemon.summonData.battleStats.join(''); - - if (this.lastBattleStats !== battleStats) - this.updateBattleStats(pokemon.summonData.battleStats); + const battleStats = pokemon.summonData + ? pokemon.summonData.battleStats + : battleStatOrder.map(() => 0); + const battleStatsStr = battleStats.join(''); + + if (this.lastBattleStats !== battleStatsStr) { + this.updateBattleStats(battleStats); + this.lastBattleStats = battleStatsStr; } this.shinyIcon.setVisible(pokemon.isShiny()); From e34b20466426a9944a71306b993c6d149eeabd20 Mon Sep 17 00:00:00 2001 From: TeKrop Date: Wed, 1 May 2024 22:48:58 +0200 Subject: [PATCH 060/110] feat: added support for localisation on battle scene sentences --- src/field/pokemon.ts | 13 +++++++------ src/locales/de/menu.ts | 7 ++++++- src/locales/en/menu.ts | 7 ++++++- src/locales/es/menu.ts | 7 ++++++- src/locales/fr/menu.ts | 7 ++++++- src/locales/it/menu.ts | 7 ++++++- 6 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index ce2d8dfffe6..8c9224f5e1f 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -45,6 +45,7 @@ import { TerrainType } from '../data/terrain'; import { TrainerSlot } from '../data/trainer-config'; import { BerryType } from '../data/berry'; import { ABILITY_OVERRIDE, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../overrides'; +import i18next from '../plugins/i18n'; export enum FieldPosition { CENTER, @@ -1417,7 +1418,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { damage.value = this.damageAndUpdate(damage.value, result as DamageResult, isCritical, oneHitKo, oneHitKo); this.turnData.damageTaken += damage.value; if (isCritical) - this.scene.queueMessage('A critical hit!'); + this.scene.queueMessage(i18next.t('menu:hitResultCriticalHit')); this.scene.setPhaseQueueSplice(); if (source.isPlayer()) { this.scene.validateAchvs(DamageAchv, damage); @@ -1435,16 +1436,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (source.turnData.hitsLeft === 1) { switch (result) { case HitResult.SUPER_EFFECTIVE: - this.scene.queueMessage('It\'s super effective!'); + this.scene.queueMessage(i18next.t('menu:hitResultSuperEffective')); break; case HitResult.NOT_VERY_EFFECTIVE: - this.scene.queueMessage('It\'s not very effective…'); + this.scene.queueMessage(i18next.t('menu:hitResultNotVeryEffective')); break; case HitResult.NO_EFFECT: - this.scene.queueMessage(`It doesn\'t affect ${this.name}!`); + this.scene.queueMessage(i18next.t('menu:hitResultNoEffect', { pokemonName: this.name })); break; case HitResult.ONE_HIT_KO: - this.scene.queueMessage('It\'s a one-hit KO!'); + this.scene.queueMessage(i18next.t('menu:hitResultOneHitKO')); break; } } @@ -1461,7 +1462,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { defendingSidePlayField.forEach((p) => applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, battlerMove, cancelled, typeMultiplier)); } if (!typeMultiplier.value) - this.scene.queueMessage(`It doesn\'t affect ${this.name}!`); + this.scene.queueMessage(i18next.t('menu:hitResultNoEffect', { pokemonName: this.name })); result = cancelled.value || !typeMultiplier.value ? HitResult.NO_EFFECT : HitResult.STATUS; break; } diff --git a/src/locales/de/menu.ts b/src/locales/de/menu.ts index 442cfae218f..a8e0a901f3f 100644 --- a/src/locales/de/menu.ts +++ b/src/locales/de/menu.ts @@ -63,5 +63,10 @@ export const menu: SimpleTranslationEntries = { "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online" + "playersOnline": "Players Online", + "hitResultCriticalHit": "A critical hit!", + "hitResultSuperEffective": "It's super effective!", + "hitResultNotVeryEffective": "It's not very effective…", + "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", + "hitResultOneHitKO": "It's a one-hit KO!" } as const; \ No newline at end of file diff --git a/src/locales/en/menu.ts b/src/locales/en/menu.ts index 82a09e49d4f..21620e9b30f 100644 --- a/src/locales/en/menu.ts +++ b/src/locales/en/menu.ts @@ -82,5 +82,10 @@ export const menu: SimpleTranslationEntries = { "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online" + "playersOnline": "Players Online", + "hitResultCriticalHit": "A critical hit!", + "hitResultSuperEffective": "It's super effective!", + "hitResultNotVeryEffective": "It's not very effective…", + "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", + "hitResultOneHitKO": "It's a one-hit KO!" } as const; \ No newline at end of file diff --git a/src/locales/es/menu.ts b/src/locales/es/menu.ts index 5dccc2e4eb3..0a43f19b768 100644 --- a/src/locales/es/menu.ts +++ b/src/locales/es/menu.ts @@ -66,5 +66,10 @@ export const menu: SimpleTranslationEntries = { "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online" + "playersOnline": "Players Online", + "hitResultCriticalHit": "A critical hit!", + "hitResultSuperEffective": "It's super effective!", + "hitResultNotVeryEffective": "It's not very effective…", + "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", + "hitResultOneHitKO": "It's a one-hit KO!" } as const; \ No newline at end of file diff --git a/src/locales/fr/menu.ts b/src/locales/fr/menu.ts index d5478c67a26..c485412bf1a 100644 --- a/src/locales/fr/menu.ts +++ b/src/locales/fr/menu.ts @@ -77,5 +77,10 @@ export const menu: SimpleTranslationEntries = { "weeklyRankings": "Classement de la Semaine", "noRankings": "Pas de Classement", "loading": "Chargement…", - "playersOnline": "Joueurs Connectés" + "playersOnline": "Joueurs Connectés", + "hitResultCriticalHit": "Coup critique!", + "hitResultSuperEffective": "C'est super efficace!", + "hitResultNotVeryEffective": "Ce n'est pas très efficace…", + "hitResultNoEffect": "Ça n'affecte pas {{pokemonName}}…", + "hitResultOneHitKO": "K.O. en un coup!" } as const; diff --git a/src/locales/it/menu.ts b/src/locales/it/menu.ts index c37a37b5169..118c1dccb5f 100644 --- a/src/locales/it/menu.ts +++ b/src/locales/it/menu.ts @@ -11,5 +11,10 @@ export const menu: SimpleTranslationEntries = { "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online" + "playersOnline": "Players Online", + "hitResultCriticalHit": "A critical hit!", + "hitResultSuperEffective": "It's super effective!", + "hitResultNotVeryEffective": "It's not very effective…", + "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", + "hitResultOneHitKO": "It's a one-hit KO!" } as const; \ No newline at end of file From 6ac224ab8a4e3e5ec6aa7fdc2d8b60111343f2fd Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Wed, 1 May 2024 18:53:48 -0400 Subject: [PATCH 061/110] Refactor to split battle messages from menu --- src/field/pokemon.ts | 12 ++--- src/locales/de/battle.ts | 52 ++++++++++++++++++ src/locales/de/fight-ui-handler.ts | 6 +++ src/locales/de/menu.ts | 31 +---------- src/locales/en/battle.ts | 52 ++++++++++++++++++ src/locales/en/menu.ts | 50 +---------------- src/locales/es/battle.ts | 52 ++++++++++++++++++ src/locales/es/fight-ui-handler.ts | 6 +++ src/locales/es/menu.ts | 50 +---------------- src/locales/fr/battle.ts | 52 ++++++++++++++++++ src/locales/fr/menu.ts | 50 +---------------- src/locales/it/battle.ts | 52 ++++++++++++++++++ src/locales/it/fight-ui-handler.ts | 6 +++ src/locales/it/menu.ts | 35 +++++++++--- src/phases.ts | 86 +++++++++++++++--------------- src/plugins/i18n.ts | 18 +++++++ 16 files changed, 378 insertions(+), 232 deletions(-) create mode 100644 src/locales/de/battle.ts create mode 100644 src/locales/de/fight-ui-handler.ts create mode 100644 src/locales/en/battle.ts create mode 100644 src/locales/es/battle.ts create mode 100644 src/locales/es/fight-ui-handler.ts create mode 100644 src/locales/fr/battle.ts create mode 100644 src/locales/it/battle.ts create mode 100644 src/locales/it/fight-ui-handler.ts diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 8c9224f5e1f..a966a24303f 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1418,7 +1418,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { damage.value = this.damageAndUpdate(damage.value, result as DamageResult, isCritical, oneHitKo, oneHitKo); this.turnData.damageTaken += damage.value; if (isCritical) - this.scene.queueMessage(i18next.t('menu:hitResultCriticalHit')); + this.scene.queueMessage(i18next.t('battle:hitResultCriticalHit')); this.scene.setPhaseQueueSplice(); if (source.isPlayer()) { this.scene.validateAchvs(DamageAchv, damage); @@ -1436,16 +1436,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (source.turnData.hitsLeft === 1) { switch (result) { case HitResult.SUPER_EFFECTIVE: - this.scene.queueMessage(i18next.t('menu:hitResultSuperEffective')); + this.scene.queueMessage(i18next.t('battle:hitResultSuperEffective')); break; case HitResult.NOT_VERY_EFFECTIVE: - this.scene.queueMessage(i18next.t('menu:hitResultNotVeryEffective')); + this.scene.queueMessage(i18next.t('battle:hitResultNotVeryEffective')); break; case HitResult.NO_EFFECT: - this.scene.queueMessage(i18next.t('menu:hitResultNoEffect', { pokemonName: this.name })); + this.scene.queueMessage(i18next.t('battle:hitResultNoEffect', { pokemonName: this.name })); break; case HitResult.ONE_HIT_KO: - this.scene.queueMessage(i18next.t('menu:hitResultOneHitKO')); + this.scene.queueMessage(i18next.t('battle:hitResultOneHitKO')); break; } } @@ -1462,7 +1462,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { defendingSidePlayField.forEach((p) => applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, battlerMove, cancelled, typeMultiplier)); } if (!typeMultiplier.value) - this.scene.queueMessage(i18next.t('menu:hitResultNoEffect', { pokemonName: this.name })); + this.scene.queueMessage(i18next.t('battle:hitResultNoEffect', { pokemonName: this.name })); result = cancelled.value || !typeMultiplier.value ? HitResult.NO_EFFECT : HitResult.STATUS; break; } diff --git a/src/locales/de/battle.ts b/src/locales/de/battle.ts new file mode 100644 index 00000000000..61191a1165a --- /dev/null +++ b/src/locales/de/battle.ts @@ -0,0 +1,52 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const battle: SimpleTranslationEntries = { + "bossAppeared": "{{bossName}} erscheint.", + "trainerAppeared": "{{trainerName}}\nmöchte kämpfen!", + "singleWildAppeared": "Ein wildes {{pokemonName}} erscheint!", + "multiWildAppeared": "Ein wildes {{pokemonName1}}\nund {{pokemonName2}} erscheinen!", + "playerComeBack": "Komm zurück, {{pokemonName}}!", + "trainerComeBack": "{{trainerName}} ruft {{pokemonName}} zurück!", + "playerGo": "Los! {{pokemonName}}!", + "trainerGo": "{{trainerName}} sendet {{pokemonName}} raus!", + "switchQuestion": "Willst du\n{{pokemonName}} auswechseln?", + "trainerDefeated": `You defeated\n{{trainerName}}!`, + "pokemonCaught": "{{pokemonName}} was caught!", + "pokemon": "Pokémon", + "sendOutPokemon": "Los! {{pokemonName}}!", + "hitResultCriticalHit": "A critical hit!", + "hitResultSuperEffective": "It's super effective!", + "hitResultNotVeryEffective": "It's not very effective…", + "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", + "hitResultOneHitKO": "It's a one-hit KO!", + "attackFailed": "But it failed!", + "attackHitsCount": `Hit {{count}} time(s)!`, + "expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!", + "levelUp": "{{pokemonName}} grew to\nLv. {{level}}!", + "learnMove": "{{pokemonName}} learned\n{{moveName}}!", + "learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.", + "learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.", + "learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?", + "learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?", + "learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.", + "learnMoveForgetQuestion": "Which move should be forgotten?", + "learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.", + "levelCapUp": "Das Levellimit\nhat sich zu {{levelCap}} erhöht!", + "moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.", + "moveDisabled": "{{moveName}} ist deaktiviert!", + "noPokeballForce": "Eine unsichtbare Kraft\nverhindert die Nutzung von Pokébällen.", + "noPokeballTrainer": "Du kannst das Pokémon\neines anderen Trainers nicht fangen!", + "noPokeballMulti": "Du kannst erst einen Pokéball werden,\nwenn nur noch ein Pokémon übrig ist!", + "noPokeballStrong": "Das Ziel-Pokémon ist zu stark, um gefangen zu werden!\nDu musst es zuerst schwächen!", + "noEscapeForce": "Eine unsichtbare Kraft\nverhindert die Flucht.", + "noEscapeTrainer": "Du kannst nicht\naus einem Trainerkampf fliehen!", + "noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nverhindert {{escapeVerb}}!", + "runAwaySuccess": "You got away safely!", + "runAwayCannotEscape": 'You can\'t escape!', + "escapeVerbSwitch": "auswechseln", + "escapeVerbFlee": "flucht", + "notDisabled": "{{moveName}} ist\nnicht mehr deaktiviert!", + "skipItemQuestion": "Are you sure you want to skip taking an item?", + "eggHatching": "Oh?", + "ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?" +} as const; \ No newline at end of file diff --git a/src/locales/de/fight-ui-handler.ts b/src/locales/de/fight-ui-handler.ts new file mode 100644 index 00000000000..1ce9e0317bf --- /dev/null +++ b/src/locales/de/fight-ui-handler.ts @@ -0,0 +1,6 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const fightUiHandler: SimpleTranslationEntries = { + "pp": "PP", + "power": "POWER", +} as const; \ No newline at end of file diff --git a/src/locales/de/menu.ts b/src/locales/de/menu.ts index a8e0a901f3f..c648b15bfe8 100644 --- a/src/locales/de/menu.ts +++ b/src/locales/de/menu.ts @@ -35,38 +35,9 @@ export const menu: SimpleTranslationEntries = { "boyOrGirl": "Bist du ein Junge oder ein Mädchen?", "boy": "Junge", "girl": "Mädchen", - "bossAppeared": "{{bossName}} erscheint.", - "trainerAppeared": "{{trainerName}}\nmöchte kämpfen!", - "singleWildAppeared": "Ein wildes {{pokemonName}} erscheint!", - "multiWildAppeared": "Ein wildes {{pokemonName1}}\nund {{pokemonName2}} erscheinen!", - "playerComeBack": "Komm zurück, {{pokemonName}}!", - "trainerComeBack": "{{trainerName}} ruft {{pokemonName}} zurück!", - "playerGo": "Los! {{pokemonName}}!", - "trainerGo": "{{trainerName}} sendet {{pokemonName}} raus!", - "switchQuestion": "Willst du\n{{pokemonName}} auswechseln?", - "pokemon": "Pokémon", - "sendOutPokemon": "Los! {{pokemonName}}!", - "levelCapUp": "Das Levellimit\nhat sich zu {{levelCap}} erhöht!", - "moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.", - "moveDisabled": "{{moveName}} ist deaktiviert!", - "noPokeballForce": "Eine unsichtbare Kraft\nverhindert die Nutzung von Pokébällen.", - "noPokeballTrainer": "Du kannst das Pokémon\neines anderen Trainers nicht fangen!", - "noPokeballMulti": "Du kannst erst einen Pokéball werden,\nwenn nur noch ein Pokémon übrig ist!", - "noPokeballStrong": "Das Ziel-Pokémon ist zu stark, um gefangen zu werden!\nDu musst es zuerst schwächen!", - "noEscapeForce": "Eine unsichtbare Kraft\nverhindert die Flucht.", - "noEscapeTrainer": "Du kannst nicht\naus einem Trainerkampf fliehen!", - "noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nverhindert {{escapeVerb}}!", - "escapeVerbSwitch": "auswechseln", - "escapeVerbFlee": "flucht", - "notDisabled": "{{moveName}} ist\nnicht mehr deaktiviert!", "dailyRankings": "Daily Rankings", "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online", - "hitResultCriticalHit": "A critical hit!", - "hitResultSuperEffective": "It's super effective!", - "hitResultNotVeryEffective": "It's not very effective…", - "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", - "hitResultOneHitKO": "It's a one-hit KO!" + "playersOnline": "Players Online" } as const; \ No newline at end of file diff --git a/src/locales/en/battle.ts b/src/locales/en/battle.ts new file mode 100644 index 00000000000..599672a1b19 --- /dev/null +++ b/src/locales/en/battle.ts @@ -0,0 +1,52 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const battle: SimpleTranslationEntries = { + "bossAppeared": "{{bossName}} appeared.", + "trainerAppeared": "{{trainerName}}\nwould like to battle!", + "singleWildAppeared": "A wild {{pokemonName}} appeared!", + "multiWildAppeared": "A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!", + "playerComeBack": "Come back, {{pokemonName}}!", + "trainerComeBack": "{{trainerName}} withdrew {{pokemonName}}!", + "playerGo": "Go! {{pokemonName}}!", + "trainerGo": "{{trainerName}} sent out {{pokemonName}}!", + "switchQuestion": "Will you switch\n{{pokemonName}}?", + "trainerDefeated": `You defeated\n{{trainerName}}!`, + "pokemonCaught": "{{pokemonName}} was caught!", + "pokemon": "Pokémon", + "sendOutPokemon": "Go! {{pokemonName}}!", + "hitResultCriticalHit": "A critical hit!", + "hitResultSuperEffective": "It's super effective!", + "hitResultNotVeryEffective": "It's not very effective…", + "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", + "hitResultOneHitKO": "It's a one-hit KO!", + "attackFailed": "But it failed!", + "attackHitsCount": `Hit {{count}} time(s)!`, + "expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!", + "levelUp": "{{pokemonName}} grew to\nLv. {{level}}!", + "learnMove": "{{pokemonName}} learned\n{{moveName}}!", + "learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.", + "learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.", + "learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?", + "learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?", + "learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.", + "learnMoveForgetQuestion": "Which move should be forgotten?", + "learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.", + "levelCapUp": "The level cap\nhas increased to {{levelCap}}!", + "moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.", + "moveDisabled": "{{moveName}} is disabled!", + "noPokeballForce": "An unseen force\nprevents using Poké Balls.", + "noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!", + "noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!", + "noPokeballStrong": "The target Pokémon is too strong to be caught!\nYou need to weaken it first!", + "noEscapeForce": "An unseen force\nprevents escape.", + "noEscapeTrainer": "You can't run\nfrom a trainer battle!", + "noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nprevents {{escapeVerb}}!", + "runAwaySuccess": "You got away safely!", + "runAwayCannotEscape": 'You can\'t escape!', + "escapeVerbSwitch": "switching", + "escapeVerbFlee": "fleeing", + "notDisabled": "{{moveName}} is disabled\nno more!", + "skipItemQuestion": "Are you sure you want to skip taking an item?", + "eggHatching": "Oh?", + "ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?" +} as const; \ No newline at end of file diff --git a/src/locales/en/menu.ts b/src/locales/en/menu.ts index 21620e9b30f..42888b17337 100644 --- a/src/locales/en/menu.ts +++ b/src/locales/en/menu.ts @@ -35,57 +35,9 @@ export const menu: SimpleTranslationEntries = { "boyOrGirl": "Are you a boy or a girl?", "boy": "Boy", "girl": "Girl", - "bossAppeared": "{{bossName}} appeared.", - "trainerAppeared": "{{trainerName}}\nwould like to battle!", - "singleWildAppeared": "A wild {{pokemonName}} appeared!", - "multiWildAppeared": "A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!", - "playerComeBack": "Come back, {{pokemonName}}!", - "trainerComeBack": "{{trainerName}} withdrew {{pokemonName}}!", - "playerGo": "Go! {{pokemonName}}!", - "trainerGo": "{{trainerName}} sent out {{pokemonName}}!", - "switchQuestion": "Will you switch\n{{pokemonName}}?", - "trainerDefeated": `You defeated\n{{trainerName}}!`, - "pokemonCaught": "{{pokemonName}} was caught!", - "pokemon": "Pokémon", - "sendOutPokemon": "Go! {{pokemonName}}!", - "attackFailed": "But it failed!", - "attackHitsCount": `Hit {{count}} time(s)!`, - "expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!", - "levelUp": "{{pokemonName}} grew to\nLv. {{level}}!", - "learnMove": "{{pokemonName}} learned\n{{moveName}}!", - "learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.", - "learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.", - "learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?", - "learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?", - "learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.", - "learnMoveForgetQuestion": "Which move should be forgotten?", - "learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.", - "levelCapUp": "The level cap\nhas increased to {{levelCap}}!", - "moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.", - "moveDisabled": "{{moveName}} is disabled!", - "noPokeballForce": "An unseen force\nprevents using Poké Balls.", - "noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!", - "noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!", - "noPokeballStrong": "The target Pokémon is too strong to be caught!\nYou need to weaken it first!", - "noEscapeForce": "An unseen force\nprevents escape.", - "noEscapeTrainer": "You can't run\nfrom a trainer battle!", - "noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nprevents {{escapeVerb}}!", - "runAwaySuccess": "You got away safely!", - "runAwayCannotEscape": 'You can\'t escape!', - "escapeVerbSwitch": "switching", - "escapeVerbFlee": "fleeing", - "notDisabled": "{{moveName}} is disabled\nno more!", - "skipItemQuestion": "Are you sure you want to skip taking an item?", - "eggHatching": "Oh?", - "ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?", "dailyRankings": "Daily Rankings", "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online", - "hitResultCriticalHit": "A critical hit!", - "hitResultSuperEffective": "It's super effective!", - "hitResultNotVeryEffective": "It's not very effective…", - "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", - "hitResultOneHitKO": "It's a one-hit KO!" + "playersOnline": "Players Online" } as const; \ No newline at end of file diff --git a/src/locales/es/battle.ts b/src/locales/es/battle.ts new file mode 100644 index 00000000000..1d4345a6f5b --- /dev/null +++ b/src/locales/es/battle.ts @@ -0,0 +1,52 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const battle: SimpleTranslationEntries = { + "bossAppeared": "¡{{bossName}} te corta el paso!", + "trainerAppeared": "¡{{trainerName}}\nte desafía!", + "singleWildAppeared": "¡Un {{pokemonName}} salvaje te corta el paso!", + "multiWildAppeared": "¡Un {{pokemonName1}} y un {{pokemonName2}} salvajes\nte cortan el paso!", + "playerComeBack": "¡{{pokemonName}}, ven aquí!", + "trainerComeBack": "¡{{trainerName}} retira a {{pokemonName}} del combate!", + "playerGo": "¡Adelante, {{pokemonName}}!", + "trainerGo": "¡{{trainerName}} saca a {{pokemonName}}!", + "switchQuestion": "¿Quieres cambiar a\n{{pokemonName}}?", + "trainerDefeated": "¡Has derrotado a\n{{trainerName}}!", + "pokemonCaught": "¡{{pokemonName}} atrapado!", + "pokemon": "Pokémon", + "sendOutPokemon": "¡Adelante, {{pokemonName}}!", + "hitResultCriticalHit": "A critical hit!", + "hitResultSuperEffective": "It's super effective!", + "hitResultNotVeryEffective": "It's not very effective…", + "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", + "hitResultOneHitKO": "It's a one-hit KO!", + "attackFailed": "¡Pero ha fallado!", + "attackHitsCount": `N.º de golpes: {{count}}.`, + "expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.", + "levelUp": "¡{{pokemonName}} ha subido al \nNv. {{level}}!", + "learnMove": "¡{{pokemonName}} ha aprendido {{moveName}}!", + "learnMovePrompt": "{{pokemonName}} quiere aprender {{moveName}}.", + "learnMoveLimitReached": "Pero, {{pokemonName}} ya conoce\ncuatro movimientos.", + "learnMoveReplaceQuestion": "¿Quieres sustituir uno de sus movimientos por {{moveName}}?", + "learnMoveStopTeaching": "¿Prefieres que no aprenda\n{{moveName}}?", + "learnMoveNotLearned": "{{pokemonName}} no ha aprendido {{moveName}}.", + "learnMoveForgetQuestion": "¿Qué movimiento quieres que olvide?", + "learnMoveForgetSuccess": "{{pokemonName}} ha olvidado cómo utilizar {{moveName}}.", + "levelCapUp": "¡Se ha incrementado el\nnivel máximo a {{levelCap}}!", + "moveNotImplemented": "{{moveName}} aún no está implementado y no se puede seleccionar.", + "moveDisabled": "!No puede usar {{moveName}} porque ha sido anulado!", + "noPokeballForce": "Una fuerza misteriosa\nte impide usar Poké Balls.", + "noPokeballTrainer": "¡No puedes atrapar a los\nPokémon de los demás!", + "noPokeballMulti": "¡No se pueden lanzar Poké Balls\ncuando hay más de un Pokémon!", + "noPokeballStrong": "¡Este Pokémon es demasiado fuerte para ser capturado!\nNecesitas bajarle los PS primero!", + "noEscapeForce": "Una fuerza misteriosa\nte impide huir.", + "noEscapeTrainer": "¡No puedes huir de los\ncombates contra Entrenadores!", + "noEscapePokemon": "¡El movimiento {{moveName}} de {{pokemonName}} impide la huida!", + "runAwaySuccess": "¡Escapas sin problemas!", + "runAwayCannotEscape": "¡No has podido escapar!", + "escapeVerbSwitch": "cambiar", + "escapeVerbFlee": "huir", + "notDisabled": "¡El movimiento {{moveName}}\nya no está anulado!", + "skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?", + "eggHatching": "¿Y esto?", + "ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?" +} as const; \ No newline at end of file diff --git a/src/locales/es/fight-ui-handler.ts b/src/locales/es/fight-ui-handler.ts new file mode 100644 index 00000000000..1ce9e0317bf --- /dev/null +++ b/src/locales/es/fight-ui-handler.ts @@ -0,0 +1,6 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const fightUiHandler: SimpleTranslationEntries = { + "pp": "PP", + "power": "POWER", +} as const; \ No newline at end of file diff --git a/src/locales/es/menu.ts b/src/locales/es/menu.ts index 0a43f19b768..c67287ae0cc 100644 --- a/src/locales/es/menu.ts +++ b/src/locales/es/menu.ts @@ -19,57 +19,9 @@ export const menu: SimpleTranslationEntries = { "boyOrGirl": "¿Eres un chico o una chica?", "boy": "Chico", "girl": "Chica", - "bossAppeared": "¡{{bossName}} te corta el paso!", - "trainerAppeared": "¡{{trainerName}}\nte desafía!", - "singleWildAppeared": "¡Un {{pokemonName}} salvaje te corta el paso!", - "multiWildAppeared": "¡Un {{pokemonName1}} y un {{pokemonName2}} salvajes\nte cortan el paso!", - "playerComeBack": "¡{{pokemonName}}, ven aquí!", - "trainerComeBack": "¡{{trainerName}} retira a {{pokemonName}} del combate!", - "playerGo": "¡Adelante, {{pokemonName}}!", - "trainerGo": "¡{{trainerName}} saca a {{pokemonName}}!", - "switchQuestion": "¿Quieres cambiar a\n{{pokemonName}}?", - "trainerDefeated": "¡Has derrotado a\n{{trainerName}}!", - "pokemonCaught": "¡{{pokemonName}} atrapado!", - "pokemon": "Pokémon", - "sendOutPokemon": "¡Adelante, {{pokemonName}}!", - "attackFailed": "¡Pero ha fallado!", - "attackHitsCount": `N.º de golpes: {{count}}.`, - "expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.", - "levelUp": "¡{{pokemonName}} ha subido al \nNv. {{level}}!", - "learnMove": "¡{{pokemonName}} ha aprendido {{moveName}}!", - "learnMovePrompt": "{{pokemonName}} quiere aprender {{moveName}}.", - "learnMoveLimitReached": "Pero, {{pokemonName}} ya conoce\ncuatro movimientos.", - "learnMoveReplaceQuestion": "¿Quieres sustituir uno de sus movimientos por {{moveName}}?", - "learnMoveStopTeaching": "¿Prefieres que no aprenda\n{{moveName}}?", - "learnMoveNotLearned": "{{pokemonName}} no ha aprendido {{moveName}}.", - "learnMoveForgetQuestion": "¿Qué movimiento quieres que olvide?", - "learnMoveForgetSuccess": "{{pokemonName}} ha olvidado cómo utilizar {{moveName}}.", - "levelCapUp": "¡Se ha incrementado el\nnivel máximo a {{levelCap}}!", - "moveNotImplemented": "{{moveName}} aún no está implementado y no se puede seleccionar.", - "moveDisabled": "!No puede usar {{moveName}} porque ha sido anulado!", - "noPokeballForce": "Una fuerza misteriosa\nte impide usar Poké Balls.", - "noPokeballTrainer": "¡No puedes atrapar a los\nPokémon de los demás!", - "noPokeballMulti": "¡No se pueden lanzar Poké Balls\ncuando hay más de un Pokémon!", - "noPokeballStrong": "¡Este Pokémon es demasiado fuerte para ser capturado!\nNecesitas bajarle los PS primero!", - "noEscapeForce": "Una fuerza misteriosa\nte impide huir.", - "noEscapeTrainer": "¡No puedes huir de los\ncombates contra Entrenadores!", - "noEscapePokemon": "¡El movimiento {{moveName}} de {{pokemonName}} impide la huida!", - "runAwaySuccess": "¡Escapas sin problemas!", - "runAwayCannotEscape": "¡No has podido escapar!", - "escapeVerbSwitch": "cambiar", - "escapeVerbFlee": "huir", - "notDisabled": "¡El movimiento {{moveName}}\nya no está anulado!", - "skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?", - "eggHatching": "¿Y esto?", - "ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?", "dailyRankings": "Daily Rankings", "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online", - "hitResultCriticalHit": "A critical hit!", - "hitResultSuperEffective": "It's super effective!", - "hitResultNotVeryEffective": "It's not very effective…", - "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", - "hitResultOneHitKO": "It's a one-hit KO!" + "playersOnline": "Players Online" } as const; \ No newline at end of file diff --git a/src/locales/fr/battle.ts b/src/locales/fr/battle.ts new file mode 100644 index 00000000000..8768c30155a --- /dev/null +++ b/src/locales/fr/battle.ts @@ -0,0 +1,52 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const battle: SimpleTranslationEntries = { + "bossAppeared": "Un {{bossName}} apparaît.", + "trainerAppeared": "Un combat est lancé\npar {{trainerName}} !", + "singleWildAppeared": "Un {{pokemonName}} sauvage apparaît !", + "multiWildAppeared": "Un {{pokemonName1}} et un {{pokemonName2}}\nsauvages apparaissent !", + "playerComeBack": "{{pokemonName}}, on change !\nReviens !", + "trainerComeBack": "{{trainerName}} retire {{pokemonName}} !", + "playerGo": "{{pokemonName}} ! Go !", + "trainerGo": "{{pokemonName}} est envoyé par\n{{trainerName}} !", + "switchQuestion": "Voulez-vous changer\n{{pokemonName}} ?", + "trainerDefeated": `Vous avez battu\n{{trainerName}} !`, + "pokemonCaught": "Vous avez attrapé {{pokemonName}} !", + "pokemon": "Pokémon", + "sendOutPokemon": "{{pokemonName}} ! Go !", + "hitResultCriticalHit": "Coup critique!", + "hitResultSuperEffective": "C’est super efficace!", + "hitResultNotVeryEffective": "Ce n’est pas très efficace…", + "hitResultNoEffect": "Ça n’affecte pas {{pokemonName}}…", + "hitResultOneHitKO": "K.O. en un coup!", + "attackFailed": "Mais cela échoue !", + "attackHitsCount": `Touché {{count}} fois !`, + "expGain": "{{pokemonName}} gagne\n{{exp}} Points d’Exp !", + "levelUp": "{{pokemonName}} monte au\nN. {{level}} !", + "learnMove": "{{pokemonName}} apprend \n{{moveName}} !", + "learnMovePrompt": "{{pokemonName}} veut apprendre\n{{moveName}}.", + "learnMoveLimitReached": "Cependant, {{pokemonName}} connait\ndéjà quatre capacités.", + "learnMoveReplaceQuestion": "Voulez-vous oublier une capacité\net la remplacer par {{moveName}} ?", + "learnMoveStopTeaching": "Arrêter d’apprendre\n{{moveName}} ?", + "learnMoveNotLearned": "{{pokemonName}} n’a pas appris\n{{moveName}}.", + "learnMoveForgetQuestion": "Quelle capacité doit être oubliée ?", + "learnMoveForgetSuccess": "{{pokemonName}} oublie comment\nutiliser {{moveName}}.", + "levelCapUp": "La limite de niveau\na été augmentée à {{levelCap}} !", + "moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.", + "moveDisabled": "{{moveName}} est sous entrave !", + "noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.", + "noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !", + "noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon!", + "noPokeballStrong": "Le Pokémon est trop fort pour être capturé !\nVous devez d’abord l’affaiblir !", + "noEscapeForce": "Une force mystérieuse\nempêche la fuite.", + "noEscapeTrainer": "On ne s’enfuit pas d’un\ncombat de Dresseurs !", + "noEscapePokemon": "{{moveName}} de {{pokemonName}}\nempêche {{escapeVerb}} !", + "runAwaySuccess": "Vous prenez la fuite !", + "runAwayCannotEscape": "Fuite impossible !", + "escapeVerbSwitch": "le changement", + "escapeVerbFlee": "la fuite", + "notDisabled": "{{moveName}} n’est plus sous entrave !", + "skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?", + "eggHatching": "Oh ?", + "ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?" +} as const; \ No newline at end of file diff --git a/src/locales/fr/menu.ts b/src/locales/fr/menu.ts index c485412bf1a..1744297089c 100644 --- a/src/locales/fr/menu.ts +++ b/src/locales/fr/menu.ts @@ -30,57 +30,9 @@ export const menu: SimpleTranslationEntries = { "boyOrGirl": "Es-tu un garçon ou une fille ?", "boy": "Garçon", "girl": "Fille", - "bossAppeared": "Un {{bossName}} apparaît.", - "trainerAppeared": "Un combat est lancé\npar {{trainerName}} !", - "singleWildAppeared": "Un {{pokemonName}} sauvage apparaît !", - "multiWildAppeared": "Un {{pokemonName1}} et un {{pokemonName2}}\nsauvages apparaissent !", - "playerComeBack": "{{pokemonName}}, on change !\nReviens !", - "trainerComeBack": "{{trainerName}} retire {{pokemonName}} !", - "playerGo": "{{pokemonName}} ! Go !", - "trainerGo": "{{pokemonName}} est envoyé par\n{{trainerName}} !", - "switchQuestion": "Voulez-vous changer\n{{pokemonName}} ?", - "trainerDefeated": `Vous avez battu\n{{trainerName}} !`, - "pokemonCaught": "Vous avez attrapé {{pokemonName}} !", - "pokemon": "Pokémon", - "sendOutPokemon": "{{pokemonName}} ! Go !", - "attackFailed": "Mais cela échoue !", - "attackHitsCount": `Touché {{count}} fois !`, - "expGain": "{{pokemonName}} gagne\n{{exp}} Points d’Exp !", - "levelUp": "{{pokemonName}} monte au\nN. {{level}} !", - "learnMove": "{{pokemonName}} apprend \n{{moveName}} !", - "learnMovePrompt": "{{pokemonName}} veut apprendre\n{{moveName}}.", - "learnMoveLimitReached": "Cependant, {{pokemonName}} connait\ndéjà quatre capacités.", - "learnMoveReplaceQuestion": "Voulez-vous oublier une capacité\net la remplacer par {{moveName}} ?", - "learnMoveStopTeaching": "Arrêter d’apprendre\n{{moveName}} ?", - "learnMoveNotLearned": "{{pokemonName}} n’a pas appris\n{{moveName}}.", - "learnMoveForgetQuestion": "Quelle capacité doit être oubliée ?", - "learnMoveForgetSuccess": "{{pokemonName}} oublie comment\nutiliser {{moveName}}.", - "levelCapUp": "La limite de niveau\na été augmentée à {{levelCap}} !", - "moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.", - "moveDisabled": "{{moveName}} est sous entrave !", - "noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.", - "noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !", - "noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon!", - "noPokeballStrong": "Le Pokémon est trop fort pour être capturé !\nVous devez d’abord l’affaiblir !", - "noEscapeForce": "Une force mystérieuse\nempêche la fuite.", - "noEscapeTrainer": "On ne s’enfuit pas d’un\ncombat de Dresseurs !", - "noEscapePokemon": "{{moveName}} de {{pokemonName}}\nempêche {{escapeVerb}} !", - "runAwaySuccess": "Vous prenez la fuite !", - "runAwayCannotEscape": "Fuite impossible !", - "escapeVerbSwitch": "le changement", - "escapeVerbFlee": "la fuite", - "notDisabled": "{{moveName}} n’est plus sous entrave !", - "skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?", - "eggHatching": "Oh ?", - "ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?", "dailyRankings": "Classement du Jour", "weeklyRankings": "Classement de la Semaine", "noRankings": "Pas de Classement", "loading": "Chargement…", - "playersOnline": "Joueurs Connectés", - "hitResultCriticalHit": "Coup critique!", - "hitResultSuperEffective": "C'est super efficace!", - "hitResultNotVeryEffective": "Ce n'est pas très efficace…", - "hitResultNoEffect": "Ça n'affecte pas {{pokemonName}}…", - "hitResultOneHitKO": "K.O. en un coup!" + "playersOnline": "Joueurs Connectés" } as const; diff --git a/src/locales/it/battle.ts b/src/locales/it/battle.ts new file mode 100644 index 00000000000..599672a1b19 --- /dev/null +++ b/src/locales/it/battle.ts @@ -0,0 +1,52 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const battle: SimpleTranslationEntries = { + "bossAppeared": "{{bossName}} appeared.", + "trainerAppeared": "{{trainerName}}\nwould like to battle!", + "singleWildAppeared": "A wild {{pokemonName}} appeared!", + "multiWildAppeared": "A wild {{pokemonName1}}\nand {{pokemonName2}} appeared!", + "playerComeBack": "Come back, {{pokemonName}}!", + "trainerComeBack": "{{trainerName}} withdrew {{pokemonName}}!", + "playerGo": "Go! {{pokemonName}}!", + "trainerGo": "{{trainerName}} sent out {{pokemonName}}!", + "switchQuestion": "Will you switch\n{{pokemonName}}?", + "trainerDefeated": `You defeated\n{{trainerName}}!`, + "pokemonCaught": "{{pokemonName}} was caught!", + "pokemon": "Pokémon", + "sendOutPokemon": "Go! {{pokemonName}}!", + "hitResultCriticalHit": "A critical hit!", + "hitResultSuperEffective": "It's super effective!", + "hitResultNotVeryEffective": "It's not very effective…", + "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", + "hitResultOneHitKO": "It's a one-hit KO!", + "attackFailed": "But it failed!", + "attackHitsCount": `Hit {{count}} time(s)!`, + "expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!", + "levelUp": "{{pokemonName}} grew to\nLv. {{level}}!", + "learnMove": "{{pokemonName}} learned\n{{moveName}}!", + "learnMovePrompt": "{{pokemonName}} wants to learn the\nmove {{moveName}}.", + "learnMoveLimitReached": "However, {{pokemonName}} already\nknows four moves.", + "learnMoveReplaceQuestion": "Should a move be forgotten and\nreplaced with {{moveName}}?", + "learnMoveStopTeaching": "Stop trying to teach\n{{moveName}}?", + "learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.", + "learnMoveForgetQuestion": "Which move should be forgotten?", + "learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.", + "levelCapUp": "The level cap\nhas increased to {{levelCap}}!", + "moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.", + "moveDisabled": "{{moveName}} is disabled!", + "noPokeballForce": "An unseen force\nprevents using Poké Balls.", + "noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!", + "noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!", + "noPokeballStrong": "The target Pokémon is too strong to be caught!\nYou need to weaken it first!", + "noEscapeForce": "An unseen force\nprevents escape.", + "noEscapeTrainer": "You can't run\nfrom a trainer battle!", + "noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nprevents {{escapeVerb}}!", + "runAwaySuccess": "You got away safely!", + "runAwayCannotEscape": 'You can\'t escape!', + "escapeVerbSwitch": "switching", + "escapeVerbFlee": "fleeing", + "notDisabled": "{{moveName}} is disabled\nno more!", + "skipItemQuestion": "Are you sure you want to skip taking an item?", + "eggHatching": "Oh?", + "ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?" +} as const; \ No newline at end of file diff --git a/src/locales/it/fight-ui-handler.ts b/src/locales/it/fight-ui-handler.ts new file mode 100644 index 00000000000..1ce9e0317bf --- /dev/null +++ b/src/locales/it/fight-ui-handler.ts @@ -0,0 +1,6 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const fightUiHandler: SimpleTranslationEntries = { + "pp": "PP", + "power": "POWER", +} as const; \ No newline at end of file diff --git a/src/locales/it/menu.ts b/src/locales/it/menu.ts index 118c1dccb5f..9812236b7f0 100644 --- a/src/locales/it/menu.ts +++ b/src/locales/it/menu.ts @@ -1,5 +1,10 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; +/** + * The menu namespace holds most miscellaneous text that isn't directly part of the game's + * contents or directly related to Pokemon data. This includes menu navigation, settings, + * account interactions, descriptive text, etc. + */ export const menu: SimpleTranslationEntries = { "cancel": "Annulla", "continue": "Continua", @@ -7,14 +12,32 @@ export const menu: SimpleTranslationEntries = { "loadGame": "Carica Partita", "dailyRun": "Corsa Giornaliera (Beta)", "selectGameMode": "Seleziona una modalità di gioco.", + "logInOrCreateAccount": "Log in or create an account to start. No email required!", + "username": "Username", + "password": "Password", + "login": "Login", + "register": "Register", + "emptyUsername": "Username must not be empty", + "invalidLoginUsername": "The provided username is invalid", + "invalidRegisterUsername": "Username must only contain letters, numbers, or underscores", + "invalidLoginPassword": "The provided password is invalid", + "invalidRegisterPassword": "Password must be 6 characters or longer", + "usernameAlreadyUsed": "The provided username is already in use", + "accountNonExistent": "The provided user does not exist", + "unmatchingPassword": "The provided password does not match", + "passwordNotMatchingConfirmPassword": "Password must match confirm password", + "confirmPassword": "Confirm Password", + "registrationAgeWarning": "By registering, you confirm you are of 13 years of age or older.", + "backToLogin": "Back to Login", + "failedToLoadSaveData": "Failed to load save data. Please reload the page.\nIf this continues, please contact the administrator.", + "sessionSuccess": "Session loaded successfully.", + "failedToLoadSession": "Your session data could not be loaded.\nIt may be corrupted.", + "boyOrGirl": "Are you a boy or a girl?", + "boy": "Boy", + "girl": "Girl", "dailyRankings": "Daily Rankings", "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online", - "hitResultCriticalHit": "A critical hit!", - "hitResultSuperEffective": "It's super effective!", - "hitResultNotVeryEffective": "It's not very effective…", - "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", - "hitResultOneHitKO": "It's a one-hit KO!" + "playersOnline": "Players Online" } as const; \ No newline at end of file diff --git a/src/phases.ts b/src/phases.ts index 2e0b8425567..72f0e10cc3e 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -815,14 +815,14 @@ export class EncounterPhase extends BattlePhase { const enemyField = this.scene.getEnemyField(); if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) - return i18next.t('menu:bossAppeared', {bossName: enemyField[0].name}); + return i18next.t('battle:bossAppeared', {bossName: enemyField[0].name}); if (this.scene.currentBattle.battleType === BattleType.TRAINER) - return i18next.t('menu:trainerAppeared', {trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true)}); + return i18next.t('battle:trainerAppeared', {trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true)}); return enemyField.length === 1 - ? i18next.t('menu:singleWildAppeared', {pokemonName: enemyField[0].name}) - : i18next.t('menu:multiWildAppeared', {pokemonName1: enemyField[0].name, pokemonName2: enemyField[1].name}) + ? i18next.t('battle:singleWildAppeared', {pokemonName: enemyField[0].name}) + : i18next.t('battle:multiWildAppeared', {pokemonName1: enemyField[0].name, pokemonName2: enemyField[1].name}) } doEncounterCommon(showEncounterMessage: boolean = true) { @@ -1187,7 +1187,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { } if (this.player) { - this.scene.ui.showText(i18next.t('menu:playerGo', { pokemonName: this.getPokemon().name })); + this.scene.ui.showText(i18next.t('battle:playerGo', { pokemonName: this.getPokemon().name })); if (this.player) this.scene.pbTray.hide(); this.scene.trainer.setTexture(`trainer_${this.scene.gameData.gender === PlayerGender.FEMALE ? 'f' : 'm'}_back_pb`); @@ -1355,8 +1355,8 @@ export class SwitchSummonPhase extends SummonPhase { applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, pokemon); this.scene.ui.showText(this.player ? - i18next.t('menu:playerComeBack', { pokemonName: pokemon.name }) : - i18next.t('menu:trainerComeBack', { + i18next.t('battle:playerComeBack', { pokemonName: pokemon.name }) : + i18next.t('battle:trainerComeBack', { trainerName: this.scene.currentBattle.trainer.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER), pokemonName: pokemon.name }) @@ -1396,8 +1396,8 @@ export class SwitchSummonPhase extends SummonPhase { party[this.fieldIndex] = switchedPokemon; const showTextAndSummon = () => { this.scene.ui.showText(this.player ? - i18next.t('menu:playerGo', { pokemonName: switchedPokemon.name }) : - i18next.t('menu:trainerGo', { + i18next.t('battle:playerGo', { pokemonName: switchedPokemon.name }) : + i18next.t('battle:trainerGo', { trainerName: this.scene.currentBattle.trainer.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER), pokemonName: this.getPokemon().name }) @@ -1544,7 +1544,7 @@ export class CheckSwitchPhase extends BattlePhase { return; } - this.scene.ui.showText(i18next.t('menu:switchQuestion', { pokemonName: this.useName ? pokemon.name : i18next.t('menu:pokemon') }), null, () => { + this.scene.ui.showText(i18next.t('battle:switchQuestion', { pokemonName: this.useName ? pokemon.name : i18next.t('battle:pokemon') }), null, () => { this.scene.ui.setMode(Mode.CONFIRM, () => { this.scene.ui.setMode(Mode.MESSAGE); this.scene.tryRemovePhase(p => p instanceof PostSummonPhase && p.player && p.fieldIndex === this.fieldIndex); @@ -1564,7 +1564,7 @@ export class SummonMissingPhase extends SummonPhase { } preSummon(): void { - this.scene.ui.showText(i18next.t('menu:sendOutPokemon', { pokemonName: this.getPokemon().name})); + this.scene.ui.showText(i18next.t('battle:sendOutPokemon', { pokemonName: this.getPokemon().name})); this.scene.time.delayedCall(250, () => this.summon()); } } @@ -1579,7 +1579,7 @@ export class LevelCapPhase extends FieldPhase { this.scene.ui.setMode(Mode.MESSAGE).then(() => { this.scene.playSound('level_up_fanfare'); - this.scene.ui.showText(i18next.t('menu:levelCapUp', { levelCap: this.scene.getMaxExpLevel() }), null, () => this.end(), null, true); + this.scene.ui.showText(i18next.t('battle:levelCapUp', { levelCap: this.scene.getMaxExpLevel() }), null, () => this.end(), null, true); this.executeForAll(pokemon => pokemon.updateInfo(true)); }); } @@ -1673,7 +1673,7 @@ export class CommandPhase extends FieldPhase { const move = playerPokemon.getMoveset()[cursor]; if (move.getName().endsWith(' (N)')) { this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:moveNotImplemented', { moveName: move.getName().slice(0, -4) }), null, () => { + this.scene.ui.showText(i18next.t('battle:moveNotImplemented', { moveName: move.getName().slice(0, -4) }), null, () => { this.scene.ui.clearText(); this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex); }, null, true); @@ -1692,7 +1692,7 @@ export class CommandPhase extends FieldPhase { const move = playerPokemon.getMoveset()[cursor]; if (playerPokemon.summonData.disabledMove === move.moveId) { this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:moveDisabled', { moveName: move.getName() }), null, () => { + this.scene.ui.showText(i18next.t('battle:moveDisabled', { moveName: move.getName() }), null, () => { this.scene.ui.clearText(); this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex); }, null, true); @@ -1703,14 +1703,14 @@ export class CommandPhase extends FieldPhase { if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarters).length - 1))) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:noPokeballForce'), null, () => { + this.scene.ui.showText(i18next.t('battle:noPokeballForce'), null, () => { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); } else if (this.scene.currentBattle.battleType === BattleType.TRAINER) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:noPokeballTrainer'), null, () => { + this.scene.ui.showText(i18next.t('battle:noPokeballTrainer'), null, () => { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); @@ -1719,7 +1719,7 @@ export class CommandPhase extends FieldPhase { if (targets.length > 1) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:noPokeballMulti'), null, () => { + this.scene.ui.showText(i18next.t('battle:noPokeballMulti'), null, () => { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); @@ -1728,7 +1728,7 @@ export class CommandPhase extends FieldPhase { if (targetPokemon.isBoss() && targetPokemon.bossSegmentIndex >= 1 && cursor < PokeballType.MASTER_BALL) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:noPokeballStrong'), null, () => { + this.scene.ui.showText(i18next.t('battle:noPokeballStrong'), null, () => { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); @@ -1748,14 +1748,14 @@ export class CommandPhase extends FieldPhase { if (!isSwitch && this.scene.arena.biomeType === Biome.END) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:noEscapeForce'), null, () => { + this.scene.ui.showText(i18next.t('battle:noEscapeForce'), null, () => { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); } else if (!isSwitch && this.scene.currentBattle.battleType === BattleType.TRAINER) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t('menu:noEscapeTrainer'), null, () => { + this.scene.ui.showText(i18next.t('battle:noEscapeTrainer'), null, () => { this.scene.ui.showText(null, 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); @@ -1778,10 +1778,10 @@ export class CommandPhase extends FieldPhase { this.scene.ui.setMode(Mode.MESSAGE); } this.scene.ui.showText( - i18next.t('menu:noEscapePokemon', { + i18next.t('battle:noEscapePokemon', { pokemonName: this.scene.getPokemonById(trapTag.sourceId).name, moveName: trapTag.getMoveName(), - escapeVerb: isSwitch ? i18next.t('menu:escapeVerbSwitch') : i18next.t('menu:escapeVerbFlee') + escapeVerb: isSwitch ? i18next.t('battle:escapeVerbSwitch') : i18next.t('battle:escapeVerbFlee') }), null, () => { @@ -2031,7 +2031,7 @@ export class TurnEndPhase extends FieldPhase { pokemon.lapseTags(BattlerTagLapseType.TURN_END); if (pokemon.summonData.disabledMove && !--pokemon.summonData.disabledTurns) { - this.scene.pushPhase(new MessagePhase(this.scene, i18next.t('menu:notDisabled', { moveName: allMoves[pokemon.summonData.disabledMove].name }))); + this.scene.pushPhase(new MessagePhase(this.scene, i18next.t('battle:notDisabled', { moveName: allMoves[pokemon.summonData.disabledMove].name }))); pokemon.summonData.disabledMove = Moves.NONE; } @@ -2339,7 +2339,7 @@ export class MovePhase extends BattlePhase { } showFailedText(failedText: string = null): void { - this.scene.queueMessage(failedText || i18next.t('menu:attackFailed')); + this.scene.queueMessage(failedText || i18next.t('battle:attackFailed')); } end() { @@ -2402,7 +2402,7 @@ export class MoveEffectPhase extends PokemonPhase { moveHistoryEntry.result = MoveResult.MISS; applyMoveAttrs(MissEffectAttr, user, null, this.move.getMove()); } else { - this.scene.queueMessage(i18next.t('menu:attackFailed')); + this.scene.queueMessage(i18next.t('battle:attackFailed')); moveHistoryEntry.result = MoveResult.FAIL; } return this.end(); @@ -2486,7 +2486,7 @@ export class MoveEffectPhase extends PokemonPhase { else { const hitsTotal = user.turnData.hitCount - Math.max(user.turnData.hitsLeft, 0); if (hitsTotal > 1) - this.scene.queueMessage(i18next.t('menu:attackHitsCount', { count: hitsTotal })); + this.scene.queueMessage(i18next.t('battle:attackHitsCount', { count: hitsTotal })); this.scene.applyModifiers(HitHealModifier, this.player, user); } } @@ -3342,7 +3342,7 @@ export class TrainerVictoryPhase extends BattlePhase { this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [ modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType])); } - this.scene.ui.showText(i18next.t('menu:trainerDefeated', { trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true) }), null, () => { + this.scene.ui.showText(i18next.t('battle:trainerDefeated', { trainerName: this.scene.currentBattle.trainer.getName(TrainerSlot.NONE, true) }), null, () => { const victoryMessages = this.scene.currentBattle.trainer.getVictoryMessages(); const showMessage = () => { let message: string; @@ -3609,7 +3609,7 @@ export class ExpPhase extends PlayerPartyMemberPokemonPhase { let exp = new Utils.NumberHolder(this.expValue); this.scene.applyModifiers(ExpBoosterModifier, true, exp); exp.value = Math.floor(exp.value); - this.scene.ui.showText(i18next.t('menu:expGain', { pokemonName: pokemon.name, exp: exp.value }), null, () => { + this.scene.ui.showText(i18next.t('battle:expGain', { pokemonName: pokemon.name, exp: exp.value }), null, () => { const lastLevel = pokemon.level; let newLevel: integer; pokemon.addExp(exp.value); @@ -3697,7 +3697,7 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { pokemon.calculateStats(); pokemon.updateInfo(); this.scene.playSound('level_up_fanfare'); - this.scene.ui.showText(i18next.t('menu:levelUp', { pokemonName: this.getPokemon().name, level: this.level }), null, () => this.scene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false).then(() => this.end()), null, true); + this.scene.ui.showText(i18next.t('battle:levelUp', { pokemonName: this.getPokemon().name, level: this.level }), null, () => this.scene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false).then(() => this.end()), null, true); if (this.level <= 100) { const levelMoves = this.getPokemon().getLevelMoves(this.lastLevel + 1); for (let lm of levelMoves) @@ -3746,7 +3746,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { .then(() => { this.scene.ui.setMode(messageMode).then(() => { this.scene.playSound('level_up_fanfare'); - this.scene.ui.showText(i18next.t('menu:learnMove', { pokemonName: pokemon.name, moveName: move.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMove', { pokemonName: pokemon.name, moveName: move.name }), null, () => { this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true); this.end(); }, messageMode === Mode.EVOLUTION_SCENE ? 1000 : null, true); @@ -3755,15 +3755,15 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { }); } else { this.scene.ui.setMode(messageMode).then(() => { - this.scene.ui.showText(i18next.t('menu:learnMovePrompt', { pokemonName: pokemon.name, moveName: move.name }), null, () => { - this.scene.ui.showText(i18next.t('menu:learnMoveLimitReached', { pokemonName: pokemon.name }), null, () => { - this.scene.ui.showText(i18next.t('menu:learnMoveReplaceQuestion', { moveName: move.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMovePrompt', { pokemonName: pokemon.name, moveName: move.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMoveLimitReached', { pokemonName: pokemon.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMoveReplaceQuestion', { moveName: move.name }), null, () => { const noHandler = () => { this.scene.ui.setMode(messageMode).then(() => { - this.scene.ui.showText(i18next.t('menu:learnMoveStopTeaching', { moveName: move.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMoveStopTeaching', { moveName: move.name }), null, () => { this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => { this.scene.ui.setMode(messageMode); - this.scene.ui.showText(i18next.t('menu:learnMoveNotLearned', { pokemonName: pokemon.name, moveName: move.name }), null, () => this.end(), null, true); + this.scene.ui.showText(i18next.t('battle:learnMoveNotLearned', { pokemonName: pokemon.name, moveName: move.name }), null, () => this.end(), null, true); }, () => { this.scene.ui.setMode(messageMode); this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId)); @@ -3774,7 +3774,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { }; this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => { this.scene.ui.setMode(messageMode); - this.scene.ui.showText(i18next.t('menu:learnMoveForgetQuestion'), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMoveForgetQuestion'), null, () => { this.scene.ui.setModeWithoutClear(Mode.SUMMARY, this.getPokemon(), SummaryUiMode.LEARN_MOVE, move, (moveIndex: integer) => { if (moveIndex === 4) { noHandler(); @@ -3782,7 +3782,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { } this.scene.ui.setMode(messageMode).then(() => { this.scene.ui.showText('@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Poof!', null, () => { - this.scene.ui.showText(i18next.t('menu:learnMoveForgetSuccess', { pokemonName: pokemon.name, moveName: pokemon.moveset[moveIndex].getName() }), null, () => { + this.scene.ui.showText(i18next.t('battle:learnMoveForgetSuccess', { pokemonName: pokemon.name, moveName: pokemon.moveset[moveIndex].getName() }), null, () => { this.scene.ui.showText('And…', null, () => { pokemon.setMove(moveIndex, Moves.NONE); this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId)); @@ -4097,7 +4097,7 @@ export class AttemptCapturePhase extends PokemonPhase { this.scene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs); - this.scene.ui.showText(i18next.t('menu:pokemonCaught', { pokemonName: pokemon.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:pokemonCaught', { pokemonName: pokemon.name }), null, () => { const end = () => { this.scene.pokemonInfoContainer.hide(); this.removePb(); @@ -4183,7 +4183,7 @@ export class AttemptRunPhase extends PokemonPhase { if (playerPokemon.randSeedInt(256) < escapeChance.value) { this.scene.playSound('flee'); - this.scene.queueMessage(i18next.t('menu:runAwaySuccess'), null, true, 500); + this.scene.queueMessage(i18next.t('battle:runAwaySuccess'), null, true, 500); this.scene.tweens.add({ targets: [ this.scene.arenaEnemy, enemyField ].flat(), @@ -4204,7 +4204,7 @@ export class AttemptRunPhase extends PokemonPhase { this.scene.pushPhase(new BattleEndPhase(this.scene)); this.scene.pushPhase(new NewBattlePhase(this.scene)); } else - this.scene.queueMessage(i18next.t('menu:runAwayCannotEscape'), null, true, 500); + this.scene.queueMessage(i18next.t('battle:runAwayCannotEscape'), null, true, 500); this.end(); } @@ -4236,7 +4236,7 @@ export class SelectModifierPhase extends BattlePhase { const modifierSelectCallback = (rowCursor: integer, cursor: integer) => { if (rowCursor < 0 || cursor < 0) { - this.scene.ui.showText(i18next.t('menu:skipItemQuestion'), null, () => { + this.scene.ui.showText(i18next.t('battle:skipItemQuestion'), null, () => { this.scene.ui.setOverlayMode(Mode.CONFIRM, () => { this.scene.ui.revertMode(); this.scene.ui.setMode(Mode.MESSAGE); @@ -4415,7 +4415,7 @@ export class EggLapsePhase extends Phase { }); if (eggsToHatch.length) { - this.scene.queueMessage(i18next.t('menu:eggHatching')); + this.scene.queueMessage(i18next.t('battle:eggHatching')); for (let egg of eggsToHatch) this.scene.unshiftPhase(new EggHatchPhase(this.scene, egg)); @@ -4509,7 +4509,7 @@ export class ScanIvsPhase extends PokemonPhase { const pokemon = this.getPokemon(); - this.scene.ui.showText(i18next.t('menu:ivScannerUseQuestion', { pokemonName: pokemon.name }), null, () => { + this.scene.ui.showText(i18next.t('battle:ivScannerUseQuestion', { pokemonName: pokemon.name }), null, () => { this.scene.ui.setMode(Mode.CONFIRM, () => { this.scene.ui.setMode(Mode.MESSAGE); this.scene.ui.clearText(); diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 22a407c3b42..4d770ae0a12 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -13,6 +13,12 @@ import { menuUiHandler as frMenuUiHandler } from '../locales/fr/menu-ui-handler. import { menuUiHandler as itMenuUiHandler } from '../locales/it/menu-ui-handler.js'; import { menuUiHandler as deMenuUiHandler } from '../locales/de/menu-ui-handler.js'; +import { battle as enBattle } from '../locales/en/battle'; +import { battle as esBattle } from '../locales/es/battle'; +import { battle as itBattle } from '../locales/it/battle'; +import { battle as frBattle } from '../locales/fr/battle'; +import { battle as deBattle } from '../locales/de/battle'; + import { move as enMove } from '../locales/en/move'; import { move as esMove } from '../locales/es/move'; import { move as frMove } from '../locales/fr/move'; @@ -45,7 +51,10 @@ import { commandUiHandler as frCommandUiHandler } from '../locales/fr/command-ui import { commandUiHandler as deCommandUiHandler } from '../locales/de/command-ui-handler'; import { fightUiHandler as enFightUiHandler } from '../locales/en/fight-ui-handler'; +import { fightUiHandler as esFightUiHandler } from '../locales/es/fight-ui-handler'; import { fightUiHandler as frFightUiHandler } from '../locales/fr/fight-ui-handler'; +import { fightUiHandler as itFightUiHandler } from '../locales/it/fight-ui-handler'; +import { fightUiHandler as deFightUiHandler } from '../locales/de/fight-ui-handler'; import { tutorial as enTutorial } from '../locales/en/tutorial'; import { tutorial as esTutorial } from '../locales/es/tutorial'; @@ -113,6 +122,7 @@ export function initI18n(): void { en: { menu: enMenu, menuUiHandler: enMenuUiHandler, + battle: enBattle, move: enMove, ability: enAbility, pokeball: enPokeball, @@ -125,17 +135,20 @@ export function initI18n(): void { es: { menu: esMenu, menuUiHandler: esMenuUiHandler, + battle: esBattle, move: esMove, ability: esAbility, pokeball: esPokeball, pokemon: esPokemon, pokemonStat: esPokemonStat, commandUiHandler: esCommandUiHandler, + fightUiHandler: esFightUiHandler, tutorial: esTutorial, }, fr: { menu: frMenu, menuUiHandler: frMenuUiHandler, + battle: frBattle, move: frMove, ability: frAbility, pokeball: frPokeball, @@ -148,18 +161,22 @@ export function initI18n(): void { it: { menu: itMenu, menuUiHandler: itMenuUiHandler, + battle: itBattle, pokemonStat: itPokemonStat, + fightUiHandler: itFightUiHandler, tutorial: itTutorial, }, de: { menu: deMenu, menuUiHandler: deMenuUiHandler, + battle: deBattle, move: deMove, ability: deAbility, pokeball: dePokeball, pokemon: dePokemon, pokemonStat: dePokemonStat, commandUiHandler: deCommandUiHandler, + fightUiHandler: deFightUiHandler, tutorial: deTutorial, } }, @@ -173,6 +190,7 @@ declare module 'i18next' { menu: typeof enMenu; menuUiHandler: typeof enMenuUiHandler; move: typeof enMove; + battle: typeof enBattle, ability: typeof enAbility; pokeball: typeof enPokeball; pokemon: typeof enPokemon; From ad59c0a7c4ae8543aba02e9ed39052545207ceac Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Wed, 1 May 2024 18:05:34 -0500 Subject: [PATCH 062/110] Fixed Rounding Error For TargetHalfHpDamageAttr Moves that deal half of a target's HP were not able to deal damage if the target had 1 HP. Used Math.max to ensure 1 is the lowest this value ever evaluates to. --- src/data/move.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/move.ts b/src/data/move.ts index d6367794a35..ad1ae31c06f 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -557,7 +557,7 @@ export class TargetHalfHpDamageAttr extends FixedDamageAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value = Math.floor(target.hp / 2); + (args[0] as Utils.IntegerHolder).value = Math.max(Math.floor(target.hp / 2), 1); return true; } From 86b0596a60d831eadc78de3ae57b202ab780d14c Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Wed, 1 May 2024 19:28:07 -0400 Subject: [PATCH 063/110] Add rogue achievement and voucher tier --- public/images/ui/achv_bar_4.png | Bin 458 -> 418 bytes public/images/ui/achv_bar_5.png | Bin 0 -> 458 bytes public/images/ui/legacy/achv_bar_4.png | Bin 433 -> 344 bytes public/images/ui/legacy/achv_bar_5.png | Bin 0 -> 433 bytes src/system/achv.ts | 5 ++++- src/system/voucher.ts | 2 +- 6 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 public/images/ui/achv_bar_5.png create mode 100644 public/images/ui/legacy/achv_bar_5.png diff --git a/public/images/ui/achv_bar_4.png b/public/images/ui/achv_bar_4.png index cc06af91620256e98ab26c762a49fe432cf584ce..debf8bfe2114a634e6f39e696088cca466d3a8d6 100644 GIT binary patch delta 394 zcmV;50d@Y$1EK?v7k?%Q0ssI2#x!fF00001b5ch_0Itp)=>Px$LPe5nZXH! zFc3wpBK4#ItH>!mqy-DuyQkdKgXJs;o?T>M+#TW)c4Hjj!yw5ej4ywZ@7OtG5Q0D_ z=9oHT03}l>fKmn}d0##5Rh3dHjAMy$o##JeiIEq)5tlraDt|->D02anU1ET;v*5Y| z6hJ9EhM^QFK*77B-cF_7tPTmjJD!-mLD1)_}DDB>PJ|%hYjCu6^6oT5=pb!Y! zy*5zP;-JJXgYq0l_A=TA*Fe!sWS!@0plFkZ$Olj|-U?6vrOa?bDF;evZ{Ebgrfs?@ z+(6HB&)Ca o0#&KYjDGtnRR9104rN$LW=%~1DgXcg2mk;800000(v!Ra4yk6PRR910 delta 411 zcmV;M0c8H71Ih!C7k?-S1^@s6b6lN|00001b5ch_0Itp)=>Px$YDq*vRA_DP__;of?62bTd;NQQCQhHNFtOB4BZe*7Di40I}8YfDoB_3*|Oia zMUmn^pOP0RegQ?4r?39U(RGNJ=(r9L8!B8F6)uc;y_*&*X^7a3YUo7pI@nQ#`fV5VOgs5Im<(9|lzo(r!xMo&& z-}A2B{AZ(YPQEzf@0RS;5BDB9#ED&hE3w3Un#k-;jNdNnO}=>J*2h|x>>UOW&0OMc zt=yjrT8X)$q#B=8ROsDu0jaQ>BteDVa??MX7Vv(E4&|GC<6uLL{*U??yJc5Pd0V!AT5KPxnOMwJ q?cnataG_EN7zKQ(5uRzjz6@GGHU|)cz@^~HAj;F#&t;ucLK6T2Ilt8a literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/achv_bar_4.png b/public/images/ui/legacy/achv_bar_4.png index dae7a30dec065d67334e6c7cbac6c05716d38fef..d52fbfd055e8a4839ab16a495f9dcccbcbdd71a5 100644 GIT binary patch delta 329 zcmdnUe1mC%L_G^L0|P^2QNtb}#aJBV?!<0h-v4*igLY0h6zQhc&hD}*Eg|98VGW)C zo{X+< zFWp}Gqp9Qyz2uY-l{Gwk_ZS)E-p|raFcyCUbTnUTglC$sFM}44%>l$9a4C2)i1Kvx Kb6Mw<&;$VCBZQ*> delta 419 zcmV;U0bKsr0n6zU{cp-{T%Si1Th`~q2ngF_cV1fg~gbjao)E?p$akUdLgUA%IME?RSG;`1Nd zlw5y3(n9lUD0P2!^ZxSo3buWR`v;gTr<(kjR)&tU1aY2H>wgb&3=6Jl7vMF4{rLQZ zI8O@)vEL_eUdOO7>J2ejPBmRT8RsbmR=@B9wq34i!!>OLX}Iy!#O@Xc06>t2wJcEn zz}r-mB>;d?ZwS4-yMr{u)$t7H50^?8wHVLgt^8J^%e%ZIf1`?2W7l;~mA_U*9bReG zMsR`?oDrPhjDO&}nclSDu>`NUi@TF{NFOx-Tbo@x`5Y#$z$gH&I9Hu3-f N002ovPDHLkV1jh6!Y}{; diff --git a/public/images/ui/legacy/achv_bar_5.png b/public/images/ui/legacy/achv_bar_5.png new file mode 100644 index 0000000000000000000000000000000000000000..dae7a30dec065d67334e6c7cbac6c05716d38fef GIT binary patch literal 433 zcmV;i0Z#sjP)7@C0mv(P8pKm(nTD)6%^_uSfNn5=~%k@9sB}WgM&jCK?I?84s^)oATC`b z$&fuuW?j5;i7r}mY2x!A+mu{?J<>w+YAAJocJu!7_6oLrhx-SZET@|Mm{x|4vIKFS zQtJJ2ejPBmRT8RsbmR=@B9wq34i!!>OL zX}Iy!#O@Xc06>t2wJcEnz}r-mB>;d?ZwS4-yMr{u)$t7H50^?8wHVLgt^8J^%e%ZI zf1`?2W7l;~mA_U*9bReGMsR`?oDrPhjNrSO-n8Gb1h2S@yOVZEA2k46>};po}6Pyv8;Os}>i}76fLh3kY9ew$WZD94`t$cWUzVgMi z^>*cN!Q~t9|HB(sS-f5s!5zawlqEYmY9cSViCv%G!Z9oWpA!%qrm8l1ZfY}B#hIRJ b6O(Ko9+rbtUwk(500000NkvXXu0mjfWv;=( literal 0 HcmV?d00001 diff --git a/src/system/achv.ts b/src/system/achv.ts index 2307347db3a..f63dd5b2810 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -7,6 +7,7 @@ export enum AchvTier { COMMON, GREAT, ULTRA, + ROGUE, MASTER } @@ -50,8 +51,10 @@ export class Achv { } getTier(): AchvTier { - if (this.score >= 100) + if (this.score >= 150) return AchvTier.MASTER; + if (this.score >= 100) + return AchvTier.ROGUE; if (this.score >= 50) return AchvTier.ULTRA; if (this.score >= 25) diff --git a/src/system/voucher.ts b/src/system/voucher.ts index c3bae6f0878..276e74eeb0d 100644 --- a/src/system/voucher.ts +++ b/src/system/voucher.ts @@ -44,7 +44,7 @@ export class Voucher { case VoucherType.PREMIUM: return AchvTier.ULTRA; case VoucherType.GOLDEN: - return AchvTier.MASTER; + return AchvTier.ROGUE; } } } From 2f8000885e2db76b607fdff06c26b7696284d491 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Wed, 1 May 2024 19:29:04 -0400 Subject: [PATCH 064/110] Fix coloring error in rogue achievement bar --- public/images/ui/achv_bar_4.png | Bin 418 -> 318 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/ui/achv_bar_4.png b/public/images/ui/achv_bar_4.png index debf8bfe2114a634e6f39e696088cca466d3a8d6..f14026c7a34c13829053ffaa2291bda986ab9a3c 100644 GIT binary patch delta 270 zcmZ3)ypL&uc)bP-GXn!dV^PB%AjMc5hfTEf3IKb_|iYz z`ktrkcX2!j)5|Irh^<_ql=sx>kNm}{?V1yo#iTQ9o;sXAImK%7!4DyQs>T&o#ClL1!5l5_R&8W;0LU KRzA6gQ4IjBLuz*b delta 394 zcmV;50d@Yq0-^(u7k?%Q0ssI2#x!fF00001b5ch_0Itp)=>Px$LPe5nZXH! zFc3wpBK4#ItH>!mqy-DuyQkdKgXJs;o?T>M+#TW)c4Hjj!yw5ej4ywZ@7OtG5Q0D_ z=9oHT03}l>fKmn}d0##5Rh3dHjAMy$o##JeiIEq)5tlraDt|->D02anU1ET;v*5Y| z6hJ9EhM^QFK*77B-cF_7tPTmjJD!-mLD1)_}DDB>PJ|%hYjCu6^6oT5=pb!Y! zy*5zP;-JJXgYq0l_A=TA*Fe!sWS!@0plFkZ$Olj|-U?6vrOa?bDF;evZ{Ebgrfs?@ z+(6HB&)Ca o0#&KYjDGtnRR9104rN$LW=%~1DgXcg2mk;800000(vvU&4wJ#8yZ`_I From ba5bef123cffbadffd120f90960f94ea99f6efea Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Wed, 1 May 2024 19:42:06 -0400 Subject: [PATCH 065/110] Load missed master achievement bar --- src/loading-scene.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 875d618ec0f..d0751e9a2da 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -67,6 +67,7 @@ export class LoadingScene extends SceneBase { this.loadImage('achv_bar_2', 'ui'); this.loadImage('achv_bar_3', 'ui'); this.loadImage('achv_bar_4', 'ui'); + this.loadImage('achv_bar_5', 'ui'); this.loadImage('shiny_star', 'ui', 'shiny.png'); this.loadImage('shiny_star_1', 'ui', 'shiny_1.png'); this.loadImage('shiny_star_2', 'ui', 'shiny_2.png'); From 6d9424e43158123f9bceff53f5499f53f59ea694 Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Thu, 2 May 2024 14:22:30 +1000 Subject: [PATCH 066/110] Implement Gastro Acid (#393) --- src/data/move.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/data/move.ts b/src/data/move.ts index ad1ae31c06f..e1694ede8a3 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -3594,6 +3594,25 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr { } } +export class SuppressAbilitiesAttr extends MoveEffectAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if (!super.apply(user, target, move, args)) + return false; + + target.summonData.abilitySuppressed = true; + + target.scene.queueMessage(getPokemonMessage(target, ` ability\nwas suppressed!`)); + + return true; + } + + getCondition(): MoveConditionFunc { + return (user, target, move) => !target.getAbility().hasAttr(UnsuppressableAbilityAbAttr); + } +} + + + export class TransformAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { return new Promise(resolve => { @@ -4831,7 +4850,7 @@ export function initMoves() { new SelfStatusMove(Moves.POWER_TRICK, Type.PSYCHIC, -1, 10, -1, 0, 4) .unimplemented(), new StatusMove(Moves.GASTRO_ACID, Type.POISON, 100, 10, -1, 0, 4) - .unimplemented(), + .attr(SuppressAbilitiesAttr), new StatusMove(Moves.LUCKY_CHANT, Type.NORMAL, -1, 30, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.NO_CRIT, false, false, 5) .target(MoveTarget.USER_SIDE) From a1bb0e7baf00d4f11929e360652537a2dc7dfc8a Mon Sep 17 00:00:00 2001 From: Lugiad Date: Thu, 2 May 2024 06:26:24 +0200 Subject: [PATCH 067/110] Updated French transaltion for tutorial.ts (#375) Translation of "statChange" + some remaning typos --- src/locales/fr/tutorial.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/locales/fr/tutorial.ts b/src/locales/fr/tutorial.ts index b60ccc03b5d..1502b285356 100644 --- a/src/locales/fr/tutorial.ts +++ b/src/locales/fr/tutorial.ts @@ -8,7 +8,7 @@ export const tutorial: SimpleTranslationEntries = { $Tout signalement de bugs passe par le serveur Discord. $Si le jeu est lent, vérifiez que l’Accélération Matérielle est activée dans les paramètres du navigateur.`, - "accessMenu": `Accédez au menu avec M ou Échap lors de l'attente d’une\naction. + "accessMenu": `Accédez au menu avec M ou Échap lors de l’attente d’une\naction. $Il contient les paramètres et diverses fonctionnalités`, "menu": `Vous pouvez accéder aux paramètres depuis ce menu. @@ -17,17 +17,20 @@ export const tutorial: SimpleTranslationEntries = { $jetez-y un œil !`, "starterSelect": `Choisissez vos starters depuis cet écran.\nIls formeront votre équipe de départ. - $Chacun possède une valeur. Votre équipe peut avoir jusqu’à\n6 membres, tant que vous ne dépassez pas un coût de 10. + $Chacun possède une valeur. Votre équipe peut avoir jusqu’à\n6 membres, tant que vous ne dépassez pas un cout de 10. $Vous pouvez aussi choisir le sexe, le talent et la forme en\nfonction des variants déjà capturés ou éclos. $Les IVs d’un starter sont les meilleurs de tous ceux de son\nespèce déjà obtenus. Essayez donc d’en obtenir plusieurs !`, "pokerus": `Chaque jour, 3 starters tirés aléatoirement ont un contour $violet. Si un starter que vous possédez l’a, essayez de - $ l’ajouter à votre équipe. Vérifiez bien son résumé !`, + $l’ajouter à votre équipe. Vérifiez bien son résumé !`, - "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. - $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding C or Shift.`, + "statChange": `Les changements de stats restent à travers les combats tant que le Pokémon + $n’est pas rappelé. + $Vos Pokémon sont rappelés avant un combat de Dresseur et avant d’entrer + $dans un nouveau biome. + $Vous pouvez également voir en combat les changements de stats d’un Pokémon + $en maintenant C ou Maj.`, "selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un. $Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents. @@ -44,4 +47,4 @@ export const tutorial: SimpleTranslationEntries = { $Les Pokémon issus d’Œufs ont généralement de\nmeilleurs IVs que les Pokémon sauvages. $Certains Pokémon ne peuvent être obtenus\nque dans des Œufs. $Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !`, -} as const; \ No newline at end of file +} as const; From c9152cda3f27c0277cedc7782cad00a39428163f Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Thu, 2 May 2024 00:17:32 -0500 Subject: [PATCH 068/110] Fix Mobile PWA not showing in true Fullscreen (#394) * Fixed Rounding Error For TargetHalfHpDamageAttr Moves that deal half of a target's HP were not able to deal damage if the target had 1 HP. Used Math.max to ensure 1 is the lowest this value ever evaluates to. * Fix Mobile PWA not showing in true Fullscreen adding "fullscreen" to the display attribute wasn't enough, but adding it to the start_url attribute was. This does not appear to affect PC (which is good since it shouldn't). * Allow any orientation for mobile PWA remove the orientation restriction since it doesn't prevent fullscreen PWA from displaying properly. --- public/manifest.webmanifest | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/public/manifest.webmanifest b/public/manifest.webmanifest index c75c70a8d45..4b5f2dbadd1 100644 --- a/public/manifest.webmanifest +++ b/public/manifest.webmanifest @@ -3,9 +3,8 @@ "short_name": "PokéRogue", "description": "A Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, and reaching Pokémon stats you never thought possible.", "scope": "/", - "start_url": "/", + "start_url": "https://pokerogue.net", "display": "fullscreen", - "orientation": "landscape", "background_color": "#8c8c8c", "theme_color": "#8c8c8c", "icons": [ From 71893e8428f410c8d22ee31abb87223ba0336977 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Thu, 2 May 2024 14:34:59 +0200 Subject: [PATCH 069/110] Update Spanish fight-ui-handler.ts --- src/locales/es/fight-ui-handler.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/es/fight-ui-handler.ts b/src/locales/es/fight-ui-handler.ts index 1ce9e0317bf..b431e3b7065 100644 --- a/src/locales/es/fight-ui-handler.ts +++ b/src/locales/es/fight-ui-handler.ts @@ -2,5 +2,5 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const fightUiHandler: SimpleTranslationEntries = { "pp": "PP", - "power": "POWER", -} as const; \ No newline at end of file + "power": "POTENCIA", +} as const; From 10506f9cf58975088836db96aad2fca691ab7889 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Thu, 2 May 2024 14:37:05 +0200 Subject: [PATCH 070/110] Update italian pokemon-stat.ts (#389) * Update italian pokemon-stat.ts * Update italian pokemon-stat.ts --- src/locales/it/pokemon-stat.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/locales/it/pokemon-stat.ts b/src/locales/it/pokemon-stat.ts index 7a209461b11..a3a62edebe2 100644 --- a/src/locales/it/pokemon-stat.ts +++ b/src/locales/it/pokemon-stat.ts @@ -1,16 +1,16 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const pokemonStat: SimpleTranslationEntries = { - "HP": "Max. HP", - "HPshortened": "MaxHP", - "ATK": "Attack", - "ATKshortened": "Atk", - "DEF": "Defense", - "DEFshortened": "Def", - "SPATK": "Sp. Atk", - "SPATKshortened": "SpAtk", - "SPDEF": "Sp. Def", - "SPDEFshortened": "SpDef", - "SPD": "Speed", - "SPDshortened": "Spd" -} as const; \ No newline at end of file + "HP": "PS Max", + "HPshortened": "PS", + "ATK": "Attacco", + "ATKshortened": "Att", + "DEF": "Difensa", + "DEFshortened": "Dif", + "SPATK": "Att. Sp.", + "SPATKshortened": "AttSp", + "SPDEF": "Dif. Sp.", + "SPDEFshortened": "DifSp", + "SPD": "Velocità", + "SPDshortened": "Vel" +} as const; From 0185dd639e0238b60a248d4f0f51dc89c245bebe Mon Sep 17 00:00:00 2001 From: James Lin Date: Thu, 2 May 2024 05:44:10 -0700 Subject: [PATCH 071/110] Catch global errors and rejected promises and display them in an alert box. (#351) * Catch errors and rejected promises. * Clean up --- src/main.ts | 16 ++++++++++++++++ src/phases.ts | 2 ++ src/ui/daily-run-scoreboard.ts | 2 +- src/ui/title-ui-handler.ts | 3 +++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 6a00693fc71..4b181f58174 100644 --- a/src/main.ts +++ b/src/main.ts @@ -9,6 +9,22 @@ import BBCodeText from 'phaser3-rex-plugins/plugins/bbcodetext'; import TransitionImagePackPlugin from 'phaser3-rex-plugins/templates/transitionimagepack/transitionimagepack-plugin.js'; import { LoadingScene } from './loading-scene'; + +// Catch global errors and display them in an alert so users can report the issue. +window.onerror = function (message, source, lineno, colno, error) { + console.error(error); + let errorString = `Received unhandled error. Open browser console and click OK to see details.\nError: ${message}\nSource: ${source}\nLine: ${lineno}\nColumn: ${colno}\nStack: ${error.stack}`; + alert(errorString); + // Avoids logging the error a second time. + return true; +}; + +// Catch global promise rejections and display them in an alert so users can report the issue. +window.addEventListener('unhandledrejection', (event) => { + let errorString = `Received unhandled promise rejection. Open browser console and click OK to see details.\nReason: ${event.reason}`; + alert(errorString); + }); + const config: Phaser.Types.Core.GameConfig = { type: Phaser.WEBGL, parent: 'app', diff --git a/src/phases.ts b/src/phases.ts index 72f0e10cc3e..2ffa25aef0f 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -331,6 +331,8 @@ export class TitlePhase extends Phase { this.scene.sessionPlayTime = 0; this.end(); }); + }).catch(err => { + console.error("Failed to load daily run:\n", err); }); }); } diff --git a/src/ui/daily-run-scoreboard.ts b/src/ui/daily-run-scoreboard.ts index 8f7ca0bf110..8b258b3a702 100644 --- a/src/ui/daily-run-scoreboard.ts +++ b/src/ui/daily-run-scoreboard.ts @@ -167,7 +167,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { } else this.loadingLabel.setText(i18next.t('menu:noRankings')); }); - }); + }).catch(err => { console.error("Failed to load daily rankings:\n", err) }); } } diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index c430764e4da..6f873c6b0a1 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -65,6 +65,9 @@ export default class TitleUiHandler extends OptionSelectUiHandler { this.playerCountLabel.setText(`${stats.playerCount} ${i18next.t("menu:playersOnline")}`); if (this.splashMessage === battleCountSplashMessage) this.splashMessageText.setText(battleCountSplashMessage.replace('{COUNT}', stats.battleCount.toLocaleString('en-US'))); + }) + .catch(err => { + console.error("Failed to fetch title stats:\n", err); }); } From 3a7a48fe833f9ab1a10339f3fdd4b10b190cdae3 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Thu, 2 May 2024 09:00:36 -0400 Subject: [PATCH 072/110] Temporarily disable error handling --- src/main.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main.ts b/src/main.ts index 4b181f58174..b3b4d5f3cc6 100644 --- a/src/main.ts +++ b/src/main.ts @@ -14,7 +14,7 @@ import { LoadingScene } from './loading-scene'; window.onerror = function (message, source, lineno, colno, error) { console.error(error); let errorString = `Received unhandled error. Open browser console and click OK to see details.\nError: ${message}\nSource: ${source}\nLine: ${lineno}\nColumn: ${colno}\nStack: ${error.stack}`; - alert(errorString); + //alert(errorString); // Avoids logging the error a second time. return true; }; @@ -22,8 +22,9 @@ window.onerror = function (message, source, lineno, colno, error) { // Catch global promise rejections and display them in an alert so users can report the issue. window.addEventListener('unhandledrejection', (event) => { let errorString = `Received unhandled promise rejection. Open browser console and click OK to see details.\nReason: ${event.reason}`; - alert(errorString); - }); + console.error(event.reason); + //alert(errorString); +}); const config: Phaser.Types.Core.GameConfig = { type: Phaser.WEBGL, From 322838cfb5a9d486e0f46e60c85efbeb7f1b564b Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Thu, 2 May 2024 11:37:06 -0400 Subject: [PATCH 073/110] Move service-worker to public folder --- service-worker.js => public/service-worker.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename service-worker.js => public/service-worker.js (100%) diff --git a/service-worker.js b/public/service-worker.js similarity index 100% rename from service-worker.js rename to public/service-worker.js From ddb4383b1f9620fbc5040189076eba57668e3985 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Thu, 2 May 2024 14:01:57 -0500 Subject: [PATCH 074/110] Move Porygon line down to Rare in Factory biome This makes the Porygon line more common than before. --- src/data/biomes.ts | 12 ++++++------ src/data/move.ts | 5 +---- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/data/biomes.ts b/src/data/biomes.ts index d6e84bcbc7c..c6a3c95b631 100644 --- a/src/data/biomes.ts +++ b/src/data/biomes.ts @@ -615,7 +615,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, { 1: [ Species.MANTYKE ], 20: [ Species.MANTINE ] }, Species.ALOMOMOLA, { 1: [ Species.TYNAMO ], 39: [ Species.EELEKTRIK ] }, Species.DHELMISE ] + [TimeOfDay.ALL]: [ Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, { 1: [ Species.MANTYKE ], 52: [ Species.MANTINE ] }, Species.ALOMOMOLA, { 1: [ Species.TYNAMO ], 39: [ Species.EELEKTRIK ] }, Species.DHELMISE ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], @@ -1128,8 +1128,8 @@ export const biomePokemonPools: BiomePokemonPools = { ] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ] }, Species.KLEFKI ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] }, { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] } ] }, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] } ] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] } ] }, [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENESECT, Species.MAGEARNA ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLINKLANG, Species.KLEFKI ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, @@ -1319,7 +1319,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [ Species.VESPIQUEN, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ] }, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ] } ], [TimeOfDay.DUSK]: [ Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ], [TimeOfDay.NIGHT]: [ { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ] }, Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ], - [TimeOfDay.ALL]: [ Species.AIPOM, { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ] }, { 1: [ Species.PIKIPEK ], 14: [ Species.TRUMBEAK ], 36: [ Species.TOUCANNON ] } ] + [TimeOfDay.ALL]: [ Species.AIPOM, { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ] }, { 1: [ Species.PIKIPEK ], 14: [ Species.TRUMBEAK ], 28: [ Species.TOUCANNON ] } ] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [ Species.EXEGGCUTE, Species.TROPIUS, Species.COMBEE, Species.KOMALA ], @@ -2708,7 +2708,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.PORYGON, Type.NORMAL, -1, [ - [ Biome.FACTORY, BiomePoolTier.SUPER_RARE ], + [ Biome.FACTORY, BiomePoolTier.RARE ], [ Biome.SPACE, BiomePoolTier.SUPER_RARE ], [ Biome.LABORATORY, BiomePoolTier.RARE ] ] @@ -3165,7 +3165,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.PORYGON2, Type.NORMAL, -1, [ - [ Biome.FACTORY, BiomePoolTier.SUPER_RARE ], + [ Biome.FACTORY, BiomePoolTier.RARE ], [ Biome.SPACE, BiomePoolTier.SUPER_RARE ], [ Biome.LABORATORY, BiomePoolTier.RARE ] ] diff --git a/src/data/move.ts b/src/data/move.ts index e1694ede8a3..e300b3ae20d 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -3611,8 +3611,6 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr { } } - - export class TransformAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { return new Promise(resolve => { @@ -6357,8 +6355,7 @@ export function initMoves() { }), // TODO Add Instruct/Encore interaction new AttackMove(Moves.COMEUPPANCE, Type.DARK, MoveCategory.PHYSICAL, 1, 100, 10, -1, 0, 9) .attr(CounterDamageAttr, (move: Move) => (move.category === MoveCategory.PHYSICAL || move.category === MoveCategory.SPECIAL), 1.5) - .target(MoveTarget.ATTACKER) - .partial(), + .target(MoveTarget.ATTACKER), new AttackMove(Moves.AQUA_CUTTER, Type.WATER, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 9) .attr(HighCritAttr) .slicingMove() From 9d8f7ddcf0b8afb07df95a10ec7839b8f83b1594 Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Thu, 2 May 2024 14:10:21 -0500 Subject: [PATCH 075/110] Implement Tailwind (#398) Added a new ArenaTagType for Tailwind. Lasts 4 turns including the turn used. --- src/data/arena-tag.ts | 16 ++++++++++++++++ src/data/enums/arena-tag-type.ts | 3 ++- src/data/move.ts | 4 ++-- src/field/pokemon.ts | 5 +++++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index a879c68d4ce..8942cfe4b3e 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -482,6 +482,20 @@ export class GravityTag extends ArenaTag { } } +class TailwindTag extends ArenaTag { + constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { + super(ArenaTagType.TAILWIND, turnCount, Moves.TAILWIND, sourceId, side); + } + + onAdd(arena: Arena): void { + arena.scene.queueMessage(`The Tailwind blew from behind${this.side === ArenaTagSide.PLAYER ? '\nyour' : this.side === ArenaTagSide.ENEMY ? '\nthe opposing' : ''} team!`); + } + + onRemove(arena: Arena): void { + arena.scene.queueMessage(`${this.side === ArenaTagSide.PLAYER ? 'Your' : this.side === ArenaTagSide.ENEMY ? 'The opposing' : ''} team's Tailwind petered out!`); + } +} + export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves, sourceId: integer, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag { switch (tagType) { case ArenaTagType.MIST: @@ -513,5 +527,7 @@ export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMov return new LightScreenTag(turnCount, sourceId, side); case ArenaTagType.AURORA_VEIL: return new AuroraVeilTag(turnCount, sourceId, side); + case ArenaTagType.TAILWIND: + return new TailwindTag(turnCount, sourceId, side); } } diff --git a/src/data/enums/arena-tag-type.ts b/src/data/enums/arena-tag-type.ts index 8478b6f3f57..2ecac8b5677 100644 --- a/src/data/enums/arena-tag-type.ts +++ b/src/data/enums/arena-tag-type.ts @@ -15,5 +15,6 @@ export enum ArenaTagType { GRAVITY = "GRAVITY", REFLECT = "REFLECT", LIGHT_SCREEN = "LIGHT_SCREEN", - AURORA_VEIL = "AURORA_VEIL" + AURORA_VEIL = "AURORA_VEIL", + TAILWIND = "TAILWIND" } diff --git a/src/data/move.ts b/src/data/move.ts index e300b3ae20d..b26af03fc5e 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -4805,8 +4805,8 @@ export function initMoves() { .partial(), new StatusMove(Moves.TAILWIND, Type.FLYING, -1, 15, -1, 0, 4) .windMove() - .target(MoveTarget.USER_SIDE) - .unimplemented(), + .attr(AddArenaTagAttr, ArenaTagType.TAILWIND, 4, true) + .target(MoveTarget.USER_SIDE), new StatusMove(Moves.ACUPRESSURE, Type.NORMAL, -1, 30, -1, 0, 4) .attr(StatChangeAttr, BattleStat.RAND, 2) .target(MoveTarget.USER_OR_NEAR_ALLY), diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index a966a24303f..daa7876853b 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -589,6 +589,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ret *= 1.5; break; case Stat.SPD: + // Check both the player and enemy to see if Tailwind should be multiplying the speed of the Pokemon + if ((this.isPlayer() && this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)) + || (!this.isPlayer() && this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.ENEMY))) + ret *= 2; + if (this.getTag(BattlerTagType.SLOW_START)) ret >>= 1; if (this.status && this.status.effect === StatusEffect.PARALYSIS) From dffa9b2704dba212dfbaf1f1c518c4e65edb8737 Mon Sep 17 00:00:00 2001 From: maru Date: Thu, 2 May 2024 15:48:59 -0400 Subject: [PATCH 076/110] Add more files to be purged from CF cache on deploy --- .github/workflows/deploy.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e678a297852..07aed42a5a7 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -41,4 +41,6 @@ jobs: files: | https://pokerogue.net/ https://pokerogue.net/index.html - https://pokerogue.net/manifest.json \ No newline at end of file + https://pokerogue.net/manifest.json + https://pokerogue.net/manifest.webmanifest + https://pokerogue.net/service-worker.js \ No newline at end of file From 991f097e9e2488192dd7a6d8084365e49aa9200b Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Thu, 2 May 2024 17:48:08 -0400 Subject: [PATCH 077/110] Rebalance friendship and add starter friendship with candy reward --- src/data/pokemon-species.ts | 26 +++++++++++++++++++++++++- src/field/pokemon.ts | 27 +++++++++++++++++++++++++-- src/modifier/modifier-type.ts | 2 +- src/modifier/modifier.ts | 9 ++++----- src/phases.ts | 15 +++++---------- src/system/game-data.ts | 5 ++++- 6 files changed, 64 insertions(+), 20 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 2f8edefa403..c67f0c14b47 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -367,8 +367,8 @@ export abstract class PokemonSpeciesForm { loadAssets(scene: BattleScene, female: boolean, formIndex?: integer, shiny?: boolean, variant?: Variant, startLoad?: boolean): Promise { return new Promise(resolve => { const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant); - scene.load.audio(this.getCryKey(formIndex), `audio/cry/${this.getCryKey(formIndex)}.m4a`); scene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant)); + scene.load.audio(this.getCryKey(formIndex), `audio/cry/${this.getCryKey(formIndex)}.m4a`); scene.load.once(Phaser.Loader.Events.COMPLETE, () => { const originalWarn = console.warn; // Ignore warnings for missing frames, because there will be a lot @@ -3156,6 +3156,30 @@ export const noStarterFormKeys: string[] = [ SpeciesFormKey.ETERNAMAX ].map(k => k.toString()); +export function getStarterValueFriendshipCap(value: integer): integer { + switch (value) { + case 1: + return 20; + case 2: + return 40; + case 3: + return 60; + case 4: + return 100; + case 5: + return 140; + case 6: + return 200; + case 7: + return 280; + case 8: + case 9: + return 450; + default: + return 600; + } +} + export const starterPassiveAbilities = { [Species.BULBASAUR]: Abilities.SOLAR_POWER, [Species.CHARMANDER]: Abilities.INTIMIDATE, diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index daa7876853b..08482bbd914 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -5,12 +5,12 @@ import { variantData } from '#app/data/variant'; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info'; import { Moves } from "../data/enums/moves"; import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveTypeAttr, VariableMoveCategoryAttr } from "../data/move"; -import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, starterPassiveAbilities } from '../data/pokemon-species'; +import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from '../data/pokemon-species'; import * as Utils from '../utils'; import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from '../data/type'; import { getLevelTotalExp } from '../data/exp'; import { Stat } from '../data/pokemon-stat'; -import { AttackTypeBoosterModifier, DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonHeldItemModifier, PokemonMultiHitModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier, TerastallizeModifier } from '../modifier/modifier'; +import { AttackTypeBoosterModifier, DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonMultiHitModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier, TerastallizeModifier } from '../modifier/modifier'; import { PokeballType } from '../data/pokeball'; import { Gender } from '../data/gender'; import { initMoveAnim, loadMoveAnimAssets } from '../data/battle-anims'; @@ -2367,6 +2367,29 @@ export class PlayerPokemon extends Pokemon { }, PartyUiHandler.FilterNonFainted); }); } + + addFriendship(friendship: integer): void { + const starterSpeciesId = this.species.getRootSpeciesId(); + const starterData = this.scene.gameData.starterData[starterSpeciesId]; + const amount = new Utils.IntegerHolder(friendship); + const starterAmount = new Utils.IntegerHolder(friendship * (this.scene.gameMode.isClassic ? 2 : 1)); + if (amount.value > 0) { + this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount); + this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, starterAmount); + + this.friendship = Math.min(this.friendship + amount.value, 255); + if (this.friendship === 255) + this.scene.validateAchv(achvs.MAX_FRIENDSHIP); + starterData.friendship = (starterData.friendship || 0) + starterAmount.value; + if (starterData.friendship >= getStarterValueFriendshipCap(speciesStarters[starterSpeciesId])) { + this.scene.gameData.addStarterCandy(getPokemonSpecies(starterSpeciesId), 1); + starterData.friendship = 0; + } + } else { + this.friendship = Math.max(this.friendship + amount.value, 0); + starterData.friendship = Math.max((starterData.friendship || 0) + starterAmount.value, 0); + } + } getPossibleEvolution(evolution: SpeciesFormEvolution): Promise { return new Promise(resolve => { diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 6237e8b5a50..4229b8be3b7 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1058,7 +1058,6 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 10), new WeightedModifierType(modifierTypes.TM_ULTRA, 8), new WeightedModifierType(modifierTypes.RARER_CANDY, 4), - new WeightedModifierType(modifierTypes.SOOTHE_BELL, (party: Pokemon[]) => party.find(p => (pokemonEvolutions.hasOwnProperty(p.species.speciesId) && pokemonEvolutions[p.species.speciesId].find(e => e.condition && e.condition instanceof SpeciesFriendshipEvolutionCondition)) || p.moveset.find(m => m.moveId === Moves.RETURN)) ? 16 : 0, 16), new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, 2), new WeightedModifierType(modifierTypes.IV_SCANNER, 4), new WeightedModifierType(modifierTypes.EXP_CHARM, 8), @@ -1078,6 +1077,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.BATON, 2), new WeightedModifierType(modifierTypes.SOUL_DEW, 8), //new WeightedModifierType(modifierTypes.OVAL_CHARM, 6), + new WeightedModifierType(modifierTypes.SOOTHE_BELL, 4), new WeightedModifierType(modifierTypes.ABILITY_CHARM, 6), new WeightedModifierType(modifierTypes.FOCUS_BAND, 5), new WeightedModifierType(modifierTypes.KINGS_ROCK, 3), diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index d8fad1466b9..88b009d3a48 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1111,9 +1111,7 @@ export class PokemonLevelIncrementModifier extends ConsumablePokemonModifier { pokemon.levelExp = 0; } - const friendshipIncrease = new Utils.IntegerHolder(5); - pokemon.scene.applyModifier(PokemonFriendshipBoosterModifier, true, pokemon, friendshipIncrease); - pokemon.friendship = Math.min(pokemon.friendship + friendshipIncrease.value, 255); + pokemon.addFriendship(5); pokemon.scene.unshiftPhase(new LevelUpPhase(pokemon.scene, pokemon.scene.getParty().indexOf(pokemon), pokemon.level - levelCount.value, pokemon.level)); @@ -1392,13 +1390,14 @@ export class PokemonFriendshipBoosterModifier extends PokemonHeldItemModifier { } apply(args: any[]): boolean { - (args[1] as Utils.IntegerHolder).value *= 1 + 0.5 * this.getStackCount(); + const friendship = args[1] as Utils.IntegerHolder; + friendship.value = Math.floor(friendship.value * (1 + 0.5 * this.getStackCount())); return true; } getMaxHeldItemCount(pokemon: Pokemon): integer { - return 5; + return 3; } } diff --git a/src/phases.ts b/src/phases.ts index 2ffa25aef0f..4c2f5536268 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -6,7 +6,7 @@ import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMov import { Mode } from './ui/ui'; import { Command } from "./ui/command-ui-handler"; import { Stat } from "./data/pokemon-stat"; -import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, PokemonFriendshipBoosterModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier } from "./modifier/modifier"; +import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier } from "./modifier/modifier"; import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler"; import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, PokeballType } from "./data/pokeball"; import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./data/battle-anims"; @@ -3154,8 +3154,8 @@ export class FaintPhase extends PokemonPhase { this.scene.getField(true).filter(p => p !== pokemon).forEach(p => p.removeTagsBySourceId(pokemon.id)); pokemon.faintCry(() => { - const friendshipDecrease = new Utils.IntegerHolder(10); - pokemon.friendship = Math.max(pokemon.friendship - friendshipDecrease.value, 0); + if (pokemon instanceof PlayerPokemon) + pokemon.addFriendship(-10); pokemon.hideInfo(); this.scene.playSound('faint'); this.scene.tweens.add({ @@ -3226,13 +3226,8 @@ export class VictoryPhase extends PokemonPhase { for (let partyMember of expPartyMembers) { const pId = partyMember.id; const participated = participantIds.has(pId); - if (participated) { - const friendshipIncrease = new Utils.IntegerHolder(2); - this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, partyMember, friendshipIncrease); - partyMember.friendship = Math.min(partyMember.friendship + friendshipIncrease.value, 255); - if (partyMember.friendship === 255) - this.scene.validateAchv(achvs.MAX_FRIENDSHIP); - } + if (participated) + partyMember.addFriendship(2); else if (!expShareModifier) { partyMemberExp.push(0); continue; diff --git a/src/system/game-data.ts b/src/system/game-data.ts index e11c2dcc572..b7495a1eac9 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -169,6 +169,7 @@ export interface StarterDataEntry { moveset: StarterMoveset | StarterFormMoveData; eggMoves: integer; candyCount: integer; + friendship: integer; abilityAttr: integer; passiveAttr: integer; valueReduction: integer; @@ -988,6 +989,7 @@ export class GameData { moveset: null, eggMoves: 0, candyCount: 0, + friendship: 0, abilityAttr: defaultStarterSpecies.includes(speciesId) ? AbilityAttr.ABILITY_1 : 0, passiveAttr: 0, valueReduction: 0 @@ -1035,6 +1037,7 @@ export class GameData { const hasPrevolution = pokemonPrevolutions.hasOwnProperty(species.speciesId); const newCatch = !caughtAttr; + const hasNewAttr = (caughtAttr & dexAttr) !== dexAttr; if (incrementCount) { if (!fromEgg) { @@ -1057,7 +1060,7 @@ export class GameData { this.gameStats.shinyPokemonHatched++; } - if (!hasPrevolution) + if (!hasPrevolution && (!pokemon.scene.gameMode.isDaily || hasNewAttr)) this.addStarterCandy(species, (1 * (pokemon.isShiny() ? 5 * Math.pow(2, pokemon.variant || 0) : 1)) * (fromEgg || pokemon.isBoss() ? 2 : 1)); } From fec87718300aa5d0bd56f1679ed853815316a33d Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Thu, 2 May 2024 16:49:22 -0500 Subject: [PATCH 078/110] Fix Shedinja Luck and Crash Shedinja wasn't taking the luck value from Ninjask so when it calculated its luck it just took the entire fused Pokemon's luck somehow. This has been fixed so it takes both the first and second part of the fusion's luck values instead. Also fixes an issue where Shedinja crashed the game if it was the second part of a fusion combo. Now the correct pokemon species gets checked against and the correct pokemon evolution occurs to create Shedinja. --- src/field/pokemon.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 08482bbd914..c5036ce72c6 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2457,12 +2457,17 @@ export class PlayerPokemon extends Pokemon { private handleSpecialEvolutions(evolution: SpeciesFormEvolution) { const isFusion = evolution instanceof FusionSpeciesFormEvolution; - if ((!isFusion ? this.species : this.fusionSpecies).speciesId === Species.NINCADA && evolution.speciesId === Species.NINJASK) { - const newEvolution = pokemonEvolutions[this.species.speciesId][1]; + + const evoSpecies = (!isFusion ? this.species : this.fusionSpecies) + if (evoSpecies.speciesId === Species.NINCADA && evolution.speciesId === Species.NINJASK) { + const newEvolution = pokemonEvolutions[evoSpecies.speciesId][1]; + if (newEvolution.condition.predicate(this)) { const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, undefined, this.shiny, this.variant, this.ivs, this.nature); newPokemon.natureOverride = this.natureOverride; newPokemon.moveset = this.moveset.slice(); + newPokemon.luck = this.luck; + newPokemon.fusionSpecies = this.fusionSpecies; newPokemon.fusionFormIndex = this.fusionFormIndex; newPokemon.fusionAbilityIndex = this.fusionAbilityIndex; @@ -2470,8 +2475,9 @@ export class PlayerPokemon extends Pokemon { newPokemon.fusionVariant = this.fusionVariant; newPokemon.fusionGender = this.fusionGender; newPokemon.fusionLuck = this.fusionLuck; + this.scene.getParty().push(newPokemon); - newPokemon.evolve(newEvolution); + newPokemon.evolve(!isFusion ? newEvolution : new FusionSpeciesFormEvolution(this.id, newEvolution)); const modifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === this.id, true) as PokemonHeldItemModifier[]; modifiers.forEach(m => { From 67431fb83b82d45cc98f59a324a3a8ecbd7fb7ff Mon Sep 17 00:00:00 2001 From: Simoninoo <105045724+Simoninoo@users.noreply.github.com> Date: Fri, 3 May 2024 02:45:45 +0200 Subject: [PATCH 079/110] Patch Ita (#399) * Syntax correction * Tutorial translation --- src/locales/it/pokemon-stat.ts | 2 +- src/locales/it/tutorial.ts | 62 +++++++++++++++++----------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/locales/it/pokemon-stat.ts b/src/locales/it/pokemon-stat.ts index a3a62edebe2..b2c023aa383 100644 --- a/src/locales/it/pokemon-stat.ts +++ b/src/locales/it/pokemon-stat.ts @@ -5,7 +5,7 @@ export const pokemonStat: SimpleTranslationEntries = { "HPshortened": "PS", "ATK": "Attacco", "ATKshortened": "Att", - "DEF": "Difensa", + "DEF": "Difesa", "DEFshortened": "Dif", "SPATK": "Att. Sp.", "SPATKshortened": "AttSp", diff --git a/src/locales/it/tutorial.ts b/src/locales/it/tutorial.ts index 2773b6710ba..898dcead8a4 100644 --- a/src/locales/it/tutorial.ts +++ b/src/locales/it/tutorial.ts @@ -1,42 +1,42 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const tutorial: SimpleTranslationEntries = { - "intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. - $This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. - $The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. - $If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, + "intro": `Benvenuto in PokéRogue! Questo gioco si concentra sulle battaglie, con elementi roguelite. + $Questo gioco non è monetizzato e non siamo proprietari di Pokemon e Assets presenti nel gioco. + $Il gioco è work-in-progress ma giocabile al 100%.\nPer reportare eventuali bugs è possibile discuterne sul nostro Discord. + $Se il game risulta 'lento', assicurati di aver abilitato l'Accelerazione Hardware nelle impostazioni del tuo Browser`, - "accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, + "accessMenu": `Per accedere al menù, press M o Esc.\nDal menù puoi cambiare impostazioni, controllare la wiki e accedere a varie features.`, - "menu": `From this menu you can access the settings. - $From the settings you can change game speed, window style, and other options. - $There are also various other features here, so be sure to check them all!`, + "menu": `Da questo menù puoi accedere alle impostazioni. + $Dalle impostazioni puoi cambiare velocità di gioco, stile di finestra e altre opzioni. + $Ci sono varie funzionalità, controlla bene e non perderti nulla!`, - "starterSelect": `From this screen, you can select your starters.\nThese are your initial party members. - $Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. - $You can also select gender, ability, and form depending on\nthe variants you've caught or hatched. - $The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`, + "starterSelect": `Da questa schermata puoi selezionare il tuo starter.\nQuesti sono i membri iniziali del tuo parti. + $Ogni starter ha un valore. Puoi avere fino a \n6 Pokèmon, avendo a disposizione un massimo di 10 punti. + $Puoi anche selezionare Sesso, Abilità, e Forma a seconda delle\nvarianti che hai catturato o schiuso. + $Le IVs di una specie sono le migliori rispetto a tutte quelle che hai\ncatturato o schiuso, quindi prova a catturarne il piu possibile!`, - "pokerus": `A daily random 3 selectable starters have a purple border. - $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "pokerus": `Giornalmente 3 Starter casuali disponibili avranno il bordo viola. + $Se possiedi uno di questi starter,\nprova ad aggiungerlo al party. Ricorda di controllare le info!`, - "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. - $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding C or Shift.`, + "statChange": `I cambiamenti alle statistiche persistono fintanto che i tuoi pokèmon resteranno in campo. + $I tuoi pokemon verranno richiamati quando incontrerai un allenatore o al cambiamento di bioma. + $Puoi anche vedere i cambiamenti alle statistiche in corso tenendo premuto C o Shift`, - "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. - $These range from consumables, to Pokémon held items, to passive permanent items. - $Most non-consumable item effects will stack in various ways. - $Some items will only show up if they can be used, such as evolution items. - $You can also transfer held items between Pokémon using the transfer option. - $The transfer option will appear in the bottom right once you have obtained a held item. - $You may purchase consumable items with money, and a larger variety will be available the further you get. - $Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`, + "selectItem": `Dopo ogni battaglia avrai disponibili tre item.\nPotrai prenderne solo uno. + $Questi spaziano tra consumabili, item tenuti da Pokèmon o con un effetto passivo permanente. + $La maggior parte degli Item non Consumabili possono stackare in diversi modi. + $Alcuni Item risulteranno disponibili solo se possono essere usati, come Item Evolutivi. + $Puoi anche passare un Item tenuto da un Pokèmon ad un altro attraverso l'opzione 'trasferisci strumento'. + $L'opzione 'trasferisci strumento' sarà disponibile solo dopo aver assegnato uno strumento ad un Pokèmon. + $Puoi acquistare consumabili con le monete, progredendo saranno poi disponibili ulteriori oggetti. + $Assicurati di fare un acquisto prima di selezionare un item casuale, poichè passerai subito alla lotta successiva.`, - "eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs. - $Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. - $Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. - $Pokémon hatched from eggs generally have better IVs than\nwild Pokémon. - $Some Pokémon can only even be obtained from eggs. - $There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`, + "eggGacha": `Da questa schermata, puoi riscattare i tuoi vouchers in cambio di\nuova Pokèmon. + $Le uova vanno schiuse e saranno sempre più vicine alla schiusura dopo\nogni battaglia. Le uova più rare impiegheranno più battaglie per la schiusura. + $I Pokémon schiusi non verranno aggiunti alla tua squadra, saranno\naggiunti ai tuoi starters. + $I Pokémon schiusi generalmente hanno IVs migliori rispetto ai\n Pokémon selvatici. + $Alcuni Pokémon possono essere ottenuti solo tramite uova. + $Ci sono 3 diversi macchinari con differenti\nbonus, scegli quello che preferisci!`, } as const; \ No newline at end of file From b30ab6136e8df4c792420d1c0e7f3777ca984330 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Thu, 2 May 2024 21:55:11 -0400 Subject: [PATCH 080/110] Starter friendship for candies is split between spliced species --- src/field/pokemon.ts | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index c5036ce72c6..7720d741b20 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -37,7 +37,7 @@ import PartyUiHandler, { PartyOption, PartyUiMode } from '../ui/party-ui-handler import SoundFade from 'phaser3-rex-plugins/plugins/soundfade'; import { LevelMoves } from '../data/pokemon-level-moves'; import { DamageAchv, achvs } from '../system/achv'; -import { DexAttr, StarterMoveset } from '../system/game-data'; +import { DexAttr, StarterDataEntry, StarterMoveset } from '../system/game-data'; import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from '@material/material-color-utilities'; import { Nature, getNatureStatMultiplier } from '../data/nature'; import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from '../data/pokemon-forms'; @@ -2370,9 +2370,13 @@ export class PlayerPokemon extends Pokemon { addFriendship(friendship: integer): void { const starterSpeciesId = this.species.getRootSpeciesId(); - const starterData = this.scene.gameData.starterData[starterSpeciesId]; + const fusionStarterSpeciesId = this.isFusion() ? this.fusionSpecies.getRootSpeciesId() : 0; + const starterData = [ + this.scene.gameData.starterData[starterSpeciesId], + fusionStarterSpeciesId ? this.scene.gameData.starterData[fusionStarterSpeciesId] : null + ].filter(d => d); const amount = new Utils.IntegerHolder(friendship); - const starterAmount = new Utils.IntegerHolder(friendship * (this.scene.gameMode.isClassic ? 2 : 1)); + const starterAmount = new Utils.IntegerHolder(Math.floor(friendship * (this.scene.gameMode.isClassic ? 2 : 1) / (fusionStarterSpeciesId ? 2 : 1))); if (amount.value > 0) { this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount); this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, starterAmount); @@ -2380,14 +2384,18 @@ export class PlayerPokemon extends Pokemon { this.friendship = Math.min(this.friendship + amount.value, 255); if (this.friendship === 255) this.scene.validateAchv(achvs.MAX_FRIENDSHIP); - starterData.friendship = (starterData.friendship || 0) + starterAmount.value; - if (starterData.friendship >= getStarterValueFriendshipCap(speciesStarters[starterSpeciesId])) { - this.scene.gameData.addStarterCandy(getPokemonSpecies(starterSpeciesId), 1); - starterData.friendship = 0; - } + starterData.forEach((sd: StarterDataEntry, i: integer) => { + const speciesId = !i ? starterSpeciesId : fusionStarterSpeciesId as Species; + sd.friendship = (sd.friendship || 0) + starterAmount.value; + if (sd.friendship >= getStarterValueFriendshipCap(speciesStarters[speciesId])) { + this.scene.gameData.addStarterCandy(getPokemonSpecies(speciesId), 1); + sd.friendship = 0; + } + }); } else { this.friendship = Math.max(this.friendship + amount.value, 0); - starterData.friendship = Math.max((starterData.friendship || 0) + starterAmount.value, 0); + for (let sd of starterData) + sd.friendship = Math.max((sd.friendship || 0) + starterAmount.value, 0); } } From 60117947322354f51801e01d295d9657bae1af66 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Thu, 2 May 2024 21:58:38 -0500 Subject: [PATCH 081/110] Minor egg move fix Gen 8 fossils unintentionally had Earthquake. They have now been replaced. --- src/data/egg-moves.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/egg-moves.ts b/src/data/egg-moves.ts index 800c9a0ef25..221496a177d 100644 --- a/src/data/egg-moves.ts +++ b/src/data/egg-moves.ts @@ -458,9 +458,9 @@ export const speciesEggMoves = { [Species.MORPEKO]: [ Moves.TRIPLE_AXEL, Moves.OBSTRUCT, Moves.PARTING_SHOT, Moves.SWORDS_DANCE ], [Species.CUFANT]: [ Moves.LIQUIDATION, Moves.HEAVY_SLAM, Moves.CLOSE_COMBAT, Moves.GIGATON_HAMMER ], [Species.DRACOZOLT]: [ Moves.TRIPLE_AXEL, Moves.DRAGON_HAMMER, Moves.FIRE_LASH, Moves.DRAGON_DANCE ], - [Species.ARCTOZOLT]: [ Moves.TRIPLE_AXEL, Moves.EARTHQUAKE, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ], + [Species.ARCTOZOLT]: [ Moves.TRIPLE_AXEL, Moves.LIQUIDATION, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ], [Species.DRACOVISH]: [ Moves.TRIPLE_AXEL, Moves.DRAGON_HAMMER, Moves.THUNDER_FANG, Moves.DRAGON_DANCE ], - [Species.ARCTOVISH]: [ Moves.TRIPLE_AXEL, Moves.EARTHQUAKE, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ], + [Species.ARCTOVISH]: [ Moves.TRIPLE_AXEL, Moves.SUPERCELL_SLAM, Moves.HIGH_HORSEPOWER, Moves.SHIFT_GEAR ], [Species.DURALUDON]: [ Moves.CALM_MIND, Moves.BODY_PRESS, Moves.EARTH_POWER, Moves.RECOVER ], [Species.DREEPY]: [ Moves.DRAGON_ENERGY, Moves.SHED_TAIL, Moves.BLAZING_TORQUE, Moves.SPECTRAL_THIEF ], [Species.ZACIAN]: [ Moves.MAGICAL_TORQUE, Moves.BITTER_BLADE, Moves.LEAF_BLADE, Moves.VICTORY_DANCE ], From fbc08005715ac1b1bdb4a3e38e6bf468ad3625e7 Mon Sep 17 00:00:00 2001 From: Matt Ross <13306707+mattrossdev@users.noreply.github.com> Date: Thu, 2 May 2024 22:20:41 -0700 Subject: [PATCH 082/110] Issue/smack down should cancel fly (#407) * Smack down and thousand arrows should cancel charging fly * Remove console log * Update interruptible check to use flying tag instead of move history * Remove extra comma --- src/data/battler-tags.ts | 25 +++++++++++++++++++++++++ src/data/enums/battler-tag-type.ts | 1 + src/data/move.ts | 4 ++++ src/phases.ts | 2 +- 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index aaab9f9a4a2..2521a0e03c5 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -163,6 +163,29 @@ export class FlinchedTag extends BattlerTag { } } +export class InterruptedTag extends BattlerTag { + constructor(sourceMove: Moves){ + super(BattlerTagType.INTERRUPTED, BattlerTagLapseType.PRE_MOVE, 0, sourceMove) + } + + canAdd(pokemon: Pokemon): boolean { + return !!pokemon.getTag(BattlerTagType.FLYING) + } + + onAdd(pokemon: Pokemon): void { + super.onAdd(pokemon); + + pokemon.getMoveQueue().shift() + pokemon.pushMoveHistory({move: Moves.NONE, result: MoveResult.OTHER}) + } + + lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { + super.lapse(pokemon, lapseType); + (pokemon.scene.getCurrentPhase() as MovePhase).cancel(); + return true + } +} + export class ConfusedTag extends BattlerTag { constructor(turnCount: integer, sourceMove: Moves) { super(BattlerTagType.CONFUSED, BattlerTagLapseType.MOVE, turnCount, sourceMove); @@ -1081,6 +1104,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourc return new RechargingTag(sourceMove); case BattlerTagType.FLINCHED: return new FlinchedTag(sourceMove); + case BattlerTagType.INTERRUPTED: + return new InterruptedTag(sourceMove); case BattlerTagType.CONFUSED: return new ConfusedTag(turnCount, sourceMove); case BattlerTagType.INFATUATED: diff --git a/src/data/enums/battler-tag-type.ts b/src/data/enums/battler-tag-type.ts index 4d810b737aa..f76e5526f7e 100644 --- a/src/data/enums/battler-tag-type.ts +++ b/src/data/enums/battler-tag-type.ts @@ -3,6 +3,7 @@ export enum BattlerTagType { NONE = "NONE", RECHARGING = "RECHARGING", FLINCHED = "FLINCHED", + INTERRUPTED = "INTERRUPTED", CONFUSED = "CONFUSED", INFATUATED = "INFATUATED", SEEDED = "SEEDED", diff --git a/src/data/move.ts b/src/data/move.ts index b26af03fc5e..a227c522a86 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -5106,6 +5106,8 @@ export function initMoves() { .unimplemented(), new AttackMove(Moves.SMACK_DOWN, Type.ROCK, MoveCategory.PHYSICAL, 50, 100, 15, 100, 0, 5) .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 5) + .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) + .attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING]) .attr(HitsTagAttr, BattlerTagType.FLYING, false) .makesContact(false), new AttackMove(Moves.STORM_THROW, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) @@ -5469,6 +5471,8 @@ export function initMoves() { new AttackMove(Moves.THOUSAND_ARROWS, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, 100, 0, 6) .attr(NeutralDamageAgainstFlyingTypeMultiplierAttr) .attr(HitsTagAttr, BattlerTagType.FLYING, false) + .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) + .attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING]) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.THOUSAND_WAVES, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) diff --git a/src/phases.ts b/src/phases.ts index 4c2f5536268..40ab1f30637 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -2333,7 +2333,7 @@ export class MovePhase extends BattlePhase { return; } - if (this.pokemon.getTag(BattlerTagType.RECHARGING)) + if (this.pokemon.getTag(BattlerTagType.RECHARGING|| BattlerTagType.INTERRUPTED)) return; this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500); From f7b391746ed0076f2c548dd6836f5f8dc40c5265 Mon Sep 17 00:00:00 2001 From: Jaime Date: Fri, 3 May 2024 13:29:22 +0200 Subject: [PATCH 083/110] Fix Gyro Ball only checking base stat --- src/data/move.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index a227c522a86..ea89788cf93 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1770,13 +1770,13 @@ export class BattleStatRatioPowerAttr extends VariablePowerAttr { if (this.invert) { // Gyro ball uses a specific formula - let userSpeed = user.getStat(this.stat); + let userSpeed = user.getBattleStat(this.stat); if (userSpeed < 1) { // Gen 6+ always have 1 base power power.value = 1; return true; } - let bp = Math.floor(Math.min(150, 25 * target.getStat(this.stat) / userSpeed + 1)); + let bp = Math.floor(Math.min(150, 25 * target.getBattleStat(this.stat) / userSpeed + 1)); power.value = bp; return true; } From b84a4b4ee5fde701464383c271e67fea0248f38f Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Fri, 3 May 2024 01:46:19 -0500 Subject: [PATCH 084/110] Fix Shedinja PPused Share Fixed having Shedinja share PP usage with the Ninjask it evolved from and vice versa. The solution was to make a deep copy of each move in the moveset array rather than copying the array itself. --- src/field/pokemon.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 7720d741b20..bc51323075b 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2473,7 +2473,7 @@ export class PlayerPokemon extends Pokemon { if (newEvolution.condition.predicate(this)) { const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, undefined, this.shiny, this.variant, this.ivs, this.nature); newPokemon.natureOverride = this.natureOverride; - newPokemon.moveset = this.moveset.slice(); + newPokemon.moveset = this.copyMoveset(); newPokemon.luck = this.luck; newPokemon.fusionSpecies = this.fusionSpecies; @@ -2583,6 +2583,15 @@ export class PlayerPokemon extends Pokemon { this.updateFusionPalette(); }); } + + /** Returns a deep copy of this Pokemon's moveset array */ + copyMoveset(): PokemonMove[] { + let newMoveset = []; + this.moveset.forEach(move => + newMoveset.push(new PokemonMove(move.moveId, 0, move.ppUp, move.virtual))); + + return newMoveset; + } } export class EnemyPokemon extends Pokemon { From 24a9dba2c46e70fb2d06b87dec7dec952dc98686 Mon Sep 17 00:00:00 2001 From: Paul Beslin Date: Fri, 3 May 2024 00:18:05 +0200 Subject: [PATCH 085/110] Fix attacks with charge (solar beam, dig...) allowing to switch target on second turn --- src/data/battler-tags.ts | 8 ++++++++ src/data/enums/battler-tag-type.ts | 1 + src/data/move.ts | 5 ++++- src/phases.ts | 9 ++++++--- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 2521a0e03c5..8ff684394ec 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -391,6 +391,12 @@ export class FrenzyTag extends BattlerTag { } } +export class ChargingTag extends BattlerTag { + constructor(sourceMove: Moves, sourceId: integer) { + super(BattlerTagType.CHARGING, BattlerTagLapseType.CUSTOM, 1, sourceMove, sourceId); + } +} + export class EncoreTag extends BattlerTag { public moveId: Moves; @@ -1116,6 +1122,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourc return new NightmareTag(); case BattlerTagType.FRENZY: return new FrenzyTag(sourceMove, sourceId); + case BattlerTagType.CHARGING: + return new ChargingTag(sourceMove, sourceId); case BattlerTagType.ENCORE: return new EncoreTag(sourceId); case BattlerTagType.HELPING_HAND: diff --git a/src/data/enums/battler-tag-type.ts b/src/data/enums/battler-tag-type.ts index f76e5526f7e..7a9f6ba8bb2 100644 --- a/src/data/enums/battler-tag-type.ts +++ b/src/data/enums/battler-tag-type.ts @@ -9,6 +9,7 @@ export enum BattlerTagType { SEEDED = "SEEDED", NIGHTMARE = "NIGHTMARE", FRENZY = "FRENZY", + CHARGING = "CHARGING", ENCORE = "ENCORE", HELPING_HAND = "HELPING_HAND", INGRAIN = "INGRAIN", diff --git a/src/data/move.ts b/src/data/move.ts index ea89788cf93..21f376254f7 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1325,10 +1325,13 @@ export class ChargeAttr extends OverrideMoveEffectAttr { user.getMoveQueue().push({ move: move.id, targets: [ target.getBattlerIndex() ], ignorePP: true }); if (this.sameTurn) user.scene.pushMovePhase(new MovePhase(user.scene, user, [ target.getBattlerIndex() ], user.moveset.find(m => m.moveId === move.id), true), this.followUpPriority); + user.addTag(BattlerTagType.CHARGING, 1, move.id, user.id); resolve(true); }); - } else + } else { + user.lapseTag(BattlerTagType.CHARGING); resolve(false); + } }); } diff --git a/src/phases.ts b/src/phases.ts index 40ab1f30637..e4ed8d2938c 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -1686,6 +1686,8 @@ export class CommandPhase extends FieldPhase { console.log(moveTargets, playerPokemon.name); if (moveTargets.targets.length <= 1 || moveTargets.multiple) turnCommand.move.targets = moveTargets.targets; + else if(playerPokemon.getTag(BattlerTagType.CHARGING) && playerPokemon.getMoveQueue().length >= 1) + turnCommand.move.targets = playerPokemon.getMoveQueue()[0].targets; else this.scene.unshiftPhase(new SelectTargetPhase(this.scene, this.fieldIndex)); this.scene.currentBattle.turnCommands[this.fieldIndex] = turnCommand; @@ -2327,13 +2329,14 @@ export class MovePhase extends BattlePhase { showMoveText(): void { if (this.move.getMove().getAttrs(ChargeAttr).length) { - this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500); const lastMove = this.pokemon.getLastXMoves() as TurnMove[]; - if (!lastMove.length || lastMove[0].move !== this.move.getMove().id || lastMove[0].result !== MoveResult.OTHER) + if (!lastMove.length || lastMove[0].move !== this.move.getMove().id || lastMove[0].result !== MoveResult.OTHER){ + this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500); return; + } } - if (this.pokemon.getTag(BattlerTagType.RECHARGING|| BattlerTagType.INTERRUPTED)) + if (this.pokemon.getTag(BattlerTagType.RECHARGING || BattlerTagType.INTERRUPTED)) return; this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500); From bc319a8eda6807501befcd2c756dbb4579024d82 Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Sat, 4 May 2024 00:27:20 +1000 Subject: [PATCH 086/110] Fix eggs during dailies --- src/system/game-data.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/system/game-data.ts b/src/system/game-data.ts index b7495a1eac9..6410c52a2b8 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -1060,7 +1060,7 @@ export class GameData { this.gameStats.shinyPokemonHatched++; } - if (!hasPrevolution && (!pokemon.scene.gameMode.isDaily || hasNewAttr)) + if (!hasPrevolution && (!pokemon.scene.gameMode.isDaily || hasNewAttr || fromEgg)) this.addStarterCandy(species, (1 * (pokemon.isShiny() ? 5 * Math.pow(2, pokemon.variant || 0) : 1)) * (fromEgg || pokemon.isBoss() ? 2 : 1)); } From e082dd90892342669670b9d6c2b6a843b9a624d3 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Fri, 3 May 2024 16:51:00 +0200 Subject: [PATCH 087/110] Minor correction to apostrophes in French menu-ui-handler.ts (#415) --- src/locales/fr/menu-ui-handler.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/fr/menu-ui-handler.ts b/src/locales/fr/menu-ui-handler.ts index 684a8cc07ba..54328a05eb1 100644 --- a/src/locales/fr/menu-ui-handler.ts +++ b/src/locales/fr/menu-ui-handler.ts @@ -13,9 +13,9 @@ export const menuUiHandler: SimpleTranslationEntries = { "LOG_OUT": "Déconnexion", "slot": "Emplacement {{slotNumber}}", "importSession": "Importer session", - "importSlotSelect": "Sélectionnez l'emplacement vers lequel importer les données.", + "importSlotSelect": "Sélectionnez l’emplacement vers lequel importer les données.", "exportSession": "Exporter session", - "exportSlotSelect": "Sélectionnez l'emplacement depuis lequel exporter les données.", + "exportSlotSelect": "Sélectionnez l’emplacement depuis lequel exporter les données.", "importData": "Importer données", "exportData": "Exporter données", "cancel": "Retour", From c7c4deb416413e0077c5830a78dd47001d5f4bad Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Sat, 4 May 2024 01:56:13 +1000 Subject: [PATCH 088/110] Implement Sniper --- src/data/ability.ts | 23 ++++++++++++++++++++++- src/field/pokemon.ts | 7 ++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 7c350f025be..a0f85e2fd5e 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -1609,6 +1609,27 @@ export class BonusCritAbAttr extends AbAttr { } } +export class MultCritAbAttr extends AbAttr { + public multAmount: number; + + constructor(multAmount: number) { + super(true); + + this.multAmount = multAmount; + } + + apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { + const critMult = args[0] as Utils.NumberHolder; + if (critMult.value > 1){ + critMult.value *= this.multAmount; + return true; + } + + return false; + } +} + + export class BlockNonDirectDamageAbAttr extends AbAttr { apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { cancelled.value = true; @@ -2776,7 +2797,7 @@ export function initAbilities() { .attr(MoveTypeChangeAttr, Type.NORMAL, 1.2, (user, target, move) => move.id !== Moves.HIDDEN_POWER && move.id !== Moves.WEATHER_BALL && move.id !== Moves.NATURAL_GIFT && move.id !== Moves.JUDGMENT && move.id !== Moves.TECHNO_BLAST), new Ability(Abilities.SNIPER, 4) - .unimplemented(), + .attr(MultCritAbAttr, 1.5), new Ability(Abilities.MAGIC_GUARD, 4) .attr(BlockNonDirectDamageAbAttr), new Ability(Abilities.NO_GUARD, 4) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index bc51323075b..909d255eef8 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -27,7 +27,7 @@ import { TempBattleStat } from '../data/temp-battle-stat'; import { ArenaTagSide, WeakenMoveScreenTag, WeakenMoveTypeTag } from '../data/arena-tag'; import { ArenaTagType } from "../data/enums/arena-tag-type"; import { Biome } from "../data/enums/biome"; -import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, FieldVariableMovePowerAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, MoveTypeChangeAttr, NonSuperEffectiveImmunityAbAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, VariableMoveTypeAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPostDefendAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr } from '../data/ability'; +import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, FieldVariableMovePowerAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, MoveTypeChangeAttr, NonSuperEffectiveImmunityAbAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, VariableMoveTypeAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPostDefendAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr } from '../data/ability'; import { Abilities } from "#app/data/enums/abilities"; import PokemonData from '../system/pokemon-data'; import Battle, { BattlerIndex } from '../battle'; @@ -1332,7 +1332,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const sourceAtk = new Utils.IntegerHolder(source.getBattleStat(isPhysical ? Stat.ATK : Stat.SPATK, this, null, isCritical)); const targetDef = new Utils.IntegerHolder(this.getBattleStat(isPhysical ? Stat.DEF : Stat.SPDEF, source, move, isCritical)); - const criticalMultiplier = isCritical ? 1.5 : 1; + const criticalMultiplier = new Utils.NumberHolder(isCritical ? 1.5 : 1); + applyAbAttrs(MultCritAbAttr, source, null, criticalMultiplier); const screenMultiplier = new Utils.NumberHolder(1); if (!isCritical) { this.scene.arena.applyTagsForSide(WeakenMoveScreenTag, this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, move.category, this.scene.currentBattle.double, screenMultiplier); @@ -1355,7 +1356,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyMoveAttrs(VariableDefAttr, source, this, move, targetDef); if (!isTypeImmune) { - damage.value = Math.ceil(((((2 * source.level / 5 + 2) * power.value * sourceAtk.value / targetDef.value) / 50) + 2) * stabMultiplier.value * typeMultiplier.value * arenaAttackTypeMultiplier * screenMultiplier.value * ((this.scene.randBattleSeedInt(15) + 85) / 100) * criticalMultiplier); + damage.value = Math.ceil(((((2 * source.level / 5 + 2) * power.value * sourceAtk.value / targetDef.value) / 50) + 2) * stabMultiplier.value * typeMultiplier.value * arenaAttackTypeMultiplier * screenMultiplier.value * ((this.scene.randBattleSeedInt(15) + 85) / 100) * criticalMultiplier.value); if (isPhysical && source.status && source.status.effect === StatusEffect.BURN) { const burnDamageReductionCancelled = new Utils.BooleanHolder(false); applyAbAttrs(BypassBurnDamageReductionAbAttr, source, burnDamageReductionCancelled); From c44ec421b08b7c193c67e3d57c8e30fb9f9a4c95 Mon Sep 17 00:00:00 2001 From: Dario Krause Date: Fri, 3 May 2024 16:49:26 +0200 Subject: [PATCH 089/110] Update pokemon.ts --- src/locales/de/pokemon.ts | 354 +++++++++++++++++++------------------- 1 file changed, 177 insertions(+), 177 deletions(-) diff --git a/src/locales/de/pokemon.ts b/src/locales/de/pokemon.ts index db92ccc5c18..9efecb819cd 100644 --- a/src/locales/de/pokemon.ts +++ b/src/locales/de/pokemon.ts @@ -605,208 +605,208 @@ export const pokemon: SimpleTranslationEntries = { "tynamo": "Zapplardin", "eelektrik": "Zapplalek", "eelektross": "Zapplarang", - "elgyem": "Elgyem", - "beheeyem": "Beheeyem", - "litwick": "Litwick", - "lampent": "Lampent", - "chandelure": "Chandelure", - "axew": "Axew", - "fraxure": "Fraxure", - "haxorus": "Haxorus", - "cubchoo": "Cubchoo", - "beartic": "Beartic", - "cryogonal": "Cryogonal", - "shelmet": "Shelmet", - "accelgor": "Accelgor", - "stunfisk": "Stunfisk", - "mienfoo": "Mienfoo", - "mienshao": "Mienshao", - "druddigon": "Druddigon", - "golett": "Golett", - "golurk": "Golurk", - "pawniard": "Pawniard", - "bisharp": "Bisharp", - "bouffalant": "Bouffalant", - "rufflet": "Rufflet", - "braviary": "Braviary", - "vullaby": "Vullaby", - "mandibuzz": "Mandibuzz", - "heatmor": "Heatmor", - "durant": "Durant", - "deino": "Deino", - "zweilous": "Zweilous", - "hydreigon": "Hydreigon", - "larvesta": "Larvesta", - "volcarona": "Volcarona", - "cobalion": "Cobalion", - "terrakion": "Terrakion", - "virizion": "Virizion", - "tornadus": "Tornadus", - "thundurus": "Thundurus", + "elgyem": "Pygraulon", + "beheeyem": "Megalon", + "litwick": "Lichtel", + "lampent": "Laternecto", + "chandelure": "Skelabra", + "axew": "Milza", + "fraxure": "Scharfax", + "haxorus": "Maxax", + "cubchoo": "Petznief", + "beartic": "Siberio", + "cryogonal": "Frigometri", + "shelmet": "Schnuthelm", + "accelgor": "Hydragil", + "stunfisk": "Flunschlik", + "mienfoo": "Lin-Fu", + "mienshao": "Wie-Shu", + "druddigon": "Shardrago", + "golett": "Golbit", + "golurk": "Golgantes", + "pawniard": "Gladiantri", + "bisharp": "Ceasurio", + "bouffalant": "Bisofank", + "rufflet": "Geronimatz", + "braviary": "Washakwil", + "vullaby": "Skallyk", + "mandibuzz": "Grypheldis", + "heatmor": "Furnifraß", + "durant": "Fermicula", + "deino": "Kapuno", + "zweilous": "Duodino", + "hydreigon": "Trikephalo", + "larvesta": "Ignivor", + "volcarona": "Ramoth", + "cobalion": "Kobalium", + "terrakion": "Terrakium", + "virizion": "Viridium", + "tornadus": "Boreos", + "thundurus": "Voltolos", "reshiram": "Reshiram", "zekrom": "Zekrom", - "landorus": "Landorus", + "landorus": "Dementeros", "kyurem": "Kyurem", "keldeo": "Keldeo", "meloetta": "Meloetta", "genesect": "Genesect", - "chespin": "Chespin", - "quilladin": "Quilladin", - "chesnaught": "Chesnaught", - "fennekin": "Fennekin", - "braixen": "Braixen", - "delphox": "Delphox", - "froakie": "Froakie", - "frogadier": "Frogadier", - "greninja": "Greninja", - "bunnelby": "Bunnelby", - "diggersby": "Diggersby", - "fletchling": "Fletchling", - "fletchinder": "Fletchinder", - "talonflame": "Talonflame", - "scatterbug": "Scatterbug", - "spewpa": "Spewpa", + "chespin": "Igamaro", + "quilladin": "Igastarnish", + "chesnaught": "Brigaron", + "fennekin": "Fynx", + "braixen": "Rutena", + "delphox": "Fennexis", + "froakie": "Froxy", + "frogadier": "Amphizel", + "greninja": "Quajutsu", + "bunnelby": "Scoppel", + "diggersby": "Grebbit", + "fletchling": "Dartiri", + "fletchinder": "Dartignis", + "talonflame": "Fiaro", + "scatterbug": "Purmel", + "spewpa": "Puponcho", "vivillon": "Vivillon", - "litleo": "Litleo", - "pyroar": "Pyroar", + "litleo": "Leufeo", + "pyroar": "Pyroleo", "flabebe": "Flabébé", "floette": "Floette", "florges": "Florges", - "skiddo": "Skiddo", - "gogoat": "Gogoat", - "pancham": "Pancham", - "pangoro": "Pangoro", - "furfrou": "Furfrou", - "espurr": "Espurr", - "meowstic": "Meowstic", - "honedge": "Honedge", - "doublade": "Doublade", - "aegislash": "Aegislash", - "spritzee": "Spritzee", - "aromatisse": "Aromatisse", - "swirlix": "Swirlix", - "slurpuff": "Slurpuff", - "inkay": "Inkay", - "malamar": "Malamar", - "binacle": "Binacle", - "barbaracle": "Barbaracle", - "skrelp": "Skrelp", - "dragalge": "Dragalge", - "clauncher": "Clauncher", - "clawitzer": "Clawitzer", - "helioptile": "Helioptile", - "heliolisk": "Heliolisk", - "tyrunt": "Tyrunt", - "tyrantrum": "Tyrantrum", - "amaura": "Amaura", - "aurorus": "Aurorus", - "sylveon": "Sylveon", - "hawlucha": "Hawlucha", + "skiddo": "Mähikel", + "gogoat": "Chevrumm", + "pancham": "Pam-Pam", + "pangoro": "Pandrago", + "furfrou": "Coiffwaff", + "espurr": "Psiau", + "meowstic": "Psiaugon", + "honedge": "Gramokles", + "doublade": "Duokles", + "aegislash": "Durengard", + "spritzee": "Parfi", + "aromatisse": "Parfinesse", + "swirlix": "Flauschling", + "slurpuff": "Sabbaione", + "inkay": "Iscalar", + "malamar": "Calamanero", + "binacle": "Bithora", + "barbaracle": "Thanathora", + "skrelp": "Algitt", + "dragalge": "Tandrak", + "clauncher": "Scampisto", + "clawitzer": "Wummer", + "helioptile": "Eguana", + "heliolisk": "Elezard", + "tyrunt": "Balgoras", + "tyrantrum": "Monargoras", + "amaura": "Amarino", + "aurorus": "Amagarga", + "sylveon": "Feelinara", + "hawlucha": "Resladero", "dedenne": "Dedenne", - "carbink": "Carbink", - "goomy": "Goomy", - "sliggoo": "Sliggoo", - "goodra": "Goodra", - "klefki": "Klefki", - "phantump": "Phantump", - "trevenant": "Trevenant", - "pumpkaboo": "Pumpkaboo", - "gourgeist": "Gourgeist", - "bergmite": "Bergmite", - "avalugg": "Avalugg", - "noibat": "Noibat", - "noivern": "Noivern", + "carbink": "Rocara", + "goomy": "Viscora", + "sliggoo": "Viscargot", + "goodra": "Viscogon", + "klefki": "Clavion", + "phantump": "Paragoni", + "trevenant": "Trombork", + "pumpkaboo": "Irrbis", + "gourgeist": "Pumpdjinn", + "bergmite": "Arktip", + "avalugg": "Arktilas", + "noibat": "eF-eM", + "noivern": "UHaFnir", "xerneas": "Xerneas", "yveltal": "Yveltal", "zygarde": "Zygarde", "diancie": "Diancie", "hoopa": "Hoopa", "volcanion": "Volcanion", - "rowlet": "Rowlet", - "dartrix": "Dartrix", - "decidueye": "Decidueye", - "litten": "Litten", - "torracat": "Torracat", - "incineroar": "Incineroar", - "popplio": "Popplio", - "brionne": "Brionne", - "primarina": "Primarina", - "pikipek": "Pikipek", - "trumbeak": "Trumbeak", - "toucannon": "Toucannon", - "yungoos": "Yungoos", - "gumshoos": "Gumshoos", - "grubbin": "Grubbin", - "charjabug": "Charjabug", - "vikavolt": "Vikavolt", - "crabrawler": "Crabrawler", - "crabominable": "Crabominable", - "oricorio": "Oricorio", - "cutiefly": "Cutiefly", - "ribombee": "Ribombee", - "rockruff": "Rockruff", - "lycanroc": "Lycanroc", - "wishiwashi": "Wishiwashi", - "mareanie": "Mareanie", - "toxapex": "Toxapex", - "mudbray": "Mudbray", - "mudsdale": "Mudsdale", - "dewpider": "Dewpider", - "araquanid": "Araquanid", - "fomantis": "Fomantis", - "lurantis": "Lurantis", - "morelull": "Morelull", - "shiinotic": "Shiinotic", - "salandit": "Salandit", - "salazzle": "Salazzle", - "stufful": "Stufful", - "bewear": "Bewear", - "bounsweet": "Bounsweet", - "steenee": "Steenee", - "tsareena": "Tsareena", - "comfey": "Comfey", - "oranguru": "Oranguru", - "passimian": "Passimian", - "wimpod": "Wimpod", - "golisopod": "Golisopod", - "sandygast": "Sandygast", - "palossand": "Palossand", - "pyukumuku": "Pyukumuku", - "type_null": "Type: Null", - "silvally": "Silvally", - "minior": "Minior", - "komala": "Komala", + "rowlet": "Bauz", + "dartrix": "Arboretoss", + "decidueye": "Silvarro", + "litten": "Flamiau", + "torracat": "Miezunder", + "incineroar": "Fuegro", + "popplio": "Robball", + "brionne": "Marikeck", + "primarina": "Primarene", + "pikipek": "Peppeck", + "trumbeak": "Trompeck", + "toucannon": "Tukanon", + "yungoos": "Mangunior", + "gumshoos": "Manguspektor", + "grubbin": "Mabula", + "charjabug": "Akkup", + "vikavolt": "Donarion", + "crabrawler": "Krabbox", + "crabominable": "Krawell", + "oricorio": "Choreogel", + "cutiefly": "Wommel", + "ribombee": "Bandelby", + "rockruff": "Wuffels", + "lycanroc": "Wolwerock", + "wishiwashi": "Lusardin", + "mareanie": "Garstella", + "toxapex": "Aggrostella", + "mudbray": "Pampuli", + "mudsdale": "Pampross", + "dewpider": "Araqua", + "araquanid": "Aranestro", + "fomantis": "Imantis", + "lurantis": "Mantidea", + "morelull": "Bubungus", + "shiinotic": "Lamellus", + "salandit": "Molunk", + "salazzle": "Amfira", + "stufful": "Velursi", + "bewear": "Kosturso", + "bounsweet": "Frubberl", + "steenee": "Frubaila", + "tsareena": "Fruyal", + "comfey": "Curelei", + "oranguru": "Kommandutan", + "passimian": "Quartermak", + "wimpod": "Reißlaus", + "golisopod": "Tectass", + "sandygast": "Sankabuh", + "palossand": "Colossand", + "pyukumuku": "Gufa", + "type_null": "Typ:Null", + "silvally": "Amigento", + "minior": "Meteno", + "komala": "Koalelu", "turtonator": "Turtonator", "togedemaru": "Togedemaru", - "mimikyu": "Mimikyu", - "bruxish": "Bruxish", - "drampa": "Drampa", - "dhelmise": "Dhelmise", - "jangmo_o": "Jangmo-o", - "hakamo_o": "Hakamo-o", - "kommo_o": "Kommo-o", - "tapu_koko": "Tapu Koko", - "tapu_lele": "Tapu Lele", - "tapu_bulu": "Tapu Bulu", - "tapu_fini": "Tapu Fini", + "mimikyu": "Mimigma", + "bruxish": "Knirfish", + "drampa": "Sen-Long", + "dhelmise": "Moruda", + "jangmo_o": "Miniras", + "hakamo_o": "Mediras", + "kommo_o": "Grandiras", + "tapu_koko": "Kapu-Riki", + "tapu_lele": "Kapu-Fala", + "tapu_bulu": "Kapu-Toro", + "tapu_fini": "Kapu-Kime", "cosmog": "Cosmog", - "cosmoem": "Cosmoem", + "cosmoem": "Cosmovum", "solgaleo": "Solgaleo", "lunala": "Lunala", - "nihilego": "Nihilego", - "buzzwole": "Buzzwole", - "pheromosa": "Pheromosa", - "xurkitree": "Xurkitree", - "celesteela": "Celesteela", - "kartana": "Kartana", - "guzzlord": "Guzzlord", + "nihilego": "Anego", + "buzzwole": "Masskito", + "pheromosa": "Schabelle", + "xurkitree": "Voltriant", + "celesteela": "Kaguron", + "kartana": "Katagami", + "guzzlord": "Schlingking", "necrozma": "Necrozma", "magearna": "Magearna", "marshadow": "Marshadow", - "poipole": "Poipole", - "naganadel": "Naganadel", - "stakataka": "Stakataka", - "blacephalon": "Blacephalon", + "poipole": "Venicro", + "naganadel": "Agoyon", + "stakataka": "Muramura", + "blacephalon": "Kopplosio", "zeraora": "Zeraora", "meltan": "Meltan", "melmetal": "Melmetal", From 70324c415955477a3f569a5c342df4561537da56 Mon Sep 17 00:00:00 2001 From: Greenlamp2 <44787002+Greenlamp2@users.noreply.github.com> Date: Fri, 3 May 2024 18:59:10 +0200 Subject: [PATCH 090/110] Rework - Inputs management to include all gamepad mapping (#390) * rework of the input handling, including different gamepad and keyboard * rework of the input handling, including different gamepad and keyboard * first version of a too complex inputHandler based on phaser3-merged-input * removed useless control management and kept it simple for our use case, investigating to put out button_XX() * renamed inputHandler to inputController * aggregate directions and some action into a same method + fix menu return value * added back repeated input feature on keeping down a key * cleanup + return type * fix submit/action doing two things simultaneously, still same behaviour as before * extracted UI inputs out of battle-scene * tab -> spaces * tab -> spaces what about now github ? --- src/battle-scene.ts | 272 +-------------------- src/configs/pad_dualshock.ts | 29 +++ src/configs/pad_generic.ts | 27 ++ src/configs/pad_unlicensedSNES.ts | 23 ++ src/configs/pad_xbox360.ts | 28 +++ src/inputs-controller.ts | 266 ++++++++++++++++++++ src/ui-inputs.ts | 159 ++++++++++++ src/ui/abstact-option-select-ui-handler.ts | 3 +- src/ui/achvs-ui-handler.ts | 3 +- src/ui/awaitable-ui-handler.ts | 3 +- src/ui/ball-ui-handler.ts | 3 +- src/ui/battle-message-ui-handler.ts | 3 +- src/ui/command-ui-handler.ts | 3 +- src/ui/confirm-ui-handler.ts | 3 +- src/ui/egg-gacha-ui-handler.ts | 3 +- src/ui/egg-hatch-scene-handler.ts | 3 +- src/ui/egg-list-ui-handler.ts | 3 +- src/ui/evolution-scene-handler.ts | 3 +- src/ui/fight-ui-handler.ts | 3 +- src/ui/form-modal-ui-handler.ts | 3 +- src/ui/game-stats-ui-handler.ts | 3 +- src/ui/menu-ui-handler.ts | 3 +- src/ui/modal-ui-handler.ts | 3 +- src/ui/modifier-select-ui-handler.ts | 3 +- src/ui/party-ui-handler.ts | 3 +- src/ui/save-slot-select-ui-handler.ts | 3 +- src/ui/settings-ui-handler.ts | 3 +- src/ui/starter-select-ui-handler.ts | 3 +- src/ui/summary-ui-handler.ts | 3 +- src/ui/target-select-ui-handler.ts | 3 +- src/ui/ui-handler.ts | 3 +- src/ui/ui.ts | 3 +- src/ui/vouchers-ui-handler.ts | 3 +- 33 files changed, 593 insertions(+), 289 deletions(-) create mode 100644 src/configs/pad_dualshock.ts create mode 100644 src/configs/pad_generic.ts create mode 100644 src/configs/pad_unlicensedSNES.ts create mode 100644 src/configs/pad_xbox360.ts create mode 100644 src/inputs-controller.ts create mode 100644 src/ui-inputs.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index cbf363f689a..f6e5a9c5948 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1,4 +1,4 @@ -import Phaser, { Time } from 'phaser'; +import Phaser from 'phaser'; import UI, { Mode } from './ui/ui'; import { NextEncounterPhase, NewBiomeEncounterPhase, SelectBiomePhase, MessagePhase, TurnInitPhase, ReturnPhase, LevelCapPhase, ShowTrainerPhase, LoginPhase, MovePhase, TitlePhase, SwitchPhase } from './phases'; import Pokemon, { PlayerPokemon, EnemyPokemon } from './field/pokemon'; @@ -54,13 +54,14 @@ import CharSprite from './ui/char-sprite'; import DamageNumberHandler from './field/damage-number-handler'; import PokemonInfoContainer from './ui/pokemon-info-container'; import { biomeDepths } from './data/biomes'; -import { initTouchControls } from './touch-controls'; import { UiTheme } from './enums/ui-theme'; import { SceneBase } from './scene-base'; import CandyBar from './ui/candy-bar'; import { Variant, variantData } from './data/variant'; import { Localizable } from './plugins/i18n'; import { STARTING_WAVE_OVERRIDE, OPP_SPECIES_OVERRIDE, SEED_OVERRIDE, STARTING_BIOME_OVERRIDE } from './overrides'; +import {InputsController} from "./inputs-controller"; +import {UiInputs} from "./ui-inputs"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; @@ -69,33 +70,12 @@ const DEBUG_RNG = false; export const startingWave = STARTING_WAVE_OVERRIDE || 1; const expSpriteKeys: string[] = []; -const repeatInputDelayMillis = 250; export let starterColors: StarterColors; interface StarterColors { [key: string]: [string, string] } -export enum Button { - UP, - DOWN, - LEFT, - RIGHT, - SUBMIT, - ACTION, - CANCEL, - MENU, - STATS, - CYCLE_SHINY, - CYCLE_FORM, - CYCLE_GENDER, - CYCLE_ABILITY, - CYCLE_NATURE, - CYCLE_VARIANT, - SPEED_UP, - SLOW_DOWN -} - export interface PokeballCounts { [pb: string]: integer; } @@ -104,6 +84,8 @@ export type AnySound = Phaser.Sound.WebAudioSound | Phaser.Sound.HTML5AudioSound export default class BattleScene extends SceneBase { public rexUI: UIPlugin; + public inputController: InputsController; + public uiInputs: UiInputs; public sessionPlayTime: integer = null; public masterVolume: number = 0.5; @@ -189,34 +171,6 @@ export default class BattleScene extends SceneBase { private bgmResumeTimer: Phaser.Time.TimerEvent; private bgmCache: Set = new Set(); private playTimeTimer: Phaser.Time.TimerEvent; - - private buttonKeys: Phaser.Input.Keyboard.Key[][]; - private lastProcessedButtonPressTimes: Map = new Map(); - // movementButtonLock ensures only a single movement key is firing repeated inputs - // (i.e. by holding down a button) at a time - private movementButtonLock: Button; - - // using a dualshock controller as a map - private gamepadKeyConfig = { - [Button.UP]: 12, // up - [Button.DOWN]: 13, // down - [Button.LEFT]: 14, // left - [Button.RIGHT]: 15, // right - [Button.SUBMIT]: 17, // touchpad - [Button.ACTION]: 0, // X - [Button.CANCEL]: 1, // O - [Button.MENU]: 9, // options - [Button.STATS]: 8, // share - [Button.CYCLE_SHINY]: 5, // RB - [Button.CYCLE_FORM]: 4, // LB - [Button.CYCLE_GENDER]: 6, // LT - [Button.CYCLE_ABILITY]: 7, // RT - [Button.CYCLE_NATURE]: 2, // square - [Button.CYCLE_VARIANT]: 3, // triangle - [Button.SPEED_UP]: 10, // L3 - [Button.SLOW_DOWN]: 11 // R3 - }; - public gamepadButtonStates: boolean[] = new Array(17).fill(false); public rngCounter: integer = 0; public rngSeedOverride: string = ''; @@ -246,7 +200,9 @@ export default class BattleScene extends SceneBase { this.load.atlas(key, `images/pokemon/${variant ? 'variant/' : ''}${experimental ? 'exp/' : ''}${atlasPath}.png`, `images/pokemon/${variant ? 'variant/' : ''}${experimental ? 'exp/' : ''}${atlasPath}.json`); } - async preload() { + async preload() { + this.load.scenePlugin('inputController', InputsController); + this.load.scenePlugin('uiInputs', UiInputs); if (DEBUG_RNG) { const scene = this; const originalRealInRange = Phaser.Math.RND.realInRange; @@ -260,7 +216,7 @@ export default class BattleScene extends SceneBase { return ret; }; } - + populateAnims(); await this.initVariantData(); @@ -273,8 +229,6 @@ export default class BattleScene extends SceneBase { addUiThemeOverrides(this); - this.setupControls(); - this.load.setBaseURL(); this.spritePipeline = new SpritePipeline(this.game); @@ -287,7 +241,6 @@ export default class BattleScene extends SceneBase { } update() { - this.checkInput(); this.ui?.update(); } @@ -606,42 +559,6 @@ export default class BattleScene extends SceneBase { return true; } - setupControls() { - const keyCodes = Phaser.Input.Keyboard.KeyCodes; - const keyConfig = { - [Button.UP]: [keyCodes.UP, keyCodes.W], - [Button.DOWN]: [keyCodes.DOWN, keyCodes.S], - [Button.LEFT]: [keyCodes.LEFT, keyCodes.A], - [Button.RIGHT]: [keyCodes.RIGHT, keyCodes.D], - [Button.SUBMIT]: [keyCodes.ENTER], - [Button.ACTION]: [keyCodes.SPACE, keyCodes.ENTER, keyCodes.Z], - [Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X], - [Button.MENU]: [keyCodes.ESC, keyCodes.M], - [Button.STATS]: [keyCodes.SHIFT, keyCodes.C], - [Button.CYCLE_SHINY]: [keyCodes.R], - [Button.CYCLE_FORM]: [keyCodes.F], - [Button.CYCLE_GENDER]: [keyCodes.G], - [Button.CYCLE_ABILITY]: [keyCodes.E], - [Button.CYCLE_NATURE]: [keyCodes.N], - [Button.CYCLE_VARIANT]: [keyCodes.V], - [Button.SPEED_UP]: [keyCodes.PLUS], - [Button.SLOW_DOWN]: [keyCodes.MINUS] - }; - const mobileKeyConfig = {}; - this.buttonKeys = []; - for (let b of Utils.getEnumValues(Button)) { - const keys: Phaser.Input.Keyboard.Key[] = []; - if (keyConfig.hasOwnProperty(b)) { - for (let k of keyConfig[b]) - keys.push(this.input.keyboard.addKey(k, false)); - mobileKeyConfig[Button[b]] = keys[0]; - } - this.buttonKeys[b] = keys; - } - - initTouchControls(mobileKeyConfig); - } - getParty(): PlayerPokemon[] { return this.party; } @@ -1343,177 +1260,6 @@ export default class BattleScene extends SceneBase { return biomes[Utils.randSeedInt(biomes.length)]; } - checkInput(): boolean { - let inputSuccess = false; - let vibrationLength = 0; - if (this.buttonJustPressed(Button.UP) || this.repeatInputDurationJustPassed(Button.UP)) { - inputSuccess = this.ui.processInput(Button.UP); - vibrationLength = 5; - this.setLastProcessedMovementTime(Button.UP) - } else if (this.buttonJustPressed(Button.DOWN) || this.repeatInputDurationJustPassed(Button.DOWN)) { - inputSuccess = this.ui.processInput(Button.DOWN); - vibrationLength = 5; - this.setLastProcessedMovementTime(Button.DOWN) - } else if (this.buttonJustPressed(Button.LEFT) || this.repeatInputDurationJustPassed(Button.LEFT)) { - inputSuccess = this.ui.processInput(Button.LEFT); - vibrationLength = 5; - this.setLastProcessedMovementTime(Button.LEFT) - } else if (this.buttonJustPressed(Button.RIGHT) || this.repeatInputDurationJustPassed(Button.RIGHT)) { - inputSuccess = this.ui.processInput(Button.RIGHT); - vibrationLength = 5; - this.setLastProcessedMovementTime(Button.RIGHT) - } else if (this.buttonJustPressed(Button.SUBMIT) || this.repeatInputDurationJustPassed(Button.SUBMIT)) { - inputSuccess = this.ui.processInput(Button.SUBMIT) || this.ui.processInput(Button.ACTION); - this.setLastProcessedMovementTime(Button.SUBMIT); - } else if (this.buttonJustPressed(Button.ACTION) || this.repeatInputDurationJustPassed(Button.ACTION)) { - inputSuccess = this.ui.processInput(Button.ACTION); - this.setLastProcessedMovementTime(Button.ACTION); - } else if (this.buttonJustPressed(Button.CANCEL)|| this.repeatInputDurationJustPassed(Button.CANCEL)) { - inputSuccess = this.ui.processInput(Button.CANCEL); - this.setLastProcessedMovementTime(Button.CANCEL); - } else if (this.buttonJustPressed(Button.MENU)) { - if (this.disableMenu) - return; - switch (this.ui?.getMode()) { - case Mode.MESSAGE: - if (!(this.ui.getHandler() as MessageUiHandler).pendingPrompt) - return; - case Mode.TITLE: - case Mode.COMMAND: - case Mode.FIGHT: - case Mode.BALL: - case Mode.TARGET_SELECT: - case Mode.SAVE_SLOT: - case Mode.PARTY: - case Mode.SUMMARY: - case Mode.STARTER_SELECT: - case Mode.CONFIRM: - case Mode.OPTION_SELECT: - this.ui.setOverlayMode(Mode.MENU); - inputSuccess = true; - break; - case Mode.MENU: - case Mode.SETTINGS: - case Mode.ACHIEVEMENTS: - this.ui.revertMode(); - this.playSound('select'); - inputSuccess = true; - break; - default: - return; - } - } else if (this.ui?.getHandler() instanceof StarterSelectUiHandler) { - if (this.buttonJustPressed(Button.CYCLE_SHINY)) { - inputSuccess = this.ui.processInput(Button.CYCLE_SHINY); - this.setLastProcessedMovementTime(Button.CYCLE_SHINY); - } else if (this.buttonJustPressed(Button.CYCLE_FORM)) { - inputSuccess = this.ui.processInput(Button.CYCLE_FORM); - this.setLastProcessedMovementTime(Button.CYCLE_FORM); - } else if (this.buttonJustPressed(Button.CYCLE_GENDER)) { - inputSuccess = this.ui.processInput(Button.CYCLE_GENDER); - this.setLastProcessedMovementTime(Button.CYCLE_GENDER); - } else if (this.buttonJustPressed(Button.CYCLE_ABILITY)) { - inputSuccess = this.ui.processInput(Button.CYCLE_ABILITY); - this.setLastProcessedMovementTime(Button.CYCLE_ABILITY); - } else if (this.buttonJustPressed(Button.CYCLE_NATURE)) { - inputSuccess = this.ui.processInput(Button.CYCLE_NATURE); - this.setLastProcessedMovementTime(Button.CYCLE_NATURE); - } else if (this.buttonJustPressed(Button.CYCLE_VARIANT)) { - inputSuccess = this.ui.processInput(Button.CYCLE_VARIANT); - this.setLastProcessedMovementTime(Button.CYCLE_VARIANT); - } else - return; - } else if (this.buttonJustPressed(Button.SPEED_UP)) { - if (this.gameSpeed < 5) { - this.gameData.saveSetting(Setting.Game_Speed, settingOptions[Setting.Game_Speed].indexOf(`${this.gameSpeed}x`) + 1); - if (this.ui?.getMode() === Mode.SETTINGS) - (this.ui.getHandler() as SettingsUiHandler).show([]); - } - } else if (this.buttonJustPressed(Button.SLOW_DOWN)) { - if (this.gameSpeed > 1) { - this.gameData.saveSetting(Setting.Game_Speed, Math.max(settingOptions[Setting.Game_Speed].indexOf(`${this.gameSpeed}x`) - 1, 0)); - if (this.ui?.getMode() === Mode.SETTINGS) - (this.ui.getHandler() as SettingsUiHandler).show([]); - } - } else { - let pressed = false; - if (this.ui && (this.buttonJustReleased(Button.STATS) || (pressed = this.buttonJustPressed(Button.STATS)))) { - for (let p of this.getField().filter(p => p?.isActive(true))) - p.toggleStats(pressed); - if (pressed) - this.setLastProcessedMovementTime(Button.STATS); - } else - return; - } - if (inputSuccess && this.enableVibration && typeof navigator.vibrate !== 'undefined') - navigator.vibrate(vibrationLength || 10); - } - - /** - * gamepadButtonJustDown returns true if @param button has just been pressed down - * or not. It will only return true once, until the key is released and pressed down - * again. - */ - gamepadButtonJustDown(button: Phaser.Input.Gamepad.Button): boolean { - if (!button || !this.gamepadSupport) - return false; - - let ret = false; - if (button.pressed) { - if (!this.gamepadButtonStates[button.index]) - ret = true; - this.gamepadButtonStates[button.index] = true; - } else - this.gamepadButtonStates[button.index] = false; - - return ret; - } - - buttonJustPressed(button: Button): boolean { - const gamepad = this.input.gamepad?.gamepads[0]; - return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustDown(k)) || this.gamepadButtonJustDown(gamepad?.buttons[this.gamepadKeyConfig[button]]); - } - - /** - * gamepadButtonJustUp returns true if @param button has just been released - * or not. It will only return true once, until the key is released and pressed down - * again. - */ - gamepadButtonJustUp(button: Phaser.Input.Gamepad.Button): boolean { - if (!button || !this.gamepadSupport) - return false; - - return !this.gamepadButtonStates[button.index]; - } - - buttonJustReleased(button: Button): boolean { - const gamepad = this.input.gamepad?.gamepads[0]; - return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustUp(k)) || this.gamepadButtonJustUp(gamepad?.buttons[this.gamepadKeyConfig[button]]); - } - - /** - * repeatInputDurationJustPassed returns true if @param button has been held down long - * enough to fire a repeated input. A button must claim the movementButtonLock before - * firing a repeated input - this is to prevent multiple buttons from firing repeatedly. - */ - repeatInputDurationJustPassed(button: Button): boolean { - if (this.movementButtonLock !== null && this.movementButtonLock !== button) { - return false; - } - if (this.buttonKeys[button].every(k => k.isUp) && this.gamepadButtonStates.every(b => b == false)) { - this.movementButtonLock = null; - return false; - } - if (this.time.now - this.lastProcessedButtonPressTimes.get(button) >= repeatInputDelayMillis) { - return true; - } - } - - setLastProcessedMovementTime(button: Button) { - this.lastProcessedButtonPressTimes.set(button, this.time.now); - this.movementButtonLock = button; - } - isBgmPlaying(): boolean { return this.bgm && this.bgm.isPlaying; } diff --git a/src/configs/pad_dualshock.ts b/src/configs/pad_dualshock.ts new file mode 100644 index 00000000000..4f66ff8c00a --- /dev/null +++ b/src/configs/pad_dualshock.ts @@ -0,0 +1,29 @@ +/** + * Dualshock mapping + */ +const pad_dualshock = { + padID: 'Dualshock', + padType: 'Sony', + gamepadMapping: { + RC_S: 0, + RC_E: 1, + RC_W: 2, + RC_N: 3, + START: 9, // Options + SELECT: 8, // Share + LB: 4, + RB: 5, + LT: 6, + RT: 7, + LS: 10, + RS: 11, + LC_N: 12, + LC_S: 13, + LC_W: 14, + LC_E: 15, + MENU: 16, + TOUCH: 17 + }, +}; + +export default pad_dualshock; diff --git a/src/configs/pad_generic.ts b/src/configs/pad_generic.ts new file mode 100644 index 00000000000..19b5d3df16e --- /dev/null +++ b/src/configs/pad_generic.ts @@ -0,0 +1,27 @@ +/** + * Generic pad mapping + */ +const pad_generic = { + padID: 'Generic', + padType: 'generic', + gamepadMapping: { + RC_S: 0, + RC_E: 1, + RC_W: 2, + RC_N: 3, + START: 9, + SELECT: 8, + LB: 4, + RB: 5, + LT: 6, + RT: 7, + LS: 10, + RS: 11, + LC_N: 12, + LC_S: 13, + LC_W: 14, + LC_E: 15 + }, +}; + +export default pad_generic; diff --git a/src/configs/pad_unlicensedSNES.ts b/src/configs/pad_unlicensedSNES.ts new file mode 100644 index 00000000000..ba8ee538d30 --- /dev/null +++ b/src/configs/pad_unlicensedSNES.ts @@ -0,0 +1,23 @@ +/** + * 081f-e401 - UnlicensedSNES + */ +const pad_unlicensedSNES = { + padID: '081f-e401', + padType: 'snes', + gamepadMapping : { + RC_S: 2, + RC_E: 1, + RC_W: 3, + RC_N: 0, + START: 9, + SELECT: 8, + LB: 4, + RB: 5, + LC_N: 12, + LC_S: 13, + LC_W: 14, + LC_E: 15 + } +}; + +export default pad_unlicensedSNES; diff --git a/src/configs/pad_xbox360.ts b/src/configs/pad_xbox360.ts new file mode 100644 index 00000000000..e44ebb54b64 --- /dev/null +++ b/src/configs/pad_xbox360.ts @@ -0,0 +1,28 @@ +/** + * Generic pad mapping + */ +const pad_xbox360 = { + padID: 'Xbox 360 controller (XInput STANDARD GAMEPAD)', + padType: 'xbox', + gamepadMapping: { + RC_S: 0, + RC_E: 1, + RC_W: 2, + RC_N: 3, + START: 9, + SELECT: 8, + LB: 4, + RB: 5, + LT: 6, + RT: 7, + LS: 10, + RS: 11, + LC_N: 12, + LC_S: 13, + LC_W: 14, + LC_E: 15, + MENU: 16 + }, +}; + +export default pad_xbox360; diff --git a/src/inputs-controller.ts b/src/inputs-controller.ts new file mode 100644 index 00000000000..441649a5199 --- /dev/null +++ b/src/inputs-controller.ts @@ -0,0 +1,266 @@ +import Phaser, {Time} from "phaser"; +import * as Utils from "./utils"; +import {initTouchControls} from './touch-controls'; +import pad_generic from "#app/configs/pad_generic"; +import pad_unlicensedSNES from "#app/configs/pad_unlicensedSNES"; +import pad_xbox360 from "#app/configs/pad_xbox360"; +import pad_dualshock from "#app/configs/pad_dualshock"; + + +export enum Button { + UP, + DOWN, + LEFT, + RIGHT, + SUBMIT, + ACTION, + CANCEL, + MENU, + STATS, + CYCLE_SHINY, + CYCLE_FORM, + CYCLE_GENDER, + CYCLE_ABILITY, + CYCLE_NATURE, + CYCLE_VARIANT, + SPEED_UP, + SLOW_DOWN +} + +const repeatInputDelayMillis = 250; + +export class InputsController extends Phaser.Plugins.ScenePlugin { + private game: Phaser.Game; + private buttonKeys: Phaser.Input.Keyboard.Key[][]; + private gamepads: Array = new Array(); + private scene: Phaser.Scene; + + // buttonLock ensures only a single movement key is firing repeated inputs + // (i.e. by holding down a button) at a time + private buttonLock: Button; + private interactions: Map> = new Map(); + private time: Time; + + constructor(scene: Phaser.Scene, pluginManager: Phaser.Plugins.PluginManager, pluginKey: string) { + super(scene, pluginManager, pluginKey); + this.game = pluginManager.game; + this.scene = scene; + this.time = this.scene.time; + this.buttonKeys = []; + + for (const b of Utils.getEnumValues(Button)) { + this.interactions[b] = { + pressTime: false, + isPressed: false, + } + } + // We don't want the menu key to be repeated + delete this.interactions[Button.MENU]; + } + + boot() { + this.eventEmitter = this.systems.events; + this.events = new Phaser.Events.EventEmitter(); + this.game.events.on(Phaser.Core.Events.STEP, this.update, this); + + if (typeof this.systems.input.gamepad !== 'undefined') { + this.systems.input.gamepad.on('connected', function (thisGamepad) { + this.refreshGamepads(); + this.setupGamepad(thisGamepad); + }, this); + + // Check to see if the gamepad has already been setup by the browser + this.systems.input.gamepad.refreshPads(); + if (this.systems.input.gamepad.total) { + this.refreshGamepads(); + for (const thisGamepad of this.gamepads) { + this.systems.input.gamepad.emit('connected', thisGamepad); + } + } + + this.systems.input.gamepad.on('down', this.gamepadButtonDown, this); + this.systems.input.gamepad.on('up', this.gamepadButtonUp, this); + } + + // Keyboard + this.setupKeyboardControls(); + } + + update() { + for (const b of Utils.getEnumValues(Button)) { + if (!this.interactions.hasOwnProperty(b)) continue; + if (this.repeatInputDurationJustPassed(b)) { + this.events.emit('input_down', { + controller_type: 'keyboard', + button: b, + }); + this.setLastProcessedMovementTime(b); + } + } + } + + setupGamepad(thisGamepad): void { + let gamepadID = thisGamepad.id.toLowerCase(); + const mappedPad = this.mapGamepad(gamepadID); + this.player = { + 'mapping': mappedPad.gamepadMapping, + } + } + + refreshGamepads(): void { + // Sometimes, gamepads are undefined. For some reason. + this.gamepads = this.systems.input.gamepad.gamepads.filter(function (el) { + return el != null; + }); + + for (const [index, thisGamepad] of this.gamepads.entries()) { + thisGamepad.index = index; // Overwrite the gamepad index, in case we had undefined gamepads earlier + } + } + + getActionGamepadMapping() { + const gamepadMapping = {}; + gamepadMapping[this.player.mapping.LC_N] = Button.UP; + gamepadMapping[this.player.mapping.LC_S] = Button.DOWN; + gamepadMapping[this.player.mapping.LC_W] = Button.LEFT; + gamepadMapping[this.player.mapping.LC_E] = Button.RIGHT; + gamepadMapping[this.player.mapping.TOUCH] = Button.SUBMIT; + gamepadMapping[this.player.mapping.RC_S] = Button.ACTION; + gamepadMapping[this.player.mapping.RC_E] = Button.CANCEL; + gamepadMapping[this.player.mapping.SELECT] = Button.STATS; + gamepadMapping[this.player.mapping.START] = Button.MENU; + gamepadMapping[this.player.mapping.RB] = Button.CYCLE_SHINY; + gamepadMapping[this.player.mapping.LB] = Button.CYCLE_FORM; + gamepadMapping[this.player.mapping.LT] = Button.CYCLE_GENDER; + gamepadMapping[this.player.mapping.RT] = Button.CYCLE_ABILITY; + gamepadMapping[this.player.mapping.RC_W] = Button.CYCLE_NATURE; + gamepadMapping[this.player.mapping.RC_N] = Button.CYCLE_VARIANT; + gamepadMapping[this.player.mapping.LS] = Button.SPEED_UP; + gamepadMapping[this.player.mapping.RS] = Button.SLOW_DOWN; + + return gamepadMapping; + } + + gamepadButtonDown(pad, button, value): void { + const actionMapping = this.getActionGamepadMapping(); + const buttonDown = actionMapping.hasOwnProperty(button.index) && actionMapping[button.index]; + if (buttonDown !== undefined) { + this.events.emit('input_down', { + controller_type: 'gamepad', + button: buttonDown, + }); + this.setLastProcessedMovementTime(buttonDown); + } + } + + gamepadButtonUp(pad, button, value): void { + const actionMapping = this.getActionGamepadMapping(); + const buttonUp = actionMapping.hasOwnProperty(button.index) && actionMapping[button.index]; + if (buttonUp !== undefined) { + this.events.emit('input_up', { + controller_type: 'gamepad', + button: buttonUp, + }); + this.delLastProcessedMovementTime(buttonUp); + } + } + + setupKeyboardControls(): void { + const keyCodes = Phaser.Input.Keyboard.KeyCodes; + const keyConfig = { + [Button.UP]: [keyCodes.UP, keyCodes.W], + [Button.DOWN]: [keyCodes.DOWN, keyCodes.S], + [Button.LEFT]: [keyCodes.LEFT, keyCodes.A], + [Button.RIGHT]: [keyCodes.RIGHT, keyCodes.D], + [Button.SUBMIT]: [keyCodes.ENTER], + [Button.ACTION]: [keyCodes.SPACE, keyCodes.Z], + [Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X], + [Button.MENU]: [keyCodes.ESC, keyCodes.M], + [Button.STATS]: [keyCodes.SHIFT, keyCodes.C], + [Button.CYCLE_SHINY]: [keyCodes.R], + [Button.CYCLE_FORM]: [keyCodes.F], + [Button.CYCLE_GENDER]: [keyCodes.G], + [Button.CYCLE_ABILITY]: [keyCodes.E], + [Button.CYCLE_NATURE]: [keyCodes.N], + [Button.CYCLE_VARIANT]: [keyCodes.V], + [Button.SPEED_UP]: [keyCodes.PLUS], + [Button.SLOW_DOWN]: [keyCodes.MINUS] + }; + const mobileKeyConfig = {}; + for (const b of Utils.getEnumValues(Button)) { + const keys: Phaser.Input.Keyboard.Key[] = []; + if (keyConfig.hasOwnProperty(b)) { + for (let k of keyConfig[b]) + keys.push(this.systems.input.keyboard.addKey(k, false)); + mobileKeyConfig[Button[b]] = keys[0]; + } + this.buttonKeys[b] = keys; + } + + initTouchControls(mobileKeyConfig); + this.listenInputKeyboard(); + } + + listenInputKeyboard(): void { + this.buttonKeys.forEach((row, index) => { + for (const key of row) { + key.on('down', () => { + this.events.emit('input_down', { + controller_type: 'keyboard', + button: index, + }); + this.setLastProcessedMovementTime(index); + }); + key.on('up', () => { + this.events.emit('input_up', { + controller_type: 'keyboard', + button: index, + }); + this.delLastProcessedMovementTime(index); + }); + } + }); + } + + mapGamepad(id) { + id = id.toLowerCase(); + let padConfig = pad_generic; + + if (id.includes('081f') && id.includes('e401')) { + padConfig = pad_unlicensedSNES; + } else if (id.includes('xbox') && id.includes('360')) { + padConfig = pad_xbox360; + } else if (id.includes('054c')) { + padConfig = pad_dualshock; + } + + return padConfig; + } + + /** + * repeatInputDurationJustPassed returns true if @param button has been held down long + * enough to fire a repeated input. A button must claim the buttonLock before + * firing a repeated input - this is to prevent multiple buttons from firing repeatedly. + */ + repeatInputDurationJustPassed(button: Button): boolean { + if (this.buttonLock === null || this.buttonLock !== button) { + return false; + } + if (this.time.now - this.interactions[button].pressTime >= repeatInputDelayMillis) { + this.buttonLock = null; + return true; + } + } + + setLastProcessedMovementTime(button: Button): void { + if (!this.interactions.hasOwnProperty(button)) return; + this.buttonLock = button; + this.interactions[button].pressTime = this.time.now; + } + + delLastProcessedMovementTime(button: Button): void { + if (!this.interactions.hasOwnProperty(button)) return; + this.buttonLock = null; + this.interactions[button].pressTime = null; + } +} \ No newline at end of file diff --git a/src/ui-inputs.ts b/src/ui-inputs.ts new file mode 100644 index 00000000000..bcdcc34b1fa --- /dev/null +++ b/src/ui-inputs.ts @@ -0,0 +1,159 @@ +import Phaser from "phaser"; +import UI, {Mode} from "./ui/ui"; +import {Button} from "#app/inputs-controller"; +import MessageUiHandler from "#app/ui/message-ui-handler"; +import StarterSelectUiHandler from "#app/ui/starter-select-ui-handler"; +import {Setting, settingOptions} from "#app/system/settings"; +import SettingsUiHandler from "#app/ui/settings-ui-handler"; + + +export class UiInputs extends Phaser.Plugins.ScenePlugin { + private game: Phaser.Game; + private scene: Phaser.Scene; + private events; + + constructor(scene: Phaser.Scene, pluginManager: Phaser.Plugins.PluginManager, pluginKey: string) { + super(scene, pluginManager, pluginKey); + this.game = pluginManager.game; + this.scene = scene; + this.events = this.scene.inputController.events + } + + boot() { + this.listenInputs(); + } + + listenInputs(): void { + this.events.on('input_down', (event) => { + const actions = this.getActionsKeyDown(); + if (!actions.hasOwnProperty(event.button)) return; + const [inputSuccess, vibrationLength] = actions[event.button](); + if (inputSuccess && this.scene.enableVibration && typeof navigator.vibrate !== 'undefined') + navigator.vibrate(vibrationLength); + }, this); + + this.events.on('input_up', (event) => { + const actions = this.getActionsKeyUp(); + if (!actions.hasOwnProperty(event.button)) return; + const [inputSuccess, vibrationLength] = actions[event.button](); + if (inputSuccess && this.scene.enableVibration && typeof navigator.vibrate !== 'undefined') + navigator.vibrate(vibrationLength); + }, this); + } + + getActionsKeyDown() { + const actions = {}; + actions[Button.UP] = () => this.buttonDirection(Button.UP); + actions[Button.DOWN] = () => this.buttonDirection(Button.DOWN); + actions[Button.LEFT] = () => this.buttonDirection(Button.LEFT); + actions[Button.RIGHT] = () => this.buttonDirection(Button.RIGHT); + actions[Button.SUBMIT] = () => this.buttonTouch(); + actions[Button.ACTION] = () => this.buttonAb(Button.ACTION); + actions[Button.CANCEL] = () => this.buttonAb(Button.CANCEL); + actions[Button.MENU] = () => this.buttonMenu(); + actions[Button.STATS] = () => this.buttonStats(true); + actions[Button.CYCLE_SHINY] = () => this.buttonCycleOption(Button.CYCLE_SHINY); + actions[Button.CYCLE_FORM] = () => this.buttonCycleOption(Button.CYCLE_FORM); + actions[Button.CYCLE_GENDER] = () => this.buttonCycleOption(Button.CYCLE_GENDER); + actions[Button.CYCLE_ABILITY] = () => this.buttonCycleOption(Button.CYCLE_ABILITY); + actions[Button.CYCLE_NATURE] = () => this.buttonCycleOption(Button.CYCLE_NATURE); + actions[Button.CYCLE_VARIANT] = () => this.buttonCycleOption(Button.CYCLE_VARIANT); + actions[Button.SPEED_UP] = () => this.buttonSpeedChange(); + actions[Button.SLOW_DOWN] = () => this.buttonSpeedChange(false); + return actions; + } + + getActionsKeyUp() { + const actions = {}; + actions[Button.STATS] = () => this.buttonStats(false); + return actions; + } + + buttonDirection(direction): Array { + const inputSuccess = this.scene.ui.processInput(direction); + const vibrationLength = 5; + return [inputSuccess, vibrationLength]; + } + + buttonAb(button): Array { + const inputSuccess = this.scene.ui.processInput(button); + return [inputSuccess, 0]; + } + + buttonTouch(): Array { + const inputSuccess = this.scene.ui.processInput(Button.SUBMIT) || this.scene.ui.processInput(Button.ACTION); + return [inputSuccess, 0]; + } + + buttonStats(pressed = true): Array { + if (pressed) { + for (let p of this.scene.getField().filter(p => p?.isActive(true))) + p.toggleStats(true); + } else { + for (let p of this.scene.getField().filter(p => p?.isActive(true))) + p.toggleStats(false); + } + return [true, 0]; + } + + buttonMenu(): Array { + let inputSuccess; + if (this.scene.disableMenu) + return [true, 0]; + switch (this.scene.ui?.getMode()) { + case Mode.MESSAGE: + if (!(this.scene.ui.getHandler() as MessageUiHandler).pendingPrompt) + return [true, 0]; + case Mode.TITLE: + case Mode.COMMAND: + case Mode.FIGHT: + case Mode.BALL: + case Mode.TARGET_SELECT: + case Mode.SAVE_SLOT: + case Mode.PARTY: + case Mode.SUMMARY: + case Mode.STARTER_SELECT: + case Mode.CONFIRM: + case Mode.OPTION_SELECT: + this.scene.ui.setOverlayMode(Mode.MENU); + inputSuccess = true; + break; + case Mode.MENU: + case Mode.SETTINGS: + case Mode.ACHIEVEMENTS: + this.scene.ui.revertMode(); + this.scene.playSound('select'); + inputSuccess = true; + break; + default: + return [true, 0]; + } + return [inputSuccess, 0]; + } + + buttonCycleOption(button): Array { + let inputSuccess; + if (this.scene.ui?.getHandler() instanceof StarterSelectUiHandler) { + inputSuccess = this.scene.ui.processInput(button); + } + return [inputSuccess, 0]; + } + + buttonSpeedChange(up = true): Array { + if (up) { + if (this.scene.gameSpeed < 5) { + this.scene.gameData.saveSetting(Setting.Game_Speed, settingOptions[Setting.Game_Speed].indexOf(`${this.scene.gameSpeed}x`) + 1); + if (this.scene.ui?.getMode() === Mode.SETTINGS) + (this.scene.ui.getHandler() as SettingsUiHandler).show([]); + } + return [0, 0]; + } + if (this.scene.gameSpeed > 1) { + this.scene.gameData.saveSetting(Setting.Game_Speed, Math.max(settingOptions[Setting.Game_Speed].indexOf(`${this.scene.gameSpeed}x`) - 1, 0)); + if (this.scene.ui?.getMode() === Mode.SETTINGS) + (this.scene.ui.getHandler() as SettingsUiHandler).show([]); + } + return [0, 0]; + } + +} \ No newline at end of file diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index 2f2c4face89..ac2dca03ed3 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -1,10 +1,11 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; import { argbFromRgba } from "@material/material-color-utilities"; +import {Button} from "#app/inputs-controller"; export interface OptionSelectConfig { xOffset?: number; diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index cadda64e032..778a5d5f131 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -1,9 +1,10 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Achv, achvs } from "../system/achv"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; +import {Button} from "#app/inputs-controller"; export default class AchvsUiHandler extends MessageUiHandler { private achvsContainer: Phaser.GameObjects.Container; diff --git a/src/ui/awaitable-ui-handler.ts b/src/ui/awaitable-ui-handler.ts index e8cc979e423..5d5f0b7a094 100644 --- a/src/ui/awaitable-ui-handler.ts +++ b/src/ui/awaitable-ui-handler.ts @@ -1,6 +1,7 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; +import {Button} from "#app/inputs-controller"; export default abstract class AwaitableUiHandler extends UiHandler { protected awaitingActionInput: boolean; diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index f2ebdc342a4..a4ee6c99d46 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -1,11 +1,12 @@ import { CommandPhase } from "../phases"; -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { getPokeballName } from "../data/pokeball"; import { addTextObject, TextStyle } from "./text"; import { Command } from "./command-ui-handler"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; +import {Button} from "#app/inputs-controller"; export default class BallUiHandler extends UiHandler { private pokeballSelectContainer: Phaser.GameObjects.Container; diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index 5e2cb56518f..7bba9657cd9 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "./text"; import { Mode } from "./ui"; import * as Utils from "../utils"; @@ -6,6 +6,7 @@ import MessageUiHandler from "./message-ui-handler"; import { getStatName, Stat } from "../data/pokemon-stat"; import { addWindow } from "./ui-theme"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +import {Button} from "#app/inputs-controller"; export default class BattleMessageUiHandler extends MessageUiHandler { private levelUpStatsContainer: Phaser.GameObjects.Container; diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index b8223694b4c..4c49246ebb6 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -1,10 +1,11 @@ import { CommandPhase } from "../phases"; -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { addTextObject, TextStyle } from "./text"; import PartyUiHandler, { PartyUiMode } from "./party-ui-handler"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import i18next from '../plugins/i18n'; +import {Button} from "#app/inputs-controller"; export enum Command { FIGHT = 0, diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index d9e7726d826..600a84e614d 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -1,6 +1,7 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import AbstractOptionSelectUiHandler, { OptionSelectConfig } from "./abstact-option-select-ui-handler"; import { Mode } from "./ui"; +import {Button} from "#app/inputs-controller"; export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { private switchCheck: boolean; diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index f0e32dbc2e9..0f8b999ba59 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Mode } from "./ui"; import { TextStyle, addTextObject, getEggTierTextTint } from "./text"; import MessageUiHandler from "./message-ui-handler"; @@ -9,6 +9,7 @@ import { getPokemonSpecies } from "../data/pokemon-species"; import { addWindow } from "./ui-theme"; import { Tutorial, handleTutorial } from "../tutorial"; import { EggTier } from "../data/enums/egg-type"; +import {Button} from "#app/inputs-controller"; const defaultText = 'Select a machine.'; diff --git a/src/ui/egg-hatch-scene-handler.ts b/src/ui/egg-hatch-scene-handler.ts index f841bafc268..fefd5197be2 100644 --- a/src/ui/egg-hatch-scene-handler.ts +++ b/src/ui/egg-hatch-scene-handler.ts @@ -1,7 +1,8 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { EggHatchPhase } from "../egg-hatch-phase"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; +import {Button} from "#app/inputs-controller"; export default class EggHatchSceneHandler extends UiHandler { public eggHatchContainer: Phaser.GameObjects.Container; diff --git a/src/ui/egg-list-ui-handler.ts b/src/ui/egg-list-ui-handler.ts index 7537b8deeb0..8271ee00788 100644 --- a/src/ui/egg-list-ui-handler.ts +++ b/src/ui/egg-list-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Mode } from "./ui"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler"; import { TextStyle, addTextObject } from "./text"; @@ -6,6 +6,7 @@ import MessageUiHandler from "./message-ui-handler"; import { EGG_SEED, Egg, GachaType, getEggGachaTypeDescriptor, getEggHatchWavesMessage, getEggDescriptor } from "../data/egg"; import * as Utils from "../utils"; import { addWindow } from "./ui-theme"; +import {Button} from "#app/inputs-controller"; export default class EggListUiHandler extends MessageUiHandler { private eggListContainer: Phaser.GameObjects.Container; diff --git a/src/ui/evolution-scene-handler.ts b/src/ui/evolution-scene-handler.ts index 7e0ef063ea0..21b39b593cf 100644 --- a/src/ui/evolution-scene-handler.ts +++ b/src/ui/evolution-scene-handler.ts @@ -1,7 +1,8 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; +import {Button} from "#app/inputs-controller"; export default class EvolutionSceneHandler extends MessageUiHandler { public evolutionContainer: Phaser.GameObjects.Container; diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 1a7a8bef597..b35292ebd45 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { addTextObject, TextStyle } from "./text"; import { Type } from "../data/type"; import { Command } from "./command-ui-handler"; @@ -8,6 +8,7 @@ import * as Utils from "../utils"; import { CommandPhase } from "../phases"; import { MoveCategory } from "#app/data/move.js"; import i18next from '../plugins/i18n'; +import {Button} from "#app/inputs-controller"; export default class FightUiHandler extends UiHandler { private movesContainer: Phaser.GameObjects.Container; diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index ec5f4147c58..4830bd191f9 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { ModalConfig, ModalUiHandler } from "./modal-ui-handler"; import { Mode } from "./ui"; import { TextStyle, addTextInputObject, addTextObject } from "./text"; @@ -6,6 +6,7 @@ import { WindowVariant, addWindow } from "./ui-theme"; import InputText from "phaser3-rex-plugins/plugins/inputtext"; import * as Utils from "../utils"; import i18next from '../plugins/i18n'; +import {Button} from "#app/inputs-controller"; export interface FormModalConfig extends ModalConfig { errorMessage?: string; diff --git a/src/ui/game-stats-ui-handler.ts b/src/ui/game-stats-ui-handler.ts index 00e358ff8e4..5b271159f4a 100644 --- a/src/ui/game-stats-ui-handler.ts +++ b/src/ui/game-stats-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { TextStyle, addTextObject, getTextColor } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; @@ -6,6 +6,7 @@ import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; import { DexAttr, GameData } from "../system/game-data"; import { speciesStarters } from "../data/pokemon-species"; +import {Button} from "#app/inputs-controller"; interface DisplayStat { label?: string; diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 03d93699e75..7ce5302aa0e 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button, bypassLogin } from "../battle-scene"; +import BattleScene, { bypassLogin } from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import * as Utils from "../utils"; @@ -9,6 +9,7 @@ import { OptionSelectConfig, OptionSelectItem } from "./abstact-option-select-ui import { Tutorial, handleTutorial } from "../tutorial"; import { updateUserInfo } from "../account"; import i18next from '../plugins/i18n'; +import {Button} from "#app/inputs-controller"; export enum MenuOptions { GAME_SETTINGS, diff --git a/src/ui/modal-ui-handler.ts b/src/ui/modal-ui-handler.ts index f193a3db54f..507e3292fb9 100644 --- a/src/ui/modal-ui-handler.ts +++ b/src/ui/modal-ui-handler.ts @@ -1,8 +1,9 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { WindowVariant, addWindow } from "./ui-theme"; +import {Button} from "#app/inputs-controller"; export interface ModalConfig { buttonActions: Function[]; diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index e5252e02a8f..7597503d645 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { getPlayerShopModifierTypeOptionsForWave, ModifierTypeOption } from "../modifier/modifier-type"; import { getPokeballAtlasKey, PokeballType } from "../data/pokeball"; import { addTextObject, getModifierTierTextTint, getTextColor, TextStyle } from "./text"; @@ -6,6 +6,7 @@ import AwaitableUiHandler from "./awaitable-ui-handler"; import { Mode } from "./ui"; import { LockModifierTiersModifier, PokemonHeldItemModifier } from "../modifier/modifier"; import { handleTutorial, Tutorial } from "../tutorial"; +import {Button} from "#app/inputs-controller"; export const SHOP_OPTIONS_ROW_LIMIT = 6; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 35014fa7027..29b0bb85011 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1,5 +1,5 @@ import { CommandPhase } from "../phases"; -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { PlayerPokemon, PokemonMove } from "../field/pokemon"; import { addTextObject, TextStyle } from "./text"; import { Command } from "./command-ui-handler"; @@ -16,6 +16,7 @@ import { pokemonEvolutions } from "../data/pokemon-evolutions"; import { addWindow } from "./ui-theme"; import { SpeciesFormChangeItemTrigger } from "../data/pokemon-forms"; import { getVariantTint } from "#app/data/variant"; +import {Button} from "#app/inputs-controller"; const defaultMessage = 'Choose a Pokémon.'; diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index 181b0643cb9..07a9283f7e8 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { gameModes } from "../game-mode"; import { SessionSaveData } from "../system/game-data"; import { TextStyle, addTextObject } from "./text"; @@ -8,6 +8,7 @@ import * as Utils from "../utils"; import PokemonData from "../system/pokemon-data"; import { PokemonHeldItemModifier } from "../modifier/modifier"; import MessageUiHandler from "./message-ui-handler"; +import {Button} from "#app/inputs-controller"; const sessionSlotCount = 5; diff --git a/src/ui/settings-ui-handler.ts b/src/ui/settings-ui-handler.ts index 8f43b377d21..6b1b7467d67 100644 --- a/src/ui/settings-ui-handler.ts +++ b/src/ui/settings-ui-handler.ts @@ -1,10 +1,11 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Setting, reloadSettings, settingDefaults, settingOptions } from "../system/settings"; import { hasTouchscreen, isMobile } from "../touch-controls"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; +import {Button} from "#app/inputs-controller"; export default class SettingsUiHandler extends UiHandler { private settingsContainer: Phaser.GameObjects.Container; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index f1e058b12cf..ad3e51d24a2 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button, starterColors } from "../battle-scene"; +import BattleScene, { starterColors } from "../battle-scene"; import PokemonSpecies, { allSpecies, getPokemonSpecies, getPokemonSpeciesForm, speciesStarters, starterPassiveAbilities } from "../data/pokemon-species"; import { Species } from "../data/enums/species"; import { TextStyle, addBBCodeTextObject, addTextObject } from "./text"; @@ -27,6 +27,7 @@ import { argbFromRgba } from "@material/material-color-utilities"; import { OptionSelectItem } from "./abstact-option-select-ui-handler"; import { pokemonPrevolutions } from "#app/data/pokemon-evolutions"; import { Variant, getVariantTint } from "#app/data/variant"; +import {Button} from "#app/inputs-controller"; export type StarterSelectCallback = (starters: Starter[]) => void; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index cf5eb3639fd..4b014b83778 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import * as Utils from "../utils"; @@ -17,6 +17,7 @@ import { Nature, getNatureStatMultiplier } from "../data/nature"; import { loggedInUser } from "../account"; import { PlayerGender } from "../system/game-data"; import { Variant, getVariantTint } from "#app/data/variant"; +import {Button} from "#app/inputs-controller"; enum Page { PROFILE, diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index f8a7c9d28a3..b5242e713d7 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -1,10 +1,11 @@ import { BattlerIndex } from "../battle"; -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Moves } from "../data/enums/moves"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import * as Utils from "../utils"; import { getMoveTargets } from "../data/move"; +import {Button} from "#app/inputs-controller"; export type TargetSelectCallback = (cursor: integer) => void; diff --git a/src/ui/ui-handler.ts b/src/ui/ui-handler.ts index e3c94b76467..20f34a33388 100644 --- a/src/ui/ui-handler.ts +++ b/src/ui/ui-handler.ts @@ -1,6 +1,7 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { TextStyle, getTextColor } from "./text"; import UI, { Mode } from "./ui"; +import {Button} from "#app/inputs-controller"; export default abstract class UiHandler { protected scene: BattleScene; diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 6e20b2cb8b8..0555c54193d 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -1,4 +1,4 @@ -import { Button, default as BattleScene } from '../battle-scene'; +import { default as BattleScene } from '../battle-scene'; import UiHandler from './ui-handler'; import BattleMessageUiHandler from './battle-message-ui-handler'; import CommandUiHandler from './command-ui-handler'; @@ -35,6 +35,7 @@ import SavingIconHandler from './saving-icon-handler'; import UnavailableModalUiHandler from './unavailable-modal-ui-handler'; import OutdatedModalUiHandler from './outdated-modal-ui-handler'; import SessionReloadModalUiHandler from './session-reload-modal-ui-handler'; +import {Button} from "#app/inputs-controller"; export enum Mode { MESSAGE, diff --git a/src/ui/vouchers-ui-handler.ts b/src/ui/vouchers-ui-handler.ts index 3f41cf9ae74..36926c6fa71 100644 --- a/src/ui/vouchers-ui-handler.ts +++ b/src/ui/vouchers-ui-handler.ts @@ -1,9 +1,10 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene from "../battle-scene"; import { Voucher, getVoucherTypeIcon, getVoucherTypeName, vouchers } from "../system/voucher"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; +import {Button} from "#app/inputs-controller"; const itemRows = 4; const itemCols = 17; From 9fc6bdde21dd36e297ece74c1e471f22ba5364c4 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Fri, 3 May 2024 13:04:32 -0400 Subject: [PATCH 091/110] Revert "Rework - Inputs management to include all gamepad mapping (#390)" This reverts commit 70324c415955477a3f569a5c342df4561537da56. --- src/battle-scene.ts | 272 ++++++++++++++++++++- src/configs/pad_dualshock.ts | 29 --- src/configs/pad_generic.ts | 27 -- src/configs/pad_unlicensedSNES.ts | 23 -- src/configs/pad_xbox360.ts | 28 --- src/inputs-controller.ts | 266 -------------------- src/ui-inputs.ts | 159 ------------ src/ui/abstact-option-select-ui-handler.ts | 3 +- src/ui/achvs-ui-handler.ts | 3 +- src/ui/awaitable-ui-handler.ts | 3 +- src/ui/ball-ui-handler.ts | 3 +- src/ui/battle-message-ui-handler.ts | 3 +- src/ui/command-ui-handler.ts | 3 +- src/ui/confirm-ui-handler.ts | 3 +- src/ui/egg-gacha-ui-handler.ts | 3 +- src/ui/egg-hatch-scene-handler.ts | 3 +- src/ui/egg-list-ui-handler.ts | 3 +- src/ui/evolution-scene-handler.ts | 3 +- src/ui/fight-ui-handler.ts | 3 +- src/ui/form-modal-ui-handler.ts | 3 +- src/ui/game-stats-ui-handler.ts | 3 +- src/ui/menu-ui-handler.ts | 3 +- src/ui/modal-ui-handler.ts | 3 +- src/ui/modifier-select-ui-handler.ts | 3 +- src/ui/party-ui-handler.ts | 3 +- src/ui/save-slot-select-ui-handler.ts | 3 +- src/ui/settings-ui-handler.ts | 3 +- src/ui/starter-select-ui-handler.ts | 3 +- src/ui/summary-ui-handler.ts | 3 +- src/ui/target-select-ui-handler.ts | 3 +- src/ui/ui-handler.ts | 3 +- src/ui/ui.ts | 3 +- src/ui/vouchers-ui-handler.ts | 3 +- 33 files changed, 289 insertions(+), 593 deletions(-) delete mode 100644 src/configs/pad_dualshock.ts delete mode 100644 src/configs/pad_generic.ts delete mode 100644 src/configs/pad_unlicensedSNES.ts delete mode 100644 src/configs/pad_xbox360.ts delete mode 100644 src/inputs-controller.ts delete mode 100644 src/ui-inputs.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index f6e5a9c5948..cbf363f689a 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1,4 +1,4 @@ -import Phaser from 'phaser'; +import Phaser, { Time } from 'phaser'; import UI, { Mode } from './ui/ui'; import { NextEncounterPhase, NewBiomeEncounterPhase, SelectBiomePhase, MessagePhase, TurnInitPhase, ReturnPhase, LevelCapPhase, ShowTrainerPhase, LoginPhase, MovePhase, TitlePhase, SwitchPhase } from './phases'; import Pokemon, { PlayerPokemon, EnemyPokemon } from './field/pokemon'; @@ -54,14 +54,13 @@ import CharSprite from './ui/char-sprite'; import DamageNumberHandler from './field/damage-number-handler'; import PokemonInfoContainer from './ui/pokemon-info-container'; import { biomeDepths } from './data/biomes'; +import { initTouchControls } from './touch-controls'; import { UiTheme } from './enums/ui-theme'; import { SceneBase } from './scene-base'; import CandyBar from './ui/candy-bar'; import { Variant, variantData } from './data/variant'; import { Localizable } from './plugins/i18n'; import { STARTING_WAVE_OVERRIDE, OPP_SPECIES_OVERRIDE, SEED_OVERRIDE, STARTING_BIOME_OVERRIDE } from './overrides'; -import {InputsController} from "./inputs-controller"; -import {UiInputs} from "./ui-inputs"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; @@ -70,12 +69,33 @@ const DEBUG_RNG = false; export const startingWave = STARTING_WAVE_OVERRIDE || 1; const expSpriteKeys: string[] = []; +const repeatInputDelayMillis = 250; export let starterColors: StarterColors; interface StarterColors { [key: string]: [string, string] } +export enum Button { + UP, + DOWN, + LEFT, + RIGHT, + SUBMIT, + ACTION, + CANCEL, + MENU, + STATS, + CYCLE_SHINY, + CYCLE_FORM, + CYCLE_GENDER, + CYCLE_ABILITY, + CYCLE_NATURE, + CYCLE_VARIANT, + SPEED_UP, + SLOW_DOWN +} + export interface PokeballCounts { [pb: string]: integer; } @@ -84,8 +104,6 @@ export type AnySound = Phaser.Sound.WebAudioSound | Phaser.Sound.HTML5AudioSound export default class BattleScene extends SceneBase { public rexUI: UIPlugin; - public inputController: InputsController; - public uiInputs: UiInputs; public sessionPlayTime: integer = null; public masterVolume: number = 0.5; @@ -171,6 +189,34 @@ export default class BattleScene extends SceneBase { private bgmResumeTimer: Phaser.Time.TimerEvent; private bgmCache: Set = new Set(); private playTimeTimer: Phaser.Time.TimerEvent; + + private buttonKeys: Phaser.Input.Keyboard.Key[][]; + private lastProcessedButtonPressTimes: Map = new Map(); + // movementButtonLock ensures only a single movement key is firing repeated inputs + // (i.e. by holding down a button) at a time + private movementButtonLock: Button; + + // using a dualshock controller as a map + private gamepadKeyConfig = { + [Button.UP]: 12, // up + [Button.DOWN]: 13, // down + [Button.LEFT]: 14, // left + [Button.RIGHT]: 15, // right + [Button.SUBMIT]: 17, // touchpad + [Button.ACTION]: 0, // X + [Button.CANCEL]: 1, // O + [Button.MENU]: 9, // options + [Button.STATS]: 8, // share + [Button.CYCLE_SHINY]: 5, // RB + [Button.CYCLE_FORM]: 4, // LB + [Button.CYCLE_GENDER]: 6, // LT + [Button.CYCLE_ABILITY]: 7, // RT + [Button.CYCLE_NATURE]: 2, // square + [Button.CYCLE_VARIANT]: 3, // triangle + [Button.SPEED_UP]: 10, // L3 + [Button.SLOW_DOWN]: 11 // R3 + }; + public gamepadButtonStates: boolean[] = new Array(17).fill(false); public rngCounter: integer = 0; public rngSeedOverride: string = ''; @@ -200,9 +246,7 @@ export default class BattleScene extends SceneBase { this.load.atlas(key, `images/pokemon/${variant ? 'variant/' : ''}${experimental ? 'exp/' : ''}${atlasPath}.png`, `images/pokemon/${variant ? 'variant/' : ''}${experimental ? 'exp/' : ''}${atlasPath}.json`); } - async preload() { - this.load.scenePlugin('inputController', InputsController); - this.load.scenePlugin('uiInputs', UiInputs); + async preload() { if (DEBUG_RNG) { const scene = this; const originalRealInRange = Phaser.Math.RND.realInRange; @@ -216,7 +260,7 @@ export default class BattleScene extends SceneBase { return ret; }; } - + populateAnims(); await this.initVariantData(); @@ -229,6 +273,8 @@ export default class BattleScene extends SceneBase { addUiThemeOverrides(this); + this.setupControls(); + this.load.setBaseURL(); this.spritePipeline = new SpritePipeline(this.game); @@ -241,6 +287,7 @@ export default class BattleScene extends SceneBase { } update() { + this.checkInput(); this.ui?.update(); } @@ -559,6 +606,42 @@ export default class BattleScene extends SceneBase { return true; } + setupControls() { + const keyCodes = Phaser.Input.Keyboard.KeyCodes; + const keyConfig = { + [Button.UP]: [keyCodes.UP, keyCodes.W], + [Button.DOWN]: [keyCodes.DOWN, keyCodes.S], + [Button.LEFT]: [keyCodes.LEFT, keyCodes.A], + [Button.RIGHT]: [keyCodes.RIGHT, keyCodes.D], + [Button.SUBMIT]: [keyCodes.ENTER], + [Button.ACTION]: [keyCodes.SPACE, keyCodes.ENTER, keyCodes.Z], + [Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X], + [Button.MENU]: [keyCodes.ESC, keyCodes.M], + [Button.STATS]: [keyCodes.SHIFT, keyCodes.C], + [Button.CYCLE_SHINY]: [keyCodes.R], + [Button.CYCLE_FORM]: [keyCodes.F], + [Button.CYCLE_GENDER]: [keyCodes.G], + [Button.CYCLE_ABILITY]: [keyCodes.E], + [Button.CYCLE_NATURE]: [keyCodes.N], + [Button.CYCLE_VARIANT]: [keyCodes.V], + [Button.SPEED_UP]: [keyCodes.PLUS], + [Button.SLOW_DOWN]: [keyCodes.MINUS] + }; + const mobileKeyConfig = {}; + this.buttonKeys = []; + for (let b of Utils.getEnumValues(Button)) { + const keys: Phaser.Input.Keyboard.Key[] = []; + if (keyConfig.hasOwnProperty(b)) { + for (let k of keyConfig[b]) + keys.push(this.input.keyboard.addKey(k, false)); + mobileKeyConfig[Button[b]] = keys[0]; + } + this.buttonKeys[b] = keys; + } + + initTouchControls(mobileKeyConfig); + } + getParty(): PlayerPokemon[] { return this.party; } @@ -1260,6 +1343,177 @@ export default class BattleScene extends SceneBase { return biomes[Utils.randSeedInt(biomes.length)]; } + checkInput(): boolean { + let inputSuccess = false; + let vibrationLength = 0; + if (this.buttonJustPressed(Button.UP) || this.repeatInputDurationJustPassed(Button.UP)) { + inputSuccess = this.ui.processInput(Button.UP); + vibrationLength = 5; + this.setLastProcessedMovementTime(Button.UP) + } else if (this.buttonJustPressed(Button.DOWN) || this.repeatInputDurationJustPassed(Button.DOWN)) { + inputSuccess = this.ui.processInput(Button.DOWN); + vibrationLength = 5; + this.setLastProcessedMovementTime(Button.DOWN) + } else if (this.buttonJustPressed(Button.LEFT) || this.repeatInputDurationJustPassed(Button.LEFT)) { + inputSuccess = this.ui.processInput(Button.LEFT); + vibrationLength = 5; + this.setLastProcessedMovementTime(Button.LEFT) + } else if (this.buttonJustPressed(Button.RIGHT) || this.repeatInputDurationJustPassed(Button.RIGHT)) { + inputSuccess = this.ui.processInput(Button.RIGHT); + vibrationLength = 5; + this.setLastProcessedMovementTime(Button.RIGHT) + } else if (this.buttonJustPressed(Button.SUBMIT) || this.repeatInputDurationJustPassed(Button.SUBMIT)) { + inputSuccess = this.ui.processInput(Button.SUBMIT) || this.ui.processInput(Button.ACTION); + this.setLastProcessedMovementTime(Button.SUBMIT); + } else if (this.buttonJustPressed(Button.ACTION) || this.repeatInputDurationJustPassed(Button.ACTION)) { + inputSuccess = this.ui.processInput(Button.ACTION); + this.setLastProcessedMovementTime(Button.ACTION); + } else if (this.buttonJustPressed(Button.CANCEL)|| this.repeatInputDurationJustPassed(Button.CANCEL)) { + inputSuccess = this.ui.processInput(Button.CANCEL); + this.setLastProcessedMovementTime(Button.CANCEL); + } else if (this.buttonJustPressed(Button.MENU)) { + if (this.disableMenu) + return; + switch (this.ui?.getMode()) { + case Mode.MESSAGE: + if (!(this.ui.getHandler() as MessageUiHandler).pendingPrompt) + return; + case Mode.TITLE: + case Mode.COMMAND: + case Mode.FIGHT: + case Mode.BALL: + case Mode.TARGET_SELECT: + case Mode.SAVE_SLOT: + case Mode.PARTY: + case Mode.SUMMARY: + case Mode.STARTER_SELECT: + case Mode.CONFIRM: + case Mode.OPTION_SELECT: + this.ui.setOverlayMode(Mode.MENU); + inputSuccess = true; + break; + case Mode.MENU: + case Mode.SETTINGS: + case Mode.ACHIEVEMENTS: + this.ui.revertMode(); + this.playSound('select'); + inputSuccess = true; + break; + default: + return; + } + } else if (this.ui?.getHandler() instanceof StarterSelectUiHandler) { + if (this.buttonJustPressed(Button.CYCLE_SHINY)) { + inputSuccess = this.ui.processInput(Button.CYCLE_SHINY); + this.setLastProcessedMovementTime(Button.CYCLE_SHINY); + } else if (this.buttonJustPressed(Button.CYCLE_FORM)) { + inputSuccess = this.ui.processInput(Button.CYCLE_FORM); + this.setLastProcessedMovementTime(Button.CYCLE_FORM); + } else if (this.buttonJustPressed(Button.CYCLE_GENDER)) { + inputSuccess = this.ui.processInput(Button.CYCLE_GENDER); + this.setLastProcessedMovementTime(Button.CYCLE_GENDER); + } else if (this.buttonJustPressed(Button.CYCLE_ABILITY)) { + inputSuccess = this.ui.processInput(Button.CYCLE_ABILITY); + this.setLastProcessedMovementTime(Button.CYCLE_ABILITY); + } else if (this.buttonJustPressed(Button.CYCLE_NATURE)) { + inputSuccess = this.ui.processInput(Button.CYCLE_NATURE); + this.setLastProcessedMovementTime(Button.CYCLE_NATURE); + } else if (this.buttonJustPressed(Button.CYCLE_VARIANT)) { + inputSuccess = this.ui.processInput(Button.CYCLE_VARIANT); + this.setLastProcessedMovementTime(Button.CYCLE_VARIANT); + } else + return; + } else if (this.buttonJustPressed(Button.SPEED_UP)) { + if (this.gameSpeed < 5) { + this.gameData.saveSetting(Setting.Game_Speed, settingOptions[Setting.Game_Speed].indexOf(`${this.gameSpeed}x`) + 1); + if (this.ui?.getMode() === Mode.SETTINGS) + (this.ui.getHandler() as SettingsUiHandler).show([]); + } + } else if (this.buttonJustPressed(Button.SLOW_DOWN)) { + if (this.gameSpeed > 1) { + this.gameData.saveSetting(Setting.Game_Speed, Math.max(settingOptions[Setting.Game_Speed].indexOf(`${this.gameSpeed}x`) - 1, 0)); + if (this.ui?.getMode() === Mode.SETTINGS) + (this.ui.getHandler() as SettingsUiHandler).show([]); + } + } else { + let pressed = false; + if (this.ui && (this.buttonJustReleased(Button.STATS) || (pressed = this.buttonJustPressed(Button.STATS)))) { + for (let p of this.getField().filter(p => p?.isActive(true))) + p.toggleStats(pressed); + if (pressed) + this.setLastProcessedMovementTime(Button.STATS); + } else + return; + } + if (inputSuccess && this.enableVibration && typeof navigator.vibrate !== 'undefined') + navigator.vibrate(vibrationLength || 10); + } + + /** + * gamepadButtonJustDown returns true if @param button has just been pressed down + * or not. It will only return true once, until the key is released and pressed down + * again. + */ + gamepadButtonJustDown(button: Phaser.Input.Gamepad.Button): boolean { + if (!button || !this.gamepadSupport) + return false; + + let ret = false; + if (button.pressed) { + if (!this.gamepadButtonStates[button.index]) + ret = true; + this.gamepadButtonStates[button.index] = true; + } else + this.gamepadButtonStates[button.index] = false; + + return ret; + } + + buttonJustPressed(button: Button): boolean { + const gamepad = this.input.gamepad?.gamepads[0]; + return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustDown(k)) || this.gamepadButtonJustDown(gamepad?.buttons[this.gamepadKeyConfig[button]]); + } + + /** + * gamepadButtonJustUp returns true if @param button has just been released + * or not. It will only return true once, until the key is released and pressed down + * again. + */ + gamepadButtonJustUp(button: Phaser.Input.Gamepad.Button): boolean { + if (!button || !this.gamepadSupport) + return false; + + return !this.gamepadButtonStates[button.index]; + } + + buttonJustReleased(button: Button): boolean { + const gamepad = this.input.gamepad?.gamepads[0]; + return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustUp(k)) || this.gamepadButtonJustUp(gamepad?.buttons[this.gamepadKeyConfig[button]]); + } + + /** + * repeatInputDurationJustPassed returns true if @param button has been held down long + * enough to fire a repeated input. A button must claim the movementButtonLock before + * firing a repeated input - this is to prevent multiple buttons from firing repeatedly. + */ + repeatInputDurationJustPassed(button: Button): boolean { + if (this.movementButtonLock !== null && this.movementButtonLock !== button) { + return false; + } + if (this.buttonKeys[button].every(k => k.isUp) && this.gamepadButtonStates.every(b => b == false)) { + this.movementButtonLock = null; + return false; + } + if (this.time.now - this.lastProcessedButtonPressTimes.get(button) >= repeatInputDelayMillis) { + return true; + } + } + + setLastProcessedMovementTime(button: Button) { + this.lastProcessedButtonPressTimes.set(button, this.time.now); + this.movementButtonLock = button; + } + isBgmPlaying(): boolean { return this.bgm && this.bgm.isPlaying; } diff --git a/src/configs/pad_dualshock.ts b/src/configs/pad_dualshock.ts deleted file mode 100644 index 4f66ff8c00a..00000000000 --- a/src/configs/pad_dualshock.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Dualshock mapping - */ -const pad_dualshock = { - padID: 'Dualshock', - padType: 'Sony', - gamepadMapping: { - RC_S: 0, - RC_E: 1, - RC_W: 2, - RC_N: 3, - START: 9, // Options - SELECT: 8, // Share - LB: 4, - RB: 5, - LT: 6, - RT: 7, - LS: 10, - RS: 11, - LC_N: 12, - LC_S: 13, - LC_W: 14, - LC_E: 15, - MENU: 16, - TOUCH: 17 - }, -}; - -export default pad_dualshock; diff --git a/src/configs/pad_generic.ts b/src/configs/pad_generic.ts deleted file mode 100644 index 19b5d3df16e..00000000000 --- a/src/configs/pad_generic.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Generic pad mapping - */ -const pad_generic = { - padID: 'Generic', - padType: 'generic', - gamepadMapping: { - RC_S: 0, - RC_E: 1, - RC_W: 2, - RC_N: 3, - START: 9, - SELECT: 8, - LB: 4, - RB: 5, - LT: 6, - RT: 7, - LS: 10, - RS: 11, - LC_N: 12, - LC_S: 13, - LC_W: 14, - LC_E: 15 - }, -}; - -export default pad_generic; diff --git a/src/configs/pad_unlicensedSNES.ts b/src/configs/pad_unlicensedSNES.ts deleted file mode 100644 index ba8ee538d30..00000000000 --- a/src/configs/pad_unlicensedSNES.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * 081f-e401 - UnlicensedSNES - */ -const pad_unlicensedSNES = { - padID: '081f-e401', - padType: 'snes', - gamepadMapping : { - RC_S: 2, - RC_E: 1, - RC_W: 3, - RC_N: 0, - START: 9, - SELECT: 8, - LB: 4, - RB: 5, - LC_N: 12, - LC_S: 13, - LC_W: 14, - LC_E: 15 - } -}; - -export default pad_unlicensedSNES; diff --git a/src/configs/pad_xbox360.ts b/src/configs/pad_xbox360.ts deleted file mode 100644 index e44ebb54b64..00000000000 --- a/src/configs/pad_xbox360.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Generic pad mapping - */ -const pad_xbox360 = { - padID: 'Xbox 360 controller (XInput STANDARD GAMEPAD)', - padType: 'xbox', - gamepadMapping: { - RC_S: 0, - RC_E: 1, - RC_W: 2, - RC_N: 3, - START: 9, - SELECT: 8, - LB: 4, - RB: 5, - LT: 6, - RT: 7, - LS: 10, - RS: 11, - LC_N: 12, - LC_S: 13, - LC_W: 14, - LC_E: 15, - MENU: 16 - }, -}; - -export default pad_xbox360; diff --git a/src/inputs-controller.ts b/src/inputs-controller.ts deleted file mode 100644 index 441649a5199..00000000000 --- a/src/inputs-controller.ts +++ /dev/null @@ -1,266 +0,0 @@ -import Phaser, {Time} from "phaser"; -import * as Utils from "./utils"; -import {initTouchControls} from './touch-controls'; -import pad_generic from "#app/configs/pad_generic"; -import pad_unlicensedSNES from "#app/configs/pad_unlicensedSNES"; -import pad_xbox360 from "#app/configs/pad_xbox360"; -import pad_dualshock from "#app/configs/pad_dualshock"; - - -export enum Button { - UP, - DOWN, - LEFT, - RIGHT, - SUBMIT, - ACTION, - CANCEL, - MENU, - STATS, - CYCLE_SHINY, - CYCLE_FORM, - CYCLE_GENDER, - CYCLE_ABILITY, - CYCLE_NATURE, - CYCLE_VARIANT, - SPEED_UP, - SLOW_DOWN -} - -const repeatInputDelayMillis = 250; - -export class InputsController extends Phaser.Plugins.ScenePlugin { - private game: Phaser.Game; - private buttonKeys: Phaser.Input.Keyboard.Key[][]; - private gamepads: Array = new Array(); - private scene: Phaser.Scene; - - // buttonLock ensures only a single movement key is firing repeated inputs - // (i.e. by holding down a button) at a time - private buttonLock: Button; - private interactions: Map> = new Map(); - private time: Time; - - constructor(scene: Phaser.Scene, pluginManager: Phaser.Plugins.PluginManager, pluginKey: string) { - super(scene, pluginManager, pluginKey); - this.game = pluginManager.game; - this.scene = scene; - this.time = this.scene.time; - this.buttonKeys = []; - - for (const b of Utils.getEnumValues(Button)) { - this.interactions[b] = { - pressTime: false, - isPressed: false, - } - } - // We don't want the menu key to be repeated - delete this.interactions[Button.MENU]; - } - - boot() { - this.eventEmitter = this.systems.events; - this.events = new Phaser.Events.EventEmitter(); - this.game.events.on(Phaser.Core.Events.STEP, this.update, this); - - if (typeof this.systems.input.gamepad !== 'undefined') { - this.systems.input.gamepad.on('connected', function (thisGamepad) { - this.refreshGamepads(); - this.setupGamepad(thisGamepad); - }, this); - - // Check to see if the gamepad has already been setup by the browser - this.systems.input.gamepad.refreshPads(); - if (this.systems.input.gamepad.total) { - this.refreshGamepads(); - for (const thisGamepad of this.gamepads) { - this.systems.input.gamepad.emit('connected', thisGamepad); - } - } - - this.systems.input.gamepad.on('down', this.gamepadButtonDown, this); - this.systems.input.gamepad.on('up', this.gamepadButtonUp, this); - } - - // Keyboard - this.setupKeyboardControls(); - } - - update() { - for (const b of Utils.getEnumValues(Button)) { - if (!this.interactions.hasOwnProperty(b)) continue; - if (this.repeatInputDurationJustPassed(b)) { - this.events.emit('input_down', { - controller_type: 'keyboard', - button: b, - }); - this.setLastProcessedMovementTime(b); - } - } - } - - setupGamepad(thisGamepad): void { - let gamepadID = thisGamepad.id.toLowerCase(); - const mappedPad = this.mapGamepad(gamepadID); - this.player = { - 'mapping': mappedPad.gamepadMapping, - } - } - - refreshGamepads(): void { - // Sometimes, gamepads are undefined. For some reason. - this.gamepads = this.systems.input.gamepad.gamepads.filter(function (el) { - return el != null; - }); - - for (const [index, thisGamepad] of this.gamepads.entries()) { - thisGamepad.index = index; // Overwrite the gamepad index, in case we had undefined gamepads earlier - } - } - - getActionGamepadMapping() { - const gamepadMapping = {}; - gamepadMapping[this.player.mapping.LC_N] = Button.UP; - gamepadMapping[this.player.mapping.LC_S] = Button.DOWN; - gamepadMapping[this.player.mapping.LC_W] = Button.LEFT; - gamepadMapping[this.player.mapping.LC_E] = Button.RIGHT; - gamepadMapping[this.player.mapping.TOUCH] = Button.SUBMIT; - gamepadMapping[this.player.mapping.RC_S] = Button.ACTION; - gamepadMapping[this.player.mapping.RC_E] = Button.CANCEL; - gamepadMapping[this.player.mapping.SELECT] = Button.STATS; - gamepadMapping[this.player.mapping.START] = Button.MENU; - gamepadMapping[this.player.mapping.RB] = Button.CYCLE_SHINY; - gamepadMapping[this.player.mapping.LB] = Button.CYCLE_FORM; - gamepadMapping[this.player.mapping.LT] = Button.CYCLE_GENDER; - gamepadMapping[this.player.mapping.RT] = Button.CYCLE_ABILITY; - gamepadMapping[this.player.mapping.RC_W] = Button.CYCLE_NATURE; - gamepadMapping[this.player.mapping.RC_N] = Button.CYCLE_VARIANT; - gamepadMapping[this.player.mapping.LS] = Button.SPEED_UP; - gamepadMapping[this.player.mapping.RS] = Button.SLOW_DOWN; - - return gamepadMapping; - } - - gamepadButtonDown(pad, button, value): void { - const actionMapping = this.getActionGamepadMapping(); - const buttonDown = actionMapping.hasOwnProperty(button.index) && actionMapping[button.index]; - if (buttonDown !== undefined) { - this.events.emit('input_down', { - controller_type: 'gamepad', - button: buttonDown, - }); - this.setLastProcessedMovementTime(buttonDown); - } - } - - gamepadButtonUp(pad, button, value): void { - const actionMapping = this.getActionGamepadMapping(); - const buttonUp = actionMapping.hasOwnProperty(button.index) && actionMapping[button.index]; - if (buttonUp !== undefined) { - this.events.emit('input_up', { - controller_type: 'gamepad', - button: buttonUp, - }); - this.delLastProcessedMovementTime(buttonUp); - } - } - - setupKeyboardControls(): void { - const keyCodes = Phaser.Input.Keyboard.KeyCodes; - const keyConfig = { - [Button.UP]: [keyCodes.UP, keyCodes.W], - [Button.DOWN]: [keyCodes.DOWN, keyCodes.S], - [Button.LEFT]: [keyCodes.LEFT, keyCodes.A], - [Button.RIGHT]: [keyCodes.RIGHT, keyCodes.D], - [Button.SUBMIT]: [keyCodes.ENTER], - [Button.ACTION]: [keyCodes.SPACE, keyCodes.Z], - [Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X], - [Button.MENU]: [keyCodes.ESC, keyCodes.M], - [Button.STATS]: [keyCodes.SHIFT, keyCodes.C], - [Button.CYCLE_SHINY]: [keyCodes.R], - [Button.CYCLE_FORM]: [keyCodes.F], - [Button.CYCLE_GENDER]: [keyCodes.G], - [Button.CYCLE_ABILITY]: [keyCodes.E], - [Button.CYCLE_NATURE]: [keyCodes.N], - [Button.CYCLE_VARIANT]: [keyCodes.V], - [Button.SPEED_UP]: [keyCodes.PLUS], - [Button.SLOW_DOWN]: [keyCodes.MINUS] - }; - const mobileKeyConfig = {}; - for (const b of Utils.getEnumValues(Button)) { - const keys: Phaser.Input.Keyboard.Key[] = []; - if (keyConfig.hasOwnProperty(b)) { - for (let k of keyConfig[b]) - keys.push(this.systems.input.keyboard.addKey(k, false)); - mobileKeyConfig[Button[b]] = keys[0]; - } - this.buttonKeys[b] = keys; - } - - initTouchControls(mobileKeyConfig); - this.listenInputKeyboard(); - } - - listenInputKeyboard(): void { - this.buttonKeys.forEach((row, index) => { - for (const key of row) { - key.on('down', () => { - this.events.emit('input_down', { - controller_type: 'keyboard', - button: index, - }); - this.setLastProcessedMovementTime(index); - }); - key.on('up', () => { - this.events.emit('input_up', { - controller_type: 'keyboard', - button: index, - }); - this.delLastProcessedMovementTime(index); - }); - } - }); - } - - mapGamepad(id) { - id = id.toLowerCase(); - let padConfig = pad_generic; - - if (id.includes('081f') && id.includes('e401')) { - padConfig = pad_unlicensedSNES; - } else if (id.includes('xbox') && id.includes('360')) { - padConfig = pad_xbox360; - } else if (id.includes('054c')) { - padConfig = pad_dualshock; - } - - return padConfig; - } - - /** - * repeatInputDurationJustPassed returns true if @param button has been held down long - * enough to fire a repeated input. A button must claim the buttonLock before - * firing a repeated input - this is to prevent multiple buttons from firing repeatedly. - */ - repeatInputDurationJustPassed(button: Button): boolean { - if (this.buttonLock === null || this.buttonLock !== button) { - return false; - } - if (this.time.now - this.interactions[button].pressTime >= repeatInputDelayMillis) { - this.buttonLock = null; - return true; - } - } - - setLastProcessedMovementTime(button: Button): void { - if (!this.interactions.hasOwnProperty(button)) return; - this.buttonLock = button; - this.interactions[button].pressTime = this.time.now; - } - - delLastProcessedMovementTime(button: Button): void { - if (!this.interactions.hasOwnProperty(button)) return; - this.buttonLock = null; - this.interactions[button].pressTime = null; - } -} \ No newline at end of file diff --git a/src/ui-inputs.ts b/src/ui-inputs.ts deleted file mode 100644 index bcdcc34b1fa..00000000000 --- a/src/ui-inputs.ts +++ /dev/null @@ -1,159 +0,0 @@ -import Phaser from "phaser"; -import UI, {Mode} from "./ui/ui"; -import {Button} from "#app/inputs-controller"; -import MessageUiHandler from "#app/ui/message-ui-handler"; -import StarterSelectUiHandler from "#app/ui/starter-select-ui-handler"; -import {Setting, settingOptions} from "#app/system/settings"; -import SettingsUiHandler from "#app/ui/settings-ui-handler"; - - -export class UiInputs extends Phaser.Plugins.ScenePlugin { - private game: Phaser.Game; - private scene: Phaser.Scene; - private events; - - constructor(scene: Phaser.Scene, pluginManager: Phaser.Plugins.PluginManager, pluginKey: string) { - super(scene, pluginManager, pluginKey); - this.game = pluginManager.game; - this.scene = scene; - this.events = this.scene.inputController.events - } - - boot() { - this.listenInputs(); - } - - listenInputs(): void { - this.events.on('input_down', (event) => { - const actions = this.getActionsKeyDown(); - if (!actions.hasOwnProperty(event.button)) return; - const [inputSuccess, vibrationLength] = actions[event.button](); - if (inputSuccess && this.scene.enableVibration && typeof navigator.vibrate !== 'undefined') - navigator.vibrate(vibrationLength); - }, this); - - this.events.on('input_up', (event) => { - const actions = this.getActionsKeyUp(); - if (!actions.hasOwnProperty(event.button)) return; - const [inputSuccess, vibrationLength] = actions[event.button](); - if (inputSuccess && this.scene.enableVibration && typeof navigator.vibrate !== 'undefined') - navigator.vibrate(vibrationLength); - }, this); - } - - getActionsKeyDown() { - const actions = {}; - actions[Button.UP] = () => this.buttonDirection(Button.UP); - actions[Button.DOWN] = () => this.buttonDirection(Button.DOWN); - actions[Button.LEFT] = () => this.buttonDirection(Button.LEFT); - actions[Button.RIGHT] = () => this.buttonDirection(Button.RIGHT); - actions[Button.SUBMIT] = () => this.buttonTouch(); - actions[Button.ACTION] = () => this.buttonAb(Button.ACTION); - actions[Button.CANCEL] = () => this.buttonAb(Button.CANCEL); - actions[Button.MENU] = () => this.buttonMenu(); - actions[Button.STATS] = () => this.buttonStats(true); - actions[Button.CYCLE_SHINY] = () => this.buttonCycleOption(Button.CYCLE_SHINY); - actions[Button.CYCLE_FORM] = () => this.buttonCycleOption(Button.CYCLE_FORM); - actions[Button.CYCLE_GENDER] = () => this.buttonCycleOption(Button.CYCLE_GENDER); - actions[Button.CYCLE_ABILITY] = () => this.buttonCycleOption(Button.CYCLE_ABILITY); - actions[Button.CYCLE_NATURE] = () => this.buttonCycleOption(Button.CYCLE_NATURE); - actions[Button.CYCLE_VARIANT] = () => this.buttonCycleOption(Button.CYCLE_VARIANT); - actions[Button.SPEED_UP] = () => this.buttonSpeedChange(); - actions[Button.SLOW_DOWN] = () => this.buttonSpeedChange(false); - return actions; - } - - getActionsKeyUp() { - const actions = {}; - actions[Button.STATS] = () => this.buttonStats(false); - return actions; - } - - buttonDirection(direction): Array { - const inputSuccess = this.scene.ui.processInput(direction); - const vibrationLength = 5; - return [inputSuccess, vibrationLength]; - } - - buttonAb(button): Array { - const inputSuccess = this.scene.ui.processInput(button); - return [inputSuccess, 0]; - } - - buttonTouch(): Array { - const inputSuccess = this.scene.ui.processInput(Button.SUBMIT) || this.scene.ui.processInput(Button.ACTION); - return [inputSuccess, 0]; - } - - buttonStats(pressed = true): Array { - if (pressed) { - for (let p of this.scene.getField().filter(p => p?.isActive(true))) - p.toggleStats(true); - } else { - for (let p of this.scene.getField().filter(p => p?.isActive(true))) - p.toggleStats(false); - } - return [true, 0]; - } - - buttonMenu(): Array { - let inputSuccess; - if (this.scene.disableMenu) - return [true, 0]; - switch (this.scene.ui?.getMode()) { - case Mode.MESSAGE: - if (!(this.scene.ui.getHandler() as MessageUiHandler).pendingPrompt) - return [true, 0]; - case Mode.TITLE: - case Mode.COMMAND: - case Mode.FIGHT: - case Mode.BALL: - case Mode.TARGET_SELECT: - case Mode.SAVE_SLOT: - case Mode.PARTY: - case Mode.SUMMARY: - case Mode.STARTER_SELECT: - case Mode.CONFIRM: - case Mode.OPTION_SELECT: - this.scene.ui.setOverlayMode(Mode.MENU); - inputSuccess = true; - break; - case Mode.MENU: - case Mode.SETTINGS: - case Mode.ACHIEVEMENTS: - this.scene.ui.revertMode(); - this.scene.playSound('select'); - inputSuccess = true; - break; - default: - return [true, 0]; - } - return [inputSuccess, 0]; - } - - buttonCycleOption(button): Array { - let inputSuccess; - if (this.scene.ui?.getHandler() instanceof StarterSelectUiHandler) { - inputSuccess = this.scene.ui.processInput(button); - } - return [inputSuccess, 0]; - } - - buttonSpeedChange(up = true): Array { - if (up) { - if (this.scene.gameSpeed < 5) { - this.scene.gameData.saveSetting(Setting.Game_Speed, settingOptions[Setting.Game_Speed].indexOf(`${this.scene.gameSpeed}x`) + 1); - if (this.scene.ui?.getMode() === Mode.SETTINGS) - (this.scene.ui.getHandler() as SettingsUiHandler).show([]); - } - return [0, 0]; - } - if (this.scene.gameSpeed > 1) { - this.scene.gameData.saveSetting(Setting.Game_Speed, Math.max(settingOptions[Setting.Game_Speed].indexOf(`${this.scene.gameSpeed}x`) - 1, 0)); - if (this.scene.ui?.getMode() === Mode.SETTINGS) - (this.scene.ui.getHandler() as SettingsUiHandler).show([]); - } - return [0, 0]; - } - -} \ No newline at end of file diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index ac2dca03ed3..2f2c4face89 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -1,11 +1,10 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; import { argbFromRgba } from "@material/material-color-utilities"; -import {Button} from "#app/inputs-controller"; export interface OptionSelectConfig { xOffset?: number; diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index 778a5d5f131..cadda64e032 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -1,10 +1,9 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { Achv, achvs } from "../system/achv"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; -import {Button} from "#app/inputs-controller"; export default class AchvsUiHandler extends MessageUiHandler { private achvsContainer: Phaser.GameObjects.Container; diff --git a/src/ui/awaitable-ui-handler.ts b/src/ui/awaitable-ui-handler.ts index 5d5f0b7a094..e8cc979e423 100644 --- a/src/ui/awaitable-ui-handler.ts +++ b/src/ui/awaitable-ui-handler.ts @@ -1,7 +1,6 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; -import {Button} from "#app/inputs-controller"; export default abstract class AwaitableUiHandler extends UiHandler { protected awaitingActionInput: boolean; diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index a4ee6c99d46..f2ebdc342a4 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -1,12 +1,11 @@ import { CommandPhase } from "../phases"; -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { getPokeballName } from "../data/pokeball"; import { addTextObject, TextStyle } from "./text"; import { Command } from "./command-ui-handler"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; -import {Button} from "#app/inputs-controller"; export default class BallUiHandler extends UiHandler { private pokeballSelectContainer: Phaser.GameObjects.Container; diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index 7bba9657cd9..5e2cb56518f 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "./text"; import { Mode } from "./ui"; import * as Utils from "../utils"; @@ -6,7 +6,6 @@ import MessageUiHandler from "./message-ui-handler"; import { getStatName, Stat } from "../data/pokemon-stat"; import { addWindow } from "./ui-theme"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; -import {Button} from "#app/inputs-controller"; export default class BattleMessageUiHandler extends MessageUiHandler { private levelUpStatsContainer: Phaser.GameObjects.Container; diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index 4c49246ebb6..b8223694b4c 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -1,11 +1,10 @@ import { CommandPhase } from "../phases"; -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { addTextObject, TextStyle } from "./text"; import PartyUiHandler, { PartyUiMode } from "./party-ui-handler"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import i18next from '../plugins/i18n'; -import {Button} from "#app/inputs-controller"; export enum Command { FIGHT = 0, diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index 600a84e614d..d9e7726d826 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -1,7 +1,6 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import AbstractOptionSelectUiHandler, { OptionSelectConfig } from "./abstact-option-select-ui-handler"; import { Mode } from "./ui"; -import {Button} from "#app/inputs-controller"; export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { private switchCheck: boolean; diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index 0f8b999ba59..f0e32dbc2e9 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { Mode } from "./ui"; import { TextStyle, addTextObject, getEggTierTextTint } from "./text"; import MessageUiHandler from "./message-ui-handler"; @@ -9,7 +9,6 @@ import { getPokemonSpecies } from "../data/pokemon-species"; import { addWindow } from "./ui-theme"; import { Tutorial, handleTutorial } from "../tutorial"; import { EggTier } from "../data/enums/egg-type"; -import {Button} from "#app/inputs-controller"; const defaultText = 'Select a machine.'; diff --git a/src/ui/egg-hatch-scene-handler.ts b/src/ui/egg-hatch-scene-handler.ts index fefd5197be2..f841bafc268 100644 --- a/src/ui/egg-hatch-scene-handler.ts +++ b/src/ui/egg-hatch-scene-handler.ts @@ -1,8 +1,7 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { EggHatchPhase } from "../egg-hatch-phase"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; -import {Button} from "#app/inputs-controller"; export default class EggHatchSceneHandler extends UiHandler { public eggHatchContainer: Phaser.GameObjects.Container; diff --git a/src/ui/egg-list-ui-handler.ts b/src/ui/egg-list-ui-handler.ts index 8271ee00788..7537b8deeb0 100644 --- a/src/ui/egg-list-ui-handler.ts +++ b/src/ui/egg-list-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { Mode } from "./ui"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler"; import { TextStyle, addTextObject } from "./text"; @@ -6,7 +6,6 @@ import MessageUiHandler from "./message-ui-handler"; import { EGG_SEED, Egg, GachaType, getEggGachaTypeDescriptor, getEggHatchWavesMessage, getEggDescriptor } from "../data/egg"; import * as Utils from "../utils"; import { addWindow } from "./ui-theme"; -import {Button} from "#app/inputs-controller"; export default class EggListUiHandler extends MessageUiHandler { private eggListContainer: Phaser.GameObjects.Container; diff --git a/src/ui/evolution-scene-handler.ts b/src/ui/evolution-scene-handler.ts index 21b39b593cf..7e0ef063ea0 100644 --- a/src/ui/evolution-scene-handler.ts +++ b/src/ui/evolution-scene-handler.ts @@ -1,8 +1,7 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; -import {Button} from "#app/inputs-controller"; export default class EvolutionSceneHandler extends MessageUiHandler { public evolutionContainer: Phaser.GameObjects.Container; diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index b35292ebd45..1a7a8bef597 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { addTextObject, TextStyle } from "./text"; import { Type } from "../data/type"; import { Command } from "./command-ui-handler"; @@ -8,7 +8,6 @@ import * as Utils from "../utils"; import { CommandPhase } from "../phases"; import { MoveCategory } from "#app/data/move.js"; import i18next from '../plugins/i18n'; -import {Button} from "#app/inputs-controller"; export default class FightUiHandler extends UiHandler { private movesContainer: Phaser.GameObjects.Container; diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index 4830bd191f9..ec5f4147c58 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { ModalConfig, ModalUiHandler } from "./modal-ui-handler"; import { Mode } from "./ui"; import { TextStyle, addTextInputObject, addTextObject } from "./text"; @@ -6,7 +6,6 @@ import { WindowVariant, addWindow } from "./ui-theme"; import InputText from "phaser3-rex-plugins/plugins/inputtext"; import * as Utils from "../utils"; import i18next from '../plugins/i18n'; -import {Button} from "#app/inputs-controller"; export interface FormModalConfig extends ModalConfig { errorMessage?: string; diff --git a/src/ui/game-stats-ui-handler.ts b/src/ui/game-stats-ui-handler.ts index 5b271159f4a..00e358ff8e4 100644 --- a/src/ui/game-stats-ui-handler.ts +++ b/src/ui/game-stats-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { TextStyle, addTextObject, getTextColor } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; @@ -6,7 +6,6 @@ import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; import { DexAttr, GameData } from "../system/game-data"; import { speciesStarters } from "../data/pokemon-species"; -import {Button} from "#app/inputs-controller"; interface DisplayStat { label?: string; diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 7ce5302aa0e..03d93699e75 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { bypassLogin } from "../battle-scene"; +import BattleScene, { Button, bypassLogin } from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import * as Utils from "../utils"; @@ -9,7 +9,6 @@ import { OptionSelectConfig, OptionSelectItem } from "./abstact-option-select-ui import { Tutorial, handleTutorial } from "../tutorial"; import { updateUserInfo } from "../account"; import i18next from '../plugins/i18n'; -import {Button} from "#app/inputs-controller"; export enum MenuOptions { GAME_SETTINGS, diff --git a/src/ui/modal-ui-handler.ts b/src/ui/modal-ui-handler.ts index 507e3292fb9..f193a3db54f 100644 --- a/src/ui/modal-ui-handler.ts +++ b/src/ui/modal-ui-handler.ts @@ -1,9 +1,8 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { WindowVariant, addWindow } from "./ui-theme"; -import {Button} from "#app/inputs-controller"; export interface ModalConfig { buttonActions: Function[]; diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 7597503d645..e5252e02a8f 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { getPlayerShopModifierTypeOptionsForWave, ModifierTypeOption } from "../modifier/modifier-type"; import { getPokeballAtlasKey, PokeballType } from "../data/pokeball"; import { addTextObject, getModifierTierTextTint, getTextColor, TextStyle } from "./text"; @@ -6,7 +6,6 @@ import AwaitableUiHandler from "./awaitable-ui-handler"; import { Mode } from "./ui"; import { LockModifierTiersModifier, PokemonHeldItemModifier } from "../modifier/modifier"; import { handleTutorial, Tutorial } from "../tutorial"; -import {Button} from "#app/inputs-controller"; export const SHOP_OPTIONS_ROW_LIMIT = 6; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 29b0bb85011..35014fa7027 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1,5 +1,5 @@ import { CommandPhase } from "../phases"; -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { PlayerPokemon, PokemonMove } from "../field/pokemon"; import { addTextObject, TextStyle } from "./text"; import { Command } from "./command-ui-handler"; @@ -16,7 +16,6 @@ import { pokemonEvolutions } from "../data/pokemon-evolutions"; import { addWindow } from "./ui-theme"; import { SpeciesFormChangeItemTrigger } from "../data/pokemon-forms"; import { getVariantTint } from "#app/data/variant"; -import {Button} from "#app/inputs-controller"; const defaultMessage = 'Choose a Pokémon.'; diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index 07a9283f7e8..181b0643cb9 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { gameModes } from "../game-mode"; import { SessionSaveData } from "../system/game-data"; import { TextStyle, addTextObject } from "./text"; @@ -8,7 +8,6 @@ import * as Utils from "../utils"; import PokemonData from "../system/pokemon-data"; import { PokemonHeldItemModifier } from "../modifier/modifier"; import MessageUiHandler from "./message-ui-handler"; -import {Button} from "#app/inputs-controller"; const sessionSlotCount = 5; diff --git a/src/ui/settings-ui-handler.ts b/src/ui/settings-ui-handler.ts index 6b1b7467d67..8f43b377d21 100644 --- a/src/ui/settings-ui-handler.ts +++ b/src/ui/settings-ui-handler.ts @@ -1,11 +1,10 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { Setting, reloadSettings, settingDefaults, settingOptions } from "../system/settings"; import { hasTouchscreen, isMobile } from "../touch-controls"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; -import {Button} from "#app/inputs-controller"; export default class SettingsUiHandler extends UiHandler { private settingsContainer: Phaser.GameObjects.Container; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index ad3e51d24a2..f1e058b12cf 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { starterColors } from "../battle-scene"; +import BattleScene, { Button, starterColors } from "../battle-scene"; import PokemonSpecies, { allSpecies, getPokemonSpecies, getPokemonSpeciesForm, speciesStarters, starterPassiveAbilities } from "../data/pokemon-species"; import { Species } from "../data/enums/species"; import { TextStyle, addBBCodeTextObject, addTextObject } from "./text"; @@ -27,7 +27,6 @@ import { argbFromRgba } from "@material/material-color-utilities"; import { OptionSelectItem } from "./abstact-option-select-ui-handler"; import { pokemonPrevolutions } from "#app/data/pokemon-evolutions"; import { Variant, getVariantTint } from "#app/data/variant"; -import {Button} from "#app/inputs-controller"; export type StarterSelectCallback = (starters: Starter[]) => void; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 4b014b83778..cf5eb3639fd 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import * as Utils from "../utils"; @@ -17,7 +17,6 @@ import { Nature, getNatureStatMultiplier } from "../data/nature"; import { loggedInUser } from "../account"; import { PlayerGender } from "../system/game-data"; import { Variant, getVariantTint } from "#app/data/variant"; -import {Button} from "#app/inputs-controller"; enum Page { PROFILE, diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index b5242e713d7..f8a7c9d28a3 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -1,11 +1,10 @@ import { BattlerIndex } from "../battle"; -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { Moves } from "../data/enums/moves"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import * as Utils from "../utils"; import { getMoveTargets } from "../data/move"; -import {Button} from "#app/inputs-controller"; export type TargetSelectCallback = (cursor: integer) => void; diff --git a/src/ui/ui-handler.ts b/src/ui/ui-handler.ts index 20f34a33388..e3c94b76467 100644 --- a/src/ui/ui-handler.ts +++ b/src/ui/ui-handler.ts @@ -1,7 +1,6 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { TextStyle, getTextColor } from "./text"; import UI, { Mode } from "./ui"; -import {Button} from "#app/inputs-controller"; export default abstract class UiHandler { protected scene: BattleScene; diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 0555c54193d..6e20b2cb8b8 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -1,4 +1,4 @@ -import { default as BattleScene } from '../battle-scene'; +import { Button, default as BattleScene } from '../battle-scene'; import UiHandler from './ui-handler'; import BattleMessageUiHandler from './battle-message-ui-handler'; import CommandUiHandler from './command-ui-handler'; @@ -35,7 +35,6 @@ import SavingIconHandler from './saving-icon-handler'; import UnavailableModalUiHandler from './unavailable-modal-ui-handler'; import OutdatedModalUiHandler from './outdated-modal-ui-handler'; import SessionReloadModalUiHandler from './session-reload-modal-ui-handler'; -import {Button} from "#app/inputs-controller"; export enum Mode { MESSAGE, diff --git a/src/ui/vouchers-ui-handler.ts b/src/ui/vouchers-ui-handler.ts index 36926c6fa71..3f41cf9ae74 100644 --- a/src/ui/vouchers-ui-handler.ts +++ b/src/ui/vouchers-ui-handler.ts @@ -1,10 +1,9 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { Button } from "../battle-scene"; import { Voucher, getVoucherTypeIcon, getVoucherTypeName, vouchers } from "../system/voucher"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; -import {Button} from "#app/inputs-controller"; const itemRows = 4; const itemCols = 17; From 71705dd6d40c67f6df64b80e68f0e144b4438888 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Fri, 3 May 2024 15:03:11 -0400 Subject: [PATCH 092/110] Add candy popup sound --- public/audio/se/shing.wav | Bin 0 -> 124500 bytes src/loading-scene.ts | 1 + src/ui/candy-bar.ts | 2 ++ src/ui/save-slot-select-ui-handler.ts | 2 +- 4 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 public/audio/se/shing.wav diff --git a/public/audio/se/shing.wav b/public/audio/se/shing.wav new file mode 100644 index 0000000000000000000000000000000000000000..e693cb207fca07ca996378bc42c1492516988a25 GIT binary patch literal 124500 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 literal 0 HcmV?d00001 diff --git a/src/loading-scene.ts b/src/loading-scene.ts index d0751e9a2da..05b6c9f50b1 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -223,6 +223,7 @@ export class LoadingScene extends SceneBase { this.loadSe('sparkle'); this.loadSe('restore'); this.loadSe('shine'); + this.loadSe('shing'); this.loadSe('charge'); this.loadSe('beam'); this.loadSe('upgrade'); diff --git a/src/ui/candy-bar.ts b/src/ui/candy-bar.ts index 2219e07479d..a4cc1295028 100644 --- a/src/ui/candy-bar.ts +++ b/src/ui/candy-bar.ts @@ -69,6 +69,8 @@ export default class CandyBar extends Phaser.GameObjects.Container { if (this.tween) this.tween.stop(); + (this.scene as BattleScene).playSound('shing'); + this.tween = this.scene.tweens.add({ targets: this, x: (this.scene.game.canvas.width / 6) - (this.bg.width - 5), diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index 181b0643cb9..11680cd3952 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -258,7 +258,7 @@ class SessionSlot extends Phaser.GameObjects.Container { async setupWithData(data: SessionSaveData) { this.remove(this.loadingLabel, true); - const gameModeLabel = addTextObject(this.scene, 8, 5, `${gameModes[data.gameMode].getName()} - Wave ${data.waveIndex}`, TextStyle.WINDOW); + const gameModeLabel = addTextObject(this.scene, 8, 5, `${gameModes[data.gameMode]?.getName() || 'Unknown'} - Wave ${data.waveIndex}`, TextStyle.WINDOW); this.add(gameModeLabel); const timestampLabel = addTextObject(this.scene, 8, 19, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW); From 9a559c8d6ac8e24009a0df5e0a7c1d6fb9a7e28a Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Fri, 3 May 2024 14:04:43 -0500 Subject: [PATCH 093/110] Update passive abilities for legendaries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is the first batch of passive ability revisions, this one directed at legendary and mythical Pokémon. --- src/data/pokemon-species.ts | 112 ++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index c67f0c14b47..57bb9230c5e 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -3300,7 +3300,7 @@ export const starterPassiveAbilities = { [Species.ENTEI]: Abilities.MOXIE, [Species.SUICUNE]: Abilities.UNAWARE, [Species.LARVITAR]: Abilities.SAND_FORCE, - [Species.LUGIA]: Abilities.STORM_DRAIN, + [Species.LUGIA]: Abilities.DELTA_STREAM, [Species.HO_OH]: Abilities.MAGIC_GUARD, [Species.CELEBI]: Abilities.GRASSY_SURGE, [Species.TREECKO]: Abilities.GRASSY_SURGE, @@ -3366,13 +3366,13 @@ export const starterPassiveAbilities = { [Species.LUVDISC]: Abilities.PICKUP, [Species.BAGON]: Abilities.GALE_WINGS, [Species.BELDUM]: Abilities.IRON_FIST, - [Species.REGIROCK]: Abilities.REGENERATOR, - [Species.REGICE]: Abilities.ICE_SCALES, - [Species.REGISTEEL]: Abilities.STEELY_SPIRIT, - [Species.LATIAS]: Abilities.SERENE_GRACE, - [Species.LATIOS]: Abilities.SERENE_GRACE, + [Species.REGIROCK]: Abilities.SAND_STREAM, + [Species.REGICE]: Abilities.SNOW_WARNING, + [Species.REGISTEEL]: Abilities.FILTER, + [Species.LATIAS]: Abilities.SOUL_HEART, + [Species.LATIOS]: Abilities.TINTED_LENS, [Species.KYOGRE]: Abilities.HYDRATION, - [Species.GROUDON]: Abilities.EARTH_EATER, + [Species.GROUDON]: Abilities.FLAME_BODY, [Species.RAYQUAZA]: Abilities.UNNERVE, [Species.JIRACHI]: Abilities.COMATOSE, [Species.DEOXYS]: Abilities.PROTEAN, @@ -3414,16 +3414,16 @@ export const starterPassiveAbilities = { [Species.MANTYKE]: Abilities.STORM_DRAIN, [Species.SNOVER]: Abilities.SNOW_CLOAK, [Species.ROTOM]: Abilities.HADRON_ENGINE, - [Species.UXIE]: Abilities.ILLUSION, + [Species.UXIE]: Abilities.UNAWARE, [Species.MESPRIT]: Abilities.MOODY, [Species.AZELF]: Abilities.NEUROFORCE, [Species.DIALGA]: Abilities.SPEED_BOOST, - [Species.PALKIA]: Abilities.MAGIC_BOUNCE, - [Species.HEATRAN]: Abilities.ROUGH_SKIN, + [Species.PALKIA]: Abilities.MULTISCALE, + [Species.HEATRAN]: Abilities.FILTER, [Species.REGIGIGAS]: Abilities.MINDS_EYE, - [Species.GIRATINA]: Abilities.SHADOW_TAG, + [Species.GIRATINA]: Abilities.SHADOW_SHIELD, [Species.CRESSELIA]: Abilities.MAGIC_BOUNCE, - [Species.PHIONE]: Abilities.SWIFT_SWIM, + [Species.PHIONE]: Abilities.SIMPLE, [Species.MANAPHY]: Abilities.SIMPLE, [Species.DARKRAI]: Abilities.UNNERVE, [Species.SHAYMIN]: Abilities.FLOWER_VEIL, @@ -3500,16 +3500,16 @@ export const starterPassiveAbilities = { [Species.LARVESTA]: Abilities.DROUGHT, [Species.COBALION]: Abilities.INTREPID_SWORD, [Species.TERRAKION]: Abilities.ROCKY_PAYLOAD, - [Species.VIRIZION]: Abilities.SYMBIOSIS, - [Species.TORNADUS]: Abilities.DELTA_STREAM, + [Species.VIRIZION]: Abilities.SHARPNESS, + [Species.TORNADUS]: Abilities.DRIZZLE, [Species.THUNDURUS]: Abilities.DRIZZLE, [Species.RESHIRAM]: Abilities.ORICHALCUM_PULSE, [Species.ZEKROM]: Abilities.HADRON_ENGINE, - [Species.LANDORUS]: Abilities.PRANKSTER, + [Species.LANDORUS]: Abilities.STORM_DRAIN, [Species.KYUREM]: Abilities.SNOW_WARNING, - [Species.KELDEO]: Abilities.SHARPNESS, - [Species.MELOETTA]: Abilities.PUNK_ROCK, - [Species.GENESECT]: Abilities.MEGA_LAUNCHER, + [Species.KELDEO]: Abilities.GRIM_NEIGH, + [Species.MELOETTA]: Abilities.MINDS_EYE, + [Species.GENESECT]: Abilities.REGENERATOR, [Species.CHESPIN]: Abilities.IRON_BARBS, [Species.FENNEKIN]: Abilities.MAGIC_BOUNCE, [Species.FROAKIE]: Abilities.ADAPTABILITY, @@ -3541,11 +3541,11 @@ export const starterPassiveAbilities = { [Species.PUMPKABOO]: Abilities.FLASH_FIRE, [Species.BERGMITE]: Abilities.MIRROR_ARMOR, [Species.NOIBAT]: Abilities.PUNK_ROCK, - [Species.XERNEAS]: Abilities.COMPETITIVE, - [Species.YVELTAL]: Abilities.DEFIANT, - [Species.ZYGARDE]: Abilities.REGENERATOR, - [Species.DIANCIE]: Abilities.QUEENLY_MAJESTY, - [Species.HOOPA]: Abilities.TRACE, + [Species.XERNEAS]: Abilities.MISTY_SURGE, + [Species.YVELTAL]: Abilities.SOUL_HEART, + [Species.ZYGARDE]: Abilities.HUGE_POWER, + [Species.DIANCIE]: Abilities.LEVITATE, + [Species.HOOPA]: Abilities.OPPORTUNIST, [Species.VOLCANION]: Abilities.FILTER, [Species.ROWLET]: Abilities.SNIPER, [Species.LITTEN]: Abilities.PRANKSTER, @@ -3582,26 +3582,26 @@ export const starterPassiveAbilities = { [Species.DRAMPA]: Abilities.FLASH_FIRE, [Species.DHELMISE]: Abilities.INFILTRATOR, [Species.JANGMO_O]: Abilities.DANCER, - [Species.TAPU_KOKO]: Abilities.GALVANIZE, - [Species.TAPU_LELE]: Abilities.BERSERK, - [Species.TAPU_BULU]: Abilities.FLOWER_VEIL, + [Species.TAPU_KOKO]: Abilities.TRANSISTOR, + [Species.TAPU_LELE]: Abilities.SHEER_FORCE, + [Species.TAPU_BULU]: Abilities.GRASS_PELT, [Species.TAPU_FINI]: Abilities.FAIRY_AURA, [Species.COSMOG]: Abilities.BEAST_BOOST, - [Species.NIHILEGO]: Abilities.POISON_PUPPETEER, + [Species.NIHILEGO]: Abilities.LEVITATE, [Species.BUZZWOLE]: Abilities.MOXIE, - [Species.PHEROMOSA]: Abilities.MOXIE, - [Species.XURKITREE]: Abilities.LIGHTNING_ROD, - [Species.CELESTEELA]: Abilities.CHLOROPHYLL, + [Species.PHEROMOSA]: Abilities.TINTED_LENS, + [Species.XURKITREE]: Abilities.TRANSISTOR, + [Species.CELESTEELA]: Abilities.HEATPROOF, [Species.KARTANA]: Abilities.SHARPNESS, - [Species.GUZZLORD]: Abilities.GLUTTONY, + [Species.GUZZLORD]: Abilities.INNARDS_OUT, [Species.NECROZMA]: Abilities.BEAST_BOOST, [Species.MAGEARNA]: Abilities.STEELY_SPIRIT, [Species.MARSHADOW]: Abilities.IRON_FIST, - [Species.POIPOLE]: Abilities.MERCILESS, - [Species.STAKATAKA]: Abilities.DAUNTLESS_SHIELD, + [Species.POIPOLE]: Abilities.SHEER_FORCE, + [Species.STAKATAKA]: Abilities.SOLID_ROCK, [Species.BLACEPHALON]: Abilities.MAGIC_GUARD, - [Species.ZERAORA]: Abilities.MOTOR_DRIVE, - [Species.MELTAN]: Abilities.FULL_METAL_BODY, + [Species.ZERAORA]: Abilities.TOUGH_CLAWS, + [Species.MELTAN]: Abilities.STEELY_SPIRIT, [Species.GROOKEY]: Abilities.GRASS_PELT, [Species.SCORBUNNY]: Abilities.RECKLESS, [Species.SOBBLE]: Abilities.SUPER_LUCK, @@ -3639,17 +3639,17 @@ export const starterPassiveAbilities = { [Species.ARCTOVISH]: Abilities.STRONG_JAW, [Species.DURALUDON]: Abilities.MEGA_LAUNCHER, [Species.DREEPY]: Abilities.PARENTAL_BOND, - [Species.ZACIAN]: Abilities.GUARD_DOG, - [Species.ZAMAZENTA]: Abilities.GUARD_DOG, + [Species.ZACIAN]: Abilities.UNNERVE, + [Species.ZAMAZENTA]: Abilities.STAMINA, [Species.ETERNATUS]: Abilities.SUPREME_OVERLORD, [Species.KUBFU]: Abilities.IRON_FIST, - [Species.ZARUDE]: Abilities.PRANKSTER, - [Species.REGIELEKI]: Abilities.LEVITATE, - [Species.REGIDRAGO]: Abilities.INTIMIDATE, + [Species.ZARUDE]: Abilities.GRASSY_SURGE, + [Species.REGIELEKI]: Abilities.ELECTRIC_SURGE, + [Species.REGIDRAGO]: Abilities.MULTISCALE, [Species.GLASTRIER]: Abilities.FILTER, - [Species.SPECTRIER]: Abilities.PERISH_BODY, + [Species.SPECTRIER]: Abilities.SHADOW_SHIELD, [Species.CALYREX]: Abilities.HARVEST, - [Species.ENAMORUS]: Abilities.PRANKSTER, + [Species.ENAMORUS]: Abilities.FAIRY_AURA, [Species.SPRIGATITO]: Abilities.MAGICIAN, [Species.FUECOCO]: Abilities.EARTH_EATER, [Species.QUAXLY]: Abilities.DANCER, @@ -3688,40 +3688,40 @@ export const starterPassiveAbilities = { [Species.DONDOZO]: Abilities.GLUTTONY, [Species.TATSUGIRI]: Abilities.WATER_BUBBLE, [Species.GREAT_TUSK]: Abilities.INTIMIDATE, - [Species.SCREAM_TAIL]: Abilities.PIXILATE, + [Species.SCREAM_TAIL]: Abilities.UNAWARE, [Species.BRUTE_BONNET]: Abilities.BEAST_BOOST, [Species.FLUTTER_MANE]: Abilities.DAZZLING, - [Species.SLITHER_WING]: Abilities.MOXIE, + [Species.SLITHER_WING]: Abilities.SCRAPPY, [Species.SANDY_SHOCKS]: Abilities.EARTH_EATER, - [Species.IRON_TREADS]: Abilities.BULLETPROOF, + [Species.IRON_TREADS]: Abilities.STEELY_SPIRIT, [Species.IRON_BUNDLE]: Abilities.SNOW_WARNING, [Species.IRON_HANDS]: Abilities.IRON_FIST, - [Species.IRON_JUGULIS]: Abilities.NO_GUARD, + [Species.IRON_JUGULIS]: Abilities.AERILATE, [Species.IRON_MOTH]: Abilities.LEVITATE, [Species.IRON_THORNS]: Abilities.SAND_STREAM, [Species.FRIGIBAX]: Abilities.THICK_FAT, [Species.GIMMIGHOUL]: Abilities.SUPER_LUCK, - [Species.WO_CHIEN]: Abilities.TRIAGE, - [Species.CHIEN_PAO]: Abilities.REFRIGERATE, + [Species.WO_CHIEN]: Abilities.GRASSY_SURGE, + [Species.CHIEN_PAO]: Abilities.INTREPID_SWORD, [Species.TING_LU]: Abilities.STAMINA, - [Species.CHI_YU]: Abilities.BLAZE, - [Species.ROARING_MOON]: Abilities.AERILATE, + [Species.CHI_YU]: Abilities.DROUGHT, + [Species.ROARING_MOON]: Abilities.TOUGH_CLAWS, [Species.IRON_VALIANT]: Abilities.DOWNLOAD, [Species.KORAIDON]: Abilities.PROTOSYNTHESIS, [Species.MIRAIDON]: Abilities.QUARK_DRIVE, [Species.WALKING_WAKE]: Abilities.BEAST_BOOST, [Species.IRON_LEAVES]: Abilities.SHARPNESS, [Species.POLTCHAGEIST]: Abilities.FLAME_BODY, - [Species.OKIDOGI]: Abilities.INTIMIDATE, - [Species.MUNKIDORI]: Abilities.PRANKSTER, - [Species.FEZANDIPITI]: Abilities.DAZZLING, + [Species.OKIDOGI]: Abilities.FUR_COAT, + [Species.MUNKIDORI]: Abilities.NEUROFORCE, + [Species.FEZANDIPITI]: Abilities.LEVITATE, [Species.OGERPON]: Abilities.OPPORTUNIST, [Species.GOUGING_FIRE]: Abilities.BEAST_BOOST, [Species.RAGING_BOLT]: Abilities.BEAST_BOOST, [Species.IRON_BOULDER]: Abilities.SHARPNESS, [Species.IRON_CROWN]: Abilities.SHARPNESS, - [Species.TERAPAGOS]: Abilities.PROTEAN, - [Species.PECHARUNT]: Abilities.CORROSION, + [Species.TERAPAGOS]: Abilities.REGENERATOR, + [Species.PECHARUNT]: Abilities.TOXIC_CHAIN, [Species.ALOLA_RATTATA]: Abilities.CHEEK_POUCH, [Species.ALOLA_SANDSHREW]: Abilities.ICE_BODY, [Species.ALOLA_VULPIX]: Abilities.ICE_BODY, @@ -3736,7 +3736,7 @@ export const starterPassiveAbilities = { [Species.GALAR_FARFETCHD]: Abilities.SUPER_LUCK, [Species.GALAR_ARTICUNO]: Abilities.SERENE_GRACE, [Species.GALAR_ZAPDOS]: Abilities.TOUGH_CLAWS, - [Species.GALAR_MOLTRES]: Abilities.REGENERATOR, + [Species.GALAR_MOLTRES]: Abilities.DARK_AURA, [Species.GALAR_CORSOLA]: Abilities.SHADOW_TAG, [Species.GALAR_ZIGZAGOON]: Abilities.PICKPOCKET, [Species.GALAR_DARUMAKA]: Abilities.FLASH_FIRE, From cbf06ffa2ca647dc9ee8a89028cc044431c8b89d Mon Sep 17 00:00:00 2001 From: Madi Simpson Date: Fri, 3 May 2024 12:06:43 -0700 Subject: [PATCH 094/110] bugfix: ensure direct stat modifying moves update both pokemon's stat info --- src/data/move.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 21f376254f7..264f5576ea5 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1573,7 +1573,7 @@ export class CopyStatsAttr extends MoveEffectAttr { user.addTag(BattlerTagType.CRIT_BOOST, 0, move.id); else user.removeTag(BattlerTagType.CRIT_BOOST); - + target.updateInfo(); user.updateInfo(); target.scene.queueMessage(getPokemonMessage(user, 'copied\n') + getPokemonMessage(target, `'s stat changes!`)); @@ -1589,7 +1589,7 @@ export class InvertStatsAttr extends MoveEffectAttr { for (let s = 0; s < target.summonData.battleStats.length; s++) target.summonData.battleStats[s] *= -1; - + target.updateInfo(); user.updateInfo(); target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere all reversed!`)); @@ -1605,7 +1605,7 @@ export class ResetStatsAttr extends MoveEffectAttr { for (let s = 0; s < target.summonData.battleStats.length; s++) target.summonData.battleStats[s] = 0; - + target.updateInfo(); user.updateInfo(); target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere eliminated!`)); From 1484a52fd70adbce0e8ac5f7ce07fadae998465c Mon Sep 17 00:00:00 2001 From: Matt Ross <13306707+mattrossdev@users.noreply.github.com> Date: Fri, 3 May 2024 12:54:21 -0700 Subject: [PATCH 095/110] Add variable power attribute for knock off (#426) * feature/add-variable-power-knock-off * Remove console logs --- src/data/move.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/data/move.ts b/src/data/move.ts index 264f5576ea5..5f86911aebb 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -2021,6 +2021,17 @@ export class PresentPowerAttr extends VariablePowerAttr { } } +export class KnockOffPowerAttr extends VariablePowerAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if(target.getHeldItems().length > 0){ + (args[0] as Utils.NumberHolder).value *= 1.5; + return true; + } + + return false; + } +} + export class VariableAtkAttr extends MoveAttr { constructor() { super(); @@ -4583,6 +4594,7 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.DROWSY, false, true) .condition((user, target, move) => !target.status), new AttackMove(Moves.KNOCK_OFF, Type.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3) + .attr(KnockOffPowerAttr) .partial(), new AttackMove(Moves.ENDEAVOR, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 3) .attr(MatchHpAttr) From 3b61662bba9927115b385abb2893804f5cc5e564 Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Fri, 3 May 2024 15:17:37 -0500 Subject: [PATCH 096/110] Fixed Mighty Cleave not being a Slicing Move --- src/data/move.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/move.ts b/src/data/move.ts index 5f86911aebb..5c29b6a5758 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -6428,6 +6428,7 @@ export function initMoves() { 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), new AttackMove(Moves.MIGHTY_CLEAVE, Type.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9) + .slicingMove() .ignoresProtect(), new AttackMove(Moves.TACHYON_CUTTER, Type.STEEL, MoveCategory.SPECIAL, 50, -1, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._2) From 313fdc0e4222202e28878496cd3e2101e35759e9 Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Fri, 3 May 2024 15:38:32 -0500 Subject: [PATCH 097/110] Fix Venom Drench not working on Toxic Status --- src/data/move.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/move.ts b/src/data/move.ts index 5c29b6a5758..dd149940fee 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -5444,7 +5444,7 @@ export function initMoves() { new StatusMove(Moves.EERIE_IMPULSE, Type.ELECTRIC, 100, 15, -1, 0, 6) .attr(StatChangeAttr, BattleStat.SPATK, -2), new StatusMove(Moves.VENOM_DRENCH, Type.POISON, 100, 20, 100, 0, 6) - .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK, BattleStat.SPD ], -1, false, (user, target, move) => target.status?.effect === StatusEffect.POISON) + .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK, BattleStat.SPD ], -1, false, (user, target, move) => target.status?.effect === StatusEffect.POISON || target.status?.effect === StatusEffect.TOXIC) .target(MoveTarget.ALL_NEAR_ENEMIES), new StatusMove(Moves.POWDER, Type.BUG, 100, 20, -1, 1, 6) .powderMove() From d48f0aa97d7438ceb41f6b69d0af7076d21294f8 Mon Sep 17 00:00:00 2001 From: Madi Simpson Date: Fri, 3 May 2024 13:55:46 -0700 Subject: [PATCH 098/110] Implement Anger Shell and Berserk (#421) * abilities: implement anger shell and berserk * abilities: fix small typo causing berserk to raise speed instead of spatk * abilities: condense battlestats into an array instead of multiple attrs --- src/data/ability.ts | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index a0f85e2fd5e..7ac3e721837 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -580,6 +580,35 @@ export class PostDefendStatChangeAbAttr extends PostDefendAbAttr { } } +export class PostDefendHpGatedStatChangeAbAttr extends PostDefendAbAttr { + private condition: PokemonDefendCondition; + private hpGate: number; + private stats: BattleStat[]; + private levels: integer; + private selfTarget: boolean; + + constructor(condition: PokemonDefendCondition, hpGate: number, stats: BattleStat[], levels: integer, selfTarget: boolean = true) { + super(true); + + this.condition = condition; + this.hpGate = hpGate; + this.stats = stats; + this.levels = levels; + this.selfTarget = selfTarget; + } + + applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean { + const hpGateFlat: integer = Math.ceil(pokemon.getMaxHp() * this.hpGate) + const lastAttackReceived = pokemon.turnData.attacksReceived[pokemon.turnData.attacksReceived.length - 1] + if (this.condition(pokemon, attacker, move.getMove()) && (pokemon.hp <= hpGateFlat && (pokemon.hp + lastAttackReceived.damage) > hpGateFlat)) { + pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, (this.selfTarget ? pokemon : attacker).getBattlerIndex(), true, this.stats, this.levels)); + return true; + } + + return false; + } +} + export class PostDefendApplyArenaTrapTagAbAttr extends PostDefendAbAttr { private condition: PokemonDefendCondition; private tagType: ArenaTagType; @@ -3091,7 +3120,7 @@ export function initAbilities() { new Ability(Abilities.STEELWORKER, 7) .attr(MoveTypePowerBoostAbAttr, Type.STEEL), new Ability(Abilities.BERSERK, 7) - .unimplemented(), + .attr(PostDefendHpGatedStatChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [BattleStat.SPATK], 1), new Ability(Abilities.SLUSH_RUSH, 7) .attr(BattleStatMultiplierAbAttr, BattleStat.SPD, 2) .condition(getWeatherCondition(WeatherType.HAIL, WeatherType.SNOW)), @@ -3327,7 +3356,8 @@ export function initAbilities() { .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) .ignorable(), new Ability(Abilities.ANGER_SHELL, 9) - .unimplemented(), + .attr(PostDefendHpGatedStatChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ BattleStat.ATK, BattleStat.SPATK, BattleStat.SPD ], 1) + .attr(PostDefendHpGatedStatChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ BattleStat.DEF, BattleStat.SPDEF ], -1), new Ability(Abilities.PURIFYING_SALT, 9) .attr(StatusEffectImmunityAbAttr) .attr(ReceivedTypeDamageMultiplierAbAttr, Type.GHOST, 0.5) From 06ae04abaded1c0f994b4c0e0d419b118807aba3 Mon Sep 17 00:00:00 2001 From: Madi Simpson Date: Fri, 3 May 2024 14:06:50 -0700 Subject: [PATCH 099/110] bugfix: ensure hit recoil moves always do at least 1hp in recoil --- src/data/move.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/move.ts b/src/data/move.ts index dd149940fee..958588f7af4 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -685,7 +685,7 @@ export class RecoilAttr extends MoveEffectAttr { return false; const recoilDamage = Math.max(Math.floor((!this.useHp ? user.turnData.damageDealt : user.getMaxHp()) * this.damageRatio), - !this.useHp && user.turnData.damageDealt ? 1 : 0); + user.turnData.damageDealt ? 1 : 0); if (!recoilDamage) return false; From 6f446324db639905133de5ed106811534bf3c85c Mon Sep 17 00:00:00 2001 From: gericocross <32669590+gericocross@users.noreply.github.com> Date: Fri, 3 May 2024 23:38:34 +0200 Subject: [PATCH 100/110] Longer descriptions don't stuck shorter ones anymore --- src/ui/summary-ui-handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index cf5eb3639fd..7776e21782f 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -441,6 +441,7 @@ export default class SummaryUiHandler extends UiHandler { const selectedMove = this.getSelectedMove(); if (selectedMove) { + this.moveDescriptionText.setY(84); this.movePowerText.setText(selectedMove.power >= 0 ? selectedMove.power.toString() : '---'); this.moveAccuracyText.setText(selectedMove.accuracy >= 0 ? selectedMove.accuracy.toString() : '---'); this.moveCategoryIcon.setFrame(MoveCategory[selectedMove.category].toLowerCase()); @@ -457,7 +458,6 @@ export default class SummaryUiHandler extends UiHandler { } if (moveDescriptionLineCount > 3) { - this.moveDescriptionText.setY(84); this.descriptionScrollTween = this.scene.tweens.add({ targets: this.moveDescriptionText, delay: Utils.fixedInt(2000), From 19e434929c19f00342fa2529a3e8575adc584c72 Mon Sep 17 00:00:00 2001 From: ArceUseless <36188730+ArceUseless@users.noreply.github.com> Date: Fri, 3 May 2024 23:52:09 +0200 Subject: [PATCH 101/110] Spanish translations (#422) * Spanish translations for intro messages and some menus. Added Empty (save file) to lang files * Spanish translations + new literals in all langs --------- Co-authored-by: rnicar --- src/locales/de/menu.ts | 6 ++- src/locales/en/menu.ts | 6 ++- src/locales/es/command-ui-handler.ts | 2 +- src/locales/es/menu.ts | 14 ++++-- src/locales/es/tutorial.ts | 69 +++++++++++++++------------ src/locales/fr/menu.ts | 6 ++- src/locales/it/menu.ts | 6 ++- src/ui/confirm-ui-handler.ts | 5 +- src/ui/save-slot-select-ui-handler.ts | 3 +- src/ui/starter-select-ui-handler.ts | 3 +- 10 files changed, 75 insertions(+), 45 deletions(-) diff --git a/src/locales/de/menu.ts b/src/locales/de/menu.ts index c648b15bfe8..3f86ae41a7e 100644 --- a/src/locales/de/menu.ts +++ b/src/locales/de/menu.ts @@ -39,5 +39,9 @@ export const menu: SimpleTranslationEntries = { "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online" + "playersOnline": "Players Online", + "empty":"Empty", + "yes":"Yes", + "no":"No", + "confirmStartTeam":'Begin with these Pokémon?', } as const; \ No newline at end of file diff --git a/src/locales/en/menu.ts b/src/locales/en/menu.ts index 42888b17337..887f3d87834 100644 --- a/src/locales/en/menu.ts +++ b/src/locales/en/menu.ts @@ -39,5 +39,9 @@ export const menu: SimpleTranslationEntries = { "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online" + "playersOnline": "Players Online", + "empty":"Empty", + "yes":"Yes", + "no":"No", + "confirmStartTeam":'Begin with these Pokémon?', } as const; \ No newline at end of file diff --git a/src/locales/es/command-ui-handler.ts b/src/locales/es/command-ui-handler.ts index 237e779db03..66a892f8fd3 100644 --- a/src/locales/es/command-ui-handler.ts +++ b/src/locales/es/command-ui-handler.ts @@ -2,7 +2,7 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const commandUiHandler: SimpleTranslationEntries = { "fight": "Luchar", - "ball": "Ball", + "ball": "Balls", "pokemon": "Pokémon", "run": "Huir", "actionMessage": "¿Qué debería\nhacer {{pokemonName}}?", diff --git a/src/locales/es/menu.ts b/src/locales/es/menu.ts index c67287ae0cc..5569c1e1668 100644 --- a/src/locales/es/menu.ts +++ b/src/locales/es/menu.ts @@ -19,9 +19,13 @@ export const menu: SimpleTranslationEntries = { "boyOrGirl": "¿Eres un chico o una chica?", "boy": "Chico", "girl": "Chica", - "dailyRankings": "Daily Rankings", - "weeklyRankings": "Weekly Rankings", - "noRankings": "No Rankings", - "loading": "Loading…", - "playersOnline": "Players Online" + "dailyRankings": "Rankings Diarios", + "weeklyRankings": "Rankings Semanales", + "noRankings": "Sin Rankings", + "loading": "Cargando…", + "playersOnline": "Jugadores en Línea", + "empty":"Vacío", + "yes":"Sí", + "no":"No", + "confirmStartTeam":'¿Comenzar con estos Pokémon?', } as const; \ No newline at end of file diff --git a/src/locales/es/tutorial.ts b/src/locales/es/tutorial.ts index 2773b6710ba..e179ca55cee 100644 --- a/src/locales/es/tutorial.ts +++ b/src/locales/es/tutorial.ts @@ -1,42 +1,49 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const tutorial: SimpleTranslationEntries = { - "intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. - $This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. - $The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. - $If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, + "intro": `¡Bienvenido/a a PokéRogue! Este es un fangame de Pokémon centrado en el combate con elementos roguelite. + $Este juego no está monetizado y no reclamamos ningún derecho de propiedad sobre Pokémon ni sobre ninguno de + $los recursos con copyright utilizados. + $El juego está en proceso, pero es completamente jugable.\nPara reportar bugs, por favor, hazlo en nuestra + $comunidad de Discord. + $Si el juego va lento, por favor, asegúrate de que tengas activada la opción 'Aceleración de gráficos' en los + $ajustes de tu navegador.`, - "accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, + "accessMenu": `Para acceder al menú, pulsa M o Escape cuando\ntengas el control. + $El menú contiene la configuración y otras funciones.`, - "menu": `From this menu you can access the settings. - $From the settings you can change game speed, window style, and other options. - $There are also various other features here, so be sure to check them all!`, + "menu": `Desde este menú podrás acceder a la configuración. + $Podrás cambiar la velocidad del juego, el estilo de la ventana y demás. + $Hay más opciones, ¡así que pruébalas todas!`, - "starterSelect": `From this screen, you can select your starters.\nThese are your initial party members. - $Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. - $You can also select gender, ability, and form depending on\nthe variants you've caught or hatched. - $The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`, + "starterSelect": `En esta pantalla podrás elegir tus iniciales. Estos serán tus\nmiembros de equipo al comenzar la partida. + $Cada inicial tiene un valor. Tu equipo puede contener hasta 6\nmiembros mientras el valor total no pase de 10. + $También puedes elegir su género, habilidad y forma\ndependiendo de las variantes que hayas conseguido. + $Los IVs de los iniciales corresponderán al valor más alto de\nlos Pokémon de la misma especie que hayas obtenido. + $¡Así que intenta conseguir muchos Pokémon de la misma\nespecie!`, - "pokerus": `A daily random 3 selectable starters have a purple border. - $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "pokerus": `Cada día, 3 iniciales aleatorios tendrán un borde morado. + $Si ves un inicial que tengas con este borde, prueba a\nañadirlo a tu equipo. ¡No olvides revisar sus datos!`, - "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. - $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding C or Shift.`, + "statChange": `Los cambios de estadísticas se mantienen entre combates\nmientras que el Pokémon no vuelva a la Poké Ball. + $Tus Pokémon vuelven a sus Poké Balls antes de combates contra entrenadores y de entrar a un nuevo bioma. + $También puedes ver los cambios de estadísticas del Pokémon en campo manteniendo pulsado C o Shift.`, - "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. - $These range from consumables, to Pokémon held items, to passive permanent items. - $Most non-consumable item effects will stack in various ways. - $Some items will only show up if they can be used, such as evolution items. - $You can also transfer held items between Pokémon using the transfer option. - $The transfer option will appear in the bottom right once you have obtained a held item. - $You may purchase consumable items with money, and a larger variety will be available the further you get. - $Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`, + "selectItem": `Tras cada combate, tendrás la opción de elegir entre tres objetos aleatorios. Solo podrás escoger uno. + $Estos objetos pueden ser consumibles, objetos equipables u objetos pasivos permanentes (hasta acabar la partida). + $La mayoría de los efectos de objetos no consumibles se acumularán de varias maneras. + $Algunos objetos solo aparecerán si pueden ser utilizados, como las piedras evolutivas. + $También puedes transferir objetos equipados entre Pokémon utilizando la opción de transferir. + $La opción de transferir aparecerá en la parte inferior derecha una vez hayas obtenido un objeto equipable. + $También puedes comprar objetos consumibles con dinero y su variedad irá aumentando según tu avance. + $Asegúrate de comprar antes de escoger un objeto aleatorio, ya que se avanzará al siguiente combate.`, - "eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs. - $Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. - $Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. - $Pokémon hatched from eggs generally have better IVs than\nwild Pokémon. - $Some Pokémon can only even be obtained from eggs. - $There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`, + "eggGacha": `En esta pantalla podrás canjear tus vales por huevos\nde Pokémon. + $Los huevos deben eclosionar y estarán más cerca de\nhacerlo tras cada combate. + $Los huevos más raros tardarán más en eclosionar. + $Los Pokémon que hayan salido del huevo no se\nañadirán a tu equipo, pero sí a tus iniciales. + $Los Pokémon salidos de un huevo suelen tener mejores\nIVs que los Pokémon salvajes. + $Algunos Pokémon solo pueden ser obtenidos de huevos. + $Hay 3 máquinas diferentes entre las que elegir, cada\nuna con zdiferentes bonificaciones. + $¡Así que escoge la que más te interese!`, } as const; \ No newline at end of file diff --git a/src/locales/fr/menu.ts b/src/locales/fr/menu.ts index 1744297089c..7de214271eb 100644 --- a/src/locales/fr/menu.ts +++ b/src/locales/fr/menu.ts @@ -34,5 +34,9 @@ export const menu: SimpleTranslationEntries = { "weeklyRankings": "Classement de la Semaine", "noRankings": "Pas de Classement", "loading": "Chargement…", - "playersOnline": "Joueurs Connectés" + "playersOnline": "Joueurs Connectés", + "empty":"Empty", + "yes":"Yes", + "no":"No", + "confirmStartTeam":'Begin with these Pokémon?', } as const; diff --git a/src/locales/it/menu.ts b/src/locales/it/menu.ts index 9812236b7f0..33c128c137e 100644 --- a/src/locales/it/menu.ts +++ b/src/locales/it/menu.ts @@ -39,5 +39,9 @@ export const menu: SimpleTranslationEntries = { "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online" + "playersOnline": "Players Online", + "empty":"Empty", + "yes":"Yes", + "no":"No", + "confirmStartTeam":'Begin with these Pokémon?', } as const; \ No newline at end of file diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index d9e7726d826..a220b6f3a3d 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -1,6 +1,7 @@ import BattleScene, { Button } from "../battle-scene"; import AbstractOptionSelectUiHandler, { OptionSelectConfig } from "./abstact-option-select-ui-handler"; import { Mode } from "./ui"; +import i18next from "i18next"; export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { private switchCheck: boolean; @@ -19,14 +20,14 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { const config: OptionSelectConfig = { options: [ { - label: 'Yes', + label: i18next.t("menu:yes"), handler: () => { args[0](); return true; } }, { - label: 'No', + label: i18next.t("menu:no"), handler: () => { args[1](); return true; diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index 11680cd3952..69ac94d99ba 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -8,6 +8,7 @@ import * as Utils from "../utils"; import PokemonData from "../system/pokemon-data"; import { PokemonHeldItemModifier } from "../modifier/modifier"; import MessageUiHandler from "./message-ui-handler"; +import i18next from "i18next"; const sessionSlotCount = 5; @@ -314,7 +315,7 @@ class SessionSlot extends Phaser.GameObjects.Container { this.scene.gameData.getSession(this.slotId).then(async sessionData => { if (!sessionData) { this.hasData = false; - this.loadingLabel.setText('Empty'); + this.loadingLabel.setText(i18next.t("menu:empty")); resolve(false); return; } diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index f1e058b12cf..7cc99d81fb7 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -27,6 +27,7 @@ import { argbFromRgba } from "@material/material-color-utilities"; import { OptionSelectItem } from "./abstact-option-select-ui-handler"; import { pokemonPrevolutions } from "#app/data/pokemon-evolutions"; import { Variant, getVariantTint } from "#app/data/variant"; +import i18next from "i18next"; export type StarterSelectCallback = (starters: Starter[]) => void; @@ -1653,7 +1654,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.clearText(); }; - ui.showText('Begin with these Pokémon?', null, () => { + ui.showText(i18next.t("menu:confirmStartTeam"), null, () => { ui.setModeWithoutClear(Mode.CONFIRM, () => { const startRun = (gameMode: GameModes) => { this.scene.gameMode = gameModes[gameMode]; From 2eec545c496decd9c4a8e61ebca5ac259af27287 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Fri, 3 May 2024 17:54:56 -0400 Subject: [PATCH 102/110] Fix stat number keys in legacy battle stats view --- public/images/ui/legacy/pbinfo_stat_numbers.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/public/images/ui/legacy/pbinfo_stat_numbers.json b/public/images/ui/legacy/pbinfo_stat_numbers.json index 9c74ee86dbc..fa7d757990f 100644 --- a/public/images/ui/legacy/pbinfo_stat_numbers.json +++ b/public/images/ui/legacy/pbinfo_stat_numbers.json @@ -10,7 +10,7 @@ "scale": 1, "frames": [ { - "filename": "+1", + "filename": "1", "rotated": false, "trimmed": false, "sourceSize": { @@ -31,7 +31,7 @@ } }, { - "filename": "+2", + "filename": "2", "rotated": false, "trimmed": false, "sourceSize": { @@ -52,7 +52,7 @@ } }, { - "filename": "+3", + "filename": "3", "rotated": false, "trimmed": false, "sourceSize": { @@ -73,7 +73,7 @@ } }, { - "filename": "+4", + "filename": "4", "rotated": false, "trimmed": false, "sourceSize": { @@ -94,7 +94,7 @@ } }, { - "filename": "+5", + "filename": "5", "rotated": false, "trimmed": false, "sourceSize": { @@ -115,7 +115,7 @@ } }, { - "filename": "+6", + "filename": "6", "rotated": false, "trimmed": false, "sourceSize": { From 754fe434e67783e16ec9f629d04a073ea1032931 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Fri, 3 May 2024 18:37:46 -0400 Subject: [PATCH 103/110] Update biome pools for various legendaries and regionals --- src/data/biomes.ts | 162 ++++++++++++++++++++++++--------------------- 1 file changed, 85 insertions(+), 77 deletions(-) diff --git a/src/data/biomes.ts b/src/data/biomes.ts index c6a3c95b631..3dc12491816 100644 --- a/src/data/biomes.ts +++ b/src/data/biomes.ts @@ -241,10 +241,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ { 1: [ Species.BULBASAUR ], 16: [ Species.IVYSAUR ], 32: [ Species.VENUSAUR ] }, Species.GROWLITHE, { 1: [ Species.TURTWIG ], 18: [ Species.GROTLE ], 32: [ Species.TORTERRA ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUDOWOODO ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DAY]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VENUSAUR, Species.SUDOWOODO, Species.TORTERRA ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.TALL_GRASS]: { @@ -487,14 +487,14 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.ARBOK, Species.CLODSIRE ], [TimeOfDay.ALL]: [ Species.POLIWRATH, Species.SWALOT, Species.WHISCASH, Species.GASTRODON, Species.SEISMITOAD, Species.STUNFISK, Species.TOXAPEX ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FERALIGATR, Species.POLITOED, Species.SWAMPERT ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, Species.HISUI_GOODRA ], [TimeOfDay.DAY]: [ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, Species.HISUI_GOODRA ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.AZELF, Species.NAGANADEL, Species.GALAR_STUNFISK ] + [TimeOfDay.ALL]: [ Species.FERALIGATR, Species.POLITOED, Species.SWAMPERT, Species.GALAR_STUNFISK ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AZELF, Species.NAGANADEL ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.BEACH]: { @@ -521,7 +521,7 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.QUAXLY ], 16: [ Species.QUAXWELL ], 36: [ Species.QUAQUAVAL ] }, Species.TATSUGIRI ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.TIRTOUGA ], 37: [ Species.CARRACOSTA ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KELDEO ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.STARMIE ], [TimeOfDay.DAY]: [ Species.STARMIE ], @@ -530,7 +530,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.KINGLER, Species.CRAWDAUNT, Species.WORMADAM, Species.CRUSTLE, Species.BARBARACLE, Species.CLAWITZER, Species.TOXAPEX, Species.PALOSSAND ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CARRACOSTA, Species.QUAQUAVAL ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KELDEO ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.LAKE]: { @@ -640,8 +640,14 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LANTURN, Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, Species.MANTINE, Species.WAILORD, Species.HUNTAIL, Species.GOREBYSS, Species.LUVDISC, Species.JELLICENT, Species.ALOMOMOLA, Species.DRAGALGE, Species.BARRASKEWDA, Species.DONDOZO ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.OMASTAR, Species.KABUTOPS, Species.RELICANTH, Species.EELEKTROSS, Species.PYUKUMUKU, Species.DHELMISE, Species.ARCTOVISH, Species.BASCULEGION ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MILOTIC, Species.NIHILEGO, Species.CURSOLA, Species.OVERQWIL ] }, + [BiomePoolTier.BOSS_RARE]: { + [TimeOfDay.DAWN]: [], + [TimeOfDay.DAY]: [], + [TimeOfDay.DUSK]: [], + [TimeOfDay.NIGHT]: [], + [TimeOfDay.ALL]: [ Species.OMASTAR, Species.KABUTOPS, Species.RELICANTH, Species.EELEKTROSS, Species.PYUKUMUKU, Species.DHELMISE, Species.CURSOLA, Species.ARCTOVISH, Species.BASCULEGION, Species.OVERQWIL ] + }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MILOTIC, Species.NIHILEGO ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KYOGRE ] } }, [Biome.MOUNTAIN]: { @@ -840,7 +846,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ { 1: [ Species.DARUMAKA ], 35: [ Species.DARMANITAN ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.LILEEP ], 40: [ Species.CRADILY ] }, { 1: [ Species.ANORITH ], 40: [ Species.ARMALDO ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.PHEROMOSA ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ], [TimeOfDay.DAY]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ], @@ -849,7 +855,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.SANDSLASH, Species.DRAPION, Species.DARMANITAN, Species.MARACTUS, Species.SANDACONDA, Species.BRAMBLEGHAST ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRADILY, Species.ARMALDO ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.PHEROMOSA ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.ICE_CAVE]: { @@ -951,9 +957,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAUROS, Species.MILTANK, Species.GARDEVOIR, Species.PURUGLY, Species.ZEBSTRIKA, Species.FLORGES, Species.RIBOMBEE, Species.DUBWOOL ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLISSEY, Species.SYLVEON, Species.FLAPPLE, Species.APPLETUN, Species.MEOWSCARADA, Species.HYDRAPPLE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DAY]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DAY]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLISSEY, Species.SYLVEON, Species.FLAPPLE, Species.APPLETUN, Species.MEOWSCARADA, Species.HYDRAPPLE ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ] }, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SHAYMIN ] } }, [Biome.POWER_PLANT]: { [BiomePoolTier.COMMON]: { @@ -984,8 +990,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RAICHU, Species.MANECTRIC, Species.LUXRAY, Species.MAGNEZONE, Species.ELECTIVIRE, Species.DEDENNE, Species.VIKAVOLT, Species.TOGEDEMARU, Species.PAWMOT, Species.BELLIBOLT ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.AMPHAROS ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAPDOS, Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI, Species.HISUI_ELECTRODE ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.AMPHAROS, Species.HISUI_ELECTRODE ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAPDOS, Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZEKROM ] } }, [Biome.VOLCANO]: { @@ -1035,9 +1041,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.CHARIZARD, Species.FLAREON, Species.TYPHLOSION, Species.INFERNAPE, Species.EMBOAR, Species.VOLCARONA, Species.DELPHOX, Species.INCINEROAR, Species.CINDERACE, Species.ARMAROUGE ] + [TimeOfDay.ALL]: [ Species.CHARIZARD, Species.FLAREON, Species.TYPHLOSION, Species.INFERNAPE, Species.EMBOAR, Species.VOLCARONA, Species.DELPHOX, Species.INCINEROAR, Species.CINDERACE, Species.ARMAROUGE, Species.HISUI_ARCANINE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MOLTRES, Species.ENTEI, Species.ROTOM, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU, Species.HISUI_ARCANINE ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MOLTRES, Species.ENTEI, Species.ROTOM, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RESHIRAM ] } }, [Biome.GRAVEYARD]: { @@ -1074,8 +1080,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENGAR, Species.BANETTE, Species.DRIFBLIM, Species.MISMAGIUS, Species.DUSKNOIR, Species.CHANDELURE, Species.TREVENANT, Species.GOURGEIST, Species.MIMIKYU, Species.POLTEAGEIST, Species.HOUNDSTONE ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SKELEDIRGE, Species.CERULEDGE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER, Species.HISUI_TYPHLOSION ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SKELEDIRGE, Species.CERULEDGE, Species.HISUI_TYPHLOSION ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GIRATINA ] } }, [Biome.DOJO]: { @@ -1109,8 +1115,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONLEE, Species.HITMONCHAN, Species.HARIYAMA, Species.MEDICHAM, Species.LUCARIO, Species.TOXICROAK, Species.THROH, Species.SAWK, Species.SCRAFTY, Species.MIENSHAO, Species.BEWEAR, Species.GRAPPLOCT, Species.ANNIHILAPE ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.PANGORO ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.SIRFETCHD, Species.URSHIFU, Species.HISUI_DECIDUEYE ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.PANGORO, Species.SIRFETCHD, Species.HISUI_DECIDUEYE ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.URSHIFU ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAMAZENTA, Species.GALAR_ZAPDOS ] } }, [Biome.FACTORY]: { @@ -1168,8 +1174,8 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ALAKAZAM, Species.HYPNO, Species.XATU, Species.GRUMPIG, Species.CLAYDOL, Species.SIGILYPH, Species.GOTHITELLE, Species.BEHEEYEM, Species.TINKATON ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.ESPEON ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, Species.ARCHEOPS ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.RUNERIGUS ], [TimeOfDay.NIGHT]: [ Species.RUNERIGUS ], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.ESPEON ], [TimeOfDay.DUSK]: [ Species.RUNERIGUS ], [TimeOfDay.NIGHT]: [ Species.RUNERIGUS ], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, Species.ARCHEOPS ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KORAIDON ] } }, [Biome.WASTELAND]: { @@ -1245,7 +1251,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.ABSOL, Species.SPIRITOMB, { 1: [ Species.ZORUA ], 30: [ Species.ZOROARK ] }, { 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GUZZLORD, Species.GALAR_MOLTRES ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GALAR_MOLTRES ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], @@ -1253,8 +1259,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOUNDOOM, Species.SABLEYE, Species.ABSOL, Species.HONCHKROW, Species.SPIRITOMB, Species.LIEPARD, Species.ZOROARK, Species.HYDREIGON, Species.THIEVUL, Species.GRIMMSNARL, Species.MABOSSTIFF, Species.KINGAMBIT ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GUZZLORD, Species.HISUI_SAMUROTT ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON, Species.HISUI_SAMUROTT ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.PALKIA, Species.YVELTAL, Species.GALAR_MOLTRES ] } }, [Biome.SPACE]: { @@ -1274,10 +1280,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] }, Species.SIGILYPH, { 1: [ Species.SOLOSIS ], 32: [ Species.DUOSION ], 41: [ Species.REUNICLUS ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, { 1: [ Species.COSMOG ], 43: [ Species.COSMOEM ] }, Species.CELESTEELA ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.COSMOG ], 43: [ Species.COSMOEM ] }, Species.CELESTEELA ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLROCK ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNATONE ], [TimeOfDay.ALL]: [ Species.CLEFABLE, Species.BRONZONG, Species.MUSHARNA, Species.REUNICLUS, Species.MINIOR ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.METAGROSS, Species.PORYGON_Z ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.CELESTEELA ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CELESTEELA ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLGALEO ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNALA ], [TimeOfDay.ALL]: [ Species.RAYQUAZA, Species.NECROZMA ] } }, [Biome.CONSTRUCTION_SITE]: { @@ -1307,10 +1313,10 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ { 1: [ Species.GALAR_MEOWTH ], 28: [ Species.PERRSERKER ] } ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ONIX, Species.HITMONLEE, Species.HITMONCHAN, Species.DURALUDON ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.HITMONTOP ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MACHAMP, Species.CONKELDURR ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.PERRSERKER ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARCHALUDON ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.JUNGLE]: { @@ -1352,7 +1358,7 @@ export const biomePokemonPools: BiomePokemonPools = { ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.CHATOT, Species.KLEAVOR ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ], [TimeOfDay.DAY]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ], @@ -1367,7 +1373,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.SCIZOR, Species.SLAKING, Species.LEAFEON, Species.SERPERIOR, Species.RILLABOOM ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLEAVOR ] } }, [Biome.FAIRY_CAVE]: { @@ -1445,10 +1451,10 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.GIMMIGHOUL ], 40: [ Species.GHOLDENGO ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO, Species.TAPU_LELE, Species.TAPU_BULU, Species.TAPU_FINI ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CHIMECHO, Species.COFAGRIGUS, Species.GOLURK, Species.AEGISLASH ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GHOLDENGO ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO, Species.TAPU_LELE, Species.TAPU_BULU, Species.TAPU_FINI ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIGIGAS ] } }, [Biome.SLUM]: { @@ -1479,10 +1485,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ { 1: [ Species.VAROOM ], 40: [ Species.REVAVROOM ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.NIGHT]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.ALL]: [ Species.MUK, Species.WEEZING, Species.WORMADAM, Species.GARBODOR ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.ALL]: [ Species.REVAVROOM ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GALAR_WEEZING ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.ALL]: [ Species.REVAVROOM, Species.GALAR_WEEZING ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.SNOWY_FOREST]: { @@ -1516,14 +1522,14 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO, Species.GALAR_ARTICUNO ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.WYRDEER ], [TimeOfDay.DAY]: [ Species.WYRDEER ], [TimeOfDay.DUSK]: [ Species.FROSMOTH ], [TimeOfDay.NIGHT]: [ Species.FROSMOTH ], [TimeOfDay.ALL]: [ Species.ABOMASNOW, Species.URSALUNA ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARCTOZOLT, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ], [TimeOfDay.DAY]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ], [TimeOfDay.DUSK]: [ Species.HISUI_ZOROARK ], [TimeOfDay.NIGHT]: [ Species.HISUI_ZOROARK ], - [TimeOfDay.ALL]: [ Species.MR_RIME, Species.GLASTRIER, Species.CHIEN_PAO ] + [TimeOfDay.ALL]: [ Species.MR_RIME, Species.ARCTOZOLT, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZACIAN, Species.GALAR_ARTICUNO ] } }, [Biome.ISLAND]: { @@ -1550,7 +1556,7 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.STAKATAKA, Species.BLACEPHALON ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ], [TimeOfDay.DAY]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ], @@ -1559,7 +1565,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.ORICORIO, Species.BRUXISH, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES, Species.ALOLA_DUGTRIO, Species.ALOLA_GOLEM, Species.ALOLA_MUK ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.STAKATAKA, Species.BLACEPHALON ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.LABORATORY]: { @@ -4371,8 +4377,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.CRESSELIA, Type.PSYCHIC, -1, [ - [ Biome.SPACE, BiomePoolTier.ULTRA_RARE ], - [ Biome.SPACE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.BEACH, BiomePoolTier.ULTRA_RARE ], + [ Biome.BEACH, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.PHIONE, Type.WATER, -1, [ ] @@ -4384,7 +4390,9 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.SHAYMIN, Type.GRASS, -1, [ ] + [ Species.SHAYMIN, Type.GRASS, -1, [ + [ Biome.MEADOW, BiomePoolTier.BOSS_ULTRA_RARE ] + ] ], [ Species.ARCEUS, Type.NORMAL, -1, [ ] ], @@ -5103,8 +5111,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.VIRIZION, Type.GRASS, Type.FIGHTING, [ - [ Biome.JUNGLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.GRASS, BiomePoolTier.ULTRA_RARE ], + [ Biome.GRASS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.TORNADUS, Type.FLYING, -1, [ @@ -5779,18 +5787,18 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.TAPU_LELE, Type.PSYCHIC, Type.FAIRY, [ - [ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.JUNGLE, BiomePoolTier.ULTRA_RARE ], + [ Biome.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.TAPU_BULU, Type.GRASS, Type.FAIRY, [ - [ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.DESERT, BiomePoolTier.ULTRA_RARE ], + [ Biome.DESERT, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.TAPU_FINI, Type.WATER, Type.FAIRY, [ - [ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.BEACH, BiomePoolTier.ULTRA_RARE ], + [ Biome.BEACH, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.COSMOG, Type.PSYCHIC, -1, [ @@ -5840,8 +5848,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.GUZZLORD, Type.DARK, Type.DRAGON, [ - [ Biome.ABYSS, BiomePoolTier.ULTRA_RARE ], - [ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SLUM, BiomePoolTier.ULTRA_RARE ], + [ Biome.SLUM, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.NECROZMA, Type.PSYCHIC, -1, [ @@ -5867,8 +5875,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.STAKATAKA, Type.ROCK, Type.STEEL, [ - [ Biome.ISLAND, BiomePoolTier.ULTRA_RARE ], - [ Biome.ISLAND, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.CONSTRUCTION_SITE, BiomePoolTier.ULTRA_RARE ], + [ Biome.CONSTRUCTION_SITE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.BLACEPHALON, Type.FIRE, Type.GHOST, [ @@ -6129,21 +6137,21 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.CURSOLA, Type.GHOST, -1, [ [ Biome.SEABED, BiomePoolTier.SUPER_RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] ] ], [ Species.SIRFETCHD, Type.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.DOJO, BiomePoolTier.BOSS_RARE ] ] ], [ Species.MR_RIME, Type.ICE, Type.PSYCHIC, [ [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE ] ] ], [ Species.RUNERIGUS, Type.GROUND, Type.GHOST, [ [ Biome.RUINS, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.RUINS, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.RUINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] ] ], [ Species.MILCERY, Type.FAIRY, -1, [ @@ -6305,11 +6313,11 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.SNEASLER, Type.FIGHTING, Type.POISON, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.OVERQWIL, Type.DARK, Type.POISON, [ - [ Biome.SEABED, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] ] ], [ Species.ENAMORUS, Type.FAIRY, Type.FLYING, [ @@ -6972,7 +6980,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.GALAR_SLOWBRO, Type.POISON, Type.PSYCHIC, [ [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.GALAR_FARFETCHD, Type.FIGHTING, -1, [ @@ -6980,7 +6988,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.GALAR_WEEZING, Type.POISON, Type.FAIRY, [ - [ Biome.SLUM, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SLUM, BiomePoolTier.BOSS_RARE ] ] ], [ Species.GALAR_MR_MIME, Type.ICE, Type.PSYCHIC, [ @@ -7003,7 +7011,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.GALAR_SLOWKING, Type.POISON, Type.PSYCHIC, [ - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.GALAR_CORSOLA, Type.GHOST, -1, [ @@ -7024,7 +7032,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.GALAR_DARMANITAN, Type.ICE, -1, [ [ Biome.SNOWY_FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.GALAR_YAMASK, Type.GROUND, Type.GHOST, [ @@ -7033,7 +7041,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.GALAR_STUNFISK, Type.GROUND, Type.STEEL, [ [ Biome.SWAMP, BiomePoolTier.SUPER_RARE ], - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_GROWLITHE, Type.FIRE, Type.ROCK, [ @@ -7041,7 +7049,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.HISUI_ARCANINE, Type.FIRE, Type.ROCK, [ - [ Biome.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_VOLTORB, Type.ELECTRIC, Type.GRASS, [ @@ -7049,11 +7057,11 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.HISUI_ELECTRODE, Type.ELECTRIC, Type.GRASS, [ - [ Biome.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.POWER_PLANT, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_TYPHLOSION, Type.FIRE, Type.GHOST, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.GRAVEYARD, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_QWILFISH, Type.DARK, Type.POISON, [ @@ -7065,11 +7073,11 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.HISUI_SAMUROTT, Type.WATER, Type.DARK, [ - [ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.ABYSS, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_LILLIGANT, Type.GRASS, Type.FIGHTING, [ - [ Biome.MEADOW, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MEADOW, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.HISUI_ZORUA, Type.NORMAL, Type.GHOST, [ @@ -7078,7 +7086,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.HISUI_ZOROARK, Type.NORMAL, Type.GHOST, [ [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] ] ], [ Species.HISUI_BRAVIARY, Type.PSYCHIC, Type.FLYING, [ @@ -7091,7 +7099,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.HISUI_GOODRA, Type.STEEL, Type.DRAGON, [ [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.HISUI_AVALUGG, Type.ICE, Type.ROCK, [ @@ -7099,7 +7107,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.HISUI_DECIDUEYE, Type.GRASS, Type.FIGHTING, [ - [ Biome.DOJO, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.DOJO, BiomePoolTier.BOSS_RARE ] ] ], [ Species.PALDEA_TAUROS, Type.FIGHTING, -1, [ From 75cbe4fe2cd492e36f51e937ca200b29f7734f54 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sat, 4 May 2024 00:43:32 +0200 Subject: [PATCH 104/110] French Update to menu.ts (#436) --- src/locales/fr/menu.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/locales/fr/menu.ts b/src/locales/fr/menu.ts index 7de214271eb..7cea2c6d306 100644 --- a/src/locales/fr/menu.ts +++ b/src/locales/fr/menu.ts @@ -35,8 +35,8 @@ export const menu: SimpleTranslationEntries = { "noRankings": "Pas de Classement", "loading": "Chargement…", "playersOnline": "Joueurs Connectés", - "empty":"Empty", - "yes":"Yes", - "no":"No", - "confirmStartTeam":'Begin with these Pokémon?', + "empty":"Vide", + "yes":"Oui", + "no":"Non", + "confirmStartTeam":'Commencer avec ces Pokémon ?', } as const; From 0c9402a649c94cc06fa04927519d606cb1624a03 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sat, 4 May 2024 01:07:06 +0200 Subject: [PATCH 105/110] Update French tutorial.ts (#437) Changes made after in game test --- src/locales/fr/tutorial.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/locales/fr/tutorial.ts b/src/locales/fr/tutorial.ts index 1502b285356..bcd76d61da2 100644 --- a/src/locales/fr/tutorial.ts +++ b/src/locales/fr/tutorial.ts @@ -25,12 +25,9 @@ export const tutorial: SimpleTranslationEntries = { $violet. Si un starter que vous possédez l’a, essayez de $l’ajouter à votre équipe. Vérifiez bien son résumé !`, - "statChange": `Les changements de stats restent à travers les combats tant que le Pokémon - $n’est pas rappelé. - $Vos Pokémon sont rappelés avant un combat de Dresseur et avant d’entrer - $dans un nouveau biome. - $Vous pouvez également voir en combat les changements de stats d’un Pokémon - $en maintenant C ou Maj.`, + "statChange": `Les changements de stats restent à travers les combats tant que le Pokémon n’est pas rappelé. + $Vos Pokémon sont rappelés avant un combat de Dresseur et avant d’entrer dans un nouveau biome. + $Vous pouvez également voir en combat les changements de stats d’un Pokémon en maintenant C ou Maj.`, "selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un. $Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents. From 77c3a5ad78271b8390e3d7cfcd48ec192013dc2c Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sat, 4 May 2024 01:07:51 +0200 Subject: [PATCH 106/110] Minor update to French battle.ts (#438) * Minor update to French battle.ts Added missing spaces before some exclamation marks * Minor Update to French battle.ts --- src/locales/fr/battle.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/locales/fr/battle.ts b/src/locales/fr/battle.ts index 8768c30155a..742a8f63d77 100644 --- a/src/locales/fr/battle.ts +++ b/src/locales/fr/battle.ts @@ -14,11 +14,11 @@ export const battle: SimpleTranslationEntries = { "pokemonCaught": "Vous avez attrapé {{pokemonName}} !", "pokemon": "Pokémon", "sendOutPokemon": "{{pokemonName}} ! Go !", - "hitResultCriticalHit": "Coup critique!", - "hitResultSuperEffective": "C’est super efficace!", + "hitResultCriticalHit": "Coup critique !", + "hitResultSuperEffective": "C’est super efficace !", "hitResultNotVeryEffective": "Ce n’est pas très efficace…", "hitResultNoEffect": "Ça n’affecte pas {{pokemonName}}…", - "hitResultOneHitKO": "K.O. en un coup!", + "hitResultOneHitKO": "K.O. en un coup !", "attackFailed": "Mais cela échoue !", "attackHitsCount": `Touché {{count}} fois !`, "expGain": "{{pokemonName}} gagne\n{{exp}} Points d’Exp !", @@ -36,7 +36,7 @@ export const battle: SimpleTranslationEntries = { "moveDisabled": "{{moveName}} est sous entrave !", "noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.", "noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !", - "noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon!", + "noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon !", "noPokeballStrong": "Le Pokémon est trop fort pour être capturé !\nVous devez d’abord l’affaiblir !", "noEscapeForce": "Une force mystérieuse\nempêche la fuite.", "noEscapeTrainer": "On ne s’enfuit pas d’un\ncombat de Dresseurs !", @@ -49,4 +49,4 @@ export const battle: SimpleTranslationEntries = { "skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?", "eggHatching": "Oh ?", "ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?" -} as const; \ No newline at end of file +} as const; From cfee310350f65533b3c9fe44e9750cbd6867b74f Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Fri, 3 May 2024 19:21:02 -0500 Subject: [PATCH 107/110] Adjust more passive abilities MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes some of the more problematic passives some Pokémon had. As usual, if there's any that you may have a problem with, we are always up for suggestions. --- src/data/biomes.ts | 4 ++-- src/data/pokemon-species.ts | 48 ++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/data/biomes.ts b/src/data/biomes.ts index 3dc12491816..61da0410dcf 100644 --- a/src/data/biomes.ts +++ b/src/data/biomes.ts @@ -4391,8 +4391,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.SHAYMIN, Type.GRASS, -1, [ - [ Biome.MEADOW, BiomePoolTier.BOSS_ULTRA_RARE ] - ] + [ Biome.MEADOW, BiomePoolTier.BOSS_ULTRA_RARE ] + ] ], [ Species.ARCEUS, Type.NORMAL, -1, [ ] ], diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 57bb9230c5e..a045fe2292f 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -3209,7 +3209,7 @@ export const starterPassiveAbilities = { [Species.BELLSPROUT]: Abilities.CORROSION, [Species.TENTACOOL]: Abilities.INNARDS_OUT, [Species.GEODUDE]: Abilities.ROCKY_PAYLOAD, - [Species.PONYTA]: Abilities.PIXILATE, + [Species.PONYTA]: Abilities.MAGIC_GUARD, [Species.SLOWPOKE]: Abilities.UNAWARE, [Species.MAGNEMITE]: Abilities.MOTOR_DRIVE, [Species.FARFETCHD]: Abilities.PURE_POWER, @@ -3235,7 +3235,7 @@ export const starterPassiveAbilities = { [Species.SCYTHER]: Abilities.SPEED_BOOST, [Species.PINSIR]: Abilities.SAP_SIPPER, [Species.TAUROS]: Abilities.ROCK_HEAD, - [Species.MAGIKARP]: Abilities.BERSERK, + [Species.MAGIKARP]: Abilities.MULTISCALE, [Species.LAPRAS]: Abilities.LIQUID_VOICE, [Species.DITTO]: Abilities.GOOEY, [Species.EEVEE]: Abilities.PROTEAN, @@ -3249,16 +3249,16 @@ export const starterPassiveAbilities = { [Species.DRATINI]: Abilities.DELTA_STREAM, [Species.MEWTWO]: Abilities.NEUROFORCE, [Species.MEW]: Abilities.PROTEAN, - [Species.CHIKORITA]: Abilities.RIPEN, + [Species.CHIKORITA]: Abilities.THICK_FAT, [Species.CYNDAQUIL]: Abilities.TURBOBLAZE, [Species.TOTODILE]: Abilities.TOUGH_CLAWS, [Species.SENTRET]: Abilities.FLUFFY, [Species.HOOTHOOT]: Abilities.CURSED_BODY, - [Species.LEDYBA]: Abilities.SCREEN_CLEANER, + [Species.LEDYBA]: Abilities.PRANKSTER, [Species.SPINARAK]: Abilities.PRANKSTER, [Species.CHINCHOU]: Abilities.REGENERATOR, [Species.PICHU]: Abilities.TRANSISTOR, - [Species.CLEFFA]: Abilities.MISTY_SURGE, + [Species.CLEFFA]: Abilities.MAGIC_BOUNCE, [Species.IGGLYBUFF]: Abilities.SERENE_GRACE, [Species.TOGEPI]: Abilities.OPPORTUNIST, [Species.NATU]: Abilities.TINTED_LENS, @@ -3276,7 +3276,7 @@ export const starterPassiveAbilities = { [Species.DUNSPARCE]: Abilities.MARVEL_SCALE, [Species.GLIGAR]: Abilities.MERCILESS, [Species.SNUBBULL]: Abilities.BALL_FETCH, - [Species.QWILFISH]: Abilities.LIQUID_OOZE, + [Species.QWILFISH]: Abilities.TOXIC_DEBRIS, [Species.SHUCKLE]: Abilities.WELL_BAKED_BODY, [Species.HERACROSS]: Abilities.QUICK_FEET, [Species.SNEASEL]: Abilities.MOXIE, @@ -3292,7 +3292,7 @@ export const starterPassiveAbilities = { [Species.STANTLER]: Abilities.MAGIC_GUARD, [Species.SMEARGLE]: Abilities.QUICK_DRAW, [Species.TYROGUE]: Abilities.STAMINA, - [Species.SMOOCHUM]: Abilities.CUTE_CHARM, + [Species.SMOOCHUM]: Abilities.DAZZLING, [Species.ELEKID]: Abilities.IRON_FIST, [Species.MAGBY]: Abilities.CONTRARY, [Species.MILTANK]: Abilities.GLUTTONY, @@ -3303,7 +3303,7 @@ export const starterPassiveAbilities = { [Species.LUGIA]: Abilities.DELTA_STREAM, [Species.HO_OH]: Abilities.MAGIC_GUARD, [Species.CELEBI]: Abilities.GRASSY_SURGE, - [Species.TREECKO]: Abilities.GRASSY_SURGE, + [Species.TREECKO]: Abilities.TINTED_LENS, [Species.TORCHIC]: Abilities.RECKLESS, [Species.MUDKIP]: Abilities.REGENERATOR, [Species.POOCHYENA]: Abilities.STRONG_JAW, @@ -3320,7 +3320,7 @@ export const starterPassiveAbilities = { [Species.NINCADA]: Abilities.OVERCOAT, [Species.WHISMUR]: Abilities.PUNK_ROCK, [Species.MAKUHITA]: Abilities.STAMINA, - [Species.AZURILL]: Abilities.UNNERVE, + [Species.AZURILL]: Abilities.MISTY_SURGE, [Species.NOSEPASS]: Abilities.LEVITATE, [Species.SKITTY]: Abilities.SCRAPPY, [Species.SABLEYE]: Abilities.UNNERVE, @@ -3351,7 +3351,7 @@ export const starterPassiveAbilities = { [Species.BALTOY]: Abilities.OWN_TEMPO, [Species.LILEEP]: Abilities.WATER_ABSORB, [Species.ANORITH]: Abilities.WATER_ABSORB, - [Species.FEEBAS]: Abilities.PASTEL_VEIL, + [Species.FEEBAS]: Abilities.MAGIC_GUARD, [Species.CASTFORM]: Abilities.ADAPTABILITY, [Species.KECLEON]: Abilities.ADAPTABILITY, [Species.SHUPPET]: Abilities.MUMMY, @@ -3431,7 +3431,7 @@ export const starterPassiveAbilities = { [Species.VICTINI]: Abilities.SUPER_LUCK, [Species.SNIVY]: Abilities.MULTISCALE, [Species.TEPIG]: Abilities.ROCK_HEAD, - [Species.OSHAWOTT]: Abilities.MOLD_BREAKER, + [Species.OSHAWOTT]: Abilities.QUICK_DRAW, [Species.PATRAT]: Abilities.STAKEOUT, [Species.LILLIPUP]: Abilities.BALL_FETCH, [Species.PURRLOIN]: Abilities.DEFIANT, @@ -3444,14 +3444,14 @@ export const starterPassiveAbilities = { [Species.ROGGENROLA]: Abilities.SOLID_ROCK, [Species.WOOBAT]: Abilities.SOUL_HEART, [Species.DRILBUR]: Abilities.SAND_STREAM, - [Species.AUDINO]: Abilities.SERENE_GRACE, + [Species.AUDINO]: Abilities.FRIEND_GUARD, [Species.TIMBURR]: Abilities.STAMINA, [Species.TYMPOLE]: Abilities.MOODY, [Species.THROH]: Abilities.SIMPLE, [Species.SAWK]: Abilities.DEFIANT, [Species.SEWADDLE]: Abilities.SHARPNESS, [Species.VENIPEDE]: Abilities.INTIMIDATE, - [Species.COTTONEE]: Abilities.MISTY_SURGE, + [Species.COTTONEE]: Abilities.FLUFFY, [Species.PETILIL]: Abilities.DANCER, [Species.BASCULIN]: Abilities.OPPORTUNIST, [Species.SANDILE]: Abilities.STRONG_JAW, @@ -3460,7 +3460,7 @@ export const starterPassiveAbilities = { [Species.DWEBBLE]: Abilities.STAMINA, [Species.SCRAGGY]: Abilities.ROCK_HEAD, [Species.SIGILYPH]: Abilities.MAGICIAN, - [Species.YAMASK]: Abilities.GOOD_AS_GOLD, + [Species.YAMASK]: Abilities.PURIFYING_SALT, [Species.TIRTOUGA]: Abilities.SHELL_ARMOR, [Species.ARCHEN]: Abilities.ROCKY_PAYLOAD, [Species.TRUBBISH]: Abilities.GOOEY, @@ -3521,7 +3521,7 @@ export const starterPassiveAbilities = { [Species.SKIDDO]: Abilities.GRASSY_SURGE, [Species.PANCHAM]: Abilities.FLUFFY, [Species.FURFROU]: Abilities.BALL_FETCH, - [Species.ESPURR]: Abilities.PSYCHIC_SURGE, + [Species.ESPURR]: Abilities.FUR_COAT, [Species.HONEDGE]: Abilities.SHARPNESS, [Species.SPRITZEE]: Abilities.MISTY_SURGE, [Species.SWIRLIX]: Abilities.WELL_BAKED_BODY, @@ -3548,7 +3548,7 @@ export const starterPassiveAbilities = { [Species.HOOPA]: Abilities.OPPORTUNIST, [Species.VOLCANION]: Abilities.FILTER, [Species.ROWLET]: Abilities.SNIPER, - [Species.LITTEN]: Abilities.PRANKSTER, + [Species.LITTEN]: Abilities.FLAME_BODY, [Species.POPPLIO]: Abilities.PUNK_ROCK, [Species.PIKIPEK]: Abilities.ANGER_POINT, [Species.YUNGOOS]: Abilities.HUGE_POWER, @@ -3577,7 +3577,7 @@ export const starterPassiveAbilities = { [Species.KOMALA]: Abilities.GUTS, [Species.TURTONATOR]: Abilities.ANGER_SHELL, [Species.TOGEDEMARU]: Abilities.STATIC, - [Species.MIMIKYU]: Abilities.CURSED_BODY, + [Species.MIMIKYU]: Abilities.TOUGH_CLAWS, [Species.BRUXISH]: Abilities.MULTISCALE, [Species.DRAMPA]: Abilities.FLASH_FIRE, [Species.DHELMISE]: Abilities.INFILTRATOR, @@ -3607,9 +3607,9 @@ export const starterPassiveAbilities = { [Species.SOBBLE]: Abilities.SUPER_LUCK, [Species.SKWOVET]: Abilities.HONEY_GATHER, [Species.ROOKIDEE]: Abilities.IRON_BARBS, - [Species.BLIPBUG]: Abilities.TINTED_LENS, + [Species.BLIPBUG]: Abilities.PSYCHIC_SURGE, [Species.NICKIT]: Abilities.INTIMIDATE, - [Species.GOSSIFLEUR]: Abilities.STORM_DRAIN, + [Species.GOSSIFLEUR]: Abilities.GRASSY_SURGE, [Species.WOOLOO]: Abilities.ROCK_HEAD, [Species.CHEWTLE]: Abilities.ROCK_HEAD, [Species.YAMPER]: Abilities.STAKEOUT, @@ -3624,7 +3624,7 @@ export const starterPassiveAbilities = { [Species.SINISTEA]: Abilities.WATER_ABSORB, [Species.HATENNA]: Abilities.MAGIC_GUARD, [Species.IMPIDIMP]: Abilities.TANGLING_HAIR, - [Species.MILCERY]: Abilities.WELL_BAKED_BODY, + [Species.MILCERY]: Abilities.MISTY_SURGE, [Species.FALINKS]: Abilities.MOXIE, [Species.PINCURCHIN]: Abilities.IRON_BARBS, [Species.SNOM]: Abilities.SNOW_WARNING, @@ -3674,9 +3674,9 @@ export const starterPassiveAbilities = { [Species.RELLOR]: Abilities.MAGIC_GUARD, [Species.FLITTLE]: Abilities.COMPETITIVE, [Species.TINKATINK]: Abilities.HUGE_POWER, - [Species.WIGLETT]: Abilities.STORM_DRAIN, + [Species.WIGLETT]: Abilities.STURDY, [Species.BOMBIRDIER]: Abilities.UNAWARE, - [Species.FINIZEN]: Abilities.LIQUID_VOICE, + [Species.FINIZEN]: Abilities.IRON_FIST, [Species.VAROOM]: Abilities.SPEED_BOOST, [Species.CYCLIZAR]: Abilities.PROTEAN, [Species.ORTHWORM]: Abilities.HEATPROOF, @@ -3725,13 +3725,13 @@ export const starterPassiveAbilities = { [Species.ALOLA_RATTATA]: Abilities.CHEEK_POUCH, [Species.ALOLA_SANDSHREW]: Abilities.ICE_BODY, [Species.ALOLA_VULPIX]: Abilities.ICE_BODY, - [Species.ALOLA_DIGLETT]: Abilities.CUTE_CHARM, + [Species.ALOLA_DIGLETT]: Abilities.STURDY, [Species.ALOLA_MEOWTH]: Abilities.UNNERVE, [Species.ALOLA_GEODUDE]: Abilities.ELECTROMORPHOSIS, [Species.ALOLA_GRIMER]: Abilities.MERCILESS, [Species.ETERNAL_FLOETTE]: Abilities.MAGIC_GUARD, [Species.GALAR_MEOWTH]: Abilities.SUPER_LUCK, - [Species.GALAR_PONYTA]: Abilities.MAGIC_GUARD, + [Species.GALAR_PONYTA]: Abilities.PIXILATE, [Species.GALAR_SLOWPOKE]: Abilities.POISON_TOUCH, [Species.GALAR_FARFETCHD]: Abilities.SUPER_LUCK, [Species.GALAR_ARTICUNO]: Abilities.SERENE_GRACE, From ed24e03a6f79c3641295d4dc2c2d769a628c63f8 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Fri, 3 May 2024 19:35:07 -0500 Subject: [PATCH 108/110] Fix Groudon's passive Changed from Flame Body to Protosynthesis, the original change wasn't discussed enough. --- src/data/pokemon-species.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index a045fe2292f..d118adc0fd8 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -3372,7 +3372,7 @@ export const starterPassiveAbilities = { [Species.LATIAS]: Abilities.SOUL_HEART, [Species.LATIOS]: Abilities.TINTED_LENS, [Species.KYOGRE]: Abilities.HYDRATION, - [Species.GROUDON]: Abilities.FLAME_BODY, + [Species.GROUDON]: Abilities.PROTOSYNTHESIS, [Species.RAYQUAZA]: Abilities.UNNERVE, [Species.JIRACHI]: Abilities.COMATOSE, [Species.DEOXYS]: Abilities.PROTEAN, From e02b85629f833f4a0c408d1d82c3c22cb478c807 Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Fri, 3 May 2024 19:47:28 -0500 Subject: [PATCH 109/110] Fix Enemy Counter Moves The AI couldn't decide who to target with CounterDamageAttr moves which don't need a target. This change makes an exception. Now functions the same as when the player selects one of these moves. --- src/field/pokemon.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 909d255eef8..27728680c5f 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4,7 +4,7 @@ import { Variant, VariantSet, variantColorCache } from '#app/data/variant'; import { variantData } from '#app/data/variant'; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info'; import { Moves } from "../data/enums/moves"; -import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveTypeAttr, VariableMoveCategoryAttr } from "../data/move"; +import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveTypeAttr, VariableMoveCategoryAttr, CounterDamageAttr } from "../data/move"; import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from '../data/pokemon-species'; import * as Utils from '../utils'; import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from '../data/type'; @@ -2731,6 +2731,10 @@ export class EnemyPokemon extends Pokemon { let targetScores: integer[] = []; for (let mt of moveTargets[move.id]) { + // Prevent a target score from being calculated when there isn't a target + if (mt === -1) + break; + const target = this.scene.getField()[mt]; let targetScore = move.getUserBenefitScore(this, target, move) + move.getTargetBenefitScore(this, target, move) * (mt < BattlerIndex.ENEMY === this.isPlayer() ? 1 : -1); if (move.name.endsWith(' (N)') || !move.applyConditions(this, target, move)) @@ -2801,8 +2805,14 @@ export class EnemyPokemon extends Pokemon { return scoreA < scoreB ? 1 : scoreA > scoreB ? -1 : 0; }); - if (!sortedBenefitScores.length) + if (!sortedBenefitScores.length) { + // Set target to -1 when using a counter move + // This is the same as when the player does so + if (!!move.findAttr(attr => attr instanceof CounterDamageAttr)) + return [-1]; + return []; + } let targetWeights = sortedBenefitScores.map(s => s[1]); const lowestWeight = targetWeights[targetWeights.length - 1]; From 4163005f122e886feef1168df73c0aa6c58b0393 Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+TempsRay@users.noreply.github.com> Date: Fri, 3 May 2024 22:10:40 -0400 Subject: [PATCH 110/110] Implement Forewarn, Frisk, and BattlerTags for Magnet Rise (WIP) (#241) * Implement Forewarn, Frisk, and BattlerTags for Magnet Rise (WIP) --- src/data/ability.ts | 51 ++++++++++++++++++++++++++++-- src/data/battler-tags.ts | 15 +++++++++ src/data/enums/battler-tag-type.ts | 3 +- src/data/move.ts | 4 +++ 4 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 7ac3e721837..88695e23f3f 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -1785,6 +1785,53 @@ function getAnticipationCondition(): AbAttrCondition { }; } +export class ForewarnAbAttr extends PostSummonAbAttr { + constructor() { + super(true); + } + + applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + let maxPowerSeen = 0; + let maxMove = ""; + let movePower = 0; + for (let opponent of pokemon.getOpponents()) { + for (let move of opponent.moveset) { + if (move.getMove() instanceof StatusMove) { + movePower = 1; + } else if (move.getMove().findAttr(attr => attr instanceof OneHitKOAttr)) { + movePower = 150; + } else if (move.getMove().id === Moves.COUNTER || move.getMove().id === Moves.MIRROR_COAT || move.getMove().id === Moves.METAL_BURST) { + movePower = 120; + } else if (move.getMove().power === -1) { + movePower = 80; + } else { + movePower = move.getMove().power; + } + + if (movePower > maxPowerSeen) { + maxPowerSeen = movePower; + maxMove = move.getName(); + } + } + } + pokemon.scene.queueMessage(getPokemonMessage(pokemon, " was forewarned about " + maxMove + "!")); + return true; + } +} + +export class FriskAbAttr extends PostSummonAbAttr { + constructor() { + super(true); + } + + applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + for (let opponent of pokemon.getOpponents()) { + pokemon.scene.queueMessage(getPokemonMessage(pokemon, " frisked " + opponent.name + "\'s " + opponent.getAbility().name + "!")); + } + return true; + } +} + export class PostWeatherChangeAbAttr extends AbAttr { applyPostWeatherChange(pokemon: Pokemon, passive: boolean, weather: WeatherType, args: any[]): boolean { return false; @@ -2854,7 +2901,7 @@ export function initAbilities() { new Ability(Abilities.ANTICIPATION, 4) .conditionalAttr(getAnticipationCondition(), PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, ' shuddered!')), new Ability(Abilities.FOREWARN, 4) - .unimplemented(), + .attr(ForewarnAbAttr), new Ability(Abilities.UNAWARE, 4) .attr(IgnoreOpponentStatChangesAbAttr) .ignorable(), @@ -2883,7 +2930,7 @@ export function initAbilities() { new Ability(Abilities.HONEY_GATHER, 4) .unimplemented(), new Ability(Abilities.FRISK, 4) - .unimplemented(), + .attr(FriskAbAttr), new Ability(Abilities.RECKLESS, 4) .attr(MovePowerBoostAbAttr, (user, target, move) => move.getAttrs(RecoilAttr).length && move.id !== Moves.STRUGGLE, 1.2), new Ability(Abilities.MULTITYPE, 4) diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 8ff684394ec..183306d5066 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -984,6 +984,19 @@ export class HideSpriteTag extends BattlerTag { } } +export class TypeImmuneTag extends BattlerTag { + public immuneType: Type; + constructor(tagType: BattlerTagType, sourceMove: Moves, immuneType: Type, length: number) { + super(tagType, BattlerTagLapseType.TURN_END, 1, sourceMove); + } +} + +export class MagnetRisenTag extends TypeImmuneTag { + constructor(tagType: BattlerTagType, sourceMove: Moves) { + super(tagType, sourceMove, Type.GROUND, 5); + } +} + export class TypeBoostTag extends BattlerTag { public boostedType: Type; public boostValue: number; @@ -1211,6 +1224,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourc return new CursedTag(sourceId); case BattlerTagType.CHARGED: return new TypeBoostTag(tagType, sourceMove, Type.ELECTRIC, 2, true); + case BattlerTagType.MAGNET_RISEN: + return new MagnetRisenTag(tagType, sourceMove); case BattlerTagType.NONE: default: return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); diff --git a/src/data/enums/battler-tag-type.ts b/src/data/enums/battler-tag-type.ts index 7a9f6ba8bb2..d18ccf1c52f 100644 --- a/src/data/enums/battler-tag-type.ts +++ b/src/data/enums/battler-tag-type.ts @@ -54,5 +54,6 @@ export enum BattlerTagType { SALT_CURED = "SALT_CURED", CURSED = "CURSED", CHARGED = "CHARGED", - GROUNDED = "GROUNDED" + GROUNDED = "GROUNDED", + MAGNET_RISEN = "MAGNET_RISEN" } diff --git a/src/data/move.ts b/src/data/move.ts index 958588f7af4..0fedea1ec0e 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -4895,6 +4895,10 @@ export function initMoves() { new SelfStatusMove(Moves.AQUA_RING, Type.WATER, -1, 20, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.AQUA_RING, true, true), new SelfStatusMove(Moves.MAGNET_RISE, Type.ELECTRIC, -1, 10, -1, 0, 4) + .attr(AddBattlerTagAttr, BattlerTagType.MAGNET_RISEN, true, true) + .condition((user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY) && + !user.getTag(BattlerTagType.IGNORE_FLYING) && !user.getTag(BattlerTagType.INGRAIN) && + !user.getTag(BattlerTagType.MAGNET_RISEN)) .unimplemented(), new AttackMove(Moves.FLARE_BLITZ, Type.FIRE, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 4) .attr(RecoilAttr, false, 0.33)