diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index c398dbb5a672a92d7364e5a285f4abc50aa54a46..d1a631abde5dd2d3c03bd0ba4925f3a6d9960449 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -399,12 +399,11 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 	elseif self:checkEvasion(target) then
 		evaded = true
 		self:logCombat(target, "#Target# evades #Source#.")
-	elseif self:checkHit(atk, def) and (self:canSee(target) or self:attr("blind_fight") or rng.chance(3)) then
+	elseif self.turn_procs.auto_melee_hit or (self:checkHit(atk, def) and (self:canSee(target) or self:attr("blind_fight") or rng.chance(3))) then
 		local pres = util.bound(target:combatArmorHardiness() / 100, 0, 1)
 		if target.knowTalent and target:hasEffect(target.EFF_DUAL_WEAPON_DEFENSE) then
 			local deflect = math.min(dam, target:callTalent(target.T_DUAL_WEAPON_DEFENSE, "doDeflect"))
 			if deflect > 0 then
---				self:logCombat(target, "#Target# parries %d damage from #Source#'s attack.", deflect)
 				game:delayedLogDamage(self, target, 0, ("%s(%d parried#LAST#)"):format(DamageType:get(damtype).text_color or "#aaaaaa#", deflect), false)
 				dam = math.max(dam - deflect,0)
 				print("[ATTACK] after DUAL_WEAPON_DEFENSE", dam)
@@ -412,7 +411,6 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 		end
 		if target.knowTalent and target:hasEffect(target.EFF_GESTURE_OF_GUARDING) and not target:attr("encased_in_ice") then
 			local deflected = math.min(dam, target:callTalent(target.T_GESTURE_OF_GUARDING, "doGuard")) or 0
---			if deflected > 0 then self:logCombat(target, "#Target# dismisses %d damage from #Source#'s attack with a sweeping gesture.", deflected) end
 			if deflected > 0 then
 				game:delayedLogDamage(self, target, 0, ("%s(%d gestured#LAST#)"):format(DamageType:get(damtype).text_color or "#aaaaaa#", deflected), false)
 				dam = dam - deflected
