Spaces:
Running
Running
export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = { | |
brn: { | |
inherit: true, | |
onResidualOrder: 10, | |
onResidualSubOrder: 6, | |
}, | |
par: { | |
inherit: true, | |
onModifySpe(spe, pokemon) { | |
if (!pokemon.hasAbility('quickfeet')) { | |
return this.chainModify(0.25); | |
} | |
return spe; | |
}, | |
onBeforeMove(pokemon) { | |
if (!pokemon.hasAbility('magicguard') && this.randomChance(1, 4)) { | |
this.add('cant', pokemon, 'par'); | |
return false; | |
} | |
}, | |
}, | |
slp: { | |
name: 'slp', | |
effectType: 'Status', | |
onStart(target, source, sourceEffect) { | |
if (sourceEffect && sourceEffect.effectType === 'Move') { | |
this.add('-status', target, 'slp', `[from] move: ${sourceEffect.name}`); | |
} else { | |
this.add('-status', target, 'slp'); | |
} | |
// 1-4 turns | |
this.effectState.time = this.random(2, 6); | |
if (target.removeVolatile('nightmare')) { | |
this.add('-end', target, 'Nightmare', '[silent]'); | |
} | |
}, | |
onBeforeMovePriority: 10, | |
onBeforeMove(pokemon, target, move) { | |
if (pokemon.hasAbility('earlybird')) { | |
pokemon.statusState.time--; | |
} | |
pokemon.statusState.time--; | |
if (pokemon.statusState.time <= 0) { | |
pokemon.cureStatus(); | |
return; | |
} | |
this.add('cant', pokemon, 'slp'); | |
if (move.sleepUsable) { | |
return; | |
} | |
return false; | |
}, | |
}, | |
psn: { | |
inherit: true, | |
onResidualOrder: 10, | |
onResidualSubOrder: 6, | |
}, | |
tox: { | |
inherit: true, | |
onResidualOrder: 10, | |
onResidualSubOrder: 6, | |
}, | |
confusion: { | |
inherit: true, | |
onBeforeMove(pokemon) { | |
pokemon.volatiles['confusion'].time--; | |
if (!pokemon.volatiles['confusion'].time) { | |
pokemon.removeVolatile('confusion'); | |
return; | |
} | |
this.add('-activate', pokemon, 'confusion'); | |
if (this.randomChance(1, 2)) { | |
return; | |
} | |
const damage = this.actions.getDamage(pokemon, pokemon, 40); | |
if (typeof damage !== 'number') throw new Error("Confusion damage not dealt"); | |
this.damage(damage, pokemon, pokemon, { | |
id: 'confused', | |
effectType: 'Move', | |
type: '???', | |
} as ActiveMove); | |
return false; | |
}, | |
}, | |
frz: { | |
inherit: true, | |
onBeforeMove(pokemon, target, move) { | |
if (this.randomChance(1, 5)) { | |
pokemon.cureStatus(); | |
return; | |
} | |
if (move.flags['defrost']) return; | |
this.add('cant', pokemon, 'frz'); | |
return false; | |
}, | |
}, | |
substitutebroken: { | |
noCopy: true, | |
}, | |
trapped: { | |
inherit: true, | |
noCopy: false, | |
}, | |
trapper: { | |
inherit: true, | |
noCopy: false, | |
}, | |
partiallytrapped: { | |
inherit: true, | |
durationCallback(target, source) { | |
if (source.hasItem('gripclaw')) return 6; | |
return this.random(3, 7); | |
}, | |
onResidualOrder: 10, | |
onResidualSubOrder: 9, | |
}, | |
choicelock: { | |
inherit: true, | |
onStart(pokemon) { | |
if (!pokemon.lastMove) return false; | |
this.effectState.move = pokemon.lastMove.id; | |
}, | |
}, | |
futuremove: { | |
inherit: true, | |
onResidualOrder: 11, | |
}, | |
stall: { | |
// In gen 3-4, the chance of protect succeeding does not fall below 1/8. | |
// See http://upokecenter.dreamhosters.com/dex/?lang=en&move=182 | |
inherit: true, | |
counterMax: 8, | |
}, | |
raindance: { | |
inherit: true, | |
onFieldResidualOrder: 8, | |
}, | |
sunnyday: { | |
inherit: true, | |
onFieldResidualOrder: 8, | |
}, | |
sandstorm: { | |
inherit: true, | |
onFieldResidualOrder: 8, | |
}, | |
hail: { | |
inherit: true, | |
onFieldResidualOrder: 8, | |
}, | |
// Arceus's true typing for all its formes is Normal, and it's only Multitype | |
// that changes its type, but its formes are specified to be their corresponding | |
// type in the Pokedex, so that needs to be overridden. Without Multitype it | |
// starts as Normal type, but its type can be changed by other effects. | |
// This is mainly relevant for Hackmons Cup and Balanced Hackmons. | |
arceus: { | |
name: 'Arceus', | |
onBeforeSwitchIn(pokemon) { | |
pokemon.setType('Normal'); // Multitype will prevent this | |
}, | |
onSwitchIn(pokemon) { | |
if (pokemon.ability === 'multitype') { | |
const item = pokemon.getItem(); | |
const targetForme = (item?.onPlate ? 'Arceus-' + item.onPlate : 'Arceus'); | |
if (pokemon.species.name !== targetForme) { | |
pokemon.formeChange(targetForme); | |
} | |
} | |
}, | |
}, | |
}; | |