/** * Pokemon Showdown Move Animations * * Licensing note: PS's client has complicated licensing: * - The client as a whole is AGPLv3 * - The battle replay/animation engine (battle-*.ts) by itself is MIT * * @author Guangcong Luo * @license CC0-1.0 */ import { type AnimTable, BattleOtherAnims } from './battle-animations'; import { Config } from './client-main'; export const BattleMoveAnims: AnimTable = { taunt: { anim(scene, [attacker, defender]) { BattleOtherAnims.dance.anim(scene, [attacker, defender]); scene.showEffect('pointer', { x: attacker.x + 50, y: attacker.y + 30, z: attacker.z, scale: 0.4, opacity: 1, }, { x: attacker.x + 30, y: attacker.y + 35, scale: 0.5, xscale: 0.3, yscale: 0.6, opacity: 1, time: 400, }, 'decel', 'fade'); scene.showEffect('pointer', { x: attacker.x + 30, y: attacker.y + 35, z: attacker.z, scale: 0.5, xscale: 0.3, yscale: 0.6, opacity: 1, time: 400, }, { x: attacker.x + 60, y: attacker.y + 30, scale: 0.4, xscale: 0.4, yscale: 0.4, opacity: 0, time: 900, }, 'linear'); scene.showEffect('angry', { x: defender.x + 20, y: defender.y + 20, z: defender.z, scale: 0.5, opacity: 0.5, time: 200, }, { scale: 1, opacity: 1, time: 500, }, 'ballistic2Under', 'fade'); scene.showEffect('angry', { x: defender.x - 20, y: defender.y + 10, z: defender.z, scale: 0.5, opacity: 0.5, time: 300, }, { scale: 1, opacity: 1, time: 600, }, 'ballistic2Under', 'fade'); scene.showEffect('angry', { x: defender.x, y: defender.y + 40, z: defender.z, scale: 0.5, opacity: 0.5, time: 400, }, { scale: 1, opacity: 1, time: 700, }, 'ballistic2Under', 'fade'); }, }, instruct: { anim(scene, [attacker, defender]) { BattleOtherAnims.dance.anim(scene, [attacker, defender]); scene.showEffect('pointer', { x: attacker.x + 50, y: attacker.y + 30, z: attacker.z, scale: 0.4, opacity: 1, }, { x: attacker.x + 30, y: attacker.y + 35, scale: 0.5, xscale: 0.3, yscale: 0.6, opacity: 1, time: 400, }, 'decel', 'fade'); scene.showEffect('pointer', { x: attacker.x + 30, y: attacker.y + 35, z: attacker.z, scale: 0.5, xscale: 0.3, yscale: 0.6, opacity: 1, time: 400, }, { x: attacker.x + 60, y: attacker.y + 30, scale: 0.4, xscale: 0.4, yscale: 0.4, opacity: 0, time: 900, }, 'linear'); scene.showEffect('purplewisp', { x: attacker.x + 60, y: attacker.y + 50, z: attacker.z, scale: 0.5, opacity: 0.1, time: 700, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, time: 1000, }, 'ballistic', 'explode'); scene.showEffect('wisp', { x: attacker.x + 60, y: attacker.y + 50, z: attacker.z, scale: 0.5, opacity: 0.3, time: 700, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.6, time: 1000, }, 'ballistic', 'explode'); }, }, quash: { anim(scene, [attacker, defender]) { attacker.anim({ x: defender.x, y: defender.y + 80, z: defender.behind(-30), time: 400, }, 'ballistic'); attacker.anim({ x: defender.x, y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(450); defender.anim({ y: defender.y - 15, yscale: 0.5, time: 300, }, 'swing'); defender.anim({ time: 300, }, 'decel'); scene.showEffect('rightchop', { x: defender.x, y: defender.y + 10, z: defender.z, scale: 0.5, opacity: 0.1, time: 400, }, { y: defender.y, scale: 0.25, opacity: 1, time: 700, }, 'decel', 'explode'); }, }, swagger: { anim(scene, [attacker, defender]) { BattleOtherAnims.shake.anim(scene, [attacker]); scene.showEffect('angry', { x: defender.x + 20, y: defender.y + 20, z: defender.z, scale: 0.5, opacity: 0.5, time: 0, }, { scale: 1, opacity: 1, time: 300, }, 'ballistic2Under', 'fade'); scene.showEffect('angry', { x: defender.x - 20, y: defender.y + 10, z: defender.z, scale: 0.5, opacity: 0.5, time: 100, }, { scale: 1, opacity: 1, time: 400, }, 'ballistic2Under', 'fade'); scene.showEffect('angry', { x: defender.x, y: defender.y + 40, z: defender.z, scale: 0.5, opacity: 0.5, time: 200, }, { scale: 1, opacity: 1, time: 500, }, 'ballistic2Under', 'fade'); }, }, swordsdance: { anim(scene, [attacker, defender]) { BattleOtherAnims.shake.anim(scene, [defender]); scene.showEffect('sword', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, }, { x: defender.x - 50, scale: 1, opacity: 0.4, time: 200, }, 'ballistic2', 'fade'); scene.showEffect('sword', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, }, { x: defender.x + 50, scale: 1, opacity: 0.4, time: 200, }, 'ballistic2back', 'fade'); scene.showEffect('sword', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 200, }, { x: defender.x - 50, scale: 1, opacity: 0.4, time: 400, }, 'ballistic2', 'fade'); scene.showEffect('sword', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 200, }, { x: defender.x + 50, scale: 1, opacity: 0.4, time: 400, }, 'ballistic2back', 'fade'); scene.showEffect('sword', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 400, }, { x: defender.x - 50, scale: 1, opacity: 0.4, time: 600, }, 'ballistic2', 'fade'); scene.showEffect('sword', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 400, }, { x: defender.x + 50, scale: 1, opacity: 0.4, time: 600, }, 'ballistic2Back', 'fade'); }, }, quiverdance: { anim(scene, [attacker]) { scene.backgroundEffect('#987058', 800, 0.3, 400); BattleOtherAnims.shake.anim(scene, [attacker]); scene.showEffect('wisp', { x: attacker.x + 40, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 1, time: 0, }, { y: attacker.y + 60, opacity: 0, time: 400, }, 'accel'); scene.showEffect('wisp', { x: attacker.x - 40, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 1, time: 200, }, { y: attacker.y + 60, opacity: 0, time: 600, }, 'accel'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 1, time: 400, }, { y: attacker.y + 60, opacity: 0, time: 800, }, 'accel'); }, }, victorydance: { anim(scene, [attacker]) { scene.backgroundEffect('#987058', 800, 0.3, 400); BattleOtherAnims.shake.anim(scene, [attacker]); scene.showEffect('flareball', { x: attacker.x + 40, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 1, time: 0, }, { y: attacker.y + 60, opacity: 0, time: 400, }, 'accel'); scene.showEffect('flareball', { x: attacker.x - 40, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 1, time: 200, }, { y: attacker.y + 60, opacity: 0, time: 600, }, 'accel'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 1, time: 400, }, { y: attacker.y + 60, opacity: 0, time: 800, }, 'accel'); }, }, dragondance: { anim(scene, [attacker]) { BattleOtherAnims.shake.anim(scene, [attacker]); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 0, }, { x: attacker.x - 50, y: attacker.y - 50, scale: 2, opacity: 0, time: 300, }, 'ballistic'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 150, }, { x: attacker.x + 60, y: attacker.y - 50, scale: 2, opacity: 0, time: 450, }, 'ballistic'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 300, }, { x: attacker.x + 10, y: attacker.y - 60, scale: 2, opacity: 0, time: 600, }, 'ballistic'); }, }, agility: { anim(scene, [attacker]) { attacker.anim({ x: attacker.x - 10, time: 200 }); attacker.anim({ x: attacker.x + 10, time: 300 }); attacker.anim({ x: attacker.x - 20, time: 150 }); attacker.anim({ x: attacker.x + 20, time: 150 }); attacker.anim({ x: attacker.x, opacity: 0, time: 1 }); attacker.delay(550); attacker.anim({ x: attacker.x, time: 150 }); scene.showEffect(attacker.sp, { x: attacker.x + 20, y: attacker.y, z: attacker.z, opacity: 0.5, time: 800, }, { x: attacker.x - 30, opacity: 0, time: 1300, }, 'decel'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.5, time: 800, }, { x: attacker.x + 30, opacity: 0, time: 1200, }, 'decel'); }, }, doubleteam: { anim(scene, [attacker, defender]) { BattleOtherAnims.shake.anim(scene, [attacker, defender]); scene.showEffect(attacker.sp, { x: defender.x, y: attacker.y, z: attacker.z, opacity: 0.3, }, { x: defender.x - 60, y: defender.y, z: defender.z, opacity: 0, time: 500, }, 'decel'); scene.showEffect(attacker.sp, { x: defender.x, y: attacker.y, z: attacker.z, opacity: 0.3, }, { x: defender.x + 60, y: defender.y, z: defender.z, opacity: 0, time: 500, }, 'decel'); }, }, metronome: { anim(scene, [attacker]) { scene.showEffect('pointer', { x: attacker.x + 30, y: attacker.y + 30, z: attacker.z, scale: 0.4, opacity: 1, }, { x: attacker.x + 40, y: attacker.y + 35, scale: 0.5, xscale: 0.3, yscale: 0.6, opacity: 1, time: 200, }, 'decel', 'fade'); scene.showEffect('pointer', { x: attacker.x + 40, y: attacker.y + 35, z: attacker.z, scale: 0.5, xscale: 0.3, yscale: 0.6, opacity: 1, time: 200, }, { x: attacker.x + 30, y: attacker.y + 30, scale: 0.4, xscale: 0.4, yscale: 0.4, opacity: 0, time: 400, }, 'decel'); }, }, teeterdance: { anim: BattleOtherAnims.shake.anim, }, splash: { anim(scene, [attacker]) { scene.showEffect('waterwisp', { x: attacker.x + 20, y: attacker.y + 20, z: attacker.z, scale: 0.5, opacity: 0.1, time: 150, }, { x: attacker.x + 40, y: attacker.y + 60, z: attacker.z, opacity: 0.3, }, 'ballistic', 'fade'); scene.showEffect('waterwisp', { x: attacker.x - 20, y: attacker.y + 20, z: attacker.z, scale: 0.5, opacity: 0.1, time: 300, }, { x: attacker.x - 40, y: attacker.y + 60, z: attacker.z, opacity: 0.3, }, 'ballistic', 'fade'); scene.showEffect('waterwisp', { x: attacker.x + 20, y: attacker.y + 40, z: attacker.z, scale: 0.5, opacity: 0.1, time: 450, }, { x: attacker.x + 60, y: attacker.y + 40, z: attacker.z, opacity: 0.3, }, 'ballistic', 'fade'); attacker.anim({ y: attacker.y + 15, time: 150, }, 'decel'); attacker.anim({ time: 150, }, 'accel'); attacker.anim({ y: attacker.y + 15, time: 150, }, 'decel'); attacker.anim({ time: 150, }, 'accel'); attacker.anim({ y: attacker.y + 15, time: 150, }, 'decel'); attacker.anim({ time: 150, }, 'accel'); }, }, encore: { anim(scene, [attacker, defender]) { attacker.anim({ x: attacker.x - 10, time: 100 }); attacker.anim({ x: attacker.x + 10, time: 200 }); attacker.anim({ x: attacker.x, time: 100 }); }, }, attract: { anim(scene, [attacker, defender]) { BattleOtherAnims.shake.anim(scene, [attacker]); scene.showEffect('heart', { x: defender.x + 20, y: defender.y + 20, z: defender.z, scale: 0.5, opacity: 0.5, time: 0, }, { scale: 1, opacity: 1, time: 300, }, 'ballistic2Under', 'fade'); scene.showEffect('heart', { x: defender.x - 20, y: defender.y + 10, z: defender.z, scale: 0.5, opacity: 0.5, time: 100, }, { scale: 1, opacity: 1, time: 400, }, 'ballistic2Under', 'fade'); scene.showEffect('heart', { x: defender.x, y: defender.y + 40, z: defender.z, scale: 0.5, opacity: 0.5, time: 200, }, { scale: 1, opacity: 1, time: 500, }, 'ballistic2Under', 'fade'); }, }, raindance: { anim: BattleOtherAnims.dance.anim, }, sunnyday: { anim: BattleOtherAnims.dance.anim, }, hail: { anim: BattleOtherAnims.dance.anim, }, snowscape: { anim: BattleOtherAnims.dance.anim, }, chillyreception: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 750, 1, 50); if (attacker.sp.url) { const url = attacker.sp.url; const sprite = { url: url.replace('-back', ''), w: attacker.sp.w, h: attacker.sp.h, }; scene.showEffect(sprite, { x: scene.battle.mySide.x + 65, y: scene.battle.mySide.y + 65, z: scene.battle.mySide.z, scale: 1.5, opacity: 1, time: 50, }, { opacity: 0, time: 800, }, 'decel'); sprite.url = url; scene.showEffect(sprite, { x: scene.battle.mySide.x + 65, y: scene.battle.mySide.y + 65, z: scene.battle.mySide.z, scale: 1.5, opacity: 0, time: 800, }, { opacity: 1, time: 1550, }, 'decel'); } scene.backgroundEffect(`url('https://${Config.routes.client}/fx/weather-hail.png')`, 750, 1, 800); }, }, sandstorm: { anim: BattleOtherAnims.dance.anim, }, gravity: { anim() { // do not give Gravity an animation, // it'll conflict with the gravity animation in BattleOtherAnims // this one prevents the wisp from showing up }, }, trickroom: { anim: BattleOtherAnims.dance.anim, }, magicroom: { anim: BattleOtherAnims.dance.anim, }, wonderroom: { anim: BattleOtherAnims.dance.anim, }, afteryou: { anim: BattleOtherAnims.dance.anim, }, allyswitch: { anim() { // do not give Ally Switch an animation, // it'll conflict with the animation of the switch itself }, }, babydolleyes: { anim: BattleOtherAnims.dance.anim, }, faketears: { anim: BattleOtherAnims.dance.anim, }, tearfullook: { anim: BattleOtherAnims.dance.anim, }, featherdance: { anim(scene, [attacker, defender]) { BattleOtherAnims.dance.anim(scene, [attacker, defender]); scene.showEffect('feather', { x: attacker.x, y: attacker.y + 10, z: attacker.z, scale: 0.3, opacity: 1, time: 0, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.4, time: 600, }, 'ballistic2Under', 'fade'); scene.showEffect('feather', { x: attacker.x, y: attacker.y + 10, z: attacker.z, scale: 0.3, opacity: 1, time: 100, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.4, time: 700, }, 'ballistic2Under', 'fade'); scene.showEffect('feather', { x: attacker.x, y: attacker.y + 10, z: attacker.z, scale: 0.3, opacity: 1, time: 200, }, { x: defender.x + 25, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.4, time: 800, }, 'ballistic2Under', 'fade'); scene.showEffect('feather', { x: attacker.x, y: attacker.y + 10, z: attacker.z, scale: 0.3, opacity: 1, time: 300, }, { x: defender.x - 25, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.4, time: 900, }, 'ballistic2Under', 'fade'); scene.showEffect('feather', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 400, }, { x: defender.x + 5, y: defender.y - 20, z: defender.z, scale: 0.1, opacity: 0.4, time: 700, }, 'ballistic2Under', 'fade'); scene.showEffect('feather', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 500, }, { x: defender.x - 10, y: defender.y - 20, z: defender.z, scale: 0.1, opacity: 0.4, time: 800, }, 'ballistic2Under', 'fade'); scene.showEffect('feather', { x: defender.x + 25, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 600, }, { x: defender.x, y: defender.y - 20, z: defender.z, scale: 0.1, opacity: 0.4, time: 900, }, 'ballistic2Under', 'fade'); scene.showEffect('feather', { x: defender.x - 25, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 700, }, { x: defender.x, y: defender.y - 20, z: defender.z, scale: 0.1, opacity: 0.4, time: 1000, }, 'ballistic2Under', 'fade'); }, }, followme: { anim(scene, [attacker]) { BattleOtherAnims.dance.anim(scene, [attacker]); scene.showEffect('pointer', { x: attacker.x, y: attacker.y + 30, z: attacker.z, scale: 0.4, opacity: 1, time: 100, }, { y: attacker.y + 60, opacity: 1, time: 550, }, 'decel', 'fade'); }, }, foresight: { anim: BattleOtherAnims.dance.anim, }, mimic: { anim(scene, [attacker, defender]) { scene.showEffect(defender.sp, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.5, }, { scale: 0.2, opacity: 0, time: 300, }, 'accel'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, opacity: 0.5, time: 300, }, { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.2, time: 600, }, 'accel', 'fade'); }, }, sketch: { anim: BattleOtherAnims.dance.anim, }, doodle: { anim: BattleOtherAnims.dance.anim, }, odorsleuth: { anim: BattleOtherAnims.dance.anim, }, celebrate: { anim: BattleOtherAnims.dance.anim, }, playnice: { anim: BattleOtherAnims.dance.anim, }, tailwhip: { anim: BattleOtherAnims.dance.anim, }, leer: { anim: BattleOtherAnims.dance.anim, }, kinesis: { anim(scene, [attacker]) { scene.backgroundEffect('#AA44BB', 450, 0.6, 450); scene.backgroundEffect('#AA44FF', 250, 0.6, 800); BattleOtherAnims.dance.anim(scene, [attacker]); }, }, electricterrain: { anim(scene, [attacker]) { scene.backgroundEffect('#FFFF00', 1000, 0.3); BattleOtherAnims.dance.anim(scene, [attacker]); }, }, grassyterrain: { anim(scene, [attacker]) { scene.backgroundEffect('#9AB440', 1000, 0.3); BattleOtherAnims.dance.anim(scene, [attacker]); }, }, mistyterrain: { anim(scene, [attacker]) { scene.backgroundEffect('#FF99FF', 1000, 0.3); BattleOtherAnims.dance.anim(scene, [attacker]); }, }, lifedew: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.7, }, { x: defender.x, y: defender.y, z: defender.behind(0), opacity: 0.6, time: 400, }, 'decel', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.7, time: 100, }, { x: defender.x + 20, y: defender.y - 10, z: defender.behind(0), opacity: 0.6, time: 500, }, 'decel', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.7, time: 200, }, { x: defender.x - 20, y: defender.y + 10, z: defender.behind(0), opacity: 0.6, time: 600, }, 'decel', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.7, time: 300, }, { x: defender.x, y: defender.y - 5, z: defender.behind(0), opacity: 0.6, time: 700, }, 'decel', 'explode'); } }, }, junglehealing: { anim(scene, [attacker, ...defenders]) { scene.backgroundEffect('#9AB440', 1000, 0.3); for (const defender of defenders) { BattleOtherAnims.dance.anim(scene, [defender]); scene.showEffect('leaf1', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x, y: defender.y - 60, scale: 1.5, opacity: 0, time: 1100, }, 'linear', 'fade'); scene.showEffect('leaf2', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x + 60, y: defender.y, scale: 1.5, opacity: 0, time: 1100, }, 'linear', 'fade'); scene.showEffect('leaf2', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x, y: defender.y + 60, scale: 1.5, opacity: 0, time: 1100, }, 'linear', 'fade'); scene.showEffect('leaf1', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x - 60, y: defender.y, scale: 1.5, opacity: 0, time: 1100, }, 'linear', 'fade'); } }, }, topsyturvy: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 400, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 600, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 400, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 600, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 600, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 600, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 800, }, 'linear', 'fade'); }, }, embargo: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 400, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 600, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 400, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 600, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 600, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 800, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 600, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 800, }, 'linear', 'fade'); }, }, healblock: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 400, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 600, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 400, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 600, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 600, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 600, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 800, }, 'linear', 'fade'); }, }, flash: { anim(scene, [attacker]) { scene.backgroundEffect('#ffffff', 600, 0.6); scene.showEffect('wisp', { x: attacker.leftof(-10), y: attacker.y + 10, z: attacker.z, scale: 0.1, opacity: 0.8, }, { scale: 15, opacity: 0.8, time: 500, }, 'linear', 'fade'); }, }, tailwind: { anim(scene, [attacker]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.behind(40), scale: 0.3, opacity: 1, }, { z: attacker.behind(-40), scale: 2, opacity: 0.2, time: 300, }, 'linear', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.behind(40), scale: 0.3, opacity: 1, time: 200, }, { z: attacker.behind(-40), scale: 2, opacity: 0.2, time: 500, }, 'linear', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.behind(40), scale: 0.3, opacity: 1, time: 400, }, { z: attacker.behind(-40), scale: 2, opacity: 0.2, time: 700, }, 'linear', 'fade'); }, }, aerialace: { anim(scene, [attacker, defender]) { scene.showEffect('leftslash', { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 1.5, opacity: 0.6, time: 260, }, { scale: 2, opacity: 0, time: 560, }, 'accel', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 260, }, { scale: 2, opacity: 0, time: 560, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 310, }, { scale: 2, opacity: 0, time: 610, }, 'linear'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 50, }, { x: defender.x - 60, y: defender.y + 60, z: defender.behind(-40), time: 250, }, 'ballistic', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 100, }, { x: defender.leftof(20), y: defender.y, z: defender.behind(-40), time: 300, }, 'ballistic2Under', 'fade'); scene.showEffect(attacker.sp, { x: defender.x - 60, y: defender.y + 60, z: defender.behind(-40), opacity: 0.5, time: 250, }, { x: defender.leftof(-5), y: defender.y - 5, z: defender.behind(20), time: 350, }, 'ballistic', 'fade'); scene.showEffect(attacker.sp, { x: defender.leftof(20), y: defender.y, z: defender.behind(-40), opacity: 0.5, time: 300, }, { x: defender.leftof(-5), y: defender.y - 5, z: defender.behind(20), time: 400, }, 'ballistic2', 'fade'); attacker.anim({ x: defender.x, y: defender.y + 60, z: defender.behind(-80), time: 200, opacity: 0.5, }, 'ballistic'); attacker.anim({ x: defender.leftof(-5), y: defender.y - 5, z: defender.behind(20), time: 100, opacity: 0.5, }); attacker.anim({ x: defender.x, y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.delay(260); defender.anim({ z: defender.behind(30), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, bravebird: { anim: BattleOtherAnims.flight.anim, }, acrobatics: { anim: BattleOtherAnims.flight.anim, }, flyingpress: { anim: BattleOtherAnims.flight.anim, }, steelwing: { anim: BattleOtherAnims.flight.anim, }, wingattack: { anim: BattleOtherAnims.flight.anim, }, dualwingbeat: { anim: BattleOtherAnims.flight.anim, }, dragonbreath: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, }, { x: defender.x, y: defender.y, z: defender.behind(40), scale: 1, opacity: 0.2, }, 'decel'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, time: 50, }, { x: defender.x, y: defender.y, z: defender.behind(40), scale: 1, opacity: 0.2, }, 'decel'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, time: 100, }, { x: defender.x, y: defender.y, z: defender.behind(40), scale: 1, opacity: 0.2, }, 'decel'); }, }, orderup: { anim(scene, [attacker, defender]) { const tatsugiriSprite = { url: `https://${Config.routes.client}/sprites/gen5/tatsugiri${['-droopy', '-stretchy', ''][Math.floor(Math.random() * 3)]}.png`, w: 96, h: 96, }; scene.showEffect(tatsugiriSprite, { x: defender.x, y: defender.y + 250, z: defender.z, scale: 2, opacity: 1, time: 0, }, { y: defender.y, scale: 1, time: 300, }, 'linear'); scene.showEffect(tatsugiriSprite, { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 300, }, { time: 600, }, 'linear'); }, }, dragonpulse: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.y - attacker.y) / 5; let zstep = (defender.z - attacker.z) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('wisp', { x: attacker.x + xstep * (i + 1), y: attacker.y + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1, opacity: 1, time: 20 * i, }, { scale: 2, opacity: 0, time: 40 * i + 600, }, 'linear'); scene.showEffect('purplewisp', { x: attacker.x + xstep * (i + 1), y: attacker.y + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.5, opacity: 0.3, time: 20 * i, }, { scale: 2, opacity: 0, time: 40 * i + 600, }, 'linear'); } scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.behind(-15), scale: 0.5, opacity: 0.6, }, { scale: 0.6, opacity: 0.2, time: 400, }, 'linear', 'fade'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.1, time: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, time: 200, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.1, time: 100, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, time: 300, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.1, time: 200, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, time: 400, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.1, time: 300, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, time: 500, }, 'linear', 'explode'); }, }, focusblast: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#B84038', 700, 0.6); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 3, opacity: 0.3, }, { scale: 0.6, opacity: 1, time: 300, }, 'decel', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 3, opacity: 0.3, time: 100, }, { scale: 0.8, opacity: 0.6, time: 400, }, 'decel', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.6, opacity: 0.8, time: 400, }, { x: defender.x, y: defender.y, z: defender.behind(20), scale: 1, opacity: 0.8, time: 800, }, 'accel', 'explode'); defender.delay(800); defender.anim({ z: defender.behind(10), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, aurasphere: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#124763', 700, 0.6); scene.backgroundEffect('#FFC001', 300, 0.3, 600); scene.showEffect('wisp', { x: attacker.x, y: attacker.y + 100, z: attacker.behind(-20), scale: 0.5, xscale: 3, opacity: 0, time: 0, }, { x: attacker.x, y: attacker.y, scale: 0.8, xscale: 0.8, opacity: 0.8, time: 400, }, 'decel', 'fade'); scene.showEffect('wisp', { x: attacker.x - 60, y: attacker.y - 80, z: attacker.behind(-20), scale: 0.5, yscale: 3, opacity: 0, time: 50, }, { x: attacker.x, y: attacker.y, scale: 1.5, yscale: 1.5, opacity: 0.8, time: 450, }, 'decel', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0, opacity: 0, time: 0, }, { scale: 0.8, opacity: 0.5, time: 650, }, 'decel', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0, opacity: 0, time: 0, }, { scale: 1.5, opacity: 0.8, time: 650, }, 'decel', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0.8, opacity: 0.8, time: 600, }, { x: defender.x, y: defender.y, z: defender.z, time: 800, }, 'accel', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 1, opacity: 0.8, time: 600, }, { x: defender.x, y: defender.y, z: defender.z, time: 800, }, 'accel', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 1, opacity: 0.8, time: 600, }, { x: defender.x, y: defender.y, z: defender.z, time: 825, }, 'accel', 'explode'); defender.delay(800); defender.anim({ z: defender.behind(10), time: 175, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, technoblast: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 3, opacity: 0.3, }, { z: attacker.behind(-30), scale: 0.6, opacity: 1, time: 300, }, 'decel', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 3, opacity: 0.3, time: 100, }, { z: attacker.behind(-30), scale: 0.8, opacity: 0.6, time: 400, }, 'decel', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.6, opacity: 0.8, time: 400, }, { x: defender.x, y: defender.y, z: defender.behind(20), scale: 1, opacity: 0.8, time: 800, }, 'accel', 'explode'); defender.delay(800); defender.anim({ z: defender.behind(5), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, painsplit: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 0, }, { scale: 3, opacity: 0, time: 300, }, 'linear'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 200, }, { scale: 3, opacity: 0, time: 500, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 0, }, { scale: 3, opacity: 0, time: 300, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 200, }, { scale: 3, opacity: 0, time: 500, }, 'linear'); }, }, flail: { anim: BattleOtherAnims.xattack.anim, }, uturn: { anim: BattleOtherAnims.spinattack.anim, }, flipturn: { anim(scene, [attacker, defender]) { scene.showEffect('waterwisp', { x: defender.x, y: defender.y + 80, z: defender.behind(-15), scale: 1.5, opacity: 0.8, time: 400, }, { y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 500, }, 'linear', 'explode'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y - 25, z: defender.z, scale: 1, time: 500, }, { x: defender.x + 50, scale: 0.6, opacity: 0.3, time: 800, }, 'linear', 'fade'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y - 25, z: defender.z, scale: 1, time: 500, }, { x: defender.x - 50, scale: 0.6, opacity: 0.3, time: 800, }, 'linear', 'fade'); BattleOtherAnims.spinattack.anim(scene, [attacker, defender]); }, }, rapidspin: { anim: BattleOtherAnims.spinattack.anim, }, gyroball: { anim: BattleOtherAnims.spinattack.anim, }, mortalspin: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0.5, time: 0, }, { x: defender.x, y: defender.y + 60, z: defender.behind(-30), opacity: 0.8, time: 400, }, 'decel', 'explode'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y + 60, z: defender.behind(-30), scale: 2, opacity: 0.8, time: 400, }, { x: defender.x, y: defender.y + 5, z: defender.z, opacity: 1, time: 500, }, 'decel', 'explode'); BattleOtherAnims.spinattack.anim(scene, [attacker, defender]); }, }, icespinner: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0.5, time: 0, }, { x: defender.x, y: defender.y + 60, z: defender.behind(-30), opacity: 0.8, time: 400, }, 'decel', 'explode'); scene.showEffect('iceball', { x: defender.x, y: defender.y + 60, z: defender.behind(-30), scale: 2, opacity: 0.8, time: 400, }, { x: defender.x, y: defender.y + 5, z: defender.z, opacity: 1, time: 500, }, 'decel', 'explode'); BattleOtherAnims.spinattack.anim(scene, [attacker, defender]); }, }, voltswitch: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: defender.behind(-130), opacity: 0.8, time: 275, }, { x: defender.x, y: defender.y, z: defender.z, time: 500, }, 'linear', 'explode'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.behind(10), opacity: 0.7, scale: 0, time: 500, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.7, scale: 0, time: 700, }, { scale: 4, opacity: 0, time: 1000, }, 'linear'); attacker.anim({ z: attacker.behind(15), time: 200, }, 'decel'); attacker.anim({ z: defender.behind(-170), time: 100, }, 'accel'); attacker.anim({ z: attacker.z, time: 300, }, 'swing'); defender.delay(500); defender.anim({ x: defender.leftof(5), y: defender.y, z: defender.behind(15), time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, thunderwave: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, time: 0, }, { scale: 8, opacity: 0.1, time: 600, }, 'linear', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, time: 200, }, { scale: 8, opacity: 0.1, time: 800, }, 'linear', 'fade'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.2, time: 500, }, { scale: 4, opacity: 0.1, time: 800, }, 'linear', 'fade'); }, }, shockwave: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y - 70, z: attacker.z, scale: 1, xscale: 5, opacity: 0.6, time: 0, }, { scale: 3, xscale: 10, opacity: 0.1, time: 600, }, 'decel', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y - 70, z: attacker.z, scale: 1, xscale: 5, opacity: 0.6, time: 300, }, { scale: 3, xscale: 10, opacity: 0.1, time: 700, }, 'decel', 'fade'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 250, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 550, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 500, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 800, }, 'linear'); }, }, discharge: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, time: 0, }, { scale: 8, opacity: 0.1, time: 600, }, 'linear', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, time: 150, }, { scale: 8, opacity: 0.1, time: 750, }, 'linear', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, time: 300, }, { scale: 8, opacity: 0.1, time: 900, }, 'linear', 'fade'); }, }, bugbuzz: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.3, time: 0, }, { scale: 8, opacity: 0.07, time: 400, }, 'linear', 'fade'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.3, time: 100, }, { scale: 8, opacity: 0.07, time: 500, }, 'linear', 'fade'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.3, time: 200, }, { scale: 8, opacity: 0.07, time: 600, }, 'linear', 'fade'); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.3, time: 500, }, { scale: 2, opacity: 0.1, time: 800, }, 'linear', 'fade'); }, }, explosion: { anim(scene, [attacker]) { scene.showEffect('fireball', { x: attacker.x + 40, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.6, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('fireball', { x: attacker.x - 40, y: attacker.y - 20, z: attacker.z, scale: 0, opacity: 0.6, time: 150, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('fireball', { x: attacker.x + 10, y: attacker.y + 20, z: attacker.z, scale: 0, opacity: 0.6, time: 300, }, { scale: 6, opacity: 0, }, 'decel'); attacker.delay(450).anim({ scale: 4, time: 400, opacity: 0, }, 'linear'); }, }, populationbomb: { anim(scene, [attacker, defender]) { BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); scene.showEffect('fireball', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('leftslash', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('fireball', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 0.6, time: 150, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('rightslash', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 0.6, time: 150, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('fireball', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 0.6, time: 300, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('leftslash', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 0.6, time: 300, }, { scale: 6, opacity: 0, }, 'decel'); }, }, auroraveil: { anim() {}, }, reflect: { anim() {}, }, safeguard: { anim() {}, }, lightscreen: { anim() {}, }, mist: { anim(scene, [attacker, defender]) { let xf = [1, -1, 1, -1]; let yf = [1, -1, -1, 1]; let xf2 = [1, 0, -1, 0]; let yf2 = [0, 1, 0, -1]; for (let i = 0; i < 4; i++) { scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.7, }, { x: attacker.x + 120 * xf[i], y: attacker.y, z: attacker.z + 68 * yf[i], scale: 1, opacity: 0, time: 800, }, 'decel', 'fade'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.7, }, { x: attacker.x + 113 * xf2[i], y: attacker.y, z: attacker.z + 97 * yf2[i], scale: 1, opacity: 0, time: 800, }, 'decel', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.7, }, { x: attacker.x + 120 * xf[i], y: attacker.y, z: attacker.z + 68 * yf[i], scale: 1.5, opacity: 0, time: 800, }, 'decel', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.7, }, { x: attacker.x + 113 * xf2[i], y: attacker.y, z: attacker.z + 97 * yf2[i], scale: 1.5, opacity: 0, time: 800, }, 'decel', 'fade'); } }, }, transform: { anim() {}, }, bellydrum: { anim(scene, [attacker]) { scene.showEffect('leftchop', { x: attacker.x - 20, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 1, }, { z: attacker.behind(5), scale: 0.4, time: 100, }, 'linear', 'fade'); scene.showEffect('rightchop', { x: attacker.x + 20, y: attacker.y - 10, z: attacker.z, scale: 0.6, opacity: 1, time: 150, }, { z: attacker.behind(5), scale: 0.4, time: 250, }, 'linear', 'fade'); scene.showEffect('leftchop', { x: attacker.x - 20, y: attacker.y - 10, z: attacker.z, scale: 0.6, opacity: 1, time: 350, }, { z: attacker.behind(5), scale: 0.4, time: 450, }, 'linear', 'fade'); scene.showEffect('rightchop', { x: attacker.x + 20, y: attacker.y - 10, z: attacker.z, scale: 0.6, opacity: 1, time: 500, }, { z: attacker.behind(5), scale: 0.4, time: 600, }, 'linear', 'fade'); scene.showEffect('impact', { x: attacker.x - 20, y: attacker.y - 10, z: attacker.behind(5), scale: 0.75, opacity: 0.3, time: 100, }, { scale: 1, opacity: 0, time: 300, }, 'linear'); scene.showEffect('impact', { x: attacker.x + 20, y: attacker.y - 10, z: attacker.behind(5), scale: 0.75, opacity: 0.3, time: 250, }, { scale: 1, opacity: 0, time: 550, }, 'linear'); scene.showEffect('impact', { x: attacker.x - 20, y: attacker.y - 10, z: attacker.behind(5), scale: 0.75, opacity: 0.3, time: 400, }, { scale: 1, opacity: 0, time: 700, }, 'linear'); scene.showEffect('impact', { x: attacker.x + 20, y: attacker.y - 10, z: attacker.behind(5), scale: 0.75, opacity: 0.3, time: 550, }, { scale: 1, opacity: 0, time: 800, }, 'linear'); }, }, aromatherapy: { anim: BattleOtherAnims.selfstatus.anim, }, healbell: { anim: BattleOtherAnims.selfstatus.anim, }, magiccoat: { anim: BattleOtherAnims.selfstatus.anim, }, protect: { anim: BattleOtherAnims.selfstatus.anim, }, detect: { anim: BattleOtherAnims.selfstatus.anim, }, kingsshield: { anim: BattleOtherAnims.selfstatus.anim, }, spikyshield: { anim: BattleOtherAnims.selfstatus.anim, }, burningbulwark: { anim(scene, [attacker]) { scene.backgroundEffect('linear-gradient(#390000 30%, #000000)', 600, 0.2); scene.showEffect('flareball', { x: attacker.x, y: attacker.y - 30, z: attacker.z, scale: 0.5, xscale: 0.25, yscale: 0.75, opacity: 0.5, }, { scale: 2, xscale: 3.5, opacity: 0.1, time: 500, }, 'decel', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y - 15, z: attacker.z, opacity: 0.5, scale: 1.5, }, { scale: 1.8, opacity: 0.1, time: 500, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y - 15, z: attacker.z, opacity: 1, scale: 3, }, { scale: 1.8, opacity: 0.5, time: 500, }, 'decel', 'fade', { filter: 'hue-rotate(90deg)' }); }, }, banefulbunker: { anim(scene, [attacker]) { scene.backgroundEffect('linear-gradient(#440044 30%, #000000', 600, 0.2); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y - 30, z: attacker.z, scale: 0.5, xscale: 0.25, yscale: 0.75, opacity: 0.5, }, { scale: 2, xscale: 3.5, opacity: 0.1, time: 500, }, 'decel', 'fade'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y - 15, z: attacker.z, opacity: 0.5, scale: 1.5, }, { scale: 1.8, opacity: 0.1, time: 500, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y - 15, z: attacker.z, opacity: 1, scale: 3, }, { scale: 1.8, opacity: 0.5, time: 500, }, 'decel', 'fade'); }, }, craftyshield: { anim: BattleOtherAnims.selfstatus.anim, }, matblock: { anim: BattleOtherAnims.selfstatus.anim, }, quickguard: { anim: BattleOtherAnims.selfstatus.anim, }, wideguard: { anim: BattleOtherAnims.selfstatus.anim, }, endure: { anim: BattleOtherAnims.selfstatus.anim, }, bide: { anim: BattleOtherAnims.bidecharge.anim, }, focusenergy: { anim: BattleOtherAnims.selfstatus.anim, }, rockpolish: { anim(scene, [attacker]) { scene.showEffect('leftslash', { x: attacker.x - 10, y: attacker.y - 10, z: attacker.z, scale: 0.7, opacity: 0.3, }, { opacity: 0, time: 300, }, 'decel'); scene.showEffect('rightslash', { x: attacker.x + 20, y: attacker.y - 15, z: attacker.z, scale: 0.7, opacity: 0.3, time: 100, }, { opacity: 0, time: 400, }, 'decel'); scene.showEffect('leftslash', { x: attacker.x - 5, y: attacker.y + 15, z: attacker.z, scale: 0.7, opacity: 0.3, time: 200, }, { opacity: 0, time: 500, }, 'decel'); scene.showEffect('rightslash', { x: attacker.x + 5, y: attacker.y - 10, z: attacker.z, scale: 0.7, opacity: 0.3, time: 200, }, { opacity: 0, time: 500, }, 'decel'); scene.showEffect('shine', { x: attacker.x - 10, y: attacker.y - 10, z: attacker.z, scale: 0.3, opacity: 0.6, }, { opacity: 0, time: 300, }, 'decel'); scene.showEffect('shine', { x: attacker.x + 20, y: attacker.y - 15, z: attacker.z, scale: 0.3, opacity: 0.6, time: 100, }, { opacity: 0, time: 400, }, 'decel'); scene.showEffect('shine', { x: attacker.x - 5, y: attacker.y + 15, z: attacker.z, scale: 0.3, opacity: 0.6, time: 200, }, { opacity: 0, time: 500, }, 'decel'); scene.showEffect('shine', { x: attacker.x + 5, y: attacker.y - 10, z: attacker.z, scale: 0.3, opacity: 0.6, time: 300, }, { opacity: 0, time: 600, }, 'accel'); scene.showEffect('shine', { x: attacker.x + 20, y: attacker.y - 30, z: attacker.z, scale: 0.2, opacity: 1, time: 0, }, { y: attacker.y + 40, opacity: 0, time: 400, }, 'accel'); scene.showEffect('shine', { x: attacker.x - 20, y: attacker.y + 40, z: attacker.z, scale: 0.2, opacity: 1, time: 200, }, { y: attacker.y + 40, opacity: 0, time: 600, }, 'accel'); scene.showEffect('shine', { x: attacker.x, y: attacker.y + 30, z: attacker.z, scale: 0.2, opacity: 1, time: 400, }, { y: attacker.y + 40, opacity: 0, time: 800, }, 'accel'); }, }, harden: { anim: BattleOtherAnims.selfstatus.anim, }, defensecurl: { anim: BattleOtherAnims.selfstatus.anim, }, irondefense: { anim: BattleOtherAnims.selfstatus.anim, }, rest: { anim(scene, [attacker]) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y + 20, z: attacker.z, scale: 0.5, opacity: 0.1, }, { x: attacker.x, y: attacker.y + 20, z: attacker.behind(-50), scale: 1.5, opacity: 1, time: 400, }, 'ballistic2Under', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y + 20, z: attacker.z, scale: 0.5, opacity: 0.1, time: 200, }, { x: attacker.x, y: attacker.y + 20, z: attacker.behind(-50), scale: 1.5, opacity: 1, time: 600, }, 'ballistic2Under', 'fade'); }, }, howl: { anim: BattleOtherAnims.selfstatus.anim, }, acupressure: { anim(scene, [attacker]) { scene.showEffect('pointer', { x: attacker.x - 5, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.1, }, { scale: 0.25, opacity: 1, time: 300, }, 'linear', 'explode'); scene.showEffect('lightning', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 300, }, { scale: 0.8, opacity: 0, time: 600, }, 'linear'); }, }, curse: { anim: BattleOtherAnims.selfstatus.anim, }, autotomize: { anim(scene, [attacker]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y - 60, z: attacker.z, scale: 1, xscale: 3, opacity: 0.5, time: 100, }, { xscale: 6, opacity: 0, time: 1000, }, 'linear', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y - 60, z: attacker.z, scale: 2, opacity: 1, time: 100, }, { y: attacker.y - 50, opacity: 0, time: 1000, }, 'accel', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 1, time: 100, }, { x: attacker.x + 40, y: attacker.y + 60, opacity: 0, time: 500, }, 'accel'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 1, time: 200, }, { x: attacker.x + 40, y: attacker.y + 60, opacity: 0, time: 600, }, 'accel'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 1, time: 400, }, { y: attacker.y + 60, opacity: 0, time: 800, }, 'accel'); attacker.anim({ x: attacker.x - 5, time: 75 }); attacker.anim({ x: attacker.x + 5, time: 100 }); attacker.anim({ x: attacker.x - 10, time: 50 }); attacker.anim({ x: attacker.x + 10, time: 50 }); attacker.anim({ x: attacker.x - 10, time: 50 }); attacker.anim({ x: attacker.x + 10, time: 50 }); attacker.anim({ x: attacker.x - 10, time: 50 }); attacker.anim({ x: attacker.x + 10, time: 50 }); attacker.anim({ x: attacker.x - 10, time: 50 }); attacker.anim({ x: attacker.x + 10, time: 150 }); attacker.anim({ x: attacker.x, time: 150 }); }, }, shiftgear: { anim(scene, [attacker]) { scene.showEffect('gear', { x: attacker.x + 50, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0, time: 100, }, { x: attacker.x + 20, opacity: 1, time: 200, }, 'linear', 'explode'); scene.showEffect('gear', { x: attacker.x - 50, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0, time: 100, }, { x: attacker.x - 20, opacity: 1, time: 200, }, 'linear', 'explode'); scene.showEffect('gear', { x: attacker.x + 50, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0, time: 250, }, { x: attacker.x + 20, opacity: 1, time: 350, }, 'linear', 'explode'); scene.showEffect('gear', { x: attacker.x - 50, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0, time: 250, }, { x: attacker.x - 20, opacity: 1, time: 350, }, 'linear', 'explode'); scene.showEffect('gear', { x: attacker.x + 50, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0, time: 400, }, { x: attacker.x + 20, opacity: 1, time: 500, }, 'linear', 'explode'); scene.showEffect('gear', { x: attacker.x - 50, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0, time: 400, }, { x: attacker.x - 20, opacity: 1, time: 500, }, 'linear', 'explode'); scene.showEffect('shine', { x: attacker.x - 10, y: attacker.y - 10, z: attacker.z, scale: 0.3, opacity: 0.6, time: 100, }, { opacity: 0, time: 300, }, 'decel'); scene.showEffect('shine', { x: attacker.x + 20, y: attacker.y - 15, z: attacker.z, scale: 0.3, opacity: 0.6, time: 100, }, { opacity: 0, time: 400, }, 'decel'); scene.showEffect('shine', { x: attacker.x - 5, y: attacker.y + 15, z: attacker.z, scale: 0.3, opacity: 0.6, time: 200, }, { opacity: 0, time: 500, }, 'decel'); scene.showEffect('shine', { x: attacker.x + 5, y: attacker.y - 10, z: attacker.z, scale: 0.3, opacity: 0.6, time: 300, }, { opacity: 0, time: 600, }, 'accel'); scene.showEffect('shine', { x: attacker.x + 20, y: attacker.y - 30, z: attacker.z, scale: 0.2, opacity: 1, time: 100, }, { y: attacker.y + 40, opacity: 0, time: 400, }, 'accel'); scene.showEffect('shine', { x: attacker.x - 20, y: attacker.y + 40, z: attacker.z, scale: 0.2, opacity: 1, time: 200, }, { y: attacker.y + 40, opacity: 0, time: 600, }, 'accel'); scene.showEffect('shine', { x: attacker.x, y: attacker.y + 30, z: attacker.z, scale: 0.2, opacity: 1, time: 400, }, { y: attacker.y + 40, opacity: 0, time: 800, }, 'accel'); attacker.delay(100); attacker.anim({ y: attacker.y + 2.5, yscale: 1.5, time: 100, }, 'linear'); attacker.anim({ time: 100, }, 'linear'); attacker.anim({ y: attacker.y + 2.5, yscale: 1.5, time: 100, }, 'linear'); attacker.anim({ time: 100, }, 'linear'); attacker.anim({ y: attacker.y + 2.5, yscale: 1.5, time: 100, }, 'linear'); attacker.anim({ time: 100, }, 'linear'); }, }, bulkup: { anim(scene, [attacker]) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y + 20, z: attacker.z, scale: 0.5, opacity: 0.1, time: 500, }, { x: attacker.leftof(-30), y: attacker.y + 20, z: attacker.behind(-50), scale: 1, opacity: 0.3, time: 800, }, 'ballistic2Under', 'fade'); attacker.anim({ y: attacker.y + 4, scale: 1.15, time: 200, }, 'linear'); attacker.delay(300); attacker.anim({ time: 200, }, 'decel'); }, }, shellsmash: { anim(scene, [attacker]) { scene.showEffect('shell', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.5, time: 0, }, { scale: 0.8, opacity: 0.8, time: 400, }, 'linear', 'explode'); scene.showEffect('impact', { x: attacker.x + 40, y: attacker.y, z: attacker.z, scale: 0.7, opacity: 0.4, time: 400, }, { scale: 1.2, opacity: 0, time: 600, }, 'linear'); scene.showEffect('impact', { x: attacker.x - 40, y: attacker.y - 20, z: attacker.z, scale: 0.7, opacity: 0.4, time: 450, }, { scale: 1.2, opacity: 0, time: 650, }, 'linear'); scene.showEffect('impact', { x: attacker.x + 10, y: attacker.y + 20, z: attacker.z, scale: 0.7, opacity: 0.4, time: 560, }, { scale: 1.2, opacity: 0, time: 700, }, 'linear'); attacker.anim({ scale: 0.4, opacity: 0, time: 400, }, 'linear'); attacker.delay(75); attacker.anim({ x: attacker.x - 20, time: 75 }); attacker.anim({ x: attacker.x + 20, time: 100 }); attacker.anim({ x: attacker.x - 20, time: 100 }); attacker.anim({ x: attacker.x + 20, time: 100 }); attacker.anim({ x: attacker.x - 20, time: 100 }); attacker.anim({ x: attacker.x + 20, time: 100 }); attacker.anim({ x: attacker.x, time: 75 }); }, }, stockpile: { anim: BattleOtherAnims.selfstatus.anim, }, swallow: { anim: BattleOtherAnims.selfstatus.anim, }, ingrain: { anim: BattleOtherAnims.selfstatus.anim, }, aquaring: { anim(scene, [attacker]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0.2, time: 0, }, { scale: 1.5, opacity: 0.5, time: 400, }, 'linear', 'fade'); }, }, coil: { anim(scene, [attacker]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 15, z: attacker.z, scale: 0.7, xscale: 2, opacity: 0.6, time: 0, }, { scale: 0.4, xscale: 1, opacity: 0.1, time: 500, }, 'decel', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y - 5, z: attacker.z, scale: 0.7, xscale: 2, opacity: 0.6, time: 50, }, { scale: 0.4, xscale: 1, opacity: 0.1, time: 550, }, 'decel', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y - 20, z: attacker.z, scale: 0.7, xscale: 2, opacity: 0.6, time: 100, }, { scale: 0.4, xscale: 1, opacity: 0.1, time: 600, }, 'decel', 'fade'); attacker.anim({ y: attacker.y + 5, yscale: 1.1, time: 300, }, 'swing'); attacker.delay(400); attacker.anim({ time: 300, }, 'swing'); }, }, conversion: { anim(scene, [attacker]) { scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0.3, }, { scale: 1, opacity: 0, time: 600, }, 'decel'); }, }, powertrick: { anim: BattleOtherAnims.selfstatus.anim, }, ragepowder: { anim: BattleOtherAnims.selfstatus.anim, }, refresh: { anim(scene, [attacker]) { scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.5, }, { scale: 1.5, opacity: 0, time: 500, }, 'linear', 'fade'); scene.showEffect('rainbow', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 1, }, { scale: 2, opacity: 0, time: 500, }, 'linear', 'fade'); }, }, recycle: { anim: BattleOtherAnims.selfstatus.anim, }, doomdesire: { anim(scene) { scene.backgroundEffect('#000000', 300, 0.2); scene.backgroundEffect('#000000', 300, 0.3, 200); }, }, teleport: { anim(scene, [attacker]) { scene.backgroundEffect('#000000', 1000, 0.3); attacker.anim({ xscale: 0.3, time: 200, }, 'linear'); attacker.anim({ y: attacker.y + 200, xscale: 0.1, yscale: 2, opacity: 0.5, time: 300, }, 'accel'); attacker.delay(500); attacker.anim({ opacity: 0, time: 0 }); attacker.anim({ opacity: 1, time: 300 }); }, }, cottonguard: { anim: BattleOtherAnims.selfstatus.anim, }, defendorder: { anim: BattleOtherAnims.selfstatus.anim, }, meditate: { anim: BattleOtherAnims.selfstatus.anim, }, sharpen: { anim: BattleOtherAnims.selfstatus.anim, }, withdraw: { anim(scene, [attacker]) { scene.showEffect('shell', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.5, time: 0, }, { scale: 0.8, opacity: 0.8, time: 400, }, 'linear', 'fade'); attacker.anim({ scale: 0.4, opacity: 0, time: 400, }, 'linear'); attacker.delay(75); attacker.anim({ x: attacker.x, time: 75 }); }, }, roost: { anim(scene, [attacker, defender]) { scene.showEffect('feather', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 0, }, { x: defender.x + 5, y: defender.y - 20, scale: 0.1, opacity: 0.4, time: 300, }, 'ballistic2Under', 'fade'); scene.showEffect('feather', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 100, }, { x: defender.x - 10, y: defender.y - 20, scale: 0.1, opacity: 0.4, time: 400, }, 'ballistic2Under', 'fade'); scene.showEffect('feather', { x: defender.x + 25, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 200, }, { y: defender.y - 20, scale: 0.1, opacity: 0.4, time: 500, }, 'ballistic2Under', 'fade'); scene.showEffect('feather', { x: defender.x - 25, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 300, }, { y: defender.y - 20, scale: 0.1, opacity: 0.4, time: 600, }, 'ballistic2Under', 'fade'); }, }, softboiled: { anim(scene, [attacker]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.75, yscale: 1, opacity: 0.2, time: 0, }, { scale: 0.5, yscale: 0.75, opacity: 0.5, time: 400, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, yscale: 1.5, opacity: 0.2, time: 0, }, { scale: 0.6, yscale: 0.75, opacity: 0.8, time: 400, }, 'linear', 'explode'); }, }, milkdrink: { anim: BattleOtherAnims.consume.anim, }, happyhour: { anim: BattleOtherAnims.selfstatus.anim, }, snatch: { anim: BattleOtherAnims.dance.anim, }, acidarmor: { anim(scene, [attacker]) { scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0.2, time: 0, }, { scale: 0, opacity: 1, time: 300, }, 'linear'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0.2, time: 200, }, { scale: 0, opacity: 1, time: 500, }, 'linear'); }, }, barrier: { anim: BattleOtherAnims.lightstatus.anim, }, morningsun: { anim(scene, [attacker, defender]) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/weather-sunnyday.jpg')`, 700, 0.5); scene.showEffect('wisp', { x: attacker.x + 40, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 0.8, time: 200, }, { y: attacker.y + 130, opacity: 0, time: 600, }, 'accel', 'fade'); scene.showEffect('electroball', { x: attacker.x - 40, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 0.8, time: 300, }, { y: attacker.y + 130, opacity: 0, time: 700, }, 'accel', 'fade'); scene.showEffect('electroball', { x: attacker.x + 20, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 0.8, time: 400, }, { y: attacker.y + 130, opacity: 0, time: 800, }, 'accel', 'fade'); scene.showEffect('wisp', { x: attacker.x - 20, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 0.8, time: 500, }, { y: attacker.y + 130, opacity: 0, time: 900, }, 'accel', 'fade'); }, }, moonlight: { anim(scene, [attacker]) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/bg-space.jpg')`, 800, 0.6); scene.showEffect('moon', { x: attacker.x, y: attacker.y + 150, z: attacker.z, scale: 1, opacity: 0, time: 200, }, { opacity: 0.8, time: 900, }, 'accel', 'fade'); scene.showEffect('shine', { x: attacker.x + 40, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 0.8, time: 200, }, { y: attacker.y + 130, opacity: 0, time: 600, }, 'accel', 'fade'); scene.showEffect('wisp', { x: attacker.x - 40, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 0.8, time: 300, }, { y: attacker.y + 130, opacity: 0, time: 700, }, 'accel', 'fade'); scene.showEffect('wisp', { x: attacker.x + 20, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 0.8, time: 400, }, { y: attacker.y + 130, opacity: 0, time: 800, }, 'accel', 'fade'); scene.showEffect('shine', { x: attacker.x - 20, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 0.8, time: 500, }, { y: attacker.y + 130, opacity: 0, time: 900, }, 'accel', 'fade'); scene.showEffect('wisp', { x: 0, y: +175, z: +50, scale: 1.5, opacity: 1, }, { time: 700, }, 'accel', 'fade'); scene.showEffect('iceball', { x: 0, y: +175, z: +50, scale: 0.5, opacity: 0.8, }, { time: 700, }, 'accel', 'fade'); }, }, lunarblessing: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/bg-space.jpg')`, 900, 0.6); scene.showEffect('moon', { x: attacker.x, y: attacker.y + 150, z: attacker.z, scale: 1, opacity: 0, time: 75, }, { opacity: 0.8, time: 1000, }, 'accel', 'fade'); defender.delay(500); BattleOtherAnims.shake.anim(scene, [defender]); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.3, opacity: 1, time: 100, }, { scale: 1.5, opacity: 0.3, time: 1100, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.4, opacity: 1, time: 100, }, { scale: 1.3, opacity: 0.3, time: 1000, }, 'decel', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.2, time: 0, }, { scale: 0.7, opacity: 0.5, time: 350, }, 'linear', 'explode'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, time: 0, }, { scale: 1.1, opacity: 0, time: 600, }, 'decel', 'fade'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z + 1, scale: 0, opacity: 0.7, time: 300, }, { scale: 1.5, opacity: 0, time: 1200, }, 'decel', 'fade'); scene.showEffect('shine', { x: defender.x + 30, y: defender.y - 50, z: defender.z + 2, scale: 0.3, opacity: 0.6, time: 400, }, { y: defender.y + 130, opacity: 0, time: 1000, }, 'accel', 'fade'); scene.showEffect('shine', { x: defender.x - 30, y: defender.y - 60, z: defender.z + 2, scale: 0.25, opacity: 0.6, time: 600, }, { y: defender.y + 130, opacity: 0, time: 1200, }, 'accel', 'fade'); scene.showEffect('shine', { x: defender.x, y: defender.y - 70, z: defender.z + 2, scale: 0.2, opacity: 0.6, time: 800, }, { y: defender.y + 130, opacity: 0, time: 1400, }, 'accel', 'fade'); } }, }, cosmicpower: { anim(scene, [attacker]) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/bg-space.jpg')`, 600, 0.6); scene.showEffect('wisp', { x: attacker.x + 40, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 1, time: 0, }, { y: attacker.y + 60, opacity: 0, time: 400, }, 'accel'); scene.showEffect('wisp', { x: attacker.x - 40, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 1, time: 200, }, { y: attacker.y + 60, opacity: 0, time: 600, }, 'accel'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y - 40, z: attacker.z, scale: 0.2, opacity: 1, time: 400, }, { y: attacker.y + 60, opacity: 0, time: 800, }, 'accel'); }, }, charge: { anim: BattleOtherAnims.lightstatus.anim, }, luckychant: { anim: BattleOtherAnims.lightstatus.anim, }, geomancy: { anim(scene, [attacker]) { scene.backgroundEffect('#000000', 700, 0.3); scene.showEffect('rainbow', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 1, time: 0, }, { scale: 2, opacity: 0, time: 500, }, 'decel', 'fade'); scene.showEffect('mistball', { x: attacker.x + 40, y: attacker.y - 40, z: attacker.z, scale: 0.5, opacity: 1, time: 0, }, { y: attacker.y + 130, opacity: 0, time: 400, }, 'accel'); scene.showEffect('electroball', { x: attacker.x - 40, y: attacker.y - 40, z: attacker.z, scale: 0.5, opacity: 1, time: 200, }, { y: attacker.y + 130, opacity: 0, time: 600, }, 'accel'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y - 40, z: attacker.z, scale: 0.5, opacity: 1, time: 400, }, { y: attacker.y + 130, opacity: 0, time: 800, }, 'accel'); }, prepareAnim: BattleOtherAnims.chargestatus.anim, }, magnetrise: { anim(scene, [attacker]) { scene.showEffect('wisp', { x: attacker.x + 40, y: attacker.y - 40, z: attacker.z, scale: 0.5, opacity: 1, time: 0, }, { y: attacker.y + 130, opacity: 0, time: 400, }, 'accel'); scene.showEffect('wisp', { x: attacker.x - 40, y: attacker.y - 40, z: attacker.z, scale: 0.5, opacity: 1, time: 200, }, { y: attacker.y + 130, opacity: 0, time: 600, }, 'accel'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y - 40, z: attacker.z, scale: 0.5, opacity: 1, time: 400, }, { y: attacker.y + 130, opacity: 0, time: 800, }, 'accel'); }, }, substitute: { anim() {}, }, batonpass: { anim(scene, [attacker]) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, }, { x: attacker.x, y: attacker.y + 100, z: attacker.z, opacity: 0.1, time: 200, }, 'accel'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y + 100, z: attacker.z, scale: 1, opacity: 0.1, time: 200, }, { scale: 4, opacity: 1, time: 400, }, 'linear', 'explode'); }, }, calmmind: { anim(scene, [attacker]) { scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0.1, time: 0, }, { scale: 0, opacity: 0.5, time: 400, }, 'linear'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0.1, time: 200, }, { scale: 0, opacity: 0.5, time: 600, }, 'linear'); }, }, nastyplot: { anim(scene, [attacker]) { scene.backgroundEffect('#000000', 700, 0.3); scene.showEffect('wisp', { x: attacker.x + 20, y: attacker.y + 30, z: attacker.z, scale: 2, opacity: 1, time: 0, }, { scale: 1, opacity: 0, time: 500, }, 'linear'); scene.showEffect('wisp', { x: attacker.x - 20, y: attacker.y + 30, z: attacker.z, scale: 2, opacity: 1, time: 50, }, { scale: 1, opacity: 0, time: 500, }, 'linear'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y + 60, z: attacker.z, scale: 2, opacity: 1, time: 100, }, { scale: 1, opacity: 0, time: 500, }, 'linear'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 30, z: attacker.z, scale: 0.5, opacity: 1, time: 300, }, { x: attacker.x, y: attacker.y + 40, z: attacker.z, scale: 0.25, time: 750, }, 'decel', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 70, z: attacker.z, scale: 0.5, xscale: 0.25, yscale: 0.75, opacity: 1, time: 300, }, { x: attacker.x, y: attacker.y + 80, z: attacker.z, scale: 0.25, time: 750, }, 'decel', 'fade'); }, }, minimize: { anim(scene, [attacker]) { scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 0, }, { y: attacker.y - 20, scale: 0.75, opacity: 0, time: 400, }, 'accel'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 200, }, { y: attacker.y - 25, scale: 0.5, opacity: 0, time: 600, }, 'accel'); attacker.anim({ y: attacker.y - 30, scale: 0.25, time: 600, }, 'linear'); attacker.anim({ time: 300, }, 'accel'); }, }, growth: { anim(scene, [attacker]) { scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 0, }, { y: attacker.y + 20, scale: 2, opacity: 0, time: 400, }, 'accel'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 200, }, { y: attacker.y + 20, scale: 2, opacity: 0, time: 600, }, 'accel'); attacker.anim({ scale: 1.25, time: 600, }, 'linear'); attacker.anim({ time: 300, }, 'accel'); }, }, tailglow: { anim(scene, [attacker]) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0.2, time: 0, }, { scale: 1, opacity: 0.5, time: 400, }, 'linear', 'explode'); }, }, takeheart: { anim(scene, [attacker]) { scene.backgroundEffect('#000000', 700, 0.2); scene.showEffect('rainbow', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 1, time: 0, }, { scale: 0.5, opacity: 0, time: 450, }, 'decel'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0.2, time: 0, }, { scale: 1, opacity: 0.5, time: 450, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.8, time: 450, }, { scale: 2, opacity: 0, time: 850, }, 'decel'); }, }, trick: { anim(scene, [attacker, defender]) { scene.showEffect('pokeball', { x: attacker.x, y: attacker.y, z: attacker.z, time: 0, }, { x: defender.x, y: defender.y - 30, z: defender.z, time: 300, }, 'ballistic2', 'fade'); scene.showEffect('pokeball', { x: defender.x, y: defender.y, z: defender.z, time: 0, }, { x: attacker.x, y: attacker.y - 30, z: attacker.z, time: 300, }, 'ballistic2Under', 'fade'); scene.showEffect('pokeball', { x: defender.x, y: defender.y - 30, z: defender.z, time: 300, }, { x: attacker.x - 50, y: attacker.y, z: attacker.z, time: 600, }, 'ballistic2', 'fade'); scene.showEffect('pokeball', { x: attacker.x, y: attacker.y - 30, z: attacker.z, time: 300, }, { x: defender.x - 50, y: defender.y, z: defender.z, time: 600, }, 'ballistic2Under', 'fade'); scene.showEffect('pokeball', { x: attacker.x - 50, y: attacker.y, z: attacker.z, time: 600, }, { x: defender.x, y: defender.y, z: defender.z, time: 900, }, 'ballistic2', 'explode'); scene.showEffect('pokeball', { x: defender.x - 50, y: defender.y, z: defender.z, time: 600, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 900, }, 'ballistic2Under', 'explode'); }, }, switcheroo: { anim(scene, [attacker, defender]) { scene.showEffect('pokeball', { x: attacker.x, y: attacker.y, z: attacker.z, time: 0, }, { x: defender.x, y: defender.y - 30, z: defender.z, time: 300, }, 'ballistic2', 'fade'); scene.showEffect('pokeball', { x: defender.x, y: defender.y, z: defender.z, time: 0, }, { x: attacker.x, y: attacker.y - 30, z: attacker.z, time: 300, }, 'ballistic2Under', 'fade'); scene.showEffect('pokeball', { x: defender.x, y: defender.y - 30, z: defender.z, time: 300, }, { x: attacker.x - 50, y: attacker.y, z: attacker.z, time: 600, }, 'ballistic2', 'fade'); scene.showEffect('pokeball', { x: attacker.x, y: attacker.y - 30, z: attacker.z, time: 300, }, { x: defender.x - 50, y: defender.y, z: defender.z, time: 600, }, 'ballistic2Under', 'fade'); scene.showEffect('pokeball', { x: attacker.x - 50, y: attacker.y, z: attacker.z, time: 600, }, { x: defender.x, y: defender.y, z: defender.z, time: 900, }, 'ballistic2', 'explode'); scene.showEffect('pokeball', { x: defender.x - 50, y: defender.y, z: defender.z, time: 600, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 900, }, 'ballistic2Under', 'explode'); }, }, skillswap: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y - 30, z: attacker.z, scale: 1, opacity: 1, time: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0, time: 400, }, 'ballistic2Under'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y - 30, z: attacker.z, scale: 1, opacity: 1, time: 200, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0, time: 600, }, 'ballistic2Under'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 200, }, { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0, time: 600, }, 'ballistic'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 400, }, { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0, time: 800, }, 'ballistic'); }, }, recover: { anim: BattleOtherAnims.chargestatus.anim, }, shadowforce: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 1000, 0.3); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 400, }, { scale: 3, opacity: 0, time: 600, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 500, }, { scale: 3, opacity: 0, time: 700, }, 'linear'); attacker.anim({ opacity: 0, time: 100, }, 'linear'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, opacity: 1, time: 450, }, { x: defender.x, y: defender.y - 100, scale: 2, opacity: 0, time: 950, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, opacity: 1, time: 450, }, { x: defender.x - 60, y: defender.y + 80, scale: 2, opacity: 0, time: 950, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, opacity: 1, time: 450, }, { x: defender.x + 60, y: defender.y + 80, scale: 2, opacity: 0, time: 950, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, opacity: 1, time: 450, }, { x: defender.x - 90, y: defender.y - 40, scale: 2, opacity: 0, time: 950, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, opacity: 1, time: 450, }, { x: defender.x + 90, y: defender.y - 40, scale: 2, opacity: 0, time: 950, }, 'linear', 'fade'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-120), opacity: 0, time: 1, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), opacity: 1, time: 350, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), opacity: 0, time: 300, }, 'linear'); attacker.anim({ opacity: 0, time: 1, }, 'linear'); attacker.anim({ time: 300, opacity: 1, }, 'linear'); defender.delay(380); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, prepareAnim(scene, [attacker]) { scene.backgroundEffect('#000000', 700, 0.3); attacker.anim({ opacity: 0, time: 50 }, 'linear'); attacker.anim({ opacity: 1, time: 50 }, 'linear'); attacker.anim({ opacity: 0, time: 50 }, 'linear'); attacker.anim({ opacity: 1, time: 50 }, 'linear'); attacker.anim({ opacity: 0, time: 50 }, 'linear'); attacker.anim({ opacity: 1, time: 50 }, 'linear'); attacker.anim({ opacity: 0, time: 50 }, 'linear'); attacker.anim({ opacity: 1, time: 50 }, 'linear'); attacker.anim({ opacity: 0, time: 50 }, 'linear'); scene.wait(200); }, }, bounce: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 350, }, { scale: 3, opacity: 0, time: 500, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 450, }, { scale: 3, opacity: 0, time: 600, }, 'linear'); attacker.anim({ y: attacker.y + 80, opacity: 0, time: 100, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y + 80, z: defender.z, opacity: 0, time: 1, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y + 10, z: defender.z, opacity: 1, time: 350, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y + 80, z: defender.z, opacity: 0, time: 300, }, 'linear'); attacker.anim({ x: attacker.x, y: attacker.y + 80, z: defender.z, opacity: 0, time: 1, }, 'linear'); attacker.anim({ time: 300, opacity: 1, }, 'linear'); defender.delay(380); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, prepareAnim(scene, [attacker]) { attacker.anim({ opacity: 0.2, y: attacker.y + 80, time: 300, }, 'linear'); }, }, dig: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 350, }, { scale: 3, opacity: 0, time: 500, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 450, }, { scale: 3, opacity: 0, time: 600, }, 'linear'); attacker.anim({ y: attacker.y - 80, opacity: 0, time: 100, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y - 80, z: defender.z, opacity: 0, time: 1, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y + 10, z: defender.z, opacity: 1, time: 350, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y - 80, z: defender.z, opacity: 0, time: 300, }, 'linear'); attacker.anim({ x: attacker.x, y: attacker.y - 80, z: defender.z, opacity: 0, time: 1, }, 'linear'); attacker.anim({ time: 300, opacity: 1, }, 'linear'); defender.delay(380); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, prepareAnim(scene, [attacker]) { attacker.anim({ opacity: 0.2, y: attacker.y - 80, time: 300, }, 'linear'); }, }, dive: { anim(scene, [attacker, defender]) { scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 350, }, { scale: 3, opacity: 0, time: 500, }, 'linear'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 450, }, { scale: 3, opacity: 0, time: 600, }, 'linear'); attacker.anim({ y: attacker.y - 80, opacity: 0, time: 100, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y - 80, z: defender.z, opacity: 0, time: 1, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y + 10, z: defender.z, opacity: 1, time: 350, }, 'decel'); attacker.anim({ x: defender.x, y: defender.y - 80, z: defender.z, opacity: 0, time: 300, }, 'accel'); attacker.anim({ y: attacker.y - 80, opacity: 0, time: 1, }, 'linear'); attacker.anim({ time: 300, opacity: 1, }, 'decel'); defender.delay(380); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, prepareAnim(scene, [attacker]) { attacker.anim({ opacity: 0.2, y: attacker.y - 80, time: 300, }, 'swing'); }, }, fly: { anim: BattleOtherAnims.flight.anim, prepareAnim(scene, [attacker]) { attacker.anim({ opacity: 0.2, y: attacker.y + 80, time: 300, }, 'linear'); }, }, skydrop: { anim: BattleOtherAnims.contactattack.anim, prepareAnim(scene, [attacker, defender]) { attacker.anim({ opacity: 0.2, y: attacker.y + 80, time: 300, }, 'linear'); defender.anim({ opacity: 0.2, y: defender.y + 80, time: 300, }, 'linear'); }, }, skullbash: { anim: BattleOtherAnims.contactattack.anim, prepareAnim(scene, [attacker]) { attacker.anim({ opacity: 0.8, time: 300, }, 'linear'); }, }, skyattack: { anim: BattleOtherAnims.flight.anim, prepareAnim(scene, [attacker]) { attacker.anim({ opacity: 0.8, time: 300, }, 'linear'); }, }, hiddenpower: { anim(scene, [attacker, defender]) { let xf = [1, -1, 1, -1]; let yf = [1, -1, -1, 1]; let xf2 = [1, 0, -1, 0]; let yf2 = [0, 1, 0, -1]; for (let i = 0; i < 4; i++) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 1, }, { x: attacker.x + 240 * xf[i], y: attacker.y, z: attacker.z + 137 * yf[i], scale: 1, opacity: 0.5, time: 800, }, 'accel', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 1, }, { x: attacker.x + 339 * xf2[i], y: attacker.y, z: attacker.z + 194 * yf2[i], scale: 1, opacity: 0.5, time: 800, }, 'accel', 'fade'); } }, }, storedpower: { anim(scene, [attacker, defender]) { let xf = [1, -1, 1, -1]; let yf = [1, -1, -1, 1]; let xf2 = [1, 0, -1, 0]; let yf2 = [0, 1, 0, -1]; for (let i = 0; i < 4; i++) { scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 1, }, { x: attacker.x + 240 * xf[i], y: attacker.y, z: attacker.z + 137 * yf[i], scale: 1, opacity: 0.5, time: 800, }, 'accel'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 1, }, { x: attacker.x + 339 * xf2[i], y: attacker.y, z: attacker.z + 194 * yf2[i], scale: 1, opacity: 0.5, time: 800, }, 'accel'); } }, }, haze: { anim(scene, [attacker, defender]) { let xf = [1, -1, 1, -1]; let yf = [1, -1, -1, 1]; let xf2 = [1, 0, -1, 0]; let yf2 = [0, 1, 0, -1]; scene.backgroundEffect('#000000', 1000, 0.3); for (let i = 0; i < 4; i++) { scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 1, }, { x: attacker.x + 120 * xf[i], y: attacker.y, z: attacker.z + 68 * yf[i], scale: 1, opacity: 0, time: 800, }, 'decel', 'fade'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 1, }, { x: attacker.x + 113 * xf2[i], y: attacker.y, z: attacker.z + 97 * yf2[i], scale: 1, opacity: 0, time: 800, }, 'decel', 'fade'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 1, }, { x: attacker.x + 120 * xf[i], y: attacker.y, z: attacker.z + 68 * yf[i], scale: 1, opacity: 0, time: 800, }, 'decel', 'fade'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 1, }, { x: attacker.x + 113 * xf2[i], y: attacker.y, z: attacker.z + 97 * yf2[i], scale: 1, opacity: 0, time: 800, }, 'decel', 'fade'); } }, }, seedflare: { anim(scene, [attacker, defender]) { let xf = [1, -1, 1, -1]; let yf = [1, -1, -1, 1]; let xf2 = [1, 0, -1, 0]; let yf2 = [0, 1, 0, -1]; scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.4, time: 0, }, { scale: 8, opacity: 0.1, time: 600, }, 'linear', 'fade'); for (let i = 0; i < 4; i++) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 1, }, { x: attacker.x + 240 * xf[i], y: attacker.y, z: attacker.z + 137 * yf[i], scale: 0.3, opacity: 0.5, time: 800, }, 'accel'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 1, }, { x: attacker.x + 339 * xf2[i], y: attacker.y, z: attacker.z + 194 * yf2[i], scale: 0.3, opacity: 0.5, time: 800, }, 'accel'); } }, }, powerwhip: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 420, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 520, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('leaf1', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x, y: defender.y - 60, scale: 1.5, opacity: 0, time: 1100, }, 'linear', 'fade'); scene.showEffect('leaf2', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x + 60, y: defender.y, scale: 1.5, opacity: 0, time: 1100, }, 'linear', 'fade'); scene.showEffect('leaf2', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x, y: defender.y + 60, scale: 1.5, opacity: 0, time: 1100, }, 'linear', 'fade'); scene.showEffect('leaf1', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x - 60, y: defender.y, scale: 1.5, opacity: 0, time: 1100, }, 'linear', 'fade'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, woodhammer: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 420, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 520, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('leaf1', { x: defender.x, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x, y: defender.y + 10, z: defender.z, scale: 2, opacity: 0.4, time: 700, }, 'decel', 'fade'); scene.showEffect('leaf2', { x: defender.x - 40, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 600, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 2, opacity: 0.4, time: 800, }, 'decel', 'fade'); scene.showEffect('leaf2', { x: defender.x + 40, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 700, }, { x: defender.x + 40, y: defender.y, z: defender.z, scale: 2, opacity: 0.4, time: 900, }, 'decel', 'fade'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, ivycudgel: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 420, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 520, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('leaf1', { x: defender.x, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x, y: defender.y + 10, z: defender.z, scale: 1.25, opacity: 0.4, time: 700, }, 'decel', 'fade'); scene.showEffect('leaf2', { x: defender.x - 40, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 600, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1.25, opacity: 0.4, time: 800, }, 'decel', 'fade'); scene.showEffect('leaf2', { x: defender.x + 40, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 700, }, { x: defender.x + 40, y: defender.y, z: defender.z, scale: 1.25, opacity: 0.4, time: 900, }, 'decel', 'fade'); defender.delay(420); defender.anim({ y: defender.y - 30, z: defender.behind(20), yscale: 0.5, time: 0, }, 'swing'); defender.anim({ time: 480, }, 'swing'); }, }, ivycudgelwater: { anim(scene, [attacker, defender]) { scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 420, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 520, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('iceball', { x: defender.x, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x, y: defender.y + 10, z: defender.z, scale: 1.25, opacity: 0.4, time: 700, }, 'decel', 'fade'); scene.showEffect('iceball', { x: defender.x - 40, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 600, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1.25, opacity: 0.4, time: 800, }, 'decel', 'fade'); scene.showEffect('iceball', { x: defender.x + 40, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 700, }, { x: defender.x + 40, y: defender.y, z: defender.z, scale: 1.25, opacity: 0.4, time: 900, }, 'decel', 'fade'); defender.delay(420); defender.anim({ y: defender.y - 30, z: defender.behind(20), yscale: 0.5, time: 0, }, 'swing'); defender.anim({ time: 480, }, 'swing'); }, }, ivycudgelfire: { anim(scene, [attacker, defender]) { scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 420, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 520, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('fireball', { x: defender.x, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x, y: defender.y + 10, z: defender.z, scale: 1.25, opacity: 0.4, time: 700, }, 'decel', 'fade'); scene.showEffect('fireball', { x: defender.x - 40, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 600, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1.25, opacity: 0.4, time: 800, }, 'decel', 'fade'); scene.showEffect('fireball', { x: defender.x + 40, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 700, }, { x: defender.x + 40, y: defender.y, z: defender.z, scale: 1.25, opacity: 0.4, time: 900, }, 'decel', 'fade'); defender.delay(420); defender.anim({ y: defender.y - 30, z: defender.behind(20), yscale: 0.5, time: 0, }, 'swing'); defender.anim({ time: 480, }, 'swing'); }, }, ivycudgelrock: { anim(scene, [attacker, defender]) { scene.showEffect('mudwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 420, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('mudwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 520, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('rock1', { x: defender.x, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x, y: defender.y + 10, z: defender.z, scale: 1.25, opacity: 0.4, time: 700, }, 'decel', 'fade'); scene.showEffect('rock2', { x: defender.x - 40, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 600, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1.25, opacity: 0.4, time: 800, }, 'decel', 'fade'); scene.showEffect('rock3', { x: defender.x + 40, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 700, }, { x: defender.x + 40, y: defender.y, z: defender.z, scale: 1.25, opacity: 0.4, time: 900, }, 'decel', 'fade'); defender.delay(420); defender.anim({ y: defender.y - 30, z: defender.behind(20), yscale: 0.5, time: 0, }, 'swing'); defender.anim({ time: 480, }, 'swing'); }, }, crushclaw: { anim: BattleOtherAnims.clawattack.anim, }, falseswipe: { anim: BattleOtherAnims.slashattack.anim, }, direclaw: { anim: BattleOtherAnims.clawattack.anim, }, dragonclaw: { anim: BattleOtherAnims.clawattack.anim, }, metalclaw: { anim: BattleOtherAnims.clawattack.anim, }, furycutter: { anim: BattleOtherAnims.slashattack.anim, }, scratch: { anim: BattleOtherAnims.slashattack.anim, }, cut: { anim: BattleOtherAnims.slashattack.anim, }, slash: { anim: BattleOtherAnims.slashattack.anim, }, nightslash: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.3); scene.showEffect('rightslash', { x: defender.x + 5, y: defender.y + 20, z: defender.z, scale: 1, opacity: 1, time: 500, }, { scale: 3, opacity: 0, time: 800, }, 'linear', 'fade'); scene.showEffect('rightslash', { x: defender.x - 5, y: defender.y - 20, z: defender.z, scale: 1, opacity: 1, time: 600, }, { scale: 3, opacity: 0, time: 900, }, 'linear', 'fade'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, shadowclaw: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.3); BattleOtherAnims.clawattack.anim(scene, [attacker, defender]); }, }, multiattack: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 1100, 0.3); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.5, }, { scale: 2, opacity: 0, time: 300, }, 'decel'); scene.showEffect('rightslash', { x: defender.x + 5, y: defender.y + 20, z: defender.z, scale: 1, opacity: 1, time: 800, }, { scale: 3, opacity: 0, time: 1100, }, 'linear', 'fade'); scene.showEffect('rightslash', { x: defender.x - 5, y: defender.y - 20, z: defender.z, scale: 1, opacity: 1, time: 800, }, { scale: 3, opacity: 0, time: 1100, }, 'linear', 'fade'); attacker.delay(300); defender.delay(300); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, holdback: { anim: BattleOtherAnims.contactattack.anim, }, knockdown: { anim: BattleOtherAnims.contactattack.anim, }, seismictoss: { anim(scene, [attacker, defender]) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/bg-space.jpg')`, 500, 0.6, 300); scene.showEffect('wisp', { x: defender.x, y: defender.y + 10, z: defender.z, scale: 0, opacity: 0.5, time: 400, }, { scale: 3, opacity: 0, time: 600, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 350, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y + 10, z: defender.behind(5), time: 50, }, 'ballistic2Under'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(380); defender.anim({ y: defender.y + 100, z: defender.behind(5), opacity: 0.5, time: 300, }, 'decel'); defender.anim({ time: 250, }, 'accel'); defender.anim({ x: defender.x, y: defender.y - 35, yscale: 0.25, time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); scene.wait(1000); }, }, peck: { anim: BattleOtherAnims.contactattack.anim, }, drillpeck: { anim: BattleOtherAnims.contactattack.anim, }, irontail: { anim: BattleOtherAnims.contactattack.anim, }, bite: { anim(scene, [attacker, defender]) { BattleOtherAnims.bite.anim(scene, [attacker, defender]); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, superfang: { anim(scene, [attacker, defender]) { BattleOtherAnims.bite.anim(scene, [attacker, defender]); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, bugbite: { anim(scene, [attacker, defender]) { BattleOtherAnims.bite.anim(scene, [attacker, defender]); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, crunch: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 800, 0.3); scene.showEffect('topbite', { x: defender.x, y: defender.y + 70, z: defender.z, scale: 0.65, opacity: 0, time: 370, }, { y: defender.y + 20, opacity: 1, time: 500, }, 'linear', 'explode'); scene.showEffect('bottombite', { x: defender.x, y: defender.y - 70, z: defender.z, scale: 0.65, opacity: 0, time: 370, }, { y: defender.y - 20, opacity: 1, time: 500, }, 'linear', 'explode'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, pursuit: { anim(scene, [attacker, defender]) { scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.behind(15), scale: 0, opacity: 0.2, time: 600, }, { scale: 1.5, opacity: 0, time: 1000, }, 'linear'); attacker.delay(300); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-20), time: 300, }, 'ballistic2Under'); attacker.anim({ x: defender.leftof(5), y: defender.y, z: defender.behind(15), time: 50, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.anim({ x: defender.x, y: defender.y, z: defender.behind(15), time: 600, }, 'accel'); defender.delay(25); defender.anim({ x: defender.x, y: defender.y, z: defender.behind(30), time: 100, }, 'swing'); defender.anim({ time: 400, }, 'swing'); }, }, blazekick: { anim(scene, [attacker, defender]) { scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); BattleOtherAnims.kick.anim(scene, [attacker, defender]); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, lowkick: { anim(scene, [attacker, defender]) { scene.showEffect('foot', { x: defender.x, y: defender.y - 40, z: defender.behind(15), scale: 1, opacity: 1, time: 400, }, { x: defender.x - 50, z: defender.behind(20), scale: 1.7, opacity: 0, time: 650, }, 'linear'); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-20), time: 400, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, time: 50, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.delay(425); defender.anim({ x: defender.leftof(-15), y: defender.y, z: defender.behind(20), time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, stomp: { anim(scene, [attacker, defender]) { scene.showEffect('foot', { x: defender.x, y: defender.y + 80, z: defender.behind(-15), scale: 1.5, opacity: 0.8, time: 400, }, { y: defender.y - 10, z: defender.z, scale: 1, opacity: 1, time: 500, }, 'linear', 'explode'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 1, time: 500, }, { x: defender.x + 70, scale: 0.8, opacity: 0.3, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 1, time: 500, }, { x: defender.x - 70, scale: 0.8, opacity: 0.3, time: 800, }, 'linear', 'fade'); attacker.anim({ x: defender.x, y: defender.y + 80, z: defender.behind(-30), time: 400, }, 'ballistic'); attacker.anim({ x: defender.x, y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 600, }, 'ballistic2Back'); defender.delay(450); defender.anim({ y: defender.y - 30, z: defender.behind(20), yscale: 0.5, time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, thunderouskick: { anim(scene, [attacker, defender]) { BattleOtherAnims.kick.anim(scene, [attacker, defender]); scene.backgroundEffect('#ffffff', 300, 0.7); scene.backgroundEffect('#000000', 1000, 0.7, 100); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 420, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 520, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('lightning', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.8, time: 550, }, { x: defender.x + 60, y: defender.y - 20, z: defender.z, scale: 1, opacity: 0.5, time: 825, }, 'decel', 'explode'); scene.showEffect('lightning', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.8, time: 575, }, { x: defender.x - 50, y: defender.y - 20, z: defender.z, scale: 1, opacity: 0.5, time: 850, }, 'decel', 'explode'); scene.showEffect('lightning', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.8, time: 600, }, { x: defender.x - 60, y: defender.y + 20, z: defender.z, scale: 1, opacity: 0.5, time: 875, }, 'decel', 'explode'); scene.showEffect('lightning', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.8, time: 625, }, { x: defender.x + 50, y: defender.y + 30, z: defender.z, scale: 1, opacity: 0.5, time: 900, }, 'decel', 'explode'); scene.showEffect('lightning', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.8, time: 650, }, { x: defender.x - 10, y: defender.y + 60, z: defender.z, scale: 1, opacity: 0.5, time: 925, }, 'decel', 'explode'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, tropkick: { anim(scene, [attacker, defender]) { BattleOtherAnims.kick.anim(scene, [attacker, defender]); scene.backgroundEffect('#9AB440', 300, 0.3, 500); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 420, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 520, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('petal', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.8, time: 550, }, { x: defender.x + 60, y: defender.y - 20, z: defender.z, scale: 1, opacity: 0.5, time: 825, }, 'decel', 'explode'); scene.showEffect('petal', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.8, time: 575, }, { x: defender.x - 50, y: defender.y - 20, z: defender.z, scale: 1, opacity: 0.5, time: 850, }, 'decel', 'explode'); scene.showEffect('petal', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.8, time: 600, }, { x: defender.x - 60, y: defender.y + 20, z: defender.z, scale: 1, opacity: 0.5, time: 875, }, 'decel', 'explode'); scene.showEffect('petal', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.8, time: 625, }, { x: defender.x + 50, y: defender.y + 30, z: defender.z, scale: 1, opacity: 0.5, time: 900, }, 'decel', 'explode'); scene.showEffect('petal', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.8, time: 650, }, { x: defender.x - 10, y: defender.y + 60, z: defender.z, scale: 1, opacity: 0.5, time: 925, }, 'decel', 'explode'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, jumpkick: { anim(scene, [attacker, defender]) { BattleOtherAnims.kick.anim(scene, [attacker, defender]); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, highjumpkick: { anim(scene, [attacker, defender]) { scene.showEffect(attacker.sp, { x: defender.leftof(-10), y: attacker.y + 170, z: attacker.behind(-35), opacity: 0.3, time: 25, }, { x: defender.x, y: defender.y, z: defender.behind(0), }, 'ballistic', 'fade'); scene.showEffect(attacker.sp, { x: defender.leftof(-10), y: attacker.y + 170, z: attacker.behind(-35), opacity: 0.3, time: 75, }, { x: defender.x, y: defender.y, z: defender.behind(0), }, 'ballistic', 'fade'); scene.showEffect('foot', { x: defender.x, y: defender.y + 20, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x, y: defender.y + 10, z: defender.behind(15), scale: 2, opacity: 0, time: 900, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.7, time: 500, }, { scale: 3, opacity: 0, time: 750, }, 'linear', 'fade'); attacker.anim({ x: defender.x, y: defender.y + 170, z: defender.behind(-30), time: 400, }, 'ballistic'); attacker.anim({ x: defender.x, y: defender.y + 5, z: defender.z, time: 200, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(500); defender.anim({ y: defender.y - 5, z: defender.behind(40), yscale: 0.9, time: 300, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, ironhead: { anim(scene, [attacker, defender]) { scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.2, time: 450, }, { scale: 2, opacity: 0, time: 700, }, 'linear'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, heartstamp: { anim(scene, [attacker, defender]) { scene.showEffect('heart', { x: defender.leftof(-20), y: defender.y + 15, z: defender.z, scale: 1, opacity: 0.5, time: 450, }, { scale: 4, opacity: 0, time: 700, }, 'linear'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, slam: { anim: BattleOtherAnims.contactattack.anim, }, dragontail: { anim: BattleOtherAnims.contactattack.anim, }, reversal: { anim: BattleOtherAnims.contactattack.anim, }, punishment: { anim: BattleOtherAnims.contactattack.anim, }, forcepalm: { anim(scene, [attacker, defender]) { scene.showEffect('rightchop', { x: defender.x, y: defender.y, z: defender.z - 10, scale: 0.6, opacity: 0.1, time: 350, }, { x: defender.x + 20, scale: 0.5, opacity: 1, time: 500, }, 'linear', 'fade'); scene.showEffect('rightchop', { x: defender.x + 20, y: defender.y, z: defender.z - 10, scale: 0.5, opacity: 1, time: 500, }, { x: defender.x - 15, opacity: 0, time: 800, }, 'decel', 'fade'); scene.showEffect('rightchop', { x: defender.x + 20, y: defender.y, z: defender.z - 10, scale: 0.5, opacity: 0.3, time: 575, }, { x: defender.x - 15, opacity: 0, time: 850, }, 'decel', 'fade'); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-20), time: 400, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, time: 50, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.delay(425); defender.anim({ x: defender.leftof(-15), y: defender.y, z: defender.behind(15), time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, circlethrow: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.leftof(-20), z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { x: defender.leftof(-20), z: defender.behind(20), scale: 0.6, opacity: 0, time: 800, }, 'linear'); scene.showEffect('rightchop', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 400, }, { x: defender.leftof(-20), z: defender.behind(20), scale: 1, opacity: 0, time: 800, }, 'linear'); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-20), time: 400, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, time: 50, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.delay(425); defender.anim({ x: defender.leftof(-15), y: defender.y, z: defender.behind(15), time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, knockoff: { anim: BattleOtherAnims.contactattack.anim, }, assurance: { anim: BattleOtherAnims.contactattack.anim, }, chipaway: { anim: BattleOtherAnims.contactattack.anim, }, bodyslam: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 1, time: 500, }, { x: defender.x + 70, scale: 0.8, opacity: 0.3, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 1, time: 500, }, { x: defender.x - 70, scale: 0.8, opacity: 0.3, time: 800, }, 'linear', 'fade'); attacker.anim({ x: defender.x, y: defender.y + 80, z: defender.behind(-30), time: 400, }, 'ballistic'); attacker.anim({ x: defender.x, y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 600, }, 'ballistic2Back'); defender.delay(450); defender.anim({ y: defender.y - 30, z: defender.behind(20), yscale: 0.5, time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, bloodmoon: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.x - 100 - attacker.x) / 5; let zstep = (defender.z - attacker.z) / 5; scene.backgroundEffect('#000000', 1700, 0.8); scene.showEffect('moon', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0, time: 0, }, { x: attacker.x, y: attacker.y + 100, z: attacker.z, scale: 1, opacity: 0.9, time: 0, }, 'decel'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.5, opacity: 0, time: 0, }, { x: attacker.x, y: attacker.y + 100, z: attacker.z, scale: 1.5, opacity: 0.7, time: 0, }, 'decel', '', { filter: 'hue-rotate(-45deg)' }); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 100, z: attacker.z, scale: 2.5, opacity: 1, time: 500, }, { scale: 3, opacity: 0, time: 1300, }, 'decel', '', { filter: 'hue-rotate(-45deg)' }); for (let i = 0; i < 5; i++) { scene.showEffect('flareball', { x: attacker.x + xstep * (i + 1), y: (attacker.y + 100) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1.5, opacity: 1, time: 40 * i + 700, }, { scale: 1, opacity: 0, time: 60 * i + 1500, }, 'linear', '', { filter: 'hue-rotate(-45deg)' }); } scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 100, z: attacker.z, scale: 0.4, opacity: 0.6, time: 800, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 1000, }, 'linear', 'explode', { filter: 'hue-rotate(-45deg)' }); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 100, z: attacker.z, scale: 0.4, opacity: 0.6, time: 875, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 1075, }, 'linear', 'explode', { filter: 'hue-rotate(-45deg)' }); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 100, z: attacker.z, scale: 0.4, opacity: 0.6, time: 950, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 1150, }, 'linear', 'explode', { filter: 'hue-rotate(-45deg)' }); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 100, z: attacker.z, scale: 0.4, opacity: 0.6, time: 1025, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 1225, }, 'linear', 'explode', { filter: 'hue-rotate(-45deg)' }); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 100, z: attacker.z, scale: 0.4, opacity: 0.6, time: 1100, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 1300, }, 'linear', 'explode', { filter: 'hue-rotate(-45deg)' }); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 100, z: attacker.z, scale: 0.4, opacity: 0.6, time: 1175, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 1375, }, 'linear', 'explode', { filter: 'hue-rotate(-45deg)' }); scene.showEffect('flareball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 1, xscale: 3, opacity: 0.5, time: 1375, }, { scale: 3, xscale: 8, opacity: 0.1, time: 1675, }, 'linear', 'explode', { filter: 'hue-rotate(-45deg)' }); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.behind(5), scale: 0, opacity: 1, time: 1175, }, { scale: 8, opacity: 0, time: 1375, }, 'linear', '', { filter: 'hue-rotate(-45deg)' }); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.behind(10), scale: 0, opacity: 1, time: 1275, }, { scale: 8, opacity: 0, time: 1675, }, 'linear', '', { filter: 'hue-rotate(-45deg)' }); defender.delay(775); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(10), time: 300, }, 'decel'); defender.anim({ time: 300, }, 'swing'); }, }, gigatonhammer: { anim(scene, [attacker, defender]) { scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 450, }, { scale: 2, opacity: 0, time: 700, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 1, time: 500, }, { x: defender.x + 70, scale: 0.8, opacity: 0.3, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 1, time: 500, }, { x: defender.x - 70, scale: 0.8, opacity: 0.3, time: 800, }, 'linear', 'fade'); defender.delay(450); defender.anim({ y: defender.y - 30, z: defender.behind(20), yscale: 0.5, time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, heavyslam: { anim(scene, [attacker, defender]) { scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 450, }, { scale: 2, opacity: 0, time: 700, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 1, time: 500, }, { x: defender.x + 70, scale: 0.8, opacity: 0.3, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 1, time: 500, }, { x: defender.x - 70, scale: 0.8, opacity: 0.3, time: 800, }, 'linear', 'fade'); attacker.anim({ x: defender.x, y: defender.y + 80, z: defender.behind(-30), time: 400, }, 'ballistic'); attacker.anim({ x: defender.x, y: defender.y + 5, z: defender.behind(20), time: 100, }); attacker.anim({ time: 600, }, 'ballistic2Back'); defender.delay(450); defender.anim({ y: defender.y - 30, z: defender.behind(20), yscale: 0.5, time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, steamroller: { anim: BattleOtherAnims.contactattack.anim, }, pound: { anim: BattleOtherAnims.contactattack.anim, }, clamp: { anim: BattleOtherAnims.contactattack.anim, }, wakeupslap: { anim(scene, [attacker, defender]) { scene.showEffect('rightchop', { x: defender.x + 30, y: defender.y, z: defender.behind(-10), scale: 0.6, opacity: 1, time: 400, }, { x: defender.x - 10, y: defender.y - 10, xscale: 0, opacity: 0.5, time: 512.5, }, 'linear', 'fade'); scene.showEffect('leftchop', { x: defender.x, y: defender.y - 10, z: defender.behind(-10), scale: 0.6, xscale: 0, opacity: 1, time: 512.5, }, { x: defender.x - 30, y: defender.y, xscale: 0.6, opacity: 0, time: 625, }, 'linear', 'fade'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, smellingsalts: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('rightchop', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 0.9, opacity: 0, time: 800, }, 'linear'); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-20), time: 400, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, time: 50, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.delay(425); defender.anim({ x: defender.leftof(-15), y: defender.y, z: defender.behind(15), time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, karatechop: { anim(scene, [attacker, defender]) { scene.showEffect('rightchop', { x: defender.leftof(30), y: defender.y + 50, z: defender.behind(-10), scale: 0.6, opacity: 1, time: 475, }, { y: defender.y - 20, opacity: 0.5, time: 550, }, 'linear', 'fade'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, crosschop: { anim(scene, [attacker, defender]) { scene.showEffect('rightslash', { x: defender.x - 10, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 425, }, { scale: 3, opacity: 0, time: 800, }, 'linear', 'fade'); scene.showEffect('leftslash', { x: defender.x + 10, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 425, }, { scale: 3, opacity: 0, time: 800, }, 'linear', 'fade'); scene.showEffect('leftchop', { x: defender.x + 60, y: defender.y + 70, z: defender.z, scale: 0.75, opacity: 1, time: 400, }, { x: defender.x - 60, y: defender.y - 70, scale: 0.5, opacity: 0, time: 600, }, 'linear', 'fade'); scene.showEffect('rightchop', { x: defender.x - 60, y: defender.y + 70, z: defender.z, scale: 0.75, opacity: 1, time: 400, }, { x: defender.x + 60, y: defender.y - 70, scale: 0.5, opacity: 0, time: 600, }, 'linear', 'fade'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, lick: { anim: BattleOtherAnims.contactattack.anim, }, visegrip: { anim: BattleOtherAnims.contactattack.anim, }, headbutt: { anim: BattleOtherAnims.contactattack.anim, }, block: { anim(scene, [attacker, defender]) { scene.showEffect('rightslash', { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0.5, }, { scale: 1, opacity: 1, time: 400, }, 'linear', 'explode'); scene.showEffect('leftslash', { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0.5, }, { scale: 1, opacity: 1, time: 400, }, 'linear', 'explode'); }, }, xscissor: { anim(scene, [attacker, defender]) { attacker.anim({ x: defender.leftof(-30), y: defender.y + 80, z: defender.behind(-30), time: 300, }, 'ballistic'); attacker.anim({ x: defender.leftof(30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ x: defender.leftof(30), y: defender.y + 80, z: defender.behind(-30), time: 200, }, 'ballisticUp'); attacker.anim({ x: defender.leftof(-30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(450); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 200, }, 'swing'); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); scene.showEffect('rightslash', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 425, }, { scale: 2, opacity: 0.5, time: 725, }, 'linear', 'fade'); scene.showEffect('rightslash', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 625, }, { scale: 3, opacity: 0, time: 1000, }, 'linear', 'fade'); scene.showEffect('leftslash', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 625, }, { scale: 3, opacity: 0, time: 1000, }, 'linear', 'fade'); }, }, crosspoison: { anim(scene, [attacker, defender]) { attacker.anim({ x: defender.leftof(-30), y: defender.y + 80, z: defender.behind(-30), time: 300, }, 'ballistic'); attacker.anim({ x: defender.leftof(30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ x: defender.leftof(30), y: defender.y + 80, z: defender.behind(-30), time: 200, }, 'ballisticUp'); attacker.anim({ x: defender.leftof(-30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(450); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 200, }, 'swing'); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); scene.showEffect('rightslash', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 425, }, { scale: 2, opacity: 0.5, time: 725, }, 'linear', 'fade'); scene.showEffect('rightslash', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 625, }, { scale: 3, opacity: 0, time: 1000, }, 'linear', 'fade'); scene.showEffect('leftslash', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 625, }, { scale: 3, opacity: 0, time: 1000, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 450, }, { x: defender.x + 30, y: defender.y + 10, scale: 1, opacity: 0.5, time: 750, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 550, }, { x: defender.x - 30, y: defender.y - 40, scale: 1, opacity: 0.5, time: 850, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 650, }, { x: defender.x - 10, y: defender.y + 40, scale: 1, opacity: 0.5, time: 950, }, 'decel', 'fade'); }, }, facade: { anim: BattleOtherAnims.xattack.anim, }, guillotine: { anim: BattleOtherAnims.xattack.anim, }, return: { anim(scene, [attacker, defender]) { scene.showEffect('heart', { x: attacker.x - 10, y: attacker.y + 50, z: attacker.z, scale: 0.5, opacity: 1, time: 0, }, { scale: 3, opacity: 0, time: 300, }, 'ballistic2Under', 'fade'); attacker.delay(300); attacker.anim({ x: defender.leftof(-30), y: defender.y + 80, z: defender.behind(-30), time: 300, }, 'ballistic'); attacker.anim({ x: defender.leftof(30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ x: defender.leftof(30), y: defender.y + 80, z: defender.behind(-30), time: 200, }, 'ballisticUp'); attacker.anim({ x: defender.leftof(-30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(750); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 200, }, 'swing'); defender.anim({ z: defender.behind(15), time: 300, }, 'decel'); defender.anim({ time: 300, }, 'swing'); scene.showEffect('foot', { x: defender.x - 10, y: defender.y + 20, z: defender.z, scale: 1, opacity: 1, time: 650, }, { x: defender.x - 15, y: defender.y + 10, z: defender.behind(15), scale: 2, opacity: 0, time: 950, }, 'linear'); scene.showEffect('fist', { x: defender.x - 5, y: defender.y - 5, z: defender.z, scale: 0.6, opacity: 0.6, time: 675, }, { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 1, opacity: 1, time: 875, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x + 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.6, time: 700, }, { x: defender.x + 20, y: defender.y + 20, z: defender.z, scale: 1, opacity: 1, time: 900, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.6, time: 725, }, { x: defender.x + 30, y: defender.y - 25, z: defender.z, scale: 1, opacity: 1, time: 925, }, 'linear', 'explode'); scene.showEffect('foot', { x: defender.x, y: defender.y + 20, z: defender.z, scale: 1, opacity: 1, time: 1000, }, { x: defender.x, y: defender.y + 10, z: defender.behind(15), scale: 2, opacity: 0, time: 1300, }, 'linear'); }, }, leafblade: { anim(scene, [attacker, defender]) { BattleOtherAnims.xattack.anim(scene, [attacker, defender]); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.5, time: 450, }, { scale: 2, opacity: 0.2, time: 750, }, 'linear', 'fade'); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.5, time: 750, }, { scale: 2, opacity: 0.2, time: 1050, }, 'linear', 'fade'); scene.showEffect('leaf1', { x: defender.x - 35, y: defender.y - 10, z: defender.z, scale: 0.5, opacity: 0.7, time: 450, }, { scale: 3, opacity: 0, time: 750, }, 'linear'); scene.showEffect('leaf2', { x: defender.x + 35, y: defender.y - 15, z: defender.z, scale: 0.8, opacity: 0.7, time: 550, }, { scale: 3.5, opacity: 0, time: 850, }, 'linear'); scene.showEffect('leftslash', { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 1.5, opacity: 0.6, time: 450, }, { scale: 2, opacity: 0, time: 800, }, 'accel', 'fade'); scene.showEffect('leaf1', { x: defender.x - 35, y: defender.y - 15, z: defender.z, scale: 0.5, opacity: 0.7, time: 750, }, { scale: 3, opacity: 0, time: 1050, }, 'linear'); scene.showEffect('leaf2', { x: defender.x + 35, y: defender.y - 10, z: defender.z, scale: 0.8, opacity: 0.7, time: 800, }, { scale: 3.5, opacity: 0, time: 1190, }, 'linear'); scene.showEffect('rightslash', { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 1.5, opacity: 0.6, time: 750, }, { scale: 2, opacity: 0, time: 1100, }, 'accel', 'fade'); }, }, thrash: { anim(scene, [attacker, defender]) { scene.showEffect('angry', { x: attacker.x - 10, y: attacker.y + 50, z: attacker.z, scale: 0.5, opacity: 1, time: 0, }, { scale: 3, opacity: 0, time: 300, }, 'ballistic2Under', 'fade'); attacker.delay(300); attacker.anim({ x: defender.leftof(-30), y: defender.y + 80, z: defender.behind(-30), time: 300, }, 'ballistic'); attacker.anim({ x: defender.leftof(30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ x: defender.leftof(30), y: defender.y + 80, z: defender.behind(-30), time: 200, }, 'ballisticUp'); attacker.anim({ x: defender.leftof(-30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(750); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 200, }, 'swing'); defender.anim({ z: defender.behind(15), time: 300, }, 'decel'); defender.anim({ time: 300, }, 'swing'); scene.showEffect('foot', { x: defender.x - 10, y: defender.y + 20, z: defender.z, scale: 1, opacity: 1, time: 650, }, { x: defender.x - 15, y: defender.y + 10, z: defender.behind(15), scale: 2, opacity: 0, time: 950, }, 'linear'); scene.showEffect('fist', { x: defender.x - 5, y: defender.y - 5, z: defender.z, scale: 0.6, opacity: 0.6, time: 675, }, { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 1, opacity: 1, time: 875, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x + 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.6, time: 700, }, { x: defender.x + 20, y: defender.y + 20, z: defender.z, scale: 1, opacity: 1, time: 900, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.6, time: 725, }, { x: defender.x + 30, y: defender.y - 25, z: defender.z, scale: 1, opacity: 1, time: 925, }, 'linear', 'explode'); scene.showEffect('foot', { x: defender.x, y: defender.y + 20, z: defender.z, scale: 1, opacity: 1, time: 1000, }, { x: defender.x, y: defender.y + 10, z: defender.behind(15), scale: 2, opacity: 0, time: 1300, }, 'linear'); }, }, pluck: { anim: BattleOtherAnims.xattack.anim, }, bind: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: defender.x, y: defender.y + 15, z: defender.z, scale: 0.7, xscale: 2, opacity: 0.3, time: 500, }, { scale: 0.4, xscale: 1, opacity: 0.1, time: 1100, }, 'decel', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y - 5, z: defender.z, scale: 0.7, xscale: 2, opacity: 0.3, time: 550, }, { scale: 0.4, xscale: 1, opacity: 0.1, time: 1150, }, 'decel', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y - 20, z: defender.z, scale: 0.7, xscale: 2, opacity: 0.3, time: 600, }, { scale: 0.4, xscale: 1, opacity: 0.1, time: 1200, }, 'decel', 'fade'); attacker.anim({ x: defender.leftof(-30), y: defender.y + 80, z: defender.behind(-30), time: 400, }, 'ballistic'); attacker.anim({ x: defender.leftof(30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ x: defender.leftof(30), y: defender.y + 80, z: defender.behind(-30), time: 200, }, 'ballisticUp'); attacker.anim({ x: defender.leftof(-30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(450); defender.anim({ y: defender.y + 15, z: defender.behind(10), yscale: 1.3, time: 200, }, 'swing'); defender.anim({ time: 200, }, 'swing'); defender.delay(25); defender.anim({ x: defender.leftof(-10), y: defender.y + 15, z: defender.behind(5), yscale: 1.3, time: 200, }, 'swing'); defender.anim({ time: 200, }, 'swing'); }, }, dualchop: { anim: BattleOtherAnims.xattack.anim, }, doublehit: { anim: BattleOtherAnims.xattack.anim, }, doubleslap: { anim: BattleOtherAnims.xattack.anim, }, closecombat: { anim(scene, [attacker, defender]) { attacker.anim({ x: defender.leftof(-30), y: defender.y + 80, z: defender.behind(-30), time: 350, }, 'ballistic'); attacker.anim({ x: defender.leftof(30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ x: defender.leftof(30), y: defender.y + 80, z: defender.behind(-30), time: 150, }, 'ballisticUp'); attacker.anim({ x: defender.leftof(-30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(450); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 200, }, 'swing'); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.6, time: 425, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 525, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x - 10, y: defender.y + 20, z: defender.z, scale: 0.6, opacity: 0.6, time: 450, }, { x: defender.x - 20, y: defender.y + 30, z: defender.z, scale: 1, opacity: 1, time: 550, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x + 30, y: defender.y - 20, z: defender.z, scale: 0.6, opacity: 0.6, time: 475, }, { x: defender.x + 35, y: defender.y - 30, z: defender.z, scale: 1, opacity: 1, time: 575, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x - 30, y: defender.y - 20, z: defender.z, scale: 0.6, opacity: 0.6, time: 575, }, { x: defender.x - 35, y: defender.y - 30, z: defender.z, scale: 1, opacity: 1, time: 775, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.6, time: 600, }, { x: defender.x + 10, y: defender.y - 15, z: defender.z, scale: 1, opacity: 1, time: 750, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.6, time: 650, }, { x: defender.x - 10, y: defender.y + 15, z: defender.z, scale: 1, opacity: 1, time: 800, }, 'linear', 'explode'); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.4, time: 525, }, { scale: 3, opacity: 0, time: 825, }, 'linear'); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.4, time: 750, }, { scale: 3, opacity: 0, time: 1050, }, 'linear'); }, }, doublekick: { anim(scene, [attacker, defender]) { scene.showEffect('foot', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 450, }, { x: defender.leftof(20), y: defender.y, z: defender.behind(20), scale: 2, opacity: 0, time: 750, }, 'linear'); scene.showEffect('foot', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 750, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 2, opacity: 0, time: 1050, }, 'linear'); BattleOtherAnims.xattack.anim(scene, [attacker, defender]); }, }, endeavor: { anim(scene, [attacker, defender]) { scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 450, }, { x: defender.leftof(20), y: defender.y, z: defender.behind(20), scale: 0, opacity: 1, time: 750, }, 'linear', 'fade'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 750, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 0, opacity: 1, time: 1050, }, 'linear', 'fade'); BattleOtherAnims.xattack.anim(scene, [attacker, defender]); }, }, playrough: { anim(scene, [attacker, defender]) { scene.showEffect('fist', { x: defender.x - 10, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 425, }, { x: defender.x - 15, y: defender.y - 10, z: defender.behind(15), scale: 2, opacity: 0, time: 725, }, 'linear'); scene.showEffect('mudwisp', { x: defender.x - 5, y: defender.y - 5, z: defender.z, scale: 0.6, opacity: 0.6, time: 450, }, { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 1, opacity: 0.8, time: 550, }, 'linear', 'explode'); scene.showEffect('mudwisp', { x: defender.x + 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.6, time: 575, }, { x: defender.x + 20, y: defender.y + 20, z: defender.z, scale: 1, opacity: 0.8, time: 675, }, 'linear', 'explode'); scene.showEffect('mudwisp', { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.6, time: 600, }, { x: defender.x + 30, y: defender.y - 25, z: defender.z, scale: 1, opacity: 0.8, time: 700, }, 'linear', 'explode'); scene.showEffect('foot', { x: defender.x, y: defender.y + 20, z: defender.z, scale: 1, opacity: 1, time: 750, }, { x: defender.x, y: defender.y + 10, z: defender.behind(15), scale: 2, opacity: 0, time: 1100, }, 'linear'); scene.showEffect('heart', { x: defender.x - 10, y: defender.y + 20, z: defender.z, scale: 0.6, opacity: 0.6, time: 450, }, { x: defender.x - 20, y: defender.y + 30, z: defender.z, scale: 1, opacity: 1, time: 550, }, 'linear', 'explode'); scene.showEffect('heart', { x: defender.x - 30, y: defender.y - 20, z: defender.z, scale: 0.6, opacity: 0.6, time: 675, }, { x: defender.x - 35, y: defender.y - 30, z: defender.z, scale: 1, opacity: 1, time: 775, }, 'linear', 'explode'); scene.showEffect('heart', { x: defender.x, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.6, time: 750, }, { x: defender.x - 10, y: defender.y + 15, z: defender.z, scale: 1, opacity: 1, time: 900, }, 'linear', 'explode'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 450, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0.2, time: 750, }, 'linear', 'fade'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 750, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0.2, time: 1050, }, 'linear', 'fade'); attacker.anim({ x: defender.leftof(-30), y: defender.y + 80, z: defender.behind(-30), time: 350, }, 'ballistic'); attacker.anim({ x: defender.leftof(30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ x: defender.leftof(30), y: defender.y + 80, z: defender.behind(-30), time: 150, }, 'ballisticUp'); attacker.anim({ x: defender.leftof(-30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(450); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 200, }, 'swing'); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, strength: { anim: BattleOtherAnims.contactattack.anim, }, hammerarm: { anim(scene, [attacker, defender]) { scene.showEffect('fist1', { x: defender.x, y: defender.y + 80, z: defender.behind(-15), scale: 1.2, opacity: 0.8, time: 400, }, { y: defender.y - 10, z: defender.z, scale: 1.6, opacity: 1, time: 500, }, 'accel', 'explode'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 450, }, { scale: 2, opacity: 0, time: 700, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 1, time: 500, }, { x: defender.x + 70, scale: 0.8, opacity: 0.3, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 1, time: 500, }, { x: defender.x - 70, scale: 0.8, opacity: 0.3, time: 800, }, 'linear', 'fade'); attacker.anim({ x: defender.x, y: defender.y + 80, z: defender.behind(-30), time: 400, }, 'ballistic'); attacker.anim({ x: defender.x, y: defender.y + 5, z: defender.behind(20), time: 100, }); attacker.anim({ time: 600, }, 'ballistic2Back'); defender.delay(450); defender.anim({ y: defender.y - 30, z: defender.behind(20), yscale: 0.5, time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, icehammer: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#FFFFFF', 600, 0.3, 400); scene.showEffect('fist1', { x: defender.x, y: defender.y + 80, z: defender.behind(-15), scale: 1.2, opacity: 0.8, time: 400, }, { y: defender.y - 10, z: defender.z, scale: 1.6, opacity: 1, time: 500, }, 'accel', 'explode'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 450, }, { scale: 2, opacity: 0, time: 700, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 1, time: 500, }, { x: defender.x + 70, scale: 0.8, opacity: 0.3, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 1, time: 500, }, { x: defender.x - 70, scale: 0.8, opacity: 0.3, time: 800, }, 'linear', 'fade'); scene.showEffect('icicle', { x: defender.x, y: defender.y, z: defender.z, scale: 0, yscale: 1, opacity: 1, time: 450, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, yscale: 4, opacity: 0, time: 750, }, 'linear'); scene.showEffect('icicle', { x: defender.x, y: defender.y, z: defender.z, scale: 0, yscale: 1, opacity: 1, time: 550, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, yscale: 4, opacity: 0, time: 850, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y + 80, z: defender.behind(-30), time: 400, }, 'ballistic'); attacker.anim({ x: defender.x, y: defender.y + 5, z: defender.behind(20), time: 100, }); attacker.anim({ time: 600, }, 'ballistic2Back'); defender.delay(450); defender.anim({ y: defender.y - 30, z: defender.behind(20), yscale: 0.5, time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, skyuppercut: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x, y: defender.y + 10, z: defender.z, scale: 0, opacity: 0.5, time: 400, }, { scale: 3, opacity: 0, time: 600, }, 'linear'); scene.showEffect('fist1', { x: defender.leftof(-20), y: defender.y + 10, z: defender.behind(20), scale: 1.2, opacity: 0.8, time: 400, }, { y: defender.y + 80, opacity: 1, time: 500, }, 'decel', 'explode'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 350, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y + 80, z: defender.behind(5), time: 300, }, 'decel'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 250, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(380); defender.anim({ y: defender.y + 100, z: defender.behind(5), opacity: 0.5, time: 300, }, 'decel'); defender.anim({ time: 250, }, 'accel'); defender.anim({ x: defender.x, y: defender.y - 30, yscale: 0.25, time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, meteormash: { anim(scene, [attacker, defender]) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/bg-space.jpg')`, 1000, 0.4); scene.showEffect(attacker.sp, { x: attacker.leftof(20), y: attacker.y, z: attacker.behind(-25), opacity: 0.3, time: 25, }, { x: defender.x, z: defender.behind(-5), opacity: 0, time: 425, }, 'ballistic2Under'); scene.showEffect(attacker.sp, { x: attacker.leftof(20), y: attacker.y, z: attacker.behind(-25), opacity: 0.3, time: 50, }, { x: defender.x, z: defender.behind(-5), opacity: 0, time: 450, }, 'ballistic2Under'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.7, time: 450, }, { scale: 3, opacity: 0, time: 700, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.7, time: 500, }, { y: defender.y + 100, scale: 1, opacity: 0, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.7, time: 500, }, { x: defender.x - 60, y: defender.y - 80, scale: 1, opacity: 0, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.7, time: 500, }, { x: defender.x + 60, y: defender.y - 80, scale: 1, opacity: 0, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.7, time: 500, }, { x: defender.x - 90, y: defender.y + 40, scale: 1, opacity: 0, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.7, time: 500, }, { x: defender.x + 90, y: defender.y + 40, scale: 1, opacity: 0, time: 800, }, 'linear', 'fade'); BattleOtherAnims.punchattack.anim(scene, [attacker, defender]); }, }, shadowpunch: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.3); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 2, opacity: 0, time: 800, }, 'linear'); attacker.anim({ x: attacker.leftof(-20), y: attacker.y, z: attacker.behind(-20), opacity: 0, time: 200, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-120), opacity: 0, time: 1, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(5), opacity: 1, time: 200, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-25), opacity: 0, time: 300, }, 'linear'); attacker.anim({ opacity: 0, time: 1, }, 'linear'); attacker.anim({ time: 300, opacity: 1, }, 'linear'); defender.delay(400); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, ragefist: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 900, 0.3); scene.showEffect('angry', { x: attacker.x + 20, y: attacker.y + 10, z: attacker.z, scale: 0.5, opacity: 0.7, time: 0, }, { scale: 1.2, opacity: 1, time: 350, }, 'ballistic2Under', 'fade'); scene.showEffect('angry', { x: attacker.x - 20, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.7, time: 100, }, { scale: 1.2, opacity: 1, time: 550, }, 'ballistic2Under', 'fade'); scene.showEffect('angry', { x: attacker.x, y: attacker.y + 30, z: attacker.z, scale: 0.5, opacity: 0.7, time: 250, }, { scale: 1.2, opacity: 1, time: 700, }, 'ballistic2Under', 'fade'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.8, time: 150, }, { scale: 2, opacity: 0, time: 1300, }, 'decel'); scene.showEffect('shadowball', { x: attacker.x + 100, y: attacker.y + 60, z: attacker.z, scale: 0.5, opacity: 0.7, time: 100, }, { x: attacker.x, y: attacker.y, scale: 0.3, opacity: 0, time: 600, }, 'decel'); scene.showEffect('shadowball', { x: attacker.x - 90, y: attacker.y + 30, z: attacker.z, scale: 0.7, opacity: 0.6, time: 200, }, { x: attacker.x, y: attacker.y, scale: 0.4, opacity: 0, time: 675, }, 'decel'); scene.showEffect('shadowball', { x: attacker.x + 70, y: attacker.y - 40, z: attacker.z, scale: 0.6, opacity: 0.6, time: 300, }, { x: attacker.x, y: attacker.y, scale: 0.3, opacity: 0, time: 750, }, 'decel'); scene.showEffect('shadowball', { x: attacker.x - 80, y: attacker.y - 30, z: attacker.z, scale: 0.6, opacity: 0.6, time: 400, }, { x: attacker.x, y: attacker.y, scale: 0.3, opacity: 0, time: 800, }, 'decel'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0.2, time: 300, }, { scale: 1, opacity: 0.5, time: 800, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.8, time: 750, }, { scale: 2, opacity: 0, time: 1050, }, 'decel'); scene.backgroundEffect('#000000', 400, 0); attacker.delay(1100); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-20), opacity: 0, time: 275, }, 'linear'); attacker.anim({ time: 275, }, 'linear'); attacker.anim({ opacity: 1, time: 525, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.8, time: 1375, }, { scale: 2, opacity: 0, time: 1950, }, 'decel'); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 1375, }, { scale: 2, opacity: 0, time: 1850, }, 'decel'); defender.delay(1370); defender.anim({ x: defender.leftof(15), y: defender.y, z: defender.behind(20), time: 50, }, 'swing'); defender.anim({ time: 500, }, 'swing'); }, }, focuspunch: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.2); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.4, time: 300, }, { scale: 4, opacity: 0, time: 600, }, 'linear'); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.4, time: 500, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 300, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 2, opacity: 0, time: 600, }, 'linear'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 50, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 350, }, 'accel', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 100, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 400, }, 'accel', 'fade'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(280); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, drainpunch: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 600, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 900, opacity: 0, }, 'ballistic2'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 650, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 950, opacity: 0, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 700, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 1000, opacity: 0, }, 'ballistic2Under'); BattleOtherAnims.punchattack.anim(scene, [attacker, defender]); }, }, dynamicpunch: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.3); scene.showEffect('fireball', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, time: 350, }, { scale: 7, opacity: 0, }, 'decel'); scene.showEffect('fireball', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 0.6, time: 500, }, { scale: 7, opacity: 0, }, 'decel'); scene.showEffect('fireball', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 0.6, time: 650, }, { scale: 7, opacity: 0, }, 'decel'); BattleOtherAnims.punchattack.anim(scene, [attacker, defender]); }, }, cometpunch: { anim: BattleOtherAnims.punchattack.anim, }, megapunch: { anim: BattleOtherAnims.punchattack.anim, }, poweruppunch: { anim: BattleOtherAnims.punchattack.anim, }, dizzypunch: { anim: BattleOtherAnims.punchattack.anim, }, needlearm: { anim: BattleOtherAnims.punchattack.anim, }, rocksmash: { anim: BattleOtherAnims.punchattack.anim, }, hornleech: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 600, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 900, opacity: 0, }, 'ballistic2'); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 650, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 950, opacity: 0, }, 'linear'); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 700, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 1000, opacity: 0, }, 'ballistic2Under'); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-20), time: 400, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, time: 50, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.delay(425); defender.anim({ x: defender.leftof(-15), y: defender.y, z: defender.behind(15), time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, absorb: { anim: BattleOtherAnims.drain.anim, }, megadrain: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#9AB440', 900, 0.2); BattleOtherAnims.drain.anim(scene, [attacker, defender]); }, }, gigadrain: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#9AB440', 900, 0.5); BattleOtherAnims.drain.anim(scene, [attacker, defender]); }, }, bitterblade: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 800, 0.3, 400); scene.showEffect('leftslash', { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, opacity: 0.6, time: 400, }, { scale: 2, opacity: 0, time: 700, }, 'accel', 'fade'); scene.showEffect('bluefireball', { x: defender.x - 60, y: defender.y + 70, z: defender.z, scale: 0.75, opacity: 1, time: 400, }, { x: defender.x + 60, y: defender.y - 70, scale: 0.6, opacity: 0, time: 700, }, 'decel'); scene.showEffect('bluefireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 600, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 900, opacity: 0, }, 'ballistic2'); scene.showEffect('bluefireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 650, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 950, opacity: 0, }, 'linear'); scene.showEffect('bluefireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 700, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 1000, opacity: 0, }, 'ballistic2Under'); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-20), time: 400, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, time: 50, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.delay(425); defender.anim({ x: defender.leftof(-20), y: defender.y, z: defender.behind(20), time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, leechlife: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#987058', 800, 0.3, 400); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(50), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 600, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 900, opacity: 0, }, 'ballistic2'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 650, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 950, opacity: 0, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 700, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 1000, opacity: 0, }, 'ballistic2Under'); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-20), time: 400, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, time: 50, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.delay(425); defender.anim({ x: defender.leftof(-20), y: defender.y, z: defender.behind(20), time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, extremespeed: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y - 30, z: attacker.z, scale: 1.5, opacity: 0.6, time: 600, }, { x: attacker.x + 20, z: attacker.behind(-50), scale: 0.8, opacity: 0, time: 1000, }, 'linear', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y - 30, z: attacker.z, scale: 1.5, opacity: 0.6, time: 600, }, { x: attacker.x - 20, z: attacker.behind(-50), scale: 0.8, opacity: 0, time: 1000, }, 'linear', 'fade'); scene.showEffect('impact', { x: defender.x - 25, y: defender.y, z: defender.behind(5), scale: 0.7, opacity: 0.7, time: 375, }, { scale: 1.2, opacity: 0, time: 650, }, 'linear'); scene.showEffect('impact', { x: defender.x + 25, y: defender.y - 5, z: defender.behind(5), scale: 0.7, opacity: 0.7, time: 500, }, { scale: 1.2, opacity: 0, time: 775, }, 'linear'); scene.showEffect('impact', { x: defender.x - 25, y: defender.y + 10, z: defender.behind(5), scale: 0.7, opacity: 0.7, time: 600, }, { scale: 1, opacity: 0, time: 850, }, 'linear'); scene.showEffect('impact', { x: defender.x + 2, y: defender.y + 5, z: defender.behind(5), scale: 1, opacity: 0.7, time: 600, }, { scale: 1.5, opacity: 0, time: 975, }, 'linear'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.5, time: 0, }, { opacity: 0, time: 350, }, 'accel', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.8, time: 400, }, { z: attacker.behind(-100), opacity: 0, time: 475, }, 'accel'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.8, time: 450, }, { z: attacker.behind(-100), opacity: 0, time: 525, }, 'accel'); attacker.anim({ opacity: 0, time: 50 }, 'linear'); attacker.anim({ opacity: 1, time: 50 }, 'linear'); attacker.anim({ opacity: 0, time: 50 }, 'linear'); attacker.anim({ opacity: 1, time: 50 }, 'linear'); attacker.anim({ opacity: 0, time: 50 }, 'linear'); attacker.anim({ opacity: 1, time: 50 }, 'linear'); attacker.anim({ opacity: 0, time: 50 }, 'linear'); attacker.anim({ opacity: 1, time: 50 }, 'linear'); attacker.anim({ z: attacker.behind(-100), opacity: 0, time: 75, }, 'accel'); attacker.anim({ z: attacker.behind(70), opacity: 0, time: 1, }, 'linear'); attacker.delay(600); attacker.anim({ opacity: 1, time: 500, }, 'decel'); defender.delay(375); defender.anim({ x: defender.leftof(5), z: defender.behind(20), time: 50, }); defender.anim({ time: 75, }); defender.anim({ z: defender.behind(20), time: 75, }); defender.anim({ time: 75, }); defender.anim({ x: defender.leftof(10), z: defender.behind(30), time: 250, }, 'decel'); defender.anim({ time: 350, }, 'swing'); }, }, quickattack: { anim: BattleOtherAnims.fastattack.anim, }, suckerpunch: { anim(scene, [attacker, defender]) { BattleOtherAnims.fastattack.anim(scene, [attacker, defender]); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.behind(5), scale: 0, opacity: 0.3, time: 260, }, { scale: 1.25, opacity: 0, time: 500, }, 'linear'); }, }, astonish: { anim: BattleOtherAnims.fastattack.anim, }, rollout: { anim: BattleOtherAnims.fastattack.anim, }, accelerock: { anim(scene, [attacker, defender]) { BattleOtherAnims.fastattack.anim(scene, [attacker, defender]); scene.showEffect('rock3', { x: defender.x + 30, y: defender.y + 25, z: defender.z, scale: 0.3, opacity: 1, time: 260, }, { x: defender.x + 50, y: defender.y + 10, opacity: 0, time: 500, }, 'accel'); scene.showEffect('rock3', { x: defender.x - 30, y: defender.y - 20, z: defender.z, scale: 0.3, opacity: 1, time: 260, }, { x: defender.x - 50, y: defender.y - 20, opacity: 0, time: 500, }, 'accel'); scene.showEffect('rock3', { x: defender.x + 15, y: defender.y + 10, z: defender.z, scale: 0.3, opacity: 1, time: 360, }, { x: defender.x + 35, y: defender.y + 30, opacity: 0, time: 600, }, 'accel'); scene.showEffect('rock3', { x: defender.x - 15, y: defender.y - 30, z: defender.z, scale: 0.3, opacity: 1, time: 360, }, { x: defender.x - 35, y: defender.y - 40, opacity: 0, time: 600, }, 'accel'); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.behind(5), scale: 1, opacity: 0.3, time: 260, }, { scale: 1.25, opacity: 0, time: 500, }, 'linear'); }, }, bulletpunch: { anim(scene, [attacker, defender]) { BattleOtherAnims.fastattack.anim(scene, [attacker, defender]); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 260, }, { z: defender.behind(20), scale: 2, opacity: 0, time: 500, }, 'linear'); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.behind(5), scale: 1, opacity: 0.3, time: 260, }, { scale: 1.25, opacity: 0, time: 500, }, 'linear'); }, }, machpunch: { anim(scene, [attacker, defender]) { BattleOtherAnims.fastattack.anim(scene, [attacker, defender]); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 260, }, { x: defender.x, y: defender.y, z: defender.behind(20), scale: 2, opacity: 0, time: 500, }, 'linear'); }, }, wickedblow: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 900, 0.3); BattleOtherAnims.fastattack.anim(scene, [attacker, defender]); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 260, }, { x: defender.x, y: defender.y, z: defender.behind(20), scale: 2, opacity: 0, time: 500, }, 'linear'); }, }, vacuumwave: { anim(scene, [attacker, defender]) { scene.showEffect('fist', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 1, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, time: 200, }, 'accel', 'fade'); }, }, jetpunch: { anim(scene, [attacker, defender]) { scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 1, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, time: 200, }, 'accel', 'fade'); scene.showEffect('fist', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 1, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, time: 200, }, 'accel', 'fade'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.3, opacity: 1, time: 200, }, { y: defender.y + 50, opacity: 0, time: 400, }, 'accel', 'fade'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.3, opacity: 1, time: 200, }, { x: defender.x + 50, opacity: 0, time: 400, }, 'accel', 'fade'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.3, opacity: 1, time: 200, }, { x: defender.x - 50, opacity: 0, time: 400, }, 'accel', 'fade'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.3, opacity: 1, time: 200, }, { x: defender.x - 25, y: defender.y - 50, opacity: 0, time: 400, }, 'accel', 'fade'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.3, opacity: 1, time: 200, }, { x: defender.x + 25, y: defender.y - 50, opacity: 0, time: 400, }, 'accel', 'fade'); }, }, assist: { anim() {}, }, mirrormove: { anim() {}, }, naturepower: { anim() {}, }, copycat: { anim() {}, }, sleeptalk: { anim() {}, }, megahorn: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#987058', 400, 0.3); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 300, }, { scale: 3, opacity: 0, time: 600, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 500, }, { scale: 3, opacity: 0, time: 800, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(280); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, firepunch: { anim(scene, [attacker, defender]) { scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 2, opacity: 0, time: 800, }, 'linear'); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-20), time: 400, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, time: 50, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.delay(425); defender.anim({ x: defender.leftof(-20), y: defender.y, z: defender.behind(20), time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, icepunch: { anim(scene, [attacker, defender]) { scene.showEffect('icicle', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('icicle', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 2, opacity: 0, time: 800, }, 'linear'); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-20), time: 400, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, time: 50, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.delay(425); defender.anim({ x: defender.leftof(-20), y: defender.y, z: defender.behind(20), time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, thunderpunch: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('lightning', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 2, opacity: 0, time: 800, }, 'linear'); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-20), time: 400, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, time: 50, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.delay(425); defender.anim({ x: defender.leftof(-20), y: defender.y, z: defender.behind(20), time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, poisonfang: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 450, }, { x: defender.x, y: defender.y - 40, z: defender.behind(15), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 550, }, { x: defender.x, y: defender.y - 40, z: defender.behind(15), scale: 3, opacity: 0, time: 900, }, 'linear'); BattleOtherAnims.bite.anim(scene, [attacker, defender]); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, psychicfangs: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#AA44BB', 450, 0.6, 450); BattleOtherAnims.bite.anim(scene, [attacker, defender]); attacker.anim({ x: defender.x, y: defender.y + 80, z: defender.behind(-30), time: 400, }, 'ballistic'); attacker.anim({ x: defender.x, y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(450); defender.anim({ z: defender.behind(20), scale: 1.2, time: 100, }, 'swing'); defender.anim({ scale: 1, time: 300, }); }, }, icefang: { anim(scene, [attacker, defender]) { scene.showEffect('icicle', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 450, }, { x: defender.x, y: defender.y - 40, z: defender.behind(15), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('icicle', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 550, }, { x: defender.x, y: defender.y - 40, z: defender.behind(15), scale: 3, opacity: 0, time: 900, }, 'linear'); BattleOtherAnims.bite.anim(scene, [attacker, defender]); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, firefang: { anim(scene, [attacker, defender]) { scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 450, }, { x: defender.x, y: defender.y - 40, z: defender.behind(15), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 550, }, { x: defender.x, y: defender.y - 40, z: defender.behind(15), scale: 3, opacity: 0, time: 900, }, 'linear'); BattleOtherAnims.bite.anim(scene, [attacker, defender]); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, thunderfang: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 450, }, { x: defender.x, y: defender.y - 40, z: defender.behind(15), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('lightning', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 550, }, { x: defender.x, y: defender.y - 40, z: defender.behind(15), scale: 3, opacity: 0, time: 900, }, 'linear'); BattleOtherAnims.bite.anim(scene, [attacker, defender]); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, wildcharge: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.7, time: 300, }, { scale: 4, opacity: 0, time: 600, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.7, time: 500, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); scene.showEffect('lightning', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.x, y: defender.y - 40, z: defender.behind(15), scale: 3, opacity: 0, time: 750, }, 'linear'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 50, }, { x: defender.x, y: defender.y, z: defender.behind(-5), opacity: 0, time: 350, }, 'accel', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 100, }, { x: defender.x, y: defender.y, z: defender.behind(-5), opacity: 0, time: 400, }, 'accel', 'fade'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(280); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, spark: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 450, }, { x: defender.x, y: defender.y - 40, z: defender.behind(15), scale: 3, opacity: 0, time: 800, }, 'linear'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, zapcannon: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#2630A9', 700, 0.6); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 200, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 275, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 350, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 425, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 575, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 550, }, { scale: 4, opacity: 0, time: 750, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 600, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); scene.showEffect('lightning', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 550, }, { scale: 4, opacity: 0, time: 750, }, 'linear'); scene.showEffect('lightning', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 600, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, armorcannon: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#124763', 700, 0.6); scene.backgroundEffect('#FFC001', 300, 0.3, 600); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 100, z: attacker.behind(-20), scale: 0.5, xscale: 3, opacity: 0, time: 0, }, { x: attacker.x, y: attacker.y, scale: 0.8, xscale: 0.8, opacity: 0.8, time: 400, }, 'decel', 'fade'); scene.showEffect('flareball', { x: attacker.x - 60, y: attacker.y - 80, z: attacker.behind(-20), scale: 0.5, yscale: 3, opacity: 0, time: 50, }, { x: attacker.x, y: attacker.y, scale: 1.5, yscale: 1.5, opacity: 0.8, time: 450, }, 'decel', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0, opacity: 0, time: 0, }, { scale: 0.8, opacity: 0.5, time: 650, }, 'decel', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0, opacity: 0, time: 0, }, { scale: 1.5, opacity: 0.8, time: 650, }, 'decel', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0.3, opacity: 0.8, time: 600, }, { x: defender.x, y: defender.y, z: defender.z, time: 800, }, 'accel', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0.3, opacity: 0.8, time: 600, }, { x: defender.x, y: defender.y, z: defender.z, time: 800, }, 'accel', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0.3, opacity: 0.8, time: 600, }, { x: defender.x, y: defender.y, z: defender.z, time: 825, }, 'accel', 'explode'); defender.delay(800); defender.anim({ z: defender.behind(10), time: 175, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, torchsong: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#FFC001', 800, 0.3, 200); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.8, time: 0, }, { x: defender.x, y: defender.y, z: defender.z, time: 200, }, 'accel', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.8, time: 0, }, { x: defender.x, y: defender.y, z: defender.z, time: 200, }, 'accel', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.8, time: 0, }, { x: defender.x, y: defender.y, z: defender.z, time: 225, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 200, }, { z: defender.behind(-50), scale: 7, opacity: 0, time: 600, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 350, }, { z: defender.behind(-50), scale: 7, opacity: 0, time: 800, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 500, }, { z: defender.behind(-50), scale: 7, opacity: 0, time: 1000, }, 'linear'); }, }, chloroblast: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#36E747', 700, 0.2); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 200, }, 'linear', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 275, }, 'linear', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 350, }, 'linear', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 425, }, 'linear', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 575, }, 'linear', 'explode'); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 550, }, { scale: 4, opacity: 0, time: 750, }, 'linear'); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 600, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, hyperbeam: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.2); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 200, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 275, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 350, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 425, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 575, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 550, }, { scale: 4, opacity: 0, time: 750, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 600, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, gigaimpact: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.2); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.4, time: 300, }, { scale: 4, opacity: 0, time: 600, }, 'linear'); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.4, time: 500, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 50, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 350, }, 'accel', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 100, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 400, }, 'accel', 'fade'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(280); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, shelltrap: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { defender.delay(280); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); } const defender = defenders[1] || defenders[0]; let xf = [1, -1, 1, -1]; let yf = [1, -1, -1, 1]; let xf2 = [1, 0, -1, 0]; let yf2 = [0, 1, 0, -1]; scene.backgroundEffect('#000000', 600, 0.3); for (let i = 0; i < 4; i++) { scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-5), scale: 0.5, opacity: 1, }, { x: defender.x + 240 * xf[i], y: defender.y, z: defender.z + 137 * yf[i], opacity: 0, time: 600, }, 'decel'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-5), scale: 0.5, opacity: 1, }, { x: defender.x + 339 * xf2[i], y: defender.y + 10, z: defender.z + 194 * yf2[i], scale: 1, opacity: 0, time: 600, }, 'decel'); } scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.7, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, opacity: 0.6, time: 300, }, 'linear', 'explode'); }, prepareAnim: BattleOtherAnims.chargestatus.anim, }, spinout: { anim(scene, [attacker, defender]) { for (let i = 0; i < 5; i++) { scene.showEffect('gear', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 0, }, { // Gives a "random" gear break-ish look x: attacker.x + (50 / i), y: attacker.y + (i * 5), scale: 1, opacity: 0, time: 300, }, 'ballistic'); } scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 0, }, { x: attacker.x - 25, y: attacker.y - 25, scale: 2, opacity: 0, time: 300, }, 'ballistic'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 150, }, { x: attacker.x + 30, y: attacker.y - 20, scale: 2, opacity: 0, time: 450, }, 'ballistic'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 250, }, { x: attacker.x + 5, y: attacker.y - 40, scale: 2, opacity: 0, time: 550, }, 'ballistic'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 300, }, { x: attacker.x - 20, y: attacker.y - 20, scale: 2, opacity: 0, time: 600, }, 'ballistic'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 600, }, { scale: 5, opacity: 0, time: 900, }, 'linear'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 700, }, { scale: 8, opacity: 0, time: 1000, }, 'linear'); attacker.delay(300); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(580); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, matchagotcha: { anim(scene, [attacker, ...defenders]) { for (let i = 0; i < 10; i++) { scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 0, }, { x: attacker.x + (100 / i), y: attacker.y + (i * 10), scale: 1, opacity: 0, time: 300, }, 'ballistic'); } scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 0, }, { x: attacker.x - 25, y: attacker.y - 25, scale: 2, opacity: 0, time: 300, }, 'ballistic'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 150, }, { x: attacker.x + 30, y: attacker.y - 20, scale: 2, opacity: 0, time: 450, }, 'ballistic'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 250, }, { x: attacker.x + 5, y: attacker.y - 40, scale: 2, opacity: 0, time: 550, }, 'ballistic'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 300, }, { x: attacker.x - 20, y: attacker.y - 20, scale: 2, opacity: 0, time: 600, }, 'ballistic'); for (const defender of defenders) { scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 600, }, { scale: 5, opacity: 0, time: 900, }, 'linear'); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 700, }, { scale: 8, opacity: 0, time: 1000, }, 'linear'); scene.showEffect('wisp', { x: defender.x + 30, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 1010, }, { y: defender.y + 60, opacity: 0.2, time: 1410, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 1110, }, { y: defender.y + 60, opacity: 0.2, time: 1510, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 15, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 1210, }, { y: defender.y + 60, opacity: 0.2, time: 1610, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 15, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 1310, }, { y: defender.y + 60, opacity: 0.2, time: 1710, }, 'linear', 'fade'); } }, }, flamecharge: { anim(scene, [attacker, defender]) { scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 0, }, { x: attacker.x - 25, y: attacker.y - 25, scale: 2, opacity: 0, time: 300, }, 'ballistic'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 150, }, { x: attacker.x + 30, y: attacker.y - 20, scale: 2, opacity: 0, time: 450, }, 'ballistic'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 250, }, { x: attacker.x + 5, y: attacker.y - 40, scale: 2, opacity: 0, time: 550, }, 'ballistic'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 300, }, { x: attacker.x - 20, y: attacker.y - 20, scale: 2, opacity: 0, time: 600, }, 'ballistic'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 600, }, { scale: 5, opacity: 0, time: 900, }, 'linear'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 700, }, { scale: 8, opacity: 0, time: 1000, }, 'linear'); attacker.delay(300); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(580); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, flareblitz: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#390000 30%, #B84038)', 600, 0.6); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 300, }, { scale: 8, opacity: 0, time: 600, }, 'linear'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { scale: 8, opacity: 0, time: 800, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(280); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, burnup: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#390000 30%, #B84038)', 800, 0.6); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 300, }, { scale: 8, opacity: 0, time: 600, }, 'linear'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { scale: 8, opacity: 0, time: 800, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.4, time: 300, }, { scale: 4, opacity: 0, time: 600, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.4, time: 500, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-5), scale: 1.5, opacity: 0, time: 0, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.8, time: 300, }, 'accel', 'explode'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 50, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 350, }, 'accel', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 100, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 400, }, 'accel', 'fade'); scene.showEffect('wisp', { x: attacker.x + 30, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, time: 900, }, { y: attacker.y + 60, opacity: 0, time: 1300, }, 'linear'); scene.showEffect('wisp', { x: attacker.x - 30, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, time: 1000, }, { y: defender.y + 60, opacity: 0, time: 1400, }, 'linear'); scene.showEffect('wisp', { x: attacker.x + 15, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, time: 1100, }, { y: attacker.y + 60, opacity: 0, time: 1500, }, 'linear'); scene.showEffect('wisp', { x: attacker.x - 15, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, time: 1200, }, { y: attacker.y + 60, opacity: 0, time: 1600, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(280); defender.anim({ z: defender.behind(15), time: 200, }, 'decel'); defender.anim({ time: 300, }, 'decel'); }, }, beakblast: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 1200, 0.6); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 0, }, { x: attacker.x - 25, y: attacker.y - 25, scale: 2, opacity: 0, time: 300, }, 'ballistic'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 150, }, { x: attacker.x + 30, y: attacker.y - 20, scale: 2, opacity: 0, time: 450, }, 'ballistic'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 250, }, { x: attacker.x + 5, y: attacker.y - 40, scale: 2, opacity: 0, time: 550, }, 'ballistic'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 300, }, { x: attacker.x - 20, y: attacker.y - 20, scale: 2, opacity: 0, time: 600, }, 'ballistic'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 600, }, { scale: 2, opacity: 0, time: 900, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 700, }, { scale: 5, opacity: 0, time: 1000, }, 'linear'); attacker.delay(300); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(580); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, vcreate: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.3); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 300, }, { scale: 6, opacity: 0, time: 600, }, 'linear'); scene.showEffect('fireball', { x: defender.x - 30, y: defender.y + 30, z: defender.z, scale: 0, opacity: 1, time: 350, }, { scale: 6, opacity: 0, time: 650, }, 'linear'); scene.showEffect('fireball', { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0, opacity: 1, time: 350, }, { scale: 6, opacity: 0, time: 650, }, 'linear'); scene.showEffect('fireball', { x: defender.x - 70, y: defender.y + 70, z: defender.z, scale: 0, opacity: 1, time: 400, }, { scale: 6, opacity: 0, time: 700, }, 'linear'); scene.showEffect('fireball', { x: defender.x + 70, y: defender.y + 70, z: defender.z, scale: 0, opacity: 1, time: 400, }, { scale: 6, opacity: 0, time: 700, }, 'linear'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { scale: 6, opacity: 0, time: 800, }, 'linear'); scene.showEffect('fireball', { x: defender.x - 30, y: defender.y + 30, z: defender.z, scale: 0, opacity: 1, time: 550, }, { scale: 6, opacity: 0, time: 850, }, 'linear'); scene.showEffect('fireball', { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0, opacity: 1, time: 550, }, { scale: 6, opacity: 0, time: 850, }, 'linear'); scene.showEffect('fireball', { x: defender.x - 70, y: defender.y + 70, z: defender.z, scale: 0, opacity: 1, time: 600, }, { scale: 6, opacity: 0, time: 900, }, 'linear'); scene.showEffect('fireball', { x: defender.x + 70, y: defender.y + 70, z: defender.z, scale: 0, opacity: 1, time: 600, }, { scale: 6, opacity: 0, time: 900, }, 'linear'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-5), scale: 1.5, opacity: 0, time: 0, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.8, time: 300, }, 'accel', 'explode'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 50, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 350, }, 'accel', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 100, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 400, }, 'accel', 'fade'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(280); defender.anim({ z: defender.behind(15), time: 200, }, 'decel'); defender.anim({ time: 300, }, 'swing'); }, }, outrage: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#390000 30%, #B84038)', 600, 0.6, 400); scene.showEffect('angry', { x: attacker.x - 10, y: attacker.y + 50, z: attacker.z, scale: 0.5, opacity: 1, time: 0, }, { scale: 3, opacity: 0, time: 300, }, 'ballistic2Under', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 0, }, { x: attacker.x - 50, y: attacker.y - 50, scale: 2, opacity: 0, time: 300, }, 'ballistic'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 150, }, { x: attacker.x + 60, y: attacker.y - 50, scale: 2, opacity: 0, time: 450, }, 'ballistic'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 300, }, { x: attacker.x + 10, y: attacker.y - 60, scale: 2, opacity: 0, time: 600, }, 'ballistic'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 600, }, { scale: 4, opacity: 0, time: 900, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 800, }, { scale: 4, opacity: 0, time: 1100, }, 'linear'); attacker.delay(300); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(580); defender.anim({ z: defender.behind(20), time: 200, }, 'decel'); defender.anim({ time: 300, }, 'swing'); }, }, ragingfury: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#390000 30%, #B84038)', 600, 0.6, 400); scene.showEffect('angry', { x: attacker.x - 10, y: attacker.y + 50, z: attacker.z, scale: 0.5, opacity: 1, time: 0, }, { scale: 3, opacity: 0, time: 300, }, 'ballistic2Under', 'fade'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 0, }, { x: attacker.x - 50, y: attacker.y - 50, scale: 2, opacity: 0, time: 300, }, 'ballistic'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 150, }, { x: attacker.x + 60, y: attacker.y - 50, scale: 2, opacity: 0, time: 450, }, 'ballistic'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 300, }, { x: attacker.x + 10, y: attacker.y - 60, scale: 2, opacity: 0, time: 600, }, 'ballistic'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 600, }, { scale: 4, opacity: 0, time: 900, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 800, }, { scale: 4, opacity: 0, time: 1100, }, 'linear'); attacker.delay(300); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(580); defender.anim({ z: defender.behind(20), time: 200, }, 'decel'); defender.anim({ time: 300, }, 'swing'); }, }, boltstrike: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#00CCCC', 900, 0.3); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.behind(-5), opacity: 1, }, { x: defender.x, y: defender.y, z: defender.z, time: 300, }, 'accel', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.behind(-5), opacity: 1, }, { x: defender.x, y: defender.y, z: defender.z, time: 300, }, 'accel', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.7, time: 300, }, { scale: 4, opacity: 0, time: 600, }, 'linear'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.7, time: 500, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 50, }, { x: defender.x, y: defender.y, z: defender.behind(-5), opacity: 0, time: 350, }, 'accel', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 100, }, { x: defender.x, y: defender.y, z: defender.behind(-5), opacity: 0, time: 400, }, 'accel', 'fade'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), opacity: 0, time: 300, }, 'accel'); attacker.anim({ opacity: 1, time: 500, }, 'ballistic2Back'); defender.delay(280); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, fusionflare: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.3); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 90, z: attacker.z, scale: 0, }, { x: attacker.x, y: attacker.y + 90, z: attacker.z, scale: 2, time: 200, }, 'accel', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 90, z: attacker.z, opacity: 0.4, scale: 0, time: 150, }, { x: attacker.x, y: attacker.y + 90, z: attacker.z, scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 90, z: attacker.z, opacity: 0.8, scale: 2, time: 200, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2.5, time: 500, }, 'accel', 'fade'); scene.showEffect('flareball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 1, xscale: 3, opacity: 0.5, time: 550, }, { scale: 3, xscale: 8, opacity: 0.1, time: 1000, }, 'linear', 'fade'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 500, }, { x: defender.x, y: defender.y, z: defender.z, scale: 4, opacity: 0, time: 800, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.7, scale: 0, time: 700, }, { x: defender.x, y: defender.y, z: defender.z, scale: 4, opacity: 0, time: 1000, }, 'linear'); defender.delay(500); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, fusionbolt: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.3); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 1, }, { y: attacker.y + 90, opacity: 0, time: 200, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-165), y: defender.y + 170, z: defender.z, scale: 1, opacity: 0, time: 400, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 3, opacity: 1, time: 650, }, 'accel', 'fade'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, }, { y: attacker.y + 90, opacity: 0, time: 200, }, 'accel'); scene.showEffect('waterwisp', { x: defender.leftof(-165), y: defender.y + 170, z: defender.z, scale: 0.5, opacity: 0, time: 400, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 1.5, opacity: 1, time: 650, }, 'accel', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 0.5, time: 700, }, { scale: 3, xscale: 8, opacity: 0.1, time: 1100, }, 'linear', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 0, time: 700, }, { x: defender.x, y: defender.y, z: defender.z, scale: 4, opacity: 0, time: 900, }, 'linear'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 0, time: 800, }, { x: defender.x, y: defender.y, z: defender.z, scale: 3, opacity: 0, time: 1000, }, 'linear'); attacker.anim({ y: defender.y + 120, xscale: 0, yscale: 0, opacity: 0, time: 300, }, 'accel'); attacker.delay(625); attacker.anim({ x: attacker.x, y: attacker.y + 40, z: attacker.behind(40), xscale: 1, yscale: 1, time: 1, }); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.z, time: 250, }, 'decel'); defender.delay(625); defender.anim({ z: defender.behind(20), time: 250, }, 'decel'); defender.anim({ time: 200, }, 'swing'); }, }, zenheadbutt: { anim(scene, [attacker, defender]) { scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 450, }, { scale: 2, opacity: 0, time: 700, }, 'linear'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, fakeout: { anim(scene, [attacker, defender]) { scene.showEffect('rightchop', { x: defender.x + 15, y: defender.y, z: defender.behind(-120), scale: 0.3, opacity: 0.1, time: 200, }, { x: defender.x + 4, y: defender.y + 7, z: defender.behind(20), xscale: 0.15, yscale: 0.35, opacity: 1, time: 400, }, 'accel', 'explode'); scene.showEffect('leftchop', { x: defender.x - 15, y: defender.y, z: defender.behind(-120), scale: 0.3, opacity: 0.1, time: 200, }, { x: defender.x - 4, y: defender.y + 7, z: defender.behind(20), xscale: 0.15, yscale: 0.35, opacity: 1, time: 400, }, 'accel', 'explode'); attacker.anim({ x: attacker.leftof(-20), y: attacker.y, z: attacker.behind(-20), opacity: 0, time: 200, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-120), opacity: 0, time: 1, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(40), opacity: 1, time: 250, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), opacity: 0, time: 300, }, 'linear'); attacker.anim({ opacity: 0, time: 1, }, 'linear'); attacker.anim({ time: 300, opacity: 1, }, 'linear'); defender.delay(370); defender.anim({ z: defender.behind(20), yscale: 1.4, xscale: 0.7, time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, covet: { anim(scene, [attacker, defender]) { scene.showEffect('heart', { x: attacker.x - 10, y: attacker.y + 50, z: attacker.z, scale: 0.5, opacity: 1, time: 0, }, { scale: 3, opacity: 0, time: 300, }, 'ballistic2Under', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 650, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(30), scale: 1.5, opacity: 0, time: 850, }, 'linear'); attacker.delay(300); attacker.anim({ x: attacker.leftof(-20), y: attacker.y, z: attacker.behind(-20), opacity: 0, time: 200, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-120), opacity: 0, time: 1, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(40), opacity: 1, time: 250, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), opacity: 0, time: 300, }, 'linear'); attacker.anim({ opacity: 0, time: 1, }, 'linear'); attacker.anim({ time: 300, opacity: 1, }, 'linear'); defender.delay(630); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, feint: { anim: BattleOtherAnims.sneakattack.anim, }, thief: { anim: BattleOtherAnims.sneakattack.anim, }, shadowsneak: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.3); BattleOtherAnims.sneakattack.anim(scene, [attacker, defender]); }, }, feintattack: { anim: BattleOtherAnims.sneakattack.anim, }, struggle: { anim: BattleOtherAnims.contactattack.anim, }, earthquake: { anim(scene, [attacker, ...defenders]) { scene.$bg.animate({ top: -90, bottom: 0, }, 75).animate({ top: -100, bottom: -10, }, 100).animate({ top: -90, bottom: 0, }, 100).animate({ top: -95, bottom: -5, }, 100).animate({ top: -90, bottom: 0, }, 100).animate({ top: -95, bottom: -5, }, 100).animate({ top: -90, bottom: 0, }, 100).animate({ top: -92, bottom: -2, }, 100).animate({ top: -90, bottom: 0, }, 100).animate({ top: -92, bottom: -2, }, 100).animate({ top: -90, bottom: 0, }, 100); attacker.anim({ y: attacker.y - 10, yscale: 1, time: 75, }); attacker.anim({ y: attacker.y + 10, yscale: 0.9, time: 100, }); attacker.anim({ y: attacker.y - 7, yscale: 1, time: 100, }); attacker.anim({ y: attacker.y + 7, time: 100, }); attacker.anim({ y: attacker.y - 7, time: 100, }); attacker.anim({ y: attacker.y + 7, time: 100, }); attacker.anim({ y: attacker.y - 7, time: 100, }); attacker.anim({ y: attacker.y + 7, time: 100, }); attacker.anim({ y: attacker.y - 2, time: 100, }); attacker.anim({ y: attacker.y + 2, time: 100, }); attacker.anim({ y: attacker.y, time: 100, }); for (const defender of defenders) { defender.anim({ y: defender.y - 10, time: 75, }); defender.anim({ y: defender.y + 10, time: 100, }); defender.anim({ y: defender.y - 7, time: 100, }); defender.anim({ y: defender.y + 7, time: 100, }); defender.anim({ y: defender.y - 7, time: 100, }); defender.anim({ y: defender.y + 7, time: 100, }); defender.anim({ y: defender.y - 7, time: 100, }); defender.anim({ y: defender.y + 7, time: 100, }); defender.anim({ y: defender.y - 2, time: 100, }); defender.anim({ y: defender.y + 2, time: 100, }); defender.anim({ y: defender.y, time: 100, }); scene.showEffect('rock3', { x: defender.x + 5, y: defender.y - 35, z: defender.z, scale: 0.2, opacity: 1, time: 0, }, { x: defender.x + 30, y: defender.y, scale: 0.4, opacity: 0, time: 350, }, 'ballistic'); scene.showEffect('rock3', { x: defender.x - 10, y: defender.y - 35, z: defender.z, scale: 0.2, opacity: 1, time: 250, }, { x: defender.x - 35, y: defender.y, scale: 0.3, opacity: 0, time: 600, }, 'ballistic'); scene.showEffect('rock3', { x: defender.x + 40, y: defender.y - 35, z: defender.z, scale: 0.2, opacity: 1, time: 400, }, { x: defender.x + 65, y: defender.y, scale: 0.3, opacity: 0, time: 750, }, 'ballistic2'); scene.showEffect('rock3', { x: defender.x, y: defender.y - 35, z: defender.z, scale: 0.3, opacity: 1, time: 500, }, { x: defender.x + 40, y: defender.y, scale: 0.4, opacity: 0, time: 750, }, 'ballistic'); } }, }, bulldoze: { anim(scene, [attacker, ...defenders]) { scene.$bg.delay(275); scene.$bg.animate({ top: -90, bottom: 0, }, 75).animate({ top: -100, bottom: -10, }, 100).animate({ top: -90, bottom: 0, }, 100).animate({ top: -95, bottom: -5, }, 100).animate({ top: -90, bottom: 0, }, 100).animate({ top: -95, bottom: -5, }, 100).animate({ top: -90, bottom: 0, }, 100).animate({ top: -92.5, bottom: -2.5, }, 100).animate({ top: -90, bottom: 0, }, 100).animate({ top: -92.5, bottom: -2.5, }, 100).animate({ top: -90, bottom: 0, }, 100); attacker.anim({ y: attacker.y + 20, time: 175, }, 'swing'); attacker.anim({ y: attacker.y, time: 125, }, 'accel'); attacker.anim({ y: attacker.y - 10, yscale: 1, time: 75, }); attacker.anim({ y: attacker.y + 10, yscale: 0.9, time: 100, }); attacker.anim({ y: attacker.y - 5, yscale: 1, time: 100, }); attacker.anim({ y: attacker.y + 5, time: 100, }); attacker.anim({ y: attacker.y - 5, time: 100, }); attacker.anim({ y: attacker.y + 5, time: 100, }); attacker.anim({ y: attacker.y - 5, time: 100, }); attacker.anim({ y: attacker.y + 5, time: 100, }); attacker.anim({ y: attacker.y - 2, time: 100, }); attacker.anim({ y: attacker.y + 2, time: 100, }); attacker.anim({ y: attacker.y, time: 100, }); for (const defender of defenders) { defender.delay(275); defender.anim({ y: defender.y - 10, time: 75, }); defender.anim({ y: defender.y + 10, time: 100, }); defender.anim({ y: defender.y - 5, time: 100, }); defender.anim({ y: defender.y + 5, time: 100, }); defender.anim({ y: defender.y - 5, time: 100, }); defender.anim({ y: defender.y + 5, time: 100, }); defender.anim({ y: defender.y - 5, time: 100, }); defender.anim({ y: defender.y + 5, time: 100, }); defender.anim({ y: defender.y - 2, time: 100, }); defender.anim({ y: defender.y + 2, time: 100, }); defender.anim({ y: defender.y, time: 100, }); } scene.wait(325); }, }, tickle: { anim(scene, [attacker, defender]) { defender.anim({ x: defender.x - 10, time: 75, }); defender.anim({ x: defender.x + 10, time: 100, }); defender.anim({ x: defender.x - 10, time: 100, }); defender.anim({ x: defender.x + 10, time: 100, }); defender.anim({ x: defender.x, time: 100, }); scene.wait(425); }, }, earthpower: { anim(scene, [attacker, defender]) { scene.$bg.animate({ top: -90, bottom: 0, }, 75).animate({ top: -100, bottom: -10, }, 100).animate({ top: -90, bottom: 0, }, 100).animate({ top: -95, bottom: -5, }, 100).animate({ top: -90, bottom: 0, }, 100).animate({ top: -95, bottom: -5, }, 100).animate({ top: -90, bottom: 0, }, 100).animate({ top: -92.5, bottom: -2.5, }, 100).animate({ top: -90, bottom: 0, }, 100).animate({ top: -92.5, bottom: -2.5, }, 100).animate({ top: -90, bottom: 0, }, 100); scene.showEffect('fireball', { x: defender.x + 10, y: defender.y - 35, z: defender.z, scale: 0, opacity: 0.8, }, { scale: 3, opacity: 0, }, 'linear'); scene.showEffect('rock3', { x: defender.x + 10, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.6, time: 0, }, { x: defender.x + 30, y: defender.y + 50, scale: 0.5, opacity: 0, time: 300, }, 'linear', 'fade'); scene.showEffect('rock3', { x: defender.x + 10, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.6, time: 100, }, { x: defender.x - 10, y: defender.y + 50, scale: 0.5, opacity: 0, time: 400, }, 'linear', 'fade'); scene.showEffect('rock3', { x: defender.x + 40, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.6, time: 200, }, { x: defender.x + 35, y: defender.y + 50, scale: 0.5, opacity: 0, time: 500, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x - 40, y: defender.y - 35, z: defender.z, scale: 0, opacity: 0.8, time: 150, }, { scale: 3, opacity: 0, }, 'linear'); scene.showEffect('rock3', { x: defender.x - 40, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.6, time: 150, }, { x: defender.x - 60, y: defender.y + 45, scale: 0.5, opacity: 0, time: 450, }, 'linear', 'fade'); scene.showEffect('rock3', { x: defender.x - 40, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.6, time: 250, }, { x: defender.x - 20, y: defender.y + 45, scale: 0.5, opacity: 0, time: 550, }, 'linear', 'fade'); scene.showEffect('rock3', { x: defender.x - 40, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.6, time: 350, }, { x: defender.x - 35, y: defender.y + 45, scale: 0.5, opacity: 0, time: 650, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x + 40, y: defender.y - 35, z: defender.z, scale: 0, opacity: 0.8, time: 300, }, { scale: 3, opacity: 0, }, 'linear'); scene.showEffect('rock3', { x: defender.x + 40, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 60, y: defender.y + 65, scale: 0.5, opacity: 0, time: 600, }, 'linear', 'fade'); scene.showEffect('rock3', { x: defender.x + 40, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.6, time: 400, }, { x: defender.x + 20, y: defender.y + 65, scale: 0.5, opacity: 0, time: 700, }, 'linear', 'fade'); scene.showEffect('rock3', { x: defender.x + 40, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.6, time: 500, }, { x: defender.x + 30, y: defender.y + 65, scale: 0.5, opacity: 0, time: 800, }, 'linear', 'fade'); defender.delay(50); defender.anim({ y: defender.y - 10, time: 75, }); defender.anim({ y: defender.y + 10, time: 100, }); defender.anim({ y: defender.y - 7, time: 100, }); defender.anim({ y: defender.y + 7, time: 100, }); defender.anim({ y: defender.y - 7, time: 100, }); defender.anim({ y: defender.y + 7, time: 100, }); defender.anim({ y: defender.y - 2, time: 100, }); defender.anim({ y: defender.y + 2, time: 100, }); defender.anim({ y: defender.y, time: 100, }); }, }, drillrun: { // todo: rip horn sprite and redo animation anim(scene, [attacker, defender]) { attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(280); defender.anim({ z: defender.behind(20), time: 200, }); defender.anim({ z: defender.behind(0), time: 200, }); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 300, }, { scale: 3, opacity: 0, time: 600, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 400, }, { scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.4, time: 300, }, { scale: 2, opacity: 0, time: 500, }, 'linear'); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.4, time: 500, }, { scale: 2, opacity: 0, time: 700, }, 'linear'); scene.showEffect('flareball', { x: defender.leftof(10), y: defender.y - 10, z: defender.behind(-40), scale: 0.7, yscale: 1, opacity: 0.8, time: 300, }, { z: defender.behind(5), scale: 0, xscale: 0, yscale: 0, time: 450, }, 'accel'); scene.showEffect('flareball', { x: defender.leftof(10), y: defender.y - 10, z: defender.behind(-40), scale: 0.7, yscale: 1, opacity: 0.8, time: 350, }, { z: defender.behind(5), scale: 0, xscale: 0, yscale: 0, time: 500, }, 'accel'); scene.showEffect('flareball', { x: defender.leftof(10), y: defender.y - 10, z: defender.behind(-40), scale: 0.7, yscale: 1, opacity: 0.8, time: 400, }, { z: defender.behind(5), scale: 0, xscale: 0, yscale: 0, time: 550, }, 'accel'); }, }, poisongas: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: defender.x + 10, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 1, time: 0, }, { x: defender.x + 10, y: defender.y + 20, scale: 0.7, opacity: 0, time: 300, }, 'linear'); scene.showEffect('purplewisp', { x: defender.x - 30, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 1, time: 100, }, { x: defender.x - 30, y: defender.y + 20, scale: 0.7, opacity: 0, time: 400, }, 'linear'); scene.showEffect('purplewisp', { x: defender.x + 40, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 1, time: 200, }, { x: defender.x + 40, y: defender.y + 20, scale: 0.7, opacity: 0, time: 500, }, 'linear'); }, }, smog: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.7, opacity: 0.6, time: 0, }, { x: defender.x, y: defender.y + 10, z: defender.behind(10), scale: 1, opacity: 0.3, time: 400, }, 'decel', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.7, opacity: 1, time: 100, }, { x: defender.x - 20, y: defender.y + 5, z: defender.behind(10), scale: 1, opacity: 0.3, time: 500, }, 'decel', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.7, opacity: 1, time: 200, }, { x: defender.x + 25, y: defender.y, z: defender.behind(10), scale: 1, opacity: 0.3, time: 600, }, 'decel', 'explode'); scene.showEffect('purplewisp', { x: defender.x + 30, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 400, }, { x: defender.x + 50, y: defender.y + 30, scale: 1.4, opacity: 0.2, time: 800, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x - 50, y: defender.y + 30, scale: 1.4, opacity: 0.2, time: 900, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: defender.x + 15, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 600, }, { x: defender.x + 25, y: defender.y + 20, scale: 1.4, opacity: 0.2, time: 1000, }, 'decel', 'fade'); }, }, clearsmog: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.7, opacity: 0.6, time: 0, }, { x: defender.x, y: defender.y + 10, z: defender.behind(10), scale: 1, opacity: 0.3, time: 400, }, 'decel', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.7, opacity: 1, time: 100, }, { x: defender.x - 20, y: defender.y + 5, z: defender.behind(10), scale: 1, opacity: 0.3, time: 500, }, 'decel', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.7, opacity: 1, time: 200, }, { x: defender.x + 25, y: defender.y, z: defender.behind(10), scale: 1, opacity: 0.3, time: 600, }, 'decel', 'explode'); scene.showEffect('wisp', { x: defender.x + 30, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 400, }, { x: defender.x + 40, y: defender.y + 20, scale: 1.4, opacity: 0.2, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x - 40, y: defender.y + 20, scale: 1.4, opacity: 0.2, time: 900, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 15, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 600, }, { x: defender.x + 20, y: defender.y + 20, scale: 1.4, opacity: 0.2, time: 1000, }, 'linear', 'fade'); }, }, bonemerang: { anim(scene, [attacker, defender]) { scene.showEffect('bone', { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0, }, { z: defender.behind(20), opacity: 1, time: 300, }, 'ballistic2'); scene.showEffect('bone', { x: defender.x, y: defender.y, z: defender.behind(20), opacity: 1, time: 300, }, { z: attacker.z, opacity: 0, time: 600, }, 'ballistic2Under', 'fade'); }, }, boneclub: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('bone', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 2, opacity: 0, time: 800, }, 'linear'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, shadowbone: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 600, 0.3); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 450, }, { scale: 2.5, opacity: 0, time: 700, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('bone', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 2, opacity: 0, time: 800, }, 'linear'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, whirlwind: { anim(scene, [attacker, defender]) { for (let i = 0; i < 3; i++) { scene.showEffect('wisp', { x: defender.x + 30, y: defender.y - 35, z: defender.behind(i * 40 - 60), scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x - 30, y: defender.y, z: defender.behind(i * 40 - 60), scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 30, y: defender.y + 35, z: defender.behind(i * 40 - 60), scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x + 30, y: defender.y, z: defender.behind(i * 40 - 60), scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 30, y: defender.y, z: defender.behind(i * 40 - 60), scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x - 30, y: defender.y - 35, z: defender.behind(i * 40 - 60), scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 30, y: defender.y, z: defender.behind(i * 40 - 60), scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x + 30, y: defender.y - 35, z: defender.behind(i * 40 - 60), scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); } }, }, hurricane: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 900, 0.6); for (let i = 0; i < 4; i++) { scene.showEffect('wisp', { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 50, y: defender.y + 35, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); } }, }, springtidestorm: { anim(scene, [attacker, ...defenders]) { scene.backgroundEffect('#FF99FF', 1000, 0.3); for (const defender of defenders) { for (const effect of ['mistball', 'heart']) { for (let i = 0; i < 4; i++) { scene.showEffect(effect, { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect(effect, { x: defender.x - 50, y: defender.y + 35, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect(effect, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect(effect, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); } } } }, }, wildboltstorm: { anim(scene, [attacker, ...defenders]) { scene.backgroundEffect('#F6D434', 1000, 0.3); for (const defender of defenders) { for (const effect of ['blackwisp', 'lightning']) { for (let i = 0; i < 4; i++) { scene.showEffect(effect, { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect(effect, { x: defender.x - 50, y: defender.y + 35, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect(effect, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect(effect, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); } } } }, }, sandsearstorm: { anim(scene, [attacker, ...defenders]) { scene.backgroundEffect('#B47F1F', 1000, 0.3); for (const defender of defenders) { for (let i = 0; i < 4; i++) { scene.showEffect('mudwisp', { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('mudwisp', { x: defender.x - 50, y: defender.y + 35, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('mudwisp', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('mudwisp', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); } } }, }, ominouswind: { anim(scene, [attacker, defender]) { for (let i = 0; i < 3; i++) { scene.showEffect('purplewisp', { x: defender.x + 30, y: defender.y - 35, z: defender.behind(i * 40 - 60), scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x - 30, y: defender.y, z: defender.behind(i * 40 - 60), scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x - 30, y: defender.y + 35, z: defender.behind(i * 40 - 60), scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x + 30, y: defender.y, z: defender.behind(i * 40 - 60), scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x + 30, y: defender.y, z: defender.behind(i * 40 - 60), scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x - 30, y: defender.y - 35, z: defender.behind(i * 40 - 60), scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x - 30, y: defender.y, z: defender.behind(i * 40 - 60), scale: 0.2, opacity: 1, time: 200 * i, }, { x: defender.x + 30, y: defender.y - 35, z: defender.behind(i * 40 - 60), scale: 0.4, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); } }, }, magmastorm: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#CC3300', 900, 0.3); defender.anim({ x: defender.x - 5, time: 75, }); defender.anim({ x: defender.x + 5, time: 100, }); defender.anim({ x: defender.x - 5, time: 100, }); defender.anim({ x: defender.x + 5, time: 100, }); defender.anim({ x: defender.x - 5, time: 100, }); defender.anim({ x: defender.x + 5, time: 100, }); defender.anim({ x: defender.x - 5, time: 100, }); defender.anim({ x: defender.x + 5, time: 100, }); defender.anim({ x: defender.x, time: 100, }); for (let i = 0; i < 4; i++) { scene.showEffect('fireball', { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 0.5, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x - 50, y: defender.y + 35, z: defender.z, scale: 0.5, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y - 35, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); } }, }, firespin: { anim(scene, [attacker, defender]) { for (let i = 0; i < 4; i++) { scene.showEffect('fireball', { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 0.5, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x - 50, y: defender.y + 35, z: defender.z, scale: 0.5, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y - 35, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); } }, }, leaftornado: { anim(scene, [attacker, defender]) { for (let i = 0; i < 4; i++) { scene.showEffect('leaf1', { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 0.5, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('leaf2', { x: defender.x - 50, y: defender.y + 35, z: defender.z, scale: 0.5, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('leaf1', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y - 35, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('leaf2', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); } }, }, roar: { anim: BattleOtherAnims.sound.anim, }, round: { anim: BattleOtherAnims.sound.anim, }, yawn: { anim: BattleOtherAnims.sound.anim, }, sing: { anim: BattleOtherAnims.sound.anim, }, perishsong: { anim: BattleOtherAnims.sound.anim, }, partingshot: { anim: BattleOtherAnims.sound.anim, }, nobleroar: { anim: BattleOtherAnims.sound.anim, }, disarmingvoice: { anim: BattleOtherAnims.sound.anim, }, growl: { anim: BattleOtherAnims.sound.anim, }, screech: { anim: BattleOtherAnims.sound.anim, }, snore: { anim: BattleOtherAnims.sound.anim, }, synchronoise: { anim: BattleOtherAnims.sound.anim, }, sonicboom: { anim: BattleOtherAnims.sound.anim, }, eerieimpulse: { anim: BattleOtherAnims.sound.anim, }, metalsound: { anim: BattleOtherAnims.sound.anim, }, supersonic: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0, time: 200, }, 'linear'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 150, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0, time: 350, }, 'linear'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 300, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0, time: 500, }, 'linear'); }, }, confide: { anim: BattleOtherAnims.sound.anim, }, defog: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#FFFFFF', 900, 0.5); BattleOtherAnims.sound.anim(scene, [attacker, defender]); }, }, grasswhistle: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#9AB440', 900, 0.3); BattleOtherAnims.sound.anim(scene, [attacker, defender]); }, }, hypervoice: { anim(scene, [attacker]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 0, }, { z: attacker.behind(-50), scale: 7, opacity: 0, time: 400, }, 'linear'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 150, }, { z: attacker.behind(-50), scale: 7, opacity: 0, time: 600, }, 'linear'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 300, }, { z: attacker.behind(-50), scale: 7, opacity: 0, time: 800, }, 'linear'); }, }, boomburst: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); } scene.backgroundEffect('#000000', 900, 0.5); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 0, }, { z: attacker.behind(-50), scale: 7, opacity: 0, time: 400, }, 'linear'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 150, }, { z: attacker.behind(-50), scale: 7, opacity: 0, time: 600, }, 'linear'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 300, }, { z: attacker.behind(-50), scale: 7, opacity: 0, time: 800, }, 'linear'); }, }, heatwave: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); } const defender = defenders[1] || defenders[0]; scene.backgroundEffect('#CC3300', 900, 0.1); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2.5, opacity: 0, time: 400, }, 'linear'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 150, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2.5, opacity: 0, time: 600, }, 'linear'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 300, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2.5, opacity: 0, time: 800, }, 'linear'); }, }, snarl: { anim(scene, [attacker, defender]) { scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.4, time: 0, }, { scale: 7, opacity: 0, time: 400, }, 'linear'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.4, time: 150, }, { scale: 7, opacity: 0, time: 600, }, 'linear'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.4, time: 300, }, { scale: 7, opacity: 0, time: 800, }, 'linear'); }, }, thunder: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#ffffff', 300, 0.7); scene.backgroundEffect('#000000', 1000, 0.7, 100); scene.showEffect('lightning', { x: defender.x, y: defender.y + 150, z: defender.z, yscale: 0, xscale: 2, }, { y: defender.y + 50, yscale: 1, xscale: 1.5, opacity: 0, time: 200, }, 'linear'); scene.showEffect('lightning', { x: defender.x, y: defender.y + 50, z: defender.z, yscale: 1, xscale: 1.5, time: 200, }, { opacity: 0, time: 700, }, 'linear'); scene.showEffect('lightning', { x: defender.x, y: defender.y + 50, z: defender.z, yscale: 1, xscale: 1.5, time: 600, }, { opacity: 0, time: 1100, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 1.5, opacity: 0.5, time: 200, }, { scale: 2, xscale: 4, opacity: 0.1, time: 900, }, 'linear', 'fade'); scene.showEffect('electroball', { x: defender.x, y: defender.y - 30, z: defender.z, opacity: 0.5, scale: 1.5, time: 200, }, { scale: 1.8, opacity: 0.1, time: 900, }, 'linear', 'fade'); defender.delay(200); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ time: 100, }, 'accel'); }, }, thunderbolt: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 600, 0.2); scene.showEffect('lightning', { x: defender.x, y: defender.y + 150, z: defender.z, yscale: 0, xscale: 2, }, { y: defender.y + 50, yscale: 1, xscale: 1.5, opacity: 0.8, time: 200, }, 'linear', 'fade'); scene.showEffect('lightning', { x: defender.x - 15, y: defender.y + 150, z: defender.z, yscale: 0, xscale: 2, time: 200, }, { y: defender.y + 50, yscale: 1, xscale: 1.5, opacity: 0.8, time: 400, }, 'linear', 'fade'); scene.showEffect('lightning', { x: defender.x + 15, y: defender.y + 150, z: defender.z, yscale: 0, xscale: 2, time: 400, }, { y: defender.y + 50, yscale: 1, xscale: 1.5, opacity: 0.8, time: 600, }, 'linear', 'fade'); }, }, thundercage: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#ffffff', 300, 0.7); scene.backgroundEffect('#000000', 1000, 0.7, 100); defender.anim({ x: defender.x - 5, time: 75, }); defender.anim({ x: defender.x + 5, time: 100, }); defender.anim({ x: defender.x - 5, time: 100, }); defender.anim({ x: defender.x + 5, time: 100, }); defender.anim({ x: defender.x - 5, time: 100, }); defender.anim({ x: defender.x + 5, time: 100, }); defender.anim({ x: defender.x - 5, time: 100, }); defender.anim({ x: defender.x + 5, time: 100, }); defender.anim({ x: defender.x, time: 100, }); for (let i = 0; i < 4; i++) { scene.showEffect('lightning', { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 0.3, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('lightning', { x: defender.x - 50, y: defender.y + 35, z: defender.z, scale: 0.3, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('lightning', { x: defender.x + 50, y: defender.y, z: defender.z, scale: 0.3, opacity: 1, time: 200 * i, }, { x: defender.x - 50, y: defender.y - 35, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); scene.showEffect('lightning', { x: defender.x - 50, y: defender.y, z: defender.z, scale: 0.3, opacity: 1, time: 200 * i, }, { x: defender.x + 50, y: defender.y - 35, z: defender.z, scale: 1, opacity: 0.4, time: 200 * i + 200, }, 'linear', 'fade'); } }, }, psychic: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#AA44BB', 250, 0.6); scene.backgroundEffect('#AA44FF', 250, 0.6, 400); defender.anim({ scale: 1.2, time: 100, }); defender.anim({ scale: 1, time: 100, }); defender.anim({ scale: 1.4, time: 150, }); defender.anim({ scale: 1, time: 150, }); scene.wait(700); }, }, meanlook: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#AA0000', 250, 0.3); scene.backgroundEffect('#000000', 250, 0.2, 400); scene.showEffect('stare', { x: defender.x, y: defender.y, z: defender.z, scale: 1, yscale: 0, opacity: 1, }, { yscale: 1, time: 700, }, 'decel', 'fade'); }, }, nightshade: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#550000', 250, 0.3); scene.backgroundEffect('#000000', 250, 0.2, 400); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y + 30, z: attacker.z, scale: 3, opacity: 0.3, time: 50, }, { x: defender.x, y: defender.y + 35, z: defender.z, scale: 3.5, opacity: 0.1, time: 600, }, 'accel', 'fade'); }, }, fairylock: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#FF99FF', 250, 0.3); scene.backgroundEffect('#AA44BB', 250, 0.2, 400); scene.wait(700); }, }, rockblast: { anim(scene, [attacker, defender]) { scene.showEffect('rock3', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.4, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 400, }, 'linear', 'explode'); }, }, geargrind: { anim(scene, [attacker, defender]) { scene.showEffect('gear', { x: defender.x + 70, y: defender.y + 70, z: defender.z, scale: 0.65, opacity: 0, time: 450, }, { x: defender.x + 20, y: defender.y, opacity: 1, time: 565, }, 'linear', 'explode'); scene.showEffect('gear', { x: defender.x - 70, y: defender.y - 70, z: defender.z, scale: 0.65, opacity: 0, time: 450, }, { x: defender.x - 20, y: defender.y, opacity: 1, time: 565, }, 'linear', 'explode'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 550, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('gear', { x: defender.x + 70, y: defender.y - 70, z: defender.z, scale: 0.65, opacity: 0, time: 650, }, { x: defender.x + 20, y: defender.y, opacity: 1, time: 765, }, 'linear', 'explode'); scene.showEffect('gear', { x: defender.x - 70, y: defender.y + 70, z: defender.z, scale: 0.65, opacity: 0, time: 650, }, { x: defender.x - 20, y: defender.y, opacity: 1, time: 765, }, 'linear', 'explode'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 750, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 900, }, 'linear'); attacker.anim({ x: defender.leftof(-30), y: defender.y + 80, z: defender.behind(-30), time: 400, }, 'ballistic'); attacker.anim({ x: defender.leftof(30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ x: defender.leftof(30), y: defender.y + 80, z: defender.behind(-30), time: 200, }, 'ballisticUp'); attacker.anim({ x: defender.leftof(-30), y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(450); defender.anim({ y: defender.y + 15, z: defender.behind(10), yscale: 1.3, time: 100, }, 'swing'); defender.anim({ time: 100, }, 'swing'); defender.delay(225); defender.anim({ x: defender.leftof(-10), y: defender.y + 15, z: defender.behind(5), yscale: 1.3, time: 100, }, 'swing'); defender.anim({ time: 100, }, 'swing'); }, }, iciclespear: { anim(scene, [attacker, defender]) { scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.6, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.6, time: 300, }, 'linear', 'explode'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.6, time: 75, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.6, time: 375, }, 'linear', 'fade'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.6, time: 150, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.6, time: 450, }, 'linear', 'fade'); }, }, tailslap: { anim: BattleOtherAnims.contactattack.anim, }, furyswipes: { anim(scene, [attacker, defender]) { scene.showEffect('leftslash', { x: defender.x - 20, y: defender.y + 20, z: defender.z, scale: 1, opacity: 1, time: 400, }, { x: defender.x - 20, y: defender.y + 20, z: defender.z, scale: 1.5, opacity: 0, time: 700, }, 'linear', 'fade'); scene.showEffect('leftslash', { x: defender.x - 20, y: defender.y - 20, z: defender.z, scale: 1, opacity: 1, time: 400, }, { x: defender.x - 20, y: defender.y - 20, z: defender.z, scale: 1.5, opacity: 0, time: 700, }, 'linear', 'fade'); scene.showEffect('rightslash', { x: defender.x + 20, y: defender.y + 20, z: defender.z, scale: 1, opacity: 1, time: 700, }, { x: defender.x + 20, y: defender.y + 20, z: defender.z, scale: 1.5, opacity: 0, time: 1000, }, 'linear', 'fade'); scene.showEffect('rightslash', { x: defender.x + 20, y: defender.y - 20, z: defender.z, scale: 1, opacity: 1, time: 700, }, { x: defender.x + 20, y: defender.y - 20, z: defender.z, scale: 1.5, opacity: 0, time: 1000, }, 'linear', 'fade'); BattleOtherAnims.xattack.anim(scene, [attacker, defender]); }, }, furyattack: { anim: BattleOtherAnims.xattack.anim, }, bulletseed: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.6, time: 300, }, 'linear', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 0.6, time: 30, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.6, time: 330, }, 'linear', 'fade'); }, }, spikecannon: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.6, time: 300, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 0.6, time: 30, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.6, time: 330, }, 'linear', 'fade'); }, }, twineedle: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x - 35, y: defender.y + 10, z: defender.z, opacity: 0.6, time: 300, }, 'linear', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 200, }, { x: defender.x + 20, y: defender.y - 20, z: defender.z, opacity: 0.6, time: 500, }, 'linear', 'explode'); }, }, razorshell: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 1.5, opacity: 0.6, time: 700, }, { scale: 2, opacity: 0, time: 1000, }, 'accel', 'fade'); scene.showEffect('leftslash', { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 1.5, opacity: 0.6, time: 600, }, { scale: 2, opacity: 0, time: 1000, }, 'accel', 'fade'); scene.showEffect('shell', { x: defender.x - 60, y: defender.y + 70, z: defender.z, scale: 0.75, opacity: 1, time: 400, }, { x: defender.x + 60, y: defender.y - 70, scale: 0.6, opacity: 0, time: 700, }, 'decel'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, aquastep: { anim(scene, [attacker, defender]) { BattleOtherAnims.dance.anim(scene, [attacker, defender]); scene.showEffect('foot', { x: defender.x, y: defender.y - 30, z: defender.behind(15), scale: 1, opacity: 1, time: 550, }, { x: defender.x - 50, z: defender.behind(20), scale: 1.7, opacity: 0, time: 800, }, 'linear'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y - 30, z: defender.behind(15), scale: 1, opacity: 1, time: 550, }, { x: defender.x - 50, z: defender.behind(20), scale: 1.7, opacity: 0, time: 800, }, 'linear'); }, }, aquacutter: { anim(scene, [attacker, defender]) { scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, opacity: 0.6, time: 700, }, { scale: 2, opacity: 0, time: 1000, }, 'accel', 'fade'); scene.showEffect('leftslash', { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, opacity: 0.6, time: 600, }, { scale: 2, opacity: 0, time: 1000, }, 'accel', 'fade'); scene.showEffect('iceball', { x: defender.x - 60, y: defender.y + 70, z: defender.z, scale: 0.75, opacity: 1, time: 400, }, { x: defender.x + 60, y: defender.y - 70, scale: 0.6, opacity: 0, time: 700, }, 'decel'); }, }, wavecrash: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#000039 30%, #3848B8)', 600, 0.6); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 300, }, { scale: 8, opacity: 0, time: 600, }, 'linear'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { scale: 8, opacity: 0, time: 800, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(280); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, crabhammer: { anim(scene, [attacker, defender]) { scene.showEffect('waterwisp', { x: defender.x, y: defender.y + 80, z: defender.behind(-15), scale: 1.5, opacity: 0.8, time: 400, }, { y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 500, }, 'linear', 'explode'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y - 25, z: defender.z, scale: 1, time: 500, }, { x: defender.x + 50, scale: 0.6, opacity: 0.3, time: 800, }, 'linear', 'fade'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y - 25, z: defender.z, scale: 1, time: 500, }, { x: defender.x - 50, scale: 0.6, opacity: 0.3, time: 800, }, 'linear', 'fade'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, aquajet: { anim(scene, [attacker, defender]) { scene.showEffect('waterwisp', { x: attacker.x + 20, y: attacker.y + 30, z: defender.z, scale: 0, opacity: 1, }, { y: attacker.y - 20, scale: 4, opacity: 0, }, 'decel'); scene.showEffect('waterwisp', { x: Math.floor((attacker.x + defender.x) / 2) - 20, y: Math.floor((attacker.y + defender.y) / 2) + 30, z: Math.floor((attacker.z + defender.z) / 2), scale: 0, opacity: 1, time: 150, }, { y: Math.floor((attacker.y + defender.y) / 2) - 20, scale: 4, opacity: 0, }, 'decel'); scene.showEffect('waterwisp', { x: defender.x + 10, y: defender.y + 30, z: defender.z, scale: 0, opacity: 1, time: 300, }, { y: defender.y - 20, scale: 4, opacity: 0, }, 'decel'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 50, }, { x: defender.x, y: defender.y, z: defender.behind(70), time: 350, }, 'accel', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 100, }, { x: defender.x, y: defender.y, z: defender.behind(70), time: 400, }, 'accel', 'fade'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(70), time: 300, opacity: 0.5, }, 'accel'); attacker.anim({ x: defender.x, y: defender.x, z: defender.behind(100), opacity: 0, time: 100, }, 'linear'); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.behind(70), opacity: 0, time: 1, }, 'linear'); attacker.anim({ opacity: 1, time: 500, }, 'decel'); defender.delay(260); defender.anim({ z: defender.behind(30), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, iceshard: { anim(scene, [attacker, defender]) { scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.5, opacity: 0.2, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.6, time: 300, }, 'linear', 'explode'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.5, opacity: 0.1, time: 100, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, time: 400, }, 'linear', 'fade'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.5, opacity: 0.1, time: 200, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, time: 500, }, 'linear', 'fade'); }, }, watershuriken: { anim(scene, [attacker, defender]) { scene.showEffect('waterwisp', { x: attacker.x + 20, y: attacker.y + 30, z: defender.z, scale: 0, opacity: 1, }, { y: attacker.y - 20, scale: 4, opacity: 0, }, 'decel'); scene.showEffect('waterwisp', { x: Math.floor((attacker.x + defender.x) / 2) - 20, y: Math.floor((attacker.y + defender.y) / 2) + 30, z: Math.floor((attacker.z + defender.z) / 2), scale: 0, opacity: 1, time: 150, }, { y: Math.floor((attacker.y + defender.y) / 2) - 20, scale: 4, opacity: 0, }, 'decel'); scene.showEffect('waterwisp', { x: defender.x + 10, y: defender.y + 30, z: defender.z, scale: 0, opacity: 1, time: 300, }, { y: defender.y - 20, scale: 4, opacity: 0, }, 'decel'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 50, }, { x: defender.x, y: defender.y, z: defender.behind(70), time: 350, }, 'accel', 'fade'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 100, }, { x: defender.x, y: defender.y, z: defender.behind(70), time: 400, }, 'accel', 'fade'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, }, { x: defender.x, y: defender.y, z: defender.behind(70), time: 300, }, 'accel', 'fade'); }, }, icebeam: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.y - attacker.y) / 5; let zstep = (defender.z - attacker.z) / 5; for (let i = 0; i < 4; i++) { scene.showEffect('icicle', { x: attacker.x + xstep * (i + 1), y: attacker.y + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1.5, opacity: 0.6, time: 40 * i, }, { opacity: 0, time: 40 * i + 600, }, 'linear'); } scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 100, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 400, }, 'linear'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 300, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 600, }, 'linear'); scene.showEffect('wisp', { x: defender.x - 30, y: defender.y, z: defender.z, scale: 2, opacity: 0.5, time: 200, }, { scale: 4, opacity: 0, time: 600, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 2, opacity: 0.5, time: 300, }, { scale: 4, opacity: 0, time: 650, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 15, y: defender.y, z: defender.z, scale: 2, opacity: 0.5, time: 400, }, { scale: 4, opacity: 0, time: 700, }, 'linear', 'fade'); }, }, freezingglare: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.y - attacker.y) / 5; let zstep = (defender.z - attacker.z) / 5; for (let i = 0; i < 4; i++) { scene.showEffect('pinkicicle', { x: attacker.x + xstep * (i + 1), y: attacker.y + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1.5, opacity: 0.6, time: 40 * i, }, { opacity: 0, time: 40 * i + 600, }, 'linear'); } scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 100, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 400, }, 'linear'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 300, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 600, }, 'linear'); scene.showEffect('purplewisp', { x: defender.x - 30, y: defender.y, z: defender.z, scale: 2, opacity: 0.5, time: 200, }, { scale: 4, opacity: 0, time: 600, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 2, opacity: 0.5, time: 300, }, { scale: 4, opacity: 0, time: 650, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x + 15, y: defender.y, z: defender.z, scale: 2, opacity: 0.5, time: 400, }, { scale: 4, opacity: 0, time: 700, }, 'linear', 'fade'); }, }, freezedry: { anim(scene, [attacker, defender]) { scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, }, { x: defender.x, y: defender.y, z: defender.behind(20), opacity: 0.6, time: 400, }, 'linear', 'explode'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, time: 100, }, { x: defender.x + 10, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 500, }, 'linear', 'explode'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, time: 200, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(20), opacity: 0.6, time: 600, }, 'linear', 'explode'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 300, }, { x: defender.x, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 700, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2.4, opacity: 0.3, }, { x: defender.x + 10, y: defender.y + 5, z: defender.behind(30), scale: 3, opacity: 0.6, time: 400, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2.4, opacity: 0.3, time: 100, }, { x: defender.x - 10, y: defender.y - 5, z: defender.behind(30), scale: 3, opacity: 0.6, time: 500, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2.4, opacity: 0.3, time: 200, }, { x: defender.x, y: defender.y + 5, z: defender.behind(30), scale: 3, opacity: 0.6, time: 600, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2.4, opacity: 0.3, time: 300, }, { x: defender.x, y: defender.y + 5, z: defender.behind(30), scale: 3, opacity: 0.6, time: 700, }, 'linear', 'explode'); }, }, icywind: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.7, opacity: 0.3, }, { x: defender.x + 10, y: defender.y + 5, z: defender.behind(30), scale: 2.5, opacity: 0.4, time: 400, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.7, opacity: 0.3, time: 100, }, { x: defender.x - 10, y: defender.y - 5, z: defender.behind(30), scale: 2.5, opacity: 0.4, time: 500, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.7, opacity: 0.3, time: 200, }, { x: defender.x, y: defender.y + 5, z: defender.behind(30), scale: 2.5, opacity: 0.4, time: 600, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.7, opacity: 0.3, time: 300, }, { x: defender.x, y: defender.y + 5, z: defender.behind(30), scale: 2.5, opacity: 0.4, time: 700, }, 'linear', 'explode'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.2, }, { x: defender.x, y: defender.y, z: defender.behind(20), opacity: 0.6, time: 400, }, 'linear', 'fade'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.2, time: 200, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(20), opacity: 0.6, time: 600, }, 'linear', 'fade'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.2, time: 300, }, { x: defender.x, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 700, }, 'linear', 'fade'); } }, }, ancientpower: { anim(scene, [attacker, defender]) { scene.showEffect('rock3', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 0.2, }, { x: defender.x + 50, y: defender.y + 20, z: defender.behind(20), opacity: 0.6, scale: 0.7, time: 400, }, 'linear', 'explode'); scene.showEffect('rock3', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 0.2, }, { x: defender.x + 40, y: defender.y - 30, z: defender.behind(20), opacity: 0.6, scale: 0.7, time: 400, }, 'linear', 'explode'); scene.showEffect('rock3', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 0.7, }, { x: defender.x - 50, y: defender.y + 5, z: defender.behind(20), opacity: 0.6, scale: 0.8, time: 400, }, 'linear', 'explode'); }, }, powergem: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 45, z: attacker.z, scale: 0.4, opacity: 0.2, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(5), opacity: 0.3, time: 300, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x - 45, y: attacker.y - 20, z: attacker.z, scale: 0.4, opacity: 0.2, time: 100, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(5), opacity: 0.3, time: 400, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x + 45, y: attacker.y - 20, z: attacker.z, scale: 0.4, opacity: 0.2, time: 200, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(5), opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('shine', { x: attacker.x, y: attacker.y + 45, z: attacker.z, scale: 0.4, opacity: 0.2, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(5), opacity: 0.3, time: 300, }, 'linear', 'explode'); scene.showEffect('shine', { x: attacker.x - 45, y: attacker.y - 20, z: attacker.z, scale: 0.4, opacity: 0.2, time: 100, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(5), opacity: 0.3, time: 400, }, 'linear', 'explode'); scene.showEffect('shine', { x: attacker.x + 45, y: attacker.y - 20, z: attacker.z, scale: 0.4, opacity: 0.2, time: 200, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(5), opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('iceball', { x: defender.x - 15, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.5, time: 300, }, { scale: 2, opacity: 0, time: 600, }, 'linear'); scene.showEffect('iceball', { x: defender.x + 15, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.5, time: 400, }, { scale: 2, opacity: 0, time: 700, }, 'linear'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.5, time: 500, }, { scale: 2, opacity: 0, time: 800, }, 'linear'); defender.delay(325); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, chargebeam: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, }, { x: defender.x, y: defender.y, z: defender.behind(20), opacity: 0.6, time: 200, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 50, }, { x: defender.x + 10, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 250, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 100, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(20), opacity: 0.6, time: 300, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 150, }, { x: defender.x, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 350, }, 'linear', 'explode'); }, }, psybeam: { anim(scene, [attacker, defender]) { scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, }, { x: defender.x, y: defender.y, z: defender.behind(20), opacity: 0.6, time: 200, }, 'linear', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 50, }, { x: defender.x + 10, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 250, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 100, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(20), opacity: 0.6, time: 300, }, 'linear', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 150, }, { x: defender.x, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 350, }, 'linear', 'explode'); }, }, twinbeam: { anim(scene, [attacker, defender]) { scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, }, { x: defender.x, y: defender.y, z: defender.behind(20), opacity: 0.6, time: 200, }, 'linear', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 50, }, { x: defender.x + 10, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 250, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 100, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(20), opacity: 0.6, time: 300, }, 'linear', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 150, }, { x: defender.x, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 350, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, }, { x: defender.x, y: defender.y, z: defender.behind(20), opacity: 0.6, time: 200, }, 'linear', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 450, }, { x: defender.x + 10, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 700, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 550, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(20), opacity: 0.6, time: 750, }, 'linear', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 600, }, { x: defender.x, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 800, }, 'linear', 'explode'); }, }, flamethrower: { anim(scene, [attacker, defender]) { scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.7, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.6, time: 400, }, 'decel', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.7, time: 100, }, { x: defender.x + 10, y: defender.y - 5, z: defender.behind(0), opacity: 0.6, time: 500, }, 'decel', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.7, time: 200, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(0), opacity: 0.6, time: 600, }, 'decel', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.7, time: 300, }, { x: defender.x, y: defender.y - 5, z: defender.behind(0), opacity: 0.6, time: 700, }, 'decel', 'explode'); }, }, toxic: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 400, }, 'ballistic', 'explode'); }, }, spicyextract: { anim(scene, [attacker, defender]) { scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, opacity: 1, time: 400, }, 'ballistic', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 100, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, opacity: 1, time: 500, }, 'ballistic', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 200, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, opacity: 1, time: 600, }, 'ballistic', 'fade'); }, }, sludge: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, opacity: 1, time: 400, }, 'ballistic', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 100, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, opacity: 1, time: 500, }, 'ballistic', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 200, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, opacity: 1, time: 600, }, 'ballistic', 'fade'); }, }, sludgewave: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); } const defender = defenders[1] || defenders[0]; scene.backgroundEffect('#AA00AA', 700, 0.2); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y - 25, z: attacker.z, scale: 0.3, opacity: 0.3, }, { x: defender.x, y: defender.y + 10, z: defender.behind(50), scale: 2, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('purplewisp', { x: attacker.x - 30, y: attacker.y - 25, z: attacker.z, scale: 0.3, opacity: 0.3, }, { x: defender.x - 60, y: defender.y, z: defender.behind(50), scale: 2, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('purplewisp', { x: attacker.x + 30, y: attacker.y - 25, z: attacker.z, scale: 0.3, opacity: 0.3, }, { x: defender.x + 60, y: defender.y, z: defender.behind(50), scale: 2, opacity: 0.6, }, 'decel', 'explode'); }, }, smokescreen: { anim(scene, [attacker, defender]) { scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, opacity: 1, time: 400, }, 'ballistic', 'explode'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 100, }, { x: defender.x + 40, y: defender.y - 20, z: defender.z, scale: 0.7, opacity: 1, time: 500, }, 'ballistic', 'explode'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 200, }, { x: defender.x - 30, y: defender.y - 10, z: defender.z, scale: 0.7, opacity: 1, time: 600, }, 'ballistic', 'explode'); }, }, sludgebomb: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, opacity: 1, time: 400, }, 'ballistic', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 100, }, { x: defender.x + 40, y: defender.y - 20, z: defender.z, scale: 0.7, opacity: 1, time: 500, }, 'ballistic', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 200, }, { x: defender.x - 30, y: defender.y - 10, z: defender.z, scale: 0.7, opacity: 1, time: 600, }, 'ballistic', 'explode'); }, }, syrupbomb: { anim(scene, [attacker, defender]) { const imageType = { filter: !attacker.sp.shiny ? 'hue-rotate(-45deg)' : 'hue-rotate(30deg)' }; scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, opacity: 1, time: 400, }, 'ballistic', 'explode', imageType); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 100, }, { x: defender.x + 40, y: defender.y - 20, z: defender.z, scale: 0.7, opacity: 1, time: 500, }, 'ballistic', 'explode', imageType); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 200, }, { x: defender.x - 30, y: defender.y - 10, z: defender.z, scale: 0.7, opacity: 1, time: 600, }, 'ballistic', 'explode', imageType); }, }, mudbomb: { anim(scene, [attacker, defender]) { scene.showEffect('mudwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, opacity: 1, time: 400, }, 'ballistic', 'explode'); scene.showEffect('mudwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 100, }, { x: defender.x + 40, y: defender.y - 20, z: defender.z, scale: 0.7, opacity: 1, time: 500, }, 'ballistic', 'explode'); scene.showEffect('mudwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 200, }, { x: defender.x - 30, y: defender.y - 10, z: defender.z, scale: 0.7, opacity: 1, time: 600, }, 'ballistic', 'explode'); }, }, magnetbomb: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, opacity: 1, time: 400, }, 'ballistic', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 100, }, { x: defender.x + 40, y: defender.y - 20, z: defender.z, scale: 0.7, opacity: 1, time: 500, }, 'ballistic', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 200, }, { x: defender.x - 30, y: defender.y - 10, z: defender.z, scale: 0.7, opacity: 1, time: 600, }, 'ballistic', 'explode'); }, }, seedbomb: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, opacity: 1, time: 400, }, 'ballistic', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 100, }, { x: defender.x + 40, y: defender.y - 20, z: defender.z, scale: 0.7, opacity: 1, time: 500, }, 'ballistic', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 200, }, { x: defender.x - 30, y: defender.y - 10, z: defender.z, scale: 0.7, opacity: 1, time: 600, }, 'ballistic', 'explode'); }, }, willowisp: { anim(scene, [attacker, defender]) { scene.showEffect('bluefireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0, }, { x: defender.leftof(40), y: defender.y + 15, z: defender.z, scale: 0.8, opacity: 0.7, time: 500, }, 'decel', 'fade'); if (defender.isMissedPokemon) return; scene.showEffect('bluefireball', { x: defender.leftof(40), y: defender.y + 15, z: defender.z, scale: 0.8, opacity: 0.7, time: 500, }, { x: defender.leftof(-40), y: defender.y, z: defender.z, scale: 0.7, opacity: 1, time: 700, }, 'swing', 'fade'); scene.showEffect('bluefireball', { x: defender.leftof(-40), y: defender.y, z: defender.z, scale: 0.1, opacity: 0, time: 700, }, { x: defender.leftof(10), y: defender.y - 15, z: defender.z, scale: 0.7, opacity: 1, time: 900, }, 'swing', 'explode'); }, }, confuseray: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.15, opacity: 0, }, { x: defender.leftof(40), y: defender.y + 15, z: defender.z, scale: 0.3, opacity: 0.7, time: 500, }, 'decel', 'fade'); if (defender.isMissedPokemon) return; scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.15, opacity: 0, }, { x: defender.leftof(40), y: defender.y + 15, z: defender.z, scale: 0.3, opacity: 0.7, time: 500, }, 'decel', 'fade'); scene.showEffect('electroball', { x: defender.leftof(40), y: defender.y + 15, z: defender.z, scale: 0.3, opacity: 0.7, time: 500, }, { x: defender.leftof(-40), y: defender.y, z: defender.z, scale: 0.2, opacity: 1, time: 700, }, 'swing', 'fade'); scene.showEffect('electroball', { x: defender.leftof(-40), y: defender.y, z: defender.z, scale: 0.1, opacity: 0, time: 700, }, { x: defender.leftof(10), y: defender.y - 15, z: defender.z, scale: 0.5, opacity: 1, time: 900, }, 'swing', 'explode'); }, }, lovelykiss: { anim(scene, [attacker, defender]) { scene.showEffect('heart', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0, }, { x: defender.leftof(40), y: defender.y + 15, z: defender.z, scale: 0.7, opacity: 0.7, time: 500, }, 'decel', 'fade'); if (defender.isMissedPokemon) return; scene.showEffect('heart', { x: defender.leftof(40), y: defender.y + 15, z: defender.z, scale: 0.7, opacity: 0.7, time: 500, }, { x: defender.leftof(-40), y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 700, }, 'swing', 'fade'); scene.showEffect('heart', { x: defender.leftof(-40), y: defender.y, z: defender.z, scale: 0.7, opacity: 0, time: 700, }, { x: defender.leftof(10), y: defender.y - 15, z: defender.z, scale: 1, opacity: 1, time: 900, }, 'swing', 'explode'); }, }, rockwrecker: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.7); scene.showEffect('rock3', { x: attacker.x, y: attacker.y - 20, z: attacker.z, scale: 1, opacity: 0.6, }, { x: attacker.x, y: attacker.y + 20, opacity: 0, time: 350, }, 'decel'); scene.showEffect('rock3', { x: attacker.x, y: attacker.y + 20, z: attacker.z, scale: 1, opacity: 0.4, time: 350, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1.2, opacity: 1, time: 550, }, 'linear', 'explode'); scene.showEffect('rock3', { x: attacker.x, y: attacker.y + 20, z: attacker.z, scale: 1, opacity: 0.2, time: 400, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1.2, opacity: 0.2, time: 600, }, 'linear', 'explode'); defender.delay(600); defender.anim({ z: defender.behind(20), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, stoneedge: { anim(scene, [attacker, defender]) { scene.showEffect('rock3', { x: defender.x + 15, y: defender.y - 50, z: defender.z, scale: 0.5, }, { y: defender.y + 60, yscale: 1, opacity: 0, time: 350, }, 'accel'); scene.showEffect('rock3', { x: defender.x + 30, y: defender.y - 50, z: defender.z, scale: 0.5, time: 150, }, { y: defender.y + 60, yscale: 1, opacity: 0, time: 500, }, 'accel'); scene.showEffect('rock3', { x: defender.x - 30, y: defender.y - 50, z: defender.z, scale: 0.5, time: 300, }, { y: defender.y + 60, yscale: 1, opacity: 0, time: 650, }, 'accel'); scene.showEffect('rock3', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 0.5, time: 400, }, { y: defender.y + 60, yscale: 1, opacity: 0, time: 750, }, 'accel'); scene.showEffect('rock3', { x: defender.x - 15, y: defender.y - 50, z: defender.z, scale: 0.5, time: 500, }, { y: defender.y + 60, yscale: 1, opacity: 0, time: 850, }, 'accel'); }, }, rockslide: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { defender.delay(200); defender.anim({ y: defender.y - 7, yscale: 0.9, time: 100, }, 'decel'); defender.anim({ time: 200, }); defender.delay(200); defender.anim({ y: defender.y - 7, yscale: 0.9, time: 100, }, 'decel'); defender.anim({ time: 200, }); scene.showEffect('rock1', { x: defender.x + 15, y: defender.y + 100, z: defender.z, opacity: 0, scale: 0.5, }, { y: defender.y - 30, opacity: 1, time: 300, }, 'accel', 'explode'); scene.showEffect('rock2', { x: defender.x + 30, y: defender.y + 100, z: defender.z, opacity: 0, scale: 0.5, time: 100, }, { y: defender.y - 30, opacity: 1, time: 400, }, 'accel', 'explode'); scene.showEffect('rock1', { x: defender.x - 30, y: defender.y + 100, z: defender.z, opacity: 0, scale: 0.5, time: 200, }, { y: defender.y - 30, opacity: 1, time: 500, }, 'accel', 'explode'); scene.showEffect('rock2', { x: defender.x, y: defender.y + 100, z: defender.z, opacity: 0, scale: 0.5, time: 300, }, { y: defender.y - 30, opacity: 1, time: 600, }, 'accel', 'explode'); scene.showEffect('rock1', { x: defender.x - 15, y: defender.y + 100, z: defender.z, opacity: 0, scale: 0.5, time: 400, }, { y: defender.y - 30, opacity: 1, time: 700, }, 'accel', 'explode'); scene.showEffect('mudwisp', { x: defender.x + 40, y: defender.y - 40, z: defender.z, scale: 0, opacity: 0.4, time: 300, }, { scale: 2, opacity: 0, }, 'decel'); scene.showEffect('mudwisp', { x: defender.x - 40, y: defender.y - 40, z: defender.z, scale: 0, opacity: 0.4, time: 450, }, { scale: 2, opacity: 0, }, 'decel'); scene.showEffect('mudwisp', { x: defender.x + 10, y: defender.y - 40, z: defender.z, scale: 0, opacity: 0.4, time: 600, }, { scale: 2, opacity: 0, }, 'decel'); } }, }, avalanche: { anim(scene, [attacker, defender]) { defender.delay(200); defender.anim({ y: defender.y - 7, yscale: 0.9, time: 100, }, 'decel'); defender.anim({ time: 200, }); defender.delay(200); defender.anim({ y: defender.y - 7, yscale: 0.9, time: 100, }, 'decel'); defender.anim({ time: 200, }); scene.showEffect('wisp', { x: defender.x + 15, y: defender.y + 100, z: defender.z, opacity: 0, scale: 0.8, }, { y: defender.y - 30, opacity: 1, time: 300, }, 'accel', 'explode'); scene.showEffect('wisp', { x: defender.x + 30, y: defender.y + 100, z: defender.z, opacity: 0, scale: 0.8, time: 100, }, { y: defender.y - 30, opacity: 1, time: 400, }, 'accel', 'explode'); scene.showEffect('wisp', { x: defender.x - 30, y: defender.y + 100, z: defender.z, opacity: 0, scale: 0.8, time: 200, }, { y: defender.y - 30, opacity: 1, time: 500, }, 'accel', 'explode'); scene.showEffect('wisp', { x: defender.x, y: defender.y + 100, z: defender.z, opacity: 0, scale: 0.8, time: 300, }, { y: defender.y - 30, opacity: 1, time: 600, }, 'accel', 'explode'); scene.showEffect('wisp', { x: defender.x - 15, y: defender.y + 100, z: defender.z, opacity: 0, scale: 0.8, time: 400, }, { y: defender.y - 30, opacity: 1, time: 700, }, 'accel', 'explode'); scene.showEffect('wisp', { x: defender.x + 40, y: defender.y - 40, z: defender.z, scale: 0, opacity: 0.4, time: 300, }, { scale: 2, opacity: 0, }, 'decel'); scene.showEffect('wisp', { x: defender.x - 40, y: defender.y - 40, z: defender.z, scale: 0, opacity: 0.4, time: 450, }, { scale: 2, opacity: 0, }, 'decel'); scene.showEffect('wisp', { x: defender.x + 10, y: defender.y - 40, z: defender.z, scale: 0, opacity: 0.4, time: 600, }, { scale: 2, opacity: 0, }, 'decel'); }, }, triplearrows: { anim(scene, [attacker, defender]) { scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.5, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.5, }, { scale: 3, opacity: 0.3, time: 600, }, 'decel', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.1, opacity: 0.4, time: 0, }, { x: attacker.x + 30, y: attacker.y + 200, z: attacker.z, scale: 0.2, opacity: 0, time: 300, }, 'decel'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.1, opacity: 0.4, time: 50, }, { x: attacker.x - 30, y: attacker.y + 200, z: attacker.z, scale: 0.2, opacity: 0, time: 350, }, 'decel'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.1, opacity: 0.4, time: 100, }, { x: attacker.x - 10, y: attacker.y + 200, z: attacker.z, scale: 0.2, opacity: 0, time: 400, }, 'decel'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.1, opacity: 0.4, time: 150, }, { x: attacker.x + 10, y: attacker.y + 200, z: attacker.z, scale: 0.2, opacity: 0, time: 450, }, 'decel'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.1, opacity: 0.4, time: 175, }, { x: attacker.x + 35, y: attacker.y + 200, z: attacker.z, scale: 0.2, opacity: 0, time: 500, }, 'decel', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.1, opacity: 0.4, time: 200, }, { x: attacker.x, y: attacker.y + 200, z: attacker.behind(-10), scale: 0.2, opacity: 0, time: 550, }, 'decel', 'fade'); scene.showEffect('flareball', { x: defender.x - 20, y: defender.y + 200, z: defender.behind(5), opacity: 0.4, xscale: 0.1, yscale: 5, time: 375, }, { y: defender.y + 150, opacity: 0, time: 675, }, 'decel'); scene.showEffect('flareball', { x: defender.x - 20, y: defender.y - 50, z: defender.behind(5), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 390, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 675, }, 'linear'); scene.showEffect('flareball', { x: defender.x + 40, y: defender.y + 200, z: defender.behind(-5), opacity: 0.4, xscale: 0.1, yscale: 5, time: 525, }, { y: defender.y + 150, opacity: 0, time: 800, }, 'decel'); scene.showEffect('flareball', { x: defender.x + 40, y: defender.y - 50, z: defender.behind(-5), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 540, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 800, }, 'linear'); scene.showEffect('flareball', { x: defender.x - 70, y: defender.y + 200, z: defender.behind(-10), opacity: 0.4, xscale: 0.1, yscale: 5, time: 575, }, { y: defender.y + 150, z: defender.behind(-10), opacity: 0, time: 825, }, 'decel'); scene.showEffect('flareball', { x: defender.x - 70, y: defender.y - 50, z: defender.z, opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 590, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 825, }, 'linear'); scene.showEffect('flareball', { x: defender.x + 70, y: defender.y + 200, z: defender.behind(10), opacity: 0.4, xscale: 0.1, yscale: 5, time: 650, }, { y: defender.y + 150, opacity: 0, time: 950, }, 'decel'); scene.showEffect('flareball', { x: defender.x + 70, y: defender.y - 50, z: defender.behind(10), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 665, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 950, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y + 200, z: defender.z, opacity: 0.4, xscale: 0.1, yscale: 5, time: 700, }, { y: defender.y + 150, opacity: 0, time: 1000, }, 'decel'); scene.showEffect('flareball', { x: defender.x, y: defender.y - 50, z: defender.z, opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 720, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 1000, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y + 200, z: defender.behind(-20), opacity: 0.4, xscale: 0.1, yscale: 5, time: 725, }, { y: defender.y + 150, opacity: 0, time: 1025, }, 'decel'); scene.showEffect('flareball', { x: defender.x, y: defender.y - 35, z: defender.behind(-20), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 740, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 1025, }, 'linear'); }, }, thousandarrows: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { defender.delay(425); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ time: 100, }, 'accel'); } const defender = defenders[1] || defenders[0]; scene.backgroundEffect('#000000', 1100, 0.3); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.5, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.5, }, { scale: 3, opacity: 0.3, time: 600, }, 'decel', 'fade'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.1, opacity: 0.4, time: 0, }, { x: attacker.x + 30, y: attacker.y + 200, z: attacker.z, scale: 0.2, opacity: 0, time: 300, }, 'decel'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.1, opacity: 0.4, time: 50, }, { x: attacker.x - 30, y: attacker.y + 200, z: attacker.z, scale: 0.2, opacity: 0, time: 350, }, 'decel'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.1, opacity: 0.4, time: 100, }, { x: attacker.x - 10, y: attacker.y + 200, z: attacker.z, scale: 0.2, opacity: 0, time: 400, }, 'decel'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.1, opacity: 0.4, time: 150, }, { x: attacker.x + 10, y: attacker.y + 200, z: attacker.z, scale: 0.2, opacity: 0, time: 450, }, 'decel'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.1, opacity: 0.4, time: 175, }, { x: attacker.x + 35, y: attacker.y + 200, z: attacker.z, scale: 0.2, opacity: 0, time: 500, }, 'decel', 'fade'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.1, opacity: 0.4, time: 200, }, { x: attacker.x, y: attacker.y + 200, z: attacker.behind(-10), scale: 0.2, opacity: 0, time: 550, }, 'decel', 'fade'); scene.showEffect('energyball', { x: defender.x - 20, y: defender.y + 200, z: defender.behind(5), opacity: 0.4, xscale: 0.1, yscale: 5, time: 375, }, { y: defender.y + 150, opacity: 0, time: 675, }, 'decel'); scene.showEffect('energyball', { x: defender.x - 20, y: defender.y - 50, z: defender.behind(5), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 390, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 675, }, 'linear'); scene.showEffect('energyball', { x: defender.x + 40, y: defender.y + 200, z: defender.behind(-5), opacity: 0.4, xscale: 0.1, yscale: 5, time: 525, }, { y: defender.y + 150, opacity: 0, time: 800, }, 'decel'); scene.showEffect('energyball', { x: defender.x + 40, y: defender.y - 50, z: defender.behind(-5), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 540, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 800, }, 'linear'); scene.showEffect('energyball', { x: defender.x - 70, y: defender.y + 200, z: defender.behind(-10), opacity: 0.4, xscale: 0.1, yscale: 5, time: 575, }, { y: defender.y + 150, z: defender.behind(-10), opacity: 0, time: 825, }, 'decel'); scene.showEffect('energyball', { x: defender.x - 70, y: defender.y - 50, z: defender.z, opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 590, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 825, }, 'linear'); scene.showEffect('energyball', { x: defender.x + 70, y: defender.y + 200, z: defender.behind(10), opacity: 0.4, xscale: 0.1, yscale: 5, time: 650, }, { y: defender.y + 150, opacity: 0, time: 950, }, 'decel'); scene.showEffect('energyball', { x: defender.x + 70, y: defender.y - 50, z: defender.behind(10), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 665, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 950, }, 'linear'); scene.showEffect('energyball', { x: defender.x, y: defender.y + 200, z: defender.z, opacity: 0.4, xscale: 0.1, yscale: 5, time: 700, }, { y: defender.y + 150, opacity: 0, time: 1000, }, 'decel'); scene.showEffect('energyball', { x: defender.x, y: defender.y - 50, z: defender.z, opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 720, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 1000, }, 'linear'); scene.showEffect('energyball', { x: defender.x, y: defender.y + 200, z: defender.behind(-20), opacity: 0.4, xscale: 0.1, yscale: 5, time: 725, }, { y: defender.y + 150, opacity: 0, time: 1025, }, 'decel'); scene.showEffect('energyball', { x: defender.x, y: defender.y - 35, z: defender.behind(-20), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 740, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 1025, }, 'linear'); }, }, thousandwaves: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { defender.delay(825); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); } const defender = defenders[1] || defenders[0]; scene.backgroundEffect('#000000', 600, 0.3); scene.backgroundEffect('#199C27', 600, 0.5, 500); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.5, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.5, }, { scale: 3, opacity: 0.3, time: 600, }, 'decel', 'fade'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0, opacity: 0, }, { y: attacker.y - 50, scale: 0.1, yscale: 0.4, opacity: 0.3, time: 400, }, 'decel', 'fade'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0, opacity: 0, }, { y: attacker.y + 50, scale: 0.1, yscale: 0.4, opacity: 0.5, time: 400, }, 'decel', 'fade'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0, opacity: 0, }, { x: attacker.x - 35, y: attacker.y + 30, scale: 0.1, yscale: 0.4, opacity: 0.6, time: 400, }, 'decel', 'fade'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0, opacity: 0, }, { x: attacker.x + 35, y: attacker.y + 30, scale: 0.1, yscale: 0.4, opacity: 0.4, time: 400, }, 'decel', 'fade'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0, opacity: 0, }, { x: attacker.x - 35, y: attacker.y - 30, scale: 0.1, yscale: 0.4, opacity: 1, time: 400, }, 'decel', 'fade'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0, opacity: 0, }, { x: attacker.x + 35, y: attacker.y - 30, scale: 0.1, yscale: 0.4, opacity: 1, time: 400, }, 'decel', 'fade'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y - 50, z: attacker.behind(-30), scale: 0.1, yscale: 0.4, opacity: 1, time: 400, }, { x: attacker.x - 5, y: attacker.y - 25, z: attacker.behind(-70), scale: 0.2, yscale: 0.3, opacity: 0, time: 600, }, 'ballistic', 'fade'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y + 50, z: attacker.behind(-30), scale: 0.1, yscale: 0.4, opacity: 1, time: 400, }, { x: attacker.x - 5, y: attacker.y - 25, z: attacker.behind(-70), scale: 0.2, yscale: 0.3, opacity: 0, time: 620, }, 'ballistic', 'fade'); scene.showEffect('energyball', { x: attacker.x - 35, y: attacker.y - 10, z: attacker.behind(-30), scale: 0.1, yscale: 0.4, opacity: 1, time: 400, }, { x: attacker.x - 5, y: attacker.y - 25, z: attacker.behind(-70), scale: 0.2, yscale: 0.3, opacity: 0, time: 600, }, 'ballistic', 'fade'); scene.showEffect('energyball', { x: attacker.x + 35, y: attacker.y - 30, z: attacker.behind(-30), scale: 0.1, yscale: 0.4, opacity: 1, time: 400, }, { x: attacker.x - 5, y: attacker.y - 25, z: attacker.behind(-70), scale: 0.2, yscale: 0.3, opacity: 0, time: 630, }, 'ballistic', 'fade'); scene.showEffect('energyball', { x: attacker.x - 35, y: attacker.y + 30, z: attacker.behind(-30), scale: 0.1, yscale: 0.4, opacity: 1, time: 400, }, { x: attacker.x - 5, y: attacker.y - 25, z: attacker.behind(-70), scale: 0.2, yscale: 0.3, opacity: 0, time: 640, }, 'ballistic', 'fade'); scene.showEffect('energyball', { x: attacker.x + 35, y: attacker.y + 30, z: attacker.behind(-30), scale: 0.1, yscale: 0.5, opacity: 1, time: 400, }, { x: attacker.x - 5, y: attacker.y - 25, z: attacker.behind(-70), scale: 0.2, yscale: 0.4, opacity: 0, time: 600, }, 'ballistic', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y - 25, z: attacker.behind(-70), scale: 0.7, opacity: 0.3, time: 600, }, { x: defender.x, y: defender.y - 10, z: defender.behind(30), scale: 1.3, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('wisp', { x: attacker.x - 5, y: attacker.y - 25, z: attacker.behind(-70), scale: 0.7, opacity: 0.3, time: 600, }, { x: defender.x - 80, y: defender.y - 10, z: defender.behind(30), scale: 1.3, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('wisp', { x: attacker.x + 5, y: attacker.y - 25, z: attacker.behind(-70), scale: 0.7, opacity: 0.3, time: 600, }, { x: defender.x + 55, y: defender.y - 10, z: defender.behind(30), scale: 1.3, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y - 50, z: attacker.z, scale: 1.5, xscale: 6, opacity: 0.1, time: 900, }, { scale: 1, xscale: 3, opacity: 0.6, time: 1200, }, 'linear', 'fade'); attacker.anim({ y: attacker.y - 40, scale: 0, opacity: 0, time: 300, }, 'linear'); attacker.delay(900); attacker.anim({ time: 300, }, 'linear'); }, }, iciclecrash: { anim(scene, [attacker, defender]) { scene.showEffect('icicle', { x: defender.x + 15, y: defender.y + 70, z: defender.z, opacity: 0, scale: 1, }, { y: defender.y - 20, opacity: 1, xscale: 2, time: 300, }, 'linear', 'explode'); scene.showEffect('icicle', { x: defender.x + 30, y: defender.y + 70, z: defender.z, opacity: 0, scale: 1, time: 100, }, { y: defender.y - 20, opacity: 1, xscale: 2, time: 400, }, 'linear', 'explode'); scene.showEffect('icicle', { x: defender.x - 30, y: defender.y + 70, z: defender.z, opacity: 0, scale: 1, time: 200, }, { y: defender.y - 20, opacity: 1, xscale: 2, time: 500, }, 'linear', 'explode'); scene.showEffect('icicle', { x: defender.x, y: defender.y + 70, z: defender.z, opacity: 0, scale: 1, time: 300, }, { y: defender.y - 20, opacity: 1, xscale: 2, time: 600, }, 'linear', 'explode'); scene.showEffect('icicle', { x: defender.x - 15, y: defender.y + 70, z: defender.z, opacity: 0, scale: 1, time: 400, }, { y: defender.y - 20, opacity: 1, xscale: 2, time: 700, }, 'linear', 'explode'); }, }, spore: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: defender.x + 10, y: defender.y + 90, z: defender.z, opacity: 0, scale: 0.4, }, { y: defender.y - 5, opacity: 1, time: 500, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: defender.x + 30, y: defender.y + 90, z: defender.z, opacity: 0, scale: 0.4, time: 150, }, { y: defender.y - 5, opacity: 1, time: 650, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: defender.x - 30, y: defender.y + 90, z: defender.z, opacity: 0, scale: 0.4, time: 300, }, { y: defender.y - 5, opacity: 1, time: 800, }, 'decel', 'fade'); }, }, fireblast: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 500, 0.7); scene.backgroundEffect('linear-gradient(#390000 30%, #B84038)', 600, 0.4, 500); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 1, time: 500, }, 'linear', 'fade'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, time: 50, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 1, time: 550, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 1, time: 500, }, { x: defender.x, y: defender.y + 100, scale: 3, opacity: 0, time: 1100, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 1, time: 500, }, { x: defender.x - 60, y: defender.y - 80, scale: 3, opacity: 0, time: 1100, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 1, time: 500, }, { x: defender.x + 60, y: defender.y - 80, scale: 3, opacity: 0, time: 1100, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 1, time: 500, }, { x: defender.x - 90, y: defender.y + 40, scale: 3, opacity: 0, time: 1100, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 1, time: 500, }, { x: defender.x + 90, y: defender.y + 40, scale: 3, opacity: 0, time: 1100, }, 'linear', 'fade'); defender.delay(500); defender.anim({ z: defender.behind(10), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, judgment: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 950, 0.6); scene.showEffect('wisp', { x: defender.x - 100, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.2, }, { x: defender.x, y: defender.y, scale: 1, opacity: 1, time: 250, }, 'decel', 'fade'); scene.showEffect('wisp', { x: defender.x + 70, y: defender.y - 70, z: defender.z, scale: 0.5, opacity: 0.2, time: 100, }, { x: defender.x, y: defender.y, scale: 1, opacity: 1, time: 350, }, 'decel', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y + 100, z: defender.z, scale: 0.5, opacity: 0.2, time: 200, }, { x: defender.x, y: defender.y, scale: 1, opacity: 1, time: 450, }, 'decel', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 450, }, { x: defender.x, y: defender.y - 100, scale: 0.9, opacity: 0, time: 950, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 450, }, { x: defender.x - 60, y: defender.y + 80, scale: 0.9, opacity: 0, time: 950, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 450, }, { x: defender.x + 60, y: defender.y + 80, scale: 0.9, opacity: 0, time: 950, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 450, }, { x: defender.x - 90, y: defender.y - 40, scale: 0.9, opacity: 0, time: 950, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 450, }, { x: defender.x + 90, y: defender.y - 40, scale: 0.9, opacity: 0, time: 950, }, 'linear', 'fade'); defender.delay(450); defender.anim({ z: defender.behind(10), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, psystrike: { anim(scene, [attacker, defender]) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/weather-psychicterrain.png')`, 950, 0.6); scene.showEffect('purplewisp', { x: defender.x - 100, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.2, }, { x: defender.x, y: defender.y, scale: 1, opacity: 1, time: 250, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: defender.x + 70, y: defender.y - 70, z: defender.z, scale: 0.5, opacity: 0.2, time: 100, }, { x: defender.x, y: defender.y, scale: 1, opacity: 1, time: 350, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y + 100, z: defender.z, scale: 0.5, opacity: 0.2, time: 200, }, { x: defender.x, y: defender.y, scale: 1, opacity: 1, time: 450, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 450, }, { x: defender.x, y: defender.y - 100, scale: 0.9, opacity: 0, time: 950, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 450, }, { x: defender.x - 60, y: defender.y + 80, scale: 0.9, opacity: 0, time: 950, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 450, }, { x: defender.x + 60, y: defender.y + 80, scale: 0.9, opacity: 0, time: 950, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 450, }, { x: defender.x - 90, y: defender.y - 40, scale: 0.9, opacity: 0, time: 950, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 450, }, { x: defender.x + 90, y: defender.y - 40, scale: 0.9, opacity: 0, time: 950, }, 'linear', 'fade'); defender.delay(450); defender.anim({ z: defender.behind(10), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, shadowball: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 1000, 0.1); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y + 100, z: attacker.behind(-20), scale: 0.5, opacity: 0, time: 0, }, { x: attacker.x, y: attacker.y, scale: 1, opacity: 0.8, time: 200, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x - 60, y: attacker.y - 80, z: attacker.behind(-20), scale: 0.5, opacity: 0, time: 50, }, { x: attacker.x, y: attacker.y, scale: 1, opacity: 0.8, time: 300, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x + 60, y: attacker.y - 80, z: attacker.behind(-20), scale: 0.5, opacity: 0, time: 100, }, { x: attacker.x, y: attacker.y, scale: 1, opacity: 0.8, time: 400, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x - 90, y: attacker.y + 40, z: attacker.behind(-20), scale: 0.5, opacity: 0, time: 150, }, { x: attacker.x, y: attacker.y, scale: 1, opacity: 0.8, time: 500, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x + 90, y: attacker.y + 40, z: attacker.behind(-20), scale: 0.5, opacity: 0, time: 200, }, { x: attacker.x, y: attacker.y, scale: 1, opacity: 0.8, time: 600, }, 'decel', 'fade'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0, opacity: 0, time: 0, }, { scale: 0.8, opacity: 0.5, time: 600, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0, opacity: 0, time: 0, }, { scale: 1.5, opacity: 0.8, time: 600, }, 'decel', 'fade'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0.8, opacity: 0.8, time: 600, }, { x: defender.x, y: defender.y, z: defender.z, time: 900, }, 'accel', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 1.5, opacity: 0.8, time: 600, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, time: 900, }, 'accel', 'explode'); defender.delay(900); defender.anim({ z: defender.behind(10), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, hex: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.3); scene.showEffect('purplewisp', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 1, }, { scale: 3, opacity: 0, }, 'decel'); scene.showEffect('purplewisp', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 1, time: 150, }, { scale: 3, opacity: 0, }, 'decel'); scene.showEffect('purplewisp', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 1, time: 300, }, { scale: 3, opacity: 0, }, 'decel'); scene.showEffect('bluefireball', { x: defender.x + 40, y: defender.y + 30, z: defender.z, scale: 0.8, opacity: 0.5, time: 0, }, { y: defender.y + 60, opacity: 0, time: 400, }, 'accel'); scene.showEffect('bluefireball', { x: defender.x - 40, y: defender.y + 30, z: defender.z, scale: 0.8, opacity: 0.5, time: 200, }, { y: defender.y + 60, opacity: 0, time: 600, }, 'accel'); scene.showEffect('bluefireball', { x: defender.x, y: defender.y + 40, z: defender.z, scale: 0.8, opacity: 0.5, time: 400, }, { y: defender.y + 60, opacity: 0, time: 800, }, 'accel'); }, }, infernalparade: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#BB59FF', 1000, 0.4); for (const axis of ['x', 'y', '']) { scene.showEffect('shadowball', { x: attacker.x + (axis !== 'y' ? 50 : 0), y: attacker.y + (axis !== 'x' ? 50 : 0), z: attacker.z, scale: 0.5, opacity: 0.5, time: 0, }, { opacity: 0, time: 600, }, 'accel'); scene.showEffect('bluefireball', { x: attacker.x + (axis !== 'y' ? 50 : 0), y: attacker.y + (axis !== 'x' ? 50 : 0), z: attacker.z, scale: 0.5, opacity: 0.5, time: 0, }, { opacity: 0, time: 600, }, 'accel'); scene.showEffect('shadowball', { x: attacker.x + (axis !== 'y' ? 50 : 0), y: attacker.y + (axis !== 'x' ? 50 : 0), z: attacker.z, scale: 0.5, opacity: 0, time: 600, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.5, time: 1200, }, 'accel'); scene.showEffect('bluefireball', { x: attacker.x + (axis !== 'y' ? 50 : 0), y: attacker.y + (axis !== 'x' ? 50 : 0), z: attacker.z, scale: 0.5, opacity: 0, time: 600, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.5, time: 1200, }, 'accel'); } defender.delay(900); defender.anim({ z: defender.behind(10), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, darkpulse: { anim(scene, [attacker, defender]) { let xf = [1, -1, 1, -1]; let yf = [1, -1, -1, 1]; let xf2 = [1, 0, -1, 0]; let yf2 = [0, 1, 0, -1]; scene.backgroundEffect('#000000', 900, 0.3); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y - 50, z: attacker.z, scale: 1, xscale: 5, opacity: 0.8, time: 0, }, { scale: 2, xscale: 8, opacity: 0.1, time: 800, }, 'linear', 'fade'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 300, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 600, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 500, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 800, }, 'linear'); for (let i = 0; i < 4; i++) { scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.4, }, { x: attacker.x + 240 * xf[i], y: attacker.y, z: attacker.z + 137 * yf[i], scale: 0.7, opacity: 0.4, time: 600, }, 'accel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 0.4, }, { x: attacker.x + 339 * xf2[i], y: attacker.y, z: attacker.z + 194 * yf2[i], scale: 0.5, opacity: 0.4, time: 600, }, 'accel', 'fade'); } }, }, fierywrath: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { let xf = [1, -1, 1, -1]; let yf = [1, -1, -1, 1]; let xf2 = [1, 0, -1, 0]; let yf2 = [0, 1, 0, -1]; scene.backgroundEffect('#000000', 900, 0.3); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y - 50, z: attacker.z, scale: 1, xscale: 5, opacity: 0.8, time: 0, }, { scale: 2, xscale: 8, opacity: 0.1, time: 800, }, 'linear', 'fade'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 300, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 600, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 500, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 800, }, 'linear'); for (let i = 0; i < 4; i++) { scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.4, }, { x: attacker.x + 240 * xf[i], y: attacker.y, z: attacker.z + 137 * yf[i], scale: 0.7, opacity: 0.4, time: 600, }, 'accel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 0.4, }, { x: attacker.x + 339 * xf2[i], y: attacker.y, z: attacker.z + 194 * yf2[i], scale: 0.5, opacity: 0.4, time: 600, }, 'accel', 'fade'); } } }, }, terrainpulse: { anim(scene, [attacker, defender]) { let xf = [1, -1, 1, -1]; let yf = [1, -1, -1, 1]; let xf2 = [1, 0, -1, 0]; let yf2 = [0, 1, 0, -1]; scene.showEffect('iceball', { x: attacker.x, y: attacker.y - 50, z: attacker.z, scale: 1, xscale: 5, opacity: 0.8, time: 0, }, { scale: 2, xscale: 8, opacity: 0.1, time: 800, }, 'linear', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 300, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 600, }, 'linear'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 500, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 800, }, 'linear'); for (let i = 0; i < 4; i++) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.4, }, { x: attacker.x + 240 * xf[i], y: attacker.y, z: attacker.z + 137 * yf[i], scale: 0.7, opacity: 0.4, time: 600, }, 'accel', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 0.4, }, { x: attacker.x + 339 * xf2[i], y: attacker.y, z: attacker.z + 194 * yf2[i], scale: 0.5, opacity: 0.4, time: 600, }, 'accel', 'fade'); } }, }, naturesmadness: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 800, 0.1); scene.showEffect('mistball', { x: attacker.x, y: attacker.y - 50, z: attacker.z, scale: 1, xscale: 5, opacity: 0.6, time: 0, }, { scale: 2, xscale: 8, opacity: 0.1, time: 300, }, 'linear', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 5, opacity: 0, time: 200, }, { scale: 0.5, opacity: 0.6, time: 600, }, 'linear', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 5, opacity: 0, time: 350, }, { scale: 0.5, opacity: 0.2, time: 800, }, 'linear', 'fade'); }, }, ruination: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 800, 0.1); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y - 50, z: attacker.z, scale: 1, xscale: 5, opacity: 0.6, time: 0, }, { scale: 2, xscale: 8, opacity: 0.1, time: 300, }, 'linear', 'fade'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 5, opacity: 0, time: 200, }, { scale: 0.5, opacity: 0.6, time: 600, }, 'linear', 'fade'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 5, opacity: 0, time: 350, }, { scale: 0.5, opacity: 0.2, time: 800, }, 'linear', 'fade'); }, }, energyball: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.8, opacity: 0.3, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.6, time: 400, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, time: 400, }, 'linear', 'explode'); scene.showEffect('energyball', { x: defender.x + 30, y: defender.y + 25, z: defender.z, scale: 0.2, opacity: 0.6, time: 400, }, { x: defender.x + 50, y: defender.y + 10, opacity: 0.3, time: 700, }, 'accel', 'explode'); scene.showEffect('energyball', { x: defender.x - 30, y: defender.y - 20, z: defender.z, scale: 0.2, opacity: 0.6, time: 500, }, { x: defender.x - 50, y: defender.y - 20, opacity: 0.3, time: 700, }, 'accel', 'explode'); scene.showEffect('energyball', { x: defender.x + 15, y: defender.y + 10, z: defender.z, scale: 0.2, opacity: 0.7, time: 600, }, { x: defender.x + 35, y: defender.y + 30, opacity: 0.3, time: 800, }, 'accel', 'explode'); scene.showEffect('energyball', { x: defender.x - 15, y: defender.y - 30, z: defender.z, scale: 0.2, opacity: 0.7, time: 600, }, { x: defender.x - 35, y: defender.y - 40, opacity: 0.3, time: 800, }, 'accel', 'explode'); defender.delay(400); defender.anim({ z: defender.behind(5), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, electroball: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.3, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.6, time: 500, }, 'linear', 'explode'); defender.delay(500); defender.anim({ z: defender.behind(5), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, moonblast: { anim(scene, [attacker, defender]) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/bg-space.jpg')`, 800, 0.6); scene.showEffect('moon', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.9, opacity: 0.3, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.9, opacity: 0.6, time: 500, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.3, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.6, time: 500, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.3, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.8, time: 500, }, 'linear', 'explode'); scene.showEffect('wisp', { x: 0, y: +175, z: +50, scale: 1.5, opacity: 1, }, { time: 800, }, 'accel', 'fade'); scene.showEffect('iceball', { x: 0, y: +175, z: +50, scale: 0.5, opacity: 0.8, }, { time: 800, }, 'accel', 'fade'); defender.delay(500); defender.anim({ z: defender.behind(5), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, mistball: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 3, opacity: 0.3, }, { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.6, opacity: 1, time: 300, }, 'decel', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 3, opacity: 0.3, time: 100, }, { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.8, opacity: 0.6, time: 400, }, 'decel', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.6, opacity: 0.8, time: 400, }, { x: defender.x, y: defender.y, z: defender.behind(0), scale: 1, opacity: 0.8, time: 800, }, 'accel', 'explode'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 800, }, { x: defender.x - 60, y: defender.y + 80, scale: 0.9, opacity: 0, time: 1050, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 800, }, { x: defender.x + 60, y: defender.y - 80, scale: 0.9, opacity: 0, time: 1050, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 800, }, { x: defender.x + 90, y: defender.y + 40, scale: 0.9, opacity: 0, time: 1050, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 800, }, { x: defender.x - 90, y: defender.y - 40, scale: 0.9, opacity: 0, time: 1050, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 800, }, { x: defender.x, y: defender.y + 100, scale: 0.9, opacity: 0, time: 1050, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 800, }, { x: defender.x, y: defender.y - 100, scale: 0.9, opacity: 0, time: 1050, }, 'linear', 'fade'); defender.delay(500); defender.anim({ z: defender.behind(5), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, present: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.3, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.6, time: 500, }, 'linear', 'explode'); }, }, iceball: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.3, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.6, time: 500, }, 'ballistic', 'explode'); }, }, weatherball: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 1, }, { y: attacker.y + 90, opacity: 0, }, 'linear'); scene.showEffect('iceball', { x: defender.x, y: defender.y + 90, z: defender.z, scale: 0.5, opacity: 0, time: 500, }, { y: defender.y, opacity: 1, time: 1000, }, 'linear', 'explode'); }, }, flowertrick: { anim(scene, [attacker, defender]) { scene.backgroundEffect(`#000000`, 1000, 0.4); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 1, }, { y: attacker.y + 90, opacity: 0, }, 'linear'); scene.showEffect('energyball', { x: defender.x, y: defender.y + 90, z: defender.z, scale: 0.5, opacity: 0, time: 500, }, { y: defender.y, opacity: 1, time: 1000, }, 'linear', 'explode'); }, }, wish: { anim(scene, [attacker]) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/bg-space.jpg')`, 600, 0.4); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, }, { y: attacker.y + 130, opacity: 0, }, 'accel'); }, residualAnim(scene, [attacker]) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/bg-space.jpg')`, 600, 0.4); scene.showEffect('wisp', { x: attacker.x, y: attacker.y + 130, z: attacker.z, scale: 1, opacity: 0, }, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 1, }, 'decel', 'explode'); scene.timeOffset += 500; }, }, healingwish: { anim(scene, [attacker]) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, }, { x: attacker.x, y: attacker.y + 130, z: attacker.z, opacity: 0, }, 'accel'); }, residualAnim(scene, [attacker]) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y + 130, z: attacker.z, scale: 1, opacity: 0, }, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 1, }, 'decel', 'explode'); }, }, stealthrock: { anim(scene, [attacker, defender]) { scene.showEffect('rock1', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, }, { x: defender.leftof(-40), y: defender.y - 10, z: defender.z, scale: 0.2, opacity: 1, }, 'ballistic'); scene.showEffect('rock2', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, time: 75, }, { x: defender.leftof(-20), y: defender.y - 40, z: defender.z, scale: 0.2, opacity: 1, }, 'ballistic'); scene.showEffect('rock1', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, time: 150, }, { x: defender.leftof(30), y: defender.y - 20, z: defender.z, scale: 0.2, opacity: 1, }, 'ballistic'); scene.showEffect('rock2', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, time: 225, }, { x: defender.leftof(10), y: defender.y - 30, z: defender.z, scale: 0.2, opacity: 1, }, 'ballistic'); }, }, gmaxsteelsurge: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 1200, 0.3); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 500, }, { scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 700, }, { scale: 3, opacity: 0, time: 1000, }, 'linear'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 1, }, { y: attacker.y + 90, opacity: 0, time: 200, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-165), y: defender.y + 170, z: defender.z, scale: 1, opacity: 0, time: 400, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 2, opacity: 0.5, time: 650, }, 'accel', 'explode'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 500, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 650, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 550, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 700, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 600, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 750, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 650, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 800, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 700, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 850, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 750, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 900, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 800, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 950, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 900, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 1050, }, 'accel'); attacker.anim({ y: defender.y + 120, xscale: 0, yscale: 0, opacity: 0, time: 300, }, 'accel'); attacker.delay(825); attacker.anim({ x: attacker.x, y: attacker.y + 40, z: attacker.behind(40), xscale: 1, yscale: 1, time: 1, }); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.z, time: 250, }, 'decel'); defender.delay(625); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(15), time: 200, }, 'decel'); defender.anim({ time: 350, }, 'swing'); scene.showEffect('greenmetal1', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, }, { x: defender.leftof(-30), y: defender.y - 20, z: defender.z, scale: 0.3, opacity: 1, }, 'ballistic'); scene.showEffect('greenmetal2', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, time: 250, }, { x: defender.leftof(35), y: defender.y - 15, z: defender.z, scale: 0.3, opacity: 1, }, 'ballistic'); scene.showEffect('greenmetal1', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, time: 125, }, { x: defender.leftof(50), y: defender.y - 10, z: defender.z, scale: 0.3, opacity: 1, }, 'ballistic'); }, }, spikes: { anim(scene, [attacker, defender]) { scene.showEffect('caltrop', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, }, { x: -25, y: defender.y - 40, z: defender.z, scale: 0.3, opacity: 1, }, 'ballistic'); scene.showEffect('caltrop', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, time: 125, }, { x: +50, y: defender.y - 40, z: defender.z, scale: 0.3, opacity: 1, }, 'ballistic'); scene.showEffect('caltrop', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, time: 250, }, { x: +30, y: defender.y - 45, z: defender.z, scale: 0.3, opacity: 1, }, 'ballistic'); }, }, toxicspikes: { anim(scene, [attacker, defender]) { scene.showEffect('poisoncaltrop', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, }, { x: +5, y: defender.y - 40, z: defender.z, scale: 0.3, opacity: 1, }, 'ballistic'); scene.showEffect('poisoncaltrop', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, time: 200, }, { x: -15, y: defender.y - 35, z: defender.z, scale: 0.3, opacity: 1, }, 'ballistic'); }, }, stickyweb: { anim(scene, [attacker, defender]) { scene.showEffect('web', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, }, { x: 0, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, }, 'ballistic'); }, }, leechseed: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, }, { x: defender.x - 30, y: defender.y - 40, z: defender.z, scale: 0.2, opacity: 0.6, }, 'ballistic'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, time: 125, }, { x: defender.x + 40, y: defender.y - 35, z: defender.z, scale: 0.2, opacity: 0.6, }, 'ballistic'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.5, time: 250, }, { x: defender.x + 20, y: defender.y - 25, z: defender.z, scale: 0.2, opacity: 0.6, }, 'ballistic'); }, }, mysticalpower: { anim(scene, [attacker]) { scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 0, }, { z: attacker.behind(-50), scale: 7, opacity: 0, time: 400, }, 'linear'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 150, }, { z: attacker.behind(-50), scale: 7, opacity: 0, time: 600, }, 'linear'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 300, }, { z: attacker.behind(-50), scale: 7, opacity: 0, time: 800, }, 'linear'); }, }, psyshock: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, }, { scale: 3, opacity: 0, }, 'decel'); scene.showEffect('purplewisp', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 0.6, time: 150, }, { scale: 3, opacity: 0, }, 'decel'); scene.showEffect('waterwisp', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 0.6, time: 300, }, { scale: 3, opacity: 0, }, 'decel'); }, }, barbbarrage: { anim(scene, [attacker, defender]) { for (let i = 0; i < 8; i++) { scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 0, }, { x: attacker.x + (![0, 4].includes(i) ? (50 * (i > 4 ? -1 : 1)) : 0), y: attacker.y + (![2, 6].includes(i) ? (50 * (i > 2 && i < 6 ? -1 : 1)) : 0), z: attacker.z, opacity: 0, time: 500, }, 'decel'); scene.showEffect('purplewisp', { x: defender.x + (![0, 4].includes(i) ? (50 * (i > 4 ? -1 : 1)) : 0), y: defender.y + (![2, 6].includes(i) ? (50 * (i > 2 && i < 6 ? -1 : 1)) : 0), z: defender.z, scale: 0.4, opacity: 0.6, time: 500, }, { x: defender.x, y: defender.y, z: defender.z, time: 1000, }, 'decel'); } }, }, esperwing: { anim(scene, [attacker, defender]) { for (let i = 0; i < 8; i++) { scene.showEffect(i % 2 === 0 ? 'purplewisp' : 'mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 0, }, { x: attacker.x + (![0, 4].includes(i) ? (50 * (i > 4 ? -1 : 1)) : 0), y: attacker.y + (![2, 6].includes(i) ? (50 * (i > 2 && i < 6 ? -1 : 1)) : 0), z: attacker.z, opacity: 0, time: 500, }, 'decel'); scene.showEffect('feather', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 0.6, time: 0, }, { x: attacker.x + (![0, 4].includes(i) ? (50 * (i > 4 ? -1 : 1)) : 0), y: attacker.y + (![2, 6].includes(i) ? (50 * (i > 2 && i < 6 ? -1 : 1)) : 0), z: attacker.z, opacity: 0, time: 500, }, 'decel'); scene.showEffect(i % 2 === 0 ? 'purplewisp' : 'mistball', { x: attacker.x + (![0, 4].includes(i) ? (50 * (i > 4 ? -1 : 1)) : 0), y: attacker.y + (![2, 6].includes(i) ? (50 * (i > 2 && i < 6 ? -1 : 1)) : 0), z: attacker.z, scale: 0.4, opacity: 0.6, time: 500, }, { x: defender.x, y: defender.y, z: defender.z, time: 1000, }, 'accel', 'explode'); scene.showEffect('feather', { x: attacker.x + (![0, 4].includes(i) ? (50 * (i > 4 ? -1 : 1)) : 0), y: attacker.y + (![2, 6].includes(i) ? (50 * (i > 2 && i < 6 ? -1 : 1)) : 0), z: attacker.z, scale: 0.2, opacity: 0.6, time: 500, }, { x: defender.x, y: defender.y, z: defender.z, time: 1000, }, 'accel', 'explode'); } }, }, sandtomb: { anim(scene, [attacker, defender]) { scene.showEffect('mudwisp', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, }, { scale: 3, opacity: 0, }, 'decel'); scene.showEffect('mudwisp', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 0.6, time: 150, }, { scale: 3, opacity: 0, }, 'decel'); scene.showEffect('mudwisp', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 0.6, time: 300, }, { scale: 3, opacity: 0, }, 'decel'); }, }, saltcure: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, }, { scale: 3, opacity: 0, }, 'decel'); scene.showEffect('wisp', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 0.6, time: 150, }, { scale: 3, opacity: 0, }, 'decel'); scene.showEffect('wisp', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 0.6, time: 300, }, { scale: 3, opacity: 0, }, 'decel'); }, }, flashcannon: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, }, { x: defender.x, y: defender.y, z: defender.behind(20), opacity: 0.6, time: 200, }, 'linear', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 50, }, { x: defender.x + 10, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 250, }, 'linear', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 100, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(20), opacity: 0.6, time: 300, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 150, }, { x: defender.x, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 350, }, 'linear', 'explode'); }, }, lusterpurge: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#ffffff', 600, 0.6); scene.showEffect('wisp', { x: attacker.leftof(-10), y: attacker.y + 10, z: attacker.z, scale: 0.1, opacity: 0.5, }, { scale: 15, opacity: 0.8, time: 500, }, 'linear', 'fade'); scene.showEffect('impact', { x: defender.x - 25, y: defender.y, z: defender.behind(5), scale: 0.7, opacity: 0.2, time: 175, }, { scale: 1, opacity: 0, time: 375, }, 'linear'); scene.showEffect('impact', { x: defender.x + 25, y: defender.y - 5, z: defender.behind(5), scale: 0.7, opacity: 0.2, time: 300, }, { scale: 1, opacity: 0, time: 500, }, 'linear'); scene.showEffect('impact', { x: defender.x - 25, y: defender.y + 10, z: defender.behind(5), scale: 0.7, opacity: 0.2, time: 400, }, { scale: 1, opacity: 0, time: 600, }, 'linear'); scene.showEffect('impact', { x: defender.x + 2, y: defender.y + 5, z: defender.behind(5), scale: 1, opacity: 0.2, time: 500, }, { scale: 1.25, opacity: 0, time: 700, }, 'linear'); attacker.anim({ opacity: 0, time: 75, }); attacker.delay(500); attacker.anim({ opacity: 1, time: 100, }); defender.delay(200); defender.anim({ x: defender.x - 30, time: 75, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x - 30, time: 100, }); defender.anim({ x: defender.x, time: 100, }); }, }, grassknot: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: defender.x + 30, y: defender.y - 30, z: defender.z, scale: 0, opacity: 0.6, time: 50, }, { scale: 3, opacity: 0, }, 'decel'); scene.showEffect('energyball', { x: defender.x - 30, y: defender.y - 40, z: defender.z, scale: 0, opacity: 0.6, time: 200, }, { scale: 3, opacity: 0, }, 'decel'); scene.showEffect('leaf1', { x: defender.x + 30, y: defender.y - 30, z: defender.z, scale: 0, opacity: 0.6, time: 50, }, { y: defender.y - 40, scale: 3, opacity: 0, }, 'decel'); scene.showEffect('leaf2', { x: defender.x - 30, y: defender.y - 40, z: defender.z, scale: 0, opacity: 0.6, time: 200, }, { y: defender.y - 50, scale: 3, opacity: 0, }, 'decel'); }, }, aeroblast: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.y - attacker.y) / 5; let zstep = (defender.behind(50) - attacker.z) / 5; scene.backgroundEffect('#000000', 700, 0.6); for (let i = 0; i < 5; i++) { scene.showEffect('wisp', { x: attacker.x + xstep * (i + 1), y: attacker.y + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1, opacity: 1, time: 20 * i, }, { scale: 3, opacity: 0, time: 40 * i + 600, }, 'linear'); } scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.2, time: 200, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.2, time: 275, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.2, time: 350, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.2, time: 425, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.2, time: 500, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.2, time: 575, }, 'linear', 'explode'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 550, }, { scale: 4, opacity: 0, time: 750, }, 'linear'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 600, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, airslash: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x + 60, y: defender.y + 30, z: defender.z, scale: 0.2, opacity: 1, }, { x: defender.x - 70, y: defender.y - 40, z: defender.z, scale: 0.4, opacity: 0.4, time: 200, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 60, y: defender.y + 30, z: defender.z, scale: 0.2, opacity: 1, time: 100, }, { x: defender.x - 70, y: defender.y - 40, z: defender.z, scale: 0.4, opacity: 0.4, time: 300, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 80, y: defender.y + 10, z: defender.z, scale: 0.2, opacity: 1, time: 100, }, { x: defender.x - 50, y: defender.y - 60, z: defender.z, scale: 0.4, opacity: 0.4, time: 300, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 80, y: defender.y + 10, z: defender.z, scale: 0.2, opacity: 1, time: 200, }, { x: defender.x - 50, y: defender.y - 60, z: defender.z, scale: 0.4, opacity: 0.4, time: 400, }, 'linear', 'fade'); }, }, aircutter: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x + 60, y: defender.y - 10, z: defender.z, scale: 0.2, opacity: 1, }, { x: defender.x - 60, y: defender.y - 10, z: defender.z, scale: 0.4, opacity: 0.4, time: 200, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 60, y: defender.y + 20, z: defender.z, scale: 0.2, opacity: 1, time: 100, }, { x: defender.x - 60, y: defender.y + 20, z: defender.z, scale: 0.4, opacity: 0.4, time: 300, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 60, y: defender.y + 50, z: defender.z, scale: 0.2, opacity: 1, time: 200, }, { x: defender.x - 60, y: defender.y + 50, z: defender.z, scale: 0.4, opacity: 0.4, time: 400, }, 'linear', 'fade'); }, }, dracometeor: { anim(scene, [attacker, defender]) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/bg-space.jpg')`, 1100, 0.8); scene.showEffect('flareball', { x: defender.leftof(-200), y: defender.y + 175, z: defender.z, scale: 0.1, opacity: 0, }, { x: defender.x + 50, y: defender.y, scale: 1.5, opacity: 0.8, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.leftof(-200), y: defender.y + 20 + 175, z: defender.z, scale: 0.1, opacity: 0, time: 150, }, { x: defender.x - 30, y: defender.y - 5, scale: 1.5, opacity: 0.8, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.leftof(-200), y: defender.y - 20 + 175, z: defender.z, scale: 0.1, opacity: 0, time: 300, }, { x: defender.x + 30, y: defender.y - 10, scale: 1.5, opacity: 0.8, }, 'accel', 'explode'); scene.showEffect('rock3', { x: defender.leftof(-200), y: defender.y + 175, z: defender.z, scale: 0.1, opacity: 0, }, { x: defender.x + 30, y: defender.y, scale: 1.5, opacity: 0.4, }, 'accel', 'explode'); scene.showEffect('rock3', { x: defender.leftof(-200), y: defender.y + 20 + 175, z: defender.z, scale: 0.1, opacity: 0, time: 150, }, { x: defender.x - 20, y: defender.y - 5, scale: 1.5, opacity: 0.4, }, 'accel', 'explode'); scene.showEffect('rock3', { x: defender.leftof(-200), y: defender.y - 20 + 175, z: defender.z, scale: 0.1, opacity: 0, time: 300, }, { x: defender.x + 20, y: defender.y, scale: 1.5, opacity: 0.4, }, 'accel', 'explode'); scene.showEffect('shadowball', { x: defender.x + 30, y: defender.y - 50, z: defender.z, scale: 1, xscale: 2, opacity: 0.5, time: 500, }, { scale: 3, xscale: 8, opacity: 0.1, time: 700, }, 'linear', 'fade'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 500, }, { scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('shadowball', { x: defender.x - 20, y: defender.y - 50, z: defender.z, scale: 1, xscale: 2, opacity: 0.5, time: 650, }, { scale: 3, xscale: 8, opacity: 0.1, time: 850, }, 'linear', 'fade'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 650, }, { scale: 4, opacity: 0, time: 850, }, 'linear'); scene.showEffect('shadowball', { x: defender.x + 20, y: defender.y - 50, z: defender.z, scale: 1, xscale: 2, opacity: 0.5, time: 700, }, { scale: 3, xscale: 8, opacity: 0.1, time: 900, }, 'linear', 'fade'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 700, }, { scale: 4, opacity: 0, time: 900, }, 'linear'); scene.showEffect('rock3', { x: defender.leftof(-200), y: defender.y - 20 + 150, z: defender.z, scale: 0.1, opacity: 0.6, time: 50, }, { x: defender.x - 250, y: defender.y - 80, z: defender.behind(60), scale: 0.8, opacity: 0, }, 'accel', 'fade'); scene.showEffect('rock3', { x: defender.leftof(-220), y: defender.y + 20 + 130, z: defender.z, scale: 0.1, opacity: 0.6, time: 150, }, { x: defender.x + 80, y: defender.y - 50, z: defender.behind(30), scale: 0.8, opacity: 0, }, 'accel', 'fade'); scene.showEffect('rock3', { x: defender.leftof(-180), y: defender.y + 20 + 130, z: defender.z, scale: 0.1, opacity: 0.6, time: 300, }, { x: defender.x - 200, y: defender.y + 20, z: defender.behind(30), scale: 0.8, opacity: 0, }, 'accel', 'fade'); defender.delay(500); defender.anim({ x: defender.x + 30, z: defender.behind(10), time: 75, }); defender.anim({ x: defender.x - 30, time: 100, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x - 30, z: defender.behind(10), time: 100, }); defender.anim({ x: defender.x, time: 100, }); }, }, makeitrain: { anim(scene, [attacker, ...defenders]) { scene.backgroundEffect('#000000', 1300, 0.2); for (const defender of defenders) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0, }, { scale: 0, opacity: 1, }, 'accel', 'explode'); for (let i = 1; i <= 8; i++) { const hitPos = (-1) ** i * (32 - i * 8); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 0.7, time: 75 * i + 500, }, { x: defender.x + hitPos, y: defender.y - hitPos, z: defender.z, scale: 0.4, opacity: 0.4, time: 75 * i + 700, }, 'decel', 'explode'); scene.showEffect('shine', { x: defender.x + hitPos, y: defender.y - hitPos, z: defender.z, scale: 0.5, opacity: 0.8, time: 75 * i + 700, }, { opacity: 0, time: 75 * i + 800, }, 'accel', 'fade'); } defender.delay(700); for (let i = 1; i <= 3; i++) { defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); } defender.anim({ z: defender.behind(10), time: 100, }, 'swing'); defender.anim({ time: 150, }, 'swing'); } }, }, brine: { anim: BattleOtherAnims.hydroshot.anim, }, octazooka: { anim(scene, [attacker, defender]) { scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.3, }, { x: defender.x + 10, y: defender.y + 5, z: defender.behind(30), scale: 1, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.3, time: 75, }, { x: defender.x - 10, y: defender.y - 5, z: defender.behind(30), scale: 1, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.3, time: 150, }, { x: defender.x, y: defender.y + 5, z: defender.behind(30), scale: 1, opacity: 0.6, }, 'decel', 'explode'); }, }, waterpledge: { anim: BattleOtherAnims.hydroshot.anim, }, soak: { anim: BattleOtherAnims.hydroshot.anim, }, watersport: { anim(scene, [attacker, defender]) { scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 20, z: defender.z, scale: 1, opacity: 0.3, }, 'ballistic', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 20, z: defender.z, scale: 1, opacity: 0.3, }, 'ballistic', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1, opacity: 0.3, }, 'ballistic', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 5, z: defender.z, scale: 1, opacity: 0.3, }, 'ballistic', 'explode'); }, }, scald: { anim(scene, [attacker, defender]) { BattleOtherAnims.hydroshot.anim(scene, [attacker, defender]); scene.showEffect('wisp', { x: defender.x + 30, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 300, }, { y: defender.y + 60, opacity: 0.2, time: 700, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 400, }, { y: defender.y + 60, opacity: 0.2, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 15, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 500, }, { y: defender.y + 60, opacity: 0.2, time: 900, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 15, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 600, }, { y: defender.y + 60, opacity: 0.2, time: 1000, }, 'linear', 'fade'); }, }, steameruption: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#0000DD', 700, 0.2); BattleOtherAnims.hydroshot.anim(scene, [attacker, defender]); defender.delay(200); defender.anim({ z: defender.behind(20), time: 400, }, 'swing'); defender.anim({ time: 300, }, 'swing'); scene.showEffect('wisp', { x: defender.x + 30, y: defender.y, z: defender.behind(5), scale: 1, opacity: 1, time: 300, }, { y: defender.y + 60, opacity: 0.2, time: 700, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 30, y: defender.y, z: defender.behind(10), scale: 1, opacity: 1, time: 400, }, { y: defender.y + 60, opacity: 0.2, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 15, y: defender.y, z: defender.behind(15), scale: 1, opacity: 1, time: 500, }, { y: defender.y + 60, opacity: 0.2, time: 900, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x - 15, y: defender.y, z: defender.behind(20), scale: 1, opacity: 1, time: 600, }, { y: defender.y + 60, opacity: 0.2, time: 1000, }, 'linear', 'fade'); }, }, waterpulse: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.8, }, { x: defender.x, y: defender.y, z: defender.behind(0), opacity: 0.7, time: 400, }, 'decel', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.3, }, { x: defender.x, y: defender.y, z: defender.behind(0), opacity: 0.7, time: 400, }, 'decel', 'explode'); }, }, bubblebeam: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.7, }, { x: defender.x, y: defender.y, z: defender.behind(0), opacity: 0.6, time: 400, }, 'decel', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.7, time: 100, }, { x: defender.x + 20, y: defender.y - 10, z: defender.behind(0), opacity: 0.6, time: 500, }, 'decel', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.7, time: 200, }, { x: defender.x - 20, y: defender.y + 10, z: defender.behind(0), opacity: 0.6, time: 600, }, 'decel', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.7, time: 300, }, { x: defender.x, y: defender.y - 5, z: defender.behind(0), opacity: 0.6, time: 700, }, 'decel', 'explode'); }, }, surf: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); } const defender = defenders[1] || defenders[0]; scene.backgroundEffect('#0000DD', 700, 0.2); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y - 25, z: attacker.z, scale: 0.4, opacity: 0.3, }, { x: defender.x, y: defender.y + 10, z: defender.behind(50), scale: 1, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('waterwisp', { x: attacker.x - 30, y: attacker.y - 25, z: attacker.z, scale: 0.4, opacity: 0.3, }, { x: defender.x - 60, y: defender.y, z: defender.behind(50), scale: 1, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('waterwisp', { x: attacker.x + 30, y: attacker.y - 25, z: attacker.z, scale: 0.4, opacity: 0.3, }, { x: defender.x + 60, y: defender.y, z: defender.behind(50), scale: 1, opacity: 0.6, }, 'decel', 'explode'); }, }, hydropump: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#0000DD', 700, 0.2); BattleOtherAnims.hydroshot.anim(scene, [attacker, defender]); defender.delay(200); defender.anim({ z: defender.behind(20), time: 400, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, muddywater: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); } const defender = defenders[1] || defenders[0]; scene.backgroundEffect('#996600', 700, 0.2); scene.showEffect('mudwisp', { x: attacker.x, y: attacker.y - 25, z: attacker.z, scale: 0.4, opacity: 0.3, }, { x: defender.x, y: defender.y + 10, z: defender.behind(50), scale: 1, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('mudwisp', { x: attacker.x - 30, y: attacker.y - 25, z: attacker.z, scale: 0.4, opacity: 0.3, }, { x: defender.x - 60, y: defender.y, z: defender.behind(50), scale: 1, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('mudwisp', { x: attacker.x + 30, y: attacker.y - 25, z: attacker.z, scale: 0.4, opacity: 0.3, }, { x: defender.x + 60, y: defender.y, z: defender.behind(50), scale: 1, opacity: 0.6, }, 'decel', 'explode'); }, }, mudshot: { anim(scene, [attacker, defender]) { scene.showEffect('mudwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.3, }, { x: defender.x + 10, y: defender.y + 5, z: defender.behind(30), scale: 1, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('mudwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.3, time: 75, }, { x: defender.x - 10, y: defender.y - 5, z: defender.behind(30), scale: 1, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('mudwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.3, time: 150, }, { x: defender.x, y: defender.y + 5, z: defender.behind(30), scale: 1, opacity: 0.6, }, 'decel', 'explode'); }, }, lavaplume: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 1, }, { x: defender.x + 30, y: defender.y + 20, z: defender.z, scale: 1, opacity: 0.7, }, 'ballistic', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 1, time: 75, }, { x: defender.x + 20, y: defender.y - 20, z: defender.z, scale: 1, opacity: 0.7, }, 'ballistic', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 1, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1, opacity: 0.7, }, 'ballistic', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 1, time: 225, }, { x: defender.x - 10, y: defender.y + 5, z: defender.z, scale: 1, opacity: 0.7, }, 'ballistic', 'explode'); } }, }, dragonenergy: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { defender.delay(625); defender.anim({ x: defender.x - 30, time: 75, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x - 30, time: 100, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x, time: 100, }); let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.y - attacker.y) / 5; let zstep = (defender.z - attacker.z) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('wisp', { x: attacker.x + xstep * (i + 1), y: attacker.y + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1, opacity: 1, time: 20 * i, }, { scale: 2, opacity: 0, time: 40 * i + 600, }, 'linear'); scene.showEffect('purplewisp', { x: attacker.x + xstep * (i + 1), y: attacker.y + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.5, opacity: 0.3, time: 20 * i, }, { scale: 2, opacity: 0, time: 40 * i + 600, }, 'linear'); } scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.behind(-15), scale: 0.5, opacity: 0.6, }, { scale: 0.6, opacity: 0.2, time: 400, }, 'linear', 'fade'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.1, time: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, time: 200, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.1, time: 100, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, time: 300, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.1, time: 200, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, time: 400, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.1, time: 300, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, time: 500, }, 'linear', 'explode'); } }, }, eruption: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { defender.delay(625); defender.anim({ x: defender.x - 30, time: 75, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x - 30, time: 100, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x, time: 100, }); } const defender = defenders[1] || defenders[0]; scene.backgroundEffect('linear-gradient(#390000 30%, #B84038)', 1100, 0.4); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, }, { x: attacker.x, y: attacker.y, z: attacker.z, scale: 6, opacity: 0, }, 'linear', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.4, opacity: 0.6, time: 0, }, { x: attacker.x + 30, y: attacker.y + 150, z: attacker.z, scale: 0.5, opacity: 0, time: 300, }, 'decel', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.4, opacity: 0.6, time: 100, }, { x: attacker.x - 10, y: attacker.y + 150, z: attacker.z, scale: 0.5, opacity: 0, time: 400, }, 'decel', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.4, opacity: 0.6, time: 200, }, { x: attacker.x + 35, y: attacker.y + 150, z: attacker.z, scale: 0.5, opacity: 0, time: 500, }, 'decel', 'fade'); scene.showEffect('rock3', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.4, opacity: 0.6, time: 0, }, { x: attacker.x + 30, y: attacker.y + 150, z: attacker.z, scale: 0.5, opacity: 0, time: 300, }, 'decel', 'fade'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.9, opacity: 0.6, time: 50, }, { x: attacker.x - 30, y: attacker.y + 150, z: attacker.z, scale: 1, opacity: 0, time: 350, }, 'decel', 'fade'); scene.showEffect('rock3', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.4, opacity: 0.6, time: 100, }, { x: attacker.x - 10, y: attacker.y + 150, z: attacker.z, scale: 0.5, opacity: 0, time: 400, }, 'decel', 'fade'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.9, opacity: 0.6, time: 150, }, { x: attacker.x + 10, y: attacker.y + 150, z: attacker.z, scale: 1, opacity: 0, time: 450, }, 'decel', 'fade'); scene.showEffect('rock3', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.4, opacity: 0.6, time: 200, }, { x: attacker.x + 35, y: attacker.y + 150, z: attacker.z, scale: 0.5, opacity: 0, time: 500, }, 'decel', 'fade'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 300, }, { x: defender.x + 45, y: defender.y + 20, z: defender.z, scale: 1.5, opacity: 0.7, time: 600, }, 'accel', 'explode'); scene.showEffect('rock3', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 375, }, { x: defender.x - 20, y: defender.y - 20, z: defender.z, scale: 1, opacity: 0.7, time: 675, }, 'accel', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 375, }, { x: defender.x - 20, y: defender.y - 20, z: defender.z, scale: 1, opacity: 0.7, time: 675, }, 'accel', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 450, }, { x: defender.x + 30, y: defender.y, z: defender.z, scale: 1.5, opacity: 0.7, time: 750, }, 'accel', 'explode'); scene.showEffect('rock3', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 525, }, { x: defender.x + 40, y: defender.y + 5, z: defender.z, scale: 1, opacity: 0.7, time: 825, }, 'accel', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 525, }, { x: defender.x + 40, y: defender.y + 5, z: defender.z, scale: 1, opacity: 0.7, time: 825, }, 'accel', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 575, }, { x: defender.x - 70, y: defender.y + 5, z: defender.z, scale: 1.5, opacity: 0.7, time: 875, }, 'accel', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 650, }, { x: defender.x + 70, y: defender.y + 5, z: defender.z, scale: 1.5, opacity: 0.7, time: 950, }, 'accel', 'explode'); }, }, waterspout: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { defender.delay(625); defender.anim({ x: defender.x - 30, time: 75, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x - 30, time: 100, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x, time: 100, }); } const defender = defenders[1] || defenders[0]; scene.backgroundEffect('#0000DD', 1100, 0.2); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, }, { x: attacker.x, y: attacker.y, z: attacker.z, scale: 6, opacity: 0, }, 'linear', 'fade'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.4, opacity: 0.6, time: 0, }, { x: attacker.x + 30, y: attacker.y + 150, z: attacker.z, scale: 0.5, opacity: 0, time: 300, }, 'decel', 'fade'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.9, opacity: 0.6, time: 50, }, { x: attacker.x - 30, y: attacker.y + 150, z: attacker.z, scale: 1, opacity: 0, time: 350, }, 'decel', 'fade'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.4, opacity: 0.6, time: 100, }, { x: attacker.x - 10, y: attacker.y + 150, z: attacker.z, scale: 0.5, opacity: 0, time: 400, }, 'decel', 'fade'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.9, opacity: 0.6, time: 150, }, { x: attacker.x + 10, y: attacker.y + 150, z: attacker.z, scale: 1, opacity: 0, time: 450, }, 'decel', 'fade'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.4, opacity: 0.6, time: 200, }, { x: attacker.x + 35, y: attacker.y + 150, z: attacker.z, scale: 0.5, opacity: 0, time: 500, }, 'decel', 'fade'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 300, }, { x: defender.x + 45, y: defender.y + 20, z: defender.z, scale: 1.5, opacity: 0.7, time: 600, }, 'accel', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 375, }, { x: defender.x - 20, y: defender.y - 20, z: defender.z, scale: 1, opacity: 0.7, time: 675, }, 'accel', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 450, }, { x: defender.x + 30, y: defender.y, z: defender.z, scale: 1.5, opacity: 0.7, time: 750, }, 'accel', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 525, }, { x: defender.x - 40, y: defender.y + 5, z: defender.z, scale: 1, opacity: 0.7, time: 825, }, 'accel', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 525, }, { x: defender.x + 40, y: defender.y + 5, z: defender.z, scale: 1, opacity: 0.7, time: 825, }, 'accel', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 575, }, { x: defender.x - 70, y: defender.y + 5, z: defender.z, scale: 1.5, opacity: 0.7, time: 875, }, 'accel', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y + 175, z: attacker.behind(-90), scale: 0.4, opacity: 1, time: 650, }, { x: defender.x + 70, y: defender.y + 5, z: defender.z, scale: 1.5, opacity: 0.7, time: 950, }, 'accel', 'explode'); }, }, solarbeam: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.x - 200 - attacker.x) / 5; let zstep = (defender.z - attacker.z) / 5; scene.backgroundEffect(`url('https://${Config.routes.client}/fx/weather-sunnyday.jpg')`, 900, 0.5); for (let i = 0; i < 5; i++) { scene.showEffect('energyball', { x: attacker.x + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.7, opacity: 0.6, time: 40 * i + 300, }, { opacity: 0, time: 100 * i + 500, }, 'linear'); } scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.75, opacity: 0.6, }, { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 1.25, opacity: 0, time: 200, }, 'decel'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.6, }, { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 1.5, opacity: 0, time: 200, }, 'decel'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 375, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 575, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 425, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 625, }, 'linear', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 450, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 650, }, 'linear', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 500, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 700, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 575, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 775, }, 'linear', 'explode'); }, prepareAnim: BattleOtherAnims.chargestatus.anim, }, electroshot: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.x - 200 - attacker.x) / 5; let zstep = (defender.z - attacker.z) / 5; scene.backgroundEffect('#000000', 900, 0.5); for (let i = 0; i < 5; i++) { scene.showEffect('electroball', { x: attacker.x + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.7, opacity: 0.6, time: 40 * i + 300, }, { opacity: 0, time: 100 * i + 500, }, 'linear', '', { filter: 'hue-rotate(120deg)' }); } scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.75, opacity: 0.6, }, { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 1.25, opacity: 0, time: 200, }, 'decel', '', { filter: 'hue-rotate(120deg)' }); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.6, }, { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 1.5, opacity: 0, time: 200, }, 'decel'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 500, }, 'linear', 'explode', { filter: 'hue-rotate(120deg)' }); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 375, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 575, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 425, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 625, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 450, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 650, }, 'linear', 'explode', { filter: 'hue-rotate(120deg)' }); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 500, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 700, }, 'linear', 'explode', { filter: 'hue-rotate(120deg)' }); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 575, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 775, }, 'linear', 'explode'); }, prepareAnim(scene, [attacker]) { scene.showEffect('electroball', { x: attacker.x - 60, y: attacker.y + 40, z: attacker.z, scale: 0.7, opacity: 0.7, time: 0, }, { x: attacker.x, y: attacker.y, scale: 0.2, opacity: 0.2, time: 300, }, 'linear', 'fade', { filter: 'hue-rotate(120deg)' }); scene.showEffect('electroball', { x: attacker.x + 60, y: attacker.y - 5, z: attacker.z, scale: 0.7, opacity: 0.7, time: 100, }, { x: attacker.x, y: attacker.y, scale: 0.2, opacity: 0.2, time: 300, }, 'linear', 'fade', { filter: 'hue-rotate(120deg)' }); scene.showEffect('electroball', { x: attacker.x - 30, y: attacker.y + 60, z: attacker.z, scale: 0.7, opacity: 0.7, time: 100, }, { x: attacker.x, y: attacker.y, scale: 0.2, opacity: 0.2, time: 400, }, 'linear', 'fade', { filter: 'hue-rotate(120deg)' }); scene.showEffect('electroball', { x: attacker.x + 20, y: attacker.y - 50, z: attacker.z, scale: 0.7, opacity: 0.7, time: 100, }, { x: attacker.x, y: attacker.y, scale: 0.2, opacity: 0.2, time: 400, }, 'linear', 'fade', { filter: 'hue-rotate(120deg)' }); scene.showEffect('electroball', { x: attacker.x - 70, y: attacker.y - 50, z: attacker.z, scale: 0.7, opacity: 0.7, time: 200, }, { x: attacker.x, y: attacker.y, scale: 0.2, opacity: 0.2, time: 500, }, 'linear', 'fade', { filter: 'hue-rotate(120deg)' }); }, }, solarblade: { anim(scene, [attacker, defender]) { let xstep = 0; let ystep = 20; let zstep = 0; scene.backgroundEffect(`url('https://${Config.routes.client}/fx/weather-sunnyday.jpg')`, 900, 0.5); scene.showEffect('sword', { x: attacker.leftof(10), y: attacker.y - 10, z: attacker.z, scale: 0.5, opacity: 1, }, { y: attacker.y + 10, scale: 1, opacity: 0.4, time: 300, }, 'decel', 'fade'); for (let i = 0; i < 5; i++) { scene.showEffect('wisp', { x: attacker.leftof(10) + xstep * (i + 1), y: attacker.y - 20 + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1.5, opacity: 1, time: 40 * i + 0, }, { opacity: 0, time: 45 * i + 500, }, 'linear'); } scene.showEffect('flareball', { x: defender.x + 30, y: defender.y + 25, z: defender.z, scale: 0.2, opacity: 1, time: 500, }, { x: defender.x + 50, y: defender.y + 10, opacity: 0.5, time: 800, }, 'accel', 'explode'); scene.showEffect('energyball', { x: defender.x - 30, y: defender.y - 20, z: defender.z, scale: 0.2, opacity: 1, time: 600, }, { x: defender.x - 50, y: defender.y - 20, opacity: 0.5, time: 800, }, 'accel', 'explode'); scene.showEffect('energyball', { x: defender.x + 15, y: defender.y + 10, z: defender.z, scale: 0.2, opacity: 1, time: 700, }, { x: defender.x + 35, y: defender.y + 30, opacity: 0.5, time: 900, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.x - 15, y: defender.y - 30, z: defender.z, scale: 0.2, opacity: 1, time: 700, }, { x: defender.x - 35, y: defender.y - 40, opacity: 0.5, time: 900, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 1.5, opacity: 0.6, time: 700, }, { scale: 2, opacity: 0, time: 1000, }, 'accel', 'fade'); scene.showEffect('leftslash', { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 3, opacity: 0.6, time: 600, }, { scale: 3.5, opacity: 0, time: 1000, }, 'accel', 'fade'); defender.delay(550); defender.anim({ z: defender.behind(20), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, prepareAnim: BattleOtherAnims.chargestatus.anim, }, lightofruin: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.2); scene.showEffect('rainbow', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 3, opacity: 2, time: 0, }, { scale: 0, opacity: 0.5, time: 200, }, 'accel'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 200, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 400, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 275, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 475, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 350, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 550, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 425, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 625, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 500, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 700, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 575, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 775, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 750, }, { scale: 4, opacity: 0, time: 950, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 800, }, { scale: 4, opacity: 0, time: 1000, }, 'linear'); defender.delay(325); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, meteorbeam: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.x - 200 - attacker.x) / 5; let zstep = (defender.z - attacker.z) / 5; scene.backgroundEffect(`url('https://${Config.routes.client}/fx/bg-space.jpg')`, 900, 0.6); for (let i = 0; i < 5; i++) { scene.showEffect('mudwisp', { x: attacker.x + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.7, opacity: 0.6, time: 40 * i + 300, }, { opacity: 0, time: 100 * i + 500, }, 'linear'); } scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.75, opacity: 0.6, }, { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 1.25, opacity: 0, time: 200, }, 'decel'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.6, }, { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 1.5, opacity: 0, time: 200, }, 'decel'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 375, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 575, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 425, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 625, }, 'linear', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 450, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 650, }, 'linear', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 500, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 700, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 575, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 775, }, 'linear', 'explode'); }, prepareAnim: BattleOtherAnims.chargestatus.anim, }, blizzard: { // todo: better blizzard anim anim(scene, [attacker, defender]) { scene.backgroundEffect('#009AA4', 700, 0.5); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, }, { x: defender.x + 60, y: defender.y + 40, z: defender.z, scale: 2, opacity: 0.3, }, 'accel', 'explode'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 75, }, { x: defender.x + 40, y: defender.y - 40, z: defender.z, scale: 2, opacity: 0.3, }, 'accel', 'explode'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 150, }, { x: defender.x - 60, y: defender.y, z: defender.z, scale: 2, opacity: 0.3, }, 'accel', 'explode'); scene.showEffect('icicle', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 225, }, { x: defender.x - 20, y: defender.y + 10, z: defender.z, scale: 2, opacity: 0.3, }, 'accel', 'explode'); }, }, sheercold: { // Reminder: Improve this later anim(scene, [attacker, defender]) { scene.backgroundEffect(`url('https://${Config.routes.client}/sprites/gen6bgs/bg-icecave.jpg')`, 1000, 0.6); scene.showEffect('icicle', { x: defender.x, y: defender.y, z: defender.z, xscale: 2, yscale: 5, opacity: 0.6, }, { xscale: 2.2, yscale: 5.25, scale: 0.6, time: 800, }, 'linear', 'explode'); }, }, glaciallance: { anim(scene, [attacker, ...defenders]) { scene.backgroundEffect(`url('https://${Config.routes.client}/sprites/gen6bgs/bg-icecave.jpg')`, 1000, 0.6); for (const defender of defenders) { scene.showEffect('icicle', { x: defender.x, y: defender.y, z: defender.z, xscale: 2, yscale: 5, opacity: 0.6, }, { xscale: 2.2, yscale: 5.25, scale: 0.6, time: 800, }, 'linear', 'explode'); let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.y - attacker.y) / 5; let zstep = (defender.z - attacker.z) / 5; for (let i = 0; i < 4; i++) { scene.showEffect('icicle', { x: attacker.x + xstep * (i + 1), y: attacker.y + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1.5, opacity: 0.6, time: 40 * i, }, { opacity: 0, time: 40 * i + 600, }, 'linear'); } scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 100, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 400, }, 'linear'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 300, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 600, }, 'linear'); scene.showEffect('wisp', { x: defender.x - 30, y: defender.y, z: defender.z, scale: 2, opacity: 0.5, time: 200, }, { scale: 4, opacity: 0, time: 600, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 2, opacity: 0.5, time: 300, }, { scale: 4, opacity: 0, time: 650, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 15, y: defender.y, z: defender.z, scale: 2, opacity: 0.5, time: 400, }, { scale: 4, opacity: 0, time: 700, }, 'linear', 'fade'); } }, }, freezeshock: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 200, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 275, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 350, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 425, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 575, }, 'linear', 'explode'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 550, }, { scale: 4, opacity: 0, time: 750, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 600, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); }, prepareAnim: BattleOtherAnims.selfstatus.anim, }, iceburn: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 200, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 275, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 350, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 425, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 575, }, 'linear', 'explode'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 550, }, { scale: 4, opacity: 0, time: 750, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 600, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); }, prepareAnim: BattleOtherAnims.selfstatus.anim, }, razorwind: { anim: null!, prepareAnim: BattleOtherAnims.selfstatus.anim, }, overheat: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#390000 30%, #B84038)', 700, 0.4); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.8, }, { x: defender.x + 60, y: defender.y + 40, z: defender.z, scale: 2, opacity: 0.5, }, 'decel', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.8, time: 75, }, { x: defender.x + 40, y: defender.y - 40, z: defender.z, scale: 2, opacity: 0.5, }, 'decel', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.8, time: 150, }, { x: defender.x - 60, y: defender.y, z: defender.z, scale: 2, opacity: 0.5, }, 'decel', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.8, time: 225, }, { x: defender.x - 20, y: defender.y + 10, z: defender.z, scale: 2, opacity: 0.5, }, 'decel', 'explode'); scene.showEffect('wisp', { x: attacker.x + 30, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, time: 100, }, { y: attacker.y + 60, opacity: 0.2, time: 500, }, 'linear', 'fade'); scene.showEffect('wisp', { x: attacker.x - 30, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, time: 200, }, { y: defender.y + 60, opacity: 0.2, time: 600, }, 'linear', 'fade'); scene.showEffect('wisp', { x: attacker.x + 15, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, time: 300, }, { y: attacker.y + 60, opacity: 0.2, time: 700, }, 'linear', 'fade'); scene.showEffect('wisp', { x: attacker.x - 15, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, time: 400, }, { y: attacker.y + 60, opacity: 0.2, time: 800, }, 'linear', 'fade'); defender.delay(200); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ time: 100, }, 'accel'); }, }, blastburn: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#390000 30%, #B84038)', 700, 0.4); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.8, }, { x: defender.x + 60, y: defender.y + 40, z: defender.z, scale: 2, opacity: 0.5, }, 'decel', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.8, time: 75, }, { x: defender.x + 40, y: defender.y - 40, z: defender.z, scale: 2, opacity: 0.5, }, 'decel', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.8, time: 150, }, { x: defender.x - 60, y: defender.y, z: defender.z, scale: 2, opacity: 0.5, }, 'decel', 'explode'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.8, time: 225, }, { x: defender.x - 20, y: defender.y + 10, z: defender.z, scale: 2, opacity: 0.5, }, 'decel', 'explode'); defender.delay(200); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ time: 100, }, 'accel'); }, }, sacredfire: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#2630A9', 900, 0.6); scene.showEffect('bluefireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, }, { x: defender.x, y: defender.y - 40, z: defender.z, scale: 1.5, opacity: 1, time: 500, }, 'linear', 'fade'); scene.showEffect('bluefireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, time: 50, }, { x: defender.x, y: defender.y - 40, z: defender.z, scale: 1.5, opacity: 1, time: 550, }, 'linear', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.8, scale: 0, time: 550, }, { x: defender.x, y: defender.y, z: defender.z, scale: 4, opacity: 0.3, time: 850, }, 'linear', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.8, scale: 0, time: 650, }, { x: defender.x, y: defender.y, z: defender.z, scale: 4, opacity: 0.3, time: 950, }, 'linear', 'fade'); scene.showEffect('bluefireball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 0.6, opacity: 0.8, time: 550, }, { x: defender.x + 60, y: defender.y - 20, z: defender.z, scale: 1.5, opacity: 0.5, time: 825, }, 'decel', 'explode'); scene.showEffect('bluefireball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 0.6, opacity: 0.8, time: 575, }, { x: defender.x - 50, y: defender.y - 20, z: defender.z, scale: 1, opacity: 0.5, time: 850, }, 'decel', 'explode'); scene.showEffect('bluefireball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 0.6, opacity: 0.8, time: 600, }, { x: defender.x - 60, y: defender.y + 20, z: defender.z, scale: 1.5, opacity: 0.5, time: 875, }, 'decel', 'explode'); scene.showEffect('bluefireball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 0.6, opacity: 0.8, time: 625, }, { x: defender.x + 50, y: defender.y + 30, z: defender.z, scale: 1.5, opacity: 0.5, time: 900, }, 'decel', 'explode'); scene.showEffect('bluefireball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 0.6, opacity: 0.8, time: 650, }, { x: defender.x - 10, y: defender.y + 60, z: defender.z, scale: 1.5, opacity: 0.5, time: 925, }, 'decel', 'explode'); }, }, blueflare: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#4499FF', 600, 0.6); scene.showEffect('bluefireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.8, }, { x: defender.x + 60, y: defender.y + 40, z: defender.z, scale: 2, opacity: 0.5, }, 'decel', 'explode'); scene.showEffect('bluefireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.8, time: 75, }, { x: defender.x + 40, y: defender.y - 40, z: defender.z, scale: 2, opacity: 0.5, }, 'decel', 'explode'); scene.showEffect('bluefireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.8, time: 150, }, { x: defender.x - 60, y: defender.y, z: defender.z, scale: 2, opacity: 0.5, }, 'decel', 'explode'); scene.showEffect('bluefireball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.8, time: 225, }, { x: defender.x - 20, y: defender.y + 10, z: defender.z, scale: 2, opacity: 0.5, }, 'decel', 'explode'); }, }, electroweb: { anim(scene, [attacker, defender]) { scene.showEffect('web', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 400, }, 'ballistic', 'explode'); scene.showEffect('web', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 100, }, { x: defender.x + 40, y: defender.y - 20, z: defender.z, scale: 0.5, opacity: 1, time: 500, }, 'ballistic', 'explode'); scene.showEffect('web', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, time: 200, }, { x: defender.x - 30, y: defender.y - 10, z: defender.z, scale: 0.5, opacity: 1, time: 600, }, 'ballistic', 'explode'); }, }, fling: { anim(scene, [attacker, defender]) { scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.4, opacity: 1, time: 400, }, 'ballistic', 'explode'); }, }, worryseed: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.4, opacity: 1, time: 400, }, 'ballistic', 'explode'); }, }, rockthrow: { anim(scene, [attacker, defender]) { scene.showEffect('rock1', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 400, }, 'ballistic', 'explode'); }, }, paraboliccharge: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 7, opacity: 0, time: 0, }, { scale: 0, opacity: 0.5, time: 400, }, 'linear', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 7, opacity: 0, time: 150, }, { scale: 0, opacity: 0.5, time: 600, }, 'linear', 'fade'); }, }, drainingkiss: { anim(scene, [attacker, defender]) { scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.6, time: 0, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 500, opacity: 0, }, 'ballistic2'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.6, time: 50, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 550, opacity: 0, }, 'linear'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.6, time: 100, }, { x: attacker.x, y: attacker.y, z: attacker.z, time: 600, opacity: 0, }, 'ballistic2Under'); }, }, oblivionwing: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.x - 165 - attacker.x) / 5; let zstep = (defender.z - attacker.z) / 5; scene.backgroundEffect('#000000', 900, 0.5); for (let i = 0; i < 5; i++) { scene.showEffect('flareball', { x: attacker.x + xstep * (i + 1), y: (attacker.y + 165) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1, opacity: 0.9, time: 40 * i + 500, }, { opacity: 0, time: 100 * i + 800, }, 'linear'); } scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y + 165, z: attacker.z, scale: 0.8, opacity: 0.7, time: 500, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 1.4, opacity: 0.3, time: 700, }, 'linear', 'explode'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y + 165, z: attacker.z, scale: 0.8, opacity: 0.7, time: 575, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 1.4, opacity: 0.3, time: 775, }, 'linear', 'explode'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y + 165, z: attacker.z, scale: 0.8, opacity: 0.7, time: 625, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 1.4, opacity: 0.3, time: 825, }, 'linear', 'explode'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y + 165, z: attacker.z, scale: 0.8, opacity: 0.7, time: 650, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1.4, opacity: 0.3, time: 850, }, 'linear', 'explode'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y + 165, z: attacker.z, scale: 0.8, opacity: 0.7, time: 700, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 1.4, opacity: 0.3, time: 900, }, 'linear', 'explode'); scene.showEffect('blackwisp', { x: attacker.x, y: attacker.y + 165, z: attacker.z, scale: 0.8, opacity: 0.7, time: 775, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 1.4, opacity: 0.3, time: 975, }, 'linear', 'explode'); scene.showEffect('blackwisp', { x: defender.x, y: defender.y + 20, z: defender.z, scale: 1, opacity: 0.5, time: 1000, }, { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0, time: 1500, }, 'ballistic2'); scene.showEffect('blackwisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, opacity: 0.5, time: 1050, }, { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0, time: 1550, }, 'linear'); scene.showEffect('blackwisp', { x: defender.x, y: defender.y - 20, z: defender.z, scale: 1.5, opacity: 0.3, time: 1100, }, { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0, time: 1600, }, 'ballistic2Under'); attacker.anim({ y: defender.y + 120, opacity: 0, time: 300, }, 'accel'); attacker.delay(725); attacker.anim({ x: attacker.x, y: attacker.y + 40, z: attacker.behind(40), time: 1, }); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.z, time: 250, }, 'decel'); defender.delay(600); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ time: 100, }, 'accel'); }, }, signalbeam: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, }, { x: defender.x, y: defender.y, z: defender.behind(20), opacity: 0.6, time: 400, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 100, }, { x: defender.x + 10, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 500, }, 'linear', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 200, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(20), opacity: 0.6, time: 600, }, 'linear', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 300, }, { x: defender.x, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 700, }, 'linear', 'explode'); }, }, simplebeam: { anim(scene, [attacker, defender]) { scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, }, { x: defender.x, y: defender.y, z: defender.behind(20), opacity: 0.6, time: 400, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 100, }, { x: defender.x + 10, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 500, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 200, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(20), opacity: 0.6, time: 600, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.2, time: 300, }, { x: defender.x, y: defender.y - 5, z: defender.behind(20), opacity: 0.6, time: 700, }, 'linear', 'explode'); }, }, triattack: { anim(scene, [attacker, defender]) { scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 45, z: attacker.z, scale: 0, opacity: 0.2, }, { scale: 0.5, opacity: 0.6, time: 400, }, 'decel', 'fade'); scene.showEffect('iceball', { x: attacker.x - 45, y: attacker.y - 20, z: attacker.z, scale: 0, opacity: 0.2, time: 100, }, { scale: 0.5, opacity: 0.6, time: 500, }, 'decel', 'fade'); scene.showEffect('electroball', { x: attacker.x + 45, y: attacker.y - 20, z: attacker.z, scale: 0, opacity: 0.2, time: 200, }, { scale: 0.5, opacity: 0.6, time: 600, }, 'decel', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 45, z: attacker.z, scale: 0.5, opacity: 0.6, time: 400, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(5), opacity: 0.8, time: 700, }, 'accel', 'explode'); scene.showEffect('electroball', { x: attacker.x - 45, y: attacker.y - 20, z: attacker.z, scale: 0.5, opacity: 0.6, time: 500, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(5), opacity: 0.8, time: 800, }, 'accel', 'explode'); scene.showEffect('iceball', { x: attacker.x + 45, y: attacker.y - 20, z: attacker.z, scale: 0.5, opacity: 0.6, time: 600, }, { x: defender.x - 10, y: defender.y + 5, z: defender.behind(5), opacity: 0.8, time: 900, }, 'accel', 'explode'); scene.showEffect('fireball', { x: defender.x - 15, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.8, time: 600, }, { scale: 3, opacity: 0, time: 900, }, 'linear'); scene.showEffect('lightning', { x: defender.x + 15, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.8, time: 700, }, { scale: 5, opacity: 0, time: 1000, }, 'linear'); scene.showEffect('icicle', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.8, time: 800, }, { scale: 3, opacity: 0, time: 1100, }, 'linear'); defender.delay(675); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, tripleaxel: { anim(scene, [attacker, defender]) { scene.showEffect('icicle', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('icicle', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('foot', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 450, }, { x: defender.leftof(20), y: defender.y, z: defender.behind(20), scale: 2, opacity: 0, time: 750, }, 'linear'); scene.showEffect('foot', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 750, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(20), scale: 2, opacity: 0, time: 1050, }, 'linear'); BattleOtherAnims.xattack.anim(scene, [attacker, defender]); }, }, hypnosis: { anim(scene, [attacker, defender]) { scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.8, time: 0, }, { scale: 2, opacity: 0, time: 400, }, 'decel'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.8, time: 100, }, { scale: 2, opacity: 0, time: 500, }, 'decel'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.8, time: 200, }, { scale: 2, opacity: 0, time: 600, }, 'decel'); }, }, darkvoid: { anim(scene, [attacker, ...defenders]) { for (const defender of defenders) { defender.anim({ y: defender.y - 80, opacity: 0, time: 300, }, 'accel'); defender.anim({ y: defender.y, opacity: 0, time: 200, }); defender.delay(200); defender.anim({ y: defender.y, opacity: 1, time: 200, }); } const defender = defenders[1] || defenders[0]; scene.backgroundEffect('#AA0000', 700, 0.3); scene.showEffect('shadowball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 1, xscale: 3, opacity: 0.8, time: 0, }, { scale: 2, xscale: 8, opacity: 0.1, time: 600, }, 'accel', 'fade'); }, }, roaroftime: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 1800, 0.5); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 0, }, { z: attacker.behind(-70), scale: 7, opacity: 0, time: 400, }, 'linear'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 150, }, { z: attacker.behind(-70), scale: 7, opacity: 0, time: 600, }, 'linear'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 300, }, { z: attacker.behind(-70), scale: 7, opacity: 0, time: 800, }, 'linear'); scene.showEffect('purplewisp', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, time: 900, }, { scale: 5, opacity: 0, time: 1300, }, 'decel'); scene.showEffect('waterwisp', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 0.6, time: 1050, }, { scale: 5, opacity: 0, time: 1450, }, 'decel'); scene.showEffect('purplewisp', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 0.6, time: 1200, }, { scale: 5, opacity: 0, time: 1600, }, 'decel'); scene.showEffect('waterwisp', { x: defender.x - 10, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, time: 1350, }, { scale: 5, opacity: 0, time: 1750, }, 'decel'); defender.delay(925); defender.anim({ x: defender.x - 30, time: 75, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x - 30, time: 100, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x - 30, time: 100, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x, time: 100, }); }, }, spacialrend: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 650, 0.5); scene.showEffect('mistball', { x: defender.x + 30, y: defender.y + 25, z: defender.z, scale: 0.2, opacity: 1, time: 0, }, { x: defender.x + 50, y: defender.y + 10, opacity: 0.5, time: 300, }, 'accel', 'explode'); scene.showEffect('mistball', { x: defender.x - 30, y: defender.y - 20, z: defender.z, scale: 0.2, opacity: 1, time: 100, }, { x: defender.x - 50, y: defender.y - 20, opacity: 0.5, time: 300, }, 'accel', 'explode'); scene.showEffect('mistball', { x: defender.x + 15, y: defender.y + 10, z: defender.z, scale: 0.2, opacity: 1, time: 200, }, { x: defender.x + 35, y: defender.y + 30, opacity: 0.5, time: 400, }, 'accel', 'explode'); scene.showEffect('mistball', { x: defender.x - 15, y: defender.y - 30, z: defender.z, scale: 0.2, opacity: 1, time: 200, }, { x: defender.x - 35, y: defender.y - 40, opacity: 0.5, time: 400, }, 'accel', 'explode'); scene.showEffect('mistball', { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 1.5, opacity: 0.6, time: 300, }, { scale: 2, opacity: 0, time: 500, }, 'accel', 'fade'); scene.showEffect('leftslash', { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 1.5, opacity: 0.7, time: 100, }, { scale: 2, opacity: 0, time: 500, }, 'decel', 'fade'); scene.showEffect(defender.sp, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.5, time: 125, }, { x: defender.x - 5, y: defender.y - 5, z: defender.z - 5, time: 425, }, 'decel'); scene.showEffect(defender.sp, { x: defender.x - 5, y: defender.y - 5, z: defender.z - 5, opacity: 0.5, time: 425, }, { x: defender.x, y: defender.y, z: defender.z, time: 625, }, 'accel'); defender.delay(125); defender.anim({ x: defender.x + 5, y: defender.y + 5, z: defender.z + 5, opacity: 0.5, time: 300, }, 'decel'); defender.anim({ x: defender.x, opacity: 1, time: 199, }, 'accel'); }, }, sacredsword: { anim(scene, [attacker, defender]) { attacker.delay(300); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(70), time: 300, opacity: 0.5, }, 'accel'); attacker.anim({ x: defender.x, y: defender.x, z: defender.behind(100), opacity: 0, time: 100, }, 'linear'); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.behind(70), opacity: 0, time: 1, }, 'linear'); attacker.anim({ opacity: 1, time: 500, }, 'decel'); defender.delay(600); defender.anim({ z: defender.behind(30), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); scene.showEffect('sword', { x: attacker.leftof(-10), y: attacker.y - 10, z: attacker.z, scale: 0.5, opacity: 1, }, { y: attacker.y + 10, scale: 1, opacity: 0.4, time: 300, }, 'decel', 'fade'); scene.showEffect('iceball', { x: defender.x + 30, y: defender.y + 25, z: defender.z, scale: 0.2, opacity: 1, time: 410, }, { x: defender.x + 50, y: defender.y + 10, opacity: 0.5, time: 710, }, 'accel', 'explode'); scene.showEffect('iceball', { x: defender.x - 30, y: defender.y - 20, z: defender.z, scale: 0.2, opacity: 1, time: 510, }, { x: defender.x - 50, y: defender.y - 20, opacity: 0.5, time: 710, }, 'accel', 'explode'); scene.showEffect('iceball', { x: defender.x + 15, y: defender.y + 10, z: defender.z, scale: 0.2, opacity: 1, time: 610, }, { x: defender.x + 35, y: defender.y + 30, opacity: 0.5, time: 810, }, 'accel', 'explode'); scene.showEffect('iceball', { x: defender.x - 15, y: defender.y - 30, z: defender.z, scale: 0.2, opacity: 1, time: 610, }, { x: defender.x - 35, y: defender.y - 40, opacity: 0.5, time: 910, }, 'accel', 'explode'); scene.showEffect('iceball', { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 1.5, opacity: 0.6, time: 610, }, { scale: 2, opacity: 0, time: 910, }, 'accel', 'fade'); scene.showEffect('leftslash', { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 1.5, opacity: 0.6, time: 610, }, { scale: 2, opacity: 0, time: 910, }, 'accel', 'fade'); }, }, secretsword: { anim(scene, [attacker, defender]) { defender.delay(400); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); scene.showEffect('sword', { x: attacker.leftof(-10), y: attacker.y - 10, z: attacker.z, scale: 0.5, opacity: 1, }, { y: attacker.y + 10, scale: 1, opacity: 0.4, time: 300, }, 'decel', 'fade'); scene.showEffect('flareball', { x: defender.x + 30, y: defender.y + 25, z: defender.z, scale: 0.2, opacity: 1, time: 400, }, { x: defender.x + 50, y: defender.y + 10, opacity: 0.5, time: 700, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.x - 30, y: defender.y - 20, z: defender.z, scale: 0.2, opacity: 1, time: 500, }, { x: defender.x - 50, y: defender.y - 20, opacity: 0.5, time: 700, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.x + 15, y: defender.y + 10, z: defender.z, scale: 0.2, opacity: 1, time: 600, }, { x: defender.x + 35, y: defender.y + 30, opacity: 0.5, time: 800, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.x - 15, y: defender.y - 30, z: defender.z, scale: 0.2, opacity: 1, time: 600, }, { x: defender.x - 35, y: defender.y - 40, opacity: 0.5, time: 800, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 1.5, opacity: 0.6, time: 700, }, { scale: 2, opacity: 0, time: 900, }, 'accel', 'fade'); scene.showEffect('leftslash', { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 1.5, opacity: 0.6, time: 500, }, { scale: 2, opacity: 0, time: 900, }, 'accel', 'fade'); }, }, psychocut: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: defender.x + 60, y: defender.y + 30, z: defender.z, scale: 0.2, opacity: 1, }, { x: defender.x - 70, y: defender.y - 40, z: defender.z, scale: 0.4, opacity: 0.4, time: 200, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x + 60, y: defender.y + 30, z: defender.z, scale: 0.2, opacity: 1, time: 100, }, { x: defender.x - 70, y: defender.y - 40, z: defender.z, scale: 0.4, opacity: 0.4, time: 300, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x + 80, y: defender.y + 10, z: defender.z, scale: 0.2, opacity: 1, time: 100, }, { x: defender.x - 50, y: defender.y - 60, z: defender.z, scale: 0.4, opacity: 0.4, time: 300, }, 'linear', 'fade'); scene.showEffect('wisp', { x: defender.x + 80, y: defender.y + 10, z: defender.z, scale: 0.2, opacity: 1, time: 200, }, { x: defender.x - 50, y: defender.y - 60, z: defender.z, scale: 0.4, opacity: 0.4, time: 400, }, 'linear', 'fade'); }, }, precipiceblades: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#390000 30%, #B84038)', 800, 0.4); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, }, { x: attacker.x, y: attacker.y, z: attacker.z, scale: 6, opacity: 0, }, 'linear', 'fade'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y - 35, z: attacker.behind(-50), scale: 0, opacity: 0.8, }, { scale: 3, opacity: 0, time: 200, }, 'linear'); scene.showEffect('rock2', { x: attacker.x, y: attacker.y - 20, z: attacker.behind(-50), scale: 0.5, yscale: 1.4, opacity: 0.7, time: 25, }, { y: attacker.y, yscale: 1.5, time: 250, }, 'decel', 'fade'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y - 35, z: attacker.behind(-125), scale: 0, opacity: 0.8, time: 150, }, { scale: 3, opacity: 0, }, 'linear'); scene.showEffect('rock1', { x: attacker.x, y: attacker.y - 20, z: attacker.behind(-125), scale: 0.5, yscale: 1.5, opacity: 0.7, time: 175, }, { y: attacker.y, yscale: 1.6, time: 400, }, 'decel', 'fade'); scene.showEffect('fireball', { x: defender.x, y: defender.y - 35, z: defender.z, scale: 0, opacity: 0.8, time: 300, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('rock2', { x: defender.x - 15, y: defender.y - 20, z: defender.z, scale: 0.5, yscale: 1.6, opacity: 0.7, time: 350, }, { y: attacker.y, yscale: 1.7, time: 550, }, 'decel', 'fade'); scene.showEffect('rock2', { x: defender.x + 15, y: defender.y - 20, z: defender.z, scale: 0.5, yscale: 1.6, opacity: 0.7, time: 375, }, { y: attacker.y, yscale: 1.7, time: 575, }, 'decel', 'fade'); scene.showEffect('rock1', { x: defender.x, y: defender.y - 20, z: defender.z, scale: 0.5, yscale: 1.8, opacity: 0.7, time: 400, }, { y: defender.y + 10, yscale: 1.9, time: 600, }, 'accel', 'fade'); defender.delay(325); defender.anim({ x: defender.x - 30, time: 75, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x - 30, time: 100, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x - 30, time: 100, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x, time: 100, }); }, }, originpulse: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#00CCCC', 700, 0.5); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, }, { x: attacker.x, y: attacker.y, z: attacker.z, scale: 6, opacity: 0, }, 'linear', 'fade'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.3, }, { x: defender.x + 10, y: defender.y + 5, z: defender.behind(30), scale: 1, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.3, time: 75, }, { x: defender.x - 10, y: defender.y - 5, z: defender.behind(30), scale: 1, opacity: 0.6, }, 'decel', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.3, time: 150, }, { x: defender.x, y: defender.y + 5, z: defender.behind(30), scale: 1, opacity: 0.6, }, 'decel', 'explode'); }, }, dragonascent: { anim(scene, [attacker, defender]) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/bg-space.jpg')`, 1000, 0.7); scene.showEffect('iceball', { x: attacker.leftof(-25), y: attacker.y + 250, z: attacker.z, scale: 0.5, opacity: 0.8, time: 400, }, { x: defender.x, y: defender.y, z: defender.behind(5), scale: 2, time: 700, }, 'accel', 'explode'); scene.showEffect('energyball', { x: attacker.leftof(-25), y: attacker.y + 250, z: attacker.z, scale: 0.5, opacity: 0.1, time: 400, }, { x: defender.x, y: defender.y, z: defender.behind(5), scale: 2, time: 700, }, 'accel', 'explode'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.7, time: 650, }, { scale: 4, opacity: 0, time: 900, }, 'linear', 'fade'); scene.showEffect('energyball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.7, time: 750, }, { scale: 4, opacity: 0, time: 1000, }, 'linear', 'fade'); attacker.anim({ opacity: 0, y: defender.y + 120, time: 300, }, 'accel'); attacker.delay(625); attacker.anim({ x: attacker.x, y: attacker.y + 40, z: attacker.behind(40), time: 1, }); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.z, time: 250, }, 'decel'); defender.delay(725); defender.anim({ z: defender.behind(20), time: 250, }, 'decel'); defender.anim({ time: 200, }, 'swing'); }, }, diamondstorm: { // todo: new animation involving icicles anim(scene, [attacker, defender]) { scene.backgroundEffect('#FF99FF', 700, 0.3); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 200, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 275, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 350, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 425, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 575, }, 'linear', 'explode'); }, }, dazzlinggleam: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#FF99FF', 700, 0.5); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 1, opacity: 0.3, time: 200, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 1, opacity: 0.3, time: 275, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1, opacity: 0.3, time: 350, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 1, opacity: 0.3, time: 425, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 1, opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 1, opacity: 0.3, time: 575, }, 'linear', 'explode'); }, }, mistyexplosion: { anim(scene, [attacker]) { scene.backgroundEffect('#FF99FF', 700, 0.5); scene.showEffect('fireball', { x: attacker.x + 40, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.6, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('fireball', { x: attacker.x - 40, y: attacker.y - 20, z: attacker.z, scale: 0, opacity: 0.6, time: 150, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('fireball', { x: attacker.x + 10, y: attacker.y + 20, z: attacker.z, scale: 0, opacity: 0.6, time: 300, }, { scale: 6, opacity: 0, }, 'decel'); attacker.delay(450).anim({ scale: 4, time: 400, opacity: 0, }, 'linear'); }, }, payday: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.3, opacity: 0.3, time: 200, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.3, opacity: 0.3, time: 275, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.3, opacity: 0.3, time: 350, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.3, opacity: 0.3, time: 425, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.3, opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.3, opacity: 0.3, time: 575, }, 'linear', 'explode'); }, }, swift: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 1, opacity: 0.3, time: 200, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 1, opacity: 0.3, time: 275, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1, opacity: 0.3, time: 350, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 1, opacity: 0.3, time: 425, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 1, opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 1, opacity: 0.3, time: 575, }, 'linear', 'explode'); }, }, leafstorm: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#9AB440', 700, 0.7); scene.showEffect('leaf1', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.1, opacity: 1, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 2, opacity: 0.6, time: 200, }, 'linear', 'explode'); scene.showEffect('leaf2', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.1, opacity: 1, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 2, opacity: 0.6, time: 275, }, 'linear', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1, opacity: 0.3, time: 350, }, 'linear', 'explode'); scene.showEffect('leaf2', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.1, opacity: 1, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 2, opacity: 0.6, time: 425, }, 'linear', 'explode'); scene.showEffect('leaf1', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.1, opacity: 1, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 2, opacity: 0.6, time: 500, }, 'linear', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 1, opacity: 0.3, time: 575, }, 'linear', 'explode'); defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, petaldance: { // Work on this later anim(scene, [attacker, defender]) { scene.backgroundEffect('#FF99FF', 1400, 0.5); attacker.anim({ x: attacker.x - 10, time: 100 }); attacker.anim({ x: attacker.x + 10, time: 200 }); attacker.anim({ x: attacker.x, time: 100 }); attacker.anim({ x: defender.x, y: defender.y + 50, z: defender.behind(-150), time: 200, }, 'ballistic2'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-100), time: 100, }, 'accel'); attacker.anim({ z: attacker.z, time: 400 }, 'swing'); scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 0, }, { x: attacker.x - 45, y: attacker.y - 45, scale: 2, opacity: 0, time: 300, }, 'decel'); scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 150, }, { x: attacker.x + 50, y: attacker.y - 30, scale: 2, opacity: 0, time: 450, }, 'decel'); scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 250, }, { x: attacker.x + 25, y: attacker.y - 60, scale: 2, opacity: 0, time: 550, }, 'decel'); scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 300, }, { x: attacker.x - 40, y: attacker.y - 40, scale: 2, opacity: 0, time: 600, }, 'decel'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: defender.behind(-100), scale: 0.6, opacity: 1, time: 700, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.8, opacity: 0.6, time: 900, }, 'ballistic', 'explode'); scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: defender.behind(-100), scale: 0.7, opacity: 1, time: 775, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.9, opacity: 0.6, time: 975, }, 'ballistic2Under', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: defender.behind(-100), scale: 0.5, opacity: 0.6, time: 850, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.8, opacity: 0.3, time: 1050, }, 'ballistic2', 'explode'); scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: defender.behind(-100), scale: 0.6, opacity: 1, time: 925, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.9, opacity: 0.6, time: 1125, }, 'ballistic', 'explode'); scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: defender.behind(-100), scale: 0.8, opacity: 1, time: 1000, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 1, opacity: 0.6, time: 1200, }, 'linear', 'explode'); scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: defender.behind(-100), scale: 0.8, opacity: 0.6, time: 1075, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.9, opacity: 0.3, time: 1175, }, 'ballistic2', 'explode'); defender.delay(825); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, petalblizzard: { anim(scene, [attacker, ...defenders]) { scene.backgroundEffect('#FF99FF', 700, 0.3); for (const defender of defenders) { defender.delay(350); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); } const defender = defenders[1] || defenders[0]; scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, }, { x: defender.x + 80, y: defender.y + 60, z: defender.z, scale: 2, opacity: 0.3, }, 'accel', 'explode'); scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 75, }, { x: defender.x + 60, y: defender.y - 60, z: defender.z, scale: 2, opacity: 0.3, }, 'accel', 'explode'); scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 150, }, { x: defender.x - 80, y: defender.y - 20, z: defender.z, scale: 2, opacity: 0.3, }, 'accel', 'explode'); scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 225, }, { x: defender.x - 60, y: defender.y + 20, z: defender.z, scale: 2, opacity: 0.3, }, 'accel', 'explode'); scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 275, }, { x: defender.x + 40, y: defender.y - 40, z: defender.z, scale: 2, opacity: 0.3, }, 'accel', 'explode'); scene.showEffect('petal', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 300, }, { x: defender.x - 60, y: defender.y - 30, z: defender.z, scale: 2, opacity: 0.3, }, 'accel', 'explode'); }, }, magicalleaf: { anim(scene, [attacker, defender]) { scene.showEffect('leaf1', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.1, opacity: 1, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 2, opacity: 0.6, time: 200, }, 'linear', 'explode'); scene.showEffect('leaf2', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.1, opacity: 1, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 2, opacity: 0.6, time: 275, }, 'linear', 'explode'); scene.showEffect('leaf1', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.1, opacity: 1, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 2, opacity: 0.6, time: 350, }, 'linear', 'explode'); scene.showEffect('leaf2', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.1, opacity: 1, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 2, opacity: 0.6, time: 425, }, 'linear', 'explode'); scene.showEffect('leaf1', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.1, opacity: 1, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 2, opacity: 0.6, time: 500, }, 'linear', 'explode'); scene.showEffect('leaf2', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.1, opacity: 1, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 2, opacity: 0.6, time: 575, }, 'linear', 'explode'); }, }, leafage: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.6, time: 300, }, 'linear', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 100, }, { x: defender.x + 10, y: defender.y + 5, z: defender.z, opacity: 0.6, time: 400, }, 'ballistic2', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 200, }, { x: defender.x - 10, y: defender.y - 10, z: defender.z, opacity: 0.6, time: 500, }, 'ballistic2Under', 'explode'); scene.showEffect('feather', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.2, opacity: 0.1, time: 300, }, 'linear', 'explode'); scene.showEffect('feather', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 100, }, { x: defender.x + 10, y: defender.y + 5, z: defender.z, scale: 0.2, opacity: 0.1, time: 400, }, 'ballistic2', 'explode'); scene.showEffect('feather', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 200, }, { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 0.2, opacity: 0.1, time: 500, }, 'ballistic2Under', 'explode'); }, }, gunkshot: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 2, opacity: 0.3, time: 200, }, 'linear', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 2, opacity: 0.3, time: 275, }, 'linear', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 2, opacity: 0.3, time: 350, }, 'linear', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 2, opacity: 0.3, time: 425, }, 'linear', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 2, opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 2, opacity: 0.3, time: 575, }, 'linear', 'explode'); }, }, hyperspacehole: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#ffffff', 900, 0.6); attacker.anim({ opacity: 0, y: attacker.y - 80, time: 300, }, 'swing'); attacker.anim({ x: defender.x, y: defender.y - 80, z: defender.z, opacity: 0, time: 1, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y + 10, z: defender.z, opacity: 1, time: 350, }, 'decel'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.8, time: 550, }, { scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.8, time: 650, }, { scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.8, time: 750, }, { scale: 3, opacity: 0, time: 900, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y - 80, z: defender.z, opacity: 0, time: 300, }, 'accel'); attacker.anim({ y: attacker.y - 80, opacity: 0, time: 1, }, 'linear'); attacker.anim({ time: 300, opacity: 1, }, 'decel'); defender.delay(500); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, hyperspacefury: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 900, 0.3); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.behind(-100), scale: 0.8, opacity: 0.8, }, { x: defender.x, y: defender.y, z: defender.behind(-100), scale: 1, opacity: 1, }, 'linear', 'fade'); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.behind(-100), scale: 0.6, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 1, opacity: 1, time: 200, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.behind(-100), scale: 0.6, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 1, opacity: 1, time: 275, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.behind(-100), scale: 0.6, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 350, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.behind(-100), scale: 0.6, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 1, opacity: 1, time: 425, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.behind(-100), scale: 0.6, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 1, opacity: 1, time: 500, }, 'linear', 'explode'); scene.showEffect('fist', { x: defender.x, y: defender.y, z: defender.behind(-100), scale: 0.6, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 575, }, 'linear', 'explode'); attacker.anim({ x: attacker.leftof(-20), y: attacker.y, z: attacker.behind(-20), opacity: 0, time: 200, }, 'linear'); attacker.anim({ opacity: 0, time: 300, }, 'linear'); attacker.anim({ opacity: 1, time: 200, }, 'linear'); defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, poisonjab: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(50), scale: 3, opacity: 0, time: 700, }, 'linear'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 500, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(50), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 400, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(50), scale: 2, opacity: 0, time: 800, }, 'linear'); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-20), time: 400, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, time: 50, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.delay(425); defender.anim({ x: defender.leftof(-20), y: defender.y, z: defender.behind(20), time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, psychoboost: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 700, 0.3); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.5, }, { scale: 3, opacity: 0.3, time: 300, }, 'decel', 'fade'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.8, opacity: 0.6, time: 100, }, { scale: 3, opacity: 0.5, time: 400, }, 'decel', 'fade'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0.8, time: 400, }, { x: defender.x, y: defender.y, z: defender.behind(20), scale: 1.25, time: 600, }, 'accel', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.8, opacity: 0.6, time: 100, }, { scale: 4, opacity: 0.5, time: 400, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2.5, opacity: 0.8, time: 400, }, { x: defender.x, y: defender.y, z: defender.behind(20), scale: 1.5, opacity: 0.8, time: 600, }, 'accel', 'explode'); scene.showEffect('mistball', { x: defender.x + 30, y: defender.y + 25, z: defender.z, scale: 0.2, opacity: 1, time: 800, }, { x: defender.x + 50, y: defender.y + 10, opacity: 0.5, time: 1000, }, 'accel', 'explode'); scene.showEffect('mistball', { x: defender.x - 30, y: defender.y - 20, z: defender.z, scale: 0.2, opacity: 1, time: 900, }, { x: defender.x - 50, y: defender.y - 20, opacity: 0.5, time: 1100, }, 'accel', 'explode'); scene.showEffect('mistball', { x: defender.x + 15, y: defender.y + 10, z: defender.z, scale: 0.2, opacity: 1, time: 900, }, { x: defender.x + 35, y: defender.y + 30, opacity: 0.5, time: 1100, }, 'accel', 'explode'); scene.showEffect('mistball', { x: defender.x - 15, y: defender.y - 30, z: defender.z, scale: 0.2, opacity: 1, time: 800, }, { x: defender.x - 35, y: defender.y - 40, opacity: 0.5, time: 1000, }, 'accel', 'explode'); attacker.delay(400); attacker.anim({ z: attacker.behind(20), time: 300, }, 'swing'); attacker.anim({ time: 300, }, 'swing'); defender.delay(600); defender.anim({ z: defender.behind(10), time: 300, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, bestow: { anim(scene, [attacker, defender]) { scene.showEffect('pokeball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.1, opacity: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, opacity: 1, time: 400, }, 'ballistic', 'fade'); }, }, finalgambit: { anim(scene, [attacker, defender]) { scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.3, time: 500, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 50, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 350, }, 'accel', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 100, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 400, }, 'accel', 'fade'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), scale: 5, opacity: 0, time: 300, }, 'linear'); attacker.anim({ opacity: 0, time: 1, }, 'linear'); attacker.anim({ time: 300, }, 'linear'); defender.delay(280); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, forestscurse: { anim(scene, [attacker, defender]) { scene.showEffect('energyball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 0, }, { y: defender.y, scale: 3, opacity: 0, }, 'accel'); }, }, trickortreat: { anim(scene, [attacker, defender]) { scene.showEffect('shadowball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 0, }, { y: defender.y, scale: 3, opacity: 0, }, 'accel'); }, }, healpulse: { anim(scene, [attacker, defender]) { let xf = [1, -1, 1, -1]; let yf = [1, -1, -1, 1]; let xf2 = [1, 0, -1, 0]; let yf2 = [0, 1, 0, -1]; scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.4, time: 0, }, { scale: 8, opacity: 0.1, time: 600, }, 'linear', 'fade'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 300, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 600, }, 'linear'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 500, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0, time: 800, }, 'linear'); for (let i = 0; i < 4; i++) { scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 1, }, { x: attacker.x + 240 * xf[i], y: attacker.y, z: attacker.z + 137 * yf[i], scale: 0.3, opacity: 0.5, time: 800, }, 'accel'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.2, opacity: 1, }, { x: attacker.x + 339 * xf2[i], y: attacker.y, z: attacker.z + 194 * yf2[i], scale: 0.3, opacity: 0.5, time: 800, }, 'accel'); } }, }, spite: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 1300, 0.3); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 1, scale: 1, }, { x: defender.x, y: defender.y, z: defender.z, scale: 1.2, opacity: 0, time: 400, }, 'decel'); scene.showEffect(defender.sp, { x: defender.x, y: defender.y, z: defender.z, opacity: 1, xscale: 1, time: 200, }, { x: defender.x + 7, y: defender.y, z: defender.z, opacity: 0, xscale: 1.5, time: 800, }, 'accel'); scene.showEffect(defender.sp, { x: defender.x, y: defender.y, z: defender.z, opacity: 1, xscale: 1, time: 700, }, { x: defender.x - 7, y: defender.y, z: defender.z, opacity: 0, xscale: 1.5, time: 1300, }, 'accel'); }, }, lockon: { anim(scene, [attacker, defender]) { scene.showEffect('rightslash', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.5, }, { opacity: 1, time: 400, }, 'linear', 'explode'); scene.showEffect('leftslash', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.5, }, { opacity: 1, time: 400, }, 'linear', 'explode'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, }, { opacity: 0.5, time: 400, }, 'linear', 'explode'); }, }, mindreader: { anim(scene, [attacker, defender]) { scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0, scale: 2, }, { opacity: 1, scale: 0.5, }, 'accel', 'explode'); }, }, memento: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 900, 0.2); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0, }, { y: attacker.y + 600, yscale: 10, opacity: 0.3, time: 400, }, 'accel', 'fade'); scene.showEffect(attacker.sp, { x: defender.x, y: defender.y + 500, z: defender.z, yscale: 10, opacity: 0.3, time: 500, }, { y: defender.y, opacity: 0, yscale: 1, time: 900, }, 'decel', 'fade'); }, }, spiritshackle: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#440044 30%, #000000', 1000, 0.4); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.5, }, { scale: 3, opacity: 0, }, 'linear'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y - 35, z: attacker.z, scale: 0.1, opacity: 0.4, time: 0, }, { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.2, opacity: 0, time: 300, }, 'decel'); scene.showEffect('shadowball', { x: defender.x, y: defender.y + 200, z: defender.behind(-10), opacity: 0.4, xscale: 0.1, yscale: 5, time: 575, }, { y: defender.y + 150, z: defender.behind(-10), opacity: 0, time: 825, }, 'decel'); scene.showEffect('shadowball', { x: defender.x, y: defender.y - 50, z: defender.z, opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 590, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 825, }, 'linear', 'explode'); defender.delay(825); defender.anim({ z: defender.behind(5), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, brutalswing: { anim(scene, [attacker, ...defenders]) { scene.backgroundEffect('#000000', 1300, 0.3); for (const defender of defenders) { defender.delay(700); defender.anim({ z: defender.behind(10), time: 100, }, 'swing'); defender.anim({ time: 200, }, 'swing'); defender.anim({ z: defender.behind(10), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 700, }, { scale: 2, opacity: 0, time: 1000, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.3, scale: 0, time: 900, }, { scale: 2, opacity: 0, time: 1200, }, 'linear'); } const defender = defenders[1] || defenders[0]; attacker.anim({ x: defender.x, y: defender.y + 80, z: defender.behind(-30), time: 400, }, 'ballistic'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-50), time: 100, }); attacker.anim({ time: 500, }, 'ballistic2Back'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y - 50, z: defender.behind(-50), scale: 1, xscale: 5, opacity: 0.8, time: 500, }, { scale: 2, xscale: 8, opacity: 0.1, time: 700, }, 'decel', 'fade'); }, }, revelationdance: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 1300, 0.3); scene.showEffect('electroball', { x: attacker.x + 20, y: attacker.y - 60, z: attacker.behind(15), scale: 1, xscale: 2, opacity: 0.5, time: 150, }, { scale: 1.5, xscale: 4, opacity: 0, }, 'linear', 'fade'); scene.showEffect('electroball', { x: attacker.x - 20, y: attacker.y - 60, z: attacker.behind(15), scale: 1, xscale: 2, opacity: 0.5, time: 500, }, { scale: 1.5, xscale: 4, opacity: 0, }, 'linear', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y - 60, z: attacker.behind(15), scale: 1, xscale: 2, opacity: 0.5, time: 650, }, { scale: 1.5, xscale: 4, opacity: 0, }, 'linear', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-15), scale: 0.7, xscale: 1, opacity: 0.8, time: 900, }, { x: defender.x, y: defender.y, z: defender.behind(5), time: 1100, }, 'linear', 'explode'); scene.showEffect('wisp', { x: defender.x + 30, y: defender.y + 25, z: defender.z, scale: 0.2, opacity: 0.6, time: 1100, }, { x: defender.x + 50, y: defender.y + 10, opacity: 0.3, time: 1400, }, 'accel', 'explode'); scene.showEffect('wisp', { x: defender.x - 30, y: defender.y - 20, z: defender.z, scale: 0.2, opacity: 0.6, time: 1200, }, { x: defender.x - 50, y: defender.y - 20, opacity: 0.3, time: 1400, }, 'accel', 'explode'); scene.showEffect('wisp', { x: defender.x + 15, y: defender.y + 10, z: defender.z, scale: 0.2, opacity: 0.7, time: 1300, }, { x: defender.x + 35, y: defender.y + 30, opacity: 0.3, time: 1500, }, 'accel', 'explode'); scene.showEffect('wisp', { x: defender.x - 15, y: defender.y - 30, z: defender.z, scale: 0.2, opacity: 0.7, time: 1300, }, { x: defender.x - 35, y: defender.y - 40, opacity: 0.3, time: 1500, }, 'accel', 'explode'); attacker.anim({ x: attacker.x + 5, y: attacker.y + 10, time: 100, }, 'ballistic'); attacker.anim({ x: attacker.x + 10, y: attacker.y, time: 50, }); attacker.anim({ x: attacker.x - 5, y: attacker.y + 10, time: 200, }, 'ballistic'); attacker.anim({ x: attacker.x - 10, y: attacker.y, time: 100, }); attacker.anim({ x: attacker.x - 5, y: attacker.y + 10, time: 100, }, 'ballistic'); attacker.anim({ x: attacker.x, y: attacker.y, time: 50, }); attacker.anim({ z: attacker.behind(15), time: 200, }, 'decel'); attacker.anim({ z: attacker.behind(-15), time: 100, }, 'accel'); attacker.anim({ z: attacker.z, time: 300, }, 'swing'); defender.delay(1100); defender.anim({ z: defender.behind(15), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, prismaticlaser: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.y - attacker.y) / 5; let zstep = (defender.z - attacker.z) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('wisp', { x: attacker.x + xstep * (i + 1), y: attacker.y + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1, opacity: 1, time: 20 * i, }, { scale: 2, opacity: 0, time: 40 * i + 600, }, 'linear'); scene.showEffect('purplewisp', { x: attacker.x + xstep * (i + 1), y: attacker.y + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.5, opacity: 0.3, time: 20 * i, }, { scale: 2, opacity: 0, time: 40 * i + 600, }, 'linear'); } scene.backgroundEffect('#000000', 700, 0.6); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.2, time: 200, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.2, time: 275, }, 'linear', 'explode'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.2, time: 350, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.2, time: 425, }, 'linear', 'explode'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.2, time: 500, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.2, time: 575, }, 'linear', 'explode'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 550, }, { scale: 4, opacity: 0, time: 750, }, 'linear'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 600, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, firstimpression: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#987058', 600, 0.3, 400); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 60, z: attacker.z, scale: 0.5, opacity: 1, }, { scale: 0.25, opacity: 0, time: 400, }, 'linear'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 100, z: attacker.z, scale: 0.5, xscale: 0.25, yscale: 0.75, opacity: 1, }, { scale: 0.25, opacity: 0, time: 400, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y + 60, z: defender.z, scale: 0.5, opacity: 1, }, { scale: 0.25, opacity: 0, time: 400, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y + 100, z: defender.z, scale: 0.5, xscale: 0.25, yscale: 0.75, opacity: 1, }, { scale: 0.25, opacity: 0, time: 400, }, 'linear'); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 500, }, { scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 700, }, { scale: 3, opacity: 0, time: 1000, }, 'linear'); attacker.anim({ y: attacker.y + 5, xscale: 0.9, yscale: 1.1, time: 100, }, 'swing'); attacker.anim({ time: 100, }, 'swing'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.anim({ y: defender.y + 5, xscale: 0.9, yscale: 1.1, time: 100, }, 'swing'); defender.anim({ time: 100, }, 'swing'); defender.delay(280); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, shoreup: { anim: BattleOtherAnims.lightstatus.anim, }, firelash: { anim(scene, [attacker, defender]) { scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 450, }, { x: defender.x, y: defender.y - 40, z: defender.behind(15), scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 550, }, { x: defender.x, y: defender.y - 40, z: defender.behind(15), scale: 3, opacity: 0, time: 900, }, 'linear'); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, powertrip: { anim(scene, [attacker, defender]) { scene.showEffect('purplewisp', { x: attacker.x + 30, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.4, time: 100, }, { y: attacker.y + 60, opacity: 0.2, time: 500, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: attacker.x - 30, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.4, time: 200, }, { y: defender.y + 60, opacity: 0.2, time: 600, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: attacker.x + 15, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.4, time: 300, }, { y: attacker.y + 60, opacity: 0.2, time: 700, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: attacker.x - 15, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.4, time: 400, }, { y: attacker.y + 60, opacity: 0.2, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y + 20, z: attacker.z, scale: 0.5, opacity: 0.1, time: 500, }, { x: attacker.leftof(-30), y: attacker.y + 20, z: attacker.behind(-50), scale: 1, opacity: 0.3, time: 800, }, 'ballistic2Under', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 1250, }, { x: defender.leftof(-20), y: defender.y, z: defender.behind(30), scale: 1.5, opacity: 0, time: 1450, }, 'linear'); attacker.anim({ y: attacker.y + 5, xscale: 0.9, yscale: 1.1, time: 100, }, 'swing'); attacker.anim({ time: 100, }, 'swing'); attacker.anim({ y: attacker.y + 5, xscale: 0.9, yscale: 1.1, time: 100, }, 'swing'); attacker.anim({ time: 100, }, 'swing'); attacker.anim({ y: attacker.y + 5, xscale: 0.9, yscale: 1.1, time: 100, }, 'swing'); attacker.anim({ time: 100, }, 'swing'); attacker.delay(200); attacker.anim({ x: defender.x, y: defender.y + 80, z: defender.behind(-30), time: 400, }, 'ballistic'); attacker.anim({ x: defender.x, y: defender.y + 5, z: defender.z, time: 100, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(1250); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, smartstrike: { anim(scene, [attacker, defender]) { scene.showEffect('rightslash', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.5, }, { opacity: 1, time: 400, }, 'linear', 'explode'); scene.showEffect('leftslash', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 0.5, }, { opacity: 1, time: 400, }, 'linear', 'explode'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 1, opacity: 1, }, { opacity: 0.5, time: 400, }, 'linear', 'explode'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 860, }, { scale: 2, opacity: 0, time: 1160, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 910, }, { scale: 2, opacity: 0, time: 1210, }, 'linear'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 550, }, { x: defender.x, y: defender.y, z: defender.behind(70), time: 850, }, 'accel', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 600, }, { x: defender.x, y: defender.y, z: defender.behind(70), time: 900, }, 'accel', 'fade'); attacker.delay(500); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(70), time: 300, opacity: 0.5, }, 'accel'); attacker.anim({ x: defender.x, y: defender.x, z: defender.behind(100), opacity: 0, time: 100, }, 'linear'); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.behind(70), opacity: 0, time: 1, }, 'linear'); attacker.anim({ opacity: 1, time: 500, }, 'decel'); defender.delay(760); defender.anim({ z: defender.behind(30), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, spotlight: { anim(scene, [attacker, defender]) { BattleOtherAnims.dance.anim(scene, [attacker]); scene.showEffect('pointer', { x: attacker.x + 50, y: attacker.y + 30, z: attacker.z, scale: 0.4, opacity: 1, }, { x: attacker.x + 30, y: attacker.y + 35, scale: 0.5, xscale: 0.3, yscale: 0.6, opacity: 1, time: 400, }, 'decel', 'fade'); scene.showEffect('pointer', { x: attacker.x + 30, y: attacker.y + 35, z: attacker.z, scale: 0.5, xscale: 0.3, yscale: 0.6, opacity: 1, time: 400, }, { x: attacker.x + 60, y: attacker.y + 30, scale: 0.4, xscale: 0.4, yscale: 0.4, opacity: 0, time: 900, }, 'linear'); defender.delay(400); defender.anim({ y: defender.y + 15, time: 150, }, 'decel'); defender.anim({ time: 150, }, 'accel'); defender.anim({ y: defender.y + 15, time: 150, }, 'decel'); defender.anim({ time: 150, }, 'accel'); }, }, anchorshot: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.y - attacker.y) / 5; let zstep = (defender.z - attacker.z) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('energyball', { x: attacker.x + xstep * (i + 1), y: attacker.y + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.5, opacity: 1, time: 20 * i, }, { opacity: 0, time: 40 * i + 600, }, 'linear'); } scene.showEffect('energyball', { x: defender.x, y: defender.y + 15, z: defender.z, scale: 0.7, xscale: 2, opacity: 0.3, time: 300, }, { scale: 0.4, xscale: 1, opacity: 0.1, time: 900, }, 'decel', 'fade'); scene.showEffect('energyball', { x: defender.x, y: defender.y - 5, z: defender.z, scale: 0.7, xscale: 2, opacity: 0.3, time: 350, }, { scale: 0.4, xscale: 1, opacity: 0.1, time: 950, }, 'decel', 'fade'); scene.showEffect('energyball', { x: defender.x, y: defender.y - 20, z: defender.z, scale: 0.7, xscale: 2, opacity: 0.3, time: 400, }, { scale: 0.4, xscale: 1, opacity: 0.1, time: 1000, }, 'decel', 'fade'); defender.delay(300); defender.anim({ y: defender.y + 15, z: defender.behind(10), yscale: 1.3, time: 200, }, 'swing'); defender.anim({ time: 200, }, 'swing'); defender.delay(25); defender.anim({ x: defender.leftof(-10), y: defender.y + 15, z: defender.behind(5), yscale: 1.3, time: 200, }, 'swing'); defender.anim({ time: 200, }, 'swing'); }, }, clangingscales: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#440044', 700, 0.2); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.behind(-5), scale: 1, opacity: 0.5, }, { z: attacker.behind(-10), scale: 6, opacity: 0, }, 'linear'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 200, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 275, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 350, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 425, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 500, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.4, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 575, }, 'linear', 'explode'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 550, }, { scale: 4, opacity: 0, time: 750, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 600, }, { scale: 4, opacity: 0, time: 800, }, 'linear'); defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, spectralthief: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#000000 30%, #440044', 1700, 0.5); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y - 30, z: attacker.z, scale: 0.5, xscale: 0.5, yscale: 1, opacity: 0.5, }, { scale: 2, xscale: 4, opacity: 0.1, time: 400, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y - 25, z: attacker.z, scale: 1, }, { x: attacker.x + 50, scale: 3, xscale: 3.5, opacity: 0.5, time: 500, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y - 25, z: attacker.z, scale: 1, }, { x: attacker.x - 50, scale: 3, xscale: 3.5, opacity: 0.5, time: 500, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: attacker.x - 50, y: attacker.y - 40, z: attacker.z, scale: 2, opacity: 0.3, time: 300, }, { x: defender.x - 50, y: defender.y - 40, z: defender.z, time: 900, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x - 50, y: attacker.y - 40, z: attacker.z, scale: 2, opacity: 0.3, time: 400, }, { x: defender.x - 50, y: defender.y - 40, z: defender.z, time: 900, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y - 40, z: attacker.z, scale: 2, opacity: 0.3, time: 450, }, { x: defender.x, y: defender.y - 40, z: defender.z, time: 925, }, 'decel', 'fade'); scene.showEffect('shadowball', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 0, xscale: 0.5, yscale: 1, opacity: 0.5, time: 750, }, { scale: 2, xscale: 4, opacity: 0.1, time: 1200, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y - 25, z: defender.z, scale: 2, opacity: 0.3, time: 750, }, { x: defender.x + 75, opacity: 1, scale: 3, time: 1200, }, 'linear', 'explode'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y - 25, z: defender.z, scale: 2, opacity: 0.3, time: 750, }, { x: defender.x - 75, opacity: 1, scale: 3, time: 1200, }, 'linear', 'explode'); scene.showEffect(attacker.sp, { x: defender.x, y: defender.y, z: defender.z, scale: 3, opacity: 0.3, time: 700, }, { y: defender.y + 600, yscale: 10, time: 1200, }, 'linear', 'fade'); scene.showEffect(attacker.sp, { x: defender.x + 30, y: defender.y, z: defender.z, scale: 3, opacity: 0.3, time: 800, }, { y: defender.y + 600, yscale: 10, time: 1300, }, 'linear', 'fade'); scene.showEffect(attacker.sp, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 3, opacity: 0.3, time: 900, }, { y: defender.y + 600, yscale: 10, time: 1400, }, 'linear', 'fade'); scene.showEffect(attacker.sp, { x: defender.x - 15, y: defender.y, z: defender.z, scale: 3, opacity: 0.3, time: 1000, }, { y: defender.y + 600, yscale: 10, time: 1500, }, 'linear', 'fade'); scene.showEffect(attacker.sp, { x: defender.x - 15, y: defender.y, z: defender.z, scale: 3, opacity: 0.3, time: 1100, }, { y: defender.y + 600, yscale: 10, time: 1600, }, 'linear', 'fade'); scene.showEffect('impact', { x: defender.x - 25, y: defender.y, z: defender.behind(5), scale: 0.6, opacity: 0.5, time: 700, }, { scale: 1, opacity: 0, time: 900, }, 'linear'); scene.showEffect('impact', { x: defender.x + 25, y: defender.y - 5, z: defender.behind(5), scale: 0.6, opacity: 0.5, time: 800, }, { scale: 1, opacity: 0, time: 1000, }, 'linear'); scene.showEffect('impact', { x: defender.x - 25, y: defender.y + 10, z: defender.behind(5), scale: 0.6, opacity: 0.5, time: 900, }, { scale: 1, opacity: 0, time: 1100, }, 'linear'); scene.showEffect('impact', { x: defender.x + 2, y: defender.y + 5, z: defender.behind(5), scale: 0.6, opacity: 0.5, time: 1000, }, { scale: 1, opacity: 0, time: 1200, }, 'linear'); scene.showEffect('impact', { x: defender.x - 20, y: defender.y - 5, z: defender.behind(5), scale: 0.6, opacity: 0.2, time: 1100, }, { scale: 1, opacity: 0, time: 1300, }, 'linear'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y - 30, z: attacker.z, scale: 1, time: 1700, }, { x: attacker.x + 70, scale: 0.8, opacity: 0, time: 2200, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y - 30, z: attacker.z, scale: 1, time: 1700, }, { x: attacker.x - 70, scale: 0.8, opacity: 0, time: 2200, }, 'linear', 'fade'); attacker.anim({ opacity: 0, y: attacker.y - 40, time: 200, }, 'swing'); attacker.delay(1200); attacker.anim({ opacity: 0, y: attacker.y + 60, time: 1, }); attacker.anim({ time: 200, }, 'swing'); defender.delay(725); defender.anim({ x: defender.x - 30, time: 75, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x - 30, time: 100, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x - 30, time: 100, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x, time: 100, }); }, }, plasmafists: { anim(scene, [attacker, defender]) { scene.backgroundEffect(`url('https://${Config.routes.client}/sprites/gen6bgs/bg-earthycave.jpg')`, 2000, 1); scene.backgroundEffect('#000000', 1000, 0.6); scene.backgroundEffect('#FFFFFF', 300, 0.6, 1000); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.5, opacity: 0.1, time: 0, }, { scale: 0.5, opacity: 0.5, time: 200, }, 'linear', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.7, time: 100, }, { scale: 1, opacity: 0, time: 300, }, 'linear'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.5, opacity: 0.1, time: 200, }, { scale: 0.5, opacity: 0.5, time: 400, }, 'linear', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.7, time: 300, }, { scale: 1, opacity: 0, time: 500, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y - 30, z: defender.behind(-75), scale: 0.5, xscale: 0.25, yscale: 0.75, opacity: 0.5, time: 900, }, { scale: 2, xscale: 3.5, opacity: 0.1, }, 'decel', 'fade'); scene.showEffect('fist1', { x: defender.x - 10, y: defender.y + 80, z: defender.behind(-70), scale: 0.8, opacity: 0.8, time: 800, }, { y: defender.y - 15, z: defender.behind(-65), scale: 1, opacity: 1, time: 900, }, 'accel', 'explode'); scene.showEffect('fist1', { x: defender.x + 10, y: defender.y + 80, z: defender.behind(-70), scale: 0.8, opacity: 0.8, time: 800, }, { y: defender.y - 15, z: defender.behind(-65), scale: 1, opacity: 1, time: 900, }, 'accel', 'explode'); scene.showEffect('lightning', { x: defender.x - 20, y: defender.y, z: defender.behind(-75), yscale: 0, xscale: 2, time: 900, }, { x: defender.x, y: defender.y + 15, z: defender.behind(30), scale: 2, yscale: 1, xscale: 1.5, opacity: 1, time: 1200, }, 'ballistic2Under', 'explode'); scene.showEffect('lightning', { x: defender.x + 20, y: defender.y, z: defender.behind(-75), yscale: 0, xscale: 2, time: 1000, }, { x: defender.x, y: defender.y + 15, z: defender.behind(30), scale: 2, yscale: 1, xscale: 1.5, opacity: 1, time: 1300, }, 'linear', 'explode'); scene.showEffect('lightning', { x: defender.x - 20, y: defender.y, z: defender.behind(-75), yscale: 0, xscale: 2, time: 1100, }, { x: defender.x, y: defender.y + 15, z: defender.behind(30), scale: 2, yscale: 1, xscale: 1.5, opacity: 1, time: 1400, }, 'ballistic2Under', 'explode'); scene.showEffect('lightning', { x: defender.x + 20, y: defender.y, z: defender.behind(-75), yscale: 0, xscale: 2, time: 1200, }, { x: defender.x, y: defender.y + 15, z: defender.behind(30), scale: 2, yscale: 1, xscale: 1.5, opacity: 1, time: 1500, }, 'linear', 'explode'); scene.showEffect('electroball', { x: defender.x - 10, y: defender.y, z: defender.z, scale: 0, opacity: 0.75, time: 1050, }, { scale: 2.5, opacity: 0, time: 1400, }, 'linear'); scene.showEffect('electroball', { x: defender.x + 10, y: defender.y, z: defender.z, scale: 0, opacity: 0.75, time: 1250, }, { scale: 2.5, opacity: 0, time: 1600, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.75, time: 1450, }, { scale: 2.5, opacity: 0, time: 1800, }, 'linear'); attacker.delay(400); attacker.anim({ x: defender.x, y: defender.y + 80, z: defender.behind(-125), time: 400, }, 'ballistic'); attacker.anim({ x: defender.x, y: defender.y + 5, z: defender.behind(-75), time: 100, }); attacker.anim({ time: 600, }, 'ballistic2Back'); defender.delay(1000); defender.anim({ x: defender.x - 12.5, time: 75, }); defender.anim({ x: defender.x + 12.5, time: 100, }); defender.anim({ x: defender.x - 12.5, time: 100, }); defender.anim({ x: defender.x + 12.5, time: 100, }); defender.anim({ x: defender.x - 12.5, time: 100, }); defender.anim({ x: defender.x, time: 100, }); }, }, collisioncourse: { anim(scene, [attacker, defender]) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/weather-sunnyday.jpg')`, 1300, 0.5); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 25, }, { y: attacker.y + 150, opacity: 0, time: 325, }, 'decel'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y + 150, z: attacker.z, opacity: 0.3, time: 625, }, { x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 0, time: 825, }, 'decel'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 150, z: attacker.z, scale: 1, opacity: 0.6, time: 600, }, { x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 0.3, time: 800, }, 'accel', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 150, z: attacker.behind(-50), scale: 1, opacity: 0.5, time: 600, }, { x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 0.6, time: 800, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 1, time: 850, }, { scale: 2, xscale: 12, opacity: 0, time: 1250, }, 'linear', 'fade'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.7, scale: 1, time: 850, }, { scale: 6, opacity: 0, time: 1400, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y + 350, z: defender.z, opacity: 1, scale: 3, yscale: 10, time: 850, }, { xscale: 0, time: 1500, }, 'accel', 'fade'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 3, time: 850, }, { scale: 9, time: 1400, }, 'linear', 'explode'); attacker.anim({ x: attacker.x, y: attacker.y + 250, z: attacker.z, time: 300, }, 'decel'); attacker.delay(300); attacker.anim({ x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 1, time: 200, }, 'ballistic2Under'); attacker.delay(50); attacker.anim({ opacity: 0, time: 1, }); attacker.delay(700); attacker.anim({ opacity: 1, time: 200, }); defender.delay(650); defender.anim({ y: defender.y - 10, z: defender.behind(5), time: 50, }, 'swing'); defender.anim({ y: defender.y - 20, z: defender.behind(20), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, electrodrift: { anim(scene, [attacker, defender]) { scene.backgroundEffect(`url('https://${Config.routes.client}/fx/weather-electricterrain.png')`, 1300, 0.5); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 25, }, { y: attacker.y + 150, opacity: 0, time: 325, }, 'decel'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y + 150, z: attacker.z, opacity: 0.3, time: 625, }, { x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 0, time: 825, }, 'decel'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y + 150, z: attacker.z, scale: 1, opacity: 0.6, time: 600, }, { x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 0.3, time: 800, }, 'accel', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y + 150, z: attacker.behind(-50), scale: 1, opacity: 0.5, time: 600, }, { x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 0.6, time: 800, }, 'accel', 'explode'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 1, time: 850, }, { scale: 2, xscale: 12, opacity: 0, time: 1250, }, 'linear', 'fade'); scene.showEffect('lightning', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 1, time: 850, }, { scale: 2, xscale: 12, opacity: 0, time: 1250, }, 'linear', 'fade'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.7, scale: 1, time: 850, }, { scale: 6, opacity: 0, time: 1400, }, 'linear'); scene.showEffect('lightning', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.7, scale: 1, time: 850, }, { scale: 6, opacity: 0, time: 1400, }, 'linear'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y + 350, z: defender.z, opacity: 1, scale: 3, yscale: 10, time: 850, }, { xscale: 0, time: 1500, }, 'accel', 'fade'); scene.showEffect('lightning', { x: defender.x, y: defender.y + 350, z: defender.z, opacity: 1, scale: 3, yscale: 10, time: 850, }, { xscale: 0, time: 1500, }, 'accel', 'fade'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 3, time: 850, }, { scale: 9, time: 1400, }, 'linear', 'explode'); scene.showEffect('lightning', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 3, time: 850, }, { scale: 9, time: 1400, }, 'linear', 'explode'); attacker.anim({ x: attacker.x, y: attacker.y + 250, z: attacker.z, time: 300, }, 'decel'); attacker.delay(300); attacker.anim({ x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 1, time: 200, }, 'ballistic2Under'); attacker.delay(50); attacker.anim({ opacity: 0, time: 1, }); attacker.delay(700); attacker.anim({ opacity: 1, time: 200, }); defender.delay(650); defender.anim({ y: defender.y - 10, z: defender.behind(5), time: 50, }, 'swing'); defender.anim({ y: defender.y - 20, z: defender.behind(20), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, sunsteelstrike: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.x - 200 - attacker.x) / 5; let zstep = (defender.z - attacker.z) / 5; scene.backgroundEffect('linear-gradient(#390000 30%, #B84038)', 500, 0.6); scene.backgroundEffect('linear-gradient(#FFFFFF 30%, #B84038)', 1200, 0.6, 500); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 2.5, opacity: 1, time: 500, }, { scale: 3, opacity: 0, time: 1200, }, 'decel'); for (let i = 0; i < 5; i++) { scene.showEffect('flareball', { x: attacker.x + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 2, opacity: 0.4, time: 40 * i + 700, }, { scale: 1.5, opacity: 0, time: 60 * i + 1500, }, 'linear'); } scene.showEffect('flareball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 1, xscale: 3, opacity: 0.5, time: 1075, }, { scale: 3, xscale: 8, opacity: 0.1, time: 1675, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.behind(5), scale: 0, opacity: 1, time: 1075, }, { scale: 8, opacity: 0, time: 1375, }, 'linear'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.behind(10), scale: 0, opacity: 1, time: 1175, }, { scale: 8, opacity: 0, time: 1575, }, 'linear'); attacker.anim({ y: defender.y + 120, opacity: 0, time: 300, }, 'accel'); attacker.delay(425); attacker.anim({ y: defender.y + 200, opacity: 1, time: 1, }, 'accel'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 1, time: 350, }, 'accel'); attacker.anim({ x: defender.leftof(50), y: defender.y - 20, z: defender.z, opacity: 0, time: 75, }); attacker.delay(300); attacker.anim({ x: attacker.x, y: attacker.y + 40, z: attacker.behind(40), time: 1, }); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.z, time: 250, }, 'decel'); defender.delay(1075); defender.anim({ z: defender.behind(30), time: 400, }, 'decel'); defender.anim({ time: 300, }, 'swing'); }, }, moongeistbeam: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.x - 200 - attacker.x) / 5; let zstep = (defender.z - attacker.z) / 5; scene.backgroundEffect('#000000', 600, 0.6); scene.backgroundEffect('linear-gradient(#000000 10%, #2630A9)', 1100, 0.6, 600); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 2.5, opacity: 1, time: 500, }, { scale: 3, opacity: 0, time: 1300, }, 'decel'); for (let i = 0; i < 5; i++) { scene.showEffect('wisp', { x: attacker.x + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 2.5, opacity: 1, time: 40 * i + 700, }, { scale: 2, opacity: 0, time: 60 * i + 1500, }, 'linear'); } scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 800, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 1000, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 875, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 1075, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 950, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 1150, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 1025, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 1225, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 1100, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 1300, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 1175, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 1375, }, 'linear', 'explode'); scene.showEffect('iceball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 1, xscale: 3, opacity: 0.5, time: 1375, }, { scale: 3, xscale: 8, opacity: 0.1, time: 1675, }, 'linear', 'explode'); scene.showEffect('bluefireball', { x: defender.x, y: defender.y, z: defender.behind(5), scale: 0, opacity: 1, time: 1175, }, { scale: 8, opacity: 0, time: 1375, }, 'linear'); scene.showEffect('bluefireball', { x: defender.x, y: defender.y, z: defender.behind(10), scale: 0, opacity: 1, time: 1275, }, { scale: 8, opacity: 0, time: 1675, }, 'linear'); attacker.anim({ y: defender.y + 120, opacity: 0, time: 300, }, 'accel'); attacker.delay(1150); attacker.anim({ x: attacker.x, y: attacker.y + 40, z: attacker.behind(40), time: 1, }); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.z, time: 250, }, 'decel'); defender.delay(775); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(10), time: 300, }, 'decel'); defender.anim({ time: 300, }, 'swing'); }, }, astralbarrage: { anim(scene, [attacker, ...defenders]) { scene.backgroundEffect('#000000', 600, 0.6); scene.backgroundEffect('linear-gradient(#000000 10%, #2630A9)', 1100, 0.6, 600); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 2.5, opacity: 1, time: 500, }, { scale: 3, opacity: 0, time: 1300, }, 'decel'); const d = defenders[1] || defenders[0]; attacker.anim({ y: d.y + 120, opacity: 0, time: 300, }, 'accel'); attacker.delay(1150); attacker.anim({ x: attacker.x, y: attacker.y + 40, z: attacker.behind(40), time: 1, }); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.z, time: 250, }, 'decel'); for (const defender of defenders) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.x - 200 - attacker.x) / 5; let zstep = (defender.z - attacker.z) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('wisp', { x: attacker.x + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 2.5, opacity: 1, time: 40 * i + 700, }, { scale: 2, opacity: 0, time: 60 * i + 1500, }, 'linear'); } scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 800, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 1000, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 875, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 1075, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 950, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 1150, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 1025, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 1225, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 1100, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 1300, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 1175, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 1375, }, 'linear', 'explode'); scene.showEffect('iceball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 1, xscale: 3, opacity: 0.5, time: 1375, }, { scale: 3, xscale: 8, opacity: 0.1, time: 1675, }, 'linear', 'explode'); scene.showEffect('bluefireball', { x: defender.x, y: defender.y, z: defender.behind(5), scale: 0, opacity: 1, time: 1175, }, { scale: 8, opacity: 0, time: 1375, }, 'linear'); scene.showEffect('bluefireball', { x: defender.x, y: defender.y, z: defender.behind(10), scale: 0, opacity: 1, time: 1275, }, { scale: 8, opacity: 0, time: 1675, }, 'linear'); defender.delay(775); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(10), time: 300, }, 'decel'); defender.anim({ time: 300, }, 'swing'); } }, }, photongeyser: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 1000, 0.5); scene.backgroundEffect('#FFFFFF', 600, 0.8, 2100); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0, opacity: 1, time: 0, }, { scale: 0.6, time: 400, }, 'decel', 'fade'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0, opacity: 1, time: 200, }, { scale: 0.8, time: 600, }, 'decel', 'fade'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0, opacity: 1, time: 400, }, { scale: 1, time: 800, }, 'decel', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0, opacity: 0.5, time: 0, }, { scale: 0.8, time: 800, }, 'linear', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0.3, opacity: 1, time: 800, }, { scale: 1.2, time: 1300, }, 'linear', 'fade'); scene.showEffect('energyball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0.3, opacity: 0.3, time: 800, }, { scale: 1.2, time: 1300, }, 'linear', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 1.2, opacity: 0.8, time: 1300, }, { x: defender.x, y: defender.y, z: defender.z, time: 1500, }, 'linear', 'explode'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 1.2, opacity: 0.3, time: 1300, }, { x: defender.x, y: defender.y, z: defender.z, time: 1500, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 0.2, opacity: 1, time: 0, }, { scale: 0.5, time: 1200, }, 'decel', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 2, opacity: 1, time: 900, }, { time: 1200, }, 'decel', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.behind(-20), scale: 2, opacity: 1, time: 1300, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2.5, time: 1500, }, 'linear', 'explode'); scene.showEffect('electroball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 0, xscale: 0, opacity: 0.5, time: 1500, }, { scale: 2, xscale: 12, opacity: 0, time: 2500, }, 'accel'); scene.showEffect('wisp', { x: defender.x, y: defender.y + 350, z: defender.z, opacity: 1, scale: 8, xscale: 0, yscale: 13, time: 1500, }, { xscale: 4, time: 2500, }, 'accel', 'explode'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, opacity: 1, scale: 2, time: 1500, }, { scale: 6, time: 2500, }, 'decel', 'explode'); defender.delay(1500); defender.anim({ z: defender.behind(10), opacity: 0, time: 200, }, 'swing'); defender.delay(700); defender.anim({ time: 300, }, 'swing'); }, }, coreenforcer: { anim(scene, [attacker, ...defenders]) { scene.backgroundEffect('#082179', 1600, 0.5, 300); scene.backgroundEffect('linear-gradient(#46AF71 20%, #1170F0)', 1600, 0.4, 300); for (const defender of defenders) { defender.delay(2075); defender.anim({ x: defender.x - 30, time: 75, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x - 30, time: 100, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x - 30, time: 100, }); defender.anim({ x: defender.x + 30, time: 100, }); defender.anim({ x: defender.x, time: 100, }); } const defender = defenders[1] || defenders[0]; attacker.anim({ y: defender.y + 120, opacity: 0, time: 300, }, 'accel'); attacker.delay(1525); attacker.anim({ x: attacker.x, y: attacker.y + 40, z: attacker.behind(40), time: 1, }); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.z, time: 250, }, 'decel'); attacker.delay(600); let xstep = (defender.x - defender.leftof(-25)) / 5; let ystep = (defender.y - 225 - attacker.y) / 5; let zstep = (defender.z - attacker.z) / 5; for (let i = 0; i < 6; i++) { scene.showEffect('wisp', { x: attacker.leftof(50) + xstep * (i + 1), y: (attacker.y + 300) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1.3, opacity: 1, time: 5 * i + 700, }, { x: defender.leftof(50) + xstep * (i + 1), opacity: 0, time: 100 * i + 800, }, 'linear'); } xstep = (defender.x - defender.leftof(25)) / 5; ystep = (defender.y - 250 - attacker.y) / 5; zstep = (defender.behind(-100) - attacker.z) / 5; for (let i = 0; i < 6; i++) { scene.showEffect('wisp', { x: attacker.leftof(-50) + xstep * (i + 1), y: (attacker.y + 275) + ystep * (i + 1), z: attacker.behind(-150) + zstep * (i + 1), scale: 1.3, opacity: 1, time: 5 * i + 900, }, { x: defender.leftof(-50) + xstep * (i + 1), z: attacker.z + zstep * (i + 1), opacity: 0, time: 100 * i + 1000, }, 'linear'); } xstep = (defender.x - defender.leftof(-15)) / 5; ystep = (defender.y - 275 - attacker.y - 25) / 5; zstep = (defender.z - attacker.z) / 5; for (let i = 0; i < 6; i++) { scene.showEffect('wisp', { x: attacker.leftof(50) + xstep * (i + 1), y: (attacker.y + 275) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1.3, opacity: 1, time: 5 * i + 1100, }, { x: defender.leftof(50) + xstep * (i + 1), opacity: 0, time: 100 * i + 1200, }, 'linear'); } scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 1100, }, { x: defender.x + 60, y: defender.y + 30, z: defender.behind(20), scale: 1, opacity: 0.6, time: 1300, }, 'linear', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 1, time: 1175, }, { x: defender.x - 10, y: defender.y - 30, z: defender.behind(20), scale: 1, opacity: 0.6, time: 1375, }, 'linear', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 1, time: 1225, }, { x: defender.x + 20, y: defender.y + 10, z: defender.behind(10), scale: 1, opacity: 1, time: 1425, }, 'linear', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 1, time: 1250, }, { x: defender.x - 30, y: defender.y, z: defender.behind(-10), scale: 1, opacity: 0.6, time: 1450, }, 'linear', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 1, time: 1325, }, { x: defender.x - 50, y: defender.y + 10, z: defender.behind(-20), scale: 1, opacity: 1, time: 1525, }, 'linear', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 1, time: 1350, }, { x: defender.x - 30, y: defender.y, z: defender.behind(-25), scale: 1, opacity: 0.6, time: 1550, }, 'linear', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 1.4, time: 1400, }, { x: defender.x - 60, y: defender.y - 10, z: defender.behind(-40), scale: 1, opacity: 1, time: 1600, }, 'linear', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 1.4, time: 1475, }, { x: defender.x - 30, y: defender.y, z: defender.behind(-30), scale: 1, opacity: 0.6, time: 1675, }, 'linear', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 1, time: 1525, }, { x: defender.x + 40, y: defender.y + 10, z: defender.behind(-40), scale: 1, opacity: 1, time: 1725, }, 'linear', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 1, time: 1550, }, { x: defender.x + 80, y: defender.y, z: defender.behind(-50), scale: 1, opacity: 0.6, time: 1750, }, 'linear', 'fade'); scene.backgroundEffect('#ffffff', 800, 0.8, 2000); scene.showEffect('fireball', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, time: 2000, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('fireball', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 0.6, time: 2150, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('fireball', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 0.6, time: 2300, }, { scale: 6, opacity: 0, }, 'linear'); }, }, // z-move animations gigavolthavoc: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 800, 0.7); scene.backgroundEffect('#ffffff', 200, 0.7, 700); scene.backgroundEffect('#000000', 800, 0.7, 900); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 8, opacity: 0, time: 0, }, { scale: 0, opacity: 0.5, time: 300, }, 'linear', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 8, opacity: 0, time: 150, }, { scale: 0, opacity: 0.5, time: 500, }, 'linear', 'fade'); scene.showEffect('lightning', { x: attacker.x - 10, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 200, }, { scale: 3, opacity: 0, time: 400, }, 'decel'); scene.showEffect('lightning', { x: attacker.x + 10, y: attacker.y, z: attacker.z, scale: 0, opacity: 1, time: 350, }, { scale: 3, opacity: 0, time: 550, }, 'decel'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.8, opacity: 0.8, time: 600, }, { x: defender.x, y: defender.y, z: defender.behind(20), scale: 1.2, opacity: 0.8, time: 800, }, 'linear', 'explode'); scene.showEffect('electroball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 1, time: 850, }, { scale: 2, xscale: 12, opacity: 0, time: 1250, }, 'linear', 'fade'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.7, scale: 1, time: 850, }, { scale: 6, opacity: 0, time: 1400, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y + 350, z: defender.z, opacity: 1, scale: 3, yscale: 10, time: 850, }, { xscale: 0, opacity: 0.5, time: 1200, }, 'accel', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 3, time: 850, }, { scale: 9, time: 1400, }, 'linear', 'explode'); scene.showEffect('lightning', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, time: 800, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('lightning', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 0.6, time: 950, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('lightning', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 0.6, time: 1100, }, { scale: 6, opacity: 0, }, 'linear'); defender.delay(825); defender.anim({ z: defender.behind(20), opacity: 0.5, time: 400, }, 'swing'); defender.anim({ time: 400, }, 'swing'); }, }, infernooverdrive: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#421800 40%, #B8652F)', 800, 0.7); scene.backgroundEffect('#ffffff', 200, 0.7, 700); scene.backgroundEffect('#000000', 800, 0.7, 900); scene.showEffect('fireball', { x: attacker.x, y: attacker.y + 20, z: attacker.behind(-30), scale: 1, opacity: 0.3, }, { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.6, opacity: 1, time: 100, }, 'accel', 'fade'); scene.showEffect('fireball', { x: attacker.x + 20, y: attacker.y, z: attacker.behind(-30), scale: 1, opacity: 0.3, time: 100, }, { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.6, opacity: 1, time: 200, }, 'accel', 'fade'); scene.showEffect('fireball', { x: attacker.x, y: attacker.y - 20, z: attacker.behind(-30), scale: 1, opacity: 0.3, time: 200, }, { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.6, opacity: 1, time: 300, }, 'accel', 'fade'); scene.showEffect('fireball', { x: attacker.x - 20, y: attacker.y, z: attacker.behind(-30), scale: 1, opacity: 0.3, time: 300, }, { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.6, opacity: 1, time: 400, }, 'accel', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 3, opacity: 0.3, }, { scale: 0.6, opacity: 1, time: 300, }, 'decel', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 3, opacity: 0.3, time: 100, }, { scale: 0.8, opacity: 0.6, time: 400, }, 'decel', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.6, opacity: 0.8, time: 400, }, { x: defender.x, y: defender.y, z: defender.behind(20), scale: 5, opacity: 0.8, time: 800, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 0.5, time: 900, }, { scale: 3, xscale: 8, opacity: 0.1, time: 1300, }, 'linear', 'fade'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 1, time: 900, }, { scale: 6, opacity: 0, time: 1100, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 1, time: 1000, }, { scale: 6, opacity: 0, time: 1300, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 5, time: 800, }, { scale: 12, opacity: 0.5, time: 1500, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, time: 800, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('fireball', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 0.6, time: 950, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('fireball', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 0.6, time: 1100, }, { scale: 6, opacity: 0, }, 'linear'); defender.delay(825); defender.anim({ z: defender.behind(20), time: 300, }, 'swing'); defender.anim({ time: 400, }, 'swing'); }, }, alloutpummeling: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#390000 30%, #B84038)', 2000, 0.8); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('fist', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 1, opacity: 1, time: 200, }, 'ballistic', 'explode'); scene.showEffect('fist', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 75, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 1, opacity: 1, time: 275, }, 'ballistic2', 'explode'); scene.showEffect('fist', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 150, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 350, }, 'ballistic2Under', 'explode'); scene.showEffect('fist', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 225, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 1, opacity: 1, time: 425, }, 'ballistic', 'explode'); scene.showEffect('fist', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 300, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 1, opacity: 1, time: 500, }, 'ballistic2', 'explode'); scene.showEffect('fist', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.6, opacity: 0.6, time: 375, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 1, opacity: 1, time: 575, }, 'ballistic2Under', 'explode'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-5), scale: 1.5, opacity: 0, time: 800, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 1, time: 1150, }, 'accel', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 1, time: 800, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 1100, }, 'accel', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 1, time: 800, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 1125, }, 'accel', 'fade'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 1, time: 800, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 1150, }, 'accel', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 2, opacity: 0.8, time: 1150, }, { scale: 1, xscale: 12, opacity: 0, time: 1450, }, 'decel', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y - 30, z: defender.z, opacity: 0.7, scale: 0.5, time: 1150, }, { scale: 3, opacity: 0, time: 1650, }, 'decel'); scene.showEffect('flareball', { x: defender.x, y: defender.y - 30, z: defender.z, opacity: 1, scale: 0.5, time: 1150, }, { scale: 6, opacity: 0, time: 1650, }, 'decel'); scene.showEffect('wisp', { x: defender.x, y: defender.y + 350, z: defender.z, opacity: 1, scale: 5, yscale: 13, time: 1150, }, { opacity: 0.5, xscale: 0, time: 2000, }, 'accel', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y - 30, z: defender.z, opacity: 1, scale: 2, time: 1150, }, { opacity: 0.5, scale: 6, time: 2000, }, 'decel', 'explode'); attacker.delay(600); attacker.anim({ z: attacker.behind(15), time: 200, }, 'decel'); attacker.anim({ z: defender.behind(-170), opacity: 0, time: 100, }, 'accel'); attacker.delay(1000); attacker.anim({ z: attacker.behind(70), opacity: 0, time: 1, }, 'linear'); attacker.anim({ z: attacker.z, time: 300, }, 'swing'); defender.delay(200); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.delay(300); defender.anim({ z: defender.behind(5), opacity: 0, time: 75, }, 'swing'); defender.delay(750); defender.anim({ time: 150, }, 'swing'); }, }, supersonicskystrike: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#46BFFF 20%, #241714)', 1300, 0.5); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 25, }, { y: attacker.y + 250, opacity: 0, time: 325, }, 'decel'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y + 250, z: attacker.z, opacity: 0.3, time: 625, }, { x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 0, time: 825, }, 'decel'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 250, z: attacker.z, scale: 1, opacity: 0.6, time: 600, }, { x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 0.3, time: 800, }, 'accel', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y + 250, z: attacker.behind(-50), scale: 1, opacity: 0.5, time: 600, }, { x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 0.6, time: 800, }, 'accel', 'explode'); scene.showEffect('iceball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 1, time: 850, }, { scale: 2, xscale: 12, opacity: 0, time: 1250, }, 'linear', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.7, scale: 1, time: 850, }, { scale: 6, opacity: 0, time: 1400, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y + 350, z: defender.z, opacity: 1, scale: 3, yscale: 10, time: 850, }, { xscale: 0, time: 1500, }, 'accel', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 3, time: 850, }, { scale: 9, time: 1400, }, 'linear', 'explode'); attacker.anim({ x: attacker.x, y: attacker.y + 250, z: attacker.z, time: 300, }, 'decel'); attacker.delay(300); attacker.anim({ x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 1, time: 200, }, 'ballistic2Under'); attacker.delay(50); attacker.anim({ opacity: 0, time: 1, }); attacker.delay(700); attacker.anim({ opacity: 1, time: 200, }); defender.delay(650); defender.anim({ y: defender.y - 10, z: defender.behind(5), time: 50, }, 'swing'); defender.anim({ y: defender.y - 20, z: defender.behind(20), time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, aciddownpour: { anim(scene, [attacker, defender]) { defender.delay(125); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.delay(100); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.delay(75); defender.anim({ y: defender.y - 40, opacity: 0, time: 200, }, 'accel'); defender.delay(400); defender.anim({ y: defender.y, opacity: 0, time: 200, }); defender.anim({ y: defender.y, opacity: 1, time: 200, }); scene.backgroundEffect('linear-gradient(#440044 30%, #000000', 2300, 0.7); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.5, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.5, }, { scale: 4, opacity: 0.3, time: 600, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y - 25, z: attacker.z, scale: 0.3, opacity: 0.3, }, { x: defender.x, z: defender.behind(50), scale: 2, xscale: 4, opacity: 0.6, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x - 30, y: attacker.y - 25, z: attacker.z, scale: 0.3, opacity: 0.3, }, { x: defender.x - 60, z: defender.behind(50), scale: 2, xscale: 4, opacity: 0.6, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x + 30, y: attacker.y - 25, z: attacker.z, scale: 0.3, opacity: 0.3, }, { x: defender.x + 60, z: defender.behind(50), scale: 2, xscale: 4, opacity: 0.6, }, 'decel', 'fade'); scene.showEffect('shadowball', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 2, xscale: 6, yscale: 1, opacity: 0.5, time: 650, }, { scale: 0, xscale: 2, yscale: 0.5, opacity: 0, time: 1600, }, 'linear', 'fade'); scene.showEffect('shadowball', { x: defender.x, y: defender.y - 30, z: defender.z, scale: 2, xscale: 6, yscale: 1, opacity: 0.5, time: 1450, }, { scale: 0, xscale: 2, yscale: 0.5, opacity: 0, time: 2000, }, 'linear', 'fade'); scene.showEffect('shadowball', { x: defender.x - 20, y: defender.y + 200, z: defender.behind(5), opacity: 0.4, xscale: 0.1, yscale: 5, time: 775, }, { y: defender.y + 150, opacity: 0, time: 975, }, 'decel'); scene.showEffect('shadowball', { x: defender.x - 20, y: defender.y - 50, z: defender.behind(5), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 790, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 875, }, 'linear'); scene.showEffect('shadowball', { x: defender.x + 40, y: defender.y + 200, z: defender.behind(-5), opacity: 0.4, xscale: 0.1, yscale: 5, time: 925, }, { y: defender.y + 150, opacity: 0, time: 1100, }, 'decel'); scene.showEffect('shadowball', { x: defender.x + 40, y: defender.y - 50, z: defender.behind(-5), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 940, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 1100, }, 'linear'); scene.showEffect('shadowball', { x: defender.x - 70, y: defender.y + 200, z: defender.behind(-10), opacity: 0.4, xscale: 0.1, yscale: 5, time: 975, }, { y: defender.y + 150, z: defender.behind(-10), opacity: 0, time: 1125, }, 'decel'); scene.showEffect('shadowball', { x: defender.x - 70, y: defender.y - 50, z: defender.z, opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 990, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 1125, }, 'linear'); scene.showEffect('shadowball', { x: defender.x + 70, y: defender.y + 200, z: defender.behind(10), opacity: 0.4, xscale: 0.1, yscale: 5, time: 1050, }, { y: defender.y + 150, opacity: 0, time: 1250, }, 'decel'); scene.showEffect('shadowball', { x: defender.x + 70, y: defender.y - 50, z: defender.behind(10), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 1065, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 1250, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y + 200, z: defender.z, opacity: 0.4, xscale: 0.1, yscale: 5, time: 1100, }, { y: defender.y + 150, opacity: 0, time: 1300, }, 'decel'); scene.showEffect('shadowball', { x: defender.x, y: defender.y - 50, z: defender.z, opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 1120, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 1300, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y + 200, z: defender.behind(-20), opacity: 0.4, xscale: 0.1, yscale: 5, time: 1125, }, { y: defender.y + 150, opacity: 0, time: 1325, }, 'decel'); scene.showEffect('shadowball', { x: defender.x, y: defender.y - 35, z: defender.behind(-20), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 1140, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 1425, }, 'linear'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y - 25, z: defender.z, scale: 2, opacity: 0.8, time: 350, }, { x: defender.x + 75, opacity: 0.3, scale: 4, xscale: 5, time: 1800, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y - 25, z: defender.z, scale: 2, opacity: 0.8, time: 350, }, { x: defender.x - 75, opacity: 0.3, scale: 4, xscale: 5, time: 1800, }, 'linear', 'fade'); }, }, blackholeeclipse: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#440044 30%, #000000', 2500, 0.6); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.2, time: 0, }, { scale: 2, opacity: 0.5, time: 600, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.1, time: 0, }, { scale: 0, opacity: 0.5, time: 400, }, 'accel'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.1, time: 200, }, { scale: 0, opacity: 0.5, time: 600, }, 'accel'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.1, time: 550, }, { scale: 0.7, opacity: 0.5, time: 900, }, 'decel', 'fade'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0.1, time: 550, }, { scale: 1.5, opacity: 1, time: 900, }, 'decel', 'fade'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.7, opacity: 0.5, time: 900, }, { x: defender.x, y: defender.y + 80, z: defender.z, opacity: 0.7, scale: 2, time: 1500, }, 'accel', 'explode'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.5, opacity: 1, time: 900, }, { x: defender.x, y: defender.y + 80, z: defender.z, scale: 3, time: 1500, }, 'accel', 'explode'); scene.showEffect('shadowball', { x: defender.x, y: defender.y + 80, z: defender.z, scale: 1, opacity: 0.7, time: 1500, }, { scale: 2, time: 2200, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y + 80, z: defender.z, scale: 4, opacity: 1, time: 1500, }, { scale: 4.2, time: 2200, }, 'linear', 'fade'); scene.showEffect('flareball', { x: defender.x, y: defender.y + 80, z: defender.z, scale: 1, opacity: 0.1, time: 1600, }, { scale: 3, opacity: 0, time: 1900, }, 'linear'); scene.showEffect('flareball', { x: defender.x, y: defender.y + 80, z: defender.z, scale: 1, opacity: 0.1, time: 1900, }, { scale: 3, opacity: 0, time: 2200, }, 'linear'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y + 80, z: defender.z, scale: 4.2, opacity: 0.5, time: 2200, }, { scale: 0, time: 2500, }, 'accel'); defender.delay(1500); defender.anim({ y: defender.y + 50, xscale: 0, yscale: 0, opacity: 0, time: 400, }, 'accel'); defender.delay(1500); defender.anim({ y: defender.y, opacity: 0, time: 1, }); defender.anim({ time: 400, }); }, }, continentalcrush: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#421800 40%, #B8652F)', 2200, 0.6); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 25, }, { x: attacker.x, y: attacker.y + 250, z: defender.behind(-50), opacity: 0, time: 325, }, 'accel'); scene.showEffect('rock2', { x: attacker.x, y: attacker.y, z: attacker.behind(-40), scale: 0.4, opacity: 0, time: 225, }, { x: attacker.x, y: attacker.y + 250, z: defender.behind(-30), opacity: 1, time: 525, }, 'accel'); scene.showEffect('rocks', { x: attacker.x, y: attacker.y, z: attacker.behind(-70), scale: 0.8, opacity: 0, time: 300, }, { x: attacker.x, y: attacker.y + 250, z: defender.behind(-20), scale: 0.4, opacity: 1, time: 650, }, 'accel'); scene.showEffect('rock2', { x: attacker.x, y: attacker.y, z: attacker.behind(-90), scale: 0.2, opacity: 0, time: 325, }, { x: attacker.x, y: attacker.y + 250, z: defender.behind(-50), opacity: 1, time: 675, }, 'accel'); scene.showEffect('rock1', { x: defender.x, y: defender.y + 175, z: defender.z, scale: 0.5, opacity: 0.5, time: 1000, }, { x: defender.x, y: defender.y + 55, z: defender.z, scale: 5.5, opacity: 1, time: 1800, }, 'decel', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 1, time: 1650, }, { scale: 2, xscale: 12, opacity: 0, time: 2050, }, 'linear', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.7, scale: 1, time: 1650, }, { scale: 6, opacity: 0, time: 2200, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y + 350, z: defender.z, opacity: 1, scale: 3, yscale: 8, time: 1650, }, { xscale: 12, opacity: 0.5, time: 2000, }, 'accel', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 6, time: 1650, }, { scale: 12, opacity: 0.7, time: 2200, }, 'linear', 'explode'); attacker.anim({ x: attacker.x, y: attacker.y + 250, z: attacker.behind(-50), time: 300, }, 'decel'); attacker.delay(1700); attacker.anim({ opacity: 0, time: 1, }); attacker.anim({ opacity: 1, time: 200, }); defender.delay(1450); defender.anim({ y: defender.y - 10, yscale: 0.4, time: 50, }, 'swing'); defender.anim({ y: defender.y - 20, yscale: 0.3, time: 300, }, 'swing'); defender.delay(200); defender.anim({ time: 400, }, 'swing'); }, }, neverendingnightmare: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#440044 30%, #000000', 1500, 0.6); let xstep = (defender.x + 200 - defender.x) / 5; let ystep = (defender.x - 200 - defender.x) / 5; let zstep = defender.z / 5; for (let i = 0; i < 5; i++) { scene.showEffect('purplewisp', { x: defender.x - 200 + xstep * (i + 1), y: (defender.y + 200) + ystep * (i + 1), z: defender.z + zstep * (i + 1), scale: 0.6, opacity: 0.7, time: 40 * i + 0, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (defender.x + 150 - defender.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('purplewisp', { x: defender.x - 150 + xstep * (i + 1), y: (defender.y + 200) + ystep * (i + 1), z: defender.z + zstep * (i + 1), scale: 0.6, opacity: 0.7, time: 40 * i + 100, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (defender.x + 100 - defender.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('purplewisp', { x: defender.x - 100 + xstep * (i + 1), y: (defender.y + 200) + ystep * (i + 1), z: defender.z + zstep * (i + 1), scale: 1.2, opacity: 1, time: 40 * i + 200, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (defender.x + 50 - defender.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('purplewisp', { x: defender.x - 50 + xstep * (i + 1), y: (defender.y + 200) + ystep * (i + 1), z: defender.z + zstep * (i + 1), scale: 0.6, opacity: 0.7, time: 40 * i + 300, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (defender.x - 50 - defender.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('purplewisp', { x: defender.x + 50 + xstep * (i + 1), y: (defender.y + 200) + ystep * (i + 1), z: defender.z + zstep * (i + 1), scale: 1.2, opacity: 1, time: 40 * i + 400, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (defender.x - 100 - defender.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('purplewisp', { x: defender.x + 100 + xstep * (i + 1), y: (defender.y + 200) + ystep * (i + 1), z: defender.z + zstep * (i + 1), scale: 0.6, opacity: 0.7, time: 40 * i + 500, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (defender.x - 150 - defender.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('purplewisp', { x: defender.x + 150 + xstep * (i + 1), y: (defender.y + 200) + ystep * (i + 1), z: defender.z + zstep * (i + 1), scale: 0.6, opacity: 0.7, time: 40 * i + 600, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (defender.x - 200 - defender.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('purplewisp', { x: defender.x + 200 + xstep * (i + 1), y: (defender.y + 200) + ystep * (i + 1), z: defender.z + zstep * (i + 1), scale: 0.6, opacity: 0.7, time: 40 * i + 700, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } scene.showEffect('shadowball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 0.5, time: 200, }, { scale: 3, xscale: 8, opacity: 0.1, time: 1300, }, 'linear', 'fade'); scene.showEffect('shadowball', { x: defender.x, y: defender.y - 30, z: defender.z, opacity: 1, scale: 2, time: 200, }, { scale: 2.5, opacity: 0, time: 1500, }, 'linear', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.7, scale: 3, time: 200, }, { scale: 9, opacity: 1, time: 1500, }, 'linear', 'fade'); }, }, corkscrewcrash: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 1200, 0.3); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 500, }, { scale: 3, opacity: 0, time: 800, }, 'linear'); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 700, }, { scale: 3, opacity: 0, time: 1000, }, 'linear'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 1, }, { y: attacker.y + 90, opacity: 0, time: 200, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-165), y: defender.y + 170, z: defender.z, scale: 1, opacity: 0, time: 400, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 2, opacity: 0.5, time: 650, }, 'accel', 'explode'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 500, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 650, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 550, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 700, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 600, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 750, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 650, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 800, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 700, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 850, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 750, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 900, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 800, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 950, }, 'accel'); scene.showEffect('iceball', { x: defender.leftof(-65), y: defender.y + 90, z: defender.z, scale: 3, yscale: 3.3, opacity: 0.8, time: 900, }, { x: defender.leftof(10), y: defender.y - 20, z: defender.behind(-10), scale: 0, xscale: 0, yscale: 0, time: 1050, }, 'accel'); attacker.anim({ y: defender.y + 120, xscale: 0, yscale: 0, opacity: 0, time: 300, }, 'accel'); attacker.delay(825); attacker.anim({ x: attacker.x, y: attacker.y + 40, z: attacker.behind(40), xscale: 1, yscale: 1, time: 1, }); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.z, time: 250, }, 'decel'); defender.delay(625); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(15), time: 200, }, 'decel'); defender.anim({ time: 350, }, 'swing'); }, }, twinkletackle: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#FF99FF', 1700, 0.5); scene.showEffect('shine', { x: attacker.x - 10, y: attacker.y - 10, z: attacker.z, scale: 0.3, opacity: 0.6, }, { opacity: 0, time: 200, }, 'decel'); scene.showEffect('shine', { x: attacker.x + 20, y: attacker.y - 30, z: attacker.z, scale: 0.2, opacity: 1, time: 0, }, { y: attacker.y + 40, opacity: 0, time: 250, }, 'accel'); scene.showEffect('shine', { x: attacker.x + 20, y: attacker.y - 15, z: attacker.z, scale: 0.3, opacity: 0.6, time: 150, }, { opacity: 0, time: 250, }, 'decel'); scene.showEffect('shine', { x: attacker.x - 20, y: attacker.y + 40, z: attacker.z, scale: 0.2, opacity: 1, time: 175, }, { y: attacker.y + 40, opacity: 0, time: 275, }, 'accel'); scene.showEffect('shine', { x: attacker.x - 5, y: attacker.y + 15, z: attacker.z, scale: 0.3, opacity: 0.6, time: 100, }, { opacity: 0, time: 300, }, 'decel'); scene.showEffect('shine', { x: attacker.x + 5, y: attacker.y - 10, z: attacker.z, scale: 0.3, opacity: 0.6, time: 125, }, { opacity: 0, time: 325, }, 'accel'); scene.showEffect('impact', { x: defender.x, y: defender.y + 2, z: defender.behind(5), scale: 0, opacity: 0.2, time: 600, }, { scale: 2, opacity: 0, time: 900, }, 'linear'); scene.showEffect('shine', { x: defender.x + 30, y: defender.y + 5, z: defender.z, scale: 0.3, opacity: 0.7, time: 600, }, { x: defender.x + 40, y: defender.y + 10, opacity: 0, time: 900, }, 'accel'); scene.showEffect('shine', { x: defender.x - 30, y: defender.y - 10, z: defender.z, scale: 0.3, opacity: 0.7, time: 700, }, { x: defender.x - 40, y: defender.y - 20, opacity: 0, time: 900, }, 'accel'); scene.showEffect('shine', { x: defender.x + 15, y: defender.y + 10, z: defender.z, scale: 0.3, opacity: 0.7, time: 700, }, { x: defender.x + 25, y: defender.y + 20, opacity: 0, time: 1000, }, 'accel'); scene.showEffect('shine', { x: defender.x - 15, y: defender.y - 30, z: defender.z, scale: 0.3, opacity: 0.7, time: 800, }, { x: defender.x - 25, y: defender.y - 40, opacity: 0, time: 1100, }, 'accel'); attacker.delay(200); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(5), time: 375, }, 'accel'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(20), time: 250, }, 'decel'); attacker.anim({ time: 700, }, 'ballistic2Back'); defender.delay(600); defender.anim({ x: defender.leftof(75), y: defender.y + 50, z: defender.behind(150), opacity: 0, time: 400, }, 'swing'); defender.delay(500); defender.anim({ opacity: 0, time: 1, }); defender.anim({ time: 400, }); }, }, pulverizingpancake: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#421800 40%, #B8652F)', 600, 0.7, 1200); scene.showEffect('iceball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 1, time: 1450, }, { scale: 2, xscale: 12, opacity: 0, time: 1850, }, 'linear', 'fade'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.7, scale: 1, time: 1450, }, { scale: 6, opacity: 0, time: 2000, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y + 350, z: defender.z, opacity: 1, scale: 3, yscale: 10, time: 1450, }, { xscale: 0, opacity: 0.5, time: 1800, }, 'accel', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 3, time: 1450, }, { scale: 9, opacity: 0.7, time: 2000, }, 'linear', 'explode'); attacker.anim({ x: defender.x, y: defender.y + 50, z: defender.behind(-150), time: 400, }, 'ballistic'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-125), time: 200, }, 'ballistic2Back'); attacker.anim({ x: defender.x, y: defender.y - 7, z: defender.behind(-125), yscale: 0.7, time: 50, }, 'ballistic2Back'); attacker.anim({ x: defender.x, y: defender.y + 200, z: defender.behind(-30), time: 600, }, 'ballistic'); attacker.anim({ x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), time: 200, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(1450); defender.anim({ y: defender.y - 10, z: defender.behind(5), yscale: 0.3, time: 50, }, 'swing'); defender.anim({ y: defender.y - 20, z: defender.behind(20), yscale: 0.3, time: 300, }, 'swing'); defender.anim({ time: 400, }, 'swing'); }, }, stokedsparksurfer: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#0000DD', 1100, 0.2, 500); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 1, }, { y: attacker.y + 120, opacity: 0, time: 300, }, 'accel'); scene.showEffect('electroball', { x: defender.leftof(-200), y: defender.y + 80, z: defender.z, scale: 1, opacity: 0, time: 700, }, { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 1, time: 1100, }, 'accel', 'explode'); scene.showEffect('electroball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 1, time: 1050, }, { scale: 2, xscale: 12, opacity: 0, time: 1450, }, 'linear', 'fade'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.7, scale: 1, time: 1050, }, { scale: 6, opacity: 0, time: 1600, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y + 350, z: defender.z, opacity: 1, scale: 3, yscale: 10, time: 1050, }, { xscale: 0, opacity: 0.5, time: 1600, }, 'accel', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 3, time: 1050, }, { scale: 9, time: 1600, }, 'linear', 'explode'); scene.showEffect('lightning', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, time: 1000, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('lightning', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 0.6, time: 1150, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('lightning', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 0.6, time: 1300, }, { scale: 6, opacity: 0, }, 'linear'); attacker.anim({ y: attacker.y + 120, opacity: 0, time: 300, }, 'accel'); attacker.delay(100); attacker.anim({ x: attacker.leftof(-200), y: attacker.y + 80, z: attacker.z, opacity: 0, time: 350, }, 'accel'); attacker.anim({ x: defender.leftof(-200), y: defender.y + 80, z: defender.z, time: 1, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, opacity: 1, time: 350, }, 'accel'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 1000, }, { scale: 2, opacity: 0, time: 1300, }, 'linear'); attacker.anim({ x: defender.leftof(100), y: defender.y - 40, z: defender.z, opacity: 0, time: 175, }); attacker.delay(700); attacker.anim({ x: attacker.x, y: attacker.y + 40, z: attacker.behind(40), time: 1, }); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.z, time: 250, }, 'decel'); defender.delay(1000); defender.anim({ z: defender.behind(20), time: 300, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, catastropika: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#0000DD', 800, 0.2, 500); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 25, }, { x: attacker.x, y: attacker.y + 250, z: attacker.behind(-50), opacity: 0, time: 325, }, 'decel'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 250, z: attacker.behind(-50), scale: 1, opacity: 1, time: 600, }, { x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 0.8, time: 800, }, 'accel', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y + 250, z: attacker.behind(-50), scale: 1, opacity: 0.5, time: 600, }, { x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 0.6, time: 800, }, 'accel', 'explode'); scene.showEffect('electroball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 1, time: 850, }, { scale: 2, xscale: 12, opacity: 0, time: 1250, }, 'linear', 'fade'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.7, scale: 1, time: 850, }, { scale: 6, opacity: 0, time: 1400, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y + 350, z: defender.z, opacity: 1, scale: 3, yscale: 10, time: 850, }, { xscale: 0, opacity: 0.5, time: 1400, }, 'accel', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 3, time: 850, }, { scale: 9, time: 1400, }, 'linear', 'explode'); scene.showEffect('lightning', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, time: 800, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('lightning', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 0.6, time: 950, }, { scale: 6, opacity: 0, }, 'linear'); scene.showEffect('lightning', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 0.6, time: 1100, }, { scale: 6, opacity: 0, }, 'linear'); attacker.anim({ x: attacker.x, y: attacker.y + 250, z: attacker.behind(-50), time: 300, }, 'decel'); attacker.delay(300); attacker.anim({ x: defender.leftof(-10), y: defender.y + 5, z: defender.behind(10), opacity: 0, time: 200, }); attacker.delay(50); attacker.anim({ opacity: 0, time: 1, }); attacker.delay(700); attacker.anim({ opacity: 1, time: 200, }); defender.delay(850); defender.anim({ y: defender.y - 10, z: defender.behind(5), yscale: 0.3, time: 50, }, 'swing'); defender.anim({ y: defender.y - 20, z: defender.behind(20), yscale: 0.3, time: 300, }, 'swing'); defender.anim({ time: 400, }, 'swing'); }, }, sinisterarrowraid: { anim(scene, [attacker, defender]) { defender.delay(1050); defender.anim({ z: defender.behind(20), time: 300, }, 'swing'); defender.anim({ time: 200, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ x: defender.x - 5, time: 75, }, 'swing'); defender.anim({ x: defender.x + 5, time: 75, }, 'swing'); defender.anim({ time: 100, }, 'accel'); attacker.anim({ y: attacker.y + 120, opacity: 0, time: 300, }, 'accel'); attacker.delay(100); attacker.anim({ x: attacker.leftof(-200), y: attacker.y + 80, z: attacker.z, opacity: 0, time: 350, }, 'accel'); attacker.anim({ x: defender.leftof(-200), y: defender.y + 80, z: defender.z, time: 1, }, 'linear'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, opacity: 1, time: 350, }, 'accel'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 0.5, time: 1000, }, { scale: 2, opacity: 0, time: 1300, }, 'linear'); attacker.anim({ x: defender.leftof(100), y: defender.y - 40, z: defender.z, opacity: 0, time: 175, }); attacker.delay(700); attacker.anim({ x: attacker.x, y: attacker.y + 40, z: attacker.behind(40), time: 1, }); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.z, time: 250, }, 'decel'); scene.backgroundEffect('linear-gradient(#440044 30%, #000000', 2300, 0.4); scene.showEffect('shadowball', { x: defender.x - 20, y: defender.y + 200, z: defender.behind(5), opacity: 0.4, xscale: 0.1, yscale: 5, time: 1475, }, { y: defender.y + 150, opacity: 0, time: 1775, }, 'decel'); scene.showEffect('shadowball', { x: defender.x - 20, y: defender.y - 50, z: defender.behind(5), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 1490, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 1775, }, 'linear'); scene.showEffect('shadowball', { x: defender.x + 40, y: defender.y + 200, z: defender.behind(-5), opacity: 0.4, xscale: 0.1, yscale: 5, time: 1625, }, { y: defender.y + 150, opacity: 0, time: 1900, }, 'decel'); scene.showEffect('shadowball', { x: defender.x + 40, y: defender.y - 50, z: defender.behind(-5), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 1640, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 1900, }, 'linear'); scene.showEffect('shadowball', { x: defender.x - 70, y: defender.y + 200, z: defender.behind(-10), opacity: 0.4, xscale: 0.1, yscale: 5, time: 1675, }, { y: defender.y + 150, z: defender.behind(-10), opacity: 0, time: 1925, }, 'decel'); scene.showEffect('shadowball', { x: defender.x - 70, y: defender.y - 50, z: defender.z, opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 1690, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 1925, }, 'linear'); scene.showEffect('shadowball', { x: defender.x + 70, y: defender.y + 200, z: defender.behind(10), opacity: 0.4, xscale: 0.1, yscale: 5, time: 1750, }, { y: defender.y + 150, opacity: 0, time: 2050, }, 'decel'); scene.showEffect('shadowball', { x: defender.x + 70, y: defender.y - 50, z: defender.behind(10), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 1765, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 2050, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y + 200, z: defender.z, opacity: 0.4, xscale: 0.1, yscale: 5, time: 1800, }, { y: defender.y + 150, opacity: 0, time: 2100, }, 'decel'); scene.showEffect('shadowball', { x: defender.x, y: defender.y - 50, z: defender.z, opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 1820, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 2100, }, 'linear'); scene.showEffect('shadowball', { x: defender.x, y: defender.y + 200, z: defender.behind(-20), opacity: 0.4, xscale: 0.1, yscale: 5, time: 1825, }, { y: defender.y + 150, opacity: 0, time: 2125, }, 'decel'); scene.showEffect('shadowball', { x: defender.x, y: defender.y - 35, z: defender.behind(-20), opacity: 0.4, xscale: 0.3, yscale: 0.1, time: 1840, }, { xscale: 0.6, yscale: 0.1, opacity: 0, time: 2125, }, 'linear'); }, }, oceanicoperetta: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#000000 20%, #0000DD)', 2700, 0.4); scene.backgroundEffect(`url('https://${Config.routes.client}/fx/weather-raindance.jpg')`, 700, 0.2, 2000); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 120, z: attacker.z, scale: 2.5, opacity: 0, }, { scale: 3, opacity: 1, time: 599, }, 'linear', 'fade'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y + 120, z: attacker.z, scale: 3, opacity: 0, }, { scale: 3.25, opacity: 0.7, time: 599, }, 'linear', 'fade'); scene.showEffect('iceball', { x: attacker.x, y: attacker.y + 120, z: attacker.z, scale: 3, opacity: 1, time: 600, }, { x: defender.x, y: defender.y + 10, z: defender.z, time: 2000, }, 'accel', 'explode'); scene.showEffect('waterwisp', { x: attacker.x, y: attacker.y + 120, z: attacker.z, scale: 3.25, opacity: 0.7, time: 600, }, { x: defender.x, y: defender.y + 10, z: defender.z, time: 2000, }, 'accel', 'explode'); }, }, extremeevoboost: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 1000, 0.3); let xstep = (attacker.x + 200 - attacker.x) / 5; let ystep = (attacker.x - 200 - attacker.x) / 5; let zstep = (defender.z - attacker.z) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('flareball', { x: attacker.x - 200 + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.6, opacity: 0.7, time: 40 * i + 0, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (attacker.x + 150 - attacker.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('electroball', { x: attacker.x - 150 + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.6, opacity: 0.7, time: 40 * i + 100, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (attacker.x + 100 - attacker.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('waterwisp', { x: attacker.x - 100 + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1.2, opacity: 1, time: 40 * i + 200, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (attacker.x + 50 - attacker.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('shadowball', { x: attacker.x - 50 + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.6, opacity: 0.7, time: 40 * i + 300, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (attacker.x - 50 - attacker.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('purplewisp', { x: attacker.x + 50 + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 1.2, opacity: 1, time: 40 * i + 400, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (attacker.x - 100 - attacker.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('iceball', { x: attacker.x + 100 + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.6, opacity: 0.7, time: 40 * i + 500, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (attacker.x - 150 - attacker.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('energyball', { x: attacker.x + 150 + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.6, opacity: 0.7, time: 40 * i + 600, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } xstep = (attacker.x - 200 - attacker.x) / 5; for (let i = 0; i < 5; i++) { scene.showEffect('mistball', { x: attacker.x + 200 + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.6, opacity: 0.7, time: 40 * i + 700, }, { opacity: 0, time: 50 * i + 1000, }, 'linear'); } scene.showEffect('rainbow', { x: attacker.x, y: attacker.y - 5, z: attacker.z, scale: 0.8, opacity: 0, time: 0, }, { scale: 1, opacity: 0.6, time: 1000, }, 'linear', 'explode'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 2, opacity: 0, }, { scale: 2.5, opacity: 0.7, time: 1000, }, 'linear', 'explode'); }, }, guardianofalola: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#421800 40%, #B8652F)', 1700, 0.6, 300); scene.showEffect('fist1', { x: attacker.leftof(200), y: defender.y + 175, z: defender.z, scale: 0.5, opacity: 1, time: 400, }, { x: defender.x, y: defender.y + 15, z: defender.z, scale: 5.5, opacity: 0.5, time: 799, }, 'accel', 'fade'); scene.showEffect('fist1', { x: defender.x, y: defender.y + 15, z: defender.z, scale: 5.5, opacity: 1, time: 800, }, { x: defender.x, y: defender.y - 10, z: defender.z, xscale: 10, opacity: 0, time: 1050, }, 'linear'); scene.showEffect('electroball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 1, time: 850, }, { scale: 2, xscale: 12, opacity: 0, time: 1200, }, 'linear', 'fade'); scene.showEffect('electroball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 1, time: 1050, }, { scale: 2, xscale: 12, opacity: 0, time: 1500, }, 'linear', 'fade'); scene.showEffect('electroball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 3, opacity: 1, time: 1250, }, { scale: 2, xscale: 12, opacity: 0, time: 1800, }, 'linear', 'fade'); scene.showEffect('electroball', { x: defender.x, y: defender.y, z: defender.z, opacity: 0.7, scale: 1, time: 850, }, { scale: 6, opacity: 0, time: 2000, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 6, time: 850, }, { scale: 12, opacity: 0.8, time: 2000, }, 'linear', 'explode'); attacker.anim({ x: attacker.x, y: attacker.y + 60, z: attacker.behind(40), opacity: 0, time: 250, }, 'accel'); attacker.delay(1300); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.z, time: 250, }, 'decel'); defender.delay(750); defender.anim({ y: defender.y - 30, z: defender.z, yscale: 0.5, time: 200, }, 'swing'); defender.delay(700); defender.anim({ time: 300, }, 'swing'); }, }, splinteredstormshards: { anim(scene, [attacker, defender]) { scene.backgroundEffect(`url('https://${Config.routes.client}/sprites/gen6bgs/bg-earthycave.jpg')`, 2700, 0.8, 300); scene.backgroundEffect('linear-gradient(#FFC720 15%, #421800)', 2700, 0.7); scene.backgroundEffect('#ffffff', 400, 0.6, 2500); scene.showEffect('rock3', { x: defender.x - 50, y: defender.y + 20, z: defender.behind(20), scale: 0.4, opacity: 1, }, { y: defender.y + 100, opacity: 0, time: 1000, }, 'accel'); scene.showEffect('rock3', { x: defender.x + 50, y: defender.y + 40, z: defender.behind(-40), scale: 0.2, opacity: 1, time: 150, }, { y: defender.y + 100, opacity: 0, time: 1100, }, 'accel'); scene.showEffect('rock3', { x: defender.x + 70, y: defender.y + 45, z: defender.behind(10), scale: 0.4, opacity: 1, time: 175, }, { y: defender.y + 100, opacity: 0, time: 1175, }, 'accel'); scene.showEffect('rock3', { x: defender.x + 60, y: defender.y + 60, z: defender.behind(30), scale: 0.3, opacity: 1, time: 200, }, { y: defender.x + 100, opacity: 0, time: 1200, }, 'accel'); scene.showEffect('rock3', { x: defender.x - 40, y: defender.y + 40, z: defender.behind(-30), scale: 0.5, opacity: 1, time: 210, }, { y: defender.y + 100, opacity: 0, time: 1300, }, 'accel'); scene.showEffect('rock3', { x: defender.x + 30, y: defender.y + 25, z: defender.behind(20), scale: 0.2, opacity: 1, time: 220, }, { y: defender.y + 100, opacity: 0, time: 1220, }, 'accel'); scene.showEffect('rock3', { x: defender.x - 80, y: defender.y + 40, z: defender.behind(-40), scale: 0.2, opacity: 1, time: 650, }, { y: defender.y + 100, opacity: 0, time: 1500, }, 'accel'); scene.showEffect('rock3', { x: defender.x - 72, y: defender.y + 10, z: defender.behind(20), scale: 0.3, opacity: 1, time: 750, }, { y: defender.y + 100, opacity: 0, time: 1500, }, 'accel'); scene.showEffect('rock3', { x: defender.x + 80, y: defender.y + 40, z: defender.behind(-60), scale: 0.4, opacity: 1, time: 850, }, { y: defender.y + 100, opacity: 0, time: 1500, }, 'accel'); scene.showEffect('rock3', { x: defender.x + 70, y: defender.y + 40, z: defender.behind(-60), scale: 0.4, opacity: 1, time: 950, }, { y: defender.y + 100, opacity: 0, time: 1500, }, 'accel'); scene.showEffect('flareball', { x: defender.leftof(-200), y: defender.y + 175, z: defender.z, scale: 0.1, opacity: 0, time: 1600, }, { x: defender.x + 30, y: defender.y, scale: 1.5, opacity: 0.8, }, 'accel', 'explode'); scene.showEffect('rock3', { x: defender.leftof(-200), y: defender.y + 175, z: defender.z, scale: 0.1, opacity: 0, time: 1600, }, { x: defender.x + 30, y: defender.y, scale: 1, opacity: 0.4, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.leftof(-200), y: defender.y - 20 + 175, z: defender.z, scale: 0.1, opacity: 0, time: 1750, }, { x: defender.x + 30, y: defender.y - 5, scale: 1.5, opacity: 0.8, }, 'accel', 'explode'); scene.showEffect('rock3', { x: defender.leftof(-150), y: defender.y + 20 + 175, z: defender.z, scale: 0.1, opacity: 0, time: 1750, }, { x: defender.x + 20, y: defender.y - 5, scale: 1, opacity: 0.4, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.leftof(150), y: defender.y + 255, z: defender.z, scale: 0.1, opacity: 0, time: 1900, }, { x: defender.x - 20, y: defender.y, scale: 1, opacity: 0.8, }, 'accel', 'explode'); scene.showEffect('rock3', { x: defender.leftof(150), y: defender.y + 255, z: defender.z, scale: 0.1, opacity: 0, time: 1900, }, { x: defender.x - 20, y: defender.y, scale: 1, opacity: 0.4, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.leftof(-300), y: defender.y - 20 + 150, z: defender.z, scale: 0.1, opacity: 0, time: 1950, }, { x: defender.x + 20, y: defender.y, scale: 1.5, opacity: 0.8, }, 'accel', 'explode'); scene.showEffect('rock3', { x: defender.leftof(-300), y: defender.y - 20 + 150, z: defender.z, scale: 0.1, opacity: 0, time: 1950, }, { x: defender.x + 20, y: defender.y, scale: 1, opacity: 0.4, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.leftof(-175), y: defender.y - 20 + 225, z: defender.z, scale: 0.1, opacity: 0, time: 2100, }, { x: defender.x + 20, y: defender.y, scale: 1.5, opacity: 0.8, }, 'accel', 'explode'); scene.showEffect('rock3', { x: defender.leftof(-175), y: defender.y - 20 + 225, z: defender.z, scale: 0.1, opacity: 0, time: 2100, }, { x: defender.x + 20, y: defender.y, scale: 1, opacity: 0.4, }, 'accel', 'explode'); scene.showEffect('mudwisp', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 2, opacity: 0.8, time: 1850, }, { scale: 1, xscale: 9, opacity: 0, time: 2750, }, 'decel', 'fade'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 2, time: 1950, }, { scale: 6, time: 2700, }, 'linear', 'explode'); scene.showEffect('wisp', { x: defender.x, y: defender.y + 350, z: defender.z, opacity: 1, scale: 3, yscale: 10, time: 1850, }, { xscale: 0, time: 2700, }, 'accel', 'fade'); scene.showEffect('wisp', { x: defender.x - 5, y: defender.y - 5, z: defender.z, scale: 0.6, opacity: 0.6, time: 2450, }, { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 2, opacity: 0.1, time: 2750, }, 'linear', 'explode'); scene.showEffect('wisp', { x: defender.x + 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.6, time: 2575, }, { x: defender.x + 20, y: defender.y + 20, z: defender.z, scale: 1.5, opacity: 0.1, time: 2875, }, 'linear', 'explode'); scene.showEffect('wisp', { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.6, time: 2600, }, { x: defender.x + 30, y: defender.y - 25, z: defender.z, scale: 2, opacity: 0.1, time: 2900, }, 'linear', 'explode'); defender.delay(1925); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(15), time: 75, opacity: 0, }, 'swing'); defender.delay(300); defender.anim({ time: 200, }, 'swing'); }, }, letssnuggleforever: { anim(scene, [attacker, defender]) { attacker.anim({ x: attacker.x, y: attacker.y + 250, z: attacker.behind(-50), time: 300, }, 'decel'); attacker.delay(300); attacker.anim({ x: defender.x, y: defender.y + 15, z: defender.behind(10), scale: 4, time: 400, }, 'decel'); attacker.delay(300); attacker.anim({ x: defender.x, y: defender.y + 20, z: defender.behind(10), yscale: 4.2, xscale: 4, time: 200, }); attacker.anim({ x: defender.x, y: defender.y - 5, z: defender.behind(10), yscale: 3, xscale: 4.2, time: 200, }); attacker.anim({ x: defender.x, y: defender.y + 20, z: defender.behind(10), yscale: 4.5, xscale: 4, time: 200, }); attacker.anim({ x: defender.x, y: defender.y - 5, z: defender.behind(10), yscale: 3, xscale: 4.2, time: 200, }); attacker.anim({ x: defender.x, y: defender.y + 20, z: defender.behind(10), yscale: 4.5, xscale: 4, time: 200, }); attacker.anim({ x: defender.x, y: defender.y - 5, z: defender.behind(10), yscale: 3, xscale: 4.2, time: 200, }); attacker.anim({ x: defender.x, y: defender.y + 15, z: defender.behind(10), scale: 4, time: 200, }); attacker.delay(300); attacker.anim({ time: 500, }, 'ballistic'); defender.delay(750); defender.anim({ opacity: 0, time: 50, }, 'swing'); defender.delay(2100); defender.anim({ y: defender.y + 100, z: defender.behind(5), opacity: 1, time: 300, }, 'decel'); defender.anim({ time: 250, }, 'accel'); defender.anim({ x: defender.x, y: defender.y - 30, yscale: 0.25, time: 50, }, 'swing'); defender.anim({ time: 300, }, 'swing'); scene.showEffect('impact', { x: defender.x - 25, y: defender.y - 10, z: defender.behind(5), scale: 1, opacity: 1, time: 1575, }, { scale: 2, opacity: 0, time: 1775, }, 'linear'); scene.showEffect('impact', { x: defender.x + 25, y: defender.y - 25, z: defender.behind(5), scale: 1, opacity: 1, time: 1700, }, { scale: 2, opacity: 0, time: 1900, }, 'linear'); scene.showEffect('impact', { x: defender.x - 25, y: defender.y - 10, z: defender.behind(5), scale: 1, opacity: 1, time: 1700, }, { scale: 2, opacity: 0, time: 2000, }, 'linear'); scene.showEffect('impact', { x: defender.x + 2, y: defender.y - 5, z: defender.behind(5), scale: 1, opacity: 1, time: 1800, }, { scale: 2, opacity: 0, time: 2100, }, 'linear'); scene.showEffect('impact', { x: defender.x + 35, y: defender.y - 20, z: defender.behind(5), scale: 1, opacity: 1, time: 1900, }, { scale: 2, opacity: 0, time: 2300, }, 'linear'); scene.showEffect('impact', { x: defender.x + 5, y: defender.y + 20, z: defender.behind(5), scale: 1, opacity: 1, time: 2100, }, { scale: 2, opacity: 0, time: 2300, }, 'linear'); scene.showEffect('impact', { x: defender.x - 35, y: defender.y - 35, z: defender.behind(5), scale: 1, opacity: 1, time: 2200, }, { scale: 2, opacity: 0, time: 2500, }, 'linear'); scene.showEffect('impact', { x: defender.x + 35, y: defender.y - 35, z: defender.behind(5), scale: 1, opacity: 1, time: 2300, }, { scale: 2, opacity: 0, time: 2600, }, 'linear'); scene.showEffect('impact', { x: defender.x, y: defender.y - 10, z: defender.behind(5), scale: 1, opacity: 1, time: 2500, }, { scale: 3, opacity: 0, time: 2800, }, 'linear'); scene.showEffect('mudwisp', { x: defender.x + 5, y: defender.y - 5, z: defender.z, scale: 1, opacity: 0.6, time: 1450, }, { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 1, opacity: 0.8, time: 1750, }, 'linear', 'explode'); scene.showEffect('wisp', { x: defender.x + 10, y: defender.y + 10, z: defender.z, scale: 1, opacity: 0.6, time: 1575, }, { x: defender.x + 20, y: defender.y + 20, z: defender.z, scale: 1, opacity: 0.8, time: 1875, }, 'linear', 'explode'); scene.showEffect('mudwisp', { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 1, opacity: 0.6, time: 1600, }, { x: defender.x + 30, y: defender.y - 25, z: defender.z, scale: 1, opacity: 0.8, time: 2000, }, 'linear', 'explode'); scene.showEffect('wisp', { x: defender.x + 5, y: defender.y - 5, z: defender.z, scale: 1, opacity: 0.6, time: 1950, }, { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 1.5, opacity: 0.8, time: 2350, }, 'linear', 'explode'); scene.showEffect('mudwisp', { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 1, opacity: 0.6, time: 2175, }, { x: defender.x + 20, y: defender.y - 25, scale: 1.5, opacity: 0.8, time: 2575, }, 'linear', 'explode'); }, }, clangoroussoulblaze: { anim(scene, [attacker, ...defenders]) { attacker.anim({ x: attacker.x - 10, time: 300 }); attacker.anim({ x: attacker.x + 10, time: 400 }); attacker.anim({ x: attacker.x, time: 300 }); attacker.delay(50); attacker.anim({ y: attacker.y - 10, yscale: 0.9, time: 50, }); attacker.anim({ y: attacker.y + 250, yscale: 1, time: 300, }, 'decel'); attacker.delay(1700); attacker.anim({ opacity: 0, time: 1, }); attacker.anim({ opacity: 1, time: 200, }); for (const defender of defenders) { defender.delay(1825); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(15), time: 75, opacity: 0, }, 'swing'); defender.delay(400); defender.anim({ time: 200, }, 'swing'); } const defender = defenders[1] || defenders[0]; scene.backgroundEffect('#000000', 300, 0.9); scene.backgroundEffect(`url('https://${Config.routes.client}/sprites/gen6bgs/bg-earthycave.jpg')`, 2000, 0.7, 300); scene.backgroundEffect('linear-gradient(#FB5C1E 20%, #3F1D0F', 2000, 0.6, 300); scene.backgroundEffect('#FFFFFF', 1000, 0.9, 2200); scene.showEffect('shine', { x: attacker.x - 10, y: attacker.y - 10, z: attacker.z, scale: 0.3, opacity: 0.6, }, { opacity: 0, time: 300, }, 'decel'); scene.showEffect('shine', { x: attacker.x + 20, y: attacker.y - 15, z: attacker.z, scale: 0.3, opacity: 0.6, time: 100, }, { opacity: 0, time: 400, }, 'decel'); scene.showEffect('shine', { x: attacker.x - 5, y: attacker.y + 15, z: attacker.z, scale: 0.3, opacity: 0.6, time: 200, }, { opacity: 0, time: 500, }, 'decel'); scene.showEffect('shine', { x: attacker.x + 5, y: attacker.y - 10, z: attacker.z, scale: 0.3, opacity: 0.6, time: 300, }, { opacity: 0, time: 600, }, 'accel'); scene.showEffect('shine', { x: attacker.x + 20, y: attacker.y - 30, z: attacker.z, scale: 0.2, opacity: 1, time: 0, }, { y: attacker.y + 40, opacity: 0, time: 400, }, 'accel'); scene.showEffect('shine', { x: attacker.x - 20, y: attacker.y + 40, z: attacker.z, scale: 0.2, opacity: 1, time: 200, }, { y: attacker.y + 40, opacity: 0, time: 600, }, 'accel'); scene.showEffect('shine', { x: attacker.x, y: attacker.y + 30, z: attacker.z, scale: 0.2, opacity: 1, time: 400, }, { y: attacker.y + 40, opacity: 0, time: 800, }, 'accel'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0, opacity: 1, time: 1700, }, { y: defender.y - 200, z: defender.behind(150), scale: 10, opacity: 0, time: 2100, }, 'linear'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0, opacity: 1, time: 1800, }, { y: defender.y - 200, z: defender.behind(150), scale: 10, opacity: 0, time: 2200, }, 'linear'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0, opacity: 1, time: 1900, }, { y: defender.y - 200, z: defender.behind(150), scale: 10, opacity: 0, time: 2300, }, 'linear'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0, opacity: 1, time: 2000, }, { y: defender.y - 200, z: defender.behind(150), scale: 10, opacity: 0, time: 2400, }, 'linear'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0, opacity: 1, time: 2100, }, { y: defender.y - 200, z: defender.behind(150), scale: 10, opacity: 0, time: 2500, }, 'linear'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0, opacity: 1, time: 2200, }, { y: defender.y - 200, z: defender.behind(150), scale: 10, opacity: 0, time: 2600, }, 'linear'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0, opacity: 1, time: 2300, }, { y: defender.y - 200, z: defender.behind(150), scale: 10, opacity: 0, time: 2700, }, 'linear'); scene.showEffect('shadowball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0, opacity: 1, time: 2400, }, { y: defender.y - 200, z: defender.behind(150), scale: 10, opacity: 0, time: 2800, }, 'linear'); scene.showEffect('mistball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0, opacity: 1, time: 2500, }, { y: defender.y - 200, z: defender.behind(150), scale: 10, opacity: 0, time: 2900, }, 'linear'); scene.showEffect('fireball', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 0.6, time: 2300, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('fireball', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 0.6, time: 2550, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('fireball', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 0.6, time: 2700, }, { scale: 6, opacity: 0, }, 'decel'); }, }, soulstealing7starstrike: { anim(scene, [attacker, defender]) { scene.backgroundEffect('linear-gradient(#043B13 55%, #3FBF99', 3600, 0.7); scene.backgroundEffect('#ffffff', 700, 0.7, 3300); scene.showEffect('fist', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, time: 300, }, { x: attacker.leftof(-20), y: attacker.y, z: attacker.behind(-40), opacity: 0, time: 500, }, 'decel'); scene.showEffect('fist', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, time: 350, }, { x: attacker.leftof(20), y: attacker.y - 5, z: attacker.behind(-40), opacity: 0, time: 600, }, 'decel'); scene.showEffect('fist', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 1, time: 400, }, { x: attacker.x, y: attacker.y + 5, z: attacker.behind(-40), opacity: 0, time: 700, }, 'decel'); scene.showEffect('iceball', { x: defender.x - 30, y: defender.y + 20, z: defender.z, scale: 0.1, opacity: 1, time: 250, }, { opacity: 0, scale: 0.5, time: 300, }, 'linear', 'explode'); scene.showEffect('iceball', { x: attacker.x, y: defender.y + 30, z: defender.z, scale: 0, opacity: 1, time: 450, }, { opacity: 0, scale: 0.5, time: 550, }, 'linear', 'explode'); scene.showEffect('iceball', { x: defender.x + 30, y: defender.y + 20, z: defender.z, scale: 0, opacity: 1, time: 650, }, { opacity: 0, scale: 0.5, time: 700, }, 'linear', 'explode'); scene.showEffect('iceball', { x: defender.x - 10, y: attacker.y, z: defender.z, scale: 0, opacity: 1, time: 850, }, { opacity: 0, scale: 0.5, time: 900, }, 'linear', 'explode'); scene.showEffect('iceball', { x: defender.x + 10, y: attacker.y, z: defender.z, scale: 0, opacity: 1, time: 1050, }, { opacity: 0, scale: 0.5, time: 1100, }, 'linear', 'explode'); scene.showEffect('iceball', { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 0, opacity: 1, time: 1250, }, { opacity: 0, scale: 0.5, time: 1300, }, 'linear', 'explode'); scene.showEffect('iceball', { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0, opacity: 1, time: 1450, }, { opacity: 0, scale: 0.5, time: 1500, }, 'linear', 'explode'); scene.showEffect('shine', { x: defender.x - 30, y: defender.y + 20, z: defender.z, scale: 0.1, opacity: 0.7, time: 300, }, { opacity: 0.9, scale: 0.2, time: 2500, }, 'decel', 'explode'); scene.showEffect('shine', { x: defender.x, y: defender.y + 30, z: defender.z, scale: 0.1, opacity: 0.7, time: 500, }, { opacity: 0.9, scale: 0.2, time: 2500, }, 'decel', 'explode'); scene.showEffect('shine', { x: defender.x + 30, y: defender.y + 20, z: defender.z, scale: 0.1, opacity: 0.7, time: 700, }, { opacity: 0.9, scale: 0.2, time: 2500, }, 'decel', 'explode'); scene.showEffect('shine', { x: defender.x - 10, y: defender.y, z: defender.z, scale: 0.1, opacity: 0.7, time: 900, }, { opacity: 0.9, scale: 0.2, time: 2500, }, 'decel', 'explode'); scene.showEffect('shine', { x: defender.x + 10, y: defender.y, z: defender.z, scale: 0.1, opacity: 0.7, time: 1100, }, { opacity: 0.9, scale: 0.2, time: 2500, }, 'decel', 'explode'); scene.showEffect('shine', { x: defender.x - 10, y: defender.y - 10, z: defender.z, scale: 0.1, opacity: 0.7, time: 1300, }, { opacity: 0.9, scale: 0.2, time: 2500, }, 'decel', 'explode'); scene.showEffect('shine', { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.1, opacity: 0.7, time: 1500, }, { opacity: 0.9, scale: 0.2, time: 2500, }, 'decel', 'explode'); scene.showEffect('zsymbol', { x: defender.x, y: defender.y + 10, z: defender.z, scale: 0.7, opacity: 1, time: 1600, }, { scale: 1, opacity: 0, time: 2600, }, 'decel'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, scale: 1, time: 1900, }, { x: attacker.x, y: attacker.y + 250, z: attacker.behind(-50), opacity: 0, time: 2300, }, 'accel'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, scale: 1, time: 1920, }, { x: attacker.x, y: attacker.y + 250, z: attacker.behind(-50), opacity: 0, time: 2320, }, 'accel'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, scale: 1, time: 1940, }, { x: attacker.x, y: attacker.y + 250, z: attacker.behind(-50), opacity: 0, time: 2340, }, 'accel'); scene.showEffect('shadowball', { x: defender.x, y: defender.y - 60, z: defender.z, scale: 1, xscale: 2, opacity: 0.5, time: 3350, }, { scale: 1, xscale: 12, opacity: 0, time: 3750, }, 'decel', 'fade'); scene.showEffect('shadowball', { x: defender.x, y: defender.y - 30, z: defender.z, opacity: 0.4, scale: 0.5, time: 3350, }, { scale: 3, opacity: 0, time: 3900, }, 'decel'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y + 350, z: defender.z, opacity: 1, scale: 5, yscale: 13, time: 3350, }, { opacity: 0.5, xscale: 0, time: 4200, }, 'accel', 'fade'); scene.showEffect('purplewisp', { x: defender.x, y: defender.y - 30, z: defender.z, opacity: 1, scale: 2, time: 3350, }, { opacity: 0.5, scale: 6, time: 4200, }, 'decel', 'explode'); attacker.anim({ z: attacker.behind(15), time: 200, }, 'decel'); attacker.anim({ z: defender.behind(-175), time: 300, }, 'accel'); attacker.anim({ z: attacker.z, time: 400, }, 'swing'); attacker.delay(1100); attacker.anim({ x: attacker.x, y: attacker.y + 250, z: attacker.behind(-50), time: 300, }, 'decel'); attacker.delay(300); attacker.anim({ x: defender.leftof(-10), y: defender.y, z: defender.behind(-10), opacity: 1, time: 300, }, 'linear'); attacker.anim({ x: defender.leftof(-10), y: defender.y, z: defender.behind(-10), opacity: 0, time: 0, }, 'linear'); attacker.delay(600); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.behind(70), opacity: 0, time: 1, }, 'linear'); attacker.delay(600); attacker.anim({ opacity: 1, time: 500, }, 'decel'); defender.delay(400); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.anim({ z: defender.behind(5), time: 75, }, 'swing'); defender.anim({ time: 75, }, 'swing'); defender.delay(2275); defender.anim({ z: defender.behind(5), opacity: 0, time: 75, }, 'swing'); defender.delay(600); defender.anim({ time: 150, }, 'swing'); }, }, searingsunrazesmash: { anim(scene, [attacker, defender]) { let xstep = (defender.x - attacker.x) / 5; let ystep = (defender.x - 200 - attacker.x) / 5; let zstep = (defender.z - attacker.z) / 5; scene.backgroundEffect(`url('https://${Config.routes.client}/fx/weather-trickroom.png')`, 700, 1); scene.backgroundEffect(`url('https://${Config.routes.client}/fx/bg-space.jpg')`, 2500, 1, 700); scene.backgroundEffect('#FFFFFF', 1500, 1, 2500); scene.showEffect('flareball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 2.5, opacity: 1, time: 1700, }, { scale: 3, opacity: 0, time: 2400, }, 'decel'); for (let i = 0; i < 5; i++) { scene.showEffect('flareball', { x: attacker.x + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 2, opacity: 0.8, time: 40 * i + 1900, }, { opacity: 0, time: 60 * i + 2700, }, 'linear'); } scene.showEffect('iceball', { x: attacker.leftof(-25), y: attacker.y + 250, z: attacker.z, scale: 1, opacity: 0.1, time: 2000, }, { x: defender.x, y: defender.y, z: defender.behind(5), scale: 1.5, time: 2400, }, 'accel', 'explode'); scene.showEffect('iceball', { x: attacker.leftof(-25), y: attacker.y + 250, z: attacker.z, scale: 1, opacity: 0.8, time: 2050, }, { x: defender.x, y: defender.y, z: defender.behind(5), scale: 1.5, time: 2450, }, 'accel', 'explode'); scene.showEffect('flareball', { x: defender.x, y: defender.y - 50, z: defender.z, scale: 1, xscale: 3, opacity: 0.5, time: 2275, }, { scale: 3, xscale: 8, opacity: 0.1, time: 2875, }, 'linear', 'fade'); scene.showEffect('fireball', { x: defender.x + 40, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 2500, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('fireball', { x: defender.x - 40, y: defender.y - 20, z: defender.z, scale: 0, opacity: 1, time: 2650, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('fireball', { x: defender.x + 10, y: defender.y + 20, z: defender.z, scale: 0, opacity: 1, time: 2800, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('fireball', { x: defender.x, y: defender.y, z: defender.z, scale: 0, opacity: 1, time: 2950, }, { scale: 6, opacity: 0, }, 'decel'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, opacity: 1, scale: 3, time: 2350, }, { scale: 13, time: 3700, }, 'linear', 'explode'); attacker.anim({ opacity: 0, time: 100, }); attacker.delay(500); attacker.anim({ opacity: 1, time: 100, }); attacker.delay(500); attacker.anim({ y: defender.y + 120, opacity: 0, time: 300, }, 'accel'); attacker.delay(2525); attacker.anim({ x: attacker.x, y: attacker.y + 40, z: attacker.behind(40), time: 1, }); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.z, time: 250, }, 'decel'); defender.anim({ opacity: 0, time: 100, }); defender.delay(500); defender.anim({ opacity: 1, time: 100, }); defender.delay(1875); defender.anim({ z: defender.behind(30), time: 500, opacity: 0, }, 'decel'); defender.delay(600); defender.anim({ time: 400, }, 'swing'); }, }, supercellslam: { anim(scene, [attacker, defender]) { scene.showEffect(attacker.sp, { x: defender.leftof(-10), y: attacker.y + 170, z: attacker.behind(-35), opacity: 0.3, time: 25, }, { x: defender.x, y: defender.y, z: defender.behind(0), }, 'ballistic', 'fade'); scene.showEffect(attacker.sp, { x: defender.leftof(-10), y: attacker.y + 170, z: attacker.behind(-35), opacity: 0.3, time: 75, }, { x: defender.x, y: defender.y, z: defender.behind(0), }, 'ballistic', 'fade'); scene.showEffect('electroball', { x: defender.x, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 500, }, { x: defender.x, y: defender.y + 10, z: defender.z, scale: 1.25, opacity: 0.4, time: 700, }, 'decel', 'fade'); scene.showEffect('electroball', { x: defender.x - 40, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 600, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 1.25, opacity: 0.4, time: 800, }, 'decel', 'fade'); scene.showEffect('electroball', { x: defender.x + 40, y: defender.y - 40, z: defender.z, scale: 1, opacity: 1, time: 700, }, { x: defender.x + 40, y: defender.y, z: defender.z, scale: 1.25, opacity: 0.4, time: 900, }, 'decel', 'fade'); attacker.anim({ x: defender.x, y: defender.y + 170, z: defender.behind(-30), time: 400, }, 'ballistic'); attacker.anim({ x: defender.x, y: defender.y + 5, z: defender.z, time: 200, }); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(500); defender.anim({ y: defender.y - 30, z: defender.behind(20), yscale: 0.5, time: 200, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, psychicnoise: { anim(scene, [attacker, defender]) { scene.showEffect('mistball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.8, time: 0, }, { x: defender.x, y: defender.y, z: defender.z, scale: 5, opacity: 0.1, time: 750, }, 'linear'); scene.showEffect('purplewisp', { x: defender.x - 20, y: defender.y + 20, z: defender.z, scale: 0, opacity: 1, time: 900, }, { scale: 2, opacity: 0, }, 'decel'); scene.showEffect('purplewisp', { x: defender.x + 20, y: defender.y + 20, z: defender.z, scale: 0, opacity: 1, time: 1050, }, { scale: 2, opacity: 0, }, 'decel'); }, }, fishiousrend: { anim(scene, [attacker, defender]) { scene.showEffect('waterwisp', { x: defender.x, y: defender.y + 80, z: defender.behind(-15), scale: 1.5, opacity: 0.8, time: 400, }, { y: defender.y, z: defender.z, scale: 0.5, opacity: 1, time: 500, }, 'linear', 'explode'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y - 25, z: defender.z, scale: 1, time: 500, }, { x: defender.x + 50, scale: 0.6, opacity: 0.3, time: 800, }, 'linear', 'fade'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y - 25, z: defender.z, scale: 1, time: 500, }, { x: defender.x - 50, scale: 0.6, opacity: 0.3, time: 800, }, 'linear', 'fade'); BattleOtherAnims.bite.anim(scene, [attacker, defender]); BattleOtherAnims.contactattack.anim(scene, [attacker, defender]); }, }, stompingtantrum: { anim(scene, [attacker, defender]) { BattleOtherAnims.anger.anim(scene, [attacker, defender]); attacker.anim({ y: attacker.y + 20, time: 175, }, 'swing'); attacker.anim({ y: attacker.y, time: 125, }, 'accel'); attacker.anim({ y: attacker.y + 40, time: 175, }, 'swing'); attacker.anim({ y: attacker.y, time: 75, }, 'accel'); let xf = [1, -1, 1, -1]; let yf = [1, -1, -1, 1]; let xf2 = [1, 0, -1, 0]; let yf2 = [0, 1, 0, -1]; scene.backgroundEffect('#000000', 1000, 0.3); for (let i = 0; i < 4; i++) { scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.8, time: 500, }, { x: attacker.x + 120 * xf[i], y: attacker.y, z: attacker.z + 68 * yf[i], scale: 0.5, opacity: 0, time: 800, }, 'decel', 'fade', { filter: 'hue-rotate(-15deg) brightness(0.5) saturate(0.7)' }); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.8, time: 500, }, { x: attacker.x + 113 * xf2[i], y: attacker.y + 5, z: attacker.z + 97 * yf2[i], scale: 0.5, opacity: 0, time: 800, }, 'decel', 'fade', { filter: 'hue-rotate(-15deg) brightness(0.5) saturate(0.7)' }); } defender.delay(500); scene.showEffect('rock1', { x: defender.x, y: defender.y - 5, z: defender.z, scale: 0.2, opacity: 1, time: 800, }, { x: defender.x, y: defender.y + 20, z: defender.z, scale: 0.4, opacity: 0, time: 1100, }, 'ballistic', 'fade'); scene.showEffect('rock2', { x: defender.x + 20, y: defender.y - 5, z: defender.z, scale: 0.2, opacity: 1, time: 800, }, { x: defender.x + 80, y: defender.y + 20, z: defender.z, scale: 0.4, opacity: 0, time: 1100, }, 'ballistic', 'fade'); scene.showEffect('rock3', { x: defender.x - 20, y: defender.y - 5, z: defender.z, scale: 0.2, opacity: 1, time: 800, }, { x: defender.x - 80, y: defender.y + 20, z: defender.z, scale: 0.4, opacity: 0, time: 1100, }, 'ballistic', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 550, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 850, }, 'accel', 'fade'); scene.showEffect(attacker.sp, { x: attacker.x, y: attacker.y, z: attacker.z, opacity: 0.3, time: 600, }, { x: defender.x, y: defender.y, z: defender.behind(-5), time: 900, }, 'accel', 'fade'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(280); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, temperflare: { anim(scene, [attacker, defender]) { BattleOtherAnims.anger.anim(scene, [attacker, defender]); attacker.anim({ y: attacker.y + 20, time: 175, }, 'swing'); attacker.anim({ y: attacker.y, time: 125, }, 'accel'); attacker.anim({ y: attacker.y + 40, time: 175, }, 'swing'); attacker.anim({ y: attacker.y, time: 75, }, 'accel'); defender.delay(500); let xf = [1, -1, 1, -1]; let yf = [1, -1, -1, 1]; let xf2 = [1, 0, -1, 0]; let yf2 = [0, 1, 0, -1]; scene.backgroundEffect('linear-gradient(#390000 30%, #B84038)', 1000, 0.3); for (let i = 0; i < 4; i++) { scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.8, time: 500, }, { x: attacker.x + 120 * xf[i], y: attacker.y, z: attacker.z + 68 * yf[i], scale: 0.5, opacity: 0, time: 800, }, 'decel', 'fade', { filter: 'hue-rotate(-15deg)' }); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.3, opacity: 0.8, time: 500, }, { x: attacker.x + 113 * xf2[i], y: attacker.y + 5, z: attacker.z + 97 * yf2[i], scale: 0.5, opacity: 0, time: 800, }, 'decel', 'fade', { filter: 'hue-rotate(-15deg)' }); scene.showEffect('blackwisp', { x: attacker.x + 120 * xf[i], y: attacker.y, z: attacker.z + 68 * yf[i], scale: 0.5, opacity: 0.5, time: 650, }, { x: attacker.x + 120 * xf[i], y: attacker.y + 30, z: attacker.z + 68 * yf[i], scale: 0.5, opacity: 0, time: 950, }, 'decel', 'explode'); } scene.showEffect('fireball', { x: defender.x + 20, y: defender.y - 5, z: defender.z, scale: 0.4, opacity: 1, time: 800, }, { x: defender.x + 80, y: defender.y + 20, z: defender.z, scale: 0.8, opacity: 0, time: 1100, }, 'ballistic', 'fade'); scene.showEffect('fireball', { x: defender.x, y: defender.y - 5, z: defender.z, scale: 0.4, opacity: 1, time: 800, }, { x: defender.x, y: defender.y + 20, z: defender.z, scale: 0.8, opacity: 0, time: 1100, }, 'ballistic', 'fade'); scene.showEffect('fireball', { x: defender.x - 20, y: defender.y - 5, z: defender.z, scale: 0.4, opacity: 1, time: 800, }, { x: defender.x - 80, y: defender.y + 20, z: defender.z, scale: 0.8, opacity: 0, time: 1100, }, 'ballistic', 'fade'); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 300, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(280); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, terastarstorm: { anim(scene, [attacker, ...defenders]) { scene.backgroundEffect('#000000', 900, 0.5); scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.75, opacity: 0.6, }, { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 1.25, opacity: 0, time: 200, }, 'decel', '', { filter: 'hue-rotate(0deg)' }); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1, opacity: 0.6, }, { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 1.5, opacity: 0, time: 200, }, 'decel'); for (let defender of defenders) { let xstep = (defender.x - attacker.x) / 6; let ystep = (defender.y - 200 - attacker.y) / 6; let zstep = (defender.z - attacker.z) / 6; for (let i = 0; i < 6; i++) { scene.showEffect('electroball', { x: attacker.x + xstep * (i + 1), y: (attacker.y + 200) + ystep * (i + 1), z: attacker.z + zstep * (i + 1), scale: 0.7, opacity: 0.6, time: 40 * i + 300, }, { opacity: 0, time: 100 * i + 500, }, 'linear', '', { filter: `hue-rotate(${60 * i + 30}deg)` }); } scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 300, }, { x: defender.x + 30, y: defender.y + 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 500, }, 'linear', 'explode', { filter: 'hue-rotate(30deg)' }); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 375, }, { x: defender.x + 20, y: defender.y - 30, z: defender.z, scale: 0.6, opacity: 0.3, time: 575, }, 'linear', 'explode', { filter: 'hue-rotate(90deg)' }); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 425, }, { x: defender.x - 10, y: defender.y + 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 625, }, 'linear', 'explode', { filter: 'hue-rotate(150deg)' }); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 450, }, { x: defender.x - 30, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 650, }, 'linear', 'explode', { filter: 'hue-rotate(210deg)' }); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 500, }, { x: defender.x + 10, y: defender.y - 10, z: defender.z, scale: 0.6, opacity: 0.3, time: 700, }, 'linear', 'explode', { filter: 'hue-rotate(270deg)' }); scene.showEffect('electroball', { x: attacker.x, y: attacker.y + 200, z: attacker.z, scale: 0.4, opacity: 0.6, time: 575, }, { x: defender.x - 20, y: defender.y, z: defender.z, scale: 0.6, opacity: 0.3, time: 775, }, 'linear', 'explode', { filter: 'hue-rotate(330deg)' }); } }, }, thunderclap: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 200, 0.2); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 1.5, opacity: 0.8, }, { scale: 3, opacity: 0.2, time: 200, }, 'accel', 'fade', { filter: 'hue-rotate(150deg)' }); scene.showEffect('lightning', { x: defender.x, y: defender.y + 150, z: defender.z, yscale: 0, xscale: 2, time: 200, }, { y: defender.y + 50, yscale: 1, xscale: 1.5, opacity: 0.8, time: 400, }, 'linear', 'fade', { filter: 'hue-rotate(180deg)' }); }, }, mightycleave: { anim(scene, [attacker, defender]) { scene.showEffect('sword', { x: attacker.leftof(-10), y: attacker.y - 10, z: attacker.z, scale: 0.5, opacity: 1, }, { y: attacker.y + 10, scale: 1, opacity: 0.4, time: 300, }, 'decel', 'fade'); attacker.delay(300); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(70), time: 300, opacity: 0.5, }, 'accel'); attacker.anim({ x: defender.x, y: defender.x, z: defender.behind(100), opacity: 0, time: 100, }, 'linear'); attacker.anim({ x: attacker.x, y: attacker.y, z: attacker.behind(70), opacity: 0, time: 1, }, 'linear'); attacker.anim({ opacity: 1, time: 500, }, 'decel'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, time: 500, xscale: 1.2, yscale: 0.4, opacity: 0.8, }, { time: 760, xscale: 1.4, yscale: 0.6, opacity: 0.4, }, 'accel', 'explode', { filter: 'hue-rotate(180deg)', rotate: '-45deg' }); scene.showEffect('rightslash', { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, time: 500, }, { scale: 2, opacity: 0, time: 760, }, 'accel', 'fade'); defender.delay(760); defender.anim({ z: defender.behind(30), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, spiritbreak: { anim(scene, [attacker, defender]) { scene.backgroundEffect('#000000', 1000, 0.3); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.4, time: 425, opacity: 0.2, }, { scale: 0.6, time: 750, opacity: 1, }, 'decel', 'fade'); scene.showEffect('mistball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.6, time: 750, opacity: 1, }, { time: 1000, scale: 2.5, opacity: 0.2, }, 'decel', 'explode'); scene.showEffect('iceball', { x: defender.x, y: defender.y, z: defender.z, scale: 2, time: 850, opacity: 0.4, }, { time: 1000, scale: 3, opacity: 0.1, }, 'decel', 'explode'); scene.showEffect('shine', { x: defender.x, y: defender.y, z: defender.z, time: 750, scale: 0.8, }, { opacity: 0.4, time: 800, }, 'decel', 'explode', { filter: 'invert(1)' }); scene.showEffect('impact', { x: defender.x, y: defender.y, z: defender.z, time: 875, scale: 0.8, }, { opacity: 0.4, time: 925, }, 'decel', 'explode', { filter: 'brightness(50%)' }); attacker.anim({ x: defender.leftof(20), y: defender.y, z: defender.behind(-20), time: 400, }, 'ballistic2Under'); attacker.anim({ x: defender.x, y: defender.y, z: defender.z, time: 50, }); attacker.anim({ time: 500, }, 'ballistic2'); defender.delay(750); defender.anim({ x: defender.leftof(15), y: defender.y, z: defender.behind(20), time: 50, }, 'swing'); defender.anim({ time: 200, }, 'swing'); }, }, stoneaxe: { anim(scene, [attacker, defender]) { BattleOtherAnims.slashattack.anim(scene, [attacker, defender]); scene.showEffect('rock1', { x: defender.x, y: defender.y, z: defender.z, scale: 0.1, opacity: 0.5, time: 500, }, { x: defender.x - 30, y: defender.y + 15, z: defender.z, scale: 0.2, opacity: 1, time: 800, }, 'ballistic', 'fade'); scene.showEffect('rock3', { x: defender.x, y: defender.y, z: defender.z, scale: 0.1, opacity: 0.5, time: 500, }, { x: defender.x + 36, y: defender.y + 45, z: defender.z, scale: 0.2, opacity: 1, time: 800, }, 'ballistic', 'fade'); scene.showEffect('rock2', { x: defender.x, y: defender.y, z: defender.z, scale: 0.1, opacity: 0.5, time: 500, }, { x: defender.x + 40, y: defender.y - 25, z: defender.z, scale: 0.2, opacity: 1, time: 800, }, 'ballistic', 'fade'); scene.showEffect('rock3', { x: defender.x, y: defender.y, z: defender.z, scale: 0.1, opacity: 0.5, time: 500, }, { x: defender.x - 20, y: defender.y - 25, z: defender.z, scale: 0.2, opacity: 1, time: 800, }, 'ballistic', 'fade'); }, }, malignantchain: { anim(scene, [attacker, defender]) { // Swing backward attacker.anim({ z: attacker.behind(15), time: 200, }, 'decel'); attacker.anim({ z: defender.behind(-170), time: 100, }, 'accel'); attacker.anim({ z: attacker.z, time: 300, }, 'swing'); // Launch the chain scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.5, time: 275, }, { x: defender.x, y: defender.y, z: defender.z, time: 500, }, 'linear', '', { filter: 'hue-rotate(30deg) brightness(1.5)' }); // Chain expansion for (let i = 0; i < 5; i++) { scene.showEffect('shadowball', { x: defender.x, y: defender.y, z: defender.z, scale: 0.5, opacity: 0.5, time: 550, }, { x: defender.x + 30 * (i - 2), time: 950, }, 'decel', 'fade', { filter: 'hue-rotate(30deg) brightness(1.5)' }); } // Defender gets squeezed defender.delay(550); defender.anim({ xscale: 0.6, time: 200, }); defender.delay(200); defender.anim({ xscale: 1, time: 150, }); // Poison particles fly out let x2 = [1, -1, -1, 1]; let y2 = [1, 1, -1, -1]; for (let i = 0; i < 4; i++) { scene.showEffect('purplewisp', { x: defender.x, y: defender.y, z: defender.z, scale: 0.7, time: 950, }, { x: defender.x + x2[i] * 50, y: defender.y + y2[i] * 38, time: 1100, }, 'ballistic', 'fade', { filter: 'hue-rotate(15deg)' }); } }, }, hardpress: { anim(scene, [attacker, defender]) { scene.showEffect('mistball', { x: defender.leftof(-60), y: defender.y + 20, z: defender.z, scale: 0.6, time: 0, }, { y: defender.y, time: 200, }, 'accel', 'fade', { filter: 'saturate(0)' }); scene.showEffect('mistball', { x: defender.leftof(-60), y: defender.y, z: defender.z, scale: 0.6, time: 200, }, { time: 400, }, 'accel', 'fade', { filter: 'saturate(0)' }); scene.showEffect('mistball', { x: defender.leftof(60), y: defender.y + 20, z: defender.z, scale: 0.6, time: 200, }, { y: defender.y, time: 400, }, 'accel', 'fade', { filter: 'saturate(0)' }); let xPos = [1, 0, -1, 0]; let zPos = [0, 1, 0, -1]; for (let i = 0; i < 4; i++) { scene.showEffect('mudwisp', { x: defender.leftof(-60), y: defender.y - 15, z: defender.z, scale: 0.5, opacity: 0.6, time: 200, }, { x: defender.leftof(-60) + 15 * xPos[i], z: defender.z + 20 * zPos[i], scale: 0.2, time: 400, }, 'ballistic2Under', 'fade'); scene.showEffect('mudwisp', { x: defender.leftof(60), y: defender.y - 15, z: defender.z, scale: 0.5, opacity: 0.6, time: 400, }, { x: defender.leftof(60) + 15 * xPos[i], z: defender.z + 20 * zPos[i], scale: 0.2, time: 600, }, 'ballistic2Under', 'fade'); } scene.showEffect('mistball', { x: defender.leftof(-60), y: defender.y, z: defender.z, scale: 0.6, time: 450, }, { x: defender.leftof(-30), time: 650, }, 'accel', 'fade', { filter: 'saturate(0)' }); scene.showEffect('mistball', { x: defender.leftof(60), y: defender.y, z: defender.z, scale: 0.6, time: 450, }, { x: defender.leftof(30), time: 650, }, 'accel', 'fade', { filter: 'saturate(0)' }); scene.showEffect('mistball', { x: defender.leftof(-30), y: defender.y, z: defender.z, scale: 0.6, time: 650, }, { time: 850, }, 'linear', 'fade', { filter: 'saturate(0)' }); scene.showEffect('mistball', { x: defender.leftof(30), y: defender.y, z: defender.z, scale: 0.6, time: 650, }, { time: 850, }, 'linear', 'fade', { filter: 'saturate(0)' }); attacker.delay(450); attacker.anim({ x: defender.x, y: defender.y, z: defender.behind(-5), time: 200, }, 'accel'); attacker.anim({ time: 500, }, 'ballistic2Back'); defender.delay(450); defender.anim({ xscale: 0.6, yscale: 1.3, time: 200, }); defender.delay(200); defender.anim({ xscale: 1, yscale: 1, time: 150, }); }, }, dragoncheer: { anim(scene, [attacker, defender]) { // Attacker cheers for (let i = 0; i < 3; i++) { scene.showEffect('shadowball', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.6, time: 150 * i, }, { z: attacker.behind(-50), scale: 2, opacity: 0, time: 400 + 200 * i, }, 'linear'); scene.showEffect('wisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.7, time: 150 * i, }, { z: attacker.behind(-50), scale: 5, opacity: 0, time: 400 + 200 * i, }, 'linear'); scene.showEffect('purplewisp', { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0, opacity: 0.5, time: 150 * i, }, { z: attacker.behind(-50), scale: 2, opacity: 0, time: 400 + 200 * i, }, 'linear'); } // Defender focuses scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0.2, time: 800, }, { scale: 0, opacity: 1, time: 1100, }, 'linear'); scene.showEffect('wisp', { x: defender.x, y: defender.y, z: defender.z, scale: 2, opacity: 0.2, time: 1000, }, { scale: 0, opacity: 1, time: 1300, }, 'linear'); }, }, upperhand: { anim(scene, [attacker, defender]) { let chopDirection = defender.isFrontSprite ? 'leftchop' : 'rightchop'; BattleOtherAnims.fastattack.anim(scene, [attacker, defender]); scene.showEffect(chopDirection, { x: defender.leftof(20), y: defender.y + 10, z: defender.behind(-15), scale: 0.5, opacity: 0.5, time: 0, }, { time: 200, }, 'linear', 'fade'); scene.showEffect(chopDirection, { x: defender.leftof(20), y: defender.y + 10, z: defender.behind(-15), scale: 0.5, opacity: 0.5, time: 200, }, { z: defender.behind(10), opacity: 0.8, time: 300, }, 'decel', 'fade'); scene.showEffect(chopDirection, { x: defender.leftof(20), y: defender.y + 10, z: defender.behind(10), scale: 0.5, opacity: 0.8, time: 300, }, { opacity: 0.5, time: 400, }, 'linear', 'fade'); }, }, revivalblessing: { anim(scene, [attacker]) { scene.backgroundEffect('#000000', 1000, 0.5); BattleOtherAnims.shake.anim(scene, [attacker]); scene.showEffect('shine', { x: attacker.x + 40, y: attacker.y - 40, z: attacker.z, scale: 0.3, opacity: 0.7, time: 0, }, { y: attacker.y + 60, opacity: 0, time: 400, }, 'accel'); scene.showEffect('shine', { x: attacker.x - 40, y: attacker.y - 40, z: attacker.z, scale: 0.3, opacity: 0.7, time: 200, }, { y: attacker.y + 60, opacity: 0, time: 600, }, 'accel'); scene.showEffect('shine', { x: attacker.x, y: attacker.y - 40, z: attacker.z, scale: 0.3, opacity: 0.7, time: 400, }, { y: attacker.y + 60, opacity: 0, time: 800, }, 'accel'); let xf = [1, -1, -1, 1]; let yf = [1, 1, -1, -1]; let xf2 = [1, 0, -1, 0]; let yf2 = [0, 1, 0, -1]; for (let i = 0; i < 4; i++) { scene.showEffect('wisp', { x: attacker.x + 50 * xf[i], y: attacker.y + 50 * yf[i], z: attacker.z, scale: 0.3, opacity: 0.8, time: 0, }, { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.5, time: 800, }, 'linear', 'fade'); scene.showEffect('wisp', { x: attacker.x + 70 * xf2[i], y: attacker.y + 70 * yf2[i], z: attacker.z, scale: 0.3, opacity: 0.8, time: 0, }, { x: attacker.x, y: attacker.y, z: attacker.z, scale: 0.5, opacity: 0.5, time: 800, }, 'linear', 'fade'); } scene.showEffect('iceball', { x: attacker.x, y: attacker.y, z: attacker.z, xscale: 0.4, yscale: 0.2, opacity: 0.6, time: 800, }, { xscale: 2.4, yscale: 1, opacity: 0, time: 1000, }, 'decel', 'fade'); }, }, blazingtorque: { anim(scene, [attacker, defender]) { // rev up once in place, then flash twice more on the way there, and finally explode on contact const size = [2, 3]; const opct = [0.3, 0.6]; const tick = 120; const stepX = (defender.x - attacker.x) / 10; const stepY = (defender.y - attacker.y) / 10; const stepZ = (defender.z - attacker.z) / 10; const tallerBy = 35; const projectileSprite = 'fireball'; const projectileSpeed = 10; // mimic attacker's acceleration; 1 + 2 + 3 + 4 = 10 const steps = [0, 0, 0, 1, 3, 6, 10, 12.5]; let ball: JQuery, wisp: JQuery; for (let i = 0; i < 7; i++) { let offset1 = steps[i]; let offset2 = steps[i + 1]; const ballArgs: Parameters = ['flareball', { x: attacker.x + offset1 * stepX, y: attacker.y + offset1 * stepY + tallerBy, z: attacker.z + offset1 * stepZ, scale: size[i % 2], opacity: opct[i % 2], time: 0, }, { x: attacker.x + offset2 * stepX, y: attacker.y + offset2 * stepY + tallerBy, z: attacker.z + offset2 * stepZ, scale: size[(i + 1) % 2], opacity: opct[(i + 1) % 2], time: tick, }, 'swing', i === 6 ? 'explode' : 'gone', { filter: 'hue-rotate(-12deg)' }]; ball = ball! ? scene.animateEffect(ball, ...ballArgs) : scene.showEffect(...ballArgs); const wispArgs: Parameters = ['wisp', { x: attacker.x + offset1 * stepX, y: attacker.y + offset1 * stepY + tallerBy, z: attacker.z + offset1 * stepZ, scale: size[i % 2], opacity: opct[(i + 1) % 2], time: 0, }, { x: attacker.x + offset2 * stepX, y: attacker.y + offset2 * stepY + tallerBy, z: attacker.z + offset2 * stepZ, scale: size[(i + 1) % 2], opacity: opct[i % 2], time: tick, }, 'swing', i === 6 ? 'explode' : 'gone']; wisp = wisp! ? scene.animateEffect(wisp, ...wispArgs) : scene.showEffect(...wispArgs); scene.showEffect(projectileSprite, { x: attacker.x + offset1 * stepX + projectileSpeed * ((i % 2) ? 2 : -2), y: attacker.y + offset1 * stepY, z: attacker.z + offset1 * stepZ, opacity: 0.5, time: i * tick, }, { x: attacker.x + offset1 * stepX + projectileSpeed * ((i % 2) ? 3 : -3), y: attacker.y + offset1 * stepY - projectileSpeed, z: attacker.behind(projectileSpeed) + offset1 * stepZ, time: (i + 1) * tick, }, 'ballistic', 'fade'); scene.showEffect(projectileSprite, { x: attacker.x + offset1 * stepX + projectileSpeed * (((i + 1) % 2) ? 2 : -2), y: attacker.y + offset1 * stepY, z: attacker.z + offset1 * stepZ, opacity: 0.5, time: i * tick, }, { x: attacker.x + offset1 * stepX + projectileSpeed * (((i + 1) % 2) ? 3 : -3), y: attacker.y + offset1 * stepY - projectileSpeed, z: attacker.behind(projectileSpeed) + offset1 * stepZ, time: (i + 1) * tick, }, 'ballistic', 'fade'); } // attacker movement attacker.delay(tick * 2); attacker.anim({ x: attacker.x + stepX * 4, y: attacker.y + stepY * 4, z: attacker.z + stepZ * 4, time: tick * 7 / 3, }, 'accel'); attacker.anim({ time: tick * 7 / 3 + 100, }, 'ballistic2Back'); defender.delay(tick * 6 - 20); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, combattorque: { anim(scene, [attacker, defender]) { // rev up once in place, then flash twice more on the way there, and finally explode on contact const size = [2, 3]; const opct = [0.3, 0.6]; const tick = 120; const stepX = (defender.x - attacker.x) / 10; const stepY = (defender.y - attacker.y) / 10; const stepZ = (defender.z - attacker.z) / 10; const tallerBy = 35; const projectileSprite = 'fireball'; const projectileSpeed = 10; // mimic attacker's acceleration; 1 + 2 + 3 + 4 = 10 const steps = [0, 0, 0, 1, 3, 6, 10, 12.5]; let ball: JQuery, wisp: JQuery; for (let i = 0; i < 7; i++) { let offset1 = steps[i]; let offset2 = steps[i + 1]; const ballArgs: Parameters = ['flareball', { x: attacker.x + offset1 * stepX, y: attacker.y + offset1 * stepY + tallerBy, z: attacker.z + offset1 * stepZ, scale: size[i % 2], opacity: opct[i % 2], time: 0, }, { x: attacker.x + offset2 * stepX, y: attacker.y + offset2 * stepY + tallerBy, z: attacker.z + offset2 * stepZ, scale: size[(i + 1) % 2], opacity: opct[(i + 1) % 2], time: tick, }, 'swing', i === 6 ? 'explode' : 'gone', { filter: 'brightness(1.5)' }]; ball = ball! ? scene.animateEffect(ball, ...ballArgs) : scene.showEffect(...ballArgs); const wispArgs: Parameters = ['waterwisp', { x: attacker.x + offset1 * stepX, y: attacker.y + offset1 * stepY + tallerBy, z: attacker.z + offset1 * stepZ, scale: size[i % 2], opacity: opct[(i + 1) % 2] * 0.75, time: 0, }, { x: attacker.x + offset2 * stepX, y: attacker.y + offset2 * stepY + tallerBy, z: attacker.z + offset2 * stepZ, scale: size[(i + 1) % 2], opacity: opct[i % 2] * 0.75, time: tick, }, 'swing', i === 6 ? 'explode' : 'gone']; wisp = wisp! ? scene.animateEffect(wisp, ...wispArgs) : scene.showEffect(...wispArgs); scene.showEffect(projectileSprite, { x: attacker.x + offset1 * stepX + projectileSpeed * ((i % 2) ? 2 : -2), y: attacker.y + offset1 * stepY, z: attacker.z + offset1 * stepZ, opacity: 0.5, time: i * tick, }, { x: attacker.x + offset1 * stepX + projectileSpeed * ((i % 2) ? 3 : -3), y: attacker.y + offset1 * stepY - projectileSpeed, z: attacker.behind(projectileSpeed) + offset1 * stepZ, time: (i + 1) * tick, }, 'ballistic', 'fade', { filter: 'brightness(1.5) hue-rotate(15deg)' }); scene.showEffect(projectileSprite, { x: attacker.x + offset1 * stepX + projectileSpeed * (((i + 1) % 2) ? 2 : -2), y: attacker.y + offset1 * stepY, z: attacker.z + offset1 * stepZ, opacity: 0.5, time: i * tick, }, { x: attacker.x + offset1 * stepX + projectileSpeed * (((i + 1) % 2) ? 3 : -3), y: attacker.y + offset1 * stepY - projectileSpeed, z: attacker.behind(projectileSpeed) + offset1 * stepZ, time: (i + 1) * tick, }, 'ballistic', 'fade', { filter: 'brightness(1.5) hue-rotate(15deg)' }); } // attacker movement attacker.delay(tick * 2); attacker.anim({ x: attacker.x + stepX * 4, y: attacker.y + stepY * 4, z: attacker.z + stepZ * 4, time: tick * 7 / 3, }, 'accel'); attacker.anim({ time: tick * 7 / 3 + 100, }, 'ballistic2Back'); defender.delay(tick * 6 - 20); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, magicaltorque: { anim(scene, [attacker, defender]) { // rev up once in place, then flash twice more on the way there, and finally explode on contact const size = [2, 3]; const opct = [0.3, 0.6]; const tick = 120; const stepX = (defender.x - attacker.x) / 10; const stepY = (defender.y - attacker.y) / 10; const stepZ = (defender.z - attacker.z) / 10; const tallerBy = 35; const projectileSprite = 'shine'; const projectileSpeed = 10; // mimic attacker's acceleration; 1 + 2 + 3 + 4 = 10 const steps = [0, 0, 0, 1, 3, 6, 10, 12.5]; let ball: JQuery, wisp: JQuery; for (let i = 0; i < 7; i++) { let offset1 = steps[i]; let offset2 = steps[i + 1]; const ballArgs: Parameters = [i < 6 ? 'iceball' : 'mistball', { x: attacker.x + offset1 * stepX, y: attacker.y + offset1 * stepY + tallerBy, z: attacker.z + offset1 * stepZ, scale: size[i % 2], opacity: opct[i % 2], time: 0, }, { x: attacker.x + offset2 * stepX, y: attacker.y + offset2 * stepY + tallerBy, z: attacker.z + offset2 * stepZ, scale: size[(i + 1) % 2], opacity: opct[(i + 1) % 2], time: tick, }, 'swing', ...(i === 6 ? ['explode'] : ['gone', { filter: 'saturate(300%)' }]) as [string, JQuery.PlainObject]]; ball = ball! ? scene.animateEffect(ball, ...ballArgs) : scene.showEffect(...ballArgs); const wispArgs: Parameters = ['wisp', { x: attacker.x + offset1 * stepX, y: attacker.y + offset1 * stepY + tallerBy, z: attacker.z + offset1 * stepZ, scale: size[i % 2], opacity: opct[(i + 1) % 2], time: 0, }, { x: attacker.x + offset2 * stepX, y: attacker.y + offset2 * stepY + tallerBy, z: attacker.z + offset2 * stepZ, scale: size[(i + 1) % 2], opacity: opct[i % 2], time: tick, }, 'swing', i === 6 ? 'explode' : 'gone']; wisp = wisp! ? scene.animateEffect(wisp, ...wispArgs) : scene.showEffect(...wispArgs); scene.showEffect(projectileSprite, { x: attacker.x + offset1 * stepX + projectileSpeed * ((i % 2) ? 2 : -2), y: attacker.y + offset1 * stepY, z: attacker.z + offset1 * stepZ, scale: 0.5, opacity: 0.5, time: i * tick, }, { x: attacker.x + offset1 * stepX + projectileSpeed * ((i % 2) ? 3 : -3), y: attacker.y + offset1 * stepY - projectileSpeed, z: attacker.behind(projectileSpeed) + offset1 * stepZ, time: (i + 1) * tick, }, 'ballistic', 'fade', { filter: 'hue-rotate(90deg) saturate(300%)' }); scene.showEffect(projectileSprite, { x: attacker.x + offset1 * stepX + projectileSpeed * (((i + 1) % 2) ? 2 : -2), y: attacker.y + offset1 * stepY, z: attacker.z + offset1 * stepZ, scale: 0.5, opacity: 0.5, time: i * tick, }, { x: attacker.x + offset1 * stepX + projectileSpeed * (((i + 1) % 2) ? 3 : -3), y: attacker.y + offset1 * stepY - projectileSpeed, z: attacker.behind(projectileSpeed) + offset1 * stepZ, time: (i + 1) * tick, }, 'ballistic', 'fade', { filter: 'hue-rotate(90deg) saturate(300%)' }); } // attacker movement attacker.delay(tick * 2); attacker.anim({ x: attacker.x + stepX * 4, y: attacker.y + stepY * 4, z: attacker.z + stepZ * 4, time: tick * 7 / 3, }, 'accel'); attacker.anim({ time: tick * 7 / 3 + 100, }, 'ballistic2Back'); defender.delay(tick * 6 - 20); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, noxioustorque: { anim(scene, [attacker, defender]) { // rev up once in place, then flash twice more on the way there, and finally explode on contact const size = [2, 3]; const opct = [0.3, 0.6]; const tick = 120; const stepX = (defender.x - attacker.x) / 10; const stepY = (defender.y - attacker.y) / 10; const stepZ = (defender.z - attacker.z) / 10; const tallerBy = 35; const projectileSprite = 'bluefireball'; const projectileSpeed = 10; // mimic attacker's acceleration; 1 + 2 + 3 + 4 = 10 const steps = [0, 0, 0, 1, 3, 6, 10, 12.5]; let ball: JQuery, wisp: JQuery; for (let i = 0; i < 7; i++) { let offset1 = steps[i]; let offset2 = steps[i + 1]; const ballArgs: Parameters = ['mistball', { x: attacker.x + offset1 * stepX, y: attacker.y + offset1 * stepY + tallerBy, z: attacker.z + offset1 * stepZ, scale: size[i % 2], opacity: opct[i % 2], time: 0, }, { x: attacker.x + offset2 * stepX, y: attacker.y + offset2 * stepY + tallerBy, z: attacker.z + offset2 * stepZ, scale: size[(i + 1) % 2], opacity: opct[(i + 1) % 2], time: tick, }, 'swing', i === 6 ? 'explode' : '']; ball = ball! ? scene.animateEffect(ball, ...ballArgs) : scene.showEffect(...ballArgs); const wispArgs: Parameters = ['waterwisp', { x: attacker.x + offset1 * stepX, y: attacker.y + offset1 * stepY + tallerBy, z: attacker.z + offset1 * stepZ, scale: size[i % 2], opacity: opct[(i + 1) % 2], time: 0, }, { x: attacker.x + offset2 * stepX, y: attacker.y + offset2 * stepY + tallerBy, z: attacker.z + offset2 * stepZ, scale: size[(i + 1) % 2], opacity: opct[i % 2], time: tick, }, 'swing', i === 6 ? 'explode' : '', { filter: 'brightness(1.5)' }]; wisp = wisp! ? scene.animateEffect(wisp, ...wispArgs) : scene.showEffect(...wispArgs); scene.showEffect(projectileSprite, { x: attacker.x + offset1 * stepX + projectileSpeed * ((i % 2) ? 2 : -2), y: attacker.y + offset1 * stepY, z: attacker.z + offset1 * stepZ, opacity: 0.5, time: i * tick, }, { x: attacker.x + offset1 * stepX + projectileSpeed * ((i % 2) ? 3 : -3), y: attacker.y + offset1 * stepY - projectileSpeed, z: attacker.behind(projectileSpeed) + offset1 * stepZ, time: (i + 1) * tick, }, 'ballistic', 'fade'); scene.showEffect(projectileSprite, { x: attacker.x + offset1 * stepX + projectileSpeed * (((i + 1) % 2) ? 2 : -2), y: attacker.y + offset1 * stepY, z: attacker.z + offset1 * stepZ, opacity: 0.5, time: i * tick, }, { x: attacker.x + offset1 * stepX + projectileSpeed * (((i + 1) % 2) ? 3 : -3), y: attacker.y + offset1 * stepY - projectileSpeed, z: attacker.behind(projectileSpeed) + offset1 * stepZ, time: (i + 1) * tick, }, 'ballistic', 'fade'); } // attacker movement attacker.delay(tick * 2); attacker.anim({ x: attacker.x + stepX * 4, y: attacker.y + stepY * 4, z: attacker.z + stepZ * 4, time: tick * 7 / 3, }, 'accel'); attacker.anim({ time: tick * 7 / 3 + 100, }, 'ballistic2Back'); defender.delay(tick * 6 - 20); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, wickedtorque: { anim(scene, [attacker, defender]) { // rev up once in place, then flash twice more on the way there, and finally explode on contact const size = [2, 3]; const opct = [0.3, 0.6]; const tick = 120; const stepX = (defender.x - attacker.x) / 10; const stepY = (defender.y - attacker.y) / 10; const stepZ = (defender.z - attacker.z) / 10; const tallerBy = 35; const projectileSprite = 'fireball'; const projectileSpeed = 10; // mimic attacker's acceleration; 1 + 2 + 3 + 4 = 10 const steps = [0, 0, 0, 1, 3, 6, 10, 12.5]; let ball: JQuery, wisp: JQuery; for (let i = 0; i < 7; i++) { let offset1 = steps[i]; let offset2 = steps[i + 1]; const ballArgs: Parameters = ['flareball', { x: attacker.x + offset1 * stepX, y: attacker.y + offset1 * stepY + tallerBy, z: attacker.z + offset1 * stepZ, scale: size[i % 2], opacity: opct[i % 2] * 1.5, time: 0, }, { x: attacker.x + offset2 * stepX, y: attacker.y + offset2 * stepY + tallerBy, z: attacker.z + offset2 * stepZ, scale: size[(i + 1) % 2], opacity: opct[(i + 1) % 2] * 1.5, time: tick, }, 'swing', i === 6 ? 'explode' : '', { filter: 'hue-rotate(-45deg)' }]; ball = ball! ? scene.animateEffect(ball, ...ballArgs) : scene.showEffect(...ballArgs); const wispArgs: Parameters = ['blackwisp', { x: attacker.x + offset1 * stepX, y: attacker.y + offset1 * stepY + tallerBy, z: attacker.z + offset1 * stepZ, scale: size[i % 2], opacity: 0.5, time: 0, }, { x: attacker.x + offset2 * stepX, y: attacker.y + offset2 * stepY + tallerBy, z: attacker.z + offset2 * stepZ, scale: size[(i + 1) % 2], time: tick, }, 'swing', i === 6 ? 'explode' : '']; wisp = wisp! ? scene.animateEffect(wisp, ...wispArgs) : scene.showEffect(...wispArgs); scene.showEffect(projectileSprite, { x: attacker.x + offset1 * stepX + projectileSpeed * ((i % 2) ? 2 : -2), y: attacker.y + offset1 * stepY, z: attacker.z + offset1 * stepZ, opacity: 0.5, time: i * tick, }, { x: attacker.x + offset1 * stepX + projectileSpeed * ((i % 2) ? 3 : -3), y: attacker.y + offset1 * stepY - projectileSpeed, z: attacker.behind(projectileSpeed) + offset1 * stepZ, time: (i + 1) * tick, }, 'ballistic', 'fade', { filter: 'hue-rotate(-45deg)' }); scene.showEffect(projectileSprite, { x: attacker.x + offset1 * stepX + projectileSpeed * (((i + 1) % 2) ? 2 : -2), y: attacker.y + offset1 * stepY, z: attacker.z + offset1 * stepZ, opacity: 0.5, time: i * tick, }, { x: attacker.x + offset1 * stepX + projectileSpeed * (((i + 1) % 2) ? 3 : -3), y: attacker.y + offset1 * stepY - projectileSpeed, z: attacker.behind(projectileSpeed) + offset1 * stepZ, time: (i + 1) * tick, }, 'ballistic', 'fade', { filter: 'hue-rotate(-45deg)' }); } // attacker movement attacker.delay(tick * 2); attacker.anim({ x: attacker.x + stepX * 4, y: attacker.y + stepY * 4, z: attacker.z + stepZ * 4, time: tick * 7 / 3, }, 'accel'); attacker.anim({ time: tick * 7 / 3 + 100, }, 'ballistic2Back'); defender.delay(tick * 6 - 20); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 300, }, 'swing'); }, }, tachyoncutter: { anim(scene, [attacker, defender]) { defender.delay(400); defender.anim({ z: defender.behind(15), time: 100, }, 'swing'); defender.anim({ time: 200, }, 'swing'); defender.anim({ z: defender.behind(20), time: 100, }, 'swing'); defender.anim({ time: 200, }, 'swing'); scene.showEffect('waterwisp', { x: attacker.leftof(-10), y: attacker.y - 10, z: attacker.z, scale: 0.7, opacity: 1, }, { y: attacker.y + 10, scale: 1.4, opacity: 0.2, time: 300, }, 'decel', 'fade'); scene.showEffect('sword', { x: attacker.leftof(-10), y: attacker.y - 10, z: attacker.z, scale: 0.5, opacity: 1, }, { y: attacker.y + 10, scale: 1, opacity: 0.4, time: 300, }, 'decel', 'fade'); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, time: 500, xscale: 1.2, yscale: 0.4, opacity: 0.8, }, { time: 720, xscale: 1.4, yscale: 0.6, opacity: 0, }, 'accel', 'explode', { rotate: '45deg' }); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, time: 730, xscale: 1.2, yscale: 0.4, opacity: 0.8, }, { time: 930, xscale: 1.4, yscale: 0.6, opacity: 0.4, }, 'accel', 'explode', { rotate: '45deg' }); scene.showEffect('waterwisp', { x: defender.x, y: defender.y, z: defender.z, time: 730, xscale: 1.2, yscale: 0.4, opacity: 0.8, }, { time: 930, xscale: 1.4, yscale: 0.6, opacity: 0.4, }, 'accel', 'explode', { rotate: '-45deg' }); scene.showEffect('leftslash', { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, opacity: 0.6, time: 500, }, { scale: 2, opacity: 0, time: 720, }, 'accel', 'fade', { filter: 'brightness(5)' }); scene.showEffect('leftslash', { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, opacity: 0.6, time: 730, }, { scale: 2, opacity: 0, time: 930, }, 'accel', 'fade', { filter: 'brightness(5)' }); scene.showEffect('rightslash', { x: defender.x, y: defender.y, z: defender.z, scale: 1.5, opacity: 0.6, time: 730, }, { scale: 2, opacity: 0, time: 930, }, 'accel', 'fade', { filter: 'brightness(5)' }); }, }, ficklebeam: { anim(scene, [attacker, defender]) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 2, opacity: 0.3, }, { scale: 0.3, opacity: 1, time: 300, }, 'decel', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 2, opacity: 0.3, time: 100, }, { scale: 0.5, opacity: 0.6, time: 400, }, 'decel', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.5, opacity: 0.6, time: 400, }, { time: 900, }, 'accel', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.4, opacity: 0.4, time: 400, }, { time: 900, }, 'accel', 'fade'); for (let i = 0; i < 5; i++) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.5, opacity: 0.7, time: 100 * i + 400, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.6, time: 100 * i + 400 + 200, }, 'linear', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.4, opacity: 0.5, time: 100 * i + 400, }, { x: defender.x, y: defender.y, z: defender.z, opacity: 0.4, time: 100 * i + 400 + 200, }, 'accel', 'fade'); } defender.delay(600); defender.anim({ z: defender.behind(5), time: 50, }, 'swing'); defender.anim({ time: 50, }, 'swing'); defender.anim({ z: defender.behind(5), time: 50, }, 'swing'); defender.anim({ time: 50, }, 'swing'); defender.anim({ z: defender.behind(5), time: 50, }, 'swing'); defender.anim({ time: 50, }, 'swing'); defender.anim({ z: defender.behind(5), time: 50, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, ficklebeamallout: { anim(scene, [attacker, defender]) { const xDist = 25; const x = [1, -1]; for (let j = 0; j < 2; j++) { scene.showEffect('electroball', { x: attacker.x + xDist * x[j], y: attacker.y, z: attacker.behind(-30), scale: 1.5, opacity: 0.3, time: 50 * j, }, { scale: 0.2, opacity: 1, time: 300 + 50 * j, }, 'decel', 'fade'); scene.showEffect('electroball', { x: attacker.x + xDist * x[j], y: attacker.y, z: attacker.behind(-30), scale: 1.5, opacity: 0.3, time: 100 + 50 * j, }, { scale: 0.5, opacity: 0.6, time: 400 + 50 * j, }, 'decel', 'fade'); scene.showEffect('electroball', { x: attacker.x + xDist * x[j], y: attacker.y, z: attacker.behind(-30), scale: 0.3, opacity: 0.6, time: 400 + 50 * j, }, { time: 900, }, 'accel', 'fade'); scene.showEffect('flareball', { x: attacker.x + xDist * x[j], y: attacker.y, z: attacker.behind(-30), scale: 0.2, opacity: 0.4, time: 400 + 50 * j, }, { time: 900, }, 'accel', 'fade'); } scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 2, opacity: 0.3, time: 100, }, { scale: 0.3, opacity: 1, time: 400, }, 'decel', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 2, opacity: 0.3, time: 200, }, { scale: 0.5, opacity: 0.6, time: 500, }, 'decel', 'fade'); scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.5, opacity: 0.6, time: 500, }, { time: 800, }, 'accel', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.4, opacity: 0.4, time: 500, }, { time: 800, }, 'accel', 'fade'); for (let i = 0; i < 5; i++) { scene.showEffect('electroball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.5, opacity: 0.7, time: 100 * i + 300, }, { x: defender.x, y: defender.y, z: defender.behind(30), scale: 1.5, opacity: 0.4, time: 100 * i + 300 + 200, }, 'linear', 'fade'); scene.showEffect('flareball', { x: attacker.x, y: attacker.y, z: attacker.behind(-30), scale: 0.4, opacity: 0.4, time: 100 * i + 300, }, { x: defender.x, y: defender.y, z: defender.behind(30), scale: 1.2, opacity: 0.2, time: 100 * i + 300 + 200, }, 'accel', 'fade'); for (let j = 0; j < 2; j++) { scene.showEffect('electroball', { x: attacker.x + xDist * x[j], y: attacker.y, z: attacker.behind(-30), scale: 0.3, opacity: 0.7, time: 100 * i + 300, }, { x: defender.x, y: defender.y, z: defender.behind(30), scale: 1.5, opacity: 0, time: 100 * i + 300 + 200, }, 'linear', 'fade'); scene.showEffect('flareball', { x: attacker.x + xDist * x[j], y: attacker.y, z: attacker.behind(-30), scale: 0.2, opacity: 0.5, time: 100 * i + 300, }, { x: defender.x, y: defender.y, z: defender.behind(30), scale: 1.2, opacity: 0, time: 100 * i + 300 + 200, }, 'accel', 'fade'); } } defender.delay(500); defender.anim({ z: defender.behind(10), time: 50, }, 'swing'); defender.anim({ time: 50, }, 'swing'); defender.anim({ z: defender.behind(10), time: 50, }, 'swing'); defender.anim({ time: 50, }, 'swing'); defender.anim({ z: defender.behind(10), time: 50, }, 'swing'); defender.anim({ time: 50, }, 'swing'); defender.anim({ z: defender.behind(10), time: 50, }, 'swing'); defender.anim({ time: 150, }, 'swing'); }, }, }; // placeholder animations BattleMoveAnims['torment'] = { anim: BattleMoveAnims['swagger'].anim }; BattleMoveAnims['mefirst'] = { anim: BattleMoveAnims['mimic'].anim }; BattleMoveAnims['conversion2'] = { anim: BattleMoveAnims['conversion'].anim }; BattleMoveAnims['gearup'] = { anim: BattleMoveAnims['shiftgear'].anim }; BattleMoveAnims['honeclaws'] = { anim: BattleMoveAnims['rockpolish'].anim }; BattleMoveAnims['workup'] = { anim: BattleMoveAnims['bulkup'].anim }; BattleMoveAnims['heatcrash'] = { anim: BattleMoveAnims['flareblitz'].anim }; BattleMoveAnims['darkestlariat'] = { anim: BattleMoveAnims['flareblitz'].anim }; BattleMoveAnims['flameburst'] = { anim: BattleMoveAnims['shelltrap'].anim }; BattleMoveAnims['searingshot'] = { anim: BattleMoveAnims['shelltrap'].anim }; BattleMoveAnims['fierydance'] = { anim: BattleMoveAnims['magmastorm'].anim }; BattleMoveAnims['inferno'] = { anim: BattleMoveAnims['magmastorm'].anim }; BattleMoveAnims['mysticalfire'] = { anim: BattleMoveAnims['flamethrower'].anim }; BattleMoveAnims['firepledge'] = { anim: BattleMoveAnims['flamethrower'].anim }; BattleMoveAnims['ember'] = { anim: BattleMoveAnims['flamethrower'].anim }; BattleMoveAnims['incinerate'] = { anim: BattleMoveAnims['flamethrower'].anim }; BattleMoveAnims['flamewheel'] = { anim: BattleMoveAnims['flamecharge'].anim }; BattleMoveAnims['razorleaf'] = { anim: BattleMoveAnims['magicalleaf'].anim }; BattleMoveAnims['grasspledge'] = { anim: BattleMoveAnims['magicalleaf'].anim }; BattleMoveAnims['sleeppowder'] = { anim: BattleMoveAnims['spore'].anim }; BattleMoveAnims['poisonpowder'] = { anim: BattleMoveAnims['spore'].anim }; BattleMoveAnims['stunspore'] = { anim: BattleMoveAnims['spore'].anim }; BattleMoveAnims['powder'] = { anim: BattleMoveAnims['spore'].anim }; BattleMoveAnims['cottonspore'] = { anim: BattleMoveAnims['spore'].anim }; BattleMoveAnims['vinewhip'] = { anim: BattleMoveAnims['powerwhip'].anim }; BattleMoveAnims['bubble'] = { anim: BattleMoveAnims['bubblebeam'].anim }; BattleMoveAnims['sparklingaria'] = { anim: BattleMoveAnims['bubblebeam'].anim }; BattleMoveAnims['watergun'] = { anim: BattleMoveAnims['watersport'].anim }; BattleMoveAnims['whirlpool'] = { anim: BattleMoveAnims['watersport'].anim }; BattleMoveAnims['waterfall'] = { anim: BattleMoveAnims['aquajet'].anim }; BattleMoveAnims['aquatail'] = { anim: BattleMoveAnims['crabhammer'].anim }; BattleMoveAnims['liquidation'] = { anim: BattleMoveAnims['crabhammer'].anim }; BattleMoveAnims['magikarpsrevenge'] = { anim: BattleMoveAnims['outrage'].anim }; BattleMoveAnims['electrify'] = { anim: BattleMoveAnims['thunderwave'].anim }; BattleMoveAnims['volttackle'] = { anim: BattleMoveAnims['wildcharge'].anim }; BattleMoveAnims['zingzap'] = { anim: BattleMoveAnims['wildcharge'].anim }; BattleMoveAnims['nuzzle'] = { anim: BattleMoveAnims['spark'].anim }; BattleMoveAnims['thundershock'] = { anim: BattleMoveAnims['electroball'].anim }; BattleMoveAnims['glaciate'] = { anim: BattleMoveAnims['freezedry'].anim }; BattleMoveAnims['frostbreath'] = { anim: BattleMoveAnims['freezedry'].anim }; BattleMoveAnims['aurorabeam'] = { anim: BattleMoveAnims['icebeam'].anim }; BattleMoveAnims['powdersnow'] = { anim: BattleMoveAnims['icywind'].anim }; BattleMoveAnims['pinmissile'] = { anim: BattleMoveAnims['bulletseed'].anim }; BattleMoveAnims['attackorder'] = { anim: BattleMoveAnims['bulletseed'].anim }; BattleMoveAnims['fellstinger'] = { anim: BattleMoveAnims['bulletseed'].anim }; BattleMoveAnims['strugglebug'] = { anim: BattleMoveAnims['bulletseed'].anim }; BattleMoveAnims['infestation'] = { anim: BattleMoveAnims['bulletseed'].anim }; BattleMoveAnims['nightdaze'] = { anim: BattleMoveAnims['darkpulse'].anim }; BattleMoveAnims['strengthsap'] = { anim: BattleMoveAnims['leechlife'].anim }; BattleMoveAnims['hornattack'] = { anim: BattleMoveAnims['megahorn'].anim }; BattleMoveAnims['lunge'] = { anim: BattleMoveAnims['megahorn'].anim }; BattleMoveAnims['constrict'] = { anim: BattleMoveAnims['bind'].anim }; BattleMoveAnims['wrap'] = { anim: BattleMoveAnims['bind'].anim }; BattleMoveAnims['lowsweep'] = { anim: BattleMoveAnims['lowkick'].anim }; BattleMoveAnims['megakick'] = { anim: BattleMoveAnims['jumpkick'].anim }; BattleMoveAnims['frustration'] = { anim: BattleMoveAnims['thrash'].anim }; BattleMoveAnims['rage'] = { anim: BattleMoveAnims['thrash'].anim }; BattleMoveAnims['headsmash'] = { anim: BattleMoveAnims['gigaimpact'].anim }; BattleMoveAnims['headcharge'] = { anim: BattleMoveAnims['gigaimpact'].anim }; BattleMoveAnims['takedown'] = { anim: BattleMoveAnims['gigaimpact'].anim }; BattleMoveAnims['dragonrush'] = { anim: BattleMoveAnims['gigaimpact'].anim }; BattleMoveAnims['lastresort'] = { anim: BattleMoveAnims['gigaimpact'].anim }; BattleMoveAnims['horndrill'] = { anim: BattleMoveAnims['gigaimpact'].anim }; BattleMoveAnims['trumpcard'] = { anim: BattleMoveAnims['gigaimpact'].anim }; BattleMoveAnims['doubleedge'] = { anim: BattleMoveAnims['gigaimpact'].anim }; BattleMoveAnims['paleowave'] = { anim: BattleMoveAnims['muddywater'].anim }; BattleMoveAnims['rocktomb'] = { anim: BattleMoveAnims['rockslide'].anim }; BattleMoveAnims['frenzyplant'] = { anim: BattleMoveAnims['leafstorm'].anim }; BattleMoveAnims['hydrocannon'] = { anim: BattleMoveAnims['hydropump'].anim }; BattleMoveAnims['guardsplit'] = { anim: BattleMoveAnims['skillswap'].anim }; BattleMoveAnims['powersplit'] = { anim: BattleMoveAnims['skillswap'].anim }; BattleMoveAnims['guardswap'] = { anim: BattleMoveAnims['skillswap'].anim }; BattleMoveAnims['heartswap'] = { anim: BattleMoveAnims['skillswap'].anim }; BattleMoveAnims['powerswap'] = { anim: BattleMoveAnims['skillswap'].anim }; BattleMoveAnims['speedswap'] = { anim: BattleMoveAnims['skillswap'].anim }; BattleMoveAnims['psychoshift'] = { anim: BattleMoveAnims['painsplit'].anim }; BattleMoveAnims['helpinghand'] = { anim: BattleMoveAnims['painsplit'].anim }; BattleMoveAnims['entrainment'] = { anim: BattleMoveAnims['painsplit'].anim }; BattleMoveAnims['roleplay'] = { anim: BattleMoveAnims['painsplit'].anim }; BattleMoveAnims['psychup'] = { anim: BattleMoveAnims['painsplit'].anim }; BattleMoveAnims['holdhands'] = { anim: BattleMoveAnims['painsplit'].anim }; BattleMoveAnims['lunardance'] = { anim: BattleMoveAnims['moonlight'].anim }; BattleMoveAnims['brickbreak'] = { anim: BattleMoveAnims['karatechop'].anim }; BattleMoveAnims['throatchop'] = { anim: BattleMoveAnims['karatechop'].anim }; BattleMoveAnims['wringout'] = { anim: BattleMoveAnims['forcepalm'].anim }; BattleMoveAnims['stormthrow'] = { anim: BattleMoveAnims['circlethrow'].anim }; BattleMoveAnims['vitalthrow'] = { anim: BattleMoveAnims['circlethrow'].anim }; BattleMoveAnims['doubleslap'] = { anim: BattleMoveAnims['wakeupslap'].anim }; BattleMoveAnims['crushgrip'] = { anim: BattleMoveAnims['quash'].anim }; BattleMoveAnims['beatup'] = { anim: BattleMoveAnims['slam'].anim }; BattleMoveAnims['counter'] = { anim: BattleMoveAnims['slam'].anim }; BattleMoveAnims['payback'] = { anim: BattleMoveAnims['slam'].anim }; BattleMoveAnims['revenge'] = { anim: BattleMoveAnims['slam'].anim }; BattleMoveAnims['rockclimb'] = { anim: BattleMoveAnims['slam'].anim }; BattleMoveAnims['tackle'] = { anim: BattleMoveAnims['slam'].anim }; BattleMoveAnims['dragonhammer'] = { anim: BattleMoveAnims['heavyslam'].anim }; BattleMoveAnims['highhorsepower'] = { anim: BattleMoveAnims['stomp'].anim }; BattleMoveAnims['retaliate'] = { anim: BattleMoveAnims['closecombat'].anim }; BattleMoveAnims['superpower'] = { anim: BattleMoveAnims['closecombat'].anim }; BattleMoveAnims['submission'] = { anim: BattleMoveAnims['closecombat'].anim }; BattleMoveAnims['bonerush'] = { anim: BattleMoveAnims['boneclub'].anim }; BattleMoveAnims['dragonrage'] = { anim: BattleMoveAnims['dragonbreath'].anim }; BattleMoveAnims['silverwind'] = { anim: BattleMoveAnims['whirlwind'].anim }; BattleMoveAnims['gust'] = { anim: BattleMoveAnims['whirlwind'].anim }; BattleMoveAnims['twister'] = { anim: BattleMoveAnims['whirlwind'].anim }; BattleMoveAnims['razorwind'].anim = BattleMoveAnims['airslash'].anim; BattleMoveAnims['chatter'] = { anim: BattleMoveAnims['hypervoice'].anim }; BattleMoveAnims['echoedvoice'] = { anim: BattleMoveAnims['hypervoice'].anim }; BattleMoveAnims['relicsong'] = { anim: BattleMoveAnims['hypervoice'].anim }; BattleMoveAnims['uproar'] = { anim: BattleMoveAnims['hypervoice'].anim }; BattleMoveAnims['destinybond'] = { anim: BattleMoveAnims['painsplit'].anim }; BattleMoveAnims['reflecttype'] = { anim: BattleMoveAnims['painsplit'].anim }; BattleMoveAnims['selfdestruct'] = { anim: BattleMoveAnims['explosion'].anim }; BattleMoveAnims['acid'] = { anim: BattleMoveAnims['sludge'].anim }; BattleMoveAnims['acidspray'] = { anim: BattleMoveAnims['sludge'].anim }; BattleMoveAnims['belch'] = { anim: BattleMoveAnims['gunkshot'].anim }; BattleMoveAnims['venoshock'] = { anim: BattleMoveAnims['sludgebomb'].anim }; BattleMoveAnims['venomdrench'] = { anim: BattleMoveAnims['sludge'].anim }; BattleMoveAnims['poisonsting'] = { anim: BattleMoveAnims['poisonjab'].anim }; BattleMoveAnims['poisontail'] = { anim: BattleMoveAnims['poisonjab'].anim }; BattleMoveAnims['gastroacid'] = { anim: BattleMoveAnims['toxic'].anim }; BattleMoveAnims['magnitude'] = { anim: BattleMoveAnims['earthquake'].anim }; BattleMoveAnims['fissure'] = { anim: BattleMoveAnims['earthquake'].anim }; BattleMoveAnims['landswrath'] = { anim: BattleMoveAnims['earthquake'].anim }; BattleMoveAnims['mindblown'] = { anim: BattleMoveAnims['iceball'].anim }; BattleMoveAnims['camouflage'] = { anim: BattleMoveAnims['tailglow'].anim }; BattleMoveAnims['telekinesis'] = { anim: BattleMoveAnims['kinesis'].anim }; BattleMoveAnims['foulplay'] = { anim: BattleMoveAnims['psyshock'].anim }; BattleMoveAnims['psywave'] = { anim: BattleMoveAnims['psybeam'].anim }; BattleMoveAnims['extrasensory'] = { anim: BattleMoveAnims['psychic'].anim }; BattleMoveAnims['confusion'] = { anim: BattleMoveAnims['psychic'].anim }; BattleMoveAnims['miracleeye'] = { anim: BattleMoveAnims['mindreader'].anim }; BattleMoveAnims['futuresight'] = { anim: BattleMoveAnims['doomdesire'].anim }; BattleMoveAnims['glare'] = { anim: BattleMoveAnims['meanlook'].anim }; BattleMoveAnims['grudge'] = { anim: BattleMoveAnims['meanlook'].anim }; BattleMoveAnims['scaryface'] = { anim: BattleMoveAnims['meanlook'].anim }; BattleMoveAnims['disable'] = { anim: BattleMoveAnims['meanlook'].anim }; BattleMoveAnims['laserfocus'] = { anim: BattleMoveAnims['meanlook'].anim }; BattleMoveAnims['nightmare'] = { anim: BattleMoveAnims['nightshade'].anim }; BattleMoveAnims['captivate'] = { anim: BattleMoveAnims['attract'].anim }; BattleMoveAnims['charm'] = { anim: BattleMoveAnims['attract'].anim }; BattleMoveAnims['flatter'] = { anim: BattleMoveAnims['attract'].anim }; BattleMoveAnims['armthrust'] = { anim: BattleMoveAnims['smellingsalts'].anim }; BattleMoveAnims['phantomforce'] = { anim: BattleMoveAnims['shadowforce'].anim, prepareAnim: BattleMoveAnims['shadowforce'].prepareAnim, }; BattleMoveAnims['shadowstrike'] = { anim: BattleMoveAnims['shadowforce'].anim }; BattleMoveAnims['smackdown'] = { anim: BattleMoveAnims['rockblast'].anim }; BattleMoveAnims['fairywind'] = { anim: BattleMoveAnims['dazzlinggleam'].anim }; BattleMoveAnims['dreameater'] = { anim: BattleMoveAnims['drainingkiss'].anim }; BattleMoveAnims['sweetkiss'] = { anim: BattleMoveAnims['lovelykiss'].anim }; BattleMoveAnims['mirrorshot'] = { anim: BattleMoveAnims['flashcannon'].anim }; BattleMoveAnims['mirrorcoat'] = { anim: BattleMoveAnims['flashcannon'].anim }; BattleMoveAnims['metalburst'] = { anim: BattleMoveAnims['flashcannon'].anim }; BattleMoveAnims['mudslap'] = { anim: BattleMoveAnims['mudshot'].anim }; BattleMoveAnims['sandattack'] = { anim: BattleMoveAnims['mudshot'].anim }; BattleMoveAnims['mudsport'] = { anim: BattleMoveAnims['mudbomb'].anim }; BattleMoveAnims['spiderweb'] = { anim: BattleMoveAnims['electroweb'].anim }; BattleMoveAnims['stringshot'] = { anim: BattleMoveAnims['electroweb'].anim }; BattleMoveAnims['toxicthread'] = { anim: BattleMoveAnims['electroweb'].anim }; BattleMoveAnims['hyperfang'] = { anim: BattleMoveAnims['superfang'].anim }; BattleMoveAnims['barrage'] = { anim: BattleMoveAnims['magnetbomb'].anim }; BattleMoveAnims['eggbomb'] = { anim: BattleMoveAnims['magnetbomb'].anim }; BattleMoveAnims['spitup'] = { anim: BattleMoveAnims['magnetbomb'].anim }; BattleMoveAnims['rollingkick'] = { anim: BattleMoveAnims['doublekick'].anim }; BattleMoveAnims['triplekick'] = { anim: BattleMoveAnims['doublekick'].anim }; BattleMoveAnims['aromaticmist'] = { anim: BattleMoveAnims['mistyterrain'].anim }; BattleMoveAnims['sweetscent'] = { anim: BattleMoveAnims['mistyterrain'].anim }; BattleMoveAnims['psychicterrain'] = { anim: BattleMoveAnims['mistyterrain'].anim }; BattleMoveAnims['iondeluge'] = { anim: BattleMoveAnims['electricterrain'].anim }; BattleMoveAnims['magneticflux'] = { anim: BattleMoveAnims['electricterrain'].anim }; BattleMoveAnims['rototiller'] = { anim: BattleMoveAnims['electricterrain'].anim }; BattleMoveAnims['flowershield'] = { anim: BattleMoveAnims['grassyterrain'].anim }; BattleMoveAnims['imprison'] = { anim: BattleMoveAnims['embargo'].anim }; BattleMoveAnims['healorder'] = { anim: BattleMoveAnims['recover'].anim }; BattleMoveAnims['synthesis'] = { anim: BattleMoveAnims['recover'].anim }; BattleMoveAnims['floralhealing'] = { anim: BattleMoveAnims['healpulse'].anim }; BattleMoveAnims['purify'] = { anim: BattleMoveAnims['weatherball'].anim }; BattleMoveAnims['pollenpuff'] = { anim: BattleMoveAnims['revelationdance'].anim }; BattleMoveAnims['amnesia'] = { anim: BattleMoveAnims['rest'].anim }; BattleMoveAnims['slackoff'] = { anim: BattleMoveAnims['rest'].anim }; BattleMoveAnims['secretpower'] = { anim: BattleMoveAnims['technoblast'].anim }; BattleMoveAnims['naturalgift'] = { anim: BattleMoveAnims['technoblast'].anim }; BattleMoveAnims['firelash'] = { anim: BattleMoveAnims['multiattack'].anim }; BattleMoveAnims['fleurcannon'] = { anim: BattleMoveAnims['diamondstorm'].anim }; BattleMoveAnims['bloomdoom'] = { anim: BattleMoveAnims['petaldance'].anim }; BattleMoveAnims['hydrovortex'] = { anim: BattleMoveAnims['originpulse'].anim }; BattleMoveAnims['breakneckblitz'] = { anim: BattleMoveAnims['gigaimpact'].anim }; BattleMoveAnims['savagespinout'] = { anim: BattleMoveAnims['electroweb'].anim }; BattleMoveAnims['maliciousmoonsault'] = { anim: BattleMoveAnims['pulverizingpancake'].anim }; BattleMoveAnims['devastatingdrake'] = { anim: BattleMoveAnims['dragonpulse'].anim }; BattleMoveAnims['tectonicrage'] = { anim: BattleMoveAnims['precipiceblades'].anim }; BattleMoveAnims['subzeroslammer'] = { anim: BattleMoveAnims['sheercold'].anim }; BattleMoveAnims['shatteredpsyche'] = { anim: BattleMoveAnims['psychic'].anim }; BattleMoveAnims['maximumpsybreaker'] = { anim: BattleMoveAnims['psychic'].anim }; BattleMoveAnims['genesissupernova'] = { anim: BattleMoveAnims['psychoboost'].anim }; BattleMoveAnims['10000000voltthunderbolt'] = { anim: BattleMoveAnims['triattack'].anim }; BattleMoveAnims['menacingmoonrazemaelstrom'] = { anim: BattleMoveAnims['moongeistbeam'].anim }; BattleMoveAnims['lightthatburnsthesky'] = { anim: BattleMoveAnims['fusionflare'].anim }; BattleMoveAnims['maxflutterby'] = BattleMoveAnims['savagespinout']; BattleMoveAnims['gmaxbefuddle'] = BattleMoveAnims['savagespinout']; BattleMoveAnims['maxdarkness'] = BattleMoveAnims['maliciousmoonsault']; BattleMoveAnims['gmaxsnooze'] = BattleMoveAnims['maliciousmoonsault']; BattleMoveAnims['maxwyrmwind'] = BattleMoveAnims['devastatingdrake']; BattleMoveAnims['gmaxdepletion'] = BattleMoveAnims['devastatingdrake']; BattleMoveAnims['maxlightning'] = BattleMoveAnims['gigavolthavoc']; BattleMoveAnims['maxstarfall'] = BattleMoveAnims['twinkletackle']; BattleMoveAnims['gmaxfinale'] = BattleMoveAnims['twinkletackle']; BattleMoveAnims['gmaxsmite'] = BattleMoveAnims['twinkletackle']; BattleMoveAnims['maxknuckle'] = BattleMoveAnims['alloutpummeling']; BattleMoveAnims['gmaxoneblow'] = BattleMoveAnims['alloutpummeling']; BattleMoveAnims['gmaxrapidflow'] = BattleMoveAnims['alloutpummeling']; BattleMoveAnims['maxflare'] = BattleMoveAnims['infernooverdrive']; BattleMoveAnims['gmaxcentiferno'] = BattleMoveAnims['infernooverdrive']; BattleMoveAnims['gmaxfireball'] = BattleMoveAnims['infernooverdrive']; BattleMoveAnims['maxairstream'] = BattleMoveAnims['supersonicskystrike']; BattleMoveAnims['maxphantasm'] = BattleMoveAnims['neverendingnightmare']; BattleMoveAnims['maxovergrowth'] = BattleMoveAnims['bloomdoom']; BattleMoveAnims['gmaxvinelash'] = BattleMoveAnims['bloomdoom']; BattleMoveAnims['gmaxdrumsolo'] = BattleMoveAnims['bloomdoom']; BattleMoveAnims['maxquake'] = BattleMoveAnims['tectonicrage']; BattleMoveAnims['gmaxsandblast'] = BattleMoveAnims['tectonicrage']; BattleMoveAnims['maxhailstorm'] = BattleMoveAnims['subzeroslammer']; BattleMoveAnims['gmaxresonance'] = BattleMoveAnims['subzeroslammer']; BattleMoveAnims['maxstrike'] = BattleMoveAnims['breakneckblitz']; BattleMoveAnims['gmaxcuddle'] = BattleMoveAnims['breakneckblitz']; BattleMoveAnims['gmaxreplenish'] = BattleMoveAnims['breakneckblitz']; BattleMoveAnims['maxooze'] = BattleMoveAnims['aciddownpour']; BattleMoveAnims['gmaxmalodor'] = BattleMoveAnims['aciddownpour']; BattleMoveAnims['maxmindstorm'] = BattleMoveAnims['shatteredpsyche']; BattleMoveAnims['gmaxgravitas'] = BattleMoveAnims['shatteredpsyche']; BattleMoveAnims['maxrockfall'] = BattleMoveAnims['continentalcrush']; BattleMoveAnims['maxsteelspike'] = BattleMoveAnims['corkscrewcrash']; BattleMoveAnims['maxgeyser'] = BattleMoveAnims['hydrovortex']; BattleMoveAnims['gmaxcannonade'] = BattleMoveAnims['hydrovortex']; BattleMoveAnims['gmaxhydrosnipe'] = BattleMoveAnims['hydrovortex']; BattleMoveAnims['dynamaxcannon'] = { anim: BattleMoveAnims['dragonpulse'].anim }; BattleMoveAnims['snipeshot'] = { anim: BattleMoveAnims['waterpulse'].anim }; BattleMoveAnims['jawlock'] = { anim: BattleMoveAnims['crunch'].anim }; BattleMoveAnims['stuffcheeks'] = { anim: BattleMoveAnims['stockpile'].anim }; BattleMoveAnims['noretreat'] = { anim: BattleMoveAnims['stockpile'].anim }; BattleMoveAnims['tarshot'] = { anim: BattleMoveAnims['mudbomb'].anim }; BattleMoveAnims['magicpowder'] = { anim: BattleMoveAnims['spore'].anim }; BattleMoveAnims['dragondarts'] = { anim: BattleMoveAnims['dragonbreath'].anim }; BattleMoveAnims['teatime'] = { anim: BattleMoveAnims['healbell'].anim }; BattleMoveAnims['octolock'] = { anim: BattleMoveAnims['bind'].anim }; BattleMoveAnims['boltbeak'] = { anim: BattleMoveAnims['spark'].anim }; BattleMoveAnims['courtchange'] = { anim: BattleMoveAnims['skillswap'].anim }; BattleMoveAnims['clangoroussoul'] = { anim: BattleMoveAnims['extremeevoboost'].anim }; BattleMoveAnims['bodypress'] = { anim: BattleMoveAnims['heavyslam'].anim }; BattleMoveAnims['decorate'] = { anim: BattleMoveAnims['spore'].anim }; BattleMoveAnims['drumbeating'] = { anim: BattleMoveAnims['magicalleaf'].anim }; BattleMoveAnims['snaptrap'] = { anim: BattleMoveAnims['magicalleaf'].anim }; BattleMoveAnims['pyroball'] = { anim: BattleMoveAnims['flameburst'].anim }; BattleMoveAnims['behemothblade'] = { anim: BattleMoveAnims['smartstrike'].anim }; BattleMoveAnims['behemothbash'] = { anim: BattleMoveAnims['smartstrike'].anim }; BattleMoveAnims['aurawheel'] = { anim: BattleMoveAnims['discharge'].anim }; BattleMoveAnims['breakingswipe'] = { anim: BattleMoveAnims['dragonclaw'].anim }; BattleMoveAnims['branchpoke'] = { anim: BattleMoveAnims['vinewhip'].anim }; BattleMoveAnims['overdrive'] = { anim: BattleMoveAnims['discharge'].anim }; BattleMoveAnims['appleacid'] = { anim: BattleMoveAnims['energyball'].anim }; BattleMoveAnims['gravapple'] = { anim: BattleMoveAnims['energyball'].anim }; BattleMoveAnims['obstruct'] = { anim: BattleMoveAnims['kingsshield'].anim }; BattleMoveAnims['maxguard'] = { anim: BattleMoveAnims['banefulbunker'].anim }; BattleMoveAnims['falsesurrender'] = { anim: BattleMoveAnims['feintattack'].anim }; BattleMoveAnims['meteorassault'] = { anim: BattleMoveAnims['aurasphere'].anim }; BattleMoveAnims['eternabeam'] = { anim: BattleMoveAnims['roaroftime'].anim }; BattleMoveAnims['steelbeam'] = { anim: BattleMoveAnims['magnetbomb'].anim }; BattleMoveAnims['strangesteam'] = { anim: BattleMoveAnims['dazzlinggleam'].anim }; BattleMoveAnims['burningjealousy'] = { anim: BattleMoveAnims['heatwave'].anim }; BattleMoveAnims['grassyglide'] = { anim: BattleMoveAnims['powerwhip'].anim }; BattleMoveAnims['risingvoltage'] = { anim: BattleMoveAnims['discharge'].anim }; BattleMoveAnims['coaching'] = { anim: BattleMoveAnims['bulkup'].anim }; BattleMoveAnims['corrosivegas'] = { anim: BattleMoveAnims['poisongas'].anim }; BattleMoveAnims['scorchingsands'] = { anim: BattleMoveAnims['earthpower'].anim }; BattleMoveAnims['expandingforce'] = { anim: BattleMoveAnims['psybeam'].anim }; BattleMoveAnims['skittersmack'] = { anim: BattleMoveAnims['megahorn'].anim }; BattleMoveAnims['poltergeist'] = { anim: BattleMoveAnims['neverendingnightmare'].anim }; BattleMoveAnims['scaleshot'] = { anim: BattleMoveAnims['clangingscales'].anim }; BattleMoveAnims['lashout'] = { anim: BattleMoveAnims['nightslash'].anim }; BattleMoveAnims['steelroller'] = { anim: BattleMoveAnims['steamroller'].anim }; BattleMoveAnims['shellsidearmphysical'] = { anim: BattleMoveAnims['poisonjab'].anim }; BattleMoveAnims['shellsidearmspecial'] = { anim: BattleMoveAnims['sludgebomb'].anim }; BattleMoveAnims['surgingstrikes'] = { anim: BattleMoveAnims['aquajet'].anim }; BattleMoveAnims['eeriespell'] = { anim: BattleMoveAnims['psyshock'].anim }; BattleMoveAnims['axekick'] = { anim: BattleMoveAnims['highjumpkick'].anim }; BattleMoveAnims['bittermalice'] = { anim: BattleMoveAnims['spectralthief'].anim }; BattleMoveAnims['bleakwindstorm'] = { anim: BattleMoveAnims['hurricane'].anim }; BattleMoveAnims['ceaselessedge'] = { anim: BattleMoveAnims['nightslash'].anim }; BattleMoveAnims['chillingwater'] = { anim: BattleMoveAnims['waterpulse'].anim }; BattleMoveAnims['comeuppance'] = { anim: BattleMoveAnims['darkpulse'].anim }; BattleMoveAnims['doubleshock'] = { anim: BattleMoveAnims['wildcharge'].anim }; BattleMoveAnims['filletaway'] = { anim: BattleMoveAnims['bulkup'].anim }; BattleMoveAnims['glaiverush'] = { anim: BattleMoveAnims['outrage'].anim }; BattleMoveAnims['headlongrush'] = { anim(scene, [attacker, defender]) { BattleMoveAnims['closecombat'].anim(scene, [attacker, defender]); BattleMoveAnims['earthpower'].anim(scene, [attacker, defender]); }, }; BattleMoveAnims['hyperdrill'] = { anim: BattleMoveAnims['drillrun'].anim }; BattleMoveAnims['kowtowcleave'] = { anim: BattleMoveAnims['nightslash'].anim }; BattleMoveAnims['lastrespects'] = { anim: BattleMoveAnims['memento'].anim }; BattleMoveAnims['luminacrash'] = { anim: BattleMoveAnims['esperwing'].anim }; BattleMoveAnims['mountaingale'] = { anim: BattleMoveAnims['powergem'].anim }; BattleMoveAnims['pounce'] = { anim: BattleMoveAnims['bodyslam'].anim }; BattleMoveAnims['powershift'] = { anim: BattleMoveAnims['skillswap'].anim }; BattleMoveAnims['ragingbull'] = { anim: BattleMoveAnims['gigaimpact'].anim }; BattleMoveAnims['shedtail'] = { anim: BattleMoveAnims['substitute'].anim }; BattleMoveAnims['shelter'] = { anim: BattleMoveAnims['withdraw'].anim }; BattleMoveAnims['terablast'] = { anim: BattleMoveAnims['scald'].anim }; BattleMoveAnims['terablastbug'] = { anim: BattleMoveAnims['bugbuzz'].anim }; BattleMoveAnims['terablastdark'] = { anim: BattleMoveAnims['darkpulse'].anim }; BattleMoveAnims['terablastdragon'] = { anim: BattleMoveAnims['dragonpulse'].anim }; BattleMoveAnims['terablastelectric'] = { anim: BattleMoveAnims['thunderbolt'].anim }; BattleMoveAnims['terablastfairy'] = { anim: BattleMoveAnims['moonblast'].anim }; BattleMoveAnims['terablastfighting'] = { anim: BattleMoveAnims['focusblast'].anim }; BattleMoveAnims['terablastfire'] = { anim: BattleMoveAnims['flamethrower'].anim }; BattleMoveAnims['terablastflying'] = { anim: BattleMoveAnims['aeroblast'].anim }; BattleMoveAnims['terablastghost'] = { anim: BattleMoveAnims['infernalparade'].anim }; BattleMoveAnims['terablastgrass'] = { anim: BattleMoveAnims['seedflare'].anim }; BattleMoveAnims['terablastground'] = { anim: BattleMoveAnims['earthpower'].anim }; BattleMoveAnims['terablastice'] = { anim: BattleMoveAnims['icebeam'].anim }; BattleMoveAnims['terablastnormal'] = { anim: BattleMoveAnims['technoblast'].anim }; BattleMoveAnims['terablastpoison'] = { anim: BattleMoveAnims['sludgebomb'].anim }; BattleMoveAnims['terablastpsychic'] = { anim: BattleMoveAnims['psychic'].anim }; BattleMoveAnims['terablastrock'] = { anim: BattleMoveAnims['powergem'].anim }; BattleMoveAnims['terablaststeel'] = { anim: BattleMoveAnims['flashcannon'].anim }; BattleMoveAnims['terablastwater'] = { anim: BattleMoveAnims['hydropump'].anim }; BattleMoveAnims['terablaststellar'] = { anim: BattleMoveAnims['dracometeor'].anim }; BattleMoveAnims['tidyup'] = { anim: BattleMoveAnims['bulkup'].anim }; BattleMoveAnims['trailblaze'] = { anim: BattleMoveAnims['powerwhip'].anim }; BattleMoveAnims['tripledive'] = { anim: BattleMoveAnims['dive'].anim }; BattleMoveAnims['hydrosteam'] = { anim: BattleMoveAnims['steameruption'].anim }; BattleMoveAnims['psyblade'] = { anim: BattleMoveAnims['psychocut'].anim }; BattleMoveAnims['polarflare'] = { anim: BattleMoveAnims['torchsong'].anim };