module.exports = { name: 'cave', level: [14, 16], addLevel: 0, resources: {}, mobs: { default: { spells: [{ type: 'melee', statMult: 0.1356, element: 'arcane' }], regular: { drops: { chance: 35, rolls: 1 } } }, 'crystal snail': { level: 14, regular: { drops: { chance: 30, rolls: 1, noRandom: true, alsoRandom: true, blueprints: [{ name: 'Digested Crystal', quality: 0, quest: true, sprite: [1, 1] }] } }, spells: [{ type: 'melee' }, { type: 'smokeBomb', radius: 0, repeat: 5, duration: 7, randomPos: true, range: 2, selfCast: 0.2, statMult: 1, damage: 0.325, element: 'arcane', cdMax: 5, particles: { scale: { start: { min: 10, max: 25 }, end: { min: 10, max: 0 } }, opacity: { start: 0.3, end: 0 }, lifetime: { min: 1, max: 2 }, speed: { start: 3, end: 0 }, color: { start: ['fc66f7', 'a24eff'], end: ['933159', '393268'] }, chance: 0.125, randomColor: true, randomScale: true, blendMode: 'add', spawnType: 'rect', spawnRect: { x: -10, y: -10, w: 20, h: 20 } } }] }, 'crystal whelk': { level: 16, spells: [{ type: 'melee' }], regular: { drops: { chance: 30, rolls: 1, noRandom: true, alsoRandom: true, blueprints: [{ name: 'Digested Crystal', quality: 0, quest: true, sprite: [1, 1] }] } }, spells: [{ type: 'melee' }, { type: 'smokeBomb', radius: 0, repeat: 5, duration: 7, randomPos: true, range: 2, selfCast: 0.2, statMult: 1, damage: 0.45, element: 'arcane', cdMax: 5, particles: { scale: { start: { min: 4, max: 14 }, end: { min: 2, max: 8 } }, opacity: { start: 0.2, end: 0 }, lifetime: { min: 1, max: 2 }, speed: { start: 2, end: 0 }, color: { start: ['ff6942', 'ffeb38'], end: ['953f36', '9a5a3c'] }, chance: 0.125, randomColor: true, randomScale: true, blendMode: 'add', spawnType: 'rect', spawnRect: { x: -10, y: -10, w: 20, h: 20 } } }] }, radulos: { level: 18, spawnCd: 1714, regular: { hpMult: 75, dmgMult: 2, drops: { chance: 100, rolls: 5, magicFind: [2000, 200] } }, rare: { count: 0 }, mobile: false, spells: [{ type: 'projectile', particles: { scale: { start: { min: 6, max: 18 }, end: { min: 2, max: 8 } }, color: { start: ['fc66f7', 'a24eff'], end: ['393268', '933159'] }, chance: 0.65, randomScale: true, randomColor: true } }, { type: 'smokeBomb', radius: 1, repeat: 4, duration: 14, randomPos: true, range: 6, selfCast: 0.25, statMult: 1, damage: 0.55, element: 'arcane', cdMax: 8, particles: { scale: { start: { min: 6, max: 18 }, end: { min: 4, max: 10 } }, opacity: { start: 0.01, end: 0 }, lifetime: { min: 1, max: 3 }, speed: { start: 2, end: 0 }, color: { start: ['ff4252', 'd43346'], end: ['802343', 'a82841'] }, chance: 0.125, randomColor: true, randomScale: true, blendMode: 'add', spawnType: 'rect', spawnRect: { x: -10, y: -10, w: 20, h: 20 } } }, { type: 'summonConsumableFollower' }] }, 'akarei scout': { level: 20, faction: 'akarei', attackable: false, deathRep: -3 }, biorn: { level: 22, attackable: false, walkDistance: 0, faction: 'akarei', deathRep: -3 }, veleif: { level: 22, attackable: false, walkDistance: 0, faction: 'akarei', deathRep: -3 }, 'akarei artificer': { level: 24, attackable: false, faction: 'akarei', deathRep: -6 }, 'thaumaturge yala': { level: 30, attackable: false, walkDistance: 0, faction: 'akarei', deathRep: -15, regular: { hpMult: 100, dmgMult: 2 }, rare: { count: 0 }, properties: { cpnTrade: { items: { min: 2, max: 5, minLevel: 14, maxLevel: 18, slot: 'neck', extra: [] }, faction: { id: 'akarei', tier: 5 }, markup: { buy: 0.25, sell: 20 } } } } }, objects: { redwall: { components: { cpnBlocker: { init: function () { this.obj.instance.physics.setCollision(this.obj.x, this.obj.y, true); this.obj.instance.objects.notifyCollisionChange(this.obj.x, this.obj.y, true); } } } }, bigportal: { components: { cpnAttackAnimation: { simplify: function () { return { type: 'attackAnimation', spriteSheet: 'animBigObjects', row: 1, col: 0, frames: 6, frameDelay: 7, loop: -1, hideSprite: true }; } } } }, pinktile: { components: { cpnParticles: { simplify: function () { return { type: 'particles', blueprint: { color: { start: ['fc66f7', 'a24eff'], end: ['933159', '393268'] }, scale: { start: { min: 2, max: 10 }, end: { min: 0, max: 2 } }, speed: { start: { min: 4, max: 16 }, end: { min: 2, max: 8 } }, lifetime: { min: 1, max: 4 }, randomScale: true, randomSpeed: true, chance: 0.04, randomColor: true, spawnType: 'rect', spawnRect: { x: -20, y: -20, w: 60, h: 60 } } }; } } } }, walltrigger: { components: { cpnParticles: { simplify: function () { return { type: 'particles', blueprint: { color: { start: ['fff4252', 'ff6942'], end: ['802343', 'f953f36'] }, scale: { start: { min: 2, max: 6 }, end: { min: 0, max: 2 } }, speed: { start: { min: 0, max: 4 }, end: { min: 0, max: 0 } }, lifetime: { min: 1, max: 2 }, randomScale: true, randomSpeed: true, chance: 0.2, randomColor: true, spawnType: 'rect', spawnRect: { x: -20, y: -20, w: 40, h: 40 } } }; } }, cpnTrigger: { init: function () { this.obj.instance.triggerPuzzle = { activated: [] }; }, collisionEnter: function (o) { if (!o.player) return; let order = this.obj.order; let triggerPuzzle = this.obj.instance.triggerPuzzle; let activated = triggerPuzzle.activated; if (this.obj.forceOpen) { triggerPuzzle.activated = []; this.activate(); return; } activated.push(order); let valid = true; for (let i = 0; i < activated.length; i++) { if (activated[i] !== i) { valid = false; break; } } if (!valid) { triggerPuzzle.activated = []; process.send({ method: 'events', data: { onGetAnnouncement: [{ obj: { msg: 'nothing happens' }, to: [o.serverId] }] } }); return; } else if (activated.length === 4) { triggerPuzzle.activated = []; this.activate(); } process.send({ method: 'events', data: { onGetAnnouncement: [{ obj: { msg: this.obj.message }, to: [o.serverId] }] } }); }, activate: function () { let syncer = this.obj.instance.syncer; let physics = this.obj.instance.physics; let walls = this.obj.instance.objects.objects.filter(o => (o.objZoneName === 'redWall')); walls.forEach(function (w) { w.destroyed = true; physics.setCollision(w.x, w.y, false); this.obj.instance.objects.notifyCollisionChange(w.x, w.y, false); syncer.queue('onGetObject', { x: w.x, y: w.y, components: [{ type: 'attackAnimation', row: 0, col: 4 }] }, -1); }, this); } } } }, gas: { components: { cpnParticles: { simplify: function () { return { type: 'particles', blueprint: { color: { start: ['c0c3cf', '929398'], end: ['69696e', '69696e'] }, scale: { start: { min: 32, max: 18 }, end: { min: 16, max: 8 } }, speed: { start: { min: 2, max: 6 }, end: { min: 0, max: 4 } }, lifetime: { min: 4, max: 16 }, alpha: { start: 0.2, end: 0 }, randomScale: true, randomSpeed: true, chance: 0.02, randomColor: true, spawnType: 'rect', blendMode: 'screen', spawnRect: { x: -80, y: -80, w: 160, h: 160 } } }; } } } }, bubbles: { components: { cpnParticles: { simplify: function () { return { type: 'particles', blueprint: { color: { start: ['48edff', '3fa7dd'], end: ['69696e', '42548d'] }, scale: { start: { min: 2, max: 8 }, end: { min: 2, max: 4 } }, speed: { start: { min: 2, max: 6 }, end: { min: 0, max: 4 } }, lifetime: { min: 1, max: 3 }, alpha: { start: 0.5, end: 0 }, randomScale: true, randomSpeed: true, chance: 0.2, randomColor: true, spawnType: 'rect', blendMode: 'screen', spawnRect: { x: -20, y: -20, w: 60, h: 60 } } }; } } } }, shopyala: { properties: { cpnNotice: { actions: { enter: { cpn: 'dialogue', method: 'talk', args: [{ targetName: 'thaumaturge yala' }] }, exit: { cpn: 'dialogue', method: 'stopTalk' } } } } } } };