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

Virulent Disease now tries to choose smartly which disease to apply (one that...

Virulent Disease now tries to choose smartly which disease to apply (one that is not on the targe yet and that will reduce a stat that is high. So an 
archer type target will always ge the dex disease first).
Virulentt Disease damage & stat reducion buffed
Darkfire cost and cooldown reduced
Many corruption spells are now able to crit, including diseases.


git-svn-id: http://svn.net-core.org/repos/t-engine4@5036 51575b47-30f0-44d4-a5cc-537603b46e54
parent 1a128cdb
No related branches found
No related tags found
No related merge requests found
......@@ -127,7 +127,7 @@ newTalent{
self:project(tg, x, y, function(px, py)
local target = game.level.map(px, py, Map.ACTOR)
if not target then return end
target:setEffect(target.EFF_CORROSIVE_WORM, 10, {src=self, dam=self:combatTalentSpellDamage(t, 10, 60), explosion=self:spellCrit(self:combatTalentSpellDamage(t, 10, 230))})
target:setEffect(target.EFF_CORROSIVE_WORM, 10, {src=self, dam=self:spellCrit(self:combatTalentSpellDamage(t, 10, 60)), explosion=self:spellCrit(self:combatTalentSpellDamage(t, 10, 230))})
end)
game:playSoundNear(self, "talents/slime")
return true
......@@ -156,7 +156,7 @@ newTalent{
action = function(self, t)
local duration = 5 + self:getTalentLevel(t)
local radius = self:getTalentRadius(t)
local dam = self:combatTalentSpellDamage(t, 12, 130)
local dam = self:spellCrit(self:combatTalentSpellDamage(t, 12, 130))
local actor = self
-- Add a lasting map effect
game.level.map:addEffect(self,
......
......@@ -61,7 +61,7 @@ newTalent{
local x, y = self:getTarget(tg)
if not x or not y then return nil end
local dam = self:combatTalentSpellDamage(t, 5, 140)
local dam = self:spellCrit(self:combatTalentSpellDamage(t, 5, 140))
self:project(tg, x, y, function(px, py)
local target = game.level.map(px, py, engine.Map.ACTOR)
......@@ -105,7 +105,7 @@ newTalent{
end,
action = function(self, t)
local tg = self:getTalentTarget(t)
self:project(tg, self.x, self.y, DamageType.PHYSICAL, self:combatTalentSpellDamage(t, 8, 180), {type="bones"})
self:project(tg, self.x, self.y, DamageType.PHYSICAL, self:spellCrit(self:combatTalentSpellDamage(t, 8, 180)), {type="bones"})
game:playSoundNear(self, "talents/arcane")
return true
end,
......
......@@ -72,7 +72,7 @@ newTalent{
self:project(tg, x, y, function(tx, ty)
local target = game.level.map(tx, ty, Map.ACTOR)
if not target or target == self then return end
target:setEffect(target.EFF_BURNING_HEX, 20, {src=self, dam=self:combatTalentSpellDamage(t, 4, 90), power=1+(self:getTalentLevel(t) / 10), apply_power=self:combatSpellpower()})
target:setEffect(target.EFF_BURNING_HEX, 20, {src=self, dam=self:spellCrit(self:combatTalentSpellDamage(t, 4, 90)), power=1+(self:getTalentLevel(t) / 10), apply_power=self:combatSpellpower()})
end)
game:playSoundNear(self, "talents/slime")
return true
......
......@@ -27,13 +27,14 @@ newTalent{
random_ego = "attack",
tactical = { ATTACK = {BLIGHT = 2} },
requires_target = true,
no_energy = true,
range = function(self, t) return 4 + math.floor(self:getTalentLevel(t)) end,
action = function(self, t)
local tg = {type="bolt", range=self:getTalentRange(t)}
local x, y = self:getTarget(tg)
if not x or not y then return nil end
local diseases = {{self.EFF_WEAKNESS_DISEASE, "str"}, {self.EFF_ROTTING_DISEASE,"con"}, {self.EFF_DECREPITUDE_DISEASE,"dex"}}
local diseases = {{self.EFF_WEAKNESS_DISEASE, "str"}, {self.EFF_ROTTING_DISEASE, "con"}, {self.EFF_DECREPITUDE_DISEASE, "dex"}}
local disease = rng.table(diseases)
-- Try to rot !
......@@ -41,7 +42,17 @@ newTalent{
local target = game.level.map(px, py, engine.Map.ACTOR)
if not target then return end
if target:canBe("disease") then
target:setEffect(disease[1], 6, {src=self, dam=self:combatTalentSpellDamage(t, 5, 45), [disease[2]]=self:combatTalentSpellDamage(t, 5, 25), apply_power=self:combatSpellpower()})
local str, dex, con = not target:hasEffect(self.EFF_WEAKNESS_DISEASE) and target:getStr() or 0, not target:hasEffect(self.EFF_DECREPITUDE_DISEASE) and target:getDex() or 0, not target:hasEffect(self.EFF_ROTTING_DISEASE) and target:getCon() or 0
if str >= dex and str >= con then
disease = {self.EFF_WEAKNESS_DISEASE, "str"}
elseif dex >= str and dex >= con then
disease = {self.EFF_DECREPITUDE_DISEASE, "dex"}
elseif con > 0 then
disease = {self.EFF_ROTTING_DISEASE, "con"}
end
target:setEffect(disease[1], 6, {src=self, dam=self:spellCrit(7 + self:combatTalentSpellDamage(t, 6, 65)), [disease[2]]=self:combatTalentSpellDamage(t, 5, 35), apply_power=self:combatSpellpower()})
else
game.logSeen(target, "%s resists the disease!", target.name:capitalize())
end
......@@ -52,9 +63,10 @@ newTalent{
return true
end,
info = function(self, t)
return ([[Fires a bolt of pure filth, diseasing your target with a random disease doing %0.2f blight damage per turns for 6 turns and reducing one of its physical stats (strength, constitution, dexterity) by %d.
return ([[Fires a bolt of pure filth, diseasing your target with a disease doing %0.2f blight damage per turns for 6 turns and reducing one of its physical stats (strength, constitution, dexterity) by %d. The three diseases can stack.
Virulent Disease will always try to apply a disease the target does not currently have, and also one that will have the most debilitaing effect for the target.
The effect will increase with your Magic stat.]]):
format(damDesc(self, DamageType.BLIGHT, self:combatTalentSpellDamage(t, 5, 45)), self:combatTalentSpellDamage(t, 5, 25))
format(damDesc(self, DamageType.BLIGHT, 7 + self:combatTalentSpellDamage(t, 6, 65), self:combatTalentSpellDamage(t, 5, 35))
end,
}
......@@ -90,7 +102,7 @@ newTalent{
local x, y = self:getTarget(tg)
if not x or not y then return nil end
local dam = self:combatTalentSpellDamage(t, 15, 85)
local dam = self:spellCrit(self:combatTalentSpellDamage(t, 15, 85))
local diseases = {}
-- Try to rot !
......@@ -181,7 +193,7 @@ newTalent{
-- Make them EXPLODE !!!
for i, d in ipairs(diseases) do
target:removeEffect(d.id)
DamageType:get(DamageType.BLIGHT).projector(self, px, py, DamageType.BLIGHT, d.params.dam * d.params.dur)
DamageType:get(DamageType.BLIGHT).projector(self, px, py, DamageType.BLIGHT, self:spellCrit(d.params.dam * d.params.dur))
end
if #diseases > 0 and target:canBe("stun") then
......@@ -247,7 +259,7 @@ newTalent{
self:project(tg, x, y, function(px, py)
local target = game.level.map(px, py, engine.Map.ACTOR)
if not target or (self:reactionToward(target) >= 0) then return end
target:setEffect(self.EFF_EPIDEMIC, 6, {src=self, dam=self:combatTalentSpellDamage(t, 15, 50), heal_factor=40 + self:getTalentLevel(t) * 4, resist=30 + self:getTalentLevel(t) * 6, apply_power=self:combatSpellpower()})
target:setEffect(self.EFF_EPIDEMIC, 6, {src=self, dam=self:spellCrit(self:combatTalentSpellDamage(t, 15, 70)), heal_factor=40 + self:getTalentLevel(t) * 4, resist=30 + self:getTalentLevel(t) * 6, apply_power=self:combatSpellpower()})
game.level.map:particleEmitter(px, py, 1, "slime")
end)
game:playSoundNear(self, "talents/slime")
......@@ -260,6 +272,6 @@ newTalent{
Creatures suffering from that disease will also suffer healing reduction (%d%%) and diseases immunity reduction (%d%%).
Epidemic is an extremely potent disease, as such it fully ignores the target's diseases immunity.
The damage will increase with your Magic stat, and the spread chance increases with the blight damage.]]):
format(damDesc(self, DamageType.BLIGHT, self:combatTalentSpellDamage(t, 15, 50)), 40 + self:getTalentLevel(t) * 4, 30 + self:getTalentLevel(t) * 6)
format(damDesc(self, DamageType.BLIGHT, self:combatTalentSpellDamage(t, 15, 70)), 40 + self:getTalentLevel(t) * 4, 30 + self:getTalentLevel(t) * 6)
end,
}
......@@ -75,7 +75,7 @@ newTalent{
require = str_corrs_req4,
points = 5,
do_splash = function(self, t, target)
local dam = self:combatTalentSpellDamage(t, 5, 30)
local dam = self:spellCrit(self:combatTalentSpellDamage(t, 5, 30))
local atk = self:combatTalentSpellDamage(t, 15, 35)
local armor = self:combatTalentSpellDamage(t, 15, 40)
if self:getTalentLevel(t) >= 3 then
......
......@@ -42,8 +42,8 @@ newTalent{
type = {"corruption/shadowflame", 2},
require = corrs_req2,
points = 5,
cooldown = 10,
vim = 20,
cooldown = 8,
vim = 15,
requires_target = true,
range = 6,
radius = function(self, t)
......
......@@ -116,7 +116,7 @@ newTalent{
if a:canBe("disease") then
local diseases = {{self.EFF_WEAKNESS_DISEASE, "str"}, {self.EFF_ROTTING_DISEASE,"con"}, {self.EFF_DECREPITUDE_DISEASE,"dex"}}
local disease = rng.table(diseases)
a:setEffect(disease[1], 6, {src=self, dam=self:combatTalentSpellDamage(t, 12, 80), [disease[2]]=self:combatTalentSpellDamage(t, 5, 25)})
a:setEffect(disease[1], 6, {src=self, dam=self:spellCrit(self:combatTalentSpellDamage(t, 12, 80)), [disease[2]]=self:combatTalentSpellDamage(t, 5, 25)})
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