From 0196cf83103e3910819ac0de67763afb58d4b01a Mon Sep 17 00:00:00 2001 From: prateau Date: Mon, 15 Apr 2024 22:35:35 +0200 Subject: [PATCH] Add snow as a weather --- src/data/move.ts | 11 +++++++---- src/data/weather.ts | 7 +++++++ src/field/pokemon.ts | 2 ++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 14e6cf73e..f297b95da 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -777,6 +777,7 @@ export class PlantHealAttr extends WeatherHealAttr { case WeatherType.RAIN: case WeatherType.SANDSTORM: case WeatherType.HAIL: + case WeatherType.SNOW: case WeatherType.HEAVY_RAIN: return 0.25; default: @@ -1756,6 +1757,7 @@ export class AntiSunlightPowerDecreaseAttr extends VariablePowerAttr { case WeatherType.RAIN: case WeatherType.SANDSTORM: case WeatherType.HAIL: + case WeatherType.SNOW: case WeatherType.HEAVY_RAIN: power.value *= 0.5; return true; @@ -1905,7 +1907,7 @@ export class BlizzardAccuracyAttr extends VariableAccuracyAttr { if (!user.scene.arena.weather?.isEffectSuppressed(user.scene)) { const accuracy = args[0] as Utils.NumberHolder; const weatherType = user.scene.arena.weather?.weatherType || WeatherType.NONE; - if (weatherType === WeatherType.HAIL) { + if (weatherType === WeatherType.HAIL || weatherType === WeatherType.SNOW) { accuracy.value = -1; return true; } @@ -2074,6 +2076,7 @@ export class WeatherBallTypeAttr extends VariableMoveTypeAttr { type.value = Type.ROCK; break; case WeatherType.HAIL: + case WeatherType.SNOW: type.value = Type.ICE; break; default: @@ -4199,7 +4202,7 @@ export function initMoves() { .attr(FlinchAttr), new AttackMove(Moves.WEATHER_BALL, "Weather Ball", Type.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, "This attack move varies in power and type depending on the weather.", -1, 0, 3) .attr(WeatherBallTypeAttr) - .attr(MovePowerMultiplierAttr, (user, target, move) => [WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN].includes(user.scene.arena.weather?.weatherType) && !user.scene.arena.weather?.isEffectSuppressed(user.scene) ? 2 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => [WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN].includes(user.scene.arena.weather?.weatherType) && !user.scene.arena.weather?.isEffectSuppressed(user.scene) ? 2 : 1) .ballBombMove(), new StatusMove(Moves.AROMATHERAPY, "Aromatherapy (N)", Type.GRASS, -1, 5, "The user releases a soothing scent that heals all status conditions affecting the user's party.", -1, 0, 3) .target(MoveTarget.USER_AND_ALLIES), @@ -5601,13 +5604,13 @@ export function initMoves() { .makesContact(), new SelfStatusMove(Moves.SHED_TAIL, "Shed Tail (N)", Type.NORMAL, -1, 10, "The user creates a substitute for itself using its own HP before switching places with a party Pokémon in waiting.", -1, 0, 9), new StatusMove(Moves.CHILLY_RECEPTION, "Chilly Reception", Type.ICE, -1, 10, "The user tells a chillingly bad joke before switching places with a party Pokémon in waiting. This summons a snowstorm lasting five turns.", -1, 0, 9) - .attr(WeatherChangeAttr, WeatherType.HAIL) // Set to Hail for now, if Snow is added in the future, change this + .attr(WeatherChangeAttr, WeatherType.SNOW) .attr(ForceSwitchOutAttr, true, false) .target(MoveTarget.BOTH_SIDES), new SelfStatusMove(Moves.TIDY_UP, "Tidy Up (P)", Type.NORMAL, -1, 10, "The user tidies up and removes the effects of Spikes, Stealth Rock, Sticky Web, Toxic Spikes, and Substitute. This also boosts the user's Attack and Speed stats.", 100, 0, 9) .attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPD ], 1, true), new StatusMove(Moves.SNOWSCAPE, "Snowscape", Type.ICE, -1, 10, "The user summons a snowstorm lasting five turns. This boosts the Defense stats of Ice types.", -1, 0, 9) - .attr(WeatherChangeAttr, WeatherType.HAIL) // Set to Hail for now, if Snow is added in the future, change this + .attr(WeatherChangeAttr, WeatherType.SNOW) .target(MoveTarget.BOTH_SIDES), new AttackMove(Moves.POUNCE, "Pounce", Type.BUG, MoveCategory.PHYSICAL, 50, 100, 20, "The user attacks by pouncing on the target. This also lowers the target's Speed stat.", 100, 0, 9) .attr(StatChangeAttr, BattleStat.SPD, -1), diff --git a/src/data/weather.ts b/src/data/weather.ts index b28815984..b408d9836 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -14,6 +14,7 @@ export enum WeatherType { RAIN, SANDSTORM, HAIL, + SNOW, FOG, HEAVY_RAIN, HARSH_SUN, @@ -127,6 +128,8 @@ export function getWeatherStartMessage(weatherType: WeatherType): string { return 'A sandstorm brewed!'; case WeatherType.HAIL: return 'It started to hail!'; + case WeatherType.SNOW: + return 'It started to snow!'; case WeatherType.FOG: return 'A thick fog emerged!' case WeatherType.HEAVY_RAIN: @@ -150,6 +153,8 @@ export function getWeatherLapseMessage(weatherType: WeatherType): string { return 'The sandstorm rages.'; case WeatherType.HAIL: return 'Hail continues to fall.'; + case WeatherType.SNOW: + return 'The snow is falling down.'; case WeatherType.FOG: return 'The fog continues.'; case WeatherType.HEAVY_RAIN: @@ -184,6 +189,8 @@ export function getWeatherClearMessage(weatherType: WeatherType): string { return 'The sandstorm subsided.'; case WeatherType.HAIL: return 'The hail stopped.'; + case WeatherType.SNOW: + return 'The snow stopped.'; case WeatherType.FOG: return 'The fog disappeared.' case WeatherType.HEAVY_RAIN: diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 6c9df8ad0..6b394d53b 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -523,6 +523,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ret >>= 1; break; case Stat.DEF: + if (this.isOfType(Type.ICE) && this.scene.arena.weather?.weatherType === WeatherType.SNOW) + ret *= 1.5; break; case Stat.SPATK: break;