From 71705dd6d40c67f6df64b80e68f0e144b4438888 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Fri, 3 May 2024 15:03:11 -0400 Subject: [PATCH 01/25] Add candy popup sound --- public/audio/se/shing.wav | Bin 0 -> 124500 bytes src/loading-scene.ts | 1 + src/ui/candy-bar.ts | 2 ++ src/ui/save-slot-select-ui-handler.ts | 2 +- 4 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 public/audio/se/shing.wav diff --git a/public/audio/se/shing.wav b/public/audio/se/shing.wav new file mode 100644 index 0000000000000000000000000000000000000000..e693cb207fca07ca996378bc42c1492516988a25 GIT binary patch literal 124500 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 literal 0 HcmV?d00001 diff --git a/src/loading-scene.ts b/src/loading-scene.ts index d0751e9a2da..05b6c9f50b1 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -223,6 +223,7 @@ export class LoadingScene extends SceneBase { this.loadSe('sparkle'); this.loadSe('restore'); this.loadSe('shine'); + this.loadSe('shing'); this.loadSe('charge'); this.loadSe('beam'); this.loadSe('upgrade'); diff --git a/src/ui/candy-bar.ts b/src/ui/candy-bar.ts index 2219e07479d..a4cc1295028 100644 --- a/src/ui/candy-bar.ts +++ b/src/ui/candy-bar.ts @@ -69,6 +69,8 @@ export default class CandyBar extends Phaser.GameObjects.Container { if (this.tween) this.tween.stop(); + (this.scene as BattleScene).playSound('shing'); + this.tween = this.scene.tweens.add({ targets: this, x: (this.scene.game.canvas.width / 6) - (this.bg.width - 5), diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index 181b0643cb9..11680cd3952 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -258,7 +258,7 @@ class SessionSlot extends Phaser.GameObjects.Container { async setupWithData(data: SessionSaveData) { this.remove(this.loadingLabel, true); - const gameModeLabel = addTextObject(this.scene, 8, 5, `${gameModes[data.gameMode].getName()} - Wave ${data.waveIndex}`, TextStyle.WINDOW); + const gameModeLabel = addTextObject(this.scene, 8, 5, `${gameModes[data.gameMode]?.getName() || 'Unknown'} - Wave ${data.waveIndex}`, TextStyle.WINDOW); this.add(gameModeLabel); const timestampLabel = addTextObject(this.scene, 8, 19, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW); From 9a559c8d6ac8e24009a0df5e0a7c1d6fb9a7e28a Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Fri, 3 May 2024 14:04:43 -0500 Subject: [PATCH 02/25] Update passive abilities for legendaries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is the first batch of passive ability revisions, this one directed at legendary and mythical Pokémon. --- src/data/pokemon-species.ts | 112 ++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index c67f0c14b47..57bb9230c5e 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -3300,7 +3300,7 @@ export const starterPassiveAbilities = { [Species.ENTEI]: Abilities.MOXIE, [Species.SUICUNE]: Abilities.UNAWARE, [Species.LARVITAR]: Abilities.SAND_FORCE, - [Species.LUGIA]: Abilities.STORM_DRAIN, + [Species.LUGIA]: Abilities.DELTA_STREAM, [Species.HO_OH]: Abilities.MAGIC_GUARD, [Species.CELEBI]: Abilities.GRASSY_SURGE, [Species.TREECKO]: Abilities.GRASSY_SURGE, @@ -3366,13 +3366,13 @@ export const starterPassiveAbilities = { [Species.LUVDISC]: Abilities.PICKUP, [Species.BAGON]: Abilities.GALE_WINGS, [Species.BELDUM]: Abilities.IRON_FIST, - [Species.REGIROCK]: Abilities.REGENERATOR, - [Species.REGICE]: Abilities.ICE_SCALES, - [Species.REGISTEEL]: Abilities.STEELY_SPIRIT, - [Species.LATIAS]: Abilities.SERENE_GRACE, - [Species.LATIOS]: Abilities.SERENE_GRACE, + [Species.REGIROCK]: Abilities.SAND_STREAM, + [Species.REGICE]: Abilities.SNOW_WARNING, + [Species.REGISTEEL]: Abilities.FILTER, + [Species.LATIAS]: Abilities.SOUL_HEART, + [Species.LATIOS]: Abilities.TINTED_LENS, [Species.KYOGRE]: Abilities.HYDRATION, - [Species.GROUDON]: Abilities.EARTH_EATER, + [Species.GROUDON]: Abilities.FLAME_BODY, [Species.RAYQUAZA]: Abilities.UNNERVE, [Species.JIRACHI]: Abilities.COMATOSE, [Species.DEOXYS]: Abilities.PROTEAN, @@ -3414,16 +3414,16 @@ export const starterPassiveAbilities = { [Species.MANTYKE]: Abilities.STORM_DRAIN, [Species.SNOVER]: Abilities.SNOW_CLOAK, [Species.ROTOM]: Abilities.HADRON_ENGINE, - [Species.UXIE]: Abilities.ILLUSION, + [Species.UXIE]: Abilities.UNAWARE, [Species.MESPRIT]: Abilities.MOODY, [Species.AZELF]: Abilities.NEUROFORCE, [Species.DIALGA]: Abilities.SPEED_BOOST, - [Species.PALKIA]: Abilities.MAGIC_BOUNCE, - [Species.HEATRAN]: Abilities.ROUGH_SKIN, + [Species.PALKIA]: Abilities.MULTISCALE, + [Species.HEATRAN]: Abilities.FILTER, [Species.REGIGIGAS]: Abilities.MINDS_EYE, - [Species.GIRATINA]: Abilities.SHADOW_TAG, + [Species.GIRATINA]: Abilities.SHADOW_SHIELD, [Species.CRESSELIA]: Abilities.MAGIC_BOUNCE, - [Species.PHIONE]: Abilities.SWIFT_SWIM, + [Species.PHIONE]: Abilities.SIMPLE, [Species.MANAPHY]: Abilities.SIMPLE, [Species.DARKRAI]: Abilities.UNNERVE, [Species.SHAYMIN]: Abilities.FLOWER_VEIL, @@ -3500,16 +3500,16 @@ export const starterPassiveAbilities = { [Species.LARVESTA]: Abilities.DROUGHT, [Species.COBALION]: Abilities.INTREPID_SWORD, [Species.TERRAKION]: Abilities.ROCKY_PAYLOAD, - [Species.VIRIZION]: Abilities.SYMBIOSIS, - [Species.TORNADUS]: Abilities.DELTA_STREAM, + [Species.VIRIZION]: Abilities.SHARPNESS, + [Species.TORNADUS]: Abilities.DRIZZLE, [Species.THUNDURUS]: Abilities.DRIZZLE, [Species.RESHIRAM]: Abilities.ORICHALCUM_PULSE, [Species.ZEKROM]: Abilities.HADRON_ENGINE, - [Species.LANDORUS]: Abilities.PRANKSTER, + [Species.LANDORUS]: Abilities.STORM_DRAIN, [Species.KYUREM]: Abilities.SNOW_WARNING, - [Species.KELDEO]: Abilities.SHARPNESS, - [Species.MELOETTA]: Abilities.PUNK_ROCK, - [Species.GENESECT]: Abilities.MEGA_LAUNCHER, + [Species.KELDEO]: Abilities.GRIM_NEIGH, + [Species.MELOETTA]: Abilities.MINDS_EYE, + [Species.GENESECT]: Abilities.REGENERATOR, [Species.CHESPIN]: Abilities.IRON_BARBS, [Species.FENNEKIN]: Abilities.MAGIC_BOUNCE, [Species.FROAKIE]: Abilities.ADAPTABILITY, @@ -3541,11 +3541,11 @@ export const starterPassiveAbilities = { [Species.PUMPKABOO]: Abilities.FLASH_FIRE, [Species.BERGMITE]: Abilities.MIRROR_ARMOR, [Species.NOIBAT]: Abilities.PUNK_ROCK, - [Species.XERNEAS]: Abilities.COMPETITIVE, - [Species.YVELTAL]: Abilities.DEFIANT, - [Species.ZYGARDE]: Abilities.REGENERATOR, - [Species.DIANCIE]: Abilities.QUEENLY_MAJESTY, - [Species.HOOPA]: Abilities.TRACE, + [Species.XERNEAS]: Abilities.MISTY_SURGE, + [Species.YVELTAL]: Abilities.SOUL_HEART, + [Species.ZYGARDE]: Abilities.HUGE_POWER, + [Species.DIANCIE]: Abilities.LEVITATE, + [Species.HOOPA]: Abilities.OPPORTUNIST, [Species.VOLCANION]: Abilities.FILTER, [Species.ROWLET]: Abilities.SNIPER, [Species.LITTEN]: Abilities.PRANKSTER, @@ -3582,26 +3582,26 @@ export const starterPassiveAbilities = { [Species.DRAMPA]: Abilities.FLASH_FIRE, [Species.DHELMISE]: Abilities.INFILTRATOR, [Species.JANGMO_O]: Abilities.DANCER, - [Species.TAPU_KOKO]: Abilities.GALVANIZE, - [Species.TAPU_LELE]: Abilities.BERSERK, - [Species.TAPU_BULU]: Abilities.FLOWER_VEIL, + [Species.TAPU_KOKO]: Abilities.TRANSISTOR, + [Species.TAPU_LELE]: Abilities.SHEER_FORCE, + [Species.TAPU_BULU]: Abilities.GRASS_PELT, [Species.TAPU_FINI]: Abilities.FAIRY_AURA, [Species.COSMOG]: Abilities.BEAST_BOOST, - [Species.NIHILEGO]: Abilities.POISON_PUPPETEER, + [Species.NIHILEGO]: Abilities.LEVITATE, [Species.BUZZWOLE]: Abilities.MOXIE, - [Species.PHEROMOSA]: Abilities.MOXIE, - [Species.XURKITREE]: Abilities.LIGHTNING_ROD, - [Species.CELESTEELA]: Abilities.CHLOROPHYLL, + [Species.PHEROMOSA]: Abilities.TINTED_LENS, + [Species.XURKITREE]: Abilities.TRANSISTOR, + [Species.CELESTEELA]: Abilities.HEATPROOF, [Species.KARTANA]: Abilities.SHARPNESS, - [Species.GUZZLORD]: Abilities.GLUTTONY, + [Species.GUZZLORD]: Abilities.INNARDS_OUT, [Species.NECROZMA]: Abilities.BEAST_BOOST, [Species.MAGEARNA]: Abilities.STEELY_SPIRIT, [Species.MARSHADOW]: Abilities.IRON_FIST, - [Species.POIPOLE]: Abilities.MERCILESS, - [Species.STAKATAKA]: Abilities.DAUNTLESS_SHIELD, + [Species.POIPOLE]: Abilities.SHEER_FORCE, + [Species.STAKATAKA]: Abilities.SOLID_ROCK, [Species.BLACEPHALON]: Abilities.MAGIC_GUARD, - [Species.ZERAORA]: Abilities.MOTOR_DRIVE, - [Species.MELTAN]: Abilities.FULL_METAL_BODY, + [Species.ZERAORA]: Abilities.TOUGH_CLAWS, + [Species.MELTAN]: Abilities.STEELY_SPIRIT, [Species.GROOKEY]: Abilities.GRASS_PELT, [Species.SCORBUNNY]: Abilities.RECKLESS, [Species.SOBBLE]: Abilities.SUPER_LUCK, @@ -3639,17 +3639,17 @@ export const starterPassiveAbilities = { [Species.ARCTOVISH]: Abilities.STRONG_JAW, [Species.DURALUDON]: Abilities.MEGA_LAUNCHER, [Species.DREEPY]: Abilities.PARENTAL_BOND, - [Species.ZACIAN]: Abilities.GUARD_DOG, - [Species.ZAMAZENTA]: Abilities.GUARD_DOG, + [Species.ZACIAN]: Abilities.UNNERVE, + [Species.ZAMAZENTA]: Abilities.STAMINA, [Species.ETERNATUS]: Abilities.SUPREME_OVERLORD, [Species.KUBFU]: Abilities.IRON_FIST, - [Species.ZARUDE]: Abilities.PRANKSTER, - [Species.REGIELEKI]: Abilities.LEVITATE, - [Species.REGIDRAGO]: Abilities.INTIMIDATE, + [Species.ZARUDE]: Abilities.GRASSY_SURGE, + [Species.REGIELEKI]: Abilities.ELECTRIC_SURGE, + [Species.REGIDRAGO]: Abilities.MULTISCALE, [Species.GLASTRIER]: Abilities.FILTER, - [Species.SPECTRIER]: Abilities.PERISH_BODY, + [Species.SPECTRIER]: Abilities.SHADOW_SHIELD, [Species.CALYREX]: Abilities.HARVEST, - [Species.ENAMORUS]: Abilities.PRANKSTER, + [Species.ENAMORUS]: Abilities.FAIRY_AURA, [Species.SPRIGATITO]: Abilities.MAGICIAN, [Species.FUECOCO]: Abilities.EARTH_EATER, [Species.QUAXLY]: Abilities.DANCER, @@ -3688,40 +3688,40 @@ export const starterPassiveAbilities = { [Species.DONDOZO]: Abilities.GLUTTONY, [Species.TATSUGIRI]: Abilities.WATER_BUBBLE, [Species.GREAT_TUSK]: Abilities.INTIMIDATE, - [Species.SCREAM_TAIL]: Abilities.PIXILATE, + [Species.SCREAM_TAIL]: Abilities.UNAWARE, [Species.BRUTE_BONNET]: Abilities.BEAST_BOOST, [Species.FLUTTER_MANE]: Abilities.DAZZLING, - [Species.SLITHER_WING]: Abilities.MOXIE, + [Species.SLITHER_WING]: Abilities.SCRAPPY, [Species.SANDY_SHOCKS]: Abilities.EARTH_EATER, - [Species.IRON_TREADS]: Abilities.BULLETPROOF, + [Species.IRON_TREADS]: Abilities.STEELY_SPIRIT, [Species.IRON_BUNDLE]: Abilities.SNOW_WARNING, [Species.IRON_HANDS]: Abilities.IRON_FIST, - [Species.IRON_JUGULIS]: Abilities.NO_GUARD, + [Species.IRON_JUGULIS]: Abilities.AERILATE, [Species.IRON_MOTH]: Abilities.LEVITATE, [Species.IRON_THORNS]: Abilities.SAND_STREAM, [Species.FRIGIBAX]: Abilities.THICK_FAT, [Species.GIMMIGHOUL]: Abilities.SUPER_LUCK, - [Species.WO_CHIEN]: Abilities.TRIAGE, - [Species.CHIEN_PAO]: Abilities.REFRIGERATE, + [Species.WO_CHIEN]: Abilities.GRASSY_SURGE, + [Species.CHIEN_PAO]: Abilities.INTREPID_SWORD, [Species.TING_LU]: Abilities.STAMINA, - [Species.CHI_YU]: Abilities.BLAZE, - [Species.ROARING_MOON]: Abilities.AERILATE, + [Species.CHI_YU]: Abilities.DROUGHT, + [Species.ROARING_MOON]: Abilities.TOUGH_CLAWS, [Species.IRON_VALIANT]: Abilities.DOWNLOAD, [Species.KORAIDON]: Abilities.PROTOSYNTHESIS, [Species.MIRAIDON]: Abilities.QUARK_DRIVE, [Species.WALKING_WAKE]: Abilities.BEAST_BOOST, [Species.IRON_LEAVES]: Abilities.SHARPNESS, [Species.POLTCHAGEIST]: Abilities.FLAME_BODY, - [Species.OKIDOGI]: Abilities.INTIMIDATE, - [Species.MUNKIDORI]: Abilities.PRANKSTER, - [Species.FEZANDIPITI]: Abilities.DAZZLING, + [Species.OKIDOGI]: Abilities.FUR_COAT, + [Species.MUNKIDORI]: Abilities.NEUROFORCE, + [Species.FEZANDIPITI]: Abilities.LEVITATE, [Species.OGERPON]: Abilities.OPPORTUNIST, [Species.GOUGING_FIRE]: Abilities.BEAST_BOOST, [Species.RAGING_BOLT]: Abilities.BEAST_BOOST, [Species.IRON_BOULDER]: Abilities.SHARPNESS, [Species.IRON_CROWN]: Abilities.SHARPNESS, - [Species.TERAPAGOS]: Abilities.PROTEAN, - [Species.PECHARUNT]: Abilities.CORROSION, + [Species.TERAPAGOS]: Abilities.REGENERATOR, + [Species.PECHARUNT]: Abilities.TOXIC_CHAIN, [Species.ALOLA_RATTATA]: Abilities.CHEEK_POUCH, [Species.ALOLA_SANDSHREW]: Abilities.ICE_BODY, [Species.ALOLA_VULPIX]: Abilities.ICE_BODY, @@ -3736,7 +3736,7 @@ export const starterPassiveAbilities = { [Species.GALAR_FARFETCHD]: Abilities.SUPER_LUCK, [Species.GALAR_ARTICUNO]: Abilities.SERENE_GRACE, [Species.GALAR_ZAPDOS]: Abilities.TOUGH_CLAWS, - [Species.GALAR_MOLTRES]: Abilities.REGENERATOR, + [Species.GALAR_MOLTRES]: Abilities.DARK_AURA, [Species.GALAR_CORSOLA]: Abilities.SHADOW_TAG, [Species.GALAR_ZIGZAGOON]: Abilities.PICKPOCKET, [Species.GALAR_DARUMAKA]: Abilities.FLASH_FIRE, From cbf06ffa2ca647dc9ee8a89028cc044431c8b89d Mon Sep 17 00:00:00 2001 From: Madi Simpson Date: Fri, 3 May 2024 12:06:43 -0700 Subject: [PATCH 03/25] bugfix: ensure direct stat modifying moves update both pokemon's stat info --- src/data/move.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 21f376254f7..264f5576ea5 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1573,7 +1573,7 @@ export class CopyStatsAttr extends MoveEffectAttr { user.addTag(BattlerTagType.CRIT_BOOST, 0, move.id); else user.removeTag(BattlerTagType.CRIT_BOOST); - + target.updateInfo(); user.updateInfo(); target.scene.queueMessage(getPokemonMessage(user, 'copied\n') + getPokemonMessage(target, `'s stat changes!`)); @@ -1589,7 +1589,7 @@ export class InvertStatsAttr extends MoveEffectAttr { for (let s = 0; s < target.summonData.battleStats.length; s++) target.summonData.battleStats[s] *= -1; - + target.updateInfo(); user.updateInfo(); target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere all reversed!`)); @@ -1605,7 +1605,7 @@ export class ResetStatsAttr extends MoveEffectAttr { for (let s = 0; s < target.summonData.battleStats.length; s++) target.summonData.battleStats[s] = 0; - + target.updateInfo(); user.updateInfo(); target.scene.queueMessage(getPokemonMessage(target, `'s stat changes\nwere eliminated!`)); From 1484a52fd70adbce0e8ac5f7ce07fadae998465c Mon Sep 17 00:00:00 2001 From: Matt Ross <13306707+mattrossdev@users.noreply.github.com> Date: Fri, 3 May 2024 12:54:21 -0700 Subject: [PATCH 04/25] Add variable power attribute for knock off (#426) * feature/add-variable-power-knock-off * Remove console logs --- src/data/move.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/data/move.ts b/src/data/move.ts index 264f5576ea5..5f86911aebb 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -2021,6 +2021,17 @@ export class PresentPowerAttr extends VariablePowerAttr { } } +export class KnockOffPowerAttr extends VariablePowerAttr { + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if(target.getHeldItems().length > 0){ + (args[0] as Utils.NumberHolder).value *= 1.5; + return true; + } + + return false; + } +} + export class VariableAtkAttr extends MoveAttr { constructor() { super(); @@ -4583,6 +4594,7 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.DROWSY, false, true) .condition((user, target, move) => !target.status), new AttackMove(Moves.KNOCK_OFF, Type.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3) + .attr(KnockOffPowerAttr) .partial(), new AttackMove(Moves.ENDEAVOR, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 3) .attr(MatchHpAttr) From 3b61662bba9927115b385abb2893804f5cc5e564 Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Fri, 3 May 2024 15:17:37 -0500 Subject: [PATCH 05/25] Fixed Mighty Cleave not being a Slicing Move --- src/data/move.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/move.ts b/src/data/move.ts index 5f86911aebb..5c29b6a5758 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -6428,6 +6428,7 @@ export function initMoves() { new AttackMove(Moves.THUNDERCLAP, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 5, -1, 1, 9) .condition((user, target, move) => user.scene.currentBattle.turnCommands[target.getBattlerIndex()].command === Command.FIGHT && !target.turnData.acted && allMoves[user.scene.currentBattle.turnCommands[target.getBattlerIndex()].move.move].category !== MoveCategory.STATUS), new AttackMove(Moves.MIGHTY_CLEAVE, Type.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9) + .slicingMove() .ignoresProtect(), new AttackMove(Moves.TACHYON_CUTTER, Type.STEEL, MoveCategory.SPECIAL, 50, -1, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._2) From 313fdc0e4222202e28878496cd3e2101e35759e9 Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Fri, 3 May 2024 15:38:32 -0500 Subject: [PATCH 06/25] Fix Venom Drench not working on Toxic Status --- src/data/move.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/move.ts b/src/data/move.ts index 5c29b6a5758..dd149940fee 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -5444,7 +5444,7 @@ export function initMoves() { new StatusMove(Moves.EERIE_IMPULSE, Type.ELECTRIC, 100, 15, -1, 0, 6) .attr(StatChangeAttr, BattleStat.SPATK, -2), new StatusMove(Moves.VENOM_DRENCH, Type.POISON, 100, 20, 100, 0, 6) - .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK, BattleStat.SPD ], -1, false, (user, target, move) => target.status?.effect === StatusEffect.POISON) + .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK, BattleStat.SPD ], -1, false, (user, target, move) => target.status?.effect === StatusEffect.POISON || target.status?.effect === StatusEffect.TOXIC) .target(MoveTarget.ALL_NEAR_ENEMIES), new StatusMove(Moves.POWDER, Type.BUG, 100, 20, -1, 1, 6) .powderMove() From d48f0aa97d7438ceb41f6b69d0af7076d21294f8 Mon Sep 17 00:00:00 2001 From: Madi Simpson Date: Fri, 3 May 2024 13:55:46 -0700 Subject: [PATCH 07/25] Implement Anger Shell and Berserk (#421) * abilities: implement anger shell and berserk * abilities: fix small typo causing berserk to raise speed instead of spatk * abilities: condense battlestats into an array instead of multiple attrs --- src/data/ability.ts | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index a0f85e2fd5e..7ac3e721837 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -580,6 +580,35 @@ export class PostDefendStatChangeAbAttr extends PostDefendAbAttr { } } +export class PostDefendHpGatedStatChangeAbAttr extends PostDefendAbAttr { + private condition: PokemonDefendCondition; + private hpGate: number; + private stats: BattleStat[]; + private levels: integer; + private selfTarget: boolean; + + constructor(condition: PokemonDefendCondition, hpGate: number, stats: BattleStat[], levels: integer, selfTarget: boolean = true) { + super(true); + + this.condition = condition; + this.hpGate = hpGate; + this.stats = stats; + this.levels = levels; + this.selfTarget = selfTarget; + } + + applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean { + const hpGateFlat: integer = Math.ceil(pokemon.getMaxHp() * this.hpGate) + const lastAttackReceived = pokemon.turnData.attacksReceived[pokemon.turnData.attacksReceived.length - 1] + if (this.condition(pokemon, attacker, move.getMove()) && (pokemon.hp <= hpGateFlat && (pokemon.hp + lastAttackReceived.damage) > hpGateFlat)) { + pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, (this.selfTarget ? pokemon : attacker).getBattlerIndex(), true, this.stats, this.levels)); + return true; + } + + return false; + } +} + export class PostDefendApplyArenaTrapTagAbAttr extends PostDefendAbAttr { private condition: PokemonDefendCondition; private tagType: ArenaTagType; @@ -3091,7 +3120,7 @@ export function initAbilities() { new Ability(Abilities.STEELWORKER, 7) .attr(MoveTypePowerBoostAbAttr, Type.STEEL), new Ability(Abilities.BERSERK, 7) - .unimplemented(), + .attr(PostDefendHpGatedStatChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [BattleStat.SPATK], 1), new Ability(Abilities.SLUSH_RUSH, 7) .attr(BattleStatMultiplierAbAttr, BattleStat.SPD, 2) .condition(getWeatherCondition(WeatherType.HAIL, WeatherType.SNOW)), @@ -3327,7 +3356,8 @@ export function initAbilities() { .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) .ignorable(), new Ability(Abilities.ANGER_SHELL, 9) - .unimplemented(), + .attr(PostDefendHpGatedStatChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ BattleStat.ATK, BattleStat.SPATK, BattleStat.SPD ], 1) + .attr(PostDefendHpGatedStatChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ BattleStat.DEF, BattleStat.SPDEF ], -1), new Ability(Abilities.PURIFYING_SALT, 9) .attr(StatusEffectImmunityAbAttr) .attr(ReceivedTypeDamageMultiplierAbAttr, Type.GHOST, 0.5) From 06ae04abaded1c0f994b4c0e0d419b118807aba3 Mon Sep 17 00:00:00 2001 From: Madi Simpson Date: Fri, 3 May 2024 14:06:50 -0700 Subject: [PATCH 08/25] bugfix: ensure hit recoil moves always do at least 1hp in recoil --- src/data/move.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/move.ts b/src/data/move.ts index dd149940fee..958588f7af4 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -685,7 +685,7 @@ export class RecoilAttr extends MoveEffectAttr { return false; const recoilDamage = Math.max(Math.floor((!this.useHp ? user.turnData.damageDealt : user.getMaxHp()) * this.damageRatio), - !this.useHp && user.turnData.damageDealt ? 1 : 0); + user.turnData.damageDealt ? 1 : 0); if (!recoilDamage) return false; From 6f446324db639905133de5ed106811534bf3c85c Mon Sep 17 00:00:00 2001 From: gericocross <32669590+gericocross@users.noreply.github.com> Date: Fri, 3 May 2024 23:38:34 +0200 Subject: [PATCH 09/25] Longer descriptions don't stuck shorter ones anymore --- src/ui/summary-ui-handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index cf5eb3639fd..7776e21782f 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -441,6 +441,7 @@ export default class SummaryUiHandler extends UiHandler { const selectedMove = this.getSelectedMove(); if (selectedMove) { + this.moveDescriptionText.setY(84); this.movePowerText.setText(selectedMove.power >= 0 ? selectedMove.power.toString() : '---'); this.moveAccuracyText.setText(selectedMove.accuracy >= 0 ? selectedMove.accuracy.toString() : '---'); this.moveCategoryIcon.setFrame(MoveCategory[selectedMove.category].toLowerCase()); @@ -457,7 +458,6 @@ export default class SummaryUiHandler extends UiHandler { } if (moveDescriptionLineCount > 3) { - this.moveDescriptionText.setY(84); this.descriptionScrollTween = this.scene.tweens.add({ targets: this.moveDescriptionText, delay: Utils.fixedInt(2000), From 19e434929c19f00342fa2529a3e8575adc584c72 Mon Sep 17 00:00:00 2001 From: ArceUseless <36188730+ArceUseless@users.noreply.github.com> Date: Fri, 3 May 2024 23:52:09 +0200 Subject: [PATCH 10/25] Spanish translations (#422) * Spanish translations for intro messages and some menus. Added Empty (save file) to lang files * Spanish translations + new literals in all langs --------- Co-authored-by: rnicar --- src/locales/de/menu.ts | 6 ++- src/locales/en/menu.ts | 6 ++- src/locales/es/command-ui-handler.ts | 2 +- src/locales/es/menu.ts | 14 ++++-- src/locales/es/tutorial.ts | 69 +++++++++++++++------------ src/locales/fr/menu.ts | 6 ++- src/locales/it/menu.ts | 6 ++- src/ui/confirm-ui-handler.ts | 5 +- src/ui/save-slot-select-ui-handler.ts | 3 +- src/ui/starter-select-ui-handler.ts | 3 +- 10 files changed, 75 insertions(+), 45 deletions(-) diff --git a/src/locales/de/menu.ts b/src/locales/de/menu.ts index c648b15bfe8..3f86ae41a7e 100644 --- a/src/locales/de/menu.ts +++ b/src/locales/de/menu.ts @@ -39,5 +39,9 @@ export const menu: SimpleTranslationEntries = { "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online" + "playersOnline": "Players Online", + "empty":"Empty", + "yes":"Yes", + "no":"No", + "confirmStartTeam":'Begin with these Pokémon?', } as const; \ No newline at end of file diff --git a/src/locales/en/menu.ts b/src/locales/en/menu.ts index 42888b17337..887f3d87834 100644 --- a/src/locales/en/menu.ts +++ b/src/locales/en/menu.ts @@ -39,5 +39,9 @@ export const menu: SimpleTranslationEntries = { "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online" + "playersOnline": "Players Online", + "empty":"Empty", + "yes":"Yes", + "no":"No", + "confirmStartTeam":'Begin with these Pokémon?', } as const; \ No newline at end of file diff --git a/src/locales/es/command-ui-handler.ts b/src/locales/es/command-ui-handler.ts index 237e779db03..66a892f8fd3 100644 --- a/src/locales/es/command-ui-handler.ts +++ b/src/locales/es/command-ui-handler.ts @@ -2,7 +2,7 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const commandUiHandler: SimpleTranslationEntries = { "fight": "Luchar", - "ball": "Ball", + "ball": "Balls", "pokemon": "Pokémon", "run": "Huir", "actionMessage": "¿Qué debería\nhacer {{pokemonName}}?", diff --git a/src/locales/es/menu.ts b/src/locales/es/menu.ts index c67287ae0cc..5569c1e1668 100644 --- a/src/locales/es/menu.ts +++ b/src/locales/es/menu.ts @@ -19,9 +19,13 @@ export const menu: SimpleTranslationEntries = { "boyOrGirl": "¿Eres un chico o una chica?", "boy": "Chico", "girl": "Chica", - "dailyRankings": "Daily Rankings", - "weeklyRankings": "Weekly Rankings", - "noRankings": "No Rankings", - "loading": "Loading…", - "playersOnline": "Players Online" + "dailyRankings": "Rankings Diarios", + "weeklyRankings": "Rankings Semanales", + "noRankings": "Sin Rankings", + "loading": "Cargando…", + "playersOnline": "Jugadores en Línea", + "empty":"Vacío", + "yes":"Sí", + "no":"No", + "confirmStartTeam":'¿Comenzar con estos Pokémon?', } as const; \ No newline at end of file diff --git a/src/locales/es/tutorial.ts b/src/locales/es/tutorial.ts index 2773b6710ba..e179ca55cee 100644 --- a/src/locales/es/tutorial.ts +++ b/src/locales/es/tutorial.ts @@ -1,42 +1,49 @@ import { SimpleTranslationEntries } from "#app/plugins/i18n"; export const tutorial: SimpleTranslationEntries = { - "intro": `Welcome to PokéRogue! This is a battle-focused Pokémon fangame with roguelite elements. - $This game is not monetized and we claim no ownership of Pokémon nor of the copyrighted assets used. - $The game is a work in progress, but fully playable.\nFor bug reports, please use the Discord community. - $If the game runs slowly, please ensure 'Hardware Acceleration' is turned on in your browser settings.`, + "intro": `¡Bienvenido/a a PokéRogue! Este es un fangame de Pokémon centrado en el combate con elementos roguelite. + $Este juego no está monetizado y no reclamamos ningún derecho de propiedad sobre Pokémon ni sobre ninguno de + $los recursos con copyright utilizados. + $El juego está en proceso, pero es completamente jugable.\nPara reportar bugs, por favor, hazlo en nuestra + $comunidad de Discord. + $Si el juego va lento, por favor, asegúrate de que tengas activada la opción 'Aceleración de gráficos' en los + $ajustes de tu navegador.`, - "accessMenu": `To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.`, + "accessMenu": `Para acceder al menú, pulsa M o Escape cuando\ntengas el control. + $El menú contiene la configuración y otras funciones.`, - "menu": `From this menu you can access the settings. - $From the settings you can change game speed, window style, and other options. - $There are also various other features here, so be sure to check them all!`, + "menu": `Desde este menú podrás acceder a la configuración. + $Podrás cambiar la velocidad del juego, el estilo de la ventana y demás. + $Hay más opciones, ¡así que pruébalas todas!`, - "starterSelect": `From this screen, you can select your starters.\nThese are your initial party members. - $Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10. - $You can also select gender, ability, and form depending on\nthe variants you've caught or hatched. - $The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!`, + "starterSelect": `En esta pantalla podrás elegir tus iniciales. Estos serán tus\nmiembros de equipo al comenzar la partida. + $Cada inicial tiene un valor. Tu equipo puede contener hasta 6\nmiembros mientras el valor total no pase de 10. + $También puedes elegir su género, habilidad y forma\ndependiendo de las variantes que hayas conseguido. + $Los IVs de los iniciales corresponderán al valor más alto de\nlos Pokémon de la misma especie que hayas obtenido. + $¡Así que intenta conseguir muchos Pokémon de la misma\nespecie!`, - "pokerus": `A daily random 3 selectable starters have a purple border. - $If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!`, + "pokerus": `Cada día, 3 iniciales aleatorios tendrán un borde morado. + $Si ves un inicial que tengas con este borde, prueba a\nañadirlo a tu equipo. ¡No olvides revisar sus datos!`, - "statChange": `Stat changes persist across battles as long as your Pokémon aren't recalled. - $Your Pokémon are recalled before a trainer battle and before entering a new biome. - $You can also view the stat changes for the Pokémon on the field by holding C or Shift.`, + "statChange": `Los cambios de estadísticas se mantienen entre combates\nmientras que el Pokémon no vuelva a la Poké Ball. + $Tus Pokémon vuelven a sus Poké Balls antes de combates contra entrenadores y de entrar a un nuevo bioma. + $También puedes ver los cambios de estadísticas del Pokémon en campo manteniendo pulsado C o Shift.`, - "selectItem": `After every battle, you are given a choice of 3 random items.\nYou may only pick one. - $These range from consumables, to Pokémon held items, to passive permanent items. - $Most non-consumable item effects will stack in various ways. - $Some items will only show up if they can be used, such as evolution items. - $You can also transfer held items between Pokémon using the transfer option. - $The transfer option will appear in the bottom right once you have obtained a held item. - $You may purchase consumable items with money, and a larger variety will be available the further you get. - $Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.`, + "selectItem": `Tras cada combate, tendrás la opción de elegir entre tres objetos aleatorios. Solo podrás escoger uno. + $Estos objetos pueden ser consumibles, objetos equipables u objetos pasivos permanentes (hasta acabar la partida). + $La mayoría de los efectos de objetos no consumibles se acumularán de varias maneras. + $Algunos objetos solo aparecerán si pueden ser utilizados, como las piedras evolutivas. + $También puedes transferir objetos equipados entre Pokémon utilizando la opción de transferir. + $La opción de transferir aparecerá en la parte inferior derecha una vez hayas obtenido un objeto equipable. + $También puedes comprar objetos consumibles con dinero y su variedad irá aumentando según tu avance. + $Asegúrate de comprar antes de escoger un objeto aleatorio, ya que se avanzará al siguiente combate.`, - "eggGacha": `From this screen, you can redeem your vouchers for\nPokémon eggs. - $Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch. - $Hatched Pokémon also won't be added to your party, they will\nbe added to your starters. - $Pokémon hatched from eggs generally have better IVs than\nwild Pokémon. - $Some Pokémon can only even be obtained from eggs. - $There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!`, + "eggGacha": `En esta pantalla podrás canjear tus vales por huevos\nde Pokémon. + $Los huevos deben eclosionar y estarán más cerca de\nhacerlo tras cada combate. + $Los huevos más raros tardarán más en eclosionar. + $Los Pokémon que hayan salido del huevo no se\nañadirán a tu equipo, pero sí a tus iniciales. + $Los Pokémon salidos de un huevo suelen tener mejores\nIVs que los Pokémon salvajes. + $Algunos Pokémon solo pueden ser obtenidos de huevos. + $Hay 3 máquinas diferentes entre las que elegir, cada\nuna con zdiferentes bonificaciones. + $¡Así que escoge la que más te interese!`, } as const; \ No newline at end of file diff --git a/src/locales/fr/menu.ts b/src/locales/fr/menu.ts index 1744297089c..7de214271eb 100644 --- a/src/locales/fr/menu.ts +++ b/src/locales/fr/menu.ts @@ -34,5 +34,9 @@ export const menu: SimpleTranslationEntries = { "weeklyRankings": "Classement de la Semaine", "noRankings": "Pas de Classement", "loading": "Chargement…", - "playersOnline": "Joueurs Connectés" + "playersOnline": "Joueurs Connectés", + "empty":"Empty", + "yes":"Yes", + "no":"No", + "confirmStartTeam":'Begin with these Pokémon?', } as const; diff --git a/src/locales/it/menu.ts b/src/locales/it/menu.ts index 9812236b7f0..33c128c137e 100644 --- a/src/locales/it/menu.ts +++ b/src/locales/it/menu.ts @@ -39,5 +39,9 @@ export const menu: SimpleTranslationEntries = { "weeklyRankings": "Weekly Rankings", "noRankings": "No Rankings", "loading": "Loading…", - "playersOnline": "Players Online" + "playersOnline": "Players Online", + "empty":"Empty", + "yes":"Yes", + "no":"No", + "confirmStartTeam":'Begin with these Pokémon?', } as const; \ No newline at end of file diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index d9e7726d826..a220b6f3a3d 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -1,6 +1,7 @@ import BattleScene, { Button } from "../battle-scene"; import AbstractOptionSelectUiHandler, { OptionSelectConfig } from "./abstact-option-select-ui-handler"; import { Mode } from "./ui"; +import i18next from "i18next"; export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { private switchCheck: boolean; @@ -19,14 +20,14 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { const config: OptionSelectConfig = { options: [ { - label: 'Yes', + label: i18next.t("menu:yes"), handler: () => { args[0](); return true; } }, { - label: 'No', + label: i18next.t("menu:no"), handler: () => { args[1](); return true; diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index 11680cd3952..69ac94d99ba 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -8,6 +8,7 @@ import * as Utils from "../utils"; import PokemonData from "../system/pokemon-data"; import { PokemonHeldItemModifier } from "../modifier/modifier"; import MessageUiHandler from "./message-ui-handler"; +import i18next from "i18next"; const sessionSlotCount = 5; @@ -314,7 +315,7 @@ class SessionSlot extends Phaser.GameObjects.Container { this.scene.gameData.getSession(this.slotId).then(async sessionData => { if (!sessionData) { this.hasData = false; - this.loadingLabel.setText('Empty'); + this.loadingLabel.setText(i18next.t("menu:empty")); resolve(false); return; } diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index f1e058b12cf..7cc99d81fb7 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -27,6 +27,7 @@ import { argbFromRgba } from "@material/material-color-utilities"; import { OptionSelectItem } from "./abstact-option-select-ui-handler"; import { pokemonPrevolutions } from "#app/data/pokemon-evolutions"; import { Variant, getVariantTint } from "#app/data/variant"; +import i18next from "i18next"; export type StarterSelectCallback = (starters: Starter[]) => void; @@ -1653,7 +1654,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.clearText(); }; - ui.showText('Begin with these Pokémon?', null, () => { + ui.showText(i18next.t("menu:confirmStartTeam"), null, () => { ui.setModeWithoutClear(Mode.CONFIRM, () => { const startRun = (gameMode: GameModes) => { this.scene.gameMode = gameModes[gameMode]; From 2eec545c496decd9c4a8e61ebca5ac259af27287 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Fri, 3 May 2024 17:54:56 -0400 Subject: [PATCH 11/25] Fix stat number keys in legacy battle stats view --- public/images/ui/legacy/pbinfo_stat_numbers.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/public/images/ui/legacy/pbinfo_stat_numbers.json b/public/images/ui/legacy/pbinfo_stat_numbers.json index 9c74ee86dbc..fa7d757990f 100644 --- a/public/images/ui/legacy/pbinfo_stat_numbers.json +++ b/public/images/ui/legacy/pbinfo_stat_numbers.json @@ -10,7 +10,7 @@ "scale": 1, "frames": [ { - "filename": "+1", + "filename": "1", "rotated": false, "trimmed": false, "sourceSize": { @@ -31,7 +31,7 @@ } }, { - "filename": "+2", + "filename": "2", "rotated": false, "trimmed": false, "sourceSize": { @@ -52,7 +52,7 @@ } }, { - "filename": "+3", + "filename": "3", "rotated": false, "trimmed": false, "sourceSize": { @@ -73,7 +73,7 @@ } }, { - "filename": "+4", + "filename": "4", "rotated": false, "trimmed": false, "sourceSize": { @@ -94,7 +94,7 @@ } }, { - "filename": "+5", + "filename": "5", "rotated": false, "trimmed": false, "sourceSize": { @@ -115,7 +115,7 @@ } }, { - "filename": "+6", + "filename": "6", "rotated": false, "trimmed": false, "sourceSize": { From 754fe434e67783e16ec9f629d04a073ea1032931 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Fri, 3 May 2024 18:37:46 -0400 Subject: [PATCH 12/25] Update biome pools for various legendaries and regionals --- src/data/biomes.ts | 162 ++++++++++++++++++++++++--------------------- 1 file changed, 85 insertions(+), 77 deletions(-) diff --git a/src/data/biomes.ts b/src/data/biomes.ts index c6a3c95b631..3dc12491816 100644 --- a/src/data/biomes.ts +++ b/src/data/biomes.ts @@ -241,10 +241,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ { 1: [ Species.BULBASAUR ], 16: [ Species.IVYSAUR ], 32: [ Species.VENUSAUR ] }, Species.GROWLITHE, { 1: [ Species.TURTWIG ], 18: [ Species.GROTLE ], 32: [ Species.TORTERRA ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUDOWOODO ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DAY]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VENUSAUR, Species.SUDOWOODO, Species.TORTERRA ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.TALL_GRASS]: { @@ -487,14 +487,14 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.ARBOK, Species.CLODSIRE ], [TimeOfDay.ALL]: [ Species.POLIWRATH, Species.SWALOT, Species.WHISCASH, Species.GASTRODON, Species.SEISMITOAD, Species.STUNFISK, Species.TOXAPEX ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FERALIGATR, Species.POLITOED, Species.SWAMPERT ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, Species.HISUI_GOODRA ], [TimeOfDay.DAY]: [ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, Species.HISUI_GOODRA ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.AZELF, Species.NAGANADEL, Species.GALAR_STUNFISK ] + [TimeOfDay.ALL]: [ Species.FERALIGATR, Species.POLITOED, Species.SWAMPERT, Species.GALAR_STUNFISK ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AZELF, Species.NAGANADEL ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.BEACH]: { @@ -521,7 +521,7 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.QUAXLY ], 16: [ Species.QUAXWELL ], 36: [ Species.QUAQUAVAL ] }, Species.TATSUGIRI ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.TIRTOUGA ], 37: [ Species.CARRACOSTA ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KELDEO ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.STARMIE ], [TimeOfDay.DAY]: [ Species.STARMIE ], @@ -530,7 +530,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.KINGLER, Species.CRAWDAUNT, Species.WORMADAM, Species.CRUSTLE, Species.BARBARACLE, Species.CLAWITZER, Species.TOXAPEX, Species.PALOSSAND ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CARRACOSTA, Species.QUAQUAVAL ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KELDEO ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.LAKE]: { @@ -640,8 +640,14 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LANTURN, Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, Species.MANTINE, Species.WAILORD, Species.HUNTAIL, Species.GOREBYSS, Species.LUVDISC, Species.JELLICENT, Species.ALOMOMOLA, Species.DRAGALGE, Species.BARRASKEWDA, Species.DONDOZO ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.OMASTAR, Species.KABUTOPS, Species.RELICANTH, Species.EELEKTROSS, Species.PYUKUMUKU, Species.DHELMISE, Species.ARCTOVISH, Species.BASCULEGION ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MILOTIC, Species.NIHILEGO, Species.CURSOLA, Species.OVERQWIL ] }, + [BiomePoolTier.BOSS_RARE]: { + [TimeOfDay.DAWN]: [], + [TimeOfDay.DAY]: [], + [TimeOfDay.DUSK]: [], + [TimeOfDay.NIGHT]: [], + [TimeOfDay.ALL]: [ Species.OMASTAR, Species.KABUTOPS, Species.RELICANTH, Species.EELEKTROSS, Species.PYUKUMUKU, Species.DHELMISE, Species.CURSOLA, Species.ARCTOVISH, Species.BASCULEGION, Species.OVERQWIL ] + }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MILOTIC, Species.NIHILEGO ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KYOGRE ] } }, [Biome.MOUNTAIN]: { @@ -840,7 +846,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ { 1: [ Species.DARUMAKA ], 35: [ Species.DARMANITAN ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.LILEEP ], 40: [ Species.CRADILY ] }, { 1: [ Species.ANORITH ], 40: [ Species.ARMALDO ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.PHEROMOSA ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ], [TimeOfDay.DAY]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ], @@ -849,7 +855,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.SANDSLASH, Species.DRAPION, Species.DARMANITAN, Species.MARACTUS, Species.SANDACONDA, Species.BRAMBLEGHAST ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRADILY, Species.ARMALDO ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.PHEROMOSA ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.ICE_CAVE]: { @@ -951,9 +957,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAUROS, Species.MILTANK, Species.GARDEVOIR, Species.PURUGLY, Species.ZEBSTRIKA, Species.FLORGES, Species.RIBOMBEE, Species.DUBWOOL ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLISSEY, Species.SYLVEON, Species.FLAPPLE, Species.APPLETUN, Species.MEOWSCARADA, Species.HYDRAPPLE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DAY]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DAY]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLISSEY, Species.SYLVEON, Species.FLAPPLE, Species.APPLETUN, Species.MEOWSCARADA, Species.HYDRAPPLE ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ] }, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SHAYMIN ] } }, [Biome.POWER_PLANT]: { [BiomePoolTier.COMMON]: { @@ -984,8 +990,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RAICHU, Species.MANECTRIC, Species.LUXRAY, Species.MAGNEZONE, Species.ELECTIVIRE, Species.DEDENNE, Species.VIKAVOLT, Species.TOGEDEMARU, Species.PAWMOT, Species.BELLIBOLT ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.AMPHAROS ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAPDOS, Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI, Species.HISUI_ELECTRODE ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.AMPHAROS, Species.HISUI_ELECTRODE ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAPDOS, Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZEKROM ] } }, [Biome.VOLCANO]: { @@ -1035,9 +1041,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.CHARIZARD, Species.FLAREON, Species.TYPHLOSION, Species.INFERNAPE, Species.EMBOAR, Species.VOLCARONA, Species.DELPHOX, Species.INCINEROAR, Species.CINDERACE, Species.ARMAROUGE ] + [TimeOfDay.ALL]: [ Species.CHARIZARD, Species.FLAREON, Species.TYPHLOSION, Species.INFERNAPE, Species.EMBOAR, Species.VOLCARONA, Species.DELPHOX, Species.INCINEROAR, Species.CINDERACE, Species.ARMAROUGE, Species.HISUI_ARCANINE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MOLTRES, Species.ENTEI, Species.ROTOM, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU, Species.HISUI_ARCANINE ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MOLTRES, Species.ENTEI, Species.ROTOM, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RESHIRAM ] } }, [Biome.GRAVEYARD]: { @@ -1074,8 +1080,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENGAR, Species.BANETTE, Species.DRIFBLIM, Species.MISMAGIUS, Species.DUSKNOIR, Species.CHANDELURE, Species.TREVENANT, Species.GOURGEIST, Species.MIMIKYU, Species.POLTEAGEIST, Species.HOUNDSTONE ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SKELEDIRGE, Species.CERULEDGE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER, Species.HISUI_TYPHLOSION ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SKELEDIRGE, Species.CERULEDGE, Species.HISUI_TYPHLOSION ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GIRATINA ] } }, [Biome.DOJO]: { @@ -1109,8 +1115,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONLEE, Species.HITMONCHAN, Species.HARIYAMA, Species.MEDICHAM, Species.LUCARIO, Species.TOXICROAK, Species.THROH, Species.SAWK, Species.SCRAFTY, Species.MIENSHAO, Species.BEWEAR, Species.GRAPPLOCT, Species.ANNIHILAPE ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.PANGORO ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.SIRFETCHD, Species.URSHIFU, Species.HISUI_DECIDUEYE ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.PANGORO, Species.SIRFETCHD, Species.HISUI_DECIDUEYE ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.URSHIFU ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAMAZENTA, Species.GALAR_ZAPDOS ] } }, [Biome.FACTORY]: { @@ -1168,8 +1174,8 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ALAKAZAM, Species.HYPNO, Species.XATU, Species.GRUMPIG, Species.CLAYDOL, Species.SIGILYPH, Species.GOTHITELLE, Species.BEHEEYEM, Species.TINKATON ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.ESPEON ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, Species.ARCHEOPS ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.RUNERIGUS ], [TimeOfDay.NIGHT]: [ Species.RUNERIGUS ], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.ESPEON ], [TimeOfDay.DUSK]: [ Species.RUNERIGUS ], [TimeOfDay.NIGHT]: [ Species.RUNERIGUS ], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, Species.ARCHEOPS ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KORAIDON ] } }, [Biome.WASTELAND]: { @@ -1245,7 +1251,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.ABSOL, Species.SPIRITOMB, { 1: [ Species.ZORUA ], 30: [ Species.ZOROARK ] }, { 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GUZZLORD, Species.GALAR_MOLTRES ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GALAR_MOLTRES ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], @@ -1253,8 +1259,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOUNDOOM, Species.SABLEYE, Species.ABSOL, Species.HONCHKROW, Species.SPIRITOMB, Species.LIEPARD, Species.ZOROARK, Species.HYDREIGON, Species.THIEVUL, Species.GRIMMSNARL, Species.MABOSSTIFF, Species.KINGAMBIT ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GUZZLORD, Species.HISUI_SAMUROTT ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON, Species.HISUI_SAMUROTT ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.PALKIA, Species.YVELTAL, Species.GALAR_MOLTRES ] } }, [Biome.SPACE]: { @@ -1274,10 +1280,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] }, Species.SIGILYPH, { 1: [ Species.SOLOSIS ], 32: [ Species.DUOSION ], 41: [ Species.REUNICLUS ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, { 1: [ Species.COSMOG ], 43: [ Species.COSMOEM ] }, Species.CELESTEELA ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.COSMOG ], 43: [ Species.COSMOEM ] }, Species.CELESTEELA ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLROCK ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNATONE ], [TimeOfDay.ALL]: [ Species.CLEFABLE, Species.BRONZONG, Species.MUSHARNA, Species.REUNICLUS, Species.MINIOR ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.METAGROSS, Species.PORYGON_Z ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.CELESTEELA ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CELESTEELA ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLGALEO ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNALA ], [TimeOfDay.ALL]: [ Species.RAYQUAZA, Species.NECROZMA ] } }, [Biome.CONSTRUCTION_SITE]: { @@ -1307,10 +1313,10 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ { 1: [ Species.GALAR_MEOWTH ], 28: [ Species.PERRSERKER ] } ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ONIX, Species.HITMONLEE, Species.HITMONCHAN, Species.DURALUDON ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.HITMONTOP ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MACHAMP, Species.CONKELDURR ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.PERRSERKER ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARCHALUDON ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.JUNGLE]: { @@ -1352,7 +1358,7 @@ export const biomePokemonPools: BiomePokemonPools = { ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.CHATOT, Species.KLEAVOR ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ], [TimeOfDay.DAY]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ], @@ -1367,7 +1373,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.SCIZOR, Species.SLAKING, Species.LEAFEON, Species.SERPERIOR, Species.RILLABOOM ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLEAVOR ] } }, [Biome.FAIRY_CAVE]: { @@ -1445,10 +1451,10 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.GIMMIGHOUL ], 40: [ Species.GHOLDENGO ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO, Species.TAPU_LELE, Species.TAPU_BULU, Species.TAPU_FINI ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CHIMECHO, Species.COFAGRIGUS, Species.GOLURK, Species.AEGISLASH ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GHOLDENGO ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO, Species.TAPU_LELE, Species.TAPU_BULU, Species.TAPU_FINI ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIGIGAS ] } }, [Biome.SLUM]: { @@ -1479,10 +1485,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ { 1: [ Species.VAROOM ], 40: [ Species.REVAVROOM ] } ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.NIGHT]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.ALL]: [ Species.MUK, Species.WEEZING, Species.WORMADAM, Species.GARBODOR ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.ALL]: [ Species.REVAVROOM ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GALAR_WEEZING ] }, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.ALL]: [ Species.REVAVROOM, Species.GALAR_WEEZING ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.SNOWY_FOREST]: { @@ -1516,14 +1522,14 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO, Species.GALAR_ARTICUNO ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.WYRDEER ], [TimeOfDay.DAY]: [ Species.WYRDEER ], [TimeOfDay.DUSK]: [ Species.FROSMOTH ], [TimeOfDay.NIGHT]: [ Species.FROSMOTH ], [TimeOfDay.ALL]: [ Species.ABOMASNOW, Species.URSALUNA ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARCTOZOLT, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ], [TimeOfDay.DAY]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ], [TimeOfDay.DUSK]: [ Species.HISUI_ZOROARK ], [TimeOfDay.NIGHT]: [ Species.HISUI_ZOROARK ], - [TimeOfDay.ALL]: [ Species.MR_RIME, Species.GLASTRIER, Species.CHIEN_PAO ] + [TimeOfDay.ALL]: [ Species.MR_RIME, Species.ARCTOZOLT, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZACIAN, Species.GALAR_ARTICUNO ] } }, [Biome.ISLAND]: { @@ -1550,7 +1556,7 @@ export const biomePokemonPools: BiomePokemonPools = { }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.STAKATAKA, Species.BLACEPHALON ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ] }, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ], [TimeOfDay.DAY]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ], @@ -1559,7 +1565,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.ORICORIO, Species.BRUXISH, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES, Species.ALOLA_DUGTRIO, Species.ALOLA_GOLEM, Species.ALOLA_MUK ] }, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.STAKATAKA, Species.BLACEPHALON ] }, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ] }, [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } }, [Biome.LABORATORY]: { @@ -4371,8 +4377,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.CRESSELIA, Type.PSYCHIC, -1, [ - [ Biome.SPACE, BiomePoolTier.ULTRA_RARE ], - [ Biome.SPACE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.BEACH, BiomePoolTier.ULTRA_RARE ], + [ Biome.BEACH, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.PHIONE, Type.WATER, -1, [ ] @@ -4384,7 +4390,9 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.SHAYMIN, Type.GRASS, -1, [ ] + [ Species.SHAYMIN, Type.GRASS, -1, [ + [ Biome.MEADOW, BiomePoolTier.BOSS_ULTRA_RARE ] + ] ], [ Species.ARCEUS, Type.NORMAL, -1, [ ] ], @@ -5103,8 +5111,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.VIRIZION, Type.GRASS, Type.FIGHTING, [ - [ Biome.JUNGLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.GRASS, BiomePoolTier.ULTRA_RARE ], + [ Biome.GRASS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.TORNADUS, Type.FLYING, -1, [ @@ -5779,18 +5787,18 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.TAPU_LELE, Type.PSYCHIC, Type.FAIRY, [ - [ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.JUNGLE, BiomePoolTier.ULTRA_RARE ], + [ Biome.JUNGLE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.TAPU_BULU, Type.GRASS, Type.FAIRY, [ - [ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.DESERT, BiomePoolTier.ULTRA_RARE ], + [ Biome.DESERT, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.TAPU_FINI, Type.WATER, Type.FAIRY, [ - [ Biome.TEMPLE, BiomePoolTier.ULTRA_RARE ], - [ Biome.TEMPLE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.BEACH, BiomePoolTier.ULTRA_RARE ], + [ Biome.BEACH, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.COSMOG, Type.PSYCHIC, -1, [ @@ -5840,8 +5848,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.GUZZLORD, Type.DARK, Type.DRAGON, [ - [ Biome.ABYSS, BiomePoolTier.ULTRA_RARE ], - [ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SLUM, BiomePoolTier.ULTRA_RARE ], + [ Biome.SLUM, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.NECROZMA, Type.PSYCHIC, -1, [ @@ -5867,8 +5875,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.STAKATAKA, Type.ROCK, Type.STEEL, [ - [ Biome.ISLAND, BiomePoolTier.ULTRA_RARE ], - [ Biome.ISLAND, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.CONSTRUCTION_SITE, BiomePoolTier.ULTRA_RARE ], + [ Biome.CONSTRUCTION_SITE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.BLACEPHALON, Type.FIRE, Type.GHOST, [ @@ -6129,21 +6137,21 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.CURSOLA, Type.GHOST, -1, [ [ Biome.SEABED, BiomePoolTier.SUPER_RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] ] ], [ Species.SIRFETCHD, Type.FIGHTING, -1, [ - [ Biome.DOJO, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.DOJO, BiomePoolTier.BOSS_RARE ] ] ], [ Species.MR_RIME, Type.ICE, Type.PSYCHIC, [ [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE ] ] ], [ Species.RUNERIGUS, Type.GROUND, Type.GHOST, [ [ Biome.RUINS, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.RUINS, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.RUINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] ] ], [ Species.MILCERY, Type.FAIRY, -1, [ @@ -6305,11 +6313,11 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.SNEASLER, Type.FIGHTING, Type.POISON, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.OVERQWIL, Type.DARK, Type.POISON, [ - [ Biome.SEABED, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] ] ], [ Species.ENAMORUS, Type.FAIRY, Type.FLYING, [ @@ -6972,7 +6980,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.GALAR_SLOWBRO, Type.POISON, Type.PSYCHIC, [ [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.GALAR_FARFETCHD, Type.FIGHTING, -1, [ @@ -6980,7 +6988,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.GALAR_WEEZING, Type.POISON, Type.FAIRY, [ - [ Biome.SLUM, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SLUM, BiomePoolTier.BOSS_RARE ] ] ], [ Species.GALAR_MR_MIME, Type.ICE, Type.PSYCHIC, [ @@ -7003,7 +7011,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.GALAR_SLOWKING, Type.POISON, Type.PSYCHIC, [ - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.GALAR_CORSOLA, Type.GHOST, -1, [ @@ -7024,7 +7032,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.GALAR_DARMANITAN, Type.ICE, -1, [ [ Biome.SNOWY_FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.GALAR_YAMASK, Type.GROUND, Type.GHOST, [ @@ -7033,7 +7041,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.GALAR_STUNFISK, Type.GROUND, Type.STEEL, [ [ Biome.SWAMP, BiomePoolTier.SUPER_RARE ], - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_GROWLITHE, Type.FIRE, Type.ROCK, [ @@ -7041,7 +7049,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.HISUI_ARCANINE, Type.FIRE, Type.ROCK, [ - [ Biome.VOLCANO, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.VOLCANO, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_VOLTORB, Type.ELECTRIC, Type.GRASS, [ @@ -7049,11 +7057,11 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.HISUI_ELECTRODE, Type.ELECTRIC, Type.GRASS, [ - [ Biome.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.POWER_PLANT, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_TYPHLOSION, Type.FIRE, Type.GHOST, [ - [ Biome.GRAVEYARD, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.GRAVEYARD, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_QWILFISH, Type.DARK, Type.POISON, [ @@ -7065,11 +7073,11 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.HISUI_SAMUROTT, Type.WATER, Type.DARK, [ - [ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.ABYSS, BiomePoolTier.BOSS_RARE ] ] ], [ Species.HISUI_LILLIGANT, Type.GRASS, Type.FIGHTING, [ - [ Biome.MEADOW, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MEADOW, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.HISUI_ZORUA, Type.NORMAL, Type.GHOST, [ @@ -7078,7 +7086,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.HISUI_ZOROARK, Type.NORMAL, Type.GHOST, [ [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] ] ], [ Species.HISUI_BRAVIARY, Type.PSYCHIC, Type.FLYING, [ @@ -7091,7 +7099,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ], [ Species.HISUI_GOODRA, Type.STEEL, Type.DRAGON, [ [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SWAMP, BiomePoolTier.BOSS_SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] ] ], [ Species.HISUI_AVALUGG, Type.ICE, Type.ROCK, [ @@ -7099,7 +7107,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.HISUI_DECIDUEYE, Type.GRASS, Type.FIGHTING, [ - [ Biome.DOJO, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.DOJO, BiomePoolTier.BOSS_RARE ] ] ], [ Species.PALDEA_TAUROS, Type.FIGHTING, -1, [ From 75cbe4fe2cd492e36f51e937ca200b29f7734f54 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sat, 4 May 2024 00:43:32 +0200 Subject: [PATCH 13/25] French Update to menu.ts (#436) --- src/locales/fr/menu.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/locales/fr/menu.ts b/src/locales/fr/menu.ts index 7de214271eb..7cea2c6d306 100644 --- a/src/locales/fr/menu.ts +++ b/src/locales/fr/menu.ts @@ -35,8 +35,8 @@ export const menu: SimpleTranslationEntries = { "noRankings": "Pas de Classement", "loading": "Chargement…", "playersOnline": "Joueurs Connectés", - "empty":"Empty", - "yes":"Yes", - "no":"No", - "confirmStartTeam":'Begin with these Pokémon?', + "empty":"Vide", + "yes":"Oui", + "no":"Non", + "confirmStartTeam":'Commencer avec ces Pokémon ?', } as const; From 0c9402a649c94cc06fa04927519d606cb1624a03 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sat, 4 May 2024 01:07:06 +0200 Subject: [PATCH 14/25] Update French tutorial.ts (#437) Changes made after in game test --- src/locales/fr/tutorial.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/locales/fr/tutorial.ts b/src/locales/fr/tutorial.ts index 1502b285356..bcd76d61da2 100644 --- a/src/locales/fr/tutorial.ts +++ b/src/locales/fr/tutorial.ts @@ -25,12 +25,9 @@ export const tutorial: SimpleTranslationEntries = { $violet. Si un starter que vous possédez l’a, essayez de $l’ajouter à votre équipe. Vérifiez bien son résumé !`, - "statChange": `Les changements de stats restent à travers les combats tant que le Pokémon - $n’est pas rappelé. - $Vos Pokémon sont rappelés avant un combat de Dresseur et avant d’entrer - $dans un nouveau biome. - $Vous pouvez également voir en combat les changements de stats d’un Pokémon - $en maintenant C ou Maj.`, + "statChange": `Les changements de stats restent à travers les combats tant que le Pokémon n’est pas rappelé. + $Vos Pokémon sont rappelés avant un combat de Dresseur et avant d’entrer dans un nouveau biome. + $Vous pouvez également voir en combat les changements de stats d’un Pokémon en maintenant C ou Maj.`, "selectItem": `Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un. $Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents. From 77c3a5ad78271b8390e3d7cfcd48ec192013dc2c Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sat, 4 May 2024 01:07:51 +0200 Subject: [PATCH 15/25] Minor update to French battle.ts (#438) * Minor update to French battle.ts Added missing spaces before some exclamation marks * Minor Update to French battle.ts --- src/locales/fr/battle.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/locales/fr/battle.ts b/src/locales/fr/battle.ts index 8768c30155a..742a8f63d77 100644 --- a/src/locales/fr/battle.ts +++ b/src/locales/fr/battle.ts @@ -14,11 +14,11 @@ export const battle: SimpleTranslationEntries = { "pokemonCaught": "Vous avez attrapé {{pokemonName}} !", "pokemon": "Pokémon", "sendOutPokemon": "{{pokemonName}} ! Go !", - "hitResultCriticalHit": "Coup critique!", - "hitResultSuperEffective": "C’est super efficace!", + "hitResultCriticalHit": "Coup critique !", + "hitResultSuperEffective": "C’est super efficace !", "hitResultNotVeryEffective": "Ce n’est pas très efficace…", "hitResultNoEffect": "Ça n’affecte pas {{pokemonName}}…", - "hitResultOneHitKO": "K.O. en un coup!", + "hitResultOneHitKO": "K.O. en un coup !", "attackFailed": "Mais cela échoue !", "attackHitsCount": `Touché {{count}} fois !`, "expGain": "{{pokemonName}} gagne\n{{exp}} Points d’Exp !", @@ -36,7 +36,7 @@ export const battle: SimpleTranslationEntries = { "moveDisabled": "{{moveName}} est sous entrave !", "noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.", "noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !", - "noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon!", + "noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon !", "noPokeballStrong": "Le Pokémon est trop fort pour être capturé !\nVous devez d’abord l’affaiblir !", "noEscapeForce": "Une force mystérieuse\nempêche la fuite.", "noEscapeTrainer": "On ne s’enfuit pas d’un\ncombat de Dresseurs !", @@ -49,4 +49,4 @@ export const battle: SimpleTranslationEntries = { "skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?", "eggHatching": "Oh ?", "ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?" -} as const; \ No newline at end of file +} as const; From cfee310350f65533b3c9fe44e9750cbd6867b74f Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Fri, 3 May 2024 19:21:02 -0500 Subject: [PATCH 16/25] Adjust more passive abilities MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes some of the more problematic passives some Pokémon had. As usual, if there's any that you may have a problem with, we are always up for suggestions. --- src/data/biomes.ts | 4 ++-- src/data/pokemon-species.ts | 48 ++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/data/biomes.ts b/src/data/biomes.ts index 3dc12491816..61da0410dcf 100644 --- a/src/data/biomes.ts +++ b/src/data/biomes.ts @@ -4391,8 +4391,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.SHAYMIN, Type.GRASS, -1, [ - [ Biome.MEADOW, BiomePoolTier.BOSS_ULTRA_RARE ] - ] + [ Biome.MEADOW, BiomePoolTier.BOSS_ULTRA_RARE ] + ] ], [ Species.ARCEUS, Type.NORMAL, -1, [ ] ], diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 57bb9230c5e..a045fe2292f 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -3209,7 +3209,7 @@ export const starterPassiveAbilities = { [Species.BELLSPROUT]: Abilities.CORROSION, [Species.TENTACOOL]: Abilities.INNARDS_OUT, [Species.GEODUDE]: Abilities.ROCKY_PAYLOAD, - [Species.PONYTA]: Abilities.PIXILATE, + [Species.PONYTA]: Abilities.MAGIC_GUARD, [Species.SLOWPOKE]: Abilities.UNAWARE, [Species.MAGNEMITE]: Abilities.MOTOR_DRIVE, [Species.FARFETCHD]: Abilities.PURE_POWER, @@ -3235,7 +3235,7 @@ export const starterPassiveAbilities = { [Species.SCYTHER]: Abilities.SPEED_BOOST, [Species.PINSIR]: Abilities.SAP_SIPPER, [Species.TAUROS]: Abilities.ROCK_HEAD, - [Species.MAGIKARP]: Abilities.BERSERK, + [Species.MAGIKARP]: Abilities.MULTISCALE, [Species.LAPRAS]: Abilities.LIQUID_VOICE, [Species.DITTO]: Abilities.GOOEY, [Species.EEVEE]: Abilities.PROTEAN, @@ -3249,16 +3249,16 @@ export const starterPassiveAbilities = { [Species.DRATINI]: Abilities.DELTA_STREAM, [Species.MEWTWO]: Abilities.NEUROFORCE, [Species.MEW]: Abilities.PROTEAN, - [Species.CHIKORITA]: Abilities.RIPEN, + [Species.CHIKORITA]: Abilities.THICK_FAT, [Species.CYNDAQUIL]: Abilities.TURBOBLAZE, [Species.TOTODILE]: Abilities.TOUGH_CLAWS, [Species.SENTRET]: Abilities.FLUFFY, [Species.HOOTHOOT]: Abilities.CURSED_BODY, - [Species.LEDYBA]: Abilities.SCREEN_CLEANER, + [Species.LEDYBA]: Abilities.PRANKSTER, [Species.SPINARAK]: Abilities.PRANKSTER, [Species.CHINCHOU]: Abilities.REGENERATOR, [Species.PICHU]: Abilities.TRANSISTOR, - [Species.CLEFFA]: Abilities.MISTY_SURGE, + [Species.CLEFFA]: Abilities.MAGIC_BOUNCE, [Species.IGGLYBUFF]: Abilities.SERENE_GRACE, [Species.TOGEPI]: Abilities.OPPORTUNIST, [Species.NATU]: Abilities.TINTED_LENS, @@ -3276,7 +3276,7 @@ export const starterPassiveAbilities = { [Species.DUNSPARCE]: Abilities.MARVEL_SCALE, [Species.GLIGAR]: Abilities.MERCILESS, [Species.SNUBBULL]: Abilities.BALL_FETCH, - [Species.QWILFISH]: Abilities.LIQUID_OOZE, + [Species.QWILFISH]: Abilities.TOXIC_DEBRIS, [Species.SHUCKLE]: Abilities.WELL_BAKED_BODY, [Species.HERACROSS]: Abilities.QUICK_FEET, [Species.SNEASEL]: Abilities.MOXIE, @@ -3292,7 +3292,7 @@ export const starterPassiveAbilities = { [Species.STANTLER]: Abilities.MAGIC_GUARD, [Species.SMEARGLE]: Abilities.QUICK_DRAW, [Species.TYROGUE]: Abilities.STAMINA, - [Species.SMOOCHUM]: Abilities.CUTE_CHARM, + [Species.SMOOCHUM]: Abilities.DAZZLING, [Species.ELEKID]: Abilities.IRON_FIST, [Species.MAGBY]: Abilities.CONTRARY, [Species.MILTANK]: Abilities.GLUTTONY, @@ -3303,7 +3303,7 @@ export const starterPassiveAbilities = { [Species.LUGIA]: Abilities.DELTA_STREAM, [Species.HO_OH]: Abilities.MAGIC_GUARD, [Species.CELEBI]: Abilities.GRASSY_SURGE, - [Species.TREECKO]: Abilities.GRASSY_SURGE, + [Species.TREECKO]: Abilities.TINTED_LENS, [Species.TORCHIC]: Abilities.RECKLESS, [Species.MUDKIP]: Abilities.REGENERATOR, [Species.POOCHYENA]: Abilities.STRONG_JAW, @@ -3320,7 +3320,7 @@ export const starterPassiveAbilities = { [Species.NINCADA]: Abilities.OVERCOAT, [Species.WHISMUR]: Abilities.PUNK_ROCK, [Species.MAKUHITA]: Abilities.STAMINA, - [Species.AZURILL]: Abilities.UNNERVE, + [Species.AZURILL]: Abilities.MISTY_SURGE, [Species.NOSEPASS]: Abilities.LEVITATE, [Species.SKITTY]: Abilities.SCRAPPY, [Species.SABLEYE]: Abilities.UNNERVE, @@ -3351,7 +3351,7 @@ export const starterPassiveAbilities = { [Species.BALTOY]: Abilities.OWN_TEMPO, [Species.LILEEP]: Abilities.WATER_ABSORB, [Species.ANORITH]: Abilities.WATER_ABSORB, - [Species.FEEBAS]: Abilities.PASTEL_VEIL, + [Species.FEEBAS]: Abilities.MAGIC_GUARD, [Species.CASTFORM]: Abilities.ADAPTABILITY, [Species.KECLEON]: Abilities.ADAPTABILITY, [Species.SHUPPET]: Abilities.MUMMY, @@ -3431,7 +3431,7 @@ export const starterPassiveAbilities = { [Species.VICTINI]: Abilities.SUPER_LUCK, [Species.SNIVY]: Abilities.MULTISCALE, [Species.TEPIG]: Abilities.ROCK_HEAD, - [Species.OSHAWOTT]: Abilities.MOLD_BREAKER, + [Species.OSHAWOTT]: Abilities.QUICK_DRAW, [Species.PATRAT]: Abilities.STAKEOUT, [Species.LILLIPUP]: Abilities.BALL_FETCH, [Species.PURRLOIN]: Abilities.DEFIANT, @@ -3444,14 +3444,14 @@ export const starterPassiveAbilities = { [Species.ROGGENROLA]: Abilities.SOLID_ROCK, [Species.WOOBAT]: Abilities.SOUL_HEART, [Species.DRILBUR]: Abilities.SAND_STREAM, - [Species.AUDINO]: Abilities.SERENE_GRACE, + [Species.AUDINO]: Abilities.FRIEND_GUARD, [Species.TIMBURR]: Abilities.STAMINA, [Species.TYMPOLE]: Abilities.MOODY, [Species.THROH]: Abilities.SIMPLE, [Species.SAWK]: Abilities.DEFIANT, [Species.SEWADDLE]: Abilities.SHARPNESS, [Species.VENIPEDE]: Abilities.INTIMIDATE, - [Species.COTTONEE]: Abilities.MISTY_SURGE, + [Species.COTTONEE]: Abilities.FLUFFY, [Species.PETILIL]: Abilities.DANCER, [Species.BASCULIN]: Abilities.OPPORTUNIST, [Species.SANDILE]: Abilities.STRONG_JAW, @@ -3460,7 +3460,7 @@ export const starterPassiveAbilities = { [Species.DWEBBLE]: Abilities.STAMINA, [Species.SCRAGGY]: Abilities.ROCK_HEAD, [Species.SIGILYPH]: Abilities.MAGICIAN, - [Species.YAMASK]: Abilities.GOOD_AS_GOLD, + [Species.YAMASK]: Abilities.PURIFYING_SALT, [Species.TIRTOUGA]: Abilities.SHELL_ARMOR, [Species.ARCHEN]: Abilities.ROCKY_PAYLOAD, [Species.TRUBBISH]: Abilities.GOOEY, @@ -3521,7 +3521,7 @@ export const starterPassiveAbilities = { [Species.SKIDDO]: Abilities.GRASSY_SURGE, [Species.PANCHAM]: Abilities.FLUFFY, [Species.FURFROU]: Abilities.BALL_FETCH, - [Species.ESPURR]: Abilities.PSYCHIC_SURGE, + [Species.ESPURR]: Abilities.FUR_COAT, [Species.HONEDGE]: Abilities.SHARPNESS, [Species.SPRITZEE]: Abilities.MISTY_SURGE, [Species.SWIRLIX]: Abilities.WELL_BAKED_BODY, @@ -3548,7 +3548,7 @@ export const starterPassiveAbilities = { [Species.HOOPA]: Abilities.OPPORTUNIST, [Species.VOLCANION]: Abilities.FILTER, [Species.ROWLET]: Abilities.SNIPER, - [Species.LITTEN]: Abilities.PRANKSTER, + [Species.LITTEN]: Abilities.FLAME_BODY, [Species.POPPLIO]: Abilities.PUNK_ROCK, [Species.PIKIPEK]: Abilities.ANGER_POINT, [Species.YUNGOOS]: Abilities.HUGE_POWER, @@ -3577,7 +3577,7 @@ export const starterPassiveAbilities = { [Species.KOMALA]: Abilities.GUTS, [Species.TURTONATOR]: Abilities.ANGER_SHELL, [Species.TOGEDEMARU]: Abilities.STATIC, - [Species.MIMIKYU]: Abilities.CURSED_BODY, + [Species.MIMIKYU]: Abilities.TOUGH_CLAWS, [Species.BRUXISH]: Abilities.MULTISCALE, [Species.DRAMPA]: Abilities.FLASH_FIRE, [Species.DHELMISE]: Abilities.INFILTRATOR, @@ -3607,9 +3607,9 @@ export const starterPassiveAbilities = { [Species.SOBBLE]: Abilities.SUPER_LUCK, [Species.SKWOVET]: Abilities.HONEY_GATHER, [Species.ROOKIDEE]: Abilities.IRON_BARBS, - [Species.BLIPBUG]: Abilities.TINTED_LENS, + [Species.BLIPBUG]: Abilities.PSYCHIC_SURGE, [Species.NICKIT]: Abilities.INTIMIDATE, - [Species.GOSSIFLEUR]: Abilities.STORM_DRAIN, + [Species.GOSSIFLEUR]: Abilities.GRASSY_SURGE, [Species.WOOLOO]: Abilities.ROCK_HEAD, [Species.CHEWTLE]: Abilities.ROCK_HEAD, [Species.YAMPER]: Abilities.STAKEOUT, @@ -3624,7 +3624,7 @@ export const starterPassiveAbilities = { [Species.SINISTEA]: Abilities.WATER_ABSORB, [Species.HATENNA]: Abilities.MAGIC_GUARD, [Species.IMPIDIMP]: Abilities.TANGLING_HAIR, - [Species.MILCERY]: Abilities.WELL_BAKED_BODY, + [Species.MILCERY]: Abilities.MISTY_SURGE, [Species.FALINKS]: Abilities.MOXIE, [Species.PINCURCHIN]: Abilities.IRON_BARBS, [Species.SNOM]: Abilities.SNOW_WARNING, @@ -3674,9 +3674,9 @@ export const starterPassiveAbilities = { [Species.RELLOR]: Abilities.MAGIC_GUARD, [Species.FLITTLE]: Abilities.COMPETITIVE, [Species.TINKATINK]: Abilities.HUGE_POWER, - [Species.WIGLETT]: Abilities.STORM_DRAIN, + [Species.WIGLETT]: Abilities.STURDY, [Species.BOMBIRDIER]: Abilities.UNAWARE, - [Species.FINIZEN]: Abilities.LIQUID_VOICE, + [Species.FINIZEN]: Abilities.IRON_FIST, [Species.VAROOM]: Abilities.SPEED_BOOST, [Species.CYCLIZAR]: Abilities.PROTEAN, [Species.ORTHWORM]: Abilities.HEATPROOF, @@ -3725,13 +3725,13 @@ export const starterPassiveAbilities = { [Species.ALOLA_RATTATA]: Abilities.CHEEK_POUCH, [Species.ALOLA_SANDSHREW]: Abilities.ICE_BODY, [Species.ALOLA_VULPIX]: Abilities.ICE_BODY, - [Species.ALOLA_DIGLETT]: Abilities.CUTE_CHARM, + [Species.ALOLA_DIGLETT]: Abilities.STURDY, [Species.ALOLA_MEOWTH]: Abilities.UNNERVE, [Species.ALOLA_GEODUDE]: Abilities.ELECTROMORPHOSIS, [Species.ALOLA_GRIMER]: Abilities.MERCILESS, [Species.ETERNAL_FLOETTE]: Abilities.MAGIC_GUARD, [Species.GALAR_MEOWTH]: Abilities.SUPER_LUCK, - [Species.GALAR_PONYTA]: Abilities.MAGIC_GUARD, + [Species.GALAR_PONYTA]: Abilities.PIXILATE, [Species.GALAR_SLOWPOKE]: Abilities.POISON_TOUCH, [Species.GALAR_FARFETCHD]: Abilities.SUPER_LUCK, [Species.GALAR_ARTICUNO]: Abilities.SERENE_GRACE, From ed24e03a6f79c3641295d4dc2c2d769a628c63f8 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Fri, 3 May 2024 19:35:07 -0500 Subject: [PATCH 17/25] Fix Groudon's passive Changed from Flame Body to Protosynthesis, the original change wasn't discussed enough. --- src/data/pokemon-species.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index a045fe2292f..d118adc0fd8 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -3372,7 +3372,7 @@ export const starterPassiveAbilities = { [Species.LATIAS]: Abilities.SOUL_HEART, [Species.LATIOS]: Abilities.TINTED_LENS, [Species.KYOGRE]: Abilities.HYDRATION, - [Species.GROUDON]: Abilities.FLAME_BODY, + [Species.GROUDON]: Abilities.PROTOSYNTHESIS, [Species.RAYQUAZA]: Abilities.UNNERVE, [Species.JIRACHI]: Abilities.COMATOSE, [Species.DEOXYS]: Abilities.PROTEAN, From e02b85629f833f4a0c408d1d82c3c22cb478c807 Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Fri, 3 May 2024 19:47:28 -0500 Subject: [PATCH 18/25] Fix Enemy Counter Moves The AI couldn't decide who to target with CounterDamageAttr moves which don't need a target. This change makes an exception. Now functions the same as when the player selects one of these moves. --- src/field/pokemon.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 909d255eef8..27728680c5f 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4,7 +4,7 @@ import { Variant, VariantSet, variantColorCache } from '#app/data/variant'; import { variantData } from '#app/data/variant'; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from '../ui/battle-info'; import { Moves } from "../data/enums/moves"; -import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveTypeAttr, VariableMoveCategoryAttr } from "../data/move"; +import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveTypeAttr, VariableMoveCategoryAttr, CounterDamageAttr } from "../data/move"; import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from '../data/pokemon-species'; import * as Utils from '../utils'; import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from '../data/type'; @@ -2731,6 +2731,10 @@ export class EnemyPokemon extends Pokemon { let targetScores: integer[] = []; for (let mt of moveTargets[move.id]) { + // Prevent a target score from being calculated when there isn't a target + if (mt === -1) + break; + const target = this.scene.getField()[mt]; let targetScore = move.getUserBenefitScore(this, target, move) + move.getTargetBenefitScore(this, target, move) * (mt < BattlerIndex.ENEMY === this.isPlayer() ? 1 : -1); if (move.name.endsWith(' (N)') || !move.applyConditions(this, target, move)) @@ -2801,8 +2805,14 @@ export class EnemyPokemon extends Pokemon { return scoreA < scoreB ? 1 : scoreA > scoreB ? -1 : 0; }); - if (!sortedBenefitScores.length) + if (!sortedBenefitScores.length) { + // Set target to -1 when using a counter move + // This is the same as when the player does so + if (!!move.findAttr(attr => attr instanceof CounterDamageAttr)) + return [-1]; + return []; + } let targetWeights = sortedBenefitScores.map(s => s[1]); const lowestWeight = targetWeights[targetWeights.length - 1]; From 4163005f122e886feef1168df73c0aa6c58b0393 Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+TempsRay@users.noreply.github.com> Date: Fri, 3 May 2024 22:10:40 -0400 Subject: [PATCH 19/25] Implement Forewarn, Frisk, and BattlerTags for Magnet Rise (WIP) (#241) * Implement Forewarn, Frisk, and BattlerTags for Magnet Rise (WIP) --- src/data/ability.ts | 51 ++++++++++++++++++++++++++++-- src/data/battler-tags.ts | 15 +++++++++ src/data/enums/battler-tag-type.ts | 3 +- src/data/move.ts | 4 +++ 4 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 7ac3e721837..88695e23f3f 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -1785,6 +1785,53 @@ function getAnticipationCondition(): AbAttrCondition { }; } +export class ForewarnAbAttr extends PostSummonAbAttr { + constructor() { + super(true); + } + + applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + let maxPowerSeen = 0; + let maxMove = ""; + let movePower = 0; + for (let opponent of pokemon.getOpponents()) { + for (let move of opponent.moveset) { + if (move.getMove() instanceof StatusMove) { + movePower = 1; + } else if (move.getMove().findAttr(attr => attr instanceof OneHitKOAttr)) { + movePower = 150; + } else if (move.getMove().id === Moves.COUNTER || move.getMove().id === Moves.MIRROR_COAT || move.getMove().id === Moves.METAL_BURST) { + movePower = 120; + } else if (move.getMove().power === -1) { + movePower = 80; + } else { + movePower = move.getMove().power; + } + + if (movePower > maxPowerSeen) { + maxPowerSeen = movePower; + maxMove = move.getName(); + } + } + } + pokemon.scene.queueMessage(getPokemonMessage(pokemon, " was forewarned about " + maxMove + "!")); + return true; + } +} + +export class FriskAbAttr extends PostSummonAbAttr { + constructor() { + super(true); + } + + applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + for (let opponent of pokemon.getOpponents()) { + pokemon.scene.queueMessage(getPokemonMessage(pokemon, " frisked " + opponent.name + "\'s " + opponent.getAbility().name + "!")); + } + return true; + } +} + export class PostWeatherChangeAbAttr extends AbAttr { applyPostWeatherChange(pokemon: Pokemon, passive: boolean, weather: WeatherType, args: any[]): boolean { return false; @@ -2854,7 +2901,7 @@ export function initAbilities() { new Ability(Abilities.ANTICIPATION, 4) .conditionalAttr(getAnticipationCondition(), PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, ' shuddered!')), new Ability(Abilities.FOREWARN, 4) - .unimplemented(), + .attr(ForewarnAbAttr), new Ability(Abilities.UNAWARE, 4) .attr(IgnoreOpponentStatChangesAbAttr) .ignorable(), @@ -2883,7 +2930,7 @@ export function initAbilities() { new Ability(Abilities.HONEY_GATHER, 4) .unimplemented(), new Ability(Abilities.FRISK, 4) - .unimplemented(), + .attr(FriskAbAttr), new Ability(Abilities.RECKLESS, 4) .attr(MovePowerBoostAbAttr, (user, target, move) => move.getAttrs(RecoilAttr).length && move.id !== Moves.STRUGGLE, 1.2), new Ability(Abilities.MULTITYPE, 4) diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 8ff684394ec..183306d5066 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -984,6 +984,19 @@ export class HideSpriteTag extends BattlerTag { } } +export class TypeImmuneTag extends BattlerTag { + public immuneType: Type; + constructor(tagType: BattlerTagType, sourceMove: Moves, immuneType: Type, length: number) { + super(tagType, BattlerTagLapseType.TURN_END, 1, sourceMove); + } +} + +export class MagnetRisenTag extends TypeImmuneTag { + constructor(tagType: BattlerTagType, sourceMove: Moves) { + super(tagType, sourceMove, Type.GROUND, 5); + } +} + export class TypeBoostTag extends BattlerTag { public boostedType: Type; public boostValue: number; @@ -1211,6 +1224,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourc return new CursedTag(sourceId); case BattlerTagType.CHARGED: return new TypeBoostTag(tagType, sourceMove, Type.ELECTRIC, 2, true); + case BattlerTagType.MAGNET_RISEN: + return new MagnetRisenTag(tagType, sourceMove); case BattlerTagType.NONE: default: return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); diff --git a/src/data/enums/battler-tag-type.ts b/src/data/enums/battler-tag-type.ts index 7a9f6ba8bb2..d18ccf1c52f 100644 --- a/src/data/enums/battler-tag-type.ts +++ b/src/data/enums/battler-tag-type.ts @@ -54,5 +54,6 @@ export enum BattlerTagType { SALT_CURED = "SALT_CURED", CURSED = "CURSED", CHARGED = "CHARGED", - GROUNDED = "GROUNDED" + GROUNDED = "GROUNDED", + MAGNET_RISEN = "MAGNET_RISEN" } diff --git a/src/data/move.ts b/src/data/move.ts index 958588f7af4..0fedea1ec0e 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -4895,6 +4895,10 @@ export function initMoves() { new SelfStatusMove(Moves.AQUA_RING, Type.WATER, -1, 20, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.AQUA_RING, true, true), new SelfStatusMove(Moves.MAGNET_RISE, Type.ELECTRIC, -1, 10, -1, 0, 4) + .attr(AddBattlerTagAttr, BattlerTagType.MAGNET_RISEN, true, true) + .condition((user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY) && + !user.getTag(BattlerTagType.IGNORE_FLYING) && !user.getTag(BattlerTagType.INGRAIN) && + !user.getTag(BattlerTagType.MAGNET_RISEN)) .unimplemented(), new AttackMove(Moves.FLARE_BLITZ, Type.FIRE, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 4) .attr(RecoilAttr, false, 0.33) From f9abc50d8bf884f1dd3ad85c02f1a428149137aa Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+TempsRay@users.noreply.github.com> Date: Fri, 3 May 2024 22:29:30 -0400 Subject: [PATCH 20/25] Add Neutralizing Gas message, display Manaphy egg gacha origin, allow catching wonder guard bosses (#322) * Add Neutralizing Gas message, display Manaphy egg gacha origin, allowcatching wonder guard bosses * Add edge cases of supressed/overriden wonder guard bosses --- src/data/ability.ts | 1 + src/data/egg.ts | 2 -- src/phases.ts | 3 ++- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 88695e23f3f..960818a24de 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -3356,6 +3356,7 @@ export function initAbilities() { .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) + .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, '\'s Neutralizing Gas filled the area!')) .partial(), new Ability(Abilities.PASTEL_VEIL, 8) .attr(StatusEffectImmunityAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) diff --git a/src/data/egg.ts b/src/data/egg.ts index 08982cd4ac9..f0d6de26abb 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -77,8 +77,6 @@ export function getEggHatchWavesMessage(hatchWaves: integer): string { } export function getEggGachaTypeDescriptor(scene: BattleScene, egg: Egg): string { - if (egg.isManaphyEgg()) - return ''; switch (egg.gachaType) { case GachaType.LEGENDARY: return `Legendary Rate Up (${getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(scene, egg.timestamp)).getName()})`; diff --git a/src/phases.ts b/src/phases.ts index e4ed8d2938c..3d80b22ebd2 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -57,6 +57,7 @@ import { fetchDailyRunSeed, getDailyRunStarters } from "./data/daily-run"; import { GameModes, gameModes } from "./game-mode"; import { getPokemonSpecies, speciesStarters } from "./data/pokemon-species"; import i18next from './plugins/i18n'; +import { Abilities } from "./data/enums/abilities"; import { STARTER_FORM_OVERRIDE, STARTER_SPECIES_OVERRIDE } from './overrides'; export class LoginPhase extends Phase { @@ -1729,7 +1730,7 @@ export class CommandPhase extends FieldPhase { }, null, true); } else if (cursor < 5) { const targetPokemon = this.scene.getEnemyField().find(p => p.isActive(true)); - if (targetPokemon.isBoss() && targetPokemon.bossSegmentIndex >= 1 && cursor < PokeballType.MASTER_BALL) { + if (targetPokemon.isBoss() && targetPokemon.bossSegmentIndex >= 1 && !targetPokemon.hasAbility(Abilities.WONDER_GUARD, false, true) && cursor < PokeballType.MASTER_BALL) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); this.scene.ui.showText(i18next.t('battle:noPokeballStrong'), null, () => { From 5b44905b86d80125a7c326ea280f84c504ade218 Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+TempsRay@users.noreply.github.com> Date: Fri, 3 May 2024 22:30:23 -0400 Subject: [PATCH 21/25] Fix Shedinja passive, mummy passive, acupressure, moody, and added a second move override (#369) --- README.md | 2 +- src/data/ability.ts | 29 +++++++++++++++++++---------- src/data/move.ts | 19 ++++++++++++++++++- src/field/pokemon.ts | 10 ++++++++-- src/overrides.ts | 2 ++ 5 files changed, 48 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index b2955f8c4b5..d08107867c2 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ If you have the motivation and experience with Typescript/Javascript (or are wil ### ❔ FAQ **How do I test a new _______?** -- In the `battle-scene.ts` file there are overrides for most values you'll need to change for testing +- In the `src/overrides.ts` file there are overrides for most values you'll need to change for testing ## 🪧 To Do diff --git a/src/data/ability.ts b/src/data/ability.ts index 960818a24de..b43b3b62567 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -827,13 +827,16 @@ export class PostDefendAbilitySwapAbAttr extends PostDefendAbAttr { } export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { - constructor() { + private ability: Abilities; + + constructor(ability: Abilities) { super(); + this.ability = ability; } applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: PokemonMove, hitResult: HitResult, args: any[]): boolean { if (move.getMove().checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.getAbility().hasAttr(UnsuppressableAbilityAbAttr) && !attacker.getAbility().hasAttr(PostDefendAbilityGiveAbAttr)) { - attacker.summonData.ability = pokemon.getAbility().id; + attacker.summonData.ability = this.ability; return true; } @@ -1982,13 +1985,19 @@ export class MoodyAbAttr extends PostTurnAbAttr { } applyPostTurn(pokemon: Pokemon, passive: boolean, args: any[]): boolean { - // TODO: Edge case of not choosing to buff or debuff a stat that's already maxed let selectableStats = [BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD]; - let increaseStat = selectableStats[Utils.randInt(selectableStats.length)]; - selectableStats = selectableStats.filter(s => s !== increaseStat); - let decreaseStat = selectableStats[Utils.randInt(selectableStats.length)]; - pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [increaseStat], 2)); - pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [decreaseStat], -1)); + let increaseStatArray = selectableStats.filter(s => pokemon.summonData.battleStats[s] < 6); + let decreaseStatArray = selectableStats.filter(s => pokemon.summonData.battleStats[s] > -6); + + if (increaseStatArray.length > 0) { + let increaseStat = increaseStatArray[Utils.randInt(increaseStatArray.length)]; + decreaseStatArray = decreaseStatArray.filter(s => s !== increaseStat); + pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [increaseStat], 2)); + } + if (decreaseStatArray.length > 0) { + let decreaseStat = selectableStats[Utils.randInt(selectableStats.length)]; + pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [decreaseStat], -1)); + } return true; } } @@ -3023,7 +3032,7 @@ export function initAbilities() { new Ability(Abilities.INFILTRATOR, 5) .unimplemented(), new Ability(Abilities.MUMMY, 5) - .attr(PostDefendAbilityGiveAbAttr) + .attr(PostDefendAbilityGiveAbAttr, Abilities.MUMMY) .bypassFaint(), new Ability(Abilities.MOXIE, 5) .attr(PostVictoryStatChangeAbAttr, BattleStat.ATK, 1), @@ -3395,7 +3404,7 @@ export function initAbilities() { .attr(UnswappableAbilityAbAttr) .attr(UnsuppressableAbilityAbAttr), new Ability(Abilities.LINGERING_AROMA, 9) - .attr(PostDefendAbilityGiveAbAttr) + .attr(PostDefendAbilityGiveAbAttr, Abilities.LINGERING_AROMA) .bypassFaint(), new Ability(Abilities.SEED_SOWER, 9) .attr(PostDefendTerrainChangeAbAttr, TerrainType.GRASSY), diff --git a/src/data/move.ts b/src/data/move.ts index 0fedea1ec0e..dc6d326b2bd 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1496,6 +1496,23 @@ export class StatChangeAttr extends MoveEffectAttr { } } +export class AcupressureStatChangeAttr extends MoveEffectAttr { + constructor() { + super(); + } + + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean | Promise { + let randStats = [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD, BattleStat.ACC, BattleStat.EVA ]; + randStats = randStats.filter(s => target.summonData.battleStats[s] < 6); + if (randStats.length > 0) { + let boostStat = [randStats[Utils.randInt(randStats.length)]]; + user.scene.unshiftPhase(new StatChangePhase(user.scene, target.getBattlerIndex(), this.selfTarget, boostStat, 2)); + return true; + } + return false; + } +} + export class GrowthStatChangeAttr extends StatChangeAttr { constructor() { super([ BattleStat.ATK, BattleStat.SPATK ], 1, true); @@ -4823,7 +4840,7 @@ export function initMoves() { .attr(AddArenaTagAttr, ArenaTagType.TAILWIND, 4, true) .target(MoveTarget.USER_SIDE), new StatusMove(Moves.ACUPRESSURE, Type.NORMAL, -1, 30, -1, 0, 4) - .attr(StatChangeAttr, BattleStat.RAND, 2) + .attr(AcupressureStatChangeAttr) .target(MoveTarget.USER_OR_NEAR_ALLY), new AttackMove(Moves.METAL_BURST, Type.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 4) .attr(CounterDamageAttr, (move: Move) => (move.category === MoveCategory.PHYSICAL || move.category === MoveCategory.SPECIAL), 1.5) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 27728680c5f..05340344a1a 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -43,8 +43,8 @@ import { Nature, getNatureStatMultiplier } from '../data/nature'; import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from '../data/pokemon-forms'; import { TerrainType } from '../data/terrain'; import { TrainerSlot } from '../data/trainer-config'; +import { ABILITY_OVERRIDE, MOVE_OVERRIDE, MOVE_OVERRIDE_2, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_MOVE_OVERRIDE_2, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../overrides'; import { BerryType } from '../data/berry'; -import { ABILITY_OVERRIDE, MOVE_OVERRIDE, OPP_ABILITY_OVERRIDE, OPP_MOVE_OVERRIDE, OPP_SHINY_OVERRIDE, OPP_VARIANT_OVERRIDE } from '../overrides'; import i18next from '../plugins/i18n'; export enum FieldPosition { @@ -725,6 +725,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.moveset[0] = new PokemonMove(MOVE_OVERRIDE, Math.min(this.moveset[0].ppUsed, allMoves[MOVE_OVERRIDE].pp)); else if (OPP_MOVE_OVERRIDE && !this.isPlayer()) this.moveset[0] = new PokemonMove(OPP_MOVE_OVERRIDE, Math.min(this.moveset[0].ppUsed, allMoves[OPP_MOVE_OVERRIDE].pp)); + if (MOVE_OVERRIDE_2 && this.isPlayer()) + this.moveset[1] = new PokemonMove(MOVE_OVERRIDE_2, Math.min(this.moveset[1].ppUsed, allMoves[MOVE_OVERRIDE_2].pp)); + else if (OPP_MOVE_OVERRIDE_2 && !this.isPlayer()) + this.moveset[1] = new PokemonMove(OPP_MOVE_OVERRIDE_2, Math.min(this.moveset[1].ppUsed, allMoves[OPP_MOVE_OVERRIDE_2].pp)); + return ret; } @@ -2474,9 +2479,10 @@ export class PlayerPokemon extends Pokemon { if (newEvolution.condition.predicate(this)) { const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, undefined, this.shiny, this.variant, this.ivs, this.nature); newPokemon.natureOverride = this.natureOverride; + newPokemon.passive = this.passive; + newPokemon.moveset = this.moveset.slice(); newPokemon.moveset = this.copyMoveset(); newPokemon.luck = this.luck; - newPokemon.fusionSpecies = this.fusionSpecies; newPokemon.fusionFormIndex = this.fusionFormIndex; newPokemon.fusionAbilityIndex = this.fusionAbilityIndex; diff --git a/src/overrides.ts b/src/overrides.ts index 732b1a5a45b..4b9bcaa0ba0 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -15,9 +15,11 @@ export const WEATHER_OVERRIDE = WeatherType.NONE; export const ABILITY_OVERRIDE = Abilities.NONE; export const MOVE_OVERRIDE = Moves.NONE; +export const MOVE_OVERRIDE_2 = Moves.NONE; export const OPP_SPECIES_OVERRIDE = 0; export const OPP_ABILITY_OVERRIDE = Abilities.NONE; export const OPP_MOVE_OVERRIDE = Moves.NONE; +export const OPP_MOVE_OVERRIDE_2 = Moves.NONE; export const OPP_SHINY_OVERRIDE = false; export const OPP_VARIANT_OVERRIDE = 0; From fabd2b1550973d441e19fc3fe9dfa9d3ac454374 Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+TempsRay@users.noreply.github.com> Date: Fri, 3 May 2024 22:40:34 -0400 Subject: [PATCH 22/25] Add in missing import (#445) --- 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 b43b3b62567..3245b26f62f 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -9,7 +9,7 @@ import { BattlerTag } from "./battler-tags"; import { BattlerTagType } from "./enums/battler-tag-type"; import { StatusEffect, getStatusEffectDescriptor, getStatusEffectHealText } from "./status-effect"; import { Gender } from "./gender"; -import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, RecoilAttr, StatusMoveTypeImmunityAttr, FlinchAttr, OneHitKOAttr, HitHealAttr, StrengthSapHealAttr, allMoves } from "./move"; +import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, RecoilAttr, StatusMoveTypeImmunityAttr, FlinchAttr, OneHitKOAttr, HitHealAttr, StrengthSapHealAttr, allMoves, StatusMove } from "./move"; import { ArenaTagSide, ArenaTrapTag } from "./arena-tag"; import { ArenaTagType } from "./enums/arena-tag-type"; import { Stat } from "./pokemon-stat"; From 5d6181926a49e995d071f0b314971ca0662416a6 Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Fri, 3 May 2024 21:09:08 -0500 Subject: [PATCH 23/25] Removed Hardcoded Values Realized there was an enum for the -1 value which should help clear up confusion if someone has to mess with this code later --- src/field/pokemon.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 05340344a1a..adbe8a8d893 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2737,8 +2737,8 @@ export class EnemyPokemon extends Pokemon { let targetScores: integer[] = []; for (let mt of moveTargets[move.id]) { - // Prevent a target score from being calculated when there isn't a target - if (mt === -1) + // Prevent a target score from being calculated when the target is whoever attacks the user + if (mt === BattlerIndex.ATTACKER) break; const target = this.scene.getField()[mt]; @@ -2812,10 +2812,10 @@ export class EnemyPokemon extends Pokemon { }); if (!sortedBenefitScores.length) { - // Set target to -1 when using a counter move + // Set target to BattlerIndex.ATTACKER when using a counter move // This is the same as when the player does so if (!!move.findAttr(attr => attr instanceof CounterDamageAttr)) - return [-1]; + return [BattlerIndex.ATTACKER]; return []; } From b529eee5acaed036019f53337f5d62c2e0801a95 Mon Sep 17 00:00:00 2001 From: Benjamin Odom Date: Fri, 3 May 2024 23:02:55 -0500 Subject: [PATCH 24/25] Add Form Text to Starter UI (#446) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add Form Text to Starter UI Adds text to the starter screen UI which indicates which Form you are currently selecting. This helps with Pokémon who don't have a sprite change for their form because it doesn't affect them until later. * Make Title Case --- src/ui/starter-select-ui-handler.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 7cc99d81fb7..4cfef282c81 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -128,6 +128,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private starterSelectMessageBox: Phaser.GameObjects.NineSlice; private starterSelectMessageBoxContainer: Phaser.GameObjects.Container; private statsContainer: StatsContainer; + private pokemonFormText: Phaser.GameObjects.Text; private genMode: boolean; private statsMode: boolean; @@ -434,6 +435,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCandyIcon.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonCandyIcon); + this.pokemonFormText = addTextObject(this.scene, 6, 42, 'Form', TextStyle.WINDOW_ALT, { fontSize: '42px' }); + this.pokemonFormText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonFormText); + this.pokemonCandyOverlayIcon = this.scene.add.sprite(1, 12, 'items', 'candy_overlay'); this.pokemonCandyOverlayIcon.setScale(0.5); this.pokemonCandyOverlayIcon.setOrigin(0, 0); @@ -1288,6 +1293,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCandyOverlayIcon.setVisible(true); this.pokemonCandyCountText.setText(`x${this.scene.gameData.starterData[species.speciesId].candyCount}`); this.pokemonCandyCountText.setVisible(true); + this.pokemonFormText.setVisible(true); } this.iconAnimHandler.addOrUpdate(this.starterSelectGenIconContainers[species.generation - 1].getAt(this.genSpecies[species.generation - 1].indexOf(species)) as Phaser.GameObjects.Sprite, PokemonIconAnimMode.PASSIVE); @@ -1337,6 +1343,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCandyIcon.setVisible(false); this.pokemonCandyOverlayIcon.setVisible(false); this.pokemonCandyCountText.setVisible(false); + this.pokemonFormText.setVisible(false); const defaultDexAttr = this.scene.gameData.getSpeciesDefaultDexAttr(species, true, true); const defaultAbilityIndex = this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species); @@ -1363,6 +1370,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCandyIcon.setVisible(false); this.pokemonCandyOverlayIcon.setVisible(false); this.pokemonCandyCountText.setVisible(false); + this.pokemonFormText.setVisible(false); this.setSpeciesDetails(species, false, 0, false, 0, 0, 0); this.pokemonSprite.clearTint(); @@ -1522,6 +1530,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.starterMoveset.push(...availableStarterMoves.filter(sm => this.starterMoveset.indexOf(sm) === -1).slice(0, 4 - this.starterMoveset.length)); const speciesForm = getPokemonSpeciesForm(species.speciesId, formIndex); + + const formText = species?.forms[formIndex]?.formKey.split('-'); + for (let i = 0; i < formText?.length; i++) + formText[i] = formText[i].charAt(0).toUpperCase() + formText[i].substring(1); + + this.pokemonFormText.setText(formText?.join(' ')); + this.setTypeIcons(speciesForm.type1, speciesForm.type2); } else { this.pokemonAbilityText.setText(''); From 5b4f1da854407d59f83c9fcd8a2cb2b845474d21 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sat, 4 May 2024 00:19:50 -0400 Subject: [PATCH 25/25] Fix level capped party members not gaining friendship --- src/phases.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/phases.ts b/src/phases.ts index 3d80b22ebd2..bfe309878e5 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -3220,19 +3220,22 @@ export class VictoryPhase extends PokemonPhase { const expShareModifier = this.scene.findModifier(m => m instanceof ExpShareModifier) as ExpShareModifier; const expBalanceModifier = this.scene.findModifier(m => m instanceof ExpBalanceModifier) as ExpBalanceModifier; const multipleParticipantExpBonusModifier = this.scene.findModifier(m => m instanceof MultipleParticipantExpBonusModifier) as MultipleParticipantExpBonusModifier; - const expPartyMembers = party.filter(p => p.hp && p.level < this.scene.getMaxExpLevel()); + const nonFaintedPartyMembers = party.filter(p => p.hp); + const expPartyMembers = nonFaintedPartyMembers.filter(p => p.level < this.scene.getMaxExpLevel()); const partyMemberExp = []; if (participantIds.size) { let expValue = this.getPokemon().getExpValue(); if (this.scene.currentBattle.battleType === BattleType.TRAINER) expValue = Math.floor(expValue * 1.5); - for (let partyMember of expPartyMembers) { + for (let partyMember of nonFaintedPartyMembers) { const pId = partyMember.id; const participated = participantIds.has(pId); if (participated) partyMember.addFriendship(2); - else if (!expShareModifier) { + if (!expPartyMembers.includes(partyMember)) + continue; + if (!participated && !expShareModifier) { partyMemberExp.push(0); continue; }