diff --git a/game/modules/tome/data/timed_effects/other.lua b/game/modules/tome/data/timed_effects/other.lua index ed107ae9b2cf7fe8747a2d7a55818c29ad8eb38d..825cd1dbda412cdf42ba99d19c8a0363efddcabe 100644 --- a/game/modules/tome/data/timed_effects/other.lua +++ b/game/modules/tome/data/timed_effects/other.lua @@ -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)