From d116705b20290517e817b219d9d3f58a0a62bd46 Mon Sep 17 00:00:00 2001
From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54>
Date: Tue, 9 Mar 2010 10:20:08 +0000
Subject: [PATCH] armor & weapon smiths in bree added egos for lites, weapons,
 shields adjusted costs for arrows armour now displays inline, just like
 weapon's damage

git-svn-id: http://svn.net-core.org/repos/t-engine4@385 51575b47-30f0-44d4-a5cc-537603b46e54
---
 game/engine/dialogs/ShowStore.lua             |  2 +-
 game/modules/tome/class/Actor.lua             | 13 ++--
 game/modules/tome/class/Object.lua            | 20 ++++-
 game/modules/tome/class/interface/Combat.lua  |  5 ++
 .../tome/data/general/objects/2haxes.lua      |  1 +
 .../tome/data/general/objects/2hmaces.lua     |  1 +
 .../tome/data/general/objects/2hswords.lua    |  1 +
 .../tome/data/general/objects/bows.lua        | 10 +--
 .../data/general/objects/cloth-armors.lua     |  1 +
 .../tome/data/general/objects/egos/lite.lua   | 19 +++++
 .../data/general/objects/egos/scrolls.lua     | 10 ++-
 .../tome/data/general/objects/egos/shield.lua | 56 ++++++++++++++
 .../tome/data/general/objects/egos/staves.lua | 18 ++++-
 .../tome/data/general/objects/egos/weapon.lua | 73 ++++++++++++++++---
 .../data/general/objects/heavy-armors.lua     |  1 +
 .../tome/data/general/objects/heavy-boots.lua |  1 +
 .../tome/data/general/objects/helms.lua       |  1 +
 .../tome/data/general/objects/knifes.lua      |  2 +-
 .../data/general/objects/leather-boots.lua    |  1 +
 .../data/general/objects/leather-caps.lua     |  1 +
 .../data/general/objects/light-armors.lua     |  1 +
 .../tome/data/general/objects/lites.lua       |  1 +
 .../data/general/objects/massive-armors.lua   |  1 +
 .../tome/data/general/objects/shields.lua     |  2 +
 .../tome/data/general/objects/slings.lua      | 10 +--
 .../tome/data/general/objects/staves.lua      |  2 +-
 .../tome/data/general/objects/swords.lua      |  2 +-
 .../tome/data/general/stores/basic.lua        | 31 ++++++++
 game/modules/tome/data/maps/towns/bree.lua    |  4 +-
 29 files changed, 254 insertions(+), 37 deletions(-)
 create mode 100644 game/modules/tome/data/general/objects/egos/lite.lua
 create mode 100644 game/modules/tome/data/general/objects/egos/shield.lua