@@ -1614,8 +1612,8 @@ function _M:physicalCrit(dam, weapon, target, atk, def, add_chance, crit_power_a
 
 	chance = util.bound(chance, 0, 100)
 
-	print("[PHYS CRIT %]", chance)
-	if rng.percent(chance) then
+	print("[PHYS CRIT %]", self.turn_procs.auto_phys_crit and 100 or chance)
+	if self.turn_procs.auto_phys_crit or rng.percent(chance) then
 		if target:hasEffect(target.EFF_OFFGUARD) then
 			crit_power_add = crit_power_add + 0.1
 		end
@@ -1650,8 +1648,8 @@ function _M:spellCrit(dam, add_chance, crit_power_add)
 		crit_power_add = crit_power_add + self:callTalent(self.T_SHADOWSTRIKE,"getMultiplier")
 	end
 
-	print("[SPELL CRIT %]", chance)
-	if rng.percent(chance) then
+	print("[SPELL CRIT %]", self.turn_procs.auto_spell_crit and 100 or chance)
+	if self.turn_procs.auto_spell_crit or rng.percent(chance) then
 		self.turn_procs.is_crit = "spell"
 		self.turn_procs.crit_power = (1.5 + crit_power_add + (self.combat_critical_power or 0) / 100)
 		dam = dam * (1.5 + crit_power_add + (self.combat_critical_power or 0) / 100)
@@ -1698,8 +1696,8 @@ function _M:mindCrit(dam, add_chance, crit_power_add)
 		crit_power_add = crit_power_add + self:callTalent(self.T_SHADOWSTRIKE,"getMultiplier")
 	end
 
-	print("[MIND CRIT %]", chance)
-	if rng.percent(chance) then
+	print("[MIND CRIT %]", self.turn_procs.auto_mind_crit and 100 or chance)
+	if self.turn_procs.auto_mind_crit or rng.percent(chance) then
 		self.turn_procs.is_crit = "mind"
 		self.turn_procs.crit_power = (1.5 + crit_power_add + (self.combat_critical_power or 0) / 100)
 		dam = dam * (1.5 + crit_power_add + (self.combat_critical_power or 0) / 100)
diff --git a/game/modules/tome/data/talents/corruptions/scourge.lua b/game/modules/tome/data/talents/corruptions/scourge.lua
index f7c45e90708b6be3e8170cfb12a35a3377d89473..48360328ae60cef4a6ace9af297b68d6af5e6de8 100644
--- a/game/modules/tome/data/talents/corruptions/scourge.lua
+++ b/game/modules/tome/data/talents/corruptions/scourge.lua
@@ -173,9 +173,9 @@ newTalent{
 		local speed1, hit1 = self:attackTargetWith(target, weapon.combat, DamageType.DARKNESS, self:combatTalentWeaponDamage(t, 0.6, 1.4))
 
 		if hit1 then
-			self.combat_physcrit = self.combat_physcrit + 100
+			self.turn_procs.auto_phys_crit = true
 			local speed2, hit2 = self:attackTargetWith(target, offweapon.combat, DamageType.BLIGHT, self:getOffHandMult(offweapon.combat, self:combatTalentWeaponDamage(t, 0.6, 1.4)))
-			self.combat_physcrit = self.combat_physcrit - 100
+			self.turn_procs.auto_phys_crit = nil
 			if hit2 and target:canBe("blind") then
 				target:setEffect(target.EFF_BLINDED, 4, {apply_power=self:combatPhysicalpower()})
 			else
diff --git a/game/modules/tome/data/talents/spells/golemancy.lua b/game/modules/tome/data/talents/spells/golemancy.lua
index 85111d484b23847a5dec6bcaecdbfdbfa24c1d3a..6a994e4387fbfd06d33de31fa04b53e9bb77f6d8 100644
--- a/game/modules/tome/data/talents/spells/golemancy.lua
+++ b/game/modules/tome/data/talents/spells/golemancy.lua
@@ -46,9 +46,9 @@ local function makeGolem(self)
 		canWearObjectCustom = function(self, o)
 			if o.type ~= "gem" then return end
 			if not self.summoner then return "Golem has no master" end
-			if not self.summoner:knowTalent(self.summoner.T_GEM_GOLEM) then return "Runic Golem talent required" end
+			if not self.summoner:knowTalent(self.summoner.T_GEM_GOLEM) then return "Master must know the Gem Golem talent" end
 			if not o.material_level then return "impossible to use this gem" end
-			if o.material_level > self.summoner:getTalentLevelRaw(self.summoner.T_GEM_GOLEM) then return "Runic Golem talent too low for this gem" end
+			if o.material_level > self.summoner:getTalentLevelRaw(self.summoner.T_GEM_GOLEM) then return "Master's Gem Golem talent too low for this gem" end
 		end,
 		equipdoll = "alchemist_golem",
 		infravision = 10,
diff --git a/game/modules/tome/data/talents/spells/staff-combat.lua b/game/modules/tome/data/talents/spells/staff-combat.lua
index 8237c3cda4df114d00faeaf0a9e84a6461d049df..fbd5b7eebd9028b769750bec8eca568c4238944c 100644
--- a/game/modules/tome/data/talents/spells/staff-combat.lua
+++ b/game/modules/tome/data/talents/spells/staff-combat.lua
@@ -159,9 +159,9 @@ newTalent{
 		local x, y, target = self:getTarget(tg)
 		if not x or not y or not target then return nil end
 		if core.fov.distance(self.x, self.y, x, y) > 1 then return nil end
-		if self:getTalentLevel(t) >= 5 then self.combat_atk = self.combat_atk + 1000 end
+		if self:getTalentLevel(t) >= 5 then self.turn_procs.auto_melee_hit = true end
 		local speed, hit = self:attackTargetWith(target, weapon.combat, nil, t.getDamage(self, t))
-		if self:getTalentLevel(t) >= 5 then self.combat_atk = self.combat_atk - 1000 end
+		if self:getTalentLevel(t) >= 5 then self.turn_procs.auto_melee_hit = nil end
 		
 		-- Try to stun !
 		if hit then
diff --git a/game/modules/tome/data/talents/techniques/2hweapon.lua b/game/modules/tome/data/talents/techniques/2hweapon.lua
index 2a4ac3b66d9772a9431d401e0b368f2dd297f2b9..ffd254f91361b71a5835e6b0910b8fc6c45516c6 100644
--- a/game/modules/tome/data/talents/techniques/2hweapon.lua
+++ b/game/modules/tome/data/talents/techniques/2hweapon.lua
@@ -175,15 +175,14 @@ newTalent{
 		if self:getTalentLevel(t) >= 4 then
 			self.combat_dam = self.combat_dam + inc
 		end
-		self.combat_physcrit = self.combat_physcrit + 100
-
+		self.turn_procs.auto_phys_crit = true
 		local speed, hit = self:attackTargetWith(target, weapon.combat, nil, self:combatTalentWeaponDamage(t, 0.8, 1.3))
 
 		if self:getTalentLevel(t) >= 4 then
 			self.combat_dam = self.combat_dam - inc
 			self:incStamina(-self.stamina / 2)
 		end
-		self.combat_physcrit = self.combat_physcrit - 100
+		self.turn_procs.auto_phys_crit = nil
 
 		-- Try to insta-kill
 		if hit then
diff --git a/game/modules/tome/data/talents/techniques/weaponshield.lua b/game/modules/tome/data/talents/techniques/weaponshield.lua
index a274a50b8a943c311a246af0ecec8d7402447ca2..57198ec94c2c061b5ca9d2df383754dc1f130f51 100644
--- a/game/modules/tome/data/talents/techniques/weaponshield.lua
+++ b/game/modules/tome/data/talents/techniques/weaponshield.lua
@@ -165,10 +165,10 @@ newTalent{
 
 		-- Second & third attack with weapon
 		if hit then
-			self.combat_physcrit = self.combat_physcrit + 1000
+			self.turn_procs.auto_phys_crit = true
 			self:attackTarget(target, nil, self:combatTalentWeaponDamage(t, 1, 1.5), true)
 			self:attackTarget(target, nil, self:combatTalentWeaponDamage(t, 1, 1.5), true)
-			self.combat_physcrit = self.combat_physcrit - 1000
+			self.turn_procs.auto_phys_crit = nil
 		end
 
 		return true