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

Last conveyance spell: Displacement Shield

Bye bye Recall ...


git-svn-id: http://svn.net-core.org/repos/t-engine4@472 51575b47-30f0-44d4-a5cc-537603b46e54
parent 9f884fcc
No related branches found
No related tags found
No related merge requests found
......@@ -50,7 +50,9 @@ function _M:timedEffects()
todel[#todel+1] = eff
else
if _M.tempeffect_def[eff].on_timeout then
_M.tempeffect_def[eff].on_timeout(self, p)
if _M.tempeffect_def[eff].on_timeout(self, p) then
todel[#todel+1] = eff
end
end
end
end
......
......@@ -288,6 +288,16 @@ function _M:onTakeHit(value, src)
self:removeEffect(self.EFF_TIME_SHIELD)
end
end
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)
self.displacement_shield = self.displacement_shield - value
self.displacement_shield_target:takeHit(value, src)
value = 0
end
end
return value
end
......
......@@ -10,14 +10,14 @@ starty = 0
return {
[[...........O...###]],
[[...........O..####]],
[[..............####]],
[[.....oo.......####]],
[[....ouo......#####]],
[[....oo.....O######]],
[[...........#######]],
[[O..O...O..<#######]],
[[O......O..<#######]],
[[......############]],
[[.OO.##############]],
[[....##############]],
[[..################]],
[[##################]],
}
......@@ -89,30 +89,32 @@ newTalent{
}
newTalent{
name = "Recall",
type = {"spell/conveyance",3},
name = "Displacement Shield",
type = {"spell/conveyance", 3},
require = spells_req3,
points = 5,
mana = 30,
cooldown = 10,
mana = 80,
cooldown = 100,
tactical = {
DEFENSE = 10,
},
range = 10,
action = function(self, t)
--[[
local target = self
local tx, ty = self.x, self.y
if self:knowTalent(Talents.T_TELEKINESIS) or self:knowTalent(Talents.T_IMPERIOUS_SUMMON) then
local tx, ty = self:getTarget{default_target=self, type="hit", range=20}
if tx and ty then
target = game.level.map(tx, ty, Map.ACTOR) or self
end
end
local tg = {type="hit", range=self:getTalentRange(t), talent=t}
local tx, ty, target = self:getTarget(tg)
if not tx or not ty or not target then return nil end
if
]]
game.log("IMPLEMENT ME!")
local dur = util.bound(10 + math.floor(self:getTalentLevel(t) * 3), 10, 25)
local power = 50 + self:combatSpellpower(0.4) * self:getTalentLevel(t)
local chance = 20 + self:getTalentLevel(t) * 5
self:setEffect(self.EFF_DISPLACEMENT_SHIELD, dur, {power=power, target=target, chance=chance})
return true
end,
info = function(self, t)
return ([[Recalls you to your home town after a few turns.]])
return ([[This intricate spell erects a space distortion around the caster that is linked to an other one on a target.
Any time the caster should take damage there is %d%% chances that it would instead be warped byu the shield and hit the designated target.
Once the maximun damage (%d) is absorbed, the time runs out (%d turns) or the target dies the shield will crumble.
The duration and max absorption will increase with the Magic stat]]):format(20 + self:getTalentLevel(t) * 5, 50 + self:combatSpellpower(0.4) * self:getTalentLevel(t), util.bound(10 + math.floor(self:getTalentLevel(t) * 3), 10, 25))
end,
}
......
......@@ -349,6 +349,34 @@ newEffect{
end,
}
newEffect{
name = "DISPLACEMENT_SHIELD",
desc = "Displacement Shield",
type = "magical",
status = "beneficial",
parameters = { power=10, target=nil, chance=25 },
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)
--- Warning there can be only one time shield active at once for an actor
self.displacement_shield_target = eff.target
end,
on_timeout = function(self, eff)
if eff.target.dead then
eff.target = nil
return true
end
end,
deactivate = function(self, eff)
self:removeTemporaryValue("displacement_shield", eff.powerid)
self:removeTemporaryValue("displacement_shield_chance", eff.chanceid)
self.displacement_shield_target = nil
end,
}
newEffect{
name = "TIME_SHIELD",
desc = "Time Shield",
......
......@@ -18,6 +18,7 @@ newEntity{ base="BASE_NPC_ORC", define_as = "UKRUK",
resolvers.talents{
[Talents.T_SWORD_MASTERY]=10, [Talents.T_ASSAULT]=5, [Talents.T_OVERPOWER]=5,
},
combat_atk = 1000,
autolevel = "warrior",
ai = "dumb_talented_simple", ai_state = { talent_in=1, },
......
No preview for this file type
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