From 23d4f996553dfe8cfa438f11b0c931812b6ac5c7 Mon Sep 17 00:00:00 2001
From: Hachem_Muche <Hachem_Muche@stanfordalumni.org>
Date: Fri, 17 Feb 2017 16:02:50 -0800
Subject: [PATCH] Poison, Stoning Poison, and Deadly Poison, on merge
 automatically set their max_power to 5x the power set by default.  This means
 that their damage cannot stack more than 5x times by default.

Poisonous Bite is an unarmed attack (prevents stacking of weapon bonuses with built in multiplier).
---
 game/modules/tome/data/talents/misc/npcs.lua     |  4 ++--
 .../modules/tome/data/timed_effects/physical.lua | 16 +++++++++++-----
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/game/modules/tome/data/talents/misc/npcs.lua b/game/modules/tome/data/talents/misc/npcs.lua
index ff99a4ac2e..4c3a91b561 100644
--- a/game/modules/tome/data/talents/misc/npcs.lua
+++ b/game/modules/tome/data/talents/misc/npcs.lua
@@ -344,11 +344,11 @@ newTalent{
 		local tg = self:getTalentTarget(t)
 		local x, y, target = self:getTarget(tg)
 		if not target or not self:canProject(tg, x, y) then return nil end
-		self:attackTarget(target, DamageType.POISON, t.getMult(self, t), true)
+		self:attackTarget(target, DamageType.POISON, t.getMult(self, t), true, true)
 		return true
 	end,
 	info = function(self, t)
-		return ([[Bites the target, doing %d%% damage and injecting it with poison.]]):format(100 * t.getMult(self, t))
+		return ([[Bites the target (an unarmed attack), doing %d%% damage and injecting it with poison.]]):format(100 * t.getMult(self, t))
 	end,
 }
 
diff --git a/game/modules/tome/data/timed_effects/physical.lua b/game/modules/tome/data/timed_effects/physical.lua
index d3df07b7ee..230c658362 100644
--- a/game/modules/tome/data/timed_effects/physical.lua
+++ b/game/modules/tome/data/timed_effects/physical.lua
@@ -234,7 +234,9 @@ newEffect{
 		local dur = math.ceil((old_eff.dur + new_eff.dur) / 2)
 		old_eff.dur = dur
 		old_eff.power = (olddam + newdam) / dur
-		if new_eff.max_power then old_eff.power = math.min(old_eff.power, new_eff.max_power) end
+		-- by default, can stack up to 5x power
+		old_eff.max_power = math.max(old_eff.max_power or old_eff.power, new_eff.max_power or new_eff.power*5)
+		old_eff.power = math.min(old_eff.power, old_eff.max_power)
 		return old_eff
 	end,
 	on_timeout = function(self, eff)
@@ -397,14 +399,16 @@ newEffect{
 		old_eff.time_to_stone = math.ceil(new_eff.time_to_stone*new_fct + old_eff.time_to_stone*(1-new_fct))
 		old_eff.dur = math.max(old_eff.dur, new_eff.dur)
 		old_eff.power = dam/old_eff.dur
-		if new_eff.max_power then old_eff.power = math.min(old_eff.power, new_eff.max_power) end
-		old_eff._from_toxic_death = nil
+		-- by default, can stack up to 5x power
+		old_eff.max_power = math.max(old_eff.max_power or old_eff.power, new_eff.max_power or new_eff.power*5)
+		old_eff.power = math.min(old_eff.power, old_eff.max_power)
+--		old_eff._from_toxic_death = nil
 		return old_eff
 	end,
 	activate = function(self, eff)
 		if eff._from_toxic_death then -- reset turn counter if spread from Toxic Death
 			eff.turn_count = 0
-			eff._from_toxic_death = nil
+--			eff._from_toxic_death = nil
 		end
 	end,
 	deactivate = function(self, eff) -- chance to stone when deactivated
@@ -3156,7 +3160,9 @@ newEffect{
 		local dur = math.ceil((old_eff.dur + new_eff.dur) / 2)
 		old_eff.dur = dur
 		old_eff.power = (olddam + newdam) / dur
-		if new_eff.max_power then old_eff.power = math.min(old_eff.power, new_eff.max_power) end
+		-- by default, can stack up to 5x power
+		old_eff.max_power = math.max(old_eff.max_power or old_eff.power, new_eff.max_power or new_eff.power*5)
+		old_eff.power = math.min(old_eff.power, old_eff.max_power)
 		if old_eff.healid then 
 			self:removeTemporaryValue("healing_factor", old_eff.healid)
 			old_eff.healid = null
-- 
GitLab