diff --git a/game/engine/dialogs/ShowStore.lua b/game/engine/dialogs/ShowStore.lua
index 949312d61c..73392ca187 100644
--- a/game/engine/dialogs/ShowStore.lua
+++ b/game/engine/dialogs/ShowStore.lua
@@ -17,7 +17,7 @@ function _M:init(title, store_inven, actor_inven, store_filter, actor_filter, ac
 	self.list = self.store_list
 	self.sel = 1
 	self.scroll = 1
-	self.max = math.floor((self.ih - 5) / self.font_h) - 1
+	self.max = math.floor((self.ih * 0.8 - 5) / self.font_h) - 1
 
 	self:keyCommands({
 		__TEXTINPUT = function(c)
diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index 8b99fcd8bb..15a1665339 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -60,6 +60,7 @@ function _M:init(t, no_default)
 	t.esp = t.esp or {range=10}
 
 	t.on_melee_hit = t.on_melee_hit or {}
+	t.melee_project = t.melee_project or {}
 
 	-- Resistances
 	t.resists = t.resists or {}
@@ -650,12 +651,12 @@ end
 --- Can the target be applied some effects
 -- @param what a string describing what is being tried
 function _M:canBe(what)
-	if what == "poison" and self:attr("poison_immune") then return false end
-	if what == "cut" and self:attr("cut_immune") then return false end
-	if what == "blind" and self:attr("blind_immune") then return false end
-	if what == "stun" and self:attr("stun_immune") then return false end
-	if what == "knockback" and self:attr("knockback_immune") then return false end
-	if what == "instakill" and self:attr("instakill_immune") then return false end
+	if what == "poison" and rng.percent(100 * self:attr("poison_immune")) then return false end
+	if what == "cut" and rng.percent(100 * self:attr("cut_immune")) then return false end
+	if what == "blind" and rng.percent(100 * self:attr("blind_immune")) then return false end
+	if what == "stun" and rng.percent(100 * self:attr("stun_immune")) then return false end
+	if what == "knockback" and rng.percent(100 * self:attr("knockback_immune")) then return false end
+	if what == "instakill" and rng.percent(100 * self:attr("instakill_immune")) then return false end
 	return true
 end
 
diff --git a/game/modules/tome/class/Object.lua b/game/modules/tome/class/Object.lua
index a2ee2c70ba..360e4917f9 100644
--- a/game/modules/tome/class/Object.lua
+++ b/game/modules/tome/class/Object.lua
@@ -69,6 +69,8 @@ function _M:descAttribute(attr)
 	elseif attr == "COMBAT" then
 		local c = self.combat
 		return c.dam.."-"..(c.dam*(c.damrange or 1.1)).." dam, "..(c.apr or 0).." apr"
+	elseif attr == "ARMOR" then
+		return (self.wielder and self.wielder.combat_def or 0).." def, "..(self.wielder and self.wielder.combat_armor or 0).." armor"
 	elseif attr == "MONEY" then
 		return ("worth %0.2f"):format(self.money_value / 10)
 	end
@@ -151,10 +153,26 @@ function _M:getDesc()
 		desc[#desc+1] = ("Increases stats: %s."):format(table.concat(dm, ','))
 	end
 
+	if w.melee_project then
+		local rs = {}
+		for typ, dam in pairs(w.melee_project) do
+			rs[#rs+1] = ("%d %s"):format(dam, DamageType.dam_def[typ].name)
+		end
+		desc[#desc+1] = ("Damage on hit: %s."):format(table.concat(rs, ','))
+	end
+
+	if w.on_melee_hit then
+		local rs = {}
+		for typ, dam in pairs(w.on_melee_hit) do
+			rs[#rs+1] = ("%d %s"):format(dam, DamageType.dam_def[res].name)
+		end
+		desc[#desc+1] = ("Damage when hit: %s."):format(table.concat(rs, ','))
+	end
+
 	if w.resists then
 		local rs = {}
 		for res, i in pairs(w.resists) do
-			rs[#rs+1] = ("%d%% %s"):format(i, DamageType.dam_def[res].name)
+			rs[#rs+1] = ("%d%% %s"):format(i, DamageType.dam_def[typ].name)
 		end
 		desc[#desc+1] = ("Increases resistances: %s."):format(table.concat(rs, ','))
 	end
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 2a8816185f..2fa0ac8938 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -220,6 +220,11 @@ function _M:attackTargetWith(target, weapon, damtype, mult)
 		game.logSeen(target, "%s misses %s.", self.name:capitalize(), target.name)
 	end
 
+	-- Melee project
+	if hitted then for typ, dam in pairs(self.melee_project) do
+		DamageType:get(typ).projector(self, target.x, target.y, typ, dam)
+	end end
+
 	-- Reactive target on hit damage
 	if hitted then for typ, dam in pairs(target.on_melee_hit) do
 		DamageType:get(typ).projector(target, self.x, self.y, typ, dam)
diff --git a/game/modules/tome/data/general/objects/2haxes.lua b/game/modules/tome/data/general/objects/2haxes.lua
index ceea352862..8e6c95b843 100644
--- a/game/modules/tome/data/general/objects/2haxes.lua
+++ b/game/modules/tome/data/general/objects/2haxes.lua
@@ -10,6 +10,7 @@ newEntity{
 	combat = { talented = "axe", damrange = 1.5 },
 	desc = [[Massive two-handed battleaxes.]],
 	twohanded = true,
+	egos = "/data/general/objects/egos/weapon.lua", egos_chance = resolvers.mbonus(40, 5),
 }
 
 newEntity{ base = "BASE_BATTLEAXE",
diff --git a/game/modules/tome/data/general/objects/2hmaces.lua b/game/modules/tome/data/general/objects/2hmaces.lua
index 3451b6d959..5596f61ecf 100644
--- a/game/modules/tome/data/general/objects/2hmaces.lua
+++ b/game/modules/tome/data/general/objects/2hmaces.lua
@@ -10,4 +10,5 @@ newEntity{
 	combat = { talented = "mace", damrange = 1.5 },
 	desc = [[Massive two-handed maul.]],
 	twohanded = true,
+	egos = "/data/general/objects/egos/weapon.lua", egos_chance = resolvers.mbonus(40, 5),
 }
diff --git a/game/modules/tome/data/general/objects/2hswords.lua b/game/modules/tome/data/general/objects/2hswords.lua
index d6fff0b3e6..467530d595 100644
--- a/game/modules/tome/data/general/objects/2hswords.lua
+++ b/game/modules/tome/data/general/objects/2hswords.lua
@@ -10,6 +10,7 @@ newEntity{
 	combat = { talented = "sword", damrange = 1.6 },
 	desc = [[Massive two-handed swords.]],
 	twohanded = true,
+	egos = "/data/general/objects/egos/weapon.lua", egos_chance = resolvers.mbonus(40, 5),
 }
 
 newEntity{ base = "BASE_GREATSWORD",
diff --git a/game/modules/tome/data/general/objects/bows.lua b/game/modules/tome/data/general/objects/bows.lua
index adc673ca5b..71408052c3 100644
--- a/game/modules/tome/data/general/objects/bows.lua
+++ b/game/modules/tome/data/general/objects/bows.lua
@@ -82,7 +82,7 @@ newEntity{ base = "BASE_ARROW",
 	name = "elm arrow",
 	level_range = {1, 10},
 	require = { stat = { dex=11 }, },
-	cost = 5,
+	cost = 0.05,
 	combat = {
 		dam = resolvers.rngavg(7,12),
 		apr = 5,
@@ -95,7 +95,7 @@ newEntity{ base = "BASE_ARROW",
 	name = "ash arrow",
 	level_range = {10, 20},
 	require = { stat = { dex=16 }, },
-	cost = 10,
+	cost = 0.1,
 	combat = {
 		dam = resolvers.rngavg(15,22),
 		apr = 7,
@@ -108,7 +108,7 @@ newEntity{ base = "BASE_ARROW",
 	name = "yew arrow",
 	level_range = {20, 30},
 	require = { stat = { dex=24 }, },
-	cost = 15,
+	cost = 0.15,
 	combat = {
 		dam = resolvers.rngavg(28,37),
 		apr = 10,
@@ -121,7 +121,7 @@ newEntity{ base = "BASE_ARROW",
 	name = "elven-wood arrow",
 	level_range = {30, 40},
 	require = { stat = { dex=35 }, },
-	cost = 25,
+	cost = 0.25,
 	combat = {
 		dam = resolvers.rngavg(40,47),
 		apr = 14,
@@ -134,7 +134,7 @@ newEntity{ base = "BASE_ARROW",
 	name = "dragonbone arrow",
 	level_range = {40, 50},
 	require = { stat = { dex=48 }, },
-	cost = 35,
+	cost = 0.35,
 	combat = {
 		dam = resolvers.rngavg(50, 57),
 		apr = 18,
diff --git a/game/modules/tome/data/general/objects/cloth-armors.lua b/game/modules/tome/data/general/objects/cloth-armors.lua
index ebbf0d2931..d0d056dd8f 100644
--- a/game/modules/tome/data/general/objects/cloth-armors.lua
+++ b/game/modules/tome/data/general/objects/cloth-armors.lua
@@ -2,6 +2,7 @@ newEntity{
 	define_as = "BASE_CLOTH_ARMOR",
 	slot = "BODY",
 	type = "armor", subtype="cloth",
+	add_name = " (#ARMOR#)",
 	display = "[", color=colors.SLATE,
 	encumber = 2,
 	rarity = 5,
diff --git a/game/modules/tome/data/general/objects/egos/lite.lua b/game/modules/tome/data/general/objects/egos/lite.lua
new file mode 100644
index 0000000000..00a64a4157
--- /dev/null
+++ b/game/modules/tome/data/general/objects/egos/lite.lua
@@ -0,0 +1,19 @@
+newEntity{
+	name = "bright ", prefix=true,
+	level_range = {1, 50},
+	rarity = 5,
+	cost = 1,
+	wielder = {
+		lite=1,
+	},
+}
+
+newEntity{
+	name = " of clean seeing",
+	level_range = {10, 50},
+	rarity = 5,
+	cost = 1,
+	wielder = {
+		blind_immune=0.5,
+	},
+}
diff --git a/game/modules/tome/data/general/objects/egos/scrolls.lua b/game/modules/tome/data/general/objects/egos/scrolls.lua
index cf5d87cc3c..d789a2f28e 100644
--- a/game/modules/tome/data/general/objects/egos/scrolls.lua
+++ b/game/modules/tome/data/general/objects/egos/scrolls.lua
@@ -3,5 +3,13 @@ newEntity{
 	level_range = {1, 50},
 	rarity = 4,
 	cost = 0.5,
-	acid_proof = true,
+	fire_proof = true,
+}
+
+newEntity{
+	name = "long ", prefix=true,
+	level_range = {1, 50},
+	rarity = 5,
+	cost = 2,
+	multicharge = resolvers.mbonus(4, 2),
 }
diff --git a/game/modules/tome/data/general/objects/egos/shield.lua b/game/modules/tome/data/general/objects/egos/shield.lua
new file mode 100644
index 0000000000..4863ce2d59
--- /dev/null
+++ b/game/modules/tome/data/general/objects/egos/shield.lua
@@ -0,0 +1,56 @@
+newEntity{
+	name = "flaming ", prefix=true,
+	level_range = {1, 50},
+	rarity = 5,
+	cost = 8,
+	wielder = {
+		on_melee_hit={[DamageType.FIRE] = resolvers.mbonus(7, 3)},
+	},
+}
+newEntity{
+	name = "icy ", prefix=true,
+	level_range = {1, 50},
+	rarity = 5,
+	cost = 10,
+	wielder = {
+		on_melee_hit={[DamageType.ICE] = resolvers.mbonus(4, 3)},
+	},
+}
+newEntity{
+	name = "acidic ", prefix=true,
+	level_range = {1, 50},
+	rarity = 5,
+	cost = 8,
+	wielder = {
+		on_melee_hit={[DamageType.ACID] = resolvers.mbonus(7, 3)},
+	},
+}
+newEntity{
+	name = "shocking ", prefix=true,
+	level_range = {1, 50},
+	rarity = 5,
+	cost = 8,
+	wielder = {
+		on_melee_hit={[DamageType.FIRE] = resolvers.mbonus(7, 3)},
+	},
+}
+
+newEntity{
+	name = " of deflection",
+	level_range = {10, 50},
+	rarity = 15,
+	cost = 20,
+	wielder = {
+		combat_def=resolvers.mbonus(15, 4),
+	},
+}
+
+newEntity{
+	name = " of resilience",
+	level_range = {20, 50},
+	rarity = 15,
+	cost = 20,
+	wielder = {
+		max_life=resolvers.mbonus(100, 10),
+	},
+}
diff --git a/game/modules/tome/data/general/objects/egos/staves.lua b/game/modules/tome/data/general/objects/egos/staves.lua
index 22530c76c2..e6be3b4c6b 100644
--- a/game/modules/tome/data/general/objects/egos/staves.lua
+++ b/game/modules/tome/data/general/objects/egos/staves.lua
@@ -4,27 +4,37 @@ newEntity{
 	name = " of power",
 	level_range = {1, 50},
 	rarity = 4,
-	cost = 5,
+	cost = 8,
 	wielder = {
 		combat_spellpower = resolvers.mbonus(30, 3),
 	},
 }
 
 newEntity{
-	name = "charged ", prefix=true,
+	name = "shimmering ", prefix=true,
 	level_range = {1, 50},
 	rarity = 3,
-	cost = 5,
+	cost = 8,
 	wielder = {
 		max_mana = resolvers.mbonus(100, 10),
 	},
 }
 
+newEntity{
+	name = " of might",
+	level_range = {1, 50},
+	rarity = 3,
+	cost = 8,
+	wielder = {
+		combat_spellcrit = resolvers.mbonus(15, 4),
+	},
+}
+
 newEntity{
 	name = " of wizardry",
 	level_range = {25, 50},
 	rarity = 4,
-	cost = 5,
+	cost = 25,
 	wielder = {
 		combat_spellpower = resolvers.mbonus(30, 3),
 		max_mana = resolvers.mbonus(100, 10),
diff --git a/game/modules/tome/data/general/objects/egos/weapon.lua b/game/modules/tome/data/general/objects/egos/weapon.lua
index 1910ab2b0f..2bfd503da2 100644
--- a/game/modules/tome/data/general/objects/egos/weapon.lua
+++ b/game/modules/tome/data/general/objects/egos/weapon.lua
@@ -1,20 +1,60 @@
---[[
 newEntity{
 	name = "flaming ", prefix=true,
-	level_range = {1, 10},
-	rarity = 3,
+	level_range = {1, 50},
+	rarity = 5,
+	wielder = {
+		melee_project={[DamageType.FIRE] = resolvers.mbonus(25, 4)},
+	},
+}
+newEntity{
+	name = "icy ", prefix=true,
+	level_range = {15, 50},
+	rarity = 5,
+	wielder = {
+		melee_project={[DamageType.ICE] = resolvers.mbonus(15, 4)},
+	},
+}
+newEntity{
+	name = "acidic ", prefix=true,
+	level_range = {1, 50},
+	rarity = 5,
+	wielder = {
+		melee_project={[DamageType.ACID] = resolvers.mbonus(25, 4)},
+	},
+}
+newEntity{
+	name = "shocking ", prefix=true,
+	level_range = {1, 50},
+	rarity = 5,
 	wielder = {
---		melee_project={[DamageType.FIRE] = 4},
+		melee_project={[DamageType.LIGHTNING] = resolvers.mbonus(25, 4)},
 	},
 }
---]]
+newEntity{
+	name = "poisonous ", prefix=true,
+	level_range = {1, 50},
+	rarity = 5,
+	wielder = {
+		melee_project={[DamageType.POISON] = resolvers.mbonus(45, 6)},
+	},
+}
+
+newEntity{
+	name = "slime-covered ", prefix=true,
+	level_range = {10, 50},
+	rarity = 5,
+	wielder = {
+		melee_project={[DamageType.SLIME] = resolvers.mbonus(45, 6)},
+	},
+}
+
 newEntity{
 	name = " of accuracy",
 	level_range = {1, 50},
 	rarity = 3,
-	cost = 10,
+	cost = 4,
 	wielder = {
-		combat_atk = resolvers.mbonus(20),
+		combat={atk = resolvers.mbonus(20, 2)},
 	},
 }
 
@@ -22,8 +62,23 @@ newEntity{
 	name = "kinetic ", prefix=true,
 	level_range = {1, 50},
 	rarity = 3,
-	cost = 10,
+	cost = 6,
+	wielder = {
+		combat={apr = resolvers.mbonus(15, 1)},
+	},
+}
+
+newEntity{
+	name = "elemental ", prefix=true,
+	level_range = {35, 50},
+	rarity = 25,
+	cost = 35,
 	wielder = {
-		combat_apr = resolvers.mbonus(15),
+		melee_project={
+			[DamageType.FIRE] = resolvers.mbonus(25, 4),
+			[DamageType.ICE] = resolvers.mbonus(15, 4),
+			[DamageType.ACID] = resolvers.mbonus(25, 4),
+			[DamageType.LIGHTNING] = resolvers.mbonus(25, 4),
+		},
 	},
 }
diff --git a/game/modules/tome/data/general/objects/heavy-armors.lua b/game/modules/tome/data/general/objects/heavy-armors.lua
index 3935e35ecb..af140a120b 100644
--- a/game/modules/tome/data/general/objects/heavy-armors.lua
+++ b/game/modules/tome/data/general/objects/heavy-armors.lua
@@ -4,6 +4,7 @@ newEntity{
 	define_as = "BASE_HEAVY_ARMOR",
 	slot = "BODY",
 	type = "armor", subtype="heavy",
+	add_name = " (#ARMOR#)",
 	display = "[", color=colors.SLATE,
 	require = { talent = { Talents.T_HEAVY_ARMOUR_TRAINING }, },
 	encumber = 17,
diff --git a/game/modules/tome/data/general/objects/heavy-boots.lua b/game/modules/tome/data/general/objects/heavy-boots.lua
index b0f967e8ef..f66a0ff5f0 100644
--- a/game/modules/tome/data/general/objects/heavy-boots.lua
+++ b/game/modules/tome/data/general/objects/heavy-boots.lua
@@ -4,6 +4,7 @@ newEntity{
 	define_as = "BASE_HEAVY_BOOTS",
 	slot = "FEET",
 	type = "armor", subtype="feet",
+	add_name = " (#ARMOR#)",
 	display = "]", color=colors.SLATE,
 	require = { talent = { Talents.T_HEAVY_ARMOUR_TRAINING }, },
 	encumber = 3,
diff --git a/game/modules/tome/data/general/objects/helms.lua b/game/modules/tome/data/general/objects/helms.lua
index 37a9d72b85..a92093e821 100644
--- a/game/modules/tome/data/general/objects/helms.lua
+++ b/game/modules/tome/data/general/objects/helms.lua
@@ -4,6 +4,7 @@ newEntity{
 	define_as = "BASE_HELM",
 	slot = "HEAD",
 	type = "armor", subtype="head",
+	add_name = " (#ARMOR#)",
 	display = "]", color=colors.SLATE,
 	require = { talent = { Talents.T_HEAVY_ARMOUR_TRAINING }, },
 	encumber = 3,
diff --git a/game/modules/tome/data/general/objects/knifes.lua b/game/modules/tome/data/general/objects/knifes.lua
index 910ed99528..682971b387 100644
--- a/game/modules/tome/data/general/objects/knifes.lua
+++ b/game/modules/tome/data/general/objects/knifes.lua
@@ -8,7 +8,7 @@ newEntity{
 	rarity = 3,
 	combat = { talented = "knife", damrange = 1.3 },
 	desc = [[Sharp, long, and deadly.]],
---	egos = "/data/general/objects/egos/swords.lua", egos_chance = resolvers.mbonus(40, 5),
+	egos = "/data/general/objects/egos/weapon.lua", egos_chance = resolvers.mbonus(40, 5),
 }
 
 newEntity{ base = "BASE_KNIFE",
diff --git a/game/modules/tome/data/general/objects/leather-boots.lua b/game/modules/tome/data/general/objects/leather-boots.lua
index e767153219..ec58a87d5b 100644
--- a/game/modules/tome/data/general/objects/leather-boots.lua
+++ b/game/modules/tome/data/general/objects/leather-boots.lua
@@ -2,6 +2,7 @@ newEntity{
 	define_as = "BASE_LEATHER_BOOT",
 	slot = "FEET",
 	type = "armor", subtype="feet",
+	add_name = " (#ARMOR#)",
 	display = "]", color=colors.UMBER,
 	encumber = 2,
 	rarity = 6,
diff --git a/game/modules/tome/data/general/objects/leather-caps.lua b/game/modules/tome/data/general/objects/leather-caps.lua
index eac0a459c2..b81a50cd37 100644
--- a/game/modules/tome/data/general/objects/leather-caps.lua
+++ b/game/modules/tome/data/general/objects/leather-caps.lua
@@ -2,6 +2,7 @@ newEntity{
 	define_as = "BASE_LEATHER_CAP",
 	slot = "HEAD",
 	type = "armor", subtype="head",
+	add_name = " (#ARMOR#)",
 	display = "]", color=colors.UMBER,
 	encumber = 2,
 	rarity = 6,
diff --git a/game/modules/tome/data/general/objects/light-armors.lua b/game/modules/tome/data/general/objects/light-armors.lua
index 4ff9924c4c..19cdc1597b 100644
--- a/game/modules/tome/data/general/objects/light-armors.lua
+++ b/game/modules/tome/data/general/objects/light-armors.lua
@@ -2,6 +2,7 @@ newEntity{
 	define_as = "BASE_LIGHT_ARMOR",
 	slot = "BODY",
 	type = "armor", subtype="light",
+	add_name = " (#ARMOR#)",
 	display = "[", color=colors.SLATE,
 	encumber = 17,
 	rarity = 5,
diff --git a/game/modules/tome/data/general/objects/lites.lua b/game/modules/tome/data/general/objects/lites.lua
index 455446745c..5f7add9982 100644
--- a/game/modules/tome/data/general/objects/lites.lua
+++ b/game/modules/tome/data/general/objects/lites.lua
@@ -4,6 +4,7 @@ newEntity{
 	type = "lite", subtype="lite",
 	display = "~",
 	desc = [[Lite up the dark places of the world!]],
+	egos = "/data/general/objects/egos/lite.lua", egos_chance = resolvers.mbonus(15, 3),
 }
 
 newEntity{ base = "BASE_LITE",
diff --git a/game/modules/tome/data/general/objects/massive-armors.lua b/game/modules/tome/data/general/objects/massive-armors.lua
index a64597e3b4..6a16aa6c55 100644
--- a/game/modules/tome/data/general/objects/massive-armors.lua
+++ b/game/modules/tome/data/general/objects/massive-armors.lua
@@ -4,6 +4,7 @@ newEntity{
 	define_as = "BASE_MASSIVE_ARMOR",
 	slot = "BODY",
 	type = "armor", subtype="massive",
+	add_name = " (#ARMOR#)",
 	display = "[", color=colors.SLATE,
 	require = { talent = { Talents.T_MASSIVE_ARMOUR_TRAINING }, },
 	encumber = 17,
diff --git a/game/modules/tome/data/general/objects/shields.lua b/game/modules/tome/data/general/objects/shields.lua
index 730793b14b..a534a7bf53 100644
--- a/game/modules/tome/data/general/objects/shields.lua
+++ b/game/modules/tome/data/general/objects/shields.lua
@@ -2,9 +2,11 @@ newEntity{
 	define_as = "BASE_SHIELD",
 	slot = "OFFHAND",
 	type = "armor", subtype="shield",
+	add_name = " (#ARMOR#)",
 	display = ")", color=colors.UMBER,
 	encumber = 7,
 	desc = [[Handheld deflection devices]],
+	egos = "/data/general/objects/egos/shield.lua", egos_chance = resolvers.mbonus(40, 5),
 }
 
 -- All shields have a "special_combat" field, this is used to compute damage mde with them
diff --git a/game/modules/tome/data/general/objects/slings.lua b/game/modules/tome/data/general/objects/slings.lua
index 81d5122168..3eb6b07258 100644
--- a/game/modules/tome/data/general/objects/slings.lua
+++ b/game/modules/tome/data/general/objects/slings.lua
@@ -81,7 +81,7 @@ newEntity{ base = "BASE_SHOT",
 	name = "iron shot",
 	level_range = {1, 10},
 	require = { stat = { dex=11 }, },
-	cost = 5,
+	cost = 0.05,
 	combat = {
 		dam = resolvers.rngavg(7,12),
 		apr = 1,
@@ -94,7 +94,7 @@ newEntity{ base = "BASE_SHOT",
 	name = "steel shot",
 	level_range = {10, 20},
 	require = { stat = { dex=16 }, },
-	cost = 10,
+	cost = 0.10,
 	combat = {
 		dam = resolvers.rngavg(15,22),
 		apr = 2,
@@ -107,7 +107,7 @@ newEntity{ base = "BASE_SHOT",
 	name = "dwarven-steel shot",
 	level_range = {20, 30},
 	require = { stat = { dex=24 }, },
-	cost = 15,
+	cost = 0.15,
 	combat = {
 		dam = resolvers.rngavg(28,37),
 		apr = 3,
@@ -120,7 +120,7 @@ newEntity{ base = "BASE_SHOT",
 	name = "galvorn shot",
 	level_range = {30, 40},
 	require = { stat = { dex=35 }, },
-	cost = 25,
+	cost = 0.25,
 	combat = {
 		dam = resolvers.rngavg(40,47),
 		apr = 5,
@@ -133,7 +133,7 @@ newEntity{ base = "BASE_SHOT",
 	name = "mithril shot",
 	level_range = {40, 50},
 	require = { stat = { dex=48 }, },
-	cost = 35,
+	cost = 0.35,
 	combat = {
 		dam = resolvers.rngavg(50, 57),
 		apr = 6,
diff --git a/game/modules/tome/data/general/objects/staves.lua b/game/modules/tome/data/general/objects/staves.lua
index 2a77fe31d9..5fc7efe78c 100644
--- a/game/modules/tome/data/general/objects/staves.lua
+++ b/game/modules/tome/data/general/objects/staves.lua
@@ -7,7 +7,7 @@ newEntity{
 	encumber = 5,
 	rarity = 3,
 	desc = [[Staves designed for wielders of magic, by the greats of the art.]],
-	egos = "/data/general/objects/egos/staves.lua", egos_chance = 100,--resolvers.mbonus(40, 5),
+	egos = "/data/general/objects/egos/staves.lua", egos_chance = resolvers.mbonus(40, 5),
 }
 
 newEntity{ base = "BASE_STAFF",
diff --git a/game/modules/tome/data/general/objects/swords.lua b/game/modules/tome/data/general/objects/swords.lua
index 315ffdff21..73b03ced05 100644
--- a/game/modules/tome/data/general/objects/swords.lua
+++ b/game/modules/tome/data/general/objects/swords.lua
@@ -8,7 +8,7 @@ newEntity{
 	rarity = 3,
 	combat = { talented = "sword", damrange = 1.4},
 	desc = [[Sharp, long, and deadly.]],
---	egos = "/data/general/objects/egos/swords.lua", egos_chance = resolvers.mbonus(40, 5),
+	egos = "/data/general/objects/egos/weapon.lua", egos_chance = resolvers.mbonus(40, 5),
 }
 
 newEntity{ base = "BASE_LONGSWORD",
diff --git a/game/modules/tome/data/general/stores/basic.lua b/game/modules/tome/data/general/stores/basic.lua
index 671bdb7617..e7cd2e4b6c 100644
--- a/game/modules/tome/data/general/stores/basic.lua
+++ b/game/modules/tome/data/general/stores/basic.lua
@@ -16,6 +16,37 @@ newEntity{
 	},
 }
 
+newEntity{
+	define_as = "ARMOR",
+	name = "armour smith",
+	display = '2', color=colors.UMBER,
+	store = {
+		restock_after = 200,
+		buy_percent = 10,
+		min_fill = 10,
+		max_fill = 20,
+		filters = {
+			{type="armor", id=true},
+		},
+	},
+}
+
+newEntity{
+	define_as = "WEAPON",
+	name = "weapon mith",
+	display = '3', color=colors.UMBER,
+	store = {
+		restock_after = 200,
+		buy_percent = 10,
+		min_fill = 10,
+		max_fill = 20,
+		filters = {
+			{type="weapon", id=true},
+			{type="ammo", id=true},
+		},
+	},
+}
+
 newEntity{
 	define_as = "POTION",
 	name = "alchemist store",
diff --git a/game/modules/tome/data/maps/towns/bree.lua b/game/modules/tome/data/maps/towns/bree.lua
index a5507e9c18..6ea3c50e9b 100644
--- a/game/modules/tome/data/maps/towns/bree.lua
+++ b/game/modules/tome/data/maps/towns/bree.lua
@@ -14,8 +14,8 @@ quickEntity('-', {name='grass', display='.', color=colors.LIGHT_GREEN, image="te
 quickEntity('^', {name='hills', display='^', color=colors.SLATE, image="terrain/mountain.png", block_move=true, block_sight=true})
 
 quickEntity('1', {name="Closed store", display='1', color=colors.LIGHT_UMBER, block_move=true, block_sight=true, image="terrain/wood_store_closed.png"})
-quickEntity('2', {name="Closed store", display='2', color=colors.LIGHT_UMBER, block_move=true, block_sight=true, image="terrain/wood_store_closed.png"})
-quickEntity('3', {name="Closed store", display='3', color=colors.LIGHT_UMBER, block_move=true, block_sight=true, image="terrain/wood_store_closed.png"})
+quickEntity('2', {name="Armour Smith", display='2', color=colors.UMBER, resolvers.store("ARMOR"), image="terrain/wood_store_armor.png"})
+quickEntity('3', {name="Weapon Smith", display='3', color=colors.UMBER, resolvers.store("WEAPON"), image="terrain/wood_store_weapon.png"})
 quickEntity('4', {name="Alchemist", display='4', color=colors.LIGHT_BLUE, resolvers.store("POTION"), image="terrain/wood_store_potion.png"})
 quickEntity('5', {name="Scribe", display='5', color=colors.WHITE, resolvers.store("SCROLL"), image="terrain/wood_store_book.png"})
 quickEntity('6', {name="Closed store", display='6', color=colors.LIGHT_UMBER, block_move=true, block_sight=true, image="terrain/wood_store_closed.png"})
-- 
GitLab