Skip to content
Snippets Groups Projects
Commit 02e130a3 authored by DarkGod's avatar DarkGod
Browse files

Merge branch 'cursed-aura-bugfix-balance' into 'master'

Cursed aura bugfix balance

There will probably be more to this once beta is underway.

See merge request !548
parents 2c0ad917 d7744f7f
No related branches found
No related tags found
No related merge requests found
......@@ -292,14 +292,14 @@ newEffect{
self:effectTemporaryValue(eff, "max_life", 300)
self:effectTemporaryValue(eff, "combat_armor", 20)
self:effectTemporaryValue(eff, "combat_armor_hardiness", 20)
self.replace_display = mod.class.Actor.new{
image="invis.png",
add_mos = {{image = "npc/giant_treant_wrathroot.png",
display_y = -1,
image="invis.png",
add_mos = {{image = "npc/giant_treant_wrathroot.png",
display_y = -1,
display_h = 2}},
}
self:removeAllMOs()
game.level.map:updateMap(self.x, self.y)
......@@ -424,7 +424,7 @@ newEffect{
if core.shader.active(4) then
self:removeParticles(eff.particle)
eff.particle = self:addParticles(Particles.new("shader_shield", 1, {size_factor=1.3, img="runicshield"}, {type="runicshield", shieldIntensity=0.14, ellipsoidalFactor=1.2, scrollingSpeed=-2, time_factor=4000, bubbleColor={1, 1, 0.3, 1.0}, auraColor={1, 0.8, 0.2, 1}}))
end
end
end,
damage_feedback = function(self, eff, src, value)
if eff.particle and eff.particle._shader and eff.particle._shader.shad and src and src.x and src.y then
......@@ -664,7 +664,7 @@ newEffect{
game:onTickEnd(function()
game:chronoClone("see_threads_base")
end)
self:effectTemporaryValue(eff, "ignore_direct_crits", eff.crits)
self:effectTemporaryValue(eff, "combat_def", eff.defense)
end,
......@@ -673,9 +673,9 @@ newEffect{
if self ~= game.player then
return
end
game:onTickEnd(function()
if game._chronoworlds == nil then
game.logSeen(self, "#LIGHT_RED#The see the threads spell fizzles and cancels, leaving you in this timeline.")
return
......@@ -847,7 +847,7 @@ newEffect{
on_merge = function(self, old_eff, new_eff)
self:removeTemporaryValue("inc_damage", old_eff.dmgid)
self:removeTemporaryValue("resists", old_eff.rstid)
self:removeTemporaryValue("reduce_detrimental_status_effects_time", old_eff.durid)
self:removeTemporaryValue("reduce_detrimental_status_effects_time", old_eff.durid)
old_eff.cur_power = (new_eff.power)
old_eff.cur_dur = new_eff.durred
old_eff.dmgid = self:addTemporaryValue("inc_damage", {all = - old_eff.dur * 2})
......@@ -904,10 +904,10 @@ newEffect{
if sx then acts[#acts+1] = {act, sx, sy} end
end
end
if #acts == 0 then
if #acts == 0 then
self.never_act = nil -- If there was ever something worth making redundant..
self:removeEffect(self.EFF_SHADOW_VEIL)
return
return
end
act = rng.table(acts)
......@@ -1010,7 +1010,7 @@ newEffect{
if bonusLevel < 3 then return end
eff.retchHealId = self:addTemporaryValue("retch_heal", 1)
eff.retchCooldown = eff.retchCooldown or 0
-- level 4: Reprieve from Death
end,
deactivate = function(self, eff)
......@@ -1019,7 +1019,7 @@ newEffect{
if eff.incStatsId then self:removeTemporaryValue("inc_stats", eff.incStatsId) eff.incStatsId = nil end
if eff.retchHealId then self:removeTemporaryValue("retch_heal", eff.retchHealId) eff.retchHealId = nil end
end,
callbackOnTakeDamage = function(self, eff, src, x, y, type, dam, state)
local def, level, bonusLevel = self.tempeffect_def[self.EFF_CURSE_OF_CORPSES], eff.level, math.min(eff.unlockLevel, eff.level)
if math.min(eff.unlockLevel, eff.level) >= 3 then
......@@ -1036,7 +1036,7 @@ newEffect{
on_timeout = function(self, eff)
if eff.retchCooldown and eff.retchCooldown > 0 then eff.retchCooldown = math.max(0, eff.retchCooldown - 1) end
end,
on_merge = function(self, old_eff, new_eff) return old_eff end,
--[[
doCorpselight = function(self, eff, target)
......@@ -1135,7 +1135,7 @@ newEffect{
end,
getDexChange = function(level) return -1 + level * 2 end,
getConspiratorChance = function(level) return 20 + (level * 10) end,
getManiaDamagePercent = function(level)
getManiaDamagePercent = function(level)
return Combat:combatLimit(level - 4, 5, 15, 0, 8, 4) -- Limit > 5%
end,
display_desc = function(self, eff) return ([[Curse of Madness (power %0.1f)]]):format(eff.level) end,
......@@ -1183,13 +1183,13 @@ newEffect{
if eff.getCombatCriticalPowerChangeId then self:removeTemporaryValue("combat_critical_power", eff.getCombatCriticalPowerChangeId) eff.getCombatCriticalPowerChangeId = nil end
if eff.incStatsId then self:removeTemporaryValue("inc_stats", eff.incStatsId) eff.incStatsId = nil end
end,
--cooldown talents on taking damage
callbackOnTakeDamage = function(self, eff, src, x, y, type, dam, state)
callbackOnTakeDamage = function(self, eff, src, x, y, type, dam, state)
if math.min(eff.unlockLevel, eff.level) >= 4 then
local def = self.tempeffect_def[self.EFF_CURSE_OF_MADNESS]
if dam > 0 and dam >= self.max_life * (def.getManiaDamagePercent(eff.level) / 100) and not self.turn_procs.CoMania then
local list = {}
for tid, cd in pairs(self.talents_cd) do
if cd and cd > 0 then
......@@ -1205,14 +1205,14 @@ newEffect{
if self.onTalentCooledDown then self:onTalentCooledDown(tid) end
end
end
game.logSeen(self, "#F53CBE#%s's mania hastens cooldowns.", self.name:capitalize())
self.turn_procs.CoMania = true
return {dam = dam}
end
end
end,
on_merge = function(self, old_eff, new_eff) return old_eff end,
--[[
--spread a random det mental effect on crit
......@@ -1287,7 +1287,7 @@ newEffect{
end
end
end,
--just confusions
--[[
doConspirator = function(self, eff, target)
......@@ -1550,7 +1550,7 @@ newEffect{
if math.min(eff.unlockLevel, eff.level) >= 3 then
--if e.status == "detrimental" and not e.subtype["cross tier"] and p.src and p.src._is_actor and not p.src.dead then
--local e = self.tempeffect_def[eff_id]
if e.status ~= "detrimental" or e.subtype["cross tier"] then return end
if e.status ~= "detrimental" or e.type == "other" or e.subtype["cross tier"] then return end
local harrowDam = def.getHarrowDam(self, level)
if p.src and p.src._is_actor then
DamageType:get(DamageType.MIND).projector(self, p.src.x, p.src.y, DamageType.MIND, dam)
......@@ -1647,7 +1647,7 @@ newEffect{
radius,
5, nil,
engine.MapEffect.new{alpha=100, color_br=134, color_bg=60, color_bb=134, effect_shader="shader_images/darkness_effect.png"},
function(e, update_shape_only) if not update_shape_only then
function(e, update_shape_only) if not update_shape_only then
-- attempt one summon per turn
if not e.src:canBe("summon") then return end
......@@ -1683,9 +1683,9 @@ newEffect{
return true
end end,
false, false)
self.turn_procs.CoNightmare = true
game.logSeen(self, "#F53CBE#The air around %s grows cold and terrifying shapes begin to coalesce. A nightmare has begun.", self.name:capitalize())
game:playSoundNear(self, "talents/cloud")
end
......@@ -1752,7 +1752,7 @@ newEffect{
eff.missedEvasionId = self:addTemporaryValue("evasion", def.getMissedOpportunities(level))
-- level 4: Unfortunate End - handled in doUnfortunateEnd
end,
deactivate = function(self, eff)
if eff.moneyValueMultiplierId then self:removeTemporaryValue("money_value_multiplier", eff.moneyValueMultiplierId) eff.moneyValueMultiplierId = nil end
......@@ -1761,7 +1761,7 @@ newEffect{
if eff.missedEvasionId then self:removeTemporaryValue("evasion", eff.missedEvasionId) eff.missedEvasionId = nil end
end,
on_merge = function(self, old_eff, new_eff) return old_eff end,
-- called by default projector in mod.data.damage_types.lua
doUnfortunateEnd = function(self, eff, target, dam)
if math.min(eff.unlockLevel, eff.level) >=4 then
......@@ -2004,11 +2004,11 @@ newEffect{
if not self.on_die then return end
-- Dreamscape doesn't cooldown in the dreamscape
self.talents_cd[self.T_DREAMSCAPE] = self.talents_cd[self.T_DREAMSCAPE] + 1
-- Spawn a copy every other turn
local spawn_time = 2
if eff.dur%spawn_time == 0 then
-- Find space
local x, y = util.findFreeGrid(eff.target.x, eff.target.y, 5, true, {[Map.ACTOR]=true})
if not x then
......@@ -2032,7 +2032,7 @@ newEffect{
m.inc_damage.all = (m.inc_damage.all or 0) - 50
end
m.lucid_dreamer = 1
-- Remove some talents
local tids = {}
for tid, _ in pairs(m.talents) do
......@@ -2042,13 +2042,13 @@ newEffect{
for i, t in ipairs(tids) do
m:unlearnTalentFull(t.id)
end
-- remove imprisonment
m:attr("invulnerable", -1)
m:attr("time_prison", -1)
m:attr("no_timeflow", -1)
m:attr("status_effect_immune", -1)
m:removeParticles(eff.particle)
m:removeTimedEffectsOnClone()
......@@ -2078,12 +2078,12 @@ newEffect{
end
end
end
-- Try to insure the AI isn't attacking the invulnerable actor
if self.ai_target and self.ai_target.actor and self.ai_target.actor:attr("invulnerable") then
self:setTarget(nil)
end
-- End the effect early if we've killed enough projections
if eff.projections_killed/10 >= eff.target.life/eff.target.max_life then
game:onTickEnd(function()
......@@ -2108,7 +2108,7 @@ newEffect{
deactivate = function(self, eff)
-- Clone protection
if not self.on_die then return end
-- Remove the target's invulnerability
eff.target:removeTemporaryValue("invulnerable", eff.iid)
eff.target:removeTemporaryValue("time_prison", eff.sid)
......@@ -2118,7 +2118,7 @@ newEffect{
-- Remove the invaders damage bonus
self:removeTemporaryValue("inc_damage", eff.pid)
self:removeTemporaryValue("lucid_dreamer", eff.did)
-- Return from the dreamscape
game:onTickEnd(function()
-- Collect objects
......@@ -2524,7 +2524,7 @@ newEffect{
self.energy.value = 0
end,
deactivate = function(self, eff) --wake up vaulted npcs in LOS
self:computeFOV(5, nil,
self:computeFOV(5, nil,
function(x, y, dx, dy, sqdist)
local act = game.level.map(x, y, Map.ACTOR)
if act then
......@@ -2723,7 +2723,7 @@ newEffect{
on_lose = function(self, err) return "#Target# rearms.", "-Disarmed" end,
activate = function(self, eff)
self:removeEffect(self.EFF_COUNTER_ATTACKING) -- Cannot parry or counterattack while disarmed
self:removeEffect(self.EFF_DUAL_WEAPON_DEFENSE)
self:removeEffect(self.EFF_DUAL_WEAPON_DEFENSE)
eff.tmpid = self:addTemporaryValue("disarmed", 1)
end,
deactivate = function(self, eff)
......@@ -2778,7 +2778,7 @@ newEffect{
self:effectTemporaryValue(eff, "timestopping", 1)
self.no_leave_control = true
core.display.pauseAnims(true)
-- clone protection
if self.player then
self:updateMainShader()
......@@ -2787,7 +2787,7 @@ newEffect{
deactivate = function(self, eff)
self.no_leave_control = false
core.display.pauseAnims(false)
-- clone protection
if self == game.player then
self:updateMainShader()
......@@ -2891,7 +2891,7 @@ newEffect{
end,
callbackOnHit = function(self, eff, cb, src)
if cb.value <= 0 then return cb.value end
local clones = {}
-- Find our clones
for i = 1, #eff.targets do
......@@ -2900,7 +2900,7 @@ newEffect{
clones[#clones+1] = target
end
end
-- Split the damage
if #clones > 0 and not self.turn_procs.temporal_fugue_damage_self and not self.turn_procs.temporal_fugue_damage_target then
self.turn_procs.temporal_fugue_damage_self = true
......@@ -2915,15 +2915,15 @@ newEffect{
target.turn_procs.temporal_fugue_damage_target = nil
end
end
self.turn_procs.temporal_fugue_damage_self = nil
end
-- If we're the last clone remove the effect
if #clones <= 0 then
self:removeEffect(self.EFF_TEMPORAL_FUGUE)
end
return cb.value
end,
on_timeout = function(self, eff)
......@@ -2931,7 +2931,7 @@ newEffect{
if self.talents_cd[self.T_TEMPORAL_FUGUE] then
self.talents_cd[self.T_TEMPORAL_FUGUE] = self.talents_cd[self.T_TEMPORAL_FUGUE] + 1
end
local alive = false
for i = 1, #eff.targets do
local target = eff.targets[i]
......@@ -3086,11 +3086,11 @@ newEffect{
newEffect{
name = "TWIST_FATE", image = "talents/twist_fate.png",
desc = "Twist Fate",
long_desc = function(self, eff)
long_desc = function(self, eff)
local t = self:getTalentFromId(eff.talent)
return
return
([[Currently Twisted Anomlay: %s
%s]]):format(t.name or "none", t.info(self, t) or "none")
end,
type = "other",
......@@ -3113,7 +3113,7 @@ newEffect{
-- manually use energy
local anom = self:getTalentFromId(eff.talent)
self:useEnergy(self:getTalentSpeed(anom) * game.energy_to_act)
game:playSoundNear(self, "talents/dispel")
self:incParadox(-eff.paradox)
end
......@@ -3464,17 +3464,17 @@ newEffect{
parameters = { power=1, dam=10, stacks = 0, max_stacks=10 },
on_merge = function(self, old_eff, new_eff)
old_eff.dur = new_eff.dur
local stackCount = old_eff.stacks + new_eff.stacks
if stackCount >= old_eff.max_stacks then
if stackCount >= old_eff.max_stacks then
stackCount = old_eff.max_stacks
end
self:removeTemporaryValue("scoundrel_failure", old_eff.failid)
old_eff.failid = self:addTemporaryValue("scoundrel_failure", old_eff.cur_fail*stackCount)
old_eff.stacks = stackCount
return old_eff
end,
activate = function(self, eff)
......@@ -3738,7 +3738,7 @@ newEffect{
name = "INTIMIDATED",
desc = "Intimidated",
long_desc = function(self, eff) return ("The target's morale is weakened, reducing its attack power, mind power, and spellpower by %d."):format(eff.power) end,
charges = function(self, eff) return math.round(eff.power) end,
charges = function(self, eff) return math.round(eff.power) end,
type = "other",
subtype = { },
status = "detrimental",
......@@ -3749,7 +3749,7 @@ newEffect{
eff.damid = self:addTemporaryValue("combat_dam", -eff.power)
eff.spellid = self:addTemporaryValue("combat_spellpower", -eff.power)
eff.mindid = self:addTemporaryValue("combat_mindpower", -eff.power)
game.level.map:particleEmitter(self.x, self.y, 1, "flame")
game.level.map:particleEmitter(self.x, self.y, 1, "flame")
end,
deactivate = function(self, eff)
self:removeTemporaryValue("combat_dam", eff.damid)
......
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