Spaces:
Sleeping
Sleeping
export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { | |
tox: { | |
inherit: true, | |
onResidual(pokemon) { | |
if (this.effectState.stage < 15) { | |
this.effectState.stage++; | |
} | |
const calc = calculate(this, this.effectState.source, pokemon); | |
this.damage(calc * this.clampIntRange(pokemon.baseMaxhp / 16, 1) * this.effectState.stage); | |
}, | |
}, | |
brn: { | |
inherit: true, | |
onResidual(pokemon) { | |
const calc = calculate(this, this.effectState.source, pokemon); | |
this.damage(calc * pokemon.baseMaxhp / 16); | |
}, | |
}, | |
psn: { | |
inherit: true, | |
onResidual(pokemon) { | |
const calc = calculate(this, this.effectState.source, pokemon); | |
this.damage(calc * pokemon.baseMaxhp / 8); | |
}, | |
}, | |
partiallytrapped: { | |
inherit: true, | |
onResidual(pokemon) { | |
const source = this.effectState.source; | |
// G-Max Centiferno and G-Max Sandblast continue even after the user leaves the field | |
const gmaxEffect = ['gmaxcentiferno', 'gmaxsandblast'].includes(this.effectState.sourceEffect.id); | |
if (source && (!source.isActive || source.hp <= 0 || !source.activeTurns) && !gmaxEffect) { | |
delete pokemon.volatiles['partiallytrapped']; | |
this.add('-end', pokemon, this.effectState.sourceEffect, '[partiallytrapped]', '[silent]'); | |
return; | |
} | |
const calc = calculate(this, source, pokemon); | |
this.damage(calc * pokemon.baseMaxhp / this.effectState.boundDivisor); | |
}, | |
}, | |
sandstorm: { | |
inherit: true, | |
onWeather(target) { | |
const calc = calculate(this, this.effectState.source, target); | |
this.damage(calc * target.baseMaxhp / 16); | |
}, | |
}, | |
}; | |
function calculate(battle: Battle, source: Pokemon, pokemon: Pokemon) { | |
const move = battle.dex.getActiveMove('tackle'); | |
move.type = source.getTypes()[0]; | |
const typeMod = 2 ** battle.clampIntRange(pokemon.runEffectiveness(move), -6, 6); | |
if (!pokemon.runImmunity(move.type)) return 0; | |
return typeMod; | |
} | |