Skip to content
Snippets Groups Projects
Commit e87d5637 authored by dg's avatar dg
Browse files

thunderstorm now uses new lightning particles

git-svn-id: http://svn.net-core.org/repos/t-engine4@691 51575b47-30f0-44d4-a5cc-537603b46e54
parent 70f0e850
No related branches found
No related tags found
No related merge requests found
......@@ -780,10 +780,9 @@ end
--- Add a new particle emitter
function _M:particleEmitter(x, y, radius, def, args)
local e = Particles.new(def, args)
local e = Particles.new(def, radius, args)
e.x = x
e.y = y
e.radius = radius or 1
self.particles[e] = true
return e
......
......@@ -47,14 +47,15 @@ function _M:loaded()
local def, fct, max
if type(self.def) == "string" then
if _M.particles_def[self.def] then
setfenv(_M.particles_def[self.def], setmetatable(self.args or {}, {__index=_G}))
def, fct, max = _M.particles_def[self.def]()
else
local odef = self.def
print("[PARTICLE] Loading from /data/gfx/particles/"..self.def..".lua")
local f = loadfile("/data/gfx/particles/"..self.def..".lua")
local f, err = loadfile("/data/gfx/particles/"..self.def..".lua")
if not f and err then error(err) end
setfenv(f, setmetatable(self.args or {}, {__index=_G}))
def, fct, max = f()
max = max or 1000
_M.particles_def[odef] = f
end
else error("unsupported particle type: "..type(self.def))
......
......@@ -17,22 +17,66 @@
-- Nicolas Casalini "DarkGod"
-- darkgod@te4.org
return {
base = 1000,
-- Make the 2 main forks
local forks = {{}, {}}
local m1 = forks[1]
local m2 = forks[2]
local tx = tx * 32
local ty = ty * 32
local breakdir = math.rad(rng.range(-8, 8))
m1.bx = 0
m1.by = 0
m1.thick = 5
m1.dir = math.atan2(ty, tx) + breakdir
m1.size = math.sqrt(tx*tx+ty*ty) / 2
angle = { 0, 360 }, anglev = { 2000, 4000 }, anglea = { 200, 600 },
m2.bx = m1.size * math.cos(m1.dir)
m2.by = m1.size * math.sin(m1.dir)
m2.thick = 5
m2.dir = math.atan2(ty, tx) - breakdir
m2.size = math.sqrt(tx*tx+ty*ty) / 2
life = { 5, 10 },
size = { 3, 6 }, sizev = {0, 0}, sizea = {0, 0},
-- Add more forks
for i = 1, math.min(math.max(3, m1.size / 5), 20) do
local m = rng.percent(50) and forks[1] or forks[2]
if rng.percent(60) then m = rng.table(forks) end
local f = {}
f.thick = 2
f.dir = m.dir + math.rad(rng.range(-30,30))
f.size = rng.range(6, 25)
local br = rng.range(1, m.size)
f.bx = br * math.cos(m.dir) + m.bx
f.by = br * math.sin(m.dir) + m.by
forks[#forks+1] = f
end
-- Populate the lightning based on the forks
return { generator = function()
local f = rng.table(forks)
local a = f.dir
local rad = rng.range(-3,3)
local ra = math.rad(rad)
local r = rng.range(1, f.size)
r = {180, 220}, rv = {0, 0}, ra = {0, 0},
g = {240, 255}, gv = {0, 0}, ga = {0, 0},
b = {220, 240}, bv = {0, 0}, ba = {0, 0},
a = {255, 255}, av = {0, 0}, aa = {0, 0},
return {
life = 4,
size = f.thick, sizev = 0, sizea = 0,
}, function(self)
x = r * math.cos(a) + 3 * math.cos(ra) + f.bx, xv = 0, xa = 0,
y = r * math.sin(a) + 3 * math.sin(ra) + f.by, yv = 0, ya = 0,
dir = 0, dirv = 0, dira = 0,
vel = 0, velv = 0, vela = 0,
r = rng.range(140, 200)/255, rv = 0, ra = 0,
g = rng.range(180, 220)/255, gv = 0, ga = 0,
b = rng.range(220, 240)/255, bv = 0, ba = 0,
a = rng.range(230, 255)/255, av = 0, aa = 0,
}
end, },
function(self)
self.nb = (self.nb or 0) + 1
if self.nb < 4 then
self.ps:emit(100)
self.ps:emit(1000)
end
end
end,
4000
......@@ -33,7 +33,9 @@ newTalent{
local tg = {type="beam", range=self:getTalentRange(t), talent=t}
local x, y = self:getTarget(tg)
if not x or not y then return nil end
self:project(tg, x, y, DamageType.LIGHTNING, rng.avg(1, self:spellCrit(20 + self:combatSpellpower(0.8) * self:getTalentLevel(t)), 3), {type="lightning"})
self:project(tg, x, y, DamageType.LIGHTNING, rng.avg(1, self:spellCrit(20 + self:combatSpellpower(0.8) * self:getTalentLevel(t)), 3))
local _ _, x, y = self:canProject(tg, x, y)
game.level.map:particleEmitter(self.x, self.y, 1, "lightning", {tx=x-self.x, ty=y-self.y})
game:playSoundNear(self, "talents/lightning")
return true
end,
......@@ -98,7 +100,8 @@ newTalent{
for i, actor in ipairs(targets) do
local tgr = {type="beam", range=self:getTalentRange(t), talent=t, x=sx, y=sy}
print("[Chain lightning] jumping from", sx, sy, "to", actor.x, actor.y)
self:project(tgr, actor.x, actor.y, DamageType.LIGHTNING, rng.avg(1, self:spellCrit(20 + self:combatSpellpower(0.8) * self:getTalentLevel(t)), 5), {type="lightning"})
self:project(tgr, actor.x, actor.y, DamageType.LIGHTNING, rng.avg(1, self:spellCrit(20 + self:combatSpellpower(0.8) * self:getTalentLevel(t)), 5))
game.level.map:particleEmitter(sx, sy, 1, "lightning", {tx=actor.x-sx, ty=actor.y-sy})
sx, sy = actor.x, actor.y
end
......@@ -189,7 +192,8 @@ newTalent{
local a, id = rng.table(tgts)
table.remove(tgts, id)
self:project(tg, a.x, a.y, DamageType.LIGHTNING, rng.avg(1, self:spellCrit(20 + self:combatSpellpower(0.2) * self:getTalentLevel(t)), 3), {type="lightning"})
self:project(tg, a.x, a.y, DamageType.LIGHTNING, rng.avg(1, self:spellCrit(20 + self:combatSpellpower(0.2) * self:getTalentLevel(t)), 3))
game.level.map:particleEmitter(self.x, self.y, 1, "lightning", {tx=a.x-self.x, ty=a.y-self.y})
game:playSoundNear(self, "talents/lightning")
end
end,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment