From 872cea9077ffaff6947b05ed1b64d2b78567d7b6 Mon Sep 17 00:00:00 2001
From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54>
Date: Sat, 2 Apr 2011 16:59:13 +0000
Subject: [PATCH] Overhauled the speeds system. Now when a talent or object
 grants +X% foo speed it means you can do X% more of action foo in the same
 time. So if you get a 100% combat speed increase you will attack twice as
 fast

git-svn-id: http://svn.net-core.org/repos/t-engine4@3144 51575b47-30f0-44d4-a5cc-537603b46e54
---
 .../default/engine/GameEnergyBased.lua        |  4 +-
 game/modules/tome/class/Actor.lua             |  6 +-
 game/modules/tome/class/Object.lua            |  2 +
 game/modules/tome/class/interface/Combat.lua  |  9 +--
 game/modules/tome/data/birth/races/undead.lua |  2 +-
 .../data/general/npcs/aquatic_critter.lua     |  7 +--
 .../tome/data/general/npcs/aquatic_demon.lua  |  1 -
 game/modules/tome/data/general/npcs/bear.lua  |  4 +-
 game/modules/tome/data/general/npcs/bird.lua  |  2 +-
 .../tome/data/general/npcs/bone-giant.lua     |  3 +-
 .../modules/tome/data/general/npcs/canine.lua |  4 +-
 .../tome/data/general/npcs/cold-drake.lua     |  3 +-
 .../tome/data/general/npcs/construct.lua      |  1 -
 .../tome/data/general/npcs/crystal.lua        |  4 +-
 .../tome/data/general/npcs/elven-caster.lua   |  1 -
 .../tome/data/general/npcs/elven-warrior.lua  |  1 -
 .../modules/tome/data/general/npcs/faeros.lua |  3 +-
 .../tome/data/general/npcs/fire-drake.lua     |  3 +-
 game/modules/tome/data/general/npcs/ghost.lua |  1 -
 game/modules/tome/data/general/npcs/ghoul.lua |  3 +-
 .../tome/data/general/npcs/gwelgoroth.lua     |  1 -
 .../data/general/npcs/horror-corrupted.lua    |  9 +--
 .../modules/tome/data/general/npcs/horror.lua | 11 ++--
 game/modules/tome/data/general/npcs/jelly.lua |  1 -
 game/modules/tome/data/general/npcs/lich.lua  |  1 -
 .../tome/data/general/npcs/major-demon.lua    |  9 ++-
 .../tome/data/general/npcs/minor-demon.lua    |  3 +-
 .../tome/data/general/npcs/minotaur.lua       |  4 +-
 game/modules/tome/data/general/npcs/molds.lua |  2 +-
 .../data/general/npcs/multihued-drake.lua     |  3 +-
 game/modules/tome/data/general/npcs/mummy.lua |  4 +-
 game/modules/tome/data/general/npcs/naga.lua  |  4 +-
 game/modules/tome/data/general/npcs/ooze.lua  |  2 +-
 .../tome/data/general/npcs/orc-gorbat.lua     |  3 +-
 .../tome/data/general/npcs/orc-grushnak.lua   |  3 +-
 .../tome/data/general/npcs/orc-rak-shor.lua   |  3 +-
 .../tome/data/general/npcs/orc-vor.lua        |  3 +-
 game/modules/tome/data/general/npcs/orc.lua   |  3 +-
 game/modules/tome/data/general/npcs/plant.lua |  3 +-
 game/modules/tome/data/general/npcs/ritch.lua |  4 +-
 .../modules/tome/data/general/npcs/rodent.lua |  1 -
 .../tome/data/general/npcs/skeleton.lua       |  3 +-
 game/modules/tome/data/general/npcs/snake.lua |  6 +-
 .../tome/data/general/npcs/snow-giant.lua     |  3 +-
 .../modules/tome/data/general/npcs/spider.lua |  6 +-
 .../tome/data/general/npcs/storm-drake.lua    |  3 +-
 .../tome/data/general/npcs/sunwall-town.lua   |  1 -
 game/modules/tome/data/general/npcs/swarm.lua |  4 +-
 .../tome/data/general/npcs/telugoroth.lua     |  2 +-
 .../modules/tome/data/general/npcs/thieve.lua |  1 -
 game/modules/tome/data/general/npcs/troll.lua |  3 +-
 .../tome/data/general/npcs/vampire.lua        |  5 +-
 .../modules/tome/data/general/npcs/vermin.lua |  4 +-
 game/modules/tome/data/general/npcs/wight.lua |  3 +-
 game/modules/tome/data/general/npcs/xorn.lua  |  3 +-
 .../tome/data/general/npcs/ziguranth.lua      |  1 -
 .../data/general/objects/boss-artifacts.lua   |  1 -
 .../data/general/objects/egos/amulets.lua     |  2 +-
 .../tome/data/general/objects/egos/boots.lua  |  4 +-
 .../data/general/objects/egos/light-armor.lua |  2 +-
 .../tome/data/general/objects/egos/staves.lua |  2 +-
 .../tome/data/maps/quests/lost-merchant.lua   |  1 -
 .../data/talents/chronomancy/anomalies.lua    | 33 +++++-----
 .../talents/chronomancy/speed-control.lua     |  8 +--
 .../data/talents/corruptions/shadowflame.lua  |  6 +-
 .../tome/data/talents/cursed/shadows.lua      |  1 -
 .../tome/data/talents/divine/glyphs.lua       |  4 +-
 .../tome/data/talents/gifts/summon-melee.lua  |  4 +-
 game/modules/tome/data/talents/misc/races.lua |  6 +-
 .../tome/data/talents/spells/golemancy.lua    |  1 -
 .../tome/data/talents/spells/nature.lua       |  1 -
 .../tome/data/talents/spells/temporal.lua     |  8 +--
 .../tome/data/talents/techniques/archery.lua  | 18 ++++--
 .../talents/techniques/combat-techniques.lua  |  8 +--
 .../data/talents/techniques/dualweapon.lua    |  4 +-
 .../talents/techniques/unarmed-discipline.lua | 38 ++++++------
 game/modules/tome/data/timed_effects.lua      | 60 +++++++++----------
 .../tome/data/zones/arena-unlock/npcs.lua     |  3 -
 game/modules/tome/data/zones/arena/npcs.lua   |  1 -
 .../tome/data/zones/blighted-ruins/npcs.lua   |  1 -
 .../tome/data/zones/charred-scar/npcs.lua     |  2 -
 .../tome/data/zones/deep-bellow/npcs.lua      |  2 +-
 .../tome/data/zones/flooded-cave/npcs.lua     |  2 +-
 .../tome/data/zones/orc-breeding-pit/npcs.lua |  4 +-
 game/modules/tome/data/zones/reknor/npcs.lua  |  2 +-
 .../tome/data/zones/ring-of-blood/npcs.lua    |  1 -
 .../tome/data/zones/sandworm-lair/npcs.lua    |  1 -
 .../tome/data/zones/tannen-tower/npcs.lua     |  2 -
 .../data/zones/temple-of-creation/npcs.lua    |  2 +-
 .../tome/data/zones/town-angolwen/npcs.lua    |  1 -
 .../tome/data/zones/town-derth/npcs.lua       |  1 -
 .../tome/data/zones/town-elvala/npcs.lua      |  1 -
 .../data/zones/town-iron-council/npcs.lua     |  1 -
 .../tome/data/zones/town-last-hope/npcs.lua   |  1 -
 94 files changed, 187 insertions(+), 242 deletions(-)

diff --git a/game/engines/default/engine/GameEnergyBased.lua b/game/engines/default/engine/GameEnergyBased.lua
index e29eda7535..2956d7e7c1 100644
--- a/game/engines/default/engine/GameEnergyBased.lua
+++ b/game/engines/default/engine/GameEnergyBased.lua
@@ -66,7 +66,7 @@ function _M:tick()
 			if e and e.act and e.energy then
 --				print("<ENERGY", e.name, e.uid, "::", e.energy.value, self.paused, "::", e.player)
 				if e.energy.value < self.energy_to_act then
-					e.energy.value = (e.energy.value or 0) + self.energy_per_tick * (e.energy.mod or 1)
+					e.energy.value = (e.energy.value or 0) + self.energy_per_tick * (e.energy.mod or 1) * (e.global_speed or 1)
 				end
 				if e.energy.value >= self.energy_to_act then
 					e.energy.used = false
@@ -82,7 +82,7 @@ function _M:tick()
 		e = arr[i]
 		if e and e.act and e.energy then
 			if e.energy.value < self.energy_to_act then
-				e.energy.value = (e.energy.value or 0) + self.energy_per_tick * (e.energy.mod or 1)
+				e.energy.value = (e.energy.value or 0) + self.energy_per_tick * (e.energy.mod or 1) * (e.global_speed or 1)
 			end
 			if e.energy.value >= self.energy_to_act then
 				e.energy.used = false
diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index 01ae2c2ad2..01e0644ea1 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -74,9 +74,11 @@ function _M:init(t, no_default)
 	self.combat_atk = 0
 	self.combat_apr = 0
 	self.combat_dam = 0
+	self.global_speed = 1
+	self.movement_speed = 1
 	self.combat_physcrit = 0
-	self.combat_physspeed = 0
-	self.combat_spellspeed = 0
+	self.combat_physspeed = 1
+	self.combat_spellspeed = 1
 	self.combat_spellcrit = 0
 	self.combat_spellpower = 0
 	self.combat_mindpower = 0
diff --git a/game/modules/tome/class/Object.lua b/game/modules/tome/class/Object.lua
index a1de528c05..7b101bb0b8 100644
--- a/game/modules/tome/class/Object.lua
+++ b/game/modules/tome/class/Object.lua
@@ -440,6 +440,8 @@ function _M:getTextualDesc()
 	if w.invisible then desc:add(("Invisibility: %d"):format(w.invisible), true) end
 
 	if w.movement_speed then desc:add(("Movement speed: %d%%"):format(w.movement_speed * 100), true) end
+	if w.combat_physspeed then desc:add(("Combat speed: %d%%"):format(w.combat_physspeed * 100), true) end
+	if w.combat_spellspeed then desc:add(("Casting speed: %d%%"):format(w.combat_spellspeed * 100), true) end
 
 	if w.healing_factor then desc:add(("Increases all healing by %d%%"):format(w.healing_factor * 100), true) end
 
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 5aaf124eba..59dd2338e9 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -552,7 +552,7 @@ end
 --- Gets the weapon speed
 function _M:combatSpeed(weapon)
 	weapon = weapon or self.combat or {}
-	return self.combat_physspeed + (weapon.physspeed or 1)
+	return (weapon.physspeed or 1) / self.combat_physspeed
 end
 
 --- Gets the crit rate
@@ -679,7 +679,7 @@ end
 
 --- Gets spellspeed
 function _M:combatSpellSpeed()
-	return self.combat_spellspeed + 1
+	return 1 / self.combat_spellspeed
 end
 
 --- Computes physical crit for a damage
@@ -832,10 +832,7 @@ end
 
 --- Computes movement speed
 function _M:combatMovementSpeed()
-	local v = util.bound(1 + (self.movement_speed or 0), 0.2, 10)
-	if v >= 1 then return v
-	else return math.pow(0.4, 1 - v)
-	end
+	return (self.base_movement_speed or 1) / self.movement_speed
 end
 
 --- Check if the actor has a gem bomb in quiver
diff --git a/game/modules/tome/data/birth/races/undead.lua b/game/modules/tome/data/birth/races/undead.lua
index dc809e8d26..5f0ed99a24 100644
--- a/game/modules/tome/data/birth/races/undead.lua
+++ b/game/modules/tome/data/birth/races/undead.lua
@@ -104,7 +104,7 @@ newBirthDescriptor
 		cut_immune = 1,
 		stun_immune = 0.5,
 		fear_immune = 1,
-		energy = {mod=0.8},
+		global_speed = 0.8,
 	},
 	experience = 1.4,
 }
diff --git a/game/modules/tome/data/general/npcs/aquatic_critter.lua b/game/modules/tome/data/general/npcs/aquatic_critter.lua
index f9ba2b6540..c04fed8ebb 100644
--- a/game/modules/tome/data/general/npcs/aquatic_critter.lua
+++ b/game/modules/tome/data/general/npcs/aquatic_critter.lua
@@ -29,7 +29,6 @@ newEntity{
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
 	stats = { str=12, dex=10, mag=3, con=13 },
-	energy = { mod=1 },
 	combat_armor = 1, combat_def = 1,
 	combat = { dam=resolvers.levelup(resolvers.mbonus(36, 10), 1, 1), atk=15, apr=7, dammod={str=0.6} },
 	max_life = resolvers.rngavg(10,20), life_rating = 6,
@@ -58,7 +57,7 @@ newEntity{ base = "BASE_NPC_AQUATIC_CRITTER",
 	resolvers.talents{ [Talents.T_CHAIN_LIGHTNING]=3, [Talents.T_LIGHTNING]=3 },
 	on_die = function(self, who)
 		local part = "ELECTRIC_EEL_TAIL"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
@@ -95,7 +94,7 @@ newEntity{ base = "BASE_NPC_AQUATIC_CRITTER",
 	resolvers.talents{ [Talents.T_GRAB]=3, },
 	on_die = function(self, who)
 		local part = "SQUID_INK"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
@@ -110,7 +109,7 @@ newEntity{ base = "BASE_NPC_AQUATIC_CRITTER",
 	resolvers.talents{ [Talents.T_GRAB]=3, [Talents.T_BLINDING_INK]=3, },
 	on_die = function(self, who)
 		local part = "SQUID_INK"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/aquatic_demon.lua b/game/modules/tome/data/general/npcs/aquatic_demon.lua
index 17128a795c..e20176dc63 100644
--- a/game/modules/tome/data/general/npcs/aquatic_demon.lua
+++ b/game/modules/tome/data/general/npcs/aquatic_demon.lua
@@ -30,7 +30,6 @@ newEntity{
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
 	stats = { str=12, dex=10, mag=3, con=13 },
-	energy = { mod=1 },
 	combat_armor = 1, combat_def = 1,
 	combat = { dam=resolvers.levelup(resolvers.mbonus(46, 20), 1, 1), atk=15, apr=7, dammod={str=0.7} },
 	max_life = resolvers.rngavg(100,120),
diff --git a/game/modules/tome/data/general/npcs/bear.lua b/game/modules/tome/data/general/npcs/bear.lua
index 3a82db712d..dc6e8dbc57 100644
--- a/game/modules/tome/data/general/npcs/bear.lua
+++ b/game/modules/tome/data/general/npcs/bear.lua
@@ -31,7 +31,7 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=5, },
-	energy = { mod=0.9 },
+	global_speed = 0.9,
 	stats = { str=18, dex=13, mag=5, con=15 },
 	infravision = 20,
 	rank = 2,
@@ -45,7 +45,7 @@ newEntity{
 	resists = { [DamageType.FIRE] = 20, [DamageType.COLD] = 20, [DamageType.POISON] = 20 },
 	on_die = function(self, who)
 		local part = "BEAR_PAW"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/bird.lua b/game/modules/tome/data/general/npcs/bird.lua
index 858248d1ec..2a315d0dc3 100644
--- a/game/modules/tome/data/general/npcs/bird.lua
+++ b/game/modules/tome/data/general/npcs/bird.lua
@@ -30,7 +30,7 @@ newEntity{
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
 
 	stats = { str=12, dex=20, mag=3, con=13 },
-	energy = { mod=1.2 },
+	global_speed = 1.2,
 	combat_armor = 1, combat_def = 5,
 	combat = { dam=5, atk=15, apr=7, dammod={str=0.6} },
 	infravision = 20,
diff --git a/game/modules/tome/data/general/npcs/bone-giant.lua b/game/modules/tome/data/general/npcs/bone-giant.lua
index 85908f21dc..95264ba317 100644
--- a/game/modules/tome/data/general/npcs/bone-giant.lua
+++ b/game/modules/tome/data/general/npcs/bone-giant.lua
@@ -37,7 +37,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	energy = { mod=1 },
 	stats = { str=20, dex=52, mag=16, con=16 },
 
 	resists = { [DamageType.PHYSICAL] = 20, [DamageType.BLIGHT] = 20, [DamageType.COLD] = 50, },
@@ -53,7 +52,7 @@ newEntity{
 	undead = 1,
 	on_die = function(self, who)
 		local part = "BONE_GOLEM_DUST"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/canine.lua b/game/modules/tome/data/general/npcs/canine.lua
index 09180d15dd..488a6c2732 100644
--- a/game/modules/tome/data/general/npcs/canine.lua
+++ b/game/modules/tome/data/general/npcs/canine.lua
@@ -34,7 +34,7 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	energy = { mod=1.1 },
+	global_speed = 1.2,
 	stats = { str=10, dex=17, mag=3, con=7 },
 	combat = { dammod={str=0.6} },
 	combat_armor = 1, combat_def = 1,
@@ -96,7 +96,7 @@ newEntity{ base = "BASE_NPC_CANINE",
 	resolvers.talents{ [Talents.T_HOWL]=3, },
 	on_die = function(self, who)
 		local part = "WARG_CLAW"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/cold-drake.lua b/game/modules/tome/data/general/npcs/cold-drake.lua
index 03ecc5d2cd..4cae85ce04 100644
--- a/game/modules/tome/data/general/npcs/cold-drake.lua
+++ b/game/modules/tome/data/general/npcs/cold-drake.lua
@@ -34,7 +34,6 @@ newEntity{
 
 	autolevel = "drake",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	energy = { mod=1 },
 	stats = { str=20, dex=20, mag=30, con=16 },
 
 	resists = { [DamageType.COLD] = 100, },
@@ -106,7 +105,7 @@ newEntity{ base = "BASE_NPC_COLD_DRAKE",
 	},
 	on_die = function(self, who)
 		local part = "ICE_WYRM_TOOTH"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/construct.lua b/game/modules/tome/data/general/npcs/construct.lua
index f40ca5ee89..4a8c95b405 100644
--- a/game/modules/tome/data/general/npcs/construct.lua
+++ b/game/modules/tome/data/general/npcs/construct.lua
@@ -46,7 +46,6 @@ newEntity{
 
 	autolevel = "warriormage",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	energy = { mod=1 },
 	stats = { str=20, mag=16, con=22 },
 	resolvers.talents{
 		[Talents.T_STAMINA_POOL]=1, [Talents.T_MANA_POOL]=1,
diff --git a/game/modules/tome/data/general/npcs/crystal.lua b/game/modules/tome/data/general/npcs/crystal.lua
index cf9cc981ab..0597706023 100644
--- a/game/modules/tome/data/general/npcs/crystal.lua
+++ b/game/modules/tome/data/general/npcs/crystal.lua
@@ -14,7 +14,7 @@ newEntity{
 
 	max_life = resolvers.rngavg(12,34),
 	stats = { str=1, dex=5, mag=20, con=1 },
-	energy = { mod=0.5 },
+	global_speed = 0.7,
 	infravision = 20,
 	combat_def = 1,
 	never_move = 1,
@@ -53,7 +53,7 @@ newEntity{ name = "wisp",
 	life_rating = 1, rank = 1, size_category = 1,
 	autolevel = "caster",
 	ai = "dumb_talented_simple", ai_state = { ai_move = "move_astar", talent_in = 1 },
-	energy = { mod = 1 },
+	global_speed = 1,
 	stats = { str = 9, dex = 20, mag = 20 },
 	resolvers.talents{
 		[Talents.T_EXPLODE] = 3,
diff --git a/game/modules/tome/data/general/npcs/elven-caster.lua b/game/modules/tome/data/general/npcs/elven-caster.lua
index ea885895cb..d8873c3c18 100644
--- a/game/modules/tome/data/general/npcs/elven-caster.lua
+++ b/game/modules/tome/data/general/npcs/elven-caster.lua
@@ -47,7 +47,6 @@ newEntity{
 
 	autolevel = "caster",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
-	energy = { mod=1 },
 	stats = { str=20, dex=8, mag=6, con=16 },
 }
 
diff --git a/game/modules/tome/data/general/npcs/elven-warrior.lua b/game/modules/tome/data/general/npcs/elven-warrior.lua
index 8b34ded8e7..0ab8bbefb5 100644
--- a/game/modules/tome/data/general/npcs/elven-warrior.lua
+++ b/game/modules/tome/data/general/npcs/elven-warrior.lua
@@ -46,7 +46,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=20, dex=8, mag=6, con=16 },
 }
 
diff --git a/game/modules/tome/data/general/npcs/faeros.lua b/game/modules/tome/data/general/npcs/faeros.lua
index 1f7c54dc5d..f8809cfa3a 100644
--- a/game/modules/tome/data/general/npcs/faeros.lua
+++ b/game/modules/tome/data/general/npcs/faeros.lua
@@ -37,7 +37,6 @@ newEntity{
 
 	autolevel = "dexmage",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	energy = { mod=1 },
 	stats = { str=10, dex=8, mag=6, con=16 },
 
 	resists = { [DamageType.PHYSICAL] = 10, [DamageType.FIRE] = 100, [DamageType.COLD] = -30, },
@@ -47,7 +46,7 @@ newEntity{
 	disease_immune = 1,
 	on_die = function(self, who)
 		local part = "FAEROS_ASH"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/fire-drake.lua b/game/modules/tome/data/general/npcs/fire-drake.lua
index 80fe529b3a..f51649411e 100644
--- a/game/modules/tome/data/general/npcs/fire-drake.lua
+++ b/game/modules/tome/data/general/npcs/fire-drake.lua
@@ -34,7 +34,6 @@ newEntity{
 
 	autolevel = "drake",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	energy = { mod=1 },
 	stats = { str=20, dex=20, mag=30, con=16 },
 
 	resists = { [DamageType.FIRE] = 100, },
@@ -110,7 +109,7 @@ newEntity{ base = "BASE_NPC_FIRE_DRAKE",
 	},
 	on_die = function(self, who)
 		local part = "FIRE_WYRM_SALIVA"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/ghost.lua b/game/modules/tome/data/general/npcs/ghost.lua
index 150bef39a9..93abcad5f3 100644
--- a/game/modules/tome/data/general/npcs/ghost.lua
+++ b/game/modules/tome/data/general/npcs/ghost.lua
@@ -30,7 +30,6 @@ newEntity{
 	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
 	autolevel = "warriormage",
 	ai = "dumb_talented_simple", ai_state = { ai_target="target_player_radius", sense_radius=40, talent_in=2, },
-	energy = { mod=1 },
 	stats = { str=14, dex=18, mag=20, con=12 },
 	rank = 2,
 	size_category = 3,
diff --git a/game/modules/tome/data/general/npcs/ghoul.lua b/game/modules/tome/data/general/npcs/ghoul.lua
index 0973930192..2e988905e6 100644
--- a/game/modules/tome/data/general/npcs/ghoul.lua
+++ b/game/modules/tome/data/general/npcs/ghoul.lua
@@ -30,7 +30,6 @@ newEntity{
 	drops = resolvers.drops{chance=70, nb=1, {type="money"}, {} },
 	autolevel = "ghoul",
 	ai = "dumb_talented_simple", ai_state = { talent_in=2, ai_move="move_ghoul", },
-	energy = { mod=1 },
 	stats = { str=14, dex=12, mag=10, con=12 },
 	rank = 2,
 	size_category = 3,
@@ -46,7 +45,7 @@ newEntity{
 	undead = 1,
 	on_die = function(self, who)
 		local part = "GHOUL_FLESH"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/gwelgoroth.lua b/game/modules/tome/data/general/npcs/gwelgoroth.lua
index c9bc1fa203..45e2689f63 100644
--- a/game/modules/tome/data/general/npcs/gwelgoroth.lua
+++ b/game/modules/tome/data/general/npcs/gwelgoroth.lua
@@ -36,7 +36,6 @@ newEntity{
 
 	autolevel = "dexmage",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	energy = { mod=1 },
 	stats = { str=10, dex=8, mag=6, con=16 },
 
 	resists = { [DamageType.PHYSICAL] = 10, [DamageType.LIGHTNING] = 100, [DamageType.FIRE] = -30, },
diff --git a/game/modules/tome/data/general/npcs/horror-corrupted.lua b/game/modules/tome/data/general/npcs/horror-corrupted.lua
index 357e48d75b..cc9c17b733 100644
--- a/game/modules/tome/data/general/npcs/horror-corrupted.lua
+++ b/game/modules/tome/data/general/npcs/horror-corrupted.lua
@@ -32,7 +32,6 @@ newEntity{
 	combat = { atk=2, dammod={str=0.6} },
 --	max_life = resolvers.rngavg(30, 50),
 	stats = { str=16, con=16 },
-	energy = { mod=1 },
 	infravision = 20,
 	rank = 2,
 	size_category = 3,
@@ -160,8 +159,6 @@ newEntity{ base = "BASE_NPC_CORRUPTED_HORROR",
 	desc = "A giant hairless bat with the face of a dwarven man twisted into a constant scream.  Pestulant sores cover it's malformed body and your heart weakens as it nears.",
 	level_range = {1, nil}, exp_worth = 1,
 
-	energy = { mod=0.7 },
-
 	combat = { atk=10, dammod={dex=0.6} },
 	combat_armor = 0, combat_def = 6,
 	max_life = resolvers.rngavg(10, 20),
@@ -172,7 +169,7 @@ newEntity{ base = "BASE_NPC_CORRUPTED_HORROR",
 	autolevel = "rogue",
 	ai = "tactical", ai_state = { talent_in=2, ai_move="move_astar", },
 	ai_tactic = resolvers.tactic "ranged",
-	energy = { mod=1.2 },
+	global_speed = 1.2,
 
 	resists = { [DamageType.BLIGHT] = 50, [DamageType.DARKNESS] = 20,  [DamageType.LIGHT] = - 20 },
 
@@ -199,7 +196,7 @@ newEntity{ base = "BASE_NPC_CORRUPTED_HORROR",
 	size_category = 3,
 	autolevel = "warrior",
 
-	energy = { mod=0.8 },
+	global_speed = 0.8,
 
 	resists = { [DamageType.ACID] = 50, [DamageType.DARKNESS] = 20,  [DamageType.LIGHT] = - 20 },
 
@@ -229,7 +226,7 @@ newEntity{ base = "BASE_NPC_CORRUPTED_HORROR",
 	autolevel = "caster",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
 
-	energy = { mod=0.8 },
+	global_speed = 0.8,
 
 	resists = { [DamageType.DARKNESS] = 50,  [DamageType.LIGHT] = - 20 },
 
diff --git a/game/modules/tome/data/general/npcs/horror.lua b/game/modules/tome/data/general/npcs/horror.lua
index 9c52456b2e..145a072699 100644
--- a/game/modules/tome/data/general/npcs/horror.lua
+++ b/game/modules/tome/data/general/npcs/horror.lua
@@ -31,7 +31,6 @@ newEntity{
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
 
 	stats = { str=22, dex=20, wil=15, con=15 },
-	energy = { mod=1 },
 	combat_armor = 0, combat_def = 0,
 	combat = { dam=5, atk=15, apr=7, dammod={str=0.6} },
 	infravision = 20,
@@ -118,7 +117,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	resolvers.sustains_at_birth(),
 	on_die = function(self, who)
 		local part = "BLOATED_HORROR_HEART"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
@@ -397,7 +396,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	},
 	on_die = function(self, who)
 		local part = "LUMINOUS_HORROR_DUST"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
@@ -492,7 +491,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	size_category = 4,
 	autolevel = "warrior",
 	max_life = resolvers.rngavg(120, 150),
-	energy = { mod=0.7 },
+	global_speed = 0.7,
 	combat_armor = 1, combat_def = 0,
 	combat = { dam=resolvers.levelup(resolvers.rngavg(25,150), 1, 1.2), atk=resolvers.rngavg(25,130), apr=1, dammod={str=1.1} },
 
@@ -542,7 +541,7 @@ newEntity{ base = "BASE_NPC_HORROR",
 	rarity = 6,
 	size_category = 3,
 	max_life = resolvers.rngavg(50,70),
-	energy = { mod=1.2 },
+	global_speed = 1.2,
 	autolevel = "rogue",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
 	combat_armor = 10, combat_def = 10,
@@ -610,7 +609,7 @@ You can discern a huge round mouth covered in razor-sharp teeth.]],
 	rank = 3.5,
 	no_breath = 1,
 	size_category = 4,
-	movement_speed = 1.2,
+	movement_speed = 0.8,
 
 	stun_immune = 1,
 	knockback_immune = 1,
diff --git a/game/modules/tome/data/general/npcs/jelly.lua b/game/modules/tome/data/general/npcs/jelly.lua
index 64bcbd9f8e..934b652b96 100644
--- a/game/modules/tome/data/general/npcs/jelly.lua
+++ b/game/modules/tome/data/general/npcs/jelly.lua
@@ -30,7 +30,6 @@ newEntity{
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { talent_in=1, },
 	stats = { str=10, dex=15, mag=3, con=10 },
-	energy = { mod=1 },
 	combat_armor = 1, combat_def = 1,
 	never_move = 1,
 	rank = 2,
diff --git a/game/modules/tome/data/general/npcs/lich.lua b/game/modules/tome/data/general/npcs/lich.lua
index a7ed46fc88..8ccf704cbf 100644
--- a/game/modules/tome/data/general/npcs/lich.lua
+++ b/game/modules/tome/data/general/npcs/lich.lua
@@ -42,7 +42,6 @@ newEntity{
 	autolevel = "caster",
 	ai = "tactical", ai_state = { talent_in=1, },
 	ai_tactic = resolvers.tactic"ranged",
-	energy = { mod=1 },
 	stats = { str=8, dex=15, mag=20, wil=18, con=10, cun=18 },
 
 	resists = { [DamageType.NATURE] = 90, [DamageType.FIRE] = 20, [DamageType.MIND] = 100, [DamageType.LIGHT] = -60, [DamageType.DARKNESS] = 95, [DamageType.BLIGHT] = 90 },
diff --git a/game/modules/tome/data/general/npcs/major-demon.lua b/game/modules/tome/data/general/npcs/major-demon.lua
index 9ae8eaebb3..8c03cd5154 100644
--- a/game/modules/tome/data/general/npcs/major-demon.lua
+++ b/game/modules/tome/data/general/npcs/major-demon.lua
@@ -30,7 +30,6 @@ newEntity{
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
 	stats = { str=22, dex=10, mag=20, con=13 },
-	energy = { mod=1 },
 	combat_armor = 1, combat_def = 1,
 	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, QUIVER=1 },
 	combat = { dam=resolvers.mbonus(46, 20), atk=15, apr=7, dammod={str=0.7} },
@@ -45,7 +44,7 @@ newEntity{
 	resolvers.inscriptions(1, "rune"),
 	on_die = function(self, who)
 		local part = "GREATER_DEMON_BILE"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
@@ -101,7 +100,7 @@ Oh, and it is twice as big, too.]],
 	level_range = {35, nil}, exp_worth = 1,
 	rarity = 4,
 	rank = 3,
-	energy = {mod=1.4},
+	global_speed = 1.4,
 	size_category = 5,
 	autolevel = "warriormage",
 	life_rating = 20,
@@ -132,7 +131,7 @@ newEntity{ base = "BASE_NPC_MAJOR_DEMON",
 	level_range = {35, nil}, exp_worth = 1,
 	rarity = 4,
 	rank = 3,
-	energy = {mod=1.2},
+	global_speed = 1.2,
 	size_category = 3,
 	autolevel = "caster",
 	life_rating = 6,
@@ -164,7 +163,7 @@ It moves swiftly toward you, casting terrible spells and swinging its weapons at
 	level_range = {39, nil}, exp_worth = 1,
 	rarity = 6,
 	rank = 3,
-	energy = {mod=1.3},
+	global_speed = 1.3,
 	size_category = 4,
 	autolevel = "warriormage",
 	life_rating = 25,
diff --git a/game/modules/tome/data/general/npcs/minor-demon.lua b/game/modules/tome/data/general/npcs/minor-demon.lua
index 2f6d867e3c..80d9ad72fd 100644
--- a/game/modules/tome/data/general/npcs/minor-demon.lua
+++ b/game/modules/tome/data/general/npcs/minor-demon.lua
@@ -30,7 +30,6 @@ newEntity{
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
 	stats = { str=12, dex=10, mag=3, con=13 },
-	energy = { mod=1 },
 	life_rating = 7,
 	combat_armor = 1, combat_def = 1,
 	combat = { dam=resolvers.mbonus(46, 20), atk=15, apr=7, dammod={str=0.7} },
@@ -86,7 +85,7 @@ newEntity{ base = "BASE_NPC_DEMON",
 	},
 	on_die = function(self, who)
 		local part = "WRETCHLING_EYE"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/minotaur.lua b/game/modules/tome/data/general/npcs/minotaur.lua
index c62c8ec7db..20ba76d310 100644
--- a/game/modules/tome/data/general/npcs/minotaur.lua
+++ b/game/modules/tome/data/general/npcs/minotaur.lua
@@ -45,13 +45,13 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=5, },
-	energy = { mod=1.2 },
+	global_speed = 1.2,
 	stats = { str=15, dex=12, mag=6, cun=12, con=15 },
 
 	resolvers.tmasteries{ ["technique/2hweapon-offense"]=0.3, ["technique/2hweapon-cripple"]=0.3, ["technique/combat-training"]=0.3, },
 	on_die = function(self, who)
 		local part = "MINOTAUR_NOSE"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/molds.lua b/game/modules/tome/data/general/npcs/molds.lua
index fcdd979075..a39a1efb57 100644
--- a/game/modules/tome/data/general/npcs/molds.lua
+++ b/game/modules/tome/data/general/npcs/molds.lua
@@ -29,7 +29,7 @@ newEntity{
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { talent_in=1, },
 	stats = { str=10, dex=15, mag=3, con=3 },
-	energy = { mod=0.5 },
+	global_speed = 0.6,
 	infravision = 20,
 	combat_armor = 1, combat_def = 1,
 	never_move = 1,
diff --git a/game/modules/tome/data/general/npcs/multihued-drake.lua b/game/modules/tome/data/general/npcs/multihued-drake.lua
index 96072d8726..845ce7041c 100644
--- a/game/modules/tome/data/general/npcs/multihued-drake.lua
+++ b/game/modules/tome/data/general/npcs/multihued-drake.lua
@@ -35,7 +35,6 @@ newEntity{
 
 	autolevel = "drake",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
-	energy = { mod=1 },
 	stats = { str=20, dex=20, mag=30, con=16 },
 
 	knockback_immune = 1,
@@ -132,7 +131,7 @@ newEntity{ base = "BASE_NPC_MULTIHUED_DRAKE",
 	},
 	on_die = function(self, who)
 		local part = "MULTIHUED_WYRM_SCALE"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/mummy.lua b/game/modules/tome/data/general/npcs/mummy.lua
index b1c1237847..4b4221e1e3 100644
--- a/game/modules/tome/data/general/npcs/mummy.lua
+++ b/game/modules/tome/data/general/npcs/mummy.lua
@@ -30,7 +30,7 @@ newEntity{
 	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	energy = { mod=0.8 },
+	global_speed = 0.8,
 	stats = { str=14, dex=12, mag=10, con=12 },
 	infravision = 20,
 	rank = 2,
@@ -48,7 +48,7 @@ newEntity{
 	undead = 1,
 	on_die = function(self, who)
 		local part = "MUMMY_BONE"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/naga.lua b/game/modules/tome/data/general/npcs/naga.lua
index 347dd396fb..5e1bd6b003 100644
--- a/game/modules/tome/data/general/npcs/naga.lua
+++ b/game/modules/tome/data/general/npcs/naga.lua
@@ -44,11 +44,11 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
-	energy = { mod=1.2 },
+	global_speed = 1.2,
 	stats = { str=15, dex=15, mag=15, con=10 },
 	on_die = function(self, who)
 		local part = "NAGA_TONGUE"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/ooze.lua b/game/modules/tome/data/general/npcs/ooze.lua
index 83df04a465..c11b4f652a 100644
--- a/game/modules/tome/data/general/npcs/ooze.lua
+++ b/game/modules/tome/data/general/npcs/ooze.lua
@@ -30,7 +30,7 @@ newEntity{
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
 	stats = { str=10, dex=15, mag=3, con=10 },
-	energy = { mod=0.7 },
+	global_speed = 0.7,
 	combat_armor = 1, combat_def = 1,
 	rank = 1,
 	size_category = 3,
diff --git a/game/modules/tome/data/general/npcs/orc-gorbat.lua b/game/modules/tome/data/general/npcs/orc-gorbat.lua
index cddcbf768e..805440c3bb 100644
--- a/game/modules/tome/data/general/npcs/orc-gorbat.lua
+++ b/game/modules/tome/data/general/npcs/orc-gorbat.lua
@@ -46,11 +46,10 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=20, dex=8, mag=6, con=16 },
 	on_die = function(self, who)
 		local part = "ORC_HEART"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/orc-grushnak.lua b/game/modules/tome/data/general/npcs/orc-grushnak.lua
index f31cf46b86..3b342a4551 100644
--- a/game/modules/tome/data/general/npcs/orc-grushnak.lua
+++ b/game/modules/tome/data/general/npcs/orc-grushnak.lua
@@ -45,11 +45,10 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=20, dex=8, mag=6, con=16 },
 	on_die = function(self, who)
 		local part = "ORC_HEART"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/orc-rak-shor.lua b/game/modules/tome/data/general/npcs/orc-rak-shor.lua
index cb3c2dc241..7c484cdef1 100644
--- a/game/modules/tome/data/general/npcs/orc-rak-shor.lua
+++ b/game/modules/tome/data/general/npcs/orc-rak-shor.lua
@@ -44,11 +44,10 @@ newEntity{
 
 	autolevel = "caster",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
-	energy = { mod=1 },
 	stats = { str=20, dex=8, mag=6, con=16 },
 	on_die = function(self, who)
 		local part = "ORC_HEART"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/orc-vor.lua b/game/modules/tome/data/general/npcs/orc-vor.lua
index 496677b8c5..2cfb87e28c 100644
--- a/game/modules/tome/data/general/npcs/orc-vor.lua
+++ b/game/modules/tome/data/general/npcs/orc-vor.lua
@@ -46,11 +46,10 @@ newEntity{
 
 	autolevel = "caster",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
-	energy = { mod=1 },
 	stats = { str=10, dex=8, mag=20, con=16 },
 	on_die = function(self, who)
 		local part = "ORC_HEART"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/orc.lua b/game/modules/tome/data/general/npcs/orc.lua
index 7ca14cf813..e5316c374a 100644
--- a/game/modules/tome/data/general/npcs/orc.lua
+++ b/game/modules/tome/data/general/npcs/orc.lua
@@ -41,12 +41,11 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=20, dex=8, mag=6, con=16 },
 	resolvers.talents{ [Talents.T_WEAPON_COMBAT]={base=1, every=5, max=10}, },
 	on_die = function(self, who)
 		local part = "ORC_HEART"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/plant.lua b/game/modules/tome/data/general/npcs/plant.lua
index 371817c481..d592bf24f3 100644
--- a/game/modules/tome/data/general/npcs/plant.lua
+++ b/game/modules/tome/data/general/npcs/plant.lua
@@ -31,7 +31,6 @@ newEntity{
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { talent_in=3, },
 	stats = { str=10, dex=10, mag=3, con=10 },
-	energy = { mod=1 },
 	infravision = 20,
 	combat_armor = 1, combat_def = 1,
 	rank = 1,
@@ -97,7 +96,7 @@ newEntity{ base = "BASE_NPC_PLANT",
 	resolvers.talents{ [Talents.T_SUMMON]=1 },
 	on_die = function(self, who)
 		local part = "HONEY_TREE_ROOT"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/ritch.lua b/game/modules/tome/data/general/npcs/ritch.lua
index cad9be7aaa..b4dde66522 100644
--- a/game/modules/tome/data/general/npcs/ritch.lua
+++ b/game/modules/tome/data/general/npcs/ritch.lua
@@ -37,7 +37,7 @@ Vicious predators, they inject corrupting diseases into their foes, and their sh
 
 	autolevel = "slinger",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1.2 },
+	global_speed = 1.2,
 	stats = { str=15, dex=15, mag=8, con=10 },
 
 	poison_immune = 0.5,
@@ -45,7 +45,7 @@ Vicious predators, they inject corrupting diseases into their foes, and their sh
 	resists = { [DamageType.BLIGHT] = 20, [DamageType.FIRE] = 100 },
 	on_die = function(self, who)
 		local part = "RITCH_STINGER"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/rodent.lua b/game/modules/tome/data/general/npcs/rodent.lua
index b45d8eb667..f4a00a4b6e 100644
--- a/game/modules/tome/data/general/npcs/rodent.lua
+++ b/game/modules/tome/data/general/npcs/rodent.lua
@@ -29,7 +29,6 @@ newEntity{ --rodent base
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=8, dex=15, mag=3, con=5 },
 	combat_armor = 1, combat_def = 1,
 	rank = 1,
diff --git a/game/modules/tome/data/general/npcs/skeleton.lua b/game/modules/tome/data/general/npcs/skeleton.lua
index 10a66b7db4..04cdaae0c9 100644
--- a/game/modules/tome/data/general/npcs/skeleton.lua
+++ b/game/modules/tome/data/general/npcs/skeleton.lua
@@ -36,7 +36,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
-	energy = { mod=1 },
 	stats = { str=14, dex=12, mag=10, con=12 },
 
 	resolvers.racial(),
@@ -87,7 +86,7 @@ newEntity{ base = "BASE_NPC_SKELETON",
 	ai = "dumb_talented_simple", ai_state = { talent_in=3, },
 	on_die = function(self, who)
 		local part = "SKELETON_MAGE_SKULL"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/snake.lua b/game/modules/tome/data/general/npcs/snake.lua
index cdc43f787b..5379221d3a 100644
--- a/game/modules/tome/data/general/npcs/snake.lua
+++ b/game/modules/tome/data/general/npcs/snake.lua
@@ -33,7 +33,7 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { talent_in=3, ai_move="move_snake" },
-	energy = { mod=1.3 },
+	global_speed = 1.3,
 	stats = { str=14, dex=23, mag=5, con=5 },
 	combat_armor = 1, combat_def = 1,
 }
@@ -106,7 +106,7 @@ newEntity{ base = "BASE_NPC_SNAKE",
 	resolvers.talents{ [Talents.T_BITE_POISON]=3 },
 	on_die = function(self, who)
 		local part = "BLACK_MAMBA_HEAD"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
@@ -121,7 +121,7 @@ newEntity{ base = "BASE_NPC_SNAKE",
 	max_life = resolvers.rngavg(100,120),
 	combat_armor = 14, combat_def = 5,
 	combat = { dam=resolvers.levelup(12, 1, 0.7), atk=10, apr=10 },
-	energy = { mod=0.8 },
+	global_speed = 1,
 
 	resolvers.talents{ [Talents.T_CONSTRICT]=5 },
 }
diff --git a/game/modules/tome/data/general/npcs/snow-giant.lua b/game/modules/tome/data/general/npcs/snow-giant.lua
index 9eba23ea8c..5c177bac71 100644
--- a/game/modules/tome/data/general/npcs/snow-giant.lua
+++ b/game/modules/tome/data/general/npcs/snow-giant.lua
@@ -37,7 +37,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	energy = { mod=1 },
 	stats = { str=20, dex=8, mag=6, con=16 },
 
 	resolvers.inscriptions(1, "infusion"),
@@ -49,7 +48,7 @@ newEntity{
 	poison_immune = 1,
 	on_die = function(self, who)
 		local part = "SNOW_GIANT_KIDNEY"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/spider.lua b/game/modules/tome/data/general/npcs/spider.lua
index e680e5797e..a271c81a4b 100644
--- a/game/modules/tome/data/general/npcs/spider.lua
+++ b/game/modules/tome/data/general/npcs/spider.lua
@@ -35,7 +35,7 @@ newEntity{
 
 	autolevel = "spider",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
-	energy = { mod=1.2 },
+	global_speed = 1.2,
 	stats = { str=15, dex=15, mag=8, con=10 },
 
 	resolvers.inscriptions(2, "infusion"),
@@ -63,7 +63,7 @@ newEntity{ base = "BASE_NPC_SPIDER",
 	},
 	on_die = function(self, who)
 		local part = "SPIDER_SPINNERET"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
@@ -183,7 +183,7 @@ newEntity{ base = "BASE_NPC_SPIDER",
 	},
 	on_die = function(self, who)
 		local part = "FAERLHING_FANG"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/storm-drake.lua b/game/modules/tome/data/general/npcs/storm-drake.lua
index d77dab8f9e..aa5a201bea 100644
--- a/game/modules/tome/data/general/npcs/storm-drake.lua
+++ b/game/modules/tome/data/general/npcs/storm-drake.lua
@@ -34,7 +34,6 @@ newEntity{
 
 	autolevel = "drake",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	energy = { mod=1 },
 	stats = { str=20, dex=20, mag=30, con=16 },
 
 	resists = { [DamageType.LIGHTNING] = 100, },
@@ -110,7 +109,7 @@ newEntity{ base = "BASE_NPC_STORM_DRAKE",
 	},
 	on_die = function(self, who)
 		local part = "STORM_WYRM_CLAW"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/sunwall-town.lua b/game/modules/tome/data/general/npcs/sunwall-town.lua
index c88a9f98cf..3c5d828ac4 100644
--- a/game/modules/tome/data/general/npcs/sunwall-town.lua
+++ b/game/modules/tome/data/general/npcs/sunwall-town.lua
@@ -39,7 +39,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=12, dex=8, mag=6, con=10 },
 }
 
diff --git a/game/modules/tome/data/general/npcs/swarm.lua b/game/modules/tome/data/general/npcs/swarm.lua
index 5dd91b3ff9..6efcd9491e 100644
--- a/game/modules/tome/data/general/npcs/swarm.lua
+++ b/game/modules/tome/data/general/npcs/swarm.lua
@@ -31,7 +31,7 @@ newEntity{
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
 	stats = { str=1, dex=20, mag=3, con=1 },
-	energy = { mod=2 },
+	global_speed = 2,
 	infravision = 20,
 	combat_armor = 1, combat_def = 10,
 	rank = 1,
@@ -81,7 +81,7 @@ newEntity{ base = "BASE_NPC_INSECT",
 	resolvers.talents{ [Talents.T_BITE_POISON]={base=3, every=10, max=8} },
 	on_die = function(self, who)
 		local part = "HUMMERHORN_WING"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/telugoroth.lua b/game/modules/tome/data/general/npcs/telugoroth.lua
index 96ab664520..450fe49f98 100644
--- a/game/modules/tome/data/general/npcs/telugoroth.lua
+++ b/game/modules/tome/data/general/npcs/telugoroth.lua
@@ -36,7 +36,7 @@ newEntity{
 
 	autolevel = "dexmage",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=2, },
-	energy = { mod=1.5 },
+	global_speed = 1.5,
 	stats = { str=8, dex=12, mag=12, wil=12, con=10 },
 
 	resists = { [DamageType.PHYSICAL] = 10, [DamageType.TEMPORAL] = 100, },
diff --git a/game/modules/tome/data/general/npcs/thieve.lua b/game/modules/tome/data/general/npcs/thieve.lua
index 89d5724616..6f6c8a4250 100644
--- a/game/modules/tome/data/general/npcs/thieve.lua
+++ b/game/modules/tome/data/general/npcs/thieve.lua
@@ -49,7 +49,6 @@ newEntity{
 
 	autolevel = "rogue",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=5, },
-	energy = { mod=1 },
 	stats = { str=8, dex=15, mag=6, cun=15, con=7 },
 
 	resolvers.tmasteries{ ["technique/other"]=0.3, ["cunning/stealth"]=1, ["cunning/dirty"]=0.3, ["technique/dualweapon-training"]=0.3 },
diff --git a/game/modules/tome/data/general/npcs/troll.lua b/game/modules/tome/data/general/npcs/troll.lua
index 857306189d..3f2f541632 100644
--- a/game/modules/tome/data/general/npcs/troll.lua
+++ b/game/modules/tome/data/general/npcs/troll.lua
@@ -39,7 +39,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=20, dex=8, mag=6, con=16 },
 
 	open_door = true,
@@ -50,7 +49,7 @@ newEntity{
 	fear_immune = 1,
 	on_die = function(self, who)
 		local part = "TROLL_INTESTINE"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/vampire.lua b/game/modules/tome/data/general/npcs/vampire.lua
index 6b43b6f3b8..96431c5d93 100644
--- a/game/modules/tome/data/general/npcs/vampire.lua
+++ b/game/modules/tome/data/general/npcs/vampire.lua
@@ -49,7 +49,6 @@ newEntity{
 
 	autolevel = "warriormage",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=9, },
-	energy = { mod=1 },
 	stats = { str=12, dex=12, mag=12, con=12 },
 	infravision = 20,
 	life_regen = 3,
@@ -120,7 +119,7 @@ It can summon the very shades of its victims from beyond the grave to come ensla
 	resolvers.talents{ [Talents.T_STUN]={base=2, every=7, max=6}, [Talents.T_SUMMON]=1, [Talents.T_BLUR_SIGHT]={base=3, every=7, max=7}, [Talents.T_PHANTASMAL_SHIELD]={base=2, every=7, max=6}, [Talents.T_ROTTING_DISEASE]={base=3, every=7, max=7}, },
 	on_die = function(self, who)
 		local part = "ELDER_VAMPIRE_BLOOD"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
@@ -143,7 +142,7 @@ newEntity{ base = "BASE_NPC_VAMPIRE",
 	},
 	on_die = function(self, who)
 		local part = "VAMPIRE_LORD_FANG"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/vermin.lua b/game/modules/tome/data/general/npcs/vermin.lua
index 8fbcce22d9..ba05299ca7 100644
--- a/game/modules/tome/data/general/npcs/vermin.lua
+++ b/game/modules/tome/data/general/npcs/vermin.lua
@@ -28,7 +28,7 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=0.9 },
+	global_speed = 0.9,
 	stats = { str=10, dex=15, mag=3, con=3 },
 	combat_armor = 1, combat_def = 1,
 	infravision = 20,
@@ -58,7 +58,7 @@ newEntity{ base = "BASE_NPC_WORM",
 	resolvers.talents{ [Talents.T_CRAWL_ACID]=2, [Talents.T_MULTIPLY]=1 },
 	on_die = function(self, who)
 		local part = "GREEN_WORM"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/wight.lua b/game/modules/tome/data/general/npcs/wight.lua
index cbfa2dc770..eda71ccc0a 100644
--- a/game/modules/tome/data/general/npcs/wight.lua
+++ b/game/modules/tome/data/general/npcs/wight.lua
@@ -40,7 +40,6 @@ newEntity{
 
 	autolevel = "caster",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=4, },
-	energy = { mod=1 },
 	stats = { str=11, dex=11, mag=15, con=12 },
 	infravision = 20,
 	rank = 2,
@@ -60,7 +59,7 @@ newEntity{
 --	sleep_immune = 1,
 	on_die = function(self, who)
 		local part = "WIGHT_ECTOPLASM"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/xorn.lua b/game/modules/tome/data/general/npcs/xorn.lua
index 3436ea3d4e..8f7820e8c2 100644
--- a/game/modules/tome/data/general/npcs/xorn.lua
+++ b/game/modules/tome/data/general/npcs/xorn.lua
@@ -42,7 +42,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_target="target_player_radius", sense_radius=6, talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=20, dex=8, mag=6, con=16 },
 
 	resists = { [DamageType.PHYSICAL] = 20, [DamageType.FIRE] = 50, },
@@ -53,7 +52,7 @@ newEntity{
 	stone_immune = 1,
 	on_die = function(self, who)
 		local part = "XORN_FRAGMENT"
-		if game.player:hasQuest("brotherhood-of-alchemists") then 
+		if game.player:hasQuest("brotherhood-of-alchemists") then
 			game.player:hasQuest("brotherhood-of-alchemists"):need_part(who, part, self)
 		end
 	end,
diff --git a/game/modules/tome/data/general/npcs/ziguranth.lua b/game/modules/tome/data/general/npcs/ziguranth.lua
index 3b4c3d3cfb..a1e8642a39 100644
--- a/game/modules/tome/data/general/npcs/ziguranth.lua
+++ b/game/modules/tome/data/general/npcs/ziguranth.lua
@@ -47,7 +47,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=20, dex=15, mag=1, con=16, wil=19 },
 }
 
diff --git a/game/modules/tome/data/general/objects/boss-artifacts.lua b/game/modules/tome/data/general/objects/boss-artifacts.lua
index 82c05768af..3273026f7c 100644
--- a/game/modules/tome/data/general/objects/boss-artifacts.lua
+++ b/game/modules/tome/data/general/objects/boss-artifacts.lua
@@ -548,7 +548,6 @@ newEntity{ base = "BASE_AMULET",
 
 			autolevel = "warriormage",
 			ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=3, },
-			energy = { mod=1 },
 			stats = { str=12, dex=12, mag=12, con=12 },
 			life_regen = 3,
 			size_category = 3,
diff --git a/game/modules/tome/data/general/objects/egos/amulets.lua b/game/modules/tome/data/general/objects/egos/amulets.lua
index 54482e723b..6d4238c6b0 100644
--- a/game/modules/tome/data/general/objects/egos/amulets.lua
+++ b/game/modules/tome/data/general/objects/egos/amulets.lua
@@ -294,7 +294,7 @@ newEntity{
 	wielder = {
 		combat_dam = resolvers.mbonus_material(5, 5, function(e, v) return v * 3 end),
 		inc_damage = { [DamageType.PHYSICAL] = resolvers.mbonus_material(5, 5, function(e, v) return v * 0.8 end) },
-		combat_physspeed = -0.1,
+		combat_physspeed = 0.1,
 	},
 }
 
diff --git a/game/modules/tome/data/general/objects/egos/boots.lua b/game/modules/tome/data/general/objects/egos/boots.lua
index c4f45c5bcc..a99563ac59 100644
--- a/game/modules/tome/data/general/objects/egos/boots.lua
+++ b/game/modules/tome/data/general/objects/egos/boots.lua
@@ -63,7 +63,7 @@ newEntity{
 	rarity = 20,
 	cost = 60,
 	wielder = {
-		movement_speed = -0.2,
+		movement_speed = 0.2,
 	},
 }
 
@@ -197,7 +197,7 @@ newEntity{
 	wielder = {
 		fatigue = resolvers.mbonus_material(6, 4, function(e, v) return v * 1, -v end),
 		max_life=resolvers.mbonus_material(30, 30, function(e, v) return v * 0.1 end),
-		movement_speed = -0.1,
+		movement_speed = 0.1,
 	},
 }
 
diff --git a/game/modules/tome/data/general/objects/egos/light-armor.lua b/game/modules/tome/data/general/objects/egos/light-armor.lua
index 7ae68a4937..618d2d8857 100644
--- a/game/modules/tome/data/general/objects/egos/light-armor.lua
+++ b/game/modules/tome/data/general/objects/egos/light-armor.lua
@@ -43,7 +43,7 @@ newEntity{
 	cost = 35,
 	wielder = {
 		combat_def_ranged = resolvers.mbonus_material(8, 2, function(e, v) return v * 1 end),
-		movement_speed = -0.1,
+		movement_speed = 0.1,
 		inc_stats = { [Stats.STAT_DEX] = resolvers.mbonus_material(3, 2, function(e, v) return v * 3 end), },
 	},
 }
diff --git a/game/modules/tome/data/general/objects/egos/staves.lua b/game/modules/tome/data/general/objects/egos/staves.lua
index 4033d654a0..de55714f65 100644
--- a/game/modules/tome/data/general/objects/egos/staves.lua
+++ b/game/modules/tome/data/general/objects/egos/staves.lua
@@ -315,7 +315,7 @@ newEntity{
 	cost = 35,
 	wielder = {
 		combat_spellpower = resolvers.mbonus_material(7, 3, function(e, v) return v * 0.6 end),
-		movement_speed = -0.1,
+		movement_speed = 0.1,
 		inc_damage = {
 			[DamageType.TEMPORAL] = resolvers.mbonus_material(20, 5, function(e, v) return v * 0.25 end),
 		},
diff --git a/game/modules/tome/data/maps/quests/lost-merchant.lua b/game/modules/tome/data/maps/quests/lost-merchant.lua
index d7e9a49029..a083219f06 100644
--- a/game/modules/tome/data/maps/quests/lost-merchant.lua
+++ b/game/modules/tome/data/maps/quests/lost-merchant.lua
@@ -46,7 +46,6 @@ defineTile('P', "FLOOR", nil, mod.class.NPC.new{
 
 	autolevel = "rogue",
 	ai = "dumb_talented_simple", ai_state = { talent_in=5, },
-	energy = { mod=1 },
 	stats = { str=8, dex=15, mag=6, cun=15, con=7 },
 
 	resolvers.tmasteries{ ["technique/other"]=0.3, ["cunning/stealth"]=1.3, ["cunning/dirty"]=0.3, ["technique/dualweapon-training"]=0.3 },
diff --git a/game/modules/tome/data/talents/chronomancy/anomalies.lua b/game/modules/tome/data/talents/chronomancy/anomalies.lua
index 835f455b54..4f8b7f6dcb 100644
--- a/game/modules/tome/data/talents/chronomancy/anomalies.lua
+++ b/game/modules/tome/data/talents/chronomancy/anomalies.lua
@@ -319,7 +319,7 @@ newTalent{
 				combat = { dam=resolvers.mbonus(40, 15), atk=15, apr=15, dammod={mag=0.8}, damtype=DamageType.TEMPORAL },
 				body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
 				autolevel = "none",
-				energy = { mod=1.5 },
+				global_speed = 1.5,
 				stats = { str=8, dex=12, mag=12, wil= 12, con=10 },
 				ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=2, },
 				level_range = {self.level, self.level},
@@ -446,7 +446,7 @@ newTalent{
 			if #tgts <= 0 then break end
 			local a, id = rng.table(tgts)
 			table.remove(tgts, id)
-	
+
 		local px, py = self.x, self.y
 		local gx, gy = a.x, a.y
 
@@ -456,7 +456,7 @@ newTalent{
 		a:move(px, py, true)
 		game.level.map:particleEmitter(px, py, 1, "teleport")
 		game.level.map:particleEmitter(gx, gy, 1, "teleport")
-		
+
 		end
 		return true
 	end,
@@ -502,11 +502,11 @@ newTalent{
 					game.logSeen(target, "%s is drawn in by the gravity spike!", target.name:capitalize())
 				end
 			end)
-			
+
 			self:project (tg, a.x, a.y, DamageType.PHYSICAL, self:spellCrit(t.getDamage(self, t)))
 			game.level.map:particleEmitter(a.x, a.y, tg.radius, "gravity_spike", {radius=tg.radius, grids=grids, tx=a.x, ty=a.y})
 			game:playSoundNear(self, "talents/earth")
-			
+
 		end
 		return true
 	end,
@@ -597,7 +597,7 @@ newTalent{
 			table.remove(tgts, id)
 			-- Randomly pick a race
 			local race = rng.range(1, 4)
-			
+
 			-- Find space
 			for i = 1, 4 do
 				local x, y = util.findFreeGrid(a.x, a.y, 5, true, {[Map.ACTOR]=true})
@@ -605,12 +605,12 @@ newTalent{
 					game.logPlayer(self, "Not enough space to summon!")
 					return
 				end
-						
+
 				local NPC = require "mod.class.NPC"
 				local m = NPC.new{
-					type = "humanoid", display = "p", 
+					type = "humanoid", display = "p",
 					color=colors.WHITE,
-				
+
 					combat = { dam=resolvers.rngavg(1,2), atk=2, apr=0, dammod={str=0.4} },
 
 					body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1, QUIVER=1 },
@@ -623,21 +623,20 @@ newTalent{
 					open_door = true,
 
 					autolevel = "warrior",
-					energy = { mod=1 },
 					stats = { str=12, dex=8, mag=6, con=10 },
 					ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=2, },
 					level_range = {1, 3},
-						
+
 					max_life = resolvers.rngavg(30,40),
 					combat_armor = 2, combat_def = 0,
-		
+
 				--	summoner = self,
 					summoner_gain_exp=false,
 					summon_time = t.getSummonTime(self, t),
 				}
-							
+
 				m.level = 1
-		
+
 				if race == 1 then
 					m.name = "human farmer"
 					m.subtype = "human"
@@ -704,16 +703,16 @@ newTalent{
 			if #tgts <= 0 then break end
 			local a, id = rng.table(tgts)
 			table.remove(tgts, id)
-	
+
 			local x, y = util.findFreeGrid(self.x, self.y, 5, true, {[Map.ACTOR]=true})
 			if not x then
 				game.logPlayer(self, "Not enough space to summon!")
 				return
 			end
-	
+
 			a:move(x, y, true)
 			game.level.map:particleEmitter(x, y, 1, "teleport")
-				
+
 		end
 		return true
 	end,
diff --git a/game/modules/tome/data/talents/chronomancy/speed-control.lua b/game/modules/tome/data/talents/chronomancy/speed-control.lua
index 30172b1c4a..0e2feb7642 100644
--- a/game/modules/tome/data/talents/chronomancy/speed-control.lua
+++ b/game/modules/tome/data/talents/chronomancy/speed-control.lua
@@ -26,12 +26,12 @@ newTalent{
 	sustain_paradox = 75,
 	cooldown = 10,
 	tactical = { BUFF = 1, CLOSEIN = 1, ESCAPE = 1 },
-	no_energy = true, 
-	getPower = function(self, t) return 1 - 1 / (1 + ((10 + self:combatTalentSpellDamage(t, 10, 30))/ 100)) end,
+	no_energy = true,
+	getPower = function(self, t) return self:combatTalentSpellDamage(t, 10, 40) / 100 end,
 	activate = function(self, t)
 		local power = t.getPower(self, t)
 		return {
-		move = self:addTemporaryValue("movement_speed", -power)
+		move = self:addTemporaryValue("movement_speed", power)
 		}
 	end,
 	deactivate = function(self, t, p)
@@ -71,7 +71,7 @@ newTalent{
 		local _ _, _, _, x, y = self:canProject(tg, x, y)
 		x, y = checkBackfire(self, x, y)
 		local grids = self:project(tg, x, y, DamageType.STOP, t.getDuration(self, t))
-		
+
 		game.level.map:particleEmitter(x, y, tg.radius, "temporal_flash", {radius=tg.radius, tx=x, ty=y})
 		game:playSoundNear(self, "talents/tidalwave")
 		return true
diff --git a/game/modules/tome/data/talents/corruptions/shadowflame.lua b/game/modules/tome/data/talents/corruptions/shadowflame.lua
index f44a4d6efe..4559076e03 100644
--- a/game/modules/tome/data/talents/corruptions/shadowflame.lua
+++ b/game/modules/tome/data/talents/corruptions/shadowflame.lua
@@ -90,10 +90,10 @@ newTalent{
 		game:playSoundNear(self, "talents/flame")
 		self.__old_type = {self.type, self.subtype}
 		self.type, self.subtype = "demon", "major"
-		local power = 1 - 1 / (1 + self:getTalentLevel(t) * 0.03)
+		local power = self:getTalentLevel(t) * 0.03
 		return {
 			demon = self:addTemporaryValue("demon", 1),
-			speed = self:addTemporaryValue("energy", {mod=power}),
+			speed = self:addTemporaryValue("global_speed", power),
 			res = self:addTemporaryValue("resists", {[DamageType.FIRE]=self:combatTalentSpellDamage(t, 20, 30), [DamageType.DARKNESS]=self:combatTalentSpellDamage(t, 20, 35)}),
 			particle = self:addParticles(Particles.new("shadowfire", 1)),
 		}
@@ -102,7 +102,7 @@ newTalent{
 		self.type, self.subtype = unpack(self.__old_type)
 		self.__old_type = nil
 		self:removeTemporaryValue("resists", p.res)
-		self:removeTemporaryValue("energy", p.speed)
+		self:removeTemporaryValue("global_speed", p.speed)
 		self:removeTemporaryValue("demon", p.demon)
 		self:removeParticles(p.particle)
 		return true
diff --git a/game/modules/tome/data/talents/cursed/shadows.lua b/game/modules/tome/data/talents/cursed/shadows.lua
index ef356636ff..a52b3ffb18 100644
--- a/game/modules/tome/data/talents/cursed/shadows.lua
+++ b/game/modules/tome/data/talents/cursed/shadows.lua
@@ -177,7 +177,6 @@ local function createShadow(self, level, duration, target)
 		exp_worth=0,
 
 		max_life = resolvers.rngavg(15,20), life_rating = 4,
-		energy = { mod=1 },
 		stats = {
 			str=10 + math.floor(level * 0.2),
 			dex=15 + math.floor(level * 0.8),
diff --git a/game/modules/tome/data/talents/divine/glyphs.lua b/game/modules/tome/data/talents/divine/glyphs.lua
index c13dd562de..591098092b 100644
--- a/game/modules/tome/data/talents/divine/glyphs.lua
+++ b/game/modules/tome/data/talents/divine/glyphs.lua
@@ -246,7 +246,7 @@ newTalent{
 		local trap = game.level.map(tx, ty, Map.TRAP)
 		if trap then return end
 
-		local dam = -1 + 1 / (1 + (t.getSlow(self, t)))
+		local dam = t.getSlow(self, t)
 		local trap = Trap.new{
 			name = "glyph of fatigue",
 			type = "elemental", id_by_type=true, unided_name = "trap",
@@ -257,7 +257,7 @@ newTalent{
 				return false
 			end,
 			triggered = function(self, x, y, who)
-				who:setEffect(who.EFF_SLOW, 5, {power=-self.dam})
+				who:setEffect(who.EFF_SLOW, 5, {power=self.dam})
 				return true
 			end,
 			temporary = t.getDuration(self, t),
diff --git a/game/modules/tome/data/talents/gifts/summon-melee.lua b/game/modules/tome/data/talents/gifts/summon-melee.lua
index d77a4035cc..02ec8cc063 100644
--- a/game/modules/tome/data/talents/gifts/summon-melee.lua
+++ b/game/modules/tome/data/talents/gifts/summon-melee.lua
@@ -59,7 +59,7 @@ newTalent{
 			stats = {str=0, dex=0, con=0, cun=0, wil=0, mag=0},
 			inc_stats = { str=10 + self:getWil() * self:getTalentLevel(t) / 5, dex=10 + self:getTalentLevel(t) * 2, mag=5, con=15 + self:getTalentLevelRaw(self.T_RESILIENCE)*2 },
 			level_range = {self.level, self.level}, exp_worth = 0,
-			energy = { mod=1.2 },
+			global_speed = 1.2,
 
 			max_life = resolvers.rngavg(25,50),
 			life_rating = 6,
@@ -220,7 +220,7 @@ newTalent{
 
 			autolevel = "none",
 			ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=2, },
-			energy = { mod=1.2 },
+			global_speed=1.2,
 			stats = {str=0, dex=0, con=0, cun=0, wil=0, mag=0},
 			inc_stats = { str=25 + self:getWil() * self:getTalentLevel(t) / 5, dex=18, con=10 + self:getTalentLevel(t) * 2 + self:getTalentLevelRaw(self.T_RESILIENCE)*2, },
 
diff --git a/game/modules/tome/data/talents/misc/races.lua b/game/modules/tome/data/talents/misc/races.lua
index b43c848913..08be9d6cbc 100644
--- a/game/modules/tome/data/talents/misc/races.lua
+++ b/game/modules/tome/data/talents/misc/races.lua
@@ -146,7 +146,7 @@ newTalent{
 	tactical = { DEFEND = 1 },
 	action = function(self, t)
 		local power = 0.1 + self:getDex() / 210
-		self:setEffect(self.EFF_SPEED, 8, {power=1 - 1 / (1 + power)})
+		self:setEffect(self.EFF_SPEED, 8, {power=power})
 		return true
 	end,
 	info = function(self, t)
@@ -688,10 +688,10 @@ newTalent{
 	points = 5,
 	mode = "passive",
 	on_learn = function(self, t)
-		self.energy.mod = self.energy.mod + 0.03
+		self.global_speed = self.global_speed + 0.03
 	end,
 	on_unlearn = function(self, t)
-		self.energy.mod = self.energy.mod - 0.03
+		self.global_speed = self.global_speed - 0.03
 	end,
 	info = function(self, t)
 		return ([[Yeeks live fast, think fast, and sacrifice fast for the Way.
diff --git a/game/modules/tome/data/talents/spells/golemancy.lua b/game/modules/tome/data/talents/spells/golemancy.lua
index 5d85ff3889..202e0b2ea3 100644
--- a/game/modules/tome/data/talents/spells/golemancy.lua
+++ b/game/modules/tome/data/talents/spells/golemancy.lua
@@ -68,7 +68,6 @@ local function makeGolem()
 		ai = "tactical",
 		ai_state = { talent_in=1, ai_move="move_astar", ally_compassion=10 },
 		ai_tactic = resolvers.tactic"tank",
-		energy = { mod=1 },
 		stats = { str=14, dex=12, mag=12, con=12 },
 
 		-- No natural exp gain
diff --git a/game/modules/tome/data/talents/spells/nature.lua b/game/modules/tome/data/talents/spells/nature.lua
index 4be47b75b4..bde3c06f5e 100644
--- a/game/modules/tome/data/talents/spells/nature.lua
+++ b/game/modules/tome/data/talents/spells/nature.lua
@@ -135,7 +135,6 @@ newTalent{
 			desc = [[A bear summoned by the powers of nature to help you.]],
 			autolevel = "warrior",
 			ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=3, },
-			energy = { mod=1 },
 			stats = { str=18, dex=13, mag=5, con=15 },
 			resolvers.tmasteries{ ["technique/other"]=0.25 },
 
diff --git a/game/modules/tome/data/talents/spells/temporal.lua b/game/modules/tome/data/talents/spells/temporal.lua
index b11c6f9210..b4b187ef0e 100644
--- a/game/modules/tome/data/talents/spells/temporal.lua
+++ b/game/modules/tome/data/talents/spells/temporal.lua
@@ -112,16 +112,16 @@ newTalent{
 	sustain_mana = 250,
 	cooldown = 30,
 	tactical = { BUFF = 2 },
-	getHaste = function(self, t) return self:getTalentLevel(t) * 0.07 end,
+	getHaste = function(self, t) return self:getTalentLevel(t) * 0.9 end,
 	activate = function(self, t)
 		game:playSoundNear(self, "talents/spell_generic")
-		local power = 1 - 1 / (1 + t.getHaste(self, t))
+		local power = t.getHaste(self, t)
 		return {
-			speed = self:addTemporaryValue("energy", {mod=power}),
+			speed = self:addTemporaryValue("global_speed", power),
 		}
 	end,
 	deactivate = function(self, t, p)
-		self:removeTemporaryValue("energy", p.speed)
+		self:removeTemporaryValue("global_speed", p.speed)
 		return true
 	end,
 	info = function(self, t)
diff --git a/game/modules/tome/data/talents/techniques/archery.lua b/game/modules/tome/data/talents/techniques/archery.lua
index e4e1508798..4ddf040588 100644
--- a/game/modules/tome/data/talents/techniques/archery.lua
+++ b/game/modules/tome/data/talents/techniques/archery.lua
@@ -71,8 +71,9 @@ newTalent{
 	mode = "sustained",
 	points = 5,
 	require = techs_dex_req2,
-	cooldown = 30,
+	cooldown = 8,
 	sustain_stamina = 20,
+	no_energy = true,
 	tactical = { BUFF = 2 },
 	on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon() then if not silent then game.logPlayer(self, "You require a bow or sling for this talent.") end return false end return true end,
 	activate = function(self, t)
@@ -82,9 +83,11 @@ newTalent{
 			return nil
 		end
 
+		if self:isTalentActive(self.T_RAPID_SHOT) then self:forceUseTalent(self.T_RAPID_SHOT, {ignore_energy=true}) end
+
 		return {
 			move = self:addTemporaryValue("never_move", 1),
-			speed = self:addTemporaryValue("combat_physspeed", self:combatSpeed(weapon.combat) - 1 / (1 + self:getTalentLevel(t) * 0.1)),
+			speed = self:addTemporaryValue("combat_physspeed", -self:getTalentLevel(t) * 0.05),
 			crit = self:addTemporaryValue("combat_physcrit", 7 + self:getTalentLevel(t) * self:getDex(10)),
 			atk = self:addTemporaryValue("combat_dam", 4 + self:getTalentLevel(t) * self:getDex(10)),
 			dam = self:addTemporaryValue("combat_atk", 4 + self:getTalentLevel(t) * self:getDex(10)),
@@ -105,7 +108,7 @@ newTalent{
 		The effects will increase with your Dexterity stat.]]):
 		format(4 + self:getTalentLevel(t) * self:getDex(10), 4 + self:getTalentLevel(t) * self:getDex(10),
 		3 + self:getTalentLevel(t) * self:getDex(10), 7 + self:getTalentLevel(t) * self:getDex(10),
-		self:getTalentLevelRaw(t) * 10)
+		self:getTalentLevelRaw(t) * 5)
 	end,
 }
 
@@ -115,8 +118,9 @@ newTalent{
 	mode = "sustained",
 	points = 5,
 	require = techs_dex_req3,
-	cooldown = 30,
+	cooldown = 8,
 	sustain_stamina = 20,
+	no_energy = true,
 	tactical = { BUFF = 2 },
 	on_pre_use = function(self, t, silent) if not self:hasArcheryWeapon() then if not silent then game.logPlayer(self, "You require a bow or sling for this talent.") end return false end return true end,
 	activate = function(self, t)
@@ -126,8 +130,10 @@ newTalent{
 			return nil
 		end
 
+		if self:isTalentActive(self.T_AIM) then self:forceUseTalent(self.T_AIM, {ignore_energy=true}) end
+
 		return {
-			speed = self:addTemporaryValue("combat_physspeed", -self:combatSpeed(weapon.combat) + 1 / (1 + self:getTalentLevel(t) * 0.09)),
+			speed = self:addTemporaryValue("combat_physspeed", self:getTalentLevel(t) * 0.1),
 			atk = self:addTemporaryValue("combat_dam", -8 - self:getTalentLevelRaw(t) * 2.4),
 			dam = self:addTemporaryValue("combat_atk", -8 - self:getTalentLevelRaw(t) * 2.4),
 			crit = self:addTemporaryValue("combat_physcrit", -8 - self:getTalentLevelRaw(t) * 2.4),
@@ -142,7 +148,7 @@ newTalent{
 	end,
 	info = function(self, t)
 		return ([[You switch to a fluid and fast battle stance, increasing your firing speed by %d%% at the cost of your accuracy(%d), damage(%d), and critical chance(%d).]]):
-		format(self:getTalentLevel(t) * 9, -8 - self:getTalentLevelRaw(t) * 2.4, -8 - self:getTalentLevelRaw(t) * 2.4, -8 - self:getTalentLevelRaw(t) * 2.4)
+		format(self:getTalentLevel(t) * 10, -8 - self:getTalentLevelRaw(t) * 2.4, -8 - self:getTalentLevelRaw(t) * 2.4, -8 - self:getTalentLevelRaw(t) * 2.4)
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/techniques/combat-techniques.lua b/game/modules/tome/data/talents/techniques/combat-techniques.lua
index a43a64dfc3..905bbcbd7f 100644
--- a/game/modules/tome/data/talents/techniques/combat-techniques.lua
+++ b/game/modules/tome/data/talents/techniques/combat-techniques.lua
@@ -31,7 +31,7 @@ newTalent{
 	tactical = { BUFF = 1 },
 	activate = function(self, t)
 		return {
-			speed = self:addTemporaryValue("combat_physspeed", self:combatSpeed() + 1 / (1 + 0.08 * 1.3)),
+			speed = self:addTemporaryValue("combat_physspeed", -0.10),
 			atk = self:addTemporaryValue("combat_atk", 4 + (self:getTalentLevel(t) * self:getDex()) / 15),
 			crit = self:addTemporaryValue("combat_physcrit", 4 + (self:getTalentLevel(t) * self:getDex()) / 25),
 		}
@@ -45,7 +45,7 @@ newTalent{
 	info = function(self, t)
 		return ([[You focus your strikes, reducing your attack speed by %d%% and increasing your accuracy by %d and critical chance by %d%%.
 		The effects will increase with your Dexterity stat.]]):
-		format((1.3 * 8), 4 + (self:getTalentLevel(t) * self:getDex()) / 15, 4 + (self:getTalentLevel(t) * self:getDex()) / 25)
+		format(10, 4 + (self:getTalentLevel(t) * self:getDex()) / 15, 4 + (self:getTalentLevel(t) * self:getDex()) / 25)
 	end,
 }
 
@@ -137,11 +137,11 @@ newTalent{
 	require = techs_strdex_req4,
 	tactical = { BUFF = 2, CLOSEIN = 2, ESCAPE = 2 },
 	action = function(self, t)
-		self:setEffect(self.EFF_SPEED, 5, {power=1 - (1 / (1 + self:getTalentLevel(t) * 0.06))})
+		self:setEffect(self.EFF_SPEED, 5, {power=self:getTalentLevel(t) * 0.09})
 		return true
 	end,
 	info = function(self, t)
-		return ([[Through rigorous training you have learned to focus your actions for a short while, increasing your speed by %d%% for 5 turns.]]):format(self:getTalentLevel(t) * 6)
+		return ([[Through rigorous training you have learned to focus your actions for a short while, increasing your speed by %d%% for 5 turns.]]):format(self:getTalentLevel(t) * 9)
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/techniques/dualweapon.lua b/game/modules/tome/data/talents/techniques/dualweapon.lua
index 3d792ba614..4f2e78f082 100644
--- a/game/modules/tome/data/talents/techniques/dualweapon.lua
+++ b/game/modules/tome/data/talents/techniques/dualweapon.lua
@@ -88,7 +88,7 @@ newTalent{
 		end
 
 		return {
-			combat_physspeed = self:addTemporaryValue("combat_physspeed", -self:combatSpeed(weapon.combat) + 1 / (1 + self:getTalentLevel(t) * 0.09)),
+			combat_physspeed = self:addTemporaryValue("combat_physspeed", self:getTalentLevel(t) * 0.14),
 			stamina_regen = self:addTemporaryValue("stamina_regen", -6),
 		}
 	end,
@@ -100,7 +100,7 @@ newTalent{
 	info = function(self, t)
 		local weapon, offweapon = self:hasDualWeapon()
 		weapon = weapon or {}
-		return ([[Increases attack speed by %d%%, but drains stamina quickly(-6 stamina/turn).]]):format(self:combatSpeed(weapon.combat) * (self:getTalentLevel(t) * 9))
+		return ([[Increases attack speed by %d%%, but drains stamina quickly(-6 stamina/turn).]]):format(self:getTalentLevel(t) * 14)
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/techniques/unarmed-discipline.lua b/game/modules/tome/data/talents/techniques/unarmed-discipline.lua
index db933f0ab4..7dfe7c09d7 100644
--- a/game/modules/tome/data/talents/techniques/unarmed-discipline.lua
+++ b/game/modules/tome/data/talents/techniques/unarmed-discipline.lua
@@ -40,10 +40,10 @@ newTalent{
 		local x, y, target = self:getTarget(tg)
 		if not x or not y or not target then return nil end
 		if math.floor(core.fov.distance(self.x, self.y, x, y)) > 1 then return nil end
-		
+
 		local hit = target:checkHit(self:combatAttack(), target:combatDefense(), 0, 95, 5 - self:getTalentLevel(t) / 2)
 	--	local hit = self:attackTarget(target, nil, nil, true)
-		
+
 		-- Try to knockback !
 		if hit then
 			local can = function(target)
@@ -54,20 +54,20 @@ newTalent{
 					self:project(target, target.x, target.y, DamageType.PHYSICAL, t.getDamage(self, t))
 					game.logSeen(target, "%s resists the knockback!", target.name:capitalize())
 				end
-					
+
 			end
-			
+
 			if can(target) then target:knockback(self.x, self.y, t.getPush(self, t), can) end
-				
+
 			-- move the attacker back
 			self:knockback(target.x, target.y, 1)
 			self:breakGrapples()
 			self:buildCombo()
-			
+
 		else
 			game.logSeen(target, "%s misses %s.", self.name:capitalize(), target.name:capitalize())
 		end
-		
+
 		return true
 	end,
 	info = function(self, t)
@@ -89,16 +89,16 @@ newTalent{
 	getDamage = function(self, t) return getTriStat(self, t, 10, 100) * (1 + getGrapplingStyle(self, dam)) end,
 	getDamageTwo = function(self, t) return getTriStat(self, t, 10, 100) * (1.5 + getGrapplingStyle(self, dam)) end,
 	do_throw = function(self, target, t)
-			
+
 		local hit = self:checkHit(self:combatAttack(), target:combatPhysicalResist(), 0, 95, 5 - self:getTalentLevel(t) / 2)
-		
+
 		-- if grappled stun
 		if hit and target:canBe("knockback") and target:isGrappled(self) then
 			self:project(target, target.x, target.y, DamageType.PHYSICAL, self:physicalCrit(t.getDamageTwo(self, t), nil, target))
 			game.logSeen(target, "%s has been slammed into the ground!", target.name:capitalize())
 			-- see if the throw stuns the enemy
 			if hit and target:canBe("stun")then
-				target:setEffect(target.EFF_STUNNED, 2, {})		
+				target:setEffect(target.EFF_STUNNED, 2, {})
 			end
 		-- if not grappled daze
 		elseif hit and target:canBe("knockback") then
@@ -106,10 +106,10 @@ newTalent{
 			game.logSeen(target, "%s has been thrown to the ground!", target.name:capitalize())
 			-- see if the throw dazes the enemy
 			if hit and target:canBe("stun")then
-				target:setEffect(target.EFF_DAZED, 2, {})		
+				target:setEffect(target.EFF_DAZED, 2, {})
 			end
 		end
-		
+
 	end,
 	info = function(self, t)
 		local damage = t.getDamage(self, t)
@@ -130,15 +130,15 @@ newTalent{
 	sustain_stamina = 30,
 	tactical = { BUFF = 1, STAMINA = 2 },
 	getSpeed = function(self, t) return 0.1 end,
-	getStamina = function(self, t) return self:getTalentLevel(t) * 1.5 end,
+	getStamina = function(self, t) return self:getTalentLevel(t) * 0.015 end,
 	activate = function(self, t)
 		return {
-			speed = self:addTemporaryValue("energy", {mod = -t.getSpeed(self, t)}),
+			speed = self:addTemporaryValue("global_speed", -t.getSpeed(self, t)),
 			stamina = self:addTemporaryValue("stamina_regen", t.getStamina(self, t)),
 		}
 	end,
 	deactivate = function(self, t, p)
-		self:removeTemporaryValue("energy", p.speed)
+		self:removeTemporaryValue("global_speed", p.speed)
 		self:removeTemporaryValue("stamina_regen", p.stamina)
 		return true
 	end,
@@ -170,13 +170,13 @@ newTalent{
 		local tg = self:getTalentTarget(t)
 		local x, y, target = self:getTarget(tg)
 		if not x or not y then return nil end
-		
+
 		self:breakGrapples()
-		
+
 		self:project(tg, x, y, DamageType.PHYSKNOCKBACK, {dam=self:physicalCrit(t.getDamage(self, t), nil, target), dist=4})
-		
+
 		self:buildCombo()
-		
+
 		return true
 	end,
 	info = function(self, t)
diff --git a/game/modules/tome/data/timed_effects.lua b/game/modules/tome/data/timed_effects.lua
index 698b0e932f..0d089f1f37 100644
--- a/game/modules/tome/data/timed_effects.lua
+++ b/game/modules/tome/data/timed_effects.lua
@@ -599,10 +599,10 @@ newEffect{
 	on_gain = function(self, err) return "#Target# speeds up.", "+Fast" end,
 	on_lose = function(self, err) return "#Target# slows down.", "-Fast" end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("energy", {mod=eff.power})
+		eff.tmpid = self:addTemporaryValue("global_speed", eff.power)
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("energy", eff.tmpid)
+		self:removeTemporaryValue("global_speed", eff.tmpid)
 	end,
 }
 
@@ -616,11 +616,11 @@ newEffect{
 	on_gain = function(self, err) return "#Target# slows down.", "+Slow" end,
 	on_lose = function(self, err) return "#Target# speeds up.", "-Slow" end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("energy", {mod=-eff.power})
+		eff.tmpid = self:addTemporaryValue("global_speed", -eff.power)
 		eff.dur = self:updateEffectDuration(eff.dur, "slow")
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("energy", eff.tmpid)
+		self:removeTemporaryValue("global_speed", eff.tmpid)
 	end,
 }
 
@@ -1783,11 +1783,11 @@ newEffect{
 	on_lose = function(self, err) return "#Target# overcomes the gloom.", "-Slow" end,
 	activate = function(self, eff)
 		eff.particle = self:addParticles(Particles.new("gloom_slow", 1))
-		eff.tmpid = self:addTemporaryValue("energy", {mod=-eff.power})
+		eff.tmpid = self:addTemporaryValue("global_speed", -eff.power)
 		eff.dur = self:updateEffectDuration(eff.dur, "slow")
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("energy", eff.tmpid)
+		self:removeTemporaryValue("global_speed", eff.tmpid)
 		self:removeParticles(eff.particle)
 	end,
 }
@@ -1934,7 +1934,7 @@ newEffect{
 		if eff.hateLoss or 0 > 0 then eff.hateLossId = self:addTemporaryValue("hate_regen", -eff.hateLoss) end
 		if eff.critical or 0 > 0 then eff.criticalId = self:addTemporaryValue("combat_physcrit", eff.critical) end
 		if eff.damage or 0 > 0 then eff.damageId = self:addTemporaryValue("inc_damage", {[DamageType.PHYSICAL]=eff.damage}) end
-		if eff.speed or 0 > 0 then eff.speedId = self:addTemporaryValue("energy", {mod=eff.speed * 0.01}) end
+		if eff.speed or 0 > 0 then eff.speedId = self:addTemporaryValue("global_speed", eff.speed * 0.01) end
 		if eff.attack or 0 > 0 then eff.attackId = self:addTemporaryValue("combat_atk", self:combatAttack() * eff.attack * 0.01) end
 		if eff.evasion or 0 > 0 then eff.evasionId = self:addTemporaryValue("evasion", eff.evasion) end
 
@@ -1944,7 +1944,7 @@ newEffect{
 		if eff.hateLossId then self:removeTemporaryValue("hate_regen", eff.hateLossId) end
 		if eff.criticalId then self:removeTemporaryValue("combat_physcrit", eff.criticalId) end
 		if eff.damageId then self:removeTemporaryValue("inc_damage", eff.damageId) end
-		if eff.speedId then self:removeTemporaryValue("energy", eff.speedId) end
+		if eff.speedId then self:removeTemporaryValue("global_speed", eff.speedId) end
 		if eff.attackId then self:removeTemporaryValue("combat_atk", eff.attackId) end
 		if eff.evasionId then self:removeTemporaryValue("evasion", eff.evasionId) end
 
@@ -2008,10 +2008,10 @@ newEffect{
 	on_gain = function(self, err) return nil, "+Invigorated" end,
 	on_lose = function(self, err) return nil, "-Invigorated" end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("energy", {mod=eff.speed * 0.01})
+		eff.tmpid = self:addTemporaryValue("global_speed", eff.speed * 0.01)
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("energy", eff.tmpid)
+		self:removeTemporaryValue("global_speed", eff.tmpid)
 	end,
 	on_merge = function(self, old_eff, new_eff)
 		old_eff.dur = math.min(old_eff.dur + new_eff.dur, 15)
@@ -2294,13 +2294,13 @@ newEffect{
 	on_lose = function(self, err) return "#Target# slows down.", "-Wild Speed" end,
 	activate = function(self, eff)
 		eff.tmpid = self:addTemporaryValue("wild_speed", 1)
-		eff.moveid = self:addTemporaryValue("energy", {mod=self.energy.mod*eff.power/100})
+		eff.moveid = self:addTemporaryValue("global_speed", eff.power/100)
 		if self.ai_state then eff.aiid = self:addTemporaryValue("ai_state", {no_talents=1}) end -- Make AI not use talents while using it
 	end,
 	deactivate = function(self, eff)
 		self:removeTemporaryValue("wild_speed", eff.tmpid)
 		if eff.aiid then self:removeTemporaryValue("ai_state", eff.aiid) end
-		self:removeTemporaryValue("energy", eff.moveid)
+		self:removeTemporaryValue("global_speed", eff.moveid)
 	end,
 }
 
@@ -2315,13 +2315,13 @@ newEffect{
 	on_lose = function(self, err) return "#Target# slows down.", "-Step Up" end,
 	activate = function(self, eff)
 		eff.tmpid = self:addTemporaryValue("step_up", 1)
-		eff.moveid = self:addTemporaryValue("energy", {mod=self.energy.mod*eff.power/100})
+		eff.moveid = self:addTemporaryValue("global_speed", eff.power/100)
 		if self.ai_state then eff.aiid = self:addTemporaryValue("ai_state", {no_talents=1}) end -- Make AI not use talents while using it
 	end,
 	deactivate = function(self, eff)
 		self:removeTemporaryValue("step_up", eff.tmpid)
 		if eff.aiid then self:removeTemporaryValue("ai_state", eff.aiid) end
-		self:removeTemporaryValue("energy", eff.moveid)
+		self:removeTemporaryValue("global_speed", eff.moveid)
 	end,
 }
 
@@ -2336,7 +2336,7 @@ newEffect{
 	on_lose = function(self, err) return "#Target# is back to normal.", "-Lightning Speed" end,
 	activate = function(self, eff)
 		eff.tmpid = self:addTemporaryValue("lightning_speed", 1)
-		eff.moveid = self:addTemporaryValue("energy", {mod=self.energy.mod*eff.power/100})
+		eff.moveid = self:addTemporaryValue("global_speed", eff.power/100)
 		eff.resistsid = self:addTemporaryValue("resists", {
 			[DamageType.PHYSICAL]=30,
 			[DamageType.LIGHTNING]=100,
@@ -2349,7 +2349,7 @@ newEffect{
 		self:removeTemporaryValue("lightning_speed", eff.tmpid)
 		self:removeTemporaryValue("resists", eff.resistsid)
 		if eff.aiid then self:removeTemporaryValue("ai_state", eff.aiid) end
-		self:removeTemporaryValue("energy", eff.moveid)
+		self:removeTemporaryValue("global_speed", eff.moveid)
 	end,
 }
 
@@ -2811,7 +2811,7 @@ newEffect{
 newEffect{
 	name = "MADNESS_SLOW",
 	desc = "Slowed by madness",
-	long_desc = function(self, eff) return ("Madness reduces the target's global speed by %d%%."):format((1 / (1 - eff.power) - 1) * 100) end,
+	long_desc = function(self, eff) return ("Madness reduces the target's global speed by %d%%."):format(eff.power * 100) end,
 	type = "mental",
 	status = "detrimental",
 	parameters = { power=0.1 },
@@ -2819,11 +2819,11 @@ newEffect{
 	on_lose = function(self, err) return "#Target# overcomes the madness.", "-Slow" end,
 	activate = function(self, eff)
 		eff.particle = self:addParticles(Particles.new("gloom_slow", 1))
-		eff.tmpid = self:addTemporaryValue("energy", {mod=-eff.power})
+		eff.tmpid = self:addTemporaryValue("global_speed", -eff.power)
 		eff.dur = self:updateEffectDuration(eff.dur, "slow")
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("energy", eff.tmpid)
+		self:removeTemporaryValue("global_speed", eff.tmpid)
 		self:removeParticles(eff.particle)
 	end,
 }
@@ -2954,19 +2954,17 @@ newEffect{
 newEffect{
 	name = "QUICKNESS",
 	desc = "Quick",
-	long_desc = function(self, eff) return ("Increases run speed by %d%%."):format((1 / (1 - eff.power) - 1) * 100) end,
+	long_desc = function(self, eff) return ("Increases run speed by %d%%."):format(eff.power * 100) end,
 	type = "mental",
 	status = "beneficial",
 	parameters = { power=0.1 },
 	on_gain = function(self, err) return "#Target# speeds up.", "+Quick" end,
 	on_lose = function(self, err) return "#Target# slows down.", "-Quick" end,
 	activate = function(self, eff)
-		--eff.tmpid = self:addTemporaryValue("movement_speed", {mod=-eff.power})
-		self.movement_speed = (self.movement_speed or 0) - eff.power
+		eff.tmpid = self:addTemporaryValue("movement_speed", {mod=eff.power})
 	end,
 	deactivate = function(self, eff)
-		--self:removeTemporaryValue("movement_speed", eff.tmpid)
-		self.movement_speed = self.movement_speed + eff.power
+		self:removeTemporaryValue("movement_speed", eff.tmpid)
 	end,
 }
 newEffect{
@@ -3166,10 +3164,10 @@ newEffect{
 	status = "beneficial",
 	parameters = { power=10 },
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("energy", {mod=1})
+		eff.tmpid = self:addTemporaryValue("global_speed", 1)
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("energy", eff.tmpid)
+		self:removeTemporaryValue("global_speed", eff.tmpid)
 		self:setEffect(self.EFF_TEMPORAL_STUN, eff.power, {})
 	end,
 }
@@ -3675,13 +3673,13 @@ newEffect{
 	activate = function(self, eff)
 		eff.atkid = self:addTemporaryValue("combat_atk", -eff.atk)
 		eff.damid = self:addTemporaryValue("combat_dam", -eff.dam)
-		eff.tmpid = self:addTemporaryValue("energy", {mod=-0.3})
+		eff.tmpid = self:addTemporaryValue("global_speed", -0.3)
 		eff.dur = self:updateEffectDuration(eff.dur, "slow")
 	end,
 	deactivate = function(self, eff)
 		self:removeTemporaryValue("combat_atk", eff.atkid)
 		self:removeTemporaryValue("combat_dam", eff.damid)
-		self:removeTemporaryValue("energy", eff.tmpid)
+		self:removeTemporaryValue("global_speed", eff.tmpid)
 	end,
 }
 
@@ -3792,10 +3790,10 @@ newEffect{
 	on_gain = function(self, err) return "#Target# speeds up.", "+Reflexive Dodging" end,
 	on_lose = function(self, err) return "#Target# slows down.", "-Reflexive Dodging" end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("energy", {mod=eff.power})
+		eff.tmpid = self:addTemporaryValue("global_speed", eff.power)
 	end,
 	deactivate = function(self, eff)
-		self:removeTemporaryValue("energy", eff.tmpid)
+		self:removeTemporaryValue("global_speed", eff.tmpid)
 	end,
 }
 
@@ -3835,7 +3833,7 @@ newEffect{
 	on_gain = function(self, err) return "#Target# speeds up.", "+Sprint" end,
 	on_lose = function(self, err) return "#Target# slows down.", "-Sprint" end,
 	activate = function(self, eff)
-		eff.tmpid = self:addTemporaryValue("movement_speed", -eff.power)
+		eff.tmpid = self:addTemporaryValue("movement_speed", eff.power)
 	end,
 	deactivate = function(self, eff)
 		self:removeTemporaryValue("movement_speed", eff.tmpid)
diff --git a/game/modules/tome/data/zones/arena-unlock/npcs.lua b/game/modules/tome/data/zones/arena-unlock/npcs.lua
index 2495798faf..54ad3f95fc 100644
--- a/game/modules/tome/data/zones/arena-unlock/npcs.lua
+++ b/game/modules/tome/data/zones/arena-unlock/npcs.lua
@@ -37,7 +37,6 @@ newEntity{ name = "gladiator",
 	stun_immune = 0.4,
 	autolevel = "warrior",
 	ai = "tactical", ai_state = { ai_move = "move_dmap", talent_in = 1 },
-	energy = { mod = 1 },
 
 	stats = { str=15, dex=15, mag=1, con=15 },
 	desc = [[A menacing man in heavy armor, wielding a mace. He looks battle-hardened.]],
@@ -85,7 +84,6 @@ newEntity{ name = "slinger",
 	open_door = true,
 	autolevel = "slinger",
 	ai = "tactical", ai_state = { ai_move = "move_dmap", talent_in = 1 },
-	energy = { mod = 1 },
 
 	stats = { str=10, dex=15, cun=15, con=8 },
 	desc = [[A halfling slinger. He seems adept at combat.]],
@@ -138,7 +136,6 @@ newEntity{ name = "arcane blade",
 	open_door = true,
 	autolevel = "warrior",
 	ai = "tactical", ai_state = { ai_move = "move_dmap", talent_in = 1 },
-	energy = { mod = 1 },
 
 	stats = { str=20, dex=20, mag=8, con=16 },
 	desc = [[A human Arcane Blade. His body shows multiple scars from battle.]],
diff --git a/game/modules/tome/data/zones/arena/npcs.lua b/game/modules/tome/data/zones/arena/npcs.lua
index 1a080a9cf9..3dad93dc84 100644
--- a/game/modules/tome/data/zones/arena/npcs.lua
+++ b/game/modules/tome/data/zones/arena/npcs.lua
@@ -47,7 +47,6 @@ newEntity{ define_as = "BASE_NPC_ARENA1",
 	confusion_immune = 0.1,
 	fear_immune = 0.1,
 	ai = "tactical", ai_state = { ai_move = "move_dmap", talent_in = 1 },
-	energy = { mod = 1 },
 	stats = { str = 10, dex = 10, mag = 10, con = 10 },
 	resolvers.talents{ [Talents.T_HEAVY_ARMOUR_TRAINING] = 2, },
 	resolvers.equip{
diff --git a/game/modules/tome/data/zones/blighted-ruins/npcs.lua b/game/modules/tome/data/zones/blighted-ruins/npcs.lua
index 6696ef9966..796e559521 100644
--- a/game/modules/tome/data/zones/blighted-ruins/npcs.lua
+++ b/game/modules/tome/data/zones/blighted-ruins/npcs.lua
@@ -48,7 +48,6 @@ newEntity{
 
 	autolevel = "caster",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
-	energy = { mod=1 },
 	stats = { str=10, dex=8, mag=16, con=6 },
 
 	max_life = resolvers.rngavg(70,80), life_rating = 7,
diff --git a/game/modules/tome/data/zones/charred-scar/npcs.lua b/game/modules/tome/data/zones/charred-scar/npcs.lua
index 64f33b90ef..cbff4a4bf8 100644
--- a/game/modules/tome/data/zones/charred-scar/npcs.lua
+++ b/game/modules/tome/data/zones/charred-scar/npcs.lua
@@ -43,7 +43,6 @@ newEntity{
 
 	autolevel = "warriormage",
 	ai = "dumb_talented_simple", ai_state = { talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=12, dex=8, mag=6, con=10 },
 }
 
@@ -128,7 +127,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_target="charred_scar_target", talent_in=2, },
-	energy = { mod=1 },
 	stats = { str=20, dex=8, mag=6, con=16 },
 	resolvers.inscriptions(2, {}),
 }
diff --git a/game/modules/tome/data/zones/deep-bellow/npcs.lua b/game/modules/tome/data/zones/deep-bellow/npcs.lua
index 2e5671ef0d..45ae10c002 100644
--- a/game/modules/tome/data/zones/deep-bellow/npcs.lua
+++ b/game/modules/tome/data/zones/deep-bellow/npcs.lua
@@ -86,7 +86,7 @@ newEntity{ base="BASE_NPC_CORRUPTED_HORROR", define_as = "SLIMY_CRAWLER",
 It seems to come from the digestive system of the mouth.]],
 	level_range = {4, nil}, exp_worth = 0,
 	max_life = 80, life_rating = 10, fixed_rating = true,
-	movement_speed = 0.2,
+	movement_speed = 3,
 	size_category = 1,
 
 	combat = { dam=resolvers.mbonus(25, 15), damtype=DamageType.SLIME, dammod={str=1} },
diff --git a/game/modules/tome/data/zones/flooded-cave/npcs.lua b/game/modules/tome/data/zones/flooded-cave/npcs.lua
index 371f64dfbf..f07250e9c6 100644
--- a/game/modules/tome/data/zones/flooded-cave/npcs.lua
+++ b/game/modules/tome/data/zones/flooded-cave/npcs.lua
@@ -29,7 +29,7 @@ newEntity{ define_as = "UKLLMSWWIK",
 	faction="water-lair",
 	display = "D", color=colors.VIOLET,
 	desc = [[It looks like a cross between a shark and a dragon, only nastier.]],
-	energy = {mod = 1.4},
+	global_speed = 1.4,
 	level_range = {30, nil}, exp_worth = 4,
 	max_life = 250, life_rating = 27, fixed_rating = true,
 	max_stamina = 85,
diff --git a/game/modules/tome/data/zones/orc-breeding-pit/npcs.lua b/game/modules/tome/data/zones/orc-breeding-pit/npcs.lua
index 7b519f912a..89b8a196f2 100644
--- a/game/modules/tome/data/zones/orc-breeding-pit/npcs.lua
+++ b/game/modules/tome/data/zones/orc-breeding-pit/npcs.lua
@@ -28,7 +28,7 @@ newEntity{ base = "BASE_NPC_ORC",
 	rarity = 3,
 	max_life = resolvers.rngavg(30,50), life_rating = 4,
 	rank = 2,
-	movement_speed = 1.3,
+	movement_speed = 0.7,
 	melee_project = {[DamageType.SLIME] = resolvers.rngrange(10, 20)},
 	on_melee_hit = {[DamageType.SLIME] = resolvers.rngrange(10, 20)},
 	combat = { dam=resolvers.levelup(resolvers.rngavg(15,50), 1, 0.5), atk=resolvers.rngavg(15,50), dammod={str=1} },
@@ -40,7 +40,7 @@ newEntity{ base = "BASE_NPC_ORC",
 	level_range = {25, nil}, exp_worth = 0,
 	rarity = 3,
 	max_life = resolvers.rngavg(30,50), life_rating = 9, life_regen = 7,
-	movement_speed = 0.7,
+	movement_speed = 1.3,
 	melee_project = {[DamageType.SLIME] = resolvers.rngrange(10, 20)},
 	on_melee_hit = {[DamageType.SLIME] = resolvers.rngrange(10, 20)},
 	combat = { dam=resolvers.levelup(resolvers.rngavg(15,50), 1, 0.5), atk=resolvers.rngavg(15,50), dammod={str=1} },
diff --git a/game/modules/tome/data/zones/reknor/npcs.lua b/game/modules/tome/data/zones/reknor/npcs.lua
index 1aad7d21fb..74d2c3ff58 100644
--- a/game/modules/tome/data/zones/reknor/npcs.lua
+++ b/game/modules/tome/data/zones/reknor/npcs.lua
@@ -116,7 +116,7 @@ newEntity{ define_as = "HARNO",
 	name = "Harno, Herald of Last Hope",
 	display = "@", color=colors.LIGHT_BLUE,
 	desc = [[This is one of the heralds of Last Hope. He seems to be looking for you.]],
-	energy = {mod=2},
+	global_speed = 2,
 	level_range = {40, 40}, exp_worth = 0,
 	max_life = 150, life_rating = 12,
 	rank = 3,
diff --git a/game/modules/tome/data/zones/ring-of-blood/npcs.lua b/game/modules/tome/data/zones/ring-of-blood/npcs.lua
index e45fa872fa..2d10eedbf4 100644
--- a/game/modules/tome/data/zones/ring-of-blood/npcs.lua
+++ b/game/modules/tome/data/zones/ring-of-blood/npcs.lua
@@ -158,7 +158,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=20, dex=8, mag=6, con=16 },
 }
 
diff --git a/game/modules/tome/data/zones/sandworm-lair/npcs.lua b/game/modules/tome/data/zones/sandworm-lair/npcs.lua
index beaf441ad2..dab659f36f 100644
--- a/game/modules/tome/data/zones/sandworm-lair/npcs.lua
+++ b/game/modules/tome/data/zones/sandworm-lair/npcs.lua
@@ -38,7 +38,6 @@ newEntity{ define_as = "SANDWORM_TUNNELER",
 	level_range = {12, 50}, exp_worth = 0,
 	max_life = 10000,
 	faction = "sandworm-burrowers",
-	energy = {mod=1},
 	never_anger = true,
 
 	invulnerable = 1,
diff --git a/game/modules/tome/data/zones/tannen-tower/npcs.lua b/game/modules/tome/data/zones/tannen-tower/npcs.lua
index 1ec194d82e..b63a4b35ab 100644
--- a/game/modules/tome/data/zones/tannen-tower/npcs.lua
+++ b/game/modules/tome/data/zones/tannen-tower/npcs.lua
@@ -43,7 +43,6 @@ newEntity{ define_as = "TANNEN",
 	size_category = 2,
 	infravision = 20,
 	stats = { str=10, dex=12, cun=14, mag=25, con=16 },
-	movement_speed = 1.4,
 
 	instakill_immune = 1,
 	blind_immune = 1,
@@ -139,7 +138,6 @@ It is so huge that it blocks sight beyond it.]],
 	ai_tactic = resolvers.tactic"melee",
 	resolvers.inscriptions(6, "rune"),
 
-	energy = { mod=1 },
 	stats = { str=14, dex=12, mag=10, wil=67, con=12 },
 
 	open_door = true,
diff --git a/game/modules/tome/data/zones/temple-of-creation/npcs.lua b/game/modules/tome/data/zones/temple-of-creation/npcs.lua
index 7a7706f729..8eaf4ccce5 100644
--- a/game/modules/tome/data/zones/temple-of-creation/npcs.lua
+++ b/game/modules/tome/data/zones/temple-of-creation/npcs.lua
@@ -30,7 +30,7 @@ newEntity{ define_as = "SLASUL",
 	faction="temple-of-creation",
 	display = "@", color=colors.VIOLET,
 	desc = [[This powerful naga is at home in the Temple of Creation, and unlike his followers he uses a mace and a shield.]],
-	energy = {mod = 1.7},
+	global_speed = 1.7,
 	level_range = {30, nil}, exp_worth = 4,
 	max_life = 350, life_rating = 19, fixed_rating = true,
 	max_stamina = 85,
diff --git a/game/modules/tome/data/zones/town-angolwen/npcs.lua b/game/modules/tome/data/zones/town-angolwen/npcs.lua
index f5331c21c9..6e5752f190 100644
--- a/game/modules/tome/data/zones/town-angolwen/npcs.lua
+++ b/game/modules/tome/data/zones/town-angolwen/npcs.lua
@@ -105,7 +105,6 @@ newEntity{
 
 	autolevel = "caster",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=8, dex=8, mag=16, wil=18, con=10 },
 
 	emote_random = resolvers.emote_random{allow_backup_guardian=true},
diff --git a/game/modules/tome/data/zones/town-derth/npcs.lua b/game/modules/tome/data/zones/town-derth/npcs.lua
index c509357e94..f10e177d5f 100644
--- a/game/modules/tome/data/zones/town-derth/npcs.lua
+++ b/game/modules/tome/data/zones/town-derth/npcs.lua
@@ -44,7 +44,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=12, dex=8, mag=6, con=10 },
 
 	emote_random = resolvers.emote_random{allow_backup_guardian=true},
diff --git a/game/modules/tome/data/zones/town-elvala/npcs.lua b/game/modules/tome/data/zones/town-elvala/npcs.lua
index 52695d6ee1..f6e892ce91 100644
--- a/game/modules/tome/data/zones/town-elvala/npcs.lua
+++ b/game/modules/tome/data/zones/town-elvala/npcs.lua
@@ -44,7 +44,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=12, dex=8, mag=6, con=10 },
 
 	emote_random = resolvers.emote_random{allow_backup_guardian=true},
diff --git a/game/modules/tome/data/zones/town-iron-council/npcs.lua b/game/modules/tome/data/zones/town-iron-council/npcs.lua
index 8c04a82f97..1192b271ba 100644
--- a/game/modules/tome/data/zones/town-iron-council/npcs.lua
+++ b/game/modules/tome/data/zones/town-iron-council/npcs.lua
@@ -45,7 +45,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=3, },
-	energy = { mod=1 },
 	stats = { str=12, dex=8, mag=6, con=10 },
 
 	emote_random = resolvers.emote_random{allow_backup_guardian=true},
diff --git a/game/modules/tome/data/zones/town-last-hope/npcs.lua b/game/modules/tome/data/zones/town-last-hope/npcs.lua
index 5a75a3db69..514062e7e2 100644
--- a/game/modules/tome/data/zones/town-last-hope/npcs.lua
+++ b/game/modules/tome/data/zones/town-last-hope/npcs.lua
@@ -44,7 +44,6 @@ newEntity{
 
 	autolevel = "warrior",
 	ai = "dumb_talented_simple", ai_state = { ai_move="move_dmap", talent_in=1, },
-	energy = { mod=1 },
 	stats = { str=12, dex=8, mag=6, con=10 },
 
 	emote_random = resolvers.emote_random{allow_backup_guardian=true},
-- 
GitLab