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

timed effects

git-svn-id: http://svn.net-core.org/repos/t-engine4@99 51575b47-30f0-44d4-a5cc-537603b46e54
parent 18e6cd9d
No related branches found
No related tags found
No related merge requests found
......@@ -47,9 +47,13 @@ function _M:timedEffects()
if p.dur <= 0 then
self.tmp[eff] = nil
if _M.tempeffect_def[eff].on_lose then
local ret = _M.tempeffect_def[eff].on_lose(self, p)
local ret, fly = _M.tempeffect_def[eff].on_lose(self, p)
if ret then
game.logSeen(ret)
game.logSeen(self, ret:gsub("#Target#", self.name:capitalize()):gsub("#target#", self.name))
end
if fly and game.flyers then
local sx, sy = game.level.map:getTileToScreen(self.x, self.y)
game.flyers:add(sx, sy, 20, (rng.range(0,2)-1) * 0.5, -3, fly, {255,100,80})
end
end
else
......@@ -62,17 +66,22 @@ end
--- Sets a timed effect on the actor
-- @param eff_id the effect to set
-- @param dur the number of turns to go on
-- @param p a table containing the effects parameters
function _M:setEffect(eff_id, dur, p)
for k, e in pairs(_M.tempeffect_def[eff_id]).parameters do
for k, e in pairs(_M.tempeffect_def[eff_id].parameters) do
if not p[k] then p[k] = e end
end
p.dur = dur
self.tmp[eff_id] = p
if _M.tempeffect_def[eff_id].on_gain then
local ret = _M.tempeffect_def[eff_id].on_gain(self, p)
local ret, fly = _M.tempeffect_def[eff_id].on_gain(self, p)
if ret then
game.logSeen(ret)
game.logSeen(self, ret:gsub("#Target#", self.name:capitalize()):gsub("#target#", self.name))
end
if fly and game.flyers then
local sx, sy = game.level.map:getTileToScreen(self.x, self.y)
game.flyers:add(sx, sy, 20, (rng.range(0,2)-1) * 0.5, -3, fly, {255,100,80})
end
end
end
......
......@@ -282,9 +282,10 @@ function _M:setupCommands()
_RIGHTPAREN = function() self.player:activateHotkey(11) end,
_EQUALS = function() self.player:activateHotkey(12) end,
-- talent test
-- talent use
_m = function()
self.player:useTalents()
self.player:setEffect(self.player.EFF_CUT, 10, {power=4}, self.player)
end,
[{"_g","shift"}] = function()
......
......@@ -6,11 +6,11 @@ defaultProjector(function(src, x, y, type, dam)
local sx, sy = game.level.map:getTileToScreen(x, y)
if target:takeHit(dam, src) then
if src == game.player or target == game.player then
game.flyers:add(sx, sy, 30, rng.range(-1,1) * 0.5, -3, "Kill!", {255,0,255})
game.flyers:add(sx, sy, 30, (rng.range(0,2)-1) * 0.5, -3, "Kill!", {255,0,255})
end
else
if src == game.player or target == game.player then
game.flyers:add(sx, sy, 30, rng.range(-1,1) * 0.5, -3, tostring(-dam), {255,0,255})
game.flyers:add(sx, sy, 30, (rng.range(0,2)-1) * 0.5, -3, tostring(-dam), {255,0,255})
end
end
end
......
newEffect{
name = "CUT",
desc = "Bleeding",
type = "physical",
status = "detrimental",
parameters = { power=0 },
on_gain = function(self, err) return "#Target# start to bleed.", "+Bleeds" end,
on_lose = function(self, err) return "#Target# stop bleeding.", "-Bleeds" end,
on_timeout = function(self, eff)
self:takeHit(eff.power, self)
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