diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 35007dc8964..779b63971e9 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -73,7 +73,6 @@ import { PokemonHeldItemModifier, PokemonMoveAccuracyBoosterModifier, PokemonMultiHitModifier, - PreserveBerryModifier, } from "../../modifier/held-item-modifier"; import type { BattlerIndex } from "../../battle"; import { BattleType } from "#enums/battle-type"; @@ -123,6 +122,7 @@ import { MoveEffectTrigger } from "#enums/MoveEffectTrigger"; import { MultiHitType } from "#enums/MultiHitType"; import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidMirrorMoveMoves, invalidSleepTalkMoves } from "./invalid-moves"; import { SelectBiomePhase } from "#app/phases/select-biome-phase"; +import { PreserveBerryModifier } from "#app/modifier/modifier"; type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean; type UserMoveConditionFunc = (user: Pokemon, move: Move) => boolean; diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index 9c5ffb3faae..5882df947c2 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -23,9 +23,13 @@ import { BerryModifier, type PokemonHeldItemModifier, type PokemonInstantReviveModifier, - PreserveBerryModifier, } from "#app/modifier/held-item-modifier"; -import { HealingBoosterModifier, LevelIncrementBoosterModifier, MoneyMultiplierModifier } from "#app/modifier/modifier"; +import { + HealingBoosterModifier, + LevelIncrementBoosterModifier, + MoneyMultiplierModifier, + PreserveBerryModifier, +} from "#app/modifier/modifier"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; diff --git a/src/modifier/held-item-modifier.ts b/src/modifier/held-item-modifier.ts index e496dbe7116..1313fea8b12 100644 --- a/src/modifier/held-item-modifier.ts +++ b/src/modifier/held-item-modifier.ts @@ -28,6 +28,7 @@ import { type Modifier, MoneyMultiplierModifier, PersistentModifier, + PreserveBerryModifier, TempExtraModifierModifier, } from "./modifier"; import { @@ -1252,42 +1253,6 @@ export class BerryModifier extends PokemonHeldItemModifier { } } -export class PreserveBerryModifier extends PersistentModifier { - match(modifier: Modifier) { - return modifier instanceof PreserveBerryModifier; - } - - clone() { - return new PreserveBerryModifier(this.type, this.stackCount); - } - - /** - * Checks if all prequired conditions are met to apply {@linkcode PreserveBerryModifier} - * @param pokemon {@linkcode Pokemon} that holds the berry - * @param doPreserve {@linkcode BooleanHolder} that is `true` if the berry should be preserved - * @returns `true` if {@linkcode PreserveBerryModifier} should be applied - */ - override shouldApply(pokemon?: Pokemon, doPreserve?: BooleanHolder): boolean { - return !!pokemon && !!doPreserve; - } - - /** - * Applies {@linkcode PreserveBerryModifier} - * @param pokemon The {@linkcode Pokemon} that holds the berry - * @param doPreserve {@linkcode BooleanHolder} that is `true` if the berry should be preserved - * @returns always `true` - */ - override apply(pokemon: Pokemon, doPreserve: BooleanHolder): boolean { - doPreserve.value ||= pokemon.randBattleSeedInt(10) < this.getStackCount() * 3; - - return true; - } - - getMaxStackCount(): number { - return 3; - } -} - export class PokemonInstantReviveModifier extends PokemonHeldItemModifier { matchType(modifier: Modifier) { return modifier instanceof PokemonInstantReviveModifier; diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index b9809ec8996..7b09b1ca679 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -65,6 +65,7 @@ import { type Modifier, TempExtraModifierModifier, CriticalCatchChanceBoosterModifier, + PreserveBerryModifier, } from "#app/modifier/modifier"; import { AttackTypeBoosterModifier, @@ -89,7 +90,6 @@ import { PokemonMoveAccuracyBoosterModifier, PokemonMultiHitModifier, PokemonNatureWeightModifier, - PreserveBerryModifier, ResetNegativeStatStageModifier, SpeciesCritBoosterModifier, SpeciesStatBoosterModifier, diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 1211ebcd81d..e9dc87c939d 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1281,6 +1281,42 @@ export class CriticalCatchChanceBoosterModifier extends PersistentModifier { } } +export class PreserveBerryModifier extends PersistentModifier { + match(modifier: Modifier) { + return modifier instanceof PreserveBerryModifier; + } + + clone() { + return new PreserveBerryModifier(this.type, this.stackCount); + } + + /** + * Checks if all prequired conditions are met to apply {@linkcode PreserveBerryModifier} + * @param pokemon {@linkcode Pokemon} that holds the berry + * @param doPreserve {@linkcode BooleanHolder} that is `true` if the berry should be preserved + * @returns `true` if {@linkcode PreserveBerryModifier} should be applied + */ + override shouldApply(pokemon?: Pokemon, doPreserve?: BooleanHolder): boolean { + return !!pokemon && !!doPreserve; + } + + /** + * Applies {@linkcode PreserveBerryModifier} + * @param pokemon The {@linkcode Pokemon} that holds the berry + * @param doPreserve {@linkcode BooleanHolder} that is `true` if the berry should be preserved + * @returns always `true` + */ + override apply(pokemon: Pokemon, doPreserve: BooleanHolder): boolean { + doPreserve.value ||= pokemon.randBattleSeedInt(10) < this.getStackCount() * 3; + + return true; + } + + getMaxStackCount(): number { + return 3; + } +} + export class LockModifierTiersModifier extends PersistentModifier { match(modifier: Modifier): boolean { return modifier instanceof LockModifierTiersModifier; diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index de510ef07d7..6ebb408fdef 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -5,7 +5,7 @@ import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; -import { BypassSpeedChanceModifier } from "#app/modifier/modifier"; +import { BypassSpeedChanceModifier } from "#app/modifier/held-item-modifier"; import { Command } from "#app/ui/command-ui-handler"; import { randSeedShuffle, BooleanHolder } from "#app/utils/common"; import { AttemptCapturePhase } from "./attempt-capture-phase"; diff --git a/src/system/achv.ts b/src/system/achv.ts index 90816ff65c3..97f41835be6 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -1,5 +1,5 @@ import type { Modifier } from "typescript"; -import { TurnHeldItemTransferModifier } from "../modifier/modifier"; +import { TurnHeldItemTransferModifier } from "../modifier/held-item-modifier"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import i18next from "i18next"; import { NumberHolder } from "#app/utils/common"; diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index 7b4d46203c9..122b1b6c2db 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -12,6 +12,7 @@ import { TextStyle, addTextObject } from "./text"; import { UiMode } from "#enums/ui-mode"; import { addWindow } from "./ui-theme"; import { RunDisplayMode } from "#app/ui/run-info-ui-handler"; +import { PokemonHeldItemModifier } from "#app/modifier/held-item-modifier"; const SESSION_SLOTS_COUNT = 5; const SLOTS_ON_SCREEN = 3; @@ -445,7 +446,7 @@ class SessionSlot extends Phaser.GameObjects.Container { let visibleModifierIndex = 0; for (const m of data.modifiers) { const modifier = m.toModifier(Modifier[m.className]); - if (modifier instanceof Modifier.PokemonHeldItemModifier) { + if (modifier instanceof PokemonHeldItemModifier) { continue; } const icon = modifier?.getIcon(false); diff --git a/test/abilities/harvest.test.ts b/test/abilities/harvest.test.ts index eef954c28e8..6fccae01609 100644 --- a/test/abilities/harvest.test.ts +++ b/test/abilities/harvest.test.ts @@ -1,7 +1,8 @@ import { BattlerIndex } from "#app/battle"; import { PostTurnRestoreBerryAbAttr } from "#app/data/abilities/ability"; import type Pokemon from "#app/field/pokemon"; -import { BerryModifier, PreserveBerryModifier } from "#app/modifier/held-item-modifier"; +import { BerryModifier } from "#app/modifier/held-item-modifier"; +import { PreserveBerryModifier } from "#app/modifier/modifier"; import type { ModifierOverride } from "#app/modifier/modifier-type"; import type { BooleanHolder } from "#app/utils/common"; import { Abilities } from "#enums/abilities"; diff --git a/test/achievements/achievement.test.ts b/test/achievements/achievement.test.ts index 0b49c4d23ab..22c4d670e6f 100644 --- a/test/achievements/achievement.test.ts +++ b/test/achievements/achievement.test.ts @@ -1,4 +1,4 @@ -import { TurnHeldItemTransferModifier } from "#app/modifier/modifier"; +import { TurnHeldItemTransferModifier } from "#app/modifier/held-item-modifier"; import { Achv, AchvTier, diff --git a/test/final_boss.test.ts b/test/final_boss.test.ts index 1b0cdce60a0..e19e85149fd 100644 --- a/test/final_boss.test.ts +++ b/test/final_boss.test.ts @@ -1,5 +1,5 @@ import { GameModes } from "#app/game-mode"; -import { TurnHeldItemTransferModifier } from "#app/modifier/modifier"; +import { TurnHeldItemTransferModifier } from "#app/modifier/held-item-modifier"; import { Abilities } from "#enums/abilities"; import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; diff --git a/test/items/eviolite.test.ts b/test/items/eviolite.test.ts index fafc0f4a10c..e9e9574cbf3 100644 --- a/test/items/eviolite.test.ts +++ b/test/items/eviolite.test.ts @@ -1,4 +1,4 @@ -import { StatBoosterModifier } from "#app/modifier/modifier"; +import { StatBoosterModifier } from "#app/modifier/held-item-modifier"; import { NumberHolder, randItem } from "#app/utils/common"; import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; diff --git a/test/items/exp_booster.test.ts b/test/items/exp_booster.test.ts index ec7528c3b23..16ac3c0490f 100644 --- a/test/items/exp_booster.test.ts +++ b/test/items/exp_booster.test.ts @@ -1,5 +1,5 @@ import { Abilities } from "#app/enums/abilities"; -import { PokemonExpBoosterModifier } from "#app/modifier/modifier"; +import { PokemonExpBoosterModifier } from "#app/modifier/held-item-modifier"; import { NumberHolder } from "#app/utils/common"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; diff --git a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts index 12eaeac869e..6c61f4b6a39 100644 --- a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts +++ b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts @@ -19,13 +19,17 @@ import { HitHealModifier, PokemonInstantReviveModifier, PokemonNatureWeightModifier, - PreserveBerryModifier, } from "#app/modifier/held-item-modifier"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { generateModifierType } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { modifierTypes } from "#app/modifier/modifier-type"; import { BerryType } from "#enums/berry-type"; -import { HealingBoosterModifier, LevelIncrementBoosterModifier, MoneyMultiplierModifier } from "#app/modifier/modifier"; +import { + HealingBoosterModifier, + LevelIncrementBoosterModifier, + MoneyMultiplierModifier, + PreserveBerryModifier, +} from "#app/modifier/modifier"; const namespace = "mysteryEncounters/delibirdy"; const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA];