183 lines
3.9 KiB
YAML
183 lines
3.9 KiB
YAML
brn:
|
|
name: 'brn'
|
|
id: 'brn'
|
|
num: 0
|
|
effectType: 'Status'
|
|
onModifyStat: |
|
|
if (stat == PAtk) {
|
|
1 \\ 2
|
|
} else {
|
|
1.frac
|
|
}
|
|
onStart: |
|
|
msg(s"${mon} was burned!")
|
|
onEnd: |
|
|
msg(s"${mon} was healed of its burn.")
|
|
onResidualOrder: 9
|
|
onResidual: |
|
|
mon.takeDamage(mon(Hp) / 16);
|
|
msg(s"${mon} was hurt by its burn!")
|
|
|
|
confusion:
|
|
id: confusion
|
|
name: confusion
|
|
num: 0
|
|
onBeforeMove: |-
|
|
self.intData("time") -= 1
|
|
if (self.intData("time") <= 0) {
|
|
mon -= self
|
|
true
|
|
} else {
|
|
msg(s"${mon} is confused!")
|
|
if (rng.chance(1, 3)) {
|
|
// confusion damage
|
|
val maxDmg = (2 * mon.level / 5 + 2) * 40 * mon(PAtk) / (mon(PDef) * 50) + 2
|
|
val minDmg = (17 \\ 20) * maxDmg
|
|
val dmg = rng.nextInt(minDmg, maxDmg)
|
|
msg(s"${mon} hurt itself in its confusion.")
|
|
mon.takeDamage(dmg)
|
|
false
|
|
} else {
|
|
true
|
|
}
|
|
}
|
|
/*
|
|
this.activeTarget = mon;
|
|
let damage = this.getDamage(mon, mon, 40);
|
|
if (typeof damage !== 'number') throw new Error('Confusion damage not dealt');
|
|
mon.takeDamage(damage, mon, mon, /** @type {ActiveMove} */ ({
|
|
'id': 'confused',
|
|
'effectType': 'Move',
|
|
'type': '???'
|
|
}));
|
|
*/
|
|
onBeforeMovePriority: 3
|
|
onEnd: msg(s"${mon} snapped out of its confusion.")
|
|
onStart: |-
|
|
msg(s"${mon} was confused!")
|
|
self.intData("time") = rng.nextInt(2, 6);
|
|
|
|
par:
|
|
name: 'par'
|
|
id: 'par'
|
|
num: 0
|
|
effectType: 'Status'
|
|
onStart: |
|
|
msg(s"${mon} was paralyzed!")
|
|
onEnd: |
|
|
msg(s"${mon} is no longer paralyzed!")
|
|
onModifyStat: |
|
|
if (stat == Speed /* && !mon.hasAbility('quickfeet') */) {
|
|
1 \\ 2
|
|
} else {
|
|
1.frac
|
|
}
|
|
onBeforeMovePriority: 1
|
|
onBeforeMove: |
|
|
if (rng.chance(1, 4)) {
|
|
msg(s"${mon} is fully paralyzed!")
|
|
false
|
|
} else {
|
|
true
|
|
}
|
|
|
|
slp:
|
|
name: 'slp'
|
|
id: 'slp'
|
|
num: 0
|
|
effectType: 'Status'
|
|
onStart: |
|
|
msg(s"${mon} fell asleep!")
|
|
// 1-3 turns
|
|
self.intData("startTime") = rng.nextInt(2, 5)
|
|
self.intData("time") = self.intData("startTime")
|
|
onEnd: |
|
|
msg(s"${mon} woke up!")
|
|
onBeforeMovePriority: 10
|
|
onBeforeMove: |
|
|
/*
|
|
if (mon.hasAbility('earlybird')) {
|
|
this.intData.time--;
|
|
}
|
|
*/
|
|
self.intData("time") -= 1;
|
|
if (self.intData("time") <= 0) {
|
|
mon.cureStatus();
|
|
true
|
|
} else {
|
|
msg(s"${mon} is fast asleep.")
|
|
!move.flags("sleepUsable")
|
|
}
|
|
|
|
flinch:
|
|
duration: 1
|
|
id: flinch
|
|
name: flinch
|
|
num: 0
|
|
onBeforeMove: |-
|
|
msg(s"${mon} flinched!")
|
|
false
|
|
onBeforeMovePriority: 8
|
|
onResidualOrder: 13
|
|
onResidual: |
|
|
mon -= self
|
|
|
|
frz:
|
|
name: 'frz'
|
|
effectType: Status
|
|
id: frz
|
|
num: 0
|
|
onBeforeMove: |-
|
|
if (move.flags("defrost") || rng.chance(1, 5)) {
|
|
mon.cureStatus()
|
|
true
|
|
} else {
|
|
msg(s"${mon} is completely frozen!")
|
|
false
|
|
}
|
|
onBeforeMovePriority: 10
|
|
onHit: |-
|
|
if (move.flags("thaws") || move.element === 'Fire' && move.category !== MoveType.Status) {
|
|
target.cureStatus()
|
|
}
|
|
onStart: |-
|
|
msg(s"${mon} was frozen solid!")
|
|
onEnd: |-
|
|
msg(s"${mon} thawed out.")
|
|
onModifyMove: |
|
|
if (move.flags("defrost")) {
|
|
mon.cureStatus()
|
|
}
|
|
|
|
psn:
|
|
name: 'psn'
|
|
id: 'psn'
|
|
num: 0
|
|
effectType: 'Status'
|
|
onStart: |
|
|
msg(s"${mon} was poisoned!")
|
|
oneEnd: |
|
|
msg(s"${mon} was cured of its poison.")
|
|
onResidualOrder: 9
|
|
onResidual: |
|
|
mon.takeDamage(mon(Hp) / 8);
|
|
msg(s"${mon} was damaged by poison!")
|
|
|
|
tox:
|
|
name: 'tox'
|
|
id: 'tox'
|
|
num: 0
|
|
effectType: 'Status'
|
|
onStart: |
|
|
msg(s"${mon} was baddly poisoned!")
|
|
self.intData("stage") = 0;
|
|
onSwitchIn: |
|
|
this.effectData.stage = 0;
|
|
onResidualOrder: 9
|
|
onResidual: |
|
|
if (self.intData("stage") < 15) {
|
|
self.intData("stage") += 1
|
|
}
|
|
mon.takeDamage(self.intData("stage") \\ 16 * mon(Hp));
|
|
msg(s"${mon} was damaged by poison!")
|