From ed6d3869b5268bf53abdd156b0c91787c7e06400 Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Tue, 5 Feb 2013 12:05:32 +0000 Subject: [PATCH] When reaching 0 air you now start suffocating instead of outright dying. Suffocating makes you loose life very quickly and can not be prevented by shields/absorbs/... git-svn-id: http://svn.net-core.org/repos/t-engine4@6372 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/modules/tome/class/Actor.lua | 9 ++++-- .../tome/data/gfx/effects/suffocating.png | Bin 0 -> 3748 bytes .../modules/tome/data/timed_effects/other.lua | 26 ++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 game/modules/tome/data/gfx/effects/suffocating.png diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index 8fc01030e0..310bb52edb 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -4166,8 +4166,13 @@ function _M:suffocate(value, src, death_message) self.air = self.air - value local ae = game.level.map(self.x, self.y, Map.ACTOR) if self.air <= 0 then - game.logSeen(self, "%s suffocates to death!", self.name:capitalize()) - return self:die(src, {special_death_msg=death_message or "suffocated to death"}), true + self.air = 0 + if not self:hasEffect(self.EFF_SUFFOCATING) then + game.logSeen(self, "#LIGHT_RED#%s starts suffocating to death!", self.name:capitalize()) + self:setEffect(self.EFF_SUFFOCATING, 1, {dam=20}) + end + return false, true +-- return self:die(src, {special_death_msg=death_message or "suffocated to death"}), true end return false, true end diff --git a/game/modules/tome/data/gfx/effects/suffocating.png b/game/modules/tome/data/gfx/effects/suffocating.png new file mode 100644 index 0000000000000000000000000000000000000000..06dafac20bfb5d5c6b9c7cce8130a5c4b48a3e37 GIT binary patch literal 3748 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 O0000<MNUMnLSTXx*G44( literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/timed_effects/other.lua b/game/modules/tome/data/timed_effects/other.lua index bf98cea88e..b05e7e0ef6 100644 --- a/game/modules/tome/data/timed_effects/other.lua +++ b/game/modules/tome/data/timed_effects/other.lua @@ -2193,3 +2193,29 @@ newEffect{ if self.player then engine.Map:setViewerFaction(self.faction) end end, } + +newEffect{ + name = "SUFFOCATING", + desc = "Suffocating", + long_desc = function(self, eff) return ("You are suffocating! Each turn you lose an ever increasing percent of your total life (currently %d%%)"):format(eff.dam) end, + type = "other", + subtype = { suffocating=true }, + status = "detrimental", + decrease = 0, no_remove = true, + parameters = { dam=20 }, + on_gain = function(self, err) return "#Target# is suffocating.", "+SUFFOCATING" end, + on_lose = function(self, err) return "#Target# can breathe again.", "-Suffocating" end, + on_timeout = function(self, eff) + if self.air > self.air_regen then -- We must be over our natural regen + self:removeEffect(self.EFF_SUFFOCATING, false, true) + return + end + + -- Bypass all shields & such + local old = self.onTakeHit + self.onTakeHit = nil + mod.class.interface.ActorLife.takeHit(self, self.max_life * eff.dam / 100, self, {special_death_msg="suffocated to death"}) + eff.dam = util.bound(eff.dam + 5, 20, 100) + self.onTakeHit = old + end, +} -- GitLab