From 8046b99b753df7f68fef9f3527ad6ba141efdc30 Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Sun, 15 Sep 2024 13:06:22 -0400 Subject: [PATCH 01/38] [Refactor] Refactor code for Grassy Terrain halving the power of Earthquake, Magnitude, and Bulldoze (#4263) * EQ, magnitude, and bulldoze do half damage in grassy terrain * Fix more styling issues in grassy glide * lol unit tests * Add test :pikastare: --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/move.ts | 9 ++--- src/test/arena/grassy_terrain.test.ts | 56 +++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 src/test/arena/grassy_terrain.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index 732a1feea0c..10c98e0a7f7 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -813,10 +813,6 @@ export default class Move implements Localizable { power.value *= typeBoost.boostValue; } - if (source.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() && this.type === Type.GROUND && this.moveTarget === MoveTarget.ALL_NEAR_OTHERS) { - power.value /= 2; - } - applyMoveAttrs(VariablePowerAttr, source, target, this, power); source.scene.applyModifiers(PokemonMultiHitModifier, source.isPlayer(), source, new Utils.IntegerHolder(0), power); @@ -6956,6 +6952,7 @@ export function initMoves() { .makesContact(false), new AttackMove(Moves.EARTHQUAKE, Type.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1) .attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true) + .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), new AttackMove(Moves.FISSURE, Type.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) @@ -7349,6 +7346,7 @@ export function initMoves() { new AttackMove(Moves.MAGNITUDE, Type.GROUND, MoveCategory.PHYSICAL, -1, 100, 30, -1, 0, 2) .attr(PreMoveMessageAttr, magnitudeMessageFunc) .attr(MagnitudePowerAttr) + .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY ? 0.5 : 1) .attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), @@ -8223,6 +8221,7 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.BULLDOZE, Type.GROUND, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) + .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), new AttackMove(Moves.FROST_BREATH, Type.ICE, MoveCategory.SPECIAL, 60, 90, 10, 100, 0, 5) @@ -9112,7 +9111,7 @@ export function initMoves() { .condition(failIfDampCondition) .makesContact(false), new AttackMove(Moves.GRASSY_GLIDE, Type.GRASS, MoveCategory.PHYSICAL, 55, 100, 20, -1, 0, 8) - .attr(IncrementMovePriorityAttr, (user, target, move) =>user.scene.arena.getTerrainType()===TerrainType.GRASSY&&user.isGrounded()), + .attr(IncrementMovePriorityAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && user.isGrounded()), new AttackMove(Moves.RISING_VOLTAGE, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.ELECTRIC && target.isGrounded() ? 2 : 1), new AttackMove(Moves.TERRAIN_PULSE, Type.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 8) diff --git a/src/test/arena/grassy_terrain.test.ts b/src/test/arena/grassy_terrain.test.ts new file mode 100644 index 00000000000..e8064676741 --- /dev/null +++ b/src/test/arena/grassy_terrain.test.ts @@ -0,0 +1,56 @@ +import { allMoves } from "#app/data/move"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Arena - Grassy Terrain", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + const TIMEOUT = 20 * 1000; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .disableCrits() + .enemyLevel(30) + .enemySpecies(Species.SNORLAX) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH) + .moveset([Moves.GRASSY_TERRAIN, Moves.EARTHQUAKE]) + .ability(Abilities.BALL_FETCH); + }); + + it("halves the damage of Earthquake", async () => { + await game.classicMode.startBattle([Species.FEEBAS]); + + const eq = allMoves[Moves.EARTHQUAKE]; + vi.spyOn(eq, "calculateBattlePower"); + + game.move.select(Moves.EARTHQUAKE); + await game.toNextTurn(); + + expect(eq.calculateBattlePower).toHaveReturnedWith(100); + + game.move.select(Moves.GRASSY_TERRAIN); + await game.toNextTurn(); + + game.move.select(Moves.EARTHQUAKE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(eq.calculateBattlePower).toHaveReturnedWith(50); + }, TIMEOUT); +}); From 92e95df441a11ef20e99caf4a8175df2b5484624 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sun, 15 Sep 2024 19:25:51 +0200 Subject: [PATCH 02/38] Update src/locales/es/mystery-encounters/dancing-lessons-dialogue.json Co-authored-by: DanStevensonx <114961842+DanStevensonx@users.noreply.github.com> --- .../dancing-lessons-dialogue.json | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/locales/es/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/es/mystery-encounters/dancing-lessons-dialogue.json index 8e2883ecb16..26adaa5b62b 100644 --- a/src/locales/es/mystery-encounters/dancing-lessons-dialogue.json +++ b/src/locales/es/mystery-encounters/dancing-lessons-dialogue.json @@ -1,27 +1,27 @@ { - "intro": "An {{oricorioName}} dances sadly alone, without a partner.", - "title": "Dancing Lessons", - "description": "The {{oricorioName}} doesn't seem aggressive, if anything it seems sad.\n\nMaybe it just wants someone to dance with...", - "query": "What will you do?", + "intro": "Un {{oricorioName}} baila tristemente solo, sin pareja.", + "title": "Clases de baile", + "description": "El {{oricorioName}} no parece agresivo, más bien parece triste.\nTal vez solo quiera alguien con quien bailar...", + "query": "¿Qué harás?", "option": { "1": { - "label": "Battle It", - "tooltip": "(-) Tough Battle\n(+) Gain a Baton", - "selected": "The {{oricorioName}} is distraught and moves to defend itself!", - "boss_enraged": "The {{oricorioName}}'s fear boosted its stats!" + "label": "Enfrentarse", + "tooltip": "(-) Batalla Ardua\n(+) Obtén el objeto Relevo", + "selected": "¡El {{oricorioName}} está angustiado e intenta defenderse!", + "boss_enraged": "¡El miedo del {{oricorioName}} aumentó sus estadísticas!" }, "2": { - "label": "Learn Its Dance", - "tooltip": "(+) Teach a Pokémon Revelation Dance", - "selected": "You watch the {{oricorioName}} closely as it performs its dance...$@s{level_up_fanfare}Your {{selectedPokemon}} learned from the {{oricorioName}}!" + "label": "Aprende su danza", + "tooltip": "(+) Enseña a un Pokémon Danza despertar", + "selected": "Observas atentamente al {{oricorioName}} mientras realiza su danza…$@s{level_up_fanfare}¡Tu {{selectedPokemon}} aprendió del {{oricorioName}}!" }, "3": { - "label": "Show It a Dance", - "tooltip": "(-) Teach the {{oricorioName}} a Dance Move\n(+) The {{oricorioName}} Will Like You", - "disabled_tooltip": "Your Pokémon need to know a Dance move for this.", - "select_prompt": "Select a Dance type move to use.", - "selected": "The {{oricorioName}} watches in fascination as\n{{selectedPokemon}} shows off {{selectedMove}}!$It loves the display!$@s{level_up_fanfare}The {{oricorioName}} wants to join your party!" + "label": "Muéstrale una danza", + "tooltip": "(-) Enseña al {{oricorioName}} un movimiento de danza\n(+) Le gustaras al {{oricorioName}}", + "disabled_tooltip": "Tus Pokémon necesitan conocer un movimiento de danza para esto.", + "select_prompt": "Selecciona un movimiento de tipo danza para usar.", + "selected": "¡El {{oricorioName}} observa fascinado mientras\n{{selectedPokemon}} muestra {{selectedMove}}!$¡Le encanta la exhibición!$@s{level_up_fanfare}¡El {{oricorioName}} quiere unirse a tu equipo!" } }, - "invalid_selection": "This Pokémon doesn't know a Dance move" + "invalid_selection": "Este Pokémon no conoce un movimiento de danza" } \ No newline at end of file From bdc92e1370166d4227145f28e433a9bc79a5fc72 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sun, 15 Sep 2024 19:26:11 +0200 Subject: [PATCH 03/38] Update src/locales/es/mystery-encounters/an-offer-you-cant-refuse-dialogue.json Co-authored-by: DanStevensonx <114961842+DanStevensonx@users.noreply.github.com> --- .../mystery-encounters/an-offer-you-cant-refuse-dialogue.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/es/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/es/mystery-encounters/an-offer-you-cant-refuse-dialogue.json index d4e050592d8..17675da5317 100644 --- a/src/locales/es/mystery-encounters/an-offer-you-cant-refuse-dialogue.json +++ b/src/locales/es/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -1,7 +1,7 @@ { "intro": "Te detiene un chico de aspecto rico.", "speaker": "Niño Bien", - "intro_dialogue": "Buenos días a usted.$¡No puedo evitar notar que tu\n{{strongestPokemon}} se ve absolutamente divino!$¡Siempre he querido tener una mascota así!$¡Te pagaría generosamente,\n también te daría este viejo abalorio!", + "intro_dialogue": "Buenos días a usted.$¡No puedo evitar notar que tu\n{{strongestPokemon}} se ve absolutamente divino!$¡Siempre he querido tener un Pokémon así!$¡Te pagaría generosamente,\n también te daría este viejo abalorio!", "title": "Una oferta que no puedes rechazar", "description": "Te están ofreciendo @[TOOLTIP_TITLE]{Amuleto Iris} y {{price, money}} por tu {{strongestPokemon}}!¡Es un trato extremadamente bueno, pero ¿realmente puedes soportar separarte de un miembro tan fuerte de tu equipo?", "query": "¿Qué harás?", From fb929478c0ea3d4e685fb0ae06ca100c07a2ef08 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sun, 15 Sep 2024 19:26:18 +0200 Subject: [PATCH 04/38] Update src/locales/es/mystery-encounters/absolute-avarice-dialogue.json Co-authored-by: DanStevensonx <114961842+DanStevensonx@users.noreply.github.com> --- .../es/mystery-encounters/absolute-avarice-dialogue.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/es/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/es/mystery-encounters/absolute-avarice-dialogue.json index c288c3d7bdc..f3700c1d60b 100644 --- a/src/locales/es/mystery-encounters/absolute-avarice-dialogue.json +++ b/src/locales/es/mystery-encounters/absolute-avarice-dialogue.json @@ -6,7 +6,7 @@ "option": { "1": { "label": "Combatir", - "tooltip": "(-) Batalla Difícil\n(+) Recompensas de su Alijo de Bayas", + "tooltip": "(-) Batalla Ardua\n(+) Recompensas de su Alijo de Bayas", "selected": "El {{greedentName}} llena sus mejillas y se prepara para la batalla!", "boss_enraged": "¡El feroz amor de {{greedentName}} por la comida lo tiene enfurecido!", "food_stash": "¡Parece que el {{greedentName}} estaba protegiendo un enorme alijo de comida!$@s{item_fanfare}¡Cada Pokémon en tu grupo obtiene una {{foodReward}}!" From 3f2188e7601f43c6e7742aafa37919561c79d85c Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sun, 15 Sep 2024 19:26:26 +0200 Subject: [PATCH 05/38] Update src/locales/es/mystery-encounters/a-trainers-test-dialogue.json Co-authored-by: DanStevensonx <114961842+DanStevensonx@users.noreply.github.com> --- .../es/mystery-encounters/a-trainers-test-dialogue.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/es/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/es/mystery-encounters/a-trainers-test-dialogue.json index 5341755531d..ec781abcd5a 100644 --- a/src/locales/es/mystery-encounters/a-trainers-test-dialogue.json +++ b/src/locales/es/mystery-encounters/a-trainers-test-dialogue.json @@ -31,11 +31,11 @@ "option": { "1": { "label": "Aceptar el Desafío", - "tooltip": "(-) Batalla Difícil\n(+) Obtén un @[TOOLTIP_TITLE]{Very Rare Egg}" + "tooltip": "(-) Batalla Ardua\n(+) Obtén un @[TOOLTIP_TITLE]{Huevo muy raro}" }, "2": { "label": "Rechazar el Desafío", - "tooltip": "(+) Equipo Curado\n(+) Obtén un @[TOOLTIP_TITLE]{Egg}" + "tooltip": "(+) Equipo Curado\n(+) Obtén un @[TOOLTIP_TITLE]{Huevo}" } }, "eggTypes": { From 3d51b42d3b09855d6ee704417cbe2fb55131ec39 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sun, 15 Sep 2024 19:26:34 +0200 Subject: [PATCH 06/38] Update src/locales/es/mystery-encounters/an-offer-you-cant-refuse-dialogue.json Co-authored-by: DanStevensonx <114961842+DanStevensonx@users.noreply.github.com> --- .../mystery-encounters/an-offer-you-cant-refuse-dialogue.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/es/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/es/mystery-encounters/an-offer-you-cant-refuse-dialogue.json index 17675da5317..07396cbc3b2 100644 --- a/src/locales/es/mystery-encounters/an-offer-you-cant-refuse-dialogue.json +++ b/src/locales/es/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -8,7 +8,7 @@ "option": { "1": { "label": "Aceptar el trato", - "tooltip": "(-) Pierdes a {{strongestPokemon}}\n(+) Obtén un @[TOOLTIP_TITLE]{Shiny Charm}\n(+) Obtén {{price, money}}", + "tooltip": "(-) Pierdes a {{strongestPokemon}}\n(+) Obtén un @[TOOLTIP_TITLE]{Amuleto Iris}\n(+) Obtén {{price, money}}", "selected": "¡Maravilloso!@d{32} ¡Ven, John!, {{strongestPokemon}}!$¡Es hora de mostrarte a todos en el club náutico!$¡Estarán tan celosos!" }, "2": { From 2891c961241f9849ac337f4ab8efa7d07f06c39d Mon Sep 17 00:00:00 2001 From: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Date: Sun, 15 Sep 2024 22:14:13 +0200 Subject: [PATCH 07/38] Update src/locales/de/mystery-encounters/trash-to-treasure-dialogue.json --- .../de/mystery-encounters/trash-to-treasure-dialogue.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/locales/de/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/de/mystery-encounters/trash-to-treasure-dialogue.json index 36d5ca5d303..195bd8c9b87 100644 --- a/src/locales/de/mystery-encounters/trash-to-treasure-dialogue.json +++ b/src/locales/de/mystery-encounters/trash-to-treasure-dialogue.json @@ -7,7 +7,8 @@ "1": { "label": "Nach Wertsachen suchen", "tooltip": "(-) Keine Heilitems in Läden\n(+) Erhalte tolle Items", - "selected": "Du arbeitest dich durch den Müllhaufen und wirst von Dreck überzogen.$Kein respektabler Ladenbesitzer wird dir in deinem schmutzigen Zustand etwas verkaufen!$Du musst ohne Heilitems auskommen.$Aber du hast einige unglaubliche Items im Müll gefunden!" + "selected": "Du arbeitest dich durch den Müllhaufen und wirst von Dreck überzogen.$Kein respektabler Ladenbesitzer wird dir in deinem schmutzigen Zustand etwas verkaufen!$Aber es gibt ja auch andere... weniger respektable.$Natürlich verlangen sie höhere Preise.$Aber du hast einige unglaubliche Items im Müll gefunden!" + }, "2": { "label": "Genauer untersuchen", From 3da63aa064bbbb63957bd72054bd8a6c077e9182 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sun, 15 Sep 2024 22:19:54 +0200 Subject: [PATCH 08/38] Update trash-to-treasure-dialogue.json --- .../fr/mystery-encounters/trash-to-treasure-dialogue.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/fr/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/fr/mystery-encounters/trash-to-treasure-dialogue.json index 99d84d894fd..7a0a0a7a3a9 100644 --- a/src/locales/fr/mystery-encounters/trash-to-treasure-dialogue.json +++ b/src/locales/fr/mystery-encounters/trash-to-treasure-dialogue.json @@ -7,7 +7,7 @@ "1": { "label": "Le fouiller", "tooltip": "(-) Aucun objet de soin en boutique\n(+) Gain d’objets exceptionnels", - "selected": "Vous barbotez dans le tas d’ordures et\nvous vous couvrez de crasse.$Vu votre état, il n’y a vraiment plus aucune chance qu’une boutique accpete de vous donner quoi que ce soit !$Vous aller devoir vous débrouiller sans objet de soin.$Mais ça valait le coup, car ce que vous avez trouvé\ndans les ordures est incroyable !" + "selected": "Vous barbotez dans le tas d’ordures et\nvous vous couvrez de crasse.$Vu votre état, la prochaine boutique va pour sûr\nfortement gonfler ses prix pour vous forcer à fuir !$Mais ça valait le coup, car ce que vous avez trouvé\ndans les ordures est incroyable !" }, "2": { "label": "Enquêter sur le tas", From 7f4175adfcaaaebbc421abc646c5ade99e29e73f Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sun, 15 Sep 2024 22:50:14 +0200 Subject: [PATCH 09/38] Update trash-to-treasure-dialogue.json --- .../fr/mystery-encounters/trash-to-treasure-dialogue.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/fr/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/fr/mystery-encounters/trash-to-treasure-dialogue.json index 7a0a0a7a3a9..fb39a1d12a1 100644 --- a/src/locales/fr/mystery-encounters/trash-to-treasure-dialogue.json +++ b/src/locales/fr/mystery-encounters/trash-to-treasure-dialogue.json @@ -6,7 +6,7 @@ "option": { "1": { "label": "Le fouiller", - "tooltip": "(-) Aucun objet de soin en boutique\n(+) Gain d’objets exceptionnels", + "tooltip": "(-) Prix de la boutique triplés\n(+) Gain d’objets exceptionnels", "selected": "Vous barbotez dans le tas d’ordures et\nvous vous couvrez de crasse.$Vu votre état, la prochaine boutique va pour sûr\nfortement gonfler ses prix pour vous forcer à fuir !$Mais ça valait le coup, car ce que vous avez trouvé\ndans les ordures est incroyable !" }, "2": { From c042851e6bedcc3d49217d62754b1a0edf3fb0a5 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sun, 15 Sep 2024 22:59:24 +0200 Subject: [PATCH 10/38] Update trash-to-treasure-dialogue.json --- .../de/mystery-encounters/trash-to-treasure-dialogue.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/de/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/de/mystery-encounters/trash-to-treasure-dialogue.json index 195bd8c9b87..da744ccb697 100644 --- a/src/locales/de/mystery-encounters/trash-to-treasure-dialogue.json +++ b/src/locales/de/mystery-encounters/trash-to-treasure-dialogue.json @@ -6,7 +6,7 @@ "option": { "1": { "label": "Nach Wertsachen suchen", - "tooltip": "(-) Keine Heilitems in Läden\n(+) Erhalte tolle Items", + "tooltip": "(-) Heilitems kosten ab jetzt das Dreifache\n(+) Erhalte tolle Items", "selected": "Du arbeitest dich durch den Müllhaufen und wirst von Dreck überzogen.$Kein respektabler Ladenbesitzer wird dir in deinem schmutzigen Zustand etwas verkaufen!$Aber es gibt ja auch andere... weniger respektable.$Natürlich verlangen sie höhere Preise.$Aber du hast einige unglaubliche Items im Müll gefunden!" }, @@ -17,4 +17,4 @@ "selected_2": "Der Müll bewegt sich! Es war nicht nur Müll, es war ein Pokémon!" } } -} \ No newline at end of file +} From b0ba3cbdb3bfce3f8867e0680c17eee5d323597f Mon Sep 17 00:00:00 2001 From: Lugiad Date: Mon, 16 Sep 2024 02:12:15 +0200 Subject: [PATCH 11/38] Update src/locales/es/mystery-encounters/dark-deal-dialogue.json Co-authored-by: DanStevensonx <114961842+DanStevensonx@users.noreply.github.com> --- .../dark-deal-dialogue.json | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/locales/es/mystery-encounters/dark-deal-dialogue.json b/src/locales/es/mystery-encounters/dark-deal-dialogue.json index 3086ebb0f9b..19b5c5c5b78 100644 --- a/src/locales/es/mystery-encounters/dark-deal-dialogue.json +++ b/src/locales/es/mystery-encounters/dark-deal-dialogue.json @@ -1,24 +1,24 @@ { - "intro": "A strange man in a tattered coat\nstands in your way...", - "speaker": "Shady Guy", - "intro_dialogue": "Hey, you!$I've been working on a new device\nto bring out a Pokémon's latent power!$It completely rebinds the Pokémon's atoms\nat a molecular level into a far more powerful form.$Hehe...@d{64} I just need some sac-@d{32}\nErr, test subjects, to prove it works.", - "title": "Dark Deal", - "description": "The disturbing fellow holds up some Pokéballs.\n\"I'll make it worth your while! You can have these strong Pokéballs as payment, All I need is a Pokémon from your team! Hehe...\"", - "query": "What will you do?", + "intro": "Un hombre extraño con un abrigo andrajoso se interpone en tu camino...", + "speaker": "Tipo sombrío", + "intro_dialogue": "¡Oye, tú!$He estado trabajando en un nuevo dispositivo\npara sacar el poder latente de un Pokémon!$Reorganiza completamente los átomos del Pokémon\na nivel molecular en una forma mucho más poderosa.$Jeje…@d{64} Solo necesito algunos sac-@d{32}\nEh, sujetos de prueba, para demostrar que funciona.", + "title": "Pacto Oscuro", + "description": "El tipo inquietante sostiene unas Pokéballs.\n\"¡Te lo compensaré! Puedes tener estas Pokéballs fuertes como pago. ¡Todo lo que necesito es un Pokémon de tu equipo! Jeje...", + "query": "¿Qué harás?", "option": { "1": { - "label": "Accept", - "tooltip": "(+) 5 Rogue Balls\n(?) Enhance a Random Pokémon", - "selected_dialogue": "Let's see, that {{pokeName}} will do nicely!$Remember, I'm not responsible\nif anything bad happens!@d{32} Hehe...", - "selected_message": "The man hands you 5 Rogue Balls.${{pokeName}} hops into the strange machine...$Flashing lights and weird noises\nstart coming from the machine!$...@d{96} Something emerges\nfrom the device, raging wildly!" + "label": "Acceptar", + "tooltip": "(+) 5 Rogue Balls\n(?) Mejora un Pokémon aleatorio", + "selected_dialogue": "Veamos, ¡Ese {{pokeName}} servirá muy bien!$Recuerda, no soy responsable\nsi algo malo sucede!@d{32} Jeje...", + "selected_message": "El hombre te entrega 5 Rogue Balls.${{pokeName}} entra dentro de la máquina...$¡Luces intermitentes y ruidos extraños\ncomienzan a salir de la máquina!$...@d{96} Algo emerge\ndel dispositivo, ¡furiosamente!" }, "2": { - "label": "Refuse", - "tooltip": "(-) No Rewards", - "selected": "Not gonna help a poor fellow out?\nPah!" + "label": "Rechazar", + "tooltip": "(-) Ninguna Recompensa", + "selected": "¿No vas a ayudar a un pobre hombre?\n¡Bah!" } }, - "outro": "After the harrowing encounter,\nyou collect yourself and depart." + "outro": "Después del encuentro angustioso, te recuperas y te marchas." } \ No newline at end of file From 2f33349a9f74094a176c51139d4762648c2af038 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Mon, 16 Sep 2024 02:12:24 +0200 Subject: [PATCH 12/38] Update src/locales/es/mystery-encounters/dancing-lessons-dialogue.json Co-authored-by: DanStevensonx <114961842+DanStevensonx@users.noreply.github.com> --- src/locales/es/mystery-encounters/dancing-lessons-dialogue.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/es/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/es/mystery-encounters/dancing-lessons-dialogue.json index 26adaa5b62b..c4494e3efa8 100644 --- a/src/locales/es/mystery-encounters/dancing-lessons-dialogue.json +++ b/src/locales/es/mystery-encounters/dancing-lessons-dialogue.json @@ -23,5 +23,5 @@ "selected": "¡El {{oricorioName}} observa fascinado mientras\n{{selectedPokemon}} muestra {{selectedMove}}!$¡Le encanta la exhibición!$@s{level_up_fanfare}¡El {{oricorioName}} quiere unirse a tu equipo!" } }, - "invalid_selection": "Este Pokémon no conoce un movimiento de danza" + "invalid_selection": "Este Pokémon no conoce ningún movimiento de danza" } \ No newline at end of file From 880a46b65942d7e537b52ab4c63441642110d486 Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Sun, 15 Sep 2024 22:00:47 -0400 Subject: [PATCH 13/38] [Sprite] Fix Lycanroc Midday (#4274) * [Sprite] Midday Lycanroc back * [Sprite] Midday Lycanroc shiny front * [Sprite] Midday Lycanroc shiny back --- public/images/pokemon/exp/back/745.png | Bin 2859 -> 2997 bytes public/images/pokemon/exp/back/shiny/745.json | 670 ++++++----------- public/images/pokemon/exp/back/shiny/745.png | Bin 5983 -> 2997 bytes public/images/pokemon/exp/shiny/745.json | 691 +++++++++++++----- public/images/pokemon/exp/shiny/745.png | Bin 3117 -> 4748 bytes 5 files changed, 754 insertions(+), 607 deletions(-) diff --git a/public/images/pokemon/exp/back/745.png b/public/images/pokemon/exp/back/745.png index 46a354be8a4b0759b22735a04315106a04bd4a99..f49491351649a2493638dc51f159dcc6f570918f 100644 GIT binary patch delta 2991 zcmV;g3sCf{7PS|UB!2;OQb$4nuFf3k0000dP)t-s0001CP(pxjUhL@C$Frv=92bOd zQDI0n0001tT1v=~eB-;PbvQS+zWs6l000eiQchC<|NsC0|NsC0|NsC0Ed)WW000Xk zNkl(>AIsh3`DVkTtV*pKksgO)P1^~vt{>yGe_HI+=C;a%It^~C`Gd9- za$7fJv;Q=?f!chVpwr@}s%_j>HHl4X8~FKr_MPvibha5f4Q|RpSU0KuLmt}gbMBv( zD#0Y3me|Ten}4qQU*bF#IQRYY(;9k$PLG@UlW|i8`eC_AGm_bN=}Y0BA4F zObF>Vbg!&>NFhKr=v-T?m+t4 z&+|y#)GS4~GX+ARPs^X3r^Ah0b2Ix%&|moj=Qpj9h>x~t{!4=nJ9N$Ms*K-P)bW32 zcBxD_e*wD|V(BnLr!~sm_BH*4a#Ma`bCJ+~{&E$d4m_3)H#NiUdNnqS%7leho0w~8 zQx+}6(0}Ofy;NOe=!}HU-1h7Iy4hpNx_!S;lhNfAaG0U8 z)pdqKCvLDyb0DqPsrKsZ-B?;iol#Fesyd^oBexUcE5FsfciGXQ_4O!UXSmd{oAQ%( zF4hgy-gw&yLPnq3HonYgYQ*l;I|_)?T-3vl_J1=U073=q*v^wJ!w!x3QFd+!^$B%a zfh&NWdv?kYZuB0L?n|rYckx>X^|+qZ{+qhtqo+-o3uU|er#ruQagz4 z0Dlu%l)$mY8WU%0iw|W^0k@8oIiTlyiI+ODvzJk%U92Ml8U3XPk&J}aFYwGwGVRPslC(?CAtf1o zFpZ{W7pZKAP5#%3n4|kvxl~7DV?`qE3V&|MBJ2ugk&fQj+;hVHo;=`Cw{&;vO%D8k z2WjYnoi(fLxVdll+&2*B2cGNG_D-fhcUGj5oiW3$LLFh}?lQuyytg(Wt5fwt%MF1gGS-EOJidXv7Z)u>2S zJ71!#v3_4mWn}bdIh|_j4f?%hlYgBpQQlZ;^3m+)4XQ{5J2la)v2gtepueK@mj3Nx zvHMeBp_}aT#)A2|c1L*wj{(r-Eo!{O6 z6T5$Y%)?9H1XYLeQsHhT-UL;L@lxUL?Op*@Z__cn6dVfi0;n3mwS#!6WhZASF;W}2 zb_!k!+iRezg==TvrPF{{w%0a-m!in$!=P#_URsARp9NK;(0Fv8uICiJPTB?DR@ z(mKr8XlRnIr2$i*Qhy`F=P;*=Gr=TXOLMC6!9l}}CiH`xYSP*=r^*ILCvmD|>ZG-0 zP8DM(F$A;9VD_XgbE>NPEu1P%d=AHMV1kPA-6U4A6Qtf`ZdEyq1sxGBrYc8ZJTj0G(aP%22u9OVrR~YoF-tWa85t{3KmFvA3@hpA&ogCW84g z%{y(pO!H0~lY0B^qNKA%z-pUBo`Kz*)_x)zc_E68c4L#??>1cXBJo;F!`GsOjrMZ@F{!#HMdGy< zTT0eqqjE*D(eCv<$tsDUNW9h}h_2NUW-|;M?SEX~vr;8jBvxw)Fi`(mL}H_z3w##* z^cTimq-twPPBrF6Bigfbflup)wN@*;BC%Ra00(Gun#T*i&g2iJAVSZtF@d3cNxpFPEBq6I$FzPg1?4k9Ojr8 zv`QsAsTg?C8{) z3c`(E1ZEK%WyenZj0Z$TQuhS4B4vAs0~p7%rEcLy8)7%4 zzKc|dEn2wI-q=xd*+t6jVnm*trL5(jxi+f!VT{Y)@;F0k9VzTf|jtERso$QJ9YvTSj2;onvjVOEKN> zouRW_!4a#IDH7MtV7dhGYECLo{9V9koq#yYVG0J*rQaPnIg_eHoy-nD#VD?OE%buq lM%AhBe|dUk{H3w5@gGpy8{|JxG(rFX002ovPDHLkV1lYX;41(C delta 2852 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 literal 5983 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 L(pIdIw+j0|ARuq$ diff --git a/public/images/pokemon/exp/shiny/745.json b/public/images/pokemon/exp/shiny/745.json index 6cabccff28d..d0989a1ccd3 100644 --- a/public/images/pokemon/exp/shiny/745.json +++ b/public/images/pokemon/exp/shiny/745.json @@ -1,167 +1,524 @@ -{ - "textures": [ - { - "image": "745.png", - "format": "RGBA8888", - "size": { - "w": 189, - "h": 189 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 65, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 65, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 66, - "h": 57 - }, - "frame": { - "x": 65, - "y": 0, - "w": 66, - "h": 57 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 64, - "h": 58 - }, - "frame": { - "x": 65, - "y": 57, - "w": 64, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 64, - "h": 57 - }, - "frame": { - "x": 0, - "y": 58, - "w": 64, - "h": 57 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 65, - "h": 56 - }, - "frame": { - "x": 0, - "y": 115, - "w": 65, - "h": 56 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 62, - "h": 58 - }, - "frame": { - "x": 65, - "y": 115, - "w": 62, - "h": 58 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 62, - "h": 58 - }, - "frame": { - "x": 127, - "y": 115, - "w": 62, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:1b95a218abc87c12576165b943d3cb77:4d796dc75302ca2e18ce15e67dcf3f0f:f9304907e03a5223c5bc78c934419106$" - } -} +{ + "textures": [ + { + "image": "745.png", + "format": "RGBA8888", + "size": { + "w": 286, + "h": 286 + }, + "scale": 1, + "frames": [ + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 60, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 60, + "h": 55 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 60, + "h": 55 + }, + "frame": { + "x": 60, + "y": 0, + "w": 60, + "h": 55 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 60, + "h": 55 + }, + "frame": { + "x": 120, + "y": 0, + "w": 60, + "h": 55 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 60, + "h": 55 + }, + "frame": { + "x": 180, + "y": 0, + "w": 60, + "h": 55 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 0, + "y": 55, + "w": 60, + "h": 57 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 60, + "y": 55, + "w": 60, + "h": 57 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 120, + "y": 55, + "w": 60, + "h": 57 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 180, + "y": 55, + "w": 60, + "h": 57 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 180, + "y": 55, + "w": 60, + "h": 57 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 0, + "y": 112, + "w": 60, + "h": 57 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 60, + "y": 112, + "w": 60, + "h": 57 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 120, + "y": 112, + "w": 60, + "h": 57 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 180, + "y": 112, + "w": 60, + "h": 58 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 180, + "y": 112, + "w": 60, + "h": 58 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 0, + "y": 169, + "w": 60, + "h": 58 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 0, + "y": 169, + "w": 60, + "h": 58 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 60, + "y": 169, + "w": 60, + "h": 58 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 120, + "y": 169, + "w": 60, + "h": 58 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 180, + "y": 170, + "w": 60, + "h": 58 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 0, + "y": 227, + "w": 60, + "h": 58 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 0, + "y": 227, + "w": 60, + "h": 58 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 60, + "y": 227, + "w": 60, + "h": 58 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 120, + "y": 227, + "w": 60, + "h": 58 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 180, + "y": 228, + "w": 60, + "h": 58 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:d67741bfb78b7ff0c920c5395dd91fc2:e78172ef76e3b6327173461a595a8a6b:f9304907e03a5223c5bc78c934419106$" + } +} diff --git a/public/images/pokemon/exp/shiny/745.png b/public/images/pokemon/exp/shiny/745.png index 7679c44ba13881947a41cf96c92624f0db570955..c3256cf3f64d028bbac48cdb82b7bee68dd19794 100644 GIT binary patch literal 4748 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 D7VmOK literal 3117 zcmV+|4AS$7P)b}8(I>~Vr|jt0`k#;f{{Bp$73%;100DGTPE!Ct z=GbNc01L56L_t(|+U=YPlH)cEMFml$6>xI@>qgx7MFwTpq|BO{^mLl|A0V~*HMZ@4 zHTEyhCyDN_{VVfn=AG!9>eTsE_g2+^p@#t4{40Wl54b;!=p}x5bulkpov$N&!ad`s zR^5-2GheoO>FRvt{WI?WaIMNt{^w+_Y?t(YjqGQ|;kkO|ZLfKZL&&3IMojdfDeHfrhwQcQ?Ng006+d&kL~bPX7}3cZG;>81eY#SIU!h zD%T1C(e1M=Hs3P$K^>6+yk3X1Z|~uy?7NQxU=kpNVDN-_CvLSF;{dOh+B!-UO6_9P zrU8&M8^HLs5$v5ZBCdVDjl=~aD$PrNXXesVXqW0y0MPDD0B$1a5S*jC8o=6z^Zfw# z@C??yl6TrXXg4l2SpaSS1n}<7e-`hU=-h9`(Unf`SAEuTmw$A%>jsG2>j>u38%22L zm8J;V;Ix%*d&!&-k0XFvKkzpOCcs1Xg)cqA#*Fsnu9!+(-=L4&`{TmAE78|v>)AeH zJ?7p$fr5Q%($`aeVTDoYgns~6KgG<=vWeh$Dn!^Y@Ze#KAP{-3y@l-#L-#rY2ekL#x%&t0n>PrB_8s?N ze;5k){x!;T)z7riyPww<@ehc1A`th!8yt}X(Y?90=HL5-d;1S@OPe0yi|*44n*M1~ z`QC%uzN0<7+LjS^%)j-Fdm+*{q+WZ@{k{vCy<}Apj(rc`5f9xf%xIevcSC%CT|X=Uv(+IAc6`DbkK zy!Qp#b|>!g18$$t)-k@|eU&zR$@_cS`}P-(uL7CW(tR1oB$loYWQq@&rB|cz(qI6q_g`EOA6Z0!CWHY5pVOY#*(jm}^mMUCs zpUA?_0i6K~T)YA2VP97tXjENYdUP$teSy;vzB=0=X8S$KA5y(4W zVFMD#uu{4yAT!usPxAIlSJ(EX8vvcWVSmjD{~illDcu0*0h*a zQVyNcr97s+eX4O}y-x?VTI|Z^@o)fD)=M;@fvmY0)6d%E)=65Q2 zLZf;bbB;zOx(DvmYvNNxAO}oo%o{u>%{>^Hw4{h<#kG5Ax_{EXIWS?fzXSP>xQKqc z;XN9ay7M=J_=rY*lEy61%iH2rcJo{A-+@WLNx~LFw?NjflCTw_d6<+;qmu428!#zO zf~@l-?0Wki;d>Wk{Wb}k!=$Ek2~64+pP^BYhe+5-m~?N$q-6km5PX1y-4=kXi)qvq zN5Q)wE15_-xYhQUX=l|D(3#KI zOSdTZu{dvcR&4;CDbHCk;6Ba1lY4M4=0M!kehq2NfKJ<1ZP43PqqIQIeMpmb`oj7v zmIFFRJZF@>^rw4D?y-2IF)Ac&U8{XjZLm8$XY`rC`?<&B-NvZZ&Z1dI-5v_d^Q{ND z{Cl}K)U(d2GrdVWJg1-EHZX$$_w4sNtDa{C$gI1cL}8()emnP~F)BNaI*U51c7e$xpU6O>=i`U2lN2p)V?$d(eA8rfy8i>#a@4eN}0>J9%v%-f6rPfnJhi1Pm8Ybk zu+^5bHx`}SMnZ^Nkd^5x0HPY$fTjL zx-WyY)TR42NV`!{*uM>={f*!FjoJHA4Z`>jF*=1|oVFRP00000NkvXX Hu0mjfyiFp< From 6c43e970010948bb229a465fa61c70c4d7c73974 Mon Sep 17 00:00:00 2001 From: sodam <66295123+sodaMelon@users.noreply.github.com> Date: Mon, 16 Sep 2024 11:01:07 +0900 Subject: [PATCH 14/38] [Bug] fixed ME event ```trash to treasure``` wrong descriptions of the choices (#4273) * modified script (by ImperialSympathizer) * removed wrong word(healing) * removed wrong word --- .../en/mystery-encounters/trash-to-treasure-dialogue.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/en/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/en/mystery-encounters/trash-to-treasure-dialogue.json index ae6e63ed800..fe2cb54f5b1 100644 --- a/src/locales/en/mystery-encounters/trash-to-treasure-dialogue.json +++ b/src/locales/en/mystery-encounters/trash-to-treasure-dialogue.json @@ -6,8 +6,8 @@ "option": { "1": { "label": "Dig for Valuables", - "tooltip": "(-) Lose Healing Items in Shops\n(+) Gain Amazing Items", - "selected": "You wade through the garbage pile, becoming mired in filth.$There's no way any respectable shopkeepers\nwill sell you anything in your grimy state!$You'll just have to make do without shop healing items.$However, you found some incredible items in the garbage!" + "tooltip": "(-) Items in Shops Cost 3x\n(+) Gain Amazing Items", + "selected": "You wade through the garbage pile, becoming mired in filth.$There's no way any respectable shopkeeper would\nsell you items at the normal rate in your grimy state!$You'll have to pay extra for items now.$However, you found some incredible items in the garbage!" }, "2": { "label": "Investigate Further", From 6c2880dc30e712ff3d756a10193d4973f3a4a218 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Mon, 16 Sep 2024 04:01:44 +0200 Subject: [PATCH 15/38] [Localization] Missing French entries (#4270) * Update battle.json * Update move-trigger.json * Update party-ui-handler.json * Update tutorial.json * Update tutorial.json * Update trainer-names.json * Update menu.json --- src/locales/fr/battle.json | 3 +++ src/locales/fr/menu.json | 2 +- src/locales/fr/move-trigger.json | 3 +++ src/locales/fr/party-ui-handler.json | 4 +++- src/locales/fr/trainer-names.json | 2 +- src/locales/fr/tutorial.json | 2 +- 6 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/locales/fr/battle.json b/src/locales/fr/battle.json index 7b78c963187..5f5e81350e1 100644 --- a/src/locales/fr/battle.json +++ b/src/locales/fr/battle.json @@ -44,7 +44,10 @@ "moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.", "moveNoPP": "Il n’y a plus de PP pour\ncette capacité !", "moveDisabled": "{{moveName}} est sous entrave !", + "canOnlyUseMove": "{{pokemonName}} ne peut utiliser\nque la capacité {{moveName}} !", + "moveCannotBeSelected": "La capacité {{moveName}}\nne peut pas être choisie !", "disableInterruptedMove": "Il y a une entrave sur la capacité {{moveName}}\nde{{pokemonNameWithAffix}} !", + "throatChopInterruptedMove": "Exécu-Son empêche {{pokemonName}}\nd’utiliser la capacité !", "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 !", diff --git a/src/locales/fr/menu.json b/src/locales/fr/menu.json index 277b0f5fd04..35cd06606a7 100644 --- a/src/locales/fr/menu.json +++ b/src/locales/fr/menu.json @@ -46,7 +46,7 @@ "yes": "Oui", "no": "Non", "disclaimer": "AVERTISSEMENT", - "disclaimerDescription": "Ce jeu n’est pas un produit fini et peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait ou non encore être mis à jour ou terminé.", + "disclaimerDescription": "Ce jeu n’est pas un produit fini.\nIl peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait à tout moment cesser d’être mis à jour.", "choosePokemon": "Sélectionnez un Pokémon.", "renamePokemon": "Renommer le Pokémon", "rename": "Renommer", diff --git a/src/locales/fr/move-trigger.json b/src/locales/fr/move-trigger.json index 3704bc90718..6f9d9d4dd63 100644 --- a/src/locales/fr/move-trigger.json +++ b/src/locales/fr/move-trigger.json @@ -7,6 +7,7 @@ "switchedStat": "{{pokemonName}} et sa cible échangent leur {{stat}} !", "sharedGuard": "{{pokemonName}} additionne sa garde à celle de sa cible et redistribue le tout équitablement !", "sharedPower": "{{pokemonName}} additionne sa force à celle de sa cible et redistribue le tout équitablement !", + "shiftedStats": "{{pokemonName}} échange {{statToSwitch}} et {{statToSwitchWith}} !", "goingAllOutForAttack": "{{pokemonName}} a pris\ncette capacité au sérieux !", "regainedHealth": "{{pokemonName}}\nrécupère des PV !", "keptGoingAndCrashed": "{{pokemonName}}\ns’écrase au sol !", @@ -67,5 +68,7 @@ "swapArenaTags": "Les effets affectant chaque côté du terrain\nont été échangés par {{pokemonName}} !", "exposedMove": "{{targetPokemonName}} est identifié\npar {{pokemonName}} !", "safeguard": "{{targetName}} est protégé\npar la capacité Rune Protect !", + "substituteOnOverlap": "{{pokemonName}} a déjà\nun clone !", + "substituteNotEnoughHp": "Mais il est trop faible\npour créer un clone !", "afterYou": "{{pokemonName}} accepte\navec joie !" } diff --git a/src/locales/fr/party-ui-handler.json b/src/locales/fr/party-ui-handler.json index 6adba2c8309..a11640c80b3 100644 --- a/src/locales/fr/party-ui-handler.json +++ b/src/locales/fr/party-ui-handler.json @@ -13,6 +13,7 @@ "ALL": "Tout", "PASS_BATON": "Relais", "UNPAUSE_EVOLUTION": "Réactiver Évolution", + "PAUSE_EVOLUTION": "Interrompre Évolution", "REVIVE": "Ranimer", "RENAME": "Renommer", "choosePokemon": "Sélectionnez un Pokémon.", @@ -23,6 +24,7 @@ "tooManyItems": "{{pokemonName}} porte trop\nd’exemplaires de cet objet !", "anyEffect": "Cela n’aura aucun effet.", "unpausedEvolutions": "{{pokemonName}} peut de nouveau évoluer.", + "pausedEvolutions": "{{pokemonName}} ne peut plus évoluer.", "unspliceConfirmation": "Voulez-vous vraiment séparer {{fusionName}}\nde {{pokemonName}} ? {{fusionName}} sera perdu.", "wasReverted": "{{fusionName}} est redevenu {{pokemonName}}.", "releaseConfirmation": "Voulez-vous relâcher {{pokemonName}} ?", @@ -44,4 +46,4 @@ "untilWeMeetAgain": "À la prochaine, {{pokemonName}} !", "sayonara": "Sayonara, {{pokemonName}} !", "smellYaLater": "À la revoyure, {{pokemonName}} !" -} \ No newline at end of file +} diff --git a/src/locales/fr/trainer-names.json b/src/locales/fr/trainer-names.json index 5864976cc34..beec7e0c313 100644 --- a/src/locales/fr/trainer-names.json +++ b/src/locales/fr/trainer-names.json @@ -94,7 +94,7 @@ "caitlin": "Percila", "malva": "Malva", "siebold": "Narcisse", - "wikstrom": "Tileo", + "wikstrom": "Thyméo", "drasna": "Dracéna", "hala": "Pectorius", "molayne": "Molène", diff --git a/src/locales/fr/tutorial.json b/src/locales/fr/tutorial.json index 7936987457f..3236bdafea2 100644 --- a/src/locales/fr/tutorial.json +++ b/src/locales/fr/tutorial.json @@ -6,5 +6,5 @@ "pokerus": "Chaque jour, 3 starters tirés aléatoirement ont un contour violet.\n$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 persistent à travers\nles combats tant que le Pokémon n’est pas rappelé.\n$Vos Pokémon sont rappelés avant un combat de\nDresseur et avant d’entrer dans un nouveau biome.\n$Vous pouvez voir en combat les changements de stats\nd’un Pokémon en maintenant C ou Maj.\n$Vous pouvez également voir les capacités de l’adversaire\nen maintenant V.\n$Seules les capacités que le Pokémon a utilisées dans\nce combat sont consultables.", "selectItem": "Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un.\n$Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents.\n$La plupart des effets des objets non-consommables se cumuleront de diverses manières.\n$Certains objets n’apparaitront que s’ils ont une utilité immédiate, comme les objets d’évolution.\n$Vous pouvez aussi transférer des objets tenus entre\nPokémon en utilisant l’option de transfert.\n$L’option de transfert apparait en bas à droite dès\nqu’un Pokémon de l’équipe porte un objet.\n$Vous pouvez acheter des consommables avec de\nl’argent. Plus vous progressez, plus le choix sera large.\n$Choisir un des objets gratuits déclenchera le prochain\ncombat, donc faites bien tous vos achats avant.", - "eggGacha": "Depuis cet écran, vous pouvez utiliser vos coupons\npour recevoir Œufs de Pokémon au hasard.\n$Les Œufs éclosent après avoir remporté un certain nombre de combats. Plus ils sont rares, plus ils mettent de temps.\n$Les Pokémon éclos ne rejoindront pas votre équipe, mais seront ajoutés à vos starters.\n$Les Pokémon issus d’Œufs ont généralement de meilleurs IV que les Pokémon sauvages.\n$Certains Pokémon ne peuvent être obtenus que dans des Œufs.\n$Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !" + "eggGacha": "Depuis cet écran, vous pouvez utiliser vos coupons\npour recevoir Œufs de Pokémon au hasard.\n$Les Œufs éclosent après avoir remporté un certain nombre de combats.\n$Plus ils sont rares, plus ils mettent de temps.\n$Les Pokémon éclos ne rejoindront pas votre équipe, mais seront ajoutés à vos starters.\n$Les Pokémon issus d’Œufs ont généralement de meilleurs IV que les Pokémon sauvages.\n$Certains Pokémon ne peuvent être obtenus que dans des Œufs.\n$Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !" } From b4359b890cad897951a34fedcb2c150fe881dd72 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Mon, 16 Sep 2024 12:16:16 +0200 Subject: [PATCH 16/38] Update an-offer-you-cant-refuse-dialogue.json --- .../mystery-encounters/an-offer-you-cant-refuse-dialogue.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/fr/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/fr/mystery-encounters/an-offer-you-cant-refuse-dialogue.json index 64b784bb8fe..e87cbc4dfbc 100644 --- a/src/locales/fr/mystery-encounters/an-offer-you-cant-refuse-dialogue.json +++ b/src/locales/fr/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -1,7 +1,7 @@ { "intro": "Un jeune garçon aux airs très bougeois vous arrête.", "speaker": "Richard", - "intro_dialogue": "Bonchour-haann !$Je ne puis carrément pas ignorer que votre\n{{strongestPokemon}} m’a l’air fa-bu-leux !$J’ai toujours désiré posséder un tel Pokémon !$Je peux vous payer grassement,\nainsi que vous donner petite babiole !", + "intro_dialogue": "Bonchour-haann !$Je ne puis carrément pas ignorer que votre\n{{strongestPokemon}} m’a l’air fa-bu-leux-han !$J’ai toujours désiré posséder un tel Pokémon !$Je peux vous payer grassement,\nainsi que vous donner petite babiole-han !", "title": "L’affaire du siècle", "description": "Un fils à papa vous offre un @[TOOLTIP_TITLE]{Charme Chroma} et {{price, money}} en échange de votre {{strongestPokemon}} !\n\nÇa semble être une bonne affaire, mais pourrez vous supporter de priver votre équipe d’un tel atout ?", "query": "Que voulez-vous faire ?", @@ -9,7 +9,7 @@ "1": { "label": "Accepter l’offre", "tooltip": "(-) Vous perdez {{strongestPokemon}}\n(+) Gain d’un @[TOOLTIP_TITLE]{Charme Chroma}\n(+) Gain de {{price, money}}", - "selected": "Fa-bu-leux!@d{32} Par ici, {{strongestPokemon}} !$Viens que je te montre fièrement au club de yacht !$Ils vont trooop avoir le seum-haann !" + "selected": "Fa-bu-leux-han !@d{32} Par ici, {{strongestPokemon}} !$Viens que je te montre fièrement au club de yacht !$Ils vont trooop avoir le seum-haann !" }, "2": { "label": "Le racketter", From 929f4a52da7964519fbfc6ad157bbae0aaaf8e53 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Mon, 16 Sep 2024 15:47:29 +0200 Subject: [PATCH 17/38] Update absolute-avarice-dialogue.json --- .../fr/mystery-encounters/absolute-avarice-dialogue.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/locales/fr/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/fr/mystery-encounters/absolute-avarice-dialogue.json index a4f91c01087..47c1889227d 100644 --- a/src/locales/fr/mystery-encounters/absolute-avarice-dialogue.json +++ b/src/locales/fr/mystery-encounters/absolute-avarice-dialogue.json @@ -8,18 +8,18 @@ "label": "L’affronter", "tooltip": "(-) Combat difficile\n(+) Récompenses de sa planque à Baies", "selected": "Le {{greedentName}} gonfle ses joues\net se prépare au combat !", - "boss_enraged": "L’insatiable amour de {{greedentName}} pour la nourriture le rend furieux !", - "food_stash": "Il semblerait que {{greedentName}} gardait une pile de nourriture colossale !$@s{item_fanfare}Tous les Pokémon de votre équipe remportent une {{foodReward}} !" + "boss_enraged": "L’insatiable amour de {{greedentName}}\npour la nourriture le rend fou !", + "food_stash": "Il semblerait que {{greedentName}}\ngardait une pile de nourriture colossale !$@s{item_fanfare}Tous les Pokémon de votre équipe\nremportent une {{foodReward}} !" }, "2": { "label": "Négocier", "tooltip": "(+) Regagner quelques Baies", - "selected": "Vos arguments ont touché {{greedentName}} sur sa corde sensible.$Il ne vous rend pas toutes vos Baies, mais vous en balance quelques-unes." + "selected": "Vos arguments ont touché {{greedentName}}\nsur sa corde sensible.$Il accepte malgré tout de vous balancer\nquelques Baies et se garde le reste." }, "3": { "label": "Lui laisser les Baies", "tooltip": "(-) Baies définitement perdues\n(?) {{greedentName}} vous apprécie", - "selected": "Le {{greedentName}} engloutit l’intégralité\ndes Baies en un éclair !$Il vous regarde avec tendresse\nen se tapotant le ventre.$Peut-être pourriez-vous lui\nen donner encore pendant votre périple…$@s{level_up_fanfare}Le {{greedentName}} veut rejoindre votre équipe !" + "selected": "Le {{greedentName}} engloutit l’intégralité\ndes Baies en un éclair !$Il vous regarde avec tendresse\nen se tapotant le ventre.$Peut-être pourriez-vous lui en donner encore\nplus pendant votre périple…$@s{level_up_fanfare}Le {{greedentName}} veut rejoindre votre équipe !" } } } From 72439ffff7b003538ede14d306a927c2574b2b5a Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Mon, 16 Sep 2024 10:58:28 -0400 Subject: [PATCH 18/38] [Move][Beta] Add back grounded condition to ground shaky moves and grassy terrain (#4276) --- src/data/move.ts | 6 +++--- src/test/arena/grassy_terrain.test.ts | 27 +++++++++++++++++++++------ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 10c98e0a7f7..0c2f587d885 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -6952,7 +6952,7 @@ export function initMoves() { .makesContact(false), new AttackMove(Moves.EARTHQUAKE, Type.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1) .attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY ? 0.5 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), new AttackMove(Moves.FISSURE, Type.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) @@ -7346,7 +7346,7 @@ export function initMoves() { new AttackMove(Moves.MAGNITUDE, Type.GROUND, MoveCategory.PHYSICAL, -1, 100, 30, -1, 0, 2) .attr(PreMoveMessageAttr, magnitudeMessageFunc) .attr(MagnitudePowerAttr) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY ? 0.5 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), @@ -8221,7 +8221,7 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.BULLDOZE, Type.GROUND, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY ? 0.5 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), new AttackMove(Moves.FROST_BREATH, Type.ICE, MoveCategory.SPECIAL, 60, 90, 10, 100, 0, 5) diff --git a/src/test/arena/grassy_terrain.test.ts b/src/test/arena/grassy_terrain.test.ts index e8064676741..efb2539885d 100644 --- a/src/test/arena/grassy_terrain.test.ts +++ b/src/test/arena/grassy_terrain.test.ts @@ -26,16 +26,16 @@ describe("Arena - Grassy Terrain", () => { game.override .battleType("single") .disableCrits() - .enemyLevel(30) - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyLevel(1) + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.STURDY) + .enemyMoveset(Moves.FLY) .moveset([Moves.GRASSY_TERRAIN, Moves.EARTHQUAKE]) - .ability(Abilities.BALL_FETCH); + .ability(Abilities.NO_GUARD); }); it("halves the damage of Earthquake", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([Species.TAUROS]); const eq = allMoves[Moves.EARTHQUAKE]; vi.spyOn(eq, "calculateBattlePower"); @@ -53,4 +53,19 @@ describe("Arena - Grassy Terrain", () => { expect(eq.calculateBattlePower).toHaveReturnedWith(50); }, TIMEOUT); + + it("Does not halve the damage of Earthquake if opponent is not grounded", async () => { + await game.classicMode.startBattle([Species.NINJASK]); + + const eq = allMoves[Moves.EARTHQUAKE]; + vi.spyOn(eq, "calculateBattlePower"); + + game.move.select(Moves.GRASSY_TERRAIN); + await game.toNextTurn(); + + game.move.select(Moves.EARTHQUAKE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(eq.calculateBattlePower).toHaveReturnedWith(100); + }, TIMEOUT); }); From ae077fa7a2f6b66ab54f2ca6750d26ff3056215f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2?= <123510358+NicusPulcis@users.noreply.github.com> Date: Mon, 16 Sep 2024 18:22:55 +0200 Subject: [PATCH 19/38] Update src/locales/it/modifier-select-ui-handler.json --- src/locales/it/modifier-select-ui-handler.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/it/modifier-select-ui-handler.json b/src/locales/it/modifier-select-ui-handler.json index f9d93e9d9f0..62770999817 100644 --- a/src/locales/it/modifier-select-ui-handler.json +++ b/src/locales/it/modifier-select-ui-handler.json @@ -9,6 +9,6 @@ "checkTeamDesc": "Controlla la squadra Pokémon.", "rerollCost": "{{formattedMoney}}₽", "itemCost": "{{formattedMoney}}₽", - "continueNextWaveButton": "Continue", - "continueNextWaveDescription": "Continue to the next wave" + "continueNextWaveButton": "Continua", + "continueNextWaveDescription": "Continua alla onda successiva" } From fc3fc08b0752f5a2b8bde6be5d236ac51776c8af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2?= <123510358+NicusPulcis@users.noreply.github.com> Date: Mon, 16 Sep 2024 18:23:03 +0200 Subject: [PATCH 20/38] Update src/locales/it/mystery-encounter-messages.json --- src/locales/it/mystery-encounter-messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/it/mystery-encounter-messages.json b/src/locales/it/mystery-encounter-messages.json index 240eca57c5a..4f8b528d18b 100644 --- a/src/locales/it/mystery-encounter-messages.json +++ b/src/locales/it/mystery-encounter-messages.json @@ -3,5 +3,5 @@ "receive_money": "Hai ricevuto {{amount, number}}₽!", "affects_pokedex": "Influisce sul Pokédex", "cancel_option": "Torna alla scelta dell'incontro.", - "view_party_button": "View Party" + "view_party_button": "Info squadra" } From 73ddcb35a5e2f804e3bc2db90026c7b6d9c00f8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2?= <123510358+NicusPulcis@users.noreply.github.com> Date: Mon, 16 Sep 2024 18:23:16 +0200 Subject: [PATCH 21/38] Update src/locales/it/mystery-encounters/a-trainers-test-dialogue.json --- .../a-trainers-test-dialogue.json | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/locales/it/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/it/mystery-encounters/a-trainers-test-dialogue.json index c96c0d5f327..a9f67b577a6 100644 --- a/src/locales/it/mystery-encounters/a-trainers-test-dialogue.json +++ b/src/locales/it/mystery-encounters/a-trainers-test-dialogue.json @@ -1,47 +1,47 @@ { - "intro": "An extremely strong trainer approaches you...", + "intro": "Un allenatore davvero forte ti si avvicina...", "buck": { - "intro_dialogue": "Yo, trainer! My name's Buck.$I have a super awesome proposal\nfor a strong trainer such as yourself!$I'm carrying two rare Pokémon Eggs with me,\nbut I'd like someone else to care for one.$If you can prove your strength as a trainer to me,\nI'll give you the rarer egg!", - "accept": "Whoooo, I'm getting fired up!", - "decline": "Darn, it looks like your\nteam isn't in peak condition.$Here, let me help with that." + "intro_dialogue": "Yo, allenatore! Sono Buck.$Ho una proposta super fantastica\nper allenatori forti come te!$Ho qui con me due uova Pokémon rare,\nma vorrei affidarne una a qualcuno.$Se mi darai prova delle tue doti di allenatore,\nti darò quella più rara!", + "accept": "Whoooo, comincio a scaldarmi!", + "decline": "Accidenti, pare che la tua\nsquadra non se la passi bene.$Lascia che ti aiuti." }, "cheryl": { - "intro_dialogue": "Hello, my name's Cheryl.$I have a particularly interesting request,\nfor a strong trainer such as yourself.$I'm carrying two rare Pokémon Eggs with me,\nbut I'd like someone else to care for one.$If you can prove your strength as a trainer to me,\nI'll give you the rarer Egg!", - "accept": "I hope you're ready!", - "decline": "I understand, it looks like your team\nisn't in the best condition at the moment.$Here, let me help with that." + "intro_dialogue": "Ciao, mi chiamo Cheryl.$Ho una particolare richiesta,\nmirata ad allenatori come te.$Ho qui con me due uova Pokémon rare,\nma vorrei affidarne una a qualcuno.$Se mi darai prova delle tue doti di allenatore,\nti darò quella più rara!", + "accept": "Spero tu sia pronto/a!", + "decline": "Capisco, mi sa che i tuoi Pokémon\nnon stanno benissimo al momento.$Ti do una mano." }, "marley": { - "intro_dialogue": "...@d{64} I'm Marley.$I have an offer for you...$I'm carrying two Pokémon Eggs with me,\nbut I'd like someone else to care for one.$If you're stronger than me,\nI'll give you the rarer Egg.", - "accept": "... I see.", - "decline": "... I see.$Your Pokémon look hurt...\nLet me help." + "intro_dialogue": "...@d{64} Sono Marley.$Ho da farti un'offerta...$Ho con me due uova Pokémon rare,\nma voglio regalarne una.$Se ti dimostri più forte di me,\nti darò la più rara tra le due.", + "accept": "... capisco.", + "decline": "...capisco.$I tuoi Pokémon hanno una brutta cera...\nLasciami aiutare." }, "mira": { - "intro_dialogue": "Hi! I'm Mira!$Mira has a request\nfor a strong trainer like you!$Mira has two rare Pokémon Eggs,\nbut Mira wants someone else to take one!$If you show Mira that you're strong,\nMira will give you the rarer Egg!", - "accept": "You'll battle Mira?\nYay!", - "decline": "Aww, no battle?\nThat's okay!$Here, Mira will heal your team!" + "intro_dialogue": "Ciaoo! Sono Mira!$Mira ha una richiesta\nper un allenatore forte come te!$Mira ha due uova Pokémon rare,\nma Mira vuole darne via una delle due!$Se dimostri a Mira che te la cavi,\nMira ti da la più rara!", + "accept": "Affronterai Mira?\nYuppi!", + "decline": "Aww, niente lotta?\nVa bene!$Ecco, ora Mira cura la tua squadra!" }, "riley": { - "intro_dialogue": "I'm Riley.$I have an odd proposal\nfor a strong trainer such as yourself.$I'm carrying two rare Pokémon Eggs with me,\nbut I'd like to give one to another trainer.$If you can prove your strength to me,\nI'll give you the rarer Egg!", - "accept": "That look you have...\nLet's do this.", - "decline": "I understand, your team looks beat up.$Here, let me help with that." + "intro_dialogue": "Sono Riley.$Ho una strana proposta\nper gli allenatori forti.$Ho qui due uova Pokémon rare,\nma vorrei darne via una.$Dimostrami quanto vali,\ne ti darò la più rara!", + "accept": "Lo sguardo nei tuoi occhi...\nDiamoci dentro.", + "decline": "Capisco, la tua squadra non se la passa bene.$Lasciami rimediare." }, - "title": "A Trainer's Test", - "description": "It seems this trainer is willing to give you an Egg regardless of your decision. However, if you can manage to defeat this strong trainer, you'll receive a much rarer Egg.", - "query": "What will you do?", + "title": "La prova di un allenatore", + "description": "Pare che questo allenatore ti darà un uovo a prescindere dalla tua volontà. Tuttavia, sconfiggendolo, potrai riceverne uno nettamente più raro.", + "query": "Che cosa farai?", "option": { "1": { - "label": "Accept the Challenge", - "tooltip": "(-) Tough Battle\n(+) Gain a @[TOOLTIP_TITLE]{Very Rare Egg}" + "label": "Accetta la sfida", + "tooltip": "(-) Ardua lotta\n(+) Ottieni un @[TOOLTIP_TITLE]{Very Rare Egg}" }, "2": { - "label": "Refuse the Challenge", - "tooltip": "(+) Full Heal Party\n(+) Gain an @[TOOLTIP_TITLE]{Egg}" + "label": "Rifiuta la sfida", + "tooltip": "(+) Squadra completamente curata\n(+) Ottieni un @[TOOLTIP_TITLE]{Egg}" } }, "eggTypes": { - "rare": "a Rare Egg", - "epic": "an Epic Egg", - "legendary": "a Legendary Egg" + "rare": "un uovo raro", + "epic": "un uovo epico", + "legendary": "un uovo leggendario" }, - "outro": "{{statTrainerName}} gave you {{eggType}}!" + "outro": "{{statTrainerName}} ti dona {{eggType}}!" } \ No newline at end of file From 8e73814849c6a373f2caa2bfe054ea88cf327654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Ricardo=20Fleury=20Oliveira?= Date: Mon, 16 Sep 2024 14:34:12 -0300 Subject: [PATCH 22/38] updated all files except for mystery-encounters folder --- src/locales/es/status-effect.json | 4 +- src/locales/pt_BR/ability-trigger.json | 2 +- src/locales/pt_BR/arena-tag.json | 2 +- src/locales/pt_BR/battle-info.json | 2 +- .../pt_BR/battle-message-ui-handler.json | 2 +- src/locales/pt_BR/battle-scene.json | 2 +- src/locales/pt_BR/battle.json | 12 +- src/locales/pt_BR/berry.json | 2 +- src/locales/pt_BR/bgm-name.json | 2 +- src/locales/pt_BR/biome.json | 2 +- src/locales/pt_BR/challenges.json | 2 +- src/locales/pt_BR/command-ui-handler.json | 2 +- src/locales/pt_BR/common.json | 2 +- src/locales/pt_BR/config.ts | 106 +++++++++--------- src/locales/pt_BR/dialogue-double-battle.json | 2 +- src/locales/pt_BR/dialogue-final-boss.json | 2 +- src/locales/pt_BR/dialogue.json | 79 ++++++------- src/locales/pt_BR/egg.json | 2 +- src/locales/pt_BR/filter-bar.json | 2 +- src/locales/pt_BR/game-mode.json | 2 +- src/locales/pt_BR/game-stats-ui-handler.json | 2 +- src/locales/pt_BR/growth.json | 2 +- src/locales/pt_BR/menu.json | 2 +- .../pt_BR/modifier-select-ui-handler.json | 4 +- src/locales/pt_BR/modifier-type.json | 48 +++++--- src/locales/pt_BR/modifier.json | 2 +- src/locales/pt_BR/move-trigger.json | 16 +-- .../pt_BR/mystery-encounter-messages.json | 10 +- src/locales/pt_BR/nature.json | 2 +- src/locales/pt_BR/pokeball.json | 2 +- src/locales/pt_BR/pokemon-form-battle.json | 2 +- src/locales/pt_BR/pokemon-info-container.json | 2 +- src/locales/pt_BR/pokemon.json | 2 +- src/locales/pt_BR/run-history.json | 2 +- .../pt_BR/save-slot-select-ui-handler.json | 2 +- src/locales/pt_BR/settings.json | 2 +- src/locales/pt_BR/splash-messages.json | 2 +- .../pt_BR/starter-select-ui-handler.json | 2 +- src/locales/pt_BR/status-effect.json | 2 +- src/locales/pt_BR/terrain.json | 2 +- src/locales/pt_BR/trainer-classes.json | 1 - src/locales/pt_BR/tutorial.json | 2 +- src/locales/pt_BR/voucher.json | 2 +- src/locales/pt_BR/weather.json | 2 +- 44 files changed, 182 insertions(+), 168 deletions(-) diff --git a/src/locales/es/status-effect.json b/src/locales/es/status-effect.json index eeb8c251e8a..66534d11983 100644 --- a/src/locales/es/status-effect.json +++ b/src/locales/es/status-effect.json @@ -40,7 +40,7 @@ "description": "dormir", "obtain": "¡{{pokemonNameWithAffix}}\nse ha dormido!", "obtainSource": "¡{{pokemonNameWithAffix}}\nse ha dormido\npor culpa de {{sourceText}}!", - "activation": "¡{{pokemonNameWithAffix}} está/ndormido como un tronco.", + "activation": "¡{{pokemonNameWithAffix}} está\ndormido como un tronco.", "overlap": "¡{{pokemonNameWithAffix}} ya\nestá dormido!", "heal": "¡{{pokemonNameWithAffix}} se despertó!" }, @@ -62,4 +62,4 @@ "overlap": "¡{{pokemonNameWithAffix}} ya\nestá quemado!", "heal": "¡{{pokemonNameWithAffix}} ya no\nestá quemado!" } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/ability-trigger.json b/src/locales/pt_BR/ability-trigger.json index cd47fd8e3dc..60e86f3723c 100644 --- a/src/locales/pt_BR/ability-trigger.json +++ b/src/locales/pt_BR/ability-trigger.json @@ -60,4 +60,4 @@ "postSummonTabletsOfRuin": "Tablets of Ruin de {{pokemonNameWithAffix}} reduziu o {{statName}}\nde todos os Pokémon em volta!", "postSummonBeadsOfRuin": "Beads of Ruin de {{pokemonNameWithAffix}} reduziu a {{statName}}\nde todos os Pokémon em volta!", "preventBerryUse": "{{pokemonNameWithAffix}} está nervoso\ndemais para comer frutas!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/arena-tag.json b/src/locales/pt_BR/arena-tag.json index 7ab1ecea721..3a1476dcef6 100644 --- a/src/locales/pt_BR/arena-tag.json +++ b/src/locales/pt_BR/arena-tag.json @@ -54,4 +54,4 @@ "safeguardOnRemove": "O campo não está mais protegido por Safeguard!", "safeguardOnRemovePlayer": "Sua equipe não está mais protegido por Safeguard!", "safeguardOnRemoveEnemy": "A equipe adversária não está mais protegido por Safeguard!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/battle-info.json b/src/locales/pt_BR/battle-info.json index 0fd211c5c85..8a43839efb1 100644 --- a/src/locales/pt_BR/battle-info.json +++ b/src/locales/pt_BR/battle-info.json @@ -1,3 +1,3 @@ { "generation": "Geração {{generation}}" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/battle-message-ui-handler.json b/src/locales/pt_BR/battle-message-ui-handler.json index ee7062bccba..d82fd665821 100644 --- a/src/locales/pt_BR/battle-message-ui-handler.json +++ b/src/locales/pt_BR/battle-message-ui-handler.json @@ -5,4 +5,4 @@ "ivPrettyGood": "Bom", "ivDecent": "Regular", "ivNoGood": "Ruim" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/battle-scene.json b/src/locales/pt_BR/battle-scene.json index a0288475d69..de2232b4edf 100644 --- a/src/locales/pt_BR/battle-scene.json +++ b/src/locales/pt_BR/battle-scene.json @@ -1,3 +1,3 @@ { "moneyOwned": "₽{{formattedMoney}}" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/battle.json b/src/locales/pt_BR/battle.json index fc5ed6e894c..38eec73fdd4 100644 --- a/src/locales/pt_BR/battle.json +++ b/src/locales/pt_BR/battle.json @@ -14,10 +14,10 @@ "moneyWon": "Você ganhou\n₽{{moneyAmount}} por vencer!", "moneyPickedUp": "Você pegou ₽{{moneyAmount}} do chão!", "pokemonCaught": "{{pokemonName}} foi capturado!", - "pokemonObtained": "You got {{pokemonName}}!", - "pokemonBrokeFree": "Oh no!\nThe Pokémon broke free!", - "pokemonFled": "The wild {{pokemonName}} fled!", - "playerFled": "You fled from the {{pokemonName}}!", + "pokemonObtained": "Você recebeu um {{pokemonName}}!", + "pokemonBrokeFree": "Não!\nO Pokémon escapou!", + "pokemonFled": "{{pokemonName}} selvagem fugiu!", + "playerFled": "Você fugiu de {{pokemonName}}!", "addedAsAStarter": "{{pokemonName}} foi adicionado\naos seus iniciais!", "partyFull": "Sua equipe está cheia.\nSolte um Pokémon para ter espaço para {{pokemonName}}?", "pokemon": "Pokémon", @@ -53,7 +53,7 @@ "noPokeballTrainer": "Não se pode capturar\nPokémon dos outros!", "noPokeballMulti": "Não se pode lançar Poké Bolas\nquando há mais de um Pokémon!", "noPokeballStrong": "Este Pokémon é forte demais para ser capturado!\nÉ preciso enfraquecê-lo primeiro!", - "noPokeballMysteryEncounter": "You aren't able to\ncatch this Pokémon!", + "noPokeballMysteryEncounter": "Você não pode capturar\nesse Pokémon!", "noEscapeForce": "Uma força misteriosa\nte impede de fugir.", "noEscapeTrainer": "Não se pode fugir de\nbatalhas contra treinadores!", "noEscapePokemon": "O movimento {{moveName}} de {{pokemonName}} te impede de fugir!", @@ -102,5 +102,5 @@ "unlockedSomething": "{{unlockedThing}}\nfoi desbloqueado.", "congratulations": "Parabéns!", "beatModeFirstTime": "{{speciesName}} venceu o Modo {{gameMode}} pela primeira vez!\nVocê recebeu {{newModifier}}!", - "mysteryEncounterAppeared": "What's this?" + "mysteryEncounterAppeared": "O que é isso?" } diff --git a/src/locales/pt_BR/berry.json b/src/locales/pt_BR/berry.json index 0ca5d3de286..7cd5e5c14dd 100644 --- a/src/locales/pt_BR/berry.json +++ b/src/locales/pt_BR/berry.json @@ -43,4 +43,4 @@ "name": "Fruta Leppa", "effect": "Restaura 10 PP de um movimento se seus PP acabarem" } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/bgm-name.json b/src/locales/pt_BR/bgm-name.json index 124665e0c8b..8f73dffaee0 100644 --- a/src/locales/pt_BR/bgm-name.json +++ b/src/locales/pt_BR/bgm-name.json @@ -91,7 +91,7 @@ "battle_galactic_boss": "BDSP Batalha do Cyrus", "battle_plasma_boss": "B2W2 Batalha do Ghetsis", "battle_flare_boss": "XY Batalha do Lysandre", - "battle_aether_boss": "SM Batalha da Lusamine", + "battle_aether_boss": "SM Batalha da Lusamine", "battle_skull_boss": "SM Batalha do Guzma", "battle_macro_boss": "SWSH Batalha do Rose", diff --git a/src/locales/pt_BR/biome.json b/src/locales/pt_BR/biome.json index d10f22eb487..6235ebc4c3f 100644 --- a/src/locales/pt_BR/biome.json +++ b/src/locales/pt_BR/biome.json @@ -35,4 +35,4 @@ "ISLAND": "Ilha", "LABORATORY": "Laboratório", "END": "???" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/challenges.json b/src/locales/pt_BR/challenges.json index 9dc613651a6..b8249882033 100644 --- a/src/locales/pt_BR/challenges.json +++ b/src/locales/pt_BR/challenges.json @@ -34,4 +34,4 @@ "value.0": "Desligado", "value.1": "Ligado" } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/command-ui-handler.json b/src/locales/pt_BR/command-ui-handler.json index fcd8e7026b4..1e541e60b9a 100644 --- a/src/locales/pt_BR/command-ui-handler.json +++ b/src/locales/pt_BR/command-ui-handler.json @@ -4,4 +4,4 @@ "pokemon": "Pokémon", "run": "Fugir", "actionMessage": "O que {{pokemonName}}\ndeve fazer?" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/common.json b/src/locales/pt_BR/common.json index a5ec4381f26..9c04c3ec811 100644 --- a/src/locales/pt_BR/common.json +++ b/src/locales/pt_BR/common.json @@ -5,4 +5,4 @@ "commonShiny": "Comum", "rareShiny": "Raro", "epicShiny": "Épico" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/config.ts b/src/locales/pt_BR/config.ts index e1fe63f69ec..69ff87c2585 100644 --- a/src/locales/pt_BR/config.ts +++ b/src/locales/pt_BR/config.ts @@ -1,89 +1,89 @@ -import common from "./common.json"; -import settings from "./settings.json"; -import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; +import ability from "./ability.json"; +import achv from "./achv.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achv from "./achv.json"; -import battle from "./battle.json"; -import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; import battleMessageUiHandler from "./battle-message-ui-handler.json"; +import battleScene from "./battle-scene.json"; +import battle from "./battle.json"; import battlerTags from "./battler-tags.json"; import berry from "./berry.json"; import bgmName from "./bgm-name.json"; import biome from "./biome.json"; import challenges from "./challenges.json"; import commandUiHandler from "./command-ui-handler.json"; -import dialogue from "./dialogue.json"; +import common from "./common.json"; +import doubleBattleDialogue from "./dialogue-double-battle.json"; import battleSpecDialogue from "./dialogue-final-boss.json"; import miscDialogue from "./dialogue-misc.json"; -import doubleBattleDialogue from "./dialogue-double-battle.json"; +import dialogue from "./dialogue.json"; import egg from "./egg.json"; import fightUiHandler from "./fight-ui-handler.json"; import filterBar from "./filter-bar.json"; import gameMode from "./game-mode.json"; import gameStatsUiHandler from "./game-stats-ui-handler.json"; import growth from "./growth.json"; -import menu from "./menu.json"; import menuUiHandler from "./menu-ui-handler.json"; -import modifier from "./modifier.json"; -import modifierType from "./modifier-type.json"; -import move from "./move.json"; -import nature from "./nature.json"; -import partyUiHandler from "./party-ui-handler.json"; -import pokeball from "./pokeball.json"; -import pokemon from "./pokemon.json"; -import pokemonForm from "./pokemon-form.json"; -import battlePokemonForm from "./pokemon-form-battle.json"; -import pokemonInfo from "./pokemon-info.json"; -import pokemonInfoContainer from "./pokemon-info-container.json"; -import pokemonSummary from "./pokemon-summary.json"; -import saveSlotSelectUiHandler from "./save-slot-select-ui-handler.json"; -import splashMessages from "./splash-messages.json"; -import starterSelectUiHandler from "./starter-select-ui-handler.json"; -import statusEffect from "./status-effect.json"; -import trainerTitles from "./trainer-titles.json"; -import trainerClasses from "./trainer-classes.json"; -import trainerNames from "./trainer-names.json"; -import tutorial from "./tutorial.json"; -import voucher from "./voucher.json"; -import weather from "./weather.json"; -import terrain from "./terrain.json"; +import menu from "./menu.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; +import modifierType from "./modifier-type.json"; +import modifier from "./modifier.json"; import moveTriggers from "./move-trigger.json"; -import runHistory from "./run-history.json"; +import move from "./move.json"; import mysteryEncounterMessages from "./mystery-encounter-messages.json"; -import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json"; -import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json"; -import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json"; +import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json"; +import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json"; +import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; +import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json"; +import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json"; +import clowningAround from "./mystery-encounters/clowning-around-dialogue.json"; +import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json"; import darkDeal from "./mystery-encounters/dark-deal-dialogue.json"; +import delibirdy from "./mystery-encounters/delibirdy-dialogue.json"; import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json"; import fieldTrip from "./mystery-encounters/field-trip-dialogue.json"; import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json"; import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json"; +import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json"; +import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json"; +import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json"; +import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json"; +import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json"; +import partTimer from "./mystery-encounters/part-timer-dialogue.json"; import safariZone from "./mystery-encounters/safari-zone-dialogue.json"; import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json"; import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json"; -import trainingSession from "./mystery-encounters/training-session-dialogue.json"; -import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json"; -import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json"; -import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; -import delibirdy from "./mystery-encounters/delibirdy-dialogue.json"; -import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json"; -import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json"; -import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json"; -import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json"; -import clowningAround from "./mystery-encounters/clowning-around-dialogue.json"; -import partTimer from "./mystery-encounters/part-timer-dialogue.json"; -import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json"; -import weirdDream from "./mystery-encounters/weird-dream-dialogue.json"; -import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json"; import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json"; -import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json"; -import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json"; +import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json"; +import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json"; +import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json"; +import trainingSession from "./mystery-encounters/training-session-dialogue.json"; +import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json"; import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json"; -import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json"; +import weirdDream from "./mystery-encounters/weird-dream-dialogue.json"; +import nature from "./nature.json"; +import partyUiHandler from "./party-ui-handler.json"; +import pokeball from "./pokeball.json"; +import battlePokemonForm from "./pokemon-form-battle.json"; +import pokemonForm from "./pokemon-form.json"; +import pokemonInfoContainer from "./pokemon-info-container.json"; +import pokemonInfo from "./pokemon-info.json"; +import pokemonSummary from "./pokemon-summary.json"; +import pokemon from "./pokemon.json"; +import runHistory from "./run-history.json"; +import saveSlotSelectUiHandler from "./save-slot-select-ui-handler.json"; +import settings from "./settings.json"; +import splashMessages from "./splash-messages.json"; +import starterSelectUiHandler from "./starter-select-ui-handler.json"; +import statusEffect from "./status-effect.json"; +import terrain from "./terrain.json"; +import trainerClasses from "./trainer-classes.json"; +import trainerNames from "./trainer-names.json"; +import trainerTitles from "./trainer-titles.json"; +import tutorial from "./tutorial.json"; +import voucher from "./voucher.json"; +import weather from "./weather.json"; /** * Dialogue/Text token injection patterns that can be used: diff --git a/src/locales/pt_BR/dialogue-double-battle.json b/src/locales/pt_BR/dialogue-double-battle.json index 4d1c7d90c9b..e796a6ea2a2 100644 --- a/src/locales/pt_BR/dialogue-double-battle.json +++ b/src/locales/pt_BR/dialogue-double-battle.json @@ -80,4 +80,4 @@ "1": "Piers: Agora esse foi um ótimo show!\n$Marnie: Irmão..." } } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/dialogue-final-boss.json b/src/locales/pt_BR/dialogue-final-boss.json index 7009f00db5b..c1e492a41ef 100644 --- a/src/locales/pt_BR/dialogue-final-boss.json +++ b/src/locales/pt_BR/dialogue-final-boss.json @@ -3,4 +3,4 @@ "encounter_female": "Parece que a hora finalmente chegou novamente.\nVocê sabe por que veio aqui, não sabe?\n$Você foi atraída para cá, porque já esteve aqui antes.\nInúmeras vezes.\n$Embora talvez isso possa ser contado.\nPara ser preciso, este é de fato o seu {{cycleCount}}º ciclo.\n$A cada ciclo, sua mente retorna ao seu estado anterior.\nMesmo assim, de alguma forma, vestígios de seus antigos \"eus\" permanecem.\n$Até agora, você ainda não conseguiu, mas sinto uma presença diferente em você desta vez.\n\n$Você é a única aqui, embora pareça haver... outro.\n$Você finalmente vai se mostrar um desafio formidável para mim?\nO desafio que anseio há milênios?\n$Vamos começar.", "firstStageWin": "Entendo. A presença que senti era realmente real.\nParece que não preciso mais me segurar.\n$Não me decepcione.", "secondStageWin": "…Magnífico." -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/dialogue.json b/src/locales/pt_BR/dialogue.json index c09066b8744..56cd5333d12 100644 --- a/src/locales/pt_BR/dialogue.json +++ b/src/locales/pt_BR/dialogue.json @@ -970,112 +970,115 @@ }, "stat_trainer_buck": { "encounter": { - "1": "...I'm telling you right now. I'm seriously tough. Act surprised!", - "2": "I can feel my Pokémon shivering inside their Pokéballs!" + "1": "...Estou te falando agora. Eu sou muito durão. Finge surpresa!", + "2": "Posso sentir meus Pokémon tremendo dentro de suas Pokébolas!" }, "victory": { - "1": "Heeheehee!\nSo hot, you!", - "2": "Heeheehee!\nSo hot, you!" + "1": "Hehehe!\nVocê é uma máquina!", + "2": "Hehehe!\nVocê é uma máquina!" }, "defeat": { - "1": "Whoa! You're all out of gas, I guess.", - "2": "Whoa! You're all out of gas, I guess." + "1": "Uau! Acho que vocês estão sem gás.", + "2": "Uau! Acho que vocês estão sem gás." } }, "stat_trainer_cheryl": { "encounter": { - "1": "My Pokémon have been itching for a battle.", - "2": "I should warn you, my Pokémon can be quite rambunctious." + "1": "Meus Pokémon estavam ansiosos por uma batalha.", + "2": "Devo avisá-lo, meus Pokémon podem ser bastante agitados.", + "2_female": "Devo avisá-la, meus Pokémon podem ser bastante agitados." }, "victory": { - "1": "Striking the right balance of offense and defense... It's not easy to do.", - "2": "Striking the right balance of offense and defense... It's not easy to do." + "1": "Acertar o equilíbrio certo entre ataque e defesa... Não é fácil de fazer.", + "2": "Acertar o equilíbrio certo entre ataque e defesa... Não é fácil de fazer." }, "defeat": { - "1": "Do your Pokémon need any healing?", - "2": "Do your Pokémon need any healing?" + "1": "Seus Pokémon precisam de cura?", + "2": "Seus Pokémon precisam de cura?" } }, "stat_trainer_marley": { "encounter": { - "1": "... OK.\nI'll do my best.", - "2": "... OK.\nI... won't lose...!" + "1": "... Tá.\nVou dar o meu melhor.", + "2": "... Tá.\nEu... não vou perder...!" }, "victory": { "1": "... Awww.", "2": "... Awww." }, "defeat": { - "1": "... Goodbye.", - "2": "... Goodbye." + "1": "... Adeus.", + "2": "... Adeus." } }, "stat_trainer_mira": { "encounter": { - "1": "You will be shocked by Mira!", - "2": "Mira will show you that Mira doesn't get lost anymore!" + "1": "Você ficará surpreso com a Mira!", + "1_female": "Você ficará surpresa com a Mira!", + "2": "Mira vai te mostrar que ela não se perde mais!" }, "victory": { - "1": "Mira wonders if she can get very far in this land.", - "2": "Mira wonders if she can get very far in this land." + "1": "Mira se pergunta se conseguirá ir longe nessa terra.", + "2": "Mira se pergunta se conseguirá ir longe nessa terra." }, "defeat": { - "1": "Mira knew she would win!", - "2": "Mira knew she would win!" + "1": "Mira sabia que venceria!", + "2": "Mira sabia que venceria!" } }, "stat_trainer_riley": { "encounter": { - "1": "Battling is our way of greeting!", - "2": "We're pulling out all the stops to put your Pokémon down." + "1": "Lutar é nossa forma de saudação!", + "2": "Estamos fazendo de tudo para derrubar seus Pokémon." }, "victory": { - "1": "At times we battle, and sometimes we team up...$It's great how Trainers can interact.", - "2": "At times we battle, and sometimes we team up...$It's great how Trainers can interact." + "1": "Às vezes, lutamos e, às vezes, nos unimos...$É ótimo como Treinadores podem interagir.", + "2": "Às vezes, lutamos e, às vezes, nos unimos...$É ótimo como Treinadores podem interagir." }, "defeat": { - "1": "You put up quite the display.\nBetter luck next time.", - "2": "You put up quite the display.\nBetter luck next time." + "1": "Você fez uma bela exibição.\nMelhor sorte na próxima vez.", + "2": "Você fez uma bela exibição.\nMelhor sorte na próxima vez." } }, "winstrates_victor": { "encounter": { - "1": "That's the spirit! I like you!" + "1": "Esse é o espírito! Gosto de você!" }, "victory": { - "1": "A-ha! You're stronger than I thought!" + "1": "A-ha! Você é mais forte do que eu pensei!" } }, "winstrates_victoria": { "encounter": { - "1": "My goodness! Aren't you young?$You must be quite the trainer to beat my husband, though.$Now I suppose it's my turn to battle!" + "1": "Meu Deus! Você não é jovem?$Deve ser um grande Treinador para derrotar meu marido.$Acho que agora é a minha vez de lutar!", + "1_female": "Meu Deus! Você não é jovem?$Deve ser uma grande Treinadora para derrotar meu marido.$Acho que agora é a minha vez de lutar!" }, "victory": { - "1": "Uwah! Just how strong are you?!" + "1": "Uwah! Quão forte você é?!" } }, "winstrates_vivi": { "encounter": { - "1": "You're stronger than Mom? Wow!$But I'm strong, too!\nReally! Honestly!" + "1": "Você é mais forte que a Mamãe? Uau!$Mas eu também sou forte!\nDe verdade! Falando sério!" }, "victory": { - "1": "Huh? Did I really lose?\nSnivel... Grandmaaa!" + "1": "Ahn? Eu perdi mesmo?\nSnif... Vovóóó!" } }, "winstrates_vicky": { "encounter": { - "1": "How dare you make my precious\ngranddaughter cry!$I see I need to teach you a lesson.\nPrepare to feel the sting of defeat!" + "1": "Como ousa fazer minha preciosa\nneta chorar!$Vejo que preciso lhe dar uma lição.\nPrepare-se para sentir o ferrão da derrota!" }, "victory": { - "1": "Whoa! So strong!\nMy granddaughter wasn't lying." + "1": "Uau! Tão forte!\nMinha neta não estava mentindo." } }, "winstrates_vito": { "encounter": { - "1": "I trained together with my whole family,\nevery one of us!$I'm not losing to anyone!" + "1": "Treinei com toda a minha família,\ncada um de nós!$Não vou perder para para ninguém!" }, "victory": { - "1": "I was better than everyone in my family.\nI've never lost before..." + "1": "Eu era melhor do que todos em minha família.\nEu nunca perdi antes..." } }, "brock": { diff --git a/src/locales/pt_BR/egg.json b/src/locales/pt_BR/egg.json index 2a7a07f5206..cbe31d27ed4 100644 --- a/src/locales/pt_BR/egg.json +++ b/src/locales/pt_BR/egg.json @@ -11,7 +11,7 @@ "gachaTypeLegendary": "Chance de Lendário Aumentada", "gachaTypeMove": "Chance de Movimento de Ovo Raro Aumentada", "gachaTypeShiny": "Chance de Shiny Aumentada", - "eventType": "Mystery Event", + "eventType": "Evento Misterioso", "selectMachine": "Escolha uma máquina.", "notEnoughVouchers": "Você não tem vouchers suficientes!", "tooManyEggs": "Você já tem muitos ovos!", diff --git a/src/locales/pt_BR/filter-bar.json b/src/locales/pt_BR/filter-bar.json index 05898796d9f..45b17c33077 100644 --- a/src/locales/pt_BR/filter-bar.json +++ b/src/locales/pt_BR/filter-bar.json @@ -35,4 +35,4 @@ "sortByCandies": "# Doces", "sortByIVs": "IVs", "sortByName": "Nome" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/game-mode.json b/src/locales/pt_BR/game-mode.json index 9aa0f286959..674552bd923 100644 --- a/src/locales/pt_BR/game-mode.json +++ b/src/locales/pt_BR/game-mode.json @@ -5,4 +5,4 @@ "dailyRun": "Desafio Diário", "unknown": "Desconhecido", "challenge": "Desafio" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/game-stats-ui-handler.json b/src/locales/pt_BR/game-stats-ui-handler.json index eb36f484cc3..b473aa09c2f 100644 --- a/src/locales/pt_BR/game-stats-ui-handler.json +++ b/src/locales/pt_BR/game-stats-ui-handler.json @@ -39,4 +39,4 @@ "epicEggsPulled": "Ovos Épicos Ganhos", "legendaryEggsPulled": "Ovos Lendários Ganhos", "manaphyEggsPulled": "Ovos de Manaphy Ganhos" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/growth.json b/src/locales/pt_BR/growth.json index d9b11dc23c3..272856a006c 100644 --- a/src/locales/pt_BR/growth.json +++ b/src/locales/pt_BR/growth.json @@ -5,4 +5,4 @@ "Medium_Slow": "Meio Lento", "Slow": "Lento", "Fluctuating": "Muito Lento" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/menu.json b/src/locales/pt_BR/menu.json index 415796f91ed..97acc63400f 100644 --- a/src/locales/pt_BR/menu.json +++ b/src/locales/pt_BR/menu.json @@ -52,4 +52,4 @@ "rename": "Renomear", "nickname": "Apelido", "errorServerDown": "Opa! Não foi possível conectar-se ao servidor.\n\nVocê pode deixar essa janela aberta,\npois o jogo irá se reconectar automaticamente." -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/modifier-select-ui-handler.json b/src/locales/pt_BR/modifier-select-ui-handler.json index b111c41cc98..e741eaa5f21 100644 --- a/src/locales/pt_BR/modifier-select-ui-handler.json +++ b/src/locales/pt_BR/modifier-select-ui-handler.json @@ -9,6 +9,6 @@ "checkTeamDesc": "Cheque seu time ou use um item de mudança de forma.", "rerollCost": "₽{{formattedMoney}}", "itemCost": "₽{{formattedMoney}}", - "continueNextWaveButton": "Continue", - "continueNextWaveDescription": "Continue to the next wave" + "continueNextWaveButton": "Continuar", + "continueNextWaveDescription": "Continuar para a próxima onda" } diff --git a/src/locales/pt_BR/modifier-type.json b/src/locales/pt_BR/modifier-type.json index d5e32c45126..ae7a2cba93e 100644 --- a/src/locales/pt_BR/modifier-type.json +++ b/src/locales/pt_BR/modifier-type.json @@ -69,18 +69,18 @@ "description": "Aumenta o atributo base de {{stat}} em 10%. Quanto maior os IVs, maior o limite de aumento." }, "PokemonBaseStatTotalModifierType": { - "name": "Shuckle Juice", - "description": "{{increaseDecrease}} all of the holder's base stats by {{statValue}}. You were {{blessCurse}} by the Shuckle.", + "name": "Suco Shuckle", + "description": "{{increaseDecrease}} todos os atributos base de quem o segurar por {{statValue}}. Você foi {{blessCurse}} por Shuckle.", "extra": { - "increase": "Increases", - "decrease": "Decreases", - "blessed": "blessed", - "cursed": "cursed" + "increase": "Aumenta", + "decrease": "Diminui", + "blessed": "abençoado", + "cursed": "amaldiçoado" } }, "PokemonBaseStatFlatModifierType": { - "name": "Old Gateau", - "description": "Increases the holder's {{stats}} base stats by {{statValue}}. Found after a strange dream." + "name": "Doce Antigo", + "description": "Aumenta os atributos base de {{stats}} de quem o segurar por {{statValue}}. Encontrado depois de um sonho estranho." }, "AllPokemonFullHpRestoreModifierType": { "description": "Restaura totalmente os PS de todos os Pokémon." @@ -266,11 +266,11 @@ "name": "Lentes de Mira", "description": "Estas lentes facilitam o foco em pontos fracos. Aumenta a chance de acerto crítico de quem a segurar." }, - "DIRE_HIT": { - "name": "Direto", - "extra": { - "raises": "Chance de Acerto Crítico" - } + "DIRE_HIT": { + "name": "Direto", + "extra": { + "raises": "Chance de Acerto Crítico" + } }, "LEEK": { "name": "Alho-poró", @@ -417,11 +417,23 @@ "description": "Adiciona uma chance de 1% de que um Pokémon selvagem seja uma fusão." }, - "MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { "name": "Shuckle Juice" }, - "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { "name": "Black Sludge", "description": "The stench is so powerful that shops will only sell you items at a steep cost increase." }, - "MYSTERY_ENCOUNTER_MACHO_BRACE": { "name": "Macho Brace", "description": "Defeating a Pokémon grants the holder a Macho Brace stack. Each stack slightly boosts stats, with an extra bonus at max stacks." }, - "MYSTERY_ENCOUNTER_OLD_GATEAU": { "name": "Old Gateau", "description": "Increases the holder's {{stats}} stats by {{statValue}}." }, - "MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { "name": "Golden Bug Net", "description": "Imbues the owner with luck to find Bug Type Pokémon more often. Has a strange heft to it." } + "MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { "name": "Suco Shuckle" }, + "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { + "name": "Lodo Escuro", + "description": "O fedor é tão forte que as lojas só venderão itens com um grande aumento de custo." + }, + "MYSTERY_ENCOUNTER_MACHO_BRACE": { + "name": "Pulseira Macho", + "description": "Derrotar um Pokémon concede a quem segura uma pilha de Pulseira Macho. Cada pilha aumenta ligeiramente os atributos, com um bônus extra no máximo de pilhas." + }, + "MYSTERY_ENCOUNTER_OLD_GATEAU": { + "name": "Doce Antigo", + "description_pt": "Aumenta os atributos de {{stats}} de quem o segurar por {{statValue}}." + }, + "MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { + "name": "Rede de Insetos Dourada", + "description": "Concede ao dono sorte para encontrar Pokémon do tipo Inseto com mais frequência. Tem um peso estranho." + } }, "SpeciesBoosterItem": { "LIGHT_BALL": { diff --git a/src/locales/pt_BR/modifier.json b/src/locales/pt_BR/modifier.json index 38622de579e..6d1a1222f73 100644 --- a/src/locales/pt_BR/modifier.json +++ b/src/locales/pt_BR/modifier.json @@ -9,4 +9,4 @@ "contactHeldItemTransferApply": "{{itemName}} de {{pokemonNameWithAffix}} foi pego(a)\npela {{typeName}} de {{pokemonName}}!", "enemyTurnHealApply": "{{pokemonNameWithAffix}}\nrestaurou um pouco de seus PS!", "bypassSpeedChanceApply": "{{pokemonName}} se move mais rápido que o normal graças à sua {{itemName}}!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/move-trigger.json b/src/locales/pt_BR/move-trigger.json index 4549f83cdf1..a2ffa6500b4 100644 --- a/src/locales/pt_BR/move-trigger.json +++ b/src/locales/pt_BR/move-trigger.json @@ -4,11 +4,11 @@ "absorbedElectricity": "{{pokemonName}} absorveu eletricidade!", "switchedStatChanges": "{{pokemonName}} trocou as mudanças de atributo com o alvo!", "goingAllOutForAttack": "{{pokemonName}} está arriscando tudo nesse ataque!", - "regainedHealth": "{{pokemonName}} recuperou/nsaúde!", - "keptGoingAndCrashed": "{{pokemonName}} errou o alvo/ne se arrebentou!", + "regainedHealth": "{{pokemonName}} recuperou\nsaúde!", + "keptGoingAndCrashed": "{{pokemonName}} errou o alvo\ne se arrebentou!", "fled": "{{pokemonName}} fugiu!", "cannotBeSwitchedOut": "{{pokemonName}} não pode ser trocado!", - "swappedAbilitiesWithTarget": "{{pokemonName}} trocou/nde habilidades com o alvo!", + "swappedAbilitiesWithTarget": "{{pokemonName}} trocou\nde habilidades com o alvo!", "coinsScatteredEverywhere": "Moedas foram espalhadas por toda parte!", "attackedByItem": "{{pokemonName}} está prestes a ser atacado por {{itemName}}!", "whippedUpAWhirlwind": "{{pokemonName}} criou\num redemoinho de vento!", @@ -18,23 +18,23 @@ "loweredItsHead": "{{pokemonName}} abaixou sua cabeça!", "isGlowing": "{{pokemonName}} ficou envolto em uma luz forte!", "bellChimed": "Um sino tocou!", - "foresawAnAttack": "{{pokemonName}} previu/num ataque!", + "foresawAnAttack": "{{pokemonName}} previu\num ataque!", "isTighteningFocus": "{{pokemonName}} está\naumentando seu foco!", - "hidUnderwater": "{{pokemonName}} se escondeu/nembaixo d'água!", + "hidUnderwater": "{{pokemonName}} se escondeu\nembaixo d'água!", "soothingAromaWaftedThroughArea": "Um aroma suave se espalhou pelo ambiente!", "sprangUp": "{{pokemonName}} se levantou!", "choseDoomDesireAsDestiny": "{{pokemonName}} escolheu\no Desejo da Perdição como seu destino!", "vanishedInstantly": "{{pokemonName}} desapareceu\nde repente!", "tookTargetIntoSky": "{{pokemonName}} levou {{targetName}}\npara o céu!", - "becameCloakedInFreezingLight": "{{pokemonName}} ficou envolto/nem uma luz congelante!", - "becameCloakedInFreezingAir": "{{pokemonName}} ficou envolto/nem ar congelante!", + "becameCloakedInFreezingLight": "{{pokemonName}} ficou envolto\nem uma luz congelante!", + "becameCloakedInFreezingAir": "{{pokemonName}} ficou envolto\nem ar congelante!", "isChargingPower": "{{pokemonName}} está absorvendo energia!", "burnedItselfOut": "{{pokemonName}} apagou seu próprio fogo!", "startedHeatingUpBeak": "{{pokemonName}} começou\na esquentar seu bico!", "setUpShellTrap": "{{pokemonName}} armou uma armadilha de carapaça!", "isOverflowingWithSpacePower": "{{pokemonName}} está sobrecarregado\ncom energia espacial!", "usedUpAllElectricity": "{{pokemonName}} usou toda a sua eletricidade!", - "stoleItem": "{{pokemonName}} roubou/no(a) {{itemName}} de {{targetName}}!", + "stoleItem": "{{pokemonName}} roubou\no(a) {{itemName}} de {{targetName}}!", "incineratedItem": "{{pokemonName}} incinerou\na {{itemName}} de {{targetName}}!", "knockedOffItem": "{{pokemonName}} derrubou\no(a) {{itemName}} de {{targetName}}!", "tookMoveAttack": "{{pokemonName}} pegou\no movimento {{moveName}}!", diff --git a/src/locales/pt_BR/mystery-encounter-messages.json b/src/locales/pt_BR/mystery-encounter-messages.json index 3b81c8e46f0..2c8b3738949 100644 --- a/src/locales/pt_BR/mystery-encounter-messages.json +++ b/src/locales/pt_BR/mystery-encounter-messages.json @@ -1,7 +1,7 @@ { - "paid_money": "You paid ₽{{amount, number}}.", - "receive_money": "You received ₽{{amount, number}}!", - "affects_pokedex": "Affects Pokédex Data", - "cancel_option": "Return to encounter option select.", - "view_party_button": "View Party" + "paid_money": "Você pagou ₽{{amount, number}}.", + "receive_money": "Você recebeu ₽{{amount, number}}!", + "affects_pokedex": "Afeta Dados da Pokédex", + "cancel_option": "Voltar para a seleção de opções de encontro.", + "view_party_button": "Ver Equipe" } diff --git a/src/locales/pt_BR/nature.json b/src/locales/pt_BR/nature.json index 5678c74061c..11be27d6f53 100644 --- a/src/locales/pt_BR/nature.json +++ b/src/locales/pt_BR/nature.json @@ -24,4 +24,4 @@ "Sassy": "Atrevida", "Careful": "Cuidadosa", "Quirky": "Peculiar" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/pokeball.json b/src/locales/pt_BR/pokeball.json index 3a059654bb3..5f1dff974ec 100644 --- a/src/locales/pt_BR/pokeball.json +++ b/src/locales/pt_BR/pokeball.json @@ -5,4 +5,4 @@ "rogueBall": "Bola Rogue", "masterBall": "Bola Mestra", "luxuryBall": "Bola Luxo" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/pokemon-form-battle.json b/src/locales/pt_BR/pokemon-form-battle.json index 6ea7947fb66..50fbeeef29e 100644 --- a/src/locales/pt_BR/pokemon-form-battle.json +++ b/src/locales/pt_BR/pokemon-form-battle.json @@ -11,4 +11,4 @@ "revertChange": "{{pokemonName}} voltou\npara sua forma original!", "formChange": "{{preName}} mudou de forma!", "disguiseChange": "O seu disfarce serviu-lhe de isca!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/pokemon-info-container.json b/src/locales/pt_BR/pokemon-info-container.json index dcf1fc4e0b5..3ba3312a401 100644 --- a/src/locales/pt_BR/pokemon-info-container.json +++ b/src/locales/pt_BR/pokemon-info-container.json @@ -4,4 +4,4 @@ "ability": "Habilidade:", "nature": "Natureza:", "form": "Forma:" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/pokemon.json b/src/locales/pt_BR/pokemon.json index f780d2accbd..f50b89c4f70 100644 --- a/src/locales/pt_BR/pokemon.json +++ b/src/locales/pt_BR/pokemon.json @@ -1081,4 +1081,4 @@ "paldea_tauros": "Tauros", "paldea_wooper": "Wooper", "bloodmoon_ursaluna": "Ursaluna" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/run-history.json b/src/locales/pt_BR/run-history.json index 74cc2c35d28..a615b598bcf 100644 --- a/src/locales/pt_BR/run-history.json +++ b/src/locales/pt_BR/run-history.json @@ -34,4 +34,4 @@ "hallofFameText_female": "Bem-vinda ao Hall da Fama!", "viewHallOfFame": "Veja o Hall da Fama!", "viewEndingSplash": "Veja a arte final!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/save-slot-select-ui-handler.json b/src/locales/pt_BR/save-slot-select-ui-handler.json index 31fe28de691..60ea7b073e9 100644 --- a/src/locales/pt_BR/save-slot-select-ui-handler.json +++ b/src/locales/pt_BR/save-slot-select-ui-handler.json @@ -4,4 +4,4 @@ "wave": "Onda", "lv": "Nv", "empty": "Vazio" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/settings.json b/src/locales/pt_BR/settings.json index 74f3918bed8..6c4eae23a82 100644 --- a/src/locales/pt_BR/settings.json +++ b/src/locales/pt_BR/settings.json @@ -104,4 +104,4 @@ "reroll": "Atualizar", "shop": "Loja", "checkTeam": "Checar Time" -} +} \ No newline at end of file diff --git a/src/locales/pt_BR/splash-messages.json b/src/locales/pt_BR/splash-messages.json index 55c0b1b9e74..7e4001610e2 100644 --- a/src/locales/pt_BR/splash-messages.json +++ b/src/locales/pt_BR/splash-messages.json @@ -33,4 +33,4 @@ "eeveeExpo": "Eevee Expo!", "ynoproject": "YNOproject!", "breedersInSpace": "Criadores Pokémon no Espaço!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/starter-select-ui-handler.json b/src/locales/pt_BR/starter-select-ui-handler.json index 1d83e43f12c..8de6c8bcae4 100644 --- a/src/locales/pt_BR/starter-select-ui-handler.json +++ b/src/locales/pt_BR/starter-select-ui-handler.json @@ -42,4 +42,4 @@ "locked": "Bloqueada", "disabled": "Desativada", "uncaught": "Não capturado" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/status-effect.json b/src/locales/pt_BR/status-effect.json index 5a851a0bdeb..9b33b9fa8f7 100644 --- a/src/locales/pt_BR/status-effect.json +++ b/src/locales/pt_BR/status-effect.json @@ -62,4 +62,4 @@ "overlap": "{{pokemonNameWithAffix}} já\nestá queimado!", "heal": "{{pokemonNameWithAffix}} foi\ncurado de sua queimadura!" } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/terrain.json b/src/locales/pt_BR/terrain.json index 73df2b441ac..a672c58ca82 100644 --- a/src/locales/pt_BR/terrain.json +++ b/src/locales/pt_BR/terrain.json @@ -13,4 +13,4 @@ "psychicStartMessage": "O campo de batalha ficou esquisito!", "psychicClearMessage": "A esquisitice sumiu do campo de batalha!", "defaultBlockMessage": "{{pokemonNameWithAffix}} está protegido pelo Terreno {{terrainName}}!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/trainer-classes.json b/src/locales/pt_BR/trainer-classes.json index 482265d00c6..cfa5fc5e0a4 100644 --- a/src/locales/pt_BR/trainer-classes.json +++ b/src/locales/pt_BR/trainer-classes.json @@ -127,5 +127,4 @@ "macro_grunt": "Treinador da Macro Cosmos", "macro_grunt_female": "Treinadora da Macro Cosmos", "macro_grunts": "Treinadores da Macro Cosmos" - } diff --git a/src/locales/pt_BR/tutorial.json b/src/locales/pt_BR/tutorial.json index 92ea0dd080f..09199a9e31c 100644 --- a/src/locales/pt_BR/tutorial.json +++ b/src/locales/pt_BR/tutorial.json @@ -1,7 +1,7 @@ { "intro": "Bem-vindo ao PokéRogue!\n$Este é um fangame Pokémon focado em batalhas com elementos roguelite.\n$Este jogo não é monetizado e não reivindicamos propriedade do Pokémon nem dos ativos protegidos$por direitos autorais usados.\n$O jogo é um trabalho em andamento,\nmas totalmente jogável.\n$Para relatórios de bugs, use a comunidade do Discord.\n$Se o jogo rodar lentamente, certifique-se de que\na 'Aceleração de Hardware' esteja ativada$nas configurações do seu navegador.", "accessMenu": "Para acessar o menu, pressione M ou Esc.\n$O menu contém configurações e diversas funções.", - "menu": "A partir deste menu, você pode\\nacessar as configurações.\n$A partir das configurações, você\npode alterar a velocidade do jogo,\n$o estilo da janela e outras opções.\n$Há também vários outros recursos aqui.\nCertifique-se de verificar todos eles!", + "menu": "A partir deste menu, você pode\nacessar as configurações.\n$A partir das configurações, você\npode alterar a velocidade do jogo,\n$o estilo da janela e outras opções.\n$Há também vários outros recursos aqui.\nCertifique-se de verificar todos eles!", "starterSelect": "Nesta tela, você pode selecionar seus iniciais\npressionando Z ou a barra de espaço.\n$Esses serão os primeiros membros da sua equipe.\n$Cada inicial tem um custo. Sua equipe pode ter até 6 membros,\ndesde que desde que o custo total não exceda 10.\n$Você pode escolher o gênero, a habilidade\ne até a forma do seu inicial.\n$Essas opções dependem das variantes dessa\nespécie que você já capturou ou chocou.\n$Os IVs de cada inicial são os melhores de todos os Pokémon\ndaquela espécie que você já capturou ou chocou.\n$Sempre capture vários Pokémon de todas as espécies!", "pokerus": "Todo dia, 3 Pokémon iniciais ficam com uma borda roxa.\n$Caso veja um inicial que você possui com uma dessa, tente\nadicioná-lo a sua equipe. Lembre-se de olhar seu sumário!", "statChange": "As mudanças de atributos se mantém após a batalha desde que o Pokémon não seja trocado.\n$Seus Pokémon voltam a suas Poké Bolas antes de batalhas contra treinadores e de entrar em um novo bioma.\n$Para ver as mudanças de atributos dos Pokémon em campo, mantena C ou Shift pressionado durante a batalha.", diff --git a/src/locales/pt_BR/voucher.json b/src/locales/pt_BR/voucher.json index c33dfa20e0f..7430fecaece 100644 --- a/src/locales/pt_BR/voucher.json +++ b/src/locales/pt_BR/voucher.json @@ -6,4 +6,4 @@ "eggVoucherGold": "Voucher de Ovo Dourado", "locked": "Bloqueado", "defeatTrainer": "Derrote {{trainerName}}" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/weather.json b/src/locales/pt_BR/weather.json index 54b929da0b9..eb3b3a74005 100644 --- a/src/locales/pt_BR/weather.json +++ b/src/locales/pt_BR/weather.json @@ -29,4 +29,4 @@ "strongWindsLapseMessage": "Os ventos fortes continuam.", "strongWindsEffectMessage": "A corrente de ar misteriosa enfraqueceu o ataque!", "strongWindsClearMessage": "Os ventos fortes diminuíram." -} \ No newline at end of file +} From 82c171769a931154af6feabd2a24fd26ccefad56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Ricardo=20Fleury=20Oliveira?= Date: Mon, 16 Sep 2024 14:57:02 -0300 Subject: [PATCH 23/38] update Brazilian Portuguese translation for aftermath --- src/locales/pt_BR/ability.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/pt_BR/ability.json b/src/locales/pt_BR/ability.json index c4180ff01dd..57af4354225 100644 --- a/src/locales/pt_BR/ability.json +++ b/src/locales/pt_BR/ability.json @@ -421,7 +421,7 @@ }, "aftermath": { "name": "Aftermath", - "description": "Caso o Pokémon seja derrotado em decorrência de um movimento de contato, o atacante recebe dano." + "description": "Causa dano ao atacante se ele entrar em contato com o Pokémon com um golpe final." }, "anticipation": { "name": "Anticipation", From e791833a61245c77ddba6f6ca0c08fa5869d61d8 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Mon, 16 Sep 2024 20:04:45 +0200 Subject: [PATCH 24/38] Update src/locales/es/mystery-encounters/delibirdy-dialogue.json Co-authored-by: DanStevensonx <114961842+DanStevensonx@users.noreply.github.com> --- .../delibirdy-dialogue.json | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/locales/es/mystery-encounters/delibirdy-dialogue.json b/src/locales/es/mystery-encounters/delibirdy-dialogue.json index ca1fefa3a39..90f1664ea11 100644 --- a/src/locales/es/mystery-encounters/delibirdy-dialogue.json +++ b/src/locales/es/mystery-encounters/delibirdy-dialogue.json @@ -1,29 +1,30 @@ { - "intro": "A pack of {{delibirdName}} have appeared!", - "title": "Delibir-dy", - "description": "The {{delibirdName}}s are looking at you expectantly, as if they want something. Perhaps giving them an item or some money would satisfy them?", - "query": "What will you give them?", - "invalid_selection": "Pokémon doesn't have that kind of item.", + "intro": "¡Ha aparecido una bandada de {{delibirdName}}!", + "title": "Pajarradas", + "description": "Los {{delibirdName}} te miran expectantes, como si quisieran algo. Tal vez darles un objeto o algo de dinero los satisfaría.", + "query": "¿Qué les darás?", + "invalid_selection": "Pokémon no tienen ese tipo de objeto.", "option": { "1": { - "label": "Give Money", - "tooltip": "(-) Give the {{delibirdName}}s {{money, money}}\n(+) Receive a Gift Item", - "selected": "You toss the money to the {{delibirdName}}s,\nwho chatter amongst themselves excitedly.$They turn back to you and happily give you a present!" + "label": "Dar dinero", + "tooltip": "(-) Dar a los {{delibirdName}}s {{money, money}}\n(+) Recibe un objeto de regalo", + "selected": "Lanzas el dinero a los {{delibirdName}}s, \nque charlan emocionados entre ellos.$Luego se vuelven hacia ti y te dan un regalo con alegría." }, "2": { - "label": "Give Food", - "tooltip": "(-) Give the {{delibirdName}}s a Berry or Reviver Seed\n(+) Receive a Gift Item", - "select_prompt": "Select an item to give.", - "selected": "You toss the {{chosenItem}} to the {{delibirdName}}s,\nwho chatter amongst themselves excitedly.$They turn back to you and happily give you a present!" + "label": "Dar comida", + "tooltip": "(-) Dar a los {{delibirdName}}s una Baya o Semilla milagro\n(+) Recibe un objeto de regalo", + "select_prompt": "Selecciona un objeto para dar.", + "selected": "Lanzas el {{chosenItem}} a los {{delibirdName}},\nque charlan emocionados entre ellos.$Se vuelven hacia ti y te dan un regalo alegremente." }, "3": { - "label": "Give an Item", - "tooltip": "(-) Give the {{delibirdName}}s a Held Item\n(+) Receive a Gift Item", - "select_prompt": "Select an item to give.", - "selected": "You toss the {{chosenItem}} to the {{delibirdName}}s,\nwho chatter amongst themselves excitedly.$They turn back to you and happily give you a present!" + "label": "Dar objeto", + "tooltip": "(-) Dar a los {{delibirdName}}s un objeto equipado\n(+) Recibe un objeto de regalo", + "select_prompt": "Selecciona un objeto para dar.", + "selected": "Lanzas el {{chosenItem}} a los {{delibirdName}},\nque charlan emocionados entre ellos.$Se vuelven hacia ti y te dan un regalo alegremente." } }, - "outro": "The {{delibirdName}} pack happily waddles off into the distance.$What a curious little exchange!" + "outro": "La bandada de {{delibirdName}} se aleja felizmente a lo lejos. ¡Qué intercambio tan curioso!" +} } \ No newline at end of file From 65a9f37e592435501aea42112aac743699bf23d0 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Mon, 16 Sep 2024 20:08:53 +0200 Subject: [PATCH 25/38] Update delibirdy-dialogue.json --- src/locales/es/mystery-encounters/delibirdy-dialogue.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/locales/es/mystery-encounters/delibirdy-dialogue.json b/src/locales/es/mystery-encounters/delibirdy-dialogue.json index 90f1664ea11..79e0b457b01 100644 --- a/src/locales/es/mystery-encounters/delibirdy-dialogue.json +++ b/src/locales/es/mystery-encounters/delibirdy-dialogue.json @@ -27,4 +27,3 @@ }, "outro": "La bandada de {{delibirdName}} se aleja felizmente a lo lejos. ¡Qué intercambio tan curioso!" } -} \ No newline at end of file From 2221afca817005496cfed52eac3dffac623a1ac3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Marques?= <44369723+tomasrggm@users.noreply.github.com> Date: Mon, 16 Sep 2024 19:44:11 +0100 Subject: [PATCH 26/38] [QoL] Slight Resize and Reallocate to IV graph in new game screen (#1928) * Resize and Reallocate to IV graph in new game * decrease moveset container size * fix to font shadow * fix to shadows * Remove unused variable * Revert IV text back to original size * fix eslint error check post merge * Update src/ui/stats-container.ts Reformat statLabel line. Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: tomasrggm Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/ui/starter-select-ui-handler.ts | 2 +- src/ui/stats-container.ts | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index ee56a3631dd..308614887e9 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -760,7 +760,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCaughtHatchedContainer.add(this.pokemonHatchedCountText); this.pokemonMovesContainer = this.scene.add.container(102, 16); - this.pokemonMovesContainer.setScale(0.5); + this.pokemonMovesContainer.setScale(0.375); for (let m = 0; m < 4; m++) { const moveContainer = this.scene.add.container(0, 14 * m); diff --git a/src/ui/stats-container.ts b/src/ui/stats-container.ts index c6e0ea3a71c..06dd6e7c035 100644 --- a/src/ui/stats-container.ts +++ b/src/ui/stats-container.ts @@ -4,12 +4,15 @@ import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./t import { PERMANENT_STATS, getStatKey } from "#app/enums/stat"; import i18next from "i18next"; + const ivChartSize = 24; const ivChartStatCoordMultipliers = [[0, -1], [0.825, -0.5], [0.825, 0.5], [-0.825, -0.5], [-0.825, 0.5], [0, 1]]; const speedLabelOffset = -3; const sideLabelOffset = 1; const ivLabelOffset = [0, sideLabelOffset, -sideLabelOffset, sideLabelOffset, -sideLabelOffset, speedLabelOffset]; +const ivChartLabelyOffset= [0, 5, 0, 5, 0, 0]; // doing this so attack does not overlap with (+N) 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 { @@ -29,7 +32,6 @@ export class StatsContainer extends Phaser.GameObjects.Container { setup() { this.setName("stats"); 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); @@ -55,12 +57,19 @@ export class StatsContainer extends Phaser.GameObjects.Container { this.ivStatValueTexts = []; for (const s of PERMANENT_STATS) { - const statLabel = addTextObject(this.scene, ivChartBg.x + (ivChartSize) * ivChartStatCoordMultipliers[s][0] * 1.325, ivChartBg.y + (ivChartSize) * ivChartStatCoordMultipliers[s][1] * 1.325 - 4 + ivLabelOffset[s], i18next.t(getStatKey(s)), TextStyle.TOOLTIP_CONTENT); + const statLabel = addTextObject( + this.scene, + ivChartBg.x + (ivChartSize) * ivChartStatCoordMultipliers[s][0] * 1.325 + (this.showDiff ? 0 : ivLabelOffset[s]), + ivChartBg.y + (ivChartSize) * ivChartStatCoordMultipliers[s][1] * 1.325 - 4 + (this.showDiff ? 0 : ivChartLabelyOffset[s]), + i18next.t(getStatKey(s)), + TextStyle.TOOLTIP_CONTENT + ); statLabel.setOrigin(0.5); - this.ivStatValueTexts[s] = addBBCodeTextObject(this.scene, statLabel.x, statLabel.y + 8, "0", TextStyle.TOOLTIP_CONTENT); + this.ivStatValueTexts[s] = addBBCodeTextObject(this.scene, statLabel.x - (this.showDiff ? 0 : ivLabelOffset[s]), statLabel.y + 8, "0", TextStyle.TOOLTIP_CONTENT); this.ivStatValueTexts[s].setOrigin(0.5); + this.add(statLabel); this.add(this.ivStatValueTexts[s]); } From d5cce666d3483f14310374bf47a4b4a147d3e726 Mon Sep 17 00:00:00 2001 From: Blitzy <118096277+Blitz425@users.noreply.github.com> Date: Mon, 16 Sep 2024 14:03:13 -0500 Subject: [PATCH 27/38] Remove Dragon Ascent Requirement (#4284) --- src/data/pokemon-forms.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 4fc833939e4..a904f497b0f 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -684,7 +684,7 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.GROUDON, "", SpeciesFormKey.PRIMAL, new SpeciesFormChangeItemTrigger(FormChangeItem.RED_ORB)) ], [Species.RAYQUAZA]: [ - new SpeciesFormChange(Species.RAYQUAZA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeCompoundTrigger(new SpeciesFormChangeItemTrigger(FormChangeItem.RAYQUAZITE), new SpeciesFormChangeMoveLearnedTrigger(Moves.DRAGON_ASCENT))) + new SpeciesFormChange(Species.RAYQUAZA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.RAYQUAZITE)) ], [Species.DEOXYS]: [ new SpeciesFormChange(Species.DEOXYS, "normal", "attack", new SpeciesFormChangeItemTrigger(FormChangeItem.SHARP_METEORITE)), From 0dabf87815fee2454f1c7b980aad8df7aeea9482 Mon Sep 17 00:00:00 2001 From: podar <1999688+podarsmarty@users.noreply.github.com> Date: Mon, 16 Sep 2024 14:08:50 -0500 Subject: [PATCH 28/38] Being explicit in vite configuration for relative paths (#4264) --- vite.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/vite.config.ts b/vite.config.ts index 1fd85e2572f..946315c4b7b 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -31,6 +31,7 @@ export default defineConfig(({mode}) => { return ({ ...defaultConfig, + base: '', esbuild: { pure: mode === 'production' ? ['console.log'] : [], keepNames: true, From 4605ed4c4fbafd99b9131f3ada47df10a4289dfc Mon Sep 17 00:00:00 2001 From: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Date: Mon, 16 Sep 2024 21:18:57 +0200 Subject: [PATCH 29/38] [Localization] Localized status condition icon (#4286) * Status Condition Icons now can be localized. Already added german * More --- public/images/statuses_ca_ES.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_ca_ES.png | Bin 0 -> 441 bytes public/images/statuses_de.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_de.png | Bin 0 -> 2857 bytes public/images/statuses_es.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_es.png | Bin 0 -> 441 bytes public/images/statuses_fr.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_fr.png | Bin 0 -> 2714 bytes public/images/statuses_it.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_it.png | Bin 0 -> 441 bytes public/images/statuses_ja.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_ja.png | Bin 0 -> 2936 bytes public/images/statuses_ko.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_ko.png | Bin 0 -> 441 bytes public/images/statuses_pt_BR.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_pt_BR.png | Bin 0 -> 519 bytes public/images/statuses_zh_CN.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_zh_CN.png | Bin 0 -> 441 bytes public/images/statuses_zh_TW.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_zh_TW.png | Bin 0 -> 441 bytes src/loading-scene.ts | 3 + src/ui/battle-info.ts | 2 +- src/ui/party-ui-handler.ts | 2 +- src/ui/summary-ui-handler.ts | 2 +- 24 files changed, 1886 insertions(+), 3 deletions(-) create mode 100644 public/images/statuses_ca_ES.json create mode 100644 public/images/statuses_ca_ES.png create mode 100644 public/images/statuses_de.json create mode 100644 public/images/statuses_de.png create mode 100644 public/images/statuses_es.json create mode 100644 public/images/statuses_es.png create mode 100644 public/images/statuses_fr.json create mode 100644 public/images/statuses_fr.png create mode 100644 public/images/statuses_it.json create mode 100644 public/images/statuses_it.png create mode 100644 public/images/statuses_ja.json create mode 100644 public/images/statuses_ja.png create mode 100644 public/images/statuses_ko.json create mode 100644 public/images/statuses_ko.png create mode 100644 public/images/statuses_pt_BR.json create mode 100644 public/images/statuses_pt_BR.png create mode 100644 public/images/statuses_zh_CN.json create mode 100644 public/images/statuses_zh_CN.png create mode 100644 public/images/statuses_zh_TW.json create mode 100644 public/images/statuses_zh_TW.png diff --git a/public/images/statuses_ca_ES.json b/public/images/statuses_ca_ES.json new file mode 100644 index 00000000000..be1b78e0e41 --- /dev/null +++ b/public/images/statuses_ca_ES.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_ca_ES.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_ca_ES.png b/public/images/statuses_ca_ES.png new file mode 100644 index 0000000000000000000000000000000000000000..d372b989be966007e5fccac5f54fe341457e598b GIT binary patch literal 441 zcmV;q0Y?6bP)_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?zvW;$NS#fE(5J*QH>;TO# zqj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~aG}z~@!Q2dSmt873PQXLU zg+O|T!QM`p^A|K=@Suc&?b@)04> jC;!H^NCF;OJ`4N>xriuwM360I00000NkvXXu0mjf67avU literal 0 HcmV?d00001 diff --git a/public/images/statuses_de.json b/public/images/statuses_de.json new file mode 100644 index 00000000000..90840b8eeb1 --- /dev/null +++ b/public/images/statuses_de.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_de.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_de.png b/public/images/statuses_de.png new file mode 100644 index 0000000000000000000000000000000000000000..ab85384d5914456bab1ba11f57f19743c522ca93 GIT binary patch literal 2857 zcmbVO3s4m29bYwY=oLw#MQRwmoK}Ibw~u?VTTTz|c$||1go~c2G<&;yk8pQ;+%9k+ zp~eYe4AF?FV}z*bq&8TjQ$cY!h#0lnqSR0y@mVWl&{i>MeMI84-yLuz#u&$)+5Nu# zzW?L*`#<*E)j3%ik&~uRf*>f;kg3lFV>Gz65#iuDgRcG(3==(>OLzzpPYK-Ppe+qC z5G1N_n9PFN_&P~*E*Zse7FOnSd4MzoCC~SHD7ugpBo@}@aBHNu{QIR62cwZLRvJ;G zN5|S7ndM$KuRO~{mlx6mBb`4_lI$aa0T(M!5}(WI=1HGM8njD-d0-ilN`fLnp+=e# za40bwb0j*>%Sx0o6-;9aT%smqmTM#IUyOjq`;e(v68v^ z^bud+O(V4nf`>$q($Z2{sa(c+Z3spX1cKrSj>A9#=F8jy<%8Y)tWgVkmZ!ZAkKo|k zl7L0Z!W9b|DL^_*!Q}~=b@L-(0s%vOln23NXn;~skfB3zo?@>v=$xSu*2%h9x4;8g zEF|l(a{|ZPxgRkd+Wwvc5L%-#V(>fKdX*R33N4ij>Wh8YWCp)eH3)fUUBzMi9t10^u3&j5V_OTyH0 z6$4upDhwu21p|X68pe|>v<0)GEXB~H`q^FwXhF*P+;%{#{67?8&BY?kb#BUy36ha^g7C%YRfu`0-=|DBJjC5q#@q~On3)E5lQacNb zKBdZsz4M$^D5bn?iVfucC%XvwG4MQ9@^t7pgR2-d1qujPD_~rqAYhA%#$mZqg(X>V zLaszZ)Sm<$SCF`RwCkP+`bb!5JLR^q;DkV=&rjyr`f3>E56C?J33(8JABV&%S$C%A_U++r?ySlox2iGkSMT*6d)54?E6EMQ@$wyK9T0VNz z^6{r{+e=HnzT?A-8Vr#3=BX3gR#a5$WjQx$X8-fV6?2T}jd&!kB&%fi>Sb?UweCy^ zdm~hweqO7tA_^tnYy)klTspjTm^rAb)9(P#WhPm-+1&evp4VV z*Zs-kYQ?j)9T$DO`WNW&o8i!-Po}pwFP$2bw~2kxPp1yOt83BGvHs=1XdUeA@4nnv zA1~@9nZCj)-R1)S!gTkEJ-565bfdZRE9cB#ixrm>yAyRK_Al<%RCpF8(vQskHOkYP zL*LFr-)-G%*gvGX_F)vX(wWb1?_RT{?(Ng}{_{f7gLHqwE2`2*&y+vdbtPxQyuIZo^8X>)^zy0n zf-adblw1k_`+m>4x_{m8*d6mdj zU#~p-m*_inyHgk5*uVA2xt>-R-|BL&QrEZG#NUpCZ1BU4pQjbf^tT;%@s)L#*Y%lP zji%;Bxr??AE-E_xpz;{mHzTh2P}p}n!z(Tw4x5otFleh7%3gM@ybaKvJhwZ21v$59 z{^S5~a|#x7=J)R$8A_Vok(2UGdD}gA*>&PnQpDEodqUFjhfSZ&nW{Z|!SsHHwsY-o z&aeOD;kG@mpqpletsF>6`ENT{@apfh_io*eQr(txn!uo{g}0+>exeqq7Yn^zYY3~5>V=F~S={SPbh|J48h literal 0 HcmV?d00001 diff --git a/public/images/statuses_es.json b/public/images/statuses_es.json new file mode 100644 index 00000000000..4b44aa117e4 --- /dev/null +++ b/public/images/statuses_es.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_es.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_es.png b/public/images/statuses_es.png new file mode 100644 index 0000000000000000000000000000000000000000..d372b989be966007e5fccac5f54fe341457e598b GIT binary patch literal 441 zcmV;q0Y?6bP)_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?zvW;$NS#fE(5J*QH>;TO# zqj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~aG}z~@!Q2dSmt873PQXLU zg+O|T!QM`p^A|K=@Suc&?b@)04> jC;!H^NCF;OJ`4N>xriuwM360I00000NkvXXu0mjf67avU literal 0 HcmV?d00001 diff --git a/public/images/statuses_fr.json b/public/images/statuses_fr.json new file mode 100644 index 00000000000..78f78a0856c --- /dev/null +++ b/public/images/statuses_fr.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_fr.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_fr.png b/public/images/statuses_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..95989cd5d97ee13dbb7cdca89204ec7bff3f4263 GIT binary patch literal 2714 zcmb_e4Nw&48D2Fak_bvV!uZF!F{6NY`*T0sZU6-i<-`LEXTWG0_jbSg(c9Z&Zx1+> z`qNf~NdkssL~DqI8WD*x;1Gx*Hm%VXqlTXuN|cdGBSRd)!C1A`*zfqcnwA)w>CWta z@9sX|`#$gcJ@0;7ye4hsjG#F|2!hNor06r?I2)eJ0|Vf70aw%phv}}Ab#4TC`dQyO z3E6)j96_dq*iG4TwsAGXiGq^lMKe(53oeL8kl1DUE|%L2WYi3-c4r(mbn+C2+W9yv zOJgLAt|VZyrxZvavmnjH6>R2c9$OZV#^y87fdFI{%@-U_Hp+I z7A8Z#Vk{QCi^FWP>|$^{FE3A-r&5ZN6(?z$#t90iCe>ysHkXY5X30dDDrlT_faUVAhjlvW(b-gzYm3i;aQpeQ83Rj7Euydn66!5tpIm9 ztr+SrB9kOKL{KHxj7G-bbjz%h0|tE@1~XRL?L5P(HBc>DvqD9wGzwa+CKP4> zbPApWK&_&*8f}b!zFy=!zI7d+&%^l?rPFA&7E-~*sCfkm)G-R$OwtMh0FEFDngtqe zJbt=lhkeC5ezG5^|9@vV?j-?cM@YvX6`vfcUWECBCn`Z;i>0{(K3UiAV zIggb>$C#+(Z;c#p30MT#ec8Cgnj-0N@YZzquRp%Q+6Zo9{H+|YZz`7 zKGVNP!5jZB2b{1<65PXD(d%0gWJ;JppJ2-VP0QYeWk-pbyS9bv`9-1Kv?nxYa?ZQM zi-s4~*Vn_#@Sj^-pItn2aanqg3EQ(rSGiI9@*6X411;Nj?c*En)psi+ry~dBI}5wy z{9o&_vIXsE@0Z_JY%2P==6yqEAHVpwDNiM;+CQ%OdD!j1t8>#!kAUm@gR7#Wq-*7e zPd~V;#P(LFD+51kK40>esno(_Jrx5_Cu5(q{bTt2SucXk3fw**^)*+f&NA$si^vhl zR~m1;Tbx*fZ}>fb+qq_^a%Zo$_UgS>UtVA$CYoey7Xo@KSR!a&zgbB{>_W&HlV5qVslD)~4;2b=A{qquPY}a-lW7b+Wx6{L|>b*7--H z+R7X1K6EITA-#3U58Lnjsg`qJx~%Q*pL%j$Ve=u=zMw-(m-e+>t^4agE7qQwvt;d4 z%a7c>oT%=OB0?wi9z0p)y;xmz?nLufFLzYMcXkbxG;gWAzQFni!vW3uvzd3AXfIx- zY`S=DYDeR}#MI@pE3VwyAocX!4G*(=hrA!{9?a`3MGh7ot9rw;G4kvSAs74Wv%U#B ze{25m))$^vUFaKn2Y=w&r_I{(_t;;0 z3qC*BakTR0gIfT)9eD3n#gtbnf6;&W@MkB4V6yt{dM`9S{W7#{YUK;1(`|!0&oq5^ v&U-(kxZ#yk>%(sBhQElxAlqOu8j&by2m1aQ;nAL1?i&orY5HS{8+ZN-$q?K2 literal 0 HcmV?d00001 diff --git a/public/images/statuses_it.json b/public/images/statuses_it.json new file mode 100644 index 00000000000..76fc9ae8b4b --- /dev/null +++ b/public/images/statuses_it.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_it.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_it.png b/public/images/statuses_it.png new file mode 100644 index 0000000000000000000000000000000000000000..d372b989be966007e5fccac5f54fe341457e598b GIT binary patch literal 441 zcmV;q0Y?6bP)_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?zvW;$NS#fE(5J*QH>;TO# zqj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~aG}z~@!Q2dSmt873PQXLU zg+O|T!QM`p^A|K=@Suc&?b@)04> jC;!H^NCF;OJ`4N>xriuwM360I00000NkvXXu0mjf67avU literal 0 HcmV?d00001 diff --git a/public/images/statuses_ja.json b/public/images/statuses_ja.json new file mode 100644 index 00000000000..8de633e8e43 --- /dev/null +++ b/public/images/statuses_ja.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_ja.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_ja.png b/public/images/statuses_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..305fbe9168c3845084f5537924ca404ae9deb412 GIT binary patch literal 2936 zcmb_e3se(V8XoY0#EPvH7PU$UVi$EXk347A@GyXaL^+5H!upuZOdu69F*6|%L=o|| zqD95}*lJxx%R!`|MeAd=>Q+>2ReWvbQ7a3yilVlfD(td1JW{*I+IG+8oXOmo`R@09 z|9}5~?yQcRHhG9>gb0G5A<Uusm%sngt_g z5<3|wJ!cg(65zBagbcHb*2MRw2_y`$Q)UE{qRx=Ifeh`!nXQ)eZgGZ2*mO37H3>Yx zVlJ#XjT1ONjr$pD*W;fEfYj=AE{&IZ$;fa?@IquJ2%|S4FGceS3(YJN&+?qrLbH*X zz-FK`8Z)W2u#~`A5;!isZ=vG)EQ_^T@$VCjCWf=|!7sqs2uffz5*)?lFsguYGy%m) zg@TmfAMoz&LhU;OaQm%jr zS}unb28^I(GD^)dMBn@fjrqAW|J7)nsAf_B#O zkIH>4;UGR9EF<6BE0d_y-ch6@dWA^Aw}g!NOkM8SDa= z195kSk`(RiJdK2QmK@7SdT$$Fwm!cm6TS0oX)GXpMKSiM^PEAjQ5H5l6|ChilsfWr z)_E%P)y6T5!6}&%ht+yi4-<0d65@m&mZ@b110$nQwI1&a{H4YTQm*c6jo)s(Hzjl$ zWlCkiD;$yh@1gv<9_jJ;Vkj@|^8Z&T-R0R+TgZQxUH7vW-tm1k3^oqu(6wWM3)h~< znn0E;U`K#etv)D_jD zGvzhzXO!l7^S;h?bL)qv@6oIk4e7UEOA&?7>MyO^_;l~Kw<8~2YHe*r5K}$lH}LqP zCBw6>E-Rcl{MPI>j#|zYl+&j3xCoKY}_$(>#?k>P0bxOg~Niae?Rx$b7*Hn zRih~TYT#OH{H*2+^HcIJ_!MB}4_49Rj_pbr({wpG`_Z?P+9C`6;`dpsV||mMEz(VQ z>jVCpQWE=4)eR^rbqsc_!TmsrJCsv7^5}!-i_Y#W$~(6&|8DU5(p@1Ql?PPnVY~l4 zqO|0Sb<}gcO0Az36OJ8tIJ)0ls|cEXVnD;UB2W8k9~9lumX*vaaLXJJvFXw{k>}>y zizbxTf7!fk>E?>~m;j;w+k5a2(xo$Fw$Cjbda!N_U8mhrw<@4GQPd0MI2eslb=KGB~)j_4i-JMzq9e4B6q>NqjNf23R1*3 z=dZeR>Y3Utx3qFu)l;QDxU%ltcZ*|-J3==dn-n*)eQ?c<kU8sXA6I_oUQ=zt zx7@N%@R)18<|8lk_M?5HwG;l`$?s~4w(lF1D4%-#P5H{8C*y;I%Bs8vG}EfTqJlQ=%(BKH}bRm`@8RsI?z@K zg~b%V8GEz-_L0?4F29F*eKtSdZ^l0lSKpaM^b$RHa#+Sb?Es7&8ckr z`xpIW_e3E9i8cOn+@XMH*`G!)Rrx!v4|HE(P1FvCJQ8(v+IvqgKRlX(`aVoQG^$yYeD9k_1-$Oi=VcdmR;?RdJ*8PuO*wL6Czp2dhf?w!r!1?B{A;9C z(8qq>m%Lg6-k6*yd~-RnD`2NA@L@|+%ZcIUz9y@L8c@P zCdZZVYhQGnIZ&lpSG^&}-=la|=I?_3VRDq*vt(MJ#?tNM?;h=s9$n@gmu)|pe}3>V zuh)DYdv3n=hdW0)VJbQ&W;!n|DWB>`S2R4By@Rliv_-i?^~2kj7rEPP*n44R$oi5BYaJclft|@n|>vsPlRLS4%qR+QXmthn@`iy5_@6 z_Qg4;=YAPdibst&eZM;N)-Y%+)4qI0XY_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?zvW;$NS#fE(5J*QH>;TO# zqj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~aG}z~@!Q2dSmt873PQXLU zg+O|T!QM`p^A|K=@Suc&?b@)04> jC;!H^NCF;OJ`4N>xriuwM360I00000NkvXXu0mjf67avU literal 0 HcmV?d00001 diff --git a/public/images/statuses_pt_BR.json b/public/images/statuses_pt_BR.json new file mode 100644 index 00000000000..b607991af8f --- /dev/null +++ b/public/images/statuses_pt_BR.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_pt_BR.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_pt_BR.png b/public/images/statuses_pt_BR.png new file mode 100644 index 0000000000000000000000000000000000000000..3073540e8a2a8a03f82d55fea92d339ec62d21ca GIT binary patch literal 519 zcmeAS@N?(olHy`uVBq!ia0vp^VnFP`!3-od_m)2fQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`bpw1tTu(HdIFNAQ2M}~*JSYhGQIYT>z+%RM4;>pGoH)_2V~50s4HFhD z=x8yk0qPKN(X9ni{3Stt!T(VJ!<9QT76PR>3p^r=85p>QL70(Y)*K0-BlJ97978Pp zdnb2qI%L4%a(TtpYp4F#zq=dzX~oH<%9B**ENhtSxoL|J8^^5TuxAsUb}4jeS1I){ z|I?1!AXXRGbIHKvUEtBLD?|l#nYqH4x7@DXFngxzr8yg4WW2JOD8>|6^qf7hmI2OGZKVy_l#eiWJ_a=%fXscL%d{$o#T6GUGwSABjt$1-6X z58IsgsY-0A=KB@vd=I>y`e^FP3eAY?ImaSW#3O!hTpA2ivE{qrjoA_+rV|2d*g-b* zJq}-^B))uq^r@Rh5(Yo47s%iE>FVdQ&MBb@08Px=4*&oF literal 0 HcmV?d00001 diff --git a/public/images/statuses_zh_CN.json b/public/images/statuses_zh_CN.json new file mode 100644 index 00000000000..28760650ecd --- /dev/null +++ b/public/images/statuses_zh_CN.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_zh_CN.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_zh_CN.png b/public/images/statuses_zh_CN.png new file mode 100644 index 0000000000000000000000000000000000000000..d372b989be966007e5fccac5f54fe341457e598b GIT binary patch literal 441 zcmV;q0Y?6bP)_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?zvW;$NS#fE(5J*QH>;TO# zqj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~aG}z~@!Q2dSmt873PQXLU zg+O|T!QM`p^A|K=@Suc&?b@)04> jC;!H^NCF;OJ`4N>xriuwM360I00000NkvXXu0mjf67avU literal 0 HcmV?d00001 diff --git a/public/images/statuses_zh_TW.json b/public/images/statuses_zh_TW.json new file mode 100644 index 00000000000..bf05b2ab0d5 --- /dev/null +++ b/public/images/statuses_zh_TW.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_zh_TW.png b/public/images/statuses_zh_TW.png new file mode 100644 index 0000000000000000000000000000000000000000..d372b989be966007e5fccac5f54fe341457e598b GIT binary patch literal 441 zcmV;q0Y?6bP)_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?zvW;$NS#fE(5J*QH>;TO# zqj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~aG}z~@!Q2dSmt873PQXLU zg+O|T!QM`p^A|K=@Suc&?b@)04> jC;!H^NCF;OJ`4N>xriuwM360I00000NkvXXu0mjf67avU literal 0 HcmV?d00001 diff --git a/src/loading-scene.ts b/src/loading-scene.ts index d0818aa1e19..c3cb494d497 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -241,12 +241,15 @@ export class LoadingScene extends SceneBase { const lang = i18next.resolvedLanguage; if (lang !== "en") { if (Utils.verifyLang(lang)) { + this.loadAtlas(`statuses_${lang}`, ""); this.loadAtlas(`types_${lang}`, ""); } else { // Fallback to English + this.loadAtlas("statuses", ""); this.loadAtlas("types", ""); } } else { + this.loadAtlas("statuses", ""); this.loadAtlas("types", ""); } const availableLangs = ["en", "de", "it", "fr", "ja", "ko", "es", "pt-BR", "zh-CN"]; diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 8e7e5bc4060..4fac75932ae 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -162,7 +162,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.splicedIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); this.add(this.splicedIcon); - this.statusIndicator = this.scene.add.sprite(0, 0, "statuses"); + this.statusIndicator = this.scene.add.sprite(0, 0, `statuses_${i18next.resolvedLanguage}`); this.statusIndicator.setName("icon_status"); this.statusIndicator.setVisible(false); this.statusIndicator.setOrigin(0, 0); diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index a793dad6a73..b5c9e76bf8c 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1272,7 +1272,7 @@ class PartySlot extends Phaser.GameObjects.Container { } if (this.pokemon.status) { - const statusIndicator = this.scene.add.sprite(0, 0, "statuses"); + const statusIndicator = this.scene.add.sprite(0, 0, `statuses_${i18next.resolvedLanguage}`); statusIndicator.setFrame(StatusEffect[this.pokemon.status?.effect].toLowerCase()); statusIndicator.setOrigin(0, 0); statusIndicator.setPositionRelative(slotLevelLabel, this.slotIndex >= battlerCount ? 43 : 55, 0); diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 8ae72f08edd..d3796a096b9 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -214,7 +214,7 @@ export default class SummaryUiHandler extends UiHandler { this.statusContainer.add(statusLabel); - this.status = this.scene.add.sprite(91, 4, "statuses"); + this.status = this.scene.add.sprite(91, 4, `statuses_${i18next.resolvedLanguage}`); this.status.setOrigin(0.5, 0); this.statusContainer.add(this.status); From 128df1b6d2902e72aabc35f12c81ddf33f36d096 Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Mon, 16 Sep 2024 21:19:34 +0200 Subject: [PATCH 30/38] [QoL] [ui] Make tutorials darken background (#4283) * [ui] add prompt icon to the message boxes that don't have it * [ui] add background overlay during tutorials * add missing doc * Improve documentation based on suggestions Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/overrides.ts | 2 + src/tutorial.ts | 105 ++++++++++++++++++++++------ src/ui/awaitable-ui-handler.ts | 18 +++++ src/ui/battle-message-ui-handler.ts | 7 +- src/ui/egg-gacha-ui-handler.ts | 4 +- src/ui/evolution-scene-handler.ts | 7 +- src/ui/menu-ui-handler.ts | 6 ++ src/ui/message-ui-handler.ts | 19 ++++- src/ui/starter-select-ui-handler.ts | 7 ++ 9 files changed, 140 insertions(+), 35 deletions(-) diff --git a/src/overrides.ts b/src/overrides.ts index 6b550d152c2..ec0577ceb3d 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -70,6 +70,8 @@ class DefaultOverrides { [PokeballType.MASTER_BALL]: 0, }, }; + /** Set to `true` to show all tutorials */ + readonly BYPASS_TUTORIAL_SKIP: boolean = false; // ---------------- // PLAYER OVERRIDES diff --git a/src/tutorial.ts b/src/tutorial.ts index c4482839779..18d8291d227 100644 --- a/src/tutorial.ts +++ b/src/tutorial.ts @@ -1,7 +1,9 @@ import BattleScene from "./battle-scene"; import AwaitableUiHandler from "./ui/awaitable-ui-handler"; +import UiHandler from "./ui/ui-handler"; import { Mode } from "./ui/ui"; import i18next from "i18next"; +import Overrides from "#app/overrides"; export enum Tutorial { Intro = "INTRO", @@ -39,7 +41,7 @@ const tutorialHandlers = { scene.ui.showText(i18next.t("tutorial:starterSelect"), null, () => scene.ui.showText("", null, () => resolve()), null, true); }); }, - [Tutorial.Pokerus]: (scene: BattleScene) => { + [Tutorial.Pokerus]: (scene: BattleScene) => { return new Promise(resolve => { scene.ui.showText(i18next.t("tutorial:pokerus"), null, () => scene.ui.showText("", null, () => resolve()), null, true); }); @@ -63,26 +65,87 @@ const tutorialHandlers = { }, }; -export function handleTutorial(scene: BattleScene, tutorial: Tutorial): Promise { - return new Promise(resolve => { - if (!scene.enableTutorials) { - return resolve(false); - } +/** + * Run through the specified tutorial if it hasn't been seen before and mark it as seen once done + * This will show a tutorial overlay if defined in the current {@linkcode AwaitableUiHandler} + * The main menu will also get disabled while the tutorial is running + * @param scene the current {@linkcode BattleScene} + * @param tutorial the {@linkcode Tutorial} to play + * @returns a promise with result `true` if the tutorial was run and finished, `false` otherwise + */ +export async function handleTutorial(scene: BattleScene, tutorial: Tutorial): Promise { + if (!scene.enableTutorials && !Overrides.BYPASS_TUTORIAL_SKIP) { + return false; + } - if (scene.gameData.getTutorialFlags()[tutorial]) { - return resolve(false); - } + if (scene.gameData.getTutorialFlags()[tutorial] && !Overrides.BYPASS_TUTORIAL_SKIP) { + return false; + } - const handler = scene.ui.getHandler(); - if (handler instanceof AwaitableUiHandler) { - handler.tutorialActive = true; - } - tutorialHandlers[tutorial](scene).then(() => { - scene.gameData.saveTutorialFlag(tutorial, true); - if (handler instanceof AwaitableUiHandler) { - handler.tutorialActive = false; - } - resolve(true); - }); - }); + const handler = scene.ui.getHandler(); + const isMenuDisabled = scene.disableMenu; + + // starting tutorial, disable menu + scene.disableMenu = true; + if (handler instanceof AwaitableUiHandler) { + handler.tutorialActive = true; + } + + await showTutorialOverlay(scene, handler); + await tutorialHandlers[tutorial](scene); + await hideTutorialOverlay(scene, handler); + + // tutorial finished and overlay gone, re-enable menu, save tutorial as seen + scene.disableMenu = isMenuDisabled; + scene.gameData.saveTutorialFlag(tutorial, true); + if (handler instanceof AwaitableUiHandler) { + handler.tutorialActive = false; + } + + return true; } + +/** + * Show the tutorial overlay if there is one + * @param scene the current BattleScene + * @param handler the current UiHandler + * @returns `true` once the overlay has finished appearing, or if there is no overlay + */ +async function showTutorialOverlay(scene: BattleScene, handler: UiHandler) { + if (handler instanceof AwaitableUiHandler && handler.tutorialOverlay) { + scene.tweens.add({ + targets: handler.tutorialOverlay, + alpha: 0.5, + duration: 750, + ease: "Sine.easeOut", + onComplete: () => { + return true; + } + }); + } else { + return true; + } +} + +/** + * Hide the tutorial overlay if there is one + * @param scene the current BattleScene + * @param handler the current UiHandler + * @returns `true` once the overlay has finished disappearing, or if there is no overlay + */ +async function hideTutorialOverlay(scene: BattleScene, handler: UiHandler) { + if (handler instanceof AwaitableUiHandler && handler.tutorialOverlay) { + scene.tweens.add({ + targets: handler.tutorialOverlay, + alpha: 0, + duration: 500, + ease: "Sine.easeOut", + onComplete: () => { + return true; + } + }); + } else { + return true; + } +} + diff --git a/src/ui/awaitable-ui-handler.ts b/src/ui/awaitable-ui-handler.ts index 2052c6e2ade..c6dc717aa3a 100644 --- a/src/ui/awaitable-ui-handler.ts +++ b/src/ui/awaitable-ui-handler.ts @@ -7,6 +7,7 @@ export default abstract class AwaitableUiHandler extends UiHandler { protected awaitingActionInput: boolean; protected onActionInput: Function | null; public tutorialActive: boolean = false; + public tutorialOverlay: Phaser.GameObjects.Rectangle; constructor(scene: BattleScene, mode: Mode | null = null) { super(scene, mode); @@ -24,4 +25,21 @@ export default abstract class AwaitableUiHandler extends UiHandler { return false; } + + /** + * Create a semi transparent overlay that will get shown during tutorials + * @param container the container to add the overlay to + */ + initTutorialOverlay(container: Phaser.GameObjects.Container) { + if (!this.tutorialOverlay) { + this.tutorialOverlay = new Phaser.GameObjects.Rectangle(this.scene, -1, -1, this.scene.scaledCanvas.width, this.scene.scaledCanvas.height, 0x070707); + this.tutorialOverlay.setName("tutorial-overlay"); + this.tutorialOverlay.setOrigin(0, 0); + this.tutorialOverlay.setAlpha(0); + } + + if (container) { + container.add(this.tutorialOverlay); + } + } } diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index 9a694d50b29..c27c6974192 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -83,12 +83,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler { this.nameBoxContainer.add(this.nameText); messageContainer.add(this.nameBoxContainer); - const prompt = this.scene.add.sprite(0, 0, "prompt"); - prompt.setVisible(false); - prompt.setOrigin(0, 0); - messageContainer.add(prompt); - - this.prompt = prompt; + this.initPromptSprite(messageContainer); const levelUpStatsContainer = this.scene.add.container(0, 0); levelUpStatsContainer.setVisible(false); diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index 9497dfe58c6..b109eda5370 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -287,7 +287,6 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.eggGachaContainer.add(this.eggGachaSummaryContainer); const gachaMessageBoxContainer = this.scene.add.container(0, 148); - this.eggGachaContainer.add(gachaMessageBoxContainer); const gachaMessageBox = addWindow(this.scene, 0, 0, 320, 32); gachaMessageBox.setOrigin(0, 0); @@ -301,8 +300,11 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.message = gachaMessageText; + this.initTutorialOverlay(this.eggGachaContainer); this.eggGachaContainer.add(gachaMessageBoxContainer); + this.initPromptSprite(gachaMessageBoxContainer); + this.setCursor(0); } diff --git a/src/ui/evolution-scene-handler.ts b/src/ui/evolution-scene-handler.ts index ffbd06afde3..76d148d083e 100644 --- a/src/ui/evolution-scene-handler.ts +++ b/src/ui/evolution-scene-handler.ts @@ -45,12 +45,7 @@ export default class EvolutionSceneHandler extends MessageUiHandler { this.message = message; - const prompt = this.scene.add.sprite(0, 0, "prompt"); - prompt.setVisible(false); - prompt.setOrigin(0, 0); - this.messageContainer.add(prompt); - - this.prompt = prompt; + this.initPromptSprite(this.messageContainer); } show(_args: any[]): boolean { diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index b8c3cfd1364..0af527e518f 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -157,6 +157,9 @@ export default class MenuUiHandler extends MessageUiHandler { menuMessageText.setOrigin(0, 0); this.menuMessageBoxContainer.add(menuMessageText); + this.initTutorialOverlay(this.menuContainer); + this.initPromptSprite(this.menuMessageBoxContainer); + this.message = menuMessageText; // By default we use the general purpose message window @@ -433,6 +436,9 @@ export default class MenuUiHandler extends MessageUiHandler { this.scene.playSound("ui/menu_open"); + // Make sure the tutorial overlay sits above everything, but below the message box + this.menuContainer.bringToTop(this.tutorialOverlay); + this.menuContainer.bringToTop(this.menuMessageBoxContainer); handleTutorial(this.scene, Tutorial.Menu); this.bgmBar.toggleBgmBar(true); diff --git a/src/ui/message-ui-handler.ts b/src/ui/message-ui-handler.ts index 93e00cb6b70..54965a590fc 100644 --- a/src/ui/message-ui-handler.ts +++ b/src/ui/message-ui-handler.ts @@ -17,6 +17,23 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { this.pendingPrompt = false; } + /** + * Add the sprite to be displayed at the end of messages with prompts + * @param container the container to add the sprite to + */ + initPromptSprite(container: Phaser.GameObjects.Container) { + if (!this.prompt) { + const promptSprite = this.scene.add.sprite(0, 0, "prompt"); + promptSprite.setVisible(false); + promptSprite.setOrigin(0, 0); + this.prompt = promptSprite; + } + + if (container) { + container.add(this.prompt); + } + } + showText(text: string, delay?: integer | null, callback?: Function | null, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null) { this.showTextInternal(text, delay, callback, callbackDelay, prompt, promptDelay); } @@ -180,7 +197,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { const lastLineWidth = lastLineTest.displayWidth; lastLineTest.destroy(); if (this.prompt) { - this.prompt.setPosition(lastLineWidth + 2, (textLinesCount - 1) * 18 + 2); + this.prompt.setPosition(this.message.x + lastLineWidth + 2, this.message.y + (textLinesCount - 1) * 18 + 2); this.prompt.play("prompt"); } this.pendingPrompt = false; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 308614887e9..0e101d30ce7 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -894,6 +894,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.message.setOrigin(0, 0); this.starterSelectMessageBoxContainer.add(this.message); + // arrow icon for the message box + this.initPromptSprite(this.starterSelectMessageBoxContainer); + this.statsContainer = new StatsContainer(this.scene, 6, 16); this.scene.add.existing(this.statsContainer); @@ -911,7 +914,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { y: this.scene.game.canvas.height / 6 - MoveInfoOverlay.getHeight(overlayScale) - 29, }); this.starterSelectContainer.add(this.moveInfoOverlay); + + // Filter bar sits above everything, except the tutorial overlay and message box this.starterSelectContainer.bringToTop(this.filterBarContainer); + this.initTutorialOverlay(this.starterSelectContainer); + this.starterSelectContainer.bringToTop(this.starterSelectMessageBoxContainer); this.scene.eventTarget.addEventListener(BattleSceneEventType.CANDY_UPGRADE_NOTIFICATION_CHANGED, (e) => this.onCandyUpgradeDisplayChanged(e)); From 009fd3fc5c3e180841017c60bcbe51f4ea456617 Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:30:42 -0400 Subject: [PATCH 31/38] [Bug] Fix reloads erasing weather on first wave of biome (#4078) * [Bug] Fix reloads erasing weather on first wave of biome * Minor revisions * Minor revisions 2 * Update test --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/phases/encounter-phase.ts | 22 +++++++++++----- src/phases/new-biome-encounter-phase.ts | 9 +++++-- src/phases/next-encounter-phase.ts | 6 +++++ src/test/battle/battle.test.ts | 28 ++++++++++++-------- src/test/reload.test.ts | 35 ++++++++++++++++++++++--- src/test/utils/gameManager.ts | 11 +++----- src/test/utils/helpers/reloadHelper.ts | 19 ++++++++++++-- 7 files changed, 98 insertions(+), 32 deletions(-) diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 1d9567ee9b3..012738df9ab 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -216,8 +216,8 @@ export class EncounterPhase extends BattlePhase { this.scene.ui.setMode(Mode.MESSAGE).then(() => { if (!this.loaded) { - //@ts-ignore - this.scene.gameData.saveAll(this.scene, true, battle.waveIndex % 10 === 1 || this.scene.lastSavePlayTime >= 300).then(success => { // TODO: get rid of ts-ignore + this.trySetWeatherIfNewBiome(); // Set weather before session gets saved + this.scene.gameData.saveAll(this.scene, true, battle.waveIndex % 10 === 1 || (this.scene.lastSavePlayTime ?? 0) >= 300).then(success => { this.scene.disableMenu = false; if (!success) { return this.scene.reset(true); @@ -250,10 +250,6 @@ export class EncounterPhase extends BattlePhase { } } - if (!this.loaded) { - this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false); - } - const enemyField = this.scene.getEnemyField(); this.scene.tweens.add({ targets: [this.scene.arenaEnemy, this.scene.currentBattle.trainer, enemyField, this.scene.arenaPlayer, this.scene.trainer].flat(), @@ -519,4 +515,18 @@ export class EncounterPhase extends BattlePhase { } return false; } + + /** + * Set biome weather if and only if this encounter is the start of a new biome. + * + * By using function overrides, this should happen if and only if this phase + * is exactly a NewBiomeEncounterPhase or an EncounterPhase (to account for + * Wave 1 of a Daily Run), but NOT NextEncounterPhase (which starts the next + * wave in the same biome). + */ + trySetWeatherIfNewBiome(): void { + if (!this.loaded) { + this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false); + } + } } diff --git a/src/phases/new-biome-encounter-phase.ts b/src/phases/new-biome-encounter-phase.ts index 48d928402de..2a526a22ee2 100644 --- a/src/phases/new-biome-encounter-phase.ts +++ b/src/phases/new-biome-encounter-phase.ts @@ -17,8 +17,6 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase { } } - this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false); - for (const pokemon of this.scene.getParty().filter(p => p.isOnField())) { applyAbAttrs(PostBiomeChangeAbAttr, pokemon, null); } @@ -41,4 +39,11 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase { } }); } + + /** + * Set biome weather. + */ + trySetWeatherIfNewBiome(): void { + this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false); + } } diff --git a/src/phases/next-encounter-phase.ts b/src/phases/next-encounter-phase.ts index 7de2472dd35..d63823e4167 100644 --- a/src/phases/next-encounter-phase.ts +++ b/src/phases/next-encounter-phase.ts @@ -67,4 +67,10 @@ export class NextEncounterPhase extends EncounterPhase { } }); } + + /** + * Do nothing (since this is simply the next wave in the same biome). + */ + trySetWeatherIfNewBiome(): void { + } } diff --git a/src/test/battle/battle.test.ts b/src/test/battle/battle.test.ts index 6e15bbd99d9..554692374d2 100644 --- a/src/test/battle/battle.test.ts +++ b/src/test/battle/battle.test.ts @@ -24,7 +24,8 @@ import { Moves } from "#enums/moves"; import { PlayerGender } from "#enums/player-gender"; import { Species } from "#enums/species"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { Biome } from "#app/enums/biome"; describe("Test Battle Phase", () => { let phaserGame: Phaser.Game; @@ -290,22 +291,27 @@ describe("Test Battle Phase", () => { expect(game.scene.currentBattle.turn).toBeGreaterThan(turn); }, 20000); - it("to next wave with pokemon killed, single", async () => { + it("does not set new weather if staying in same biome", async () => { const moveToUse = Moves.SPLASH; - game.override.battleType("single"); - game.override.starterSpecies(Species.MEWTWO); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyAbility(Abilities.HYDRATION); - game.override.ability(Abilities.ZEN_MODE); - game.override.startingLevel(2000); - game.override.startingWave(3); - game.override.moveset([moveToUse]); + game.override + .battleType("single") + .starterSpecies(Species.MEWTWO) + .enemySpecies(Species.RATTATA) + .enemyAbility(Abilities.HYDRATION) + .ability(Abilities.ZEN_MODE) + .startingLevel(2000) + .startingWave(3) + .startingBiome(Biome.LAKE) + .moveset([moveToUse]); game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - await game.startBattle(); + await game.classicMode.startBattle(); const waveIndex = game.scene.currentBattle.waveIndex; game.move.select(moveToUse); + + vi.spyOn(game.scene.arena, "trySetWeather"); await game.doKillOpponents(); await game.toNextWave(); + expect(game.scene.arena.trySetWeather).not.toHaveBeenCalled(); expect(game.scene.currentBattle.waveIndex).toBeGreaterThan(waveIndex); }, 20000); diff --git a/src/test/reload.test.ts b/src/test/reload.test.ts index a96a525ca2d..7c4523dd9ef 100644 --- a/src/test/reload.test.ts +++ b/src/test/reload.test.ts @@ -38,16 +38,15 @@ describe("Reload", () => { it("should not have RNG inconsistencies after a biome switch", async () => { game.override .startingWave(10) - .startingBiome(Biome.CAVE) // Will lead to biomes with randomly generated weather .battleType("single") - .startingLevel(100) - .enemyLevel(1000) + .startingLevel(100) // Avoid levelling up + .enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents() .disableTrainerWaves() .moveset([Moves.KOWTOW_CLEAVE]) .enemyMoveset(Moves.SPLASH); await game.dailyMode.startBattle(); - // Transition from Daily Run Wave 10 to Wave 11 in order to trigger biome switch + // Transition from Wave 10 to Wave 11 in order to trigger biome switch game.move.select(Moves.KOWTOW_CLEAVE); await game.phaseInterceptor.to("DamagePhase"); await game.doKillOpponents(); @@ -63,6 +62,34 @@ describe("Reload", () => { expect(preReloadRngState).toBe(postReloadRngState); }, 20000); + it("should not have weather inconsistencies after a biome switch", async () => { + game.override + .startingWave(10) + .startingBiome(Biome.ICE_CAVE) // Will lead to Snowy Forest with randomly generated weather + .battleType("single") + .startingLevel(100) // Avoid levelling up + .enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents() + .disableTrainerWaves() + .moveset([Moves.KOWTOW_CLEAVE]) + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle(); // Apparently daily mode would override the biome + + // Transition from Wave 10 to Wave 11 in order to trigger biome switch + game.move.select(Moves.KOWTOW_CLEAVE); + await game.phaseInterceptor.to("DamagePhase"); + await game.doKillOpponents(); + await game.toNextWave(); + expect(game.phaseInterceptor.log).toContain("NewBiomeEncounterPhase"); + + const preReloadWeather = game.scene.arena.weather; + + await game.reload.reloadSession(); + + const postReloadWeather = game.scene.arena.weather; + + expect(postReloadWeather).toStrictEqual(preReloadWeather); + }, 20000); + it("should not have RNG inconsistencies at a Daily run wild Pokemon fight", async () => { await game.dailyMode.startBattle(); diff --git a/src/test/utils/gameManager.ts b/src/test/utils/gameManager.ts index 452956ab466..36423c5e18f 100644 --- a/src/test/utils/gameManager.ts +++ b/src/test/utils/gameManager.ts @@ -31,7 +31,6 @@ import TargetSelectUiHandler from "#app/ui/target-select-ui-handler"; import { Mode } from "#app/ui/ui"; import { Button } from "#enums/buttons"; import { ExpNotification } from "#enums/exp-notification"; -import { GameDataType } from "#enums/game-data-type"; import { PlayerGender } from "#enums/player-gender"; import { Species } from "#enums/species"; import { generateStarter, waitUntil } from "#test/utils/gameManagerUtils"; @@ -371,13 +370,11 @@ export default class GameManager { * @returns A promise that resolves with the exported save data. */ exportSaveToTest(): Promise { + const saveKey = "x0i2O7WRiANTqPmZ"; return new Promise(async (resolve) => { - await this.scene.gameData.saveAll(this.scene, true, true, true, true); - this.scene.reset(true); - await waitUntil(() => this.scene.ui?.getMode() === Mode.TITLE); - await this.scene.gameData.tryExportData(GameDataType.SESSION, 0); - await waitUntil(() => localStorage.hasOwnProperty("toExport")); - return resolve(localStorage.getItem("toExport")!); // TODO: is this bang correct?; + const sessionSaveData = this.scene.gameData.getSessionSaveData(this.scene); + const encryptedSaveData = AES.encrypt(JSON.stringify(sessionSaveData), saveKey).toString(); + resolve(encryptedSaveData); }); } diff --git a/src/test/utils/helpers/reloadHelper.ts b/src/test/utils/helpers/reloadHelper.ts index c15347b08c9..e0e538120cc 100644 --- a/src/test/utils/helpers/reloadHelper.ts +++ b/src/test/utils/helpers/reloadHelper.ts @@ -5,11 +5,27 @@ import { vi } from "vitest"; import { BattleStyle } from "#app/enums/battle-style"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; +import { SessionSaveData } from "#app/system/game-data"; +import GameManager from "../gameManager"; /** * Helper to allow reloading sessions in unit tests. */ export class ReloadHelper extends GameManagerHelper { + sessionData: SessionSaveData; + + constructor(game: GameManager) { + super(game); + + // Whenever the game saves the session, save it to the reloadHelper instead + vi.spyOn(game.scene.gameData, "saveAll").mockImplementation((scene) => { + return new Promise((resolve, reject) => { + this.sessionData = scene.gameData.getSessionSaveData(scene); + resolve(true); + }); + }); + } + /** * Simulate reloading the session from the title screen, until reaching the * beginning of the first turn (equivalent to running `startBattle()`) for @@ -17,7 +33,6 @@ export class ReloadHelper extends GameManagerHelper { */ async reloadSession() : Promise { const scene = this.game.scene; - const sessionData = scene.gameData.getSessionSaveData(scene); const titlePhase = new TitlePhase(scene); scene.clearPhaseQueue(); @@ -25,7 +40,7 @@ export class ReloadHelper extends GameManagerHelper { // Set the last saved session to the desired session data vi.spyOn(scene.gameData, "getSession").mockReturnValue( new Promise((resolve, reject) => { - resolve(sessionData); + resolve(this.sessionData); }) ); scene.unshiftPhase(titlePhase); From eb3a6cb1fad05c4d4f7dd6e23e2b4e6fb99e5edb Mon Sep 17 00:00:00 2001 From: Lugiad Date: Tue, 17 Sep 2024 00:29:02 +0200 Subject: [PATCH 32/38] Update department-store-sale-dialogue.json --- .../department-store-sale-dialogue.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/locales/fr/mystery-encounters/department-store-sale-dialogue.json b/src/locales/fr/mystery-encounters/department-store-sale-dialogue.json index cb1763c6015..fc06aa05582 100644 --- a/src/locales/fr/mystery-encounters/department-store-sale-dialogue.json +++ b/src/locales/fr/mystery-encounters/department-store-sale-dialogue.json @@ -1,26 +1,26 @@ { - "intro": "Il y a une dame avec des tas de sacs de courses.", + "intro": "Il y a une dame avec des tas de sacs de courses\nà ne savoir qu’en faire.", "speaker": "Cliente", "intro_dialogue": "Bonjour !\nToi aussi t’es là pour les incroyables promos ?$Il y a un coupon spécial que tu peux utiliser en échange\nd’un objet gratuit pendant toute la durée de la promo !$J’en ai un en trop.\nTiens, prends-le !", "title": "Promos au Centre Commercial", - "description": "Vous voyez des produits où que vous regardez ! Il y a 4 comptoirs auprès desquels vous pouvez dépenser ce coupon contre une grande variété d’objets. Que de choix !", + "description": "Tellement de choix que votre regard ne sait plus où se porter !\nIl y a 4 comptoirs auprès desquels vous pouvez dépenser ce coupon parmi une grande variété d’objets.", "query": "À quel comptoir se rendre ?", "option": { "1": { "label": "CT", - "tooltip": "(+) Boutique de CT" + "tooltip": "(+) CT dans la boutique" }, "2": { "label": "Accélérateurs", - "tooltip": "(+) Boutique d’Accélérateurs" + "tooltip": "(+) Accélérateurs dans la boutique" }, "3": { "label": "Objets de Combat", - "tooltip": "(+) Boutique d’objets de boost" + "tooltip": "(+) Objets de boost dans la boutique" }, "4": { "label": "Poké Balls", - "tooltip": "(+) Boutique de Poké Balls" + "tooltip": "(+) Poké Balls dans la boutique" } }, "outro": "Quelle affaire !\nVous devriez revenir y faire vos achats plus souvent." From 3ed2c74f38e808c271f9c64d35e323ae0fb52232 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Mon, 16 Sep 2024 18:44:03 -0400 Subject: [PATCH 33/38] [Enhancement] Add Met Wave to Pokemon Data (#4271) Co-authored-by: Lugiad Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Co-authored-by: Chapybara-jp --- src/field/pokemon.ts | 6 ++++++ src/locales/de/pokemon-summary.json | 2 +- src/locales/en/pokemon-summary.json | 2 +- src/locales/es/pokemon-summary.json | 4 ++-- src/locales/fr/pokemon-summary.json | 2 +- src/locales/it/pokemon-summary.json | 4 ++-- src/locales/ja/pokemon-summary.json | 2 +- src/locales/ko/pokemon-summary.json | 2 +- src/locales/pt_BR/pokemon-summary.json | 2 +- src/locales/zh_TW/pokemon-summary.json | 2 +- src/system/pokemon-data.ts | 7 ++++--- src/ui/summary-ui-handler.ts | 1 + 12 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 9c8c1e6ce46..ed36bcfe4b3 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -95,6 +95,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public metLevel: integer; public metBiome: Biome | -1; public metSpecies: Species; + public metWave: number; public luck: integer; public pauseEvolutions: boolean; public pokerus: boolean; @@ -194,6 +195,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.luck = dataSource.luck; this.metBiome = dataSource.metBiome; this.metSpecies = dataSource.metSpecies ?? (this.metBiome !== -1 ? this.species.speciesId : this.species.getRootSpeciesId(true)); + this.metWave = dataSource.metWave ?? (this.metBiome === -1 ? -1 : 0); this.pauseEvolutions = dataSource.pauseEvolutions; this.pokerus = !!dataSource.pokerus; this.evoCounter = dataSource.evoCounter ?? 0; @@ -240,6 +242,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.metLevel = level; this.metBiome = scene.currentBattle ? scene.arena.biomeType : -1; this.metSpecies = species.speciesId; + this.metWave = scene.currentBattle ? scene.currentBattle.waveIndex : -1; this.pokerus = false; if (level > 1) { @@ -4081,6 +4084,7 @@ export class PlayerPokemon extends Pokemon { newPokemon.metLevel = this.metLevel; newPokemon.metBiome = this.metBiome; newPokemon.metSpecies = this.metSpecies; + newPokemon.metWave = this.metWave; newPokemon.fusionSpecies = this.fusionSpecies; newPokemon.fusionFormIndex = this.fusionFormIndex; newPokemon.fusionAbilityIndex = this.fusionAbilityIndex; @@ -4088,6 +4092,7 @@ export class PlayerPokemon extends Pokemon { newPokemon.fusionVariant = this.fusionVariant; newPokemon.fusionGender = this.fusionGender; newPokemon.fusionLuck = this.fusionLuck; + newPokemon.usedTMs = this.usedTMs; this.scene.getParty().push(newPokemon); newPokemon.evolve((!isFusion ? newEvolution : new FusionSpeciesFormEvolution(this.id, newEvolution)), evoSpecies); @@ -4779,6 +4784,7 @@ export class EnemyPokemon extends Pokemon { this.pokeball = pokeballType; this.metLevel = this.level; this.metBiome = this.scene.arena.biomeType; + this.metWave = this.scene.currentBattle.waveIndex; this.metSpecies = this.species.speciesId; const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this); diff --git a/src/locales/de/pokemon-summary.json b/src/locales/de/pokemon-summary.json index 1790c6878b9..3104fc10151 100644 --- a/src/locales/de/pokemon-summary.json +++ b/src/locales/de/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "Abbrechen", "memoString": "Wesen: {{natureFragment}}\n{{metFragment}}", "metFragment": { - "normal": "Herkunft: {{biome}}\nMit Lv. {{level}} erhalten.", + "normal": "Herkunft: {{biome}} - Welle {{wave}}\nMit Lv. {{level}} erhalten.", "apparently": "Herkunft: {{biome}}\nOffenbar mit Lv. {{level}} erhalten." }, "natureFragment": { diff --git a/src/locales/en/pokemon-summary.json b/src/locales/en/pokemon-summary.json index 80e0cdab010..458fad0efe0 100644 --- a/src/locales/en/pokemon-summary.json +++ b/src/locales/en/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "Cancel", "memoString": "{{natureFragment}} nature,\n{{metFragment}}", "metFragment": { - "normal": "met at Lv{{level}},\n{{biome}}.", + "normal": "met at Lv{{level}},\n{{biome}}, Wave {{wave}}.", "apparently": "apparently met at Lv{{level}},\n{{biome}}." }, "natureFragment": { diff --git a/src/locales/es/pokemon-summary.json b/src/locales/es/pokemon-summary.json index e47335c8394..fe33c9418cc 100644 --- a/src/locales/es/pokemon-summary.json +++ b/src/locales/es/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "Salir", "memoString": "Naturaleza {{natureFragment}},\n{{metFragment}}", "metFragment": { - "normal": "encontrado al Nv. {{level}},\n{{biome}}.", + "normal": "encontrado al Nv. {{level}},\n{{biome}}, Oleada {{wave}}.", "apparently": "aparentemente encontrado al Nv. {{level}},\n{{biome}}." } -} \ No newline at end of file +} diff --git a/src/locales/fr/pokemon-summary.json b/src/locales/fr/pokemon-summary.json index 01e712c8468..a038b3a51f9 100644 --- a/src/locales/fr/pokemon-summary.json +++ b/src/locales/fr/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "Annuler", "memoString": "{{natureFragment}} de nature,\n{{metFragment}}", "metFragment": { - "normal": "rencontré au N.{{level}},\n{{biome}}.", + "normal": "rencontré au N.{{level}},\n{{biome}}, Vague {{wave}}.", "apparently": "apparemment rencontré au N.{{level}},\n{{biome}}." }, "natureFragment": { diff --git a/src/locales/it/pokemon-summary.json b/src/locales/it/pokemon-summary.json index f6c9290f783..81cd9a278b8 100644 --- a/src/locales/it/pokemon-summary.json +++ b/src/locales/it/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "Annulla", "memoString": "Natura {{natureFragment}},\n{{metFragment}}", "metFragment": { - "normal": "incontrato al Lv.{{level}},\n{{biome}}.", + "normal": "incontrato al Lv.{{level}},\n{{biome}}, Onda {{wave}}.", "apparently": "apparentemente incontrato al Lv.{{level}},\n{{biome}}." } -} \ No newline at end of file +} diff --git a/src/locales/ja/pokemon-summary.json b/src/locales/ja/pokemon-summary.json index cf35befe6fd..9465bcd346d 100644 --- a/src/locales/ja/pokemon-summary.json +++ b/src/locales/ja/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "キャンセル", "memoString": "{{natureFragment}}な性格。\n{{metFragment}}", "metFragment": { - "normal": "{{biome}}で\nLv.{{level}}の時に出会った。", + "normal": "ラウンド{{wave}}に{{biome}}で\nLv.{{level}}の時に出会った。", "apparently": "{{biome}}で\nLv.{{level}}の時に出会ったようだ。" }, "natureFragment": { diff --git a/src/locales/ko/pokemon-summary.json b/src/locales/ko/pokemon-summary.json index d9119623662..ca4b7a22b65 100644 --- a/src/locales/ko/pokemon-summary.json +++ b/src/locales/ko/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "그만둔다", "memoString": "{{natureFragment}}.\n{{metFragment}}", "metFragment": { - "normal": "{{biome}}에서\n레벨 {{level}}일 때 만났다.", + "normal": "{{biome}}에서 웨이브{{wave}},\n레벨 {{level}}일 때 만났다.", "apparently": "{{biome}}에서\n레벨 {{level}}일 때 만난 것 같다." }, "natureFragment": { diff --git a/src/locales/pt_BR/pokemon-summary.json b/src/locales/pt_BR/pokemon-summary.json index 4c427dbac4f..14b736a0cf2 100644 --- a/src/locales/pt_BR/pokemon-summary.json +++ b/src/locales/pt_BR/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "Cancelar", "memoString": "Natureza {{natureFragment}},\n{{metFragment}}", "metFragment": { - "normal": "encontrado no Nv.{{level}},\n{{biome}}.", + "normal": "encontrado no Nv.{{level}},\n{{biome}}, Onda {{wave}}.", "apparently": "aparentemente encontrado no Nv.{{level}},\n{{biome}}." }, "natureFragment": { diff --git a/src/locales/zh_TW/pokemon-summary.json b/src/locales/zh_TW/pokemon-summary.json index ddbbea63a3a..331330f5bdd 100644 --- a/src/locales/zh_TW/pokemon-summary.json +++ b/src/locales/zh_TW/pokemon-summary.json @@ -12,7 +12,7 @@ "memoString": "{{natureFragment}} 性格,\n{{metFragment}}", "metFragment": { - "normal": "met at Lv{{level}},\n{{biome}}.", + "normal": "met at Lv{{level}},\n{{biome}}, Wave {{wave}}.", "apparently": "命中注定般地相遇于Lv.{{level}},\n{{biome}}。" }, "natureFragment": { diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 5e6c0d93c8c..0fd90e448a1 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -38,8 +38,9 @@ export default class PokemonData { public status: Status | null; public friendship: integer; public metLevel: integer; - public metBiome: Biome | -1; + public metBiome: Biome | -1; // -1 for starters public metSpecies: Species; + public metWave: number; // 0 for unknown (previous saves), -1 for starters public luck: integer; public pauseEvolutions: boolean; public pokerus: boolean; @@ -90,14 +91,14 @@ export default class PokemonData { this.metLevel = source.metLevel || 5; this.metBiome = source.metBiome !== undefined ? source.metBiome : -1; this.metSpecies = source.metSpecies; + this.metWave = source.metWave ?? (this.metBiome === -1 ? -1 : 0); this.luck = source.luck !== undefined ? source.luck : (source.shiny ? (source.variant + 1) : 0); if (!forHistory) { this.pauseEvolutions = !!source.pauseEvolutions; + this.evoCounter = source.evoCounter ?? 0; } this.pokerus = !!source.pokerus; - this.evoCounter = source.evoCounter ?? 0; - this.fusionSpecies = sourcePokemon ? sourcePokemon.fusionSpecies?.speciesId : source.fusionSpecies; this.fusionFormIndex = source.fusionFormIndex; this.fusionAbilityIndex = source.fusionAbilityIndex; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index d3796a096b9..0892bf8ab1b 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -824,6 +824,7 @@ export default class SummaryUiHandler extends UiHandler { metFragment: i18next.t(`pokemonSummary:metFragment.${this.pokemon?.metBiome === -1? "apparently": "normal"}`, { biome: `${getBBCodeFrag(getBiomeName(this.pokemon?.metBiome!), TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct? level: `${getBBCodeFrag(this.pokemon?.metLevel.toString()!, TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct? + wave: `${getBBCodeFrag((this.pokemon?.metWave ? this.pokemon.metWave.toString()! : i18next.t("pokemonSummary:unknownTrainer")), TextStyle.SUMMARY_RED)}${closeFragment}`, }), natureFragment: i18next.t(`pokemonSummary:natureFragment.${rawNature}`, { nature: nature }) }); From 02db1109f1aa869958e8ab2619f36fa460811792 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Tue, 17 Sep 2024 01:55:18 +0200 Subject: [PATCH 34/38] Update clowning-around-dialogue.json --- .../fr/mystery-encounters/clowning-around-dialogue.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/locales/fr/mystery-encounters/clowning-around-dialogue.json b/src/locales/fr/mystery-encounters/clowning-around-dialogue.json index cd606478fa3..c6ed0008eaf 100644 --- a/src/locales/fr/mystery-encounters/clowning-around-dialogue.json +++ b/src/locales/fr/mystery-encounters/clowning-around-dialogue.json @@ -1,9 +1,9 @@ { "intro": "Mais c’est…@d{64} un clown ?", "speaker": "Clown", - "intro_dialogue": "T’as l’air clownesque, prépare-toi pour un combat magistral !$Je vais te montrer ce que sont les arts de la rue !", + "intro_dialogue": "Eh toi, tu m’as l’air clownesque !\nPrépare-toi pour un combat magistral !$Je vais te montrer ce que sont les arts de la rue !", "title": "Bouffonneries", - "description": "Quelque chose semble louche. Ce Clown a l’air très motivé de vous provoquer en combat, mais dans quel but ?\n\nLe {{blacephalonName}} est très étrange, comme s’il possédait @[TOOLTIP_TITLE]{des types et un talent inhabituels.}", + "description": "Quelque chose semble louche. Ce Clown a l’air très motivé de vous provoquer en combat, mais dans quel but ?\n\nSon {{blacephalonName}} est très étrange, comme s’il possédait @[TOOLTIP_TITLE]{des types et un talent inhabituels.}", "query": "Que voulez-vous faire ?", "option": { "1": { @@ -18,14 +18,14 @@ "2": { "label": "Rester de marbre", "tooltip": "(-) Agace le Clown\n(?) Affecte les objets de vos Pokémon", - "selected": "Ça se défile lâchement d’un duel exceptionnel ?\nTâte ma colère !", + "selected": "Ça se défile lâchement d’un duel exceptionnel ?\nDans ce cas, tâte à ma colère !", "selected_2": "Le {{blacephalonName}} du Clown utilise\nTour de Magie !$Tous les objets de {{switchPokemon}}\nsont échangés au hasard !", "selected_3": "Sombre imbécile, tombe dans mon piège !" }, "3": { "label": "Retouner les insultes", "tooltip": "(-) Agace le Clown\n(?) Affecte les types de vos Pokémon", - "selected": "Ça se défile lâchement d’un duel exceptionnel ?\nTâte ma colère !", + "selected": "Ça se défile lâchement d’un duel exceptionnel ?\nDans ce cas, tâte à ma colère !", "selected_2": "Le {{blacephalonName}} du Clown utilise\nune étrange capacité !$Tous les types de votre équipe\nsont échangés au hasard !", "selected_3": "Sombre imbécile, tombe dans mon piège !" } From 20575d8b1aa766a63cabf58e15a666d450c3cbb1 Mon Sep 17 00:00:00 2001 From: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Date: Tue, 17 Sep 2024 09:31:17 +0200 Subject: [PATCH 35/38] Fixed Problems with german bgm names --- src/locales/de/bgm-name.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/locales/de/bgm-name.json b/src/locales/de/bgm-name.json index 6355c33c49c..9db48c25377 100644 --- a/src/locales/de/bgm-name.json +++ b/src/locales/de/bgm-name.json @@ -77,18 +77,18 @@ "end_summit": "PMDDX Gipfel des Himmelturms", "battle_rocket_grunt": "HGSS Vs. Team Rocket Rüpel", "battle_aqua_magma_grunt": "ORAS Vs. Team Aqua & Magma", - "battle_galactic_grunt": "BDSP Vs. Team Galaktik Rüpel", + "battle_galactic_grunt": "SDLP Vs. Team Galaktik Rüpel", "battle_plasma_grunt": "SW Vs. Team Plasma Rüpel", "battle_flare_grunt": "XY Vs. Team Flare Rüpel", "battle_aether_grunt": "SM Vs. Æther Foundation", "battle_skull_grunt": "SM Vs. Team Skull Rüpel", "battle_macro_grunt": "SWSH Vs. Trainer", - "battle_galactic_admin": "BDSP Vs. Team Galactic Commander", + "battle_galactic_admin": "SDLP Vs. Team Galactic Commander", "battle_skull_admin": "SM Vs. Team Skull Vorstand", "battle_oleana": "SWSH Vs. Oleana", "battle_rocket_boss": "USUM Vs. Giovanni", "battle_aqua_magma_boss": "ORAS Vs. Team Aqua & Magma Boss", - "battle_galactic_boss": "BDSP Vs. Zyrus", + "battle_galactic_boss": "SDLP Vs. Zyrus", "battle_plasma_boss": "S2W2 Vs. G-Cis", "battle_flare_boss": "XY Vs. Flordelis", "battle_aether_boss": "SM Vs. Samantha", @@ -149,7 +149,7 @@ "title": "PMD Erkundungsteam Himmel Top-Menü-Thema", "mystery_encounter_weird_dream": "PMD Erkundungsteam Himmel Zeitturmspitze", - "mystery_encounter_fun_and_games": "PMD Erkundungsteam Himmel Gildenmeister Knuddeluff\n", + "mystery_encounter_fun_and_games": "PMD Erkundungsteam Himmel Gildenmeister Knuddeluff", "mystery_encounter_gen_5_gts": "SW GTS", "mystery_encounter_gen_6_gts": "XY GTS" } From 215ca1891a386e4c90c015a65d4f99153e1e2c8a Mon Sep 17 00:00:00 2001 From: Lugiad Date: Tue, 17 Sep 2024 13:04:08 +0200 Subject: [PATCH 36/38] Update delibirdy-dialogue.json --- src/locales/fr/mystery-encounters/delibirdy-dialogue.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/fr/mystery-encounters/delibirdy-dialogue.json b/src/locales/fr/mystery-encounters/delibirdy-dialogue.json index 1404bd2b1ac..20c878db24f 100644 --- a/src/locales/fr/mystery-encounters/delibirdy-dialogue.json +++ b/src/locales/fr/mystery-encounters/delibirdy-dialogue.json @@ -15,13 +15,13 @@ "2": { "label": "Donner de la nourriture", "tooltip": "(-) Donner une Baie ou une Résugraine aux {{delibirdName}}\n(+) Recevez un objet", - "select_prompt": "Sélectionner un objet à donner.", + "select_prompt": "Sélectionnez un objet à donner.", "selected": "Vous lancez la {{chosenItem}} aux {{delibirdName}},\nqui se lancent dans une grande délibération.$Ils reviennent ravis vers vous avec un cadeau !" }, "3": { "label": "Donner un objet", "tooltip": "(-) Donner un objet tenu aux {{delibirdName}}\n(+) Recevez un objet", - "select_prompt": "Sélectionner un objet à donner.", + "select_prompt": "Sélectionnez un objet à donner.", "selected": "Vous lancez l’objet {{chosenItem}} aux {{delibirdName}},\nqui se lancent dans une grande délibération.$Ils reviennent ravis vers vous avec un cadeau !" } }, From cde84e6bffef97ee71d18c88abf1f6b3e9bdb3c5 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Tue, 17 Sep 2024 13:06:47 +0200 Subject: [PATCH 37/38] Update shady-vitamin-dealer-dialogue.json --- .../mystery-encounters/shady-vitamin-dealer-dialogue.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/locales/fr/mystery-encounters/shady-vitamin-dealer-dialogue.json b/src/locales/fr/mystery-encounters/shady-vitamin-dealer-dialogue.json index 5c5972d7b1c..95628cdfb84 100644 --- a/src/locales/fr/mystery-encounters/shady-vitamin-dealer-dialogue.json +++ b/src/locales/fr/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -2,18 +2,18 @@ "intro": "Un homme en manteau noir vous aborde.", "speaker": "Dealer", "intro_dialogue": ".@d{16}.@d{16}.@d{16}$J’ai de la bonne came pour toi, mais seulement\nsi t’as les thunes.$Assure-toi quand même que tes Pokémon\npuissent encaisser.", - "title": "Le Dealer d’Accélérateurs", - "description": "L’homme ouvre son manteau et vous laisse apercevoir des Accélérateurs pour Pokémon. Le tarif qu’il annonce semble être une bonne affaire. Peut-être même un peu trop belle…\nIl vous laisse le choix entre deux offres.", + "title": "Le Dealer d’accélérateurs", + "description": "L’homme ouvre son manteau et vous laisse apercevoir des accélérateurs pour Pokémon. Le tarif qu’il annonce semble être une bonne affaire. Peut-être même un peu trop belle…\nIl vous laisse le choix entre deux offres.", "query": "Laquelle choisissez-vous ?", "invalid_selection": "Le Pokémon doit être en bonne santé.", "option": { "1": { "label": "Offre douteuse", - "tooltip": "(-) Payer {{option1Money, money}}\n(-) Effets secondaires ?\n(+) Le Pokémon choisi gagne 2 Accélérateurs au hasard" + "tooltip": "(-) Payer {{option1Money, money}}\n(-) Effets secondaires ?\n(+) Le Pokémon choisi gagne 2 accélérateurs au hasard" }, "2": { "label": "Offre honnête", - "tooltip": "(-) Payer {{option2Money, money}}\n(+) Le Pokémon choisi gagne 2 Accélérateurs au hasard" + "tooltip": "(-) Payer {{option2Money, money}}\n(+) Le Pokémon choisi gagne 2 accélérateurs au hasard" }, "3": { "label": "Partir", From b2398eac195b6b4f7cb1ea0c86e683f57e6dfb57 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Tue, 17 Sep 2024 13:14:05 +0200 Subject: [PATCH 38/38] Update a-trainers-test-dialogue.json --- src/locales/fr/mystery-encounters/a-trainers-test-dialogue.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/fr/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/fr/mystery-encounters/a-trainers-test-dialogue.json index aa7cfae1e31..d82af9b5eca 100644 --- a/src/locales/fr/mystery-encounters/a-trainers-test-dialogue.json +++ b/src/locales/fr/mystery-encounters/a-trainers-test-dialogue.json @@ -25,7 +25,7 @@ "accept": "Ce regard…\nBattons-nous.", "decline": "Je comprends, ton équpie m’a l’air lessivée.$Laisse-moi t’aider." }, - "title": "Épreuve de valeur", + "title": "Prouver sa valeur", "description": "Cette personne semble déterminée à vous donner un Œuf, qu’importe votre décision. Cependant, si vous parvenez à la battre, vous recevrez l’Œuf le plus rare.", "query": "Que voulez-vous faire ?", "option": {