From 13797fe322caaab814ed9d8cefa9db5c126da169 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Thu, 30 May 2024 13:06:25 -0500 Subject: [PATCH 01/39] Revert change to Minior forms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apparently its Meteor forms couldn't be selected if you caught it while it was in its Core form, so the change to this Pokémon specifically had to be reverted. It still immediately transforms back into Meteor form when starting a run, so this change should be harmless. --- src/data/pokemon-species.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index b4434ae40c3..f59ed7bfaf2 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -2137,13 +2137,13 @@ export function initSpecies() { new PokemonForm("Blue Meteor Form", "blue-meteor", Type.ROCK, Type.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), new PokemonForm("Indigo Meteor Form", "indigo-meteor", Type.ROCK, Type.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), new PokemonForm("Violet Meteor Form", "violet-meteor", Type.ROCK, Type.FLYING, 0.3, 40, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 440, 60, 60, 100, 60, 100, 60, 30, 70, 154, false, "", true), - new PokemonForm("Red Core Form", "red", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154), - new PokemonForm("Orange Core Form", "orange", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154), - new PokemonForm("Yellow Core Form", "yellow", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154), - new PokemonForm("Green Core Form", "green", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154), - new PokemonForm("Blue Core Form", "blue", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154), - new PokemonForm("Indigo Core Form", "indigo", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154), - new PokemonForm("Violet Core Form", "violet", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154), + new PokemonForm("Red Core Form", "red", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), + new PokemonForm("Orange Core Form", "orange", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), + new PokemonForm("Yellow Core Form", "yellow", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), + new PokemonForm("Green Core Form", "green", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), + new PokemonForm("Blue Core Form", "blue", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), + new PokemonForm("Indigo Core Form", "indigo", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), + new PokemonForm("Violet Core Form", "violet", Type.ROCK, Type.FLYING, 0.3, 0.3, Abilities.SHIELDS_DOWN, Abilities.NONE, Abilities.NONE, 500, 60, 100, 60, 100, 60, 120, 30, 70, 154, false, null, true), ), new PokemonSpecies(Species.KOMALA, 7, false, false, false, "Drowsing Pokémon", Type.NORMAL, null, 0.4, 19.9, Abilities.COMATOSE, Abilities.NONE, Abilities.NONE, 480, 65, 115, 65, 75, 95, 65, 45, 70, 168, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.TURTONATOR, 7, false, false, false, "Blast Turtle Pokémon", Type.FIRE, Type.DRAGON, 2, 212, Abilities.SHELL_ARMOR, Abilities.NONE, Abilities.NONE, 485, 60, 78, 135, 91, 85, 36, 70, 50, 170, GrowthRate.MEDIUM_FAST, 50, false), From 1415b746826b49bd4841cf14ac6b6d320f95c1c5 Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Thu, 30 May 2024 13:37:59 -0500 Subject: [PATCH 02/39] [QoL] Fix Final VS Code Error (#1608) * Fix i18next and mobile errors * Move File and Fix Error --- src/vite.env.d.ts | 11 +++++++++++ vite.env.d.ts | 11 ----------- 2 files changed, 11 insertions(+), 11 deletions(-) create mode 100644 src/vite.env.d.ts delete mode 100644 vite.env.d.ts diff --git a/src/vite.env.d.ts b/src/vite.env.d.ts new file mode 100644 index 00000000000..50bb7dddc02 --- /dev/null +++ b/src/vite.env.d.ts @@ -0,0 +1,11 @@ +/// + +interface ImportMetaEnv { + readonly VITE_BYPASS_LOGIN?: string; + readonly VITE_BYPASS_TUTORIAL?: string; + readonly VITE_API_BASE_URL?: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} diff --git a/vite.env.d.ts b/vite.env.d.ts deleted file mode 100644 index 1bb3a15b588..00000000000 --- a/vite.env.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// - -interface ImportMetaEnv { - readonly VITE_BYPASS_LOGIN: string; - readonly VITE_BYPASS_TUTORIAL: string; - readonly VITE_API_BASE_URL: string; -} - -interface ImportMeta { - readonly env: ImportMetaEnv; -} \ No newline at end of file From 329c9619f66fdfb035da1ba883c381bab1d3796a Mon Sep 17 00:00:00 2001 From: Dmitriy K Date: Thu, 30 May 2024 16:04:50 -0400 Subject: [PATCH 03/39] Add unthaw logic to Steam Eruption, Scorching Sands, Matcha Gotcha and all Damaging Fire moves (#940) * Add unthaw to moves that are missing it * Add unthaw to all damaging fire moves * Add Status Effect overrides for easier testing * clean up comments and readd status cure prefaint * use helper instead of accessing attrs directly * remove status overrides --- src/data/move.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/data/move.ts b/src/data/move.ts index 1cb78b836bc..90ed36af2dd 100755 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -423,6 +423,14 @@ export default class Move implements Localizable { export class AttackMove extends Move { constructor(id: Moves, type: Type, category: MoveCategory, power: integer, accuracy: integer, pp: integer, chance: integer, priority: integer, generation: integer) { super(id, type, category, MoveTarget.NEAR_OTHER, power, accuracy, pp, chance, priority, generation); + + /** + * {@link https://bulbapedia.bulbagarden.net/wiki/Freeze_(status_condition)} + * > All damaging Fire-type moves can now thaw a frozen target, regardless of whether or not they have a chance to burn; + */ + if (this.type === Type.FIRE) { + this.addAttr(new HealStatusEffectAttr(false, StatusEffect.FREEZE)); + } } getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { @@ -1612,15 +1620,31 @@ export class StealEatBerryAttr extends EatBerryAttr { } } +/** + * Move attribute that signals that the move should cure a status effect + * @extends MoveEffectAttr + * @see {@linkcode apply()} + */ export class HealStatusEffectAttr extends MoveEffectAttr { + /** List of Status Effects to cure */ private effects: StatusEffect[]; + /** + * @param selfTarget - Whether this move targets the user + * @param ...effects - List of status effects to cure + */ constructor(selfTarget: boolean, ...effects: StatusEffect[]) { super(selfTarget); this.effects = effects; } + /** + * @param user {@linkcode Pokemon} source of the move + * @param target {@linkcode Pokemon} target of the move + * @param move the {@linkcode Move} being used + * @returns true if the status is cured + */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!super.apply(user, target, move, args)) { return false; @@ -6612,6 +6636,7 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.STEAM_ERUPTION, Type.WATER, MoveCategory.SPECIAL, 110, 95, 5, 30, 0, 6) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) + .attr(HealStatusEffectAttr, false, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN), new AttackMove(Moves.HYPERSPACE_HOLE, Type.PSYCHIC, MoveCategory.SPECIAL, 80, -1, 5, -1, 0, 6) .ignoresProtect(), @@ -7288,6 +7313,7 @@ export function initMoves() { .attr(MultiHitAttr, MultiHitType._2), new AttackMove(Moves.SCORCHING_SANDS, Type.GROUND, MoveCategory.SPECIAL, 70, 100, 10, 30, 0, 8) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) + .attr(HealStatusEffectAttr, false, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN), new StatusMove(Moves.JUNGLE_HEALING, Type.GRASS, -1, 10, -1, 0, 8) .attr(HealAttr, 0.25, true, false) @@ -7667,6 +7693,7 @@ export function initMoves() { new AttackMove(Moves.MATCHA_GOTCHA, Type.GRASS, MoveCategory.SPECIAL, 80, 90, 15, 20, 0, 9) .attr(HitHealAttr) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) + .attr(HealStatusEffectAttr, false, StatusEffect.FREEZE) .attr(StatusEffectAttr, StatusEffect.BURN) .target(MoveTarget.ALL_NEAR_ENEMIES) .triageMove() From 3e932ce2d085238d45a536678d063cc82e353b83 Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Thu, 30 May 2024 16:20:27 -0400 Subject: [PATCH 04/39] Shinylock uncatchable Pokemon in endless mode (#1252) * Shinylock uncatchable Pokemon * Fix typos * Pass the linter vibe check * Remove 2 shinylock cases * refactor --- src/field/pokemon.ts | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 55a8091f857..37e8fcf9eca 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1222,7 +1222,22 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } + /** + * Function that tries to set a Pokemon shiny based on the trainer's trainer ID and secret ID + * Endless Pokemon in the end biome are unable to be set to shiny + * + * The exact mechanic is that it calculates E as the XOR of the player's trainer ID and secret ID + * F is calculated as the XOR of the first 16 bits of the Pokemon's ID with the last 16 bits + * The XOR of E and F are then compared to the thresholdOverride (default case 32) to see whether or not to generate a shiny + * @param thresholdOverride number that is divided by 2^16 (65536) to get the shiny chance + * @returns true if the Pokemon has been set as a shiny, false otherwise + */ trySetShiny(thresholdOverride?: integer): boolean { + // Shiny Pokemon should not spawn in the end biome in endless + if (this.scene.gameMode.isEndless && this.scene.arena.biomeType === Biome.END) { + return false; + } + const rand1 = Utils.binToDec(Utils.decToBin(this.id).substring(0, 16)); const rand2 = Utils.binToDec(Utils.decToBin(this.id).substring(16, 32)); @@ -1250,18 +1265,25 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.shiny; } + /** + * Generates a variant + * Has a 10% of returning 2 (epic variant) + * And a 20% of returning 1 (rare variant) + * Returns 0 (basic shiny) if there is no variant or 70% of the time otherwise + * @returns the shiny variant + */ generateVariant(): Variant { if (!this.shiny || !variantData.hasOwnProperty(this.species.speciesId)) { return 0; } const rand = Utils.randSeedInt(10); - if (rand > 3) { - return 0; + if (rand >= 3) { + return 0; // 7/10 + } else if (rand >= 1) { + return 1; // 2/10 + } else { + return 2; // 1/10 } - if (rand) { - return 1; - } - return 2; } generateFusionSpecies(forStarter?: boolean): void { From 2c784c662f93cb84125c09d5abda83d3d61bb738 Mon Sep 17 00:00:00 2001 From: MrWaterT <87186129+MrWaterT@users.noreply.github.com> Date: Fri, 31 May 2024 05:40:31 +0900 Subject: [PATCH 05/39] [Localization] Update Korean rival dialogue (#1597) * Update small Korean locales * Translate Korean classic story conversation * Minor translation edit in Korean 3: translate 'not the same back home' from 'atmosphere of home is not like before' to 'returning to previous state is impossible' 3_female: now 'home' clearly means their hometown, not only player's house 6, 6_female: simple nuance-of-sentence modification --- src/locales/ko/ability-trigger.ts | 2 +- src/locales/ko/dialogue.ts | 257 +++++++++++++++--------------- src/locales/ko/menu.ts | 1 + 3 files changed, 129 insertions(+), 131 deletions(-) diff --git a/src/locales/ko/ability-trigger.ts b/src/locales/ko/ability-trigger.ts index 75a8d2f8929..da263358089 100644 --- a/src/locales/ko/ability-trigger.ts +++ b/src/locales/ko/ability-trigger.ts @@ -2,5 +2,5 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const abilityTriggers: SimpleTranslationEntries = { "blockRecoilDamage" : "{{pokemonName}}(는)은 {{abilityName}} 때문에\n반동 데미지를 받지 않는다!", - "badDreams": "{{pokemonName}} is tormented!", + "badDreams": "{{pokemonName}}(는)은\n나이트메어 때문에 시달리고 있다!", } as const; diff --git a/src/locales/ko/dialogue.ts b/src/locales/ko/dialogue.ts index f9d77a83421..25d6716a152 100644 --- a/src/locales/ko/dialogue.ts +++ b/src/locales/ko/dialogue.ts @@ -2086,127 +2086,125 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "rival": { "encounter": { - 1: `@c{smile}Hey, I was looking for you! I knew you were eager to get going but I expected at least a goodbye… - $@c{smile_eclosed}So you're really pursuing your dream after all?\n I almost can't believe it. - $@c{serious_smile_fists}Since we're here, how about a battle?\nAfter all, I want to make sure you're ready. - $@c{serious_mopen_fists}Don't hold back, I want you to give me everything you've got!` + 1: `@c{smile}오, 찾았다! 떠나려는 건 알고 있었지만\n인사정도는 해줄 줄 알았는데… + $@c{smile_eclosed}그러니까 정말로 꿈을 좇겠다는 거지?\n듣고도 못 믿었다니까. + $@c{serious_smile_fists}여기까지 온 김에, 배틀은 어때?\n준비가 됐나 보자구. + $@c{serious_mopen_fists}망설이지 말고,\n너의 진면목을 보여봐!` }, "victory": { - 1: `@c{shock}Wow… You cleaned me out.\nAre you actually a beginner? - $@c{smile}Maybe it was a bit of luck but…\nWho knows you might just be able to go all the way. - $By the way, the professor asked me to give you these items. They look pretty cool. - $@c{serious_smile_fists}Good luck out there!` + 1: `@c{shock}와… 정말 깔끔하게 당했네.\n초보자 맞아? + $@c{smile}운이 따른 건지도 모르겠지만…\n그래도 정말 꿈을 이룰 지도. + $그나저나, 박사님께서 이걸 전해달라고 하시더라.\n좋아 보이던데. + $@c{serious_smile_fists}아무튼, 힘 내는거야!` }, }, "rival_female": { "encounter": { - 1: `@c{smile_wave}There you are! I've been looking everywhere for you!\n@c{angry_mopen}Did you forget to say goodbye to your best friend? - $@c{smile_ehalf}You're going after your dream, huh?\nThat day is really today isn't it… - $@c{smile}Anyway, I'll forgive you for forgetting me, but on one condition. @c{smile_wave_wink}You have to battle me! - $@c{angry_mopen}Give it your all! Wouldn't want your adventure to be over before it started, right?` + 1: `@c{smile_wave}여깄구나! 찾고 있었어!\n@c{angry_mopen}절친한테 작별인사도 안 하는거야? + $@c{smile_ehalf}꿈을 향해 떠나는거구나. 그렇지?\n이런 날이 오긴 하네… + $@c{smile}아무튼, 날 까먹고 가버린 건 용서해주겠어.\n@c{smile_wave_wink}배틀을 해준다면 말야! + $@c{angry_mopen}최선을 다 해 봐.\n모험을 시작과 동시에 끝내고 싶지 않다면!` }, "victory": { - 1: `@c{shock}You just started and you're already this strong?!@d{96}\n@c{angry}You totally cheated, didn't you? - $@c{smile_wave_wink}Just kidding!@d{64} @c{smile_eclosed}I lost fair and square… I have a feeling you're going to do really well out there. - $@c{smile}By the way, the professor wanted me to give you some items. Hopefully they're helpful! - $@c{smile_wave}Do your best like always! I believe in you!` + 1: `@c{shock}왜 벌써 이렇게 센 건데?!@d{96}\n@c{angry}아니면 뭔가 속임수, 그런 거? + $@c{smile_wave_wink}농담, 농담!@d{64} @c{smile_eclosed}내가 진 거 맞아…\n너 정말 앞으로도 잘 하겠는데. + $@c{smile}아 그래, 박사님께서 전해달라던 물건.\n도움이 되면 좋겠어! + $@c{smile_wave}항상 최선을 다 하라구! 믿고 있을게!` }, }, "rival_2": { "encounter": { - 1: `@c{smile}Hey, you're here too?\n@c{smile_eclosed}Still a perfect record, huh…? - $@c{serious_mopen_fists}I know it kind of looks like I followed you here, but that's mostly not true. - $@c{serious_smile_fists}Honestly though, I've been itching for a rematch since you beat me back at home. - $I've been doing a lot of my own training so I'll definitely put up a fight this time. - $@c{serious_mopen_fists}Don't hold back, just like before!\nLet's go!` + 1: `@c{smile}어라, 너 여깄었구나?\n@c{smile_eclosed}아직도 전승 중이라, 이거지…? + $@c{serious_mopen_fists}널 쫓아서 온 것 같아 보이겠지만, 오해야. + $@c{serious_smile_fists}그래도 솔직히 그 때부터 쭉 재대결이 간절했어. + $그 동안의 훈련도 있겠다 마침 좋은 기회같지? + $@c{serious_mopen_fists}자, 전처럼!\n배틀이야!` }, "victory": { - 1: `@c{neutral_eclosed}Oh. I guess I was overconfident. - $@c{smile}That's alright, though. I figured this might happen.\n@c{serious_mopen_fists}It just means I need to try harder for next time!\n - $@c{smile}Oh, not that you really need the help, but I had an extra one of these lying around and figured you might want it.\n - $@c{serious_smile_fists}Don't expect another one after this, though!\nI can't keep giving my opponent an advantage after all. - $@c{smile}Anyway, take care!` + 1: `@c{neutral_eclosed}이런. 자신감이 과했나봐. + $@c{smile}그래, 또 지고 말았네.\n@c{serious_mopen_fists}좀 더 열심히 훈련을 해야겠어!\n + $@c{smile}너한테 도움이 필요할 것 같지는 않지만, 이거.\n남는 게 있어서 말이야. + $@c{serious_smile_fists}물론 이번이 마지막이야, 알겠지?\n공평하게 하지 않으면 그게 내 핑계거리가 되고 말거야. + $@c{smile}이제 갈게. 앞으로도 조심하고!` }, }, "rival_2_female": { "encounter": { - 1: `@c{smile_wave}Oh, fancy meeting you here. Looks like you're still undefeated. @c{angry_mopen}Huh… Not bad! - $@c{angry_mopen}I know what you're thinking, and no, I wasn't creeping on you. @c{smile_eclosed}I just happened to be in the area. - $@c{smile_ehalf}I'm happy for you but I just want to let you know that it's OK to lose sometimes. - $@c{smile}We learn from our mistakes, often more than we would if we kept succeeding. - $@c{angry_mopen}In any case, I've been training hard for our rematch, so you'd better give it your all!` + 1: `@c{smile_wave}우연이네, 이런 곳에서 만나고.\n아직 연전연승이구나? @c{angry_mopen}나쁘지 않아! + $@c{angry_mopen}무슨 생각하고있는지 알겠어, 하지만 아냐.\n@c{smile_eclosed}우연히 근처에 있었을 뿐이라구. + $@c{smile_ehalf}그래도 마침, 가끔은 지는것도 괜찮다고 알려주고 싶었는데. + $@c{smile}우린 실수를 통해서도 성장할 수 있잖아.\n때로는 성공을 반복할 때보다도 더 많이 말야. + $@c{angry_mopen}어쨌든간에, 나도 이런 때를 위해 훈련해왔으니까,\n너도 최선을 다 하는게 좋을 거야!` }, "victory": { - 1: `@c{neutral}I… wasn't supposed to lose that time… - $@c{smile}Aw well. That just means I'll have to train even harder for next time! - $@c{smile_wave}I also got you another one of these!\n@c{smile_wave_wink}No need to thank me~. - $@c{angry_mopen}This is the last one, though! You won't be getting anymore freebies from me after this! - $@c{smile_wave}Keep at it!` + 1: `@c{neutral}이… 번에도 져버릴 줄이야… + $@c{smile}으, 그래. 더 열심히 훈련하면 되겠지! + $@c{smile_wave}이것도 하나 더 챙겨왔으니 받아!\n@c{smile_wave_wink}감사 인사는 됐다구~. + $@c{angry_mopen}하지만, 마지막이야!\n또 이렇게 공짜로 나눠주진 않을 테니까! + $@c{smile_wave}그럼!` }, "defeat": { - 1: "It's OK to lose sometimes…" + 1: "가끔은 지는 것도 괜찮아…" } }, "rival_3": { "encounter": { - 1: `@c{smile}Hey, look who it is! It's been a while.\n@c{neutral}You're… still undefeated? Huh. - $@c{neutral_eclosed}Things have been kind of… strange.\nIt's not the same back home without you. - $@c{serious}I know it's selfish, but I need to get this off my chest.\n@c{neutral_eclosed}I think you're in over your head here. - $@c{serious}Never losing once is just unrealistic.\nWe need to lose sometimes in order to grow. - $@c{neutral_eclosed}You've had a great run but there's still so much ahead, and it only gets harder. @c{neutral}Are you prepared for that? - $@c{serious_mopen_fists}If so, prove it to me.` + 1: `@c{smile}이게 누구야! 오랜만이야.\n@c{neutral}역시나… 쭉 이기고 있었구나? + $@c{neutral_eclosed}상황이 좀… 그렇더라. \n혼자 마을로 돌아가봤자 너 없인 예전같아질 수 없겠지. + $@c{serious}이기적인 이야기란건 알지만 말해야겠어.\n@c{neutral_eclosed}너 지금 좀 아닌 것 같아. + $@c{serious}계속 이기기만 하겠다는 건 너무 비현실적이야.\n사람은 원래 꺾여가며 성장하는 거라고. + $@c{neutral_eclosed}물론 지금까지는 잘 해왔다고 생각하겠지만,\n갈 길이 멀지. @c{neutral}대비는 되어 있어? + $@c{serious_mopen_fists}그렇다면, 내게 증명해 줘.` }, "victory": { - 1: "@c{angry_mhalf}This is ridiculous… I've hardly stopped training…\nHow are we still so far apart?" + 1: "@c{angry_mhalf}말도 안 돼… 한시도 쉬지 않고 훈련했는데…\n어째서 전혀 닿을 수 없는거야?" }, }, "rival_3_female": { "encounter": { - 1: `@c{smile_wave}Long time no see! Still haven't lost, huh.\n@c{angry}You're starting to get on my nerves. @c{smile_wave_wink}Just kidding! - $@c{smile_ehalf}But really, don't you miss home by now? Or… me?\nI… I mean, we've really missed you. - $@c{smile_eclosed}I support you in your dream and everything, but the reality is you're going to lose sooner or later. - $@c{smile}And when you do, I'll be there for you like always.\n@c{angry_mopen}Now, let me show you how strong I've become!` + 1: `@c{smile_wave}오랜만이야! 아직도 안 졌구나.\n@c{angry}거슬리게 말야. @c{smile_wave_wink}농담이야! + $@c{smile_ehalf}하지만 진짜, 고향이 그립진 않아? 집이나… 나는?\n나… 나는, 네가 정말 그리웠어. + $@c{smile_eclosed}난 너의 꿈과 모든 것을 응원하지만,\n넌 언젠가 패배를 겪게 될 거야. + $@c{smile}그 땐 언제나처럼 내가 곁에 있어줄게.\n@c{angry_mopen}내가 얼마나 강해졌는지도, 지금 보여 줄 테니까!` }, "victory": { - 1: "@c{shock}After all that… it wasn't enough…?\nYou'll never come back at this rate…" - + 1: "@c{shock}이렇게까지 했는데도… 모자랐던 거야…?\n이러면 정말로 너는 이제 영영…" }, "defeat": { - 1: "You gave it your best, now let's go home." + 1: "최선을 다 했지.\n집에 갈 시간이야." } }, "rival_4": { "encounter": { - 1: `@c{neutral}Hey. - $I won't mince words or pleasantries with you.\n@c{neutral_eclosed}I'm here to win, plain and simple. - $@c{serious_mhalf_fists}I've learned to maximize my potential by putting all my time into training. - $@c{smile}You get a lot of extra time when you cut out the unnecessary sleep and social interaction. - $@c{serious_mopen_fists}None of that matters anymore, not until I win. - $@c{neutral_eclosed}I've even reached the point where I don't lose anymore.\n@c{smile_eclosed}I suppose your philosophy wasn't so wrong after all. - $@c{angry_mhalf}Losing is for the weak, and I'm not weak anymore. - $@c{serious_mopen_fists}Prepare yourself.` + 1: `@c{neutral}안녕. + $잡담은 넘어가자.\n@c{neutral_eclosed}너에게 이기기 위해 찾아왔어. 간단하지. + $@c{serious_mhalf_fists}이제 잠재력을 끌어내는 법은 확실히 알겠어. + $@c{smile}잠이나 사회적인 활동들.\n줄일 수 있는 불필요한 시간이 아주 많더라. + $@c{serious_mopen_fists}오직 승리 뿐이야.\n이제 아무것도 중요하지 않아. + $@c{neutral_eclosed}나도 이제 더 이상은 지지 않게 됐어.\n@c{smile_eclosed}네 그 철학이 완전히 틀린 건 아니었나봐. + $@c{angry_mhalf}패배는 약자에게 주어지는 것이고, 난 더 이상 약하지 않아. + $@c{serious_mopen_fists}준비해.` }, "victory": { - 1: "@c{neutral}What…@d{64} What are you?" + 1: "@c{neutral}너…@d{64} 너 대체 뭐야?" }, }, "rival_4_female": { "encounter": { - 1: `@c{neutral}It's me! You didn't forget about me again… did you? - $@c{smile}You should be proud of how far you made it. Congrats!\nBut it looks like it's the end of your journey. - $@c{smile_eclosed}You've awoken something in me I never knew was there.\nIt seems like all I do now is train. - $@c{smile_ehalf}I hardly even eat or sleep now, I just train my Pokémon all day, getting stronger every time. - $@c{neutral}In fact, I… hardly recognize myself. - $And now, I've finally reached peak performance.\nI don't think anyone could beat me now. - $And you know what? It's all because of you.\n@c{smile_ehalf}I don't know whether to thank you or hate you. - $@c{angry_mopen}Prepare yourself.` + 1: `@c{neutral}나야! 날 잊어버리고 있던 건… 아니지? + $@c{smile}네 업적에 자랑스러워 할 때가 됐어. 축하해!\n하지만 네 여행도 여기까지야. + $@c{smile_eclosed}너는 나도 모르던 내 안의 무언가를 일깨웠어.\n이제 훈련 말고는 아무것도 하지 않아. + $@c{smile_ehalf}먹지도 자지도 않고, 그저 하루종일.\n더 강해지고 있어. + $@c{neutral}사실, 나… 이제 내가 뭔지도 잘 모르겠어. + $그렇지만 기량만은, 정점에 다다랐지.\n아무도 내게 이길 수 없을거야. + $그거 알아? 이게 전부 네 덕이야.\n@c{smile_ehalf}감사해야할지 증오해야할지 모르겠네. + $@c{angry_mopen}준비해.` }, "victory": { - 1: "@c{neutral}What…@d{64} What are you?" - + 1: "@c{neutral}너…@d{64} 너 대체 뭐야?" }, "defeat": { - 1: "$@c{smile}You should be proud of how far you made it." + 1: "$@c{smile}네가 키운 상대야. 자랑스럽지?" } }, "rival_5": { @@ -2231,47 +2229,46 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "rival_6": { "encounter": { - 1: `@c{smile_eclosed}We meet again. - $@c{neutral}I've had some time to reflect on all this.\nThere's a reason this all seems so strange. - $@c{neutral_eclosed}Your dream, my drive to beat you…\nIt's all a part of something greater. - $@c{serious}This isn't about me, or about you… This is about the world, @c{serious_mhalf_fists}and it's my purpose to push you to your limits. - $@c{neutral_eclosed}Whether I've fulfilled that purpose I can't say, but I've done everything in my power. - $@c{neutral}This place we ended up in is terrifying… Yet somehow I feel unphased, like I've been here before. - $@c{serious_mhalf_fists}You feel the same, don't you? - $@c{serious}…and it's like something here is speaking to me.\nThis is all the world's known for a long time now. - $Those times we cherished together that seem so recent are nothing but a distant memory. - $@c{neutral_eclosed}Who can say whether they were ever even real in the first place. - $@c{serious_mopen_fists}You need to keep pushing, because if you don't, it will never end. You're the only one who can do this. - $@c{serious_smile_fists}I hardly know what any of this means, I just know that it's true. - $@c{serious_mopen_fists}If you can't defeat me here and now, you won't stand a chance.` + 1: `@c{smile_eclosed}다시 만났구나. + $@c{neutral}모든 걸 되짚어 봤어.\n이 기이함에도 이유가 있더라. + $@c{neutral_eclosed}널 이기고자 하는 욕구, 아니면 네 꿈…\n이건 그저 더 큰 무언가의 일부일 뿐이었어. + $@c{serious}개인의 문제가 아니라 세계 전체가 엮인 일이었고…\n@c{serious_mhalf_fists}난 널 한계까지 밀어붙이기 위한 도구였던 거지. + $@c{neutral_eclosed}내가 잘 쓰였는진 모르겠지만 어쨌든 최선을 다 했고. + $@c{neutral}끝끝내 도착한 이곳은 끔찍하지만…\n언젠가 와 본 것 같아. + $@c{serious_mhalf_fists}너도 그렇게 느끼지? + $@c{serious}…그리고 무언가가 이야기하고 있어.\n오랫동안 세상에 알려져온 무언가가. + $우리가 함께했던 소중한 시간들은 이제 그저 아득해. + $@c{neutral_eclosed}실제로 일어난 일이긴 할까? + $@c{serious_mopen_fists}너는 계속 나아가야 해. 그렇지 않으면 끝나지 않아.\n오직 너만이 할 수 있어. + $@c{serious_smile_fists}잘 모르겠지만, 하나만은 확실해. + $@c{serious_mopen_fists}여기서 날 쓰러뜨리지 못한다면, 너에게 기회는 없을거란걸.` }, "victory": { - 1: `@c{smile_eclosed}It looks like my work is done here. - $I want you to promise me one thing.\n@c{smile}After you heal the world, please come home.` + 1: `@c{smile_eclosed}내 역할은 여기까진 것 같아. + $하나만 약속해 줘.\n@c{smile}세상을 원래대로 되돌리고 나면, 집으로 돌아오는거야.` }, }, "rival_6_female": { "encounter": { - 1: `@c{smile_ehalf}So it's just us again. - $@c{smile_eclosed}You know, I keep going around and around in my head… - $@c{smile_ehalf}There's something to all this, why everything seems so strange now… - $@c{smile}You have your dream, and I have this ambition in me… - $I just can't help but feel there's a greater purpose to all this, to what we're doing, you and I. - $@c{smile_eclosed}I think I'm supposed to push you… to your limits. - $@c{smile_ehalf}I'm not sure if I've been doing a good job at that, but I've tried my best up to now. - $It's something about this strange and dreadful place… Everything seems so clear… - $This… is all the world's known for a long time now. - $@c{smile_eclosed}It's like I can barely remember the memories we cherished together. - $@c{smile_ehalf}Were they even real? They seem so far away now… - $@c{angry_mopen}You need to keep pushing, because if you don't, it will never end. You're the only one who can do this. - $@c{smile_ehalf}I… don't know what all this means… but I feel it's true. - $@c{neutral}If you can't defeat me here and now, you won't stand a chance.` + 1: `@c{smile_ehalf}또 이렇게 만났네. + $@c{smile_eclosed}나 머릿속이 빙글빙글 도는 것 같아… + $@c{smile_ehalf}모든 것이 이상하게 보이는 이유.\n분명 뭔가가 있어… + $@c{smile}너는 너의 꿈이 있고,\n나는 나의 야망이 있지… + $이 모든것, 우리가 하고 있는 모든 일들이\n더 큰 무언가를 위한 것임을 느낄 수밖에 없어. + $@c{smile_eclosed}나는 아마 너를…\n한계까지 몰아붙여야 하는 거야. + $@c{smile_ehalf}잘 해왔는지는 모르겠는데, 최선은 다 했어. + $이 이상하고 무서운 곳…\n모든게 선명하게 보이고… + $이건… 오래전부터 세상에 알려져온 전부. + $@c{smile_eclosed}우리가 함께해온 추억들이, 이제는 거의 떠오르지 않아. + $@c{smile_ehalf}실제로 일어났던 일일까? 너무 멀게만 느껴지는데… + $@c{angry_mopen}계속 나아가야 해. 안 그러면, 영원히 끝나지 않을 거야. \n오직 너만이 할 수 있어. + $@c{smile_ehalf}난… 이 모든게 무슨 의미가 있는지는 잘 모르겠지만…\n이거 하나는 느끼고 있어. + $@c{neutral}여기서 날 쓰러뜨리지 못한다면, 너에게 기회는 없을거란걸.` }, "victory": { - 1: `@c{smile_ehalf}I… I think I fulfilled my purpose… - $@c{smile_eclosed}Promise me… After you heal the world… Please… come home safe. - $@c{smile_ehalf}…Thank you.` - + 1: `@c{smile_ehalf}나… 내 소임을 다 한 기분이야… + $@c{smile_eclosed}약속해 줘… 세상을 원래대로 되돌리고서… \n집으로… 무사히 돌아오는 거야. + $@c{smile_ehalf}…고마워.` }, }, }; @@ -2282,17 +2279,17 @@ export const PGFdialogue: DialogueTranslationEntries = PGMdialogue; // Dialogue of the endboss of the game when the player character is male (Or unset) export const PGMbattleSpecDialogue: SimpleTranslationEntries = { - "encounter": `It appears the time has finally come once again.\nYou know why you have come here, do you not? - $You were drawn here, because you have been here before.\nCountless times. - $Though, perhaps it can be counted.\nTo be precise, this is in fact your 5,643,853rd cycle. - $Each cycle your mind reverts to its former state.\nEven so, somehow, remnants of your former selves remain. - $Until now you have yet to succeed, but I sense a different presence in you this time.\n - $You are the only one here, though it is as if there is… another. - $Will you finally prove a formidable challenge to me?\nThe challenge I have longed for for millennia? - $We begin.`, - "firstStageWin": `I see. The presence I felt was indeed real.\nIt appears I no longer need to hold back. - $Do not disappoint me.`, - "secondStageWin": "…Magnificent." + "encounter": `드디어 때가 다시 도래했다.\n당도한 연유를 아는가? + $이미 도달한 적이 있기에 이 자리에 있다.\n셀 수도 없이 많이. + $아니, 사실 셀 수는 있지.\n정확히 너의 5,643,853번째다. + $매 번 태초의 정신으로 되돌아갔을 뿐.\n하지만 어떻게든, 흔적은 남는다. + $실패만을 반복했을 뿐이지만,\n지금은 네 안에 무언가가 있구나.\n + $홀로 선 것처럼 보이나, 무언가 이질적인… + $마침내 그간의 갈망을 해소해주는가?\n수천 년 간 기다려온 도전을? + $시작하지.`, + "firstStageWin": `그렇군. 정말로 있었어.\n이제 주저할 필요는 없다. + $실망시키지 않도록.`, + "secondStageWin": "…고무적이군." }; // Dialogue of the endboss of the game when the player character is female. For languages that do not have gendered pronouns, this can be set to PGMbattleSpecDialogue. @@ -2301,22 +2298,22 @@ export const PGFbattleSpecDialogue: SimpleTranslationEntries = PGMbattleSpecDial // Dialogue that does not fit into any other category (e.g. tutorial messages, or the end of the game). For when the player character is male export const PGMmiscDialogue: SimpleTranslationEntries = { "ending": - `@c{smile}Oh? You won?@d{96} @c{smile_eclosed}I guess I should've known.\nBut, you're back now. - $@c{smile}It's over.@d{64} You ended the loop. - $@c{serious_smile_fists}You fulfilled your dream too, didn't you?\nYou didn't lose even once. - $@c{neutral}I'm the only one who'll remember what you did.@d{96}\nI guess that's okay, isn't it? - $@c{serious_smile_fists}Your legend will always live on in our hearts. - $@c{smile_eclosed}Anyway, I've had about enough of this place, haven't you? Let's head home. - $@c{serious_smile_fists}Maybe when we get back, we can have another battle?\nIf you're up to it.`, + `@c{smile}오? 이긴거야?@d{96} @c{smile_eclosed}진즉 알았어야 했는데.\n아무튼, 돌아왔구나. + $@c{smile}다 끝난거야.@d{64} 네가 굴레를 끝장냈어. + $@c{serious_smile_fists}네 꿈도 이뤄졌고말야.\n진짜로 한 번도 안 졌잖아. + $@c{neutral}기억하는 건 우리들 뿐일 모양이지만.@d{96}\n그래도, 괜찮지? + $@c{serious_smile_fists}오늘의 일은\n너와 나의 마음 속에 항상 함께할 거야. + $@c{smile_eclosed}여기 구경도 충분히 했으니\n이제 집에 가자. + $@c{serious_smile_fists}되돌아가서, 다시 배틀을 할 수도 있지 않을까?\n네가 원한다면 말야.`, "ending_female": - `@c{shock}You're back?@d{32} Does that mean…@d{96} you won?!\n@c{smile_ehalf}I should have known you had it in you. - $@c{smile_eclosed}Of course… I always had that feeling.\n@c{smile}It's over now, right? You ended the loop. - $@c{smile_ehalf}You fulfilled your dream too, didn't you?\nYou didn't lose even once. - $I'll be the only one to remember what you did.\n@c{angry_mopen}I'll try not to forget! - $@c{smile_wave_wink}Just kidding!@d{64} @c{smile}I'd never forget.@d{32}\nYour legend will live on in our hearts. - $@c{smile_wave}Anyway,@d{64} it's getting late…@d{96} I think?\nIt's hard to tell in this place. - $Let's go home. @c{smile_wave_wink}Maybe tomorrow, we can have another battle, for old time's sake?`, - "ending_endless": "Congratulations on reaching the current end!\nMore content is coming soon.", + `@c{shock}돌아왔구나?@d{32} 그 말은…@d{96} 이겼어?!\n@c{smile_ehalf}그럴 줄 알았다니까. + $@c{smile_eclosed}물론… 언제나 느껴왔지.\n@c{smile}끝난 거, 맞지? 이 굴레를 말이야. + $@c{smile_ehalf}네 꿈도 이뤘고 말이야.\n어떻게 한번도 안 졌대? + $네가 한 일은 나만 기억하게 될 모양이지만.\n@c{angry_mopen}나, 안 까먹어볼 테니까! + $@c{smile_wave_wink}농담이야!@d{64} @c{smile}절대로 안 잊어버릴 거야.@d{32}\n오늘 일은 우리의 마음 속에서 살아갈 야. + $@c{smile_wave}어쨌든,@d{64} 시간이 좀 늦었어…@d{96}\n이런 곳에서 할 말은 아닌가? + $집에 가자. @c{smile_wave_wink}아마 내일은,\n추억을 되짚어보기 위한 배틀을 해볼 수 있을 거야.`, + "ending_endless": "끝에 도달하신 것을 축하드립니다!\n더 많은 컨텐츠를 기다려주세요.", "ending_name": "Devs" }; // Dialogue that does not fit into any other category (e.g. tutorial messages, or the end of the game). For when the player character is female. For languages that do not have gendered pronouns, this can be set to PGMmiscDialogue. diff --git a/src/locales/ko/menu.ts b/src/locales/ko/menu.ts index aaa5057b1cc..8e9f132aa93 100644 --- a/src/locales/ko/menu.ts +++ b/src/locales/ko/menu.ts @@ -11,6 +11,7 @@ export const menu: SimpleTranslationEntries = { "dailyRun": "데일리 런 (베타)", "loadGame": "불러오기", "newGame": "새 게임", + "settings": "설정", "selectGameMode": "게임 모드를 선택해주세요.", "logInOrCreateAccount": "로그인 또는 등록을 해 주세요. 개인정보를 요구하지 않습니다!", "username": "이름", From 2fd87a3cadeade0d20ec6e19faf82a70a5403573 Mon Sep 17 00:00:00 2001 From: Gianluca Fuoco <87877876+geefuoco@users.noreply.github.com> Date: Thu, 30 May 2024 16:48:06 -0400 Subject: [PATCH 06/39] [Bug] Add Giga Impact Opp BG img (#1584) * fix: add missing image by rotating giga impact image 180 degrees * fix: move over impact in image --- .../battle_anims/PRAS- Giga Impact Opp BG.png | Bin 0 -> 45010 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/images/battle_anims/PRAS- Giga Impact Opp BG.png diff --git a/public/images/battle_anims/PRAS- Giga Impact Opp BG.png b/public/images/battle_anims/PRAS- Giga Impact Opp BG.png new file mode 100644 index 0000000000000000000000000000000000000000..031483c4d4f1727dbdc929a4e4ca8e1dcd1556fe GIT binary patch literal 45010 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
&h@Y_C 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 ykv literal 0 HcmV?d00001 From d70ab3eaf68c8f70205b3492f4750dfa9c11bc53 Mon Sep 17 00:00:00 2001 From: Ethan <71776311+EvasiveAce@users.noreply.github.com> Date: Thu, 30 May 2024 17:01:42 -0400 Subject: [PATCH 07/39] [Move] Implement Punishment (#1610) * Implement Punishment and reopen pull request 373 * Fix console log and () --- src/data/move.ts | 50 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 90ed36af2dd..e20768c69e9 100755 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -2704,12 +2704,57 @@ export class HitCountPowerAttr extends VariablePowerAttr { } } +/** + * Turning a once was (StatChangeCountPowerAttr) statement and making it available to call for any attribute. + * @param {Pokemon} pokemon The pokemon that is being used to calculate the count of positive stats + * @returns {number} Returns the amount of positive stats + */ +const countPositiveStats = (pokemon: Pokemon): number => { + return pokemon.summonData.battleStats.reduce((total, stat) => (stat && stat > 0) ? total + stat : total, 0); +}; + +/** + * Attribute that increases power based on the amount of positive stat increases. + */ export class StatChangeCountPowerAttr extends VariablePowerAttr { + + /** + * @param {Pokemon} user The pokemon that is being used to calculate the amount of positive stats + * @param {Pokemon} target N/A + * @param {Move} move N/A + * @param {any[]} args The argument for VariablePowerAttr, accumulates and sets the amount of power multiplied by stats + * @returns {boolean} Returns true if attribute is applied + */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const positiveStats: number = user.summonData.battleStats.reduce((total, stat) => stat > 0 && stat ? total + stat : total, 0); + const positiveStats: number = countPositiveStats(user); (args[0] as Utils.NumberHolder).value += positiveStats * 20; + return true; + } +} +/** + * Punishment normally has a base power of 60, + * but gains 20 power for every increased stat stage the target has, + * up to a maximum of 200 base power in total. + */ +export class PunishmentPowerAttr extends VariablePowerAttr { + private PUNISHMENT_MIN_BASE_POWER = 60; + private PUNISHMENT_MAX_BASE_POWER = 200; + + /** + * @param {Pokemon} user N/A + * @param {Pokemon} target The pokemon that the move is being used against, as well as calculating the stats for the min/max base power + * @param {Move} move N/A + * @param {any[]} args The value that is being changed due to VariablePowerAttr + * @returns Returns true if attribute is applied + */ + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const positiveStats: number = countPositiveStats(target); + (args[0] as Utils.NumberHolder).value = Math.min( + this.PUNISHMENT_MAX_BASE_POWER, + this.PUNISHMENT_MIN_BASE_POWER + positiveStats * 20 + ); return true; } } @@ -6065,7 +6110,8 @@ export function initMoves() { new StatusMove(Moves.GUARD_SWAP, Type.PSYCHIC, -1, 10, -1, 0, 4) .unimplemented(), new AttackMove(Moves.PUNISHMENT, Type.DARK, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) - .unimplemented(), + .makesContact(true) + .attr(PunishmentPowerAttr), new AttackMove(Moves.LAST_RESORT, Type.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4) .attr(LastResortAttr), new StatusMove(Moves.WORRY_SEED, Type.GRASS, 100, 10, -1, 0, 4) From cb6a0b9973c485082d3060bfd077bb2263c6ee0f Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Thu, 30 May 2024 17:25:53 -0400 Subject: [PATCH 08/39] Fix bug with variant rate (#1613) --- src/field/pokemon.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 37e8fcf9eca..c8aaeeaccfd 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1268,8 +1268,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Generates a variant * Has a 10% of returning 2 (epic variant) - * And a 20% of returning 1 (rare variant) - * Returns 0 (basic shiny) if there is no variant or 70% of the time otherwise + * And a 30% of returning 1 (rare variant) + * Returns 0 (basic shiny) if there is no variant or 60% of the time otherwise * @returns the shiny variant */ generateVariant(): Variant { @@ -1277,10 +1277,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return 0; } const rand = Utils.randSeedInt(10); - if (rand >= 3) { - return 0; // 7/10 + if (rand >= 4) { + return 0; // 6/10 } else if (rand >= 1) { - return 1; // 2/10 + return 1; // 3/10 } else { return 2; // 1/10 } From 31e3293c51e096541fc050d3f123b75b7c6153bd Mon Sep 17 00:00:00 2001 From: Adrian T <68144167+torranx@users.noreply.github.com> Date: Fri, 31 May 2024 05:42:46 +0800 Subject: [PATCH 09/39] [Ability][Move] Finish wind rider/power + tailwind implementation (#1566) * finish wind moves + tailwind implementation * move code and add documentations * remove partial tag of wind_power * add translations, fix move bugs * fix ability trigger message * fix ability trigger message * add es localization * move out of else statement --- src/data/ability.ts | 58 +++++++++++++++++++++++++--- src/data/arena-tag.ts | 21 +++++++++- src/locales/de/ability-trigger.ts | 1 + src/locales/en/ability-trigger.ts | 1 + src/locales/es/ability-trigger.ts | 3 +- src/locales/fr/ability-trigger.ts | 3 +- src/locales/it/ability-trigger.ts | 1 + src/locales/pt_BR/ability-trigger.ts | 1 + src/locales/zh_CN/ability-trigger.ts | 3 +- src/locales/zh_TW/ability-trigger.ts | 1 + 10 files changed, 83 insertions(+), 10 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 9cb03a5bc44..bef81a0220f 100755 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -674,7 +674,10 @@ export class PostDefendApplyBattlerTagAbAttr extends PostDefendAbAttr { applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean { if (this.condition(pokemon, attacker, move.getMove())) { - pokemon.addTag(this.tagType, undefined, undefined, pokemon.id); + if (!pokemon.getTag(this.tagType)) { + pokemon.addTag(this.tagType, undefined, undefined, pokemon.id); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:windPowerCharged", { pokemonName: pokemon.name, moveName: move.getName() })); + } return true; } return false; @@ -3200,6 +3203,50 @@ export class MoneyAbAttr extends PostBattleAbAttr { } } +/** + * Applies a stat change after a Pokémon is summoned, + * conditioned on the presence of a specific arena tag. + * + * @extends {PostSummonStatChangeAbAttr} + */ +export class PostSummonStatChangeOnArenaAbAttr extends PostSummonStatChangeAbAttr { + /** + * The type of arena tag that conditions the stat change. + * @private + * @type {ArenaTagType} + */ + private tagType: ArenaTagType; + + /** + * Creates an instance of PostSummonStatChangeOnArenaAbAttr. + * Initializes the stat change to increase Attack by 1 stage if the specified arena tag is present. + * + * @param {ArenaTagType} tagType - The type of arena tag to check for. + */ + constructor(tagType: ArenaTagType) { + super([BattleStat.ATK], 1, true, false); + this.tagType = tagType; + } + + /** + * Applies the post-summon stat change if the specified arena tag is present on pokemon's side. + * This is used in Wind Rider ability. + * + * @param {Pokemon} pokemon - The Pokémon being summoned. + * @param {boolean} passive - Whether the effect is passive. + * @param {any[]} args - Additional arguments. + * @returns {boolean} - Returns true if the stat change was applied, otherwise false. + */ + applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + const side = pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + + if (pokemon.scene.arena.getTagOnSide(this.tagType, side)) { + return super.applyPostSummon(pokemon, passive, args); + } + return false; + } +} + function applyAbAttrsInternal(attrType: { new(...args: any[]): TAttr }, pokemon: Pokemon, applyFunc: AbAttrApplyFunc, args: any[], isAsync: boolean = false, showAbilityInstant: boolean = false, quiet: boolean = false, passive: boolean = false): Promise { return new Promise(resolve => { @@ -4270,9 +4317,9 @@ export function initAbilities() { .attr(TypeImmunityStatChangeAbAttr, Type.FIRE, BattleStat.DEF, 2) .ignorable(), new Ability(Abilities.WIND_RIDER, 9) - .attr(MoveImmunityStatChangeAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.getMove().hasFlag(MoveFlags.WIND_MOVE), BattleStat.ATK, 1) - .ignorable() - .partial(), + .attr(MoveImmunityStatChangeAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.getMove().hasFlag(MoveFlags.WIND_MOVE) && move.getMove().category !== MoveCategory.STATUS, BattleStat.ATK, 1) + .attr(PostSummonStatChangeOnArenaAbAttr, ArenaTagType.TAILWIND) + .ignorable(), new Ability(Abilities.GUARD_DOG, 9) .attr(PostIntimidateStatChangeAbAttr, [BattleStat.ATK], 1, true) .attr(ForceSwitchOutImmunityAbAttr) @@ -4280,8 +4327,7 @@ export function initAbilities() { new Ability(Abilities.ROCKY_PAYLOAD, 9) .attr(MoveTypePowerBoostAbAttr, Type.ROCK), new Ability(Abilities.WIND_POWER, 9) - .attr(PostDefendApplyBattlerTagAbAttr, (target, user, move) => move.hasFlag(MoveFlags.WIND_MOVE), BattlerTagType.CHARGED) - .partial(), + .attr(PostDefendApplyBattlerTagAbAttr, (target, user, move) => move.hasFlag(MoveFlags.WIND_MOVE), BattlerTagType.CHARGED), new Ability(Abilities.ZERO_TO_HERO, 9) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 3057132cafc..37de1af2efa 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -4,7 +4,7 @@ import * as Utils from "../utils"; import { MoveCategory, allMoves, MoveTarget } from "./move"; import { getPokemonMessage } from "../messages"; import Pokemon, { HitResult, PokemonMove } from "../field/pokemon"; -import { MoveEffectPhase, PokemonHealPhase, StatChangePhase} from "../phases"; +import { MoveEffectPhase, PokemonHealPhase, ShowAbilityPhase, StatChangePhase} from "../phases"; import { StatusEffect } from "./status-effect"; import { BattlerIndex } from "../battle"; import { Moves } from "./enums/moves"; @@ -12,6 +12,9 @@ import { ArenaTagType } from "./enums/arena-tag-type"; import { BlockNonDirectDamageAbAttr, ProtectStatAbAttr, applyAbAttrs } from "./ability"; import { BattleStat } from "./battle-stat"; import { CommonAnim, CommonBattleAnim } from "./battle-anims"; +import { Abilities } from "./enums/abilities"; +import { BattlerTagType } from "./enums/battler-tag-type"; +import i18next from "i18next"; export enum ArenaTagSide { BOTH, @@ -625,6 +628,22 @@ class TailwindTag extends ArenaTag { onAdd(arena: Arena): void { arena.scene.queueMessage(`The Tailwind blew from behind${this.side === ArenaTagSide.PLAYER ? "\nyour" : this.side === ArenaTagSide.ENEMY ? "\nthe opposing" : ""} team!`); + + const source = arena.scene.getPokemonById(this.sourceId); + const party = source.isPlayer() ? source.scene.getPlayerField() : source.scene.getEnemyField(); + + for (const pokemon of party) { + // Apply the CHARGED tag to party members with the WIND_POWER ability + if (pokemon.hasAbility(Abilities.WIND_POWER) && !pokemon.getTag(BattlerTagType.CHARGED)) { + pokemon.addTag(BattlerTagType.CHARGED); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:windPowerCharged", { pokemonName: pokemon.name, moveName: this.getMoveName() })); + } + // Raise attack by one stage if party member has WIND_RIDER ability + if (pokemon.hasAbility(Abilities.WIND_RIDER)) { + pokemon.scene.unshiftPhase(new ShowAbilityPhase(pokemon.scene, pokemon.getBattlerIndex())); + pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [BattleStat.ATK], 1, true)); + } + } } onRemove(arena: Arena): void { diff --git a/src/locales/de/ability-trigger.ts b/src/locales/de/ability-trigger.ts index da8ef3f7ab0..07853233a01 100644 --- a/src/locales/de/ability-trigger.ts +++ b/src/locales/de/ability-trigger.ts @@ -3,4 +3,5 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const abilityTriggers: SimpleTranslationEntries = { "blockRecoilDamage" : "{{pokemonName}} wurde durch {{abilityName}}\nvor Rückstoß geschützt!", "badDreams": "{{pokemonName}} ist in einem Alptraum gefangen!", + "windPowerCharged": "Being hit by {{moveName}} charged {{pokemonName}} with power!", } as const; diff --git a/src/locales/en/ability-trigger.ts b/src/locales/en/ability-trigger.ts index e7542eee4e3..36aee70de47 100644 --- a/src/locales/en/ability-trigger.ts +++ b/src/locales/en/ability-trigger.ts @@ -3,5 +3,6 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const abilityTriggers: SimpleTranslationEntries = { "blockRecoilDamage" : "{{pokemonName}}'s {{abilityName}}\nprotected it from recoil!", "badDreams": "{{pokemonName}} is tormented!", + "windPowerCharged": "Being hit by {{moveName}} charged {{pokemonName}} with power!", "perishBody": "{{pokemonName}}'s {{abilityName}}\n will faint both pokemon in 3 turns!", } as const; diff --git a/src/locales/es/ability-trigger.ts b/src/locales/es/ability-trigger.ts index bc6a9d4678a..594a67628e8 100644 --- a/src/locales/es/ability-trigger.ts +++ b/src/locales/es/ability-trigger.ts @@ -2,5 +2,6 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const abilityTriggers: SimpleTranslationEntries = { "blockRecoilDamage" : "¡{{abilityName}} de {{pokemonName}}\nlo protegió del daño de retroceso!", - "badDreams": "¡{{pokemonName}} está atormentado!" + "badDreams": "¡{{pokemonName}} está atormentado!", + "windPowerCharged": "¡{{pokemonName}} se ha cargado de electricidad gracias a {{moveName}}!", } as const; diff --git a/src/locales/fr/ability-trigger.ts b/src/locales/fr/ability-trigger.ts index c350a127fa9..eb450117238 100644 --- a/src/locales/fr/ability-trigger.ts +++ b/src/locales/fr/ability-trigger.ts @@ -2,5 +2,6 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const abilityTriggers: SimpleTranslationEntries = { "blockRecoilDamage" : "{{abilityName}}\nde {{pokemonName}} le protège du contrecoup !", - "badDreams": "{{pokemonName}} a le sommeil agité !" + "badDreams": "{{pokemonName}} a le sommeil agité !", + "windPowerCharged": "{{pokemonName}} a été touché par la capacité {{moveName}} et se charge en électricité !" } as const; diff --git a/src/locales/it/ability-trigger.ts b/src/locales/it/ability-trigger.ts index 599235e6195..61053896c49 100644 --- a/src/locales/it/ability-trigger.ts +++ b/src/locales/it/ability-trigger.ts @@ -3,4 +3,5 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const abilityTriggers: SimpleTranslationEntries = { "blockRecoilDamage" : "{{abilityName}} di {{pokemonName}}\nl'ha protetto dal contraccolpo!", "badDreams": "{{pokemonName}} è tormentato!", + "windPowerCharged": "Being hit by {{moveName}} charged {{pokemonName}} with power!", } as const; diff --git a/src/locales/pt_BR/ability-trigger.ts b/src/locales/pt_BR/ability-trigger.ts index 8851c885157..6e7dd96646a 100644 --- a/src/locales/pt_BR/ability-trigger.ts +++ b/src/locales/pt_BR/ability-trigger.ts @@ -3,4 +3,5 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const abilityTriggers: SimpleTranslationEntries = { "blockRecoilDamage" : "{{abilityName}} de {{pokemonName}}\nprotegeu-o do dano de recuo!", "badDreams": "{{pokemonName}} está tendo pesadelos!", + "windPowerCharged": "Being hit by {{moveName}} charged {{pokemonName}} with power!" } as const; diff --git a/src/locales/zh_CN/ability-trigger.ts b/src/locales/zh_CN/ability-trigger.ts index c8d4a2f6ee2..643952ad352 100644 --- a/src/locales/zh_CN/ability-trigger.ts +++ b/src/locales/zh_CN/ability-trigger.ts @@ -2,5 +2,6 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const abilityTriggers: SimpleTranslationEntries = { "blockRecoilDamage" : "{{pokemonName}} 的 {{abilityName}}\n抵消了反作用力!", - "badDreams": "{{pokemonName}} 被折磨着!" + "badDreams": "{{pokemonName}} 被折磨着!", + "windPowerCharged": "受 {{moveName}} 的影响, {{pokemonName}} 提升了能力!" } as const; diff --git a/src/locales/zh_TW/ability-trigger.ts b/src/locales/zh_TW/ability-trigger.ts index 6c8f4bc4512..1d9a3446785 100644 --- a/src/locales/zh_TW/ability-trigger.ts +++ b/src/locales/zh_TW/ability-trigger.ts @@ -3,4 +3,5 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const abilityTriggers: SimpleTranslationEntries = { "blockRecoilDamage" : "{{pokemonName}} 的 {{abilityName}}\n抵消了反作用力!", "badDreams": "{{pokemonName}} 被折磨着!", + "windPowerCharged": "Being hit by {{moveName}} charged {{pokemonName}} with power!" } as const; From bda3013c19cea0a1522cb088e6acc3850657b445 Mon Sep 17 00:00:00 2001 From: dielle000 <168655502+dielle000@users.noreply.github.com> Date: Thu, 30 May 2024 23:58:10 +0200 Subject: [PATCH 10/39] Allow selection of item quantity when transferring items (fixes #723) (#1394) * Transferring item does not kick out of transfer menu * Select simultaneously the item to transfer and the quantity * eslint fix * eslint fix * Reset quantity on scroll * Documentation * eslint fix --- src/battle-scene.ts | 25 ++++++++++++--- src/data/ability.ts | 6 ++-- src/data/move.ts | 4 +-- src/field/pokemon.ts | 2 +- src/modifier/modifier.ts | 2 +- src/phases.ts | 12 +++----- src/ui/party-ui-handler.ts | 63 ++++++++++++++++++++++++++++++++------ 7 files changed, 86 insertions(+), 28 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 01b7c3949f7..82bb3d92b0c 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1876,7 +1876,20 @@ export default class BattleScene extends SceneBase { }); } - tryTransferHeldItemModifier(itemModifier: PokemonHeldItemModifier, target: Pokemon, transferStack: boolean, playSound: boolean, instant?: boolean, ignoreUpdate?: boolean): Promise { + /** + * Try to transfer a held item to another pokemon. + * If the recepient already has the maximum amount allowed for this item, the transfer is cancelled. + * The quantity to transfer is automatically capped at how much the recepient can take before reaching the maximum stack size for the item. + * A transfer that moves a quantity smaller than what is specified in the transferQuantity parameter is still considered successful. + * @param itemModifier {@linkcode PokemonHeldItemModifier} item to transfer (represents the whole stack) + * @param target {@linkcode Pokemon} pokemon recepient in this transfer + * @param playSound {boolean} + * @param transferQuantity {@linkcode integer} how many items of the stack to transfer. Optional, defaults to 1 + * @param instant {boolean} + * @param ignoreUpdate {boolean} + * @returns true if the transfer was successful + */ + tryTransferHeldItemModifier(itemModifier: PokemonHeldItemModifier, target: Pokemon, playSound: boolean, transferQuantity: integer = 1, instant?: boolean, ignoreUpdate?: boolean): Promise { return new Promise(resolve => { const source = itemModifier.pokemonId ? itemModifier.getPokemon(target.scene) : null; const cancelled = new Utils.BooleanHolder(false); @@ -1894,14 +1907,16 @@ export default class BattleScene extends SceneBase { if (matchingModifier.stackCount >= maxStackCount) { return resolve(false); } - const countTaken = transferStack ? Math.min(itemModifier.stackCount, maxStackCount - matchingModifier.stackCount) : 1; + const countTaken = Math.min(transferQuantity, itemModifier.stackCount, maxStackCount - matchingModifier.stackCount); itemModifier.stackCount -= countTaken; newItemModifier.stackCount = matchingModifier.stackCount + countTaken; removeOld = !itemModifier.stackCount; - } else if (!transferStack) { - newItemModifier.stackCount = 1; - removeOld = !(--itemModifier.stackCount); + } else { + const countTaken = Math.min(transferQuantity, itemModifier.stackCount); + itemModifier.stackCount -= countTaken; + newItemModifier.stackCount = countTaken; } + removeOld = !itemModifier.stackCount; if (!removeOld || !source || this.removeModifier(itemModifier, !source.isPlayer())) { const addModifier = () => { if (!matchingModifier || this.removeModifier(matchingModifier, !target.isPlayer())) { diff --git a/src/data/ability.ts b/src/data/ability.ts index bef81a0220f..502c72dbd92 100755 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -1229,7 +1229,7 @@ export class PostAttackStealHeldItemAbAttr extends PostAttackAbAttr { const heldItems = this.getTargetHeldItems(defender).filter(i => i.getTransferrable(false)); if (heldItems.length) { const stolenItem = heldItems[pokemon.randSeedInt(heldItems.length)]; - pokemon.scene.tryTransferHeldItemModifier(stolenItem, pokemon, false, false).then(success => { + pokemon.scene.tryTransferHeldItemModifier(stolenItem, pokemon, false).then(success => { if (success) { pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` stole\n${defender.name}'s ${stolenItem.type.name}!`)); } @@ -1318,7 +1318,7 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { const heldItems = this.getTargetHeldItems(attacker).filter(i => i.getTransferrable(false)); if (heldItems.length) { const stolenItem = heldItems[pokemon.randSeedInt(heldItems.length)]; - pokemon.scene.tryTransferHeldItemModifier(stolenItem, pokemon, false, false).then(success => { + pokemon.scene.tryTransferHeldItemModifier(stolenItem, pokemon, false).then(success => { if (success) { pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` stole\n${attacker.name}'s ${stolenItem.type.name}!`)); } @@ -2873,7 +2873,7 @@ export class PostBattleLootAbAttr extends PostBattleAbAttr { const postBattleLoot = pokemon.scene.currentBattle.postBattleLoot; if (postBattleLoot.length) { const randItem = Utils.randSeedItem(postBattleLoot); - if (pokemon.scene.tryTransferHeldItemModifier(randItem, pokemon, false, true, true)) { + if (pokemon.scene.tryTransferHeldItemModifier(randItem, pokemon, true, 1, true)) { postBattleLoot.splice(postBattleLoot.indexOf(randItem), 1); pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` picked up\n${randItem.type.name}!`)); return true; diff --git a/src/data/move.ts b/src/data/move.ts index e20768c69e9..5594a45c195 100755 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1445,7 +1445,7 @@ export class StealHeldItemChanceAttr extends MoveEffectAttr { const highestItemTier = heldItems.map(m => m.type.getOrInferTier(poolType)).reduce((highestTier, tier) => Math.max(tier, highestTier), 0); const tierHeldItems = heldItems.filter(m => m.type.getOrInferTier(poolType) === highestItemTier); const stolenItem = tierHeldItems[user.randSeedInt(tierHeldItems.length)]; - user.scene.tryTransferHeldItemModifier(stolenItem, user, false, false).then(success => { + user.scene.tryTransferHeldItemModifier(stolenItem, user, false).then(success => { if (success) { user.scene.queueMessage(getPokemonMessage(user, ` stole\n${target.name}'s ${stolenItem.type.name}!`)); } @@ -1494,7 +1494,7 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { const highestItemTier = heldItems.map(m => m.type.getOrInferTier(poolType)).reduce((highestTier, tier) => Math.max(tier, highestTier), 0); const tierHeldItems = heldItems.filter(m => m.type.getOrInferTier(poolType) === highestItemTier); const stolenItem = tierHeldItems[user.randSeedInt(tierHeldItems.length)]; - user.scene.tryTransferHeldItemModifier(stolenItem, user, false, false).then(success => { + user.scene.tryTransferHeldItemModifier(stolenItem, user, false).then(success => { if (success) { user.scene.queueMessage(getPokemonMessage(user, ` knocked off\n${target.name}'s ${stolenItem.type.name}!`)); } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index c8aaeeaccfd..2ff53249aeb 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3189,7 +3189,7 @@ export class PlayerPokemon extends Pokemon { && (m as PokemonHeldItemModifier).pokemonId === pokemon.id, true) as PokemonHeldItemModifier[]; const transferModifiers: Promise[] = []; for (const modifier of fusedPartyMemberHeldModifiers) { - transferModifiers.push(this.scene.tryTransferHeldItemModifier(modifier, this, true, false, true, true)); + transferModifiers.push(this.scene.tryTransferHeldItemModifier(modifier, this, false, modifier.getStackCount(), true, true)); } Promise.allSettled(transferModifiers).then(() => { this.scene.updateModifiers(true, true).then(() => { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 233a5294849..9035eeda9dd 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1868,7 +1868,7 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { } const randItemIndex = pokemon.randSeedInt(itemModifiers.length); const randItem = itemModifiers[randItemIndex]; - heldItemTransferPromises.push(pokemon.scene.tryTransferHeldItemModifier(randItem, pokemon, false, false).then(success => { + heldItemTransferPromises.push(pokemon.scene.tryTransferHeldItemModifier(randItem, pokemon, false).then(success => { if (success) { transferredModifierTypes.push(randItem.type); itemModifiers.splice(randItemIndex, 1); diff --git a/src/phases.ts b/src/phases.ts index dd272cb28ca..7e3202e43b2 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -1513,7 +1513,7 @@ export class SwitchSummonPhase extends SummonPhase { const batonPassModifier = this.scene.findModifier(m => m instanceof SwitchEffectTransferModifier && (m as SwitchEffectTransferModifier).pokemonId === this.lastPokemon.id) as SwitchEffectTransferModifier; if (batonPassModifier && !this.scene.findModifier(m => m instanceof SwitchEffectTransferModifier && (m as SwitchEffectTransferModifier).pokemonId === switchedPokemon.id)) { - this.scene.tryTransferHeldItemModifier(batonPassModifier, switchedPokemon, false, false); + this.scene.tryTransferHeldItemModifier(batonPassModifier, switchedPokemon, false); } } } @@ -4895,14 +4895,12 @@ export class SelectModifierPhase extends BattlePhase { this.scene.playSound("buy"); } } else if (cursor === 1) { - this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.MODIFIER_TRANSFER, -1, (fromSlotIndex: integer, itemIndex: integer, toSlotIndex: integer) => { + this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.MODIFIER_TRANSFER, -1, (fromSlotIndex: integer, itemIndex: integer, itemQuantity: integer, toSlotIndex: integer) => { if (toSlotIndex !== undefined && fromSlotIndex < 6 && toSlotIndex < 6 && fromSlotIndex !== toSlotIndex && itemIndex > -1) { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers)).then(() => { - const itemModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + const itemModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).getTransferrable(true) && (m as PokemonHeldItemModifier).pokemonId === party[fromSlotIndex].id) as PokemonHeldItemModifier[]; - const itemModifier = itemModifiers[itemIndex]; - this.scene.tryTransferHeldItemModifier(itemModifier, party[toSlotIndex], true, true); - }); + const itemModifier = itemModifiers[itemIndex]; + this.scene.tryTransferHeldItemModifier(itemModifier, party[toSlotIndex], true, itemQuantity); } else { this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers)); } diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index cc5fe54818b..b62242e3c18 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -57,7 +57,7 @@ export enum PartyOption { } export type PartySelectCallback = (cursor: integer, option: PartyOption) => void; -export type PartyModifierTransferSelectCallback = (fromCursor: integer, index: integer, toCursor?: integer) => void; +export type PartyModifierTransferSelectCallback = (fromCursor: integer, index: integer, itemQuantity?: integer, toCursor?: integer) => void; export type PartyModifierSpliceSelectCallback = (fromCursor: integer, toCursor?: integer) => void; export type PokemonSelectFilter = (pokemon: PlayerPokemon) => string; export type PokemonModifierTransferSelectFilter = (pokemon: PlayerPokemon, modifier: PokemonHeldItemModifier) => string; @@ -87,6 +87,10 @@ export default class PartyUiHandler extends MessageUiHandler { private transferMode: boolean; private transferOptionCursor: integer; private transferCursor: integer; + /** Current quantity selection for every item held by the pokemon selected for the transfer */ + private transferQuantities: integer[]; + /** Stack size of every item that the selected pokemon is holding */ + private transferQuantitiesMax: integer[]; private lastCursor: integer = 0; private selectCallback: PartySelectCallback | PartyModifierTransferSelectCallback; @@ -231,8 +235,8 @@ export default class PartyUiHandler extends MessageUiHandler { let success = false; if (this.optionsMode) { + const option = this.options[this.optionsCursor]; if (button === Button.ACTION) { - const option = this.options[this.optionsCursor]; const pokemon = this.scene.getParty()[this.cursor]; if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && !this.transferMode && option !== PartyOption.CANCEL) { this.startTransfer(); @@ -270,7 +274,9 @@ export default class PartyUiHandler extends MessageUiHandler { } if (this.selectCallback) { if (option === PartyOption.TRANSFER) { - (this.selectCallback as PartyModifierTransferSelectCallback)(this.transferCursor, this.transferOptionCursor, this.cursor); + if (this.transferCursor !== this.cursor) { + (this.selectCallback as PartyModifierTransferSelectCallback)(this.transferCursor, this.transferOptionCursor, this.transferQuantities[this.transferOptionCursor], this.cursor); + } this.clearTransfer(); } else if (this.partyUiMode === PartyUiMode.SPLICE) { if (option === PartyOption.SPLICE) { @@ -369,17 +375,50 @@ export default class PartyUiHandler extends MessageUiHandler { return true; } else { switch (button) { + case Button.LEFT: + /** Decrease quantity for the current item and update UI */ + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + this.transferQuantities[option] = this.transferQuantities[option] === 1 ? this.transferQuantitiesMax[option] : this.transferQuantities[option] - 1; + this.updateOptions(); + success = this.setCursor(this.optionsCursor); /** Place again the cursor at the same position. Necessary, otherwise the cursor disappears */ + } + break; + case Button.RIGHT: + /** Increase quantity for the current item and update UI */ + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + this.transferQuantities[option] = this.transferQuantities[option] === this.transferQuantitiesMax[option] ? 1 : this.transferQuantities[option] + 1; + this.updateOptions(); + success = this.setCursor(this.optionsCursor); /** Place again the cursor at the same position. Necessary, otherwise the cursor disappears */ + } + break; case Button.UP: - success = this.setCursor(this.optionsCursor ? this.optionsCursor - 1 : this.options.length - 1); + /** If currently selecting items to transfer, reset quantity selection */ + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + this.transferQuantities[option] = this.transferQuantitiesMax[option]; + this.updateOptions(); + } + success = this.setCursor(this.optionsCursor ? this.optionsCursor - 1 : this.options.length - 1); /** Move cursor */ break; case Button.DOWN: - success = this.setCursor(this.optionsCursor < this.options.length - 1 ? this.optionsCursor + 1 : 0); + /** If currently selecting items to transfer, reset quantity selection */ + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + this.transferQuantities[option] = this.transferQuantitiesMax[option]; + this.updateOptions(); + } + success = this.setCursor(this.optionsCursor < this.options.length - 1 ? this.optionsCursor + 1 : 0); /** Move cursor */ break; } } } else { if (button === Button.ACTION) { if (this.cursor < 6) { + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && !this.transferMode) { + /** Initialize item quantities for the selected Pokemon */ + const itemModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + && (m as PokemonHeldItemModifier).getTransferrable(true) && (m as PokemonHeldItemModifier).pokemonId === this.scene.getParty()[this.cursor].id) as PokemonHeldItemModifier[]; + this.transferQuantities = itemModifiers.map(item => item.getStackCount()); + this.transferQuantitiesMax = itemModifiers.map(item => item.getStackCount()); + } this.showOptions(); ui.playSelect(); } else if (this.partyUiMode === PartyUiMode.FAINT_SWITCH || this.partyUiMode === PartyUiMode.REVIVAL_BLESSING) { @@ -555,7 +594,7 @@ export default class PartyUiHandler extends MessageUiHandler { break; case PartyUiMode.MODIFIER_TRANSFER: if (!this.transferMode) { - optionsMessage = "Select a held item to transfer."; + optionsMessage = "Select a held item to transfer.\nUse < and > to change the quantity."; } break; case PartyUiMode.SPLICE: @@ -569,7 +608,12 @@ export default class PartyUiHandler extends MessageUiHandler { this.updateOptions(); - this.partyMessageBox.setSize(262 - Math.max(this.optionsBg.displayWidth - 56, 0), 30); + /** When an item is being selected for transfer, the message box is taller as the message occupies two lines */ + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + this.partyMessageBox.setSize(262 - Math.max(this.optionsBg.displayWidth - 56, 0), 42); + } else { + this.partyMessageBox.setSize(262 - Math.max(this.optionsBg.displayWidth - 56, 0), 30); + } this.setCursor(0); } @@ -741,8 +785,9 @@ export default class PartyUiHandler extends MessageUiHandler { } else { const itemModifier = itemModifiers[option]; optionName = itemModifier.type.name; - if (itemModifier.stackCount > 1) { - optionName += ` (${itemModifier.stackCount})`; + /** For every item that has stack bigger than 1, display the current quantity selection */ + if (this.transferQuantitiesMax[option] > 1) { + optionName += ` (${this.transferQuantities[option]})`; } } From 7ac6016df345125061a82d752cab4d8abe45ee27 Mon Sep 17 00:00:00 2001 From: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Date: Fri, 31 May 2024 00:22:28 +0200 Subject: [PATCH 11/39] [Localization] Fixed Bugsy dialogue. And some fixes in the german dialogue (#1616) --- src/locales/de/dialogue.ts | 11 +++++------ src/locales/en/dialogue.ts | 3 +-- src/locales/es/dialogue.ts | 3 +-- src/locales/fr/dialogue.ts | 3 +-- src/locales/it/dialogue.ts | 3 +-- src/locales/ko/dialogue.ts | 3 +-- src/locales/pt_BR/dialogue.ts | 3 +-- src/locales/zh_CN/dialogue.ts | 3 +-- src/locales/zh_TW/dialogue.ts | 3 +-- 9 files changed, 13 insertions(+), 22 deletions(-) diff --git a/src/locales/de/dialogue.ts b/src/locales/de/dialogue.ts index cf3a2bf813d..6f02521569d 100644 --- a/src/locales/de/dialogue.ts +++ b/src/locales/de/dialogue.ts @@ -516,7 +516,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "victory": { 1: "Oh, es scheint, als hätte ich verloren.", - 2: "Es scheint, als hätte ich noch so viel mehr zu lernen, wenn es um den Kämpfe geht.", + 2: "Es scheint, als hätte ich noch so viel mehr zu lernen, wenn es um Kämpfe geht.", 3: "Ich werde mir zu Herzen nehmen, was ich heute gelernt habe." }, "defeat": { @@ -775,7 +775,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "marshal": { "encounter": { - 1: `Mein Mentor, Lauro, sieht sieht Potential in dir. Ich werde dich testen, + 1: `Mein Mentor, Lauro, sieht Potential in dir. Ich werde dich testen, $dich an die Grenzen deiner Stärke bringen. Kiai!`, 2: "Ein Sieg, ein entscheidender Sieg, das ist mein Ziel! Herausforderer, hier komme ich!", 3: "Ich selber suche die Stärke eines Kämpfers zu entwickeln und jede Schwäche in mir zu brechen!" @@ -930,7 +930,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "lacey": { "encounter": { - 1: "Ich werde dir mit meiner gewohnten Team, als Mitglied der Top Vier gegenüberstehen." + 1: "Ich werde dir mit meinem gewohnten Team, als Mitglied der Top Vier gegenüberstehen." }, "victory": { 1: "Das war ein großartiger Kampf!" @@ -1025,7 +1025,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "cress": { "encounter": { - 1: "Das ist korrekt! Ich und meine geschätzten Wasser-Typen werden deine Gegner im Kampf sein!" + 1: "Das ist korrekt! Ich und meine geschätzten Wasser-Pokémon werden deine Gegner im Kampf sein!" }, "victory": { 1: "Verlieren? Ich? Das glaube ich nicht." @@ -1234,8 +1234,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "bugsy": { "encounter": { - 1: `Wow, erstaunlich! Du bist ein Experte für Pokémon! - $Meine Forschung ist noch nicht abgeschlossen. OK, du gewinnst.`, + 1: "Ich bin Kai, der Arenaleiter von Azalea City. Ich bin ein großer Fan von Käfer-Pokémon.", }, "victory": { 1: `Wow, erstaunlich! Du bist ein Experte für Pokémon! diff --git a/src/locales/en/dialogue.ts b/src/locales/en/dialogue.ts index 0d716add4af..2712161b2bf 100644 --- a/src/locales/en/dialogue.ts +++ b/src/locales/en/dialogue.ts @@ -1203,8 +1203,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "bugsy": { "encounter": { - 1: `Whoa, amazing! You're an expert on Pokémon! - $My research isn't complete yet. OK, you win.`, + 1: "I'm Bugsy! I never lose when it comes to bug Pokémon!" }, "victory": { 1: "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win." diff --git a/src/locales/es/dialogue.ts b/src/locales/es/dialogue.ts index b9d6c3de832..6d74177f252 100644 --- a/src/locales/es/dialogue.ts +++ b/src/locales/es/dialogue.ts @@ -1203,8 +1203,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "bugsy": { "encounter": { - 1: `Whoa, amazing! You're an expert on Pokémon! - $My research isn't complete yet. OK, you win.`, + 1: "I'm Bugsy! I never lose when it comes to bug Pokémon!" }, "victory": { 1: "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win." diff --git a/src/locales/fr/dialogue.ts b/src/locales/fr/dialogue.ts index d816bc47cb7..746359b36cd 100644 --- a/src/locales/fr/dialogue.ts +++ b/src/locales/fr/dialogue.ts @@ -1203,8 +1203,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "bugsy": { "encounter": { - 1: `Whoa, amazing! You're an expert on Pokémon! - $My research isn't complete yet. OK, you win.`, + 1: "I'm Bugsy! I never lose when it comes to bug Pokémon!" }, "victory": { 1: "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win." diff --git a/src/locales/it/dialogue.ts b/src/locales/it/dialogue.ts index b9d6c3de832..6d74177f252 100644 --- a/src/locales/it/dialogue.ts +++ b/src/locales/it/dialogue.ts @@ -1203,8 +1203,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "bugsy": { "encounter": { - 1: `Whoa, amazing! You're an expert on Pokémon! - $My research isn't complete yet. OK, you win.`, + 1: "I'm Bugsy! I never lose when it comes to bug Pokémon!" }, "victory": { 1: "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win." diff --git a/src/locales/ko/dialogue.ts b/src/locales/ko/dialogue.ts index 25d6716a152..201581c0555 100644 --- a/src/locales/ko/dialogue.ts +++ b/src/locales/ko/dialogue.ts @@ -1203,8 +1203,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "bugsy": { "encounter": { - 1: `Whoa, amazing! You're an expert on Pokémon! - $My research isn't complete yet. OK, you win.`, + 1: "I'm Bugsy! I never lose when it comes to bug Pokémon!" }, "victory": { 1: "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win." diff --git a/src/locales/pt_BR/dialogue.ts b/src/locales/pt_BR/dialogue.ts index b9d6c3de832..6d74177f252 100644 --- a/src/locales/pt_BR/dialogue.ts +++ b/src/locales/pt_BR/dialogue.ts @@ -1203,8 +1203,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "bugsy": { "encounter": { - 1: `Whoa, amazing! You're an expert on Pokémon! - $My research isn't complete yet. OK, you win.`, + 1: "I'm Bugsy! I never lose when it comes to bug Pokémon!" }, "victory": { 1: "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win." diff --git a/src/locales/zh_CN/dialogue.ts b/src/locales/zh_CN/dialogue.ts index b9d6c3de832..6d74177f252 100644 --- a/src/locales/zh_CN/dialogue.ts +++ b/src/locales/zh_CN/dialogue.ts @@ -1203,8 +1203,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "bugsy": { "encounter": { - 1: `Whoa, amazing! You're an expert on Pokémon! - $My research isn't complete yet. OK, you win.`, + 1: "I'm Bugsy! I never lose when it comes to bug Pokémon!" }, "victory": { 1: "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win." diff --git a/src/locales/zh_TW/dialogue.ts b/src/locales/zh_TW/dialogue.ts index 764fec5a719..4e42f8f5833 100644 --- a/src/locales/zh_TW/dialogue.ts +++ b/src/locales/zh_TW/dialogue.ts @@ -1203,8 +1203,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "bugsy": { "encounter": { - 1: `Whoa, amazing! You're an expert on Pokémon! - $My research isn't complete yet. OK, you win.`, + 1: "I'm Bugsy! I never lose when it comes to bug Pokémon!" }, "victory": { 1: "Whoa, amazing! You're an expert on Pokémon!\nMy research isn't complete yet. OK, you win." From 3f6e43a12dfd7cb4ae487686a77e63e45a86b7c0 Mon Sep 17 00:00:00 2001 From: Ronn <12510911+zronn@users.noreply.github.com> Date: Fri, 31 May 2024 00:27:53 +0200 Subject: [PATCH 12/39] Starter select - Implement up and down offset navigation (#1480) * Handle offset up and down navigation * add comments --- src/ui/starter-select-ui-handler.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index c54bc1924b9..c739804609a 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1339,11 +1339,27 @@ export default class StarterSelectUiHandler extends MessageUiHandler { case Button.UP: if (row) { success = this.setCursor(this.cursor - 9); + } else { + // when strictly opposite starter based on rows length + // does not exits, set cursor on the second to last row + if (this.cursor + (rows - 1) * 9 > genStarters - 1) { + success = this.setCursor(this.cursor + (rows - 2) * 9); + } else { + success = this.setCursor(this.cursor + (rows - 1) * 9); + } } break; case Button.DOWN: if (row < rows - 2 || (row < rows - 1 && this.cursor % 9 <= (genStarters - 1) % 9)) { success = this.setCursor(this.cursor + 9); + } else { + // if there is no starter below while being on the second to + // last row, adjust cursor position with one line less + if (row === rows - 2 && this.cursor + 9 > genStarters - 1) { + success = this.setCursor(this.cursor - (rows - 2) * 9); + } else { + success = this.setCursor(this.cursor - (rows - 1) * 9); + } } break; case Button.LEFT: From af20712cb52dd78513cab138239163684617c56b Mon Sep 17 00:00:00 2001 From: HighMans <42877729+HighMans@users.noreply.github.com> Date: Thu, 30 May 2024 18:39:25 -0400 Subject: [PATCH 13/39] [Feature] Make 31IVs show up as Gold (#1380) * Make 31IVs show as gold on summary & when caught. * Add comments to change. --- src/ui/stats-container.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ui/stats-container.ts b/src/ui/stats-container.ts index 54c10e0d9dc..f5b88773dd8 100644 --- a/src/ui/stats-container.ts +++ b/src/ui/stats-container.ts @@ -68,7 +68,14 @@ export class StatsContainer extends Phaser.GameObjects.Container { this.statsIvsCache = ivChartData.slice(0); this.ivStatValueTexts.map((t: BBCodeText, i: integer) => { - let label = ivs[i].toString(); + let label = ""; + + // Check to see if IVs are 31, if so change the text style to gold, otherwise leave them be. + if (ivs[i] === 31) { + label += `[color=${getTextColor(TextStyle.SUMMARY_GOLD, false, (this.scene as BattleScene).uiTheme)}][shadow]${ivs[i].toString()}[/shadow][/color]`; + } else { + label = ivs[i].toString(); + } if (this.showDiff && originalIvs) { if (originalIvs[i] < ivs[i]) { label += ` ([color=${getTextColor(TextStyle.SUMMARY_BLUE, false, (this.scene as BattleScene).uiTheme)}][shadow=${getTextColor(TextStyle.SUMMARY_BLUE, true, (this.scene as BattleScene).uiTheme)}]+${ivs[i] - originalIvs[i]}[/shadow][/color])`; From d2c5a283d1cf1ab75fba2732fd07f771a952f217 Mon Sep 17 00:00:00 2001 From: Ethan <71776311+EvasiveAce@users.noreply.github.com> Date: Thu, 30 May 2024 18:58:40 -0400 Subject: [PATCH 14/39] [Ability] Implement Poison Heal (#1245) * Implement Poison Heal Ability * Removed unneeded import * Fix some comments, as well as make Poison Heal only notify when healing * Eslint fix * Revert Phases * Pushing for sake of reviewing; PR IS NOT DONE IT NEEDS TO BE TESTED AND COMMENTED AGAIN * Changed the way healing is done, through a heal phase instead of heal(); Also added better documentation * Changed healing, as well as making abilityTriggers updated --- src/data/ability.ts | 69 ++++++++++++++++++++++++++++++- src/locales/en/ability-trigger.ts | 3 +- 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 502c72dbd92..d2f76b6b1b5 100755 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -2069,6 +2069,37 @@ export class BlockNonDirectDamageAbAttr extends AbAttr { } } +/** + * This attribute will block any status damage that you put in the parameter. + */ +export class BlockStatusDamageAbAttr extends BlockNonDirectDamageAbAttr { + private effects: StatusEffect[]; + + /** + * @param {StatusEffect[]} effects The status effect(s) that will be blocked from damaging the ability pokemon + */ + constructor(...effects: StatusEffect[]) { + super(false); + + this.effects = effects; + } + + /** + * @param {Pokemon} pokemon The pokemon with the ability + * @param {boolean} passive N/A + * @param {Utils.BooleanHolder} cancelled Whether to cancel the status damage + * @param {any[]} args N/A + * @returns Returns true if status damage is blocked + */ + apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { + if (this.effects.includes(pokemon.status.effect)) { + cancelled.value = true; + return true; + } + return false; + } +} + export class BlockOneHitKOAbAttr extends AbAttr { apply(pokemon: Pokemon, passive: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { cancelled.value = true; @@ -2383,6 +2414,41 @@ export class PostTurnAbAttr extends AbAttr { } } +/** + * This attribute will heal 1/8th HP if the ability pokemon has the correct status. + */ +export class PostTurnStatusHealAbAttr extends PostTurnAbAttr { + private effects: StatusEffect[]; + + /** + * @param {StatusEffect[]} effects The status effect(s) that will qualify healing the ability pokemon + */ + constructor(...effects: StatusEffect[]) { + super(false); + + this.effects = effects; + } + + /** + * @param {Pokemon} pokemon The pokemon with the ability that will receive the healing + * @param {Boolean} passive N/A + * @param {any[]} args N/A + * @returns Returns true if healed from status, false if not + */ + applyPostTurn(pokemon: Pokemon, passive: boolean, args: any[]): boolean | Promise { + if (this.effects.includes(pokemon.status.effect)) { + if (pokemon.getMaxHp() !== pokemon.hp) { + const scene = pokemon.scene; + const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; + scene.unshiftPhase(new PokemonHealPhase(scene, pokemon.getBattlerIndex(), + Math.max(Math.floor(pokemon.getMaxHp() / 8), 1), i18next.t("abilityTriggers:poisonHeal", { pokemonName: pokemon.name, abilityName: abilityName}), true)); + return true; + } + } + return false; + } +} + /** * After the turn ends, resets the status of either the ability holder or their ally * @param {boolean} allyTarget Whether to target ally, defaults to false (self-target) @@ -3732,7 +3798,8 @@ export function initAbilities() { new Ability(Abilities.IRON_FIST, 4) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.PUNCHING_MOVE), 1.2), new Ability(Abilities.POISON_HEAL, 4) - .unimplemented(), + .attr(PostTurnStatusHealAbAttr, StatusEffect.TOXIC, StatusEffect.POISON) + .attr(BlockStatusDamageAbAttr, StatusEffect.TOXIC, StatusEffect.POISON), new Ability(Abilities.ADAPTABILITY, 4) .attr(StabBoostAbAttr), new Ability(Abilities.SKILL_LINK, 4) diff --git a/src/locales/en/ability-trigger.ts b/src/locales/en/ability-trigger.ts index 36aee70de47..b6e4c7c67fd 100644 --- a/src/locales/en/ability-trigger.ts +++ b/src/locales/en/ability-trigger.ts @@ -4,5 +4,6 @@ export const abilityTriggers: SimpleTranslationEntries = { "blockRecoilDamage" : "{{pokemonName}}'s {{abilityName}}\nprotected it from recoil!", "badDreams": "{{pokemonName}} is tormented!", "windPowerCharged": "Being hit by {{moveName}} charged {{pokemonName}} with power!", - "perishBody": "{{pokemonName}}'s {{abilityName}}\n will faint both pokemon in 3 turns!", + "perishBody": "{{pokemonName}}'s {{abilityName}}\nwill faint both pokemon in 3 turns!", + "poisonHeal": "{{pokemonName}}'s {{abilityName}}\nrestored its HP a little!" } as const; From 378ce9563634d2fa84762aaf5702e62c5f3ddeb7 Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Thu, 30 May 2024 20:05:38 -0500 Subject: [PATCH 15/39] [QoL] Add TypeDoc as a Valid Doc Generator (#1609) * Adds TypeDoc as a Valid Doc Generator Run `npm install typedoc --save-dev` then Run `npx typedoc` * Rename Revert * Add Script --- .gitignore | 3 +- package-lock.json | 100 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 +- tsconfig.json | 7 +++- 4 files changed, 111 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 55f9203a81d..548f44d3693 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,5 @@ src/data/battle-anim-raw-data*.ts src/data/battle-anim-data.ts src/overrides.ts -coverage \ No newline at end of file +coverage +/typedoc diff --git a/package-lock.json b/package-lock.json index b712d992276..0084d2e6022 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "lefthook": "^1.6.12", "phaser3spectorjs": "^0.0.8", "pokenode-ts": "^1.20.0", + "typedoc": "^0.25.13", "typescript": "^5.4.5", "typescript-eslint": "^7.10.0", "vite": "^4.5.0", @@ -1663,6 +1664,12 @@ "node": ">=8" } }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -4246,6 +4253,12 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, "node_modules/jsonify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", @@ -4557,6 +4570,12 @@ "yallist": "^3.0.2" } }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, "node_modules/magic-string": { "version": "0.30.10", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", @@ -4592,6 +4611,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -5676,6 +5707,18 @@ "node": ">=8" } }, + "node_modules/shiki": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", + "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "dev": true, + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -6151,6 +6194,51 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedoc": { + "version": "0.25.13", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", + "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==", + "dev": true, + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.7" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/typescript": { "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", @@ -7482,6 +7570,18 @@ } } }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", diff --git a/package.json b/package.json index a3b9a86e4eb..5d1621d3ba8 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "test:cov": "vitest run --coverage", "test:watch": "vitest watch --coverage", "eslint": "eslint --fix .", - "eslint-ci": "eslint ." + "eslint-ci": "eslint .", + "docs": "typedoc" }, "devDependencies": { "@eslint/js": "^9.3.0", @@ -29,6 +30,7 @@ "lefthook": "^1.6.12", "phaser3spectorjs": "^0.0.8", "pokenode-ts": "^1.20.0", + "typedoc": "^0.25.13", "typescript": "^5.4.5", "typescript-eslint": "^7.10.0", "vite": "^4.5.0", diff --git a/tsconfig.json b/tsconfig.json index ab6fd748bfc..3e8f300dd0c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,5 +16,10 @@ }, "outDir": "./build", "noEmit": true - } + }, + "typedocOptions": { + "entryPoints": ["src/"], + "entryPointStrategy": "expand", + "out": "typedoc", + } } \ No newline at end of file From 7a7971ec6c218923039eced5ebefd6f52431e863 Mon Sep 17 00:00:00 2001 From: Aerochill <114428473+Aerochill@users.noreply.github.com> Date: Thu, 30 May 2024 21:37:47 -0500 Subject: [PATCH 16/39] [Ability] Queenly Majesty/Dazzling/Armor Tail Fix (#1631) --- src/data/ability.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index d2f76b6b1b5..c95123df2aa 100755 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -501,7 +501,7 @@ export class FieldPriorityMoveImmunityAbAttr extends PreDefendAbAttr { applyMoveAttrs(IncrementMovePriorityAttr,attacker,null,move.getMove(),attackPriority); applyAbAttrs(IncrementMovePriorityAbAttr, attacker, null, move.getMove(), attackPriority); - if (move.getMove().moveTarget===MoveTarget.USER) { + if (move.getMove().moveTarget===MoveTarget.USER || move.getMove().moveTarget===MoveTarget.NEAR_ALLY) { return false; } From dfb089a2b9545d44699d4563ab7ac163efec01f2 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Fri, 31 May 2024 02:06:40 -0500 Subject: [PATCH 17/39] Fix Hero Palafin and 10% PC Zygarde using wrong cries Also marked Palafin as able to change forms, but this shouldn't affect it's functionality. --- public/audio/cry/718-10-pc.m4a | Bin 0 -> 15572 bytes src/data/pokemon-species.ts | 6 ++++-- 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 public/audio/cry/718-10-pc.m4a diff --git a/public/audio/cry/718-10-pc.m4a b/public/audio/cry/718-10-pc.m4a new file mode 100644 index 0000000000000000000000000000000000000000..3a7038ffb793f349a05632341f9c002fd5895e74 GIT binary patch literal 15572 zcmajG1yEeg)~L;(2^Ju@LxA8uxCM8DySohTnm}*}?iPX%gS$&`cPF?92=4F??>XoH z&i(3E-Bt5U`|4i1dw1{dT^j}lhS^s-U1#IxM(w;tMXyw@WF}Zq&jbCP)%1i`w)Y7;Nj+-0T|4$`?4shev8Nvf}OZ0O%R%0}mGL`kb3T z@htd75%vuU=(nF4Mm4^;1oUr~8)66_yFi}pEa(gts5TTMKYq~!|-!6B*vZA|!2g7zd1G0t4)AcM5q?(tsh z2uVRnI(f?A3ed1=1|d7RwU9+DZUCI4ohOMh)f2qdRM{WRWlW&=AT%|nXECk7!xQ~e zY0I3wb*@M2N5wO2=b!AbK!nh{#-5pr7X?yk=1FO`0hn3X=sTA!HZY>H27%gCzk5~`D+I6GxXrof|0Y{v*fgrHo3kUrRivkau#O8 zoEJ~u3kk<%U!O}E1P%nCAlaz5V_Ik=e>TBsjKzgPC| z%5nL{$~yO8xcNWJisf&hs?3wwTlfGOERV#b7DJ5W5u9|+%GKF=Qsca>Npps67D%7x zyk4v%2tu(=Ou0=zlsb#T|z2{rVWZbv-2Y{u5o8@_X6VgZF!@5oY=Aj2xef zj+3cCp=?GhwM+ufhV9y$fZ-rG9)NuZh6TYAw;(u$t{cek-Bx7@H}lHp)^A^ zB_G0uHGHwZcP+3V>{$<Pwx!MXqc}p zPKyp+d_(7ipIt|G$^GM0T3a#cHSFSWI?+r=Z_OX1ZjMo?8LT{A8QQj?N$&%M|KlV! z*69ck2SR{h%$1^#gCzDv*sWvK;$;?K4E*$jh%&>6n5KX?qr*S1n()fn>(XhOBrTFN zogycG8}jZmxPjjEy4SeZ%T-ve-T)hBQjKv@d%Lk_97*)r4}0Pt}mi)Qf?$s{2+bm-cZ)Y<0JSBs|wmA-es+)F%~$Br+RZdrX4 zaRjIVAy*))V0H(C)r)?-mLyHL^iuic`zF3o=`y9SJgaOF6y5n!-FO~-Nbkw)>Nb?Ta$ z_FNdstl{$5-8-DhM2MIQ@o@wICU~{A#MLP@6BEif+9|F^bbve%qVCBB5v_Q?%wDH& zf0D-;r%D)~!=WKv9~fd$JrLWWE*w8)>uxyuV3EGyy^0mmxF(lxx=>L zKB^-gVnAkKyyXpfoR#0&sUQ`6Vi+f#N?Hku>ZZ-=GIeYX@Ck@3D5!1nf=3A#Qr{t> zF->3CdzVFqye;~B=jSwm8+b-@JP+ktW~!RkR*qmX?R4T*@R4}Ixcz6DtYwK~uarOK zL`;O!pD+nPakyp51(eGZY9HL$4%lPeRJYgt^HYSLGMm*UNPhO2ec1!UeF4aGG2zgX zhKuE69EkJbjkTU$>}?)CIysk@gBNoh^1kB?GE{WD3{VOid^e8nXTF?AUbbDJisv1o z*>R63vZ)bTCZewkMP^2%-%XzaRt3oUe3zAtBsYjda8I_uOXaHvjGUV?xiH(Rx2xg{ zmgKq%Caz8ANM0u}{bi+L7)g;N!+`8F^`vIJXN}gWz0Qx9am2t%o7Ho}(9tE>B$?GM zP8nh`%hVsClaa`-o1PQ@MBCMQd_6QvX~VjQ7FK=4mUWFVs(v`Svh1~@#}8$#^bE-IXc(|TAWJ!{g6J^y#*zwflwi1<_a z%axsLiQ!ip;XOGlPmPh}zdC znlG;3P4WFfcM9@sQ*ZjS7Q@!$h*t^G*>a>^F3sz{CLXFUNq;sL|M172DTz7zHjs-) zROdkNYp}#G4Gb4+t-jRuOdT8eKhq=`If!i1! z#x#CCw~NsYhe4Uwf}*z^;f3db5S_g&BV@#_NX=Fz|SW|2q5w@Gww}C307u8Hu z%f}BL4lTpW)5#0@j%*Ax(mhKCCKi&v8t(-B4LuCB;}(yWmO%8Bm?9Ao-(Wir&(HR9 zYb_o6nz!M4z3V94ywdP@s-$uRI(hwk-xGIj+Q1>E74WrdF9r6Y=+o@kYdmyz;0~ z38uDp{NzUG7DS@&+*glx#l_yxzs09!EG(m1)d`XGNN{}+%9bK!tceBLs#2BxklQ#y zyv5s%#n0T=Q2zq@GK_X@W@0rWp~(1V5F_KF>hqL|L{##V++O1T4Y-OSZ^H~aTj>Bx zF`_>Qt30}mqum|ZZP~O`{w};N>L)01^0-9Y_G!yVwSf`CjnK0;!qrXs9;g!3ErBCR zr_TX6KOAd8Pa@D2TkJ>XRbg&F-gxRPcJoEY`brFk4qd&^O zN0{2XhWQk+q~WqmLFX;6DUdlgC2_=B?=D)bc1Au^<4vPJ3}1%&x%qN^^vCjOFFOXQ z%mvIkKo+{xODk52Uh(WP7YY0J6RN-_S`-&UUjB5Zm{W5-_2kFcv~?RO=!l=!lt)Q z|9!ZSF3tT~#rdjtzqWuM{~KgMJObCu0sdpE?d01gi!8fY>DKk`%sOjMQUTkOaPJ2B zr*YEndCfaTd{bLT$x{UxVRZ`VZ)Z=N>giF+r?!pVVd91g43l`~p_49jbq87r#flYS zG|gJaYi33@rLUIJ>*TOI2G3PIZ_1r#?os?acJMLe9&($eM@tuBC^Ee;)$T!1`F?>k zV4D?ua(>d~KxrkDcM_$>{%Z*#NFO;-O1mXRjb-NgmKCqud)TE8UrZh7$gd7g`vqUZ zd0T$2(eoUDk&&evCz4)R%&&NI7P@v^7GuiLlSMdzG2UI))iu{RULL0`7?8oC%DE$ zNOEmT(49S%T3wT&$0-ZAgCpBMZsIGV8vdq+%^#N}4@)q?HXO^1zyR)C$UzX$c&pIp z-r5-d>C;4mz1vk0qD_rT<*D2sc1JE$|I^j;uv7eZb?vyzn4f$~XG&^{9#+@}mEtqr z5*|)~%;D|8p~TC@4oTbEc{_<}`l_~-Kn2&j5HXGtQ;h0k#agt2Yd(MP3NP~*ryoNZ z6tRoOjkuUV^mQJ9G!U#osMsiarT3(MQN|Ixqc4tiaHp@oU0PPx|0GqU+5SDSYQ%+l zt+VU;_sCR9Jk54k^9878Uv1O0Htae(&BD#mDc5j9@!P@HP|c`URyx_lU*bJMaBbq? zWHPI3jbx+;Ndg#k`9K5PDCgjm&;PEU@$s=84iKDgIl`(L3j21fgx<}}!H@nF;&;Ns zf3ZHjZUy!OyFU{WaO|k~dCQZ@?elgJ#_elo96@|Uwrpa*=bDApRjN6MF_H5CG=MB> zOwP^FJyEc=SAxK*bwbqivYyqTibbFkkqx)Ow(0@TRd4Sy;@OTr9j{`>Arm#8LL!u6BBo(-k#*Muyqla@zu9 z&e3l<0ULe}Hn83E<8ZCnN}--tJf#basB91~K*cT3=$|KNa~xUIPxjY{pFO%9i~8iY zaAG8kt(@E$EUB+F!ko%MK;1U22FGXhIvFGE)467FG-sATIdtTdxG&K(iu$-fN@vEv zyS9V{PIL}g-K@UTA7V*e<@4?&=$^A`s`9FLVgRgR#g?q^dlBMg zSj+M*Y8FL8IHfQ_Yq)X?oS~T8t&wE20^@}w$GdYMDh)?@BC`2I>kN^b=LEh;)R#+N z<403a(Sr7RygrCF&MTdV+H}m<;BaH4(h+nN`$_n>RXQC-iv^iJ9c$p0tcFa4>uL{e z+iCj(<0N_TD_tc)tj9!$B@J&s@xEK4>UQpnaLe2bq>lktSx_N@!KaC*-;%3Pq%H3F;fUc%X#yJhibaI z?S4#d7#bKiSA4`)94Ju|jPnirL1YBo&vG%lM$3fCQ&^(R`C9*S`o>)w!ExQzUZ9 zbZIL0*4`tQTtYZAA8=Pq5O$^3Z}bcZsbc;*)hzY5b*X*p5;H?daG%2v(_|PjFMg-_ z^Q6(RbWqbZj7jQIy+XY^V|Z7szQWjRsZMZszoDV5aJZ-22t?eFf4&-Q-;?n^v$;JN z@BNCYf%cZ1jTo43Bw`J8Bwi~?j|AZ3qQBB_6pwVE)PQ`5s&b7Y?FSqe3RojaMw^V2Aln%z}&Xj5N3*1<8c)K_A2lFCX#~I;> zW_48xF)ZdBBM8&!SF;DnI}L+$*qf$m;(nCRBlIRWtO-2z-*V&0E7cb4lPHwGKdpWl zdcj+>lR4H}4YeN0J8O9Vf!$7OZJ!0;!i8vT8TNds8ni?7slyjOrof z^u)!YH>G&ox*2Roli4dyaa&tWYkf8+>dF_{ZaPPm0hg!a#D@3Y7IpdP_f;^M4=!`L zCM`()aCb}yP8c4->!KYT`YD-G-}ZA(9lLr@v;z{o!si4=BXtNZ?eUFUn@1}dr#0b@ z|EPG7*7Y~)y_fXudxt#q4fzi-Pjp12OY^+F_J&~;63?ejHnMd8z)Q9TFI0Pn6o|gK zO8D%JT$|058g5ALbZ7SYexMFJD=olS({_*jU`Q_+NQOafM?zb ztenS}r?#_Bq~|=?MwyDIW5uX+EX+?~%~gFakq?I|*0doUJwFy2us-IMrDrxH%H1u0UQBf ztTMFEs)CPHnQc7Gy}^(!YNAB_9-bo2+Mc~qtgKL@b69Iz5~VBvBXZp#d*^^ z!$@R0va)j7pLPPYu4&o)Vne#GdQUYCc-GZq5@h`h>Pj@N6=s2tFE5|D6LQvKPL$NY ztx`y2=F2D$cBCCZ3i>Mw#l#JrO#QAVdnFa(-R9#udFzG(srynR3wu6d#N{Wej;qsa zem~{MqH{LzArCKx2^@=bCHMZ@@A(Wvd9_Ym&t4f$BA(nWuT7Of_Kw?y4g)n@QQ{4y za~!@WK!b}x7l0nzdVRL*0hwvDH<8_9CezoAll{^mOTbtP z(ARvoR8jb44OZ^DvyIlEI1Md%iu5#hu(Q_Ke+JerqWCdV@*CY}dmR#r-`V#TCj2Bl z7i#nZ#$*WRdmF4)lt0X-siZx*Ee8le7byBAi=E^uEp&D_w?pi;}7K3Y|p*84cU$>SJ*<1x^HA zeq+wnS~!2XHqYln;J1R|&x__)>MSeuFn9aFSu$@E52@`4io0zdcFb4R2S`V8Ka0Pf z1VbkIa3c^(G1^WJ9YQNg+Dv`Lr>Re1CJVs|BmswHbqlObbz__AqG|3y#lpA)1A`5; zYI~D3r4Am183*HpwEfF611WAEEC|<-kx^F}ZMV=I(JyAFjMP*uaB{}Q2@gH>vnVoA zV(xwU@yv=X>2g^JR>$w~5SSiph^0l_!SjCd#Xznlb6j=0#AxVSA@pRDFl}F{+CF+Y zekMwWBr>rLZ1U5M=(u@30Dfa%DS9{7BAI21wW~+x7^|R`Dch3pX;CXQ zT5Mp4zPg{VNS}~6@1jQO>X#mNr$fI0-Py_mOa30CBB@dO9Pyl%v?;i>%(-dC=YM_i@UxCk{ywLWB>>V;)izBbQ`}Xrk(JK;SrS$ zC4U*i7`n-Y9-Lr+jDk1%xlx)2fo&?X&CT&S&O7nMjvs}UyPrtEJbA~rRjMZ|VG2!d zJShnA;}i3j^BSJ{IwJ*WgU(l7LYBZ^WhQzM$ z5=uDukqjwt+U1m>mN$vBf(vQiW{lASe^hM9g~>zf`L7R=&ZBOD`k#LGfht)W#c$^} zZ|I4#`*G=*^zIStO3>2N=-RYOmTyzH#p=^Atxa`R@=QiQWaq2g=40yR8R@nDv(Ex2 z6ACqoZX5*=ZCpHDusA!pxyeQPE;XL-eN%h>v}U%f6y)=b_SX9CA(F%7WP}(T--L_n zZ|l1b_DkSu^Hcfq4$d9MxSzY8G$Ej@>LG1O>y$0!+Q$NTU!fl@(u4YJ2*@LEJuda) zMDx-_NL?T?yWM`)Eisrj_*U=WqnNAAx_Gza`kX_@7cS<)2k|kiy--#l>%Xi9_HwF2 z`X<-cG_f9!GmyY1pfu^z2G7E|^x3yGIldx107))J^+McAv0RJ8!c*=37Re*0`$x4Sl5jHMo$iri>$BR3KzFH!67UFB#93!cur1gT4A&?NPd; z5i)|HM%jnFt-&d|(~ z)kXMu;4X@fqGIghm?eEjk|@}+FA9TypX=miLZIK7xp~`$d`3m+os}&}Umm59n~{HE z6o^bQeKpe#^q=kjuqFNAs(Dc(e{!E(uA1y3f&?(&Vsy)54OQ8y7@xBxmaheh9;uY= zF<+h>9v)S^Tp|vVsHVF0FYZV^>YlXO8~fInMx!iZJLll6SG&hww|W%Ld(D|=6}6NI zZ&nY-r5eaKc$UpGlz4e$F5VE_^rJOB>GT(^V-QM;DJX+G>0O*UbN^ZglA{@`Ie@a+4`yR5^T$8K;ROF$80dV zsFbu?JZ+s*F-tn3OB<8Api!uJyYEcX);9$z2W3o4NE=n4<;%kxguw`6_07flp~DP> z3e3K9MeqEc=oZnWM}j((zWyVjTFWoK4f`CfO^bwux`b64nn+o@tGIQ^7mrK5@h2r0 zoUG0A)H)D!^WlJ$RZA~OvR7bqt+pU$0?mI7W`DEPH z5i;7Q$2i;*Uu@I_AfcVG>#It8B?ibjrL@9@XaNj_q-lsdOz0H&8~P$|sU2w=gxbsYsBC zVu{{!-){KRIGE1Xv?-ZvujV(UIlOeZSuEg7D|hh0K9(0p6Muc0Owq)~T3Y^mv3~#w zAj-uEBtj#6TZXZ3*n6|jyhBCdFudhKC7&?<(kk|G!o|0`X}F2B!Lj+8w9B~7 z)xN4rqpU*Tkk;qmX;Aa3w2}B%D(0+2oaeF}^(J0Uh+^L?I~it_|JeO?HfV`!HDxPy z7>vW?>|b!zo>O+k5b$kxRUzcyNvBTgP^;wwp6m#BE*kP1^}57nD@iPY1(&qK_^h!m zhaD8DiN7U?n)Dp@_d5Nys1d~4c%1eZ+}bU+ni*?jP2N+sPFj=m;UUw_IXe!}H3a$~ z0vxpp9&RtVz10h%R zIb!?0**8+Ej^>}GG2OLLtSB!xM)HW>YMqc76&rjIbZt{>E~v2tm#y>#i$0Tt$xRV% z-{wBa`GsDeZn-&4GE3(8?R|8(+%F{#F3NY5-`Nj=UnL2>ue}&kmWHK-Y2_-N8XTmIMO87 zNI}ri+J0Pa10(wB{N2PRd$eud{g_w`%>}IywR>B~Zu}P2T4Q%l2&41U1DCq^Lze0X zwJ~o{2M8xxa@C3~Y_9F6l>W~xj_>opD}!9q!@@C#rKVHq^#3`Y_UD9 z4ENxO5|eW-<0D!NLilH-w|&OG@8-^Sm;cPzF^?W>r!WS9zNRVgqu4JTLRJWuY8_I| zyXgJBf?r=4FwGo`hRR;;_UGs+@C=u;Q?*75@-z{o^^``lj`y4!S9Pw}Z7wZQ&k0iR zJw~h96}0*6_>DGQ?Y6r+tIUzDOFac47bd(TWVVXEt$0}FO{tvGMzK86-XW(S`&j*h z4$CPCxs1Ra*k9H9yx0*7zC2NR{2A%KpZo;()oJ&7LHFw-i~hz{|EN^7rj>h(Ek!+| zYS1x)IY$zSrF}r?YM#mVCF+48XwdK|NByRQc&+?FgL%V5F{CbTDI#+rd6QulUz;v@ zZn>PTLn@#f$sh^|AOOA5+Z;nhZiHILQ(%vVa3t?7k4n;`8VO8=J|oYO@ido>Tv zb%z(k?zbmDNiw_!vNkYJ7Q1A03;FR)ANf6{jbI>p8bHa5)+i%UmfcvU~)>F=4BV z;C_*+IA|Pn(Pk-n#uHtkT|R5Z_TxhY5#QEC2`RDEn5N;Uua2$FO%~TlXXwzAIp!IV zWB8WNnvnUFkAs}q-l*Of-C22gsqP@S5y24YSB7%3a$E%tKeZ37{Msr}5zxMr8WlEs zUWX7+pP6n@77EzcE$JtdYTN7ZdKUQZOrQRnvg^IuK9=yVX^8+qA!Pi~bU8>&MfEi2 z?Oq}OD2T2JxDuX!62S1HgcjWe`dFp2;fLH4b;u4BNhBXh@j$UxHn4r@Fe1?rR51-kioWWiaLa~kCoPkxr%ztow)-ktn}9!4rc zmb-G2f{fdh3$%~AN~UJVZeWu{5dcsoznBq_=L%_HN2`%QZCbb|Xb_?={HXlj^)PY@*c|m-KqT1-N=o~E zX~wWK^&Q^^+DfO339>pyp|o`q_Fef_O+ zpM2H?(I4jT;v?EI4MGpNg(8lE{cxUX(s6P2y^7xTRjWrOrk08zNxo3;JImP!nD}il zD$PQ6;`7ba71lL!i65e)>WcaUBKG#G@sACTzFaWiuq1(Wn;nFff4Hj18p>0itbfID zjEZyb3oX;)w@KZfn{fnCLd_sC4i)`6Q9pOedv5^VqSDa=H#A@}$@XpkvG02+Z{Gr2 z>(*7!5G5NIg3^Ms)BO1LhywbOGmlins%%hQE+nU&I1JyEccEF}a8Zc{=XrIT_jZ>L zxf6rZ>fM;rd3RD^i+Ig7=0SuF%xT~4H{}Tb%EZU<)z>y3=W9z3r84pLY7(Bn*@Oi6 zX?m{OvFemBe`-rS_*#?w+r_TT>UipKmID@|S+b{>t&tsK$`B`e+ zPZ&VTMepe6iu`TX<@PjV>thBa#ojw2`63fo{SyqP^%}BiD1L~P9P`Y65bHC_gDh&a ze$LOMtf#5SWyPMb^h%vwz;k7j6>iVoCKBH|>T+1Y%y+T>g8;-%bQN}@{F zSg-+EqtF}7U8X0CsP59MS4p=8fubC1>gv3mCNJBTaR12qftw1KN$-UYp;mLXBZ7`baOsOZ-2wEyDEMZl^ z)TE&jXpEgjNYLXZ^Qd1*uxZPywuE{|Sxq1^>hIzyF5{?Vk?qGb9RjZejo`7z_x4Y= zMCrB?MsLSu5QK43x*ZlBp7n~eNFZlb!VwRQ@rI43CHKhEDnHJ;yE!c53t>w%b0;-% zg-jW|Y3k~ei#Gn$*8JT5s3NZI%oo@QN+GK?`05yB&0Mu=eUlY5&cE^1B}Y7KIYNK` z=>-GWf=+B7TyCool9dzrq+W>Luf7f-=AxzZd4t;|e5MacWkaom&sh!~4D7~lieUM+Y#=FIqN_v!B=SV!7tfpC>oi|_lU&eRL($EbfNhBd;8u$ z_-zP#dZmd^_5+99kGTSu^h`ca6$B~3{1u> zbtP&6^;IaH{}}DYPJ?{(#BK zr$!>>vh&j_TxpXO?bxY~!;h4=>3w-+i($^UZFJ!{uP23c?l=T>T@)QKj840=$ z1TB&dRx1ytMxh#He@9Eon7=gW@xEoLy>WVAL|HQzR16m+D}D}j*b;5Z8Rpv$rJBgy zIZ}}d`P_JD4>_)xx0iD5D-F0(TW|5eeu>?bLq-%i5tUWqrH${AuTw8zYmjBO#Wc<} zW=6%*>5u&kLMdiHubh(qYJOmUXP86$Q~Bhg(H>>$^VqJzii&LVO_An`tW~l% zb%k!rO;A+%OB`zZW@@yl!gr3{o5OOh+W7q#g$p5L8({Xg_XEt{zKQE}^wCM}kJ5=I0Htiy>Xe`;g z(u8N;GvzACaPl29_wu@U((^mP155PhNkkk%D_XLUf{~4(NxsMkUsPjs7cv8ZW0o}V z;qTeNBSU+_K(?#rz9Z?NVy(E+A6Us7F%B_tT~$=JX`a}QsYC@ldIg`_epaQ`%-K@P zAW+AEm-ia7?}pYWIwZ_FsvFzpA%?c#2S28xi5}0~o5Xr~ryIF7v}MUm{>02-QFF8a zySiO#q6jxh+t^s!Fqeyl+kbii+Z63x9tC-7F%356OGB9#hcZ_+7Up+D^6XTmm9+2_gYqe8JQ>Jr%%~d}!6}`; zu*>f##u(v~I=OD!W!5ZAx|=SQd@GbV<9zbc+bHm|Y_WtM-;_1&C&H#!Yf9qe*DzKm z;|Wpd+mV;4XcSTypyFlSs_crCtlaDAxWFCp@Ak?Y)OHRczrjAMQNA8;cat_PI83sa zbw3I>Ww+iZ7*O`1hQJ3N@yr4>8haTx)g_obes5XrstG??OiE?>T$Xeo%vv1i{@xYO zV%hLnQ!{zBosRLFWE|R0j4E;^;j7cora#Jm~tWk`fJ4Q99e{|`C zxSqsmuhh$^tJ#QKpCT~P@GS2qGQs!XzD||UNh2OTY$DcGoD)A90Y0GZsQ>YP?YZN{ zc8urr^g;e;K5Hu{bA(zJT%AvPzh19**}0bv~sfGv6XyGisBo1%1 z|Bwqf4O_`?QCSDQPhfE}QZ^{6VaE!GSJaKGH($%PYGq@ zw8twB=4ft%({FH)c^~NJ{=}*Mb8I*(x<`KL2L^Xxc*_ip8nspXL851w*1Msl_S}Y# z&O~ideqkJxB7ZPpL(7#O2AKQsKn>%wJ76wZz-^+?q-Cs{aqU68A41F_+ z6`{@V9$clu-9>wYjkf2d@TqJdWZsJ2#~V>q*%14Uyk3@_?G+q^(lsT#YW-g~B~$eG zu<0<@VlHfiXSd$*$Cu-0;oBpyYR?$@!O(8CpjoL-Qtr0iXC#I`@41#L2PF2>(=Q`b z(r&OD=J<2!Yl#)^@3&}v^ifix?7^*ms;l+OP%hl!{MZ(0zqvjfL8wb*ZYm2r9yNY zJF=8t6Sv}dnBUF6h7pM}R(^ncD_s(&@z&MYO&zB>t@(6av2E{cN0*6kHzIMWaP7%b ze2^&lIym9qj}9bBNO0oTVd>cD;qW~HMfK1}2eO#!mpkE?9Ea<>%-`qdXTvEOzIk{o zj?hts^`JUv4hZEF8y6W(dk~^1CTd733hqrYki?!U>+d1(8Q-OFiQP;vb@u(GZ)4av{q`P;T>2xu6X zbUx(6kyt&5BmNUjjq;=3j&Jq%aRN}YyWY%CfSM_lwp#fhBOBp}4k^W#dlAeA%E(S5 znUJN@zp|{Sau?WECYA$7!MP|gQ3X3plX z>96u?5~`cC9r?ffup%z5CU#K2jf<&qej}FL@^R=O`@*4h^0AMg)J zG6ba!$~crxC<{;~p)^5xP3wiS2&EOu9F%S-uX$^rbV2EZ(hp?>${3V(D9|_n6%-n% zKM6_#l-Kf=P-dXiLV4}XQ7EtFU+aIZ^R?_SlmRGHQ2vwt+J+V=ul098d9CX;&oq=@ zP+seQ)%Tk3wVo>|*HB({mOxpB@(5)U$`O>;@7dztK!!$lP#cMCUd@inf(6&fQ}53 literal 0 HcmV?d00001 diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index f59ed7bfaf2..7ea650832d6 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -387,9 +387,11 @@ export abstract class PokemonSpeciesForm { case "four": case "droopy": case "stretchy": + case "hero": case "roaming": case "complete": case "10": + case "10-pc": case "super": case "unbound": case "pau": @@ -2468,9 +2470,9 @@ export function initSpecies() { new PokemonSpecies(Species.WUGTRIO, 9, false, false, false, "Garden Eel Pokémon", Type.WATER, null, 1.2, 5.4, Abilities.GOOEY, Abilities.RATTLED, Abilities.SAND_VEIL, 425, 35, 100, 50, 50, 70, 120, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.BOMBIRDIER, 9, false, false, false, "Item Drop Pokémon", Type.FLYING, Type.DARK, 1.5, 42.9, Abilities.BIG_PECKS, Abilities.KEEN_EYE, Abilities.ROCKY_PAYLOAD, 485, 70, 103, 85, 60, 85, 82, 25, 50, 243, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.FINIZEN, 9, false, false, false, "Dolphin Pokémon", Type.WATER, null, 1.3, 60.2, Abilities.WATER_VEIL, Abilities.NONE, Abilities.NONE, 315, 70, 45, 40, 45, 40, 75, 200, 50, 63, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.PALAFIN, 9, false, false, false, "Dolphin Pokémon", Type.WATER, null, 1.3, 60.2, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.NONE, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, GrowthRate.SLOW, 50, false, false, + new PokemonSpecies(Species.PALAFIN, 9, false, false, false, "Dolphin Pokémon", Type.WATER, null, 1.3, 60.2, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.NONE, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, GrowthRate.SLOW, 50, false, true, new PokemonForm("Zero Form", "zero", Type.WATER, null, 1.3, 60.2, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, false, null, true), - new PokemonForm("Hero Form", "hero", Type.WATER, null, 1.8, 97.4, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 650, 100, 160, 97, 106, 87, 100, 45, 50, 160, false, null), + new PokemonForm("Hero Form", "hero", Type.WATER, null, 1.8, 97.4, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 650, 100, 160, 97, 106, 87, 100, 45, 50, 160), ), new PokemonSpecies(Species.VAROOM, 9, false, false, false, "Single-Cyl Pokémon", Type.STEEL, Type.POISON, 1, 35, Abilities.OVERCOAT, Abilities.NONE, Abilities.SLOW_START, 300, 45, 70, 63, 30, 45, 47, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.REVAVROOM, 9, false, false, false, "Multi-Cyl Pokémon", Type.STEEL, Type.POISON, 1.8, 120, Abilities.OVERCOAT, Abilities.NONE, Abilities.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), From f19cd37436df872b927a67fe02118036fc3aeaa1 Mon Sep 17 00:00:00 2001 From: zaccie Date: Fri, 31 May 2024 20:10:31 +1200 Subject: [PATCH 18/39] fix zacian/zamazenta crash (#1638) * fix zacian/zamazenta crash A quick fix by renaming Palafins forme change to hero-forme in code * fixing bad english i cant spell in my own language --- src/data/pokemon-species.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 7ea650832d6..f02f30c42b9 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -387,7 +387,7 @@ export abstract class PokemonSpeciesForm { case "four": case "droopy": case "stretchy": - case "hero": + case "hero-form": case "roaming": case "complete": case "10": @@ -2472,7 +2472,7 @@ export function initSpecies() { new PokemonSpecies(Species.FINIZEN, 9, false, false, false, "Dolphin Pokémon", Type.WATER, null, 1.3, 60.2, Abilities.WATER_VEIL, Abilities.NONE, Abilities.NONE, 315, 70, 45, 40, 45, 40, 75, 200, 50, 63, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.PALAFIN, 9, false, false, false, "Dolphin Pokémon", Type.WATER, null, 1.3, 60.2, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.NONE, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, GrowthRate.SLOW, 50, false, true, new PokemonForm("Zero Form", "zero", Type.WATER, null, 1.3, 60.2, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, false, null, true), - new PokemonForm("Hero Form", "hero", Type.WATER, null, 1.8, 97.4, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 650, 100, 160, 97, 106, 87, 100, 45, 50, 160), + new PokemonForm("Hero Form", "hero-form", Type.WATER, null, 1.8, 97.4, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 650, 100, 160, 97, 106, 87, 100, 45, 50, 160), ), new PokemonSpecies(Species.VAROOM, 9, false, false, false, "Single-Cyl Pokémon", Type.STEEL, Type.POISON, 1, 35, Abilities.OVERCOAT, Abilities.NONE, Abilities.SLOW_START, 300, 45, 70, 63, 30, 45, 47, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.REVAVROOM, 9, false, false, false, "Multi-Cyl Pokémon", Type.STEEL, Type.POISON, 1.8, 120, Abilities.OVERCOAT, Abilities.NONE, Abilities.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), From 7b65c519314c4036d5c8c68436e182e977033f4c Mon Sep 17 00:00:00 2001 From: Dakurei Date: Fri, 31 May 2024 14:29:54 +0200 Subject: [PATCH 19/39] Revert 2 last commits (#1646) --- public/audio/cry/718-10-pc.m4a | Bin 15572 -> 0 bytes src/data/pokemon-species.ts | 6 ++---- 2 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 public/audio/cry/718-10-pc.m4a diff --git a/public/audio/cry/718-10-pc.m4a b/public/audio/cry/718-10-pc.m4a deleted file mode 100644 index 3a7038ffb793f349a05632341f9c002fd5895e74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15572 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 diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index f02f30c42b9..f59ed7bfaf2 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -387,11 +387,9 @@ export abstract class PokemonSpeciesForm { case "four": case "droopy": case "stretchy": - case "hero-form": case "roaming": case "complete": case "10": - case "10-pc": case "super": case "unbound": case "pau": @@ -2470,9 +2468,9 @@ export function initSpecies() { new PokemonSpecies(Species.WUGTRIO, 9, false, false, false, "Garden Eel Pokémon", Type.WATER, null, 1.2, 5.4, Abilities.GOOEY, Abilities.RATTLED, Abilities.SAND_VEIL, 425, 35, 100, 50, 50, 70, 120, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.BOMBIRDIER, 9, false, false, false, "Item Drop Pokémon", Type.FLYING, Type.DARK, 1.5, 42.9, Abilities.BIG_PECKS, Abilities.KEEN_EYE, Abilities.ROCKY_PAYLOAD, 485, 70, 103, 85, 60, 85, 82, 25, 50, 243, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.FINIZEN, 9, false, false, false, "Dolphin Pokémon", Type.WATER, null, 1.3, 60.2, Abilities.WATER_VEIL, Abilities.NONE, Abilities.NONE, 315, 70, 45, 40, 45, 40, 75, 200, 50, 63, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.PALAFIN, 9, false, false, false, "Dolphin Pokémon", Type.WATER, null, 1.3, 60.2, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.NONE, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, GrowthRate.SLOW, 50, false, true, + new PokemonSpecies(Species.PALAFIN, 9, false, false, false, "Dolphin Pokémon", Type.WATER, null, 1.3, 60.2, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.NONE, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, GrowthRate.SLOW, 50, false, false, new PokemonForm("Zero Form", "zero", Type.WATER, null, 1.3, 60.2, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, false, null, true), - new PokemonForm("Hero Form", "hero-form", Type.WATER, null, 1.8, 97.4, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 650, 100, 160, 97, 106, 87, 100, 45, 50, 160), + new PokemonForm("Hero Form", "hero", Type.WATER, null, 1.8, 97.4, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 650, 100, 160, 97, 106, 87, 100, 45, 50, 160, false, null), ), new PokemonSpecies(Species.VAROOM, 9, false, false, false, "Single-Cyl Pokémon", Type.STEEL, Type.POISON, 1, 35, Abilities.OVERCOAT, Abilities.NONE, Abilities.SLOW_START, 300, 45, 70, 63, 30, 45, 47, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.REVAVROOM, 9, false, false, false, "Multi-Cyl Pokémon", Type.STEEL, Type.POISON, 1.8, 120, Abilities.OVERCOAT, Abilities.NONE, Abilities.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), From c102faf1570c4afd9b2d15eefef9eba330b63778 Mon Sep 17 00:00:00 2001 From: Adrian T <68144167+torranx@users.noreply.github.com> Date: Fri, 31 May 2024 21:12:01 +0800 Subject: [PATCH 20/39] fix lowkey toxtricity evolution (#1640) --- src/data/pokemon-species.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index f59ed7bfaf2..c52ef677fbf 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -2272,7 +2272,7 @@ export function initSpecies() { new PokemonSpecies(Species.TOXEL, 8, false, false, false, "Baby Pokémon", Type.ELECTRIC, Type.POISON, 0.4, 11, Abilities.RATTLED, Abilities.STATIC, Abilities.KLUTZ, 242, 40, 38, 35, 54, 35, 40, 75, 50, 48, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.TOXTRICITY, 8, false, false, false, "Punk Pokémon", Type.ELECTRIC, Type.POISON, 1.6, 40, Abilities.PUNK_ROCK, Abilities.PLUS, Abilities.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, GrowthRate.MEDIUM_SLOW, 50, false, true, new PokemonForm("Amped Form", "amped", Type.ELECTRIC, Type.POISON, 1.6, 40, Abilities.PUNK_ROCK, Abilities.PLUS, Abilities.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "", true), - new PokemonForm("Low-Key Form", "lowkey", Type.ELECTRIC, Type.POISON, 1.6, 40, Abilities.PUNK_ROCK, Abilities.MINUS, Abilities.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, true), + new PokemonForm("Low-Key Form", "lowkey", Type.ELECTRIC, Type.POISON, 1.6, 40, Abilities.PUNK_ROCK, Abilities.MINUS, Abilities.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "lowkey", true), new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.ELECTRIC, Type.POISON, 24, 40, Abilities.PUNK_ROCK, Abilities.MINUS, Abilities.TECHNICIAN, 602, 95, 118, 80, 144, 80, 85, 45, 50, 176), ), new PokemonSpecies(Species.SIZZLIPEDE, 8, false, false, false, "Radiator Pokémon", Type.FIRE, Type.BUG, 0.7, 1, Abilities.FLASH_FIRE, Abilities.WHITE_SMOKE, Abilities.FLAME_BODY, 305, 50, 65, 45, 50, 50, 45, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), From 92afcdea8f8cb89fa63f296d4053193a751fa8d2 Mon Sep 17 00:00:00 2001 From: Dakurei Date: Fri, 31 May 2024 15:36:59 +0200 Subject: [PATCH 21/39] Adds workflow to auto generate doc & make it accessible on Github (#1645) * Adds workflow to auto generate doc & make it accessible on Github * Adds a condition similar to deploy.yml + There's no particular reason to build the documentation for each fork, as it will simply be possible to synchronize the gh-pages branch via the interface or terminal --- .github/workflows/github-pages.yml | 64 ++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 .github/workflows/github-pages.yml diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml new file mode 100644 index 00000000000..a648f792b2b --- /dev/null +++ b/.github/workflows/github-pages.yml @@ -0,0 +1,64 @@ +name: "Github Pages" + +on: + push: + branches: + - main + +jobs: + pages: + name: Github Pages + if: github.repository == 'pagefaultgames/pokerogue' + runs-on: ubuntu-latest + env: + api-dir: ./ + + strategy: + fail-fast: false + + steps: + - name: Checkout repository for Typedoc + uses: actions/checkout@v3 + with: + path: pokerogue_docs + + - name: Install OS package + run: | + sudo apt update + sudo apt install -y git openssh-client + + - name: Setup Node 20.13.1 + uses: actions/setup-node@v1 + with: + node-version: 20 + + - name: Checkout repository for Github Pages + uses: actions/checkout@v3 + with: + path: pokerogue_gh + ref: gh-pages + + - name: Install Node.js dependencies + working-directory: ${{env.api-dir}} + run: | + cd pokerogue_docs + npm ci + npm install typedoc --save-dev + + - name: Generate Typedoc docs + working-directory: ${{env.api-dir}} + run: | + cd pokerogue_docs + npx typedoc --out /tmp/docs --githubPages false --entryPoints ./src/ + + - name: Commit & Push docs + run: | + cd pokerogue_gh + git config user.email "github-actions[bot]@users.noreply.github.com" + git config user.name "github-actions[bot]" + mkdir -p $GITHUB_REF_NAME + rm -rf $GITHUB_REF_NAME/* + cp -r /tmp/docs/. $GITHUB_REF_NAME + git add $GITHUB_REF_NAME + git commit --allow-empty -m "[skip ci] Deploy docs" + git push \ No newline at end of file From bb7af15c4a3c204c3e538077d366c688517c134d Mon Sep 17 00:00:00 2001 From: Adrian T <68144167+torranx@users.noreply.github.com> Date: Fri, 31 May 2024 22:23:28 +0800 Subject: [PATCH 22/39] [Move][Bug] Fix Enemy Fake Out and Force Switch Interaction (#1251) * fix force switch move * add check if switched out pokemon is not fainted with force switch move * improve code documentation * refactor if statement --- src/phases.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/phases.ts b/src/phases.ts index 7e3202e43b2..58bfb527e44 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -1548,11 +1548,16 @@ export class SwitchSummonPhase extends SummonPhase { super.onEnd(); const pokemon = this.getPokemon(); - const moveId = pokemon.scene.currentBattle.turnCommands[this.fieldIndex]?.move?.move; + + const moveId = this.lastPokemon?.scene.currentBattle.lastMove; const lastUsedMove = moveId ? allMoves[moveId] : undefined; + const currentCommand = pokemon.scene.currentBattle.turnCommands[this.fieldIndex]?.command; + const lastPokemonIsForceSwitchedAndNotFainted = !!lastUsedMove?.findAttr(attr => attr instanceof ForceSwitchOutAttr) && !this.lastPokemon.isFainted(); + // Compensate for turn spent summoning - if (pokemon.scene.currentBattle.turnCommands[this.fieldIndex]?.command === Command.POKEMON || !!lastUsedMove?.findAttr(attr => attr instanceof ForceSwitchOutAttr)) { //check if hard switch OR pivot move was used + // Or compensate for force switch move if switched out pokemon is not fainted + if (currentCommand === Command.POKEMON || lastPokemonIsForceSwitchedAndNotFainted) { pokemon.battleSummonData.turnCount--; } From 6c4b60a2faca4f52fd83808e1bd6c331aa98a2c3 Mon Sep 17 00:00:00 2001 From: Ethan <71776311+EvasiveAce@users.noreply.github.com> Date: Fri, 31 May 2024 10:31:15 -0400 Subject: [PATCH 23/39] [Bug] Full Heals and Full Restore cure confusion (#1112) * Added Confusion to be healed with Full Heals and Full Restores * Semi-Colon oversight * Changed resetStatus to have a condition whether to include confusion or not, defaults to false so you manually have to add * Fixed spacing and semicolon * Refactored the Lum Berry case * Fix berry conflicts * Update {} * Fix PP Conflict * Build fix? * Fix Modifier * Build Fix * Fix * Fix StatuHeal from eslint --- src/data/berry.ts | 7 ++----- src/field/pokemon.ts | 10 ++++++++-- src/modifier/modifier-type.ts | 5 +++-- src/modifier/modifier.ts | 17 +++++++---------- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/data/berry.ts b/src/data/berry.ts index e832ab0a43e..7c5ce477a95 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -94,12 +94,9 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { } if (pokemon.status) { pokemon.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect))); - pokemon.resetStatus(); - pokemon.updateInfo(); - } - if (pokemon.getTag(BattlerTagType.CONFUSED)) { - pokemon.lapseTag(BattlerTagType.CONFUSED); } + pokemon.resetStatus(true, true); + pokemon.updateInfo(); }; case BerryType.LIECHI: case BerryType.GANLON: diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 2ff53249aeb..e7fce386ddb 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2426,9 +2426,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Resets the status of a pokemon - * @param revive whether revive should be cured, defaults to true + * @param {boolean} revive Whether revive should be cured; defaults to true. + * @param {boolean} confusion Whether resetStatus should include confusion or not; defaults to false. */ - resetStatus(revive: boolean = true): void { + resetStatus(revive: boolean = true, confusion: boolean = false): void { const lastStatus = this.status?.effect; if (!revive && lastStatus === StatusEffect.FAINT) { return; @@ -2440,6 +2441,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.lapseTag(BattlerTagType.NIGHTMARE); } } + if (confusion) { + if (this.getTag(BattlerTagType.CONFUSED)) { + this.lapseTag(BattlerTagType.CONFUSED); + } + } } primeSummonData(summonDataPrimer: PokemonSummonData): void { diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index a26c8f634f7..a9f5e3642cf 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -21,6 +21,7 @@ import { ModifierTier } from "./modifier-tier"; import { Nature, getNatureName, getNatureStatMultiplier } from "#app/data/nature"; import i18next from "#app/plugins/i18n"; import { getModifierTierTextTint } from "#app/ui/text"; +import { BattlerTagType } from "#app/data/enums/battler-tag-type.js"; const outputModifierData = false; const useMaxWeightForOutput = false; @@ -230,7 +231,7 @@ export class PokemonHpRestoreModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string, restorePoints: integer, restorePercent: integer, healStatus: boolean = false, newModifierFunc?: NewModifierFunc, selectFilter?: PokemonSelectFilter, group?: string) { super(localeKey, iconImage, newModifierFunc || ((_type, args) => new Modifiers.PokemonHpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints, this.restorePercent, this.healStatus, false)), selectFilter || ((pokemon: PlayerPokemon) => { - if (!pokemon.hp || (pokemon.hp >= pokemon.getMaxHp() && (!this.healStatus || !pokemon.status))) { + if (!pokemon.hp || (pokemon.hp >= pokemon.getMaxHp() && (!this.healStatus || (!pokemon.status && !pokemon.getTag(BattlerTagType.CONFUSED))))) { return PartyUiHandler.NoEffectMessage; } return null; @@ -280,7 +281,7 @@ export class PokemonStatusHealModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string) { super(localeKey, iconImage, ((_type, args) => new Modifiers.PokemonStatusHealModifier(this, (args[0] as PlayerPokemon).id)), ((pokemon: PlayerPokemon) => { - if (!pokemon.hp || !pokemon.status) { + if (!pokemon.hp || (!pokemon.status && !pokemon.getTag(BattlerTagType.CONFUSED))) { return PartyUiHandler.NoEffectMessage; } return null; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 9035eeda9dd..379543f0ab2 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1057,16 +1057,14 @@ export class PokemonHpRestoreModifier extends ConsumablePokemonModifier { let restorePoints = this.restorePoints; if (!this.fainted) { restorePoints = Math.floor(restorePoints * (args[1] as number)); + if (this.fainted || this.healStatus) { + pokemon.resetStatus(true, true); + } + pokemon.hp = Math.min(pokemon.hp + Math.max(Math.ceil(Math.max(Math.floor((this.restorePercent * 0.01) * pokemon.getMaxHp()), restorePoints)), 1), pokemon.getMaxHp()); + return true; } - if (this.fainted || this.healStatus) { - pokemon.resetStatus(); - } - pokemon.hp = Math.min(pokemon.hp + Math.max(Math.ceil(Math.max(Math.floor((this.restorePercent * 0.01) * pokemon.getMaxHp()), restorePoints)), 1), pokemon.getMaxHp()); - - return true; + return false; } - - return false; } } @@ -1077,8 +1075,7 @@ export class PokemonStatusHealModifier extends ConsumablePokemonModifier { apply(args: any[]): boolean { const pokemon = args[0] as Pokemon; - pokemon.resetStatus(); - + pokemon.resetStatus(true, true); return true; } } From 7b5510b055e95cc35b7e956613152dba75aa0379 Mon Sep 17 00:00:00 2001 From: MrWaterT <87186129+MrWaterT@users.noreply.github.com> Date: Fri, 31 May 2024 23:33:25 +0900 Subject: [PATCH 24/39] [Localization] little edit in Korean locale text (#1636) * Update tutorial.ts statChange : 9b5c1cd starterSelect : fccd546 * Edit a misspell --- src/locales/ko/battle.ts | 2 +- src/locales/ko/tutorial.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/locales/ko/battle.ts b/src/locales/ko/battle.ts index 589ab51580e..dd98a1df5fa 100644 --- a/src/locales/ko/battle.ts +++ b/src/locales/ko/battle.ts @@ -15,7 +15,7 @@ export const battle: SimpleTranslationEntries = { "trainerDefeated": "{{trainerName}}과(와)의\n승부에서 이겼다!", "moneyWon": "상금으로\n₽{{moneyAmount}}을 손에 넣었다!", "pokemonCaught": "신난다-!\n{{pokemonName}}(를)을 잡았다!", - "partyFull": "지닌 포켓몬이 가득 찼습니다. {{pokemonName}}(를)\n대신해 포켓몬을 놓아주시겠습니까?", + "partyFull": "지닌 포켓몬이 가득 찼습니다. {{pokemonName}}를(을)\n대신해 포켓몬을 놓아주시겠습니까?", "pokemon": "포켓몬", "sendOutPokemon": "가랏! {{pokemonName}}!", "hitResultCriticalHit": "급소에 맞았다!", diff --git a/src/locales/ko/tutorial.ts b/src/locales/ko/tutorial.ts index 1a3a9bf8187..5056ef57dd3 100644 --- a/src/locales/ko/tutorial.ts +++ b/src/locales/ko/tutorial.ts @@ -12,7 +12,7 @@ export const tutorial: SimpleTranslationEntries = { $설정에서 게임 속도, 윈도우 스타일 및 기타 옵션을 변경할 수 있습니다. $여기에는 다양한 다른 기능도 있으니 꼭 확인해보세요!`, - starterSelect: `이 화면에서 스타팅을 선택할 수 있습니다.\n이들은 당신의 첫 번째 파티 멤버들입니다. + starterSelect: `이 화면에서 Z나 스페이스바로 스타팅을 선택할 수 있습니다.\n이들은 당신의 첫 번째 파티 멤버들입니다. $최대 6마리의 파티로 시작할 수 있지만\n포켓몬에 따라 코스트가 있어 총합 10을 넘겨선 안 됩니다. $계속 잡거나 부화시켜서\n선택할 수 있는 성별, 특성, 폼 등의 폭을 넓힐 수 있습니다. $개체값도 점점 누적되어 높아지므로,\n같은 포켓몬을 많이 잡아보세요!`, @@ -22,7 +22,8 @@ export const tutorial: SimpleTranslationEntries = { statChange: `포켓몬은 교체하지 않으면 다음 전투에서도 능력치 변화가 유지됩니다. $대신 트레이너 배틀이나 새로운 바이옴 입장 직전에 자동으로 들여보내지게 됩니다. - $C 또는 Shift를 꾹 눌러 현재 포켓몬의 능력치 변화를 볼 수도 있습니다.`, + $C 또는 Shift를 꾹 눌러 현재 포켓몬의 능력치 변화를 볼 수도 있습니다. + $V를 눌러 상대방이 사용했던 기술도 확인하여 전투를 유리하게 이끌어봅시다.`, selectItem: `전투가 끝날때마다 무작위 아이템 3개 중 하나를 선택하여 얻습니다. $종류는 소모품, 포켓몬의 지닌 도구, 영구적 패시브 아이템에 이르기까지 다양합니다. From 518293704089fe833f59f2c4397385e360493257 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Fri, 31 May 2024 16:34:26 +0200 Subject: [PATCH 25/39] [Localization] Add Korea type icons (#1649) * Add files via upload * Update utils.ts --- public/images/types_ko.json | 440 ++++++++++++++++++++++++++++++++++++ public/images/types_ko.png | Bin 0 -> 4110 bytes src/utils.ts | 1 + 3 files changed, 441 insertions(+) create mode 100644 public/images/types_ko.json create mode 100644 public/images/types_ko.png diff --git a/public/images/types_ko.json b/public/images/types_ko.json new file mode 100644 index 00000000000..2e240fa0d9b --- /dev/null +++ b/public/images/types_ko.json @@ -0,0 +1,440 @@ +{ + "textures": [ + { + "image": "types_ko.png", + "format": "RGBA8888", + "size": { + "w": 32, + "h": 280 + }, + "scale": 1, + "frames": [ + { + "filename": "unknown", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + } + }, + { + "filename": "bug", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 14, + "w": 32, + "h": 14 + } + }, + { + "filename": "dark", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 28, + "w": 32, + "h": 14 + } + }, + { + "filename": "dragon", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 42, + "w": 32, + "h": 14 + } + }, + { + "filename": "electric", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 56, + "w": 32, + "h": 14 + } + }, + { + "filename": "fairy", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 70, + "w": 32, + "h": 14 + } + }, + { + "filename": "fighting", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 84, + "w": 32, + "h": 14 + } + }, + { + "filename": "fire", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 98, + "w": 32, + "h": 14 + } + }, + { + "filename": "flying", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 112, + "w": 32, + "h": 14 + } + }, + { + "filename": "ghost", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 126, + "w": 32, + "h": 14 + } + }, + { + "filename": "grass", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 140, + "w": 32, + "h": 14 + } + }, + { + "filename": "ground", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 154, + "w": 32, + "h": 14 + } + }, + { + "filename": "ice", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 168, + "w": 32, + "h": 14 + } + }, + { + "filename": "normal", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 182, + "w": 32, + "h": 14 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 196, + "w": 32, + "h": 14 + } + }, + { + "filename": "psychic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 210, + "w": 32, + "h": 14 + } + }, + { + "filename": "rock", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 224, + "w": 32, + "h": 14 + } + }, + { + "filename": "steel", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 238, + "w": 32, + "h": 14 + } + }, + { + "filename": "water", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 252, + "w": 32, + "h": 14 + } + }, + { + "filename": "stellar", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 266, + "w": 32, + "h": 14 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:f14cf47d9a8f1d40c8e03aa6ba00fff3:6fc4227b57a95d429a1faad4280f7ec8:5961efbfbf4c56b8745347e7a663a32f$" + } +} diff --git a/public/images/types_ko.png b/public/images/types_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..53342ddd3ec76f7db06524779aa43757a67cb844 GIT binary patch literal 4110 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 literal 0 HcmV?d00001 diff --git a/src/utils.ts b/src/utils.ts index 14161908fd0..43ce73f1ddb 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -407,6 +407,7 @@ export function verifyLang(lang?: string): boolean { case "zh_CN": case "zh_TW": case "pt_BR": + case "ko": return true; default: return false; From 5c79e6258b45316a2a0550f2028446d61fb015d2 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Fri, 31 May 2024 16:39:13 +0200 Subject: [PATCH 26/39] [Localization] modifier-select-ui-handler Locales (#1567) * Update i18n.ts * Update modifier-select-ui-handler.ts * Update config.ts * Update config.ts * Update config.ts * Update config.ts * Update config.ts * Update config.ts * Update config.ts * Update config.ts * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Update modifier-select-ui-handler.ts * Update config.ts * Add files via upload * Update modifier-select-ui-handler.ts * Update modifier-select-ui-handler.ts * Update src/locales/ko/modifier-select-ui-handler.ts Co-authored-by: returntoice * Update src/locales/ko/modifier-select-ui-handler.ts Co-authored-by: returntoice * Update src/locales/ko/modifier-select-ui-handler.ts Co-authored-by: returntoice * Update src/locales/ko/modifier-select-ui-handler.ts Co-authored-by: returntoice * Update src/locales/ko/modifier-select-ui-handler.ts Co-authored-by: returntoice * Update modifier-select-ui-handler.ts --------- Co-authored-by: returntoice --- src/locales/de/config.ts | 4 ++- src/locales/de/modifier-select-ui-handler.ts | 12 +++++++++ src/locales/en/config.ts | 4 ++- src/locales/en/modifier-select-ui-handler.ts | 12 +++++++++ src/locales/es/config.ts | 4 ++- src/locales/es/modifier-select-ui-handler.ts | 12 +++++++++ src/locales/fr/config.ts | 4 ++- src/locales/fr/modifier-select-ui-handler.ts | 12 +++++++++ src/locales/it/config.ts | 4 ++- src/locales/it/modifier-select-ui-handler.ts | 12 +++++++++ src/locales/ko/config.ts | 5 ++-- src/locales/ko/modifier-select-ui-handler.ts | 12 +++++++++ src/locales/pt_BR/config.ts | 4 ++- .../pt_BR/modifier-select-ui-handler.ts | 12 +++++++++ src/locales/zh_CN/config.ts | 4 ++- .../zh_CN/modifier-select-ui-handler.ts | 12 +++++++++ src/locales/zh_TW/config.ts | 4 ++- .../zh_TW/modifier-select-ui-handler.ts | 12 +++++++++ src/plugins/i18n.ts | 1 + src/ui/modifier-select-ui-handler.ts | 26 +++++++++---------- 20 files changed, 148 insertions(+), 24 deletions(-) create mode 100644 src/locales/de/modifier-select-ui-handler.ts create mode 100644 src/locales/en/modifier-select-ui-handler.ts create mode 100644 src/locales/es/modifier-select-ui-handler.ts create mode 100644 src/locales/fr/modifier-select-ui-handler.ts create mode 100644 src/locales/it/modifier-select-ui-handler.ts create mode 100644 src/locales/ko/modifier-select-ui-handler.ts create mode 100644 src/locales/pt_BR/modifier-select-ui-handler.ts create mode 100644 src/locales/zh_CN/modifier-select-ui-handler.ts create mode 100644 src/locales/zh_TW/modifier-select-ui-handler.ts diff --git a/src/locales/de/config.ts b/src/locales/de/config.ts index 50cf09181fa..36fe8854e28 100644 --- a/src/locales/de/config.ts +++ b/src/locales/de/config.ts @@ -32,6 +32,7 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const deConfig = { ability: ability, @@ -69,5 +70,6 @@ export const deConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/de/modifier-select-ui-handler.ts b/src/locales/de/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..7f9bf45c197 --- /dev/null +++ b/src/locales/de/modifier-select-ui-handler.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Transfer", + "reroll": "Reroll", + "lockRarities": "Lock Rarities", + "transferDesc": "Transfer a held item from one Pokémon to another.", + "rerollDesc": "Spend money to reroll your item options.", + "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", + "rerollCost": "₽{{cost}}", + "itemCost": "₽{{cost}}" +} as const; diff --git a/src/locales/en/config.ts b/src/locales/en/config.ts index d01102bc3a4..a50ca747fcb 100644 --- a/src/locales/en/config.ts +++ b/src/locales/en/config.ts @@ -32,6 +32,7 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const enConfig = { ability: ability, @@ -69,5 +70,6 @@ export const enConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/en/modifier-select-ui-handler.ts b/src/locales/en/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..7f9bf45c197 --- /dev/null +++ b/src/locales/en/modifier-select-ui-handler.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Transfer", + "reroll": "Reroll", + "lockRarities": "Lock Rarities", + "transferDesc": "Transfer a held item from one Pokémon to another.", + "rerollDesc": "Spend money to reroll your item options.", + "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", + "rerollCost": "₽{{cost}}", + "itemCost": "₽{{cost}}" +} as const; diff --git a/src/locales/es/config.ts b/src/locales/es/config.ts index 2f33cd680ae..a12648b1833 100644 --- a/src/locales/es/config.ts +++ b/src/locales/es/config.ts @@ -32,6 +32,7 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const esConfig = { ability: ability, @@ -69,5 +70,6 @@ export const esConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/es/modifier-select-ui-handler.ts b/src/locales/es/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..7f9bf45c197 --- /dev/null +++ b/src/locales/es/modifier-select-ui-handler.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Transfer", + "reroll": "Reroll", + "lockRarities": "Lock Rarities", + "transferDesc": "Transfer a held item from one Pokémon to another.", + "rerollDesc": "Spend money to reroll your item options.", + "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", + "rerollCost": "₽{{cost}}", + "itemCost": "₽{{cost}}" +} as const; diff --git a/src/locales/fr/config.ts b/src/locales/fr/config.ts index f7f7201ddd7..a1176f3d12f 100644 --- a/src/locales/fr/config.ts +++ b/src/locales/fr/config.ts @@ -32,6 +32,7 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const frConfig = { ability: ability, @@ -69,5 +70,6 @@ export const frConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/fr/modifier-select-ui-handler.ts b/src/locales/fr/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..2c46233d594 --- /dev/null +++ b/src/locales/fr/modifier-select-ui-handler.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Transférer", + "reroll": "Relancer", + "lockRarities": "Bloquer la rareté", + "transferDesc": "Transférer un objet tenu par un Pokémon vers un autre.", + "rerollDesc": "Payer pour relancer les objets gratuits proposés.", + "lockRaritiesDesc": "La relance proposera des objets gratuits de rareté\négale ou supérieure. Affecte le cout de relance.", + "rerollCost": "{{cost}} ₽", + "itemCost": "{{cost}} ₽" +} as const; diff --git a/src/locales/it/config.ts b/src/locales/it/config.ts index 5f76e4d4205..b94880c6293 100644 --- a/src/locales/it/config.ts +++ b/src/locales/it/config.ts @@ -32,6 +32,7 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const itConfig = { ability: ability, @@ -69,5 +70,6 @@ export const itConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/it/modifier-select-ui-handler.ts b/src/locales/it/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..7f9bf45c197 --- /dev/null +++ b/src/locales/it/modifier-select-ui-handler.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Transfer", + "reroll": "Reroll", + "lockRarities": "Lock Rarities", + "transferDesc": "Transfer a held item from one Pokémon to another.", + "rerollDesc": "Spend money to reroll your item options.", + "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", + "rerollCost": "₽{{cost}}", + "itemCost": "₽{{cost}}" +} as const; diff --git a/src/locales/ko/config.ts b/src/locales/ko/config.ts index 3de0e3275c2..b3d1537a4e4 100644 --- a/src/locales/ko/config.ts +++ b/src/locales/ko/config.ts @@ -32,7 +32,7 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; - +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const koConfig = { ability: ability, @@ -70,5 +70,6 @@ export const koConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/ko/modifier-select-ui-handler.ts b/src/locales/ko/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..b578319bb01 --- /dev/null +++ b/src/locales/ko/modifier-select-ui-handler.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "도구 이동", + "reroll": "새로고침", + "lockRarities": "레어도 고정", + "transferDesc": "포켓몬이 지닌 도구를 다른 포켓몬에게 옮깁니다.", + "rerollDesc": "소지금을 사용하여 선택 가능한 도구들을 새로고침합니다.", + "lockRaritiesDesc": "새로고침할 때 도구 레어도를 고정합니다(새로고침 비용 상승함).", + "rerollCost": "₽{{cost}}", + "itemCost": "₽{{cost}}" +} as const; diff --git a/src/locales/pt_BR/config.ts b/src/locales/pt_BR/config.ts index ae43e0aba75..d5476054155 100644 --- a/src/locales/pt_BR/config.ts +++ b/src/locales/pt_BR/config.ts @@ -32,6 +32,7 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const ptBrConfig = { ability: ability, @@ -69,5 +70,6 @@ export const ptBrConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/pt_BR/modifier-select-ui-handler.ts b/src/locales/pt_BR/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..7f9bf45c197 --- /dev/null +++ b/src/locales/pt_BR/modifier-select-ui-handler.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Transfer", + "reroll": "Reroll", + "lockRarities": "Lock Rarities", + "transferDesc": "Transfer a held item from one Pokémon to another.", + "rerollDesc": "Spend money to reroll your item options.", + "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", + "rerollCost": "₽{{cost}}", + "itemCost": "₽{{cost}}" +} as const; diff --git a/src/locales/zh_CN/config.ts b/src/locales/zh_CN/config.ts index 245727d874b..8d86ed63fd1 100644 --- a/src/locales/zh_CN/config.ts +++ b/src/locales/zh_CN/config.ts @@ -32,6 +32,7 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const zhCnConfig = { ability: ability, @@ -69,5 +70,6 @@ export const zhCnConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/zh_CN/modifier-select-ui-handler.ts b/src/locales/zh_CN/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..b4fb8a0462b --- /dev/null +++ b/src/locales/zh_CN/modifier-select-ui-handler.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "交换道具", + "reroll": "刷新掉落", + "lockRarities": "锁定稀有度", + "transferDesc": "将一只宝可梦所持有的道具交换给另一只。", + "rerollDesc": "花钱刷新掉落道具选项。", + "lockRaritiesDesc": "在刷新时锁定道具稀有度(影响刷新费用)。", + "rerollCost": "₽{{cost}}", + "itemCost": "₽{{cost}}" +} as const; diff --git a/src/locales/zh_TW/config.ts b/src/locales/zh_TW/config.ts index c213aa4b0df..4043072589e 100644 --- a/src/locales/zh_TW/config.ts +++ b/src/locales/zh_TW/config.ts @@ -31,6 +31,7 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const zhTWConfig = { ability: ability, @@ -67,5 +68,6 @@ export const zhTWConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/zh_TW/modifier-select-ui-handler.ts b/src/locales/zh_TW/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..7f9bf45c197 --- /dev/null +++ b/src/locales/zh_TW/modifier-select-ui-handler.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/plugins/i18n"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Transfer", + "reroll": "Reroll", + "lockRarities": "Lock Rarities", + "transferDesc": "Transfer a held item from one Pokémon to another.", + "rerollDesc": "Spend money to reroll your item options.", + "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", + "rerollCost": "₽{{cost}}", + "itemCost": "₽{{cost}}" +} as const; diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 06c660434d5..c62576993af 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -221,6 +221,7 @@ declare module "i18next" { PGFbattleSpecDialogue: SimpleTranslationEntries; PGFmiscDialogue: SimpleTranslationEntries; PGFdoubleBattleDialogue: DialogueTranslationEntries; + modifierSelectUiHandler: SimpleTranslationEntries; }; } } diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 37718243b8b..ce91fdf68ce 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -7,6 +7,7 @@ import { Mode } from "./ui"; import { LockModifierTiersModifier, PokemonHeldItemModifier } from "../modifier/modifier"; import { handleTutorial, Tutorial } from "../tutorial"; import {Button} from "../enums/buttons"; +import i18next from "i18next"; export const SHOP_OPTIONS_ROW_LIMIT = 6; @@ -41,27 +42,22 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { ui.add(this.modifierContainer); this.transferButtonContainer = this.scene.add.container((this.scene.game.canvas.width / 6) - 1, -64); - this.transferButtonContainer.setName("container-transfer-btn"); this.transferButtonContainer.setVisible(false); ui.add(this.transferButtonContainer); - const transferButtonText = addTextObject(this.scene, -4, -2, "Transfer", TextStyle.PARTY); - transferButtonText.setName("text-transfer-btn"); + const transferButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:transfer"), TextStyle.PARTY); transferButtonText.setOrigin(1, 0); this.transferButtonContainer.add(transferButtonText); this.rerollButtonContainer = this.scene.add.container(16, -64); - this.rerollButtonContainer.setName("container-reroll-brn"); this.rerollButtonContainer.setVisible(false); ui.add(this.rerollButtonContainer); - const rerollButtonText = addTextObject(this.scene, -4, -2, "Reroll", TextStyle.PARTY); - rerollButtonText.setName("text-reroll-btn"); + const rerollButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:reroll"), TextStyle.PARTY); rerollButtonText.setOrigin(0, 0); this.rerollButtonContainer.add(rerollButtonText); this.rerollCostText = addTextObject(this.scene, 0, 0, "", TextStyle.MONEY); - this.rerollCostText.setName("text-reroll-cost"); this.rerollCostText.setOrigin(0, 0); this.rerollCostText.setPositionRelative(rerollButtonText, rerollButtonText.displayWidth + 5, 1); this.rerollButtonContainer.add(this.rerollCostText); @@ -70,7 +66,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.lockRarityButtonContainer.setVisible(false); ui.add(this.lockRarityButtonContainer); - this.lockRarityButtonText = addTextObject(this.scene, -4, -2, "Lock Rarities", TextStyle.PARTY); + this.lockRarityButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:lockRarities"), TextStyle.PARTY); this.lockRarityButtonText.setOrigin(0, 0); this.lockRarityButtonContainer.add(this.lockRarityButtonText); } @@ -146,7 +142,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { const maxUpgradeCount = typeOptions.map(to => to.upgradeCount).reduce((max, current) => Math.max(current, max), 0); this.scene.showFieldOverlay(750); - this.scene.updateAndShowText(750); + this.scene.updateAndShowLuckText(750); this.scene.updateMoneyText(); let i = 0; @@ -303,13 +299,13 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { ui.showText(options[this.cursor].modifierTypeOption.type.getDescription(this.scene)); } else if (!cursor) { this.cursorObj.setPosition(6, this.lockRarityButtonContainer.visible ? -72 : -60); - ui.showText("Spend money to reroll your item options."); + ui.showText(i18next.t("modifierSelectUiHandler:rerollDesc")); } else if (cursor === 1) { this.cursorObj.setPosition((this.scene.game.canvas.width / 6) - 50, -60); - ui.showText("Transfer a held item from one Pokémon to another."); + ui.showText(i18next.t("modifierSelectUiHandler:transferDesc")); } else { this.cursorObj.setPosition(6, -60); - ui.showText("Lock item rarities on reroll (affects reroll cost)."); + ui.showText(i18next.t("modifierSelectUiHandler:lockRaritiesDesc")); } return ret; @@ -362,8 +358,9 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { updateRerollCostText(): void { const canReroll = this.scene.money >= this.rerollCost; + const rerollCostFormatted = this.rerollCost.toLocaleString(i18next.language); - this.rerollCostText.setText(`₽${this.rerollCost.toLocaleString("en-US")}`); + this.rerollCostText.setText(i18next.t("modifierSelectUiHandler:rerollCost", { cost: rerollCostFormatted })); this.rerollCostText.setColor(this.getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED)); this.rerollCostText.setShadowColor(this.getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED, true)); } @@ -618,8 +615,9 @@ class ModifierOption extends Phaser.GameObjects.Container { updateCostText(): void { const scene = this.scene as BattleScene; const textStyle = this.modifierTypeOption.cost <= scene.money ? TextStyle.MONEY : TextStyle.PARTY_RED; + const itemCostFormatted = this.modifierTypeOption.cost.toLocaleString(i18next.language); - this.itemCostText.setText(`₽${this.modifierTypeOption.cost.toLocaleString("en-US")}`); + this.itemCostText.setText(i18next.t("modifierSelectUiHandler:itemCost", { cost: itemCostFormatted })); this.itemCostText.setColor(getTextColor(textStyle, false, scene.uiTheme)); this.itemCostText.setShadowColor(getTextColor(textStyle, true, scene.uiTheme)); } From 5eab0169039b3c16a3e95a8d109f493c1154b94f Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Fri, 31 May 2024 10:48:26 -0400 Subject: [PATCH 27/39] Revert "[Localization] modifier-select-ui-handler Locales (#1567)" (#1652) This reverts commit 5c79e6258b45316a2a0550f2028446d61fb015d2. --- src/locales/de/config.ts | 4 +-- src/locales/de/modifier-select-ui-handler.ts | 12 --------- src/locales/en/config.ts | 4 +-- src/locales/en/modifier-select-ui-handler.ts | 12 --------- src/locales/es/config.ts | 4 +-- src/locales/es/modifier-select-ui-handler.ts | 12 --------- src/locales/fr/config.ts | 4 +-- src/locales/fr/modifier-select-ui-handler.ts | 12 --------- src/locales/it/config.ts | 4 +-- src/locales/it/modifier-select-ui-handler.ts | 12 --------- src/locales/ko/config.ts | 5 ++-- src/locales/ko/modifier-select-ui-handler.ts | 12 --------- src/locales/pt_BR/config.ts | 4 +-- .../pt_BR/modifier-select-ui-handler.ts | 12 --------- src/locales/zh_CN/config.ts | 4 +-- .../zh_CN/modifier-select-ui-handler.ts | 12 --------- src/locales/zh_TW/config.ts | 4 +-- .../zh_TW/modifier-select-ui-handler.ts | 12 --------- src/plugins/i18n.ts | 1 - src/ui/modifier-select-ui-handler.ts | 26 ++++++++++--------- 20 files changed, 24 insertions(+), 148 deletions(-) delete mode 100644 src/locales/de/modifier-select-ui-handler.ts delete mode 100644 src/locales/en/modifier-select-ui-handler.ts delete mode 100644 src/locales/es/modifier-select-ui-handler.ts delete mode 100644 src/locales/fr/modifier-select-ui-handler.ts delete mode 100644 src/locales/it/modifier-select-ui-handler.ts delete mode 100644 src/locales/ko/modifier-select-ui-handler.ts delete mode 100644 src/locales/pt_BR/modifier-select-ui-handler.ts delete mode 100644 src/locales/zh_CN/modifier-select-ui-handler.ts delete mode 100644 src/locales/zh_TW/modifier-select-ui-handler.ts diff --git a/src/locales/de/config.ts b/src/locales/de/config.ts index 36fe8854e28..50cf09181fa 100644 --- a/src/locales/de/config.ts +++ b/src/locales/de/config.ts @@ -32,7 +32,6 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; -import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const deConfig = { ability: ability, @@ -70,6 +69,5 @@ export const deConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, - modifierSelectUiHandler: modifierSelectUiHandler + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue }; diff --git a/src/locales/de/modifier-select-ui-handler.ts b/src/locales/de/modifier-select-ui-handler.ts deleted file mode 100644 index 7f9bf45c197..00000000000 --- a/src/locales/de/modifier-select-ui-handler.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SimpleTranslationEntries } from "#app/plugins/i18n"; - -export const modifierSelectUiHandler: SimpleTranslationEntries = { - "transfer": "Transfer", - "reroll": "Reroll", - "lockRarities": "Lock Rarities", - "transferDesc": "Transfer a held item from one Pokémon to another.", - "rerollDesc": "Spend money to reroll your item options.", - "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", - "rerollCost": "₽{{cost}}", - "itemCost": "₽{{cost}}" -} as const; diff --git a/src/locales/en/config.ts b/src/locales/en/config.ts index a50ca747fcb..d01102bc3a4 100644 --- a/src/locales/en/config.ts +++ b/src/locales/en/config.ts @@ -32,7 +32,6 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; -import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const enConfig = { ability: ability, @@ -70,6 +69,5 @@ export const enConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, - modifierSelectUiHandler: modifierSelectUiHandler + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue }; diff --git a/src/locales/en/modifier-select-ui-handler.ts b/src/locales/en/modifier-select-ui-handler.ts deleted file mode 100644 index 7f9bf45c197..00000000000 --- a/src/locales/en/modifier-select-ui-handler.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SimpleTranslationEntries } from "#app/plugins/i18n"; - -export const modifierSelectUiHandler: SimpleTranslationEntries = { - "transfer": "Transfer", - "reroll": "Reroll", - "lockRarities": "Lock Rarities", - "transferDesc": "Transfer a held item from one Pokémon to another.", - "rerollDesc": "Spend money to reroll your item options.", - "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", - "rerollCost": "₽{{cost}}", - "itemCost": "₽{{cost}}" -} as const; diff --git a/src/locales/es/config.ts b/src/locales/es/config.ts index a12648b1833..2f33cd680ae 100644 --- a/src/locales/es/config.ts +++ b/src/locales/es/config.ts @@ -32,7 +32,6 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; -import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const esConfig = { ability: ability, @@ -70,6 +69,5 @@ export const esConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, - modifierSelectUiHandler: modifierSelectUiHandler + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue }; diff --git a/src/locales/es/modifier-select-ui-handler.ts b/src/locales/es/modifier-select-ui-handler.ts deleted file mode 100644 index 7f9bf45c197..00000000000 --- a/src/locales/es/modifier-select-ui-handler.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SimpleTranslationEntries } from "#app/plugins/i18n"; - -export const modifierSelectUiHandler: SimpleTranslationEntries = { - "transfer": "Transfer", - "reroll": "Reroll", - "lockRarities": "Lock Rarities", - "transferDesc": "Transfer a held item from one Pokémon to another.", - "rerollDesc": "Spend money to reroll your item options.", - "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", - "rerollCost": "₽{{cost}}", - "itemCost": "₽{{cost}}" -} as const; diff --git a/src/locales/fr/config.ts b/src/locales/fr/config.ts index a1176f3d12f..f7f7201ddd7 100644 --- a/src/locales/fr/config.ts +++ b/src/locales/fr/config.ts @@ -32,7 +32,6 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; -import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const frConfig = { ability: ability, @@ -70,6 +69,5 @@ export const frConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, - modifierSelectUiHandler: modifierSelectUiHandler + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue }; diff --git a/src/locales/fr/modifier-select-ui-handler.ts b/src/locales/fr/modifier-select-ui-handler.ts deleted file mode 100644 index 2c46233d594..00000000000 --- a/src/locales/fr/modifier-select-ui-handler.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SimpleTranslationEntries } from "#app/plugins/i18n"; - -export const modifierSelectUiHandler: SimpleTranslationEntries = { - "transfer": "Transférer", - "reroll": "Relancer", - "lockRarities": "Bloquer la rareté", - "transferDesc": "Transférer un objet tenu par un Pokémon vers un autre.", - "rerollDesc": "Payer pour relancer les objets gratuits proposés.", - "lockRaritiesDesc": "La relance proposera des objets gratuits de rareté\négale ou supérieure. Affecte le cout de relance.", - "rerollCost": "{{cost}} ₽", - "itemCost": "{{cost}} ₽" -} as const; diff --git a/src/locales/it/config.ts b/src/locales/it/config.ts index b94880c6293..5f76e4d4205 100644 --- a/src/locales/it/config.ts +++ b/src/locales/it/config.ts @@ -32,7 +32,6 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; -import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const itConfig = { ability: ability, @@ -70,6 +69,5 @@ export const itConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, - modifierSelectUiHandler: modifierSelectUiHandler + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue }; diff --git a/src/locales/it/modifier-select-ui-handler.ts b/src/locales/it/modifier-select-ui-handler.ts deleted file mode 100644 index 7f9bf45c197..00000000000 --- a/src/locales/it/modifier-select-ui-handler.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SimpleTranslationEntries } from "#app/plugins/i18n"; - -export const modifierSelectUiHandler: SimpleTranslationEntries = { - "transfer": "Transfer", - "reroll": "Reroll", - "lockRarities": "Lock Rarities", - "transferDesc": "Transfer a held item from one Pokémon to another.", - "rerollDesc": "Spend money to reroll your item options.", - "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", - "rerollCost": "₽{{cost}}", - "itemCost": "₽{{cost}}" -} as const; diff --git a/src/locales/ko/config.ts b/src/locales/ko/config.ts index b3d1537a4e4..3de0e3275c2 100644 --- a/src/locales/ko/config.ts +++ b/src/locales/ko/config.ts @@ -32,7 +32,7 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; -import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; + export const koConfig = { ability: ability, @@ -70,6 +70,5 @@ export const koConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, - modifierSelectUiHandler: modifierSelectUiHandler + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue }; diff --git a/src/locales/ko/modifier-select-ui-handler.ts b/src/locales/ko/modifier-select-ui-handler.ts deleted file mode 100644 index b578319bb01..00000000000 --- a/src/locales/ko/modifier-select-ui-handler.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SimpleTranslationEntries } from "#app/plugins/i18n"; - -export const modifierSelectUiHandler: SimpleTranslationEntries = { - "transfer": "도구 이동", - "reroll": "새로고침", - "lockRarities": "레어도 고정", - "transferDesc": "포켓몬이 지닌 도구를 다른 포켓몬에게 옮깁니다.", - "rerollDesc": "소지금을 사용하여 선택 가능한 도구들을 새로고침합니다.", - "lockRaritiesDesc": "새로고침할 때 도구 레어도를 고정합니다(새로고침 비용 상승함).", - "rerollCost": "₽{{cost}}", - "itemCost": "₽{{cost}}" -} as const; diff --git a/src/locales/pt_BR/config.ts b/src/locales/pt_BR/config.ts index d5476054155..ae43e0aba75 100644 --- a/src/locales/pt_BR/config.ts +++ b/src/locales/pt_BR/config.ts @@ -32,7 +32,6 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; -import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const ptBrConfig = { ability: ability, @@ -70,6 +69,5 @@ export const ptBrConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, - modifierSelectUiHandler: modifierSelectUiHandler + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue }; diff --git a/src/locales/pt_BR/modifier-select-ui-handler.ts b/src/locales/pt_BR/modifier-select-ui-handler.ts deleted file mode 100644 index 7f9bf45c197..00000000000 --- a/src/locales/pt_BR/modifier-select-ui-handler.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SimpleTranslationEntries } from "#app/plugins/i18n"; - -export const modifierSelectUiHandler: SimpleTranslationEntries = { - "transfer": "Transfer", - "reroll": "Reroll", - "lockRarities": "Lock Rarities", - "transferDesc": "Transfer a held item from one Pokémon to another.", - "rerollDesc": "Spend money to reroll your item options.", - "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", - "rerollCost": "₽{{cost}}", - "itemCost": "₽{{cost}}" -} as const; diff --git a/src/locales/zh_CN/config.ts b/src/locales/zh_CN/config.ts index 8d86ed63fd1..245727d874b 100644 --- a/src/locales/zh_CN/config.ts +++ b/src/locales/zh_CN/config.ts @@ -32,7 +32,6 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; -import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const zhCnConfig = { ability: ability, @@ -70,6 +69,5 @@ export const zhCnConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, - modifierSelectUiHandler: modifierSelectUiHandler + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue }; diff --git a/src/locales/zh_CN/modifier-select-ui-handler.ts b/src/locales/zh_CN/modifier-select-ui-handler.ts deleted file mode 100644 index b4fb8a0462b..00000000000 --- a/src/locales/zh_CN/modifier-select-ui-handler.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SimpleTranslationEntries } from "#app/plugins/i18n"; - -export const modifierSelectUiHandler: SimpleTranslationEntries = { - "transfer": "交换道具", - "reroll": "刷新掉落", - "lockRarities": "锁定稀有度", - "transferDesc": "将一只宝可梦所持有的道具交换给另一只。", - "rerollDesc": "花钱刷新掉落道具选项。", - "lockRaritiesDesc": "在刷新时锁定道具稀有度(影响刷新费用)。", - "rerollCost": "₽{{cost}}", - "itemCost": "₽{{cost}}" -} as const; diff --git a/src/locales/zh_TW/config.ts b/src/locales/zh_TW/config.ts index 4043072589e..c213aa4b0df 100644 --- a/src/locales/zh_TW/config.ts +++ b/src/locales/zh_TW/config.ts @@ -31,7 +31,6 @@ import { } from "./dialogue"; import { biome } from "./biome"; import { pokemonInfoContainer } from "./pokemon-info-container"; -import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const zhTWConfig = { ability: ability, @@ -68,6 +67,5 @@ export const zhTWConfig = { PGMmiscDialogue: PGMmiscDialogue, PGFmiscDialogue: PGFmiscDialogue, PGMdoubleBattleDialogue: PGMdoubleBattleDialogue, - PGFdoubleBattleDialogue: PGFdoubleBattleDialogue, - modifierSelectUiHandler: modifierSelectUiHandler + PGFdoubleBattleDialogue: PGFdoubleBattleDialogue }; diff --git a/src/locales/zh_TW/modifier-select-ui-handler.ts b/src/locales/zh_TW/modifier-select-ui-handler.ts deleted file mode 100644 index 7f9bf45c197..00000000000 --- a/src/locales/zh_TW/modifier-select-ui-handler.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SimpleTranslationEntries } from "#app/plugins/i18n"; - -export const modifierSelectUiHandler: SimpleTranslationEntries = { - "transfer": "Transfer", - "reroll": "Reroll", - "lockRarities": "Lock Rarities", - "transferDesc": "Transfer a held item from one Pokémon to another.", - "rerollDesc": "Spend money to reroll your item options.", - "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", - "rerollCost": "₽{{cost}}", - "itemCost": "₽{{cost}}" -} as const; diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index c62576993af..06c660434d5 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -221,7 +221,6 @@ declare module "i18next" { PGFbattleSpecDialogue: SimpleTranslationEntries; PGFmiscDialogue: SimpleTranslationEntries; PGFdoubleBattleDialogue: DialogueTranslationEntries; - modifierSelectUiHandler: SimpleTranslationEntries; }; } } diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index ce91fdf68ce..37718243b8b 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -7,7 +7,6 @@ import { Mode } from "./ui"; import { LockModifierTiersModifier, PokemonHeldItemModifier } from "../modifier/modifier"; import { handleTutorial, Tutorial } from "../tutorial"; import {Button} from "../enums/buttons"; -import i18next from "i18next"; export const SHOP_OPTIONS_ROW_LIMIT = 6; @@ -42,22 +41,27 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { ui.add(this.modifierContainer); this.transferButtonContainer = this.scene.add.container((this.scene.game.canvas.width / 6) - 1, -64); + this.transferButtonContainer.setName("container-transfer-btn"); this.transferButtonContainer.setVisible(false); ui.add(this.transferButtonContainer); - const transferButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:transfer"), TextStyle.PARTY); + const transferButtonText = addTextObject(this.scene, -4, -2, "Transfer", TextStyle.PARTY); + transferButtonText.setName("text-transfer-btn"); transferButtonText.setOrigin(1, 0); this.transferButtonContainer.add(transferButtonText); this.rerollButtonContainer = this.scene.add.container(16, -64); + this.rerollButtonContainer.setName("container-reroll-brn"); this.rerollButtonContainer.setVisible(false); ui.add(this.rerollButtonContainer); - const rerollButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:reroll"), TextStyle.PARTY); + const rerollButtonText = addTextObject(this.scene, -4, -2, "Reroll", TextStyle.PARTY); + rerollButtonText.setName("text-reroll-btn"); rerollButtonText.setOrigin(0, 0); this.rerollButtonContainer.add(rerollButtonText); this.rerollCostText = addTextObject(this.scene, 0, 0, "", TextStyle.MONEY); + this.rerollCostText.setName("text-reroll-cost"); this.rerollCostText.setOrigin(0, 0); this.rerollCostText.setPositionRelative(rerollButtonText, rerollButtonText.displayWidth + 5, 1); this.rerollButtonContainer.add(this.rerollCostText); @@ -66,7 +70,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.lockRarityButtonContainer.setVisible(false); ui.add(this.lockRarityButtonContainer); - this.lockRarityButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:lockRarities"), TextStyle.PARTY); + this.lockRarityButtonText = addTextObject(this.scene, -4, -2, "Lock Rarities", TextStyle.PARTY); this.lockRarityButtonText.setOrigin(0, 0); this.lockRarityButtonContainer.add(this.lockRarityButtonText); } @@ -142,7 +146,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { const maxUpgradeCount = typeOptions.map(to => to.upgradeCount).reduce((max, current) => Math.max(current, max), 0); this.scene.showFieldOverlay(750); - this.scene.updateAndShowLuckText(750); + this.scene.updateAndShowText(750); this.scene.updateMoneyText(); let i = 0; @@ -299,13 +303,13 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { ui.showText(options[this.cursor].modifierTypeOption.type.getDescription(this.scene)); } else if (!cursor) { this.cursorObj.setPosition(6, this.lockRarityButtonContainer.visible ? -72 : -60); - ui.showText(i18next.t("modifierSelectUiHandler:rerollDesc")); + ui.showText("Spend money to reroll your item options."); } else if (cursor === 1) { this.cursorObj.setPosition((this.scene.game.canvas.width / 6) - 50, -60); - ui.showText(i18next.t("modifierSelectUiHandler:transferDesc")); + ui.showText("Transfer a held item from one Pokémon to another."); } else { this.cursorObj.setPosition(6, -60); - ui.showText(i18next.t("modifierSelectUiHandler:lockRaritiesDesc")); + ui.showText("Lock item rarities on reroll (affects reroll cost)."); } return ret; @@ -358,9 +362,8 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { updateRerollCostText(): void { const canReroll = this.scene.money >= this.rerollCost; - const rerollCostFormatted = this.rerollCost.toLocaleString(i18next.language); - this.rerollCostText.setText(i18next.t("modifierSelectUiHandler:rerollCost", { cost: rerollCostFormatted })); + this.rerollCostText.setText(`₽${this.rerollCost.toLocaleString("en-US")}`); this.rerollCostText.setColor(this.getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED)); this.rerollCostText.setShadowColor(this.getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED, true)); } @@ -615,9 +618,8 @@ class ModifierOption extends Phaser.GameObjects.Container { updateCostText(): void { const scene = this.scene as BattleScene; const textStyle = this.modifierTypeOption.cost <= scene.money ? TextStyle.MONEY : TextStyle.PARTY_RED; - const itemCostFormatted = this.modifierTypeOption.cost.toLocaleString(i18next.language); - this.itemCostText.setText(i18next.t("modifierSelectUiHandler:itemCost", { cost: itemCostFormatted })); + this.itemCostText.setText(`₽${this.modifierTypeOption.cost.toLocaleString("en-US")}`); this.itemCostText.setColor(getTextColor(textStyle, false, scene.uiTheme)); this.itemCostText.setShadowColor(getTextColor(textStyle, true, scene.uiTheme)); } From 0c862839d33d40352546ae03d491e2fe4c4a999d Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Fri, 31 May 2024 10:56:39 -0400 Subject: [PATCH 28/39] Revert "[Bug] Full Heals and Full Restore cure confusion (#1112)" (#1653) This reverts commit 6c4b60a2faca4f52fd83808e1bd6c331aa98a2c3. --- src/data/berry.ts | 7 +++++-- src/field/pokemon.ts | 10 ++-------- src/modifier/modifier-type.ts | 5 ++--- src/modifier/modifier.ts | 17 ++++++++++------- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/data/berry.ts b/src/data/berry.ts index 7c5ce477a95..e832ab0a43e 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -94,9 +94,12 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { } if (pokemon.status) { pokemon.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect))); + pokemon.resetStatus(); + pokemon.updateInfo(); + } + if (pokemon.getTag(BattlerTagType.CONFUSED)) { + pokemon.lapseTag(BattlerTagType.CONFUSED); } - pokemon.resetStatus(true, true); - pokemon.updateInfo(); }; case BerryType.LIECHI: case BerryType.GANLON: diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index e7fce386ddb..2ff53249aeb 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2426,10 +2426,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Resets the status of a pokemon - * @param {boolean} revive Whether revive should be cured; defaults to true. - * @param {boolean} confusion Whether resetStatus should include confusion or not; defaults to false. + * @param revive whether revive should be cured, defaults to true */ - resetStatus(revive: boolean = true, confusion: boolean = false): void { + resetStatus(revive: boolean = true): void { const lastStatus = this.status?.effect; if (!revive && lastStatus === StatusEffect.FAINT) { return; @@ -2441,11 +2440,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.lapseTag(BattlerTagType.NIGHTMARE); } } - if (confusion) { - if (this.getTag(BattlerTagType.CONFUSED)) { - this.lapseTag(BattlerTagType.CONFUSED); - } - } } primeSummonData(summonDataPrimer: PokemonSummonData): void { diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index a9f5e3642cf..a26c8f634f7 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -21,7 +21,6 @@ import { ModifierTier } from "./modifier-tier"; import { Nature, getNatureName, getNatureStatMultiplier } from "#app/data/nature"; import i18next from "#app/plugins/i18n"; import { getModifierTierTextTint } from "#app/ui/text"; -import { BattlerTagType } from "#app/data/enums/battler-tag-type.js"; const outputModifierData = false; const useMaxWeightForOutput = false; @@ -231,7 +230,7 @@ export class PokemonHpRestoreModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string, restorePoints: integer, restorePercent: integer, healStatus: boolean = false, newModifierFunc?: NewModifierFunc, selectFilter?: PokemonSelectFilter, group?: string) { super(localeKey, iconImage, newModifierFunc || ((_type, args) => new Modifiers.PokemonHpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints, this.restorePercent, this.healStatus, false)), selectFilter || ((pokemon: PlayerPokemon) => { - if (!pokemon.hp || (pokemon.hp >= pokemon.getMaxHp() && (!this.healStatus || (!pokemon.status && !pokemon.getTag(BattlerTagType.CONFUSED))))) { + if (!pokemon.hp || (pokemon.hp >= pokemon.getMaxHp() && (!this.healStatus || !pokemon.status))) { return PartyUiHandler.NoEffectMessage; } return null; @@ -281,7 +280,7 @@ export class PokemonStatusHealModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string) { super(localeKey, iconImage, ((_type, args) => new Modifiers.PokemonStatusHealModifier(this, (args[0] as PlayerPokemon).id)), ((pokemon: PlayerPokemon) => { - if (!pokemon.hp || (!pokemon.status && !pokemon.getTag(BattlerTagType.CONFUSED))) { + if (!pokemon.hp || !pokemon.status) { return PartyUiHandler.NoEffectMessage; } return null; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 379543f0ab2..9035eeda9dd 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1057,14 +1057,16 @@ export class PokemonHpRestoreModifier extends ConsumablePokemonModifier { let restorePoints = this.restorePoints; if (!this.fainted) { restorePoints = Math.floor(restorePoints * (args[1] as number)); - if (this.fainted || this.healStatus) { - pokemon.resetStatus(true, true); - } - pokemon.hp = Math.min(pokemon.hp + Math.max(Math.ceil(Math.max(Math.floor((this.restorePercent * 0.01) * pokemon.getMaxHp()), restorePoints)), 1), pokemon.getMaxHp()); - return true; } - return false; + if (this.fainted || this.healStatus) { + pokemon.resetStatus(); + } + pokemon.hp = Math.min(pokemon.hp + Math.max(Math.ceil(Math.max(Math.floor((this.restorePercent * 0.01) * pokemon.getMaxHp()), restorePoints)), 1), pokemon.getMaxHp()); + + return true; } + + return false; } } @@ -1075,7 +1077,8 @@ export class PokemonStatusHealModifier extends ConsumablePokemonModifier { apply(args: any[]): boolean { const pokemon = args[0] as Pokemon; - pokemon.resetStatus(true, true); + pokemon.resetStatus(); + return true; } } From fc61489d59ef4be9e4ab9ce97e94c36774faa64f Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Fri, 31 May 2024 11:14:55 -0500 Subject: [PATCH 29/39] Hero Palafin, 10% PC Zygarde cries corrected for real this time Also made sure Zacian and Zamazenta don't crash this time. --- public/audio/cry/718-10-pc.m4a | Bin 0 -> 15572 bytes src/data/pokemon-species.ts | 10 ++++++---- 2 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 public/audio/cry/718-10-pc.m4a diff --git a/public/audio/cry/718-10-pc.m4a b/public/audio/cry/718-10-pc.m4a new file mode 100644 index 0000000000000000000000000000000000000000..3a7038ffb793f349a05632341f9c002fd5895e74 GIT binary patch literal 15572 zcmajG1yEeg)~L;(2^Ju@LxA8uxCM8DySohTnm}*}?iPX%gS$&`cPF?92=4F??>XoH z&i(3E-Bt5U`|4i1dw1{dT^j}lhS^s-U1#IxM(w;tMXyw@WF}Zq&jbCP)%1i`w)Y7;Nj+-0T|4$`?4shev8Nvf}OZ0O%R%0}mGL`kb3T z@htd75%vuU=(nF4Mm4^;1oUr~8)66_yFi}pEa(gts5TTMKYq~!|-!6B*vZA|!2g7zd1G0t4)AcM5q?(tsh z2uVRnI(f?A3ed1=1|d7RwU9+DZUCI4ohOMh)f2qdRM{WRWlW&=AT%|nXECk7!xQ~e zY0I3wb*@M2N5wO2=b!AbK!nh{#-5pr7X?yk=1FO`0hn3X=sTA!HZY>H27%gCzk5~`D+I6GxXrof|0Y{v*fgrHo3kUrRivkau#O8 zoEJ~u3kk<%U!O}E1P%nCAlaz5V_Ik=e>TBsjKzgPC| z%5nL{$~yO8xcNWJisf&hs?3wwTlfGOERV#b7DJ5W5u9|+%GKF=Qsca>Npps67D%7x zyk4v%2tu(=Ou0=zlsb#T|z2{rVWZbv-2Y{u5o8@_X6VgZF!@5oY=Aj2xef zj+3cCp=?GhwM+ufhV9y$fZ-rG9)NuZh6TYAw;(u$t{cek-Bx7@H}lHp)^A^ zB_G0uHGHwZcP+3V>{$<Pwx!MXqc}p zPKyp+d_(7ipIt|G$^GM0T3a#cHSFSWI?+r=Z_OX1ZjMo?8LT{A8QQj?N$&%M|KlV! z*69ck2SR{h%$1^#gCzDv*sWvK;$;?K4E*$jh%&>6n5KX?qr*S1n()fn>(XhOBrTFN zogycG8}jZmxPjjEy4SeZ%T-ve-T)hBQjKv@d%Lk_97*)r4}0Pt}mi)Qf?$s{2+bm-cZ)Y<0JSBs|wmA-es+)F%~$Br+RZdrX4 zaRjIVAy*))V0H(C)r)?-mLyHL^iuic`zF3o=`y9SJgaOF6y5n!-FO~-Nbkw)>Nb?Ta$ z_FNdstl{$5-8-DhM2MIQ@o@wICU~{A#MLP@6BEif+9|F^bbve%qVCBB5v_Q?%wDH& zf0D-;r%D)~!=WKv9~fd$JrLWWE*w8)>uxyuV3EGyy^0mmxF(lxx=>L zKB^-gVnAkKyyXpfoR#0&sUQ`6Vi+f#N?Hku>ZZ-=GIeYX@Ck@3D5!1nf=3A#Qr{t> zF->3CdzVFqye;~B=jSwm8+b-@JP+ktW~!RkR*qmX?R4T*@R4}Ixcz6DtYwK~uarOK zL`;O!pD+nPakyp51(eGZY9HL$4%lPeRJYgt^HYSLGMm*UNPhO2ec1!UeF4aGG2zgX zhKuE69EkJbjkTU$>}?)CIysk@gBNoh^1kB?GE{WD3{VOid^e8nXTF?AUbbDJisv1o z*>R63vZ)bTCZewkMP^2%-%XzaRt3oUe3zAtBsYjda8I_uOXaHvjGUV?xiH(Rx2xg{ zmgKq%Caz8ANM0u}{bi+L7)g;N!+`8F^`vIJXN}gWz0Qx9am2t%o7Ho}(9tE>B$?GM zP8nh`%hVsClaa`-o1PQ@MBCMQd_6QvX~VjQ7FK=4mUWFVs(v`Svh1~@#}8$#^bE-IXc(|TAWJ!{g6J^y#*zwflwi1<_a z%axsLiQ!ip;XOGlPmPh}zdC znlG;3P4WFfcM9@sQ*ZjS7Q@!$h*t^G*>a>^F3sz{CLXFUNq;sL|M172DTz7zHjs-) zROdkNYp}#G4Gb4+t-jRuOdT8eKhq=`If!i1! z#x#CCw~NsYhe4Uwf}*z^;f3db5S_g&BV@#_NX=Fz|SW|2q5w@Gww}C307u8Hu z%f}BL4lTpW)5#0@j%*Ax(mhKCCKi&v8t(-B4LuCB;}(yWmO%8Bm?9Ao-(Wir&(HR9 zYb_o6nz!M4z3V94ywdP@s-$uRI(hwk-xGIj+Q1>E74WrdF9r6Y=+o@kYdmyz;0~ z38uDp{NzUG7DS@&+*glx#l_yxzs09!EG(m1)d`XGNN{}+%9bK!tceBLs#2BxklQ#y zyv5s%#n0T=Q2zq@GK_X@W@0rWp~(1V5F_KF>hqL|L{##V++O1T4Y-OSZ^H~aTj>Bx zF`_>Qt30}mqum|ZZP~O`{w};N>L)01^0-9Y_G!yVwSf`CjnK0;!qrXs9;g!3ErBCR zr_TX6KOAd8Pa@D2TkJ>XRbg&F-gxRPcJoEY`brFk4qd&^O zN0{2XhWQk+q~WqmLFX;6DUdlgC2_=B?=D)bc1Au^<4vPJ3}1%&x%qN^^vCjOFFOXQ z%mvIkKo+{xODk52Uh(WP7YY0J6RN-_S`-&UUjB5Zm{W5-_2kFcv~?RO=!l=!lt)Q z|9!ZSF3tT~#rdjtzqWuM{~KgMJObCu0sdpE?d01gi!8fY>DKk`%sOjMQUTkOaPJ2B zr*YEndCfaTd{bLT$x{UxVRZ`VZ)Z=N>giF+r?!pVVd91g43l`~p_49jbq87r#flYS zG|gJaYi33@rLUIJ>*TOI2G3PIZ_1r#?os?acJMLe9&($eM@tuBC^Ee;)$T!1`F?>k zV4D?ua(>d~KxrkDcM_$>{%Z*#NFO;-O1mXRjb-NgmKCqud)TE8UrZh7$gd7g`vqUZ zd0T$2(eoUDk&&evCz4)R%&&NI7P@v^7GuiLlSMdzG2UI))iu{RULL0`7?8oC%DE$ zNOEmT(49S%T3wT&$0-ZAgCpBMZsIGV8vdq+%^#N}4@)q?HXO^1zyR)C$UzX$c&pIp z-r5-d>C;4mz1vk0qD_rT<*D2sc1JE$|I^j;uv7eZb?vyzn4f$~XG&^{9#+@}mEtqr z5*|)~%;D|8p~TC@4oTbEc{_<}`l_~-Kn2&j5HXGtQ;h0k#agt2Yd(MP3NP~*ryoNZ z6tRoOjkuUV^mQJ9G!U#osMsiarT3(MQN|Ixqc4tiaHp@oU0PPx|0GqU+5SDSYQ%+l zt+VU;_sCR9Jk54k^9878Uv1O0Htae(&BD#mDc5j9@!P@HP|c`URyx_lU*bJMaBbq? zWHPI3jbx+;Ndg#k`9K5PDCgjm&;PEU@$s=84iKDgIl`(L3j21fgx<}}!H@nF;&;Ns zf3ZHjZUy!OyFU{WaO|k~dCQZ@?elgJ#_elo96@|Uwrpa*=bDApRjN6MF_H5CG=MB> zOwP^FJyEc=SAxK*bwbqivYyqTibbFkkqx)Ow(0@TRd4Sy;@OTr9j{`>Arm#8LL!u6BBo(-k#*Muyqla@zu9 z&e3l<0ULe}Hn83E<8ZCnN}--tJf#basB91~K*cT3=$|KNa~xUIPxjY{pFO%9i~8iY zaAG8kt(@E$EUB+F!ko%MK;1U22FGXhIvFGE)467FG-sATIdtTdxG&K(iu$-fN@vEv zyS9V{PIL}g-K@UTA7V*e<@4?&=$^A`s`9FLVgRgR#g?q^dlBMg zSj+M*Y8FL8IHfQ_Yq)X?oS~T8t&wE20^@}w$GdYMDh)?@BC`2I>kN^b=LEh;)R#+N z<403a(Sr7RygrCF&MTdV+H}m<;BaH4(h+nN`$_n>RXQC-iv^iJ9c$p0tcFa4>uL{e z+iCj(<0N_TD_tc)tj9!$B@J&s@xEK4>UQpnaLe2bq>lktSx_N@!KaC*-;%3Pq%H3F;fUc%X#yJhibaI z?S4#d7#bKiSA4`)94Ju|jPnirL1YBo&vG%lM$3fCQ&^(R`C9*S`o>)w!ExQzUZ9 zbZIL0*4`tQTtYZAA8=Pq5O$^3Z}bcZsbc;*)hzY5b*X*p5;H?daG%2v(_|PjFMg-_ z^Q6(RbWqbZj7jQIy+XY^V|Z7szQWjRsZMZszoDV5aJZ-22t?eFf4&-Q-;?n^v$;JN z@BNCYf%cZ1jTo43Bw`J8Bwi~?j|AZ3qQBB_6pwVE)PQ`5s&b7Y?FSqe3RojaMw^V2Aln%z}&Xj5N3*1<8c)K_A2lFCX#~I;> zW_48xF)ZdBBM8&!SF;DnI}L+$*qf$m;(nCRBlIRWtO-2z-*V&0E7cb4lPHwGKdpWl zdcj+>lR4H}4YeN0J8O9Vf!$7OZJ!0;!i8vT8TNds8ni?7slyjOrof z^u)!YH>G&ox*2Roli4dyaa&tWYkf8+>dF_{ZaPPm0hg!a#D@3Y7IpdP_f;^M4=!`L zCM`()aCb}yP8c4->!KYT`YD-G-}ZA(9lLr@v;z{o!si4=BXtNZ?eUFUn@1}dr#0b@ z|EPG7*7Y~)y_fXudxt#q4fzi-Pjp12OY^+F_J&~;63?ejHnMd8z)Q9TFI0Pn6o|gK zO8D%JT$|058g5ALbZ7SYexMFJD=olS({_*jU`Q_+NQOafM?zb ztenS}r?#_Bq~|=?MwyDIW5uX+EX+?~%~gFakq?I|*0doUJwFy2us-IMrDrxH%H1u0UQBf ztTMFEs)CPHnQc7Gy}^(!YNAB_9-bo2+Mc~qtgKL@b69Iz5~VBvBXZp#d*^^ z!$@R0va)j7pLPPYu4&o)Vne#GdQUYCc-GZq5@h`h>Pj@N6=s2tFE5|D6LQvKPL$NY ztx`y2=F2D$cBCCZ3i>Mw#l#JrO#QAVdnFa(-R9#udFzG(srynR3wu6d#N{Wej;qsa zem~{MqH{LzArCKx2^@=bCHMZ@@A(Wvd9_Ym&t4f$BA(nWuT7Of_Kw?y4g)n@QQ{4y za~!@WK!b}x7l0nzdVRL*0hwvDH<8_9CezoAll{^mOTbtP z(ARvoR8jb44OZ^DvyIlEI1Md%iu5#hu(Q_Ke+JerqWCdV@*CY}dmR#r-`V#TCj2Bl z7i#nZ#$*WRdmF4)lt0X-siZx*Ee8le7byBAi=E^uEp&D_w?pi;}7K3Y|p*84cU$>SJ*<1x^HA zeq+wnS~!2XHqYln;J1R|&x__)>MSeuFn9aFSu$@E52@`4io0zdcFb4R2S`V8Ka0Pf z1VbkIa3c^(G1^WJ9YQNg+Dv`Lr>Re1CJVs|BmswHbqlObbz__AqG|3y#lpA)1A`5; zYI~D3r4Am183*HpwEfF611WAEEC|<-kx^F}ZMV=I(JyAFjMP*uaB{}Q2@gH>vnVoA zV(xwU@yv=X>2g^JR>$w~5SSiph^0l_!SjCd#Xznlb6j=0#AxVSA@pRDFl}F{+CF+Y zekMwWBr>rLZ1U5M=(u@30Dfa%DS9{7BAI21wW~+x7^|R`Dch3pX;CXQ zT5Mp4zPg{VNS}~6@1jQO>X#mNr$fI0-Py_mOa30CBB@dO9Pyl%v?;i>%(-dC=YM_i@UxCk{ywLWB>>V;)izBbQ`}Xrk(JK;SrS$ zC4U*i7`n-Y9-Lr+jDk1%xlx)2fo&?X&CT&S&O7nMjvs}UyPrtEJbA~rRjMZ|VG2!d zJShnA;}i3j^BSJ{IwJ*WgU(l7LYBZ^WhQzM$ z5=uDukqjwt+U1m>mN$vBf(vQiW{lASe^hM9g~>zf`L7R=&ZBOD`k#LGfht)W#c$^} zZ|I4#`*G=*^zIStO3>2N=-RYOmTyzH#p=^Atxa`R@=QiQWaq2g=40yR8R@nDv(Ex2 z6ACqoZX5*=ZCpHDusA!pxyeQPE;XL-eN%h>v}U%f6y)=b_SX9CA(F%7WP}(T--L_n zZ|l1b_DkSu^Hcfq4$d9MxSzY8G$Ej@>LG1O>y$0!+Q$NTU!fl@(u4YJ2*@LEJuda) zMDx-_NL?T?yWM`)Eisrj_*U=WqnNAAx_Gza`kX_@7cS<)2k|kiy--#l>%Xi9_HwF2 z`X<-cG_f9!GmyY1pfu^z2G7E|^x3yGIldx107))J^+McAv0RJ8!c*=37Re*0`$x4Sl5jHMo$iri>$BR3KzFH!67UFB#93!cur1gT4A&?NPd; z5i)|HM%jnFt-&d|(~ z)kXMu;4X@fqGIghm?eEjk|@}+FA9TypX=miLZIK7xp~`$d`3m+os}&}Umm59n~{HE z6o^bQeKpe#^q=kjuqFNAs(Dc(e{!E(uA1y3f&?(&Vsy)54OQ8y7@xBxmaheh9;uY= zF<+h>9v)S^Tp|vVsHVF0FYZV^>YlXO8~fInMx!iZJLll6SG&hww|W%Ld(D|=6}6NI zZ&nY-r5eaKc$UpGlz4e$F5VE_^rJOB>GT(^V-QM;DJX+G>0O*UbN^ZglA{@`Ie@a+4`yR5^T$8K;ROF$80dV zsFbu?JZ+s*F-tn3OB<8Api!uJyYEcX);9$z2W3o4NE=n4<;%kxguw`6_07flp~DP> z3e3K9MeqEc=oZnWM}j((zWyVjTFWoK4f`CfO^bwux`b64nn+o@tGIQ^7mrK5@h2r0 zoUG0A)H)D!^WlJ$RZA~OvR7bqt+pU$0?mI7W`DEPH z5i;7Q$2i;*Uu@I_AfcVG>#It8B?ibjrL@9@XaNj_q-lsdOz0H&8~P$|sU2w=gxbsYsBC zVu{{!-){KRIGE1Xv?-ZvujV(UIlOeZSuEg7D|hh0K9(0p6Muc0Owq)~T3Y^mv3~#w zAj-uEBtj#6TZXZ3*n6|jyhBCdFudhKC7&?<(kk|G!o|0`X}F2B!Lj+8w9B~7 z)xN4rqpU*Tkk;qmX;Aa3w2}B%D(0+2oaeF}^(J0Uh+^L?I~it_|JeO?HfV`!HDxPy z7>vW?>|b!zo>O+k5b$kxRUzcyNvBTgP^;wwp6m#BE*kP1^}57nD@iPY1(&qK_^h!m zhaD8DiN7U?n)Dp@_d5Nys1d~4c%1eZ+}bU+ni*?jP2N+sPFj=m;UUw_IXe!}H3a$~ z0vxpp9&RtVz10h%R zIb!?0**8+Ej^>}GG2OLLtSB!xM)HW>YMqc76&rjIbZt{>E~v2tm#y>#i$0Tt$xRV% z-{wBa`GsDeZn-&4GE3(8?R|8(+%F{#F3NY5-`Nj=UnL2>ue}&kmWHK-Y2_-N8XTmIMO87 zNI}ri+J0Pa10(wB{N2PRd$eud{g_w`%>}IywR>B~Zu}P2T4Q%l2&41U1DCq^Lze0X zwJ~o{2M8xxa@C3~Y_9F6l>W~xj_>opD}!9q!@@C#rKVHq^#3`Y_UD9 z4ENxO5|eW-<0D!NLilH-w|&OG@8-^Sm;cPzF^?W>r!WS9zNRVgqu4JTLRJWuY8_I| zyXgJBf?r=4FwGo`hRR;;_UGs+@C=u;Q?*75@-z{o^^``lj`y4!S9Pw}Z7wZQ&k0iR zJw~h96}0*6_>DGQ?Y6r+tIUzDOFac47bd(TWVVXEt$0}FO{tvGMzK86-XW(S`&j*h z4$CPCxs1Ra*k9H9yx0*7zC2NR{2A%KpZo;()oJ&7LHFw-i~hz{|EN^7rj>h(Ek!+| zYS1x)IY$zSrF}r?YM#mVCF+48XwdK|NByRQc&+?FgL%V5F{CbTDI#+rd6QulUz;v@ zZn>PTLn@#f$sh^|AOOA5+Z;nhZiHILQ(%vVa3t?7k4n;`8VO8=J|oYO@ido>Tv zb%z(k?zbmDNiw_!vNkYJ7Q1A03;FR)ANf6{jbI>p8bHa5)+i%UmfcvU~)>F=4BV z;C_*+IA|Pn(Pk-n#uHtkT|R5Z_TxhY5#QEC2`RDEn5N;Uua2$FO%~TlXXwzAIp!IV zWB8WNnvnUFkAs}q-l*Of-C22gsqP@S5y24YSB7%3a$E%tKeZ37{Msr}5zxMr8WlEs zUWX7+pP6n@77EzcE$JtdYTN7ZdKUQZOrQRnvg^IuK9=yVX^8+qA!Pi~bU8>&MfEi2 z?Oq}OD2T2JxDuX!62S1HgcjWe`dFp2;fLH4b;u4BNhBXh@j$UxHn4r@Fe1?rR51-kioWWiaLa~kCoPkxr%ztow)-ktn}9!4rc zmb-G2f{fdh3$%~AN~UJVZeWu{5dcsoznBq_=L%_HN2`%QZCbb|Xb_?={HXlj^)PY@*c|m-KqT1-N=o~E zX~wWK^&Q^^+DfO339>pyp|o`q_Fef_O+ zpM2H?(I4jT;v?EI4MGpNg(8lE{cxUX(s6P2y^7xTRjWrOrk08zNxo3;JImP!nD}il zD$PQ6;`7ba71lL!i65e)>WcaUBKG#G@sACTzFaWiuq1(Wn;nFff4Hj18p>0itbfID zjEZyb3oX;)w@KZfn{fnCLd_sC4i)`6Q9pOedv5^VqSDa=H#A@}$@XpkvG02+Z{Gr2 z>(*7!5G5NIg3^Ms)BO1LhywbOGmlins%%hQE+nU&I1JyEccEF}a8Zc{=XrIT_jZ>L zxf6rZ>fM;rd3RD^i+Ig7=0SuF%xT~4H{}Tb%EZU<)z>y3=W9z3r84pLY7(Bn*@Oi6 zX?m{OvFemBe`-rS_*#?w+r_TT>UipKmID@|S+b{>t&tsK$`B`e+ zPZ&VTMepe6iu`TX<@PjV>thBa#ojw2`63fo{SyqP^%}BiD1L~P9P`Y65bHC_gDh&a ze$LOMtf#5SWyPMb^h%vwz;k7j6>iVoCKBH|>T+1Y%y+T>g8;-%bQN}@{F zSg-+EqtF}7U8X0CsP59MS4p=8fubC1>gv3mCNJBTaR12qftw1KN$-UYp;mLXBZ7`baOsOZ-2wEyDEMZl^ z)TE&jXpEgjNYLXZ^Qd1*uxZPywuE{|Sxq1^>hIzyF5{?Vk?qGb9RjZejo`7z_x4Y= zMCrB?MsLSu5QK43x*ZlBp7n~eNFZlb!VwRQ@rI43CHKhEDnHJ;yE!c53t>w%b0;-% zg-jW|Y3k~ei#Gn$*8JT5s3NZI%oo@QN+GK?`05yB&0Mu=eUlY5&cE^1B}Y7KIYNK` z=>-GWf=+B7TyCool9dzrq+W>Luf7f-=AxzZd4t;|e5MacWkaom&sh!~4D7~lieUM+Y#=FIqN_v!B=SV!7tfpC>oi|_lU&eRL($EbfNhBd;8u$ z_-zP#dZmd^_5+99kGTSu^h`ca6$B~3{1u> zbtP&6^;IaH{}}DYPJ?{(#BK zr$!>>vh&j_TxpXO?bxY~!;h4=>3w-+i($^UZFJ!{uP23c?l=T>T@)QKj840=$ z1TB&dRx1ytMxh#He@9Eon7=gW@xEoLy>WVAL|HQzR16m+D}D}j*b;5Z8Rpv$rJBgy zIZ}}d`P_JD4>_)xx0iD5D-F0(TW|5eeu>?bLq-%i5tUWqrH${AuTw8zYmjBO#Wc<} zW=6%*>5u&kLMdiHubh(qYJOmUXP86$Q~Bhg(H>>$^VqJzii&LVO_An`tW~l% zb%k!rO;A+%OB`zZW@@yl!gr3{o5OOh+W7q#g$p5L8({Xg_XEt{zKQE}^wCM}kJ5=I0Htiy>Xe`;g z(u8N;GvzACaPl29_wu@U((^mP155PhNkkk%D_XLUf{~4(NxsMkUsPjs7cv8ZW0o}V z;qTeNBSU+_K(?#rz9Z?NVy(E+A6Us7F%B_tT~$=JX`a}QsYC@ldIg`_epaQ`%-K@P zAW+AEm-ia7?}pYWIwZ_FsvFzpA%?c#2S28xi5}0~o5Xr~ryIF7v}MUm{>02-QFF8a zySiO#q6jxh+t^s!Fqeyl+kbii+Z63x9tC-7F%356OGB9#hcZ_+7Up+D^6XTmm9+2_gYqe8JQ>Jr%%~d}!6}`; zu*>f##u(v~I=OD!W!5ZAx|=SQd@GbV<9zbc+bHm|Y_WtM-;_1&C&H#!Yf9qe*DzKm z;|Wpd+mV;4XcSTypyFlSs_crCtlaDAxWFCp@Ak?Y)OHRczrjAMQNA8;cat_PI83sa zbw3I>Ww+iZ7*O`1hQJ3N@yr4>8haTx)g_obes5XrstG??OiE?>T$Xeo%vv1i{@xYO zV%hLnQ!{zBosRLFWE|R0j4E;^;j7cora#Jm~tWk`fJ4Q99e{|`C zxSqsmuhh$^tJ#QKpCT~P@GS2qGQs!XzD||UNh2OTY$DcGoD)A90Y0GZsQ>YP?YZN{ zc8urr^g;e;K5Hu{bA(zJT%AvPzh19**}0bv~sfGv6XyGisBo1%1 z|Bwqf4O_`?QCSDQPhfE}QZ^{6VaE!GSJaKGH($%PYGq@ zw8twB=4ft%({FH)c^~NJ{=}*Mb8I*(x<`KL2L^Xxc*_ip8nspXL851w*1Msl_S}Y# z&O~ideqkJxB7ZPpL(7#O2AKQsKn>%wJ76wZz-^+?q-Cs{aqU68A41F_+ z6`{@V9$clu-9>wYjkf2d@TqJdWZsJ2#~V>q*%14Uyk3@_?G+q^(lsT#YW-g~B~$eG zu<0<@VlHfiXSd$*$Cu-0;oBpyYR?$@!O(8CpjoL-Qtr0iXC#I`@41#L2PF2>(=Q`b z(r&OD=J<2!Yl#)^@3&}v^ifix?7^*ms;l+OP%hl!{MZ(0zqvjfL8wb*ZYm2r9yNY zJF=8t6Sv}dnBUF6h7pM}R(^ncD_s(&@z&MYO&zB>t@(6av2E{cN0*6kHzIMWaP7%b ze2^&lIym9qj}9bBNO0oTVd>cD;qW~HMfK1}2eO#!mpkE?9Ea<>%-`qdXTvEOzIk{o zj?hts^`JUv4hZEF8y6W(dk~^1CTd733hqrYki?!U>+d1(8Q-OFiQP;vb@u(GZ)4av{q`P;T>2xu6X zbUx(6kyt&5BmNUjjq;=3j&Jq%aRN}YyWY%CfSM_lwp#fhBOBp}4k^W#dlAeA%E(S5 znUJN@zp|{Sau?WECYA$7!MP|gQ3X3plX z>96u?5~`cC9r?ffup%z5CU#K2jf<&qej}FL@^R=O`@*4h^0AMg)J zG6ba!$~crxC<{;~p)^5xP3wiS2&EOu9F%S-uX$^rbV2EZ(hp?>${3V(D9|_n6%-n% zKM6_#l-Kf=P-dXiLV4}XQ7EtFU+aIZ^R?_SlmRGHQ2vwt+J+V=ul098d9CX;&oq=@ zP+seQ)%Tk3wVo>|*HB({mOxpB@(5)U$`O>;@7dztK!!$lP#cMCUd@inf(6&fQ}53 literal 0 HcmV?d00001 diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index c52ef677fbf..cde6b741423 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -387,9 +387,11 @@ export abstract class PokemonSpeciesForm { case "four": case "droopy": case "stretchy": + case "hero": case "roaming": case "complete": case "10": + case "10-pc": case "super": case "unbound": case "pau": @@ -2355,11 +2357,11 @@ export function initSpecies() { new PokemonSpecies(Species.DRAKLOAK, 8, false, false, false, "Caretaker Pokémon", Type.DRAGON, Type.GHOST, 1.4, 11, Abilities.CLEAR_BODY, Abilities.INFILTRATOR, Abilities.CURSED_BODY, 410, 68, 80, 50, 60, 50, 102, 45, 50, 144, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.DRAGAPULT, 8, false, false, false, "Stealth Pokémon", Type.DRAGON, Type.GHOST, 3, 50, Abilities.CLEAR_BODY, Abilities.INFILTRATOR, Abilities.CURSED_BODY, 600, 88, 120, 75, 100, 75, 142, 45, 50, 300, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.ZACIAN, 8, false, true, false, "Warrior Pokémon", Type.FAIRY, null, 2.8, 110, Abilities.INTREPID_SWORD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, GrowthRate.SLOW, null, false, false, - new PokemonForm("Hero of Many Battles", "hero", Type.FAIRY, null, 2.8, 110, Abilities.INTREPID_SWORD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), + new PokemonForm("Hero of Many Battles", "hero-of-many-battles", Type.FAIRY, null, 2.8, 110, Abilities.INTREPID_SWORD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), new PokemonForm("Crowned", "crowned", Type.FAIRY, Type.STEEL, 2.8, 355, Abilities.INTREPID_SWORD, Abilities.NONE, Abilities.NONE, 700, 92, 150, 115, 80, 115, 148, 10, 0, 335), ), new PokemonSpecies(Species.ZAMAZENTA, 8, false, true, false, "Warrior Pokémon", Type.FIGHTING, null, 2.9, 210, Abilities.DAUNTLESS_SHIELD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, GrowthRate.SLOW, null, false, false, - new PokemonForm("Hero of Many Battles", "hero", Type.FIGHTING, null, 2.9, 210, Abilities.DAUNTLESS_SHIELD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), + new PokemonForm("Hero of Many Battles", "hero-of-many-battles", Type.FIGHTING, null, 2.9, 210, Abilities.DAUNTLESS_SHIELD, Abilities.NONE, Abilities.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true), new PokemonForm("Crowned", "crowned", Type.FIGHTING, Type.STEEL, 2.9, 785, Abilities.DAUNTLESS_SHIELD, Abilities.NONE, Abilities.NONE, 700, 92, 120, 140, 80, 140, 128, 10, 0, 335), ), new PokemonSpecies(Species.ETERNATUS, 8, false, true, false, "Gigantic Pokémon", Type.POISON, Type.DRAGON, 20, 950, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, GrowthRate.SLOW, null, false, true, @@ -2468,9 +2470,9 @@ export function initSpecies() { new PokemonSpecies(Species.WUGTRIO, 9, false, false, false, "Garden Eel Pokémon", Type.WATER, null, 1.2, 5.4, Abilities.GOOEY, Abilities.RATTLED, Abilities.SAND_VEIL, 425, 35, 100, 50, 50, 70, 120, 50, 50, 149, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.BOMBIRDIER, 9, false, false, false, "Item Drop Pokémon", Type.FLYING, Type.DARK, 1.5, 42.9, Abilities.BIG_PECKS, Abilities.KEEN_EYE, Abilities.ROCKY_PAYLOAD, 485, 70, 103, 85, 60, 85, 82, 25, 50, 243, GrowthRate.SLOW, 50, false), new PokemonSpecies(Species.FINIZEN, 9, false, false, false, "Dolphin Pokémon", Type.WATER, null, 1.3, 60.2, Abilities.WATER_VEIL, Abilities.NONE, Abilities.NONE, 315, 70, 45, 40, 45, 40, 75, 200, 50, 63, GrowthRate.SLOW, 50, false), - new PokemonSpecies(Species.PALAFIN, 9, false, false, false, "Dolphin Pokémon", Type.WATER, null, 1.3, 60.2, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.NONE, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, GrowthRate.SLOW, 50, false, false, + new PokemonSpecies(Species.PALAFIN, 9, false, false, false, "Dolphin Pokémon", Type.WATER, null, 1.3, 60.2, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.NONE, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, GrowthRate.SLOW, 50, false, true, new PokemonForm("Zero Form", "zero", Type.WATER, null, 1.3, 60.2, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 457, 100, 70, 72, 53, 62, 100, 45, 50, 160, false, null, true), - new PokemonForm("Hero Form", "hero", Type.WATER, null, 1.8, 97.4, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 650, 100, 160, 97, 106, 87, 100, 45, 50, 160, false, null), + new PokemonForm("Hero Form", "hero", Type.WATER, null, 1.8, 97.4, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 650, 100, 160, 97, 106, 87, 100, 45, 50, 160), ), new PokemonSpecies(Species.VAROOM, 9, false, false, false, "Single-Cyl Pokémon", Type.STEEL, Type.POISON, 1, 35, Abilities.OVERCOAT, Abilities.NONE, Abilities.SLOW_START, 300, 45, 70, 63, 30, 45, 47, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.REVAVROOM, 9, false, false, false, "Multi-Cyl Pokémon", Type.STEEL, Type.POISON, 1.8, 120, Abilities.OVERCOAT, Abilities.NONE, Abilities.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false), From 99e17c94ebb206935a050ae06b55f3028f1ade05 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Fri, 31 May 2024 11:33:16 -0500 Subject: [PATCH 30/39] Fix Zacian & Zamazenta form changes breaking Forgot to update this, oops. --- src/data/pokemon-forms.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 3cc6e095aae..ebcf1c34f33 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -689,10 +689,10 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.DURALUDON, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], [Species.ZACIAN]: [ - new SpeciesFormChange(Species.ZACIAN, "hero", "crowned", new SpeciesFormChangeItemTrigger(FormChangeItem.RUSTED_SWORD)) + new SpeciesFormChange(Species.ZACIAN, "hero-of-many-battles", "crowned", new SpeciesFormChangeItemTrigger(FormChangeItem.RUSTED_SWORD)) ], [Species.ZAMAZENTA]: [ - new SpeciesFormChange(Species.ZAMAZENTA, "hero", "crowned", new SpeciesFormChangeItemTrigger(FormChangeItem.RUSTED_SHIELD)) + new SpeciesFormChange(Species.ZAMAZENTA, "hero-of-many-battles", "crowned", new SpeciesFormChangeItemTrigger(FormChangeItem.RUSTED_SHIELD)) ], [Species.ETERNATUS]: [ new SpeciesFormChange(Species.ETERNATUS, "", SpeciesFormKey.ETERNAMAX, new SpeciesFormChangeManualTrigger()), From 63a416a65b71c6495ab754b02124e391cdc5fca4 Mon Sep 17 00:00:00 2001 From: MadridPawmot <42167718+Alekemon@users.noreply.github.com> Date: Fri, 31 May 2024 21:05:04 +0200 Subject: [PATCH 31/39] [enhancement] Added Firebreather trainer class (#1409) * Add files via upload * Update trainer-type.ts * Update biomes.ts * Update trainer-config.ts * Update trainer-names.ts * Add Spanish localization * Update trainers.ts * Update trainers.ts * Update trainers.ts * Update trainers.ts * Update trainers.ts * Update trainers.ts * Finished adding placeholder strings for each language * Updated German translation Thanks to CodeTappert * Updated trainer.ts to resolve conflicts * Update trainers.ts to resolve conflicts * Update trainers.ts * Fixed syntax error * Update dialogue.ts * Re-added dialogue back * Added firebreather name string to Korean locale * Added dialogue string to locale * Added dialogue string to locale * Update dialogue.ts * Added dialogue string to locale * Added dialogue string to locale * Added dialogue string to locale * Added dialogue string to locale * Added dialogue string to locale * Added requested changes * Added requested changes * Added requested changes * Update dialogue.ts * Update dialogue.ts * Update dialogue.ts * Update dialogue.ts * Update dialogue.ts * Finished adding requested changes to locales * Added requested changes --- public/images/trainer/firebreather.json | 41 ++++++++++++++++++++++++ public/images/trainer/firebreather.png | Bin 0 -> 3696 bytes src/data/biomes.ts | 6 +++- src/data/dialogue.ts | 14 ++++++++ src/data/enums/trainer-type.ts | 1 + src/data/trainer-config.ts | 2 ++ src/data/trainer-names.ts | 2 ++ src/locales/de/dialogue.ts | 12 +++++++ src/locales/de/trainers.ts | 1 + src/locales/en/dialogue.ts | 12 +++++++ src/locales/en/trainers.ts | 1 + src/locales/es/dialogue.ts | 12 +++++++ src/locales/es/trainers.ts | 1 + src/locales/fr/dialogue.ts | 12 +++++++ src/locales/fr/trainers.ts | 1 + src/locales/it/dialogue.ts | 12 +++++++ src/locales/it/trainers.ts | 1 + src/locales/ko/dialogue.ts | 12 +++++++ src/locales/ko/trainers.ts | 1 + src/locales/pt_BR/dialogue.ts | 12 +++++++ src/locales/pt_BR/trainers.ts | 1 + src/locales/zh_CN/dialogue.ts | 12 +++++++ src/locales/zh_CN/trainers.ts | 1 + src/locales/zh_TW/dialogue.ts | 12 +++++++ src/locales/zh_TW/trainers.ts | 1 + 25 files changed, 182 insertions(+), 1 deletion(-) create mode 100644 public/images/trainer/firebreather.json create mode 100644 public/images/trainer/firebreather.png diff --git a/public/images/trainer/firebreather.json b/public/images/trainer/firebreather.json new file mode 100644 index 00000000000..7bc1cd3586f --- /dev/null +++ b/public/images/trainer/firebreather.json @@ -0,0 +1,41 @@ +{ + "textures": [ + { + "image": "firebreather.png", + "format": "RGBA8888", + "size": { + "w": 80, + "h": 72 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 80, + "h": 72 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 80, + "h": 72 + }, + "frame": { + "x": 0, + "y": 0, + "w": 80, + "h": 72 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:f692676a166fc1915532cd94d5799af4:fb833f76fb6797474657726bb59a7eee:aeb55e30992938f494b6cd2420158dda$" + } +} diff --git a/public/images/trainer/firebreather.png b/public/images/trainer/firebreather.png new file mode 100644 index 0000000000000000000000000000000000000000..829496bd56e4976e1cad255c736f93265354ba3f GIT binary patch literal 3696 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 O07*qoM6N<$f&c)H2?*~1 literal 0 HcmV?d00001 diff --git a/src/data/biomes.ts b/src/data/biomes.ts index 4a29d10debb..bfee8904c46 100644 --- a/src/data/biomes.ts +++ b/src/data/biomes.ts @@ -1823,7 +1823,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.VOLCANO]: { - [BiomePoolTier.COMMON]: [], + [BiomePoolTier.COMMON]: [ TrainerType.FIREBREATHER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], @@ -7304,6 +7304,10 @@ export function initBiomes() { [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ] ] ], + [ TrainerType.FIREBREATHER, [ + [ Biome.VOLCANO, BiomePoolTier.COMMON ] + ] + ], [ TrainerType.BROCK, [ [ Biome.CAVE, BiomePoolTier.BOSS ] ] diff --git a/src/data/dialogue.ts b/src/data/dialogue.ts index 089082bee81..bed72ceb9bb 100644 --- a/src/data/dialogue.ts +++ b/src/data/dialogue.ts @@ -421,6 +421,20 @@ export const trainerTypeDialogue: TrainerTypeDialogue = { ] } ], + [TrainerType.FIREBREATHER]: [ + { + encounter: [ + "dialogue:firebreather.encounter.1", + "dialogue:firebreather.encounter.2", + "dialogue:firebreather.encounter.3", + ], + victory: [ + "dialogue:firebreather.victory.1", + "dialogue:firebreather.victory.2", + "dialogue:firebreather.victory.3", + ] + } + ], [TrainerType.BROCK]: { encounter: [ "dialogue:brock.encounter.1", diff --git a/src/data/enums/trainer-type.ts b/src/data/enums/trainer-type.ts index 84fac0e4408..3b7e27a49e1 100644 --- a/src/data/enums/trainer-type.ts +++ b/src/data/enums/trainer-type.ts @@ -16,6 +16,7 @@ export enum TrainerType { DANCER, DEPOT_AGENT, DOCTOR, + FIREBREATHER, FISHERMAN, GUITARIST, HARLEQUIN, diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index 11671110611..83c4f45b244 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -989,6 +989,8 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.DEPOT_AGENT]: new TrainerConfig(++t).setMoneyMultiplier(1.45).setEncounterBgm(TrainerType.CLERK), [TrainerType.DOCTOR]: new TrainerConfig(++t).setHasGenders("Nurse", "lass").setHasDouble("Medical Team").setMoneyMultiplier(3).setEncounterBgm(TrainerType.CLERK) .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.HEAL_PULSE)), + [TrainerType.FIREBREATHER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK) + .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SMOG) || s.isOfType(Type.FIRE)), [TrainerType.FISHERMAN]: new TrainerConfig(++t).setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.BACKPACKER).setSpecialtyTypes(Type.WATER) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.THREE_WEAK_SAME, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.SIX_WEAKER) .setSpeciesPools({ diff --git a/src/data/trainer-names.ts b/src/data/trainer-names.ts index e85ee93d96f..0aa5bb594d4 100644 --- a/src/data/trainer-names.ts +++ b/src/data/trainer-names.ts @@ -36,6 +36,7 @@ const trainerNameConfigs: TrainerNameConfigs = { [TrainerType.DANCER]: new TrainerNameConfig(TrainerType.DANCER), [TrainerType.DEPOT_AGENT]: new TrainerNameConfig(TrainerType.DEPOT_AGENT), [TrainerType.DOCTOR]: new TrainerNameConfig(TrainerType.DOCTOR).hasGenderVariant("Nurse"), + [TrainerType.FIREBREATHER]: new TrainerNameConfig(TrainerType.FIREBREATHER), [TrainerType.FISHERMAN]: new TrainerNameConfig(TrainerType.FISHERMAN), [TrainerType.GUITARIST]: new TrainerNameConfig(TrainerType.GUITARIST), [TrainerType.HARLEQUIN]: new TrainerNameConfig(TrainerType.HARLEQUIN), @@ -87,6 +88,7 @@ export const trainerNamePools = { [TrainerType.DANCER]: ["Brian","Davey","Dirk","Edmond","Mickey","Raymond","Cara","Julia","Maika","Mireille","Ronda","Zoe"], [TrainerType.DEPOT_AGENT]: ["Josh","Hank","Vincent"], [TrainerType.DOCTOR]: [["Hank","Jerry","Jules","Logan","Wayne","Braid","Derek","Heath","Julius","Kit","Graham"],["Kirsten","Sachiko","Shery","Carol","Dixie","Mariah"]], + [TrainerType.FIREBREATHER]: ["Bill","Burt","Cliff","Dick","Lyle","Ned","Otis","Ray","Richard","Walt"], [TrainerType.FISHERMAN]: ["Andre","Arnold","Barney","Chris","Edgar","Henry","Jonah","Justin","Kyle","Martin","Marvin","Ralph","Raymond","Scott","Stephen","Wilton","Tully","Andrew","Barny","Carter","Claude","Dale","Elliot","Eugene","Ivan","Ned","Nolan","Roger","Ronald","Wade","Wayne","Darian","Kai","Chip","Hank","Kaden","Tommy","Tylor","Alec","Brett","Cameron","Cody","Cole","Cory","Erick","George","Joseph","Juan","Kenneth","Luc","Miguel","Travis","Walter","Zachary","Josh","Gideon","Kyler","Liam","Murphy","Bruce","Damon","Devon","Hubert","Jones","Lydon","Mick","Pete","Sean","Sid","Vince","Bucky","Dean","Eustace","Kenzo","Leroy","Mack","Ryder","Ewan","Finn","Murray","Seward","Shad","Wharton","Finley","Fisher","Fisk","River","Sheaffer","Timin","Carl","Ernest","Hal","Herbert","Hisato","Mike","Vernon","Harriet","Marina","Chase"], [TrainerType.GUITARIST]: ["Anna","Beverly","January","Tina","Alicia","Claudia","Julia","Lidia","Mireia","Noelia","Sara","Sheila","Tatiana"], [TrainerType.HARLEQUIN]: ["Charley","Ian","Jack","Kerry","Louis","Pat","Paul","Rick","Anders","Clarence","Gary"], diff --git a/src/locales/de/dialogue.ts b/src/locales/de/dialogue.ts index 6f02521569d..c69fb1aacd0 100644 --- a/src/locales/de/dialogue.ts +++ b/src/locales/de/dialogue.ts @@ -367,6 +367,18 @@ export const PGMdialogue: DialogueTranslationEntries = { 1: "Ich werde für das nächste Rennen tunen." }, }, + "firebreather": { + "encounter": { + 1: "My flames shall devour you!", + 2: "My soul is on fire. I'll show you how hot it burns!", + 3: "Step right up and take a look!" + }, + "victory": { + 1: "I burned down to ashes...", + 2: "Yow! That's hot!", + 3: "Ow! I scorched the tip of my nose!" + }, + }, "brock": { "encounter": { 1: "Meine Expertise in Bezug auf Gesteins-Pokémon wird dich besiegen! Komm schon!", diff --git a/src/locales/de/trainers.ts b/src/locales/de/trainers.ts index aa03cf6c903..6ac1abbcabf 100644 --- a/src/locales/de/trainers.ts +++ b/src/locales/de/trainers.ts @@ -48,6 +48,7 @@ export const trainerClasses: SimpleTranslationEntries = { "depot_agent": "Bahnangestellter", "doctor": "Arzt", "doctor_female": "Ärztin", + "firebreather": "Feuerspucker", "fisherman": "Angler", "fisherman_female": "Angler", // Seems to be the same in german but exists in other languages like italian "gentleman": "Gentleman", diff --git a/src/locales/en/dialogue.ts b/src/locales/en/dialogue.ts index 2712161b2bf..a89c90c97d6 100644 --- a/src/locales/en/dialogue.ts +++ b/src/locales/en/dialogue.ts @@ -359,6 +359,18 @@ export const PGMdialogue: DialogueTranslationEntries = { 1: "I'll tune up for the next race." }, }, + "firebreather": { + "encounter": { + 1: "My flames shall devour you!", + 2: "My soul is on fire. I'll show you how hot it burns!", + 3: "Step right up and take a look!" + }, + "victory": { + 1: "I burned down to ashes...", + 2: "Yow! That's hot!", + 3: "Ow! I scorched the tip of my nose!" + }, + }, "brock": { "encounter": { 1: "My expertise on Rock-type Pokémon will take you down! Come on!", diff --git a/src/locales/en/trainers.ts b/src/locales/en/trainers.ts index 7f83f8169f6..cd6f78ccc13 100644 --- a/src/locales/en/trainers.ts +++ b/src/locales/en/trainers.ts @@ -48,6 +48,7 @@ export const trainerClasses: SimpleTranslationEntries = { "depot_agent": "Depot Agent", "doctor": "Doctor", "doctor_female": "Doctor", + "firebreather": "Firebreather", "fisherman": "Fisherman", "fisherman_female": "Fisherman", "gentleman": "Gentleman", diff --git a/src/locales/es/dialogue.ts b/src/locales/es/dialogue.ts index 6d74177f252..faabab3077d 100644 --- a/src/locales/es/dialogue.ts +++ b/src/locales/es/dialogue.ts @@ -359,6 +359,18 @@ export const PGMdialogue: DialogueTranslationEntries = { 1: "I'll tune up for the next race." }, }, + "firebreather": { + "encounter": { + 1: "My flames shall devour you!", + 2: "My soul is on fire. I'll show you how hot it burns!", + 3: "Step right up and take a look!" + }, + "victory": { + 1: "I burned down to ashes...", + 2: "Yow! That's hot!", + 3: "Ow! I scorched the tip of my nose!" + }, + }, "brock": { "encounter": { 1: "My expertise on Rock-type Pokémon will take you down! Come on!", diff --git a/src/locales/es/trainers.ts b/src/locales/es/trainers.ts index 9860af13266..3e2b2b1a788 100644 --- a/src/locales/es/trainers.ts +++ b/src/locales/es/trainers.ts @@ -48,6 +48,7 @@ export const trainerClasses: SimpleTranslationEntries = { "depot_agent": "Ferroviario", "doctor": "Enfermero", "doctor_female": "Enfermera", + "firebreather": "Comefuegos", "fisherman": "Pescador", "fisherman_female": "Pescadora", "gentleman": "Aristócrata", diff --git a/src/locales/fr/dialogue.ts b/src/locales/fr/dialogue.ts index 746359b36cd..befc9d96caa 100644 --- a/src/locales/fr/dialogue.ts +++ b/src/locales/fr/dialogue.ts @@ -359,6 +359,18 @@ export const PGMdialogue: DialogueTranslationEntries = { 1: "I'll tune up for the next race." }, }, + "firebreather": { + "encounter": { + 1: "My flames shall devour you!", + 2: "My soul is on fire. I'll show you how hot it burns!", + 3: "Step right up and take a look!" + }, + "victory": { + 1: "I burned down to ashes...", + 2: "Yow! That's hot!", + 3: "Ow! I scorched the tip of my nose!" + }, + }, "brock": { "encounter": { 1: "My expertise on Rock-type Pokémon will take you down! Come on!", diff --git a/src/locales/fr/trainers.ts b/src/locales/fr/trainers.ts index 55178fe3da3..6ed221a7b86 100644 --- a/src/locales/fr/trainers.ts +++ b/src/locales/fr/trainers.ts @@ -48,6 +48,7 @@ export const trainerClasses: SimpleTranslationEntries = { "depot_agent": "Cheminot", "doctor": "Docteur", "doctor_female": "Docteure", + "firebreather": "Firebreather", "fisherman": "Pêcheur", "fisherman_female": "Pêcheuse", "gentleman": "Gentleman", diff --git a/src/locales/it/dialogue.ts b/src/locales/it/dialogue.ts index 6d74177f252..faabab3077d 100644 --- a/src/locales/it/dialogue.ts +++ b/src/locales/it/dialogue.ts @@ -359,6 +359,18 @@ export const PGMdialogue: DialogueTranslationEntries = { 1: "I'll tune up for the next race." }, }, + "firebreather": { + "encounter": { + 1: "My flames shall devour you!", + 2: "My soul is on fire. I'll show you how hot it burns!", + 3: "Step right up and take a look!" + }, + "victory": { + 1: "I burned down to ashes...", + 2: "Yow! That's hot!", + 3: "Ow! I scorched the tip of my nose!" + }, + }, "brock": { "encounter": { 1: "My expertise on Rock-type Pokémon will take you down! Come on!", diff --git a/src/locales/it/trainers.ts b/src/locales/it/trainers.ts index 534fe12832d..9c3f025541e 100644 --- a/src/locales/it/trainers.ts +++ b/src/locales/it/trainers.ts @@ -48,6 +48,7 @@ export const trainerClasses: SimpleTranslationEntries = { "depot_agent": "Depot Agent", "doctor": "Doctor", "doctor_female": "Doctor", + "firebreather": "Firebreather", "fisherman": "Fisherman", "fisherman_female": "Fisherman", "gentleman": "Gentleman", diff --git a/src/locales/ko/dialogue.ts b/src/locales/ko/dialogue.ts index 201581c0555..8fb8da64206 100644 --- a/src/locales/ko/dialogue.ts +++ b/src/locales/ko/dialogue.ts @@ -359,6 +359,18 @@ export const PGMdialogue: DialogueTranslationEntries = { 1: "I'll tune up for the next race." }, }, + "firebreather": { + "encounter": { + 1: "My flames shall devour you!", + 2: "My soul is on fire. I'll show you how hot it burns!", + 3: "Step right up and take a look!" + }, + "victory": { + 1: "I burned down to ashes...", + 2: "Yow! That's hot!", + 3: "Ow! I scorched the tip of my nose!" + }, + }, "brock": { "encounter": { 1: "My expertise on Rock-type Pokémon will take you down! Come on!", diff --git a/src/locales/ko/trainers.ts b/src/locales/ko/trainers.ts index e119cac0bf1..62e8de560d2 100644 --- a/src/locales/ko/trainers.ts +++ b/src/locales/ko/trainers.ts @@ -48,6 +48,7 @@ export const trainerClasses: SimpleTranslationEntries = { "depot_agent": "역무원", "doctor": "의사", "doctor_female": "간호사", // doctor_f.png 파일이 간호사 + "firebreather": "Firebreather", "fisherman": "낚시꾼", "fisherman_female": "낚시꾼", "gentleman": "신사", diff --git a/src/locales/pt_BR/dialogue.ts b/src/locales/pt_BR/dialogue.ts index 6d74177f252..faabab3077d 100644 --- a/src/locales/pt_BR/dialogue.ts +++ b/src/locales/pt_BR/dialogue.ts @@ -359,6 +359,18 @@ export const PGMdialogue: DialogueTranslationEntries = { 1: "I'll tune up for the next race." }, }, + "firebreather": { + "encounter": { + 1: "My flames shall devour you!", + 2: "My soul is on fire. I'll show you how hot it burns!", + 3: "Step right up and take a look!" + }, + "victory": { + 1: "I burned down to ashes...", + 2: "Yow! That's hot!", + 3: "Ow! I scorched the tip of my nose!" + }, + }, "brock": { "encounter": { 1: "My expertise on Rock-type Pokémon will take you down! Come on!", diff --git a/src/locales/pt_BR/trainers.ts b/src/locales/pt_BR/trainers.ts index 5486d2ebb4d..ee6a78dd926 100644 --- a/src/locales/pt_BR/trainers.ts +++ b/src/locales/pt_BR/trainers.ts @@ -48,6 +48,7 @@ export const trainerClasses: SimpleTranslationEntries = { "depot_agent": "Ferroviário", "doctor": "Doutor", "doctor_female": "Doutora", + "firebreather": "Firebreather", "fishermen": "Pescador", "fishermen_female": "Pescadora", "gentleman": "Cavalheiro", diff --git a/src/locales/zh_CN/dialogue.ts b/src/locales/zh_CN/dialogue.ts index 6d74177f252..faabab3077d 100644 --- a/src/locales/zh_CN/dialogue.ts +++ b/src/locales/zh_CN/dialogue.ts @@ -359,6 +359,18 @@ export const PGMdialogue: DialogueTranslationEntries = { 1: "I'll tune up for the next race." }, }, + "firebreather": { + "encounter": { + 1: "My flames shall devour you!", + 2: "My soul is on fire. I'll show you how hot it burns!", + 3: "Step right up and take a look!" + }, + "victory": { + 1: "I burned down to ashes...", + 2: "Yow! That's hot!", + 3: "Ow! I scorched the tip of my nose!" + }, + }, "brock": { "encounter": { 1: "My expertise on Rock-type Pokémon will take you down! Come on!", diff --git a/src/locales/zh_CN/trainers.ts b/src/locales/zh_CN/trainers.ts index 0dfa83a0d36..ae0680a3c75 100644 --- a/src/locales/zh_CN/trainers.ts +++ b/src/locales/zh_CN/trainers.ts @@ -48,6 +48,7 @@ export const trainerClasses: SimpleTranslationEntries = { "depot_agent": "铁路员工", "doctor": "医生", "doctor_female": "医生", + "firebreather": "Firebreather", "fisherman": "垂钓者", "fisherman_female": "垂钓者", "gentleman": "绅士", diff --git a/src/locales/zh_TW/dialogue.ts b/src/locales/zh_TW/dialogue.ts index 4e42f8f5833..7cb29ec8191 100644 --- a/src/locales/zh_TW/dialogue.ts +++ b/src/locales/zh_TW/dialogue.ts @@ -359,6 +359,18 @@ export const PGMdialogue: DialogueTranslationEntries = { 1: "I'll tune up for the next race." }, }, + "firebreather": { + "encounter": { + 1: "My flames shall devour you!", + 2: "My soul is on fire. I'll show you how hot it burns!", + 3: "Step right up and take a look!" + }, + "victory": { + 1: "I burned down to ashes...", + 2: "Yow! That's hot!", + 3: "Ow! I scorched the tip of my nose!" + }, + }, "brock": { "encounter": { 1: "My expertise on Rock-type Pokémon will take you down! Come on!", diff --git a/src/locales/zh_TW/trainers.ts b/src/locales/zh_TW/trainers.ts index 19529af4660..f20ee156c3a 100644 --- a/src/locales/zh_TW/trainers.ts +++ b/src/locales/zh_TW/trainers.ts @@ -48,6 +48,7 @@ export const trainerClasses: SimpleTranslationEntries = { "depot_agent": "鐵路員工", "doctor": "醫生", "doctor_female": "醫生", + "firebreather": "Firebreather", "fisherman": "垂釣者", "fisherman_female": "垂釣者", "gentleman": "紳士", From e0bc1d8781befa1db11539486f7c559068e8c3ce Mon Sep 17 00:00:00 2001 From: Amani H <109637146+xsn34kzx@users.noreply.github.com> Date: Fri, 31 May 2024 15:31:11 -0400 Subject: [PATCH 32/39] [Item] Add Toxic Orb and Flame Orb (#1574) * Add Toxic Orb and Flame Orb * Change Weighting Logic & Functions * Adjust Party Filter during Weighting * Add Dynamic Weight Ceilings * Refactor for Performance/Cleanliness * Adjust Party Filter to Check Status Applicability * Cover Same & Different Status Cases * Adjust Full Heal & Restore Weighting * Cover Unwanted Status Case * Fix Wrong Status Effect on Reload --- public/images/items.json | 44 +++++++++++++++++++++- public/images/items.png | Bin 51675 -> 128274 bytes public/images/items/flame_orb.png | Bin 0 -> 367 bytes public/images/items/toxic_orb.png | Bin 0 -> 408 bytes src/locales/en/modifier-type.ts | 3 ++ src/modifier/modifier-type.ts | 52 +++++++++++++++++++++++++- src/modifier/modifier.ts | 60 ++++++++++++++++++++++++++++++ src/phases.ts | 4 +- 8 files changed, 159 insertions(+), 4 deletions(-) create mode 100644 public/images/items/flame_orb.png create mode 100644 public/images/items/toxic_orb.png diff --git a/public/images/items.json b/public/images/items.json index 05f715ff078..dc05a39354d 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -7400,7 +7400,49 @@ "w": 16, "h": 16 } - } + }, + { + "filename": "toxic_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 379, + "y": 274, + "w": 18, + "h": 18 + } + }, + { + "filename": "flame_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 379, + "y": 292, + "w": 18, + "h": 18 + } + } ] } ], diff --git a/public/images/items.png b/public/images/items.png index 9af295e16ad5205282e3d7fb3feb1486a3a6c1f2..d19bb003b934b7a2a53f2354da25d7122983df98 100644 GIT binary patch literal 128274 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Ξ-O3I)TW0kwEt}#8M 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 N002ovPDHLkV1hVdnbH6N literal 0 HcmV?d00001 diff --git a/public/images/items/toxic_orb.png b/public/images/items/toxic_orb.png new file mode 100644 index 0000000000000000000000000000000000000000..7fb36db516ec36ae30a5acdc3f004d8540051f1e GIT binary patch literal 408 zcmV;J0cZY+P)o4842D%^XlNK17#LVsI9OOXSXkJ{=p*bA1_uiR0}BHU!#e+Nb=9(Lk#o5VvF~zj zl5_Rx*Dqy5E3eJU@hJmj1+oIO6sW4|KGwcX(3 z?bVaBhC1Je%Tw6ma&JZ40iuOa0dVlT=*eyk`LCYZk4IDn=)$ctM1hOUu24fH0qhPh zis|5E|HT^xY3hwSCv{8E5bU^HiK{ON0}Qejd72>`i=fyUejf3&4p7NGyUMYG9T zBU?5j?+moK0sv@(0KN-#c0^@Rn&pe8@8a14%oKCKZqXW&7xTnenhI0HLiv&Z+<;L>xAu9J1yZJ}@MlkEP8% z34kGDfHgiwvi7Tej{h^@+;?gZ%ndMgE(2r*vI5_s2=^iBj^Ta)0000 new PokemonHeldItemModifierType("modifierType:ModifierType.LEFTOVERS", "leftovers", (type, args) => new Modifiers.TurnHealModifier(type, (args[0] as Pokemon).id)), SHELL_BELL: () => new PokemonHeldItemModifierType("modifierType:ModifierType.SHELL_BELL", "shell_bell", (type, args) => new Modifiers.HitHealModifier(type, (args[0] as Pokemon).id)), + TOXIC_ORB: () => new PokemonHeldItemModifierType("modifierType:ModifierType.TOXIC_ORB", "toxic_orb", (type, args) => new Modifiers.TurnStatusEffectModifier(type, (args[0] as Pokemon).id)), + FLAME_ORB: () => new PokemonHeldItemModifierType("modifierType:ModifierType.FLAME_ORB", "flame_orb", (type, args) => new Modifiers.TurnStatusEffectModifier(type, (args[0] as Pokemon).id)), + BATON: () => new PokemonHeldItemModifierType("modifierType:ModifierType.BATON", "stick", (type, args) => new Modifiers.SwitchEffectTransferModifier(type, (args[0] as Pokemon).id)), SHINY_CHARM: () => new ModifierType("modifierType:ModifierType.SHINY_CHARM", "shiny_charm", (type, _args) => new Modifiers.ShinyRateBoosterModifier(type)), @@ -1247,7 +1251,12 @@ const modifierPool: ModifierPool = { [ModifierTier.GREAT]: [ new WeightedModifierType(modifierTypes.GREAT_BALL, 6), new WeightedModifierType(modifierTypes.FULL_HEAL, (party: Pokemon[]) => { - const statusEffectPartyMemberCount = Math.min(party.filter(p => p.hp && !!p.status).length, 3); + const statusEffectPartyMemberCount = Math.min(party.filter(p => p.hp && !!p.status && !p.getHeldItems().some(i => { + if (i instanceof Modifiers.TurnStatusEffectModifier) { + return (i as Modifiers.TurnStatusEffectModifier).getStatusEffect() === p.status.effect; + } + return false; + })).length, 3); return statusEffectPartyMemberCount * 6; }, 18), new WeightedModifierType(modifierTypes.REVIVE, (party: Pokemon[]) => { @@ -1270,7 +1279,12 @@ const modifierPool: ModifierPool = { return thresholdPartyMemberCount; }, 3), new WeightedModifierType(modifierTypes.FULL_RESTORE, (party: Pokemon[]) => { - const statusEffectPartyMemberCount = Math.min(party.filter(p => p.hp && !!p.status).length, 3); + const statusEffectPartyMemberCount = Math.min(party.filter(p => p.hp && !!p.status && !p.getHeldItems().some(i => { + if (i instanceof Modifiers.TurnStatusEffectModifier) { + return (i as Modifiers.TurnStatusEffectModifier).getStatusEffect() === p.status.effect; + } + return false; + })).length, 3); const thresholdPartyMemberCount = Math.floor((Math.min(party.filter(p => (p.getInverseHp() >= 150 || p.getHpRatio() <= 0.5) && !p.isFainted()).length, 3) + statusEffectPartyMemberCount) / 2); return thresholdPartyMemberCount; }, 3), @@ -1312,6 +1326,40 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.MINT, 4), new WeightedModifierType(modifierTypes.RARE_EVOLUTION_ITEM, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 15) * 4, 32), 32), new WeightedModifierType(modifierTypes.AMULET_COIN, 3), + new WeightedModifierType(modifierTypes.TOXIC_ORB, (party: Pokemon[]) => { + let weight = 0; + const filteredParty = party.filter(p => (p.status?.effect === StatusEffect.TOXIC || p.canSetStatus(StatusEffect.TOXIC, true, true)) + && !p.hasAbility(Abilities.FLARE_BOOST) + && !p.getHeldItems().some(i => i instanceof Modifiers.TurnStatusEffectModifier)); + if (filteredParty.some(p => p.hasAbility(Abilities.TOXIC_BOOST) || p.hasAbility(Abilities.POISON_HEAL))) { + weight = 4; + } else if (filteredParty.some(p => p.hasAbility(Abilities.GUTS) || p.hasAbility(Abilities.QUICK_FEET) || p.hasAbility(Abilities.MARVEL_SCALE))) { + weight = 2; + } else { + const moveList = [Moves.FACADE, Moves.TRICK, Moves.FLING, Moves.SWITCHEROO, Moves.PSYCHO_SHIFT]; + if (filteredParty.some(p => p.getMoveset().some(m => moveList.includes(m.moveId)))) { + weight = 1; + } + } + return Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 15) * weight, 8 * weight); + }, 32), + new WeightedModifierType(modifierTypes.FLAME_ORB, (party: Pokemon[]) => { + let weight = 0; + const filteredParty = party.filter(p => (p.status?.effect === StatusEffect.BURN || p.canSetStatus(StatusEffect.BURN, true, true)) + && !p.hasAbility(Abilities.TOXIC_BOOST) && !p.hasAbility(Abilities.POISON_HEAL) + && !p.getHeldItems().some(i => i instanceof Modifiers.TurnStatusEffectModifier)); + if (filteredParty.some(p => p.hasAbility(Abilities.FLARE_BOOST))) { + weight = 4; + } else if (filteredParty.some(p => p.hasAbility(Abilities.GUTS) || p.hasAbility(Abilities.QUICK_FEET) || p.hasAbility(Abilities.MARVEL_SCALE))) { + weight = 2; + } else { + const moveList = [Moves.FACADE, Moves.TRICK, Moves.FLING, Moves.SWITCHEROO, Moves.PSYCHO_SHIFT]; + if (filteredParty.some(p => p.getMoveset().some(m => moveList.includes(m.moveId)))) { + weight = 1; + } + } + return Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 15) * weight, 8 * weight); + }, 32), new WeightedModifierType(modifierTypes.REVIVER_SEED, 4), new WeightedModifierType(modifierTypes.CANDY_JAR, 5), new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 10), diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 9035eeda9dd..716a48cda89 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -851,6 +851,66 @@ export class TurnHealModifier extends PokemonHeldItemModifier { } } +/** + * Modifier used for held items, namely Toxic Orb and Flame Orb, that apply a + * set {@linkcode StatusEffect} at the end of a turn. + * @extends PokemonHeldItemModifier + * @see {@linkcode apply} + */ +export class TurnStatusEffectModifier extends PokemonHeldItemModifier { + /** The status effect to be applied by the held item */ + private effect: StatusEffect; + + constructor (type: ModifierType, pokemonId: integer, stackCount?: integer) { + super(type, pokemonId, stackCount); + + switch (type.id) { + case "TOXIC_ORB": + this.effect = StatusEffect.TOXIC; + break; + case "FLAME_ORB": + this.effect = StatusEffect.BURN; + break; + } + } + + /** + * Checks if {@linkcode modifier} is an instance of this class, + * intentionally ignoring potentially different {@linkcode effect}s + * to prevent held item stockpiling since the item obtained first + * would be the only item able to {@linkcode apply} successfully. + * @override + * @param modifier {@linkcode Modifier} being type tested + * @return true if {@linkcode modifier} is an instance of + * TurnStatusEffectModifier, false otherwise + */ + matchType(modifier: Modifier): boolean { + return modifier instanceof TurnStatusEffectModifier; + } + + clone() { + return new TurnStatusEffectModifier(this.type, this.pokemonId, this.stackCount); + } + + /** + * Tries to inflicts the holder with the associated {@linkcode StatusEffect}. + * @param args [0] {@linkcode Pokemon} that holds the held item + * @returns true if the status effect was applied successfully, false if + * otherwise + */ + apply(args: any[]): boolean { + return (args[0] as Pokemon).trySetStatus(this.effect, true, undefined, undefined, this.type.name); + } + + getMaxHeldItemCount(pokemon: Pokemon): integer { + return 1; + } + + getStatusEffect(): StatusEffect { + return this.effect; + } +} + export class HitHealModifier extends PokemonHeldItemModifier { constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { super(type, pokemonId, stackCount); diff --git a/src/phases.ts b/src/phases.ts index 58bfb527e44..b23f848397d 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -6,7 +6,7 @@ import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMov import { Mode } from "./ui/ui"; import { Command } from "./ui/command-ui-handler"; import { Stat } from "./data/pokemon-stat"; -import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier, overrideModifiers, overrideHeldItems, BypassSpeedChanceModifier } from "./modifier/modifier"; +import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier, overrideModifiers, overrideHeldItems, BypassSpeedChanceModifier, TurnStatusEffectModifier } from "./modifier/modifier"; import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler"; import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, PokeballType } from "./data/pokeball"; import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./data/battle-anims"; @@ -2289,6 +2289,8 @@ export class TurnEndPhase extends FieldPhase { applyPostTurnAbAttrs(PostTurnAbAttr, pokemon); + this.scene.applyModifiers(TurnStatusEffectModifier, pokemon.isPlayer(), pokemon); + this.scene.applyModifiers(TurnHeldItemTransferModifier, pokemon.isPlayer(), pokemon); pokemon.battleSummonData.turnCount++; From ff5b227a6b6d231775926514608a5a1bda9e917e Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Fri, 31 May 2024 17:34:02 -0400 Subject: [PATCH 33/39] [Documentation] Add documentation to egg-hatch-phase.ts (#1650) * Add documentation * Ben has made me take more sanity damage --- src/egg-hatch-phase.ts | 89 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/src/egg-hatch-phase.ts b/src/egg-hatch-phase.ts index 11b71d8fbb5..f13097ac7eb 100644 --- a/src/egg-hatch-phase.ts +++ b/src/egg-hatch-phase.ts @@ -14,30 +14,51 @@ import { EggTier } from "./data/enums/egg-type"; import PokemonInfoContainer from "./ui/pokemon-info-container"; import EggsToHatchCountContainer from "./ui/eggs-to-hatch-count-container"; +/** + * Class that represents egg hatching + */ export class EggHatchPhase extends Phase { + /** The egg that is hatching */ private egg: Egg; + /** The number of eggs that are hatching */ private eggsToHatchCount: integer; + /** The container that lists how many eggs are hatching */ private eggsToHatchCountContainer: EggsToHatchCountContainer; + /** The scene handler for egg hatching */ private eggHatchHandler: EggHatchSceneHandler; + /** The phaser gameobject container that holds everything */ private eggHatchContainer: Phaser.GameObjects.Container; + /** The phaser image that is the background */ private eggHatchBg: Phaser.GameObjects.Image; + /** The phaser rectangle that overlays during the scene */ private eggHatchOverlay: Phaser.GameObjects.Rectangle; + /** The phaser container that holds the egg */ private eggContainer: Phaser.GameObjects.Container; + /** The phaser sprite of the egg */ private eggSprite: Phaser.GameObjects.Sprite; + /** The phaser sprite of the cracks in an egg */ private eggCrackSprite: Phaser.GameObjects.Sprite; + /** The phaser sprite that represents the overlaid light rays */ private eggLightraysOverlay: Phaser.GameObjects.Sprite; + /** The phaser sprite of the hatched Pokemon */ private pokemonSprite: Phaser.GameObjects.Sprite; + /** The phaser sprite for shiny sparkles */ private pokemonShinySparkle: Phaser.GameObjects.Sprite; + /** The {@link PokemonInfoContainer} of the newly hatched Pokemon */ private infoContainer: PokemonInfoContainer; + /** The newly hatched {@link PlayerPokemon} */ private pokemon: PlayerPokemon; + /** The index of which egg move is unlocked. 0-2 is common, 3 is rare */ private eggMoveIndex: integer; + /** Internal booleans representing if the egg is hatched, able to be skipped, or skipped */ private hatched: boolean; private canSkip: boolean; private skipped: boolean; + /** The sound effect being played when the egg is hatched */ private evolutionBgm: AnySound; constructor(scene: BattleScene, egg: Egg, eggsToHatchCount: integer) { @@ -117,6 +138,7 @@ export class EggHatchPhase extends Phase { this.eggHatchContainer.add(this.infoContainer); + // The game will try to unfuse any Pokemon even though eggs should not generate fused Pokemon in the first place const pokemon = this.generatePokemon(); if (pokemon.fusionSpecies) { pokemon.clearFusionSpecies(); @@ -187,6 +209,13 @@ export class EggHatchPhase extends Phase { super.end(); } + /** + * Function that animates egg shaking + * @param intensity of horizontal shaking. Doubled on the first call (where count is 0) + * @param repeatCount the number of times this function should be called (asynchronous recursion?!?) + * @param count the current number of times this function has been called. + * @returns nothing since it's a Promise + */ doEggShake(intensity: number, repeatCount?: integer, count?: integer): Promise { return new Promise(resolve => { if (repeatCount === undefined) { @@ -226,6 +255,10 @@ export class EggHatchPhase extends Phase { }); } + /** + * Tries to skip the hatching animation + * @returns false if cannot be skipped or already skipped. True otherwise + */ trySkip(): boolean { if (!this.canSkip || this.skipped) { return false; @@ -239,6 +272,9 @@ export class EggHatchPhase extends Phase { return true; } + /** + * Plays the animation of an egg hatch + */ doHatch(): void { this.canSkip = false; this.hatched = true; @@ -268,6 +304,9 @@ export class EggHatchPhase extends Phase { }); } + /** + * Function to do the logic and animation of completing a hatch and revealing the Pokemon + */ doReveal(): void { // Update/reduce count of hatching eggs when revealed if count is at least 1 // If count is 0, hide eggsToHatchCountContainer instead @@ -333,10 +372,21 @@ export class EggHatchPhase extends Phase { }); } + /** + * Helper function to generate sine. (Why is this not a Utils?!?) + * @param index random number from 0-7 being passed in to scale pi/128 + * @param amplitude Scaling + * @returns a number + */ sin(index: integer, amplitude: integer): number { return amplitude * Math.sin(index * (Math.PI / 128)); } + /** + * Animates spraying + * @param intensity number of times this is repeated (this is a badly named variable) + * @param offsetY how much to offset the Y coordinates + */ doSpray(intensity: integer, offsetY?: number) { this.scene.tweens.addCounter({ repeat: intensity, @@ -347,6 +397,11 @@ export class EggHatchPhase extends Phase { }); } + /** + * Animates a particle used in the spray animation + * @param trigIndex Used to modify the particle's vertical speed, is a random number from 0-7 + * @param offsetY how much to offset the Y coordinate + */ doSprayParticle(trigIndex: integer, offsetY: number) { const initialX = this.eggHatchBg.displayWidth / 2; const initialY = this.eggHatchBg.displayHeight / 2 + offsetY; @@ -387,12 +442,22 @@ export class EggHatchPhase extends Phase { updateParticle(); } + + /** + * Generates a Pokemon to be hatched by the egg + * @returns the hatched PlayerPokemon + */ generatePokemon(): PlayerPokemon { let ret: PlayerPokemon; - let speciesOverride: Species; + let speciesOverride: Species; // SpeciesOverride should probably be a passed in parameter for future species-eggs this.scene.executeWithSeedOffset(() => { + /** + * Manaphy eggs have a 1/8 chance of being Manaphy and 7/8 chance of being Phione + * Legendary eggs pulled from the legendary gacha have a 50% of being converted into + * the species that was the legendary focus at the time + */ if (this.egg.isManaphyEgg()) { const rand = Utils.randSeedInt(8); @@ -437,6 +502,18 @@ export class EggHatchPhase extends Phase { .map(s => parseInt(s) as Species) .filter(s => !pokemonPrevolutions.hasOwnProperty(s) && getPokemonSpecies(s).isObtainable() && ignoredSpecies.indexOf(s) === -1); + /** + * Pokemon that are cheaper in their tier get a weight boost. Regionals get a weight penalty + * 1 cost mons get 2x + * 2 cost mons get 1.5x + * 4, 6, 8 cost mons get 1.75x + * 3, 5, 7, 9 cost mons get 1x + * Alolan, Galarian, and Paldean mons get 0.5x + * Hisui mons get 0.125x + * + * The total weight is also being calculated EACH time there is an egg hatch instead of being generated once + * and being the same each time + */ let totalWeight = 0; const speciesWeights = []; for (const speciesId of speciesPool) { @@ -464,6 +541,16 @@ export class EggHatchPhase extends Phase { ret = this.scene.addPlayerPokemon(pokemonSpecies, 1, undefined, undefined, undefined, false); } + /** + * Non Shiny gacha Pokemon have a 1/128 chance of being shiny + * Shiny gacha Pokemon have a 1/64 chance of being shiny + * IVs are rolled twice and the higher of each stat's IV is taken + * The egg move gacha doubles the rate of rare egg moves but the base rates are + * Common: 1/48 + * Rare: 1/24 + * Epic: 1/12 + * Legendary: 1/6 + */ ret.trySetShiny(this.egg.gachaType === GachaType.SHINY ? 1024 : 512); ret.variant = ret.shiny ? ret.generateVariant() : 0; From 2dff35c407ff64d300c6ead2ee8f46efeab5cbc7 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Fri, 31 May 2024 14:35:52 -0700 Subject: [PATCH 34/39] Fix Neutralizing Gas self-suppression (#1662) --- src/field/pokemon.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 2ff53249aeb..02565e799b7 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -978,7 +978,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (this.isOnField() && !ability.hasAttr(SuppressFieldAbilitiesAbAttr)) { const suppressed = new Utils.BooleanHolder(false); - this.scene.getField(true).map(p => { + this.scene.getField(true).filter(p => p !== this).map(p => { if (p.getAbility().hasAttr(SuppressFieldAbilitiesAbAttr) && p.canApplyAbility()) { p.getAbility().getAttrs(SuppressFieldAbilitiesAbAttr).map(a => a.apply(this, false, suppressed, [ability])); } From cf9992f9b81b0e88e915fef21b3b95ff398a89e3 Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Fri, 31 May 2024 17:42:38 -0400 Subject: [PATCH 35/39] Add code (#1661) --- src/modifier/modifier-type.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index dcfdfa27113..dac99bb2376 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -757,14 +757,23 @@ export class EvolutionItemModifierType extends PokemonModifierType implements Ge } } +/** + * Class that represents form changing items + */ export class FormChangeItemModifierType extends PokemonModifierType implements GeneratedPersistentModifierType { public formChangeItem: FormChangeItem; constructor(formChangeItem: FormChangeItem) { super("", FormChangeItem[formChangeItem].toLowerCase(), (_type, args) => new Modifiers.PokemonFormChangeItemModifier(this, (args[0] as PlayerPokemon).id, formChangeItem, true), (pokemon: PlayerPokemon) => { - if (pokemonFormChanges.hasOwnProperty(pokemon.species.speciesId) && !!pokemonFormChanges[pokemon.species.speciesId].find(fc => fc.trigger.hasTriggerType(SpeciesFormChangeItemTrigger) - && (fc.trigger as SpeciesFormChangeItemTrigger).item === this.formChangeItem)) { + // Make sure the Pokemon has alternate forms + if (pokemonFormChanges.hasOwnProperty(pokemon.species.speciesId) + // Get all form changes for this species with an item trigger, including any compound triggers + && pokemonFormChanges[pokemon.species.speciesId].filter(fc => fc.trigger.hasTriggerType(SpeciesFormChangeItemTrigger)) + // Returns true if any form changes match this item + .map(fc => fc.findTrigger(SpeciesFormChangeItemTrigger) as SpeciesFormChangeItemTrigger) + .flat().flatMap(fc => fc.item).includes(this.formChangeItem) + ) { return null; } From 7f1e94e8cad91ce61323d91188e8fecee6ee8f56 Mon Sep 17 00:00:00 2001 From: Jaime Date: Fri, 31 May 2024 23:50:03 +0200 Subject: [PATCH 36/39] [Bug] Fix status abilities not considering Comatose (fixes #1639) (#1641) --- src/data/ability.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index c95123df2aa..42787132b21 100755 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -3716,9 +3716,9 @@ export function initAbilities() { .conditionalAttr(pokemon => !Utils.randSeedInt(3), PostTurnResetStatusAbAttr), new Ability(Abilities.GUTS, 3) .attr(BypassBurnDamageReductionAbAttr) - .conditionalAttr(pokemon => !!pokemon.status, BattleStatMultiplierAbAttr, BattleStat.ATK, 1.5), + .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(Abilities.COMATOSE), BattleStatMultiplierAbAttr, BattleStat.ATK, 1.5), new Ability(Abilities.MARVEL_SCALE, 3) - .conditionalAttr(pokemon => !!pokemon.status, BattleStatMultiplierAbAttr, BattleStat.DEF, 1.5) + .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(Abilities.COMATOSE), BattleStatMultiplierAbAttr, BattleStat.DEF, 1.5) .ignorable(), new Ability(Abilities.LIQUID_OOZE, 3) .attr(ReverseDrainAbAttr), @@ -3813,7 +3813,7 @@ export function initAbilities() { .condition(getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN)), new Ability(Abilities.QUICK_FEET, 4) .conditionalAttr(pokemon => pokemon.status ? pokemon.status.effect === StatusEffect.PARALYSIS : false, BattleStatMultiplierAbAttr, BattleStat.SPD, 2) - .conditionalAttr(pokemon => !!pokemon.status, BattleStatMultiplierAbAttr, BattleStat.SPD, 1.5), + .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(Abilities.COMATOSE), BattleStatMultiplierAbAttr, BattleStat.SPD, 1.5), new Ability(Abilities.NORMALIZE, 4) .attr(MoveTypeChangeAttr, Type.NORMAL, 1.2, (user, target, move) => move.id !== Moves.HIDDEN_POWER && move.id !== Moves.WEATHER_BALL && move.id !== Moves.NATURAL_GIFT && move.id !== Moves.JUDGMENT && move.id !== Moves.TECHNO_BLAST), From 218cf025a354f5d78354d12e49007d84d7b8bfd7 Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Fri, 31 May 2024 18:15:41 -0400 Subject: [PATCH 37/39] [Bug] Fix rare shiny Cleffa using default icon (#1642) * [Bug] Fix rare shiny Cleffa using default icon Rare shiny Cleffa's icon was showing up as the default colouration, or as shiny Lugia's icon. This fixes that by adding it to the spritesheet pokemon_icons_2v and its .json, where the console log suggested it should belong. * [Bug] Fix rare shiny Cleffa using default icon Rare shiny Cleffa's icon was showing up as the default colouration, or as shiny Lugia's icon. This fixes that by adding it to the spritesheet pokemon_icons_2v and its .json, where the console log suggested it should belong. --- public/images/pokemon_icons_2v.json | 21 +++++++++++++++++++++ public/images/pokemon_icons_2v.png | Bin 23038 -> 61556 bytes 2 files changed, 21 insertions(+) diff --git a/public/images/pokemon_icons_2v.json b/public/images/pokemon_icons_2v.json index ec7b15f3470..91e9722109c 100644 --- a/public/images/pokemon_icons_2v.json +++ b/public/images/pokemon_icons_2v.json @@ -1332,6 +1332,27 @@ "h": 24 } }, + { + "filename": "173_2", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 11, + "y": 11, + "w": 18, + "h": 18 + }, + "frame": { + "x": 174, + "y": 253, + "w": 18, + "h": 18 + } + }, { "filename": "173_3", "rotated": false, diff --git a/public/images/pokemon_icons_2v.png b/public/images/pokemon_icons_2v.png index 61638709ae063b6f8527bed7cccb7b80e13b0bdf..fd3f3a9c502005c989b2fecad6693321437d83cb 100644 GIT binary patch literal 61556 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

c6cueugNeTY;}vlWl66E!3SC4ubD zr`+i{Sul8pZT-n(3z*|v7ynhI{RHM@>!2CQ#PN;+mJ!Ts*{4hUG^&P8;5A2d?|22= zhyN2;dy&thM?VYH?cz*%w_A%*E@0ZF-#?#1gVw(jNofL~k&!oKklXXrz`!^ko8fxy z(*2nqR(ePFQP#+0sXGPojQ1kphjIjm;BDs}uECVW9YS*Vo5rft4Nk|Uze9jG73KZ; zbjTj%H?~MPtIOcKTyS5pP6Yf%3CrhV{G80LsY)IUD;9FTjhkE|^dQoTx-Gq>M&e~# z0G2SK9zn?UxXsLQ>*=RZU=%;DajrE(Jw!Z4Gbts z-!3`ME0pU|!;q#qpRBESE#9a~3mYi%R-CB*@4~^fp}+x_oWjgA>)uNqh|0IsfhVC{ z_p&U6%3!*oga2w`bud>pTcjVA7!kI68r#^t-8R zROsn2)V5hJ{M<7o`=s$)E&Ifc7AG{~|0SO_5(Q&F@`h(72dF^QSip0htaQfr&^K_O zy>uPs+WLbg3fE-wxiog3z(~MGpP#}^$iT|9+rt7ND_*L*!}Wdk_6-m&PprZzUQ&Gy z!WZeH-D+arKA#VU73QBgGs?%}Z@v#_rnvjux&Pbi4Syz07e~|B#Y#|A`PPijzRX8D z^@(o=UyHYKyT8fUf=EQkdG$62xm&{HtcEXhN1X~LCnH*DY(50^m?67Gz^Qg(ogykE zWOqO`-Kw3fX&lTdnyh*Qpee4FW)2SQ;+Mfu2gmFUN6i;tV!@YpQoi=0jb#u^BJh|6s$olqv#J=*oD1B&ozDX@10zObf+M z*7^B6%gngEm7g#0yp{@VU5)ibY_K(~TQY@XH?T=1}AFiypS@u1Xpui)k=P>9zG2>*B ze`LrGOh*S~XdZnCgG9Bnwy~{OY!+;Q+*7!yWN0X@Bi%gwn?@xQtUjDbxf9HwCmw1_ zISjS>L|MwPINac+iisY3@Mr10Eg8(h%&he&*1e#Xpg3qWmjoYuz#^B8YjaAzw$gr( zq94Wz1+r_fav#OgYd9?-c;|)H?Cq(PqFgMDE4NH?143r9%i;kK)oDPqE4m>2Y0Dli zE)r#%<v+SyqAzQx|zas-~Wvs17JIgshN#Jh9wBHhjWPd zcbB3mIQ;h>EIvlGwKSa!sC{bc(zSCMhG1p1rDh)c8<LLSjQVnR2eBbDDWoSL>(h zzM}g@=m@qX{hhyH$(c21w|oZEX+tdpz8}Buc{HAy8sCCQLH*%d{*%1K57B#%UXZ+v zR{0b>z@7O+?b`Aig5@d{l2~a_AE*LXa;1&`F%KAIQhX*1pgTW;jmFqDu5HNNBEKkipWF`Hou_VjeG z)lch+?C!~;Td&@Vc;#`V!AkZ3-4T<#H?t?X;g=fKcK1r~`2++N;(u|C z)Qs=l2qO(!oBEs-LLR-i}u zQ`o=-w;%gnqB$8?%VaI2eEsVMY!-6}@?#b6Vf+iQOJTFQJlq6P~c)dSS?f}O8$|*CwayzkeonHQn zLCG!V=AOyNz4rbxiaQu=35TdN>|sc5OJul+kYsNFK`vo#%)1DOfS?=3!v zN3BmJ&6Vx4nLp@&O68@Q64Iv$idOq%cd8rK>n+wAVN)RG^kQ3ABft6cN%XZT@fR>7 zG>Q4E=DASXas1`AXHtHNOUnJ+u|cj|iTm|_|F)~OVOkW10LlvckKrK~?%)~@_RS!@Zz+ec}`i3PI z(+$u3w~A++#gyi$d`vHz?dCY-=i)5bju&j4kzgvcoh4$lPgJ%P)xyxexQ!2-V#OBY zeav6YY*Q#qxW84%B`k;Kj@0!TUOTp=4G@}Q?qs>D%NmXIx@tf`0yDt~v4GL4-BR5hJYO?$fivu0GlIYv zy5D!ghE*)qZymg;yT@iV0ONy@bJqW>)wmZU?Ad!vart07z`Jy2HAZ95_`C!3GZFIs zSw70 zg=bSD#FfQ5#x7@JYze#8iMhWQPGoLSsR~{SQcG+lyCGGk1gK6IUnm0;;Nq_2Ezv-t zGsRHM7&Aa*Tk@s=U-o&na@w<_#$+kH9gcO2%yha#*H*7KAvH|NTk#ICE6vIG)%8xh zn{$CLtL(&$%K~F61%3=iIS@p`&S}Hae?`4f^NVb>!0?v3?`90VCKJ^fw6$?ZOUor$ z)4cDZt^UAy1cCad?S+xT;FHCqn4^IoZ-kfyS5ey6-lM0JI4#PU6yN~3@Eje!=baK# zjG&5+J`)87PZR3<1p*Iy^jwKP&z#E_;h~M6LV=3Fz3VQr-aot5ITAoC9pS-~TXga5 zx9Bg1e2%89Wo#1pmN!<|G#rweez*I@c}%24WdiCab@G6Jv<$aS=Pik-J}3jNdi9GK z;82Ml8eQ5Zk&E);POiZ=fae$z!qi|&h4yfsd5njU>FMZ~!^~Pc?P(?6;r!mJW>mel zxaw4!_;wv?Pa-ngh}VJNT~c07f-!wq4Rl{iI66ER-FjyyCn;FtmGkc0%bxs z1`rWO_Tp#iolWxwD~4zG{pTKU#yBOHA6FjMW5BjWZ9(Qi9y4>oM#Y`ie=@YGcNyP_ zGy4eJb?Pd4p~}-|73$`k6Mqj#$s#^pj&TJQ3H4Q1NG0dfL@poP@YbYr>aV2VqLZoU9&N8aH8j7O>@9($65tN-0|T^V~wtAK*{ae z0y8N%@W+eg%Y1^1by>OsXq4MEuWD(D0-lqM1v1~r}X937g3>b`HVsRnF(4WAsi&5W`^oS zLuu;KSzZ|A{A^@KW26vE_)ILVTjr-i6!Z8Djz{`;4v~u$1Ka8+@Vd8C6>00-ZxUe7 z!%z!}QeL}jGxN<*7r~&9CE)^s#N}5N_5^4KS>5@rdOOvt3EhC_0la3{c@8hhd$w3j zur21F{+G!Wk1!gG#0&|oMZbrLu}AdhW;FcUgzu2)!h6?89q7W)-C#Ee>WEFAQ%+j> z4c#pHC_$E360xw^|CaiOCwrjCHzTdQkq6#iw?*pKYo^ZS%{hCkm0W3P>Ji_{-4T6-+qDj$bBT&6BhBzdF)gSIcU4u(VA8H_rL%v^+=4BbrJ3l^@S- z({BgJjR4igV_i`|tR9O27A?Ca6G1K{X0M;>B4#{xkp#feX7u$A-bM8`P{IB0tgA1a zF89E^;~W&a|B5o1AowNC{-BMe>4JCr&W1&+Pp93EPk-HIwVOD`A5|Q)MEurWEIV;ICMQvH+VPR7ELr)SgLmt!YcP~RjDLvwQv@a>Ry5}Nap^xtC({@#-{?Vt zxizLtAxQ1AmWD1JfFez%_&LB$H1zKw@Aht!+pXJLru}0!iQHmz@1V=i%F&}m4`-Ty zR(Un=E(t=bqqyS0$TkreM2P}>H`S*BPUcw#@!*5LMZ;4oG2PQQK|gC53R$32DhYFh z@p)?1ALoSmec>wzdm=Y{SJRdHuR_ef01@bTcCTLtJ=)oqDSCp=d*D-w3jYRrMdHIq zJ8?S(#6UFhXlJuY7lUj&qfBuwI7hXh+_MXn8bX+Y3B) z=Xp#5lz0Ixw`_H__GIVYFAnsl^LDBM9vS1g6g5__GK#^6F;BbwoX~-UR`-D~P=69A zFMNS}BC{j^5m7nelw|zru5=Q|LN}hWCf8T;pGyLQaQB0BzsanX#*TarId5Gj4)z@v zQ>=9ybC{apvn(i5$zme}pF$iYWqaae%HW_f4}^*?Z;h^hRWE)1(NX)XO02&s>6rA% zAV~Vi7{Sv*#pdmtZM89AGGQ_KOKPAbhi;U=Z$e{r?=mg(Gu1SELaA;#WU%k z)+`<@8H)MBb4FJ6V+lvwE!;GB;-N-N`lIG+0$a+{W>whnsv7bJI(`VGHq|St60gVH z(hckt**trmena#I$VrF6a$2@%d!okq4=4p_K=m++ymMK05$}pK&MKlrhdIY3G<7&^ zF4Pe=6WDE1)2+sViB+*xq>ue?O`$HdOpY`W5USeu$4l%hC!vk2WsW36bpg3&05n0a1RkzpVZztb#K3MPOOQv&6V|l768zKSU;nP!+AiwKh6a1 zZ*OTssJ&bhD4g?Q4k)oZR~s=Ni2N90Mxv7LLEQxFXiP0{Ko!!9a0Gnf2(+=}coA2j zsHEhl6cT|D!vW18X5sR$z#1NM(i&vmep{TdCA~m|pZu;Nb-VIzT`*3-N-_1)vx*^= zGJBL~Bt3!D@xFt>EP>qs{kOEI?#KFp{ZU{E(*GJ|5ofNKLivFTXOZ_ zW5RZ)qZqxuf&p(x>mG?y`dAyz2JUT!TqeR1E}OXPvtI{~ar)wb4U0=k-gp$XDGasv zyUo-)WP3&esI9yjDH9jt@-v@E7<5#HmY)R3E|%S=J2b=FemV?~yo`lqW_MT-P-}rM z$q_rAhH=LghbBTzpzn)$`dbR`*nP%|DWf4M^hy)B`x0a#uS;BG$D*1ujDz+V%>|#{CGQPs}l+zdA3C#8Z2O;qoo6{6KanGvgRsQ+B!38|s zA-^U3=&j>Sv!BDqxmH3a1t=(w_eF)y`n8yWV~fO7caNLEsGfc*urMJt8cM0J+7Gam zk3se+1JYOV`o3=#Xa58uXUw1|!5^si879^7W=cA-<2fY$#cg?l(@sfq9fRG{m}b`5 z*YDp`iGuVfdV#H>9SM~>@E(A;?bT(s2(tYw(o8{06@_=#aN0+tYgF)Q{A%zo`IFoF zcLDQ)g>J!iIy5(R`sq(o`qvI^)sODF2a`Ht_CA-F#K!z;dMETiEEGYPMrYwjei_iI zX&X3z;0ERYl(?LA56zveM*yidAN7S(_ivz|I=d4Zy%?Im&WnM^Mx&Oq%fNkLeqCp8r+fQqSEs7k}J%4Ji`t_|bWrp(K?puQy z%&HjE;M`s#L@@XUj)OP^DGm3=B$_&z>aeP1BRalnzxd+|!=VNOn#p$iCgxMZM zL{zA?gg5)$X^oO_OTD5+@w>NM27hE7``7n$oX~&-Cj@DJ@Nib8jrSLU2qhmlJ`vkv z70hoKAm^y(waIxl0q6}cpC}k$onD7+fTXC0oH$r-f9$RKsxNS#{mg(RS(VgY03}1tvpD61?#D;yO%ps zJVTPlRqL5{ADbnr;P+4o0z(3TWrJJWo4RKD5{?my|LB&VL2{ER;YY34QjTb2os9xO zGdAxt$e^no^02#(c_x?Ur?o`9h6spHID1tq=$0eFNXYEyB6@U{tJxCLp6(5s)CEn{O7f8Zgmw z5+_m*P_ztS+~QuB7Iq?!Rqf)#W&)A{cR-d6A35l2E!ZxXa_}3|;``b{)W3geR|m}o zbHg>OIv2Tx3*Avdu!Y2M)ZM8*b# zvv+s%hAzyRJB5KrkOsqtR@qPBPL3-E*cGnVWxARXh?tmL>cQ<#da8g>%JKcyc2Ka| z$!emt-`%iak7+b)SBhVz3Lsrss7eOu1OXaAzbL=mXMa8}riu4=-6s#GJ_I!bV-}&8 z`qe*{7QQv$&}MMq$O|5W4)cMvqk>^az;;K}?-)3M2UM|HS!YU7vf*XD65usX);fv9 z<9Nharc&%?OoT$bk+d2exKo9DrrhdmL246o|qD^r79J#P4*68H7Vl|XK)NFlmKtJFYExYV-L}7F~uNbsxK~98Y z-ajg|!l0YIz)>L!;8@XMAxfgxB~UT5p;#n}X@lfHj?)S$IvCV9T$XW7 z+v-^-60bQl84-^@Q0wpttvn)0;CQ9@V%Sjf-*5s)%ICZX34VOt7!!K{#b-^VV|nd9 z0W_-V)QojEx(@W)y|gZ3S*yMUWtLvZqSo?Rt)jq?grJ& zPb6qkhhpQsakc21fVE&D*H!5tws|Fr;(;fFIsBy|XhxigP3r%?zhFOq$!^KT)CZhB zVQB%QySbYhtE2!JE*XWN_7`V!!guFv~A<+gTGw~N*wE3pXt#ig=#fPK)3-2Q7s z)-n(O8d)Xofy^{9uuHL6%Kn6RE*>#5&`x1NM2+nqUOn^Vm)XgCq{P|p z#6Y0NK5=640a1jB7C@swMcxGE-@=Zq4Vdx*&M->SXuBtdI4#gA#RgSs2DpPy||H*ySK zg*eLi2J3;oh0!@LB5i=GCnfj?y5a=S%-1(ofu9rg-VR>dh)raG4yagWLh0*7_nPs? zubS(~o@*Opc>rz8m{f3?*b`=?;QBxf2l;H=mPktMSfe|Y+~H~@cHI6Ex4ZevdCX?C z!r$ihIJf_1Pb6s8+vuhCFQ2_6%~z%qGRWBw_$HUm$*dvQuiW2CA%fvVN+%m~4fuAV z3~)z-%fUlh%R`+4oVzZ@vGe}i&dFG>PqVb*aMVULXo=)L3I=AAgKhSPDmLHqv<770 z(`*1+{!j0P;(}&AI5s3lTxz7fb(p|21K=Mcz9JK%w5#VoN3_o`Up7Oawi6U!H51sS z_rOHL$N~|GIHv%?cbr%Znm2q*3jyYrcW&DD-C=#v{Faw)GfP=cza05Ez{UyY= z%JG0Fe!j7I0D}%pPyU%A3Dxt{S}6yPfivN-W}Yp1<4R26kA4E~0tdPDq~V{CZODisWzaO&3kz_H{@A-;mBl0f={x*w}h+H^?y7+X?x zCVi7+QgCwObmDx1c>4bN#=qmfiLc@7Fx7_A~Rn85) z^*F#^fmw6g{_o9=z-nLm3zi=`gj5b8eN1Jk8brihMV*<;P(Dvno2^uSn#atM+T-6S`B-uU3$oKA+5Z1@N{P5FVG}&CZyR=-) zsPcI`MZ{k``Vk&ykl@*I+)}hBl3AOb%)wOt4YOr4HfwxA)tNO+d-K*}mb5B4Xd|!q z`(|da)Z+>XghBr;QOhlKqGERUCYE>6Ru%;H`hHmndl`4B+>td(I$JVs@H!Z1E_-?W zKCn8mT&#L(maEv^PnCu`wIE3z0~Q(C6}_h_CV>dFf_hrAwaa%<=SBJTt+F4R$WJS= zFND4sM9O=DIjYx+SmIrc+j>qb+PTu*oRv@u^%dQn^twn9_1`p2`rIFy!UhGSo6-dA ze^OJO_^o<_oj)NP?dL$9XMDW{VH0gv`P_IYkx8tz&$ypY1!1!*NIqUYUGu9(X8O8XJ-*-BG^3{k&)gt>5`6Zf9{z`32uxt%7-#Wb&qbE+xnlkk$q;jN+7{ zt9J6nLUT()-U6NTZ@k20C{F-9pcG_9qS{xUk-tVZcUGMml+`MT(YrD&T(fWG1$TGP za8D$ND^?%Qjm)a~l{dPcf-C!(-Qx_Mx9JyRtz(;tGQUQcp3zzTC1|`MMNo>mQ9EyW8K}3SFW(cTNjO$$5MBIc7cI)n_3V&wYhHha z^KfK5z|jk^)zY}lw^3w2ze4*j=$vbJh3w~iM;yXfNrP3)?j1wqecqjXz<<2{a1F7W zK@vqqycm%w1cQYc4GqgUs7({mU>>G_c9n)TL0vIpyj1pQ3k^!6pk*z3UiVnc?}&#WM~?eh}Kf z*)Jd-qma7?upaFZFUfcdAOB+MwX2cD=p|0Kp^;&g(`^6NPwafz%=m#Rp5V~&U8pTb zrwV&d{1On^G@=R|2QQY2_c^gp2Q4VRf0=OXA54t3HzdgUVnd_`++n$tPp+YGpFm3~ znVb!UF2UfRZa!}n$Bvp835cri>IrLY#Y1eQI#F=Wy2-IP9~6foC(^t4X8HHjwl;?9 zEMs-ThE$6l0#Q~vqnKTAw2-Go05kK+P6d6*V&57FM{J(fGgR=CQ4y zi`n00rUZV4b!N6Q3i(WDd~Lq5u;*>uKimCWwm0U`02uF!4k4m-*{7$zJC7JZ5Hj*H z4-;2g=eMTJK5jLZ=tXXD_mABTfihC;=Abt}86;W_SzYuO#tH}V(<*!zr(?DM){W}b z-W8p+VGYln$cY5fWj^<^rJ<`eJV-=;69zyunx^P@ z2c`hEe_UQ#JM%yNI>H(TC78e)Vw1W6grS7UC^cqhn@yzlMG&5#y>J|>Duh{1e%4c+n zWzVJUavQA#3jW96?m7<}Tn`1P$!r&IOtpVX9oHS1dBAl09I>y@kG8}coSS&nQosB! zNmeVF+jbe`oB(XOpRYv#BnSz*@tpTC`05rM^{g`$f|(iFrdW(`6^_jE&6XlGvu-XUS&Dws7Y48Ti{5I#I4xPq-{4x%Tka*ds$}e`lgjrm zz2k;SGtDT2`efCP+Of)J6^XBB zZVssn0)hucg3;oj@0Z|v?i?>90QkP&tcV=~iYXoXE~Ft&NE)e*UwW{6VoPcVmPK89 z?$1PQuQxTc*>DAT`?W*2;B#Q2x0~|)ld-27S@p)Wb_wd2MD9{k@>Fq|<9T&cL&-v9PIaM~z9tYb*d+VYUm3~zc{34UH*Pfep#B4MBmv_v5_4`V?LbtbR0rqM& ztYFDTixYfJa%x-F*6aY+NlOB3dAs{lo&kRSnAS;MNL7@dTE+#$l`{0@bY~6Gs$z4c z&&@sWiw*Koj)2a=SW&iJU#!tM641$e7wv7sf*Yplc={EC+IpctZh0jq5G)vu84Q}s z?y0D`5=A1rfBRih|L=D{mebU_n^jlRB#L@a42Ui_B7%V_gc_YHlbWm_3J17Uc$j8v z?u;-=4(b`+@|*x;PGZ_% zcXl=?LA=gryDvpPu--C=1LF0z+Wgc3oS#1(ICMW=^=LIS5@R7g89nx*|1o4QCqd)O znfA(L@^e~w!B%icg#smGzES@(l>4&Su>ZWntuTDpfe%vp6<&~IAjc?!WxQi|l&#Jf z1O#IcsP2yG5p(MsYZkMgq$p7Zh13~BwHDGIMR0^1pI#?RHS(mX)DY`_jglm3tO?j5 zt~Ail2L1FugrB?Ndfar7AqPF9%D~~k7d37h=8FGK(p>d+D{kMB_-2VO;X|h~ zK&j$+LN|LJC9+wVtR$C!@G372!$OJOk^rH>aBz4V-kZ85K;<{hO$g$Ixu82z?Aoa9 z`1xPJr-*24n2=_2l!nd_Qfizox(Ig)j3=Mu^VA>{W@1<1lA* zIZJV}rX@r3n-p@YP2yogYsvaUjfdi&ny8XOY@G!Ti4FhT-_$a2ns*p=|4{f;f0wPr z`-L^4-yD;S8cJ$B4Kc*O`lqxE?L9fh6>cgV)YDxZ{|RV!$4vzx<%z3CASA~}v(RC& z4i{q@j;snkK?z*N!}m}fVzK#Fe-KKiOQ#GH4*lV8x%s4C`Ye4A@E|nfaIa$tl$EIe^ zTztF#_UxnVrws*=%YSaIQ+xXb@7bhLLnVsj$=tNGb&sv(@lQsGDn&oGxTutCX)=`h z!LM{*f2tB3e=dj3Xp4?G3>JPD<`*R`W}^C8Z{71nf{hQTSK!l4&E@yAf&#Jg5f+?F zE_to*u_eCuQ|`PG|BDj@Ckq$*w+GtQu)~(HE2}&bP(-jPASL*yq=^kwnSELdG17Pe zp6Joe?`Sy)CgTiEyKntxcsPbFn~j^<&M(Uem#^;aFI9|YjBXUE6i6$kuP!x?`uTG##q5DyoTJ|%U68Z_Q{tl3$xQYxq1ubzl(%DyORyrt*+@bAtdv*K_BBYaq)*7O`4mW^Gm`j z4nBIw9EzK%XdOQ;E>4_Ef=qILPe+cF3W>=8vNKiCPa2qofDn=)b!(VLS5{6XS>59mp}0r0gGIO>YhCE;R~7 z#G7IFj$|qPAfLJeXh-~Zgc>QrP>8{6NhL~yW!s-(GBHU?)-K+S`R;!k?3`3LR%PE3 zc&57{89?1^aj?Yw!k5d~0VmVN!VV?3e!*ESp;{q4rAw8d+-)@onXH#|D>&B_cO|P?5SKZHDmAR4BTL98k%{Mg;03TQ+VA|u$Y8A7DVxP?+^GHi zH*ERu)US`sT)t4weO%w|R^x0tw~QZA&cH_ck|v@{;kL^vO5Ygr83T?jKIUK6Es=HHZ5^H@6pqM80K!UEJVahu(NvQP*0b#7FzzIy- z|I)sZpxL;xh0ZFg#8S{vA;36MW^I(iAnNZ8xCijcD?c#w8paXJ!b_~zz^@N380|p> zW(1T~Qvx4iC826aib-Uxy))hbm&?;M2CjZV$2lxAjTi4mfF2Y$~q-TY73Q_xt#{=#2ui{#!qt(cuvM)Mm0U=&+Jwg-&?_g=&ib zPf%UOaPU>XSGY9WwwD1G$F=@vzAX5>W&`l!cglt4SNI|ZRFCxslEuK57K-)`qPhYr z)Jm9~dP{bE3F5^D59xMth;>XUI>L>zST1b1t(fJF-wiATX6w<5b_LL)B-ibCf{s;d zSRhoMuCKk2g_jQ(-_kqkaM(v6(51h1<>+pseX4StJ9b8S&HjIJ*)YJFtuRP{5p_ z#jCEJl^9WQ!8tVLkyVt@@O8q#$1+jQQ#p}@H|HvjK9LFyIE%g>NL|nXn5(TXkE7S1 z7Kwm_z;;PR$F!%%49V+f;Yx4znY}tDabV8OhQ)0ezf!06Q{2VcS6T8vq;LHZ-%5t_ z!Q5Mx`G#IQ?NEX3^I=a|n9Q;!C%!A*Jta)i@&{*jt1k(UP2IxVne|toRGQN?#wZat zy8erP$NvD;*}hb8%m2|l>E~>zX6HaVuE$LV050Ksmrd ze&7KdcW=11N^0Ww1cQiHW#Vcut|A2hL9HRakJ$3j<)MpyI%OVTyKrs|%PM>?^U7 z>a;~SRWX}Lkhf5K^wS}KnnXZvR-}lW-mI7Uf-XDW?K;|9%teAx^0h7r zSNMhJ_EpvvB4-9y;aA`i4+U06`aU$QBWkjDk}l?J#qu_MlTOTa3VpqsbEI^+A;kCZ zD%inoSrzlv{KEmG3w+TJ-vGM<1uFCK>*lqwO?698ByweI(MPQEt8vj$q2-U8oJD{cmIGlRk}Fm?DD^6gouUZM53GfR70?JG?9x_undMs}JqT z>r^2E1co0E527UE9_>`+z3b1K{`7fe+7>0WZ^TXNUn2wLGYShS8c1rTGscfETMv#a zO#$}Ias(1YmOOZ-S4Yl^ot7k}c2NfPN4SLFkcxTer$K{!7>X^wFMd?GTmOy`QQg(0 z)rdedCsmTXM|6Sxr2kfC}7)j67f1B<)zeo}JCxex6BZlBB zR1OVo9IQ)CC#LYVOC+sYW29P=52Ky4=2&Q+|26pMefo2yzw_`G zY%wn;$T5o8{I-fLRfbq-pVA=Zgwp{AgbRoR}TlMo)r8c;F8zE9^sWOJ)eoW z=Hx#&!%D-&?wlNWfTmm2&ulkg-)kPok7lb+b&=y3*5H(o!sFf}ZzQjkuSQNv!HcZ7 zWA-30wDaR*4Jc6m=01xG4V2y(6yKgMcgR7o9e@vD{UBhKvc}#j#oUE}s8FpF(d$LW z3l3j6F2_n_os28E+F|jZpsYs3mjs#64E#32%JH>p%3(t$u0>9xU0v~}5WA__Z+(eC zQvnL`(ydN&YKV1R&!?EY1C8S?8Hcz{*$vky*JCD0v;pq&%JxISI;9Zr3a zh0(-m*+6V|aq^;eQ#WZQx`l!w0=)fxXK=6EATXDo11Oi%o0Q-en)Po3G$F#Y5rl$o z3=|1~Ft`6!a8`uaX)Yqz^g`BBGlG&h3592QRYGe#SBg*y{wkf4{Ee~Md@vo8DJX}v z#ZQa+X7E8>y%w`pbS-Li{-6@Sj2$DsjqpYIHjiwZGw1+O#mn!WntILph?gxa!aSR z0wQ7R=(F}aMJr3wzMB|8^02T^hyc*r2~)cAVl34$b#5r$l84I28lV5mtv@S$9ztXg z8^uRO$eDn?Cjn(B=S+1{DHkkSJ?r@iE;y)P

PKLEx0OZMQm-WLAULnAR|Cd}Z8 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 literal 23038 zcmX_{XH*l<`?n#~&`AL4gb+fnQl&$H0HF(lA~h%|9i&PRNa&&WCW;D5SE>{d2pvUw z2a(>Tm&fn#f6nt_Ud+DOIcH~g=K5T7FV@IFo0@`^f`EX4S_g?RAs`?G{nyBe{#_y6 z_&`rUKty1Ky03|H_B1gux&5d&{(|5(30P`LprC+)Kp?6-1h==h_75_;F_F^Z8ZbUN zJw>OcNxThQ$HzPCcB5)*sm1eVf23BLLH}S9GXy(Y!D-l=3y43uW~Gu+1+btRo+YOD(=x`EzkSbK1A#ne79pR8riC5(E}~tf0dL??H~WTFFf+CvPDHyJsJPn zxhpU+H?L&BA;Wjmqq!_Da`)N&^t~f5g}l!O)*n?tMG0SSZ}uC?=gp*~J@~;AN)e&9 zFA<{7`N@4Vx3?E*od@0Tf7eWb z`3!;U)W>GdfwSt*?0&AhtBY0mL@ySc1c<2!XylN-zkQ^KS}9W@cs&06wjdVo#pCgM zV{1E71#%DNd9mI#=96#QAI6P_#=t;JirTgXr{NjzbG>vO937D)RL?kl+j#VU*EBu1 zZ+FOxoApeoe?%8AVn8WR15xF#X}VR^)Trzno#Yg`SMpZC$;m6w&%UVHz~vi@o?S;% zl@KuLyF$uzYEVY&av7uOMDOAcPt&2(QEzIR*1&SNa$%N~&?lh{x^I70dHYbLrGtw3 zDo67&>qZvqhPM8s?T!1yqazf|N^fV;NmF&zKX5^K1ilR;Ydu}6_98%3u? zWWC?obp7{95c-%Hm=dV2O+NY80eT=Uy$J|t?fz?o?^Md12?!trItaD<{?j|H0Wa@s zp4{f^r6>nSjwUD5se)?6F&G#|M4cQGPGA>DM@~abo=a>*&v1uXRZZ21-h&QJPyFCM z1HDm)-F@OaR-PPRJjXoq&J$}x{xo0R_z%gOy>S24`X!Y#?ObViO8`ker&D%0S6Dmt zzNyUK-ie?~N+Rbb@z$NXVZ8)yEjej?H{82}BH_BO1^jY>c;rk&)=P!>MmH=jLrj}L zL1`^*dYT`n+T3mvF01b4Wtv3TcIDXh=c|`vx_{R6w6v}A*+BM$^$c@Aqmbm?$h}vh zRdfJYiZ?yTk_NYMx8d6-{a6~{Hiar+1{bXd`|*er2?K#G&iSEg%tnvyqak*X1bS{r zHZH_5Q#8Jdfs!uS7TQ-3p$XdW+sDn+6BX9sNE0-d?`WG)UV-KjFm7^~7Y9_p%Jfmg z+jpPM#c{(4VN$xVyOQ);DT#((C~qXJOI#O&!hoR<~Byr~RyKHwaEf&#v)rKB;Sid>QwG)y#hF zVY^B?l0-o+ibw(zR&~U0eFl6kcLw&osurQK*w%RK#Yqy1yjMj zUZ7zR5o-uH7m+Uv_7(+UU}Y&$+bw-Qfm@ar6FdthY?_GBl=FcOr4nDzmqrj_tA4lZ zUY~yyu29#GKxB30JS5aQw}8OJO+yLSJ)aKwSW9t-Gj?AKdF)?TF?b5Yw$zRe#4UHd zf~arB>0>qSkU((p#WFhLo}g%)qWX?6eG2aJ?~gN-pTz|ERckHl=2Vx7A>GW+oSevU zLA>9>Wgj$25PYEE`lt?#>a?aX7Cv55%n~;qlpUM}k;4tV6T(DjT0L1jZ5rlJB>A-fh zbiZ-u(s=9W(;XHBdsPXA;Q7IXij6+YTD#`^PqzF&M+c7R9| zgRLlY7+vo-T9pb-CFV4&C`lG2DTLU>%#3%zJm|LQ`1o3{wuu?JC=FPKRjHO3BM>g6 zTF|}EJAKx^Z(Q%tgF-BplvP`nRIY6I>|s3l52XC}ZP_>+~gd&_7@H}B54OyjDNV5sLHo=b(q5qZ;Or-m1KCjyM2vdR=dI;gZ1h9`&dD(@Qe0P zAwUcSthu`MO63Hs29HIWncaP$W|^+Jablug0+#<2BRBpW#0}TfL@p^@FmL1!DHS%c$>022#zCuTjK^9URbi#o`Xn=?`Hz>*IaXuV)FZdy=a@+)> zA!X`O;)#BIaSi#`@~cEmXw2lIT(7T65lRb`>&vaaJS|Cw(^PC9bPRQWa9t2GqpR*E zvV;WE(_#RMe#8QxFba0P2Q~MMgppmpS`qfcE!)5QpQI?9XSK$VO;H4Wr**%oikQ{8 zdji#pZ_ClXfJ}HSN~^)1%1=`owbLWKynJZK~_K{6{K4ecnbRE<+(+A9L96*GJ_ zb?jhKxXAQV$(F8#Le5mOvwCHY=ESg6y2E_{k$Eeh(dRSP8c?)gPt+*g zok-qiJnuheWWChJgTVCJtdr!W<$VLbK*_wC9WP9cZ3k4>245ayY3mj4H6hTutUsnp zq=%;RCN%s=NKsCKC2s;#$e87z_=%rR)6V2|k?J>#6Vuj|yBOFZvNmif;GUXVBhh0t|O z%O9ItiZ=w!=Gn5cSLK8)^&l^SsCBFSV`?83Y#rx@s)vqV>0cz@dPoLVwFJK!aL!5j z<)ZKK_r4;{Yg>ZWXDXk8(R5hX1>-SFdqqc4$f>Txs~-=7GIwrbwZC^IMbJJuliLw6 zQbCopyYtCH^YwH!V($Ry!#F$@tDiSiBlA#DBmc>DJxxynp(9lsYltV3f z-%-E!OT>uBh*!!pJv|(fL)$Ub6EfxoBhAA>CB|Y?_tydHhx}xP0I9qPz;9jFN$+-M z9pdV@QpEJ5Y6wAgb%z%bS*q}?_%b5+v883?5AOcwkM>`h8yJ`~m3?FmRYV2`lO^A` zi9_mcjRt- znei~{@sKntYq!*gfJl9w%JXS>-)4tsR+HSTh0;Z^n6C zk@1StOX;)3=MRCPKS|w8{s>^TPEd6}+ONOxo7cgZ0;mw&gu@IXelN4Up|HD2Lt={9O9E{+eN^1*?9 zX^JW-!IuU8%Pbr~0G9TZ!vRkL3VB^Z`EPm9twT&}rTC~XUOu!S4@dHkXD)FS?ipNa2MQV2dkq_1`Gl)UQlHtFSEd)3W zev7?Z7_R7*fMqrI;g(liMFA(;UB2LFRqIlNt&bir(BW8e0mnRV`z&kow7!cPmYT5qV zVbo7@trW+38Vwxs5xEJ4cuLrhKYJcj8t^C7S+?RhntLf67z`DkfPiyPV(E!!3huw2 zgoNj6FTxB72}a@;C$7gpqa1#V3kq5N41*V(FX?WTd#zw#?v%+4-~O{FpHL70eHdba zqZc}s@k*8>Yz%_|W4;S9GHW5C8JTE)zN8S=WKYEhdfjtE`EE~!8|LZyDr|G;=#MBQRn%?~H#fX}R~rBJh0`6N1fg#w z);}o@(KKObPM>17ZD>mYRfC%{_j8yU^t-9vu+dpxW2cDlfxY+2i)AAnS z3q5j=h^99m5oG~3d6bl-&7O7rts_8{!s?Cu_+rpn215mJoE_mQuwzcN?9PGfb6OqN z6vRs?T9&(oj~GhHM(*kw8Do7zSHR3|S#0;bD#=7tB6K_Uh6_4VnzJYXV ztFV}CSW{FE)7dMm5qlHF>AC7marZa@8UTF1-Izjiyg@Av!N1On7Yokc*<3IqdxHBBNTeAOsKzRN=`-ti?9(O(%w>I zmrEuOA<>0*W@0oGp=dSLyf8`_t0rQVs57|X5mB@xNY)1Wk6RifyO+C-@5>s zZH)lBq^BnxcWDK)yChRH-Xb50<3vTIz7001QVs%uY8@7GKJSzmq_<-+$)z>ACSX|R zees$H?7Wh%qGA``|KXF2&tqv?GJ;2NmnlVYNOIjzkhIiAjl43N^K4a$vU^I1M5;qAVcVf&vM;wQHoFSB!;2G*jX7dsMaYdT7ILX;5PcyPPaPXO zCVroKe}qShRUfE9nEfWq;NJ`LFy};W2M0_xB^lD6er-RdODb8Mj<`{ykms=Kp}ije zyLF1s5YdW(glc?Zd>lu;Hn{q5v_2-6!?^)L2h2uhmOomQ{gSLeMw~3{fUDV|b#;DD zzzd)MNEpLo281cidGMi1O8_dAWRy`9c&e*Ns7|h(Wbqg#trK;udDlQ6DKOAwMX!c+ zIqxde-lytO$z5bg^sddhiJtpGP)CQT5vNrrkI|&VOJXOXLsj&IQFar5-Zq1D-c%9} zlGl|=)C00hX~33B$i@MW3DvX8)zD0KtDW4z2Dl_;l{YGTB^Yu+qy5%snNUJ(l+ZUPv-aG?tRHPpJL?U&f z(CXqN$*NlHS`ogfq;~;-;;yH)-&NS9{OD+Vd-xiv(*im8jYxKODe-{%ypHUeWfi~g zLhYpB^Uer6@aJb6A50xy6kx$`2~Vcd)AUO zHl;N`OSPBcF0kWOj}LuLK*CioZToIIOY^-V8*RwssxJSw+!4niFXQ{Pg0u#Cw)5zg zpnkXp>$=(>J|S1P=C%X-Jsvs)9VpYfsxB%lB|VGTNIkr`_%qMU#b;6@I)gjs&+i!n zI#YKs$0_%zb+DX*#sUEz%7SfGI|*b(5+D6>a!h0P8$X!XQ^jIpFtZ=rpA$qc?E#7S zp0{Iu)HjN=4%9flmpeT|y|~h=HXfCDA~(vCi~t!6?f3HNaf4Fc0Dyh4sy^iZc*dyK zBBj9E%q(5B=0T$TI-0sxL(C-Q;g3?aFM*^vR$#)*@z*2d-`Wq?uW1#-k_78PRTiy2 z&JL3J5*81rRE>1e$2&kro`qB?6Gu0|C!tYzn7%0HOW{H+XPa61T!M)6Y~U8-q8Zg$ z-}G8W!sUYhN;uj4J`bVjZ3&XovPr5Fph3xQi48Y@?Mm%5n5VmYBPmpaO|lO*2e8 zF2a2zREDM1{-{MFrTKz!BphodQKyf5U#lKI9CTj@`KoRI;A;5}S$jbJ6e+>J+wR{v zV%piHl?2zbrStBZ8aMNY(>!`2LWhTGwuHE3{z7|=q8>{AucWkjuJ7feGLSPL{p(Jl z;Wi@;5$)u|$MxX8JHB6UE~3^xzh#%YWjE!Kx!Z9NM&sShlVo9@qU5KhkCL zpz9-Ha!w8_H8=+yrSwz8pR~aFSKquoD&C$GB=13xjb0(UiF<~V43F|=g3@1&_{!YM zkYQIFqQhvtZ?DfzL)H$%6!dk1FjnLe)&CxgB|M0<+)2iSyqw-K*20WPi?8OHnUEys zr^uzyM+a?WVX850>LNBmFmF11XVg9LnFth*_snkZCX<;r6mM4rd`>rqXDixoJa^tKCCb|8ulkA+bHncQ-OEWOs_XtS_Q-5eF=(SBI0|3w?WWE-6 ziVO2{u4<0dm!$5HTGwlLthziRC7z9u8u7~0lwk=X20c+nj)b8@05TM4g=djdbRhW` z+n@Kn8Gv%g{kPg)_ll71YU-%P1Tq;n1SgxU@_sklX&f<=Sa7MPU!k7#SLr9_y4-WtlbEz%4!x$F3Wpx>77pgB0v>c4AV3sPpzZ$2F`6=mf}I|8 zn!!q7oV4v<@|n0eLYx(MHz8l)Q`lTn>(55-r(}g5IdkHaen*dU7K^mzZU5WWuI3)* zFlFJ2kY0SGX&0XZ-oC>SvwAYU!;K6HX@ukxLr0mWMta$h-*y*5x3dS%64PmhNXlq5qAc9sm7&rJh&rR6Hl}wVQeRv8k?8VFZ2l+`kT?#vCN@wI)3vf?Q*MWy4q3*w5b#|($ zFs0<)5|mV7eB4N#zu4uu-)rXMlu3r9RtT3?F^3Y|ZX|@>0nI|Hd?hO8DV43M@T1maRm%QYVR^38oL=iiV0_5-n|MZ1)UqYF^_Pt zV!M70L`cN60Bhub?MDDFoD7xN9 zqjW4jOHr0|Rz|JclA)ccAdkOnb%ahU-lDQ`;jFmJ6MpB!7cmwgu+qd?tYutJ!lQVn ztQZH`3?bafv2+nj2-pP{GgoH^m|5@xYrEZ&|N8iVp4 z(8{5D@@!B<5;~XdgJ4oH79z5MKFW%dHJSC$xNqtTOG%GH#ZcXpw+T0Fj}-TN%xXO| z_6lb>4jX$c$ou`Ho+M5tNbQSh3Ac&>Tq+?Zb7G;rhs!W`?P*QJDFQ7a^1PZjWozx| ztlU?+?Ec5b@Ao9O(il8RG2_*7Q6gupk3OFT#_8uVNAZLUL+F+(jrxWCG)WyLHzg&~ zfIx<-Vn1D7B{_5A?a%Ru7)2eb^OW4|e?}=*x|AMqxG&Y8^8|{|$ufI|^m;Q2!3m2$ zksJSpLG*S_GK)LvzT>HSp3e4!48^jD!#{G@G!0RQMb;#fg^3qYa_ceE%=&RznG1%q zH&JIJVSoR^=so!ijJ`4?wWm{JpNLhf;OJF)|@I|MW*P;nKL|R z2FioVNpYy381)-QB^~qKt_+d?IjvLc*bZoDy}tv&Qgv75mYi)IY^9EBeVtLqXH;uU z!H(*G`;rd&0`4fmpE8qIA3rb9g_x%NpgENQ0)|}6^W$1xZHxwS9cBW6cb+4-uj(g^ z_?W^2cBBXW#7H4zGc}I=Z6$w&tzDenDdi;arb^qYXViFQ5TiT+39=6e#(K3!CFu9| zndLO2@5V6jxP48ktA0^_3^U=8FcQR7v1Oo{fx$0DV;Ycs$}No*18V=Kt-1oVwKOr= z3I+eR5BGk6ynL?58al}OWzxzB0ciH!sX?6dNs#4N%qKCCQcZ&FNDt}PoVkJ-I6yB2 zWL~`BW@m_*^N19NrRe`0t=<3FgGCCI(j{Fmlzr$nKiaWYuQ`3>VWl(0)vnt46(iP0 z7}$pQkBR#YS>kfVqi!xHGAvgHWOHh8uXI><{xM`<`n%PxKPt1CI`5ySA-fk9;*q4- zC7&SzAKqMB7v`g{bIqsTMu<`|fk;|5N1c$xJOq{K7}|~`>g+phQnme)&$YT4Q+h^ zE8OFS7KTy=S|1ibpqlm-ntuMw&w9TpZws-N5$?Q>%n+%Cbn4NFew8_w9A3<|gq?La zBwz{je~-Avtd6|Z|H5&v&iUe4<7YaTLlimeuNET}uI@l`3A;a-h^&*Oo_Js#bhb1B z=}hITM+lFxPF)#Rl~6rnlakYSf6Ju~lcSmQ+^5*#ym4gKvs1rYugpcx_j zHrDX$pmb$MD@+6P=m|BaqW{%d$6Lej0wr$2>OA~Kz8@v8v;eUAvg(r4q z^)~GL4@-Uclgy21c{*G`cVy~=Gx>hzQDMLQl2;Q%sI#^7F<|`_wUwM+ESj0SQCw** z4z2EZLku$!*nR{0uKw?>`T6HW9R_3A&`s`f5ci*z+s~mc3HzoIcv7ml?^N*)zrJK? z6(5(BDKwI}(ST}?#gzWtU!tMUrcqz2uq=x~+*GApQ92Ti962D+o!-OMOZQ7MKVB_U zGJ5@i#y4WnyH;fr?El0QSIJY~#xwT+Ukf0kgUF(#lAkpl=IYefCJTMa=YL}9$|A+i z#^%0VxY}ceGU90sBD18S;<{P(U|luX+_GUn9#R@ImIR3m^b~_VFAV@7mUOZECg&uY z1%1Ye&v$LrG43u&H`Ih4uP)=rkPKCuhjtLqZH6OD&H=pqvW5;YDY9_%# zBZDpd8#km#aR}57(a{OvzN_PxN7ee;rp4y`=AE$(1ZO;~pCulST^A84j(iPHp4yU& z21x4Jk+&ry<);7MFMtULtG4tL-WjtVF$vNJ`Nry8_ISXd7iz6`3M%8c`HwT`bhh79y-oD(K1Imu27=WJb zk(N1!MItUZCJ(j~pVCu$8Y2-poax1!=DXr=2xgnVq=z8`^@_=1#3a_39McX@6ZcVv_St=E#%Hk zt4_&tF_fM3zcfXzcISdh+Ry?AO=VZ zULUdRBG;EqqEGQ$aU?o9fUcixzmK8X0Nw+Y5$VVKSIbVqK?kk}_8;~pX%*u>JM2ML za7cSi9c2Sz@p`8Y#tXlXemylon(!arJ3VN=z5{hcCp-05BVdJO4UOCHV=c?9_%7I+ z7^Ij*>F9`4@iFwRvob%$cO~!`yLdJ}r4KQ32y{#$Z2V_9X-L9BcLpkN9P}*w0kp%v zc4f-FfcI!>>3;nER8V%Ka~#unbB1QOh7}^JAm)E25U1@KEP5Srb+u3($y58fTQ~W`K4I8_?}W`a&=#8CtFA!1%ihI@Jf!p-n8pPSO*U<~9W`F= z4xSD*7Vlz>VGr>>(A$s;9V}R#kOPJ6^dkNZq)>VABG8!nSU^X_*#F0j$K=l7=+a{( zgtpvEnt9in@n(7d&L|#~Ixa2!Nf+&hjeUvhWDV)!ju`#ZSkyN^+vxoQE_X*O(y~P^ z-dn}>LnNWaxtR#11N^|gxr*Vu5{sW@TgyStl2{+m-JUmHH?`NSSY~1+q{(}FqW?nA zCjAyT*hY-QW`(}9>)PzF?o<)(igsi~b}(P}zE`(7+^UfftW5hdl)t-ElW2{$vdF!} zNdnYeVy?`u>`S84XpG6}J5ClRzo@`PIME z(-Stg!xMj*`0a*=e9#~^H~UaqYBC3N>;!k()o#AuJihD-!|F!-`6Cq_P>W61>JRC4 zO;2~WS$2B_fsHraA4?ls!L_lrY#j`ne(TM}7PU@6XU;^Slv#4ON2FBrYw-JnUmyXY zVkavA?$I166MHP3~UE(S9IyA!-nL8v1pk z$Zxpr&!f*DDmIP-?TD1&&y?x7l$*^)_`8TAW!+_BMkF5aNLDtIwjh#$0}XzMXhT&^ z&NWB9S+h5qajwcR6&3&eKXUVY^~C+(HEV8;oeAArX|WagT~WifQ!Ut3lJ2BX6O~4~ z@CIk*c%yHZfluBMe&yx=nc0qQVR{^+Q*heElZJOxxx+JwvE3S{5=i`8Hkt~dk%WkW za%dM{K72&wlG3~0ov~QJ9{S5{rLbjF@N~ei)o(|d=TqAnYi3L{wc}xYGu+S@`%VGy z>3O89_u2qqvu2!VG;?JOD8%|-_Lu$6!X0`td@^&jxP)|FI^L0@nGm?|qH=B8&;UipXnItgd@*OjM(I1YEd zJV$k%u_Tp~vJJ=6O?o8U2i|6iMLi{!L1hRo-Oj(s!caFyiw4XPYigdGP}L?E(85hCmoIKk zF`mh&@EBw~FD)48Lrvq@lSMMCd@)%)8jqHC>Qo~u$FAZF1N8asn)VVKL9>SrNkEOK z*4$uK?5qNj;)`!pRPDV8xzxIr7STin!vAs{37x#xOQA+OdoT2<8#ORb3$_(0$^5lK zWYN)&`bE?yT9VHekAs`9mDJ?NTZ8<#yJob@f2^i7@SW?-D^942-Hd@AC3A56%ihgj?@}Cky1sClBFV{JTYs6^ z-(y(Pw}A8GP_ho-d5mKOsBvO&vgL)wx;nCHK#k~GaWX+pU&kpuzC%BEUd7+zC#4uW zgJd|>vYIvVW1)Lf8Ez-6o^hsf+t~}M6Q5`gxET?v+!vtm__2$-MD#4Kp|r2*`<%S$ zUc1ZY`tkrKI&|e88dAl}Wlt21ii3lrJ$HS1(x^tB1k<0od=EUN=ca)`j~O4*05+aUnQ1eX z(+@ne_qtsF^?FdA+LO63B|@B--cdc!q)dP=>4jPaac$MSAesDjpM(g2qa2; zQ4W6Cw;R7=ptT$h`W>YeD@s*5dcxP4n%-i%AXyKBGn7CHz_QnPf zVVP6;WO>(dUinkOm80l>;E?j2o?4u|O59CHf=JAggoJeQ zp*r=6!(=|^$X~05MR=2rsj+?{8UF6?-$_UZUPWdO`mwf>DwS5Ckevf)t9 zTY)UZ`b#il=&k*i1An`Z`&8t_d6id57-cl*px2)N{9j$xmjx!2 zVq2Qm#pkQ{JK3U^MW|9a3(k1Wmh;e@i!v4c!J(lWQ(s+OU82XwJMEo+67UQI1tKch zmB+=wq^+x~s}Tf(`#t^ItCxWb=$HB^Drk=Q@dd*VRcFO?lbpj7rZ!a9Xu(j~-G>V( zdnS+m6&;*Ero5HGJJG;3UNM1!Kr ztrvSJtlsJq=lNFUUDD-VnV}xDPVr6Cca&7}0&;~00W)IYDQ}zZ+_z#y7jexZA{$JX zWDzN)L;I?7eF=Ay-kXkkvDVZch@Il-RJ4(O{ZBJ9d2m!a!KBO8!$Zu-Vu#q1#~1`+gNT6qlJeRBs({5u)F zka8UA19g#?OoDLcOY)V-;&&0DY`t&f)CIJ0`*e4HQnY#DdDrNDlu{^@k&@RU;$1#} z@;w6H6Q|s2qoFt|_N=^&mT^sc@^9}AospjjxVb9<38kkAAKiB^`)zKPV^=Z!>aJq0z#S;l#-hgT{ zog4ChJ{Zrpa{l_|Y`A@xU$|)>qTI0hG|a@G4VPS=kk=Ezr+4|QGUQEw7_`Q)&#2m`WPxo-(d^X2M-kZuCLinfHWb!7%?h%^8vXZB3M_)34o|I@audB(_Hb5G+ zX*qzi@^+XSW(GW0{ZorX)xO83Qk0om!Lg3em%xDZvXW*fbNH+`ZLpj+Z1?D0v;`y! zc5&zN_R4hm##k8207Apgwl-XtbW_?9y!P9d^pQcgiV>_e2%3z$bBE!0 zebgab0Q94K{Ns;Q{)Bz4t;55^@b*_m1ZNbP7oyJG;8;02Fp;6=3=LBN9X-0!VL`cY z;ZIED+f>Aw!y>|%9Oh8_XP7IFhwXUW`uCtrOmAc*p~|p%oM@(1je8-RH$f~Jt*G^g zgIW@&Z8RI28yBAyR-lO+x(S2?OmuC#(8mmRI$9K}0^!hjmB07L(j$Yq8nSwnE+f_+ zGY4~((Y=hz{c^}LbyPc=4Z&3()%F~EVA0|!PX=9}Ke#@=vx>5BSgqY0K9N`c7e|e# ztYPcATJifJYL*Jg5)48!wk5Z8w5lBoD&_>|SM{2MFzMNRPRN zlef>+1uo*$;e&mbcasj?zk1&H)cN~W??X8+i2vUKJprRSuA$xaNtlFO=+46@DWT_F z+H#rQ6(lE>Q|l=l->}}I(Jy-anQD5UL8j*{RO$b4>ciR&?}oz;`4+_(i%>E}2Hh0! zGoyD5saVM2pzOk|;!J(+<|_gm@+lxrV*I#0CRG>&Mk@DBynv)A(Cgg9(1#8Tb4l2# z-w@*|=brn@OIqgUkq@QwrD(!n^nw0lBB?yIOIo|0jaPkpHsN>2i_WKkD1Bn^xHx+2 zx+6UA+3gLBI?OHpeRQxWNOzr*U!)@~fopmF^q+IY%?6a6Nrh{DmE@@FaM4<}o&d86 ziPh8T7k4f_8Fi7RcnE(AAvlH5BbJ;*i(r=PrY{l`Q>!@Xalwu5Z0x^ zh(p@h(T$7c`rH;%_Wvyhvbt_)^sio?=Jv1J&+Ctu1f>R92pCV6fTA442p=iokXpB4 z7v%i#b=$bOgUA#x4=6GjsVtE#-k~T;P$zG1!M8HSL8IZ;$lKr$X8~Vm3k_}dy*v%d zz)yvimO`l15ZOiy*SZR>>o6=@`ys3C43KnFe4|>Gd!rb9zQUy)<^hE#le-%ye{82? zz40Hd-@5TFC56@$enmib@z2(EM9sHyn_jo_HSJECh&a@8Gb01EFt3@y*1E1%8xbKV@4bzljzaR>&U||O?r}5m zo@4;eR&E-brkx5KBw`9t#R6D95F?>1k`R!ocCqU%-vedhlhHN#-!$AjMaWNx>L|HE z#DLqlTTBd6eay6|{(15H4*{#2zNH`9XnR@G4;+_ir>kFAnG2bAf_6&C*l^^6uUvA89|)xk++1IBH+>gC)Qmr_Rb}?rnmh_*Oug;9$L};%<4A~VHg{jx zgog9#$+(-pCDL%a=lPSaibbb=i5wZZtWW;9KP0_w=~fnSrQP*iAOp)l)*o4|>ht`w z$J@9o!nHB__L;BEzeDN4kw^)sai>L!qF8{p&H15QNw~@RpQXju*kTTH$r!}hgVkzJ zhooEo*V?>R!P3{%F?<66x5o;;+Yhx&DlYGY>7+vMrNlgaN6KZ(ExLW$a+9dTp}?9j zoZK5)FWinRb4Gi5Rv*I==z^iH8n-4OmYwDzeaDCkqDc8L(c=50ocBt1HuH_lNyEiv zxzNG4FWGO;%rBorNS^G4-Zr1*fBE#QU;zdNv75`C0>74rhTgKs-m%W=*O!PNDo2$% zfbvg&Pg8@!Yg!@z)Oh_PH$iJ5+`vo=dcI{aShoL2z^(Cn;L*PtiHC6a%=Z4(&RlU2 zw8oRi?tM#B4Ji9~Br3v-`T4@V6AhS2MNHLiCq#||oS_s9ONsR(*(4UuIbpub)ljwH zDICxq8IB>f8%<_lNYfW;p4U`ItO>wlO2r@`mKXe?nmw%kCc+U&B>8`Er`-rzlkkQ= zG;mDfJj-;^u8pmCz`tU+^IF%VhO#qx_A=M-nKIW4dy)ZH6YzTSCb3Yj%JH9rx6#C2 zV!{I{WeNf_46esDN5 zM$B^!_3*vr4ZL@^8l>3&%Dmc9g6_tHAraxiPY4DoAGrVf_v%-;0p|L-wVLI;)EKaLmN89; zu!J!9#ix^{?#g%>;j*3&oa?CM-Y_#I(tUD>2?}86Zr(EfvdQP=Kq+{<^gLCOW1G-q zv>KjQ1^NLV0M8d&{F5me=}RrS;GTHACZu=Rr2wF#le)R-gtNXn4Ya+@d0=k7#!NFx zU_5AE{8lVajp^gBQoHsK*~|ezJi&zpV?5>xc&1CzPPSQv{0DdLARR}j)Q_J(siEs? zu_8+-N#SyfJ`P>44cm-atJtonZXn1g6M@)-H)@OiPUvTQh597cY#zm~%^Qv!a)}%L zkiD*90Z}psz6mQNe_HYN17>bEN5y#rQpXx6DRWJXQ23>5Xi*LL*j*AYV%F9VwfWJe zA|ddWm-@vbX?M=7uv@nt(rDYwj2P$Rll6~15+W6~N-`pt`rGn8Ukm!V&R;Mu4xt~gcz>^m zUC0(<{p+}TZfK|3I{5D|wQ<<||9*~m#WGa9$a{zT zPx#&8qPRZb^NCMtkt0bKpB<%pFdrKo_W3G4d|(tBNg8?lKC9}@Jt$t46Y;&X+2yz0 zXh%lcA{j5=JQDT1DtT$+PX1ci{LT!e`*1V}H(f=1@8Jp%f4Ssb{ zb7H|Ky3N;)g~Vy__bXC~1rniuwVkWQVq_Fs8CHf9baE#uB)J|UVp)39**Hv;M^W?U z1CYxq|2!;knSA5Sjgm+Yh*+w%aJ2hzTr7g(Lz2<;LiccrSk)(0l+syCUKOQ7n_Yb4e6dkARwa&R!bMgkjXE zyN#W97>6;H$GpBd<|WpA1D=h_0L<%CF)y*w^}Fm0o7S>0-Y^p|mveFhfcWhqxc69$ z>=>in1*@9(Y0gvvkaQj16}kpDhQd%x#^${>Hz$V(jf{+a7W^?}Y z0?2-51`x>wB^Jlg%o12Urf%z-C_Hzme$+96%YkRJoFkfj_&c;H{lp`dIN4qtiUu@a z*PP5}K)?a*U2AG;M4vf*nLKiBJSW%L4VdGcMFV%wA}U_*-^l4pcH}K#c9e~(JSP*V zYmD6^EId?VJ2aITQR!TNLifr&s_Hsi7|s$ct`^@kmbtt%lBn+nd8o zG$euiBCj2v-Cf4F^}5aQBSb{CBne`|jVOfSKvAEDK1c=0^l^|#aR3pauh4Q3NaRIf z7YUG1a&!0c7m5iX`KcGPyw|+KZ8{RZm{v6+3kP+OGfrbeB7OSsC&!ln0r}hT*2767 ze``%Wl3z5I$s=4H#3IRQaaW7ny}C?(dL%fPrS&>@Pmm8u*zM@=J=wvJWJ5!r27zUO zN=%>z_tf2E*KoYqNnedkpkpyHrP2JMyLOUGY%)RWWd@4-F zKq5rqTyGL26QjcqGTA~ZX=nibv`c7B_JU%OE$OK<`hjris99S|nPJdHGQo9C_NJ)voL?YP> z1`;GPYu2c{owNjTbp9H?UZ?ydv4C#tVBK%rTM$R5sW7!#UA*)eqSXg!a^Y= zt5>I(*Xy-8iT`QiFgdDRNerDX4Abe{Wkp6JF+2L3A~BB15X=8X10wAYYb_eS4o4(i z)pbTU@_5UGM94(=5)e6xAYwaA5XnL!LSvmm@-z{l@f(GtI}xEFn)JZv&puoI*=UQ7 zTl-8gIC&EIAYSpfn>Qals@5+N!)>=spH2c%NQjBJ-XzGEnBAwEh#_=F0SM26mLqo# z%z{}r-e}hn6Hkw%9Koc8ArgDm-L@@|KQsbYRf_(qn%@u$(10OHWEqS>b^&pI5N4d!mgO!YdVWXITLlgiT|um^CGS$f*bmf z7pa%F^d^G9jW@1Yb0Zng8vZ}(1&r)9R}jfnNJe3vCz4kO$-;H`$3XJ*Z}5+SqF@L>$77M5=Wr75MUriFC3Ych&VKL3ZQqS|6DRwOb!9ya}Cy z!q0Ek8f0)pm<|S4xN(%rgy%SHK8gsZ;IlL&QY7qBfRRX%uuB0(B1OV3g>G?xj9$H3 z<{oYEHJ>a~GJ(z2M>khjyGZQmx7jwyL_aCm?C5VW@pr9{FxQ|XPhO;+>&7xUjG~_Z z2x85wT40fAGNG9;&V_RvA~8U|WR%QIfJK7tWZk;2rRA_l(4G9|H|wP3ut?CIR98=x zNYHYS%4iy&v6m$x$b@AgkSswLbab`plBh+9w_hk_%$d54u2B&;kQcGuwn-=|4}g=1L<>0-aWrN2@(^jPs^)u+FTIrb(o0Vxm$a86 z*0aGl@&r+g8pT9F6}--niS#2H6X{1ZCc=+MB-ZNDmQ6@L`^-JAhLN;6DIsl!rm8tn zKgFkCdio{ALR=a-Kex5H5{AEU%^Id*5D9)Bo`${*1#~711#~711vDnBE%GLoTXnS! zk%*N3OkaDX#yM#(je3cxG=e0c!zl=}G2faNwjI3lr_)or6A@P?s~L*5+T*t)5&?*yhp=0cR`pol3rl?Z zr7bU!`8<8DbslJumxq77ZSh4q5H<`)BO(n)BO(n)Bf?Bpt31t-NgG8ZhNr>$onIQ4 zOKEzbW@OEr3)tu!LvJhOrxQmdHf$khf?u5@6G+R;OPe!?8f)qndbbtGgBGGaJX(;rkUbpyMw}-k?yS#)M4k^Cp(ub%?jz&r*U#9oa$QqIF5$7n zK+MENQ$&$W(`+|MRB}0uD zHzzL-El2A&s?HFJ*VfqJlTSX`sr|O8FlDMyY=&90PMtED;H!v@HP&Z=S%Y^sj%L}9{ z>+0w%lRA0jf;H5#7zlrWlb5u}qqHQ=+Z$YE^N56qj6xbMi?aNUBHq9f7T%L*i)fIuSb$N@4?H9vwi^#NXU|zN&4gA!_>vDq45rhe6bJol=gApuDfU!B<3x~&BC>wH(?uR^ zi+sr?mk^VomJ^A=rk?O=rZdq`hk%_s5yL1bMgM(6`+U%w1##HVvNJ( z<#FWjY4yHOtE=~k#KcL=-Q$2i_yAN6OFxazK_YR#R!@$~IU19yqevyV_yToy-S;nl zUq|lbDskqYe(z91GPLi|q3lzPO9#?yZ?VFumk3=@!~xjJ{}Igs35qq)0#AWRp4;p@ zp&fNn{b#7IMz#DIf)aBhp~pPH$x-#M)sv%LYMSXFkfTB7gCPdN*L@#%9VW6@`ILnI zb;%O`uxw6Yo2WKwrUTp#4}@Yw5GMaR$hJfqMd@LUt2CVTTqop+eo>#w_JaO1ruAu` zezvgxoMB%fw5rp*PDl4ZPzbKH*V~-L2JN#(d!e296nSU|_t2ryHZw%G3Nk$@SA90E z@_|%rMprUbSs?k=faJzK!9n;E6PcTWnKNPiY+>Iy!`>%|MCJuC0ZP=a<53xGR!D&d zB`8+(NQenp3^+tY%pq^0C4Gow){Xw;M$b$B+a;oq#W#x&2gXue2TiP8K-IjXRrBTr z$;3(PkxtM~`k|I2GL)HE(RUIdC^)p7w_NyFz1Tbpf?kx7qw4)k)R}V4;?J@Qq3vgy zw+HjQqg9O^0}BBYK#VvxfJ8FXvd(DH#J~NpoS|5*ZeUj65!}Yy?o%VuM_dAr?kQc} z+1a}@5C29+qRn^wQ$_LGEGBZU6`yh%n%T^nb;@5aF)PRLsaf-O6Z+uFOu#W28sE;& zsc=VyFM*~~`$jT4>)eUZ^VQlI%U$N)qftGFT6pRuf%=bSa@?vS$O1-y)d}J|r*#k${8bd=!VTxalSheS}rE zpX!&tI!3X=1~BRg0?9QM*NnKjDI@?*uLehPsg%P6p}6K_oS)$AgpsvK(R;=5gWN$E;2Vg5 zC>(CWEulkUBzvki?5V~N@ID11QlXecMgo^!D&=0$m6ek^SttZTN%+N&>U0PB}#pJUWQ;KzXc76 z`xKya#fZ)o6-^M0k9)%rt>m zKN8sW>aJZfQbw~C8yF|M*@MXl>yfW6;#iwKH#ig zLVd>*NsphXe?|0XAtXf|w|1=jN;xX;TDOJ-Cw=H%$2jW;CX%=_L;^PQc$}aF)Q^zI za)RQM$=RD@N?hp>iOIh0f~1j5D}SYGO0h|5TPi%tg?J-Jc0kZt zHxLrxc3v&pg;*34oCj~%vj@%^30z7lv5y2WfmWmvJI&7ox-*h(+iW7T2d!v<6N(9m z^S+u$%oPVHn0KIH-aHoxW+wIZui#Ms{pzbqoruQ--hTP*w`KkcWdLPmyIyrynRF&* zjSiwQn-^ZV6f~K*Gn-be{_&4ipvgp=^av!RkUe|$U@&%H7tV#LsbCNiW5ofH&?5H% zx9Mib`d6NR9z%{3(Tl$Nst8B$`~C8eAw%94tps5VT_(CK!h*_~RV9HP$&pLt04=cx zb|jNp$pN0ko|tS~u!ngp(A(K^OTk}?nV-j(cu%LF2M2T{_$yx_CiSvgDJ=V{C@Bd; zPEbjWiRerWA~8)?vLX_B+_EpVFTGSl0+(LKo)(seQd*_7YNa88RwFe}i%bNOgoK2> zdJ2ng&=pc99weUYgLskq%L7JY{0&0U`h64;ldqO7g8(EiBb1jVl5@Jcz>kE6&Hq@8 znV3ZAC!haD*Z(Gj;ygI-qH&Pe zZzGnshy2)eAi$i2aNx(0Bhqk=9Fc~T#yIdJElnDZPK2j9#AVNdsNW!Oi7l{?g$HiZ zCT-VMyt}B2QwPk7-hTPVFO6A8Y@28tu`T6H)GrC8rKAvzw3Lu?Cce{Lx|8wzqy;W#+_dNiO2;oPrz3P`O z4Ebq@sOzF=*R-e$>1S}J(0Cn(?=ELT?9sj`o0@ zzA{T+HcJBmN@lNR>bU z5q%nC9%@X7C)D%>Z}nafsjFMItfSm*3#(6@fS=qx&d9Szc~`)Cv}YQl|6d-SP}3KJ zCdN=#YL_nS=;Uat9VRe-`}XnwH<;5|#skkZMz6iXl6f^t=FM}Emea`Nfh6+Sd1fMlpqo%ROKH>R>TN1y`z3S5 z4JOa=Y~>J}=0v+UReM#_8tBWuBtq%jhGh;CARwz(3nY(?-~QNR=NCyF*Uisf(T%4uZmuo(*+VW z+c#F+0LtvLlO7^54h2!)2Y0lP6 zzve>{sSr%0NZgI5%Hx#bf6Gpu^tsvCIBnyhIgMGeq{dB6^y*2Si{u12NRY{SC1NyZ zYZf-_20tn?=T=mhNX!*Cuusmh@gpEFn4xOUm|S2t*41F62^oZu2At3Q zRj9%ZhXxYbdywfvV&r173C$dc7|z0xQXb*g!;aCwG8f6Q|3TA{nc8?zpUW+>`QdJk?Y>-+fE8!5(!CTwQ+7)^RZ|y|%a2{F y5E(uEy9)!+PXU{n|NSUst(f!bMgIR0IQ}1LT|7(PH*Q1#0000 Date: Sat, 1 Jun 2024 00:41:09 +0200 Subject: [PATCH 38/39] Autocomplete for modifiers in overrides (#1057) * Autocomplete for modifiers * Update overrides.ts --------- Co-authored-by: Benjamin Odom --- src/overrides.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/overrides.ts b/src/overrides.ts index a4f94901957..8f5d4978be3 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -14,6 +14,7 @@ import { PokeballType } from "./data/pokeball"; import {TimeOfDay} from "#app/data/enums/time-of-day"; import { Gender } from "./data/gender"; import { StatusEffect } from "./data/status-effect"; +import { modifierTypes } from "./modifier/modifier-type"; /** * Overrides for testing different in game situations @@ -100,7 +101,7 @@ export const OPP_VARIANT_OVERRIDE: Variant = 0; * - BerryType is for BERRY */ interface ModifierOverride { - name: string, + name: keyof typeof modifierTypes & string, count?: integer type?: TempBattleStat|Stat|Nature|Type|BerryType } From 19885e05587ed5518439d6ec11f21c7a2b245220 Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Fri, 31 May 2024 17:52:16 -0500 Subject: [PATCH 39/39] Add Arena Events (#1627) * Add Arena Events * Update arena-events.ts --- src/field/arena-events.ts | 77 +++++++++++++++++++++++++++++++++++++++ src/field/arena.ts | 7 ++++ src/system/game-data.ts | 5 +++ 3 files changed, 89 insertions(+) create mode 100644 src/field/arena-events.ts diff --git a/src/field/arena-events.ts b/src/field/arena-events.ts new file mode 100644 index 00000000000..1cc632030a5 --- /dev/null +++ b/src/field/arena-events.ts @@ -0,0 +1,77 @@ +import { ArenaTagSide } from "#app/data/arena-tag.js"; +import { ArenaTagType } from "#app/data/enums/arena-tag-type.js"; +import { TerrainType } from "#app/data/terrain.js"; +import { WeatherType } from "#app/data/weather.js"; + +/** Alias for all {@linkcode ArenaEvent} type strings */ +export enum ArenaEventType { + /** Triggers when a {@linkcode WeatherType} is added, overlapped, or removed */ + WEATHER_CHANGED = "onWeatherChanged", + /** Triggers when a {@linkcode TerrainType} is added, overlapped, or removed */ + TERRAIN_CHANGED = "onTerrainChanged", + + /** Triggers when a {@linkcode ArenaTagType} is added or removed */ + TAG_CHANGED = "onTagChanged", +} + +/** + * Base container class for all {@linkcode ArenaEventType} events + * @extends Event + */ +export class ArenaEvent extends Event { + /** The total duration of the {@linkcode ArenaEventType} */ + public duration: number; + constructor(eventType: ArenaEventType, duration: number) { + super(eventType); + + this.duration = duration; + } +} +/** + * Container class for {@linkcode ArenaEventType.WEATHER_CHANGED} events + * @extends ArenaEvent +*/ +export class WeatherChangedEvent extends ArenaEvent { + /** The {@linkcode WeatherType} being overridden */ + public oldWeatherType: WeatherType; + /** The {@linkcode WeatherType} being set */ + public newWeatherType: WeatherType; + constructor(oldWeatherType: WeatherType, newWeatherType: WeatherType, duration: number) { + super(ArenaEventType.WEATHER_CHANGED, duration); + + this.oldWeatherType = oldWeatherType; + this.newWeatherType = newWeatherType; + } +} +/** + * Container class for {@linkcode ArenaEventType.TERRAIN_CHANGED} events + * @extends ArenaEvent +*/ +export class TerrainChangedEvent extends ArenaEvent { + /** The {@linkcode TerrainType} being overridden */ + public oldTerrainType: TerrainType; + /** The {@linkcode TerrainType} being set */ + public newTerrainType: TerrainType; + constructor(oldTerrainType: TerrainType, newTerrainType: TerrainType, duration: number) { + super(ArenaEventType.TERRAIN_CHANGED, duration); + + this.oldTerrainType = oldTerrainType; + this.newTerrainType = newTerrainType; + } +} +/** + * Container class for {@linkcode ArenaEventType.TAG_CHANGED} events + * @extends ArenaEvent +*/ +export class TagChangedEvent extends ArenaEvent { + /** The {@linkcode ArenaTagType} being set */ + public arenaTagType: ArenaTagType; + /** The {@linkcode ArenaTagSide} the tag is being placed on */ + public arenaTagSide: ArenaTagSide; + constructor(arenaTagType: ArenaTagType, arenaTagSide: ArenaTagSide, duration: number) { + super(ArenaEventType.TAG_CHANGED, duration); + + this.arenaTagType = arenaTagType; + this.arenaTagSide = arenaTagSide; + } +} diff --git a/src/field/arena.ts b/src/field/arena.ts index 817e5d5eaad..eac2eafb265 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -19,6 +19,7 @@ import { Terrain, TerrainType } from "../data/terrain"; import { PostTerrainChangeAbAttr, PostWeatherChangeAbAttr, applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs } from "../data/ability"; import Pokemon from "./pokemon"; import * as Overrides from "../overrides"; +import { WeatherChangedEvent, TerrainChangedEvent, TagChangedEvent } from "./arena-events"; export class Arena { public scene: BattleScene; @@ -34,6 +35,8 @@ export class Arena { private pokemonPool: PokemonPools; private trainerPool: BiomeTierTrainerPools; + public readonly eventTarget: EventTarget = new EventTarget(); + constructor(scene: BattleScene, biome: Biome, bgm: string) { this.scene = scene; this.biomeType = biome; @@ -300,6 +303,7 @@ export class Arena { const oldWeatherType = this.weather?.weatherType || WeatherType.NONE; this.weather = weather ? new Weather(weather, hasPokemonSource ? 5 : 0) : null; + this.eventTarget.dispatchEvent(new WeatherChangedEvent(oldWeatherType, this.weather?.weatherType, this.weather?.turnsLeft)); if (this.weather) { this.scene.unshiftPhase(new CommonAnimPhase(this.scene, undefined, undefined, CommonAnim.SUNNY + (weather - 1))); @@ -324,6 +328,7 @@ export class Arena { const oldTerrainType = this.terrain?.terrainType || TerrainType.NONE; this.terrain = terrain ? new Terrain(terrain, hasPokemonSource ? 5 : 0) : null; + this.eventTarget.dispatchEvent(new TerrainChangedEvent(oldTerrainType,this.terrain?.terrainType, this.terrain?.turnsLeft)); if (this.terrain) { if (!ignoreAnim) { @@ -545,6 +550,8 @@ export class Arena { this.tags.push(newTag); newTag.onAdd(this); + this.eventTarget.dispatchEvent(new TagChangedEvent(newTag.tagType, newTag.side, newTag.turnCount)); + return true; } diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 5bc0df19aa2..b1cbf77f4c6 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -30,6 +30,7 @@ import { allMoves } from "../data/move"; import { TrainerVariant } from "../field/trainer"; import { OutdatedPhase, ReloadSessionPhase } from "#app/phases"; import { Variant, variantData } from "#app/data/variant"; +import { TerrainChangedEvent, WeatherChangedEvent } from "#app/field/arena-events.js"; const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary @@ -740,6 +741,10 @@ export class GameData { }); scene.arena.weather = sessionData.arena.weather; + scene.arena.eventTarget.dispatchEvent(new WeatherChangedEvent(null, scene.arena.weather?.weatherType, scene.arena.weather?.turnsLeft)); + + scene.arena.terrain = sessionData.arena.terrain; + scene.arena.eventTarget.dispatchEvent(new TerrainChangedEvent(null, scene.arena.terrain?.terrainType, scene.arena.terrain?.turnsLeft)); // TODO //scene.arena.tags = sessionData.arena.tags;