From 7dfaff9984185857586205363bab87b21a58dbab Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Sat, 20 Sep 2025 15:59:08 -0700 Subject: [PATCH] Rename ArenaTagSide to ArenaSide --- src/data/abilities/ability.ts | 10 +- src/data/arena-tag.ts | 92 +++++++++---------- src/data/moves/move.ts | 68 +++++++------- src/enums/arena-side.ts | 5 + src/enums/arena-tag-side.ts | 6 -- src/events/arena.ts | 14 +-- src/field/arena.ts | 34 +++---- src/field/pokemon.ts | 12 +-- src/field/trainer.ts | 4 +- src/phases/command-phase.ts | 4 +- src/phases/move-effect-phase.ts | 6 +- src/phases/stat-stage-change-phase.ts | 8 +- src/phases/turn-start-phase.ts | 6 +- src/ui/containers/arena-flyout.ts | 6 +- src/utils/speed-order-generator.ts | 10 +- test/@types/vitest.d.ts | 6 +- test/abilities/good-as-gold.test.ts | 8 +- test/abilities/infiltrator.test.ts | 8 +- test/abilities/magic-bounce.test.ts | 22 ++--- test/abilities/magic-guard.test.ts | 6 +- test/abilities/wimp-out.test.ts | 10 +- test/moves/aurora-veil.test.ts | 4 +- test/moves/ceaseless-edge.test.ts | 14 +-- test/moves/court-change.test.ts | 14 +-- test/moves/crafty-shield.test.ts | 4 +- test/moves/destiny-bond.test.ts | 9 +- test/moves/entry-hazards.test.ts | 26 +++--- test/moves/fairy-lock.test.ts | 18 ++-- test/moves/light-screen.test.ts | 4 +- test/moves/magic-coat.test.ts | 6 +- test/moves/pledge-moves.test.ts | 10 +- test/moves/reflect.test.ts | 4 +- test/moves/secret-power.test.ts | 4 +- test/moves/substitute.test.ts | 6 +- test/moves/tailwind.test.ts | 20 ++-- test/moves/trick-room.test.ts | 4 +- test/test-utils/matchers/to-have-arena-tag.ts | 10 +- 37 files changed, 246 insertions(+), 256 deletions(-) create mode 100644 src/enums/arena-side.ts delete mode 100644 src/enums/arena-tag-side.ts diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index f6494548b99..51322db9080 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -20,7 +20,7 @@ import { getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffect import { TerrainType } from "#data/terrain"; import type { Weather } from "#data/weather"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleType } from "#enums/battle-type"; import { BattlerIndex } from "#enums/battler-index"; @@ -1133,7 +1133,7 @@ export class PostDefendApplyArenaTrapTagAbAttr extends PostDefendAbAttr { 0, undefined, pokemon.id, - pokemon.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER, + pokemon.isPlayer() ? ArenaSide.ENEMY : ArenaSide.PLAYER, ); } } @@ -2636,11 +2636,11 @@ export class PostSummonRemoveArenaTagAbAttr extends PostSummonAbAttr { export class PostSummonAddArenaTagAbAttr extends PostSummonAbAttr { private readonly tagType: ArenaTagType; private readonly turnCount: number; - private readonly side?: ArenaTagSide; + private readonly side?: ArenaSide; private readonly quiet?: boolean; private sourceId: number; - constructor(showAbility: boolean, tagType: ArenaTagType, turnCount: number, side?: ArenaTagSide, quiet?: boolean) { + constructor(showAbility: boolean, tagType: ArenaTagType, turnCount: number, side?: ArenaSide, quiet?: boolean) { super(showAbility); this.tagType = tagType; this.turnCount = turnCount; @@ -5871,7 +5871,7 @@ export class PostSummonStatStageChangeOnArenaAbAttr extends PostSummonStatStageC } override canApply(params: AbAttrBaseParams): boolean { - const side = params.pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = params.pokemon.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY; return (globalScene.arena.getTagOnSide(this.arenaTagType, side) ?? false) && super.canApply(params); } } diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index fd64e271758..485eb61bc48 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -54,7 +54,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { CommonBattleAnim } from "#data/battle-anims"; import { allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import type { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -100,10 +100,10 @@ interface BaseArenaTag { // Note: Intentionally not using `?`, as the property should always exist, but just be undefined if not present. sourceId: number | undefined; /** - * The {@linkcode ArenaTagSide | side of the field} that this arena tag affects. + * The {@linkcode ArenaSide | side of the field} that this arena tag affects. * @defaultValue `ArenaTagSide.BOTH` */ - side: ArenaTagSide; + side: ArenaSide; } /** @@ -118,9 +118,9 @@ export abstract class ArenaTag implements BaseArenaTag { public maxDuration: number; public sourceMove?: MoveId; public sourceId: number | undefined; - public side: ArenaTagSide; + public side: ArenaSide; - constructor(turnCount: number, sourceMove?: MoveId, sourceId?: number, side: ArenaTagSide = ArenaTagSide.BOTH) { + constructor(turnCount: number, sourceMove?: MoveId, sourceId?: number, side: ArenaSide = ArenaSide.BOTH) { this.turnCount = turnCount; this.maxDuration = turnCount; this.sourceMove = sourceMove; @@ -138,7 +138,7 @@ export abstract class ArenaTag implements BaseArenaTag { if (!quiet) { globalScene.phaseManager.queueMessage( i18next.t( - `arenaTag:arenaOnRemove${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, + `arenaTag:arenaOnRemove${this.side === ArenaSide.PLAYER ? "Player" : this.side === ArenaSide.ENEMY ? "Enemy" : ""}`, { moveName: this.getMoveName() }, ), ); @@ -191,11 +191,11 @@ export abstract class ArenaTag implements BaseArenaTag { */ public getAffectedPokemon(): Pokemon[] { switch (this.side) { - case ArenaTagSide.PLAYER: + case ArenaSide.PLAYER: return globalScene.getPlayerField() ?? []; - case ArenaTagSide.ENEMY: + case ArenaSide.ENEMY: return globalScene.getEnemyField() ?? []; - case ArenaTagSide.BOTH: + case ArenaSide.BOTH: default: return globalScene.getField(true) ?? []; } @@ -215,7 +215,7 @@ export abstract class SerializableArenaTag extends ArenaTag { */ export class MistTag extends SerializableArenaTag { readonly tagType = ArenaTagType.MIST; - constructor(turnCount: number, sourceId: number | undefined, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number | undefined, side: ArenaSide) { super(turnCount, MoveId.MIST, sourceId, side); } @@ -320,7 +320,7 @@ class ReflectTag extends WeakenMoveScreenTag { return [MoveCategory.PHYSICAL]; } - constructor(turnCount: number, sourceId: number | undefined, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number | undefined, side: ArenaSide) { super(turnCount, MoveId.REFLECT, sourceId, side); } @@ -328,7 +328,7 @@ class ReflectTag extends WeakenMoveScreenTag { if (!quiet) { globalScene.phaseManager.queueMessage( i18next.t( - `arenaTag:reflectOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, + `arenaTag:reflectOnAdd${this.side === ArenaSide.PLAYER ? "Player" : this.side === ArenaSide.ENEMY ? "Enemy" : ""}`, ), ); } @@ -344,7 +344,7 @@ class LightScreenTag extends WeakenMoveScreenTag { protected get weakenedCategories(): [MoveCategory.SPECIAL] { return [MoveCategory.SPECIAL]; } - constructor(turnCount: number, sourceId: number | undefined, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number | undefined, side: ArenaSide) { super(turnCount, MoveId.LIGHT_SCREEN, sourceId, side); } @@ -352,7 +352,7 @@ class LightScreenTag extends WeakenMoveScreenTag { if (!quiet) { globalScene.phaseManager.queueMessage( i18next.t( - `arenaTag:lightScreenOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, + `arenaTag:lightScreenOnAdd${this.side === ArenaSide.PLAYER ? "Player" : this.side === ArenaSide.ENEMY ? "Enemy" : ""}`, ), ); } @@ -369,7 +369,7 @@ class AuroraVeilTag extends WeakenMoveScreenTag { return [MoveCategory.PHYSICAL, MoveCategory.SPECIAL]; } - constructor(turnCount: number, sourceId: number | undefined, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number | undefined, side: ArenaSide) { super(turnCount, MoveId.AURORA_VEIL, sourceId, side); } @@ -377,7 +377,7 @@ class AuroraVeilTag extends WeakenMoveScreenTag { if (!quiet) { globalScene.phaseManager.queueMessage( i18next.t( - `arenaTag:auroraVeilOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, + `arenaTag:auroraVeilOnAdd${this.side === ArenaSide.PLAYER ? "Player" : this.side === ArenaSide.ENEMY ? "Enemy" : ""}`, ), ); } @@ -402,7 +402,7 @@ export abstract class ConditionalProtectTag extends ArenaTag { constructor( sourceMove: MoveId, sourceId: number | undefined, - side: ArenaTagSide, + side: ArenaSide, condition: ProtectConditionFunc, ignoresBypass = false, ) { @@ -415,7 +415,7 @@ export abstract class ConditionalProtectTag extends ArenaTag { onAdd(_arena: Arena): void { globalScene.phaseManager.queueMessage( i18next.t( - `arenaTag:conditionalProtectOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, + `arenaTag:conditionalProtectOnAdd${this.side === ArenaSide.PLAYER ? "Player" : this.side === ArenaSide.ENEMY ? "Enemy" : ""}`, { moveName: super.getMoveName() }, ), ); @@ -445,7 +445,7 @@ export abstract class ConditionalProtectTag extends ArenaTag { moveId: MoveId, ignoresProtectBypass: BooleanHolder, ): boolean { - if ((this.side === ArenaTagSide.PLAYER) === defender.isPlayer() && this.protectConditionFunc(arena, moveId)) { + if ((this.side === ArenaSide.PLAYER) === defender.isPlayer() && this.protectConditionFunc(arena, moveId)) { if (!isProtected.value) { isProtected.value = true; if (!simulated) { @@ -493,7 +493,7 @@ const QuickGuardConditionFunc: ProtectConditionFunc = (_arena, moveId) => { */ class QuickGuardTag extends ConditionalProtectTag { public readonly tagType = ArenaTagType.QUICK_GUARD; - constructor(sourceId: number | undefined, side: ArenaTagSide) { + constructor(sourceId: number | undefined, side: ArenaSide) { super(MoveId.QUICK_GUARD, sourceId, side, QuickGuardConditionFunc); } } @@ -525,7 +525,7 @@ const WideGuardConditionFunc: ProtectConditionFunc = (_arena, moveId): boolean = */ class WideGuardTag extends ConditionalProtectTag { public readonly tagType = ArenaTagType.WIDE_GUARD; - constructor(sourceId: number | undefined, side: ArenaTagSide) { + constructor(sourceId: number | undefined, side: ArenaSide) { super(MoveId.WIDE_GUARD, sourceId, side, WideGuardConditionFunc); } } @@ -548,7 +548,7 @@ const MatBlockConditionFunc: ProtectConditionFunc = (_arena, moveId): boolean => */ class MatBlockTag extends ConditionalProtectTag { public readonly tagType = ArenaTagType.MAT_BLOCK; - constructor(sourceId: number | undefined, side: ArenaTagSide) { + constructor(sourceId: number | undefined, side: ArenaSide) { super(MoveId.MAT_BLOCK, sourceId, side, MatBlockConditionFunc); } @@ -593,7 +593,7 @@ const CraftyShieldConditionFunc: ProtectConditionFunc = (_arena, moveId) => { */ class CraftyShieldTag extends ConditionalProtectTag { public readonly tagType = ArenaTagType.CRAFTY_SHIELD; - constructor(sourceId: number | undefined, side: ArenaTagSide) { + constructor(sourceId: number | undefined, side: ArenaSide) { super(MoveId.CRAFTY_SHIELD, sourceId, side, CraftyShieldConditionFunc, true); } } @@ -608,7 +608,7 @@ export class NoCritTag extends SerializableArenaTag { /** Queues a message upon adding this effect to the field */ onAdd(_arena: Arena): void { globalScene.phaseManager.queueMessage( - i18next.t(`arenaTag:noCritOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : "Enemy"}`, { + i18next.t(`arenaTag:noCritOnAdd${this.side === ArenaSide.PLAYER ? "Player" : "Enemy"}`, { moveName: this.getMoveName(), }), ); @@ -752,7 +752,7 @@ export abstract class EntryHazardTag extends SerializableArenaTag { return true; } - constructor(sourceMove: MoveId, sourceId: number | undefined, side: ArenaTagSide) { + constructor(sourceMove: MoveId, sourceId: number | undefined, side: ArenaSide) { super(0, sourceMove, sourceId, side); } @@ -811,7 +811,7 @@ export abstract class EntryHazardTag extends SerializableArenaTag { * @returns `true` if this hazard affects the given Pokemon; `false` otherwise. */ override apply(_arena: Arena, simulated: boolean, pokemon: Pokemon): boolean { - if ((this.side === ArenaTagSide.PLAYER) !== pokemon.isPlayer()) { + if ((this.side === ArenaSide.PLAYER) !== pokemon.isPlayer()) { return false; } @@ -896,7 +896,7 @@ class SpikesTag extends DamagingTrapTag { return 3 as const; } - constructor(sourceId: number | undefined, side: ArenaTagSide) { + constructor(sourceId: number | undefined, side: ArenaSide) { super(MoveId.SPIKES, sourceId, side); } @@ -933,7 +933,7 @@ class StealthRockTag extends DamagingTrapTag { return false; } - constructor(sourceId: number | undefined, side: ArenaTagSide) { + constructor(sourceId: number | undefined, side: ArenaSide) { super(MoveId.STEALTH_ROCK, sourceId, side); } @@ -977,7 +977,7 @@ class ToxicSpikesTag extends EntryHazardTag { return 2 as const; } - constructor(sourceId: number | undefined, side: ArenaTagSide) { + constructor(sourceId: number | undefined, side: ArenaSide) { super(MoveId.TOXIC_SPIKES, sourceId, side); } @@ -1040,7 +1040,7 @@ class StickyWebTag extends EntryHazardTag { return 1 as const; } - constructor(sourceId: number | undefined, side: ArenaTagSide) { + constructor(sourceId: number | undefined, side: ArenaSide) { super(MoveId.STICKY_WEB, sourceId, side); } @@ -1103,7 +1103,7 @@ class ImprisonTag extends EntryHazardTag { return 1 as const; } - constructor(sourceId: number | undefined, side: ArenaTagSide) { + constructor(sourceId: number | undefined, side: ArenaSide) { super(MoveId.IMPRISON, sourceId, side); } @@ -1259,7 +1259,7 @@ export class GravityTag extends SerializableArenaTag { */ class TailwindTag extends SerializableArenaTag { public readonly tagType = ArenaTagType.TAILWIND; - constructor(turnCount: number, sourceId: number | undefined, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number | undefined, side: ArenaSide) { super(turnCount, MoveId.TAILWIND, sourceId, side); } @@ -1274,7 +1274,7 @@ class TailwindTag extends SerializableArenaTag { if (!quiet) { globalScene.phaseManager.queueMessage( i18next.t( - `arenaTag:tailwindOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, + `arenaTag:tailwindOnAdd${this.side === ArenaSide.PLAYER ? "Player" : this.side === ArenaSide.ENEMY ? "Enemy" : ""}`, ), ); } @@ -1315,7 +1315,7 @@ class TailwindTag extends SerializableArenaTag { if (!quiet) { globalScene.phaseManager.queueMessage( i18next.t( - `arenaTag:tailwindOnRemove${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, + `arenaTag:tailwindOnRemove${this.side === ArenaSide.PLAYER ? "Player" : this.side === ArenaSide.ENEMY ? "Enemy" : ""}`, ), ); } @@ -1328,7 +1328,7 @@ class TailwindTag extends SerializableArenaTag { */ class HappyHourTag extends SerializableArenaTag { public readonly tagType = ArenaTagType.HAPPY_HOUR; - constructor(turnCount: number, sourceId: number | undefined, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number | undefined, side: ArenaSide) { super(turnCount, MoveId.HAPPY_HOUR, sourceId, side); } @@ -1343,14 +1343,14 @@ class HappyHourTag extends SerializableArenaTag { class SafeguardTag extends ArenaTag { public readonly tagType = ArenaTagType.SAFEGUARD; - constructor(turnCount: number, sourceId: number | undefined, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number | undefined, side: ArenaSide) { super(turnCount, MoveId.SAFEGUARD, sourceId, side); } onAdd(_arena: Arena): void { globalScene.phaseManager.queueMessage( i18next.t( - `arenaTag:safeguardOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, + `arenaTag:safeguardOnAdd${this.side === ArenaSide.PLAYER ? "Player" : this.side === ArenaSide.ENEMY ? "Enemy" : ""}`, ), ); } @@ -1358,7 +1358,7 @@ class SafeguardTag extends ArenaTag { onRemove(_arena: Arena): void { globalScene.phaseManager.queueMessage( i18next.t( - `arenaTag:safeguardOnRemove${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, + `arenaTag:safeguardOnRemove${this.side === ArenaSide.PLAYER ? "Player" : this.side === ArenaSide.ENEMY ? "Enemy" : ""}`, ), ); } @@ -1380,7 +1380,7 @@ class NoneTag extends ArenaTag { */ class FireGrassPledgeTag extends SerializableArenaTag { public readonly tagType = ArenaTagType.FIRE_GRASS_PLEDGE; - constructor(sourceId: number | undefined, side: ArenaTagSide) { + constructor(sourceId: number | undefined, side: ArenaSide) { super(4, MoveId.FIRE_PLEDGE, sourceId, side); } @@ -1388,14 +1388,14 @@ class FireGrassPledgeTag extends SerializableArenaTag { // "A sea of fire enveloped your/the opposing team!" globalScene.phaseManager.queueMessage( i18next.t( - `arenaTag:fireGrassPledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, + `arenaTag:fireGrassPledgeOnAdd${this.side === ArenaSide.PLAYER ? "Player" : this.side === ArenaSide.ENEMY ? "Enemy" : ""}`, ), ); } override lapse(arena: Arena): boolean { const field: Pokemon[] = - this.side === ArenaTagSide.PLAYER ? globalScene.getPlayerField() : globalScene.getEnemyField(); + this.side === ArenaSide.PLAYER ? globalScene.getPlayerField() : globalScene.getEnemyField(); field .filter(pokemon => !pokemon.isOfType(PokemonType.FIRE) && !pokemon.switchOutStatus) @@ -1429,7 +1429,7 @@ class FireGrassPledgeTag extends SerializableArenaTag { */ class WaterFirePledgeTag extends SerializableArenaTag { public readonly tagType = ArenaTagType.WATER_FIRE_PLEDGE; - constructor(sourceId: number | undefined, side: ArenaTagSide) { + constructor(sourceId: number | undefined, side: ArenaSide) { super(4, MoveId.WATER_PLEDGE, sourceId, side); } @@ -1437,7 +1437,7 @@ class WaterFirePledgeTag extends SerializableArenaTag { // "A rainbow appeared in the sky on your/the opposing team's side!" globalScene.phaseManager.queueMessage( i18next.t( - `arenaTag:waterFirePledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, + `arenaTag:waterFirePledgeOnAdd${this.side === ArenaSide.PLAYER ? "Player" : this.side === ArenaSide.ENEMY ? "Enemy" : ""}`, ), ); } @@ -1464,7 +1464,7 @@ class WaterFirePledgeTag extends SerializableArenaTag { */ class GrassWaterPledgeTag extends SerializableArenaTag { public readonly tagType = ArenaTagType.GRASS_WATER_PLEDGE; - constructor(sourceId: number | undefined, side: ArenaTagSide) { + constructor(sourceId: number | undefined, side: ArenaSide) { super(4, MoveId.GRASS_PLEDGE, sourceId, side); } @@ -1472,7 +1472,7 @@ class GrassWaterPledgeTag extends SerializableArenaTag { // "A swamp enveloped your/the opposing team!" globalScene.phaseManager.queueMessage( i18next.t( - `arenaTag:grassWaterPledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`, + `arenaTag:grassWaterPledgeOnAdd${this.side === ArenaSide.PLAYER ? "Player" : this.side === ArenaSide.ENEMY ? "Enemy" : ""}`, ), ); } @@ -1743,7 +1743,7 @@ export function getArenaTag( turnCount: number, sourceMove: MoveId | undefined, sourceId: number | undefined, - side: ArenaTagSide = ArenaTagSide.BOTH, + side: ArenaSide = ArenaSide.BOTH, ): ArenaTag | null { switch (tagType) { case ArenaTagType.MIST: diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 075876d8ddd..f34fe287a0e 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -34,7 +34,7 @@ import { import { TerrainType } from "#data/terrain"; import { getTypeDamageMultiplier } from "#data/type"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleType } from "#enums/battle-type"; import type { BattlerIndex } from "#enums/battler-index"; @@ -1342,7 +1342,7 @@ export class MoveEffectAttr extends MoveAttr { applyAbAttrs("MoveEffectChanceMultiplierAbAttr", {pokemon: user, simulated: !showAbility, chance: moveChance, move}); if ((!move.hasAttr("FlinchAttr") || moveChance.value <= move.chance) && !move.hasAttr("SecretPowerAttr")) { - const userSide = user.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const userSide = user.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY; globalScene.arena.applyTagsForSide(ArenaTagType.WATER_FIRE_PLEDGE, userSide, false, moveChance); } @@ -6009,7 +6009,7 @@ export class AddArenaTagAttr extends MoveEffectAttr { } if ((move.chance < 0 || move.chance === 100 || user.randBattleSeedInt(100) < move.chance) && user.getLastXMoves(1)[0]?.result === MoveResult.SUCCESS) { - const side = ((this.selfSideTarget ? user : target).isPlayer() !== (move.hasAttr("AddArenaTrapTagAttr") && target === user)) ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = ((this.selfSideTarget ? user : target).isPlayer() !== (move.hasAttr("AddArenaTrapTagAttr") && target === user)) ? ArenaSide.PLAYER : ArenaSide.ENEMY; globalScene.arena.addTag(this.tagType, this.turnCount, move.id, user.id, side); return true; } @@ -6019,7 +6019,7 @@ export class AddArenaTagAttr extends MoveEffectAttr { getCondition(): MoveConditionFunc | null { return this.failOnOverlap - ? (user, target, move) => !globalScene.arena.getTagOnSide(this.tagType, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY) + ? (user, target, move) => !globalScene.arena.getTagOnSide(this.tagType, target.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY) : null; } } @@ -6045,7 +6045,7 @@ export class RemoveArenaTagsAttr extends MoveEffectAttr { return false; } - const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY; for (const tagType of this.tagTypes) { globalScene.arena.removeTagOnSide(tagType, side); @@ -6058,7 +6058,7 @@ export class RemoveArenaTagsAttr extends MoveEffectAttr { export class AddArenaTrapTagAttr extends AddArenaTagAttr { getCondition(): MoveConditionFunc { return (user, target, move) => { - const side = (this.selfSideTarget !== user.isPlayer()) ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER; + const side = (this.selfSideTarget !== user.isPlayer()) ? ArenaSide.ENEMY : ArenaSide.PLAYER; const tag = globalScene.arena.getTagOnSide(this.tagType, side) as EntryHazardTag; if (!tag) { return true; @@ -6080,7 +6080,7 @@ export class AddArenaTrapTagHitAttr extends AddArenaTagAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); - const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY; const tag = globalScene.arena.getTagOnSide(this.tagType, side) as EntryHazardTag; if ((moveChance < 0 || moveChance === 100 || user.randBattleSeedInt(100) < moveChance) && user.getLastXMoves(1)[0]?.result === MoveResult.SUCCESS) { globalScene.arena.addTag(this.tagType, 0, move.id, user.id, side); @@ -6109,20 +6109,20 @@ export class RemoveArenaTrapAttr extends MoveEffectAttr { } if (this.targetBothSides) { - globalScene.arena.removeTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER); - globalScene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.PLAYER); - globalScene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaTagSide.PLAYER); - globalScene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.SPIKES, ArenaSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaSide.PLAYER); - globalScene.arena.removeTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY); - globalScene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.ENEMY); - globalScene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaTagSide.ENEMY); - globalScene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.SPIKES, ArenaSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaSide.ENEMY); } else { - globalScene.arena.removeTagOnSide(ArenaTagType.SPIKES, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); - globalScene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); - globalScene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); - globalScene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, target.isPlayer() ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.SPIKES, target.isPlayer() ? ArenaSide.ENEMY : ArenaSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.TOXIC_SPIKES, target.isPlayer() ? ArenaSide.ENEMY : ArenaSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.STEALTH_ROCK, target.isPlayer() ? ArenaSide.ENEMY : ArenaSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, target.isPlayer() ? ArenaSide.ENEMY : ArenaSide.PLAYER); } return true; @@ -6145,17 +6145,17 @@ export class RemoveScreensAttr extends MoveEffectAttr { } if (this.targetBothSides) { - globalScene.arena.removeTagOnSide(ArenaTagType.REFLECT, ArenaTagSide.PLAYER); - globalScene.arena.removeTagOnSide(ArenaTagType.LIGHT_SCREEN, ArenaTagSide.PLAYER); - globalScene.arena.removeTagOnSide(ArenaTagType.AURORA_VEIL, ArenaTagSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.REFLECT, ArenaSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.LIGHT_SCREEN, ArenaSide.PLAYER); + globalScene.arena.removeTagOnSide(ArenaTagType.AURORA_VEIL, ArenaSide.PLAYER); - globalScene.arena.removeTagOnSide(ArenaTagType.REFLECT, ArenaTagSide.ENEMY); - globalScene.arena.removeTagOnSide(ArenaTagType.LIGHT_SCREEN, ArenaTagSide.ENEMY); - globalScene.arena.removeTagOnSide(ArenaTagType.AURORA_VEIL, ArenaTagSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.REFLECT, ArenaSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.LIGHT_SCREEN, ArenaSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.AURORA_VEIL, ArenaSide.ENEMY); } else { - globalScene.arena.removeTagOnSide(ArenaTagType.REFLECT, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY); - globalScene.arena.removeTagOnSide(ArenaTagType.LIGHT_SCREEN, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY); - globalScene.arena.removeTagOnSide(ArenaTagType.AURORA_VEIL, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.REFLECT, target.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.LIGHT_SCREEN, target.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY); + globalScene.arena.removeTagOnSide(ArenaTagType.AURORA_VEIL, target.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY); } return true; @@ -6178,20 +6178,20 @@ export class SwapArenaTagsAttr extends MoveEffectAttr { return false; } - const tagPlayerTemp = globalScene.arena.findTagsOnSide((t => this.SwapTags.includes(t.tagType)), ArenaTagSide.PLAYER); - const tagEnemyTemp = globalScene.arena.findTagsOnSide((t => this.SwapTags.includes(t.tagType)), ArenaTagSide.ENEMY); + const tagPlayerTemp = globalScene.arena.findTagsOnSide((t => this.SwapTags.includes(t.tagType)), ArenaSide.PLAYER); + const tagEnemyTemp = globalScene.arena.findTagsOnSide((t => this.SwapTags.includes(t.tagType)), ArenaSide.ENEMY); if (tagPlayerTemp) { for (const swapTagsType of tagPlayerTemp) { - globalScene.arena.removeTagOnSide(swapTagsType.tagType, ArenaTagSide.PLAYER, true); - globalScene.arena.addTag(swapTagsType.tagType, swapTagsType.turnCount, swapTagsType.sourceMove, swapTagsType.sourceId!, ArenaTagSide.ENEMY, true); // TODO: is the bang correct? + globalScene.arena.removeTagOnSide(swapTagsType.tagType, ArenaSide.PLAYER, true); + globalScene.arena.addTag(swapTagsType.tagType, swapTagsType.turnCount, swapTagsType.sourceMove, swapTagsType.sourceId!, ArenaSide.ENEMY, true); // TODO: is the bang correct? } } if (tagEnemyTemp) { for (const swapTagsType of tagEnemyTemp) { - globalScene.arena.removeTagOnSide(swapTagsType.tagType, ArenaTagSide.ENEMY, true); - globalScene.arena.addTag(swapTagsType.tagType, swapTagsType.turnCount, swapTagsType.sourceMove, swapTagsType.sourceId!, ArenaTagSide.PLAYER, true); // TODO: is the bang correct? + globalScene.arena.removeTagOnSide(swapTagsType.tagType, ArenaSide.ENEMY, true); + globalScene.arena.addTag(swapTagsType.tagType, swapTagsType.turnCount, swapTagsType.sourceMove, swapTagsType.sourceId!, ArenaSide.PLAYER, true); // TODO: is the bang correct? } } diff --git a/src/enums/arena-side.ts b/src/enums/arena-side.ts new file mode 100644 index 00000000000..4d448f40f47 --- /dev/null +++ b/src/enums/arena-side.ts @@ -0,0 +1,5 @@ +export enum ArenaSide { + BOTH, + PLAYER, + ENEMY, +} diff --git a/src/enums/arena-tag-side.ts b/src/enums/arena-tag-side.ts deleted file mode 100644 index 50741751fbb..00000000000 --- a/src/enums/arena-tag-side.ts +++ /dev/null @@ -1,6 +0,0 @@ -// TODO: rename to something else (this isn't used only for arena tags) -export enum ArenaTagSide { - BOTH, - PLAYER, - ENEMY, -} diff --git a/src/events/arena.ts b/src/events/arena.ts index 9f818a36c89..9159c4d4bb6 100644 --- a/src/events/arena.ts +++ b/src/events/arena.ts @@ -1,5 +1,5 @@ import type { TerrainType } from "#data/terrain"; -import type { ArenaTagSide } from "#enums/arena-tag-side"; +import type { ArenaSide } from "#enums/arena-side"; import type { ArenaTagType } from "#enums/arena-tag-type"; import type { WeatherType } from "#enums/weather-type"; @@ -60,8 +60,8 @@ export class TerrainChangedEvent extends ArenaEvent { export class TagAddedEvent extends ArenaEvent { /** The {@linkcode ArenaTagType} being added */ public arenaTagType: ArenaTagType; - /** The {@linkcode ArenaTagSide} the tag is being placed on */ - public arenaTagSide: ArenaTagSide; + /** The {@linkcode ArenaSide} the tag is being placed on */ + public arenaTagSide: ArenaSide; /** The current number of layers of the arena trap. */ public arenaTagLayers: number; /** The maximum amount of layers of the arena trap. */ @@ -69,7 +69,7 @@ export class TagAddedEvent extends ArenaEvent { constructor( arenaTagType: ArenaTagType, - arenaTagSide: ArenaTagSide, + arenaTagSide: ArenaSide, duration: number, maxDuration?: number, arenaTagLayers?: number, @@ -87,9 +87,9 @@ export class TagAddedEvent extends ArenaEvent { export class TagRemovedEvent extends ArenaEvent { /** The {@linkcode ArenaTagType} being removed */ public arenaTagType: ArenaTagType; - /** The {@linkcode ArenaTagSide} the tag was being placed on */ - public arenaTagSide: ArenaTagSide; - constructor(arenaTagType: ArenaTagType, arenaTagSide: ArenaTagSide, duration: number) { + /** The {@linkcode ArenaSide} the tag was being placed on */ + public arenaTagSide: ArenaSide; + constructor(arenaTagType: ArenaTagType, arenaTagSide: ArenaSide, duration: number) { super(ArenaEventType.TAG_REMOVED, duration); this.arenaTagType = arenaTagType; diff --git a/src/field/arena.ts b/src/field/arena.ts index 3e214ff1ea7..5ec40950e0b 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -20,7 +20,7 @@ import { Weather, } from "#data/weather"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import type { ArenaTagType } from "#enums/arena-tag-type"; import type { BattlerIndex } from "#enums/battler-index"; import { BiomeId } from "#enums/biome-id"; @@ -652,13 +652,13 @@ export class Arena { /** * Applies each `ArenaTag` in this Arena, based on which side (self, enemy, or both) is passed in as a parameter * @param tagType Either an {@linkcode ArenaTagType} string, or an actual {@linkcode ArenaTag} class to filter which ones to apply - * @param side {@linkcode ArenaTagSide} which side's arena tags to apply + * @param side {@linkcode ArenaSide} which side's arena tags to apply * @param simulated if `true`, this applies arena tags without changing game state * @param args array of parameters that the called upon tags may need */ applyTagsForSide( tagType: ArenaTagType | Constructor | AbstractConstructor, - side: ArenaTagSide, + side: ArenaSide, simulated: boolean, ...args: unknown[] ): void { @@ -666,7 +666,7 @@ export class Arena { typeof tagType === "string" ? this.tags.filter(t => t.tagType === tagType) : this.tags.filter(t => t instanceof tagType); - if (side !== ArenaTagSide.BOTH) { + if (side !== ArenaSide.BOTH) { tags = tags.filter(t => t.side === side); } tags.forEach(t => t.apply(this, simulated, ...args)); @@ -684,7 +684,7 @@ export class Arena { simulated: boolean, ...args: unknown[] ): void { - this.applyTagsForSide(tagType, ArenaTagSide.BOTH, simulated, ...args); + this.applyTagsForSide(tagType, ArenaSide.BOTH, simulated, ...args); } /** @@ -693,7 +693,7 @@ export class Arena { * @param turnCount - The number of turns the newly-added tag should last. * @param sourceId - The {@linkcode Pokemon.id | PID} of the Pokemon creating the tag. * @param sourceMove - The {@linkcode MoveId} of the move creating the tag, or `undefined` if not from a move. - * @param side - The {@linkcode ArenaTagSide}(s) to which the tag should apply; default `ArenaTagSide.BOTH`. + * @param side - The {@linkcode ArenaSide}(s) to which the tag should apply; default `ArenaTagSide.BOTH`. * @param quiet - Whether to suppress messages produced by tag addition; default `false`. * @returns `true` if the tag was successfully added without overlapping. // TODO: Do we need the return value here? literally nothing uses it @@ -703,7 +703,7 @@ export class Arena { turnCount: number, sourceMove: MoveId | undefined, sourceId: number, - side: ArenaTagSide = ArenaTagSide.BOTH, + side: ArenaSide = ArenaSide.BOTH, quiet = false, ): boolean { const existingTag = this.getTagOnSide(tagType, side); @@ -747,7 +747,7 @@ export class Arena { */ getTag(tagType: Constructor | AbstractConstructor): T | undefined; getTag(tagType: ArenaTagType | Constructor | AbstractConstructor): ArenaTag | undefined { - return this.getTagOnSide(tagType, ArenaTagSide.BOTH); + return this.getTagOnSide(tagType, ArenaSide.BOTH); } hasTag(tagType: ArenaTagType): boolean { @@ -759,19 +759,19 @@ export class Arena { * * eg: `MIST` only applies to the user's side, while `MUD_SPORT` applies to both user and enemy side * @param tagType The {@linkcode ArenaTagType} or {@linkcode ArenaTag} to get - * @param side The {@linkcode ArenaTagSide} to look at + * @param side The {@linkcode ArenaSide} to look at * @returns either the {@linkcode ArenaTag}, or `undefined` if it isn't there */ getTagOnSide( tagType: ArenaTagType | Constructor | AbstractConstructor, - side: ArenaTagSide, + side: ArenaSide, ): ArenaTag | undefined { return typeof tagType === "string" ? this.tags.find( - t => t.tagType === tagType && (side === ArenaTagSide.BOTH || t.side === ArenaTagSide.BOTH || t.side === side), + t => t.tagType === tagType && (side === ArenaSide.BOTH || t.side === ArenaSide.BOTH || t.side === side), ) : this.tags.find( - t => t instanceof tagType && (side === ArenaTagSide.BOTH || t.side === ArenaTagSide.BOTH || t.side === side), + t => t instanceof tagType && (side === ArenaSide.BOTH || t.side === ArenaSide.BOTH || t.side === side), ); } @@ -784,18 +784,18 @@ export class Arena { * @returns array of {@linkcode ArenaTag}s from which the Arena's tags return true and apply to both sides */ findTags(tagPredicate: (t: ArenaTag) => boolean): ArenaTag[] { - return this.findTagsOnSide(tagPredicate, ArenaTagSide.BOTH); + return this.findTagsOnSide(tagPredicate, ArenaSide.BOTH); } /** * Returns specific tags from the arena that pass the `tagPredicate` function passed in as a parameter, and apply to the given side * @param tagPredicate a function mapping {@linkcode ArenaTag}s to `boolean`s - * @param side The {@linkcode ArenaTagSide} to look at + * @param side The {@linkcode ArenaSide} to look at * @returns array of {@linkcode ArenaTag}s from which the Arena's tags return `true` and apply to the given side */ - findTagsOnSide(tagPredicate: (t: ArenaTag) => boolean, side: ArenaTagSide): ArenaTag[] { + findTagsOnSide(tagPredicate: (t: ArenaTag) => boolean, side: ArenaSide): ArenaTag[] { return this.tags.filter( - t => tagPredicate(t) && (side === ArenaTagSide.BOTH || t.side === ArenaTagSide.BOTH || t.side === side), + t => tagPredicate(t) && (side === ArenaSide.BOTH || t.side === ArenaSide.BOTH || t.side === side), ); } @@ -822,7 +822,7 @@ export class Arena { return !!tag; } - removeTagOnSide(tagType: ArenaTagType, side: ArenaTagSide, quiet = false): boolean { + removeTagOnSide(tagType: ArenaTagType, side: ArenaSide, quiet = false): boolean { const tag = this.getTagOnSide(tagType, side); if (tag) { tag.onRemove(this, quiet); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index ec813e52e56..0ab6d8f2bc5 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -68,7 +68,7 @@ import type { TypeDamageMultiplier } from "#data/type"; import { getTypeDamageMultiplier, getTypeRgb } from "#data/type"; import { AbilityId } from "#enums/ability-id"; import { AiType } from "#enums/ai-type"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleSpec } from "#enums/battle-spec"; import { BattlerIndex } from "#enums/battler-index"; @@ -1519,7 +1519,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { } break; case Stat.SPD: { - const side = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = this.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY; if (globalScene.arena.getTagOnSide(ArenaTagType.TAILWIND, side)) { ret *= 2; } @@ -2358,7 +2358,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { applyAbAttrs("CheckTrappedAbAttr", { pokemon: opponent, trapped, opponent: this, simulated }, trappedAbMessages); } - const side = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = this.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY; return ( trapped.value || !!this.getTag(TrappedTag) || !!globalScene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, side) ); @@ -3543,7 +3543,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { effectiveness, }: getAttackDamageParams): DamageCalculationResult { const damage = new NumberHolder(0); - const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const defendingSide = this.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY; const variableCategory = new NumberHolder(move.category); applyMoveAttrs("VariableMoveCategoryAttr", source, this, move, variableCategory); @@ -3849,7 +3849,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { applyAbAttrs("BlockCritAbAttr", { pokemon: this, blockCrit }); const blockCritTag = globalScene.arena.getTagOnSide( NoCritTag, - this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, + this.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY, ); isCritical &&= !blockCritTag && !blockCrit.value; // need to roll a crit and not be blocked by either crit prevention effect @@ -5016,7 +5016,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { * @returns Whether this Pokémon is protected by Safeguard */ public isSafeguarded(attacker: Pokemon): boolean { - const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const defendingSide = this.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY; if (globalScene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, defendingSide)) { const bypassed = new BooleanHolder(false); if (attacker) { diff --git a/src/field/trainer.ts b/src/field/trainer.ts index f5b2e5dad99..6e2b07cf6a8 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -3,7 +3,7 @@ import { pokemonPrevolutions } from "#balance/pokemon-evolutions"; import { signatureSpecies } from "#balance/signature-species"; import { EntryHazardTag } from "#data/arena-tag"; import type { PokemonSpecies } from "#data/pokemon-species"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { SpeciesId } from "#enums/species-id"; import { TeraAIMode } from "#enums/tera-ai-mode"; @@ -574,7 +574,7 @@ export class Trainer extends Phaser.GameObjects.Container { score /= playerField.length; if (forSwitch && !p.isOnField()) { globalScene.arena - .findTagsOnSide(t => t instanceof EntryHazardTag, ArenaTagSide.ENEMY) + .findTagsOnSide(t => t instanceof EntryHazardTag, ArenaSide.ENEMY) .map(t => (score *= (t as EntryHazardTag).getMatchupScoreMultiplier(p))); } } diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index 2bf845776ca..da1312d90fa 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -4,7 +4,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { speciesStarterCosts } from "#balance/starters"; import { TrappedTag } from "#data/battler-tags"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleType } from "#enums/battle-type"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -526,7 +526,7 @@ export class CommandPhase extends FieldPhase { } } else { const trapTag = playerPokemon.getTag(TrappedTag); - const fairyLockTag = globalScene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER); + const fairyLockTag = globalScene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaSide.PLAYER); if (!isSwitch) { globalScene.ui.setMode(UiMode.COMMAND, this.fieldIndex); diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index be6d0164698..259f956a019 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -6,7 +6,7 @@ import { MoveAnim } from "#data/battle-anims"; import { DamageProtectedTag, ProtectedTag, SemiInvulnerableTag, SubstituteTag, TypeBoostTag } from "#data/battler-tags"; import { SpeciesFormChangePostMoveTrigger } from "#data/form-change-triggers"; import type { TypeDamageMultiplier } from "#data/type"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { BattlerIndex } from "#enums/battler-index"; import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -438,8 +438,8 @@ export class MoveEffectPhase extends PokemonPhase { * @returns Whether the pokemon was protected */ private protectedCheck(user: Pokemon, target: Pokemon): boolean { - /** The {@linkcode ArenaTagSide} to which the target belongs */ - const targetSide = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + /** The {@linkcode ArenaSide} to which the target belongs */ + const targetSide = target.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY; /** Has the invoked move been cancelled by conditional protection (e.g Quick Guard)? */ const hasConditionalProtectApplied = new BooleanHolder(false); /** Does the applied conditional protection bypass Protect-ignoring effects? */ diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index 3c2d1cb5fad..fddf66e2fc3 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -5,7 +5,7 @@ import { handleTutorial, Tutorial } from "#app/tutorial"; import type { ArenaTag } from "#data/arena-tag"; import { MistTag } from "#data/arena-tag"; import { OctolockTag } from "#data/battler-tags"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import type { BattlerIndex } from "#enums/battler-index"; import { type BattleStat, getStatKey, getStatStageChangeDescriptionKey, Stat } from "#enums/stat"; @@ -92,7 +92,7 @@ export class StatStageChangePhase extends PokemonPhase { /** If this SSCP is from sticky web, then check if pokemon that last sucessfully used sticky web is on field */ const stickyTagID = globalScene.arena.findTagsOnSide( (t: ArenaTag) => t.tagType === ArenaTagType.STICKY_WEB, - ArenaTagSide.PLAYER, + ArenaSide.PLAYER, )[0].sourceId; globalScene.getEnemyField().forEach(e => { if (e.id === stickyTagID) { @@ -105,7 +105,7 @@ export class StatStageChangePhase extends PokemonPhase { } else { const stickyTagID = globalScene.arena.findTagsOnSide( (t: ArenaTag) => t.tagType === ArenaTagType.STICKY_WEB, - ArenaTagSide.ENEMY, + ArenaSide.ENEMY, )[0].sourceId; globalScene.getPlayerField().forEach(e => { if (e.id === stickyTagID) { @@ -133,7 +133,7 @@ export class StatStageChangePhase extends PokemonPhase { // TODO: add a reference to the source of the stat change to fix Infiltrator interaction globalScene.arena.applyTagsForSide( MistTag, - pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, + pokemon.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY, false, null, cancelled, diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index cd45a73c813..b2af639beb6 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -1,7 +1,7 @@ import { applyAbAttrs } from "#abilities/apply-ab-attrs"; import type { TurnCommand } from "#app/battle"; import { globalScene } from "#app/global-scene"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import type { BattlerIndex } from "#enums/battler-index"; import { Command } from "#enums/command"; import { SwitchType } from "#enums/switch-type"; @@ -54,7 +54,7 @@ export class TurnStartPhase extends FieldPhase { const field = globalScene.getField(); const moveOrder = this.getCommandOrder(); - for (const pokemon of inSpeedOrder(ArenaTagSide.BOTH)) { + for (const pokemon of inSpeedOrder(ArenaSide.BOTH)) { const preTurnCommand = globalScene.currentBattle.preTurnCommands[pokemon.getBattlerIndex()]; if (preTurnCommand?.skip) { @@ -68,7 +68,7 @@ export class TurnStartPhase extends FieldPhase { } const phaseManager = globalScene.phaseManager; - for (const pokemon of inSpeedOrder(ArenaTagSide.BOTH)) { + for (const pokemon of inSpeedOrder(ArenaSide.BOTH)) { applyAbAttrs("BypassSpeedChanceAbAttr", { pokemon }); globalScene.applyModifiers(BypassSpeedChanceModifier, pokemon.isPlayer(), pokemon); } diff --git a/src/ui/containers/arena-flyout.ts b/src/ui/containers/arena-flyout.ts index 355f3edb293..bd670dca405 100644 --- a/src/ui/containers/arena-flyout.ts +++ b/src/ui/containers/arena-flyout.ts @@ -1,7 +1,7 @@ import { globalScene } from "#app/global-scene"; import { EntryHazardTag } from "#data/arena-tag"; import { TerrainType } from "#data/terrain"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { TextStyle } from "#enums/text-style"; import { WeatherType } from "#enums/weather-type"; @@ -294,9 +294,9 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { const isArenaTrapTag = globalScene.arena.getTag(tagAddedEvent.arenaTagType) instanceof EntryHazardTag; let arenaEffectType: ArenaEffectType; - if (tagAddedEvent.arenaTagSide === ArenaTagSide.BOTH) { + if (tagAddedEvent.arenaTagSide === ArenaSide.BOTH) { arenaEffectType = ArenaEffectType.FIELD; - } else if (tagAddedEvent.arenaTagSide === ArenaTagSide.PLAYER) { + } else if (tagAddedEvent.arenaTagSide === ArenaSide.PLAYER) { arenaEffectType = ArenaEffectType.PLAYER; } else { arenaEffectType = ArenaEffectType.ENEMY; diff --git a/src/utils/speed-order-generator.ts b/src/utils/speed-order-generator.ts index 24f95de665f..d3ebefee399 100644 --- a/src/utils/speed-order-generator.ts +++ b/src/utils/speed-order-generator.ts @@ -1,23 +1,23 @@ import { globalScene } from "#app/global-scene"; import { PokemonPriorityQueue } from "#app/queues/pokemon-priority-queue"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import type { Pokemon } from "#field/pokemon"; /** * A generator function which uses a priority queue to yield each pokemon from a given side of the field in speed order. - * @param side - The {@linkcode ArenaTagSide | side} of the field to use + * @param side - The {@linkcode ArenaSide | side} of the field to use * @returns A {@linkcode Generator} of {@linkcode Pokemon} * * @remarks * This should almost always be used by iteration in a `for...of` loop */ -export function* inSpeedOrder(side: ArenaTagSide = ArenaTagSide.BOTH): Generator { +export function* inSpeedOrder(side: ArenaSide = ArenaSide.BOTH): Generator { let pokemonList: Pokemon[]; switch (side) { - case ArenaTagSide.PLAYER: + case ArenaSide.PLAYER: pokemonList = globalScene.getPlayerField(true); break; - case ArenaTagSide.ENEMY: + case ArenaSide.ENEMY: pokemonList = globalScene.getEnemyField(true); break; default: diff --git a/test/@types/vitest.d.ts b/test/@types/vitest.d.ts index 43e9df190aa..0d189c86eb9 100644 --- a/test/@types/vitest.d.ts +++ b/test/@types/vitest.d.ts @@ -5,7 +5,7 @@ import type { Phase } from "#app/phase"; import type { ArenaTag } from "#data/arena-tag"; import type { TerrainType } from "#data/terrain"; import type { AbilityId } from "#enums/ability-id"; -import type { ArenaTagSide } from "#enums/arena-tag-side"; +import type { ArenaSide } from "#enums/arena-side"; import type { ArenaTagType } from "#enums/arena-tag-type"; import type { BattlerTagType } from "#enums/battler-tag-type"; import type { MoveId } from "#enums/move-id"; @@ -118,9 +118,9 @@ interface ArenaMatchers { /** * Check whether the current {@linkcode Arena} contains the given {@linkcode ArenaTag}. * @param expectedType - The {@linkcode ArenaTagType} of the desired tag - * @param side - The {@linkcode ArenaTagSide | side(s) of the field} the tag should affect; default {@linkcode ArenaTagSide.BOTH} + * @param side - The {@linkcode ArenaSide | side(s) of the field} the tag should affect; default {@linkcode ArenaSide.BOTH} */ - toHaveArenaTag(expectedType: ArenaTagType, side?: ArenaTagSide): void; + toHaveArenaTag(expectedType: ArenaTagType, side?: ArenaSide): void; /** * Check whether the current {@linkcode Arena} contains the given {@linkcode PositionalTag}. diff --git a/test/abilities/good-as-gold.test.ts b/test/abilities/good-as-gold.test.ts index c6b6faf8349..057b21b8f3f 100644 --- a/test/abilities/good-as-gold.test.ts +++ b/test/abilities/good-as-gold.test.ts @@ -1,6 +1,6 @@ import { allAbilities } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -82,8 +82,8 @@ describe("Abilities - Good As Gold", () => { await game.phaseInterceptor.to("BerryPhase"); expect(good_as_gold.getAbility().id).toBe(AbilityId.GOOD_AS_GOLD); expect(good_as_gold.getStatStage(Stat.ATK)).toBe(0); - expect(game.scene.arena.getTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaTagSide.PLAYER)).toBeDefined(); - expect(game.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, ArenaSide.PLAYER)).toBeDefined(); }); it("should not block field targeted effects in singles", async () => { @@ -93,7 +93,7 @@ describe("Abilities - Good As Gold", () => { game.move.select(MoveId.SPLASH, 0); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.PLAYER)).toBeDefined(); }); it("should block the ally's helping hand", async () => { diff --git a/test/abilities/infiltrator.test.ts b/test/abilities/infiltrator.test.ts index 24fb1b24540..4bbff063a75 100644 --- a/test/abilities/infiltrator.test.ts +++ b/test/abilities/infiltrator.test.ts @@ -1,6 +1,6 @@ import { allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; @@ -63,7 +63,7 @@ describe("Abilities - Infiltrator", () => { const preScreenDmg = enemy.getAttackDamage({ source: player, move: allMoves[move] }).damage; - game.scene.arena.addTag(tagType, 1, MoveId.NONE, enemy.id, ArenaTagSide.ENEMY, true); + game.scene.arena.addTag(tagType, 1, MoveId.NONE, enemy.id, ArenaSide.ENEMY, true); const postScreenDmg = enemy.getAttackDamage({ source: player, move: allMoves[move] }).damage; @@ -77,7 +77,7 @@ describe("Abilities - Infiltrator", () => { const player = game.field.getPlayerPokemon(); const enemy = game.field.getEnemyPokemon(); - game.scene.arena.addTag(ArenaTagType.SAFEGUARD, 1, MoveId.NONE, enemy.id, ArenaTagSide.ENEMY, true); + game.scene.arena.addTag(ArenaTagType.SAFEGUARD, 1, MoveId.NONE, enemy.id, ArenaSide.ENEMY, true); game.move.use(MoveId.SPORE); await game.toEndOfTurn(); @@ -93,7 +93,7 @@ describe("Abilities - Infiltrator", () => { const player = game.field.getPlayerPokemon(); const enemy = game.field.getEnemyPokemon(); - game.scene.arena.addTag(ArenaTagType.MIST, 1, MoveId.NONE, enemy.id, ArenaTagSide.ENEMY, true); + game.scene.arena.addTag(ArenaTagType.MIST, 1, MoveId.NONE, enemy.id, ArenaSide.ENEMY, true); game.move.select(MoveId.BABY_DOLL_EYES); diff --git a/test/abilities/magic-bounce.test.ts b/test/abilities/magic-bounce.test.ts index 6b7bc7453ed..03cdc7f3a9c 100644 --- a/test/abilities/magic-bounce.test.ts +++ b/test/abilities/magic-bounce.test.ts @@ -1,6 +1,6 @@ import { allAbilities, allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -126,8 +126,8 @@ describe("Abilities - Magic Bounce", () => { game.move.select(MoveId.SPIKES); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); - expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY)).toBeUndefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.PLAYER)!["layers"]).toBe(1); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.ENEMY)).toBeUndefined(); }); it("should bounce spikes even when the target is protected", async () => { @@ -136,7 +136,7 @@ describe("Abilities - Magic Bounce", () => { game.move.select(MoveId.SPIKES); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.PLAYER)!["layers"]).toBe(1); }); it("should not bounce spikes when the target is in the semi-invulnerable state", async () => { @@ -146,7 +146,7 @@ describe("Abilities - Magic Bounce", () => { game.move.select(MoveId.SPIKES); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY)!["layers"]).toBe(1); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.ENEMY)!["layers"]).toBe(1); }); it("should not bounce back curse", async () => { @@ -305,22 +305,16 @@ describe("Abilities - Magic Bounce", () => { await game.phaseInterceptor.to("TurnEndPhase"); expect( - game.scene.arena - .getTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER) - ?.getSourcePokemon() - ?.getBattlerIndex(), + game.scene.arena.getTagOnSide(ArenaTagType.STICKY_WEB, ArenaSide.PLAYER)?.getSourcePokemon()?.getBattlerIndex(), ).toBe(BattlerIndex.ENEMY); - game.scene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER, true); + game.scene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaSide.PLAYER, true); // turn 2 game.move.select(MoveId.STICKY_WEB, 0); game.move.select(MoveId.TRICK_ROOM, 1); await game.phaseInterceptor.to("BerryPhase"); expect( - game.scene.arena - .getTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER) - ?.getSourcePokemon() - ?.getBattlerIndex(), + game.scene.arena.getTagOnSide(ArenaTagType.STICKY_WEB, ArenaSide.PLAYER)?.getSourcePokemon()?.getBattlerIndex(), ).toBe(BattlerIndex.ENEMY); }); diff --git a/test/abilities/magic-guard.test.ts b/test/abilities/magic-guard.test.ts index e2977420edf..64529cb9bba 100644 --- a/test/abilities/magic-guard.test.ts +++ b/test/abilities/magic-guard.test.ts @@ -1,6 +1,6 @@ import { getStatusEffectCatchRateMultiplier } from "#data/status-effect"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; @@ -156,8 +156,8 @@ describe("AbilityId - Magic Guard", () => { }); it("should prevent damage from entry hazards, but not Toxic Spikes poison", async () => { - game.scene.arena.addTag(ArenaTagType.SPIKES, -1, MoveId.SPIKES, 0, ArenaTagSide.PLAYER); - game.scene.arena.addTag(ArenaTagType.TOXIC_SPIKES, -1, MoveId.TOXIC_SPIKES, 0, ArenaTagSide.PLAYER); + game.scene.arena.addTag(ArenaTagType.SPIKES, -1, MoveId.SPIKES, 0, ArenaSide.PLAYER); + game.scene.arena.addTag(ArenaTagType.TOXIC_SPIKES, -1, MoveId.TOXIC_SPIKES, 0, ArenaSide.PLAYER); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); // Magic guard prevented damage but not poison diff --git a/test/abilities/wimp-out.test.ts b/test/abilities/wimp-out.test.ts index 46fd5094255..2bcf696c81b 100644 --- a/test/abilities/wimp-out.test.ts +++ b/test/abilities/wimp-out.test.ts @@ -1,6 +1,6 @@ import { allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -323,8 +323,8 @@ describe("Abilities - Wimp Out", () => { }); it("Magic Guard passive should not allow indirect damage to trigger Wimp Out", async () => { - game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, MoveId.STEALTH_ROCK, 0, ArenaTagSide.ENEMY); - game.scene.arena.addTag(ArenaTagType.SPIKES, 1, MoveId.SPIKES, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, MoveId.STEALTH_ROCK, 0, ArenaSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.SPIKES, 1, MoveId.SPIKES, 0, ArenaSide.ENEMY); game.override .passiveAbility(AbilityId.MAGIC_GUARD) .enemyMoveset([MoveId.LEECH_SEED]) @@ -378,8 +378,8 @@ describe("Abilities - Wimp Out", () => { }); it("Activates due to entry hazards", async () => { - game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, MoveId.STEALTH_ROCK, 0, ArenaTagSide.ENEMY); - game.scene.arena.addTag(ArenaTagType.SPIKES, 1, MoveId.SPIKES, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 1, MoveId.STEALTH_ROCK, 0, ArenaSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.SPIKES, 1, MoveId.SPIKES, 0, ArenaSide.ENEMY); game.override.enemySpecies(SpeciesId.CENTISKORCH).enemyAbility(AbilityId.WIMP_OUT).startingWave(4); await game.classicMode.startBattle([SpeciesId.TYRUNT]); diff --git a/test/moves/aurora-veil.test.ts b/test/moves/aurora-veil.test.ts index 15aa72d039a..4f650ec9467 100644 --- a/test/moves/aurora-veil.test.ts +++ b/test/moves/aurora-veil.test.ts @@ -1,7 +1,7 @@ import type { BattleScene } from "#app/battle-scene"; import { allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; @@ -137,7 +137,7 @@ describe("Moves - Aurora Veil", () => { */ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) => { const multiplierHolder = new NumberHolder(1); - const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = defender.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY; if (globalScene.arena.getTagOnSide(ArenaTagType.AURORA_VEIL, side) && move.getAttrs("CritOnlyAttr").length === 0) { globalScene.arena.applyTagsForSide( diff --git a/test/moves/ceaseless-edge.test.ts b/test/moves/ceaseless-edge.test.ts index b06ea84308c..333bfa94573 100644 --- a/test/moves/ceaseless-edge.test.ts +++ b/test/moves/ceaseless-edge.test.ts @@ -1,7 +1,7 @@ import { EntryHazardTag } from "#data/arena-tag"; import { allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; @@ -50,11 +50,11 @@ describe("Moves - Ceaseless Edge", () => { await game.phaseInterceptor.to(MoveEffectPhase, false); // Spikes should not have any layers before move effect is applied - const tagBefore = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY) as EntryHazardTag; + const tagBefore = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.ENEMY) as EntryHazardTag; expect(tagBefore instanceof EntryHazardTag).toBeFalsy(); await game.phaseInterceptor.to(TurnEndPhase); - const tagAfter = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY) as EntryHazardTag; + const tagAfter = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.ENEMY) as EntryHazardTag; expect(tagAfter instanceof EntryHazardTag).toBeTruthy(); expect(tagAfter.layers).toBe(1); expect(enemyPokemon.hp).toBeLessThan(enemyStartingHp); @@ -72,11 +72,11 @@ describe("Moves - Ceaseless Edge", () => { await game.phaseInterceptor.to(MoveEffectPhase, false); // Spikes should not have any layers before move effect is applied - const tagBefore = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY) as EntryHazardTag; + const tagBefore = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.ENEMY) as EntryHazardTag; expect(tagBefore instanceof EntryHazardTag).toBeFalsy(); await game.phaseInterceptor.to(TurnEndPhase); - const tagAfter = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY) as EntryHazardTag; + const tagAfter = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.ENEMY) as EntryHazardTag; expect(tagAfter instanceof EntryHazardTag).toBeTruthy(); expect(tagAfter.layers).toBe(2); expect(enemyPokemon.hp).toBeLessThan(enemyStartingHp); @@ -90,11 +90,11 @@ describe("Moves - Ceaseless Edge", () => { game.move.select(MoveId.CEASELESS_EDGE); await game.phaseInterceptor.to(MoveEffectPhase, false); // Spikes should not have any layers before move effect is applied - const tagBefore = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY) as EntryHazardTag; + const tagBefore = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.ENEMY) as EntryHazardTag; expect(tagBefore instanceof EntryHazardTag).toBeFalsy(); await game.toNextTurn(); - const tagAfter = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY) as EntryHazardTag; + const tagAfter = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.ENEMY) as EntryHazardTag; expect(tagAfter instanceof EntryHazardTag).toBeTruthy(); expect(tagAfter.layers).toBe(2); diff --git a/test/moves/court-change.test.ts b/test/moves/court-change.test.ts index a27854c12be..0dbeeed4545 100644 --- a/test/moves/court-change.test.ts +++ b/test/moves/court-change.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; @@ -47,7 +47,7 @@ describe("Move - Court Change", () => { await game.toNextTurn(); // enemy team will be in the swamp and slowed - expect(game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaTagSide.ENEMY)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaSide.ENEMY)).toBeDefined(); expect(enemyPokemon.getEffectiveStat(Stat.SPD)).toBe(enemyPokemon.getStat(Stat.SPD) / 4); game.move.use(MoveId.COURT_CHANGE); @@ -55,8 +55,8 @@ describe("Move - Court Change", () => { await game.toEndOfTurn(); // own team should now be in the swamp and slowed - expect(game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaTagSide.ENEMY)).toBeUndefined(); - expect(game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaSide.ENEMY)).toBeUndefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaSide.PLAYER)).toBeDefined(); expect(regieleki.getEffectiveStat(Stat.SPD)).toBe(regieleki.getStat(Stat.SPD) / 4); }); @@ -71,15 +71,15 @@ describe("Move - Court Change", () => { await game.toNextTurn(); // Ninjask will not be poisoned because of Safeguard - expect(game.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, ArenaSide.PLAYER)).toBeDefined(); expect(ninjask.status?.effect).toBeUndefined(); game.move.use(MoveId.COURT_CHANGE); await game.toEndOfTurn(); // Ninjask should now be poisoned due to lack of Safeguard - expect(game.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, ArenaTagSide.PLAYER)).toBeUndefined(); - expect(game.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, ArenaTagSide.ENEMY)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, ArenaSide.PLAYER)).toBeUndefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, ArenaSide.ENEMY)).toBeDefined(); expect(ninjask.status?.effect).toBe(StatusEffect.POISON); }); }); diff --git a/test/moves/crafty-shield.test.ts b/test/moves/crafty-shield.test.ts index 0e067a07214..bd6af1d3815 100644 --- a/test/moves/crafty-shield.test.ts +++ b/test/moves/crafty-shield.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -79,7 +79,7 @@ describe("Moves - Crafty Shield", () => { await game.move.forceEnemyMove(MoveId.TOXIC_SPIKES); await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.arena.getTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaSide.PLAYER)).toBeDefined(); expect(charizard.getTag(BattlerTagType.PERISH_SONG)).toBeDefined(); expect(blastoise.getTag(BattlerTagType.PERISH_SONG)).toBeDefined(); }); diff --git a/test/moves/destiny-bond.test.ts b/test/moves/destiny-bond.test.ts index a5020b83944..b8e60799640 100644 --- a/test/moves/destiny-bond.test.ts +++ b/test/moves/destiny-bond.test.ts @@ -1,7 +1,7 @@ import type { EntryHazardTag } from "#data/arena-tag"; import { allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; @@ -191,7 +191,7 @@ describe("Moves - Destiny Bond", () => { expect(playerPokemon.isFainted()).toBe(true); // Ceaseless Edge spikes effect should still activate - const tagAfter = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY) as EntryHazardTag; + const tagAfter = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.ENEMY) as EntryHazardTag; expect(tagAfter.tagType).toBe(ArenaTagType.SPIKES); expect(tagAfter.layers).toBe(1); }); @@ -216,10 +216,7 @@ describe("Moves - Destiny Bond", () => { expect(playerPokemon1?.isFainted()).toBe(true); // Pledge secondary effect should still activate - const tagAfter = game.scene.arena.getTagOnSide( - ArenaTagType.GRASS_WATER_PLEDGE, - ArenaTagSide.ENEMY, - ) as EntryHazardTag; + const tagAfter = game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaSide.ENEMY) as EntryHazardTag; expect(tagAfter.tagType).toBe(ArenaTagType.GRASS_WATER_PLEDGE); }); diff --git a/test/moves/entry-hazards.test.ts b/test/moves/entry-hazards.test.ts index af8145183a3..5e9505813f1 100644 --- a/test/moves/entry-hazards.test.ts +++ b/test/moves/entry-hazards.test.ts @@ -2,7 +2,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { allMoves } from "#data/data-lists"; import type { TypeDamageMultiplier } from "#data/type"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleType } from "#enums/battle-type"; import { BattlerIndex } from "#enums/battler-index"; @@ -72,8 +72,8 @@ describe("Moves - Entry Hazards", () => { await game.toNextTurn(); // Tag should've been added to the opposing side of the field - expect(game).not.toHaveArenaTag(tagType, ArenaTagSide.PLAYER); - expect(game).toHaveArenaTag(tagType, ArenaTagSide.ENEMY); + expect(game).not.toHaveArenaTag(tagType, ArenaSide.PLAYER); + expect(game).toHaveArenaTag(tagType, ArenaSide.ENEMY); }); // TODO: re-enable after re-fixing hazards moves @@ -90,7 +90,7 @@ describe("Moves - Entry Hazards", () => { expect(enemy1.isFainted()).toBe(true); expect(enemy2.isFainted()).toBe(true); - expect(game).toHaveArenaTag(tagType, ArenaTagSide.ENEMY); + expect(game).toHaveArenaTag(tagType, ArenaSide.ENEMY); }); const maxLayers = tagType === ArenaTagType.SPIKES ? 3 : tagType === ArenaTagType.TOXIC_SPIKES ? 2 : 1; @@ -110,14 +110,14 @@ describe("Moves - Entry Hazards", () => { await game.toNextTurn(); expect(feebas).toHaveUsedMove({ move, result: MoveResult.SUCCESS }); - expect(game).toHaveArenaTag({ tagType, side: ArenaTagSide.ENEMY, layers: i + 1 }); + expect(game).toHaveArenaTag({ tagType, side: ArenaSide.ENEMY, layers: i + 1 }); } game.move.use(move); await game.toNextTurn(); expect(feebas).toHaveUsedMove({ move, result: MoveResult.FAIL }); - expect(game).toHaveArenaTag({ tagType, side: ArenaTagSide.ENEMY, layers: maxLayers }); + expect(game).toHaveArenaTag({ tagType, side: ArenaSide.ENEMY, layers: maxLayers }); }); }); @@ -128,7 +128,7 @@ describe("Moves - Entry Hazards", () => { { layers: 3, damage: 25 }, ])("should play message and deal $damage% of the target's max HP at $layers", async ({ layers, damage }) => { for (let i = 0; i < layers; i++) { - game.scene.arena.addTag(ArenaTagType.SPIKES, 0, undefined, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.SPIKES, 0, undefined, 0, ArenaSide.ENEMY); } await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.POOCHYENA]); @@ -149,7 +149,7 @@ describe("Moves - Entry Hazards", () => { { name: "Toxic", layers: 2, status: StatusEffect.TOXIC }, ])("should apply $name at $layers without displaying neutralization msg", async ({ layers, status }) => { for (let i = 0; i < layers; i++) { - game.scene.arena.addTag(ArenaTagType.TOXIC_SPIKES, 0, undefined, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.TOXIC_SPIKES, 0, undefined, 0, ArenaSide.ENEMY); } await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.POOCHYENA]); @@ -167,13 +167,13 @@ describe("Moves - Entry Hazards", () => { it("should be removed without triggering upon a grounded Poison-type switching in", async () => { await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.EKANS]); - game.scene.arena.addTag(ArenaTagType.TOXIC_SPIKES, 0, undefined, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.TOXIC_SPIKES, 0, undefined, 0, ArenaSide.ENEMY); game.doSwitchPokemon(1); await game.toNextTurn(); const ekans = game.field.getPlayerPokemon(); - expect(game).not.toHaveArenaTag(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.PLAYER); + expect(game).not.toHaveArenaTag(ArenaTagType.TOXIC_SPIKES, ArenaSide.PLAYER); expect(game.textInterceptor.logs).not.toContain( i18next.t("arenaTag:toxicSpikesActivateTrapPoison", { pokemonNameWithAffix: getPokemonNameWithAffix(ekans), @@ -192,7 +192,7 @@ describe("Moves - Entry Hazards", () => { { multi: 4, species: SpeciesId.DELIBIRD }, ])("should deal damage based on the target's weakness to Rock - $multi", async ({ multi, species }) => { game.override.enemySpecies(species); - game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 0, undefined, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 0, undefined, 0, ArenaSide.ENEMY); await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.EKANS]); const enemy = game.field.getEnemyPokemon(); @@ -207,7 +207,7 @@ describe("Moves - Entry Hazards", () => { it("should ignore strong winds for type effectiveness", async () => { game.override.enemyAbility(AbilityId.DELTA_STREAM).enemySpecies(SpeciesId.RAYQUAZA); - game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 0, undefined, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.STEALTH_ROCK, 0, undefined, 0, ArenaSide.ENEMY); await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.EKANS]); const rayquaza = game.field.getEnemyPokemon(); @@ -218,7 +218,7 @@ describe("Moves - Entry Hazards", () => { describe("Sticky Web", () => { it("should lower the target's speed by 1 stage on entry", async () => { - game.scene.arena.addTag(ArenaTagType.STICKY_WEB, 0, undefined, 0, ArenaTagSide.ENEMY); + game.scene.arena.addTag(ArenaTagType.STICKY_WEB, 0, undefined, 0, ArenaSide.ENEMY); await game.classicMode.startBattle([SpeciesId.MIGHTYENA, SpeciesId.EKANS]); const enemy = game.field.getEnemyPokemon(); diff --git a/test/moves/fairy-lock.test.ts b/test/moves/fairy-lock.test.ts index eba139fee22..ada8d2d5809 100644 --- a/test/moves/fairy-lock.test.ts +++ b/test/moves/fairy-lock.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; @@ -43,8 +43,8 @@ describe("Moves - Fairy Lock", () => { await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); - expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.ENEMY)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaSide.ENEMY)).toBeDefined(); await game.toNextTurn(); @@ -74,8 +74,8 @@ describe("Moves - Fairy Lock", () => { await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); - expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.ENEMY)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaSide.ENEMY)).toBeDefined(); await game.toNextTurn(); @@ -102,8 +102,8 @@ describe("Moves - Fairy Lock", () => { await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); - expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.ENEMY)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaSide.ENEMY)).toBeDefined(); await game.toNextTurn(); game.move.select(MoveId.SPLASH); @@ -129,8 +129,8 @@ describe("Moves - Fairy Lock", () => { await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.move.selectEnemyMove(MoveId.SPLASH, 1); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.PLAYER)).toBeDefined(); - expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaTagSide.ENEMY)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.FAIRY_LOCK, ArenaSide.ENEMY)).toBeDefined(); await game.toNextTurn(); game.move.select(MoveId.SPLASH); diff --git a/test/moves/light-screen.test.ts b/test/moves/light-screen.test.ts index c715229d4a6..5dfc3e07090 100644 --- a/test/moves/light-screen.test.ts +++ b/test/moves/light-screen.test.ts @@ -1,7 +1,7 @@ import type { BattleScene } from "#app/battle-scene"; import { allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; @@ -125,7 +125,7 @@ describe("Moves - Light Screen", () => { */ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) => { const multiplierHolder = new NumberHolder(1); - const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = defender.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY; if (globalScene.arena.getTagOnSide(ArenaTagType.LIGHT_SCREEN, side) && move.getAttrs("CritOnlyAttr").length === 0) { globalScene.arena.applyTagsForSide( diff --git a/test/moves/magic-coat.test.ts b/test/moves/magic-coat.test.ts index 7c1c703119d..4c32de34020 100644 --- a/test/moves/magic-coat.test.ts +++ b/test/moves/magic-coat.test.ts @@ -1,6 +1,6 @@ import { allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -164,8 +164,8 @@ describe("Moves - Magic Coat", () => { game.move.select(MoveId.SPIKES); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); - expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY)).toBeUndefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.PLAYER)!["layers"]).toBe(1); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaSide.ENEMY)).toBeUndefined(); }); it("should not bounce back curse", async () => { diff --git a/test/moves/pledge-moves.test.ts b/test/moves/pledge-moves.test.ts index 34058829d07..7c6c593ab31 100644 --- a/test/moves/pledge-moves.test.ts +++ b/test/moves/pledge-moves.test.ts @@ -1,6 +1,6 @@ import { allAbilities, allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; @@ -129,7 +129,7 @@ describe("Moves - Pledge Moves", () => { const baseDmg = baseDmgMock.mock.results.at(-1)!.value; expect(enemyPokemon[0].getMaxHp() - enemyPokemon[0].hp).toBe(toDmgValue(baseDmg * 1.5)); expect(enemyPokemon[1].hp).toBe(enemyPokemon[1].getMaxHp()); // PLAYER should not have attacked - expect(game.scene.arena.getTagOnSide(ArenaTagType.FIRE_GRASS_PLEDGE, ArenaTagSide.ENEMY)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.FIRE_GRASS_PLEDGE, ArenaSide.ENEMY)).toBeDefined(); const enemyStartingHp = enemyPokemon.map(p => p.hp); await game.toNextTurn(); @@ -160,7 +160,7 @@ describe("Moves - Pledge Moves", () => { expect(playerPokemon[1].getMoveType).toHaveLastReturnedWith(PokemonType.WATER); expect(firePledge.calculateBattlePower).toHaveLastReturnedWith(150); expect(enemyPokemon[1].hp).toBe(enemyPokemon[1].getMaxHp()); // PLAYER should not have attacked - expect(game.scene.arena.getTagOnSide(ArenaTagType.WATER_FIRE_PLEDGE, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.WATER_FIRE_PLEDGE, ArenaSide.PLAYER)).toBeDefined(); await game.toNextTurn(); @@ -198,7 +198,7 @@ describe("Moves - Pledge Moves", () => { expect(waterPledge.calculateBattlePower).toHaveLastReturnedWith(150); expect(enemyPokemon[1].hp).toBe(enemyPokemon[1].getMaxHp()); - expect(game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaTagSide.ENEMY)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaSide.ENEMY)).toBeDefined(); enemyPokemon.forEach((p, i) => expect(p.getEffectiveStat(Stat.SPD)).toBe(Math.floor(enemyStartingSpd[i] / 4))); }); @@ -234,7 +234,7 @@ describe("Moves - Pledge Moves", () => { await game.phaseInterceptor.to("TurnEndPhase"); - expect(game.scene.arena.getTagOnSide(ArenaTagType.WATER_FIRE_PLEDGE, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.WATER_FIRE_PLEDGE, ArenaSide.PLAYER)).toBeDefined(); game.move.select(MoveId.IRON_HEAD, 0, BattlerIndex.ENEMY); game.move.select(MoveId.SPLASH, 1); diff --git a/test/moves/reflect.test.ts b/test/moves/reflect.test.ts index 2d1593fb935..9b42ce2909d 100644 --- a/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -1,7 +1,7 @@ import type { BattleScene } from "#app/battle-scene"; import { allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; @@ -141,7 +141,7 @@ describe("Moves - Reflect", () => { */ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) => { const multiplierHolder = new NumberHolder(1); - const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = defender.isPlayer() ? ArenaSide.PLAYER : ArenaSide.ENEMY; if (globalScene.arena.getTagOnSide(ArenaTagType.REFLECT, side) && move.getAttrs("CritOnlyAttr").length === 0) { globalScene.arena.applyTagsForSide(ArenaTagType.REFLECT, side, false, attacker, move.category, multiplierHolder); diff --git a/test/moves/secret-power.test.ts b/test/moves/secret-power.test.ts index b8f713f59cf..36ae7dffbf8 100644 --- a/test/moves/secret-power.test.ts +++ b/test/moves/secret-power.test.ts @@ -1,6 +1,6 @@ import { allAbilities, allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerIndex } from "#enums/battler-index"; import { BiomeId } from "#enums/biome-id"; @@ -74,7 +74,7 @@ describe("Moves - Secret Power", () => { await game.phaseInterceptor.to("TurnEndPhase"); - let rainbowEffect = game.scene.arena.getTagOnSide(ArenaTagType.WATER_FIRE_PLEDGE, ArenaTagSide.PLAYER); + let rainbowEffect = game.scene.arena.getTagOnSide(ArenaTagType.WATER_FIRE_PLEDGE, ArenaSide.PLAYER); expect(rainbowEffect).toBeDefined(); rainbowEffect = rainbowEffect!; diff --git a/test/moves/substitute.test.ts b/test/moves/substitute.test.ts index 89018a8d592..b3a5a1a907d 100644 --- a/test/moves/substitute.test.ts +++ b/test/moves/substitute.test.ts @@ -1,7 +1,7 @@ import { SubstituteTag, TrappedTag } from "#data/battler-tags"; import { allMoves } from "#data/data-lists"; import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#enums/battler-tag-type"; @@ -189,7 +189,7 @@ describe("Moves - Substitute", () => { await game.toNextTurn(); expect(leadPokemon.getMoveEffectiveness).not.toHaveReturnedWith(0); - expect(game.scene.arena.getTagOnSide(ArenaTagType.LIGHT_SCREEN, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.LIGHT_SCREEN, ArenaSide.PLAYER)).toBeDefined(); }); it("shouldn't block the opponent from setting hazards", async () => { @@ -205,7 +205,7 @@ describe("Moves - Substitute", () => { await game.toNextTurn(); expect(leadPokemon.getMoveEffectiveness).not.toHaveReturnedWith(0); - expect(game.scene.arena.getTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.STEALTH_ROCK, ArenaSide.PLAYER)).toBeDefined(); }); it("shouldn't block moves that target both sides of the field", async () => { diff --git a/test/moves/tailwind.test.ts b/test/moves/tailwind.test.ts index d9a0bdeb5f1..99455d33003 100644 --- a/test/moves/tailwind.test.ts +++ b/test/moves/tailwind.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; @@ -49,7 +49,7 @@ describe("Moves - Tailwind", () => { expect(magikarp.getEffectiveStat(Stat.SPD)).toBe(magikarpSpd * 2); expect(meowth.getEffectiveStat(Stat.SPD)).toBe(meowthSpd * 2); - expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaSide.PLAYER)).toBeDefined(); }); it("lasts for 4 turns", async () => { @@ -59,20 +59,20 @@ describe("Moves - Tailwind", () => { game.move.select(MoveId.TAILWIND); await game.toNextTurn(); - expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaSide.PLAYER)).toBeDefined(); game.move.select(MoveId.SPLASH); await game.toNextTurn(); - expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaSide.PLAYER)).toBeDefined(); game.move.select(MoveId.SPLASH); await game.toNextTurn(); - expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaSide.PLAYER)).toBeDefined(); game.move.select(MoveId.SPLASH); await game.toNextTurn(); - expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeUndefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaSide.PLAYER)).toBeUndefined(); }); it("does not affect the opposing side", async () => { @@ -88,8 +88,8 @@ describe("Moves - Tailwind", () => { expect(ally.getEffectiveStat(Stat.SPD)).equal(allySpd); expect(enemy.getEffectiveStat(Stat.SPD)).equal(enemySpd); - expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeUndefined(); - expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.ENEMY)).toBeUndefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaSide.PLAYER)).toBeUndefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaSide.ENEMY)).toBeUndefined(); game.move.select(MoveId.TAILWIND); @@ -97,7 +97,7 @@ describe("Moves - Tailwind", () => { expect(ally.getEffectiveStat(Stat.SPD)).toBe(allySpd * 2); expect(enemy.getEffectiveStat(Stat.SPD)).equal(enemySpd); - expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)).toBeDefined(); - expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.ENEMY)).toBeUndefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaSide.PLAYER)).toBeDefined(); + expect(game.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaSide.ENEMY)).toBeUndefined(); }); }); diff --git a/test/moves/trick-room.test.ts b/test/moves/trick-room.test.ts index d970dc9762d..66f07281006 100644 --- a/test/moves/trick-room.test.ts +++ b/test/moves/trick-room.test.ts @@ -1,5 +1,5 @@ import { AbilityId } from "#enums/ability-id"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; @@ -50,7 +50,7 @@ describe("Move - Trick Room", () => { expect(game).toHaveArenaTag({ tagType: ArenaTagType.TRICK_ROOM, - side: ArenaTagSide.BOTH, + side: ArenaSide.BOTH, sourceId: feebas.id, sourceMove: MoveId.TRICK_ROOM, turnCount: 4, // The 5 turn limit _includes_ the current turn! diff --git a/test/test-utils/matchers/to-have-arena-tag.ts b/test/test-utils/matchers/to-have-arena-tag.ts index a9d619686d1..a2f7c79aecb 100644 --- a/test/test-utils/matchers/to-have-arena-tag.ts +++ b/test/test-utils/matchers/to-have-arena-tag.ts @@ -1,5 +1,5 @@ import type { ArenaTag, ArenaTagTypeMap } from "#data/arena-tag"; -import { ArenaTagSide } from "#enums/arena-tag-side"; +import { ArenaSide } from "#enums/arena-side"; import type { ArenaTagType } from "#enums/arena-tag-type"; import type { OneOther } from "#test/@types/test-helpers"; // biome-ignore lint/correctness/noUnusedImports: TSDoc @@ -28,15 +28,15 @@ export type toHaveArenaTagOptions = OneOther< * @param received - The object to check. Should be the current {@linkcode GameManager}. * @param expectedTag - The `ArenaTagType` of the desired tag, or a partially-filled object * containing the desired properties - * @param side - The {@linkcode ArenaTagSide | side of the field} the tag should affect, or - * {@linkcode ArenaTagSide.BOTH} to check both sides + * @param side - The {@linkcode ArenaSide | side of the field} the tag should affect, or + * {@linkcode ArenaSide.BOTH} to check both sides * @returns The result of the matching */ export function toHaveArenaTag( this: MatcherState, received: unknown, expectedTag: A | toHaveArenaTagOptions, - side: ArenaTagSide = ArenaTagSide.BOTH, + side: ArenaSide = ArenaSide.BOTH, ): SyncExpectationResult { if (!isGameManagerInstance(received)) { return { @@ -55,7 +55,7 @@ export function toHaveArenaTag( // Coerce lone `tagType`s into objects // Bangs are ok as we enforce safety via overloads // @ts-expect-error - Typescript is being stupid as tag type and side will always exist - const etag: Partial & { tagType: T; side: ArenaTagSide } = + const etag: Partial & { tagType: T; side: ArenaSide } = typeof expectedTag === "object" ? expectedTag : { tagType: expectedTag, side }; // If checking only tag type/side OR no tags were found, break out early.