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

Reworked Divination spells, there are now: Keen Senses, Arcane Eye, Vision and Premonition

git-svn-id: http://svn.net-core.org/repos/t-engine4@1700 51575b47-30f0-44d4-a5cc-537603b46e54
parent ae0ca2cb
No related branches found
No related tags found
No related merge requests found
......@@ -1515,7 +1515,7 @@ function _M:canSeeNoCache(actor, def, def_pct)
-- Check for stealth. Checks against the target cunning and level
if actor:attr("stealth") and actor ~= self then
local def = self.level / 2 + self:getCun(25)
local def = self.level / 2 + self:getCun(25) + (self:attr("see_stealth") or 0)
local hit, chance = self:checkHit(def, actor:attr("stealth") + (actor:attr("inc_stealth") or 0), 0, 100)
if not hit then
return false, chance
......
......@@ -38,6 +38,12 @@ setDefaultProjector(function(src, x, y, type, dam)
end
print("[PROJECTOR] after difficulty dam", dam)
-- Preemptive shielding
if target.isTalentActive and target:isTalentActive(target.T_PREMONITION) then
local t = target:getTalentFromId(target.T_PREMONITION)
t.on_damage(target, target.T_PREMONITION, type)
end
-- Increases damage
if src.inc_damage then
local inc = (src.inc_damage.all or 0) + (src.inc_damage[type] or 0)
......@@ -58,6 +64,7 @@ setDefaultProjector(function(src, x, y, type, dam)
end
print("[PROJECTOR] after resists dam", dam)
-- Static reduce damage
if target.isTalentActive and target:isTalentActive(target.T_ANTIMAGIC_SHIELD) then
local t = target:getTalentFromId(target.T_ANTIMAGIC_SHIELD)
dam = t.on_damage(target, target.T_ANTIMAGIC_SHIELD, type, dam)
......
......@@ -18,29 +18,35 @@
-- darkgod@te4.org
newTalent{
name = "Sense",
name = "Keen Senses",
type = {"spell/divination", 1},
require = spells_req1,
mode = "sustained",
points = 5,
random_ego = "utility",
mana = 10,
cooldown = 10,
action = function(self, t)
local rad = 10 + self:combatSpellpower(0.1) * self:getTalentLevel(t)
self:setEffect(self.EFF_SENSE, 2, {
range = rad,
actor = 1,
object = (self:getTalentLevel(t) >= 2) and 1 or 0,
trap = (self:getTalentLevel(t) >= 5) and 1 or 0,
})
sustain_mana = 40,
cooldown = 30,
activate = function(self, t)
game:playSoundNear(self, "talents/spell_generic")
return {
invis = self:addTemporaryValue("see_invisible", self:combatTalentSpellDamage(t, 2, 45)),
stealth = self:addTemporaryValue("see_stealth", self:combatTalentSpellDamage(t, 2, 20)),
crit = self:addTemporaryValue("combat_spellcrit", self:combatTalentSpellDamage(t, 2, 12)),
}
end,
deactivate = function(self, t, p)
self:removeTemporaryValue("see_invisible", p.invis)
self:removeTemporaryValue("see_stealth", p.stealth)
self:removeTemporaryValue("combat_spellcrit", p.crit)
return true
end,
info = function(self, t)
return ([[Sense foes around you in a radius of %d.
At level 2 it detects objects.
At level 5 it detects traps.
The radius will increase with the Magic stat]]):format(10 + self:combatSpellpower(0.1) * self:getTalentLevel(t))
return ([[You focus your senses, getting informations from moments in the future.
Improves see invisible +%d.
Improves see through stealth +%d.
Improves critical spell chance +%d%%.
The effects will improve with the Magic stat]]):format(
self:combatTalentSpellDamage(t, 2, 45), self:combatTalentSpellDamage(t, 2, 20), self:combatTalentSpellDamage(t, 2, 12)
)
end,
}
......@@ -97,30 +103,33 @@ newTalent{
}
newTalent{
name = "Telepathy",
name = "Premonition",
type = {"spell/divination", 4},
mode = "sustained",
require = spells_req4,
points = 5,
sustain_mana = 200,
sustain_mana = 120,
cooldown = 30,
on_damage = function(self, t, damtype)
if damtype == DamageType.PHYSICAL then return end
if not self:hasEffect(self.EFF_PREMONITION_SHIELD) then
self:setEffect(self.EFF_PREMONITION_SHIELD, 5, {damtype=damtype, resist=10 + self:combatTalentSpellDamage(t, 2, 25)})
game.logPlayer(self, "#OLIVE_DRAB#Your premonition allows you to raise a shield just in time!")
end
end,
activate = function(self, t)
-- There is an implicit +10, as it is the default radius
local rad = self:combatTalentSpellDamage(t, 2, 10)
game:playSoundNear(self, "talents/spell_generic")
return {
esp = self:addTemporaryValue("esp", {range=rad, all=1}),
drain = self:addTemporaryValue("mana_regen", -3 * self:getTalentLevelRaw(t)),
}
end,
deactivate = function(self, t, p)
self:removeTemporaryValue("esp", p.esp)
self:removeTemporaryValue("mana_regen", p.drain)
return true
end,
info = function(self, t)
return ([[Allows you to sense the presence of foes, in a radius of %d.
This powerful spell will continuously drain mana while active.
The bonus will increase with the Magic stat]]):format(10 + self:combatTalentSpellDamage(t, 2, 10))
return ([[Echos of the future flashes before your eyes, allowing you to sense some incomming attacks.
If the attack is elemental or magical you will erect a temporary shield that reduces all damage of this type by %d%% for 5 turns.
This effect can only happen once every 5 turns.
The bonus will increase with the Magic stat]]):format(10 + self:combatTalentSpellDamage(t, 2, 25), 5)
end,
}
......@@ -1918,3 +1918,20 @@ newEffect{
end
end,
}
newEffect{
name = "PREMONITION_SHIELD",
desc = "Premonition Shield",
long_desc = function(self, eff) return ("Reduces %s damage received by %d%%."):format(DamageType:get(eff.damtype).name, eff.resist) end,
type = "magical",
status = "beneficial",
parameters = { },
on_gain = function(self, err) return "#Target# casts a protective shield just in time!", "+Premonition Shield" end,
on_lose = function(self, err) return "The protective shield of #Target# disappears.", "-Premonition Shield" end,
activate = function(self, eff)
eff.tmpid = self:addTemporaryValue("resists", {[eff.damtype]=eff.resist})
end,
deactivate = function(self, eff)
self:removeTemporaryValue("resists", eff.tmpid)
end,
}
......@@ -38,7 +38,7 @@ return {
lite_room_chance = 100,
['.'] = "ROCKY_GROUND",
['#'] = "MOUNTAIN_WALL",
up = "UP",
up = "ROCKY_GROUND",
down = "DOWN",
door = "DOOR",
},
......
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