From eb799516f6a2fbe37e5d02e910a75c9a218dec34 Mon Sep 17 00:00:00 2001 From: DarkGod <darkgod@net-core.org> Date: Wed, 12 Mar 2014 12:26:59 +0100 Subject: [PATCH] New Sun Paladin tree "Radiance" --- game/engines/default/engine/utils.lua | 7 + game/modules/tome/class/interface/Combat.lua | 2 +- .../data/gfx/effects/light_burst_speed.png | Bin 0 -> 3790 bytes .../tome/data/gfx/talents/hurricane_throw.png | Bin 0 -> 4521 bytes .../tome/data/gfx/talents/illumination.png | Bin 0 -> 5238 bytes .../tome/data/gfx/talents/light_burst.png | Bin 0 -> 3879 bytes .../tome/data/gfx/talents/radiance.png | Bin 0 -> 2904 bytes .../tome/data/gfx/talents/searing_sight.png | Bin 0 -> 2410 bytes .../tome/data/talents/celestial/crusader.lua | 2 +- .../tome/data/talents/celestial/glyphs.lua | 2 +- .../tome/data/talents/celestial/radiance.lua | 134 +++++++++--------- .../tome/data/timed_effects/magical.lua | 59 ++++++++ 12 files changed, 138 insertions(+), 68 deletions(-) create mode 100644 game/modules/tome/data/gfx/effects/light_burst_speed.png create mode 100644 game/modules/tome/data/gfx/talents/hurricane_throw.png create mode 100644 game/modules/tome/data/gfx/talents/illumination.png create mode 100644 game/modules/tome/data/gfx/talents/light_burst.png create mode 100644 game/modules/tome/data/gfx/talents/radiance.png create mode 100644 game/modules/tome/data/gfx/talents/searing_sight.png diff --git a/game/engines/default/engine/utils.lua b/game/engines/default/engine/utils.lua index bdbd691c76..4204465f55 100644 --- a/game/engines/default/engine/utils.lua +++ b/game/engines/default/engine/utils.lua @@ -34,6 +34,13 @@ function math.round(v, mult, num) return v >= 0 and math.floor((v + mult/2)/mult) * mult/num or math.ceil((v - mult/2)/mult) * mult/num end +function math.scale(i, imin, imax, dmin, dmax) + local bi = i - imin + local bm = imax - imin + local dm = dmax - dmin + return bi * dm / bm + dmin +end + function lpeg.anywhere (p) return lpeg.P{ p + 1 * lpeg.V(1) } end diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua index 3785bc27d2..db94931708 100644 --- a/game/modules/tome/class/interface/Combat.lua +++ b/game/modules/tome/class/interface/Combat.lua @@ -400,7 +400,7 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam) elseif self:checkEvasion(target) then evaded = true self:logCombat(target, "#Target# evades #Source#.") - elseif self.turn_procs.auto_melee_hit or (self:checkHit(atk, def) and (self:canSee(target) or self:attr("blind_fight") or rng.chance(3))) then + elseif self.turn_procs.auto_melee_hit or (self:checkHit(atk, def) and (self:canSee(target) or self:attr("blind_fight") or target:attr("blind_fighted") or rng.chance(3))) then local pres = util.bound(target:combatArmorHardiness() / 100, 0, 1) if target.knowTalent and target:hasEffect(target.EFF_DUAL_WEAPON_DEFENSE) then local deflect = math.min(dam, target:callTalent(target.T_DUAL_WEAPON_DEFENSE, "doDeflect")) diff --git a/game/modules/tome/data/gfx/effects/light_burst_speed.png b/game/modules/tome/data/gfx/effects/light_burst_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..691ab7f0de6f207874ad056beaff8c04ff31633d GIT binary patch literal 3790 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 Ef_?Wo82|tP literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/talents/hurricane_throw.png b/game/modules/tome/data/gfx/talents/hurricane_throw.png new file mode 100644 index 0000000000000000000000000000000000000000..a61f6a5de149cc3180dda2e3605deb77eb5b070e GIT binary patch literal 4521 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 Hu0mjfKYFf8 literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/talents/illumination.png b/game/modules/tome/data/gfx/talents/illumination.png new file mode 100644 index 0000000000000000000000000000000000000000..655ea852a57f2d7e98c4751361c785cfc04589ce GIT binary patch literal 5238 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 literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/talents/light_burst.png b/game/modules/tome/data/gfx/talents/light_burst.png new file mode 100644 index 0000000000000000000000000000000000000000..83f53cfbd4d8e8567e6806ab9e4055eaa4ac7dda GIT binary patch literal 3879 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 literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/talents/radiance.png b/game/modules/tome/data/gfx/talents/radiance.png new file mode 100644 index 0000000000000000000000000000000000000000..d36dbf1f7683b263a57e6c6b00ab6360e7c14a16 GIT binary patch literal 2904 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 CntS;G literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/talents/searing_sight.png b/game/modules/tome/data/gfx/talents/searing_sight.png new file mode 100644 index 0000000000000000000000000000000000000000..343cf41f2c41b21cf8dee47e0720d645a286952d GIT binary patch literal 2410 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 literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/talents/celestial/crusader.lua b/game/modules/tome/data/talents/celestial/crusader.lua index 55ddc5b87a..b67d5612fd 100644 --- a/game/modules/tome/data/talents/celestial/crusader.lua +++ b/game/modules/tome/data/talents/celestial/crusader.lua @@ -112,7 +112,7 @@ newTalent{ return ([[While wielding a two handed weapon, your critical strike chance is increased by %d%%, and your melee criticals instill you with righteous strength, increasing all physical and light damage you deal by %d%%, stacking up to 3 times. In addition, your melee critical strikes leave a lasting lightburn on the target, dealing %0.2f light damage over 5 turns and reducing opponents armour by %d. The damage increase with your Spellpower.]]): - format(t.getCrit(self, t), t.getPower(self, t), t.getDamage(self, t), t.getArmor(self, t)) + format(t.getCrit(self, t), t.getPower(self, t), damDesc(self, DamageType.LIGHT, t.getDamage(self, t)), t.getArmor(self, t)) end, } diff --git a/game/modules/tome/data/talents/celestial/glyphs.lua b/game/modules/tome/data/talents/celestial/glyphs.lua index a02c203c0f..06d1748b3c 100644 --- a/game/modules/tome/data/talents/celestial/glyphs.lua +++ b/game/modules/tome/data/talents/celestial/glyphs.lua @@ -165,7 +165,7 @@ newTalent{ return ([[You bind light in a glyph on the floor. All targets walking over the glyph will be hit by a blast that knocks them back and does %0.2f physical damage. The glyph is a hidden trap (%d detection and %d disarm power based on your Magic) and lasts for %d turns. The damage will increase with your Spellpower.]]): - format(damDesc(self, DamageType.SPELLKNOCKBACK, damage), t.trapPower(self, t)*0.8, t.trapPower(self, t), duration) + format(damDesc(self, DamageType.PHYSICAL, damage), t.trapPower(self, t)*0.8, t.trapPower(self, t), duration) end, } diff --git a/game/modules/tome/data/talents/celestial/radiance.lua b/game/modules/tome/data/talents/celestial/radiance.lua index caaa3e1b7d..9284ff378a 100644 --- a/game/modules/tome/data/talents/celestial/radiance.lua +++ b/game/modules/tome/data/talents/celestial/radiance.lua @@ -17,6 +17,10 @@ -- Nicolas Casalini "DarkGod" -- darkgod@te4.org +function radianceRadius(self) + return self:getTalentRadius(self:getTalentFromId(self.T_RADIANCE)) +end + newTalent{ name = "Radiance", type = {"celestial/radiance", 1}, @@ -26,7 +30,7 @@ newTalent{ radius = function(self, t) return self:combatTalentScale(t, 3, 7) end, getResist = function(self, t) return math.min(100, self:combatTalentScale(t, 20, 90)) end, passives = function(self, t, p) - self:talentTemporaryValue(p, "radiance_aura", self:getTalentRadius(t)) + self:talentTemporaryValue(p, "radiance_aura", radianceRadius(self)) self:talentTemporaryValue(p, "blind_immune", t.getResist(self, t) / 100) end, info = function(self, t) @@ -34,7 +38,7 @@ newTalent{ The light protects your eyes, giving %d%% blindness resistance. The light radius overrides your normal light if it is bigger (it does not stack). ]]): - format(self:getTalentRadius(t), t.getResist(self, t)) + format(radianceRadius(self), t.getResist(self, t)) end, } @@ -43,65 +47,62 @@ newTalent{ type = {"celestial/radiance", 2}, require = divi_req2, points = 5, - random_ego = "attack", - cooldown = 22, - positive = 25, - tactical = { DISABLE = 2 }, - range = 6, - reflectable = true, - requires_target = true, - getReturnDamage = function(self, t) return self:combatLimit(self:getTalentLevel(t)^.5, 100, 15, 1, 40, 2.24) end, -- Limit <100% - action = function(self, t) - local tg = {type="bolt", range=self:getTalentRange(t), talent=t} - local x, y = self:getTarget(tg) - if not x or not y then return nil end - local _ _, x, y = self:canProject(tg, x, y) - game:playSoundNear(self, "talents/spell_generic") - local target = game.level.map(x, y, Map.ACTOR) - if target then - target:setEffect(self.EFF_MARTYRDOM, 10, {src = self, power=t.getReturnDamage(self, t), apply_power=self:combatSpellpower()}) - else - return - end - return true + mode = "passive", + getPower = function(self, t) return 15 + self:combatTalentSpellDamage(t, 1, 100) end, + getDef = function(self, t) return 5 + self:combatTalentSpellDamage(t, 1, 35) end, + callbackOnActBase = function(self, t) + local radius = radianceRadius(self) + local grids = core.fov.circle_grids(self.x, self.y, radius, true) + for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do local target = game.level.map(x, y, Map.ACTOR) if target and self ~= target then + target:setEffect(target.EFF_ILLUMINATION, 1, {power=t.getPower(self, t), def=t.getDef(self, t)}) + local ss = self:isTalentActive(self.T_SEARING_SIGHT) + if ss then + local dist = core.fov.distance(self.x, self.y, target.x, target.y) - 1 + local coeff = math.scale(radius - dist, 1, radius, 0.1, 1) + local realdam = DamageType:get(DamageType.LIGHT).projector(self, target.x, target.y, DamageType.LIGHT, ss.dam * coeff) + if ss.daze and rng.percent(ss.daze) and target:canBe("stun") then + target:setEffect(target.EFF_DAZED, 3, {apply_power=self:combatSpellpower()}) + end + + if realdam and realdam > 0 and self:hasEffect(self.EFF_LIGHT_BURST) then + self:setEffect(self.EFF_LIGHT_BURST_SPEED, 4, {}) + end + end + end end end end, info = function(self, t) - local returndamage = t.getReturnDamage(self, t) - return ([[Designate a target as a martyr for 10 turns. When the martyr deals damage, it also damages itself for %d%% of the damage dealt.]]): - format(returndamage) + return ([[The light of your Radiance allows you to see that which would normally be unseen. + All actors in your Radiance aura have their invisibility and stealth power reduced by %d. + In addition, all actors affected by illumination are easier to see and therefore hit; their defense is reduced by %d and all evasion bonuses from being unseen are negated. + The effects increase with your Spellpower.]]): + format(t.getPower(self, t), t.getDef(self, t)) end, } newTalent{ - name = "Searing Ray", + name = "Searing Sight", type = {"celestial/radiance",3}, require = divi_req3, + mode = "sustained", points = 5, - random_ego = "attack", - cooldown = 6, - positive = 10, - tactical = { ATTACK = 2 }, - requires_target = true, - range = function(self, t) return 2 + math.max(0, self:combatStatScale("str", 0.8, 8)) end, - getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.1, 1.9) end, - action = function(self, t) - local tg = {type="bolt", range=self:getTalentRange(t), talent=t} - local x, y = self:getTarget(tg) - if not x or not y then return nil end - local _ _, x, y = self:canProject(tg, x, y) - local target = game.level.map(x, y, Map.ACTOR) - if target then - self:attackTarget(target, nil, t.getDamage(self, t), true) - else - return - end - return true + cooldown = 15, + range = function(self) return radianceRadius(self) end, + tactical = { ATTACKAREA = {LIGHT=1} }, + sustain_positive = 40, + getDamage = function(self, t) return self:combatTalentSpellDamage(t, 1, 90) end, + getDaze = function(self, t) return self:combatTalentLimit(t, 35, 5, 20) end, + activate = function(self, t) + local daze = nil + if self:getTalentLevel(t) >= 4 then daze = t.getDaze(self, t) end + return {dam=t.getDamage(self, t), daze=daze} + end, + deactivate = function(self, t, p) end, info = function(self, t) - local damage = t.getDamage(self, t) - return ([[In a pure display of power, you project a melee attack, doing %d%% damage. - The range will increase with your Strength.]]): - format(100 * damage) + return ([[Your Radiance is so powerful it burns all foes caught in it, doing up to %0.2f light damage (reduced with distance) to all foes caught inside. + At level 4 the light is so bright it has %d%% chances to daze them for 3 turns. + The damage increase with your Spellpower.]]): + format(damDesc(self, DamageType.LIGHT, t.getDamage(self, t)), t.getDaze(self, t)) end, } @@ -109,27 +110,30 @@ newTalent{ name = "Light Burst", type = {"celestial/radiance", 4}, require = divi_req4, - random_ego = "attack", points = 5, - cooldown = 10, - positive = 10, - tactical = { ATTACK = {LIGHT = 2} }, - range = 1, + cooldown = 25, + positive = 15, + tactical = { DISABLE = {blind=1} }, + range = function(self) return radianceRadius(self) end, requires_target = true, - getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.8, 1.6) end, + getDur = function(self, t) return self:combatTalentLimit(t, 9, 2, 6) end, + getMax = function(self, t) return math.floor(self:combatTalentScale(t, 2, 8)) end, action = function(self, t) - local tg = {type="hit", range=self:getTalentRange(t)} - local x, y, target = self:getTarget(tg) - if not x or not y or not target then return nil end - if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end - self:attackTarget(target, DamageType.LIGHT, t.getDamage(self, t), true) - self:attackTarget(target, DamageType.LIGHT, t.getDamage(self, t), true) + local radius = radianceRadius(self) + local grids = core.fov.circle_grids(self.x, self.y, radius, true) + for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do local target = game.level.map(x, y, Map.ACTOR) if target and self ~= target then + if target:canBe("blind") then + target:setEffect(target.EFF_BLINDED, 4, {apply_power=self:combatSpellpower()}) + end + end end end + + self:setEffect(self.EFF_LIGHT_BURST, t.getDur(self, t), {max=t.getMax(self, t)}) return true end, info = function(self, t) - local damage = t.getDamage(self, t) - return ([[Concentrate the power of the Sun into two blows; each blow does %d%% of your weapon damage as light damage.]]): - format(100 * damage) + return ([[Concentrate your Radiance in a blinding flash of light. All foes caught inside will be blinded for 3 turns. + In addition for %d turns each time your Searing Sight damages a foe you gain a movement bonus of 10%%, stacking up to %d times.]]): + format(t.getDur(self, t), t.getMax(self, t)) end, } diff --git a/game/modules/tome/data/timed_effects/magical.lua b/game/modules/tome/data/timed_effects/magical.lua index 2ee4c973d6..8241a06772 100644 --- a/game/modules/tome/data/timed_effects/magical.lua +++ b/game/modules/tome/data/timed_effects/magical.lua @@ -2580,3 +2580,62 @@ newEffect{ DamageType:get(DamageType.LIGHT).projector(eff.src, self.x, self.y, DamageType.LIGHT, eff.dam) end, } + +newEffect{ + name = "ILLUMINATION", + desc = "Illumination ", image = "talents/illumination.png", + long_desc = function(self, eff) return ("The target glows in the light, reducing its stealth and invisibility power by %d, defense by %d and looses all evasion bonus from being unseen."):format(eff.power, eff.def) end, + type = "physical", + subtype = { sun=true }, + status = "detrimental", + parameters = { power=20, def=20 }, + on_gain = function(self, err) return nil, "+Illumination" end, + on_lose = function(self, err) return nil, "-Illumination" end, + activate = function(self, eff) + self:effectTemporaryValue(eff, "inc_stealth", -eff.power) + if self:attr("invisible") then self:effectTemporaryValue(eff, "invisible", -eff.power) end + self:effectTemporaryValue(eff, "combat_def", -eff.def) + self:effectTemporaryValue(eff, "blind_fighted", 1) + end, +} + +newEffect{ + name = "LIGHT_BURST", + desc = "Light Burst ", image = "talents/light_burst.png", + long_desc = function(self, eff) return ("The is invigorated when dealing damage with Searing Sight."):format() end, + type = "physical", + subtype = { sun=true }, + status = "beneficial", + parameters = { max=1 }, + on_gain = function(self, err) return nil, "+Light Burst" end, + on_lose = function(self, err) return nil, "-Light Burst" end, +} + +newEffect{ + name = "LIGHT_BURST_SPEED", + desc = "Light Burst Speed ", image = "effects/light_burst_speed.png", + long_desc = function(self, eff) return ("The is invigorated from Searing Sight, increasing movement speed by %d%%."):format(eff.charges * 10) end, + type = "physical", + subtype = { sun=true }, + status = "beneficial", + parameters = {}, + charges = function(self, eff) return eff.charges end, + on_gain = function(self, err) return nil, "+Light Burst Speed" end, + on_lose = function(self, err) return nil, "-Light Burst Speed" end, + on_merge = function(self, old_eff, new_eff) + local p = self:hasEffect(self.EFF_LIGHT_BURST) + if not p then p = {max=1} end + + new_eff.charges = math.min(old_eff.charges + 1, p.max) + self:removeTemporaryValue("movement_speed", old_eff.tmpid) + new_eff.tmpid = self:addTemporaryValue("movement_speed", new_eff.charges * 0.1) + return new_eff + end, + activate = function(self, eff) + eff.charges = 1 + eff.tmpid = self:addTemporaryValue("movement_speed", eff.charges * 0.1) + end, + deactivate = function(self, eff) + self:removeTemporaryValue("movement_speed", eff.tmpid) + end, +} -- GitLab