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

added a_lomos_del_dragon_blanco music

all coroutine.resume calls no do good stacktrace
fixed chain lightning


git-svn-id: http://svn.net-core.org/repos/t-engine4@606 51575b47-30f0-44d4-a5cc-537603b46e54
parent 2dccbf7a
No related branches found
No related tags found
No related merge requests found
......@@ -113,7 +113,7 @@ function _M:useTalent(id)
self:startTalentCooldown(ab)
end)
local ok, err = coroutine.resume(co)
if not ok and err then error(err) end
if not ok and err then print(debug.traceback(co)) error(err) end
elseif ab.mode == "sustained" and ab.activate and ab.deactivate then
if self:isTalentCoolingDown(ab) then
game.logPlayer(self, "%s is still on cooldown for %d turns.", ab.name:capitalize(), self.talents_cd[ab.id])
......@@ -138,7 +138,7 @@ function _M:useTalent(id)
end
end)
local ret, err = coroutine.resume(co)
if not ret and err then error(err) end
if not ret and err then print(debug.traceback(co)) error(err) end
else
error("Activating non activable or sustainable talent: "..id.." :: "..ab.name.." :: "..ab.mode)
end
......
......@@ -54,7 +54,7 @@ function _M:useObject(who)
if self.power >= self.use_power.power then
local co = coroutine.create(function() return self.use_power.use(self, who) end)
local ok, ret, no_power = coroutine.resume(co)
if not ok and ret then error(ret) end
if not ok and ret then print(debug.traceback(co)) error(ret) end
if not no_power then self.power = self.power - self.use_power.power end
return ret
else
......@@ -67,7 +67,7 @@ function _M:useObject(who)
elseif self.use_simple then
local co = coroutine.create(function() return self.use_simple.use(self, who) end)
local ok, ret = coroutine.resume(co)
if not ok and ret then error(ret) end
if not ok and ret then print(debug.traceback(co)) error(ret) end
return ret
end
end
......@@ -67,6 +67,11 @@ function table.reverse(t)
for i, e in ipairs(t) do tt[e] = i end
return tt
end
function table.listify(t)
local tt = {}
for k, e in pairs(t) do tt[#tt+1] = {k, e} print("listify", #tt, k, e) end
return tt
end
function string.ordinal(number)
local suffix = "th"
......
......@@ -381,7 +381,7 @@ function _M:onTakeHit(value, src)
if self:attr("displacement_shield") then
-- Absorb damage into the displacement shield
if value <= self.displacement_shield and rng.percent(self.displacement_shield_chance) then
game.logSeen("The displacement shield teleports the damage to %s!", self.displacement_shield_target.name)
game.logSeen(self, "The displacement shield teleports the damage to %s!", self.displacement_shield_target.name)
self.displacement_shield = self.displacement_shield - value
self.displacement_shield_target:takeHit(value, src)
value = 0
......
......@@ -396,7 +396,7 @@ function _M:targetMode(v, msg, co, typ)
local co = self.target_co
self.target_co = nil
local ok, err = coroutine.resume(co, self.target.target.x, self.target.target.y, self.target.target.entity)
if not ok and err then error(err) end
if not ok and err then print(debug.traceback(co)) error(err) end
end
end
else
......@@ -665,7 +665,7 @@ function _M:setupCommands()
self.flash(self.flash.GOOD, "Looking around... (direction keys to select interresting things, shift+direction keys to move freely)")
local co = coroutine.create(function() self.player:getTarget{type="hit", no_restrict=true, range=2000} end)
local ok, err = coroutine.resume(co)
if not ok and err then error(err) end
if not ok and err then print(debug.traceback(co)) error(err) end
end,
}
......
File added
......@@ -61,32 +61,47 @@ newTalent{
if not fx or not fy then return nil end
local nb = 3 + self:getTalentLevelRaw(t)
local affected = {[self]=true}
local affected = {}
local first = nil
local fork fork = function(x, y, sx, sy)
self:project(tg, x, y, function(dx, dy)
local actor = game.level.map(dx, dy, Map.ACTOR)
if actor and not affected[actor] then
local tgr = {type="beam", range=self:getTalentRange(t), talent=t, x=sx, y=sy}
self:project(tgr, dx, dy, DamageType.LIGHTNING, rng.avg(1, self:spellCrit(20 + self:combatSpellpower(0.8) * self:getTalentLevel(t)), 5), {type="lightning"})
affected[actor] = true
nb = nb - 1
if nb <= 0 then return true end
self:project(tg, fx, fy, function(dx, dy)
print("[Chain lightning] targetting", fx, fy, "from", self.x, self.y)
local actor = game.level.map(dx, dy, Map.ACTOR)
if actor and not affected[actor] then
ignored = false
affected[actor] = true
first = actor
self:project({type="ball", friendlyfire=false, x=dx, y=dy, radius=10, range=0}, dx, dy, function(bx, by)
local actor = game.level.map(bx, by, Map.ACTOR)
if actor and not affected[actor] and self:reactionToward(actor) < 0 then
fork(bx, by, dx, dy)
return true
end
end)
print("[Chain lightning] looking for more targets", nb, " at ", dx, dy, "radius ", 10, "from", actor.name)
self:project({type="ball", friendlyfire=false, x=dx, y=dy, radius=10, range=0}, dx, dy, function(bx, by)
local actor = game.level.map(bx, by, Map.ACTOR)
if actor and not affected[actor] and self:reactionToward(actor) < 0 then
print("[Chain lightning] found possible actor", actor.name, bx, by, "distance", core.fov.distance(dx, dy, bx, by))
affected[actor] = true
end
end)
return true
end
end)
local targets = { first }
affected[first] = nil
local possible_targets = table.listify(affected)
print("[Chain lightning] Found targets:", #possible_targets)
for i = 2, nb do
if #possible_targets == 0 then break end
local act = rng.tableRemove(possible_targets)
targets[#targets+1] = act[1]
end
return true
end
end)
local sx, sy = self.x, self.y
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"})
sx, sy = actor.x, actor.y
end
fork(fx, fy)
game:playSoundNear(self, "talents/lightning")
return true
......
......@@ -393,8 +393,8 @@ newEffect{
on_gain = function(self, err) return "The very fabric of space alters around #target#.", "+Displacement Shield" end,
on_lose = function(self, err) return "The fabric of space around #target# stabilizes to normal.", "-Displacement Shield" end,
activate = function(self, eff)
eff.powerid = self:addTemporaryValue("displacement_shield", eff.power)
eff.chanceid = self:addTemporaryValue("displacement_shield_chance", eff.chance)
self.displacement_shield = eff.power
self.displacement_shield_chance = eff.chance
--- Warning there can be only one time shield active at once for an actor
self.displacement_shield_target = eff.target
end,
......@@ -405,8 +405,8 @@ newEffect{
end
end,
deactivate = function(self, eff)
self:removeTemporaryValue("displacement_shield", eff.powerid)
self:removeTemporaryValue("displacement_shield_chance", eff.chanceid)
self.displacement_shield = nil
self.displacement_shield_chance = nil
self.displacement_shield_target = nil
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