From b15cb792633daddabc634de32c96f4a8991f216e Mon Sep 17 00:00:00 2001
From: Eric Wykoff <ericwykoff@yahoo.com>
Date: Thu, 22 Jan 2015 09:09:51 -0600
Subject: [PATCH] scaling tweaks on all the rest

---
 .../data/talents/chronomancy/chronomancy.lua  |  2 --
 .../data/talents/chronomancy/fate-weaving.lua |  2 +-
 .../tome/data/talents/chronomancy/gravity.lua | 14 +++++---
 .../tome/data/talents/chronomancy/matter.lua  |  4 +--
 .../talents/chronomancy/spacetime-folding.lua | 12 +++----
 .../tome/data/talents/chronomancy/stasis.lua  | 33 +++++--------------
 .../chronomancy/timeline-threading.lua        |  3 --
 .../data/talents/chronomancy/timetravel.lua   |  2 +-
 8 files changed, 28 insertions(+), 44 deletions(-)

diff --git a/game/modules/tome/data/talents/chronomancy/chronomancy.lua b/game/modules/tome/data/talents/chronomancy/chronomancy.lua
index 5b88ef4177..1e10bb219b 100644
--- a/game/modules/tome/data/talents/chronomancy/chronomancy.lua
+++ b/game/modules/tome/data/talents/chronomancy/chronomancy.lua
@@ -168,8 +168,6 @@ newTalent{
 	paradox = function (self, t) return getParadoxCost(self, t, 20) end,
 	cooldown = 50,
 	no_npc_use = true,  -- so rares don't learn useless talents
-	allow_temporal_clones = true,  -- let clones copy it anyway so they can benefit from the effects
-	on_pre_use = function(self, t, silent) if self ~= game.player then return false end return true end,  -- but don't let them cast it
 	getDuration = function(self, t) return getExtensionModifier(self, t, math.floor(self:combatTalentScale(t, 10, 25))) end,
 	on_pre_use = function(self, t, silent)
 		if checkTimeline(self) then
diff --git a/game/modules/tome/data/talents/chronomancy/fate-weaving.lua b/game/modules/tome/data/talents/chronomancy/fate-weaving.lua
index 3902362d8c..2df1a5cbdb 100644
--- a/game/modules/tome/data/talents/chronomancy/fate-weaving.lua
+++ b/game/modules/tome/data/talents/chronomancy/fate-weaving.lua
@@ -112,7 +112,7 @@ newTalent{
 	cooldown = 12,
 	tactical = { BUFF = 2, DEFEND = 2 },
 	range = 10,
-	getPower = function(self, t) return self:combatTalentLimit(t, 25, 5, 15)/100 end, -- Limit < 25%
+	getPower = function(self, t) return self:combatTalentLimit(t, 50, 10, 30)/100 end, -- Limit < 50%
 	getDuration = function(self, t) return getExtensionModifier(self, t, 5) end,
 	no_energy = true,
 	action = function(self, t)
diff --git a/game/modules/tome/data/talents/chronomancy/gravity.lua b/game/modules/tome/data/talents/chronomancy/gravity.lua
index 8f838f70c0..ba30d898cf 100644
--- a/game/modules/tome/data/talents/chronomancy/gravity.lua
+++ b/game/modules/tome/data/talents/chronomancy/gravity.lua
@@ -190,9 +190,9 @@ newTalent{
 	cooldown = 10,
 	tactical = { BUFF = 2 },
 	points = 5,
-	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 50, getParadoxSpellpower(self, t)) end,
-	getSlow = function(self, t) return self:combatTalentLimit(t, 80, 20, 50) end,
+	getSlow = function(self, t) return self:combatTalentLimit(t, 80, 10, 50) end,
 	getAnti = function(self, t) return self:combatTalentLimit(t, 100, 10, 75) end,
+	getConversion= function(self, t) return self:combatTalentLimit(t, 100, 10, 75) end,
 	callbackOnMeleeHit = function(self, t, target)
 		if not self.dead and self:isTalentActive(self.T_GRAVITY_LOCUS) then
 			self:project({type="hit", talent=t}, target.x, target.y, DamageType.GRAVITY, {dam=t.getDamage(self, t), anti=true, dur=2, apply=getParadoxSpellpower(self, t)})
@@ -202,21 +202,25 @@ newTalent{
 		game:playSoundNear(self, "talents/heal")
 		local particle = Particles.new("ultrashield", 1, {rm=204, rM=220, gm=102, gM=120, bm=0, bM=0, am=35, aM=90, radius=0.5, density=10, life=28, instop=100})
 		return {
+			converttype = self:addTemporaryValue("all_damage_convert", DamageType.PHYSICAL),
+			convertamount = self:addTemporaryValue("all_damage_convert_percent", t.getConversion(self, t)),
 			proj = self:addTemporaryValue("slow_projectiles", t.getSlow(self, t)),
 			particle = self:addParticles(particle)
 		}
 	end,
 	deactivate = function(self, t, p)
+		self:removeTemporaryValue("all_damage_convert", p.converttype)
+		self:removeTemporaryValue("all_damage_convert_percent", p.convertamount)
 		self:removeTemporaryValue("slow_projectiles", p.proj)
 		self:removeParticles(p.particle)
 		return true
 	end,
 	info = function(self, t)
+		local conv = t.getConversion(self, t)
 		local proj = t.getSlow(self, t)
 		local anti = t.getAnti(self, t)
-		return ([[Create a gravity field around you that slows incoming projectiles by %d%% and protects you from all gravity damage and effects.
-		Additionally, damage dealt by Repulsion Blast has a %d%% chance to reduce the target's knockback resistance by half for two turns.
-		Some spells may have their damage type changed to physical by this spell.  See individual talent descriptions for details.]]):format(proj, anti)
+		return ([[Create a gravity field around you that converts %d%% of your damage to physical, slows incoming projectiles by %d%%, and protects you from all gravity damage and effects.
+		Additionally, damage dealt by Repulsion Blast has a %d%% chance to reduce the target's knockback resistance by half for two turns.]]):format(conv, proj, anti)
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/chronomancy/matter.lua b/game/modules/tome/data/talents/chronomancy/matter.lua
index 6ab61475b4..5ae740aabd 100644
--- a/game/modules/tome/data/talents/chronomancy/matter.lua
+++ b/game/modules/tome/data/talents/chronomancy/matter.lua
@@ -133,7 +133,7 @@ newTalent{
 	direct_hit = true,
 	requires_target = true,
 	radius = function(self, t) return math.floor(self:combatTalentScale(t, 1.25, 3.25)) end,
-	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 120, getParadoxSpellpower(self, t)) end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 20, 220, getParadoxSpellpower(self, t)) end,
 	getDuration = function(self, t) return getExtensionModifier(self, t, math.floor(self:combatTalentScale(t, 4, 6))) end,
 	getLength = function(self, t) return 1 + math.floor(self:combatTalentScale(t, 3, 7)/2)*2 end,
 	target = function(self, t)
@@ -228,7 +228,7 @@ newTalent{
 	cooldown = 10,
 	tactical = { BUFF = 2 },
 	getDigs = function(self, t) return math.floor(self:combatTalentScale(t, 1, 5, "log")) end,
-	getChance = function(self, t) return self:combatTalentLimit(t, 40, 10, 30) end, -- Limit < 40%end,
+	getChance = function(self, t) return self:combatTalentLimit(t, 50, 10, 40) end, -- Limit < 50%end,
 	doStrip = function(self, t, target, type)
 		local what = type == "PHYSICAL" and "physical" or "magical"
 		local p = self:isTalentActive(self.T_DISINTEGRATION)
diff --git a/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua b/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua
index 82863b44c7..9887edd813 100644
--- a/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua
+++ b/game/modules/tome/data/talents/chronomancy/spacetime-folding.lua
@@ -147,7 +147,7 @@ newTalent{
 	name = "Warp Mine Toward",
 	type = {"chronomancy/other", 1},
 	points = 1,
-	cooldown = 10,
+	cooldown = 4,
 	paradox = function (self, t) return getParadoxCost(self, t, 10) end,
 	tactical = { ATTACKAREA = { TEMPORAL = 1, PHYSICAL = 1 }, CLOSEIN = 2  },
 	requires_target = true,
@@ -198,7 +198,7 @@ newTalent{
 	name = "Warp Mine Away",
 	type = {"chronomancy/other", 1},
 	points = 1,
-	cooldown = 10,
+	cooldown = 4,
 	paradox = function (self, t) return getParadoxCost(self, t, 10) end,
 	tactical = { ATTACKAREA = { TEMPORAL = 1, PHYSICAL = 1 }, ESCAPE = 2  },
 	requires_target = true,
@@ -250,8 +250,8 @@ newTalent{
 	type = {"chronomancy/spacetime-folding", 2},
 	require = chrono_req2,
 	points = 5,
-	paradox = function (self, t) return getParadoxCost(self, t, 10) end,
-	cooldown = 10,
+	paradox = function (self, t) return getParadoxCost(self, t, 12) end,
+	cooldown = 6,
 	tactical = { ESCAPE = 2 },
 	range = 0,
 	radius = function(self, t) return math.floor(self:combatTalentScale(t, 2.5, 5.5)) end,
@@ -308,8 +308,8 @@ newTalent{
 	type = {"chronomancy/spacetime-folding", 3},
 	require = chrono_req3,
 	points = 5,
-	paradox = function (self, t) return getParadoxCost(self, t, 10) end,
-	cooldown = 10,
+	paradox = function (self, t) return getParadoxCost(self, t, 12) end,
+	cooldown = 8,
 	tactical = { DISABLE = 2 },
 	range = 10,
 	requires_target = true,
diff --git a/game/modules/tome/data/talents/chronomancy/stasis.lua b/game/modules/tome/data/talents/chronomancy/stasis.lua
index 4f1656abea..80dac709d7 100644
--- a/game/modules/tome/data/talents/chronomancy/stasis.lua
+++ b/game/modules/tome/data/talents/chronomancy/stasis.lua
@@ -76,41 +76,30 @@ newTalent{
 	require = chrono_req3,
 	points = 5,
 	paradox = function (self, t) return getParadoxCost(self, t, 20) end,
-	cooldown = 12,
+	cooldown = 8,
 	tactical = { ATTACKAREA = 1, DISABLE = 3 },
 	range = 10,
 	radius = function(self, t) return math.floor(self:combatTalentScale(t, 1.3, 2.7)) end,
 	direct_hit = true,
 	requires_target = true,
 	target = function(self, t)
-		return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=self:spellFriendlyFire(), talent=t}
+		return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=false, talent=t}
 	end,
 	getDuration = function(self, t) return getExtensionModifier(self, t, math.ceil(self:combatTalentScale(t, 2.3, 4.3))) end,
-	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 20, 170, getParadoxSpellpower(self, t)) end,
-	getDamageType = function(self, t)
-		local damage_type = DamageType.TEMPORAL
-		local dt_name = "temporal"
-		if self:isTalentActive(self.T_GRAVITY_LOCUS) then
-			damage_type = DamageType.PHYSICAL
-			dt_name = "physical"
-		end
-		return damage_type, dt_name
-	end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 20, 220, getParadoxSpellpower(self, t)) end,
 	action = function(self, t)
 		local tg = self:getTalentTarget(t)
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
 		local _ _, _, _, x, y = self:canProject(tg, x, y)
 		
-		
-		local dt_type, dt_name = t.getDamageType(self, t)
 		local dam = self:spellCrit(t.getDamage(self, t))
 		local dur = t.getDuration(self, t)
 		
 		local grids = self:project(tg, x, y, function(px, py)
 			local target = game.level.map(px, py, Map.ACTOR)
 			if target then
-				self:project({type="hit"}, px, py, dt_type, dam)
+				self:project({type="hit"}, px, py, DamageType.TEMPORAL, dam)
 				
 				-- Apply Stun or Time Prison
 				if self:hasEffect(self.EFF_STATIC_HISTORY) then
@@ -129,9 +118,7 @@ newTalent{
 			end
 		end)
 		
-		local particle_name = "temporal_flash"
-		if dt_name == "physical" then particle_name = "gravity_spike" end
-		game.level.map:particleEmitter(x, y, tg.radius, particle_name, {radius=tg.radius, tx=x, ty=y})
+		game.level.map:particleEmitter(x, y, tg.radius, "temporal_flash", {radius=tg.radius, tx=x, ty=y})
 		game:playSoundNear(self, "talents/tidalwave")
 		return true
 	end,
@@ -139,11 +126,9 @@ newTalent{
 		local damage = t.getDamage(self, t)
 		local radius = self:getTalentRadius(t)
 		local duration = t.getDuration(self, t)
-		local dt_type, dt_name = t.getDamageType(self, t)
-		return ([[Inflicts %0.2f %s damage, and attempts to stun all creatures in a radius %d ball for %d turns.
-		If you have Gravity Locus sustained this spell will deal physical damage, otherwise it deals temporal damage.
+		return ([[Inflicts %0.2f temporal damage, and attempts to stun all other creatures in a radius %d ball for %d turns.
 		The damage will scale with your Spellpower.]]):
-		format(damDesc(self, dt_type, damage), dt_name, radius, duration)
+		format(damDesc(self, DamageType.TEMPORAL, damage), radius, duration)
 	end,
 }
 
@@ -154,8 +139,8 @@ newTalent{
 	points = 5,
 	cooldown = 24,
 	tactical = { PARADOX = 2 },
-	getDuration = function(self, t) return getExtensionModifier(self, t, math.floor(self:combatTalentScale(t, 3.5, 6.5))) end,
-	getParadoxMulti = function(self, t) return self:combatTalentLimit(t, 2, 0.40, .60) end,
+	getDuration = function(self, t) return getExtensionModifier(self, t, math.floor(self:combatTalentScale(t, 3.5, 8.5))) end,
+	getParadoxMulti = function(self, t) return self:combatTalentLimit(t, 1, 0.2, .60) end, -- limit 100%
 	no_energy = true,
 	action = function(self, t)
 		game:playSoundNear(self, "talents/spell_generic")
diff --git a/game/modules/tome/data/talents/chronomancy/timeline-threading.lua b/game/modules/tome/data/talents/chronomancy/timeline-threading.lua
index a60b8f14ed..eb222d9566 100644
--- a/game/modules/tome/data/talents/chronomancy/timeline-threading.lua
+++ b/game/modules/tome/data/talents/chronomancy/timeline-threading.lua
@@ -221,9 +221,6 @@ newTalent{
 	tactical = { ATTACK = 2 },
 	requires_target = true,
 	direct_hit = true,
-	no_npc_use = true,  -- so rares don't learn useless talents
-	allow_temporal_clones = true,  -- let clones copy it anyway so they can benefit from the effects
-	on_pre_use = function(self, t, silent) if self ~= game.player then return false end return true end,  -- but don't let them cast it
 	getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 5, 9)) end,
 	getPower = function(self, t) return self:combatTalentScale(t, 20, 50, 100) end,
 	target = function(self, t)
diff --git a/game/modules/tome/data/talents/chronomancy/timetravel.lua b/game/modules/tome/data/talents/chronomancy/timetravel.lua
index 5a7f2958a2..c68b4985ae 100644
--- a/game/modules/tome/data/talents/chronomancy/timetravel.lua
+++ b/game/modules/tome/data/talents/chronomancy/timetravel.lua
@@ -296,7 +296,7 @@ newTalent{
 	end,
 	direct_hit = true,
 	requires_target = true,
-	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 18, 160, getParadoxSpellpower(self, t)) end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 20, 220, getParadoxSpellpower(self, t)) end,
 	getPercent = function(self, t) return self:combatTalentLimit(t, 60, 20, 40)/100 end,
 	action = function(self, t)
 		local tg = self:getTalentTarget(t)
-- 
GitLab