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