diff --git a/src/data/berry.ts b/src/data/berry.ts index e832ab0a43e..7c5ce477a95 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -94,12 +94,9 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { } if (pokemon.status) { pokemon.scene.queueMessage(getPokemonMessage(pokemon, getStatusEffectHealText(pokemon.status.effect))); - pokemon.resetStatus(); - pokemon.updateInfo(); - } - if (pokemon.getTag(BattlerTagType.CONFUSED)) { - pokemon.lapseTag(BattlerTagType.CONFUSED); } + pokemon.resetStatus(true, true); + pokemon.updateInfo(); }; case BerryType.LIECHI: case BerryType.GANLON: diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 2ff53249aeb..e7fce386ddb 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2426,9 +2426,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** * Resets the status of a pokemon - * @param revive whether revive should be cured, defaults to true + * @param {boolean} revive Whether revive should be cured; defaults to true. + * @param {boolean} confusion Whether resetStatus should include confusion or not; defaults to false. */ - resetStatus(revive: boolean = true): void { + resetStatus(revive: boolean = true, confusion: boolean = false): void { const lastStatus = this.status?.effect; if (!revive && lastStatus === StatusEffect.FAINT) { return; @@ -2440,6 +2441,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.lapseTag(BattlerTagType.NIGHTMARE); } } + if (confusion) { + if (this.getTag(BattlerTagType.CONFUSED)) { + this.lapseTag(BattlerTagType.CONFUSED); + } + } } primeSummonData(summonDataPrimer: PokemonSummonData): void { diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index a26c8f634f7..a9f5e3642cf 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -21,6 +21,7 @@ import { ModifierTier } from "./modifier-tier"; import { Nature, getNatureName, getNatureStatMultiplier } from "#app/data/nature"; import i18next from "#app/plugins/i18n"; import { getModifierTierTextTint } from "#app/ui/text"; +import { BattlerTagType } from "#app/data/enums/battler-tag-type.js"; const outputModifierData = false; const useMaxWeightForOutput = false; @@ -230,7 +231,7 @@ export class PokemonHpRestoreModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string, restorePoints: integer, restorePercent: integer, healStatus: boolean = false, newModifierFunc?: NewModifierFunc, selectFilter?: PokemonSelectFilter, group?: string) { super(localeKey, iconImage, newModifierFunc || ((_type, args) => new Modifiers.PokemonHpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints, this.restorePercent, this.healStatus, false)), selectFilter || ((pokemon: PlayerPokemon) => { - if (!pokemon.hp || (pokemon.hp >= pokemon.getMaxHp() && (!this.healStatus || !pokemon.status))) { + if (!pokemon.hp || (pokemon.hp >= pokemon.getMaxHp() && (!this.healStatus || (!pokemon.status && !pokemon.getTag(BattlerTagType.CONFUSED))))) { return PartyUiHandler.NoEffectMessage; } return null; @@ -280,7 +281,7 @@ export class PokemonStatusHealModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string) { super(localeKey, iconImage, ((_type, args) => new Modifiers.PokemonStatusHealModifier(this, (args[0] as PlayerPokemon).id)), ((pokemon: PlayerPokemon) => { - if (!pokemon.hp || !pokemon.status) { + if (!pokemon.hp || (!pokemon.status && !pokemon.getTag(BattlerTagType.CONFUSED))) { return PartyUiHandler.NoEffectMessage; } return null; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 9035eeda9dd..379543f0ab2 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1057,16 +1057,14 @@ export class PokemonHpRestoreModifier extends ConsumablePokemonModifier { let restorePoints = this.restorePoints; if (!this.fainted) { restorePoints = Math.floor(restorePoints * (args[1] as number)); + if (this.fainted || this.healStatus) { + pokemon.resetStatus(true, true); + } + pokemon.hp = Math.min(pokemon.hp + Math.max(Math.ceil(Math.max(Math.floor((this.restorePercent * 0.01) * pokemon.getMaxHp()), restorePoints)), 1), pokemon.getMaxHp()); + return true; } - if (this.fainted || this.healStatus) { - pokemon.resetStatus(); - } - pokemon.hp = Math.min(pokemon.hp + Math.max(Math.ceil(Math.max(Math.floor((this.restorePercent * 0.01) * pokemon.getMaxHp()), restorePoints)), 1), pokemon.getMaxHp()); - - return true; + return false; } - - return false; } } @@ -1077,8 +1075,7 @@ export class PokemonStatusHealModifier extends ConsumablePokemonModifier { apply(args: any[]): boolean { const pokemon = args[0] as Pokemon; - pokemon.resetStatus(); - + pokemon.resetStatus(true, true); return true; } }