diff --git a/game/modules/tome/data/talents/misc/npcs.lua b/game/modules/tome/data/talents/misc/npcs.lua index 59e4aae8ad19001663a700f89e593681e09b2724..74265ee33bf3375f99a68a0cb8235fb3f25d7053 100644 --- a/game/modules/tome/data/talents/misc/npcs.lua +++ b/game/modules/tome/data/talents/misc/npcs.lua @@ -2010,50 +2010,48 @@ newTalent{ t.terrains = terrains -- cache local meteor = function(src, x, y, dam) - game.level.map:particleEmitter(x, y, 10, "meteor", {x=x, y=y}).on_remove = function(self) - local x, y = self.args.x, self.args.y - game.level.map:particleEmitter(x, y, 10, "fireflash", {radius=2}) - game:playSoundNear(game.player, "talents/fireflash") - - local grids = {} - for i = x-1, x+1 do for j = y-1, y+1 do - local oe = game.level.map(i, j, Map.TERRAIN) - if oe and not oe:attr("temporary") and - (core.fov.distance(x, y, i, j) < 1 or rng.percent(40)) and (game.level.map:checkEntity(i, j, engine.Map.TERRAIN, "dig") or game.level.map:checkEntity(i, j, engine.Map.TERRAIN, "grow")) then - local g = terrains.LAVA_FLOOR:clone() - g:resolve() g:resolve(nil, true) - game.zone:addEntity(game.level, g, "terrain", i, j) - grids[#grids+1] = {x=i,y=j,oe=oe} - end - end end - for i = x-1, x+1 do for j = y-1, y+1 do - game.nicer_tiles:updateAround(game.level, i, j) - end end - for _, spot in ipairs(grids) do - local i, j = spot.x, spot.y - local g = game.level.map(i, j, Map.TERRAIN) - g.temporary = 8 - g.x = i g.y = j - g.canAct = false - g.energy = { value = 0, mod = 1 } - g.old_feat = spot.oe - g.useEnergy = mod.class.Trap.useEnergy - g.act = function(self) - self:useEnergy() - self.temporary = self.temporary - 1 - if self.temporary <= 0 then - game.level.map(self.x, self.y, engine.Map.TERRAIN, self.old_feat) - game.level:removeEntity(self) - game.nicer_tiles:updateAround(game.level, self.x, self.y) - end + game.level.map:particleEmitter(x, y, 10, "meteor", {x=x, y=y}) + game.level.map:particleEmitter(x, y, 10, "fireflash", {radius=2}) + game:playSoundNear(game.player, "talents/fireflash") + + local grids = {} + for i = x-1, x+1 do for j = y-1, y+1 do + local oe = game.level.map(i, j, Map.TERRAIN) + if oe and not oe:attr("temporary") and + (core.fov.distance(x, y, i, j) < 1 or rng.percent(40)) and (game.level.map:checkEntity(i, j, engine.Map.TERRAIN, "dig") or game.level.map:checkEntity(i, j, engine.Map.TERRAIN, "grow")) then + local g = terrains.LAVA_FLOOR:clone() + g:resolve() g:resolve(nil, true) + game.zone:addEntity(game.level, g, "terrain", i, j) + grids[#grids+1] = {x=i,y=j,oe=oe} + end + end end + for i = x-1, x+1 do for j = y-1, y+1 do + game.nicer_tiles:updateAround(game.level, i, j) + end end + for _, spot in ipairs(grids) do + local i, j = spot.x, spot.y + local g = game.level.map(i, j, Map.TERRAIN) + g.temporary = 8 + g.x = i g.y = j + g.canAct = false + g.energy = { value = 0, mod = 1 } + g.old_feat = spot.oe + g.useEnergy = mod.class.Trap.useEnergy + g.act = function(self) + self:useEnergy() + self.temporary = self.temporary - 1 + if self.temporary <= 0 then + game.level.map(self.x, self.y, engine.Map.TERRAIN, self.old_feat) + game.level:removeEntity(self) + game.nicer_tiles:updateAround(game.level, self.x, self.y) end - game.level:addEntity(g) end - - src:project({type="ball", radius=2, selffire=false}, x, y, engine.DamageType.METEOR, dam) - if core.shader.allow("distort") then game.level.map:particleEmitter(x, y, 2, "shockwave", {radius=2}) end - game:getPlayer(true):attr("meteoric_crash", 1) + game.level:addEntity(g) end + + src:project({type="ball", radius=2, selffire=false}, x, y, engine.DamageType.METEOR, dam) + if core.shader.allow("distort") then game.level.map:particleEmitter(x, y, 2, "shockwave", {radius=2}) end + game:getPlayer(true):attr("meteoric_crash", 1) end local grids = {}